--- linux-2.6.32.orig/MAINTAINERS +++ linux-2.6.32/MAINTAINERS @@ -5594,9 +5594,11 @@ F: drivers/net/wireless/rndis_wlan.c USB XHCI DRIVER -M: Sarah Sharp +M: Sarah Sharp L: linux-usb@vger.kernel.org S: Supported +F: drivers/usb/host/xhci* +F: drivers/usb/host/pci-quirks* USB ZC0301 DRIVER M: Luca Risolia @@ -5718,6 +5720,14 @@ S: Maintained F: drivers/net/vmxnet3/ +VMware PVSCSI driver +M: Alok Kataria +M: VMware PV-Drivers +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/vmw_pvscsi.c +F: drivers/scsi/vmw_pvscsi.h + VOLTAGE AND CURRENT REGULATOR FRAMEWORK M: Liam Girdwood M: Mark Brown --- linux-2.6.32.orig/Makefile +++ linux-2.6.32/Makefile @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 -EXTRAVERSION = +EXTRAVERSION = .15+drm33.5 NAME = Man-Eating Seals of Antiquity # *DOCUMENTATION* @@ -331,14 +331,23 @@ AFLAGS_KERNEL = CFLAGS_GCOV = -fprofile-arcs -ftest-coverage +# Prefer linux-backports-modules +ifneq ($(KBUILD_SRC),) +ifneq ($(shell if test -e $(KBUILD_OUTPUT)/ubuntu-build; then echo yes; fi),yes) +UBUNTUINCLUDE := -I/usr/src/linux-headers-lbm-$(KERNELRELEASE) +endif +endif # Use LINUXINCLUDE when you must reference the include/ directory. # Needed to be compatible with the O= option -LINUXINCLUDE := -Iinclude \ +LINUXINCLUDE := $(UBUNTUINCLUDE) -Iinclude \ $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \ -I$(srctree)/arch/$(hdr-arch)/include \ -include include/linux/autoconf.h +# UBUNTU: Include our third party driver stuff too +LINUXINCLUDE += -Iubuntu/include $(if $(KBUILD_SRC),-I$(srctree)/ubuntu/include) + KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ @@ -464,12 +473,12 @@ # Carefully list dependencies so we do not try to build scripts twice # in parallel PHONY += scripts -scripts: scripts_basic include/config/auto.conf +scripts: scripts_basic include/config/auto.conf include/config/tristate.conf $(Q)$(MAKE) $(build)=$(@) # Objects we will link into vmlinux / subdirs we need to visit init-y := init/ -drivers-y := drivers/ sound/ firmware/ +drivers-y := drivers/ sound/ firmware/ ubuntu/ net-y := net/ libs-y := lib/ core-y := usr/ @@ -491,7 +500,7 @@ # with it and forgot to run make oldconfig. # if auto.conf.cmd is missing then we are probably in a cleaned tree so # we execute the config step to be sure to catch updated Kconfig files -include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd +include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig else # external modules needs include/linux/autoconf.h and include/config/auto.conf @@ -876,6 +885,9 @@ PHONY += $(vmlinux-dirs) $(vmlinux-dirs): prepare scripts $(Q)$(MAKE) $(build)=$@ +ifdef CONFIG_MODULES + $(Q)$(MAKE) $(modbuiltin)=$@ +endif # Build the kernel release string # @@ -1126,6 +1138,7 @@ PHONY += modules modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order + $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.builtin) > $(objtree)/modules.builtin @$(kecho) ' Building modules, stage 2.'; $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild @@ -1155,6 +1168,7 @@ ln -s $(objtree) $(MODLIB)/build ; \ fi @cp -f $(objtree)/modules.order $(MODLIB)/ + @cp -f $(objtree)/modules.builtin $(MODLIB)/ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst # This depmod is only for convenience to give the initial @@ -1218,6 +1232,7 @@ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '*.symtypes' -o -name 'modules.order' \ -o -name 'Module.markers' -o -name '.tmp_*.o.*' \ + -o -name 'modules.builtin' \ -o -name '*.gcno' \) -type f -print | xargs rm -f # mrproper - Delete all generated files, including .config @@ -1416,7 +1431,8 @@ clean: rm-dirs := $(MODVERDIR) clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \ $(KBUILD_EXTMOD)/Module.markers \ - $(KBUILD_EXTMOD)/modules.order + $(KBUILD_EXTMOD)/modules.order \ + $(KBUILD_EXTMOD)/modules.builtin clean: $(clean-dirs) $(call cmd,rmdirs) $(call cmd,rmfiles) --- linux-2.6.32.orig/drivers/Makefile +++ linux-2.6.32/drivers/Makefile @@ -9,7 +9,6 @@ obj-$(CONFIG_PCI) += pci/ obj-$(CONFIG_PARISC) += parisc/ obj-$(CONFIG_RAPIDIO) += rapidio/ -obj-y += video/ obj-$(CONFIG_ACPI) += acpi/ obj-$(CONFIG_SFI) += sfi/ # PnP must come after ACPI since it will eventually need to check if acpi @@ -17,6 +16,7 @@ obj-$(CONFIG_PNP) += pnp/ obj-$(CONFIG_ARM_AMBA) += amba/ +obj-$(CONFIG_VIRTIO) += virtio/ obj-$(CONFIG_XEN) += xen/ # regulators early, since some subsystems rely on them to initialize @@ -28,6 +28,8 @@ # gpu/ comes after char for AGP vs DRM startup obj-y += gpu/ +# video/ needs to come after gpu for framebuffer fallback. +obj-y += video/ obj-$(CONFIG_CONNECTOR) += connector/ @@ -106,7 +108,6 @@ obj-$(CONFIG_PPC_PS3) += ps3/ obj-$(CONFIG_OF) += of/ obj-$(CONFIG_SSB) += ssb/ -obj-$(CONFIG_VIRTIO) += virtio/ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ obj-y += platform/ --- linux-2.6.32.orig/drivers/cdrom/cdrom.c +++ linux-2.6.32/drivers/cdrom/cdrom.c @@ -290,7 +290,7 @@ /* default compatibility mode */ static int autoclose=1; static int autoeject; -static int lockdoor = 1; +static int lockdoor = 0; /* will we ever get to use this... sigh. */ static int check_media_type; /* automatically restart mrw format */ --- linux-2.6.32.orig/drivers/clocksource/sh_mtu2.c +++ linux-2.6.32/drivers/clocksource/sh_mtu2.c @@ -221,15 +221,15 @@ ced->cpumask = cpumask_of(0); ced->set_mode = sh_mtu2_clock_event_mode; + pr_info("sh_mtu2: %s used for clock events\n", ced->name); + clockevents_register_device(ced); + ret = setup_irq(p->irqaction.irq, &p->irqaction); if (ret) { pr_err("sh_mtu2: failed to request irq %d\n", p->irqaction.irq); return; } - - pr_info("sh_mtu2: %s used for clock events\n", ced->name); - clockevents_register_device(ced); } static int sh_mtu2_register(struct sh_mtu2_priv *p, char *name, --- linux-2.6.32.orig/drivers/clocksource/sh_tmu.c +++ linux-2.6.32/drivers/clocksource/sh_tmu.c @@ -323,15 +323,15 @@ ced->set_next_event = sh_tmu_clock_event_next; ced->set_mode = sh_tmu_clock_event_mode; + pr_info("sh_tmu: %s used for clock events\n", ced->name); + clockevents_register_device(ced); + ret = setup_irq(p->irqaction.irq, &p->irqaction); if (ret) { pr_err("sh_tmu: failed to request irq %d\n", p->irqaction.irq); return; } - - pr_info("sh_tmu: %s used for clock events\n", ced->name); - clockevents_register_device(ced); } static int sh_tmu_register(struct sh_tmu_priv *p, char *name, --- linux-2.6.32.orig/drivers/clocksource/sh_cmt.c +++ linux-2.6.32/drivers/clocksource/sh_cmt.c @@ -603,18 +603,13 @@ p->irqaction.handler = sh_cmt_interrupt; p->irqaction.dev_id = p; p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL; - ret = setup_irq(irq, &p->irqaction); - if (ret) { - pr_err("sh_cmt: failed to request irq %d\n", irq); - goto err1; - } /* get hold of clock */ p->clk = clk_get(&p->pdev->dev, cfg->clk); if (IS_ERR(p->clk)) { pr_err("sh_cmt: cannot get clock \"%s\"\n", cfg->clk); ret = PTR_ERR(p->clk); - goto err2; + goto err1; } if (resource_size(res) == 6) { @@ -627,14 +622,25 @@ p->clear_bits = ~0xc000; } - return sh_cmt_register(p, cfg->name, - cfg->clockevent_rating, - cfg->clocksource_rating); - err2: - remove_irq(irq, &p->irqaction); - err1: + ret = sh_cmt_register(p, cfg->name, + cfg->clockevent_rating, + cfg->clocksource_rating); + if (ret) { + pr_err("sh_cmt: registration failed\n"); + goto err1; + } + + ret = setup_irq(irq, &p->irqaction); + if (ret) { + pr_err("sh_cmt: failed to request irq %d\n", irq); + goto err1; + } + + return 0; + +err1: iounmap(p->mapbase); - err0: +err0: return ret; } --- linux-2.6.32.orig/drivers/pnp/isapnp/core.c +++ linux-2.6.32/drivers/pnp/isapnp/core.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include "../base.h" @@ -1002,7 +1003,7 @@ .disable = isapnp_disable_resources, }; -static int __init isapnp_init(void) +static int __init real_isapnp_init(void) { int cards; struct pnp_card *card; @@ -1096,6 +1097,15 @@ return 0; } +static void __init async_isapnp_init(void *unused, async_cookie_t cookie) +{ + (void)real_isapnp_init(); +} + +static int __init isapnp_init(void) +{ + async_schedule(async_isapnp_init, NULL); +} device_initcall(isapnp_init); /* format is: noisapnp */ --- linux-2.6.32.orig/drivers/s390/cio/device.c +++ linux-2.6.32/drivers/s390/cio/device.c @@ -1292,7 +1292,7 @@ sch->private = kzalloc(sizeof(struct io_subchannel_private), GFP_KERNEL | GFP_DMA); if (!sch->private) - goto out_err; + goto out_schedule; /* * First check if a fitting device may be found amongst the * disconnected devices or in the orphanage. @@ -1317,7 +1317,7 @@ } cdev = io_subchannel_create_ccwdev(sch); if (IS_ERR(cdev)) - goto out_err; + goto out_schedule; rc = io_subchannel_recog(cdev, sch); if (rc) { spin_lock_irqsave(sch->lock, flags); @@ -1325,9 +1325,7 @@ spin_unlock_irqrestore(sch->lock, flags); } return 0; -out_err: - kfree(sch->private); - sysfs_remove_group(&sch->dev.kobj, &io_subchannel_attr_group); + out_schedule: io_subchannel_schedule_removal(sch); return 0; @@ -1341,13 +1339,14 @@ cdev = sch_get_cdev(sch); if (!cdev) - return 0; + goto out_free; /* Set ccw device to not operational and drop reference. */ spin_lock_irqsave(cdev->ccwlock, flags); sch_set_cdev(sch, NULL); cdev->private->state = DEV_STATE_NOT_OPER; spin_unlock_irqrestore(cdev->ccwlock, flags); ccw_device_unregister(cdev); +out_free: kfree(sch->private); sysfs_remove_group(&sch->dev.kobj, &io_subchannel_attr_group); return 0; --- linux-2.6.32.orig/drivers/s390/cio/device_fsm.c +++ linux-2.6.32/drivers/s390/cio/device_fsm.c @@ -1080,14 +1080,14 @@ ccw_device_start_id(cdev, 0); } -static void -ccw_device_offline_irq(struct ccw_device *cdev, enum dev_event dev_event) +static void ccw_device_disabled_irq(struct ccw_device *cdev, + enum dev_event dev_event) { struct subchannel *sch; sch = to_subchannel(cdev->dev.parent); /* - * An interrupt in state offline means a previous disable was not + * An interrupt in a disabled state means a previous disable was not * successful - should not happen, but we try to disable again. */ cio_disable_subchannel(sch); @@ -1150,25 +1150,12 @@ } /* - * Bug operation action. - */ -static void -ccw_device_bug(struct ccw_device *cdev, enum dev_event dev_event) -{ - CIO_MSG_EVENT(0, "Internal state [%i][%i] not handled for device " - "0.%x.%04x\n", cdev->private->state, dev_event, - cdev->private->dev_id.ssid, - cdev->private->dev_id.devno); - BUG(); -} - -/* * device statemachine */ fsm_func_t *dev_jumptable[NR_DEV_STATES][NR_DEV_EVENTS] = { [DEV_STATE_NOT_OPER] = { [DEV_EVENT_NOTOPER] = ccw_device_nop, - [DEV_EVENT_INTERRUPT] = ccw_device_bug, + [DEV_EVENT_INTERRUPT] = ccw_device_disabled_irq, [DEV_EVENT_TIMEOUT] = ccw_device_nop, [DEV_EVENT_VERIFY] = ccw_device_nop, }, @@ -1186,7 +1173,7 @@ }, [DEV_STATE_OFFLINE] = { [DEV_EVENT_NOTOPER] = ccw_device_generic_notoper, - [DEV_EVENT_INTERRUPT] = ccw_device_offline_irq, + [DEV_EVENT_INTERRUPT] = ccw_device_disabled_irq, [DEV_EVENT_TIMEOUT] = ccw_device_nop, [DEV_EVENT_VERIFY] = ccw_device_offline_verify, }, @@ -1243,7 +1230,7 @@ [DEV_STATE_DISCONNECTED] = { [DEV_EVENT_NOTOPER] = ccw_device_nop, [DEV_EVENT_INTERRUPT] = ccw_device_start_id, - [DEV_EVENT_TIMEOUT] = ccw_device_bug, + [DEV_EVENT_TIMEOUT] = ccw_device_nop, [DEV_EVENT_VERIFY] = ccw_device_start_id, }, [DEV_STATE_DISCONNECTED_SENSE_ID] = { --- linux-2.6.32.orig/drivers/s390/block/dasd_diag.c +++ linux-2.6.32/drivers/s390/block/dasd_diag.c @@ -145,6 +145,15 @@ mdsk_term_io(device); rc = mdsk_init_io(device, device->block->bp_block, 0, NULL); + if (rc == 4) { + if (!(device->features & DASD_FEATURE_READONLY)) { + dev_warn(&device->cdev->dev, + "The access mode of a DIAG device changed" + " to read-only"); + device->features |= DASD_FEATURE_READONLY; + } + rc = 0; + } if (rc) dev_warn(&device->cdev->dev, "DIAG ERP failed with " "rc=%d\n", rc); @@ -433,16 +442,20 @@ for (sb = 512; sb < bsize; sb = sb << 1) block->s2b_shift++; rc = mdsk_init_io(device, block->bp_block, 0, NULL); - if (rc) { + if (rc && (rc != 4)) { dev_warn(&device->cdev->dev, "DIAG initialization " "failed with rc=%d\n", rc); rc = -EIO; } else { + if (rc == 4) + device->features |= DASD_FEATURE_READONLY; dev_info(&device->cdev->dev, - "New DASD with %ld byte/block, total size %ld KB\n", + "New DASD with %ld byte/block, total size %ld KB%s\n", (unsigned long) block->bp_block, (unsigned long) (block->blocks << - block->s2b_shift) >> 1); + block->s2b_shift) >> 1, + (rc == 4) ? ", read-only device" : ""); + rc = 0; } out_label: free_page((long) label); --- linux-2.6.32.orig/drivers/s390/block/dasd_proc.c +++ linux-2.6.32/drivers/s390/block/dasd_proc.c @@ -71,7 +71,7 @@ /* Print device number. */ seq_printf(m, "%s", dev_name(&device->cdev->dev)); /* Print discipline string. */ - if (device != NULL && device->discipline != NULL) + if (device->discipline != NULL) seq_printf(m, "(%s)", device->discipline->name); else seq_printf(m, "(none)"); @@ -91,10 +91,7 @@ substr = (device->features & DASD_FEATURE_READONLY) ? "(ro)" : " "; seq_printf(m, "%4s: ", substr); /* Print device status information. */ - switch ((device != NULL) ? device->state : -1) { - case -1: - seq_printf(m, "unknown"); - break; + switch (device->state) { case DASD_STATE_NEW: seq_printf(m, "new"); break; --- linux-2.6.32.orig/drivers/s390/block/dasd_ioctl.c +++ linux-2.6.32/drivers/s390/block/dasd_ioctl.c @@ -260,7 +260,7 @@ struct ccw_dev_id dev_id; base = block->base; - if (!base->discipline->fill_info) + if (!base->discipline || !base->discipline->fill_info) return -EINVAL; dasd_info = kzalloc(sizeof(struct dasd_information2_t), GFP_KERNEL); @@ -303,10 +303,7 @@ dasd_info->features |= ((base->features & DASD_FEATURE_READONLY) != 0); - if (base->discipline) - memcpy(dasd_info->type, base->discipline->name, 4); - else - memcpy(dasd_info->type, "none", 4); + memcpy(dasd_info->type, base->discipline->name, 4); if (block->request_queue->request_fn) { struct list_head *l; --- linux-2.6.32.orig/drivers/s390/block/dasd_fba.c +++ linux-2.6.32/drivers/s390/block/dasd_fba.c @@ -141,9 +141,8 @@ } block = dasd_alloc_block(); if (IS_ERR(block)) { - DBF_EVENT(DBF_WARNING, "could not allocate dasd block " - "structure for device: %s", - dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s", "could not allocate " + "dasd block structure"); device->private = NULL; kfree(private); return PTR_ERR(block); @@ -155,9 +154,8 @@ rc = dasd_generic_read_dev_chars(device, DASD_FBA_MAGIC, &private->rdc_data, 32); if (rc) { - DBF_EVENT(DBF_WARNING, "Read device characteristics returned " - "error %d for device: %s", - rc, dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, cdev, "Read device " + "characteristics returned error %d", rc); device->block = NULL; dasd_free_block(block); device->private = NULL; --- linux-2.6.32.orig/drivers/s390/block/dasd_int.h +++ linux-2.6.32/drivers/s390/block/dasd_int.h @@ -108,6 +108,16 @@ d_data); \ } while(0) +#define DBF_EVENT_DEVID(d_level, d_cdev, d_str, d_data...) \ +do { \ + struct ccw_dev_id __dev_id; \ + ccw_device_get_id(d_cdev, &__dev_id); \ + debug_sprintf_event(dasd_debug_area, \ + d_level, \ + "0.%x.%04x " d_str "\n", \ + __dev_id.ssid, __dev_id.devno, d_data); \ +} while (0) + #define DBF_EXC(d_level, d_str, d_data...)\ do { \ debug_sprintf_exception(dasd_debug_area, \ --- linux-2.6.32.orig/drivers/s390/block/dasd.c +++ linux-2.6.32/drivers/s390/block/dasd.c @@ -994,10 +994,9 @@ return; cqr = (struct dasd_ccw_req *) intparm; if (cqr->status != DASD_CQR_IN_IO) { - DBF_EVENT(DBF_DEBUG, - "invalid status in handle_killed_request: " - "bus_id %s, status %02x", - dev_name(&cdev->dev), cqr->status); + DBF_EVENT_DEVID(DBF_DEBUG, cdev, + "invalid status in handle_killed_request: " + "%02x", cqr->status); return; } @@ -1005,8 +1004,8 @@ if (device == NULL || device != dasd_device_from_cdev_locked(cdev) || strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { - DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: " - "bus_id %s", dev_name(&cdev->dev)); + DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", + "invalid device in request"); return; } @@ -1045,12 +1044,13 @@ case -EIO: break; case -ETIMEDOUT: - DBF_EVENT(DBF_WARNING, "%s(%s): request timed out\n", - __func__, dev_name(&cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s: " + "request timed out\n", __func__); break; default: - DBF_EVENT(DBF_WARNING, "%s(%s): unknown error %ld\n", - __func__, dev_name(&cdev->dev), PTR_ERR(irb)); + DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s: " + "unknown error %ld\n", __func__, + PTR_ERR(irb)); } dasd_handle_killed_request(cdev, intparm); return; @@ -1078,8 +1078,8 @@ device = (struct dasd_device *) cqr->startdev; if (!device || strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) { - DBF_DEV_EVENT(DBF_DEBUG, device, "invalid device in request: " - "bus_id %s", dev_name(&cdev->dev)); + DBF_EVENT_DEVID(DBF_DEBUG, cdev, "%s", + "invalid device in request"); return; } @@ -2217,9 +2217,9 @@ } ret = dasd_add_sysfs_files(cdev); if (ret) { - DBF_EVENT(DBF_WARNING, - "dasd_generic_probe: could not add sysfs entries " - "for %s\n", dev_name(&cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s", + "dasd_generic_probe: could not add " + "sysfs entries"); return ret; } cdev->handler = &dasd_int_handler; --- linux-2.6.32.orig/drivers/s390/block/dasd_eckd.c +++ linux-2.6.32/drivers/s390/block/dasd_eckd.c @@ -88,9 +88,9 @@ /* set ECKD specific ccw-device options */ ret = ccw_device_set_options(cdev, CCWDEV_ALLOW_FORCE); if (ret) { - DBF_EVENT(DBF_WARNING, - "dasd_eckd_probe: could not set ccw-device options " - "for %s\n", dev_name(&cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, cdev, "%s", + "dasd_eckd_probe: could not set " + "ccw-device options"); return ret; } ret = dasd_generic_probe(cdev, &dasd_eckd_discipline); @@ -885,16 +885,15 @@ rc = dasd_eckd_read_conf_lpm(device, &conf_data, &conf_len, lpm); if (rc && rc != -EOPNOTSUPP) { /* -EOPNOTSUPP is ok */ - DBF_EVENT(DBF_WARNING, + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "Read configuration data returned " - "error %d for device: %s", rc, - dev_name(&device->cdev->dev)); + "error %d", rc); return rc; } if (conf_data == NULL) { - DBF_EVENT(DBF_WARNING, "No configuration " - "data retrieved for device: %s", - dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", + "No configuration data " + "retrieved"); continue; /* no error */ } /* save first valid configuration data */ @@ -941,9 +940,8 @@ sizeof(struct dasd_rssd_features)), device); if (IS_ERR(cqr)) { - DBF_EVENT(DBF_WARNING, "Could not allocate initialization " - "request for device: %s", - dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", "Could not " + "allocate initialization request"); return PTR_ERR(cqr); } cqr->startdev = device; @@ -1071,10 +1069,8 @@ /* may be requested feature is not available on server, * therefore just report error and go ahead */ private = (struct dasd_eckd_private *) device->private; - DBF_EVENT(DBF_WARNING, "PSF-SSC on storage subsystem %s.%s.%04x " - "returned rc=%d for device: %s", - private->uid.vendor, private->uid.serial, - private->uid.ssid, rc, dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "PSF-SSC for SSID %04x " + "returned rc=%d", private->uid.ssid, rc); /* RE-Read Configuration Data */ return dasd_eckd_read_conf(device); } @@ -1123,9 +1119,9 @@ if (private->uid.type == UA_BASE_DEVICE) { block = dasd_alloc_block(); if (IS_ERR(block)) { - DBF_EVENT(DBF_WARNING, "could not allocate dasd " - "block structure for device: %s", - dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s", + "could not allocate dasd " + "block structure"); rc = PTR_ERR(block); goto out_err1; } @@ -1153,9 +1149,8 @@ rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC, &private->rdc_data, 64); if (rc) { - DBF_EVENT(DBF_WARNING, - "Read device characteristics failed, rc=%d for " - "device: %s", rc, dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, + "Read device characteristic failed, rc=%d", rc); goto out_err3; } /* find the vaild cylinder size */ @@ -2980,7 +2975,7 @@ len += sprintf(page + len, KERN_ERR PRINTK_HEADER " in req: %p CS: 0x%02X DS: 0x%02X CC: 0x%02X RC: %d\n", req, scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), - scsw_cc(&irb->scsw), req->intrc); + scsw_cc(&irb->scsw), req ? req->intrc : 0); len += sprintf(page + len, KERN_ERR PRINTK_HEADER " device %s: Failing CCW: %p\n", dev_name(&device->cdev->dev), @@ -3253,9 +3248,8 @@ rc = dasd_generic_read_dev_chars(device, DASD_ECKD_MAGIC, &temp_rdc_data, 64); if (rc) { - DBF_EVENT(DBF_WARNING, - "Read device characteristics failed, rc=%d for " - "device: %s", rc, dev_name(&device->cdev->dev)); + DBF_EVENT_DEVID(DBF_WARNING, device->cdev, + "Read device characteristic failed, rc=%d", rc); goto out_err; } spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags); --- linux-2.6.32.orig/drivers/s390/net/netiucv.c +++ linux-2.6.32/drivers/s390/net/netiucv.c @@ -741,13 +741,13 @@ if (single_flag) { if ((skb = skb_dequeue(&conn->commit_queue))) { atomic_dec(&skb->users); - dev_kfree_skb_any(skb); if (privptr) { privptr->stats.tx_packets++; privptr->stats.tx_bytes += (skb->len - NETIUCV_HDRLEN - - NETIUCV_HDRLEN); + - NETIUCV_HDRLEN); } + dev_kfree_skb_any(skb); } } conn->tx_buff->data = conn->tx_buff->head; --- linux-2.6.32.orig/drivers/s390/crypto/zcrypt_pcixcc.c +++ linux-2.6.32/drivers/s390/crypto/zcrypt_pcixcc.c @@ -462,6 +462,8 @@ } if (service_rc == 12 && service_rs == 769) return -EINVAL; + if (service_rc == 8 && service_rs == 72) + return -EINVAL; zdev->online = 0; return -EAGAIN; /* repeat the request on a different device. */ } --- linux-2.6.32.orig/drivers/s390/crypto/zcrypt_pcicc.c +++ linux-2.6.32/drivers/s390/crypto/zcrypt_pcicc.c @@ -373,6 +373,8 @@ zdev->max_mod_size = PCICC_MAX_MOD_SIZE_OLD; return -EAGAIN; } + if (service_rc == 8 && service_rs == 72) + return -EINVAL; zdev->online = 0; return -EAGAIN; /* repeat the request on a different device. */ } --- linux-2.6.32.orig/drivers/ide/slc90e66.c +++ linux-2.6.32/drivers/ide/slc90e66.c @@ -91,8 +91,7 @@ if (!(reg48 & u_flag)) pci_write_config_word(dev, 0x48, reg48|u_flag); - /* FIXME: (reg4a & a_speed) ? */ - if ((reg4a & u_speed) != u_speed) { + if ((reg4a & a_speed) != u_speed) { pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); pci_read_config_word(dev, 0x4a, ®4a); pci_write_config_word(dev, 0x4a, reg4a|u_speed); --- linux-2.6.32.orig/drivers/i2c/i2c-core.c +++ linux-2.6.32/drivers/i2c/i2c-core.c @@ -801,6 +801,9 @@ adap->dev.parent); #endif + /* device name is gone after device_unregister */ + dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name); + /* clean up the sysfs representation */ init_completion(&adap->dev_released); device_unregister(&adap->dev); @@ -813,8 +816,6 @@ idr_remove(&i2c_adapter_idr, adap->nr); mutex_unlock(&core_lock); - dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name); - /* Clear the device structure in case this adapter is ever going to be added again */ memset(&adap->dev, 0, sizeof(adap->dev)); @@ -1201,14 +1202,24 @@ /* Make sure there is something at this address, unless forced */ if (kind < 0) { - if (i2c_smbus_xfer(adapter, addr, 0, 0, 0, - I2C_SMBUS_QUICK, NULL) < 0) - return 0; - - /* prevent 24RF08 corruption */ - if ((addr & ~0x0f) == 0x50) - i2c_smbus_xfer(adapter, addr, 0, 0, 0, - I2C_SMBUS_QUICK, NULL); + if (addr == 0x73 && (adapter->class & I2C_CLASS_HWMON)) { + /* Special probe for FSC hwmon chips */ + union i2c_smbus_data dummy; + + if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_READ, 0, + I2C_SMBUS_BYTE_DATA, &dummy) < 0) + return 0; + } else { + if (i2c_smbus_xfer(adapter, addr, 0, I2C_SMBUS_WRITE, 0, + I2C_SMBUS_QUICK, NULL) < 0) + return 0; + + /* Prevent 24RF08 corruption */ + if ((addr & ~0x0f) == 0x50) + i2c_smbus_xfer(adapter, addr, 0, + I2C_SMBUS_WRITE, 0, + I2C_SMBUS_QUICK, NULL); + } } /* Finally call the custom detection function */ --- linux-2.6.32.orig/drivers/i2c/busses/i2c-pca-isa.c +++ linux-2.6.32/drivers/i2c/busses/i2c-pca-isa.c @@ -75,7 +75,7 @@ unsigned long timeout; if (irq > -1) { - ret = wait_event_interruptible_timeout(pca_wait, + ret = wait_event_timeout(pca_wait, pca_isa_readbyte(pd, I2C_PCA_CON) & I2C_PCA_CON_SI, pca_isa_ops.timeout); } else { @@ -96,7 +96,7 @@ } static irqreturn_t pca_handler(int this_irq, void *dev_id) { - wake_up_interruptible(&pca_wait); + wake_up(&pca_wait); return IRQ_HANDLED; } --- linux-2.6.32.orig/drivers/i2c/busses/i2c-i801.c +++ linux-2.6.32/drivers/i2c/busses/i2c-i801.c @@ -41,7 +41,8 @@ Tolapai 0x5032 32 hard yes yes yes ICH10 0x3a30 32 hard yes yes yes ICH10 0x3a60 32 hard yes yes yes - PCH 0x3b30 32 hard yes yes yes + 3400/5 Series (PCH) 0x3b30 32 hard yes yes yes + Cougar Point (PCH) 0x1c22 32 hard yes yes yes Features supported by this driver: Software PEC no @@ -415,9 +416,11 @@ data->block[0] = 32; /* max for SMBus block reads */ } + /* Experience has shown that the block buffer can only be used for + SMBus (not I2C) block transactions, even though the datasheet + doesn't mention this limitation. */ if ((i801_features & FEATURE_BLOCK_BUFFER) - && !(command == I2C_SMBUS_I2C_BLOCK_DATA - && read_write == I2C_SMBUS_READ) + && command != I2C_SMBUS_I2C_BLOCK_DATA && i801_set_block_buffer_mode() == 0) result = i801_block_transaction_by_block(data, read_write, hwpec); @@ -578,6 +581,7 @@ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) }, { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) }, { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PCH_SMBUS) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CPT_SMBUS) }, { 0, } }; @@ -707,6 +711,7 @@ case PCI_DEVICE_ID_INTEL_ICH10_4: case PCI_DEVICE_ID_INTEL_ICH10_5: case PCI_DEVICE_ID_INTEL_PCH_SMBUS: + case PCI_DEVICE_ID_INTEL_CPT_SMBUS: i801_features |= FEATURE_I2C_BLOCK_READ; /* fall through */ case PCI_DEVICE_ID_INTEL_82801DB_3: --- linux-2.6.32.orig/drivers/i2c/busses/Kconfig +++ linux-2.6.32/drivers/i2c/busses/Kconfig @@ -77,7 +77,7 @@ will be called i2c-amd8111. config I2C_I801 - tristate "Intel 82801 (ICH)" + tristate "Intel 82801 (ICH/PCH)" depends on PCI help If you say yes to this option, support will be included for the Intel @@ -97,7 +97,8 @@ ICH9 Tolapai ICH10 - PCH + 3400/5 Series (PCH) + Cougar Point (PCH) This driver can also be built as a module. If so, the module will be called i2c-i801. --- linux-2.6.32.orig/drivers/i2c/busses/i2c-pca-platform.c +++ linux-2.6.32/drivers/i2c/busses/i2c-pca-platform.c @@ -84,7 +84,7 @@ unsigned long timeout; if (i2c->irq) { - ret = wait_event_interruptible_timeout(i2c->wait, + ret = wait_event_timeout(i2c->wait, i2c->algo_data.read_byte(i2c, I2C_PCA_CON) & I2C_PCA_CON_SI, i2c->adap.timeout); } else { @@ -122,7 +122,7 @@ if ((i2c->algo_data.read_byte(i2c, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0) return IRQ_NONE; - wake_up_interruptible(&i2c->wait); + wake_up(&i2c->wait); return IRQ_HANDLED; } --- linux-2.6.32.orig/drivers/i2c/busses/i2c-tiny-usb.c +++ linux-2.6.32/drivers/i2c/busses/i2c-tiny-usb.c @@ -13,6 +13,7 @@ #include #include #include +#include /* include interfaces to usb layer */ #include @@ -31,8 +32,8 @@ #define CMD_I2C_IO_END (1<<1) /* i2c bit delay, default is 10us -> 100kHz */ -static int delay = 10; -module_param(delay, int, 0); +static unsigned short delay = 10; +module_param(delay, ushort, 0); MODULE_PARM_DESC(delay, "bit delay in microseconds, " "e.g. 10 for 100kHz (default is 100kHz)"); @@ -109,7 +110,7 @@ static u32 usb_func(struct i2c_adapter *adapter) { - u32 func; + __le32 func; /* get functionality from adapter */ if (usb_read(adapter, CMD_GET_FUNC, 0, 0, &func, sizeof(func)) != @@ -118,7 +119,7 @@ return 0; } - return func; + return le32_to_cpu(func); } /* This is the actual algorithm we define */ @@ -216,8 +217,7 @@ "i2c-tiny-usb at bus %03d device %03d", dev->usb_dev->bus->busnum, dev->usb_dev->devnum); - if (usb_write(&dev->adapter, CMD_SET_DELAY, - cpu_to_le16(delay), 0, NULL, 0) != 0) { + if (usb_write(&dev->adapter, CMD_SET_DELAY, delay, 0, NULL, 0) != 0) { dev_err(&dev->adapter.dev, "failure setting delay to %dus\n", delay); retval = -EIO; --- linux-2.6.32.orig/drivers/serial/8250_pnp.c +++ linux-2.6.32/drivers/serial/8250_pnp.c @@ -328,15 +328,7 @@ /* U.S. Robotics 56K Voice INT PnP*/ { "USR9190", 0 }, /* Wacom tablets */ - { "WACF004", 0 }, - { "WACF005", 0 }, - { "WACF006", 0 }, - { "WACF007", 0 }, - { "WACF008", 0 }, - { "WACF009", 0 }, - { "WACF00A", 0 }, - { "WACF00B", 0 }, - { "WACF00C", 0 }, + { "WACFXXX", 0 }, /* Compaq touchscreen */ { "FPI2002", 0 }, /* Fujitsu Stylistic touchscreens */ @@ -354,6 +346,10 @@ { "FUJ02E5", 0 }, /* Fujitsu P-series tablet PC device */ { "FUJ02E6", 0 }, + /* Fujitsu Wacom 2FGT Tablet PC device */ + { "FUJ02E7", 0 }, + /* Fujitsu Wacom 1FGT Tablet PC device */ + { "FUJ02E9", 0 }, /* * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in * disguise) --- linux-2.6.32.orig/drivers/serial/uartlite.c +++ linux-2.6.32/drivers/serial/uartlite.c @@ -394,7 +394,7 @@ spin_unlock_irqrestore(&port->lock, flags); } -static int __init ulite_console_setup(struct console *co, char *options) +static int __devinit ulite_console_setup(struct console *co, char *options) { struct uart_port *port; int baud = 9600; --- linux-2.6.32.orig/drivers/serial/imx.c +++ linux-2.6.32/drivers/serial/imx.c @@ -119,7 +119,8 @@ #define MX2_UCR3_RXDMUXSEL (1<<2) /* RXD Muxed Input Select, on mx2/mx3 */ #define UCR3_INVT (1<<1) /* Inverted Infrared transmission */ #define UCR3_BPEN (1<<0) /* Preset registers enable */ -#define UCR4_CTSTL_32 (32<<10) /* CTS trigger level (32 chars) */ +#define UCR4_CTSTL_SHF 10 /* CTS trigger level shift */ +#define UCR4_CTSTL_MASK 0x3F /* CTS trigger is 6 bits wide */ #define UCR4_INVR (1<<9) /* Inverted infrared reception */ #define UCR4_ENIRI (1<<8) /* Serial infrared interrupt enable */ #define UCR4_WKEN (1<<7) /* Wake interrupt enable */ @@ -590,6 +591,9 @@ return 0; } +/* half the RX buffer size */ +#define CTSTL 16 + static int imx_startup(struct uart_port *port) { struct imx_port *sport = (struct imx_port *)port; @@ -606,6 +610,10 @@ if (USE_IRDA(sport)) temp |= UCR4_IRSC; + /* set the trigger level for CTS */ + temp &= ~(UCR4_CTSTL_MASK<< UCR4_CTSTL_SHF); + temp |= CTSTL<< UCR4_CTSTL_SHF; + writel(temp & ~UCR4_DREN, sport->port.membase + UCR4); if (USE_IRDA(sport)) { @@ -1279,7 +1287,7 @@ sport->use_irda = 1; #endif - if (pdata->init) { + if (pdata && pdata->init) { ret = pdata->init(pdev); if (ret) goto clkput; @@ -1292,7 +1300,7 @@ return 0; deinit: - if (pdata->exit) + if (pdata && pdata->exit) pdata->exit(pdev); clkput: clk_put(sport->clk); @@ -1321,7 +1329,7 @@ clk_disable(sport->clk); - if (pdata->exit) + if (pdata && pdata->exit) pdata->exit(pdev); iounmap(sport->port.membase); --- linux-2.6.32.orig/drivers/serial/8250.c +++ linux-2.6.32/drivers/serial/8250.c @@ -83,6 +83,9 @@ #define PASS_LIMIT 256 +#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) + + /* * We default to IRQ0 for the "no irq" hack. Some * machine types want others as well - they're free @@ -1339,14 +1342,12 @@ serial_out(up, UART_IER, up->ier); if (up->bugs & UART_BUG_TXEN) { - unsigned char lsr, iir; + unsigned char lsr; lsr = serial_in(up, UART_LSR); up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; - iir = serial_in(up, UART_IIR) & 0x0f; if ((up->port.type == PORT_RM9000) ? - (lsr & UART_LSR_THRE && - (iir == UART_IIR_NO_INT || iir == UART_IIR_THRI)) : - (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT)) + (lsr & UART_LSR_THRE) : + (lsr & UART_LSR_TEMT)) transmit_chars(up); } } @@ -1794,7 +1795,7 @@ up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; spin_unlock_irqrestore(&up->port.lock, flags); - return lsr & UART_LSR_TEMT ? TIOCSER_TEMT : 0; + return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0; } static unsigned int serial8250_get_mctrl(struct uart_port *port) @@ -1852,8 +1853,6 @@ spin_unlock_irqrestore(&up->port.lock, flags); } -#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) - /* * Wait for transmitter & holding register to empty */ --- linux-2.6.32.orig/drivers/firmware/dmi_scan.c +++ linux-2.6.32/drivers/firmware/dmi_scan.c @@ -429,7 +429,7 @@ for (i = 0; i < ARRAY_SIZE(dmi->matches); i++) { int s = dmi->matches[i].slot; if (s == DMI_NONE) - continue; + break; if (dmi_ident[s] && strstr(dmi_ident[s], dmi->matches[i].substr)) continue; @@ -440,6 +440,15 @@ } /** + * dmi_is_end_of_table - check for end-of-table marker + * @dmi: pointer to the dmi_system_id structure to check + */ +static bool dmi_is_end_of_table(const struct dmi_system_id *dmi) +{ + return dmi->matches[0].slot == DMI_NONE; +} + +/** * dmi_check_system - check system DMI data * @list: array of dmi_system_id structures to match against * All non-null elements of the list must match @@ -457,7 +466,7 @@ int count = 0; const struct dmi_system_id *d; - for (d = list; d->ident; d++) + for (d = list; !dmi_is_end_of_table(d); d++) if (dmi_matches(d)) { count++; if (d->callback && d->callback(d)) @@ -484,7 +493,7 @@ { const struct dmi_system_id *d; - for (d = list; d->ident; d++) + for (d = list; !dmi_is_end_of_table(d); d++) if (dmi_matches(d)) return d; --- linux-2.6.32.orig/drivers/block/cciss.c +++ linux-2.6.32/drivers/block/cciss.c @@ -339,6 +339,9 @@ if (*pos > h->highest_lun) return 0; + if (drv == NULL) /* it's possible for h->drv[] to have holes. */ + return 0; + if (drv->heads == 0) return 0; --- linux-2.6.32.orig/drivers/block/pktcdvd.c +++ linux-2.6.32/drivers/block/pktcdvd.c @@ -322,7 +322,7 @@ pkt_kobj_remove(pd->kobj_stat); pkt_kobj_remove(pd->kobj_wqueue); if (class_pktcdvd) - device_destroy(class_pktcdvd, pd->pkt_dev); + device_unregister(pd->dev); } --- linux-2.6.32.orig/drivers/block/nbd.c +++ linux-2.6.32/drivers/block/nbd.c @@ -56,7 +56,7 @@ static unsigned int nbds_max = 16; static struct nbd_device *nbd_dev; -static int max_part; +static int max_part = 15; /* * Use just one lock (or at most 1 per NIC). Two arguments for this: --- linux-2.6.32.orig/drivers/isdn/gigaset/interface.c +++ linux-2.6.32/drivers/isdn/gigaset/interface.c @@ -635,7 +635,6 @@ if ((tty = cs->tty) == NULL) gig_dbg(DEBUG_ANY, "receive on closed device"); else { - tty_buffer_request_room(tty, len); tty_insert_flip_string(tty, buffer, len); tty_flip_buffer_push(tty); } --- linux-2.6.32.orig/drivers/isdn/gigaset/ev-layer.c +++ linux-2.6.32/drivers/isdn/gigaset/ev-layer.c @@ -1243,14 +1243,10 @@ * note that bcs may be NULL if no B channel is free */ at_state2->ConState = 700; - kfree(at_state2->str_var[STR_NMBR]); - at_state2->str_var[STR_NMBR] = NULL; - kfree(at_state2->str_var[STR_ZCPN]); - at_state2->str_var[STR_ZCPN] = NULL; - kfree(at_state2->str_var[STR_ZBC]); - at_state2->str_var[STR_ZBC] = NULL; - kfree(at_state2->str_var[STR_ZHLC]); - at_state2->str_var[STR_ZHLC] = NULL; + for (i = 0; i < STR_NUM; ++i) { + kfree(at_state2->str_var[i]); + at_state2->str_var[i] = NULL; + } at_state2->int_var[VAR_ZCTP] = -1; spin_lock_irqsave(&cs->lock, flags); --- linux-2.6.32.orig/drivers/ata/ata_generic.c +++ linux-2.6.32/drivers/ata/ata_generic.c @@ -32,6 +32,11 @@ * A generic parallel ATA driver using libata */ +enum { + ATA_GEN_CLASS_MATCH = (1 << 0), + ATA_GEN_FORCE_DMA = (1 << 1), +}; + /** * generic_set_mode - mode setting * @link: link to set up @@ -46,13 +51,17 @@ static int generic_set_mode(struct ata_link *link, struct ata_device **unused) { struct ata_port *ap = link->ap; + const struct pci_device_id *id = ap->host->private_data; int dma_enabled = 0; struct ata_device *dev; struct pci_dev *pdev = to_pci_dev(ap->host->dev); - /* Bits 5 and 6 indicate if DMA is active on master/slave */ - if (ap->ioaddr.bmdma_addr) + if (id->driver_data & ATA_GEN_FORCE_DMA) { + dma_enabled = 0xff; + } else if (ap->ioaddr.bmdma_addr) { + /* Bits 5 and 6 indicate if DMA is active on master/slave */ dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); + } if (pdev->vendor == PCI_VENDOR_ID_CENATEK) dma_enabled = 0xFF; @@ -126,7 +135,7 @@ const struct ata_port_info *ppi[] = { &info, NULL }; /* Don't use the generic entry unless instructed to do so */ - if (id->driver_data == 1 && all_generic_ide == 0) + if ((id->driver_data & ATA_GEN_CLASS_MATCH) && all_generic_ide == 0) return -ENODEV; /* Devices that need care */ @@ -155,7 +164,7 @@ return rc; pcim_pin_device(dev); } - return ata_pci_sff_init_one(dev, ppi, &generic_sht, NULL); + return ata_pci_sff_init_one(dev, ppi, &generic_sht, (void *)id); } static struct pci_device_id ata_generic[] = { @@ -167,12 +176,21 @@ { PCI_DEVICE(PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), }, { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561), }, { PCI_DEVICE(PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558), }, - { PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), }, + { PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), + .driver_data = ATA_GEN_FORCE_DMA }, + /* + * For some reason, MCP89 on MacBook 7,1 doesn't work with + * ahci, use ata_generic instead. + */ + { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA, + PCI_VENDOR_ID_APPLE, 0xcb89, + .driver_data = ATA_GEN_FORCE_DMA }, { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO), }, { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), }, { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), }, /* Must come last. If you add entries adjust this table appropriately */ - { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 1}, + { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL), + .driver_data = ATA_GEN_CLASS_MATCH }, { 0, }, }; --- linux-2.6.32.orig/drivers/ata/pata_hpt37x.c +++ linux-2.6.32/drivers/ata/pata_hpt37x.c @@ -24,7 +24,7 @@ #include #define DRV_NAME "pata_hpt37x" -#define DRV_VERSION "0.6.12" +#define DRV_VERSION "0.6.14" struct hpt_clock { u8 xfer_speed; @@ -404,9 +404,8 @@ pci_read_config_dword(pdev, addr1, ®); mode = hpt37x_find_mode(ap, adev->pio_mode); - mode &= ~0x8000000; /* No FIFO in PIO */ - mode &= ~0x30070000; /* Leave config bits alone */ - reg &= 0x30070000; /* Strip timing bits */ + mode &= 0xCFC3FFFF; /* Leave DMA bits alone */ + reg &= ~0xCFC3FFFF; /* Strip timing bits */ pci_write_config_dword(pdev, addr1, reg | mode); } @@ -423,8 +422,7 @@ { struct pci_dev *pdev = to_pci_dev(ap->host->dev); u32 addr1, addr2; - u32 reg; - u32 mode; + u32 reg, mode, mask; u8 fast; addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); @@ -436,11 +434,12 @@ fast |= 0x01; pci_write_config_byte(pdev, addr2, fast); + mask = adev->dma_mode < XFER_UDMA_0 ? 0x31C001FF : 0x303C0000; + pci_read_config_dword(pdev, addr1, ®); mode = hpt37x_find_mode(ap, adev->dma_mode); - mode |= 0x8000000; /* FIFO in MWDMA or UDMA */ - mode &= ~0xC0000000; /* Leave config bits alone */ - reg &= 0xC0000000; /* Strip timing bits */ + mode &= mask; + reg &= ~mask; pci_write_config_dword(pdev, addr1, reg | mode); } @@ -508,9 +507,8 @@ mode = hpt37x_find_mode(ap, adev->pio_mode); printk("Find mode for %d reports %X\n", adev->pio_mode, mode); - mode &= ~0x80000000; /* No FIFO in PIO */ - mode &= ~0x30070000; /* Leave config bits alone */ - reg &= 0x30070000; /* Strip timing bits */ + mode &= 0xCFC3FFFF; /* Leave DMA bits alone */ + reg &= ~0xCFC3FFFF; /* Strip timing bits */ pci_write_config_dword(pdev, addr1, reg | mode); } @@ -527,8 +525,7 @@ { struct pci_dev *pdev = to_pci_dev(ap->host->dev); u32 addr1, addr2; - u32 reg; - u32 mode; + u32 reg, mode, mask; u8 fast; addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); @@ -539,12 +536,13 @@ fast &= ~0x07; pci_write_config_byte(pdev, addr2, fast); + mask = adev->dma_mode < XFER_UDMA_0 ? 0x31C001FF : 0x303C0000; + pci_read_config_dword(pdev, addr1, ®); mode = hpt37x_find_mode(ap, adev->dma_mode); printk("Find mode for DMA %d reports %X\n", adev->dma_mode, mode); - mode &= ~0xC0000000; /* Leave config bits alone */ - mode |= 0x80000000; /* FIFO in MWDMA or UDMA */ - reg &= 0xC0000000; /* Strip timing bits */ + mode &= mask; + reg &= ~mask; pci_write_config_dword(pdev, addr1, reg | mode); } --- linux-2.6.32.orig/drivers/ata/pata_cmd64x.c +++ linux-2.6.32/drivers/ata/pata_cmd64x.c @@ -219,7 +219,7 @@ regU |= udma_data[adev->dma_mode - XFER_UDMA_0] << shift; /* Merge the control bits */ regU |= 1 << adev->devno; /* UDMA on */ - if (adev->dma_mode > 2) /* 15nS timing */ + if (adev->dma_mode > XFER_UDMA_2) /* 15nS timing */ regU |= 4 << adev->devno; } else { regU &= ~ (1 << adev->devno); /* UDMA off */ --- linux-2.6.32.orig/drivers/ata/ahci.c +++ linux-2.6.32/drivers/ata/ahci.c @@ -113,6 +113,7 @@ board_ahci_mcp65 = 6, board_ahci_nopmp = 7, board_ahci_yesncq = 8, + board_ahci_nosntf = 9, /* global controller registers */ HOST_CAP = 0x00, /* host capabilities */ @@ -235,6 +236,7 @@ AHCI_HFLAG_NO_SUSPEND = (1 << 10), /* don't suspend */ AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = (1 << 11), /* treat SRST timeout as link offline */ + AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */ /* ap->flags bits */ @@ -508,7 +510,7 @@ .udma_mask = ATA_UDMA6, .port_ops = &ahci_ops, }, - /* board_ahci_yesncq */ + [board_ahci_yesncq] = { AHCI_HFLAGS (AHCI_HFLAG_YES_NCQ), .flags = AHCI_FLAG_COMMON, @@ -516,6 +518,14 @@ .udma_mask = ATA_UDMA6, .port_ops = &ahci_ops, }, + [board_ahci_nosntf] = + { + AHCI_HFLAGS (AHCI_HFLAG_NO_SNTF), + .flags = AHCI_FLAG_COMMON, + .pio_mask = ATA_PIO4, + .udma_mask = ATA_UDMA6, + .port_ops = &ahci_ops, + }, }; static const struct pci_device_id ahci_pci_tbl[] = { @@ -531,7 +541,7 @@ { PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */ { PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */ { PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */ - { PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* ICH8 */ + { PCI_VDEVICE(INTEL, 0x2822), board_ahci_nosntf }, /* ICH8 */ { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */ { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */ { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */ @@ -560,6 +570,12 @@ { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */ { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */ { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */ + { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */ + { PCI_VDEVICE(INTEL, 0x1c03), board_ahci }, /* CPT AHCI */ + { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */ + { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */ + { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */ + { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */ /* JMicron 360/1/3/5/6, match class to avoid IDE function */ { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, @@ -849,6 +865,12 @@ cap &= ~HOST_CAP_PMP; } + if ((cap & HOST_CAP_SNTF) && (hpriv->flags & AHCI_HFLAG_NO_SNTF)) { + dev_printk(KERN_INFO, &pdev->dev, + "controller can't do SNTF, turning off CAP_SNTF\n"); + cap &= ~HOST_CAP_SNTF; + } + if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361 && port_map != 1) { dev_printk(KERN_INFO, &pdev->dev, @@ -2815,6 +2837,14 @@ * On HP dv[4-6] and HDX18 with earlier BIOSen, link * to the harddisk doesn't become online after * resuming from STR. Warn and fail suspend. + * + * http://bugzilla.kernel.org/show_bug.cgi?id=12276 + * + * Use dates instead of versions to match as HP is + * apparently recycling both product and version + * strings. + * + * http://bugzilla.kernel.org/show_bug.cgi?id=15462 */ { .ident = "dv4", @@ -2823,7 +2853,7 @@ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), }, - .driver_data = "F.30", /* cutoff BIOS version */ + .driver_data = "20090105", /* F.30 */ }, { .ident = "dv5", @@ -2832,7 +2862,7 @@ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv5 Notebook PC"), }, - .driver_data = "F.16", /* cutoff BIOS version */ + .driver_data = "20090506", /* F.16 */ }, { .ident = "dv6", @@ -2841,7 +2871,7 @@ DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv6 Notebook PC"), }, - .driver_data = "F.21", /* cutoff BIOS version */ + .driver_data = "20090423", /* F.21 */ }, { .ident = "HDX18", @@ -2850,19 +2880,38 @@ DMI_MATCH(DMI_PRODUCT_NAME, "HP HDX18 Notebook PC"), }, - .driver_data = "F.23", /* cutoff BIOS version */ + .driver_data = "20090430", /* F.23 */ + }, + /* + * Acer eMachines G725 has the same problem. BIOS + * V1.03 is known to be broken. V3.04 is known to + * work. Inbetween, there are V1.06, V2.06 and V3.03 + * that we don't have much idea about. For now, + * blacklist anything older than V3.04. + * + * http://bugzilla.kernel.org/show_bug.cgi?id=15104 + */ + { + .ident = "G725", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "eMachines"), + DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"), + }, + .driver_data = "20091216", /* V3.04 */ }, { } /* terminate list */ }; const struct dmi_system_id *dmi = dmi_first_match(sysids); - const char *ver; + int year, month, date; + char buf[9]; if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2)) return false; - ver = dmi_get_system_info(DMI_BIOS_VERSION); + dmi_get_date(DMI_BIOS_DATE, &year, &month, &date); + snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date); - return !ver || strcmp(ver, dmi->driver_data) < 0; + return strcmp(buf, dmi->driver_data) < 0; } static bool ahci_broken_online(struct pci_dev *pdev) @@ -2988,6 +3037,16 @@ if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable) return -ENODEV; + /* + * For some reason, MCP89 on MacBook 7,1 doesn't work with + * ahci, use ata_generic instead. + */ + if (pdev->vendor == PCI_VENDOR_ID_NVIDIA && + pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA && + pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE && + pdev->subsystem_device == 0xcb89) + return -ENODEV; + /* acquire resources */ rc = pcim_enable_device(pdev); if (rc) @@ -3043,8 +3102,16 @@ ahci_save_initial_config(pdev, hpriv); /* prepare host */ - if (hpriv->cap & HOST_CAP_NCQ) - pi.flags |= ATA_FLAG_NCQ | ATA_FLAG_FPDMA_AA; + if (hpriv->cap & HOST_CAP_NCQ) { + pi.flags |= ATA_FLAG_NCQ; + /* Auto-activate optimization is supposed to be supported on + all AHCI controllers indicating NCQ support, but it seems + to be broken at least on some NVIDIA MCP79 chipsets. + Until we get info on which NVIDIA chipsets don't have this + issue, if any, disable AA on all NVIDIA AHCIs. */ + if (pdev->vendor != PCI_VENDOR_ID_NVIDIA) + pi.flags |= ATA_FLAG_FPDMA_AA; + } if (hpriv->cap & HOST_CAP_PMP) pi.flags |= ATA_FLAG_PMP; --- linux-2.6.32.orig/drivers/ata/libata-core.c +++ linux-2.6.32/drivers/ata/libata-core.c @@ -139,7 +139,7 @@ module_param_named(fua, libata_fua, int, 0444); MODULE_PARM_DESC(fua, "FUA support (0=off [default], 1=on)"); -static int ata_ignore_hpa; +static int ata_ignore_hpa = 1; module_param_named(ignore_hpa, ata_ignore_hpa, int, 0644); MODULE_PARM_DESC(ignore_hpa, "Ignore HPA limit (0=keep BIOS limits, 1=ignore limits, using full disk)"); @@ -3790,21 +3790,45 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params, unsigned long deadline) { + int tries = ATA_LINK_RESUME_TRIES; u32 scontrol, serror; int rc; if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) return rc; - scontrol = (scontrol & 0x0f0) | 0x300; + /* + * Writes to SControl sometimes get ignored under certain + * controllers (ata_piix SIDPR). Make sure DET actually is + * cleared. + */ + do { + scontrol = (scontrol & 0x0f0) | 0x300; + if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) + return rc; + /* + * Some PHYs react badly if SStatus is pounded + * immediately after resuming. Delay 200ms before + * debouncing. + */ + msleep(200); - if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) - return rc; + /* is SControl restored correctly? */ + if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) + return rc; + } while ((scontrol & 0xf0f) != 0x300 && --tries); - /* Some PHYs react badly if SStatus is pounded immediately - * after resuming. Delay 200ms before debouncing. - */ - msleep(200); + if ((scontrol & 0xf0f) != 0x300) { + ata_link_printk(link, KERN_ERR, + "failed to resume link (SControl %X)\n", + scontrol); + return 0; + } + + if (tries < ATA_LINK_RESUME_TRIES) + ata_link_printk(link, KERN_WARNING, + "link resume succeeded after %d retries\n", + ATA_LINK_RESUME_TRIES - tries); if ((rc = sata_link_debounce(link, params, deadline))) return rc; @@ -4323,6 +4347,10 @@ { "HTS541060G9SA00", "MB3OC60D", ATA_HORKAGE_NONCQ, }, { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, }, { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, }, + { "FUJITSU MHW2160BH PL", "0084001E", ATA_HORKAGE_NONCQ, }, + + /* https://bugzilla.kernel.org/show_bug.cgi?id=15573 */ + { "C300-CTFDDAC128MAG", "0001", ATA_HORKAGE_NONCQ, }, /* devices which puke on READ_NATIVE_MAX */ { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, }, --- linux-2.6.32.orig/drivers/ata/pata_ali.c +++ linux-2.6.32/drivers/ata/pata_ali.c @@ -453,7 +453,9 @@ /* Clear CD-ROM DMA write bit */ tmp &= 0x7F; /* Cable and UDMA */ - pci_write_config_byte(pdev, 0x4B, tmp | 0x09); + if (pdev->revision >= 0xc2) + tmp |= 0x01; + pci_write_config_byte(pdev, 0x4B, tmp | 0x08); /* * CD_ROM DMA on (0x53 bit 0). Enable this even if we want * to use PIO. 0x53 bit 1 (rev 20 only) - enable FIFO control --- linux-2.6.32.orig/drivers/ata/pata_hpt3x2n.c +++ linux-2.6.32/drivers/ata/pata_hpt3x2n.c @@ -8,7 +8,7 @@ * Copyright (C) 1999-2003 Andre Hedrick * Portions Copyright (C) 2001 Sun Microsystems, Inc. * Portions Copyright (C) 2003 Red Hat Inc - * Portions Copyright (C) 2005-2007 MontaVista Software, Inc. + * Portions Copyright (C) 2005-2009 MontaVista Software, Inc. * * * TODO @@ -25,7 +25,7 @@ #include #define DRV_NAME "pata_hpt3x2n" -#define DRV_VERSION "0.3.4" +#define DRV_VERSION "0.3.9" enum { HPT_PCI_FAST = (1 << 31), @@ -185,9 +185,8 @@ pci_read_config_dword(pdev, addr1, ®); mode = hpt3x2n_find_mode(ap, adev->pio_mode); - mode &= ~0x8000000; /* No FIFO in PIO */ - mode &= ~0x30070000; /* Leave config bits alone */ - reg &= 0x30070000; /* Strip timing bits */ + mode &= 0xCFC3FFFF; /* Leave DMA bits alone */ + reg &= ~0xCFC3FFFF; /* Strip timing bits */ pci_write_config_dword(pdev, addr1, reg | mode); } @@ -204,8 +203,7 @@ { struct pci_dev *pdev = to_pci_dev(ap->host->dev); u32 addr1, addr2; - u32 reg; - u32 mode; + u32 reg, mode, mask; u8 fast; addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); @@ -216,11 +214,12 @@ fast &= ~0x07; pci_write_config_byte(pdev, addr2, fast); + mask = adev->dma_mode < XFER_UDMA_0 ? 0x31C001FF : 0x303C0000; + pci_read_config_dword(pdev, addr1, ®); mode = hpt3x2n_find_mode(ap, adev->dma_mode); - mode |= 0x8000000; /* FIFO in MWDMA or UDMA */ - mode &= ~0xC0000000; /* Leave config bits alone */ - reg &= 0xC0000000; /* Strip timing bits */ + mode &= mask; + reg &= ~mask; pci_write_config_dword(pdev, addr1, reg | mode); } @@ -263,7 +262,7 @@ static void hpt3x2n_set_clock(struct ata_port *ap, int source) { - void __iomem *bmdma = ap->ioaddr.bmdma_addr; + void __iomem *bmdma = ap->ioaddr.bmdma_addr - ap->port_no * 8; /* Tristate the bus */ iowrite8(0x80, bmdma+0x73); @@ -273,9 +272,9 @@ iowrite8(source, bmdma+0x7B); iowrite8(0xC0, bmdma+0x79); - /* Reset state machines */ - iowrite8(0x37, bmdma+0x70); - iowrite8(0x37, bmdma+0x74); + /* Reset state machines, avoid enabling the disabled channels */ + iowrite8(ioread8(bmdma+0x70) | 0x32, bmdma+0x70); + iowrite8(ioread8(bmdma+0x74) | 0x32, bmdma+0x74); /* Complete reset */ iowrite8(0x00, bmdma+0x79); @@ -285,21 +284,10 @@ iowrite8(0x00, bmdma+0x77); } -/* Check if our partner interface is busy */ - -static int hpt3x2n_pair_idle(struct ata_port *ap) -{ - struct ata_host *host = ap->host; - struct ata_port *pair = host->ports[ap->port_no ^ 1]; - - if (pair->hsm_task_state == HSM_ST_IDLE) - return 1; - return 0; -} - static int hpt3x2n_use_dpll(struct ata_port *ap, int writing) { long flags = (long)ap->host->private_data; + /* See if we should use the DPLL */ if (writing) return USE_DPLL; /* Needed for write */ @@ -308,20 +296,35 @@ return 0; } +static int hpt3x2n_qc_defer(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + struct ata_port *alt = ap->host->ports[ap->port_no ^ 1]; + int rc, flags = (long)ap->host->private_data; + int dpll = hpt3x2n_use_dpll(ap, qc->tf.flags & ATA_TFLAG_WRITE); + + /* First apply the usual rules */ + rc = ata_std_qc_defer(qc); + if (rc != 0) + return rc; + + if ((flags & USE_DPLL) != dpll && alt->qc_active) + return ATA_DEFER_PORT; + return 0; +} + static unsigned int hpt3x2n_qc_issue(struct ata_queued_cmd *qc) { - struct ata_taskfile *tf = &qc->tf; struct ata_port *ap = qc->ap; int flags = (long)ap->host->private_data; + int dpll = hpt3x2n_use_dpll(ap, qc->tf.flags & ATA_TFLAG_WRITE); - if (hpt3x2n_pair_idle(ap)) { - int dpll = hpt3x2n_use_dpll(ap, (tf->flags & ATA_TFLAG_WRITE)); - if ((flags & USE_DPLL) != dpll) { - if (dpll == 1) - hpt3x2n_set_clock(ap, 0x21); - else - hpt3x2n_set_clock(ap, 0x23); - } + if ((flags & USE_DPLL) != dpll) { + flags &= ~USE_DPLL; + flags |= dpll; + ap->host->private_data = (void *)(long)flags; + + hpt3x2n_set_clock(ap, dpll ? 0x21 : 0x23); } return ata_sff_qc_issue(qc); } @@ -338,6 +341,8 @@ .inherits = &ata_bmdma_port_ops, .bmdma_stop = hpt3x2n_bmdma_stop, + + .qc_defer = hpt3x2n_qc_defer, .qc_issue = hpt3x2n_qc_issue, .cable_detect = hpt3x2n_cable_detect, @@ -455,7 +460,7 @@ unsigned int f_low, f_high; int adjust; unsigned long iobase = pci_resource_start(dev, 4); - void *hpriv = NULL; + void *hpriv = (void *)USE_DPLL; int rc; rc = pcim_enable_device(dev); @@ -542,16 +547,16 @@ pci_mhz); /* Set our private data up. We only need a few flags so we use it directly */ - if (pci_mhz > 60) { - hpriv = (void *)PCI66; - /* - * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in - * the MISC. register to stretch the UltraDMA Tss timing. - * NOTE: This register is only writeable via I/O space. - */ - if (dev->device == PCI_DEVICE_ID_TTI_HPT371) - outb(inb(iobase + 0x9c) | 0x04, iobase + 0x9c); - } + if (pci_mhz > 60) + hpriv = (void *)(PCI66 | USE_DPLL); + + /* + * On HPT371N, if ATA clock is 66 MHz we must set bit 2 in + * the MISC. register to stretch the UltraDMA Tss timing. + * NOTE: This register is only writeable via I/O space. + */ + if (dev->device == PCI_DEVICE_ID_TTI_HPT371) + outb(inb(iobase + 0x9c) | 0x04, iobase + 0x9c); /* Now kick off ATA set up */ return ata_pci_sff_init_one(dev, ppi, &hpt3x2n_sht, hpriv); --- linux-2.6.32.orig/drivers/ata/ata_piix.c +++ linux-2.6.32/drivers/ata/ata_piix.c @@ -291,6 +291,14 @@ { 0x8086, 0x3b2d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, /* SATA Controller IDE (PCH) */ { 0x8086, 0x3b2e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, + /* SATA Controller IDE (CPT) */ + { 0x8086, 0x1c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, + /* SATA Controller IDE (CPT) */ + { 0x8086, 0x1c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, + /* SATA Controller IDE (CPT) */ + { 0x8086, 0x1c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + /* SATA Controller IDE (CPT) */ + { 0x8086, 0x1c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, { } /* terminate list */ }; @@ -869,10 +877,10 @@ (timings[pio][1] << 8); } - if (ap->udma_mask) { + if (ap->udma_mask) udma_enable &= ~(1 << devid); - pci_write_config_word(dev, master_port, master_data); - } + + pci_write_config_word(dev, master_port, master_data); } /* Don't scribble on 0x48 if the controller does not support UDMA */ if (ap->udma_mask) --- linux-2.6.32.orig/drivers/ata/pata_via.c +++ linux-2.6.32/drivers/ata/pata_via.c @@ -661,6 +661,7 @@ { PCI_VDEVICE(VIA, 0x3164), }, { PCI_VDEVICE(VIA, 0x5324), }, { PCI_VDEVICE(VIA, 0xC409), VIA_IDFLAG_SINGLE }, + { PCI_VDEVICE(VIA, 0x9001), VIA_IDFLAG_SINGLE }, { }, }; --- linux-2.6.32.orig/drivers/ata/libata-sff.c +++ linux-2.6.32/drivers/ata/libata-sff.c @@ -893,6 +893,9 @@ do_write); } + if (!do_write) + flush_dcache_page(page); + qc->curbytes += qc->sect_size; qc->cursg_ofs += qc->sect_size; --- linux-2.6.32.orig/drivers/ata/libata-eh.c +++ linux-2.6.32/drivers/ata/libata-eh.c @@ -870,6 +870,8 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc) { struct ata_port *ap = qc->ap; + struct request_queue *q = qc->scsicmd->device->request_queue; + unsigned long flags; WARN_ON(!ap->ops->error_handler); @@ -881,7 +883,9 @@ * Note that ATA_QCFLAG_FAILED is unconditionally set after * this function completes. */ + spin_lock_irqsave(q->queue_lock, flags); blk_abort_request(qc->scsicmd->request); + spin_unlock_irqrestore(q->queue_lock, flags); } /** @@ -1615,6 +1619,7 @@ } /* okay, this error is ours */ + memset(&tf, 0, sizeof(tf)); rc = ata_eh_read_log_10h(dev, &tag, &tf); if (rc) { ata_link_printk(link, KERN_ERR, "failed to read log page 10h " @@ -2019,8 +2024,9 @@ qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER); /* determine whether the command is worth retrying */ - if (!(qc->err_mask & AC_ERR_INVALID) && - ((qc->flags & ATA_QCFLAG_IO) || qc->err_mask != AC_ERR_DEV)) + if (qc->flags & ATA_QCFLAG_IO || + (!(qc->err_mask & AC_ERR_INVALID) && + qc->err_mask != AC_ERR_DEV)) qc->flags |= ATA_QCFLAG_RETRY; /* accumulate error info */ --- linux-2.6.32.orig/drivers/message/fusion/mptscsih.c +++ linux-2.6.32/drivers/message/fusion/mptscsih.c @@ -792,11 +792,36 @@ * precedence! */ sc->result = (DID_OK << 16) | scsi_status; - if (scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID) { - /* Have already saved the status and sense data + if (!(scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID)) { + + /* + * For an Errata on LSI53C1030 + * When the length of request data + * and transfer data are different + * with result of command (READ or VERIFY), + * DID_SOFT_ERROR is set. */ - ; - } else { + if (ioc->bus_type == SPI) { + if (pScsiReq->CDB[0] == READ_6 || + pScsiReq->CDB[0] == READ_10 || + pScsiReq->CDB[0] == READ_12 || + pScsiReq->CDB[0] == READ_16 || + pScsiReq->CDB[0] == VERIFY || + pScsiReq->CDB[0] == VERIFY_16) { + if (scsi_bufflen(sc) != + xfer_cnt) { + sc->result = + DID_SOFT_ERROR << 16; + printk(KERN_WARNING "Errata" + "on LSI53C1030 occurred." + "sc->req_bufflen=0x%02x," + "xfer_cnt=0x%02x\n", + scsi_bufflen(sc), + xfer_cnt); + } + } + } + if (xfer_cnt < sc->underflow) { if (scsi_status == SAM_STAT_BUSY) sc->result = SAM_STAT_BUSY; @@ -835,7 +860,58 @@ sc->result = (DID_OK << 16) | scsi_status; if (scsi_state == 0) { ; - } else if (scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID) { + } else if (scsi_state & + MPI_SCSI_STATE_AUTOSENSE_VALID) { + + /* + * For potential trouble on LSI53C1030. + * (date:2007.xx.) + * It is checked whether the length of + * request data is equal to + * the length of transfer and residual. + * MEDIUM_ERROR is set by incorrect data. + */ + if ((ioc->bus_type == SPI) && + (sc->sense_buffer[2] & 0x20)) { + u32 difftransfer; + difftransfer = + sc->sense_buffer[3] << 24 | + sc->sense_buffer[4] << 16 | + sc->sense_buffer[5] << 8 | + sc->sense_buffer[6]; + if (((sc->sense_buffer[3] & 0x80) == + 0x80) && (scsi_bufflen(sc) + != xfer_cnt)) { + sc->sense_buffer[2] = + MEDIUM_ERROR; + sc->sense_buffer[12] = 0xff; + sc->sense_buffer[13] = 0xff; + printk(KERN_WARNING"Errata" + "on LSI53C1030 occurred." + "sc->req_bufflen=0x%02x," + "xfer_cnt=0x%02x\n" , + scsi_bufflen(sc), + xfer_cnt); + } + if (((sc->sense_buffer[3] & 0x80) + != 0x80) && + (scsi_bufflen(sc) != + xfer_cnt + difftransfer)) { + sc->sense_buffer[2] = + MEDIUM_ERROR; + sc->sense_buffer[12] = 0xff; + sc->sense_buffer[13] = 0xff; + printk(KERN_WARNING + "Errata on LSI53C1030 occurred" + "sc->req_bufflen=0x%02x," + " xfer_cnt=0x%02x," + "difftransfer=0x%02x\n", + scsi_bufflen(sc), + xfer_cnt, + difftransfer); + } + } + /* * If running against circa 200003dd 909 MPT f/w, * may get this (AUTOSENSE_VALID) for actual TASK_SET_FULL @@ -1720,7 +1796,7 @@ dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: " "Command not in the active list! (sc=%p)\n", ioc->name, SCpnt)); - retval = 0; + retval = SUCCESS; goto out; } --- linux-2.6.32.orig/drivers/message/fusion/mptbase.c +++ linux-2.6.32/drivers/message/fusion/mptbase.c @@ -3232,6 +3232,16 @@ pfacts->IOCStatus = le16_to_cpu(pfacts->IOCStatus); pfacts->IOCLogInfo = le32_to_cpu(pfacts->IOCLogInfo); pfacts->MaxDevices = le16_to_cpu(pfacts->MaxDevices); + /* + * VMware emulation is broken, its PortFact's MaxDevices reports value + * programmed by IOC Init, so if you program IOC Init to 256 (which is 0, + * as that field is only 8 bit), it reports back 0 in port facts, instead + * of 256... And unfortunately using 256 triggers another bug in the + * code (parallel SCSI can have only 16 devices). + */ + if (pfacts->MaxDevices == 0) { + pfacts->MaxDevices = 16; + } pfacts->PortSCSIID = le16_to_cpu(pfacts->PortSCSIID); pfacts->ProtocolFlags = le16_to_cpu(pfacts->ProtocolFlags); pfacts->MaxPostedCmdBuffers = le16_to_cpu(pfacts->MaxPostedCmdBuffers); @@ -4330,6 +4340,8 @@ if (ioc->bus_type == SPI) num_chain *= MPT_SCSI_CAN_QUEUE; + else if (ioc->bus_type == SAS) + num_chain *= MPT_SAS_CAN_QUEUE; else num_chain *= MPT_FC_CAN_QUEUE; --- linux-2.6.32.orig/drivers/message/fusion/mptctl.c +++ linux-2.6.32/drivers/message/fusion/mptctl.c @@ -621,11 +621,8 @@ */ iocnumX = khdr.iocnum & 0xFF; if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || - (iocp == NULL)) { - printk(KERN_DEBUG MYNAM "%s::mptctl_ioctl() @%d - ioc%d not found!\n", - __FILE__, __LINE__, iocnumX); + (iocp == NULL)) return -ENODEV; - } if (!iocp->active) { printk(KERN_DEBUG MYNAM "%s::mptctl_ioctl() @%d - Controller disabled.\n", --- linux-2.6.32.orig/drivers/media/common/tuners/mxl5007t.c +++ linux-2.6.32/drivers/media/common/tuners/mxl5007t.c @@ -196,7 +196,7 @@ i = j = 0; while (reg_pair1[i].reg || reg_pair1[i].val) { - while (reg_pair2[j].reg || reg_pair2[j].reg) { + while (reg_pair2[j].reg || reg_pair2[j].val) { if (reg_pair1[i].reg != reg_pair2[j].reg) { j++; continue; --- linux-2.6.32.orig/drivers/media/video/ov511.c +++ linux-2.6.32/drivers/media/video/ov511.c @@ -5878,7 +5878,7 @@ goto error; } - mutex_lock(&ov->lock); + mutex_unlock(&ov->lock); return 0; --- linux-2.6.32.orig/drivers/media/video/pwc/pwc-ctrl.c +++ linux-2.6.32/drivers/media/video/pwc/pwc-ctrl.c @@ -753,7 +753,7 @@ buf[0] = 0xff; /* fixed */ ret = send_control_msg(pdev, - SET_LUM_CTL, SHUTTER_MODE_FORMATTER, &buf, sizeof(buf)); + SET_LUM_CTL, SHUTTER_MODE_FORMATTER, &buf, 1); if (!mode && ret >= 0) { if (value < 0) --- linux-2.6.32.orig/drivers/media/video/saa7134/saa7134-cards.c +++ linux-2.6.32/drivers/media/video/saa7134/saa7134-cards.c @@ -5279,6 +5279,30 @@ .amux = TV, }, }, + [SAA7134_BOARD_ASUS_EUROPA_HYBRID] = { + .name = "Asus Europa Hybrid OEM", + .audio_clock = 0x00187de7, + .tuner_type = TUNER_PHILIPS_TD1316, + .radio_type = UNSET, + .tuner_addr = 0x61, + .radio_addr = ADDR_UNSET, + .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE, + .mpeg = SAA7134_MPEG_DVB, + .inputs = { { + .name = name_tv, + .vmux = 3, + .amux = TV, + .tv = 1, + }, { + .name = name_comp1, + .vmux = 4, + .amux = LINE2, + }, { + .name = name_svideo, + .vmux = 8, + .amux = LINE2, + } }, + }, }; @@ -6418,6 +6442,12 @@ .subdevice = 0x2004, .driver_data = SAA7134_BOARD_ZOLID_HYBRID_PCI, }, { + .vendor = PCI_VENDOR_ID_PHILIPS, + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, + .subvendor = 0x1043, + .subdevice = 0x4847, + .driver_data = SAA7134_BOARD_ASUS_EUROPA_HYBRID, + }, { /* --- boards without eeprom + subsystem ID --- */ .vendor = PCI_VENDOR_ID_PHILIPS, .device = PCI_DEVICE_ID_PHILIPS_SAA7134, @@ -7079,6 +7109,7 @@ /* break intentionally omitted */ case SAA7134_BOARD_VIDEOMATE_DVBT_300: case SAA7134_BOARD_ASUS_EUROPA2_HYBRID: + case SAA7134_BOARD_ASUS_EUROPA_HYBRID: { /* The Philips EUROPA based hybrid boards have the tuner --- linux-2.6.32.orig/drivers/media/video/saa7134/saa7134-dvb.c +++ linux-2.6.32/drivers/media/video/saa7134/saa7134-dvb.c @@ -1116,6 +1116,7 @@ break; case SAA7134_BOARD_PHILIPS_EUROPA: case SAA7134_BOARD_VIDEOMATE_DVBT_300: + case SAA7134_BOARD_ASUS_EUROPA_HYBRID: fe0->dvb.frontend = dvb_attach(tda10046_attach, &philips_europa_config, &dev->i2c_adap); --- linux-2.6.32.orig/drivers/media/video/saa7134/saa7134.h +++ linux-2.6.32/drivers/media/video/saa7134/saa7134.h @@ -297,6 +297,7 @@ #define SAA7134_BOARD_BEHOLD_X7 171 #define SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM 172 #define SAA7134_BOARD_ZOLID_HYBRID_PCI 173 +#define SAA7134_BOARD_ASUS_EUROPA_HYBRID 174 #define SAA7134_MAXBOARDS 32 #define SAA7134_INPUT_MAX 8 --- linux-2.6.32.orig/drivers/media/video/em28xx/em28xx-dvb.c +++ linux-2.6.32/drivers/media/video/em28xx/em28xx-dvb.c @@ -610,6 +610,7 @@ if (dev->dvb) { unregister_dvb(dev->dvb); + kfree(dev->dvb); dev->dvb = NULL; } --- linux-2.6.32.orig/drivers/media/video/zc0301/zc0301_sensor.h +++ linux-2.6.32/drivers/media/video/zc0301/zc0301_sensor.h @@ -62,7 +62,6 @@ #define ZC0301_ID_TABLE \ static const struct usb_device_id zc0301_id_table[] = { \ { ZC0301_USB_DEVICE(0x046d, 0x08ae, 0xff), }, /* PAS202 */ \ - { ZC0301_USB_DEVICE(0x0ac8, 0x303b, 0xff), }, /* PB-0330 */ \ { } \ }; #else --- linux-2.6.32.orig/drivers/media/video/bt8xx/bttvp.h +++ linux-2.6.32/drivers/media/video/bt8xx/bttvp.h @@ -279,6 +279,7 @@ extern unsigned int bttv_gpio; extern void bttv_gpio_tracking(struct bttv *btv, char *comment); extern int init_bttv_i2c(struct bttv *btv); +extern void init_bttv_i2c_ir(struct bttv *btv); extern int fini_bttv_i2c(struct bttv *btv); #define bttv_printk if (bttv_verbose) printk --- linux-2.6.32.orig/drivers/media/video/bt8xx/bttv-i2c.c +++ linux-2.6.32/drivers/media/video/bt8xx/bttv-i2c.c @@ -388,7 +388,12 @@ if (0 == btv->i2c_rc && i2c_scan) do_i2c_scan(btv->c.v4l2_dev.name, &btv->i2c_client); - /* Instantiate the IR receiver device, if present */ + return btv->i2c_rc; +} + +/* Instantiate the I2C IR receiver device, if present */ +void __devinit init_bttv_i2c_ir(struct bttv *btv) +{ if (0 == btv->i2c_rc) { struct i2c_board_info info; /* The external IR receiver is at i2c address 0x34 (0x35 for @@ -408,7 +413,6 @@ strlcpy(info.type, "ir_video", I2C_NAME_SIZE); i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list); } - return btv->i2c_rc; } int __devexit fini_bttv_i2c(struct bttv *btv) --- linux-2.6.32.orig/drivers/media/video/bt8xx/bttv-driver.c +++ linux-2.6.32/drivers/media/video/bt8xx/bttv-driver.c @@ -4468,6 +4468,7 @@ request_modules(btv); } + init_bttv_i2c_ir(btv); bttv_input_init(btv); /* everything is fine */ --- linux-2.6.32.orig/drivers/media/video/uvc/uvc_ctrl.c +++ linux-2.6.32/drivers/media/video/uvc/uvc_ctrl.c @@ -826,6 +826,13 @@ ret = 0; goto out; + case V4L2_CTRL_TYPE_BUTTON: + v4l2_ctrl->minimum = 0; + v4l2_ctrl->maximum = 0; + v4l2_ctrl->step = 0; + ret = 0; + goto out; + default: break; } @@ -1405,7 +1412,7 @@ size = entity->processing.bControlSize; for (i = 0; i < ARRAY_SIZE(blacklist); ++i) { - if (!usb_match_id(dev->intf, &blacklist[i].id)) + if (!usb_match_one_id(dev->intf, &blacklist[i].id)) continue; if (blacklist[i].index >= 8 * size || --- linux-2.6.32.orig/drivers/media/video/gspca/mr97310a.c +++ linux-2.6.32/drivers/media/video/gspca/mr97310a.c @@ -530,6 +530,12 @@ {0x13, 0x00, {0x01}, 1}, {0, 0, {0}, 0} }; + /* Without this command the cam won't work with USB-UHCI */ + gspca_dev->usb_buf[0] = 0x0a; + gspca_dev->usb_buf[1] = 0x00; + err_code = mr_write(gspca_dev, 2); + if (err_code < 0) + return err_code; err_code = sensor_write_regs(gspca_dev, cif_sensor1_init_data, ARRAY_SIZE(cif_sensor1_init_data)); } --- linux-2.6.32.orig/drivers/media/video/gspca/ov519.c +++ linux-2.6.32/drivers/media/video/gspca/ov519.c @@ -3364,6 +3364,7 @@ {USB_DEVICE(0x041e, 0x4061), .driver_info = BRIDGE_OV519 }, {USB_DEVICE(0x041e, 0x4064), .driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED }, + {USB_DEVICE(0x041e, 0x4067), .driver_info = BRIDGE_OV519 }, {USB_DEVICE(0x041e, 0x4068), .driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED }, {USB_DEVICE(0x045e, 0x028c), .driver_info = BRIDGE_OV519 }, --- linux-2.6.32.orig/drivers/media/video/gspca/sunplus.c +++ linux-2.6.32/drivers/media/video/gspca/sunplus.c @@ -705,7 +705,7 @@ rc = spca504B_PollingDataReady(gspca_dev); /* Init the cam width height with some values get on init ? */ - reg_w_riv(dev, 0x31, 0, 0x04); + reg_w_riv(dev, 0x31, 0x04, 0); spca504B_WaitCmdStatus(gspca_dev); rc = spca504B_PollingDataReady(gspca_dev); break; @@ -807,14 +807,14 @@ default: /* case BRIDGE_SPCA533: */ /* case BRIDGE_SPCA504B: */ - reg_w_riv(dev, 0, 0x00, 0x21ad); /* hue */ - reg_w_riv(dev, 0, 0x01, 0x21ac); /* sat/hue */ - reg_w_riv(dev, 0, 0x00, 0x21a3); /* gamma */ + reg_w_riv(dev, 0, 0x21ad, 0x00); /* hue */ + reg_w_riv(dev, 0, 0x21ac, 0x01); /* sat/hue */ + reg_w_riv(dev, 0, 0x21a3, 0x00); /* gamma */ break; case BRIDGE_SPCA536: - reg_w_riv(dev, 0, 0x40, 0x20f5); - reg_w_riv(dev, 0, 0x01, 0x20f4); - reg_w_riv(dev, 0, 0x00, 0x2089); + reg_w_riv(dev, 0, 0x20f5, 0x40); + reg_w_riv(dev, 0, 0x20f4, 0x01); + reg_w_riv(dev, 0, 0x2089, 0x00); break; } if (pollreg) @@ -888,11 +888,11 @@ switch (sd->bridge) { case BRIDGE_SPCA504B: reg_w_riv(dev, 0x1d, 0x00, 0); - reg_w_riv(dev, 0, 0x01, 0x2306); - reg_w_riv(dev, 0, 0x00, 0x0d04); - reg_w_riv(dev, 0, 0x00, 0x2000); - reg_w_riv(dev, 0, 0x13, 0x2301); - reg_w_riv(dev, 0, 0x00, 0x2306); + reg_w_riv(dev, 0, 0x2306, 0x01); + reg_w_riv(dev, 0, 0x0d04, 0x00); + reg_w_riv(dev, 0, 0x2000, 0x00); + reg_w_riv(dev, 0, 0x2301, 0x13); + reg_w_riv(dev, 0, 0x2306, 0x00); /* fall thru */ case BRIDGE_SPCA533: spca504B_PollingDataReady(gspca_dev); @@ -1011,7 +1011,7 @@ spca504B_WaitCmdStatus(gspca_dev); break; default: - reg_w_riv(dev, 0x31, 0, 0x04); + reg_w_riv(dev, 0x31, 0x04, 0); spca504B_WaitCmdStatus(gspca_dev); spca504B_PollingDataReady(gspca_dev); break; --- linux-2.6.32.orig/drivers/media/video/gspca/sn9c20x.c +++ linux-2.6.32/drivers/media/video/gspca/sn9c20x.c @@ -2319,7 +2319,7 @@ } } if (avg_lum > MAX_AVG_LUM) { - if (sd->gain - 1 >= 0) { + if (sd->gain >= 1) { sd->gain--; set_gain(gspca_dev); } --- linux-2.6.32.orig/drivers/media/dvb/siano/smsusb.c +++ linux-2.6.32/drivers/media/dvb/siano/smsusb.c @@ -533,8 +533,18 @@ .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0xb910), .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xb980), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xb990), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0xc000), .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xc010), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xc080), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xc090), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { } /* Terminating entry */ }; --- linux-2.6.32.orig/drivers/media/dvb/frontends/l64781.c +++ linux-2.6.32/drivers/media/dvb/frontends/l64781.c @@ -192,8 +192,8 @@ spi_bias *= qam_tab[p->constellation]; spi_bias /= p->code_rate_HP + 1; spi_bias /= (guard_tab[p->guard_interval] + 32); - spi_bias *= 1000ULL; - spi_bias /= 1000ULL + ppm/1000; + spi_bias *= 1000; + spi_bias /= 1000 + ppm/1000; spi_bias *= p->code_rate_HP; val0x04 = (p->transmission_mode << 2) | p->guard_interval; --- linux-2.6.32.orig/drivers/media/dvb/ttpci/budget.c +++ linux-2.6.32/drivers/media/dvb/ttpci/budget.c @@ -643,9 +643,6 @@ &budget->i2c_adap, &tt1600_isl6423_config); - } else { - dvb_frontend_detach(budget->dvb_frontend); - budget->dvb_frontend = NULL; } } break; --- linux-2.6.32.orig/drivers/media/dvb/dvb-usb/Kconfig +++ linux-2.6.32/drivers/media/dvb/dvb-usb/Kconfig @@ -112,8 +112,8 @@ select DVB_MT352 if !DVB_FE_CUSTOMISE select DVB_ZL10353 if !DVB_FE_CUSTOMISE select DVB_DIB7000P if !DVB_FE_CUSTOMISE - select DVB_LGS8GL5 if !DVB_FE_CUSTOMISE select DVB_TUNER_DIB0070 if !DVB_FE_CUSTOMISE + select DVB_LGS8GXX if !DVB_FE_CUSTOMISE select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMISE select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMISE select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMISE --- linux-2.6.32.orig/drivers/media/dvb/dvb-core/dvb_net.c +++ linux-2.6.32/drivers/media/dvb/dvb-core/dvb_net.c @@ -504,6 +504,7 @@ "bytes left in TS. Resyncing.\n", ts_remain); priv->ule_sndu_len = 0; priv->need_pusi = 1; + ts += TS_SZ; continue; } --- linux-2.6.32.orig/drivers/media/dvb/dvb-core/dmxdev.c +++ linux-2.6.32/drivers/media/dvb/dvb-core/dmxdev.c @@ -761,7 +761,6 @@ dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192); dmxdevfilter->type = DMXDEV_TYPE_NONE; dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED); - INIT_LIST_HEAD(&dmxdevfilter->feed.ts); init_timer(&dmxdevfilter->timer); dvbdev->users++; @@ -887,6 +886,7 @@ dmxdevfilter->type = DMXDEV_TYPE_PES; memcpy(&dmxdevfilter->params, params, sizeof(struct dmx_pes_filter_params)); + INIT_LIST_HEAD(&dmxdevfilter->feed.ts); dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); --- linux-2.6.32.orig/drivers/char/vt_ioctl.c +++ linux-2.6.32/drivers/char/vt_ioctl.c @@ -38,6 +38,8 @@ #include #include +#define max_font_size 65536 + char vt_dont_switch; extern struct tty_driver *console_driver; @@ -1589,6 +1591,7 @@ { unsigned char old_vc_mode; int old = fg_console; + struct vc_data *oldvc = vc_cons[fg_console].d; last_console = fg_console; @@ -1597,9 +1600,31 @@ * KD_TEXT mode or vice versa, which means we need to blank or * unblank the screen later. */ - old_vc_mode = vc_cons[fg_console].d->vc_mode; + old_vc_mode = oldvc->vc_mode; + +#if defined(CONFIG_VGA_CONSOLE) + if (old_vc_mode == KD_TEXT && oldvc->vc_sw == &vga_con && + oldvc->vc_sw->con_font_get) { + if (!oldvc->vc_font.data) + oldvc->vc_font.data = kmalloc(max_font_size, + GFP_KERNEL); + lock_kernel(); + oldvc->vc_sw->con_font_get(oldvc, &oldvc->vc_font); + unlock_kernel(); + } +#endif switch_screen(vc); +#if defined(CONFIG_VGA_CONSOLE) + if (vc->vc_mode == KD_TEXT && vc->vc_sw == &vga_con && + vc->vc_sw->con_font_set) { + if (vc->vc_font.data) { + lock_kernel(); + vc->vc_sw->con_font_set(vc, &vc->vc_font, 0); + unlock_kernel(); + } + } +#endif /* * This can't appear below a successful kill_pid(). If it did, * then the *blank_screen operation could occur while X, having --- linux-2.6.32.orig/drivers/char/tty_ldisc.c +++ linux-2.6.32/drivers/char/tty_ldisc.c @@ -687,12 +687,13 @@ /** * tty_ldisc_reinit - reinitialise the tty ldisc * @tty: tty to reinit + * @ldisc: line discipline to reinitialize * - * Switch the tty back to N_TTY line discipline and leave the - * ldisc state closed + * Switch the tty to a line discipline and leave the ldisc + * state closed */ -static void tty_ldisc_reinit(struct tty_struct *tty) +static void tty_ldisc_reinit(struct tty_struct *tty, int ldisc) { struct tty_ldisc *ld; @@ -702,10 +703,10 @@ /* * Switch the line discipline back */ - ld = tty_ldisc_get(N_TTY); + ld = tty_ldisc_get(ldisc); BUG_ON(IS_ERR(ld)); tty_ldisc_assign(tty, ld); - tty_set_termios_ldisc(tty, N_TTY); + tty_set_termios_ldisc(tty, ldisc); } /** @@ -726,6 +727,8 @@ void tty_ldisc_hangup(struct tty_struct *tty) { struct tty_ldisc *ld; + int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS; + int err = 0; /* * FIXME! What are the locking issues here? This may me overdoing @@ -753,25 +756,32 @@ wake_up_interruptible_poll(&tty->read_wait, POLLIN); /* * Shutdown the current line discipline, and reset it to - * N_TTY. + * N_TTY if need be. + * + * Avoid racing set_ldisc or tty_ldisc_release */ - if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { - /* Avoid racing set_ldisc or tty_ldisc_release */ - mutex_lock(&tty->ldisc_mutex); - tty_ldisc_halt(tty); - if (tty->ldisc) { /* Not yet closed */ - /* Switch back to N_TTY */ - tty_ldisc_reinit(tty); - /* At this point we have a closed ldisc and we want to - reopen it. We could defer this to the next open but - it means auditing a lot of other paths so this is - a FIXME */ + mutex_lock(&tty->ldisc_mutex); + tty_ldisc_halt(tty); + /* At this point we have a closed ldisc and we want to + reopen it. We could defer this to the next open but + it means auditing a lot of other paths so this is + a FIXME */ + if (tty->ldisc) { /* Not yet closed */ + if (reset == 0) { + tty_ldisc_reinit(tty, tty->termios->c_line); + err = tty_ldisc_open(tty, tty->ldisc); + } + /* If the re-open fails or we reset then go to N_TTY. The + N_TTY open cannot fail */ + if (reset || err) { + tty_ldisc_reinit(tty, N_TTY); WARN_ON(tty_ldisc_open(tty, tty->ldisc)); - tty_ldisc_enable(tty); } - mutex_unlock(&tty->ldisc_mutex); - tty_reset_termios(tty); + tty_ldisc_enable(tty); } + mutex_unlock(&tty->ldisc_mutex); + if (reset) + tty_reset_termios(tty); } /** --- linux-2.6.32.orig/drivers/char/raw.c +++ linux-2.6.32/drivers/char/raw.c @@ -247,6 +247,7 @@ .aio_read = generic_file_aio_read, .write = do_sync_write, .aio_write = blkdev_aio_write, + .fsync = block_fsync, .open = raw_open, .release= raw_release, .ioctl = raw_ioctl, --- linux-2.6.32.orig/drivers/char/nozomi.c +++ linux-2.6.32/drivers/char/nozomi.c @@ -1629,10 +1629,10 @@ dc->open_ttys--; port->count--; - tty_port_tty_set(port, NULL); if (port->count == 0) { DBG1("close: %d", nport->token_dl); + tty_port_tty_set(port, NULL); spin_lock_irqsave(&dc->spin_mutex, flags); dc->last_ier &= ~(nport->token_dl); writew(dc->last_ier, dc->reg_ier); --- linux-2.6.32.orig/drivers/char/keyboard.c +++ linux-2.6.32/drivers/char/keyboard.c @@ -1068,6 +1068,8 @@ int code; switch (keycode) { + case KEY_RESERVED: + break; case KEY_PAUSE: put_queue(vc, 0xe1); put_queue(vc, 0x1d | up_flag); @@ -1125,6 +1127,8 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag) { + if (keycode == KEY_RESERVED) + return 0; if (keycode > 127) return -1; --- linux-2.6.32.orig/drivers/char/mem.c +++ linux-2.6.32/drivers/char/mem.c @@ -35,6 +35,19 @@ # include #endif +static inline unsigned long size_inside_page(unsigned long start, + unsigned long size) +{ + unsigned long sz; + + if (-start & (PAGE_SIZE - 1)) + sz = -start & (PAGE_SIZE - 1); + else + sz = PAGE_SIZE; + + return min_t(unsigned long, sz, size); +} + /* * Architectures vary in how they handle caching for addresses * outside of main memory. @@ -408,6 +421,7 @@ unsigned long p = *ppos; ssize_t low_count, read, sz; char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */ + int err = 0; read = 0; if (p < (unsigned long) high_memory) { @@ -430,15 +444,7 @@ } #endif while (low_count > 0) { - /* - * Handle first page in case it's not aligned - */ - if (-p & (PAGE_SIZE - 1)) - sz = -p & (PAGE_SIZE - 1); - else - sz = PAGE_SIZE; - - sz = min_t(unsigned long, sz, low_count); + sz = size_inside_page(p, low_count); /* * On ia64 if a page has been mapped somewhere as @@ -462,16 +468,18 @@ if (!kbuf) return -ENOMEM; while (count > 0) { - int len = count; + int len = size_inside_page(p, count); - if (len > PAGE_SIZE) - len = PAGE_SIZE; + if (!is_vmalloc_or_module_addr((void *)p)) { + err = -ENXIO; + break; + } len = vread(kbuf, (char *)p, len); if (!len) break; if (copy_to_user(buf, kbuf, len)) { - free_page((unsigned long)kbuf); - return -EFAULT; + err = -EFAULT; + break; } count -= len; buf += len; @@ -480,8 +488,8 @@ } free_page((unsigned long)kbuf); } - *ppos = p; - return read; + *ppos = p; + return read ? read : err; } @@ -510,15 +518,8 @@ while (count > 0) { char *ptr; - /* - * Handle first page in case it's not aligned - */ - if (-realp & (PAGE_SIZE - 1)) - sz = -realp & (PAGE_SIZE - 1); - else - sz = PAGE_SIZE; - sz = min_t(unsigned long, sz, count); + sz = size_inside_page(realp, count); /* * On ia64 if a page has been mapped somewhere as @@ -557,6 +558,7 @@ ssize_t virtr = 0; ssize_t written; char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */ + int err = 0; if (p < (unsigned long) high_memory) { @@ -578,20 +580,20 @@ if (!kbuf) return wrote ? wrote : -ENOMEM; while (count > 0) { - int len = count; + int len = size_inside_page(p, count); - if (len > PAGE_SIZE) - len = PAGE_SIZE; + if (!is_vmalloc_or_module_addr((void *)p)) { + err = -ENXIO; + break; + } if (len) { written = copy_from_user(kbuf, buf, len); if (written) { - if (wrote + virtr) - break; - free_page((unsigned long)kbuf); - return -EFAULT; + err = -EFAULT; + break; } } - len = vwrite(kbuf, (char *)p, len); + vwrite(kbuf, (char *)p, len); count -= len; buf += len; virtr += len; @@ -600,8 +602,8 @@ free_page((unsigned long)kbuf); } - *ppos = p; - return virtr + wrote; + *ppos = p; + return virtr + wrote ? : err; } #endif --- linux-2.6.32.orig/drivers/char/tty_io.c +++ linux-2.6.32/drivers/char/tty_io.c @@ -1408,6 +1408,8 @@ list_del_init(&tty->tty_files); file_list_unlock(); + put_pid(tty->pgrp); + put_pid(tty->session); free_tty_struct(tty); } @@ -1930,8 +1932,10 @@ pid = task_pid(current); type = PIDTYPE_PID; } + get_pid(pid); spin_unlock_irqrestore(&tty->ctrl_lock, flags); retval = __f_setown(filp, pid, type, 0); + put_pid(pid); if (retval) goto out; } else { --- linux-2.6.32.orig/drivers/char/tty_buffer.c +++ linux-2.6.32/drivers/char/tty_buffer.c @@ -247,7 +247,8 @@ { int copied = 0; do { - int space = tty_buffer_request_room(tty, size - copied); + int goal = min(size - copied, TTY_BUFFER_PAGE); + int space = tty_buffer_request_room(tty, goal); struct tty_buffer *tb = tty->buf.tail; /* If there is no space then tb may be NULL */ if (unlikely(space == 0)) @@ -283,7 +284,8 @@ { int copied = 0; do { - int space = tty_buffer_request_room(tty, size - copied); + int goal = min(size - copied, TTY_BUFFER_PAGE); + int space = tty_buffer_request_room(tty, goal); struct tty_buffer *tb = tty->buf.tail; /* If there is no space then tb may be NULL */ if (unlikely(space == 0)) --- linux-2.6.32.orig/drivers/char/random.c +++ linux-2.6.32/drivers/char/random.c @@ -1051,12 +1051,6 @@ /* like a named pipe */ } - /* - * If we gave the user some bytes, update the access time. - */ - if (count) - file_accessed(file); - return (count ? count : retval); } @@ -1107,7 +1101,6 @@ size_t count, loff_t *ppos) { size_t ret; - struct inode *inode = file->f_path.dentry->d_inode; ret = write_pool(&blocking_pool, buffer, count); if (ret) @@ -1116,8 +1109,6 @@ if (ret) return ret; - inode->i_mtime = current_fs_time(inode->i_sb); - mark_inode_dirty(inode); return (ssize_t)count; } --- linux-2.6.32.orig/drivers/char/tpm/tpm_infineon.c +++ linux-2.6.32/drivers/char/tpm/tpm_infineon.c @@ -39,12 +39,12 @@ struct tpm_inf_dev { int iotype; - void __iomem *mem_base; /* MMIO ioremap'd addr */ - unsigned long map_base; /* phys MMIO base */ - unsigned long map_size; /* MMIO region size */ - unsigned int index_off; /* index register offset */ + void __iomem *mem_base; /* MMIO ioremap'd addr */ + unsigned long map_base; /* phys MMIO base */ + unsigned long map_size; /* MMIO region size */ + unsigned int index_off; /* index register offset */ - unsigned int data_regs; /* Data registers */ + unsigned int data_regs; /* Data registers */ unsigned int data_size; unsigned int config_port; /* IO Port config index reg */ @@ -406,14 +406,14 @@ .miscdev = {.fops = &inf_ops,}, }; -static const struct pnp_device_id tpm_pnp_tbl[] = { +static const struct pnp_device_id tpm_inf_pnp_tbl[] = { /* Infineon TPMs */ {"IFX0101", 0}, {"IFX0102", 0}, {"", 0} }; -MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl); +MODULE_DEVICE_TABLE(pnp, tpm_inf_pnp_tbl); static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) @@ -430,7 +430,7 @@ if (pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED)) { - tpm_dev.iotype = TPM_INF_IO_PORT; + tpm_dev.iotype = TPM_INF_IO_PORT; tpm_dev.config_port = pnp_port_start(dev, 0); tpm_dev.config_size = pnp_port_len(dev, 0); @@ -459,9 +459,9 @@ goto err_last; } } else if (pnp_mem_valid(dev, 0) && - !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { + !(pnp_mem_flags(dev, 0) & IORESOURCE_DISABLED)) { - tpm_dev.iotype = TPM_INF_IO_MEM; + tpm_dev.iotype = TPM_INF_IO_MEM; tpm_dev.map_base = pnp_mem_start(dev, 0); tpm_dev.map_size = pnp_mem_len(dev, 0); @@ -563,11 +563,11 @@ "product id 0x%02x%02x" "%s\n", tpm_dev.iotype == TPM_INF_IO_PORT ? - tpm_dev.config_port : - tpm_dev.map_base + tpm_dev.index_off, + tpm_dev.config_port : + tpm_dev.map_base + tpm_dev.index_off, tpm_dev.iotype == TPM_INF_IO_PORT ? - tpm_dev.data_regs : - tpm_dev.map_base + tpm_dev.data_regs, + tpm_dev.data_regs : + tpm_dev.map_base + tpm_dev.data_regs, version[0], version[1], vendorid[0], vendorid[1], productid[0], productid[1], chipname); @@ -607,20 +607,55 @@ iounmap(tpm_dev.mem_base); release_mem_region(tpm_dev.map_base, tpm_dev.map_size); } + tpm_dev_vendor_release(chip); tpm_remove_hardware(chip->dev); } } +static int tpm_inf_pnp_suspend(struct pnp_dev *dev, pm_message_t pm_state) +{ + struct tpm_chip *chip = pnp_get_drvdata(dev); + int rc; + if (chip) { + u8 savestate[] = { + 0, 193, /* TPM_TAG_RQU_COMMAND */ + 0, 0, 0, 10, /* blob length (in bytes) */ + 0, 0, 0, 152 /* TPM_ORD_SaveState */ + }; + dev_info(&dev->dev, "saving TPM state\n"); + rc = tpm_inf_send(chip, savestate, sizeof(savestate)); + if (rc < 0) { + dev_err(&dev->dev, "error while saving TPM state\n"); + return rc; + } + } + return 0; +} + +static int tpm_inf_pnp_resume(struct pnp_dev *dev) +{ + /* Re-configure TPM after suspending */ + tpm_config_out(ENABLE_REGISTER_PAIR, TPM_INF_ADDR); + tpm_config_out(IOLIMH, TPM_INF_ADDR); + tpm_config_out((tpm_dev.data_regs >> 8) & 0xff, TPM_INF_DATA); + tpm_config_out(IOLIML, TPM_INF_ADDR); + tpm_config_out((tpm_dev.data_regs & 0xff), TPM_INF_DATA); + /* activate register */ + tpm_config_out(TPM_DAR, TPM_INF_ADDR); + tpm_config_out(0x01, TPM_INF_DATA); + tpm_config_out(DISABLE_REGISTER_PAIR, TPM_INF_ADDR); + /* disable RESET, LP and IRQC */ + tpm_data_out(RESET_LP_IRQC_DISABLE, CMD); + return tpm_pm_resume(&dev->dev); +} + static struct pnp_driver tpm_inf_pnp_driver = { .name = "tpm_inf_pnp", - .driver = { - .owner = THIS_MODULE, - .suspend = tpm_pm_suspend, - .resume = tpm_pm_resume, - }, - .id_table = tpm_pnp_tbl, + .id_table = tpm_inf_pnp_tbl, .probe = tpm_inf_pnp_probe, - .remove = __devexit_p(tpm_inf_pnp_remove), + .suspend = tpm_inf_pnp_suspend, + .resume = tpm_inf_pnp_resume, + .remove = __devexit_p(tpm_inf_pnp_remove) }; static int __init init_inf(void) @@ -638,5 +673,5 @@ MODULE_AUTHOR("Marcel Selhorst "); MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); -MODULE_VERSION("1.9"); +MODULE_VERSION("1.9.2"); MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/drivers/char/tpm/tpm_tis.c +++ linux-2.6.32/drivers/char/tpm/tpm_tis.c @@ -257,6 +257,10 @@ return size; } +static int itpm; +module_param(itpm, bool, 0444); +MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)"); + /* * If interrupts are used (signaled by an irq set in the vendor structure) * tpm.c can skip polling for the data to be available as the interrupt is @@ -293,7 +297,7 @@ wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &chip->vendor.int_queue); status = tpm_tis_status(chip); - if ((status & TPM_STS_DATA_EXPECT) == 0) { + if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) { rc = -EIO; goto out_err; } @@ -467,6 +471,10 @@ "1.2 TPM (device-id 0x%X, rev-id %d)\n", vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0))); + if (itpm) + dev_info(dev, "Intel iTPM workaround enabled\n"); + + /* Figure out the capabilities */ intfcaps = ioread32(chip->vendor.iobase + @@ -629,6 +637,7 @@ {"", 0}, /* User Specified */ {"", 0} /* Terminator */ }; +MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl); static __devexit void tpm_tis_pnp_remove(struct pnp_dev *dev) { --- linux-2.6.32.orig/drivers/char/agp/intel-agp.c +++ linux-2.6.32/drivers/char/agp/intel-agp.c @@ -8,8 +8,12 @@ #include #include #include +#include #include "agp.h" +int intel_agp_enabled; +EXPORT_SYMBOL(intel_agp_enabled); + /* * If we have Intel graphics, we're not going to have anything other than * an Intel IOMMU. So make the correct use of the PCI DMA API contingent @@ -178,6 +182,7 @@ * popup and for the GTT. */ int gtt_entries; /* i830+ */ + int gtt_total_size; union { void __iomem *i9xx_flush_page; void *i8xx_flush_page; @@ -814,12 +819,6 @@ intel_i830_fini_flush(); } -static void -do_wbinvd(void *null) -{ - wbinvd(); -} - /* The chipset_flush interface needs to get data that has already been * flushed out of the CPU all the way out to main memory, because the GPU * doesn't snoop those buffers. @@ -836,12 +835,10 @@ memset(pg, 0, 1024); - if (cpu_has_clflush) { + if (cpu_has_clflush) clflush_cache_range(pg, 1024); - } else { - if (on_each_cpu(do_wbinvd, NULL, 1) != 0) - printk(KERN_ERR "Timed out waiting for cache flush.\n"); - } + else if (wbinvd_on_all_cpus() != 0) + printk(KERN_ERR "Timed out waiting for cache flush.\n"); } /* The intel i830 automatically initializes the agp aperture during POST. @@ -1153,7 +1150,7 @@ readl(intel_private.registers+I810_PGETBL_CTL); /* PCI Posting. */ if (agp_bridge->driver->needs_scratch_page) { - for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) { + for (i = intel_private.gtt_entries; i < intel_private.gtt_total_size; i++) { writel(agp_bridge->scratch_page, intel_private.gtt+i); } readl(intel_private.gtt+i-1); /* PCI Posting. */ @@ -1308,6 +1305,8 @@ if (!intel_private.gtt) return -ENOMEM; + intel_private.gtt_total_size = gtt_map_size / 4; + temp &= 0xfff80000; intel_private.registers = ioremap(temp, 128 * 4096); @@ -1395,6 +1394,8 @@ if (!intel_private.gtt) return -ENOMEM; + intel_private.gtt_total_size = gtt_size / 4; + intel_private.registers = ioremap(temp, 128 * 4096); if (!intel_private.registers) { iounmap(intel_private.gtt); @@ -2373,7 +2374,7 @@ struct agp_bridge_data *bridge; u8 cap_ptr = 0; struct resource *r; - int i; + int i, err; cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); @@ -2461,7 +2462,10 @@ "set gfx device dma mask 36bit failed!\n"); pci_set_drvdata(pdev, bridge); - return agp_add_bridge(bridge); + err = agp_add_bridge(bridge); + if (!err) + intel_agp_enabled = 1; + return err; } static void __devexit agp_intel_remove(struct pci_dev *pdev) --- linux-2.6.32.orig/drivers/char/agp/Kconfig +++ linux-2.6.32/drivers/char/agp/Kconfig @@ -57,7 +57,7 @@ config AGP_AMD64 tristate "AMD Opteron/Athlon64 on-CPU GART support" if !GART_IOMMU - depends on AGP && X86 + depends on AGP && X86 && K8_NB default y if GART_IOMMU help This option gives you AGP support for the GLX component of --- linux-2.6.32.orig/drivers/char/agp/hp-agp.c +++ linux-2.6.32/drivers/char/agp/hp-agp.c @@ -488,9 +488,8 @@ handle = obj; do { status = acpi_get_object_info(handle, &info); - if (ACPI_SUCCESS(status)) { + if (ACPI_SUCCESS(status) && (info->valid & ACPI_VALID_HID)) { /* TBD check _CID also */ - info->hardware_id.string[sizeof(info->hardware_id.length)-1] = '\0'; match = (strcmp(info->hardware_id.string, "HWP0001") == 0); kfree(info); if (match) { --- linux-2.6.32.orig/drivers/bluetooth/btusb.c +++ linux-2.6.32/drivers/bluetooth/btusb.c @@ -307,6 +307,7 @@ return; usb_anchor_urb(urb, &data->bulk_anchor); + usb_mark_last_busy(data->udev); err = usb_submit_urb(urb, GFP_ATOMIC); if (err < 0) { --- linux-2.6.32.orig/drivers/dma/at_hdmac.c +++ linux-2.6.32/drivers/dma/at_hdmac.c @@ -815,7 +815,7 @@ dev_vdbg(chan2dev(chan), "is_tx_complete: %d (d%d, u%d)\n", cookie, done ? *done : 0, used ? *used : 0); - spin_lock_bh(atchan->lock); + spin_lock_bh(&atchan->lock); last_complete = atchan->completed_cookie; last_used = chan->cookie; @@ -830,7 +830,7 @@ ret = dma_async_is_complete(cookie, last_complete, last_used); } - spin_unlock_bh(atchan->lock); + spin_unlock_bh(&atchan->lock); if (done) *done = last_complete; --- linux-2.6.32.orig/drivers/dma/ioat/dma.c +++ linux-2.6.32/drivers/dma/ioat/dma.c @@ -1032,7 +1032,7 @@ dma->dev = &pdev->dev; if (!dma->chancnt) { - dev_err(dev, "zero channels detected\n"); + dev_err(dev, "channel enumeration error\n"); goto err_setup_interrupts; } --- linux-2.6.32.orig/drivers/dma/ioat/dma_v3.c +++ linux-2.6.32/drivers/dma/ioat/dma_v3.c @@ -650,9 +650,11 @@ num_descs = ioat2_xferlen_to_descs(ioat, len); /* we need 2x the number of descriptors to cover greater than 3 - * sources + * sources (we need 1 extra source in the q-only continuation + * case and 3 extra sources in the p+q continuation case. */ - if (src_cnt > 3 || flags & DMA_PREP_CONTINUE) { + if (src_cnt + dmaf_p_disabled_continue(flags) > 3 || + (dmaf_continue(flags) && !dmaf_p_disabled_continue(flags))) { with_ext = 1; num_descs *= 2; } else @@ -1128,6 +1130,45 @@ return 0; } +static int ioat3_reset_hw(struct ioat_chan_common *chan) +{ + /* throw away whatever the channel was doing and get it + * initialized, with ioat3 specific workarounds + */ + struct ioatdma_device *device = chan->device; + struct pci_dev *pdev = device->pdev; + u32 chanerr; + u16 dev_id; + int err; + + ioat2_quiesce(chan, msecs_to_jiffies(100)); + + chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET); + writel(chanerr, chan->reg_base + IOAT_CHANERR_OFFSET); + + /* -= IOAT ver.3 workarounds =- */ + /* Write CHANERRMSK_INT with 3E07h to mask out the errors + * that can cause stability issues for IOAT ver.3, and clear any + * pending errors + */ + pci_write_config_dword(pdev, IOAT_PCI_CHANERRMASK_INT_OFFSET, 0x3e07); + err = pci_read_config_dword(pdev, IOAT_PCI_CHANERR_INT_OFFSET, &chanerr); + if (err) { + dev_err(&pdev->dev, "channel error register unreachable\n"); + return err; + } + pci_write_config_dword(pdev, IOAT_PCI_CHANERR_INT_OFFSET, chanerr); + + /* Clear DMAUNCERRSTS Cfg-Reg Parity Error status bit + * (workaround for spurious config parity error after restart) + */ + pci_read_config_word(pdev, IOAT_PCI_DEVICE_ID_OFFSET, &dev_id); + if (dev_id == PCI_DEVICE_ID_INTEL_IOAT_TBG0) + pci_write_config_dword(pdev, IOAT_PCI_DMAUNCERRSTS_OFFSET, 0x10); + + return ioat2_reset_sync(chan, msecs_to_jiffies(200)); +} + int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca) { struct pci_dev *pdev = device->pdev; @@ -1137,10 +1178,10 @@ struct ioat_chan_common *chan; bool is_raid_device = false; int err; - u16 dev_id; u32 cap; device->enumerate_channels = ioat2_enumerate_channels; + device->reset_hw = ioat3_reset_hw; device->self_test = ioat3_dma_self_test; dma = &device->common; dma->device_prep_dma_memcpy = ioat2_dma_prep_memcpy_lock; @@ -1216,19 +1257,6 @@ dma->device_prep_dma_xor_val = NULL; #endif - /* -= IOAT ver.3 workarounds =- */ - /* Write CHANERRMSK_INT with 3E07h to mask out the errors - * that can cause stability issues for IOAT ver.3 - */ - pci_write_config_dword(pdev, IOAT_PCI_CHANERRMASK_INT_OFFSET, 0x3e07); - - /* Clear DMAUNCERRSTS Cfg-Reg Parity Error status bit - * (workaround for spurious config parity error after restart) - */ - pci_read_config_word(pdev, IOAT_PCI_DEVICE_ID_OFFSET, &dev_id); - if (dev_id == PCI_DEVICE_ID_INTEL_IOAT_TBG0) - pci_write_config_dword(pdev, IOAT_PCI_DMAUNCERRSTS_OFFSET, 0x10); - err = ioat_probe(device); if (err) return err; --- linux-2.6.32.orig/drivers/dma/ioat/dma_v2.h +++ linux-2.6.32/drivers/dma/ioat/dma_v2.h @@ -185,6 +185,8 @@ void __ioat2_issue_pending(struct ioat2_dma_chan *ioat); void ioat2_cleanup_tasklet(unsigned long data); void ioat2_timer_event(unsigned long data); +int ioat2_quiesce(struct ioat_chan_common *chan, unsigned long tmo); +int ioat2_reset_sync(struct ioat_chan_common *chan, unsigned long tmo); extern struct kobj_type ioat2_ktype; extern struct kmem_cache *ioat2_cache; #endif /* IOATDMA_V2_H */ --- linux-2.6.32.orig/drivers/dma/ioat/dma_v2.c +++ linux-2.6.32/drivers/dma/ioat/dma_v2.c @@ -239,20 +239,50 @@ __ioat2_start_null_desc(ioat); } -static void ioat2_restart_channel(struct ioat2_dma_chan *ioat) +int ioat2_quiesce(struct ioat_chan_common *chan, unsigned long tmo) { - struct ioat_chan_common *chan = &ioat->base; - unsigned long phys_complete; + unsigned long end = jiffies + tmo; + int err = 0; u32 status; status = ioat_chansts(chan); if (is_ioat_active(status) || is_ioat_idle(status)) ioat_suspend(chan); while (is_ioat_active(status) || is_ioat_idle(status)) { + if (tmo && time_after(jiffies, end)) { + err = -ETIMEDOUT; + break; + } status = ioat_chansts(chan); cpu_relax(); } + return err; +} + +int ioat2_reset_sync(struct ioat_chan_common *chan, unsigned long tmo) +{ + unsigned long end = jiffies + tmo; + int err = 0; + + ioat_reset(chan); + while (ioat_reset_pending(chan)) { + if (end && time_after(jiffies, end)) { + err = -ETIMEDOUT; + break; + } + cpu_relax(); + } + + return err; +} + +static void ioat2_restart_channel(struct ioat2_dma_chan *ioat) +{ + struct ioat_chan_common *chan = &ioat->base; + unsigned long phys_complete; + + ioat2_quiesce(chan, 0); if (ioat_cleanup_preamble(chan, &phys_complete)) __cleanup(ioat, phys_complete); @@ -318,6 +348,19 @@ spin_unlock_bh(&chan->cleanup_lock); } +static int ioat2_reset_hw(struct ioat_chan_common *chan) +{ + /* throw away whatever the channel was doing and get it initialized */ + u32 chanerr; + + ioat2_quiesce(chan, msecs_to_jiffies(100)); + + chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET); + writel(chanerr, chan->reg_base + IOAT_CHANERR_OFFSET); + + return ioat2_reset_sync(chan, msecs_to_jiffies(200)); +} + /** * ioat2_enumerate_channels - find and initialize the device's channels * @device: the device to be enumerated @@ -360,6 +403,10 @@ (unsigned long) ioat); ioat->xfercap_log = xfercap_log; spin_lock_init(&ioat->ring_lock); + if (device->reset_hw(&ioat->base)) { + i = 0; + break; + } } dma->chancnt = i; return i; @@ -467,7 +514,6 @@ struct ioat2_dma_chan *ioat = to_ioat2_chan(c); struct ioat_chan_common *chan = &ioat->base; struct ioat_ring_ent **ring; - u32 chanerr; int order; /* have we already been set up? */ @@ -477,12 +523,6 @@ /* Setup register to interrupt and write completion status on error */ writew(IOAT_CHANCTRL_RUN, chan->reg_base + IOAT_CHANCTRL_OFFSET); - chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET); - if (chanerr) { - dev_err(to_dev(chan), "CHANERR = %x, clearing\n", chanerr); - writel(chanerr, chan->reg_base + IOAT_CHANERR_OFFSET); - } - /* allocate a completion writeback area */ /* doing 2 32bit writes to mmio since 1 64b write doesn't work */ chan->completion = pci_pool_alloc(chan->device->completion_pool, @@ -746,13 +786,7 @@ tasklet_disable(&chan->cleanup_task); del_timer_sync(&chan->timer); device->cleanup_tasklet((unsigned long) ioat); - - /* Delay 100ms after reset to allow internal DMA logic to quiesce - * before removing DMA descriptor resources. - */ - writeb(IOAT_CHANCMD_RESET, - chan->reg_base + IOAT_CHANCMD_OFFSET(chan->device->version)); - mdelay(100); + device->reset_hw(chan); spin_lock_bh(&ioat->ring_lock); descs = ioat2_ring_space(ioat); @@ -839,6 +873,7 @@ int err; device->enumerate_channels = ioat2_enumerate_channels; + device->reset_hw = ioat2_reset_hw; device->cleanup_tasklet = ioat2_cleanup_tasklet; device->timer_fn = ioat2_timer_event; device->self_test = ioat_dma_self_test; --- linux-2.6.32.orig/drivers/dma/ioat/registers.h +++ linux-2.6.32/drivers/dma/ioat/registers.h @@ -27,6 +27,7 @@ #define IOAT_PCI_DEVICE_ID_OFFSET 0x02 #define IOAT_PCI_DMAUNCERRSTS_OFFSET 0x148 +#define IOAT_PCI_CHANERR_INT_OFFSET 0x180 #define IOAT_PCI_CHANERRMASK_INT_OFFSET 0x184 /* MMIO Device Registers */ --- linux-2.6.32.orig/drivers/dma/ioat/dma.h +++ linux-2.6.32/drivers/dma/ioat/dma.h @@ -60,6 +60,7 @@ * @dca: direct cache access context * @intr_quirk: interrupt setup quirk (for ioat_v1 devices) * @enumerate_channels: hw version specific channel enumeration + * @reset_hw: hw version specific channel (re)initialization * @cleanup_tasklet: select between the v2 and v3 cleanup routines * @timer_fn: select between the v2 and v3 timer watchdog routines * @self_test: hardware version specific self test for each supported op type @@ -78,6 +79,7 @@ struct dca_provider *dca; void (*intr_quirk)(struct ioatdma_device *device); int (*enumerate_channels)(struct ioatdma_device *device); + int (*reset_hw)(struct ioat_chan_common *chan); void (*cleanup_tasklet)(unsigned long data); void (*timer_fn)(unsigned long data); int (*self_test)(struct ioatdma_device *device); @@ -264,6 +266,22 @@ writeb(IOAT_CHANCMD_SUSPEND, chan->reg_base + IOAT_CHANCMD_OFFSET(ver)); } +static inline void ioat_reset(struct ioat_chan_common *chan) +{ + u8 ver = chan->device->version; + + writeb(IOAT_CHANCMD_RESET, chan->reg_base + IOAT_CHANCMD_OFFSET(ver)); +} + +static inline bool ioat_reset_pending(struct ioat_chan_common *chan) +{ + u8 ver = chan->device->version; + u8 cmd; + + cmd = readb(chan->reg_base + IOAT_CHANCMD_OFFSET(ver)); + return (cmd & IOAT_CHANCMD_RESET) == IOAT_CHANCMD_RESET; +} + static inline void ioat_set_chainaddr(struct ioat_dma_chan *ioat, u64 addr) { struct ioat_chan_common *chan = &ioat->base; --- linux-2.6.32.orig/drivers/watchdog/iTCO_wdt.c +++ linux-2.6.32/drivers/watchdog/iTCO_wdt.c @@ -1,5 +1,5 @@ /* - * intel TCO Watchdog Driver (Used in i82801 and i63xxESB chipsets) + * intel TCO Watchdog Driver * * (c) Copyright 2006-2009 Wim Van Sebroeck . * @@ -14,47 +14,24 @@ * * The TCO watchdog is implemented in the following I/O controller hubs: * (See the intel documentation on http://developer.intel.com.) - * 82801AA (ICH) : document number 290655-003, 290677-014, - * 82801AB (ICHO) : document number 290655-003, 290677-014, - * 82801BA (ICH2) : document number 290687-002, 298242-027, - * 82801BAM (ICH2-M) : document number 290687-002, 298242-027, - * 82801CA (ICH3-S) : document number 290733-003, 290739-013, - * 82801CAM (ICH3-M) : document number 290716-001, 290718-007, - * 82801DB (ICH4) : document number 290744-001, 290745-025, - * 82801DBM (ICH4-M) : document number 252337-001, 252663-008, - * 82801E (C-ICH) : document number 273599-001, 273645-002, - * 82801EB (ICH5) : document number 252516-001, 252517-028, - * 82801ER (ICH5R) : document number 252516-001, 252517-028, - * 6300ESB (6300ESB) : document number 300641-004, 300884-013, - * 82801FB (ICH6) : document number 301473-002, 301474-026, - * 82801FR (ICH6R) : document number 301473-002, 301474-026, - * 82801FBM (ICH6-M) : document number 301473-002, 301474-026, - * 82801FW (ICH6W) : document number 301473-001, 301474-026, - * 82801FRW (ICH6RW) : document number 301473-001, 301474-026, - * 631xESB (631xESB) : document number 313082-001, 313075-006, - * 632xESB (632xESB) : document number 313082-001, 313075-006, - * 82801GB (ICH7) : document number 307013-003, 307014-024, - * 82801GR (ICH7R) : document number 307013-003, 307014-024, - * 82801GDH (ICH7DH) : document number 307013-003, 307014-024, - * 82801GBM (ICH7-M) : document number 307013-003, 307014-024, - * 82801GHM (ICH7-M DH) : document number 307013-003, 307014-024, - * 82801GU (ICH7-U) : document number 307013-003, 307014-024, - * 82801HB (ICH8) : document number 313056-003, 313057-017, - * 82801HR (ICH8R) : document number 313056-003, 313057-017, - * 82801HBM (ICH8M) : document number 313056-003, 313057-017, - * 82801HH (ICH8DH) : document number 313056-003, 313057-017, - * 82801HO (ICH8DO) : document number 313056-003, 313057-017, - * 82801HEM (ICH8M-E) : document number 313056-003, 313057-017, - * 82801IB (ICH9) : document number 316972-004, 316973-012, - * 82801IR (ICH9R) : document number 316972-004, 316973-012, - * 82801IH (ICH9DH) : document number 316972-004, 316973-012, - * 82801IO (ICH9DO) : document number 316972-004, 316973-012, - * 82801IBM (ICH9M) : document number 316972-004, 316973-012, - * 82801IEM (ICH9M-E) : document number 316972-004, 316973-012, - * 82801JIB (ICH10) : document number 319973-002, 319974-002, - * 82801JIR (ICH10R) : document number 319973-002, 319974-002, - * 82801JD (ICH10D) : document number 319973-002, 319974-002, - * 82801JDO (ICH10DO) : document number 319973-002, 319974-002 + * document number 290655-003, 290677-014: 82801AA (ICH), 82801AB (ICHO) + * document number 290687-002, 298242-027: 82801BA (ICH2) + * document number 290733-003, 290739-013: 82801CA (ICH3-S) + * document number 290716-001, 290718-007: 82801CAM (ICH3-M) + * document number 290744-001, 290745-025: 82801DB (ICH4) + * document number 252337-001, 252663-008: 82801DBM (ICH4-M) + * document number 273599-001, 273645-002: 82801E (C-ICH) + * document number 252516-001, 252517-028: 82801EB (ICH5), 82801ER (ICH5R) + * document number 300641-004, 300884-013: 6300ESB + * document number 301473-002, 301474-026: 82801F (ICH6) + * document number 313082-001, 313075-006: 631xESB, 632xESB + * document number 307013-003, 307014-024: 82801G (ICH7) + * document number 313056-003, 313057-017: 82801H (ICH8) + * document number 316972-004, 316973-012: 82801I (ICH9) + * document number 319973-002, 319974-002: 82801J (ICH10) + * document number 322169-001, 322170-003: 5 Series, 3400 Series (PCH) + * document number 320066-003, 320257-008: EP80597 (IICH) + * document number TBD : Cougar Point (CPT) */ /* @@ -122,6 +99,53 @@ TCO_ICH10R, /* ICH10R */ TCO_ICH10D, /* ICH10D */ TCO_ICH10DO, /* ICH10DO */ + TCO_PCH, /* PCH Desktop Full Featured */ + TCO_PCHM, /* PCH Mobile Full Featured */ + TCO_P55, /* P55 */ + TCO_PM55, /* PM55 */ + TCO_H55, /* H55 */ + TCO_QM57, /* QM57 */ + TCO_H57, /* H57 */ + TCO_HM55, /* HM55 */ + TCO_Q57, /* Q57 */ + TCO_HM57, /* HM57 */ + TCO_PCHMSFF, /* PCH Mobile SFF Full Featured */ + TCO_QS57, /* QS57 */ + TCO_3400, /* 3400 */ + TCO_3420, /* 3420 */ + TCO_3450, /* 3450 */ + TCO_EP80579, /* EP80579 */ + TCO_CPT1, /* Cougar Point */ + TCO_CPT2, /* Cougar Point Desktop */ + TCO_CPT3, /* Cougar Point Mobile */ + TCO_CPT4, /* Cougar Point */ + TCO_CPT5, /* Cougar Point */ + TCO_CPT6, /* Cougar Point */ + TCO_CPT7, /* Cougar Point */ + TCO_CPT8, /* Cougar Point */ + TCO_CPT9, /* Cougar Point */ + TCO_CPT10, /* Cougar Point */ + TCO_CPT11, /* Cougar Point */ + TCO_CPT12, /* Cougar Point */ + TCO_CPT13, /* Cougar Point */ + TCO_CPT14, /* Cougar Point */ + TCO_CPT15, /* Cougar Point */ + TCO_CPT16, /* Cougar Point */ + TCO_CPT17, /* Cougar Point */ + TCO_CPT18, /* Cougar Point */ + TCO_CPT19, /* Cougar Point */ + TCO_CPT20, /* Cougar Point */ + TCO_CPT21, /* Cougar Point */ + TCO_CPT22, /* Cougar Point */ + TCO_CPT23, /* Cougar Point */ + TCO_CPT24, /* Cougar Point */ + TCO_CPT25, /* Cougar Point */ + TCO_CPT26, /* Cougar Point */ + TCO_CPT27, /* Cougar Point */ + TCO_CPT28, /* Cougar Point */ + TCO_CPT29, /* Cougar Point */ + TCO_CPT30, /* Cougar Point */ + TCO_CPT31, /* Cougar Point */ }; static struct { @@ -162,6 +186,53 @@ {"ICH10R", 2}, {"ICH10D", 2}, {"ICH10DO", 2}, + {"PCH Desktop Full Featured", 2}, + {"PCH Mobile Full Featured", 2}, + {"P55", 2}, + {"PM55", 2}, + {"H55", 2}, + {"QM57", 2}, + {"H57", 2}, + {"HM55", 2}, + {"Q57", 2}, + {"HM57", 2}, + {"PCH Mobile SFF Full Featured", 2}, + {"QS57", 2}, + {"3400", 2}, + {"3420", 2}, + {"3450", 2}, + {"EP80579", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, + {"Cougar Point", 2}, {NULL, 0} }; @@ -230,6 +301,53 @@ { ITCO_PCI_DEVICE(0x3a16, TCO_ICH10R)}, { ITCO_PCI_DEVICE(0x3a1a, TCO_ICH10D)}, { ITCO_PCI_DEVICE(0x3a14, TCO_ICH10DO)}, + { ITCO_PCI_DEVICE(0x3b00, TCO_PCH)}, + { ITCO_PCI_DEVICE(0x3b01, TCO_PCHM)}, + { ITCO_PCI_DEVICE(0x3b02, TCO_P55)}, + { ITCO_PCI_DEVICE(0x3b03, TCO_PM55)}, + { ITCO_PCI_DEVICE(0x3b06, TCO_H55)}, + { ITCO_PCI_DEVICE(0x3b07, TCO_QM57)}, + { ITCO_PCI_DEVICE(0x3b08, TCO_H57)}, + { ITCO_PCI_DEVICE(0x3b09, TCO_HM55)}, + { ITCO_PCI_DEVICE(0x3b0a, TCO_Q57)}, + { ITCO_PCI_DEVICE(0x3b0b, TCO_HM57)}, + { ITCO_PCI_DEVICE(0x3b0d, TCO_PCHMSFF)}, + { ITCO_PCI_DEVICE(0x3b0f, TCO_QS57)}, + { ITCO_PCI_DEVICE(0x3b12, TCO_3400)}, + { ITCO_PCI_DEVICE(0x3b14, TCO_3420)}, + { ITCO_PCI_DEVICE(0x3b16, TCO_3450)}, + { ITCO_PCI_DEVICE(0x5031, TCO_EP80579)}, + { ITCO_PCI_DEVICE(0x1c41, TCO_CPT1)}, + { ITCO_PCI_DEVICE(0x1c42, TCO_CPT2)}, + { ITCO_PCI_DEVICE(0x1c43, TCO_CPT3)}, + { ITCO_PCI_DEVICE(0x1c44, TCO_CPT4)}, + { ITCO_PCI_DEVICE(0x1c45, TCO_CPT5)}, + { ITCO_PCI_DEVICE(0x1c46, TCO_CPT6)}, + { ITCO_PCI_DEVICE(0x1c47, TCO_CPT7)}, + { ITCO_PCI_DEVICE(0x1c48, TCO_CPT8)}, + { ITCO_PCI_DEVICE(0x1c49, TCO_CPT9)}, + { ITCO_PCI_DEVICE(0x1c4a, TCO_CPT10)}, + { ITCO_PCI_DEVICE(0x1c4b, TCO_CPT11)}, + { ITCO_PCI_DEVICE(0x1c4c, TCO_CPT12)}, + { ITCO_PCI_DEVICE(0x1c4d, TCO_CPT13)}, + { ITCO_PCI_DEVICE(0x1c4e, TCO_CPT14)}, + { ITCO_PCI_DEVICE(0x1c4f, TCO_CPT15)}, + { ITCO_PCI_DEVICE(0x1c50, TCO_CPT16)}, + { ITCO_PCI_DEVICE(0x1c51, TCO_CPT17)}, + { ITCO_PCI_DEVICE(0x1c52, TCO_CPT18)}, + { ITCO_PCI_DEVICE(0x1c53, TCO_CPT19)}, + { ITCO_PCI_DEVICE(0x1c54, TCO_CPT20)}, + { ITCO_PCI_DEVICE(0x1c55, TCO_CPT21)}, + { ITCO_PCI_DEVICE(0x1c56, TCO_CPT22)}, + { ITCO_PCI_DEVICE(0x1c57, TCO_CPT23)}, + { ITCO_PCI_DEVICE(0x1c58, TCO_CPT24)}, + { ITCO_PCI_DEVICE(0x1c59, TCO_CPT25)}, + { ITCO_PCI_DEVICE(0x1c5a, TCO_CPT26)}, + { ITCO_PCI_DEVICE(0x1c5b, TCO_CPT27)}, + { ITCO_PCI_DEVICE(0x1c5c, TCO_CPT28)}, + { ITCO_PCI_DEVICE(0x1c5d, TCO_CPT29)}, + { ITCO_PCI_DEVICE(0x1c5e, TCO_CPT30)}, + { ITCO_PCI_DEVICE(0x1c5f, TCO_CPT31)}, { 0, }, /* End of list */ }; MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); --- linux-2.6.32.orig/drivers/watchdog/bfin_wdt.c +++ linux-2.6.32/drivers/watchdog/bfin_wdt.c @@ -1,9 +1,8 @@ /* * Blackfin On-Chip Watchdog Driver - * Supports BF53[123]/BF53[467]/BF54[2489]/BF561 * * Originally based on softdog.c - * Copyright 2006-2007 Analog Devices Inc. + * Copyright 2006-2010 Analog Devices Inc. * Copyright 2006-2007 Michele d'Amico * Copyright 1996 Alan Cox * @@ -137,13 +136,15 @@ */ static int bfin_wdt_set_timeout(unsigned long t) { - u32 cnt; + u32 cnt, max_t, sclk; unsigned long flags; - stampit(); + sclk = get_sclk(); + max_t = -1 / sclk; + cnt = t * sclk; + stamp("maxtimeout=%us newtimeout=%lus (cnt=%#x)", max_t, t, cnt); - cnt = t * get_sclk(); - if (cnt < get_sclk()) { + if (t > max_t) { printk(KERN_WARNING PFX "timeout value is too large\n"); return -EINVAL; } --- linux-2.6.32.orig/drivers/watchdog/hpwdt.c +++ linux-2.6.32/drivers/watchdog/hpwdt.c @@ -443,7 +443,7 @@ static int hpwdt_change_timer(int new_margin) { /* Arbitrary, can't find the card's limits */ - if (new_margin < 30 || new_margin > 600) { + if (new_margin < 5 || new_margin > 600) { printk(KERN_WARNING "hpwdt: New value passed in is invalid: %d seconds.\n", new_margin); --- linux-2.6.32.orig/drivers/pci/pci.c +++ linux-2.6.32/drivers/pci/pci.c @@ -601,7 +601,7 @@ */ int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state) { - return state > PCI_D0 ? + return state >= PCI_D0 ? pci_platform_power_transition(dev, state) : -EINVAL; } EXPORT_SYMBOL_GPL(__pci_complete_power_transition); @@ -638,10 +638,6 @@ */ return 0; - /* Check if we're already there */ - if (dev->current_state == state) - return 0; - __pci_start_power_transition(dev, state); /* This device is quirked not to be put into D3, so @@ -2350,18 +2346,17 @@ */ int pcix_get_max_mmrbc(struct pci_dev *dev) { - int err, cap; + int cap; u32 stat; cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); if (!cap) return -EINVAL; - err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); - if (err) + if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat)) return -EINVAL; - return (stat & PCI_X_STATUS_MAX_READ) >> 12; + return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21); } EXPORT_SYMBOL(pcix_get_max_mmrbc); @@ -2374,18 +2369,17 @@ */ int pcix_get_mmrbc(struct pci_dev *dev) { - int ret, cap; - u32 cmd; + int cap; + u16 cmd; cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); if (!cap) return -EINVAL; - ret = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); - if (!ret) - ret = 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2); + if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd)) + return -EINVAL; - return ret; + return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2); } EXPORT_SYMBOL(pcix_get_mmrbc); @@ -2400,28 +2394,27 @@ */ int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc) { - int cap, err = -EINVAL; - u32 stat, cmd, v, o; + int cap; + u32 stat, v, o; + u16 cmd; if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc)) - goto out; + return -EINVAL; v = ffs(mmrbc) - 10; cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); if (!cap) - goto out; + return -EINVAL; - err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); - if (err) - goto out; + if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat)) + return -EINVAL; if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21) return -E2BIG; - err = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); - if (err) - goto out; + if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd)) + return -EINVAL; o = (cmd & PCI_X_CMD_MAX_READ) >> 2; if (o != v) { @@ -2431,10 +2424,10 @@ cmd &= ~PCI_X_CMD_MAX_READ; cmd |= v << 2; - err = pci_write_config_dword(dev, cap + PCI_X_CMD, cmd); + if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd)) + return -EIO; } -out: - return err; + return 0; } EXPORT_SYMBOL(pcix_set_mmrbc); @@ -2544,6 +2537,23 @@ return 0; } +/* Some architectures require additional programming to enable VGA */ +static arch_set_vga_state_t arch_set_vga_state; + +void __init pci_register_set_vga_state(arch_set_vga_state_t func) +{ + arch_set_vga_state = func; /* NULL disables */ +} + +static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode, + unsigned int command_bits, bool change_bridge) +{ + if (arch_set_vga_state) + return arch_set_vga_state(dev, decode, command_bits, + change_bridge); + return 0; +} + /** * pci_set_vga_state - set VGA decode state on device and parents if requested * @dev: the PCI device @@ -2557,9 +2567,15 @@ struct pci_bus *bus; struct pci_dev *bridge; u16 cmd; + int rc; WARN_ON(command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)); + /* ARCH specific VGA enables */ + rc = pci_set_vga_state_arch(dev, decode, command_bits, change_bridge); + if (rc) + return rc; + pci_read_config_word(dev, PCI_COMMAND, &cmd); if (decode == true) cmd |= command_bits; @@ -2723,6 +2739,11 @@ return 1; } +void __weak pci_fixup_cardbus(struct pci_bus *bus) +{ +} +EXPORT_SYMBOL(pci_fixup_cardbus); + static int __init pci_setup(char *str) { while (str) { @@ -2801,4 +2822,3 @@ EXPORT_SYMBOL(pci_prepare_to_sleep); EXPORT_SYMBOL(pci_back_from_sleep); EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state); - --- linux-2.6.32.orig/drivers/pci/quirks.c +++ linux-2.6.32/drivers/pci/quirks.c @@ -2092,6 +2092,8 @@ } } DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_disable_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x5a3f, quirk_disable_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi); /* Go through the list of Hypertransport capabilities and * return 1 if a HT MSI capability is found and enabled */ @@ -2513,6 +2515,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x10e8, quirk_i82576_sriov); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150a, quirk_i82576_sriov); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150d, quirk_i82576_sriov); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1518, quirk_i82576_sriov); #endif /* CONFIG_PCI_IOV */ --- linux-2.6.32.orig/drivers/pci/intel-iommu.c +++ linux-2.6.32/drivers/pci/intel-iommu.c @@ -1523,12 +1523,15 @@ /* Skip top levels of page tables for * iommu which has less agaw than default. + * Unnecessary for PT mode. */ - for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) { - pgd = phys_to_virt(dma_pte_addr(pgd)); - if (!dma_pte_present(pgd)) { - spin_unlock_irqrestore(&iommu->lock, flags); - return -ENOMEM; + if (translation != CONTEXT_TT_PASS_THROUGH) { + for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) { + pgd = phys_to_virt(dma_pte_addr(pgd)); + if (!dma_pte_present(pgd)) { + spin_unlock_irqrestore(&iommu->lock, flags); + return -ENOMEM; + } } } } @@ -1991,6 +1994,16 @@ "IOMMU: Setting identity map for device %s [0x%Lx - 0x%Lx]\n", pci_name(pdev), start, end); + if (end < start) { + WARN(1, "Your BIOS is broken; RMRR ends before it starts!\n" + "BIOS vendor: %s; Ver: %s; Product Version: %s\n", + dmi_get_system_info(DMI_BIOS_VENDOR), + dmi_get_system_info(DMI_BIOS_VERSION), + dmi_get_system_info(DMI_PRODUCT_VERSION)); + ret = -EIO; + goto error; + } + if (end >> agaw_to_width(domain->agaw)) { WARN(1, "Your BIOS is broken; RMRR exceeds permitted address width (%d bits)\n" "BIOS vendor: %s; Ver: %s; Product Version: %s\n", @@ -3228,6 +3241,9 @@ struct pci_dev *pdev = to_pci_dev(dev); struct dmar_domain *domain; + if (iommu_no_mapping(dev)) + return 0; + domain = find_domain(pdev); if (!domain) return 0; --- linux-2.6.32.orig/drivers/pci/setup-bus.c +++ linux-2.6.32/drivers/pci/setup-bus.c @@ -142,7 +142,6 @@ struct pci_dev *bridge = bus->self; struct pci_bus_region region; u32 l, bu, lu, io_upper16; - int pref_mem64; if (pci_is_enabled(bridge)) return; @@ -198,7 +197,6 @@ pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0); /* Set up PREF base/limit. */ - pref_mem64 = 0; bu = lu = 0; pcibios_resource_to_bus(bridge, ®ion, bus->resource[2]); if (bus->resource[2]->flags & IORESOURCE_PREFETCH) { @@ -206,7 +204,6 @@ l = (region.start >> 16) & 0xfff0; l |= region.end & 0xfff00000; if (bus->resource[2]->flags & IORESOURCE_MEM_64) { - pref_mem64 = 1; bu = upper_32_bits(region.start); lu = upper_32_bits(region.end); width = 16; @@ -221,11 +218,9 @@ } pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l); - if (pref_mem64) { - /* Set the upper 32 bits of PREF base & limit. */ - pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, bu); - pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, lu); - } + /* Set the upper 32 bits of PREF base & limit. */ + pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, bu); + pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, lu); pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl); } --- linux-2.6.32.orig/drivers/pci/dmar.c +++ linux-2.6.32/drivers/pci/dmar.c @@ -582,6 +582,8 @@ return 0; } +static int bios_warned; + int __init check_zero_address(void) { struct acpi_table_dmar *dmar; @@ -601,6 +603,9 @@ } if (entry_header->type == ACPI_DMAR_TYPE_HARDWARE_UNIT) { + void __iomem *addr; + u64 cap, ecap; + drhd = (void *)entry_header; if (!drhd->address) { /* Promote an attitude of violence to a BIOS engineer today */ @@ -609,17 +614,40 @@ dmi_get_system_info(DMI_BIOS_VENDOR), dmi_get_system_info(DMI_BIOS_VERSION), dmi_get_system_info(DMI_PRODUCT_VERSION)); -#ifdef CONFIG_DMAR - dmar_disabled = 1; -#endif - return 0; + bios_warned = 1; + goto failed; + } + + addr = early_ioremap(drhd->address, VTD_PAGE_SIZE); + if (!addr ) { + printk("IOMMU: can't validate: %llx\n", drhd->address); + goto failed; + } + cap = dmar_readq(addr + DMAR_CAP_REG); + ecap = dmar_readq(addr + DMAR_ECAP_REG); + early_iounmap(addr, VTD_PAGE_SIZE); + if (cap == (uint64_t)-1 && ecap == (uint64_t)-1) { + /* Promote an attitude of violence to a BIOS engineer today */ + WARN(1, "Your BIOS is broken; DMAR reported at address %llx returns all ones!\n" + "BIOS vendor: %s; Ver: %s; Product Version: %s\n", + drhd->address, + dmi_get_system_info(DMI_BIOS_VENDOR), + dmi_get_system_info(DMI_BIOS_VERSION), + dmi_get_system_info(DMI_PRODUCT_VERSION)); + bios_warned = 1; + goto failed; } - break; } entry_header = ((void *)entry_header + entry_header->length); } return 1; + +failed: +#ifdef CONFIG_DMAR + dmar_disabled = 1; +#endif + return 0; } void __init detect_intel_iommu(void) @@ -664,6 +692,18 @@ int agaw = 0; int msagaw = 0; + if (!drhd->reg_base_addr) { + if (!bios_warned) { + WARN(1, "Your BIOS is broken; DMAR reported at address zero!\n" + "BIOS vendor: %s; Ver: %s; Product Version: %s\n", + dmi_get_system_info(DMI_BIOS_VENDOR), + dmi_get_system_info(DMI_BIOS_VERSION), + dmi_get_system_info(DMI_PRODUCT_VERSION)); + bios_warned = 1; + } + return -EINVAL; + } + iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); if (!iommu) return -ENOMEM; @@ -680,13 +720,16 @@ iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG); if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) { - /* Promote an attitude of violence to a BIOS engineer today */ - WARN(1, "Your BIOS is broken; DMAR reported at address %llx returns all ones!\n" - "BIOS vendor: %s; Ver: %s; Product Version: %s\n", - drhd->reg_base_addr, - dmi_get_system_info(DMI_BIOS_VENDOR), - dmi_get_system_info(DMI_BIOS_VERSION), - dmi_get_system_info(DMI_PRODUCT_VERSION)); + if (!bios_warned) { + /* Promote an attitude of violence to a BIOS engineer today */ + WARN(1, "Your BIOS is broken; DMAR reported at address %llx returns all ones!\n" + "BIOS vendor: %s; Ver: %s; Product Version: %s\n", + drhd->reg_base_addr, + dmi_get_system_info(DMI_BIOS_VENDOR), + dmi_get_system_info(DMI_BIOS_VERSION), + dmi_get_system_info(DMI_PRODUCT_VERSION)); + bios_warned = 1; + } goto err_unmap; } --- linux-2.6.32.orig/drivers/pci/hotplug/ibmphp_ebda.c +++ linux-2.6.32/drivers/pci/hotplug/ibmphp_ebda.c @@ -245,7 +245,7 @@ int __init ibmphp_access_ebda (void) { - u8 format, num_ctlrs, rio_complete, hs_complete; + u8 format, num_ctlrs, rio_complete, hs_complete, ebda_sz; u16 ebda_seg, num_entries, next_offset, offset, blk_id, sub_addr, re, rc_id, re_id, base; int rc = 0; @@ -260,7 +260,16 @@ iounmap (io_mem); debug ("returned ebda segment: %x\n", ebda_seg); - io_mem = ioremap(ebda_seg<<4, 1024); + io_mem = ioremap(ebda_seg<<4, 1); + if (!io_mem) + return -ENOMEM; + ebda_sz = readb(io_mem); + iounmap(io_mem); + debug("ebda size: %d(KiB)\n", ebda_sz); + if (ebda_sz == 0) + return -ENOMEM; + + io_mem = ioremap(ebda_seg<<4, (ebda_sz * 1024)); if (!io_mem ) return -ENOMEM; next_offset = 0x180; --- linux-2.6.32.orig/drivers/pci/pcie/aer/aer_inject.c +++ linux-2.6.32/drivers/pci/pcie/aer/aer_inject.c @@ -302,7 +302,7 @@ unsigned long flags; unsigned int devfn = PCI_DEVFN(einj->dev, einj->fn); int pos_cap_err, rp_pos_cap_err; - u32 sever; + u32 sever, cor_mask, uncor_mask; int ret = 0; dev = pci_get_bus_and_slot(einj->bus, devfn); @@ -320,6 +320,9 @@ goto out_put; } pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_SEVER, &sever); + pci_read_config_dword(dev, pos_cap_err + PCI_ERR_COR_MASK, &cor_mask); + pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_MASK, + &uncor_mask); rp_pos_cap_err = pci_find_ext_capability(rpdev, PCI_EXT_CAP_ID_ERR); if (!rp_pos_cap_err) { @@ -354,6 +357,21 @@ err->header_log2 = einj->header_log2; err->header_log3 = einj->header_log3; + if (einj->cor_status && !(einj->cor_status & ~cor_mask)) { + ret = -EINVAL; + printk(KERN_WARNING "The correctable error(s) is masked " + "by device\n"); + spin_unlock_irqrestore(&inject_lock, flags); + goto out_put; + } + if (einj->uncor_status && !(einj->uncor_status & ~uncor_mask)) { + ret = -EINVAL; + printk(KERN_WARNING "The uncorrectable error(s) is masked " + "by device\n"); + spin_unlock_irqrestore(&inject_lock, flags); + goto out_put; + } + rperr = __find_aer_error_by_dev(rpdev); if (!rperr) { rperr = rperr_alloc; @@ -392,8 +410,14 @@ if (ret) goto out_put; - if (find_aer_device(rpdev, &edev)) + if (find_aer_device(rpdev, &edev)) { + if (!get_service_data(edev)) { + printk(KERN_WARNING "AER service is not initialized\n"); + ret = -EINVAL; + goto out_put; + } aer_irq(-1, edev); + } else ret = -EINVAL; out_put: --- linux-2.6.32.orig/drivers/pci/pcie/aer/aerdrv_core.c +++ linux-2.6.32/drivers/pci/pcie/aer/aerdrv_core.c @@ -78,19 +78,15 @@ int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev) { int pos; - u32 status, mask; + u32 status; pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR); if (!pos) return -EIO; pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, &status); - pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, &mask); - if (dev->error_state == pci_channel_io_normal) - status &= ~mask; /* Clear corresponding nonfatal bits */ - else - status &= mask; /* Clear corresponding fatal bits */ - pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, status); + if (status) + pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, status); return 0; } --- linux-2.6.32.orig/drivers/leds/Kconfig +++ linux-2.6.32/drivers/leds/Kconfig @@ -236,6 +236,13 @@ This option enables support for BD2802GU RGB LED driver chips accessed via the I2C bus. +config LEDS_DELL_NETBOOKS + tristate "External LED on Dell Business Netbooks" + depends on LEDS_CLASS && X86 && ACPI_WMI + help + This adds support for the Latitude 2100 and similar + notebooks that have an external LED. + comment "LED Triggers" config LEDS_TRIGGERS --- linux-2.6.32.orig/drivers/leds/leds-gpio.c +++ linux-2.6.32/drivers/leds/leds-gpio.c @@ -211,7 +211,6 @@ const struct of_device_id *match) { struct device_node *np = ofdev->node, *child; - struct gpio_led led; struct gpio_led_of_platform_data *pdata; int count = 0, ret; @@ -226,8 +225,8 @@ if (!pdata) return -ENOMEM; - memset(&led, 0, sizeof(led)); for_each_child_of_node(np, child) { + struct gpio_led led = {}; enum of_gpio_flags flags; const char *state; --- linux-2.6.32.orig/drivers/leds/dell-led.c +++ linux-2.6.32/drivers/leds/dell-led.c @@ -0,0 +1,200 @@ +/* + * dell_led.c - Dell LED Driver + * + * Copyright (C) 2010 Dell Inc. + * Louis Davis + * Jim Dailey + * + * 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. + * + */ + +#include +#include + +MODULE_AUTHOR("Louis Davis/Jim Dailey"); +MODULE_DESCRIPTION("Dell LED Control Driver"); +MODULE_LICENSE("GPL"); + +#define DELL_LED_BIOS_GUID "F6E4FE6E-909D-47cb-8BAB-C9F6F2F8D396" +MODULE_ALIAS("wmi:" DELL_LED_BIOS_GUID); + +/* Error Result Codes: */ +#define INVALID_DEVICE_ID 250 +#define INVALID_PARAMETER 251 +#define INVALID_BUFFER 252 +#define INTERFACE_ERROR 253 +#define UNSUPPORTED_COMMAND 254 +#define UNSPECIFIED_ERROR 255 + +/* Device ID */ +#define DEVICE_ID_PANEL_BACK 1 + +/* LED Commands */ +#define CMD_LED_ON 16 +#define CMD_LED_OFF 17 +#define CMD_LED_BLINK 18 + +struct bios_args { + unsigned char length; + unsigned char result_code; + unsigned char device_id; + unsigned char command; + unsigned char on_time; + unsigned char off_time; +}; + +static int dell_led_perform_fn(u8 length, + u8 result_code, + u8 device_id, + u8 command, + u8 on_time, + u8 off_time) +{ + struct bios_args *bios_return; + u8 return_code; + union acpi_object *obj; + struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; + struct acpi_buffer input; + acpi_status status; + + struct bios_args args; + args.length = length; + args.result_code = result_code; + args.device_id = device_id; + args.command = command; + args.on_time = on_time; + args.off_time = off_time; + + input.length = sizeof(struct bios_args); + input.pointer = &args; + + status = wmi_evaluate_method(DELL_LED_BIOS_GUID, + 1, + 1, + &input, + &output); + + if (ACPI_FAILURE(status)) + return status; + + obj = output.pointer; + + if (!obj) + return -EINVAL; + else if (obj->type != ACPI_TYPE_BUFFER) { + kfree(obj); + return -EINVAL; + } + + bios_return = ((struct bios_args *)obj->buffer.pointer); + return_code = bios_return->result_code; + + kfree(obj); + + return return_code; +} + +static int led_on(void) +{ + return dell_led_perform_fn(3, /* Length of command */ + INTERFACE_ERROR, /* Init to INTERFACE_ERROR */ + DEVICE_ID_PANEL_BACK, /* Device ID */ + CMD_LED_ON, /* Command */ + 0, /* not used */ + 0); /* not used */ +} + +static int led_off(void) +{ + return dell_led_perform_fn(3, /* Length of command */ + INTERFACE_ERROR, /* Init to INTERFACE_ERROR */ + DEVICE_ID_PANEL_BACK, /* Device ID */ + CMD_LED_OFF, /* Command */ + 0, /* not used */ + 0); /* not used */ +} + +static int led_blink(unsigned char on_eighths, + unsigned char off_eighths) +{ + return dell_led_perform_fn(5, /* Length of command */ + INTERFACE_ERROR, /* Init to INTERFACE_ERROR */ + DEVICE_ID_PANEL_BACK, /* Device ID */ + CMD_LED_BLINK, /* Command */ + on_eighths, /* blink on in eigths of a second */ + off_eighths); /* blink off in eights of a second */ +} + +static void dell_led_set(struct led_classdev *led_cdev, + enum led_brightness value) +{ + if (value == LED_OFF) + led_off(); + else + led_on(); +} + +static int dell_led_blink(struct led_classdev *led_cdev, + unsigned long *delay_on, + unsigned long *delay_off) +{ + unsigned long on_eighths; + unsigned long off_eighths; + + /* The Dell LED delay is based on 125ms intervals. + Need to round up to next interval. */ + + on_eighths = (*delay_on + 124) / 125; + if (0 == on_eighths) + on_eighths = 1; + if (on_eighths > 255) + on_eighths = 255; + *delay_on = on_eighths * 125; + + off_eighths = (*delay_off + 124) / 125; + if (0 == off_eighths) + off_eighths = 1; + if (off_eighths > 255) + off_eighths = 255; + *delay_off = off_eighths * 125; + + led_blink(on_eighths, off_eighths); + + return 0; +} + +static struct led_classdev dell_led = { + .name = "dell::lid", + .brightness = LED_OFF, + .max_brightness = 1, + .brightness_set = dell_led_set, + .blink_set = dell_led_blink, + .flags = LED_CORE_SUSPENDRESUME, +}; + +static int __init dell_led_init(void) +{ + int error = 0; + + if (!wmi_has_guid(DELL_LED_BIOS_GUID)) + return -ENODEV; + + error = led_off(); + if (error != 0) + return -ENODEV; + + return led_classdev_register(NULL, &dell_led); +} + +static void __exit dell_led_exit(void) +{ + led_classdev_unregister(&dell_led); + + led_off(); +} + +module_init(dell_led_init); +module_exit(dell_led_exit); --- linux-2.6.32.orig/drivers/leds/Makefile +++ linux-2.6.32/drivers/leds/Makefile @@ -29,6 +29,7 @@ obj-$(CONFIG_LEDS_WM831X_STATUS) += leds-wm831x-status.o obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o obj-$(CONFIG_LEDS_PWM) += leds-pwm.o +obj-$(CONFIG_LEDS_DELL_NETBOOKS) += dell-led.o # LED SPI Drivers obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o --- linux-2.6.32.orig/drivers/base/devtmpfs.c +++ linux-2.6.32/drivers/base/devtmpfs.c @@ -295,6 +295,19 @@ if (dentry->d_inode) { err = vfs_getattr(nd.path.mnt, dentry, &stat); if (!err && dev_mynode(dev, dentry->d_inode, &stat)) { + struct iattr newattrs; + /* + * before unlinking this node, reset permissions + * of possible references like hardlinks + */ + newattrs.ia_uid = 0; + newattrs.ia_gid = 0; + newattrs.ia_mode = stat.mode & ~0777; + newattrs.ia_valid = + ATTR_UID|ATTR_GID|ATTR_MODE; + mutex_lock(&dentry->d_inode->i_mutex); + notify_change(dentry, &newattrs); + mutex_unlock(&dentry->d_inode->i_mutex); err = vfs_unlink(nd.path.dentry->d_inode, dentry); if (!err || err == -ENOENT) @@ -353,6 +366,7 @@ { int err; struct vfsmount *mnt; + char options[] = "mode=0755"; err = register_filesystem(&dev_fs_type); if (err) { @@ -361,7 +375,7 @@ return err; } - mnt = kern_mount(&dev_fs_type); + mnt = kern_mount_data(&dev_fs_type, options); if (IS_ERR(mnt)) { err = PTR_ERR(mnt); printk(KERN_ERR "devtmpfs: unable to create devtmpfs %i\n", err); --- linux-2.6.32.orig/drivers/base/Kconfig +++ linux-2.6.32/drivers/base/Kconfig @@ -151,4 +151,12 @@ bool default n +config SR_REPORT_TIME_LIMIT + int "Default low threshold" + depends on PM + default 100 + help + Print suspend/resume information for driver/device for time greater + then default msec, ie 100 msec. + endmenu --- linux-2.6.32.orig/drivers/base/core.c +++ linux-2.6.32/drivers/base/core.c @@ -56,7 +56,14 @@ */ const char *dev_driver_string(const struct device *dev) { - return dev->driver ? dev->driver->name : + struct device_driver *drv; + + /* dev->driver can change to NULL underneath us because of unbinding, + * so be careful about accessing it. dev->bus and dev->class should + * never change once they are set, so they don't need special care. + */ + drv = ACCESS_ONCE(dev->driver); + return drv ? drv->name : (dev->bus ? dev->bus->name : (dev->class ? dev->class->name : "")); } @@ -596,6 +603,7 @@ int retval; if (dev->class) { + static DEFINE_MUTEX(gdp_mutex); struct kobject *kobj = NULL; struct kobject *parent_kobj; struct kobject *k; @@ -612,6 +620,8 @@ else parent_kobj = &parent->kobj; + mutex_lock(&gdp_mutex); + /* find our class-directory at the parent and reference it */ spin_lock(&dev->class->p->class_dirs.list_lock); list_for_each_entry(k, &dev->class->p->class_dirs.list, entry) @@ -620,20 +630,26 @@ break; } spin_unlock(&dev->class->p->class_dirs.list_lock); - if (kobj) + if (kobj) { + mutex_unlock(&gdp_mutex); return kobj; + } /* or create a new class-directory at the parent device */ k = kobject_create(); - if (!k) + if (!k) { + mutex_unlock(&gdp_mutex); return NULL; + } k->kset = &dev->class->p->class_dirs; retval = kobject_add(k, parent_kobj, "%s", dev->class->name); if (retval < 0) { + mutex_unlock(&gdp_mutex); kobject_put(k); return NULL; } /* do not emit an uevent for this simple "glue" directory */ + mutex_unlock(&gdp_mutex); return k; } --- linux-2.6.32.orig/drivers/base/class.c +++ linux-2.6.32/drivers/base/class.c @@ -59,6 +59,8 @@ else pr_debug("class '%s' does not have a release() function, " "be careful\n", class->name); + + kfree(cp); } static struct sysfs_ops class_sysfs_ops = { --- linux-2.6.32.orig/drivers/base/power/main.c +++ linux-2.6.32/drivers/base/power/main.c @@ -324,6 +324,41 @@ kobject_name(&dev->kobj), pm_verb(state.event), info, error); } +static void device_show_time(struct device *dev, ktime_t starttime, pm_message_t state, char *info) +{ + ktime_t calltime; + s64 usecs64; + int usecs; + + calltime = ktime_get(); + usecs64 = ktime_to_ns(ktime_sub(calltime, starttime)); + do_div(usecs64, NSEC_PER_USEC); + usecs = usecs64; + if (usecs == 0) + usecs = 1; + if ((usecs / USEC_PER_MSEC) > CONFIG_SR_REPORT_TIME_LIMIT) + pr_info("PM: %s%s%s of drv:%s dev:%s complete after %ld.%03ld msecs\n", info ?: "", info ? " " : "", pm_verb(state.event), + dev_driver_string(dev), dev_name(dev), usecs / USEC_PER_MSEC, + usecs % USEC_PER_MSEC); +} + +static void dpm_show_time(ktime_t starttime, pm_message_t state, char *info) +{ + ktime_t calltime; + s64 usecs64; + int usecs; + + calltime = ktime_get(); + usecs64 = ktime_to_ns(ktime_sub(calltime, starttime)); + do_div(usecs64, NSEC_PER_USEC); + usecs = usecs64; + if (usecs == 0) + usecs = 1; + pr_info("PM: %s%s%s of devices complete after %ld.%03ld msecs\n", + info ?: "", info ? " " : "", pm_verb(state.event), + usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC); +} + /*------------------------- Resume routines -------------------------*/ /** @@ -337,6 +372,7 @@ static int device_resume_noirq(struct device *dev, pm_message_t state) { int error = 0; + ktime_t starttime = ktime_get(); TRACE_DEVICE(dev); TRACE_RESUME(0); @@ -347,6 +383,7 @@ if (dev->bus->pm) { pm_dev_dbg(dev, state, "EARLY "); error = pm_noirq_op(dev, dev->bus->pm, state); + device_show_time(dev, starttime, state, "early"); } End: TRACE_RESUME(error); @@ -363,6 +400,7 @@ void dpm_resume_noirq(pm_message_t state) { struct device *dev; + ktime_t starttime = ktime_get(); mutex_lock(&dpm_list_mtx); transition_started = false; @@ -376,6 +414,7 @@ pm_dev_err(dev, state, " early", error); } mutex_unlock(&dpm_list_mtx); + dpm_show_time(starttime, state, "early"); resume_device_irqs(); } EXPORT_SYMBOL_GPL(dpm_resume_noirq); @@ -388,6 +427,7 @@ static int device_resume(struct device *dev, pm_message_t state) { int error = 0; + ktime_t starttime = ktime_get(); TRACE_DEVICE(dev); TRACE_RESUME(0); @@ -424,6 +464,7 @@ error = dev->class->resume(dev); } } + device_show_time(dev, starttime, state, NULL); End: up(&dev->sem); @@ -441,6 +482,7 @@ static void dpm_resume(pm_message_t state) { struct list_head list; + ktime_t starttime = ktime_get(); INIT_LIST_HEAD(&list); mutex_lock(&dpm_list_mtx); @@ -469,6 +511,7 @@ } list_splice(&list, &dpm_list); mutex_unlock(&dpm_list_mtx); + dpm_show_time(starttime, state, NULL); } /** @@ -583,6 +626,7 @@ static int device_suspend_noirq(struct device *dev, pm_message_t state) { int error = 0; + ktime_t starttime = ktime_get(); if (!dev->bus) return 0; @@ -590,6 +634,7 @@ if (dev->bus->pm) { pm_dev_dbg(dev, state, "LATE "); error = pm_noirq_op(dev, dev->bus->pm, state); + device_show_time(dev, starttime, state, "late"); } return error; } @@ -604,6 +649,7 @@ int dpm_suspend_noirq(pm_message_t state) { struct device *dev; + ktime_t starttime = ktime_get(); int error = 0; suspend_device_irqs(); @@ -619,6 +665,8 @@ mutex_unlock(&dpm_list_mtx); if (error) dpm_resume_noirq(resume_event(state)); + else + dpm_show_time(starttime, state, "late"); return error; } EXPORT_SYMBOL_GPL(dpm_suspend_noirq); @@ -631,6 +679,7 @@ static int device_suspend(struct device *dev, pm_message_t state) { int error = 0; + ktime_t starttime = ktime_get(); down(&dev->sem); @@ -666,6 +715,7 @@ suspend_report_result(dev->bus->suspend, error); } } + device_show_time(dev, starttime, state, NULL); End: up(&dev->sem); @@ -679,6 +729,7 @@ static int dpm_suspend(pm_message_t state) { struct list_head list; + ktime_t starttime = ktime_get(); int error = 0; INIT_LIST_HEAD(&list); @@ -704,6 +755,8 @@ } list_splice(&list, dpm_list.prev); mutex_unlock(&dpm_list_mtx); + if (!error) + dpm_show_time(starttime, state, NULL); return error; } --- linux-2.6.32.orig/drivers/base/power/runtime.c +++ linux-2.6.32/drivers/base/power/runtime.c @@ -777,7 +777,7 @@ } if (parent) { - spin_lock(&parent->power.lock); + spin_lock_nested(&parent->power.lock, SINGLE_DEPTH_NESTING); /* * It is invalid to put an active child under a parent that is --- linux-2.6.32.orig/drivers/md/multipath.c +++ linux-2.6.32/drivers/md/multipath.c @@ -301,14 +301,16 @@ rdev->data_offset << 9); /* as we don't honour merge_bvec_fn, we must never risk - * violating it, so limit ->max_sector to one PAGE, as - * a one page request is never in violation. + * violating it, so limit ->max_phys_segments to one, lying + * within a single page. * (Note: it is very unlikely that a device with * merge_bvec_fn will be involved in multipath.) */ - if (q->merge_bvec_fn && - queue_max_sectors(q) > (PAGE_SIZE>>9)) - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); + if (q->merge_bvec_fn) { + blk_queue_max_phys_segments(mddev->queue, 1); + blk_queue_segment_boundary(mddev->queue, + PAGE_CACHE_SIZE - 1); + } conf->working_disks++; mddev->degraded--; @@ -476,9 +478,11 @@ /* as we don't honour merge_bvec_fn, we must never risk * violating it, not that we ever expect a device with * a merge_bvec_fn to be involved in multipath */ - if (rdev->bdev->bd_disk->queue->merge_bvec_fn && - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9)) - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) { + blk_queue_max_phys_segments(mddev->queue, 1); + blk_queue_segment_boundary(mddev->queue, + PAGE_CACHE_SIZE - 1); + } if (!test_bit(Faulty, &rdev->flags)) conf->working_disks++; --- linux-2.6.32.orig/drivers/md/raid5.c +++ linux-2.6.32/drivers/md/raid5.c @@ -1526,7 +1526,7 @@ clear_bit(R5_UPTODATE, &sh->dev[i].flags); atomic_inc(&rdev->read_errors); - if (conf->mddev->degraded) + if (conf->mddev->degraded >= conf->max_degraded) printk_rl(KERN_WARNING "raid5:%s: read error not correctable " "(sector %llu on %s).\n", @@ -1649,8 +1649,8 @@ int previous, int *dd_idx, struct stripe_head *sh) { - long stripe; - unsigned long chunk_number; + sector_t stripe, stripe2; + sector_t chunk_number; unsigned int chunk_offset; int pd_idx, qd_idx; int ddf_layout = 0; @@ -1670,18 +1670,13 @@ */ chunk_offset = sector_div(r_sector, sectors_per_chunk); chunk_number = r_sector; - BUG_ON(r_sector != chunk_number); /* * Compute the stripe number */ - stripe = chunk_number / data_disks; - - /* - * Compute the data disk and parity disk indexes inside the stripe - */ - *dd_idx = chunk_number % data_disks; - + stripe = chunk_number; + *dd_idx = sector_div(stripe, data_disks); + stripe2 = stripe; /* * Select the parity disk based on the user selected algorithm. */ @@ -1693,21 +1688,21 @@ case 5: switch (algorithm) { case ALGORITHM_LEFT_ASYMMETRIC: - pd_idx = data_disks - stripe % raid_disks; + pd_idx = data_disks - sector_div(stripe2, raid_disks); if (*dd_idx >= pd_idx) (*dd_idx)++; break; case ALGORITHM_RIGHT_ASYMMETRIC: - pd_idx = stripe % raid_disks; + pd_idx = sector_div(stripe2, raid_disks); if (*dd_idx >= pd_idx) (*dd_idx)++; break; case ALGORITHM_LEFT_SYMMETRIC: - pd_idx = data_disks - stripe % raid_disks; + pd_idx = data_disks - sector_div(stripe2, raid_disks); *dd_idx = (pd_idx + 1 + *dd_idx) % raid_disks; break; case ALGORITHM_RIGHT_SYMMETRIC: - pd_idx = stripe % raid_disks; + pd_idx = sector_div(stripe2, raid_disks); *dd_idx = (pd_idx + 1 + *dd_idx) % raid_disks; break; case ALGORITHM_PARITY_0: @@ -1727,7 +1722,7 @@ switch (algorithm) { case ALGORITHM_LEFT_ASYMMETRIC: - pd_idx = raid_disks - 1 - (stripe % raid_disks); + pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks); qd_idx = pd_idx + 1; if (pd_idx == raid_disks-1) { (*dd_idx)++; /* Q D D D P */ @@ -1736,7 +1731,7 @@ (*dd_idx) += 2; /* D D P Q D */ break; case ALGORITHM_RIGHT_ASYMMETRIC: - pd_idx = stripe % raid_disks; + pd_idx = sector_div(stripe2, raid_disks); qd_idx = pd_idx + 1; if (pd_idx == raid_disks-1) { (*dd_idx)++; /* Q D D D P */ @@ -1745,12 +1740,12 @@ (*dd_idx) += 2; /* D D P Q D */ break; case ALGORITHM_LEFT_SYMMETRIC: - pd_idx = raid_disks - 1 - (stripe % raid_disks); + pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks); qd_idx = (pd_idx + 1) % raid_disks; *dd_idx = (pd_idx + 2 + *dd_idx) % raid_disks; break; case ALGORITHM_RIGHT_SYMMETRIC: - pd_idx = stripe % raid_disks; + pd_idx = sector_div(stripe2, raid_disks); qd_idx = (pd_idx + 1) % raid_disks; *dd_idx = (pd_idx + 2 + *dd_idx) % raid_disks; break; @@ -1769,7 +1764,7 @@ /* Exactly the same as RIGHT_ASYMMETRIC, but or * of blocks for computing Q is different. */ - pd_idx = stripe % raid_disks; + pd_idx = sector_div(stripe2, raid_disks); qd_idx = pd_idx + 1; if (pd_idx == raid_disks-1) { (*dd_idx)++; /* Q D D D P */ @@ -1784,7 +1779,8 @@ * D D D P Q rather than * Q D D D P */ - pd_idx = raid_disks - 1 - ((stripe + 1) % raid_disks); + stripe2 += 1; + pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks); qd_idx = pd_idx + 1; if (pd_idx == raid_disks-1) { (*dd_idx)++; /* Q D D D P */ @@ -1796,7 +1792,7 @@ case ALGORITHM_ROTATING_N_CONTINUE: /* Same as left_symmetric but Q is before P */ - pd_idx = raid_disks - 1 - (stripe % raid_disks); + pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks); qd_idx = (pd_idx + raid_disks - 1) % raid_disks; *dd_idx = (pd_idx + 1 + *dd_idx) % raid_disks; ddf_layout = 1; @@ -1804,27 +1800,27 @@ case ALGORITHM_LEFT_ASYMMETRIC_6: /* RAID5 left_asymmetric, with Q on last device */ - pd_idx = data_disks - stripe % (raid_disks-1); + pd_idx = data_disks - sector_div(stripe2, raid_disks-1); if (*dd_idx >= pd_idx) (*dd_idx)++; qd_idx = raid_disks - 1; break; case ALGORITHM_RIGHT_ASYMMETRIC_6: - pd_idx = stripe % (raid_disks-1); + pd_idx = sector_div(stripe2, raid_disks-1); if (*dd_idx >= pd_idx) (*dd_idx)++; qd_idx = raid_disks - 1; break; case ALGORITHM_LEFT_SYMMETRIC_6: - pd_idx = data_disks - stripe % (raid_disks-1); + pd_idx = data_disks - sector_div(stripe2, raid_disks-1); *dd_idx = (pd_idx + 1 + *dd_idx) % (raid_disks-1); qd_idx = raid_disks - 1; break; case ALGORITHM_RIGHT_SYMMETRIC_6: - pd_idx = stripe % (raid_disks-1); + pd_idx = sector_div(stripe2, raid_disks-1); *dd_idx = (pd_idx + 1 + *dd_idx) % (raid_disks-1); qd_idx = raid_disks - 1; break; @@ -1869,14 +1865,14 @@ : conf->algorithm; sector_t stripe; int chunk_offset; - int chunk_number, dummy1, dd_idx = i; + sector_t chunk_number; + int dummy1, dd_idx = i; sector_t r_sector; struct stripe_head sh2; chunk_offset = sector_div(new_sector, sectors_per_chunk); stripe = new_sector; - BUG_ON(new_sector != stripe); if (i == sh->pd_idx) return 0; @@ -1969,7 +1965,7 @@ } chunk_number = stripe * data_disks + i; - r_sector = (sector_t)chunk_number * sectors_per_chunk + chunk_offset; + r_sector = chunk_number * sectors_per_chunk + chunk_offset; check = raid5_compute_sector(conf, r_sector, previous, &dummy1, &sh2); @@ -5432,11 +5428,11 @@ !test_bit(Faulty, &rdev->flags)) { if (raid5_add_disk(mddev, rdev) == 0) { char nm[20]; - if (rdev->raid_disk >= conf->previous_raid_disks) + if (rdev->raid_disk >= conf->previous_raid_disks) { set_bit(In_sync, &rdev->flags); - else + added_devices++; + } else rdev->recovery_offset = 0; - added_devices++; sprintf(nm, "rd%d", rdev->raid_disk); if (sysfs_create_link(&mddev->kobj, &rdev->kobj, nm)) @@ -5448,9 +5444,12 @@ break; } + /* When a reshape changes the number of devices, ->degraded + * is measured against the large of the pre and post number of + * devices.*/ if (mddev->delta_disks > 0) { spin_lock_irqsave(&conf->device_lock, flags); - mddev->degraded = (conf->raid_disks - conf->previous_raid_disks) + mddev->degraded += (conf->raid_disks - conf->previous_raid_disks) - added_devices; spin_unlock_irqrestore(&conf->device_lock, flags); } --- linux-2.6.32.orig/drivers/md/raid0.c +++ linux-2.6.32/drivers/md/raid0.c @@ -176,14 +176,15 @@ disk_stack_limits(mddev->gendisk, rdev1->bdev, rdev1->data_offset << 9); /* as we don't honour merge_bvec_fn, we must never risk - * violating it, so limit ->max_sector to one PAGE, as - * a one page request is never in violation. + * violating it, so limit ->max_phys_segments to 1, lying within + * a single page. */ - if (rdev1->bdev->bd_disk->queue->merge_bvec_fn && - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9)) - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); - + if (rdev1->bdev->bd_disk->queue->merge_bvec_fn) { + blk_queue_max_phys_segments(mddev->queue, 1); + blk_queue_segment_boundary(mddev->queue, + PAGE_CACHE_SIZE - 1); + } if (!smallest || (rdev1->sectors < smallest->sectors)) smallest = rdev1; cnt++; --- linux-2.6.32.orig/drivers/md/dm-crypt.c +++ linux-2.6.32/drivers/md/dm-crypt.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2003 Christophe Saout * Copyright (C) 2004 Clemens Fruhwirth - * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * Copyright (C) 2006-2009 Red Hat, Inc. All rights reserved. * * This file is released under the GPL. */ @@ -71,10 +71,21 @@ int (*ctr)(struct crypt_config *cc, struct dm_target *ti, const char *opts); void (*dtr)(struct crypt_config *cc); - const char *(*status)(struct crypt_config *cc); + int (*init)(struct crypt_config *cc); + int (*wipe)(struct crypt_config *cc); int (*generator)(struct crypt_config *cc, u8 *iv, sector_t sector); }; +struct iv_essiv_private { + struct crypto_cipher *tfm; + struct crypto_hash *hash_tfm; + u8 *salt; +}; + +struct iv_benbi_private { + int shift; +}; + /* * Crypt: maps a linear range of a block device * and encrypts / decrypts at the same time. @@ -102,8 +113,8 @@ struct crypt_iv_operations *iv_gen_ops; char *iv_mode; union { - struct crypto_cipher *essiv_tfm; - int benbi_shift; + struct iv_essiv_private essiv; + struct iv_benbi_private benbi; } iv_gen_private; sector_t iv_offset; unsigned int iv_size; @@ -169,88 +180,114 @@ return 0; } -static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, - const char *opts) +/* Initialise ESSIV - compute salt but no local memory allocations */ +static int crypt_iv_essiv_init(struct crypt_config *cc) { - struct crypto_cipher *essiv_tfm; - struct crypto_hash *hash_tfm; + struct iv_essiv_private *essiv = &cc->iv_gen_private.essiv; struct hash_desc desc; struct scatterlist sg; - unsigned int saltsize; - u8 *salt; int err; - if (opts == NULL) { + sg_init_one(&sg, cc->key, cc->key_size); + desc.tfm = essiv->hash_tfm; + desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; + + err = crypto_hash_digest(&desc, &sg, cc->key_size, essiv->salt); + if (err) + return err; + + return crypto_cipher_setkey(essiv->tfm, essiv->salt, + crypto_hash_digestsize(essiv->hash_tfm)); +} + +/* Wipe salt and reset key derived from volume key */ +static int crypt_iv_essiv_wipe(struct crypt_config *cc) +{ + struct iv_essiv_private *essiv = &cc->iv_gen_private.essiv; + unsigned salt_size = crypto_hash_digestsize(essiv->hash_tfm); + + memset(essiv->salt, 0, salt_size); + + return crypto_cipher_setkey(essiv->tfm, essiv->salt, salt_size); +} + +static void crypt_iv_essiv_dtr(struct crypt_config *cc) +{ + struct iv_essiv_private *essiv = &cc->iv_gen_private.essiv; + + crypto_free_cipher(essiv->tfm); + essiv->tfm = NULL; + + crypto_free_hash(essiv->hash_tfm); + essiv->hash_tfm = NULL; + + kzfree(essiv->salt); + essiv->salt = NULL; +} + +static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, + const char *opts) +{ + struct crypto_cipher *essiv_tfm = NULL; + struct crypto_hash *hash_tfm = NULL; + u8 *salt = NULL; + int err; + + if (!opts) { ti->error = "Digest algorithm missing for ESSIV mode"; return -EINVAL; } - /* Hash the cipher key with the given hash algorithm */ + /* Allocate hash algorithm */ hash_tfm = crypto_alloc_hash(opts, 0, CRYPTO_ALG_ASYNC); if (IS_ERR(hash_tfm)) { ti->error = "Error initializing ESSIV hash"; - return PTR_ERR(hash_tfm); + err = PTR_ERR(hash_tfm); + goto bad; } - saltsize = crypto_hash_digestsize(hash_tfm); - salt = kmalloc(saltsize, GFP_KERNEL); - if (salt == NULL) { + salt = kzalloc(crypto_hash_digestsize(hash_tfm), GFP_KERNEL); + if (!salt) { ti->error = "Error kmallocing salt storage in ESSIV"; - crypto_free_hash(hash_tfm); - return -ENOMEM; + err = -ENOMEM; + goto bad; } - sg_init_one(&sg, cc->key, cc->key_size); - desc.tfm = hash_tfm; - desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; - err = crypto_hash_digest(&desc, &sg, cc->key_size, salt); - crypto_free_hash(hash_tfm); - - if (err) { - ti->error = "Error calculating hash in ESSIV"; - kfree(salt); - return err; - } - - /* Setup the essiv_tfm with the given salt */ + /* Allocate essiv_tfm */ essiv_tfm = crypto_alloc_cipher(cc->cipher, 0, CRYPTO_ALG_ASYNC); if (IS_ERR(essiv_tfm)) { ti->error = "Error allocating crypto tfm for ESSIV"; - kfree(salt); - return PTR_ERR(essiv_tfm); + err = PTR_ERR(essiv_tfm); + goto bad; } if (crypto_cipher_blocksize(essiv_tfm) != crypto_ablkcipher_ivsize(cc->tfm)) { ti->error = "Block size of ESSIV cipher does " "not match IV size of block cipher"; - crypto_free_cipher(essiv_tfm); - kfree(salt); - return -EINVAL; - } - err = crypto_cipher_setkey(essiv_tfm, salt, saltsize); - if (err) { - ti->error = "Failed to set key for ESSIV cipher"; - crypto_free_cipher(essiv_tfm); - kfree(salt); - return err; + err = -EINVAL; + goto bad; } - kfree(salt); - cc->iv_gen_private.essiv_tfm = essiv_tfm; + cc->iv_gen_private.essiv.salt = salt; + cc->iv_gen_private.essiv.tfm = essiv_tfm; + cc->iv_gen_private.essiv.hash_tfm = hash_tfm; + return 0; -} -static void crypt_iv_essiv_dtr(struct crypt_config *cc) -{ - crypto_free_cipher(cc->iv_gen_private.essiv_tfm); - cc->iv_gen_private.essiv_tfm = NULL; +bad: + if (essiv_tfm && !IS_ERR(essiv_tfm)) + crypto_free_cipher(essiv_tfm); + if (hash_tfm && !IS_ERR(hash_tfm)) + crypto_free_hash(hash_tfm); + kfree(salt); + return err; } static int crypt_iv_essiv_gen(struct crypt_config *cc, u8 *iv, sector_t sector) { memset(iv, 0, cc->iv_size); *(u64 *)iv = cpu_to_le64(sector); - crypto_cipher_encrypt_one(cc->iv_gen_private.essiv_tfm, iv, iv); + crypto_cipher_encrypt_one(cc->iv_gen_private.essiv.tfm, iv, iv); return 0; } @@ -273,7 +310,7 @@ return -EINVAL; } - cc->iv_gen_private.benbi_shift = 9 - log; + cc->iv_gen_private.benbi.shift = 9 - log; return 0; } @@ -288,7 +325,7 @@ memset(iv, 0, cc->iv_size - sizeof(u64)); /* rest is cleared below */ - val = cpu_to_be64(((u64)sector << cc->iv_gen_private.benbi_shift) + 1); + val = cpu_to_be64(((u64)sector << cc->iv_gen_private.benbi.shift) + 1); put_unaligned(val, (__be64 *)(iv + cc->iv_size - sizeof(u64))); return 0; @@ -308,6 +345,8 @@ static struct crypt_iv_operations crypt_iv_essiv_ops = { .ctr = crypt_iv_essiv_ctr, .dtr = crypt_iv_essiv_dtr, + .init = crypt_iv_essiv_init, + .wipe = crypt_iv_essiv_wipe, .generator = crypt_iv_essiv_gen }; @@ -1039,6 +1078,12 @@ cc->iv_gen_ops->ctr(cc, ti, ivopts) < 0) goto bad_ivmode; + if (cc->iv_gen_ops && cc->iv_gen_ops->init && + cc->iv_gen_ops->init(cc) < 0) { + ti->error = "Error initialising IV"; + goto bad_slab_pool; + } + cc->iv_size = crypto_ablkcipher_ivsize(tfm); if (cc->iv_size) /* at least a 64 bit sector number should fit in our buffer */ @@ -1278,6 +1323,7 @@ static int crypt_message(struct dm_target *ti, unsigned argc, char **argv) { struct crypt_config *cc = ti->private; + int ret = -EINVAL; if (argc < 2) goto error; @@ -1287,10 +1333,22 @@ DMWARN("not suspended during key manipulation."); return -EINVAL; } - if (argc == 3 && !strnicmp(argv[1], MESG_STR("set"))) - return crypt_set_key(cc, argv[2]); - if (argc == 2 && !strnicmp(argv[1], MESG_STR("wipe"))) + if (argc == 3 && !strnicmp(argv[1], MESG_STR("set"))) { + ret = crypt_set_key(cc, argv[2]); + if (ret) + return ret; + if (cc->iv_gen_ops && cc->iv_gen_ops->init) + ret = cc->iv_gen_ops->init(cc); + return ret; + } + if (argc == 2 && !strnicmp(argv[1], MESG_STR("wipe"))) { + if (cc->iv_gen_ops && cc->iv_gen_ops->wipe) { + ret = cc->iv_gen_ops->wipe(cc); + if (ret) + return ret; + } return crypt_wipe_key(cc); + } } error: --- linux-2.6.32.orig/drivers/md/dm-log-userspace-transfer.c +++ linux-2.6.32/drivers/md/dm-log-userspace-transfer.c @@ -172,11 +172,15 @@ { int r = 0; size_t dummy = 0; - int overhead_size = - sizeof(struct dm_ulog_request *) + sizeof(struct cn_msg); + int overhead_size = sizeof(struct dm_ulog_request) + sizeof(struct cn_msg); struct dm_ulog_request *tfr = prealloced_ulog_tfr; struct receiving_pkg pkg; + /* + * Given the space needed to hold the 'struct cn_msg' and + * 'struct dm_ulog_request' - do we have enough payload + * space remaining? + */ if (data_size > (DM_ULOG_PREALLOCED_SIZE - overhead_size)) { DMINFO("Size of tfr exceeds preallocated size"); return -EINVAL; @@ -191,7 +195,7 @@ */ mutex_lock(&dm_ulog_lock); - memset(tfr, 0, DM_ULOG_PREALLOCED_SIZE - overhead_size); + memset(tfr, 0, DM_ULOG_PREALLOCED_SIZE - sizeof(struct cn_msg)); memcpy(tfr->uuid, uuid, DM_UUID_LEN); tfr->luid = luid; tfr->seq = dm_ulog_seq++; --- linux-2.6.32.orig/drivers/md/dm-snap.c +++ linux-2.6.32/drivers/md/dm-snap.c @@ -553,6 +553,8 @@ hash_size = min(origin_dev_size, cow_dev_size) >> s->store->chunk_shift; hash_size = min(hash_size, max_buckets); + if (hash_size < 64) + hash_size = 64; hash_size = rounddown_pow_of_two(hash_size); if (init_exception_table(&s->complete, hash_size, DM_CHUNK_CONSECUTIVE_BITS)) @@ -1152,10 +1154,11 @@ unsigned sz = 0; struct dm_snapshot *snap = ti->private; - down_write(&snap->lock); - switch (type) { case STATUSTYPE_INFO: + + down_write(&snap->lock); + if (!snap->valid) DMEMIT("Invalid"); else { @@ -1171,6 +1174,9 @@ else DMEMIT("Unknown"); } + + up_write(&snap->lock); + break; case STATUSTYPE_TABLE: @@ -1185,8 +1191,6 @@ break; } - up_write(&snap->lock); - return 0; } --- linux-2.6.32.orig/drivers/md/dm-stripe.c +++ linux-2.6.32/drivers/md/dm-stripe.c @@ -110,7 +110,7 @@ } stripes = simple_strtoul(argv[0], &end, 10); - if (*end) { + if (!stripes || *end) { ti->error = "Invalid stripe count"; return -EINVAL; } --- linux-2.6.32.orig/drivers/md/dm-uevent.c +++ linux-2.6.32/drivers/md/dm-uevent.c @@ -139,14 +139,13 @@ list_del_init(&event->elist); /* - * Need to call dm_copy_name_and_uuid from here for now. - * Context of previous var adds and locking used for - * hash_cell not compatable. + * When a device is being removed this copy fails and we + * discard these unsent events. */ if (dm_copy_name_and_uuid(event->md, event->name, event->uuid)) { - DMERR("%s: dm_copy_name_and_uuid() failed", - __func__); + DMINFO("%s: skipping sending uevent for lost device", + __func__); goto uevent_free; } --- linux-2.6.32.orig/drivers/md/bitmap.h +++ linux-2.6.32/drivers/md/bitmap.h @@ -282,7 +282,7 @@ void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector); void bitmap_unplug(struct bitmap *bitmap); -void bitmap_daemon_work(struct bitmap *bitmap); +void bitmap_daemon_work(mddev_t *mddev); #endif #endif --- linux-2.6.32.orig/drivers/md/dm.c +++ linux-2.6.32/drivers/md/dm.c @@ -614,8 +614,10 @@ if (!md->barrier_error && io_error != -EOPNOTSUPP) md->barrier_error = io_error; end_io_acct(io); + free_io(md, io); } else { end_io_acct(io); + free_io(md, io); if (io_error != DM_ENDIO_REQUEUE) { trace_block_bio_complete(md->queue, bio); @@ -623,8 +625,6 @@ bio_endio(bio, io_error); } } - - free_io(md, io); } } @@ -1487,10 +1487,15 @@ return BLKPREP_OK; } -static void map_request(struct dm_target *ti, struct request *rq, - struct mapped_device *md) +/* + * Returns: + * 0 : the request has been processed (not requeued) + * !0 : the request has been requeued + */ +static int map_request(struct dm_target *ti, struct request *rq, + struct mapped_device *md) { - int r; + int r, requeued = 0; struct request *clone = rq->special; struct dm_rq_target_io *tio = clone->end_io_data; @@ -1516,6 +1521,7 @@ case DM_MAPIO_REQUEUE: /* The target wants to requeue the I/O */ dm_requeue_unmapped_request(clone); + requeued = 1; break; default: if (r > 0) { @@ -1527,6 +1533,8 @@ dm_kill_unmapped_request(clone, r); break; } + + return requeued; } /* @@ -1568,12 +1576,17 @@ blk_start_request(rq); spin_unlock(q->queue_lock); - map_request(ti, rq, md); + if (map_request(ti, rq, md)) + goto requeued; + spin_lock_irq(q->queue_lock); } goto out; +requeued: + spin_lock_irq(q->queue_lock); + plug_and_out: if (!elv_queue_empty(q)) /* Some requests still remain, retry later */ @@ -2573,6 +2586,7 @@ { return md->disk; } +EXPORT_SYMBOL_GPL(dm_disk); struct kobject *dm_kobject(struct mapped_device *md) { --- linux-2.6.32.orig/drivers/md/dm-exception-store.c +++ linux-2.6.32/drivers/md/dm-exception-store.c @@ -216,7 +216,8 @@ type = get_type("N"); else { ti->error = "Persistent flag is not P or N"; - return -EINVAL; + r = -EINVAL; + goto bad_type; } if (!type) { --- linux-2.6.32.orig/drivers/md/raid10.c +++ linux-2.6.32/drivers/md/raid10.c @@ -1155,13 +1155,17 @@ disk_stack_limits(mddev->gendisk, rdev->bdev, rdev->data_offset << 9); - /* as we don't honour merge_bvec_fn, we must never risk - * violating it, so limit ->max_sector to one PAGE, as - * a one page request is never in violation. + /* as we don't honour merge_bvec_fn, we must + * never risk violating it, so limit + * ->max_phys_segments to one lying with a single + * page, as a one page request is never in + * violation. */ - if (rdev->bdev->bd_disk->queue->merge_bvec_fn && - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9)) - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) { + blk_queue_max_phys_segments(mddev->queue, 1); + blk_queue_segment_boundary(mddev->queue, + PAGE_CACHE_SIZE - 1); + } p->head_position = 0; rdev->raid_disk = mirror; @@ -2155,12 +2159,14 @@ disk_stack_limits(mddev->gendisk, rdev->bdev, rdev->data_offset << 9); /* as we don't honour merge_bvec_fn, we must never risk - * violating it, so limit ->max_sector to one PAGE, as - * a one page request is never in violation. + * violating it, so limit max_phys_segments to 1 lying + * within a single page. */ - if (rdev->bdev->bd_disk->queue->merge_bvec_fn && - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9)) - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) { + blk_queue_max_phys_segments(mddev->queue, 1); + blk_queue_segment_boundary(mddev->queue, + PAGE_CACHE_SIZE - 1); + } disk->head_position = 0; } --- linux-2.6.32.orig/drivers/md/bitmap.c +++ linux-2.6.32/drivers/md/bitmap.c @@ -1078,23 +1078,31 @@ * out to disk */ -void bitmap_daemon_work(struct bitmap *bitmap) +void bitmap_daemon_work(mddev_t *mddev) { + struct bitmap *bitmap; unsigned long j; unsigned long flags; struct page *page = NULL, *lastpage = NULL; int blocks; void *paddr; - if (bitmap == NULL) + /* Use a mutex to guard daemon_work against + * bitmap_destroy. + */ + mutex_lock(&mddev->bitmap_mutex); + bitmap = mddev->bitmap; + if (bitmap == NULL) { + mutex_unlock(&mddev->bitmap_mutex); return; + } if (time_before(jiffies, bitmap->daemon_lastrun + bitmap->daemon_sleep*HZ)) goto done; bitmap->daemon_lastrun = jiffies; if (bitmap->allclean) { bitmap->mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; - return; + goto done; } bitmap->allclean = 1; @@ -1203,6 +1211,7 @@ done: if (bitmap->allclean == 0) bitmap->mddev->thread->timeout = bitmap->daemon_sleep * HZ; + mutex_unlock(&mddev->bitmap_mutex); } static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap, @@ -1541,9 +1550,9 @@ */ sleep = bitmap->daemon_sleep; bitmap->daemon_sleep = 0; - bitmap_daemon_work(bitmap); - bitmap_daemon_work(bitmap); - bitmap_daemon_work(bitmap); + bitmap_daemon_work(mddev); + bitmap_daemon_work(mddev); + bitmap_daemon_work(mddev); bitmap->daemon_sleep = sleep; bitmap_update_sb(bitmap); } @@ -1574,6 +1583,7 @@ kfree(bp); kfree(bitmap); } + void bitmap_destroy(mddev_t *mddev) { struct bitmap *bitmap = mddev->bitmap; @@ -1581,7 +1591,9 @@ if (!bitmap) /* there was no bitmap */ return; + mutex_lock(&mddev->bitmap_mutex); mddev->bitmap = NULL; /* disconnect from the md device */ + mutex_unlock(&mddev->bitmap_mutex); if (mddev->thread) mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; --- linux-2.6.32.orig/drivers/md/md.c +++ linux-2.6.32/drivers/md/md.c @@ -282,7 +282,9 @@ if (!atomic_dec_and_lock(&mddev->active, &all_mddevs_lock)) return; if (!mddev->raid_disks && list_empty(&mddev->disks) && - !mddev->hold_active) { + mddev->ctime == 0 && !mddev->hold_active) { + /* Array is not configured at all, and not held active, + * so destroy it */ list_del(&mddev->all_mddevs); if (mddev->gendisk) { /* we did a probe so need to clean up. @@ -367,6 +369,7 @@ mutex_init(&new->open_mutex); mutex_init(&new->reconfig_mutex); + mutex_init(&new->bitmap_mutex); INIT_LIST_HEAD(&new->disks); INIT_LIST_HEAD(&new->all_mddevs); init_timer(&new->safemode_timer); @@ -2008,12 +2011,18 @@ if (!mddev->in_sync || mddev->recovery_cp != MaxSector) { /* not clean */ /* .. if the array isn't clean, an 'even' event must also go * to spares. */ - if ((mddev->events&1)==0) + if ((mddev->events&1)==0) { nospares = 0; + sync_req = 2; /* force a second update to get the + * even/odd in sync */ + } } else { /* otherwise an 'odd' event must go to spares */ - if ((mddev->events&1)) + if ((mddev->events&1)) { nospares = 0; + sync_req = 2; /* force a second update to get the + * even/odd in sync */ + } } } @@ -4170,7 +4179,7 @@ mddev->barriers_work = 1; mddev->ok_start_degraded = start_dirty_degraded; - if (start_readonly) + if (start_readonly && mddev->ro == 0) mddev->ro = 2; /* read-only, but switch on first write */ err = mddev->pers->run(mddev); @@ -5070,6 +5079,10 @@ mddev->minor_version = info->minor_version; mddev->patch_version = info->patch_version; mddev->persistent = !info->not_persistent; + /* ensure mddev_put doesn't delete this now that there + * is some minimal configuration. + */ + mddev->ctime = get_seconds(); return 0; } mddev->major_version = MD_MAJOR_VERSION; @@ -6629,7 +6642,7 @@ if (mddev->bitmap) - bitmap_daemon_work(mddev->bitmap); + bitmap_daemon_work(mddev); if (mddev->ro) return; --- linux-2.6.32.orig/drivers/md/linear.c +++ linux-2.6.32/drivers/md/linear.c @@ -172,12 +172,14 @@ disk_stack_limits(mddev->gendisk, rdev->bdev, rdev->data_offset << 9); /* as we don't honour merge_bvec_fn, we must never risk - * violating it, so limit ->max_sector to one PAGE, as - * a one page request is never in violation. + * violating it, so limit max_phys_segments to 1 lying within + * a single page. */ - if (rdev->bdev->bd_disk->queue->merge_bvec_fn && - queue_max_sectors(mddev->queue) > (PAGE_SIZE>>9)) - blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); + if (rdev->bdev->bd_disk->queue->merge_bvec_fn) { + blk_queue_max_phys_segments(mddev->queue, 1); + blk_queue_segment_boundary(mddev->queue, + PAGE_CACHE_SIZE - 1); + } conf->array_sectors += rdev->sectors; cnt++; --- linux-2.6.32.orig/drivers/md/dm-table.c +++ linux-2.6.32/drivers/md/dm-table.c @@ -499,16 +499,15 @@ return 0; } - if (blk_stack_limits(limits, &q->limits, start << 9) < 0) - DMWARN("%s: target device %s is misaligned: " + if (bdev_stack_limits(limits, bdev, start) < 0) + DMWARN("%s: adding target device %s caused an alignment inconsistency: " "physical_block_size=%u, logical_block_size=%u, " "alignment_offset=%u, start=%llu", dm_device_name(ti->table->md), bdevname(bdev, b), q->limits.physical_block_size, q->limits.logical_block_size, q->limits.alignment_offset, - (unsigned long long) start << 9); - + (unsigned long long) start << SECTOR_SHIFT); /* * Check if merge fn is supported. @@ -1025,9 +1024,9 @@ * for the table. */ if (blk_stack_limits(limits, &ti_limits, 0) < 0) - DMWARN("%s: target device " + DMWARN("%s: adding target device " "(start sect %llu len %llu) " - "is misaligned", + "caused an alignment inconsistency", dm_device_name(table->md), (unsigned long long) ti->begin, (unsigned long long) ti->len); @@ -1079,15 +1078,6 @@ struct queue_limits *limits) { /* - * Each target device in the table has a data area that should normally - * be aligned such that the DM device's alignment_offset is 0. - * FIXME: Propagate alignment_offsets up the stack and warn of - * sub-optimal or inconsistent settings. - */ - limits->alignment_offset = 0; - limits->misaligned = 0; - - /* * Copy table's limits to the DM device's request_queue */ q->limits = *limits; --- linux-2.6.32.orig/drivers/md/md.h +++ linux-2.6.32/drivers/md/md.h @@ -289,6 +289,7 @@ * hot-adding a bitmap. It should * eventually be settable by sysfs. */ + struct mutex bitmap_mutex; struct list_head all_mddevs; }; --- linux-2.6.32.orig/drivers/md/dm-ioctl.c +++ linux-2.6.32/drivers/md/dm-ioctl.c @@ -56,6 +56,11 @@ */ static DECLARE_RWSEM(_hash_lock); +/* + * Protects use of mdptr to obtain hash cell name and uuid from mapped device. + */ +static DEFINE_MUTEX(dm_hash_cells_mutex); + static void init_buckets(struct list_head *buckets) { unsigned int i; @@ -206,7 +211,9 @@ list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid)); } dm_get(md); + mutex_lock(&dm_hash_cells_mutex); dm_set_mdptr(md, cell); + mutex_unlock(&dm_hash_cells_mutex); up_write(&_hash_lock); return 0; @@ -224,7 +231,9 @@ /* remove from the dev hash */ list_del(&hc->uuid_list); list_del(&hc->name_list); + mutex_lock(&dm_hash_cells_mutex); dm_set_mdptr(hc->md, NULL); + mutex_unlock(&dm_hash_cells_mutex); table = dm_get_table(hc->md); if (table) { @@ -321,7 +330,9 @@ */ list_del(&hc->name_list); old_name = hc->name; + mutex_lock(&dm_hash_cells_mutex); hc->name = new_name; + mutex_unlock(&dm_hash_cells_mutex); list_add(&hc->name_list, _name_buckets + hash_str(new_name)); /* @@ -1582,8 +1593,7 @@ if (!md) return -ENXIO; - dm_get(md); - down_read(&_hash_lock); + mutex_lock(&dm_hash_cells_mutex); hc = dm_get_mdptr(md); if (!hc || hc->md != md) { r = -ENXIO; @@ -1596,8 +1606,7 @@ strcpy(uuid, hc->uuid ? : ""); out: - up_read(&_hash_lock); - dm_put(md); + mutex_unlock(&dm_hash_cells_mutex); return r; } --- linux-2.6.32.orig/drivers/cpuidle/governors/menu.c +++ linux-2.6.32/drivers/cpuidle/governors/menu.c @@ -18,6 +18,7 @@ #include #include #include +#include #define BUCKETS 12 #define RESOLUTION 1024 @@ -100,7 +101,6 @@ unsigned int expected_us; u64 predicted_us; - unsigned int measured_us; unsigned int exit_us; unsigned int bucket; u64 correction_factor[BUCKETS]; @@ -169,6 +169,12 @@ static void menu_update(struct cpuidle_device *dev); +/* This implements DIV_ROUND_CLOSEST but avoids 64 bit division */ +static u64 div_round64(u64 dividend, u32 divisor) +{ + return div_u64(dividend + (divisor / 2), divisor); +} + /** * menu_select - selects the next idle state to enter * @dev: the CPU @@ -180,14 +186,14 @@ int i; int multiplier; - data->last_state_idx = 0; - data->exit_us = 0; - if (data->needs_update) { menu_update(dev); data->needs_update = 0; } + data->last_state_idx = 0; + data->exit_us = 0; + /* Special case when user has set very strict latency requirement */ if (unlikely(latency_req == 0)) return 0; @@ -209,9 +215,8 @@ data->correction_factor[data->bucket] = RESOLUTION * DECAY; /* Make sure to round up for half microseconds */ - data->predicted_us = DIV_ROUND_CLOSEST( - data->expected_us * data->correction_factor[data->bucket], - RESOLUTION * DECAY); + data->predicted_us = div_round64(data->expected_us * data->correction_factor[data->bucket], + RESOLUTION * DECAY); /* * We want to default to C1 (hlt), not to busy polling @@ -288,7 +293,7 @@ new_factor = data->correction_factor[data->bucket] * (DECAY - 1) / DECAY; - if (data->expected_us > 0 && data->measured_us < MAX_INTERESTING) + if (data->expected_us > 0 && measured_us < MAX_INTERESTING) new_factor += RESOLUTION * measured_us / data->expected_us; else /* --- linux-2.6.32.orig/drivers/virtio/virtio_pci.c +++ linux-2.6.32/drivers/virtio/virtio_pci.c @@ -473,7 +473,8 @@ list_for_each_entry_safe(vq, n, &vdev->vqs, list) { info = vq->priv; - if (vp_dev->per_vq_vectors) + if (vp_dev->per_vq_vectors && + info->msix_vector != VIRTIO_MSI_NO_VECTOR) free_irq(vp_dev->msix_entries[info->msix_vector].vector, vq); vp_del_vq(vq); --- linux-2.6.32.orig/drivers/mmc/host/s3cmci.c +++ linux-2.6.32/drivers/mmc/host/s3cmci.c @@ -1178,7 +1178,7 @@ struct s3c24xx_mci_pdata *pdata = host->pdata; int ret; - if (pdata->gpio_detect == 0) + if (pdata->no_detect) return -ENOSYS; ret = gpio_get_value(pdata->gpio_detect) ? 0 : 1; @@ -1361,6 +1361,8 @@ static struct s3c24xx_mci_pdata s3cmci_def_pdata = { /* This is currently here to avoid a number of if (host->pdata) * checks. Any zero fields to ensure reaonable defaults are picked. */ + .no_wprotect = 1, + .no_detect = 1, }; #ifdef CONFIG_CPU_FREQ --- linux-2.6.32.orig/drivers/mmc/host/atmel-mci.c +++ linux-2.6.32/drivers/mmc/host/atmel-mci.c @@ -530,9 +530,10 @@ { struct mmc_data *data = host->data; - dma_unmap_sg(&host->pdev->dev, data->sg, data->sg_len, - ((data->flags & MMC_DATA_WRITE) - ? DMA_TO_DEVICE : DMA_FROM_DEVICE)); + if (data) + dma_unmap_sg(&host->pdev->dev, data->sg, data->sg_len, + ((data->flags & MMC_DATA_WRITE) + ? DMA_TO_DEVICE : DMA_FROM_DEVICE)); } static void atmci_stop_dma(struct atmel_mci *host) @@ -1037,8 +1038,8 @@ "command error: status=0x%08x\n", status); if (cmd->data) { - host->data = NULL; atmci_stop_dma(host); + host->data = NULL; mci_writel(host, IDR, MCI_NOTBUSY | MCI_TXRDY | MCI_RXRDY | ATMCI_DATA_ERROR_FLAGS); @@ -1229,6 +1230,7 @@ } else { data->bytes_xfered = data->blocks * data->blksz; data->error = 0; + mci_writel(host, IDR, ATMCI_DATA_ERROR_FLAGS); } if (!data->stop) { @@ -1669,13 +1671,13 @@ ret = -ENODEV; if (pdata->slot[0].bus_width) { ret = atmci_init_slot(host, &pdata->slot[0], - MCI_SDCSEL_SLOT_A, 0); + 0, MCI_SDCSEL_SLOT_A); if (!ret) nr_slots++; } if (pdata->slot[1].bus_width) { ret = atmci_init_slot(host, &pdata->slot[1], - MCI_SDCSEL_SLOT_B, 1); + 1, MCI_SDCSEL_SLOT_B); if (!ret) nr_slots++; } --- linux-2.6.32.orig/drivers/mmc/card/block.c +++ linux-2.6.32/drivers/mmc/card/block.c @@ -85,7 +85,14 @@ mutex_lock(&open_lock); md->usage--; if (md->usage == 0) { + int devmaj = MAJOR(disk_devt(md->disk)); int devidx = MINOR(disk_devt(md->disk)) >> MMC_SHIFT; + + if (!devmaj) + devidx = md->disk->first_minor >> MMC_SHIFT; + + blk_cleanup_queue(md->queue.queue); + __clear_bit(devidx, dev_use); put_disk(md->disk); @@ -613,6 +620,7 @@ return 0; out: + mmc_cleanup_queue(&md->queue); mmc_blk_put(md); return err; --- linux-2.6.32.orig/drivers/mmc/card/queue.c +++ linux-2.6.32/drivers/mmc/card/queue.c @@ -90,9 +90,10 @@ struct request *req; if (!mq) { - printk(KERN_ERR "MMC: killing requests for dead queue\n"); - while ((req = blk_fetch_request(q)) != NULL) + while ((req = blk_fetch_request(q)) != NULL) { + req->cmd_flags |= REQ_QUIET; __blk_end_request_all(req, -EIO); + } return; } @@ -223,17 +224,18 @@ struct request_queue *q = mq->queue; unsigned long flags; - /* Mark that we should start throwing out stragglers */ - spin_lock_irqsave(q->queue_lock, flags); - q->queuedata = NULL; - spin_unlock_irqrestore(q->queue_lock, flags); - /* Make sure the queue isn't suspended, as that will deadlock */ mmc_queue_resume(mq); /* Then terminate our worker thread */ kthread_stop(mq->thread); + /* Empty the queue */ + spin_lock_irqsave(q->queue_lock, flags); + q->queuedata = NULL; + blk_start_queue(q); + spin_unlock_irqrestore(q->queue_lock, flags); + if (mq->bounce_sg) kfree(mq->bounce_sg); mq->bounce_sg = NULL; @@ -245,8 +247,6 @@ kfree(mq->bounce_buf); mq->bounce_buf = NULL; - blk_cleanup_queue(mq->queue); - mq->card = NULL; } EXPORT_SYMBOL(mmc_cleanup_queue); --- linux-2.6.32.orig/drivers/mmc/core/core.h +++ linux-2.6.32/drivers/mmc/core/core.h @@ -54,7 +54,9 @@ int mmc_attach_sd(struct mmc_host *host, u32 ocr); int mmc_attach_sdio(struct mmc_host *host, u32 ocr); +/* Module parameters */ extern int use_spi_crc; +extern int mmc_assume_removable; /* Debugfs information for hosts and cards */ void mmc_add_host_debugfs(struct mmc_host *host); --- linux-2.6.32.orig/drivers/mmc/core/Kconfig +++ linux-2.6.32/drivers/mmc/core/Kconfig @@ -3,7 +3,7 @@ # config MMC_UNSAFE_RESUME - bool "Allow unsafe resume (DANGEROUS)" + bool "Assume MMC/SD cards are non-removable (DANGEROUS)" help If you say Y here, the MMC layer will assume that all cards stayed in their respective slots during the suspend. The @@ -14,3 +14,5 @@ This option is usually just for embedded systems which use a MMC/SD card for rootfs. Most people should say N here. + This option sets a default which can be overridden by the + module parameter "removable=0" or "removable=1". --- linux-2.6.32.orig/drivers/mmc/core/core.c +++ linux-2.6.32/drivers/mmc/core/core.c @@ -48,6 +48,22 @@ module_param(use_spi_crc, bool, 0); /* + * We normally treat cards as removed during suspend if they are not + * known to be on a non-removable bus, to avoid the risk of writing + * back data to a different card after resume. Allow this to be + * overridden if necessary. + */ +#ifdef CONFIG_MMC_UNSAFE_RESUME +int mmc_assume_removable; +#else +int mmc_assume_removable = 1; +#endif +module_param_named(removable, mmc_assume_removable, bool, 0644); +MODULE_PARM_DESC( + removable, + "MMC/SD cards are removable and may be removed during suspend"); + +/* * Internal function. Schedule delayed work in the MMC work queue. */ static int mmc_schedule_delayed_work(struct delayed_work *work, --- linux-2.6.32.orig/drivers/mmc/core/mmc.c +++ linux-2.6.32/drivers/mmc/core/mmc.c @@ -602,25 +602,6 @@ return err; } -#ifdef CONFIG_MMC_UNSAFE_RESUME - -static const struct mmc_bus_ops mmc_ops = { - .awake = mmc_awake, - .sleep = mmc_sleep, - .remove = mmc_remove, - .detect = mmc_detect, - .suspend = mmc_suspend, - .resume = mmc_resume, - .power_restore = mmc_power_restore, -}; - -static void mmc_attach_bus_ops(struct mmc_host *host) -{ - mmc_attach_bus(host, &mmc_ops); -} - -#else - static const struct mmc_bus_ops mmc_ops = { .awake = mmc_awake, .sleep = mmc_sleep, @@ -645,15 +626,13 @@ { const struct mmc_bus_ops *bus_ops; - if (host->caps & MMC_CAP_NONREMOVABLE) + if (host->caps & MMC_CAP_NONREMOVABLE || !mmc_assume_removable) bus_ops = &mmc_ops_unsafe; else bus_ops = &mmc_ops; mmc_attach_bus(host, bus_ops); } -#endif - /* * Starting point for MMC card init. */ --- linux-2.6.32.orig/drivers/mmc/core/sd.c +++ linux-2.6.32/drivers/mmc/core/sd.c @@ -606,23 +606,6 @@ mmc_release_host(host); } -#ifdef CONFIG_MMC_UNSAFE_RESUME - -static const struct mmc_bus_ops mmc_sd_ops = { - .remove = mmc_sd_remove, - .detect = mmc_sd_detect, - .suspend = mmc_sd_suspend, - .resume = mmc_sd_resume, - .power_restore = mmc_sd_power_restore, -}; - -static void mmc_sd_attach_bus_ops(struct mmc_host *host) -{ - mmc_attach_bus(host, &mmc_sd_ops); -} - -#else - static const struct mmc_bus_ops mmc_sd_ops = { .remove = mmc_sd_remove, .detect = mmc_sd_detect, @@ -643,15 +626,13 @@ { const struct mmc_bus_ops *bus_ops; - if (host->caps & MMC_CAP_NONREMOVABLE) + if (host->caps & MMC_CAP_NONREMOVABLE || !mmc_assume_removable) bus_ops = &mmc_sd_ops_unsafe; else bus_ops = &mmc_sd_ops; mmc_attach_bus(host, bus_ops); } -#endif - /* * Starting point for SD card init. */ --- linux-2.6.32.orig/drivers/video/vesafb.c +++ linux-2.6.32/drivers/video/vesafb.c @@ -28,6 +28,12 @@ #define dac_reg (0x3c8) #define dac_val (0x3c9) +struct vesafb_info +{ + u32 pseudo_palette[256]; + int mtrr_hdl; +}; + /* --------------------------------------------------------------------- */ static struct fb_var_screeninfo vesafb_defined __initdata = { @@ -47,16 +53,37 @@ .accel = FB_ACCEL_NONE, }; +#ifndef MODULE static int inverse __read_mostly; +#endif static int mtrr __read_mostly; /* disable mtrr */ static int vram_remap __initdata; /* Set amount of memory to be used */ static int vram_total __initdata; /* Set total amount of memory */ static int pmi_setpal __read_mostly = 1; /* pmi for palette changes ??? */ +static int redraw __read_mostly; static int ypan __read_mostly; /* 0..nothing, 1..ypan, 2..ywrap */ +static int ywrap __read_mostly; static void (*pmi_start)(void) __read_mostly; static void (*pmi_pal) (void) __read_mostly; static int depth __read_mostly; static int vga_compat __read_mostly; + +module_param(redraw, bool, 0); +module_param(ypan, bool, 0); +module_param(ywrap, bool, 0); +module_param_named(vgapal, pmi_setpal, invbool, 0); +MODULE_PARM_DESC(vgapal, "Use VGA for setting palette (default)"); +module_param_named(pmipal, pmi_setpal, bool, 0); +MODULE_PARM_DESC(pmipal, "Use PMI for setting palette"); +module_param(mtrr, bool, 0); +MODULE_PARM_DESC(mtrr, "Enable MTRR support (default)"); +module_param_named(nomtrr, mtrr, invbool, 0); +MODULE_PARM_DESC(nomtrr, "Disable MTRR support"); +module_param(vram_remap, int, 0); +MODULE_PARM_DESC(vram_remap, "Set total amount of memory to be used"); +module_param(vram_total, int, 0); +MODULE_PARM_DESC(vram_total, "Total amount of memory"); + /* --------------------------------------------------------------------- */ static int vesafb_pan_display(struct fb_var_screeninfo *var, @@ -192,6 +219,7 @@ .fb_imageblit = cfb_imageblit, }; +#ifndef MODULE static int __init vesafb_setup(char *options) { char *this_opt; @@ -225,6 +253,7 @@ } return 0; } +#endif static int __init vesafb_probe(struct platform_device *dev) { @@ -476,8 +505,28 @@ return err; } +static int __exit vesafb_remove(struct platform_device *device) +{ + struct fb_info *info = dev_get_drvdata(&device->dev); + + unregister_framebuffer(info); +#ifdef CONFIG_MTRR + { + struct vesafb_info *vfb_info = (struct vesafb_info *) info->par; + if (vfb_info->mtrr_hdl >= 0) + mtrr_del(vfb_info->mtrr_hdl, 0, 0); + } +#endif + iounmap(info->screen_base); + framebuffer_release(info); + release_mem_region(vesafb_fix.smem_start, vesafb_fix.smem_len); + + return 0; +} + static struct platform_driver vesafb_driver = { .probe = vesafb_probe, + .remove = vesafb_remove, .driver = { .name = "vesafb", }, @@ -488,11 +537,18 @@ static int __init vesafb_init(void) { int ret; +#ifndef MODULE char *option = NULL; /* ignore error return of fb_get_options */ fb_get_options("vesafb", &option); vesafb_setup(option); +#else + if (redraw) + ypan = 0; + if (ywrap) + ypan = 2; +#endif ret = platform_driver_register(&vesafb_driver); if (!ret) { @@ -511,6 +567,14 @@ return ret; } + +static void __exit vesafb_exit(void) +{ + platform_device_unregister(vesafb_device); + platform_driver_unregister(&vesafb_driver); +} + module_init(vesafb_init); +module_exit(vesafb_exit); MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/drivers/video/offb.c +++ linux-2.6.32/drivers/video/offb.c @@ -282,8 +282,17 @@ return 0; } +static void offb_destroy(struct fb_info *info) +{ + if (info->screen_base) + iounmap(info->screen_base); + release_mem_region(info->aperture_base, info->aperture_size); + framebuffer_release(info); +} + static struct fb_ops offb_ops = { .owner = THIS_MODULE, + .fb_destroy = offb_destroy, .fb_setcolreg = offb_setcolreg, .fb_set_par = offb_set_par, .fb_blank = offb_blank, @@ -482,10 +491,14 @@ var->sync = 0; var->vmode = FB_VMODE_NONINTERLACED; + /* set offb aperture size for generic probing */ + info->aperture_base = address; + info->aperture_size = fix->smem_len; + info->fbops = &offb_ops; info->screen_base = ioremap(address, fix->smem_len); info->pseudo_palette = (void *) (info + 1); - info->flags = FBINFO_DEFAULT | foreign_endian; + info->flags = FBINFO_DEFAULT | FBINFO_MISC_FIRMWARE | foreign_endian; fb_alloc_cmap(&info->cmap, 256, 0); --- linux-2.6.32.orig/drivers/video/efifb.c +++ linux-2.6.32/drivers/video/efifb.c @@ -161,8 +161,17 @@ return 0; } +static void efifb_destroy(struct fb_info *info) +{ + if (info->screen_base) + iounmap(info->screen_base); + release_mem_region(info->aperture_base, info->aperture_size); + framebuffer_release(info); +} + static struct fb_ops efifb_ops = { .owner = THIS_MODULE, + .fb_destroy = efifb_destroy, .fb_setcolreg = efifb_setcolreg, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -281,7 +290,7 @@ info->par = NULL; info->aperture_base = efifb_fix.smem_start; - info->aperture_size = size_total; + info->aperture_size = size_remap; info->screen_base = ioremap(efifb_fix.smem_start, efifb_fix.smem_len); if (!info->screen_base) { --- linux-2.6.32.orig/drivers/video/imxfb.c +++ linux-2.6.32/drivers/video/imxfb.c @@ -593,7 +593,8 @@ */ static int imxfb_suspend(struct platform_device *dev, pm_message_t state) { - struct imxfb_info *fbi = platform_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); + struct imxfb_info *fbi = info->par; pr_debug("%s\n", __func__); @@ -603,7 +604,8 @@ static int imxfb_resume(struct platform_device *dev) { - struct imxfb_info *fbi = platform_get_drvdata(dev); + struct fb_info *info = platform_get_drvdata(dev); + struct imxfb_info *fbi = info->par; pr_debug("%s\n", __func__); --- linux-2.6.32.orig/drivers/video/bfin-t350mcqb-fb.c +++ linux-2.6.32/drivers/video/bfin-t350mcqb-fb.c @@ -515,9 +515,9 @@ fbinfo->fbops = &bfin_t350mcqb_fb_ops; fbinfo->flags = FBINFO_FLAG_DEFAULT; - info->fb_buffer = - dma_alloc_coherent(NULL, fbinfo->fix.smem_len, &info->dma_handle, - GFP_KERNEL); + info->fb_buffer = dma_alloc_coherent(NULL, fbinfo->fix.smem_len + + ACTIVE_VIDEO_MEM_OFFSET, + &info->dma_handle, GFP_KERNEL); if (NULL == info->fb_buffer) { printk(KERN_ERR DRIVER_NAME @@ -587,8 +587,8 @@ out6: fb_dealloc_cmap(&fbinfo->cmap); out4: - dma_free_coherent(NULL, fbinfo->fix.smem_len, info->fb_buffer, - info->dma_handle); + dma_free_coherent(NULL, fbinfo->fix.smem_len + ACTIVE_VIDEO_MEM_OFFSET, + info->fb_buffer, info->dma_handle); out3: framebuffer_release(fbinfo); out2: @@ -611,8 +611,9 @@ free_irq(info->irq, info); if (info->fb_buffer != NULL) - dma_free_coherent(NULL, fbinfo->fix.smem_len, info->fb_buffer, - info->dma_handle); + dma_free_coherent(NULL, fbinfo->fix.smem_len + + ACTIVE_VIDEO_MEM_OFFSET, info->fb_buffer, + info->dma_handle); fb_dealloc_cmap(&fbinfo->cmap); --- linux-2.6.32.orig/drivers/video/Kconfig +++ linux-2.6.32/drivers/video/Kconfig @@ -688,8 +688,8 @@ If unsure, say N. config FB_VESA - bool "VESA VGA graphics support" - depends on (FB = y) && X86 + tristate "VESA VGA graphics support" + depends on FB && X86 select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT --- linux-2.6.32.orig/drivers/video/s3c-fb.c +++ linux-2.6.32/drivers/video/s3c-fb.c @@ -211,21 +211,23 @@ /** * s3c_fb_calc_pixclk() - calculate the divider to create the pixel clock. - * @id: window id. * @sfb: The hardware state. * @pixclock: The pixel clock wanted, in picoseconds. * * Given the specified pixel clock, work out the necessary divider to get * close to the output frequency. */ -static int s3c_fb_calc_pixclk(unsigned char id, struct s3c_fb *sfb, unsigned int pixclk) +static int s3c_fb_calc_pixclk(struct s3c_fb *sfb, unsigned int pixclk) { - struct s3c_fb_pd_win *win = sfb->pdata->win[id]; unsigned long clk = clk_get_rate(sfb->bus_clk); + unsigned long long tmp; unsigned int result; - pixclk *= win->win_mode.refresh; - result = clk / pixclk; + tmp = (unsigned long long)clk; + tmp *= pixclk; + + do_div(tmp, 1000000000UL); + result = (unsigned int)tmp / 1000; dev_dbg(sfb->dev, "pixclk=%u, clk=%lu, div=%d (%lu)\n", pixclk, clk, result, clk / result); @@ -301,7 +303,7 @@ /* use window 0 as the basis for the lcd output timings */ if (win_no == 0) { - clkdiv = s3c_fb_calc_pixclk(win_no, sfb, var->pixclock); + clkdiv = s3c_fb_calc_pixclk(sfb, var->pixclock); data = sfb->pdata->vidcon0; data &= ~(VIDCON0_CLKVAL_F_MASK | VIDCON0_CLKDIR); --- linux-2.6.32.orig/drivers/video/mx3fb.c +++ linux-2.6.32/drivers/video/mx3fb.c @@ -324,8 +324,11 @@ unsigned long flags; dma_cookie_t cookie; - dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, - to_tx_desc(mx3_fbi->txd), to_tx_desc(mx3_fbi->txd)->sg); + if (mx3_fbi->txd) + dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, + to_tx_desc(mx3_fbi->txd), to_tx_desc(mx3_fbi->txd)->sg); + else + dev_dbg(mx3fb->dev, "mx3fbi %p, txd = NULL\n", mx3_fbi); /* This enables the channel */ if (mx3_fbi->cookie < 0) { @@ -646,6 +649,7 @@ static void sdc_set_brightness(struct mx3fb_data *mx3fb, uint8_t value) { + dev_dbg(mx3fb->dev, "%s: value = %d\n", __func__, value); /* This might be board-specific */ mx3fb_write_reg(mx3fb, 0x03000000UL | value << 16, SDC_PWM_CTRL); return; @@ -1486,12 +1490,12 @@ goto ersdc0; } + mx3fb->backlight_level = 255; + ret = init_fb_chan(mx3fb, to_idmac_chan(chan)); if (ret < 0) goto eisdc0; - mx3fb->backlight_level = 255; - return 0; eisdc0: --- linux-2.6.32.orig/drivers/video/sunxvr500.c +++ linux-2.6.32/drivers/video/sunxvr500.c @@ -400,6 +400,7 @@ static struct pci_device_id e3d_pci_table[] = { { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a0), }, + { PCI_DEVICE(0x1091, 0x7a0), }, { PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a2), }, { .vendor = PCI_VENDOR_ID_3DLABS, .device = PCI_ANY_ID, --- linux-2.6.32.orig/drivers/video/vga16fb.c +++ linux-2.6.32/drivers/video/vga16fb.c @@ -1355,6 +1355,16 @@ vga16fb_update_fix(info); + /* + * Ubuntu: Don't register vga16fb if another fb exists. Bad interactions + * can occur. + */ + if (num_registered_fb > 0) { + printk(KERN_NOTICE "vga16fb: not registering due to another " + "framebuffer present\n"); + goto err_check_var; + } + if (register_framebuffer(info) < 0) { printk(KERN_ERR "vga16fb: unable to register framebuffer\n"); ret = -EINVAL; @@ -1440,6 +1450,8 @@ MODULE_DESCRIPTION("Legacy VGA framebuffer device driver"); MODULE_LICENSE("GPL"); +/* Attempt to load for any VGA compatible device. */ +MODULE_ALIAS("pci:*bc03sc00i*"); module_init(vga16fb_init); module_exit(vga16fb_exit); --- linux-2.6.32.orig/drivers/video/matrox/g450_pll.c +++ linux-2.6.32/drivers/video/matrox/g450_pll.c @@ -368,7 +368,8 @@ M1064_XDVICLKCTRL_C1DVICLKEN | M1064_XDVICLKCTRL_DVILOOPCTL | M1064_XDVICLKCTRL_P1LOOPBWDTCTL; - matroxfb_DAC_out(minfo, M1064_XDVICLKCTRL, tmp); + /* Setting this breaks PC systems so don't do it */ + /* matroxfb_DAC_out(minfo, M1064_XDVICLKCTRL, tmp); */ matroxfb_DAC_out(minfo, M1064_XPWRCTRL, xpwrctrl); --- linux-2.6.32.orig/drivers/video/backlight/mbp_nvidia_bl.c +++ linux-2.6.32/drivers/video/backlight/mbp_nvidia_bl.c @@ -139,6 +139,51 @@ static const struct dmi_system_id __initdata mbp_device_table[] = { { .callback = mbp_dmi_match, + .ident = "MacBook 1,1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"), + }, + .driver_data = (void *)&intel_chipset_data, + }, + { + .callback = mbp_dmi_match, + .ident = "MacBook 2,1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook2,1"), + }, + .driver_data = (void *)&intel_chipset_data, + }, + { + .callback = mbp_dmi_match, + .ident = "MacBook 3,1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook3,1"), + }, + .driver_data = (void *)&intel_chipset_data, + }, + { + .callback = mbp_dmi_match, + .ident = "MacBook 4,1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,1"), + }, + .driver_data = (void *)&intel_chipset_data, + }, + { + .callback = mbp_dmi_match, + .ident = "MacBook 4,2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,2"), + }, + .driver_data = (void *)&intel_chipset_data, + }, + { + .callback = mbp_dmi_match, .ident = "MacBookPro 3,1", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), --- linux-2.6.32.orig/drivers/rtc/rtc-coh901331.c +++ linux-2.6.32/drivers/rtc/rtc-coh901331.c @@ -271,12 +271,13 @@ { struct coh901331_port *rtap = dev_get_drvdata(&pdev->dev); - if (device_may_wakeup(&pdev->dev)) + if (device_may_wakeup(&pdev->dev)) { disable_irq_wake(rtap->irq); - else + } else { clk_enable(rtap->clk); writel(rtap->irqmaskstore, rtap->virtbase + COH901331_IRQ_MASK); clk_disable(rtap->clk); + } return 0; } #else --- linux-2.6.32.orig/drivers/rtc/rtc-cmos.c +++ linux-2.6.32/drivers/rtc/rtc-cmos.c @@ -1099,9 +1099,9 @@ #define cmos_pnp_resume NULL #endif -static void cmos_pnp_shutdown(struct device *pdev) +static void cmos_pnp_shutdown(struct pnp_dev *pnp) { - if (system_state == SYSTEM_POWER_OFF && !cmos_poweroff(pdev)) + if (system_state == SYSTEM_POWER_OFF && !cmos_poweroff(&pnp->dev)) return; cmos_do_shutdown(); @@ -1120,15 +1120,12 @@ .id_table = rtc_ids, .probe = cmos_pnp_probe, .remove = __exit_p(cmos_pnp_remove), + .shutdown = cmos_pnp_shutdown, /* flag ensures resume() gets called, and stops syslog spam */ .flags = PNP_DRIVER_RES_DO_NOT_CHANGE, .suspend = cmos_pnp_suspend, .resume = cmos_pnp_resume, - .driver = { - .name = (char *)driver_name, - .shutdown = cmos_pnp_shutdown, - } }; #endif /* CONFIG_PNP */ --- linux-2.6.32.orig/drivers/rtc/rtc-fm3130.c +++ linux-2.6.32/drivers/rtc/rtc-fm3130.c @@ -376,20 +376,22 @@ } /* Disabling calibration mode */ - if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) + if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) { i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL] & ~(FM3130_RTC_CONTROL_BIT_CAL)); dev_warn(&client->dev, "Disabling calibration mode!\n"); + } /* Disabling read and write modes */ if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE || - fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) + fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) { i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL] & ~(FM3130_RTC_CONTROL_BIT_READ | FM3130_RTC_CONTROL_BIT_WRITE)); dev_warn(&client->dev, "Disabling READ or WRITE mode!\n"); + } /* oscillator off? turn it on, so clock can tick. */ if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN) --- linux-2.6.32.orig/drivers/rtc/class.c +++ linux-2.6.32/drivers/rtc/class.c @@ -226,6 +226,7 @@ { rtc_dev_exit(); class_destroy(rtc_class); + idr_destroy(&rtc_idr); } subsys_initcall(rtc_init); --- linux-2.6.32.orig/drivers/ssb/sprom.c +++ linux-2.6.32/drivers/ssb/sprom.c @@ -13,6 +13,8 @@ #include "ssb_private.h" +#include + static const struct ssb_sprom *fallback_sprom; @@ -33,17 +35,27 @@ static int hex2sprom(u16 *sprom, const char *dump, size_t len, size_t sprom_size_words) { - char tmp[5] = { 0 }; - int cnt = 0; + char c, tmp[5] = { 0 }; + int err, cnt = 0; unsigned long parsed; - if (len < sprom_size_words * 2) + /* Strip whitespace at the end. */ + while (len) { + c = dump[len - 1]; + if (!isspace(c) && c != '\0') + break; + len--; + } + /* Length must match exactly. */ + if (len != sprom_size_words * 4) return -EINVAL; while (cnt < sprom_size_words) { memcpy(tmp, dump, 4); dump += 4; - parsed = simple_strtoul(tmp, NULL, 16); + err = strict_strtoul(tmp, 16, &parsed); + if (err) + return err; sprom[cnt++] = swab16((u16)parsed); } --- linux-2.6.32.orig/drivers/acpi/video.c +++ linux-2.6.32/drivers/acpi/video.c @@ -2088,7 +2088,7 @@ static int acpi_video_bus_start_devices(struct acpi_video_bus *video) { - return acpi_video_bus_DOS(video, 0, 0); + return acpi_video_bus_DOS(video, 0, 1); } static int acpi_video_bus_stop_devices(struct acpi_video_bus *video) --- linux-2.6.32.orig/drivers/acpi/osl.c +++ linux-2.6.32/drivers/acpi/osl.c @@ -1151,16 +1151,10 @@ if (clash) { if (acpi_enforce_resources != ENFORCE_RESOURCES_NO) { - printk("%sACPI: %s resource %s [0x%llx-0x%llx]" - " conflicts with ACPI region %s" - " [0x%llx-0x%llx]\n", - acpi_enforce_resources == ENFORCE_RESOURCES_LAX - ? KERN_WARNING : KERN_ERR, - ioport ? "I/O" : "Memory", res->name, - (long long) res->start, (long long) res->end, - res_list_elem->name, - (long long) res_list_elem->start, - (long long) res_list_elem->end); + printk(KERN_INFO "ACPI: resource %s %pR" + " conflicts with ACPI region %s %pR\n", + res->name, res, res_list_elem->name, + res_list_elem); if (acpi_enforce_resources == ENFORCE_RESOURCES_LAX) printk(KERN_NOTICE "ACPI: This conflict may" " cause random problems and system" --- linux-2.6.32.orig/drivers/acpi/scan.c +++ linux-2.6.32/drivers/acpi/scan.c @@ -1357,6 +1357,9 @@ { struct acpi_bus_ops ops; + if (!device) + return -EINVAL; + memset(&ops, 0, sizeof(ops)); ops.acpi_op_start = 1; --- linux-2.6.32.orig/drivers/acpi/power_meter.c +++ linux-2.6.32/drivers/acpi/power_meter.c @@ -34,7 +34,7 @@ #define ACPI_POWER_METER_NAME "power_meter" ACPI_MODULE_NAME(ACPI_POWER_METER_NAME); #define ACPI_POWER_METER_DEVICE_NAME "Power Meter" -#define ACPI_POWER_METER_CLASS "power_meter_resource" +#define ACPI_POWER_METER_CLASS "pwr_meter_resource" #define NUM_SENSORS 17 --- linux-2.6.32.orig/drivers/acpi/bus.c +++ linux-2.6.32/drivers/acpi/bus.c @@ -344,6 +344,167 @@ EXPORT_SYMBOL(acpi_bus_can_wakeup); +static void acpi_print_osc_error(acpi_handle handle, + struct acpi_osc_context *context, char *error) +{ + struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER}; + int i; + + if (ACPI_FAILURE(acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer))) + printk(KERN_DEBUG "%s\n", error); + else { + printk(KERN_DEBUG "%s:%s\n", (char *)buffer.pointer, error); + kfree(buffer.pointer); + } + printk(KERN_DEBUG"_OSC request data:"); + for (i = 0; i < context->cap.length; i += sizeof(u32)) + printk("%x ", *((u32 *)(context->cap.pointer + i))); + printk("\n"); +} + +static u8 hex_val(unsigned char c) +{ + return isdigit(c) ? c - '0' : toupper(c) - 'A' + 10; +} + +static acpi_status acpi_str_to_uuid(char *str, u8 *uuid) +{ + int i; + static int opc_map_to_uuid[16] = {6, 4, 2, 0, 11, 9, 16, 14, 19, 21, + 24, 26, 28, 30, 32, 34}; + + if (strlen(str) != 36) + return AE_BAD_PARAMETER; + for (i = 0; i < 36; i++) { + if (i == 8 || i == 13 || i == 18 || i == 23) { + if (str[i] != '-') + return AE_BAD_PARAMETER; + } else if (!isxdigit(str[i])) + return AE_BAD_PARAMETER; + } + for (i = 0; i < 16; i++) { + uuid[i] = hex_val(str[opc_map_to_uuid[i]]) << 4; + uuid[i] |= hex_val(str[opc_map_to_uuid[i] + 1]); + } + return AE_OK; +} + +acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context) +{ + acpi_status status; + struct acpi_object_list input; + union acpi_object in_params[4]; + union acpi_object *out_obj; + u8 uuid[16]; + u32 errors; + struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL}; + + if (!context) + return AE_ERROR; + if (ACPI_FAILURE(acpi_str_to_uuid(context->uuid_str, uuid))) + return AE_ERROR; + context->ret.length = ACPI_ALLOCATE_BUFFER; + context->ret.pointer = NULL; + + /* Setting up input parameters */ + input.count = 4; + input.pointer = in_params; + in_params[0].type = ACPI_TYPE_BUFFER; + in_params[0].buffer.length = 16; + in_params[0].buffer.pointer = uuid; + in_params[1].type = ACPI_TYPE_INTEGER; + in_params[1].integer.value = context->rev; + in_params[2].type = ACPI_TYPE_INTEGER; + in_params[2].integer.value = context->cap.length/sizeof(u32); + in_params[3].type = ACPI_TYPE_BUFFER; + in_params[3].buffer.length = context->cap.length; + in_params[3].buffer.pointer = context->cap.pointer; + + status = acpi_evaluate_object(handle, "_OSC", &input, &output); + if (ACPI_FAILURE(status)) + return status; + + if (!output.length) + return AE_NULL_OBJECT; + + out_obj = output.pointer; + if (out_obj->type != ACPI_TYPE_BUFFER + || out_obj->buffer.length != context->cap.length) { + acpi_print_osc_error(handle, context, + "_OSC evaluation returned wrong type"); + status = AE_TYPE; + goto out_kfree; + } + /* Need to ignore the bit0 in result code */ + errors = *((u32 *)out_obj->buffer.pointer) & ~(1 << 0); + if (errors) { + if (errors & OSC_REQUEST_ERROR) + acpi_print_osc_error(handle, context, + "_OSC request failed"); + if (errors & OSC_INVALID_UUID_ERROR) + acpi_print_osc_error(handle, context, + "_OSC invalid UUID"); + if (errors & OSC_INVALID_REVISION_ERROR) + acpi_print_osc_error(handle, context, + "_OSC invalid revision"); + if (errors & OSC_CAPABILITIES_MASK_ERROR) { + if (((u32 *)context->cap.pointer)[OSC_QUERY_TYPE] + & OSC_QUERY_ENABLE) + goto out_success; + status = AE_SUPPORT; + goto out_kfree; + } + status = AE_ERROR; + goto out_kfree; + } +out_success: + context->ret.length = out_obj->buffer.length; + context->ret.pointer = kmalloc(context->ret.length, GFP_KERNEL); + if (!context->ret.pointer) { + status = AE_NO_MEMORY; + goto out_kfree; + } + memcpy(context->ret.pointer, out_obj->buffer.pointer, + context->ret.length); + status = AE_OK; + +out_kfree: + kfree(output.pointer); + if (status != AE_OK) + context->ret.pointer = NULL; + return status; +} +EXPORT_SYMBOL(acpi_run_osc); + +static u8 sb_uuid_str[] = "0811B06E-4A27-44F9-8D60-3CBBC22E7B48"; +static void acpi_bus_osc_support(void) +{ + u32 capbuf[2]; + struct acpi_osc_context context = { + .uuid_str = sb_uuid_str, + .rev = 1, + .cap.length = 8, + .cap.pointer = capbuf, + }; + acpi_handle handle; + + capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE; + capbuf[OSC_SUPPORT_TYPE] = OSC_SB_PR3_SUPPORT; /* _PR3 is in use */ +#if defined(CONFIG_ACPI_PROCESSOR_AGGREGATOR) ||\ + defined(CONFIG_ACPI_PROCESSOR_AGGREGATOR_MODULE) + capbuf[OSC_SUPPORT_TYPE] |= OSC_SB_PAD_SUPPORT; +#endif + +#if defined(CONFIG_ACPI_PROCESSOR) || defined(CONFIG_ACPI_PROCESSOR_MODULE) + capbuf[OSC_SUPPORT_TYPE] |= OSC_SB_PPC_OST_SUPPORT; +#endif + if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle))) + return; + if (ACPI_SUCCESS(acpi_run_osc(handle, &context))) + kfree(context.ret.pointer); + /* do we need to check the returned cap? Sounds no */ +} + /* -------------------------------------------------------------------------- Event Management -------------------------------------------------------------------------- */ @@ -734,6 +895,8 @@ status = acpi_ec_ecdt_probe(); /* Ignore result. Not having an ECDT is not fatal. */ + acpi_bus_osc_support(); + status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION); if (ACPI_FAILURE(status)) { printk(KERN_ERR PREFIX "Unable to initialize ACPI objects\n"); --- linux-2.6.32.orig/drivers/acpi/processor_idle.c +++ linux-2.6.32/drivers/acpi/processor_idle.c @@ -110,6 +110,14 @@ DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"), DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307")}, (void *)2}, + { set_max_cstate, "Pavilion zv5000", { + DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME,"Pavilion zv5000 (DS502A#ABA)")}, + (void *)1}, + { set_max_cstate, "Asus L8400B", { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), + DMI_MATCH(DMI_PRODUCT_NAME,"L8400B series Notebook PC")}, + (void *)1}, {}, }; @@ -299,6 +307,17 @@ pr->power.states[ACPI_STATE_C2].latency = acpi_gbl_FADT.C2latency; pr->power.states[ACPI_STATE_C3].latency = acpi_gbl_FADT.C3latency; + /* + * FADT specified C2 latency must be less than or equal to + * 100 microseconds. + */ + if (acpi_gbl_FADT.C2latency > ACPI_PROCESSOR_MAX_C2_LATENCY) { + ACPI_DEBUG_PRINT((ACPI_DB_INFO, + "C2 latency too large [%d]\n", acpi_gbl_FADT.C2latency)); + /* invalidate C2 */ + pr->power.states[ACPI_STATE_C2].address = 0; + } + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "lvl2[0x%08x] lvl3[0x%08x]\n", pr->power.states[ACPI_STATE_C2].address, @@ -495,16 +514,6 @@ return; /* - * C2 latency must be less than or equal to 100 - * microseconds. - */ - else if (cx->latency > ACPI_PROCESSOR_MAX_C2_LATENCY) { - ACPI_DEBUG_PRINT((ACPI_DB_INFO, - "latency too large [%d]\n", cx->latency)); - return; - } - - /* * Otherwise we've met all of our C2 requirements. * Normalize the C2 latency to expidite policy */ @@ -879,12 +888,14 @@ return(acpi_idle_enter_c1(dev, state)); local_irq_disable(); - current_thread_info()->status &= ~TS_POLLING; - /* - * TS_POLLING-cleared state must be visible before we test - * NEED_RESCHED: - */ - smp_mb(); + if (cx->entry_method != ACPI_CSTATE_FFH) { + current_thread_info()->status &= ~TS_POLLING; + /* + * TS_POLLING-cleared state must be visible before we test + * NEED_RESCHED: + */ + smp_mb(); + } if (unlikely(need_resched())) { current_thread_info()->status |= TS_POLLING; @@ -964,12 +975,14 @@ } local_irq_disable(); - current_thread_info()->status &= ~TS_POLLING; - /* - * TS_POLLING-cleared state must be visible before we test - * NEED_RESCHED: - */ - smp_mb(); + if (cx->entry_method != ACPI_CSTATE_FFH) { + current_thread_info()->status &= ~TS_POLLING; + /* + * TS_POLLING-cleared state must be visible before we test + * NEED_RESCHED: + */ + smp_mb(); + } if (unlikely(need_resched())) { current_thread_info()->status |= TS_POLLING; --- linux-2.6.32.orig/drivers/acpi/tables.c +++ linux-2.6.32/drivers/acpi/tables.c @@ -213,7 +213,7 @@ unsigned long table_end; acpi_size tbl_size; - if (acpi_disabled) + if (acpi_disabled && !acpi_ht) return -ENODEV; if (!handler) @@ -280,7 +280,7 @@ struct acpi_table_header *table = NULL; acpi_size tbl_size; - if (acpi_disabled) + if (acpi_disabled && !acpi_ht) return -ENODEV; if (!handler) --- linux-2.6.32.orig/drivers/acpi/battery.c +++ linux-2.6.32/drivers/acpi/battery.c @@ -837,6 +837,18 @@ #endif } +static LIST_HEAD(acpi_battery_domain); + +static void acpi_battery_update_async(struct acpi_device *device, async_cookie_t cookie) +{ + struct acpi_battery *battery = acpi_driver_data(device); + + acpi_battery_update(battery); + printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", + ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), + device->status.battery_present ? "present" : "absent"); +} + static int acpi_battery_add(struct acpi_device *device) { int result = 0; @@ -851,14 +863,14 @@ strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); device->driver_data = battery; mutex_init(&battery->lock); - acpi_battery_update(battery); + /* Mark the battery for update at first access. */ + battery->update_time = 0; #ifdef CONFIG_ACPI_PROCFS_POWER result = acpi_battery_add_fs(device); #endif if (!result) { - printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", - ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), - device->status.battery_present ? "present" : "absent"); + async_schedule_domain(acpi_battery_update_async, device, &acpi_battery_domain); + } else { #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_remove_fs(device); @@ -874,6 +886,10 @@ if (!device || !acpi_driver_data(device)) return -EINVAL; + + /* Ensure all async updates are complete before freeing the battery. */ + async_synchronize_full_domain(&acpi_battery_domain); + battery = acpi_driver_data(device); #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_remove_fs(device); @@ -911,27 +927,21 @@ }, }; -static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie) +static int __init acpi_battery_init(void) { if (acpi_disabled) return; #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_dir = acpi_lock_battery_dir(); if (!acpi_battery_dir) - return; + return -1; #endif if (acpi_bus_register_driver(&acpi_battery_driver) < 0) { #ifdef CONFIG_ACPI_PROCFS_POWER acpi_unlock_battery_dir(acpi_battery_dir); #endif - return; + return -1; } - return; -} - -static int __init acpi_battery_init(void) -{ - async_schedule(acpi_battery_init_async, NULL); return 0; } --- linux-2.6.32.orig/drivers/acpi/button.c +++ linux-2.6.32/drivers/acpi/button.c @@ -282,6 +282,13 @@ if (ret == NOTIFY_DONE) ret = blocking_notifier_call_chain(&acpi_lid_notifier, state, device); + if (ret == NOTIFY_DONE || ret == NOTIFY_OK) { + /* + * It is also regarded as success if the notifier_chain + * returns NOTIFY_OK or NOTIFY_DONE. + */ + ret = 0; + } return ret; } --- linux-2.6.32.orig/drivers/acpi/ec.c +++ linux-2.6.32/drivers/acpi/ec.c @@ -201,14 +201,13 @@ spin_unlock_irqrestore(&ec->curr_lock, flags); } -static void acpi_ec_gpe_query(void *ec_cxt); +static int acpi_ec_sync_query(struct acpi_ec *ec); -static int ec_check_sci(struct acpi_ec *ec, u8 state) +static int ec_check_sci_sync(struct acpi_ec *ec, u8 state) { if (state & ACPI_EC_FLAG_SCI) { if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) - return acpi_os_execute(OSL_EC_BURST_HANDLER, - acpi_ec_gpe_query, ec); + return acpi_ec_sync_query(ec); } return 0; } @@ -249,11 +248,6 @@ { unsigned long tmp; int ret = 0; - pr_debug(PREFIX "transaction start\n"); - /* disable GPE during transaction if storm is detected */ - if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) { - acpi_disable_gpe(NULL, ec->gpe); - } if (EC_FLAGS_MSI) udelay(ACPI_EC_MSI_UDELAY); /* start transaction */ @@ -265,20 +259,9 @@ clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); spin_unlock_irqrestore(&ec->curr_lock, tmp); ret = ec_poll(ec); - pr_debug(PREFIX "transaction end\n"); spin_lock_irqsave(&ec->curr_lock, tmp); ec->curr = NULL; spin_unlock_irqrestore(&ec->curr_lock, tmp); - if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) { - /* check if we received SCI during transaction */ - ec_check_sci(ec, acpi_ec_read_status(ec)); - /* it is safe to enable GPE outside of transaction */ - acpi_enable_gpe(NULL, ec->gpe); - } else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) { - pr_info(PREFIX "GPE storm detected, " - "transactions will use polling mode\n"); - set_bit(EC_FLAGS_GPE_STORM, &ec->flags); - } return ret; } @@ -321,7 +304,26 @@ status = -ETIME; goto end; } + pr_debug(PREFIX "transaction start\n"); + /* disable GPE during transaction if storm is detected */ + if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) { + acpi_disable_gpe(NULL, ec->gpe); + } + status = acpi_ec_transaction_unlocked(ec, t); + + /* check if we received SCI during transaction */ + ec_check_sci_sync(ec, acpi_ec_read_status(ec)); + if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) { + msleep(1); + /* it is safe to enable GPE outside of transaction */ + acpi_enable_gpe(NULL, ec->gpe); + } else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) { + pr_info(PREFIX "GPE storm detected, " + "transactions will use polling mode\n"); + set_bit(EC_FLAGS_GPE_STORM, &ec->flags); + } + pr_debug(PREFIX "transaction end\n"); end: if (ec->global_lock) acpi_release_global_lock(glk); @@ -443,7 +445,7 @@ EXPORT_SYMBOL(ec_transaction); -static int acpi_ec_query(struct acpi_ec *ec, u8 * data) +static int acpi_ec_query_unlocked(struct acpi_ec *ec, u8 * data) { int result; u8 d; @@ -452,20 +454,16 @@ .wlen = 0, .rlen = 1}; if (!ec || !data) return -EINVAL; - /* * 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). */ - - result = acpi_ec_transaction(ec, &t); + result = acpi_ec_transaction_unlocked(ec, &t); if (result) return result; - if (!d) return -ENODATA; - *data = d; return 0; } @@ -509,43 +507,78 @@ EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler); -static void acpi_ec_gpe_query(void *ec_cxt) +static void acpi_ec_run(void *cxt) { - struct acpi_ec *ec = ec_cxt; - u8 value = 0; - struct acpi_ec_query_handler *handler, copy; - - if (!ec || acpi_ec_query(ec, &value)) + struct acpi_ec_query_handler *handler = cxt; + if (!handler) return; - mutex_lock(&ec->lock); + pr_debug(PREFIX "start query execution\n"); + if (handler->func) + handler->func(handler->data); + else if (handler->handle) + acpi_evaluate_object(handler->handle, NULL, NULL, NULL); + pr_debug(PREFIX "stop query execution\n"); + kfree(handler); +} + +static int acpi_ec_sync_query(struct acpi_ec *ec) +{ + u8 value = 0; + int status; + struct acpi_ec_query_handler *handler, *copy; + if ((status = acpi_ec_query_unlocked(ec, &value))) + return status; list_for_each_entry(handler, &ec->list, node) { if (value == handler->query_bit) { /* have custom handler for this bit */ - memcpy(©, handler, sizeof(copy)); - mutex_unlock(&ec->lock); - if (copy.func) { - copy.func(copy.data); - } else if (copy.handle) { - acpi_evaluate_object(copy.handle, NULL, NULL, NULL); - } - return; + copy = kmalloc(sizeof(*handler), GFP_KERNEL); + if (!copy) + return -ENOMEM; + memcpy(copy, handler, sizeof(*copy)); + pr_debug(PREFIX "push query execution (0x%2x) on queue\n", value); + return acpi_os_execute(OSL_GPE_HANDLER, + acpi_ec_run, copy); } } + return 0; +} + +static void acpi_ec_gpe_query(void *ec_cxt) +{ + struct acpi_ec *ec = ec_cxt; + if (!ec) + return; + mutex_lock(&ec->lock); + acpi_ec_sync_query(ec); mutex_unlock(&ec->lock); } +static void acpi_ec_gpe_query(void *ec_cxt); + +static int ec_check_sci(struct acpi_ec *ec, u8 state) +{ + if (state & ACPI_EC_FLAG_SCI) { + if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) { + pr_debug(PREFIX "push gpe query to the queue\n"); + return acpi_os_execute(OSL_NOTIFY_HANDLER, + acpi_ec_gpe_query, ec); + } + } + return 0; +} + static u32 acpi_ec_gpe_handler(void *data) { struct acpi_ec *ec = data; - u8 status; pr_debug(PREFIX "~~~> interrupt\n"); - status = acpi_ec_read_status(ec); - advance_transaction(ec, status); - if (ec_transaction_done(ec) && (status & ACPI_EC_FLAG_IBF) == 0) + advance_transaction(ec, acpi_ec_read_status(ec)); + if (ec_transaction_done(ec) && + (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF) == 0) { wake_up(&ec->wait); - ec_check_sci(ec, status); + ec_check_sci(ec, acpi_ec_read_status(ec)); + } return ACPI_INTERRUPT_HANDLED; } @@ -568,10 +601,7 @@ if (function != ACPI_READ && function != ACPI_WRITE) return AE_BAD_PARAMETER; - if (bits != 8 && acpi_strict) - return AE_BAD_PARAMETER; - - if (EC_FLAGS_MSI) + if (EC_FLAGS_MSI || bits > 8) acpi_ec_burst_enable(ec); if (function == ACPI_READ) { @@ -593,7 +623,7 @@ } } - if (EC_FLAGS_MSI) + if (EC_FLAGS_MSI || bits > 8) acpi_ec_burst_disable(ec); switch (result) { @@ -916,6 +946,7 @@ /* MSI EC needs special treatment, enable it */ static int ec_flag_msi(const struct dmi_system_id *id) { + printk(KERN_DEBUG PREFIX "Detected MSI hardware, enabling workarounds.\n"); EC_FLAGS_MSI = 1; EC_FLAGS_VALIDATE_ECDT = 1; return 0; @@ -928,8 +959,13 @@ DMI_MATCH(DMI_BOARD_NAME, "JFL92") }, NULL}, { ec_flag_msi, "MSI hardware", { - DMI_MATCH(DMI_BIOS_VENDOR, "Micro-Star"), - DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star") }, NULL}, + DMI_MATCH(DMI_BIOS_VENDOR, "Micro-Star")}, NULL}, + { + ec_flag_msi, "MSI hardware", { + DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star")}, NULL}, + { + ec_flag_msi, "MSI hardware", { + DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL}, { ec_validate_ecdt, "ASUS hardware", { DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL}, --- linux-2.6.32.orig/drivers/acpi/sleep.c +++ linux-2.6.32/drivers/acpi/sleep.c @@ -81,6 +81,23 @@ #ifdef CONFIG_ACPI_SLEEP static u32 acpi_target_sleep_state = ACPI_STATE_S0; /* + * According to the ACPI specification the BIOS should make sure that ACPI is + * enabled and SCI_EN bit is set on wake-up from S1 - S3 sleep states. Still, + * some BIOSes don't do that and therefore we use acpi_enable() to enable ACPI + * on such systems during resume. Unfortunately that doesn't help in + * particularly pathological cases in which SCI_EN has to be set directly on + * resume, although the specification states very clearly that this flag is + * owned by the hardware. The set_sci_en_on_resume variable will be set in such + * cases. + */ +static bool set_sci_en_on_resume; + +void __init acpi_set_sci_en_on_resume(void) +{ + set_sci_en_on_resume = true; +} + +/* * ACPI 1.0 wants us to execute _PTS before suspending devices, so we allow the * user to request that behavior by using the 'acpi_old_suspend_ordering' * kernel command line option that causes the following variable to be set. @@ -170,18 +187,6 @@ #endif /* CONFIG_ACPI_SLEEP */ #ifdef CONFIG_SUSPEND -/* - * According to the ACPI specification the BIOS should make sure that ACPI is - * enabled and SCI_EN bit is set on wake-up from S1 - S3 sleep states. Still, - * some BIOSes don't do that and therefore we use acpi_enable() to enable ACPI - * on such systems during resume. Unfortunately that doesn't help in - * particularly pathological cases in which SCI_EN has to be set directly on - * resume, although the specification states very clearly that this flag is - * owned by the hardware. The set_sci_en_on_resume variable will be set in such - * cases. - */ -static bool set_sci_en_on_resume; - extern void do_suspend_lowlevel(void); static u32 acpi_suspend_states[] = { @@ -445,6 +450,38 @@ }, }, { + .callback = init_set_sci_en_on_resume, + .ident = "Lenovo ThinkPad T410", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"), + }, + }, + { + .callback = init_set_sci_en_on_resume, + .ident = "Lenovo ThinkPad T510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"), + }, + }, + { + .callback = init_set_sci_en_on_resume, + .ident = "Lenovo ThinkPad W510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"), + }, + }, + { + .callback = init_set_sci_en_on_resume, + .ident = "Lenovo ThinkPad X201[s]", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"), + }, + }, + { .callback = init_old_suspend_ordering, .ident = "Panasonic CF51-2L", .matches = { @@ -453,6 +490,30 @@ DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"), }, }, + { + .callback = init_set_sci_en_on_resume, + .ident = "Dell Studio 1558", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1558"), + }, + }, + { + .callback = init_set_sci_en_on_resume, + .ident = "Dell Studio 1557", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1557"), + }, + }, + { + .callback = init_set_sci_en_on_resume, + .ident = "Dell Studio 1555", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1555"), + }, + }, {}, }; #endif /* CONFIG_SUSPEND */ --- linux-2.6.32.orig/drivers/acpi/acpica/exprep.c +++ linux-2.6.32/drivers/acpi/acpica/exprep.c @@ -468,6 +468,23 @@ acpi_ut_add_reference(obj_desc->field.region_obj); + /* allow full data read from EC address space */ + if (obj_desc->field.region_obj->region.space_id == + ACPI_ADR_SPACE_EC) { + if (obj_desc->common_field.bit_length > 8) { + int access_bit_width = ACPI_ROUND_UP( + obj_desc->common_field.bit_length, 8); + if (access_bit_width > sizeof(acpi_integer) * 8) + access_bit_width = + sizeof(acpi_integer) * 8; + obj_desc->common_field.access_bit_width = + access_bit_width; + obj_desc->common_field.access_byte_width = + ACPI_DIV_8(access_bit_width); + } + + } + ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, "RegionField: BitOff %X, Off %X, Gran %X, Region %p\n", obj_desc->field.start_field_bit_offset, --- linux-2.6.32.orig/drivers/macintosh/therm_adt746x.c +++ linux-2.6.32/drivers/macintosh/therm_adt746x.c @@ -79,6 +79,7 @@ u8 limits[3]; int last_speed[2]; int last_var[2]; + int pwm_inv[2]; }; static enum {ADT7460, ADT7467} therm_type; @@ -89,6 +90,8 @@ static void write_both_fan_speed(struct thermostat *th, int speed); static void write_fan_speed(struct thermostat *th, int speed, int fan); +static void thermostat_create_files(void); +static void thermostat_remove_files(void); static int write_reg(struct thermostat* th, int reg, u8 data) @@ -160,6 +163,8 @@ struct thermostat *th = i2c_get_clientdata(client); int i; + thermostat_remove_files(); + if (thread_therm != NULL) { kthread_stop(thread_therm); } @@ -229,19 +234,23 @@ if (speed >= 0) { manual = read_reg(th, MANUAL_MODE[fan]); + manual &= ~INVERT_MASK; write_reg(th, MANUAL_MODE[fan], - (manual|MANUAL_MASK) & (~INVERT_MASK)); + manual | MANUAL_MASK | th->pwm_inv[fan]); write_reg(th, FAN_SPD_SET[fan], speed); } else { /* back to automatic */ if(therm_type == ADT7460) { manual = read_reg(th, MANUAL_MODE[fan]) & (~MANUAL_MASK); - + manual &= ~INVERT_MASK; + manual |= th->pwm_inv[fan]; write_reg(th, MANUAL_MODE[fan], manual|REM_CONTROL[fan]); } else { manual = read_reg(th, MANUAL_MODE[fan]); + manual &= ~INVERT_MASK; + manual |= th->pwm_inv[fan]; write_reg(th, MANUAL_MODE[fan], manual&(~AUTO_MASK)); } } @@ -418,6 +427,10 @@ thermostat = th; + /* record invert bit status because fw can corrupt it after suspend */ + th->pwm_inv[0] = read_reg(th, MANUAL_MODE[0]) & INVERT_MASK; + th->pwm_inv[1] = read_reg(th, MANUAL_MODE[1]) & INVERT_MASK; + /* be sure to really write fan speed the first time */ th->last_speed[0] = -2; th->last_speed[1] = -2; @@ -440,6 +453,8 @@ return -ENOMEM; } + thermostat_create_files(); + return 0; } @@ -557,7 +572,6 @@ struct device_node* np; const u32 *prop; int i = 0, offset = 0; - int err; np = of_find_node_by_name(NULL, "fan"); if (!np) @@ -624,6 +638,17 @@ return -ENODEV; } +#ifndef CONFIG_I2C_POWERMAC + request_module("i2c-powermac"); +#endif + + return i2c_add_driver(&thermostat_driver); +} + +static void thermostat_create_files(void) +{ + int err; + err = device_create_file(&of_dev->dev, &dev_attr_sensor1_temperature); err |= device_create_file(&of_dev->dev, &dev_attr_sensor2_temperature); err |= device_create_file(&of_dev->dev, &dev_attr_sensor1_limit); @@ -638,16 +663,9 @@ if (err) printk(KERN_WARNING "Failed to create tempertaure attribute file(s).\n"); - -#ifndef CONFIG_I2C_POWERMAC - request_module("i2c-powermac"); -#endif - - return i2c_add_driver(&thermostat_driver); } -static void __exit -thermostat_exit(void) +static void thermostat_remove_files(void) { if (of_dev) { device_remove_file(&of_dev->dev, &dev_attr_sensor1_temperature); @@ -664,9 +682,14 @@ device_remove_file(&of_dev->dev, &dev_attr_sensor2_fan_speed); - of_device_unregister(of_dev); } +} + +static void __exit +thermostat_exit(void) +{ i2c_del_driver(&thermostat_driver); + of_device_unregister(of_dev); } module_init(thermostat_init); --- linux-2.6.32.orig/drivers/macintosh/windfarm_smu_controls.c +++ linux-2.6.32/drivers/macintosh/windfarm_smu_controls.c @@ -202,6 +202,8 @@ fct->ctrl.name = "cpu-front-fan-1"; else if (!strcmp(l, "CPU A PUMP")) fct->ctrl.name = "cpu-pump-0"; + else if (!strcmp(l, "CPU B PUMP")) + fct->ctrl.name = "cpu-pump-1"; else if (!strcmp(l, "Slots Fan") || !strcmp(l, "Slots fan") || !strcmp(l, "EXPANSION SLOTS INTAKE")) fct->ctrl.name = "slots-fan"; --- linux-2.6.32.orig/drivers/usb/host/uhci-hcd.c +++ linux-2.6.32/drivers/usb/host/uhci-hcd.c @@ -735,6 +735,7 @@ uhci_hc_died(uhci); uhci_scan_schedule(uhci); spin_unlock_irq(&uhci->lock); + synchronize_irq(hcd->irq); del_timer_sync(&uhci->fsbr_timer); release_uhci(uhci); @@ -749,7 +750,20 @@ spin_lock_irq(&uhci->lock); if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) rc = -ESHUTDOWN; - else if (!uhci->dead) + else if (uhci->dead) + ; /* Dead controllers tell no tales */ + + /* Once the controller is stopped, port resumes that are already + * in progress won't complete. Hence if remote wakeup is enabled + * for the root hub and any ports are in the middle of a resume or + * remote wakeup, we must fail the suspend. + */ + else if (hcd->self.root_hub->do_remote_wakeup && + uhci->resuming_ports) { + dev_dbg(uhci_dev(uhci), "suspend failed because a port " + "is resuming\n"); + rc = -EBUSY; + } else suspend_rh(uhci, UHCI_RH_SUSPENDED); spin_unlock_irq(&uhci->lock); return rc; --- linux-2.6.32.orig/drivers/usb/host/xhci-hcd.c +++ linux-2.6.32/drivers/usb/host/xhci-hcd.c @@ -1157,6 +1157,7 @@ cmd_completion = &virt_dev->cmd_completion; cmd_status = &virt_dev->cmd_status; } + init_completion(cmd_completion); if (!ctx_change) ret = xhci_queue_configure_endpoint(xhci, in_ctx->dma, --- linux-2.6.32.orig/drivers/usb/host/xhci-mem.c +++ linux-2.6.32/drivers/usb/host/xhci-mem.c @@ -496,6 +496,19 @@ return EP_INTERVAL(interval); } +/* The "Mult" field in the endpoint context is only set for SuperSpeed devices. + * High speed endpoint descriptors can define "the number of additional + * transaction opportunities per microframe", but that goes in the Max Burst + * endpoint context field. + */ +static inline u32 xhci_get_endpoint_mult(struct usb_device *udev, + struct usb_host_endpoint *ep) +{ + if (udev->speed != USB_SPEED_SUPER || !ep->ss_ep_comp) + return 0; + return ep->ss_ep_comp->desc.bmAttributes; +} + static inline u32 xhci_get_endpoint_type(struct usb_device *udev, struct usb_host_endpoint *ep) { @@ -526,6 +539,36 @@ return type; } +/* Return the maximum endpoint service interval time (ESIT) payload. + * Basically, this is the maxpacket size, multiplied by the burst size + * and mult size. + */ +static inline u32 xhci_get_max_esit_payload(struct xhci_hcd *xhci, + struct usb_device *udev, + struct usb_host_endpoint *ep) +{ + int max_burst; + int max_packet; + + /* Only applies for interrupt or isochronous endpoints */ + if (usb_endpoint_xfer_control(&ep->desc) || + usb_endpoint_xfer_bulk(&ep->desc)) + return 0; + + if (udev->speed == USB_SPEED_SUPER) { + if (ep->ss_ep_comp) + return ep->ss_ep_comp->desc.wBytesPerInterval; + xhci_warn(xhci, "WARN no SS endpoint companion descriptor.\n"); + /* Assume no bursts, no multiple opportunities to send. */ + return ep->desc.wMaxPacketSize; + } + + max_packet = ep->desc.wMaxPacketSize & 0x3ff; + max_burst = (ep->desc.wMaxPacketSize & 0x1800) >> 11; + /* A 0 in max burst means 1 transfer per ESIT */ + return max_packet * (max_burst + 1); +} + int xhci_endpoint_init(struct xhci_hcd *xhci, struct xhci_virt_device *virt_dev, struct usb_device *udev, @@ -537,6 +580,7 @@ struct xhci_ring *ep_ring; unsigned int max_packet; unsigned int max_burst; + u32 max_esit_payload; ep_index = xhci_get_endpoint_index(&ep->desc); ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index); @@ -550,6 +594,7 @@ ep_ctx->deq = ep_ring->first_seg->dma | ep_ring->cycle_state; ep_ctx->ep_info = xhci_get_endpoint_interval(udev, ep); + ep_ctx->ep_info |= EP_MULT(xhci_get_endpoint_mult(udev, ep)); /* FIXME dig Mult and streams info out of ep companion desc */ @@ -595,6 +640,26 @@ default: BUG(); } + max_esit_payload = xhci_get_max_esit_payload(xhci, udev, ep); + ep_ctx->tx_info = MAX_ESIT_PAYLOAD_FOR_EP(max_esit_payload); + + /* + * XXX no idea how to calculate the average TRB buffer length for bulk + * endpoints, as the driver gives us no clue how big each scatter gather + * list entry (or buffer) is going to be. + * + * For isochronous and interrupt endpoints, we set it to the max + * available, until we have new API in the USB core to allow drivers to + * declare how much bandwidth they actually need. + * + * Normally, it would be calculated by taking the total of the buffer + * lengths in the TD and then dividing by the number of TRBs in a TD, + * including link TRBs, No-op TRBs, and Event data TRBs. Since we don't + * use Event Data TRBs, and we don't chain in a link TRB on short + * transfers, we're basically dividing by 1. + */ + ep_ctx->tx_info |= AVG_TRB_LENGTH_FOR_EP(max_esit_payload); + /* FIXME Debug endpoint context */ return 0; } --- linux-2.6.32.orig/drivers/usb/host/ohci-hub.c +++ linux-2.6.32/drivers/usb/host/ohci-hub.c @@ -697,7 +697,7 @@ u16 wLength ) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); - int ports = hcd_to_bus (hcd)->root_hub->maxchild; + int ports = ohci->num_ports; u32 temp; int retval = 0; --- linux-2.6.32.orig/drivers/usb/host/ehci-sched.c +++ linux-2.6.32/drivers/usb/host/ehci-sched.c @@ -1121,8 +1121,8 @@ urb->interval); } - /* if dev->ep [epnum] is a QH, info1.maxpacket is nonzero */ - } else if (unlikely (stream->hw_info1 != 0)) { + /* if dev->ep [epnum] is a QH, hw is set */ + } else if (unlikely (stream->hw != NULL)) { ehci_dbg (ehci, "dev %s ep%d%s, not iso??\n", urb->dev->devpath, epnum, usb_pipein(urb->pipe) ? "in" : "out"); @@ -1553,13 +1553,27 @@ static inline void itd_link (struct ehci_hcd *ehci, unsigned frame, struct ehci_itd *itd) { - /* always prepend ITD/SITD ... only QH tree is order-sensitive */ - itd->itd_next = ehci->pshadow [frame]; - itd->hw_next = ehci->periodic [frame]; - ehci->pshadow [frame].itd = itd; + union ehci_shadow *prev = &ehci->pshadow[frame]; + __hc32 *hw_p = &ehci->periodic[frame]; + union ehci_shadow here = *prev; + __hc32 type = 0; + + /* skip any iso nodes which might belong to previous microframes */ + while (here.ptr) { + type = Q_NEXT_TYPE(ehci, *hw_p); + if (type == cpu_to_hc32(ehci, Q_TYPE_QH)) + break; + prev = periodic_next_shadow(ehci, prev, type); + hw_p = shadow_next_periodic(ehci, &here, type); + here = *prev; + } + + itd->itd_next = here; + itd->hw_next = *hw_p; + prev->itd = itd; itd->frame = frame; wmb (); - ehci->periodic[frame] = cpu_to_hc32(ehci, itd->itd_dma | Q_TYPE_ITD); + *hw_p = cpu_to_hc32(ehci, itd->itd_dma | Q_TYPE_ITD); } /* fit urb's itds into the selected schedule slot; activate as needed */ @@ -2113,13 +2127,27 @@ (stream->bEndpointAddress & USB_DIR_IN) ? "in" : "out"); } iso_stream_put (ehci, stream); - /* OK to recycle this SITD now that its completion callback ran. */ + done: sitd->urb = NULL; - sitd->stream = NULL; - list_move(&sitd->sitd_list, &stream->free_list); - iso_stream_put(ehci, stream); - + if (ehci->clock_frame != sitd->frame) { + /* OK to recycle this SITD now. */ + sitd->stream = NULL; + list_move(&sitd->sitd_list, &stream->free_list); + iso_stream_put(ehci, stream); + } else { + /* HW might remember this SITD, so we can't recycle it yet. + * Move it to a safe place until a new frame starts. + */ + list_move(&sitd->sitd_list, &ehci->cached_sitd_list); + if (stream->refcount == 2) { + /* If iso_stream_put() were called here, stream + * would be freed. Instead, just prevent reuse. + */ + stream->ep->hcpriv = NULL; + stream->ep = NULL; + } + } return retval; } @@ -2185,9 +2213,10 @@ /*-------------------------------------------------------------------------*/ -static void free_cached_itd_list(struct ehci_hcd *ehci) +static void free_cached_lists(struct ehci_hcd *ehci) { struct ehci_itd *itd, *n; + struct ehci_sitd *sitd, *sn; list_for_each_entry_safe(itd, n, &ehci->cached_itd_list, itd_list) { struct ehci_iso_stream *stream = itd->stream; @@ -2195,6 +2224,13 @@ list_move(&itd->itd_list, &stream->free_list); iso_stream_put(ehci, stream); } + + list_for_each_entry_safe(sitd, sn, &ehci->cached_sitd_list, sitd_list) { + struct ehci_iso_stream *stream = sitd->stream; + sitd->stream = NULL; + list_move(&sitd->sitd_list, &stream->free_list); + iso_stream_put(ehci, stream); + } } /*-------------------------------------------------------------------------*/ @@ -2221,7 +2257,7 @@ clock_frame = -1; } if (ehci->clock_frame != clock_frame) { - free_cached_itd_list(ehci); + free_cached_lists(ehci); ehci->clock_frame = clock_frame; } clock %= mod; @@ -2384,7 +2420,7 @@ clock = now; clock_frame = clock >> 3; if (ehci->clock_frame != clock_frame) { - free_cached_itd_list(ehci); + free_cached_lists(ehci); ehci->clock_frame = clock_frame; } } else { --- linux-2.6.32.orig/drivers/usb/host/uhci-hub.c +++ linux-2.6.32/drivers/usb/host/uhci-hub.c @@ -167,7 +167,7 @@ /* Port received a wakeup request */ set_bit(port, &uhci->resuming_ports); uhci->ports_timeout = jiffies + - msecs_to_jiffies(20); + msecs_to_jiffies(25); /* Make sure we see the port again * after the resuming period is over. */ --- linux-2.6.32.orig/drivers/usb/host/ohci-pnx4008.c +++ linux-2.6.32/drivers/usb/host/ohci-pnx4008.c @@ -327,7 +327,7 @@ } i2c_adap = i2c_get_adapter(2); memset(&i2c_info, 0, sizeof(struct i2c_board_info)); - strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); + strlcpy(i2c_info.type, "isp1301_pnx", I2C_NAME_SIZE); isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, normal_i2c); i2c_put_adapter(i2c_adap); @@ -411,7 +411,7 @@ out2: clk_put(usb_clk); out1: - i2c_unregister_client(isp1301_i2c_client); + i2c_unregister_device(isp1301_i2c_client); isp1301_i2c_client = NULL; out_i2c_driver: i2c_del_driver(&isp1301_driver); @@ -430,7 +430,7 @@ pnx4008_unset_usb_bits(); clk_disable(usb_clk); clk_put(usb_clk); - i2c_unregister_client(isp1301_i2c_client); + i2c_unregister_device(isp1301_i2c_client); isp1301_i2c_client = NULL; i2c_del_driver(&isp1301_driver); --- linux-2.6.32.orig/drivers/usb/host/r8a66597-hcd.c +++ linux-2.6.32/drivers/usb/host/r8a66597-hcd.c @@ -35,7 +35,9 @@ #include #include #include +#include #include +#include #include "../core/hcd.h" #include "r8a66597.h" @@ -216,8 +218,17 @@ { int port; + /* disable interrupts */ r8a66597_write(r8a66597, 0, INTENB0); - r8a66597_write(r8a66597, 0, INTSTS0); + r8a66597_write(r8a66597, 0, INTENB1); + r8a66597_write(r8a66597, 0, BRDYENB); + r8a66597_write(r8a66597, 0, BEMPENB); + r8a66597_write(r8a66597, 0, NRDYENB); + + /* clear status */ + r8a66597_write(r8a66597, 0, BRDYSTS); + r8a66597_write(r8a66597, 0, NRDYSTS); + r8a66597_write(r8a66597, 0, BEMPSTS); for (port = 0; port < r8a66597->max_root_hub; port++) r8a66597_disable_port(r8a66597, port); @@ -407,7 +418,7 @@ /* this function must be called with interrupt disabled */ static void free_usb_address(struct r8a66597 *r8a66597, - struct r8a66597_device *dev) + struct r8a66597_device *dev, int reset) { int port; @@ -419,7 +430,13 @@ dev->state = USB_STATE_DEFAULT; r8a66597->address_map &= ~(1 << dev->address); dev->address = 0; - dev_set_drvdata(&dev->udev->dev, NULL); + /* + * Only when resetting USB, it is necessary to erase drvdata. When + * a usb device with usb hub is disconnect, "dev->udev" is already + * freed on usb_desconnect(). So we cannot access the data. + */ + if (reset) + dev_set_drvdata(&dev->udev->dev, NULL); list_del(&dev->device_list); kfree(dev); @@ -811,6 +828,26 @@ enable_r8a66597_pipe_dma(r8a66597, dev, pipe, urb); } +static void r8a66597_urb_done(struct r8a66597 *r8a66597, struct urb *urb, + int status) +__releases(r8a66597->lock) +__acquires(r8a66597->lock) +{ + if (usb_pipein(urb->pipe) && usb_pipetype(urb->pipe) != PIPE_CONTROL) { + void *ptr; + + for (ptr = urb->transfer_buffer; + ptr < urb->transfer_buffer + urb->transfer_buffer_length; + ptr += PAGE_SIZE) + flush_dcache_page(virt_to_page(ptr)); + } + + usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), urb); + spin_unlock(&r8a66597->lock); + usb_hcd_giveback_urb(r8a66597_to_hcd(r8a66597), urb, status); + spin_lock(&r8a66597->lock); +} + /* this function must be called with interrupt disabled */ static void force_dequeue(struct r8a66597 *r8a66597, u16 pipenum, u16 address) { @@ -831,15 +868,9 @@ list_del(&td->queue); kfree(td); - if (urb) { - usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), - urb); - - spin_unlock(&r8a66597->lock); - usb_hcd_giveback_urb(r8a66597_to_hcd(r8a66597), urb, - -ENODEV); - spin_lock(&r8a66597->lock); - } + if (urb) + r8a66597_urb_done(r8a66597, urb, -ENODEV); + break; } } @@ -1042,7 +1073,7 @@ struct r8a66597_device *dev = r8a66597->root_hub[port].dev; disable_r8a66597_pipe_all(r8a66597, dev); - free_usb_address(r8a66597, dev); + free_usb_address(r8a66597, dev, 0); start_root_hub_sampling(r8a66597, port, 0); } @@ -1276,10 +1307,7 @@ if (usb_pipeisoc(urb->pipe)) urb->start_frame = r8a66597_get_frame(hcd); - usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), urb); - spin_unlock(&r8a66597->lock); - usb_hcd_giveback_urb(hcd, urb, status); - spin_lock(&r8a66597->lock); + r8a66597_urb_done(r8a66597, urb, status); } if (restart) { @@ -2063,7 +2091,7 @@ spin_lock_irqsave(&r8a66597->lock, flags); dev = get_r8a66597_device(r8a66597, addr); disable_r8a66597_pipe_all(r8a66597, dev); - free_usb_address(r8a66597, dev); + free_usb_address(r8a66597, dev, 0); put_child_connect_map(r8a66597, addr); spin_unlock_irqrestore(&r8a66597->lock, flags); } @@ -2206,7 +2234,7 @@ rh->port |= (1 << USB_PORT_FEAT_RESET); disable_r8a66597_pipe_all(r8a66597, dev); - free_usb_address(r8a66597, dev); + free_usb_address(r8a66597, dev, 1); r8a66597_mdfy(r8a66597, USBRST, USBRST | UACT, get_dvstctr_reg(port)); @@ -2470,6 +2498,12 @@ r8a66597->rh_timer.data = (unsigned long)r8a66597; r8a66597->reg = (unsigned long)reg; + /* make sure no interrupts are pending */ + ret = r8a66597_clock_enable(r8a66597); + if (ret < 0) + goto clean_up3; + disable_controller(r8a66597); + for (i = 0; i < R8A66597_MAX_NUM_PIPE; i++) { INIT_LIST_HEAD(&r8a66597->pipe_queue[i]); init_timer(&r8a66597->td_timer[i]); --- linux-2.6.32.orig/drivers/usb/host/ehci-q.c +++ linux-2.6.32/drivers/usb/host/ehci-q.c @@ -827,9 +827,10 @@ * But interval 1 scheduling is simpler, and * includes high bandwidth. */ - dbg ("intr period %d uframes, NYET!", - urb->interval); - goto done; + urb->interval = 1; + } else if (qh->period > ehci->periodic_size) { + qh->period = ehci->periodic_size; + urb->interval = qh->period << 3; } } else { int think_time; @@ -852,6 +853,10 @@ usb_calc_bus_time (urb->dev->speed, is_input, 0, max_packet (maxp))); qh->period = urb->interval; + if (qh->period > ehci->periodic_size) { + qh->period = ehci->periodic_size; + urb->interval = qh->period; + } } } --- linux-2.6.32.orig/drivers/usb/host/xhci.h +++ linux-2.6.32/drivers/usb/host/xhci.h @@ -609,6 +609,10 @@ #define MAX_PACKET_MASK (0xffff << 16) #define MAX_PACKET_DECODED(p) (((p) >> 16) & 0xffff) +/* tx_info bitmasks */ +#define AVG_TRB_LENGTH_FOR_EP(p) ((p) & 0xffff) +#define MAX_ESIT_PAYLOAD_FOR_EP(p) (((p) & 0xffff) << 16) + /** * struct xhci_input_control_context --- linux-2.6.32.orig/drivers/usb/host/ehci-hub.c +++ linux-2.6.32/drivers/usb/host/ehci-hub.c @@ -120,9 +120,26 @@ del_timer_sync(&ehci->watchdog); del_timer_sync(&ehci->iaa_watchdog); - port = HCS_N_PORTS (ehci->hcs_params); spin_lock_irq (&ehci->lock); + /* Once the controller is stopped, port resumes that are already + * in progress won't complete. Hence if remote wakeup is enabled + * for the root hub and any ports are in the middle of a resume or + * remote wakeup, we must fail the suspend. + */ + if (hcd->self.root_hub->do_remote_wakeup) { + port = HCS_N_PORTS(ehci->hcs_params); + while (port--) { + if (ehci->reset_done[port] != 0) { + spin_unlock_irq(&ehci->lock); + ehci_dbg(ehci, "suspend failed because " + "port %d is resuming\n", + port + 1); + return -EBUSY; + } + } + } + /* stop schedules, clean any completed work */ if (HC_IS_RUNNING(hcd->state)) { ehci_quiesce (ehci); @@ -138,6 +155,7 @@ */ ehci->bus_suspended = 0; ehci->owned_ports = 0; + port = HCS_N_PORTS(ehci->hcs_params); while (port--) { u32 __iomem *reg = &ehci->regs->port_status [port]; u32 t1 = ehci_readl(ehci, reg) & ~PORT_RWC_BITS; --- linux-2.6.32.orig/drivers/usb/host/ehci.h +++ linux-2.6.32/drivers/usb/host/ehci.h @@ -87,8 +87,9 @@ int next_uframe; /* scan periodic, start here */ unsigned periodic_sched; /* periodic activity count */ - /* list of itds completed while clock_frame was still active */ + /* list of itds & sitds completed while clock_frame was still active */ struct list_head cached_itd_list; + struct list_head cached_sitd_list; unsigned clock_frame; /* per root hub port */ @@ -195,7 +196,7 @@ clear_bit (action, &ehci->actions); } -static void free_cached_itd_list(struct ehci_hcd *ehci); +static void free_cached_lists(struct ehci_hcd *ehci); /*-------------------------------------------------------------------------*/ @@ -394,9 +395,8 @@ * acts like a qh would, if EHCI had them for ISO. */ struct ehci_iso_stream { - /* first two fields match QH, but info1 == 0 */ - __hc32 hw_next; - __hc32 hw_info1; + /* first field matches ehci_hq, but is NULL */ + struct ehci_qh_hw *hw; u32 refcount; u8 bEndpointAddress; --- linux-2.6.32.orig/drivers/usb/host/xhci-ext-caps.h +++ linux-2.6.32/drivers/usb/host/xhci-ext-caps.h @@ -101,12 +101,15 @@ next = readl(base + ext_offset); - if (ext_offset == XHCI_HCC_PARAMS_OFFSET) + if (ext_offset == XHCI_HCC_PARAMS_OFFSET) { /* Find the first extended capability */ next = XHCI_HCC_EXT_CAPS(next); - else + ext_offset = 0; + } else { /* Find the next extended capability */ next = XHCI_EXT_CAPS_NEXT(next); + } + if (!next) return 0; /* --- linux-2.6.32.orig/drivers/usb/host/ehci-hcd.c +++ linux-2.6.32/drivers/usb/host/ehci-hcd.c @@ -543,6 +543,7 @@ */ ehci->periodic_size = DEFAULT_I_TDPS; INIT_LIST_HEAD(&ehci->cached_itd_list); + INIT_LIST_HEAD(&ehci->cached_sitd_list); if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0) return retval; @@ -785,9 +786,10 @@ /* start 20 msec resume signaling from this port, * and make khubd collect PORT_STAT_C_SUSPEND to - * stop that signaling. + * stop that signaling. Use 5 ms extra for safety, + * like usb_port_resume() does. */ - ehci->reset_done [i] = jiffies + msecs_to_jiffies (20); + ehci->reset_done[i] = jiffies + msecs_to_jiffies(25); ehci_dbg (ehci, "port %d remote wakeup\n", i + 1); mod_timer(&hcd->rh_timer, ehci->reset_done[i]); } @@ -992,7 +994,7 @@ /* endpoints can be iso streams. for now, we don't * accelerate iso completions ... so spin a while. */ - if (qh->hw->hw_info1 == 0) { + if (qh->hw == NULL) { ehci_vdbg (ehci, "iso delay\n"); goto idle_timeout; } --- linux-2.6.32.orig/drivers/usb/host/ehci-mem.c +++ linux-2.6.32/drivers/usb/host/ehci-mem.c @@ -136,7 +136,7 @@ static void ehci_mem_cleanup (struct ehci_hcd *ehci) { - free_cached_itd_list(ehci); + free_cached_lists(ehci); if (ehci->async) qh_put (ehci->async); ehci->async = NULL; --- linux-2.6.32.orig/drivers/usb/serial/option.c +++ linux-2.6.32/drivers/usb/serial/option.c @@ -225,6 +225,7 @@ #define AMOI_VENDOR_ID 0x1614 #define AMOI_PRODUCT_H01 0x0800 #define AMOI_PRODUCT_H01A 0x7002 +#define AMOI_PRODUCT_9508 0x0800 #define AMOI_PRODUCT_H02 0x0802 #define DELL_VENDOR_ID 0x413C @@ -283,12 +284,11 @@ #define BANDRICH_PRODUCT_1011 0x1011 #define BANDRICH_PRODUCT_1012 0x1012 -#define AMOI_VENDOR_ID 0x1614 -#define AMOI_PRODUCT_9508 0x0800 - #define QUALCOMM_VENDOR_ID 0x05C6 -#define MAXON_VENDOR_ID 0x16d8 +#define CMOTECH_VENDOR_ID 0x16d8 +#define CMOTECH_PRODUCT_6008 0x6008 +#define CMOTECH_PRODUCT_6280 0x6280 #define TELIT_VENDOR_ID 0x1bc7 #define TELIT_PRODUCT_UC864E 0x1003 @@ -340,6 +340,10 @@ #define FOUR_G_SYSTEMS_VENDOR_ID 0x1c9e #define FOUR_G_SYSTEMS_PRODUCT_W14 0x9603 +/* Haier products */ +#define HAIER_VENDOR_ID 0x201e +#define HAIER_PRODUCT_CE100 0x2009 + static struct usb_device_id option_ids[] = { { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, @@ -516,7 +520,8 @@ { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ - { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ @@ -580,12 +585,48 @@ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0106, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0108, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0113, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0117, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0118, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0121, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0122, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0123, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0124, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0125, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0126, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0128, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0142, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0143, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0144, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0145, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0146, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0147, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0148, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0149, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0150, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0151, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0152, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0154, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0158, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0159, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0160, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0162, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, /* ZTE CDMA products */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0027, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0060, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0130, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0141, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) }, @@ -599,11 +640,13 @@ { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) }, { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */ { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) }, + { USB_DEVICE(ALINK_VENDOR_ID, 0xce16) }, { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) }, { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) }, { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) }, { USB_DEVICE(FOUR_G_SYSTEMS_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14) }, + { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, option_ids); --- linux-2.6.32.orig/drivers/usb/serial/sierra.c +++ linux-2.6.32/drivers/usb/serial/sierra.c @@ -195,6 +195,7 @@ static struct usb_device_id id_table [] = { { USB_DEVICE(0x0F3D, 0x0112) }, /* Airprime/Sierra PC 5220 */ { USB_DEVICE(0x03F0, 0x1B1D) }, /* HP ev2200 a.k.a MC5720 */ + { USB_DEVICE(0x03F0, 0x211D) }, /* HP ev2210 a.k.a MC5725 */ { USB_DEVICE(0x03F0, 0x1E1D) }, /* HP hs2300 a.k.a MC8775 */ { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ @@ -567,14 +568,17 @@ } else { if (urb->actual_length) { tty = tty_port_tty_get(&port->port); - - tty_buffer_request_room(tty, urb->actual_length); - tty_insert_flip_string(tty, data, urb->actual_length); - tty_flip_buffer_push(tty); - - tty_kref_put(tty); - usb_serial_debug_data(debug, &port->dev, __func__, - urb->actual_length, data); + if (tty) { + tty_buffer_request_room(tty, + urb->actual_length); + tty_insert_flip_string(tty, data, + urb->actual_length); + tty_flip_buffer_push(tty); + + tty_kref_put(tty); + usb_serial_debug_data(debug, &port->dev, + __func__, urb->actual_length, data); + } } else { dev_dbg(&port->dev, "%s: empty read urb" " received\n", __func__); --- linux-2.6.32.orig/drivers/usb/serial/ftdi_sio.c +++ linux-2.6.32/drivers/usb/serial/ftdi_sio.c @@ -44,12 +44,13 @@ #include #include #include "ftdi_sio.h" +#include "ftdi_sio_ids.h" /* * Version Information */ #define DRIVER_VERSION "v1.5.0" -#define DRIVER_AUTHOR "Greg Kroah-Hartman , Bill Ryder , Kuba Ober " +#define DRIVER_AUTHOR "Greg Kroah-Hartman , Bill Ryder , Kuba Ober , Andreas Mohr" #define DRIVER_DESC "USB FTDI Serial Converters Driver" static int debug; @@ -144,10 +145,15 @@ +/* + * Device ID not listed? Test via module params product/vendor or + * /sys/bus/usb/ftdi_sio/new_id, then send patch/report! + */ static struct usb_device_id id_table_combined [] = { { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, @@ -551,9 +557,16 @@ { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) }, { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) }, /* - * Due to many user requests for multiple ELV devices we enable - * them by default. + * ELV devices: */ + { USB_DEVICE(FTDI_VID, FTDI_ELV_USR_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_MSM1_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_KL100_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_WS550_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_EC3000_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_WS888_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_TWS550_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_FEM_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, @@ -570,11 +583,17 @@ { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_UTP8_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_WS444PC_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ELV_HS485_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_UMS100_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_TFD128_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_FM3RX_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ELV_WS777_PID) }, { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) }, { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) }, { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) }, @@ -595,9 +614,24 @@ { USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) }, { USB_DEVICE(TTI_VID, TTI_QL355P_PID) }, { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) }, + { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) }, { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) }, { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) }, { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_USOPTL4_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_USPTL4_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_2_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR2_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_485USB9F_2W_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_485USB9F_4W_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_232USB9M_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_485USBTB_2W_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_485USBTB_4W_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_TTL5USB9M_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_TTL3USB9M_PID) }, + { USB_DEVICE(BANDB_VID, BANDB_ZZ_PROG1_USB_PID) }, { USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) }, { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) }, { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) }, @@ -624,6 +658,7 @@ { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) }, { USB_DEVICE(EVOLUTION_VID, EVO_HYBRID_PID) }, { USB_DEVICE(EVOLUTION_VID, EVO_RCM4_PID) }, + { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ARTEMIS_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16_PID) }, { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16C_PID) }, @@ -682,6 +717,7 @@ { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, + { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) }, { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) }, @@ -703,6 +739,10 @@ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, { USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) }, { USB_DEVICE(FTDI_VID, HAMEG_HO870_PID) }, + { USB_DEVICE(FTDI_VID, MJSG_GENERIC_PID) }, + { USB_DEVICE(FTDI_VID, MJSG_SR_RADIO_PID) }, + { USB_DEVICE(FTDI_VID, MJSG_HD_RADIO_PID) }, + { USB_DEVICE(FTDI_VID, MJSG_XM_RADIO_PID) }, { }, /* Optional parameter entry */ { } /* Terminating entry */ }; --- linux-2.6.32.orig/drivers/usb/serial/qcserial.c +++ linux-2.6.32/drivers/usb/serial/qcserial.c @@ -47,6 +47,35 @@ {USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */ {USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */ {USB_DEVICE(0x1f45, 0x0001)}, /* Unknown Gobi QDL device */ + {USB_DEVICE(0x413c, 0x8185)}, /* Dell Gobi 2000 QDL device (N0218, VU936) */ + {USB_DEVICE(0x413c, 0x8186)}, /* Dell Gobi 2000 Modem device (N0218, VU936) */ + {USB_DEVICE(0x05c6, 0x9224)}, /* Sony Gobi 2000 QDL device (N0279, VU730) */ + {USB_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modem device (N0279, VU730) */ + {USB_DEVICE(0x05c6, 0x9244)}, /* Samsung Gobi 2000 QDL device (VL176) */ + {USB_DEVICE(0x05c6, 0x9245)}, /* Samsung Gobi 2000 Modem device (VL176) */ + {USB_DEVICE(0x03f0, 0x241d)}, /* HP Gobi 2000 QDL device (VP412) */ + {USB_DEVICE(0x03f0, 0x251d)}, /* HP Gobi 2000 Modem device (VP412) */ + {USB_DEVICE(0x05c6, 0x9214)}, /* Acer Gobi 2000 QDL device (VP413) */ + {USB_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */ + {USB_DEVICE(0x05c6, 0x9264)}, /* Asus Gobi 2000 QDL device (VR305) */ + {USB_DEVICE(0x05c6, 0x9265)}, /* Asus Gobi 2000 Modem device (VR305) */ + {USB_DEVICE(0x05c6, 0x9234)}, /* Top Global Gobi 2000 QDL device (VR306) */ + {USB_DEVICE(0x05c6, 0x9235)}, /* Top Global Gobi 2000 Modem device (VR306) */ + {USB_DEVICE(0x05c6, 0x9274)}, /* iRex Technologies Gobi 2000 QDL device (VR307) */ + {USB_DEVICE(0x05c6, 0x9275)}, /* iRex Technologies Gobi 2000 Modem device (VR307) */ + {USB_DEVICE(0x1199, 0x9000)}, /* Sierra Wireless Gobi 2000 QDL device (VT773) */ + {USB_DEVICE(0x1199, 0x9001)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9002)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9003)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9004)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9005)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9006)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9007)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9008)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x9009)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x1199, 0x900a)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ + {USB_DEVICE(0x16d8, 0x8001)}, /* CMDTech Gobi 2000 QDL device (VU922) */ + {USB_DEVICE(0x16d8, 0x8002)}, /* CMDTech Gobi 2000 Modem device (VU922) */ { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, id_table); --- linux-2.6.32.orig/drivers/usb/serial/generic.c +++ linux-2.6.32/drivers/usb/serial/generic.c @@ -489,6 +489,8 @@ dbg("%s - port %d", __func__, port->number); if (port->serial->type->max_in_flight_urbs) { + kfree(urb->transfer_buffer); + spin_lock_irqsave(&port->lock, flags); --port->urbs_in_flight; port->tx_bytes_flight -= urb->transfer_buffer_length; --- linux-2.6.32.orig/drivers/usb/serial/mos7840.c +++ linux-2.6.32/drivers/usb/serial/mos7840.c @@ -121,8 +121,14 @@ * moschip_id_table_combined */ #define USB_VENDOR_ID_BANDB 0x0856 -#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 +#define BANDB_DEVICE_ID_USO9ML2_2 0xAC22 +#define BANDB_DEVICE_ID_USO9ML2_4 0xAC24 +#define BANDB_DEVICE_ID_US9ML2_2 0xAC29 +#define BANDB_DEVICE_ID_US9ML2_4 0xAC30 +#define BANDB_DEVICE_ID_USPTL4_2 0xAC31 +#define BANDB_DEVICE_ID_USPTL4_4 0xAC32 #define BANDB_DEVICE_ID_USOPTL4_2 0xAC42 +#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 /* This driver also supports * ATEN UC2324 device using Moschip MCS7840 @@ -177,8 +183,14 @@ static struct usb_device_id moschip_port_id_table[] = { {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, - {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)}, {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, {} /* terminating entry */ @@ -187,8 +199,14 @@ static __devinitdata struct usb_device_id moschip_id_table_combined[] = { {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, - {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)}, {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, + {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, {} /* terminating entry */ --- linux-2.6.32.orig/drivers/usb/serial/ftdi_sio_ids.h +++ linux-2.6.32/drivers/usb/serial/ftdi_sio_ids.h @@ -0,0 +1,1026 @@ +/* + * vendor/product IDs (VID/PID) of devices using FTDI USB serial converters. + * Please keep numerically sorted within individual areas, thanks! + * + * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais + * from Rudolf Gugler + * + */ + + +/**********************************/ +/***** devices using FTDI VID *****/ +/**********************************/ + + +#define FTDI_VID 0x0403 /* Vendor Id */ + + +/*** "original" FTDI device PIDs ***/ + +#define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */ +#define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */ +#define FTDI_8U2232C_PID 0x6010 /* Dual channel device */ +#define FTDI_4232H_PID 0x6011 /* Quad channel hi-speed device */ +#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */ +#define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */ + + +/*** third-party PIDs (using FTDI_VID) ***/ + +/* + * Marvell OpenRD Base, Client + * http://www.open-rd.org + * OpenRD Base, Client use VID 0x0403 + */ +#define MARVELL_OPENRD_PID 0x9e90 + +/* www.candapter.com Ewert Energy Systems CANdapter device */ +#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ + +#define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */ + +/* OOCDlink by Joern Kaipf + * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */ +#define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ + +/* Luminary Micro Stellaris Boards, VID = FTDI_VID */ +/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */ +#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8 +#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9 + +#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */ + +/* OpenDCC (www.opendcc.de) product id */ +#define FTDI_OPENDCC_PID 0xBFD8 +#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9 +#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA +#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB + +/* + * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com) + */ +#define FTDI_RRCIRKITS_LOCOBUFFER_PID 0xc7d0 /* LocoBuffer USB */ + +/* DMX4ALL DMX Interfaces */ +#define FTDI_DMX4ALL 0xC850 + +/* + * ASK.fr devices + */ +#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */ + +/* www.starting-point-systems.com µChameleon device */ +#define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */ + +/* + * Tactrix OpenPort (ECU) devices. + * OpenPort 1.3M submitted by Donour Sizemore. + * OpenPort 1.3S and 1.3U submitted by Ian Abbott. + */ +#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */ +#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */ +#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */ + +/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ +/* the VID is the standard ftdi vid (FTDI_VID) */ +#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ +#define FTDI_SCS_DEVICE_1_PID 0xD011 /* SCS Tracker / DSP TNC */ +#define FTDI_SCS_DEVICE_2_PID 0xD012 +#define FTDI_SCS_DEVICE_3_PID 0xD013 +#define FTDI_SCS_DEVICE_4_PID 0xD014 +#define FTDI_SCS_DEVICE_5_PID 0xD015 +#define FTDI_SCS_DEVICE_6_PID 0xD016 +#define FTDI_SCS_DEVICE_7_PID 0xD017 + +/* iPlus device */ +#define FTDI_IPLUS_PID 0xD070 /* Product Id */ +#define FTDI_IPLUS2_PID 0xD071 /* Product Id */ + +/* + * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com. + */ +#define FTDI_GAMMA_SCOUT_PID 0xD678 /* Gamma Scout online */ + +/* Propox devices */ +#define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 + +/* + * Xsens Technologies BV products (http://www.xsens.com). + */ +#define XSENS_CONVERTER_0_PID 0xD388 +#define XSENS_CONVERTER_1_PID 0xD389 +#define XSENS_CONVERTER_2_PID 0xD38A +#define XSENS_CONVERTER_3_PID 0xD38B +#define XSENS_CONVERTER_4_PID 0xD38C +#define XSENS_CONVERTER_5_PID 0xD38D +#define XSENS_CONVERTER_6_PID 0xD38E +#define XSENS_CONVERTER_7_PID 0xD38F + +/* + * NDI (www.ndigital.com) product ids + */ +#define FTDI_NDI_HUC_PID 0xDA70 /* NDI Host USB Converter */ +#define FTDI_NDI_SPECTRA_SCU_PID 0xDA71 /* NDI Spectra SCU */ +#define FTDI_NDI_FUTURE_2_PID 0xDA72 /* NDI future device #2 */ +#define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */ +#define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */ + +/* + * Westrex International devices submitted by Cory Lee + */ +#define FTDI_WESTREX_MODEL_777_PID 0xDC00 /* Model 777 */ +#define FTDI_WESTREX_MODEL_8900F_PID 0xDC01 /* Model 8900F */ + +/* + * ACG Identification Technologies GmbH products (http://www.acg.de/). + * Submitted by anton -at- goto10 -dot- org. + */ +#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */ + +/* + * Definitions for Artemis astronomical USB based cameras + * Check it at http://www.artemisccd.co.uk/ + */ +#define FTDI_ARTEMIS_PID 0xDF28 /* All Artemis Cameras */ + +/* + * Definitions for ATIK Instruments astronomical USB based cameras + * Check it at http://www.atik-instruments.com/ + */ +#define FTDI_ATIK_ATK16_PID 0xDF30 /* ATIK ATK-16 Grayscale Camera */ +#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */ +#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */ +#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */ +#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */ + +/* + * Yost Engineering, Inc. products (www.yostengineering.com). + * PID 0xE050 submitted by Aaron Prose. + */ +#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */ + +/* + * ELV USB devices submitted by Christian Abt of ELV (www.elv.de). + * All of these devices use FTDI's vendor ID (0x0403). + * Further IDs taken from ELV Windows .inf file. + * + * The previously included PID for the UO 100 module was incorrect. + * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58). + * + * Armin Laeuger originally sent the PID for the UM 100 module. + */ +#define FTDI_ELV_USR_PID 0xE000 /* ELV Universal-Sound-Recorder */ +#define FTDI_ELV_MSM1_PID 0xE001 /* ELV Mini-Sound-Modul */ +#define FTDI_ELV_KL100_PID 0xE002 /* ELV Kfz-Leistungsmesser KL 100 */ +#define FTDI_ELV_WS550_PID 0xE004 /* WS 550 */ +#define FTDI_ELV_EC3000_PID 0xE006 /* ENERGY CONTROL 3000 USB */ +#define FTDI_ELV_WS888_PID 0xE008 /* WS 888 */ +#define FTDI_ELV_TWS550_PID 0xE009 /* Technoline WS 550 */ +#define FTDI_ELV_FEM_PID 0xE00A /* Funk Energie Monitor */ +#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */ +#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */ +#define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */ +#define FTDI_ELV_UMS100_PID 0xE0EB /* ELV USB Master-Slave Schaltsteckdose UMS 100 */ +#define FTDI_ELV_TFD128_PID 0xE0EC /* ELV Temperatur-Feuchte-Datenlogger TFD 128 */ +#define FTDI_ELV_FM3RX_PID 0xE0ED /* ELV Messwertuebertragung FM3 RX */ +#define FTDI_ELV_WS777_PID 0xE0EE /* Conrad WS 777 */ +#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */ +#define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */ +#define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */ +#define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */ +#define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */ +#define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */ +#define FTDI_ELV_UTP8_PID 0xE0F5 /* ELV UTP 8 */ +#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */ +#define FTDI_ELV_WS444PC_PID 0xE0F7 /* Conrad WS 444 PC */ +#define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */ +#define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */ +#define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */ +#define FTDI_ELV_USI2_PID 0xF06A /* USB-Schrittmotoren-Interface (USI 2) */ +#define FTDI_ELV_T1100_PID 0xF06B /* Thermometer (T 1100) */ +#define FTDI_ELV_PCD200_PID 0xF06C /* PC-Datenlogger (PCD 200) */ +#define FTDI_ELV_ULA200_PID 0xF06D /* USB-LCD-Ansteuerung (ULA 200) */ +#define FTDI_ELV_ALC8500_PID 0xF06E /* ALC 8500 Expert */ +#define FTDI_ELV_FHZ1000PC_PID 0xF06F /* FHZ 1000 PC */ +#define FTDI_ELV_UR100_PID 0xFB58 /* USB-RS232-Umsetzer (UR 100) */ +#define FTDI_ELV_UM100_PID 0xFB5A /* USB-Modul UM 100 */ +#define FTDI_ELV_UO100_PID 0xFB5B /* USB-Modul UO 100 */ +/* Additional ELV PIDs that default to using the FTDI D2XX drivers on + * MS Windows, rather than the FTDI Virtual Com Port drivers. + * Maybe these will be easier to use with the libftdi/libusb user-space + * drivers, or possibly the Comedi drivers in some cases. */ +#define FTDI_ELV_CLI7000_PID 0xFB59 /* Computer-Light-Interface (CLI 7000) */ +#define FTDI_ELV_PPS7330_PID 0xFB5C /* Processor-Power-Supply (PPS 7330) */ +#define FTDI_ELV_TFM100_PID 0xFB5D /* Temperartur-Feuchte Messgeraet (TFM 100) */ +#define FTDI_ELV_UDF77_PID 0xFB5E /* USB DCF Funkurh (UDF 77) */ +#define FTDI_ELV_UIO88_PID 0xFB5F /* USB-I/O Interface (UIO 88) */ + +/* + * EVER Eco Pro UPS (http://www.ever.com.pl/) + */ + +#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */ + +/* + * Active Robots product ids. + */ +#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */ + +/* Pyramid Computer GmbH */ +#define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */ + +/* www.elsterelectricity.com Elster Unicom III Optical Probe */ +#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */ + +/* + * Gude Analog- und Digitalsysteme GmbH + */ +#define FTDI_GUDEADS_E808_PID 0xE808 +#define FTDI_GUDEADS_E809_PID 0xE809 +#define FTDI_GUDEADS_E80A_PID 0xE80A +#define FTDI_GUDEADS_E80B_PID 0xE80B +#define FTDI_GUDEADS_E80C_PID 0xE80C +#define FTDI_GUDEADS_E80D_PID 0xE80D +#define FTDI_GUDEADS_E80E_PID 0xE80E +#define FTDI_GUDEADS_E80F_PID 0xE80F +#define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */ +#define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */ +#define FTDI_GUDEADS_E88A_PID 0xE88A +#define FTDI_GUDEADS_E88B_PID 0xE88B +#define FTDI_GUDEADS_E88C_PID 0xE88C +#define FTDI_GUDEADS_E88D_PID 0xE88D +#define FTDI_GUDEADS_E88E_PID 0xE88E +#define FTDI_GUDEADS_E88F_PID 0xE88F + +/* + * Eclo (http://www.eclo.pt/) product IDs. + * PID 0xEA90 submitted by Martin Grill. + */ +#define FTDI_ECLO_COM_1WIRE_PID 0xEA90 /* COM to 1-Wire USB adaptor */ + +/* TNC-X USB-to-packet-radio adapter, versions prior to 3.0 (DLP module) */ +#define FTDI_TNC_X_PID 0xEBE0 + +/* + * Teratronik product ids. + * Submitted by O. Wölfelschneider. + */ +#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */ +#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */ + +/* Rig Expert Ukraine devices */ +#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ + +/* + * Hameg HO820 and HO870 interface (using VID 0x0403) + */ +#define HAMEG_HO820_PID 0xed74 +#define HAMEG_HO870_PID 0xed71 + +/* + * MaxStream devices www.maxstream.net + */ +#define FTDI_MAXSTREAM_PID 0xEE18 /* Xbee PKG-U Module */ + +/* + * microHAM product IDs (http://www.microham.com). + * Submitted by Justin Burket (KL1RL) + * and Mike Studer (K6EEP) . + * Ian Abbott added a few more from the driver INF file. + */ +#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */ +#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */ +#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */ +#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */ +#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */ +#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */ +#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */ +#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */ + +/* Domintell products http://www.domintell.com */ +#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */ +#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */ + +/* + * The following are the values for the Perle Systems + * UltraPort USB serial converters + */ +#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */ + +/* Sprog II (Andrew Crosland's SprogII DCC interface) */ +#define FTDI_SPROG_II 0xF0C8 + +/* an infrared receiver for user access control with IR tags */ +#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */ + +/* ACT Solutions HomePro ZWave interface + (http://www.act-solutions.com/HomePro.htm) */ +#define FTDI_ACTZWAVE_PID 0xF2D0 + +/* + * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485, + * USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices + * and I'm not entirely sure which are used by which. + */ +#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0 +#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1 + +/* + * Linx Technologies product ids + */ +#define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */ +#define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */ +#define LINX_FUTURE_0_PID 0xF44A /* Linx future device */ +#define LINX_FUTURE_1_PID 0xF44B /* Linx future device */ +#define LINX_FUTURE_2_PID 0xF44C /* Linx future device */ + +/* + * Oceanic product ids + */ +#define FTDI_OCEANIC_PID 0xF460 /* Oceanic dive instrument */ + +/* + * SUUNTO product ids + */ +#define FTDI_SUUNTO_SPORTS_PID 0xF680 /* Suunto Sports instrument */ + +/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */ +/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */ +#define FTDI_USB_UIRT_PID 0xF850 /* Product Id */ + +/* CCS Inc. ICDU/ICDU40 product ID - + * the FT232BM is used in an in-circuit-debugger unit for PIC16's/PIC18's */ +#define FTDI_CCSICDU20_0_PID 0xF9D0 +#define FTDI_CCSICDU40_1_PID 0xF9D1 +#define FTDI_CCSMACHX_2_PID 0xF9D2 +#define FTDI_CCSLOAD_N_GO_3_PID 0xF9D3 +#define FTDI_CCSICDU64_4_PID 0xF9D4 +#define FTDI_CCSPRIME8_5_PID 0xF9D5 + +/* + * The following are the values for the Matrix Orbital LCD displays, + * which are the FT232BM ( similar to the 8U232AM ) + */ +#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */ +#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */ +#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */ +#define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */ +#define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */ +#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */ +#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */ + +/* + * Home Electronics (www.home-electro.com) USB gadgets + */ +#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */ + +/* Inside Accesso contactless reader (http://www.insidefr.com) */ +#define INSIDE_ACCESSO 0xFAD0 + +/* + * ThorLabs USB motor drivers + */ +#define FTDI_THORLABS_PID 0xfaf0 /* ThorLabs USB motor drivers */ + +/* + * Protego product ids + */ +#define PROTEGO_SPECIAL_1 0xFC70 /* special/unknown device */ +#define PROTEGO_R2X0 0xFC71 /* R200-USB TRNG unit (R210, R220, and R230) */ +#define PROTEGO_SPECIAL_3 0xFC72 /* special/unknown device */ +#define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */ + +/* + * DSS-20 Sync Station for Sony Ericsson P800 + */ +#define FTDI_DSS20_PID 0xFC82 + +/* www.irtrans.de device */ +#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */ + +/* + * RM Michaelides CANview USB (http://www.rmcan.com) (FTDI_VID) + * CAN fieldbus interface adapter, added by port GmbH www.port.de) + * Ian Abbott changed the macro names for consistency. + */ +#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */ +/* www.thoughttechnology.com/ TT-USB provide with procomp use ftdi_sio */ +#define FTDI_TTUSB_PID 0xFF20 /* Product Id */ + +#define FTDI_USBX_707_PID 0xF857 /* ADSTech IR Blaster USBX-707 (FTDI_VID) */ + +#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */ + +/* + * PCDJ use ftdi based dj-controllers. The following PID is + * for their DAC-2 device http://www.pcdjhardware.com/DAC2.asp + * (the VID is the standard ftdi vid (FTDI_VID), PID sent by Wouter Paesen) + */ +#define FTDI_PCDJ_DAC2_PID 0xFA88 + +#define FTDI_R2000KU_TRUE_RNG 0xFB80 /* R2000KU TRUE RNG (FTDI_VID) */ + +/* + * DIEBOLD BCS SE923 (FTDI_VID) + */ +#define DIEBOLD_BCS_SE923_PID 0xfb99 + +/* www.crystalfontz.com devices + * - thanx for providing free devices for evaluation ! + * they use the ftdi chipset for the USB interface + * and the vendor id is the same + */ +#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ +#define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */ +#define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */ +#define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */ +#define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */ +#define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */ +#define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */ +#define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */ + +/* + * Video Networks Limited / Homechoice in the UK use an ftdi-based device + * for their 1Mb broadband internet service. The following PID is exhibited + * by the usb device supplied (the VID is the standard ftdi vid (FTDI_VID) + */ +#define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */ + +/* AlphaMicro Components AMC-232USB01 device (FTDI_VID) */ +#define FTDI_AMC232_PID 0xFF00 /* Product Id */ + +/* + * IBS elektronik product ids (FTDI_VID) + * Submitted by Thomas Schleusener + */ +#define FTDI_IBS_US485_PID 0xff38 /* IBS US485 (USB<-->RS422/485 interface) */ +#define FTDI_IBS_PICPRO_PID 0xff39 /* IBS PIC-Programmer */ +#define FTDI_IBS_PCMCIA_PID 0xff3a /* IBS Card reader for PCMCIA SRAM-cards */ +#define FTDI_IBS_PK1_PID 0xff3b /* IBS PK1 - Particel counter */ +#define FTDI_IBS_RS232MON_PID 0xff3c /* IBS RS232 - Monitor */ +#define FTDI_IBS_APP70_PID 0xff3d /* APP 70 (dust monitoring system) */ +#define FTDI_IBS_PEDO_PID 0xff3e /* IBS PEDO-Modem (RF modem 868.35 MHz) */ +#define FTDI_IBS_PROD_PID 0xff3f /* future device */ +/* www.canusb.com Lawicel CANUSB device (FTDI_VID) */ +#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */ + + + +/********************************/ +/** third-party VID/PID combos **/ +/********************************/ + + + +/* + * Atmel STK541 + */ +#define ATMEL_VID 0x03eb /* Vendor ID */ +#define STK541_PID 0x2109 /* Zigbee Controller */ + +/* + * Blackfin gnICE JTAG + * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice + */ +#define ADI_VID 0x0456 +#define ADI_GNICE_PID 0xF000 +#define ADI_GNICEPLUS_PID 0xF001 + +/* + * RATOC REX-USB60F + */ +#define RATOC_VENDOR_ID 0x0584 +#define RATOC_PRODUCT_ID_USB60F 0xb020 + +/* + * Contec products (http://www.contec.com) + * Submitted by Daniel Sangorrin + */ +#define CONTEC_VID 0x06CE /* Vendor ID */ +#define CONTEC_COM1USBH_PID 0x8311 /* COM-1(USB)H */ + +/* + * Contec products (http://www.contec.com) + * Submitted by Daniel Sangorrin + */ +#define CONTEC_VID 0x06CE /* Vendor ID */ +#define CONTEC_COM1USBH_PID 0x8311 /* COM-1(USB)H */ + +/* + * Definitions for B&B Electronics products. + */ +#define BANDB_VID 0x0856 /* B&B Electronics Vendor ID */ +#define BANDB_USOTL4_PID 0xAC01 /* USOTL4 Isolated RS-485 Converter */ +#define BANDB_USTL4_PID 0xAC02 /* USTL4 RS-485 Converter */ +#define BANDB_USO9ML2_PID 0xAC03 /* USO9ML2 Isolated RS-232 Converter */ +#define BANDB_USOPTL4_PID 0xAC11 +#define BANDB_USPTL4_PID 0xAC12 +#define BANDB_USO9ML2DR_2_PID 0xAC16 +#define BANDB_USO9ML2DR_PID 0xAC17 +#define BANDB_USOPTL4DR2_PID 0xAC18 /* USOPTL4R-2 2-port Isolated RS-232 Converter */ +#define BANDB_USOPTL4DR_PID 0xAC19 +#define BANDB_485USB9F_2W_PID 0xAC25 +#define BANDB_485USB9F_4W_PID 0xAC26 +#define BANDB_232USB9M_PID 0xAC27 +#define BANDB_485USBTB_2W_PID 0xAC33 +#define BANDB_485USBTB_4W_PID 0xAC34 +#define BANDB_TTL5USB9M_PID 0xAC49 +#define BANDB_TTL3USB9M_PID 0xAC50 +#define BANDB_ZZ_PROG1_USB_PID 0xBA02 + +/* + * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI + */ +#define INTREPID_VID 0x093C +#define INTREPID_VALUECAN_PID 0x0601 +#define INTREPID_NEOVI_PID 0x0701 + +/* + * Definitions for ID TECH (www.idt-net.com) devices + */ +#define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */ +#define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */ + +/* + * Definitions for Omnidirectional Control Technology, Inc. devices + */ +#define OCT_VID 0x0B39 /* OCT vendor ID */ +/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */ +/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */ +/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */ +#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */ + +/* + * Icom ID-1 digital transceiver + */ + +#define ICOM_ID1_VID 0x0C26 +#define ICOM_ID1_PID 0x0004 + +/* + * GN Otometrics (http://www.otometrics.com) + * Submitted by Ville Sundberg. + */ +#define GN_OTOMETRICS_VID 0x0c33 /* Vendor ID */ +#define AURICAL_USB_PID 0x0010 /* Aurical USB Audiometer */ + +/* + * The following are the values for the Sealevel SeaLINK+ adapters. + * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and + * removed some PIDs that don't seem to match any existing products.) + */ +#define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */ +#define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */ +#define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */ +#define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */ +#define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */ +#define SEALEVEL_2106_PID 0x9020 /* SeaLINK+422 (2106) */ +#define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */ +#define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */ +#define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */ +#define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */ +#define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */ +#define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */ +#define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */ +#define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */ +#define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */ +#define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */ +#define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */ +#define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */ +#define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */ +#define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */ +#define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */ +#define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */ +#define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */ +#define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */ +#define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */ +#define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */ +#define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */ +#define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */ +#define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */ +#define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */ +#define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */ +#define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */ +#define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */ +#define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */ +#define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */ +#define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */ +#define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */ +#define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */ +#define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */ +#define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */ +#define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */ +#define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */ +#define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */ +#define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */ +#define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */ +#define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */ +#define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */ +#define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */ + +/* + * JETI SPECTROMETER SPECBOS 1201 + * http://www.jeti.com/products/sys/scb/scb1201.php + */ +#define JETI_VID 0x0c6c +#define JETI_SPC1201_PID 0x04b2 + +/* + * FTDI USB UART chips used in construction projects from the + * Elektor Electronics magazine (http://elektor-electronics.co.uk) + */ +#define ELEKTOR_VID 0x0C7D +#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */ + +/* + * Posiflex inc retail equipment (http://www.posiflex.com.tw) + */ +#define POSIFLEX_VID 0x0d3a /* Vendor ID */ +#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */ + +/* + * The following are the values for two KOBIL chipcard terminals. + */ +#define KOBIL_VID 0x0d46 /* KOBIL Vendor ID */ +#define KOBIL_CONV_B1_PID 0x2020 /* KOBIL Konverter for B1 */ +#define KOBIL_CONV_KAAN_PID 0x2021 /* KOBIL_Konverter for KAAN */ + +#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */ +#define FTDI_NF_RIC_PID 0x0001 /* Product Id */ + +/* + * Falcom Wireless Communications GmbH + */ +#define FALCOM_VID 0x0F94 /* Vendor Id */ +#define FALCOM_TWIST_PID 0x0001 /* Falcom Twist USB GPRS modem */ +#define FALCOM_SAMBA_PID 0x0005 /* Falcom Samba USB GPRS modem */ + +/* Larsen and Brusgaard AltiTrack/USBtrack */ +#define LARSENBRUSGAARD_VID 0x0FD8 +#define LB_ALTITRACK_PID 0x0001 + +/* + * TTi (Thurlby Thandar Instruments) + */ +#define TTI_VID 0x103E /* Vendor Id */ +#define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */ + +/* Interbiometrics USB I/O Board */ +/* Developed for Interbiometrics by Rudolf Gugler */ +#define INTERBIOMETRICS_VID 0x1209 +#define INTERBIOMETRICS_IOBOARD_PID 0x1002 +#define INTERBIOMETRICS_MINI_IOBOARD_PID 0x1006 + +/* + * Testo products (http://www.testo.com/) + * Submitted by Colin Leroy + */ +#define TESTO_VID 0x128D +#define TESTO_USB_INTERFACE_PID 0x0001 + +/* + * Mobility Electronics products. + */ +#define MOBILITY_VID 0x1342 +#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */ + +/* + * FIC / OpenMoko, Inc. http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v3 + * Submitted by Harald Welte + */ +#define FIC_VID 0x1457 +#define FIC_NEO1973_DEBUG_PID 0x5118 + +/* Olimex */ +#define OLIMEX_VID 0x15BA +#define OLIMEX_ARM_USB_OCD_PID 0x0003 + +/* + * Telldus Technologies + */ +#define TELLDUS_VID 0x1781 /* Vendor ID */ +#define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */ + +/* + * Bayer Ascensia Contour blood glucose meter USB-converter cable. + * http://winglucofacts.com/cables/ + */ +#define BAYER_VID 0x1A79 +#define BAYER_CONTOUR_CABLE_PID 0x6001 + +/* + * The following are the values for the Matrix Orbital FTDI Range + * Anything in this range will use an FT232RL. + */ +#define MTXORB_VID 0x1B3D +#define MTXORB_FTDI_RANGE_0100_PID 0x0100 +#define MTXORB_FTDI_RANGE_0101_PID 0x0101 +#define MTXORB_FTDI_RANGE_0102_PID 0x0102 +#define MTXORB_FTDI_RANGE_0103_PID 0x0103 +#define MTXORB_FTDI_RANGE_0104_PID 0x0104 +#define MTXORB_FTDI_RANGE_0105_PID 0x0105 +#define MTXORB_FTDI_RANGE_0106_PID 0x0106 +#define MTXORB_FTDI_RANGE_0107_PID 0x0107 +#define MTXORB_FTDI_RANGE_0108_PID 0x0108 +#define MTXORB_FTDI_RANGE_0109_PID 0x0109 +#define MTXORB_FTDI_RANGE_010A_PID 0x010A +#define MTXORB_FTDI_RANGE_010B_PID 0x010B +#define MTXORB_FTDI_RANGE_010C_PID 0x010C +#define MTXORB_FTDI_RANGE_010D_PID 0x010D +#define MTXORB_FTDI_RANGE_010E_PID 0x010E +#define MTXORB_FTDI_RANGE_010F_PID 0x010F +#define MTXORB_FTDI_RANGE_0110_PID 0x0110 +#define MTXORB_FTDI_RANGE_0111_PID 0x0111 +#define MTXORB_FTDI_RANGE_0112_PID 0x0112 +#define MTXORB_FTDI_RANGE_0113_PID 0x0113 +#define MTXORB_FTDI_RANGE_0114_PID 0x0114 +#define MTXORB_FTDI_RANGE_0115_PID 0x0115 +#define MTXORB_FTDI_RANGE_0116_PID 0x0116 +#define MTXORB_FTDI_RANGE_0117_PID 0x0117 +#define MTXORB_FTDI_RANGE_0118_PID 0x0118 +#define MTXORB_FTDI_RANGE_0119_PID 0x0119 +#define MTXORB_FTDI_RANGE_011A_PID 0x011A +#define MTXORB_FTDI_RANGE_011B_PID 0x011B +#define MTXORB_FTDI_RANGE_011C_PID 0x011C +#define MTXORB_FTDI_RANGE_011D_PID 0x011D +#define MTXORB_FTDI_RANGE_011E_PID 0x011E +#define MTXORB_FTDI_RANGE_011F_PID 0x011F +#define MTXORB_FTDI_RANGE_0120_PID 0x0120 +#define MTXORB_FTDI_RANGE_0121_PID 0x0121 +#define MTXORB_FTDI_RANGE_0122_PID 0x0122 +#define MTXORB_FTDI_RANGE_0123_PID 0x0123 +#define MTXORB_FTDI_RANGE_0124_PID 0x0124 +#define MTXORB_FTDI_RANGE_0125_PID 0x0125 +#define MTXORB_FTDI_RANGE_0126_PID 0x0126 +#define MTXORB_FTDI_RANGE_0127_PID 0x0127 +#define MTXORB_FTDI_RANGE_0128_PID 0x0128 +#define MTXORB_FTDI_RANGE_0129_PID 0x0129 +#define MTXORB_FTDI_RANGE_012A_PID 0x012A +#define MTXORB_FTDI_RANGE_012B_PID 0x012B +#define MTXORB_FTDI_RANGE_012C_PID 0x012C +#define MTXORB_FTDI_RANGE_012D_PID 0x012D +#define MTXORB_FTDI_RANGE_012E_PID 0x012E +#define MTXORB_FTDI_RANGE_012F_PID 0x012F +#define MTXORB_FTDI_RANGE_0130_PID 0x0130 +#define MTXORB_FTDI_RANGE_0131_PID 0x0131 +#define MTXORB_FTDI_RANGE_0132_PID 0x0132 +#define MTXORB_FTDI_RANGE_0133_PID 0x0133 +#define MTXORB_FTDI_RANGE_0134_PID 0x0134 +#define MTXORB_FTDI_RANGE_0135_PID 0x0135 +#define MTXORB_FTDI_RANGE_0136_PID 0x0136 +#define MTXORB_FTDI_RANGE_0137_PID 0x0137 +#define MTXORB_FTDI_RANGE_0138_PID 0x0138 +#define MTXORB_FTDI_RANGE_0139_PID 0x0139 +#define MTXORB_FTDI_RANGE_013A_PID 0x013A +#define MTXORB_FTDI_RANGE_013B_PID 0x013B +#define MTXORB_FTDI_RANGE_013C_PID 0x013C +#define MTXORB_FTDI_RANGE_013D_PID 0x013D +#define MTXORB_FTDI_RANGE_013E_PID 0x013E +#define MTXORB_FTDI_RANGE_013F_PID 0x013F +#define MTXORB_FTDI_RANGE_0140_PID 0x0140 +#define MTXORB_FTDI_RANGE_0141_PID 0x0141 +#define MTXORB_FTDI_RANGE_0142_PID 0x0142 +#define MTXORB_FTDI_RANGE_0143_PID 0x0143 +#define MTXORB_FTDI_RANGE_0144_PID 0x0144 +#define MTXORB_FTDI_RANGE_0145_PID 0x0145 +#define MTXORB_FTDI_RANGE_0146_PID 0x0146 +#define MTXORB_FTDI_RANGE_0147_PID 0x0147 +#define MTXORB_FTDI_RANGE_0148_PID 0x0148 +#define MTXORB_FTDI_RANGE_0149_PID 0x0149 +#define MTXORB_FTDI_RANGE_014A_PID 0x014A +#define MTXORB_FTDI_RANGE_014B_PID 0x014B +#define MTXORB_FTDI_RANGE_014C_PID 0x014C +#define MTXORB_FTDI_RANGE_014D_PID 0x014D +#define MTXORB_FTDI_RANGE_014E_PID 0x014E +#define MTXORB_FTDI_RANGE_014F_PID 0x014F +#define MTXORB_FTDI_RANGE_0150_PID 0x0150 +#define MTXORB_FTDI_RANGE_0151_PID 0x0151 +#define MTXORB_FTDI_RANGE_0152_PID 0x0152 +#define MTXORB_FTDI_RANGE_0153_PID 0x0153 +#define MTXORB_FTDI_RANGE_0154_PID 0x0154 +#define MTXORB_FTDI_RANGE_0155_PID 0x0155 +#define MTXORB_FTDI_RANGE_0156_PID 0x0156 +#define MTXORB_FTDI_RANGE_0157_PID 0x0157 +#define MTXORB_FTDI_RANGE_0158_PID 0x0158 +#define MTXORB_FTDI_RANGE_0159_PID 0x0159 +#define MTXORB_FTDI_RANGE_015A_PID 0x015A +#define MTXORB_FTDI_RANGE_015B_PID 0x015B +#define MTXORB_FTDI_RANGE_015C_PID 0x015C +#define MTXORB_FTDI_RANGE_015D_PID 0x015D +#define MTXORB_FTDI_RANGE_015E_PID 0x015E +#define MTXORB_FTDI_RANGE_015F_PID 0x015F +#define MTXORB_FTDI_RANGE_0160_PID 0x0160 +#define MTXORB_FTDI_RANGE_0161_PID 0x0161 +#define MTXORB_FTDI_RANGE_0162_PID 0x0162 +#define MTXORB_FTDI_RANGE_0163_PID 0x0163 +#define MTXORB_FTDI_RANGE_0164_PID 0x0164 +#define MTXORB_FTDI_RANGE_0165_PID 0x0165 +#define MTXORB_FTDI_RANGE_0166_PID 0x0166 +#define MTXORB_FTDI_RANGE_0167_PID 0x0167 +#define MTXORB_FTDI_RANGE_0168_PID 0x0168 +#define MTXORB_FTDI_RANGE_0169_PID 0x0169 +#define MTXORB_FTDI_RANGE_016A_PID 0x016A +#define MTXORB_FTDI_RANGE_016B_PID 0x016B +#define MTXORB_FTDI_RANGE_016C_PID 0x016C +#define MTXORB_FTDI_RANGE_016D_PID 0x016D +#define MTXORB_FTDI_RANGE_016E_PID 0x016E +#define MTXORB_FTDI_RANGE_016F_PID 0x016F +#define MTXORB_FTDI_RANGE_0170_PID 0x0170 +#define MTXORB_FTDI_RANGE_0171_PID 0x0171 +#define MTXORB_FTDI_RANGE_0172_PID 0x0172 +#define MTXORB_FTDI_RANGE_0173_PID 0x0173 +#define MTXORB_FTDI_RANGE_0174_PID 0x0174 +#define MTXORB_FTDI_RANGE_0175_PID 0x0175 +#define MTXORB_FTDI_RANGE_0176_PID 0x0176 +#define MTXORB_FTDI_RANGE_0177_PID 0x0177 +#define MTXORB_FTDI_RANGE_0178_PID 0x0178 +#define MTXORB_FTDI_RANGE_0179_PID 0x0179 +#define MTXORB_FTDI_RANGE_017A_PID 0x017A +#define MTXORB_FTDI_RANGE_017B_PID 0x017B +#define MTXORB_FTDI_RANGE_017C_PID 0x017C +#define MTXORB_FTDI_RANGE_017D_PID 0x017D +#define MTXORB_FTDI_RANGE_017E_PID 0x017E +#define MTXORB_FTDI_RANGE_017F_PID 0x017F +#define MTXORB_FTDI_RANGE_0180_PID 0x0180 +#define MTXORB_FTDI_RANGE_0181_PID 0x0181 +#define MTXORB_FTDI_RANGE_0182_PID 0x0182 +#define MTXORB_FTDI_RANGE_0183_PID 0x0183 +#define MTXORB_FTDI_RANGE_0184_PID 0x0184 +#define MTXORB_FTDI_RANGE_0185_PID 0x0185 +#define MTXORB_FTDI_RANGE_0186_PID 0x0186 +#define MTXORB_FTDI_RANGE_0187_PID 0x0187 +#define MTXORB_FTDI_RANGE_0188_PID 0x0188 +#define MTXORB_FTDI_RANGE_0189_PID 0x0189 +#define MTXORB_FTDI_RANGE_018A_PID 0x018A +#define MTXORB_FTDI_RANGE_018B_PID 0x018B +#define MTXORB_FTDI_RANGE_018C_PID 0x018C +#define MTXORB_FTDI_RANGE_018D_PID 0x018D +#define MTXORB_FTDI_RANGE_018E_PID 0x018E +#define MTXORB_FTDI_RANGE_018F_PID 0x018F +#define MTXORB_FTDI_RANGE_0190_PID 0x0190 +#define MTXORB_FTDI_RANGE_0191_PID 0x0191 +#define MTXORB_FTDI_RANGE_0192_PID 0x0192 +#define MTXORB_FTDI_RANGE_0193_PID 0x0193 +#define MTXORB_FTDI_RANGE_0194_PID 0x0194 +#define MTXORB_FTDI_RANGE_0195_PID 0x0195 +#define MTXORB_FTDI_RANGE_0196_PID 0x0196 +#define MTXORB_FTDI_RANGE_0197_PID 0x0197 +#define MTXORB_FTDI_RANGE_0198_PID 0x0198 +#define MTXORB_FTDI_RANGE_0199_PID 0x0199 +#define MTXORB_FTDI_RANGE_019A_PID 0x019A +#define MTXORB_FTDI_RANGE_019B_PID 0x019B +#define MTXORB_FTDI_RANGE_019C_PID 0x019C +#define MTXORB_FTDI_RANGE_019D_PID 0x019D +#define MTXORB_FTDI_RANGE_019E_PID 0x019E +#define MTXORB_FTDI_RANGE_019F_PID 0x019F +#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0 +#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1 +#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2 +#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3 +#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4 +#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5 +#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6 +#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7 +#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8 +#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9 +#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA +#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB +#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC +#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD +#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE +#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF +#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0 +#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1 +#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2 +#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3 +#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4 +#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5 +#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6 +#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7 +#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8 +#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9 +#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA +#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB +#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC +#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD +#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE +#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF +#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0 +#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1 +#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2 +#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3 +#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4 +#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5 +#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6 +#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7 +#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8 +#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9 +#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA +#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB +#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC +#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD +#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE +#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF +#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0 +#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1 +#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2 +#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3 +#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4 +#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5 +#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6 +#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7 +#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8 +#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9 +#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA +#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB +#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC +#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD +#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE +#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF +#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0 +#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1 +#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2 +#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3 +#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4 +#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5 +#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6 +#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7 +#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8 +#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9 +#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA +#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB +#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC +#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED +#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE +#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF +#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0 +#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1 +#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2 +#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3 +#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4 +#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5 +#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6 +#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7 +#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8 +#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9 +#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA +#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB +#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC +#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD +#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE +#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF + + + +/* + * The Mobility Lab (TML) + * Submitted by Pierre Castella + */ +#define TML_VID 0x1B91 /* Vendor ID */ +#define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */ + +/* Alti-2 products http://www.alti-2.com */ +#define ALTI2_VID 0x1BC9 +#define ALTI2_N3_PID 0x6001 /* Neptune 3 */ + +/* + * Dresden Elektronic Sensor Terminal Board + */ +#define DE_VID 0x1cf1 /* Vendor ID */ +#define STB_PID 0x0001 /* Sensor Terminal Board */ +#define WHT_PID 0x0004 /* Wireless Handheld Terminal */ + +/* + * Papouch products (http://www.papouch.com/) + * Submitted by Folkert van Heusden + */ + +#define PAPOUCH_VID 0x5050 /* Vendor ID */ +#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ +#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ +#define PAPOUCH_AD4USB_PID 0x8003 /* AD4USB Measurement Module */ + +/* + * Marvell SheevaPlug + */ +#define MARVELL_VID 0x9e88 +#define MARVELL_SHEEVAPLUG_PID 0x9e8f + +/* + * Evolution Robotics products (http://www.evolution.com/). + * Submitted by Shawn M. Lavelle. + */ +#define EVOLUTION_VID 0xDEEE /* Vendor ID */ +#define EVOLUTION_ER1_PID 0x0300 /* ER1 Control Module */ +#define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/ +#define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/ +#define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */ + +/* + * MJS Gadgets HD Radio / XM Radio / Sirius Radio interfaces (using VID 0x0403) + */ +#define MJSG_GENERIC_PID 0x9378 +#define MJSG_SR_RADIO_PID 0x9379 +#define MJSG_XM_RADIO_PID 0x937A +#define MJSG_HD_RADIO_PID 0x937C --- linux-2.6.32.orig/drivers/usb/serial/ipaq.c +++ linux-2.6.32/drivers/usb/serial/ipaq.c @@ -547,7 +547,6 @@ { USB_DEVICE(0x413C, 0x4009) }, /* Dell Axim USB Sync */ { USB_DEVICE(0x4505, 0x0010) }, /* Smartphone */ { USB_DEVICE(0x5E04, 0xCE00) }, /* SAGEM Wireless Assistant */ - { USB_DEVICE(0x0BB4, 0x00CF) }, /* HTC smartphone modems */ { } /* Terminating entry */ }; --- linux-2.6.32.orig/drivers/usb/serial/ftdi_sio.h +++ linux-2.6.32/drivers/usb/serial/ftdi_sio.h @@ -1,7 +1,10 @@ /* - * Definitions for the FTDI USB Single Port Serial Converter - + * Driver definitions for the FTDI USB Single Port Serial Converter - * known as FTDI_SIO (Serial Input/Output application of the chipset) * + * For USB vendor/product IDs (VID/PID), please see ftdi_sio_ids.h + * + * * The example I have is known as the USC-1000 which is available from * http://www.dse.co.nz - cat no XH4214 It looks similar to this: * http://www.dansdata.com/usbser.htm but I can't be sure There are other @@ -17,866 +20,7 @@ * Bill Ryder - bryder@sgi.com formerly of Silicon Graphics, Inc.- wrote the * FTDI_SIO implementation. * - * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais - * from Rudolf Gugler - * - */ - -#define FTDI_VID 0x0403 /* Vendor Id */ -#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */ -#define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */ -#define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */ -#define FTDI_8U2232C_PID 0x6010 /* Dual channel device */ -#define FTDI_232RL_PID 0xFBFA /* Product ID for FT232RL */ -#define FTDI_4232H_PID 0x6011 /* Quad channel hi-speed device */ -#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */ -#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */ -#define FTDI_NF_RIC_PID 0x0001 /* Product Id */ -#define FTDI_USBX_707_PID 0xF857 /* ADSTech IR Blaster USBX-707 */ - -/* Larsen and Brusgaard AltiTrack/USBtrack */ -#define LARSENBRUSGAARD_VID 0x0FD8 -#define LB_ALTITRACK_PID 0x0001 - -/* www.canusb.com Lawicel CANUSB device */ -#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */ - -/* AlphaMicro Components AMC-232USB01 device */ -#define FTDI_AMC232_PID 0xFF00 /* Product Id */ - -/* www.candapter.com Ewert Energy Systems CANdapter device */ -#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ - -/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ -/* the VID is the standard ftdi vid (FTDI_VID) */ -#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ -#define FTDI_SCS_DEVICE_1_PID 0xD011 /* SCS Tracker / DSP TNC */ -#define FTDI_SCS_DEVICE_2_PID 0xD012 -#define FTDI_SCS_DEVICE_3_PID 0xD013 -#define FTDI_SCS_DEVICE_4_PID 0xD014 -#define FTDI_SCS_DEVICE_5_PID 0xD015 -#define FTDI_SCS_DEVICE_6_PID 0xD016 -#define FTDI_SCS_DEVICE_7_PID 0xD017 - -/* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */ -#define FTDI_ACTZWAVE_PID 0xF2D0 - - -/* www.starting-point-systems.com µChameleon device */ -#define FTDI_MICRO_CHAMELEON_PID 0xCAA0 /* Product Id */ - -/* www.irtrans.de device */ -#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */ - - -/* www.thoughttechnology.com/ TT-USB provide with procomp use ftdi_sio */ -#define FTDI_TTUSB_PID 0xFF20 /* Product Id */ - -/* iPlus device */ -#define FTDI_IPLUS_PID 0xD070 /* Product Id */ -#define FTDI_IPLUS2_PID 0xD071 /* Product Id */ - -/* DMX4ALL DMX Interfaces */ -#define FTDI_DMX4ALL 0xC850 - -/* OpenDCC (www.opendcc.de) product id */ -#define FTDI_OPENDCC_PID 0xBFD8 -#define FTDI_OPENDCC_SNIFFER_PID 0xBFD9 -#define FTDI_OPENDCC_THROTTLE_PID 0xBFDA -#define FTDI_OPENDCC_GATEWAY_PID 0xBFDB - -/* Sprog II (Andrew Crosland's SprogII DCC interface) */ -#define FTDI_SPROG_II 0xF0C8 - -/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ -/* they use the ftdi chipset for the USB interface and the vendor id is the same */ -#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ -#define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */ -#define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */ -#define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */ -#define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */ -#define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */ -#define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */ -#define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */ - -/* Video Networks Limited / Homechoice in the UK use an ftdi-based device for their 1Mb */ -/* broadband internet service. The following PID is exhibited by the usb device supplied */ -/* (the VID is the standard ftdi vid (FTDI_VID) */ -#define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */ - -/* - * PCDJ use ftdi based dj-controllers. The following PID is for their DAC-2 device - * http://www.pcdjhardware.com/DAC2.asp (PID sent by Wouter Paesen) - * (the VID is the standard ftdi vid (FTDI_VID) */ -#define FTDI_PCDJ_DAC2_PID 0xFA88 - -/* - * The following are the values for the Matrix Orbital LCD displays, - * which are the FT232BM ( similar to the 8U232AM ) - */ -#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */ -#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */ -#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */ -#define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */ -#define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */ -#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */ -#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */ - -/* OOCDlink by Joern Kaipf - * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */ -#define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ - -/* - * The following are the values for the Matrix Orbital FTDI Range - * Anything in this range will use an FT232RL. - */ -#define MTXORB_VID 0x1B3D -#define MTXORB_FTDI_RANGE_0100_PID 0x0100 -#define MTXORB_FTDI_RANGE_0101_PID 0x0101 -#define MTXORB_FTDI_RANGE_0102_PID 0x0102 -#define MTXORB_FTDI_RANGE_0103_PID 0x0103 -#define MTXORB_FTDI_RANGE_0104_PID 0x0104 -#define MTXORB_FTDI_RANGE_0105_PID 0x0105 -#define MTXORB_FTDI_RANGE_0106_PID 0x0106 -#define MTXORB_FTDI_RANGE_0107_PID 0x0107 -#define MTXORB_FTDI_RANGE_0108_PID 0x0108 -#define MTXORB_FTDI_RANGE_0109_PID 0x0109 -#define MTXORB_FTDI_RANGE_010A_PID 0x010A -#define MTXORB_FTDI_RANGE_010B_PID 0x010B -#define MTXORB_FTDI_RANGE_010C_PID 0x010C -#define MTXORB_FTDI_RANGE_010D_PID 0x010D -#define MTXORB_FTDI_RANGE_010E_PID 0x010E -#define MTXORB_FTDI_RANGE_010F_PID 0x010F -#define MTXORB_FTDI_RANGE_0110_PID 0x0110 -#define MTXORB_FTDI_RANGE_0111_PID 0x0111 -#define MTXORB_FTDI_RANGE_0112_PID 0x0112 -#define MTXORB_FTDI_RANGE_0113_PID 0x0113 -#define MTXORB_FTDI_RANGE_0114_PID 0x0114 -#define MTXORB_FTDI_RANGE_0115_PID 0x0115 -#define MTXORB_FTDI_RANGE_0116_PID 0x0116 -#define MTXORB_FTDI_RANGE_0117_PID 0x0117 -#define MTXORB_FTDI_RANGE_0118_PID 0x0118 -#define MTXORB_FTDI_RANGE_0119_PID 0x0119 -#define MTXORB_FTDI_RANGE_011A_PID 0x011A -#define MTXORB_FTDI_RANGE_011B_PID 0x011B -#define MTXORB_FTDI_RANGE_011C_PID 0x011C -#define MTXORB_FTDI_RANGE_011D_PID 0x011D -#define MTXORB_FTDI_RANGE_011E_PID 0x011E -#define MTXORB_FTDI_RANGE_011F_PID 0x011F -#define MTXORB_FTDI_RANGE_0120_PID 0x0120 -#define MTXORB_FTDI_RANGE_0121_PID 0x0121 -#define MTXORB_FTDI_RANGE_0122_PID 0x0122 -#define MTXORB_FTDI_RANGE_0123_PID 0x0123 -#define MTXORB_FTDI_RANGE_0124_PID 0x0124 -#define MTXORB_FTDI_RANGE_0125_PID 0x0125 -#define MTXORB_FTDI_RANGE_0126_PID 0x0126 -#define MTXORB_FTDI_RANGE_0127_PID 0x0127 -#define MTXORB_FTDI_RANGE_0128_PID 0x0128 -#define MTXORB_FTDI_RANGE_0129_PID 0x0129 -#define MTXORB_FTDI_RANGE_012A_PID 0x012A -#define MTXORB_FTDI_RANGE_012B_PID 0x012B -#define MTXORB_FTDI_RANGE_012C_PID 0x012C -#define MTXORB_FTDI_RANGE_012D_PID 0x012D -#define MTXORB_FTDI_RANGE_012E_PID 0x012E -#define MTXORB_FTDI_RANGE_012F_PID 0x012F -#define MTXORB_FTDI_RANGE_0130_PID 0x0130 -#define MTXORB_FTDI_RANGE_0131_PID 0x0131 -#define MTXORB_FTDI_RANGE_0132_PID 0x0132 -#define MTXORB_FTDI_RANGE_0133_PID 0x0133 -#define MTXORB_FTDI_RANGE_0134_PID 0x0134 -#define MTXORB_FTDI_RANGE_0135_PID 0x0135 -#define MTXORB_FTDI_RANGE_0136_PID 0x0136 -#define MTXORB_FTDI_RANGE_0137_PID 0x0137 -#define MTXORB_FTDI_RANGE_0138_PID 0x0138 -#define MTXORB_FTDI_RANGE_0139_PID 0x0139 -#define MTXORB_FTDI_RANGE_013A_PID 0x013A -#define MTXORB_FTDI_RANGE_013B_PID 0x013B -#define MTXORB_FTDI_RANGE_013C_PID 0x013C -#define MTXORB_FTDI_RANGE_013D_PID 0x013D -#define MTXORB_FTDI_RANGE_013E_PID 0x013E -#define MTXORB_FTDI_RANGE_013F_PID 0x013F -#define MTXORB_FTDI_RANGE_0140_PID 0x0140 -#define MTXORB_FTDI_RANGE_0141_PID 0x0141 -#define MTXORB_FTDI_RANGE_0142_PID 0x0142 -#define MTXORB_FTDI_RANGE_0143_PID 0x0143 -#define MTXORB_FTDI_RANGE_0144_PID 0x0144 -#define MTXORB_FTDI_RANGE_0145_PID 0x0145 -#define MTXORB_FTDI_RANGE_0146_PID 0x0146 -#define MTXORB_FTDI_RANGE_0147_PID 0x0147 -#define MTXORB_FTDI_RANGE_0148_PID 0x0148 -#define MTXORB_FTDI_RANGE_0149_PID 0x0149 -#define MTXORB_FTDI_RANGE_014A_PID 0x014A -#define MTXORB_FTDI_RANGE_014B_PID 0x014B -#define MTXORB_FTDI_RANGE_014C_PID 0x014C -#define MTXORB_FTDI_RANGE_014D_PID 0x014D -#define MTXORB_FTDI_RANGE_014E_PID 0x014E -#define MTXORB_FTDI_RANGE_014F_PID 0x014F -#define MTXORB_FTDI_RANGE_0150_PID 0x0150 -#define MTXORB_FTDI_RANGE_0151_PID 0x0151 -#define MTXORB_FTDI_RANGE_0152_PID 0x0152 -#define MTXORB_FTDI_RANGE_0153_PID 0x0153 -#define MTXORB_FTDI_RANGE_0154_PID 0x0154 -#define MTXORB_FTDI_RANGE_0155_PID 0x0155 -#define MTXORB_FTDI_RANGE_0156_PID 0x0156 -#define MTXORB_FTDI_RANGE_0157_PID 0x0157 -#define MTXORB_FTDI_RANGE_0158_PID 0x0158 -#define MTXORB_FTDI_RANGE_0159_PID 0x0159 -#define MTXORB_FTDI_RANGE_015A_PID 0x015A -#define MTXORB_FTDI_RANGE_015B_PID 0x015B -#define MTXORB_FTDI_RANGE_015C_PID 0x015C -#define MTXORB_FTDI_RANGE_015D_PID 0x015D -#define MTXORB_FTDI_RANGE_015E_PID 0x015E -#define MTXORB_FTDI_RANGE_015F_PID 0x015F -#define MTXORB_FTDI_RANGE_0160_PID 0x0160 -#define MTXORB_FTDI_RANGE_0161_PID 0x0161 -#define MTXORB_FTDI_RANGE_0162_PID 0x0162 -#define MTXORB_FTDI_RANGE_0163_PID 0x0163 -#define MTXORB_FTDI_RANGE_0164_PID 0x0164 -#define MTXORB_FTDI_RANGE_0165_PID 0x0165 -#define MTXORB_FTDI_RANGE_0166_PID 0x0166 -#define MTXORB_FTDI_RANGE_0167_PID 0x0167 -#define MTXORB_FTDI_RANGE_0168_PID 0x0168 -#define MTXORB_FTDI_RANGE_0169_PID 0x0169 -#define MTXORB_FTDI_RANGE_016A_PID 0x016A -#define MTXORB_FTDI_RANGE_016B_PID 0x016B -#define MTXORB_FTDI_RANGE_016C_PID 0x016C -#define MTXORB_FTDI_RANGE_016D_PID 0x016D -#define MTXORB_FTDI_RANGE_016E_PID 0x016E -#define MTXORB_FTDI_RANGE_016F_PID 0x016F -#define MTXORB_FTDI_RANGE_0170_PID 0x0170 -#define MTXORB_FTDI_RANGE_0171_PID 0x0171 -#define MTXORB_FTDI_RANGE_0172_PID 0x0172 -#define MTXORB_FTDI_RANGE_0173_PID 0x0173 -#define MTXORB_FTDI_RANGE_0174_PID 0x0174 -#define MTXORB_FTDI_RANGE_0175_PID 0x0175 -#define MTXORB_FTDI_RANGE_0176_PID 0x0176 -#define MTXORB_FTDI_RANGE_0177_PID 0x0177 -#define MTXORB_FTDI_RANGE_0178_PID 0x0178 -#define MTXORB_FTDI_RANGE_0179_PID 0x0179 -#define MTXORB_FTDI_RANGE_017A_PID 0x017A -#define MTXORB_FTDI_RANGE_017B_PID 0x017B -#define MTXORB_FTDI_RANGE_017C_PID 0x017C -#define MTXORB_FTDI_RANGE_017D_PID 0x017D -#define MTXORB_FTDI_RANGE_017E_PID 0x017E -#define MTXORB_FTDI_RANGE_017F_PID 0x017F -#define MTXORB_FTDI_RANGE_0180_PID 0x0180 -#define MTXORB_FTDI_RANGE_0181_PID 0x0181 -#define MTXORB_FTDI_RANGE_0182_PID 0x0182 -#define MTXORB_FTDI_RANGE_0183_PID 0x0183 -#define MTXORB_FTDI_RANGE_0184_PID 0x0184 -#define MTXORB_FTDI_RANGE_0185_PID 0x0185 -#define MTXORB_FTDI_RANGE_0186_PID 0x0186 -#define MTXORB_FTDI_RANGE_0187_PID 0x0187 -#define MTXORB_FTDI_RANGE_0188_PID 0x0188 -#define MTXORB_FTDI_RANGE_0189_PID 0x0189 -#define MTXORB_FTDI_RANGE_018A_PID 0x018A -#define MTXORB_FTDI_RANGE_018B_PID 0x018B -#define MTXORB_FTDI_RANGE_018C_PID 0x018C -#define MTXORB_FTDI_RANGE_018D_PID 0x018D -#define MTXORB_FTDI_RANGE_018E_PID 0x018E -#define MTXORB_FTDI_RANGE_018F_PID 0x018F -#define MTXORB_FTDI_RANGE_0190_PID 0x0190 -#define MTXORB_FTDI_RANGE_0191_PID 0x0191 -#define MTXORB_FTDI_RANGE_0192_PID 0x0192 -#define MTXORB_FTDI_RANGE_0193_PID 0x0193 -#define MTXORB_FTDI_RANGE_0194_PID 0x0194 -#define MTXORB_FTDI_RANGE_0195_PID 0x0195 -#define MTXORB_FTDI_RANGE_0196_PID 0x0196 -#define MTXORB_FTDI_RANGE_0197_PID 0x0197 -#define MTXORB_FTDI_RANGE_0198_PID 0x0198 -#define MTXORB_FTDI_RANGE_0199_PID 0x0199 -#define MTXORB_FTDI_RANGE_019A_PID 0x019A -#define MTXORB_FTDI_RANGE_019B_PID 0x019B -#define MTXORB_FTDI_RANGE_019C_PID 0x019C -#define MTXORB_FTDI_RANGE_019D_PID 0x019D -#define MTXORB_FTDI_RANGE_019E_PID 0x019E -#define MTXORB_FTDI_RANGE_019F_PID 0x019F -#define MTXORB_FTDI_RANGE_01A0_PID 0x01A0 -#define MTXORB_FTDI_RANGE_01A1_PID 0x01A1 -#define MTXORB_FTDI_RANGE_01A2_PID 0x01A2 -#define MTXORB_FTDI_RANGE_01A3_PID 0x01A3 -#define MTXORB_FTDI_RANGE_01A4_PID 0x01A4 -#define MTXORB_FTDI_RANGE_01A5_PID 0x01A5 -#define MTXORB_FTDI_RANGE_01A6_PID 0x01A6 -#define MTXORB_FTDI_RANGE_01A7_PID 0x01A7 -#define MTXORB_FTDI_RANGE_01A8_PID 0x01A8 -#define MTXORB_FTDI_RANGE_01A9_PID 0x01A9 -#define MTXORB_FTDI_RANGE_01AA_PID 0x01AA -#define MTXORB_FTDI_RANGE_01AB_PID 0x01AB -#define MTXORB_FTDI_RANGE_01AC_PID 0x01AC -#define MTXORB_FTDI_RANGE_01AD_PID 0x01AD -#define MTXORB_FTDI_RANGE_01AE_PID 0x01AE -#define MTXORB_FTDI_RANGE_01AF_PID 0x01AF -#define MTXORB_FTDI_RANGE_01B0_PID 0x01B0 -#define MTXORB_FTDI_RANGE_01B1_PID 0x01B1 -#define MTXORB_FTDI_RANGE_01B2_PID 0x01B2 -#define MTXORB_FTDI_RANGE_01B3_PID 0x01B3 -#define MTXORB_FTDI_RANGE_01B4_PID 0x01B4 -#define MTXORB_FTDI_RANGE_01B5_PID 0x01B5 -#define MTXORB_FTDI_RANGE_01B6_PID 0x01B6 -#define MTXORB_FTDI_RANGE_01B7_PID 0x01B7 -#define MTXORB_FTDI_RANGE_01B8_PID 0x01B8 -#define MTXORB_FTDI_RANGE_01B9_PID 0x01B9 -#define MTXORB_FTDI_RANGE_01BA_PID 0x01BA -#define MTXORB_FTDI_RANGE_01BB_PID 0x01BB -#define MTXORB_FTDI_RANGE_01BC_PID 0x01BC -#define MTXORB_FTDI_RANGE_01BD_PID 0x01BD -#define MTXORB_FTDI_RANGE_01BE_PID 0x01BE -#define MTXORB_FTDI_RANGE_01BF_PID 0x01BF -#define MTXORB_FTDI_RANGE_01C0_PID 0x01C0 -#define MTXORB_FTDI_RANGE_01C1_PID 0x01C1 -#define MTXORB_FTDI_RANGE_01C2_PID 0x01C2 -#define MTXORB_FTDI_RANGE_01C3_PID 0x01C3 -#define MTXORB_FTDI_RANGE_01C4_PID 0x01C4 -#define MTXORB_FTDI_RANGE_01C5_PID 0x01C5 -#define MTXORB_FTDI_RANGE_01C6_PID 0x01C6 -#define MTXORB_FTDI_RANGE_01C7_PID 0x01C7 -#define MTXORB_FTDI_RANGE_01C8_PID 0x01C8 -#define MTXORB_FTDI_RANGE_01C9_PID 0x01C9 -#define MTXORB_FTDI_RANGE_01CA_PID 0x01CA -#define MTXORB_FTDI_RANGE_01CB_PID 0x01CB -#define MTXORB_FTDI_RANGE_01CC_PID 0x01CC -#define MTXORB_FTDI_RANGE_01CD_PID 0x01CD -#define MTXORB_FTDI_RANGE_01CE_PID 0x01CE -#define MTXORB_FTDI_RANGE_01CF_PID 0x01CF -#define MTXORB_FTDI_RANGE_01D0_PID 0x01D0 -#define MTXORB_FTDI_RANGE_01D1_PID 0x01D1 -#define MTXORB_FTDI_RANGE_01D2_PID 0x01D2 -#define MTXORB_FTDI_RANGE_01D3_PID 0x01D3 -#define MTXORB_FTDI_RANGE_01D4_PID 0x01D4 -#define MTXORB_FTDI_RANGE_01D5_PID 0x01D5 -#define MTXORB_FTDI_RANGE_01D6_PID 0x01D6 -#define MTXORB_FTDI_RANGE_01D7_PID 0x01D7 -#define MTXORB_FTDI_RANGE_01D8_PID 0x01D8 -#define MTXORB_FTDI_RANGE_01D9_PID 0x01D9 -#define MTXORB_FTDI_RANGE_01DA_PID 0x01DA -#define MTXORB_FTDI_RANGE_01DB_PID 0x01DB -#define MTXORB_FTDI_RANGE_01DC_PID 0x01DC -#define MTXORB_FTDI_RANGE_01DD_PID 0x01DD -#define MTXORB_FTDI_RANGE_01DE_PID 0x01DE -#define MTXORB_FTDI_RANGE_01DF_PID 0x01DF -#define MTXORB_FTDI_RANGE_01E0_PID 0x01E0 -#define MTXORB_FTDI_RANGE_01E1_PID 0x01E1 -#define MTXORB_FTDI_RANGE_01E2_PID 0x01E2 -#define MTXORB_FTDI_RANGE_01E3_PID 0x01E3 -#define MTXORB_FTDI_RANGE_01E4_PID 0x01E4 -#define MTXORB_FTDI_RANGE_01E5_PID 0x01E5 -#define MTXORB_FTDI_RANGE_01E6_PID 0x01E6 -#define MTXORB_FTDI_RANGE_01E7_PID 0x01E7 -#define MTXORB_FTDI_RANGE_01E8_PID 0x01E8 -#define MTXORB_FTDI_RANGE_01E9_PID 0x01E9 -#define MTXORB_FTDI_RANGE_01EA_PID 0x01EA -#define MTXORB_FTDI_RANGE_01EB_PID 0x01EB -#define MTXORB_FTDI_RANGE_01EC_PID 0x01EC -#define MTXORB_FTDI_RANGE_01ED_PID 0x01ED -#define MTXORB_FTDI_RANGE_01EE_PID 0x01EE -#define MTXORB_FTDI_RANGE_01EF_PID 0x01EF -#define MTXORB_FTDI_RANGE_01F0_PID 0x01F0 -#define MTXORB_FTDI_RANGE_01F1_PID 0x01F1 -#define MTXORB_FTDI_RANGE_01F2_PID 0x01F2 -#define MTXORB_FTDI_RANGE_01F3_PID 0x01F3 -#define MTXORB_FTDI_RANGE_01F4_PID 0x01F4 -#define MTXORB_FTDI_RANGE_01F5_PID 0x01F5 -#define MTXORB_FTDI_RANGE_01F6_PID 0x01F6 -#define MTXORB_FTDI_RANGE_01F7_PID 0x01F7 -#define MTXORB_FTDI_RANGE_01F8_PID 0x01F8 -#define MTXORB_FTDI_RANGE_01F9_PID 0x01F9 -#define MTXORB_FTDI_RANGE_01FA_PID 0x01FA -#define MTXORB_FTDI_RANGE_01FB_PID 0x01FB -#define MTXORB_FTDI_RANGE_01FC_PID 0x01FC -#define MTXORB_FTDI_RANGE_01FD_PID 0x01FD -#define MTXORB_FTDI_RANGE_01FE_PID 0x01FE -#define MTXORB_FTDI_RANGE_01FF_PID 0x01FF - - - -/* Interbiometrics USB I/O Board */ -/* Developed for Interbiometrics by Rudolf Gugler */ -#define INTERBIOMETRICS_VID 0x1209 -#define INTERBIOMETRICS_IOBOARD_PID 0x1002 -#define INTERBIOMETRICS_MINI_IOBOARD_PID 0x1006 - -/* - * The following are the values for the Perle Systems - * UltraPort USB serial converters - */ -#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */ - -/* - * The following are the values for the Sealevel SeaLINK+ adapters. - * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and - * removed some PIDs that don't seem to match any existing products.) - */ -#define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */ -#define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */ -#define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */ -#define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */ -#define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */ -#define SEALEVEL_2106_PID 0x9020 /* SeaLINK+422 (2106) */ -#define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */ -#define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */ -#define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */ -#define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */ -#define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */ -#define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */ -#define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */ -#define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */ -#define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */ -#define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */ -#define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */ -#define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */ -#define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */ -#define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */ -#define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */ -#define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */ -#define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */ -#define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */ -#define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */ -#define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */ -#define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */ -#define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */ -#define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */ -#define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */ -#define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */ -#define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */ -#define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */ -#define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */ -#define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */ -#define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */ -#define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */ -#define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */ -#define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */ -#define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */ -#define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */ -#define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */ -#define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */ -#define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */ -#define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */ -#define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */ -#define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */ -#define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */ - -/* - * The following are the values for two KOBIL chipcard terminals. - */ -#define KOBIL_VID 0x0d46 /* KOBIL Vendor ID */ -#define KOBIL_CONV_B1_PID 0x2020 /* KOBIL Konverter for B1 */ -#define KOBIL_CONV_KAAN_PID 0x2021 /* KOBIL_Konverter for KAAN */ - -/* - * Icom ID-1 digital transceiver - */ - -#define ICOM_ID1_VID 0x0C26 -#define ICOM_ID1_PID 0x0004 - -/* - * ASK.fr devices - */ -#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */ - -/* - * FTDI USB UART chips used in construction projects from the - * Elektor Electronics magazine (http://elektor-electronics.co.uk) - */ -#define ELEKTOR_VID 0x0C7D -#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */ - -/* - * DSS-20 Sync Station for Sony Ericsson P800 - */ -#define FTDI_DSS20_PID 0xFC82 - -/* - * Home Electronics (www.home-electro.com) USB gadgets - */ -#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */ - -/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */ -/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */ -#define FTDI_USB_UIRT_PID 0xF850 /* Product Id */ - -/* TNC-X USB-to-packet-radio adapter, versions prior to 3.0 (DLP module) */ - -#define FTDI_TNC_X_PID 0xEBE0 - -/* - * ELV USB devices submitted by Christian Abt of ELV (www.elv.de). - * All of these devices use FTDI's vendor ID (0x0403). - * - * The previously included PID for the UO 100 module was incorrect. - * In fact, that PID was for ELV's UR 100 USB-RS232 converter (0xFB58). - * - * Armin Laeuger originally sent the PID for the UM 100 module. - */ -#define FTDI_R2000KU_TRUE_RNG 0xFB80 /* R2000KU TRUE RNG */ -#define FTDI_ELV_UR100_PID 0xFB58 /* USB-RS232-Umsetzer (UR 100) */ -#define FTDI_ELV_UM100_PID 0xFB5A /* USB-Modul UM 100 */ -#define FTDI_ELV_UO100_PID 0xFB5B /* USB-Modul UO 100 */ -#define FTDI_ELV_ALC8500_PID 0xF06E /* ALC 8500 Expert */ -/* Additional ELV PIDs that default to using the FTDI D2XX drivers on - * MS Windows, rather than the FTDI Virtual Com Port drivers. - * Maybe these will be easier to use with the libftdi/libusb user-space - * drivers, or possibly the Comedi drivers in some cases. */ -#define FTDI_ELV_CLI7000_PID 0xFB59 /* Computer-Light-Interface (CLI 7000) */ -#define FTDI_ELV_PPS7330_PID 0xFB5C /* Processor-Power-Supply (PPS 7330) */ -#define FTDI_ELV_TFM100_PID 0xFB5D /* Temperartur-Feuchte Messgeraet (TFM 100) */ -#define FTDI_ELV_UDF77_PID 0xFB5E /* USB DCF Funkurh (UDF 77) */ -#define FTDI_ELV_UIO88_PID 0xFB5F /* USB-I/O Interface (UIO 88) */ -#define FTDI_ELV_UAD8_PID 0xF068 /* USB-AD-Wandler (UAD 8) */ -#define FTDI_ELV_UDA7_PID 0xF069 /* USB-DA-Wandler (UDA 7) */ -#define FTDI_ELV_USI2_PID 0xF06A /* USB-Schrittmotoren-Interface (USI 2) */ -#define FTDI_ELV_T1100_PID 0xF06B /* Thermometer (T 1100) */ -#define FTDI_ELV_PCD200_PID 0xF06C /* PC-Datenlogger (PCD 200) */ -#define FTDI_ELV_ULA200_PID 0xF06D /* USB-LCD-Ansteuerung (ULA 200) */ -#define FTDI_ELV_FHZ1000PC_PID 0xF06F /* FHZ 1000 PC */ -#define FTDI_ELV_CSI8_PID 0xE0F0 /* Computer-Schalt-Interface (CSI 8) */ -#define FTDI_ELV_EM1000DL_PID 0xE0F1 /* PC-Datenlogger fuer Energiemonitor (EM 1000 DL) */ -#define FTDI_ELV_PCK100_PID 0xE0F2 /* PC-Kabeltester (PCK 100) */ -#define FTDI_ELV_RFP500_PID 0xE0F3 /* HF-Leistungsmesser (RFP 500) */ -#define FTDI_ELV_FS20SIG_PID 0xE0F4 /* Signalgeber (FS 20 SIG) */ -#define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */ -#define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */ -#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */ -#define FTDI_ELV_HS485_PID 0xE0EA /* USB to RS-485 adapter */ -#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */ -#define FTDI_PHI_FISCO_PID 0xE40B /* PHI Fisco USB to Serial cable */ - -/* - * Definitions for ID TECH (www.idt-net.com) devices - */ -#define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */ -#define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */ - -/* - * Definitions for Omnidirectional Control Technology, Inc. devices - */ -#define OCT_VID 0x0B39 /* OCT vendor ID */ -/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */ -/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */ -/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */ -#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */ - -/* an infrared receiver for user access control with IR tags */ -#define FTDI_PIEGROUP_PID 0xF208 /* Product Id */ - -/* - * Definitions for Artemis astronomical USB based cameras - * Check it at http://www.artemisccd.co.uk/ - */ -#define FTDI_ARTEMIS_PID 0xDF28 /* All Artemis Cameras */ - -/* - * Definitions for ATIK Instruments astronomical USB based cameras - * Check it at http://www.atik-instruments.com/ - */ -#define FTDI_ATIK_ATK16_PID 0xDF30 /* ATIK ATK-16 Grayscale Camera */ -#define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */ -#define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */ -#define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */ -#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */ - -/* - * Protego product ids - */ -#define PROTEGO_SPECIAL_1 0xFC70 /* special/unknown device */ -#define PROTEGO_R2X0 0xFC71 /* R200-USB TRNG unit (R210, R220, and R230) */ -#define PROTEGO_SPECIAL_3 0xFC72 /* special/unknown device */ -#define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */ - -/* - * Gude Analog- und Digitalsysteme GmbH - */ -#define FTDI_GUDEADS_E808_PID 0xE808 -#define FTDI_GUDEADS_E809_PID 0xE809 -#define FTDI_GUDEADS_E80A_PID 0xE80A -#define FTDI_GUDEADS_E80B_PID 0xE80B -#define FTDI_GUDEADS_E80C_PID 0xE80C -#define FTDI_GUDEADS_E80D_PID 0xE80D -#define FTDI_GUDEADS_E80E_PID 0xE80E -#define FTDI_GUDEADS_E80F_PID 0xE80F -#define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */ -#define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */ -#define FTDI_GUDEADS_E88A_PID 0xE88A -#define FTDI_GUDEADS_E88B_PID 0xE88B -#define FTDI_GUDEADS_E88C_PID 0xE88C -#define FTDI_GUDEADS_E88D_PID 0xE88D -#define FTDI_GUDEADS_E88E_PID 0xE88E -#define FTDI_GUDEADS_E88F_PID 0xE88F - -/* - * Linx Technologies product ids - */ -#define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */ -#define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */ -#define LINX_FUTURE_0_PID 0xF44A /* Linx future device */ -#define LINX_FUTURE_1_PID 0xF44B /* Linx future device */ -#define LINX_FUTURE_2_PID 0xF44C /* Linx future device */ - -/* CCS Inc. ICDU/ICDU40 product ID - the FT232BM is used in an in-circuit-debugger */ -/* unit for PIC16's/PIC18's */ -#define FTDI_CCSICDU20_0_PID 0xF9D0 -#define FTDI_CCSICDU40_1_PID 0xF9D1 -#define FTDI_CCSMACHX_2_PID 0xF9D2 -#define FTDI_CCSLOAD_N_GO_3_PID 0xF9D3 -#define FTDI_CCSICDU64_4_PID 0xF9D4 -#define FTDI_CCSPRIME8_5_PID 0xF9D5 - -/* Inside Accesso contactless reader (http://www.insidefr.com) */ -#define INSIDE_ACCESSO 0xFAD0 - -/* - * Intrepid Control Systems (http://www.intrepidcs.com/) ValueCAN and NeoVI - */ -#define INTREPID_VID 0x093C -#define INTREPID_VALUECAN_PID 0x0601 -#define INTREPID_NEOVI_PID 0x0701 - -/* - * Falcom Wireless Communications GmbH - */ -#define FALCOM_VID 0x0F94 /* Vendor Id */ -#define FALCOM_TWIST_PID 0x0001 /* Falcom Twist USB GPRS modem */ -#define FALCOM_SAMBA_PID 0x0005 /* Falcom Samba USB GPRS modem */ - -/* - * SUUNTO product ids - */ -#define FTDI_SUUNTO_SPORTS_PID 0xF680 /* Suunto Sports instrument */ - -/* - * Oceanic product ids - */ -#define FTDI_OCEANIC_PID 0xF460 /* Oceanic dive instrument */ - -/* - * TTi (Thurlby Thandar Instruments) - */ -#define TTI_VID 0x103E /* Vendor Id */ -#define TTI_QL355P_PID 0x03E8 /* TTi QL355P power supply */ - -/* - * Definitions for B&B Electronics products. - */ -#define BANDB_VID 0x0856 /* B&B Electronics Vendor ID */ -#define BANDB_USOTL4_PID 0xAC01 /* USOTL4 Isolated RS-485 Converter */ -#define BANDB_USTL4_PID 0xAC02 /* USTL4 RS-485 Converter */ -#define BANDB_USO9ML2_PID 0xAC03 /* USO9ML2 Isolated RS-232 Converter */ - -/* - * RM Michaelides CANview USB (http://www.rmcan.com) - * CAN fieldbus interface adapter, added by port GmbH www.port.de) - * Ian Abbott changed the macro names for consistency. - */ -#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */ - -/* - * EVER Eco Pro UPS (http://www.ever.com.pl/) - */ - -#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */ - -/* - * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485, - * USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices - * and I'm not entirely sure which are used by which. - */ -#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0 -#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1 - -/* - * Mobility Electronics products. - */ -#define MOBILITY_VID 0x1342 -#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */ - -/* - * microHAM product IDs (http://www.microham.com). - * Submitted by Justin Burket (KL1RL) - * and Mike Studer (K6EEP) . - * Ian Abbott added a few more from the driver INF file. - */ -#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */ -#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */ -#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */ -#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */ -#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */ -#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */ -#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */ -#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */ - -/* - * Active Robots product ids. - */ -#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */ - -/* - * Xsens Technologies BV products (http://www.xsens.com). - */ -#define XSENS_CONVERTER_0_PID 0xD388 -#define XSENS_CONVERTER_1_PID 0xD389 -#define XSENS_CONVERTER_2_PID 0xD38A -#define XSENS_CONVERTER_3_PID 0xD38B -#define XSENS_CONVERTER_4_PID 0xD38C -#define XSENS_CONVERTER_5_PID 0xD38D -#define XSENS_CONVERTER_6_PID 0xD38E -#define XSENS_CONVERTER_7_PID 0xD38F - -/* - * Teratronik product ids. - * Submitted by O. Wölfelschneider. - */ -#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */ -#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */ - -/* - * Evolution Robotics products (http://www.evolution.com/). - * Submitted by Shawn M. Lavelle. - */ -#define EVOLUTION_VID 0xDEEE /* Vendor ID */ -#define EVOLUTION_ER1_PID 0x0300 /* ER1 Control Module */ -#define EVO_8U232AM_PID 0x02FF /* Evolution robotics RCM2 (FT232AM)*/ -#define EVO_HYBRID_PID 0x0302 /* Evolution robotics RCM4 PID (FT232BM)*/ -#define EVO_RCM4_PID 0x0303 /* Evolution robotics RCM4 PID */ - -/* Pyramid Computer GmbH */ -#define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */ - -/* - * NDI (www.ndigital.com) product ids - */ -#define FTDI_NDI_HUC_PID 0xDA70 /* NDI Host USB Converter */ -#define FTDI_NDI_SPECTRA_SCU_PID 0xDA71 /* NDI Spectra SCU */ -#define FTDI_NDI_FUTURE_2_PID 0xDA72 /* NDI future device #2 */ -#define FTDI_NDI_FUTURE_3_PID 0xDA73 /* NDI future device #3 */ -#define FTDI_NDI_AURORA_SCU_PID 0xDA74 /* NDI Aurora SCU */ - -/* - * Posiflex inc retail equipment (http://www.posiflex.com.tw) - */ -#define POSIFLEX_VID 0x0d3a /* Vendor ID */ -#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */ - -/* - * Westrex International devices submitted by Cory Lee - */ -#define FTDI_WESTREX_MODEL_777_PID 0xDC00 /* Model 777 */ -#define FTDI_WESTREX_MODEL_8900F_PID 0xDC01 /* Model 8900F */ - -/* - * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com) - */ -#define FTDI_RRCIRKITS_LOCOBUFFER_PID 0xc7d0 /* LocoBuffer USB */ - -/* - * Eclo (http://www.eclo.pt/) product IDs. - * PID 0xEA90 submitted by Martin Grill. - */ -#define FTDI_ECLO_COM_1WIRE_PID 0xEA90 /* COM to 1-Wire USB adaptor */ - -/* - * Papouch products (http://www.papouch.com/) - * Submitted by Folkert van Heusden - */ - -#define PAPOUCH_VID 0x5050 /* Vendor ID */ -#define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ -#define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ - -/* - * ACG Identification Technologies GmbH products (http://www.acg.de/). - * Submitted by anton -at- goto10 -dot- org. - */ -#define FTDI_ACG_HFDUAL_PID 0xDD20 /* HF Dual ISO Reader (RFID) */ - -/* - * Yost Engineering, Inc. products (www.yostengineering.com). - * PID 0xE050 submitted by Aaron Prose. - */ -#define FTDI_YEI_SERVOCENTER31_PID 0xE050 /* YEI ServoCenter3.1 USB */ - -/* - * ThorLabs USB motor drivers - */ -#define FTDI_THORLABS_PID 0xfaf0 /* ThorLabs USB motor drivers */ - -/* - * Testo products (http://www.testo.com/) - * Submitted by Colin Leroy - */ -#define TESTO_VID 0x128D -#define TESTO_USB_INTERFACE_PID 0x0001 - -/* - * Gamma Scout (http://gamma-scout.com/). Submitted by rsc@runtux.com. - */ -#define FTDI_GAMMA_SCOUT_PID 0xD678 /* Gamma Scout online */ - -/* - * Tactrix OpenPort (ECU) devices. - * OpenPort 1.3M submitted by Donour Sizemore. - * OpenPort 1.3S and 1.3U submitted by Ian Abbott. - */ -#define FTDI_TACTRIX_OPENPORT_13M_PID 0xCC48 /* OpenPort 1.3 Mitsubishi */ -#define FTDI_TACTRIX_OPENPORT_13S_PID 0xCC49 /* OpenPort 1.3 Subaru */ -#define FTDI_TACTRIX_OPENPORT_13U_PID 0xCC4A /* OpenPort 1.3 Universal */ - -/* - * Telldus Technologies */ -#define TELLDUS_VID 0x1781 /* Vendor ID */ -#define TELLDUS_TELLSTICK_PID 0x0C30 /* RF control dongle 433 MHz using FT232RL */ - -/* - * IBS elektronik product ids - * Submitted by Thomas Schleusener - */ -#define FTDI_IBS_US485_PID 0xff38 /* IBS US485 (USB<-->RS422/485 interface) */ -#define FTDI_IBS_PICPRO_PID 0xff39 /* IBS PIC-Programmer */ -#define FTDI_IBS_PCMCIA_PID 0xff3a /* IBS Card reader for PCMCIA SRAM-cards */ -#define FTDI_IBS_PK1_PID 0xff3b /* IBS PK1 - Particel counter */ -#define FTDI_IBS_RS232MON_PID 0xff3c /* IBS RS232 - Monitor */ -#define FTDI_IBS_APP70_PID 0xff3d /* APP 70 (dust monitoring system) */ -#define FTDI_IBS_PEDO_PID 0xff3e /* IBS PEDO-Modem (RF modem 868.35 MHz) */ -#define FTDI_IBS_PROD_PID 0xff3f /* future device */ - -/* - * MaxStream devices www.maxstream.net - */ -#define FTDI_MAXSTREAM_PID 0xEE18 /* Xbee PKG-U Module */ - -/* Olimex */ -#define OLIMEX_VID 0x15BA -#define OLIMEX_ARM_USB_OCD_PID 0x0003 - -/* Luminary Micro Stellaris Boards, VID = FTDI_VID */ -/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */ -#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8 -#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9 - -/* www.elsterelectricity.com Elster Unicom III Optical Probe */ -#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */ - -/* - * The Mobility Lab (TML) - * Submitted by Pierre Castella - */ -#define TML_VID 0x1B91 /* Vendor ID */ -#define TML_USB_SERIAL_PID 0x0064 /* USB - Serial Converter */ - -/* Propox devices */ -#define FTDI_PROPOX_JTAGCABLEII_PID 0xD738 - -/* Rig Expert Ukraine devices */ -#define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ - -/* Domintell products http://www.domintell.com */ -#define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */ -#define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */ - -/* Alti-2 products http://www.alti-2.com */ -#define ALTI2_VID 0x1BC9 -#define ALTI2_N3_PID 0x6001 /* Neptune 3 */ /* Commands */ #define FTDI_SIO_RESET 0 /* Reset the port */ @@ -896,86 +40,6 @@ #define INTERFACE_C 3 #define INTERFACE_D 4 -/* - * FIC / OpenMoko, Inc. http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v3 - * Submitted by Harald Welte - */ -#define FIC_VID 0x1457 -#define FIC_NEO1973_DEBUG_PID 0x5118 - -/* - * RATOC REX-USB60F - */ -#define RATOC_VENDOR_ID 0x0584 -#define RATOC_PRODUCT_ID_USB60F 0xb020 - -/* - * DIEBOLD BCS SE923 - */ -#define DIEBOLD_BCS_SE923_PID 0xfb99 - -/* - * Atmel STK541 - */ -#define ATMEL_VID 0x03eb /* Vendor ID */ -#define STK541_PID 0x2109 /* Zigbee Controller */ - -/* - * Dresden Elektronic Sensor Terminal Board - */ -#define DE_VID 0x1cf1 /* Vendor ID */ -#define STB_PID 0x0001 /* Sensor Terminal Board */ -#define WHT_PID 0x0004 /* Wireless Handheld Terminal */ - -/* - * Blackfin gnICE JTAG - * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice - */ -#define ADI_VID 0x0456 -#define ADI_GNICE_PID 0xF000 -#define ADI_GNICEPLUS_PID 0xF001 - -/* - * JETI SPECTROMETER SPECBOS 1201 - * http://www.jeti.com/products/sys/scb/scb1201.php - */ -#define JETI_VID 0x0c6c -#define JETI_SPC1201_PID 0x04b2 - -/* - * Marvell SheevaPlug - */ -#define MARVELL_VID 0x9e88 -#define MARVELL_SHEEVAPLUG_PID 0x9e8f - -#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */ - -/* - * GN Otometrics (http://www.otometrics.com) - * Submitted by Ville Sundberg. - */ -#define GN_OTOMETRICS_VID 0x0c33 /* Vendor ID */ -#define AURICAL_USB_PID 0x0010 /* Aurical USB Audiometer */ - -/* - * Bayer Ascensia Contour blood glucose meter USB-converter cable. - * http://winglucofacts.com/cables/ - */ -#define BAYER_VID 0x1A79 -#define BAYER_CONTOUR_CABLE_PID 0x6001 - -/* - * Marvell OpenRD Base, Client - * http://www.open-rd.org - * OpenRD Base, Client use VID 0x0403 - */ -#define MARVELL_OPENRD_PID 0x9e90 - -/* - * Hameg HO820 and HO870 interface (using VID 0x0403) - */ -#define HAMEG_HO820_PID 0xed74 -#define HAMEG_HO870_PID 0xed71 /* * BmRequestType: 1100 0000b @@ -1490,4 +554,3 @@ * B2..7 Length of message - (not including Byte 0) * */ - --- linux-2.6.32.orig/drivers/usb/serial/cp210x.c +++ linux-2.6.32/drivers/usb/serial/cp210x.c @@ -91,11 +91,12 @@ { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */ { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */ { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ + { USB_DEVICE(0x10C4, 0x81E8) }, /* Zephyr Bioharness */ { USB_DEVICE(0x10C4, 0x81F2) }, /* C1007 HF band RFID controller */ { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demostration module */ - { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ + { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesys ETRX2USB */ { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */ --- linux-2.6.32.orig/drivers/usb/musb/musb_gadget_ep0.c +++ linux-2.6.32/drivers/usb/musb/musb_gadget_ep0.c @@ -199,7 +199,6 @@ static void musb_g_ep0_giveback(struct musb *musb, struct usb_request *req) { musb_g_giveback(&musb->endpoints[0].ep_in, req, 0); - musb->ep0_state = MUSB_EP0_STAGE_SETUP; } /* @@ -648,7 +647,7 @@ musb->ep0_state = MUSB_EP0_STAGE_STATUSIN; break; default: - ERR("SetupEnd came in a wrong ep0stage %s", + ERR("SetupEnd came in a wrong ep0stage %s\n", decode_ep0stage(musb->ep0_state)); } csr = musb_readw(regs, MUSB_CSR0); @@ -771,12 +770,18 @@ handled = service_zero_data_request( musb, &setup); + /* + * We're expecting no data in any case, so + * always set the DATAEND bit -- doing this + * here helps avoid SetupEnd interrupt coming + * in the idle stage when we're stalling... + */ + musb->ackpend |= MUSB_CSR0_P_DATAEND; + /* status stage might be immediate */ - if (handled > 0) { - musb->ackpend |= MUSB_CSR0_P_DATAEND; + if (handled > 0) musb->ep0_state = MUSB_EP0_STAGE_STATUSIN; - } break; /* sequence #1 (IN to host), includes GET_STATUS --- linux-2.6.32.orig/drivers/usb/core/usb.c +++ linux-2.6.32/drivers/usb/core/usb.c @@ -132,7 +132,7 @@ struct find_interface_arg { int minor; - struct usb_interface *interface; + struct device_driver *drv; }; static int __find_interface(struct device *dev, void *data) @@ -143,12 +143,10 @@ if (!is_usb_interface(dev)) return 0; + if (dev->driver != arg->drv) + return 0; intf = to_usb_interface(dev); - if (intf->minor != -1 && intf->minor == arg->minor) { - arg->interface = intf; - return 1; - } - return 0; + return intf->minor == arg->minor; } /** @@ -156,21 +154,24 @@ * @drv: the driver whose current configuration is considered * @minor: the minor number of the desired device * - * This walks the driver device list and returns a pointer to the interface - * with the matching minor. Note, this only works for devices that share the - * USB major number. + * This walks the bus device list and returns a pointer to the interface + * with the matching minor and driver. Note, this only works for devices + * that share the USB major number. */ struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor) { struct find_interface_arg argb; - int retval; + struct device *dev; argb.minor = minor; - argb.interface = NULL; - /* eat the error, it will be in argb.interface */ - retval = driver_for_each_device(&drv->drvwrap.driver, NULL, &argb, - __find_interface); - return argb.interface; + argb.drv = &drv->drvwrap.driver; + + dev = bus_find_device(&usb_bus_type, NULL, &argb, __find_interface); + + /* Drop reference count from bus_find_device */ + put_device(dev); + + return dev ? to_usb_interface(dev) : NULL; } EXPORT_SYMBOL_GPL(usb_find_interface); @@ -190,9 +191,6 @@ hcd = bus_to_hcd(udev->bus); usb_destroy_configuration(udev); - /* Root hubs aren't real devices, so don't free HCD resources */ - if (hcd->driver->free_dev && udev->parent) - hcd->driver->free_dev(hcd, udev); usb_put_hcd(hcd); kfree(udev->product); kfree(udev->manufacturer); --- linux-2.6.32.orig/drivers/usb/core/hub.c +++ linux-2.6.32/drivers/usb/core/hub.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -1508,6 +1509,15 @@ #endif +static void hub_free_dev(struct usb_device *udev) +{ + struct usb_hcd *hcd = bus_to_hcd(udev->bus); + + /* Root hubs aren't real devices, so don't free HCD resources */ + if (hcd->driver->free_dev && udev->parent) + hcd->driver->free_dev(hcd, udev); +} + /** * usb_disconnect - disconnect a device (usbcore-internal) * @pdev: pointer to device being disconnected @@ -1578,6 +1588,8 @@ usb_stop_pm(udev); + hub_free_dev(udev); + put_device(&udev->dev); } @@ -1612,12 +1624,12 @@ #endif /** - * usb_configure_device_otg - FIXME (usbcore-internal) + * usb_enumerate_device_otg - FIXME (usbcore-internal) * @udev: newly addressed device (in ADDRESS state) * - * Do configuration for On-The-Go devices + * Finish enumeration for On-The-Go devices */ -static int usb_configure_device_otg(struct usb_device *udev) +static int usb_enumerate_device_otg(struct usb_device *udev) { int err = 0; @@ -1688,7 +1700,7 @@ /** - * usb_configure_device - Detect and probe device intfs/otg (usbcore-internal) + * usb_enumerate_device - Read device configs/intfs/otg (usbcore-internal) * @udev: newly addressed device (in ADDRESS state) * * This is only called by usb_new_device() and usb_authorize_device() @@ -1699,7 +1711,7 @@ * the string descriptors, as they will be errored out by the device * until it has been authorized. */ -static int usb_configure_device(struct usb_device *udev) +static int usb_enumerate_device(struct usb_device *udev) { int err; @@ -1723,7 +1735,7 @@ udev->descriptor.iManufacturer); udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber); } - err = usb_configure_device_otg(udev); + err = usb_enumerate_device_otg(udev); fail: return err; } @@ -1733,8 +1745,8 @@ * usb_new_device - perform initial device setup (usbcore-internal) * @udev: newly addressed device (in ADDRESS state) * - * This is called with devices which have been enumerated, but not yet - * configured. The device descriptor is available, but not descriptors + * This is called with devices which have been detected but not fully + * enumerated. The device descriptor is available, but not descriptors * for any device configuration. The caller must have locked either * the parent hub (if udev is a normal device) or else the * usb_bus_list_lock (if udev is a root hub). The parent's pointer to @@ -1757,8 +1769,8 @@ if (udev->parent) usb_autoresume_device(udev->parent); - usb_detect_quirks(udev); /* Determine quirks */ - err = usb_configure_device(udev); /* detect & probe dev/intfs */ + usb_detect_quirks(udev); + err = usb_enumerate_device(udev); /* Read descriptors */ if (err < 0) goto fail; dev_dbg(&udev->dev, "udev %d, busnum %d, minor = %d\n", @@ -1803,23 +1815,36 @@ */ int usb_deauthorize_device(struct usb_device *usb_dev) { - unsigned cnt; + char *product = NULL; + char *manufacturer = NULL; + char *serial = NULL; + usb_lock_device(usb_dev); if (usb_dev->authorized == 0) goto out_unauthorized; + usb_dev->authorized = 0; usb_set_configuration(usb_dev, -1); + + product = usb_dev->product; + manufacturer = usb_dev->manufacturer; + serial = usb_dev->serial; + usb_dev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL); usb_dev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL); usb_dev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL); - kfree(usb_dev->config); - usb_dev->config = NULL; - for (cnt = 0; cnt < usb_dev->descriptor.bNumConfigurations; cnt++) - kfree(usb_dev->rawdescriptors[cnt]); + + usb_destroy_configuration(usb_dev); usb_dev->descriptor.bNumConfigurations = 0; - kfree(usb_dev->rawdescriptors); + out_unauthorized: usb_unlock_device(usb_dev); + if (product || manufacturer || serial) { + synchronize_rcu(); + kfree(product); + kfree(manufacturer); + kfree(serial); + } return 0; } @@ -1827,15 +1852,14 @@ int usb_authorize_device(struct usb_device *usb_dev) { int result = 0, c; + char *product = NULL; + char *manufacturer = NULL; + char *serial = NULL; + usb_lock_device(usb_dev); if (usb_dev->authorized == 1) goto out_authorized; - kfree(usb_dev->product); - usb_dev->product = NULL; - kfree(usb_dev->manufacturer); - usb_dev->manufacturer = NULL; - kfree(usb_dev->serial); - usb_dev->serial = NULL; + result = usb_autoresume_device(usb_dev); if (result < 0) { dev_err(&usb_dev->dev, @@ -1848,10 +1872,19 @@ "authorization: %d\n", result); goto error_device_descriptor; } + + product = usb_dev->product; + manufacturer = usb_dev->manufacturer; + serial = usb_dev->serial; + + usb_dev->product = NULL; + usb_dev->manufacturer = NULL; + usb_dev->serial = NULL; + usb_dev->authorized = 1; - result = usb_configure_device(usb_dev); + result = usb_enumerate_device(usb_dev); if (result < 0) - goto error_configure; + goto error_enumerate; /* Choose and set the configuration. This registers the interfaces * with the driver core and lets interface drivers bind to them. */ @@ -1866,11 +1899,19 @@ } } dev_info(&usb_dev->dev, "authorized to connect\n"); -error_configure: + +error_enumerate: error_device_descriptor: + usb_autosuspend_device(usb_dev); error_autoresume: out_authorized: usb_unlock_device(usb_dev); // complements locktree + if (product || manufacturer || serial) { + synchronize_rcu(); + kfree(product); + kfree(manufacturer); + kfree(serial); + } return result; } @@ -3122,6 +3163,7 @@ loop: usb_ep0_reinit(udev); release_address(udev); + hub_free_dev(udev); usb_put_dev(udev); if ((status == -ENOTCONN) || (status == -ENOTSUPP)) break; @@ -3278,6 +3320,9 @@ USB_PORT_FEAT_C_SUSPEND); udev = hdev->children[i-1]; if (udev) { + /* TRSMRCY = 10 msec */ + msleep(10); + usb_lock_device(udev); ret = remote_wakeup(hdev-> children[i-1]); --- linux-2.6.32.orig/drivers/usb/core/message.c +++ linux-2.6.32/drivers/usb/core/message.c @@ -911,11 +911,11 @@ if (index <= 0) return NULL; - buf = kmalloc(MAX_USB_STRING_SIZE, GFP_KERNEL); + buf = kmalloc(MAX_USB_STRING_SIZE, GFP_NOIO); if (buf) { len = usb_string(udev, index, buf, MAX_USB_STRING_SIZE); if (len > 0) { - smallbuf = kmalloc(++len, GFP_KERNEL); + smallbuf = kmalloc(++len, GFP_NOIO); if (!smallbuf) return buf; memcpy(smallbuf, buf, len); @@ -1682,7 +1682,7 @@ if (cp) { nintf = cp->desc.bNumInterfaces; new_interfaces = kmalloc(nintf * sizeof(*new_interfaces), - GFP_KERNEL); + GFP_NOIO); if (!new_interfaces) { dev_err(&dev->dev, "Out of memory\n"); return -ENOMEM; @@ -1691,7 +1691,7 @@ for (; n < nintf; ++n) { new_interfaces[n] = kzalloc( sizeof(struct usb_interface), - GFP_KERNEL); + GFP_NOIO); if (!new_interfaces[n]) { dev_err(&dev->dev, "Out of memory\n"); ret = -ENOMEM; --- linux-2.6.32.orig/drivers/usb/core/hcd.h +++ linux-2.6.32/drivers/usb/core/hcd.h @@ -234,7 +234,7 @@ /* xHCI specific functions */ /* Called by usb_alloc_dev to alloc HC device structures */ int (*alloc_dev)(struct usb_hcd *, struct usb_device *); - /* Called by usb_release_dev to free HC device structures */ + /* Called by usb_disconnect to free HC device structures */ void (*free_dev)(struct usb_hcd *, struct usb_device *); /* Bandwidth computation functions */ --- linux-2.6.32.orig/drivers/usb/core/devio.c +++ linux-2.6.32/drivers/usb/core/devio.c @@ -1176,6 +1176,13 @@ free_async(as); return -ENOMEM; } + /* Isochronous input data may end up being discontiguous + * if some of the packets are short. Clear the buffer so + * that the gaps don't leak kernel data to userspace. + */ + if (is_in && uurb->type == USBDEVFS_URB_TYPE_ISO) + memset(as->urb->transfer_buffer, 0, + uurb->buffer_length); } as->urb->dev = ps->dev; as->urb->pipe = (uurb->type << 30) | @@ -1312,10 +1319,14 @@ void __user *addr = as->userurb; unsigned int i; - if (as->userbuffer) - if (copy_to_user(as->userbuffer, urb->transfer_buffer, - urb->transfer_buffer_length)) + if (as->userbuffer && urb->actual_length) { + if (urb->number_of_packets > 0) /* Isochronous */ + i = urb->transfer_buffer_length; + else /* Non-Isoc */ + i = urb->actual_length; + if (copy_to_user(as->userbuffer, urb->transfer_buffer, i)) goto err_out; + } if (put_user(as->status, &userurb->status)) goto err_out; if (put_user(urb->actual_length, &userurb->actual_length)) @@ -1334,14 +1345,11 @@ } } - free_async(as); - if (put_user(addr, (void __user * __user *)arg)) return -EFAULT; return 0; err_out: - free_async(as); return -EFAULT; } @@ -1371,8 +1379,11 @@ static int proc_reapurb(struct dev_state *ps, void __user *arg) { struct async *as = reap_as(ps); - if (as) - return processcompl(as, (void __user * __user *)arg); + if (as) { + int retval = processcompl(as, (void __user * __user *)arg); + free_async(as); + return retval; + } if (signal_pending(current)) return -EINTR; return -EIO; @@ -1380,11 +1391,16 @@ static int proc_reapurbnonblock(struct dev_state *ps, void __user *arg) { + int retval; struct async *as; - if (!(as = async_getcompleted(ps))) - return -EAGAIN; - return processcompl(as, (void __user * __user *)arg); + as = async_getcompleted(ps); + retval = -EAGAIN; + if (as) { + retval = processcompl(as, (void __user * __user *)arg); + free_async(as); + } + return retval; } #ifdef CONFIG_COMPAT @@ -1435,9 +1451,9 @@ void __user *addr = as->userurb; unsigned int i; - if (as->userbuffer) + if (as->userbuffer && urb->actual_length) if (copy_to_user(as->userbuffer, urb->transfer_buffer, - urb->transfer_buffer_length)) + urb->actual_length)) return -EFAULT; if (put_user(as->status, &userurb->status)) return -EFAULT; @@ -1457,7 +1473,6 @@ } } - free_async(as); if (put_user(ptr_to_compat(addr), (u32 __user *)arg)) return -EFAULT; return 0; @@ -1466,8 +1481,11 @@ static int proc_reapurb_compat(struct dev_state *ps, void __user *arg) { struct async *as = reap_as(ps); - if (as) - return processcompl_compat(as, (void __user * __user *)arg); + if (as) { + int retval = processcompl_compat(as, (void __user * __user *)arg); + free_async(as); + return retval; + } if (signal_pending(current)) return -EINTR; return -EIO; @@ -1475,11 +1493,16 @@ static int proc_reapurbnonblock_compat(struct dev_state *ps, void __user *arg) { + int retval; struct async *as; - if (!(as = async_getcompleted(ps))) - return -EAGAIN; - return processcompl_compat(as, (void __user * __user *)arg); + retval = -EAGAIN; + as = async_getcompleted(ps); + if (as) { + retval = processcompl_compat(as, (void __user * __user *)arg); + free_async(as); + } + return retval; } #endif --- linux-2.6.32.orig/drivers/usb/core/inode.c +++ linux-2.6.32/drivers/usb/core/inode.c @@ -515,13 +515,13 @@ *dentry = NULL; mutex_lock(&parent->d_inode->i_mutex); *dentry = lookup_one_len(name, parent, strlen(name)); - if (!IS_ERR(dentry)) { + if (!IS_ERR(*dentry)) { if ((mode & S_IFMT) == S_IFDIR) error = usbfs_mkdir (parent->d_inode, *dentry, mode); else error = usbfs_create (parent->d_inode, *dentry, mode); } else - error = PTR_ERR(dentry); + error = PTR_ERR(*dentry); mutex_unlock(&parent->d_inode->i_mutex); return error; --- linux-2.6.32.orig/drivers/usb/core/generic.c +++ linux-2.6.32/drivers/usb/core/generic.c @@ -120,7 +120,7 @@ * than a vendor-specific driver. */ else if (udev->descriptor.bDeviceClass != USB_CLASS_VENDOR_SPEC && - (!desc || desc->bInterfaceClass != + (desc && desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC)) { best = c; break; --- linux-2.6.32.orig/drivers/usb/core/sysfs.c +++ linux-2.6.32/drivers/usb/core/sysfs.c @@ -82,9 +82,13 @@ struct device_attribute *attr, char *buf) \ { \ struct usb_device *udev; \ + int retval; \ \ udev = to_usb_device(dev); \ - return sprintf(buf, "%s\n", udev->name); \ + rcu_read_lock(); \ + retval = sprintf(buf, "%s\n", rcu_dereference(udev->name)); \ + rcu_read_unlock(); \ + return retval; \ } \ static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL); @@ -111,6 +115,12 @@ case USB_SPEED_HIGH: speed = "480"; break; + case USB_SPEED_VARIABLE: + speed = "480"; + break; + case USB_SPEED_SUPER: + speed = "5000"; + break; default: speed = "unknown"; } --- linux-2.6.32.orig/drivers/usb/core/driver.c +++ linux-2.6.32/drivers/usb/core/driver.c @@ -625,9 +625,6 @@ { struct usb_device *usb_dev; - /* driver is often null here; dev_dbg() would oops */ - pr_debug("usb %s: uevent\n", dev_name(dev)); - if (is_usb_device(dev)) { usb_dev = to_usb_device(dev); } else if (is_usb_interface(dev)) { @@ -639,6 +636,7 @@ } if (usb_dev->devnum < 0) { + /* driver is often null here; dev_dbg() would oops */ pr_debug("usb %s: already deleted?\n", dev_name(dev)); return -ENODEV; } @@ -1177,9 +1175,8 @@ udev->state == USB_STATE_SUSPENDED) goto done; - udev->do_remote_wakeup = device_may_wakeup(&udev->dev); - if (msg.event & PM_EVENT_AUTO) { + udev->do_remote_wakeup = device_may_wakeup(&udev->dev); status = autosuspend_check(udev, 0); if (status < 0) goto done; @@ -1744,6 +1741,34 @@ return status; } +static void choose_wakeup(struct usb_device *udev, pm_message_t msg) +{ + int w, i; + struct usb_interface *intf; + + /* Remote wakeup is needed only when we actually go to sleep. + * For things like FREEZE and QUIESCE, if the device is already + * autosuspended then its current wakeup setting is okay. + */ + if (msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_QUIESCE) { + udev->do_remote_wakeup = 0; + return; + } + + /* If remote wakeup is permitted, see whether any interface drivers + * actually want it. + */ + w = 0; + if (device_may_wakeup(&udev->dev) && udev->actconfig) { + for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) { + intf = udev->actconfig->interface[i]; + w |= intf->needs_remote_wakeup; + } + } + + udev->do_remote_wakeup = w; +} + int usb_suspend(struct device *dev, pm_message_t msg) { struct usb_device *udev; @@ -1763,6 +1788,7 @@ } udev->skip_sys_resume = 0; + choose_wakeup(udev, msg); return usb_external_suspend_device(udev, msg); } --- linux-2.6.32.orig/drivers/usb/core/hcd.c +++ linux-2.6.32/drivers/usb/core/hcd.c @@ -140,7 +140,7 @@ 0x09, /* __u8 bMaxPacketSize0; 2^9 = 512 Bytes */ 0x6b, 0x1d, /* __le16 idVendor; Linux Foundation */ - 0x02, 0x00, /* __le16 idProduct; device 0x0002 */ + 0x03, 0x00, /* __le16 idProduct; device 0x0003 */ KERNEL_VER, KERNEL_REL, /* __le16 bcdDevice */ 0x03, /* __u8 iManufacturer; */ --- linux-2.6.32.orig/drivers/usb/core/devices.c +++ linux-2.6.32/drivers/usb/core/devices.c @@ -494,7 +494,7 @@ return 0; /* allocate 2^1 pages = 8K (on i386); * should be more than enough for one device */ - pages_start = (char *)__get_free_pages(GFP_KERNEL, 1); + pages_start = (char *)__get_free_pages(GFP_NOIO, 1); if (!pages_start) return -ENOMEM; --- linux-2.6.32.orig/drivers/usb/class/cdc-acm.c +++ linux-2.6.32/drivers/usb/class/cdc-acm.c @@ -170,6 +170,7 @@ { wb->use = 0; acm->transmitting--; + usb_autopm_put_interface_async(acm->control); } /* @@ -211,9 +212,12 @@ } dbg("%s susp_count: %d", __func__, acm->susp_count); + usb_autopm_get_interface_async(acm->control); if (acm->susp_count) { - acm->delayed_wb = wb; - schedule_work(&acm->waker); + if (!acm->delayed_wb) + acm->delayed_wb = wb; + else + usb_autopm_put_interface_async(acm->control); spin_unlock_irqrestore(&acm->write_lock, flags); return 0; /* A white lie */ } @@ -534,23 +538,6 @@ tty_kref_put(tty); } -static void acm_waker(struct work_struct *waker) -{ - struct acm *acm = container_of(waker, struct acm, waker); - int rv; - - rv = usb_autopm_get_interface(acm->control); - if (rv < 0) { - dev_err(&acm->dev->dev, "Autopm failure in %s\n", __func__); - return; - } - if (acm->delayed_wb) { - acm_start_wb(acm, acm->delayed_wb); - acm->delayed_wb = NULL; - } - usb_autopm_put_interface(acm->control); -} - /* * TTY handlers */ @@ -1178,7 +1165,6 @@ acm->urb_task.func = acm_rx_tasklet; acm->urb_task.data = (unsigned long) acm; INIT_WORK(&acm->work, acm_softint); - INIT_WORK(&acm->waker, acm_waker); init_waitqueue_head(&acm->drain_wait); spin_lock_init(&acm->throttle_lock); spin_lock_init(&acm->write_lock); @@ -1343,7 +1329,6 @@ tasklet_enable(&acm->urb_task); cancel_work_sync(&acm->work); - cancel_work_sync(&acm->waker); } static void acm_disconnect(struct usb_interface *intf) @@ -1435,6 +1420,7 @@ static int acm_resume(struct usb_interface *intf) { struct acm *acm = usb_get_intfdata(intf); + struct acm_wb *wb; int rv = 0; int cnt; @@ -1449,6 +1435,21 @@ mutex_lock(&acm->mutex); if (acm->port.count) { rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO); + + spin_lock_irq(&acm->write_lock); + if (acm->delayed_wb) { + wb = acm->delayed_wb; + acm->delayed_wb = NULL; + spin_unlock_irq(&acm->write_lock); + acm_start_wb(acm, wb); + } else { + spin_unlock_irq(&acm->write_lock); + } + + /* + * delayed error checking because we must + * do the write path at all cost + */ if (rv < 0) goto err_out; --- linux-2.6.32.orig/drivers/usb/class/usbtmc.c +++ linux-2.6.32/drivers/usb/class/usbtmc.c @@ -562,10 +562,16 @@ n_bytes = roundup(12 + this_part, 4); memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part)); - retval = usb_bulk_msg(data->usb_dev, - usb_sndbulkpipe(data->usb_dev, - data->bulk_out), - buffer, n_bytes, &actual, USBTMC_TIMEOUT); + do { + retval = usb_bulk_msg(data->usb_dev, + usb_sndbulkpipe(data->usb_dev, + data->bulk_out), + buffer, n_bytes, + &actual, USBTMC_TIMEOUT); + if (retval != 0) + break; + n_bytes -= actual; + } while (n_bytes); data->bTag_last_write = data->bTag; data->bTag++; --- linux-2.6.32.orig/drivers/usb/class/cdc-acm.h +++ linux-2.6.32/drivers/usb/class/cdc-acm.h @@ -112,7 +112,6 @@ struct mutex mutex; struct usb_cdc_line_coding line; /* bits, stop, parity */ struct work_struct work; /* work queue entry for line discipline waking up */ - struct work_struct waker; wait_queue_head_t drain_wait; /* close processing */ struct tasklet_struct urb_task; /* rx processing */ spinlock_t throttle_lock; /* synchronize throtteling and read callback */ --- linux-2.6.32.orig/drivers/usb/storage/usb.c +++ linux-2.6.32/drivers/usb/storage/usb.c @@ -228,6 +228,7 @@ if (data_len<36) // You lose. return; + memset(data+8, ' ', 28); if(data[0]&0x20) { /* USB device currently not connected. Return peripheral qualifier 001b ("...however, the physical device is not currently connected @@ -237,15 +238,15 @@ device, it may return zeros or ASCII spaces (20h) in those fields until the data is available from the device."). */ - memset(data+8,0,28); } else { u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice); - memcpy(data+8, us->unusual_dev->vendorName, - strlen(us->unusual_dev->vendorName) > 8 ? 8 : - strlen(us->unusual_dev->vendorName)); - memcpy(data+16, us->unusual_dev->productName, - strlen(us->unusual_dev->productName) > 16 ? 16 : - strlen(us->unusual_dev->productName)); + int n; + + n = strlen(us->unusual_dev->vendorName); + memcpy(data+8, us->unusual_dev->vendorName, min(8, n)); + n = strlen(us->unusual_dev->productName); + memcpy(data+16, us->unusual_dev->productName, min(16, n)); + data[32] = 0x30 + ((bcdDevice>>12) & 0x0F); data[33] = 0x30 + ((bcdDevice>>8) & 0x0F); data[34] = 0x30 + ((bcdDevice>>4) & 0x0F); @@ -429,7 +430,8 @@ u16 vid = le16_to_cpu(us->pusb_dev->descriptor.idVendor); u16 pid = le16_to_cpu(us->pusb_dev->descriptor.idProduct); unsigned f = 0; - unsigned int mask = (US_FL_SANE_SENSE | US_FL_FIX_CAPACITY | + unsigned int mask = (US_FL_SANE_SENSE | US_FL_BAD_SENSE | + US_FL_FIX_CAPACITY | US_FL_CAPACITY_HEURISTICS | US_FL_IGNORE_DEVICE | US_FL_NOT_LOCKABLE | US_FL_MAX_SECTORS_64 | US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE | @@ -459,6 +461,9 @@ case 'a': f |= US_FL_SANE_SENSE; break; + case 'b': + f |= US_FL_BAD_SENSE; + break; case 'c': f |= US_FL_FIX_CAPACITY; break; --- linux-2.6.32.orig/drivers/usb/storage/transport.c +++ linux-2.6.32/drivers/usb/storage/transport.c @@ -666,10 +666,11 @@ * to wait for at least one CHECK_CONDITION to determine * SANE_SENSE support */ - if ((srb->cmnd[0] == ATA_16 || srb->cmnd[0] == ATA_12) && + if (unlikely((srb->cmnd[0] == ATA_16 || srb->cmnd[0] == ATA_12) && result == USB_STOR_TRANSPORT_GOOD && !(us->fflags & US_FL_SANE_SENSE) && - !(srb->cmnd[2] & 0x20)) { + !(us->fflags & US_FL_BAD_SENSE) && + !(srb->cmnd[2] & 0x20))) { US_DEBUGP("-- SAT supported, increasing auto-sense\n"); us->fflags |= US_FL_SANE_SENSE; } @@ -718,6 +719,12 @@ if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) { US_DEBUGP("-- auto-sense aborted\n"); srb->result = DID_ABORT << 16; + + /* If SANE_SENSE caused this problem, disable it */ + if (sense_size != US_SENSE_SIZE) { + us->fflags &= ~US_FL_SANE_SENSE; + us->fflags |= US_FL_BAD_SENSE; + } goto Handle_Errors; } @@ -727,10 +734,11 @@ * (small) sense request. This fixes some USB GSM modems */ if (temp_result == USB_STOR_TRANSPORT_FAILED && - (us->fflags & US_FL_SANE_SENSE) && - sense_size != US_SENSE_SIZE) { + sense_size != US_SENSE_SIZE) { US_DEBUGP("-- auto-sense failure, retry small sense\n"); sense_size = US_SENSE_SIZE; + us->fflags &= ~US_FL_SANE_SENSE; + us->fflags |= US_FL_BAD_SENSE; goto Retry_Sense; } @@ -754,6 +762,7 @@ */ if (srb->sense_buffer[7] > (US_SENSE_SIZE - 8) && !(us->fflags & US_FL_SANE_SENSE) && + !(us->fflags & US_FL_BAD_SENSE) && (srb->sense_buffer[0] & 0x7C) == 0x70) { US_DEBUGP("-- SANE_SENSE support enabled\n"); us->fflags |= US_FL_SANE_SENSE; --- linux-2.6.32.orig/drivers/usb/storage/unusual_devs.h +++ linux-2.6.32/drivers/usb/storage/unusual_devs.h @@ -818,6 +818,13 @@ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_CAPACITY ), +/* Reported by Daniel Kukula */ +UNUSUAL_DEV( 0x067b, 0x1063, 0x0100, 0x0100, + "Prolific Technology, Inc.", + "Prolific Storage Gadget", + US_SC_DEVICE, US_PR_DEVICE, NULL, + US_FL_BAD_SENSE ), + /* Reported by Rogerio Brito */ UNUSUAL_DEV( 0x067b, 0x2317, 0x0001, 0x001, "Prolific Technology, Inc.", @@ -1129,6 +1136,13 @@ US_SC_DEVICE, US_PR_DEVICE, option_ms_init, 0), +/* Reported by Timo Aaltonen */ +UNUSUAL_DEV( 0x0af0, 0x7011, 0x0000, 0x9999, + "Option", + "Mass Storage", + US_SC_DEVICE, US_PR_DEVICE, option_ms_init, + 0 ), + /* Reported by F. Aben * This device (wrongly) has a vendor-specific device descriptor. * The entry is needed so usb-storage can bind to it's mass-storage @@ -1140,8 +1154,8 @@ 0 ), /* Reported by Jan Dumon - * This device (wrongly) has a vendor-specific device descriptor. - * The entry is needed so usb-storage can bind to it's mass-storage + * These devices (wrongly) have a vendor-specific device descriptor. + * These entries are needed so usb-storage can bind to their mass-storage * interface as an interface driver */ UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000, "Option", @@ -1149,6 +1163,90 @@ US_SC_DEVICE, US_PR_DEVICE, NULL, 0 ), +UNUSUAL_DEV( 0x0af0, 0x7701, 0x0000, 0x0000, + "Option", + "GI 0451 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x7706, 0x0000, 0x0000, + "Option", + "GI 0451 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x7901, 0x0000, 0x0000, + "Option", + "GI 0452 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x7A01, 0x0000, 0x0000, + "Option", + "GI 0461 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x7A05, 0x0000, 0x0000, + "Option", + "GI 0461 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x8300, 0x0000, 0x0000, + "Option", + "GI 033x SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x8302, 0x0000, 0x0000, + "Option", + "GI 033x SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0000, + "Option", + "GI 033x SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0xc100, 0x0000, 0x0000, + "Option", + "GI 070x SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0xd057, 0x0000, 0x0000, + "Option", + "GI 1505 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0xd058, 0x0000, 0x0000, + "Option", + "GI 1509 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0xd157, 0x0000, 0x0000, + "Option", + "GI 1515 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0xd257, 0x0000, 0x0000, + "Option", + "GI 1215 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + +UNUSUAL_DEV( 0x0af0, 0xd357, 0x0000, 0x0000, + "Option", + "GI 1505 SD-Card", + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + /* Reported by Ben Efros */ UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000, "Seagate", @@ -1800,13 +1898,6 @@ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_GO_SLOW ), -/* Reported by Rohan Hart */ -UNUSUAL_DEV( 0x2770, 0x915d, 0x0010, 0x0010, - "INTOVA", - "Pixtreme", - US_SC_DEVICE, US_PR_DEVICE, NULL, - US_FL_FIX_CAPACITY ), - /* Reported by Frederic Marchal * Mio Moov 330 */ --- linux-2.6.32.orig/drivers/usb/misc/emi62.c +++ linux-2.6.32/drivers/usb/misc/emi62.c @@ -167,7 +167,7 @@ err("%s - error loading firmware: error = %d", __func__, err); goto wraperr; } - } while (i > 0); + } while (rec); /* Assert reset (stop the CPU in the EMI) */ err = emi62_set_reset(dev,1); --- linux-2.6.32.orig/drivers/usb/misc/appledisplay.c +++ linux-2.6.32/drivers/usb/misc/appledisplay.c @@ -72,8 +72,8 @@ struct usb_device *udev; /* usb device */ struct urb *urb; /* usb request block */ struct backlight_device *bd; /* backlight device */ - char *urbdata; /* interrupt URB data buffer */ - char *msgdata; /* control message data buffer */ + u8 *urbdata; /* interrupt URB data buffer */ + u8 *msgdata; /* control message data buffer */ struct delayed_work work; int button_pressed; --- linux-2.6.32.orig/drivers/usb/misc/sisusbvga/sisusb.c +++ linux-2.6.32/drivers/usb/misc/sisusbvga/sisusb.c @@ -3245,6 +3245,7 @@ { USB_DEVICE(0x0711, 0x0902) }, { USB_DEVICE(0x0711, 0x0903) }, { USB_DEVICE(0x0711, 0x0918) }, + { USB_DEVICE(0x0711, 0x0920) }, { USB_DEVICE(0x182d, 0x021c) }, { USB_DEVICE(0x182d, 0x0269) }, { } --- linux-2.6.32.orig/drivers/mtd/ubi/vtbl.c +++ linux-2.6.32/drivers/mtd/ubi/vtbl.c @@ -566,6 +566,7 @@ vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs); vol->alignment = be32_to_cpu(vtbl[i].alignment); vol->data_pad = be32_to_cpu(vtbl[i].data_pad); + vol->upd_marker = vtbl[i].upd_marker; vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ? UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME; vol->name_len = be16_to_cpu(vtbl[i].name_len); --- linux-2.6.32.orig/drivers/mtd/ubi/upd.c +++ linux-2.6.32/drivers/mtd/ubi/upd.c @@ -147,12 +147,15 @@ } if (bytes == 0) { + err = ubi_wl_flush(ubi); + if (err) + return err; + err = clear_update_marker(ubi, vol, 0); if (err) return err; - err = ubi_wl_flush(ubi); - if (!err) - vol->updating = 0; + vol->updating = 0; + return 0; } vol->upd_buf = vmalloc(ubi->leb_size); @@ -362,16 +365,16 @@ ubi_assert(vol->upd_received <= vol->upd_bytes); if (vol->upd_received == vol->upd_bytes) { + err = ubi_wl_flush(ubi); + if (err) + return err; /* The update is finished, clear the update marker */ err = clear_update_marker(ubi, vol, vol->upd_bytes); if (err) return err; - err = ubi_wl_flush(ubi); - if (err == 0) { - vol->updating = 0; - err = to_write; - vfree(vol->upd_buf); - } + vol->updating = 0; + err = to_write; + vfree(vol->upd_buf); } return err; --- linux-2.6.32.orig/drivers/mtd/ubi/cdev.c +++ linux-2.6.32/drivers/mtd/ubi/cdev.c @@ -853,7 +853,6 @@ break; } - req.name[req.name_len] = '\0'; err = verify_mkvol_req(ubi, &req); if (err) break; --- linux-2.6.32.orig/drivers/scsi/hosts.c +++ linux-2.6.32/drivers/scsi/hosts.c @@ -180,14 +180,20 @@ EXPORT_SYMBOL(scsi_remove_host); /** - * scsi_add_host - add a scsi host + * scsi_add_host_with_dma - add a scsi host with dma device * @shost: scsi host pointer to add * @dev: a struct device of type scsi class + * @dma_dev: dma device for the host + * + * Note: You rarely need to worry about this unless you're in a + * virtualised host environments, so use the simpler scsi_add_host() + * function instead. * * Return value: * 0 on success / != 0 for error **/ -int scsi_add_host(struct Scsi_Host *shost, struct device *dev) +int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, + struct device *dma_dev) { struct scsi_host_template *sht = shost->hostt; int error = -EINVAL; @@ -207,6 +213,7 @@ if (!shost->shost_gendev.parent) shost->shost_gendev.parent = dev ? dev : &platform_bus; + shost->dma_dev = dma_dev; error = device_add(&shost->shost_gendev); if (error) @@ -262,7 +269,7 @@ fail: return error; } -EXPORT_SYMBOL(scsi_add_host); +EXPORT_SYMBOL(scsi_add_host_with_dma); static void scsi_host_dev_release(struct device *dev) { --- linux-2.6.32.orig/drivers/scsi/ses.c +++ linux-2.6.32/drivers/scsi/ses.c @@ -591,8 +591,6 @@ ses_dev->page10_len = len; buf = NULL; } - kfree(hdr_buf); - scomp = kzalloc(sizeof(struct ses_component) * components, GFP_KERNEL); if (!scomp) goto err_free; @@ -604,6 +602,8 @@ goto err_free; } + kfree(hdr_buf); + edev->scratch = ses_dev; for (i = 0; i < components; i++) edev->component[i].scratch = scomp + i; --- linux-2.6.32.orig/drivers/scsi/scsi_ioctl.c +++ linux-2.6.32/drivers/scsi/scsi_ioctl.c @@ -308,6 +308,9 @@ case SG_SCSI_RESET_DEVICE: val = SCSI_TRY_RESET_DEVICE; break; + case SG_SCSI_RESET_TARGET: + val = SCSI_TRY_RESET_TARGET; + break; case SG_SCSI_RESET_BUS: val = SCSI_TRY_RESET_BUS; break; --- linux-2.6.32.orig/drivers/scsi/vmw_pvscsi.h +++ linux-2.6.32/drivers/scsi/vmw_pvscsi.h @@ -0,0 +1,397 @@ +/* + * VMware PVSCSI header file + * + * Copyright (C) 2008-2009, VMware, Inc. 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; version 2 of the License and no 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, GOOD TITLE or + * NON INFRINGEMENT. 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Maintained by: Alok N Kataria + * + */ + +#ifndef _VMW_PVSCSI_H_ +#define _VMW_PVSCSI_H_ + +#include + +#define PVSCSI_DRIVER_VERSION_STRING "1.0.1.0-k" + +#define PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT 128 + +#define MASK(n) ((1 << (n)) - 1) /* make an n-bit mask */ + +#define PCI_VENDOR_ID_VMWARE 0x15AD +#define PCI_DEVICE_ID_VMWARE_PVSCSI 0x07C0 + +/* + * host adapter status/error codes + */ +enum HostBusAdapterStatus { + BTSTAT_SUCCESS = 0x00, /* CCB complete normally with no errors */ + BTSTAT_LINKED_COMMAND_COMPLETED = 0x0a, + BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG = 0x0b, + BTSTAT_DATA_UNDERRUN = 0x0c, + BTSTAT_SELTIMEO = 0x11, /* SCSI selection timeout */ + BTSTAT_DATARUN = 0x12, /* data overrun/underrun */ + BTSTAT_BUSFREE = 0x13, /* unexpected bus free */ + BTSTAT_INVPHASE = 0x14, /* invalid bus phase or sequence requested by target */ + BTSTAT_LUNMISMATCH = 0x17, /* linked CCB has different LUN from first CCB */ + BTSTAT_SENSFAILED = 0x1b, /* auto request sense failed */ + BTSTAT_TAGREJECT = 0x1c, /* SCSI II tagged queueing message rejected by target */ + BTSTAT_BADMSG = 0x1d, /* unsupported message received by the host adapter */ + BTSTAT_HAHARDWARE = 0x20, /* host adapter hardware failed */ + BTSTAT_NORESPONSE = 0x21, /* target did not respond to SCSI ATN, sent a SCSI RST */ + BTSTAT_SENTRST = 0x22, /* host adapter asserted a SCSI RST */ + BTSTAT_RECVRST = 0x23, /* other SCSI devices asserted a SCSI RST */ + BTSTAT_DISCONNECT = 0x24, /* target device reconnected improperly (w/o tag) */ + BTSTAT_BUSRESET = 0x25, /* host adapter issued BUS device reset */ + BTSTAT_ABORTQUEUE = 0x26, /* abort queue generated */ + BTSTAT_HASOFTWARE = 0x27, /* host adapter software error */ + BTSTAT_HATIMEOUT = 0x30, /* host adapter hardware timeout error */ + BTSTAT_SCSIPARITY = 0x34, /* SCSI parity error detected */ +}; + +/* + * Register offsets. + * + * These registers are accessible both via i/o space and mm i/o. + */ + +enum PVSCSIRegOffset { + PVSCSI_REG_OFFSET_COMMAND = 0x0, + PVSCSI_REG_OFFSET_COMMAND_DATA = 0x4, + PVSCSI_REG_OFFSET_COMMAND_STATUS = 0x8, + PVSCSI_REG_OFFSET_LAST_STS_0 = 0x100, + PVSCSI_REG_OFFSET_LAST_STS_1 = 0x104, + PVSCSI_REG_OFFSET_LAST_STS_2 = 0x108, + PVSCSI_REG_OFFSET_LAST_STS_3 = 0x10c, + PVSCSI_REG_OFFSET_INTR_STATUS = 0x100c, + PVSCSI_REG_OFFSET_INTR_MASK = 0x2010, + PVSCSI_REG_OFFSET_KICK_NON_RW_IO = 0x3014, + PVSCSI_REG_OFFSET_DEBUG = 0x3018, + PVSCSI_REG_OFFSET_KICK_RW_IO = 0x4018, +}; + +/* + * Virtual h/w commands. + */ + +enum PVSCSICommands { + PVSCSI_CMD_FIRST = 0, /* has to be first */ + + PVSCSI_CMD_ADAPTER_RESET = 1, + PVSCSI_CMD_ISSUE_SCSI = 2, + PVSCSI_CMD_SETUP_RINGS = 3, + PVSCSI_CMD_RESET_BUS = 4, + PVSCSI_CMD_RESET_DEVICE = 5, + PVSCSI_CMD_ABORT_CMD = 6, + PVSCSI_CMD_CONFIG = 7, + PVSCSI_CMD_SETUP_MSG_RING = 8, + PVSCSI_CMD_DEVICE_UNPLUG = 9, + + PVSCSI_CMD_LAST = 10 /* has to be last */ +}; + +/* + * Command descriptor for PVSCSI_CMD_RESET_DEVICE -- + */ + +struct PVSCSICmdDescResetDevice { + u32 target; + u8 lun[8]; +} __packed; + +/* + * Command descriptor for PVSCSI_CMD_ABORT_CMD -- + * + * - currently does not support specifying the LUN. + * - _pad should be 0. + */ + +struct PVSCSICmdDescAbortCmd { + u64 context; + u32 target; + u32 _pad; +} __packed; + +/* + * Command descriptor for PVSCSI_CMD_SETUP_RINGS -- + * + * Notes: + * - reqRingNumPages and cmpRingNumPages need to be power of two. + * - reqRingNumPages and cmpRingNumPages need to be different from 0, + * - reqRingNumPages and cmpRingNumPages need to be inferior to + * PVSCSI_SETUP_RINGS_MAX_NUM_PAGES. + */ + +#define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES 32 +struct PVSCSICmdDescSetupRings { + u32 reqRingNumPages; + u32 cmpRingNumPages; + u64 ringsStatePPN; + u64 reqRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES]; + u64 cmpRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES]; +} __packed; + +/* + * Command descriptor for PVSCSI_CMD_SETUP_MSG_RING -- + * + * Notes: + * - this command was not supported in the initial revision of the h/w + * interface. Before using it, you need to check that it is supported by + * writing PVSCSI_CMD_SETUP_MSG_RING to the 'command' register, then + * immediately after read the 'command status' register: + * * a value of -1 means that the cmd is NOT supported, + * * a value != -1 means that the cmd IS supported. + * If it's supported the 'command status' register should return: + * sizeof(PVSCSICmdDescSetupMsgRing) / sizeof(u32). + * - this command should be issued _after_ the usual SETUP_RINGS so that the + * RingsState page is already setup. If not, the command is a nop. + * - numPages needs to be a power of two, + * - numPages needs to be different from 0, + * - _pad should be zero. + */ + +#define PVSCSI_SETUP_MSG_RING_MAX_NUM_PAGES 16 + +struct PVSCSICmdDescSetupMsgRing { + u32 numPages; + u32 _pad; + u64 ringPPNs[PVSCSI_SETUP_MSG_RING_MAX_NUM_PAGES]; +} __packed; + +enum PVSCSIMsgType { + PVSCSI_MSG_DEV_ADDED = 0, + PVSCSI_MSG_DEV_REMOVED = 1, + PVSCSI_MSG_LAST = 2, +}; + +/* + * Msg descriptor. + * + * sizeof(struct PVSCSIRingMsgDesc) == 128. + * + * - type is of type enum PVSCSIMsgType. + * - the content of args depend on the type of event being delivered. + */ + +struct PVSCSIRingMsgDesc { + u32 type; + u32 args[31]; +} __packed; + +struct PVSCSIMsgDescDevStatusChanged { + u32 type; /* PVSCSI_MSG_DEV _ADDED / _REMOVED */ + u32 bus; + u32 target; + u8 lun[8]; + u32 pad[27]; +} __packed; + +/* + * Rings state. + * + * - the fields: + * . msgProdIdx, + * . msgConsIdx, + * . msgNumEntriesLog2, + * .. are only used once the SETUP_MSG_RING cmd has been issued. + * - '_pad' helps to ensure that the msg related fields are on their own + * cache-line. + */ + +struct PVSCSIRingsState { + u32 reqProdIdx; + u32 reqConsIdx; + u32 reqNumEntriesLog2; + + u32 cmpProdIdx; + u32 cmpConsIdx; + u32 cmpNumEntriesLog2; + + u8 _pad[104]; + + u32 msgProdIdx; + u32 msgConsIdx; + u32 msgNumEntriesLog2; +} __packed; + +/* + * Request descriptor. + * + * sizeof(RingReqDesc) = 128 + * + * - context: is a unique identifier of a command. It could normally be any + * 64bit value, however we currently store it in the serialNumber variable + * of struct SCSI_Command, so we have the following restrictions due to the + * way this field is handled in the vmkernel storage stack: + * * this value can't be 0, + * * the upper 32bit need to be 0 since serialNumber is as a u32. + * Currently tracked as PR 292060. + * - dataLen: contains the total number of bytes that need to be transferred. + * - dataAddr: + * * if PVSCSI_FLAG_CMD_WITH_SG_LIST is set: dataAddr is the PA of the first + * s/g table segment, each s/g segment is entirely contained on a single + * page of physical memory, + * * if PVSCSI_FLAG_CMD_WITH_SG_LIST is NOT set, then dataAddr is the PA of + * the buffer used for the DMA transfer, + * - flags: + * * PVSCSI_FLAG_CMD_WITH_SG_LIST: see dataAddr above, + * * PVSCSI_FLAG_CMD_DIR_NONE: no DMA involved, + * * PVSCSI_FLAG_CMD_DIR_TOHOST: transfer from device to main memory, + * * PVSCSI_FLAG_CMD_DIR_TODEVICE: transfer from main memory to device, + * * PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB: reserved to handle CDBs larger than + * 16bytes. To be specified. + * - vcpuHint: vcpuId of the processor that will be most likely waiting for the + * completion of the i/o. For guest OSes that use lowest priority message + * delivery mode (such as windows), we use this "hint" to deliver the + * completion action to the proper vcpu. For now, we can use the vcpuId of + * the processor that initiated the i/o as a likely candidate for the vcpu + * that will be waiting for the completion.. + * - bus should be 0: we currently only support bus 0 for now. + * - unused should be zero'd. + */ + +#define PVSCSI_FLAG_CMD_WITH_SG_LIST (1 << 0) +#define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB (1 << 1) +#define PVSCSI_FLAG_CMD_DIR_NONE (1 << 2) +#define PVSCSI_FLAG_CMD_DIR_TOHOST (1 << 3) +#define PVSCSI_FLAG_CMD_DIR_TODEVICE (1 << 4) + +struct PVSCSIRingReqDesc { + u64 context; + u64 dataAddr; + u64 dataLen; + u64 senseAddr; + u32 senseLen; + u32 flags; + u8 cdb[16]; + u8 cdbLen; + u8 lun[8]; + u8 tag; + u8 bus; + u8 target; + u8 vcpuHint; + u8 unused[59]; +} __packed; + +/* + * Scatter-gather list management. + * + * As described above, when PVSCSI_FLAG_CMD_WITH_SG_LIST is set in the + * RingReqDesc.flags, then RingReqDesc.dataAddr is the PA of the first s/g + * table segment. + * + * - each segment of the s/g table contain a succession of struct + * PVSCSISGElement. + * - each segment is entirely contained on a single physical page of memory. + * - a "chain" s/g element has the flag PVSCSI_SGE_FLAG_CHAIN_ELEMENT set in + * PVSCSISGElement.flags and in this case: + * * addr is the PA of the next s/g segment, + * * length is undefined, assumed to be 0. + */ + +struct PVSCSISGElement { + u64 addr; + u32 length; + u32 flags; +} __packed; + +/* + * Completion descriptor. + * + * sizeof(RingCmpDesc) = 32 + * + * - context: identifier of the command. The same thing that was specified + * under "context" as part of struct RingReqDesc at initiation time, + * - dataLen: number of bytes transferred for the actual i/o operation, + * - senseLen: number of bytes written into the sense buffer, + * - hostStatus: adapter status, + * - scsiStatus: device status, + * - _pad should be zero. + */ + +struct PVSCSIRingCmpDesc { + u64 context; + u64 dataLen; + u32 senseLen; + u16 hostStatus; + u16 scsiStatus; + u32 _pad[2]; +} __packed; + +/* + * Interrupt status / IRQ bits. + */ + +#define PVSCSI_INTR_CMPL_0 (1 << 0) +#define PVSCSI_INTR_CMPL_1 (1 << 1) +#define PVSCSI_INTR_CMPL_MASK MASK(2) + +#define PVSCSI_INTR_MSG_0 (1 << 2) +#define PVSCSI_INTR_MSG_1 (1 << 3) +#define PVSCSI_INTR_MSG_MASK (MASK(2) << 2) + +#define PVSCSI_INTR_ALL_SUPPORTED MASK(4) + +/* + * Number of MSI-X vectors supported. + */ +#define PVSCSI_MAX_INTRS 24 + +/* + * Enumeration of supported MSI-X vectors + */ +#define PVSCSI_VECTOR_COMPLETION 0 + +/* + * Misc constants for the rings. + */ + +#define PVSCSI_MAX_NUM_PAGES_REQ_RING PVSCSI_SETUP_RINGS_MAX_NUM_PAGES +#define PVSCSI_MAX_NUM_PAGES_CMP_RING PVSCSI_SETUP_RINGS_MAX_NUM_PAGES +#define PVSCSI_MAX_NUM_PAGES_MSG_RING PVSCSI_SETUP_MSG_RING_MAX_NUM_PAGES + +#define PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE \ + (PAGE_SIZE / sizeof(struct PVSCSIRingReqDesc)) + +#define PVSCSI_MAX_REQ_QUEUE_DEPTH \ + (PVSCSI_MAX_NUM_PAGES_REQ_RING * PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE) + +#define PVSCSI_MEM_SPACE_COMMAND_NUM_PAGES 1 +#define PVSCSI_MEM_SPACE_INTR_STATUS_NUM_PAGES 1 +#define PVSCSI_MEM_SPACE_MISC_NUM_PAGES 2 +#define PVSCSI_MEM_SPACE_KICK_IO_NUM_PAGES 2 +#define PVSCSI_MEM_SPACE_MSIX_NUM_PAGES 2 + +enum PVSCSIMemSpace { + PVSCSI_MEM_SPACE_COMMAND_PAGE = 0, + PVSCSI_MEM_SPACE_INTR_STATUS_PAGE = 1, + PVSCSI_MEM_SPACE_MISC_PAGE = 2, + PVSCSI_MEM_SPACE_KICK_IO_PAGE = 4, + PVSCSI_MEM_SPACE_MSIX_TABLE_PAGE = 6, + PVSCSI_MEM_SPACE_MSIX_PBA_PAGE = 7, +}; + +#define PVSCSI_MEM_SPACE_NUM_PAGES \ + (PVSCSI_MEM_SPACE_COMMAND_NUM_PAGES + \ + PVSCSI_MEM_SPACE_INTR_STATUS_NUM_PAGES + \ + PVSCSI_MEM_SPACE_MISC_NUM_PAGES + \ + PVSCSI_MEM_SPACE_KICK_IO_NUM_PAGES + \ + PVSCSI_MEM_SPACE_MSIX_NUM_PAGES) + +#define PVSCSI_MEM_SPACE_SIZE (PVSCSI_MEM_SPACE_NUM_PAGES * PAGE_SIZE) + +#endif /* _VMW_PVSCSI_H_ */ --- linux-2.6.32.orig/drivers/scsi/libiscsi.c +++ linux-2.6.32/drivers/scsi/libiscsi.c @@ -384,12 +384,12 @@ WARN_ON(hdrlength >= 256); hdr->hlength = hdrlength & 0xFF; + hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn); if (session->tt->init_task && session->tt->init_task(task)) return -EIO; task->state = ISCSI_TASK_RUNNING; - hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn); session->cmdsn++; conn->scsicmd_pdus_cnt++; @@ -2823,14 +2823,15 @@ session->state = ISCSI_STATE_TERMINATE; else if (conn->stop_stage != STOP_CONN_RECOVER) session->state = ISCSI_STATE_IN_RECOVERY; + + old_stop_stage = conn->stop_stage; + conn->stop_stage = flag; spin_unlock_bh(&session->lock); del_timer_sync(&conn->transport_timer); iscsi_suspend_tx(conn); spin_lock_bh(&session->lock); - old_stop_stage = conn->stop_stage; - conn->stop_stage = flag; conn->c_stage = ISCSI_CONN_STOPPED; spin_unlock_bh(&session->lock); --- linux-2.6.32.orig/drivers/scsi/st.h +++ linux-2.6.32/drivers/scsi/st.h @@ -46,6 +46,7 @@ struct st_request *last_SRpnt; struct st_cmdstatus cmdstat; struct page **reserved_pages; + int reserved_page_order; struct page **mapped_pages; struct rq_map_data map_data; unsigned char *b_data; --- linux-2.6.32.orig/drivers/scsi/scsi_lib.c +++ linux-2.6.32/drivers/scsi/scsi_lib.c @@ -749,9 +749,9 @@ */ req->next_rq->resid_len = scsi_in(cmd)->resid; + scsi_release_buffers(cmd); blk_end_request_all(req, 0); - scsi_release_buffers(cmd); scsi_next_command(cmd); return; } @@ -773,8 +773,14 @@ * we already took a copy of the original into rq->errors which * is what gets returned to the user */ - if (sense_valid && sshdr.sense_key == RECOVERED_ERROR) { - if (!(req->cmd_flags & REQ_QUIET)) + if (sense_valid && (sshdr.sense_key == RECOVERED_ERROR)) { + /* if ATA PASS-THROUGH INFORMATION AVAILABLE skip + * print since caller wants ATA registers. Only occurs on + * SCSI ATA PASS_THROUGH commands when CK_COND=1 + */ + if ((sshdr.asc == 0x0) && (sshdr.ascq == 0x1d)) + ; + else if (!(req->cmd_flags & REQ_QUIET)) scsi_print_sense("", cmd); result = 0; /* BLOCK_PC may have set error */ --- linux-2.6.32.orig/drivers/scsi/Kconfig +++ linux-2.6.32/drivers/scsi/Kconfig @@ -621,6 +621,14 @@ substantial, so users of MultiMaster Host Adapters may not wish to include it. +config VMWARE_PVSCSI + tristate "VMware PVSCSI driver support" + depends on PCI && SCSI && X86 + help + This driver supports VMware's para virtualized SCSI HBA. + To compile this driver as a module, choose M here: the + module will be called vmw_pvscsi. + config LIBFC tristate "LibFC module" select SCSI_FC_ATTRS --- linux-2.6.32.orig/drivers/scsi/scsi_transport_iscsi.c +++ linux-2.6.32/drivers/scsi/scsi_transport_iscsi.c @@ -627,8 +627,10 @@ spin_unlock_irqrestore(&session->lock, flags); scsi_target_block(&session->dev); ISCSI_DBG_TRANS_SESSION(session, "Completed SCSI target blocking\n"); - queue_delayed_work(iscsi_eh_timer_workq, &session->recovery_work, - session->recovery_tmo * HZ); + if (session->recovery_tmo >= 0) + queue_delayed_work(iscsi_eh_timer_workq, + &session->recovery_work, + session->recovery_tmo * HZ); } void iscsi_block_session(struct iscsi_cls_session *session) @@ -1348,8 +1350,7 @@ switch (ev->u.set_param.param) { case ISCSI_PARAM_SESS_RECOVERY_TMO: sscanf(data, "%d", &value); - if (value != 0) - session->recovery_tmo = value; + session->recovery_tmo = value; break; default: err = transport->set_param(conn, ev->u.set_param.param, --- linux-2.6.32.orig/drivers/scsi/qla1280.c +++ linux-2.6.32/drivers/scsi/qla1280.c @@ -1640,8 +1640,10 @@ uint16_t mb[MAILBOX_REGISTER_COUNT], i; int err; + spin_unlock_irq(ha->host->host_lock); err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname, &ha->pdev->dev); + spin_lock_irq(ha->host->host_lock); if (err) { printk(KERN_ERR "Failed to load image \"%s\" err %d\n", ql1280_board_tbl[ha->devnum].fwname, err); @@ -1699,8 +1701,10 @@ return -ENOMEM; #endif + spin_unlock_irq(ha->host->host_lock); err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname, &ha->pdev->dev); + spin_lock_irq(ha->host->host_lock); if (err) { printk(KERN_ERR "Failed to load image \"%s\" err %d\n", ql1280_board_tbl[ha->devnum].fwname, err); --- linux-2.6.32.orig/drivers/scsi/st.c +++ linux-2.6.32/drivers/scsi/st.c @@ -552,13 +552,15 @@ SRpnt->waiting = waiting; if (STp->buffer->do_dio) { + mdata->page_order = 0; mdata->nr_entries = STp->buffer->sg_segs; mdata->pages = STp->buffer->mapped_pages; } else { + mdata->page_order = STp->buffer->reserved_page_order; mdata->nr_entries = DIV_ROUND_UP(bytes, PAGE_SIZE << mdata->page_order); - STp->buffer->map_data.pages = STp->buffer->reserved_pages; - STp->buffer->map_data.offset = 0; + mdata->pages = STp->buffer->reserved_pages; + mdata->offset = 0; } memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd)); @@ -3718,7 +3720,7 @@ priority |= __GFP_ZERO; if (STbuffer->frp_segs) { - order = STbuffer->map_data.page_order; + order = STbuffer->reserved_page_order; b_size = PAGE_SIZE << order; } else { for (b_size = PAGE_SIZE, order = 0; @@ -3751,7 +3753,7 @@ segs++; } STbuffer->b_data = page_address(STbuffer->reserved_pages[0]); - STbuffer->map_data.page_order = order; + STbuffer->reserved_page_order = order; return 1; } @@ -3764,7 +3766,7 @@ for (i=0; i < st_bp->frp_segs; i++) memset(page_address(st_bp->reserved_pages[i]), 0, - PAGE_SIZE << st_bp->map_data.page_order); + PAGE_SIZE << st_bp->reserved_page_order); st_bp->cleared = 1; } @@ -3772,7 +3774,7 @@ /* Release the extra buffer */ static void normalize_buffer(struct st_buffer * STbuffer) { - int i, order = STbuffer->map_data.page_order; + int i, order = STbuffer->reserved_page_order; for (i = 0; i < STbuffer->frp_segs; i++) { __free_pages(STbuffer->reserved_pages[i], order); @@ -3780,7 +3782,7 @@ } STbuffer->frp_segs = 0; STbuffer->sg_segs = 0; - STbuffer->map_data.page_order = 0; + STbuffer->reserved_page_order = 0; STbuffer->map_data.offset = 0; } @@ -3790,7 +3792,7 @@ static int append_to_buffer(const char __user *ubp, struct st_buffer * st_bp, int do_count) { int i, cnt, res, offset; - int length = PAGE_SIZE << st_bp->map_data.page_order; + int length = PAGE_SIZE << st_bp->reserved_page_order; for (i = 0, offset = st_bp->buffer_bytes; i < st_bp->frp_segs && offset >= length; i++) @@ -3822,7 +3824,7 @@ static int from_buffer(struct st_buffer * st_bp, char __user *ubp, int do_count) { int i, cnt, res, offset; - int length = PAGE_SIZE << st_bp->map_data.page_order; + int length = PAGE_SIZE << st_bp->reserved_page_order; for (i = 0, offset = st_bp->read_pointer; i < st_bp->frp_segs && offset >= length; i++) @@ -3855,7 +3857,7 @@ { int src_seg, dst_seg, src_offset = 0, dst_offset; int count, total; - int length = PAGE_SIZE << st_bp->map_data.page_order; + int length = PAGE_SIZE << st_bp->reserved_page_order; if (offset == 0) return; @@ -4577,7 +4579,6 @@ } mdata->offset = uaddr & ~PAGE_MASK; - mdata->page_order = 0; STbp->mapped_pages = pages; return nr_pages; --- linux-2.6.32.orig/drivers/scsi/scsi_transport_fc.c +++ linux-2.6.32/drivers/scsi/scsi_transport_fc.c @@ -648,11 +648,22 @@ return error; error = transport_class_register(&fc_vport_class); if (error) - return error; + goto unreg_host_class; error = transport_class_register(&fc_rport_class); if (error) - return error; - return transport_class_register(&fc_transport_class); + goto unreg_vport_class; + error = transport_class_register(&fc_transport_class); + if (error) + goto unreg_rport_class; + return 0; + +unreg_rport_class: + transport_class_unregister(&fc_rport_class); +unreg_vport_class: + transport_class_unregister(&fc_vport_class); +unreg_host_class: + transport_class_unregister(&fc_host_class); + return error; } static void __exit fc_transport_exit(void) @@ -1204,6 +1215,15 @@ { struct fc_vport *vport = transport_class_to_vport(dev); struct Scsi_Host *shost = vport_to_shost(vport); + unsigned long flags; + + spin_lock_irqsave(shost->host_lock, flags); + if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) { + spin_unlock_irqrestore(shost->host_lock, flags); + return -EBUSY; + } + vport->flags |= FC_VPORT_DELETING; + spin_unlock_irqrestore(shost->host_lock, flags); fc_queue_work(shost, &vport->vport_delete_work); return count; @@ -1793,6 +1813,9 @@ list_for_each_entry(vport, &fc_host->vports, peers) { if ((vport->channel == 0) && (vport->port_name == wwpn) && (vport->node_name == wwnn)) { + if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) + break; + vport->flags |= FC_VPORT_DELETING; match = 1; break; } @@ -2384,6 +2407,7 @@ struct Scsi_Host *shost = rport_to_shost(rport); struct fc_internal *i = to_fc_internal(shost->transportt); unsigned long flags; + int do_callback = 0; /* * if a scan is pending, flush the SCSI Host work_q so that @@ -2422,8 +2446,15 @@ * Avoid this call if we already called it when we preserved the * rport for the binding. */ + spin_lock_irqsave(shost->host_lock, flags); if (!(rport->flags & FC_RPORT_DEVLOSS_CALLBK_DONE) && - (i->f->dev_loss_tmo_callbk)) + (i->f->dev_loss_tmo_callbk)) { + rport->flags |= FC_RPORT_DEVLOSS_CALLBK_DONE; + do_callback = 1; + } + spin_unlock_irqrestore(shost->host_lock, flags); + + if (do_callback) i->f->dev_loss_tmo_callbk(rport); fc_bsg_remove(rport->rqst_q); @@ -2970,6 +3001,7 @@ struct fc_internal *i = to_fc_internal(shost->transportt); struct fc_host_attrs *fc_host = shost_to_fc_host(shost); unsigned long flags; + int do_callback = 0; spin_lock_irqsave(shost->host_lock, flags); @@ -3035,7 +3067,6 @@ rport->roles = FC_PORT_ROLE_UNKNOWN; rport->port_state = FC_PORTSTATE_NOTPRESENT; rport->flags &= ~FC_RPORT_FAST_FAIL_TIMEDOUT; - rport->flags |= FC_RPORT_DEVLOSS_CALLBK_DONE; /* * Pre-emptively kill I/O rather than waiting for the work queue @@ -3045,32 +3076,40 @@ spin_unlock_irqrestore(shost->host_lock, flags); fc_terminate_rport_io(rport); - BUG_ON(rport->port_state != FC_PORTSTATE_NOTPRESENT); + spin_lock_irqsave(shost->host_lock, flags); - /* remove the identifiers that aren't used in the consisting binding */ - switch (fc_host->tgtid_bind_type) { - case FC_TGTID_BIND_BY_WWPN: - rport->node_name = -1; - rport->port_id = -1; - break; - case FC_TGTID_BIND_BY_WWNN: - rport->port_name = -1; - rport->port_id = -1; - break; - case FC_TGTID_BIND_BY_ID: - rport->node_name = -1; - rport->port_name = -1; - break; - case FC_TGTID_BIND_NONE: /* to keep compiler happy */ - break; + if (rport->port_state == FC_PORTSTATE_NOTPRESENT) { /* still missing */ + + /* remove the identifiers that aren't used in the consisting binding */ + switch (fc_host->tgtid_bind_type) { + case FC_TGTID_BIND_BY_WWPN: + rport->node_name = -1; + rport->port_id = -1; + break; + case FC_TGTID_BIND_BY_WWNN: + rport->port_name = -1; + rport->port_id = -1; + break; + case FC_TGTID_BIND_BY_ID: + rport->node_name = -1; + rport->port_name = -1; + break; + case FC_TGTID_BIND_NONE: /* to keep compiler happy */ + break; + } + + /* + * As this only occurs if the remote port (scsi target) + * went away and didn't come back - we'll remove + * all attached scsi devices. + */ + rport->flags |= FC_RPORT_DEVLOSS_CALLBK_DONE; + fc_queue_work(shost, &rport->stgt_delete_work); + + do_callback = 1; } - /* - * As this only occurs if the remote port (scsi target) - * went away and didn't come back - we'll remove - * all attached scsi devices. - */ - fc_queue_work(shost, &rport->stgt_delete_work); + spin_unlock_irqrestore(shost->host_lock, flags); /* * Notify the driver that the rport is now dead. The LLDD will @@ -3078,7 +3117,7 @@ * * Note: we set the CALLBK_DONE flag above to correspond */ - if (i->f->dev_loss_tmo_callbk) + if (do_callback && i->f->dev_loss_tmo_callbk) i->f->dev_loss_tmo_callbk(rport); } @@ -3301,18 +3340,6 @@ unsigned long flags; int stat; - spin_lock_irqsave(shost->host_lock, flags); - if (vport->flags & FC_VPORT_CREATING) { - spin_unlock_irqrestore(shost->host_lock, flags); - return -EBUSY; - } - if (vport->flags & (FC_VPORT_DEL)) { - spin_unlock_irqrestore(shost->host_lock, flags); - return -EALREADY; - } - vport->flags |= FC_VPORT_DELETING; - spin_unlock_irqrestore(shost->host_lock, flags); - if (i->f->vport_delete) stat = i->f->vport_delete(vport); else @@ -3769,8 +3796,9 @@ return; while (!blk_queue_plugged(q)) { - if (rport && (rport->port_state == FC_PORTSTATE_BLOCKED)) - break; + if (rport && (rport->port_state == FC_PORTSTATE_BLOCKED) && + !(rport->flags & FC_RPORT_FAST_FAIL_TIMEDOUT)) + break; req = blk_fetch_request(q); if (!req) --- linux-2.6.32.orig/drivers/scsi/scsi_debug.c +++ linux-2.6.32/drivers/scsi/scsi_debug.c @@ -914,7 +914,8 @@ static sector_t get_sdebug_capacity(void) { if (scsi_debug_virtual_gb > 0) - return 2048 * 1024 * (sector_t)scsi_debug_virtual_gb; + return (sector_t)scsi_debug_virtual_gb * + (1073741824 / scsi_debug_sector_size); else return sdebug_store_sectors; } --- linux-2.6.32.orig/drivers/scsi/ipr.c +++ linux-2.6.32/drivers/scsi/ipr.c @@ -6516,6 +6516,7 @@ int rc; ENTER; + ioa_cfg->pdev->state_saved = true; rc = pci_restore_state(ioa_cfg->pdev); if (rc != PCIBIOS_SUCCESSFUL) { --- linux-2.6.32.orig/drivers/scsi/scsi_devinfo.c +++ linux-2.6.32/drivers/scsi/scsi_devinfo.c @@ -168,11 +168,10 @@ {"Generic", "USB SD Reader", "1.00", BLIST_FORCELUN | BLIST_INQUIRY_36}, {"Generic", "USB Storage-SMC", "0180", BLIST_FORCELUN | BLIST_INQUIRY_36}, {"Generic", "USB Storage-SMC", "0207", BLIST_FORCELUN | BLIST_INQUIRY_36}, - {"HITACHI", "DF400", "*", BLIST_SPARSELUN}, - {"HITACHI", "DF500", "*", BLIST_SPARSELUN}, - {"HITACHI", "DF600", "*", BLIST_SPARSELUN}, - {"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_ATTACH_PQ3 | BLIST_SPARSELUN | BLIST_LARGELUN}, - {"HITACHI", "OPEN-E", "*", BLIST_ATTACH_PQ3 | BLIST_SPARSELUN | BLIST_LARGELUN}, + {"HITACHI", "DF400", "*", BLIST_REPORTLUN2}, + {"HITACHI", "DF500", "*", BLIST_REPORTLUN2}, + {"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_REPORTLUN2}, + {"HITACHI", "OPEN-", "*", BLIST_REPORTLUN2}, {"HITACHI", "OP-C-", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, {"HITACHI", "3380-", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, {"HITACHI", "3390-", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, --- linux-2.6.32.orig/drivers/scsi/scsi_lib_dma.c +++ linux-2.6.32/drivers/scsi/scsi_lib_dma.c @@ -23,7 +23,7 @@ int nseg = 0; if (scsi_sg_count(cmd)) { - struct device *dev = cmd->device->host->shost_gendev.parent; + struct device *dev = cmd->device->host->dma_dev; nseg = dma_map_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd), cmd->sc_data_direction); @@ -41,7 +41,7 @@ void scsi_dma_unmap(struct scsi_cmnd *cmd) { if (scsi_sg_count(cmd)) { - struct device *dev = cmd->device->host->shost_gendev.parent; + struct device *dev = cmd->device->host->dma_dev; dma_unmap_sg(dev, scsi_sglist(cmd), scsi_sg_count(cmd), cmd->sc_data_direction); --- linux-2.6.32.orig/drivers/scsi/scsi_error.c +++ linux-2.6.32/drivers/scsi/scsi_error.c @@ -301,7 +301,20 @@ if (scmd->device->allow_restart && (sshdr.asc == 0x04) && (sshdr.ascq == 0x02)) return FAILED; - return SUCCESS; + + if (blk_barrier_rq(scmd->request)) + /* + * barrier requests should always retry on UA + * otherwise block will get a spurious error + */ + return NEEDS_RETRY; + else + /* + * for normal (non barrier) commands, pass the + * UA upwards for a determination in the + * completion functions + */ + return SUCCESS; /* these three are not supported */ case COPY_ABORTED: --- linux-2.6.32.orig/drivers/scsi/Makefile +++ linux-2.6.32/drivers/scsi/Makefile @@ -133,6 +133,7 @@ obj-$(CONFIG_SCSI_BNX2_ISCSI) += libiscsi.o bnx2i/ obj-$(CONFIG_BE2ISCSI) += libiscsi.o be2iscsi/ obj-$(CONFIG_SCSI_PMCRAID) += pmcraid.o +obj-$(CONFIG_VMWARE_PVSCSI) += vmw_pvscsi.o obj-$(CONFIG_ARM) += arm/ --- linux-2.6.32.orig/drivers/scsi/vmw_pvscsi.c +++ linux-2.6.32/drivers/scsi/vmw_pvscsi.c @@ -0,0 +1,1407 @@ +/* + * Linux driver for VMware's para-virtualized SCSI HBA. + * + * Copyright (C) 2008-2009, VMware, Inc. 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; version 2 of the License and no 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, GOOD TITLE or + * NON INFRINGEMENT. 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Maintained by: Alok N Kataria + * + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "vmw_pvscsi.h" + +#define PVSCSI_LINUX_DRIVER_DESC "VMware PVSCSI driver" + +MODULE_DESCRIPTION(PVSCSI_LINUX_DRIVER_DESC); +MODULE_AUTHOR("VMware, Inc."); +MODULE_LICENSE("GPL"); +MODULE_VERSION(PVSCSI_DRIVER_VERSION_STRING); + +#define PVSCSI_DEFAULT_NUM_PAGES_PER_RING 8 +#define PVSCSI_DEFAULT_NUM_PAGES_MSG_RING 1 +#define PVSCSI_DEFAULT_QUEUE_DEPTH 64 +#define SGL_SIZE PAGE_SIZE + +struct pvscsi_sg_list { + struct PVSCSISGElement sge[PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT]; +}; + +struct pvscsi_ctx { + /* + * The index of the context in cmd_map serves as the context ID for a + * 1-to-1 mapping completions back to requests. + */ + struct scsi_cmnd *cmd; + struct pvscsi_sg_list *sgl; + struct list_head list; + dma_addr_t dataPA; + dma_addr_t sensePA; + dma_addr_t sglPA; +}; + +struct pvscsi_adapter { + char *mmioBase; + unsigned int irq; + u8 rev; + bool use_msi; + bool use_msix; + bool use_msg; + + spinlock_t hw_lock; + + struct workqueue_struct *workqueue; + struct work_struct work; + + struct PVSCSIRingReqDesc *req_ring; + unsigned req_pages; + unsigned req_depth; + dma_addr_t reqRingPA; + + struct PVSCSIRingCmpDesc *cmp_ring; + unsigned cmp_pages; + dma_addr_t cmpRingPA; + + struct PVSCSIRingMsgDesc *msg_ring; + unsigned msg_pages; + dma_addr_t msgRingPA; + + struct PVSCSIRingsState *rings_state; + dma_addr_t ringStatePA; + + struct pci_dev *dev; + struct Scsi_Host *host; + + struct list_head cmd_pool; + struct pvscsi_ctx *cmd_map; +}; + + +/* Command line parameters */ +static int pvscsi_ring_pages = PVSCSI_DEFAULT_NUM_PAGES_PER_RING; +static int pvscsi_msg_ring_pages = PVSCSI_DEFAULT_NUM_PAGES_MSG_RING; +static int pvscsi_cmd_per_lun = PVSCSI_DEFAULT_QUEUE_DEPTH; +static bool pvscsi_disable_msi; +static bool pvscsi_disable_msix; +static bool pvscsi_use_msg = true; + +#define PVSCSI_RW (S_IRUSR | S_IWUSR) + +module_param_named(ring_pages, pvscsi_ring_pages, int, PVSCSI_RW); +MODULE_PARM_DESC(ring_pages, "Number of pages per req/cmp ring - (default=" + __stringify(PVSCSI_DEFAULT_NUM_PAGES_PER_RING) ")"); + +module_param_named(msg_ring_pages, pvscsi_msg_ring_pages, int, PVSCSI_RW); +MODULE_PARM_DESC(msg_ring_pages, "Number of pages for the msg ring - (default=" + __stringify(PVSCSI_DEFAULT_NUM_PAGES_MSG_RING) ")"); + +module_param_named(cmd_per_lun, pvscsi_cmd_per_lun, int, PVSCSI_RW); +MODULE_PARM_DESC(cmd_per_lun, "Maximum commands per lun - (default=" + __stringify(PVSCSI_MAX_REQ_QUEUE_DEPTH) ")"); + +module_param_named(disable_msi, pvscsi_disable_msi, bool, PVSCSI_RW); +MODULE_PARM_DESC(disable_msi, "Disable MSI use in driver - (default=0)"); + +module_param_named(disable_msix, pvscsi_disable_msix, bool, PVSCSI_RW); +MODULE_PARM_DESC(disable_msix, "Disable MSI-X use in driver - (default=0)"); + +module_param_named(use_msg, pvscsi_use_msg, bool, PVSCSI_RW); +MODULE_PARM_DESC(use_msg, "Use msg ring when available - (default=1)"); + +static const struct pci_device_id pvscsi_pci_tbl[] = { + { PCI_VDEVICE(VMWARE, PCI_DEVICE_ID_VMWARE_PVSCSI) }, + { 0 } +}; + +MODULE_DEVICE_TABLE(pci, pvscsi_pci_tbl); + +static struct device * +pvscsi_dev(const struct pvscsi_adapter *adapter) +{ + return &(adapter->dev->dev); +} + +static struct pvscsi_ctx * +pvscsi_find_context(const struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd) +{ + struct pvscsi_ctx *ctx, *end; + + end = &adapter->cmd_map[adapter->req_depth]; + for (ctx = adapter->cmd_map; ctx < end; ctx++) + if (ctx->cmd == cmd) + return ctx; + + return NULL; +} + +static struct pvscsi_ctx * +pvscsi_acquire_context(struct pvscsi_adapter *adapter, struct scsi_cmnd *cmd) +{ + struct pvscsi_ctx *ctx; + + if (list_empty(&adapter->cmd_pool)) + return NULL; + + ctx = list_first_entry(&adapter->cmd_pool, struct pvscsi_ctx, list); + ctx->cmd = cmd; + list_del(&ctx->list); + + return ctx; +} + +static void pvscsi_release_context(struct pvscsi_adapter *adapter, + struct pvscsi_ctx *ctx) +{ + ctx->cmd = NULL; + list_add(&ctx->list, &adapter->cmd_pool); +} + +/* + * Map a pvscsi_ctx struct to a context ID field value; we map to a simple + * non-zero integer. ctx always points to an entry in cmd_map array, hence + * the return value is always >=1. + */ +static u64 pvscsi_map_context(const struct pvscsi_adapter *adapter, + const struct pvscsi_ctx *ctx) +{ + return ctx - adapter->cmd_map + 1; +} + +static struct pvscsi_ctx * +pvscsi_get_context(const struct pvscsi_adapter *adapter, u64 context) +{ + return &adapter->cmd_map[context - 1]; +} + +static void pvscsi_reg_write(const struct pvscsi_adapter *adapter, + u32 offset, u32 val) +{ + writel(val, adapter->mmioBase + offset); +} + +static u32 pvscsi_reg_read(const struct pvscsi_adapter *adapter, u32 offset) +{ + return readl(adapter->mmioBase + offset); +} + +static u32 pvscsi_read_intr_status(const struct pvscsi_adapter *adapter) +{ + return pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_INTR_STATUS); +} + +static void pvscsi_write_intr_status(const struct pvscsi_adapter *adapter, + u32 val) +{ + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_STATUS, val); +} + +static void pvscsi_unmask_intr(const struct pvscsi_adapter *adapter) +{ + u32 intr_bits; + + intr_bits = PVSCSI_INTR_CMPL_MASK; + if (adapter->use_msg) + intr_bits |= PVSCSI_INTR_MSG_MASK; + + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, intr_bits); +} + +static void pvscsi_mask_intr(const struct pvscsi_adapter *adapter) +{ + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_INTR_MASK, 0); +} + +static void pvscsi_write_cmd_desc(const struct pvscsi_adapter *adapter, + u32 cmd, const void *desc, size_t len) +{ + const u32 *ptr = desc; + size_t i; + + len /= sizeof(*ptr); + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, cmd); + for (i = 0; i < len; i++) + pvscsi_reg_write(adapter, + PVSCSI_REG_OFFSET_COMMAND_DATA, ptr[i]); +} + +static void pvscsi_abort_cmd(const struct pvscsi_adapter *adapter, + const struct pvscsi_ctx *ctx) +{ + struct PVSCSICmdDescAbortCmd cmd = { 0 }; + + cmd.target = ctx->cmd->device->id; + cmd.context = pvscsi_map_context(adapter, ctx); + + pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ABORT_CMD, &cmd, sizeof(cmd)); +} + +static void pvscsi_kick_rw_io(const struct pvscsi_adapter *adapter) +{ + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_RW_IO, 0); +} + +static void pvscsi_process_request_ring(const struct pvscsi_adapter *adapter) +{ + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_KICK_NON_RW_IO, 0); +} + +static int scsi_is_rw(unsigned char op) +{ + return op == READ_6 || op == WRITE_6 || + op == READ_10 || op == WRITE_10 || + op == READ_12 || op == WRITE_12 || + op == READ_16 || op == WRITE_16; +} + +static void pvscsi_kick_io(const struct pvscsi_adapter *adapter, + unsigned char op) +{ + if (scsi_is_rw(op)) + pvscsi_kick_rw_io(adapter); + else + pvscsi_process_request_ring(adapter); +} + +static void ll_adapter_reset(const struct pvscsi_adapter *adapter) +{ + dev_dbg(pvscsi_dev(adapter), "Adapter Reset on %p\n", adapter); + + pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_ADAPTER_RESET, NULL, 0); +} + +static void ll_bus_reset(const struct pvscsi_adapter *adapter) +{ + dev_dbg(pvscsi_dev(adapter), "Reseting bus on %p\n", adapter); + + pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_BUS, NULL, 0); +} + +static void ll_device_reset(const struct pvscsi_adapter *adapter, u32 target) +{ + struct PVSCSICmdDescResetDevice cmd = { 0 }; + + dev_dbg(pvscsi_dev(adapter), "Reseting device: target=%u\n", target); + + cmd.target = target; + + pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_RESET_DEVICE, + &cmd, sizeof(cmd)); +} + +static void pvscsi_create_sg(struct pvscsi_ctx *ctx, + struct scatterlist *sg, unsigned count) +{ + unsigned i; + struct PVSCSISGElement *sge; + + BUG_ON(count > PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT); + + sge = &ctx->sgl->sge[0]; + for (i = 0; i < count; i++, sg++) { + sge[i].addr = sg_dma_address(sg); + sge[i].length = sg_dma_len(sg); + sge[i].flags = 0; + } +} + +/* + * Map all data buffers for a command into PCI space and + * setup the scatter/gather list if needed. + */ +static void pvscsi_map_buffers(struct pvscsi_adapter *adapter, + struct pvscsi_ctx *ctx, struct scsi_cmnd *cmd, + struct PVSCSIRingReqDesc *e) +{ + unsigned count; + unsigned bufflen = scsi_bufflen(cmd); + struct scatterlist *sg; + + e->dataLen = bufflen; + e->dataAddr = 0; + if (bufflen == 0) + return; + + sg = scsi_sglist(cmd); + count = scsi_sg_count(cmd); + if (count != 0) { + int segs = scsi_dma_map(cmd); + if (segs > 1) { + pvscsi_create_sg(ctx, sg, segs); + + e->flags |= PVSCSI_FLAG_CMD_WITH_SG_LIST; + ctx->sglPA = pci_map_single(adapter->dev, ctx->sgl, + SGL_SIZE, PCI_DMA_TODEVICE); + e->dataAddr = ctx->sglPA; + } else + e->dataAddr = sg_dma_address(sg); + } else { + /* + * In case there is no S/G list, scsi_sglist points + * directly to the buffer. + */ + ctx->dataPA = pci_map_single(adapter->dev, sg, bufflen, + cmd->sc_data_direction); + e->dataAddr = ctx->dataPA; + } +} + +static void pvscsi_unmap_buffers(const struct pvscsi_adapter *adapter, + struct pvscsi_ctx *ctx) +{ + struct scsi_cmnd *cmd; + unsigned bufflen; + + cmd = ctx->cmd; + bufflen = scsi_bufflen(cmd); + + if (bufflen != 0) { + unsigned count = scsi_sg_count(cmd); + + if (count != 0) { + scsi_dma_unmap(cmd); + if (ctx->sglPA) { + pci_unmap_single(adapter->dev, ctx->sglPA, + SGL_SIZE, PCI_DMA_TODEVICE); + ctx->sglPA = 0; + } + } else + pci_unmap_single(adapter->dev, ctx->dataPA, bufflen, + cmd->sc_data_direction); + } + if (cmd->sense_buffer) + pci_unmap_single(adapter->dev, ctx->sensePA, + SCSI_SENSE_BUFFERSIZE, PCI_DMA_FROMDEVICE); +} + +static int __devinit pvscsi_allocate_rings(struct pvscsi_adapter *adapter) +{ + adapter->rings_state = pci_alloc_consistent(adapter->dev, PAGE_SIZE, + &adapter->ringStatePA); + if (!adapter->rings_state) + return -ENOMEM; + + adapter->req_pages = min(PVSCSI_MAX_NUM_PAGES_REQ_RING, + pvscsi_ring_pages); + adapter->req_depth = adapter->req_pages + * PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE; + adapter->req_ring = pci_alloc_consistent(adapter->dev, + adapter->req_pages * PAGE_SIZE, + &adapter->reqRingPA); + if (!adapter->req_ring) + return -ENOMEM; + + adapter->cmp_pages = min(PVSCSI_MAX_NUM_PAGES_CMP_RING, + pvscsi_ring_pages); + adapter->cmp_ring = pci_alloc_consistent(adapter->dev, + adapter->cmp_pages * PAGE_SIZE, + &adapter->cmpRingPA); + if (!adapter->cmp_ring) + return -ENOMEM; + + BUG_ON(!IS_ALIGNED(adapter->ringStatePA, PAGE_SIZE)); + BUG_ON(!IS_ALIGNED(adapter->reqRingPA, PAGE_SIZE)); + BUG_ON(!IS_ALIGNED(adapter->cmpRingPA, PAGE_SIZE)); + + if (!adapter->use_msg) + return 0; + + adapter->msg_pages = min(PVSCSI_MAX_NUM_PAGES_MSG_RING, + pvscsi_msg_ring_pages); + adapter->msg_ring = pci_alloc_consistent(adapter->dev, + adapter->msg_pages * PAGE_SIZE, + &adapter->msgRingPA); + if (!adapter->msg_ring) + return -ENOMEM; + BUG_ON(!IS_ALIGNED(adapter->msgRingPA, PAGE_SIZE)); + + return 0; +} + +static void pvscsi_setup_all_rings(const struct pvscsi_adapter *adapter) +{ + struct PVSCSICmdDescSetupRings cmd = { 0 }; + dma_addr_t base; + unsigned i; + + cmd.ringsStatePPN = adapter->ringStatePA >> PAGE_SHIFT; + cmd.reqRingNumPages = adapter->req_pages; + cmd.cmpRingNumPages = adapter->cmp_pages; + + base = adapter->reqRingPA; + for (i = 0; i < adapter->req_pages; i++) { + cmd.reqRingPPNs[i] = base >> PAGE_SHIFT; + base += PAGE_SIZE; + } + + base = adapter->cmpRingPA; + for (i = 0; i < adapter->cmp_pages; i++) { + cmd.cmpRingPPNs[i] = base >> PAGE_SHIFT; + base += PAGE_SIZE; + } + + memset(adapter->rings_state, 0, PAGE_SIZE); + memset(adapter->req_ring, 0, adapter->req_pages * PAGE_SIZE); + memset(adapter->cmp_ring, 0, adapter->cmp_pages * PAGE_SIZE); + + pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_RINGS, + &cmd, sizeof(cmd)); + + if (adapter->use_msg) { + struct PVSCSICmdDescSetupMsgRing cmd_msg = { 0 }; + + cmd_msg.numPages = adapter->msg_pages; + + base = adapter->msgRingPA; + for (i = 0; i < adapter->msg_pages; i++) { + cmd_msg.ringPPNs[i] = base >> PAGE_SHIFT; + base += PAGE_SIZE; + } + memset(adapter->msg_ring, 0, adapter->msg_pages * PAGE_SIZE); + + pvscsi_write_cmd_desc(adapter, PVSCSI_CMD_SETUP_MSG_RING, + &cmd_msg, sizeof(cmd_msg)); + } +} + +/* + * Pull a completion descriptor off and pass the completion back + * to the SCSI mid layer. + */ +static void pvscsi_complete_request(struct pvscsi_adapter *adapter, + const struct PVSCSIRingCmpDesc *e) +{ + struct pvscsi_ctx *ctx; + struct scsi_cmnd *cmd; + u32 btstat = e->hostStatus; + u32 sdstat = e->scsiStatus; + + ctx = pvscsi_get_context(adapter, e->context); + cmd = ctx->cmd; + pvscsi_unmap_buffers(adapter, ctx); + pvscsi_release_context(adapter, ctx); + cmd->result = 0; + + if (sdstat != SAM_STAT_GOOD && + (btstat == BTSTAT_SUCCESS || + btstat == BTSTAT_LINKED_COMMAND_COMPLETED || + btstat == BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG)) { + cmd->result = (DID_OK << 16) | sdstat; + if (sdstat == SAM_STAT_CHECK_CONDITION && cmd->sense_buffer) + cmd->result |= (DRIVER_SENSE << 24); + } else + switch (btstat) { + case BTSTAT_SUCCESS: + case BTSTAT_LINKED_COMMAND_COMPLETED: + case BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG: + /* If everything went fine, let's move on.. */ + cmd->result = (DID_OK << 16); + break; + + case BTSTAT_DATARUN: + case BTSTAT_DATA_UNDERRUN: + /* Report residual data in underruns */ + scsi_set_resid(cmd, scsi_bufflen(cmd) - e->dataLen); + cmd->result = (DID_ERROR << 16); + break; + + case BTSTAT_SELTIMEO: + /* Our emulation returns this for non-connected devs */ + cmd->result = (DID_BAD_TARGET << 16); + break; + + case BTSTAT_LUNMISMATCH: + case BTSTAT_TAGREJECT: + case BTSTAT_BADMSG: + cmd->result = (DRIVER_INVALID << 24); + /* fall through */ + + case BTSTAT_HAHARDWARE: + case BTSTAT_INVPHASE: + case BTSTAT_HATIMEOUT: + case BTSTAT_NORESPONSE: + case BTSTAT_DISCONNECT: + case BTSTAT_HASOFTWARE: + case BTSTAT_BUSFREE: + case BTSTAT_SENSFAILED: + cmd->result |= (DID_ERROR << 16); + break; + + case BTSTAT_SENTRST: + case BTSTAT_RECVRST: + case BTSTAT_BUSRESET: + cmd->result = (DID_RESET << 16); + break; + + case BTSTAT_ABORTQUEUE: + cmd->result = (DID_ABORT << 16); + break; + + case BTSTAT_SCSIPARITY: + cmd->result = (DID_PARITY << 16); + break; + + default: + cmd->result = (DID_ERROR << 16); + scmd_printk(KERN_DEBUG, cmd, + "Unknown completion status: 0x%x\n", + btstat); + } + + dev_dbg(&cmd->device->sdev_gendev, + "cmd=%p %x ctx=%p result=0x%x status=0x%x,%x\n", + cmd, cmd->cmnd[0], ctx, cmd->result, btstat, sdstat); + + cmd->scsi_done(cmd); +} + +/* + * barrier usage : Since the PVSCSI device is emulated, there could be cases + * where we may want to serialize some accesses between the driver and the + * emulation layer. We use compiler barriers instead of the more expensive + * memory barriers because PVSCSI is only supported on X86 which has strong + * memory access ordering. + */ +static void pvscsi_process_completion_ring(struct pvscsi_adapter *adapter) +{ + struct PVSCSIRingsState *s = adapter->rings_state; + struct PVSCSIRingCmpDesc *ring = adapter->cmp_ring; + u32 cmp_entries = s->cmpNumEntriesLog2; + + while (s->cmpConsIdx != s->cmpProdIdx) { + struct PVSCSIRingCmpDesc *e = ring + (s->cmpConsIdx & + MASK(cmp_entries)); + /* + * This barrier() ensures that *e is not dereferenced while + * the device emulation still writes data into the slot. + * Since the device emulation advances s->cmpProdIdx only after + * updating the slot we want to check it first. + */ + barrier(); + pvscsi_complete_request(adapter, e); + /* + * This barrier() ensures that compiler doesn't reorder write + * to s->cmpConsIdx before the read of (*e) inside + * pvscsi_complete_request. Otherwise, device emulation may + * overwrite *e before we had a chance to read it. + */ + barrier(); + s->cmpConsIdx++; + } +} + +/* + * Translate a Linux SCSI request into a request ring entry. + */ +static int pvscsi_queue_ring(struct pvscsi_adapter *adapter, + struct pvscsi_ctx *ctx, struct scsi_cmnd *cmd) +{ + struct PVSCSIRingsState *s; + struct PVSCSIRingReqDesc *e; + struct scsi_device *sdev; + u32 req_entries; + + s = adapter->rings_state; + sdev = cmd->device; + req_entries = s->reqNumEntriesLog2; + + /* + * If this condition holds, we might have room on the request ring, but + * we might not have room on the completion ring for the response. + * However, we have already ruled out this possibility - we would not + * have successfully allocated a context if it were true, since we only + * have one context per request entry. Check for it anyway, since it + * would be a serious bug. + */ + if (s->reqProdIdx - s->cmpConsIdx >= 1 << req_entries) { + scmd_printk(KERN_ERR, cmd, "vmw_pvscsi: " + "ring full: reqProdIdx=%d cmpConsIdx=%d\n", + s->reqProdIdx, s->cmpConsIdx); + return -1; + } + + e = adapter->req_ring + (s->reqProdIdx & MASK(req_entries)); + + e->bus = sdev->channel; + e->target = sdev->id; + memset(e->lun, 0, sizeof(e->lun)); + e->lun[1] = sdev->lun; + + if (cmd->sense_buffer) { + ctx->sensePA = pci_map_single(adapter->dev, cmd->sense_buffer, + SCSI_SENSE_BUFFERSIZE, + PCI_DMA_FROMDEVICE); + e->senseAddr = ctx->sensePA; + e->senseLen = SCSI_SENSE_BUFFERSIZE; + } else { + e->senseLen = 0; + e->senseAddr = 0; + } + e->cdbLen = cmd->cmd_len; + e->vcpuHint = smp_processor_id(); + memcpy(e->cdb, cmd->cmnd, e->cdbLen); + + e->tag = SIMPLE_QUEUE_TAG; + if (sdev->tagged_supported && + (cmd->tag == HEAD_OF_QUEUE_TAG || + cmd->tag == ORDERED_QUEUE_TAG)) + e->tag = cmd->tag; + + if (cmd->sc_data_direction == DMA_FROM_DEVICE) + e->flags = PVSCSI_FLAG_CMD_DIR_TOHOST; + else if (cmd->sc_data_direction == DMA_TO_DEVICE) + e->flags = PVSCSI_FLAG_CMD_DIR_TODEVICE; + else if (cmd->sc_data_direction == DMA_NONE) + e->flags = PVSCSI_FLAG_CMD_DIR_NONE; + else + e->flags = 0; + + pvscsi_map_buffers(adapter, ctx, cmd, e); + + e->context = pvscsi_map_context(adapter, ctx); + + barrier(); + + s->reqProdIdx++; + + return 0; +} + +static int pvscsi_queue(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) +{ + struct Scsi_Host *host = cmd->device->host; + struct pvscsi_adapter *adapter = shost_priv(host); + struct pvscsi_ctx *ctx; + unsigned long flags; + + spin_lock_irqsave(&adapter->hw_lock, flags); + + ctx = pvscsi_acquire_context(adapter, cmd); + if (!ctx || pvscsi_queue_ring(adapter, ctx, cmd) != 0) { + if (ctx) + pvscsi_release_context(adapter, ctx); + spin_unlock_irqrestore(&adapter->hw_lock, flags); + return SCSI_MLQUEUE_HOST_BUSY; + } + + cmd->scsi_done = done; + + dev_dbg(&cmd->device->sdev_gendev, + "queued cmd %p, ctx %p, op=%x\n", cmd, ctx, cmd->cmnd[0]); + + spin_unlock_irqrestore(&adapter->hw_lock, flags); + + pvscsi_kick_io(adapter, cmd->cmnd[0]); + + return 0; +} + +static int pvscsi_abort(struct scsi_cmnd *cmd) +{ + struct pvscsi_adapter *adapter = shost_priv(cmd->device->host); + struct pvscsi_ctx *ctx; + unsigned long flags; + + scmd_printk(KERN_DEBUG, cmd, "task abort on host %u, %p\n", + adapter->host->host_no, cmd); + + spin_lock_irqsave(&adapter->hw_lock, flags); + + /* + * Poll the completion ring first - we might be trying to abort + * a command that is waiting to be dispatched in the completion ring. + */ + pvscsi_process_completion_ring(adapter); + + /* + * If there is no context for the command, it either already succeeded + * or else was never properly issued. Not our problem. + */ + ctx = pvscsi_find_context(adapter, cmd); + if (!ctx) { + scmd_printk(KERN_DEBUG, cmd, "Failed to abort cmd %p\n", cmd); + goto out; + } + + pvscsi_abort_cmd(adapter, ctx); + + pvscsi_process_completion_ring(adapter); + +out: + spin_unlock_irqrestore(&adapter->hw_lock, flags); + return SUCCESS; +} + +/* + * Abort all outstanding requests. This is only safe to use if the completion + * ring will never be walked again or the device has been reset, because it + * destroys the 1-1 mapping between context field passed to emulation and our + * request structure. + */ +static void pvscsi_reset_all(struct pvscsi_adapter *adapter) +{ + unsigned i; + + for (i = 0; i < adapter->req_depth; i++) { + struct pvscsi_ctx *ctx = &adapter->cmd_map[i]; + struct scsi_cmnd *cmd = ctx->cmd; + if (cmd) { + scmd_printk(KERN_ERR, cmd, + "Forced reset on cmd %p\n", cmd); + pvscsi_unmap_buffers(adapter, ctx); + pvscsi_release_context(adapter, ctx); + cmd->result = (DID_RESET << 16); + cmd->scsi_done(cmd); + } + } +} + +static int pvscsi_host_reset(struct scsi_cmnd *cmd) +{ + struct Scsi_Host *host = cmd->device->host; + struct pvscsi_adapter *adapter = shost_priv(host); + unsigned long flags; + bool use_msg; + + scmd_printk(KERN_INFO, cmd, "SCSI Host reset\n"); + + spin_lock_irqsave(&adapter->hw_lock, flags); + + use_msg = adapter->use_msg; + + if (use_msg) { + adapter->use_msg = 0; + spin_unlock_irqrestore(&adapter->hw_lock, flags); + + /* + * Now that we know that the ISR won't add more work on the + * workqueue we can safely flush any outstanding work. + */ + flush_workqueue(adapter->workqueue); + spin_lock_irqsave(&adapter->hw_lock, flags); + } + + /* + * We're going to tear down the entire ring structure and set it back + * up, so stalling new requests until all completions are flushed and + * the rings are back in place. + */ + + pvscsi_process_request_ring(adapter); + + ll_adapter_reset(adapter); + + /* + * Now process any completions. Note we do this AFTER adapter reset, + * which is strange, but stops races where completions get posted + * between processing the ring and issuing the reset. The backend will + * not touch the ring memory after reset, so the immediately pre-reset + * completion ring state is still valid. + */ + pvscsi_process_completion_ring(adapter); + + pvscsi_reset_all(adapter); + adapter->use_msg = use_msg; + pvscsi_setup_all_rings(adapter); + pvscsi_unmask_intr(adapter); + + spin_unlock_irqrestore(&adapter->hw_lock, flags); + + return SUCCESS; +} + +static int pvscsi_bus_reset(struct scsi_cmnd *cmd) +{ + struct Scsi_Host *host = cmd->device->host; + struct pvscsi_adapter *adapter = shost_priv(host); + unsigned long flags; + + scmd_printk(KERN_INFO, cmd, "SCSI Bus reset\n"); + + /* + * We don't want to queue new requests for this bus after + * flushing all pending requests to emulation, since new + * requests could then sneak in during this bus reset phase, + * so take the lock now. + */ + spin_lock_irqsave(&adapter->hw_lock, flags); + + pvscsi_process_request_ring(adapter); + ll_bus_reset(adapter); + pvscsi_process_completion_ring(adapter); + + spin_unlock_irqrestore(&adapter->hw_lock, flags); + + return SUCCESS; +} + +static int pvscsi_device_reset(struct scsi_cmnd *cmd) +{ + struct Scsi_Host *host = cmd->device->host; + struct pvscsi_adapter *adapter = shost_priv(host); + unsigned long flags; + + scmd_printk(KERN_INFO, cmd, "SCSI device reset on scsi%u:%u\n", + host->host_no, cmd->device->id); + + /* + * We don't want to queue new requests for this device after flushing + * all pending requests to emulation, since new requests could then + * sneak in during this device reset phase, so take the lock now. + */ + spin_lock_irqsave(&adapter->hw_lock, flags); + + pvscsi_process_request_ring(adapter); + ll_device_reset(adapter, cmd->device->id); + pvscsi_process_completion_ring(adapter); + + spin_unlock_irqrestore(&adapter->hw_lock, flags); + + return SUCCESS; +} + +static struct scsi_host_template pvscsi_template; + +static const char *pvscsi_info(struct Scsi_Host *host) +{ + struct pvscsi_adapter *adapter = shost_priv(host); + static char buf[256]; + + sprintf(buf, "VMware PVSCSI storage adapter rev %d, req/cmp/msg rings: " + "%u/%u/%u pages, cmd_per_lun=%u", adapter->rev, + adapter->req_pages, adapter->cmp_pages, adapter->msg_pages, + pvscsi_template.cmd_per_lun); + + return buf; +} + +static struct scsi_host_template pvscsi_template = { + .module = THIS_MODULE, + .name = "VMware PVSCSI Host Adapter", + .proc_name = "vmw_pvscsi", + .info = pvscsi_info, + .queuecommand = pvscsi_queue, + .this_id = -1, + .sg_tablesize = PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT, + .dma_boundary = UINT_MAX, + .max_sectors = 0xffff, + .use_clustering = ENABLE_CLUSTERING, + .eh_abort_handler = pvscsi_abort, + .eh_device_reset_handler = pvscsi_device_reset, + .eh_bus_reset_handler = pvscsi_bus_reset, + .eh_host_reset_handler = pvscsi_host_reset, +}; + +static void pvscsi_process_msg(const struct pvscsi_adapter *adapter, + const struct PVSCSIRingMsgDesc *e) +{ + struct PVSCSIRingsState *s = adapter->rings_state; + struct Scsi_Host *host = adapter->host; + struct scsi_device *sdev; + + printk(KERN_INFO "vmw_pvscsi: msg type: 0x%x - MSG RING: %u/%u (%u) \n", + e->type, s->msgProdIdx, s->msgConsIdx, s->msgNumEntriesLog2); + + BUILD_BUG_ON(PVSCSI_MSG_LAST != 2); + + if (e->type == PVSCSI_MSG_DEV_ADDED) { + struct PVSCSIMsgDescDevStatusChanged *desc; + desc = (struct PVSCSIMsgDescDevStatusChanged *)e; + + printk(KERN_INFO + "vmw_pvscsi: msg: device added at scsi%u:%u:%u\n", + desc->bus, desc->target, desc->lun[1]); + + if (!scsi_host_get(host)) + return; + + sdev = scsi_device_lookup(host, desc->bus, desc->target, + desc->lun[1]); + if (sdev) { + printk(KERN_INFO "vmw_pvscsi: device already exists\n"); + scsi_device_put(sdev); + } else + scsi_add_device(adapter->host, desc->bus, + desc->target, desc->lun[1]); + + scsi_host_put(host); + } else if (e->type == PVSCSI_MSG_DEV_REMOVED) { + struct PVSCSIMsgDescDevStatusChanged *desc; + desc = (struct PVSCSIMsgDescDevStatusChanged *)e; + + printk(KERN_INFO + "vmw_pvscsi: msg: device removed at scsi%u:%u:%u\n", + desc->bus, desc->target, desc->lun[1]); + + if (!scsi_host_get(host)) + return; + + sdev = scsi_device_lookup(host, desc->bus, desc->target, + desc->lun[1]); + if (sdev) { + scsi_remove_device(sdev); + scsi_device_put(sdev); + } else + printk(KERN_INFO + "vmw_pvscsi: failed to lookup scsi%u:%u:%u\n", + desc->bus, desc->target, desc->lun[1]); + + scsi_host_put(host); + } +} + +static int pvscsi_msg_pending(const struct pvscsi_adapter *adapter) +{ + struct PVSCSIRingsState *s = adapter->rings_state; + + return s->msgProdIdx != s->msgConsIdx; +} + +static void pvscsi_process_msg_ring(const struct pvscsi_adapter *adapter) +{ + struct PVSCSIRingsState *s = adapter->rings_state; + struct PVSCSIRingMsgDesc *ring = adapter->msg_ring; + u32 msg_entries = s->msgNumEntriesLog2; + + while (pvscsi_msg_pending(adapter)) { + struct PVSCSIRingMsgDesc *e = ring + (s->msgConsIdx & + MASK(msg_entries)); + + barrier(); + pvscsi_process_msg(adapter, e); + barrier(); + s->msgConsIdx++; + } +} + +static void pvscsi_msg_workqueue_handler(struct work_struct *data) +{ + struct pvscsi_adapter *adapter; + + adapter = container_of(data, struct pvscsi_adapter, work); + + pvscsi_process_msg_ring(adapter); +} + +static int pvscsi_setup_msg_workqueue(struct pvscsi_adapter *adapter) +{ + char name[32]; + + if (!pvscsi_use_msg) + return 0; + + pvscsi_reg_write(adapter, PVSCSI_REG_OFFSET_COMMAND, + PVSCSI_CMD_SETUP_MSG_RING); + + if (pvscsi_reg_read(adapter, PVSCSI_REG_OFFSET_COMMAND_STATUS) == -1) + return 0; + + snprintf(name, sizeof(name), + "vmw_pvscsi_wq_%u", adapter->host->host_no); + + adapter->workqueue = create_singlethread_workqueue(name); + if (!adapter->workqueue) { + printk(KERN_ERR "vmw_pvscsi: failed to create work queue\n"); + return 0; + } + INIT_WORK(&adapter->work, pvscsi_msg_workqueue_handler); + + return 1; +} + +static irqreturn_t pvscsi_isr(int irq, void *devp) +{ + struct pvscsi_adapter *adapter = devp; + int handled; + + if (adapter->use_msi || adapter->use_msix) + handled = true; + else { + u32 val = pvscsi_read_intr_status(adapter); + handled = (val & PVSCSI_INTR_ALL_SUPPORTED) != 0; + if (handled) + pvscsi_write_intr_status(devp, val); + } + + if (handled) { + unsigned long flags; + + spin_lock_irqsave(&adapter->hw_lock, flags); + + pvscsi_process_completion_ring(adapter); + if (adapter->use_msg && pvscsi_msg_pending(adapter)) + queue_work(adapter->workqueue, &adapter->work); + + spin_unlock_irqrestore(&adapter->hw_lock, flags); + } + + return IRQ_RETVAL(handled); +} + +static void pvscsi_free_sgls(const struct pvscsi_adapter *adapter) +{ + struct pvscsi_ctx *ctx = adapter->cmd_map; + unsigned i; + + for (i = 0; i < adapter->req_depth; ++i, ++ctx) + free_pages((unsigned long)ctx->sgl, get_order(SGL_SIZE)); +} + +static int pvscsi_setup_msix(const struct pvscsi_adapter *adapter, int *irq) +{ + struct msix_entry entry = { 0, PVSCSI_VECTOR_COMPLETION }; + int ret; + + ret = pci_enable_msix(adapter->dev, &entry, 1); + if (ret) + return ret; + + *irq = entry.vector; + + return 0; +} + +static void pvscsi_shutdown_intr(struct pvscsi_adapter *adapter) +{ + if (adapter->irq) { + free_irq(adapter->irq, adapter); + adapter->irq = 0; + } + if (adapter->use_msi) { + pci_disable_msi(adapter->dev); + adapter->use_msi = 0; + } else if (adapter->use_msix) { + pci_disable_msix(adapter->dev); + adapter->use_msix = 0; + } +} + +static void pvscsi_release_resources(struct pvscsi_adapter *adapter) +{ + pvscsi_shutdown_intr(adapter); + + if (adapter->workqueue) + destroy_workqueue(adapter->workqueue); + + if (adapter->mmioBase) + pci_iounmap(adapter->dev, adapter->mmioBase); + + pci_release_regions(adapter->dev); + + if (adapter->cmd_map) { + pvscsi_free_sgls(adapter); + kfree(adapter->cmd_map); + } + + if (adapter->rings_state) + pci_free_consistent(adapter->dev, PAGE_SIZE, + adapter->rings_state, adapter->ringStatePA); + + if (adapter->req_ring) + pci_free_consistent(adapter->dev, + adapter->req_pages * PAGE_SIZE, + adapter->req_ring, adapter->reqRingPA); + + if (adapter->cmp_ring) + pci_free_consistent(adapter->dev, + adapter->cmp_pages * PAGE_SIZE, + adapter->cmp_ring, adapter->cmpRingPA); + + if (adapter->msg_ring) + pci_free_consistent(adapter->dev, + adapter->msg_pages * PAGE_SIZE, + adapter->msg_ring, adapter->msgRingPA); +} + +/* + * Allocate scatter gather lists. + * + * These are statically allocated. Trying to be clever was not worth it. + * + * Dynamic allocation can fail, and we can't go deeep into the memory + * allocator, since we're a SCSI driver, and trying too hard to allocate + * memory might generate disk I/O. We also don't want to fail disk I/O + * in that case because we can't get an allocation - the I/O could be + * trying to swap out data to free memory. Since that is pathological, + * just use a statically allocated scatter list. + * + */ +static int __devinit pvscsi_allocate_sg(struct pvscsi_adapter *adapter) +{ + struct pvscsi_ctx *ctx; + int i; + + ctx = adapter->cmd_map; + BUILD_BUG_ON(sizeof(struct pvscsi_sg_list) > SGL_SIZE); + + for (i = 0; i < adapter->req_depth; ++i, ++ctx) { + ctx->sgl = (void *)__get_free_pages(GFP_KERNEL, + get_order(SGL_SIZE)); + ctx->sglPA = 0; + BUG_ON(!IS_ALIGNED(((unsigned long)ctx->sgl), PAGE_SIZE)); + if (!ctx->sgl) { + for (; i >= 0; --i, --ctx) { + free_pages((unsigned long)ctx->sgl, + get_order(SGL_SIZE)); + ctx->sgl = NULL; + } + return -ENOMEM; + } + } + + return 0; +} + +static int __devinit pvscsi_probe(struct pci_dev *pdev, + const struct pci_device_id *id) +{ + struct pvscsi_adapter *adapter; + struct Scsi_Host *host; + unsigned int i; + unsigned long flags = 0; + int error; + + error = -ENODEV; + + if (pci_enable_device(pdev)) + return error; + + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0 && + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) { + printk(KERN_INFO "vmw_pvscsi: using 64bit dma\n"); + } else if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) == 0 && + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) == 0) { + printk(KERN_INFO "vmw_pvscsi: using 32bit dma\n"); + } else { + printk(KERN_ERR "vmw_pvscsi: failed to set DMA mask\n"); + goto out_disable_device; + } + + pvscsi_template.can_queue = + min(PVSCSI_MAX_NUM_PAGES_REQ_RING, pvscsi_ring_pages) * + PVSCSI_MAX_NUM_REQ_ENTRIES_PER_PAGE; + pvscsi_template.cmd_per_lun = + min(pvscsi_template.can_queue, pvscsi_cmd_per_lun); + host = scsi_host_alloc(&pvscsi_template, sizeof(struct pvscsi_adapter)); + if (!host) { + printk(KERN_ERR "vmw_pvscsi: failed to allocate host\n"); + goto out_disable_device; + } + + adapter = shost_priv(host); + memset(adapter, 0, sizeof(*adapter)); + adapter->dev = pdev; + adapter->host = host; + + spin_lock_init(&adapter->hw_lock); + + host->max_channel = 0; + host->max_id = 16; + host->max_lun = 1; + host->max_cmd_len = 16; + + adapter->rev = pdev->revision; + + if (pci_request_regions(pdev, "vmw_pvscsi")) { + printk(KERN_ERR "vmw_pvscsi: pci memory selection failed\n"); + goto out_free_host; + } + + for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { + if ((pci_resource_flags(pdev, i) & PCI_BASE_ADDRESS_SPACE_IO)) + continue; + + if (pci_resource_len(pdev, i) < PVSCSI_MEM_SPACE_SIZE) + continue; + + break; + } + + if (i == DEVICE_COUNT_RESOURCE) { + printk(KERN_ERR + "vmw_pvscsi: adapter has no suitable MMIO region\n"); + goto out_release_resources; + } + + adapter->mmioBase = pci_iomap(pdev, i, PVSCSI_MEM_SPACE_SIZE); + + if (!adapter->mmioBase) { + printk(KERN_ERR + "vmw_pvscsi: can't iomap for BAR %d memsize %lu\n", + i, PVSCSI_MEM_SPACE_SIZE); + goto out_release_resources; + } + + pci_set_master(pdev); + pci_set_drvdata(pdev, host); + + ll_adapter_reset(adapter); + + adapter->use_msg = pvscsi_setup_msg_workqueue(adapter); + + error = pvscsi_allocate_rings(adapter); + if (error) { + printk(KERN_ERR "vmw_pvscsi: unable to allocate ring memory\n"); + goto out_release_resources; + } + + /* + * From this point on we should reset the adapter if anything goes + * wrong. + */ + pvscsi_setup_all_rings(adapter); + + adapter->cmd_map = kcalloc(adapter->req_depth, + sizeof(struct pvscsi_ctx), GFP_KERNEL); + if (!adapter->cmd_map) { + printk(KERN_ERR "vmw_pvscsi: failed to allocate memory.\n"); + error = -ENOMEM; + goto out_reset_adapter; + } + + INIT_LIST_HEAD(&adapter->cmd_pool); + for (i = 0; i < adapter->req_depth; i++) { + struct pvscsi_ctx *ctx = adapter->cmd_map + i; + list_add(&ctx->list, &adapter->cmd_pool); + } + + error = pvscsi_allocate_sg(adapter); + if (error) { + printk(KERN_ERR "vmw_pvscsi: unable to allocate s/g table\n"); + goto out_reset_adapter; + } + + if (!pvscsi_disable_msix && + pvscsi_setup_msix(adapter, &adapter->irq) == 0) { + printk(KERN_INFO "vmw_pvscsi: using MSI-X\n"); + adapter->use_msix = 1; + } else if (!pvscsi_disable_msi && pci_enable_msi(pdev) == 0) { + printk(KERN_INFO "vmw_pvscsi: using MSI\n"); + adapter->use_msi = 1; + adapter->irq = pdev->irq; + } else { + printk(KERN_INFO "vmw_pvscsi: using INTx\n"); + adapter->irq = pdev->irq; + flags = IRQF_SHARED; + } + + error = request_irq(adapter->irq, pvscsi_isr, flags, + "vmw_pvscsi", adapter); + if (error) { + printk(KERN_ERR + "vmw_pvscsi: unable to request IRQ: %d\n", error); + adapter->irq = 0; + goto out_reset_adapter; + } + + error = scsi_add_host(host, &pdev->dev); + if (error) { + printk(KERN_ERR + "vmw_pvscsi: scsi_add_host failed: %d\n", error); + goto out_reset_adapter; + } + + dev_info(&pdev->dev, "VMware PVSCSI rev %d host #%u\n", + adapter->rev, host->host_no); + + pvscsi_unmask_intr(adapter); + + scsi_scan_host(host); + + return 0; + +out_reset_adapter: + ll_adapter_reset(adapter); +out_release_resources: + pvscsi_release_resources(adapter); +out_free_host: + scsi_host_put(host); +out_disable_device: + pci_set_drvdata(pdev, NULL); + pci_disable_device(pdev); + + return error; +} + +static void __pvscsi_shutdown(struct pvscsi_adapter *adapter) +{ + pvscsi_mask_intr(adapter); + + if (adapter->workqueue) + flush_workqueue(adapter->workqueue); + + pvscsi_shutdown_intr(adapter); + + pvscsi_process_request_ring(adapter); + pvscsi_process_completion_ring(adapter); + ll_adapter_reset(adapter); +} + +static void pvscsi_shutdown(struct pci_dev *dev) +{ + struct Scsi_Host *host = pci_get_drvdata(dev); + struct pvscsi_adapter *adapter = shost_priv(host); + + __pvscsi_shutdown(adapter); +} + +static void pvscsi_remove(struct pci_dev *pdev) +{ + struct Scsi_Host *host = pci_get_drvdata(pdev); + struct pvscsi_adapter *adapter = shost_priv(host); + + scsi_remove_host(host); + + __pvscsi_shutdown(adapter); + pvscsi_release_resources(adapter); + + scsi_host_put(host); + + pci_set_drvdata(pdev, NULL); + pci_disable_device(pdev); +} + +static struct pci_driver pvscsi_pci_driver = { + .name = "vmw_pvscsi", + .id_table = pvscsi_pci_tbl, + .probe = pvscsi_probe, + .remove = __devexit_p(pvscsi_remove), + .shutdown = pvscsi_shutdown, +}; + +static int __init pvscsi_init(void) +{ + pr_info("%s - version %s\n", + PVSCSI_LINUX_DRIVER_DESC, PVSCSI_DRIVER_VERSION_STRING); + return pci_register_driver(&pvscsi_pci_driver); +} + +static void __exit pvscsi_exit(void) +{ + pci_unregister_driver(&pvscsi_pci_driver); +} + +module_init(pvscsi_init); +module_exit(pvscsi_exit); --- linux-2.6.32.orig/drivers/scsi/sd.c +++ linux-2.6.32/drivers/scsi/sd.c @@ -971,6 +971,7 @@ { rq->cmd_type = REQ_TYPE_BLOCK_PC; rq->timeout = SD_TIMEOUT; + rq->retries = SD_MAX_RETRIES; rq->cmd[0] = SYNCHRONIZE_CACHE; rq->cmd_len = 10; } --- linux-2.6.32.orig/drivers/scsi/libfc/fc_lport.c +++ linux-2.6.32/drivers/scsi/libfc/fc_lport.c @@ -329,7 +329,7 @@ * @sp: current sequence in the RLIR exchange * @fp: RLIR request frame * - * Locking Note: The lport lock is exected to be held before calling + * Locking Note: The lport lock is expected to be held before calling * this function. */ static void fc_lport_recv_rlir_req(struct fc_seq *sp, struct fc_frame *fp, @@ -348,7 +348,7 @@ * @sp: current sequence in the ECHO exchange * @fp: ECHO request frame * - * Locking Note: The lport lock is exected to be held before calling + * Locking Note: The lport lock is expected to be held before calling * this function. */ static void fc_lport_recv_echo_req(struct fc_seq *sp, struct fc_frame *in_fp, @@ -361,7 +361,7 @@ void *dp; u32 f_ctl; - FC_LPORT_DBG(lport, "Received RLIR request while in state %s\n", + FC_LPORT_DBG(lport, "Received ECHO request while in state %s\n", fc_lport_state(lport)); len = fr_len(in_fp) - sizeof(struct fc_frame_header); @@ -374,7 +374,7 @@ if (fp) { dp = fc_frame_payload_get(fp, len); memcpy(dp, pp, len); - *((u32 *)dp) = htonl(ELS_LS_ACC << 24); + *((__be32 *)dp) = htonl(ELS_LS_ACC << 24); sp = lport->tt.seq_start_next(sp); f_ctl = FC_FC_EX_CTX | FC_FC_LAST_SEQ | FC_FC_END_SEQ; fc_fill_fc_hdr(fp, FC_RCTL_ELS_REP, ep->did, ep->sid, @@ -385,12 +385,12 @@ } /** - * fc_lport_recv_echo_req() - Handle received Request Node ID data request - * @lport: Fibre Channel local port recieving the RNID - * @sp: current sequence in the RNID exchange - * @fp: RNID request frame + * fc_lport_recv_rnid_req() - Handle received Request Node ID data request + * @sp: The sequence in the RNID exchange + * @fp: The RNID request frame + * @lport: The local port recieving the RNID * - * Locking Note: The lport lock is exected to be held before calling + * Locking Note: The lport lock is expected to be held before calling * this function. */ static void fc_lport_recv_rnid_req(struct fc_seq *sp, struct fc_frame *in_fp, @@ -667,7 +667,7 @@ * Accept it with the common service parameters indicating our N port. * Set up to do a PLOGI if we have the higher-number WWPN. * - * Locking Note: The lport lock is exected to be held before calling + * Locking Note: The lport lock is expected to be held before calling * this function. */ static void fc_lport_recv_flogi_req(struct fc_seq *sp_in, @@ -1115,7 +1115,7 @@ if (!lport->tt.elsct_send(lport, FC_FID_FCTRL, fp, ELS_SCR, fc_lport_scr_resp, lport, lport->e_d_tov)) - fc_lport_error(lport, fp); + fc_lport_error(lport, NULL); } /** @@ -1186,7 +1186,7 @@ if (!lport->tt.elsct_send(lport, FC_FID_DIR_SERV, fp, FC_NS_RPN_ID, fc_lport_rpn_id_resp, lport, lport->e_d_tov)) - fc_lport_error(lport, fp); + fc_lport_error(lport, NULL); } static struct fc_rport_operations fc_lport_rport_ops = { @@ -1237,10 +1237,13 @@ switch (lport->state) { case LPORT_ST_DISABLED: + WARN_ON(1); + break; case LPORT_ST_READY: - case LPORT_ST_RESET: WARN_ON(1); break; + case LPORT_ST_RESET: + break; case LPORT_ST_FLOGI: fc_lport_enter_flogi(lport); break; @@ -1337,7 +1340,7 @@ if (!lport->tt.elsct_send(lport, FC_FID_FLOGI, fp, ELS_LOGO, fc_lport_logo_resp, lport, lport->e_d_tov)) - fc_lport_error(lport, fp); + fc_lport_error(lport, NULL); } /** @@ -1453,7 +1456,7 @@ if (!lport->tt.elsct_send(lport, FC_FID_FLOGI, fp, ELS_FLOGI, fc_lport_flogi_resp, lport, lport->e_d_tov)) - fc_lport_error(lport, fp); + fc_lport_error(lport, NULL); } /* Configure a fc_lport */ --- linux-2.6.32.orig/drivers/scsi/libfc/fc_fcp.c +++ linux-2.6.32/drivers/scsi/libfc/fc_fcp.c @@ -302,10 +302,13 @@ if (!fsp) return; + if (fsp->xfer_ddp == FC_XID_UNKNOWN) + return; + lp = fsp->lp; - if (fsp->xfer_ddp && lp->tt.ddp_done) { + if (lp->tt.ddp_done) { fsp->xfer_len = lp->tt.ddp_done(lp, fsp->xfer_ddp); - fsp->xfer_ddp = 0; + fsp->xfer_ddp = FC_XID_UNKNOWN; } } @@ -572,7 +575,8 @@ tlen -= sg_bytes; remaining -= sg_bytes; - if (tlen) + if ((skb_shinfo(fp_skb(fp))->nr_frags < FC_FRAME_SG_LEN) && + (tlen)) continue; /* @@ -1048,7 +1052,6 @@ seq = lp->tt.exch_seq_send(lp, fp, resp, fc_fcp_pkt_destroy, fsp, 0); if (!seq) { - fc_frame_free(fp); rc = -1; goto unlock; } @@ -1313,7 +1316,6 @@ fc_fcp_pkt_hold(fsp); /* hold while REC outstanding */ return; } - fc_frame_free(fp); retry: if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV); @@ -1561,10 +1563,9 @@ seq = lp->tt.exch_seq_send(lp, fp, fc_fcp_srr_resp, NULL, fsp, jiffies_to_msecs(FC_SCSI_REC_TOV)); - if (!seq) { - fc_frame_free(fp); + if (!seq) goto retry; - } + fsp->recov_seq = seq; fsp->xfer_len = offset; fsp->xfer_contig_end = offset; @@ -1708,6 +1709,7 @@ fsp->cmd = sc_cmd; /* save the cmd */ fsp->lp = lp; /* save the softc ptr */ fsp->rport = rport; /* set the remote port ptr */ + fsp->xfer_ddp = FC_XID_UNKNOWN; sc_cmd->scsi_done = done; /* @@ -1846,7 +1848,8 @@ * scsi status is good but transport level * underrun. */ - sc_cmd->result = DID_OK << 16; + sc_cmd->result = (fsp->state & FC_SRB_RCV_STATUS ? + DID_OK : DID_ERROR) << 16; } else { /* * scsi got underrun, this is an error @@ -2046,18 +2049,16 @@ int fc_slave_alloc(struct scsi_device *sdev) { struct fc_rport *rport = starget_to_rport(scsi_target(sdev)); - int queue_depth; if (!rport || fc_remote_port_chkready(rport)) return -ENXIO; - if (sdev->tagged_supported) { - if (sdev->host->hostt->cmd_per_lun) - queue_depth = sdev->host->hostt->cmd_per_lun; - else - queue_depth = FC_FCP_DFLT_QUEUE_DEPTH; - scsi_activate_tcq(sdev, queue_depth); - } + if (sdev->tagged_supported) + scsi_activate_tcq(sdev, FC_FCP_DFLT_QUEUE_DEPTH); + else + scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), + FC_FCP_DFLT_QUEUE_DEPTH); + return 0; } EXPORT_SYMBOL(fc_slave_alloc); --- linux-2.6.32.orig/drivers/scsi/libfc/fc_elsct.c +++ linux-2.6.32/drivers/scsi/libfc/fc_elsct.c @@ -53,8 +53,10 @@ did = FC_FID_DIR_SERV; } - if (rc) + if (rc) { + fc_frame_free(fp); return NULL; + } fc_fill_fc_hdr(fp, r_ctl, did, fc_host_port_id(lport->host), fh_type, FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); --- linux-2.6.32.orig/drivers/scsi/libfc/fc_rport.c +++ linux-2.6.32/drivers/scsi/libfc/fc_rport.c @@ -86,6 +86,7 @@ [RPORT_ST_LOGO] = "LOGO", [RPORT_ST_ADISC] = "ADISC", [RPORT_ST_DELETE] = "Delete", + [RPORT_ST_RESTART] = "Restart", }; /** @@ -99,8 +100,7 @@ struct fc_rport_priv *rdata; list_for_each_entry(rdata, &lport->disc.rports, peers) - if (rdata->ids.port_id == port_id && - rdata->rp_state != RPORT_ST_DELETE) + if (rdata->ids.port_id == port_id) return rdata; return NULL; } @@ -235,6 +235,7 @@ struct fc_rport_operations *rport_ops; struct fc_rport_identifiers ids; struct fc_rport *rport; + int restart = 0; mutex_lock(&rdata->rp_mutex); event = rdata->event; @@ -287,8 +288,20 @@ mutex_unlock(&rdata->rp_mutex); if (port_id != FC_FID_DIR_SERV) { + /* + * We must drop rp_mutex before taking disc_mutex. + * Re-evaluate state to allow for restart. + * A transition to RESTART state must only happen + * while disc_mutex is held and rdata is on the list. + */ mutex_lock(&lport->disc.disc_mutex); - list_del(&rdata->peers); + mutex_lock(&rdata->rp_mutex); + if (rdata->rp_state == RPORT_ST_RESTART) + restart = 1; + else + list_del(&rdata->peers); + rdata->event = RPORT_EV_NONE; + mutex_unlock(&rdata->rp_mutex); mutex_unlock(&lport->disc.disc_mutex); } @@ -312,7 +325,13 @@ mutex_unlock(&rdata->rp_mutex); fc_remote_port_delete(rport); } - kref_put(&rdata->kref, lport->tt.rport_destroy); + if (restart) { + mutex_lock(&rdata->rp_mutex); + FC_RPORT_DBG(rdata, "work restart\n"); + fc_rport_enter_plogi(rdata); + mutex_unlock(&rdata->rp_mutex); + } else + kref_put(&rdata->kref, lport->tt.rport_destroy); break; default: @@ -342,6 +361,12 @@ FC_RPORT_DBG(rdata, "ADISC port\n"); fc_rport_enter_adisc(rdata); break; + case RPORT_ST_RESTART: + break; + case RPORT_ST_DELETE: + FC_RPORT_DBG(rdata, "Restart deleted port\n"); + fc_rport_state_enter(rdata, RPORT_ST_RESTART); + break; default: FC_RPORT_DBG(rdata, "Login to port\n"); fc_rport_enter_plogi(rdata); @@ -397,20 +422,21 @@ if (rdata->rp_state == RPORT_ST_DELETE) { FC_RPORT_DBG(rdata, "Port in Delete state, not removing\n"); - mutex_unlock(&rdata->rp_mutex); goto out; } - fc_rport_enter_logo(rdata); + if (rdata->rp_state == RPORT_ST_RESTART) + FC_RPORT_DBG(rdata, "Port in Restart state, deleting\n"); + else + fc_rport_enter_logo(rdata); /* * Change the state to Delete so that we discard * the response. */ fc_rport_enter_delete(rdata, RPORT_EV_STOP); - mutex_unlock(&rdata->rp_mutex); - out: + mutex_unlock(&rdata->rp_mutex); return 0; } @@ -466,6 +492,7 @@ case RPORT_ST_READY: case RPORT_ST_INIT: case RPORT_ST_DELETE: + case RPORT_ST_RESTART: break; } @@ -499,6 +526,7 @@ fc_rport_enter_logo(rdata); break; case RPORT_ST_DELETE: + case RPORT_ST_RESTART: case RPORT_ST_READY: case RPORT_ST_INIT: break; @@ -632,7 +660,7 @@ if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_PLOGI, fc_rport_plogi_resp, rdata, lport->e_d_tov)) - fc_rport_error_retry(rdata, fp); + fc_rport_error_retry(rdata, NULL); else kref_get(&rdata->kref); } @@ -793,7 +821,7 @@ if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_PRLI, fc_rport_prli_resp, rdata, lport->e_d_tov)) - fc_rport_error_retry(rdata, fp); + fc_rport_error_retry(rdata, NULL); else kref_get(&rdata->kref); } @@ -889,7 +917,7 @@ if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_RTV, fc_rport_rtv_resp, rdata, lport->e_d_tov)) - fc_rport_error_retry(rdata, fp); + fc_rport_error_retry(rdata, NULL); else kref_get(&rdata->kref); } @@ -919,7 +947,7 @@ if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_LOGO, fc_rport_logo_resp, rdata, lport->e_d_tov)) - fc_rport_error_retry(rdata, fp); + fc_rport_error_retry(rdata, NULL); else kref_get(&rdata->kref); } @@ -1006,7 +1034,7 @@ } if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_ADISC, fc_rport_adisc_resp, rdata, lport->e_d_tov)) - fc_rport_error_retry(rdata, fp); + fc_rport_error_retry(rdata, NULL); else kref_get(&rdata->kref); } @@ -1248,6 +1276,7 @@ } break; case RPORT_ST_PRLI: + case RPORT_ST_RTV: case RPORT_ST_READY: case RPORT_ST_ADISC: FC_RPORT_DBG(rdata, "Received PLOGI in logged-in state %d " @@ -1255,11 +1284,14 @@ /* XXX TBD - should reset */ break; case RPORT_ST_DELETE: - default: - FC_RPORT_DBG(rdata, "Received PLOGI in unexpected state %d\n", - rdata->rp_state); - fc_frame_free(rx_fp); - goto out; + case RPORT_ST_LOGO: + case RPORT_ST_RESTART: + FC_RPORT_DBG(rdata, "Received PLOGI in state %s - send busy\n", + fc_rport_state(rdata)); + mutex_unlock(&rdata->rp_mutex); + rjt_data.reason = ELS_RJT_BUSY; + rjt_data.explan = ELS_EXPL_NONE; + goto reject; } /* @@ -1402,7 +1434,7 @@ break; case FC_TYPE_FCP: fcp_parm = ntohl(rspp->spp_params); - if (fcp_parm * FCP_SPPF_RETRY) + if (fcp_parm & FCP_SPPF_RETRY) rdata->flags |= FC_RP_FLAGS_RETRY; rdata->supported_classes = FC_COS_CLASS3; if (fcp_parm & FCP_SPPF_INIT_FCN) @@ -1510,14 +1542,14 @@ FC_RPORT_DBG(rdata, "Received LOGO request while in state %s\n", fc_rport_state(rdata)); + fc_rport_enter_delete(rdata, RPORT_EV_LOGO); + /* - * If the remote port was created due to discovery, - * log back in. It may have seen a stale RSCN about us. + * If the remote port was created due to discovery, set state + * to log back in. It may have seen a stale RSCN about us. */ - if (rdata->rp_state != RPORT_ST_DELETE && rdata->disc_id) - fc_rport_enter_plogi(rdata); - else - fc_rport_enter_delete(rdata, RPORT_EV_LOGO); + if (rdata->disc_id) + fc_rport_state_enter(rdata, RPORT_ST_RESTART); mutex_unlock(&rdata->rp_mutex); } else FC_RPORT_ID_DBG(lport, sid, --- linux-2.6.32.orig/drivers/scsi/libfc/fc_disc.c +++ linux-2.6.32/drivers/scsi/libfc/fc_disc.c @@ -371,7 +371,7 @@ disc, lport->e_d_tov)) return; err: - fc_disc_error(disc, fp); + fc_disc_error(disc, NULL); } /** --- linux-2.6.32.orig/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ linux-2.6.32/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -196,10 +196,28 @@ PCI_ANY_ID, PCI_ANY_ID }, { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2108_3, PCI_ANY_ID, PCI_ANY_ID }, + /* Meteor ~ 2116 */ { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2116_1, PCI_ANY_ID, PCI_ANY_ID }, { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2116_2, PCI_ANY_ID, PCI_ANY_ID }, + /* Thunderbolt ~ 2208 */ + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_1, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_2, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_3, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_4, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_5, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_6, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_7, + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2208_8, + PCI_ANY_ID, PCI_ANY_ID }, {0} /* Terminating entry */ }; MODULE_DEVICE_TABLE(pci, scsih_pci_table); @@ -5703,6 +5721,8 @@ struct _sas_port *mpt2sas_port; struct _sas_device *sas_device; struct _sas_node *expander_sibling; + struct _raid_device *raid_device, *next; + struct MPT2SAS_TARGET *sas_target_priv_data; struct workqueue_struct *wq; unsigned long flags; @@ -5716,6 +5736,21 @@ if (wq) destroy_workqueue(wq); + /* release all the volumes */ + list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list, + list) { + if (raid_device->starget) { + sas_target_priv_data = + raid_device->starget->hostdata; + sas_target_priv_data->deleted = 1; + scsi_remove_target(&raid_device->starget->dev); + } + printk(MPT2SAS_INFO_FMT "removing handle(0x%04x), wwid" + "(0x%016llx)\n", ioc->name, raid_device->handle, + (unsigned long long) raid_device->wwid); + _scsih_raid_device_remove(ioc, raid_device); + } + /* free ports attached to the sas_host */ retry_again: list_for_each_entry(mpt2sas_port, --- linux-2.6.32.orig/drivers/scsi/mpt2sas/mpi/mpi2_cnfg.h +++ linux-2.6.32/drivers/scsi/mpt2sas/mpi/mpi2_cnfg.h @@ -348,6 +348,14 @@ #define MPI2_MFGPAGE_DEVID_SAS2108_3 (0x0077) #define MPI2_MFGPAGE_DEVID_SAS2116_1 (0x0064) #define MPI2_MFGPAGE_DEVID_SAS2116_2 (0x0065) +#define MPI2_MFGPAGE_DEVID_SAS2208_1 (0x0080) +#define MPI2_MFGPAGE_DEVID_SAS2208_2 (0x0081) +#define MPI2_MFGPAGE_DEVID_SAS2208_3 (0x0082) +#define MPI2_MFGPAGE_DEVID_SAS2208_4 (0x0083) +#define MPI2_MFGPAGE_DEVID_SAS2208_5 (0x0084) +#define MPI2_MFGPAGE_DEVID_SAS2208_6 (0x0085) +#define MPI2_MFGPAGE_DEVID_SAS2208_7 (0x0086) +#define MPI2_MFGPAGE_DEVID_SAS2208_8 (0x0087) /* Manufacturing Page 0 */ --- linux-2.6.32.orig/drivers/scsi/mvsas/mv_init.c +++ linux-2.6.32/drivers/scsi/mvsas/mv_init.c @@ -657,6 +657,7 @@ { PCI_VDEVICE(MARVELL, 0x9180), chip_9180 }, { PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1300), chip_1300 }, { PCI_VDEVICE(ARECA, PCI_DEVICE_ID_ARECA_1320), chip_1320 }, + { PCI_VDEVICE(ADAPTEC2, 0x0450), chip_6440 }, { } /* terminate list */ }; --- linux-2.6.32.orig/drivers/scsi/arm/fas216.c +++ linux-2.6.32/drivers/scsi/arm/fas216.c @@ -2516,7 +2516,7 @@ if (info->scsi.phase == PHASE_IDLE) fas216_kick(info); - mod_timer(&info->eh_timer, 30 * HZ); + mod_timer(&info->eh_timer, jiffies + 30 * HZ); spin_unlock_irqrestore(&info->host_lock, flags); /* --- linux-2.6.32.orig/drivers/scsi/lpfc/lpfc_init.c +++ linux-2.6.32/drivers/scsi/lpfc/lpfc_init.c @@ -2408,7 +2408,7 @@ vport->els_tmofunc.function = lpfc_els_timeout; vport->els_tmofunc.data = (unsigned long)vport; - error = scsi_add_host(shost, dev); + error = scsi_add_host_with_dma(shost, dev, &phba->pcidev->dev); if (error) goto out_put_shost; @@ -4384,9 +4384,13 @@ pdev = phba->pcidev; /* Set the device DMA mask size */ - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0 + || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(64)) != 0) { + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0 + || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(32)) != 0) { return error; + } + } /* Get the bus address of Bar0 and Bar2 and the number of bytes * required by each mapping. @@ -5940,9 +5944,13 @@ pdev = phba->pcidev; /* Set the device DMA mask size */ - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0 + || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(64)) != 0) { + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0 + || pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(32)) != 0) { return error; + } + } /* Get the bus address of SLI4 device Bar0, Bar1, and Bar2 and the * number of bytes required by each mapping. They are actually --- linux-2.6.32.orig/drivers/scsi/fcoe/fcoe.c +++ linux-2.6.32/drivers/scsi/fcoe/fcoe.c @@ -137,7 +137,7 @@ .change_queue_depth = fc_change_queue_depth, .change_queue_type = fc_change_queue_type, .this_id = -1, - .cmd_per_lun = 32, + .cmd_per_lun = 3, .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS, .use_clustering = ENABLE_CLUSTERING, .sg_tablesize = SG_ALL, @@ -160,6 +160,7 @@ { struct fcoe_ctlr *fip = &fcoe->ctlr; struct netdev_hw_addr *ha; + struct net_device *real_dev; u8 flogi_maddr[ETH_ALEN]; fcoe->netdev = netdev; @@ -173,10 +174,12 @@ /* look for SAN MAC address, if multiple SAN MACs exist, only * use the first one for SPMA */ + real_dev = (netdev->priv_flags & IFF_802_1Q_VLAN) ? + vlan_dev_real_dev(netdev) : netdev; rcu_read_lock(); - for_each_dev_addr(netdev, ha) { + for_each_dev_addr(real_dev, ha) { if ((ha->type == NETDEV_HW_ADDR_T_SAN) && - (is_valid_ether_addr(fip->ctl_src_addr))) { + (is_valid_ether_addr(ha->addr))) { memcpy(fip->ctl_src_addr, ha->addr, ETH_ALEN); fip->spma = 1; break; @@ -664,7 +667,7 @@ { struct net_device *n = fcoe_netdev(lp); - if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_setup) + if (n->netdev_ops->ndo_fcoe_ddp_setup) return n->netdev_ops->ndo_fcoe_ddp_setup(n, xid, sgl, sgc); return 0; @@ -681,7 +684,7 @@ { struct net_device *n = fcoe_netdev(lp); - if (n->netdev_ops && n->netdev_ops->ndo_fcoe_ddp_done) + if (n->netdev_ops->ndo_fcoe_ddp_done) return n->netdev_ops->ndo_fcoe_ddp_done(n, xid); return 0; } @@ -1631,7 +1634,7 @@ { struct fcoe_interface *fcoe; struct net_device *netdev; - int rc; + int rc = 0; mutex_lock(&fcoe_config_mutex); #ifdef CONFIG_FCOE_MODULE --- linux-2.6.32.orig/drivers/scsi/qla2xxx/qla_gbl.h +++ linux-2.6.32/drivers/scsi/qla2xxx/qla_gbl.h @@ -453,6 +453,5 @@ extern void qla25xx_wrt_req_reg(struct qla_hw_data *, uint16_t, uint16_t); extern void qla25xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t); extern void qla24xx_wrt_rsp_reg(struct qla_hw_data *, uint16_t, uint16_t); -extern struct scsi_qla_host * qla25xx_get_host(struct rsp_que *); #endif /* _QLA_GBL_H */ --- linux-2.6.32.orig/drivers/scsi/qla2xxx/qla_os.c +++ linux-2.6.32/drivers/scsi/qla2xxx/qla_os.c @@ -2016,13 +2016,13 @@ DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n", base_vha->host_no, ha)); - base_vha->flags.init_done = 1; - base_vha->flags.online = 1; - ret = scsi_add_host(host, &pdev->dev); if (ret) goto probe_failed; + base_vha->flags.init_done = 1; + base_vha->flags.online = 1; + ha->isp_ops->enable_intrs(ha); scsi_scan_host(host); --- linux-2.6.32.orig/drivers/scsi/qla2xxx/qla_attr.c +++ linux-2.6.32/drivers/scsi/qla2xxx/qla_attr.c @@ -1654,7 +1654,8 @@ fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN); } - if (scsi_add_host(vha->host, &fc_vport->dev)) { + if (scsi_add_host_with_dma(vha->host, &fc_vport->dev, + &ha->pdev->dev)) { DEBUG15(printk("scsi(%ld): scsi_add_host failure for VP[%d].\n", vha->host_no, vha->vp_idx)); goto vport_create_failed_2; --- linux-2.6.32.orig/drivers/scsi/qla2xxx/qla_mid.c +++ linux-2.6.32/drivers/scsi/qla2xxx/qla_mid.c @@ -638,11 +638,15 @@ static void qla_do_work(struct work_struct *work) { + unsigned long flags; struct rsp_que *rsp = container_of(work, struct rsp_que, q_work); struct scsi_qla_host *vha; + struct qla_hw_data *ha = rsp->hw; - vha = qla25xx_get_host(rsp); + spin_lock_irqsave(&rsp->hw->hardware_lock, flags); + vha = pci_get_drvdata(ha->pdev); qla24xx_process_response_queue(vha, rsp); + spin_unlock_irqrestore(&rsp->hw->hardware_lock, flags); } /* create response queue */ --- linux-2.6.32.orig/drivers/scsi/qla2xxx/qla_isr.c +++ linux-2.6.32/drivers/scsi/qla2xxx/qla_isr.c @@ -1347,16 +1347,22 @@ sense_len = rsp_info_len = resid_len = fw_resid_len = 0; if (IS_FWI2_CAPABLE(ha)) { - sense_len = le32_to_cpu(sts24->sense_len); - rsp_info_len = le32_to_cpu(sts24->rsp_data_len); - resid_len = le32_to_cpu(sts24->rsp_residual_count); - fw_resid_len = le32_to_cpu(sts24->residual_len); + if (scsi_status & SS_SENSE_LEN_VALID) + sense_len = le32_to_cpu(sts24->sense_len); + if (scsi_status & SS_RESPONSE_INFO_LEN_VALID) + rsp_info_len = le32_to_cpu(sts24->rsp_data_len); + if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) + resid_len = le32_to_cpu(sts24->rsp_residual_count); + if (comp_status == CS_DATA_UNDERRUN) + fw_resid_len = le32_to_cpu(sts24->residual_len); rsp_info = sts24->data; sense_data = sts24->data; host_to_fcp_swap(sts24->data, sizeof(sts24->data)); } else { - sense_len = le16_to_cpu(sts->req_sense_length); - rsp_info_len = le16_to_cpu(sts->rsp_info_len); + if (scsi_status & SS_SENSE_LEN_VALID) + sense_len = le16_to_cpu(sts->req_sense_length); + if (scsi_status & SS_RESPONSE_INFO_LEN_VALID) + rsp_info_len = le16_to_cpu(sts->rsp_info_len); resid_len = le32_to_cpu(sts->residual_length); rsp_info = sts->rsp_info; sense_data = sts->req_sense_data; @@ -1443,38 +1449,62 @@ break; case CS_DATA_UNDERRUN: - resid = resid_len; + DEBUG2(printk(KERN_INFO + "scsi(%ld:%d:%d) UNDERRUN status detected 0x%x-0x%x. " + "resid=0x%x fw_resid=0x%x cdb=0x%x os_underflow=0x%x\n", + vha->host_no, cp->device->id, cp->device->lun, comp_status, + scsi_status, resid_len, fw_resid_len, cp->cmnd[0], + cp->underflow)); + /* Use F/W calculated residual length. */ - if (IS_FWI2_CAPABLE(ha)) { - if (!(scsi_status & SS_RESIDUAL_UNDER)) { - lscsi_status = 0; - } else if (resid != fw_resid_len) { - scsi_status &= ~SS_RESIDUAL_UNDER; - lscsi_status = 0; + resid = IS_FWI2_CAPABLE(ha) ? fw_resid_len : resid_len; + scsi_set_resid(cp, resid); + if (scsi_status & SS_RESIDUAL_UNDER) { + if (IS_FWI2_CAPABLE(ha) && fw_resid_len != resid_len) { + DEBUG2(printk( + "scsi(%ld:%d:%d:%d) Dropped frame(s) " + "detected (%x of %x bytes)...residual " + "length mismatch...retrying command.\n", + vha->host_no, cp->device->channel, + cp->device->id, cp->device->lun, resid, + scsi_bufflen(cp))); + + cp->result = DID_ERROR << 16 | lscsi_status; + break; } - resid = fw_resid_len; - } - if (scsi_status & SS_RESIDUAL_UNDER) { - scsi_set_resid(cp, resid); - } else { - DEBUG2(printk(KERN_INFO - "scsi(%ld:%d:%d) UNDERRUN status detected " - "0x%x-0x%x. resid=0x%x fw_resid=0x%x cdb=0x%x " - "os_underflow=0x%x\n", vha->host_no, - cp->device->id, cp->device->lun, comp_status, - scsi_status, resid_len, resid, cp->cmnd[0], - cp->underflow)); + if (!lscsi_status && + ((unsigned)(scsi_bufflen(cp) - resid) < + cp->underflow)) { + qla_printk(KERN_INFO, ha, + "scsi(%ld:%d:%d:%d): Mid-layer underflow " + "detected (%x of %x bytes)...returning " + "error status.\n", vha->host_no, + cp->device->channel, cp->device->id, + cp->device->lun, resid, scsi_bufflen(cp)); + + cp->result = DID_ERROR << 16; + break; + } + } else if (!lscsi_status) { + DEBUG2(printk( + "scsi(%ld:%d:%d:%d) Dropped frame(s) detected " + "(%x of %x bytes)...firmware reported underrun..." + "retrying command.\n", vha->host_no, + cp->device->channel, cp->device->id, + cp->device->lun, resid, scsi_bufflen(cp))); + cp->result = DID_ERROR << 16; + break; } + cp->result = DID_OK << 16 | lscsi_status; + /* * Check to see if SCSI Status is non zero. If so report SCSI * Status. */ if (lscsi_status != 0) { - cp->result = DID_OK << 16 | lscsi_status; - if (lscsi_status == SAM_STAT_TASK_SET_FULL) { DEBUG2(printk(KERN_INFO "scsi(%ld): QUEUE FULL status detected " @@ -1501,42 +1531,6 @@ break; qla2x00_handle_sense(sp, sense_data, sense_len, rsp); - } else { - /* - * If RISC reports underrun and target does not report - * it then we must have a lost frame, so tell upper - * layer to retry it by reporting an error. - */ - if (!(scsi_status & SS_RESIDUAL_UNDER)) { - DEBUG2(printk("scsi(%ld:%d:%d:%d) Dropped " - "frame(s) detected (%x of %x bytes)..." - "retrying command.\n", - vha->host_no, cp->device->channel, - cp->device->id, cp->device->lun, resid, - scsi_bufflen(cp))); - - scsi_set_resid(cp, resid); - cp->result = DID_ERROR << 16; - break; - } - - /* Handle mid-layer underflow */ - if ((unsigned)(scsi_bufflen(cp) - resid) < - cp->underflow) { - qla_printk(KERN_INFO, ha, - "scsi(%ld:%d:%d:%d): Mid-layer underflow " - "detected (%x of %x bytes)...returning " - "error status.\n", vha->host_no, - cp->device->channel, cp->device->id, - cp->device->lun, resid, - scsi_bufflen(cp)); - - cp->result = DID_ERROR << 16; - break; - } - - /* Everybody online, looking good... */ - cp->result = DID_OK << 16; } break; @@ -2018,7 +2012,7 @@ spin_lock_irq(&ha->hardware_lock); - vha = qla25xx_get_host(rsp); + vha = pci_get_drvdata(ha->pdev); qla24xx_process_response_queue(vha, rsp); if (!ha->mqenable) { WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); @@ -2357,30 +2351,3 @@ msix->rsp = rsp; return ret; } - -struct scsi_qla_host * -qla25xx_get_host(struct rsp_que *rsp) -{ - srb_t *sp; - struct qla_hw_data *ha = rsp->hw; - struct scsi_qla_host *vha = NULL; - struct sts_entry_24xx *pkt; - struct req_que *req; - uint16_t que; - uint32_t handle; - - pkt = (struct sts_entry_24xx *) rsp->ring_ptr; - que = MSW(pkt->handle); - handle = (uint32_t) LSW(pkt->handle); - req = ha->req_q_map[que]; - if (handle < MAX_OUTSTANDING_COMMANDS) { - sp = req->outstanding_cmds[handle]; - if (sp) - return sp->fcport->vha; - else - goto base_que; - } -base_que: - vha = pci_get_drvdata(ha->pdev); - return vha; -} --- linux-2.6.32.orig/drivers/scsi/libsas/sas_ata.c +++ linux-2.6.32/drivers/scsi/libsas/sas_ata.c @@ -394,11 +394,15 @@ void sas_ata_task_abort(struct sas_task *task) { struct ata_queued_cmd *qc = task->uldd_task; + struct request_queue *q = qc->scsicmd->device->request_queue; struct completion *waiting; + unsigned long flags; /* Bounce SCSI-initiated commands to the SCSI EH */ if (qc->scsicmd) { + spin_lock_irqsave(q->queue_lock, flags); blk_abort_request(qc->scsicmd->request); + spin_unlock_irqrestore(q->queue_lock, flags); scsi_schedule_eh(qc->scsicmd->device->host); return; } --- linux-2.6.32.orig/drivers/scsi/libsas/sas_scsi_host.c +++ linux-2.6.32/drivers/scsi/libsas/sas_scsi_host.c @@ -1025,6 +1025,8 @@ void sas_task_abort(struct sas_task *task) { struct scsi_cmnd *sc = task->uldd_task; + struct request_queue *q = sc->device->request_queue; + unsigned long flags; /* Escape for libsas internal commands */ if (!sc) { @@ -1039,7 +1041,9 @@ return; } + spin_lock_irqsave(q->queue_lock, flags); blk_abort_request(sc->request); + spin_unlock_irqrestore(q->queue_lock, flags); scsi_schedule_eh(sc->device->host); } --- linux-2.6.32.orig/drivers/scsi/device_handler/scsi_dh.c +++ linux-2.6.32/drivers/scsi/device_handler/scsi_dh.c @@ -304,18 +304,15 @@ sdev = to_scsi_device(dev); if (action == BUS_NOTIFY_ADD_DEVICE) { + err = device_create_file(dev, &scsi_dh_state_attr); + /* don't care about err */ devinfo = device_handler_match(NULL, sdev); - if (!devinfo) - goto out; - - err = scsi_dh_handler_attach(sdev, devinfo); - if (!err) - err = device_create_file(dev, &scsi_dh_state_attr); + if (devinfo) + err = scsi_dh_handler_attach(sdev, devinfo); } else if (action == BUS_NOTIFY_DEL_DEVICE) { device_remove_file(dev, &scsi_dh_state_attr); scsi_dh_handler_detach(sdev, NULL); } -out: return err; } --- linux-2.6.32.orig/drivers/scsi/megaraid/megaraid_sas.c +++ linux-2.6.32/drivers/scsi/megaraid/megaraid_sas.c @@ -3032,7 +3032,7 @@ int error = 0, i; void *sense = NULL; dma_addr_t sense_handle; - u32 *sense_ptr; + unsigned long *sense_ptr; memset(kbuff_arr, 0, sizeof(kbuff_arr)); @@ -3109,7 +3109,7 @@ } sense_ptr = - (u32 *) ((unsigned long)cmd->frame + ioc->sense_off); + (unsigned long *) ((unsigned long)cmd->frame + ioc->sense_off); *sense_ptr = sense_handle; } @@ -3140,8 +3140,8 @@ * sense_ptr points to the location that has the user * sense buffer address */ - sense_ptr = (u32 *) ((unsigned long)ioc->frame.raw + - ioc->sense_off); + sense_ptr = (unsigned long *) ((unsigned long)ioc->frame.raw + + ioc->sense_off); if (copy_to_user((void __user *)((unsigned long)(*sense_ptr)), sense, ioc->sense_len)) { @@ -3282,6 +3282,7 @@ compat_alloc_user_space(sizeof(struct megasas_iocpacket)); int i; int error = 0; + compat_uptr_t ptr; if (clear_user(ioc, sizeof(*ioc))) return -EFAULT; @@ -3294,9 +3295,22 @@ copy_in_user(&ioc->sge_count, &cioc->sge_count, sizeof(u32))) return -EFAULT; - for (i = 0; i < MAX_IOCTL_SGE; i++) { - compat_uptr_t ptr; + /* + * The sense_ptr is used in megasas_mgmt_fw_ioctl only when + * sense_len is not null, so prepare the 64bit value under + * the same condition. + */ + if (ioc->sense_len) { + void __user **sense_ioc_ptr = + (void __user **)(ioc->frame.raw + ioc->sense_off); + compat_uptr_t *sense_cioc_ptr = + (compat_uptr_t *)(cioc->frame.raw + cioc->sense_off); + if (get_user(ptr, sense_cioc_ptr) || + put_user(compat_ptr(ptr), sense_ioc_ptr)) + return -EFAULT; + } + for (i = 0; i < MAX_IOCTL_SGE; i++) { if (get_user(ptr, &cioc->sgl[i].iov_base) || put_user(compat_ptr(ptr), &ioc->sgl[i].iov_base) || copy_in_user(&ioc->sgl[i].iov_len, @@ -3451,7 +3465,7 @@ return retval; } -static DRIVER_ATTR(poll_mode_io, S_IRUGO|S_IWUGO, +static DRIVER_ATTR(poll_mode_io, S_IRUGO|S_IWUSR, megasas_sysfs_show_poll_mode_io, megasas_sysfs_set_poll_mode_io); --- linux-2.6.32.orig/drivers/net/ks8851_mll.c +++ linux-2.6.32/drivers/net/ks8851_mll.c @@ -854,8 +854,8 @@ static irqreturn_t ks_irq(int irq, void *pw) { - struct ks_net *ks = pw; - struct net_device *netdev = ks->netdev; + struct net_device *netdev = pw; + struct ks_net *ks = netdev_priv(netdev); u16 status; /*this should be the first in IRQ handler */ --- linux-2.6.32.orig/drivers/net/e100.c +++ linux-2.6.32/drivers/net/e100.c @@ -1817,6 +1817,7 @@ &nic->cbs_dma_addr); if (!nic->cbs) return -ENOMEM; + memset(nic->cbs, 0, count * sizeof(struct cb)); for (cb = nic->cbs, i = 0; i < count; cb++, i++) { cb->next = (i + 1 < count) ? cb + 1 : nic->cbs; @@ -1825,7 +1826,6 @@ cb->dma_addr = nic->cbs_dma_addr + i * sizeof(struct cb); cb->link = cpu_to_le32(nic->cbs_dma_addr + ((i+1) % count) * sizeof(struct cb)); - cb->skb = NULL; } nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = nic->cbs; --- linux-2.6.32.orig/drivers/net/tg3.c +++ linux-2.6.32/drivers/net/tg3.c @@ -4995,7 +4995,7 @@ struct tg3 *tp = netdev_priv(dev); for (i = 0; i < tp->irq_cnt; i++) - tg3_interrupt(tp->napi[i].irq_vec, dev); + tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); } #endif @@ -5392,7 +5392,7 @@ mss = 0; if ((mss = skb_shinfo(skb)->gso_size) != 0) { struct iphdr *iph; - int tcp_opt_len, ip_tcp_len, hdr_len; + u32 tcp_opt_len, ip_tcp_len, hdr_len; if (skb_header_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { @@ -5423,8 +5423,10 @@ IPPROTO_TCP, 0); - if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) || - (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) { + if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) + mss |= hdr_len << 9; + else if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_1) || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { if (tcp_opt_len || iph->ihl > 5) { int tsflags; @@ -5459,6 +5461,9 @@ would_hit_hwbug = 0; + if ((tp->tg3_flags3 & TG3_FLG3_SHORT_DMA_BUG) && len <= 8) + would_hit_hwbug = 1; + if (tp->tg3_flags3 & TG3_FLG3_5701_DMA_BUG) would_hit_hwbug = 1; else if (tg3_4g_overflow_test(mapping, len)) @@ -5482,6 +5487,10 @@ tnapi->tx_buffers[entry].skb = NULL; + if ((tp->tg3_flags3 & TG3_FLG3_SHORT_DMA_BUG) && + len <= 8) + would_hit_hwbug = 1; + if (tg3_4g_overflow_test(mapping, len)) would_hit_hwbug = 1; @@ -8159,6 +8168,7 @@ pci_disable_msi(tp->pdev); tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI; + tp->napi[0].irq_vec = tp->pdev->irq; err = tg3_request_irq(tp, 0); if (err) @@ -12608,6 +12618,9 @@ } } + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) + tp->tg3_flags3 |= TG3_FLG3_SHORT_DMA_BUG; + tp->irq_max = 1; #ifdef TG3_NAPI @@ -13975,8 +13988,7 @@ goto err_out_iounmap; } - if ((tp->tg3_flags3 & TG3_FLG3_5755_PLUS) || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) + if (tp->tg3_flags3 & TG3_FLG3_5755_PLUS) dev->netdev_ops = &tg3_netdev_ops; else dev->netdev_ops = &tg3_netdev_ops_dma_bug; --- linux-2.6.32.orig/drivers/net/tg3.h +++ linux-2.6.32/drivers/net/tg3.h @@ -2759,6 +2759,9 @@ #define TG3_FLG3_TOGGLE_10_100_L1PLLPD 0x00008000 #define TG3_FLG3_PHY_IS_FET 0x00010000 #define TG3_FLG3_ENABLE_RSS 0x00020000 +#define TG3_FLG3_4G_DMA_BNDRY_BUG 0x00080000 +#define TG3_FLG3_40BIT_DMA_LIMIT_BUG 0x00100000 +#define TG3_FLG3_SHORT_DMA_BUG 0x00200000 struct timer_list timer; u16 timer_counter; --- linux-2.6.32.orig/drivers/net/sky2.h +++ linux-2.6.32/drivers/net/sky2.h @@ -16,6 +16,13 @@ PCI_DEV_REG5 = 0x88, PCI_CFG_REG_0 = 0x90, PCI_CFG_REG_1 = 0x94, + + PSM_CONFIG_REG0 = 0x98, + PSM_CONFIG_REG1 = 0x9C, + PSM_CONFIG_REG2 = 0x160, + PSM_CONFIG_REG3 = 0x164, + PSM_CONFIG_REG4 = 0x168, + }; /* Yukon-2 */ @@ -48,6 +55,37 @@ PCI_USEDATA64 = 1<<0, /* Use 64Bit Data bus ext */ }; +/* PCI_OUR_REG_3 32 bit Our Register 3 (Yukon-ECU only) */ +enum pci_dev_reg_3 { + P_CLK_ASF_REGS_DIS = 1<<18,/* Disable Clock ASF (Yukon-Ext.) */ + P_CLK_COR_REGS_D0_DIS = 1<<17,/* Disable Clock Core Regs D0 */ + P_CLK_MACSEC_DIS = 1<<17,/* Disable Clock MACSec (Yukon-Ext.) */ + P_CLK_PCI_REGS_D0_DIS = 1<<16,/* Disable Clock PCI Regs D0 */ + P_CLK_COR_YTB_ARB_DIS = 1<<15,/* Disable Clock YTB Arbiter */ + P_CLK_MAC_LNK1_D3_DIS = 1<<14,/* Disable Clock MAC Link1 D3 */ + P_CLK_COR_LNK1_D0_DIS = 1<<13,/* Disable Clock Core Link1 D0 */ + P_CLK_MAC_LNK1_D0_DIS = 1<<12,/* Disable Clock MAC Link1 D0 */ + P_CLK_COR_LNK1_D3_DIS = 1<<11,/* Disable Clock Core Link1 D3 */ + P_CLK_PCI_MST_ARB_DIS = 1<<10,/* Disable Clock PCI Master Arb. */ + P_CLK_COR_REGS_D3_DIS = 1<<9, /* Disable Clock Core Regs D3 */ + P_CLK_PCI_REGS_D3_DIS = 1<<8, /* Disable Clock PCI Regs D3 */ + P_CLK_REF_LNK1_GM_DIS = 1<<7, /* Disable Clock Ref. Link1 GMAC */ + P_CLK_COR_LNK1_GM_DIS = 1<<6, /* Disable Clock Core Link1 GMAC */ + P_CLK_PCI_COMMON_DIS = 1<<5, /* Disable Clock PCI Common */ + P_CLK_COR_COMMON_DIS = 1<<4, /* Disable Clock Core Common */ + P_CLK_PCI_LNK1_BMU_DIS = 1<<3, /* Disable Clock PCI Link1 BMU */ + P_CLK_COR_LNK1_BMU_DIS = 1<<2, /* Disable Clock Core Link1 BMU */ + P_CLK_PCI_LNK1_BIU_DIS = 1<<1, /* Disable Clock PCI Link1 BIU */ + P_CLK_COR_LNK1_BIU_DIS = 1<<0, /* Disable Clock Core Link1 BIU */ + PCIE_OUR3_WOL_D3_COLD_SET = P_CLK_ASF_REGS_DIS | + P_CLK_COR_REGS_D0_DIS | + P_CLK_COR_LNK1_D0_DIS | + P_CLK_MAC_LNK1_D0_DIS | + P_CLK_PCI_MST_ARB_DIS | + P_CLK_COR_COMMON_DIS | + P_CLK_COR_LNK1_BMU_DIS, +}; + /* PCI_OUR_REG_4 32 bit Our Register 4 (Yukon-ECU only) */ enum pci_dev_reg_4 { /* (Link Training & Status State Machine) */ @@ -114,7 +152,7 @@ P_GAT_PCIE_RX_EL_IDLE, }; -#/* PCI_CFG_REG_1 32 bit Config Register 1 (Yukon-Ext only) */ +/* PCI_CFG_REG_1 32 bit Config Register 1 (Yukon-Ext only) */ enum pci_cfg_reg1 { P_CF1_DIS_REL_EVT_RST = 1<<24, /* Dis. Rel. Event during PCIE reset */ /* Bit 23..21: Release Clock on Event */ @@ -145,6 +183,72 @@ P_CF1_ENA_TXBMU_WR_IDLE, }; +/* Yukon-Optima */ +enum { + PSM_CONFIG_REG1_AC_PRESENT_STATUS = 1<<31, /* AC Present Status */ + + PSM_CONFIG_REG1_PTP_CLK_SEL = 1<<29, /* PTP Clock Select */ + PSM_CONFIG_REG1_PTP_MODE = 1<<28, /* PTP Mode */ + + PSM_CONFIG_REG1_MUX_PHY_LINK = 1<<27, /* PHY Energy Detect Event */ + + PSM_CONFIG_REG1_EN_PIN63_AC_PRESENT = 1<<26, /* Enable LED_DUPLEX for ac_present */ + PSM_CONFIG_REG1_EN_PCIE_TIMER = 1<<25, /* Enable PCIe Timer */ + PSM_CONFIG_REG1_EN_SPU_TIMER = 1<<24, /* Enable SPU Timer */ + PSM_CONFIG_REG1_POLARITY_AC_PRESENT = 1<<23, /* AC Present Polarity */ + + PSM_CONFIG_REG1_EN_AC_PRESENT = 1<<21, /* Enable AC Present */ + + PSM_CONFIG_REG1_EN_GPHY_INT_PSM = 1<<20, /* Enable GPHY INT for PSM */ + PSM_CONFIG_REG1_DIS_PSM_TIMER = 1<<19, /* Disable PSM Timer */ +}; + +/* Yukon-Supreme */ +enum { + PSM_CONFIG_REG1_GPHY_ENERGY_STS = 1<<31, /* GPHY Energy Detect Status */ + + PSM_CONFIG_REG1_UART_MODE_MSK = 3<<29, /* UART_Mode */ + PSM_CONFIG_REG1_CLK_RUN_ASF = 1<<28, /* Enable Clock Free Running for ASF Subsystem */ + PSM_CONFIG_REG1_UART_CLK_DISABLE= 1<<27, /* Disable UART clock */ + PSM_CONFIG_REG1_VAUX_ONE = 1<<26, /* Tie internal Vaux to 1'b1 */ + PSM_CONFIG_REG1_UART_FC_RI_VAL = 1<<25, /* Default value for UART_RI_n */ + PSM_CONFIG_REG1_UART_FC_DCD_VAL = 1<<24, /* Default value for UART_DCD_n */ + PSM_CONFIG_REG1_UART_FC_DSR_VAL = 1<<23, /* Default value for UART_DSR_n */ + PSM_CONFIG_REG1_UART_FC_CTS_VAL = 1<<22, /* Default value for UART_CTS_n */ + PSM_CONFIG_REG1_LATCH_VAUX = 1<<21, /* Enable Latch current Vaux_avlbl */ + PSM_CONFIG_REG1_FORCE_TESTMODE_INPUT= 1<<20, /* Force Testmode pin as input PAD */ + PSM_CONFIG_REG1_UART_RST = 1<<19, /* UART_RST */ + PSM_CONFIG_REG1_PSM_PCIE_L1_POL = 1<<18, /* PCIE L1 Event Polarity for PSM */ + PSM_CONFIG_REG1_TIMER_STAT = 1<<17, /* PSM Timer Status */ + PSM_CONFIG_REG1_GPHY_INT = 1<<16, /* GPHY INT Status */ + PSM_CONFIG_REG1_FORCE_TESTMODE_ZERO= 1<<15, /* Force internal Testmode as 1'b0 */ + PSM_CONFIG_REG1_EN_INT_ASPM_CLKREQ = 1<<14, /* ENABLE INT for CLKRUN on ASPM and CLKREQ */ + PSM_CONFIG_REG1_EN_SND_TASK_ASPM_CLKREQ = 1<<13, /* ENABLE Snd_task for CLKRUN on ASPM and CLKREQ */ + PSM_CONFIG_REG1_DIS_CLK_GATE_SND_TASK = 1<<12, /* Disable CLK_GATE control snd_task */ + PSM_CONFIG_REG1_DIS_FF_CHIAN_SND_INTA = 1<<11, /* Disable flip-flop chain for sndmsg_inta */ + + PSM_CONFIG_REG1_DIS_LOADER = 1<<9, /* Disable Loader SM after PSM Goes back to IDLE */ + PSM_CONFIG_REG1_DO_PWDN = 1<<8, /* Do Power Down, Start PSM Scheme */ + PSM_CONFIG_REG1_DIS_PIG = 1<<7, /* Disable Plug-in-Go SM after PSM Goes back to IDLE */ + PSM_CONFIG_REG1_DIS_PERST = 1<<6, /* Disable Internal PCIe Reset after PSM Goes back to IDLE */ + PSM_CONFIG_REG1_EN_REG18_PD = 1<<5, /* Enable REG18 Power Down for PSM */ + PSM_CONFIG_REG1_EN_PSM_LOAD = 1<<4, /* Disable EEPROM Loader after PSM Goes back to IDLE */ + PSM_CONFIG_REG1_EN_PSM_HOT_RST = 1<<3, /* Enable PCIe Hot Reset for PSM */ + PSM_CONFIG_REG1_EN_PSM_PERST = 1<<2, /* Enable PCIe Reset Event for PSM */ + PSM_CONFIG_REG1_EN_PSM_PCIE_L1 = 1<<1, /* Enable PCIe L1 Event for PSM */ + PSM_CONFIG_REG1_EN_PSM = 1<<0, /* Enable PSM Scheme */ +}; + +/* PSM_CONFIG_REG4 0x0168 PSM Config Register 4 */ +enum { + /* PHY Link Detect Timer */ + PSM_CONFIG_REG4_TIMER_PHY_LINK_DETECT_MSK = 0xf<<4, + PSM_CONFIG_REG4_TIMER_PHY_LINK_DETECT_BASE = 4, + + PSM_CONFIG_REG4_DEBUG_TIMER = 1<<1, /* Debug Timer */ + PSM_CONFIG_REG4_RST_PHY_LINK_DETECT = 1<<0, /* Reset GPHY Link Detect */ +}; + #define PCI_STATUS_ERROR_BITS (PCI_STATUS_DETECTED_PARITY | \ PCI_STATUS_SIG_SYSTEM_ERROR | \ @@ -197,6 +301,9 @@ B2_I2C_IRQ = 0x0168, B2_I2C_SW = 0x016c, + Y2_PEX_PHY_DATA = 0x0170, + Y2_PEX_PHY_ADDR = 0x0172, + B3_RAM_ADDR = 0x0180, B3_RAM_DATA_LO = 0x0184, B3_RAM_DATA_HI = 0x0188, @@ -317,6 +424,10 @@ Y2_IS_CHK_TXS2 = 1<<9, /* Descriptor error TXS 2 */ Y2_IS_CHK_TXA2 = 1<<8, /* Descriptor error TXA 2 */ + Y2_IS_PSM_ACK = 1<<7, /* PSM Acknowledge (Yukon-Optima only) */ + Y2_IS_PTP_TIST = 1<<6, /* PTP Time Stamp (Yukon-Optima only) */ + Y2_IS_PHY_QLNK = 1<<5, /* PHY Quick Link (Yukon-Optima only) */ + Y2_IS_IRQ_PHY1 = 1<<4, /* Interrupt from PHY 1 */ Y2_IS_IRQ_MAC1 = 1<<3, /* Interrupt from MAC 1 */ Y2_IS_CHK_RX1 = 1<<2, /* Descriptor error Rx 1 */ @@ -435,6 +546,7 @@ CHIP_ID_YUKON_FE_P = 0xb8, /* YUKON-2 FE+ */ CHIP_ID_YUKON_SUPR = 0xb9, /* YUKON-2 Supreme */ CHIP_ID_YUKON_UL_2 = 0xba, /* YUKON-2 Ultra 2 */ + CHIP_ID_YUKON_OPT = 0xbc, /* YUKON-2 Optima */ }; enum yukon_ec_rev { CHIP_REV_YU_EC_A1 = 0, /* Chip Rev. for Yukon-EC A1/A0 */ @@ -459,6 +571,8 @@ }; enum yukon_supr_rev { CHIP_REV_YU_SU_A0 = 0, + CHIP_REV_YU_SU_B0 = 1, + CHIP_REV_YU_SU_B1 = 3, }; @@ -513,6 +627,12 @@ TIM_T_STEP = 1<<0, /* Test step */ }; +/* Y2_PEX_PHY_ADDR/DATA PEX PHY address and data reg (Yukon-2 only) */ +enum { + PEX_RD_ACCESS = 1<<31, /* Access Mode Read = 1, Write = 0 */ + PEX_DB_ACCESS = 1<<30, /* Access to debug register */ +}; + /* B3_RAM_ADDR 32 bit RAM Address, to read or write */ /* Bit 31..19: reserved */ #define RAM_ADR_RAN 0x0007ffffL /* Bit 18.. 0: RAM Address Range */ @@ -754,6 +874,42 @@ BMU_TX_CLR_IRQ_TCP = 1<<11, /* Clear IRQ on TCP segment length mismatch */ }; +/* TBMU_TEST 0x06B8 Transmit BMU Test Register */ +enum { + TBMU_TEST_BMU_TX_CHK_AUTO_OFF = 1<<31, /* BMU Tx Checksum Auto Calculation Disable */ + TBMU_TEST_BMU_TX_CHK_AUTO_ON = 1<<30, /* BMU Tx Checksum Auto Calculation Enable */ + TBMU_TEST_HOME_ADD_PAD_FIX1_EN = 1<<29, /* Home Address Paddiing FIX1 Enable */ + TBMU_TEST_HOME_ADD_PAD_FIX1_DIS = 1<<28, /* Home Address Paddiing FIX1 Disable */ + TBMU_TEST_ROUTING_ADD_FIX_EN = 1<<27, /* Routing Address Fix Enable */ + TBMU_TEST_ROUTING_ADD_FIX_DIS = 1<<26, /* Routing Address Fix Disable */ + TBMU_TEST_HOME_ADD_FIX_EN = 1<<25, /* Home address checksum fix enable */ + TBMU_TEST_HOME_ADD_FIX_DIS = 1<<24, /* Home address checksum fix disable */ + + TBMU_TEST_TEST_RSPTR_ON = 1<<22, /* Testmode Shadow Read Ptr On */ + TBMU_TEST_TEST_RSPTR_OFF = 1<<21, /* Testmode Shadow Read Ptr Off */ + TBMU_TEST_TESTSTEP_RSPTR = 1<<20, /* Teststep Shadow Read Ptr */ + + TBMU_TEST_TEST_RPTR_ON = 1<<18, /* Testmode Read Ptr On */ + TBMU_TEST_TEST_RPTR_OFF = 1<<17, /* Testmode Read Ptr Off */ + TBMU_TEST_TESTSTEP_RPTR = 1<<16, /* Teststep Read Ptr */ + + TBMU_TEST_TEST_WSPTR_ON = 1<<14, /* Testmode Shadow Write Ptr On */ + TBMU_TEST_TEST_WSPTR_OFF = 1<<13, /* Testmode Shadow Write Ptr Off */ + TBMU_TEST_TESTSTEP_WSPTR = 1<<12, /* Teststep Shadow Write Ptr */ + + TBMU_TEST_TEST_WPTR_ON = 1<<10, /* Testmode Write Ptr On */ + TBMU_TEST_TEST_WPTR_OFF = 1<<9, /* Testmode Write Ptr Off */ + TBMU_TEST_TESTSTEP_WPTR = 1<<8, /* Teststep Write Ptr */ + + TBMU_TEST_TEST_REQ_NB_ON = 1<<6, /* Testmode Req Nbytes/Addr On */ + TBMU_TEST_TEST_REQ_NB_OFF = 1<<5, /* Testmode Req Nbytes/Addr Off */ + TBMU_TEST_TESTSTEP_REQ_NB = 1<<4, /* Teststep Req Nbytes/Addr */ + + TBMU_TEST_TEST_DONE_IDX_ON = 1<<2, /* Testmode Done Index On */ + TBMU_TEST_TEST_DONE_IDX_OFF = 1<<1, /* Testmode Done Index Off */ + TBMU_TEST_TESTSTEP_DONE_IDX = 1<<0, /* Teststep Done Index */ +}; + /* Queue Prefetch Unit Offsets, use Y2_QADDR() to address (Yukon-2 only)*/ /* PREF_UNIT_CTRL 32 bit Prefetch Control register */ enum { @@ -1674,6 +1830,12 @@ /* RX_GMF_CTRL_T 32 bit Rx GMAC FIFO Control/Test */ enum { + RX_GCLKMAC_ENA = 1<<31, /* RX MAC Clock Gating Enable */ + RX_GCLKMAC_OFF = 1<<30, + + RX_STFW_DIS = 1<<29, /* RX Store and Forward Enable */ + RX_STFW_ENA = 1<<28, + RX_TRUNC_ON = 1<<27, /* enable packet truncation */ RX_TRUNC_OFF = 1<<26, /* disable packet truncation */ RX_VLAN_STRIP_ON = 1<<25, /* enable VLAN stripping */ @@ -1711,6 +1873,20 @@ GMF_RX_CTRL_DEF = GMF_OPER_ON | GMF_RX_F_FL_ON, }; +/* RX_GMF_FL_CTRL 16 bit Rx GMAC FIFO Flush Control (Yukon-Supreme) */ +enum { + RX_IPV6_SA_MOB_ENA = 1<<9, /* IPv6 SA Mobility Support Enable */ + RX_IPV6_SA_MOB_DIS = 1<<8, /* IPv6 SA Mobility Support Disable */ + RX_IPV6_DA_MOB_ENA = 1<<7, /* IPv6 DA Mobility Support Enable */ + RX_IPV6_DA_MOB_DIS = 1<<6, /* IPv6 DA Mobility Support Disable */ + RX_PTR_SYNCDLY_ENA = 1<<5, /* Pointers Delay Synch Enable */ + RX_PTR_SYNCDLY_DIS = 1<<4, /* Pointers Delay Synch Disable */ + RX_ASF_NEWFLAG_ENA = 1<<3, /* RX ASF Flag New Logic Enable */ + RX_ASF_NEWFLAG_DIS = 1<<2, /* RX ASF Flag New Logic Disable */ + RX_FLSH_MISSPKT_ENA = 1<<1, /* RX Flush Miss-Packet Enable */ + RX_FLSH_MISSPKT_DIS = 1<<0, /* RX Flush Miss-Packet Disable */ +}; + /* TX_GMF_EA 32 bit Tx GMAC FIFO End Address */ enum { TX_DYN_WM_ENA = 3, /* Yukon-FE+ specific */ --- linux-2.6.32.orig/drivers/net/jme.c +++ linux-2.6.32/drivers/net/jme.c @@ -946,6 +946,8 @@ jme->jme_vlan_rx(skb, jme->vlgrp, le16_to_cpu(rxdesc->descwb.vlan)); NET_STAT(jme).rx_bytes += 4; + } else { + dev_kfree_skb(skb); } } else { jme->jme_rx(skb); @@ -2085,12 +2087,45 @@ jme_reset_link(jme); } +static inline void jme_pause_rx(struct jme_adapter *jme) +{ + atomic_dec(&jme->link_changing); + + jme_set_rx_pcc(jme, PCC_OFF); + if (test_bit(JME_FLAG_POLL, &jme->flags)) { + JME_NAPI_DISABLE(jme); + } else { + tasklet_disable(&jme->rxclean_task); + tasklet_disable(&jme->rxempty_task); + } +} + +static inline void jme_resume_rx(struct jme_adapter *jme) +{ + struct dynpcc_info *dpi = &(jme->dpi); + + if (test_bit(JME_FLAG_POLL, &jme->flags)) { + JME_NAPI_ENABLE(jme); + } else { + tasklet_hi_enable(&jme->rxclean_task); + tasklet_hi_enable(&jme->rxempty_task); + } + dpi->cur = PCC_P1; + dpi->attempt = PCC_P1; + dpi->cnt = 0; + jme_set_rx_pcc(jme, PCC_P1); + + atomic_inc(&jme->link_changing); +} + static void jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) { struct jme_adapter *jme = netdev_priv(netdev); + jme_pause_rx(jme); jme->vlgrp = grp; + jme_resume_rx(jme); } static void --- linux-2.6.32.orig/drivers/net/via-rhine.c +++ linux-2.6.32/drivers/net/via-rhine.c @@ -102,6 +102,7 @@ #include #include #include +#include #include /* Processor type for cache alignment. */ #include #include @@ -389,6 +390,7 @@ struct net_device *dev; struct napi_struct napi; spinlock_t lock; + struct work_struct reset_task; /* Frequently used values: keep some adjacent for cache effect. */ u32 quirks; @@ -407,6 +409,7 @@ static int mdio_read(struct net_device *dev, int phy_id, int location); static void mdio_write(struct net_device *dev, int phy_id, int location, int value); static int rhine_open(struct net_device *dev); +static void rhine_reset_task(struct work_struct *work); static void rhine_tx_timeout(struct net_device *dev); static netdev_tx_t rhine_start_tx(struct sk_buff *skb, struct net_device *dev); @@ -775,6 +778,8 @@ dev->irq = pdev->irq; spin_lock_init(&rp->lock); + INIT_WORK(&rp->reset_task, rhine_reset_task); + rp->mii_if.dev = dev; rp->mii_if.mdio_read = mdio_read; rp->mii_if.mdio_write = mdio_write; @@ -1179,22 +1184,18 @@ return 0; } -static void rhine_tx_timeout(struct net_device *dev) +static void rhine_reset_task(struct work_struct *work) { - struct rhine_private *rp = netdev_priv(dev); - void __iomem *ioaddr = rp->base; - - printk(KERN_WARNING "%s: Transmit timed out, status %4.4x, PHY status " - "%4.4x, resetting...\n", - dev->name, ioread16(ioaddr + IntrStatus), - mdio_read(dev, rp->mii_if.phy_id, MII_BMSR)); + struct rhine_private *rp = container_of(work, struct rhine_private, + reset_task); + struct net_device *dev = rp->dev; /* protect against concurrent rx interrupts */ disable_irq(rp->pdev->irq); napi_disable(&rp->napi); - spin_lock(&rp->lock); + spin_lock_bh(&rp->lock); /* clear all descriptors */ free_tbufs(dev); @@ -1206,7 +1207,7 @@ rhine_chip_reset(dev); init_registers(dev); - spin_unlock(&rp->lock); + spin_unlock_bh(&rp->lock); enable_irq(rp->pdev->irq); dev->trans_start = jiffies; @@ -1214,6 +1215,19 @@ netif_wake_queue(dev); } +static void rhine_tx_timeout(struct net_device *dev) +{ + struct rhine_private *rp = netdev_priv(dev); + void __iomem *ioaddr = rp->base; + + printk(KERN_WARNING "%s: Transmit timed out, status %4.4x, PHY status " + "%4.4x, resetting...\n", + dev->name, ioread16(ioaddr + IntrStatus), + mdio_read(dev, rp->mii_if.phy_id, MII_BMSR)); + + schedule_work(&rp->reset_task); +} + static netdev_tx_t rhine_start_tx(struct sk_buff *skb, struct net_device *dev) { @@ -1830,10 +1844,11 @@ struct rhine_private *rp = netdev_priv(dev); void __iomem *ioaddr = rp->base; - spin_lock_irq(&rp->lock); - - netif_stop_queue(dev); napi_disable(&rp->napi); + cancel_work_sync(&rp->reset_task); + netif_stop_queue(dev); + + spin_lock_irq(&rp->lock); if (debug > 1) printk(KERN_DEBUG "%s: Shutting down ethercard, " --- linux-2.6.32.orig/drivers/net/sky2.c +++ linux-2.6.32/drivers/net/sky2.c @@ -139,6 +139,7 @@ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436D) }, /* 88E8055 */ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4370) }, /* 88E8075 */ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4380) }, /* 88E8057 */ + { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4381) }, /* 88E8059 */ { 0 } }; @@ -602,6 +603,16 @@ /* apply workaround for integrated resistors calibration */ gm_phy_write(hw, port, PHY_MARV_PAGE_ADDR, 17); gm_phy_write(hw, port, PHY_MARV_PAGE_DATA, 0x3f60); + } else if (hw->chip_id == CHIP_ID_YUKON_OPT && hw->chip_rev == 0) { + /* apply fixes in PHY AFE */ + gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0x00ff); + + /* apply RDAC termination workaround */ + gm_phy_write(hw, port, 24, 0x2800); + gm_phy_write(hw, port, 23, 0x2001); + + /* set page register back to 0 */ + gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0); } else if (hw->chip_id != CHIP_ID_YUKON_EX && hw->chip_id < CHIP_ID_YUKON_SUPR) { /* no effect on Yukon-XL */ @@ -1008,11 +1019,8 @@ static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2, u16 *slot) { struct sky2_tx_le *le = sky2->tx_le + *slot; - struct tx_ring_info *re = sky2->tx_ring + *slot; *slot = RING_NEXT(*slot, sky2->tx_ring_size); - re->flags = 0; - re->skb = NULL; le->ctrl = 0; return le; } @@ -1580,8 +1588,7 @@ return count; } -static void sky2_tx_unmap(struct pci_dev *pdev, - const struct tx_ring_info *re) +static void sky2_tx_unmap(struct pci_dev *pdev, struct tx_ring_info *re) { if (re->flags & TX_MAP_SINGLE) pci_unmap_single(pdev, pci_unmap_addr(re, mapaddr), @@ -1591,6 +1598,7 @@ pci_unmap_page(pdev, pci_unmap_addr(re, mapaddr), pci_unmap_len(re, maplen), PCI_DMA_TODEVICE); + re->flags = 0; } /* @@ -1797,6 +1805,7 @@ dev->stats.tx_packets++; dev->stats.tx_bytes += skb->len; + re->skb = NULL; dev_kfree_skb_any(skb); sky2->tx_next = RING_NEXT(idx, sky2->tx_ring_size); @@ -1806,7 +1815,8 @@ sky2->tx_cons = idx; smp_mb(); - if (tx_avail(sky2) > MAX_SKB_TX_LE + 4) + /* Wake unless it's detached, and called e.g. from sky2_down() */ + if (tx_avail(sky2) > MAX_SKB_TX_LE + 4 && netif_device_present(dev)) netif_wake_queue(dev); } @@ -2096,6 +2106,27 @@ spin_unlock(&sky2->phy_lock); } +/* Special quick link interrupt (Yukon-2 Optima only) */ +static void sky2_qlink_intr(struct sky2_hw *hw) +{ + struct sky2_port *sky2 = netdev_priv(hw->dev[0]); + u32 imask; + u16 phy; + + /* disable irq */ + imask = sky2_read32(hw, B0_IMSK); + imask &= ~Y2_IS_PHY_QLNK; + sky2_write32(hw, B0_IMSK, imask); + + /* reset PHY Link Detect */ + phy = sky2_pci_read16(hw, PSM_CONFIG_REG4); + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); + sky2_pci_write16(hw, PSM_CONFIG_REG4, phy | 1); + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); + + sky2_link_up(sky2); +} + /* Transmit timeout is only called if we are running, carrier is up * and tx queue is full (stopped). */ @@ -2766,6 +2797,9 @@ if (status & Y2_IS_IRQ_PHY2) sky2_phy_intr(hw, 1); + if (status & Y2_IS_PHY_QLNK) + sky2_qlink_intr(hw); + while ((idx = sky2_read16(hw, STAT_PUT_IDX)) != hw->st_idx) { work_done += sky2_status_intr(hw, work_limit - work_done, idx); @@ -2815,6 +2849,7 @@ case CHIP_ID_YUKON_EX: case CHIP_ID_YUKON_SUPR: case CHIP_ID_YUKON_UL_2: + case CHIP_ID_YUKON_OPT: return 125; case CHIP_ID_YUKON_FE: @@ -2908,6 +2943,12 @@ | SKY2_HW_ADV_POWER_CTL; break; + case CHIP_ID_YUKON_OPT: + hw->flags = SKY2_HW_GIGABIT + | SKY2_HW_NEW_LE + | SKY2_HW_ADV_POWER_CTL; + break; + default: dev_err(&hw->pdev->dev, "unsupported chip type 0x%x\n", hw->chip_id); @@ -2988,6 +3029,48 @@ | GMC_BYP_RETR_ON); } + if (hw->chip_id == CHIP_ID_YUKON_OPT) { + u16 reg; + u32 msk; + + if (hw->chip_rev == 0) { + /* disable PCI-E PHY power down (set PHY reg 0x80, bit 7 */ + sky2_write32(hw, Y2_PEX_PHY_DATA, (0x80UL << 16) | (1 << 7)); + + /* set PHY Link Detect Timer to 1.1 second (11x 100ms) */ + reg = 10; + } else { + /* set PHY Link Detect Timer to 0.4 second (4x 100ms) */ + reg = 3; + } + + reg <<= PSM_CONFIG_REG4_TIMER_PHY_LINK_DETECT_BASE; + + /* reset PHY Link Detect */ + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); + sky2_pci_write16(hw, PSM_CONFIG_REG4, + reg | PSM_CONFIG_REG4_RST_PHY_LINK_DETECT); + sky2_pci_write16(hw, PSM_CONFIG_REG4, reg); + + + /* enable PHY Quick Link */ + msk = sky2_read32(hw, B0_IMSK); + msk |= Y2_IS_PHY_QLNK; + sky2_write32(hw, B0_IMSK, msk); + + /* check if PSMv2 was running before */ + reg = sky2_pci_read16(hw, PSM_CONFIG_REG3); + if (reg & PCI_EXP_LNKCTL_ASPMC) { + int cap = pci_find_capability(pdev, PCI_CAP_ID_EXP); + /* restore the PCIe Link Control register */ + sky2_pci_write16(hw, cap + PCI_EXP_LNKCTL, reg); + } + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); + + /* re-enable PEX PM in PEX PHY debug reg. 8 (clear bit 12) */ + sky2_write32(hw, Y2_PEX_PHY_DATA, PEX_DB_ACCESS | (0x08UL << 16)); + } + /* Clear I2C IRQ noise */ sky2_write32(hw, B2_I2C_IRQ, 1); @@ -4406,9 +4489,11 @@ "FE+", /* 0xb8 */ "Supreme", /* 0xb9 */ "UL 2", /* 0xba */ + "Unknown", /* 0xbb */ + "Optima", /* 0xbc */ }; - if (chipid >= CHIP_ID_YUKON_XL && chipid < CHIP_ID_YUKON_UL_2) + if (chipid >= CHIP_ID_YUKON_XL && chipid <= CHIP_ID_YUKON_OPT) strncpy(buf, name[chipid - CHIP_ID_YUKON_XL], sz); else snprintf(buf, sz, "(chip %#x)", chipid); --- linux-2.6.32.orig/drivers/net/starfire.c +++ linux-2.6.32/drivers/net/starfire.c @@ -1063,7 +1063,7 @@ if (retval) { printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", FIRMWARE_RX); - return retval; + goto out_init; } if (fw_rx->size % 4) { printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", @@ -1108,6 +1108,9 @@ release_firmware(fw_tx); out_rx: release_firmware(fw_rx); +out_init: + if (retval) + netdev_close(dev); return retval; } --- linux-2.6.32.orig/drivers/net/bcm63xx_enet.c +++ linux-2.6.32/drivers/net/bcm63xx_enet.c @@ -1248,9 +1248,15 @@ drvinfo->n_stats = BCM_ENET_STATS_LEN; } -static int bcm_enet_get_stats_count(struct net_device *netdev) +static int bcm_enet_get_sset_count(struct net_device *netdev, + int string_set) { - return BCM_ENET_STATS_LEN; + switch (string_set) { + case ETH_SS_STATS: + return BCM_ENET_STATS_LEN; + default: + return -EINVAL; + } } static void bcm_enet_get_strings(struct net_device *netdev, @@ -1476,7 +1482,7 @@ static struct ethtool_ops bcm_enet_ethtool_ops = { .get_strings = bcm_enet_get_strings, - .get_stats_count = bcm_enet_get_stats_count, + .get_sset_count = bcm_enet_get_sset_count, .get_ethtool_stats = bcm_enet_get_ethtool_stats, .get_settings = bcm_enet_get_settings, .set_settings = bcm_enet_set_settings, --- linux-2.6.32.orig/drivers/net/r8169.c +++ linux-2.6.32/drivers/net/r8169.c @@ -186,7 +186,12 @@ MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl); -static int rx_copybreak = 200; +/* + * we set our copybreak very high so that we don't have + * to allocate 16k frames all the time (see note in + * rtl8169_open() + */ +static int rx_copybreak = 16383; static int use_dac; static struct { u32 msg_enable; @@ -2827,8 +2832,13 @@ spin_lock_irq(&tp->lock); RTL_W8(Cfg9346, Cfg9346_Unlock); - RTL_W32(MAC0, low); + RTL_W32(MAC4, high); + RTL_R32(MAC4); + + RTL_W32(MAC0, low); + RTL_R32(MAC0); + RTL_W8(Cfg9346, Cfg9346_Lock); spin_unlock_irq(&tp->lock); @@ -3169,6 +3179,13 @@ dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; #endif + /* Ubuntu temporary workaround for bug #76489, disable + * NETIF_F_TSO by default for RTL8111/8168B chipsets. + * People can re-enable if required */ + if (tp->mac_version == RTL_GIGA_MAC_VER_11 + || tp->mac_version == RTL_GIGA_MAC_VER_12) + dev->features &= ~NETIF_F_TSO; + tp->intr_mask = 0xffff; tp->align = cfg->align; tp->hw_start = cfg->hw_start; @@ -3245,9 +3262,13 @@ } static void rtl8169_set_rxbufsize(struct rtl8169_private *tp, - struct net_device *dev) + unsigned int mtu) { - unsigned int max_frame = dev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; + unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; + + if (max_frame != 16383) + printk(KERN_WARNING PFX "WARNING! Changing of MTU on this " + "NIC may lead to frame reception errors!\n"); tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE; } @@ -3259,7 +3280,17 @@ int retval = -ENOMEM; - rtl8169_set_rxbufsize(tp, dev); + /* + * Note that we use a magic value here, its wierd I know + * its done because, some subset of rtl8169 hardware suffers from + * a problem in which frames received that are longer than + * the size set in RxMaxSize register return garbage sizes + * when received. To avoid this we need to turn off filtering, + * which is done by setting a value of 16383 in the RxMaxSize register + * and allocating 16k frames to handle the largest possible rx value + * thats what the magic math below does. + */ + rtl8169_set_rxbufsize(tp, 16383 - VLAN_ETH_HLEN - ETH_FCS_LEN); /* * Rx and Tx desscriptors needs 256 bytes alignment. @@ -3912,7 +3943,7 @@ rtl8169_down(dev); - rtl8169_set_rxbufsize(tp, dev); + rtl8169_set_rxbufsize(tp, dev->mtu); ret = rtl8169_init_ring(dev); if (ret < 0) @@ -4297,7 +4328,7 @@ tp->cur_tx += frags + 1; - smp_wmb(); + wmb(); RTL_W8(TxPoll, NPQ); /* set polling bit */ @@ -4657,7 +4688,7 @@ * until it does. */ tp->intr_mask = 0xffff; - smp_wmb(); + wmb(); RTL_W16(IntrMask, tp->intr_event); } @@ -4795,8 +4826,8 @@ mc_filter[1] = swab32(data); } - RTL_W32(MAR0 + 0, mc_filter[0]); RTL_W32(MAR0 + 4, mc_filter[1]); + RTL_W32(MAR0 + 0, mc_filter[0]); RTL_W32(RxConfig, tmp); --- linux-2.6.32.orig/drivers/net/bnx2.c +++ linux-2.6.32/drivers/net/bnx2.c @@ -4752,8 +4752,12 @@ rc = bnx2_alloc_bad_rbuf(bp); } - if (bp->flags & BNX2_FLAG_USING_MSIX) + if (bp->flags & BNX2_FLAG_USING_MSIX) { bnx2_setup_msix_tbl(bp); + /* Prevent MSIX table reads and write from timing out */ + REG_WR(bp, BNX2_MISC_ECO_HW_CTL, + BNX2_MISC_ECO_HW_CTL_LARGE_GRC_TMOUT_EN); + } return rc; } --- linux-2.6.32.orig/drivers/net/b44.c +++ linux-2.6.32/drivers/net/b44.c @@ -1505,8 +1505,7 @@ for (k = 0; k< ethaddr_bytes; k++) { ppattern[offset + magicsync + (j * ETH_ALEN) + k] = macaddr[k]; - len++; - set_bit(len, (unsigned long *) pmask); + set_bit(len++, (unsigned long *) pmask); } } return len - 1; --- linux-2.6.32.orig/drivers/net/atl1c/atl1c_main.c +++ linux-2.6.32/drivers/net/atl1c/atl1c_main.c @@ -198,27 +198,12 @@ void atl1c_reinit_locked(struct atl1c_adapter *adapter) { - WARN_ON(in_interrupt()); atl1c_down(adapter); atl1c_up(adapter); clear_bit(__AT_RESETTING, &adapter->flags); } -static void atl1c_reset_task(struct work_struct *work) -{ - struct atl1c_adapter *adapter; - struct net_device *netdev; - - adapter = container_of(work, struct atl1c_adapter, reset_task); - netdev = adapter->netdev; - - netif_device_detach(netdev); - atl1c_down(adapter); - atl1c_up(adapter); - netif_device_attach(netdev); -} - static void atl1c_check_link_status(struct atl1c_adapter *adapter) { struct atl1c_hw *hw = &adapter->hw; @@ -275,18 +260,6 @@ } } -/* - * atl1c_link_chg_task - deal with link change event Out of interrupt context - * @netdev: network interface device structure - */ -static void atl1c_link_chg_task(struct work_struct *work) -{ - struct atl1c_adapter *adapter; - - adapter = container_of(work, struct atl1c_adapter, link_chg_task); - atl1c_check_link_status(adapter); -} - static void atl1c_link_chg_event(struct atl1c_adapter *adapter) { struct net_device *netdev = adapter->netdev; @@ -311,20 +284,40 @@ adapter->link_speed = SPEED_0; } } - schedule_work(&adapter->link_chg_task); + + adapter->work_event |= ATL1C_WORK_EVENT_LINK_CHANGE; + schedule_work(&adapter->common_task); } -static void atl1c_del_timer(struct atl1c_adapter *adapter) +static void atl1c_common_task(struct work_struct *work) { - del_timer_sync(&adapter->phy_config_timer); + struct atl1c_adapter *adapter; + struct net_device *netdev; + + adapter = container_of(work, struct atl1c_adapter, common_task); + netdev = adapter->netdev; + + if (adapter->work_event & ATL1C_WORK_EVENT_RESET) { + netif_device_detach(netdev); + atl1c_down(adapter); + atl1c_up(adapter); + netif_device_attach(netdev); + return; + } + + if (adapter->work_event & ATL1C_WORK_EVENT_LINK_CHANGE) + atl1c_check_link_status(adapter); + + return; } -static void atl1c_cancel_work(struct atl1c_adapter *adapter) + +static void atl1c_del_timer(struct atl1c_adapter *adapter) { - cancel_work_sync(&adapter->reset_task); - cancel_work_sync(&adapter->link_chg_task); + del_timer_sync(&adapter->phy_config_timer); } + /* * atl1c_tx_timeout - Respond to a Tx Hang * @netdev: network interface device structure @@ -334,7 +327,8 @@ struct atl1c_adapter *adapter = netdev_priv(netdev); /* Do the reset outside of interrupt context */ - schedule_work(&adapter->reset_task); + adapter->work_event |= ATL1C_WORK_EVENT_RESET; + schedule_work(&adapter->common_task); } /* @@ -1536,7 +1530,8 @@ /* reset MAC */ hw->intr_mask &= ~ISR_ERROR; AT_WRITE_REG(hw, REG_IMR, hw->intr_mask); - schedule_work(&adapter->reset_task); + adapter->work_event |= ATL1C_WORK_EVENT_RESET; + schedule_work(&adapter->common_task); break; } @@ -2200,8 +2195,7 @@ struct net_device *netdev = adapter->netdev; atl1c_del_timer(adapter); - atl1c_cancel_work(adapter); - + adapter->work_event = 0; /* clear all event */ /* signal that we're down so the interrupt handler does not * reschedule our watchdog timer */ set_bit(__AT_DOWN, &adapter->flags); @@ -2601,8 +2595,8 @@ adapter->hw.mac_addr[4], adapter->hw.mac_addr[5]); atl1c_hw_set_mac_addr(&adapter->hw); - INIT_WORK(&adapter->reset_task, atl1c_reset_task); - INIT_WORK(&adapter->link_chg_task, atl1c_link_chg_task); + INIT_WORK(&adapter->common_task, atl1c_common_task); + adapter->work_event = 0; err = register_netdev(netdev); if (err) { dev_err(&pdev->dev, "register netdevice failed\n"); --- linux-2.6.32.orig/drivers/net/atl1c/atl1c.h +++ linux-2.6.32/drivers/net/atl1c/atl1c.h @@ -534,6 +534,9 @@ #define __AT_TESTING 0x0001 #define __AT_RESETTING 0x0002 #define __AT_DOWN 0x0003 + u8 work_event; +#define ATL1C_WORK_EVENT_RESET 0x01 +#define ATL1C_WORK_EVENT_LINK_CHANGE 0x02 u32 msg_enable; bool have_msi; @@ -545,8 +548,7 @@ spinlock_t tx_lock; atomic_t irq_sem; - struct work_struct reset_task; - struct work_struct link_chg_task; + struct work_struct common_task; struct timer_list watchdog_timer; struct timer_list phy_config_timer; --- linux-2.6.32.orig/drivers/net/benet/be_cmds.h +++ linux-2.6.32/drivers/net/benet/be_cmds.h @@ -154,7 +154,8 @@ u8 domain; /* dword 0 */ u32 timeout; /* dword 1 */ u32 request_length; /* dword 2 */ - u32 rsvd; /* dword 3 */ + u8 version; /* dword 3 */ + u8 rsvd[3]; /* dword 3 */ }; #define RESP_HDR_INFO_OPCODE_SHIFT 0 /* bits 0 - 7 */ --- linux-2.6.32.orig/drivers/net/benet/be_main.c +++ linux-2.6.32/drivers/net/benet/be_main.c @@ -31,8 +31,10 @@ static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = { { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) }, + { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) }, { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) }, { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) }, + { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID3) }, { 0 } }; MODULE_DEVICE_TABLE(pci, be_dev_ids); @@ -1942,6 +1944,7 @@ static int be_map_pci_bars(struct be_adapter *adapter) { u8 __iomem *addr; + int pcicfg_reg; addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2), pci_resource_len(adapter->pdev, 2)); @@ -1955,8 +1958,13 @@ goto pci_map_err; adapter->db = addr; - addr = ioremap_nocache(pci_resource_start(adapter->pdev, 1), - pci_resource_len(adapter->pdev, 1)); + if (adapter->generation == BE_GEN2) + pcicfg_reg = 1; + else + pcicfg_reg = 0; + + addr = ioremap_nocache(pci_resource_start(adapter->pdev, pcicfg_reg), + pci_resource_len(adapter->pdev, pcicfg_reg)); if (addr == NULL) goto pci_map_err; adapter->pcicfg = addr; @@ -2026,6 +2034,7 @@ cmd->va = pci_alloc_consistent(adapter->pdev, cmd->size, &cmd->dma); if (cmd->va == NULL) return -1; + memset(cmd->va, 0, cmd->size); return 0; } @@ -2099,6 +2108,20 @@ goto rel_reg; } adapter = netdev_priv(netdev); + + switch (pdev->device) { + case BE_DEVICE_ID1: + case OC_DEVICE_ID1: + adapter->generation = BE_GEN2; + break; + case BE_DEVICE_ID2: + case OC_DEVICE_ID2: + adapter->generation = BE_GEN3; + break; + default: + adapter->generation = 0; + } + adapter->pdev = pdev; pci_set_drvdata(pdev, adapter); adapter->netdev = netdev; --- linux-2.6.32.orig/drivers/net/benet/be.h +++ linux-2.6.32/drivers/net/benet/be.h @@ -35,20 +35,31 @@ #define DRV_VER "2.101.205" #define DRV_NAME "be2net" #define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC" +#define BE3_NAME "ServerEngines BladeEngine3 10Gbps NIC" #define OC_NAME "Emulex OneConnect 10Gbps NIC" +#define OC_NAME1 "Emulex OneConnect 10Gbps NIC (be3)" #define DRV_DESC BE_NAME "Driver" #define BE_VENDOR_ID 0x19a2 #define BE_DEVICE_ID1 0x211 +#define BE_DEVICE_ID2 0x221 #define OC_DEVICE_ID1 0x700 #define OC_DEVICE_ID2 0x701 +#define OC_DEVICE_ID3 0x710 static inline char *nic_name(struct pci_dev *pdev) { - if (pdev->device == OC_DEVICE_ID1 || pdev->device == OC_DEVICE_ID2) + switch (pdev->device) { + case OC_DEVICE_ID1: + case OC_DEVICE_ID2: return OC_NAME; - else + case OC_DEVICE_ID3: + return OC_NAME1; + case BE_DEVICE_ID2: + return BE3_NAME; + default: return BE_NAME; + } } /* Number of bytes of an RX frame that are copied to skb->data */ @@ -261,8 +272,13 @@ u32 cap; u32 rx_fc; /* Rx flow control */ u32 tx_fc; /* Tx flow control */ + u8 generation; /* BladeEngine ASIC generation */ }; +/* BladeEngine Generation numbers */ +#define BE_GEN2 2 +#define BE_GEN3 3 + extern const struct ethtool_ops be_ethtool_ops; #define drvr_stats(adapter) (&adapter->stats.drvr_stats) --- linux-2.6.32.orig/drivers/net/wireless/airo.c +++ linux-2.6.32/drivers/net/wireless/airo.c @@ -5254,11 +5254,7 @@ WepKeyRid wkr; int rc; - if (keylen == 0) { - airo_print_err(ai->dev->name, "%s: key length to set was zero", - __func__); - return -1; - } + WARN_ON(keylen == 0); memset(&wkr, 0, sizeof(wkr)); wkr.len = cpu_to_le16(sizeof(wkr)); @@ -6404,11 +6400,7 @@ if (dwrq->length > MIN_KEY_SIZE) key.len = MAX_KEY_SIZE; else - if (dwrq->length > 0) - key.len = MIN_KEY_SIZE; - else - /* Disable the key */ - key.len = 0; + key.len = MIN_KEY_SIZE; /* Check if the key is not marked as invalid */ if(!(dwrq->flags & IW_ENCODE_NOKEY)) { /* Cleanup */ @@ -6589,12 +6581,22 @@ default: return -EINVAL; } - /* Send the key to the card */ - rc = set_wep_key(local, idx, key.key, key.len, perm, 1); - if (rc < 0) { - airo_print_err(local->dev->name, "failed to set WEP key" - " at index %d: %d.", idx, rc); - return rc; + if (key.len == 0) { + rc = set_wep_tx_idx(local, idx, perm, 1); + if (rc < 0) { + airo_print_err(local->dev->name, + "failed to set WEP transmit index to %d: %d.", + idx, rc); + return rc; + } + } else { + rc = set_wep_key(local, idx, key.key, key.len, perm, 1); + if (rc < 0) { + airo_print_err(local->dev->name, + "failed to set WEP key at index %d: %d.", + idx, rc); + return rc; + } } } --- linux-2.6.32.orig/drivers/net/wireless/rndis_wlan.c +++ linux-2.6.32/drivers/net/wireless/rndis_wlan.c @@ -83,11 +83,11 @@ "set roaming tendency: 0=aggressive, 1=moderate, " "2=conservative (default: moderate)"); -static int modparam_workaround_interval = 500; +static int modparam_workaround_interval; module_param_named(workaround_interval, modparam_workaround_interval, int, 0444); MODULE_PARM_DESC(workaround_interval, - "set stall workaround interval in msecs (default: 500)"); + "set stall workaround interval in msecs (0=disabled) (default: 0)"); /* various RNDIS OID defs */ @@ -733,12 +733,13 @@ le32_to_cpu(u.get_c->status)); if (ret == 0) { + memcpy(data, u.buf + le32_to_cpu(u.get_c->offset) + 8, *len); + ret = le32_to_cpu(u.get_c->len); if (ret > *len) *len = ret; - memcpy(data, u.buf + le32_to_cpu(u.get_c->offset) + 8, *len); - ret = rndis_error_status(u.get_c->status); + ret = rndis_error_status(u.get_c->status); if (ret < 0) devdbg(dev, "rndis_query_oid(%s): device returned " "error, 0x%08x (%d)", oid_to_string(oid), @@ -1072,6 +1073,8 @@ auth_mode = NDIS_80211_AUTH_SHARED; else if (auth_type == NL80211_AUTHTYPE_OPEN_SYSTEM) auth_mode = NDIS_80211_AUTH_OPEN; + else if (auth_type == NL80211_AUTHTYPE_AUTOMATIC) + auth_mode = NDIS_80211_AUTH_AUTO_SWITCH; else return -ENOTSUPP; @@ -2547,7 +2550,7 @@ /* Workaround transfer stalls on poor quality links. * TODO: find right way to fix these stalls (as stalls do not happen * with ndiswrapper/windows driver). */ - if (priv->last_qual <= 25) { + if (priv->param_workaround_interval > 0 && priv->last_qual <= 25) { /* Decrease stats worker interval to catch stalls. * faster. Faster than 400-500ms causes packet loss, * Slower doesn't catch stalls fast enough. --- linux-2.6.32.orig/drivers/net/wireless/ipw2x00/ipw2100.c +++ linux-2.6.32/drivers/net/wireless/ipw2x00/ipw2100.c @@ -6487,6 +6487,16 @@ } #endif +static void ipw2100_shutdown(struct pci_dev *pci_dev) +{ + struct ipw2100_priv *priv = pci_get_drvdata(pci_dev); + + /* Take down the device; powers it off, etc. */ + ipw2100_down(priv); + + pci_disable_device(pci_dev); +} + #define IPW2100_DEV_ID(x) { PCI_VENDOR_ID_INTEL, 0x1043, 0x8086, x } static struct pci_device_id ipw2100_pci_id_table[] __devinitdata = { @@ -6550,6 +6560,7 @@ .suspend = ipw2100_suspend, .resume = ipw2100_resume, #endif + .shutdown = ipw2100_shutdown, }; /** --- linux-2.6.32.orig/drivers/net/wireless/ipw2x00/ipw2200.c +++ linux-2.6.32/drivers/net/wireless/ipw2x00/ipw2200.c @@ -90,7 +90,7 @@ static u32 ipw_debug_level; static int associate; static int auto_create = 1; -static int led_support = 0; +static int led_support = 1; static int disable = 0; static int bt_coexist = 0; static int hwcrypto = 0; @@ -11962,7 +11962,7 @@ MODULE_PARM_DESC(auto_create, "auto create adhoc network (default on)"); module_param_named(led, led_support, int, 0444); -MODULE_PARM_DESC(led, "enable led control on some systems (default 0 off)"); +MODULE_PARM_DESC(led, "enable led control on some systems (default 1 on)"); module_param(debug, int, 0444); MODULE_PARM_DESC(debug, "debug output mask"); --- linux-2.6.32.orig/drivers/net/wireless/orinoco/wext.c +++ linux-2.6.32/drivers/net/wireless/orinoco/wext.c @@ -23,7 +23,7 @@ #define MAX_RID_LEN 1024 /* Helper routine to record keys - * Do not call from interrupt context */ + * It is called under orinoco_lock so it may not sleep */ static int orinoco_set_key(struct orinoco_private *priv, int index, enum orinoco_alg alg, const u8 *key, int key_len, const u8 *seq, int seq_len) @@ -32,14 +32,14 @@ kzfree(priv->keys[index].seq); if (key_len) { - priv->keys[index].key = kzalloc(key_len, GFP_KERNEL); + priv->keys[index].key = kzalloc(key_len, GFP_ATOMIC); if (!priv->keys[index].key) goto nomem; } else priv->keys[index].key = NULL; if (seq_len) { - priv->keys[index].seq = kzalloc(seq_len, GFP_KERNEL); + priv->keys[index].seq = kzalloc(seq_len, GFP_ATOMIC); if (!priv->keys[index].seq) goto free_key; } else --- linux-2.6.32.orig/drivers/net/wireless/ath/ar9170/usb.c +++ linux-2.6.32/drivers/net/wireless/ath/ar9170/usb.c @@ -68,8 +68,10 @@ { USB_DEVICE(0x0cf3, 0x1002) }, /* Cace Airpcap NX */ { USB_DEVICE(0xcace, 0x0300) }, - /* D-Link DWA 160A */ + /* D-Link DWA 160 A1 */ { USB_DEVICE(0x07d1, 0x3c10) }, + /* D-Link DWA 160 A2 */ + { USB_DEVICE(0x07d1, 0x3a09) }, /* Netgear WNDA3100 */ { USB_DEVICE(0x0846, 0x9010) }, /* Netgear WN111 v2 */ @@ -412,7 +414,7 @@ spin_unlock_irqrestore(&aru->common.cmdlock, flags); usb_fill_int_urb(urb, aru->udev, - usb_sndbulkpipe(aru->udev, AR9170_EP_CMD), + usb_sndintpipe(aru->udev, AR9170_EP_CMD), aru->common.cmdbuf, plen + 4, ar9170_usb_tx_urb_complete, NULL, 1); --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/xmit.c +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/xmit.c @@ -1076,10 +1076,10 @@ if (npend) { int r; - DPRINTF(sc, ATH_DBG_XMIT, "Unable to stop TxDMA. Reset HAL!\n"); + DPRINTF(sc, ATH_DBG_FATAL, "Unable to stop TxDMA. Reset HAL!\n"); spin_lock_bh(&sc->sc_resetlock); - r = ath9k_hw_reset(ah, sc->sc_ah->curchan, true); + r = ath9k_hw_reset(ah, sc->sc_ah->curchan, false); if (r) DPRINTF(sc, ATH_DBG_FATAL, "Unable to reset hardware; reset status %d\n", @@ -1320,25 +1320,6 @@ return htype; } -static bool is_pae(struct sk_buff *skb) -{ - struct ieee80211_hdr *hdr; - __le16 fc; - - hdr = (struct ieee80211_hdr *)skb->data; - fc = hdr->frame_control; - - if (ieee80211_is_data(fc)) { - if (ieee80211_is_nullfunc(fc) || - /* Port Access Entity (IEEE 802.1X) */ - (skb->protocol == cpu_to_be16(ETH_P_PAE))) { - return true; - } - } - - return false; -} - static int get_hw_crypto_keytype(struct sk_buff *skb) { struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); @@ -1563,7 +1544,7 @@ bf->bf_frmlen = skb->len + FCS_LEN - (hdrlen & 3); - if (conf_is_ht(&sc->hw->conf) && !is_pae(skb)) + if (conf_is_ht(&sc->hw->conf)) bf->bf_state.bf_type |= BUF_HT; bf->bf_flags = setup_tx_flags(sc, skb, txctl->txq); @@ -1592,6 +1573,13 @@ } bf->bf_buf_addr = bf->bf_dmacontext; + + if (ieee80211_is_nullfunc(fc) && ieee80211_has_pm(fc)) { + bf->bf_isnullfunc = true; + sc->sc_flags &= ~SC_OP_NULLFUNC_COMPLETED; + } else + bf->bf_isnullfunc = false; + return 0; } @@ -1989,6 +1977,14 @@ if (ds == txq->axq_gatingds) txq->axq_gatingds = NULL; + if (bf->bf_isnullfunc && + (ds->ds_txstat.ts_status & ATH9K_TX_ACKED)) { + if ((sc->sc_flags & SC_OP_PS_ENABLED)) + ath9k_enable_ps(sc); + else + sc->sc_flags |= SC_OP_NULLFUNC_COMPLETED; + } + /* * Remove ath_buf's of the same transmit unit from txq, * however leave the last descriptor back as the holding @@ -2004,7 +2000,7 @@ if (bf_isaggr(bf)) txq->axq_aggr_depth--; - txok = (ds->ds_txstat.ts_status == 0); + txok = !(ds->ds_txstat.ts_status & ATH9K_TXERR_MASK); txq->axq_tx_inprogress = false; spin_unlock_bh(&txq->axq_lock); @@ -2065,7 +2061,9 @@ if (needreset) { DPRINTF(sc, ATH_DBG_RESET, "tx hung, resetting the chip\n"); + ath9k_ps_wakeup(sc); ath_reset(sc, false); + ath9k_ps_restore(sc); } ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/reg.h +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/reg.h @@ -969,10 +969,10 @@ #define AR_GPIO_INPUT_EN_VAL_BT_ACTIVE_S 4 #define AR_GPIO_INPUT_EN_VAL_RFSILENT_DEF 0x00000080 #define AR_GPIO_INPUT_EN_VAL_RFSILENT_DEF_S 7 +#define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB 0x00000400 +#define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB_S 10 #define AR_GPIO_INPUT_EN_VAL_BT_ACTIVE_BB 0x00001000 #define AR_GPIO_INPUT_EN_VAL_BT_ACTIVE_BB_S 12 -#define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB 0x00001000 -#define AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB_S 1 #define AR_GPIO_INPUT_EN_VAL_RFSILENT_BB 0x00008000 #define AR_GPIO_INPUT_EN_VAL_RFSILENT_BB_S 15 #define AR_GPIO_RTC_RESET_OVERRIDE_ENABLE 0x00010000 --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/rc.c +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/rc.c @@ -757,7 +757,7 @@ struct ieee80211_tx_rate *rates = tx_info->control.rates; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; __le16 fc = hdr->frame_control; - u8 try_per_rate, i = 0, rix, nrix; + u8 try_per_rate, i = 0, rix; int is_probe = 0; if (rate_control_send_low(sta, priv_sta, txrc)) @@ -777,26 +777,25 @@ rate_table = sc->cur_rate_table; rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe); - nrix = rix; if (is_probe) { /* set one try for probe rates. For the * probes don't enable rts */ ath_rc_rate_set_series(rate_table, &rates[i++], txrc, - 1, nrix, 0); + 1, rix, 0); /* Get the next tried/allowed rate. No RTS for the next series * after the probe rate */ - ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix); + ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix); ath_rc_rate_set_series(rate_table, &rates[i++], txrc, - try_per_rate, nrix, 0); + try_per_rate, rix, 0); tx_info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; } else { /* Set the choosen rate. No RTS for first series entry. */ ath_rc_rate_set_series(rate_table, &rates[i++], txrc, - try_per_rate, nrix, 0); + try_per_rate, rix, 0); } /* Fill in the other rates for multirate retry */ @@ -805,10 +804,10 @@ if (i + 1 == 4) try_per_rate = 4; - ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix); + ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &rix); /* All other rates in the series have RTS enabled */ ath_rc_rate_set_series(rate_table, &rates[i], txrc, - try_per_rate, nrix, 1); + try_per_rate, rix, 1); } /* --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/phy.h +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/phy.h @@ -368,6 +368,9 @@ #define AR_PHY_HEAVY_CLIP_ENABLE 0x99E0 +#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS 0x99EC +#define AR_PHY_RIFS_INIT_DELAY 0x03ff0000 + #define AR_PHY_M_SLEEP 0x99f0 #define AR_PHY_REFCLKDLY 0x99f4 #define AR_PHY_REFCLKPD 0x99f8 --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/mac.c +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/mac.c @@ -70,7 +70,7 @@ u32 txcfg, curLevel, newLevel; enum ath9k_int omask; - if (ah->tx_trig_level >= MAX_TX_FIFO_THRESHOLD) + if (ah->tx_trig_level >= ah->config.max_txtrig_level) return false; omask = ath9k_hw_set_interrupts(ah, ah->mask_reg & ~ATH9K_INT_GLOBAL); @@ -79,7 +79,7 @@ curLevel = MS(txcfg, AR_FTRIG); newLevel = curLevel; if (bIncTrigLevel) { - if (curLevel < MAX_TX_FIFO_THRESHOLD) + if (curLevel < ah->config.max_txtrig_level) newLevel++; } else if (curLevel > MIN_TX_FIFO_THRESHOLD) newLevel--; @@ -155,7 +155,7 @@ wait = wait_time; while (ath9k_hw_numtxpending(ah, q)) { if ((--wait) == 0) { - DPRINTF(ah->ah_sc, ATH_DBG_QUEUE, + DPRINTF(ah->ah_sc, ATH_DBG_FATAL, "Failed to stop TX DMA in 100 " "msec after killing last frame\n"); break; @@ -222,6 +222,8 @@ ds->ds_txstat.ts_status = 0; ds->ds_txstat.ts_flags = 0; + if (ads->ds_txstatus1 & AR_FrmXmitOK) + ds->ds_txstat.ts_status |= ATH9K_TX_ACKED; if (ads->ds_txstatus1 & AR_ExcessiveRetries) ds->ds_txstat.ts_status |= ATH9K_TXERR_XRETRY; if (ads->ds_txstatus1 & AR_Filtered) --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/ath9k.h +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/ath9k.h @@ -139,6 +139,7 @@ dma_addr_t bf_daddr; /* physical addr of desc */ dma_addr_t bf_buf_addr; /* physical addr of data buffer */ bool bf_stale; + bool bf_isnullfunc; u16 bf_flags; struct ath_buf_state bf_state; dma_addr_t bf_dmacontext; @@ -367,6 +368,7 @@ u16 tid, u16 *ssn); void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid); +void ath9k_enable_ps(struct ath_softc *sc); /********/ /* VIFs */ @@ -524,6 +526,8 @@ #define SC_OP_BEACON_SYNC BIT(19) #define SC_OP_BTCOEX_ENABLED BIT(20) #define SC_OP_BT_PRIORITY_DETECTED BIT(21) +#define SC_OP_NULLFUNC_COMPLETED BIT(22) +#define SC_OP_PS_ENABLED BIT(23) struct ath_bus_ops { void (*read_cachesize)(struct ath_softc *sc, int *csz); --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/beacon.c +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/beacon.c @@ -512,16 +512,13 @@ { u32 nexttbtt, intval; - /* Configure the timers only when the TSF has to be reset */ - - if (!(sc->sc_flags & SC_OP_TSF_RESET)) - return; - /* NB: the beacon interval is kept internally in TU's */ intval = conf->beacon_interval & ATH9K_BEACON_PERIOD; intval /= ATH_BCBUF; /* for staggered beacons */ nexttbtt = intval; - intval |= ATH9K_BEACON_RESET_TSF; + + if (sc->sc_flags & SC_OP_TSF_RESET) + intval |= ATH9K_BEACON_RESET_TSF; /* * In AP mode we enable the beacon timers and SWBA interrupts to --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/main.c +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/main.c @@ -1544,6 +1544,7 @@ IEEE80211_HW_AMPDU_AGGREGATION | IEEE80211_HW_SUPPORTS_PS | IEEE80211_HW_PS_NULLFUNC_STACK | + IEEE80211_HW_REPORTS_TX_ACK_STATUS | IEEE80211_HW_SPECTRUM_MGMT; if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || modparam_nohwcrypt) @@ -2147,6 +2148,9 @@ return; /* another wiphy still in use */ } + /* Ensure HW is awake when we try to shut it down. */ + ath9k_ps_wakeup(sc); + if (sc->sc_flags & SC_OP_BTCOEX_ENABLED) { ath9k_hw_btcoex_disable(sc->sc_ah); if (sc->btcoex_info.btcoex_scheme == ATH_BTCOEX_CFG_3WIRE) @@ -2167,6 +2171,9 @@ /* disable HAL and put h/w to sleep */ ath9k_hw_disable(sc->sc_ah); ath9k_hw_configpcipowersave(sc->sc_ah, 1, 1); + ath9k_ps_restore(sc); + + /* Finally, put the chip in FULL SLEEP mode */ ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP); sc->sc_flags |= SC_OP_INVALID; @@ -2277,10 +2284,12 @@ if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) || (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC) || (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) { + ath9k_ps_wakeup(sc); ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq); - ath_beacon_return(sc, avp); + ath9k_ps_restore(sc); } + ath_beacon_return(sc, avp); sc->sc_flags &= ~SC_OP_BEACONS; for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) { @@ -2297,6 +2306,19 @@ mutex_unlock(&sc->mutex); } +void ath9k_enable_ps(struct ath_softc *sc) +{ + sc->ps_enabled = true; + if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) { + if ((sc->imask & ATH9K_INT_TIM_TIMER) == 0) { + sc->imask |= ATH9K_INT_TIM_TIMER; + ath9k_hw_set_interrupts(sc->sc_ah, + sc->imask); + } + } + ath9k_hw_setrxabort(sc->sc_ah, 1); +} + static int ath9k_config(struct ieee80211_hw *hw, u32 changed) { struct ath_wiphy *aphy = hw->priv; @@ -2327,18 +2349,15 @@ if (changed & IEEE80211_CONF_CHANGE_PS) { if (conf->flags & IEEE80211_CONF_PS) { - if (!(ah->caps.hw_caps & - ATH9K_HW_CAP_AUTOSLEEP)) { - if ((sc->imask & ATH9K_INT_TIM_TIMER) == 0) { - sc->imask |= ATH9K_INT_TIM_TIMER; - ath9k_hw_set_interrupts(sc->sc_ah, - sc->imask); - } - ath9k_hw_setrxabort(sc->sc_ah, 1); + sc->sc_flags |= SC_OP_PS_ENABLED; + if ((sc->sc_flags & SC_OP_NULLFUNC_COMPLETED)) { + sc->sc_flags &= ~SC_OP_NULLFUNC_COMPLETED; + ath9k_enable_ps(sc); } - sc->ps_enabled = true; } else { sc->ps_enabled = false; + sc->sc_flags &= ~(SC_OP_PS_ENABLED | + SC_OP_NULLFUNC_COMPLETED); ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) { @@ -2717,15 +2736,21 @@ case IEEE80211_AMPDU_RX_STOP: break; case IEEE80211_AMPDU_TX_START: + ath9k_ps_wakeup(sc); ath_tx_aggr_start(sc, sta, tid, ssn); ieee80211_start_tx_ba_cb_irqsafe(hw, sta->addr, tid); + ath9k_ps_restore(sc); break; case IEEE80211_AMPDU_TX_STOP: + ath9k_ps_wakeup(sc); ath_tx_aggr_stop(sc, sta, tid); ieee80211_stop_tx_ba_cb_irqsafe(hw, sta->addr, tid); + ath9k_ps_restore(sc); break; case IEEE80211_AMPDU_TX_OPERATIONAL: + ath9k_ps_wakeup(sc); ath_tx_aggr_resume(sc, sta, tid); + ath9k_ps_restore(sc); break; default: DPRINTF(sc, ATH_DBG_FATAL, "Unknown AMPDU action\n"); --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/mac.h +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/mac.h @@ -76,6 +76,10 @@ #define ATH9K_TXERR_FIFO 0x04 #define ATH9K_TXERR_XTXOP 0x08 #define ATH9K_TXERR_TIMER_EXPIRED 0x10 +#define ATH9K_TX_ACKED 0x20 +#define ATH9K_TXERR_MASK \ + (ATH9K_TXERR_XRETRY | ATH9K_TXERR_FILT | ATH9K_TXERR_FIFO | \ + ATH9K_TXERR_XTXOP | ATH9K_TXERR_TIMER_EXPIRED) #define ATH9K_TX_BA 0x01 #define ATH9K_TX_PWRMGMT 0x02 --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/hw.c +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/hw.c @@ -880,12 +880,11 @@ } } -static void ath9k_hw_init_11a_eeprom_fix(struct ath_hw *ah) +static void ath9k_hw_init_eeprom_fix(struct ath_hw *ah) { u32 i, j; - if ((ah->hw_version.devid == AR9280_DEVID_PCI) && - test_bit(ATH9K_MODE_11A, ah->caps.wireless_modes)) { + if (ah->hw_version.devid == AR9280_DEVID_PCI) { /* EEPROM Fixup */ for (i = 0; i < ah->iniModes.ia_rows; i++) { @@ -937,6 +936,11 @@ DPRINTF(ah->ah_sc, ATH_DBG_RESET, "serialize_regmode is %d\n", ah->config.serialize_regmode); + if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) + ah->config.max_txtrig_level = MAX_TX_FIFO_THRESHOLD >> 1; + else + ah->config.max_txtrig_level = MAX_TX_FIFO_THRESHOLD; + if (!ath9k_hw_macversion_supported(ah->hw_version.macVersion)) { DPRINTF(ah->ah_sc, ATH_DBG_FATAL, "Mac Chip Rev 0x%02x.%x is not supported by " @@ -975,7 +979,7 @@ ath9k_hw_init_mode_gain_regs(ah); ath9k_hw_fill_cap_info(ah); - ath9k_hw_init_11a_eeprom_fix(ah); + ath9k_hw_init_eeprom_fix(ah); r = ath9k_hw_init_macaddr(ah); if (r) { @@ -1291,6 +1295,16 @@ * Necessary to avoid issues on AR5416 2.0 */ REG_WRITE(ah, 0x9800 + (651 << 2), 0x11); + + /* + * Disable RIFS search on some chips to avoid baseband + * hang issues. + */ + if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) { + val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS); + val &= ~AR_PHY_RIFS_INIT_DELAY; + REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val); + } } static u32 ath9k_hw_def_ini_fixup(struct ath_hw *ah, @@ -3670,7 +3684,11 @@ pCap->keycache_size = AR_KEYTABLE_SIZE; pCap->hw_caps |= ATH9K_HW_CAP_FASTCC; - pCap->tx_triglevel_max = MAX_TX_FIFO_THRESHOLD; + + if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) + pCap->tx_triglevel_max = MAX_TX_FIFO_THRESHOLD >> 1; + else + pCap->tx_triglevel_max = MAX_TX_FIFO_THRESHOLD; if (AR_SREV_9285_10_OR_LATER(ah)) pCap->num_gpio_pins = AR9285_NUM_GPIO; --- linux-2.6.32.orig/drivers/net/wireless/ath/ath9k/hw.h +++ linux-2.6.32/drivers/net/wireless/ath/ath9k/hw.h @@ -218,6 +218,7 @@ #define AR_SPUR_FEEQ_BOUND_HT20 10 int spurmode; u16 spurchans[AR_EEPROM_MODAL_SPURS][2]; + u8 max_txtrig_level; }; enum ath9k_int { @@ -407,7 +408,7 @@ * Using de Bruijin sequence to to look up 1's index in a 32 bit number * debruijn32 = 0000 0111 0111 1100 1011 0101 0011 0001 */ -#define debruijn32 0x077CB531UL +#define debruijn32 0x077CB531U struct ath_gen_timer_configuration { u32 next_addr; --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/reset.c +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/reset.c @@ -1382,8 +1382,9 @@ * Set clocks to 32KHz operation and use an * external 32KHz crystal when sleeping if one * exists */ - if (ah->ah_version == AR5K_AR5212) - ath5k_hw_set_sleep_clock(ah, true); + if (ah->ah_version == AR5K_AR5212 && + ah->ah_op_mode != NL80211_IFTYPE_AP) + ath5k_hw_set_sleep_clock(ah, true); /* * Disable beacons and reset the register --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/base.c +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/base.c @@ -1220,6 +1220,29 @@ return 0; } +static enum ath5k_pkt_type get_hw_packet_type(struct sk_buff *skb) +{ + struct ieee80211_hdr *hdr; + enum ath5k_pkt_type htype; + __le16 fc; + + hdr = (struct ieee80211_hdr *)skb->data; + fc = hdr->frame_control; + + if (ieee80211_is_beacon(fc)) + htype = AR5K_PKT_TYPE_BEACON; + else if (ieee80211_is_probe_resp(fc)) + htype = AR5K_PKT_TYPE_PROBE_RESP; + else if (ieee80211_is_atim(fc)) + htype = AR5K_PKT_TYPE_ATIM; + else if (ieee80211_is_pspoll(fc)) + htype = AR5K_PKT_TYPE_PSPOLL; + else + htype = AR5K_PKT_TYPE_NORMAL; + + return htype; +} + static int ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, struct ath5k_txq *txq) @@ -1274,7 +1297,8 @@ sc->vif, pktlen, info)); } ret = ah->ah_setup_tx_desc(ah, ds, pktlen, - ieee80211_get_hdrlen_from_skb(skb), AR5K_PKT_TYPE_NORMAL, + ieee80211_get_hdrlen_from_skb(skb), + get_hw_packet_type(skb), (sc->power_level * 2), hw_rate, info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags, @@ -1487,7 +1511,8 @@ ret = ath5k_hw_get_tx_queueprops(ah, sc->bhalq, &qi); if (ret) - return ret; + goto err; + if (sc->opmode == NL80211_IFTYPE_AP || sc->opmode == NL80211_IFTYPE_MESH_POINT) { /* @@ -1514,10 +1539,25 @@ if (ret) { ATH5K_ERR(sc, "%s: unable to update parameters for beacon " "hardware queue!\n", __func__); - return ret; + goto err; } + ret = ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */ + if (ret) + goto err; - return ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */; + /* reconfigure cabq with ready time to 80% of beacon_interval */ + ret = ath5k_hw_get_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi); + if (ret) + goto err; + + qi.tqi_ready_time = (sc->bintval * 80) / 100; + ret = ath5k_hw_set_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi); + if (ret) + goto err; + + ret = ath5k_hw_reset_tx_queue(ah, AR5K_TX_QUEUE_ID_CAB); +err: + return ret; } static void @@ -2349,6 +2389,9 @@ */ ath5k_stop_locked(sc); + /* Set PHY calibration interval */ + ah->ah_cal_intval = ath5k_calinterval; + /* * The basic interface to setting the hardware in a good * state is ``reset''. On return the hardware is known to @@ -2376,10 +2419,6 @@ /* Set ack to be sent at low bit-rates */ ath5k_hw_set_ack_bitrate_high(ah, false); - - /* Set PHY calibration inteval */ - ah->ah_cal_intval = ath5k_calinterval; - ret = 0; done: mmiowb(); --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/eeprom.c +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/eeprom.c @@ -97,6 +97,7 @@ struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom; int ret; u16 val; + u32 cksum, offset, eep_max = AR5K_EEPROM_INFO_MAX; /* * Read values from EEPROM and store them in the capability structure @@ -111,20 +112,44 @@ if (ah->ah_ee_version < AR5K_EEPROM_VERSION_3_0) return 0; -#ifdef notyet /* * Validate the checksum of the EEPROM date. There are some * devices with invalid EEPROMs. */ - for (cksum = 0, offset = 0; offset < AR5K_EEPROM_INFO_MAX; offset++) { + AR5K_EEPROM_READ(AR5K_EEPROM_SIZE_UPPER, val); + if (val) { + eep_max = (val & AR5K_EEPROM_SIZE_UPPER_MASK) << + AR5K_EEPROM_SIZE_ENDLOC_SHIFT; + AR5K_EEPROM_READ(AR5K_EEPROM_SIZE_LOWER, val); + eep_max = (eep_max | val) - AR5K_EEPROM_INFO_BASE; + + /* + * Fail safe check to prevent stupid loops due + * to busted EEPROMs. XXX: This value is likely too + * big still, waiting on a better value. + */ + if (eep_max > (3 * AR5K_EEPROM_INFO_MAX)) { + ATH5K_ERR(ah->ah_sc, "Invalid max custom EEPROM size: " + "%d (0x%04x) max expected: %d (0x%04x)\n", + eep_max, eep_max, + 3 * AR5K_EEPROM_INFO_MAX, + 3 * AR5K_EEPROM_INFO_MAX); + return -EIO; + } + } + + for (cksum = 0, offset = 0; offset < eep_max; offset++) { AR5K_EEPROM_READ(AR5K_EEPROM_INFO(offset), val); cksum ^= val; } if (cksum != AR5K_EEPROM_INFO_CKSUM) { - ATH5K_ERR(ah->ah_sc, "Invalid EEPROM checksum 0x%04x\n", cksum); + ATH5K_ERR(ah->ah_sc, "Invalid EEPROM " + "checksum: 0x%04x eep_max: 0x%04x (%s)\n", + cksum, eep_max, + eep_max == AR5K_EEPROM_INFO_MAX ? + "default size" : "custom size"); return -EIO; } -#endif AR5K_EEPROM_READ_HDR(AR5K_EEPROM_ANT_GAIN(ah->ah_ee_version), ee_ant_gain); --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/qcu.c +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/qcu.c @@ -408,12 +408,13 @@ break; case AR5K_TX_QUEUE_CAB: + /* XXX: use BCN_SENT_GT, if we can figure out how */ AR5K_REG_ENABLE_BITS(ah, AR5K_QUEUE_MISC(queue), - AR5K_QCU_MISC_FRSHED_BCN_SENT_GT | + AR5K_QCU_MISC_FRSHED_DBA_GT | AR5K_QCU_MISC_CBREXP_DIS | AR5K_QCU_MISC_CBREXP_BCN_DIS); - ath5k_hw_reg_write(ah, ((AR5K_TUNE_BEACON_INTERVAL - + ath5k_hw_reg_write(ah, ((tq->tqi_ready_time - (AR5K_TUNE_SW_BEACON_RESP - AR5K_TUNE_DMA_BEACON_RESP) - AR5K_TUNE_ADDITIONAL_SWBA_BACKOFF) * 1024) | --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/eeprom.h +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/eeprom.h @@ -37,6 +37,14 @@ #define AR5K_EEPROM_RFKILL_POLARITY_S 1 #define AR5K_EEPROM_REG_DOMAIN 0x00bf /* EEPROM regdom */ + +/* FLASH(EEPROM) Defines for AR531X chips */ +#define AR5K_EEPROM_SIZE_LOWER 0x1b /* size info -- lower */ +#define AR5K_EEPROM_SIZE_UPPER 0x1c /* size info -- upper */ +#define AR5K_EEPROM_SIZE_UPPER_MASK 0xfff0 +#define AR5K_EEPROM_SIZE_UPPER_SHIFT 4 +#define AR5K_EEPROM_SIZE_ENDLOC_SHIFT 12 + #define AR5K_EEPROM_CHECKSUM 0x00c0 /* EEPROM checksum */ #define AR5K_EEPROM_INFO_BASE 0x00c0 /* EEPROM header */ #define AR5K_EEPROM_INFO_MAX (0x400 - AR5K_EEPROM_INFO_BASE) --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/phy.c +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/phy.c @@ -2954,8 +2954,6 @@ ATH5K_ERR(ah->ah_sc, "invalid tx power: %u\n", txpower); return -EINVAL; } - if (txpower == 0) - txpower = AR5K_TUNE_DEFAULT_TXPOWER; /* Reset TX power values */ memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower)); --- linux-2.6.32.orig/drivers/net/wireless/ath/ath5k/ath5k.h +++ linux-2.6.32/drivers/net/wireless/ath/ath5k/ath5k.h @@ -540,13 +540,12 @@ u32 tqi_cbr_period; /* Constant bit rate period */ u32 tqi_cbr_overflow_limit; u32 tqi_burst_time; - u32 tqi_ready_time; /* Not used */ + u32 tqi_ready_time; /* Time queue waits after an event */ }; /* * Transmit packet types. * used on tx control descriptor - * TODO: Use them inside base.c corectly */ enum ath5k_pkt_type { AR5K_PKT_TYPE_NORMAL = 0, --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-helpers.h +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-helpers.h @@ -80,8 +80,8 @@ struct fw_desc *desc) { if (desc->v_addr) - pci_free_consistent(pci_dev, desc->len, - desc->v_addr, desc->p_addr); + dma_free_coherent(&pci_dev->dev, desc->len, + desc->v_addr, desc->p_addr); desc->v_addr = NULL; desc->len = 0; } @@ -89,7 +89,8 @@ static inline int iwl_alloc_fw_desc(struct pci_dev *pci_dev, struct fw_desc *desc) { - desc->v_addr = pci_alloc_consistent(pci_dev, desc->len, &desc->p_addr); + desc->v_addr = dma_alloc_coherent(&pci_dev->dev, desc->len, + &desc->p_addr, GFP_KERNEL); return (desc->v_addr != NULL) ? 0 : -ENOMEM; } --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-eeprom.h +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-eeprom.h @@ -133,7 +133,7 @@ * */ struct iwl_eeprom_enhanced_txpwr { - u16 reserved; + __le16 common; s8 chain_a_max; s8 chain_b_max; s8 chain_c_max; @@ -347,7 +347,7 @@ struct iwl_eeprom_calib_info { u8 saturation_power24; /* half-dBm (e.g. "34" = 17 dBm) */ u8 saturation_power52; /* half-dBm */ - s16 voltage; /* signed */ + __le16 voltage; /* signed */ struct iwl_eeprom_calib_subband_info band_info[EEPROM_TX_POWER_BANDS]; } __attribute__ ((packed)); --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-dev.h +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-dev.h @@ -703,7 +703,7 @@ extern int iwl_queue_space(const struct iwl_queue *q); static inline int iwl_queue_used(const struct iwl_queue *q, int i) { - return q->write_ptr > q->read_ptr ? + return q->write_ptr >= q->read_ptr ? (i >= q->read_ptr && i < q->write_ptr) : !(i < q->read_ptr && i >= q->write_ptr); } @@ -1149,7 +1149,7 @@ u32 last_beacon_time; u64 last_tsf; - /* eeprom */ + /* eeprom -- this is in the card's little endian byte order */ u8 *eeprom; int nvm_device_type; struct iwl_eeprom_calib_info *calib_info; --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-5000.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-5000.c @@ -460,14 +460,15 @@ static int iwl5000_set_Xtal_calib(struct iwl_priv *priv) { struct iwl_calib_xtal_freq_cmd cmd; - u16 *xtal_calib = (u16 *)iwl_eeprom_query_addr(priv, EEPROM_5000_XTAL); + __le16 *xtal_calib = + (__le16 *)iwl_eeprom_query_addr(priv, EEPROM_5000_XTAL); cmd.hdr.op_code = IWL_PHY_CALIBRATE_CRYSTAL_FRQ_CMD; cmd.hdr.first_group = 0; cmd.hdr.groups_num = 1; cmd.hdr.data_valid = 1; - cmd.cap_pin1 = (u8)xtal_calib[0]; - cmd.cap_pin2 = (u8)xtal_calib[1]; + cmd.cap_pin1 = le16_to_cpu(xtal_calib[0]); + cmd.cap_pin2 = le16_to_cpu(xtal_calib[1]); return iwl_calib_set(&priv->calib_results[IWL_CALIB_XTAL], (u8 *)&cmd, sizeof(cmd)); } @@ -792,6 +793,13 @@ iwl5000_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0); + /* make sure all queue are not stopped */ + memset(&priv->queue_stopped[0], 0, sizeof(priv->queue_stopped)); + for (i = 0; i < 4; i++) + atomic_set(&priv->queue_stop_count[i], 0); + + /* reset to 0 to enable all the queue first */ + priv->txq_ctx_active_msk = 0; /* map qos queues to fifos one-to-one */ for (i = 0; i < ARRAY_SIZE(iwl5000_default_queue_to_tx_fifo); i++) { int ac = iwl5000_default_queue_to_tx_fifo[i]; @@ -1263,7 +1271,7 @@ scd_ssn , index, txq_id, txq->swq_id); freed = iwl_tx_queue_reclaim(priv, txq_id, index); - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); if (priv->mac80211_registered && (iwl_queue_space(&txq->q) > txq->q.low_mark) && @@ -1292,16 +1300,14 @@ tx_resp->failure_frame); freed = iwl_tx_queue_reclaim(priv, txq_id, index); - if (ieee80211_is_data_qos(tx_resp->frame_ctrl)) - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); if (priv->mac80211_registered && (iwl_queue_space(&txq->q) > txq->q.low_mark)) iwl_wake_queue(priv, txq_id); } - if (ieee80211_is_data_qos(tx_resp->frame_ctrl)) - iwl_txq_check_empty(priv, sta_id, tid, txq_id); + iwl_txq_check_empty(priv, sta_id, tid, txq_id); if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) IWL_ERR(priv, "TODO: Implement Tx ABORT REQUIRED!!!\n"); @@ -1665,6 +1671,7 @@ .valid_rx_ant = ANT_ABC, .need_pll_cfg = true, .ht_greenfield_support = true, + .use_rts_for_ht = true, /* use rts/cts protection */ }; struct iwl_cfg iwl5100_bg_cfg = { @@ -1716,6 +1723,7 @@ .valid_rx_ant = ANT_AB, .need_pll_cfg = true, .ht_greenfield_support = true, + .use_rts_for_ht = true, /* use rts/cts protection */ }; struct iwl_cfg iwl5350_agn_cfg = { @@ -1733,6 +1741,7 @@ .valid_rx_ant = ANT_ABC, .need_pll_cfg = true, .ht_greenfield_support = true, + .use_rts_for_ht = true, /* use rts/cts protection */ }; struct iwl_cfg iwl5150_agn_cfg = { @@ -1750,6 +1759,7 @@ .valid_rx_ant = ANT_AB, .need_pll_cfg = true, .ht_greenfield_support = true, + .use_rts_for_ht = true, /* use rts/cts protection */ }; MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX)); --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-eeprom.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-eeprom.c @@ -337,7 +337,7 @@ return ret; } -static int iwl_read_otp_word(struct iwl_priv *priv, u16 addr, u16 *eeprom_data) +static int iwl_read_otp_word(struct iwl_priv *priv, u16 addr, __le16 *eeprom_data) { int ret = 0; u32 r; @@ -370,7 +370,7 @@ CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK); IWL_ERR(priv, "Correctable OTP ECC error, continue read\n"); } - *eeprom_data = le16_to_cpu((__force __le16)(r >> 16)); + *eeprom_data = cpu_to_le16(r >> 16); return 0; } @@ -379,7 +379,8 @@ */ static bool iwl_is_otp_empty(struct iwl_priv *priv) { - u16 next_link_addr = 0, link_value; + u16 next_link_addr = 0; + __le16 link_value; bool is_empty = false; /* locate the beginning of OTP link list */ @@ -409,7 +410,8 @@ static int iwl_find_otp_image(struct iwl_priv *priv, u16 *validblockaddr) { - u16 next_link_addr = 0, link_value = 0, valid_addr; + u16 next_link_addr = 0, valid_addr; + __le16 link_value = 0; int usedblocks = 0; /* set addressing mode to absolute to traverse the link list */ @@ -429,7 +431,7 @@ * check for more block on the link list */ valid_addr = next_link_addr; - next_link_addr = link_value * sizeof(u16); + next_link_addr = le16_to_cpu(link_value) * sizeof(u16); IWL_DEBUG_INFO(priv, "OTP blocks %d addr 0x%x\n", usedblocks, next_link_addr); if (iwl_read_otp_word(priv, next_link_addr, &link_value)) @@ -463,7 +465,7 @@ */ int iwl_eeprom_init(struct iwl_priv *priv) { - u16 *e; + __le16 *e; u32 gp = iwl_read32(priv, CSR_EEPROM_GP); int sz; int ret; @@ -482,7 +484,7 @@ ret = -ENOMEM; goto alloc_err; } - e = (u16 *)priv->eeprom; + e = (__le16 *)priv->eeprom; ret = priv->cfg->ops->lib->eeprom_ops.verify_signature(priv); if (ret < 0) { @@ -521,7 +523,7 @@ } for (addr = validblockaddr; addr < validblockaddr + sz; addr += sizeof(u16)) { - u16 eeprom_data; + __le16 eeprom_data; ret = iwl_read_otp_word(priv, addr, &eeprom_data); if (ret) @@ -545,7 +547,7 @@ goto done; } r = _iwl_read_direct32(priv, CSR_EEPROM_REG); - e[addr / 2] = le16_to_cpu((__force __le16)(r >> 16)); + e[addr / 2] = cpu_to_le16(r >> 16); } } ret = 0; @@ -709,7 +711,8 @@ ch_info->ht40_min_power = 0; ch_info->ht40_scan_power = eeprom_ch->max_power_avg; ch_info->ht40_flags = eeprom_ch->flags; - ch_info->ht40_extension_channel &= ~clear_ht40_extension_channel; + if (eeprom_ch->flags & EEPROM_CHANNEL_VALID) + ch_info->ht40_extension_channel &= ~clear_ht40_extension_channel; return 0; } --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-rx.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-rx.c @@ -345,10 +345,10 @@ } } - pci_free_consistent(priv->pci_dev, 4 * RX_QUEUE_SIZE, rxq->bd, - rxq->dma_addr); - pci_free_consistent(priv->pci_dev, sizeof(struct iwl_rb_status), - rxq->rb_stts, rxq->rb_stts_dma); + dma_free_coherent(&priv->pci_dev->dev, 4 * RX_QUEUE_SIZE, rxq->bd, + rxq->dma_addr); + dma_free_coherent(&priv->pci_dev->dev, sizeof(struct iwl_rb_status), + rxq->rb_stts, rxq->rb_stts_dma); rxq->bd = NULL; rxq->rb_stts = NULL; } @@ -357,7 +357,7 @@ int iwl_rx_queue_alloc(struct iwl_priv *priv) { struct iwl_rx_queue *rxq = &priv->rxq; - struct pci_dev *dev = priv->pci_dev; + struct device *dev = &priv->pci_dev->dev; int i; spin_lock_init(&rxq->lock); @@ -365,12 +365,13 @@ INIT_LIST_HEAD(&rxq->rx_used); /* Alloc the circular buffer of Read Buffer Descriptors (RBDs) */ - rxq->bd = pci_alloc_consistent(dev, 4 * RX_QUEUE_SIZE, &rxq->dma_addr); + rxq->bd = dma_alloc_coherent(dev, 4 * RX_QUEUE_SIZE, &rxq->dma_addr, + GFP_KERNEL); if (!rxq->bd) goto err_bd; - rxq->rb_stts = pci_alloc_consistent(dev, sizeof(struct iwl_rb_status), - &rxq->rb_stts_dma); + rxq->rb_stts = dma_alloc_coherent(dev, sizeof(struct iwl_rb_status), + &rxq->rb_stts_dma, GFP_KERNEL); if (!rxq->rb_stts) goto err_rb; @@ -387,8 +388,8 @@ return 0; err_rb: - pci_free_consistent(priv->pci_dev, 4 * RX_QUEUE_SIZE, rxq->bd, - rxq->dma_addr); + dma_free_coherent(&priv->pci_dev->dev, 4 * RX_QUEUE_SIZE, rxq->bd, + rxq->dma_addr); err_bd: return -ENOMEM; } --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-5000-hw.h +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-5000-hw.h @@ -92,11 +92,15 @@ static inline s32 iwl_temp_calib_to_offset(struct iwl_priv *priv) { - u16 *temp_calib = (u16 *)iwl_eeprom_query_addr(priv, - EEPROM_5000_TEMPERATURE); - /* offset = temperature - voltage / coef */ - s32 offset = (s32)(temp_calib[0] - temp_calib[1] / IWL_5150_VOLTAGE_TO_TEMPERATURE_COEFF); - return offset; + u16 temperature, voltage; + __le16 *temp_calib = + (__le16 *)iwl_eeprom_query_addr(priv, EEPROM_5000_TEMPERATURE); + + temperature = le16_to_cpu(temp_calib[0]); + voltage = le16_to_cpu(temp_calib[1]); + + /* offset = temp - volt / coeff */ + return (s32)(temperature - voltage / IWL_5150_VOLTAGE_TO_TEMPERATURE_COEFF); } /* Fixed (non-configurable) rx data from phy */ --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl3945-base.c @@ -356,10 +356,10 @@ static void iwl3945_unset_hw_params(struct iwl_priv *priv) { if (priv->shared_virt) - pci_free_consistent(priv->pci_dev, - sizeof(struct iwl3945_shared), - priv->shared_virt, - priv->shared_phys); + dma_free_coherent(&priv->pci_dev->dev, + sizeof(struct iwl3945_shared), + priv->shared_virt, + priv->shared_phys); } static void iwl3945_build_tx_cmd_hwcrypto(struct iwl_priv *priv, @@ -562,6 +562,9 @@ txq = &priv->txq[txq_id]; q = &txq->q; + if ((iwl_queue_space(q) < q->high_mark)) + goto drop; + spin_lock_irqsave(&priv->lock, flags); idx = get_cmd_index(q, q->write_ptr, 0); @@ -1269,10 +1272,10 @@ } } - pci_free_consistent(priv->pci_dev, 4 * RX_QUEUE_SIZE, rxq->bd, - rxq->dma_addr); - pci_free_consistent(priv->pci_dev, sizeof(struct iwl_rb_status), - rxq->rb_stts, rxq->rb_stts_dma); + dma_free_coherent(&priv->pci_dev->dev, 4 * RX_QUEUE_SIZE, rxq->bd, + rxq->dma_addr); + dma_free_coherent(&priv->pci_dev->dev, sizeof(struct iwl_rb_status), + rxq->rb_stts, rxq->rb_stts_dma); rxq->bd = NULL; rxq->rb_stts = NULL; } @@ -1901,7 +1904,7 @@ { int i; - for (i = 0; i < IWL_RATE_COUNT; i++) { + for (i = 0; i < IWL_RATE_COUNT_LEGACY; i++) { rates[i].bitrate = iwl3945_rates[i].ieee * 5; rates[i].hw_value = i; /* Rate scaling will work on indexes */ rates[i].hw_value_short = i; @@ -3854,9 +3857,11 @@ /* Tell mac80211 our characteristics */ hw->flags = IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_NOISE_DBM | - IEEE80211_HW_SPECTRUM_MGMT | - IEEE80211_HW_SUPPORTS_PS | - IEEE80211_HW_SUPPORTS_DYNAMIC_PS; + IEEE80211_HW_SPECTRUM_MGMT; + + if (!priv->cfg->broken_powersave) + hw->flags |= IEEE80211_HW_SUPPORTS_PS | + IEEE80211_HW_SUPPORTS_DYNAMIC_PS; hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-core.h +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-core.h @@ -410,6 +410,8 @@ int iwl_hw_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq); int iwl_txq_update_write_ptr(struct iwl_priv *priv, struct iwl_tx_queue *txq); +void iwl_free_tfds_in_queue(struct iwl_priv *priv, + int sta_id, int tid, int freed); int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq, int slots_num, u32 txq_id); void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id); --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-4965.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-4965.c @@ -715,6 +715,13 @@ iwl4965_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0); + /* make sure all queue are not stopped */ + memset(&priv->queue_stopped[0], 0, sizeof(priv->queue_stopped)); + for (i = 0; i < 4; i++) + atomic_set(&priv->queue_stop_count[i], 0); + + /* reset to 0 to enable all the queue first */ + priv->txq_ctx_active_msk = 0; /* Map each Tx/cmd queue to its corresponding fifo */ for (i = 0; i < ARRAY_SIZE(default_queue_to_tx_fifo); i++) { int ac = default_queue_to_tx_fifo[i]; @@ -1337,7 +1344,7 @@ iwl4965_interpolate_chan(priv, channel, &ch_eeprom_info); /* calculate tx gain adjustment based on power supply voltage */ - voltage = priv->calib_info->voltage; + voltage = le16_to_cpu(priv->calib_info->voltage); init_voltage = (s32)le32_to_cpu(priv->card_alive_init.voltage); voltage_compensation = iwl4965_get_voltage_compensation(voltage, init_voltage); @@ -2087,7 +2094,7 @@ struct ieee80211_tx_info *info; struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; u32 status = le32_to_cpu(tx_resp->u.status); - int tid = MAX_TID_COUNT; + int tid = MAX_TID_COUNT - 1; int sta_id; int freed; u8 *qc = NULL; @@ -2134,7 +2141,9 @@ IWL_DEBUG_TX_REPLY(priv, "Retry scheduler reclaim scd_ssn " "%d index %d\n", scd_ssn , index); freed = iwl_tx_queue_reclaim(priv, txq_id, index); - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; + if (qc) + iwl_free_tfds_in_queue(priv, sta_id, + tid, freed); if (priv->mac80211_registered && (iwl_queue_space(&txq->q) > txq->q.low_mark) && @@ -2162,13 +2171,14 @@ freed = iwl_tx_queue_reclaim(priv, txq_id, index); if (qc && likely(sta_id != IWL_INVALID_STATION)) - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); + else if (sta_id == IWL_INVALID_STATION) + IWL_DEBUG_TX_REPLY(priv, "Station not known\n"); if (priv->mac80211_registered && (iwl_queue_space(&txq->q) > txq->q.low_mark)) iwl_wake_queue(priv, txq_id); } - if (qc && likely(sta_id != IWL_INVALID_STATION)) iwl_txq_check_empty(priv, sta_id, tid, txq_id); --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-scan.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-scan.c @@ -405,21 +405,6 @@ static int iwl_scan_initiate(struct iwl_priv *priv) { - if (!iwl_is_ready_rf(priv)) { - IWL_DEBUG_SCAN(priv, "Aborting scan due to not ready.\n"); - return -EIO; - } - - if (test_bit(STATUS_SCANNING, &priv->status)) { - IWL_DEBUG_SCAN(priv, "Scan already in progress.\n"); - return -EAGAIN; - } - - if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) { - IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n"); - return -EAGAIN; - } - IWL_DEBUG_INFO(priv, "Starting scan...\n"); set_bit(STATUS_SCANNING, &priv->status); priv->scan_start = jiffies; @@ -450,6 +435,18 @@ goto out_unlock; } + if (test_bit(STATUS_SCANNING, &priv->status)) { + IWL_DEBUG_SCAN(priv, "Scan already in progress.\n"); + ret = -EAGAIN; + goto out_unlock; + } + + if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) { + IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n"); + ret = -EAGAIN; + goto out_unlock; + } + /* We don't schedule scan within next_scan_jiffies period. * Avoid scanning during possible EAPOL exchange, return * success immediately. --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-tx.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-tx.c @@ -60,7 +60,8 @@ static inline int iwl_alloc_dma_ptr(struct iwl_priv *priv, struct iwl_dma_ptr *ptr, size_t size) { - ptr->addr = pci_alloc_consistent(priv->pci_dev, size, &ptr->dma); + ptr->addr = dma_alloc_coherent(&priv->pci_dev->dev, size, &ptr->dma, + GFP_KERNEL); if (!ptr->addr) return -ENOMEM; ptr->size = size; @@ -73,7 +74,7 @@ if (unlikely(!ptr->addr)) return; - pci_free_consistent(priv->pci_dev, ptr->size, ptr->addr, ptr->dma); + dma_free_coherent(&priv->pci_dev->dev, ptr->size, ptr->addr, ptr->dma); memset(ptr, 0, sizeof(*ptr)); } @@ -119,6 +120,20 @@ EXPORT_SYMBOL(iwl_txq_update_write_ptr); +void iwl_free_tfds_in_queue(struct iwl_priv *priv, + int sta_id, int tid, int freed) +{ + if (priv->stations[sta_id].tid[tid].tfds_in_queue >= freed) + priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; + else { + IWL_DEBUG_TX(priv, "free more than tfds_in_queue (%u:%d)\n", + priv->stations[sta_id].tid[tid].tfds_in_queue, + freed); + priv->stations[sta_id].tid[tid].tfds_in_queue = 0; + } +} +EXPORT_SYMBOL(iwl_free_tfds_in_queue); + /** * iwl_tx_queue_free - Deallocate DMA queue. * @txq: Transmit queue to deallocate. @@ -131,7 +146,7 @@ { struct iwl_tx_queue *txq = &priv->txq[txq_id]; struct iwl_queue *q = &txq->q; - struct pci_dev *dev = priv->pci_dev; + struct device *dev = &priv->pci_dev->dev; int i, len; if (q->n_bd == 0) @@ -150,8 +165,8 @@ /* De-alloc circular buffer of TFDs */ if (txq->q.n_bd) - pci_free_consistent(dev, priv->hw_params.tfd_size * - txq->q.n_bd, txq->tfds, txq->q.dma_addr); + dma_free_coherent(dev, priv->hw_params.tfd_size * + txq->q.n_bd, txq->tfds, txq->q.dma_addr); /* De-alloc array of per-TFD driver data */ kfree(txq->txb); @@ -180,7 +195,7 @@ { struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM]; struct iwl_queue *q = &txq->q; - struct pci_dev *dev = priv->pci_dev; + struct device *dev = &priv->pci_dev->dev; int i, len; if (q->n_bd == 0) @@ -195,8 +210,8 @@ /* De-alloc circular buffer of TFDs */ if (txq->q.n_bd) - pci_free_consistent(dev, priv->hw_params.tfd_size * - txq->q.n_bd, txq->tfds, txq->q.dma_addr); + dma_free_coherent(dev, priv->hw_params.tfd_size * txq->q.n_bd, + txq->tfds, txq->q.dma_addr); /* deallocate arrays */ kfree(txq->cmd); @@ -287,7 +302,7 @@ static int iwl_tx_queue_alloc(struct iwl_priv *priv, struct iwl_tx_queue *txq, u32 id) { - struct pci_dev *dev = priv->pci_dev; + struct device *dev = &priv->pci_dev->dev; size_t tfd_sz = priv->hw_params.tfd_size * TFD_QUEUE_SIZE_MAX; /* Driver private data, only for Tx (not command) queues, @@ -306,8 +321,8 @@ /* Circular buffer of transmit frame descriptors (TFDs), * shared with device */ - txq->tfds = pci_alloc_consistent(dev, tfd_sz, &txq->q.dma_addr); - + txq->tfds = dma_alloc_coherent(dev, tfd_sz, &txq->q.dma_addr, + GFP_KERNEL); if (!txq->tfds) { IWL_ERR(priv, "pci_alloc_consistent(%zd) failed\n", tfd_sz); goto error; @@ -1057,6 +1072,7 @@ struct iwl_queue *q = &txq->q; struct iwl_tx_info *tx_info; int nfreed = 0; + struct ieee80211_hdr *hdr; if ((index >= q->n_bd) || (iwl_queue_used(q, index) == 0)) { IWL_ERR(priv, "Read index for DMA queue txq id (%d), index %d, " @@ -1071,13 +1087,16 @@ tx_info = &txq->txb[txq->q.read_ptr]; ieee80211_tx_status_irqsafe(priv->hw, tx_info->skb[0]); + + hdr = (struct ieee80211_hdr *)tx_info->skb[0]->data; + if (hdr && ieee80211_is_data_qos(hdr->frame_control)) + nfreed++; tx_info->skb[0] = NULL; if (priv->cfg->ops->lib->txq_inval_byte_cnt_tbl) priv->cfg->ops->lib->txq_inval_byte_cnt_tbl(priv, txq); priv->cfg->ops->lib->txq_free_tfd(priv, txq); - nfreed++; } return nfreed; } @@ -1485,7 +1504,7 @@ if (txq->q.read_ptr != (ba_resp_scd_ssn & 0xff)) { /* calculate mac80211 ampdu sw queue to wake */ int freed = iwl_tx_queue_reclaim(priv, scd_flow, index); - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); if ((iwl_queue_space(&txq->q) > txq->q.low_mark) && priv->mac80211_registered && --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-core.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-core.c @@ -1598,9 +1598,9 @@ void iwl_free_isr_ict(struct iwl_priv *priv) { if (priv->ict_tbl_vir) { - pci_free_consistent(priv->pci_dev, (sizeof(u32) * ICT_COUNT) + - PAGE_SIZE, priv->ict_tbl_vir, - priv->ict_tbl_dma); + dma_free_coherent(&priv->pci_dev->dev, + (sizeof(u32) * ICT_COUNT) + PAGE_SIZE, + priv->ict_tbl_vir, priv->ict_tbl_dma); priv->ict_tbl_vir = NULL; } } @@ -1616,9 +1616,9 @@ if (priv->cfg->use_isr_legacy) return 0; /* allocate shrared data table */ - priv->ict_tbl_vir = pci_alloc_consistent(priv->pci_dev, (sizeof(u32) * - ICT_COUNT) + PAGE_SIZE, - &priv->ict_tbl_dma); + priv->ict_tbl_vir = dma_alloc_coherent(&priv->pci_dev->dev, + (sizeof(u32) * ICT_COUNT) + PAGE_SIZE, + &priv->ict_tbl_dma, GFP_KERNEL); if (!priv->ict_tbl_vir) return -ENOMEM; @@ -2646,6 +2646,7 @@ priv->staging_rxon.flags = 0; iwl_set_rxon_channel(priv, conf->channel); + iwl_set_rxon_ht(priv, ht_conf); iwl_set_flags_for_band(priv, conf->channel->band); spin_unlock_irqrestore(&priv->lock, flags); --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-3945.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-3945.c @@ -2545,11 +2545,9 @@ memset((void *)&priv->hw_params, 0, sizeof(struct iwl_hw_params)); - priv->shared_virt = - pci_alloc_consistent(priv->pci_dev, - sizeof(struct iwl3945_shared), - &priv->shared_phys); - + priv->shared_virt = dma_alloc_coherent(&priv->pci_dev->dev, + sizeof(struct iwl3945_shared), + &priv->shared_phys, GFP_KERNEL); if (!priv->shared_virt) { IWL_ERR(priv, "failed to allocate pci memory\n"); mutex_unlock(&priv->mutex); @@ -2895,6 +2893,7 @@ .mod_params = &iwl3945_mod_params, .use_isr_legacy = true, .ht_greenfield_support = false, + .broken_powersave = true, }; static struct iwl_cfg iwl3945_abg_cfg = { @@ -2909,6 +2908,7 @@ .mod_params = &iwl3945_mod_params, .use_isr_legacy = true, .ht_greenfield_support = false, + .broken_powersave = true, }; struct pci_device_id iwl3945_hw_card_ids[] = { --- linux-2.6.32.orig/drivers/net/wireless/iwlwifi/iwl-agn-rs.c +++ linux-2.6.32/drivers/net/wireless/iwlwifi/iwl-agn-rs.c @@ -2808,7 +2808,7 @@ repeat_rate--; } - lq_cmd->agg_params.agg_frame_cnt_limit = LINK_QUAL_AGG_FRAME_LIMIT_MAX; + lq_cmd->agg_params.agg_frame_cnt_limit = LINK_QUAL_AGG_FRAME_LIMIT_DEF; lq_cmd->agg_params.agg_dis_start_th = LINK_QUAL_AGG_DISABLE_START_DEF; lq_cmd->agg_params.agg_time_limit = cpu_to_le16(LINK_QUAL_AGG_TIME_LIMIT_DEF); --- linux-2.6.32.orig/drivers/net/wireless/rt2x00/rt61pci.c +++ linux-2.6.32/drivers/net/wireless/rt2x00/rt61pci.c @@ -2538,6 +2538,11 @@ unsigned int i; /* + * Disable powersaving as default. + */ + rt2x00dev->hw->wiphy->ps_default = false; + + /* * Initialize all hw fields. */ rt2x00dev->hw->flags = --- linux-2.6.32.orig/drivers/net/wireless/iwmc3200wifi/iwm.h +++ linux-2.6.32/drivers/net/wireless/iwmc3200wifi/iwm.h @@ -258,7 +258,7 @@ struct sk_buff_head rx_list; struct list_head rx_tickets; - struct list_head rx_packets[IWM_RX_ID_HASH]; + struct list_head rx_packets[IWM_RX_ID_HASH + 1]; struct workqueue_struct *rx_wq; struct work_struct rx_worker; --- linux-2.6.32.orig/drivers/net/wireless/hostap/hostap_main.c +++ linux-2.6.32/drivers/net/wireless/hostap/hostap_main.c @@ -1100,6 +1100,7 @@ (u8 *) &val, 2); memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); wireless_send_event(local->dev, SIOCGIWAP, &wrqu, NULL); + wireless_send_event(local->ddev, SIOCGIWAP, &wrqu, NULL); return ret; } --- linux-2.6.32.orig/drivers/net/wireless/hostap/hostap_hw.c +++ linux-2.6.32/drivers/net/wireless/hostap/hostap_hw.c @@ -68,7 +68,7 @@ module_param_string(essid, essid, sizeof(essid), 0444); MODULE_PARM_DESC(essid, "Host AP's ESSID"); -static int iw_mode[MAX_PARM_DEVICES] = { IW_MODE_MASTER, DEF_INTS }; +static int iw_mode[MAX_PARM_DEVICES] = { IW_MODE_INFRA, DEF_INTS }; module_param_array(iw_mode, int, NULL, 0444); MODULE_PARM_DESC(iw_mode, "Initial operation mode"); @@ -2618,6 +2618,15 @@ int events = 0; u16 ev; + /* Detect early interrupt before driver is fully configued */ + if (!dev->base_addr) { + if (net_ratelimit()) { + printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n", + dev->name); + } + return IRQ_HANDLED; + } + iface = netdev_priv(dev); local = iface->local; @@ -3383,6 +3392,7 @@ memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; wireless_send_event(local->dev, SIOCGIWAP, &wrqu, NULL); + wireless_send_event(local->ddev, SIOCGIWAP, &wrqu, NULL); /* Disable hardware and firmware */ prism2_hw_shutdown(dev, 0); --- linux-2.6.32.orig/drivers/net/wireless/hostap/hostap_info.c +++ linux-2.6.32/drivers/net/wireless/hostap/hostap_info.c @@ -238,6 +238,7 @@ wrqu.data.length = 0; wrqu.data.flags = 0; wireless_send_event(local->dev, SIOCGIWSCAN, &wrqu, NULL); + wireless_send_event(local->ddev, SIOCGIWSCAN, &wrqu, NULL); /* Allow SIOCGIWSCAN handling to occur since we have received * scanning result */ @@ -449,8 +450,10 @@ * frames and can confuse wpa_supplicant about the current association * status. */ - if (connected || local->prev_linkstatus_connected) + if (connected || local->prev_linkstatus_connected) { wireless_send_event(local->dev, SIOCGIWAP, &wrqu, NULL); + wireless_send_event(local->ddev, SIOCGIWAP, &wrqu, NULL); + } local->prev_linkstatus_connected = connected; } --- linux-2.6.32.orig/drivers/net/wireless/libertas/wext.c +++ linux-2.6.32/drivers/net/wireless/libertas/wext.c @@ -1953,10 +1953,8 @@ if (priv->connect_status == LBS_CONNECTED) { memcpy(extra, priv->curbssparams.ssid, priv->curbssparams.ssid_len); - extra[priv->curbssparams.ssid_len] = '\0'; } else { memset(extra, 0, 32); - extra[priv->curbssparams.ssid_len] = '\0'; } /* * If none, we may want to get the one that was set --- linux-2.6.32.orig/drivers/net/wireless/libertas/scan.c +++ linux-2.6.32/drivers/net/wireless/libertas/scan.c @@ -399,11 +399,8 @@ chan_count = lbs_scan_create_channel_list(priv, chan_list); netif_stop_queue(priv->dev); - netif_carrier_off(priv->dev); - if (priv->mesh_dev) { + if (priv->mesh_dev) netif_stop_queue(priv->mesh_dev); - netif_carrier_off(priv->mesh_dev); - } /* Prepare to continue an interrupted scan */ lbs_deb_scan("chan_count %d, scan_channel %d\n", @@ -467,16 +464,13 @@ priv->scan_channel = 0; out: - if (priv->connect_status == LBS_CONNECTED) { - netif_carrier_on(priv->dev); - if (!priv->tx_pending_len) - netif_wake_queue(priv->dev); - } - if (priv->mesh_dev && (priv->mesh_connect_status == LBS_CONNECTED)) { - netif_carrier_on(priv->mesh_dev); - if (!priv->tx_pending_len) - netif_wake_queue(priv->mesh_dev); - } + if (priv->connect_status == LBS_CONNECTED && !priv->tx_pending_len) + netif_wake_queue(priv->dev); + + if (priv->mesh_dev && (priv->mesh_connect_status == LBS_CONNECTED) && + !priv->tx_pending_len) + netif_wake_queue(priv->mesh_dev); + kfree(chan_list); lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret); --- linux-2.6.32.orig/drivers/net/wireless/b43/dma.c +++ linux-2.6.32/drivers/net/wireless/b43/dma.c @@ -1620,7 +1620,6 @@ b43_power_saving_ctl_bits(dev, 0); } -#ifdef CONFIG_B43_PIO static void direct_fifo_rx(struct b43_wldev *dev, enum b43_dmatype type, u16 mmio_base, bool enable) { @@ -1654,4 +1653,3 @@ mmio_base = b43_dmacontroller_base(type, engine_index); direct_fifo_rx(dev, type, mmio_base, enable); } -#endif /* CONFIG_B43_PIO */ --- linux-2.6.32.orig/drivers/net/wireless/b43/xmit.c +++ linux-2.6.32/drivers/net/wireless/b43/xmit.c @@ -27,7 +27,7 @@ */ -#include "b43.h" +#include "xmit.h" #include "phy_common.h" #include "dma.h" #include "pio.h" --- linux-2.6.32.orig/drivers/net/wireless/b43/pio.h +++ linux-2.6.32/drivers/net/wireless/b43/pio.h @@ -55,8 +55,6 @@ #define B43_PIO_MAX_NR_TXPACKETS 32 -#ifdef CONFIG_B43_PIO - struct b43_pio_txpacket { /* Pointer to the TX queue we belong to. */ struct b43_pio_txqueue *queue; @@ -169,42 +167,4 @@ void b43_pio_tx_suspend(struct b43_wldev *dev); void b43_pio_tx_resume(struct b43_wldev *dev); - -#else /* CONFIG_B43_PIO */ - - -static inline int b43_pio_init(struct b43_wldev *dev) -{ - return 0; -} -static inline void b43_pio_free(struct b43_wldev *dev) -{ -} -static inline void b43_pio_stop(struct b43_wldev *dev) -{ -} -static inline int b43_pio_tx(struct b43_wldev *dev, - struct sk_buff *skb) -{ - return 0; -} -static inline void b43_pio_handle_txstatus(struct b43_wldev *dev, - const struct b43_txstatus *status) -{ -} -static inline void b43_pio_get_tx_stats(struct b43_wldev *dev, - struct ieee80211_tx_queue_stats *stats) -{ -} -static inline void b43_pio_rx(struct b43_pio_rxqueue *q) -{ -} -static inline void b43_pio_tx_suspend(struct b43_wldev *dev) -{ -} -static inline void b43_pio_tx_resume(struct b43_wldev *dev) -{ -} - -#endif /* CONFIG_B43_PIO */ #endif /* B43_PIO_H_ */ --- linux-2.6.32.orig/drivers/net/wireless/b43/b43.h +++ linux-2.6.32/drivers/net/wireless/b43/b43.h @@ -117,6 +117,7 @@ #define B43_MMIO_TSF_2 0x636 /* core rev < 3 only */ #define B43_MMIO_TSF_3 0x638 /* core rev < 3 only */ #define B43_MMIO_RNG 0x65A +#define B43_MMIO_IFSSLOT 0x684 /* Interframe slot time */ #define B43_MMIO_IFSCTL 0x688 /* Interframe space control */ #define B43_MMIO_IFSCTL_USE_EDCF 0x0004 #define B43_MMIO_POWERUP_DELAY 0x6A8 @@ -695,6 +696,7 @@ bool radio_hw_enable; /* saved state of radio hardware enabled state */ bool qos_enabled; /* TRUE, if QoS is used. */ bool hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */ + bool use_pio; /* TRUE if next init should use PIO */ /* PHY/Radio device. */ struct b43_phy phy; @@ -749,12 +751,6 @@ #endif }; -/* - * Include goes here to avoid a dependency problem. - * A better fix would be to integrate xmit.h into b43.h. - */ -#include "xmit.h" - /* Data structure for the WLAN parts (802.11 cores) of the b43 chip. */ struct b43_wl { /* Pointer to the active wireless device on this chip */ @@ -829,15 +825,9 @@ /* The device LEDs. */ struct b43_leds leds; -#ifdef CONFIG_B43_PIO - /* - * RX/TX header/tail buffers used by the frame transmit functions. - */ - struct b43_rxhdr_fw4 rxhdr; - struct b43_txhdr txhdr; - u8 rx_tail[4]; - u8 tx_tail[4]; -#endif /* CONFIG_B43_PIO */ + /* Kmalloc'ed scratch space for PIO TX/RX. Protected by wl->mutex. */ + u8 pio_scratchspace[110] __attribute__((__aligned__(8))); + u8 pio_tailspace[4] __attribute__((__aligned__(8))); }; static inline struct b43_wl *hw_to_b43_wl(struct ieee80211_hw *hw) @@ -888,20 +878,15 @@ static inline bool b43_using_pio_transfers(struct b43_wldev *dev) { -#ifdef CONFIG_B43_PIO return dev->__using_pio_transfers; -#else - return 0; -#endif } #ifdef CONFIG_B43_FORCE_PIO -# define B43_FORCE_PIO 1 +# define B43_PIO_DEFAULT 1 #else -# define B43_FORCE_PIO 0 +# define B43_PIO_DEFAULT 0 #endif - /* Message printing */ void b43info(struct b43_wl *wl, const char *fmt, ...) __attribute__ ((format(printf, 2, 3))); --- linux-2.6.32.orig/drivers/net/wireless/b43/Kconfig +++ linux-2.6.32/drivers/net/wireless/b43/Kconfig @@ -78,11 +78,11 @@ If unsure, say N. -# Data transfers to the device via PIO -# This is only needed on PCMCIA and SDIO devices. All others can do DMA properly. +#Data transfers to the device via PIO. We want it as a fallback even +# if we can do DMA. config B43_PIO bool - depends on B43 && (B43_SDIO || B43_PCMCIA || B43_FORCE_PIO) + depends on B43 select SSB_BLOCKIO default y --- linux-2.6.32.orig/drivers/net/wireless/b43/rfkill.c +++ linux-2.6.32/drivers/net/wireless/b43/rfkill.c @@ -33,8 +33,14 @@ & B43_MMIO_RADIO_HWENABLED_HI_MASK)) return 1; } else { - if (b43_status(dev) >= B43_STAT_STARTED && - b43_read16(dev, B43_MMIO_RADIO_HWENABLED_LO) + /* To prevent CPU fault on PPC, do not read a register + * unless the interface is started; however, on resume + * for hibernation, this routine is entered early. When + * that happens, unconditionally return TRUE. + */ + if (b43_status(dev) < B43_STAT_STARTED) + return 1; + if (b43_read16(dev, B43_MMIO_RADIO_HWENABLED_LO) & B43_MMIO_RADIO_HWENABLED_LO_MASK) return 1; } --- linux-2.6.32.orig/drivers/net/wireless/b43/pio.c +++ linux-2.6.32/drivers/net/wireless/b43/pio.c @@ -342,12 +342,15 @@ q->mmio_base + B43_PIO_TXDATA, sizeof(u16)); if (data_len & 1) { + u8 *tail = wl->pio_tailspace; + BUILD_BUG_ON(sizeof(wl->pio_tailspace) < 2); + /* Write the last byte. */ ctl &= ~B43_PIO_TXCTL_WRITEHI; b43_piotx_write16(q, B43_PIO_TXCTL, ctl); - wl->tx_tail[0] = data[data_len - 1]; - wl->tx_tail[1] = 0; - ssb_block_write(dev->dev, wl->tx_tail, 2, + tail[0] = data[data_len - 1]; + tail[1] = 0; + ssb_block_write(dev->dev, tail, 2, q->mmio_base + B43_PIO_TXDATA, sizeof(u16)); } @@ -393,31 +396,31 @@ q->mmio_base + B43_PIO8_TXDATA, sizeof(u32)); if (data_len & 3) { - wl->tx_tail[3] = 0; + u8 *tail = wl->pio_tailspace; + BUILD_BUG_ON(sizeof(wl->pio_tailspace) < 4); + + memset(tail, 0, 4); /* Write the last few bytes. */ ctl &= ~(B43_PIO8_TXCTL_8_15 | B43_PIO8_TXCTL_16_23 | B43_PIO8_TXCTL_24_31); switch (data_len & 3) { case 3: ctl |= B43_PIO8_TXCTL_16_23 | B43_PIO8_TXCTL_8_15; - wl->tx_tail[0] = data[data_len - 3]; - wl->tx_tail[1] = data[data_len - 2]; - wl->tx_tail[2] = data[data_len - 1]; + tail[0] = data[data_len - 3]; + tail[1] = data[data_len - 2]; + tail[2] = data[data_len - 1]; break; case 2: ctl |= B43_PIO8_TXCTL_8_15; - wl->tx_tail[0] = data[data_len - 2]; - wl->tx_tail[1] = data[data_len - 1]; - wl->tx_tail[2] = 0; + tail[0] = data[data_len - 2]; + tail[1] = data[data_len - 1]; break; case 1: - wl->tx_tail[0] = data[data_len - 1]; - wl->tx_tail[1] = 0; - wl->tx_tail[2] = 0; + tail[0] = data[data_len - 1]; break; } b43_piotx_write32(q, B43_PIO8_TXCTL, ctl); - ssb_block_write(dev->dev, wl->tx_tail, 4, + ssb_block_write(dev->dev, tail, 4, q->mmio_base + B43_PIO8_TXDATA, sizeof(u32)); } @@ -456,6 +459,7 @@ int err; unsigned int hdrlen; struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); + struct b43_txhdr *txhdr = (struct b43_txhdr *)wl->pio_scratchspace; B43_WARN_ON(list_empty(&q->packets_list)); pack = list_entry(q->packets_list.next, @@ -463,7 +467,9 @@ cookie = generate_cookie(q, pack); hdrlen = b43_txhdr_size(dev); - err = b43_generate_txhdr(dev, (u8 *)&wl->txhdr, skb, + BUILD_BUG_ON(sizeof(wl->pio_scratchspace) < sizeof(struct b43_txhdr)); + B43_WARN_ON(sizeof(wl->pio_scratchspace) < hdrlen); + err = b43_generate_txhdr(dev, (u8 *)txhdr, skb, info, cookie); if (err) return err; @@ -477,9 +483,9 @@ pack->skb = skb; if (q->rev >= 8) - pio_tx_frame_4byte_queue(pack, (const u8 *)&wl->txhdr, hdrlen); + pio_tx_frame_4byte_queue(pack, (const u8 *)txhdr, hdrlen); else - pio_tx_frame_2byte_queue(pack, (const u8 *)&wl->txhdr, hdrlen); + pio_tx_frame_2byte_queue(pack, (const u8 *)txhdr, hdrlen); /* Remove it from the list of available packet slots. * It will be put back when we receive the status report. */ @@ -625,8 +631,11 @@ unsigned int i, padding; struct sk_buff *skb; const char *err_msg = NULL; + struct b43_rxhdr_fw4 *rxhdr = + (struct b43_rxhdr_fw4 *)wl->pio_scratchspace; - memset(&wl->rxhdr, 0, sizeof(wl->rxhdr)); + BUILD_BUG_ON(sizeof(wl->pio_scratchspace) < sizeof(*rxhdr)); + memset(rxhdr, 0, sizeof(*rxhdr)); /* Check if we have data and wait for it to get ready. */ if (q->rev >= 8) { @@ -664,16 +673,16 @@ /* Get the preamble (RX header) */ if (q->rev >= 8) { - ssb_block_read(dev->dev, &wl->rxhdr, sizeof(wl->rxhdr), + ssb_block_read(dev->dev, rxhdr, sizeof(*rxhdr), q->mmio_base + B43_PIO8_RXDATA, sizeof(u32)); } else { - ssb_block_read(dev->dev, &wl->rxhdr, sizeof(wl->rxhdr), + ssb_block_read(dev->dev, rxhdr, sizeof(*rxhdr), q->mmio_base + B43_PIO_RXDATA, sizeof(u16)); } /* Sanity checks. */ - len = le16_to_cpu(wl->rxhdr.frame_len); + len = le16_to_cpu(rxhdr->frame_len); if (unlikely(len > 0x700)) { err_msg = "len > 0x700"; goto rx_error; @@ -683,7 +692,7 @@ goto rx_error; } - macstat = le32_to_cpu(wl->rxhdr.mac_status); + macstat = le32_to_cpu(rxhdr->mac_status); if (macstat & B43_RX_MAC_FCSERR) { if (!(q->dev->wl->filter_flags & FIF_FCSFAIL)) { /* Drop frames with failed FCS. */ @@ -708,22 +717,25 @@ q->mmio_base + B43_PIO8_RXDATA, sizeof(u32)); if (len & 3) { + u8 *tail = wl->pio_tailspace; + BUILD_BUG_ON(sizeof(wl->pio_tailspace) < 4); + /* Read the last few bytes. */ - ssb_block_read(dev->dev, wl->rx_tail, 4, + ssb_block_read(dev->dev, tail, 4, q->mmio_base + B43_PIO8_RXDATA, sizeof(u32)); switch (len & 3) { case 3: - skb->data[len + padding - 3] = wl->rx_tail[0]; - skb->data[len + padding - 2] = wl->rx_tail[1]; - skb->data[len + padding - 1] = wl->rx_tail[2]; + skb->data[len + padding - 3] = tail[0]; + skb->data[len + padding - 2] = tail[1]; + skb->data[len + padding - 1] = tail[2]; break; case 2: - skb->data[len + padding - 2] = wl->rx_tail[0]; - skb->data[len + padding - 1] = wl->rx_tail[1]; + skb->data[len + padding - 2] = tail[0]; + skb->data[len + padding - 1] = tail[1]; break; case 1: - skb->data[len + padding - 1] = wl->rx_tail[0]; + skb->data[len + padding - 1] = tail[0]; break; } } @@ -732,15 +744,18 @@ q->mmio_base + B43_PIO_RXDATA, sizeof(u16)); if (len & 1) { + u8 *tail = wl->pio_tailspace; + BUILD_BUG_ON(sizeof(wl->pio_tailspace) < 2); + /* Read the last byte. */ - ssb_block_read(dev->dev, wl->rx_tail, 2, + ssb_block_read(dev->dev, tail, 2, q->mmio_base + B43_PIO_RXDATA, sizeof(u16)); - skb->data[len + padding - 1] = wl->rx_tail[0]; + skb->data[len + padding - 1] = tail[0]; } } - b43_rx(q->dev, skb, &wl->rxhdr); + b43_rx(q->dev, skb, rxhdr); return 1; --- linux-2.6.32.orig/drivers/net/wireless/b43/main.c +++ linux-2.6.32/drivers/net/wireless/b43/main.c @@ -66,8 +66,38 @@ MODULE_AUTHOR("Gábor Stefanik"); MODULE_LICENSE("GPL"); -MODULE_FIRMWARE(B43_SUPPORTED_FIRMWARE_ID); - +MODULE_FIRMWARE("b43/a0g0bsinitvals5.fw"); +MODULE_FIRMWARE("b43/a0g0bsinitvals9.fw"); +MODULE_FIRMWARE("b43/a0g0initvals5.fw"); +MODULE_FIRMWARE("b43/a0g0initvals9.fw"); +MODULE_FIRMWARE("b43/a0g1bsinitvals13.fw"); +MODULE_FIRMWARE("b43/a0g1bsinitvals5.fw"); +MODULE_FIRMWARE("b43/a0g1bsinitvals9.fw"); +MODULE_FIRMWARE("b43/a0g1initvals13.fw"); +MODULE_FIRMWARE("b43/a0g1initvals5.fw"); +MODULE_FIRMWARE("b43/a0g1initvals9.fw"); +MODULE_FIRMWARE("b43/b0g0bsinitvals13.fw"); +MODULE_FIRMWARE("b43/b0g0bsinitvals5.fw"); +MODULE_FIRMWARE("b43/b0g0bsinitvals9.fw"); +MODULE_FIRMWARE("b43/b0g0initvals13.fw"); +MODULE_FIRMWARE("b43/b0g0initvals5.fw"); +MODULE_FIRMWARE("b43/b0g0initvals9.fw"); +MODULE_FIRMWARE("b43/lp0bsinitvals13.fw"); +MODULE_FIRMWARE("b43/lp0bsinitvals14.fw"); +MODULE_FIRMWARE("b43/lp0bsinitvals15.fw"); +MODULE_FIRMWARE("b43/lp0initvals13.fw"); +MODULE_FIRMWARE("b43/lp0initvals14.fw"); +MODULE_FIRMWARE("b43/lp0initvals15.fw"); +MODULE_FIRMWARE("b43/n0absinitvals11.fw"); +MODULE_FIRMWARE("b43/n0bsinitvals11.fw"); +MODULE_FIRMWARE("b43/n0initvals11.fw"); +MODULE_FIRMWARE("b43/pcm5.fw"); +MODULE_FIRMWARE("b43/ucode11.fw"); +MODULE_FIRMWARE("b43/ucode13.fw"); +MODULE_FIRMWARE("b43/ucode14.fw"); +MODULE_FIRMWARE("b43/ucode15.fw"); +MODULE_FIRMWARE("b43/ucode5.fw"); +MODULE_FIRMWARE("b43/ucode9.fw"); static int modparam_bad_frames_preempt; module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); @@ -102,6 +132,9 @@ module_param_named(verbose, b43_modparam_verbose, int, 0644); MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug"); +int b43_modparam_pio = B43_PIO_DEFAULT; +module_param_named(pio, b43_modparam_pio, int, 0644); +MODULE_PARM_DESC(pio, "Use PIO accesses by default: 0=DMA, 1=PIO"); static const struct ssb_device_id b43_ssb_tbl[] = { SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), @@ -628,10 +661,17 @@ static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time) { /* slot_time is in usec. */ - if (dev->phy.type != B43_PHYTYPE_G) + /* This test used to exit for all but a G PHY. */ + if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) return; - b43_write16(dev, 0x684, 510 + slot_time); - b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time); + b43_write16(dev, B43_MMIO_IFSSLOT, 510 + slot_time); + /* Shared memory location 0x0010 is the slot time and should be + * set to slot_time; however, this register is initially 0 and changing + * the value adversely affects the transmit rate for BCM4311 + * devices. Until this behavior is unterstood, delete this step + * + * b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time); + */ } static void b43_short_slot_timing_enable(struct b43_wldev *dev) @@ -845,19 +885,16 @@ if (B43_WARN_ON(!modparam_hwtkip)) return; - mutex_lock(&wl->mutex); - + /* This is only called from the RX path through mac80211, where + * our mutex is already locked. */ + B43_WARN_ON(!mutex_is_locked(&wl->mutex)); dev = wl->current_dev; - if (!dev || b43_status(dev) < B43_STAT_INITIALIZED) - goto out_unlock; + B43_WARN_ON(!dev || b43_status(dev) < B43_STAT_INITIALIZED); keymac_write(dev, index, NULL); /* First zero out mac to avoid race */ rx_tkip_phase1_write(dev, index, iv32, phase1key); keymac_write(dev, index, addr); - -out_unlock: - mutex_unlock(&wl->mutex); } static void do_key_write(struct b43_wldev *dev, @@ -1784,6 +1821,10 @@ dma_reason[0], dma_reason[1], dma_reason[2], dma_reason[3], dma_reason[4], dma_reason[5]); + b43err(dev->wl, "This device does not support DMA " + "on your system. Please use PIO instead.\n"); + /* Fall back to PIO transfers if we get fatal DMA errors! */ + dev->use_pio = 1; b43_controller_restart(dev, "DMA error"); return; } @@ -3960,6 +4001,7 @@ } /* We are ready to run. */ + ieee80211_wake_queues(dev->wl->hw); b43_set_status(dev, B43_STAT_STARTED); /* Start data flow (TX/RX). */ @@ -4350,7 +4392,7 @@ if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) || (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) || - B43_FORCE_PIO) { + dev->use_pio) { dev->__using_pio_transfers = 1; err = b43_pio_init(dev); } else { @@ -4369,8 +4411,6 @@ ieee80211_wake_queues(dev->wl->hw); - ieee80211_wake_queues(dev->wl->hw); - b43_set_status(dev, B43_STAT_INITIALIZED); out: @@ -4820,6 +4860,7 @@ if (!wldev) goto out; + wldev->use_pio = b43_modparam_pio; wldev->dev = dev; wldev->wl = wl; b43_set_status(wldev, B43_STAT_UNINIT); --- linux-2.6.32.orig/drivers/net/wireless/b43/Makefile +++ linux-2.6.32/drivers/net/wireless/b43/Makefile @@ -12,7 +12,7 @@ b43-y += lo.o b43-y += wa.o b43-y += dma.o -b43-$(CONFIG_B43_PIO) += pio.o +b43-y += pio.o b43-y += rfkill.o b43-$(CONFIG_B43_LEDS) += leds.o b43-$(CONFIG_B43_PCMCIA) += pcmcia.o --- linux-2.6.32.orig/drivers/net/wireless/wl12xx/wl1251_debugfs.c +++ linux-2.6.32/drivers/net/wireless/wl12xx/wl1251_debugfs.c @@ -443,7 +443,8 @@ void wl1251_debugfs_reset(struct wl1251 *wl) { - memset(wl->stats.fw_stats, 0, sizeof(*wl->stats.fw_stats)); + if (wl->stats.fw_stats != NULL) + memset(wl->stats.fw_stats, 0, sizeof(*wl->stats.fw_stats)); wl->stats.retry_count = 0; wl->stats.excessive_retries = 0; } --- linux-2.6.32.orig/drivers/net/wireless/b43legacy/rfkill.c +++ linux-2.6.32/drivers/net/wireless/b43legacy/rfkill.c @@ -34,6 +34,13 @@ & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK)) return 1; } else { + /* To prevent CPU fault on PPC, do not read a register + * unless the interface is started; however, on resume + * for hibernation, this routine is entered early. When + * that happens, unconditionally return TRUE. + */ + if (b43legacy_status(dev) < B43legacy_STAT_STARTED) + return 1; if (b43legacy_read16(dev, B43legacy_MMIO_RADIO_HWENABLED_LO) & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK) return 1; --- linux-2.6.32.orig/drivers/net/wireless/b43legacy/main.c +++ linux-2.6.32/drivers/net/wireless/b43legacy/main.c @@ -2921,6 +2921,7 @@ goto out; } /* We are ready to run. */ + ieee80211_wake_queues(dev->wl->hw); b43legacy_set_status(dev, B43legacy_STAT_STARTED); /* Start data flow (TX/RX) */ @@ -3341,6 +3342,7 @@ b43legacy_security_init(dev); b43legacy_rng_init(wl); + ieee80211_wake_queues(dev->wl->hw); b43legacy_set_status(dev, B43legacy_STAT_INITIALIZED); b43legacy_leds_init(dev); --- linux-2.6.32.orig/drivers/net/wireless/rtl818x/rtl8187_rfkill.c +++ linux-2.6.32/drivers/net/wireless/rtl818x/rtl8187_rfkill.c @@ -25,10 +25,10 @@ u8 gpio; gpio = rtl818x_ioread8(priv, &priv->map->GPIO0); - rtl818x_iowrite8(priv, &priv->map->GPIO0, gpio & ~0x02); + rtl818x_iowrite8(priv, &priv->map->GPIO0, gpio & ~priv->rfkill_mask); gpio = rtl818x_ioread8(priv, &priv->map->GPIO1); - return gpio & 0x02; + return gpio & priv->rfkill_mask; } void rtl8187_rfkill_init(struct ieee80211_hw *hw) --- linux-2.6.32.orig/drivers/net/wireless/rtl818x/rtl8187_dev.c +++ linux-2.6.32/drivers/net/wireless/rtl818x/rtl8187_dev.c @@ -65,6 +65,7 @@ /* Sitecom */ {USB_DEVICE(0x0df6, 0x000d), .driver_info = DEVICE_RTL8187}, {USB_DEVICE(0x0df6, 0x0028), .driver_info = DEVICE_RTL8187B}, + {USB_DEVICE(0x0df6, 0x0029), .driver_info = DEVICE_RTL8187B}, /* Sphairon Access Systems GmbH */ {USB_DEVICE(0x114B, 0x0150), .driver_info = DEVICE_RTL8187}, /* Dick Smith Electronics */ @@ -1329,6 +1330,7 @@ struct ieee80211_channel *channel; const char *chip_name; u16 txpwr, reg; + u16 product_id = le16_to_cpu(udev->descriptor.idProduct); int err, i; dev = ieee80211_alloc_hw(sizeof(*priv), &rtl8187_ops); @@ -1488,6 +1490,13 @@ (*channel++).hw_value = txpwr & 0xFF; (*channel++).hw_value = txpwr >> 8; } + /* Handle the differing rfkill GPIO bit in different models */ + priv->rfkill_mask = RFKILL_MASK_8187_89_97; + if (product_id == 0x8197 || product_id == 0x8198) { + eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_SELECT_GPIO, ®); + if (reg & 0xFF00) + priv->rfkill_mask = RFKILL_MASK_8198; + } /* * XXX: Once this driver supports anything that requires @@ -1516,9 +1525,9 @@ mutex_init(&priv->conf_mutex); skb_queue_head_init(&priv->b_tx_status.queue); - printk(KERN_INFO "%s: hwaddr %pM, %s V%d + %s\n", + printk(KERN_INFO "%s: hwaddr %pM, %s V%d + %s, rfkill mask %d\n", wiphy_name(dev->wiphy), dev->wiphy->perm_addr, - chip_name, priv->asic_rev, priv->rf->name); + chip_name, priv->asic_rev, priv->rf->name, priv->rfkill_mask); #ifdef CONFIG_RTL8187_LEDS eeprom_93cx6_read(&eeprom, 0x3F, ®); --- linux-2.6.32.orig/drivers/net/wireless/rtl818x/rtl8187.h +++ linux-2.6.32/drivers/net/wireless/rtl818x/rtl8187.h @@ -23,6 +23,7 @@ #define RTL8187_EEPROM_TXPWR_CHAN_1 0x16 /* 3 channels */ #define RTL8187_EEPROM_TXPWR_CHAN_6 0x1B /* 2 channels */ #define RTL8187_EEPROM_TXPWR_CHAN_4 0x3D /* 2 channels */ +#define RTL8187_EEPROM_SELECT_GPIO 0x3B #define RTL8187_REQT_READ 0xC0 #define RTL8187_REQT_WRITE 0x40 @@ -31,6 +32,9 @@ #define RTL8187_MAX_RX 0x9C4 +#define RFKILL_MASK_8187_89_97 0x2 +#define RFKILL_MASK_8198 0x4 + struct rtl8187_rx_info { struct urb *urb; struct ieee80211_hw *dev; @@ -123,6 +127,7 @@ u8 noise; u8 slot_time; u8 aifsn[4]; + u8 rfkill_mask; struct { __le64 buf; struct sk_buff_head queue; --- linux-2.6.32.orig/drivers/net/wireless/p54/p54pci.c +++ linux-2.6.32/drivers/net/wireless/p54/p54pci.c @@ -157,6 +157,14 @@ skb_tail_pointer(skb), priv->common.rx_mtu + 32, PCI_DMA_FROMDEVICE); + + if (pci_dma_mapping_error(priv->pdev, mapping)) { + dev_kfree_skb_any(skb); + dev_err(&priv->pdev->dev, + "RX DMA Mapping error\n"); + break; + } + desc->host_addr = cpu_to_le32(mapping); desc->device_addr = 0; // FIXME: necessary? desc->len = cpu_to_le16(priv->common.rx_mtu + 32); @@ -197,6 +205,14 @@ i %= ring_limit; continue; } + + if (unlikely(len > priv->common.rx_mtu)) { + if (net_ratelimit()) + dev_err(&priv->pdev->dev, "rx'd frame size " + "exceeds length threshold.\n"); + + len = priv->common.rx_mtu; + } skb_put(skb, len); if (p54_rx(dev, skb)) { @@ -229,7 +245,7 @@ u32 idx, i; i = (*index) % ring_limit; - (*index) = idx = le32_to_cpu(ring_control->device_idx[1]); + (*index) = idx = le32_to_cpu(ring_control->device_idx[ring_index]); idx %= ring_limit; while (i != idx) { @@ -317,14 +333,20 @@ u32 device_idx, idx, i; spin_lock_irqsave(&priv->lock, flags); - device_idx = le32_to_cpu(ring_control->device_idx[1]); idx = le32_to_cpu(ring_control->host_idx[1]); i = idx % ARRAY_SIZE(ring_control->tx_data); - priv->tx_buf_data[i] = skb; mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); + if (pci_dma_mapping_error(priv->pdev, mapping)) { + spin_unlock_irqrestore(&priv->lock, flags); + p54_free_skb(dev, skb); + dev_err(&priv->pdev->dev, "TX DMA mapping error\n"); + return ; + } + priv->tx_buf_data[i] = skb; + desc = &ring_control->tx_data[i]; desc->host_addr = cpu_to_le32(mapping); desc->device_addr = ((struct p54_hdr *)skb->data)->req_id; --- linux-2.6.32.orig/drivers/net/wireless/p54/p54usb.c +++ linux-2.6.32/drivers/net/wireless/p54/p54usb.c @@ -36,6 +36,7 @@ /* Version 1 devices (pci chip + net2280) */ {USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */ {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */ + {USB_DEVICE(0x07aa, 0x001c)}, /* Corega CG-WLUSB2GT */ {USB_DEVICE(0x083a, 0x4501)}, /* Accton 802.11g WN4501 USB */ {USB_DEVICE(0x083a, 0x4502)}, /* Siemens Gigaset USB Adapter */ {USB_DEVICE(0x083a, 0x5501)}, /* Phillips CPWUA054 */ @@ -60,12 +61,13 @@ {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */ {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */ {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */ + {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */ {USB_DEVICE(0x0846, 0x4240)}, /* Netgear WG111 (v2) */ {USB_DEVICE(0x0915, 0x2000)}, /* Cohiba Proto board */ {USB_DEVICE(0x0915, 0x2002)}, /* Cohiba Proto board */ {USB_DEVICE(0x0baf, 0x0118)}, /* U.S. Robotics U5 802.11g Adapter*/ {USB_DEVICE(0x0bf8, 0x1009)}, /* FUJITSU E-5400 USB D1700*/ - {USB_DEVICE(0x0cde, 0x0006)}, /* Medion MD40900 */ +// DUPE {USB_DEVICE(0x0cde, 0x0006)}, /* Medion MD40900 */ {USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */ {USB_DEVICE(0x0cde, 0x0015)}, /* Zcomax XG-705A */ {USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */ --- linux-2.6.32.orig/drivers/net/wireless/p54/eeprom.c +++ linux-2.6.32/drivers/net/wireless/p54/eeprom.c @@ -126,7 +126,7 @@ int ret = -ENOMEM; if ((!list->entries) || (!list->band_channel_num[band])) - return 0; + return -EINVAL; tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); if (!tmp) @@ -158,6 +158,7 @@ (list->channels[i].data & CHAN_HAS_CURVE ? "" : " [curve data]"), list->channels[i].index, list->channels[i].freq); + continue; } tmp->channels[j].band = list->channels[i].band; @@ -165,7 +166,16 @@ j++; } - tmp->n_channels = list->band_channel_num[band]; + if (j == 0) { + printk(KERN_ERR "%s: Disabling totally damaged %s band.\n", + wiphy_name(dev->wiphy), (band == IEEE80211_BAND_2GHZ) ? + "2 GHz" : "5 GHz"); + + ret = -ENODATA; + goto err_out; + } + + tmp->n_channels = j; old = priv->band_table[band]; priv->band_table[band] = tmp; if (old) { @@ -228,13 +238,13 @@ struct p54_common *priv = dev->priv; struct p54_channel_list *list; unsigned int i, j, max_channel_num; - int ret = -ENOMEM; + int ret = 0; u16 freq; if ((priv->iq_autocal_len != priv->curve_data->entries) || (priv->iq_autocal_len != priv->output_limit->entries)) - printk(KERN_ERR "%s: EEPROM is damaged... you may not be able" - "to use all channels with this device.\n", + printk(KERN_ERR "%s: Unsupported or damaged EEPROM detected. " + "You may not be able to use all channels.\n", wiphy_name(dev->wiphy)); max_channel_num = max_t(unsigned int, priv->output_limit->entries, @@ -243,8 +253,10 @@ priv->curve_data->entries); list = kzalloc(sizeof(*list), GFP_KERNEL); - if (!list) + if (!list) { + ret = -ENOMEM; goto free; + } list->max_entries = max_channel_num; list->channels = kzalloc(sizeof(struct p54_channel_entry) * @@ -282,13 +294,8 @@ p54_compare_channels, NULL); for (i = 0, j = 0; i < IEEE80211_NUM_BANDS; i++) { - if (list->band_channel_num[i]) { - ret = p54_generate_band(dev, list, i); - if (ret) - goto free; - + if (p54_generate_band(dev, list, i) == 0) j++; - } } if (j == 0) { /* no useable band available. */ --- linux-2.6.32.orig/drivers/net/wireless/p54/txrx.c +++ linux-2.6.32/drivers/net/wireless/p54/txrx.c @@ -186,7 +186,7 @@ struct ieee80211_tx_queue_stats *queue; unsigned long flags; - if (WARN_ON(p54_queue > P54_QUEUE_NUM)) + if (WARN_ON(p54_queue >= P54_QUEUE_NUM)) return -EINVAL; queue = &priv->tx_stats[p54_queue]; --- linux-2.6.32.orig/drivers/net/tulip/tulip_core.c +++ linux-2.6.32/drivers/net/tulip/tulip_core.c @@ -228,8 +228,12 @@ { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 }, { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 }, + /* Ubuntu: On non-sparc, this seems to be handled better by the + * dmfe driver. */ +#ifdef __sparc__ { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, +#endif { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 }, { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, --- linux-2.6.32.orig/drivers/net/e1000e/ich8lan.c +++ linux-2.6.32/drivers/net/e1000e/ich8lan.c @@ -3209,6 +3209,7 @@ u32 phy_ctrl; switch (hw->mac.type) { + case e1000_ich8lan: case e1000_ich9lan: case e1000_ich10lan: case e1000_pchlan: --- linux-2.6.32.orig/drivers/net/e1000e/netdev.c +++ linux-2.6.32/drivers/net/e1000e/netdev.c @@ -482,14 +482,24 @@ length = le16_to_cpu(rx_desc->length); - /* !EOP means multiple descriptors were used to store a single - * packet, also make sure the frame isn't just CRC only */ - if (!(status & E1000_RXD_STAT_EOP) || (length <= 4)) { + /* + * !EOP means multiple descriptors were used to store a single + * packet, if that's the case we need to toss it. In fact, we + * need to toss every packet with the EOP bit clear and the + * next frame that _does_ have the EOP bit set, as it is by + * definition only a frame fragment + */ + if (unlikely(!(status & E1000_RXD_STAT_EOP))) + adapter->flags2 |= FLAG2_IS_DISCARDING; + + if (adapter->flags2 & FLAG2_IS_DISCARDING) { /* All receives must fit into a single buffer */ e_dbg("%s: Receive packet consumed multiple buffers\n", netdev->name); /* recycle */ buffer_info->skb = skb; + if (status & E1000_RXD_STAT_EOP) + adapter->flags2 &= ~FLAG2_IS_DISCARDING; goto next_desc; } @@ -655,6 +665,8 @@ i = 0; } + if (i == tx_ring->next_to_use) + break; eop = tx_ring->buffer_info[i].next_to_watch; eop_desc = E1000_TX_DESC(*tx_ring, eop); } @@ -747,10 +759,16 @@ PCI_DMA_FROMDEVICE); buffer_info->dma = 0; - if (!(staterr & E1000_RXD_STAT_EOP)) { + /* see !EOP comment in other rx routine */ + if (!(staterr & E1000_RXD_STAT_EOP)) + adapter->flags2 |= FLAG2_IS_DISCARDING; + + if (adapter->flags2 & FLAG2_IS_DISCARDING) { e_dbg("%s: Packet Split buffers didn't pick up the " "full packet\n", netdev->name); dev_kfree_skb_irq(skb); + if (staterr & E1000_RXD_STAT_EOP) + adapter->flags2 &= ~FLAG2_IS_DISCARDING; goto next_desc; } @@ -1120,6 +1138,7 @@ rx_ring->next_to_clean = 0; rx_ring->next_to_use = 0; + adapter->flags2 &= ~FLAG2_IS_DISCARDING; writel(0, adapter->hw.hw_addr + rx_ring->head); writel(0, adapter->hw.hw_addr + rx_ring->tail); @@ -2330,18 +2349,6 @@ rctl &= ~E1000_RCTL_SZ_4096; rctl |= E1000_RCTL_BSEX; switch (adapter->rx_buffer_len) { - case 256: - rctl |= E1000_RCTL_SZ_256; - rctl &= ~E1000_RCTL_BSEX; - break; - case 512: - rctl |= E1000_RCTL_SZ_512; - rctl &= ~E1000_RCTL_BSEX; - break; - case 1024: - rctl |= E1000_RCTL_SZ_1024; - rctl &= ~E1000_RCTL_BSEX; - break; case 2048: default: rctl |= E1000_RCTL_SZ_2048; @@ -4321,13 +4328,7 @@ * fragmented skbs */ - if (max_frame <= 256) - adapter->rx_buffer_len = 256; - else if (max_frame <= 512) - adapter->rx_buffer_len = 512; - else if (max_frame <= 1024) - adapter->rx_buffer_len = 1024; - else if (max_frame <= 2048) + if (max_frame <= 2048) adapter->rx_buffer_len = 2048; else adapter->rx_buffer_len = 4096; @@ -5361,6 +5362,7 @@ { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_C), board_ich8lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_M), board_ich8lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_M_AMT), board_ich8lan }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_82567V_3), board_ich8lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE), board_ich9lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_G), board_ich9lan }, @@ -5371,6 +5373,7 @@ { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V_2), board_ich9lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LM), board_ich9lan }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan }, --- linux-2.6.32.orig/drivers/net/e1000e/e1000.h +++ linux-2.6.32/drivers/net/e1000e/e1000.h @@ -417,6 +417,7 @@ /* CRC Stripping defines */ #define FLAG2_CRC_STRIPPING (1 << 0) #define FLAG2_HAS_PHY_WAKEUP (1 << 1) +#define FLAG2_IS_DISCARDING (1 << 2) #define E1000_RX_DESC_PS(R, i) \ (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) --- linux-2.6.32.orig/drivers/net/e1000e/hw.h +++ linux-2.6.32/drivers/net/e1000e/hw.h @@ -356,6 +356,7 @@ #define E1000_DEV_ID_80003ES2LAN_COPPER_SPT 0x10BA #define E1000_DEV_ID_80003ES2LAN_SERDES_SPT 0x10BB +#define E1000_DEV_ID_ICH8_82567V_3 0x1501 #define E1000_DEV_ID_ICH8_IGP_M_AMT 0x1049 #define E1000_DEV_ID_ICH8_IGP_AMT 0x104A #define E1000_DEV_ID_ICH8_IGP_C 0x104B @@ -368,6 +369,7 @@ #define E1000_DEV_ID_ICH9_IGP_M_AMT 0x10F5 #define E1000_DEV_ID_ICH9_IGP_M 0x10BF #define E1000_DEV_ID_ICH9_IGP_M_V 0x10CB +#define E1000_DEV_ID_ICH9_IGP_M_V_2 0x10BE #define E1000_DEV_ID_ICH9_IGP_C 0x294C #define E1000_DEV_ID_ICH9_IFE 0x10C0 #define E1000_DEV_ID_ICH9_IFE_GT 0x10C3 --- linux-2.6.32.orig/drivers/net/igb/igb_ethtool.c +++ linux-2.6.32/drivers/net/igb/igb_ethtool.c @@ -44,78 +44,94 @@ int stat_offset; }; -#define IGB_STAT(m) FIELD_SIZEOF(struct igb_adapter, m), \ - offsetof(struct igb_adapter, m) +#define IGB_STAT(_name, _stat) { \ + .stat_string = _name, \ + .sizeof_stat = FIELD_SIZEOF(struct igb_adapter, _stat), \ + .stat_offset = offsetof(struct igb_adapter, _stat) \ +} static const struct igb_stats igb_gstrings_stats[] = { - { "rx_packets", IGB_STAT(stats.gprc) }, - { "tx_packets", IGB_STAT(stats.gptc) }, - { "rx_bytes", IGB_STAT(stats.gorc) }, - { "tx_bytes", IGB_STAT(stats.gotc) }, - { "rx_broadcast", IGB_STAT(stats.bprc) }, - { "tx_broadcast", IGB_STAT(stats.bptc) }, - { "rx_multicast", IGB_STAT(stats.mprc) }, - { "tx_multicast", IGB_STAT(stats.mptc) }, - { "rx_errors", IGB_STAT(net_stats.rx_errors) }, - { "tx_errors", IGB_STAT(net_stats.tx_errors) }, - { "tx_dropped", IGB_STAT(net_stats.tx_dropped) }, - { "multicast", IGB_STAT(stats.mprc) }, - { "collisions", IGB_STAT(stats.colc) }, - { "rx_length_errors", IGB_STAT(net_stats.rx_length_errors) }, - { "rx_over_errors", IGB_STAT(net_stats.rx_over_errors) }, - { "rx_crc_errors", IGB_STAT(stats.crcerrs) }, - { "rx_frame_errors", IGB_STAT(net_stats.rx_frame_errors) }, - { "rx_no_buffer_count", IGB_STAT(stats.rnbc) }, - { "rx_queue_drop_packet_count", IGB_STAT(net_stats.rx_fifo_errors) }, - { "rx_missed_errors", IGB_STAT(stats.mpc) }, - { "tx_aborted_errors", IGB_STAT(stats.ecol) }, - { "tx_carrier_errors", IGB_STAT(stats.tncrs) }, - { "tx_fifo_errors", IGB_STAT(net_stats.tx_fifo_errors) }, - { "tx_heartbeat_errors", IGB_STAT(net_stats.tx_heartbeat_errors) }, - { "tx_window_errors", IGB_STAT(stats.latecol) }, - { "tx_abort_late_coll", IGB_STAT(stats.latecol) }, - { "tx_deferred_ok", IGB_STAT(stats.dc) }, - { "tx_single_coll_ok", IGB_STAT(stats.scc) }, - { "tx_multi_coll_ok", IGB_STAT(stats.mcc) }, - { "tx_timeout_count", IGB_STAT(tx_timeout_count) }, - { "tx_restart_queue", IGB_STAT(restart_queue) }, - { "rx_long_length_errors", IGB_STAT(stats.roc) }, - { "rx_short_length_errors", IGB_STAT(stats.ruc) }, - { "rx_align_errors", IGB_STAT(stats.algnerrc) }, - { "tx_tcp_seg_good", IGB_STAT(stats.tsctc) }, - { "tx_tcp_seg_failed", IGB_STAT(stats.tsctfc) }, - { "rx_flow_control_xon", IGB_STAT(stats.xonrxc) }, - { "rx_flow_control_xoff", IGB_STAT(stats.xoffrxc) }, - { "tx_flow_control_xon", IGB_STAT(stats.xontxc) }, - { "tx_flow_control_xoff", IGB_STAT(stats.xofftxc) }, - { "rx_long_byte_count", IGB_STAT(stats.gorc) }, - { "rx_csum_offload_good", IGB_STAT(hw_csum_good) }, - { "rx_csum_offload_errors", IGB_STAT(hw_csum_err) }, - { "tx_dma_out_of_sync", IGB_STAT(stats.doosync) }, - { "alloc_rx_buff_failed", IGB_STAT(alloc_rx_buff_failed) }, - { "tx_smbus", IGB_STAT(stats.mgptc) }, - { "rx_smbus", IGB_STAT(stats.mgprc) }, - { "dropped_smbus", IGB_STAT(stats.mgpdc) }, + IGB_STAT("rx_packets", stats.gprc), + IGB_STAT("tx_packets", stats.gptc), + IGB_STAT("rx_bytes", stats.gorc), + IGB_STAT("tx_bytes", stats.gotc), + IGB_STAT("rx_broadcast", stats.bprc), + IGB_STAT("tx_broadcast", stats.bptc), + IGB_STAT("rx_multicast", stats.mprc), + IGB_STAT("tx_multicast", stats.mptc), + IGB_STAT("multicast", stats.mprc), + IGB_STAT("collisions", stats.colc), + IGB_STAT("rx_crc_errors", stats.crcerrs), + IGB_STAT("rx_no_buffer_count", stats.rnbc), + IGB_STAT("rx_missed_errors", stats.mpc), + IGB_STAT("tx_aborted_errors", stats.ecol), + IGB_STAT("tx_carrier_errors", stats.tncrs), + IGB_STAT("tx_window_errors", stats.latecol), + IGB_STAT("tx_abort_late_coll", stats.latecol), + IGB_STAT("tx_deferred_ok", stats.dc), + IGB_STAT("tx_single_coll_ok", stats.scc), + IGB_STAT("tx_multi_coll_ok", stats.mcc), + IGB_STAT("tx_timeout_count", tx_timeout_count), + IGB_STAT("rx_long_length_errors", stats.roc), + IGB_STAT("rx_short_length_errors", stats.ruc), + IGB_STAT("rx_align_errors", stats.algnerrc), + IGB_STAT("tx_tcp_seg_good", stats.tsctc), + IGB_STAT("tx_tcp_seg_failed", stats.tsctfc), + IGB_STAT("rx_flow_control_xon", stats.xonrxc), + IGB_STAT("rx_flow_control_xoff", stats.xoffrxc), + IGB_STAT("tx_flow_control_xon", stats.xontxc), + IGB_STAT("tx_flow_control_xoff", stats.xofftxc), + IGB_STAT("rx_long_byte_count", stats.gorc), + IGB_STAT("tx_dma_out_of_sync", stats.doosync), + IGB_STAT("tx_smbus", stats.mgptc), + IGB_STAT("rx_smbus", stats.mgprc), + IGB_STAT("dropped_smbus", stats.mgpdc), +}; + +#define IGB_NETDEV_STAT(_net_stat) { \ + .stat_string = __stringify(_net_stat), \ + .sizeof_stat = FIELD_SIZEOF(struct net_device_stats, _net_stat), \ + .stat_offset = offsetof(struct net_device_stats, _net_stat) \ +} +static const struct igb_stats igb_gstrings_net_stats[] = { + IGB_NETDEV_STAT(rx_errors), + IGB_NETDEV_STAT(tx_errors), + IGB_NETDEV_STAT(tx_dropped), + IGB_NETDEV_STAT(rx_length_errors), + IGB_NETDEV_STAT(rx_over_errors), + IGB_NETDEV_STAT(rx_frame_errors), + IGB_NETDEV_STAT(rx_fifo_errors), + IGB_NETDEV_STAT(tx_fifo_errors), + IGB_NETDEV_STAT(tx_heartbeat_errors) }; -#define IGB_QUEUE_STATS_LEN \ - (((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues)* \ - (sizeof(struct igb_rx_queue_stats) / sizeof(u64))) + \ - ((((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues) * \ - (sizeof(struct igb_tx_queue_stats) / sizeof(u64)))) #define IGB_GLOBAL_STATS_LEN \ - sizeof(igb_gstrings_stats) / sizeof(struct igb_stats) -#define IGB_STATS_LEN (IGB_GLOBAL_STATS_LEN + IGB_QUEUE_STATS_LEN) + (sizeof(igb_gstrings_stats) / sizeof(struct igb_stats)) +#define IGB_NETDEV_STATS_LEN \ + (sizeof(igb_gstrings_net_stats) / sizeof(struct igb_stats)) +#define IGB_RX_QUEUE_STATS_LEN \ + (sizeof(struct igb_rx_queue_stats) / sizeof(u64)) +#define IGB_TX_QUEUE_STATS_LEN \ + (sizeof(struct igb_tx_queue_stats) / sizeof(u64)) +#define IGB_QUEUE_STATS_LEN \ + ((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues * \ + IGB_RX_QUEUE_STATS_LEN) + \ + (((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues * \ + IGB_TX_QUEUE_STATS_LEN)) +#define IGB_STATS_LEN \ + (IGB_GLOBAL_STATS_LEN + IGB_NETDEV_STATS_LEN + IGB_QUEUE_STATS_LEN) + static const char igb_gstrings_test[][ETH_GSTRING_LEN] = { "Register test (offline)", "Eeprom test (offline)", "Interrupt test (offline)", "Loopback test (offline)", "Link test (on/offline)" }; -#define IGB_TEST_LEN sizeof(igb_gstrings_test) / ETH_GSTRING_LEN +#define IGB_TEST_LEN (sizeof(igb_gstrings_test) / ETH_GSTRING_LEN) static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) { struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; + u32 status; if (hw->phy.media_type == e1000_media_type_copper) { @@ -150,17 +166,20 @@ ecmd->transceiver = XCVR_INTERNAL; - if (rd32(E1000_STATUS) & E1000_STATUS_LU) { + status = rd32(E1000_STATUS); - adapter->hw.mac.ops.get_speed_and_duplex(hw, - &adapter->link_speed, - &adapter->link_duplex); - ecmd->speed = adapter->link_speed; + if (status & E1000_STATUS_LU) { - /* unfortunately FULL_DUPLEX != DUPLEX_FULL - * and HALF_DUPLEX != DUPLEX_HALF */ + if ((status & E1000_STATUS_SPEED_1000) || + hw->phy.media_type != e1000_media_type_copper) + ecmd->speed = SPEED_1000; + else if (status & E1000_STATUS_SPEED_100) + ecmd->speed = SPEED_100; + else + ecmd->speed = SPEED_10; - if (adapter->link_duplex == FULL_DUPLEX) + if ((status & E1000_STATUS_FD) || + hw->phy.media_type != e1000_media_type_copper) ecmd->duplex = DUPLEX_FULL; else ecmd->duplex = DUPLEX_HALF; @@ -251,8 +270,9 @@ if (netif_running(adapter->netdev)) { igb_down(adapter); igb_up(adapter); - } else + } else { igb_reset(adapter); + } } else { if (pause->rx_pause && pause->tx_pause) hw->fc.requested_mode = e1000_fc_full; @@ -276,17 +296,20 @@ static u32 igb_get_rx_csum(struct net_device *netdev) { struct igb_adapter *adapter = netdev_priv(netdev); - return !(adapter->flags & IGB_FLAG_RX_CSUM_DISABLED); + return !!(adapter->rx_ring[0].flags & IGB_RING_FLAG_RX_CSUM); } static int igb_set_rx_csum(struct net_device *netdev, u32 data) { struct igb_adapter *adapter = netdev_priv(netdev); + int i; - if (data) - adapter->flags &= ~IGB_FLAG_RX_CSUM_DISABLED; - else - adapter->flags |= IGB_FLAG_RX_CSUM_DISABLED; + for (i = 0; i < adapter->num_rx_queues; i++) { + if (data) + adapter->rx_ring[i].flags |= IGB_RING_FLAG_RX_CSUM; + else + adapter->rx_ring[i].flags &= ~IGB_RING_FLAG_RX_CSUM; + } return 0; } @@ -302,7 +325,7 @@ if (data) { netdev->features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); - if (adapter->hw.mac.type == e1000_82576) + if (adapter->hw.mac.type >= e1000_82576) netdev->features |= NETIF_F_SCTP_CSUM; } else { netdev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | @@ -496,19 +519,10 @@ regs_buff[119] = adapter->stats.scvpc; regs_buff[120] = adapter->stats.hrmpc; - /* These should probably be added to e1000_regs.h instead */ - #define E1000_PSRTYPE_REG(_i) (0x05480 + ((_i) * 4)) - #define E1000_IP4AT_REG(_i) (0x05840 + ((_i) * 8)) - #define E1000_IP6AT_REG(_i) (0x05880 + ((_i) * 4)) - #define E1000_WUPM_REG(_i) (0x05A00 + ((_i) * 4)) - #define E1000_FFMT_REG(_i) (0x09000 + ((_i) * 8)) - #define E1000_FFVT_REG(_i) (0x09800 + ((_i) * 8)) - #define E1000_FFLT_REG(_i) (0x05F00 + ((_i) * 8)) - for (i = 0; i < 4; i++) regs_buff[121 + i] = rd32(E1000_SRRCTL(i)); for (i = 0; i < 4; i++) - regs_buff[125 + i] = rd32(E1000_PSRTYPE_REG(i)); + regs_buff[125 + i] = rd32(E1000_PSRTYPE(i)); for (i = 0; i < 4; i++) regs_buff[129 + i] = rd32(E1000_RDBAL(i)); for (i = 0; i < 4; i++) @@ -733,17 +747,17 @@ struct igb_adapter *adapter = netdev_priv(netdev); struct igb_ring *temp_ring; int i, err = 0; - u32 new_rx_count, new_tx_count; + u16 new_rx_count, new_tx_count; if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending)) return -EINVAL; - new_rx_count = max(ring->rx_pending, (u32)IGB_MIN_RXD); - new_rx_count = min(new_rx_count, (u32)IGB_MAX_RXD); + new_rx_count = min_t(u32, ring->rx_pending, IGB_MAX_RXD); + new_rx_count = max_t(u16, new_rx_count, IGB_MIN_RXD); new_rx_count = ALIGN(new_rx_count, REQ_RX_DESCRIPTOR_MULTIPLE); - new_tx_count = max(ring->tx_pending, (u32)IGB_MIN_TXD); - new_tx_count = min(new_tx_count, (u32)IGB_MAX_TXD); + new_tx_count = min_t(u32, ring->tx_pending, IGB_MAX_TXD); + new_tx_count = max_t(u16, new_tx_count, IGB_MIN_TXD); new_tx_count = ALIGN(new_tx_count, REQ_TX_DESCRIPTOR_MULTIPLE); if ((new_tx_count == adapter->tx_ring_count) && @@ -788,7 +802,7 @@ for (i = 0; i < adapter->num_tx_queues; i++) { temp_ring[i].count = new_tx_count; - err = igb_setup_tx_resources(adapter, &temp_ring[i]); + err = igb_setup_tx_resources(&temp_ring[i]); if (err) { while (i) { i--; @@ -813,7 +827,7 @@ for (i = 0; i < adapter->num_rx_queues; i++) { temp_ring[i].count = new_rx_count; - err = igb_setup_rx_resources(adapter, &temp_ring[i]); + err = igb_setup_rx_resources(&temp_ring[i]); if (err) { while (i) { i--; @@ -867,6 +881,49 @@ #define TABLE64_TEST_LO 5 #define TABLE64_TEST_HI 6 +/* 82580 reg test */ +static struct igb_reg_test reg_test_82580[] = { + { E1000_FCAL, 0x100, 1, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_FCAH, 0x100, 1, PATTERN_TEST, 0x0000FFFF, 0xFFFFFFFF }, + { E1000_FCT, 0x100, 1, PATTERN_TEST, 0x0000FFFF, 0xFFFFFFFF }, + { E1000_VET, 0x100, 1, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_RDBAL(0), 0x100, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, + { E1000_RDBAH(0), 0x100, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_RDLEN(0), 0x100, 4, PATTERN_TEST, 0x000FFFF0, 0x000FFFFF }, + { E1000_RDBAL(4), 0x40, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, + { E1000_RDBAH(4), 0x40, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_RDLEN(4), 0x40, 4, PATTERN_TEST, 0x000FFFF0, 0x000FFFFF }, + /* RDH is read-only for 82580, only test RDT. */ + { E1000_RDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, + { E1000_RDT(4), 0x40, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, + { E1000_FCRTH, 0x100, 1, PATTERN_TEST, 0x0000FFF0, 0x0000FFF0 }, + { E1000_FCTTV, 0x100, 1, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, + { E1000_TIPG, 0x100, 1, PATTERN_TEST, 0x3FFFFFFF, 0x3FFFFFFF }, + { E1000_TDBAL(0), 0x100, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, + { E1000_TDBAH(0), 0x100, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_TDLEN(0), 0x100, 4, PATTERN_TEST, 0x000FFFF0, 0x000FFFFF }, + { E1000_TDBAL(4), 0x40, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, + { E1000_TDBAH(4), 0x40, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_TDLEN(4), 0x40, 4, PATTERN_TEST, 0x000FFFF0, 0x000FFFFF }, + { E1000_TDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, + { E1000_TDT(4), 0x40, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, + { E1000_RCTL, 0x100, 1, SET_READ_TEST, 0xFFFFFFFF, 0x00000000 }, + { E1000_RCTL, 0x100, 1, SET_READ_TEST, 0x04CFB0FE, 0x003FFFFB }, + { E1000_RCTL, 0x100, 1, SET_READ_TEST, 0x04CFB0FE, 0xFFFFFFFF }, + { E1000_TCTL, 0x100, 1, SET_READ_TEST, 0xFFFFFFFF, 0x00000000 }, + { E1000_RA, 0, 16, TABLE64_TEST_LO, + 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_RA, 0, 16, TABLE64_TEST_HI, + 0x83FFFFFF, 0xFFFFFFFF }, + { E1000_RA2, 0, 8, TABLE64_TEST_LO, + 0xFFFFFFFF, 0xFFFFFFFF }, + { E1000_RA2, 0, 8, TABLE64_TEST_HI, + 0x83FFFFFF, 0xFFFFFFFF }, + { E1000_MTA, 0, 128, TABLE32_TEST, + 0xFFFFFFFF, 0xFFFFFFFF }, + { 0, 0, 0, 0 } +}; + /* 82576 reg test */ static struct igb_reg_test reg_test_82576[] = { { E1000_FCAL, 0x100, 1, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, @@ -944,7 +1001,7 @@ { struct e1000_hw *hw = &adapter->hw; u32 pat, val; - u32 _test[] = + static const u32 _test[] = {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF}; for (pat = 0; pat < ARRAY_SIZE(_test); pat++) { wr32(reg, (_test[pat] & write)); @@ -957,6 +1014,7 @@ return 1; } } + return 0; } @@ -974,6 +1032,7 @@ *data = reg; return 1; } + return 0; } @@ -996,14 +1055,18 @@ u32 value, before, after; u32 i, toggle; - toggle = 0x7FFFF3FF; - switch (adapter->hw.mac.type) { + case e1000_82580: + test = reg_test_82580; + toggle = 0x7FEFF3FF; + break; case e1000_82576: test = reg_test_82576; + toggle = 0x7FFFF3FF; break; default: test = reg_test_82575; + toggle = 0x7FFFF3FF; break; } @@ -1081,8 +1144,7 @@ *data = 0; /* Read and add up the contents of the EEPROM */ for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) { - if ((adapter->hw.nvm.ops.read(&adapter->hw, i, 1, &temp)) - < 0) { + if ((adapter->hw.nvm.ops.read(&adapter->hw, i, 1, &temp)) < 0) { *data = 1; break; } @@ -1098,8 +1160,7 @@ static irqreturn_t igb_test_intr(int irq, void *data) { - struct net_device *netdev = (struct net_device *) data; - struct igb_adapter *adapter = netdev_priv(netdev); + struct igb_adapter *adapter = (struct igb_adapter *) data; struct e1000_hw *hw = &adapter->hw; adapter->test_icr |= rd32(E1000_ICR); @@ -1117,38 +1178,45 @@ *data = 0; /* Hook up test interrupt handler just for this test */ - if (adapter->msix_entries) - /* NOTE: we don't test MSI-X interrupts here, yet */ - return 0; - - if (adapter->flags & IGB_FLAG_HAS_MSI) { + if (adapter->msix_entries) { + if (request_irq(adapter->msix_entries[0].vector, + &igb_test_intr, 0, netdev->name, adapter)) { + *data = 1; + return -1; + } + } else if (adapter->flags & IGB_FLAG_HAS_MSI) { shared_int = false; - if (request_irq(irq, &igb_test_intr, 0, netdev->name, netdev)) { + if (request_irq(irq, + &igb_test_intr, 0, netdev->name, adapter)) { *data = 1; return -1; } } else if (!request_irq(irq, &igb_test_intr, IRQF_PROBE_SHARED, - netdev->name, netdev)) { + netdev->name, adapter)) { shared_int = false; } else if (request_irq(irq, &igb_test_intr, IRQF_SHARED, - netdev->name, netdev)) { + netdev->name, adapter)) { *data = 1; return -1; } dev_info(&adapter->pdev->dev, "testing %s interrupt\n", (shared_int ? "shared" : "unshared")); + /* Disable all the interrupts */ - wr32(E1000_IMC, 0xFFFFFFFF); + wr32(E1000_IMC, ~0); msleep(10); /* Define all writable bits for ICS */ - switch(hw->mac.type) { + switch (hw->mac.type) { case e1000_82575: ics_mask = 0x37F47EDD; break; case e1000_82576: ics_mask = 0x77D4FBFD; break; + case e1000_82580: + ics_mask = 0x77DCFED5; + break; default: ics_mask = 0x7FFFFFFF; break; @@ -1232,190 +1300,61 @@ msleep(10); /* Unhook test interrupt handler */ - free_irq(irq, netdev); + if (adapter->msix_entries) + free_irq(adapter->msix_entries[0].vector, adapter); + else + free_irq(irq, adapter); return *data; } static void igb_free_desc_rings(struct igb_adapter *adapter) { - struct igb_ring *tx_ring = &adapter->test_tx_ring; - struct igb_ring *rx_ring = &adapter->test_rx_ring; - struct pci_dev *pdev = adapter->pdev; - int i; - - if (tx_ring->desc && tx_ring->buffer_info) { - for (i = 0; i < tx_ring->count; i++) { - struct igb_buffer *buf = &(tx_ring->buffer_info[i]); - if (buf->dma) - pci_unmap_single(pdev, buf->dma, buf->length, - PCI_DMA_TODEVICE); - if (buf->skb) - dev_kfree_skb(buf->skb); - } - } - - if (rx_ring->desc && rx_ring->buffer_info) { - for (i = 0; i < rx_ring->count; i++) { - struct igb_buffer *buf = &(rx_ring->buffer_info[i]); - if (buf->dma) - pci_unmap_single(pdev, buf->dma, - IGB_RXBUFFER_2048, - PCI_DMA_FROMDEVICE); - if (buf->skb) - dev_kfree_skb(buf->skb); - } - } - - if (tx_ring->desc) { - pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, - tx_ring->dma); - tx_ring->desc = NULL; - } - if (rx_ring->desc) { - pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, - rx_ring->dma); - rx_ring->desc = NULL; - } - - kfree(tx_ring->buffer_info); - tx_ring->buffer_info = NULL; - kfree(rx_ring->buffer_info); - rx_ring->buffer_info = NULL; - - return; + igb_free_tx_resources(&adapter->test_tx_ring); + igb_free_rx_resources(&adapter->test_rx_ring); } static int igb_setup_desc_rings(struct igb_adapter *adapter) { - struct e1000_hw *hw = &adapter->hw; struct igb_ring *tx_ring = &adapter->test_tx_ring; struct igb_ring *rx_ring = &adapter->test_rx_ring; - struct pci_dev *pdev = adapter->pdev; - struct igb_buffer *buffer_info; - u32 rctl; - int i, ret_val; + struct e1000_hw *hw = &adapter->hw; + int ret_val; /* Setup Tx descriptor ring and Tx buffers */ + tx_ring->count = IGB_DEFAULT_TXD; + tx_ring->pdev = adapter->pdev; + tx_ring->netdev = adapter->netdev; + tx_ring->reg_idx = adapter->vfs_allocated_count; - if (!tx_ring->count) - tx_ring->count = IGB_DEFAULT_TXD; - - tx_ring->buffer_info = kcalloc(tx_ring->count, - sizeof(struct igb_buffer), - GFP_KERNEL); - if (!tx_ring->buffer_info) { + if (igb_setup_tx_resources(tx_ring)) { ret_val = 1; goto err_nomem; } - tx_ring->size = tx_ring->count * sizeof(union e1000_adv_tx_desc); - tx_ring->size = ALIGN(tx_ring->size, 4096); - tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size, - &tx_ring->dma); - if (!tx_ring->desc) { - ret_val = 2; - goto err_nomem; - } - tx_ring->next_to_use = tx_ring->next_to_clean = 0; - - wr32(E1000_TDBAL(0), - ((u64) tx_ring->dma & 0x00000000FFFFFFFF)); - wr32(E1000_TDBAH(0), ((u64) tx_ring->dma >> 32)); - wr32(E1000_TDLEN(0), - tx_ring->count * sizeof(union e1000_adv_tx_desc)); - wr32(E1000_TDH(0), 0); - wr32(E1000_TDT(0), 0); - wr32(E1000_TCTL, - E1000_TCTL_PSP | E1000_TCTL_EN | - E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT | - E1000_COLLISION_DISTANCE << E1000_COLD_SHIFT); - - for (i = 0; i < tx_ring->count; i++) { - union e1000_adv_tx_desc *tx_desc; - struct sk_buff *skb; - unsigned int size = 1024; - - tx_desc = E1000_TX_DESC_ADV(*tx_ring, i); - skb = alloc_skb(size, GFP_KERNEL); - if (!skb) { - ret_val = 3; - goto err_nomem; - } - skb_put(skb, size); - buffer_info = &tx_ring->buffer_info[i]; - buffer_info->skb = skb; - buffer_info->length = skb->len; - buffer_info->dma = pci_map_single(pdev, skb->data, skb->len, - PCI_DMA_TODEVICE); - tx_desc->read.buffer_addr = cpu_to_le64(buffer_info->dma); - tx_desc->read.olinfo_status = cpu_to_le32(skb->len) << - E1000_ADVTXD_PAYLEN_SHIFT; - tx_desc->read.cmd_type_len = cpu_to_le32(skb->len); - tx_desc->read.cmd_type_len |= cpu_to_le32(E1000_TXD_CMD_EOP | - E1000_TXD_CMD_IFCS | - E1000_TXD_CMD_RS | - E1000_ADVTXD_DTYP_DATA | - E1000_ADVTXD_DCMD_DEXT); - } + igb_setup_tctl(adapter); + igb_configure_tx_ring(adapter, tx_ring); /* Setup Rx descriptor ring and Rx buffers */ + rx_ring->count = IGB_DEFAULT_RXD; + rx_ring->pdev = adapter->pdev; + rx_ring->netdev = adapter->netdev; + rx_ring->rx_buffer_len = IGB_RXBUFFER_2048; + rx_ring->reg_idx = adapter->vfs_allocated_count; - if (!rx_ring->count) - rx_ring->count = IGB_DEFAULT_RXD; - - rx_ring->buffer_info = kcalloc(rx_ring->count, - sizeof(struct igb_buffer), - GFP_KERNEL); - if (!rx_ring->buffer_info) { - ret_val = 4; + if (igb_setup_rx_resources(rx_ring)) { + ret_val = 3; goto err_nomem; } - rx_ring->size = rx_ring->count * sizeof(union e1000_adv_rx_desc); - rx_ring->desc = pci_alloc_consistent(pdev, rx_ring->size, - &rx_ring->dma); - if (!rx_ring->desc) { - ret_val = 5; - goto err_nomem; - } - rx_ring->next_to_use = rx_ring->next_to_clean = 0; + /* set the default queue to queue 0 of PF */ + wr32(E1000_MRQC, adapter->vfs_allocated_count << 3); - rctl = rd32(E1000_RCTL); - wr32(E1000_RCTL, rctl & ~E1000_RCTL_EN); - wr32(E1000_RDBAL(0), - ((u64) rx_ring->dma & 0xFFFFFFFF)); - wr32(E1000_RDBAH(0), - ((u64) rx_ring->dma >> 32)); - wr32(E1000_RDLEN(0), rx_ring->size); - wr32(E1000_RDH(0), 0); - wr32(E1000_RDT(0), 0); - rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC); - rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_RDMTS_HALF | - (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT); - wr32(E1000_RCTL, rctl); - wr32(E1000_SRRCTL(0), E1000_SRRCTL_DESCTYPE_ADV_ONEBUF); + /* enable receive ring */ + igb_setup_rctl(adapter); + igb_configure_rx_ring(adapter, rx_ring); - for (i = 0; i < rx_ring->count; i++) { - union e1000_adv_rx_desc *rx_desc; - struct sk_buff *skb; - - buffer_info = &rx_ring->buffer_info[i]; - rx_desc = E1000_RX_DESC_ADV(*rx_ring, i); - skb = alloc_skb(IGB_RXBUFFER_2048 + NET_IP_ALIGN, - GFP_KERNEL); - if (!skb) { - ret_val = 6; - goto err_nomem; - } - skb_reserve(skb, NET_IP_ALIGN); - buffer_info->skb = skb; - buffer_info->dma = pci_map_single(pdev, skb->data, - IGB_RXBUFFER_2048, - PCI_DMA_FROMDEVICE); - rx_desc->read.pkt_addr = cpu_to_le64(buffer_info->dma); - memset(skb->data, 0x00, skb->len); - } + igb_alloc_rx_buffers_adv(rx_ring, igb_desc_unused(rx_ring)); return 0; @@ -1449,6 +1388,9 @@ igb_write_phy_reg(hw, PHY_CONTROL, 0x9140); /* autoneg off */ igb_write_phy_reg(hw, PHY_CONTROL, 0x8140); + } else if (hw->phy.type == e1000_phy_82580) { + /* enable MII loopback */ + igb_write_phy_reg(hw, I82580_PHY_LBK_CTRL, 0x8041); } ctrl_reg = rd32(E1000_CTRL); @@ -1491,7 +1433,10 @@ struct e1000_hw *hw = &adapter->hw; u32 reg; - if (hw->phy.media_type == e1000_media_type_internal_serdes) { + reg = rd32(E1000_CTRL_EXT); + + /* use CTRL_EXT to identify link type as SGMII can appear as copper */ + if (reg & E1000_CTRL_EXT_LINK_MODE_MASK) { reg = rd32(E1000_RCTL); reg |= E1000_RCTL_LBM_TCVR; wr32(E1000_RCTL, reg); @@ -1522,11 +1467,9 @@ wr32(E1000_PCS_LCTL, reg); return 0; - } else if (hw->phy.media_type == e1000_media_type_copper) { - return igb_set_phy_loopback(adapter); } - return 7; + return igb_set_phy_loopback(adapter); } static void igb_loopback_cleanup(struct igb_adapter *adapter) @@ -1552,35 +1495,99 @@ unsigned int frame_size) { memset(skb->data, 0xFF, frame_size); - frame_size &= ~1; - memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1); - memset(&skb->data[frame_size / 2 + 10], 0xBE, 1); - memset(&skb->data[frame_size / 2 + 12], 0xAF, 1); + frame_size /= 2; + memset(&skb->data[frame_size], 0xAA, frame_size - 1); + memset(&skb->data[frame_size + 10], 0xBE, 1); + memset(&skb->data[frame_size + 12], 0xAF, 1); } static int igb_check_lbtest_frame(struct sk_buff *skb, unsigned int frame_size) { - frame_size &= ~1; - if (*(skb->data + 3) == 0xFF) - if ((*(skb->data + frame_size / 2 + 10) == 0xBE) && - (*(skb->data + frame_size / 2 + 12) == 0xAF)) + frame_size /= 2; + if (*(skb->data + 3) == 0xFF) { + if ((*(skb->data + frame_size + 10) == 0xBE) && + (*(skb->data + frame_size + 12) == 0xAF)) { return 0; + } + } return 13; } +static int igb_clean_test_rings(struct igb_ring *rx_ring, + struct igb_ring *tx_ring, + unsigned int size) +{ + union e1000_adv_rx_desc *rx_desc; + struct igb_buffer *buffer_info; + int rx_ntc, tx_ntc, count = 0; + u32 staterr; + + /* initialize next to clean and descriptor values */ + rx_ntc = rx_ring->next_to_clean; + tx_ntc = tx_ring->next_to_clean; + rx_desc = E1000_RX_DESC_ADV(*rx_ring, rx_ntc); + staterr = le32_to_cpu(rx_desc->wb.upper.status_error); + + while (staterr & E1000_RXD_STAT_DD) { + /* check rx buffer */ + buffer_info = &rx_ring->buffer_info[rx_ntc]; + + /* unmap rx buffer, will be remapped by alloc_rx_buffers */ + pci_unmap_single(rx_ring->pdev, + buffer_info->dma, + rx_ring->rx_buffer_len, + PCI_DMA_FROMDEVICE); + buffer_info->dma = 0; + + /* verify contents of skb */ + if (!igb_check_lbtest_frame(buffer_info->skb, size)) + count++; + + /* unmap buffer on tx side */ + buffer_info = &tx_ring->buffer_info[tx_ntc]; + igb_unmap_and_free_tx_resource(tx_ring, buffer_info); + + /* increment rx/tx next to clean counters */ + rx_ntc++; + if (rx_ntc == rx_ring->count) + rx_ntc = 0; + tx_ntc++; + if (tx_ntc == tx_ring->count) + tx_ntc = 0; + + /* fetch next descriptor */ + rx_desc = E1000_RX_DESC_ADV(*rx_ring, rx_ntc); + staterr = le32_to_cpu(rx_desc->wb.upper.status_error); + } + + /* re-map buffers to ring, store next to clean values */ + igb_alloc_rx_buffers_adv(rx_ring, count); + rx_ring->next_to_clean = rx_ntc; + tx_ring->next_to_clean = tx_ntc; + + return count; +} + static int igb_run_loopback_test(struct igb_adapter *adapter) { - struct e1000_hw *hw = &adapter->hw; struct igb_ring *tx_ring = &adapter->test_tx_ring; struct igb_ring *rx_ring = &adapter->test_rx_ring; - struct pci_dev *pdev = adapter->pdev; - int i, j, k, l, lc, good_cnt; - int ret_val = 0; - unsigned long time; + int i, j, lc, good_cnt, ret_val = 0; + unsigned int size = 1024; + netdev_tx_t tx_ret_val; + struct sk_buff *skb; + + /* allocate test skb */ + skb = alloc_skb(size, GFP_KERNEL); + if (!skb) + return 11; + + /* place data into test skb */ + igb_create_lbtest_frame(skb, size); + skb_put(skb, size); - wr32(E1000_RDT(0), rx_ring->count - 1); - - /* Calculate the loop count based on the largest descriptor ring + /* + * Calculate the loop count based on the largest descriptor ring * The idea is to wrap the largest ring a number of times using 64 * send/receive pairs during each loop */ @@ -1590,50 +1597,36 @@ else lc = ((rx_ring->count / 64) * 2) + 1; - k = l = 0; for (j = 0; j <= lc; j++) { /* loop count loop */ - for (i = 0; i < 64; i++) { /* send the packets */ - igb_create_lbtest_frame(tx_ring->buffer_info[k].skb, - 1024); - pci_dma_sync_single_for_device(pdev, - tx_ring->buffer_info[k].dma, - tx_ring->buffer_info[k].length, - PCI_DMA_TODEVICE); - k++; - if (k == tx_ring->count) - k = 0; - } - wr32(E1000_TDT(0), k); - msleep(200); - time = jiffies; /* set the start time for the receive */ + /* reset count of good packets */ good_cnt = 0; - do { /* receive the sent packets */ - pci_dma_sync_single_for_cpu(pdev, - rx_ring->buffer_info[l].dma, - IGB_RXBUFFER_2048, - PCI_DMA_FROMDEVICE); - - ret_val = igb_check_lbtest_frame( - rx_ring->buffer_info[l].skb, 1024); - if (!ret_val) + + /* place 64 packets on the transmit queue*/ + for (i = 0; i < 64; i++) { + skb_get(skb); + tx_ret_val = igb_xmit_frame_ring_adv(skb, tx_ring); + if (tx_ret_val == NETDEV_TX_OK) good_cnt++; - l++; - if (l == rx_ring->count) - l = 0; - /* time + 20 msecs (200 msecs on 2.4) is more than - * enough time to complete the receives, if it's - * exceeded, break and error off - */ - } while (good_cnt < 64 && jiffies < (time + 20)); + } + if (good_cnt != 64) { - ret_val = 13; /* ret_val is the same as mis-compare */ + ret_val = 12; break; } - if (jiffies >= (time + 20)) { - ret_val = 14; /* error code for time out error */ + + /* allow 200 milliseconds for packets to go from tx to rx */ + msleep(200); + + good_cnt = igb_clean_test_rings(rx_ring, tx_ring, size); + if (good_cnt != 64) { + ret_val = 13; break; } } /* end loop count loop */ + + /* free the original skb */ + kfree_skb(skb); + return ret_val; } @@ -1686,8 +1679,7 @@ if (hw->mac.autoneg) msleep(4000); - if (!(rd32(E1000_STATUS) & - E1000_STATUS_LU)) + if (!(rd32(E1000_STATUS) & E1000_STATUS_LU)) *data = 1; } return *data; @@ -1803,7 +1795,7 @@ /* dual port cards only support WoL on port A from now on * unless it was enabled in the eeprom for port B * so exclude FUNC_1 ports from having WoL enabled */ - if (rd32(E1000_STATUS) & E1000_STATUS_FUNC_1 && + if ((rd32(E1000_STATUS) & E1000_STATUS_FUNC_MASK) && !adapter->eeprom_wol) { wol->supported = 0; break; @@ -1869,7 +1861,6 @@ adapter->wol |= E1000_WUFC_BC; if (wol->wolopts & WAKE_MAGIC) adapter->wol |= E1000_WUFC_MAG; - device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); return 0; @@ -1882,12 +1873,19 @@ { struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; + unsigned long timeout; - if (!data || data > (u32)(MAX_SCHEDULE_TIMEOUT / HZ)) - data = (u32)(MAX_SCHEDULE_TIMEOUT / HZ); + timeout = data * 1000; + + /* + * msleep_interruptable only accepts unsigned int so we are limited + * in how long a duration we can wait + */ + if (!timeout || timeout > UINT_MAX) + timeout = UINT_MAX; igb_blink_led(hw); - msleep_interruptible(data * 1000); + msleep_interruptible(timeout); igb_led_off(hw); clear_bit(IGB_LED_ON, &adapter->led_status); @@ -1900,7 +1898,6 @@ struct ethtool_coalesce *ec) { struct igb_adapter *adapter = netdev_priv(netdev); - struct e1000_hw *hw = &adapter->hw; int i; if ((ec->rx_coalesce_usecs > IGB_MAX_ITR_USECS) || @@ -1909,17 +1906,39 @@ (ec->rx_coalesce_usecs == 2)) return -EINVAL; + if ((ec->tx_coalesce_usecs > IGB_MAX_ITR_USECS) || + ((ec->tx_coalesce_usecs > 3) && + (ec->tx_coalesce_usecs < IGB_MIN_ITR_USECS)) || + (ec->tx_coalesce_usecs == 2)) + return -EINVAL; + + if ((adapter->flags & IGB_FLAG_QUEUE_PAIRS) && ec->tx_coalesce_usecs) + return -EINVAL; + /* convert to rate of irq's per second */ - if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3) { - adapter->itr_setting = ec->rx_coalesce_usecs; - adapter->itr = IGB_START_ITR; - } else { - adapter->itr_setting = ec->rx_coalesce_usecs << 2; - adapter->itr = adapter->itr_setting; - } + if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3) + adapter->rx_itr_setting = ec->rx_coalesce_usecs; + else + adapter->rx_itr_setting = ec->rx_coalesce_usecs << 2; - for (i = 0; i < adapter->num_rx_queues; i++) - wr32(adapter->rx_ring[i].itr_register, adapter->itr); + /* convert to rate of irq's per second */ + if (adapter->flags & IGB_FLAG_QUEUE_PAIRS) + adapter->tx_itr_setting = adapter->rx_itr_setting; + else if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3) + adapter->tx_itr_setting = ec->tx_coalesce_usecs; + else + adapter->tx_itr_setting = ec->tx_coalesce_usecs << 2; + + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + if (q_vector->rx_ring) + q_vector->itr_val = adapter->rx_itr_setting; + else + q_vector->itr_val = adapter->tx_itr_setting; + if (q_vector->itr_val && q_vector->itr_val <= 3) + q_vector->itr_val = IGB_START_ITR; + q_vector->set_itr = 1; + } return 0; } @@ -1929,15 +1948,21 @@ { struct igb_adapter *adapter = netdev_priv(netdev); - if (adapter->itr_setting <= 3) - ec->rx_coalesce_usecs = adapter->itr_setting; + if (adapter->rx_itr_setting <= 3) + ec->rx_coalesce_usecs = adapter->rx_itr_setting; else - ec->rx_coalesce_usecs = adapter->itr_setting >> 2; + ec->rx_coalesce_usecs = adapter->rx_itr_setting >> 2; + + if (!(adapter->flags & IGB_FLAG_QUEUE_PAIRS)) { + if (adapter->tx_itr_setting <= 3) + ec->tx_coalesce_usecs = adapter->tx_itr_setting; + else + ec->tx_coalesce_usecs = adapter->tx_itr_setting >> 2; + } return 0; } - static int igb_nway_reset(struct net_device *netdev) { struct igb_adapter *adapter = netdev_priv(netdev); @@ -1962,31 +1987,32 @@ struct ethtool_stats *stats, u64 *data) { struct igb_adapter *adapter = netdev_priv(netdev); + struct net_device_stats *net_stats = &netdev->stats; u64 *queue_stat; - int stat_count_tx = sizeof(struct igb_tx_queue_stats) / sizeof(u64); - int stat_count_rx = sizeof(struct igb_rx_queue_stats) / sizeof(u64); - int j; - int i; + int i, j, k; + char *p; igb_update_stats(adapter); + for (i = 0; i < IGB_GLOBAL_STATS_LEN; i++) { - char *p = (char *)adapter+igb_gstrings_stats[i].stat_offset; + p = (char *)adapter + igb_gstrings_stats[i].stat_offset; data[i] = (igb_gstrings_stats[i].sizeof_stat == sizeof(u64)) ? *(u64 *)p : *(u32 *)p; } + for (j = 0; j < IGB_NETDEV_STATS_LEN; j++, i++) { + p = (char *)net_stats + igb_gstrings_net_stats[j].stat_offset; + data[i] = (igb_gstrings_net_stats[j].sizeof_stat == + sizeof(u64)) ? *(u64 *)p : *(u32 *)p; + } for (j = 0; j < adapter->num_tx_queues; j++) { - int k; queue_stat = (u64 *)&adapter->tx_ring[j].tx_stats; - for (k = 0; k < stat_count_tx; k++) - data[i + k] = queue_stat[k]; - i += k; + for (k = 0; k < IGB_TX_QUEUE_STATS_LEN; k++, i++) + data[i] = queue_stat[k]; } for (j = 0; j < adapter->num_rx_queues; j++) { - int k; queue_stat = (u64 *)&adapter->rx_ring[j].rx_stats; - for (k = 0; k < stat_count_rx; k++) - data[i + k] = queue_stat[k]; - i += k; + for (k = 0; k < IGB_RX_QUEUE_STATS_LEN; k++, i++) + data[i] = queue_stat[k]; } } @@ -2007,11 +2033,18 @@ ETH_GSTRING_LEN); p += ETH_GSTRING_LEN; } + for (i = 0; i < IGB_NETDEV_STATS_LEN; i++) { + memcpy(p, igb_gstrings_net_stats[i].stat_string, + ETH_GSTRING_LEN); + p += ETH_GSTRING_LEN; + } for (i = 0; i < adapter->num_tx_queues; i++) { sprintf(p, "tx_queue_%u_packets", i); p += ETH_GSTRING_LEN; sprintf(p, "tx_queue_%u_bytes", i); p += ETH_GSTRING_LEN; + sprintf(p, "tx_queue_%u_restart", i); + p += ETH_GSTRING_LEN; } for (i = 0; i < adapter->num_rx_queues; i++) { sprintf(p, "rx_queue_%u_packets", i); @@ -2020,6 +2053,10 @@ p += ETH_GSTRING_LEN; sprintf(p, "rx_queue_%u_drops", i); p += ETH_GSTRING_LEN; + sprintf(p, "rx_queue_%u_csum_err", i); + p += ETH_GSTRING_LEN; + sprintf(p, "rx_queue_%u_alloc_failed", i); + p += ETH_GSTRING_LEN; } /* BUG_ON(p - data != IGB_STATS_LEN * ETH_GSTRING_LEN); */ break; --- linux-2.6.32.orig/drivers/net/igb/e1000_82575.h +++ linux-2.6.32/drivers/net/igb/e1000_82575.h @@ -38,6 +38,11 @@ #define E1000_RAR_ENTRIES_82575 16 #define E1000_RAR_ENTRIES_82576 24 +#define E1000_RAR_ENTRIES_82580 24 + +#define E1000_SW_SYNCH_MB 0x00000100 +#define E1000_STAT_DEV_RST_SET 0x00100000 +#define E1000_CTRL_DEV_RST 0x20000000 /* SRRCTL bit definitions */ #define E1000_SRRCTL_BSIZEPKT_SHIFT 10 /* Shift _right_ */ @@ -66,6 +71,8 @@ E1000_EICR_RX_QUEUE3) /* Immediate Interrupt Rx (A.K.A. Low Latency Interrupt) */ +#define E1000_IMIREXT_SIZE_BP 0x00001000 /* Packet size bypass */ +#define E1000_IMIREXT_CTRL_BP 0x00080000 /* Bypass check of ctrl bits */ /* Receive Descriptor - Advanced */ union e1000_adv_rx_desc { @@ -98,6 +105,7 @@ #define E1000_RXDADV_HDRBUFLEN_MASK 0x7FE0 #define E1000_RXDADV_HDRBUFLEN_SHIFT 5 +#define E1000_RXDADV_STAT_TS 0x10000 /* Pkt was time stamped */ /* Transmit Descriptor - Advanced */ union e1000_adv_tx_desc { @@ -167,6 +175,18 @@ #define E1000_DCA_TXCTRL_CPUID_SHIFT 24 /* Tx CPUID now in the last byte */ #define E1000_DCA_RXCTRL_CPUID_SHIFT 24 /* Rx CPUID now in the last byte */ +/* ETQF register bit definitions */ +#define E1000_ETQF_FILTER_ENABLE (1 << 26) +#define E1000_ETQF_1588 (1 << 30) + +/* FTQF register bit definitions */ +#define E1000_FTQF_VF_BP 0x00008000 +#define E1000_FTQF_1588_TIME_STAMP 0x08000000 +#define E1000_FTQF_MASK 0xF0000000 +#define E1000_FTQF_MASK_PROTO_BP 0x10000000 +#define E1000_FTQF_MASK_SOURCE_PORT_BP 0x80000000 + +#define E1000_NVM_APME_82575 0x0400 #define MAX_NUM_VFS 8 #define E1000_DTXSWC_VMDQ_LOOPBACK_EN (1 << 31) /* global VF LB enable */ @@ -202,9 +222,21 @@ #define E1000_IOVCTL 0x05BBC #define E1000_IOVCTL_REUSE_VFQ 0x00000001 +#define E1000_RPLOLR_STRVLAN 0x40000000 +#define E1000_RPLOLR_STRCRC 0x80000000 + +#define E1000_DTXCTL_8023LL 0x0004 +#define E1000_DTXCTL_VLAN_ADDED 0x0008 +#define E1000_DTXCTL_OOS_ENABLE 0x0010 +#define E1000_DTXCTL_MDP_EN 0x0020 +#define E1000_DTXCTL_SPOOF_INT 0x0040 + #define ALL_QUEUES 0xFFFF +/* RX packet buffer size defines */ +#define E1000_RXPBS_SIZE_MASK_82576 0x0000007F void igb_vmdq_set_loopback_pf(struct e1000_hw *, bool); void igb_vmdq_set_replication_pf(struct e1000_hw *, bool); +u16 igb_rxpbs_adjust_82580(u32 data); #endif --- linux-2.6.32.orig/drivers/net/igb/e1000_mbx.c +++ linux-2.6.32/drivers/net/igb/e1000_mbx.c @@ -143,12 +143,16 @@ if (!countdown || !mbx->ops.check_for_msg) goto out; - while (mbx->ops.check_for_msg(hw, mbx_id)) { + while (countdown && mbx->ops.check_for_msg(hw, mbx_id)) { countdown--; if (!countdown) break; udelay(mbx->usec_delay); } + + /* if we failed, all future posted messages fail until reset */ + if (!countdown) + mbx->timeout = 0; out: return countdown ? 0 : -E1000_ERR_MBX; } @@ -168,12 +172,16 @@ if (!countdown || !mbx->ops.check_for_ack) goto out; - while (mbx->ops.check_for_ack(hw, mbx_id)) { + while (countdown && mbx->ops.check_for_ack(hw, mbx_id)) { countdown--; if (!countdown) break; udelay(mbx->usec_delay); } + + /* if we failed, all future posted messages fail until reset */ + if (!countdown) + mbx->timeout = 0; out: return countdown ? 0 : -E1000_ERR_MBX; } @@ -217,12 +225,13 @@ static s32 igb_write_posted_mbx(struct e1000_hw *hw, u32 *msg, u16 size, u16 mbx_id) { struct e1000_mbx_info *mbx = &hw->mbx; - s32 ret_val = 0; + s32 ret_val = -E1000_ERR_MBX; - if (!mbx->ops.write) + /* exit if either we can't write or there isn't a defined timeout */ + if (!mbx->ops.write || !mbx->timeout) goto out; - /* send msg*/ + /* send msg */ ret_val = mbx->ops.write(hw, msg, size, mbx_id); /* if msg sent wait until we receive an ack */ @@ -305,6 +314,30 @@ } /** + * igb_obtain_mbx_lock_pf - obtain mailbox lock + * @hw: pointer to the HW structure + * @vf_number: the VF index + * + * return SUCCESS if we obtained the mailbox lock + **/ +static s32 igb_obtain_mbx_lock_pf(struct e1000_hw *hw, u16 vf_number) +{ + s32 ret_val = -E1000_ERR_MBX; + u32 p2v_mailbox; + + + /* Take ownership of the buffer */ + wr32(E1000_P2VMAILBOX(vf_number), E1000_P2VMAILBOX_PFU); + + /* reserve mailbox for vf use */ + p2v_mailbox = rd32(E1000_P2VMAILBOX(vf_number)); + if (p2v_mailbox & E1000_P2VMAILBOX_PFU) + ret_val = 0; + + return ret_val; +} + +/** * igb_write_mbx_pf - Places a message in the mailbox * @hw: pointer to the HW structure * @msg: The message buffer @@ -316,27 +349,17 @@ static s32 igb_write_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size, u16 vf_number) { - u32 p2v_mailbox; - s32 ret_val = 0; + s32 ret_val; u16 i; - /* Take ownership of the buffer */ - wr32(E1000_P2VMAILBOX(vf_number), E1000_P2VMAILBOX_PFU); - - /* Make sure we have ownership now... */ - p2v_mailbox = rd32(E1000_P2VMAILBOX(vf_number)); - if (!(p2v_mailbox & E1000_P2VMAILBOX_PFU)) { - /* failed to grab ownership */ - ret_val = -E1000_ERR_MBX; + /* lock the mailbox to prevent pf/vf race condition */ + ret_val = igb_obtain_mbx_lock_pf(hw, vf_number); + if (ret_val) goto out_no_write; - } - /* - * flush any ack or msg which may already be in the queue - * as they are likely the result of an error - */ - igb_check_for_ack_pf(hw, vf_number); + /* flush msg and acks as we are overwriting the message buffer */ igb_check_for_msg_pf(hw, vf_number); + igb_check_for_ack_pf(hw, vf_number); /* copy the caller specified message to the mailbox memory buffer */ for (i = 0; i < size; i++) @@ -367,20 +390,13 @@ static s32 igb_read_mbx_pf(struct e1000_hw *hw, u32 *msg, u16 size, u16 vf_number) { - u32 p2v_mailbox; - s32 ret_val = 0; + s32 ret_val; u16 i; - /* Take ownership of the buffer */ - wr32(E1000_P2VMAILBOX(vf_number), E1000_P2VMAILBOX_PFU); - - /* Make sure we have ownership now... */ - p2v_mailbox = rd32(E1000_P2VMAILBOX(vf_number)); - if (!(p2v_mailbox & E1000_P2VMAILBOX_PFU)) { - /* failed to grab ownership */ - ret_val = -E1000_ERR_MBX; + /* lock the mailbox to prevent pf/vf race condition */ + ret_val = igb_obtain_mbx_lock_pf(hw, vf_number); + if (ret_val) goto out_no_read; - } /* copy the message to the mailbox memory buffer */ for (i = 0; i < size; i++) @@ -392,8 +408,6 @@ /* update stats */ hw->mbx.stats.msgs_rx++; - ret_val = 0; - out_no_read: return ret_val; } --- linux-2.6.32.orig/drivers/net/igb/e1000_mac.c +++ linux-2.6.32/drivers/net/igb/e1000_mac.c @@ -185,13 +185,12 @@ } if (nvm_alt_mac_addr_offset == 0xFFFF) { - ret_val = -(E1000_NOT_IMPLEMENTED); + /* There is no Alternate MAC Address */ goto out; } if (hw->bus.func == E1000_FUNC_1) - nvm_alt_mac_addr_offset += ETH_ALEN/sizeof(u16); - + nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1; for (i = 0; i < ETH_ALEN; i += 2) { offset = nvm_alt_mac_addr_offset + (i >> 1); ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data); @@ -206,14 +205,16 @@ /* if multicast bit is set, the alternate address will not be used */ if (alt_mac_addr[0] & 0x01) { - ret_val = -(E1000_NOT_IMPLEMENTED); + hw_dbg("Ignoring Alternate Mac Address with MC bit set\n"); goto out; } - for (i = 0; i < ETH_ALEN; i++) - hw->mac.addr[i] = hw->mac.perm_addr[i] = alt_mac_addr[i]; - - hw->mac.ops.rar_set(hw, hw->mac.perm_addr, 0); + /* + * We have a valid alternate MAC address, and we want to treat it the + * same as the normal permanent MAC address stored by the HW into the + * RAR. Do this by mapping this address into RAR0. + */ + hw->mac.ops.rar_set(hw, alt_mac_addr, 0); out: return ret_val; @@ -246,8 +247,15 @@ if (rar_low || rar_high) rar_high |= E1000_RAH_AV; + /* + * Some bridges will combine consecutive 32-bit writes into + * a single burst write, which will malfunction on some parts. + * The flushes avoid this. + */ wr32(E1000_RAL(index), rar_low); + wrfl(); wr32(E1000_RAH(index), rar_high); + wrfl(); } /** @@ -399,45 +407,43 @@ **/ void igb_clear_hw_cntrs_base(struct e1000_hw *hw) { - u32 temp; - - temp = rd32(E1000_CRCERRS); - temp = rd32(E1000_SYMERRS); - temp = rd32(E1000_MPC); - temp = rd32(E1000_SCC); - temp = rd32(E1000_ECOL); - temp = rd32(E1000_MCC); - temp = rd32(E1000_LATECOL); - temp = rd32(E1000_COLC); - temp = rd32(E1000_DC); - temp = rd32(E1000_SEC); - temp = rd32(E1000_RLEC); - temp = rd32(E1000_XONRXC); - temp = rd32(E1000_XONTXC); - temp = rd32(E1000_XOFFRXC); - temp = rd32(E1000_XOFFTXC); - temp = rd32(E1000_FCRUC); - temp = rd32(E1000_GPRC); - temp = rd32(E1000_BPRC); - temp = rd32(E1000_MPRC); - temp = rd32(E1000_GPTC); - temp = rd32(E1000_GORCL); - temp = rd32(E1000_GORCH); - temp = rd32(E1000_GOTCL); - temp = rd32(E1000_GOTCH); - temp = rd32(E1000_RNBC); - temp = rd32(E1000_RUC); - temp = rd32(E1000_RFC); - temp = rd32(E1000_ROC); - temp = rd32(E1000_RJC); - temp = rd32(E1000_TORL); - temp = rd32(E1000_TORH); - temp = rd32(E1000_TOTL); - temp = rd32(E1000_TOTH); - temp = rd32(E1000_TPR); - temp = rd32(E1000_TPT); - temp = rd32(E1000_MPTC); - temp = rd32(E1000_BPTC); + rd32(E1000_CRCERRS); + rd32(E1000_SYMERRS); + rd32(E1000_MPC); + rd32(E1000_SCC); + rd32(E1000_ECOL); + rd32(E1000_MCC); + rd32(E1000_LATECOL); + rd32(E1000_COLC); + rd32(E1000_DC); + rd32(E1000_SEC); + rd32(E1000_RLEC); + rd32(E1000_XONRXC); + rd32(E1000_XONTXC); + rd32(E1000_XOFFRXC); + rd32(E1000_XOFFTXC); + rd32(E1000_FCRUC); + rd32(E1000_GPRC); + rd32(E1000_BPRC); + rd32(E1000_MPRC); + rd32(E1000_GPTC); + rd32(E1000_GORCL); + rd32(E1000_GORCH); + rd32(E1000_GOTCL); + rd32(E1000_GOTCH); + rd32(E1000_RNBC); + rd32(E1000_RUC); + rd32(E1000_RFC); + rd32(E1000_ROC); + rd32(E1000_RJC); + rd32(E1000_TORL); + rd32(E1000_TORH); + rd32(E1000_TOTL); + rd32(E1000_TOTH); + rd32(E1000_TPR); + rd32(E1000_TPT); + rd32(E1000_MPTC); + rd32(E1000_BPTC); } /** --- linux-2.6.32.orig/drivers/net/igb/e1000_regs.h +++ linux-2.6.32/drivers/net/igb/e1000_regs.h @@ -34,6 +34,7 @@ #define E1000_EERD 0x00014 /* EEPROM Read - RW */ #define E1000_CTRL_EXT 0x00018 /* Extended Device Control - RW */ #define E1000_MDIC 0x00020 /* MDI Control - RW */ +#define E1000_MDICNFG 0x00E04 /* MDI Config - RW */ #define E1000_SCTL 0x00024 /* SerDes Control - RW */ #define E1000_FCAL 0x00028 /* Flow Control Address Low - RW */ #define E1000_FCAH 0x0002C /* Flow Control Address High -RW */ @@ -76,59 +77,20 @@ #define E1000_FCRTV 0x02460 /* Flow Control Refresh Timer Value - RW */ /* IEEE 1588 TIMESYNCH */ -#define E1000_TSYNCTXCTL 0x0B614 -#define E1000_TSYNCTXCTL_VALID (1<<0) -#define E1000_TSYNCTXCTL_ENABLED (1<<4) -#define E1000_TSYNCRXCTL 0x0B620 -#define E1000_TSYNCRXCTL_VALID (1<<0) -#define E1000_TSYNCRXCTL_ENABLED (1<<4) -enum { - E1000_TSYNCRXCTL_TYPE_L2_V2 = 0, - E1000_TSYNCRXCTL_TYPE_L4_V1 = (1<<1), - E1000_TSYNCRXCTL_TYPE_L2_L4_V2 = (1<<2), - E1000_TSYNCRXCTL_TYPE_ALL = (1<<3), - E1000_TSYNCRXCTL_TYPE_EVENT_V2 = (1<<3) | (1<<1), -}; -#define E1000_TSYNCRXCFG 0x05F50 -enum { - E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE = 0<<0, - E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE = 1<<0, - E1000_TSYNCRXCFG_PTP_V1_FOLLOWUP_MESSAGE = 2<<0, - E1000_TSYNCRXCFG_PTP_V1_DELAY_RESP_MESSAGE = 3<<0, - E1000_TSYNCRXCFG_PTP_V1_MANAGEMENT_MESSAGE = 4<<0, - - E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE = 0<<8, - E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE = 1<<8, - E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_REQ_MESSAGE = 2<<8, - E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_RESP_MESSAGE = 3<<8, - E1000_TSYNCRXCFG_PTP_V2_FOLLOWUP_MESSAGE = 8<<8, - E1000_TSYNCRXCFG_PTP_V2_DELAY_RESP_MESSAGE = 9<<8, - E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_FOLLOWUP_MESSAGE = 0xA<<8, - E1000_TSYNCRXCFG_PTP_V2_ANNOUNCE_MESSAGE = 0xB<<8, - E1000_TSYNCRXCFG_PTP_V2_SIGNALLING_MESSAGE = 0xC<<8, - E1000_TSYNCRXCFG_PTP_V2_MANAGEMENT_MESSAGE = 0xD<<8, -}; -#define E1000_SYSTIML 0x0B600 -#define E1000_SYSTIMH 0x0B604 -#define E1000_TIMINCA 0x0B608 - -#define E1000_RXMTRL 0x0B634 -#define E1000_RXSTMPL 0x0B624 -#define E1000_RXSTMPH 0x0B628 -#define E1000_RXSATRL 0x0B62C -#define E1000_RXSATRH 0x0B630 - -#define E1000_TXSTMPL 0x0B618 -#define E1000_TXSTMPH 0x0B61C - -#define E1000_ETQF0 0x05CB0 -#define E1000_ETQF1 0x05CB4 -#define E1000_ETQF2 0x05CB8 -#define E1000_ETQF3 0x05CBC -#define E1000_ETQF4 0x05CC0 -#define E1000_ETQF5 0x05CC4 -#define E1000_ETQF6 0x05CC8 -#define E1000_ETQF7 0x05CCC +#define E1000_TSYNCRXCTL 0x0B620 /* Rx Time Sync Control register - RW */ +#define E1000_TSYNCTXCTL 0x0B614 /* Tx Time Sync Control register - RW */ +#define E1000_TSYNCRXCFG 0x05F50 /* Time Sync Rx Configuration - RW */ +#define E1000_RXSTMPL 0x0B624 /* Rx timestamp Low - RO */ +#define E1000_RXSTMPH 0x0B628 /* Rx timestamp High - RO */ +#define E1000_RXSATRL 0x0B62C /* Rx timestamp attribute low - RO */ +#define E1000_RXSATRH 0x0B630 /* Rx timestamp attribute high - RO */ +#define E1000_TXSTMPL 0x0B618 /* Tx timestamp value Low - RO */ +#define E1000_TXSTMPH 0x0B61C /* Tx timestamp value High - RO */ +#define E1000_SYSTIML 0x0B600 /* System time register Low - RO */ +#define E1000_SYSTIMH 0x0B604 /* System time register High - RO */ +#define E1000_TIMINCA 0x0B608 /* Increment attributes register - RW */ +#define E1000_TSAUXC 0x0B640 /* Timesync Auxiliary Control register */ +#define E1000_SYSTIMR 0x0B6F8 /* System time register Residue */ /* Filtering Registers */ #define E1000_SAQF(_n) (0x5980 + 4 * (_n)) @@ -143,7 +105,9 @@ #define E1000_ETQF(_n) (0x05CB0 + (4 * (_n))) /* EType Queue Fltr */ #define E1000_RQDPC(_n) (0x0C030 + ((_n) * 0x40)) + /* Split and Replication RX Control - RW */ +#define E1000_RXPBS 0x02404 /* Rx Packet Buffer Size - RW */ /* * Convenience macros * @@ -288,10 +252,17 @@ #define E1000_MTA 0x05200 /* Multicast Table Array - RW Array */ #define E1000_RA 0x05400 /* Receive Address - RW Array */ #define E1000_RA2 0x054E0 /* 2nd half of receive address array - RW Array */ +#define E1000_PSRTYPE(_i) (0x05480 + ((_i) * 4)) #define E1000_RAL(_i) (((_i) <= 15) ? (0x05400 + ((_i) * 8)) : \ (0x054E0 + ((_i - 16) * 8))) #define E1000_RAH(_i) (((_i) <= 15) ? (0x05404 + ((_i) * 8)) : \ (0x054E4 + ((_i - 16) * 8))) +#define E1000_IP4AT_REG(_i) (0x05840 + ((_i) * 8)) +#define E1000_IP6AT_REG(_i) (0x05880 + ((_i) * 4)) +#define E1000_WUPM_REG(_i) (0x05A00 + ((_i) * 4)) +#define E1000_FFMT_REG(_i) (0x09000 + ((_i) * 8)) +#define E1000_FFVT_REG(_i) (0x09800 + ((_i) * 8)) +#define E1000_FFLT_REG(_i) (0x05F00 + ((_i) * 8)) #define E1000_VFTA 0x05600 /* VLAN Filter Table Array - RW Array */ #define E1000_VT_CTL 0x0581C /* VMDq Control - RW */ #define E1000_WUC 0x05800 /* Wakeup Control - RW */ @@ -331,6 +302,7 @@ #define E1000_QDE 0x02408 /* Queue Drop Enable - RW */ #define E1000_DTXSWC 0x03500 /* DMA Tx Switch Control - RW */ #define E1000_RPLOLR 0x05AF0 /* Replication Offload - RW */ +#define E1000_UTA 0x0A000 /* Unicast Table Array - RW */ #define E1000_IOVTCL 0x05BBC /* IOV Control Register */ /* These act per VF so an array friendly macro is used */ #define E1000_P2VMAILBOX(_n) (0x00C00 + (4 * (_n))) @@ -348,4 +320,6 @@ #define array_rd32(reg, offset) \ (readl(hw->hw_addr + reg + ((offset) << 2))) +/* DMA Coalescing registers */ +#define E1000_PCIEMISC 0x05BB8 /* PCIE misc config register */ #endif --- linux-2.6.32.orig/drivers/net/igb/e1000_defines.h +++ linux-2.6.32/drivers/net/igb/e1000_defines.h @@ -49,6 +49,7 @@ #define E1000_CTRL_EXT_PFRSTD 0x00004000 #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000 #define E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES 0x00C00000 +#define E1000_CTRL_EXT_LINK_MODE_1000BASE_KX 0x00400000 #define E1000_CTRL_EXT_LINK_MODE_SGMII 0x00800000 #define E1000_CTRL_EXT_EIAME 0x01000000 #define E1000_CTRL_EXT_IRCA 0x00000001 @@ -329,6 +330,7 @@ #define E1000_ICR_RXDMT0 0x00000010 /* rx desc min. threshold (0) */ #define E1000_ICR_RXT0 0x00000080 /* rx timer intr (ring 0) */ #define E1000_ICR_VMMB 0x00000100 /* VM MB event */ +#define E1000_ICR_DRSTA 0x40000000 /* Device Reset Asserted */ /* If this bit asserted, the driver should claim the interrupt */ #define E1000_ICR_INT_ASSERTED 0x80000000 /* LAN connected device generates an interrupt */ @@ -370,6 +372,7 @@ #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */ #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* rx timer intr */ +#define E1000_IMS_DRSTA E1000_ICR_DRSTA /* Device Reset Asserted */ #define E1000_IMS_DOUTSYNC E1000_ICR_DOUTSYNC /* NIC DMA out of sync */ /* Extended Interrupt Mask Set */ @@ -378,6 +381,7 @@ /* Interrupt Cause Set */ #define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */ #define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */ +#define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted */ /* Extended Interrupt Cause Set */ @@ -435,6 +439,39 @@ /* Flow Control */ #define E1000_FCRTL_XONE 0x80000000 /* Enable XON frame transmission */ +#define E1000_TSYNCTXCTL_VALID 0x00000001 /* tx timestamp valid */ +#define E1000_TSYNCTXCTL_ENABLED 0x00000010 /* enable tx timestampping */ + +#define E1000_TSYNCRXCTL_VALID 0x00000001 /* rx timestamp valid */ +#define E1000_TSYNCRXCTL_TYPE_MASK 0x0000000E /* rx type mask */ +#define E1000_TSYNCRXCTL_TYPE_L2_V2 0x00 +#define E1000_TSYNCRXCTL_TYPE_L4_V1 0x02 +#define E1000_TSYNCRXCTL_TYPE_L2_L4_V2 0x04 +#define E1000_TSYNCRXCTL_TYPE_ALL 0x08 +#define E1000_TSYNCRXCTL_TYPE_EVENT_V2 0x0A +#define E1000_TSYNCRXCTL_ENABLED 0x00000010 /* enable rx timestampping */ + +#define E1000_TSYNCRXCFG_PTP_V1_CTRLT_MASK 0x000000FF +#define E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE 0x00 +#define E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE 0x01 +#define E1000_TSYNCRXCFG_PTP_V1_FOLLOWUP_MESSAGE 0x02 +#define E1000_TSYNCRXCFG_PTP_V1_DELAY_RESP_MESSAGE 0x03 +#define E1000_TSYNCRXCFG_PTP_V1_MANAGEMENT_MESSAGE 0x04 + +#define E1000_TSYNCRXCFG_PTP_V2_MSGID_MASK 0x00000F00 +#define E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE 0x0000 +#define E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE 0x0100 +#define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_REQ_MESSAGE 0x0200 +#define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_RESP_MESSAGE 0x0300 +#define E1000_TSYNCRXCFG_PTP_V2_FOLLOWUP_MESSAGE 0x0800 +#define E1000_TSYNCRXCFG_PTP_V2_DELAY_RESP_MESSAGE 0x0900 +#define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_FOLLOWUP_MESSAGE 0x0A00 +#define E1000_TSYNCRXCFG_PTP_V2_ANNOUNCE_MESSAGE 0x0B00 +#define E1000_TSYNCRXCFG_PTP_V2_SIGNALLING_MESSAGE 0x0C00 +#define E1000_TSYNCRXCFG_PTP_V2_MANAGEMENT_MESSAGE 0x0D00 + +#define E1000_TIMINCA_16NS_SHIFT 24 + /* PCI Express Control */ #define E1000_GCR_CMPL_TMOUT_MASK 0x0000F000 #define E1000_GCR_CMPL_TMOUT_10ms 0x00001000 @@ -524,8 +561,12 @@ #define NVM_ALT_MAC_ADDR_PTR 0x0037 #define NVM_CHECKSUM_REG 0x003F -#define E1000_NVM_CFG_DONE_PORT_0 0x40000 /* MNG config cycle done */ -#define E1000_NVM_CFG_DONE_PORT_1 0x80000 /* ...for second port */ +#define E1000_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */ +#define E1000_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */ +#define E1000_NVM_CFG_DONE_PORT_2 0x100000 /* ...for third port */ +#define E1000_NVM_CFG_DONE_PORT_3 0x200000 /* ...for fourth port */ + +#define NVM_82580_LAN_FUNC_OFFSET(a) (a ? (0x40 + (0x40 * a)) : 0) /* Mask bits for fields in Word 0x0f of the NVM */ #define NVM_WORD0F_PAUSE_MASK 0x3000 @@ -592,6 +633,7 @@ */ #define M88E1111_I_PHY_ID 0x01410CC0 #define IGP03E1000_E_PHY_ID 0x02A80390 +#define I82580_I_PHY_ID 0x015403A0 #define M88_VENDOR 0x0141 /* M88E1000 Specific Registers */ @@ -678,4 +720,8 @@ #define E1000_VFTA_ENTRY_MASK 0x7F #define E1000_VFTA_ENTRY_BIT_SHIFT_MASK 0x1F +/* DMA Coalescing register fields */ +#define E1000_PCIEMISC_LX_DECISION 0x00000080 /* Lx power decision based + on DMA coal */ + #endif --- linux-2.6.32.orig/drivers/net/igb/igb.h +++ linux-2.6.32/drivers/net/igb/igb.h @@ -55,12 +55,14 @@ #define IGB_DEFAULT_ITR 3 /* dynamic */ #define IGB_MAX_ITR_USECS 10000 #define IGB_MIN_ITR_USECS 10 +#define NON_Q_VECTORS 1 +#define MAX_Q_VECTORS 8 /* Transmit and receive queues */ -#define IGB_MAX_RX_QUEUES (adapter->vfs_allocated_count ? \ - (adapter->vfs_allocated_count > 6 ? 1 : 2) : 4) -#define IGB_MAX_TX_QUEUES IGB_MAX_RX_QUEUES -#define IGB_ABS_MAX_TX_QUEUES 4 +#define IGB_MAX_RX_QUEUES (adapter->vfs_allocated_count ? 2 : \ + (hw->mac.type > e1000_82575 ? 8 : 4)) +#define IGB_ABS_MAX_TX_QUEUES 8 +#define IGB_MAX_TX_QUEUES IGB_MAX_RX_QUEUES #define IGB_MAX_VF_MC_ENTRIES 30 #define IGB_MAX_VF_FUNCTIONS 8 @@ -71,9 +73,14 @@ u16 vf_mc_hashes[IGB_MAX_VF_MC_ENTRIES]; u16 num_vf_mc_hashes; u16 vlans_enabled; - bool clear_to_send; + u32 flags; + unsigned long last_nack; }; +#define IGB_VF_FLAG_CTS 0x00000001 /* VF is clear to send data */ +#define IGB_VF_FLAG_UNI_PROMISC 0x00000002 /* VF has unicast promisc */ +#define IGB_VF_FLAG_MULTI_PROMISC 0x00000004 /* VF has multicast promisc */ + /* RX descriptor control thresholds. * PTHRESH - MAC will consider prefetch if it has fewer than this number of * descriptors available in its onboard memory. @@ -85,17 +92,19 @@ * descriptors until either it has this many to write back, or the * ITR timer expires. */ -#define IGB_RX_PTHRESH 16 +#define IGB_RX_PTHRESH (hw->mac.type <= e1000_82576 ? 16 : 8) #define IGB_RX_HTHRESH 8 #define IGB_RX_WTHRESH 1 +#define IGB_TX_PTHRESH 8 +#define IGB_TX_HTHRESH 1 +#define IGB_TX_WTHRESH ((hw->mac.type == e1000_82576 && \ + adapter->msix_entries) ? 0 : 16) /* this is the size past which hardware will drop packets when setting LPE=0 */ #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 /* Supported Rx Buffer Sizes */ #define IGB_RXBUFFER_128 128 /* Used for packet split */ -#define IGB_RXBUFFER_256 256 /* Used for packet split */ -#define IGB_RXBUFFER_512 512 #define IGB_RXBUFFER_1024 1024 #define IGB_RXBUFFER_2048 2048 #define IGB_RXBUFFER_16384 16384 @@ -128,12 +137,13 @@ unsigned long time_stamp; u16 length; u16 next_to_watch; + u16 mapped_as_page; }; /* RX */ struct { struct page *page; - u64 page_dma; - unsigned int page_offset; + dma_addr_t page_dma; + u16 page_offset; }; }; }; @@ -141,36 +151,55 @@ struct igb_tx_queue_stats { u64 packets; u64 bytes; + u64 restart_queue; }; struct igb_rx_queue_stats { u64 packets; u64 bytes; u64 drops; + u64 csum_err; + u64 alloc_failed; }; -struct igb_ring { +struct igb_q_vector { struct igb_adapter *adapter; /* backlink */ - void *desc; /* descriptor ring memory */ - dma_addr_t dma; /* phys address of the ring */ - unsigned int size; /* length of desc. ring in bytes */ - unsigned int count; /* number of desc. in the ring */ - u16 next_to_use; - u16 next_to_clean; - u16 head; - u16 tail; - struct igb_buffer *buffer_info; /* array of buffer info structs */ + struct igb_ring *rx_ring; + struct igb_ring *tx_ring; + struct napi_struct napi; u32 eims_value; - u32 itr_val; - u16 itr_register; u16 cpu; - u16 queue_index; - u16 reg_idx; + u16 itr_val; + u8 set_itr; + u8 itr_shift; + void __iomem *itr_register; + + char name[IFNAMSIZ + 9]; +}; + +struct igb_ring { + struct igb_q_vector *q_vector; /* backlink to q_vector */ + struct net_device *netdev; /* back pointer to net_device */ + struct pci_dev *pdev; /* pci device for dma mapping */ + dma_addr_t dma; /* phys address of the ring */ + void *desc; /* descriptor ring memory */ + unsigned int size; /* length of desc. ring in bytes */ + u16 count; /* number of desc. in the ring */ + u16 next_to_use; + u16 next_to_clean; + u8 queue_index; + u8 reg_idx; + void __iomem *head; + void __iomem *tail; + struct igb_buffer *buffer_info; /* array of buffer info structs */ + unsigned int total_bytes; unsigned int total_packets; + u32 flags; + union { /* TX */ struct { @@ -180,16 +209,18 @@ /* RX */ struct { struct igb_rx_queue_stats rx_stats; - u64 rx_queue_drops; - struct napi_struct napi; - int set_itr; - struct igb_ring *buddy; + u32 rx_buffer_len; }; }; - - char name[IFNAMSIZ + 5]; }; +#define IGB_RING_FLAG_RX_CSUM 0x00000001 /* RX CSUM enabled */ +#define IGB_RING_FLAG_RX_SCTP_CSUM 0x00000002 /* SCTP CSUM offload enabled */ + +#define IGB_RING_FLAG_TX_CTX_IDX 0x00000001 /* HW requires context index */ + +#define IGB_ADVTXD_DCMD (E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS) + #define E1000_RX_DESC_ADV(R, i) \ (&(((union e1000_adv_rx_desc *)((R).desc))[i])) #define E1000_TX_DESC_ADV(R, i) \ @@ -197,6 +228,15 @@ #define E1000_TX_CTXTDESC_ADV(R, i) \ (&(((struct e1000_adv_tx_context_desc *)((R).desc))[i])) +/* igb_desc_unused - calculate if we have unused descriptors */ +static inline int igb_desc_unused(struct igb_ring *ring) +{ + if (ring->next_to_clean > ring->next_to_use) + return ring->next_to_clean - ring->next_to_use - 1; + + return ring->count + ring->next_to_clean - ring->next_to_use - 1; +} + /* board specific private data structure */ struct igb_adapter { @@ -205,18 +245,14 @@ struct vlan_group *vlgrp; u16 mng_vlan_id; u32 bd_number; - u32 rx_buffer_len; u32 wol; u32 en_mng_pt; u16 link_speed; u16 link_duplex; - unsigned int total_tx_bytes; - unsigned int total_tx_packets; - unsigned int total_rx_bytes; - unsigned int total_rx_packets; + /* Interrupt Throttle Rate */ - u32 itr; - u32 itr_setting; + u32 rx_itr_setting; + u32 tx_itr_setting; u16 tx_itr; u16 rx_itr; @@ -229,13 +265,7 @@ /* TX */ struct igb_ring *tx_ring; /* One per active queue */ - unsigned int restart_queue; unsigned long tx_queue_len; - u32 txd_cmd; - u32 gotc; - u64 gotc_old; - u64 tpt_old; - u64 colc_old; u32 tx_timeout_count; /* RX */ @@ -243,20 +273,12 @@ int num_tx_queues; int num_rx_queues; - u64 hw_csum_err; - u64 hw_csum_good; - u32 alloc_rx_buff_failed; - u32 gorc; - u64 gorc_old; - u16 rx_ps_hdr_size; u32 max_frame_size; u32 min_frame_size; /* OS defined structs */ struct net_device *netdev; - struct napi_struct napi; struct pci_dev *pdev; - struct net_device_stats net_stats; struct cyclecounter cycles; struct timecounter clock; struct timecompare compare; @@ -273,6 +295,9 @@ struct igb_ring test_rx_ring; int msg_enable; + + unsigned int num_q_vectors; + struct igb_q_vector *q_vector[MAX_Q_VECTORS]; struct msix_entry *msix_entries; u32 eims_enable_mask; u32 eims_other; @@ -283,18 +308,20 @@ u32 eeprom_wol; struct igb_ring *multi_tx_table[IGB_ABS_MAX_TX_QUEUES]; - unsigned int tx_ring_count; - unsigned int rx_ring_count; + u16 tx_ring_count; + u16 rx_ring_count; unsigned int vfs_allocated_count; struct vf_data_storage *vf_data; + u32 rss_queues; }; #define IGB_FLAG_HAS_MSI (1 << 0) #define IGB_FLAG_DCA_ENABLED (1 << 1) #define IGB_FLAG_QUAD_PORT_A (1 << 2) -#define IGB_FLAG_NEED_CTX_IDX (1 << 3) -#define IGB_FLAG_RX_CSUM_DISABLED (1 << 4) +#define IGB_FLAG_QUEUE_PAIRS (1 << 3) +#define IGB_82576_TSYNC_SHIFT 19 +#define IGB_82580_TSYNC_SHIFT 24 enum e1000_state_t { __IGB_TESTING, __IGB_RESETTING, @@ -314,10 +341,18 @@ extern void igb_reinit_locked(struct igb_adapter *); extern void igb_reset(struct igb_adapter *); extern int igb_set_spd_dplx(struct igb_adapter *, u16); -extern int igb_setup_tx_resources(struct igb_adapter *, struct igb_ring *); -extern int igb_setup_rx_resources(struct igb_adapter *, struct igb_ring *); +extern int igb_setup_tx_resources(struct igb_ring *); +extern int igb_setup_rx_resources(struct igb_ring *); extern void igb_free_tx_resources(struct igb_ring *); extern void igb_free_rx_resources(struct igb_ring *); +extern void igb_configure_tx_ring(struct igb_adapter *, struct igb_ring *); +extern void igb_configure_rx_ring(struct igb_adapter *, struct igb_ring *); +extern void igb_setup_tctl(struct igb_adapter *); +extern void igb_setup_rctl(struct igb_adapter *); +extern netdev_tx_t igb_xmit_frame_ring_adv(struct sk_buff *, struct igb_ring *); +extern void igb_unmap_and_free_tx_resource(struct igb_ring *, + struct igb_buffer *); +extern void igb_alloc_rx_buffers_adv(struct igb_ring *, int); extern void igb_update_stats(struct igb_adapter *); extern void igb_set_ethtool_ops(struct net_device *); --- linux-2.6.32.orig/drivers/net/igb/e1000_82575.c +++ linux-2.6.32/drivers/net/igb/e1000_82575.c @@ -46,7 +46,10 @@ static s32 igb_init_hw_82575(struct e1000_hw *); static s32 igb_phy_hw_reset_sgmii_82575(struct e1000_hw *); static s32 igb_read_phy_reg_sgmii_82575(struct e1000_hw *, u32, u16 *); +static s32 igb_read_phy_reg_82580(struct e1000_hw *, u32, u16 *); +static s32 igb_write_phy_reg_82580(struct e1000_hw *, u32, u16); static s32 igb_reset_hw_82575(struct e1000_hw *); +static s32 igb_reset_hw_82580(struct e1000_hw *); static s32 igb_set_d0_lplu_state_82575(struct e1000_hw *, bool); static s32 igb_setup_copper_link_82575(struct e1000_hw *); static s32 igb_setup_serdes_link_82575(struct e1000_hw *); @@ -62,6 +65,12 @@ static s32 igb_read_mac_addr_82575(struct e1000_hw *); static s32 igb_set_pcie_completion_timeout(struct e1000_hw *hw); +static const u16 e1000_82580_rxpbs_table[] = + { 36, 72, 144, 1, 2, 4, 8, 16, + 35, 70, 140 }; +#define E1000_82580_RXPBS_TABLE_SIZE \ + (sizeof(e1000_82580_rxpbs_table)/sizeof(u16)) + static s32 igb_get_invariants_82575(struct e1000_hw *hw) { struct e1000_phy_info *phy = &hw->phy; @@ -81,12 +90,20 @@ break; case E1000_DEV_ID_82576: case E1000_DEV_ID_82576_NS: + case E1000_DEV_ID_82576_NS_SERDES: case E1000_DEV_ID_82576_FIBER: case E1000_DEV_ID_82576_SERDES: case E1000_DEV_ID_82576_QUAD_COPPER: case E1000_DEV_ID_82576_SERDES_QUAD: mac->type = e1000_82576; break; + case E1000_DEV_ID_82580_COPPER: + case E1000_DEV_ID_82580_FIBER: + case E1000_DEV_ID_82580_SERDES: + case E1000_DEV_ID_82580_SGMII: + case E1000_DEV_ID_82580_COPPER_DUAL: + mac->type = e1000_82580; + break; default: return -E1000_ERR_MAC_INIT; break; @@ -109,6 +126,7 @@ dev_spec->sgmii_active = true; ctrl_ext |= E1000_CTRL_I2C_ENA; break; + case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX: case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES: hw->phy.media_type = e1000_media_type_internal_serdes; ctrl_ext |= E1000_CTRL_I2C_ENA; @@ -120,12 +138,26 @@ wr32(E1000_CTRL_EXT, ctrl_ext); + /* + * if using i2c make certain the MDICNFG register is cleared to prevent + * communications from being misrouted to the mdic registers + */ + if ((ctrl_ext & E1000_CTRL_I2C_ENA) && (hw->mac.type == e1000_82580)) + wr32(E1000_MDICNFG, 0); + /* Set mta register count */ mac->mta_reg_count = 128; /* Set rar entry count */ mac->rar_entry_count = E1000_RAR_ENTRIES_82575; if (mac->type == e1000_82576) mac->rar_entry_count = E1000_RAR_ENTRIES_82576; + if (mac->type == e1000_82580) + mac->rar_entry_count = E1000_RAR_ENTRIES_82580; + /* reset */ + if (mac->type == e1000_82580) + mac->ops.reset_hw = igb_reset_hw_82580; + else + mac->ops.reset_hw = igb_reset_hw_82575; /* Set if part includes ASF firmware */ mac->asf_firmware_present = true; /* Set if manageability features are enabled. */ @@ -193,6 +225,10 @@ phy->ops.reset = igb_phy_hw_reset_sgmii_82575; phy->ops.read_reg = igb_read_phy_reg_sgmii_82575; phy->ops.write_reg = igb_write_phy_reg_sgmii_82575; + } else if (hw->mac.type == e1000_82580) { + phy->ops.reset = igb_phy_hw_reset; + phy->ops.read_reg = igb_read_phy_reg_82580; + phy->ops.write_reg = igb_write_phy_reg_82580; } else { phy->ops.reset = igb_phy_hw_reset; phy->ops.read_reg = igb_read_phy_reg_igp; @@ -224,6 +260,12 @@ phy->ops.set_d0_lplu_state = igb_set_d0_lplu_state_82575; phy->ops.set_d3_lplu_state = igb_set_d3_lplu_state; break; + case I82580_I_PHY_ID: + phy->type = e1000_phy_82580; + phy->ops.force_speed_duplex = igb_phy_force_speed_duplex_82580; + phy->ops.get_cable_length = igb_get_cable_length_82580; + phy->ops.get_phy_info = igb_get_phy_info_82580; + break; default: return -E1000_ERR_PHY; } @@ -240,9 +282,10 @@ **/ static s32 igb_acquire_phy_82575(struct e1000_hw *hw) { - u16 mask; + u16 mask = E1000_SWFW_PHY0_SM; - mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM; + if (hw->bus.func == E1000_FUNC_1) + mask = E1000_SWFW_PHY1_SM; return igb_acquire_swfw_sync_82575(hw, mask); } @@ -256,9 +299,11 @@ **/ static void igb_release_phy_82575(struct e1000_hw *hw) { - u16 mask; + u16 mask = E1000_SWFW_PHY0_SM; + + if (hw->bus.func == E1000_FUNC_1) + mask = E1000_SWFW_PHY1_SM; - mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM; igb_release_swfw_sync_82575(hw, mask); } @@ -274,45 +319,23 @@ static s32 igb_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, u16 *data) { - struct e1000_phy_info *phy = &hw->phy; - u32 i, i2ccmd = 0; + s32 ret_val = -E1000_ERR_PARAM; if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { hw_dbg("PHY Address %u is out of range\n", offset); - return -E1000_ERR_PARAM; + goto out; } - /* - * Set up Op-code, Phy Address, and register address in the I2CCMD - * register. The MAC will take care of interfacing with the - * PHY to retrieve the desired data. - */ - i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | - (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | - (E1000_I2CCMD_OPCODE_READ)); - - wr32(E1000_I2CCMD, i2ccmd); + ret_val = hw->phy.ops.acquire(hw); + if (ret_val) + goto out; - /* Poll the ready bit to see if the I2C read completed */ - for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { - udelay(50); - i2ccmd = rd32(E1000_I2CCMD); - if (i2ccmd & E1000_I2CCMD_READY) - break; - } - if (!(i2ccmd & E1000_I2CCMD_READY)) { - hw_dbg("I2CCMD Read did not complete\n"); - return -E1000_ERR_PHY; - } - if (i2ccmd & E1000_I2CCMD_ERROR) { - hw_dbg("I2CCMD Error bit set\n"); - return -E1000_ERR_PHY; - } + ret_val = igb_read_phy_reg_i2c(hw, offset, data); - /* Need to byte-swap the 16-bit value. */ - *data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00); + hw->phy.ops.release(hw); - return 0; +out: + return ret_val; } /** @@ -327,47 +350,24 @@ static s32 igb_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, u16 data) { - struct e1000_phy_info *phy = &hw->phy; - u32 i, i2ccmd = 0; - u16 phy_data_swapped; + s32 ret_val = -E1000_ERR_PARAM; + if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { hw_dbg("PHY Address %d is out of range\n", offset); - return -E1000_ERR_PARAM; + goto out; } - /* Swap the data bytes for the I2C interface */ - phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00); - - /* - * Set up Op-code, Phy Address, and register address in the I2CCMD - * register. The MAC will take care of interfacing with the - * PHY to retrieve the desired data. - */ - i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | - (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | - E1000_I2CCMD_OPCODE_WRITE | - phy_data_swapped); + ret_val = hw->phy.ops.acquire(hw); + if (ret_val) + goto out; - wr32(E1000_I2CCMD, i2ccmd); + ret_val = igb_write_phy_reg_i2c(hw, offset, data); - /* Poll the ready bit to see if the I2C read completed */ - for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { - udelay(50); - i2ccmd = rd32(E1000_I2CCMD); - if (i2ccmd & E1000_I2CCMD_READY) - break; - } - if (!(i2ccmd & E1000_I2CCMD_READY)) { - hw_dbg("I2CCMD Write did not complete\n"); - return -E1000_ERR_PHY; - } - if (i2ccmd & E1000_I2CCMD_ERROR) { - hw_dbg("I2CCMD Error bit set\n"); - return -E1000_ERR_PHY; - } + hw->phy.ops.release(hw); - return 0; +out: + return ret_val; } /** @@ -676,6 +676,10 @@ if (hw->bus.func == 1) mask = E1000_NVM_CFG_DONE_PORT_1; + else if (hw->bus.func == E1000_FUNC_2) + mask = E1000_NVM_CFG_DONE_PORT_2; + else if (hw->bus.func == E1000_FUNC_3) + mask = E1000_NVM_CFG_DONE_PORT_3; while (timeout) { if (rd32(E1000_EEMNGCTL) & mask) @@ -706,9 +710,7 @@ s32 ret_val; u16 speed, duplex; - /* SGMII link check is done through the PCS register. */ - if ((hw->phy.media_type != e1000_media_type_copper) || - (igb_sgmii_active_82575(hw))) { + if (hw->phy.media_type != e1000_media_type_copper) { ret_val = igb_get_pcs_speed_and_duplex_82575(hw, &speed, &duplex); /* @@ -723,6 +725,7 @@ return ret_val; } + /** * igb_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex * @hw: pointer to the HW structure @@ -788,13 +791,27 @@ void igb_shutdown_serdes_link_82575(struct e1000_hw *hw) { u32 reg; + u16 eeprom_data = 0; if (hw->phy.media_type != e1000_media_type_internal_serdes || igb_sgmii_active_82575(hw)) return; - /* if the management interface is not enabled, then power down */ - if (!igb_enable_mng_pass_thru(hw)) { + if (hw->bus.func == E1000_FUNC_0) + hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data); + else if (hw->mac.type == e1000_82580) + hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A + + NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1, + &eeprom_data); + else if (hw->bus.func == E1000_FUNC_1) + hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data); + + /* + * If APM is not enabled in the EEPROM and management interface is + * not enabled, then power down. + */ + if (!(eeprom_data & E1000_NVM_APME_82575) && + !igb_enable_mng_pass_thru(hw)) { /* Disable PCS to turn off link */ reg = rd32(E1000_PCS_CFG0); reg &= ~E1000_PCS_CFG_PCS_EN; @@ -908,6 +925,11 @@ for (i = 0; i < mac->mta_reg_count; i++) array_wr32(E1000_MTA, i, 0); + /* Zero out the Unicast HASH table */ + hw_dbg("Zeroing the UTA\n"); + for (i = 0; i < mac->uta_reg_count; i++) + array_wr32(E1000_UTA, i, 0); + /* Setup link and flow control */ ret_val = igb_setup_link(hw); @@ -934,7 +956,6 @@ { u32 ctrl; s32 ret_val; - bool link; ctrl = rd32(E1000_CTRL); ctrl |= E1000_CTRL_SLU; @@ -946,6 +967,9 @@ goto out; if (igb_sgmii_active_82575(hw) && !hw->phy.reset_disable) { + /* allow time for SFP cage time to power up phy */ + msleep(300); + ret_val = hw->phy.ops.reset(hw); if (ret_val) { hw_dbg("Error resetting the PHY.\n"); @@ -959,6 +983,9 @@ case e1000_phy_igp_3: ret_val = igb_copper_link_setup_igp(hw); break; + case e1000_phy_82580: + ret_val = igb_copper_link_setup_82580(hw); + break; default: ret_val = -E1000_ERR_PHY; break; @@ -967,57 +994,24 @@ if (ret_val) goto out; - if (hw->mac.autoneg) { - /* - * Setup autoneg and flow control advertisement - * and perform autonegotiation. - */ - ret_val = igb_copper_link_autoneg(hw); - if (ret_val) - goto out; - } else { - /* - * PHY will be set to 10H, 10F, 100H or 100F - * depending on user settings. - */ - hw_dbg("Forcing Speed and Duplex\n"); - ret_val = hw->phy.ops.force_speed_duplex(hw); - if (ret_val) { - hw_dbg("Error Forcing Speed and Duplex\n"); - goto out; - } - } - - /* - * Check link status. Wait up to 100 microseconds for link to become - * valid. - */ - ret_val = igb_phy_has_link(hw, COPPER_LINK_UP_LIMIT, 10, &link); - if (ret_val) - goto out; - - if (link) { - hw_dbg("Valid link established!!!\n"); - /* Config the MAC and PHY after link is up */ - igb_config_collision_dist(hw); - ret_val = igb_config_fc_after_link_up(hw); - } else { - hw_dbg("Unable to establish link!!!\n"); - } - + ret_val = igb_setup_copper_link(hw); out: return ret_val; } /** - * igb_setup_serdes_link_82575 - Setup link for fiber/serdes + * igb_setup_serdes_link_82575 - Setup link for serdes * @hw: pointer to the HW structure * - * Configures speed and duplex for fiber and serdes links. + * Configure the physical coding sub-layer (PCS) link. The PCS link is + * used on copper connections where the serialized gigabit media independent + * interface (sgmii), or serdes fiber is being used. Configures the link + * for auto-negotiation or forces speed/duplex. **/ static s32 igb_setup_serdes_link_82575(struct e1000_hw *hw) { - u32 ctrl_reg, reg; + u32 ctrl_ext, ctrl_reg, reg; + bool pcs_autoneg; if ((hw->phy.media_type != e1000_media_type_internal_serdes) && !igb_sgmii_active_82575(hw)) @@ -1032,9 +1026,9 @@ wr32(E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK); /* power on the sfp cage if present */ - reg = rd32(E1000_CTRL_EXT); - reg &= ~E1000_CTRL_EXT_SDP3_DATA; - wr32(E1000_CTRL_EXT, reg); + ctrl_ext = rd32(E1000_CTRL_EXT); + ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA; + wr32(E1000_CTRL_EXT, ctrl_ext); ctrl_reg = rd32(E1000_CTRL); ctrl_reg |= E1000_CTRL_SLU; @@ -1051,15 +1045,31 @@ reg = rd32(E1000_PCS_LCTL); - if (igb_sgmii_active_82575(hw)) { - /* allow time for SFP cage to power up phy */ - msleep(300); + /* default pcs_autoneg to the same setting as mac autoneg */ + pcs_autoneg = hw->mac.autoneg; - /* AN time out should be disabled for SGMII mode */ + switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) { + case E1000_CTRL_EXT_LINK_MODE_SGMII: + /* sgmii mode lets the phy handle forcing speed/duplex */ + pcs_autoneg = true; + /* autoneg time out should be disabled for SGMII mode */ reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT); - } else { + break; + case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX: + /* disable PCS autoneg and support parallel detect only */ + pcs_autoneg = false; + default: + /* + * non-SGMII modes only supports a speed of 1000/Full for the + * link so it is best to just force the MAC and let the pcs + * link either autoneg or be forced to 1000/Full + */ ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD | E1000_CTRL_FD | E1000_CTRL_FRCDPX; + + /* set speed of 1000/Full if speed/duplex is forced */ + reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL; + break; } wr32(E1000_CTRL, ctrl_reg); @@ -1070,7 +1080,6 @@ * mode that will be compatible with older link partners and switches. * However, both are supported by the hardware and some drivers/tools. */ - reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP | E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK); @@ -1080,25 +1089,16 @@ */ reg |= E1000_PCS_LCTL_FORCE_FCTRL; - /* - * we always set sgmii to autoneg since it is the phy that will be - * forcing the link and the serdes is just a go-between - */ - if (hw->mac.autoneg || igb_sgmii_active_82575(hw)) { + if (pcs_autoneg) { /* Set PCS register for autoneg */ - reg |= E1000_PCS_LCTL_FSV_1000 | /* Force 1000 */ - E1000_PCS_LCTL_FDV_FULL | /* SerDes Full duplex */ - E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */ - E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */ - hw_dbg("Configuring Autoneg; PCS_LCTL = 0x%08X\n", reg); + reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */ + E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */ + hw_dbg("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg); } else { - /* Set PCS register for forced speed */ - reg |= E1000_PCS_LCTL_FLV_LINK_UP | /* Force link up */ - E1000_PCS_LCTL_FSV_1000 | /* Force 1000 */ - E1000_PCS_LCTL_FDV_FULL | /* SerDes Full duplex */ - E1000_PCS_LCTL_FSD | /* Force Speed */ - E1000_PCS_LCTL_FORCE_LINK; /* Force Link */ - hw_dbg("Configuring Forced Link; PCS_LCTL = 0x%08X\n", reg); + /* Set PCS register for forced link */ + reg |= E1000_PCS_LCTL_FSD; /* Force Speed */ + + hw_dbg("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg); } wr32(E1000_PCS_LCTL, reg); @@ -1167,9 +1167,18 @@ { s32 ret_val = 0; - if (igb_check_alt_mac_addr(hw)) - ret_val = igb_read_mac_addr(hw); + /* + * If there's an alternate MAC address place it in RAR0 + * so that it will override the Si installed default perm + * address. + */ + ret_val = igb_check_alt_mac_addr(hw); + if (ret_val) + goto out; + + ret_val = igb_read_mac_addr(hw); +out: return ret_val; } @@ -1181,61 +1190,59 @@ **/ static void igb_clear_hw_cntrs_82575(struct e1000_hw *hw) { - u32 temp; - igb_clear_hw_cntrs_base(hw); - temp = rd32(E1000_PRC64); - temp = rd32(E1000_PRC127); - temp = rd32(E1000_PRC255); - temp = rd32(E1000_PRC511); - temp = rd32(E1000_PRC1023); - temp = rd32(E1000_PRC1522); - temp = rd32(E1000_PTC64); - temp = rd32(E1000_PTC127); - temp = rd32(E1000_PTC255); - temp = rd32(E1000_PTC511); - temp = rd32(E1000_PTC1023); - temp = rd32(E1000_PTC1522); - - temp = rd32(E1000_ALGNERRC); - temp = rd32(E1000_RXERRC); - temp = rd32(E1000_TNCRS); - temp = rd32(E1000_CEXTERR); - temp = rd32(E1000_TSCTC); - temp = rd32(E1000_TSCTFC); - - temp = rd32(E1000_MGTPRC); - temp = rd32(E1000_MGTPDC); - temp = rd32(E1000_MGTPTC); - - temp = rd32(E1000_IAC); - temp = rd32(E1000_ICRXOC); - - temp = rd32(E1000_ICRXPTC); - temp = rd32(E1000_ICRXATC); - temp = rd32(E1000_ICTXPTC); - temp = rd32(E1000_ICTXATC); - temp = rd32(E1000_ICTXQEC); - temp = rd32(E1000_ICTXQMTC); - temp = rd32(E1000_ICRXDMTC); - - temp = rd32(E1000_CBTMPC); - temp = rd32(E1000_HTDPMC); - temp = rd32(E1000_CBRMPC); - temp = rd32(E1000_RPTHC); - temp = rd32(E1000_HGPTC); - temp = rd32(E1000_HTCBDPC); - temp = rd32(E1000_HGORCL); - temp = rd32(E1000_HGORCH); - temp = rd32(E1000_HGOTCL); - temp = rd32(E1000_HGOTCH); - temp = rd32(E1000_LENERRS); + rd32(E1000_PRC64); + rd32(E1000_PRC127); + rd32(E1000_PRC255); + rd32(E1000_PRC511); + rd32(E1000_PRC1023); + rd32(E1000_PRC1522); + rd32(E1000_PTC64); + rd32(E1000_PTC127); + rd32(E1000_PTC255); + rd32(E1000_PTC511); + rd32(E1000_PTC1023); + rd32(E1000_PTC1522); + + rd32(E1000_ALGNERRC); + rd32(E1000_RXERRC); + rd32(E1000_TNCRS); + rd32(E1000_CEXTERR); + rd32(E1000_TSCTC); + rd32(E1000_TSCTFC); + + rd32(E1000_MGTPRC); + rd32(E1000_MGTPDC); + rd32(E1000_MGTPTC); + + rd32(E1000_IAC); + rd32(E1000_ICRXOC); + + rd32(E1000_ICRXPTC); + rd32(E1000_ICRXATC); + rd32(E1000_ICTXPTC); + rd32(E1000_ICTXATC); + rd32(E1000_ICTXQEC); + rd32(E1000_ICTXQMTC); + rd32(E1000_ICRXDMTC); + + rd32(E1000_CBTMPC); + rd32(E1000_HTDPMC); + rd32(E1000_CBRMPC); + rd32(E1000_RPTHC); + rd32(E1000_HGPTC); + rd32(E1000_HTCBDPC); + rd32(E1000_HGORCL); + rd32(E1000_HGORCH); + rd32(E1000_HGOTCL); + rd32(E1000_HGOTCH); + rd32(E1000_LENERRS); /* This register should not be read in copper configurations */ if (hw->phy.media_type == e1000_media_type_internal_serdes || igb_sgmii_active_82575(hw)) - temp = rd32(E1000_SCVPC); + rd32(E1000_SCVPC); } /** @@ -1400,8 +1407,183 @@ wr32(E1000_VT_CTL, vt_ctl); } +/** + * igb_read_phy_reg_82580 - Read 82580 MDI control register + * @hw: pointer to the HW structure + * @offset: register offset to be read + * @data: pointer to the read data + * + * Reads the MDI control register in the PHY at offset and stores the + * information read to data. + **/ +static s32 igb_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data) +{ + u32 mdicnfg = 0; + s32 ret_val; + + + ret_val = hw->phy.ops.acquire(hw); + if (ret_val) + goto out; + + /* + * We config the phy address in MDICNFG register now. Same bits + * as before. The values in MDIC can be written but will be + * ignored. This allows us to call the old function after + * configuring the PHY address in the new register + */ + mdicnfg = (hw->phy.addr << E1000_MDIC_PHY_SHIFT); + wr32(E1000_MDICNFG, mdicnfg); + + ret_val = igb_read_phy_reg_mdic(hw, offset, data); + + hw->phy.ops.release(hw); + +out: + return ret_val; +} + +/** + * igb_write_phy_reg_82580 - Write 82580 MDI control register + * @hw: pointer to the HW structure + * @offset: register offset to write to + * @data: data to write to register at offset + * + * Writes data to MDI control register in the PHY at offset. + **/ +static s32 igb_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data) +{ + u32 mdicnfg = 0; + s32 ret_val; + + + ret_val = hw->phy.ops.acquire(hw); + if (ret_val) + goto out; + + /* + * We config the phy address in MDICNFG register now. Same bits + * as before. The values in MDIC can be written but will be + * ignored. This allows us to call the old function after + * configuring the PHY address in the new register + */ + mdicnfg = (hw->phy.addr << E1000_MDIC_PHY_SHIFT); + wr32(E1000_MDICNFG, mdicnfg); + + ret_val = igb_write_phy_reg_mdic(hw, offset, data); + + hw->phy.ops.release(hw); + +out: + return ret_val; +} + +/** + * igb_reset_hw_82580 - Reset hardware + * @hw: pointer to the HW structure + * + * This resets function or entire device (all ports, etc.) + * to a known state. + **/ +static s32 igb_reset_hw_82580(struct e1000_hw *hw) +{ + s32 ret_val = 0; + /* BH SW mailbox bit in SW_FW_SYNC */ + u16 swmbsw_mask = E1000_SW_SYNCH_MB; + u32 ctrl, icr; + bool global_device_reset = hw->dev_spec._82575.global_device_reset; + + + hw->dev_spec._82575.global_device_reset = false; + + /* Get current control state. */ + ctrl = rd32(E1000_CTRL); + + /* + * Prevent the PCI-E bus from sticking if there is no TLP connection + * on the last TLP read/write transaction when MAC is reset. + */ + ret_val = igb_disable_pcie_master(hw); + if (ret_val) + hw_dbg("PCI-E Master disable polling has failed.\n"); + + hw_dbg("Masking off all interrupts\n"); + wr32(E1000_IMC, 0xffffffff); + wr32(E1000_RCTL, 0); + wr32(E1000_TCTL, E1000_TCTL_PSP); + wrfl(); + + msleep(10); + + /* Determine whether or not a global dev reset is requested */ + if (global_device_reset && + igb_acquire_swfw_sync_82575(hw, swmbsw_mask)) + global_device_reset = false; + + if (global_device_reset && + !(rd32(E1000_STATUS) & E1000_STAT_DEV_RST_SET)) + ctrl |= E1000_CTRL_DEV_RST; + else + ctrl |= E1000_CTRL_RST; + + wr32(E1000_CTRL, ctrl); + + /* Add delay to insure DEV_RST has time to complete */ + if (global_device_reset) + msleep(5); + + ret_val = igb_get_auto_rd_done(hw); + if (ret_val) { + /* + * When auto config read does not complete, do not + * return with an error. This can happen in situations + * where there is no eeprom and prevents getting link. + */ + hw_dbg("Auto Read Done did not complete\n"); + } + + /* If EEPROM is not present, run manual init scripts */ + if ((rd32(E1000_EECD) & E1000_EECD_PRES) == 0) + igb_reset_init_script_82575(hw); + + /* clear global device reset status bit */ + wr32(E1000_STATUS, E1000_STAT_DEV_RST_SET); + + /* Clear any pending interrupt events. */ + wr32(E1000_IMC, 0xffffffff); + icr = rd32(E1000_ICR); + + /* Install any alternate MAC address into RAR0 */ + ret_val = igb_check_alt_mac_addr(hw); + + /* Release semaphore */ + if (global_device_reset) + igb_release_swfw_sync_82575(hw, swmbsw_mask); + + return ret_val; +} + +/** + * igb_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual RX PBA size + * @data: data received by reading RXPBS register + * + * The 82580 uses a table based approach for packet buffer allocation sizes. + * This function converts the retrieved value into the correct table value + * 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 + * 0x0 36 72 144 1 2 4 8 16 + * 0x8 35 70 140 rsv rsv rsv rsv rsv + */ +u16 igb_rxpbs_adjust_82580(u32 data) +{ + u16 ret_val = 0; + + if (data < E1000_82580_RXPBS_TABLE_SIZE) + ret_val = e1000_82580_rxpbs_table[data]; + + return ret_val; +} + static struct e1000_mac_operations e1000_mac_ops_82575 = { - .reset_hw = igb_reset_hw_82575, .init_hw = igb_init_hw_82575, .check_for_link = igb_check_for_link_82575, .rar_set = igb_rar_set, --- linux-2.6.32.orig/drivers/net/igb/e1000_phy.h +++ linux-2.6.32/drivers/net/igb/e1000_phy.h @@ -43,7 +43,6 @@ s32 igb_check_downshift(struct e1000_hw *hw); s32 igb_check_reset_block(struct e1000_hw *hw); -s32 igb_copper_link_autoneg(struct e1000_hw *hw); s32 igb_copper_link_setup_igp(struct e1000_hw *hw); s32 igb_copper_link_setup_m88(struct e1000_hw *hw); s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw); @@ -57,10 +56,19 @@ s32 igb_phy_hw_reset(struct e1000_hw *hw); s32 igb_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data); s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active); +s32 igb_setup_copper_link(struct e1000_hw *hw); s32 igb_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data); s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations, u32 usec_interval, bool *success); s32 igb_phy_init_script_igp3(struct e1000_hw *hw); +s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data); +s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data); +s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data); +s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data); +s32 igb_copper_link_setup_82580(struct e1000_hw *hw); +s32 igb_get_phy_info_82580(struct e1000_hw *hw); +s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw); +s32 igb_get_cable_length_82580(struct e1000_hw *hw); /* IGP01E1000 Specific Registers */ #define IGP01E1000_PHY_PORT_CONFIG 0x10 /* Port Config */ @@ -75,6 +83,33 @@ #define IGP01E1000_PSCR_FORCE_MDI_MDIX 0x2000 /* 0=MDI, 1=MDIX */ #define IGP01E1000_PSCFR_SMART_SPEED 0x0080 +#define I82580_ADDR_REG 16 +#define I82580_CFG_REG 22 +#define I82580_CFG_ASSERT_CRS_ON_TX (1 << 15) +#define I82580_CFG_ENABLE_DOWNSHIFT (3 << 10) /* auto downshift 100/10 */ +#define I82580_CTRL_REG 23 +#define I82580_CTRL_DOWNSHIFT_MASK (7 << 10) + +/* 82580 specific PHY registers */ +#define I82580_PHY_CTRL_2 18 +#define I82580_PHY_LBK_CTRL 19 +#define I82580_PHY_STATUS_2 26 +#define I82580_PHY_DIAG_STATUS 31 + +/* I82580 PHY Status 2 */ +#define I82580_PHY_STATUS2_REV_POLARITY 0x0400 +#define I82580_PHY_STATUS2_MDIX 0x0800 +#define I82580_PHY_STATUS2_SPEED_MASK 0x0300 +#define I82580_PHY_STATUS2_SPEED_1000MBPS 0x0200 +#define I82580_PHY_STATUS2_SPEED_100MBPS 0x0100 + +/* I82580 PHY Control 2 */ +#define I82580_PHY_CTRL2_AUTO_MDIX 0x0400 +#define I82580_PHY_CTRL2_FORCE_MDI_MDIX 0x0200 + +/* I82580 PHY Diagnostics Status */ +#define I82580_DSTATUS_CABLE_LENGTH 0x03FC +#define I82580_DSTATUS_CABLE_LENGTH_SHIFT 2 /* Enable flexible speed on link-up */ #define IGP02E1000_PM_D0_LPLU 0x0002 /* For D0a states */ #define IGP02E1000_PM_D3_LPLU 0x0004 /* For all other states */ --- linux-2.6.32.orig/drivers/net/igb/igb_main.c +++ linux-2.6.32/drivers/net/igb/igb_main.c @@ -49,7 +49,7 @@ #endif #include "igb.h" -#define DRV_VERSION "1.3.16-k2" +#define DRV_VERSION "2.1.0-k2" char igb_driver_name[] = "igb"; char igb_driver_version[] = DRV_VERSION; static const char igb_driver_string[] = @@ -61,8 +61,14 @@ }; static struct pci_device_id igb_pci_tbl[] = { + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_COPPER), board_82575 }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_FIBER), board_82575 }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_SERDES), board_82575 }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_SGMII), board_82575 }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_COPPER_DUAL), board_82575 }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576), board_82575 }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_NS), board_82575 }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_NS_SERDES), board_82575 }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_FIBER), board_82575 }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES), board_82575 }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_SERDES_QUAD), board_82575 }, @@ -81,6 +87,7 @@ static int igb_setup_all_rx_resources(struct igb_adapter *); static void igb_free_all_tx_resources(struct igb_adapter *); static void igb_free_all_rx_resources(struct igb_adapter *); +static void igb_setup_mrqc(struct igb_adapter *); void igb_update_stats(struct igb_adapter *); static int igb_probe(struct pci_dev *, const struct pci_device_id *); static void __devexit igb_remove(struct pci_dev *pdev); @@ -89,7 +96,6 @@ static int igb_close(struct net_device *); static void igb_configure_tx(struct igb_adapter *); static void igb_configure_rx(struct igb_adapter *); -static void igb_setup_rctl(struct igb_adapter *); static void igb_clean_all_tx_rings(struct igb_adapter *); static void igb_clean_all_rx_rings(struct igb_adapter *); static void igb_clean_tx_ring(struct igb_ring *); @@ -98,28 +104,22 @@ static void igb_update_phy_info(unsigned long); static void igb_watchdog(unsigned long); static void igb_watchdog_task(struct work_struct *); -static netdev_tx_t igb_xmit_frame_ring_adv(struct sk_buff *, - struct net_device *, - struct igb_ring *); -static netdev_tx_t igb_xmit_frame_adv(struct sk_buff *skb, - struct net_device *); +static netdev_tx_t igb_xmit_frame_adv(struct sk_buff *skb, struct net_device *); static struct net_device_stats *igb_get_stats(struct net_device *); static int igb_change_mtu(struct net_device *, int); static int igb_set_mac(struct net_device *, void *); +static void igb_set_uta(struct igb_adapter *adapter); static irqreturn_t igb_intr(int irq, void *); static irqreturn_t igb_intr_msi(int irq, void *); static irqreturn_t igb_msix_other(int irq, void *); -static irqreturn_t igb_msix_rx(int irq, void *); -static irqreturn_t igb_msix_tx(int irq, void *); +static irqreturn_t igb_msix_ring(int irq, void *); #ifdef CONFIG_IGB_DCA -static void igb_update_rx_dca(struct igb_ring *); -static void igb_update_tx_dca(struct igb_ring *); +static void igb_update_dca(struct igb_q_vector *); static void igb_setup_dca(struct igb_adapter *); #endif /* CONFIG_IGB_DCA */ -static bool igb_clean_tx_irq(struct igb_ring *); +static bool igb_clean_tx_irq(struct igb_q_vector *); static int igb_poll(struct napi_struct *, int); -static bool igb_clean_rx_irq_adv(struct igb_ring *, int *, int); -static void igb_alloc_rx_buffers_adv(struct igb_ring *, int); +static bool igb_clean_rx_irq_adv(struct igb_q_vector *, int *, int); static int igb_ioctl(struct net_device *, struct ifreq *, int cmd); static void igb_tx_timeout(struct net_device *); static void igb_reset_task(struct work_struct *); @@ -127,57 +127,13 @@ static void igb_vlan_rx_add_vid(struct net_device *, u16); static void igb_vlan_rx_kill_vid(struct net_device *, u16); static void igb_restore_vlan(struct igb_adapter *); +static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8); static void igb_ping_all_vfs(struct igb_adapter *); static void igb_msg_task(struct igb_adapter *); -static int igb_rcv_msg_from_vf(struct igb_adapter *, u32); -static inline void igb_set_rah_pool(struct e1000_hw *, int , int); static void igb_vmm_control(struct igb_adapter *); -static int igb_set_vf_mac(struct igb_adapter *adapter, int, unsigned char *); +static int igb_set_vf_mac(struct igb_adapter *, int, unsigned char *); static void igb_restore_vf_multicasts(struct igb_adapter *adapter); -static inline void igb_set_vmolr(struct e1000_hw *hw, int vfn) -{ - u32 reg_data; - - reg_data = rd32(E1000_VMOLR(vfn)); - reg_data |= E1000_VMOLR_BAM | /* Accept broadcast */ - E1000_VMOLR_ROPE | /* Accept packets matched in UTA */ - E1000_VMOLR_ROMPE | /* Accept packets matched in MTA */ - E1000_VMOLR_AUPE | /* Accept untagged packets */ - E1000_VMOLR_STRVLAN; /* Strip vlan tags */ - wr32(E1000_VMOLR(vfn), reg_data); -} - -static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size, - int vfn) -{ - struct e1000_hw *hw = &adapter->hw; - u32 vmolr; - - /* if it isn't the PF check to see if VFs are enabled and - * increase the size to support vlan tags */ - if (vfn < adapter->vfs_allocated_count && - adapter->vf_data[vfn].vlans_enabled) - size += VLAN_TAG_SIZE; - - vmolr = rd32(E1000_VMOLR(vfn)); - vmolr &= ~E1000_VMOLR_RLPML_MASK; - vmolr |= size | E1000_VMOLR_LPE; - wr32(E1000_VMOLR(vfn), vmolr); - - return 0; -} - -static inline void igb_set_rah_pool(struct e1000_hw *hw, int pool, int entry) -{ - u32 reg_data; - - reg_data = rd32(E1000_RAH(entry)); - reg_data &= ~E1000_RAH_POOL_MASK; - reg_data |= E1000_RAH_POOL_1 << pool;; - wr32(E1000_RAH(entry), reg_data); -} - #ifdef CONFIG_PM static int igb_suspend(struct pci_dev *, pm_message_t); static int igb_resume(struct pci_dev *); @@ -228,46 +184,12 @@ .err_handler = &igb_err_handler }; -static int global_quad_port_a; /* global quad port a indication */ - MODULE_AUTHOR("Intel Corporation, "); MODULE_DESCRIPTION("Intel(R) Gigabit Ethernet Network Driver"); MODULE_LICENSE("GPL"); MODULE_VERSION(DRV_VERSION); /** - * Scale the NIC clock cycle by a large factor so that - * relatively small clock corrections can be added or - * substracted at each clock tick. The drawbacks of a - * large factor are a) that the clock register overflows - * more quickly (not such a big deal) and b) that the - * increment per tick has to fit into 24 bits. - * - * Note that - * TIMINCA = IGB_TSYNC_CYCLE_TIME_IN_NANOSECONDS * - * IGB_TSYNC_SCALE - * TIMINCA += TIMINCA * adjustment [ppm] / 1e9 - * - * The base scale factor is intentionally a power of two - * so that the division in %struct timecounter can be done with - * a shift. - */ -#define IGB_TSYNC_SHIFT (19) -#define IGB_TSYNC_SCALE (1<= (1<<24) -# error IGB_TSYNC_SCALE and/or IGB_TSYNC_CYCLE_TIME_IN_NANOSECONDS are too large to fit into TIMINCA -#endif - -/** * igb_read_clock - read raw cycle counter (to be used by time counter) */ static cycle_t igb_read_clock(const struct cyclecounter *tc) @@ -275,11 +197,21 @@ struct igb_adapter *adapter = container_of(tc, struct igb_adapter, cycles); struct e1000_hw *hw = &adapter->hw; - u64 stamp; + u64 stamp = 0; + int shift = 0; - stamp = rd32(E1000_SYSTIML); - stamp |= (u64)rd32(E1000_SYSTIMH) << 32ULL; + /* + * The timestamp latches on lowest register read. For the 82580 + * the lowest register is SYSTIMR instead of SYSTIML. However we never + * adjusted TIMINCA so SYSTIMR will just read as all 0s so ignore it. + */ + if (hw->mac.type == e1000_82580) { + stamp = rd32(E1000_SYSTIMR) >> 8; + shift = IGB_82580_TSYNC_SHIFT; + } + stamp |= (u64)rd32(E1000_SYSTIML) << shift; + stamp |= (u64)rd32(E1000_SYSTIMH) << (shift + 32); return stamp; } @@ -320,17 +252,6 @@ #endif /** - * igb_desc_unused - calculate if we have unused descriptors - **/ -static int igb_desc_unused(struct igb_ring *ring) -{ - if (ring->next_to_clean > ring->next_to_use) - return ring->next_to_clean - ring->next_to_use - 1; - - return ring->count + ring->next_to_clean - ring->next_to_use - 1; -} - -/** * igb_init_module - Driver Registration Routine * * igb_init_module is the first routine called when the driver is @@ -344,12 +265,9 @@ printk(KERN_INFO "%s\n", igb_copyright); - global_quad_port_a = 0; - #ifdef CONFIG_IGB_DCA dca_register_notify(&dca_notifier); #endif - ret = pci_register_driver(&igb_driver); return ret; } @@ -382,8 +300,8 @@ **/ static void igb_cache_ring_register(struct igb_adapter *adapter) { - int i; - unsigned int rbase_offset = adapter->vfs_allocated_count; + int i = 0, j = 0; + u32 rbase_offset = adapter->vfs_allocated_count; switch (adapter->hw.mac.type) { case e1000_82576: @@ -392,23 +310,37 @@ * In order to avoid collision we start at the first free queue * and continue consuming queues in the same sequence */ - for (i = 0; i < adapter->num_rx_queues; i++) - adapter->rx_ring[i].reg_idx = rbase_offset + - Q_IDX_82576(i); - for (i = 0; i < adapter->num_tx_queues; i++) - adapter->tx_ring[i].reg_idx = rbase_offset + - Q_IDX_82576(i); - break; + if (adapter->vfs_allocated_count) { + for (; i < adapter->rss_queues; i++) + adapter->rx_ring[i].reg_idx = rbase_offset + + Q_IDX_82576(i); + for (; j < adapter->rss_queues; j++) + adapter->tx_ring[j].reg_idx = rbase_offset + + Q_IDX_82576(j); + } case e1000_82575: + case e1000_82580: default: - for (i = 0; i < adapter->num_rx_queues; i++) - adapter->rx_ring[i].reg_idx = i; - for (i = 0; i < adapter->num_tx_queues; i++) - adapter->tx_ring[i].reg_idx = i; + for (; i < adapter->num_rx_queues; i++) + adapter->rx_ring[i].reg_idx = rbase_offset + i; + for (; j < adapter->num_tx_queues; j++) + adapter->tx_ring[j].reg_idx = rbase_offset + j; break; } } +static void igb_free_queues(struct igb_adapter *adapter) +{ + kfree(adapter->tx_ring); + kfree(adapter->rx_ring); + + adapter->tx_ring = NULL; + adapter->rx_ring = NULL; + + adapter->num_rx_queues = 0; + adapter->num_tx_queues = 0; +} + /** * igb_alloc_queues - Allocate memory for all rings * @adapter: board private structure to initialize @@ -423,59 +355,61 @@ adapter->tx_ring = kcalloc(adapter->num_tx_queues, sizeof(struct igb_ring), GFP_KERNEL); if (!adapter->tx_ring) - return -ENOMEM; + goto err; adapter->rx_ring = kcalloc(adapter->num_rx_queues, sizeof(struct igb_ring), GFP_KERNEL); - if (!adapter->rx_ring) { - kfree(adapter->tx_ring); - return -ENOMEM; - } - - adapter->rx_ring->buddy = adapter->tx_ring; + if (!adapter->rx_ring) + goto err; for (i = 0; i < adapter->num_tx_queues; i++) { struct igb_ring *ring = &(adapter->tx_ring[i]); ring->count = adapter->tx_ring_count; - ring->adapter = adapter; ring->queue_index = i; + ring->pdev = adapter->pdev; + ring->netdev = adapter->netdev; + /* For 82575, context index must be unique per ring. */ + if (adapter->hw.mac.type == e1000_82575) + ring->flags = IGB_RING_FLAG_TX_CTX_IDX; } + for (i = 0; i < adapter->num_rx_queues; i++) { struct igb_ring *ring = &(adapter->rx_ring[i]); ring->count = adapter->rx_ring_count; - ring->adapter = adapter; ring->queue_index = i; - ring->itr_register = E1000_ITR; - - /* set a default napi handler for each rx_ring */ - netif_napi_add(adapter->netdev, &ring->napi, igb_poll, 64); + ring->pdev = adapter->pdev; + ring->netdev = adapter->netdev; + ring->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE; + ring->flags = IGB_RING_FLAG_RX_CSUM; /* enable rx checksum */ + /* set flag indicating ring supports SCTP checksum offload */ + if (adapter->hw.mac.type >= e1000_82576) + ring->flags |= IGB_RING_FLAG_RX_SCTP_CSUM; } igb_cache_ring_register(adapter); - return 0; -} - -static void igb_free_queues(struct igb_adapter *adapter) -{ - int i; - for (i = 0; i < adapter->num_rx_queues; i++) - netif_napi_del(&adapter->rx_ring[i].napi); + return 0; - adapter->num_rx_queues = 0; - adapter->num_tx_queues = 0; +err: + igb_free_queues(adapter); - kfree(adapter->tx_ring); - kfree(adapter->rx_ring); + return -ENOMEM; } #define IGB_N0_QUEUE -1 -static void igb_assign_vector(struct igb_adapter *adapter, int rx_queue, - int tx_queue, int msix_vector) +static void igb_assign_vector(struct igb_q_vector *q_vector, int msix_vector) { u32 msixbm = 0; + struct igb_adapter *adapter = q_vector->adapter; struct e1000_hw *hw = &adapter->hw; u32 ivar, index; + int rx_queue = IGB_N0_QUEUE; + int tx_queue = IGB_N0_QUEUE; + + if (q_vector->rx_ring) + rx_queue = q_vector->rx_ring->reg_idx; + if (q_vector->tx_ring) + tx_queue = q_vector->tx_ring->reg_idx; switch (hw->mac.type) { case e1000_82575: @@ -483,16 +417,14 @@ bitmask for the EICR/EIMS/EIMC registers. To assign one or more queues to a vector, we write the appropriate bits into the MSIXBM register for that vector. */ - if (rx_queue > IGB_N0_QUEUE) { + if (rx_queue > IGB_N0_QUEUE) msixbm = E1000_EICR_RX_QUEUE0 << rx_queue; - adapter->rx_ring[rx_queue].eims_value = msixbm; - } - if (tx_queue > IGB_N0_QUEUE) { + if (tx_queue > IGB_N0_QUEUE) msixbm |= E1000_EICR_TX_QUEUE0 << tx_queue; - adapter->tx_ring[tx_queue].eims_value = - E1000_EICR_TX_QUEUE0 << tx_queue; - } + if (!adapter->msix_entries && msix_vector == 0) + msixbm |= E1000_EIMS_OTHER; array_wr32(E1000_MSIXBM(0), msix_vector, msixbm); + q_vector->eims_value = msixbm; break; case e1000_82576: /* 82576 uses a table-based method for assigning vectors. @@ -500,7 +432,40 @@ a vector number along with a "valid" bit. Sadly, the layout of the table is somewhat counterintuitive. */ if (rx_queue > IGB_N0_QUEUE) { - index = (rx_queue >> 1) + adapter->vfs_allocated_count; + index = (rx_queue & 0x7); + ivar = array_rd32(E1000_IVAR0, index); + if (rx_queue < 8) { + /* vector goes into low byte of register */ + ivar = ivar & 0xFFFFFF00; + ivar |= msix_vector | E1000_IVAR_VALID; + } else { + /* vector goes into third byte of register */ + ivar = ivar & 0xFF00FFFF; + ivar |= (msix_vector | E1000_IVAR_VALID) << 16; + } + array_wr32(E1000_IVAR0, index, ivar); + } + if (tx_queue > IGB_N0_QUEUE) { + index = (tx_queue & 0x7); + ivar = array_rd32(E1000_IVAR0, index); + if (tx_queue < 8) { + /* vector goes into second byte of register */ + ivar = ivar & 0xFFFF00FF; + ivar |= (msix_vector | E1000_IVAR_VALID) << 8; + } else { + /* vector goes into high byte of register */ + ivar = ivar & 0x00FFFFFF; + ivar |= (msix_vector | E1000_IVAR_VALID) << 24; + } + array_wr32(E1000_IVAR0, index, ivar); + } + q_vector->eims_value = 1 << msix_vector; + break; + case e1000_82580: + /* 82580 uses the same table-based approach as 82576 but has fewer + entries as a result we carry over for queues greater than 4. */ + if (rx_queue > IGB_N0_QUEUE) { + index = (rx_queue >> 1); ivar = array_rd32(E1000_IVAR0, index); if (rx_queue & 0x1) { /* vector goes into third byte of register */ @@ -511,11 +476,10 @@ ivar = ivar & 0xFFFFFF00; ivar |= msix_vector | E1000_IVAR_VALID; } - adapter->rx_ring[rx_queue].eims_value= 1 << msix_vector; array_wr32(E1000_IVAR0, index, ivar); } if (tx_queue > IGB_N0_QUEUE) { - index = (tx_queue >> 1) + adapter->vfs_allocated_count; + index = (tx_queue >> 1); ivar = array_rd32(E1000_IVAR0, index); if (tx_queue & 0x1) { /* vector goes into high byte of register */ @@ -526,9 +490,9 @@ ivar = ivar & 0xFFFF00FF; ivar |= (msix_vector | E1000_IVAR_VALID) << 8; } - adapter->tx_ring[tx_queue].eims_value= 1 << msix_vector; array_wr32(E1000_IVAR0, index, ivar); } + q_vector->eims_value = 1 << msix_vector; break; default: BUG(); @@ -549,43 +513,10 @@ struct e1000_hw *hw = &adapter->hw; adapter->eims_enable_mask = 0; - if (hw->mac.type == e1000_82576) - /* Turn on MSI-X capability first, or our settings - * won't stick. And it will take days to debug. */ - wr32(E1000_GPIE, E1000_GPIE_MSIX_MODE | - E1000_GPIE_PBA | E1000_GPIE_EIAME | - E1000_GPIE_NSICR); - - for (i = 0; i < adapter->num_tx_queues; i++) { - struct igb_ring *tx_ring = &adapter->tx_ring[i]; - igb_assign_vector(adapter, IGB_N0_QUEUE, i, vector++); - adapter->eims_enable_mask |= tx_ring->eims_value; - if (tx_ring->itr_val) - writel(tx_ring->itr_val, - hw->hw_addr + tx_ring->itr_register); - else - writel(1, hw->hw_addr + tx_ring->itr_register); - } - - for (i = 0; i < adapter->num_rx_queues; i++) { - struct igb_ring *rx_ring = &adapter->rx_ring[i]; - rx_ring->buddy = NULL; - igb_assign_vector(adapter, i, IGB_N0_QUEUE, vector++); - adapter->eims_enable_mask |= rx_ring->eims_value; - if (rx_ring->itr_val) - writel(rx_ring->itr_val, - hw->hw_addr + rx_ring->itr_register); - else - writel(1, hw->hw_addr + rx_ring->itr_register); - } - /* set vector for other causes, i.e. link changes */ switch (hw->mac.type) { case e1000_82575: - array_wr32(E1000_MSIXBM(0), vector++, - E1000_EIMS_OTHER); - tmp = rd32(E1000_CTRL_EXT); /* enable MSI-X PBA support*/ tmp |= E1000_CTRL_EXT_PBA_CLR; @@ -595,22 +526,41 @@ tmp |= E1000_CTRL_EXT_IRCA; wr32(E1000_CTRL_EXT, tmp); - adapter->eims_enable_mask |= E1000_EIMS_OTHER; + + /* enable msix_other interrupt */ + array_wr32(E1000_MSIXBM(0), vector++, + E1000_EIMS_OTHER); adapter->eims_other = E1000_EIMS_OTHER; break; case e1000_82576: + case e1000_82580: + /* Turn on MSI-X capability first, or our settings + * won't stick. And it will take days to debug. */ + wr32(E1000_GPIE, E1000_GPIE_MSIX_MODE | + E1000_GPIE_PBA | E1000_GPIE_EIAME | + E1000_GPIE_NSICR); + + /* enable msix_other interrupt */ + adapter->eims_other = 1 << vector; tmp = (vector++ | E1000_IVAR_VALID) << 8; - wr32(E1000_IVAR_MISC, tmp); - adapter->eims_enable_mask = (1 << (vector)) - 1; - adapter->eims_other = 1 << (vector - 1); + wr32(E1000_IVAR_MISC, tmp); break; default: /* do nothing, since nothing else supports MSI-X */ break; } /* switch (hw->mac.type) */ + + adapter->eims_enable_mask |= adapter->eims_other; + + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + igb_assign_vector(q_vector, vector++); + adapter->eims_enable_mask |= q_vector->eims_value; + } + wrfl(); } @@ -623,43 +573,40 @@ static int igb_request_msix(struct igb_adapter *adapter) { struct net_device *netdev = adapter->netdev; + struct e1000_hw *hw = &adapter->hw; int i, err = 0, vector = 0; - vector = 0; + err = request_irq(adapter->msix_entries[vector].vector, + &igb_msix_other, 0, netdev->name, adapter); + if (err) + goto out; + vector++; - for (i = 0; i < adapter->num_tx_queues; i++) { - struct igb_ring *ring = &(adapter->tx_ring[i]); - sprintf(ring->name, "%s-tx-%d", netdev->name, i); - err = request_irq(adapter->msix_entries[vector].vector, - &igb_msix_tx, 0, ring->name, - &(adapter->tx_ring[i])); - if (err) - goto out; - ring->itr_register = E1000_EITR(0) + (vector << 2); - ring->itr_val = 976; /* ~4000 ints/sec */ - vector++; - } - for (i = 0; i < adapter->num_rx_queues; i++) { - struct igb_ring *ring = &(adapter->rx_ring[i]); - if (strlen(netdev->name) < (IFNAMSIZ - 5)) - sprintf(ring->name, "%s-rx-%d", netdev->name, i); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + + q_vector->itr_register = hw->hw_addr + E1000_EITR(vector); + + if (q_vector->rx_ring && q_vector->tx_ring) + sprintf(q_vector->name, "%s-TxRx-%u", netdev->name, + q_vector->rx_ring->queue_index); + else if (q_vector->tx_ring) + sprintf(q_vector->name, "%s-tx-%u", netdev->name, + q_vector->tx_ring->queue_index); + else if (q_vector->rx_ring) + sprintf(q_vector->name, "%s-rx-%u", netdev->name, + q_vector->rx_ring->queue_index); else - memcpy(ring->name, netdev->name, IFNAMSIZ); + sprintf(q_vector->name, "%s-unused", netdev->name); + err = request_irq(adapter->msix_entries[vector].vector, - &igb_msix_rx, 0, ring->name, - &(adapter->rx_ring[i])); + &igb_msix_ring, 0, q_vector->name, + q_vector); if (err) goto out; - ring->itr_register = E1000_EITR(0) + (vector << 2); - ring->itr_val = adapter->itr; vector++; } - err = request_irq(adapter->msix_entries[vector].vector, - &igb_msix_other, 0, netdev->name, netdev); - if (err) - goto out; - igb_configure_msix(adapter); return 0; out: @@ -672,11 +619,44 @@ pci_disable_msix(adapter->pdev); kfree(adapter->msix_entries); adapter->msix_entries = NULL; - } else if (adapter->flags & IGB_FLAG_HAS_MSI) + } else if (adapter->flags & IGB_FLAG_HAS_MSI) { pci_disable_msi(adapter->pdev); - return; + } +} + +/** + * igb_free_q_vectors - Free memory allocated for interrupt vectors + * @adapter: board private structure to initialize + * + * This function frees the memory allocated to the q_vectors. In addition if + * NAPI is enabled it will delete any references to the NAPI struct prior + * to freeing the q_vector. + **/ +static void igb_free_q_vectors(struct igb_adapter *adapter) +{ + int v_idx; + + for (v_idx = 0; v_idx < adapter->num_q_vectors; v_idx++) { + struct igb_q_vector *q_vector = adapter->q_vector[v_idx]; + adapter->q_vector[v_idx] = NULL; + netif_napi_del(&q_vector->napi); + kfree(q_vector); + } + adapter->num_q_vectors = 0; } +/** + * igb_clear_interrupt_scheme - reset the device to a state of no interrupts + * + * This function resets the device so that it has 0 rx queues, tx queues, and + * MSI-X interrupts allocated. + */ +static void igb_clear_interrupt_scheme(struct igb_adapter *adapter) +{ + igb_free_queues(adapter); + igb_free_q_vectors(adapter); + igb_reset_interrupt_capability(adapter); +} /** * igb_set_interrupt_capability - set MSI or MSI-X if supported @@ -690,11 +670,21 @@ int numvecs, i; /* Number of supported queues. */ - /* Having more queues than CPUs doesn't make sense. */ - adapter->num_rx_queues = min_t(u32, IGB_MAX_RX_QUEUES, num_online_cpus()); - adapter->num_tx_queues = min_t(u32, IGB_MAX_TX_QUEUES, num_online_cpus()); + adapter->num_rx_queues = adapter->rss_queues; + adapter->num_tx_queues = adapter->rss_queues; + + /* start with one vector for every rx queue */ + numvecs = adapter->num_rx_queues; + + /* if tx handler is seperate add 1 for every tx queue */ + if (!(adapter->flags & IGB_FLAG_QUEUE_PAIRS)) + numvecs += adapter->num_tx_queues; + + /* store the number of vectors reserved for queues */ + adapter->num_q_vectors = numvecs; - numvecs = adapter->num_tx_queues + adapter->num_rx_queues + 1; + /* add 1 vector for link status interrupts */ + numvecs++; adapter->msix_entries = kcalloc(numvecs, sizeof(struct msix_entry), GFP_KERNEL); if (!adapter->msix_entries) @@ -728,8 +718,12 @@ dev_info(&adapter->pdev->dev, "IOV Disabled\n"); } #endif + adapter->vfs_allocated_count = 0; + adapter->rss_queues = 1; + adapter->flags |= IGB_FLAG_QUEUE_PAIRS; adapter->num_rx_queues = 1; adapter->num_tx_queues = 1; + adapter->num_q_vectors = 1; if (!pci_enable_msi(adapter->pdev)) adapter->flags |= IGB_FLAG_HAS_MSI; out: @@ -739,93 +733,238 @@ } /** - * igb_request_irq - initialize interrupts + * igb_alloc_q_vectors - Allocate memory for interrupt vectors + * @adapter: board private structure to initialize * - * Attempts to configure interrupts using the best available - * capabilities of the hardware and kernel. + * We allocate one q_vector per queue interrupt. If allocation fails we + * return -ENOMEM. **/ -static int igb_request_irq(struct igb_adapter *adapter) +static int igb_alloc_q_vectors(struct igb_adapter *adapter) { - struct net_device *netdev = adapter->netdev; + struct igb_q_vector *q_vector; struct e1000_hw *hw = &adapter->hw; - int err = 0; + int v_idx; - if (adapter->msix_entries) { - err = igb_request_msix(adapter); - if (!err) - goto request_done; - /* fall back to MSI */ - igb_reset_interrupt_capability(adapter); - if (!pci_enable_msi(adapter->pdev)) - adapter->flags |= IGB_FLAG_HAS_MSI; - igb_free_all_tx_resources(adapter); - igb_free_all_rx_resources(adapter); - adapter->num_rx_queues = 1; - igb_alloc_queues(adapter); - } else { - switch (hw->mac.type) { - case e1000_82575: - wr32(E1000_MSIXBM(0), - (E1000_EICR_RX_QUEUE0 | E1000_EIMS_OTHER)); - break; - case e1000_82576: - wr32(E1000_IVAR0, E1000_IVAR_VALID); - break; - default: - break; - } + for (v_idx = 0; v_idx < adapter->num_q_vectors; v_idx++) { + q_vector = kzalloc(sizeof(struct igb_q_vector), GFP_KERNEL); + if (!q_vector) + goto err_out; + q_vector->adapter = adapter; + q_vector->itr_shift = (hw->mac.type == e1000_82575) ? 16 : 0; + q_vector->itr_register = hw->hw_addr + E1000_EITR(0); + q_vector->itr_val = IGB_START_ITR; + q_vector->set_itr = 1; + netif_napi_add(adapter->netdev, &q_vector->napi, igb_poll, 64); + adapter->q_vector[v_idx] = q_vector; } + return 0; - if (adapter->flags & IGB_FLAG_HAS_MSI) { - err = request_irq(adapter->pdev->irq, &igb_intr_msi, 0, - netdev->name, netdev); - if (!err) - goto request_done; - /* fall back to legacy interrupts */ - igb_reset_interrupt_capability(adapter); - adapter->flags &= ~IGB_FLAG_HAS_MSI; +err_out: + while (v_idx) { + v_idx--; + q_vector = adapter->q_vector[v_idx]; + netif_napi_del(&q_vector->napi); + kfree(q_vector); + adapter->q_vector[v_idx] = NULL; } + return -ENOMEM; +} - err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED, - netdev->name, netdev); +static void igb_map_rx_ring_to_vector(struct igb_adapter *adapter, + int ring_idx, int v_idx) +{ + struct igb_q_vector *q_vector; - if (err) - dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n", - err); + q_vector = adapter->q_vector[v_idx]; + q_vector->rx_ring = &adapter->rx_ring[ring_idx]; + q_vector->rx_ring->q_vector = q_vector; + q_vector->itr_val = adapter->rx_itr_setting; + if (q_vector->itr_val && q_vector->itr_val <= 3) + q_vector->itr_val = IGB_START_ITR; +} -request_done: - return err; +static void igb_map_tx_ring_to_vector(struct igb_adapter *adapter, + int ring_idx, int v_idx) +{ + struct igb_q_vector *q_vector; + + q_vector = adapter->q_vector[v_idx]; + q_vector->tx_ring = &adapter->tx_ring[ring_idx]; + q_vector->tx_ring->q_vector = q_vector; + q_vector->itr_val = adapter->tx_itr_setting; + if (q_vector->itr_val && q_vector->itr_val <= 3) + q_vector->itr_val = IGB_START_ITR; } -static void igb_free_irq(struct igb_adapter *adapter) +/** + * igb_map_ring_to_vector - maps allocated queues to vectors + * + * This function maps the recently allocated queues to vectors. + **/ +static int igb_map_ring_to_vector(struct igb_adapter *adapter) { - struct net_device *netdev = adapter->netdev; + int i; + int v_idx = 0; - if (adapter->msix_entries) { - int vector = 0, i; + if ((adapter->num_q_vectors < adapter->num_rx_queues) || + (adapter->num_q_vectors < adapter->num_tx_queues)) + return -ENOMEM; - for (i = 0; i < adapter->num_tx_queues; i++) - free_irq(adapter->msix_entries[vector++].vector, - &(adapter->tx_ring[i])); + if (adapter->num_q_vectors >= + (adapter->num_rx_queues + adapter->num_tx_queues)) { for (i = 0; i < adapter->num_rx_queues; i++) - free_irq(adapter->msix_entries[vector++].vector, - &(adapter->rx_ring[i])); - - free_irq(adapter->msix_entries[vector++].vector, netdev); - return; + igb_map_rx_ring_to_vector(adapter, i, v_idx++); + for (i = 0; i < adapter->num_tx_queues; i++) + igb_map_tx_ring_to_vector(adapter, i, v_idx++); + } else { + for (i = 0; i < adapter->num_rx_queues; i++) { + if (i < adapter->num_tx_queues) + igb_map_tx_ring_to_vector(adapter, i, v_idx); + igb_map_rx_ring_to_vector(adapter, i, v_idx++); + } + for (; i < adapter->num_tx_queues; i++) + igb_map_tx_ring_to_vector(adapter, i, v_idx++); } - - free_irq(adapter->pdev->irq, netdev); + return 0; } /** - * igb_irq_disable - Mask off interrupt generation on the NIC + * igb_init_interrupt_scheme - initialize interrupts, allocate queues/vectors + * + * This function initializes the interrupts and allocates all of the queues. + **/ +static int igb_init_interrupt_scheme(struct igb_adapter *adapter) +{ + struct pci_dev *pdev = adapter->pdev; + int err; + + igb_set_interrupt_capability(adapter); + + err = igb_alloc_q_vectors(adapter); + if (err) { + dev_err(&pdev->dev, "Unable to allocate memory for vectors\n"); + goto err_alloc_q_vectors; + } + + err = igb_alloc_queues(adapter); + if (err) { + dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); + goto err_alloc_queues; + } + + err = igb_map_ring_to_vector(adapter); + if (err) { + dev_err(&pdev->dev, "Invalid q_vector to ring mapping\n"); + goto err_map_queues; + } + + + return 0; +err_map_queues: + igb_free_queues(adapter); +err_alloc_queues: + igb_free_q_vectors(adapter); +err_alloc_q_vectors: + igb_reset_interrupt_capability(adapter); + return err; +} + +/** + * igb_request_irq - initialize interrupts + * + * Attempts to configure interrupts using the best available + * capabilities of the hardware and kernel. + **/ +static int igb_request_irq(struct igb_adapter *adapter) +{ + struct net_device *netdev = adapter->netdev; + struct pci_dev *pdev = adapter->pdev; + int err = 0; + + if (adapter->msix_entries) { + err = igb_request_msix(adapter); + if (!err) + goto request_done; + /* fall back to MSI */ + igb_clear_interrupt_scheme(adapter); + if (!pci_enable_msi(adapter->pdev)) + adapter->flags |= IGB_FLAG_HAS_MSI; + igb_free_all_tx_resources(adapter); + igb_free_all_rx_resources(adapter); + adapter->num_tx_queues = 1; + adapter->num_rx_queues = 1; + adapter->num_q_vectors = 1; + err = igb_alloc_q_vectors(adapter); + if (err) { + dev_err(&pdev->dev, + "Unable to allocate memory for vectors\n"); + goto request_done; + } + err = igb_alloc_queues(adapter); + if (err) { + dev_err(&pdev->dev, + "Unable to allocate memory for queues\n"); + igb_free_q_vectors(adapter); + goto request_done; + } + igb_setup_all_tx_resources(adapter); + igb_setup_all_rx_resources(adapter); + } else { + igb_assign_vector(adapter->q_vector[0], 0); + } + + if (adapter->flags & IGB_FLAG_HAS_MSI) { + err = request_irq(adapter->pdev->irq, &igb_intr_msi, 0, + netdev->name, adapter); + if (!err) + goto request_done; + + /* fall back to legacy interrupts */ + igb_reset_interrupt_capability(adapter); + adapter->flags &= ~IGB_FLAG_HAS_MSI; + } + + err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED, + netdev->name, adapter); + + if (err) + dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n", + err); + +request_done: + return err; +} + +static void igb_free_irq(struct igb_adapter *adapter) +{ + if (adapter->msix_entries) { + int vector = 0, i; + + free_irq(adapter->msix_entries[vector++].vector, adapter); + + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + free_irq(adapter->msix_entries[vector++].vector, + q_vector); + } + } else { + free_irq(adapter->pdev->irq, adapter); + } +} + +/** + * igb_irq_disable - Mask off interrupt generation on the NIC * @adapter: board private structure **/ static void igb_irq_disable(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; + /* + * we need to be careful when disabling interrupts. The VFs are also + * mapped into these registers and so clearing the bits can cause + * issues on the VF drivers so we only need to clear what we set + */ if (adapter->msix_entries) { u32 regval = rd32(E1000_EIAM); wr32(E1000_EIAM, regval & ~adapter->eims_enable_mask); @@ -849,41 +988,47 @@ struct e1000_hw *hw = &adapter->hw; if (adapter->msix_entries) { + u32 ims = E1000_IMS_LSC | E1000_IMS_DOUTSYNC; u32 regval = rd32(E1000_EIAC); wr32(E1000_EIAC, regval | adapter->eims_enable_mask); regval = rd32(E1000_EIAM); wr32(E1000_EIAM, regval | adapter->eims_enable_mask); wr32(E1000_EIMS, adapter->eims_enable_mask); - if (adapter->vfs_allocated_count) + if (adapter->vfs_allocated_count) { wr32(E1000_MBVFIMR, 0xFF); - wr32(E1000_IMS, (E1000_IMS_LSC | E1000_IMS_VMMB | - E1000_IMS_DOUTSYNC)); + ims |= E1000_IMS_VMMB; + } + if (adapter->hw.mac.type == e1000_82580) + ims |= E1000_IMS_DRSTA; + + wr32(E1000_IMS, ims); } else { - wr32(E1000_IMS, IMS_ENABLE_MASK); - wr32(E1000_IAM, IMS_ENABLE_MASK); + wr32(E1000_IMS, IMS_ENABLE_MASK | + E1000_IMS_DRSTA); + wr32(E1000_IAM, IMS_ENABLE_MASK | + E1000_IMS_DRSTA); } } static void igb_update_mng_vlan(struct igb_adapter *adapter) { - struct net_device *netdev = adapter->netdev; + struct e1000_hw *hw = &adapter->hw; u16 vid = adapter->hw.mng_cookie.vlan_id; u16 old_vid = adapter->mng_vlan_id; - if (adapter->vlgrp) { - if (!vlan_group_get_device(adapter->vlgrp, vid)) { - if (adapter->hw.mng_cookie.status & - E1000_MNG_DHCP_COOKIE_STATUS_VLAN) { - igb_vlan_rx_add_vid(netdev, vid); - adapter->mng_vlan_id = vid; - } else - adapter->mng_vlan_id = IGB_MNG_VLAN_NONE; - - if ((old_vid != (u16)IGB_MNG_VLAN_NONE) && - (vid != old_vid) && - !vlan_group_get_device(adapter->vlgrp, old_vid)) - igb_vlan_rx_kill_vid(netdev, old_vid); - } else - adapter->mng_vlan_id = vid; + + if (hw->mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN) { + /* add VID to filter table */ + igb_vfta_set(hw, vid, true); + adapter->mng_vlan_id = vid; + } else { + adapter->mng_vlan_id = IGB_MNG_VLAN_NONE; + } + + if ((old_vid != (u16)IGB_MNG_VLAN_NONE) && + (vid != old_vid) && + !vlan_group_get_device(adapter->vlgrp, old_vid)) { + /* remove VID from filter table */ + igb_vfta_set(hw, old_vid, false); } } @@ -907,7 +1052,6 @@ ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD); } - /** * igb_get_hw_control - get control of the h/w from f/w * @adapter: address of board private structure @@ -942,8 +1086,11 @@ igb_restore_vlan(adapter); - igb_configure_tx(adapter); + igb_setup_tctl(adapter); + igb_setup_mrqc(adapter); igb_setup_rctl(adapter); + + igb_configure_tx(adapter); igb_configure_rx(adapter); igb_rx_fifo_flush_82575(&adapter->hw); @@ -965,7 +1112,6 @@ * igb_up - Open the interface and prepare it to handle traffic * @adapter: board private structure **/ - int igb_up(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; @@ -976,30 +1122,39 @@ clear_bit(__IGB_DOWN, &adapter->state); - for (i = 0; i < adapter->num_rx_queues; i++) - napi_enable(&adapter->rx_ring[i].napi); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + napi_enable(&q_vector->napi); + } if (adapter->msix_entries) igb_configure_msix(adapter); - - igb_vmm_control(adapter); - igb_set_rah_pool(hw, adapter->vfs_allocated_count, 0); - igb_set_vmolr(hw, adapter->vfs_allocated_count); + else + igb_assign_vector(adapter->q_vector[0], 0); /* Clear any pending interrupts. */ rd32(E1000_ICR); igb_irq_enable(adapter); + /* notify VFs that reset has been completed */ + if (adapter->vfs_allocated_count) { + u32 reg_data = rd32(E1000_CTRL_EXT); + reg_data |= E1000_CTRL_EXT_PFRSTD; + wr32(E1000_CTRL_EXT, reg_data); + } + netif_tx_start_all_queues(adapter->netdev); - /* Fire a link change interrupt to start the watchdog. */ - wr32(E1000_ICS, E1000_ICS_LSC); + /* start the watchdog. */ + hw->mac.get_link_status = 1; + schedule_work(&adapter->watchdog_task); + return 0; } void igb_down(struct igb_adapter *adapter) { - struct e1000_hw *hw = &adapter->hw; struct net_device *netdev = adapter->netdev; + struct e1000_hw *hw = &adapter->hw; u32 tctl, rctl; int i; @@ -1022,8 +1177,10 @@ wrfl(); msleep(10); - for (i = 0; i < adapter->num_rx_queues; i++) - napi_disable(&adapter->rx_ring[i].napi); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + napi_disable(&q_vector->napi); + } igb_irq_disable(adapter); @@ -1062,6 +1219,7 @@ void igb_reset(struct igb_adapter *adapter) { + struct pci_dev *pdev = adapter->pdev; struct e1000_hw *hw = &adapter->hw; struct e1000_mac_info *mac = &hw->mac; struct e1000_fc_info *fc = &hw->fc; @@ -1072,8 +1230,13 @@ * To take effect CTRL.RST is required. */ switch (mac->type) { + case e1000_82580: + pba = rd32(E1000_RXPBS); + pba = igb_rxpbs_adjust_82580(pba); + break; case e1000_82576: - pba = E1000_PBA_64K; + pba = rd32(E1000_RXPBS); + pba &= E1000_RXPBS_SIZE_MASK_82576; break; case e1000_82575: default: @@ -1133,13 +1296,8 @@ hwm = min(((pba << 10) * 9 / 10), ((pba << 10) - 2 * adapter->max_frame_size)); - if (mac->type < e1000_82576) { - fc->high_water = hwm & 0xFFF8; /* 8-byte granularity */ - fc->low_water = fc->high_water - 8; - } else { - fc->high_water = hwm & 0xFFF0; /* 16-byte granularity */ - fc->low_water = fc->high_water - 16; - } + fc->high_water = hwm & 0xFFF0; /* 16-byte granularity */ + fc->low_water = fc->high_water - 16; fc->pause_time = 0xFFFF; fc->send_xon = 1; fc->current_mode = fc->requested_mode; @@ -1148,10 +1306,10 @@ if (adapter->vfs_allocated_count) { int i; for (i = 0 ; i < adapter->vfs_allocated_count; i++) - adapter->vf_data[i].clear_to_send = false; + adapter->vf_data[i].flags = 0; /* ping all the active vfs to let them know we are going down */ - igb_ping_all_vfs(adapter); + igb_ping_all_vfs(adapter); /* disable transmits and receives */ wr32(E1000_VFRE, 0); @@ -1159,23 +1317,28 @@ } /* Allow time for pending master requests to run */ - adapter->hw.mac.ops.reset_hw(&adapter->hw); + hw->mac.ops.reset_hw(hw); wr32(E1000_WUC, 0); - if (adapter->hw.mac.ops.init_hw(&adapter->hw)) - dev_err(&adapter->pdev->dev, "Hardware Error\n"); + if (hw->mac.ops.init_hw(hw)) + dev_err(&pdev->dev, "Hardware Error\n"); + if (hw->mac.type == e1000_82580) { + u32 reg = rd32(E1000_PCIEMISC); + wr32(E1000_PCIEMISC, + reg & ~E1000_PCIEMISC_LX_DECISION); + } igb_update_mng_vlan(adapter); /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */ wr32(E1000_VET, ETHERNET_IEEE_VLAN_TYPE); - igb_reset_adaptive(&adapter->hw); - igb_get_phy_info(&adapter->hw); + igb_reset_adaptive(hw); + igb_get_phy_info(hw); } static const struct net_device_ops igb_netdev_ops = { - .ndo_open = igb_open, + .ndo_open = igb_open, .ndo_stop = igb_close, .ndo_start_xmit = igb_xmit_frame_adv, .ndo_get_stats = igb_get_stats, @@ -1211,10 +1374,11 @@ struct net_device *netdev; struct igb_adapter *adapter; struct e1000_hw *hw; + u16 eeprom_data = 0; + static int global_quad_port_a; /* global quad port a indication */ const struct e1000_info *ei = igb_info_tbl[ent->driver_data]; unsigned long mmio_start, mmio_len; int err, pci_using_dac; - u16 eeprom_data = 0; u16 eeprom_apme_mask = IGB_EEPROM_APME; u32 part_num; @@ -1291,8 +1455,6 @@ hw->subsystem_vendor_id = pdev->subsystem_vendor; hw->subsystem_device_id = pdev->subsystem_device; - /* setup the private structure */ - hw->back = adapter; /* Copy the default MAC, PHY and NVM function pointers */ memcpy(&hw->mac.ops, ei->mac_ops, sizeof(hw->mac.ops)); memcpy(&hw->phy.ops, ei->phy_ops, sizeof(hw->phy.ops)); @@ -1302,46 +1464,6 @@ if (err) goto err_sw_init; -#ifdef CONFIG_PCI_IOV - /* since iov functionality isn't critical to base device function we - * can accept failure. If it fails we don't allow iov to be enabled */ - if (hw->mac.type == e1000_82576) { - /* 82576 supports a maximum of 7 VFs in addition to the PF */ - unsigned int num_vfs = (max_vfs > 7) ? 7 : max_vfs; - int i; - unsigned char mac_addr[ETH_ALEN]; - - if (num_vfs) { - adapter->vf_data = kcalloc(num_vfs, - sizeof(struct vf_data_storage), - GFP_KERNEL); - if (!adapter->vf_data) { - dev_err(&pdev->dev, - "Could not allocate VF private data - " - "IOV enable failed\n"); - } else { - err = pci_enable_sriov(pdev, num_vfs); - if (!err) { - adapter->vfs_allocated_count = num_vfs; - dev_info(&pdev->dev, - "%d vfs allocated\n", - num_vfs); - for (i = 0; - i < adapter->vfs_allocated_count; - i++) { - random_ether_addr(mac_addr); - igb_set_vf_mac(adapter, i, - mac_addr); - } - } else { - kfree(adapter->vf_data); - adapter->vf_data = NULL; - } - } - } - } - -#endif /* setup the private structure */ err = igb_sw_init(adapter); if (err) @@ -1349,16 +1471,6 @@ igb_get_bus_info_pcie(hw); - /* set flags */ - switch (hw->mac.type) { - case e1000_82575: - adapter->flags |= IGB_FLAG_NEED_CTX_IDX; - break; - case e1000_82576: - default: - break; - } - hw->phy.autoneg_wait_to_complete = false; hw->mac.adaptive_ifs = true; @@ -1382,7 +1494,6 @@ netdev->features |= NETIF_F_IPV6_CSUM; netdev->features |= NETIF_F_TSO; netdev->features |= NETIF_F_TSO6; - netdev->features |= NETIF_F_GRO; netdev->vlan_features |= NETIF_F_TSO; @@ -1394,10 +1505,10 @@ if (pci_using_dac) netdev->features |= NETIF_F_HIGHDMA; - if (adapter->hw.mac.type == e1000_82576) + if (hw->mac.type >= e1000_82576) netdev->features |= NETIF_F_SCTP_CSUM; - adapter->en_mng_pt = igb_enable_mng_pass_thru(&adapter->hw); + adapter->en_mng_pt = igb_enable_mng_pass_thru(hw); /* before reading the NVM, reset the controller to put the device in a * known good starting state */ @@ -1439,9 +1550,6 @@ hw->fc.requested_mode = e1000_fc_default; hw->fc.current_mode = e1000_fc_default; - adapter->itr_setting = IGB_DEFAULT_ITR; - adapter->itr = IGB_START_ITR; - igb_validate_mdi_setting(hw); /* Initial Wake on LAN setting If APM wake is enabled in the EEPROM, @@ -1450,6 +1558,10 @@ if (hw->bus.func == 0) hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data); + else if (hw->mac.type == e1000_82580) + hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A + + NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1, + &eeprom_data); else if (hw->bus.func == 1) hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data); @@ -1508,66 +1620,14 @@ dev_info(&pdev->dev, "DCA enabled\n"); igb_setup_dca(adapter); } -#endif - - /* - * Initialize hardware timer: we keep it running just in case - * that some program needs it later on. - */ - memset(&adapter->cycles, 0, sizeof(adapter->cycles)); - adapter->cycles.read = igb_read_clock; - adapter->cycles.mask = CLOCKSOURCE_MASK(64); - adapter->cycles.mult = 1; - adapter->cycles.shift = IGB_TSYNC_SHIFT; - wr32(E1000_TIMINCA, - (1<<24) | - IGB_TSYNC_CYCLE_TIME_IN_NANOSECONDS * IGB_TSYNC_SCALE); -#if 0 - /* - * Avoid rollover while we initialize by resetting the time counter. - */ - wr32(E1000_SYSTIML, 0x00000000); - wr32(E1000_SYSTIMH, 0x00000000); -#else - /* - * Set registers so that rollover occurs soon to test this. - */ - wr32(E1000_SYSTIML, 0x00000000); - wr32(E1000_SYSTIMH, 0xFF800000); -#endif - wrfl(); - timecounter_init(&adapter->clock, - &adapter->cycles, - ktime_to_ns(ktime_get_real())); - - /* - * Synchronize our NIC clock against system wall clock. NIC - * time stamp reading requires ~3us per sample, each sample - * was pretty stable even under load => only require 10 - * samples for each offset comparison. - */ - memset(&adapter->compare, 0, sizeof(adapter->compare)); - adapter->compare.source = &adapter->clock; - adapter->compare.target = ktime_get_real; - adapter->compare.num_samples = 10; - timecompare_update(&adapter->compare, 0); -#ifdef DEBUG - { - char buffer[160]; - printk(KERN_DEBUG - "igb: %s: hw %p initialized timer\n", - igb_get_time_str(adapter, buffer), - &adapter->hw); - } #endif - dev_info(&pdev->dev, "Intel(R) Gigabit Ethernet Network Connection\n"); /* print bus type/speed/width info */ dev_info(&pdev->dev, "%s: (PCIe:%s:%s) %pM\n", netdev->name, - ((hw->bus.speed == e1000_bus_speed_2500) - ? "2.5Gb/s" : "unknown"), + ((hw->bus.speed == e1000_bus_speed_2500) ? "2.5Gb/s" : + "unknown"), ((hw->bus.width == e1000_bus_width_pcie_x4) ? "Width x4" : (hw->bus.width == e1000_bus_width_pcie_x2) ? "Width x2" : (hw->bus.width == e1000_bus_width_pcie_x1) ? "Width x1" : @@ -1594,15 +1654,14 @@ if (hw->flash_address) iounmap(hw->flash_address); - - igb_free_queues(adapter); err_sw_init: + igb_clear_interrupt_scheme(adapter); iounmap(hw->hw_addr); err_ioremap: free_netdev(netdev); err_alloc_etherdev: - pci_release_selected_regions(pdev, pci_select_bars(pdev, - IORESOURCE_MEM)); + pci_release_selected_regions(pdev, + pci_select_bars(pdev, IORESOURCE_MEM)); err_pci_reg: err_dma: pci_disable_device(pdev); @@ -1647,12 +1706,10 @@ unregister_netdev(netdev); - if (!igb_check_reset_block(&adapter->hw)) - igb_reset_phy(&adapter->hw); - - igb_reset_interrupt_capability(adapter); + if (!igb_check_reset_block(hw)) + igb_reset_phy(hw); - igb_free_queues(adapter); + igb_clear_interrupt_scheme(adapter); #ifdef CONFIG_PCI_IOV /* reclaim resources allocated to VFs */ @@ -1668,11 +1725,12 @@ dev_info(&pdev->dev, "IOV Disabled\n"); } #endif + iounmap(hw->hw_addr); if (hw->flash_address) iounmap(hw->flash_address); - pci_release_selected_regions(pdev, pci_select_bars(pdev, - IORESOURCE_MEM)); + pci_release_selected_regions(pdev, + pci_select_bars(pdev, IORESOURCE_MEM)); free_netdev(netdev); @@ -1682,6 +1740,160 @@ } /** + * igb_probe_vfs - Initialize vf data storage and add VFs to pci config space + * @adapter: board private structure to initialize + * + * This function initializes the vf specific data storage and then attempts to + * allocate the VFs. The reason for ordering it this way is because it is much + * mor expensive time wise to disable SR-IOV than it is to allocate and free + * the memory for the VFs. + **/ +static void __devinit igb_probe_vfs(struct igb_adapter * adapter) +{ +#ifdef CONFIG_PCI_IOV + struct pci_dev *pdev = adapter->pdev; + + if (adapter->vfs_allocated_count > 7) + adapter->vfs_allocated_count = 7; + + if (adapter->vfs_allocated_count) { + adapter->vf_data = kcalloc(adapter->vfs_allocated_count, + sizeof(struct vf_data_storage), + GFP_KERNEL); + /* if allocation failed then we do not support SR-IOV */ + if (!adapter->vf_data) { + adapter->vfs_allocated_count = 0; + dev_err(&pdev->dev, "Unable to allocate memory for VF " + "Data Storage\n"); + } + } + + if (pci_enable_sriov(pdev, adapter->vfs_allocated_count)) { + kfree(adapter->vf_data); + adapter->vf_data = NULL; +#endif /* CONFIG_PCI_IOV */ + adapter->vfs_allocated_count = 0; +#ifdef CONFIG_PCI_IOV + } else { + unsigned char mac_addr[ETH_ALEN]; + int i; + dev_info(&pdev->dev, "%d vfs allocated\n", + adapter->vfs_allocated_count); + for (i = 0; i < adapter->vfs_allocated_count; i++) { + random_ether_addr(mac_addr); + igb_set_vf_mac(adapter, i, mac_addr); + } + } +#endif /* CONFIG_PCI_IOV */ +} + + +/** + * igb_init_hw_timer - Initialize hardware timer used with IEEE 1588 timestamp + * @adapter: board private structure to initialize + * + * igb_init_hw_timer initializes the function pointer and values for the hw + * timer found in hardware. + **/ +static void igb_init_hw_timer(struct igb_adapter *adapter) +{ + struct e1000_hw *hw = &adapter->hw; + + switch (hw->mac.type) { + case e1000_82580: + memset(&adapter->cycles, 0, sizeof(adapter->cycles)); + adapter->cycles.read = igb_read_clock; + adapter->cycles.mask = CLOCKSOURCE_MASK(64); + adapter->cycles.mult = 1; + /* + * The 82580 timesync updates the system timer every 8ns by 8ns + * and the value cannot be shifted. Instead we need to shift + * the registers to generate a 64bit timer value. As a result + * SYSTIMR/L/H, TXSTMPL/H, RXSTMPL/H all have to be shifted by + * 24 in order to generate a larger value for synchronization. + */ + adapter->cycles.shift = IGB_82580_TSYNC_SHIFT; + /* disable system timer temporarily by setting bit 31 */ + wr32(E1000_TSAUXC, 0x80000000); + wrfl(); + + /* Set registers so that rollover occurs soon to test this. */ + wr32(E1000_SYSTIMR, 0x00000000); + wr32(E1000_SYSTIML, 0x80000000); + wr32(E1000_SYSTIMH, 0x000000FF); + wrfl(); + + /* enable system timer by clearing bit 31 */ + wr32(E1000_TSAUXC, 0x0); + wrfl(); + + timecounter_init(&adapter->clock, + &adapter->cycles, + ktime_to_ns(ktime_get_real())); + /* + * Synchronize our NIC clock against system wall clock. NIC + * time stamp reading requires ~3us per sample, each sample + * was pretty stable even under load => only require 10 + * samples for each offset comparison. + */ + memset(&adapter->compare, 0, sizeof(adapter->compare)); + adapter->compare.source = &adapter->clock; + adapter->compare.target = ktime_get_real; + adapter->compare.num_samples = 10; + timecompare_update(&adapter->compare, 0); + break; + case e1000_82576: + /* + * Initialize hardware timer: we keep it running just in case + * that some program needs it later on. + */ + memset(&adapter->cycles, 0, sizeof(adapter->cycles)); + adapter->cycles.read = igb_read_clock; + adapter->cycles.mask = CLOCKSOURCE_MASK(64); + adapter->cycles.mult = 1; + /** + * Scale the NIC clock cycle by a large factor so that + * relatively small clock corrections can be added or + * substracted at each clock tick. The drawbacks of a large + * factor are a) that the clock register overflows more quickly + * (not such a big deal) and b) that the increment per tick has + * to fit into 24 bits. As a result we need to use a shift of + * 19 so we can fit a value of 16 into the TIMINCA register. + */ + adapter->cycles.shift = IGB_82576_TSYNC_SHIFT; + wr32(E1000_TIMINCA, + (1 << E1000_TIMINCA_16NS_SHIFT) | + (16 << IGB_82576_TSYNC_SHIFT)); + + /* Set registers so that rollover occurs soon to test this. */ + wr32(E1000_SYSTIML, 0x00000000); + wr32(E1000_SYSTIMH, 0xFF800000); + wrfl(); + + timecounter_init(&adapter->clock, + &adapter->cycles, + ktime_to_ns(ktime_get_real())); + /* + * Synchronize our NIC clock against system wall clock. NIC + * time stamp reading requires ~3us per sample, each sample + * was pretty stable even under load => only require 10 + * samples for each offset comparison. + */ + memset(&adapter->compare, 0, sizeof(adapter->compare)); + adapter->compare.source = &adapter->clock; + adapter->compare.target = ktime_get_real; + adapter->compare.num_samples = 10; + timecompare_update(&adapter->compare, 0); + break; + case e1000_82575: + /* 82575 does not support timesync */ + default: + break; + } + +} + +/** * igb_sw_init - Initialize general software structures (struct igb_adapter) * @adapter: board private structure to initialize * @@ -1699,20 +1911,37 @@ adapter->tx_ring_count = IGB_DEFAULT_TXD; adapter->rx_ring_count = IGB_DEFAULT_RXD; - adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE; - adapter->rx_ps_hdr_size = 0; /* disable packet split */ + adapter->rx_itr_setting = IGB_DEFAULT_ITR; + adapter->tx_itr_setting = IGB_DEFAULT_ITR; + adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN; adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN; - /* This call may decrease the number of queues depending on - * interrupt mode. */ - igb_set_interrupt_capability(adapter); +#ifdef CONFIG_PCI_IOV + if (hw->mac.type == e1000_82576) + adapter->vfs_allocated_count = max_vfs; + +#endif /* CONFIG_PCI_IOV */ + adapter->rss_queues = min_t(u32, IGB_MAX_RX_QUEUES, num_online_cpus()); + + /* + * if rss_queues > 4 or vfs are going to be allocated with rss_queues + * then we should combine the queues into a queue pair in order to + * conserve interrupts due to limited supply + */ + if ((adapter->rss_queues > 4) || + ((adapter->rss_queues > 1) && (adapter->vfs_allocated_count > 6))) + adapter->flags |= IGB_FLAG_QUEUE_PAIRS; - if (igb_alloc_queues(adapter)) { + /* This call may decrease the number of queues */ + if (igb_init_interrupt_scheme(adapter)) { dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); return -ENOMEM; } + igb_init_hw_timer(adapter); + igb_probe_vfs(adapter); + /* Explicitly disable IRQ since the NIC can be in any state. */ igb_irq_disable(adapter); @@ -1757,21 +1986,12 @@ /* e1000_power_up_phy(adapter); */ - adapter->mng_vlan_id = IGB_MNG_VLAN_NONE; - if ((adapter->hw.mng_cookie.status & - E1000_MNG_DHCP_COOKIE_STATUS_VLAN)) - igb_update_mng_vlan(adapter); - /* before we allocate an interrupt, we must be ready to handle it. * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt * as soon as we call pci_request_irq, so we have to setup our * clean_rx handler before we do so. */ igb_configure(adapter); - igb_vmm_control(adapter); - igb_set_rah_pool(hw, adapter->vfs_allocated_count, 0); - igb_set_vmolr(hw, adapter->vfs_allocated_count); - err = igb_request_irq(adapter); if (err) goto err_req_irq; @@ -1779,18 +1999,28 @@ /* From here on the code is the same as igb_up() */ clear_bit(__IGB_DOWN, &adapter->state); - for (i = 0; i < adapter->num_rx_queues; i++) - napi_enable(&adapter->rx_ring[i].napi); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + napi_enable(&q_vector->napi); + } /* Clear any pending interrupts. */ rd32(E1000_ICR); igb_irq_enable(adapter); + /* notify VFs that reset has been completed */ + if (adapter->vfs_allocated_count) { + u32 reg_data = rd32(E1000_CTRL_EXT); + reg_data |= E1000_CTRL_EXT_PFRSTD; + wr32(E1000_CTRL_EXT, reg_data); + } + netif_tx_start_all_queues(netdev); - /* Fire a link status change interrupt to start the watchdog. */ - wr32(E1000_ICS, E1000_ICS_LSC); + /* start the watchdog. */ + hw->mac.get_link_status = 1; + schedule_work(&adapter->watchdog_task); return 0; @@ -1829,28 +2059,18 @@ igb_free_all_tx_resources(adapter); igb_free_all_rx_resources(adapter); - /* kill manageability vlan ID if supported, but not if a vlan with - * the same ID is registered on the host OS (let 8021q kill it) */ - if ((adapter->hw.mng_cookie.status & - E1000_MNG_DHCP_COOKIE_STATUS_VLAN) && - !(adapter->vlgrp && - vlan_group_get_device(adapter->vlgrp, adapter->mng_vlan_id))) - igb_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id); - return 0; } /** * igb_setup_tx_resources - allocate Tx resources (Descriptors) - * @adapter: board private structure * @tx_ring: tx descriptor ring (for a specific queue) to setup * * Return 0 on success, negative on failure **/ -int igb_setup_tx_resources(struct igb_adapter *adapter, - struct igb_ring *tx_ring) +int igb_setup_tx_resources(struct igb_ring *tx_ring) { - struct pci_dev *pdev = adapter->pdev; + struct pci_dev *pdev = tx_ring->pdev; int size; size = sizeof(struct igb_buffer) * tx_ring->count; @@ -1863,20 +2083,20 @@ tx_ring->size = tx_ring->count * sizeof(union e1000_adv_tx_desc); tx_ring->size = ALIGN(tx_ring->size, 4096); - tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size, + tx_ring->desc = pci_alloc_consistent(pdev, + tx_ring->size, &tx_ring->dma); if (!tx_ring->desc) goto err; - tx_ring->adapter = adapter; tx_ring->next_to_use = 0; tx_ring->next_to_clean = 0; return 0; err: vfree(tx_ring->buffer_info); - dev_err(&adapter->pdev->dev, + dev_err(&pdev->dev, "Unable to allocate memory for the transmit descriptor ring\n"); return -ENOMEM; } @@ -1890,13 +2110,13 @@ **/ static int igb_setup_all_tx_resources(struct igb_adapter *adapter) { + struct pci_dev *pdev = adapter->pdev; int i, err = 0; - int r_idx; for (i = 0; i < adapter->num_tx_queues; i++) { - err = igb_setup_tx_resources(adapter, &adapter->tx_ring[i]); + err = igb_setup_tx_resources(&adapter->tx_ring[i]); if (err) { - dev_err(&adapter->pdev->dev, + dev_err(&pdev->dev, "Allocation for Tx Queue %u failed\n", i); for (i--; i >= 0; i--) igb_free_tx_resources(&adapter->tx_ring[i]); @@ -1904,57 +2124,24 @@ } } - for (i = 0; i < IGB_MAX_TX_QUEUES; i++) { - r_idx = i % adapter->num_tx_queues; + for (i = 0; i < IGB_ABS_MAX_TX_QUEUES; i++) { + int r_idx = i % adapter->num_tx_queues; adapter->multi_tx_table[i] = &adapter->tx_ring[r_idx]; } return err; } /** - * igb_configure_tx - Configure transmit Unit after Reset - * @adapter: board private structure - * - * Configure the Tx unit of the MAC after a reset. + * igb_setup_tctl - configure the transmit control registers + * @adapter: Board private structure **/ -static void igb_configure_tx(struct igb_adapter *adapter) +void igb_setup_tctl(struct igb_adapter *adapter) { - u64 tdba; struct e1000_hw *hw = &adapter->hw; u32 tctl; - u32 txdctl, txctrl; - int i, j; - for (i = 0; i < adapter->num_tx_queues; i++) { - struct igb_ring *ring = &adapter->tx_ring[i]; - j = ring->reg_idx; - wr32(E1000_TDLEN(j), - ring->count * sizeof(union e1000_adv_tx_desc)); - tdba = ring->dma; - wr32(E1000_TDBAL(j), - tdba & 0x00000000ffffffffULL); - wr32(E1000_TDBAH(j), tdba >> 32); - - ring->head = E1000_TDH(j); - ring->tail = E1000_TDT(j); - writel(0, hw->hw_addr + ring->tail); - writel(0, hw->hw_addr + ring->head); - txdctl = rd32(E1000_TXDCTL(j)); - txdctl |= E1000_TXDCTL_QUEUE_ENABLE; - wr32(E1000_TXDCTL(j), txdctl); - - /* Turn off Relaxed Ordering on head write-backs. The - * writebacks MUST be delivered in order or it will - * completely screw up our bookeeping. - */ - txctrl = rd32(E1000_DCA_TXCTRL(j)); - txctrl &= ~E1000_DCA_TXCTRL_TX_WB_RO_EN; - wr32(E1000_DCA_TXCTRL(j), txctrl); - } - - /* disable queue 0 to prevent tail bump w/o re-configuration */ - if (adapter->vfs_allocated_count) - wr32(E1000_TXDCTL(0), 0); + /* disable queue 0 which is enabled by default on 82575 and 82576 */ + wr32(E1000_TXDCTL(0), 0); /* Program the Transmit Control Register */ tctl = rd32(E1000_TCTL); @@ -1964,9 +2151,6 @@ igb_config_collision_dist(hw); - /* Setup Transmit Descriptor Settings for eop descriptor */ - adapter->txd_cmd = E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS; - /* Enable transmits */ tctl |= E1000_TCTL_EN; @@ -1974,16 +2158,69 @@ } /** - * igb_setup_rx_resources - allocate Rx resources (Descriptors) + * igb_configure_tx_ring - Configure transmit ring after Reset + * @adapter: board private structure + * @ring: tx ring to configure + * + * Configure a transmit ring after a reset. + **/ +void igb_configure_tx_ring(struct igb_adapter *adapter, + struct igb_ring *ring) +{ + struct e1000_hw *hw = &adapter->hw; + u32 txdctl; + u64 tdba = ring->dma; + int reg_idx = ring->reg_idx; + + /* disable the queue */ + txdctl = rd32(E1000_TXDCTL(reg_idx)); + wr32(E1000_TXDCTL(reg_idx), + txdctl & ~E1000_TXDCTL_QUEUE_ENABLE); + wrfl(); + mdelay(10); + + wr32(E1000_TDLEN(reg_idx), + ring->count * sizeof(union e1000_adv_tx_desc)); + wr32(E1000_TDBAL(reg_idx), + tdba & 0x00000000ffffffffULL); + wr32(E1000_TDBAH(reg_idx), tdba >> 32); + + ring->head = hw->hw_addr + E1000_TDH(reg_idx); + ring->tail = hw->hw_addr + E1000_TDT(reg_idx); + writel(0, ring->head); + writel(0, ring->tail); + + txdctl |= IGB_TX_PTHRESH; + txdctl |= IGB_TX_HTHRESH << 8; + txdctl |= IGB_TX_WTHRESH << 16; + + txdctl |= E1000_TXDCTL_QUEUE_ENABLE; + wr32(E1000_TXDCTL(reg_idx), txdctl); +} + +/** + * igb_configure_tx - Configure transmit Unit after Reset * @adapter: board private structure + * + * Configure the Tx unit of the MAC after a reset. + **/ +static void igb_configure_tx(struct igb_adapter *adapter) +{ + int i; + + for (i = 0; i < adapter->num_tx_queues; i++) + igb_configure_tx_ring(adapter, &adapter->tx_ring[i]); +} + +/** + * igb_setup_rx_resources - allocate Rx resources (Descriptors) * @rx_ring: rx descriptor ring (for a specific queue) to setup * * Returns 0 on success, negative on failure **/ -int igb_setup_rx_resources(struct igb_adapter *adapter, - struct igb_ring *rx_ring) +int igb_setup_rx_resources(struct igb_ring *rx_ring) { - struct pci_dev *pdev = adapter->pdev; + struct pci_dev *pdev = rx_ring->pdev; int size, desc_len; size = sizeof(struct igb_buffer) * rx_ring->count; @@ -2007,13 +2244,12 @@ rx_ring->next_to_clean = 0; rx_ring->next_to_use = 0; - rx_ring->adapter = adapter; - return 0; err: vfree(rx_ring->buffer_info); - dev_err(&adapter->pdev->dev, "Unable to allocate memory for " + rx_ring->buffer_info = NULL; + dev_err(&pdev->dev, "Unable to allocate memory for " "the receive descriptor ring\n"); return -ENOMEM; } @@ -2027,12 +2263,13 @@ **/ static int igb_setup_all_rx_resources(struct igb_adapter *adapter) { + struct pci_dev *pdev = adapter->pdev; int i, err = 0; for (i = 0; i < adapter->num_rx_queues; i++) { - err = igb_setup_rx_resources(adapter, &adapter->rx_ring[i]); + err = igb_setup_rx_resources(&adapter->rx_ring[i]); if (err) { - dev_err(&adapter->pdev->dev, + dev_err(&pdev->dev, "Allocation for Rx Queue %u failed\n", i); for (i--; i >= 0; i--) igb_free_rx_resources(&adapter->rx_ring[i]); @@ -2044,15 +2281,122 @@ } /** + * igb_setup_mrqc - configure the multiple receive queue control registers + * @adapter: Board private structure + **/ +static void igb_setup_mrqc(struct igb_adapter *adapter) +{ + struct e1000_hw *hw = &adapter->hw; + u32 mrqc, rxcsum; + u32 j, num_rx_queues, shift = 0, shift2 = 0; + union e1000_reta { + u32 dword; + u8 bytes[4]; + } reta; + static const u8 rsshash[40] = { + 0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2, 0x41, 0x67, + 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0, 0xd0, 0xca, 0x2b, 0xcb, + 0xae, 0x7b, 0x30, 0xb4, 0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, + 0xf2, 0x0c, 0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa }; + + /* Fill out hash function seeds */ + for (j = 0; j < 10; j++) { + u32 rsskey = rsshash[(j * 4)]; + rsskey |= rsshash[(j * 4) + 1] << 8; + rsskey |= rsshash[(j * 4) + 2] << 16; + rsskey |= rsshash[(j * 4) + 3] << 24; + array_wr32(E1000_RSSRK(0), j, rsskey); + } + + num_rx_queues = adapter->rss_queues; + + if (adapter->vfs_allocated_count) { + /* 82575 and 82576 supports 2 RSS queues for VMDq */ + switch (hw->mac.type) { + case e1000_82580: + num_rx_queues = 1; + shift = 0; + break; + case e1000_82576: + shift = 3; + num_rx_queues = 2; + break; + case e1000_82575: + shift = 2; + shift2 = 6; + default: + break; + } + } else { + if (hw->mac.type == e1000_82575) + shift = 6; + } + + for (j = 0; j < (32 * 4); j++) { + reta.bytes[j & 3] = (j % num_rx_queues) << shift; + if (shift2) + reta.bytes[j & 3] |= num_rx_queues << shift2; + if ((j & 3) == 3) + wr32(E1000_RETA(j >> 2), reta.dword); + } + + /* + * Disable raw packet checksumming so that RSS hash is placed in + * descriptor on writeback. No need to enable TCP/UDP/IP checksum + * offloads as they are enabled by default + */ + rxcsum = rd32(E1000_RXCSUM); + rxcsum |= E1000_RXCSUM_PCSD; + + if (adapter->hw.mac.type >= e1000_82576) + /* Enable Receive Checksum Offload for SCTP */ + rxcsum |= E1000_RXCSUM_CRCOFL; + + /* Don't need to set TUOFL or IPOFL, they default to 1 */ + wr32(E1000_RXCSUM, rxcsum); + + /* If VMDq is enabled then we set the appropriate mode for that, else + * we default to RSS so that an RSS hash is calculated per packet even + * if we are only using one queue */ + if (adapter->vfs_allocated_count) { + if (hw->mac.type > e1000_82575) { + /* Set the default pool for the PF's first queue */ + u32 vtctl = rd32(E1000_VT_CTL); + vtctl &= ~(E1000_VT_CTL_DEFAULT_POOL_MASK | + E1000_VT_CTL_DISABLE_DEF_POOL); + vtctl |= adapter->vfs_allocated_count << + E1000_VT_CTL_DEFAULT_POOL_SHIFT; + wr32(E1000_VT_CTL, vtctl); + } + if (adapter->rss_queues > 1) + mrqc = E1000_MRQC_ENABLE_VMDQ_RSS_2Q; + else + mrqc = E1000_MRQC_ENABLE_VMDQ; + } else { + mrqc = E1000_MRQC_ENABLE_RSS_4Q; + } + igb_vmm_control(adapter); + + mrqc |= (E1000_MRQC_RSS_FIELD_IPV4 | + E1000_MRQC_RSS_FIELD_IPV4_TCP); + mrqc |= (E1000_MRQC_RSS_FIELD_IPV6 | + E1000_MRQC_RSS_FIELD_IPV6_TCP); + mrqc |= (E1000_MRQC_RSS_FIELD_IPV4_UDP | + E1000_MRQC_RSS_FIELD_IPV6_UDP); + mrqc |= (E1000_MRQC_RSS_FIELD_IPV6_UDP_EX | + E1000_MRQC_RSS_FIELD_IPV6_TCP_EX); + + wr32(E1000_MRQC, mrqc); +} + +/** * igb_setup_rctl - configure the receive control registers * @adapter: Board private structure **/ -static void igb_setup_rctl(struct igb_adapter *adapter) +void igb_setup_rctl(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; u32 rctl; - u32 srrctl = 0; - int i; rctl = rd32(E1000_RCTL); @@ -2069,75 +2413,45 @@ */ rctl |= E1000_RCTL_SECRC; - /* - * disable store bad packets and clear size bits. - */ + /* disable store bad packets and clear size bits. */ rctl &= ~(E1000_RCTL_SBP | E1000_RCTL_SZ_256); - /* enable LPE when to prevent packets larger than max_frame_size */ - rctl |= E1000_RCTL_LPE; + /* enable LPE to prevent packets larger than max_frame_size */ + rctl |= E1000_RCTL_LPE; - /* Setup buffer sizes */ - switch (adapter->rx_buffer_len) { - case IGB_RXBUFFER_256: - rctl |= E1000_RCTL_SZ_256; - break; - case IGB_RXBUFFER_512: - rctl |= E1000_RCTL_SZ_512; - break; - default: - srrctl = ALIGN(adapter->rx_buffer_len, 1024) - >> E1000_SRRCTL_BSIZEPKT_SHIFT; - break; - } - - /* 82575 and greater support packet-split where the protocol - * header is placed in skb->data and the packet data is - * placed in pages hanging off of skb_shinfo(skb)->nr_frags. - * In the case of a non-split, skb->data is linearly filled, - * followed by the page buffers. Therefore, skb->data is - * sized to hold the largest protocol header. - */ - /* allocations using alloc_page take too long for regular MTU - * so only enable packet split for jumbo frames */ - if (adapter->netdev->mtu > ETH_DATA_LEN) { - adapter->rx_ps_hdr_size = IGB_RXBUFFER_128; - srrctl |= adapter->rx_ps_hdr_size << - E1000_SRRCTL_BSIZEHDRSIZE_SHIFT; - srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS; - } else { - adapter->rx_ps_hdr_size = 0; - srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF; - } + /* disable queue 0 to prevent tail write w/o re-config */ + wr32(E1000_RXDCTL(0), 0); /* Attention!!! For SR-IOV PF driver operations you must enable * queue drop for all VF and PF queues to prevent head of line blocking * if an un-trusted VF does not provide descriptors to hardware. */ if (adapter->vfs_allocated_count) { - u32 vmolr; - /* set all queue drop enable bits */ wr32(E1000_QDE, ALL_QUEUES); - srrctl |= E1000_SRRCTL_DROP_EN; + } - /* disable queue 0 to prevent tail write w/o re-config */ - wr32(E1000_RXDCTL(0), 0); + wr32(E1000_RCTL, rctl); +} - vmolr = rd32(E1000_VMOLR(adapter->vfs_allocated_count)); - if (rctl & E1000_RCTL_LPE) - vmolr |= E1000_VMOLR_LPE; - if (adapter->num_rx_queues > 1) - vmolr |= E1000_VMOLR_RSSE; - wr32(E1000_VMOLR(adapter->vfs_allocated_count), vmolr); - } +static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size, + int vfn) +{ + struct e1000_hw *hw = &adapter->hw; + u32 vmolr; - for (i = 0; i < adapter->num_rx_queues; i++) { - int j = adapter->rx_ring[i].reg_idx; - wr32(E1000_SRRCTL(j), srrctl); - } + /* if it isn't the PF check to see if VFs are enabled and + * increase the size to support vlan tags */ + if (vfn < adapter->vfs_allocated_count && + adapter->vf_data[vfn].vlans_enabled) + size += VLAN_TAG_SIZE; - wr32(E1000_RCTL, rctl); + vmolr = rd32(E1000_VMOLR(vfn)); + vmolr &= ~E1000_VMOLR_RLPML_MASK; + vmolr |= size | E1000_VMOLR_LPE; + wr32(E1000_VMOLR(vfn), vmolr); + + return 0; } /** @@ -2159,33 +2473,107 @@ * size and set the VMOLR RLPML to the size we need */ if (pf_id) { igb_set_vf_rlpml(adapter, max_frame_size, pf_id); - max_frame_size = MAX_STD_JUMBO_FRAME_SIZE + VLAN_TAG_SIZE; + max_frame_size = MAX_JUMBO_FRAME_SIZE; } wr32(E1000_RLPML, max_frame_size); } +static inline void igb_set_vmolr(struct igb_adapter *adapter, int vfn) +{ + struct e1000_hw *hw = &adapter->hw; + u32 vmolr; + + /* + * This register exists only on 82576 and newer so if we are older then + * we should exit and do nothing + */ + if (hw->mac.type < e1000_82576) + return; + + vmolr = rd32(E1000_VMOLR(vfn)); + vmolr |= E1000_VMOLR_AUPE | /* Accept untagged packets */ + E1000_VMOLR_STRVLAN; /* Strip vlan tags */ + + /* clear all bits that might not be set */ + vmolr &= ~(E1000_VMOLR_BAM | E1000_VMOLR_RSSE); + + if (adapter->rss_queues > 1 && vfn == adapter->vfs_allocated_count) + vmolr |= E1000_VMOLR_RSSE; /* enable RSS */ + /* + * for VMDq only allow the VFs and pool 0 to accept broadcast and + * multicast packets + */ + if (vfn <= adapter->vfs_allocated_count) + vmolr |= E1000_VMOLR_BAM; /* Accept broadcast */ + + wr32(E1000_VMOLR(vfn), vmolr); +} + /** - * igb_configure_vt_default_pool - Configure VT default pool + * igb_configure_rx_ring - Configure a receive ring after Reset * @adapter: board private structure + * @ring: receive ring to be configured * - * Configure the default pool + * Configure the Rx unit of the MAC after a reset. **/ -static void igb_configure_vt_default_pool(struct igb_adapter *adapter) +void igb_configure_rx_ring(struct igb_adapter *adapter, + struct igb_ring *ring) { struct e1000_hw *hw = &adapter->hw; - u16 pf_id = adapter->vfs_allocated_count; - u32 vtctl; + u64 rdba = ring->dma; + int reg_idx = ring->reg_idx; + u32 srrctl, rxdctl; + + /* disable the queue */ + rxdctl = rd32(E1000_RXDCTL(reg_idx)); + wr32(E1000_RXDCTL(reg_idx), + rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE); + + /* Set DMA base address registers */ + wr32(E1000_RDBAL(reg_idx), + rdba & 0x00000000ffffffffULL); + wr32(E1000_RDBAH(reg_idx), rdba >> 32); + wr32(E1000_RDLEN(reg_idx), + ring->count * sizeof(union e1000_adv_rx_desc)); + + /* initialize head and tail */ + ring->head = hw->hw_addr + E1000_RDH(reg_idx); + ring->tail = hw->hw_addr + E1000_RDT(reg_idx); + writel(0, ring->head); + writel(0, ring->tail); + + /* set descriptor configuration */ + if (ring->rx_buffer_len < IGB_RXBUFFER_1024) { + srrctl = ALIGN(ring->rx_buffer_len, 64) << + E1000_SRRCTL_BSIZEHDRSIZE_SHIFT; +#if (PAGE_SIZE / 2) > IGB_RXBUFFER_16384 + srrctl |= IGB_RXBUFFER_16384 >> + E1000_SRRCTL_BSIZEPKT_SHIFT; +#else + srrctl |= (PAGE_SIZE / 2) >> + E1000_SRRCTL_BSIZEPKT_SHIFT; +#endif + srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS; + } else { + srrctl = ALIGN(ring->rx_buffer_len, 1024) >> + E1000_SRRCTL_BSIZEPKT_SHIFT; + srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF; + } - /* not in sr-iov mode - do nothing */ - if (!pf_id) - return; + wr32(E1000_SRRCTL(reg_idx), srrctl); + + /* set filtering for VMDQ pools */ + igb_set_vmolr(adapter, reg_idx & 0x7); - vtctl = rd32(E1000_VT_CTL); - vtctl &= ~(E1000_VT_CTL_DEFAULT_POOL_MASK | - E1000_VT_CTL_DISABLE_DEF_POOL); - vtctl |= pf_id << E1000_VT_CTL_DEFAULT_POOL_SHIFT; - wr32(E1000_VT_CTL, vtctl); + /* enable receive descriptor fetching */ + rxdctl = rd32(E1000_RXDCTL(reg_idx)); + rxdctl |= E1000_RXDCTL_QUEUE_ENABLE; + rxdctl &= 0xFFF00000; + rxdctl |= IGB_RX_PTHRESH; + rxdctl |= IGB_RX_HTHRESH << 8; + rxdctl |= IGB_RX_WTHRESH << 16; + wr32(E1000_RXDCTL(reg_idx), rxdctl); } /** @@ -2196,112 +2584,19 @@ **/ static void igb_configure_rx(struct igb_adapter *adapter) { - u64 rdba; - struct e1000_hw *hw = &adapter->hw; - u32 rctl, rxcsum; - u32 rxdctl; int i; - /* disable receives while setting up the descriptors */ - rctl = rd32(E1000_RCTL); - wr32(E1000_RCTL, rctl & ~E1000_RCTL_EN); - wrfl(); - mdelay(10); + /* set UTA to appropriate mode */ + igb_set_uta(adapter); - if (adapter->itr_setting > 3) - wr32(E1000_ITR, adapter->itr); + /* set the correct pool for the PF default MAC address in entry 0 */ + igb_rar_set_qsel(adapter, adapter->hw.mac.addr, 0, + adapter->vfs_allocated_count); /* Setup the HW Rx Head and Tail Descriptor Pointers and * the Base and Length of the Rx Descriptor Ring */ - for (i = 0; i < adapter->num_rx_queues; i++) { - struct igb_ring *ring = &adapter->rx_ring[i]; - int j = ring->reg_idx; - rdba = ring->dma; - wr32(E1000_RDBAL(j), - rdba & 0x00000000ffffffffULL); - wr32(E1000_RDBAH(j), rdba >> 32); - wr32(E1000_RDLEN(j), - ring->count * sizeof(union e1000_adv_rx_desc)); - - ring->head = E1000_RDH(j); - ring->tail = E1000_RDT(j); - writel(0, hw->hw_addr + ring->tail); - writel(0, hw->hw_addr + ring->head); - - rxdctl = rd32(E1000_RXDCTL(j)); - rxdctl |= E1000_RXDCTL_QUEUE_ENABLE; - rxdctl &= 0xFFF00000; - rxdctl |= IGB_RX_PTHRESH; - rxdctl |= IGB_RX_HTHRESH << 8; - rxdctl |= IGB_RX_WTHRESH << 16; - wr32(E1000_RXDCTL(j), rxdctl); - } - - if (adapter->num_rx_queues > 1) { - u32 random[10]; - u32 mrqc; - u32 j, shift; - union e1000_reta { - u32 dword; - u8 bytes[4]; - } reta; - - get_random_bytes(&random[0], 40); - - if (hw->mac.type >= e1000_82576) - shift = 0; - else - shift = 6; - for (j = 0; j < (32 * 4); j++) { - reta.bytes[j & 3] = - adapter->rx_ring[(j % adapter->num_rx_queues)].reg_idx << shift; - if ((j & 3) == 3) - writel(reta.dword, - hw->hw_addr + E1000_RETA(0) + (j & ~3)); - } - if (adapter->vfs_allocated_count) - mrqc = E1000_MRQC_ENABLE_VMDQ_RSS_2Q; - else - mrqc = E1000_MRQC_ENABLE_RSS_4Q; - - /* Fill out hash function seeds */ - for (j = 0; j < 10; j++) - array_wr32(E1000_RSSRK(0), j, random[j]); - - mrqc |= (E1000_MRQC_RSS_FIELD_IPV4 | - E1000_MRQC_RSS_FIELD_IPV4_TCP); - mrqc |= (E1000_MRQC_RSS_FIELD_IPV6 | - E1000_MRQC_RSS_FIELD_IPV6_TCP); - mrqc |= (E1000_MRQC_RSS_FIELD_IPV4_UDP | - E1000_MRQC_RSS_FIELD_IPV6_UDP); - mrqc |= (E1000_MRQC_RSS_FIELD_IPV6_UDP_EX | - E1000_MRQC_RSS_FIELD_IPV6_TCP_EX); - - wr32(E1000_MRQC, mrqc); - } else if (adapter->vfs_allocated_count) { - /* Enable multi-queue for sr-iov */ - wr32(E1000_MRQC, E1000_MRQC_ENABLE_VMDQ); - } - - /* Enable Receive Checksum Offload for TCP and UDP */ - rxcsum = rd32(E1000_RXCSUM); - /* Disable raw packet checksumming */ - rxcsum |= E1000_RXCSUM_PCSD; - - if (adapter->hw.mac.type == e1000_82576) - /* Enable Receive Checksum Offload for SCTP */ - rxcsum |= E1000_RXCSUM_CRCOFL; - - /* Don't need to set TUOFL or IPOFL, they default to 1 */ - wr32(E1000_RXCSUM, rxcsum); - - /* Set the default pool for the PF's first queue */ - igb_configure_vt_default_pool(adapter); - - igb_rlpml_set(adapter); - - /* Enable Receives */ - wr32(E1000_RCTL, rctl); + for (i = 0; i < adapter->num_rx_queues; i++) + igb_configure_rx_ring(adapter, &adapter->rx_ring[i]); } /** @@ -2312,14 +2607,17 @@ **/ void igb_free_tx_resources(struct igb_ring *tx_ring) { - struct pci_dev *pdev = tx_ring->adapter->pdev; - igb_clean_tx_ring(tx_ring); vfree(tx_ring->buffer_info); tx_ring->buffer_info = NULL; - pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, tx_ring->dma); + /* if not set, then don't free */ + if (!tx_ring->desc) + return; + + pci_free_consistent(tx_ring->pdev, tx_ring->size, + tx_ring->desc, tx_ring->dma); tx_ring->desc = NULL; } @@ -2338,18 +2636,30 @@ igb_free_tx_resources(&adapter->tx_ring[i]); } -static void igb_unmap_and_free_tx_resource(struct igb_adapter *adapter, - struct igb_buffer *buffer_info) +void igb_unmap_and_free_tx_resource(struct igb_ring *tx_ring, + struct igb_buffer *buffer_info) { - buffer_info->dma = 0; + if (buffer_info->dma) { + if (buffer_info->mapped_as_page) + pci_unmap_page(tx_ring->pdev, + buffer_info->dma, + buffer_info->length, + PCI_DMA_TODEVICE); + else + pci_unmap_single(tx_ring->pdev, + buffer_info->dma, + buffer_info->length, + PCI_DMA_TODEVICE); + buffer_info->dma = 0; + } if (buffer_info->skb) { - skb_dma_unmap(&adapter->pdev->dev, buffer_info->skb, - DMA_TO_DEVICE); dev_kfree_skb_any(buffer_info->skb); buffer_info->skb = NULL; } buffer_info->time_stamp = 0; - /* buffer_info must be completely set up in the transmit path */ + buffer_info->length = 0; + buffer_info->next_to_watch = 0; + buffer_info->mapped_as_page = false; } /** @@ -2358,7 +2668,6 @@ **/ static void igb_clean_tx_ring(struct igb_ring *tx_ring) { - struct igb_adapter *adapter = tx_ring->adapter; struct igb_buffer *buffer_info; unsigned long size; unsigned int i; @@ -2369,21 +2678,17 @@ for (i = 0; i < tx_ring->count; i++) { buffer_info = &tx_ring->buffer_info[i]; - igb_unmap_and_free_tx_resource(adapter, buffer_info); + igb_unmap_and_free_tx_resource(tx_ring, buffer_info); } size = sizeof(struct igb_buffer) * tx_ring->count; memset(tx_ring->buffer_info, 0, size); /* Zero out the descriptor ring */ - memset(tx_ring->desc, 0, tx_ring->size); tx_ring->next_to_use = 0; tx_ring->next_to_clean = 0; - - writel(0, adapter->hw.hw_addr + tx_ring->head); - writel(0, adapter->hw.hw_addr + tx_ring->tail); } /** @@ -2406,14 +2711,17 @@ **/ void igb_free_rx_resources(struct igb_ring *rx_ring) { - struct pci_dev *pdev = rx_ring->adapter->pdev; - igb_clean_rx_ring(rx_ring); vfree(rx_ring->buffer_info); rx_ring->buffer_info = NULL; - pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma); + /* if not set, then don't free */ + if (!rx_ring->desc) + return; + + pci_free_consistent(rx_ring->pdev, rx_ring->size, + rx_ring->desc, rx_ring->dma); rx_ring->desc = NULL; } @@ -2438,26 +2746,21 @@ **/ static void igb_clean_rx_ring(struct igb_ring *rx_ring) { - struct igb_adapter *adapter = rx_ring->adapter; struct igb_buffer *buffer_info; - struct pci_dev *pdev = adapter->pdev; unsigned long size; unsigned int i; if (!rx_ring->buffer_info) return; + /* Free all the Rx ring sk_buffs */ for (i = 0; i < rx_ring->count; i++) { buffer_info = &rx_ring->buffer_info[i]; if (buffer_info->dma) { - if (adapter->rx_ps_hdr_size) - pci_unmap_single(pdev, buffer_info->dma, - adapter->rx_ps_hdr_size, - PCI_DMA_FROMDEVICE); - else - pci_unmap_single(pdev, buffer_info->dma, - adapter->rx_buffer_len, - PCI_DMA_FROMDEVICE); + pci_unmap_single(rx_ring->pdev, + buffer_info->dma, + rx_ring->rx_buffer_len, + PCI_DMA_FROMDEVICE); buffer_info->dma = 0; } @@ -2465,14 +2768,16 @@ dev_kfree_skb(buffer_info->skb); buffer_info->skb = NULL; } + if (buffer_info->page_dma) { + pci_unmap_page(rx_ring->pdev, + buffer_info->page_dma, + PAGE_SIZE / 2, + PCI_DMA_FROMDEVICE); + buffer_info->page_dma = 0; + } if (buffer_info->page) { - if (buffer_info->page_dma) - pci_unmap_page(pdev, buffer_info->page_dma, - PAGE_SIZE / 2, - PCI_DMA_FROMDEVICE); put_page(buffer_info->page); buffer_info->page = NULL; - buffer_info->page_dma = 0; buffer_info->page_offset = 0; } } @@ -2483,48 +2788,135 @@ /* Zero out the descriptor ring */ memset(rx_ring->desc, 0, rx_ring->size); - rx_ring->next_to_clean = 0; - rx_ring->next_to_use = 0; + rx_ring->next_to_clean = 0; + rx_ring->next_to_use = 0; +} + +/** + * igb_clean_all_rx_rings - Free Rx Buffers for all queues + * @adapter: board private structure + **/ +static void igb_clean_all_rx_rings(struct igb_adapter *adapter) +{ + int i; + + for (i = 0; i < adapter->num_rx_queues; i++) + igb_clean_rx_ring(&adapter->rx_ring[i]); +} + +/** + * igb_set_mac - Change the Ethernet Address of the NIC + * @netdev: network interface device structure + * @p: pointer to an address structure + * + * Returns 0 on success, negative on failure + **/ +static int igb_set_mac(struct net_device *netdev, void *p) +{ + struct igb_adapter *adapter = netdev_priv(netdev); + struct e1000_hw *hw = &adapter->hw; + struct sockaddr *addr = p; + + if (!is_valid_ether_addr(addr->sa_data)) + return -EADDRNOTAVAIL; + + memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); + memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len); + + /* set the correct pool for the new PF MAC address in entry 0 */ + igb_rar_set_qsel(adapter, hw->mac.addr, 0, + adapter->vfs_allocated_count); + + return 0; +} + +/** + * igb_write_mc_addr_list - write multicast addresses to MTA + * @netdev: network interface device structure + * + * Writes multicast address list to the MTA hash table. + * Returns: -ENOMEM on failure + * 0 on no addresses written + * X on writing X addresses to MTA + **/ +static int igb_write_mc_addr_list(struct net_device *netdev) +{ + struct igb_adapter *adapter = netdev_priv(netdev); + struct e1000_hw *hw = &adapter->hw; + struct dev_mc_list *mc_ptr = netdev->mc_list; + u8 *mta_list; + u32 vmolr = 0; + int i; + + if (!netdev->mc_count) { + /* nothing to program, so clear mc list */ + igb_update_mc_addr_list(hw, NULL, 0); + igb_restore_vf_multicasts(adapter); + return 0; + } + + mta_list = kzalloc(netdev->mc_count * 6, GFP_ATOMIC); + if (!mta_list) + return -ENOMEM; + + /* set vmolr receive overflow multicast bit */ + vmolr |= E1000_VMOLR_ROMPE; - writel(0, adapter->hw.hw_addr + rx_ring->head); - writel(0, adapter->hw.hw_addr + rx_ring->tail); -} + /* The shared function expects a packed array of only addresses. */ + mc_ptr = netdev->mc_list; -/** - * igb_clean_all_rx_rings - Free Rx Buffers for all queues - * @adapter: board private structure - **/ -static void igb_clean_all_rx_rings(struct igb_adapter *adapter) -{ - int i; + for (i = 0; i < netdev->mc_count; i++) { + if (!mc_ptr) + break; + memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr, ETH_ALEN); + mc_ptr = mc_ptr->next; + } + igb_update_mc_addr_list(hw, mta_list, i); + kfree(mta_list); - for (i = 0; i < adapter->num_rx_queues; i++) - igb_clean_rx_ring(&adapter->rx_ring[i]); + return netdev->mc_count; } /** - * igb_set_mac - Change the Ethernet Address of the NIC + * igb_write_uc_addr_list - write unicast addresses to RAR table * @netdev: network interface device structure - * @p: pointer to an address structure * - * Returns 0 on success, negative on failure + * Writes unicast address list to the RAR table. + * Returns: -ENOMEM on failure/insufficient address space + * 0 on no addresses written + * X on writing X addresses to the RAR table **/ -static int igb_set_mac(struct net_device *netdev, void *p) +static int igb_write_uc_addr_list(struct net_device *netdev) { struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; - struct sockaddr *addr = p; - - if (!is_valid_ether_addr(addr->sa_data)) - return -EADDRNOTAVAIL; + unsigned int vfn = adapter->vfs_allocated_count; + unsigned int rar_entries = hw->mac.rar_entry_count - (vfn + 1); + int count = 0; - memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); - memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len); + /* return ENOMEM indicating insufficient memory for addresses */ + if (netdev->uc.count > rar_entries) + return -ENOMEM; - igb_rar_set(hw, hw->mac.addr, 0); - igb_set_rah_pool(hw, adapter->vfs_allocated_count, 0); + if (netdev->uc.count && rar_entries) { + struct netdev_hw_addr *ha; + list_for_each_entry(ha, &netdev->uc.list, list) { + if (!rar_entries) + break; + igb_rar_set_qsel(adapter, ha->addr, + rar_entries--, + vfn); + count++; + } + } + /* write the addresses in reverse order to avoid write combining */ + for (; rar_entries > 0 ; rar_entries--) { + wr32(E1000_RAH(rar_entries), 0); + wr32(E1000_RAL(rar_entries), 0); + } + wrfl(); - return 0; + return count; } /** @@ -2540,74 +2932,63 @@ { struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; - unsigned int rar_entries = hw->mac.rar_entry_count - - (adapter->vfs_allocated_count + 1); - struct dev_mc_list *mc_ptr = netdev->mc_list; - u8 *mta_list = NULL; - u32 rctl; - int i; + unsigned int vfn = adapter->vfs_allocated_count; + u32 rctl, vmolr = 0; + int count; /* Check for Promiscuous and All Multicast modes */ rctl = rd32(E1000_RCTL); + /* clear the effected bits */ + rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE | E1000_RCTL_VFE); + if (netdev->flags & IFF_PROMISC) { rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE); - rctl &= ~E1000_RCTL_VFE; + vmolr |= (E1000_VMOLR_ROPE | E1000_VMOLR_MPME); } else { - if (netdev->flags & IFF_ALLMULTI) + if (netdev->flags & IFF_ALLMULTI) { rctl |= E1000_RCTL_MPE; - else - rctl &= ~E1000_RCTL_MPE; - - if (netdev->uc.count > rar_entries) + vmolr |= E1000_VMOLR_MPME; + } else { + /* + * Write addresses to the MTA, if the attempt fails + * then we should just turn on promiscous mode so + * that we can at least receive multicast traffic + */ + count = igb_write_mc_addr_list(netdev); + if (count < 0) { + rctl |= E1000_RCTL_MPE; + vmolr |= E1000_VMOLR_MPME; + } else if (count) { + vmolr |= E1000_VMOLR_ROMPE; + } + } + /* + * Write addresses to available RAR registers, if there is not + * sufficient space to store all the addresses then enable + * unicast promiscous mode + */ + count = igb_write_uc_addr_list(netdev); + if (count < 0) { rctl |= E1000_RCTL_UPE; - else - rctl &= ~E1000_RCTL_UPE; + vmolr |= E1000_VMOLR_ROPE; + } rctl |= E1000_RCTL_VFE; } wr32(E1000_RCTL, rctl); - if (netdev->uc.count && rar_entries) { - struct netdev_hw_addr *ha; - list_for_each_entry(ha, &netdev->uc.list, list) { - if (!rar_entries) - break; - igb_rar_set(hw, ha->addr, rar_entries); - igb_set_rah_pool(hw, adapter->vfs_allocated_count, - rar_entries); - rar_entries--; - } - } - /* write the addresses in reverse order to avoid write combining */ - for (; rar_entries > 0 ; rar_entries--) { - wr32(E1000_RAH(rar_entries), 0); - wr32(E1000_RAL(rar_entries), 0); - } - wrfl(); - - if (!netdev->mc_count) { - /* nothing to program, so clear mc list */ - igb_update_mc_addr_list(hw, NULL, 0); - igb_restore_vf_multicasts(adapter); - return; - } - - mta_list = kzalloc(netdev->mc_count * 6, GFP_ATOMIC); - if (!mta_list) { - dev_err(&adapter->pdev->dev, - "failed to allocate multicast filter list\n"); + /* + * In order to support SR-IOV and eventually VMDq it is necessary to set + * the VMOLR to enable the appropriate modes. Without this workaround + * we will have issues with VLAN tag stripping not being done for frames + * that are only arriving because we are the default pool + */ + if (hw->mac.type < e1000_82576) return; - } - /* The shared function expects a packed array of only addresses. */ - for (i = 0; i < netdev->mc_count; i++) { - if (!mc_ptr) - break; - memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr, ETH_ALEN); - mc_ptr = mc_ptr->next; - } - igb_update_mc_addr_list(hw, mta_list, i); - kfree(mta_list); + vmolr |= rd32(E1000_VMOLR(vfn)) & + ~(E1000_VMOLR_ROPE | E1000_VMOLR_MPME | E1000_VMOLR_ROMPE); + wr32(E1000_VMOLR(vfn), vmolr); igb_restore_vf_multicasts(adapter); } @@ -2669,37 +3050,33 @@ static void igb_watchdog_task(struct work_struct *work) { struct igb_adapter *adapter = container_of(work, - struct igb_adapter, watchdog_task); + struct igb_adapter, + watchdog_task); struct e1000_hw *hw = &adapter->hw; struct net_device *netdev = adapter->netdev; - struct igb_ring *tx_ring = adapter->tx_ring; u32 link; - u32 eics = 0; int i; link = igb_has_link(adapter); - if ((netif_carrier_ok(netdev)) && link) - goto link_up; - if (link) { if (!netif_carrier_ok(netdev)) { u32 ctrl; - hw->mac.ops.get_speed_and_duplex(&adapter->hw, - &adapter->link_speed, - &adapter->link_duplex); + hw->mac.ops.get_speed_and_duplex(hw, + &adapter->link_speed, + &adapter->link_duplex); ctrl = rd32(E1000_CTRL); /* Links status message must follow this format */ printk(KERN_INFO "igb: %s NIC Link is Up %d Mbps %s, " "Flow Control: %s\n", - netdev->name, - adapter->link_speed, - adapter->link_duplex == FULL_DUPLEX ? + netdev->name, + adapter->link_speed, + adapter->link_duplex == FULL_DUPLEX ? "Full Duplex" : "Half Duplex", - ((ctrl & E1000_CTRL_TFCE) && (ctrl & - E1000_CTRL_RFCE)) ? "RX/TX" : ((ctrl & - E1000_CTRL_RFCE) ? "RX" : ((ctrl & - E1000_CTRL_TFCE) ? "TX" : "None"))); + ((ctrl & E1000_CTRL_TFCE) && + (ctrl & E1000_CTRL_RFCE)) ? "RX/TX" : + ((ctrl & E1000_CTRL_RFCE) ? "RX" : + ((ctrl & E1000_CTRL_TFCE) ? "TX" : "None"))); /* tweak tx_queue_len according to speed/duplex and * adjust the timeout factor */ @@ -2743,46 +3120,40 @@ } } -link_up: igb_update_stats(adapter); + igb_update_adaptive(hw); - hw->mac.tx_packet_delta = adapter->stats.tpt - adapter->tpt_old; - adapter->tpt_old = adapter->stats.tpt; - hw->mac.collision_delta = adapter->stats.colc - adapter->colc_old; - adapter->colc_old = adapter->stats.colc; - - adapter->gorc = adapter->stats.gorc - adapter->gorc_old; - adapter->gorc_old = adapter->stats.gorc; - adapter->gotc = adapter->stats.gotc - adapter->gotc_old; - adapter->gotc_old = adapter->stats.gotc; - - igb_update_adaptive(&adapter->hw); - - if (!netif_carrier_ok(netdev)) { - if (igb_desc_unused(tx_ring) + 1 < tx_ring->count) { + for (i = 0; i < adapter->num_tx_queues; i++) { + struct igb_ring *tx_ring = &adapter->tx_ring[i]; + if (!netif_carrier_ok(netdev)) { /* We've lost link, so the controller stops DMA, * but we've got queued Tx work that's never going * to get done, so reset controller to flush Tx. * (Do the reset outside of interrupt context). */ - adapter->tx_timeout_count++; - schedule_work(&adapter->reset_task); - /* return immediately since reset is imminent */ - return; + if (igb_desc_unused(tx_ring) + 1 < tx_ring->count) { + adapter->tx_timeout_count++; + schedule_work(&adapter->reset_task); + /* return immediately since reset is imminent */ + return; + } } + + /* Force detection of hung controller every watchdog period */ + tx_ring->detect_tx_hung = true; } /* Cause software interrupt to ensure rx ring is cleaned */ if (adapter->msix_entries) { - for (i = 0; i < adapter->num_rx_queues; i++) - eics |= adapter->rx_ring[i].eims_value; + u32 eics = 0; + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + eics |= q_vector->eims_value; + } wr32(E1000_EICS, eics); } else { wr32(E1000_ICS, E1000_ICS_RXDMT0); } - /* Force detection of hung controller every watchdog period */ - tx_ring->detect_tx_hung = true; - /* Reset the timer */ if (!test_bit(__IGB_DOWN, &adapter->state)) mod_timer(&adapter->watchdog_timer, @@ -2796,7 +3167,6 @@ latency_invalid = 255 }; - /** * igb_update_ring_itr - update the dynamic ITR value based on packet size * @@ -2811,25 +3181,37 @@ * parameter (see igb_param.c) * NOTE: This function is called only when operating in a multiqueue * receive environment. - * @rx_ring: pointer to ring + * @q_vector: pointer to q_vector **/ -static void igb_update_ring_itr(struct igb_ring *rx_ring) +static void igb_update_ring_itr(struct igb_q_vector *q_vector) { - int new_val = rx_ring->itr_val; + int new_val = q_vector->itr_val; int avg_wire_size = 0; - struct igb_adapter *adapter = rx_ring->adapter; - - if (!rx_ring->total_packets) - goto clear_counts; /* no packets, so don't do anything */ + struct igb_adapter *adapter = q_vector->adapter; /* For non-gigabit speeds, just fix the interrupt rate at 4000 * ints/sec - ITR timer value of 120 ticks. */ if (adapter->link_speed != SPEED_1000) { - new_val = 120; + new_val = 976; goto set_itr_val; } - avg_wire_size = rx_ring->total_bytes / rx_ring->total_packets; + + if (q_vector->rx_ring && q_vector->rx_ring->total_packets) { + struct igb_ring *ring = q_vector->rx_ring; + avg_wire_size = ring->total_bytes / ring->total_packets; + } + + if (q_vector->tx_ring && q_vector->tx_ring->total_packets) { + struct igb_ring *ring = q_vector->tx_ring; + avg_wire_size = max_t(u32, avg_wire_size, + (ring->total_bytes / + ring->total_packets)); + } + + /* if avg_wire_size isn't set no work was done */ + if (!avg_wire_size) + goto clear_counts; /* Add 24 bytes to size to account for CRC, preamble, and gap */ avg_wire_size += 24; @@ -2844,13 +3226,19 @@ new_val = avg_wire_size / 2; set_itr_val: - if (new_val != rx_ring->itr_val) { - rx_ring->itr_val = new_val; - rx_ring->set_itr = 1; + if (new_val != q_vector->itr_val) { + q_vector->itr_val = new_val; + q_vector->set_itr = 1; } clear_counts: - rx_ring->total_bytes = 0; - rx_ring->total_packets = 0; + if (q_vector->rx_ring) { + q_vector->rx_ring->total_bytes = 0; + q_vector->rx_ring->total_packets = 0; + } + if (q_vector->tx_ring) { + q_vector->tx_ring->total_bytes = 0; + q_vector->tx_ring->total_packets = 0; + } } /** @@ -2867,7 +3255,7 @@ * NOTE: These calculations are only valid when operating in a single- * queue environment. * @adapter: pointer to adapter - * @itr_setting: current adapter->itr + * @itr_setting: current q_vector->itr_val * @packets: the number of packets during this measurement interval * @bytes: the number of bytes during this measurement interval **/ @@ -2919,8 +3307,9 @@ static void igb_set_itr(struct igb_adapter *adapter) { + struct igb_q_vector *q_vector = adapter->q_vector[0]; u16 current_itr; - u32 new_itr = adapter->itr; + u32 new_itr = q_vector->itr_val; /* for non-gigabit speeds, just fix the interrupt rate at 4000 */ if (adapter->link_speed != SPEED_1000) { @@ -2934,18 +3323,14 @@ adapter->rx_ring->total_packets, adapter->rx_ring->total_bytes); - if (adapter->rx_ring->buddy) { - adapter->tx_itr = igb_update_itr(adapter, - adapter->tx_itr, - adapter->tx_ring->total_packets, - adapter->tx_ring->total_bytes); - current_itr = max(adapter->rx_itr, adapter->tx_itr); - } else { - current_itr = adapter->rx_itr; - } + adapter->tx_itr = igb_update_itr(adapter, + adapter->tx_itr, + adapter->tx_ring->total_packets, + adapter->tx_ring->total_bytes); + current_itr = max(adapter->rx_itr, adapter->tx_itr); /* conservative mode (itr 3) eliminates the lowest_latency setting */ - if (adapter->itr_setting == 3 && current_itr == lowest_latency) + if (adapter->rx_itr_setting == 3 && current_itr == lowest_latency) current_itr = low_latency; switch (current_itr) { @@ -2966,18 +3351,17 @@ set_itr_now: adapter->rx_ring->total_bytes = 0; adapter->rx_ring->total_packets = 0; - if (adapter->rx_ring->buddy) { - adapter->rx_ring->buddy->total_bytes = 0; - adapter->rx_ring->buddy->total_packets = 0; - } + adapter->tx_ring->total_bytes = 0; + adapter->tx_ring->total_packets = 0; - if (new_itr != adapter->itr) { + if (new_itr != q_vector->itr_val) { /* this attempts to bias the interrupt rate towards Bulk * by adding intermediate steps when interrupt rate is * increasing */ - new_itr = new_itr > adapter->itr ? - max((new_itr * adapter->itr) / - (new_itr + (adapter->itr >> 2)), new_itr) : + new_itr = new_itr > q_vector->itr_val ? + max((new_itr * q_vector->itr_val) / + (new_itr + (q_vector->itr_val >> 2)), + new_itr) : new_itr; /* Don't write the value here; it resets the adapter's * internal timer, and causes us to delay far longer than @@ -2985,25 +3369,22 @@ * value at the beginning of the next interrupt so the timing * ends up being correct. */ - adapter->itr = new_itr; - adapter->rx_ring->itr_val = new_itr; - adapter->rx_ring->set_itr = 1; + q_vector->itr_val = new_itr; + q_vector->set_itr = 1; } return; } - #define IGB_TX_FLAGS_CSUM 0x00000001 #define IGB_TX_FLAGS_VLAN 0x00000002 #define IGB_TX_FLAGS_TSO 0x00000004 #define IGB_TX_FLAGS_IPV4 0x00000008 -#define IGB_TX_FLAGS_TSTAMP 0x00000010 -#define IGB_TX_FLAGS_VLAN_MASK 0xffff0000 -#define IGB_TX_FLAGS_VLAN_SHIFT 16 +#define IGB_TX_FLAGS_TSTAMP 0x00000010 +#define IGB_TX_FLAGS_VLAN_MASK 0xffff0000 +#define IGB_TX_FLAGS_VLAN_SHIFT 16 -static inline int igb_tso_adv(struct igb_adapter *adapter, - struct igb_ring *tx_ring, +static inline int igb_tso_adv(struct igb_ring *tx_ring, struct sk_buff *skb, u32 tx_flags, u8 *hdr_len) { struct e1000_adv_tx_context_desc *context_desc; @@ -3065,8 +3446,8 @@ mss_l4len_idx |= (l4len << E1000_ADVTXD_L4LEN_SHIFT); /* For 82575, context index must be unique per ring. */ - if (adapter->flags & IGB_FLAG_NEED_CTX_IDX) - mss_l4len_idx |= tx_ring->queue_index << 4; + if (tx_ring->flags & IGB_RING_FLAG_TX_CTX_IDX) + mss_l4len_idx |= tx_ring->reg_idx << 4; context_desc->mss_l4len_idx = cpu_to_le32(mss_l4len_idx); context_desc->seqnum_seed = 0; @@ -3083,14 +3464,14 @@ return true; } -static inline bool igb_tx_csum_adv(struct igb_adapter *adapter, - struct igb_ring *tx_ring, - struct sk_buff *skb, u32 tx_flags) +static inline bool igb_tx_csum_adv(struct igb_ring *tx_ring, + struct sk_buff *skb, u32 tx_flags) { struct e1000_adv_tx_context_desc *context_desc; - unsigned int i; + struct pci_dev *pdev = tx_ring->pdev; struct igb_buffer *buffer_info; u32 info = 0, tu_cmd = 0; + unsigned int i; if ((skb->ip_summed == CHECKSUM_PARTIAL) || (tx_flags & IGB_TX_FLAGS_VLAN)) { @@ -3100,6 +3481,7 @@ if (tx_flags & IGB_TX_FLAGS_VLAN) info |= (tx_flags & IGB_TX_FLAGS_VLAN_MASK); + info |= (skb_network_offset(skb) << E1000_ADVTXD_MACLEN_SHIFT); if (skb->ip_summed == CHECKSUM_PARTIAL) info |= skb_network_header_len(skb); @@ -3137,7 +3519,7 @@ break; default: if (unlikely(net_ratelimit())) - dev_warn(&adapter->pdev->dev, + dev_warn(&pdev->dev, "partial checksum but proto=%x!\n", skb->protocol); break; @@ -3146,11 +3528,9 @@ context_desc->type_tucmd_mlhl = cpu_to_le32(tu_cmd); context_desc->seqnum_seed = 0; - if (adapter->flags & IGB_FLAG_NEED_CTX_IDX) + if (tx_ring->flags & IGB_RING_FLAG_TX_CTX_IDX) context_desc->mss_l4len_idx = - cpu_to_le32(tx_ring->queue_index << 4); - else - context_desc->mss_l4len_idx = 0; + cpu_to_le32(tx_ring->reg_idx << 4); buffer_info->time_stamp = jiffies; buffer_info->next_to_watch = i; @@ -3169,36 +3549,32 @@ #define IGB_MAX_TXD_PWR 16 #define IGB_MAX_DATA_PER_TXD (1<pdev; unsigned int len = skb_headlen(skb); unsigned int count = 0, i; unsigned int f; - dma_addr_t *map; i = tx_ring->next_to_use; - if (skb_dma_map(&adapter->pdev->dev, skb, DMA_TO_DEVICE)) { - dev_err(&adapter->pdev->dev, "TX DMA map failed\n"); - return 0; - } - - map = skb_shinfo(skb)->dma_maps; - buffer_info = &tx_ring->buffer_info[i]; BUG_ON(len >= IGB_MAX_DATA_PER_TXD); buffer_info->length = len; /* set time_stamp *before* dma to help avoid a possible race */ buffer_info->time_stamp = jiffies; buffer_info->next_to_watch = i; - buffer_info->dma = skb_shinfo(skb)->dma_head; + buffer_info->dma = pci_map_single(pdev, skb->data, len, + PCI_DMA_TODEVICE); + if (pci_dma_mapping_error(pdev, buffer_info->dma)) + goto dma_error; for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) { struct skb_frag_struct *frag; + count++; i++; if (i == tx_ring->count) i = 0; @@ -3211,25 +3587,54 @@ buffer_info->length = len; buffer_info->time_stamp = jiffies; buffer_info->next_to_watch = i; - buffer_info->dma = map[count]; - count++; + buffer_info->mapped_as_page = true; + buffer_info->dma = pci_map_page(pdev, + frag->page, + frag->page_offset, + len, + PCI_DMA_TODEVICE); + if (pci_dma_mapping_error(pdev, buffer_info->dma)) + goto dma_error; + } tx_ring->buffer_info[i].skb = skb; tx_ring->buffer_info[first].next_to_watch = i; - return count + 1; + return ++count; + +dma_error: + dev_err(&pdev->dev, "TX DMA map failed\n"); + + /* clear timestamp and dma mappings for failed buffer_info mapping */ + buffer_info->dma = 0; + buffer_info->time_stamp = 0; + buffer_info->length = 0; + buffer_info->next_to_watch = 0; + buffer_info->mapped_as_page = false; + count--; + + /* clear timestamp and dma mappings for remaining portion of packet */ + while (count >= 0) { + count--; + i--; + if (i < 0) + i += tx_ring->count; + buffer_info = &tx_ring->buffer_info[i]; + igb_unmap_and_free_tx_resource(tx_ring, buffer_info); + } + + return 0; } -static inline void igb_tx_queue_adv(struct igb_adapter *adapter, - struct igb_ring *tx_ring, +static inline void igb_tx_queue_adv(struct igb_ring *tx_ring, int tx_flags, int count, u32 paylen, u8 hdr_len) { - union e1000_adv_tx_desc *tx_desc = NULL; + union e1000_adv_tx_desc *tx_desc; struct igb_buffer *buffer_info; u32 olinfo_status = 0, cmd_type_len; - unsigned int i; + unsigned int i = tx_ring->next_to_use; cmd_type_len = (E1000_ADVTXD_DTYP_DATA | E1000_ADVTXD_DCMD_IFCS | E1000_ADVTXD_DCMD_DEXT); @@ -3254,27 +3659,28 @@ olinfo_status |= E1000_TXD_POPTS_TXSM << 8; } - if ((adapter->flags & IGB_FLAG_NEED_CTX_IDX) && - (tx_flags & (IGB_TX_FLAGS_CSUM | IGB_TX_FLAGS_TSO | + if ((tx_ring->flags & IGB_RING_FLAG_TX_CTX_IDX) && + (tx_flags & (IGB_TX_FLAGS_CSUM | + IGB_TX_FLAGS_TSO | IGB_TX_FLAGS_VLAN))) - olinfo_status |= tx_ring->queue_index << 4; + olinfo_status |= tx_ring->reg_idx << 4; olinfo_status |= ((paylen - hdr_len) << E1000_ADVTXD_PAYLEN_SHIFT); - i = tx_ring->next_to_use; - while (count--) { + do { buffer_info = &tx_ring->buffer_info[i]; tx_desc = E1000_TX_DESC_ADV(*tx_ring, i); tx_desc->read.buffer_addr = cpu_to_le64(buffer_info->dma); tx_desc->read.cmd_type_len = cpu_to_le32(cmd_type_len | buffer_info->length); tx_desc->read.olinfo_status = cpu_to_le32(olinfo_status); + count--; i++; if (i == tx_ring->count) i = 0; - } + } while (count > 0); - tx_desc->read.cmd_type_len |= cpu_to_le32(adapter->txd_cmd); + tx_desc->read.cmd_type_len |= cpu_to_le32(IGB_ADVTXD_DCMD); /* Force memory writes to complete before letting h/w * know there are new descriptors to fetch. (Only * applicable for weak-ordered memory model archs, @@ -3282,16 +3688,15 @@ wmb(); tx_ring->next_to_use = i; - writel(i, adapter->hw.hw_addr + tx_ring->tail); + writel(i, tx_ring->tail); /* we need this if more than one processor can write to our tail * at a time, it syncronizes IO on IA64/Altix systems */ mmiowb(); } -static int __igb_maybe_stop_tx(struct net_device *netdev, - struct igb_ring *tx_ring, int size) +static int __igb_maybe_stop_tx(struct igb_ring *tx_ring, int size) { - struct igb_adapter *adapter = netdev_priv(netdev); + struct net_device *netdev = tx_ring->netdev; netif_stop_subqueue(netdev, tx_ring->queue_index); @@ -3307,66 +3712,43 @@ /* A reprieve! */ netif_wake_subqueue(netdev, tx_ring->queue_index); - ++adapter->restart_queue; + tx_ring->tx_stats.restart_queue++; return 0; } -static int igb_maybe_stop_tx(struct net_device *netdev, - struct igb_ring *tx_ring, int size) +static int igb_maybe_stop_tx(struct igb_ring *tx_ring, int size) { if (igb_desc_unused(tx_ring) >= size) return 0; - return __igb_maybe_stop_tx(netdev, tx_ring, size); + return __igb_maybe_stop_tx(tx_ring, size); } -static netdev_tx_t igb_xmit_frame_ring_adv(struct sk_buff *skb, - struct net_device *netdev, - struct igb_ring *tx_ring) +netdev_tx_t igb_xmit_frame_ring_adv(struct sk_buff *skb, + struct igb_ring *tx_ring) { - struct igb_adapter *adapter = netdev_priv(netdev); + struct igb_adapter *adapter = netdev_priv(tx_ring->netdev); unsigned int first; unsigned int tx_flags = 0; u8 hdr_len = 0; - int count = 0; - int tso = 0; - union skb_shared_tx *shtx; - - if (test_bit(__IGB_DOWN, &adapter->state)) { - dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } - - if (skb->len <= 0) { - dev_kfree_skb_any(skb); - return NETDEV_TX_OK; - } + int tso = 0, count; + union skb_shared_tx *shtx = skb_tx(skb); /* need: 1 descriptor per page, * + 2 desc gap to keep tail from touching head, * + 1 desc for skb->data, * + 1 desc for context descriptor, * otherwise try next time */ - if (igb_maybe_stop_tx(netdev, tx_ring, skb_shinfo(skb)->nr_frags + 4)) { + if (igb_maybe_stop_tx(tx_ring, skb_shinfo(skb)->nr_frags + 4)) { /* this is a hard error */ return NETDEV_TX_BUSY; } - /* - * TODO: check that there currently is no other packet with - * time stamping in the queue - * - * When doing time stamping, keep the connection to the socket - * a while longer: it is still needed by skb_hwtstamp_tx(), - * called either in igb_tx_hwtstamp() or by our caller when - * doing software time stamping. - */ - shtx = skb_tx(skb); if (unlikely(shtx->hardware)) { shtx->in_progress = 1; tx_flags |= IGB_TX_FLAGS_TSTAMP; } - if (adapter->vlgrp && vlan_tx_tag_present(skb)) { + if (vlan_tx_tag_present(skb) && adapter->vlgrp) { tx_flags |= IGB_TX_FLAGS_VLAN; tx_flags |= (vlan_tx_tag_get(skb) << IGB_TX_FLAGS_VLAN_SHIFT); } @@ -3375,37 +3757,38 @@ tx_flags |= IGB_TX_FLAGS_IPV4; first = tx_ring->next_to_use; - tso = skb_is_gso(skb) ? igb_tso_adv(adapter, tx_ring, skb, tx_flags, - &hdr_len) : 0; + if (skb_is_gso(skb)) { + tso = igb_tso_adv(tx_ring, skb, tx_flags, &hdr_len); - if (tso < 0) { - dev_kfree_skb_any(skb); - return NETDEV_TX_OK; + if (tso < 0) { + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } } if (tso) tx_flags |= IGB_TX_FLAGS_TSO; - else if (igb_tx_csum_adv(adapter, tx_ring, skb, tx_flags) && + else if (igb_tx_csum_adv(tx_ring, skb, tx_flags) && (skb->ip_summed == CHECKSUM_PARTIAL)) tx_flags |= IGB_TX_FLAGS_CSUM; /* - * count reflects descriptors mapped, if 0 then mapping error + * count reflects descriptors mapped, if 0 or less then mapping error * has occured and we need to rewind the descriptor queue */ - count = igb_tx_map_adv(adapter, tx_ring, skb, first); - - if (count) { - igb_tx_queue_adv(adapter, tx_ring, tx_flags, count, - skb->len, hdr_len); - /* Make sure there is space in the ring for the next send. */ - igb_maybe_stop_tx(netdev, tx_ring, MAX_SKB_FRAGS + 4); - } else { + count = igb_tx_map_adv(tx_ring, skb, first); + if (!count) { dev_kfree_skb_any(skb); tx_ring->buffer_info[first].time_stamp = 0; tx_ring->next_to_use = first; + return NETDEV_TX_OK; } + igb_tx_queue_adv(tx_ring, tx_flags, count, skb->len, hdr_len); + + /* Make sure there is space in the ring for the next send. */ + igb_maybe_stop_tx(tx_ring, MAX_SKB_FRAGS + 4); + return NETDEV_TX_OK; } @@ -3414,8 +3797,18 @@ { struct igb_adapter *adapter = netdev_priv(netdev); struct igb_ring *tx_ring; - int r_idx = 0; + + if (test_bit(__IGB_DOWN, &adapter->state)) { + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + + if (skb->len <= 0) { + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + r_idx = skb->queue_mapping & (IGB_ABS_MAX_TX_QUEUES - 1); tx_ring = adapter->multi_tx_table[r_idx]; @@ -3423,7 +3816,7 @@ * to a flow. Right now, performance is impacted slightly negatively * if using multiple tx queues. If the stack breaks away from a * single qdisc implementation, we can look at this again. */ - return igb_xmit_frame_ring_adv(skb, netdev, tx_ring); + return igb_xmit_frame_ring_adv(skb, tx_ring); } /** @@ -3437,6 +3830,10 @@ /* Do the reset outside of interrupt context */ adapter->tx_timeout_count++; + + if (hw->mac.type == e1000_82580) + hw->dev_spec._82575.global_device_reset = true; + schedule_work(&adapter->reset_task); wr32(E1000_EICS, (adapter->eims_enable_mask & ~adapter->eims_other)); @@ -3459,10 +3856,8 @@ **/ static struct net_device_stats *igb_get_stats(struct net_device *netdev) { - struct igb_adapter *adapter = netdev_priv(netdev); - /* only return the current stats */ - return &adapter->net_stats; + return &netdev->stats; } /** @@ -3475,16 +3870,17 @@ static int igb_change_mtu(struct net_device *netdev, int new_mtu) { struct igb_adapter *adapter = netdev_priv(netdev); + struct pci_dev *pdev = adapter->pdev; int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN; + u32 rx_buffer_len, i; - if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) || - (max_frame > MAX_JUMBO_FRAME_SIZE)) { - dev_err(&adapter->pdev->dev, "Invalid MTU setting\n"); + if ((new_mtu < 68) || (max_frame > MAX_JUMBO_FRAME_SIZE)) { + dev_err(&pdev->dev, "Invalid MTU setting\n"); return -EINVAL; } if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) { - dev_err(&adapter->pdev->dev, "MTU > 9216 not supported.\n"); + dev_err(&pdev->dev, "MTU > 9216 not supported.\n"); return -EINVAL; } @@ -3493,8 +3889,6 @@ /* igb_down has a dependency on max_frame_size */ adapter->max_frame_size = max_frame; - if (netif_running(netdev)) - igb_down(adapter); /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN * means we reserve 2 more, this pushes us to allocate from the next @@ -3502,35 +3896,23 @@ * i.e. RXBUFFER_2048 --> size-4096 slab */ - if (max_frame <= IGB_RXBUFFER_256) - adapter->rx_buffer_len = IGB_RXBUFFER_256; - else if (max_frame <= IGB_RXBUFFER_512) - adapter->rx_buffer_len = IGB_RXBUFFER_512; - else if (max_frame <= IGB_RXBUFFER_1024) - adapter->rx_buffer_len = IGB_RXBUFFER_1024; - else if (max_frame <= IGB_RXBUFFER_2048) - adapter->rx_buffer_len = IGB_RXBUFFER_2048; + if (max_frame <= IGB_RXBUFFER_1024) + rx_buffer_len = IGB_RXBUFFER_1024; + else if (max_frame <= MAXIMUM_ETHERNET_VLAN_SIZE) + rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE; else -#if (PAGE_SIZE / 2) > IGB_RXBUFFER_16384 - adapter->rx_buffer_len = IGB_RXBUFFER_16384; -#else - adapter->rx_buffer_len = PAGE_SIZE / 2; -#endif + rx_buffer_len = IGB_RXBUFFER_128; - /* if sr-iov is enabled we need to force buffer size to 1K or larger */ - if (adapter->vfs_allocated_count && - (adapter->rx_buffer_len < IGB_RXBUFFER_1024)) - adapter->rx_buffer_len = IGB_RXBUFFER_1024; - - /* adjust allocation if LPE protects us, and we aren't using SBP */ - if ((max_frame == ETH_FRAME_LEN + ETH_FCS_LEN) || - (max_frame == MAXIMUM_ETHERNET_VLAN_SIZE)) - adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE; + if (netif_running(netdev)) + igb_down(adapter); - dev_info(&adapter->pdev->dev, "changing MTU from %d to %d\n", + dev_info(&pdev->dev, "changing MTU from %d to %d\n", netdev->mtu, new_mtu); netdev->mtu = new_mtu; + for (i = 0; i < adapter->num_rx_queues; i++) + adapter->rx_ring[i].rx_buffer_len = rx_buffer_len; + if (netif_running(netdev)) igb_up(adapter); else @@ -3548,9 +3930,13 @@ void igb_update_stats(struct igb_adapter *adapter) { + struct net_device_stats *net_stats = igb_get_stats(adapter->netdev); struct e1000_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; + u32 rnbc; u16 phy_tmp; + int i; + u64 bytes, packets; #define PHY_IDLE_ERROR_COUNT_MASK 0x00FF @@ -3563,6 +3949,29 @@ if (pci_channel_offline(pdev)) return; + bytes = 0; + packets = 0; + for (i = 0; i < adapter->num_rx_queues; i++) { + u32 rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0x0FFF; + adapter->rx_ring[i].rx_stats.drops += rqdpc_tmp; + net_stats->rx_fifo_errors += rqdpc_tmp; + bytes += adapter->rx_ring[i].rx_stats.bytes; + packets += adapter->rx_ring[i].rx_stats.packets; + } + + net_stats->rx_bytes = bytes; + net_stats->rx_packets = packets; + + bytes = 0; + packets = 0; + for (i = 0; i < adapter->num_tx_queues; i++) { + bytes += adapter->tx_ring[i].tx_stats.bytes; + packets += adapter->tx_ring[i].tx_stats.packets; + } + net_stats->tx_bytes = bytes; + net_stats->tx_packets = packets; + + /* read stats registers */ adapter->stats.crcerrs += rd32(E1000_CRCERRS); adapter->stats.gprc += rd32(E1000_GPRC); adapter->stats.gorc += rd32(E1000_GORCL); @@ -3595,7 +4004,9 @@ adapter->stats.gptc += rd32(E1000_GPTC); adapter->stats.gotc += rd32(E1000_GOTCL); rd32(E1000_GOTCH); /* clear GOTCL */ - adapter->stats.rnbc += rd32(E1000_RNBC); + rnbc = rd32(E1000_RNBC); + adapter->stats.rnbc += rnbc; + net_stats->rx_fifo_errors += rnbc; adapter->stats.ruc += rd32(E1000_RUC); adapter->stats.rfc += rd32(E1000_RFC); adapter->stats.rjc += rd32(E1000_RJC); @@ -3614,7 +4025,6 @@ adapter->stats.bptc += rd32(E1000_BPTC); /* used for adaptive IFS */ - hw->mac.tx_packet_delta = rd32(E1000_TPT); adapter->stats.tpt += hw->mac.tx_packet_delta; hw->mac.collision_delta = rd32(E1000_COLC); @@ -3637,56 +4047,29 @@ adapter->stats.icrxdmtc += rd32(E1000_ICRXDMTC); /* Fill out the OS statistics structure */ - adapter->net_stats.multicast = adapter->stats.mprc; - adapter->net_stats.collisions = adapter->stats.colc; + net_stats->multicast = adapter->stats.mprc; + net_stats->collisions = adapter->stats.colc; /* Rx Errors */ - if (hw->mac.type != e1000_82575) { - u32 rqdpc_tmp; - u64 rqdpc_total = 0; - int i; - /* Read out drops stats per RX queue. Notice RQDPC (Receive - * Queue Drop Packet Count) stats only gets incremented, if - * the DROP_EN but it set (in the SRRCTL register for that - * queue). If DROP_EN bit is NOT set, then the some what - * equivalent count is stored in RNBC (not per queue basis). - * Also note the drop count is due to lack of available - * descriptors. - */ - for (i = 0; i < adapter->num_rx_queues; i++) { - rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0xFFF; - adapter->rx_ring[i].rx_stats.drops += rqdpc_tmp; - rqdpc_total += adapter->rx_ring[i].rx_stats.drops; - } - adapter->net_stats.rx_fifo_errors = rqdpc_total; - } - - /* Note RNBC (Receive No Buffers Count) is an not an exact - * drop count as the hardware FIFO might save the day. Thats - * one of the reason for saving it in rx_fifo_errors, as its - * potentially not a true drop. - */ - adapter->net_stats.rx_fifo_errors += adapter->stats.rnbc; - /* RLEC on some newer hardware can be incorrect so build * our own version based on RUC and ROC */ - adapter->net_stats.rx_errors = adapter->stats.rxerrc + + net_stats->rx_errors = adapter->stats.rxerrc + adapter->stats.crcerrs + adapter->stats.algnerrc + adapter->stats.ruc + adapter->stats.roc + adapter->stats.cexterr; - adapter->net_stats.rx_length_errors = adapter->stats.ruc + - adapter->stats.roc; - adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs; - adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc; - adapter->net_stats.rx_missed_errors = adapter->stats.mpc; + net_stats->rx_length_errors = adapter->stats.ruc + + adapter->stats.roc; + net_stats->rx_crc_errors = adapter->stats.crcerrs; + net_stats->rx_frame_errors = adapter->stats.algnerrc; + net_stats->rx_missed_errors = adapter->stats.mpc; /* Tx Errors */ - adapter->net_stats.tx_errors = adapter->stats.ecol + - adapter->stats.latecol; - adapter->net_stats.tx_aborted_errors = adapter->stats.ecol; - adapter->net_stats.tx_window_errors = adapter->stats.latecol; - adapter->net_stats.tx_carrier_errors = adapter->stats.tncrs; + net_stats->tx_errors = adapter->stats.ecol + + adapter->stats.latecol; + net_stats->tx_aborted_errors = adapter->stats.ecol; + net_stats->tx_window_errors = adapter->stats.latecol; + net_stats->tx_carrier_errors = adapter->stats.tncrs; /* Tx Dropped needs to be maintained elsewhere */ @@ -3707,14 +4090,12 @@ static irqreturn_t igb_msix_other(int irq, void *data) { - struct net_device *netdev = data; - struct igb_adapter *adapter = netdev_priv(netdev); + struct igb_adapter *adapter = data; struct e1000_hw *hw = &adapter->hw; u32 icr = rd32(E1000_ICR); - /* reading ICR causes bit 31 of EICR to be cleared */ - if(icr & E1000_ICR_DOUTSYNC) { + if (icr & E1000_ICR_DOUTSYNC) { /* HW is reporting DMA is out of sync */ adapter->stats.doosync++; } @@ -3730,125 +4111,90 @@ mod_timer(&adapter->watchdog_timer, jiffies + 1); } - wr32(E1000_IMS, E1000_IMS_LSC | E1000_IMS_DOUTSYNC | E1000_IMS_VMMB); + if (adapter->vfs_allocated_count) + wr32(E1000_IMS, E1000_IMS_LSC | + E1000_IMS_VMMB | + E1000_IMS_DOUTSYNC); + else + wr32(E1000_IMS, E1000_IMS_LSC | E1000_IMS_DOUTSYNC); wr32(E1000_EIMS, adapter->eims_other); return IRQ_HANDLED; } -static irqreturn_t igb_msix_tx(int irq, void *data) +static void igb_write_itr(struct igb_q_vector *q_vector) { - struct igb_ring *tx_ring = data; - struct igb_adapter *adapter = tx_ring->adapter; - struct e1000_hw *hw = &adapter->hw; + u32 itr_val = q_vector->itr_val & 0x7FFC; -#ifdef CONFIG_IGB_DCA - if (adapter->flags & IGB_FLAG_DCA_ENABLED) - igb_update_tx_dca(tx_ring); -#endif + if (!q_vector->set_itr) + return; - tx_ring->total_bytes = 0; - tx_ring->total_packets = 0; + if (!itr_val) + itr_val = 0x4; - /* auto mask will automatically reenable the interrupt when we write - * EICS */ - if (!igb_clean_tx_irq(tx_ring)) - /* Ring was not completely cleaned, so fire another interrupt */ - wr32(E1000_EICS, tx_ring->eims_value); + if (q_vector->itr_shift) + itr_val |= itr_val << q_vector->itr_shift; else - wr32(E1000_EIMS, tx_ring->eims_value); - - return IRQ_HANDLED; -} + itr_val |= 0x8000000; -static void igb_write_itr(struct igb_ring *ring) -{ - struct e1000_hw *hw = &ring->adapter->hw; - if ((ring->adapter->itr_setting & 3) && ring->set_itr) { - switch (hw->mac.type) { - case e1000_82576: - wr32(ring->itr_register, ring->itr_val | - 0x80000000); - break; - default: - wr32(ring->itr_register, ring->itr_val | - (ring->itr_val << 16)); - break; - } - ring->set_itr = 0; - } + writel(itr_val, q_vector->itr_register); + q_vector->set_itr = 0; } -static irqreturn_t igb_msix_rx(int irq, void *data) +static irqreturn_t igb_msix_ring(int irq, void *data) { - struct igb_ring *rx_ring = data; - - /* Write the ITR value calculated at the end of the - * previous interrupt. - */ + struct igb_q_vector *q_vector = data; - igb_write_itr(rx_ring); + /* Write the ITR value calculated from the previous interrupt. */ + igb_write_itr(q_vector); - if (napi_schedule_prep(&rx_ring->napi)) - __napi_schedule(&rx_ring->napi); - -#ifdef CONFIG_IGB_DCA - if (rx_ring->adapter->flags & IGB_FLAG_DCA_ENABLED) - igb_update_rx_dca(rx_ring); -#endif - return IRQ_HANDLED; -} - -#ifdef CONFIG_IGB_DCA -static void igb_update_rx_dca(struct igb_ring *rx_ring) -{ - u32 dca_rxctrl; - struct igb_adapter *adapter = rx_ring->adapter; - struct e1000_hw *hw = &adapter->hw; - int cpu = get_cpu(); - int q = rx_ring->reg_idx; + napi_schedule(&q_vector->napi); - if (rx_ring->cpu != cpu) { - dca_rxctrl = rd32(E1000_DCA_RXCTRL(q)); - if (hw->mac.type == e1000_82576) { - dca_rxctrl &= ~E1000_DCA_RXCTRL_CPUID_MASK_82576; - dca_rxctrl |= dca3_get_tag(&adapter->pdev->dev, cpu) << - E1000_DCA_RXCTRL_CPUID_SHIFT; - } else { - dca_rxctrl &= ~E1000_DCA_RXCTRL_CPUID_MASK; - dca_rxctrl |= dca3_get_tag(&adapter->pdev->dev, cpu); - } - dca_rxctrl |= E1000_DCA_RXCTRL_DESC_DCA_EN; - dca_rxctrl |= E1000_DCA_RXCTRL_HEAD_DCA_EN; - dca_rxctrl |= E1000_DCA_RXCTRL_DATA_DCA_EN; - wr32(E1000_DCA_RXCTRL(q), dca_rxctrl); - rx_ring->cpu = cpu; - } - put_cpu(); + return IRQ_HANDLED; } -static void igb_update_tx_dca(struct igb_ring *tx_ring) +#ifdef CONFIG_IGB_DCA +static void igb_update_dca(struct igb_q_vector *q_vector) { - u32 dca_txctrl; - struct igb_adapter *adapter = tx_ring->adapter; + struct igb_adapter *adapter = q_vector->adapter; struct e1000_hw *hw = &adapter->hw; int cpu = get_cpu(); - int q = tx_ring->reg_idx; - if (tx_ring->cpu != cpu) { - dca_txctrl = rd32(E1000_DCA_TXCTRL(q)); - if (hw->mac.type == e1000_82576) { + if (q_vector->cpu == cpu) + goto out_no_update; + + if (q_vector->tx_ring) { + int q = q_vector->tx_ring->reg_idx; + u32 dca_txctrl = rd32(E1000_DCA_TXCTRL(q)); + if (hw->mac.type == e1000_82575) { + dca_txctrl &= ~E1000_DCA_TXCTRL_CPUID_MASK; + dca_txctrl |= dca3_get_tag(&adapter->pdev->dev, cpu); + } else { dca_txctrl &= ~E1000_DCA_TXCTRL_CPUID_MASK_82576; dca_txctrl |= dca3_get_tag(&adapter->pdev->dev, cpu) << E1000_DCA_TXCTRL_CPUID_SHIFT; - } else { - dca_txctrl &= ~E1000_DCA_TXCTRL_CPUID_MASK; - dca_txctrl |= dca3_get_tag(&adapter->pdev->dev, cpu); } dca_txctrl |= E1000_DCA_TXCTRL_DESC_DCA_EN; wr32(E1000_DCA_TXCTRL(q), dca_txctrl); - tx_ring->cpu = cpu; } + if (q_vector->rx_ring) { + int q = q_vector->rx_ring->reg_idx; + u32 dca_rxctrl = rd32(E1000_DCA_RXCTRL(q)); + if (hw->mac.type == e1000_82575) { + dca_rxctrl &= ~E1000_DCA_RXCTRL_CPUID_MASK; + dca_rxctrl |= dca3_get_tag(&adapter->pdev->dev, cpu); + } else { + dca_rxctrl &= ~E1000_DCA_RXCTRL_CPUID_MASK_82576; + dca_rxctrl |= dca3_get_tag(&adapter->pdev->dev, cpu) << + E1000_DCA_RXCTRL_CPUID_SHIFT; + } + dca_rxctrl |= E1000_DCA_RXCTRL_DESC_DCA_EN; + dca_rxctrl |= E1000_DCA_RXCTRL_HEAD_DCA_EN; + dca_rxctrl |= E1000_DCA_RXCTRL_DATA_DCA_EN; + wr32(E1000_DCA_RXCTRL(q), dca_rxctrl); + } + q_vector->cpu = cpu; +out_no_update: put_cpu(); } @@ -3863,13 +4209,10 @@ /* Always use CB2 mode, difference is masked in the CB driver. */ wr32(E1000_DCA_CTRL, E1000_DCA_CTRL_DCA_MODE_CB2); - for (i = 0; i < adapter->num_tx_queues; i++) { - adapter->tx_ring[i].cpu = -1; - igb_update_tx_dca(&adapter->tx_ring[i]); - } - for (i = 0; i < adapter->num_rx_queues; i++) { - adapter->rx_ring[i].cpu = -1; - igb_update_rx_dca(&adapter->rx_ring[i]); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + q_vector->cpu = -1; + igb_update_dca(q_vector); } } @@ -3877,6 +4220,7 @@ { struct net_device *netdev = dev_get_drvdata(dev); struct igb_adapter *adapter = netdev_priv(netdev); + struct pci_dev *pdev = adapter->pdev; struct e1000_hw *hw = &adapter->hw; unsigned long event = *(unsigned long *)data; @@ -3885,12 +4229,9 @@ /* if already enabled, don't do it again */ if (adapter->flags & IGB_FLAG_DCA_ENABLED) break; - /* Always use CB2 mode, difference is masked - * in the CB driver. */ - wr32(E1000_DCA_CTRL, E1000_DCA_CTRL_DCA_MODE_CB2); if (dca_add_requester(dev) == 0) { adapter->flags |= IGB_FLAG_DCA_ENABLED; - dev_info(&adapter->pdev->dev, "DCA enabled\n"); + dev_info(&pdev->dev, "DCA enabled\n"); igb_setup_dca(adapter); break; } @@ -3898,9 +4239,9 @@ case DCA_PROVIDER_REMOVE: if (adapter->flags & IGB_FLAG_DCA_ENABLED) { /* without this a class_device is left - * hanging around in the sysfs model */ + * hanging around in the sysfs model */ dca_remove_requester(dev); - dev_info(&adapter->pdev->dev, "DCA disabled\n"); + dev_info(&pdev->dev, "DCA disabled\n"); adapter->flags &= ~IGB_FLAG_DCA_ENABLED; wr32(E1000_DCA_CTRL, E1000_DCA_CTRL_DCA_MODE_DISABLE); } @@ -3930,12 +4271,51 @@ for (i = 0 ; i < adapter->vfs_allocated_count; i++) { ping = E1000_PF_CONTROL_MSG; - if (adapter->vf_data[i].clear_to_send) + if (adapter->vf_data[i].flags & IGB_VF_FLAG_CTS) ping |= E1000_VT_MSGTYPE_CTS; igb_write_mbx(hw, &ping, 1, i); } } +static int igb_set_vf_promisc(struct igb_adapter *adapter, u32 *msgbuf, u32 vf) +{ + struct e1000_hw *hw = &adapter->hw; + u32 vmolr = rd32(E1000_VMOLR(vf)); + struct vf_data_storage *vf_data = &adapter->vf_data[vf]; + + vf_data->flags |= ~(IGB_VF_FLAG_UNI_PROMISC | + IGB_VF_FLAG_MULTI_PROMISC); + vmolr &= ~(E1000_VMOLR_ROPE | E1000_VMOLR_ROMPE | E1000_VMOLR_MPME); + + if (*msgbuf & E1000_VF_SET_PROMISC_MULTICAST) { + vmolr |= E1000_VMOLR_MPME; + *msgbuf &= ~E1000_VF_SET_PROMISC_MULTICAST; + } else { + /* + * if we have hashes and we are clearing a multicast promisc + * flag we need to write the hashes to the MTA as this step + * was previously skipped + */ + if (vf_data->num_vf_mc_hashes > 30) { + vmolr |= E1000_VMOLR_MPME; + } else if (vf_data->num_vf_mc_hashes) { + int j; + vmolr |= E1000_VMOLR_ROMPE; + for (j = 0; j < vf_data->num_vf_mc_hashes; j++) + igb_mta_set(hw, vf_data->vf_mc_hashes[j]); + } + } + + wr32(E1000_VMOLR(vf), vmolr); + + /* there are flags left unprocessed, likely not supported */ + if (*msgbuf & E1000_VT_MSGINFO_MASK) + return -EINVAL; + + return 0; + +} + static int igb_set_vf_multicasts(struct igb_adapter *adapter, u32 *msgbuf, u32 vf) { @@ -3944,18 +4324,17 @@ struct vf_data_storage *vf_data = &adapter->vf_data[vf]; int i; - /* only up to 30 hash values supported */ - if (n > 30) - n = 30; - - /* salt away the number of multi cast addresses assigned + /* salt away the number of multicast addresses assigned * to this VF for later use to restore when the PF multi cast * list changes */ vf_data->num_vf_mc_hashes = n; - /* VFs are limited to using the MTA hash table for their multicast - * addresses */ + /* only up to 30 hash values supported */ + if (n > 30) + n = 30; + + /* store the hashes for later use */ for (i = 0; i < n; i++) vf_data->vf_mc_hashes[i] = hash_list[i]; @@ -3972,9 +4351,20 @@ int i, j; for (i = 0; i < adapter->vfs_allocated_count; i++) { + u32 vmolr = rd32(E1000_VMOLR(i)); + vmolr &= ~(E1000_VMOLR_ROMPE | E1000_VMOLR_MPME); + vf_data = &adapter->vf_data[i]; - for (j = 0; j < vf_data->num_vf_mc_hashes; j++) - igb_mta_set(hw, vf_data->vf_mc_hashes[j]); + + if ((vf_data->num_vf_mc_hashes > 30) || + (vf_data->flags & IGB_VF_FLAG_MULTI_PROMISC)) { + vmolr |= E1000_VMOLR_MPME; + } else if (vf_data->num_vf_mc_hashes) { + vmolr |= E1000_VMOLR_ROMPE; + for (j = 0; j < vf_data->num_vf_mc_hashes; j++) + igb_mta_set(hw, vf_data->vf_mc_hashes[j]); + } + wr32(E1000_VMOLR(i), vmolr); } } @@ -4012,7 +4402,11 @@ struct e1000_hw *hw = &adapter->hw; u32 reg, i; - /* It is an error to call this function when VFs are not enabled */ + /* The vlvf table only exists on 82576 hardware and newer */ + if (hw->mac.type < e1000_82576) + return -1; + + /* we only need to do this if VMDq is enabled */ if (!adapter->vfs_allocated_count) return -1; @@ -4042,16 +4436,12 @@ /* if !enabled we need to set this up in vfta */ if (!(reg & E1000_VLVF_VLANID_ENABLE)) { - /* add VID to filter table, if bit already set - * PF must have added it outside of table */ - if (igb_vfta_set(hw, vid, true)) - reg |= 1 << (E1000_VLVF_POOLSEL_SHIFT + - adapter->vfs_allocated_count); + /* add VID to filter table */ + igb_vfta_set(hw, vid, true); reg |= E1000_VLVF_VLANID_ENABLE; } reg &= ~E1000_VLVF_VLANID_MASK; reg |= vid; - wr32(E1000_VLVF(i), reg); /* do not modify RLPML for PF devices */ @@ -4067,8 +4457,8 @@ reg |= size; wr32(E1000_VMOLR(vf), reg); } - adapter->vf_data[vf].vlans_enabled++; + adapter->vf_data[vf].vlans_enabled++; return 0; } } else { @@ -4110,15 +4500,14 @@ return igb_vlvf_set(adapter, vid, add, vf); } -static inline void igb_vf_reset_event(struct igb_adapter *adapter, u32 vf) +static inline void igb_vf_reset(struct igb_adapter *adapter, u32 vf) { - struct e1000_hw *hw = &adapter->hw; - - /* disable mailbox functionality for vf */ - adapter->vf_data[vf].clear_to_send = false; + /* clear all flags */ + adapter->vf_data[vf].flags = 0; + adapter->vf_data[vf].last_nack = jiffies; /* reset offloads to defaults */ - igb_set_vmolr(hw, vf); + igb_set_vmolr(adapter, vf); /* reset vlans for device */ igb_clear_vf_vfta(adapter, vf); @@ -4130,7 +4519,18 @@ igb_set_rx_mode(adapter->netdev); } -static inline void igb_vf_reset_msg(struct igb_adapter *adapter, u32 vf) +static void igb_vf_reset_event(struct igb_adapter *adapter, u32 vf) +{ + unsigned char *vf_mac = adapter->vf_data[vf].vf_mac_addresses; + + /* generate a new mac address as we were hotplug removed/added */ + random_ether_addr(vf_mac); + + /* process remaining reset events */ + igb_vf_reset(adapter, vf); +} + +static void igb_vf_reset_msg(struct igb_adapter *adapter, u32 vf) { struct e1000_hw *hw = &adapter->hw; unsigned char *vf_mac = adapter->vf_data[vf].vf_mac_addresses; @@ -4139,11 +4539,10 @@ u8 *addr = (u8 *)(&msgbuf[1]); /* process all the same items cleared in a function level reset */ - igb_vf_reset_event(adapter, vf); + igb_vf_reset(adapter, vf); /* set vf mac address */ - igb_rar_set(hw, vf_mac, rar_entry); - igb_set_rah_pool(hw, vf, rar_entry); + igb_rar_set_qsel(adapter, vf_mac, rar_entry, vf); /* enable transmit and receive for vf */ reg = rd32(E1000_VFTE); @@ -4151,8 +4550,7 @@ reg = rd32(E1000_VFRE); wr32(E1000_VFRE, reg | (1 << vf)); - /* enable mailbox functionality for vf */ - adapter->vf_data[vf].clear_to_send = true; + adapter->vf_data[vf].flags = IGB_VF_FLAG_CTS; /* reply to reset with ack and vf mac address */ msgbuf[0] = E1000_VF_RESET | E1000_VT_MSGTYPE_ACK; @@ -4162,66 +4560,51 @@ static int igb_set_vf_mac_addr(struct igb_adapter *adapter, u32 *msg, int vf) { - unsigned char *addr = (char *)&msg[1]; - int err = -1; + unsigned char *addr = (char *)&msg[1]; + int err = -1; - if (is_valid_ether_addr(addr)) - err = igb_set_vf_mac(adapter, vf, addr); - - return err; + if (is_valid_ether_addr(addr)) + err = igb_set_vf_mac(adapter, vf, addr); + return err; } static void igb_rcv_ack_from_vf(struct igb_adapter *adapter, u32 vf) { struct e1000_hw *hw = &adapter->hw; + struct vf_data_storage *vf_data = &adapter->vf_data[vf]; u32 msg = E1000_VT_MSGTYPE_NACK; /* if device isn't clear to send it shouldn't be reading either */ - if (!adapter->vf_data[vf].clear_to_send) + if (!(vf_data->flags & IGB_VF_FLAG_CTS) && + time_after(jiffies, vf_data->last_nack + (2 * HZ))) { igb_write_mbx(hw, &msg, 1, vf); -} - - -static void igb_msg_task(struct igb_adapter *adapter) -{ - struct e1000_hw *hw = &adapter->hw; - u32 vf; - - for (vf = 0; vf < adapter->vfs_allocated_count; vf++) { - /* process any reset requests */ - if (!igb_check_for_rst(hw, vf)) { - adapter->vf_data[vf].clear_to_send = false; - igb_vf_reset_event(adapter, vf); - } - - /* process any messages pending */ - if (!igb_check_for_msg(hw, vf)) - igb_rcv_msg_from_vf(adapter, vf); - - /* process any acks */ - if (!igb_check_for_ack(hw, vf)) - igb_rcv_ack_from_vf(adapter, vf); - + vf_data->last_nack = jiffies; } } -static int igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf) +static void igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf) { - u32 mbx_size = E1000_VFMAILBOX_SIZE; - u32 msgbuf[mbx_size]; + struct pci_dev *pdev = adapter->pdev; + u32 msgbuf[E1000_VFMAILBOX_SIZE]; struct e1000_hw *hw = &adapter->hw; + struct vf_data_storage *vf_data = &adapter->vf_data[vf]; s32 retval; - retval = igb_read_mbx(hw, msgbuf, mbx_size, vf); + retval = igb_read_mbx(hw, msgbuf, E1000_VFMAILBOX_SIZE, vf); - if (retval) - dev_err(&adapter->pdev->dev, - "Error receiving message from VF\n"); + if (retval) { + /* if receive failed revoke VF CTS stats and restart init */ + dev_err(&pdev->dev, "Error receiving message from VF\n"); + vf_data->flags &= ~IGB_VF_FLAG_CTS; + if (!time_after(jiffies, vf_data->last_nack + (2 * HZ))) + return; + goto out; + } /* this is a message we already processed, do nothing */ if (msgbuf[0] & (E1000_VT_MSGTYPE_ACK | E1000_VT_MSGTYPE_NACK)) - return retval; + return; /* * until the vf completes a reset it should not be @@ -4230,20 +4613,23 @@ if (msgbuf[0] == E1000_VF_RESET) { igb_vf_reset_msg(adapter, vf); - - return retval; + return; } - if (!adapter->vf_data[vf].clear_to_send) { - msgbuf[0] |= E1000_VT_MSGTYPE_NACK; - igb_write_mbx(hw, msgbuf, 1, vf); - return retval; + if (!(vf_data->flags & IGB_VF_FLAG_CTS)) { + if (!time_after(jiffies, vf_data->last_nack + (2 * HZ))) + return; + retval = -1; + goto out; } switch ((msgbuf[0] & 0xFFFF)) { case E1000_VF_SET_MAC_ADDR: retval = igb_set_vf_mac_addr(adapter, msgbuf, vf); break; + case E1000_VF_SET_PROMISC: + retval = igb_set_vf_promisc(adapter, msgbuf, vf); + break; case E1000_VF_SET_MULTICAST: retval = igb_set_vf_multicasts(adapter, msgbuf, vf); break; @@ -4254,22 +4640,67 @@ retval = igb_set_vf_vlan(adapter, msgbuf, vf); break; default: - dev_err(&adapter->pdev->dev, "Unhandled Msg %08x\n", msgbuf[0]); + dev_err(&pdev->dev, "Unhandled Msg %08x\n", msgbuf[0]); retval = -1; break; } + msgbuf[0] |= E1000_VT_MSGTYPE_CTS; +out: /* notify the VF of the results of what it sent us */ if (retval) msgbuf[0] |= E1000_VT_MSGTYPE_NACK; else msgbuf[0] |= E1000_VT_MSGTYPE_ACK; - msgbuf[0] |= E1000_VT_MSGTYPE_CTS; - igb_write_mbx(hw, msgbuf, 1, vf); +} - return retval; +static void igb_msg_task(struct igb_adapter *adapter) +{ + struct e1000_hw *hw = &adapter->hw; + u32 vf; + + for (vf = 0; vf < adapter->vfs_allocated_count; vf++) { + /* process any reset requests */ + if (!igb_check_for_rst(hw, vf)) + igb_vf_reset_event(adapter, vf); + + /* process any messages pending */ + if (!igb_check_for_msg(hw, vf)) + igb_rcv_msg_from_vf(adapter, vf); + + /* process any acks */ + if (!igb_check_for_ack(hw, vf)) + igb_rcv_ack_from_vf(adapter, vf); + } +} + +/** + * igb_set_uta - Set unicast filter table address + * @adapter: board private structure + * + * The unicast table address is a register array of 32-bit registers. + * The table is meant to be used in a way similar to how the MTA is used + * however due to certain limitations in the hardware it is necessary to + * set all the hash bits to 1 and use the VMOLR ROPE bit as a promiscous + * enable bit to allow vlan tag stripping when promiscous mode is enabled + **/ +static void igb_set_uta(struct igb_adapter *adapter) +{ + struct e1000_hw *hw = &adapter->hw; + int i; + + /* The UTA table only exists on 82576 hardware and newer */ + if (hw->mac.type < e1000_82576) + return; + + /* we only need to do this if VMDq is enabled */ + if (!adapter->vfs_allocated_count) + return; + + for (i = 0; i < hw->mac.uta_reg_count; i++) + array_wr32(E1000_UTA, i, ~0); } /** @@ -4279,15 +4710,15 @@ **/ static irqreturn_t igb_intr_msi(int irq, void *data) { - struct net_device *netdev = data; - struct igb_adapter *adapter = netdev_priv(netdev); + struct igb_adapter *adapter = data; + struct igb_q_vector *q_vector = adapter->q_vector[0]; struct e1000_hw *hw = &adapter->hw; /* read ICR disables interrupts using IAM */ u32 icr = rd32(E1000_ICR); - igb_write_itr(adapter->rx_ring); + igb_write_itr(q_vector); - if(icr & E1000_ICR_DOUTSYNC) { + if (icr & E1000_ICR_DOUTSYNC) { /* HW is reporting DMA is out of sync */ adapter->stats.doosync++; } @@ -4298,7 +4729,7 @@ mod_timer(&adapter->watchdog_timer, jiffies + 1); } - napi_schedule(&adapter->rx_ring[0].napi); + napi_schedule(&q_vector->napi); return IRQ_HANDLED; } @@ -4310,8 +4741,8 @@ **/ static irqreturn_t igb_intr(int irq, void *data) { - struct net_device *netdev = data; - struct igb_adapter *adapter = netdev_priv(netdev); + struct igb_adapter *adapter = data; + struct igb_q_vector *q_vector = adapter->q_vector[0]; struct e1000_hw *hw = &adapter->hw; /* Interrupt Auto-Mask...upon reading ICR, interrupts are masked. No * need for the IMC write */ @@ -4319,14 +4750,14 @@ if (!icr) return IRQ_NONE; /* Not our interrupt */ - igb_write_itr(adapter->rx_ring); + igb_write_itr(q_vector); /* IMS will not auto-mask if INT_ASSERTED is not set, and if it is * not set, then the adapter didn't send an interrupt */ if (!(icr & E1000_ICR_INT_ASSERTED)) return IRQ_NONE; - if(icr & E1000_ICR_DOUTSYNC) { + if (icr & E1000_ICR_DOUTSYNC) { /* HW is reporting DMA is out of sync */ adapter->stats.doosync++; } @@ -4338,26 +4769,27 @@ mod_timer(&adapter->watchdog_timer, jiffies + 1); } - napi_schedule(&adapter->rx_ring[0].napi); + napi_schedule(&q_vector->napi); return IRQ_HANDLED; } -static inline void igb_rx_irq_enable(struct igb_ring *rx_ring) +static inline void igb_ring_irq_enable(struct igb_q_vector *q_vector) { - struct igb_adapter *adapter = rx_ring->adapter; + struct igb_adapter *adapter = q_vector->adapter; struct e1000_hw *hw = &adapter->hw; - if (adapter->itr_setting & 3) { - if (adapter->num_rx_queues == 1) + if ((q_vector->rx_ring && (adapter->rx_itr_setting & 3)) || + (!q_vector->rx_ring && (adapter->tx_itr_setting & 3))) { + if (!adapter->msix_entries) igb_set_itr(adapter); else - igb_update_ring_itr(rx_ring); + igb_update_ring_itr(q_vector); } if (!test_bit(__IGB_DOWN, &adapter->state)) { if (adapter->msix_entries) - wr32(E1000_EIMS, rx_ring->eims_value); + wr32(E1000_EIMS, q_vector->eims_value); else igb_irq_enable(adapter); } @@ -4370,76 +4802,101 @@ **/ static int igb_poll(struct napi_struct *napi, int budget) { - struct igb_ring *rx_ring = container_of(napi, struct igb_ring, napi); - int work_done = 0; + struct igb_q_vector *q_vector = container_of(napi, + struct igb_q_vector, + napi); + int tx_clean_complete = 1, work_done = 0; #ifdef CONFIG_IGB_DCA - if (rx_ring->adapter->flags & IGB_FLAG_DCA_ENABLED) - igb_update_rx_dca(rx_ring); + if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED) + igb_update_dca(q_vector); #endif - igb_clean_rx_irq_adv(rx_ring, &work_done, budget); + if (q_vector->tx_ring) + tx_clean_complete = igb_clean_tx_irq(q_vector); - if (rx_ring->buddy) { -#ifdef CONFIG_IGB_DCA - if (rx_ring->adapter->flags & IGB_FLAG_DCA_ENABLED) - igb_update_tx_dca(rx_ring->buddy); -#endif - if (!igb_clean_tx_irq(rx_ring->buddy)) - work_done = budget; - } + if (q_vector->rx_ring) + igb_clean_rx_irq_adv(q_vector, &work_done, budget); + + if (!tx_clean_complete) + work_done = budget; /* If not enough Rx work done, exit the polling mode */ if (work_done < budget) { napi_complete(napi); - igb_rx_irq_enable(rx_ring); + igb_ring_irq_enable(q_vector); } return work_done; } /** - * igb_hwtstamp - utility function which checks for TX time stamp + * igb_systim_to_hwtstamp - convert system time value to hw timestamp * @adapter: board private structure + * @shhwtstamps: timestamp structure to update + * @regval: unsigned 64bit system time value. + * + * We need to convert the system time value stored in the RX/TXSTMP registers + * into a hwtstamp which can be used by the upper level timestamping functions + */ +static void igb_systim_to_hwtstamp(struct igb_adapter *adapter, + struct skb_shared_hwtstamps *shhwtstamps, + u64 regval) +{ + u64 ns; + + /* + * The 82580 starts with 1ns at bit 0 in RX/TXSTMPL, shift this up to + * 24 to match clock shift we setup earlier. + */ + if (adapter->hw.mac.type == e1000_82580) + regval <<= IGB_82580_TSYNC_SHIFT; + + ns = timecounter_cyc2time(&adapter->clock, regval); + timecompare_update(&adapter->compare, ns); + memset(shhwtstamps, 0, sizeof(struct skb_shared_hwtstamps)); + shhwtstamps->hwtstamp = ns_to_ktime(ns); + shhwtstamps->syststamp = timecompare_transform(&adapter->compare, ns); +} + +/** + * igb_tx_hwtstamp - utility function which checks for TX time stamp + * @q_vector: pointer to q_vector containing needed info * @skb: packet that was just sent * * If we were asked to do hardware stamping and such a time stamp is * available, then it must have been for this skb here because we only * allow only one such packet into the queue. */ -static void igb_tx_hwtstamp(struct igb_adapter *adapter, struct sk_buff *skb) +static void igb_tx_hwtstamp(struct igb_q_vector *q_vector, struct sk_buff *skb) { + struct igb_adapter *adapter = q_vector->adapter; union skb_shared_tx *shtx = skb_tx(skb); struct e1000_hw *hw = &adapter->hw; + struct skb_shared_hwtstamps shhwtstamps; + u64 regval; - if (unlikely(shtx->hardware)) { - u32 valid = rd32(E1000_TSYNCTXCTL) & E1000_TSYNCTXCTL_VALID; - if (valid) { - u64 regval = rd32(E1000_TXSTMPL); - u64 ns; - struct skb_shared_hwtstamps shhwtstamps; - - memset(&shhwtstamps, 0, sizeof(shhwtstamps)); - regval |= (u64)rd32(E1000_TXSTMPH) << 32; - ns = timecounter_cyc2time(&adapter->clock, - regval); - timecompare_update(&adapter->compare, ns); - shhwtstamps.hwtstamp = ns_to_ktime(ns); - shhwtstamps.syststamp = - timecompare_transform(&adapter->compare, ns); - skb_tstamp_tx(skb, &shhwtstamps); - } - } + /* if skb does not support hw timestamp or TX stamp not valid exit */ + if (likely(!shtx->hardware) || + !(rd32(E1000_TSYNCTXCTL) & E1000_TSYNCTXCTL_VALID)) + return; + + regval = rd32(E1000_TXSTMPL); + regval |= (u64)rd32(E1000_TXSTMPH) << 32; + + igb_systim_to_hwtstamp(adapter, &shhwtstamps, regval); + skb_tstamp_tx(skb, &shhwtstamps); } /** * igb_clean_tx_irq - Reclaim resources after transmit completes - * @adapter: board private structure + * @q_vector: pointer to q_vector containing needed info * returns true if ring is completely cleaned **/ -static bool igb_clean_tx_irq(struct igb_ring *tx_ring) +static bool igb_clean_tx_irq(struct igb_q_vector *q_vector) { - struct igb_adapter *adapter = tx_ring->adapter; - struct net_device *netdev = adapter->netdev; + struct igb_adapter *adapter = q_vector->adapter; + struct igb_ring *tx_ring = q_vector->tx_ring; + struct net_device *netdev = tx_ring->netdev; struct e1000_hw *hw = &adapter->hw; struct igb_buffer *buffer_info; struct sk_buff *skb; @@ -4470,10 +4927,10 @@ total_packets += segs; total_bytes += bytecount; - igb_tx_hwtstamp(adapter, skb); + igb_tx_hwtstamp(q_vector, skb); } - igb_unmap_and_free_tx_resource(adapter, buffer_info); + igb_unmap_and_free_tx_resource(tx_ring, buffer_info); tx_desc->wb.status = 0; i++; @@ -4496,7 +4953,7 @@ if (__netif_subqueue_stopped(netdev, tx_ring->queue_index) && !(test_bit(__IGB_DOWN, &adapter->state))) { netif_wake_subqueue(netdev, tx_ring->queue_index); - ++adapter->restart_queue; + tx_ring->tx_stats.restart_queue++; } } @@ -4511,7 +4968,7 @@ E1000_STATUS_TXOFF)) { /* detected Tx unit hang */ - dev_err(&adapter->pdev->dev, + dev_err(&tx_ring->pdev->dev, "Detected Tx Unit Hang\n" " Tx Queue <%d>\n" " TDH <%x>\n" @@ -4524,11 +4981,11 @@ " jiffies <%lx>\n" " desc.status <%x>\n", tx_ring->queue_index, - readl(adapter->hw.hw_addr + tx_ring->head), - readl(adapter->hw.hw_addr + tx_ring->tail), + readl(tx_ring->head), + readl(tx_ring->tail), tx_ring->next_to_use, tx_ring->next_to_clean, - tx_ring->buffer_info[i].time_stamp, + tx_ring->buffer_info[eop].time_stamp, eop, jiffies, eop_desc->wb.status); @@ -4539,43 +4996,38 @@ tx_ring->total_packets += total_packets; tx_ring->tx_stats.bytes += total_bytes; tx_ring->tx_stats.packets += total_packets; - adapter->net_stats.tx_bytes += total_bytes; - adapter->net_stats.tx_packets += total_packets; return (count < tx_ring->count); } /** * igb_receive_skb - helper function to handle rx indications - * @ring: pointer to receive ring receving this packet - * @status: descriptor status field as written by hardware - * @rx_desc: receive descriptor containing vlan and type information. - * @skb: pointer to sk_buff to be indicated to stack - **/ -static void igb_receive_skb(struct igb_ring *ring, u8 status, - union e1000_adv_rx_desc * rx_desc, - struct sk_buff *skb) -{ - struct igb_adapter * adapter = ring->adapter; - bool vlan_extracted = (adapter->vlgrp && (status & E1000_RXD_STAT_VP)); - - skb_record_rx_queue(skb, ring->queue_index); - if (vlan_extracted) - vlan_gro_receive(&ring->napi, adapter->vlgrp, - le16_to_cpu(rx_desc->wb.upper.vlan), - skb); + * @q_vector: structure containing interrupt and ring information + * @skb: packet to send up + * @vlan_tag: vlan tag for packet + **/ +static void igb_receive_skb(struct igb_q_vector *q_vector, + struct sk_buff *skb, + u16 vlan_tag) +{ + struct igb_adapter *adapter = q_vector->adapter; + + if (vlan_tag) + vlan_gro_receive(&q_vector->napi, adapter->vlgrp, + vlan_tag, skb); else - napi_gro_receive(&ring->napi, skb); + napi_gro_receive(&q_vector->napi, skb); } -static inline void igb_rx_checksum_adv(struct igb_adapter *adapter, +static inline void igb_rx_checksum_adv(struct igb_ring *ring, u32 status_err, struct sk_buff *skb) { skb->ip_summed = CHECKSUM_NONE; /* Ignore Checksum bit is set or checksum is disabled through ethtool */ - if ((status_err & E1000_RXD_STAT_IXSM) || - (adapter->flags & IGB_FLAG_RX_CSUM_DISABLED)) + if (!(ring->flags & IGB_RING_FLAG_RX_CSUM) || + (status_err & E1000_RXD_STAT_IXSM)) return; + /* TCP/UDP checksum error bit is set */ if (status_err & (E1000_RXDEXT_STATERR_TCPE | E1000_RXDEXT_STATERR_IPE)) { @@ -4584,9 +5036,10 @@ * L4E bit is set incorrectly on 64 byte (60 byte w/o crc) * packets, (aka let the stack check the crc32c) */ - if (!((adapter->hw.mac.type == e1000_82576) && - (skb->len == 60))) - adapter->hw_csum_err++; + if ((skb->len == 60) && + (ring->flags & IGB_RING_FLAG_RX_SCTP_CSUM)) + ring->rx_stats.csum_err++; + /* let the stack verify checksum errors */ return; } @@ -4594,11 +5047,38 @@ if (status_err & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS)) skb->ip_summed = CHECKSUM_UNNECESSARY; - dev_dbg(&adapter->pdev->dev, "cksum success: bits %08X\n", status_err); - adapter->hw_csum_good++; + dev_dbg(&ring->pdev->dev, "cksum success: bits %08X\n", status_err); } -static inline u16 igb_get_hlen(struct igb_adapter *adapter, +static inline void igb_rx_hwtstamp(struct igb_q_vector *q_vector, u32 staterr, + struct sk_buff *skb) +{ + struct igb_adapter *adapter = q_vector->adapter; + struct e1000_hw *hw = &adapter->hw; + u64 regval; + + /* + * If this bit is set, then the RX registers contain the time stamp. No + * other packet will be time stamped until we read these registers, so + * read the registers to make them available again. Because only one + * packet can be time stamped at a time, we know that the register + * values must belong to this one here and therefore we don't need to + * compare any of the additional attributes stored for it. + * + * If nothing went wrong, then it should have a skb_shared_tx that we + * can turn into a skb_shared_hwtstamps. + */ + if (likely(!(staterr & E1000_RXDADV_STAT_TS))) + return; + if (!(rd32(E1000_TSYNCRXCTL) & E1000_TSYNCRXCTL_VALID)) + return; + + regval = rd32(E1000_RXSTMPL); + regval |= (u64)rd32(E1000_RXSTMPH) << 32; + + igb_systim_to_hwtstamp(adapter, skb_hwtstamps(skb), regval); +} +static inline u16 igb_get_hlen(struct igb_ring *rx_ring, union e1000_adv_rx_desc *rx_desc) { /* HW will not DMA in data larger than the given buffer, even if it @@ -4607,27 +5087,28 @@ */ u16 hlen = (le16_to_cpu(rx_desc->wb.lower.lo_dword.hdr_info) & E1000_RXDADV_HDRBUFLEN_MASK) >> E1000_RXDADV_HDRBUFLEN_SHIFT; - if (hlen > adapter->rx_ps_hdr_size) - hlen = adapter->rx_ps_hdr_size; + if (hlen > rx_ring->rx_buffer_len) + hlen = rx_ring->rx_buffer_len; return hlen; } -static bool igb_clean_rx_irq_adv(struct igb_ring *rx_ring, - int *work_done, int budget) +static bool igb_clean_rx_irq_adv(struct igb_q_vector *q_vector, + int *work_done, int budget) { - struct igb_adapter *adapter = rx_ring->adapter; - struct net_device *netdev = adapter->netdev; - struct e1000_hw *hw = &adapter->hw; - struct pci_dev *pdev = adapter->pdev; + struct igb_ring *rx_ring = q_vector->rx_ring; + struct net_device *netdev = rx_ring->netdev; + struct pci_dev *pdev = rx_ring->pdev; union e1000_adv_rx_desc *rx_desc , *next_rxd; struct igb_buffer *buffer_info , *next_buffer; struct sk_buff *skb; bool cleaned = false; int cleaned_count = 0; + int current_node = numa_node_id(); unsigned int total_bytes = 0, total_packets = 0; unsigned int i; u32 staterr; u16 length; + u16 vlan_tag; i = rx_ring->next_to_clean; buffer_info = &rx_ring->buffer_info[i]; @@ -4646,6 +5127,7 @@ i++; if (i == rx_ring->count) i = 0; + next_rxd = E1000_RX_DESC_ADV(*rx_ring, i); prefetch(next_rxd); next_buffer = &rx_ring->buffer_info[i]; @@ -4654,23 +5136,16 @@ cleaned = true; cleaned_count++; - /* this is the fast path for the non-packet split case */ - if (!adapter->rx_ps_hdr_size) { - pci_unmap_single(pdev, buffer_info->dma, - adapter->rx_buffer_len, - PCI_DMA_FROMDEVICE); - buffer_info->dma = 0; - skb_put(skb, length); - goto send_up; - } - if (buffer_info->dma) { - u16 hlen = igb_get_hlen(adapter, rx_desc); pci_unmap_single(pdev, buffer_info->dma, - adapter->rx_ps_hdr_size, + rx_ring->rx_buffer_len, PCI_DMA_FROMDEVICE); buffer_info->dma = 0; - skb_put(skb, hlen); + if (rx_ring->rx_buffer_len >= IGB_RXBUFFER_1024) { + skb_put(skb, length); + goto send_up; + } + skb_put(skb, igb_get_hlen(rx_ring, rx_desc)); } if (length) { @@ -4683,15 +5158,14 @@ buffer_info->page_offset, length); - if ((adapter->rx_buffer_len > (PAGE_SIZE / 2)) || - (page_count(buffer_info->page) != 1)) + if ((page_count(buffer_info->page) != 1) || + (page_to_nid(buffer_info->page) != current_node)) buffer_info->page = NULL; else get_page(buffer_info->page); skb->len += length; skb->data_len += length; - skb->truesize += length; } @@ -4703,60 +5177,24 @@ goto next_desc; } send_up: - /* - * If this bit is set, then the RX registers contain - * the time stamp. No other packet will be time - * stamped until we read these registers, so read the - * registers to make them available again. Because - * only one packet can be time stamped at a time, we - * know that the register values must belong to this - * one here and therefore we don't need to compare - * any of the additional attributes stored for it. - * - * If nothing went wrong, then it should have a - * skb_shared_tx that we can turn into a - * skb_shared_hwtstamps. - * - * TODO: can time stamping be triggered (thus locking - * the registers) without the packet reaching this point - * here? In that case RX time stamping would get stuck. - * - * TODO: in "time stamp all packets" mode this bit is - * not set. Need a global flag for this mode and then - * always read the registers. Cannot be done without - * a race condition. - */ - if (unlikely(staterr & E1000_RXD_STAT_TS)) { - u64 regval; - u64 ns; - struct skb_shared_hwtstamps *shhwtstamps = - skb_hwtstamps(skb); - - WARN(!(rd32(E1000_TSYNCRXCTL) & E1000_TSYNCRXCTL_VALID), - "igb: no RX time stamp available for time stamped packet"); - regval = rd32(E1000_RXSTMPL); - regval |= (u64)rd32(E1000_RXSTMPH) << 32; - ns = timecounter_cyc2time(&adapter->clock, regval); - timecompare_update(&adapter->compare, ns); - memset(shhwtstamps, 0, sizeof(*shhwtstamps)); - shhwtstamps->hwtstamp = ns_to_ktime(ns); - shhwtstamps->syststamp = - timecompare_transform(&adapter->compare, ns); - } - if (staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) { dev_kfree_skb_irq(skb); goto next_desc; } + igb_rx_hwtstamp(q_vector, staterr, skb); total_bytes += skb->len; total_packets++; - igb_rx_checksum_adv(adapter, staterr, skb); + igb_rx_checksum_adv(rx_ring, staterr, skb); skb->protocol = eth_type_trans(skb, netdev); + skb_record_rx_queue(skb, rx_ring->queue_index); + + vlan_tag = ((staterr & E1000_RXD_STAT_VP) ? + le16_to_cpu(rx_desc->wb.upper.vlan) : 0); - igb_receive_skb(rx_ring, staterr, rx_desc, skb); + igb_receive_skb(q_vector, skb, vlan_tag); next_desc: rx_desc->wb.upper.status_error = 0; @@ -4783,8 +5221,6 @@ rx_ring->total_bytes += total_bytes; rx_ring->rx_stats.packets += total_packets; rx_ring->rx_stats.bytes += total_bytes; - adapter->net_stats.rx_bytes += total_bytes; - adapter->net_stats.rx_packets += total_packets; return cleaned; } @@ -4792,12 +5228,9 @@ * igb_alloc_rx_buffers_adv - Replace used receive buffers; packet split * @adapter: address of board private structure **/ -static void igb_alloc_rx_buffers_adv(struct igb_ring *rx_ring, - int cleaned_count) +void igb_alloc_rx_buffers_adv(struct igb_ring *rx_ring, int cleaned_count) { - struct igb_adapter *adapter = rx_ring->adapter; - struct net_device *netdev = adapter->netdev; - struct pci_dev *pdev = adapter->pdev; + struct net_device *netdev = rx_ring->netdev; union e1000_adv_rx_desc *rx_desc; struct igb_buffer *buffer_info; struct sk_buff *skb; @@ -4807,19 +5240,16 @@ i = rx_ring->next_to_use; buffer_info = &rx_ring->buffer_info[i]; - if (adapter->rx_ps_hdr_size) - bufsz = adapter->rx_ps_hdr_size; - else - bufsz = adapter->rx_buffer_len; + bufsz = rx_ring->rx_buffer_len; while (cleaned_count--) { rx_desc = E1000_RX_DESC_ADV(*rx_ring, i); - if (adapter->rx_ps_hdr_size && !buffer_info->page_dma) { + if ((bufsz < IGB_RXBUFFER_1024) && !buffer_info->page_dma) { if (!buffer_info->page) { - buffer_info->page = alloc_page(GFP_ATOMIC); + buffer_info->page = netdev_alloc_page(netdev); if (!buffer_info->page) { - adapter->alloc_rx_buff_failed++; + rx_ring->rx_stats.alloc_failed++; goto no_buffers; } buffer_info->page_offset = 0; @@ -4827,16 +5257,23 @@ buffer_info->page_offset ^= PAGE_SIZE / 2; } buffer_info->page_dma = - pci_map_page(pdev, buffer_info->page, + pci_map_page(rx_ring->pdev, buffer_info->page, buffer_info->page_offset, PAGE_SIZE / 2, PCI_DMA_FROMDEVICE); + if (pci_dma_mapping_error(rx_ring->pdev, + buffer_info->page_dma)) { + buffer_info->page_dma = 0; + rx_ring->rx_stats.alloc_failed++; + goto no_buffers; + } } + skb = buffer_info->skb; if (!buffer_info->skb) { skb = netdev_alloc_skb(netdev, bufsz + NET_IP_ALIGN); if (!skb) { - adapter->alloc_rx_buff_failed++; + rx_ring->rx_stats.alloc_failed++; goto no_buffers; } @@ -4847,19 +5284,27 @@ skb_reserve(skb, NET_IP_ALIGN); buffer_info->skb = skb; - buffer_info->dma = pci_map_single(pdev, skb->data, + } + if (!buffer_info->dma) { + buffer_info->dma = pci_map_single(rx_ring->pdev, + skb->data, bufsz, PCI_DMA_FROMDEVICE); + if (pci_dma_mapping_error(rx_ring->pdev, + buffer_info->dma)) { + buffer_info->dma = 0; + rx_ring->rx_stats.alloc_failed++; + goto no_buffers; + } } /* Refresh the desc even if buffer_addrs didn't change because * each write-back erases this info. */ - if (adapter->rx_ps_hdr_size) { + if (bufsz < IGB_RXBUFFER_1024) { rx_desc->read.pkt_addr = cpu_to_le64(buffer_info->page_dma); rx_desc->read.hdr_addr = cpu_to_le64(buffer_info->dma); } else { - rx_desc->read.pkt_addr = - cpu_to_le64(buffer_info->dma); + rx_desc->read.pkt_addr = cpu_to_le64(buffer_info->dma); rx_desc->read.hdr_addr = 0; } @@ -4882,7 +5327,7 @@ * applicable for weak-ordered memory model archs, * such as IA-64). */ wmb(); - writel(i, adapter->hw.hw_addr + rx_ring->tail); + writel(i, rx_ring->tail); } } @@ -4941,13 +5386,11 @@ struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; struct hwtstamp_config config; - u32 tsync_tx_ctl_bit = E1000_TSYNCTXCTL_ENABLED; - u32 tsync_rx_ctl_bit = E1000_TSYNCRXCTL_ENABLED; - u32 tsync_rx_ctl_type = 0; + u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED; + u32 tsync_rx_ctl = E1000_TSYNCRXCTL_ENABLED; u32 tsync_rx_cfg = 0; - int is_l4 = 0; - int is_l2 = 0; - short port = 319; /* PTP */ + bool is_l4 = false; + bool is_l2 = false; u32 regval; if (copy_from_user(&config, ifr->ifr_data, sizeof(config))) @@ -4959,10 +5402,8 @@ switch (config.tx_type) { case HWTSTAMP_TX_OFF: - tsync_tx_ctl_bit = 0; - break; + tsync_tx_ctl = 0; case HWTSTAMP_TX_ON: - tsync_tx_ctl_bit = E1000_TSYNCTXCTL_ENABLED; break; default: return -ERANGE; @@ -4970,7 +5411,7 @@ switch (config.rx_filter) { case HWTSTAMP_FILTER_NONE: - tsync_rx_ctl_bit = 0; + tsync_rx_ctl = 0; break; case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: @@ -4981,86 +5422,97 @@ * possible to time stamp both Sync and Delay_Req messages * => fall back to time stamping all packets */ - tsync_rx_ctl_type = E1000_TSYNCRXCTL_TYPE_ALL; + tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_ALL; config.rx_filter = HWTSTAMP_FILTER_ALL; break; case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: - tsync_rx_ctl_type = E1000_TSYNCRXCTL_TYPE_L4_V1; + tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1; tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE; - is_l4 = 1; + is_l4 = true; break; case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: - tsync_rx_ctl_type = E1000_TSYNCRXCTL_TYPE_L4_V1; + tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L4_V1; tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE; - is_l4 = 1; + is_l4 = true; break; case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: - tsync_rx_ctl_type = E1000_TSYNCRXCTL_TYPE_L2_L4_V2; + tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L2_L4_V2; tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE; - is_l2 = 1; - is_l4 = 1; + is_l2 = true; + is_l4 = true; config.rx_filter = HWTSTAMP_FILTER_SOME; break; case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: - tsync_rx_ctl_type = E1000_TSYNCRXCTL_TYPE_L2_L4_V2; + tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_L2_L4_V2; tsync_rx_cfg = E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE; - is_l2 = 1; - is_l4 = 1; + is_l2 = true; + is_l4 = true; config.rx_filter = HWTSTAMP_FILTER_SOME; break; case HWTSTAMP_FILTER_PTP_V2_EVENT: case HWTSTAMP_FILTER_PTP_V2_SYNC: case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: - tsync_rx_ctl_type = E1000_TSYNCRXCTL_TYPE_EVENT_V2; + tsync_rx_ctl |= E1000_TSYNCRXCTL_TYPE_EVENT_V2; config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; - is_l2 = 1; + is_l2 = true; break; default: return -ERANGE; } + if (hw->mac.type == e1000_82575) { + if (tsync_rx_ctl | tsync_tx_ctl) + return -EINVAL; + return 0; + } + /* enable/disable TX */ regval = rd32(E1000_TSYNCTXCTL); - regval = (regval & ~E1000_TSYNCTXCTL_ENABLED) | tsync_tx_ctl_bit; + regval &= ~E1000_TSYNCTXCTL_ENABLED; + regval |= tsync_tx_ctl; wr32(E1000_TSYNCTXCTL, regval); - /* enable/disable RX, define which PTP packets are time stamped */ + /* enable/disable RX */ regval = rd32(E1000_TSYNCRXCTL); - regval = (regval & ~E1000_TSYNCRXCTL_ENABLED) | tsync_rx_ctl_bit; - regval = (regval & ~0xE) | tsync_rx_ctl_type; + regval &= ~(E1000_TSYNCRXCTL_ENABLED | E1000_TSYNCRXCTL_TYPE_MASK); + regval |= tsync_rx_ctl; wr32(E1000_TSYNCRXCTL, regval); - wr32(E1000_TSYNCRXCFG, tsync_rx_cfg); - /* - * Ethertype Filter Queue Filter[0][15:0] = 0x88F7 - * (Ethertype to filter on) - * Ethertype Filter Queue Filter[0][26] = 0x1 (Enable filter) - * Ethertype Filter Queue Filter[0][30] = 0x1 (Enable Timestamping) - */ - wr32(E1000_ETQF0, is_l2 ? 0x440088f7 : 0); + /* define which PTP packets are time stamped */ + wr32(E1000_TSYNCRXCFG, tsync_rx_cfg); - /* L4 Queue Filter[0]: only filter by source and destination port */ - wr32(E1000_SPQF0, htons(port)); - wr32(E1000_IMIREXT(0), is_l4 ? - ((1<<12) | (1<<19) /* bypass size and control flags */) : 0); - wr32(E1000_IMIR(0), is_l4 ? - (htons(port) - | (0<<16) /* immediate interrupt disabled */ - | 0 /* (1<<17) bit cleared: do not bypass - destination port check */) - : 0); - wr32(E1000_FTQF0, is_l4 ? - (0x11 /* UDP */ - | (1<<15) /* VF not compared */ - | (1<<27) /* Enable Timestamping */ - | (7<<28) /* only source port filter enabled, - source/target address and protocol - masked */) - : ((1<<15) | (15<<28) /* all mask bits set = filter not - enabled */)); + /* define ethertype filter for timestamped packets */ + if (is_l2) + wr32(E1000_ETQF(3), + (E1000_ETQF_FILTER_ENABLE | /* enable filter */ + E1000_ETQF_1588 | /* enable timestamping */ + ETH_P_1588)); /* 1588 eth protocol type */ + else + wr32(E1000_ETQF(3), 0); +#define PTP_PORT 319 + /* L4 Queue Filter[3]: filter by destination port and protocol */ + if (is_l4) { + u32 ftqf = (IPPROTO_UDP /* UDP */ + | E1000_FTQF_VF_BP /* VF not compared */ + | E1000_FTQF_1588_TIME_STAMP /* Enable Timestamping */ + | E1000_FTQF_MASK); /* mask all inputs */ + ftqf &= ~E1000_FTQF_MASK_PROTO_BP; /* enable protocol check */ + + wr32(E1000_IMIR(3), htons(PTP_PORT)); + wr32(E1000_IMIREXT(3), + (E1000_IMIREXT_SIZE_BP | E1000_IMIREXT_CTRL_BP)); + if (hw->mac.type == e1000_82576) { + /* enable source port check */ + wr32(E1000_SPQF(3), htons(PTP_PORT)); + ftqf &= ~E1000_FTQF_MASK_SOURCE_PORT_BP; + } + wr32(E1000_FTQF(3), ftqf); + } else { + wr32(E1000_FTQF(3), E1000_FTQF_MASK); + } wrfl(); adapter->hwtstamp_config = config; @@ -5137,21 +5589,15 @@ ctrl |= E1000_CTRL_VME; wr32(E1000_CTRL, ctrl); - /* enable VLAN receive filtering */ + /* Disable CFI check */ rctl = rd32(E1000_RCTL); rctl &= ~E1000_RCTL_CFIEN; wr32(E1000_RCTL, rctl); - igb_update_mng_vlan(adapter); } else { /* disable VLAN tag insert/strip */ ctrl = rd32(E1000_CTRL); ctrl &= ~E1000_CTRL_VME; wr32(E1000_CTRL, ctrl); - - if (adapter->mng_vlan_id != (u16)IGB_MNG_VLAN_NONE) { - igb_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id); - adapter->mng_vlan_id = IGB_MNG_VLAN_NONE; - } } igb_rlpml_set(adapter); @@ -5166,16 +5612,11 @@ struct e1000_hw *hw = &adapter->hw; int pf_id = adapter->vfs_allocated_count; - if ((hw->mng_cookie.status & - E1000_MNG_DHCP_COOKIE_STATUS_VLAN) && - (vid == adapter->mng_vlan_id)) - return; - - /* add vid to vlvf if sr-iov is enabled, - * if that fails add directly to filter table */ - if (igb_vlvf_set(adapter, vid, true, pf_id)) - igb_vfta_set(hw, vid, true); + /* attempt to add filter to vlvf array */ + igb_vlvf_set(adapter, vid, true, pf_id); + /* add the filter since PF can receive vlans w/o entry in vlvf */ + igb_vfta_set(hw, vid, true); } static void igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) @@ -5183,6 +5624,7 @@ struct igb_adapter *adapter = netdev_priv(netdev); struct e1000_hw *hw = &adapter->hw; int pf_id = adapter->vfs_allocated_count; + s32 err; igb_irq_disable(adapter); vlan_group_set_device(adapter->vlgrp, vid, NULL); @@ -5190,17 +5632,11 @@ if (!test_bit(__IGB_DOWN, &adapter->state)) igb_irq_enable(adapter); - if ((adapter->hw.mng_cookie.status & - E1000_MNG_DHCP_COOKIE_STATUS_VLAN) && - (vid == adapter->mng_vlan_id)) { - /* release control to f/w */ - igb_release_hw_control(adapter); - return; - } + /* remove vlan from VLVF table array */ + err = igb_vlvf_set(adapter, vid, false, pf_id); - /* remove vid from vlvf if sr-iov is enabled, - * if not in vlvf remove from vfta */ - if (igb_vlvf_set(adapter, vid, false, pf_id)) + /* if vid was not present in VLVF just remove it from table */ + if (err) igb_vfta_set(hw, vid, false); } @@ -5220,6 +5656,7 @@ int igb_set_spd_dplx(struct igb_adapter *adapter, u16 spddplx) { + struct pci_dev *pdev = adapter->pdev; struct e1000_mac_info *mac = &adapter->hw.mac; mac->autoneg = 0; @@ -5243,8 +5680,7 @@ break; case SPEED_1000 + DUPLEX_HALF: /* not supported */ default: - dev_err(&adapter->pdev->dev, - "Unsupported Speed/Duplex configuration\n"); + dev_err(&pdev->dev, "Unsupported Speed/Duplex configuration\n"); return -EINVAL; } return 0; @@ -5266,9 +5702,7 @@ if (netif_running(netdev)) igb_close(netdev); - igb_reset_interrupt_capability(adapter); - - igb_free_queues(adapter); + igb_clear_interrupt_scheme(adapter); #ifdef CONFIG_PM retval = pci_save_state(pdev); @@ -5300,7 +5734,7 @@ wr32(E1000_CTRL, ctrl); /* Allow time for pending master requests to run */ - igb_disable_pcie_master(&adapter->hw); + igb_disable_pcie_master(hw); wr32(E1000_WUC, E1000_WUC_PME_EN); wr32(E1000_WUFC, wufc); @@ -5363,9 +5797,7 @@ pci_enable_wake(pdev, PCI_D3hot, 0); pci_enable_wake(pdev, PCI_D3cold, 0); - igb_set_interrupt_capability(adapter); - - if (igb_alloc_queues(adapter)) { + if (igb_init_interrupt_scheme(adapter)) { dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); return -ENOMEM; } @@ -5417,22 +5849,16 @@ int i; if (!adapter->msix_entries) { + struct igb_q_vector *q_vector = adapter->q_vector[0]; igb_irq_disable(adapter); - napi_schedule(&adapter->rx_ring[0].napi); + napi_schedule(&q_vector->napi); return; } - for (i = 0; i < adapter->num_tx_queues; i++) { - struct igb_ring *tx_ring = &adapter->tx_ring[i]; - wr32(E1000_EIMC, tx_ring->eims_value); - igb_clean_tx_irq(tx_ring); - wr32(E1000_EIMS, tx_ring->eims_value); - } - - for (i = 0; i < adapter->num_rx_queues; i++) { - struct igb_ring *rx_ring = &adapter->rx_ring[i]; - wr32(E1000_EIMC, rx_ring->eims_value); - napi_schedule(&rx_ring->napi); + for (i = 0; i < adapter->num_q_vectors; i++) { + struct igb_q_vector *q_vector = adapter->q_vector[i]; + wr32(E1000_EIMC, q_vector->eims_value); + napi_schedule(&q_vector->napi); } } #endif /* CONFIG_NET_POLL_CONTROLLER */ @@ -5532,6 +5958,33 @@ igb_get_hw_control(adapter); } +static void igb_rar_set_qsel(struct igb_adapter *adapter, u8 *addr, u32 index, + u8 qsel) +{ + u32 rar_low, rar_high; + struct e1000_hw *hw = &adapter->hw; + + /* HW expects these in little endian so we reverse the byte order + * from network order (big endian) to little endian + */ + rar_low = ((u32) addr[0] | ((u32) addr[1] << 8) | + ((u32) addr[2] << 16) | ((u32) addr[3] << 24)); + rar_high = ((u32) addr[4] | ((u32) addr[5] << 8)); + + /* Indicate to hardware the Address is Valid. */ + rar_high |= E1000_RAH_AV; + + if (hw->mac.type == e1000_82575) + rar_high |= E1000_RAH_POOL_1 * qsel; + else + rar_high |= E1000_RAH_POOL_1 << qsel; + + wr32(E1000_RAL(index), rar_low); + wrfl(); + wr32(E1000_RAH(index), rar_high); + wrfl(); +} + static int igb_set_vf_mac(struct igb_adapter *adapter, int vf, unsigned char *mac_addr) { @@ -5542,8 +5995,7 @@ memcpy(adapter->vf_data[vf].vf_mac_addresses, mac_addr, ETH_ALEN); - igb_rar_set(hw, mac_addr, rar_entry); - igb_set_rah_pool(hw, vf, rar_entry); + igb_rar_set_qsel(adapter, mac_addr, rar_entry, vf); return 0; } @@ -5551,19 +6003,29 @@ static void igb_vmm_control(struct igb_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; - u32 reg_data; + u32 reg; - if (!adapter->vfs_allocated_count) + /* replication is not supported for 82575 */ + if (hw->mac.type == e1000_82575) return; - /* VF's need PF reset indication before they - * can send/receive mail */ - reg_data = rd32(E1000_CTRL_EXT); - reg_data |= E1000_CTRL_EXT_PFRSTD; - wr32(E1000_CTRL_EXT, reg_data); + /* enable replication vlan tag stripping */ + reg = rd32(E1000_RPLOLR); + reg |= E1000_RPLOLR_STRVLAN; + wr32(E1000_RPLOLR, reg); + + /* notify HW that the MAC is adding vlan tags */ + reg = rd32(E1000_DTXCTL); + reg |= E1000_DTXCTL_VLAN_ADDED; + wr32(E1000_DTXCTL, reg); - igb_vmdq_set_loopback_pf(hw, true); - igb_vmdq_set_replication_pf(hw, true); + if (adapter->vfs_allocated_count) { + igb_vmdq_set_loopback_pf(hw, true); + igb_vmdq_set_replication_pf(hw, true); + } else { + igb_vmdq_set_loopback_pf(hw, false); + igb_vmdq_set_replication_pf(hw, false); + } } /* igb_main.c */ --- linux-2.6.32.orig/drivers/net/igb/e1000_nvm.c +++ linux-2.6.32/drivers/net/igb/e1000_nvm.c @@ -78,9 +78,7 @@ u32 mask; mask = 0x01 << (count - 1); - if (nvm->type == e1000_nvm_eeprom_microwire) - eecd &= ~E1000_EECD_DO; - else if (nvm->type == e1000_nvm_eeprom_spi) + if (nvm->type == e1000_nvm_eeprom_spi) eecd |= E1000_EECD_DO; do { @@ -220,22 +218,7 @@ struct e1000_nvm_info *nvm = &hw->nvm; u32 eecd = rd32(E1000_EECD); - if (nvm->type == e1000_nvm_eeprom_microwire) { - eecd &= ~(E1000_EECD_CS | E1000_EECD_SK); - wr32(E1000_EECD, eecd); - wrfl(); - udelay(nvm->delay_usec); - - igb_raise_eec_clk(hw, &eecd); - - /* Select EEPROM */ - eecd |= E1000_EECD_CS; - wr32(E1000_EECD, eecd); - wrfl(); - udelay(nvm->delay_usec); - - igb_lower_eec_clk(hw, &eecd); - } else if (nvm->type == e1000_nvm_eeprom_spi) { + if (nvm->type == e1000_nvm_eeprom_spi) { /* Toggle CS to flush commands */ eecd |= E1000_EECD_CS; wr32(E1000_EECD, eecd); @@ -263,12 +246,6 @@ /* Pull CS high */ eecd |= E1000_EECD_CS; igb_lower_eec_clk(hw, &eecd); - } else if (hw->nvm.type == e1000_nvm_eeprom_microwire) { - /* CS on Microcwire is active-high */ - eecd &= ~(E1000_EECD_CS | E1000_EECD_DI); - wr32(E1000_EECD, eecd); - igb_raise_eec_clk(hw, &eecd); - igb_lower_eec_clk(hw, &eecd); } } @@ -304,14 +281,7 @@ u8 spi_stat_reg; - if (nvm->type == e1000_nvm_eeprom_microwire) { - /* Clear SK and DI */ - eecd &= ~(E1000_EECD_DI | E1000_EECD_SK); - wr32(E1000_EECD, eecd); - /* Set CS */ - eecd |= E1000_EECD_CS; - wr32(E1000_EECD, eecd); - } else if (nvm->type == e1000_nvm_eeprom_spi) { + if (nvm->type == e1000_nvm_eeprom_spi) { /* Clear SK and CS */ eecd &= ~(E1000_EECD_CS | E1000_EECD_SK); wr32(E1000_EECD, eecd); --- linux-2.6.32.orig/drivers/net/igb/e1000_hw.h +++ linux-2.6.32/drivers/net/igb/e1000_hw.h @@ -42,20 +42,35 @@ #define E1000_DEV_ID_82576_SERDES 0x10E7 #define E1000_DEV_ID_82576_QUAD_COPPER 0x10E8 #define E1000_DEV_ID_82576_NS 0x150A +#define E1000_DEV_ID_82576_NS_SERDES 0x1518 #define E1000_DEV_ID_82576_SERDES_QUAD 0x150D #define E1000_DEV_ID_82575EB_COPPER 0x10A7 #define E1000_DEV_ID_82575EB_FIBER_SERDES 0x10A9 #define E1000_DEV_ID_82575GB_QUAD_COPPER 0x10D6 +#define E1000_DEV_ID_82580_COPPER 0x150E +#define E1000_DEV_ID_82580_FIBER 0x150F +#define E1000_DEV_ID_82580_SERDES 0x1510 +#define E1000_DEV_ID_82580_SGMII 0x1511 +#define E1000_DEV_ID_82580_COPPER_DUAL 0x1516 #define E1000_REVISION_2 2 #define E1000_REVISION_4 4 +#define E1000_FUNC_0 0 #define E1000_FUNC_1 1 +#define E1000_FUNC_2 2 +#define E1000_FUNC_3 3 + +#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0 0 +#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1 3 +#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2 6 +#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3 9 enum e1000_mac_type { e1000_undefined = 0, e1000_82575, e1000_82576, + e1000_82580, e1000_num_macs /* List is 1-based, so subtract 1 for true count. */ }; @@ -70,7 +85,6 @@ e1000_nvm_unknown = 0, e1000_nvm_none, e1000_nvm_eeprom_spi, - e1000_nvm_eeprom_microwire, e1000_nvm_flash_hw, e1000_nvm_flash_sw }; @@ -79,8 +93,6 @@ e1000_nvm_override_none = 0, e1000_nvm_override_spi_small, e1000_nvm_override_spi_large, - e1000_nvm_override_microwire_small, - e1000_nvm_override_microwire_large }; enum e1000_phy_type { @@ -92,6 +104,7 @@ e1000_phy_gg82563, e1000_phy_igp_3, e1000_phy_ife, + e1000_phy_82580, }; enum e1000_bus_type { @@ -288,6 +301,7 @@ struct e1000_phy_operations { s32 (*acquire)(struct e1000_hw *); + s32 (*check_polarity)(struct e1000_hw *); s32 (*check_reset_block)(struct e1000_hw *); s32 (*force_speed_duplex)(struct e1000_hw *); s32 (*get_cfg_done)(struct e1000_hw *hw); @@ -339,6 +353,7 @@ u16 ifs_ratio; u16 ifs_step_size; u16 mta_reg_count; + u16 uta_reg_count; /* Maximum size of the MTA register table in all supported adapters */ #define MAX_MTA_REG 128 @@ -463,6 +478,7 @@ struct e1000_dev_spec_82575 { bool sgmii_active; + bool global_device_reset; }; struct e1000_hw { --- linux-2.6.32.orig/drivers/net/igb/e1000_phy.c +++ linux-2.6.32/drivers/net/igb/e1000_phy.c @@ -39,6 +39,9 @@ /* Cable length tables */ static const u16 e1000_m88_cable_length_table[] = { 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED }; +#define M88E1000_CABLE_LENGTH_TABLE_SIZE \ + (sizeof(e1000_m88_cable_length_table) / \ + sizeof(e1000_m88_cable_length_table[0])) static const u16 e1000_igp_2_cable_length_table[] = { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21, @@ -109,7 +112,10 @@ **/ static s32 igb_phy_reset_dsp(struct e1000_hw *hw) { - s32 ret_val; + s32 ret_val = 0; + + if (!(hw->phy.ops.write_reg)) + goto out; ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1); if (ret_val) @@ -130,7 +136,7 @@ * Reads the MDI control regsiter in the PHY at offset and stores the * information read to data. **/ -static s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) +s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) { struct e1000_phy_info *phy = &hw->phy; u32 i, mdic = 0; @@ -188,7 +194,7 @@ * * Writes data to MDI control register in the PHY at offset. **/ -static s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data) +s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data) { struct e1000_phy_info *phy = &hw->phy; u32 i, mdic = 0; @@ -239,6 +245,103 @@ } /** + * igb_read_phy_reg_i2c - Read PHY register using i2c + * @hw: pointer to the HW structure + * @offset: register offset to be read + * @data: pointer to the read data + * + * Reads the PHY register at offset using the i2c interface and stores the + * retrieved information in data. + **/ +s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data) +{ + struct e1000_phy_info *phy = &hw->phy; + u32 i, i2ccmd = 0; + + + /* + * Set up Op-code, Phy Address, and register address in the I2CCMD + * register. The MAC will take care of interfacing with the + * PHY to retrieve the desired data. + */ + i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | + (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | + (E1000_I2CCMD_OPCODE_READ)); + + wr32(E1000_I2CCMD, i2ccmd); + + /* Poll the ready bit to see if the I2C read completed */ + for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { + udelay(50); + i2ccmd = rd32(E1000_I2CCMD); + if (i2ccmd & E1000_I2CCMD_READY) + break; + } + if (!(i2ccmd & E1000_I2CCMD_READY)) { + hw_dbg("I2CCMD Read did not complete\n"); + return -E1000_ERR_PHY; + } + if (i2ccmd & E1000_I2CCMD_ERROR) { + hw_dbg("I2CCMD Error bit set\n"); + return -E1000_ERR_PHY; + } + + /* Need to byte-swap the 16-bit value. */ + *data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00); + + return 0; +} + +/** + * igb_write_phy_reg_i2c - Write PHY register using i2c + * @hw: pointer to the HW structure + * @offset: register offset to write to + * @data: data to write at register offset + * + * Writes the data to PHY register at the offset using the i2c interface. + **/ +s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data) +{ + struct e1000_phy_info *phy = &hw->phy; + u32 i, i2ccmd = 0; + u16 phy_data_swapped; + + + /* Swap the data bytes for the I2C interface */ + phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00); + + /* + * Set up Op-code, Phy Address, and register address in the I2CCMD + * register. The MAC will take care of interfacing with the + * PHY to retrieve the desired data. + */ + i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | + (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | + E1000_I2CCMD_OPCODE_WRITE | + phy_data_swapped); + + wr32(E1000_I2CCMD, i2ccmd); + + /* Poll the ready bit to see if the I2C read completed */ + for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { + udelay(50); + i2ccmd = rd32(E1000_I2CCMD); + if (i2ccmd & E1000_I2CCMD_READY) + break; + } + if (!(i2ccmd & E1000_I2CCMD_READY)) { + hw_dbg("I2CCMD Write did not complete\n"); + return -E1000_ERR_PHY; + } + if (i2ccmd & E1000_I2CCMD_ERROR) { + hw_dbg("I2CCMD Error bit set\n"); + return -E1000_ERR_PHY; + } + + return 0; +} + +/** * igb_read_phy_reg_igp - Read igp PHY register * @hw: pointer to the HW structure * @offset: register offset to be read @@ -318,6 +421,48 @@ } /** + * igb_copper_link_setup_82580 - Setup 82580 PHY for copper link + * @hw: pointer to the HW structure + * + * Sets up Carrier-sense on Transmit and downshift values. + **/ +s32 igb_copper_link_setup_82580(struct e1000_hw *hw) +{ + struct e1000_phy_info *phy = &hw->phy; + s32 ret_val; + u16 phy_data; + + + if (phy->reset_disable) { + ret_val = 0; + goto out; + } + + if (phy->type == e1000_phy_82580) { + ret_val = hw->phy.ops.reset(hw); + if (ret_val) { + hw_dbg("Error resetting the PHY.\n"); + goto out; + } + } + + /* Enable CRS on TX. This must be set for half-duplex operation. */ + ret_val = phy->ops.read_reg(hw, I82580_CFG_REG, &phy_data); + if (ret_val) + goto out; + + phy_data |= I82580_CFG_ASSERT_CRS_ON_TX; + + /* Enable downshift */ + phy_data |= I82580_CFG_ENABLE_DOWNSHIFT; + + ret_val = phy->ops.write_reg(hw, I82580_CFG_REG, phy_data); + +out: + return ret_val; +} + +/** * igb_copper_link_setup_m88 - Setup m88 PHY's for copper link * @hw: pointer to the HW structure * @@ -572,7 +717,7 @@ * and restart the negotiation process between the link partner. If * autoneg_wait_to_complete, then wait for autoneg to complete before exiting. **/ -s32 igb_copper_link_autoneg(struct e1000_hw *hw) +static s32 igb_copper_link_autoneg(struct e1000_hw *hw) { struct e1000_phy_info *phy = &hw->phy; s32 ret_val; @@ -796,6 +941,65 @@ } /** + * igb_setup_copper_link - Configure copper link settings + * @hw: pointer to the HW structure + * + * Calls the appropriate function to configure the link for auto-neg or forced + * speed and duplex. Then we check for link, once link is established calls + * to configure collision distance and flow control are called. If link is + * not established, we return -E1000_ERR_PHY (-2). + **/ +s32 igb_setup_copper_link(struct e1000_hw *hw) +{ + s32 ret_val; + bool link; + + + if (hw->mac.autoneg) { + /* + * Setup autoneg and flow control advertisement and perform + * autonegotiation. + */ + ret_val = igb_copper_link_autoneg(hw); + if (ret_val) + goto out; + } else { + /* + * PHY will be set to 10H, 10F, 100H or 100F + * depending on user settings. + */ + hw_dbg("Forcing Speed and Duplex\n"); + ret_val = hw->phy.ops.force_speed_duplex(hw); + if (ret_val) { + hw_dbg("Error Forcing Speed and Duplex\n"); + goto out; + } + } + + /* + * Check link status. Wait up to 100 microseconds for link to become + * valid. + */ + ret_val = igb_phy_has_link(hw, + COPPER_LINK_UP_LIMIT, + 10, + &link); + if (ret_val) + goto out; + + if (link) { + hw_dbg("Valid link established!!!\n"); + igb_config_collision_dist(hw); + ret_val = igb_config_fc_after_link_up(hw); + } else { + hw_dbg("Unable to establish link!!!\n"); + } + +out: + return ret_val; +} + +/** * igb_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY * @hw: pointer to the HW structure * @@ -903,22 +1107,19 @@ igb_phy_force_speed_duplex_setup(hw, &phy_data); - /* Reset the phy to commit changes. */ - phy_data |= MII_CR_RESET; - ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); if (ret_val) goto out; - udelay(1); + /* Reset the phy to commit changes. */ + ret_val = igb_phy_sw_reset(hw); + if (ret_val) + goto out; if (phy->autoneg_wait_to_complete) { hw_dbg("Waiting for forced speed/duplex link on M88 phy.\n"); - ret_val = igb_phy_has_link(hw, - PHY_FORCE_LIMIT, - 100000, - &link); + ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link); if (ret_val) goto out; @@ -928,8 +1129,8 @@ * Reset the DSP and cross our fingers. */ ret_val = phy->ops.write_reg(hw, - M88E1000_PHY_PAGE_SELECT, - 0x001d); + M88E1000_PHY_PAGE_SELECT, + 0x001d); if (ret_val) goto out; ret_val = igb_phy_reset_dsp(hw); @@ -939,7 +1140,7 @@ /* Try once more */ ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, - 100000, &link); + 100000, &link); if (ret_val) goto out; } @@ -1051,9 +1252,12 @@ s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active) { struct e1000_phy_info *phy = &hw->phy; - s32 ret_val; + s32 ret_val = 0; u16 data; + if (!(hw->phy.ops.read_reg)) + goto out; + ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); if (ret_val) goto out; @@ -1288,8 +1492,14 @@ * it across the board. */ ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); - if (ret_val) - break; + if (ret_val) { + /* + * If the first read fails, another entity may have + * ownership of the resources, wait and try again to + * see if they have relinquished the resources yet. + */ + udelay(usec_interval); + } ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); if (ret_val) break; @@ -1333,8 +1543,13 @@ index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >> M88E1000_PSSR_CABLE_LENGTH_SHIFT; + if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) { + ret_val = -E1000_ERR_PHY; + goto out; + } + phy->min_cable_length = e1000_m88_cable_length_table[index]; - phy->max_cable_length = e1000_m88_cable_length_table[index+1]; + phy->max_cable_length = e1000_m88_cable_length_table[index + 1]; phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2; @@ -1715,3 +1930,194 @@ return 0; } +/** + * igb_check_polarity_82580 - Checks the polarity. + * @hw: pointer to the HW structure + * + * Success returns 0, Failure returns -E1000_ERR_PHY (-2) + * + * Polarity is determined based on the PHY specific status register. + **/ +static s32 igb_check_polarity_82580(struct e1000_hw *hw) +{ + struct e1000_phy_info *phy = &hw->phy; + s32 ret_val; + u16 data; + + + ret_val = phy->ops.read_reg(hw, I82580_PHY_STATUS_2, &data); + + if (!ret_val) + phy->cable_polarity = (data & I82580_PHY_STATUS2_REV_POLARITY) + ? e1000_rev_polarity_reversed + : e1000_rev_polarity_normal; + + return ret_val; +} + +/** + * igb_phy_force_speed_duplex_82580 - Force speed/duplex for I82580 PHY + * @hw: pointer to the HW structure + * + * Calls the PHY setup function to force speed and duplex. Clears the + * auto-crossover to force MDI manually. Waits for link and returns + * successful if link up is successful, else -E1000_ERR_PHY (-2). + **/ +s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw) +{ + struct e1000_phy_info *phy = &hw->phy; + s32 ret_val; + u16 phy_data; + bool link; + + + ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); + if (ret_val) + goto out; + + igb_phy_force_speed_duplex_setup(hw, &phy_data); + + ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); + if (ret_val) + goto out; + + /* + * Clear Auto-Crossover to force MDI manually. 82580 requires MDI + * forced whenever speed and duplex are forced. + */ + ret_val = phy->ops.read_reg(hw, I82580_PHY_CTRL_2, &phy_data); + if (ret_val) + goto out; + + phy_data &= ~I82580_PHY_CTRL2_AUTO_MDIX; + phy_data &= ~I82580_PHY_CTRL2_FORCE_MDI_MDIX; + + ret_val = phy->ops.write_reg(hw, I82580_PHY_CTRL_2, phy_data); + if (ret_val) + goto out; + + hw_dbg("I82580_PHY_CTRL_2: %X\n", phy_data); + + udelay(1); + + if (phy->autoneg_wait_to_complete) { + hw_dbg("Waiting for forced speed/duplex link on 82580 phy\n"); + + ret_val = igb_phy_has_link(hw, + PHY_FORCE_LIMIT, + 100000, + &link); + if (ret_val) + goto out; + + if (!link) + hw_dbg("Link taking longer than expected.\n"); + + /* Try once more */ + ret_val = igb_phy_has_link(hw, + PHY_FORCE_LIMIT, + 100000, + &link); + if (ret_val) + goto out; + } + +out: + return ret_val; +} + +/** + * igb_get_phy_info_82580 - Retrieve I82580 PHY information + * @hw: pointer to the HW structure + * + * Read PHY status to determine if link is up. If link is up, then + * set/determine 10base-T extended distance and polarity correction. Read + * PHY port status to determine MDI/MDIx and speed. Based on the speed, + * determine on the cable length, local and remote receiver. + **/ +s32 igb_get_phy_info_82580(struct e1000_hw *hw) +{ + struct e1000_phy_info *phy = &hw->phy; + s32 ret_val; + u16 data; + bool link; + + + ret_val = igb_phy_has_link(hw, 1, 0, &link); + if (ret_val) + goto out; + + if (!link) { + hw_dbg("Phy info is only valid if link is up\n"); + ret_val = -E1000_ERR_CONFIG; + goto out; + } + + phy->polarity_correction = true; + + ret_val = igb_check_polarity_82580(hw); + if (ret_val) + goto out; + + ret_val = phy->ops.read_reg(hw, I82580_PHY_STATUS_2, &data); + if (ret_val) + goto out; + + phy->is_mdix = (data & I82580_PHY_STATUS2_MDIX) ? true : false; + + if ((data & I82580_PHY_STATUS2_SPEED_MASK) == + I82580_PHY_STATUS2_SPEED_1000MBPS) { + ret_val = hw->phy.ops.get_cable_length(hw); + if (ret_val) + goto out; + + ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data); + if (ret_val) + goto out; + + phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS) + ? e1000_1000t_rx_status_ok + : e1000_1000t_rx_status_not_ok; + + phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS) + ? e1000_1000t_rx_status_ok + : e1000_1000t_rx_status_not_ok; + } else { + phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED; + phy->local_rx = e1000_1000t_rx_status_undefined; + phy->remote_rx = e1000_1000t_rx_status_undefined; + } + +out: + return ret_val; +} + +/** + * igb_get_cable_length_82580 - Determine cable length for 82580 PHY + * @hw: pointer to the HW structure + * + * Reads the diagnostic status register and verifies result is valid before + * placing it in the phy_cable_length field. + **/ +s32 igb_get_cable_length_82580(struct e1000_hw *hw) +{ + struct e1000_phy_info *phy = &hw->phy; + s32 ret_val; + u16 phy_data, length; + + + ret_val = phy->ops.read_reg(hw, I82580_PHY_DIAG_STATUS, &phy_data); + if (ret_val) + goto out; + + length = (phy_data & I82580_DSTATUS_CABLE_LENGTH) >> + I82580_DSTATUS_CABLE_LENGTH_SHIFT; + + if (length == E1000_CABLE_LENGTH_UNDEFINED) + ret_val = -E1000_ERR_PHY; + + phy->cable_length = length; + +out: + return ret_val; +} --- linux-2.6.32.orig/drivers/net/igb/e1000_mbx.h +++ linux-2.6.32/drivers/net/igb/e1000_mbx.h @@ -58,10 +58,12 @@ #define E1000_VT_MSGINFO_MASK (0xFF << E1000_VT_MSGINFO_SHIFT) #define E1000_VF_RESET 0x01 /* VF requests reset */ -#define E1000_VF_SET_MAC_ADDR 0x02 /* VF requests PF to set MAC addr */ -#define E1000_VF_SET_MULTICAST 0x03 /* VF requests PF to set MC addr */ -#define E1000_VF_SET_VLAN 0x04 /* VF requests PF to set VLAN */ -#define E1000_VF_SET_LPE 0x05 /* VF requests PF to set VMOLR.LPE */ +#define E1000_VF_SET_MAC_ADDR 0x02 /* VF requests to set MAC addr */ +#define E1000_VF_SET_MULTICAST 0x03 /* VF requests to set MC addr */ +#define E1000_VF_SET_VLAN 0x04 /* VF requests to set VLAN */ +#define E1000_VF_SET_LPE 0x05 /* VF requests to set VMOLR.LPE */ +#define E1000_VF_SET_PROMISC 0x06 /*VF requests to clear VMOLR.ROPE/MPME*/ +#define E1000_VF_SET_PROMISC_MULTICAST (0x02 << E1000_VT_MSGINFO_SHIFT) #define E1000_PF_CONTROL_MSG 0x0100 /* PF control message */ --- linux-2.6.32.orig/drivers/net/usb/dm9601.c +++ linux-2.6.32/drivers/net/usb/dm9601.c @@ -238,7 +238,7 @@ goto out; dm_write_reg(dev, DM_SHARED_ADDR, phy ? (reg | 0x40) : reg); - dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0x1c : 0x14); + dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0x1a : 0x12); for (i = 0; i < DM_TIMEOUT; i++) { u8 tmp; --- linux-2.6.32.orig/drivers/net/usb/rtl8150.c +++ linux-2.6.32/drivers/net/usb/rtl8150.c @@ -324,7 +324,7 @@ dbg("%02X:", netdev->dev_addr[i]); dbg("%02X\n", netdev->dev_addr[i]); /* Set the IDR registers. */ - set_registers(dev, IDR, sizeof(netdev->dev_addr), netdev->dev_addr); + set_registers(dev, IDR, netdev->addr_len, netdev->dev_addr); #ifdef EEPROM_WRITE { u8 cr; --- linux-2.6.32.orig/drivers/net/qlge/qlge_main.c +++ linux-2.6.32/drivers/net/qlge/qlge_main.c @@ -3310,10 +3310,8 @@ /* Initialize the port and set the max framesize. */ status = qdev->nic_ops->port_initialize(qdev); - if (status) { - QPRINTK(qdev, IFUP, ERR, "Failed to start port.\n"); - return status; - } + if (status) + QPRINTK(qdev, IFUP, ERR, "Failed to start port.\n"); /* Set up the MAC address and frame routing filter. */ status = ql_cam_route_initialize(qdev); @@ -3714,9 +3712,6 @@ struct sockaddr *addr = p; int status; - if (netif_running(ndev)) - return -EBUSY; - if (!is_valid_ether_addr(addr->sa_data)) return -EADDRNOTAVAIL; memcpy(ndev->dev_addr, addr->sa_data, ndev->addr_len); @@ -3868,8 +3863,7 @@ struct net_device *ndev, int cards_found) { struct ql_adapter *qdev = netdev_priv(ndev); - int pos, err = 0; - u16 val16; + int err = 0; memset((void *)qdev, 0, sizeof(*qdev)); err = pci_enable_device(pdev); @@ -3881,18 +3875,12 @@ qdev->ndev = ndev; qdev->pdev = pdev; pci_set_drvdata(pdev, ndev); - pos = pci_find_capability(pdev, PCI_CAP_ID_EXP); - if (pos <= 0) { - dev_err(&pdev->dev, PFX "Cannot find PCI Express capability, " - "aborting.\n"); - return pos; - } else { - pci_read_config_word(pdev, pos + PCI_EXP_DEVCTL, &val16); - val16 &= ~PCI_EXP_DEVCTL_NOSNOOP_EN; - val16 |= (PCI_EXP_DEVCTL_CERE | - PCI_EXP_DEVCTL_NFERE | - PCI_EXP_DEVCTL_FERE | PCI_EXP_DEVCTL_URRE); - pci_write_config_word(pdev, pos + PCI_EXP_DEVCTL, val16); + + /* Set PCIe read request size */ + err = pcie_set_readrq(pdev, 4096); + if (err) { + dev_err(&pdev->dev, "Set readrq failed.\n"); + goto err_out; } err = pci_request_regions(pdev, DRV_NAME); --- linux-2.6.32.orig/drivers/net/qlge/qlge_mpi.c +++ linux-2.6.32/drivers/net/qlge/qlge_mpi.c @@ -446,6 +446,9 @@ ql_aen_lost(qdev, mbcp); break; + case AEN_DCBX_CHG: + /* Need to support AEN 8110 */ + break; default: QPRINTK(qdev, DRV, ERR, "Unsupported AE %.08x.\n", mbcp->mbox_out[0]); --- linux-2.6.32.orig/drivers/net/atl1e/atl1e_main.c +++ linux-2.6.32/drivers/net/atl1e/atl1e_main.c @@ -1666,41 +1666,6 @@ } return 0; } - - if (offload_type & SKB_GSO_TCPV6) { - real_len = (((unsigned char *)ipv6_hdr(skb) - skb->data) - + ntohs(ipv6_hdr(skb)->payload_len)); - if (real_len < skb->len) - pskb_trim(skb, real_len); - - /* check payload == 0 byte ? */ - hdr_len = (skb_transport_offset(skb) + tcp_hdrlen(skb)); - if (unlikely(skb->len == hdr_len)) { - /* only xsum need */ - dev_warn(&pdev->dev, - "IPV6 tso with zero data??\n"); - goto check_sum; - } else { - tcp_hdr(skb)->check = ~csum_ipv6_magic( - &ipv6_hdr(skb)->saddr, - &ipv6_hdr(skb)->daddr, - 0, IPPROTO_TCP, 0); - tpd->word3 |= 1 << TPD_IP_VERSION_SHIFT; - hdr_len >>= 1; - tpd->word3 |= (hdr_len & TPD_V6_IPHLLO_MASK) << - TPD_V6_IPHLLO_SHIFT; - tpd->word3 |= ((hdr_len >> 3) & - TPD_V6_IPHLHI_MASK) << - TPD_V6_IPHLHI_SHIFT; - tpd->word3 |= (tcp_hdrlen(skb) >> 2 & - TPD_TCPHDRLEN_MASK) << - TPD_TCPHDRLEN_SHIFT; - tpd->word3 |= ((skb_shinfo(skb)->gso_size) & - TPD_MSS_MASK) << TPD_MSS_SHIFT; - tpd->word3 |= 1 << TPD_SEGMENT_EN_SHIFT; - } - } - return 0; } check_sum: @@ -2289,7 +2254,6 @@ NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; netdev->features |= NETIF_F_LLTX; netdev->features |= NETIF_F_TSO; - netdev->features |= NETIF_F_TSO6; return 0; } --- linux-2.6.32.orig/drivers/net/sfc/nic.h +++ linux-2.6.32/drivers/net/sfc/nic.h @@ -0,0 +1,261 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2005-2006 Fen Systems Ltd. + * Copyright 2006-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#ifndef EFX_NIC_H +#define EFX_NIC_H + +#include +#include "net_driver.h" +#include "efx.h" +#include "mcdi.h" + +/* + * Falcon hardware control + */ + +enum { + EFX_REV_FALCON_A0 = 0, + EFX_REV_FALCON_A1 = 1, + EFX_REV_FALCON_B0 = 2, + EFX_REV_SIENA_A0 = 3, +}; + +static inline int efx_nic_rev(struct efx_nic *efx) +{ + return efx->type->revision; +} + +extern u32 efx_nic_fpga_ver(struct efx_nic *efx); + +static inline bool efx_nic_has_mc(struct efx_nic *efx) +{ + return efx_nic_rev(efx) >= EFX_REV_SIENA_A0; +} +/* NIC has two interlinked PCI functions for the same port. */ +static inline bool efx_nic_is_dual_func(struct efx_nic *efx) +{ + return efx_nic_rev(efx) < EFX_REV_FALCON_B0; +} + +enum { + PHY_TYPE_NONE = 0, + PHY_TYPE_TXC43128 = 1, + PHY_TYPE_88E1111 = 2, + PHY_TYPE_SFX7101 = 3, + PHY_TYPE_QT2022C2 = 4, + PHY_TYPE_PM8358 = 6, + PHY_TYPE_SFT9001A = 8, + PHY_TYPE_QT2025C = 9, + PHY_TYPE_SFT9001B = 10, +}; + +#define FALCON_XMAC_LOOPBACKS \ + ((1 << LOOPBACK_XGMII) | \ + (1 << LOOPBACK_XGXS) | \ + (1 << LOOPBACK_XAUI)) + +#define FALCON_GMAC_LOOPBACKS \ + (1 << LOOPBACK_GMAC) + +/** + * struct falcon_board_type - board operations and type information + * @id: Board type id, as found in NVRAM + * @ref_model: Model number of Solarflare reference design + * @gen_type: Generic board type description + * @init: Allocate resources and initialise peripheral hardware + * @init_phy: Do board-specific PHY initialisation + * @fini: Shut down hardware and free resources + * @set_id_led: Set state of identifying LED or revert to automatic function + * @monitor: Board-specific health check function + */ +struct falcon_board_type { + u8 id; + const char *ref_model; + const char *gen_type; + int (*init) (struct efx_nic *nic); + void (*init_phy) (struct efx_nic *efx); + void (*fini) (struct efx_nic *nic); + void (*set_id_led) (struct efx_nic *efx, enum efx_led_mode mode); + int (*monitor) (struct efx_nic *nic); +}; + +/** + * struct falcon_board - board information + * @type: Type of board + * @major: Major rev. ('A', 'B' ...) + * @minor: Minor rev. (0, 1, ...) + * @i2c_adap: I2C adapter for on-board peripherals + * @i2c_data: Data for bit-banging algorithm + * @hwmon_client: I2C client for hardware monitor + * @ioexp_client: I2C client for power/port control + */ +struct falcon_board { + const struct falcon_board_type *type; + int major; + int minor; + struct i2c_adapter i2c_adap; + struct i2c_algo_bit_data i2c_data; + struct i2c_client *hwmon_client, *ioexp_client; +}; + +/** + * struct falcon_nic_data - Falcon NIC state + * @pci_dev2: Secondary function of Falcon A + * @board: Board state and functions + * @stats_disable_count: Nest count for disabling statistics fetches + * @stats_pending: Is there a pending DMA of MAC statistics. + * @stats_timer: A timer for regularly fetching MAC statistics. + * @stats_dma_done: Pointer to the flag which indicates DMA completion. + */ +struct falcon_nic_data { + struct pci_dev *pci_dev2; + struct falcon_board board; + unsigned int stats_disable_count; + bool stats_pending; + struct timer_list stats_timer; + u32 *stats_dma_done; +}; + +static inline struct falcon_board *falcon_board(struct efx_nic *efx) +{ + struct falcon_nic_data *data = efx->nic_data; + return &data->board; +} + +/** + * struct siena_nic_data - Siena NIC state + * @fw_version: Management controller firmware version + * @fw_build: Firmware build number + * @mcdi: Management-Controller-to-Driver Interface + * @wol_filter_id: Wake-on-LAN packet filter id + */ +struct siena_nic_data { + u64 fw_version; + u32 fw_build; + struct efx_mcdi_iface mcdi; + int wol_filter_id; +}; + +extern void siena_print_fwver(struct efx_nic *efx, char *buf, size_t len); + +extern struct efx_nic_type falcon_a1_nic_type; +extern struct efx_nic_type falcon_b0_nic_type; +extern struct efx_nic_type siena_a0_nic_type; + +/************************************************************************** + * + * Externs + * + ************************************************************************** + */ + +extern int falcon_probe_board(struct efx_nic *efx, u16 revision_info); + +/* TX data path */ +extern int efx_nic_probe_tx(struct efx_tx_queue *tx_queue); +extern void efx_nic_init_tx(struct efx_tx_queue *tx_queue); +extern void efx_nic_fini_tx(struct efx_tx_queue *tx_queue); +extern void efx_nic_remove_tx(struct efx_tx_queue *tx_queue); +extern void efx_nic_push_buffers(struct efx_tx_queue *tx_queue); + +/* RX data path */ +extern int efx_nic_probe_rx(struct efx_rx_queue *rx_queue); +extern void efx_nic_init_rx(struct efx_rx_queue *rx_queue); +extern void efx_nic_fini_rx(struct efx_rx_queue *rx_queue); +extern void efx_nic_remove_rx(struct efx_rx_queue *rx_queue); +extern void efx_nic_notify_rx_desc(struct efx_rx_queue *rx_queue); + +/* Event data path */ +extern int efx_nic_probe_eventq(struct efx_channel *channel); +extern void efx_nic_init_eventq(struct efx_channel *channel); +extern void efx_nic_fini_eventq(struct efx_channel *channel); +extern void efx_nic_remove_eventq(struct efx_channel *channel); +extern int efx_nic_process_eventq(struct efx_channel *channel, int rx_quota); +extern void efx_nic_eventq_read_ack(struct efx_channel *channel); + +/* MAC/PHY */ +extern void falcon_drain_tx_fifo(struct efx_nic *efx); +extern void falcon_reconfigure_mac_wrapper(struct efx_nic *efx); +extern int efx_nic_rx_xoff_thresh, efx_nic_rx_xon_thresh; + +/* Interrupts and test events */ +extern int efx_nic_init_interrupt(struct efx_nic *efx); +extern void efx_nic_enable_interrupts(struct efx_nic *efx); +extern void efx_nic_generate_test_event(struct efx_channel *channel, + unsigned int magic); +extern void efx_nic_generate_interrupt(struct efx_nic *efx); +extern void efx_nic_disable_interrupts(struct efx_nic *efx); +extern void efx_nic_fini_interrupt(struct efx_nic *efx); +extern irqreturn_t efx_nic_fatal_interrupt(struct efx_nic *efx); +extern irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id); +extern void falcon_irq_ack_a1(struct efx_nic *efx); + +#define EFX_IRQ_MOD_RESOLUTION 5 + +/* Global Resources */ +extern int efx_nic_flush_queues(struct efx_nic *efx); +extern void falcon_start_nic_stats(struct efx_nic *efx); +extern void falcon_stop_nic_stats(struct efx_nic *efx); +extern int falcon_reset_xaui(struct efx_nic *efx); +extern void efx_nic_init_common(struct efx_nic *efx); + +int efx_nic_alloc_buffer(struct efx_nic *efx, struct efx_buffer *buffer, + unsigned int len); +void efx_nic_free_buffer(struct efx_nic *efx, struct efx_buffer *buffer); + +/* Tests */ +struct efx_nic_register_test { + unsigned address; + efx_oword_t mask; +}; +extern int efx_nic_test_registers(struct efx_nic *efx, + const struct efx_nic_register_test *regs, + size_t n_regs); + +/************************************************************************** + * + * Falcon MAC stats + * + ************************************************************************** + */ + +#define FALCON_STAT_OFFSET(falcon_stat) EFX_VAL(falcon_stat, offset) +#define FALCON_STAT_WIDTH(falcon_stat) EFX_VAL(falcon_stat, WIDTH) + +/* Retrieve statistic from statistics block */ +#define FALCON_STAT(efx, falcon_stat, efx_stat) do { \ + if (FALCON_STAT_WIDTH(falcon_stat) == 16) \ + (efx)->mac_stats.efx_stat += le16_to_cpu( \ + *((__force __le16 *) \ + (efx->stats_buffer.addr + \ + FALCON_STAT_OFFSET(falcon_stat)))); \ + else if (FALCON_STAT_WIDTH(falcon_stat) == 32) \ + (efx)->mac_stats.efx_stat += le32_to_cpu( \ + *((__force __le32 *) \ + (efx->stats_buffer.addr + \ + FALCON_STAT_OFFSET(falcon_stat)))); \ + else \ + (efx)->mac_stats.efx_stat += le64_to_cpu( \ + *((__force __le64 *) \ + (efx->stats_buffer.addr + \ + FALCON_STAT_OFFSET(falcon_stat)))); \ + } while (0) + +#define FALCON_MAC_STATS_SIZE 0x100 + +#define MAC_DATA_LBN 0 +#define MAC_DATA_WIDTH 32 + +extern void efx_nic_generate_event(struct efx_channel *channel, + efx_qword_t *event); + +extern void falcon_poll_xmac(struct efx_nic *efx); + +#endif /* EFX_NIC_H */ --- linux-2.6.32.orig/drivers/net/sfc/falcon_boards.c +++ linux-2.6.32/drivers/net/sfc/falcon_boards.c @@ -0,0 +1,754 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2007-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#include + +#include "net_driver.h" +#include "phy.h" +#include "efx.h" +#include "nic.h" +#include "regs.h" +#include "io.h" +#include "workarounds.h" + +/* Macros for unpacking the board revision */ +/* The revision info is in host byte order. */ +#define FALCON_BOARD_TYPE(_rev) (_rev >> 8) +#define FALCON_BOARD_MAJOR(_rev) ((_rev >> 4) & 0xf) +#define FALCON_BOARD_MINOR(_rev) (_rev & 0xf) + +/* Board types */ +#define FALCON_BOARD_SFE4001 0x01 +#define FALCON_BOARD_SFE4002 0x02 +#define FALCON_BOARD_SFN4111T 0x51 +#define FALCON_BOARD_SFN4112F 0x52 + +/* Board temperature is about 15°C above ambient when air flow is + * limited. */ +#define FALCON_BOARD_TEMP_BIAS 15 + +/* SFC4000 datasheet says: 'The maximum permitted junction temperature + * is 125°C; the thermal design of the environment for the SFC4000 + * should aim to keep this well below 100°C.' */ +#define FALCON_JUNC_TEMP_MAX 90 + +/***************************************************************************** + * Support for LM87 sensor chip used on several boards + */ +#define LM87_REG_ALARMS1 0x41 +#define LM87_REG_ALARMS2 0x42 +#define LM87_IN_LIMITS(nr, _min, _max) \ + 0x2B + (nr) * 2, _max, 0x2C + (nr) * 2, _min +#define LM87_AIN_LIMITS(nr, _min, _max) \ + 0x3B + (nr), _max, 0x1A + (nr), _min +#define LM87_TEMP_INT_LIMITS(_min, _max) \ + 0x39, _max, 0x3A, _min +#define LM87_TEMP_EXT1_LIMITS(_min, _max) \ + 0x37, _max, 0x38, _min + +#define LM87_ALARM_TEMP_INT 0x10 +#define LM87_ALARM_TEMP_EXT1 0x20 + +#if defined(CONFIG_SENSORS_LM87) || defined(CONFIG_SENSORS_LM87_MODULE) + +static int efx_init_lm87(struct efx_nic *efx, struct i2c_board_info *info, + const u8 *reg_values) +{ + struct falcon_board *board = falcon_board(efx); + struct i2c_client *client = i2c_new_device(&board->i2c_adap, info); + int rc; + + if (!client) + return -EIO; + + while (*reg_values) { + u8 reg = *reg_values++; + u8 value = *reg_values++; + rc = i2c_smbus_write_byte_data(client, reg, value); + if (rc) + goto err; + } + + board->hwmon_client = client; + return 0; + +err: + i2c_unregister_device(client); + return rc; +} + +static void efx_fini_lm87(struct efx_nic *efx) +{ + i2c_unregister_device(falcon_board(efx)->hwmon_client); +} + +static int efx_check_lm87(struct efx_nic *efx, unsigned mask) +{ + struct i2c_client *client = falcon_board(efx)->hwmon_client; + s32 alarms1, alarms2; + + /* If link is up then do not monitor temperature */ + if (EFX_WORKAROUND_7884(efx) && efx->link_state.up) + return 0; + + alarms1 = i2c_smbus_read_byte_data(client, LM87_REG_ALARMS1); + alarms2 = i2c_smbus_read_byte_data(client, LM87_REG_ALARMS2); + if (alarms1 < 0) + return alarms1; + if (alarms2 < 0) + return alarms2; + alarms1 &= mask; + alarms2 &= mask >> 8; + if (alarms1 || alarms2) { + EFX_ERR(efx, + "LM87 detected a hardware failure (status %02x:%02x)" + "%s%s\n", + alarms1, alarms2, + (alarms1 & LM87_ALARM_TEMP_INT) ? " INTERNAL" : "", + (alarms1 & LM87_ALARM_TEMP_EXT1) ? " EXTERNAL" : ""); + return -ERANGE; + } + + return 0; +} + +#else /* !CONFIG_SENSORS_LM87 */ + +static inline int +efx_init_lm87(struct efx_nic *efx, struct i2c_board_info *info, + const u8 *reg_values) +{ + return 0; +} +static inline void efx_fini_lm87(struct efx_nic *efx) +{ +} +static inline int efx_check_lm87(struct efx_nic *efx, unsigned mask) +{ + return 0; +} + +#endif /* CONFIG_SENSORS_LM87 */ + +/***************************************************************************** + * Support for the SFE4001 and SFN4111T NICs. + * + * The SFE4001 does not power-up fully at reset due to its high power + * consumption. We control its power via a PCA9539 I/O expander. + * Both boards have a MAX6647 temperature monitor which we expose to + * the lm90 driver. + * + * This also provides minimal support for reflashing the PHY, which is + * initiated by resetting it with the FLASH_CFG_1 pin pulled down. + * On SFE4001 rev A2 and later this is connected to the 3V3X output of + * the IO-expander; on the SFN4111T it is connected to Falcon's GPIO3. + * We represent reflash mode as PHY_MODE_SPECIAL and make it mutually + * exclusive with the network device being open. + */ + +/************************************************************************** + * Support for I2C IO Expander device on SFE4001 + */ +#define PCA9539 0x74 + +#define P0_IN 0x00 +#define P0_OUT 0x02 +#define P0_INVERT 0x04 +#define P0_CONFIG 0x06 + +#define P0_EN_1V0X_LBN 0 +#define P0_EN_1V0X_WIDTH 1 +#define P0_EN_1V2_LBN 1 +#define P0_EN_1V2_WIDTH 1 +#define P0_EN_2V5_LBN 2 +#define P0_EN_2V5_WIDTH 1 +#define P0_EN_3V3X_LBN 3 +#define P0_EN_3V3X_WIDTH 1 +#define P0_EN_5V_LBN 4 +#define P0_EN_5V_WIDTH 1 +#define P0_SHORTEN_JTAG_LBN 5 +#define P0_SHORTEN_JTAG_WIDTH 1 +#define P0_X_TRST_LBN 6 +#define P0_X_TRST_WIDTH 1 +#define P0_DSP_RESET_LBN 7 +#define P0_DSP_RESET_WIDTH 1 + +#define P1_IN 0x01 +#define P1_OUT 0x03 +#define P1_INVERT 0x05 +#define P1_CONFIG 0x07 + +#define P1_AFE_PWD_LBN 0 +#define P1_AFE_PWD_WIDTH 1 +#define P1_DSP_PWD25_LBN 1 +#define P1_DSP_PWD25_WIDTH 1 +#define P1_RESERVED_LBN 2 +#define P1_RESERVED_WIDTH 2 +#define P1_SPARE_LBN 4 +#define P1_SPARE_WIDTH 4 + +/* Temperature Sensor */ +#define MAX664X_REG_RSL 0x02 +#define MAX664X_REG_WLHO 0x0B + +static void sfe4001_poweroff(struct efx_nic *efx) +{ + struct i2c_client *ioexp_client = falcon_board(efx)->ioexp_client; + struct i2c_client *hwmon_client = falcon_board(efx)->hwmon_client; + + /* Turn off all power rails and disable outputs */ + i2c_smbus_write_byte_data(ioexp_client, P0_OUT, 0xff); + i2c_smbus_write_byte_data(ioexp_client, P1_CONFIG, 0xff); + i2c_smbus_write_byte_data(ioexp_client, P0_CONFIG, 0xff); + + /* Clear any over-temperature alert */ + i2c_smbus_read_byte_data(hwmon_client, MAX664X_REG_RSL); +} + +static int sfe4001_poweron(struct efx_nic *efx) +{ + struct i2c_client *ioexp_client = falcon_board(efx)->ioexp_client; + struct i2c_client *hwmon_client = falcon_board(efx)->hwmon_client; + unsigned int i, j; + int rc; + u8 out; + + /* Clear any previous over-temperature alert */ + rc = i2c_smbus_read_byte_data(hwmon_client, MAX664X_REG_RSL); + if (rc < 0) + return rc; + + /* Enable port 0 and port 1 outputs on IO expander */ + rc = i2c_smbus_write_byte_data(ioexp_client, P0_CONFIG, 0x00); + if (rc) + return rc; + rc = i2c_smbus_write_byte_data(ioexp_client, P1_CONFIG, + 0xff & ~(1 << P1_SPARE_LBN)); + if (rc) + goto fail_on; + + /* If PHY power is on, turn it all off and wait 1 second to + * ensure a full reset. + */ + rc = i2c_smbus_read_byte_data(ioexp_client, P0_OUT); + if (rc < 0) + goto fail_on; + out = 0xff & ~((0 << P0_EN_1V2_LBN) | (0 << P0_EN_2V5_LBN) | + (0 << P0_EN_3V3X_LBN) | (0 << P0_EN_5V_LBN) | + (0 << P0_EN_1V0X_LBN)); + if (rc != out) { + EFX_INFO(efx, "power-cycling PHY\n"); + rc = i2c_smbus_write_byte_data(ioexp_client, P0_OUT, out); + if (rc) + goto fail_on; + schedule_timeout_uninterruptible(HZ); + } + + for (i = 0; i < 20; ++i) { + /* Turn on 1.2V, 2.5V, 3.3V and 5V power rails */ + out = 0xff & ~((1 << P0_EN_1V2_LBN) | (1 << P0_EN_2V5_LBN) | + (1 << P0_EN_3V3X_LBN) | (1 << P0_EN_5V_LBN) | + (1 << P0_X_TRST_LBN)); + if (efx->phy_mode & PHY_MODE_SPECIAL) + out |= 1 << P0_EN_3V3X_LBN; + + rc = i2c_smbus_write_byte_data(ioexp_client, P0_OUT, out); + if (rc) + goto fail_on; + msleep(10); + + /* Turn on 1V power rail */ + out &= ~(1 << P0_EN_1V0X_LBN); + rc = i2c_smbus_write_byte_data(ioexp_client, P0_OUT, out); + if (rc) + goto fail_on; + + EFX_INFO(efx, "waiting for DSP boot (attempt %d)...\n", i); + + /* In flash config mode, DSP does not turn on AFE, so + * just wait 1 second. + */ + if (efx->phy_mode & PHY_MODE_SPECIAL) { + schedule_timeout_uninterruptible(HZ); + return 0; + } + + for (j = 0; j < 10; ++j) { + msleep(100); + + /* Check DSP has asserted AFE power line */ + rc = i2c_smbus_read_byte_data(ioexp_client, P1_IN); + if (rc < 0) + goto fail_on; + if (rc & (1 << P1_AFE_PWD_LBN)) + return 0; + } + } + + EFX_INFO(efx, "timed out waiting for DSP boot\n"); + rc = -ETIMEDOUT; +fail_on: + sfe4001_poweroff(efx); + return rc; +} + +static int sfn4111t_reset(struct efx_nic *efx) +{ + struct falcon_board *board = falcon_board(efx); + efx_oword_t reg; + + /* GPIO 3 and the GPIO register are shared with I2C, so block that */ + i2c_lock_adapter(&board->i2c_adap); + + /* Pull RST_N (GPIO 2) low then let it up again, setting the + * FLASH_CFG_1 strap (GPIO 3) appropriately. Only change the + * output enables; the output levels should always be 0 (low) + * and we rely on external pull-ups. */ + efx_reado(efx, ®, FR_AB_GPIO_CTL); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GPIO2_OEN, true); + efx_writeo(efx, ®, FR_AB_GPIO_CTL); + msleep(1000); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GPIO2_OEN, false); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GPIO3_OEN, + !!(efx->phy_mode & PHY_MODE_SPECIAL)); + efx_writeo(efx, ®, FR_AB_GPIO_CTL); + msleep(1); + + i2c_unlock_adapter(&board->i2c_adap); + + ssleep(1); + return 0; +} + +static ssize_t show_phy_flash_cfg(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev)); + return sprintf(buf, "%d\n", !!(efx->phy_mode & PHY_MODE_SPECIAL)); +} + +static ssize_t set_phy_flash_cfg(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev)); + enum efx_phy_mode old_mode, new_mode; + int err; + + rtnl_lock(); + old_mode = efx->phy_mode; + if (count == 0 || *buf == '0') + new_mode = old_mode & ~PHY_MODE_SPECIAL; + else + new_mode = PHY_MODE_SPECIAL; + if (old_mode == new_mode) { + err = 0; + } else if (efx->state != STATE_RUNNING || netif_running(efx->net_dev)) { + err = -EBUSY; + } else { + /* Reset the PHY, reconfigure the MAC and enable/disable + * MAC stats accordingly. */ + efx->phy_mode = new_mode; + if (new_mode & PHY_MODE_SPECIAL) + falcon_stop_nic_stats(efx); + if (falcon_board(efx)->type->id == FALCON_BOARD_SFE4001) + err = sfe4001_poweron(efx); + else + err = sfn4111t_reset(efx); + if (!err) + err = efx_reconfigure_port(efx); + if (!(new_mode & PHY_MODE_SPECIAL)) + falcon_start_nic_stats(efx); + } + rtnl_unlock(); + + return err ? err : count; +} + +static DEVICE_ATTR(phy_flash_cfg, 0644, show_phy_flash_cfg, set_phy_flash_cfg); + +static void sfe4001_fini(struct efx_nic *efx) +{ + struct falcon_board *board = falcon_board(efx); + + EFX_INFO(efx, "%s\n", __func__); + + device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_flash_cfg); + sfe4001_poweroff(efx); + i2c_unregister_device(board->ioexp_client); + i2c_unregister_device(board->hwmon_client); +} + +static int sfe4001_check_hw(struct efx_nic *efx) +{ + s32 status; + + /* If XAUI link is up then do not monitor */ + if (EFX_WORKAROUND_7884(efx) && !efx->xmac_poll_required) + return 0; + + /* Check the powered status of the PHY. Lack of power implies that + * the MAX6647 has shut down power to it, probably due to a temp. + * alarm. Reading the power status rather than the MAX6647 status + * directly because the later is read-to-clear and would thus + * start to power up the PHY again when polled, causing us to blip + * the power undesirably. + * We know we can read from the IO expander because we did + * it during power-on. Assume failure now is bad news. */ + status = i2c_smbus_read_byte_data(falcon_board(efx)->ioexp_client, P1_IN); + if (status >= 0 && + (status & ((1 << P1_AFE_PWD_LBN) | (1 << P1_DSP_PWD25_LBN))) != 0) + return 0; + + /* Use board power control, not PHY power control */ + sfe4001_poweroff(efx); + efx->phy_mode = PHY_MODE_OFF; + + return (status < 0) ? -EIO : -ERANGE; +} + +static struct i2c_board_info sfe4001_hwmon_info = { + I2C_BOARD_INFO("max6647", 0x4e), +}; + +/* This board uses an I2C expander to provider power to the PHY, which needs to + * be turned on before the PHY can be used. + * Context: Process context, rtnl lock held + */ +static int sfe4001_init(struct efx_nic *efx) +{ + struct falcon_board *board = falcon_board(efx); + int rc; + +#if defined(CONFIG_SENSORS_LM90) || defined(CONFIG_SENSORS_LM90_MODULE) + board->hwmon_client = + i2c_new_device(&board->i2c_adap, &sfe4001_hwmon_info); +#else + board->hwmon_client = + i2c_new_dummy(&board->i2c_adap, sfe4001_hwmon_info.addr); +#endif + if (!board->hwmon_client) + return -EIO; + + /* Raise board/PHY high limit from 85 to 90 degrees Celsius */ + rc = i2c_smbus_write_byte_data(board->hwmon_client, + MAX664X_REG_WLHO, 90); + if (rc) + goto fail_hwmon; + + board->ioexp_client = i2c_new_dummy(&board->i2c_adap, PCA9539); + if (!board->ioexp_client) { + rc = -EIO; + goto fail_hwmon; + } + + if (efx->phy_mode & PHY_MODE_SPECIAL) { + /* PHY won't generate a 156.25 MHz clock and MAC stats fetch + * will fail. */ + falcon_stop_nic_stats(efx); + } + rc = sfe4001_poweron(efx); + if (rc) + goto fail_ioexp; + + rc = device_create_file(&efx->pci_dev->dev, &dev_attr_phy_flash_cfg); + if (rc) + goto fail_on; + + EFX_INFO(efx, "PHY is powered on\n"); + return 0; + +fail_on: + sfe4001_poweroff(efx); +fail_ioexp: + i2c_unregister_device(board->ioexp_client); +fail_hwmon: + i2c_unregister_device(board->hwmon_client); + return rc; +} + +static int sfn4111t_check_hw(struct efx_nic *efx) +{ + s32 status; + + /* If XAUI link is up then do not monitor */ + if (EFX_WORKAROUND_7884(efx) && !efx->xmac_poll_required) + return 0; + + /* Test LHIGH, RHIGH, FAULT, EOT and IOT alarms */ + status = i2c_smbus_read_byte_data(falcon_board(efx)->hwmon_client, + MAX664X_REG_RSL); + if (status < 0) + return -EIO; + if (status & 0x57) + return -ERANGE; + return 0; +} + +static void sfn4111t_fini(struct efx_nic *efx) +{ + EFX_INFO(efx, "%s\n", __func__); + + device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_flash_cfg); + i2c_unregister_device(falcon_board(efx)->hwmon_client); +} + +static struct i2c_board_info sfn4111t_a0_hwmon_info = { + I2C_BOARD_INFO("max6647", 0x4e), +}; + +static struct i2c_board_info sfn4111t_r5_hwmon_info = { + I2C_BOARD_INFO("max6646", 0x4d), +}; + +static void sfn4111t_init_phy(struct efx_nic *efx) +{ + if (!(efx->phy_mode & PHY_MODE_SPECIAL)) { + if (sft9001_wait_boot(efx) != -EINVAL) + return; + + efx->phy_mode = PHY_MODE_SPECIAL; + falcon_stop_nic_stats(efx); + } + + sfn4111t_reset(efx); + sft9001_wait_boot(efx); +} + +static int sfn4111t_init(struct efx_nic *efx) +{ + struct falcon_board *board = falcon_board(efx); + int rc; + + board->hwmon_client = + i2c_new_device(&board->i2c_adap, + (board->minor < 5) ? + &sfn4111t_a0_hwmon_info : + &sfn4111t_r5_hwmon_info); + if (!board->hwmon_client) + return -EIO; + + rc = device_create_file(&efx->pci_dev->dev, &dev_attr_phy_flash_cfg); + if (rc) + goto fail_hwmon; + + if (efx->phy_mode & PHY_MODE_SPECIAL) + /* PHY may not generate a 156.25 MHz clock and MAC + * stats fetch will fail. */ + falcon_stop_nic_stats(efx); + + return 0; + +fail_hwmon: + i2c_unregister_device(board->hwmon_client); + return rc; +} + +/***************************************************************************** + * Support for the SFE4002 + * + */ +static u8 sfe4002_lm87_channel = 0x03; /* use AIN not FAN inputs */ + +static const u8 sfe4002_lm87_regs[] = { + LM87_IN_LIMITS(0, 0x7c, 0x99), /* 2.5V: 1.8V +/- 10% */ + LM87_IN_LIMITS(1, 0x4c, 0x5e), /* Vccp1: 1.2V +/- 10% */ + LM87_IN_LIMITS(2, 0xac, 0xd4), /* 3.3V: 3.3V +/- 10% */ + LM87_IN_LIMITS(3, 0xac, 0xd4), /* 5V: 5.0V +/- 10% */ + LM87_IN_LIMITS(4, 0xac, 0xe0), /* 12V: 10.8-14V */ + LM87_IN_LIMITS(5, 0x3f, 0x4f), /* Vccp2: 1.0V +/- 10% */ + LM87_AIN_LIMITS(0, 0x98, 0xbb), /* AIN1: 1.66V +/- 10% */ + LM87_AIN_LIMITS(1, 0x8a, 0xa9), /* AIN2: 1.5V +/- 10% */ + LM87_TEMP_INT_LIMITS(0, 80 + FALCON_BOARD_TEMP_BIAS), + LM87_TEMP_EXT1_LIMITS(0, FALCON_JUNC_TEMP_MAX), + 0 +}; + +static struct i2c_board_info sfe4002_hwmon_info = { + I2C_BOARD_INFO("lm87", 0x2e), + .platform_data = &sfe4002_lm87_channel, +}; + +/****************************************************************************/ +/* LED allocations. Note that on rev A0 boards the schematic and the reality + * differ: red and green are swapped. Below is the fixed (A1) layout (there + * are only 3 A0 boards in existence, so no real reason to make this + * conditional). + */ +#define SFE4002_FAULT_LED (2) /* Red */ +#define SFE4002_RX_LED (0) /* Green */ +#define SFE4002_TX_LED (1) /* Amber */ + +static void sfe4002_init_phy(struct efx_nic *efx) +{ + /* Set the TX and RX LEDs to reflect status and activity, and the + * fault LED off */ + falcon_qt202x_set_led(efx, SFE4002_TX_LED, + QUAKE_LED_TXLINK | QUAKE_LED_LINK_ACTSTAT); + falcon_qt202x_set_led(efx, SFE4002_RX_LED, + QUAKE_LED_RXLINK | QUAKE_LED_LINK_ACTSTAT); + falcon_qt202x_set_led(efx, SFE4002_FAULT_LED, QUAKE_LED_OFF); +} + +static void sfe4002_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) +{ + falcon_qt202x_set_led( + efx, SFE4002_FAULT_LED, + (mode == EFX_LED_ON) ? QUAKE_LED_ON : QUAKE_LED_OFF); +} + +static int sfe4002_check_hw(struct efx_nic *efx) +{ + struct falcon_board *board = falcon_board(efx); + + /* A0 board rev. 4002s report a temperature fault the whole time + * (bad sensor) so we mask it out. */ + unsigned alarm_mask = + (board->major == 0 && board->minor == 0) ? + ~LM87_ALARM_TEMP_EXT1 : ~0; + + return efx_check_lm87(efx, alarm_mask); +} + +static int sfe4002_init(struct efx_nic *efx) +{ + return efx_init_lm87(efx, &sfe4002_hwmon_info, sfe4002_lm87_regs); +} + +/***************************************************************************** + * Support for the SFN4112F + * + */ +static u8 sfn4112f_lm87_channel = 0x03; /* use AIN not FAN inputs */ + +static const u8 sfn4112f_lm87_regs[] = { + LM87_IN_LIMITS(0, 0x7c, 0x99), /* 2.5V: 1.8V +/- 10% */ + LM87_IN_LIMITS(1, 0x4c, 0x5e), /* Vccp1: 1.2V +/- 10% */ + LM87_IN_LIMITS(2, 0xac, 0xd4), /* 3.3V: 3.3V +/- 10% */ + LM87_IN_LIMITS(4, 0xac, 0xe0), /* 12V: 10.8-14V */ + LM87_IN_LIMITS(5, 0x3f, 0x4f), /* Vccp2: 1.0V +/- 10% */ + LM87_AIN_LIMITS(1, 0x8a, 0xa9), /* AIN2: 1.5V +/- 10% */ + LM87_TEMP_INT_LIMITS(0, 60 + FALCON_BOARD_TEMP_BIAS), + LM87_TEMP_EXT1_LIMITS(0, FALCON_JUNC_TEMP_MAX), + 0 +}; + +static struct i2c_board_info sfn4112f_hwmon_info = { + I2C_BOARD_INFO("lm87", 0x2e), + .platform_data = &sfn4112f_lm87_channel, +}; + +#define SFN4112F_ACT_LED 0 +#define SFN4112F_LINK_LED 1 + +static void sfn4112f_init_phy(struct efx_nic *efx) +{ + falcon_qt202x_set_led(efx, SFN4112F_ACT_LED, + QUAKE_LED_RXLINK | QUAKE_LED_LINK_ACT); + falcon_qt202x_set_led(efx, SFN4112F_LINK_LED, + QUAKE_LED_RXLINK | QUAKE_LED_LINK_STAT); +} + +static void sfn4112f_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) +{ + int reg; + + switch (mode) { + case EFX_LED_OFF: + reg = QUAKE_LED_OFF; + break; + case EFX_LED_ON: + reg = QUAKE_LED_ON; + break; + default: + reg = QUAKE_LED_RXLINK | QUAKE_LED_LINK_STAT; + break; + } + + falcon_qt202x_set_led(efx, SFN4112F_LINK_LED, reg); +} + +static int sfn4112f_check_hw(struct efx_nic *efx) +{ + /* Mask out unused sensors */ + return efx_check_lm87(efx, ~0x48); +} + +static int sfn4112f_init(struct efx_nic *efx) +{ + return efx_init_lm87(efx, &sfn4112f_hwmon_info, sfn4112f_lm87_regs); +} + +static const struct falcon_board_type board_types[] = { + { + .id = FALCON_BOARD_SFE4001, + .ref_model = "SFE4001", + .gen_type = "10GBASE-T adapter", + .init = sfe4001_init, + .init_phy = efx_port_dummy_op_void, + .fini = sfe4001_fini, + .set_id_led = tenxpress_set_id_led, + .monitor = sfe4001_check_hw, + }, + { + .id = FALCON_BOARD_SFE4002, + .ref_model = "SFE4002", + .gen_type = "XFP adapter", + .init = sfe4002_init, + .init_phy = sfe4002_init_phy, + .fini = efx_fini_lm87, + .set_id_led = sfe4002_set_id_led, + .monitor = sfe4002_check_hw, + }, + { + .id = FALCON_BOARD_SFN4111T, + .ref_model = "SFN4111T", + .gen_type = "100/1000/10GBASE-T adapter", + .init = sfn4111t_init, + .init_phy = sfn4111t_init_phy, + .fini = sfn4111t_fini, + .set_id_led = tenxpress_set_id_led, + .monitor = sfn4111t_check_hw, + }, + { + .id = FALCON_BOARD_SFN4112F, + .ref_model = "SFN4112F", + .gen_type = "SFP+ adapter", + .init = sfn4112f_init, + .init_phy = sfn4112f_init_phy, + .fini = efx_fini_lm87, + .set_id_led = sfn4112f_set_id_led, + .monitor = sfn4112f_check_hw, + }, +}; + +int falcon_probe_board(struct efx_nic *efx, u16 revision_info) +{ + struct falcon_board *board = falcon_board(efx); + u8 type_id = FALCON_BOARD_TYPE(revision_info); + int i; + + board->major = FALCON_BOARD_MAJOR(revision_info); + board->minor = FALCON_BOARD_MINOR(revision_info); + + for (i = 0; i < ARRAY_SIZE(board_types); i++) + if (board_types[i].id == type_id) + board->type = &board_types[i]; + + if (board->type) { + EFX_INFO(efx, "board is %s rev %c%d\n", + (efx->pci_dev->subsystem_vendor == EFX_VENDID_SFC) + ? board->type->ref_model : board->type->gen_type, + 'A' + board->major, board->minor); + return 0; + } else { + EFX_ERR(efx, "unknown board type %d\n", type_id); + return -ENODEV; + } +} --- linux-2.6.32.orig/drivers/net/sfc/falcon.c +++ linux-2.6.32/drivers/net/sfc/falcon.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -14,1344 +14,124 @@ #include #include #include -#include #include #include "net_driver.h" #include "bitfield.h" #include "efx.h" #include "mac.h" #include "spi.h" -#include "falcon.h" -#include "falcon_hwdefs.h" -#include "falcon_io.h" +#include "nic.h" +#include "regs.h" +#include "io.h" #include "mdio_10g.h" #include "phy.h" -#include "boards.h" #include "workarounds.h" -/* Falcon hardware control. - * Falcon is the internal codename for the SFC4000 controller that is - * present in SFE400X evaluation boards - */ - -/** - * struct falcon_nic_data - Falcon NIC state - * @next_buffer_table: First available buffer table id - * @pci_dev2: The secondary PCI device if present - * @i2c_data: Operations and state for I2C bit-bashing algorithm - * @int_error_count: Number of internal errors seen recently - * @int_error_expire: Time at which error count will be expired - */ -struct falcon_nic_data { - unsigned next_buffer_table; - struct pci_dev *pci_dev2; - struct i2c_algo_bit_data i2c_data; - - unsigned int_error_count; - unsigned long int_error_expire; -}; - -/************************************************************************** - * - * Configurable values - * - ************************************************************************** - */ - -static int disable_dma_stats; - -/* This is set to 16 for a good reason. In summary, if larger than - * 16, the descriptor cache holds more than a default socket - * buffer's worth of packets (for UDP we can only have at most one - * socket buffer's worth outstanding). This combined with the fact - * that we only get 1 TX event per descriptor cache means the NIC - * goes idle. - */ -#define TX_DC_ENTRIES 16 -#define TX_DC_ENTRIES_ORDER 0 -#define TX_DC_BASE 0x130000 - -#define RX_DC_ENTRIES 64 -#define RX_DC_ENTRIES_ORDER 2 -#define RX_DC_BASE 0x100000 - -static const unsigned int -/* "Large" EEPROM device: Atmel AT25640 or similar - * 8 KB, 16-bit address, 32 B write block */ -large_eeprom_type = ((13 << SPI_DEV_TYPE_SIZE_LBN) - | (2 << SPI_DEV_TYPE_ADDR_LEN_LBN) - | (5 << SPI_DEV_TYPE_BLOCK_SIZE_LBN)), -/* Default flash device: Atmel AT25F1024 - * 128 KB, 24-bit address, 32 KB erase block, 256 B write block */ -default_flash_type = ((17 << SPI_DEV_TYPE_SIZE_LBN) - | (3 << SPI_DEV_TYPE_ADDR_LEN_LBN) - | (0x52 << SPI_DEV_TYPE_ERASE_CMD_LBN) - | (15 << SPI_DEV_TYPE_ERASE_SIZE_LBN) - | (8 << SPI_DEV_TYPE_BLOCK_SIZE_LBN)); - -/* RX FIFO XOFF watermark - * - * When the amount of the RX FIFO increases used increases past this - * watermark send XOFF. Only used if RX flow control is enabled (ethtool -A) - * This also has an effect on RX/TX arbitration - */ -static int rx_xoff_thresh_bytes = -1; -module_param(rx_xoff_thresh_bytes, int, 0644); -MODULE_PARM_DESC(rx_xoff_thresh_bytes, "RX fifo XOFF threshold"); - -/* RX FIFO XON watermark - * - * When the amount of the RX FIFO used decreases below this - * watermark send XON. Only used if TX flow control is enabled (ethtool -A) - * This also has an effect on RX/TX arbitration - */ -static int rx_xon_thresh_bytes = -1; -module_param(rx_xon_thresh_bytes, int, 0644); -MODULE_PARM_DESC(rx_xon_thresh_bytes, "RX fifo XON threshold"); - -/* TX descriptor ring size - min 512 max 4k */ -#define FALCON_TXD_RING_ORDER TX_DESCQ_SIZE_1K -#define FALCON_TXD_RING_SIZE 1024 -#define FALCON_TXD_RING_MASK (FALCON_TXD_RING_SIZE - 1) - -/* RX descriptor ring size - min 512 max 4k */ -#define FALCON_RXD_RING_ORDER RX_DESCQ_SIZE_1K -#define FALCON_RXD_RING_SIZE 1024 -#define FALCON_RXD_RING_MASK (FALCON_RXD_RING_SIZE - 1) - -/* Event queue size - max 32k */ -#define FALCON_EVQ_ORDER EVQ_SIZE_4K -#define FALCON_EVQ_SIZE 4096 -#define FALCON_EVQ_MASK (FALCON_EVQ_SIZE - 1) - -/* If FALCON_MAX_INT_ERRORS internal errors occur within - * FALCON_INT_ERROR_EXPIRE seconds, we consider the NIC broken and - * disable it. - */ -#define FALCON_INT_ERROR_EXPIRE 3600 -#define FALCON_MAX_INT_ERRORS 5 - -/* We poll for events every FLUSH_INTERVAL ms, and check FLUSH_POLL_COUNT times - */ -#define FALCON_FLUSH_INTERVAL 10 -#define FALCON_FLUSH_POLL_COUNT 100 - -/************************************************************************** - * - * Falcon constants - * - ************************************************************************** - */ - -/* DMA address mask */ -#define FALCON_DMA_MASK DMA_BIT_MASK(46) - -/* TX DMA length mask (13-bit) */ -#define FALCON_TX_DMA_MASK (4096 - 1) - -/* Size and alignment of special buffers (4KB) */ -#define FALCON_BUF_SIZE 4096 - -/* Dummy SRAM size code */ -#define SRM_NB_BSZ_ONCHIP_ONLY (-1) - -#define FALCON_IS_DUAL_FUNC(efx) \ - (falcon_rev(efx) < FALCON_REV_B0) - -/************************************************************************** - * - * Falcon hardware access - * - **************************************************************************/ - -/* Read the current event from the event queue */ -static inline efx_qword_t *falcon_event(struct efx_channel *channel, - unsigned int index) -{ - return (((efx_qword_t *) (channel->eventq.addr)) + index); -} - -/* See if an event is present - * - * We check both the high and low dword of the event for all ones. We - * wrote all ones when we cleared the event, and no valid event can - * have all ones in either its high or low dwords. This approach is - * robust against reordering. - * - * Note that using a single 64-bit comparison is incorrect; even - * though the CPU read will be atomic, the DMA write may not be. - */ -static inline int falcon_event_present(efx_qword_t *event) -{ - return (!(EFX_DWORD_IS_ALL_ONES(event->dword[0]) | - EFX_DWORD_IS_ALL_ONES(event->dword[1]))); -} - -/************************************************************************** - * - * I2C bus - this is a bit-bashing interface using GPIO pins - * Note that it uses the output enables to tristate the outputs - * SDA is the data pin and SCL is the clock - * - ************************************************************************** - */ -static void falcon_setsda(void *data, int state) -{ - struct efx_nic *efx = (struct efx_nic *)data; - efx_oword_t reg; - - falcon_read(efx, ®, GPIO_CTL_REG_KER); - EFX_SET_OWORD_FIELD(reg, GPIO3_OEN, !state); - falcon_write(efx, ®, GPIO_CTL_REG_KER); -} - -static void falcon_setscl(void *data, int state) -{ - struct efx_nic *efx = (struct efx_nic *)data; - efx_oword_t reg; - - falcon_read(efx, ®, GPIO_CTL_REG_KER); - EFX_SET_OWORD_FIELD(reg, GPIO0_OEN, !state); - falcon_write(efx, ®, GPIO_CTL_REG_KER); -} - -static int falcon_getsda(void *data) -{ - struct efx_nic *efx = (struct efx_nic *)data; - efx_oword_t reg; - - falcon_read(efx, ®, GPIO_CTL_REG_KER); - return EFX_OWORD_FIELD(reg, GPIO3_IN); -} - -static int falcon_getscl(void *data) -{ - struct efx_nic *efx = (struct efx_nic *)data; - efx_oword_t reg; - - falcon_read(efx, ®, GPIO_CTL_REG_KER); - return EFX_OWORD_FIELD(reg, GPIO0_IN); -} - -static struct i2c_algo_bit_data falcon_i2c_bit_operations = { - .setsda = falcon_setsda, - .setscl = falcon_setscl, - .getsda = falcon_getsda, - .getscl = falcon_getscl, - .udelay = 5, - /* Wait up to 50 ms for slave to let us pull SCL high */ - .timeout = DIV_ROUND_UP(HZ, 20), -}; - -/************************************************************************** - * - * Falcon special buffer handling - * Special buffers are used for event queues and the TX and RX - * descriptor rings. - * - *************************************************************************/ - -/* - * Initialise a Falcon special buffer - * - * This will define a buffer (previously allocated via - * falcon_alloc_special_buffer()) in Falcon's buffer table, allowing - * it to be used for event queues, descriptor rings etc. - */ -static void -falcon_init_special_buffer(struct efx_nic *efx, - struct efx_special_buffer *buffer) -{ - efx_qword_t buf_desc; - int index; - dma_addr_t dma_addr; - int i; - - EFX_BUG_ON_PARANOID(!buffer->addr); - - /* Write buffer descriptors to NIC */ - for (i = 0; i < buffer->entries; i++) { - index = buffer->index + i; - dma_addr = buffer->dma_addr + (i * 4096); - EFX_LOG(efx, "mapping special buffer %d at %llx\n", - index, (unsigned long long)dma_addr); - EFX_POPULATE_QWORD_4(buf_desc, - IP_DAT_BUF_SIZE, IP_DAT_BUF_SIZE_4K, - BUF_ADR_REGION, 0, - BUF_ADR_FBUF, (dma_addr >> 12), - BUF_OWNER_ID_FBUF, 0); - falcon_write_sram(efx, &buf_desc, index); - } -} - -/* Unmaps a buffer from Falcon and clears the buffer table entries */ -static void -falcon_fini_special_buffer(struct efx_nic *efx, - struct efx_special_buffer *buffer) -{ - efx_oword_t buf_tbl_upd; - unsigned int start = buffer->index; - unsigned int end = (buffer->index + buffer->entries - 1); - - if (!buffer->entries) - return; - - EFX_LOG(efx, "unmapping special buffers %d-%d\n", - buffer->index, buffer->index + buffer->entries - 1); - - EFX_POPULATE_OWORD_4(buf_tbl_upd, - BUF_UPD_CMD, 0, - BUF_CLR_CMD, 1, - BUF_CLR_END_ID, end, - BUF_CLR_START_ID, start); - falcon_write(efx, &buf_tbl_upd, BUF_TBL_UPD_REG_KER); -} - -/* - * Allocate a new Falcon special buffer - * - * This allocates memory for a new buffer, clears it and allocates a - * new buffer ID range. It does not write into Falcon's buffer table. - * - * This call will allocate 4KB buffers, since Falcon can't use 8KB - * buffers for event queues and descriptor rings. - */ -static int falcon_alloc_special_buffer(struct efx_nic *efx, - struct efx_special_buffer *buffer, - unsigned int len) -{ - struct falcon_nic_data *nic_data = efx->nic_data; - - len = ALIGN(len, FALCON_BUF_SIZE); - - buffer->addr = pci_alloc_consistent(efx->pci_dev, len, - &buffer->dma_addr); - if (!buffer->addr) - return -ENOMEM; - buffer->len = len; - buffer->entries = len / FALCON_BUF_SIZE; - BUG_ON(buffer->dma_addr & (FALCON_BUF_SIZE - 1)); - - /* All zeros is a potentially valid event so memset to 0xff */ - memset(buffer->addr, 0xff, len); - - /* Select new buffer ID */ - buffer->index = nic_data->next_buffer_table; - nic_data->next_buffer_table += buffer->entries; - - EFX_LOG(efx, "allocating special buffers %d-%d at %llx+%x " - "(virt %p phys %llx)\n", buffer->index, - buffer->index + buffer->entries - 1, - (u64)buffer->dma_addr, len, - buffer->addr, (u64)virt_to_phys(buffer->addr)); - - return 0; -} - -static void falcon_free_special_buffer(struct efx_nic *efx, - struct efx_special_buffer *buffer) -{ - if (!buffer->addr) - return; - - EFX_LOG(efx, "deallocating special buffers %d-%d at %llx+%x " - "(virt %p phys %llx)\n", buffer->index, - buffer->index + buffer->entries - 1, - (u64)buffer->dma_addr, buffer->len, - buffer->addr, (u64)virt_to_phys(buffer->addr)); - - pci_free_consistent(efx->pci_dev, buffer->len, buffer->addr, - buffer->dma_addr); - buffer->addr = NULL; - buffer->entries = 0; -} - -/************************************************************************** - * - * Falcon generic buffer handling - * These buffers are used for interrupt status and MAC stats - * - **************************************************************************/ - -static int falcon_alloc_buffer(struct efx_nic *efx, - struct efx_buffer *buffer, unsigned int len) -{ - buffer->addr = pci_alloc_consistent(efx->pci_dev, len, - &buffer->dma_addr); - if (!buffer->addr) - return -ENOMEM; - buffer->len = len; - memset(buffer->addr, 0, len); - return 0; -} - -static void falcon_free_buffer(struct efx_nic *efx, struct efx_buffer *buffer) -{ - if (buffer->addr) { - pci_free_consistent(efx->pci_dev, buffer->len, - buffer->addr, buffer->dma_addr); - buffer->addr = NULL; - } -} - -/************************************************************************** - * - * Falcon TX path - * - **************************************************************************/ - -/* Returns a pointer to the specified transmit descriptor in the TX - * descriptor queue belonging to the specified channel. - */ -static inline efx_qword_t *falcon_tx_desc(struct efx_tx_queue *tx_queue, - unsigned int index) -{ - return (((efx_qword_t *) (tx_queue->txd.addr)) + index); -} - -/* This writes to the TX_DESC_WPTR; write pointer for TX descriptor ring */ -static inline void falcon_notify_tx_desc(struct efx_tx_queue *tx_queue) -{ - unsigned write_ptr; - efx_dword_t reg; - - write_ptr = tx_queue->write_count & FALCON_TXD_RING_MASK; - EFX_POPULATE_DWORD_1(reg, TX_DESC_WPTR_DWORD, write_ptr); - falcon_writel_page(tx_queue->efx, ®, - TX_DESC_UPD_REG_KER_DWORD, tx_queue->queue); -} - - -/* For each entry inserted into the software descriptor ring, create a - * descriptor in the hardware TX descriptor ring (in host memory), and - * write a doorbell. - */ -void falcon_push_buffers(struct efx_tx_queue *tx_queue) -{ - - struct efx_tx_buffer *buffer; - efx_qword_t *txd; - unsigned write_ptr; - - BUG_ON(tx_queue->write_count == tx_queue->insert_count); - - do { - write_ptr = tx_queue->write_count & FALCON_TXD_RING_MASK; - buffer = &tx_queue->buffer[write_ptr]; - txd = falcon_tx_desc(tx_queue, write_ptr); - ++tx_queue->write_count; - - /* Create TX descriptor ring entry */ - EFX_POPULATE_QWORD_5(*txd, - TX_KER_PORT, 0, - TX_KER_CONT, buffer->continuation, - TX_KER_BYTE_CNT, buffer->len, - TX_KER_BUF_REGION, 0, - TX_KER_BUF_ADR, buffer->dma_addr); - } while (tx_queue->write_count != tx_queue->insert_count); - - wmb(); /* Ensure descriptors are written before they are fetched */ - falcon_notify_tx_desc(tx_queue); -} - -/* Allocate hardware resources for a TX queue */ -int falcon_probe_tx(struct efx_tx_queue *tx_queue) -{ - struct efx_nic *efx = tx_queue->efx; - return falcon_alloc_special_buffer(efx, &tx_queue->txd, - FALCON_TXD_RING_SIZE * - sizeof(efx_qword_t)); -} - -void falcon_init_tx(struct efx_tx_queue *tx_queue) -{ - efx_oword_t tx_desc_ptr; - struct efx_nic *efx = tx_queue->efx; - - tx_queue->flushed = false; - - /* Pin TX descriptor ring */ - falcon_init_special_buffer(efx, &tx_queue->txd); - - /* Push TX descriptor ring to card */ - EFX_POPULATE_OWORD_10(tx_desc_ptr, - TX_DESCQ_EN, 1, - TX_ISCSI_DDIG_EN, 0, - TX_ISCSI_HDIG_EN, 0, - TX_DESCQ_BUF_BASE_ID, tx_queue->txd.index, - TX_DESCQ_EVQ_ID, tx_queue->channel->channel, - TX_DESCQ_OWNER_ID, 0, - TX_DESCQ_LABEL, tx_queue->queue, - TX_DESCQ_SIZE, FALCON_TXD_RING_ORDER, - TX_DESCQ_TYPE, 0, - TX_NON_IP_DROP_DIS_B0, 1); - - if (falcon_rev(efx) >= FALCON_REV_B0) { - int csum = tx_queue->queue == EFX_TX_QUEUE_OFFLOAD_CSUM; - EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_IP_CHKSM_DIS_B0, !csum); - EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_TCP_CHKSM_DIS_B0, !csum); - } - - falcon_write_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, - tx_queue->queue); - - if (falcon_rev(efx) < FALCON_REV_B0) { - efx_oword_t reg; - - /* Only 128 bits in this register */ - BUILD_BUG_ON(EFX_TX_QUEUE_COUNT >= 128); - - falcon_read(efx, ®, TX_CHKSM_CFG_REG_KER_A1); - if (tx_queue->queue == EFX_TX_QUEUE_OFFLOAD_CSUM) - clear_bit_le(tx_queue->queue, (void *)®); - else - set_bit_le(tx_queue->queue, (void *)®); - falcon_write(efx, ®, TX_CHKSM_CFG_REG_KER_A1); - } -} - -static void falcon_flush_tx_queue(struct efx_tx_queue *tx_queue) -{ - struct efx_nic *efx = tx_queue->efx; - efx_oword_t tx_flush_descq; - - /* Post a flush command */ - EFX_POPULATE_OWORD_2(tx_flush_descq, - TX_FLUSH_DESCQ_CMD, 1, - TX_FLUSH_DESCQ, tx_queue->queue); - falcon_write(efx, &tx_flush_descq, TX_FLUSH_DESCQ_REG_KER); -} - -void falcon_fini_tx(struct efx_tx_queue *tx_queue) -{ - struct efx_nic *efx = tx_queue->efx; - efx_oword_t tx_desc_ptr; - - /* The queue should have been flushed */ - WARN_ON(!tx_queue->flushed); - - /* Remove TX descriptor ring from card */ - EFX_ZERO_OWORD(tx_desc_ptr); - falcon_write_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, - tx_queue->queue); - - /* Unpin TX descriptor ring */ - falcon_fini_special_buffer(efx, &tx_queue->txd); -} - -/* Free buffers backing TX queue */ -void falcon_remove_tx(struct efx_tx_queue *tx_queue) -{ - falcon_free_special_buffer(tx_queue->efx, &tx_queue->txd); -} - -/************************************************************************** - * - * Falcon RX path - * - **************************************************************************/ - -/* Returns a pointer to the specified descriptor in the RX descriptor queue */ -static inline efx_qword_t *falcon_rx_desc(struct efx_rx_queue *rx_queue, - unsigned int index) -{ - return (((efx_qword_t *) (rx_queue->rxd.addr)) + index); -} - -/* This creates an entry in the RX descriptor queue */ -static inline void falcon_build_rx_desc(struct efx_rx_queue *rx_queue, - unsigned index) -{ - struct efx_rx_buffer *rx_buf; - efx_qword_t *rxd; - - rxd = falcon_rx_desc(rx_queue, index); - rx_buf = efx_rx_buffer(rx_queue, index); - EFX_POPULATE_QWORD_3(*rxd, - RX_KER_BUF_SIZE, - rx_buf->len - - rx_queue->efx->type->rx_buffer_padding, - RX_KER_BUF_REGION, 0, - RX_KER_BUF_ADR, rx_buf->dma_addr); -} - -/* This writes to the RX_DESC_WPTR register for the specified receive - * descriptor ring. - */ -void falcon_notify_rx_desc(struct efx_rx_queue *rx_queue) -{ - efx_dword_t reg; - unsigned write_ptr; - - while (rx_queue->notified_count != rx_queue->added_count) { - falcon_build_rx_desc(rx_queue, - rx_queue->notified_count & - FALCON_RXD_RING_MASK); - ++rx_queue->notified_count; - } - - wmb(); - write_ptr = rx_queue->added_count & FALCON_RXD_RING_MASK; - EFX_POPULATE_DWORD_1(reg, RX_DESC_WPTR_DWORD, write_ptr); - falcon_writel_page(rx_queue->efx, ®, - RX_DESC_UPD_REG_KER_DWORD, rx_queue->queue); -} - -int falcon_probe_rx(struct efx_rx_queue *rx_queue) -{ - struct efx_nic *efx = rx_queue->efx; - return falcon_alloc_special_buffer(efx, &rx_queue->rxd, - FALCON_RXD_RING_SIZE * - sizeof(efx_qword_t)); -} - -void falcon_init_rx(struct efx_rx_queue *rx_queue) -{ - efx_oword_t rx_desc_ptr; - struct efx_nic *efx = rx_queue->efx; - bool is_b0 = falcon_rev(efx) >= FALCON_REV_B0; - bool iscsi_digest_en = is_b0; - - EFX_LOG(efx, "RX queue %d ring in special buffers %d-%d\n", - rx_queue->queue, rx_queue->rxd.index, - rx_queue->rxd.index + rx_queue->rxd.entries - 1); - - rx_queue->flushed = false; - - /* Pin RX descriptor ring */ - falcon_init_special_buffer(efx, &rx_queue->rxd); - - /* Push RX descriptor ring to card */ - EFX_POPULATE_OWORD_10(rx_desc_ptr, - RX_ISCSI_DDIG_EN, iscsi_digest_en, - RX_ISCSI_HDIG_EN, iscsi_digest_en, - RX_DESCQ_BUF_BASE_ID, rx_queue->rxd.index, - RX_DESCQ_EVQ_ID, rx_queue->channel->channel, - RX_DESCQ_OWNER_ID, 0, - RX_DESCQ_LABEL, rx_queue->queue, - RX_DESCQ_SIZE, FALCON_RXD_RING_ORDER, - RX_DESCQ_TYPE, 0 /* kernel queue */ , - /* For >=B0 this is scatter so disable */ - RX_DESCQ_JUMBO, !is_b0, - RX_DESCQ_EN, 1); - falcon_write_table(efx, &rx_desc_ptr, efx->type->rxd_ptr_tbl_base, - rx_queue->queue); -} - -static void falcon_flush_rx_queue(struct efx_rx_queue *rx_queue) -{ - struct efx_nic *efx = rx_queue->efx; - efx_oword_t rx_flush_descq; - - /* Post a flush command */ - EFX_POPULATE_OWORD_2(rx_flush_descq, - RX_FLUSH_DESCQ_CMD, 1, - RX_FLUSH_DESCQ, rx_queue->queue); - falcon_write(efx, &rx_flush_descq, RX_FLUSH_DESCQ_REG_KER); -} - -void falcon_fini_rx(struct efx_rx_queue *rx_queue) -{ - efx_oword_t rx_desc_ptr; - struct efx_nic *efx = rx_queue->efx; - - /* The queue should already have been flushed */ - WARN_ON(!rx_queue->flushed); - - /* Remove RX descriptor ring from card */ - EFX_ZERO_OWORD(rx_desc_ptr); - falcon_write_table(efx, &rx_desc_ptr, efx->type->rxd_ptr_tbl_base, - rx_queue->queue); - - /* Unpin RX descriptor ring */ - falcon_fini_special_buffer(efx, &rx_queue->rxd); -} - -/* Free buffers backing RX queue */ -void falcon_remove_rx(struct efx_rx_queue *rx_queue) -{ - falcon_free_special_buffer(rx_queue->efx, &rx_queue->rxd); -} - -/************************************************************************** - * - * Falcon event queue processing - * Event queues are processed by per-channel tasklets. - * - **************************************************************************/ - -/* Update a channel's event queue's read pointer (RPTR) register - * - * This writes the EVQ_RPTR_REG register for the specified channel's - * event queue. - * - * Note that EVQ_RPTR_REG contains the index of the "last read" event, - * whereas channel->eventq_read_ptr contains the index of the "next to - * read" event. - */ -void falcon_eventq_read_ack(struct efx_channel *channel) -{ - efx_dword_t reg; - struct efx_nic *efx = channel->efx; - - EFX_POPULATE_DWORD_1(reg, EVQ_RPTR_DWORD, channel->eventq_read_ptr); - falcon_writel_table(efx, ®, efx->type->evq_rptr_tbl_base, - channel->channel); -} - -/* Use HW to insert a SW defined event */ -void falcon_generate_event(struct efx_channel *channel, efx_qword_t *event) -{ - efx_oword_t drv_ev_reg; - - EFX_POPULATE_OWORD_2(drv_ev_reg, - DRV_EV_QID, channel->channel, - DRV_EV_DATA, - EFX_QWORD_FIELD64(*event, WHOLE_EVENT)); - falcon_write(channel->efx, &drv_ev_reg, DRV_EV_REG_KER); -} - -/* Handle a transmit completion event - * - * Falcon batches TX completion events; the message we receive is of - * the form "complete all TX events up to this index". - */ -static void falcon_handle_tx_event(struct efx_channel *channel, - efx_qword_t *event) -{ - unsigned int tx_ev_desc_ptr; - unsigned int tx_ev_q_label; - struct efx_tx_queue *tx_queue; - struct efx_nic *efx = channel->efx; - - if (likely(EFX_QWORD_FIELD(*event, TX_EV_COMP))) { - /* Transmit completion */ - tx_ev_desc_ptr = EFX_QWORD_FIELD(*event, TX_EV_DESC_PTR); - tx_ev_q_label = EFX_QWORD_FIELD(*event, TX_EV_Q_LABEL); - tx_queue = &efx->tx_queue[tx_ev_q_label]; - channel->irq_mod_score += - (tx_ev_desc_ptr - tx_queue->read_count) & - efx->type->txd_ring_mask; - efx_xmit_done(tx_queue, tx_ev_desc_ptr); - } else if (EFX_QWORD_FIELD(*event, TX_EV_WQ_FF_FULL)) { - /* Rewrite the FIFO write pointer */ - tx_ev_q_label = EFX_QWORD_FIELD(*event, TX_EV_Q_LABEL); - tx_queue = &efx->tx_queue[tx_ev_q_label]; - - if (efx_dev_registered(efx)) - netif_tx_lock(efx->net_dev); - falcon_notify_tx_desc(tx_queue); - if (efx_dev_registered(efx)) - netif_tx_unlock(efx->net_dev); - } else if (EFX_QWORD_FIELD(*event, TX_EV_PKT_ERR) && - EFX_WORKAROUND_10727(efx)) { - efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH); - } else { - EFX_ERR(efx, "channel %d unexpected TX event " - EFX_QWORD_FMT"\n", channel->channel, - EFX_QWORD_VAL(*event)); - } -} - -/* Detect errors included in the rx_evt_pkt_ok bit. */ -static void falcon_handle_rx_not_ok(struct efx_rx_queue *rx_queue, - const efx_qword_t *event, - bool *rx_ev_pkt_ok, - bool *discard) -{ - struct efx_nic *efx = rx_queue->efx; - bool rx_ev_buf_owner_id_err, rx_ev_ip_hdr_chksum_err; - bool rx_ev_tcp_udp_chksum_err, rx_ev_eth_crc_err; - bool rx_ev_frm_trunc, rx_ev_drib_nib, rx_ev_tobe_disc; - bool rx_ev_other_err, rx_ev_pause_frm; - bool rx_ev_ip_frag_err, rx_ev_hdr_type, rx_ev_mcast_pkt; - unsigned rx_ev_pkt_type; - - rx_ev_hdr_type = EFX_QWORD_FIELD(*event, RX_EV_HDR_TYPE); - rx_ev_mcast_pkt = EFX_QWORD_FIELD(*event, RX_EV_MCAST_PKT); - rx_ev_tobe_disc = EFX_QWORD_FIELD(*event, RX_EV_TOBE_DISC); - rx_ev_pkt_type = EFX_QWORD_FIELD(*event, RX_EV_PKT_TYPE); - rx_ev_buf_owner_id_err = EFX_QWORD_FIELD(*event, - RX_EV_BUF_OWNER_ID_ERR); - rx_ev_ip_frag_err = EFX_QWORD_FIELD(*event, RX_EV_IF_FRAG_ERR); - rx_ev_ip_hdr_chksum_err = EFX_QWORD_FIELD(*event, - RX_EV_IP_HDR_CHKSUM_ERR); - rx_ev_tcp_udp_chksum_err = EFX_QWORD_FIELD(*event, - RX_EV_TCP_UDP_CHKSUM_ERR); - rx_ev_eth_crc_err = EFX_QWORD_FIELD(*event, RX_EV_ETH_CRC_ERR); - rx_ev_frm_trunc = EFX_QWORD_FIELD(*event, RX_EV_FRM_TRUNC); - rx_ev_drib_nib = ((falcon_rev(efx) >= FALCON_REV_B0) ? - 0 : EFX_QWORD_FIELD(*event, RX_EV_DRIB_NIB)); - rx_ev_pause_frm = EFX_QWORD_FIELD(*event, RX_EV_PAUSE_FRM_ERR); - - /* Every error apart from tobe_disc and pause_frm */ - rx_ev_other_err = (rx_ev_drib_nib | rx_ev_tcp_udp_chksum_err | - rx_ev_buf_owner_id_err | rx_ev_eth_crc_err | - rx_ev_frm_trunc | rx_ev_ip_hdr_chksum_err); - - /* Count errors that are not in MAC stats. Ignore expected - * checksum errors during self-test. */ - if (rx_ev_frm_trunc) - ++rx_queue->channel->n_rx_frm_trunc; - else if (rx_ev_tobe_disc) - ++rx_queue->channel->n_rx_tobe_disc; - else if (!efx->loopback_selftest) { - if (rx_ev_ip_hdr_chksum_err) - ++rx_queue->channel->n_rx_ip_hdr_chksum_err; - else if (rx_ev_tcp_udp_chksum_err) - ++rx_queue->channel->n_rx_tcp_udp_chksum_err; - } - if (rx_ev_ip_frag_err) - ++rx_queue->channel->n_rx_ip_frag_err; - - /* The frame must be discarded if any of these are true. */ - *discard = (rx_ev_eth_crc_err | rx_ev_frm_trunc | rx_ev_drib_nib | - rx_ev_tobe_disc | rx_ev_pause_frm); - - /* TOBE_DISC is expected on unicast mismatches; don't print out an - * error message. FRM_TRUNC indicates RXDP dropped the packet due - * to a FIFO overflow. - */ -#ifdef EFX_ENABLE_DEBUG - if (rx_ev_other_err) { - EFX_INFO_RL(efx, " RX queue %d unexpected RX event " - EFX_QWORD_FMT "%s%s%s%s%s%s%s%s\n", - rx_queue->queue, EFX_QWORD_VAL(*event), - rx_ev_buf_owner_id_err ? " [OWNER_ID_ERR]" : "", - rx_ev_ip_hdr_chksum_err ? - " [IP_HDR_CHKSUM_ERR]" : "", - rx_ev_tcp_udp_chksum_err ? - " [TCP_UDP_CHKSUM_ERR]" : "", - rx_ev_eth_crc_err ? " [ETH_CRC_ERR]" : "", - rx_ev_frm_trunc ? " [FRM_TRUNC]" : "", - rx_ev_drib_nib ? " [DRIB_NIB]" : "", - rx_ev_tobe_disc ? " [TOBE_DISC]" : "", - rx_ev_pause_frm ? " [PAUSE]" : ""); - } -#endif -} - -/* Handle receive events that are not in-order. */ -static void falcon_handle_rx_bad_index(struct efx_rx_queue *rx_queue, - unsigned index) -{ - struct efx_nic *efx = rx_queue->efx; - unsigned expected, dropped; - - expected = rx_queue->removed_count & FALCON_RXD_RING_MASK; - dropped = ((index + FALCON_RXD_RING_SIZE - expected) & - FALCON_RXD_RING_MASK); - EFX_INFO(efx, "dropped %d events (index=%d expected=%d)\n", - dropped, index, expected); - - efx_schedule_reset(efx, EFX_WORKAROUND_5676(efx) ? - RESET_TYPE_RX_RECOVERY : RESET_TYPE_DISABLE); -} - -/* Handle a packet received event - * - * Falcon silicon gives a "discard" flag if it's a unicast packet with the - * wrong destination address - * Also "is multicast" and "matches multicast filter" flags can be used to - * discard non-matching multicast packets. - */ -static void falcon_handle_rx_event(struct efx_channel *channel, - const efx_qword_t *event) -{ - unsigned int rx_ev_desc_ptr, rx_ev_byte_cnt; - unsigned int rx_ev_hdr_type, rx_ev_mcast_pkt; - unsigned expected_ptr; - bool rx_ev_pkt_ok, discard = false, checksummed; - struct efx_rx_queue *rx_queue; - struct efx_nic *efx = channel->efx; - - /* Basic packet information */ - rx_ev_byte_cnt = EFX_QWORD_FIELD(*event, RX_EV_BYTE_CNT); - rx_ev_pkt_ok = EFX_QWORD_FIELD(*event, RX_EV_PKT_OK); - rx_ev_hdr_type = EFX_QWORD_FIELD(*event, RX_EV_HDR_TYPE); - WARN_ON(EFX_QWORD_FIELD(*event, RX_EV_JUMBO_CONT)); - WARN_ON(EFX_QWORD_FIELD(*event, RX_EV_SOP) != 1); - WARN_ON(EFX_QWORD_FIELD(*event, RX_EV_Q_LABEL) != channel->channel); - - rx_queue = &efx->rx_queue[channel->channel]; - - rx_ev_desc_ptr = EFX_QWORD_FIELD(*event, RX_EV_DESC_PTR); - expected_ptr = rx_queue->removed_count & FALCON_RXD_RING_MASK; - if (unlikely(rx_ev_desc_ptr != expected_ptr)) - falcon_handle_rx_bad_index(rx_queue, rx_ev_desc_ptr); - - if (likely(rx_ev_pkt_ok)) { - /* If packet is marked as OK and packet type is TCP/IPv4 or - * UDP/IPv4, then we can rely on the hardware checksum. - */ - checksummed = RX_EV_HDR_TYPE_HAS_CHECKSUMS(rx_ev_hdr_type); - } else { - falcon_handle_rx_not_ok(rx_queue, event, &rx_ev_pkt_ok, - &discard); - checksummed = false; - } - - /* Detect multicast packets that didn't match the filter */ - rx_ev_mcast_pkt = EFX_QWORD_FIELD(*event, RX_EV_MCAST_PKT); - if (rx_ev_mcast_pkt) { - unsigned int rx_ev_mcast_hash_match = - EFX_QWORD_FIELD(*event, RX_EV_MCAST_HASH_MATCH); - - if (unlikely(!rx_ev_mcast_hash_match)) - discard = true; - } - - channel->irq_mod_score += 2; - - /* Handle received packet */ - efx_rx_packet(rx_queue, rx_ev_desc_ptr, rx_ev_byte_cnt, - checksummed, discard); -} - -/* Global events are basically PHY events */ -static void falcon_handle_global_event(struct efx_channel *channel, - efx_qword_t *event) -{ - struct efx_nic *efx = channel->efx; - bool handled = false; - - if (EFX_QWORD_FIELD(*event, G_PHY0_INTR) || - EFX_QWORD_FIELD(*event, G_PHY1_INTR) || - EFX_QWORD_FIELD(*event, XG_PHY_INTR) || - EFX_QWORD_FIELD(*event, XFP_PHY_INTR)) { - efx->phy_op->clear_interrupt(efx); - queue_work(efx->workqueue, &efx->phy_work); - handled = true; - } - - if ((falcon_rev(efx) >= FALCON_REV_B0) && - EFX_QWORD_FIELD(*event, XG_MNT_INTR_B0)) { - queue_work(efx->workqueue, &efx->mac_work); - handled = true; - } - - if (EFX_QWORD_FIELD_VER(efx, *event, RX_RECOVERY)) { - EFX_ERR(efx, "channel %d seen global RX_RESET " - "event. Resetting.\n", channel->channel); - - atomic_inc(&efx->rx_reset); - efx_schedule_reset(efx, EFX_WORKAROUND_6555(efx) ? - RESET_TYPE_RX_RECOVERY : RESET_TYPE_DISABLE); - handled = true; - } - - if (!handled) - EFX_ERR(efx, "channel %d unknown global event " - EFX_QWORD_FMT "\n", channel->channel, - EFX_QWORD_VAL(*event)); -} - -static void falcon_handle_driver_event(struct efx_channel *channel, - efx_qword_t *event) -{ - struct efx_nic *efx = channel->efx; - unsigned int ev_sub_code; - unsigned int ev_sub_data; - - ev_sub_code = EFX_QWORD_FIELD(*event, DRIVER_EV_SUB_CODE); - ev_sub_data = EFX_QWORD_FIELD(*event, DRIVER_EV_SUB_DATA); - - switch (ev_sub_code) { - case TX_DESCQ_FLS_DONE_EV_DECODE: - EFX_TRACE(efx, "channel %d TXQ %d flushed\n", - channel->channel, ev_sub_data); - break; - case RX_DESCQ_FLS_DONE_EV_DECODE: - EFX_TRACE(efx, "channel %d RXQ %d flushed\n", - channel->channel, ev_sub_data); - break; - case EVQ_INIT_DONE_EV_DECODE: - EFX_LOG(efx, "channel %d EVQ %d initialised\n", - channel->channel, ev_sub_data); - break; - case SRM_UPD_DONE_EV_DECODE: - EFX_TRACE(efx, "channel %d SRAM update done\n", - channel->channel); - break; - case WAKE_UP_EV_DECODE: - EFX_TRACE(efx, "channel %d RXQ %d wakeup event\n", - channel->channel, ev_sub_data); - break; - case TIMER_EV_DECODE: - EFX_TRACE(efx, "channel %d RX queue %d timer expired\n", - channel->channel, ev_sub_data); - break; - case RX_RECOVERY_EV_DECODE: - EFX_ERR(efx, "channel %d seen DRIVER RX_RESET event. " - "Resetting.\n", channel->channel); - atomic_inc(&efx->rx_reset); - efx_schedule_reset(efx, - EFX_WORKAROUND_6555(efx) ? - RESET_TYPE_RX_RECOVERY : - RESET_TYPE_DISABLE); - break; - case RX_DSC_ERROR_EV_DECODE: - EFX_ERR(efx, "RX DMA Q %d reports descriptor fetch error." - " RX Q %d is disabled.\n", ev_sub_data, ev_sub_data); - efx_schedule_reset(efx, RESET_TYPE_RX_DESC_FETCH); - break; - case TX_DSC_ERROR_EV_DECODE: - EFX_ERR(efx, "TX DMA Q %d reports descriptor fetch error." - " TX Q %d is disabled.\n", ev_sub_data, ev_sub_data); - efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH); - break; - default: - EFX_TRACE(efx, "channel %d unknown driver event code %d " - "data %04x\n", channel->channel, ev_sub_code, - ev_sub_data); - break; - } -} - -int falcon_process_eventq(struct efx_channel *channel, int rx_quota) -{ - unsigned int read_ptr; - efx_qword_t event, *p_event; - int ev_code; - int rx_packets = 0; - - read_ptr = channel->eventq_read_ptr; - - do { - p_event = falcon_event(channel, read_ptr); - event = *p_event; - - if (!falcon_event_present(&event)) - /* End of events */ - break; - - EFX_TRACE(channel->efx, "channel %d event is "EFX_QWORD_FMT"\n", - channel->channel, EFX_QWORD_VAL(event)); - - /* Clear this event by marking it all ones */ - EFX_SET_QWORD(*p_event); - - ev_code = EFX_QWORD_FIELD(event, EV_CODE); - - switch (ev_code) { - case RX_IP_EV_DECODE: - falcon_handle_rx_event(channel, &event); - ++rx_packets; - break; - case TX_IP_EV_DECODE: - falcon_handle_tx_event(channel, &event); - break; - case DRV_GEN_EV_DECODE: - channel->eventq_magic - = EFX_QWORD_FIELD(event, EVQ_MAGIC); - EFX_LOG(channel->efx, "channel %d received generated " - "event "EFX_QWORD_FMT"\n", channel->channel, - EFX_QWORD_VAL(event)); - break; - case GLOBAL_EV_DECODE: - falcon_handle_global_event(channel, &event); - break; - case DRIVER_EV_DECODE: - falcon_handle_driver_event(channel, &event); - break; - default: - EFX_ERR(channel->efx, "channel %d unknown event type %d" - " (data " EFX_QWORD_FMT ")\n", channel->channel, - ev_code, EFX_QWORD_VAL(event)); - } - - /* Increment read pointer */ - read_ptr = (read_ptr + 1) & FALCON_EVQ_MASK; - - } while (rx_packets < rx_quota); - - channel->eventq_read_ptr = read_ptr; - return rx_packets; -} - -void falcon_set_int_moderation(struct efx_channel *channel) -{ - efx_dword_t timer_cmd; - struct efx_nic *efx = channel->efx; - - /* Set timer register */ - if (channel->irq_moderation) { - /* Round to resolution supported by hardware. The value we - * program is based at 0. So actual interrupt moderation - * achieved is ((x + 1) * res). - */ - channel->irq_moderation -= (channel->irq_moderation % - FALCON_IRQ_MOD_RESOLUTION); - if (channel->irq_moderation < FALCON_IRQ_MOD_RESOLUTION) - channel->irq_moderation = FALCON_IRQ_MOD_RESOLUTION; - EFX_POPULATE_DWORD_2(timer_cmd, - TIMER_MODE, TIMER_MODE_INT_HLDOFF, - TIMER_VAL, - channel->irq_moderation / - FALCON_IRQ_MOD_RESOLUTION - 1); - } else { - EFX_POPULATE_DWORD_2(timer_cmd, - TIMER_MODE, TIMER_MODE_DIS, - TIMER_VAL, 0); - } - falcon_writel_page_locked(efx, &timer_cmd, TIMER_CMD_REG_KER, - channel->channel); - -} - -/* Allocate buffer table entries for event queue */ -int falcon_probe_eventq(struct efx_channel *channel) -{ - struct efx_nic *efx = channel->efx; - unsigned int evq_size; - - evq_size = FALCON_EVQ_SIZE * sizeof(efx_qword_t); - return falcon_alloc_special_buffer(efx, &channel->eventq, evq_size); -} - -void falcon_init_eventq(struct efx_channel *channel) -{ - efx_oword_t evq_ptr; - struct efx_nic *efx = channel->efx; - - EFX_LOG(efx, "channel %d event queue in special buffers %d-%d\n", - channel->channel, channel->eventq.index, - channel->eventq.index + channel->eventq.entries - 1); - - /* Pin event queue buffer */ - falcon_init_special_buffer(efx, &channel->eventq); - - /* Fill event queue with all ones (i.e. empty events) */ - memset(channel->eventq.addr, 0xff, channel->eventq.len); - - /* Push event queue to card */ - EFX_POPULATE_OWORD_3(evq_ptr, - EVQ_EN, 1, - EVQ_SIZE, FALCON_EVQ_ORDER, - EVQ_BUF_BASE_ID, channel->eventq.index); - falcon_write_table(efx, &evq_ptr, efx->type->evq_ptr_tbl_base, - channel->channel); - - falcon_set_int_moderation(channel); -} - -void falcon_fini_eventq(struct efx_channel *channel) -{ - efx_oword_t eventq_ptr; - struct efx_nic *efx = channel->efx; - - /* Remove event queue from card */ - EFX_ZERO_OWORD(eventq_ptr); - falcon_write_table(efx, &eventq_ptr, efx->type->evq_ptr_tbl_base, - channel->channel); - - /* Unpin event queue */ - falcon_fini_special_buffer(efx, &channel->eventq); -} - -/* Free buffers backing event queue */ -void falcon_remove_eventq(struct efx_channel *channel) -{ - falcon_free_special_buffer(channel->efx, &channel->eventq); -} +/* Hardware control for SFC4000 (aka Falcon). */ +static const unsigned int +/* "Large" EEPROM device: Atmel AT25640 or similar + * 8 KB, 16-bit address, 32 B write block */ +large_eeprom_type = ((13 << SPI_DEV_TYPE_SIZE_LBN) + | (2 << SPI_DEV_TYPE_ADDR_LEN_LBN) + | (5 << SPI_DEV_TYPE_BLOCK_SIZE_LBN)), +/* Default flash device: Atmel AT25F1024 + * 128 KB, 24-bit address, 32 KB erase block, 256 B write block */ +default_flash_type = ((17 << SPI_DEV_TYPE_SIZE_LBN) + | (3 << SPI_DEV_TYPE_ADDR_LEN_LBN) + | (0x52 << SPI_DEV_TYPE_ERASE_CMD_LBN) + | (15 << SPI_DEV_TYPE_ERASE_SIZE_LBN) + | (8 << SPI_DEV_TYPE_BLOCK_SIZE_LBN)); -/* Generates a test event on the event queue. A subsequent call to - * process_eventq() should pick up the event and place the value of - * "magic" into channel->eventq_magic; +/************************************************************************** + * + * I2C bus - this is a bit-bashing interface using GPIO pins + * Note that it uses the output enables to tristate the outputs + * SDA is the data pin and SCL is the clock + * + ************************************************************************** */ -void falcon_generate_test_event(struct efx_channel *channel, unsigned int magic) +static void falcon_setsda(void *data, int state) { - efx_qword_t test_event; + struct efx_nic *efx = (struct efx_nic *)data; + efx_oword_t reg; - EFX_POPULATE_QWORD_2(test_event, - EV_CODE, DRV_GEN_EV_DECODE, - EVQ_MAGIC, magic); - falcon_generate_event(channel, &test_event); + efx_reado(efx, ®, FR_AB_GPIO_CTL); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GPIO3_OEN, !state); + efx_writeo(efx, ®, FR_AB_GPIO_CTL); } -void falcon_sim_phy_event(struct efx_nic *efx) +static void falcon_setscl(void *data, int state) { - efx_qword_t phy_event; - - EFX_POPULATE_QWORD_1(phy_event, EV_CODE, GLOBAL_EV_DECODE); - if (EFX_IS10G(efx)) - EFX_SET_QWORD_FIELD(phy_event, XG_PHY_INTR, 1); - else - EFX_SET_QWORD_FIELD(phy_event, G_PHY0_INTR, 1); + struct efx_nic *efx = (struct efx_nic *)data; + efx_oword_t reg; - falcon_generate_event(&efx->channel[0], &phy_event); + efx_reado(efx, ®, FR_AB_GPIO_CTL); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GPIO0_OEN, !state); + efx_writeo(efx, ®, FR_AB_GPIO_CTL); } -/************************************************************************** - * - * Flush handling - * - **************************************************************************/ - - -static void falcon_poll_flush_events(struct efx_nic *efx) +static int falcon_getsda(void *data) { - struct efx_channel *channel = &efx->channel[0]; - struct efx_tx_queue *tx_queue; - struct efx_rx_queue *rx_queue; - unsigned int read_ptr = channel->eventq_read_ptr; - unsigned int end_ptr = (read_ptr - 1) & FALCON_EVQ_MASK; - - do { - efx_qword_t *event = falcon_event(channel, read_ptr); - int ev_code, ev_sub_code, ev_queue; - bool ev_failed; - - if (!falcon_event_present(event)) - break; - - ev_code = EFX_QWORD_FIELD(*event, EV_CODE); - ev_sub_code = EFX_QWORD_FIELD(*event, DRIVER_EV_SUB_CODE); - if (ev_code == DRIVER_EV_DECODE && - ev_sub_code == TX_DESCQ_FLS_DONE_EV_DECODE) { - ev_queue = EFX_QWORD_FIELD(*event, - DRIVER_EV_TX_DESCQ_ID); - if (ev_queue < EFX_TX_QUEUE_COUNT) { - tx_queue = efx->tx_queue + ev_queue; - tx_queue->flushed = true; - } - } else if (ev_code == DRIVER_EV_DECODE && - ev_sub_code == RX_DESCQ_FLS_DONE_EV_DECODE) { - ev_queue = EFX_QWORD_FIELD(*event, - DRIVER_EV_RX_DESCQ_ID); - ev_failed = EFX_QWORD_FIELD(*event, - DRIVER_EV_RX_FLUSH_FAIL); - if (ev_queue < efx->n_rx_queues) { - rx_queue = efx->rx_queue + ev_queue; - - /* retry the rx flush */ - if (ev_failed) - falcon_flush_rx_queue(rx_queue); - else - rx_queue->flushed = true; - } - } + struct efx_nic *efx = (struct efx_nic *)data; + efx_oword_t reg; - read_ptr = (read_ptr + 1) & FALCON_EVQ_MASK; - } while (read_ptr != end_ptr); + efx_reado(efx, ®, FR_AB_GPIO_CTL); + return EFX_OWORD_FIELD(reg, FRF_AB_GPIO3_IN); } -/* Handle tx and rx flushes at the same time, since they run in - * parallel in the hardware and there's no reason for us to - * serialise them */ -int falcon_flush_queues(struct efx_nic *efx) +static int falcon_getscl(void *data) { - struct efx_rx_queue *rx_queue; - struct efx_tx_queue *tx_queue; - int i; - bool outstanding; - - /* Issue flush requests */ - efx_for_each_tx_queue(tx_queue, efx) { - tx_queue->flushed = false; - falcon_flush_tx_queue(tx_queue); - } - efx_for_each_rx_queue(rx_queue, efx) { - rx_queue->flushed = false; - falcon_flush_rx_queue(rx_queue); - } - - /* Poll the evq looking for flush completions. Since we're not pushing - * any more rx or tx descriptors at this point, we're in no danger of - * overflowing the evq whilst we wait */ - for (i = 0; i < FALCON_FLUSH_POLL_COUNT; ++i) { - msleep(FALCON_FLUSH_INTERVAL); - falcon_poll_flush_events(efx); - - /* Check if every queue has been succesfully flushed */ - outstanding = false; - efx_for_each_tx_queue(tx_queue, efx) - outstanding |= !tx_queue->flushed; - efx_for_each_rx_queue(rx_queue, efx) - outstanding |= !rx_queue->flushed; - if (!outstanding) - return 0; - } - - /* Mark the queues as all flushed. We're going to return failure - * leading to a reset, or fake up success anyway. "flushed" now - * indicates that we tried to flush. */ - efx_for_each_tx_queue(tx_queue, efx) { - if (!tx_queue->flushed) - EFX_ERR(efx, "tx queue %d flush command timed out\n", - tx_queue->queue); - tx_queue->flushed = true; - } - efx_for_each_rx_queue(rx_queue, efx) { - if (!rx_queue->flushed) - EFX_ERR(efx, "rx queue %d flush command timed out\n", - rx_queue->queue); - rx_queue->flushed = true; - } - - if (EFX_WORKAROUND_7803(efx)) - return 0; + struct efx_nic *efx = (struct efx_nic *)data; + efx_oword_t reg; - return -ETIMEDOUT; + efx_reado(efx, ®, FR_AB_GPIO_CTL); + return EFX_OWORD_FIELD(reg, FRF_AB_GPIO0_IN); } -/************************************************************************** - * - * Falcon hardware interrupts - * The hardware interrupt handler does very little work; all the event - * queue processing is carried out by per-channel tasklets. - * - **************************************************************************/ +static struct i2c_algo_bit_data falcon_i2c_bit_operations = { + .setsda = falcon_setsda, + .setscl = falcon_setscl, + .getsda = falcon_getsda, + .getscl = falcon_getscl, + .udelay = 5, + /* Wait up to 50 ms for slave to let us pull SCL high */ + .timeout = DIV_ROUND_UP(HZ, 20), +}; -/* Enable/disable/generate Falcon interrupts */ -static inline void falcon_interrupts(struct efx_nic *efx, int enabled, - int force) +static void falcon_push_irq_moderation(struct efx_channel *channel) { - efx_oword_t int_en_reg_ker; + efx_dword_t timer_cmd; + struct efx_nic *efx = channel->efx; - EFX_POPULATE_OWORD_2(int_en_reg_ker, - KER_INT_KER, force, - DRV_INT_EN_KER, enabled); - falcon_write(efx, &int_en_reg_ker, INT_EN_REG_KER); + /* Set timer register */ + if (channel->irq_moderation) { + EFX_POPULATE_DWORD_2(timer_cmd, + FRF_AB_TC_TIMER_MODE, + FFE_BB_TIMER_MODE_INT_HLDOFF, + FRF_AB_TC_TIMER_VAL, + channel->irq_moderation - 1); + } else { + EFX_POPULATE_DWORD_2(timer_cmd, + FRF_AB_TC_TIMER_MODE, + FFE_BB_TIMER_MODE_DIS, + FRF_AB_TC_TIMER_VAL, 0); + } + BUILD_BUG_ON(FR_AA_TIMER_COMMAND_KER != FR_BZ_TIMER_COMMAND_P0); + efx_writed_page_locked(efx, &timer_cmd, FR_BZ_TIMER_COMMAND_P0, + channel->channel); } -void falcon_enable_interrupts(struct efx_nic *efx) -{ - efx_oword_t int_adr_reg_ker; - struct efx_channel *channel; - - EFX_ZERO_OWORD(*((efx_oword_t *) efx->irq_status.addr)); - wmb(); /* Ensure interrupt vector is clear before interrupts enabled */ +static void falcon_deconfigure_mac_wrapper(struct efx_nic *efx); - /* Program address */ - EFX_POPULATE_OWORD_2(int_adr_reg_ker, - NORM_INT_VEC_DIS_KER, EFX_INT_MODE_USE_MSI(efx), - INT_ADR_KER, efx->irq_status.dma_addr); - falcon_write(efx, &int_adr_reg_ker, INT_ADR_REG_KER); - - /* Enable interrupts */ - falcon_interrupts(efx, 1, 0); - - /* Force processing of all the channels to get the EVQ RPTRs up to - date */ - efx_for_each_channel(channel, efx) - efx_schedule_channel(channel); -} - -void falcon_disable_interrupts(struct efx_nic *efx) +static void falcon_prepare_flush(struct efx_nic *efx) { - /* Disable interrupts */ - falcon_interrupts(efx, 0, 0); -} + falcon_deconfigure_mac_wrapper(efx); -/* Generate a Falcon test interrupt - * Interrupt must already have been enabled, otherwise nasty things - * may happen. - */ -void falcon_generate_interrupt(struct efx_nic *efx) -{ - falcon_interrupts(efx, 1, 1); + /* Wait for the tx and rx fifo's to get to the next packet boundary + * (~1ms without back-pressure), then to drain the remainder of the + * fifo's at data path speeds (negligible), with a healthy margin. */ + msleep(10); } /* Acknowledge a legacy interrupt from Falcon @@ -1364,113 +144,17 @@ * * NB most hardware supports MSI interrupts */ -static inline void falcon_irq_ack_a1(struct efx_nic *efx) -{ - efx_dword_t reg; - - EFX_POPULATE_DWORD_1(reg, INT_ACK_DUMMY_DATA, 0xb7eb7e); - falcon_writel(efx, ®, INT_ACK_REG_KER_A1); - falcon_readl(efx, ®, WORK_AROUND_BROKEN_PCI_READS_REG_KER_A1); -} - -/* Process a fatal interrupt - * Disable bus mastering ASAP and schedule a reset - */ -static irqreturn_t falcon_fatal_interrupt(struct efx_nic *efx) -{ - struct falcon_nic_data *nic_data = efx->nic_data; - efx_oword_t *int_ker = efx->irq_status.addr; - efx_oword_t fatal_intr; - int error, mem_perr; - - falcon_read(efx, &fatal_intr, FATAL_INTR_REG_KER); - error = EFX_OWORD_FIELD(fatal_intr, INT_KER_ERROR); - - EFX_ERR(efx, "SYSTEM ERROR " EFX_OWORD_FMT " status " - EFX_OWORD_FMT ": %s\n", EFX_OWORD_VAL(*int_ker), - EFX_OWORD_VAL(fatal_intr), - error ? "disabling bus mastering" : "no recognised error"); - if (error == 0) - goto out; - - /* If this is a memory parity error dump which blocks are offending */ - mem_perr = EFX_OWORD_FIELD(fatal_intr, MEM_PERR_INT_KER); - if (mem_perr) { - efx_oword_t reg; - falcon_read(efx, ®, MEM_STAT_REG_KER); - EFX_ERR(efx, "SYSTEM ERROR: memory parity error " - EFX_OWORD_FMT "\n", EFX_OWORD_VAL(reg)); - } - - /* Disable both devices */ - pci_clear_master(efx->pci_dev); - if (FALCON_IS_DUAL_FUNC(efx)) - pci_clear_master(nic_data->pci_dev2); - falcon_disable_interrupts(efx); - - /* Count errors and reset or disable the NIC accordingly */ - if (nic_data->int_error_count == 0 || - time_after(jiffies, nic_data->int_error_expire)) { - nic_data->int_error_count = 0; - nic_data->int_error_expire = - jiffies + FALCON_INT_ERROR_EXPIRE * HZ; - } - if (++nic_data->int_error_count < FALCON_MAX_INT_ERRORS) { - EFX_ERR(efx, "SYSTEM ERROR - reset scheduled\n"); - efx_schedule_reset(efx, RESET_TYPE_INT_ERROR); - } else { - EFX_ERR(efx, "SYSTEM ERROR - max number of errors seen." - "NIC will be disabled\n"); - efx_schedule_reset(efx, RESET_TYPE_DISABLE); - } -out: - return IRQ_HANDLED; -} - -/* Handle a legacy interrupt from Falcon - * Acknowledges the interrupt and schedule event queue processing. - */ -static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) +inline void falcon_irq_ack_a1(struct efx_nic *efx) { - struct efx_nic *efx = dev_id; - efx_oword_t *int_ker = efx->irq_status.addr; - irqreturn_t result = IRQ_NONE; - struct efx_channel *channel; efx_dword_t reg; - u32 queues; - int syserr; - - /* Read the ISR which also ACKs the interrupts */ - falcon_readl(efx, ®, INT_ISR0_B0); - queues = EFX_EXTRACT_DWORD(reg, 0, 31); - - /* Check to see if we have a serious error condition */ - syserr = EFX_OWORD_FIELD(*int_ker, FATAL_INT); - if (unlikely(syserr)) - return falcon_fatal_interrupt(efx); - - /* Schedule processing of any interrupting queues */ - efx_for_each_channel(channel, efx) { - if ((queues & 1) || - falcon_event_present( - falcon_event(channel, channel->eventq_read_ptr))) { - efx_schedule_channel(channel); - result = IRQ_HANDLED; - } - queues >>= 1; - } - - if (result == IRQ_HANDLED) { - efx->last_irq_cpu = raw_smp_processor_id(); - EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n", - irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg)); - } - return result; + EFX_POPULATE_DWORD_1(reg, FRF_AA_INT_ACK_KER_FIELD, 0xb7eb7e); + efx_writed(efx, ®, FR_AA_INT_ACK_KER); + efx_readd(efx, ®, FR_AA_WORK_AROUND_BROKEN_PCI_READS); } -static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) +irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) { struct efx_nic *efx = dev_id; efx_oword_t *int_ker = efx->irq_status.addr; @@ -1491,15 +175,15 @@ irq, raw_smp_processor_id(), EFX_OWORD_VAL(*int_ker)); /* Check to see if we have a serious error condition */ - syserr = EFX_OWORD_FIELD(*int_ker, FATAL_INT); + syserr = EFX_OWORD_FIELD(*int_ker, FSF_AZ_NET_IVEC_FATAL_INT); if (unlikely(syserr)) - return falcon_fatal_interrupt(efx); + return efx_nic_fatal_interrupt(efx); /* Determine interrupting queues, clear interrupt status * register and acknowledge the device interrupt. */ - BUILD_BUG_ON(INT_EVQS_WIDTH > EFX_MAX_CHANNELS); - queues = EFX_OWORD_FIELD(*int_ker, INT_EVQS); + BUILD_BUG_ON(FSF_AZ_NET_IVEC_INT_Q_WIDTH > EFX_MAX_CHANNELS); + queues = EFX_OWORD_FIELD(*int_ker, FSF_AZ_NET_IVEC_INT_Q); EFX_ZERO_OWORD(*int_ker); wmb(); /* Ensure the vector is cleared before interrupt ack */ falcon_irq_ack_a1(efx); @@ -1515,126 +199,6 @@ return IRQ_HANDLED; } - -/* Handle an MSI interrupt from Falcon - * - * Handle an MSI hardware interrupt. This routine schedules event - * queue processing. No interrupt acknowledgement cycle is necessary. - * Also, we never need to check that the interrupt is for us, since - * MSI interrupts cannot be shared. - */ -static irqreturn_t falcon_msi_interrupt(int irq, void *dev_id) -{ - struct efx_channel *channel = dev_id; - struct efx_nic *efx = channel->efx; - efx_oword_t *int_ker = efx->irq_status.addr; - int syserr; - - efx->last_irq_cpu = raw_smp_processor_id(); - EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_OWORD_FMT "\n", - irq, raw_smp_processor_id(), EFX_OWORD_VAL(*int_ker)); - - /* Check to see if we have a serious error condition */ - syserr = EFX_OWORD_FIELD(*int_ker, FATAL_INT); - if (unlikely(syserr)) - return falcon_fatal_interrupt(efx); - - /* Schedule processing of the channel */ - efx_schedule_channel(channel); - - return IRQ_HANDLED; -} - - -/* Setup RSS indirection table. - * This maps from the hash value of the packet to RXQ - */ -static void falcon_setup_rss_indir_table(struct efx_nic *efx) -{ - int i = 0; - unsigned long offset; - efx_dword_t dword; - - if (falcon_rev(efx) < FALCON_REV_B0) - return; - - for (offset = RX_RSS_INDIR_TBL_B0; - offset < RX_RSS_INDIR_TBL_B0 + 0x800; - offset += 0x10) { - EFX_POPULATE_DWORD_1(dword, RX_RSS_INDIR_ENT_B0, - i % efx->n_rx_queues); - falcon_writel(efx, &dword, offset); - i++; - } -} - -/* Hook interrupt handler(s) - * Try MSI and then legacy interrupts. - */ -int falcon_init_interrupt(struct efx_nic *efx) -{ - struct efx_channel *channel; - int rc; - - if (!EFX_INT_MODE_USE_MSI(efx)) { - irq_handler_t handler; - if (falcon_rev(efx) >= FALCON_REV_B0) - handler = falcon_legacy_interrupt_b0; - else - handler = falcon_legacy_interrupt_a1; - - rc = request_irq(efx->legacy_irq, handler, IRQF_SHARED, - efx->name, efx); - if (rc) { - EFX_ERR(efx, "failed to hook legacy IRQ %d\n", - efx->pci_dev->irq); - goto fail1; - } - return 0; - } - - /* Hook MSI or MSI-X interrupt */ - efx_for_each_channel(channel, efx) { - rc = request_irq(channel->irq, falcon_msi_interrupt, - IRQF_PROBE_SHARED, /* Not shared */ - channel->name, channel); - if (rc) { - EFX_ERR(efx, "failed to hook IRQ %d\n", channel->irq); - goto fail2; - } - } - - return 0; - - fail2: - efx_for_each_channel(channel, efx) - free_irq(channel->irq, channel); - fail1: - return rc; -} - -void falcon_fini_interrupt(struct efx_nic *efx) -{ - struct efx_channel *channel; - efx_oword_t reg; - - /* Disable MSI/MSI-X interrupts */ - efx_for_each_channel(channel, efx) { - if (channel->irq) - free_irq(channel->irq, channel); - } - - /* ACK legacy interrupt */ - if (falcon_rev(efx) >= FALCON_REV_B0) - falcon_read(efx, ®, INT_ISR0_B0); - else - falcon_irq_ack_a1(efx); - - /* Disable legacy interrupt */ - if (efx->legacy_irq) - free_irq(efx->legacy_irq, efx); -} - /************************************************************************** * * EEPROM/flash @@ -1647,8 +211,8 @@ static int falcon_spi_poll(struct efx_nic *efx) { efx_oword_t reg; - falcon_read(efx, ®, EE_SPI_HCMD_REG_KER); - return EFX_OWORD_FIELD(reg, EE_SPI_HCMD_CMD_EN) ? -EBUSY : 0; + efx_reado(efx, ®, FR_AB_EE_SPI_HCMD); + return EFX_OWORD_FIELD(reg, FRF_AB_EE_SPI_HCMD_CMD_EN) ? -EBUSY : 0; } /* Wait for SPI command completion */ @@ -1678,11 +242,10 @@ } } -int falcon_spi_cmd(const struct efx_spi_device *spi, +int falcon_spi_cmd(struct efx_nic *efx, const struct efx_spi_device *spi, unsigned int command, int address, const void *in, void *out, size_t len) { - struct efx_nic *efx = spi->efx; bool addressed = (address >= 0); bool reading = (out != NULL); efx_oword_t reg; @@ -1700,27 +263,27 @@ /* Program address register, if we have an address */ if (addressed) { - EFX_POPULATE_OWORD_1(reg, EE_SPI_HADR_ADR, address); - falcon_write(efx, ®, EE_SPI_HADR_REG_KER); + EFX_POPULATE_OWORD_1(reg, FRF_AB_EE_SPI_HADR_ADR, address); + efx_writeo(efx, ®, FR_AB_EE_SPI_HADR); } /* Program data register, if we have data */ if (in != NULL) { memcpy(®, in, len); - falcon_write(efx, ®, EE_SPI_HDATA_REG_KER); + efx_writeo(efx, ®, FR_AB_EE_SPI_HDATA); } /* Issue read/write command */ EFX_POPULATE_OWORD_7(reg, - EE_SPI_HCMD_CMD_EN, 1, - EE_SPI_HCMD_SF_SEL, spi->device_id, - EE_SPI_HCMD_DABCNT, len, - EE_SPI_HCMD_READ, reading, - EE_SPI_HCMD_DUBCNT, 0, - EE_SPI_HCMD_ADBCNT, + FRF_AB_EE_SPI_HCMD_CMD_EN, 1, + FRF_AB_EE_SPI_HCMD_SF_SEL, spi->device_id, + FRF_AB_EE_SPI_HCMD_DABCNT, len, + FRF_AB_EE_SPI_HCMD_READ, reading, + FRF_AB_EE_SPI_HCMD_DUBCNT, 0, + FRF_AB_EE_SPI_HCMD_ADBCNT, (addressed ? spi->addr_len : 0), - EE_SPI_HCMD_ENC, command); - falcon_write(efx, ®, EE_SPI_HCMD_REG_KER); + FRF_AB_EE_SPI_HCMD_ENC, command); + efx_writeo(efx, ®, FR_AB_EE_SPI_HCMD); /* Wait for read/write to complete */ rc = falcon_spi_wait(efx); @@ -1729,7 +292,7 @@ /* Read data */ if (out != NULL) { - falcon_read(efx, ®, EE_SPI_HDATA_REG_KER); + efx_reado(efx, ®, FR_AB_EE_SPI_HDATA); memcpy(out, ®, len); } @@ -1751,15 +314,15 @@ } /* Wait up to 10 ms for buffered write completion */ -int falcon_spi_wait_write(const struct efx_spi_device *spi) +int +falcon_spi_wait_write(struct efx_nic *efx, const struct efx_spi_device *spi) { - struct efx_nic *efx = spi->efx; unsigned long timeout = jiffies + 1 + DIV_ROUND_UP(HZ, 100); u8 status; int rc; for (;;) { - rc = falcon_spi_cmd(spi, SPI_RDSR, -1, NULL, + rc = falcon_spi_cmd(efx, spi, SPI_RDSR, -1, NULL, &status, sizeof(status)); if (rc) return rc; @@ -1775,8 +338,8 @@ } } -int falcon_spi_read(const struct efx_spi_device *spi, loff_t start, - size_t len, size_t *retlen, u8 *buffer) +int falcon_spi_read(struct efx_nic *efx, const struct efx_spi_device *spi, + loff_t start, size_t len, size_t *retlen, u8 *buffer) { size_t block_len, pos = 0; unsigned int command; @@ -1786,7 +349,7 @@ block_len = min(len - pos, FALCON_SPI_MAX_LEN); command = efx_spi_munge_command(spi, SPI_READ, start + pos); - rc = falcon_spi_cmd(spi, command, start + pos, NULL, + rc = falcon_spi_cmd(efx, spi, command, start + pos, NULL, buffer + pos, block_len); if (rc) break; @@ -1805,8 +368,9 @@ return rc; } -int falcon_spi_write(const struct efx_spi_device *spi, loff_t start, - size_t len, size_t *retlen, const u8 *buffer) +int +falcon_spi_write(struct efx_nic *efx, const struct efx_spi_device *spi, + loff_t start, size_t len, size_t *retlen, const u8 *buffer) { u8 verify_buffer[FALCON_SPI_MAX_LEN]; size_t block_len, pos = 0; @@ -1814,24 +378,24 @@ int rc = 0; while (pos < len) { - rc = falcon_spi_cmd(spi, SPI_WREN, -1, NULL, NULL, 0); + rc = falcon_spi_cmd(efx, spi, SPI_WREN, -1, NULL, NULL, 0); if (rc) break; block_len = min(len - pos, falcon_spi_write_limit(spi, start + pos)); command = efx_spi_munge_command(spi, SPI_WRITE, start + pos); - rc = falcon_spi_cmd(spi, command, start + pos, + rc = falcon_spi_cmd(efx, spi, command, start + pos, buffer + pos, NULL, block_len); if (rc) break; - rc = falcon_spi_wait_write(spi); + rc = falcon_spi_wait_write(efx, spi); if (rc) break; command = efx_spi_munge_command(spi, SPI_READ, start + pos); - rc = falcon_spi_cmd(spi, command, start + pos, + rc = falcon_spi_cmd(efx, spi, command, start + pos, NULL, verify_buffer, block_len); if (memcmp(verify_buffer, buffer + pos, block_len)) { rc = -EIO; @@ -1860,60 +424,70 @@ ************************************************************************** */ -static int falcon_reset_macs(struct efx_nic *efx) +static void falcon_push_multicast_hash(struct efx_nic *efx) { - efx_oword_t reg; + union efx_multicast_hash *mc_hash = &efx->multicast_hash; + + WARN_ON(!mutex_is_locked(&efx->mac_lock)); + + efx_writeo(efx, &mc_hash->oword[0], FR_AB_MAC_MC_HASH_REG0); + efx_writeo(efx, &mc_hash->oword[1], FR_AB_MAC_MC_HASH_REG1); +} + +static void falcon_reset_macs(struct efx_nic *efx) +{ + struct falcon_nic_data *nic_data = efx->nic_data; + efx_oword_t reg, mac_ctrl; int count; - if (falcon_rev(efx) < FALCON_REV_B0) { + if (efx_nic_rev(efx) < EFX_REV_FALCON_B0) { /* It's not safe to use GLB_CTL_REG to reset the * macs, so instead use the internal MAC resets */ if (!EFX_IS10G(efx)) { - EFX_POPULATE_OWORD_1(reg, GM_SW_RST, 1); - falcon_write(efx, ®, GM_CFG1_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_GM_SW_RST, 1); + efx_writeo(efx, ®, FR_AB_GM_CFG1); udelay(1000); - EFX_POPULATE_OWORD_1(reg, GM_SW_RST, 0); - falcon_write(efx, ®, GM_CFG1_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_GM_SW_RST, 0); + efx_writeo(efx, ®, FR_AB_GM_CFG1); udelay(1000); - return 0; + return; } else { - EFX_POPULATE_OWORD_1(reg, XM_CORE_RST, 1); - falcon_write(efx, ®, XM_GLB_CFG_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_XM_CORE_RST, 1); + efx_writeo(efx, ®, FR_AB_XM_GLB_CFG); for (count = 0; count < 10000; count++) { - falcon_read(efx, ®, XM_GLB_CFG_REG); - if (EFX_OWORD_FIELD(reg, XM_CORE_RST) == 0) - return 0; + efx_reado(efx, ®, FR_AB_XM_GLB_CFG); + if (EFX_OWORD_FIELD(reg, FRF_AB_XM_CORE_RST) == + 0) + return; udelay(10); } EFX_ERR(efx, "timed out waiting for XMAC core reset\n"); - return -ETIMEDOUT; } } - /* MAC stats will fail whilst the TX fifo is draining. Serialise - * the drain sequence with the statistics fetch */ - efx_stats_disable(efx); - - falcon_read(efx, ®, MAC0_CTRL_REG_KER); - EFX_SET_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0, 1); - falcon_write(efx, ®, MAC0_CTRL_REG_KER); - - falcon_read(efx, ®, GLB_CTL_REG_KER); - EFX_SET_OWORD_FIELD(reg, RST_XGTX, 1); - EFX_SET_OWORD_FIELD(reg, RST_XGRX, 1); - EFX_SET_OWORD_FIELD(reg, RST_EM, 1); - falcon_write(efx, ®, GLB_CTL_REG_KER); + /* Mac stats will fail whist the TX fifo is draining */ + WARN_ON(nic_data->stats_disable_count == 0); + + efx_reado(efx, &mac_ctrl, FR_AB_MAC_CTRL); + EFX_SET_OWORD_FIELD(mac_ctrl, FRF_BB_TXFIFO_DRAIN_EN, 1); + efx_writeo(efx, &mac_ctrl, FR_AB_MAC_CTRL); + + efx_reado(efx, ®, FR_AB_GLB_CTL); + EFX_SET_OWORD_FIELD(reg, FRF_AB_RST_XGTX, 1); + EFX_SET_OWORD_FIELD(reg, FRF_AB_RST_XGRX, 1); + EFX_SET_OWORD_FIELD(reg, FRF_AB_RST_EM, 1); + efx_writeo(efx, ®, FR_AB_GLB_CTL); count = 0; while (1) { - falcon_read(efx, ®, GLB_CTL_REG_KER); - if (!EFX_OWORD_FIELD(reg, RST_XGTX) && - !EFX_OWORD_FIELD(reg, RST_XGRX) && - !EFX_OWORD_FIELD(reg, RST_EM)) { + efx_reado(efx, ®, FR_AB_GLB_CTL); + if (!EFX_OWORD_FIELD(reg, FRF_AB_RST_XGTX) && + !EFX_OWORD_FIELD(reg, FRF_AB_RST_XGRX) && + !EFX_OWORD_FIELD(reg, FRF_AB_RST_EM)) { EFX_LOG(efx, "Completed MAC reset after %d loops\n", count); break; @@ -1926,55 +500,50 @@ udelay(10); } - efx_stats_enable(efx); - - /* If we've reset the EM block and the link is up, then - * we'll have to kick the XAUI link so the PHY can recover */ - if (efx->link_up && EFX_IS10G(efx) && EFX_WORKAROUND_5147(efx)) - falcon_reset_xaui(efx); - - return 0; + /* Ensure the correct MAC is selected before statistics + * are re-enabled by the caller */ + efx_writeo(efx, &mac_ctrl, FR_AB_MAC_CTRL); } void falcon_drain_tx_fifo(struct efx_nic *efx) { efx_oword_t reg; - if ((falcon_rev(efx) < FALCON_REV_B0) || + if ((efx_nic_rev(efx) < EFX_REV_FALCON_B0) || (efx->loopback_mode != LOOPBACK_NONE)) return; - falcon_read(efx, ®, MAC0_CTRL_REG_KER); + efx_reado(efx, ®, FR_AB_MAC_CTRL); /* There is no point in draining more than once */ - if (EFX_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0)) + if (EFX_OWORD_FIELD(reg, FRF_BB_TXFIFO_DRAIN_EN)) return; falcon_reset_macs(efx); } -void falcon_deconfigure_mac_wrapper(struct efx_nic *efx) +static void falcon_deconfigure_mac_wrapper(struct efx_nic *efx) { efx_oword_t reg; - if (falcon_rev(efx) < FALCON_REV_B0) + if (efx_nic_rev(efx) < EFX_REV_FALCON_B0) return; /* Isolate the MAC -> RX */ - falcon_read(efx, ®, RX_CFG_REG_KER); - EFX_SET_OWORD_FIELD(reg, RX_INGR_EN_B0, 0); - falcon_write(efx, ®, RX_CFG_REG_KER); + efx_reado(efx, ®, FR_AZ_RX_CFG); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_INGR_EN, 0); + efx_writeo(efx, ®, FR_AZ_RX_CFG); - if (!efx->link_up) - falcon_drain_tx_fifo(efx); + /* Isolate TX -> MAC */ + falcon_drain_tx_fifo(efx); } void falcon_reconfigure_mac_wrapper(struct efx_nic *efx) { + struct efx_link_state *link_state = &efx->link_state; efx_oword_t reg; int link_speed; - bool tx_fc; - switch (efx->link_speed) { + switch (link_state->speed) { case 10000: link_speed = 3; break; case 1000: link_speed = 2; break; case 100: link_speed = 1; break; @@ -1985,75 +554,139 @@ * indefinitely held and TX queue can be flushed at any point * while the link is down. */ EFX_POPULATE_OWORD_5(reg, - MAC_XOFF_VAL, 0xffff /* max pause time */, - MAC_BCAD_ACPT, 1, - MAC_UC_PROM, efx->promiscuous, - MAC_LINK_STATUS, 1, /* always set */ - MAC_SPEED, link_speed); + FRF_AB_MAC_XOFF_VAL, 0xffff /* max pause time */, + FRF_AB_MAC_BCAD_ACPT, 1, + FRF_AB_MAC_UC_PROM, efx->promiscuous, + FRF_AB_MAC_LINK_STATUS, 1, /* always set */ + FRF_AB_MAC_SPEED, link_speed); /* On B0, MAC backpressure can be disabled and packets get * discarded. */ - if (falcon_rev(efx) >= FALCON_REV_B0) { - EFX_SET_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0, - !efx->link_up); + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) { + EFX_SET_OWORD_FIELD(reg, FRF_BB_TXFIFO_DRAIN_EN, + !link_state->up); + } + + efx_writeo(efx, ®, FR_AB_MAC_CTRL); + + /* Restore the multicast hash registers. */ + falcon_push_multicast_hash(efx); + + efx_reado(efx, ®, FR_AZ_RX_CFG); + /* Enable XOFF signal from RX FIFO (we enabled it during NIC + * initialisation but it may read back as 0) */ + EFX_SET_OWORD_FIELD(reg, FRF_AZ_RX_XOFF_MAC_EN, 1); + /* Unisolate the MAC -> RX */ + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_INGR_EN, 1); + efx_writeo(efx, ®, FR_AZ_RX_CFG); +} + +static void falcon_stats_request(struct efx_nic *efx) +{ + struct falcon_nic_data *nic_data = efx->nic_data; + efx_oword_t reg; + + WARN_ON(nic_data->stats_pending); + WARN_ON(nic_data->stats_disable_count); + + if (nic_data->stats_dma_done == NULL) + return; /* no mac selected */ + + *nic_data->stats_dma_done = FALCON_STATS_NOT_DONE; + nic_data->stats_pending = true; + wmb(); /* ensure done flag is clear */ + + /* Initiate DMA transfer of stats */ + EFX_POPULATE_OWORD_2(reg, + FRF_AB_MAC_STAT_DMA_CMD, 1, + FRF_AB_MAC_STAT_DMA_ADR, + efx->stats_buffer.dma_addr); + efx_writeo(efx, ®, FR_AB_MAC_STAT_DMA); + + mod_timer(&nic_data->stats_timer, round_jiffies_up(jiffies + HZ / 2)); +} + +static void falcon_stats_complete(struct efx_nic *efx) +{ + struct falcon_nic_data *nic_data = efx->nic_data; + + if (!nic_data->stats_pending) + return; + + nic_data->stats_pending = 0; + if (*nic_data->stats_dma_done == FALCON_STATS_DONE) { + rmb(); /* read the done flag before the stats */ + efx->mac_op->update_stats(efx); + } else { + EFX_ERR(efx, "timed out waiting for statistics\n"); } +} + +static void falcon_stats_timer_func(unsigned long context) +{ + struct efx_nic *efx = (struct efx_nic *)context; + struct falcon_nic_data *nic_data = efx->nic_data; + + spin_lock(&efx->stats_lock); - falcon_write(efx, ®, MAC0_CTRL_REG_KER); + falcon_stats_complete(efx); + if (nic_data->stats_disable_count == 0) + falcon_stats_request(efx); - /* Restore the multicast hash registers. */ - falcon_set_multicast_hash(efx); + spin_unlock(&efx->stats_lock); +} - /* Transmission of pause frames when RX crosses the threshold is - * covered by RX_XOFF_MAC_EN and XM_TX_CFG_REG:XM_FCNTL. - * Action on receipt of pause frames is controller by XM_DIS_FCNTL */ - tx_fc = !!(efx->link_fc & EFX_FC_TX); - falcon_read(efx, ®, RX_CFG_REG_KER); - EFX_SET_OWORD_FIELD_VER(efx, reg, RX_XOFF_MAC_EN, tx_fc); +static void falcon_switch_mac(struct efx_nic *efx); - /* Unisolate the MAC -> RX */ - if (falcon_rev(efx) >= FALCON_REV_B0) - EFX_SET_OWORD_FIELD(reg, RX_INGR_EN_B0, 1); - falcon_write(efx, ®, RX_CFG_REG_KER); +static bool falcon_loopback_link_poll(struct efx_nic *efx) +{ + struct efx_link_state old_state = efx->link_state; + + WARN_ON(!mutex_is_locked(&efx->mac_lock)); + WARN_ON(!LOOPBACK_INTERNAL(efx)); + + efx->link_state.fd = true; + efx->link_state.fc = efx->wanted_fc; + efx->link_state.up = true; + + if (efx->loopback_mode == LOOPBACK_GMAC) + efx->link_state.speed = 1000; + else + efx->link_state.speed = 10000; + + return !efx_link_state_equal(&efx->link_state, &old_state); } -int falcon_dma_stats(struct efx_nic *efx, unsigned int done_offset) +static int falcon_reconfigure_port(struct efx_nic *efx) { - efx_oword_t reg; - u32 *dma_done; - int i; + int rc; - if (disable_dma_stats) - return 0; + WARN_ON(efx_nic_rev(efx) > EFX_REV_FALCON_B0); - /* Statistics fetch will fail if the MAC is in TX drain */ - if (falcon_rev(efx) >= FALCON_REV_B0) { - efx_oword_t temp; - falcon_read(efx, &temp, MAC0_CTRL_REG_KER); - if (EFX_OWORD_FIELD(temp, TXFIFO_DRAIN_EN_B0)) - return 0; - } + /* Poll the PHY link state *before* reconfiguring it. This means we + * will pick up the correct speed (in loopback) to select the correct + * MAC. + */ + if (LOOPBACK_INTERNAL(efx)) + falcon_loopback_link_poll(efx); + else + efx->phy_op->poll(efx); - dma_done = (efx->stats_buffer.addr + done_offset); - *dma_done = FALCON_STATS_NOT_DONE; - wmb(); /* ensure done flag is clear */ + falcon_stop_nic_stats(efx); + falcon_deconfigure_mac_wrapper(efx); - /* Initiate DMA transfer of stats */ - EFX_POPULATE_OWORD_2(reg, - MAC_STAT_DMA_CMD, 1, - MAC_STAT_DMA_ADR, - efx->stats_buffer.dma_addr); - falcon_write(efx, ®, MAC0_STAT_DMA_REG_KER); + falcon_switch_mac(efx); - /* Wait for transfer to complete */ - for (i = 0; i < 400; i++) { - if (*(volatile u32 *)dma_done == FALCON_STATS_DONE) { - rmb(); /* Ensure the stats are valid. */ - return 0; - } - udelay(10); - } + efx->phy_op->reconfigure(efx); + rc = efx->mac_op->reconfigure(efx); + BUG_ON(rc); - EFX_ERR(efx, "timed out waiting for statistics\n"); - return -ETIMEDOUT; + falcon_start_nic_stats(efx); + + /* Synchronise efx->link_state with the kernel */ + efx_link_status_changed(efx); + + return 0; } /************************************************************************** @@ -2066,18 +699,18 @@ /* Wait for GMII access to complete */ static int falcon_gmii_wait(struct efx_nic *efx) { - efx_dword_t md_stat; + efx_oword_t md_stat; int count; /* wait upto 50ms - taken max from datasheet */ for (count = 0; count < 5000; count++) { - falcon_readl(efx, &md_stat, MD_STAT_REG_KER); - if (EFX_DWORD_FIELD(md_stat, MD_BSY) == 0) { - if (EFX_DWORD_FIELD(md_stat, MD_LNFL) != 0 || - EFX_DWORD_FIELD(md_stat, MD_BSERR) != 0) { + efx_reado(efx, &md_stat, FR_AB_MD_STAT); + if (EFX_OWORD_FIELD(md_stat, FRF_AB_MD_BSY) == 0) { + if (EFX_OWORD_FIELD(md_stat, FRF_AB_MD_LNFL) != 0 || + EFX_OWORD_FIELD(md_stat, FRF_AB_MD_BSERR) != 0) { EFX_ERR(efx, "error from GMII access " - EFX_DWORD_FMT"\n", - EFX_DWORD_VAL(md_stat)); + EFX_OWORD_FMT"\n", + EFX_OWORD_VAL(md_stat)); return -EIO; } return 0; @@ -2099,7 +732,7 @@ EFX_REGDUMP(efx, "writing MDIO %d register %d.%d with 0x%04x\n", prtad, devad, addr, value); - spin_lock_bh(&efx->phy_lock); + mutex_lock(&efx->mdio_lock); /* Check MDIO not currently being accessed */ rc = falcon_gmii_wait(efx); @@ -2107,34 +740,35 @@ goto out; /* Write the address/ID register */ - EFX_POPULATE_OWORD_1(reg, MD_PHY_ADR, addr); - falcon_write(efx, ®, MD_PHY_ADR_REG_KER); + EFX_POPULATE_OWORD_1(reg, FRF_AB_MD_PHY_ADR, addr); + efx_writeo(efx, ®, FR_AB_MD_PHY_ADR); - EFX_POPULATE_OWORD_2(reg, MD_PRT_ADR, prtad, MD_DEV_ADR, devad); - falcon_write(efx, ®, MD_ID_REG_KER); + EFX_POPULATE_OWORD_2(reg, FRF_AB_MD_PRT_ADR, prtad, + FRF_AB_MD_DEV_ADR, devad); + efx_writeo(efx, ®, FR_AB_MD_ID); /* Write data */ - EFX_POPULATE_OWORD_1(reg, MD_TXD, value); - falcon_write(efx, ®, MD_TXD_REG_KER); + EFX_POPULATE_OWORD_1(reg, FRF_AB_MD_TXD, value); + efx_writeo(efx, ®, FR_AB_MD_TXD); EFX_POPULATE_OWORD_2(reg, - MD_WRC, 1, - MD_GC, 0); - falcon_write(efx, ®, MD_CS_REG_KER); + FRF_AB_MD_WRC, 1, + FRF_AB_MD_GC, 0); + efx_writeo(efx, ®, FR_AB_MD_CS); /* Wait for data to be written */ rc = falcon_gmii_wait(efx); if (rc) { /* Abort the write operation */ EFX_POPULATE_OWORD_2(reg, - MD_WRC, 0, - MD_GC, 1); - falcon_write(efx, ®, MD_CS_REG_KER); + FRF_AB_MD_WRC, 0, + FRF_AB_MD_GC, 1); + efx_writeo(efx, ®, FR_AB_MD_CS); udelay(10); } - out: - spin_unlock_bh(&efx->phy_lock); +out: + mutex_unlock(&efx->mdio_lock); return rc; } @@ -2146,152 +780,139 @@ efx_oword_t reg; int rc; - spin_lock_bh(&efx->phy_lock); + mutex_lock(&efx->mdio_lock); /* Check MDIO not currently being accessed */ rc = falcon_gmii_wait(efx); if (rc) goto out; - EFX_POPULATE_OWORD_1(reg, MD_PHY_ADR, addr); - falcon_write(efx, ®, MD_PHY_ADR_REG_KER); + EFX_POPULATE_OWORD_1(reg, FRF_AB_MD_PHY_ADR, addr); + efx_writeo(efx, ®, FR_AB_MD_PHY_ADR); - EFX_POPULATE_OWORD_2(reg, MD_PRT_ADR, prtad, MD_DEV_ADR, devad); - falcon_write(efx, ®, MD_ID_REG_KER); + EFX_POPULATE_OWORD_2(reg, FRF_AB_MD_PRT_ADR, prtad, + FRF_AB_MD_DEV_ADR, devad); + efx_writeo(efx, ®, FR_AB_MD_ID); /* Request data to be read */ - EFX_POPULATE_OWORD_2(reg, MD_RDC, 1, MD_GC, 0); - falcon_write(efx, ®, MD_CS_REG_KER); + EFX_POPULATE_OWORD_2(reg, FRF_AB_MD_RDC, 1, FRF_AB_MD_GC, 0); + efx_writeo(efx, ®, FR_AB_MD_CS); /* Wait for data to become available */ rc = falcon_gmii_wait(efx); if (rc == 0) { - falcon_read(efx, ®, MD_RXD_REG_KER); - rc = EFX_OWORD_FIELD(reg, MD_RXD); + efx_reado(efx, ®, FR_AB_MD_RXD); + rc = EFX_OWORD_FIELD(reg, FRF_AB_MD_RXD); EFX_REGDUMP(efx, "read from MDIO %d register %d.%d, got %04x\n", prtad, devad, addr, rc); } else { /* Abort the read operation */ EFX_POPULATE_OWORD_2(reg, - MD_RIC, 0, - MD_GC, 1); - falcon_write(efx, ®, MD_CS_REG_KER); + FRF_AB_MD_RIC, 0, + FRF_AB_MD_GC, 1); + efx_writeo(efx, ®, FR_AB_MD_CS); EFX_LOG(efx, "read from MDIO %d register %d.%d, got error %d\n", prtad, devad, addr, rc); } - out: - spin_unlock_bh(&efx->phy_lock); +out: + mutex_unlock(&efx->mdio_lock); return rc; } -static int falcon_probe_phy(struct efx_nic *efx) +static void falcon_clock_mac(struct efx_nic *efx) { - switch (efx->phy_type) { - case PHY_TYPE_SFX7101: - efx->phy_op = &falcon_sfx7101_phy_ops; - break; - case PHY_TYPE_SFT9001A: - case PHY_TYPE_SFT9001B: - efx->phy_op = &falcon_sft9001_phy_ops; - break; - case PHY_TYPE_QT2022C2: - case PHY_TYPE_QT2025C: - efx->phy_op = &falcon_xfp_phy_ops; - break; - default: - EFX_ERR(efx, "Unknown PHY type %d\n", - efx->phy_type); - return -1; - } - - if (efx->phy_op->macs & EFX_XMAC) - efx->loopback_modes |= ((1 << LOOPBACK_XGMII) | - (1 << LOOPBACK_XGXS) | - (1 << LOOPBACK_XAUI)); - if (efx->phy_op->macs & EFX_GMAC) - efx->loopback_modes |= (1 << LOOPBACK_GMAC); - efx->loopback_modes |= efx->phy_op->loopbacks; + unsigned strap_val; + efx_oword_t nic_stat; - return 0; + /* Configure the NIC generated MAC clock correctly */ + efx_reado(efx, &nic_stat, FR_AB_NIC_STAT); + strap_val = EFX_IS10G(efx) ? 5 : 3; + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) { + EFX_SET_OWORD_FIELD(nic_stat, FRF_BB_EE_STRAP_EN, 1); + EFX_SET_OWORD_FIELD(nic_stat, FRF_BB_EE_STRAP, strap_val); + efx_writeo(efx, &nic_stat, FR_AB_NIC_STAT); + } else { + /* Falcon A1 does not support 1G/10G speed switching + * and must not be used with a PHY that does. */ + BUG_ON(EFX_OWORD_FIELD(nic_stat, FRF_AB_STRAP_PINS) != + strap_val); + } } -int falcon_switch_mac(struct efx_nic *efx) +static void falcon_switch_mac(struct efx_nic *efx) { struct efx_mac_operations *old_mac_op = efx->mac_op; - efx_oword_t nic_stat; - unsigned strap_val; - int rc = 0; - - /* Don't try to fetch MAC stats while we're switching MACs */ - efx_stats_disable(efx); - - /* Internal loopbacks override the phy speed setting */ - if (efx->loopback_mode == LOOPBACK_GMAC) { - efx->link_speed = 1000; - efx->link_fd = true; - } else if (LOOPBACK_INTERNAL(efx)) { - efx->link_speed = 10000; - efx->link_fd = true; - } + struct falcon_nic_data *nic_data = efx->nic_data; + unsigned int stats_done_offset; WARN_ON(!mutex_is_locked(&efx->mac_lock)); + WARN_ON(nic_data->stats_disable_count == 0); + efx->mac_op = (EFX_IS10G(efx) ? &falcon_xmac_operations : &falcon_gmac_operations); - /* Always push the NIC_STAT_REG setting even if the mac hasn't - * changed, because this function is run post online reset */ - falcon_read(efx, &nic_stat, NIC_STAT_REG); - strap_val = EFX_IS10G(efx) ? 5 : 3; - if (falcon_rev(efx) >= FALCON_REV_B0) { - EFX_SET_OWORD_FIELD(nic_stat, EE_STRAP_EN, 1); - EFX_SET_OWORD_FIELD(nic_stat, EE_STRAP_OVR, strap_val); - falcon_write(efx, &nic_stat, NIC_STAT_REG); - } else { - /* Falcon A1 does not support 1G/10G speed switching - * and must not be used with a PHY that does. */ - BUG_ON(EFX_OWORD_FIELD(nic_stat, STRAP_PINS) != strap_val); - } + if (EFX_IS10G(efx)) + stats_done_offset = XgDmaDone_offset; + else + stats_done_offset = GDmaDone_offset; + nic_data->stats_dma_done = efx->stats_buffer.addr + stats_done_offset; if (old_mac_op == efx->mac_op) - goto out; + return; + + falcon_clock_mac(efx); EFX_LOG(efx, "selected %cMAC\n", EFX_IS10G(efx) ? 'X' : 'G'); /* Not all macs support a mac-level link state */ - efx->mac_up = true; - - rc = falcon_reset_macs(efx); -out: - efx_stats_enable(efx); - return rc; + efx->xmac_poll_required = false; + falcon_reset_macs(efx); } /* This call is responsible for hooking in the MAC and PHY operations */ -int falcon_probe_port(struct efx_nic *efx) +static int falcon_probe_port(struct efx_nic *efx) { int rc; - /* Hook in PHY operations table */ - rc = falcon_probe_phy(efx); - if (rc) - return rc; + switch (efx->phy_type) { + case PHY_TYPE_SFX7101: + efx->phy_op = &falcon_sfx7101_phy_ops; + break; + case PHY_TYPE_SFT9001A: + case PHY_TYPE_SFT9001B: + efx->phy_op = &falcon_sft9001_phy_ops; + break; + case PHY_TYPE_QT2022C2: + case PHY_TYPE_QT2025C: + efx->phy_op = &falcon_qt202x_phy_ops; + break; + default: + EFX_ERR(efx, "Unknown PHY type %d\n", + efx->phy_type); + return -ENODEV; + } - /* Set up MDIO structure for PHY */ - efx->mdio.mmds = efx->phy_op->mmds; - efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; + /* Fill out MDIO structure and loopback modes */ efx->mdio.mdio_read = falcon_mdio_read; efx->mdio.mdio_write = falcon_mdio_write; + rc = efx->phy_op->probe(efx); + if (rc != 0) + return rc; + + /* Initial assumption */ + efx->link_state.speed = 10000; + efx->link_state.fd = true; /* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */ - if (falcon_rev(efx) >= FALCON_REV_B0) + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) efx->wanted_fc = EFX_FC_RX | EFX_FC_TX; else efx->wanted_fc = EFX_FC_RX; /* Allocate buffer for stats */ - rc = falcon_alloc_buffer(efx, &efx->stats_buffer, - FALCON_MAC_STATS_SIZE); + rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer, + FALCON_MAC_STATS_SIZE); if (rc) return rc; EFX_LOG(efx, "stats buffer at %llx (virt %p phys %llx)\n", @@ -2302,40 +923,20 @@ return 0; } -void falcon_remove_port(struct efx_nic *efx) -{ - falcon_free_buffer(efx, &efx->stats_buffer); -} - -/************************************************************************** - * - * Multicast filtering - * - ************************************************************************** - */ - -void falcon_set_multicast_hash(struct efx_nic *efx) +static void falcon_remove_port(struct efx_nic *efx) { - union efx_multicast_hash *mc_hash = &efx->multicast_hash; - - /* Broadcast packets go through the multicast hash filter. - * ether_crc_le() of the broadcast address is 0xbe2612ff - * so we always add bit 0xff to the mask. - */ - set_bit_le(0xff, mc_hash->byte); - - falcon_write(efx, &mc_hash->oword[0], MAC_MCAST_HASH_REG0_KER); - falcon_write(efx, &mc_hash->oword[1], MAC_MCAST_HASH_REG1_KER); + efx->phy_op->remove(efx); + efx_nic_free_buffer(efx, &efx->stats_buffer); } - /************************************************************************** * * Falcon test code * **************************************************************************/ -int falcon_read_nvram(struct efx_nic *efx, struct falcon_nvconfig *nvconfig_out) +static int +falcon_read_nvram(struct efx_nic *efx, struct falcon_nvconfig *nvconfig_out) { struct falcon_nvconfig *nvconfig; struct efx_spi_device *spi; @@ -2351,10 +952,10 @@ region = kmalloc(FALCON_NVCONFIG_END, GFP_KERNEL); if (!region) return -ENOMEM; - nvconfig = region + NVCONFIG_OFFSET; + nvconfig = region + FALCON_NVCONFIG_OFFSET; mutex_lock(&efx->spi_lock); - rc = falcon_spi_read(spi, 0, FALCON_NVCONFIG_END, NULL, region); + rc = falcon_spi_read(efx, spi, 0, FALCON_NVCONFIG_END, NULL, region); mutex_unlock(&efx->spi_lock); if (rc) { EFX_ERR(efx, "Failed to read %s\n", @@ -2367,7 +968,7 @@ struct_ver = le16_to_cpu(nvconfig->board_struct_ver); rc = -EINVAL; - if (magic_num != NVCONFIG_BOARD_MAGIC_NUM) { + if (magic_num != FALCON_NVCONFIG_BOARD_MAGIC_NUM) { EFX_ERR(efx, "NVRAM bad magic 0x%x\n", magic_num); goto out; } @@ -2398,107 +999,54 @@ return rc; } -/* Registers tested in the falcon register test */ -static struct { - unsigned address; - efx_oword_t mask; -} efx_test_registers[] = { - { ADR_REGION_REG_KER, +static int falcon_test_nvram(struct efx_nic *efx) +{ + return falcon_read_nvram(efx, NULL); +} + +static const struct efx_nic_register_test falcon_b0_register_tests[] = { + { FR_AZ_ADR_REGION, EFX_OWORD32(0x0001FFFF, 0x0001FFFF, 0x0001FFFF, 0x0001FFFF) }, - { RX_CFG_REG_KER, + { FR_AZ_RX_CFG, EFX_OWORD32(0xFFFFFFFE, 0x00017FFF, 0x00000000, 0x00000000) }, - { TX_CFG_REG_KER, + { FR_AZ_TX_CFG, EFX_OWORD32(0x7FFF0037, 0x00000000, 0x00000000, 0x00000000) }, - { TX_CFG2_REG_KER, + { FR_AZ_TX_RESERVED, EFX_OWORD32(0xFFFEFE80, 0x1FFFFFFF, 0x020000FE, 0x007FFFFF) }, - { MAC0_CTRL_REG_KER, + { FR_AB_MAC_CTRL, EFX_OWORD32(0xFFFF0000, 0x00000000, 0x00000000, 0x00000000) }, - { SRM_TX_DC_CFG_REG_KER, + { FR_AZ_SRM_TX_DC_CFG, EFX_OWORD32(0x001FFFFF, 0x00000000, 0x00000000, 0x00000000) }, - { RX_DC_CFG_REG_KER, + { FR_AZ_RX_DC_CFG, EFX_OWORD32(0x0000000F, 0x00000000, 0x00000000, 0x00000000) }, - { RX_DC_PF_WM_REG_KER, + { FR_AZ_RX_DC_PF_WM, EFX_OWORD32(0x000003FF, 0x00000000, 0x00000000, 0x00000000) }, - { DP_CTRL_REG, + { FR_BZ_DP_CTRL, EFX_OWORD32(0x00000FFF, 0x00000000, 0x00000000, 0x00000000) }, - { GM_CFG2_REG, + { FR_AB_GM_CFG2, EFX_OWORD32(0x00007337, 0x00000000, 0x00000000, 0x00000000) }, - { GMF_CFG0_REG, + { FR_AB_GMF_CFG0, EFX_OWORD32(0x00001F1F, 0x00000000, 0x00000000, 0x00000000) }, - { XM_GLB_CFG_REG, + { FR_AB_XM_GLB_CFG, EFX_OWORD32(0x00000C68, 0x00000000, 0x00000000, 0x00000000) }, - { XM_TX_CFG_REG, + { FR_AB_XM_TX_CFG, EFX_OWORD32(0x00080164, 0x00000000, 0x00000000, 0x00000000) }, - { XM_RX_CFG_REG, + { FR_AB_XM_RX_CFG, EFX_OWORD32(0x07100A0C, 0x00000000, 0x00000000, 0x00000000) }, - { XM_RX_PARAM_REG, + { FR_AB_XM_RX_PARAM, EFX_OWORD32(0x00001FF8, 0x00000000, 0x00000000, 0x00000000) }, - { XM_FC_REG, + { FR_AB_XM_FC, EFX_OWORD32(0xFFFF0001, 0x00000000, 0x00000000, 0x00000000) }, - { XM_ADR_LO_REG, + { FR_AB_XM_ADR_LO, EFX_OWORD32(0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000) }, - { XX_SD_CTL_REG, + { FR_AB_XX_SD_CTL, EFX_OWORD32(0x0003FF0F, 0x00000000, 0x00000000, 0x00000000) }, }; -static bool efx_masked_compare_oword(const efx_oword_t *a, const efx_oword_t *b, - const efx_oword_t *mask) -{ - return ((a->u64[0] ^ b->u64[0]) & mask->u64[0]) || - ((a->u64[1] ^ b->u64[1]) & mask->u64[1]); -} - -int falcon_test_registers(struct efx_nic *efx) +static int falcon_b0_test_registers(struct efx_nic *efx) { - unsigned address = 0, i, j; - efx_oword_t mask, imask, original, reg, buf; - - /* Falcon should be in loopback to isolate the XMAC from the PHY */ - WARN_ON(!LOOPBACK_INTERNAL(efx)); - - for (i = 0; i < ARRAY_SIZE(efx_test_registers); ++i) { - address = efx_test_registers[i].address; - mask = imask = efx_test_registers[i].mask; - EFX_INVERT_OWORD(imask); - - falcon_read(efx, &original, address); - - /* bit sweep on and off */ - for (j = 0; j < 128; j++) { - if (!EFX_EXTRACT_OWORD32(mask, j, j)) - continue; - - /* Test this testable bit can be set in isolation */ - EFX_AND_OWORD(reg, original, mask); - EFX_SET_OWORD32(reg, j, j, 1); - - falcon_write(efx, ®, address); - falcon_read(efx, &buf, address); - - if (efx_masked_compare_oword(®, &buf, &mask)) - goto fail; - - /* Test this testable bit can be cleared in isolation */ - EFX_OR_OWORD(reg, original, mask); - EFX_SET_OWORD32(reg, j, j, 0); - - falcon_write(efx, ®, address); - falcon_read(efx, &buf, address); - - if (efx_masked_compare_oword(®, &buf, &mask)) - goto fail; - } - - falcon_write(efx, &original, address); - } - - return 0; - -fail: - EFX_ERR(efx, "wrote "EFX_OWORD_FMT" read "EFX_OWORD_FMT - " at address 0x%x mask "EFX_OWORD_FMT"\n", EFX_OWORD_VAL(reg), - EFX_OWORD_VAL(buf), address, EFX_OWORD_VAL(mask)); - return -EIO; + return efx_nic_test_registers(efx, falcon_b0_register_tests, + ARRAY_SIZE(falcon_b0_register_tests)); } /************************************************************************** @@ -2510,13 +1058,13 @@ /* Resets NIC to known state. This routine must be called in process * context and is allowed to sleep. */ -int falcon_reset_hw(struct efx_nic *efx, enum reset_type method) +static int falcon_reset_hw(struct efx_nic *efx, enum reset_type method) { struct falcon_nic_data *nic_data = efx->nic_data; efx_oword_t glb_ctl_reg_ker; int rc; - EFX_LOG(efx, "performing hardware reset (%d)\n", method); + EFX_LOG(efx, "performing %s hardware reset\n", RESET_TYPE(method)); /* Initiate device reset */ if (method == RESET_TYPE_WORLD) { @@ -2526,7 +1074,7 @@ "function prior to hardware reset\n"); goto fail1; } - if (FALCON_IS_DUAL_FUNC(efx)) { + if (efx_nic_is_dual_func(efx)) { rc = pci_save_state(nic_data->pci_dev2); if (rc) { EFX_ERR(efx, "failed to backup PCI state of " @@ -2537,29 +1085,31 @@ } EFX_POPULATE_OWORD_2(glb_ctl_reg_ker, - EXT_PHY_RST_DUR, 0x7, - SWRST, 1); + FRF_AB_EXT_PHY_RST_DUR, + FFE_AB_EXT_PHY_RST_DUR_10240US, + FRF_AB_SWRST, 1); } else { - int reset_phy = (method == RESET_TYPE_INVISIBLE ? - EXCLUDE_FROM_RESET : 0); - EFX_POPULATE_OWORD_7(glb_ctl_reg_ker, - EXT_PHY_RST_CTL, reset_phy, - PCIE_CORE_RST_CTL, EXCLUDE_FROM_RESET, - PCIE_NSTCK_RST_CTL, EXCLUDE_FROM_RESET, - PCIE_SD_RST_CTL, EXCLUDE_FROM_RESET, - EE_RST_CTL, EXCLUDE_FROM_RESET, - EXT_PHY_RST_DUR, 0x7 /* 10ms */, - SWRST, 1); + /* exclude PHY from "invisible" reset */ + FRF_AB_EXT_PHY_RST_CTL, + method == RESET_TYPE_INVISIBLE, + /* exclude EEPROM/flash and PCIe */ + FRF_AB_PCIE_CORE_RST_CTL, 1, + FRF_AB_PCIE_NSTKY_RST_CTL, 1, + FRF_AB_PCIE_SD_RST_CTL, 1, + FRF_AB_EE_RST_CTL, 1, + FRF_AB_EXT_PHY_RST_DUR, + FFE_AB_EXT_PHY_RST_DUR_10240US, + FRF_AB_SWRST, 1); } - falcon_write(efx, &glb_ctl_reg_ker, GLB_CTL_REG_KER); + efx_writeo(efx, &glb_ctl_reg_ker, FR_AB_GLB_CTL); EFX_LOG(efx, "waiting for hardware reset\n"); schedule_timeout_uninterruptible(HZ / 20); /* Restore PCI configuration if needed */ if (method == RESET_TYPE_WORLD) { - if (FALCON_IS_DUAL_FUNC(efx)) { + if (efx_nic_is_dual_func(efx)) { rc = pci_restore_state(nic_data->pci_dev2); if (rc) { EFX_ERR(efx, "failed to restore PCI config for " @@ -2577,8 +1127,8 @@ } /* Assert that reset complete */ - falcon_read(efx, &glb_ctl_reg_ker, GLB_CTL_REG_KER); - if (EFX_OWORD_FIELD(glb_ctl_reg_ker, SWRST) != 0) { + efx_reado(efx, &glb_ctl_reg_ker, FR_AB_GLB_CTL); + if (EFX_OWORD_FIELD(glb_ctl_reg_ker, FRF_AB_SWRST) != 0) { rc = -ETIMEDOUT; EFX_ERR(efx, "timed out waiting for hardware reset\n"); goto fail5; @@ -2597,6 +1147,44 @@ return rc; } +static void falcon_monitor(struct efx_nic *efx) +{ + bool link_changed; + int rc; + + BUG_ON(!mutex_is_locked(&efx->mac_lock)); + + rc = falcon_board(efx)->type->monitor(efx); + if (rc) { + EFX_ERR(efx, "Board sensor %s; shutting down PHY\n", + (rc == -ERANGE) ? "reported fault" : "failed"); + efx->phy_mode |= PHY_MODE_LOW_POWER; + rc = __efx_reconfigure_port(efx); + WARN_ON(rc); + } + + if (LOOPBACK_INTERNAL(efx)) + link_changed = falcon_loopback_link_poll(efx); + else + link_changed = efx->phy_op->poll(efx); + + if (link_changed) { + falcon_stop_nic_stats(efx); + falcon_deconfigure_mac_wrapper(efx); + + falcon_switch_mac(efx); + rc = efx->mac_op->reconfigure(efx); + BUG_ON(rc); + + falcon_start_nic_stats(efx); + + efx_link_status_changed(efx); + } + + if (EFX_IS10G(efx)) + falcon_poll_xmac(efx); +} + /* Zeroes out the SRAM contents. This routine must be called in * process context and is allowed to sleep. */ @@ -2606,16 +1194,16 @@ int count; /* Set the SRAM wake/sleep GPIO appropriately. */ - falcon_read(efx, &gpio_cfg_reg_ker, GPIO_CTL_REG_KER); - EFX_SET_OWORD_FIELD(gpio_cfg_reg_ker, GPIO1_OEN, 1); - EFX_SET_OWORD_FIELD(gpio_cfg_reg_ker, GPIO1_OUT, 1); - falcon_write(efx, &gpio_cfg_reg_ker, GPIO_CTL_REG_KER); + efx_reado(efx, &gpio_cfg_reg_ker, FR_AB_GPIO_CTL); + EFX_SET_OWORD_FIELD(gpio_cfg_reg_ker, FRF_AB_GPIO1_OEN, 1); + EFX_SET_OWORD_FIELD(gpio_cfg_reg_ker, FRF_AB_GPIO1_OUT, 1); + efx_writeo(efx, &gpio_cfg_reg_ker, FR_AB_GPIO_CTL); /* Initiate SRAM reset */ EFX_POPULATE_OWORD_2(srm_cfg_reg_ker, - SRAM_OOB_BT_INIT_EN, 1, - SRM_NUM_BANKS_AND_BANK_SIZE, 0); - falcon_write(efx, &srm_cfg_reg_ker, SRM_CFG_REG_KER); + FRF_AZ_SRM_INIT_EN, 1, + FRF_AZ_SRM_NB_SZ, 0); + efx_writeo(efx, &srm_cfg_reg_ker, FR_AZ_SRM_CFG); /* Wait for SRAM reset to complete */ count = 0; @@ -2626,8 +1214,8 @@ schedule_timeout_uninterruptible(HZ / 50); /* Check for reset complete */ - falcon_read(efx, &srm_cfg_reg_ker, SRM_CFG_REG_KER); - if (!EFX_OWORD_FIELD(srm_cfg_reg_ker, SRAM_OOB_BT_INIT_EN)) { + efx_reado(efx, &srm_cfg_reg_ker, FR_AZ_SRM_CFG); + if (!EFX_OWORD_FIELD(srm_cfg_reg_ker, FRF_AZ_SRM_INIT_EN)) { EFX_LOG(efx, "SRAM reset complete\n"); return 0; @@ -2663,8 +1251,6 @@ spi_device->block_size = 1 << SPI_DEV_TYPE_FIELD(device_type, SPI_DEV_TYPE_BLOCK_SIZE); - - spi_device->efx = efx; } else { spi_device = NULL; } @@ -2674,7 +1260,6 @@ return 0; } - static void falcon_remove_spi_devices(struct efx_nic *efx) { kfree(efx->spi_eeprom); @@ -2712,16 +1297,16 @@ board_rev = le16_to_cpu(v2->board_revision); if (le16_to_cpu(nvconfig->board_struct_ver) >= 3) { - __le32 fl = v3->spi_device_type[EE_SPI_FLASH]; - __le32 ee = v3->spi_device_type[EE_SPI_EEPROM]; - rc = falcon_spi_device_init(efx, &efx->spi_flash, - EE_SPI_FLASH, - le32_to_cpu(fl)); + rc = falcon_spi_device_init( + efx, &efx->spi_flash, FFE_AB_SPI_DEVICE_FLASH, + le32_to_cpu(v3->spi_device_type + [FFE_AB_SPI_DEVICE_FLASH])); if (rc) goto fail2; - rc = falcon_spi_device_init(efx, &efx->spi_eeprom, - EE_SPI_EEPROM, - le32_to_cpu(ee)); + rc = falcon_spi_device_init( + efx, &efx->spi_eeprom, FFE_AB_SPI_DEVICE_EEPROM, + le32_to_cpu(v3->spi_device_type + [FFE_AB_SPI_DEVICE_EEPROM])); if (rc) goto fail2; } @@ -2732,7 +1317,9 @@ EFX_LOG(efx, "PHY is %d phy_id %d\n", efx->phy_type, efx->mdio.prtad); - efx_set_board_info(efx, board_rev); + rc = falcon_probe_board(efx, board_rev); + if (rc) + goto fail2; kfree(nvconfig); return 0; @@ -2744,89 +1331,49 @@ return rc; } -/* Probe the NIC variant (revision, ASIC vs FPGA, function count, port - * count, port speed). Set workaround and feature flags accordingly. - */ -static int falcon_probe_nic_variant(struct efx_nic *efx) -{ - efx_oword_t altera_build; - efx_oword_t nic_stat; - - falcon_read(efx, &altera_build, ALTERA_BUILD_REG_KER); - if (EFX_OWORD_FIELD(altera_build, VER_ALL)) { - EFX_ERR(efx, "Falcon FPGA not supported\n"); - return -ENODEV; - } - - falcon_read(efx, &nic_stat, NIC_STAT_REG); - - switch (falcon_rev(efx)) { - case FALCON_REV_A0: - case 0xff: - EFX_ERR(efx, "Falcon rev A0 not supported\n"); - return -ENODEV; - - case FALCON_REV_A1: - if (EFX_OWORD_FIELD(nic_stat, STRAP_PCIE) == 0) { - EFX_ERR(efx, "Falcon rev A1 PCI-X not supported\n"); - return -ENODEV; - } - break; - - case FALCON_REV_B0: - break; - - default: - EFX_ERR(efx, "Unknown Falcon rev %d\n", falcon_rev(efx)); - return -ENODEV; - } - - /* Initial assumed speed */ - efx->link_speed = EFX_OWORD_FIELD(nic_stat, STRAP_10G) ? 10000 : 1000; - - return 0; -} - /* Probe all SPI devices on the NIC */ static void falcon_probe_spi_devices(struct efx_nic *efx) { efx_oword_t nic_stat, gpio_ctl, ee_vpd_cfg; int boot_dev; - falcon_read(efx, &gpio_ctl, GPIO_CTL_REG_KER); - falcon_read(efx, &nic_stat, NIC_STAT_REG); - falcon_read(efx, &ee_vpd_cfg, EE_VPD_CFG_REG_KER); - - if (EFX_OWORD_FIELD(gpio_ctl, BOOTED_USING_NVDEVICE)) { - boot_dev = (EFX_OWORD_FIELD(nic_stat, SF_PRST) ? - EE_SPI_FLASH : EE_SPI_EEPROM); + efx_reado(efx, &gpio_ctl, FR_AB_GPIO_CTL); + efx_reado(efx, &nic_stat, FR_AB_NIC_STAT); + efx_reado(efx, &ee_vpd_cfg, FR_AB_EE_VPD_CFG0); + + if (EFX_OWORD_FIELD(gpio_ctl, FRF_AB_GPIO3_PWRUP_VALUE)) { + boot_dev = (EFX_OWORD_FIELD(nic_stat, FRF_AB_SF_PRST) ? + FFE_AB_SPI_DEVICE_FLASH : FFE_AB_SPI_DEVICE_EEPROM); EFX_LOG(efx, "Booted from %s\n", - boot_dev == EE_SPI_FLASH ? "flash" : "EEPROM"); + boot_dev == FFE_AB_SPI_DEVICE_FLASH ? "flash" : "EEPROM"); } else { /* Disable VPD and set clock dividers to safe * values for initial programming. */ boot_dev = -1; EFX_LOG(efx, "Booted from internal ASIC settings;" " setting SPI config\n"); - EFX_POPULATE_OWORD_3(ee_vpd_cfg, EE_VPD_EN, 0, + EFX_POPULATE_OWORD_3(ee_vpd_cfg, FRF_AB_EE_VPD_EN, 0, /* 125 MHz / 7 ~= 20 MHz */ - EE_SF_CLOCK_DIV, 7, + FRF_AB_EE_SF_CLOCK_DIV, 7, /* 125 MHz / 63 ~= 2 MHz */ - EE_EE_CLOCK_DIV, 63); - falcon_write(efx, &ee_vpd_cfg, EE_VPD_CFG_REG_KER); + FRF_AB_EE_EE_CLOCK_DIV, 63); + efx_writeo(efx, &ee_vpd_cfg, FR_AB_EE_VPD_CFG0); } - if (boot_dev == EE_SPI_FLASH) - falcon_spi_device_init(efx, &efx->spi_flash, EE_SPI_FLASH, + if (boot_dev == FFE_AB_SPI_DEVICE_FLASH) + falcon_spi_device_init(efx, &efx->spi_flash, + FFE_AB_SPI_DEVICE_FLASH, default_flash_type); - if (boot_dev == EE_SPI_EEPROM) - falcon_spi_device_init(efx, &efx->spi_eeprom, EE_SPI_EEPROM, + if (boot_dev == FFE_AB_SPI_DEVICE_EEPROM) + falcon_spi_device_init(efx, &efx->spi_eeprom, + FFE_AB_SPI_DEVICE_EEPROM, large_eeprom_type); } -int falcon_probe_nic(struct efx_nic *efx) +static int falcon_probe_nic(struct efx_nic *efx) { struct falcon_nic_data *nic_data; + struct falcon_board *board; int rc; /* Allocate storage for hardware specific data */ @@ -2835,15 +1382,33 @@ return -ENOMEM; efx->nic_data = nic_data; - /* Determine number of ports etc. */ - rc = falcon_probe_nic_variant(efx); - if (rc) + rc = -ENODEV; + + if (efx_nic_fpga_ver(efx) != 0) { + EFX_ERR(efx, "Falcon FPGA not supported\n"); goto fail1; + } - /* Probe secondary function if expected */ - if (FALCON_IS_DUAL_FUNC(efx)) { - struct pci_dev *dev = pci_dev_get(efx->pci_dev); + if (efx_nic_rev(efx) <= EFX_REV_FALCON_A1) { + efx_oword_t nic_stat; + struct pci_dev *dev; + u8 pci_rev = efx->pci_dev->revision; + + if ((pci_rev == 0xff) || (pci_rev == 0)) { + EFX_ERR(efx, "Falcon rev A0 not supported\n"); + goto fail1; + } + efx_reado(efx, &nic_stat, FR_AB_NIC_STAT); + if (EFX_OWORD_FIELD(nic_stat, FRF_AB_STRAP_10G) == 0) { + EFX_ERR(efx, "Falcon rev A1 1G not supported\n"); + goto fail1; + } + if (EFX_OWORD_FIELD(nic_stat, FRF_AA_STRAP_PCIE) == 0) { + EFX_ERR(efx, "Falcon rev A1 PCI-X not supported\n"); + goto fail1; + } + dev = pci_dev_get(efx->pci_dev); while ((dev = pci_get_device(EFX_VENDID_SFC, FALCON_A_S_DEVID, dev))) { if (dev->bus == efx->pci_dev->bus && @@ -2867,7 +1432,7 @@ } /* Allocate memory for INT_KER */ - rc = falcon_alloc_buffer(efx, &efx->irq_status, sizeof(efx_oword_t)); + rc = efx_nic_alloc_buffer(efx, &efx->irq_status, sizeof(efx_oword_t)); if (rc) goto fail4; BUG_ON(efx->irq_status.dma_addr & 0x0f); @@ -2884,21 +1449,36 @@ goto fail5; /* Initialise I2C adapter */ - efx->i2c_adap.owner = THIS_MODULE; - nic_data->i2c_data = falcon_i2c_bit_operations; - nic_data->i2c_data.data = efx; - efx->i2c_adap.algo_data = &nic_data->i2c_data; - efx->i2c_adap.dev.parent = &efx->pci_dev->dev; - strlcpy(efx->i2c_adap.name, "SFC4000 GPIO", sizeof(efx->i2c_adap.name)); - rc = i2c_bit_add_bus(&efx->i2c_adap); + board = falcon_board(efx); + board->i2c_adap.owner = THIS_MODULE; + board->i2c_data = falcon_i2c_bit_operations; + board->i2c_data.data = efx; + board->i2c_adap.algo_data = &board->i2c_data; + board->i2c_adap.dev.parent = &efx->pci_dev->dev; + strlcpy(board->i2c_adap.name, "SFC4000 GPIO", + sizeof(board->i2c_adap.name)); + rc = i2c_bit_add_bus(&board->i2c_adap); if (rc) goto fail5; + rc = falcon_board(efx)->type->init(efx); + if (rc) { + EFX_ERR(efx, "failed to initialise board\n"); + goto fail6; + } + + nic_data->stats_disable_count = 1; + setup_timer(&nic_data->stats_timer, &falcon_stats_timer_func, + (unsigned long)efx); + return 0; + fail6: + BUG_ON(i2c_del_adapter(&board->i2c_adap)); + memset(&board->i2c_adap, 0, sizeof(board->i2c_adap)); fail5: falcon_remove_spi_devices(efx); - falcon_free_buffer(efx, &efx->irq_status); + efx_nic_free_buffer(efx, &efx->irq_status); fail4: fail3: if (nic_data->pci_dev2) { @@ -2911,166 +1491,147 @@ return rc; } +static void falcon_init_rx_cfg(struct efx_nic *efx) +{ + /* Prior to Siena the RX DMA engine will split each frame at + * intervals of RX_USR_BUF_SIZE (32-byte units). We set it to + * be so large that that never happens. */ + const unsigned huge_buf_size = (3 * 4096) >> 5; + /* RX control FIFO thresholds (32 entries) */ + const unsigned ctrl_xon_thr = 20; + const unsigned ctrl_xoff_thr = 25; + /* RX data FIFO thresholds (256-byte units; size varies) */ + int data_xon_thr = efx_nic_rx_xon_thresh >> 8; + int data_xoff_thr = efx_nic_rx_xoff_thresh >> 8; + efx_oword_t reg; + + efx_reado(efx, ®, FR_AZ_RX_CFG); + if (efx_nic_rev(efx) <= EFX_REV_FALCON_A1) { + /* Data FIFO size is 5.5K */ + if (data_xon_thr < 0) + data_xon_thr = 512 >> 8; + if (data_xoff_thr < 0) + data_xoff_thr = 2048 >> 8; + EFX_SET_OWORD_FIELD(reg, FRF_AA_RX_DESC_PUSH_EN, 0); + EFX_SET_OWORD_FIELD(reg, FRF_AA_RX_USR_BUF_SIZE, + huge_buf_size); + EFX_SET_OWORD_FIELD(reg, FRF_AA_RX_XON_MAC_TH, data_xon_thr); + EFX_SET_OWORD_FIELD(reg, FRF_AA_RX_XOFF_MAC_TH, data_xoff_thr); + EFX_SET_OWORD_FIELD(reg, FRF_AA_RX_XON_TX_TH, ctrl_xon_thr); + EFX_SET_OWORD_FIELD(reg, FRF_AA_RX_XOFF_TX_TH, ctrl_xoff_thr); + } else { + /* Data FIFO size is 80K; register fields moved */ + if (data_xon_thr < 0) + data_xon_thr = 27648 >> 8; /* ~3*max MTU */ + if (data_xoff_thr < 0) + data_xoff_thr = 54272 >> 8; /* ~80Kb - 3*max MTU */ + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_DESC_PUSH_EN, 0); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_USR_BUF_SIZE, + huge_buf_size); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XON_MAC_TH, data_xon_thr); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_MAC_TH, data_xoff_thr); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XON_TX_TH, ctrl_xon_thr); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_XOFF_TX_TH, ctrl_xoff_thr); + EFX_SET_OWORD_FIELD(reg, FRF_BZ_RX_INGR_EN, 1); + } + /* Always enable XOFF signal from RX FIFO. We enable + * or disable transmission of pause frames at the MAC. */ + EFX_SET_OWORD_FIELD(reg, FRF_AZ_RX_XOFF_MAC_EN, 1); + efx_writeo(efx, ®, FR_AZ_RX_CFG); +} + /* This call performs hardware-specific global initialisation, such as * defining the descriptor cache sizes and number of RSS channels. * It does not set up any buffers, descriptor rings or event queues. */ -int falcon_init_nic(struct efx_nic *efx) +static int falcon_init_nic(struct efx_nic *efx) { efx_oword_t temp; - unsigned thresh; int rc; /* Use on-chip SRAM */ - falcon_read(efx, &temp, NIC_STAT_REG); - EFX_SET_OWORD_FIELD(temp, ONCHIP_SRAM, 1); - falcon_write(efx, &temp, NIC_STAT_REG); + efx_reado(efx, &temp, FR_AB_NIC_STAT); + EFX_SET_OWORD_FIELD(temp, FRF_AB_ONCHIP_SRAM, 1); + efx_writeo(efx, &temp, FR_AB_NIC_STAT); /* Set the source of the GMAC clock */ - if (falcon_rev(efx) == FALCON_REV_B0) { - falcon_read(efx, &temp, GPIO_CTL_REG_KER); - EFX_SET_OWORD_FIELD(temp, GPIO_USE_NIC_CLK, true); - falcon_write(efx, &temp, GPIO_CTL_REG_KER); + if (efx_nic_rev(efx) == EFX_REV_FALCON_B0) { + efx_reado(efx, &temp, FR_AB_GPIO_CTL); + EFX_SET_OWORD_FIELD(temp, FRF_AB_USE_NIC_CLK, true); + efx_writeo(efx, &temp, FR_AB_GPIO_CTL); } - /* Set buffer table mode */ - EFX_POPULATE_OWORD_1(temp, BUF_TBL_MODE, BUF_TBL_MODE_FULL); - falcon_write(efx, &temp, BUF_TBL_CFG_REG_KER); + /* Select the correct MAC */ + falcon_clock_mac(efx); rc = falcon_reset_sram(efx); if (rc) return rc; - /* Set positions of descriptor caches in SRAM. */ - EFX_POPULATE_OWORD_1(temp, SRM_TX_DC_BASE_ADR, TX_DC_BASE / 8); - falcon_write(efx, &temp, SRM_TX_DC_CFG_REG_KER); - EFX_POPULATE_OWORD_1(temp, SRM_RX_DC_BASE_ADR, RX_DC_BASE / 8); - falcon_write(efx, &temp, SRM_RX_DC_CFG_REG_KER); - - /* Set TX descriptor cache size. */ - BUILD_BUG_ON(TX_DC_ENTRIES != (16 << TX_DC_ENTRIES_ORDER)); - EFX_POPULATE_OWORD_1(temp, TX_DC_SIZE, TX_DC_ENTRIES_ORDER); - falcon_write(efx, &temp, TX_DC_CFG_REG_KER); - - /* Set RX descriptor cache size. Set low watermark to size-8, as - * this allows most efficient prefetching. - */ - BUILD_BUG_ON(RX_DC_ENTRIES != (16 << RX_DC_ENTRIES_ORDER)); - EFX_POPULATE_OWORD_1(temp, RX_DC_SIZE, RX_DC_ENTRIES_ORDER); - falcon_write(efx, &temp, RX_DC_CFG_REG_KER); - EFX_POPULATE_OWORD_1(temp, RX_DC_PF_LWM, RX_DC_ENTRIES - 8); - falcon_write(efx, &temp, RX_DC_PF_WM_REG_KER); - /* Clear the parity enables on the TX data fifos as * they produce false parity errors because of timing issues */ if (EFX_WORKAROUND_5129(efx)) { - falcon_read(efx, &temp, SPARE_REG_KER); - EFX_SET_OWORD_FIELD(temp, MEM_PERR_EN_TX_DATA, 0); - falcon_write(efx, &temp, SPARE_REG_KER); + efx_reado(efx, &temp, FR_AZ_CSR_SPARE); + EFX_SET_OWORD_FIELD(temp, FRF_AB_MEM_PERR_EN_TX_DATA, 0); + efx_writeo(efx, &temp, FR_AZ_CSR_SPARE); } - /* Enable all the genuinely fatal interrupts. (They are still - * masked by the overall interrupt mask, controlled by - * falcon_interrupts()). - * - * Note: All other fatal interrupts are enabled - */ - EFX_POPULATE_OWORD_3(temp, - ILL_ADR_INT_KER_EN, 1, - RBUF_OWN_INT_KER_EN, 1, - TBUF_OWN_INT_KER_EN, 1); - EFX_INVERT_OWORD(temp); - falcon_write(efx, &temp, FATAL_INTR_REG_KER); - if (EFX_WORKAROUND_7244(efx)) { - falcon_read(efx, &temp, RX_FILTER_CTL_REG); - EFX_SET_OWORD_FIELD(temp, UDP_FULL_SRCH_LIMIT, 8); - EFX_SET_OWORD_FIELD(temp, UDP_WILD_SRCH_LIMIT, 8); - EFX_SET_OWORD_FIELD(temp, TCP_FULL_SRCH_LIMIT, 8); - EFX_SET_OWORD_FIELD(temp, TCP_WILD_SRCH_LIMIT, 8); - falcon_write(efx, &temp, RX_FILTER_CTL_REG); + efx_reado(efx, &temp, FR_BZ_RX_FILTER_CTL); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_UDP_FULL_SRCH_LIMIT, 8); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_UDP_WILD_SRCH_LIMIT, 8); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_TCP_FULL_SRCH_LIMIT, 8); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_TCP_WILD_SRCH_LIMIT, 8); + efx_writeo(efx, &temp, FR_BZ_RX_FILTER_CTL); } - falcon_setup_rss_indir_table(efx); - + /* XXX This is documented only for Falcon A0/A1 */ /* Setup RX. Wait for descriptor is broken and must * be disabled. RXDP recovery shouldn't be needed, but is. */ - falcon_read(efx, &temp, RX_SELF_RST_REG_KER); - EFX_SET_OWORD_FIELD(temp, RX_NODESC_WAIT_DIS, 1); - EFX_SET_OWORD_FIELD(temp, RX_RECOVERY_EN, 1); + efx_reado(efx, &temp, FR_AA_RX_SELF_RST); + EFX_SET_OWORD_FIELD(temp, FRF_AA_RX_NODESC_WAIT_DIS, 1); + EFX_SET_OWORD_FIELD(temp, FRF_AA_RX_SELF_RST_EN, 1); if (EFX_WORKAROUND_5583(efx)) - EFX_SET_OWORD_FIELD(temp, RX_ISCSI_DIS, 1); - falcon_write(efx, &temp, RX_SELF_RST_REG_KER); - - /* Disable the ugly timer-based TX DMA backoff and allow TX DMA to be - * controlled by the RX FIFO fill level. Set arbitration to one pkt/Q. - */ - falcon_read(efx, &temp, TX_CFG2_REG_KER); - EFX_SET_OWORD_FIELD(temp, TX_RX_SPACER, 0xfe); - EFX_SET_OWORD_FIELD(temp, TX_RX_SPACER_EN, 1); - EFX_SET_OWORD_FIELD(temp, TX_ONE_PKT_PER_Q, 1); - EFX_SET_OWORD_FIELD(temp, TX_CSR_PUSH_EN, 0); - EFX_SET_OWORD_FIELD(temp, TX_DIS_NON_IP_EV, 1); - /* Enable SW_EV to inherit in char driver - assume harmless here */ - EFX_SET_OWORD_FIELD(temp, TX_SW_EV_EN, 1); - /* Prefetch threshold 2 => fetch when descriptor cache half empty */ - EFX_SET_OWORD_FIELD(temp, TX_PREF_THRESHOLD, 2); - /* Squash TX of packets of 16 bytes or less */ - if (falcon_rev(efx) >= FALCON_REV_B0 && EFX_WORKAROUND_9141(efx)) - EFX_SET_OWORD_FIELD(temp, TX_FLUSH_MIN_LEN_EN_B0, 1); - falcon_write(efx, &temp, TX_CFG2_REG_KER); + EFX_SET_OWORD_FIELD(temp, FRF_AA_RX_ISCSI_DIS, 1); + efx_writeo(efx, &temp, FR_AA_RX_SELF_RST); /* Do not enable TX_NO_EOP_DISC_EN, since it limits packets to 16 * descriptors (which is bad). */ - falcon_read(efx, &temp, TX_CFG_REG_KER); - EFX_SET_OWORD_FIELD(temp, TX_NO_EOP_DISC_EN, 0); - falcon_write(efx, &temp, TX_CFG_REG_KER); - - /* RX config */ - falcon_read(efx, &temp, RX_CFG_REG_KER); - EFX_SET_OWORD_FIELD_VER(efx, temp, RX_DESC_PUSH_EN, 0); - if (EFX_WORKAROUND_7575(efx)) - EFX_SET_OWORD_FIELD_VER(efx, temp, RX_USR_BUF_SIZE, - (3 * 4096) / 32); - if (falcon_rev(efx) >= FALCON_REV_B0) - EFX_SET_OWORD_FIELD(temp, RX_INGR_EN_B0, 1); - - /* RX FIFO flow control thresholds */ - thresh = ((rx_xon_thresh_bytes >= 0) ? - rx_xon_thresh_bytes : efx->type->rx_xon_thresh); - EFX_SET_OWORD_FIELD_VER(efx, temp, RX_XON_MAC_TH, thresh / 256); - thresh = ((rx_xoff_thresh_bytes >= 0) ? - rx_xoff_thresh_bytes : efx->type->rx_xoff_thresh); - EFX_SET_OWORD_FIELD_VER(efx, temp, RX_XOFF_MAC_TH, thresh / 256); - /* RX control FIFO thresholds [32 entries] */ - EFX_SET_OWORD_FIELD_VER(efx, temp, RX_XON_TX_TH, 20); - EFX_SET_OWORD_FIELD_VER(efx, temp, RX_XOFF_TX_TH, 25); - falcon_write(efx, &temp, RX_CFG_REG_KER); + efx_reado(efx, &temp, FR_AZ_TX_CFG); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_NO_EOP_DISC_EN, 0); + efx_writeo(efx, &temp, FR_AZ_TX_CFG); + + falcon_init_rx_cfg(efx); /* Set destination of both TX and RX Flush events */ - if (falcon_rev(efx) >= FALCON_REV_B0) { - EFX_POPULATE_OWORD_1(temp, FLS_EVQ_ID, 0); - falcon_write(efx, &temp, DP_CTRL_REG); + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) { + EFX_POPULATE_OWORD_1(temp, FRF_BZ_FLS_EVQ_ID, 0); + efx_writeo(efx, &temp, FR_BZ_DP_CTRL); } + efx_nic_init_common(efx); + return 0; } -void falcon_remove_nic(struct efx_nic *efx) +static void falcon_remove_nic(struct efx_nic *efx) { struct falcon_nic_data *nic_data = efx->nic_data; + struct falcon_board *board = falcon_board(efx); int rc; + board->type->fini(efx); + /* Remove I2C adapter and clear it in preparation for a retry */ - rc = i2c_del_adapter(&efx->i2c_adap); + rc = i2c_del_adapter(&board->i2c_adap); BUG_ON(rc); - memset(&efx->i2c_adap, 0, sizeof(efx->i2c_adap)); + memset(&board->i2c_adap, 0, sizeof(board->i2c_adap)); falcon_remove_spi_devices(efx); - falcon_free_buffer(efx, &efx->irq_status); + efx_nic_free_buffer(efx, &efx->irq_status); falcon_reset_hw(efx, RESET_TYPE_ALL); @@ -3085,12 +1646,86 @@ efx->nic_data = NULL; } -void falcon_update_nic_stats(struct efx_nic *efx) +static void falcon_update_nic_stats(struct efx_nic *efx) { + struct falcon_nic_data *nic_data = efx->nic_data; efx_oword_t cnt; - falcon_read(efx, &cnt, RX_NODESC_DROP_REG_KER); - efx->n_rx_nodesc_drop_cnt += EFX_OWORD_FIELD(cnt, RX_NODESC_DROP_CNT); + if (nic_data->stats_disable_count) + return; + + efx_reado(efx, &cnt, FR_AZ_RX_NODESC_DROP); + efx->n_rx_nodesc_drop_cnt += + EFX_OWORD_FIELD(cnt, FRF_AB_RX_NODESC_DROP_CNT); + + if (nic_data->stats_pending && + *nic_data->stats_dma_done == FALCON_STATS_DONE) { + nic_data->stats_pending = false; + rmb(); /* read the done flag before the stats */ + efx->mac_op->update_stats(efx); + } +} + +void falcon_start_nic_stats(struct efx_nic *efx) +{ + struct falcon_nic_data *nic_data = efx->nic_data; + + spin_lock_bh(&efx->stats_lock); + if (--nic_data->stats_disable_count == 0) + falcon_stats_request(efx); + spin_unlock_bh(&efx->stats_lock); +} + +void falcon_stop_nic_stats(struct efx_nic *efx) +{ + struct falcon_nic_data *nic_data = efx->nic_data; + int i; + + might_sleep(); + + spin_lock_bh(&efx->stats_lock); + ++nic_data->stats_disable_count; + spin_unlock_bh(&efx->stats_lock); + + del_timer_sync(&nic_data->stats_timer); + + /* Wait enough time for the most recent transfer to + * complete. */ + for (i = 0; i < 4 && nic_data->stats_pending; i++) { + if (*nic_data->stats_dma_done == FALCON_STATS_DONE) + break; + msleep(1); + } + + spin_lock_bh(&efx->stats_lock); + falcon_stats_complete(efx); + spin_unlock_bh(&efx->stats_lock); +} + +static void falcon_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) +{ + falcon_board(efx)->type->set_id_led(efx, mode); +} + +/************************************************************************** + * + * Wake on LAN + * + ************************************************************************** + */ + +static void falcon_get_wol(struct efx_nic *efx, struct ethtool_wolinfo *wol) +{ + wol->supported = 0; + wol->wolopts = 0; + memset(&wol->sopass, 0, sizeof(wol->sopass)); +} + +static int falcon_set_wol(struct efx_nic *efx, u32 type) +{ + if (type != 0) + return -EINVAL; + return 0; } /************************************************************************** @@ -3100,50 +1735,91 @@ ************************************************************************** */ -struct efx_nic_type falcon_a_nic_type = { - .mem_bar = 2, +struct efx_nic_type falcon_a1_nic_type = { + .probe = falcon_probe_nic, + .remove = falcon_remove_nic, + .init = falcon_init_nic, + .fini = efx_port_dummy_op_void, + .monitor = falcon_monitor, + .reset = falcon_reset_hw, + .probe_port = falcon_probe_port, + .remove_port = falcon_remove_port, + .prepare_flush = falcon_prepare_flush, + .update_stats = falcon_update_nic_stats, + .start_stats = falcon_start_nic_stats, + .stop_stats = falcon_stop_nic_stats, + .set_id_led = falcon_set_id_led, + .push_irq_moderation = falcon_push_irq_moderation, + .push_multicast_hash = falcon_push_multicast_hash, + .reconfigure_port = falcon_reconfigure_port, + .get_wol = falcon_get_wol, + .set_wol = falcon_set_wol, + .resume_wol = efx_port_dummy_op_void, + .test_nvram = falcon_test_nvram, + .default_mac_ops = &falcon_xmac_operations, + + .revision = EFX_REV_FALCON_A1, .mem_map_size = 0x20000, - .txd_ptr_tbl_base = TX_DESC_PTR_TBL_KER_A1, - .rxd_ptr_tbl_base = RX_DESC_PTR_TBL_KER_A1, - .buf_tbl_base = BUF_TBL_KER_A1, - .evq_ptr_tbl_base = EVQ_PTR_TBL_KER_A1, - .evq_rptr_tbl_base = EVQ_RPTR_REG_KER_A1, - .txd_ring_mask = FALCON_TXD_RING_MASK, - .rxd_ring_mask = FALCON_RXD_RING_MASK, - .evq_size = FALCON_EVQ_SIZE, - .max_dma_mask = FALCON_DMA_MASK, - .tx_dma_mask = FALCON_TX_DMA_MASK, - .bug5391_mask = 0xf, - .rx_xoff_thresh = 2048, - .rx_xon_thresh = 512, + .txd_ptr_tbl_base = FR_AA_TX_DESC_PTR_TBL_KER, + .rxd_ptr_tbl_base = FR_AA_RX_DESC_PTR_TBL_KER, + .buf_tbl_base = FR_AA_BUF_FULL_TBL_KER, + .evq_ptr_tbl_base = FR_AA_EVQ_PTR_TBL_KER, + .evq_rptr_tbl_base = FR_AA_EVQ_RPTR_KER, + .max_dma_mask = DMA_BIT_MASK(FSF_AZ_TX_KER_BUF_ADDR_WIDTH), .rx_buffer_padding = 0x24, .max_interrupt_mode = EFX_INT_MODE_MSI, .phys_addr_channels = 4, + .tx_dc_base = 0x130000, + .rx_dc_base = 0x100000, + .offload_features = NETIF_F_IP_CSUM, + .reset_world_flags = ETH_RESET_IRQ, }; -struct efx_nic_type falcon_b_nic_type = { - .mem_bar = 2, +struct efx_nic_type falcon_b0_nic_type = { + .probe = falcon_probe_nic, + .remove = falcon_remove_nic, + .init = falcon_init_nic, + .fini = efx_port_dummy_op_void, + .monitor = falcon_monitor, + .reset = falcon_reset_hw, + .probe_port = falcon_probe_port, + .remove_port = falcon_remove_port, + .prepare_flush = falcon_prepare_flush, + .update_stats = falcon_update_nic_stats, + .start_stats = falcon_start_nic_stats, + .stop_stats = falcon_stop_nic_stats, + .set_id_led = falcon_set_id_led, + .push_irq_moderation = falcon_push_irq_moderation, + .push_multicast_hash = falcon_push_multicast_hash, + .reconfigure_port = falcon_reconfigure_port, + .get_wol = falcon_get_wol, + .set_wol = falcon_set_wol, + .resume_wol = efx_port_dummy_op_void, + .test_registers = falcon_b0_test_registers, + .test_nvram = falcon_test_nvram, + .default_mac_ops = &falcon_xmac_operations, + + .revision = EFX_REV_FALCON_B0, /* Map everything up to and including the RSS indirection * table. Don't map MSI-X table, MSI-X PBA since Linux * requires that they not be mapped. */ - .mem_map_size = RX_RSS_INDIR_TBL_B0 + 0x800, - .txd_ptr_tbl_base = TX_DESC_PTR_TBL_KER_B0, - .rxd_ptr_tbl_base = RX_DESC_PTR_TBL_KER_B0, - .buf_tbl_base = BUF_TBL_KER_B0, - .evq_ptr_tbl_base = EVQ_PTR_TBL_KER_B0, - .evq_rptr_tbl_base = EVQ_RPTR_REG_KER_B0, - .txd_ring_mask = FALCON_TXD_RING_MASK, - .rxd_ring_mask = FALCON_RXD_RING_MASK, - .evq_size = FALCON_EVQ_SIZE, - .max_dma_mask = FALCON_DMA_MASK, - .tx_dma_mask = FALCON_TX_DMA_MASK, - .bug5391_mask = 0, - .rx_xoff_thresh = 54272, /* ~80Kb - 3*max MTU */ - .rx_xon_thresh = 27648, /* ~3*max MTU */ + .mem_map_size = (FR_BZ_RX_INDIRECTION_TBL + + FR_BZ_RX_INDIRECTION_TBL_STEP * + FR_BZ_RX_INDIRECTION_TBL_ROWS), + .txd_ptr_tbl_base = FR_BZ_TX_DESC_PTR_TBL, + .rxd_ptr_tbl_base = FR_BZ_RX_DESC_PTR_TBL, + .buf_tbl_base = FR_BZ_BUF_FULL_TBL, + .evq_ptr_tbl_base = FR_BZ_EVQ_PTR_TBL, + .evq_rptr_tbl_base = FR_BZ_EVQ_RPTR, + .max_dma_mask = DMA_BIT_MASK(FSF_AZ_TX_KER_BUF_ADDR_WIDTH), .rx_buffer_padding = 0, .max_interrupt_mode = EFX_INT_MODE_MSIX, .phys_addr_channels = 32, /* Hardware limit is 64, but the legacy * interrupt handler only supports 32 * channels */ + .tx_dc_base = 0x130000, + .rx_dc_base = 0x100000, + .offload_features = NETIF_F_IP_CSUM, + .reset_world_flags = ETH_RESET_IRQ, }; --- linux-2.6.32.orig/drivers/net/sfc/mdio_10g.c +++ linux-2.6.32/drivers/net/sfc/mdio_10g.c @@ -1,6 +1,6 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -14,8 +14,8 @@ #include #include "net_driver.h" #include "mdio_10g.h" -#include "boards.h" #include "workarounds.h" +#include "nic.h" unsigned efx_mdio_id_oui(u32 id) { @@ -174,7 +174,7 @@ * of mmd's */ if (LOOPBACK_INTERNAL(efx)) return true; - else if (efx->loopback_mode == LOOPBACK_NETWORK) + else if (LOOPBACK_MASK(efx) & LOOPBACKS_WS) return false; else if (efx_phy_mode_disabled(efx->phy_mode)) return false; @@ -211,7 +211,7 @@ efx->loopback_mode == LOOPBACK_PCS); efx_mdio_set_flag(efx, MDIO_MMD_PHYXS, MDIO_CTRL1, MDIO_PHYXS_CTRL1_LOOPBACK, - efx->loopback_mode == LOOPBACK_NETWORK); + efx->loopback_mode == LOOPBACK_PHYXS_WS); } static void efx_mdio_set_mmd_lpower(struct efx_nic *efx, @@ -249,8 +249,6 @@ int efx_mdio_set_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) { struct ethtool_cmd prev; - u32 required; - int reg; efx->phy_op->get_settings(efx, &prev); @@ -266,86 +264,74 @@ return -EINVAL; /* Check that PHY supports these settings */ - if (ecmd->autoneg) { - required = SUPPORTED_Autoneg; - } else if (ecmd->duplex) { - switch (ecmd->speed) { - case SPEED_10: required = SUPPORTED_10baseT_Full; break; - case SPEED_100: required = SUPPORTED_100baseT_Full; break; - default: return -EINVAL; - } - } else { - switch (ecmd->speed) { - case SPEED_10: required = SUPPORTED_10baseT_Half; break; - case SPEED_100: required = SUPPORTED_100baseT_Half; break; - default: return -EINVAL; - } - } - required |= ecmd->advertising; - if (required & ~prev.supported) + if (!ecmd->autoneg || + (ecmd->advertising | SUPPORTED_Autoneg) & ~prev.supported) return -EINVAL; - if (ecmd->autoneg) { - bool xnp = (ecmd->advertising & ADVERTISED_10000baseT_Full - || EFX_WORKAROUND_13204(efx)); - - /* Set up the base page */ - reg = ADVERTISE_CSMA; - if (ecmd->advertising & ADVERTISED_10baseT_Half) - reg |= ADVERTISE_10HALF; - if (ecmd->advertising & ADVERTISED_10baseT_Full) - reg |= ADVERTISE_10FULL; - if (ecmd->advertising & ADVERTISED_100baseT_Half) - reg |= ADVERTISE_100HALF; - if (ecmd->advertising & ADVERTISED_100baseT_Full) - reg |= ADVERTISE_100FULL; - if (xnp) - reg |= ADVERTISE_RESV; - else if (ecmd->advertising & (ADVERTISED_1000baseT_Half | - ADVERTISED_1000baseT_Full)) - reg |= ADVERTISE_NPAGE; - reg |= mii_advertise_flowctrl(efx->wanted_fc); - efx_mdio_write(efx, MDIO_MMD_AN, MDIO_AN_ADVERTISE, reg); - - /* Set up the (extended) next page if necessary */ - if (efx->phy_op->set_npage_adv) - efx->phy_op->set_npage_adv(efx, ecmd->advertising); - - /* Enable and restart AN */ - reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_CTRL1); - reg |= MDIO_AN_CTRL1_ENABLE; - if (!(EFX_WORKAROUND_15195(efx) && - LOOPBACK_MASK(efx) & efx->phy_op->loopbacks)) - reg |= MDIO_AN_CTRL1_RESTART; - if (xnp) - reg |= MDIO_AN_CTRL1_XNP; - else - reg &= ~MDIO_AN_CTRL1_XNP; - efx_mdio_write(efx, MDIO_MMD_AN, MDIO_CTRL1, reg); - } else { - /* Disable AN */ - efx_mdio_set_flag(efx, MDIO_MMD_AN, MDIO_CTRL1, - MDIO_AN_CTRL1_ENABLE, false); - - /* Set the basic control bits */ - reg = efx_mdio_read(efx, MDIO_MMD_PMAPMD, MDIO_CTRL1); - reg &= ~(MDIO_CTRL1_SPEEDSEL | MDIO_CTRL1_FULLDPLX); - if (ecmd->speed == SPEED_100) - reg |= MDIO_PMA_CTRL1_SPEED100; - if (ecmd->duplex) - reg |= MDIO_CTRL1_FULLDPLX; - efx_mdio_write(efx, MDIO_MMD_PMAPMD, MDIO_CTRL1, reg); - } - + efx_link_set_advertising(efx, ecmd->advertising | ADVERTISED_Autoneg); + efx_mdio_an_reconfigure(efx); return 0; } +/** + * efx_mdio_an_reconfigure - Push advertising flags and restart autonegotiation + * @efx: Efx NIC + */ +void efx_mdio_an_reconfigure(struct efx_nic *efx) +{ + bool xnp = (efx->link_advertising & ADVERTISED_10000baseT_Full + || EFX_WORKAROUND_13204(efx)); + int reg; + + WARN_ON(!(efx->mdio.mmds & MDIO_DEVS_AN)); + + /* Set up the base page */ + reg = ADVERTISE_CSMA; + if (efx->link_advertising & ADVERTISED_10baseT_Half) + reg |= ADVERTISE_10HALF; + if (efx->link_advertising & ADVERTISED_10baseT_Full) + reg |= ADVERTISE_10FULL; + if (efx->link_advertising & ADVERTISED_100baseT_Half) + reg |= ADVERTISE_100HALF; + if (efx->link_advertising & ADVERTISED_100baseT_Full) + reg |= ADVERTISE_100FULL; + if (xnp) + reg |= ADVERTISE_RESV; + else if (efx->link_advertising & (ADVERTISED_1000baseT_Half | + ADVERTISED_1000baseT_Full)) + reg |= ADVERTISE_NPAGE; + if (efx->link_advertising & ADVERTISED_Pause) + reg |= ADVERTISE_PAUSE_CAP; + if (efx->link_advertising & ADVERTISED_Asym_Pause) + reg |= ADVERTISE_PAUSE_ASYM; + efx_mdio_write(efx, MDIO_MMD_AN, MDIO_AN_ADVERTISE, reg); + + /* Set up the (extended) next page if necessary */ + if (efx->phy_op->set_npage_adv) + efx->phy_op->set_npage_adv(efx, efx->link_advertising); + + /* Enable and restart AN */ + reg = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_CTRL1); + reg |= MDIO_AN_CTRL1_ENABLE; + if (!(EFX_WORKAROUND_15195(efx) && LOOPBACK_EXTERNAL(efx))) + reg |= MDIO_AN_CTRL1_RESTART; + if (xnp) + reg |= MDIO_AN_CTRL1_XNP; + else + reg &= ~MDIO_AN_CTRL1_XNP; + efx_mdio_write(efx, MDIO_MMD_AN, MDIO_CTRL1, reg); +} + enum efx_fc_type efx_mdio_get_pause(struct efx_nic *efx) { - int lpa; + BUILD_BUG_ON(EFX_FC_AUTO & (EFX_FC_RX | EFX_FC_TX)); - if (!(efx->phy_op->mmds & MDIO_DEVS_AN)) + if (!(efx->wanted_fc & EFX_FC_AUTO)) return efx->wanted_fc; - lpa = efx_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_LPA); - return efx_fc_resolve(efx->wanted_fc, lpa); + + WARN_ON(!(efx->mdio.mmds & MDIO_DEVS_AN)); + + return mii_resolve_flowctrl_fdx( + mii_advertise_flowctrl(efx->wanted_fc), + efx_mdio_read(efx, MDIO_MMD_AN, MDIO_AN_LPA)); } --- linux-2.6.32.orig/drivers/net/sfc/workarounds.h +++ linux-2.6.32/drivers/net/sfc/workarounds.h @@ -1,6 +1,6 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -16,7 +16,9 @@ */ #define EFX_WORKAROUND_ALWAYS(efx) 1 -#define EFX_WORKAROUND_FALCON_A(efx) (falcon_rev(efx) <= FALCON_REV_A1) +#define EFX_WORKAROUND_FALCON_A(efx) (efx_nic_rev(efx) <= EFX_REV_FALCON_A1) +#define EFX_WORKAROUND_FALCON_AB(efx) (efx_nic_rev(efx) <= EFX_REV_FALCON_B0) +#define EFX_WORKAROUND_SIENA(efx) (efx_nic_rev(efx) == EFX_REV_SIENA_A0) #define EFX_WORKAROUND_10G(efx) EFX_IS10G(efx) #define EFX_WORKAROUND_SFT9001(efx) ((efx)->phy_type == PHY_TYPE_SFT9001A || \ (efx)->phy_type == PHY_TYPE_SFT9001B) @@ -27,20 +29,22 @@ #define EFX_WORKAROUND_7575 EFX_WORKAROUND_ALWAYS /* Bit-bashed I2C reads cause performance drop */ #define EFX_WORKAROUND_7884 EFX_WORKAROUND_10G -/* TX pkt parser problem with <= 16 byte TXes */ -#define EFX_WORKAROUND_9141 EFX_WORKAROUND_ALWAYS /* TX_EV_PKT_ERR can be caused by a dangling TX descriptor * or a PCIe error (bug 11028) */ #define EFX_WORKAROUND_10727 EFX_WORKAROUND_ALWAYS /* Transmit flow control may get disabled */ -#define EFX_WORKAROUND_11482 EFX_WORKAROUND_ALWAYS -/* Flush events can take a very long time to appear */ -#define EFX_WORKAROUND_11557 EFX_WORKAROUND_ALWAYS +#define EFX_WORKAROUND_11482 EFX_WORKAROUND_FALCON_AB /* Truncated IPv4 packets can confuse the TX packet parser */ -#define EFX_WORKAROUND_15592 EFX_WORKAROUND_ALWAYS +#define EFX_WORKAROUND_15592 EFX_WORKAROUND_FALCON_AB +/* Legacy ISR read can return zero once */ +#define EFX_WORKAROUND_15783 EFX_WORKAROUND_SIENA +/* Legacy interrupt storm when interrupt fifo fills */ +#define EFX_WORKAROUND_17213 EFX_WORKAROUND_SIENA /* Spurious parity errors in TSORT buffers */ #define EFX_WORKAROUND_5129 EFX_WORKAROUND_FALCON_A +/* Unaligned read request >512 bytes after aligning may break TSORT */ +#define EFX_WORKAROUND_5391 EFX_WORKAROUND_FALCON_A /* iSCSI parsing errors */ #define EFX_WORKAROUND_5583 EFX_WORKAROUND_FALCON_A /* RX events go missing */ --- linux-2.6.32.orig/drivers/net/sfc/rx.c +++ linux-2.6.32/drivers/net/sfc/rx.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2005-2008 Solarflare Communications Inc. + * Copyright 2005-2009 Solarflare Communications Inc. * * 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 @@ -16,9 +16,8 @@ #include #include #include "net_driver.h" -#include "rx.h" #include "efx.h" -#include "falcon.h" +#include "nic.h" #include "selftest.h" #include "workarounds.h" @@ -61,7 +60,7 @@ * rx_alloc_method = (rx_alloc_level > RX_ALLOC_LEVEL_LRO ? * RX_ALLOC_METHOD_PAGE : RX_ALLOC_METHOD_SKB) */ -static int rx_alloc_method = RX_ALLOC_METHOD_PAGE; +static int rx_alloc_method = RX_ALLOC_METHOD_AUTO; #define RX_ALLOC_LEVEL_LRO 0x2000 #define RX_ALLOC_LEVEL_MAX 0x3000 @@ -293,8 +292,7 @@ * fill anyway. */ fill_level = (rx_queue->added_count - rx_queue->removed_count); - EFX_BUG_ON_PARANOID(fill_level > - rx_queue->efx->type->rxd_ring_mask + 1); + EFX_BUG_ON_PARANOID(fill_level > EFX_RXQ_SIZE); /* Don't fill if we don't need to */ if (fill_level >= rx_queue->fast_fill_trigger) @@ -316,8 +314,7 @@ retry: /* Recalculate current fill level now that we have the lock */ fill_level = (rx_queue->added_count - rx_queue->removed_count); - EFX_BUG_ON_PARANOID(fill_level > - rx_queue->efx->type->rxd_ring_mask + 1); + EFX_BUG_ON_PARANOID(fill_level > EFX_RXQ_SIZE); space = rx_queue->fast_fill_limit - fill_level; if (space < EFX_RX_BATCH) goto out_unlock; @@ -329,8 +326,7 @@ do { for (i = 0; i < EFX_RX_BATCH; ++i) { - index = (rx_queue->added_count & - rx_queue->efx->type->rxd_ring_mask); + index = rx_queue->added_count & EFX_RXQ_MASK; rx_buf = efx_rx_buffer(rx_queue, index); rc = efx_init_rx_buffer(rx_queue, rx_buf); if (unlikely(rc)) @@ -345,7 +341,7 @@ out: /* Send write pointer to card. */ - falcon_notify_rx_desc(rx_queue); + efx_nic_notify_rx_desc(rx_queue); /* If the fast fill is running inside from the refill tasklet, then * for SMP systems it may be running on a different CPU to @@ -448,17 +444,23 @@ bool checksummed) { struct napi_struct *napi = &channel->napi_str; + gro_result_t gro_result; /* Pass the skb/page into the LRO engine */ if (rx_buf->page) { - struct sk_buff *skb = napi_get_frags(napi); + struct page *page = rx_buf->page; + struct sk_buff *skb; + EFX_BUG_ON_PARANOID(rx_buf->skb); + rx_buf->page = NULL; + + skb = napi_get_frags(napi); if (!skb) { - put_page(rx_buf->page); - goto out; + put_page(page); + return; } - skb_shinfo(skb)->frags[0].page = rx_buf->page; + skb_shinfo(skb)->frags[0].page = page; skb_shinfo(skb)->frags[0].page_offset = efx_rx_buf_offset(rx_buf); skb_shinfo(skb)->frags[0].size = rx_buf->len; @@ -470,17 +472,24 @@ skb->ip_summed = checksummed ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE; - napi_gro_frags(napi); + skb_record_rx_queue(skb, channel->channel); -out: - EFX_BUG_ON_PARANOID(rx_buf->skb); - rx_buf->page = NULL; + gro_result = napi_gro_frags(napi); } else { - EFX_BUG_ON_PARANOID(!rx_buf->skb); - EFX_BUG_ON_PARANOID(!checksummed); + struct sk_buff *skb = rx_buf->skb; - napi_gro_receive(napi, rx_buf->skb); + EFX_BUG_ON_PARANOID(!skb); + EFX_BUG_ON_PARANOID(!checksummed); rx_buf->skb = NULL; + + gro_result = napi_gro_receive(napi, skb); + } + + if (gro_result == GRO_NORMAL) { + channel->rx_alloc_level += RX_ALLOC_FACTOR_SKB; + } else if (gro_result != GRO_DROP) { + channel->rx_alloc_level += RX_ALLOC_FACTOR_LRO; + channel->irq_mod_score += 2; } } @@ -558,7 +567,7 @@ if (unlikely(efx->loopback_selftest)) { efx_loopback_rx_packet(efx, rx_buf->data, rx_buf->len); efx_free_rx_buffer(efx, rx_buf); - goto done; + return; } if (rx_buf->skb) { @@ -570,34 +579,28 @@ * at the ethernet header */ rx_buf->skb->protocol = eth_type_trans(rx_buf->skb, efx->net_dev); + + skb_record_rx_queue(rx_buf->skb, channel->channel); } if (likely(checksummed || rx_buf->page)) { efx_rx_packet_lro(channel, rx_buf, checksummed); - goto done; + return; } /* We now own the SKB */ skb = rx_buf->skb; rx_buf->skb = NULL; - - EFX_BUG_ON_PARANOID(rx_buf->page); - EFX_BUG_ON_PARANOID(rx_buf->skb); EFX_BUG_ON_PARANOID(!skb); /* Set the SKB flags */ skb->ip_summed = CHECKSUM_NONE; - skb_record_rx_queue(skb, channel->channel); - /* Pass the packet up */ netif_receive_skb(skb); /* Update allocation strategy method */ channel->rx_alloc_level += RX_ALLOC_FACTOR_SKB; - -done: - ; } void efx_rx_strategy(struct efx_channel *channel) @@ -632,12 +635,12 @@ EFX_LOG(efx, "creating RX queue %d\n", rx_queue->queue); /* Allocate RX buffers */ - rxq_size = (efx->type->rxd_ring_mask + 1) * sizeof(*rx_queue->buffer); + rxq_size = EFX_RXQ_SIZE * sizeof(*rx_queue->buffer); rx_queue->buffer = kzalloc(rxq_size, GFP_KERNEL); if (!rx_queue->buffer) return -ENOMEM; - rc = falcon_probe_rx(rx_queue); + rc = efx_nic_probe_rx(rx_queue); if (rc) { kfree(rx_queue->buffer); rx_queue->buffer = NULL; @@ -647,7 +650,6 @@ void efx_init_rx_queue(struct efx_rx_queue *rx_queue) { - struct efx_nic *efx = rx_queue->efx; unsigned int max_fill, trigger, limit; EFX_LOG(rx_queue->efx, "initialising RX queue %d\n", rx_queue->queue); @@ -660,7 +662,7 @@ rx_queue->min_overfill = -1U; /* Initialise limit fields */ - max_fill = efx->type->rxd_ring_mask + 1 - EFX_RXD_HEAD_ROOM; + max_fill = EFX_RXQ_SIZE - EFX_RXD_HEAD_ROOM; trigger = max_fill * min(rx_refill_threshold, 100U) / 100U; limit = max_fill * min(rx_refill_limit, 100U) / 100U; @@ -669,7 +671,7 @@ rx_queue->fast_fill_limit = limit; /* Set up RX descriptor ring */ - falcon_init_rx(rx_queue); + efx_nic_init_rx(rx_queue); } void efx_fini_rx_queue(struct efx_rx_queue *rx_queue) @@ -679,11 +681,11 @@ EFX_LOG(rx_queue->efx, "shutting down RX queue %d\n", rx_queue->queue); - falcon_fini_rx(rx_queue); + efx_nic_fini_rx(rx_queue); /* Release RX buffers NB start at index 0 not current HW ptr */ if (rx_queue->buffer) { - for (i = 0; i <= rx_queue->efx->type->rxd_ring_mask; i++) { + for (i = 0; i <= EFX_RXQ_MASK; i++) { rx_buf = efx_rx_buffer(rx_queue, i); efx_fini_rx_buffer(rx_queue, rx_buf); } @@ -704,7 +706,7 @@ { EFX_LOG(rx_queue->efx, "destroying RX queue %d\n", rx_queue->queue); - falcon_remove_rx(rx_queue); + efx_nic_remove_rx(rx_queue); kfree(rx_queue->buffer); rx_queue->buffer = NULL; --- linux-2.6.32.orig/drivers/net/sfc/qt202x_phy.c +++ linux-2.6.32/drivers/net/sfc/qt202x_phy.c @@ -0,0 +1,448 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2006-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ +/* + * Driver for AMCC QT202x SFP+ and XFP adapters; see www.amcc.com for details + */ + +#include +#include +#include "efx.h" +#include "mdio_10g.h" +#include "phy.h" +#include "nic.h" + +#define QT202X_REQUIRED_DEVS (MDIO_DEVS_PCS | \ + MDIO_DEVS_PMAPMD | \ + MDIO_DEVS_PHYXS) + +#define QT202X_LOOPBACKS ((1 << LOOPBACK_PCS) | \ + (1 << LOOPBACK_PMAPMD) | \ + (1 << LOOPBACK_PHYXS_WS)) + +/****************************************************************************/ +/* Quake-specific MDIO registers */ +#define MDIO_QUAKE_LED0_REG (0xD006) + +/* QT2025C only */ +#define PCS_FW_HEARTBEAT_REG 0xd7ee +#define PCS_FW_HEARTB_LBN 0 +#define PCS_FW_HEARTB_WIDTH 8 +#define PCS_FW_PRODUCT_CODE_1 0xd7f0 +#define PCS_FW_VERSION_1 0xd7f3 +#define PCS_FW_BUILD_1 0xd7f6 +#define PCS_UC8051_STATUS_REG 0xd7fd +#define PCS_UC_STATUS_LBN 0 +#define PCS_UC_STATUS_WIDTH 8 +#define PCS_UC_STATUS_FW_SAVE 0x20 +#define PMA_PMD_FTX_CTRL2_REG 0xc309 +#define PMA_PMD_FTX_STATIC_LBN 13 +#define PMA_PMD_VEND1_REG 0xc001 +#define PMA_PMD_VEND1_LBTXD_LBN 15 +#define PCS_VEND1_REG 0xc000 +#define PCS_VEND1_LBTXD_LBN 5 + +void falcon_qt202x_set_led(struct efx_nic *p, int led, int mode) +{ + int addr = MDIO_QUAKE_LED0_REG + led; + efx_mdio_write(p, MDIO_MMD_PMAPMD, addr, mode); +} + +struct qt202x_phy_data { + enum efx_phy_mode phy_mode; + bool bug17190_in_bad_state; + unsigned long bug17190_timer; + u32 firmware_ver; +}; + +#define QT2022C2_MAX_RESET_TIME 500 +#define QT2022C2_RESET_WAIT 10 + +#define QT2025C_MAX_HEARTB_TIME (5 * HZ) +#define QT2025C_HEARTB_WAIT 100 +#define QT2025C_MAX_FWSTART_TIME (25 * HZ / 10) +#define QT2025C_FWSTART_WAIT 100 + +#define BUG17190_INTERVAL (2 * HZ) + +static int qt2025c_wait_heartbeat(struct efx_nic *efx) +{ + unsigned long timeout = jiffies + QT2025C_MAX_HEARTB_TIME; + int reg, old_counter = 0; + + /* Wait for firmware heartbeat to start */ + for (;;) { + int counter; + reg = efx_mdio_read(efx, MDIO_MMD_PCS, PCS_FW_HEARTBEAT_REG); + if (reg < 0) + return reg; + counter = ((reg >> PCS_FW_HEARTB_LBN) & + ((1 << PCS_FW_HEARTB_WIDTH) - 1)); + if (old_counter == 0) + old_counter = counter; + else if (counter != old_counter) + break; + if (time_after(jiffies, timeout)) { + /* Some cables have EEPROMs that conflict with the + * PHY's on-board EEPROM so it cannot load firmware */ + EFX_ERR(efx, "If an SFP+ direct attach cable is" + " connected, please check that it complies" + " with the SFP+ specification\n"); + return -ETIMEDOUT; + } + msleep(QT2025C_HEARTB_WAIT); + } + + return 0; +} + +static int qt2025c_wait_fw_status_good(struct efx_nic *efx) +{ + unsigned long timeout = jiffies + QT2025C_MAX_FWSTART_TIME; + int reg; + + /* Wait for firmware status to look good */ + for (;;) { + reg = efx_mdio_read(efx, MDIO_MMD_PCS, PCS_UC8051_STATUS_REG); + if (reg < 0) + return reg; + if ((reg & + ((1 << PCS_UC_STATUS_WIDTH) - 1) << PCS_UC_STATUS_LBN) >= + PCS_UC_STATUS_FW_SAVE) + break; + if (time_after(jiffies, timeout)) + return -ETIMEDOUT; + msleep(QT2025C_FWSTART_WAIT); + } + + return 0; +} + +static void qt2025c_restart_firmware(struct efx_nic *efx) +{ + /* Restart microcontroller execution of firmware from RAM */ + efx_mdio_write(efx, 3, 0xe854, 0x00c0); + efx_mdio_write(efx, 3, 0xe854, 0x0040); + msleep(50); +} + +static int qt2025c_wait_reset(struct efx_nic *efx) +{ + int rc; + + rc = qt2025c_wait_heartbeat(efx); + if (rc != 0) + return rc; + + rc = qt2025c_wait_fw_status_good(efx); + if (rc == -ETIMEDOUT) { + /* Bug 17689: occasionally heartbeat starts but firmware status + * code never progresses beyond 0x00. Try again, once, after + * restarting execution of the firmware image. */ + EFX_LOG(efx, "bashing QT2025C microcontroller\n"); + qt2025c_restart_firmware(efx); + rc = qt2025c_wait_heartbeat(efx); + if (rc != 0) + return rc; + rc = qt2025c_wait_fw_status_good(efx); + } + + return rc; +} + +static void qt2025c_firmware_id(struct efx_nic *efx) +{ + struct qt202x_phy_data *phy_data = efx->phy_data; + u8 firmware_id[9]; + size_t i; + + for (i = 0; i < sizeof(firmware_id); i++) + firmware_id[i] = efx_mdio_read(efx, MDIO_MMD_PCS, + PCS_FW_PRODUCT_CODE_1 + i); + EFX_INFO(efx, "QT2025C firmware %xr%d v%d.%d.%d.%d [20%02d-%02d-%02d]\n", + (firmware_id[0] << 8) | firmware_id[1], firmware_id[2], + firmware_id[3] >> 4, firmware_id[3] & 0xf, + firmware_id[4], firmware_id[5], + firmware_id[6], firmware_id[7], firmware_id[8]); + phy_data->firmware_ver = ((firmware_id[3] & 0xf0) << 20) | + ((firmware_id[3] & 0x0f) << 16) | + (firmware_id[4] << 8) | firmware_id[5]; +} + +static void qt2025c_bug17190_workaround(struct efx_nic *efx) +{ + struct qt202x_phy_data *phy_data = efx->phy_data; + + /* The PHY can get stuck in a state where it reports PHY_XS and PMA/PMD + * layers up, but PCS down (no block_lock). If we notice this state + * persisting for a couple of seconds, we switch PMA/PMD loopback + * briefly on and then off again, which is normally sufficient to + * recover it. + */ + if (efx->link_state.up || + !efx_mdio_links_ok(efx, MDIO_DEVS_PMAPMD | MDIO_DEVS_PHYXS)) { + phy_data->bug17190_in_bad_state = false; + return; + } + + if (!phy_data->bug17190_in_bad_state) { + phy_data->bug17190_in_bad_state = true; + phy_data->bug17190_timer = jiffies + BUG17190_INTERVAL; + return; + } + + if (time_after_eq(jiffies, phy_data->bug17190_timer)) { + EFX_LOG(efx, "bashing QT2025C PMA/PMD\n"); + efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, MDIO_CTRL1, + MDIO_PMA_CTRL1_LOOPBACK, true); + msleep(100); + efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, MDIO_CTRL1, + MDIO_PMA_CTRL1_LOOPBACK, false); + phy_data->bug17190_timer = jiffies + BUG17190_INTERVAL; + } +} + +static int qt2025c_select_phy_mode(struct efx_nic *efx) +{ + struct qt202x_phy_data *phy_data = efx->phy_data; + struct falcon_board *board = falcon_board(efx); + int reg, rc, i; + uint16_t phy_op_mode; + + /* Only 2.0.1.0+ PHY firmware supports the more optimal SFP+ + * Self-Configure mode. Don't attempt any switching if we encounter + * older firmware. */ + if (phy_data->firmware_ver < 0x02000100) + return 0; + + /* In general we will get optimal behaviour in "SFP+ Self-Configure" + * mode; however, that powers down most of the PHY when no module is + * present, so we must use a different mode (any fixed mode will do) + * to be sure that loopbacks will work. */ + phy_op_mode = (efx->loopback_mode == LOOPBACK_NONE) ? 0x0038 : 0x0020; + + /* Only change mode if really necessary */ + reg = efx_mdio_read(efx, 1, 0xc319); + if ((reg & 0x0038) == phy_op_mode) + return 0; + EFX_LOG(efx, "Switching PHY to mode 0x%04x\n", phy_op_mode); + + /* This sequence replicates the register writes configured in the boot + * EEPROM (including the differences between board revisions), except + * that the operating mode is changed, and the PHY is prevented from + * unnecessarily reloading the main firmware image again. */ + efx_mdio_write(efx, 1, 0xc300, 0x0000); + /* (Note: this portion of the boot EEPROM sequence, which bit-bashes 9 + * STOPs onto the firmware/module I2C bus to reset it, varies across + * board revisions, as the bus is connected to different GPIO/LED + * outputs on the PHY.) */ + if (board->major == 0 && board->minor < 2) { + efx_mdio_write(efx, 1, 0xc303, 0x4498); + for (i = 0; i < 9; i++) { + efx_mdio_write(efx, 1, 0xc303, 0x4488); + efx_mdio_write(efx, 1, 0xc303, 0x4480); + efx_mdio_write(efx, 1, 0xc303, 0x4490); + efx_mdio_write(efx, 1, 0xc303, 0x4498); + } + } else { + efx_mdio_write(efx, 1, 0xc303, 0x0920); + efx_mdio_write(efx, 1, 0xd008, 0x0004); + for (i = 0; i < 9; i++) { + efx_mdio_write(efx, 1, 0xc303, 0x0900); + efx_mdio_write(efx, 1, 0xd008, 0x0005); + efx_mdio_write(efx, 1, 0xc303, 0x0920); + efx_mdio_write(efx, 1, 0xd008, 0x0004); + } + efx_mdio_write(efx, 1, 0xc303, 0x4900); + } + efx_mdio_write(efx, 1, 0xc303, 0x4900); + efx_mdio_write(efx, 1, 0xc302, 0x0004); + efx_mdio_write(efx, 1, 0xc316, 0x0013); + efx_mdio_write(efx, 1, 0xc318, 0x0054); + efx_mdio_write(efx, 1, 0xc319, phy_op_mode); + efx_mdio_write(efx, 1, 0xc31a, 0x0098); + efx_mdio_write(efx, 3, 0x0026, 0x0e00); + efx_mdio_write(efx, 3, 0x0027, 0x0013); + efx_mdio_write(efx, 3, 0x0028, 0xa528); + efx_mdio_write(efx, 1, 0xd006, 0x000a); + efx_mdio_write(efx, 1, 0xd007, 0x0009); + efx_mdio_write(efx, 1, 0xd008, 0x0004); + /* This additional write is not present in the boot EEPROM. It + * prevents the PHY's internal boot ROM doing another pointless (and + * slow) reload of the firmware image (the microcontroller's code + * memory is not affected by the microcontroller reset). */ + efx_mdio_write(efx, 1, 0xc317, 0x00ff); + efx_mdio_write(efx, 1, 0xc300, 0x0002); + msleep(20); + + /* Restart microcontroller execution of firmware from RAM */ + qt2025c_restart_firmware(efx); + + /* Wait for the microcontroller to be ready again */ + rc = qt2025c_wait_reset(efx); + if (rc < 0) { + EFX_ERR(efx, "PHY microcontroller reset during mode switch " + "timed out\n"); + return rc; + } + + return 0; +} + +static int qt202x_reset_phy(struct efx_nic *efx) +{ + int rc; + + if (efx->phy_type == PHY_TYPE_QT2025C) { + /* Wait for the reset triggered by falcon_reset_hw() + * to complete */ + rc = qt2025c_wait_reset(efx); + if (rc < 0) + goto fail; + } else { + /* Reset the PHYXS MMD. This is documented as doing + * a complete soft reset. */ + rc = efx_mdio_reset_mmd(efx, MDIO_MMD_PHYXS, + QT2022C2_MAX_RESET_TIME / + QT2022C2_RESET_WAIT, + QT2022C2_RESET_WAIT); + if (rc < 0) + goto fail; + } + + /* Wait 250ms for the PHY to complete bootup */ + msleep(250); + + falcon_board(efx)->type->init_phy(efx); + + return 0; + + fail: + EFX_ERR(efx, "PHY reset timed out\n"); + return rc; +} + +static int qt202x_phy_probe(struct efx_nic *efx) +{ + struct qt202x_phy_data *phy_data; + + phy_data = kzalloc(sizeof(struct qt202x_phy_data), GFP_KERNEL); + if (!phy_data) + return -ENOMEM; + efx->phy_data = phy_data; + phy_data->phy_mode = efx->phy_mode; + phy_data->bug17190_in_bad_state = false; + phy_data->bug17190_timer = 0; + + efx->mdio.mmds = QT202X_REQUIRED_DEVS; + efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; + efx->loopback_modes = QT202X_LOOPBACKS | FALCON_XMAC_LOOPBACKS; + return 0; +} + +static int qt202x_phy_init(struct efx_nic *efx) +{ + u32 devid; + int rc; + + rc = qt202x_reset_phy(efx); + if (rc) { + EFX_ERR(efx, "PHY init failed\n"); + return rc; + } + + devid = efx_mdio_read_id(efx, MDIO_MMD_PHYXS); + EFX_INFO(efx, "PHY ID reg %x (OUI %06x model %02x revision %x)\n", + devid, efx_mdio_id_oui(devid), efx_mdio_id_model(devid), + efx_mdio_id_rev(devid)); + + if (efx->phy_type == PHY_TYPE_QT2025C) + qt2025c_firmware_id(efx); + + return 0; +} + +static int qt202x_link_ok(struct efx_nic *efx) +{ + return efx_mdio_links_ok(efx, QT202X_REQUIRED_DEVS); +} + +static bool qt202x_phy_poll(struct efx_nic *efx) +{ + bool was_up = efx->link_state.up; + + efx->link_state.up = qt202x_link_ok(efx); + efx->link_state.speed = 10000; + efx->link_state.fd = true; + efx->link_state.fc = efx->wanted_fc; + + if (efx->phy_type == PHY_TYPE_QT2025C) + qt2025c_bug17190_workaround(efx); + + return efx->link_state.up != was_up; +} + +static int qt202x_phy_reconfigure(struct efx_nic *efx) +{ + struct qt202x_phy_data *phy_data = efx->phy_data; + + if (efx->phy_type == PHY_TYPE_QT2025C) { + int rc = qt2025c_select_phy_mode(efx); + if (rc) + return rc; + + /* There are several different register bits which can + * disable TX (and save power) on direct-attach cables + * or optical transceivers, varying somewhat between + * firmware versions. Only 'static mode' appears to + * cover everything. */ + mdio_set_flag( + &efx->mdio, efx->mdio.prtad, MDIO_MMD_PMAPMD, + PMA_PMD_FTX_CTRL2_REG, 1 << PMA_PMD_FTX_STATIC_LBN, + efx->phy_mode & PHY_MODE_TX_DISABLED || + efx->phy_mode & PHY_MODE_LOW_POWER || + efx->loopback_mode == LOOPBACK_PCS || + efx->loopback_mode == LOOPBACK_PMAPMD); + } else { + /* Reset the PHY when moving from tx off to tx on */ + if (!(efx->phy_mode & PHY_MODE_TX_DISABLED) && + (phy_data->phy_mode & PHY_MODE_TX_DISABLED)) + qt202x_reset_phy(efx); + + efx_mdio_transmit_disable(efx); + } + + efx_mdio_phy_reconfigure(efx); + + phy_data->phy_mode = efx->phy_mode; + + return 0; +} + +static void qt202x_phy_get_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) +{ + mdio45_ethtool_gset(&efx->mdio, ecmd); +} + +static void qt202x_phy_remove(struct efx_nic *efx) +{ + /* Free the context block */ + kfree(efx->phy_data); + efx->phy_data = NULL; +} + +struct efx_phy_operations falcon_qt202x_phy_ops = { + .probe = qt202x_phy_probe, + .init = qt202x_phy_init, + .reconfigure = qt202x_phy_reconfigure, + .poll = qt202x_phy_poll, + .fini = efx_port_dummy_op_void, + .remove = qt202x_phy_remove, + .get_settings = qt202x_phy_get_settings, + .set_settings = efx_mdio_set_settings, +}; --- linux-2.6.32.orig/drivers/net/sfc/nic.c +++ linux-2.6.32/drivers/net/sfc/nic.c @@ -0,0 +1,1585 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2005-2006 Fen Systems Ltd. + * Copyright 2006-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#include +#include +#include +#include +#include +#include "net_driver.h" +#include "bitfield.h" +#include "efx.h" +#include "nic.h" +#include "regs.h" +#include "io.h" +#include "workarounds.h" + +/************************************************************************** + * + * Configurable values + * + ************************************************************************** + */ + +/* This is set to 16 for a good reason. In summary, if larger than + * 16, the descriptor cache holds more than a default socket + * buffer's worth of packets (for UDP we can only have at most one + * socket buffer's worth outstanding). This combined with the fact + * that we only get 1 TX event per descriptor cache means the NIC + * goes idle. + */ +#define TX_DC_ENTRIES 16 +#define TX_DC_ENTRIES_ORDER 1 + +#define RX_DC_ENTRIES 64 +#define RX_DC_ENTRIES_ORDER 3 + +/* RX FIFO XOFF watermark + * + * When the amount of the RX FIFO increases used increases past this + * watermark send XOFF. Only used if RX flow control is enabled (ethtool -A) + * This also has an effect on RX/TX arbitration + */ +int efx_nic_rx_xoff_thresh = -1; +module_param_named(rx_xoff_thresh_bytes, efx_nic_rx_xoff_thresh, int, 0644); +MODULE_PARM_DESC(rx_xoff_thresh_bytes, "RX fifo XOFF threshold"); + +/* RX FIFO XON watermark + * + * When the amount of the RX FIFO used decreases below this + * watermark send XON. Only used if TX flow control is enabled (ethtool -A) + * This also has an effect on RX/TX arbitration + */ +int efx_nic_rx_xon_thresh = -1; +module_param_named(rx_xon_thresh_bytes, efx_nic_rx_xon_thresh, int, 0644); +MODULE_PARM_DESC(rx_xon_thresh_bytes, "RX fifo XON threshold"); + +/* If EFX_MAX_INT_ERRORS internal errors occur within + * EFX_INT_ERROR_EXPIRE seconds, we consider the NIC broken and + * disable it. + */ +#define EFX_INT_ERROR_EXPIRE 3600 +#define EFX_MAX_INT_ERRORS 5 + +/* We poll for events every FLUSH_INTERVAL ms, and check FLUSH_POLL_COUNT times + */ +#define EFX_FLUSH_INTERVAL 10 +#define EFX_FLUSH_POLL_COUNT 100 + +/* Size and alignment of special buffers (4KB) */ +#define EFX_BUF_SIZE 4096 + +/* Depth of RX flush request fifo */ +#define EFX_RX_FLUSH_COUNT 4 + +/************************************************************************** + * + * Solarstorm hardware access + * + **************************************************************************/ + +static inline void efx_write_buf_tbl(struct efx_nic *efx, efx_qword_t *value, + unsigned int index) +{ + efx_sram_writeq(efx, efx->membase + efx->type->buf_tbl_base, + value, index); +} + +/* Read the current event from the event queue */ +static inline efx_qword_t *efx_event(struct efx_channel *channel, + unsigned int index) +{ + return (((efx_qword_t *) (channel->eventq.addr)) + index); +} + +/* See if an event is present + * + * We check both the high and low dword of the event for all ones. We + * wrote all ones when we cleared the event, and no valid event can + * have all ones in either its high or low dwords. This approach is + * robust against reordering. + * + * Note that using a single 64-bit comparison is incorrect; even + * though the CPU read will be atomic, the DMA write may not be. + */ +static inline int efx_event_present(efx_qword_t *event) +{ + return (!(EFX_DWORD_IS_ALL_ONES(event->dword[0]) | + EFX_DWORD_IS_ALL_ONES(event->dword[1]))); +} + +static bool efx_masked_compare_oword(const efx_oword_t *a, const efx_oword_t *b, + const efx_oword_t *mask) +{ + return ((a->u64[0] ^ b->u64[0]) & mask->u64[0]) || + ((a->u64[1] ^ b->u64[1]) & mask->u64[1]); +} + +int efx_nic_test_registers(struct efx_nic *efx, + const struct efx_nic_register_test *regs, + size_t n_regs) +{ + unsigned address = 0, i, j; + efx_oword_t mask, imask, original, reg, buf; + + /* Falcon should be in loopback to isolate the XMAC from the PHY */ + WARN_ON(!LOOPBACK_INTERNAL(efx)); + + for (i = 0; i < n_regs; ++i) { + address = regs[i].address; + mask = imask = regs[i].mask; + EFX_INVERT_OWORD(imask); + + efx_reado(efx, &original, address); + + /* bit sweep on and off */ + for (j = 0; j < 128; j++) { + if (!EFX_EXTRACT_OWORD32(mask, j, j)) + continue; + + /* Test this testable bit can be set in isolation */ + EFX_AND_OWORD(reg, original, mask); + EFX_SET_OWORD32(reg, j, j, 1); + + efx_writeo(efx, ®, address); + efx_reado(efx, &buf, address); + + if (efx_masked_compare_oword(®, &buf, &mask)) + goto fail; + + /* Test this testable bit can be cleared in isolation */ + EFX_OR_OWORD(reg, original, mask); + EFX_SET_OWORD32(reg, j, j, 0); + + efx_writeo(efx, ®, address); + efx_reado(efx, &buf, address); + + if (efx_masked_compare_oword(®, &buf, &mask)) + goto fail; + } + + efx_writeo(efx, &original, address); + } + + return 0; + +fail: + EFX_ERR(efx, "wrote "EFX_OWORD_FMT" read "EFX_OWORD_FMT + " at address 0x%x mask "EFX_OWORD_FMT"\n", EFX_OWORD_VAL(reg), + EFX_OWORD_VAL(buf), address, EFX_OWORD_VAL(mask)); + return -EIO; +} + +/************************************************************************** + * + * Special buffer handling + * Special buffers are used for event queues and the TX and RX + * descriptor rings. + * + *************************************************************************/ + +/* + * Initialise a special buffer + * + * This will define a buffer (previously allocated via + * efx_alloc_special_buffer()) in the buffer table, allowing + * it to be used for event queues, descriptor rings etc. + */ +static void +efx_init_special_buffer(struct efx_nic *efx, struct efx_special_buffer *buffer) +{ + efx_qword_t buf_desc; + int index; + dma_addr_t dma_addr; + int i; + + EFX_BUG_ON_PARANOID(!buffer->addr); + + /* Write buffer descriptors to NIC */ + for (i = 0; i < buffer->entries; i++) { + index = buffer->index + i; + dma_addr = buffer->dma_addr + (i * 4096); + EFX_LOG(efx, "mapping special buffer %d at %llx\n", + index, (unsigned long long)dma_addr); + EFX_POPULATE_QWORD_3(buf_desc, + FRF_AZ_BUF_ADR_REGION, 0, + FRF_AZ_BUF_ADR_FBUF, dma_addr >> 12, + FRF_AZ_BUF_OWNER_ID_FBUF, 0); + efx_write_buf_tbl(efx, &buf_desc, index); + } +} + +/* Unmaps a buffer and clears the buffer table entries */ +static void +efx_fini_special_buffer(struct efx_nic *efx, struct efx_special_buffer *buffer) +{ + efx_oword_t buf_tbl_upd; + unsigned int start = buffer->index; + unsigned int end = (buffer->index + buffer->entries - 1); + + if (!buffer->entries) + return; + + EFX_LOG(efx, "unmapping special buffers %d-%d\n", + buffer->index, buffer->index + buffer->entries - 1); + + EFX_POPULATE_OWORD_4(buf_tbl_upd, + FRF_AZ_BUF_UPD_CMD, 0, + FRF_AZ_BUF_CLR_CMD, 1, + FRF_AZ_BUF_CLR_END_ID, end, + FRF_AZ_BUF_CLR_START_ID, start); + efx_writeo(efx, &buf_tbl_upd, FR_AZ_BUF_TBL_UPD); +} + +/* + * Allocate a new special buffer + * + * This allocates memory for a new buffer, clears it and allocates a + * new buffer ID range. It does not write into the buffer table. + * + * This call will allocate 4KB buffers, since 8KB buffers can't be + * used for event queues and descriptor rings. + */ +static int efx_alloc_special_buffer(struct efx_nic *efx, + struct efx_special_buffer *buffer, + unsigned int len) +{ + len = ALIGN(len, EFX_BUF_SIZE); + + buffer->addr = pci_alloc_consistent(efx->pci_dev, len, + &buffer->dma_addr); + if (!buffer->addr) + return -ENOMEM; + buffer->len = len; + buffer->entries = len / EFX_BUF_SIZE; + BUG_ON(buffer->dma_addr & (EFX_BUF_SIZE - 1)); + + /* All zeros is a potentially valid event so memset to 0xff */ + memset(buffer->addr, 0xff, len); + + /* Select new buffer ID */ + buffer->index = efx->next_buffer_table; + efx->next_buffer_table += buffer->entries; + + EFX_LOG(efx, "allocating special buffers %d-%d at %llx+%x " + "(virt %p phys %llx)\n", buffer->index, + buffer->index + buffer->entries - 1, + (u64)buffer->dma_addr, len, + buffer->addr, (u64)virt_to_phys(buffer->addr)); + + return 0; +} + +static void +efx_free_special_buffer(struct efx_nic *efx, struct efx_special_buffer *buffer) +{ + if (!buffer->addr) + return; + + EFX_LOG(efx, "deallocating special buffers %d-%d at %llx+%x " + "(virt %p phys %llx)\n", buffer->index, + buffer->index + buffer->entries - 1, + (u64)buffer->dma_addr, buffer->len, + buffer->addr, (u64)virt_to_phys(buffer->addr)); + + pci_free_consistent(efx->pci_dev, buffer->len, buffer->addr, + buffer->dma_addr); + buffer->addr = NULL; + buffer->entries = 0; +} + +/************************************************************************** + * + * Generic buffer handling + * These buffers are used for interrupt status and MAC stats + * + **************************************************************************/ + +int efx_nic_alloc_buffer(struct efx_nic *efx, struct efx_buffer *buffer, + unsigned int len) +{ + buffer->addr = pci_alloc_consistent(efx->pci_dev, len, + &buffer->dma_addr); + if (!buffer->addr) + return -ENOMEM; + buffer->len = len; + memset(buffer->addr, 0, len); + return 0; +} + +void efx_nic_free_buffer(struct efx_nic *efx, struct efx_buffer *buffer) +{ + if (buffer->addr) { + pci_free_consistent(efx->pci_dev, buffer->len, + buffer->addr, buffer->dma_addr); + buffer->addr = NULL; + } +} + +/************************************************************************** + * + * TX path + * + **************************************************************************/ + +/* Returns a pointer to the specified transmit descriptor in the TX + * descriptor queue belonging to the specified channel. + */ +static inline efx_qword_t * +efx_tx_desc(struct efx_tx_queue *tx_queue, unsigned int index) +{ + return (((efx_qword_t *) (tx_queue->txd.addr)) + index); +} + +/* This writes to the TX_DESC_WPTR; write pointer for TX descriptor ring */ +static inline void efx_notify_tx_desc(struct efx_tx_queue *tx_queue) +{ + unsigned write_ptr; + efx_dword_t reg; + + write_ptr = tx_queue->write_count & EFX_TXQ_MASK; + EFX_POPULATE_DWORD_1(reg, FRF_AZ_TX_DESC_WPTR_DWORD, write_ptr); + efx_writed_page(tx_queue->efx, ®, + FR_AZ_TX_DESC_UPD_DWORD_P0, tx_queue->queue); +} + + +/* For each entry inserted into the software descriptor ring, create a + * descriptor in the hardware TX descriptor ring (in host memory), and + * write a doorbell. + */ +void efx_nic_push_buffers(struct efx_tx_queue *tx_queue) +{ + + struct efx_tx_buffer *buffer; + efx_qword_t *txd; + unsigned write_ptr; + + BUG_ON(tx_queue->write_count == tx_queue->insert_count); + + do { + write_ptr = tx_queue->write_count & EFX_TXQ_MASK; + buffer = &tx_queue->buffer[write_ptr]; + txd = efx_tx_desc(tx_queue, write_ptr); + ++tx_queue->write_count; + + /* Create TX descriptor ring entry */ + EFX_POPULATE_QWORD_4(*txd, + FSF_AZ_TX_KER_CONT, buffer->continuation, + FSF_AZ_TX_KER_BYTE_COUNT, buffer->len, + FSF_AZ_TX_KER_BUF_REGION, 0, + FSF_AZ_TX_KER_BUF_ADDR, buffer->dma_addr); + } while (tx_queue->write_count != tx_queue->insert_count); + + wmb(); /* Ensure descriptors are written before they are fetched */ + efx_notify_tx_desc(tx_queue); +} + +/* Allocate hardware resources for a TX queue */ +int efx_nic_probe_tx(struct efx_tx_queue *tx_queue) +{ + struct efx_nic *efx = tx_queue->efx; + BUILD_BUG_ON(EFX_TXQ_SIZE < 512 || EFX_TXQ_SIZE > 4096 || + EFX_TXQ_SIZE & EFX_TXQ_MASK); + return efx_alloc_special_buffer(efx, &tx_queue->txd, + EFX_TXQ_SIZE * sizeof(efx_qword_t)); +} + +void efx_nic_init_tx(struct efx_tx_queue *tx_queue) +{ + efx_oword_t tx_desc_ptr; + struct efx_nic *efx = tx_queue->efx; + + tx_queue->flushed = FLUSH_NONE; + + /* Pin TX descriptor ring */ + efx_init_special_buffer(efx, &tx_queue->txd); + + /* Push TX descriptor ring to card */ + EFX_POPULATE_OWORD_10(tx_desc_ptr, + FRF_AZ_TX_DESCQ_EN, 1, + FRF_AZ_TX_ISCSI_DDIG_EN, 0, + FRF_AZ_TX_ISCSI_HDIG_EN, 0, + FRF_AZ_TX_DESCQ_BUF_BASE_ID, tx_queue->txd.index, + FRF_AZ_TX_DESCQ_EVQ_ID, + tx_queue->channel->channel, + FRF_AZ_TX_DESCQ_OWNER_ID, 0, + FRF_AZ_TX_DESCQ_LABEL, tx_queue->queue, + FRF_AZ_TX_DESCQ_SIZE, + __ffs(tx_queue->txd.entries), + FRF_AZ_TX_DESCQ_TYPE, 0, + FRF_BZ_TX_NON_IP_DROP_DIS, 1); + + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) { + int csum = tx_queue->queue == EFX_TX_QUEUE_OFFLOAD_CSUM; + EFX_SET_OWORD_FIELD(tx_desc_ptr, FRF_BZ_TX_IP_CHKSM_DIS, !csum); + EFX_SET_OWORD_FIELD(tx_desc_ptr, FRF_BZ_TX_TCP_CHKSM_DIS, + !csum); + } + + efx_writeo_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, + tx_queue->queue); + + if (efx_nic_rev(efx) < EFX_REV_FALCON_B0) { + efx_oword_t reg; + + /* Only 128 bits in this register */ + BUILD_BUG_ON(EFX_TX_QUEUE_COUNT >= 128); + + efx_reado(efx, ®, FR_AA_TX_CHKSM_CFG); + if (tx_queue->queue == EFX_TX_QUEUE_OFFLOAD_CSUM) + clear_bit_le(tx_queue->queue, (void *)®); + else + set_bit_le(tx_queue->queue, (void *)®); + efx_writeo(efx, ®, FR_AA_TX_CHKSM_CFG); + } +} + +static void efx_flush_tx_queue(struct efx_tx_queue *tx_queue) +{ + struct efx_nic *efx = tx_queue->efx; + efx_oword_t tx_flush_descq; + + tx_queue->flushed = FLUSH_PENDING; + + /* Post a flush command */ + EFX_POPULATE_OWORD_2(tx_flush_descq, + FRF_AZ_TX_FLUSH_DESCQ_CMD, 1, + FRF_AZ_TX_FLUSH_DESCQ, tx_queue->queue); + efx_writeo(efx, &tx_flush_descq, FR_AZ_TX_FLUSH_DESCQ); +} + +void efx_nic_fini_tx(struct efx_tx_queue *tx_queue) +{ + struct efx_nic *efx = tx_queue->efx; + efx_oword_t tx_desc_ptr; + + /* The queue should have been flushed */ + WARN_ON(tx_queue->flushed != FLUSH_DONE); + + /* Remove TX descriptor ring from card */ + EFX_ZERO_OWORD(tx_desc_ptr); + efx_writeo_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, + tx_queue->queue); + + /* Unpin TX descriptor ring */ + efx_fini_special_buffer(efx, &tx_queue->txd); +} + +/* Free buffers backing TX queue */ +void efx_nic_remove_tx(struct efx_tx_queue *tx_queue) +{ + efx_free_special_buffer(tx_queue->efx, &tx_queue->txd); +} + +/************************************************************************** + * + * RX path + * + **************************************************************************/ + +/* Returns a pointer to the specified descriptor in the RX descriptor queue */ +static inline efx_qword_t * +efx_rx_desc(struct efx_rx_queue *rx_queue, unsigned int index) +{ + return (((efx_qword_t *) (rx_queue->rxd.addr)) + index); +} + +/* This creates an entry in the RX descriptor queue */ +static inline void +efx_build_rx_desc(struct efx_rx_queue *rx_queue, unsigned index) +{ + struct efx_rx_buffer *rx_buf; + efx_qword_t *rxd; + + rxd = efx_rx_desc(rx_queue, index); + rx_buf = efx_rx_buffer(rx_queue, index); + EFX_POPULATE_QWORD_3(*rxd, + FSF_AZ_RX_KER_BUF_SIZE, + rx_buf->len - + rx_queue->efx->type->rx_buffer_padding, + FSF_AZ_RX_KER_BUF_REGION, 0, + FSF_AZ_RX_KER_BUF_ADDR, rx_buf->dma_addr); +} + +/* This writes to the RX_DESC_WPTR register for the specified receive + * descriptor ring. + */ +void efx_nic_notify_rx_desc(struct efx_rx_queue *rx_queue) +{ + efx_dword_t reg; + unsigned write_ptr; + + while (rx_queue->notified_count != rx_queue->added_count) { + efx_build_rx_desc(rx_queue, + rx_queue->notified_count & + EFX_RXQ_MASK); + ++rx_queue->notified_count; + } + + wmb(); + write_ptr = rx_queue->added_count & EFX_RXQ_MASK; + EFX_POPULATE_DWORD_1(reg, FRF_AZ_RX_DESC_WPTR_DWORD, write_ptr); + efx_writed_page(rx_queue->efx, ®, + FR_AZ_RX_DESC_UPD_DWORD_P0, rx_queue->queue); +} + +int efx_nic_probe_rx(struct efx_rx_queue *rx_queue) +{ + struct efx_nic *efx = rx_queue->efx; + BUILD_BUG_ON(EFX_RXQ_SIZE < 512 || EFX_RXQ_SIZE > 4096 || + EFX_RXQ_SIZE & EFX_RXQ_MASK); + return efx_alloc_special_buffer(efx, &rx_queue->rxd, + EFX_RXQ_SIZE * sizeof(efx_qword_t)); +} + +void efx_nic_init_rx(struct efx_rx_queue *rx_queue) +{ + efx_oword_t rx_desc_ptr; + struct efx_nic *efx = rx_queue->efx; + bool is_b0 = efx_nic_rev(efx) >= EFX_REV_FALCON_B0; + bool iscsi_digest_en = is_b0; + + EFX_LOG(efx, "RX queue %d ring in special buffers %d-%d\n", + rx_queue->queue, rx_queue->rxd.index, + rx_queue->rxd.index + rx_queue->rxd.entries - 1); + + rx_queue->flushed = FLUSH_NONE; + + /* Pin RX descriptor ring */ + efx_init_special_buffer(efx, &rx_queue->rxd); + + /* Push RX descriptor ring to card */ + EFX_POPULATE_OWORD_10(rx_desc_ptr, + FRF_AZ_RX_ISCSI_DDIG_EN, iscsi_digest_en, + FRF_AZ_RX_ISCSI_HDIG_EN, iscsi_digest_en, + FRF_AZ_RX_DESCQ_BUF_BASE_ID, rx_queue->rxd.index, + FRF_AZ_RX_DESCQ_EVQ_ID, + rx_queue->channel->channel, + FRF_AZ_RX_DESCQ_OWNER_ID, 0, + FRF_AZ_RX_DESCQ_LABEL, rx_queue->queue, + FRF_AZ_RX_DESCQ_SIZE, + __ffs(rx_queue->rxd.entries), + FRF_AZ_RX_DESCQ_TYPE, 0 /* kernel queue */ , + /* For >=B0 this is scatter so disable */ + FRF_AZ_RX_DESCQ_JUMBO, !is_b0, + FRF_AZ_RX_DESCQ_EN, 1); + efx_writeo_table(efx, &rx_desc_ptr, efx->type->rxd_ptr_tbl_base, + rx_queue->queue); +} + +static void efx_flush_rx_queue(struct efx_rx_queue *rx_queue) +{ + struct efx_nic *efx = rx_queue->efx; + efx_oword_t rx_flush_descq; + + rx_queue->flushed = FLUSH_PENDING; + + /* Post a flush command */ + EFX_POPULATE_OWORD_2(rx_flush_descq, + FRF_AZ_RX_FLUSH_DESCQ_CMD, 1, + FRF_AZ_RX_FLUSH_DESCQ, rx_queue->queue); + efx_writeo(efx, &rx_flush_descq, FR_AZ_RX_FLUSH_DESCQ); +} + +void efx_nic_fini_rx(struct efx_rx_queue *rx_queue) +{ + efx_oword_t rx_desc_ptr; + struct efx_nic *efx = rx_queue->efx; + + /* The queue should already have been flushed */ + WARN_ON(rx_queue->flushed != FLUSH_DONE); + + /* Remove RX descriptor ring from card */ + EFX_ZERO_OWORD(rx_desc_ptr); + efx_writeo_table(efx, &rx_desc_ptr, efx->type->rxd_ptr_tbl_base, + rx_queue->queue); + + /* Unpin RX descriptor ring */ + efx_fini_special_buffer(efx, &rx_queue->rxd); +} + +/* Free buffers backing RX queue */ +void efx_nic_remove_rx(struct efx_rx_queue *rx_queue) +{ + efx_free_special_buffer(rx_queue->efx, &rx_queue->rxd); +} + +/************************************************************************** + * + * Event queue processing + * Event queues are processed by per-channel tasklets. + * + **************************************************************************/ + +/* Update a channel's event queue's read pointer (RPTR) register + * + * This writes the EVQ_RPTR_REG register for the specified channel's + * event queue. + * + * Note that EVQ_RPTR_REG contains the index of the "last read" event, + * whereas channel->eventq_read_ptr contains the index of the "next to + * read" event. + */ +void efx_nic_eventq_read_ack(struct efx_channel *channel) +{ + efx_dword_t reg; + struct efx_nic *efx = channel->efx; + + EFX_POPULATE_DWORD_1(reg, FRF_AZ_EVQ_RPTR, channel->eventq_read_ptr); + efx_writed_table(efx, ®, efx->type->evq_rptr_tbl_base, + channel->channel); +} + +/* Use HW to insert a SW defined event */ +void efx_generate_event(struct efx_channel *channel, efx_qword_t *event) +{ + efx_oword_t drv_ev_reg; + + BUILD_BUG_ON(FRF_AZ_DRV_EV_DATA_LBN != 0 || + FRF_AZ_DRV_EV_DATA_WIDTH != 64); + drv_ev_reg.u32[0] = event->u32[0]; + drv_ev_reg.u32[1] = event->u32[1]; + drv_ev_reg.u32[2] = 0; + drv_ev_reg.u32[3] = 0; + EFX_SET_OWORD_FIELD(drv_ev_reg, FRF_AZ_DRV_EV_QID, channel->channel); + efx_writeo(channel->efx, &drv_ev_reg, FR_AZ_DRV_EV); +} + +/* Handle a transmit completion event + * + * The NIC batches TX completion events; the message we receive is of + * the form "complete all TX events up to this index". + */ +static void +efx_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) +{ + unsigned int tx_ev_desc_ptr; + unsigned int tx_ev_q_label; + struct efx_tx_queue *tx_queue; + struct efx_nic *efx = channel->efx; + + if (likely(EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_COMP))) { + /* Transmit completion */ + tx_ev_desc_ptr = EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_DESC_PTR); + tx_ev_q_label = EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_Q_LABEL); + tx_queue = &efx->tx_queue[tx_ev_q_label]; + channel->irq_mod_score += + (tx_ev_desc_ptr - tx_queue->read_count) & + EFX_TXQ_MASK; + efx_xmit_done(tx_queue, tx_ev_desc_ptr); + } else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_WQ_FF_FULL)) { + /* Rewrite the FIFO write pointer */ + tx_ev_q_label = EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_Q_LABEL); + tx_queue = &efx->tx_queue[tx_ev_q_label]; + + if (efx_dev_registered(efx)) + netif_tx_lock(efx->net_dev); + efx_notify_tx_desc(tx_queue); + if (efx_dev_registered(efx)) + netif_tx_unlock(efx->net_dev); + } else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_PKT_ERR) && + EFX_WORKAROUND_10727(efx)) { + efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH); + } else { + EFX_ERR(efx, "channel %d unexpected TX event " + EFX_QWORD_FMT"\n", channel->channel, + EFX_QWORD_VAL(*event)); + } +} + +/* Detect errors included in the rx_evt_pkt_ok bit. */ +static void efx_handle_rx_not_ok(struct efx_rx_queue *rx_queue, + const efx_qword_t *event, + bool *rx_ev_pkt_ok, + bool *discard) +{ + struct efx_nic *efx = rx_queue->efx; + bool rx_ev_buf_owner_id_err, rx_ev_ip_hdr_chksum_err; + bool rx_ev_tcp_udp_chksum_err, rx_ev_eth_crc_err; + bool rx_ev_frm_trunc, rx_ev_drib_nib, rx_ev_tobe_disc; + bool rx_ev_other_err, rx_ev_pause_frm; + bool rx_ev_hdr_type, rx_ev_mcast_pkt; + unsigned rx_ev_pkt_type; + + rx_ev_hdr_type = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_HDR_TYPE); + rx_ev_mcast_pkt = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_MCAST_PKT); + rx_ev_tobe_disc = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_TOBE_DISC); + rx_ev_pkt_type = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_PKT_TYPE); + rx_ev_buf_owner_id_err = EFX_QWORD_FIELD(*event, + FSF_AZ_RX_EV_BUF_OWNER_ID_ERR); + rx_ev_ip_hdr_chksum_err = EFX_QWORD_FIELD(*event, + FSF_AZ_RX_EV_IP_HDR_CHKSUM_ERR); + rx_ev_tcp_udp_chksum_err = EFX_QWORD_FIELD(*event, + FSF_AZ_RX_EV_TCP_UDP_CHKSUM_ERR); + rx_ev_eth_crc_err = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_ETH_CRC_ERR); + rx_ev_frm_trunc = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_FRM_TRUNC); + rx_ev_drib_nib = ((efx_nic_rev(efx) >= EFX_REV_FALCON_B0) ? + 0 : EFX_QWORD_FIELD(*event, FSF_AA_RX_EV_DRIB_NIB)); + rx_ev_pause_frm = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_PAUSE_FRM_ERR); + + /* Every error apart from tobe_disc and pause_frm */ + rx_ev_other_err = (rx_ev_drib_nib | rx_ev_tcp_udp_chksum_err | + rx_ev_buf_owner_id_err | rx_ev_eth_crc_err | + rx_ev_frm_trunc | rx_ev_ip_hdr_chksum_err); + + /* Count errors that are not in MAC stats. Ignore expected + * checksum errors during self-test. */ + if (rx_ev_frm_trunc) + ++rx_queue->channel->n_rx_frm_trunc; + else if (rx_ev_tobe_disc) + ++rx_queue->channel->n_rx_tobe_disc; + else if (!efx->loopback_selftest) { + if (rx_ev_ip_hdr_chksum_err) + ++rx_queue->channel->n_rx_ip_hdr_chksum_err; + else if (rx_ev_tcp_udp_chksum_err) + ++rx_queue->channel->n_rx_tcp_udp_chksum_err; + } + + /* The frame must be discarded if any of these are true. */ + *discard = (rx_ev_eth_crc_err | rx_ev_frm_trunc | rx_ev_drib_nib | + rx_ev_tobe_disc | rx_ev_pause_frm); + + /* TOBE_DISC is expected on unicast mismatches; don't print out an + * error message. FRM_TRUNC indicates RXDP dropped the packet due + * to a FIFO overflow. + */ +#ifdef EFX_ENABLE_DEBUG + if (rx_ev_other_err) { + EFX_INFO_RL(efx, " RX queue %d unexpected RX event " + EFX_QWORD_FMT "%s%s%s%s%s%s%s%s\n", + rx_queue->queue, EFX_QWORD_VAL(*event), + rx_ev_buf_owner_id_err ? " [OWNER_ID_ERR]" : "", + rx_ev_ip_hdr_chksum_err ? + " [IP_HDR_CHKSUM_ERR]" : "", + rx_ev_tcp_udp_chksum_err ? + " [TCP_UDP_CHKSUM_ERR]" : "", + rx_ev_eth_crc_err ? " [ETH_CRC_ERR]" : "", + rx_ev_frm_trunc ? " [FRM_TRUNC]" : "", + rx_ev_drib_nib ? " [DRIB_NIB]" : "", + rx_ev_tobe_disc ? " [TOBE_DISC]" : "", + rx_ev_pause_frm ? " [PAUSE]" : ""); + } +#endif +} + +/* Handle receive events that are not in-order. */ +static void +efx_handle_rx_bad_index(struct efx_rx_queue *rx_queue, unsigned index) +{ + struct efx_nic *efx = rx_queue->efx; + unsigned expected, dropped; + + expected = rx_queue->removed_count & EFX_RXQ_MASK; + dropped = (index - expected) & EFX_RXQ_MASK; + EFX_INFO(efx, "dropped %d events (index=%d expected=%d)\n", + dropped, index, expected); + + efx_schedule_reset(efx, EFX_WORKAROUND_5676(efx) ? + RESET_TYPE_RX_RECOVERY : RESET_TYPE_DISABLE); +} + +/* Handle a packet received event + * + * The NIC gives a "discard" flag if it's a unicast packet with the + * wrong destination address + * Also "is multicast" and "matches multicast filter" flags can be used to + * discard non-matching multicast packets. + */ +static void +efx_handle_rx_event(struct efx_channel *channel, const efx_qword_t *event) +{ + unsigned int rx_ev_desc_ptr, rx_ev_byte_cnt; + unsigned int rx_ev_hdr_type, rx_ev_mcast_pkt; + unsigned expected_ptr; + bool rx_ev_pkt_ok, discard = false, checksummed; + struct efx_rx_queue *rx_queue; + struct efx_nic *efx = channel->efx; + + /* Basic packet information */ + rx_ev_byte_cnt = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_BYTE_CNT); + rx_ev_pkt_ok = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_PKT_OK); + rx_ev_hdr_type = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_HDR_TYPE); + WARN_ON(EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_JUMBO_CONT)); + WARN_ON(EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_SOP) != 1); + WARN_ON(EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_Q_LABEL) != + channel->channel); + + rx_queue = &efx->rx_queue[channel->channel]; + + rx_ev_desc_ptr = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_DESC_PTR); + expected_ptr = rx_queue->removed_count & EFX_RXQ_MASK; + if (unlikely(rx_ev_desc_ptr != expected_ptr)) + efx_handle_rx_bad_index(rx_queue, rx_ev_desc_ptr); + + if (likely(rx_ev_pkt_ok)) { + /* If packet is marked as OK and packet type is TCP/IP or + * UDP/IP, then we can rely on the hardware checksum. + */ + checksummed = + likely(efx->rx_checksum_enabled) && + (rx_ev_hdr_type == FSE_CZ_RX_EV_HDR_TYPE_IPV4V6_TCP || + rx_ev_hdr_type == FSE_CZ_RX_EV_HDR_TYPE_IPV4V6_UDP); + } else { + efx_handle_rx_not_ok(rx_queue, event, &rx_ev_pkt_ok, &discard); + checksummed = false; + } + + /* Detect multicast packets that didn't match the filter */ + rx_ev_mcast_pkt = EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_MCAST_PKT); + if (rx_ev_mcast_pkt) { + unsigned int rx_ev_mcast_hash_match = + EFX_QWORD_FIELD(*event, FSF_AZ_RX_EV_MCAST_HASH_MATCH); + + if (unlikely(!rx_ev_mcast_hash_match)) { + ++channel->n_rx_mcast_mismatch; + discard = true; + } + } + + channel->irq_mod_score += 2; + + /* Handle received packet */ + efx_rx_packet(rx_queue, rx_ev_desc_ptr, rx_ev_byte_cnt, + checksummed, discard); +} + +/* Global events are basically PHY events */ +static void +efx_handle_global_event(struct efx_channel *channel, efx_qword_t *event) +{ + struct efx_nic *efx = channel->efx; + bool handled = false; + + if (EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_G_PHY0_INTR) || + EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_XG_PHY0_INTR) || + EFX_QWORD_FIELD(*event, FSF_AB_GLB_EV_XFP_PHY0_INTR)) { + /* Ignored */ + handled = true; + } + + if ((efx_nic_rev(efx) >= EFX_REV_FALCON_B0) && + EFX_QWORD_FIELD(*event, FSF_BB_GLB_EV_XG_MGT_INTR)) { + efx->xmac_poll_required = true; + handled = true; + } + + if (efx_nic_rev(efx) <= EFX_REV_FALCON_A1 ? + EFX_QWORD_FIELD(*event, FSF_AA_GLB_EV_RX_RECOVERY) : + EFX_QWORD_FIELD(*event, FSF_BB_GLB_EV_RX_RECOVERY)) { + EFX_ERR(efx, "channel %d seen global RX_RESET " + "event. Resetting.\n", channel->channel); + + atomic_inc(&efx->rx_reset); + efx_schedule_reset(efx, EFX_WORKAROUND_6555(efx) ? + RESET_TYPE_RX_RECOVERY : RESET_TYPE_DISABLE); + handled = true; + } + + if (!handled) + EFX_ERR(efx, "channel %d unknown global event " + EFX_QWORD_FMT "\n", channel->channel, + EFX_QWORD_VAL(*event)); +} + +static void +efx_handle_driver_event(struct efx_channel *channel, efx_qword_t *event) +{ + struct efx_nic *efx = channel->efx; + unsigned int ev_sub_code; + unsigned int ev_sub_data; + + ev_sub_code = EFX_QWORD_FIELD(*event, FSF_AZ_DRIVER_EV_SUBCODE); + ev_sub_data = EFX_QWORD_FIELD(*event, FSF_AZ_DRIVER_EV_SUBDATA); + + switch (ev_sub_code) { + case FSE_AZ_TX_DESCQ_FLS_DONE_EV: + EFX_TRACE(efx, "channel %d TXQ %d flushed\n", + channel->channel, ev_sub_data); + break; + case FSE_AZ_RX_DESCQ_FLS_DONE_EV: + EFX_TRACE(efx, "channel %d RXQ %d flushed\n", + channel->channel, ev_sub_data); + break; + case FSE_AZ_EVQ_INIT_DONE_EV: + EFX_LOG(efx, "channel %d EVQ %d initialised\n", + channel->channel, ev_sub_data); + break; + case FSE_AZ_SRM_UPD_DONE_EV: + EFX_TRACE(efx, "channel %d SRAM update done\n", + channel->channel); + break; + case FSE_AZ_WAKE_UP_EV: + EFX_TRACE(efx, "channel %d RXQ %d wakeup event\n", + channel->channel, ev_sub_data); + break; + case FSE_AZ_TIMER_EV: + EFX_TRACE(efx, "channel %d RX queue %d timer expired\n", + channel->channel, ev_sub_data); + break; + case FSE_AA_RX_RECOVER_EV: + EFX_ERR(efx, "channel %d seen DRIVER RX_RESET event. " + "Resetting.\n", channel->channel); + atomic_inc(&efx->rx_reset); + efx_schedule_reset(efx, + EFX_WORKAROUND_6555(efx) ? + RESET_TYPE_RX_RECOVERY : + RESET_TYPE_DISABLE); + break; + case FSE_BZ_RX_DSC_ERROR_EV: + EFX_ERR(efx, "RX DMA Q %d reports descriptor fetch error." + " RX Q %d is disabled.\n", ev_sub_data, ev_sub_data); + efx_schedule_reset(efx, RESET_TYPE_RX_DESC_FETCH); + break; + case FSE_BZ_TX_DSC_ERROR_EV: + EFX_ERR(efx, "TX DMA Q %d reports descriptor fetch error." + " TX Q %d is disabled.\n", ev_sub_data, ev_sub_data); + efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH); + break; + default: + EFX_TRACE(efx, "channel %d unknown driver event code %d " + "data %04x\n", channel->channel, ev_sub_code, + ev_sub_data); + break; + } +} + +int efx_nic_process_eventq(struct efx_channel *channel, int rx_quota) +{ + unsigned int read_ptr; + efx_qword_t event, *p_event; + int ev_code; + int rx_packets = 0; + + read_ptr = channel->eventq_read_ptr; + + do { + p_event = efx_event(channel, read_ptr); + event = *p_event; + + if (!efx_event_present(&event)) + /* End of events */ + break; + + EFX_TRACE(channel->efx, "channel %d event is "EFX_QWORD_FMT"\n", + channel->channel, EFX_QWORD_VAL(event)); + + /* Clear this event by marking it all ones */ + EFX_SET_QWORD(*p_event); + + ev_code = EFX_QWORD_FIELD(event, FSF_AZ_EV_CODE); + + switch (ev_code) { + case FSE_AZ_EV_CODE_RX_EV: + efx_handle_rx_event(channel, &event); + ++rx_packets; + break; + case FSE_AZ_EV_CODE_TX_EV: + efx_handle_tx_event(channel, &event); + break; + case FSE_AZ_EV_CODE_DRV_GEN_EV: + channel->eventq_magic = EFX_QWORD_FIELD( + event, FSF_AZ_DRV_GEN_EV_MAGIC); + EFX_LOG(channel->efx, "channel %d received generated " + "event "EFX_QWORD_FMT"\n", channel->channel, + EFX_QWORD_VAL(event)); + break; + case FSE_AZ_EV_CODE_GLOBAL_EV: + efx_handle_global_event(channel, &event); + break; + case FSE_AZ_EV_CODE_DRIVER_EV: + efx_handle_driver_event(channel, &event); + break; + case FSE_CZ_EV_CODE_MCDI_EV: + efx_mcdi_process_event(channel, &event); + break; + default: + EFX_ERR(channel->efx, "channel %d unknown event type %d" + " (data " EFX_QWORD_FMT ")\n", channel->channel, + ev_code, EFX_QWORD_VAL(event)); + } + + /* Increment read pointer */ + read_ptr = (read_ptr + 1) & EFX_EVQ_MASK; + + } while (rx_packets < rx_quota); + + channel->eventq_read_ptr = read_ptr; + return rx_packets; +} + + +/* Allocate buffer table entries for event queue */ +int efx_nic_probe_eventq(struct efx_channel *channel) +{ + struct efx_nic *efx = channel->efx; + BUILD_BUG_ON(EFX_EVQ_SIZE < 512 || EFX_EVQ_SIZE > 32768 || + EFX_EVQ_SIZE & EFX_EVQ_MASK); + return efx_alloc_special_buffer(efx, &channel->eventq, + EFX_EVQ_SIZE * sizeof(efx_qword_t)); +} + +void efx_nic_init_eventq(struct efx_channel *channel) +{ + efx_oword_t reg; + struct efx_nic *efx = channel->efx; + + EFX_LOG(efx, "channel %d event queue in special buffers %d-%d\n", + channel->channel, channel->eventq.index, + channel->eventq.index + channel->eventq.entries - 1); + + if (efx_nic_rev(efx) >= EFX_REV_SIENA_A0) { + EFX_POPULATE_OWORD_3(reg, + FRF_CZ_TIMER_Q_EN, 1, + FRF_CZ_HOST_NOTIFY_MODE, 0, + FRF_CZ_TIMER_MODE, FFE_CZ_TIMER_MODE_DIS); + efx_writeo_table(efx, ®, FR_BZ_TIMER_TBL, channel->channel); + } + + /* Pin event queue buffer */ + efx_init_special_buffer(efx, &channel->eventq); + + /* Fill event queue with all ones (i.e. empty events) */ + memset(channel->eventq.addr, 0xff, channel->eventq.len); + + /* Push event queue to card */ + EFX_POPULATE_OWORD_3(reg, + FRF_AZ_EVQ_EN, 1, + FRF_AZ_EVQ_SIZE, __ffs(channel->eventq.entries), + FRF_AZ_EVQ_BUF_BASE_ID, channel->eventq.index); + efx_writeo_table(efx, ®, efx->type->evq_ptr_tbl_base, + channel->channel); + + efx->type->push_irq_moderation(channel); +} + +void efx_nic_fini_eventq(struct efx_channel *channel) +{ + efx_oword_t reg; + struct efx_nic *efx = channel->efx; + + /* Remove event queue from card */ + EFX_ZERO_OWORD(reg); + efx_writeo_table(efx, ®, efx->type->evq_ptr_tbl_base, + channel->channel); + if (efx_nic_rev(efx) >= EFX_REV_SIENA_A0) + efx_writeo_table(efx, ®, FR_BZ_TIMER_TBL, channel->channel); + + /* Unpin event queue */ + efx_fini_special_buffer(efx, &channel->eventq); +} + +/* Free buffers backing event queue */ +void efx_nic_remove_eventq(struct efx_channel *channel) +{ + efx_free_special_buffer(channel->efx, &channel->eventq); +} + + +/* Generates a test event on the event queue. A subsequent call to + * process_eventq() should pick up the event and place the value of + * "magic" into channel->eventq_magic; + */ +void efx_nic_generate_test_event(struct efx_channel *channel, unsigned int magic) +{ + efx_qword_t test_event; + + EFX_POPULATE_QWORD_2(test_event, FSF_AZ_EV_CODE, + FSE_AZ_EV_CODE_DRV_GEN_EV, + FSF_AZ_DRV_GEN_EV_MAGIC, magic); + efx_generate_event(channel, &test_event); +} + +/************************************************************************** + * + * Flush handling + * + **************************************************************************/ + + +static void efx_poll_flush_events(struct efx_nic *efx) +{ + struct efx_channel *channel = &efx->channel[0]; + struct efx_tx_queue *tx_queue; + struct efx_rx_queue *rx_queue; + unsigned int read_ptr = channel->eventq_read_ptr; + unsigned int end_ptr = (read_ptr - 1) & EFX_EVQ_MASK; + + do { + efx_qword_t *event = efx_event(channel, read_ptr); + int ev_code, ev_sub_code, ev_queue; + bool ev_failed; + + if (!efx_event_present(event)) + break; + + ev_code = EFX_QWORD_FIELD(*event, FSF_AZ_EV_CODE); + ev_sub_code = EFX_QWORD_FIELD(*event, + FSF_AZ_DRIVER_EV_SUBCODE); + if (ev_code == FSE_AZ_EV_CODE_DRIVER_EV && + ev_sub_code == FSE_AZ_TX_DESCQ_FLS_DONE_EV) { + ev_queue = EFX_QWORD_FIELD(*event, + FSF_AZ_DRIVER_EV_SUBDATA); + if (ev_queue < EFX_TX_QUEUE_COUNT) { + tx_queue = efx->tx_queue + ev_queue; + tx_queue->flushed = FLUSH_DONE; + } + } else if (ev_code == FSE_AZ_EV_CODE_DRIVER_EV && + ev_sub_code == FSE_AZ_RX_DESCQ_FLS_DONE_EV) { + ev_queue = EFX_QWORD_FIELD( + *event, FSF_AZ_DRIVER_EV_RX_DESCQ_ID); + ev_failed = EFX_QWORD_FIELD( + *event, FSF_AZ_DRIVER_EV_RX_FLUSH_FAIL); + if (ev_queue < efx->n_rx_queues) { + rx_queue = efx->rx_queue + ev_queue; + rx_queue->flushed = + ev_failed ? FLUSH_FAILED : FLUSH_DONE; + } + } + + /* We're about to destroy the queue anyway, so + * it's ok to throw away every non-flush event */ + EFX_SET_QWORD(*event); + + read_ptr = (read_ptr + 1) & EFX_EVQ_MASK; + } while (read_ptr != end_ptr); + + channel->eventq_read_ptr = read_ptr; +} + +/* Handle tx and rx flushes at the same time, since they run in + * parallel in the hardware and there's no reason for us to + * serialise them */ +int efx_nic_flush_queues(struct efx_nic *efx) +{ + struct efx_rx_queue *rx_queue; + struct efx_tx_queue *tx_queue; + int i, tx_pending, rx_pending; + + /* If necessary prepare the hardware for flushing */ + efx->type->prepare_flush(efx); + + /* Flush all tx queues in parallel */ + efx_for_each_tx_queue(tx_queue, efx) + efx_flush_tx_queue(tx_queue); + + /* The hardware supports four concurrent rx flushes, each of which may + * need to be retried if there is an outstanding descriptor fetch */ + for (i = 0; i < EFX_FLUSH_POLL_COUNT; ++i) { + rx_pending = tx_pending = 0; + efx_for_each_rx_queue(rx_queue, efx) { + if (rx_queue->flushed == FLUSH_PENDING) + ++rx_pending; + } + efx_for_each_rx_queue(rx_queue, efx) { + if (rx_pending == EFX_RX_FLUSH_COUNT) + break; + if (rx_queue->flushed == FLUSH_FAILED || + rx_queue->flushed == FLUSH_NONE) { + efx_flush_rx_queue(rx_queue); + ++rx_pending; + } + } + efx_for_each_tx_queue(tx_queue, efx) { + if (tx_queue->flushed != FLUSH_DONE) + ++tx_pending; + } + + if (rx_pending == 0 && tx_pending == 0) + return 0; + + msleep(EFX_FLUSH_INTERVAL); + efx_poll_flush_events(efx); + } + + /* Mark the queues as all flushed. We're going to return failure + * leading to a reset, or fake up success anyway */ + efx_for_each_tx_queue(tx_queue, efx) { + if (tx_queue->flushed != FLUSH_DONE) + EFX_ERR(efx, "tx queue %d flush command timed out\n", + tx_queue->queue); + tx_queue->flushed = FLUSH_DONE; + } + efx_for_each_rx_queue(rx_queue, efx) { + if (rx_queue->flushed != FLUSH_DONE) + EFX_ERR(efx, "rx queue %d flush command timed out\n", + rx_queue->queue); + rx_queue->flushed = FLUSH_DONE; + } + + if (EFX_WORKAROUND_7803(efx)) + return 0; + + return -ETIMEDOUT; +} + +/************************************************************************** + * + * Hardware interrupts + * The hardware interrupt handler does very little work; all the event + * queue processing is carried out by per-channel tasklets. + * + **************************************************************************/ + +/* Enable/disable/generate interrupts */ +static inline void efx_nic_interrupts(struct efx_nic *efx, + bool enabled, bool force) +{ + efx_oword_t int_en_reg_ker; + unsigned int level = 0; + + if (EFX_WORKAROUND_17213(efx) && !EFX_INT_MODE_USE_MSI(efx)) + /* Set the level always even if we're generating a test + * interrupt, because our legacy interrupt handler is safe */ + level = 0x1f; + + EFX_POPULATE_OWORD_3(int_en_reg_ker, + FRF_AZ_KER_INT_LEVE_SEL, level, + FRF_AZ_KER_INT_KER, force, + FRF_AZ_DRV_INT_EN_KER, enabled); + efx_writeo(efx, &int_en_reg_ker, FR_AZ_INT_EN_KER); +} + +void efx_nic_enable_interrupts(struct efx_nic *efx) +{ + struct efx_channel *channel; + + EFX_ZERO_OWORD(*((efx_oword_t *) efx->irq_status.addr)); + wmb(); /* Ensure interrupt vector is clear before interrupts enabled */ + + /* Enable interrupts */ + efx_nic_interrupts(efx, true, false); + + /* Force processing of all the channels to get the EVQ RPTRs up to + date */ + efx_for_each_channel(channel, efx) + efx_schedule_channel(channel); +} + +void efx_nic_disable_interrupts(struct efx_nic *efx) +{ + /* Disable interrupts */ + efx_nic_interrupts(efx, false, false); +} + +/* Generate a test interrupt + * Interrupt must already have been enabled, otherwise nasty things + * may happen. + */ +void efx_nic_generate_interrupt(struct efx_nic *efx) +{ + efx_nic_interrupts(efx, true, true); +} + +/* Process a fatal interrupt + * Disable bus mastering ASAP and schedule a reset + */ +irqreturn_t efx_nic_fatal_interrupt(struct efx_nic *efx) +{ + struct falcon_nic_data *nic_data = efx->nic_data; + efx_oword_t *int_ker = efx->irq_status.addr; + efx_oword_t fatal_intr; + int error, mem_perr; + + efx_reado(efx, &fatal_intr, FR_AZ_FATAL_INTR_KER); + error = EFX_OWORD_FIELD(fatal_intr, FRF_AZ_FATAL_INTR); + + EFX_ERR(efx, "SYSTEM ERROR " EFX_OWORD_FMT " status " + EFX_OWORD_FMT ": %s\n", EFX_OWORD_VAL(*int_ker), + EFX_OWORD_VAL(fatal_intr), + error ? "disabling bus mastering" : "no recognised error"); + if (error == 0) + goto out; + + /* If this is a memory parity error dump which blocks are offending */ + mem_perr = EFX_OWORD_FIELD(fatal_intr, FRF_AZ_MEM_PERR_INT_KER); + if (mem_perr) { + efx_oword_t reg; + efx_reado(efx, ®, FR_AZ_MEM_STAT); + EFX_ERR(efx, "SYSTEM ERROR: memory parity error " + EFX_OWORD_FMT "\n", EFX_OWORD_VAL(reg)); + } + + /* Disable both devices */ + pci_clear_master(efx->pci_dev); + if (efx_nic_is_dual_func(efx)) + pci_clear_master(nic_data->pci_dev2); + efx_nic_disable_interrupts(efx); + + /* Count errors and reset or disable the NIC accordingly */ + if (efx->int_error_count == 0 || + time_after(jiffies, efx->int_error_expire)) { + efx->int_error_count = 0; + efx->int_error_expire = + jiffies + EFX_INT_ERROR_EXPIRE * HZ; + } + if (++efx->int_error_count < EFX_MAX_INT_ERRORS) { + EFX_ERR(efx, "SYSTEM ERROR - reset scheduled\n"); + efx_schedule_reset(efx, RESET_TYPE_INT_ERROR); + } else { + EFX_ERR(efx, "SYSTEM ERROR - max number of errors seen." + "NIC will be disabled\n"); + efx_schedule_reset(efx, RESET_TYPE_DISABLE); + } +out: + return IRQ_HANDLED; +} + +/* Handle a legacy interrupt + * Acknowledges the interrupt and schedule event queue processing. + */ +static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id) +{ + struct efx_nic *efx = dev_id; + efx_oword_t *int_ker = efx->irq_status.addr; + irqreturn_t result = IRQ_NONE; + struct efx_channel *channel; + efx_dword_t reg; + u32 queues; + int syserr; + + /* Read the ISR which also ACKs the interrupts */ + efx_readd(efx, ®, FR_BZ_INT_ISR0); + queues = EFX_EXTRACT_DWORD(reg, 0, 31); + + /* Check to see if we have a serious error condition */ + syserr = EFX_OWORD_FIELD(*int_ker, FSF_AZ_NET_IVEC_FATAL_INT); + if (unlikely(syserr)) + return efx_nic_fatal_interrupt(efx); + + if (queues != 0) { + if (EFX_WORKAROUND_15783(efx)) + efx->irq_zero_count = 0; + + /* Schedule processing of any interrupting queues */ + efx_for_each_channel(channel, efx) { + if (queues & 1) + efx_schedule_channel(channel); + queues >>= 1; + } + result = IRQ_HANDLED; + + } else if (EFX_WORKAROUND_15783(efx) && + efx->irq_zero_count++ == 0) { + efx_qword_t *event; + + /* Ensure we rearm all event queues */ + efx_for_each_channel(channel, efx) { + event = efx_event(channel, channel->eventq_read_ptr); + if (efx_event_present(event)) + efx_schedule_channel(channel); + } + + result = IRQ_HANDLED; + } + + if (result == IRQ_HANDLED) { + efx->last_irq_cpu = raw_smp_processor_id(); + EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n", + irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg)); + } + + return result; +} + +/* Handle an MSI interrupt + * + * Handle an MSI hardware interrupt. This routine schedules event + * queue processing. No interrupt acknowledgement cycle is necessary. + * Also, we never need to check that the interrupt is for us, since + * MSI interrupts cannot be shared. + */ +static irqreturn_t efx_msi_interrupt(int irq, void *dev_id) +{ + struct efx_channel *channel = dev_id; + struct efx_nic *efx = channel->efx; + efx_oword_t *int_ker = efx->irq_status.addr; + int syserr; + + efx->last_irq_cpu = raw_smp_processor_id(); + EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_OWORD_FMT "\n", + irq, raw_smp_processor_id(), EFX_OWORD_VAL(*int_ker)); + + /* Check to see if we have a serious error condition */ + syserr = EFX_OWORD_FIELD(*int_ker, FSF_AZ_NET_IVEC_FATAL_INT); + if (unlikely(syserr)) + return efx_nic_fatal_interrupt(efx); + + /* Schedule processing of the channel */ + efx_schedule_channel(channel); + + return IRQ_HANDLED; +} + + +/* Setup RSS indirection table. + * This maps from the hash value of the packet to RXQ + */ +static void efx_setup_rss_indir_table(struct efx_nic *efx) +{ + int i = 0; + unsigned long offset; + efx_dword_t dword; + + if (efx_nic_rev(efx) < EFX_REV_FALCON_B0) + return; + + for (offset = FR_BZ_RX_INDIRECTION_TBL; + offset < FR_BZ_RX_INDIRECTION_TBL + 0x800; + offset += 0x10) { + EFX_POPULATE_DWORD_1(dword, FRF_BZ_IT_QUEUE, + i % efx->n_rx_queues); + efx_writed(efx, &dword, offset); + i++; + } +} + +/* Hook interrupt handler(s) + * Try MSI and then legacy interrupts. + */ +int efx_nic_init_interrupt(struct efx_nic *efx) +{ + struct efx_channel *channel; + int rc; + + if (!EFX_INT_MODE_USE_MSI(efx)) { + irq_handler_t handler; + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) + handler = efx_legacy_interrupt; + else + handler = falcon_legacy_interrupt_a1; + + rc = request_irq(efx->legacy_irq, handler, IRQF_SHARED, + efx->name, efx); + if (rc) { + EFX_ERR(efx, "failed to hook legacy IRQ %d\n", + efx->pci_dev->irq); + goto fail1; + } + return 0; + } + + /* Hook MSI or MSI-X interrupt */ + efx_for_each_channel(channel, efx) { + rc = request_irq(channel->irq, efx_msi_interrupt, + IRQF_PROBE_SHARED, /* Not shared */ + channel->name, channel); + if (rc) { + EFX_ERR(efx, "failed to hook IRQ %d\n", channel->irq); + goto fail2; + } + } + + return 0; + + fail2: + efx_for_each_channel(channel, efx) + free_irq(channel->irq, channel); + fail1: + return rc; +} + +void efx_nic_fini_interrupt(struct efx_nic *efx) +{ + struct efx_channel *channel; + efx_oword_t reg; + + /* Disable MSI/MSI-X interrupts */ + efx_for_each_channel(channel, efx) { + if (channel->irq) + free_irq(channel->irq, channel); + } + + /* ACK legacy interrupt */ + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) + efx_reado(efx, ®, FR_BZ_INT_ISR0); + else + falcon_irq_ack_a1(efx); + + /* Disable legacy interrupt */ + if (efx->legacy_irq) + free_irq(efx->legacy_irq, efx); +} + +u32 efx_nic_fpga_ver(struct efx_nic *efx) +{ + efx_oword_t altera_build; + efx_reado(efx, &altera_build, FR_AZ_ALTERA_BUILD); + return EFX_OWORD_FIELD(altera_build, FRF_AZ_ALTERA_BUILD_VER); +} + +void efx_nic_init_common(struct efx_nic *efx) +{ + efx_oword_t temp; + + /* Set positions of descriptor caches in SRAM. */ + EFX_POPULATE_OWORD_1(temp, FRF_AZ_SRM_TX_DC_BASE_ADR, + efx->type->tx_dc_base / 8); + efx_writeo(efx, &temp, FR_AZ_SRM_TX_DC_CFG); + EFX_POPULATE_OWORD_1(temp, FRF_AZ_SRM_RX_DC_BASE_ADR, + efx->type->rx_dc_base / 8); + efx_writeo(efx, &temp, FR_AZ_SRM_RX_DC_CFG); + + /* Set TX descriptor cache size. */ + BUILD_BUG_ON(TX_DC_ENTRIES != (8 << TX_DC_ENTRIES_ORDER)); + EFX_POPULATE_OWORD_1(temp, FRF_AZ_TX_DC_SIZE, TX_DC_ENTRIES_ORDER); + efx_writeo(efx, &temp, FR_AZ_TX_DC_CFG); + + /* Set RX descriptor cache size. Set low watermark to size-8, as + * this allows most efficient prefetching. + */ + BUILD_BUG_ON(RX_DC_ENTRIES != (8 << RX_DC_ENTRIES_ORDER)); + EFX_POPULATE_OWORD_1(temp, FRF_AZ_RX_DC_SIZE, RX_DC_ENTRIES_ORDER); + efx_writeo(efx, &temp, FR_AZ_RX_DC_CFG); + EFX_POPULATE_OWORD_1(temp, FRF_AZ_RX_DC_PF_LWM, RX_DC_ENTRIES - 8); + efx_writeo(efx, &temp, FR_AZ_RX_DC_PF_WM); + + /* Program INT_KER address */ + EFX_POPULATE_OWORD_2(temp, + FRF_AZ_NORM_INT_VEC_DIS_KER, + EFX_INT_MODE_USE_MSI(efx), + FRF_AZ_INT_ADR_KER, efx->irq_status.dma_addr); + efx_writeo(efx, &temp, FR_AZ_INT_ADR_KER); + + /* Enable all the genuinely fatal interrupts. (They are still + * masked by the overall interrupt mask, controlled by + * falcon_interrupts()). + * + * Note: All other fatal interrupts are enabled + */ + EFX_POPULATE_OWORD_3(temp, + FRF_AZ_ILL_ADR_INT_KER_EN, 1, + FRF_AZ_RBUF_OWN_INT_KER_EN, 1, + FRF_AZ_TBUF_OWN_INT_KER_EN, 1); + EFX_INVERT_OWORD(temp); + efx_writeo(efx, &temp, FR_AZ_FATAL_INTR_KER); + + efx_setup_rss_indir_table(efx); + + /* Disable the ugly timer-based TX DMA backoff and allow TX DMA to be + * controlled by the RX FIFO fill level. Set arbitration to one pkt/Q. + */ + efx_reado(efx, &temp, FR_AZ_TX_RESERVED); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_RX_SPACER, 0xfe); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_RX_SPACER_EN, 1); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_ONE_PKT_PER_Q, 1); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_PUSH_EN, 0); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_DIS_NON_IP_EV, 1); + /* Enable SW_EV to inherit in char driver - assume harmless here */ + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_SOFT_EVT_EN, 1); + /* Prefetch threshold 2 => fetch when descriptor cache half empty */ + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_PREF_THRESHOLD, 2); + /* Disable hardware watchdog which can misfire */ + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_PREF_WD_TMR, 0x3fffff); + /* Squash TX of packets of 16 bytes or less */ + if (efx_nic_rev(efx) >= EFX_REV_FALCON_B0) + EFX_SET_OWORD_FIELD(temp, FRF_BZ_TX_FLUSH_MIN_LEN_EN, 1); + efx_writeo(efx, &temp, FR_AZ_TX_RESERVED); +} --- linux-2.6.32.orig/drivers/net/sfc/mcdi_mac.c +++ linux-2.6.32/drivers/net/sfc/mcdi_mac.c @@ -0,0 +1,152 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#include "net_driver.h" +#include "efx.h" +#include "mac.h" +#include "mcdi.h" +#include "mcdi_pcol.h" + +static int efx_mcdi_set_mac(struct efx_nic *efx) +{ + u32 reject, fcntl; + u8 cmdbytes[MC_CMD_SET_MAC_IN_LEN]; + + memcpy(cmdbytes + MC_CMD_SET_MAC_IN_ADDR_OFST, + efx->net_dev->dev_addr, ETH_ALEN); + + MCDI_SET_DWORD(cmdbytes, SET_MAC_IN_MTU, + EFX_MAX_FRAME_LEN(efx->net_dev->mtu)); + MCDI_SET_DWORD(cmdbytes, SET_MAC_IN_DRAIN, 0); + + /* The MCDI command provides for controlling accept/reject + * of broadcast packets too, but the driver doesn't currently + * expose this. */ + reject = (efx->promiscuous) ? 0 : + (1 << MC_CMD_SET_MAC_IN_REJECT_UNCST_LBN); + MCDI_SET_DWORD(cmdbytes, SET_MAC_IN_REJECT, reject); + + switch (efx->wanted_fc) { + case EFX_FC_RX | EFX_FC_TX: + fcntl = MC_CMD_FCNTL_BIDIR; + break; + case EFX_FC_RX: + fcntl = MC_CMD_FCNTL_RESPOND; + break; + default: + fcntl = MC_CMD_FCNTL_OFF; + break; + } + if (efx->wanted_fc & EFX_FC_AUTO) + fcntl = MC_CMD_FCNTL_AUTO; + + MCDI_SET_DWORD(cmdbytes, SET_MAC_IN_FCNTL, fcntl); + + return efx_mcdi_rpc(efx, MC_CMD_SET_MAC, cmdbytes, sizeof(cmdbytes), + NULL, 0, NULL); +} + +static int efx_mcdi_get_mac_faults(struct efx_nic *efx, u32 *faults) +{ + u8 outbuf[MC_CMD_GET_LINK_OUT_LEN]; + size_t outlength; + int rc; + + BUILD_BUG_ON(MC_CMD_GET_LINK_IN_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_GET_LINK, NULL, 0, + outbuf, sizeof(outbuf), &outlength); + if (rc) + goto fail; + + *faults = MCDI_DWORD(outbuf, GET_LINK_OUT_MAC_FAULT); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", + __func__, rc); + return rc; +} + +int efx_mcdi_mac_stats(struct efx_nic *efx, dma_addr_t dma_addr, + u32 dma_len, int enable, int clear) +{ + u8 inbuf[MC_CMD_MAC_STATS_IN_LEN]; + int rc; + efx_dword_t *cmd_ptr; + int period = 1000; + u32 addr_hi; + u32 addr_lo; + + BUILD_BUG_ON(MC_CMD_MAC_STATS_OUT_LEN != 0); + + addr_lo = ((u64)dma_addr) >> 0; + addr_hi = ((u64)dma_addr) >> 32; + + MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_ADDR_LO, addr_lo); + MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_ADDR_HI, addr_hi); + cmd_ptr = (efx_dword_t *)MCDI_PTR(inbuf, MAC_STATS_IN_CMD); + if (enable) + EFX_POPULATE_DWORD_6(*cmd_ptr, + MC_CMD_MAC_STATS_CMD_DMA, 1, + MC_CMD_MAC_STATS_CMD_CLEAR, clear, + MC_CMD_MAC_STATS_CMD_PERIODIC_CHANGE, 1, + MC_CMD_MAC_STATS_CMD_PERIODIC_ENABLE, 1, + MC_CMD_MAC_STATS_CMD_PERIODIC_CLEAR, 0, + MC_CMD_MAC_STATS_CMD_PERIOD_MS, period); + else + EFX_POPULATE_DWORD_5(*cmd_ptr, + MC_CMD_MAC_STATS_CMD_DMA, 0, + MC_CMD_MAC_STATS_CMD_CLEAR, clear, + MC_CMD_MAC_STATS_CMD_PERIODIC_CHANGE, 1, + MC_CMD_MAC_STATS_CMD_PERIODIC_ENABLE, 0, + MC_CMD_MAC_STATS_CMD_PERIODIC_CLEAR, 0); + MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len); + + rc = efx_mcdi_rpc(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: %s failed rc=%d\n", + __func__, enable ? "enable" : "disable", rc); + return rc; +} + +static int efx_mcdi_mac_reconfigure(struct efx_nic *efx) +{ + int rc; + + rc = efx_mcdi_set_mac(efx); + if (rc != 0) + return rc; + + /* Restore the multicast hash registers. */ + efx->type->push_multicast_hash(efx); + + return 0; +} + + +static bool efx_mcdi_mac_check_fault(struct efx_nic *efx) +{ + u32 faults; + int rc = efx_mcdi_get_mac_faults(efx, &faults); + return (rc != 0) || (faults != 0); +} + + +struct efx_mac_operations efx_mcdi_mac_operations = { + .reconfigure = efx_mcdi_mac_reconfigure, + .update_stats = efx_port_dummy_op_void, + .check_fault = efx_mcdi_mac_check_fault, +}; --- linux-2.6.32.orig/drivers/net/sfc/tx.c +++ linux-2.6.32/drivers/net/sfc/tx.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2005-2008 Solarflare Communications Inc. + * Copyright 2005-2009 Solarflare Communications Inc. * * 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 @@ -12,12 +12,13 @@ #include #include #include +#include +#include #include #include #include "net_driver.h" -#include "tx.h" #include "efx.h" -#include "falcon.h" +#include "nic.h" #include "workarounds.h" /* @@ -26,8 +27,7 @@ * The tx_queue descriptor ring fill-level must fall below this value * before we restart the netif queue */ -#define EFX_NETDEV_TX_THRESHOLD(_tx_queue) \ - (_tx_queue->efx->type->txd_ring_mask / 2u) +#define EFX_TXQ_THRESHOLD (EFX_TXQ_MASK / 2u) /* We want to be able to nest calls to netif_stop_queue(), since each * channel can have an individual stop on the queue. @@ -125,6 +125,24 @@ } +static inline unsigned +efx_max_tx_len(struct efx_nic *efx, dma_addr_t dma_addr) +{ + /* Depending on the NIC revision, we can use descriptor + * lengths up to 8K or 8K-1. However, since PCI Express + * devices must split read requests at 4K boundaries, there is + * little benefit from using descriptors that cross those + * boundaries and we keep things simple by not doing so. + */ + unsigned len = (~dma_addr & 0xfff) + 1; + + /* Work around hardware bug for unaligned buffers. */ + if (EFX_WORKAROUND_5391(efx) && (dma_addr & 0xf)) + len = min_t(unsigned, len, 512 - (dma_addr & 0xf)); + + return len; +} + /* * Add a socket buffer to a TX queue * @@ -135,11 +153,13 @@ * If any DMA mapping fails, any mapped fragments will be unmapped, * the queue's insert pointer will be restored to its original value. * + * This function is split out from efx_hard_start_xmit to allow the + * loopback test to direct packets via specific TX queues. + * * Returns NETDEV_TX_OK or NETDEV_TX_BUSY * You must hold netif_tx_lock() to call this function. */ -static netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, - struct sk_buff *skb) +netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb) { struct efx_nic *efx = tx_queue->efx; struct pci_dev *pci_dev = efx->pci_dev; @@ -147,7 +167,7 @@ skb_frag_t *fragment; struct page *page; int page_offset; - unsigned int len, unmap_len = 0, fill_level, insert_ptr, misalign; + unsigned int len, unmap_len = 0, fill_level, insert_ptr; dma_addr_t dma_addr, unmap_addr = 0; unsigned int dma_len; bool unmap_single; @@ -156,7 +176,7 @@ EFX_BUG_ON_PARANOID(tx_queue->write_count != tx_queue->insert_count); - if (skb_shinfo((struct sk_buff *)skb)->gso_size) + if (skb_shinfo(skb)->gso_size) return efx_enqueue_skb_tso(tx_queue, skb); /* Get size of the initial fragment */ @@ -171,7 +191,7 @@ } fill_level = tx_queue->insert_count - tx_queue->old_read_count; - q_space = efx->type->txd_ring_mask - 1 - fill_level; + q_space = EFX_TXQ_MASK - 1 - fill_level; /* Map for DMA. Use pci_map_single rather than pci_map_page * since this is more efficient on machines with sparse @@ -208,16 +228,14 @@ &tx_queue->read_count; fill_level = (tx_queue->insert_count - tx_queue->old_read_count); - q_space = (efx->type->txd_ring_mask - 1 - - fill_level); + q_space = EFX_TXQ_MASK - 1 - fill_level; if (unlikely(q_space-- <= 0)) goto stop; smp_mb(); --tx_queue->stopped; } - insert_ptr = (tx_queue->insert_count & - efx->type->txd_ring_mask); + insert_ptr = tx_queue->insert_count & EFX_TXQ_MASK; buffer = &tx_queue->buffer[insert_ptr]; efx_tsoh_free(tx_queue, buffer); EFX_BUG_ON_PARANOID(buffer->tsoh); @@ -226,14 +244,10 @@ EFX_BUG_ON_PARANOID(!buffer->continuation); EFX_BUG_ON_PARANOID(buffer->unmap_len); - dma_len = (((~dma_addr) & efx->type->tx_dma_mask) + 1); - if (likely(dma_len > len)) + dma_len = efx_max_tx_len(efx, dma_addr); + if (likely(dma_len >= len)) dma_len = len; - misalign = (unsigned)dma_addr & efx->type->bug5391_mask; - if (misalign && dma_len + misalign > 512) - dma_len = 512 - misalign; - /* Fill out per descriptor fields */ buffer->len = dma_len; buffer->dma_addr = dma_addr; @@ -266,7 +280,7 @@ buffer->continuation = false; /* Pass off to hardware */ - falcon_push_buffers(tx_queue); + efx_nic_push_buffers(tx_queue); return NETDEV_TX_OK; @@ -276,7 +290,7 @@ skb_shinfo(skb)->nr_frags + 1); /* Mark the packet as transmitted, and free the SKB ourselves */ - dev_kfree_skb_any((struct sk_buff *)skb); + dev_kfree_skb_any(skb); goto unwind; stop: @@ -289,7 +303,7 @@ /* Work backwards until we hit the original insert pointer value */ while (tx_queue->insert_count != tx_queue->write_count) { --tx_queue->insert_count; - insert_ptr = tx_queue->insert_count & efx->type->txd_ring_mask; + insert_ptr = tx_queue->insert_count & EFX_TXQ_MASK; buffer = &tx_queue->buffer[insert_ptr]; efx_dequeue_buffer(tx_queue, buffer); buffer->len = 0; @@ -318,10 +332,9 @@ { struct efx_nic *efx = tx_queue->efx; unsigned int stop_index, read_ptr; - unsigned int mask = tx_queue->efx->type->txd_ring_mask; - stop_index = (index + 1) & mask; - read_ptr = tx_queue->read_count & mask; + stop_index = (index + 1) & EFX_TXQ_MASK; + read_ptr = tx_queue->read_count & EFX_TXQ_MASK; while (read_ptr != stop_index) { struct efx_tx_buffer *buffer = &tx_queue->buffer[read_ptr]; @@ -338,28 +351,10 @@ buffer->len = 0; ++tx_queue->read_count; - read_ptr = tx_queue->read_count & mask; + read_ptr = tx_queue->read_count & EFX_TXQ_MASK; } } -/* Initiate a packet transmission on the specified TX queue. - * Note that returning anything other than NETDEV_TX_OK will cause the - * OS to free the skb. - * - * This function is split out from efx_hard_start_xmit to allow the - * loopback test to direct packets via specific TX queues. It is - * therefore a non-static inline, so as not to penalise performance - * for non-loopback transmissions. - * - * Context: netif_tx_lock held - */ -inline netdev_tx_t efx_xmit(struct efx_nic *efx, - struct efx_tx_queue *tx_queue, struct sk_buff *skb) -{ - /* Map fragments for DMA and add to TX queue */ - return efx_enqueue_skb(tx_queue, skb); -} - /* Initiate a packet transmission. We use one channel per CPU * (sharing when we have more CPUs than channels). On Falcon, the TX * completion events will be directed back to the CPU that transmitted @@ -383,7 +378,7 @@ else tx_queue = &efx->tx_queue[EFX_TX_QUEUE_NO_CSUM]; - return efx_xmit(efx, tx_queue, skb); + return efx_enqueue_skb(tx_queue, skb); } void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) @@ -391,7 +386,7 @@ unsigned fill_level; struct efx_nic *efx = tx_queue->efx; - EFX_BUG_ON_PARANOID(index > efx->type->txd_ring_mask); + EFX_BUG_ON_PARANOID(index > EFX_TXQ_MASK); efx_dequeue_buffers(tx_queue, index); @@ -401,7 +396,7 @@ smp_mb(); if (unlikely(tx_queue->stopped) && likely(efx->port_enabled)) { fill_level = tx_queue->insert_count - tx_queue->read_count; - if (fill_level < EFX_NETDEV_TX_THRESHOLD(tx_queue)) { + if (fill_level < EFX_TXQ_THRESHOLD) { EFX_BUG_ON_PARANOID(!efx_dev_registered(efx)); /* Do this under netif_tx_lock(), to avoid racing @@ -425,15 +420,15 @@ EFX_LOG(efx, "creating TX queue %d\n", tx_queue->queue); /* Allocate software ring */ - txq_size = (efx->type->txd_ring_mask + 1) * sizeof(*tx_queue->buffer); + txq_size = EFX_TXQ_SIZE * sizeof(*tx_queue->buffer); tx_queue->buffer = kzalloc(txq_size, GFP_KERNEL); if (!tx_queue->buffer) return -ENOMEM; - for (i = 0; i <= efx->type->txd_ring_mask; ++i) + for (i = 0; i <= EFX_TXQ_MASK; ++i) tx_queue->buffer[i].continuation = true; /* Allocate hardware ring */ - rc = falcon_probe_tx(tx_queue); + rc = efx_nic_probe_tx(tx_queue); if (rc) goto fail; @@ -456,7 +451,7 @@ BUG_ON(tx_queue->stopped); /* Set up TX descriptor ring */ - falcon_init_tx(tx_queue); + efx_nic_init_tx(tx_queue); } void efx_release_tx_buffers(struct efx_tx_queue *tx_queue) @@ -468,8 +463,7 @@ /* Free any buffers left in the ring */ while (tx_queue->read_count != tx_queue->write_count) { - buffer = &tx_queue->buffer[tx_queue->read_count & - tx_queue->efx->type->txd_ring_mask]; + buffer = &tx_queue->buffer[tx_queue->read_count & EFX_TXQ_MASK]; efx_dequeue_buffer(tx_queue, buffer); buffer->continuation = true; buffer->len = 0; @@ -483,7 +477,7 @@ EFX_LOG(tx_queue->efx, "shutting down TX queue %d\n", tx_queue->queue); /* Flush TX queue, remove descriptor ring */ - falcon_fini_tx(tx_queue); + efx_nic_fini_tx(tx_queue); efx_release_tx_buffers(tx_queue); @@ -500,7 +494,7 @@ void efx_remove_tx_queue(struct efx_tx_queue *tx_queue) { EFX_LOG(tx_queue->efx, "destroying TX queue %d\n", tx_queue->queue); - falcon_remove_tx(tx_queue); + efx_nic_remove_tx(tx_queue); kfree(tx_queue->buffer); tx_queue->buffer = NULL; @@ -539,6 +533,7 @@ #define ETH_HDR_LEN(skb) (skb_network_header(skb) - (skb)->data) #define SKB_TCP_OFF(skb) PTR_DIFF(tcp_hdr(skb), (skb)->data) #define SKB_IPV4_OFF(skb) PTR_DIFF(ip_hdr(skb), (skb)->data) +#define SKB_IPV6_OFF(skb) PTR_DIFF(ipv6_hdr(skb), (skb)->data) /** * struct tso_state - TSO state for an SKB @@ -551,6 +546,7 @@ * @unmap_len: Length of SKB fragment * @unmap_addr: DMA address of SKB fragment * @unmap_single: DMA single vs page mapping flag + * @protocol: Network protocol (after any VLAN header) * @header_len: Number of bytes of header * @full_packet_size: Number of bytes to put in each outgoing segment * @@ -571,6 +567,7 @@ dma_addr_t unmap_addr; bool unmap_single; + __be16 protocol; unsigned header_len; int full_packet_size; }; @@ -578,9 +575,9 @@ /* * Verify that our various assumptions about sk_buffs and the conditions - * under which TSO will be attempted hold true. + * under which TSO will be attempted hold true. Return the protocol number. */ -static void efx_tso_check_safe(struct sk_buff *skb) +static __be16 efx_tso_check_protocol(struct sk_buff *skb) { __be16 protocol = skb->protocol; @@ -595,13 +592,22 @@ if (protocol == htons(ETH_P_IP)) skb_set_transport_header(skb, sizeof(*veh) + 4 * ip_hdr(skb)->ihl); + else if (protocol == htons(ETH_P_IPV6)) + skb_set_transport_header(skb, sizeof(*veh) + + sizeof(struct ipv6hdr)); } - EFX_BUG_ON_PARANOID(protocol != htons(ETH_P_IP)); - EFX_BUG_ON_PARANOID(ip_hdr(skb)->protocol != IPPROTO_TCP); + if (protocol == htons(ETH_P_IP)) { + EFX_BUG_ON_PARANOID(ip_hdr(skb)->protocol != IPPROTO_TCP); + } else { + EFX_BUG_ON_PARANOID(protocol != htons(ETH_P_IPV6)); + EFX_BUG_ON_PARANOID(ipv6_hdr(skb)->nexthdr != NEXTHDR_TCP); + } EFX_BUG_ON_PARANOID((PTR_DIFF(tcp_hdr(skb), skb->data) + (tcp_hdr(skb)->doff << 2u)) > skb_headlen(skb)); + + return protocol; } @@ -708,14 +714,14 @@ { struct efx_tx_buffer *buffer; struct efx_nic *efx = tx_queue->efx; - unsigned dma_len, fill_level, insert_ptr, misalign; + unsigned dma_len, fill_level, insert_ptr; int q_space; EFX_BUG_ON_PARANOID(len <= 0); fill_level = tx_queue->insert_count - tx_queue->old_read_count; /* -1 as there is no way to represent all descriptors used */ - q_space = efx->type->txd_ring_mask - 1 - fill_level; + q_space = EFX_TXQ_MASK - 1 - fill_level; while (1) { if (unlikely(q_space-- <= 0)) { @@ -731,7 +737,7 @@ *(volatile unsigned *)&tx_queue->read_count; fill_level = (tx_queue->insert_count - tx_queue->old_read_count); - q_space = efx->type->txd_ring_mask - 1 - fill_level; + q_space = EFX_TXQ_MASK - 1 - fill_level; if (unlikely(q_space-- <= 0)) { *final_buffer = NULL; return 1; @@ -740,13 +746,13 @@ --tx_queue->stopped; } - insert_ptr = tx_queue->insert_count & efx->type->txd_ring_mask; + insert_ptr = tx_queue->insert_count & EFX_TXQ_MASK; buffer = &tx_queue->buffer[insert_ptr]; ++tx_queue->insert_count; EFX_BUG_ON_PARANOID(tx_queue->insert_count - tx_queue->read_count > - efx->type->txd_ring_mask); + EFX_TXQ_MASK); efx_tsoh_free(tx_queue, buffer); EFX_BUG_ON_PARANOID(buffer->len); @@ -757,12 +763,7 @@ buffer->dma_addr = dma_addr; - /* Ensure we do not cross a boundary unsupported by H/W */ - dma_len = (~dma_addr & efx->type->tx_dma_mask) + 1; - - misalign = (unsigned)dma_addr & efx->type->bug5391_mask; - if (misalign && dma_len + misalign > 512) - dma_len = 512 - misalign; + dma_len = efx_max_tx_len(efx, dma_addr); /* If there is enough space to send then do so */ if (dma_len >= len) @@ -792,8 +793,7 @@ { struct efx_tx_buffer *buffer; - buffer = &tx_queue->buffer[tx_queue->insert_count & - tx_queue->efx->type->txd_ring_mask]; + buffer = &tx_queue->buffer[tx_queue->insert_count & EFX_TXQ_MASK]; efx_tsoh_free(tx_queue, buffer); EFX_BUG_ON_PARANOID(buffer->len); EFX_BUG_ON_PARANOID(buffer->unmap_len); @@ -818,11 +818,9 @@ while (tx_queue->insert_count != tx_queue->write_count) { --tx_queue->insert_count; buffer = &tx_queue->buffer[tx_queue->insert_count & - tx_queue->efx->type->txd_ring_mask]; + EFX_TXQ_MASK]; efx_tsoh_free(tx_queue, buffer); EFX_BUG_ON_PARANOID(buffer->skb); - buffer->len = 0; - buffer->continuation = true; if (buffer->unmap_len) { unmap_addr = (buffer->dma_addr + buffer->len - buffer->unmap_len); @@ -836,6 +834,8 @@ PCI_DMA_TODEVICE); buffer->unmap_len = 0; } + buffer->len = 0; + buffer->continuation = true; } } @@ -850,7 +850,10 @@ + PTR_DIFF(tcp_hdr(skb), skb->data)); st->full_packet_size = st->header_len + skb_shinfo(skb)->gso_size; - st->ipv4_id = ntohs(ip_hdr(skb)->id); + if (st->protocol == htons(ETH_P_IP)) + st->ipv4_id = ntohs(ip_hdr(skb)->id); + else + st->ipv4_id = 0; st->seqnum = ntohl(tcp_hdr(skb)->seq); EFX_BUG_ON_PARANOID(tcp_hdr(skb)->urg); @@ -965,7 +968,6 @@ struct tso_state *st) { struct efx_tso_header *tsoh; - struct iphdr *tsoh_iph; struct tcphdr *tsoh_th; unsigned ip_length; u8 *header; @@ -989,7 +991,6 @@ header = TSOH_BUFFER(tsoh); tsoh_th = (struct tcphdr *)(header + SKB_TCP_OFF(skb)); - tsoh_iph = (struct iphdr *)(header + SKB_IPV4_OFF(skb)); /* Copy and update the headers. */ memcpy(header, skb->data, st->header_len); @@ -1007,11 +1008,22 @@ tsoh_th->fin = tcp_hdr(skb)->fin; tsoh_th->psh = tcp_hdr(skb)->psh; } - tsoh_iph->tot_len = htons(ip_length); - /* Linux leaves suitable gaps in the IP ID space for us to fill. */ - tsoh_iph->id = htons(st->ipv4_id); - st->ipv4_id++; + if (st->protocol == htons(ETH_P_IP)) { + struct iphdr *tsoh_iph = + (struct iphdr *)(header + SKB_IPV4_OFF(skb)); + + tsoh_iph->tot_len = htons(ip_length); + + /* Linux leaves suitable gaps in the IP ID space for us to fill. */ + tsoh_iph->id = htons(st->ipv4_id); + st->ipv4_id++; + } else { + struct ipv6hdr *tsoh_iph = + (struct ipv6hdr *)(header + SKB_IPV6_OFF(skb)); + + tsoh_iph->payload_len = htons(ip_length - sizeof(*tsoh_iph)); + } st->packet_space = skb_shinfo(skb)->gso_size; ++tx_queue->tso_packets; @@ -1041,8 +1053,8 @@ int frag_i, rc, rc2 = NETDEV_TX_OK; struct tso_state state; - /* Verify TSO is safe - these checks should never fail. */ - efx_tso_check_safe(skb); + /* Find the packet protocol and sanity-check it */ + state.protocol = efx_tso_check_protocol(skb); EFX_BUG_ON_PARANOID(tx_queue->write_count != tx_queue->insert_count); @@ -1092,14 +1104,14 @@ } /* Pass off to hardware */ - falcon_push_buffers(tx_queue); + efx_nic_push_buffers(tx_queue); tx_queue->tso_bursts++; return NETDEV_TX_OK; mem_err: EFX_ERR(efx, "Out of memory for TSO headers, or PCI mapping error\n"); - dev_kfree_skb_any((struct sk_buff *)skb); + dev_kfree_skb_any(skb); goto unwind; stop: @@ -1135,7 +1147,7 @@ unsigned i; if (tx_queue->buffer) { - for (i = 0; i <= tx_queue->efx->type->txd_ring_mask; ++i) + for (i = 0; i <= EFX_TXQ_MASK; ++i) efx_tsoh_free(tx_queue, &tx_queue->buffer[i]); } --- linux-2.6.32.orig/drivers/net/sfc/mcdi.c +++ linux-2.6.32/drivers/net/sfc/mcdi.c @@ -0,0 +1,1114 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2008-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#include +#include "net_driver.h" +#include "nic.h" +#include "io.h" +#include "regs.h" +#include "mcdi_pcol.h" +#include "phy.h" + +/************************************************************************** + * + * Management-Controller-to-Driver Interface + * + ************************************************************************** + */ + +/* Software-defined structure to the shared-memory */ +#define CMD_NOTIFY_PORT0 0 +#define CMD_NOTIFY_PORT1 4 +#define CMD_PDU_PORT0 0x008 +#define CMD_PDU_PORT1 0x108 +#define REBOOT_FLAG_PORT0 0x3f8 +#define REBOOT_FLAG_PORT1 0x3fc + +#define MCDI_RPC_TIMEOUT 10 /*seconds */ + +#define MCDI_PDU(efx) \ + (efx_port_num(efx) ? CMD_PDU_PORT1 : CMD_PDU_PORT0) +#define MCDI_DOORBELL(efx) \ + (efx_port_num(efx) ? CMD_NOTIFY_PORT1 : CMD_NOTIFY_PORT0) +#define MCDI_REBOOT_FLAG(efx) \ + (efx_port_num(efx) ? REBOOT_FLAG_PORT1 : REBOOT_FLAG_PORT0) + +#define SEQ_MASK \ + EFX_MASK32(EFX_WIDTH(MCDI_HEADER_SEQ)) + +static inline struct efx_mcdi_iface *efx_mcdi(struct efx_nic *efx) +{ + struct siena_nic_data *nic_data; + EFX_BUG_ON_PARANOID(efx_nic_rev(efx) < EFX_REV_SIENA_A0); + nic_data = efx->nic_data; + return &nic_data->mcdi; +} + +void efx_mcdi_init(struct efx_nic *efx) +{ + struct efx_mcdi_iface *mcdi; + + if (efx_nic_rev(efx) < EFX_REV_SIENA_A0) + return; + + mcdi = efx_mcdi(efx); + init_waitqueue_head(&mcdi->wq); + spin_lock_init(&mcdi->iface_lock); + atomic_set(&mcdi->state, MCDI_STATE_QUIESCENT); + mcdi->mode = MCDI_MODE_POLL; + + (void) efx_mcdi_poll_reboot(efx); +} + +static void efx_mcdi_copyin(struct efx_nic *efx, unsigned cmd, + const u8 *inbuf, size_t inlen) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + unsigned pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx); + unsigned doorbell = FR_CZ_MC_TREG_SMEM + MCDI_DOORBELL(efx); + unsigned int i; + efx_dword_t hdr; + u32 xflags, seqno; + + BUG_ON(atomic_read(&mcdi->state) == MCDI_STATE_QUIESCENT); + BUG_ON(inlen & 3 || inlen >= 0x100); + + seqno = mcdi->seqno & SEQ_MASK; + xflags = 0; + if (mcdi->mode == MCDI_MODE_EVENTS) + xflags |= MCDI_HEADER_XFLAGS_EVREQ; + + EFX_POPULATE_DWORD_6(hdr, + MCDI_HEADER_RESPONSE, 0, + MCDI_HEADER_RESYNC, 1, + MCDI_HEADER_CODE, cmd, + MCDI_HEADER_DATALEN, inlen, + MCDI_HEADER_SEQ, seqno, + MCDI_HEADER_XFLAGS, xflags); + + efx_writed(efx, &hdr, pdu); + + for (i = 0; i < inlen; i += 4) + _efx_writed(efx, *((__le32 *)(inbuf + i)), pdu + 4 + i); + + /* Ensure the payload is written out before the header */ + wmb(); + + /* ring the doorbell with a distinctive value */ + _efx_writed(efx, (__force __le32) 0x45789abc, doorbell); +} + +static void efx_mcdi_copyout(struct efx_nic *efx, u8 *outbuf, size_t outlen) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx); + int i; + + BUG_ON(atomic_read(&mcdi->state) == MCDI_STATE_QUIESCENT); + BUG_ON(outlen & 3 || outlen >= 0x100); + + for (i = 0; i < outlen; i += 4) + *((__le32 *)(outbuf + i)) = _efx_readd(efx, pdu + 4 + i); +} + +static int efx_mcdi_poll(struct efx_nic *efx) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + unsigned int time, finish; + unsigned int respseq, respcmd, error; + unsigned int pdu = FR_CZ_MC_TREG_SMEM + MCDI_PDU(efx); + unsigned int rc, spins; + efx_dword_t reg; + + /* Check for a reboot atomically with respect to efx_mcdi_copyout() */ + rc = -efx_mcdi_poll_reboot(efx); + if (rc) + goto out; + + /* Poll for completion. Poll quickly (once a us) for the 1st jiffy, + * because generally mcdi responses are fast. After that, back off + * and poll once a jiffy (approximately) + */ + spins = TICK_USEC; + finish = get_seconds() + MCDI_RPC_TIMEOUT; + + while (1) { + if (spins != 0) { + --spins; + udelay(1); + } else { + schedule_timeout_uninterruptible(1); + } + + time = get_seconds(); + + rmb(); + efx_readd(efx, ®, pdu); + + /* All 1's indicates that shared memory is in reset (and is + * not a valid header). Wait for it to come out reset before + * completing the command */ + if (EFX_DWORD_FIELD(reg, EFX_DWORD_0) != 0xffffffff && + EFX_DWORD_FIELD(reg, MCDI_HEADER_RESPONSE)) + break; + + if (time >= finish) + return -ETIMEDOUT; + } + + mcdi->resplen = EFX_DWORD_FIELD(reg, MCDI_HEADER_DATALEN); + respseq = EFX_DWORD_FIELD(reg, MCDI_HEADER_SEQ); + respcmd = EFX_DWORD_FIELD(reg, MCDI_HEADER_CODE); + error = EFX_DWORD_FIELD(reg, MCDI_HEADER_ERROR); + + if (error && mcdi->resplen == 0) { + EFX_ERR(efx, "MC rebooted\n"); + rc = EIO; + } else if ((respseq ^ mcdi->seqno) & SEQ_MASK) { + EFX_ERR(efx, "MC response mismatch tx seq 0x%x rx seq 0x%x\n", + respseq, mcdi->seqno); + rc = EIO; + } else if (error) { + efx_readd(efx, ®, pdu + 4); + switch (EFX_DWORD_FIELD(reg, EFX_DWORD_0)) { +#define TRANSLATE_ERROR(name) \ + case MC_CMD_ERR_ ## name: \ + rc = name; \ + break + TRANSLATE_ERROR(ENOENT); + TRANSLATE_ERROR(EINTR); + TRANSLATE_ERROR(EACCES); + TRANSLATE_ERROR(EBUSY); + TRANSLATE_ERROR(EINVAL); + TRANSLATE_ERROR(EDEADLK); + TRANSLATE_ERROR(ENOSYS); + TRANSLATE_ERROR(ETIME); +#undef TRANSLATE_ERROR + default: + rc = EIO; + break; + } + } else + rc = 0; + +out: + mcdi->resprc = rc; + if (rc) + mcdi->resplen = 0; + + /* Return rc=0 like wait_event_timeout() */ + return 0; +} + +/* Test and clear MC-rebooted flag for this port/function */ +int efx_mcdi_poll_reboot(struct efx_nic *efx) +{ + unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_REBOOT_FLAG(efx); + efx_dword_t reg; + uint32_t value; + + if (efx_nic_rev(efx) < EFX_REV_SIENA_A0) + return false; + + efx_readd(efx, ®, addr); + value = EFX_DWORD_FIELD(reg, EFX_DWORD_0); + + if (value == 0) + return 0; + + EFX_ZERO_DWORD(reg); + efx_writed(efx, ®, addr); + + if (value == MC_STATUS_DWORD_ASSERT) + return -EINTR; + else + return -EIO; +} + +static void efx_mcdi_acquire(struct efx_mcdi_iface *mcdi) +{ + /* Wait until the interface becomes QUIESCENT and we win the race + * to mark it RUNNING. */ + wait_event(mcdi->wq, + atomic_cmpxchg(&mcdi->state, + MCDI_STATE_QUIESCENT, + MCDI_STATE_RUNNING) + == MCDI_STATE_QUIESCENT); +} + +static int efx_mcdi_await_completion(struct efx_nic *efx) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + + if (wait_event_timeout( + mcdi->wq, + atomic_read(&mcdi->state) == MCDI_STATE_COMPLETED, + msecs_to_jiffies(MCDI_RPC_TIMEOUT * 1000)) == 0) + return -ETIMEDOUT; + + /* Check if efx_mcdi_set_mode() switched us back to polled completions. + * In which case, poll for completions directly. If efx_mcdi_ev_cpl() + * completed the request first, then we'll just end up completing the + * request again, which is safe. + * + * We need an smp_rmb() to synchronise with efx_mcdi_mode_poll(), which + * wait_event_timeout() implicitly provides. + */ + if (mcdi->mode == MCDI_MODE_POLL) + return efx_mcdi_poll(efx); + + return 0; +} + +static bool efx_mcdi_complete(struct efx_mcdi_iface *mcdi) +{ + /* If the interface is RUNNING, then move to COMPLETED and wake any + * waiters. If the interface isn't in RUNNING then we've received a + * duplicate completion after we've already transitioned back to + * QUIESCENT. [A subsequent invocation would increment seqno, so would + * have failed the seqno check]. + */ + if (atomic_cmpxchg(&mcdi->state, + MCDI_STATE_RUNNING, + MCDI_STATE_COMPLETED) == MCDI_STATE_RUNNING) { + wake_up(&mcdi->wq); + return true; + } + + return false; +} + +static void efx_mcdi_release(struct efx_mcdi_iface *mcdi) +{ + atomic_set(&mcdi->state, MCDI_STATE_QUIESCENT); + wake_up(&mcdi->wq); +} + +static void efx_mcdi_ev_cpl(struct efx_nic *efx, unsigned int seqno, + unsigned int datalen, unsigned int errno) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + bool wake = false; + + spin_lock(&mcdi->iface_lock); + + if ((seqno ^ mcdi->seqno) & SEQ_MASK) { + if (mcdi->credits) + /* The request has been cancelled */ + --mcdi->credits; + else + EFX_ERR(efx, "MC response mismatch tx seq 0x%x rx " + "seq 0x%x\n", seqno, mcdi->seqno); + } else { + mcdi->resprc = errno; + mcdi->resplen = datalen; + + wake = true; + } + + spin_unlock(&mcdi->iface_lock); + + if (wake) + efx_mcdi_complete(mcdi); +} + +/* Issue the given command by writing the data into the shared memory PDU, + * ring the doorbell and wait for completion. Copyout the result. */ +int efx_mcdi_rpc(struct efx_nic *efx, unsigned cmd, + const u8 *inbuf, size_t inlen, u8 *outbuf, size_t outlen, + size_t *outlen_actual) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + int rc; + BUG_ON(efx_nic_rev(efx) < EFX_REV_SIENA_A0); + + efx_mcdi_acquire(mcdi); + + /* Serialise with efx_mcdi_ev_cpl() and efx_mcdi_ev_death() */ + spin_lock_bh(&mcdi->iface_lock); + ++mcdi->seqno; + spin_unlock_bh(&mcdi->iface_lock); + + efx_mcdi_copyin(efx, cmd, inbuf, inlen); + + if (mcdi->mode == MCDI_MODE_POLL) + rc = efx_mcdi_poll(efx); + else + rc = efx_mcdi_await_completion(efx); + + if (rc != 0) { + /* Close the race with efx_mcdi_ev_cpl() executing just too late + * and completing a request we've just cancelled, by ensuring + * that the seqno check therein fails. + */ + spin_lock_bh(&mcdi->iface_lock); + ++mcdi->seqno; + ++mcdi->credits; + spin_unlock_bh(&mcdi->iface_lock); + + EFX_ERR(efx, "MC command 0x%x inlen %d mode %d timed out\n", + cmd, (int)inlen, mcdi->mode); + } else { + size_t resplen; + + /* At the very least we need a memory barrier here to ensure + * we pick up changes from efx_mcdi_ev_cpl(). Protect against + * a spurious efx_mcdi_ev_cpl() running concurrently by + * acquiring the iface_lock. */ + spin_lock_bh(&mcdi->iface_lock); + rc = -mcdi->resprc; + resplen = mcdi->resplen; + spin_unlock_bh(&mcdi->iface_lock); + + if (rc == 0) { + efx_mcdi_copyout(efx, outbuf, + min(outlen, mcdi->resplen + 3) & ~0x3); + if (outlen_actual != NULL) + *outlen_actual = resplen; + } else if (cmd == MC_CMD_REBOOT && rc == -EIO) + ; /* Don't reset if MC_CMD_REBOOT returns EIO */ + else if (rc == -EIO || rc == -EINTR) { + EFX_ERR(efx, "MC fatal error %d\n", -rc); + efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE); + } else + EFX_ERR(efx, "MC command 0x%x inlen %d failed rc=%d\n", + cmd, (int)inlen, -rc); + } + + efx_mcdi_release(mcdi); + return rc; +} + +void efx_mcdi_mode_poll(struct efx_nic *efx) +{ + struct efx_mcdi_iface *mcdi; + + if (efx_nic_rev(efx) < EFX_REV_SIENA_A0) + return; + + mcdi = efx_mcdi(efx); + if (mcdi->mode == MCDI_MODE_POLL) + return; + + /* We can switch from event completion to polled completion, because + * mcdi requests are always completed in shared memory. We do this by + * switching the mode to POLL'd then completing the request. + * efx_mcdi_await_completion() will then call efx_mcdi_poll(). + * + * We need an smp_wmb() to synchronise with efx_mcdi_await_completion(), + * which efx_mcdi_complete() provides for us. + */ + mcdi->mode = MCDI_MODE_POLL; + + efx_mcdi_complete(mcdi); +} + +void efx_mcdi_mode_event(struct efx_nic *efx) +{ + struct efx_mcdi_iface *mcdi; + + if (efx_nic_rev(efx) < EFX_REV_SIENA_A0) + return; + + mcdi = efx_mcdi(efx); + + if (mcdi->mode == MCDI_MODE_EVENTS) + return; + + /* We can't switch from polled to event completion in the middle of a + * request, because the completion method is specified in the request. + * So acquire the interface to serialise the requestors. We don't need + * to acquire the iface_lock to change the mode here, but we do need a + * write memory barrier ensure that efx_mcdi_rpc() sees it, which + * efx_mcdi_acquire() provides. + */ + efx_mcdi_acquire(mcdi); + mcdi->mode = MCDI_MODE_EVENTS; + efx_mcdi_release(mcdi); +} + +static void efx_mcdi_ev_death(struct efx_nic *efx, int rc) +{ + struct efx_mcdi_iface *mcdi = efx_mcdi(efx); + + /* If there is an outstanding MCDI request, it has been terminated + * either by a BADASSERT or REBOOT event. If the mcdi interface is + * in polled mode, then do nothing because the MC reboot handler will + * set the header correctly. However, if the mcdi interface is waiting + * for a CMDDONE event it won't receive it [and since all MCDI events + * are sent to the same queue, we can't be racing with + * efx_mcdi_ev_cpl()] + * + * There's a race here with efx_mcdi_rpc(), because we might receive + * a REBOOT event *before* the request has been copied out. In polled + * mode (during startup) this is irrelevent, because efx_mcdi_complete() + * is ignored. In event mode, this condition is just an edge-case of + * receiving a REBOOT event after posting the MCDI request. Did the mc + * reboot before or after the copyout? The best we can do always is + * just return failure. + */ + spin_lock(&mcdi->iface_lock); + if (efx_mcdi_complete(mcdi)) { + if (mcdi->mode == MCDI_MODE_EVENTS) { + mcdi->resprc = rc; + mcdi->resplen = 0; + } + } else + /* Nobody was waiting for an MCDI request, so trigger a reset */ + efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE); + + spin_unlock(&mcdi->iface_lock); +} + +static unsigned int efx_mcdi_event_link_speed[] = { + [MCDI_EVENT_LINKCHANGE_SPEED_100M] = 100, + [MCDI_EVENT_LINKCHANGE_SPEED_1G] = 1000, + [MCDI_EVENT_LINKCHANGE_SPEED_10G] = 10000, +}; + + +static void efx_mcdi_process_link_change(struct efx_nic *efx, efx_qword_t *ev) +{ + u32 flags, fcntl, speed, lpa; + + speed = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_SPEED); + EFX_BUG_ON_PARANOID(speed >= ARRAY_SIZE(efx_mcdi_event_link_speed)); + speed = efx_mcdi_event_link_speed[speed]; + + flags = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_LINK_FLAGS); + fcntl = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_FCNTL); + lpa = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_LP_CAP); + + /* efx->link_state is only modified by efx_mcdi_phy_get_link(), + * which is only run after flushing the event queues. Therefore, it + * is safe to modify the link state outside of the mac_lock here. + */ + efx_mcdi_phy_decode_link(efx, &efx->link_state, speed, flags, fcntl); + + efx_mcdi_phy_check_fcntl(efx, lpa); + + efx_link_status_changed(efx); +} + +static const char *sensor_names[] = { + [MC_CMD_SENSOR_CONTROLLER_TEMP] = "Controller temp. sensor", + [MC_CMD_SENSOR_PHY_COMMON_TEMP] = "PHY shared temp. sensor", + [MC_CMD_SENSOR_CONTROLLER_COOLING] = "Controller cooling", + [MC_CMD_SENSOR_PHY0_TEMP] = "PHY 0 temp. sensor", + [MC_CMD_SENSOR_PHY0_COOLING] = "PHY 0 cooling", + [MC_CMD_SENSOR_PHY1_TEMP] = "PHY 1 temp. sensor", + [MC_CMD_SENSOR_PHY1_COOLING] = "PHY 1 cooling", + [MC_CMD_SENSOR_IN_1V0] = "1.0V supply sensor", + [MC_CMD_SENSOR_IN_1V2] = "1.2V supply sensor", + [MC_CMD_SENSOR_IN_1V8] = "1.8V supply sensor", + [MC_CMD_SENSOR_IN_2V5] = "2.5V supply sensor", + [MC_CMD_SENSOR_IN_3V3] = "3.3V supply sensor", + [MC_CMD_SENSOR_IN_12V0] = "12V supply sensor" +}; + +static const char *sensor_status_names[] = { + [MC_CMD_SENSOR_STATE_OK] = "OK", + [MC_CMD_SENSOR_STATE_WARNING] = "Warning", + [MC_CMD_SENSOR_STATE_FATAL] = "Fatal", + [MC_CMD_SENSOR_STATE_BROKEN] = "Device failure", +}; + +static void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev) +{ + unsigned int monitor, state, value; + const char *name, *state_txt; + monitor = EFX_QWORD_FIELD(*ev, MCDI_EVENT_SENSOREVT_MONITOR); + state = EFX_QWORD_FIELD(*ev, MCDI_EVENT_SENSOREVT_STATE); + value = EFX_QWORD_FIELD(*ev, MCDI_EVENT_SENSOREVT_VALUE); + /* Deal gracefully with the board having more drivers than we + * know about, but do not expect new sensor states. */ + name = (monitor >= ARRAY_SIZE(sensor_names)) + ? "No sensor name available" : + sensor_names[monitor]; + EFX_BUG_ON_PARANOID(state >= ARRAY_SIZE(sensor_status_names)); + state_txt = sensor_status_names[state]; + + EFX_ERR(efx, "Sensor %d (%s) reports condition '%s' for raw value %d\n", + monitor, name, state_txt, value); +} + +/* Called from falcon_process_eventq for MCDI events */ +void efx_mcdi_process_event(struct efx_channel *channel, + efx_qword_t *event) +{ + struct efx_nic *efx = channel->efx; + int code = EFX_QWORD_FIELD(*event, MCDI_EVENT_CODE); + u32 data = EFX_QWORD_FIELD(*event, MCDI_EVENT_DATA); + + switch (code) { + case MCDI_EVENT_CODE_BADSSERT: + EFX_ERR(efx, "MC watchdog or assertion failure at 0x%x\n", data); + efx_mcdi_ev_death(efx, EINTR); + break; + + case MCDI_EVENT_CODE_PMNOTICE: + EFX_INFO(efx, "MCDI PM event.\n"); + break; + + case MCDI_EVENT_CODE_CMDDONE: + efx_mcdi_ev_cpl(efx, + MCDI_EVENT_FIELD(*event, CMDDONE_SEQ), + MCDI_EVENT_FIELD(*event, CMDDONE_DATALEN), + MCDI_EVENT_FIELD(*event, CMDDONE_ERRNO)); + break; + + case MCDI_EVENT_CODE_LINKCHANGE: + efx_mcdi_process_link_change(efx, event); + break; + case MCDI_EVENT_CODE_SENSOREVT: + efx_mcdi_sensor_event(efx, event); + break; + case MCDI_EVENT_CODE_SCHEDERR: + EFX_INFO(efx, "MC Scheduler error address=0x%x\n", data); + break; + case MCDI_EVENT_CODE_REBOOT: + EFX_INFO(efx, "MC Reboot\n"); + efx_mcdi_ev_death(efx, EIO); + break; + case MCDI_EVENT_CODE_MAC_STATS_DMA: + /* MAC stats are gather lazily. We can ignore this. */ + break; + + default: + EFX_ERR(efx, "Unknown MCDI event 0x%x\n", code); + } +} + +/************************************************************************** + * + * Specific request functions + * + ************************************************************************** + */ + +int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build) +{ + u8 outbuf[ALIGN(MC_CMD_GET_VERSION_V1_OUT_LEN, 4)]; + size_t outlength; + const __le16 *ver_words; + int rc; + + BUILD_BUG_ON(MC_CMD_GET_VERSION_IN_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_GET_VERSION, NULL, 0, + outbuf, sizeof(outbuf), &outlength); + if (rc) + goto fail; + + if (outlength == MC_CMD_GET_VERSION_V0_OUT_LEN) { + *version = 0; + *build = MCDI_DWORD(outbuf, GET_VERSION_OUT_FIRMWARE); + return 0; + } + + if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) { + rc = -EMSGSIZE; + goto fail; + } + + ver_words = (__le16 *)MCDI_PTR(outbuf, GET_VERSION_OUT_VERSION); + *version = (((u64)le16_to_cpu(ver_words[0]) << 48) | + ((u64)le16_to_cpu(ver_words[1]) << 32) | + ((u64)le16_to_cpu(ver_words[2]) << 16) | + le16_to_cpu(ver_words[3])); + *build = MCDI_DWORD(outbuf, GET_VERSION_OUT_FIRMWARE); + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, + bool *was_attached) +{ + u8 inbuf[MC_CMD_DRV_ATTACH_IN_LEN]; + u8 outbuf[MC_CMD_DRV_ATTACH_OUT_LEN]; + size_t outlen; + int rc; + + MCDI_SET_DWORD(inbuf, DRV_ATTACH_IN_NEW_STATE, + driver_operating ? 1 : 0); + MCDI_SET_DWORD(inbuf, DRV_ATTACH_IN_UPDATE, 1); + + rc = efx_mcdi_rpc(efx, MC_CMD_DRV_ATTACH, inbuf, sizeof(inbuf), + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) + goto fail; + + if (was_attached != NULL) + *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, + u16 *fw_subtype_list) +{ + uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LEN]; + size_t outlen; + int port_num = efx_port_num(efx); + int offset; + int rc; + + BUILD_BUG_ON(MC_CMD_GET_BOARD_CFG_IN_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_GET_BOARD_CFG, NULL, 0, + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) { + rc = -EMSGSIZE; + goto fail; + } + + offset = (port_num) + ? MC_CMD_GET_BOARD_CFG_OUT_MAC_ADDR_BASE_PORT1_OFST + : MC_CMD_GET_BOARD_CFG_OUT_MAC_ADDR_BASE_PORT0_OFST; + if (mac_address) + memcpy(mac_address, outbuf + offset, ETH_ALEN); + if (fw_subtype_list) + memcpy(fw_subtype_list, + outbuf + MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_OFST, + MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_LEN); + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d len=%d\n", __func__, rc, (int)outlen); + + return rc; +} + +int efx_mcdi_log_ctrl(struct efx_nic *efx, bool evq, bool uart, u32 dest_evq) +{ + u8 inbuf[MC_CMD_LOG_CTRL_IN_LEN]; + u32 dest = 0; + int rc; + + if (uart) + dest |= MC_CMD_LOG_CTRL_IN_LOG_DEST_UART; + if (evq) + dest |= MC_CMD_LOG_CTRL_IN_LOG_DEST_EVQ; + + MCDI_SET_DWORD(inbuf, LOG_CTRL_IN_LOG_DEST, dest); + MCDI_SET_DWORD(inbuf, LOG_CTRL_IN_LOG_DEST_EVQ, dest_evq); + + BUILD_BUG_ON(MC_CMD_LOG_CTRL_OUT_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_LOG_CTRL, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out) +{ + u8 outbuf[MC_CMD_NVRAM_TYPES_OUT_LEN]; + size_t outlen; + int rc; + + BUILD_BUG_ON(MC_CMD_NVRAM_TYPES_IN_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_TYPES, NULL, 0, + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) + goto fail; + + *nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", + __func__, rc); + return rc; +} + +int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type, + size_t *size_out, size_t *erase_size_out, + bool *protected_out) +{ + u8 inbuf[MC_CMD_NVRAM_INFO_IN_LEN]; + u8 outbuf[MC_CMD_NVRAM_INFO_OUT_LEN]; + size_t outlen; + int rc; + + MCDI_SET_DWORD(inbuf, NVRAM_INFO_IN_TYPE, type); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_INFO, inbuf, sizeof(inbuf), + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) + goto fail; + + *size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE); + *erase_size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_ERASESIZE); + *protected_out = !!(MCDI_DWORD(outbuf, NVRAM_INFO_OUT_FLAGS) & + (1 << MC_CMD_NVRAM_PROTECTED_LBN)); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_nvram_update_start(struct efx_nic *efx, unsigned int type) +{ + u8 inbuf[MC_CMD_NVRAM_UPDATE_START_IN_LEN]; + int rc; + + MCDI_SET_DWORD(inbuf, NVRAM_UPDATE_START_IN_TYPE, type); + + BUILD_BUG_ON(MC_CMD_NVRAM_UPDATE_START_OUT_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_UPDATE_START, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_nvram_read(struct efx_nic *efx, unsigned int type, + loff_t offset, u8 *buffer, size_t length) +{ + u8 inbuf[MC_CMD_NVRAM_READ_IN_LEN]; + u8 outbuf[MC_CMD_NVRAM_READ_OUT_LEN(EFX_MCDI_NVRAM_LEN_MAX)]; + size_t outlen; + int rc; + + MCDI_SET_DWORD(inbuf, NVRAM_READ_IN_TYPE, type); + MCDI_SET_DWORD(inbuf, NVRAM_READ_IN_OFFSET, offset); + MCDI_SET_DWORD(inbuf, NVRAM_READ_IN_LENGTH, length); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_READ, inbuf, sizeof(inbuf), + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + memcpy(buffer, MCDI_PTR(outbuf, NVRAM_READ_OUT_READ_BUFFER), length); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_nvram_write(struct efx_nic *efx, unsigned int type, + loff_t offset, const u8 *buffer, size_t length) +{ + u8 inbuf[MC_CMD_NVRAM_WRITE_IN_LEN(EFX_MCDI_NVRAM_LEN_MAX)]; + int rc; + + MCDI_SET_DWORD(inbuf, NVRAM_WRITE_IN_TYPE, type); + MCDI_SET_DWORD(inbuf, NVRAM_WRITE_IN_OFFSET, offset); + MCDI_SET_DWORD(inbuf, NVRAM_WRITE_IN_LENGTH, length); + memcpy(MCDI_PTR(inbuf, NVRAM_WRITE_IN_WRITE_BUFFER), buffer, length); + + BUILD_BUG_ON(MC_CMD_NVRAM_WRITE_OUT_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_WRITE, inbuf, + ALIGN(MC_CMD_NVRAM_WRITE_IN_LEN(length), 4), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type, + loff_t offset, size_t length) +{ + u8 inbuf[MC_CMD_NVRAM_ERASE_IN_LEN]; + int rc; + + MCDI_SET_DWORD(inbuf, NVRAM_ERASE_IN_TYPE, type); + MCDI_SET_DWORD(inbuf, NVRAM_ERASE_IN_OFFSET, offset); + MCDI_SET_DWORD(inbuf, NVRAM_ERASE_IN_LENGTH, length); + + BUILD_BUG_ON(MC_CMD_NVRAM_ERASE_OUT_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_ERASE, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type) +{ + u8 inbuf[MC_CMD_NVRAM_UPDATE_FINISH_IN_LEN]; + int rc; + + MCDI_SET_DWORD(inbuf, NVRAM_UPDATE_FINISH_IN_TYPE, type); + + BUILD_BUG_ON(MC_CMD_NVRAM_UPDATE_FINISH_OUT_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_NVRAM_UPDATE_FINISH, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_handle_assertion(struct efx_nic *efx) +{ + union { + u8 asserts[MC_CMD_GET_ASSERTS_IN_LEN]; + u8 reboot[MC_CMD_REBOOT_IN_LEN]; + } inbuf; + u8 assertion[MC_CMD_GET_ASSERTS_OUT_LEN]; + unsigned int flags, index, ofst; + const char *reason; + size_t outlen; + int retry; + int rc; + + /* Check if the MC is in the assertion handler, retrying twice. Once + * because a boot-time assertion might cause this command to fail + * with EINTR. And once again because GET_ASSERTS can race with + * MC_CMD_REBOOT running on the other port. */ + retry = 2; + do { + MCDI_SET_DWORD(inbuf.asserts, GET_ASSERTS_IN_CLEAR, 0); + rc = efx_mcdi_rpc(efx, MC_CMD_GET_ASSERTS, + inbuf.asserts, MC_CMD_GET_ASSERTS_IN_LEN, + assertion, sizeof(assertion), &outlen); + } while ((rc == -EINTR || rc == -EIO) && retry-- > 0); + + if (rc) + return rc; + if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN) + return -EINVAL; + + flags = MCDI_DWORD(assertion, GET_ASSERTS_OUT_GLOBAL_FLAGS); + if (flags == MC_CMD_GET_ASSERTS_FLAGS_NO_FAILS) + return 0; + + /* Reset the hardware atomically such that only one port with succeed. + * This command will succeed if a reboot is no longer required (because + * the other port did it first), but fail with EIO if it succeeds. + */ + BUILD_BUG_ON(MC_CMD_REBOOT_OUT_LEN != 0); + MCDI_SET_DWORD(inbuf.reboot, REBOOT_IN_FLAGS, + MC_CMD_REBOOT_FLAGS_AFTER_ASSERTION); + efx_mcdi_rpc(efx, MC_CMD_REBOOT, inbuf.reboot, MC_CMD_REBOOT_IN_LEN, + NULL, 0, NULL); + + /* Print out the assertion */ + reason = (flags == MC_CMD_GET_ASSERTS_FLAGS_SYS_FAIL) + ? "system-level assertion" + : (flags == MC_CMD_GET_ASSERTS_FLAGS_THR_FAIL) + ? "thread-level assertion" + : (flags == MC_CMD_GET_ASSERTS_FLAGS_WDOG_FIRED) + ? "watchdog reset" + : "unknown assertion"; + EFX_ERR(efx, "MCPU %s at PC = 0x%.8x in thread 0x%.8x\n", reason, + MCDI_DWORD(assertion, GET_ASSERTS_OUT_SAVED_PC_OFFS), + MCDI_DWORD(assertion, GET_ASSERTS_OUT_THREAD_OFFS)); + + /* Print out the registers */ + ofst = MC_CMD_GET_ASSERTS_OUT_GP_REGS_OFFS_OFST; + for (index = 1; index < 32; index++) { + EFX_ERR(efx, "R%.2d (?): 0x%.8x\n", index, + MCDI_DWORD2(assertion, ofst)); + ofst += sizeof(efx_dword_t); + } + + return 0; +} + +void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) +{ + u8 inbuf[MC_CMD_SET_ID_LED_IN_LEN]; + int rc; + + BUILD_BUG_ON(EFX_LED_OFF != MC_CMD_LED_OFF); + BUILD_BUG_ON(EFX_LED_ON != MC_CMD_LED_ON); + BUILD_BUG_ON(EFX_LED_DEFAULT != MC_CMD_LED_DEFAULT); + + BUILD_BUG_ON(MC_CMD_SET_ID_LED_OUT_LEN != 0); + + MCDI_SET_DWORD(inbuf, SET_ID_LED_IN_STATE, mode); + + rc = efx_mcdi_rpc(efx, MC_CMD_SET_ID_LED, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); +} + +int efx_mcdi_reset_port(struct efx_nic *efx) +{ + int rc = efx_mcdi_rpc(efx, MC_CMD_PORT_RESET, NULL, 0, NULL, 0, NULL); + if (rc) + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_reset_mc(struct efx_nic *efx) +{ + u8 inbuf[MC_CMD_REBOOT_IN_LEN]; + int rc; + + BUILD_BUG_ON(MC_CMD_REBOOT_OUT_LEN != 0); + MCDI_SET_DWORD(inbuf, REBOOT_IN_FLAGS, 0); + rc = efx_mcdi_rpc(efx, MC_CMD_REBOOT, inbuf, sizeof(inbuf), + NULL, 0, NULL); + /* White is black, and up is down */ + if (rc == -EIO) + return 0; + if (rc == 0) + rc = -EIO; + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type, + const u8 *mac, int *id_out) +{ + u8 inbuf[MC_CMD_WOL_FILTER_SET_IN_LEN]; + u8 outbuf[MC_CMD_WOL_FILTER_SET_OUT_LEN]; + size_t outlen; + int rc; + + MCDI_SET_DWORD(inbuf, WOL_FILTER_SET_IN_WOL_TYPE, type); + MCDI_SET_DWORD(inbuf, WOL_FILTER_SET_IN_FILTER_MODE, + MC_CMD_FILTER_MODE_SIMPLE); + memcpy(MCDI_PTR(inbuf, WOL_FILTER_SET_IN_MAGIC_MAC), mac, ETH_ALEN); + + rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_SET, inbuf, sizeof(inbuf), + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) { + rc = -EMSGSIZE; + goto fail; + } + + *id_out = (int)MCDI_DWORD(outbuf, WOL_FILTER_SET_OUT_FILTER_ID); + + return 0; + +fail: + *id_out = -1; + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; + +} + + +int +efx_mcdi_wol_filter_set_magic(struct efx_nic *efx, const u8 *mac, int *id_out) +{ + return efx_mcdi_wol_filter_set(efx, MC_CMD_WOL_TYPE_MAGIC, mac, id_out); +} + + +int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out) +{ + u8 outbuf[MC_CMD_WOL_FILTER_GET_OUT_LEN]; + size_t outlen; + int rc; + + rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_GET, NULL, 0, + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) { + rc = -EMSGSIZE; + goto fail; + } + + *id_out = (int)MCDI_DWORD(outbuf, WOL_FILTER_GET_OUT_FILTER_ID); + + return 0; + +fail: + *id_out = -1; + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + + +int efx_mcdi_wol_filter_remove(struct efx_nic *efx, int id) +{ + u8 inbuf[MC_CMD_WOL_FILTER_REMOVE_IN_LEN]; + int rc; + + MCDI_SET_DWORD(inbuf, WOL_FILTER_REMOVE_IN_FILTER_ID, (u32)id); + + rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_REMOVE, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + + +int efx_mcdi_wol_filter_reset(struct efx_nic *efx) +{ + int rc; + + rc = efx_mcdi_rpc(efx, MC_CMD_WOL_FILTER_RESET, NULL, 0, NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + --- linux-2.6.32.orig/drivers/net/sfc/efx.c +++ linux-2.6.32/drivers/net/sfc/efx.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2005-2008 Solarflare Communications Inc. + * Copyright 2005-2009 Solarflare Communications Inc. * * 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 @@ -21,12 +21,73 @@ #include #include #include "net_driver.h" -#include "ethtool.h" -#include "tx.h" -#include "rx.h" #include "efx.h" #include "mdio_10g.h" -#include "falcon.h" +#include "nic.h" + +#include "mcdi.h" + +/************************************************************************** + * + * Type name strings + * + ************************************************************************** + */ + +/* Loopback mode names (see LOOPBACK_MODE()) */ +const unsigned int efx_loopback_mode_max = LOOPBACK_MAX; +const char *efx_loopback_mode_names[] = { + [LOOPBACK_NONE] = "NONE", + [LOOPBACK_DATA] = "DATAPATH", + [LOOPBACK_GMAC] = "GMAC", + [LOOPBACK_XGMII] = "XGMII", + [LOOPBACK_XGXS] = "XGXS", + [LOOPBACK_XAUI] = "XAUI", + [LOOPBACK_GMII] = "GMII", + [LOOPBACK_SGMII] = "SGMII", + [LOOPBACK_XGBR] = "XGBR", + [LOOPBACK_XFI] = "XFI", + [LOOPBACK_XAUI_FAR] = "XAUI_FAR", + [LOOPBACK_GMII_FAR] = "GMII_FAR", + [LOOPBACK_SGMII_FAR] = "SGMII_FAR", + [LOOPBACK_XFI_FAR] = "XFI_FAR", + [LOOPBACK_GPHY] = "GPHY", + [LOOPBACK_PHYXS] = "PHYXS", + [LOOPBACK_PCS] = "PCS", + [LOOPBACK_PMAPMD] = "PMA/PMD", + [LOOPBACK_XPORT] = "XPORT", + [LOOPBACK_XGMII_WS] = "XGMII_WS", + [LOOPBACK_XAUI_WS] = "XAUI_WS", + [LOOPBACK_XAUI_WS_FAR] = "XAUI_WS_FAR", + [LOOPBACK_XAUI_WS_NEAR] = "XAUI_WS_NEAR", + [LOOPBACK_GMII_WS] = "GMII_WS", + [LOOPBACK_XFI_WS] = "XFI_WS", + [LOOPBACK_XFI_WS_FAR] = "XFI_WS_FAR", + [LOOPBACK_PHYXS_WS] = "PHYXS_WS", +}; + +/* Interrupt mode names (see INT_MODE())) */ +const unsigned int efx_interrupt_mode_max = EFX_INT_MODE_MAX; +const char *efx_interrupt_mode_names[] = { + [EFX_INT_MODE_MSIX] = "MSI-X", + [EFX_INT_MODE_MSI] = "MSI", + [EFX_INT_MODE_LEGACY] = "legacy", +}; + +const unsigned int efx_reset_type_max = RESET_TYPE_MAX; +const char *efx_reset_type_names[] = { + [RESET_TYPE_INVISIBLE] = "INVISIBLE", + [RESET_TYPE_ALL] = "ALL", + [RESET_TYPE_WORLD] = "WORLD", + [RESET_TYPE_DISABLE] = "DISABLE", + [RESET_TYPE_TX_WATCHDOG] = "TX_WATCHDOG", + [RESET_TYPE_INT_ERROR] = "INT_ERROR", + [RESET_TYPE_RX_RECOVERY] = "RX_RECOVERY", + [RESET_TYPE_RX_DESC_FETCH] = "RX_DESC_FETCH", + [RESET_TYPE_TX_DESC_FETCH] = "TX_DESC_FETCH", + [RESET_TYPE_TX_SKIP] = "TX_SKIP", + [RESET_TYPE_MC_FAILURE] = "MC_FAILURE", +}; #define EFX_MAX_MTU (9 * 1024) @@ -145,7 +206,8 @@ #define EFX_ASSERT_RESET_SERIALISED(efx) \ do { \ - if (efx->state == STATE_RUNNING) \ + if ((efx->state == STATE_RUNNING) || \ + (efx->state == STATE_DISABLED)) \ ASSERT_RTNL(); \ } while (0) @@ -171,7 +233,7 @@ !channel->enabled)) return 0; - rx_packets = falcon_process_eventq(channel, rx_quota); + rx_packets = efx_nic_process_eventq(channel, rx_quota); if (rx_packets == 0) return 0; @@ -203,7 +265,7 @@ channel->work_pending = false; smp_wmb(); - falcon_eventq_read_ack(channel); + efx_nic_eventq_read_ack(channel); } /* NAPI poll handler @@ -228,26 +290,20 @@ if (channel->used_flags & EFX_USED_BY_RX && efx->irq_rx_adaptive && unlikely(++channel->irq_count == 1000)) { - unsigned old_irq_moderation = channel->irq_moderation; - if (unlikely(channel->irq_mod_score < irq_adapt_low_thresh)) { - channel->irq_moderation = - max_t(int, - channel->irq_moderation - - FALCON_IRQ_MOD_RESOLUTION, - FALCON_IRQ_MOD_RESOLUTION); + if (channel->irq_moderation > 1) { + channel->irq_moderation -= 1; + efx->type->push_irq_moderation(channel); + } } else if (unlikely(channel->irq_mod_score > irq_adapt_high_thresh)) { - channel->irq_moderation = - min(channel->irq_moderation + - FALCON_IRQ_MOD_RESOLUTION, - efx->irq_rx_moderation); + if (channel->irq_moderation < + efx->irq_rx_moderation) { + channel->irq_moderation += 1; + efx->type->push_irq_moderation(channel); + } } - - if (channel->irq_moderation != old_irq_moderation) - falcon_set_int_moderation(channel); - channel->irq_count = 0; channel->irq_mod_score = 0; } @@ -280,7 +336,7 @@ BUG_ON(!channel->enabled); /* Disable interrupts and wait for ISRs to complete */ - falcon_disable_interrupts(efx); + efx_nic_disable_interrupts(efx); if (efx->legacy_irq) synchronize_irq(efx->legacy_irq); if (channel->irq) @@ -290,14 +346,14 @@ napi_disable(&channel->napi_str); /* Poll the channel */ - efx_process_channel(channel, efx->type->evq_size); + efx_process_channel(channel, EFX_EVQ_SIZE); /* Ack the eventq. This may cause an interrupt to be generated * when they are reenabled */ efx_channel_processed(channel); napi_enable(&channel->napi_str); - falcon_enable_interrupts(efx); + efx_nic_enable_interrupts(efx); } /* Create event queue @@ -309,7 +365,7 @@ { EFX_LOG(channel->efx, "chan %d create event queue\n", channel->channel); - return falcon_probe_eventq(channel); + return efx_nic_probe_eventq(channel); } /* Prepare channel's event queue */ @@ -319,21 +375,21 @@ channel->eventq_read_ptr = 0; - falcon_init_eventq(channel); + efx_nic_init_eventq(channel); } static void efx_fini_eventq(struct efx_channel *channel) { EFX_LOG(channel->efx, "chan %d fini event queue\n", channel->channel); - falcon_fini_eventq(channel); + efx_nic_fini_eventq(channel); } static void efx_remove_eventq(struct efx_channel *channel) { EFX_LOG(channel->efx, "chan %d remove event queue\n", channel->channel); - falcon_remove_eventq(channel); + efx_nic_remove_eventq(channel); } /************************************************************************** @@ -499,7 +555,7 @@ EFX_ASSERT_RESET_SERIALISED(efx); BUG_ON(efx->port_enabled); - rc = falcon_flush_queues(efx); + rc = efx_nic_flush_queues(efx); if (rc) EFX_ERR(efx, "failed to flush queues\n"); else @@ -547,8 +603,10 @@ * netif_carrier_on/off) of the link status, and also maintains the * link status's stop on the port's TX queue. */ -static void efx_link_status_changed(struct efx_nic *efx) +void efx_link_status_changed(struct efx_nic *efx) { + struct efx_link_state *link_state = &efx->link_state; + /* SFC Bug 5356: A net_dev notifier is registered, so we must ensure * that no events are triggered between unregister_netdev() and the * driver unloading. A more general condition is that NETDEV_CHANGE @@ -561,19 +619,19 @@ return; } - if (efx->link_up != netif_carrier_ok(efx->net_dev)) { + if (link_state->up != netif_carrier_ok(efx->net_dev)) { efx->n_link_state_changes++; - if (efx->link_up) + if (link_state->up) netif_carrier_on(efx->net_dev); else netif_carrier_off(efx->net_dev); } /* Status message for kernel log */ - if (efx->link_up) { + if (link_state->up) { EFX_INFO(efx, "link up at %uMbps %s-duplex (MTU %d)%s\n", - efx->link_speed, efx->link_fd ? "full" : "half", + link_state->speed, link_state->fd ? "full" : "half", efx->net_dev->mtu, (efx->promiscuous ? " [PROMISC]" : "")); } else { @@ -582,16 +640,49 @@ } +void efx_link_set_advertising(struct efx_nic *efx, u32 advertising) +{ + efx->link_advertising = advertising; + if (advertising) { + if (advertising & ADVERTISED_Pause) + efx->wanted_fc |= (EFX_FC_TX | EFX_FC_RX); + else + efx->wanted_fc &= ~(EFX_FC_TX | EFX_FC_RX); + if (advertising & ADVERTISED_Asym_Pause) + efx->wanted_fc ^= EFX_FC_TX; + } +} + +void efx_link_set_wanted_fc(struct efx_nic *efx, enum efx_fc_type wanted_fc) +{ + efx->wanted_fc = wanted_fc; + if (efx->link_advertising) { + if (wanted_fc & EFX_FC_RX) + efx->link_advertising |= (ADVERTISED_Pause | + ADVERTISED_Asym_Pause); + else + efx->link_advertising &= ~(ADVERTISED_Pause | + ADVERTISED_Asym_Pause); + if (wanted_fc & EFX_FC_TX) + efx->link_advertising ^= ADVERTISED_Asym_Pause; + } +} + static void efx_fini_port(struct efx_nic *efx); -/* This call reinitialises the MAC to pick up new PHY settings. The - * caller must hold the mac_lock */ -void __efx_reconfigure_port(struct efx_nic *efx) +/* Push loopback/power/transmit disable settings to the PHY, and reconfigure + * the MAC appropriately. All other PHY configuration changes are pushed + * through phy_op->set_settings(), and pushed asynchronously to the MAC + * through efx_monitor(). + * + * Callers must hold the mac_lock + */ +int __efx_reconfigure_port(struct efx_nic *efx) { - WARN_ON(!mutex_is_locked(&efx->mac_lock)); + enum efx_phy_mode phy_mode; + int rc; - EFX_LOG(efx, "reconfiguring MAC from PHY settings on CPU %d\n", - raw_smp_processor_id()); + WARN_ON(!mutex_is_locked(&efx->mac_lock)); /* Serialise the promiscuous flag with efx_set_multicast_list. */ if (efx_dev_registered(efx)) { @@ -599,61 +690,48 @@ netif_addr_unlock_bh(efx->net_dev); } - falcon_deconfigure_mac_wrapper(efx); - - /* Reconfigure the PHY, disabling transmit in mac level loopback. */ + /* Disable PHY transmit in mac level loopbacks */ + phy_mode = efx->phy_mode; if (LOOPBACK_INTERNAL(efx)) efx->phy_mode |= PHY_MODE_TX_DISABLED; else efx->phy_mode &= ~PHY_MODE_TX_DISABLED; - efx->phy_op->reconfigure(efx); - - if (falcon_switch_mac(efx)) - goto fail; - efx->mac_op->reconfigure(efx); + rc = efx->type->reconfigure_port(efx); - /* Inform kernel of loss/gain of carrier */ - efx_link_status_changed(efx); - return; + if (rc) + efx->phy_mode = phy_mode; -fail: - EFX_ERR(efx, "failed to reconfigure MAC\n"); - efx->port_enabled = false; - efx_fini_port(efx); + return rc; } /* Reinitialise the MAC to pick up new PHY settings, even if the port is * disabled. */ -void efx_reconfigure_port(struct efx_nic *efx) +int efx_reconfigure_port(struct efx_nic *efx) { + int rc; + EFX_ASSERT_RESET_SERIALISED(efx); mutex_lock(&efx->mac_lock); - __efx_reconfigure_port(efx); + rc = __efx_reconfigure_port(efx); mutex_unlock(&efx->mac_lock); -} - -/* Asynchronous efx_reconfigure_port work item. To speed up efx_flush_all() - * we don't efx_reconfigure_port() if the port is disabled. Care is taken - * in efx_stop_all() and efx_start_port() to prevent PHY events being lost */ -static void efx_phy_work(struct work_struct *data) -{ - struct efx_nic *efx = container_of(data, struct efx_nic, phy_work); - mutex_lock(&efx->mac_lock); - if (efx->port_enabled) - __efx_reconfigure_port(efx); - mutex_unlock(&efx->mac_lock); + return rc; } +/* Asynchronous work item for changing MAC promiscuity and multicast + * hash. Avoid a drain/rx_ingress enable by reconfiguring the current + * MAC directly. */ static void efx_mac_work(struct work_struct *data) { struct efx_nic *efx = container_of(data, struct efx_nic, mac_work); mutex_lock(&efx->mac_lock); - if (efx->port_enabled) - efx->mac_op->irq(efx); + if (efx->port_enabled) { + efx->type->push_multicast_hash(efx); + efx->mac_op->reconfigure(efx); + } mutex_unlock(&efx->mac_lock); } @@ -663,14 +741,14 @@ EFX_LOG(efx, "create port\n"); - /* Connect up MAC/PHY operations table and read MAC address */ - rc = falcon_probe_port(efx); - if (rc) - goto err; - if (phy_flash_cfg) efx->phy_mode = PHY_MODE_SPECIAL; + /* Connect up MAC/PHY operations table */ + rc = efx->type->probe_port(efx); + if (rc) + goto err; + /* Sanity check MAC address */ if (is_valid_ether_addr(efx->mac_address)) { memcpy(efx->net_dev->dev_addr, efx->mac_address, ETH_ALEN); @@ -699,29 +777,33 @@ EFX_LOG(efx, "init port\n"); - rc = efx->phy_op->init(efx); - if (rc) - return rc; mutex_lock(&efx->mac_lock); - efx->phy_op->reconfigure(efx); - rc = falcon_switch_mac(efx); - mutex_unlock(&efx->mac_lock); + + rc = efx->phy_op->init(efx); if (rc) - goto fail; - efx->mac_op->reconfigure(efx); + goto fail1; efx->port_initialized = true; - efx_stats_enable(efx); + + /* Reconfigure the MAC before creating dma queues (required for + * Falcon/A1 where RX_INGR_EN/TX_DRAIN_EN isn't supported) */ + efx->mac_op->reconfigure(efx); + + /* Ensure the PHY advertises the correct flow control settings */ + rc = efx->phy_op->reconfigure(efx); + if (rc) + goto fail2; + + mutex_unlock(&efx->mac_lock); return 0; -fail: +fail2: efx->phy_op->fini(efx); +fail1: + mutex_unlock(&efx->mac_lock); return rc; } -/* Allow efx_reconfigure_port() to be scheduled, and close the window - * between efx_stop_port and efx_flush_all whereby a previously scheduled - * efx_phy_work()/efx_mac_work() may have been cancelled */ static void efx_start_port(struct efx_nic *efx) { EFX_LOG(efx, "start port\n"); @@ -729,15 +811,16 @@ mutex_lock(&efx->mac_lock); efx->port_enabled = true; - __efx_reconfigure_port(efx); - efx->mac_op->irq(efx); + + /* efx_mac_work() might have been scheduled after efx_stop_port(), + * and then cancelled by efx_flush_all() */ + efx->type->push_multicast_hash(efx); + efx->mac_op->reconfigure(efx); + mutex_unlock(&efx->mac_lock); } -/* Prevent efx_phy_work, efx_mac_work, and efx_monitor() from executing, - * and efx_set_multicast_list() from scheduling efx_phy_work. efx_phy_work - * and efx_mac_work may still be scheduled via NAPI processing until - * efx_flush_all() is called */ +/* Prevent efx_mac_work() and efx_monitor() from working */ static void efx_stop_port(struct efx_nic *efx) { EFX_LOG(efx, "stop port\n"); @@ -760,11 +843,10 @@ if (!efx->port_initialized) return; - efx_stats_disable(efx); efx->phy_op->fini(efx); efx->port_initialized = false; - efx->link_up = false; + efx->link_state.up = false; efx_link_status_changed(efx); } @@ -772,7 +854,7 @@ { EFX_LOG(efx, "destroying port\n"); - falcon_remove_port(efx); + efx->type->remove_port(efx); } /************************************************************************** @@ -824,9 +906,8 @@ goto fail2; } - efx->membase_phys = pci_resource_start(efx->pci_dev, - efx->type->mem_bar); - rc = pci_request_region(pci_dev, efx->type->mem_bar, "sfc"); + efx->membase_phys = pci_resource_start(efx->pci_dev, EFX_MEM_BAR); + rc = pci_request_region(pci_dev, EFX_MEM_BAR, "sfc"); if (rc) { EFX_ERR(efx, "request for memory BAR failed\n"); rc = -EIO; @@ -835,21 +916,20 @@ efx->membase = ioremap_nocache(efx->membase_phys, efx->type->mem_map_size); if (!efx->membase) { - EFX_ERR(efx, "could not map memory BAR %d at %llx+%x\n", - efx->type->mem_bar, + EFX_ERR(efx, "could not map memory BAR at %llx+%x\n", (unsigned long long)efx->membase_phys, efx->type->mem_map_size); rc = -ENOMEM; goto fail4; } - EFX_LOG(efx, "memory BAR %u at %llx+%x (virtual %p)\n", - efx->type->mem_bar, (unsigned long long)efx->membase_phys, + EFX_LOG(efx, "memory BAR at %llx+%x (virtual %p)\n", + (unsigned long long)efx->membase_phys, efx->type->mem_map_size, efx->membase); return 0; fail4: - pci_release_region(efx->pci_dev, efx->type->mem_bar); + pci_release_region(efx->pci_dev, EFX_MEM_BAR); fail3: efx->membase_phys = 0; fail2: @@ -868,7 +948,7 @@ } if (efx->membase_phys) { - pci_release_region(efx->pci_dev, efx->type->mem_bar); + pci_release_region(efx->pci_dev, EFX_MEM_BAR); efx->membase_phys = 0; } @@ -1011,7 +1091,7 @@ EFX_LOG(efx, "creating NIC\n"); /* Carry out hardware-type specific initialisation */ - rc = falcon_probe_nic(efx); + rc = efx->type->probe(efx); if (rc) return rc; @@ -1032,7 +1112,7 @@ EFX_LOG(efx, "destroying NIC\n"); efx_remove_interrupts(efx); - falcon_remove_nic(efx); + efx->type->remove(efx); } /************************************************************************** @@ -1112,12 +1192,31 @@ efx_for_each_channel(channel, efx) efx_start_channel(channel); - falcon_enable_interrupts(efx); + efx_nic_enable_interrupts(efx); - /* Start hardware monitor if we're in RUNNING */ - if (efx->state == STATE_RUNNING) + /* Switch to event based MCDI completions after enabling interrupts. + * If a reset has been scheduled, then we need to stay in polled mode. + * Rather than serialising efx_mcdi_mode_event() [which sleeps] and + * reset_pending [modified from an atomic context], we instead guarantee + * that efx_mcdi_mode_poll() isn't reverted erroneously */ + efx_mcdi_mode_event(efx); + if (efx->reset_pending != RESET_TYPE_NONE) + efx_mcdi_mode_poll(efx); + + /* Start the hardware monitor if there is one. Otherwise (we're link + * event driven), we have to poll the PHY because after an event queue + * flush, we could have a missed a link state change */ + if (efx->type->monitor != NULL) { queue_delayed_work(efx->workqueue, &efx->monitor_work, efx_monitor_interval); + } else { + mutex_lock(&efx->mac_lock); + if (efx->phy_op->poll(efx)) + efx_link_status_changed(efx); + mutex_unlock(&efx->mac_lock); + } + + efx->type->start_stats(efx); } /* Flush all delayed work. Should only be called when no more delayed work @@ -1136,8 +1235,6 @@ /* Stop scheduled port reconfigurations */ cancel_work_sync(&efx->mac_work); - cancel_work_sync(&efx->phy_work); - } /* Quiesce hardware and software without bringing the link down. @@ -1155,8 +1252,13 @@ if (!efx->port_enabled) return; + efx->type->stop_stats(efx); + + /* Switch to MCDI polling on Siena before disabling interrupts */ + efx_mcdi_mode_poll(efx); + /* Disable interrupts and wait for ISR to complete */ - falcon_disable_interrupts(efx); + efx_nic_disable_interrupts(efx); if (efx->legacy_irq) synchronize_irq(efx->legacy_irq); efx_for_each_channel(channel, efx) { @@ -1173,15 +1275,9 @@ * window to loose phy events */ efx_stop_port(efx); - /* Flush efx_phy_work, efx_mac_work, refill_workqueue, monitor_work */ + /* Flush efx_mac_work(), refill_workqueue, monitor_work */ efx_flush_all(efx); - /* Isolate the MAC from the TX and RX engines, so that queue - * flushes will complete in a timely fashion. */ - falcon_deconfigure_mac_wrapper(efx); - msleep(10); /* Let the Rx FIFO drain */ - falcon_drain_tx_fifo(efx); - /* Stop the kernel transmit interface late, so the watchdog * timer isn't ticking over the flush */ if (efx_dev_registered(efx)) { @@ -1201,41 +1297,39 @@ efx_remove_nic(efx); } -/* A convinience function to safely flush all the queues */ -void efx_flush_queues(struct efx_nic *efx) -{ - EFX_ASSERT_RESET_SERIALISED(efx); - - efx_stop_all(efx); - - efx_fini_channels(efx); - efx_init_channels(efx); - - efx_start_all(efx); -} - /************************************************************************** * * Interrupt moderation * **************************************************************************/ +static unsigned irq_mod_ticks(int usecs, int resolution) +{ + if (usecs <= 0) + return 0; /* cannot receive interrupts ahead of time :-) */ + if (usecs < resolution) + return 1; /* never round down to 0 */ + return usecs / resolution; +} + /* Set interrupt moderation parameters */ void efx_init_irq_moderation(struct efx_nic *efx, int tx_usecs, int rx_usecs, bool rx_adaptive) { struct efx_tx_queue *tx_queue; struct efx_rx_queue *rx_queue; + unsigned tx_ticks = irq_mod_ticks(tx_usecs, EFX_IRQ_MOD_RESOLUTION); + unsigned rx_ticks = irq_mod_ticks(rx_usecs, EFX_IRQ_MOD_RESOLUTION); EFX_ASSERT_RESET_SERIALISED(efx); efx_for_each_tx_queue(tx_queue, efx) - tx_queue->channel->irq_moderation = tx_usecs; + tx_queue->channel->irq_moderation = tx_ticks; efx->irq_rx_adaptive = rx_adaptive; - efx->irq_rx_moderation = rx_usecs; + efx->irq_rx_moderation = rx_ticks; efx_for_each_rx_queue(rx_queue, efx) - rx_queue->channel->irq_moderation = rx_usecs; + rx_queue->channel->irq_moderation = rx_ticks; } /************************************************************************** @@ -1250,10 +1344,10 @@ { struct efx_nic *efx = container_of(data, struct efx_nic, monitor_work.work); - int rc; EFX_TRACE(efx, "hardware monitor executing on CPU %d\n", raw_smp_processor_id()); + BUG_ON(efx->type->monitor == NULL); /* If the mac_lock is already held then it is likely a port * reconfiguration is already in place, which will likely do @@ -1262,15 +1356,7 @@ goto out_requeue; if (!efx->port_enabled) goto out_unlock; - rc = efx->board_info.monitor(efx); - if (rc) { - EFX_ERR(efx, "Board sensor %s; shutting down PHY\n", - (rc == -ERANGE) ? "reported fault" : "failed"); - efx->phy_mode |= PHY_MODE_LOW_POWER; - falcon_sim_phy_event(efx); - } - efx->phy_op->poll(efx); - efx->mac_op->poll(efx); + efx->type->monitor(efx); out_unlock: mutex_unlock(&efx->mac_lock); @@ -1374,6 +1460,12 @@ return -EIO; if (efx->phy_mode & PHY_MODE_SPECIAL) return -EBUSY; + if (efx_mcdi_poll_reboot(efx) && efx_reset(efx, RESET_TYPE_ALL)) + return -EIO; + + /* Notify the kernel of the link state polled during driver load, + * before the monitor starts running */ + efx_link_status_changed(efx); efx_start_all(efx); return 0; @@ -1400,20 +1492,6 @@ return 0; } -void efx_stats_disable(struct efx_nic *efx) -{ - spin_lock(&efx->stats_lock); - ++efx->stats_disable_count; - spin_unlock(&efx->stats_lock); -} - -void efx_stats_enable(struct efx_nic *efx) -{ - spin_lock(&efx->stats_lock); - --efx->stats_disable_count; - spin_unlock(&efx->stats_lock); -} - /* Context: process, dev_base_lock or RTNL held, non-blocking. */ static struct net_device_stats *efx_net_stats(struct net_device *net_dev) { @@ -1421,17 +1499,9 @@ struct efx_mac_stats *mac_stats = &efx->mac_stats; struct net_device_stats *stats = &net_dev->stats; - /* Update stats if possible, but do not wait if another thread - * is updating them or if MAC stats fetches are temporarily - * disabled; slightly stale stats are acceptable. - */ - if (!spin_trylock(&efx->stats_lock)) - return stats; - if (!efx->stats_disable_count) { - efx->mac_op->update_stats(efx); - falcon_update_nic_stats(efx); - } - spin_unlock(&efx->stats_lock); + spin_lock_bh(&efx->stats_lock); + efx->type->update_stats(efx); + spin_unlock_bh(&efx->stats_lock); stats->rx_packets = mac_stats->rx_packets; stats->tx_packets = mac_stats->tx_packets; @@ -1490,7 +1560,14 @@ EFX_LOG(efx, "changing MTU to %d\n", new_mtu); efx_fini_channels(efx); + + mutex_lock(&efx->mac_lock); + /* Reconfigure the MAC before enabling the dma queues so that + * the RX buffers don't overflow */ net_dev->mtu = new_mtu; + efx->mac_op->reconfigure(efx); + mutex_unlock(&efx->mac_lock); + efx_init_channels(efx); efx_start_all(efx); @@ -1514,7 +1591,9 @@ memcpy(net_dev->dev_addr, new_addr, net_dev->addr_len); /* Reconfigure the MAC */ - efx_reconfigure_port(efx); + mutex_lock(&efx->mac_lock); + efx->mac_op->reconfigure(efx); + mutex_unlock(&efx->mac_lock); return 0; } @@ -1525,16 +1604,14 @@ struct efx_nic *efx = netdev_priv(net_dev); struct dev_mc_list *mc_list = net_dev->mc_list; union efx_multicast_hash *mc_hash = &efx->multicast_hash; - bool promiscuous = !!(net_dev->flags & IFF_PROMISC); - bool changed = (efx->promiscuous != promiscuous); u32 crc; int bit; int i; - efx->promiscuous = promiscuous; + efx->promiscuous = !!(net_dev->flags & IFF_PROMISC); /* Build multicast hash table */ - if (promiscuous || (net_dev->flags & IFF_ALLMULTI)) { + if (efx->promiscuous || (net_dev->flags & IFF_ALLMULTI)) { memset(mc_hash, 0xff, sizeof(*mc_hash)); } else { memset(mc_hash, 0x00, sizeof(*mc_hash)); @@ -1544,17 +1621,17 @@ set_bit_le(bit, mc_hash->byte); mc_list = mc_list->next; } - } - if (!efx->port_enabled) - /* Delay pushing settings until efx_start_port() */ - return; - - if (changed) - queue_work(efx->workqueue, &efx->phy_work); + /* Broadcast packets go through the multicast hash filter. + * ether_crc_le() of the broadcast address is 0xbe2612ff + * so we always add bit 0xff to the mask. + */ + set_bit_le(0xff, mc_hash->byte); + } - /* Create and activate new global multicast hash table */ - falcon_set_multicast_hash(efx); + if (efx->port_enabled) + queue_work(efx->workqueue, &efx->mac_work); + /* Otherwise efx_start_port() will do this */ } static const struct net_device_ops efx_netdev_ops = { @@ -1683,21 +1760,18 @@ /* Tears down the entire software state and most of the hardware state * before reset. */ -void efx_reset_down(struct efx_nic *efx, enum reset_type method, - struct ethtool_cmd *ecmd) +void efx_reset_down(struct efx_nic *efx, enum reset_type method) { EFX_ASSERT_RESET_SERIALISED(efx); - efx_stats_disable(efx); efx_stop_all(efx); mutex_lock(&efx->mac_lock); mutex_lock(&efx->spi_lock); - efx->phy_op->get_settings(efx, ecmd); - efx_fini_channels(efx); if (efx->port_initialized && method != RESET_TYPE_INVISIBLE) efx->phy_op->fini(efx); + efx->type->fini(efx); } /* This function will always ensure that the locks acquired in @@ -1705,79 +1779,67 @@ * that we were unable to reinitialise the hardware, and the * driver should be disabled. If ok is false, then the rx and tx * engines are not restarted, pending a RESET_DISABLE. */ -int efx_reset_up(struct efx_nic *efx, enum reset_type method, - struct ethtool_cmd *ecmd, bool ok) +int efx_reset_up(struct efx_nic *efx, enum reset_type method, bool ok) { int rc; EFX_ASSERT_RESET_SERIALISED(efx); - rc = falcon_init_nic(efx); + rc = efx->type->init(efx); if (rc) { EFX_ERR(efx, "failed to initialise NIC\n"); - ok = false; + goto fail; } + if (!ok) + goto fail; + if (efx->port_initialized && method != RESET_TYPE_INVISIBLE) { - if (ok) { - rc = efx->phy_op->init(efx); - if (rc) - ok = false; - } - if (!ok) - efx->port_initialized = false; + rc = efx->phy_op->init(efx); + if (rc) + goto fail; + if (efx->phy_op->reconfigure(efx)) + EFX_ERR(efx, "could not restore PHY settings\n"); } - if (ok) { - efx_init_channels(efx); + efx->mac_op->reconfigure(efx); - if (efx->phy_op->set_settings(efx, ecmd)) - EFX_ERR(efx, "could not restore PHY settings\n"); - } + efx_init_channels(efx); + + mutex_unlock(&efx->spi_lock); + mutex_unlock(&efx->mac_lock); + + efx_start_all(efx); + + return 0; + +fail: + efx->port_initialized = false; mutex_unlock(&efx->spi_lock); mutex_unlock(&efx->mac_lock); - if (ok) { - efx_start_all(efx); - efx_stats_enable(efx); - } return rc; } -/* Reset the NIC as transparently as possible. Do not reset the PHY - * Note that the reset may fail, in which case the card will be left - * in a most-probably-unusable state. +/* Reset the NIC using the specified method. Note that the reset may + * fail, in which case the card will be left in an unusable state. * - * This function will sleep. You cannot reset from within an atomic - * state; use efx_schedule_reset() instead. - * - * Grabs the rtnl_lock. + * Caller must hold the rtnl_lock. */ -static int efx_reset(struct efx_nic *efx) +int efx_reset(struct efx_nic *efx, enum reset_type method) { - struct ethtool_cmd ecmd; - enum reset_type method = efx->reset_pending; - int rc = 0; - - /* Serialise with kernel interfaces */ - rtnl_lock(); - - /* If we're not RUNNING then don't reset. Leave the reset_pending - * flag set so that efx_pci_probe_main will be retried */ - if (efx->state != STATE_RUNNING) { - EFX_INFO(efx, "scheduled reset quenched. NIC not RUNNING\n"); - goto out_unlock; - } + int rc, rc2; + bool disabled; - EFX_INFO(efx, "resetting (%d)\n", method); + EFX_INFO(efx, "resetting (%s)\n", RESET_TYPE(method)); - efx_reset_down(efx, method, &ecmd); + efx_reset_down(efx, method); - rc = falcon_reset_hw(efx, method); + rc = efx->type->reset(efx, method); if (rc) { EFX_ERR(efx, "failed to reset hardware\n"); - goto out_disable; + goto out; } /* Allow resets to be rescheduled. */ @@ -1789,25 +1851,23 @@ * can respond to requests. */ pci_set_master(efx->pci_dev); +out: /* Leave device stopped if necessary */ - if (method == RESET_TYPE_DISABLE) { - efx_reset_up(efx, method, &ecmd, false); - rc = -EIO; - } else { - rc = efx_reset_up(efx, method, &ecmd, true); + disabled = rc || method == RESET_TYPE_DISABLE; + rc2 = efx_reset_up(efx, method, !disabled); + if (rc2) { + disabled = true; + if (!rc) + rc = rc2; } -out_disable: - if (rc) { + if (disabled) { + dev_close(efx->net_dev); EFX_ERR(efx, "has been disabled\n"); efx->state = STATE_DISABLED; - dev_close(efx->net_dev); } else { EFX_LOG(efx, "reset complete\n"); } - -out_unlock: - rtnl_unlock(); return rc; } @@ -1816,9 +1876,18 @@ */ static void efx_reset_work(struct work_struct *data) { - struct efx_nic *nic = container_of(data, struct efx_nic, reset_work); + struct efx_nic *efx = container_of(data, struct efx_nic, reset_work); + + /* If we're not RUNNING then don't reset. Leave the reset_pending + * flag set so that efx_pci_probe_main will be retried */ + if (efx->state != STATE_RUNNING) { + EFX_INFO(efx, "scheduled reset quenched. NIC not RUNNING\n"); + return; + } - efx_reset(nic); + rtnl_lock(); + (void)efx_reset(efx, efx->reset_pending); + rtnl_unlock(); } void efx_schedule_reset(struct efx_nic *efx, enum reset_type type) @@ -1843,18 +1912,24 @@ case RESET_TYPE_TX_SKIP: method = RESET_TYPE_INVISIBLE; break; + case RESET_TYPE_MC_FAILURE: default: method = RESET_TYPE_ALL; break; } if (method != type) - EFX_LOG(efx, "scheduling reset (%d:%d)\n", type, method); + EFX_LOG(efx, "scheduling %s reset for %s\n", + RESET_TYPE(method), RESET_TYPE(type)); else - EFX_LOG(efx, "scheduling reset (%d)\n", method); + EFX_LOG(efx, "scheduling %s reset\n", RESET_TYPE(method)); efx->reset_pending = method; + /* efx_process_channel() will no longer read events once a + * reset is scheduled. So switch back to poll'd MCDI completions. */ + efx_mcdi_mode_poll(efx); + queue_work(reset_workqueue, &efx->reset_work); } @@ -1867,15 +1942,19 @@ /* PCI device ID table */ static struct pci_device_id efx_pci_table[] __devinitdata = { {PCI_DEVICE(EFX_VENDID_SFC, FALCON_A_P_DEVID), - .driver_data = (unsigned long) &falcon_a_nic_type}, + .driver_data = (unsigned long) &falcon_a1_nic_type}, {PCI_DEVICE(EFX_VENDID_SFC, FALCON_B_P_DEVID), - .driver_data = (unsigned long) &falcon_b_nic_type}, + .driver_data = (unsigned long) &falcon_b0_nic_type}, + {PCI_DEVICE(EFX_VENDID_SFC, BETHPAGE_A_P_DEVID), + .driver_data = (unsigned long) &siena_a0_nic_type}, + {PCI_DEVICE(EFX_VENDID_SFC, SIENA_A_P_DEVID), + .driver_data = (unsigned long) &siena_a0_nic_type}, {0} /* end of list */ }; /************************************************************************** * - * Dummy PHY/MAC/Board operations + * Dummy PHY/MAC operations * * Can be used for some unimplemented operations * Needed so all function pointers are valid and do not have to be tested @@ -1887,29 +1966,19 @@ return 0; } void efx_port_dummy_op_void(struct efx_nic *efx) {} -void efx_port_dummy_op_blink(struct efx_nic *efx, bool blink) {} - -static struct efx_mac_operations efx_dummy_mac_operations = { - .reconfigure = efx_port_dummy_op_void, - .poll = efx_port_dummy_op_void, - .irq = efx_port_dummy_op_void, -}; +void efx_port_dummy_op_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) +{ +} +bool efx_port_dummy_op_poll(struct efx_nic *efx) +{ + return false; +} static struct efx_phy_operations efx_dummy_phy_operations = { .init = efx_port_dummy_op_int, - .reconfigure = efx_port_dummy_op_void, - .poll = efx_port_dummy_op_void, + .reconfigure = efx_port_dummy_op_int, + .poll = efx_port_dummy_op_poll, .fini = efx_port_dummy_op_void, - .clear_interrupt = efx_port_dummy_op_void, -}; - -static struct efx_board efx_dummy_board_info = { - .init = efx_port_dummy_op_int, - .init_leds = efx_port_dummy_op_void, - .set_id_led = efx_port_dummy_op_blink, - .monitor = efx_port_dummy_op_int, - .blink = efx_port_dummy_op_blink, - .fini = efx_port_dummy_op_void, }; /************************************************************************** @@ -1932,26 +2001,26 @@ /* Initialise common structures */ memset(efx, 0, sizeof(*efx)); spin_lock_init(&efx->biu_lock); - spin_lock_init(&efx->phy_lock); + mutex_init(&efx->mdio_lock); mutex_init(&efx->spi_lock); +#ifdef CONFIG_SFC_MTD + INIT_LIST_HEAD(&efx->mtd_list); +#endif INIT_WORK(&efx->reset_work, efx_reset_work); INIT_DELAYED_WORK(&efx->monitor_work, efx_monitor); efx->pci_dev = pci_dev; efx->state = STATE_INIT; efx->reset_pending = RESET_TYPE_NONE; strlcpy(efx->name, pci_name(pci_dev), sizeof(efx->name)); - efx->board_info = efx_dummy_board_info; efx->net_dev = net_dev; efx->rx_checksum_enabled = true; spin_lock_init(&efx->netif_stop_lock); spin_lock_init(&efx->stats_lock); - efx->stats_disable_count = 1; mutex_init(&efx->mac_lock); - efx->mac_op = &efx_dummy_mac_operations; + efx->mac_op = type->default_mac_ops; efx->phy_op = &efx_dummy_phy_operations; efx->mdio.dev = net_dev; - INIT_WORK(&efx->phy_work, efx_phy_work); INIT_WORK(&efx->mac_work, efx_mac_work); atomic_set(&efx->netif_stop_count, 1); @@ -1981,17 +2050,9 @@ efx->type = type; - /* Sanity-check NIC type */ - EFX_BUG_ON_PARANOID(efx->type->txd_ring_mask & - (efx->type->txd_ring_mask + 1)); - EFX_BUG_ON_PARANOID(efx->type->rxd_ring_mask & - (efx->type->rxd_ring_mask + 1)); - EFX_BUG_ON_PARANOID(efx->type->evq_size & - (efx->type->evq_size - 1)); /* As close as we can get to guaranteeing that we don't overflow */ - EFX_BUG_ON_PARANOID(efx->type->evq_size < - (efx->type->txd_ring_mask + 1 + - efx->type->rxd_ring_mask + 1)); + BUILD_BUG_ON(EFX_EVQ_SIZE < EFX_TXQ_SIZE + EFX_RXQ_SIZE); + EFX_BUG_ON_PARANOID(efx->type->phys_addr_channels > EFX_MAX_CHANNELS); /* Higher numbered interrupt modes are less capable! */ @@ -2027,19 +2088,10 @@ */ static void efx_pci_remove_main(struct efx_nic *efx) { - EFX_ASSERT_RESET_SERIALISED(efx); - - /* Skip everything if we never obtained a valid membase */ - if (!efx->membase) - return; - + efx_nic_fini_interrupt(efx); efx_fini_channels(efx); efx_fini_port(efx); - - /* Shutdown the board, then the NIC and board state */ - efx->board_info.fini(efx); - falcon_fini_interrupt(efx); - + efx->type->fini(efx); efx_fini_napi(efx); efx_remove_all(efx); } @@ -2063,9 +2115,6 @@ /* Allow any queued efx_resets() to complete */ rtnl_unlock(); - if (efx->membase == NULL) - goto out; - efx_unregister_netdev(efx); efx_mtd_remove(efx); @@ -2078,7 +2127,6 @@ efx_pci_remove_main(efx); -out: efx_fini_io(efx); EFX_LOG(efx, "shutdown successful\n"); @@ -2103,39 +2151,31 @@ if (rc) goto fail2; - /* Initialise the board */ - rc = efx->board_info.init(efx); - if (rc) { - EFX_ERR(efx, "failed to initialise board\n"); - goto fail3; - } - - rc = falcon_init_nic(efx); + rc = efx->type->init(efx); if (rc) { EFX_ERR(efx, "failed to initialise NIC\n"); - goto fail4; + goto fail3; } rc = efx_init_port(efx); if (rc) { EFX_ERR(efx, "failed to initialise port\n"); - goto fail5; + goto fail4; } efx_init_channels(efx); - rc = falcon_init_interrupt(efx); + rc = efx_nic_init_interrupt(efx); if (rc) - goto fail6; + goto fail5; return 0; - fail6: + fail5: efx_fini_channels(efx); efx_fini_port(efx); - fail5: fail4: - efx->board_info.fini(efx); + efx->type->fini(efx); fail3: efx_fini_napi(efx); fail2: @@ -2165,9 +2205,11 @@ net_dev = alloc_etherdev(sizeof(*efx)); if (!net_dev) return -ENOMEM; - net_dev->features |= (NETIF_F_IP_CSUM | NETIF_F_SG | + net_dev->features |= (type->offload_features | NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_TSO | NETIF_F_GRO); + if (type->offload_features & NETIF_F_V6_CSUM) + net_dev->features |= NETIF_F_TSO6; /* Mask for features that also apply to VLAN devices */ net_dev->vlan_features |= (NETIF_F_ALL_CSUM | NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_TSO); @@ -2219,18 +2261,19 @@ goto fail4; } - /* Switch to the running state before we expose the device to - * the OS. This is to ensure that the initial gathering of - * MAC stats succeeds. */ + /* Switch to the running state before we expose the device to the OS, + * so that dev_open()|efx_start_all() will actually start the device */ efx->state = STATE_RUNNING; - efx_mtd_probe(efx); /* allowed to fail */ - rc = efx_register_netdev(efx); if (rc) goto fail5; EFX_LOG(efx, "initialisation successful\n"); + + rtnl_lock(); + efx_mtd_probe(efx); /* allowed to fail */ + rtnl_unlock(); return 0; fail5: @@ -2241,16 +2284,113 @@ fail2: efx_fini_struct(efx); fail1: + WARN_ON(rc > 0); EFX_LOG(efx, "initialisation failed. rc=%d\n", rc); free_netdev(net_dev); return rc; } +static int efx_pm_freeze(struct device *dev) +{ + struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev)); + + efx->state = STATE_FINI; + + netif_device_detach(efx->net_dev); + + efx_stop_all(efx); + efx_fini_channels(efx); + + return 0; +} + +static int efx_pm_thaw(struct device *dev) +{ + struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev)); + + efx->state = STATE_INIT; + + efx_init_channels(efx); + + mutex_lock(&efx->mac_lock); + efx->phy_op->reconfigure(efx); + mutex_unlock(&efx->mac_lock); + + efx_start_all(efx); + + netif_device_attach(efx->net_dev); + + efx->state = STATE_RUNNING; + + efx->type->resume_wol(efx); + + return 0; +} + +static int efx_pm_poweroff(struct device *dev) +{ + struct pci_dev *pci_dev = to_pci_dev(dev); + struct efx_nic *efx = pci_get_drvdata(pci_dev); + + efx->type->fini(efx); + + efx->reset_pending = RESET_TYPE_NONE; + + pci_save_state(pci_dev); + return pci_set_power_state(pci_dev, PCI_D3hot); +} + +/* Used for both resume and restore */ +static int efx_pm_resume(struct device *dev) +{ + struct pci_dev *pci_dev = to_pci_dev(dev); + struct efx_nic *efx = pci_get_drvdata(pci_dev); + int rc; + + rc = pci_set_power_state(pci_dev, PCI_D0); + if (rc) + return rc; + pci_restore_state(pci_dev); + rc = pci_enable_device(pci_dev); + if (rc) + return rc; + pci_set_master(efx->pci_dev); + rc = efx->type->reset(efx, RESET_TYPE_ALL); + if (rc) + return rc; + rc = efx->type->init(efx); + if (rc) + return rc; + efx_pm_thaw(dev); + return 0; +} + +static int efx_pm_suspend(struct device *dev) +{ + int rc; + + efx_pm_freeze(dev); + rc = efx_pm_poweroff(dev); + if (rc) + efx_pm_resume(dev); + return rc; +} + +static struct dev_pm_ops efx_pm_ops = { + .suspend = efx_pm_suspend, + .resume = efx_pm_resume, + .freeze = efx_pm_freeze, + .thaw = efx_pm_thaw, + .poweroff = efx_pm_poweroff, + .restore = efx_pm_resume, +}; + static struct pci_driver efx_pci_driver = { .name = EFX_DRIVER_NAME, .id_table = efx_pci_table, .probe = efx_pci_probe, .remove = efx_pci_remove, + .driver.pm = &efx_pm_ops, }; /************************************************************************** @@ -2314,8 +2454,8 @@ module_init(efx_init_module); module_exit(efx_exit_module); -MODULE_AUTHOR("Michael Brown and " - "Solarflare Communications"); +MODULE_AUTHOR("Solarflare Communications and " + "Michael Brown "); MODULE_DESCRIPTION("Solarflare Communications network driver"); MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(pci, efx_pci_table); --- linux-2.6.32.orig/drivers/net/sfc/bitfield.h +++ linux-2.6.32/drivers/net/sfc/bitfield.h @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -37,6 +37,8 @@ #define EFX_DWORD_2_WIDTH 32 #define EFX_DWORD_3_LBN 96 #define EFX_DWORD_3_WIDTH 32 +#define EFX_QWORD_0_LBN 0 +#define EFX_QWORD_0_WIDTH 64 /* Specified attribute (e.g. LBN) of the specified field */ #define EFX_VAL(field, attribute) field ## _ ## attribute @@ -520,19 +522,6 @@ #define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD32 #endif -#define EFX_SET_OWORD_FIELD_VER(efx, oword, field, value) do { \ - if (falcon_rev(efx) >= FALCON_REV_B0) { \ - EFX_SET_OWORD_FIELD((oword), field##_B0, (value)); \ - } else { \ - EFX_SET_OWORD_FIELD((oword), field##_A1, (value)); \ - } \ -} while (0) - -#define EFX_QWORD_FIELD_VER(efx, qword, field) \ - (falcon_rev(efx) >= FALCON_REV_B0 ? \ - EFX_QWORD_FIELD((qword), field##_B0) : \ - EFX_QWORD_FIELD((qword), field##_A1)) - /* Used to avoid compiler warnings about shift range exceeding width * of the data types when dma_addr_t is only 32 bits wide. */ --- linux-2.6.32.orig/drivers/net/sfc/mcdi_pcol.h +++ linux-2.6.32/drivers/net/sfc/mcdi_pcol.h @@ -0,0 +1,1580 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + + +#ifndef MCDI_PCOL_H +#define MCDI_PCOL_H + +/* Values to be written into FMCR_CZ_RESET_STATE_REG to control boot. */ +/* Power-on reset state */ +#define MC_FW_STATE_POR (1) +/* If this is set in MC_RESET_STATE_REG then it should be + * possible to jump into IMEM without loading code from flash. */ +#define MC_FW_WARM_BOOT_OK (2) +/* The MC main image has started to boot. */ +#define MC_FW_STATE_BOOTING (4) +/* The Scheduler has started. */ +#define MC_FW_STATE_SCHED (8) + +/* Values to be written to the per-port status dword in shared + * memory on reboot and assert */ +#define MC_STATUS_DWORD_REBOOT (0xb007b007) +#define MC_STATUS_DWORD_ASSERT (0xdeaddead) + +/* The current version of the MCDI protocol. + * + * Note that the ROM burnt into the card only talks V0, so at the very + * least every driver must support version 0 and MCDI_PCOL_VERSION + */ +#define MCDI_PCOL_VERSION 1 + +/** + * MCDI version 1 + * + * Each MCDI request starts with an MCDI_HEADER, which is a 32byte + * structure, filled in by the client. + * + * 0 7 8 16 20 22 23 24 31 + * | CODE | R | LEN | SEQ | Rsvd | E | R | XFLAGS | + * | | | + * | | \--- Response + * | \------- Error + * \------------------------------ Resync (always set) + * + * The client writes it's request into MC shared memory, and rings the + * doorbell. Each request is completed by either by the MC writting + * back into shared memory, or by writting out an event. + * + * All MCDI commands support completion by shared memory response. Each + * request may also contain additional data (accounted for by HEADER.LEN), + * and some response's may also contain additional data (again, accounted + * for by HEADER.LEN). + * + * Some MCDI commands support completion by event, in which any associated + * response data is included in the event. + * + * The protocol requires one response to be delivered for every request, a + * request should not be sent unless the response for the previous request + * has been received (either by polling shared memory, or by receiving + * an event). + */ + +/** Request/Response structure */ +#define MCDI_HEADER_OFST 0 +#define MCDI_HEADER_CODE_LBN 0 +#define MCDI_HEADER_CODE_WIDTH 7 +#define MCDI_HEADER_RESYNC_LBN 7 +#define MCDI_HEADER_RESYNC_WIDTH 1 +#define MCDI_HEADER_DATALEN_LBN 8 +#define MCDI_HEADER_DATALEN_WIDTH 8 +#define MCDI_HEADER_SEQ_LBN 16 +#define MCDI_HEADER_RSVD_LBN 20 +#define MCDI_HEADER_RSVD_WIDTH 2 +#define MCDI_HEADER_SEQ_WIDTH 4 +#define MCDI_HEADER_ERROR_LBN 22 +#define MCDI_HEADER_ERROR_WIDTH 1 +#define MCDI_HEADER_RESPONSE_LBN 23 +#define MCDI_HEADER_RESPONSE_WIDTH 1 +#define MCDI_HEADER_XFLAGS_LBN 24 +#define MCDI_HEADER_XFLAGS_WIDTH 8 +/* Request response using event */ +#define MCDI_HEADER_XFLAGS_EVREQ 0x01 + +/* Maximum number of payload bytes */ +#define MCDI_CTL_SDU_LEN_MAX 0xfc + +/* The MC can generate events for two reasons: + * - To complete a shared memory request if XFLAGS_EVREQ was set + * - As a notification (link state, i2c event), controlled + * via MC_CMD_LOG_CTRL + * + * Both events share a common structure: + * + * 0 32 33 36 44 52 60 + * | Data | Cont | Level | Src | Code | Rsvd | + * | + * \ There is another event pending in this notification + * + * If Code==CMDDONE, then the fields are further interpreted as: + * + * - LEVEL==INFO Command succeded + * - LEVEL==ERR Command failed + * + * 0 8 16 24 32 + * | Seq | Datalen | Errno | Rsvd | + * + * These fields are taken directly out of the standard MCDI header, i.e., + * LEVEL==ERR, Datalen == 0 => Reboot + * + * Events can be squirted out of the UART (using LOG_CTRL) without a + * MCDI header. An event can be distinguished from a MCDI response by + * examining the first byte which is 0xc0. This corresponds to the + * non-existent MCDI command MC_CMD_DEBUG_LOG. + * + * 0 7 8 + * | command | Resync | = 0xc0 + * + * Since the event is written in big-endian byte order, this works + * providing bits 56-63 of the event are 0xc0. + * + * 56 60 63 + * | Rsvd | Code | = 0xc0 + * + * Which means for convenience the event code is 0xc for all MC + * generated events. + */ +#define FSE_AZ_EV_CODE_MCDI_EVRESPONSE 0xc + +#define MCDI_EVENT_DATA_LBN 0 +#define MCDI_EVENT_DATA_WIDTH 32 +#define MCDI_EVENT_CONT_LBN 32 +#define MCDI_EVENT_CONT_WIDTH 1 +#define MCDI_EVENT_LEVEL_LBN 33 +#define MCDI_EVENT_LEVEL_WIDTH 3 +#define MCDI_EVENT_LEVEL_INFO (0) +#define MCDI_EVENT_LEVEL_WARN (1) +#define MCDI_EVENT_LEVEL_ERR (2) +#define MCDI_EVENT_LEVEL_FATAL (3) +#define MCDI_EVENT_SRC_LBN 36 +#define MCDI_EVENT_SRC_WIDTH 8 +#define MCDI_EVENT_CODE_LBN 44 +#define MCDI_EVENT_CODE_WIDTH 8 +#define MCDI_EVENT_CODE_BADSSERT (1) +#define MCDI_EVENT_CODE_PMNOTICE (2) +#define MCDI_EVENT_CODE_CMDDONE (3) +#define MCDI_EVENT_CMDDONE_SEQ_LBN 0 +#define MCDI_EVENT_CMDDONE_SEQ_WIDTH 8 +#define MCDI_EVENT_CMDDONE_DATALEN_LBN 8 +#define MCDI_EVENT_CMDDONE_DATALEN_WIDTH 8 +#define MCDI_EVENT_CMDDONE_ERRNO_LBN 16 +#define MCDI_EVENT_CMDDONE_ERRNO_WIDTH 8 +#define MCDI_EVENT_CODE_LINKCHANGE (4) +#define MCDI_EVENT_LINKCHANGE_LP_CAP_LBN 0 +#define MCDI_EVENT_LINKCHANGE_LP_CAP_WIDTH 16 +#define MCDI_EVENT_LINKCHANGE_SPEED_LBN 16 +#define MCDI_EVENT_LINKCHANGE_SPEED_WIDTH 4 +#define MCDI_EVENT_LINKCHANGE_SPEED_100M 1 +#define MCDI_EVENT_LINKCHANGE_SPEED_1G 2 +#define MCDI_EVENT_LINKCHANGE_SPEED_10G 3 +#define MCDI_EVENT_LINKCHANGE_FCNTL_LBN 20 +#define MCDI_EVENT_LINKCHANGE_FCNTL_WIDTH 4 +#define MCDI_EVENT_LINKCHANGE_LINK_FLAGS_LBN 24 +#define MCDI_EVENT_LINKCHANGE_LINK_FLAGS_WIDTH 8 +#define MCDI_EVENT_CODE_SENSOREVT (5) +#define MCDI_EVENT_SENSOREVT_MONITOR_LBN 0 +#define MCDI_EVENT_SENSOREVT_MONITOR_WIDTH 8 +#define MCDI_EVENT_SENSOREVT_STATE_LBN 8 +#define MCDI_EVENT_SENSOREVT_STATE_WIDTH 8 +#define MCDI_EVENT_SENSOREVT_VALUE_LBN 16 +#define MCDI_EVENT_SENSOREVT_VALUE_WIDTH 16 +#define MCDI_EVENT_CODE_SCHEDERR (6) +#define MCDI_EVENT_CODE_REBOOT (7) +#define MCDI_EVENT_CODE_MAC_STATS_DMA (8) +#define MCDI_EVENT_MAC_STATS_DMA_GENERATION_LBN 0 +#define MCDI_EVENT_MAC_STATS_DMA_GENERATION_WIDTH 32 + +/* Non-existent command target */ +#define MC_CMD_ERR_ENOENT 2 +/* assert() has killed the MC */ +#define MC_CMD_ERR_EINTR 4 +/* Caller does not hold required locks */ +#define MC_CMD_ERR_EACCES 13 +/* Resource is currently unavailable (e.g. lock contention) */ +#define MC_CMD_ERR_EBUSY 16 +/* Invalid argument to target */ +#define MC_CMD_ERR_EINVAL 22 +/* Non-recursive resource is already acquired */ +#define MC_CMD_ERR_EDEADLK 35 +/* Operation not implemented */ +#define MC_CMD_ERR_ENOSYS 38 +/* Operation timed out */ +#define MC_CMD_ERR_ETIME 62 + +#define MC_CMD_ERR_CODE_OFST 0 + + +/* MC_CMD_READ32: (debug, variadic out) + * Read multiple 32byte words from MC memory + */ +#define MC_CMD_READ32 0x01 +#define MC_CMD_READ32_IN_LEN 8 +#define MC_CMD_READ32_IN_ADDR_OFST 0 +#define MC_CMD_READ32_IN_NUMWORDS_OFST 4 +#define MC_CMD_READ32_OUT_LEN(_numwords) \ + (4 * (_numwords)) +#define MC_CMD_READ32_OUT_BUFFER_OFST 0 + +/* MC_CMD_WRITE32: (debug, variadic in) + * Write multiple 32byte words to MC memory + */ +#define MC_CMD_WRITE32 0x02 +#define MC_CMD_WRITE32_IN_LEN(_numwords) (((_numwords) * 4) + 4) +#define MC_CMD_WRITE32_IN_ADDR_OFST 0 +#define MC_CMD_WRITE32_IN_BUFFER_OFST 4 +#define MC_CMD_WRITE32_OUT_LEN 0 + +/* MC_CMD_COPYCODE: (debug) + * Copy MC code between two locations and jump + */ +#define MC_CMD_COPYCODE 0x03 +#define MC_CMD_COPYCODE_IN_LEN 16 +#define MC_CMD_COPYCODE_IN_SRC_ADDR_OFST 0 +#define MC_CMD_COPYCODE_IN_DEST_ADDR_OFST 4 +#define MC_CMD_COPYCODE_IN_NUMWORDS_OFST 8 +#define MC_CMD_COPYCODE_IN_JUMP_OFST 12 +/* Control should return to the caller rather than jumping */ +#define MC_CMD_COPYCODE_JUMP_NONE 1 +#define MC_CMD_COPYCODE_OUT_LEN 0 + +/* MC_CMD_SET_FUNC: (debug) + * Select function for function-specific commands. + */ +#define MC_CMD_SET_FUNC 0x04 +#define MC_CMD_SET_FUNC_IN_LEN 4 +#define MC_CMD_SET_FUNC_IN_FUNC_OFST 0 +#define MC_CMD_SET_FUNC_OUT_LEN 0 + +/* MC_CMD_GET_BOOT_STATUS: + * Get the instruction address from which the MC booted. + */ +#define MC_CMD_GET_BOOT_STATUS 0x05 +#define MC_CMD_GET_BOOT_STATUS_IN_LEN 0 +#define MC_CMD_GET_BOOT_STATUS_OUT_LEN 8 +#define MC_CMD_GET_BOOT_STATUS_OUT_BOOT_OFFSET_OFST 0 +#define MC_CMD_GET_BOOT_STATUS_OUT_FLAGS_OFST 4 +/* Reboot caused by watchdog */ +#define MC_CMD_GET_BOOT_STATUS_FLAGS_WATCHDOG_LBN (0) +#define MC_CMD_GET_BOOT_STATUS_FLAGS_WATCHDOG_WIDTH (1) +/* MC booted from primary flash partition */ +#define MC_CMD_GET_BOOT_STATUS_FLAGS_PRIMARY_LBN (1) +#define MC_CMD_GET_BOOT_STATUS_FLAGS_PRIMARY_WIDTH (1) +/* MC booted from backup flash partition */ +#define MC_CMD_GET_BOOT_STATUS_FLAGS_BACKUP_LBN (2) +#define MC_CMD_GET_BOOT_STATUS_FLAGS_BACKUP_WIDTH (1) + +/* MC_CMD_GET_ASSERTS: (debug, variadic out) + * Get (and optionally clear) the current assertion status. + * + * Only OUT.GLOBAL_FLAGS is guaranteed to exist in the completion + * payload. The other fields will only be present if + * OUT.GLOBAL_FLAGS != NO_FAILS + */ +#define MC_CMD_GET_ASSERTS 0x06 +#define MC_CMD_GET_ASSERTS_IN_LEN 4 +#define MC_CMD_GET_ASSERTS_IN_CLEAR_OFST 0 +#define MC_CMD_GET_ASSERTS_OUT_LEN 140 +/* Assertion status flag */ +#define MC_CMD_GET_ASSERTS_OUT_GLOBAL_FLAGS_OFST 0 +/*! No assertions have failed. */ +#define MC_CMD_GET_ASSERTS_FLAGS_NO_FAILS 1 +/*! A system-level assertion has failed. */ +#define MC_CMD_GET_ASSERTS_FLAGS_SYS_FAIL 2 +/*! A thread-level assertion has failed. */ +#define MC_CMD_GET_ASSERTS_FLAGS_THR_FAIL 3 +/*! The system was reset by the watchdog. */ +#define MC_CMD_GET_ASSERTS_FLAGS_WDOG_FIRED 4 +/* Failing PC value */ +#define MC_CMD_GET_ASSERTS_OUT_SAVED_PC_OFFS_OFST 4 +/* Saved GP regs */ +#define MC_CMD_GET_ASSERTS_OUT_GP_REGS_OFFS_OFST 8 +#define MC_CMD_GET_ASSERTS_OUT_GP_REGS_LEN 124 +/* Failing thread address */ +#define MC_CMD_GET_ASSERTS_OUT_THREAD_OFFS_OFST 132 + +/* MC_CMD_LOG_CTRL: + * Determine the output stream for various events and messages + */ +#define MC_CMD_LOG_CTRL 0x07 +#define MC_CMD_LOG_CTRL_IN_LEN 8 +#define MC_CMD_LOG_CTRL_IN_LOG_DEST_OFST 0 +#define MC_CMD_LOG_CTRL_IN_LOG_DEST_UART (1) +#define MC_CMD_LOG_CTRL_IN_LOG_DEST_EVQ (2) +#define MC_CMD_LOG_CTRL_IN_LOG_DEST_EVQ_OFST 4 +#define MC_CMD_LOG_CTRL_OUT_LEN 0 + +/* MC_CMD_GET_VERSION: + * Get version information about the MC firmware + */ +#define MC_CMD_GET_VERSION 0x08 +#define MC_CMD_GET_VERSION_IN_LEN 0 +#define MC_CMD_GET_VERSION_V0_OUT_LEN 4 +#define MC_CMD_GET_VERSION_V1_OUT_LEN 32 +#define MC_CMD_GET_VERSION_OUT_FIRMWARE_OFST 0 +/* Reserved version number to indicate "any" version. */ +#define MC_CMD_GET_VERSION_OUT_FIRMWARE_ANY 0xffffffff +/* The version response of a boot ROM awaiting rescue */ +#define MC_CMD_GET_VERSION_OUT_FIRMWARE_BOOTROM 0xb0070000 +#define MC_CMD_GET_VERSION_V1_OUT_PCOL_OFST 4 +/* 128bit mask of functions supported by the current firmware */ +#define MC_CMD_GET_VERSION_V1_OUT_SUPPORTED_FUNCS_OFST 8 +/* The command set exported by the boot ROM (MCDI v0) */ +#define MC_CMD_GET_VERSION_V0_SUPPORTED_FUNCS { \ + (1 << MC_CMD_READ32) | \ + (1 << MC_CMD_WRITE32) | \ + (1 << MC_CMD_COPYCODE) | \ + (1 << MC_CMD_GET_VERSION), \ + 0, 0, 0 } +#define MC_CMD_GET_VERSION_OUT_VERSION_OFST 24 + +/* Vectors in the boot ROM */ +/* Point to the copycode entry point. */ +#define MC_BOOTROM_COPYCODE_VEC (0x7f4) +/* Points to the recovery mode entry point. */ +#define MC_BOOTROM_NOFLASH_VEC (0x7f8) + +/* Test execution limits */ +#define MC_TESTEXEC_VARIANT_COUNT 16 +#define MC_TESTEXEC_RESULT_COUNT 7 + +/* MC_CMD_SET_TESTVARS: (debug, variadic in) + * Write variant words for test. + * + * The user supplies a bitmap of the variants they wish to set. + * They must ensure that IN.LEN >= 4 + 4 * ffs(BITMAP) + */ +#define MC_CMD_SET_TESTVARS 0x09 +#define MC_CMD_SET_TESTVARS_IN_LEN(_numwords) \ + (4 + 4*(_numwords)) +#define MC_CMD_SET_TESTVARS_IN_ARGS_BITMAP_OFST 0 +/* Up to MC_TESTEXEC_VARIANT_COUNT of 32byte words start here */ +#define MC_CMD_SET_TESTVARS_IN_ARGS_BUFFER_OFST 4 +#define MC_CMD_SET_TESTVARS_OUT_LEN 0 + +/* MC_CMD_GET_TESTRCS: (debug, variadic out) + * Return result words from test. + */ +#define MC_CMD_GET_TESTRCS 0x0a +#define MC_CMD_GET_TESTRCS_IN_LEN 4 +#define MC_CMD_GET_TESTRCS_IN_NUMWORDS_OFST 0 +#define MC_CMD_GET_TESTRCS_OUT_LEN(_numwords) \ + (4 * (_numwords)) +#define MC_CMD_GET_TESTRCS_OUT_BUFFER_OFST 0 + +/* MC_CMD_RUN_TEST: (debug) + * Run the test exported by this firmware image + */ +#define MC_CMD_RUN_TEST 0x0b +#define MC_CMD_RUN_TEST_IN_LEN 0 +#define MC_CMD_RUN_TEST_OUT_LEN 0 + +/* MC_CMD_CSR_READ32: (debug, variadic out) + * Read 32bit words from the indirect memory map + */ +#define MC_CMD_CSR_READ32 0x0c +#define MC_CMD_CSR_READ32_IN_LEN 12 +#define MC_CMD_CSR_READ32_IN_ADDR_OFST 0 +#define MC_CMD_CSR_READ32_IN_STEP_OFST 4 +#define MC_CMD_CSR_READ32_IN_NUMWORDS_OFST 8 +#define MC_CMD_CSR_READ32_OUT_LEN(_numwords) \ + (((_numwords) * 4) + 4) +/* IN.NUMWORDS of 32bit words start here */ +#define MC_CMD_CSR_READ32_OUT_BUFFER_OFST 0 +#define MC_CMD_CSR_READ32_OUT_IREG_STATUS_OFST(_numwords) \ + ((_numwords) * 4) + +/* MC_CMD_CSR_WRITE32: (debug, variadic in) + * Write 32bit dwords to the indirect memory map + */ +#define MC_CMD_CSR_WRITE32 0x0d +#define MC_CMD_CSR_WRITE32_IN_LEN(_numwords) \ + (((_numwords) * 4) + 8) +#define MC_CMD_CSR_WRITE32_IN_ADDR_OFST 0 +#define MC_CMD_CSR_WRITE32_IN_STEP_OFST 4 +/* Multiple 32bit words of data to write start here */ +#define MC_CMD_CSR_WRITE32_IN_BUFFER_OFST 8 +#define MC_CMD_CSR_WRITE32_OUT_LEN 4 +#define MC_CMD_CSR_WRITE32_OUT_STATUS_OFST 0 + +/* MC_CMD_JTAG_WORK: (debug, fpga only) + * Process JTAG work buffer for RBF acceleration. + * + * Host: bit count, (up to) 32 words of data to clock out to JTAG + * (bits 1,0=TMS,TDO for first bit; bits 3,2=TMS,TDO for second bit, etc.) + * MC: bit count, (up to) 32 words of data clocked in from JTAG + * (bit 0=TDI for first bit, bit 1=TDI for second bit, etc.; [31:16] unused) + */ +#define MC_CMD_JTAG_WORK 0x0e + +/* MC_CMD_STACKINFO: (debug, variadic out) + * Get stack information + * + * Host: nothing + * MC: (thread ptr, stack size, free space) for each thread in system + */ +#define MC_CMD_STACKINFO 0x0f + +/* MC_CMD_MDIO_READ: + * MDIO register read + */ +#define MC_CMD_MDIO_READ 0x10 +#define MC_CMD_MDIO_READ_IN_LEN 16 +#define MC_CMD_MDIO_READ_IN_BUS_OFST 0 +#define MC_CMD_MDIO_READ_IN_PRTAD_OFST 4 +#define MC_CMD_MDIO_READ_IN_DEVAD_OFST 8 +#define MC_CMD_MDIO_READ_IN_ADDR_OFST 12 +#define MC_CMD_MDIO_READ_OUT_LEN 8 +#define MC_CMD_MDIO_READ_OUT_VALUE_OFST 0 +#define MC_CMD_MDIO_READ_OUT_STATUS_OFST 4 + +/* MC_CMD_MDIO_WRITE: + * MDIO register write + */ +#define MC_CMD_MDIO_WRITE 0x11 +#define MC_CMD_MDIO_WRITE_IN_LEN 20 +#define MC_CMD_MDIO_WRITE_IN_BUS_OFST 0 +#define MC_CMD_MDIO_WRITE_IN_PRTAD_OFST 4 +#define MC_CMD_MDIO_WRITE_IN_DEVAD_OFST 8 +#define MC_CMD_MDIO_WRITE_IN_ADDR_OFST 12 +#define MC_CMD_MDIO_WRITE_IN_VALUE_OFST 16 +#define MC_CMD_MDIO_WRITE_OUT_LEN 4 +#define MC_CMD_MDIO_WRITE_OUT_STATUS_OFST 0 + +/* By default all the MCDI MDIO operations perform clause45 mode. + * If you want to use clause22 then set DEVAD = MC_CMD_MDIO_CLAUSE22. + */ +#define MC_CMD_MDIO_CLAUSE22 32 + +/* There are two MDIO buses: one for the internal PHY, and one for external + * devices. + */ +#define MC_CMD_MDIO_BUS_INTERNAL 0 +#define MC_CMD_MDIO_BUS_EXTERNAL 1 + +/* The MDIO commands return the raw status bits from the MDIO block. A "good" + * transaction should have the DONE bit set and all other bits clear. + */ +#define MC_CMD_MDIO_STATUS_GOOD 0x08 + + +/* MC_CMD_DBI_WRITE: (debug) + * Write DBI register(s) + * + * Host: address, byte-enables (and VF selection, and cs2 flag), + * value [,address ...] + * MC: nothing + */ +#define MC_CMD_DBI_WRITE 0x12 +#define MC_CMD_DBI_WRITE_IN_LEN(_numwords) \ + (12 * (_numwords)) +#define MC_CMD_DBI_WRITE_IN_ADDRESS_OFST(_word) \ + (((_word) * 12) + 0) +#define MC_CMD_DBI_WRITE_IN_BYTE_MASK_OFST(_word) \ + (((_word) * 12) + 4) +#define MC_CMD_DBI_WRITE_IN_VALUE_OFST(_word) \ + (((_word) * 12) + 8) +#define MC_CMD_DBI_WRITE_OUT_LEN 0 + +/* MC_CMD_DBI_READ: (debug) + * Read DBI register(s) + * + * Host: address, [,address ...] + * MC: value [,value ...] + * (note: this does not support reading from VFs, but is retained for backwards + * compatibility; see MC_CMD_DBI_READX below) + */ +#define MC_CMD_DBI_READ 0x13 +#define MC_CMD_DBI_READ_IN_LEN(_numwords) \ + (4 * (_numwords)) +#define MC_CMD_DBI_READ_OUT_LEN(_numwords) \ + (4 * (_numwords)) + +/* MC_CMD_PORT_READ32: (debug) + * Read a 32-bit register from the indirect port register map. + * + * The port to access is implied by the Shared memory channel used. + */ +#define MC_CMD_PORT_READ32 0x14 +#define MC_CMD_PORT_READ32_IN_LEN 4 +#define MC_CMD_PORT_READ32_IN_ADDR_OFST 0 +#define MC_CMD_PORT_READ32_OUT_LEN 8 +#define MC_CMD_PORT_READ32_OUT_VALUE_OFST 0 +#define MC_CMD_PORT_READ32_OUT_STATUS_OFST 4 + +/* MC_CMD_PORT_WRITE32: (debug) + * Write a 32-bit register to the indirect port register map. + * + * The port to access is implied by the Shared memory channel used. + */ +#define MC_CMD_PORT_WRITE32 0x15 +#define MC_CMD_PORT_WRITE32_IN_LEN 8 +#define MC_CMD_PORT_WRITE32_IN_ADDR_OFST 0 +#define MC_CMD_PORT_WRITE32_IN_VALUE_OFST 4 +#define MC_CMD_PORT_WRITE32_OUT_LEN 4 +#define MC_CMD_PORT_WRITE32_OUT_STATUS_OFST 0 + +/* MC_CMD_PORT_READ128: (debug) + * Read a 128-bit register from indirect port register map + * + * The port to access is implied by the Shared memory channel used. + */ +#define MC_CMD_PORT_READ128 0x16 +#define MC_CMD_PORT_READ128_IN_LEN 4 +#define MC_CMD_PORT_READ128_IN_ADDR_OFST 0 +#define MC_CMD_PORT_READ128_OUT_LEN 20 +#define MC_CMD_PORT_READ128_OUT_VALUE_OFST 0 +#define MC_CMD_PORT_READ128_OUT_STATUS_OFST 16 + +/* MC_CMD_PORT_WRITE128: (debug) + * Write a 128-bit register to indirect port register map. + * + * The port to access is implied by the Shared memory channel used. + */ +#define MC_CMD_PORT_WRITE128 0x17 +#define MC_CMD_PORT_WRITE128_IN_LEN 20 +#define MC_CMD_PORT_WRITE128_IN_ADDR_OFST 0 +#define MC_CMD_PORT_WRITE128_IN_VALUE_OFST 4 +#define MC_CMD_PORT_WRITE128_OUT_LEN 4 +#define MC_CMD_PORT_WRITE128_OUT_STATUS_OFST 0 + +/* MC_CMD_GET_BOARD_CFG: + * Returns the MC firmware configuration structure + * + * The FW_SUBTYPE_LIST contains a 16-bit value for each of the 12 types of + * NVRAM area. The values are defined in the firmware/mc/platform/.c file + * for a specific board type, but otherwise have no meaning to the MC; they + * are used by the driver to manage selection of appropriate firmware updates. + */ +#define MC_CMD_GET_BOARD_CFG 0x18 +#define MC_CMD_GET_BOARD_CFG_IN_LEN 0 +#define MC_CMD_GET_BOARD_CFG_OUT_LEN 96 +#define MC_CMD_GET_BOARD_CFG_OUT_BOARD_TYPE_OFST 0 +#define MC_CMD_GET_BOARD_CFG_OUT_BOARD_NAME_OFST 4 +#define MC_CMD_GET_BOARD_CFG_OUT_BOARD_NAME_LEN 32 +#define MC_CMD_GET_BOARD_CFG_OUT_CAPABILITIES_PORT0_OFST 36 +#define MC_CMD_GET_BOARD_CFG_OUT_CAPABILITIES_PORT1_OFST 40 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_ADDR_BASE_PORT0_OFST 44 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_ADDR_BASE_PORT0_LEN 6 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_ADDR_BASE_PORT1_OFST 50 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_ADDR_BASE_PORT1_LEN 6 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_COUNT_PORT0_OFST 56 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_COUNT_PORT1_OFST 60 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_STRIDE_PORT0_OFST 64 +#define MC_CMD_GET_BOARD_CFG_OUT_MAC_STRIDE_PORT1_OFST 68 +#define MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_OFST 72 +#define MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_LEN 24 + +/* MC_CMD_DBI_READX: (debug) + * Read DBI register(s) -- extended functionality + * + * Host: vf selection, address, [,vf selection ...] + * MC: value [,value ...] + */ +#define MC_CMD_DBI_READX 0x19 +#define MC_CMD_DBI_READX_IN_LEN(_numwords) \ + (8*(_numwords)) +#define MC_CMD_DBI_READX_OUT_LEN(_numwords) \ + (4*(_numwords)) + +/* MC_CMD_SET_RAND_SEED: + * Set the 16byte seed for the MC psuedo-random generator + */ +#define MC_CMD_SET_RAND_SEED 0x1a +#define MC_CMD_SET_RAND_SEED_IN_LEN 16 +#define MC_CMD_SET_RAND_SEED_IN_SEED_OFST 0 +#define MC_CMD_SET_RAND_SEED_OUT_LEN 0 + +/* MC_CMD_LTSSM_HIST: (debug) + * Retrieve the history of the LTSSM, if the build supports it. + * + * Host: nothing + * MC: variable number of LTSSM values, as bytes + * The history is read-to-clear. + */ +#define MC_CMD_LTSSM_HIST 0x1b + +/* MC_CMD_DRV_ATTACH: + * Inform MCPU that this port is managed on the host (i.e. driver active) + */ +#define MC_CMD_DRV_ATTACH 0x1c +#define MC_CMD_DRV_ATTACH_IN_LEN 8 +#define MC_CMD_DRV_ATTACH_IN_NEW_STATE_OFST 0 +#define MC_CMD_DRV_ATTACH_IN_UPDATE_OFST 4 +#define MC_CMD_DRV_ATTACH_OUT_LEN 4 +#define MC_CMD_DRV_ATTACH_OUT_OLD_STATE_OFST 0 + +/* MC_CMD_NCSI_PROD: (debug) + * Trigger an NC-SI event (and possibly an AEN in response) + */ +#define MC_CMD_NCSI_PROD 0x1d +#define MC_CMD_NCSI_PROD_IN_LEN 4 +#define MC_CMD_NCSI_PROD_IN_EVENTS_OFST 0 +#define MC_CMD_NCSI_PROD_LINKCHANGE_LBN 0 +#define MC_CMD_NCSI_PROD_LINKCHANGE_WIDTH 1 +#define MC_CMD_NCSI_PROD_RESET_LBN 1 +#define MC_CMD_NCSI_PROD_RESET_WIDTH 1 +#define MC_CMD_NCSI_PROD_DRVATTACH_LBN 2 +#define MC_CMD_NCSI_PROD_DRVATTACH_WIDTH 1 +#define MC_CMD_NCSI_PROD_OUT_LEN 0 + +/* Enumeration */ +#define MC_CMD_NCSI_PROD_LINKCHANGE 0 +#define MC_CMD_NCSI_PROD_RESET 1 +#define MC_CMD_NCSI_PROD_DRVATTACH 2 + +/* MC_CMD_DEVEL: (debug) + * Reserved for development + */ +#define MC_CMD_DEVEL 0x1e + +/* MC_CMD_SHMUART: (debug) + * Route UART output to circular buffer in shared memory instead. + */ +#define MC_CMD_SHMUART 0x1f +#define MC_CMD_SHMUART_IN_FLAG_OFST 0 +#define MC_CMD_SHMUART_IN_LEN 4 +#define MC_CMD_SHMUART_OUT_LEN 0 + +/* MC_CMD_PORT_RESET: + * Generic per-port reset. There is no equivalent for per-board reset. + * + * Locks required: None + * Return code: 0, ETIME + */ +#define MC_CMD_PORT_RESET 0x20 +#define MC_CMD_PORT_RESET_IN_LEN 0 +#define MC_CMD_PORT_RESET_OUT_LEN 0 + +/* MC_CMD_RESOURCE_LOCK: + * Generic resource lock/unlock interface. + * + * Locks required: None + * Return code: 0, + * EBUSY (if trylock is contended by other port), + * EDEADLK (if trylock is already acquired by this port) + * EINVAL (if unlock doesn't own the lock) + */ +#define MC_CMD_RESOURCE_LOCK 0x21 +#define MC_CMD_RESOURCE_LOCK_IN_LEN 8 +#define MC_CMD_RESOURCE_LOCK_IN_ACTION_OFST 0 +#define MC_CMD_RESOURCE_LOCK_ACTION_TRYLOCK 1 +#define MC_CMD_RESOURCE_LOCK_ACTION_UNLOCK 0 +#define MC_CMD_RESOURCE_LOCK_IN_RESOURCE_OFST 4 +#define MC_CMD_RESOURCE_LOCK_I2C 2 +#define MC_CMD_RESOURCE_LOCK_PHY 3 +#define MC_CMD_RESOURCE_LOCK_OUT_LEN 0 + +/* MC_CMD_SPI_COMMAND: (variadic in, variadic out) + * Read/Write to/from the SPI device. + * + * Locks required: SPI_LOCK + * Return code: 0, ETIME, EINVAL, EACCES (if SPI_LOCK is not held) + */ +#define MC_CMD_SPI_COMMAND 0x22 +#define MC_CMD_SPI_COMMAND_IN_LEN(_write_bytes) (12 + (_write_bytes)) +#define MC_CMD_SPI_COMMAND_IN_ARGS_OFST 0 +#define MC_CMD_SPI_COMMAND_IN_ARGS_ADDRESS_OFST 0 +#define MC_CMD_SPI_COMMAND_IN_ARGS_READ_BYTES_OFST 4 +#define MC_CMD_SPI_COMMAND_IN_ARGS_CHIP_SELECT_OFST 8 +/* Data to write here */ +#define MC_CMD_SPI_COMMAND_IN_WRITE_BUFFER_OFST 12 +#define MC_CMD_SPI_COMMAND_OUT_LEN(_read_bytes) (_read_bytes) +/* Data read here */ +#define MC_CMD_SPI_COMMAND_OUT_READ_BUFFER_OFST 0 + +/* MC_CMD_I2C_READ_WRITE: (variadic in, variadic out) + * Read/Write to/from the I2C bus. + * + * Locks required: I2C_LOCK + * Return code: 0, ETIME, EINVAL, EACCES (if I2C_LOCK is not held) + */ +#define MC_CMD_I2C_RW 0x23 +#define MC_CMD_I2C_RW_IN_LEN(_write_bytes) (8 + (_write_bytes)) +#define MC_CMD_I2C_RW_IN_ARGS_OFST 0 +#define MC_CMD_I2C_RW_IN_ARGS_ADDR_OFST 0 +#define MC_CMD_I2C_RW_IN_ARGS_READ_BYTES_OFST 4 +/* Data to write here */ +#define MC_CMD_I2C_RW_IN_WRITE_BUFFER_OFSET 8 +#define MC_CMD_I2C_RW_OUT_LEN(_read_bytes) (_read_bytes) +/* Data read here */ +#define MC_CMD_I2C_RW_OUT_READ_BUFFER_OFST 0 + +/* Generic phy capability bitmask */ +#define MC_CMD_PHY_CAP_10HDX_LBN 1 +#define MC_CMD_PHY_CAP_10HDX_WIDTH 1 +#define MC_CMD_PHY_CAP_10FDX_LBN 2 +#define MC_CMD_PHY_CAP_10FDX_WIDTH 1 +#define MC_CMD_PHY_CAP_100HDX_LBN 3 +#define MC_CMD_PHY_CAP_100HDX_WIDTH 1 +#define MC_CMD_PHY_CAP_100FDX_LBN 4 +#define MC_CMD_PHY_CAP_100FDX_WIDTH 1 +#define MC_CMD_PHY_CAP_1000HDX_LBN 5 +#define MC_CMD_PHY_CAP_1000HDX_WIDTH 1 +#define MC_CMD_PHY_CAP_1000FDX_LBN 6 +#define MC_CMD_PHY_CAP_1000FDX_WIDTH 1 +#define MC_CMD_PHY_CAP_10000FDX_LBN 7 +#define MC_CMD_PHY_CAP_10000FDX_WIDTH 1 +#define MC_CMD_PHY_CAP_PAUSE_LBN 8 +#define MC_CMD_PHY_CAP_PAUSE_WIDTH 1 +#define MC_CMD_PHY_CAP_ASYM_LBN 9 +#define MC_CMD_PHY_CAP_ASYM_WIDTH 1 +#define MC_CMD_PHY_CAP_AN_LBN 10 +#define MC_CMD_PHY_CAP_AN_WIDTH 1 + +/* Generic loopback enumeration */ +#define MC_CMD_LOOPBACK_NONE 0 +#define MC_CMD_LOOPBACK_DATA 1 +#define MC_CMD_LOOPBACK_GMAC 2 +#define MC_CMD_LOOPBACK_XGMII 3 +#define MC_CMD_LOOPBACK_XGXS 4 +#define MC_CMD_LOOPBACK_XAUI 5 +#define MC_CMD_LOOPBACK_GMII 6 +#define MC_CMD_LOOPBACK_SGMII 7 +#define MC_CMD_LOOPBACK_XGBR 8 +#define MC_CMD_LOOPBACK_XFI 9 +#define MC_CMD_LOOPBACK_XAUI_FAR 10 +#define MC_CMD_LOOPBACK_GMII_FAR 11 +#define MC_CMD_LOOPBACK_SGMII_FAR 12 +#define MC_CMD_LOOPBACK_XFI_FAR 13 +#define MC_CMD_LOOPBACK_GPHY 14 +#define MC_CMD_LOOPBACK_PHYXS 15 +#define MC_CMD_LOOPBACK_PCS 16 +#define MC_CMD_LOOPBACK_PMAPMD 17 +#define MC_CMD_LOOPBACK_XPORT 18 +#define MC_CMD_LOOPBACK_XGMII_WS 19 +#define MC_CMD_LOOPBACK_XAUI_WS 20 +#define MC_CMD_LOOPBACK_XAUI_WS_FAR 21 +#define MC_CMD_LOOPBACK_XAUI_WS_NEAR 22 +#define MC_CMD_LOOPBACK_GMII_WS 23 +#define MC_CMD_LOOPBACK_XFI_WS 24 +#define MC_CMD_LOOPBACK_XFI_WS_FAR 25 +#define MC_CMD_LOOPBACK_PHYXS_WS 26 + +/* Generic PHY statistics enumeration */ +#define MC_CMD_OUI 0 +#define MC_CMD_PMA_PMD_LINK_UP 1 +#define MC_CMD_PMA_PMD_RX_FAULT 2 +#define MC_CMD_PMA_PMD_TX_FAULT 3 +#define MC_CMD_PMA_PMD_SIGNAL 4 +#define MC_CMD_PMA_PMD_SNR_A 5 +#define MC_CMD_PMA_PMD_SNR_B 6 +#define MC_CMD_PMA_PMD_SNR_C 7 +#define MC_CMD_PMA_PMD_SNR_D 8 +#define MC_CMD_PCS_LINK_UP 9 +#define MC_CMD_PCS_RX_FAULT 10 +#define MC_CMD_PCS_TX_FAULT 11 +#define MC_CMD_PCS_BER 12 +#define MC_CMD_PCS_BLOCK_ERRORS 13 +#define MC_CMD_PHYXS_LINK_UP 14 +#define MC_CMD_PHYXS_RX_FAULT 15 +#define MC_CMD_PHYXS_TX_FAULT 16 +#define MC_CMD_PHYXS_ALIGN 17 +#define MC_CMD_PHYXS_SYNC 18 +#define MC_CMD_AN_LINK_UP 19 +#define MC_CMD_AN_COMPLETE 20 +#define MC_CMD_AN_10GBT_STATUS 21 +#define MC_CMD_CL22_LINK_UP 22 +#define MC_CMD_PHY_NSTATS 23 + +/* MC_CMD_GET_PHY_CFG: + * Report PHY configuration. This guarantees to succeed even if the PHY is in + * a "zombie" state. + * + * Locks required: None + * Return code: 0 + */ +#define MC_CMD_GET_PHY_CFG 0x24 + +#define MC_CMD_GET_PHY_CFG_IN_LEN 0 +#define MC_CMD_GET_PHY_CFG_OUT_LEN 72 + +#define MC_CMD_GET_PHY_CFG_OUT_FLAGS_OFST 0 +#define MC_CMD_GET_PHY_CFG_PRESENT_LBN 0 +#define MC_CMD_GET_PHY_CFG_PRESENT_WIDTH 1 +#define MC_CMD_GET_PHY_CFG_SHORTBIST_LBN 1 +#define MC_CMD_GET_PHY_CFG_SHORTBIST_WIDTH 1 +#define MC_CMD_GET_PHY_CFG_LONGBIST_LBN 2 +#define MC_CMD_GET_PHY_CFG_LONGBIST_WIDTH 1 +#define MC_CMD_GET_PHY_CFG_LOWPOWER_LBN 3 +#define MC_CMD_GET_PHY_CFG_LOWPOWER_WIDTH 1 +#define MC_CMD_GET_PHY_CFG_POWEROFF_LBN 4 +#define MC_CMD_GET_PHY_CFG_POWEROFF_WIDTH 1 +#define MC_CMD_GET_PHY_CFG_TXDIS_LBN 5 +#define MC_CMD_GET_PHY_CFG_TXDIS_WIDTH 1 +#define MC_CMD_GET_PHY_CFG_OUT_TYPE_OFST 4 +/* Bitmask of supported capabilities */ +#define MC_CMD_GET_PHY_CFG_OUT_SUPPORTED_CAP_OFST 8 +#define MC_CMD_GET_PHY_CFG_OUT_CHANNEL_OFST 12 +#define MC_CMD_GET_PHY_CFG_OUT_PRT_OFST 16 +/* PHY statistics bitmap */ +#define MC_CMD_GET_PHY_CFG_OUT_STATS_MASK_OFST 20 +/* PHY type/name string */ +#define MC_CMD_GET_PHY_CFG_OUT_NAME_OFST 24 +#define MC_CMD_GET_PHY_CFG_OUT_NAME_LEN 20 +#define MC_CMD_GET_PHY_CFG_OUT_MEDIA_TYPE_OFST 44 +#define MC_CMD_MEDIA_XAUI 1 +#define MC_CMD_MEDIA_CX4 2 +#define MC_CMD_MEDIA_KX4 3 +#define MC_CMD_MEDIA_XFP 4 +#define MC_CMD_MEDIA_SFP_PLUS 5 +#define MC_CMD_MEDIA_BASE_T 6 +/* MDIO "MMDS" supported */ +#define MC_CMD_GET_PHY_CFG_OUT_MMD_MASK_OFST 48 +/* Native clause 22 */ +#define MC_CMD_MMD_CLAUSE22 0 +#define MC_CMD_MMD_CLAUSE45_PMAPMD 1 +#define MC_CMD_MMD_CLAUSE45_WIS 2 +#define MC_CMD_MMD_CLAUSE45_PCS 3 +#define MC_CMD_MMD_CLAUSE45_PHYXS 4 +#define MC_CMD_MMD_CLAUSE45_DTEXS 5 +#define MC_CMD_MMD_CLAUSE45_TC 6 +#define MC_CMD_MMD_CLAUSE45_AN 7 +/* Clause22 proxied over clause45 by PHY */ +#define MC_CMD_MMD_CLAUSE45_C22EXT 29 +#define MC_CMD_MMD_CLAUSE45_VEND1 30 +#define MC_CMD_MMD_CLAUSE45_VEND2 31 +/* PHY stepping version */ +#define MC_CMD_GET_PHY_CFG_OUT_REVISION_OFST 52 +#define MC_CMD_GET_PHY_CFG_OUT_REVISION_LEN 20 + +/* MC_CMD_START_PHY_BIST: + * Start a BIST test on the PHY. + * + * Locks required: PHY_LOCK if doing a PHY BIST + * Return code: 0, EINVAL, EACCES (if PHY_LOCK is not held) + */ +#define MC_CMD_START_BIST 0x25 +#define MC_CMD_START_BIST_IN_LEN 4 +#define MC_CMD_START_BIST_TYPE_OFST 0 + +/* Run the PHY's short BIST */ +#define MC_CMD_PHY_BIST_SHORT 1 +/* Run the PHY's long BIST */ +#define MC_CMD_PHY_BIST_LONG 2 +/* Run BIST on the currently selected BPX Serdes (XAUI or XFI) */ +#define MC_CMD_BPX_SERDES_BIST 3 + +/* MC_CMD_POLL_PHY_BIST: (variadic output) + * Poll for BIST completion + * + * Returns a single status code, and a binary blob of phy-specific + * bist output. If the driver can't succesfully parse the BIST output, + * it should still respect the Pass/Fail in OUT.RESULT. + * + * Locks required: PHY_LOCK if doing a PHY BIST + * Return code: 0, EACCES (if PHY_LOCK is not held) + */ +#define MC_CMD_POLL_BIST 0x26 +#define MC_CMD_POLL_BIST_IN_LEN 0 +#define MC_CMD_POLL_BIST_OUT_LEN UNKNOWN +#define MC_CMD_POLL_BIST_OUT_RESULT_OFST 0 +#define MC_CMD_POLL_BIST_RUNNING 1 +#define MC_CMD_POLL_BIST_PASSED 2 +#define MC_CMD_POLL_BIST_FAILED 3 +#define MC_CMD_POLL_BIST_TIMEOUT 4 +#define MC_CMD_POLL_BIST_OUT_PRIVATE_OFST 4 + +/* MC_CMD_PHY_SPI: (variadic in, variadic out) + * Read/Write/Erase the PHY SPI device + * + * Locks required: PHY_LOCK + * Return code: 0, ETIME, EINVAL, EACCES (if PHY_LOCK is not held) + */ +#define MC_CMD_PHY_SPI 0x27 +#define MC_CMD_PHY_SPI_IN_LEN(_write_bytes) (12 + (_write_bytes)) +#define MC_CMD_PHY_SPI_IN_ARGS_OFST 0 +#define MC_CMD_PHY_SPI_IN_ARGS_ADDR_OFST 0 +#define MC_CMD_PHY_SPI_IN_ARGS_READ_BYTES_OFST 4 +#define MC_CMD_PHY_SPI_IN_ARGS_ERASE_ALL_OFST 8 +/* Data to write here */ +#define MC_CMD_PHY_SPI_IN_WRITE_BUFFER_OFSET 12 +#define MC_CMD_PHY_SPI_OUT_LEN(_read_bytes) (_read_bytes) +/* Data read here */ +#define MC_CMD_PHY_SPI_OUT_READ_BUFFER_OFST 0 + + +/* MC_CMD_GET_LOOPBACK_MODES: + * Returns a bitmask of loopback modes evailable at each speed. + * + * Locks required: None + * Return code: 0 + */ +#define MC_CMD_GET_LOOPBACK_MODES 0x28 +#define MC_CMD_GET_LOOPBACK_MODES_IN_LEN 0 +#define MC_CMD_GET_LOOPBACK_MODES_OUT_LEN 32 +#define MC_CMD_GET_LOOPBACK_MODES_100M_OFST 0 +#define MC_CMD_GET_LOOPBACK_MODES_1G_OFST 8 +#define MC_CMD_GET_LOOPBACK_MODES_10G_OFST 16 +#define MC_CMD_GET_LOOPBACK_MODES_SUGGESTED_OFST 24 + +/* Flow control enumeration */ +#define MC_CMD_FCNTL_OFF 0 +#define MC_CMD_FCNTL_RESPOND 1 +#define MC_CMD_FCNTL_BIDIR 2 +/* Auto - Use what the link has autonegotiated + * - The driver should modify the advertised capabilities via SET_LINK.CAP + * to control the negotiated flow control mode. + * - Can only be set if the PHY supports PAUSE+ASYM capabilities + * - Never returned by GET_LINK as the value programmed into the MAC + */ +#define MC_CMD_FCNTL_AUTO 3 + +/* Generic mac fault bitmask */ +#define MC_CMD_MAC_FAULT_XGMII_LOCAL_LBN 0 +#define MC_CMD_MAC_FAULT_XGMII_LOCAL_WIDTH 1 +#define MC_CMD_MAC_FAULT_XGMII_REMOTE_LBN 1 +#define MC_CMD_MAC_FAULT_XGMII_REMOTE_WIDTH 1 +#define MC_CMD_MAC_FAULT_SGMII_REMOTE_LBN 2 +#define MC_CMD_MAC_FAULT_SGMII_REMOTE_WIDTH 1 + +/* MC_CMD_GET_LINK: + * Read the unified MAC/PHY link state + * + * Locks required: None + * Return code: 0, ETIME + */ +#define MC_CMD_GET_LINK 0x29 +#define MC_CMD_GET_LINK_IN_LEN 0 +#define MC_CMD_GET_LINK_OUT_LEN 28 +/* near-side and link-partner advertised capabilities */ +#define MC_CMD_GET_LINK_OUT_CAP_OFST 0 +#define MC_CMD_GET_LINK_OUT_LP_CAP_OFST 4 +/* Autonegotiated speed in mbit/s. The link may still be down + * even if this reads non-zero */ +#define MC_CMD_GET_LINK_OUT_LINK_SPEED_OFST 8 +#define MC_CMD_GET_LINK_OUT_LOOPBACK_MODE_OFST 12 +#define MC_CMD_GET_LINK_OUT_FLAGS_OFST 16 +/* Whether we have overall link up */ +#define MC_CMD_GET_LINK_LINK_UP_LBN 0 +#define MC_CMD_GET_LINK_LINK_UP_WIDTH 1 +#define MC_CMD_GET_LINK_FULL_DUPLEX_LBN 1 +#define MC_CMD_GET_LINK_FULL_DUPLEX_WIDTH 1 +/* Whether we have link at the layers provided by the BPX */ +#define MC_CMD_GET_LINK_BPX_LINK_LBN 2 +#define MC_CMD_GET_LINK_BPX_LINK_WIDTH 1 +/* Whether the PHY has external link */ +#define MC_CMD_GET_LINK_PHY_LINK_LBN 3 +#define MC_CMD_GET_LINK_PHY_LINK_WIDTH 1 +#define MC_CMD_GET_LINK_OUT_FCNTL_OFST 20 +#define MC_CMD_GET_LINK_OUT_MAC_FAULT_OFST 24 + +/* MC_CMD_SET_LINK: + * Write the unified MAC/PHY link configuration + * + * A loopback speed of "0" is supported, and means + * (choose any available speed) + * + * Locks required: None + * Return code: 0, EINVAL, ETIME + */ +#define MC_CMD_SET_LINK 0x2a +#define MC_CMD_SET_LINK_IN_LEN 16 +#define MC_CMD_SET_LINK_IN_CAP_OFST 0 +#define MC_CMD_SET_LINK_IN_FLAGS_OFST 4 +#define MC_CMD_SET_LINK_LOWPOWER_LBN 0 +#define MC_CMD_SET_LINK_LOWPOWER_WIDTH 1 +#define MC_CMD_SET_LINK_POWEROFF_LBN 1 +#define MC_CMD_SET_LINK_POWEROFF_WIDTH 1 +#define MC_CMD_SET_LINK_TXDIS_LBN 2 +#define MC_CMD_SET_LINK_TXDIS_WIDTH 1 +#define MC_CMD_SET_LINK_IN_LOOPBACK_MODE_OFST 8 +#define MC_CMD_SET_LINK_IN_LOOPBACK_SPEED_OFST 12 +#define MC_CMD_SET_LINK_OUT_LEN 0 + +/* MC_CMD_SET_ID_LED: + * Set indentification LED state + * + * Locks required: None + * Return code: 0, EINVAL + */ +#define MC_CMD_SET_ID_LED 0x2b +#define MC_CMD_SET_ID_LED_IN_LEN 4 +#define MC_CMD_SET_ID_LED_IN_STATE_OFST 0 +#define MC_CMD_LED_OFF 0 +#define MC_CMD_LED_ON 1 +#define MC_CMD_LED_DEFAULT 2 +#define MC_CMD_SET_ID_LED_OUT_LEN 0 + +/* MC_CMD_SET_MAC: + * Set MAC configuration + * + * The MTU is the MTU programmed directly into the XMAC/GMAC + * (inclusive of EtherII, VLAN, bug16011 padding) + * + * Locks required: None + * Return code: 0, EINVAL + */ +#define MC_CMD_SET_MAC 0x2c +#define MC_CMD_SET_MAC_IN_LEN 24 +#define MC_CMD_SET_MAC_IN_MTU_OFST 0 +#define MC_CMD_SET_MAC_IN_DRAIN_OFST 4 +#define MC_CMD_SET_MAC_IN_ADDR_OFST 8 +#define MC_CMD_SET_MAC_IN_REJECT_OFST 16 +#define MC_CMD_SET_MAC_IN_REJECT_UNCST_LBN 0 +#define MC_CMD_SET_MAC_IN_REJECT_UNCST_WIDTH 1 +#define MC_CMD_SET_MAC_IN_REJECT_BRDCST_LBN 1 +#define MC_CMD_SET_MAC_IN_REJECT_BRDCST_WIDTH 1 +#define MC_CMD_SET_MAC_IN_FCNTL_OFST 20 +#define MC_CMD_SET_MAC_OUT_LEN 0 + +/* MC_CMD_PHY_STATS: + * Get generic PHY statistics + * + * This call returns the statistics for a generic PHY, by direct DMA + * into host memory, in a sparse array (indexed by the enumerate). + * Each value is represented by a 32bit number. + * + * Locks required: None + * Returns: 0, ETIME + * Response methods: shared memory, event + */ +#define MC_CMD_PHY_STATS 0x2d +#define MC_CMD_PHY_STATS_IN_LEN 8 +#define MC_CMD_PHY_STATS_IN_DMA_ADDR_LO_OFST 0 +#define MC_CMD_PHY_STATS_IN_DMA_ADDR_HI_OFST 4 +#define MC_CMD_PHY_STATS_OUT_LEN 0 + +/* Unified MAC statistics enumeration */ +#define MC_CMD_MAC_GENERATION_START 0 +#define MC_CMD_MAC_TX_PKTS 1 +#define MC_CMD_MAC_TX_PAUSE_PKTS 2 +#define MC_CMD_MAC_TX_CONTROL_PKTS 3 +#define MC_CMD_MAC_TX_UNICAST_PKTS 4 +#define MC_CMD_MAC_TX_MULTICAST_PKTS 5 +#define MC_CMD_MAC_TX_BROADCAST_PKTS 6 +#define MC_CMD_MAC_TX_BYTES 7 +#define MC_CMD_MAC_TX_BAD_BYTES 8 +#define MC_CMD_MAC_TX_LT64_PKTS 9 +#define MC_CMD_MAC_TX_64_PKTS 10 +#define MC_CMD_MAC_TX_65_TO_127_PKTS 11 +#define MC_CMD_MAC_TX_128_TO_255_PKTS 12 +#define MC_CMD_MAC_TX_256_TO_511_PKTS 13 +#define MC_CMD_MAC_TX_512_TO_1023_PKTS 14 +#define MC_CMD_MAC_TX_1024_TO_15XX_PKTS 15 +#define MC_CMD_MAC_TX_15XX_TO_JUMBO_PKTS 16 +#define MC_CMD_MAC_TX_GTJUMBO_PKTS 17 +#define MC_CMD_MAC_TX_BAD_FCS_PKTS 18 +#define MC_CMD_MAC_TX_SINGLE_COLLISION_PKTS 19 +#define MC_CMD_MAC_TX_MULTIPLE_COLLISION_PKTS 20 +#define MC_CMD_MAC_TX_EXCESSIVE_COLLISION_PKTS 21 +#define MC_CMD_MAC_TX_LATE_COLLISION_PKTS 22 +#define MC_CMD_MAC_TX_DEFERRED_PKTS 23 +#define MC_CMD_MAC_TX_EXCESSIVE_DEFERRED_PKTS 24 +#define MC_CMD_MAC_TX_NON_TCPUDP_PKTS 25 +#define MC_CMD_MAC_TX_MAC_SRC_ERR_PKTS 26 +#define MC_CMD_MAC_TX_IP_SRC_ERR_PKTS 27 +#define MC_CMD_MAC_RX_PKTS 28 +#define MC_CMD_MAC_RX_PAUSE_PKTS 29 +#define MC_CMD_MAC_RX_GOOD_PKTS 30 +#define MC_CMD_MAC_RX_CONTROL_PKTS 31 +#define MC_CMD_MAC_RX_UNICAST_PKTS 32 +#define MC_CMD_MAC_RX_MULTICAST_PKTS 33 +#define MC_CMD_MAC_RX_BROADCAST_PKTS 34 +#define MC_CMD_MAC_RX_BYTES 35 +#define MC_CMD_MAC_RX_BAD_BYTES 36 +#define MC_CMD_MAC_RX_64_PKTS 37 +#define MC_CMD_MAC_RX_65_TO_127_PKTS 38 +#define MC_CMD_MAC_RX_128_TO_255_PKTS 39 +#define MC_CMD_MAC_RX_256_TO_511_PKTS 40 +#define MC_CMD_MAC_RX_512_TO_1023_PKTS 41 +#define MC_CMD_MAC_RX_1024_TO_15XX_PKTS 42 +#define MC_CMD_MAC_RX_15XX_TO_JUMBO_PKTS 43 +#define MC_CMD_MAC_RX_GTJUMBO_PKTS 44 +#define MC_CMD_MAC_RX_UNDERSIZE_PKTS 45 +#define MC_CMD_MAC_RX_BAD_FCS_PKTS 46 +#define MC_CMD_MAC_RX_OVERFLOW_PKTS 47 +#define MC_CMD_MAC_RX_FALSE_CARRIER_PKTS 48 +#define MC_CMD_MAC_RX_SYMBOL_ERROR_PKTS 49 +#define MC_CMD_MAC_RX_ALIGN_ERROR_PKTS 50 +#define MC_CMD_MAC_RX_LENGTH_ERROR_PKTS 51 +#define MC_CMD_MAC_RX_INTERNAL_ERROR_PKTS 52 +#define MC_CMD_MAC_RX_JABBER_PKTS 53 +#define MC_CMD_MAC_RX_NODESC_DROPS 54 +#define MC_CMD_MAC_RX_LANES01_CHAR_ERR 55 +#define MC_CMD_MAC_RX_LANES23_CHAR_ERR 56 +#define MC_CMD_MAC_RX_LANES01_DISP_ERR 57 +#define MC_CMD_MAC_RX_LANES23_DISP_ERR 58 +#define MC_CMD_MAC_RX_MATCH_FAULT 59 +#define MC_CMD_GMAC_DMABUF_START 64 +#define MC_CMD_GMAC_DMABUF_END 95 +/* Insert new members here. */ +#define MC_CMD_MAC_GENERATION_END 96 +#define MC_CMD_MAC_NSTATS (MC_CMD_MAC_GENERATION_END+1) + +/* MC_CMD_MAC_STATS: + * Get unified GMAC/XMAC statistics + * + * This call returns unified statistics maintained by the MC as it + * switches between the GMAC and XMAC. The MC will write out all + * supported stats. The driver should zero initialise the buffer to + * guarantee consistent results. + * + * Locks required: None + * Returns: 0 + * Response methods: shared memory, event + */ +#define MC_CMD_MAC_STATS 0x2e +#define MC_CMD_MAC_STATS_IN_LEN 16 +#define MC_CMD_MAC_STATS_IN_DMA_ADDR_LO_OFST 0 +#define MC_CMD_MAC_STATS_IN_DMA_ADDR_HI_OFST 4 +#define MC_CMD_MAC_STATS_IN_CMD_OFST 8 +#define MC_CMD_MAC_STATS_CMD_DMA_LBN 0 +#define MC_CMD_MAC_STATS_CMD_DMA_WIDTH 1 +#define MC_CMD_MAC_STATS_CMD_CLEAR_LBN 1 +#define MC_CMD_MAC_STATS_CMD_CLEAR_WIDTH 1 +#define MC_CMD_MAC_STATS_CMD_PERIODIC_CHANGE_LBN 2 +#define MC_CMD_MAC_STATS_CMD_PERIODIC_CHANGE_WIDTH 1 +/* Fields only relevent when PERIODIC_CHANGE is set */ +#define MC_CMD_MAC_STATS_CMD_PERIODIC_ENABLE_LBN 3 +#define MC_CMD_MAC_STATS_CMD_PERIODIC_ENABLE_WIDTH 1 +#define MC_CMD_MAC_STATS_CMD_PERIODIC_CLEAR_LBN 4 +#define MC_CMD_MAC_STATS_CMD_PERIODIC_CLEAR_WIDTH 1 +#define MC_CMD_MAC_STATS_CMD_PERIOD_MS_LBN 16 +#define MC_CMD_MAC_STATS_CMD_PERIOD_MS_WIDTH 16 +#define MC_CMD_MAC_STATS_IN_DMA_LEN_OFST 12 + +#define MC_CMD_MAC_STATS_OUT_LEN 0 + +/* Callisto flags */ +#define MC_CMD_SFT9001_ROBUST_LBN 0 +#define MC_CMD_SFT9001_ROBUST_WIDTH 1 +#define MC_CMD_SFT9001_SHORT_REACH_LBN 1 +#define MC_CMD_SFT9001_SHORT_REACH_WIDTH 1 + +/* MC_CMD_SFT9001_GET: + * Read current callisto specific setting + * + * Locks required: None + * Returns: 0, ETIME + */ +#define MC_CMD_SFT9001_GET 0x30 +#define MC_CMD_SFT9001_GET_IN_LEN 0 +#define MC_CMD_SFT9001_GET_OUT_LEN 4 +#define MC_CMD_SFT9001_GET_OUT_FLAGS_OFST 0 + +/* MC_CMD_SFT9001_SET: + * Write current callisto specific setting + * + * Locks required: None + * Returns: 0, ETIME, EINVAL + */ +#define MC_CMD_SFT9001_SET 0x31 +#define MC_CMD_SFT9001_SET_IN_LEN 4 +#define MC_CMD_SFT9001_SET_IN_FLAGS_OFST 0 +#define MC_CMD_SFT9001_SET_OUT_LEN 0 + + +/* MC_CMD_WOL_FILTER_SET: + * Set a WoL filter + * + * Locks required: None + * Returns: 0, EBUSY, EINVAL, ENOSYS + */ +#define MC_CMD_WOL_FILTER_SET 0x32 +#define MC_CMD_WOL_FILTER_SET_IN_LEN 192 /* 190 rounded up to a word */ +#define MC_CMD_WOL_FILTER_SET_IN_FILTER_MODE_OFST 0 +#define MC_CMD_WOL_FILTER_SET_IN_WOL_TYPE_OFST 4 + +/* There is a union at offset 8, following defines overlap due to + * this */ +#define MC_CMD_WOL_FILTER_SET_IN_DATA_OFST 8 + +#define MC_CMD_WOL_FILTER_SET_IN_MAGIC_MAC_OFST \ + MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + +#define MC_CMD_WOL_FILTER_SET_IN_IPV4_SYN_SRC_IP_OFST \ + MC_CMD_WOL_FILTER_SET_IN_DATA_OFST +#define MC_CMD_WOL_FILTER_SET_IN_IPV4_SYN_DST_IP_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 4) +#define MC_CMD_WOL_FILTER_SET_IN_IPV4_SYN_SRC_PORT_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 8) +#define MC_CMD_WOL_FILTER_SET_IN_IPV4_SYN_DST_PORT_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 10) + +#define MC_CMD_WOL_FILTER_SET_IN_IPV6_SYN_SRC_IP_OFST \ + MC_CMD_WOL_FILTER_SET_IN_DATA_OFST +#define MC_CMD_WOL_FILTER_SET_IN_IPV6_SYN_DST_IP_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 16) +#define MC_CMD_WOL_FILTER_SET_IN_IPV6_SYN_SRC_PORT_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 32) +#define MC_CMD_WOL_FILTER_SET_IN_IPV6_SYN_DST_PORT_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 34) + +#define MC_CMD_WOL_FILTER_SET_IN_BITMAP_MASK_OFST \ + MC_CMD_WOL_FILTER_SET_IN_DATA_OFST +#define MC_CMD_WOL_FILTER_SET_IN_BITMAP_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 48) +#define MC_CMD_WOL_FILTER_SET_IN_BITMAP_LEN_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 176) +#define MC_CMD_WOL_FILTER_SET_IN_BITMAP_LAYER3_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 177) +#define MC_CMD_WOL_FILTER_SET_IN_BITMAP_LAYER4_OFST \ + (MC_CMD_WOL_FILTER_SET_IN_DATA_OFST + 178) + +#define MC_CMD_WOL_FILTER_SET_OUT_LEN 4 +#define MC_CMD_WOL_FILTER_SET_OUT_FILTER_ID_OFST 0 + +/* WOL Filter types enumeration */ +#define MC_CMD_WOL_TYPE_MAGIC 0x0 + /* unused 0x1 */ +#define MC_CMD_WOL_TYPE_WIN_MAGIC 0x2 +#define MC_CMD_WOL_TYPE_IPV4_SYN 0x3 +#define MC_CMD_WOL_TYPE_IPV6_SYN 0x4 +#define MC_CMD_WOL_TYPE_BITMAP 0x5 +#define MC_CMD_WOL_TYPE_MAX 0x6 + +#define MC_CMD_FILTER_MODE_SIMPLE 0x0 +#define MC_CMD_FILTER_MODE_STRUCTURED 0xffffffff + +/* MC_CMD_WOL_FILTER_REMOVE: + * Remove a WoL filter + * + * Locks required: None + * Returns: 0, EINVAL, ENOSYS + */ +#define MC_CMD_WOL_FILTER_REMOVE 0x33 +#define MC_CMD_WOL_FILTER_REMOVE_IN_LEN 4 +#define MC_CMD_WOL_FILTER_REMOVE_IN_FILTER_ID_OFST 0 +#define MC_CMD_WOL_FILTER_REMOVE_OUT_LEN 0 + + +/* MC_CMD_WOL_FILTER_RESET: + * Reset (i.e. remove all) WoL filters + * + * Locks required: None + * Returns: 0, ENOSYS + */ +#define MC_CMD_WOL_FILTER_RESET 0x34 +#define MC_CMD_WOL_FILTER_RESET_IN_LEN 0 +#define MC_CMD_WOL_FILTER_RESET_OUT_LEN 0 + +/* MC_CMD_SET_MCAST_HASH: + * Set the MCASH hash value without otherwise + * reconfiguring the MAC + */ +#define MC_CMD_SET_MCAST_HASH 0x35 +#define MC_CMD_SET_MCAST_HASH_IN_LEN 32 +#define MC_CMD_SET_MCAST_HASH_IN_HASH0_OFST 0 +#define MC_CMD_SET_MCAST_HASH_IN_HASH1_OFST 16 +#define MC_CMD_SET_MCAST_HASH_OUT_LEN 0 + +/* MC_CMD_NVRAM_TYPES: + * Return bitfield indicating available types of virtual NVRAM partitions + * + * Locks required: none + * Returns: 0 + */ +#define MC_CMD_NVRAM_TYPES 0x36 +#define MC_CMD_NVRAM_TYPES_IN_LEN 0 +#define MC_CMD_NVRAM_TYPES_OUT_LEN 4 +#define MC_CMD_NVRAM_TYPES_OUT_TYPES_OFST 0 + +/* Supported NVRAM types */ +#define MC_CMD_NVRAM_TYPE_DISABLED_CALLISTO 0 +#define MC_CMD_NVRAM_TYPE_MC_FW 1 +#define MC_CMD_NVRAM_TYPE_MC_FW_BACKUP 2 +#define MC_CMD_NVRAM_TYPE_STATIC_CFG_PORT0 3 +#define MC_CMD_NVRAM_TYPE_STATIC_CFG_PORT1 4 +#define MC_CMD_NVRAM_TYPE_DYNAMIC_CFG_PORT0 5 +#define MC_CMD_NVRAM_TYPE_DYNAMIC_CFG_PORT1 6 +#define MC_CMD_NVRAM_TYPE_EXP_ROM 7 +#define MC_CMD_NVRAM_TYPE_EXP_ROM_CFG_PORT0 8 +#define MC_CMD_NVRAM_TYPE_EXP_ROM_CFG_PORT1 9 +#define MC_CMD_NVRAM_TYPE_PHY_PORT0 10 +#define MC_CMD_NVRAM_TYPE_PHY_PORT1 11 +#define MC_CMD_NVRAM_TYPE_LOG 12 + +/* MC_CMD_NVRAM_INFO: + * Read info about a virtual NVRAM partition + * + * Locks required: none + * Returns: 0, EINVAL (bad type) + */ +#define MC_CMD_NVRAM_INFO 0x37 +#define MC_CMD_NVRAM_INFO_IN_LEN 4 +#define MC_CMD_NVRAM_INFO_IN_TYPE_OFST 0 +#define MC_CMD_NVRAM_INFO_OUT_LEN 24 +#define MC_CMD_NVRAM_INFO_OUT_TYPE_OFST 0 +#define MC_CMD_NVRAM_INFO_OUT_SIZE_OFST 4 +#define MC_CMD_NVRAM_INFO_OUT_ERASESIZE_OFST 8 +#define MC_CMD_NVRAM_INFO_OUT_FLAGS_OFST 12 +#define MC_CMD_NVRAM_PROTECTED_LBN 0 +#define MC_CMD_NVRAM_PROTECTED_WIDTH 1 +#define MC_CMD_NVRAM_INFO_OUT_PHYSDEV_OFST 16 +#define MC_CMD_NVRAM_INFO_OUT_PHYSADDR_OFST 20 + +/* MC_CMD_NVRAM_UPDATE_START: + * Start a group of update operations on a virtual NVRAM partition + * + * Locks required: PHY_LOCK if type==*PHY* + * Returns: 0, EINVAL (bad type), EACCES (if PHY_LOCK required and not held) + */ +#define MC_CMD_NVRAM_UPDATE_START 0x38 +#define MC_CMD_NVRAM_UPDATE_START_IN_LEN 4 +#define MC_CMD_NVRAM_UPDATE_START_IN_TYPE_OFST 0 +#define MC_CMD_NVRAM_UPDATE_START_OUT_LEN 0 + +/* MC_CMD_NVRAM_READ: + * Read data from a virtual NVRAM partition + * + * Locks required: PHY_LOCK if type==*PHY* + * Returns: 0, EINVAL (bad type/offset/length), EACCES (if PHY_LOCK required and not held) + */ +#define MC_CMD_NVRAM_READ 0x39 +#define MC_CMD_NVRAM_READ_IN_LEN 12 +#define MC_CMD_NVRAM_READ_IN_TYPE_OFST 0 +#define MC_CMD_NVRAM_READ_IN_OFFSET_OFST 4 +#define MC_CMD_NVRAM_READ_IN_LENGTH_OFST 8 +#define MC_CMD_NVRAM_READ_OUT_LEN(_read_bytes) (_read_bytes) +#define MC_CMD_NVRAM_READ_OUT_READ_BUFFER_OFST 0 + +/* MC_CMD_NVRAM_WRITE: + * Write data to a virtual NVRAM partition + * + * Locks required: PHY_LOCK if type==*PHY* + * Returns: 0, EINVAL (bad type/offset/length), EACCES (if PHY_LOCK required and not held) + */ +#define MC_CMD_NVRAM_WRITE 0x3a +#define MC_CMD_NVRAM_WRITE_IN_TYPE_OFST 0 +#define MC_CMD_NVRAM_WRITE_IN_OFFSET_OFST 4 +#define MC_CMD_NVRAM_WRITE_IN_LENGTH_OFST 8 +#define MC_CMD_NVRAM_WRITE_IN_WRITE_BUFFER_OFST 12 +#define MC_CMD_NVRAM_WRITE_IN_LEN(_write_bytes) (12 + _write_bytes) +#define MC_CMD_NVRAM_WRITE_OUT_LEN 0 + +/* MC_CMD_NVRAM_ERASE: + * Erase sector(s) from a virtual NVRAM partition + * + * Locks required: PHY_LOCK if type==*PHY* + * Returns: 0, EINVAL (bad type/offset/length), EACCES (if PHY_LOCK required and not held) + */ +#define MC_CMD_NVRAM_ERASE 0x3b +#define MC_CMD_NVRAM_ERASE_IN_LEN 12 +#define MC_CMD_NVRAM_ERASE_IN_TYPE_OFST 0 +#define MC_CMD_NVRAM_ERASE_IN_OFFSET_OFST 4 +#define MC_CMD_NVRAM_ERASE_IN_LENGTH_OFST 8 +#define MC_CMD_NVRAM_ERASE_OUT_LEN 0 + +/* MC_CMD_NVRAM_UPDATE_FINISH: + * Finish a group of update operations on a virtual NVRAM partition + * + * Locks required: PHY_LOCK if type==*PHY* + * Returns: 0, EINVAL (bad type/offset/length), EACCES (if PHY_LOCK required and not held) + */ +#define MC_CMD_NVRAM_UPDATE_FINISH 0x3c +#define MC_CMD_NVRAM_UPDATE_FINISH_IN_LEN 4 +#define MC_CMD_NVRAM_UPDATE_FINISH_IN_TYPE_OFST 0 +#define MC_CMD_NVRAM_UPDATE_FINISH_OUT_LEN 0 + +/* MC_CMD_REBOOT: + * Reboot the MC. The AFTER_ASSERTION flag is intended to be used + * when the driver notices an assertion failure, to allow two ports to + * both recover (semi-)gracefully. + * + * Locks required: NONE + * Returns: Nothing. You get back a response with ERR=1, DATALEN=0 + */ +#define MC_CMD_REBOOT 0x3d +#define MC_CMD_REBOOT_IN_LEN 4 +#define MC_CMD_REBOOT_IN_FLAGS_OFST 0 +#define MC_CMD_REBOOT_FLAGS_AFTER_ASSERTION 1 +#define MC_CMD_REBOOT_OUT_LEN 0 + +/* MC_CMD_SCHEDINFO: + * Request scheduler info. from the MC. + * + * Locks required: NONE + * Returns: An array of (timeslice,maximum overrun), one for each thread, + * in ascending order of thread address.s + */ +#define MC_CMD_SCHEDINFO 0x3e +#define MC_CMD_SCHEDINFO_IN_LEN 0 + + +/* MC_CMD_SET_REBOOT_MODE: (debug) + * Set the mode for the next MC reboot. + * + * Locks required: NONE + * + * Sets the reboot mode to the specified value. Returns the old mode. + */ +#define MC_CMD_REBOOT_MODE 0x3f +#define MC_CMD_REBOOT_MODE_IN_LEN 4 +#define MC_CMD_REBOOT_MODE_IN_VALUE_OFST 0 +#define MC_CMD_REBOOT_MODE_OUT_LEN 4 +#define MC_CMD_REBOOT_MODE_OUT_VALUE_OFST 0 +#define MC_CMD_REBOOT_MODE_NORMAL 0 +#define MC_CMD_REBOOT_MODE_SNAPPER 3 + +/* MC_CMD_DEBUG_LOG: + * Null request/response command (debug) + * - sequence number is always zero + * - only supported on the UART interface + * (the same set of bytes is delivered as an + * event over PCI) + */ +#define MC_CMD_DEBUG_LOG 0x40 +#define MC_CMD_DEBUG_LOG_IN_LEN 0 +#define MC_CMD_DEBUG_LOG_OUT_LEN 0 + +/* Generic sensor enumeration. Note that a dual port NIC + * will EITHER expose PHY_COMMON_TEMP OR PHY0_TEMP and + * PHY1_TEMP depending on whether there is a single sensor + * in the vicinity of the two port, or one per port. + */ +#define MC_CMD_SENSOR_CONTROLLER_TEMP 0 /* degC */ +#define MC_CMD_SENSOR_PHY_COMMON_TEMP 1 /* degC */ +#define MC_CMD_SENSOR_CONTROLLER_COOLING 2 /* bool */ +#define MC_CMD_SENSOR_PHY0_TEMP 3 /* degC */ +#define MC_CMD_SENSOR_PHY0_COOLING 4 /* bool */ +#define MC_CMD_SENSOR_PHY1_TEMP 5 /* degC */ +#define MC_CMD_SENSOR_PHY1_COOLING 6 /* bool */ +#define MC_CMD_SENSOR_IN_1V0 7 /* mV */ +#define MC_CMD_SENSOR_IN_1V2 8 /* mV */ +#define MC_CMD_SENSOR_IN_1V8 9 /* mV */ +#define MC_CMD_SENSOR_IN_2V5 10 /* mV */ +#define MC_CMD_SENSOR_IN_3V3 11 /* mV */ +#define MC_CMD_SENSOR_IN_12V0 12 /* mV */ + + +/* Sensor state */ +#define MC_CMD_SENSOR_STATE_OK 0 +#define MC_CMD_SENSOR_STATE_WARNING 1 +#define MC_CMD_SENSOR_STATE_FATAL 2 +#define MC_CMD_SENSOR_STATE_BROKEN 3 + +/* MC_CMD_SENSOR_INFO: + * Returns information about every available sensor. + * + * Each sensor has a single (16bit) value, and a corresponding state. + * The mapping between value and sensor is nominally determined by the + * MC, but in practise is implemented as zero (BROKEN), one (TEMPERATURE), + * or two (VOLTAGE) ranges per sensor per state. + * + * This call returns a mask (32bit) of the sensors that are supported + * by this platform, then an array (indexed by MC_CMD_SENSOR) of byte + * offsets to the per-sensor arrays. Each sensor array has four 16bit + * numbers, min1, max1, min2, max2. + * + * Locks required: None + * Returns: 0 + */ +#define MC_CMD_SENSOR_INFO 0x41 +#define MC_CMD_SENSOR_INFO_IN_LEN 0 +#define MC_CMD_SENSOR_INFO_OUT_MASK_OFST 0 +#define MC_CMD_SENSOR_INFO_OUT_OFFSET_OFST(_x) \ + (4 + (_x)) +#define MC_CMD_SENSOR_INFO_OUT_MIN1_OFST(_ofst) \ + ((_ofst) + 0) +#define MC_CMD_SENSOR_INFO_OUT_MAX1_OFST(_ofst) \ + ((_ofst) + 2) +#define MC_CMD_SENSOR_INFO_OUT_MIN2_OFST(_ofst) \ + ((_ofst) + 4) +#define MC_CMD_SENSOR_INFO_OUT_MAX2_OFST(_ofst) \ + ((_ofst) + 6) + +/* MC_CMD_READ_SENSORS + * Returns the current (value, state) for each sensor + * + * Returns the current (value, state) [each 16bit] of each sensor supported by + * this board, by DMA'ing a sparse array (indexed by the sensor type) into host + * memory. + * + * The MC will send a SENSOREVT event every time any sensor changes state. The + * driver is responsible for ensuring that it doesn't miss any events. The board + * will function normally if all sensors are in STATE_OK or state_WARNING. + * Otherwise the board should not be expected to function. + */ +#define MC_CMD_READ_SENSORS 0x42 +#define MC_CMD_READ_SENSORS_IN_LEN 8 +#define MC_CMD_READ_SENSORS_IN_DMA_ADDR_LO_OFST 0 +#define MC_CMD_READ_SENSORS_IN_DMA_ADDR_HI_OFST 4 +#define MC_CMD_READ_SENSORS_OUT_LEN 0 + + +/* MC_CMD_GET_PHY_STATE: + * Report current state of PHY. A "zombie" PHY is a PHY that has failed to + * boot (e.g. due to missing or corrupted firmware). + * + * Locks required: None + * Return code: 0 + */ +#define MC_CMD_GET_PHY_STATE 0x43 + +#define MC_CMD_GET_PHY_STATE_IN_LEN 0 +#define MC_CMD_GET_PHY_STATE_OUT_LEN 4 +#define MC_CMD_GET_PHY_STATE_STATE_OFST 0 +/* PHY state enumeration: */ +#define MC_CMD_PHY_STATE_OK 1 +#define MC_CMD_PHY_STATE_ZOMBIE 2 + + +/* 802.1Qbb control. 8 Tx queues that map to priorities 0 - 7. Use all 1s to + * disable 802.Qbb for a given priority. */ +#define MC_CMD_SETUP_8021QBB 0x44 +#define MC_CMD_SETUP_8021QBB_IN_LEN 32 +#define MC_CMD_SETUP_8021QBB_OUT_LEN 0 +#define MC_CMD_SETUP_8021QBB_IN_TXQS_OFFST 0 + + +/* MC_CMD_WOL_FILTER_GET: + * Retrieve ID of any WoL filters + * + * Locks required: None + * Returns: 0, ENOSYS + */ +#define MC_CMD_WOL_FILTER_GET 0x45 +#define MC_CMD_WOL_FILTER_GET_IN_LEN 0 +#define MC_CMD_WOL_FILTER_GET_OUT_LEN 4 +#define MC_CMD_WOL_FILTER_GET_OUT_FILTER_ID_OFST 0 + + +/* MC_CMD_ADD_LIGHTSOUT_OFFLOAD: + * Offload a protocol to NIC for lights-out state + * + * Locks required: None + * Returns: 0, ENOSYS + */ +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD 0x46 + +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_LEN 16 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_PROTOCOL_OFST 0 + +/* There is a union at offset 4, following defines overlap due to + * this */ +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_DATA_OFST 4 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_ARPMAC_OFST 4 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_ARPIP_OFST 10 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_NSMAC_OFST 4 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_NSSNIPV6_OFST 10 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_IN_NSIPV6_OFST 26 + +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_OUT_LEN 4 +#define MC_CMD_ADD_LIGHTSOUT_OFFLOAD_OUT_FILTER_ID_OFST 0 + + +/* MC_CMD_REMOVE_LIGHTSOUT_PROTOCOL_OFFLOAD: + * Offload a protocol to NIC for lights-out state + * + * Locks required: None + * Returns: 0, ENOSYS + */ +#define MC_CMD_REMOVE_LIGHTSOUT_OFFLOAD 0x47 +#define MC_CMD_REMOVE_LIGHTSOUT_OFFLOAD_IN_LEN 8 +#define MC_CMD_REMOVE_LIGHTSOUT_OFFLOAD_OUT_LEN 0 + +#define MC_CMD_REMOVE_LIGHTSOUT_OFFLOAD_IN_PROTOCOL_OFST 0 +#define MC_CMD_REMOVE_LIGHTSOUT_OFFLOAD_IN_FILTER_ID_OFST 4 + +/* Lights-out offload protocols enumeration */ +#define MC_CMD_LIGHTSOUT_OFFLOAD_PROTOCOL_ARP 0x1 +#define MC_CMD_LIGHTSOUT_OFFLOAD_PROTOCOL_NS 0x2 + + +/* MC_CMD_MAC_RESET_RESTORE: + * Restore MAC after block reset + * + * Locks required: None + * Returns: 0 + */ + +#define MC_CMD_MAC_RESET_RESTORE 0x48 +#define MC_CMD_MAC_RESET_RESTORE_IN_LEN 0 +#define MC_CMD_MAC_RESET_RESTORE_OUT_LEN 0 + +#endif /* MCDI_PCOL_H */ --- linux-2.6.32.orig/drivers/net/sfc/io.h +++ linux-2.6.32/drivers/net/sfc/io.h @@ -0,0 +1,256 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2005-2006 Fen Systems Ltd. + * Copyright 2006-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#ifndef EFX_IO_H +#define EFX_IO_H + +#include +#include + +/************************************************************************** + * + * NIC register I/O + * + ************************************************************************** + * + * Notes on locking strategy: + * + * Most NIC registers require 16-byte (or 8-byte, for SRAM) atomic writes + * which necessitates locking. + * Under normal operation few writes to NIC registers are made and these + * registers (EVQ_RPTR_REG, RX_DESC_UPD_REG and TX_DESC_UPD_REG) are special + * cased to allow 4-byte (hence lockless) accesses. + * + * It *is* safe to write to these 4-byte registers in the middle of an + * access to an 8-byte or 16-byte register. We therefore use a + * spinlock to protect accesses to the larger registers, but no locks + * for the 4-byte registers. + * + * A write barrier is needed to ensure that DW3 is written after DW0/1/2 + * due to the way the 16byte registers are "collected" in the BIU. + * + * We also lock when carrying out reads, to ensure consistency of the + * data (made possible since the BIU reads all 128 bits into a cache). + * Reads are very rare, so this isn't a significant performance + * impact. (Most data transferred from NIC to host is DMAed directly + * into host memory). + * + * I/O BAR access uses locks for both reads and writes (but is only provided + * for testing purposes). + */ + +#if BITS_PER_LONG == 64 +#define EFX_USE_QWORD_IO 1 +#endif + +#ifdef EFX_USE_QWORD_IO +static inline void _efx_writeq(struct efx_nic *efx, __le64 value, + unsigned int reg) +{ + __raw_writeq((__force u64)value, efx->membase + reg); +} +static inline __le64 _efx_readq(struct efx_nic *efx, unsigned int reg) +{ + return (__force __le64)__raw_readq(efx->membase + reg); +} +#endif + +static inline void _efx_writed(struct efx_nic *efx, __le32 value, + unsigned int reg) +{ + __raw_writel((__force u32)value, efx->membase + reg); +} +static inline __le32 _efx_readd(struct efx_nic *efx, unsigned int reg) +{ + return (__force __le32)__raw_readl(efx->membase + reg); +} + +/* Writes to a normal 16-byte Efx register, locking as appropriate. */ +static inline void efx_writeo(struct efx_nic *efx, efx_oword_t *value, + unsigned int reg) +{ + unsigned long flags __attribute__ ((unused)); + + EFX_REGDUMP(efx, "writing register %x with " EFX_OWORD_FMT "\n", reg, + EFX_OWORD_VAL(*value)); + + spin_lock_irqsave(&efx->biu_lock, flags); +#ifdef EFX_USE_QWORD_IO + _efx_writeq(efx, value->u64[0], reg + 0); + wmb(); + _efx_writeq(efx, value->u64[1], reg + 8); +#else + _efx_writed(efx, value->u32[0], reg + 0); + _efx_writed(efx, value->u32[1], reg + 4); + _efx_writed(efx, value->u32[2], reg + 8); + wmb(); + _efx_writed(efx, value->u32[3], reg + 12); +#endif + mmiowb(); + spin_unlock_irqrestore(&efx->biu_lock, flags); +} + +/* Write an 8-byte NIC SRAM entry through the supplied mapping, + * locking as appropriate. */ +static inline void efx_sram_writeq(struct efx_nic *efx, void __iomem *membase, + efx_qword_t *value, unsigned int index) +{ + unsigned int addr = index * sizeof(*value); + unsigned long flags __attribute__ ((unused)); + + EFX_REGDUMP(efx, "writing SRAM address %x with " EFX_QWORD_FMT "\n", + addr, EFX_QWORD_VAL(*value)); + + spin_lock_irqsave(&efx->biu_lock, flags); +#ifdef EFX_USE_QWORD_IO + __raw_writeq((__force u64)value->u64[0], membase + addr); +#else + __raw_writel((__force u32)value->u32[0], membase + addr); + wmb(); + __raw_writel((__force u32)value->u32[1], membase + addr + 4); +#endif + mmiowb(); + spin_unlock_irqrestore(&efx->biu_lock, flags); +} + +/* Write dword to NIC register that allows partial writes + * + * Some registers (EVQ_RPTR_REG, RX_DESC_UPD_REG and + * TX_DESC_UPD_REG) can be written to as a single dword. This allows + * for lockless writes. + */ +static inline void efx_writed(struct efx_nic *efx, efx_dword_t *value, + unsigned int reg) +{ + EFX_REGDUMP(efx, "writing partial register %x with "EFX_DWORD_FMT"\n", + reg, EFX_DWORD_VAL(*value)); + + /* No lock required */ + _efx_writed(efx, value->u32[0], reg); +} + +/* Read from a NIC register + * + * This reads an entire 16-byte register in one go, locking as + * appropriate. It is essential to read the first dword first, as this + * prompts the NIC to load the current value into the shadow register. + */ +static inline void efx_reado(struct efx_nic *efx, efx_oword_t *value, + unsigned int reg) +{ + unsigned long flags __attribute__ ((unused)); + + spin_lock_irqsave(&efx->biu_lock, flags); + value->u32[0] = _efx_readd(efx, reg + 0); + rmb(); + value->u32[1] = _efx_readd(efx, reg + 4); + value->u32[2] = _efx_readd(efx, reg + 8); + value->u32[3] = _efx_readd(efx, reg + 12); + spin_unlock_irqrestore(&efx->biu_lock, flags); + + EFX_REGDUMP(efx, "read from register %x, got " EFX_OWORD_FMT "\n", reg, + EFX_OWORD_VAL(*value)); +} + +/* Read an 8-byte SRAM entry through supplied mapping, + * locking as appropriate. */ +static inline void efx_sram_readq(struct efx_nic *efx, void __iomem *membase, + efx_qword_t *value, unsigned int index) +{ + unsigned int addr = index * sizeof(*value); + unsigned long flags __attribute__ ((unused)); + + spin_lock_irqsave(&efx->biu_lock, flags); +#ifdef EFX_USE_QWORD_IO + value->u64[0] = (__force __le64)__raw_readq(membase + addr); +#else + value->u32[0] = (__force __le32)__raw_readl(membase + addr); + rmb(); + value->u32[1] = (__force __le32)__raw_readl(membase + addr + 4); +#endif + spin_unlock_irqrestore(&efx->biu_lock, flags); + + EFX_REGDUMP(efx, "read from SRAM address %x, got "EFX_QWORD_FMT"\n", + addr, EFX_QWORD_VAL(*value)); +} + +/* Read dword from register that allows partial writes (sic) */ +static inline void efx_readd(struct efx_nic *efx, efx_dword_t *value, + unsigned int reg) +{ + value->u32[0] = _efx_readd(efx, reg); + EFX_REGDUMP(efx, "read from register %x, got "EFX_DWORD_FMT"\n", + reg, EFX_DWORD_VAL(*value)); +} + +/* Write to a register forming part of a table */ +static inline void efx_writeo_table(struct efx_nic *efx, efx_oword_t *value, + unsigned int reg, unsigned int index) +{ + efx_writeo(efx, value, reg + index * sizeof(efx_oword_t)); +} + +/* Read to a register forming part of a table */ +static inline void efx_reado_table(struct efx_nic *efx, efx_oword_t *value, + unsigned int reg, unsigned int index) +{ + efx_reado(efx, value, reg + index * sizeof(efx_oword_t)); +} + +/* Write to a dword register forming part of a table */ +static inline void efx_writed_table(struct efx_nic *efx, efx_dword_t *value, + unsigned int reg, unsigned int index) +{ + efx_writed(efx, value, reg + index * sizeof(efx_oword_t)); +} + +/* Page-mapped register block size */ +#define EFX_PAGE_BLOCK_SIZE 0x2000 + +/* Calculate offset to page-mapped register block */ +#define EFX_PAGED_REG(page, reg) \ + ((page) * EFX_PAGE_BLOCK_SIZE + (reg)) + +/* As for efx_writeo(), but for a page-mapped register. */ +static inline void efx_writeo_page(struct efx_nic *efx, efx_oword_t *value, + unsigned int reg, unsigned int page) +{ + efx_writeo(efx, value, EFX_PAGED_REG(page, reg)); +} + +/* As for efx_writed(), but for a page-mapped register. */ +static inline void efx_writed_page(struct efx_nic *efx, efx_dword_t *value, + unsigned int reg, unsigned int page) +{ + efx_writed(efx, value, EFX_PAGED_REG(page, reg)); +} + +/* Write dword to page-mapped register with an extra lock. + * + * As for efx_writed_page(), but for a register that suffers from + * SFC bug 3181. Take out a lock so the BIU collector cannot be + * confused. */ +static inline void efx_writed_page_locked(struct efx_nic *efx, + efx_dword_t *value, + unsigned int reg, + unsigned int page) +{ + unsigned long flags __attribute__ ((unused)); + + if (page == 0) { + spin_lock_irqsave(&efx->biu_lock, flags); + efx_writed(efx, value, EFX_PAGED_REG(page, reg)); + spin_unlock_irqrestore(&efx->biu_lock, flags); + } else { + efx_writed(efx, value, EFX_PAGED_REG(page, reg)); + } +} + +#endif /* EFX_IO_H */ --- linux-2.6.32.orig/drivers/net/sfc/mtd.c +++ linux-2.6.32/drivers/net/sfc/mtd.c @@ -1,36 +1,79 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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, incorporated herein by reference. */ +#include #include #include #include +#include #define EFX_DRIVER_NAME "sfc_mtd" #include "net_driver.h" #include "spi.h" #include "efx.h" +#include "nic.h" +#include "mcdi.h" +#include "mcdi_pcol.h" #define EFX_SPI_VERIFY_BUF_LEN 16 -struct efx_mtd { - const struct efx_spi_device *spi; +struct efx_mtd_partition { struct mtd_info mtd; + union { + struct { + bool updating; + u8 nvram_type; + u16 fw_subtype; + } mcdi; + size_t offset; + }; + const char *type_name; char name[IFNAMSIZ + 20]; }; +struct efx_mtd_ops { + int (*read)(struct mtd_info *mtd, loff_t start, size_t len, + size_t *retlen, u8 *buffer); + int (*erase)(struct mtd_info *mtd, loff_t start, size_t len); + int (*write)(struct mtd_info *mtd, loff_t start, size_t len, + size_t *retlen, const u8 *buffer); + int (*sync)(struct mtd_info *mtd); +}; + +struct efx_mtd { + struct list_head node; + struct efx_nic *efx; + const struct efx_spi_device *spi; + const char *name; + const struct efx_mtd_ops *ops; + size_t n_parts; + struct efx_mtd_partition part[0]; +}; + +#define efx_for_each_partition(part, efx_mtd) \ + for ((part) = &(efx_mtd)->part[0]; \ + (part) != &(efx_mtd)->part[(efx_mtd)->n_parts]; \ + (part)++) + +#define to_efx_mtd_partition(mtd) \ + container_of(mtd, struct efx_mtd_partition, mtd) + +static int falcon_mtd_probe(struct efx_nic *efx); +static int siena_mtd_probe(struct efx_nic *efx); + /* SPI utilities */ static int efx_spi_slow_wait(struct efx_mtd *efx_mtd, bool uninterruptible) { const struct efx_spi_device *spi = efx_mtd->spi; - struct efx_nic *efx = spi->efx; + struct efx_nic *efx = efx_mtd->efx; u8 status; int rc, i; @@ -39,7 +82,7 @@ __set_current_state(uninterruptible ? TASK_UNINTERRUPTIBLE : TASK_INTERRUPTIBLE); schedule_timeout(HZ / 10); - rc = falcon_spi_cmd(spi, SPI_RDSR, -1, NULL, + rc = falcon_spi_cmd(efx, spi, SPI_RDSR, -1, NULL, &status, sizeof(status)); if (rc) return rc; @@ -52,32 +95,35 @@ return -ETIMEDOUT; } -static int efx_spi_unlock(const struct efx_spi_device *spi) +static int +efx_spi_unlock(struct efx_nic *efx, const struct efx_spi_device *spi) { const u8 unlock_mask = (SPI_STATUS_BP2 | SPI_STATUS_BP1 | SPI_STATUS_BP0); u8 status; int rc; - rc = falcon_spi_cmd(spi, SPI_RDSR, -1, NULL, &status, sizeof(status)); + rc = falcon_spi_cmd(efx, spi, SPI_RDSR, -1, NULL, + &status, sizeof(status)); if (rc) return rc; if (!(status & unlock_mask)) return 0; /* already unlocked */ - rc = falcon_spi_cmd(spi, SPI_WREN, -1, NULL, NULL, 0); + rc = falcon_spi_cmd(efx, spi, SPI_WREN, -1, NULL, NULL, 0); if (rc) return rc; - rc = falcon_spi_cmd(spi, SPI_SST_EWSR, -1, NULL, NULL, 0); + rc = falcon_spi_cmd(efx, spi, SPI_SST_EWSR, -1, NULL, NULL, 0); if (rc) return rc; status &= ~unlock_mask; - rc = falcon_spi_cmd(spi, SPI_WRSR, -1, &status, NULL, sizeof(status)); + rc = falcon_spi_cmd(efx, spi, SPI_WRSR, -1, &status, + NULL, sizeof(status)); if (rc) return rc; - rc = falcon_spi_wait_write(spi); + rc = falcon_spi_wait_write(efx, spi); if (rc) return rc; @@ -87,6 +133,7 @@ static int efx_spi_erase(struct efx_mtd *efx_mtd, loff_t start, size_t len) { const struct efx_spi_device *spi = efx_mtd->spi; + struct efx_nic *efx = efx_mtd->efx; unsigned pos, block_len; u8 empty[EFX_SPI_VERIFY_BUF_LEN]; u8 buffer[EFX_SPI_VERIFY_BUF_LEN]; @@ -98,13 +145,14 @@ if (spi->erase_command == 0) return -EOPNOTSUPP; - rc = efx_spi_unlock(spi); + rc = efx_spi_unlock(efx, spi); if (rc) return rc; - rc = falcon_spi_cmd(spi, SPI_WREN, -1, NULL, NULL, 0); + rc = falcon_spi_cmd(efx, spi, SPI_WREN, -1, NULL, NULL, 0); if (rc) return rc; - rc = falcon_spi_cmd(spi, spi->erase_command, start, NULL, NULL, 0); + rc = falcon_spi_cmd(efx, spi, spi->erase_command, start, NULL, + NULL, 0); if (rc) return rc; rc = efx_spi_slow_wait(efx_mtd, false); @@ -113,7 +161,8 @@ memset(empty, 0xff, sizeof(empty)); for (pos = 0; pos < len; pos += block_len) { block_len = min(len - pos, sizeof(buffer)); - rc = falcon_spi_read(spi, start + pos, block_len, NULL, buffer); + rc = falcon_spi_read(efx, spi, start + pos, block_len, + NULL, buffer); if (rc) return rc; if (memcmp(empty, buffer, block_len)) @@ -130,140 +179,473 @@ /* MTD interface */ -static int efx_mtd_read(struct mtd_info *mtd, loff_t start, size_t len, - size_t *retlen, u8 *buffer) +static int efx_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) +{ + struct efx_mtd *efx_mtd = mtd->priv; + int rc; + + rc = efx_mtd->ops->erase(mtd, erase->addr, erase->len); + if (rc == 0) { + erase->state = MTD_ERASE_DONE; + } else { + erase->state = MTD_ERASE_FAILED; + erase->fail_addr = 0xffffffff; + } + mtd_erase_callback(erase); + return rc; +} + +static void efx_mtd_sync(struct mtd_info *mtd) { struct efx_mtd *efx_mtd = mtd->priv; + struct efx_nic *efx = efx_mtd->efx; + int rc; + + rc = efx_mtd->ops->sync(mtd); + if (rc) + EFX_ERR(efx, "%s sync failed (%d)\n", efx_mtd->name, rc); +} + +static void efx_mtd_remove_partition(struct efx_mtd_partition *part) +{ + int rc; + + for (;;) { + rc = del_mtd_device(&part->mtd); + if (rc != -EBUSY) + break; + ssleep(1); + } + WARN_ON(rc); +} + +static void efx_mtd_remove_device(struct efx_mtd *efx_mtd) +{ + struct efx_mtd_partition *part; + + efx_for_each_partition(part, efx_mtd) + efx_mtd_remove_partition(part); + list_del(&efx_mtd->node); + kfree(efx_mtd); +} + +static void efx_mtd_rename_device(struct efx_mtd *efx_mtd) +{ + struct efx_mtd_partition *part; + + efx_for_each_partition(part, efx_mtd) + if (efx_nic_rev(efx_mtd->efx) >= EFX_REV_SIENA_A0) + snprintf(part->name, sizeof(part->name), + "%s %s:%02x", efx_mtd->efx->name, + part->type_name, part->mcdi.fw_subtype); + else + snprintf(part->name, sizeof(part->name), + "%s %s", efx_mtd->efx->name, + part->type_name); +} + +static int efx_mtd_probe_device(struct efx_nic *efx, struct efx_mtd *efx_mtd) +{ + struct efx_mtd_partition *part; + + efx_mtd->efx = efx; + + efx_mtd_rename_device(efx_mtd); + + efx_for_each_partition(part, efx_mtd) { + part->mtd.writesize = 1; + + part->mtd.owner = THIS_MODULE; + part->mtd.priv = efx_mtd; + part->mtd.name = part->name; + part->mtd.erase = efx_mtd_erase; + part->mtd.read = efx_mtd->ops->read; + part->mtd.write = efx_mtd->ops->write; + part->mtd.sync = efx_mtd_sync; + + if (add_mtd_device(&part->mtd)) + goto fail; + } + + list_add(&efx_mtd->node, &efx->mtd_list); + return 0; + +fail: + while (part != &efx_mtd->part[0]) { + --part; + efx_mtd_remove_partition(part); + } + /* add_mtd_device() returns 1 if the MTD table is full */ + return -ENOMEM; +} + +void efx_mtd_remove(struct efx_nic *efx) +{ + struct efx_mtd *efx_mtd, *next; + + WARN_ON(efx_dev_registered(efx)); + + list_for_each_entry_safe(efx_mtd, next, &efx->mtd_list, node) + efx_mtd_remove_device(efx_mtd); +} + +void efx_mtd_rename(struct efx_nic *efx) +{ + struct efx_mtd *efx_mtd; + + ASSERT_RTNL(); + + list_for_each_entry(efx_mtd, &efx->mtd_list, node) + efx_mtd_rename_device(efx_mtd); +} + +int efx_mtd_probe(struct efx_nic *efx) +{ + if (efx_nic_rev(efx) >= EFX_REV_SIENA_A0) + return siena_mtd_probe(efx); + else + return falcon_mtd_probe(efx); +} + +/* Implementation of MTD operations for Falcon */ + +static int falcon_mtd_read(struct mtd_info *mtd, loff_t start, + size_t len, size_t *retlen, u8 *buffer) +{ + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); + struct efx_mtd *efx_mtd = mtd->priv; const struct efx_spi_device *spi = efx_mtd->spi; - struct efx_nic *efx = spi->efx; + struct efx_nic *efx = efx_mtd->efx; int rc; rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) return rc; - rc = falcon_spi_read(spi, FALCON_FLASH_BOOTCODE_START + start, - len, retlen, buffer); + rc = falcon_spi_read(efx, spi, part->offset + start, len, + retlen, buffer); mutex_unlock(&efx->spi_lock); return rc; } -static int efx_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) +static int falcon_mtd_erase(struct mtd_info *mtd, loff_t start, size_t len) { + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); struct efx_mtd *efx_mtd = mtd->priv; - struct efx_nic *efx = efx_mtd->spi->efx; + struct efx_nic *efx = efx_mtd->efx; int rc; rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) return rc; - rc = efx_spi_erase(efx_mtd, FALCON_FLASH_BOOTCODE_START + erase->addr, - erase->len); + rc = efx_spi_erase(efx_mtd, part->offset + start, len); mutex_unlock(&efx->spi_lock); - - if (rc == 0) { - erase->state = MTD_ERASE_DONE; - } else { - erase->state = MTD_ERASE_FAILED; - erase->fail_addr = 0xffffffff; - } - mtd_erase_callback(erase); return rc; } -static int efx_mtd_write(struct mtd_info *mtd, loff_t start, - size_t len, size_t *retlen, const u8 *buffer) +static int falcon_mtd_write(struct mtd_info *mtd, loff_t start, + size_t len, size_t *retlen, const u8 *buffer) { + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); struct efx_mtd *efx_mtd = mtd->priv; const struct efx_spi_device *spi = efx_mtd->spi; - struct efx_nic *efx = spi->efx; + struct efx_nic *efx = efx_mtd->efx; int rc; rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) return rc; - rc = falcon_spi_write(spi, FALCON_FLASH_BOOTCODE_START + start, - len, retlen, buffer); + rc = falcon_spi_write(efx, spi, part->offset + start, len, + retlen, buffer); mutex_unlock(&efx->spi_lock); return rc; } -static void efx_mtd_sync(struct mtd_info *mtd) +static int falcon_mtd_sync(struct mtd_info *mtd) { struct efx_mtd *efx_mtd = mtd->priv; - struct efx_nic *efx = efx_mtd->spi->efx; + struct efx_nic *efx = efx_mtd->efx; int rc; mutex_lock(&efx->spi_lock); rc = efx_spi_slow_wait(efx_mtd, true); mutex_unlock(&efx->spi_lock); + return rc; +} + +static struct efx_mtd_ops falcon_mtd_ops = { + .read = falcon_mtd_read, + .erase = falcon_mtd_erase, + .write = falcon_mtd_write, + .sync = falcon_mtd_sync, +}; + +static int falcon_mtd_probe(struct efx_nic *efx) +{ + struct efx_spi_device *spi = efx->spi_flash; + struct efx_mtd *efx_mtd; + int rc; + ASSERT_RTNL(); + + if (!spi || spi->size <= FALCON_FLASH_BOOTCODE_START) + return -ENODEV; + + efx_mtd = kzalloc(sizeof(*efx_mtd) + sizeof(efx_mtd->part[0]), + GFP_KERNEL); + if (!efx_mtd) + return -ENOMEM; + + efx_mtd->spi = spi; + efx_mtd->name = "flash"; + efx_mtd->ops = &falcon_mtd_ops; + + efx_mtd->n_parts = 1; + efx_mtd->part[0].mtd.type = MTD_NORFLASH; + efx_mtd->part[0].mtd.flags = MTD_CAP_NORFLASH; + efx_mtd->part[0].mtd.size = spi->size - FALCON_FLASH_BOOTCODE_START; + efx_mtd->part[0].mtd.erasesize = spi->erase_size; + efx_mtd->part[0].offset = FALCON_FLASH_BOOTCODE_START; + efx_mtd->part[0].type_name = "sfc_flash_bootrom"; + + rc = efx_mtd_probe_device(efx, efx_mtd); if (rc) - EFX_ERR(efx, "%s sync failed (%d)\n", efx_mtd->name, rc); - return; + kfree(efx_mtd); + return rc; } -void efx_mtd_remove(struct efx_nic *efx) +/* Implementation of MTD operations for Siena */ + +static int siena_mtd_read(struct mtd_info *mtd, loff_t start, + size_t len, size_t *retlen, u8 *buffer) { - if (efx->spi_flash && efx->spi_flash->mtd) { - struct efx_mtd *efx_mtd = efx->spi_flash->mtd; - int rc; - - for (;;) { - rc = del_mtd_device(&efx_mtd->mtd); - if (rc != -EBUSY) - break; - ssleep(1); - } - WARN_ON(rc); - kfree(efx_mtd); + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); + struct efx_mtd *efx_mtd = mtd->priv; + struct efx_nic *efx = efx_mtd->efx; + loff_t offset = start; + loff_t end = min_t(loff_t, start + len, mtd->size); + size_t chunk; + int rc = 0; + + while (offset < end) { + chunk = min_t(size_t, end - offset, EFX_MCDI_NVRAM_LEN_MAX); + rc = efx_mcdi_nvram_read(efx, part->mcdi.nvram_type, offset, + buffer, chunk); + if (rc) + goto out; + offset += chunk; + buffer += chunk; } +out: + *retlen = offset - start; + return rc; } -void efx_mtd_rename(struct efx_nic *efx) +static int siena_mtd_erase(struct mtd_info *mtd, loff_t start, size_t len) { - if (efx->spi_flash && efx->spi_flash->mtd) { - struct efx_mtd *efx_mtd = efx->spi_flash->mtd; - snprintf(efx_mtd->name, sizeof(efx_mtd->name), - "%s sfc_flash_bootrom", efx->name); + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); + struct efx_mtd *efx_mtd = mtd->priv; + struct efx_nic *efx = efx_mtd->efx; + loff_t offset = start & ~((loff_t)(mtd->erasesize - 1)); + loff_t end = min_t(loff_t, start + len, mtd->size); + size_t chunk = part->mtd.erasesize; + int rc = 0; + + if (!part->mcdi.updating) { + rc = efx_mcdi_nvram_update_start(efx, part->mcdi.nvram_type); + if (rc) + goto out; + part->mcdi.updating = 1; } + + /* The MCDI interface can in fact do multiple erase blocks at once; + * but erasing may be slow, so we make multiple calls here to avoid + * tripping the MCDI RPC timeout. */ + while (offset < end) { + rc = efx_mcdi_nvram_erase(efx, part->mcdi.nvram_type, offset, + chunk); + if (rc) + goto out; + offset += chunk; + } +out: + return rc; } -int efx_mtd_probe(struct efx_nic *efx) +static int siena_mtd_write(struct mtd_info *mtd, loff_t start, + size_t len, size_t *retlen, const u8 *buffer) { - struct efx_spi_device *spi = efx->spi_flash; - struct efx_mtd *efx_mtd; + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); + struct efx_mtd *efx_mtd = mtd->priv; + struct efx_nic *efx = efx_mtd->efx; + loff_t offset = start; + loff_t end = min_t(loff_t, start + len, mtd->size); + size_t chunk; + int rc = 0; - if (!spi || spi->size <= FALCON_FLASH_BOOTCODE_START) + if (!part->mcdi.updating) { + rc = efx_mcdi_nvram_update_start(efx, part->mcdi.nvram_type); + if (rc) + goto out; + part->mcdi.updating = 1; + } + + while (offset < end) { + chunk = min_t(size_t, end - offset, EFX_MCDI_NVRAM_LEN_MAX); + rc = efx_mcdi_nvram_write(efx, part->mcdi.nvram_type, offset, + buffer, chunk); + if (rc) + goto out; + offset += chunk; + buffer += chunk; + } +out: + *retlen = offset - start; + return rc; +} + +static int siena_mtd_sync(struct mtd_info *mtd) +{ + struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); + struct efx_mtd *efx_mtd = mtd->priv; + struct efx_nic *efx = efx_mtd->efx; + int rc = 0; + + if (part->mcdi.updating) { + part->mcdi.updating = 0; + rc = efx_mcdi_nvram_update_finish(efx, part->mcdi.nvram_type); + } + + return rc; +} + +static struct efx_mtd_ops siena_mtd_ops = { + .read = siena_mtd_read, + .erase = siena_mtd_erase, + .write = siena_mtd_write, + .sync = siena_mtd_sync, +}; + +struct siena_nvram_type_info { + int port; + const char *name; +}; + +static struct siena_nvram_type_info siena_nvram_types[] = { + [MC_CMD_NVRAM_TYPE_DISABLED_CALLISTO] = { 0, "sfc_dummy_phy" }, + [MC_CMD_NVRAM_TYPE_MC_FW] = { 0, "sfc_mcfw" }, + [MC_CMD_NVRAM_TYPE_MC_FW_BACKUP] = { 0, "sfc_mcfw_backup" }, + [MC_CMD_NVRAM_TYPE_STATIC_CFG_PORT0] = { 0, "sfc_static_cfg" }, + [MC_CMD_NVRAM_TYPE_STATIC_CFG_PORT1] = { 1, "sfc_static_cfg" }, + [MC_CMD_NVRAM_TYPE_DYNAMIC_CFG_PORT0] = { 0, "sfc_dynamic_cfg" }, + [MC_CMD_NVRAM_TYPE_DYNAMIC_CFG_PORT1] = { 1, "sfc_dynamic_cfg" }, + [MC_CMD_NVRAM_TYPE_EXP_ROM] = { 0, "sfc_exp_rom" }, + [MC_CMD_NVRAM_TYPE_EXP_ROM_CFG_PORT0] = { 0, "sfc_exp_rom_cfg" }, + [MC_CMD_NVRAM_TYPE_EXP_ROM_CFG_PORT1] = { 1, "sfc_exp_rom_cfg" }, + [MC_CMD_NVRAM_TYPE_PHY_PORT0] = { 0, "sfc_phy_fw" }, + [MC_CMD_NVRAM_TYPE_PHY_PORT1] = { 1, "sfc_phy_fw" }, +}; + +static int siena_mtd_probe_partition(struct efx_nic *efx, + struct efx_mtd *efx_mtd, + unsigned int part_id, + unsigned int type) +{ + struct efx_mtd_partition *part = &efx_mtd->part[part_id]; + struct siena_nvram_type_info *info; + size_t size, erase_size; + bool protected; + int rc; + + if (type >= ARRAY_SIZE(siena_nvram_types)) + return -ENODEV; + + info = &siena_nvram_types[type]; + + if (info->port != efx_port_num(efx)) return -ENODEV; - efx_mtd = kzalloc(sizeof(*efx_mtd), GFP_KERNEL); + rc = efx_mcdi_nvram_info(efx, type, &size, &erase_size, &protected); + if (rc) + return rc; + if (protected) + return -ENODEV; /* hide it */ + + part->mcdi.nvram_type = type; + part->type_name = info->name; + + part->mtd.type = MTD_NORFLASH; + part->mtd.flags = MTD_CAP_NORFLASH; + part->mtd.size = size; + part->mtd.erasesize = erase_size; + + return 0; +} + +static int siena_mtd_get_fw_subtypes(struct efx_nic *efx, + struct efx_mtd *efx_mtd) +{ + struct efx_mtd_partition *part; + uint16_t fw_subtype_list[MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_LEN / + sizeof(uint16_t)]; + int rc; + + rc = efx_mcdi_get_board_cfg(efx, NULL, fw_subtype_list); + if (rc) + return rc; + + efx_for_each_partition(part, efx_mtd) + part->mcdi.fw_subtype = fw_subtype_list[part->mcdi.nvram_type]; + + return 0; +} + +static int siena_mtd_probe(struct efx_nic *efx) +{ + struct efx_mtd *efx_mtd; + int rc = -ENODEV; + u32 nvram_types; + unsigned int type; + + ASSERT_RTNL(); + + rc = efx_mcdi_nvram_types(efx, &nvram_types); + if (rc) + return rc; + + efx_mtd = kzalloc(sizeof(*efx_mtd) + + hweight32(nvram_types) * sizeof(efx_mtd->part[0]), + GFP_KERNEL); if (!efx_mtd) return -ENOMEM; - efx_mtd->spi = spi; - spi->mtd = efx_mtd; + efx_mtd->name = "Siena NVRAM manager"; - efx_mtd->mtd.type = MTD_NORFLASH; - efx_mtd->mtd.flags = MTD_CAP_NORFLASH; - efx_mtd->mtd.size = spi->size - FALCON_FLASH_BOOTCODE_START; - efx_mtd->mtd.erasesize = spi->erase_size; - efx_mtd->mtd.writesize = 1; - efx_mtd_rename(efx); - - efx_mtd->mtd.owner = THIS_MODULE; - efx_mtd->mtd.priv = efx_mtd; - efx_mtd->mtd.name = efx_mtd->name; - efx_mtd->mtd.erase = efx_mtd_erase; - efx_mtd->mtd.read = efx_mtd_read; - efx_mtd->mtd.write = efx_mtd_write; - efx_mtd->mtd.sync = efx_mtd_sync; + efx_mtd->ops = &siena_mtd_ops; - if (add_mtd_device(&efx_mtd->mtd)) { - kfree(efx_mtd); - spi->mtd = NULL; - /* add_mtd_device() returns 1 if the MTD table is full */ - return -ENOMEM; + type = 0; + efx_mtd->n_parts = 0; + + while (nvram_types != 0) { + if (nvram_types & 1) { + rc = siena_mtd_probe_partition(efx, efx_mtd, + efx_mtd->n_parts, type); + if (rc == 0) + efx_mtd->n_parts++; + else if (rc != -ENODEV) + goto fail; + } + type++; + nvram_types >>= 1; } - return 0; + rc = siena_mtd_get_fw_subtypes(efx, efx_mtd); + if (rc) + goto fail; + + rc = efx_mtd_probe_device(efx, efx_mtd); +fail: + if (rc) + kfree(efx_mtd); + return rc; } + --- linux-2.6.32.orig/drivers/net/sfc/falcon_gmac.c +++ linux-2.6.32/drivers/net/sfc/falcon_gmac.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -11,11 +11,10 @@ #include #include "net_driver.h" #include "efx.h" -#include "falcon.h" +#include "nic.h" #include "mac.h" -#include "falcon_hwdefs.h" -#include "falcon_io.h" -#include "gmii.h" +#include "regs.h" +#include "io.h" /************************************************************************** * @@ -23,106 +22,109 @@ * *************************************************************************/ -static void falcon_reconfigure_gmac(struct efx_nic *efx) +static int falcon_reconfigure_gmac(struct efx_nic *efx) { + struct efx_link_state *link_state = &efx->link_state; bool loopback, tx_fc, rx_fc, bytemode; int if_mode; unsigned int max_frame_len; efx_oword_t reg; /* Configuration register 1 */ - tx_fc = (efx->link_fc & EFX_FC_TX) || !efx->link_fd; - rx_fc = !!(efx->link_fc & EFX_FC_RX); + tx_fc = (link_state->fc & EFX_FC_TX) || !link_state->fd; + rx_fc = !!(link_state->fc & EFX_FC_RX); loopback = (efx->loopback_mode == LOOPBACK_GMAC); - bytemode = (efx->link_speed == 1000); + bytemode = (link_state->speed == 1000); EFX_POPULATE_OWORD_5(reg, - GM_LOOP, loopback, - GM_TX_EN, 1, - GM_TX_FC_EN, tx_fc, - GM_RX_EN, 1, - GM_RX_FC_EN, rx_fc); - falcon_write(efx, ®, GM_CFG1_REG); + FRF_AB_GM_LOOP, loopback, + FRF_AB_GM_TX_EN, 1, + FRF_AB_GM_TX_FC_EN, tx_fc, + FRF_AB_GM_RX_EN, 1, + FRF_AB_GM_RX_FC_EN, rx_fc); + efx_writeo(efx, ®, FR_AB_GM_CFG1); udelay(10); /* Configuration register 2 */ if_mode = (bytemode) ? 2 : 1; EFX_POPULATE_OWORD_5(reg, - GM_IF_MODE, if_mode, - GM_PAD_CRC_EN, 1, - GM_LEN_CHK, 1, - GM_FD, efx->link_fd, - GM_PAMBL_LEN, 0x7/*datasheet recommended */); + FRF_AB_GM_IF_MODE, if_mode, + FRF_AB_GM_PAD_CRC_EN, 1, + FRF_AB_GM_LEN_CHK, 1, + FRF_AB_GM_FD, link_state->fd, + FRF_AB_GM_PAMBL_LEN, 0x7/*datasheet recommended */); - falcon_write(efx, ®, GM_CFG2_REG); + efx_writeo(efx, ®, FR_AB_GM_CFG2); udelay(10); /* Max frame len register */ max_frame_len = EFX_MAX_FRAME_LEN(efx->net_dev->mtu); - EFX_POPULATE_OWORD_1(reg, GM_MAX_FLEN, max_frame_len); - falcon_write(efx, ®, GM_MAX_FLEN_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_GM_MAX_FLEN, max_frame_len); + efx_writeo(efx, ®, FR_AB_GM_MAX_FLEN); udelay(10); /* FIFO configuration register 0 */ EFX_POPULATE_OWORD_5(reg, - GMF_FTFENREQ, 1, - GMF_STFENREQ, 1, - GMF_FRFENREQ, 1, - GMF_SRFENREQ, 1, - GMF_WTMENREQ, 1); - falcon_write(efx, ®, GMF_CFG0_REG); + FRF_AB_GMF_FTFENREQ, 1, + FRF_AB_GMF_STFENREQ, 1, + FRF_AB_GMF_FRFENREQ, 1, + FRF_AB_GMF_SRFENREQ, 1, + FRF_AB_GMF_WTMENREQ, 1); + efx_writeo(efx, ®, FR_AB_GMF_CFG0); udelay(10); /* FIFO configuration register 1 */ EFX_POPULATE_OWORD_2(reg, - GMF_CFGFRTH, 0x12, - GMF_CFGXOFFRTX, 0xffff); - falcon_write(efx, ®, GMF_CFG1_REG); + FRF_AB_GMF_CFGFRTH, 0x12, + FRF_AB_GMF_CFGXOFFRTX, 0xffff); + efx_writeo(efx, ®, FR_AB_GMF_CFG1); udelay(10); /* FIFO configuration register 2 */ EFX_POPULATE_OWORD_2(reg, - GMF_CFGHWM, 0x3f, - GMF_CFGLWM, 0xa); - falcon_write(efx, ®, GMF_CFG2_REG); + FRF_AB_GMF_CFGHWM, 0x3f, + FRF_AB_GMF_CFGLWM, 0xa); + efx_writeo(efx, ®, FR_AB_GMF_CFG2); udelay(10); /* FIFO configuration register 3 */ EFX_POPULATE_OWORD_2(reg, - GMF_CFGHWMFT, 0x1c, - GMF_CFGFTTH, 0x08); - falcon_write(efx, ®, GMF_CFG3_REG); + FRF_AB_GMF_CFGHWMFT, 0x1c, + FRF_AB_GMF_CFGFTTH, 0x08); + efx_writeo(efx, ®, FR_AB_GMF_CFG3); udelay(10); /* FIFO configuration register 4 */ - EFX_POPULATE_OWORD_1(reg, GMF_HSTFLTRFRM_PAUSE, 1); - falcon_write(efx, ®, GMF_CFG4_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_GMF_HSTFLTRFRM_PAUSE, 1); + efx_writeo(efx, ®, FR_AB_GMF_CFG4); udelay(10); /* FIFO configuration register 5 */ - falcon_read(efx, ®, GMF_CFG5_REG); - EFX_SET_OWORD_FIELD(reg, GMF_CFGBYTMODE, bytemode); - EFX_SET_OWORD_FIELD(reg, GMF_CFGHDPLX, !efx->link_fd); - EFX_SET_OWORD_FIELD(reg, GMF_HSTDRPLT64, !efx->link_fd); - EFX_SET_OWORD_FIELD(reg, GMF_HSTFLTRFRMDC_PAUSE, 0); - falcon_write(efx, ®, GMF_CFG5_REG); + efx_reado(efx, ®, FR_AB_GMF_CFG5); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GMF_CFGBYTMODE, bytemode); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GMF_CFGHDPLX, !link_state->fd); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GMF_HSTDRPLT64, !link_state->fd); + EFX_SET_OWORD_FIELD(reg, FRF_AB_GMF_HSTFLTRFRMDC_PAUSE, 0); + efx_writeo(efx, ®, FR_AB_GMF_CFG5); udelay(10); /* MAC address */ EFX_POPULATE_OWORD_4(reg, - GM_HWADDR_5, efx->net_dev->dev_addr[5], - GM_HWADDR_4, efx->net_dev->dev_addr[4], - GM_HWADDR_3, efx->net_dev->dev_addr[3], - GM_HWADDR_2, efx->net_dev->dev_addr[2]); - falcon_write(efx, ®, GM_ADR1_REG); + FRF_AB_GM_ADR_B0, efx->net_dev->dev_addr[5], + FRF_AB_GM_ADR_B1, efx->net_dev->dev_addr[4], + FRF_AB_GM_ADR_B2, efx->net_dev->dev_addr[3], + FRF_AB_GM_ADR_B3, efx->net_dev->dev_addr[2]); + efx_writeo(efx, ®, FR_AB_GM_ADR1); udelay(10); EFX_POPULATE_OWORD_2(reg, - GM_HWADDR_1, efx->net_dev->dev_addr[1], - GM_HWADDR_0, efx->net_dev->dev_addr[0]); - falcon_write(efx, ®, GM_ADR2_REG); + FRF_AB_GM_ADR_B4, efx->net_dev->dev_addr[1], + FRF_AB_GM_ADR_B5, efx->net_dev->dev_addr[0]); + efx_writeo(efx, ®, FR_AB_GM_ADR2); udelay(10); falcon_reconfigure_mac_wrapper(efx); + + return 0; } static void falcon_update_stats_gmac(struct efx_nic *efx) @@ -130,11 +132,6 @@ struct efx_mac_stats *mac_stats = &efx->mac_stats; unsigned long old_rx_pause, old_tx_pause; unsigned long new_rx_pause, new_tx_pause; - int rc; - - rc = falcon_dma_stats(efx, GDmaDone_offset); - if (rc) - return; /* Pause frames are erroneously counted as errors (SFC bug 3269) */ old_rx_pause = mac_stats->rx_pause; @@ -221,9 +218,13 @@ mac_stats->rx_lt64 = mac_stats->rx_good_lt64 + mac_stats->rx_bad_lt64; } +static bool falcon_gmac_check_fault(struct efx_nic *efx) +{ + return false; +} + struct efx_mac_operations falcon_gmac_operations = { .reconfigure = falcon_reconfigure_gmac, .update_stats = falcon_update_stats_gmac, - .irq = efx_port_dummy_op_void, - .poll = efx_port_dummy_op_void, + .check_fault = falcon_gmac_check_fault, }; --- linux-2.6.32.orig/drivers/net/sfc/spi.h +++ linux-2.6.32/drivers/net/sfc/spi.h @@ -36,8 +36,6 @@ /** * struct efx_spi_device - an Efx SPI (Serial Peripheral Interface) device - * @efx: The Efx controller that owns this device - * @mtd: MTD state * @device_id: Controller's id for the device * @size: Size (in bytes) * @addr_len: Number of address bytes in read/write commands @@ -54,10 +52,6 @@ * Write commands are limited to blocks with this size and alignment. */ struct efx_spi_device { - struct efx_nic *efx; -#ifdef CONFIG_SFC_MTD - void *mtd; -#endif int device_id; unsigned int size; unsigned int addr_len; @@ -67,12 +61,16 @@ unsigned int block_size; }; -int falcon_spi_cmd(const struct efx_spi_device *spi, unsigned int command, +int falcon_spi_cmd(struct efx_nic *efx, + const struct efx_spi_device *spi, unsigned int command, int address, const void* in, void *out, size_t len); -int falcon_spi_wait_write(const struct efx_spi_device *spi); -int falcon_spi_read(const struct efx_spi_device *spi, loff_t start, +int falcon_spi_wait_write(struct efx_nic *efx, + const struct efx_spi_device *spi); +int falcon_spi_read(struct efx_nic *efx, + const struct efx_spi_device *spi, loff_t start, size_t len, size_t *retlen, u8 *buffer); -int falcon_spi_write(const struct efx_spi_device *spi, loff_t start, +int falcon_spi_write(struct efx_nic *efx, + const struct efx_spi_device *spi, loff_t start, size_t len, size_t *retlen, const u8 *buffer); /* --- linux-2.6.32.orig/drivers/net/sfc/mcdi.h +++ linux-2.6.32/drivers/net/sfc/mcdi.h @@ -0,0 +1,131 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2008-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#ifndef EFX_MCDI_H +#define EFX_MCDI_H + +/** + * enum efx_mcdi_state + * @MCDI_STATE_QUIESCENT: No pending MCDI requests. If the caller holds the + * mcdi_lock then they are able to move to MCDI_STATE_RUNNING + * @MCDI_STATE_RUNNING: There is an MCDI request pending. Only the thread that + * moved into this state is allowed to move out of it. + * @MCDI_STATE_COMPLETED: An MCDI request has completed, but the owning thread + * has not yet consumed the result. For all other threads, equivalent to + * MCDI_STATE_RUNNING. + */ +enum efx_mcdi_state { + MCDI_STATE_QUIESCENT, + MCDI_STATE_RUNNING, + MCDI_STATE_COMPLETED, +}; + +enum efx_mcdi_mode { + MCDI_MODE_POLL, + MCDI_MODE_EVENTS, +}; + +/** + * struct efx_mcdi_iface + * @state: Interface state. Waited for by mcdi_wq. + * @wq: Wait queue for threads waiting for state != STATE_RUNNING + * @iface_lock: Protects @credits, @seqno, @resprc, @resplen + * @mode: Poll for mcdi completion, or wait for an mcdi_event. + * Serialised by @lock + * @seqno: The next sequence number to use for mcdi requests. + * Serialised by @lock + * @credits: Number of spurious MCDI completion events allowed before we + * trigger a fatal error. Protected by @lock + * @resprc: Returned MCDI completion + * @resplen: Returned payload length + */ +struct efx_mcdi_iface { + atomic_t state; + wait_queue_head_t wq; + spinlock_t iface_lock; + enum efx_mcdi_mode mode; + unsigned int credits; + unsigned int seqno; + unsigned int resprc; + size_t resplen; +}; + +extern void efx_mcdi_init(struct efx_nic *efx); + +extern int efx_mcdi_rpc(struct efx_nic *efx, unsigned cmd, const u8 *inbuf, + size_t inlen, u8 *outbuf, size_t outlen, + size_t *outlen_actual); + +extern int efx_mcdi_poll_reboot(struct efx_nic *efx); +extern void efx_mcdi_mode_poll(struct efx_nic *efx); +extern void efx_mcdi_mode_event(struct efx_nic *efx); + +extern void efx_mcdi_process_event(struct efx_channel *channel, + efx_qword_t *event); + +#define MCDI_PTR2(_buf, _ofst) \ + (((u8 *)_buf) + _ofst) +#define MCDI_SET_DWORD2(_buf, _ofst, _value) \ + EFX_POPULATE_DWORD_1(*((efx_dword_t *)MCDI_PTR2(_buf, _ofst)), \ + EFX_DWORD_0, _value) +#define MCDI_DWORD2(_buf, _ofst) \ + EFX_DWORD_FIELD(*((efx_dword_t *)MCDI_PTR2(_buf, _ofst)), \ + EFX_DWORD_0) +#define MCDI_QWORD2(_buf, _ofst) \ + EFX_QWORD_FIELD64(*((efx_qword_t *)MCDI_PTR2(_buf, _ofst)), \ + EFX_QWORD_0) + +#define MCDI_PTR(_buf, _ofst) \ + MCDI_PTR2(_buf, MC_CMD_ ## _ofst ## _OFST) +#define MCDI_SET_DWORD(_buf, _ofst, _value) \ + MCDI_SET_DWORD2(_buf, MC_CMD_ ## _ofst ## _OFST, _value) +#define MCDI_DWORD(_buf, _ofst) \ + MCDI_DWORD2(_buf, MC_CMD_ ## _ofst ## _OFST) +#define MCDI_QWORD(_buf, _ofst) \ + MCDI_QWORD2(_buf, MC_CMD_ ## _ofst ## _OFST) + +#define MCDI_EVENT_FIELD(_ev, _field) \ + EFX_QWORD_FIELD(_ev, MCDI_EVENT_ ## _field) + +extern int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build); +extern int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, + bool *was_attached_out); +extern int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, + u16 *fw_subtype_list); +extern int efx_mcdi_log_ctrl(struct efx_nic *efx, bool evq, bool uart, + u32 dest_evq); +extern int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out); +extern int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type, + size_t *size_out, size_t *erase_size_out, + bool *protected_out); +extern int efx_mcdi_nvram_update_start(struct efx_nic *efx, + unsigned int type); +extern int efx_mcdi_nvram_read(struct efx_nic *efx, unsigned int type, + loff_t offset, u8 *buffer, size_t length); +extern int efx_mcdi_nvram_write(struct efx_nic *efx, unsigned int type, + loff_t offset, const u8 *buffer, + size_t length); +#define EFX_MCDI_NVRAM_LEN_MAX 128 +extern int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type, + loff_t offset, size_t length); +extern int efx_mcdi_nvram_update_finish(struct efx_nic *efx, + unsigned int type); +extern int efx_mcdi_handle_assertion(struct efx_nic *efx); +extern void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); +extern int efx_mcdi_reset_port(struct efx_nic *efx); +extern int efx_mcdi_reset_mc(struct efx_nic *efx); +extern int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type, + const u8 *mac, int *id_out); +extern int efx_mcdi_wol_filter_set_magic(struct efx_nic *efx, + const u8 *mac, int *id_out); +extern int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out); +extern int efx_mcdi_wol_filter_remove(struct efx_nic *efx, int id); +extern int efx_mcdi_wol_filter_reset(struct efx_nic *efx); + +#endif /* EFX_MCDI_H */ --- linux-2.6.32.orig/drivers/net/sfc/mdio_10g.h +++ linux-2.6.32/drivers/net/sfc/mdio_10g.h @@ -1,6 +1,6 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -17,7 +17,6 @@ */ #include "efx.h" -#include "boards.h" static inline unsigned efx_mdio_id_rev(u32 id) { return id & 0xf; } static inline unsigned efx_mdio_id_model(u32 id) { return (id >> 4) & 0x3f; } @@ -87,6 +86,9 @@ /* Set (some of) the PHY settings over MDIO */ extern int efx_mdio_set_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd); +/* Push advertising flags and restart autonegotiation */ +extern void efx_mdio_an_reconfigure(struct efx_nic *efx); + /* Get pause parameters from AN if available (otherwise return * requested pause parameters) */ --- linux-2.6.32.orig/drivers/net/sfc/ethtool.c +++ linux-2.6.32/drivers/net/sfc/ethtool.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -10,30 +10,15 @@ #include #include -#include #include #include "net_driver.h" #include "workarounds.h" #include "selftest.h" #include "efx.h" -#include "ethtool.h" -#include "falcon.h" +#include "nic.h" #include "spi.h" #include "mdio_10g.h" -const char *efx_loopback_mode_names[] = { - [LOOPBACK_NONE] = "NONE", - [LOOPBACK_GMAC] = "GMAC", - [LOOPBACK_XGMII] = "XGMII", - [LOOPBACK_XGXS] = "XGXS", - [LOOPBACK_XAUI] = "XAUI", - [LOOPBACK_GPHY] = "GPHY", - [LOOPBACK_PHYXS] = "PHYXS", - [LOOPBACK_PCS] = "PCS", - [LOOPBACK_PMAPMD] = "PMA/PMD", - [LOOPBACK_NETWORK] = "NETWORK", -}; - struct ethtool_string { char name[ETH_GSTRING_LEN]; }; @@ -167,6 +152,7 @@ EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_tobe_disc), EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_ip_hdr_chksum_err), EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_tcp_udp_chksum_err), + EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_mcast_mismatch), EFX_ETHTOOL_UINT_CHANNEL_STAT(rx_frm_trunc), }; @@ -187,13 +173,15 @@ { struct efx_nic *efx = netdev_priv(net_dev); - efx->board_info.blink(efx, 1); - set_current_state(TASK_INTERRUPTIBLE); - if (count) - schedule_timeout(count * HZ); - else - schedule(); - efx->board_info.blink(efx, 0); + do { + efx->type->set_id_led(efx, EFX_LED_ON); + schedule_timeout_interruptible(HZ / 2); + + efx->type->set_id_led(efx, EFX_LED_OFF); + schedule_timeout_interruptible(HZ / 2); + } while (!signal_pending(current) && --count != 0); + + efx->type->set_id_led(efx, EFX_LED_DEFAULT); return 0; } @@ -202,6 +190,7 @@ struct ethtool_cmd *ecmd) { struct efx_nic *efx = netdev_priv(net_dev); + struct efx_link_state *link_state = &efx->link_state; mutex_lock(&efx->mac_lock); efx->phy_op->get_settings(efx, ecmd); @@ -209,6 +198,13 @@ /* Falcon GMAC does not support 1000Mbps HD */ ecmd->supported &= ~SUPPORTED_1000baseT_Half; + /* Both MACs support pause frames (bidirectional and respond-only) */ + ecmd->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; + + if (LOOPBACK_INTERNAL(efx)) { + ecmd->speed = link_state->speed; + ecmd->duplex = link_state->fd ? DUPLEX_FULL : DUPLEX_HALF; + } return 0; } @@ -230,9 +226,6 @@ mutex_lock(&efx->mac_lock); rc = efx->phy_op->set_settings(efx, ecmd); mutex_unlock(&efx->mac_lock); - if (!rc) - efx_reconfigure_port(efx); - return rc; } @@ -243,6 +236,9 @@ strlcpy(info->driver, EFX_DRIVER_NAME, sizeof(info->driver)); strlcpy(info->version, EFX_DRIVER_VERSION, sizeof(info->version)); + if (efx_nic_rev(efx) >= EFX_REV_SIENA_A0) + siena_print_fwver(efx, info->fw_version, + sizeof(info->fw_version)); strlcpy(info->bus_info, pci_name(efx->pci_dev), sizeof(info->bus_info)); } @@ -289,7 +285,7 @@ #define EFX_TX_QUEUE_NAME(_tx_queue) "txq%d", _tx_queue->queue #define EFX_RX_QUEUE_NAME(_rx_queue) "rxq%d", _rx_queue->queue #define EFX_LOOPBACK_NAME(_mode, _counter) \ - "loopback.%s." _counter, LOOPBACK_MODE_NAME(mode) + "loopback.%s." _counter, STRING_TABLE_LOOKUP(_mode, efx_loopback_mode) /** * efx_fill_loopback_test - fill in a block of loopback self-test entries @@ -372,9 +368,21 @@ efx_fill_test(n++, strings, data, &tests->registers, "core", 0, "registers", NULL); - for (i = 0; i < efx->phy_op->num_tests; i++) - efx_fill_test(n++, strings, data, &tests->phy[i], - "phy", 0, efx->phy_op->test_names[i], NULL); + if (efx->phy_op->run_tests != NULL) { + EFX_BUG_ON_PARANOID(efx->phy_op->test_name == NULL); + + for (i = 0; true; ++i) { + const char *name; + + EFX_BUG_ON_PARANOID(i >= EFX_MAX_PHY_TESTS); + name = efx->phy_op->test_name(efx, i); + if (name == NULL) + break; + + efx_fill_test(n++, strings, data, &tests->phy[i], + "phy", 0, name, NULL); + } + } /* Loopback tests */ for (mode = LOOPBACK_NONE; mode <= LOOPBACK_TEST_MAX; mode++) { @@ -463,6 +471,36 @@ } } +static int efx_ethtool_set_tso(struct net_device *net_dev, u32 enable) +{ + struct efx_nic *efx __attribute__ ((unused)) = netdev_priv(net_dev); + unsigned long features; + + features = NETIF_F_TSO; + if (efx->type->offload_features & NETIF_F_V6_CSUM) + features |= NETIF_F_TSO6; + + if (enable) + net_dev->features |= features; + else + net_dev->features &= ~features; + + return 0; +} + +static int efx_ethtool_set_tx_csum(struct net_device *net_dev, u32 enable) +{ + struct efx_nic *efx = netdev_priv(net_dev); + unsigned long features = efx->type->offload_features & NETIF_F_ALL_CSUM; + + if (enable) + net_dev->features |= features; + else + net_dev->features &= ~features; + + return 0; +} + static int efx_ethtool_set_rx_csum(struct net_device *net_dev, u32 enable) { struct efx_nic *efx = netdev_priv(net_dev); @@ -537,7 +575,7 @@ { struct efx_nic *efx = netdev_priv(net_dev); - return efx->link_up; + return efx->link_state.up; } static int efx_ethtool_get_eeprom_len(struct net_device *net_dev) @@ -562,7 +600,8 @@ rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) return rc; - rc = falcon_spi_read(spi, eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, + rc = falcon_spi_read(efx, spi, + eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, eeprom->len, &len, buf); mutex_unlock(&efx->spi_lock); @@ -585,7 +624,8 @@ rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) return rc; - rc = falcon_spi_write(spi, eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, + rc = falcon_spi_write(efx, spi, + eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, eeprom->len, &len, buf); mutex_unlock(&efx->spi_lock); @@ -618,6 +658,9 @@ coalesce->use_adaptive_rx_coalesce = efx->irq_rx_adaptive; coalesce->rx_coalesce_usecs_irq = efx->irq_rx_moderation; + coalesce->tx_coalesce_usecs_irq *= EFX_IRQ_MOD_RESOLUTION; + coalesce->rx_coalesce_usecs_irq *= EFX_IRQ_MOD_RESOLUTION; + return 0; } @@ -656,13 +699,8 @@ } efx_init_irq_moderation(efx, tx_usecs, rx_usecs, adaptive); - - /* Reset channel to pick up new moderation value. Note that - * this may change the value of the irq_moderation field - * (e.g. to allow for hardware timer granularity). - */ efx_for_each_channel(channel, efx) - falcon_set_int_moderation(channel); + efx->type->push_irq_moderation(channel); return 0; } @@ -671,8 +709,12 @@ struct ethtool_pauseparam *pause) { struct efx_nic *efx = netdev_priv(net_dev); - enum efx_fc_type wanted_fc; + enum efx_fc_type wanted_fc, old_fc; + u32 old_adv; bool reset; + int rc = 0; + + mutex_lock(&efx->mac_lock); wanted_fc = ((pause->rx_pause ? EFX_FC_RX : 0) | (pause->tx_pause ? EFX_FC_TX : 0) | @@ -680,14 +722,14 @@ if ((wanted_fc & EFX_FC_TX) && !(wanted_fc & EFX_FC_RX)) { EFX_LOG(efx, "Flow control unsupported: tx ON rx OFF\n"); - return -EINVAL; + rc = -EINVAL; + goto out; } - if (!(efx->phy_op->mmds & MDIO_DEVS_AN) && - (wanted_fc & EFX_FC_AUTO)) { - EFX_LOG(efx, "PHY does not support flow control " - "autonegotiation\n"); - return -EINVAL; + if ((wanted_fc & EFX_FC_AUTO) && !efx->link_advertising) { + EFX_LOG(efx, "Autonegotiation is disabled\n"); + rc = -EINVAL; + goto out; } /* TX flow control may automatically turn itself off if the @@ -697,27 +739,40 @@ * and fix it be cycling transmit flow control on this end. */ reset = (wanted_fc & EFX_FC_TX) && !(efx->wanted_fc & EFX_FC_TX); if (EFX_WORKAROUND_11482(efx) && reset) { - if (falcon_rev(efx) >= FALCON_REV_B0) { + if (efx_nic_rev(efx) == EFX_REV_FALCON_B0) { /* Recover by resetting the EM block */ - if (efx->link_up) - falcon_drain_tx_fifo(efx); + falcon_stop_nic_stats(efx); + falcon_drain_tx_fifo(efx); + efx->mac_op->reconfigure(efx); + falcon_start_nic_stats(efx); } else { /* Schedule a reset to recover */ efx_schedule_reset(efx, RESET_TYPE_INVISIBLE); } } - /* Try to push the pause parameters */ - mutex_lock(&efx->mac_lock); + old_adv = efx->link_advertising; + old_fc = efx->wanted_fc; + efx_link_set_wanted_fc(efx, wanted_fc); + if (efx->link_advertising != old_adv || + (efx->wanted_fc ^ old_fc) & EFX_FC_AUTO) { + rc = efx->phy_op->reconfigure(efx); + if (rc) { + EFX_ERR(efx, "Unable to advertise requested flow " + "control setting\n"); + goto out; + } + } - efx->wanted_fc = wanted_fc; - if (efx->phy_op->mmds & MDIO_DEVS_AN) - mdio45_ethtool_spauseparam_an(&efx->mdio, pause); - __efx_reconfigure_port(efx); + /* Reconfigure the MAC. The PHY *may* generate a link state change event + * if the user just changed the advertised capabilities, but there's no + * harm doing this twice */ + efx->mac_op->reconfigure(efx); +out: mutex_unlock(&efx->mac_lock); - return 0; + return rc; } static void efx_ethtool_get_pauseparam(struct net_device *net_dev, @@ -731,6 +786,50 @@ } +static void efx_ethtool_get_wol(struct net_device *net_dev, + struct ethtool_wolinfo *wol) +{ + struct efx_nic *efx = netdev_priv(net_dev); + return efx->type->get_wol(efx, wol); +} + + +static int efx_ethtool_set_wol(struct net_device *net_dev, + struct ethtool_wolinfo *wol) +{ + struct efx_nic *efx = netdev_priv(net_dev); + return efx->type->set_wol(efx, wol->wolopts); +} + +extern int efx_ethtool_reset(struct net_device *net_dev, u32 *flags) +{ + struct efx_nic *efx = netdev_priv(net_dev); + enum reset_type method; + enum { + ETH_RESET_EFX_INVISIBLE = (ETH_RESET_DMA | ETH_RESET_FILTER | + ETH_RESET_OFFLOAD | ETH_RESET_MAC) + }; + + /* Check for minimal reset flags */ + if ((*flags & ETH_RESET_EFX_INVISIBLE) != ETH_RESET_EFX_INVISIBLE) + return -EINVAL; + *flags ^= ETH_RESET_EFX_INVISIBLE; + method = RESET_TYPE_INVISIBLE; + + if (*flags & ETH_RESET_PHY) { + *flags ^= ETH_RESET_PHY; + method = RESET_TYPE_ALL; + } + + if ((*flags & efx->type->reset_world_flags) == + efx->type->reset_world_flags) { + *flags ^= efx->type->reset_world_flags; + method = RESET_TYPE_WORLD; + } + + return efx_reset(efx, method); +} + const struct ethtool_ops efx_ethtool_ops = { .get_settings = efx_ethtool_get_settings, .set_settings = efx_ethtool_set_settings, @@ -747,11 +846,13 @@ .get_rx_csum = efx_ethtool_get_rx_csum, .set_rx_csum = efx_ethtool_set_rx_csum, .get_tx_csum = ethtool_op_get_tx_csum, - .set_tx_csum = ethtool_op_set_tx_csum, + /* Need to enable/disable IPv6 too */ + .set_tx_csum = efx_ethtool_set_tx_csum, .get_sg = ethtool_op_get_sg, .set_sg = ethtool_op_set_sg, .get_tso = ethtool_op_get_tso, - .set_tso = ethtool_op_set_tso, + /* Need to enable/disable TSO-IPv6 too */ + .set_tso = efx_ethtool_set_tso, .get_flags = ethtool_op_get_flags, .set_flags = ethtool_op_set_flags, .get_sset_count = efx_ethtool_get_sset_count, @@ -759,4 +860,7 @@ .get_strings = efx_ethtool_get_strings, .phys_id = efx_ethtool_phys_id, .get_ethtool_stats = efx_ethtool_get_stats, + .get_wol = efx_ethtool_get_wol, + .set_wol = efx_ethtool_set_wol, + .reset = efx_ethtool_reset, }; --- linux-2.6.32.orig/drivers/net/sfc/siena.c +++ linux-2.6.32/drivers/net/sfc/siena.c @@ -0,0 +1,614 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2005-2006 Fen Systems Ltd. + * Copyright 2006-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#include +#include +#include +#include +#include "net_driver.h" +#include "bitfield.h" +#include "efx.h" +#include "nic.h" +#include "mac.h" +#include "spi.h" +#include "regs.h" +#include "io.h" +#include "phy.h" +#include "workarounds.h" +#include "mcdi.h" +#include "mcdi_pcol.h" + +/* Hardware control for SFC9000 family including SFL9021 (aka Siena). */ + +static void siena_init_wol(struct efx_nic *efx); + + +static void siena_push_irq_moderation(struct efx_channel *channel) +{ + efx_dword_t timer_cmd; + + if (channel->irq_moderation) + EFX_POPULATE_DWORD_2(timer_cmd, + FRF_CZ_TC_TIMER_MODE, + FFE_CZ_TIMER_MODE_INT_HLDOFF, + FRF_CZ_TC_TIMER_VAL, + channel->irq_moderation - 1); + else + EFX_POPULATE_DWORD_2(timer_cmd, + FRF_CZ_TC_TIMER_MODE, + FFE_CZ_TIMER_MODE_DIS, + FRF_CZ_TC_TIMER_VAL, 0); + efx_writed_page_locked(channel->efx, &timer_cmd, FR_BZ_TIMER_COMMAND_P0, + channel->channel); +} + +static void siena_push_multicast_hash(struct efx_nic *efx) +{ + WARN_ON(!mutex_is_locked(&efx->mac_lock)); + + efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH, + efx->multicast_hash.byte, sizeof(efx->multicast_hash), + NULL, 0, NULL); +} + +static int siena_mdio_write(struct net_device *net_dev, + int prtad, int devad, u16 addr, u16 value) +{ + struct efx_nic *efx = netdev_priv(net_dev); + uint32_t status; + int rc; + + rc = efx_mcdi_mdio_write(efx, efx->mdio_bus, prtad, devad, + addr, value, &status); + if (rc) + return rc; + if (status != MC_CMD_MDIO_STATUS_GOOD) + return -EIO; + + return 0; +} + +static int siena_mdio_read(struct net_device *net_dev, + int prtad, int devad, u16 addr) +{ + struct efx_nic *efx = netdev_priv(net_dev); + uint16_t value; + uint32_t status; + int rc; + + rc = efx_mcdi_mdio_read(efx, efx->mdio_bus, prtad, devad, + addr, &value, &status); + if (rc) + return rc; + if (status != MC_CMD_MDIO_STATUS_GOOD) + return -EIO; + + return (int)value; +} + +/* This call is responsible for hooking in the MAC and PHY operations */ +static int siena_probe_port(struct efx_nic *efx) +{ + int rc; + + /* Hook in PHY operations table */ + efx->phy_op = &efx_mcdi_phy_ops; + + /* Set up MDIO structure for PHY */ + efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; + efx->mdio.mdio_read = siena_mdio_read; + efx->mdio.mdio_write = siena_mdio_write; + + /* Fill out MDIO structure and loopback modes */ + rc = efx->phy_op->probe(efx); + if (rc != 0) + return rc; + + /* Initial assumption */ + efx->link_state.speed = 10000; + efx->link_state.fd = true; + efx->wanted_fc = EFX_FC_RX | EFX_FC_TX; + + /* Allocate buffer for stats */ + rc = efx_nic_alloc_buffer(efx, &efx->stats_buffer, + MC_CMD_MAC_NSTATS * sizeof(u64)); + if (rc) + return rc; + EFX_LOG(efx, "stats buffer at %llx (virt %p phys %llx)\n", + (u64)efx->stats_buffer.dma_addr, + efx->stats_buffer.addr, + (u64)virt_to_phys(efx->stats_buffer.addr)); + + efx_mcdi_mac_stats(efx, efx->stats_buffer.dma_addr, 0, 0, 1); + + return 0; +} + +void siena_remove_port(struct efx_nic *efx) +{ + efx->phy_op->remove(efx); + efx_nic_free_buffer(efx, &efx->stats_buffer); +} + +static const struct efx_nic_register_test siena_register_tests[] = { + { FR_AZ_ADR_REGION, + EFX_OWORD32(0x0001FFFF, 0x0001FFFF, 0x0001FFFF, 0x0001FFFF) }, + { FR_CZ_USR_EV_CFG, + EFX_OWORD32(0x000103FF, 0x00000000, 0x00000000, 0x00000000) }, + { FR_AZ_RX_CFG, + EFX_OWORD32(0xFFFFFFFE, 0xFFFFFFFF, 0x0003FFFF, 0x00000000) }, + { FR_AZ_TX_CFG, + EFX_OWORD32(0x7FFF0037, 0xFFFF8000, 0xFFFFFFFF, 0x03FFFFFF) }, + { FR_AZ_TX_RESERVED, + EFX_OWORD32(0xFFFEFE80, 0x1FFFFFFF, 0x020000FE, 0x007FFFFF) }, + { FR_AZ_SRM_TX_DC_CFG, + EFX_OWORD32(0x001FFFFF, 0x00000000, 0x00000000, 0x00000000) }, + { FR_AZ_RX_DC_CFG, + EFX_OWORD32(0x00000003, 0x00000000, 0x00000000, 0x00000000) }, + { FR_AZ_RX_DC_PF_WM, + EFX_OWORD32(0x000003FF, 0x00000000, 0x00000000, 0x00000000) }, + { FR_BZ_DP_CTRL, + EFX_OWORD32(0x00000FFF, 0x00000000, 0x00000000, 0x00000000) }, + { FR_BZ_RX_RSS_TKEY, + EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF) }, + { FR_CZ_RX_RSS_IPV6_REG1, + EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF) }, + { FR_CZ_RX_RSS_IPV6_REG2, + EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF) }, + { FR_CZ_RX_RSS_IPV6_REG3, + EFX_OWORD32(0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000) }, +}; + +static int siena_test_registers(struct efx_nic *efx) +{ + return efx_nic_test_registers(efx, siena_register_tests, + ARRAY_SIZE(siena_register_tests)); +} + +/************************************************************************** + * + * Device reset + * + ************************************************************************** + */ + +static int siena_reset_hw(struct efx_nic *efx, enum reset_type method) +{ + + if (method == RESET_TYPE_WORLD) + return efx_mcdi_reset_mc(efx); + else + return efx_mcdi_reset_port(efx); +} + +static int siena_probe_nvconfig(struct efx_nic *efx) +{ + int rc; + + rc = efx_mcdi_get_board_cfg(efx, efx->mac_address, NULL); + if (rc) + return rc; + + return 0; +} + +static int siena_probe_nic(struct efx_nic *efx) +{ + struct siena_nic_data *nic_data; + bool already_attached = 0; + int rc; + + /* Allocate storage for hardware specific data */ + nic_data = kzalloc(sizeof(struct siena_nic_data), GFP_KERNEL); + if (!nic_data) + return -ENOMEM; + efx->nic_data = nic_data; + + if (efx_nic_fpga_ver(efx) != 0) { + EFX_ERR(efx, "Siena FPGA not supported\n"); + rc = -ENODEV; + goto fail1; + } + + efx_mcdi_init(efx); + + /* Recover from a failed assertion before probing */ + rc = efx_mcdi_handle_assertion(efx); + if (rc) + goto fail1; + + rc = efx_mcdi_fwver(efx, &nic_data->fw_version, &nic_data->fw_build); + if (rc) { + EFX_ERR(efx, "Failed to read MCPU firmware version - " + "rc %d\n", rc); + goto fail1; /* MCPU absent? */ + } + + /* Let the BMC know that the driver is now in charge of link and + * filter settings. We must do this before we reset the NIC */ + rc = efx_mcdi_drv_attach(efx, true, &already_attached); + if (rc) { + EFX_ERR(efx, "Unable to register driver with MCPU\n"); + goto fail2; + } + if (already_attached) + /* Not a fatal error */ + EFX_ERR(efx, "Host already registered with MCPU\n"); + + /* Now we can reset the NIC */ + rc = siena_reset_hw(efx, RESET_TYPE_ALL); + if (rc) { + EFX_ERR(efx, "failed to reset NIC\n"); + goto fail3; + } + + siena_init_wol(efx); + + /* Allocate memory for INT_KER */ + rc = efx_nic_alloc_buffer(efx, &efx->irq_status, sizeof(efx_oword_t)); + if (rc) + goto fail4; + BUG_ON(efx->irq_status.dma_addr & 0x0f); + + EFX_LOG(efx, "INT_KER at %llx (virt %p phys %llx)\n", + (unsigned long long)efx->irq_status.dma_addr, + efx->irq_status.addr, + (unsigned long long)virt_to_phys(efx->irq_status.addr)); + + /* Read in the non-volatile configuration */ + rc = siena_probe_nvconfig(efx); + if (rc == -EINVAL) { + EFX_ERR(efx, "NVRAM is invalid therefore using defaults\n"); + efx->phy_type = PHY_TYPE_NONE; + efx->mdio.prtad = MDIO_PRTAD_NONE; + } else if (rc) { + goto fail5; + } + + return 0; + +fail5: + efx_nic_free_buffer(efx, &efx->irq_status); +fail4: +fail3: + efx_mcdi_drv_attach(efx, false, NULL); +fail2: +fail1: + kfree(efx->nic_data); + return rc; +} + +/* This call performs hardware-specific global initialisation, such as + * defining the descriptor cache sizes and number of RSS channels. + * It does not set up any buffers, descriptor rings or event queues. + */ +static int siena_init_nic(struct efx_nic *efx) +{ + efx_oword_t temp; + int rc; + + /* Recover from a failed assertion post-reset */ + rc = efx_mcdi_handle_assertion(efx); + if (rc) + return rc; + + /* Squash TX of packets of 16 bytes or less */ + efx_reado(efx, &temp, FR_AZ_TX_RESERVED); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_TX_FLUSH_MIN_LEN_EN, 1); + efx_writeo(efx, &temp, FR_AZ_TX_RESERVED); + + /* Do not enable TX_NO_EOP_DISC_EN, since it limits packets to 16 + * descriptors (which is bad). + */ + efx_reado(efx, &temp, FR_AZ_TX_CFG); + EFX_SET_OWORD_FIELD(temp, FRF_AZ_TX_NO_EOP_DISC_EN, 0); + EFX_SET_OWORD_FIELD(temp, FRF_CZ_TX_FILTER_EN_BIT, 1); + efx_writeo(efx, &temp, FR_AZ_TX_CFG); + + efx_reado(efx, &temp, FR_AZ_RX_CFG); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_DESC_PUSH_EN, 0); + EFX_SET_OWORD_FIELD(temp, FRF_BZ_RX_INGR_EN, 1); + efx_writeo(efx, &temp, FR_AZ_RX_CFG); + + if (efx_nic_rx_xoff_thresh >= 0 || efx_nic_rx_xon_thresh >= 0) + /* No MCDI operation has been defined to set thresholds */ + EFX_ERR(efx, "ignoring RX flow control thresholds\n"); + + /* Enable event logging */ + rc = efx_mcdi_log_ctrl(efx, true, false, 0); + if (rc) + return rc; + + /* Set destination of both TX and RX Flush events */ + EFX_POPULATE_OWORD_1(temp, FRF_BZ_FLS_EVQ_ID, 0); + efx_writeo(efx, &temp, FR_BZ_DP_CTRL); + + EFX_POPULATE_OWORD_1(temp, FRF_CZ_USREV_DIS, 1); + efx_writeo(efx, &temp, FR_CZ_USR_EV_CFG); + + efx_nic_init_common(efx); + return 0; +} + +static void siena_remove_nic(struct efx_nic *efx) +{ + efx_nic_free_buffer(efx, &efx->irq_status); + + siena_reset_hw(efx, RESET_TYPE_ALL); + + /* Relinquish the device back to the BMC */ + if (efx_nic_has_mc(efx)) + efx_mcdi_drv_attach(efx, false, NULL); + + /* Tear down the private nic state */ + kfree(efx->nic_data); + efx->nic_data = NULL; +} + +#define STATS_GENERATION_INVALID ((u64)(-1)) + +static int siena_try_update_nic_stats(struct efx_nic *efx) +{ + u64 *dma_stats; + struct efx_mac_stats *mac_stats; + u64 generation_start; + u64 generation_end; + + mac_stats = &efx->mac_stats; + dma_stats = (u64 *)efx->stats_buffer.addr; + + generation_end = dma_stats[MC_CMD_MAC_GENERATION_END]; + if (generation_end == STATS_GENERATION_INVALID) + return 0; + rmb(); + +#define MAC_STAT(M, D) \ + mac_stats->M = dma_stats[MC_CMD_MAC_ ## D] + + MAC_STAT(tx_bytes, TX_BYTES); + MAC_STAT(tx_bad_bytes, TX_BAD_BYTES); + mac_stats->tx_good_bytes = (mac_stats->tx_bytes - + mac_stats->tx_bad_bytes); + MAC_STAT(tx_packets, TX_PKTS); + MAC_STAT(tx_bad, TX_BAD_FCS_PKTS); + MAC_STAT(tx_pause, TX_PAUSE_PKTS); + MAC_STAT(tx_control, TX_CONTROL_PKTS); + MAC_STAT(tx_unicast, TX_UNICAST_PKTS); + MAC_STAT(tx_multicast, TX_MULTICAST_PKTS); + MAC_STAT(tx_broadcast, TX_BROADCAST_PKTS); + MAC_STAT(tx_lt64, TX_LT64_PKTS); + MAC_STAT(tx_64, TX_64_PKTS); + MAC_STAT(tx_65_to_127, TX_65_TO_127_PKTS); + MAC_STAT(tx_128_to_255, TX_128_TO_255_PKTS); + MAC_STAT(tx_256_to_511, TX_256_TO_511_PKTS); + MAC_STAT(tx_512_to_1023, TX_512_TO_1023_PKTS); + MAC_STAT(tx_1024_to_15xx, TX_1024_TO_15XX_PKTS); + MAC_STAT(tx_15xx_to_jumbo, TX_15XX_TO_JUMBO_PKTS); + MAC_STAT(tx_gtjumbo, TX_GTJUMBO_PKTS); + mac_stats->tx_collision = 0; + MAC_STAT(tx_single_collision, TX_SINGLE_COLLISION_PKTS); + MAC_STAT(tx_multiple_collision, TX_MULTIPLE_COLLISION_PKTS); + MAC_STAT(tx_excessive_collision, TX_EXCESSIVE_COLLISION_PKTS); + MAC_STAT(tx_deferred, TX_DEFERRED_PKTS); + MAC_STAT(tx_late_collision, TX_LATE_COLLISION_PKTS); + mac_stats->tx_collision = (mac_stats->tx_single_collision + + mac_stats->tx_multiple_collision + + mac_stats->tx_excessive_collision + + mac_stats->tx_late_collision); + MAC_STAT(tx_excessive_deferred, TX_EXCESSIVE_DEFERRED_PKTS); + MAC_STAT(tx_non_tcpudp, TX_NON_TCPUDP_PKTS); + MAC_STAT(tx_mac_src_error, TX_MAC_SRC_ERR_PKTS); + MAC_STAT(tx_ip_src_error, TX_IP_SRC_ERR_PKTS); + MAC_STAT(rx_bytes, RX_BYTES); + MAC_STAT(rx_bad_bytes, RX_BAD_BYTES); + mac_stats->rx_good_bytes = (mac_stats->rx_bytes - + mac_stats->rx_bad_bytes); + MAC_STAT(rx_packets, RX_PKTS); + MAC_STAT(rx_good, RX_GOOD_PKTS); + mac_stats->rx_bad = mac_stats->rx_packets - mac_stats->rx_good; + MAC_STAT(rx_pause, RX_PAUSE_PKTS); + MAC_STAT(rx_control, RX_CONTROL_PKTS); + MAC_STAT(rx_unicast, RX_UNICAST_PKTS); + MAC_STAT(rx_multicast, RX_MULTICAST_PKTS); + MAC_STAT(rx_broadcast, RX_BROADCAST_PKTS); + MAC_STAT(rx_lt64, RX_UNDERSIZE_PKTS); + MAC_STAT(rx_64, RX_64_PKTS); + MAC_STAT(rx_65_to_127, RX_65_TO_127_PKTS); + MAC_STAT(rx_128_to_255, RX_128_TO_255_PKTS); + MAC_STAT(rx_256_to_511, RX_256_TO_511_PKTS); + MAC_STAT(rx_512_to_1023, RX_512_TO_1023_PKTS); + MAC_STAT(rx_1024_to_15xx, RX_1024_TO_15XX_PKTS); + MAC_STAT(rx_15xx_to_jumbo, RX_15XX_TO_JUMBO_PKTS); + MAC_STAT(rx_gtjumbo, RX_GTJUMBO_PKTS); + mac_stats->rx_bad_lt64 = 0; + mac_stats->rx_bad_64_to_15xx = 0; + mac_stats->rx_bad_15xx_to_jumbo = 0; + MAC_STAT(rx_bad_gtjumbo, RX_JABBER_PKTS); + MAC_STAT(rx_overflow, RX_OVERFLOW_PKTS); + mac_stats->rx_missed = 0; + MAC_STAT(rx_false_carrier, RX_FALSE_CARRIER_PKTS); + MAC_STAT(rx_symbol_error, RX_SYMBOL_ERROR_PKTS); + MAC_STAT(rx_align_error, RX_ALIGN_ERROR_PKTS); + MAC_STAT(rx_length_error, RX_LENGTH_ERROR_PKTS); + MAC_STAT(rx_internal_error, RX_INTERNAL_ERROR_PKTS); + mac_stats->rx_good_lt64 = 0; + + efx->n_rx_nodesc_drop_cnt = dma_stats[MC_CMD_MAC_RX_NODESC_DROPS]; + +#undef MAC_STAT + + rmb(); + generation_start = dma_stats[MC_CMD_MAC_GENERATION_START]; + if (generation_end != generation_start) + return -EAGAIN; + + return 0; +} + +static void siena_update_nic_stats(struct efx_nic *efx) +{ + int retry; + + /* If we're unlucky enough to read statistics wduring the DMA, wait + * up to 10ms for it to finish (typically takes <500us) */ + for (retry = 0; retry < 100; ++retry) { + if (siena_try_update_nic_stats(efx) == 0) + return; + udelay(100); + } + + /* Use the old values instead */ +} + +static void siena_start_nic_stats(struct efx_nic *efx) +{ + u64 *dma_stats = (u64 *)efx->stats_buffer.addr; + + dma_stats[MC_CMD_MAC_GENERATION_END] = STATS_GENERATION_INVALID; + + efx_mcdi_mac_stats(efx, efx->stats_buffer.dma_addr, + MC_CMD_MAC_NSTATS * sizeof(u64), 1, 0); +} + +static void siena_stop_nic_stats(struct efx_nic *efx) +{ + efx_mcdi_mac_stats(efx, efx->stats_buffer.dma_addr, 0, 0, 0); +} + +void siena_print_fwver(struct efx_nic *efx, char *buf, size_t len) +{ + struct siena_nic_data *nic_data = efx->nic_data; + snprintf(buf, len, "%u.%u.%u.%u", + (unsigned int)(nic_data->fw_version >> 48), + (unsigned int)(nic_data->fw_version >> 32 & 0xffff), + (unsigned int)(nic_data->fw_version >> 16 & 0xffff), + (unsigned int)(nic_data->fw_version & 0xffff)); +} + +/************************************************************************** + * + * Wake on LAN + * + ************************************************************************** + */ + +static void siena_get_wol(struct efx_nic *efx, struct ethtool_wolinfo *wol) +{ + struct siena_nic_data *nic_data = efx->nic_data; + + wol->supported = WAKE_MAGIC; + if (nic_data->wol_filter_id != -1) + wol->wolopts = WAKE_MAGIC; + else + wol->wolopts = 0; + memset(&wol->sopass, 0, sizeof(wol->sopass)); +} + + +static int siena_set_wol(struct efx_nic *efx, u32 type) +{ + struct siena_nic_data *nic_data = efx->nic_data; + int rc; + + if (type & ~WAKE_MAGIC) + return -EINVAL; + + if (type & WAKE_MAGIC) { + if (nic_data->wol_filter_id != -1) + efx_mcdi_wol_filter_remove(efx, + nic_data->wol_filter_id); + rc = efx_mcdi_wol_filter_set_magic(efx, efx->mac_address, + &nic_data->wol_filter_id); + if (rc) + goto fail; + + pci_wake_from_d3(efx->pci_dev, true); + } else { + rc = efx_mcdi_wol_filter_reset(efx); + nic_data->wol_filter_id = -1; + pci_wake_from_d3(efx->pci_dev, false); + if (rc) + goto fail; + } + + return 0; + fail: + EFX_ERR(efx, "%s failed: type=%d rc=%d\n", __func__, type, rc); + return rc; +} + + +static void siena_init_wol(struct efx_nic *efx) +{ + struct siena_nic_data *nic_data = efx->nic_data; + int rc; + + rc = efx_mcdi_wol_filter_get_magic(efx, &nic_data->wol_filter_id); + + if (rc != 0) { + /* If it failed, attempt to get into a synchronised + * state with MC by resetting any set WoL filters */ + efx_mcdi_wol_filter_reset(efx); + nic_data->wol_filter_id = -1; + } else if (nic_data->wol_filter_id != -1) { + pci_wake_from_d3(efx->pci_dev, true); + } +} + + +/************************************************************************** + * + * Revision-dependent attributes used by efx.c and nic.c + * + ************************************************************************** + */ + +struct efx_nic_type siena_a0_nic_type = { + .probe = siena_probe_nic, + .remove = siena_remove_nic, + .init = siena_init_nic, + .fini = efx_port_dummy_op_void, + .monitor = NULL, + .reset = siena_reset_hw, + .probe_port = siena_probe_port, + .remove_port = siena_remove_port, + .prepare_flush = efx_port_dummy_op_void, + .update_stats = siena_update_nic_stats, + .start_stats = siena_start_nic_stats, + .stop_stats = siena_stop_nic_stats, + .set_id_led = efx_mcdi_set_id_led, + .push_irq_moderation = siena_push_irq_moderation, + .push_multicast_hash = siena_push_multicast_hash, + .reconfigure_port = efx_mcdi_phy_reconfigure, + .get_wol = siena_get_wol, + .set_wol = siena_set_wol, + .resume_wol = siena_init_wol, + .test_registers = siena_test_registers, + .default_mac_ops = &efx_mcdi_mac_operations, + + .revision = EFX_REV_SIENA_A0, + .mem_map_size = (FR_CZ_MC_TREG_SMEM + + FR_CZ_MC_TREG_SMEM_STEP * FR_CZ_MC_TREG_SMEM_ROWS), + .txd_ptr_tbl_base = FR_BZ_TX_DESC_PTR_TBL, + .rxd_ptr_tbl_base = FR_BZ_RX_DESC_PTR_TBL, + .buf_tbl_base = FR_BZ_BUF_FULL_TBL, + .evq_ptr_tbl_base = FR_BZ_EVQ_PTR_TBL, + .evq_rptr_tbl_base = FR_BZ_EVQ_RPTR, + .max_dma_mask = DMA_BIT_MASK(FSF_AZ_TX_KER_BUF_ADDR_WIDTH), + .rx_buffer_padding = 0, + .max_interrupt_mode = EFX_INT_MODE_MSIX, + .phys_addr_channels = 32, /* Hardware limit is 64, but the legacy + * interrupt handler only supports 32 + * channels */ + .tx_dc_base = 0x88000, + .rx_dc_base = 0x68000, + .offload_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM, + .reset_world_flags = ETH_RESET_MGMT << ETH_RESET_SHARED_SHIFT, +}; --- linux-2.6.32.orig/drivers/net/sfc/Kconfig +++ linux-2.6.32/drivers/net/sfc/Kconfig @@ -1,5 +1,5 @@ config SFC - tristate "Solarflare Solarstorm SFC4000 support" + tristate "Solarflare Solarstorm SFC4000/SFC9000-family support" depends on PCI && INET select MDIO select CRC32 @@ -7,15 +7,16 @@ select I2C_ALGOBIT help This driver supports 10-gigabit Ethernet cards based on - the Solarflare Communications Solarstorm SFC4000 controller. + the Solarflare Communications Solarstorm SFC4000 and + SFC9000-family controllers. To compile this driver as a module, choose M here. The module will be called sfc. config SFC_MTD - bool "Solarflare Solarstorm SFC4000 flash MTD support" + bool "Solarflare Solarstorm SFC4000/SFC9000-family MTD support" depends on SFC && MTD && !(SFC=y && MTD=m) default y help - This exposes the on-board flash memory as an MTD device (e.g. - /dev/mtd1). This makes it possible to upload new boot code - to the NIC. + This exposes the on-board flash memory as MTD devices (e.g. + /dev/mtd1). This makes it possible to upload new firmware + to the NIC. --- linux-2.6.32.orig/drivers/net/sfc/phy.h +++ linux-2.6.32/drivers/net/sfc/phy.h @@ -1,6 +1,6 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards - * Copyright 2007-2008 Solarflare Communications Inc. + * Copyright 2007-2009 Solarflare Communications Inc. * * 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 @@ -16,16 +16,16 @@ extern struct efx_phy_operations falcon_sfx7101_phy_ops; extern struct efx_phy_operations falcon_sft9001_phy_ops; -extern void tenxpress_phy_blink(struct efx_nic *efx, bool blink); +extern void tenxpress_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); /* Wait for the PHY to boot. Return 0 on success, -EINVAL if the PHY failed * to boot due to corrupt flash, or some other negative error code. */ extern int sft9001_wait_boot(struct efx_nic *efx); /**************************************************************************** - * AMCC/Quake QT20xx PHYs + * AMCC/Quake QT202x PHYs */ -extern struct efx_phy_operations falcon_xfp_phy_ops; +extern struct efx_phy_operations falcon_qt202x_phy_ops; /* These PHYs provide various H/W control states for LEDs */ #define QUAKE_LED_LINK_INVAL (0) @@ -39,6 +39,23 @@ #define QUAKE_LED_TXLINK (0) #define QUAKE_LED_RXLINK (8) -extern void xfp_set_led(struct efx_nic *p, int led, int state); +extern void falcon_qt202x_set_led(struct efx_nic *p, int led, int state); + +/**************************************************************************** + * Siena managed PHYs + */ +extern struct efx_phy_operations efx_mcdi_phy_ops; + +extern int efx_mcdi_mdio_read(struct efx_nic *efx, unsigned int bus, + unsigned int prtad, unsigned int devad, + u16 addr, u16 *value_out, u32 *status_out); +extern int efx_mcdi_mdio_write(struct efx_nic *efx, unsigned int bus, + unsigned int prtad, unsigned int devad, + u16 addr, u16 value, u32 *status_out); +extern void efx_mcdi_phy_decode_link(struct efx_nic *efx, + struct efx_link_state *link_state, + u32 speed, u32 flags, u32 fcntl); +extern int efx_mcdi_phy_reconfigure(struct efx_nic *efx); +extern void efx_mcdi_phy_check_fcntl(struct efx_nic *efx, u32 lpa); #endif --- linux-2.6.32.orig/drivers/net/sfc/regs.h +++ linux-2.6.32/drivers/net/sfc/regs.h @@ -0,0 +1,3168 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2005-2006 Fen Systems Ltd. + * Copyright 2006-2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +#ifndef EFX_REGS_H +#define EFX_REGS_H + +/* + * Falcon hardware architecture definitions have a name prefix following + * the format: + * + * F__ + * + * The following strings are used: + * + * MMIO register MC register Host memory structure + * ------------------------------------------------------------- + * Address R MCR + * Bitfield RF MCRF SF + * Enumerator FE MCFE SE + * + * is the first revision to which the definition applies: + * + * A: Falcon A1 (SFC4000AB) + * B: Falcon B0 (SFC4000BA) + * C: Siena A0 (SFL9021AA) + * + * If the definition has been changed or removed in later revisions + * then is the last revision to which the definition applies; + * otherwise it is "Z". + */ + +/************************************************************************** + * + * Falcon/Siena registers and descriptors + * + ************************************************************************** + */ + +/* ADR_REGION_REG: Address region register */ +#define FR_AZ_ADR_REGION 0x00000000 +#define FRF_AZ_ADR_REGION3_LBN 96 +#define FRF_AZ_ADR_REGION3_WIDTH 18 +#define FRF_AZ_ADR_REGION2_LBN 64 +#define FRF_AZ_ADR_REGION2_WIDTH 18 +#define FRF_AZ_ADR_REGION1_LBN 32 +#define FRF_AZ_ADR_REGION1_WIDTH 18 +#define FRF_AZ_ADR_REGION0_LBN 0 +#define FRF_AZ_ADR_REGION0_WIDTH 18 + +/* INT_EN_REG_KER: Kernel driver Interrupt enable register */ +#define FR_AZ_INT_EN_KER 0x00000010 +#define FRF_AZ_KER_INT_LEVE_SEL_LBN 8 +#define FRF_AZ_KER_INT_LEVE_SEL_WIDTH 6 +#define FRF_AZ_KER_INT_CHAR_LBN 4 +#define FRF_AZ_KER_INT_CHAR_WIDTH 1 +#define FRF_AZ_KER_INT_KER_LBN 3 +#define FRF_AZ_KER_INT_KER_WIDTH 1 +#define FRF_AZ_DRV_INT_EN_KER_LBN 0 +#define FRF_AZ_DRV_INT_EN_KER_WIDTH 1 + +/* INT_EN_REG_CHAR: Char Driver interrupt enable register */ +#define FR_BZ_INT_EN_CHAR 0x00000020 +#define FRF_BZ_CHAR_INT_LEVE_SEL_LBN 8 +#define FRF_BZ_CHAR_INT_LEVE_SEL_WIDTH 6 +#define FRF_BZ_CHAR_INT_CHAR_LBN 4 +#define FRF_BZ_CHAR_INT_CHAR_WIDTH 1 +#define FRF_BZ_CHAR_INT_KER_LBN 3 +#define FRF_BZ_CHAR_INT_KER_WIDTH 1 +#define FRF_BZ_DRV_INT_EN_CHAR_LBN 0 +#define FRF_BZ_DRV_INT_EN_CHAR_WIDTH 1 + +/* INT_ADR_REG_KER: Interrupt host address for Kernel driver */ +#define FR_AZ_INT_ADR_KER 0x00000030 +#define FRF_AZ_NORM_INT_VEC_DIS_KER_LBN 64 +#define FRF_AZ_NORM_INT_VEC_DIS_KER_WIDTH 1 +#define FRF_AZ_INT_ADR_KER_LBN 0 +#define FRF_AZ_INT_ADR_KER_WIDTH 64 + +/* INT_ADR_REG_CHAR: Interrupt host address for Char driver */ +#define FR_BZ_INT_ADR_CHAR 0x00000040 +#define FRF_BZ_NORM_INT_VEC_DIS_CHAR_LBN 64 +#define FRF_BZ_NORM_INT_VEC_DIS_CHAR_WIDTH 1 +#define FRF_BZ_INT_ADR_CHAR_LBN 0 +#define FRF_BZ_INT_ADR_CHAR_WIDTH 64 + +/* INT_ACK_KER: Kernel interrupt acknowledge register */ +#define FR_AA_INT_ACK_KER 0x00000050 +#define FRF_AA_INT_ACK_KER_FIELD_LBN 0 +#define FRF_AA_INT_ACK_KER_FIELD_WIDTH 32 + +/* INT_ISR0_REG: Function 0 Interrupt Acknowlege Status register */ +#define FR_BZ_INT_ISR0 0x00000090 +#define FRF_BZ_INT_ISR_REG_LBN 0 +#define FRF_BZ_INT_ISR_REG_WIDTH 64 + +/* HW_INIT_REG: Hardware initialization register */ +#define FR_AZ_HW_INIT 0x000000c0 +#define FRF_BB_BDMRD_CPLF_FULL_LBN 124 +#define FRF_BB_BDMRD_CPLF_FULL_WIDTH 1 +#define FRF_BB_PCIE_CPL_TIMEOUT_CTRL_LBN 121 +#define FRF_BB_PCIE_CPL_TIMEOUT_CTRL_WIDTH 3 +#define FRF_CZ_TX_MRG_TAGS_LBN 120 +#define FRF_CZ_TX_MRG_TAGS_WIDTH 1 +#define FRF_AB_TRGT_MASK_ALL_LBN 100 +#define FRF_AB_TRGT_MASK_ALL_WIDTH 1 +#define FRF_AZ_DOORBELL_DROP_LBN 92 +#define FRF_AZ_DOORBELL_DROP_WIDTH 8 +#define FRF_AB_TX_RREQ_MASK_EN_LBN 76 +#define FRF_AB_TX_RREQ_MASK_EN_WIDTH 1 +#define FRF_AB_PE_EIDLE_DIS_LBN 75 +#define FRF_AB_PE_EIDLE_DIS_WIDTH 1 +#define FRF_AA_FC_BLOCKING_EN_LBN 45 +#define FRF_AA_FC_BLOCKING_EN_WIDTH 1 +#define FRF_BZ_B2B_REQ_EN_LBN 45 +#define FRF_BZ_B2B_REQ_EN_WIDTH 1 +#define FRF_AA_B2B_REQ_EN_LBN 44 +#define FRF_AA_B2B_REQ_EN_WIDTH 1 +#define FRF_BB_FC_BLOCKING_EN_LBN 44 +#define FRF_BB_FC_BLOCKING_EN_WIDTH 1 +#define FRF_AZ_POST_WR_MASK_LBN 40 +#define FRF_AZ_POST_WR_MASK_WIDTH 4 +#define FRF_AZ_TLP_TC_LBN 34 +#define FRF_AZ_TLP_TC_WIDTH 3 +#define FRF_AZ_TLP_ATTR_LBN 32 +#define FRF_AZ_TLP_ATTR_WIDTH 2 +#define FRF_AB_INTB_VEC_LBN 24 +#define FRF_AB_INTB_VEC_WIDTH 5 +#define FRF_AB_INTA_VEC_LBN 16 +#define FRF_AB_INTA_VEC_WIDTH 5 +#define FRF_AZ_WD_TIMER_LBN 8 +#define FRF_AZ_WD_TIMER_WIDTH 8 +#define FRF_AZ_US_DISABLE_LBN 5 +#define FRF_AZ_US_DISABLE_WIDTH 1 +#define FRF_AZ_TLP_EP_LBN 4 +#define FRF_AZ_TLP_EP_WIDTH 1 +#define FRF_AZ_ATTR_SEL_LBN 3 +#define FRF_AZ_ATTR_SEL_WIDTH 1 +#define FRF_AZ_TD_SEL_LBN 1 +#define FRF_AZ_TD_SEL_WIDTH 1 +#define FRF_AZ_TLP_TD_LBN 0 +#define FRF_AZ_TLP_TD_WIDTH 1 + +/* EE_SPI_HCMD_REG: SPI host command register */ +#define FR_AB_EE_SPI_HCMD 0x00000100 +#define FRF_AB_EE_SPI_HCMD_CMD_EN_LBN 31 +#define FRF_AB_EE_SPI_HCMD_CMD_EN_WIDTH 1 +#define FRF_AB_EE_WR_TIMER_ACTIVE_LBN 28 +#define FRF_AB_EE_WR_TIMER_ACTIVE_WIDTH 1 +#define FRF_AB_EE_SPI_HCMD_SF_SEL_LBN 24 +#define FRF_AB_EE_SPI_HCMD_SF_SEL_WIDTH 1 +#define FRF_AB_EE_SPI_HCMD_DABCNT_LBN 16 +#define FRF_AB_EE_SPI_HCMD_DABCNT_WIDTH 5 +#define FRF_AB_EE_SPI_HCMD_READ_LBN 15 +#define FRF_AB_EE_SPI_HCMD_READ_WIDTH 1 +#define FRF_AB_EE_SPI_HCMD_DUBCNT_LBN 12 +#define FRF_AB_EE_SPI_HCMD_DUBCNT_WIDTH 2 +#define FRF_AB_EE_SPI_HCMD_ADBCNT_LBN 8 +#define FRF_AB_EE_SPI_HCMD_ADBCNT_WIDTH 2 +#define FRF_AB_EE_SPI_HCMD_ENC_LBN 0 +#define FRF_AB_EE_SPI_HCMD_ENC_WIDTH 8 + +/* USR_EV_CFG: User Level Event Configuration register */ +#define FR_CZ_USR_EV_CFG 0x00000100 +#define FRF_CZ_USREV_DIS_LBN 16 +#define FRF_CZ_USREV_DIS_WIDTH 1 +#define FRF_CZ_DFLT_EVQ_LBN 0 +#define FRF_CZ_DFLT_EVQ_WIDTH 10 + +/* EE_SPI_HADR_REG: SPI host address register */ +#define FR_AB_EE_SPI_HADR 0x00000110 +#define FRF_AB_EE_SPI_HADR_DUBYTE_LBN 24 +#define FRF_AB_EE_SPI_HADR_DUBYTE_WIDTH 8 +#define FRF_AB_EE_SPI_HADR_ADR_LBN 0 +#define FRF_AB_EE_SPI_HADR_ADR_WIDTH 24 + +/* EE_SPI_HDATA_REG: SPI host data register */ +#define FR_AB_EE_SPI_HDATA 0x00000120 +#define FRF_AB_EE_SPI_HDATA3_LBN 96 +#define FRF_AB_EE_SPI_HDATA3_WIDTH 32 +#define FRF_AB_EE_SPI_HDATA2_LBN 64 +#define FRF_AB_EE_SPI_HDATA2_WIDTH 32 +#define FRF_AB_EE_SPI_HDATA1_LBN 32 +#define FRF_AB_EE_SPI_HDATA1_WIDTH 32 +#define FRF_AB_EE_SPI_HDATA0_LBN 0 +#define FRF_AB_EE_SPI_HDATA0_WIDTH 32 + +/* EE_BASE_PAGE_REG: Expansion ROM base mirror register */ +#define FR_AB_EE_BASE_PAGE 0x00000130 +#define FRF_AB_EE_EXPROM_MASK_LBN 16 +#define FRF_AB_EE_EXPROM_MASK_WIDTH 13 +#define FRF_AB_EE_EXP_ROM_WINDOW_BASE_LBN 0 +#define FRF_AB_EE_EXP_ROM_WINDOW_BASE_WIDTH 13 + +/* EE_VPD_CFG0_REG: SPI/VPD configuration register 0 */ +#define FR_AB_EE_VPD_CFG0 0x00000140 +#define FRF_AB_EE_SF_FASTRD_EN_LBN 127 +#define FRF_AB_EE_SF_FASTRD_EN_WIDTH 1 +#define FRF_AB_EE_SF_CLOCK_DIV_LBN 120 +#define FRF_AB_EE_SF_CLOCK_DIV_WIDTH 7 +#define FRF_AB_EE_VPD_WIP_POLL_LBN 119 +#define FRF_AB_EE_VPD_WIP_POLL_WIDTH 1 +#define FRF_AB_EE_EE_CLOCK_DIV_LBN 112 +#define FRF_AB_EE_EE_CLOCK_DIV_WIDTH 7 +#define FRF_AB_EE_EE_WR_TMR_VALUE_LBN 96 +#define FRF_AB_EE_EE_WR_TMR_VALUE_WIDTH 16 +#define FRF_AB_EE_VPDW_LENGTH_LBN 80 +#define FRF_AB_EE_VPDW_LENGTH_WIDTH 15 +#define FRF_AB_EE_VPDW_BASE_LBN 64 +#define FRF_AB_EE_VPDW_BASE_WIDTH 15 +#define FRF_AB_EE_VPD_WR_CMD_EN_LBN 56 +#define FRF_AB_EE_VPD_WR_CMD_EN_WIDTH 8 +#define FRF_AB_EE_VPD_BASE_LBN 32 +#define FRF_AB_EE_VPD_BASE_WIDTH 24 +#define FRF_AB_EE_VPD_LENGTH_LBN 16 +#define FRF_AB_EE_VPD_LENGTH_WIDTH 15 +#define FRF_AB_EE_VPD_AD_SIZE_LBN 8 +#define FRF_AB_EE_VPD_AD_SIZE_WIDTH 5 +#define FRF_AB_EE_VPD_ACCESS_ON_LBN 5 +#define FRF_AB_EE_VPD_ACCESS_ON_WIDTH 1 +#define FRF_AB_EE_VPD_ACCESS_BLOCK_LBN 4 +#define FRF_AB_EE_VPD_ACCESS_BLOCK_WIDTH 1 +#define FRF_AB_EE_VPD_DEV_SF_SEL_LBN 2 +#define FRF_AB_EE_VPD_DEV_SF_SEL_WIDTH 1 +#define FRF_AB_EE_VPD_EN_AD9_MODE_LBN 1 +#define FRF_AB_EE_VPD_EN_AD9_MODE_WIDTH 1 +#define FRF_AB_EE_VPD_EN_LBN 0 +#define FRF_AB_EE_VPD_EN_WIDTH 1 + +/* EE_VPD_SW_CNTL_REG: VPD access SW control register */ +#define FR_AB_EE_VPD_SW_CNTL 0x00000150 +#define FRF_AB_EE_VPD_CYCLE_PENDING_LBN 31 +#define FRF_AB_EE_VPD_CYCLE_PENDING_WIDTH 1 +#define FRF_AB_EE_VPD_CYC_WRITE_LBN 28 +#define FRF_AB_EE_VPD_CYC_WRITE_WIDTH 1 +#define FRF_AB_EE_VPD_CYC_ADR_LBN 0 +#define FRF_AB_EE_VPD_CYC_ADR_WIDTH 15 + +/* EE_VPD_SW_DATA_REG: VPD access SW data register */ +#define FR_AB_EE_VPD_SW_DATA 0x00000160 +#define FRF_AB_EE_VPD_CYC_DAT_LBN 0 +#define FRF_AB_EE_VPD_CYC_DAT_WIDTH 32 + +/* PBMX_DBG_IADDR_REG: Capture Module address register */ +#define FR_CZ_PBMX_DBG_IADDR 0x000001f0 +#define FRF_CZ_PBMX_DBG_IADDR_LBN 0 +#define FRF_CZ_PBMX_DBG_IADDR_WIDTH 32 + +/* PCIE_CORE_INDIRECT_REG: Indirect Access to PCIE Core registers */ +#define FR_BB_PCIE_CORE_INDIRECT 0x000001f0 +#define FRF_BB_PCIE_CORE_TARGET_DATA_LBN 32 +#define FRF_BB_PCIE_CORE_TARGET_DATA_WIDTH 32 +#define FRF_BB_PCIE_CORE_INDIRECT_ACCESS_DIR_LBN 15 +#define FRF_BB_PCIE_CORE_INDIRECT_ACCESS_DIR_WIDTH 1 +#define FRF_BB_PCIE_CORE_TARGET_REG_ADRS_LBN 0 +#define FRF_BB_PCIE_CORE_TARGET_REG_ADRS_WIDTH 12 + +/* PBMX_DBG_IDATA_REG: Capture Module data register */ +#define FR_CZ_PBMX_DBG_IDATA 0x000001f8 +#define FRF_CZ_PBMX_DBG_IDATA_LBN 0 +#define FRF_CZ_PBMX_DBG_IDATA_WIDTH 64 + +/* NIC_STAT_REG: NIC status register */ +#define FR_AB_NIC_STAT 0x00000200 +#define FRF_BB_AER_DIS_LBN 34 +#define FRF_BB_AER_DIS_WIDTH 1 +#define FRF_BB_EE_STRAP_EN_LBN 31 +#define FRF_BB_EE_STRAP_EN_WIDTH 1 +#define FRF_BB_EE_STRAP_LBN 24 +#define FRF_BB_EE_STRAP_WIDTH 4 +#define FRF_BB_REVISION_ID_LBN 17 +#define FRF_BB_REVISION_ID_WIDTH 7 +#define FRF_AB_ONCHIP_SRAM_LBN 16 +#define FRF_AB_ONCHIP_SRAM_WIDTH 1 +#define FRF_AB_SF_PRST_LBN 9 +#define FRF_AB_SF_PRST_WIDTH 1 +#define FRF_AB_EE_PRST_LBN 8 +#define FRF_AB_EE_PRST_WIDTH 1 +#define FRF_AB_ATE_MODE_LBN 3 +#define FRF_AB_ATE_MODE_WIDTH 1 +#define FRF_AB_STRAP_PINS_LBN 0 +#define FRF_AB_STRAP_PINS_WIDTH 3 + +/* GPIO_CTL_REG: GPIO control register */ +#define FR_AB_GPIO_CTL 0x00000210 +#define FRF_AB_GPIO_OUT3_LBN 112 +#define FRF_AB_GPIO_OUT3_WIDTH 16 +#define FRF_AB_GPIO_IN3_LBN 104 +#define FRF_AB_GPIO_IN3_WIDTH 8 +#define FRF_AB_GPIO_PWRUP_VALUE3_LBN 96 +#define FRF_AB_GPIO_PWRUP_VALUE3_WIDTH 8 +#define FRF_AB_GPIO_OUT2_LBN 80 +#define FRF_AB_GPIO_OUT2_WIDTH 16 +#define FRF_AB_GPIO_IN2_LBN 72 +#define FRF_AB_GPIO_IN2_WIDTH 8 +#define FRF_AB_GPIO_PWRUP_VALUE2_LBN 64 +#define FRF_AB_GPIO_PWRUP_VALUE2_WIDTH 8 +#define FRF_AB_GPIO15_OEN_LBN 63 +#define FRF_AB_GPIO15_OEN_WIDTH 1 +#define FRF_AB_GPIO14_OEN_LBN 62 +#define FRF_AB_GPIO14_OEN_WIDTH 1 +#define FRF_AB_GPIO13_OEN_LBN 61 +#define FRF_AB_GPIO13_OEN_WIDTH 1 +#define FRF_AB_GPIO12_OEN_LBN 60 +#define FRF_AB_GPIO12_OEN_WIDTH 1 +#define FRF_AB_GPIO11_OEN_LBN 59 +#define FRF_AB_GPIO11_OEN_WIDTH 1 +#define FRF_AB_GPIO10_OEN_LBN 58 +#define FRF_AB_GPIO10_OEN_WIDTH 1 +#define FRF_AB_GPIO9_OEN_LBN 57 +#define FRF_AB_GPIO9_OEN_WIDTH 1 +#define FRF_AB_GPIO8_OEN_LBN 56 +#define FRF_AB_GPIO8_OEN_WIDTH 1 +#define FRF_AB_GPIO15_OUT_LBN 55 +#define FRF_AB_GPIO15_OUT_WIDTH 1 +#define FRF_AB_GPIO14_OUT_LBN 54 +#define FRF_AB_GPIO14_OUT_WIDTH 1 +#define FRF_AB_GPIO13_OUT_LBN 53 +#define FRF_AB_GPIO13_OUT_WIDTH 1 +#define FRF_AB_GPIO12_OUT_LBN 52 +#define FRF_AB_GPIO12_OUT_WIDTH 1 +#define FRF_AB_GPIO11_OUT_LBN 51 +#define FRF_AB_GPIO11_OUT_WIDTH 1 +#define FRF_AB_GPIO10_OUT_LBN 50 +#define FRF_AB_GPIO10_OUT_WIDTH 1 +#define FRF_AB_GPIO9_OUT_LBN 49 +#define FRF_AB_GPIO9_OUT_WIDTH 1 +#define FRF_AB_GPIO8_OUT_LBN 48 +#define FRF_AB_GPIO8_OUT_WIDTH 1 +#define FRF_AB_GPIO15_IN_LBN 47 +#define FRF_AB_GPIO15_IN_WIDTH 1 +#define FRF_AB_GPIO14_IN_LBN 46 +#define FRF_AB_GPIO14_IN_WIDTH 1 +#define FRF_AB_GPIO13_IN_LBN 45 +#define FRF_AB_GPIO13_IN_WIDTH 1 +#define FRF_AB_GPIO12_IN_LBN 44 +#define FRF_AB_GPIO12_IN_WIDTH 1 +#define FRF_AB_GPIO11_IN_LBN 43 +#define FRF_AB_GPIO11_IN_WIDTH 1 +#define FRF_AB_GPIO10_IN_LBN 42 +#define FRF_AB_GPIO10_IN_WIDTH 1 +#define FRF_AB_GPIO9_IN_LBN 41 +#define FRF_AB_GPIO9_IN_WIDTH 1 +#define FRF_AB_GPIO8_IN_LBN 40 +#define FRF_AB_GPIO8_IN_WIDTH 1 +#define FRF_AB_GPIO15_PWRUP_VALUE_LBN 39 +#define FRF_AB_GPIO15_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO14_PWRUP_VALUE_LBN 38 +#define FRF_AB_GPIO14_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO13_PWRUP_VALUE_LBN 37 +#define FRF_AB_GPIO13_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO12_PWRUP_VALUE_LBN 36 +#define FRF_AB_GPIO12_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO11_PWRUP_VALUE_LBN 35 +#define FRF_AB_GPIO11_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO10_PWRUP_VALUE_LBN 34 +#define FRF_AB_GPIO10_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO9_PWRUP_VALUE_LBN 33 +#define FRF_AB_GPIO9_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO8_PWRUP_VALUE_LBN 32 +#define FRF_AB_GPIO8_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_CLK156_OUT_EN_LBN 31 +#define FRF_AB_CLK156_OUT_EN_WIDTH 1 +#define FRF_AB_USE_NIC_CLK_LBN 30 +#define FRF_AB_USE_NIC_CLK_WIDTH 1 +#define FRF_AB_GPIO5_OEN_LBN 29 +#define FRF_AB_GPIO5_OEN_WIDTH 1 +#define FRF_AB_GPIO4_OEN_LBN 28 +#define FRF_AB_GPIO4_OEN_WIDTH 1 +#define FRF_AB_GPIO3_OEN_LBN 27 +#define FRF_AB_GPIO3_OEN_WIDTH 1 +#define FRF_AB_GPIO2_OEN_LBN 26 +#define FRF_AB_GPIO2_OEN_WIDTH 1 +#define FRF_AB_GPIO1_OEN_LBN 25 +#define FRF_AB_GPIO1_OEN_WIDTH 1 +#define FRF_AB_GPIO0_OEN_LBN 24 +#define FRF_AB_GPIO0_OEN_WIDTH 1 +#define FRF_AB_GPIO7_OUT_LBN 23 +#define FRF_AB_GPIO7_OUT_WIDTH 1 +#define FRF_AB_GPIO6_OUT_LBN 22 +#define FRF_AB_GPIO6_OUT_WIDTH 1 +#define FRF_AB_GPIO5_OUT_LBN 21 +#define FRF_AB_GPIO5_OUT_WIDTH 1 +#define FRF_AB_GPIO4_OUT_LBN 20 +#define FRF_AB_GPIO4_OUT_WIDTH 1 +#define FRF_AB_GPIO3_OUT_LBN 19 +#define FRF_AB_GPIO3_OUT_WIDTH 1 +#define FRF_AB_GPIO2_OUT_LBN 18 +#define FRF_AB_GPIO2_OUT_WIDTH 1 +#define FRF_AB_GPIO1_OUT_LBN 17 +#define FRF_AB_GPIO1_OUT_WIDTH 1 +#define FRF_AB_GPIO0_OUT_LBN 16 +#define FRF_AB_GPIO0_OUT_WIDTH 1 +#define FRF_AB_GPIO7_IN_LBN 15 +#define FRF_AB_GPIO7_IN_WIDTH 1 +#define FRF_AB_GPIO6_IN_LBN 14 +#define FRF_AB_GPIO6_IN_WIDTH 1 +#define FRF_AB_GPIO5_IN_LBN 13 +#define FRF_AB_GPIO5_IN_WIDTH 1 +#define FRF_AB_GPIO4_IN_LBN 12 +#define FRF_AB_GPIO4_IN_WIDTH 1 +#define FRF_AB_GPIO3_IN_LBN 11 +#define FRF_AB_GPIO3_IN_WIDTH 1 +#define FRF_AB_GPIO2_IN_LBN 10 +#define FRF_AB_GPIO2_IN_WIDTH 1 +#define FRF_AB_GPIO1_IN_LBN 9 +#define FRF_AB_GPIO1_IN_WIDTH 1 +#define FRF_AB_GPIO0_IN_LBN 8 +#define FRF_AB_GPIO0_IN_WIDTH 1 +#define FRF_AB_GPIO7_PWRUP_VALUE_LBN 7 +#define FRF_AB_GPIO7_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO6_PWRUP_VALUE_LBN 6 +#define FRF_AB_GPIO6_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO5_PWRUP_VALUE_LBN 5 +#define FRF_AB_GPIO5_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO4_PWRUP_VALUE_LBN 4 +#define FRF_AB_GPIO4_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO3_PWRUP_VALUE_LBN 3 +#define FRF_AB_GPIO3_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO2_PWRUP_VALUE_LBN 2 +#define FRF_AB_GPIO2_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO1_PWRUP_VALUE_LBN 1 +#define FRF_AB_GPIO1_PWRUP_VALUE_WIDTH 1 +#define FRF_AB_GPIO0_PWRUP_VALUE_LBN 0 +#define FRF_AB_GPIO0_PWRUP_VALUE_WIDTH 1 + +/* GLB_CTL_REG: Global control register */ +#define FR_AB_GLB_CTL 0x00000220 +#define FRF_AB_EXT_PHY_RST_CTL_LBN 63 +#define FRF_AB_EXT_PHY_RST_CTL_WIDTH 1 +#define FRF_AB_XAUI_SD_RST_CTL_LBN 62 +#define FRF_AB_XAUI_SD_RST_CTL_WIDTH 1 +#define FRF_AB_PCIE_SD_RST_CTL_LBN 61 +#define FRF_AB_PCIE_SD_RST_CTL_WIDTH 1 +#define FRF_AA_PCIX_RST_CTL_LBN 60 +#define FRF_AA_PCIX_RST_CTL_WIDTH 1 +#define FRF_BB_BIU_RST_CTL_LBN 60 +#define FRF_BB_BIU_RST_CTL_WIDTH 1 +#define FRF_AB_PCIE_STKY_RST_CTL_LBN 59 +#define FRF_AB_PCIE_STKY_RST_CTL_WIDTH 1 +#define FRF_AB_PCIE_NSTKY_RST_CTL_LBN 58 +#define FRF_AB_PCIE_NSTKY_RST_CTL_WIDTH 1 +#define FRF_AB_PCIE_CORE_RST_CTL_LBN 57 +#define FRF_AB_PCIE_CORE_RST_CTL_WIDTH 1 +#define FRF_AB_XGRX_RST_CTL_LBN 56 +#define FRF_AB_XGRX_RST_CTL_WIDTH 1 +#define FRF_AB_XGTX_RST_CTL_LBN 55 +#define FRF_AB_XGTX_RST_CTL_WIDTH 1 +#define FRF_AB_EM_RST_CTL_LBN 54 +#define FRF_AB_EM_RST_CTL_WIDTH 1 +#define FRF_AB_EV_RST_CTL_LBN 53 +#define FRF_AB_EV_RST_CTL_WIDTH 1 +#define FRF_AB_SR_RST_CTL_LBN 52 +#define FRF_AB_SR_RST_CTL_WIDTH 1 +#define FRF_AB_RX_RST_CTL_LBN 51 +#define FRF_AB_RX_RST_CTL_WIDTH 1 +#define FRF_AB_TX_RST_CTL_LBN 50 +#define FRF_AB_TX_RST_CTL_WIDTH 1 +#define FRF_AB_EE_RST_CTL_LBN 49 +#define FRF_AB_EE_RST_CTL_WIDTH 1 +#define FRF_AB_CS_RST_CTL_LBN 48 +#define FRF_AB_CS_RST_CTL_WIDTH 1 +#define FRF_AB_HOT_RST_CTL_LBN 40 +#define FRF_AB_HOT_RST_CTL_WIDTH 2 +#define FRF_AB_RST_EXT_PHY_LBN 31 +#define FRF_AB_RST_EXT_PHY_WIDTH 1 +#define FRF_AB_RST_XAUI_SD_LBN 30 +#define FRF_AB_RST_XAUI_SD_WIDTH 1 +#define FRF_AB_RST_PCIE_SD_LBN 29 +#define FRF_AB_RST_PCIE_SD_WIDTH 1 +#define FRF_AA_RST_PCIX_LBN 28 +#define FRF_AA_RST_PCIX_WIDTH 1 +#define FRF_BB_RST_BIU_LBN 28 +#define FRF_BB_RST_BIU_WIDTH 1 +#define FRF_AB_RST_PCIE_STKY_LBN 27 +#define FRF_AB_RST_PCIE_STKY_WIDTH 1 +#define FRF_AB_RST_PCIE_NSTKY_LBN 26 +#define FRF_AB_RST_PCIE_NSTKY_WIDTH 1 +#define FRF_AB_RST_PCIE_CORE_LBN 25 +#define FRF_AB_RST_PCIE_CORE_WIDTH 1 +#define FRF_AB_RST_XGRX_LBN 24 +#define FRF_AB_RST_XGRX_WIDTH 1 +#define FRF_AB_RST_XGTX_LBN 23 +#define FRF_AB_RST_XGTX_WIDTH 1 +#define FRF_AB_RST_EM_LBN 22 +#define FRF_AB_RST_EM_WIDTH 1 +#define FRF_AB_RST_EV_LBN 21 +#define FRF_AB_RST_EV_WIDTH 1 +#define FRF_AB_RST_SR_LBN 20 +#define FRF_AB_RST_SR_WIDTH 1 +#define FRF_AB_RST_RX_LBN 19 +#define FRF_AB_RST_RX_WIDTH 1 +#define FRF_AB_RST_TX_LBN 18 +#define FRF_AB_RST_TX_WIDTH 1 +#define FRF_AB_RST_SF_LBN 17 +#define FRF_AB_RST_SF_WIDTH 1 +#define FRF_AB_RST_CS_LBN 16 +#define FRF_AB_RST_CS_WIDTH 1 +#define FRF_AB_INT_RST_DUR_LBN 4 +#define FRF_AB_INT_RST_DUR_WIDTH 3 +#define FRF_AB_EXT_PHY_RST_DUR_LBN 1 +#define FRF_AB_EXT_PHY_RST_DUR_WIDTH 3 +#define FFE_AB_EXT_PHY_RST_DUR_10240US 7 +#define FFE_AB_EXT_PHY_RST_DUR_5120US 6 +#define FFE_AB_EXT_PHY_RST_DUR_2560US 5 +#define FFE_AB_EXT_PHY_RST_DUR_1280US 4 +#define FFE_AB_EXT_PHY_RST_DUR_640US 3 +#define FFE_AB_EXT_PHY_RST_DUR_320US 2 +#define FFE_AB_EXT_PHY_RST_DUR_160US 1 +#define FFE_AB_EXT_PHY_RST_DUR_80US 0 +#define FRF_AB_SWRST_LBN 0 +#define FRF_AB_SWRST_WIDTH 1 + +/* FATAL_INTR_REG_KER: Fatal interrupt register for Kernel */ +#define FR_AZ_FATAL_INTR_KER 0x00000230 +#define FRF_CZ_SRAM_PERR_INT_P_KER_EN_LBN 44 +#define FRF_CZ_SRAM_PERR_INT_P_KER_EN_WIDTH 1 +#define FRF_AB_PCI_BUSERR_INT_KER_EN_LBN 43 +#define FRF_AB_PCI_BUSERR_INT_KER_EN_WIDTH 1 +#define FRF_CZ_MBU_PERR_INT_KER_EN_LBN 43 +#define FRF_CZ_MBU_PERR_INT_KER_EN_WIDTH 1 +#define FRF_AZ_SRAM_OOB_INT_KER_EN_LBN 42 +#define FRF_AZ_SRAM_OOB_INT_KER_EN_WIDTH 1 +#define FRF_AZ_BUFID_OOB_INT_KER_EN_LBN 41 +#define FRF_AZ_BUFID_OOB_INT_KER_EN_WIDTH 1 +#define FRF_AZ_MEM_PERR_INT_KER_EN_LBN 40 +#define FRF_AZ_MEM_PERR_INT_KER_EN_WIDTH 1 +#define FRF_AZ_RBUF_OWN_INT_KER_EN_LBN 39 +#define FRF_AZ_RBUF_OWN_INT_KER_EN_WIDTH 1 +#define FRF_AZ_TBUF_OWN_INT_KER_EN_LBN 38 +#define FRF_AZ_TBUF_OWN_INT_KER_EN_WIDTH 1 +#define FRF_AZ_RDESCQ_OWN_INT_KER_EN_LBN 37 +#define FRF_AZ_RDESCQ_OWN_INT_KER_EN_WIDTH 1 +#define FRF_AZ_TDESCQ_OWN_INT_KER_EN_LBN 36 +#define FRF_AZ_TDESCQ_OWN_INT_KER_EN_WIDTH 1 +#define FRF_AZ_EVQ_OWN_INT_KER_EN_LBN 35 +#define FRF_AZ_EVQ_OWN_INT_KER_EN_WIDTH 1 +#define FRF_AZ_EVF_OFLO_INT_KER_EN_LBN 34 +#define FRF_AZ_EVF_OFLO_INT_KER_EN_WIDTH 1 +#define FRF_AZ_ILL_ADR_INT_KER_EN_LBN 33 +#define FRF_AZ_ILL_ADR_INT_KER_EN_WIDTH 1 +#define FRF_AZ_SRM_PERR_INT_KER_EN_LBN 32 +#define FRF_AZ_SRM_PERR_INT_KER_EN_WIDTH 1 +#define FRF_CZ_SRAM_PERR_INT_P_KER_LBN 12 +#define FRF_CZ_SRAM_PERR_INT_P_KER_WIDTH 1 +#define FRF_AB_PCI_BUSERR_INT_KER_LBN 11 +#define FRF_AB_PCI_BUSERR_INT_KER_WIDTH 1 +#define FRF_CZ_MBU_PERR_INT_KER_LBN 11 +#define FRF_CZ_MBU_PERR_INT_KER_WIDTH 1 +#define FRF_AZ_SRAM_OOB_INT_KER_LBN 10 +#define FRF_AZ_SRAM_OOB_INT_KER_WIDTH 1 +#define FRF_AZ_BUFID_DC_OOB_INT_KER_LBN 9 +#define FRF_AZ_BUFID_DC_OOB_INT_KER_WIDTH 1 +#define FRF_AZ_MEM_PERR_INT_KER_LBN 8 +#define FRF_AZ_MEM_PERR_INT_KER_WIDTH 1 +#define FRF_AZ_RBUF_OWN_INT_KER_LBN 7 +#define FRF_AZ_RBUF_OWN_INT_KER_WIDTH 1 +#define FRF_AZ_TBUF_OWN_INT_KER_LBN 6 +#define FRF_AZ_TBUF_OWN_INT_KER_WIDTH 1 +#define FRF_AZ_RDESCQ_OWN_INT_KER_LBN 5 +#define FRF_AZ_RDESCQ_OWN_INT_KER_WIDTH 1 +#define FRF_AZ_TDESCQ_OWN_INT_KER_LBN 4 +#define FRF_AZ_TDESCQ_OWN_INT_KER_WIDTH 1 +#define FRF_AZ_EVQ_OWN_INT_KER_LBN 3 +#define FRF_AZ_EVQ_OWN_INT_KER_WIDTH 1 +#define FRF_AZ_EVF_OFLO_INT_KER_LBN 2 +#define FRF_AZ_EVF_OFLO_INT_KER_WIDTH 1 +#define FRF_AZ_ILL_ADR_INT_KER_LBN 1 +#define FRF_AZ_ILL_ADR_INT_KER_WIDTH 1 +#define FRF_AZ_SRM_PERR_INT_KER_LBN 0 +#define FRF_AZ_SRM_PERR_INT_KER_WIDTH 1 + +/* FATAL_INTR_REG_CHAR: Fatal interrupt register for Char */ +#define FR_BZ_FATAL_INTR_CHAR 0x00000240 +#define FRF_CZ_SRAM_PERR_INT_P_CHAR_EN_LBN 44 +#define FRF_CZ_SRAM_PERR_INT_P_CHAR_EN_WIDTH 1 +#define FRF_BB_PCI_BUSERR_INT_CHAR_EN_LBN 43 +#define FRF_BB_PCI_BUSERR_INT_CHAR_EN_WIDTH 1 +#define FRF_CZ_MBU_PERR_INT_CHAR_EN_LBN 43 +#define FRF_CZ_MBU_PERR_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_SRAM_OOB_INT_CHAR_EN_LBN 42 +#define FRF_BZ_SRAM_OOB_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_BUFID_OOB_INT_CHAR_EN_LBN 41 +#define FRF_BZ_BUFID_OOB_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_MEM_PERR_INT_CHAR_EN_LBN 40 +#define FRF_BZ_MEM_PERR_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_RBUF_OWN_INT_CHAR_EN_LBN 39 +#define FRF_BZ_RBUF_OWN_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_TBUF_OWN_INT_CHAR_EN_LBN 38 +#define FRF_BZ_TBUF_OWN_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_RDESCQ_OWN_INT_CHAR_EN_LBN 37 +#define FRF_BZ_RDESCQ_OWN_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_TDESCQ_OWN_INT_CHAR_EN_LBN 36 +#define FRF_BZ_TDESCQ_OWN_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_EVQ_OWN_INT_CHAR_EN_LBN 35 +#define FRF_BZ_EVQ_OWN_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_EVF_OFLO_INT_CHAR_EN_LBN 34 +#define FRF_BZ_EVF_OFLO_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_ILL_ADR_INT_CHAR_EN_LBN 33 +#define FRF_BZ_ILL_ADR_INT_CHAR_EN_WIDTH 1 +#define FRF_BZ_SRM_PERR_INT_CHAR_EN_LBN 32 +#define FRF_BZ_SRM_PERR_INT_CHAR_EN_WIDTH 1 +#define FRF_CZ_SRAM_PERR_INT_P_CHAR_LBN 12 +#define FRF_CZ_SRAM_PERR_INT_P_CHAR_WIDTH 1 +#define FRF_BB_PCI_BUSERR_INT_CHAR_LBN 11 +#define FRF_BB_PCI_BUSERR_INT_CHAR_WIDTH 1 +#define FRF_CZ_MBU_PERR_INT_CHAR_LBN 11 +#define FRF_CZ_MBU_PERR_INT_CHAR_WIDTH 1 +#define FRF_BZ_SRAM_OOB_INT_CHAR_LBN 10 +#define FRF_BZ_SRAM_OOB_INT_CHAR_WIDTH 1 +#define FRF_BZ_BUFID_DC_OOB_INT_CHAR_LBN 9 +#define FRF_BZ_BUFID_DC_OOB_INT_CHAR_WIDTH 1 +#define FRF_BZ_MEM_PERR_INT_CHAR_LBN 8 +#define FRF_BZ_MEM_PERR_INT_CHAR_WIDTH 1 +#define FRF_BZ_RBUF_OWN_INT_CHAR_LBN 7 +#define FRF_BZ_RBUF_OWN_INT_CHAR_WIDTH 1 +#define FRF_BZ_TBUF_OWN_INT_CHAR_LBN 6 +#define FRF_BZ_TBUF_OWN_INT_CHAR_WIDTH 1 +#define FRF_BZ_RDESCQ_OWN_INT_CHAR_LBN 5 +#define FRF_BZ_RDESCQ_OWN_INT_CHAR_WIDTH 1 +#define FRF_BZ_TDESCQ_OWN_INT_CHAR_LBN 4 +#define FRF_BZ_TDESCQ_OWN_INT_CHAR_WIDTH 1 +#define FRF_BZ_EVQ_OWN_INT_CHAR_LBN 3 +#define FRF_BZ_EVQ_OWN_INT_CHAR_WIDTH 1 +#define FRF_BZ_EVF_OFLO_INT_CHAR_LBN 2 +#define FRF_BZ_EVF_OFLO_INT_CHAR_WIDTH 1 +#define FRF_BZ_ILL_ADR_INT_CHAR_LBN 1 +#define FRF_BZ_ILL_ADR_INT_CHAR_WIDTH 1 +#define FRF_BZ_SRM_PERR_INT_CHAR_LBN 0 +#define FRF_BZ_SRM_PERR_INT_CHAR_WIDTH 1 + +/* DP_CTRL_REG: Datapath control register */ +#define FR_BZ_DP_CTRL 0x00000250 +#define FRF_BZ_FLS_EVQ_ID_LBN 0 +#define FRF_BZ_FLS_EVQ_ID_WIDTH 12 + +/* MEM_STAT_REG: Memory status register */ +#define FR_AZ_MEM_STAT 0x00000260 +#define FRF_AB_MEM_PERR_VEC_LBN 53 +#define FRF_AB_MEM_PERR_VEC_WIDTH 38 +#define FRF_AB_MBIST_CORR_LBN 38 +#define FRF_AB_MBIST_CORR_WIDTH 15 +#define FRF_AB_MBIST_ERR_LBN 0 +#define FRF_AB_MBIST_ERR_WIDTH 40 +#define FRF_CZ_MEM_PERR_VEC_LBN 0 +#define FRF_CZ_MEM_PERR_VEC_WIDTH 35 + +/* CS_DEBUG_REG: Debug register */ +#define FR_AZ_CS_DEBUG 0x00000270 +#define FRF_AB_GLB_DEBUG2_SEL_LBN 50 +#define FRF_AB_GLB_DEBUG2_SEL_WIDTH 3 +#define FRF_AB_DEBUG_BLK_SEL2_LBN 47 +#define FRF_AB_DEBUG_BLK_SEL2_WIDTH 3 +#define FRF_AB_DEBUG_BLK_SEL1_LBN 44 +#define FRF_AB_DEBUG_BLK_SEL1_WIDTH 3 +#define FRF_AB_DEBUG_BLK_SEL0_LBN 41 +#define FRF_AB_DEBUG_BLK_SEL0_WIDTH 3 +#define FRF_CZ_CS_PORT_NUM_LBN 40 +#define FRF_CZ_CS_PORT_NUM_WIDTH 2 +#define FRF_AB_MISC_DEBUG_ADDR_LBN 36 +#define FRF_AB_MISC_DEBUG_ADDR_WIDTH 5 +#define FRF_AB_SERDES_DEBUG_ADDR_LBN 31 +#define FRF_AB_SERDES_DEBUG_ADDR_WIDTH 5 +#define FRF_CZ_CS_PORT_FPE_LBN 1 +#define FRF_CZ_CS_PORT_FPE_WIDTH 35 +#define FRF_AB_EM_DEBUG_ADDR_LBN 26 +#define FRF_AB_EM_DEBUG_ADDR_WIDTH 5 +#define FRF_AB_SR_DEBUG_ADDR_LBN 21 +#define FRF_AB_SR_DEBUG_ADDR_WIDTH 5 +#define FRF_AB_EV_DEBUG_ADDR_LBN 16 +#define FRF_AB_EV_DEBUG_ADDR_WIDTH 5 +#define FRF_AB_RX_DEBUG_ADDR_LBN 11 +#define FRF_AB_RX_DEBUG_ADDR_WIDTH 5 +#define FRF_AB_TX_DEBUG_ADDR_LBN 6 +#define FRF_AB_TX_DEBUG_ADDR_WIDTH 5 +#define FRF_AB_CS_BIU_DEBUG_ADDR_LBN 1 +#define FRF_AB_CS_BIU_DEBUG_ADDR_WIDTH 5 +#define FRF_AZ_CS_DEBUG_EN_LBN 0 +#define FRF_AZ_CS_DEBUG_EN_WIDTH 1 + +/* DRIVER_REG: Driver scratch register [0-7] */ +#define FR_AZ_DRIVER 0x00000280 +#define FR_AZ_DRIVER_STEP 16 +#define FR_AZ_DRIVER_ROWS 8 +#define FRF_AZ_DRIVER_DW0_LBN 0 +#define FRF_AZ_DRIVER_DW0_WIDTH 32 + +/* ALTERA_BUILD_REG: Altera build register */ +#define FR_AZ_ALTERA_BUILD 0x00000300 +#define FRF_AZ_ALTERA_BUILD_VER_LBN 0 +#define FRF_AZ_ALTERA_BUILD_VER_WIDTH 32 + +/* CSR_SPARE_REG: Spare register */ +#define FR_AZ_CSR_SPARE 0x00000310 +#define FRF_AB_MEM_PERR_EN_LBN 64 +#define FRF_AB_MEM_PERR_EN_WIDTH 38 +#define FRF_CZ_MEM_PERR_EN_LBN 64 +#define FRF_CZ_MEM_PERR_EN_WIDTH 35 +#define FRF_AB_MEM_PERR_EN_TX_DATA_LBN 72 +#define FRF_AB_MEM_PERR_EN_TX_DATA_WIDTH 2 +#define FRF_AZ_CSR_SPARE_BITS_LBN 0 +#define FRF_AZ_CSR_SPARE_BITS_WIDTH 32 + +/* PCIE_SD_CTL0123_REG: PCIE SerDes control register 0 to 3 */ +#define FR_AB_PCIE_SD_CTL0123 0x00000320 +#define FRF_AB_PCIE_TESTSIG_H_LBN 96 +#define FRF_AB_PCIE_TESTSIG_H_WIDTH 19 +#define FRF_AB_PCIE_TESTSIG_L_LBN 64 +#define FRF_AB_PCIE_TESTSIG_L_WIDTH 19 +#define FRF_AB_PCIE_OFFSET_LBN 56 +#define FRF_AB_PCIE_OFFSET_WIDTH 8 +#define FRF_AB_PCIE_OFFSETEN_H_LBN 55 +#define FRF_AB_PCIE_OFFSETEN_H_WIDTH 1 +#define FRF_AB_PCIE_OFFSETEN_L_LBN 54 +#define FRF_AB_PCIE_OFFSETEN_L_WIDTH 1 +#define FRF_AB_PCIE_HIVMODE_H_LBN 53 +#define FRF_AB_PCIE_HIVMODE_H_WIDTH 1 +#define FRF_AB_PCIE_HIVMODE_L_LBN 52 +#define FRF_AB_PCIE_HIVMODE_L_WIDTH 1 +#define FRF_AB_PCIE_PARRESET_H_LBN 51 +#define FRF_AB_PCIE_PARRESET_H_WIDTH 1 +#define FRF_AB_PCIE_PARRESET_L_LBN 50 +#define FRF_AB_PCIE_PARRESET_L_WIDTH 1 +#define FRF_AB_PCIE_LPBKWDRV_H_LBN 49 +#define FRF_AB_PCIE_LPBKWDRV_H_WIDTH 1 +#define FRF_AB_PCIE_LPBKWDRV_L_LBN 48 +#define FRF_AB_PCIE_LPBKWDRV_L_WIDTH 1 +#define FRF_AB_PCIE_LPBK_LBN 40 +#define FRF_AB_PCIE_LPBK_WIDTH 8 +#define FRF_AB_PCIE_PARLPBK_LBN 32 +#define FRF_AB_PCIE_PARLPBK_WIDTH 8 +#define FRF_AB_PCIE_RXTERMADJ_H_LBN 30 +#define FRF_AB_PCIE_RXTERMADJ_H_WIDTH 2 +#define FRF_AB_PCIE_RXTERMADJ_L_LBN 28 +#define FRF_AB_PCIE_RXTERMADJ_L_WIDTH 2 +#define FFE_AB_PCIE_RXTERMADJ_MIN15PCNT 3 +#define FFE_AB_PCIE_RXTERMADJ_PL10PCNT 2 +#define FFE_AB_PCIE_RXTERMADJ_MIN17PCNT 1 +#define FFE_AB_PCIE_RXTERMADJ_NOMNL 0 +#define FRF_AB_PCIE_TXTERMADJ_H_LBN 26 +#define FRF_AB_PCIE_TXTERMADJ_H_WIDTH 2 +#define FRF_AB_PCIE_TXTERMADJ_L_LBN 24 +#define FRF_AB_PCIE_TXTERMADJ_L_WIDTH 2 +#define FFE_AB_PCIE_TXTERMADJ_MIN15PCNT 3 +#define FFE_AB_PCIE_TXTERMADJ_PL10PCNT 2 +#define FFE_AB_PCIE_TXTERMADJ_MIN17PCNT 1 +#define FFE_AB_PCIE_TXTERMADJ_NOMNL 0 +#define FRF_AB_PCIE_RXEQCTL_H_LBN 18 +#define FRF_AB_PCIE_RXEQCTL_H_WIDTH 2 +#define FRF_AB_PCIE_RXEQCTL_L_LBN 16 +#define FRF_AB_PCIE_RXEQCTL_L_WIDTH 2 +#define FFE_AB_PCIE_RXEQCTL_OFF_ALT 3 +#define FFE_AB_PCIE_RXEQCTL_OFF 2 +#define FFE_AB_PCIE_RXEQCTL_MIN 1 +#define FFE_AB_PCIE_RXEQCTL_MAX 0 +#define FRF_AB_PCIE_HIDRV_LBN 8 +#define FRF_AB_PCIE_HIDRV_WIDTH 8 +#define FRF_AB_PCIE_LODRV_LBN 0 +#define FRF_AB_PCIE_LODRV_WIDTH 8 + +/* PCIE_SD_CTL45_REG: PCIE SerDes control register 4 and 5 */ +#define FR_AB_PCIE_SD_CTL45 0x00000330 +#define FRF_AB_PCIE_DTX7_LBN 60 +#define FRF_AB_PCIE_DTX7_WIDTH 4 +#define FRF_AB_PCIE_DTX6_LBN 56 +#define FRF_AB_PCIE_DTX6_WIDTH 4 +#define FRF_AB_PCIE_DTX5_LBN 52 +#define FRF_AB_PCIE_DTX5_WIDTH 4 +#define FRF_AB_PCIE_DTX4_LBN 48 +#define FRF_AB_PCIE_DTX4_WIDTH 4 +#define FRF_AB_PCIE_DTX3_LBN 44 +#define FRF_AB_PCIE_DTX3_WIDTH 4 +#define FRF_AB_PCIE_DTX2_LBN 40 +#define FRF_AB_PCIE_DTX2_WIDTH 4 +#define FRF_AB_PCIE_DTX1_LBN 36 +#define FRF_AB_PCIE_DTX1_WIDTH 4 +#define FRF_AB_PCIE_DTX0_LBN 32 +#define FRF_AB_PCIE_DTX0_WIDTH 4 +#define FRF_AB_PCIE_DEQ7_LBN 28 +#define FRF_AB_PCIE_DEQ7_WIDTH 4 +#define FRF_AB_PCIE_DEQ6_LBN 24 +#define FRF_AB_PCIE_DEQ6_WIDTH 4 +#define FRF_AB_PCIE_DEQ5_LBN 20 +#define FRF_AB_PCIE_DEQ5_WIDTH 4 +#define FRF_AB_PCIE_DEQ4_LBN 16 +#define FRF_AB_PCIE_DEQ4_WIDTH 4 +#define FRF_AB_PCIE_DEQ3_LBN 12 +#define FRF_AB_PCIE_DEQ3_WIDTH 4 +#define FRF_AB_PCIE_DEQ2_LBN 8 +#define FRF_AB_PCIE_DEQ2_WIDTH 4 +#define FRF_AB_PCIE_DEQ1_LBN 4 +#define FRF_AB_PCIE_DEQ1_WIDTH 4 +#define FRF_AB_PCIE_DEQ0_LBN 0 +#define FRF_AB_PCIE_DEQ0_WIDTH 4 + +/* PCIE_PCS_CTL_STAT_REG: PCIE PCS control and status register */ +#define FR_AB_PCIE_PCS_CTL_STAT 0x00000340 +#define FRF_AB_PCIE_PRBSERRCOUNT0_H_LBN 52 +#define FRF_AB_PCIE_PRBSERRCOUNT0_H_WIDTH 4 +#define FRF_AB_PCIE_PRBSERRCOUNT0_L_LBN 48 +#define FRF_AB_PCIE_PRBSERRCOUNT0_L_WIDTH 4 +#define FRF_AB_PCIE_PRBSERR_LBN 40 +#define FRF_AB_PCIE_PRBSERR_WIDTH 8 +#define FRF_AB_PCIE_PRBSERRH0_LBN 32 +#define FRF_AB_PCIE_PRBSERRH0_WIDTH 8 +#define FRF_AB_PCIE_FASTINIT_H_LBN 15 +#define FRF_AB_PCIE_FASTINIT_H_WIDTH 1 +#define FRF_AB_PCIE_FASTINIT_L_LBN 14 +#define FRF_AB_PCIE_FASTINIT_L_WIDTH 1 +#define FRF_AB_PCIE_CTCDISABLE_H_LBN 13 +#define FRF_AB_PCIE_CTCDISABLE_H_WIDTH 1 +#define FRF_AB_PCIE_CTCDISABLE_L_LBN 12 +#define FRF_AB_PCIE_CTCDISABLE_L_WIDTH 1 +#define FRF_AB_PCIE_PRBSSYNC_H_LBN 11 +#define FRF_AB_PCIE_PRBSSYNC_H_WIDTH 1 +#define FRF_AB_PCIE_PRBSSYNC_L_LBN 10 +#define FRF_AB_PCIE_PRBSSYNC_L_WIDTH 1 +#define FRF_AB_PCIE_PRBSERRACK_H_LBN 9 +#define FRF_AB_PCIE_PRBSERRACK_H_WIDTH 1 +#define FRF_AB_PCIE_PRBSERRACK_L_LBN 8 +#define FRF_AB_PCIE_PRBSERRACK_L_WIDTH 1 +#define FRF_AB_PCIE_PRBSSEL_LBN 0 +#define FRF_AB_PCIE_PRBSSEL_WIDTH 8 + +/* DEBUG_DATA_OUT_REG: Live Debug and Debug 2 out ports */ +#define FR_BB_DEBUG_DATA_OUT 0x00000350 +#define FRF_BB_DEBUG2_PORT_LBN 25 +#define FRF_BB_DEBUG2_PORT_WIDTH 15 +#define FRF_BB_DEBUG1_PORT_LBN 0 +#define FRF_BB_DEBUG1_PORT_WIDTH 25 + +/* EVQ_RPTR_REGP0: Event queue read pointer register */ +#define FR_BZ_EVQ_RPTR_P0 0x00000400 +#define FR_BZ_EVQ_RPTR_P0_STEP 8192 +#define FR_BZ_EVQ_RPTR_P0_ROWS 1024 +/* EVQ_RPTR_REG_KER: Event queue read pointer register */ +#define FR_AA_EVQ_RPTR_KER 0x00011b00 +#define FR_AA_EVQ_RPTR_KER_STEP 4 +#define FR_AA_EVQ_RPTR_KER_ROWS 4 +/* EVQ_RPTR_REG: Event queue read pointer register */ +#define FR_BZ_EVQ_RPTR 0x00fa0000 +#define FR_BZ_EVQ_RPTR_STEP 16 +#define FR_BB_EVQ_RPTR_ROWS 4096 +#define FR_CZ_EVQ_RPTR_ROWS 1024 +/* EVQ_RPTR_REGP123: Event queue read pointer register */ +#define FR_BB_EVQ_RPTR_P123 0x01000400 +#define FR_BB_EVQ_RPTR_P123_STEP 8192 +#define FR_BB_EVQ_RPTR_P123_ROWS 3072 +#define FRF_AZ_EVQ_RPTR_VLD_LBN 15 +#define FRF_AZ_EVQ_RPTR_VLD_WIDTH 1 +#define FRF_AZ_EVQ_RPTR_LBN 0 +#define FRF_AZ_EVQ_RPTR_WIDTH 15 + +/* TIMER_COMMAND_REGP0: Timer Command Registers */ +#define FR_BZ_TIMER_COMMAND_P0 0x00000420 +#define FR_BZ_TIMER_COMMAND_P0_STEP 8192 +#define FR_BZ_TIMER_COMMAND_P0_ROWS 1024 +/* TIMER_COMMAND_REG_KER: Timer Command Registers */ +#define FR_AA_TIMER_COMMAND_KER 0x00000420 +#define FR_AA_TIMER_COMMAND_KER_STEP 8192 +#define FR_AA_TIMER_COMMAND_KER_ROWS 4 +/* TIMER_COMMAND_REGP123: Timer Command Registers */ +#define FR_BB_TIMER_COMMAND_P123 0x01000420 +#define FR_BB_TIMER_COMMAND_P123_STEP 8192 +#define FR_BB_TIMER_COMMAND_P123_ROWS 3072 +#define FRF_CZ_TC_TIMER_MODE_LBN 14 +#define FRF_CZ_TC_TIMER_MODE_WIDTH 2 +#define FRF_AB_TC_TIMER_MODE_LBN 12 +#define FRF_AB_TC_TIMER_MODE_WIDTH 2 +#define FRF_CZ_TC_TIMER_VAL_LBN 0 +#define FRF_CZ_TC_TIMER_VAL_WIDTH 14 +#define FRF_AB_TC_TIMER_VAL_LBN 0 +#define FRF_AB_TC_TIMER_VAL_WIDTH 12 + +/* DRV_EV_REG: Driver generated event register */ +#define FR_AZ_DRV_EV 0x00000440 +#define FRF_AZ_DRV_EV_QID_LBN 64 +#define FRF_AZ_DRV_EV_QID_WIDTH 12 +#define FRF_AZ_DRV_EV_DATA_LBN 0 +#define FRF_AZ_DRV_EV_DATA_WIDTH 64 + +/* EVQ_CTL_REG: Event queue control register */ +#define FR_AZ_EVQ_CTL 0x00000450 +#define FRF_CZ_RX_EVQ_WAKEUP_MASK_LBN 15 +#define FRF_CZ_RX_EVQ_WAKEUP_MASK_WIDTH 10 +#define FRF_BB_RX_EVQ_WAKEUP_MASK_LBN 15 +#define FRF_BB_RX_EVQ_WAKEUP_MASK_WIDTH 6 +#define FRF_AZ_EVQ_OWNERR_CTL_LBN 14 +#define FRF_AZ_EVQ_OWNERR_CTL_WIDTH 1 +#define FRF_AZ_EVQ_FIFO_AF_TH_LBN 7 +#define FRF_AZ_EVQ_FIFO_AF_TH_WIDTH 7 +#define FRF_AZ_EVQ_FIFO_NOTAF_TH_LBN 0 +#define FRF_AZ_EVQ_FIFO_NOTAF_TH_WIDTH 7 + +/* EVQ_CNT1_REG: Event counter 1 register */ +#define FR_AZ_EVQ_CNT1 0x00000460 +#define FRF_AZ_EVQ_CNT_PRE_FIFO_LBN 120 +#define FRF_AZ_EVQ_CNT_PRE_FIFO_WIDTH 7 +#define FRF_AZ_EVQ_CNT_TOBIU_LBN 100 +#define FRF_AZ_EVQ_CNT_TOBIU_WIDTH 20 +#define FRF_AZ_EVQ_TX_REQ_CNT_LBN 80 +#define FRF_AZ_EVQ_TX_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_RX_REQ_CNT_LBN 60 +#define FRF_AZ_EVQ_RX_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_EM_REQ_CNT_LBN 40 +#define FRF_AZ_EVQ_EM_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_CSR_REQ_CNT_LBN 20 +#define FRF_AZ_EVQ_CSR_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_ERR_REQ_CNT_LBN 0 +#define FRF_AZ_EVQ_ERR_REQ_CNT_WIDTH 20 + +/* EVQ_CNT2_REG: Event counter 2 register */ +#define FR_AZ_EVQ_CNT2 0x00000470 +#define FRF_AZ_EVQ_UPD_REQ_CNT_LBN 104 +#define FRF_AZ_EVQ_UPD_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_CLR_REQ_CNT_LBN 84 +#define FRF_AZ_EVQ_CLR_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_RDY_CNT_LBN 80 +#define FRF_AZ_EVQ_RDY_CNT_WIDTH 4 +#define FRF_AZ_EVQ_WU_REQ_CNT_LBN 60 +#define FRF_AZ_EVQ_WU_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_WET_REQ_CNT_LBN 40 +#define FRF_AZ_EVQ_WET_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_INIT_REQ_CNT_LBN 20 +#define FRF_AZ_EVQ_INIT_REQ_CNT_WIDTH 20 +#define FRF_AZ_EVQ_TM_REQ_CNT_LBN 0 +#define FRF_AZ_EVQ_TM_REQ_CNT_WIDTH 20 + +/* USR_EV_REG: Event mailbox register */ +#define FR_CZ_USR_EV 0x00000540 +#define FR_CZ_USR_EV_STEP 8192 +#define FR_CZ_USR_EV_ROWS 1024 +#define FRF_CZ_USR_EV_DATA_LBN 0 +#define FRF_CZ_USR_EV_DATA_WIDTH 32 + +/* BUF_TBL_CFG_REG: Buffer table configuration register */ +#define FR_AZ_BUF_TBL_CFG 0x00000600 +#define FRF_AZ_BUF_TBL_MODE_LBN 3 +#define FRF_AZ_BUF_TBL_MODE_WIDTH 1 + +/* SRM_RX_DC_CFG_REG: SRAM receive descriptor cache configuration register */ +#define FR_AZ_SRM_RX_DC_CFG 0x00000610 +#define FRF_AZ_SRM_CLK_TMP_EN_LBN 21 +#define FRF_AZ_SRM_CLK_TMP_EN_WIDTH 1 +#define FRF_AZ_SRM_RX_DC_BASE_ADR_LBN 0 +#define FRF_AZ_SRM_RX_DC_BASE_ADR_WIDTH 21 + +/* SRM_TX_DC_CFG_REG: SRAM transmit descriptor cache configuration register */ +#define FR_AZ_SRM_TX_DC_CFG 0x00000620 +#define FRF_AZ_SRM_TX_DC_BASE_ADR_LBN 0 +#define FRF_AZ_SRM_TX_DC_BASE_ADR_WIDTH 21 + +/* SRM_CFG_REG: SRAM configuration register */ +#define FR_AZ_SRM_CFG 0x00000630 +#define FRF_AZ_SRM_OOB_ADR_INTEN_LBN 5 +#define FRF_AZ_SRM_OOB_ADR_INTEN_WIDTH 1 +#define FRF_AZ_SRM_OOB_BUF_INTEN_LBN 4 +#define FRF_AZ_SRM_OOB_BUF_INTEN_WIDTH 1 +#define FRF_AZ_SRM_INIT_EN_LBN 3 +#define FRF_AZ_SRM_INIT_EN_WIDTH 1 +#define FRF_AZ_SRM_NUM_BANK_LBN 2 +#define FRF_AZ_SRM_NUM_BANK_WIDTH 1 +#define FRF_AZ_SRM_BANK_SIZE_LBN 0 +#define FRF_AZ_SRM_BANK_SIZE_WIDTH 2 + +/* BUF_TBL_UPD_REG: Buffer table update register */ +#define FR_AZ_BUF_TBL_UPD 0x00000650 +#define FRF_AZ_BUF_UPD_CMD_LBN 63 +#define FRF_AZ_BUF_UPD_CMD_WIDTH 1 +#define FRF_AZ_BUF_CLR_CMD_LBN 62 +#define FRF_AZ_BUF_CLR_CMD_WIDTH 1 +#define FRF_AZ_BUF_CLR_END_ID_LBN 32 +#define FRF_AZ_BUF_CLR_END_ID_WIDTH 20 +#define FRF_AZ_BUF_CLR_START_ID_LBN 0 +#define FRF_AZ_BUF_CLR_START_ID_WIDTH 20 + +/* SRM_UPD_EVQ_REG: Buffer table update register */ +#define FR_AZ_SRM_UPD_EVQ 0x00000660 +#define FRF_AZ_SRM_UPD_EVQ_ID_LBN 0 +#define FRF_AZ_SRM_UPD_EVQ_ID_WIDTH 12 + +/* SRAM_PARITY_REG: SRAM parity register. */ +#define FR_AZ_SRAM_PARITY 0x00000670 +#define FRF_CZ_BYPASS_ECC_LBN 3 +#define FRF_CZ_BYPASS_ECC_WIDTH 1 +#define FRF_CZ_SEC_INT_LBN 2 +#define FRF_CZ_SEC_INT_WIDTH 1 +#define FRF_CZ_FORCE_SRAM_DOUBLE_ERR_LBN 1 +#define FRF_CZ_FORCE_SRAM_DOUBLE_ERR_WIDTH 1 +#define FRF_AB_FORCE_SRAM_PERR_LBN 0 +#define FRF_AB_FORCE_SRAM_PERR_WIDTH 1 +#define FRF_CZ_FORCE_SRAM_SINGLE_ERR_LBN 0 +#define FRF_CZ_FORCE_SRAM_SINGLE_ERR_WIDTH 1 + +/* RX_CFG_REG: Receive configuration register */ +#define FR_AZ_RX_CFG 0x00000800 +#define FRF_CZ_RX_MIN_KBUF_SIZE_LBN 72 +#define FRF_CZ_RX_MIN_KBUF_SIZE_WIDTH 14 +#define FRF_CZ_RX_HDR_SPLIT_EN_LBN 71 +#define FRF_CZ_RX_HDR_SPLIT_EN_WIDTH 1 +#define FRF_CZ_RX_HDR_SPLIT_PLD_BUF_SIZE_LBN 62 +#define FRF_CZ_RX_HDR_SPLIT_PLD_BUF_SIZE_WIDTH 9 +#define FRF_CZ_RX_HDR_SPLIT_HDR_BUF_SIZE_LBN 53 +#define FRF_CZ_RX_HDR_SPLIT_HDR_BUF_SIZE_WIDTH 9 +#define FRF_CZ_RX_PRE_RFF_IPG_LBN 49 +#define FRF_CZ_RX_PRE_RFF_IPG_WIDTH 4 +#define FRF_BZ_RX_TCP_SUP_LBN 48 +#define FRF_BZ_RX_TCP_SUP_WIDTH 1 +#define FRF_BZ_RX_INGR_EN_LBN 47 +#define FRF_BZ_RX_INGR_EN_WIDTH 1 +#define FRF_BZ_RX_IP_HASH_LBN 46 +#define FRF_BZ_RX_IP_HASH_WIDTH 1 +#define FRF_BZ_RX_HASH_ALG_LBN 45 +#define FRF_BZ_RX_HASH_ALG_WIDTH 1 +#define FRF_BZ_RX_HASH_INSRT_HDR_LBN 44 +#define FRF_BZ_RX_HASH_INSRT_HDR_WIDTH 1 +#define FRF_BZ_RX_DESC_PUSH_EN_LBN 43 +#define FRF_BZ_RX_DESC_PUSH_EN_WIDTH 1 +#define FRF_BZ_RX_RDW_PATCH_EN_LBN 42 +#define FRF_BZ_RX_RDW_PATCH_EN_WIDTH 1 +#define FRF_BB_RX_PCI_BURST_SIZE_LBN 39 +#define FRF_BB_RX_PCI_BURST_SIZE_WIDTH 3 +#define FRF_BZ_RX_OWNERR_CTL_LBN 38 +#define FRF_BZ_RX_OWNERR_CTL_WIDTH 1 +#define FRF_BZ_RX_XON_TX_TH_LBN 33 +#define FRF_BZ_RX_XON_TX_TH_WIDTH 5 +#define FRF_AA_RX_DESC_PUSH_EN_LBN 35 +#define FRF_AA_RX_DESC_PUSH_EN_WIDTH 1 +#define FRF_AA_RX_RDW_PATCH_EN_LBN 34 +#define FRF_AA_RX_RDW_PATCH_EN_WIDTH 1 +#define FRF_AA_RX_PCI_BURST_SIZE_LBN 31 +#define FRF_AA_RX_PCI_BURST_SIZE_WIDTH 3 +#define FRF_BZ_RX_XOFF_TX_TH_LBN 28 +#define FRF_BZ_RX_XOFF_TX_TH_WIDTH 5 +#define FRF_AA_RX_OWNERR_CTL_LBN 30 +#define FRF_AA_RX_OWNERR_CTL_WIDTH 1 +#define FRF_AA_RX_XON_TX_TH_LBN 25 +#define FRF_AA_RX_XON_TX_TH_WIDTH 5 +#define FRF_BZ_RX_USR_BUF_SIZE_LBN 19 +#define FRF_BZ_RX_USR_BUF_SIZE_WIDTH 9 +#define FRF_AA_RX_XOFF_TX_TH_LBN 20 +#define FRF_AA_RX_XOFF_TX_TH_WIDTH 5 +#define FRF_AA_RX_USR_BUF_SIZE_LBN 11 +#define FRF_AA_RX_USR_BUF_SIZE_WIDTH 9 +#define FRF_BZ_RX_XON_MAC_TH_LBN 10 +#define FRF_BZ_RX_XON_MAC_TH_WIDTH 9 +#define FRF_AA_RX_XON_MAC_TH_LBN 6 +#define FRF_AA_RX_XON_MAC_TH_WIDTH 5 +#define FRF_BZ_RX_XOFF_MAC_TH_LBN 1 +#define FRF_BZ_RX_XOFF_MAC_TH_WIDTH 9 +#define FRF_AA_RX_XOFF_MAC_TH_LBN 1 +#define FRF_AA_RX_XOFF_MAC_TH_WIDTH 5 +#define FRF_AZ_RX_XOFF_MAC_EN_LBN 0 +#define FRF_AZ_RX_XOFF_MAC_EN_WIDTH 1 + +/* RX_FILTER_CTL_REG: Receive filter control registers */ +#define FR_BZ_RX_FILTER_CTL 0x00000810 +#define FRF_CZ_ETHERNET_WILDCARD_SEARCH_LIMIT_LBN 94 +#define FRF_CZ_ETHERNET_WILDCARD_SEARCH_LIMIT_WIDTH 8 +#define FRF_CZ_ETHERNET_FULL_SEARCH_LIMIT_LBN 86 +#define FRF_CZ_ETHERNET_FULL_SEARCH_LIMIT_WIDTH 8 +#define FRF_CZ_RX_FILTER_ALL_VLAN_ETHERTYPES_LBN 85 +#define FRF_CZ_RX_FILTER_ALL_VLAN_ETHERTYPES_WIDTH 1 +#define FRF_CZ_RX_VLAN_MATCH_ETHERTYPE_LBN 69 +#define FRF_CZ_RX_VLAN_MATCH_ETHERTYPE_WIDTH 16 +#define FRF_CZ_MULTICAST_NOMATCH_Q_ID_LBN 57 +#define FRF_CZ_MULTICAST_NOMATCH_Q_ID_WIDTH 12 +#define FRF_CZ_MULTICAST_NOMATCH_RSS_ENABLED_LBN 56 +#define FRF_CZ_MULTICAST_NOMATCH_RSS_ENABLED_WIDTH 1 +#define FRF_CZ_MULTICAST_NOMATCH_IP_OVERRIDE_LBN 55 +#define FRF_CZ_MULTICAST_NOMATCH_IP_OVERRIDE_WIDTH 1 +#define FRF_CZ_UNICAST_NOMATCH_Q_ID_LBN 43 +#define FRF_CZ_UNICAST_NOMATCH_Q_ID_WIDTH 12 +#define FRF_CZ_UNICAST_NOMATCH_RSS_ENABLED_LBN 42 +#define FRF_CZ_UNICAST_NOMATCH_RSS_ENABLED_WIDTH 1 +#define FRF_CZ_UNICAST_NOMATCH_IP_OVERRIDE_LBN 41 +#define FRF_CZ_UNICAST_NOMATCH_IP_OVERRIDE_WIDTH 1 +#define FRF_BZ_SCATTER_ENBL_NO_MATCH_Q_LBN 40 +#define FRF_BZ_SCATTER_ENBL_NO_MATCH_Q_WIDTH 1 +#define FRF_BZ_UDP_FULL_SRCH_LIMIT_LBN 32 +#define FRF_BZ_UDP_FULL_SRCH_LIMIT_WIDTH 8 +#define FRF_BZ_NUM_KER_LBN 24 +#define FRF_BZ_NUM_KER_WIDTH 2 +#define FRF_BZ_UDP_WILD_SRCH_LIMIT_LBN 16 +#define FRF_BZ_UDP_WILD_SRCH_LIMIT_WIDTH 8 +#define FRF_BZ_TCP_WILD_SRCH_LIMIT_LBN 8 +#define FRF_BZ_TCP_WILD_SRCH_LIMIT_WIDTH 8 +#define FRF_BZ_TCP_FULL_SRCH_LIMIT_LBN 0 +#define FRF_BZ_TCP_FULL_SRCH_LIMIT_WIDTH 8 + +/* RX_FLUSH_DESCQ_REG: Receive flush descriptor queue register */ +#define FR_AZ_RX_FLUSH_DESCQ 0x00000820 +#define FRF_AZ_RX_FLUSH_DESCQ_CMD_LBN 24 +#define FRF_AZ_RX_FLUSH_DESCQ_CMD_WIDTH 1 +#define FRF_AZ_RX_FLUSH_DESCQ_LBN 0 +#define FRF_AZ_RX_FLUSH_DESCQ_WIDTH 12 + +/* RX_DESC_UPD_REGP0: Receive descriptor update register. */ +#define FR_BZ_RX_DESC_UPD_P0 0x00000830 +#define FR_BZ_RX_DESC_UPD_P0_STEP 8192 +#define FR_BZ_RX_DESC_UPD_P0_ROWS 1024 +/* RX_DESC_UPD_REG_KER: Receive descriptor update register. */ +#define FR_AA_RX_DESC_UPD_KER 0x00000830 +#define FR_AA_RX_DESC_UPD_KER_STEP 8192 +#define FR_AA_RX_DESC_UPD_KER_ROWS 4 +/* RX_DESC_UPD_REGP123: Receive descriptor update register. */ +#define FR_BB_RX_DESC_UPD_P123 0x01000830 +#define FR_BB_RX_DESC_UPD_P123_STEP 8192 +#define FR_BB_RX_DESC_UPD_P123_ROWS 3072 +#define FRF_AZ_RX_DESC_WPTR_LBN 96 +#define FRF_AZ_RX_DESC_WPTR_WIDTH 12 +#define FRF_AZ_RX_DESC_PUSH_CMD_LBN 95 +#define FRF_AZ_RX_DESC_PUSH_CMD_WIDTH 1 +#define FRF_AZ_RX_DESC_LBN 0 +#define FRF_AZ_RX_DESC_WIDTH 64 + +/* RX_DC_CFG_REG: Receive descriptor cache configuration register */ +#define FR_AZ_RX_DC_CFG 0x00000840 +#define FRF_AB_RX_MAX_PF_LBN 2 +#define FRF_AB_RX_MAX_PF_WIDTH 2 +#define FRF_AZ_RX_DC_SIZE_LBN 0 +#define FRF_AZ_RX_DC_SIZE_WIDTH 2 +#define FFE_AZ_RX_DC_SIZE_64 3 +#define FFE_AZ_RX_DC_SIZE_32 2 +#define FFE_AZ_RX_DC_SIZE_16 1 +#define FFE_AZ_RX_DC_SIZE_8 0 + +/* RX_DC_PF_WM_REG: Receive descriptor cache pre-fetch watermark register */ +#define FR_AZ_RX_DC_PF_WM 0x00000850 +#define FRF_AZ_RX_DC_PF_HWM_LBN 6 +#define FRF_AZ_RX_DC_PF_HWM_WIDTH 6 +#define FRF_AZ_RX_DC_PF_LWM_LBN 0 +#define FRF_AZ_RX_DC_PF_LWM_WIDTH 6 + +/* RX_RSS_TKEY_REG: RSS Toeplitz hash key */ +#define FR_BZ_RX_RSS_TKEY 0x00000860 +#define FRF_BZ_RX_RSS_TKEY_HI_LBN 64 +#define FRF_BZ_RX_RSS_TKEY_HI_WIDTH 64 +#define FRF_BZ_RX_RSS_TKEY_LO_LBN 0 +#define FRF_BZ_RX_RSS_TKEY_LO_WIDTH 64 + +/* RX_NODESC_DROP_REG: Receive dropped packet counter register */ +#define FR_AZ_RX_NODESC_DROP 0x00000880 +#define FRF_CZ_RX_NODESC_DROP_CNT_LBN 0 +#define FRF_CZ_RX_NODESC_DROP_CNT_WIDTH 32 +#define FRF_AB_RX_NODESC_DROP_CNT_LBN 0 +#define FRF_AB_RX_NODESC_DROP_CNT_WIDTH 16 + +/* RX_SELF_RST_REG: Receive self reset register */ +#define FR_AA_RX_SELF_RST 0x00000890 +#define FRF_AA_RX_ISCSI_DIS_LBN 17 +#define FRF_AA_RX_ISCSI_DIS_WIDTH 1 +#define FRF_AA_RX_SW_RST_REG_LBN 16 +#define FRF_AA_RX_SW_RST_REG_WIDTH 1 +#define FRF_AA_RX_NODESC_WAIT_DIS_LBN 9 +#define FRF_AA_RX_NODESC_WAIT_DIS_WIDTH 1 +#define FRF_AA_RX_SELF_RST_EN_LBN 8 +#define FRF_AA_RX_SELF_RST_EN_WIDTH 1 +#define FRF_AA_RX_MAX_PF_LAT_LBN 4 +#define FRF_AA_RX_MAX_PF_LAT_WIDTH 4 +#define FRF_AA_RX_MAX_LU_LAT_LBN 0 +#define FRF_AA_RX_MAX_LU_LAT_WIDTH 4 + +/* RX_DEBUG_REG: undocumented register */ +#define FR_AZ_RX_DEBUG 0x000008a0 +#define FRF_AZ_RX_DEBUG_LBN 0 +#define FRF_AZ_RX_DEBUG_WIDTH 64 + +/* RX_PUSH_DROP_REG: Receive descriptor push dropped counter register */ +#define FR_AZ_RX_PUSH_DROP 0x000008b0 +#define FRF_AZ_RX_PUSH_DROP_CNT_LBN 0 +#define FRF_AZ_RX_PUSH_DROP_CNT_WIDTH 32 + +/* RX_RSS_IPV6_REG1: IPv6 RSS Toeplitz hash key low bytes */ +#define FR_CZ_RX_RSS_IPV6_REG1 0x000008d0 +#define FRF_CZ_RX_RSS_IPV6_TKEY_LO_LBN 0 +#define FRF_CZ_RX_RSS_IPV6_TKEY_LO_WIDTH 128 + +/* RX_RSS_IPV6_REG2: IPv6 RSS Toeplitz hash key middle bytes */ +#define FR_CZ_RX_RSS_IPV6_REG2 0x000008e0 +#define FRF_CZ_RX_RSS_IPV6_TKEY_MID_LBN 0 +#define FRF_CZ_RX_RSS_IPV6_TKEY_MID_WIDTH 128 + +/* RX_RSS_IPV6_REG3: IPv6 RSS Toeplitz hash key upper bytes and IPv6 RSS settings */ +#define FR_CZ_RX_RSS_IPV6_REG3 0x000008f0 +#define FRF_CZ_RX_RSS_IPV6_THASH_ENABLE_LBN 66 +#define FRF_CZ_RX_RSS_IPV6_THASH_ENABLE_WIDTH 1 +#define FRF_CZ_RX_RSS_IPV6_IP_THASH_ENABLE_LBN 65 +#define FRF_CZ_RX_RSS_IPV6_IP_THASH_ENABLE_WIDTH 1 +#define FRF_CZ_RX_RSS_IPV6_TCP_SUPPRESS_LBN 64 +#define FRF_CZ_RX_RSS_IPV6_TCP_SUPPRESS_WIDTH 1 +#define FRF_CZ_RX_RSS_IPV6_TKEY_HI_LBN 0 +#define FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH 64 + +/* TX_FLUSH_DESCQ_REG: Transmit flush descriptor queue register */ +#define FR_AZ_TX_FLUSH_DESCQ 0x00000a00 +#define FRF_AZ_TX_FLUSH_DESCQ_CMD_LBN 12 +#define FRF_AZ_TX_FLUSH_DESCQ_CMD_WIDTH 1 +#define FRF_AZ_TX_FLUSH_DESCQ_LBN 0 +#define FRF_AZ_TX_FLUSH_DESCQ_WIDTH 12 + +/* TX_DESC_UPD_REGP0: Transmit descriptor update register. */ +#define FR_BZ_TX_DESC_UPD_P0 0x00000a10 +#define FR_BZ_TX_DESC_UPD_P0_STEP 8192 +#define FR_BZ_TX_DESC_UPD_P0_ROWS 1024 +/* TX_DESC_UPD_REG_KER: Transmit descriptor update register. */ +#define FR_AA_TX_DESC_UPD_KER 0x00000a10 +#define FR_AA_TX_DESC_UPD_KER_STEP 8192 +#define FR_AA_TX_DESC_UPD_KER_ROWS 8 +/* TX_DESC_UPD_REGP123: Transmit descriptor update register. */ +#define FR_BB_TX_DESC_UPD_P123 0x01000a10 +#define FR_BB_TX_DESC_UPD_P123_STEP 8192 +#define FR_BB_TX_DESC_UPD_P123_ROWS 3072 +#define FRF_AZ_TX_DESC_WPTR_LBN 96 +#define FRF_AZ_TX_DESC_WPTR_WIDTH 12 +#define FRF_AZ_TX_DESC_PUSH_CMD_LBN 95 +#define FRF_AZ_TX_DESC_PUSH_CMD_WIDTH 1 +#define FRF_AZ_TX_DESC_LBN 0 +#define FRF_AZ_TX_DESC_WIDTH 95 + +/* TX_DC_CFG_REG: Transmit descriptor cache configuration register */ +#define FR_AZ_TX_DC_CFG 0x00000a20 +#define FRF_AZ_TX_DC_SIZE_LBN 0 +#define FRF_AZ_TX_DC_SIZE_WIDTH 2 +#define FFE_AZ_TX_DC_SIZE_32 2 +#define FFE_AZ_TX_DC_SIZE_16 1 +#define FFE_AZ_TX_DC_SIZE_8 0 + +/* TX_CHKSM_CFG_REG: Transmit checksum configuration register */ +#define FR_AA_TX_CHKSM_CFG 0x00000a30 +#define FRF_AA_TX_Q_CHKSM_DIS_96_127_LBN 96 +#define FRF_AA_TX_Q_CHKSM_DIS_96_127_WIDTH 32 +#define FRF_AA_TX_Q_CHKSM_DIS_64_95_LBN 64 +#define FRF_AA_TX_Q_CHKSM_DIS_64_95_WIDTH 32 +#define FRF_AA_TX_Q_CHKSM_DIS_32_63_LBN 32 +#define FRF_AA_TX_Q_CHKSM_DIS_32_63_WIDTH 32 +#define FRF_AA_TX_Q_CHKSM_DIS_0_31_LBN 0 +#define FRF_AA_TX_Q_CHKSM_DIS_0_31_WIDTH 32 + +/* TX_CFG_REG: Transmit configuration register */ +#define FR_AZ_TX_CFG 0x00000a50 +#define FRF_CZ_TX_CONT_LOOKUP_THRESH_RANGE_LBN 114 +#define FRF_CZ_TX_CONT_LOOKUP_THRESH_RANGE_WIDTH 8 +#define FRF_CZ_TX_FILTER_TEST_MODE_BIT_LBN 113 +#define FRF_CZ_TX_FILTER_TEST_MODE_BIT_WIDTH 1 +#define FRF_CZ_TX_ETH_FILTER_WILD_SEARCH_RANGE_LBN 105 +#define FRF_CZ_TX_ETH_FILTER_WILD_SEARCH_RANGE_WIDTH 8 +#define FRF_CZ_TX_ETH_FILTER_FULL_SEARCH_RANGE_LBN 97 +#define FRF_CZ_TX_ETH_FILTER_FULL_SEARCH_RANGE_WIDTH 8 +#define FRF_CZ_TX_UDPIP_FILTER_WILD_SEARCH_RANGE_LBN 89 +#define FRF_CZ_TX_UDPIP_FILTER_WILD_SEARCH_RANGE_WIDTH 8 +#define FRF_CZ_TX_UDPIP_FILTER_FULL_SEARCH_RANGE_LBN 81 +#define FRF_CZ_TX_UDPIP_FILTER_FULL_SEARCH_RANGE_WIDTH 8 +#define FRF_CZ_TX_TCPIP_FILTER_WILD_SEARCH_RANGE_LBN 73 +#define FRF_CZ_TX_TCPIP_FILTER_WILD_SEARCH_RANGE_WIDTH 8 +#define FRF_CZ_TX_TCPIP_FILTER_FULL_SEARCH_RANGE_LBN 65 +#define FRF_CZ_TX_TCPIP_FILTER_FULL_SEARCH_RANGE_WIDTH 8 +#define FRF_CZ_TX_FILTER_ALL_VLAN_ETHERTYPES_BIT_LBN 64 +#define FRF_CZ_TX_FILTER_ALL_VLAN_ETHERTYPES_BIT_WIDTH 1 +#define FRF_CZ_TX_VLAN_MATCH_ETHERTYPE_RANGE_LBN 48 +#define FRF_CZ_TX_VLAN_MATCH_ETHERTYPE_RANGE_WIDTH 16 +#define FRF_CZ_TX_FILTER_EN_BIT_LBN 47 +#define FRF_CZ_TX_FILTER_EN_BIT_WIDTH 1 +#define FRF_AZ_TX_IP_ID_P0_OFS_LBN 16 +#define FRF_AZ_TX_IP_ID_P0_OFS_WIDTH 15 +#define FRF_AZ_TX_NO_EOP_DISC_EN_LBN 5 +#define FRF_AZ_TX_NO_EOP_DISC_EN_WIDTH 1 +#define FRF_AZ_TX_P1_PRI_EN_LBN 4 +#define FRF_AZ_TX_P1_PRI_EN_WIDTH 1 +#define FRF_AZ_TX_OWNERR_CTL_LBN 2 +#define FRF_AZ_TX_OWNERR_CTL_WIDTH 1 +#define FRF_AA_TX_NON_IP_DROP_DIS_LBN 1 +#define FRF_AA_TX_NON_IP_DROP_DIS_WIDTH 1 +#define FRF_AZ_TX_IP_ID_REP_EN_LBN 0 +#define FRF_AZ_TX_IP_ID_REP_EN_WIDTH 1 + +/* TX_PUSH_DROP_REG: Transmit push dropped register */ +#define FR_AZ_TX_PUSH_DROP 0x00000a60 +#define FRF_AZ_TX_PUSH_DROP_CNT_LBN 0 +#define FRF_AZ_TX_PUSH_DROP_CNT_WIDTH 32 + +/* TX_RESERVED_REG: Transmit configuration register */ +#define FR_AZ_TX_RESERVED 0x00000a80 +#define FRF_AZ_TX_EVT_CNT_LBN 121 +#define FRF_AZ_TX_EVT_CNT_WIDTH 7 +#define FRF_AZ_TX_PREF_AGE_CNT_LBN 119 +#define FRF_AZ_TX_PREF_AGE_CNT_WIDTH 2 +#define FRF_AZ_TX_RD_COMP_TMR_LBN 96 +#define FRF_AZ_TX_RD_COMP_TMR_WIDTH 23 +#define FRF_AZ_TX_PUSH_EN_LBN 89 +#define FRF_AZ_TX_PUSH_EN_WIDTH 1 +#define FRF_AZ_TX_PUSH_CHK_DIS_LBN 88 +#define FRF_AZ_TX_PUSH_CHK_DIS_WIDTH 1 +#define FRF_AZ_TX_D_FF_FULL_P0_LBN 85 +#define FRF_AZ_TX_D_FF_FULL_P0_WIDTH 1 +#define FRF_AZ_TX_DMAR_ST_P0_LBN 81 +#define FRF_AZ_TX_DMAR_ST_P0_WIDTH 1 +#define FRF_AZ_TX_DMAQ_ST_LBN 78 +#define FRF_AZ_TX_DMAQ_ST_WIDTH 1 +#define FRF_AZ_TX_RX_SPACER_LBN 64 +#define FRF_AZ_TX_RX_SPACER_WIDTH 8 +#define FRF_AZ_TX_DROP_ABORT_EN_LBN 60 +#define FRF_AZ_TX_DROP_ABORT_EN_WIDTH 1 +#define FRF_AZ_TX_SOFT_EVT_EN_LBN 59 +#define FRF_AZ_TX_SOFT_EVT_EN_WIDTH 1 +#define FRF_AZ_TX_PS_EVT_DIS_LBN 58 +#define FRF_AZ_TX_PS_EVT_DIS_WIDTH 1 +#define FRF_AZ_TX_RX_SPACER_EN_LBN 57 +#define FRF_AZ_TX_RX_SPACER_EN_WIDTH 1 +#define FRF_AZ_TX_XP_TIMER_LBN 52 +#define FRF_AZ_TX_XP_TIMER_WIDTH 5 +#define FRF_AZ_TX_PREF_SPACER_LBN 44 +#define FRF_AZ_TX_PREF_SPACER_WIDTH 8 +#define FRF_AZ_TX_PREF_WD_TMR_LBN 22 +#define FRF_AZ_TX_PREF_WD_TMR_WIDTH 22 +#define FRF_AZ_TX_ONLY1TAG_LBN 21 +#define FRF_AZ_TX_ONLY1TAG_WIDTH 1 +#define FRF_AZ_TX_PREF_THRESHOLD_LBN 19 +#define FRF_AZ_TX_PREF_THRESHOLD_WIDTH 2 +#define FRF_AZ_TX_ONE_PKT_PER_Q_LBN 18 +#define FRF_AZ_TX_ONE_PKT_PER_Q_WIDTH 1 +#define FRF_AZ_TX_DIS_NON_IP_EV_LBN 17 +#define FRF_AZ_TX_DIS_NON_IP_EV_WIDTH 1 +#define FRF_AA_TX_DMA_FF_THR_LBN 16 +#define FRF_AA_TX_DMA_FF_THR_WIDTH 1 +#define FRF_AZ_TX_DMA_SPACER_LBN 8 +#define FRF_AZ_TX_DMA_SPACER_WIDTH 8 +#define FRF_AA_TX_TCP_DIS_LBN 7 +#define FRF_AA_TX_TCP_DIS_WIDTH 1 +#define FRF_BZ_TX_FLUSH_MIN_LEN_EN_LBN 7 +#define FRF_BZ_TX_FLUSH_MIN_LEN_EN_WIDTH 1 +#define FRF_AA_TX_IP_DIS_LBN 6 +#define FRF_AA_TX_IP_DIS_WIDTH 1 +#define FRF_AZ_TX_MAX_CPL_LBN 2 +#define FRF_AZ_TX_MAX_CPL_WIDTH 2 +#define FFE_AZ_TX_MAX_CPL_16 3 +#define FFE_AZ_TX_MAX_CPL_8 2 +#define FFE_AZ_TX_MAX_CPL_4 1 +#define FFE_AZ_TX_MAX_CPL_NOLIMIT 0 +#define FRF_AZ_TX_MAX_PREF_LBN 0 +#define FRF_AZ_TX_MAX_PREF_WIDTH 2 +#define FFE_AZ_TX_MAX_PREF_32 3 +#define FFE_AZ_TX_MAX_PREF_16 2 +#define FFE_AZ_TX_MAX_PREF_8 1 +#define FFE_AZ_TX_MAX_PREF_OFF 0 + +/* TX_PACE_REG: Transmit pace control register */ +#define FR_BZ_TX_PACE 0x00000a90 +#define FRF_BZ_TX_PACE_SB_NOT_AF_LBN 19 +#define FRF_BZ_TX_PACE_SB_NOT_AF_WIDTH 10 +#define FRF_BZ_TX_PACE_SB_AF_LBN 9 +#define FRF_BZ_TX_PACE_SB_AF_WIDTH 10 +#define FRF_BZ_TX_PACE_FB_BASE_LBN 5 +#define FRF_BZ_TX_PACE_FB_BASE_WIDTH 4 +#define FRF_BZ_TX_PACE_BIN_TH_LBN 0 +#define FRF_BZ_TX_PACE_BIN_TH_WIDTH 5 + +/* TX_PACE_DROP_QID_REG: PACE Drop QID Counter */ +#define FR_BZ_TX_PACE_DROP_QID 0x00000aa0 +#define FRF_BZ_TX_PACE_QID_DRP_CNT_LBN 0 +#define FRF_BZ_TX_PACE_QID_DRP_CNT_WIDTH 16 + +/* TX_VLAN_REG: Transmit VLAN tag register */ +#define FR_BB_TX_VLAN 0x00000ae0 +#define FRF_BB_TX_VLAN_EN_LBN 127 +#define FRF_BB_TX_VLAN_EN_WIDTH 1 +#define FRF_BB_TX_VLAN7_PORT1_EN_LBN 125 +#define FRF_BB_TX_VLAN7_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN7_PORT0_EN_LBN 124 +#define FRF_BB_TX_VLAN7_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN7_LBN 112 +#define FRF_BB_TX_VLAN7_WIDTH 12 +#define FRF_BB_TX_VLAN6_PORT1_EN_LBN 109 +#define FRF_BB_TX_VLAN6_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN6_PORT0_EN_LBN 108 +#define FRF_BB_TX_VLAN6_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN6_LBN 96 +#define FRF_BB_TX_VLAN6_WIDTH 12 +#define FRF_BB_TX_VLAN5_PORT1_EN_LBN 93 +#define FRF_BB_TX_VLAN5_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN5_PORT0_EN_LBN 92 +#define FRF_BB_TX_VLAN5_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN5_LBN 80 +#define FRF_BB_TX_VLAN5_WIDTH 12 +#define FRF_BB_TX_VLAN4_PORT1_EN_LBN 77 +#define FRF_BB_TX_VLAN4_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN4_PORT0_EN_LBN 76 +#define FRF_BB_TX_VLAN4_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN4_LBN 64 +#define FRF_BB_TX_VLAN4_WIDTH 12 +#define FRF_BB_TX_VLAN3_PORT1_EN_LBN 61 +#define FRF_BB_TX_VLAN3_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN3_PORT0_EN_LBN 60 +#define FRF_BB_TX_VLAN3_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN3_LBN 48 +#define FRF_BB_TX_VLAN3_WIDTH 12 +#define FRF_BB_TX_VLAN2_PORT1_EN_LBN 45 +#define FRF_BB_TX_VLAN2_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN2_PORT0_EN_LBN 44 +#define FRF_BB_TX_VLAN2_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN2_LBN 32 +#define FRF_BB_TX_VLAN2_WIDTH 12 +#define FRF_BB_TX_VLAN1_PORT1_EN_LBN 29 +#define FRF_BB_TX_VLAN1_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN1_PORT0_EN_LBN 28 +#define FRF_BB_TX_VLAN1_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN1_LBN 16 +#define FRF_BB_TX_VLAN1_WIDTH 12 +#define FRF_BB_TX_VLAN0_PORT1_EN_LBN 13 +#define FRF_BB_TX_VLAN0_PORT1_EN_WIDTH 1 +#define FRF_BB_TX_VLAN0_PORT0_EN_LBN 12 +#define FRF_BB_TX_VLAN0_PORT0_EN_WIDTH 1 +#define FRF_BB_TX_VLAN0_LBN 0 +#define FRF_BB_TX_VLAN0_WIDTH 12 + +/* TX_IPFIL_PORTEN_REG: Transmit filter control register */ +#define FR_BZ_TX_IPFIL_PORTEN 0x00000af0 +#define FRF_BZ_TX_MADR0_FIL_EN_LBN 64 +#define FRF_BZ_TX_MADR0_FIL_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL31_PORT_EN_LBN 62 +#define FRF_BB_TX_IPFIL31_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL30_PORT_EN_LBN 60 +#define FRF_BB_TX_IPFIL30_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL29_PORT_EN_LBN 58 +#define FRF_BB_TX_IPFIL29_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL28_PORT_EN_LBN 56 +#define FRF_BB_TX_IPFIL28_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL27_PORT_EN_LBN 54 +#define FRF_BB_TX_IPFIL27_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL26_PORT_EN_LBN 52 +#define FRF_BB_TX_IPFIL26_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL25_PORT_EN_LBN 50 +#define FRF_BB_TX_IPFIL25_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL24_PORT_EN_LBN 48 +#define FRF_BB_TX_IPFIL24_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL23_PORT_EN_LBN 46 +#define FRF_BB_TX_IPFIL23_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL22_PORT_EN_LBN 44 +#define FRF_BB_TX_IPFIL22_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL21_PORT_EN_LBN 42 +#define FRF_BB_TX_IPFIL21_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL20_PORT_EN_LBN 40 +#define FRF_BB_TX_IPFIL20_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL19_PORT_EN_LBN 38 +#define FRF_BB_TX_IPFIL19_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL18_PORT_EN_LBN 36 +#define FRF_BB_TX_IPFIL18_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL17_PORT_EN_LBN 34 +#define FRF_BB_TX_IPFIL17_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL16_PORT_EN_LBN 32 +#define FRF_BB_TX_IPFIL16_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL15_PORT_EN_LBN 30 +#define FRF_BB_TX_IPFIL15_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL14_PORT_EN_LBN 28 +#define FRF_BB_TX_IPFIL14_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL13_PORT_EN_LBN 26 +#define FRF_BB_TX_IPFIL13_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL12_PORT_EN_LBN 24 +#define FRF_BB_TX_IPFIL12_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL11_PORT_EN_LBN 22 +#define FRF_BB_TX_IPFIL11_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL10_PORT_EN_LBN 20 +#define FRF_BB_TX_IPFIL10_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL9_PORT_EN_LBN 18 +#define FRF_BB_TX_IPFIL9_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL8_PORT_EN_LBN 16 +#define FRF_BB_TX_IPFIL8_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL7_PORT_EN_LBN 14 +#define FRF_BB_TX_IPFIL7_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL6_PORT_EN_LBN 12 +#define FRF_BB_TX_IPFIL6_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL5_PORT_EN_LBN 10 +#define FRF_BB_TX_IPFIL5_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL4_PORT_EN_LBN 8 +#define FRF_BB_TX_IPFIL4_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL3_PORT_EN_LBN 6 +#define FRF_BB_TX_IPFIL3_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL2_PORT_EN_LBN 4 +#define FRF_BB_TX_IPFIL2_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL1_PORT_EN_LBN 2 +#define FRF_BB_TX_IPFIL1_PORT_EN_WIDTH 1 +#define FRF_BB_TX_IPFIL0_PORT_EN_LBN 0 +#define FRF_BB_TX_IPFIL0_PORT_EN_WIDTH 1 + +/* TX_IPFIL_TBL: Transmit IP source address filter table */ +#define FR_BB_TX_IPFIL_TBL 0x00000b00 +#define FR_BB_TX_IPFIL_TBL_STEP 16 +#define FR_BB_TX_IPFIL_TBL_ROWS 16 +#define FRF_BB_TX_IPFIL_MASK_1_LBN 96 +#define FRF_BB_TX_IPFIL_MASK_1_WIDTH 32 +#define FRF_BB_TX_IP_SRC_ADR_1_LBN 64 +#define FRF_BB_TX_IP_SRC_ADR_1_WIDTH 32 +#define FRF_BB_TX_IPFIL_MASK_0_LBN 32 +#define FRF_BB_TX_IPFIL_MASK_0_WIDTH 32 +#define FRF_BB_TX_IP_SRC_ADR_0_LBN 0 +#define FRF_BB_TX_IP_SRC_ADR_0_WIDTH 32 + +/* MD_TXD_REG: PHY management transmit data register */ +#define FR_AB_MD_TXD 0x00000c00 +#define FRF_AB_MD_TXD_LBN 0 +#define FRF_AB_MD_TXD_WIDTH 16 + +/* MD_RXD_REG: PHY management receive data register */ +#define FR_AB_MD_RXD 0x00000c10 +#define FRF_AB_MD_RXD_LBN 0 +#define FRF_AB_MD_RXD_WIDTH 16 + +/* MD_CS_REG: PHY management configuration & status register */ +#define FR_AB_MD_CS 0x00000c20 +#define FRF_AB_MD_RD_EN_CMD_LBN 15 +#define FRF_AB_MD_RD_EN_CMD_WIDTH 1 +#define FRF_AB_MD_WR_EN_CMD_LBN 14 +#define FRF_AB_MD_WR_EN_CMD_WIDTH 1 +#define FRF_AB_MD_ADDR_CMD_LBN 13 +#define FRF_AB_MD_ADDR_CMD_WIDTH 1 +#define FRF_AB_MD_PT_LBN 7 +#define FRF_AB_MD_PT_WIDTH 3 +#define FRF_AB_MD_PL_LBN 6 +#define FRF_AB_MD_PL_WIDTH 1 +#define FRF_AB_MD_INT_CLR_LBN 5 +#define FRF_AB_MD_INT_CLR_WIDTH 1 +#define FRF_AB_MD_GC_LBN 4 +#define FRF_AB_MD_GC_WIDTH 1 +#define FRF_AB_MD_PRSP_LBN 3 +#define FRF_AB_MD_PRSP_WIDTH 1 +#define FRF_AB_MD_RIC_LBN 2 +#define FRF_AB_MD_RIC_WIDTH 1 +#define FRF_AB_MD_RDC_LBN 1 +#define FRF_AB_MD_RDC_WIDTH 1 +#define FRF_AB_MD_WRC_LBN 0 +#define FRF_AB_MD_WRC_WIDTH 1 + +/* MD_PHY_ADR_REG: PHY management PHY address register */ +#define FR_AB_MD_PHY_ADR 0x00000c30 +#define FRF_AB_MD_PHY_ADR_LBN 0 +#define FRF_AB_MD_PHY_ADR_WIDTH 16 + +/* MD_ID_REG: PHY management ID register */ +#define FR_AB_MD_ID 0x00000c40 +#define FRF_AB_MD_PRT_ADR_LBN 11 +#define FRF_AB_MD_PRT_ADR_WIDTH 5 +#define FRF_AB_MD_DEV_ADR_LBN 6 +#define FRF_AB_MD_DEV_ADR_WIDTH 5 + +/* MD_STAT_REG: PHY management status & mask register */ +#define FR_AB_MD_STAT 0x00000c50 +#define FRF_AB_MD_PINT_LBN 4 +#define FRF_AB_MD_PINT_WIDTH 1 +#define FRF_AB_MD_DONE_LBN 3 +#define FRF_AB_MD_DONE_WIDTH 1 +#define FRF_AB_MD_BSERR_LBN 2 +#define FRF_AB_MD_BSERR_WIDTH 1 +#define FRF_AB_MD_LNFL_LBN 1 +#define FRF_AB_MD_LNFL_WIDTH 1 +#define FRF_AB_MD_BSY_LBN 0 +#define FRF_AB_MD_BSY_WIDTH 1 + +/* MAC_STAT_DMA_REG: Port MAC statistical counter DMA register */ +#define FR_AB_MAC_STAT_DMA 0x00000c60 +#define FRF_AB_MAC_STAT_DMA_CMD_LBN 48 +#define FRF_AB_MAC_STAT_DMA_CMD_WIDTH 1 +#define FRF_AB_MAC_STAT_DMA_ADR_LBN 0 +#define FRF_AB_MAC_STAT_DMA_ADR_WIDTH 48 + +/* MAC_CTRL_REG: Port MAC control register */ +#define FR_AB_MAC_CTRL 0x00000c80 +#define FRF_AB_MAC_XOFF_VAL_LBN 16 +#define FRF_AB_MAC_XOFF_VAL_WIDTH 16 +#define FRF_BB_TXFIFO_DRAIN_EN_LBN 7 +#define FRF_BB_TXFIFO_DRAIN_EN_WIDTH 1 +#define FRF_AB_MAC_XG_DISTXCRC_LBN 5 +#define FRF_AB_MAC_XG_DISTXCRC_WIDTH 1 +#define FRF_AB_MAC_BCAD_ACPT_LBN 4 +#define FRF_AB_MAC_BCAD_ACPT_WIDTH 1 +#define FRF_AB_MAC_UC_PROM_LBN 3 +#define FRF_AB_MAC_UC_PROM_WIDTH 1 +#define FRF_AB_MAC_LINK_STATUS_LBN 2 +#define FRF_AB_MAC_LINK_STATUS_WIDTH 1 +#define FRF_AB_MAC_SPEED_LBN 0 +#define FRF_AB_MAC_SPEED_WIDTH 2 +#define FFE_AB_MAC_SPEED_10G 3 +#define FFE_AB_MAC_SPEED_1G 2 +#define FFE_AB_MAC_SPEED_100M 1 +#define FFE_AB_MAC_SPEED_10M 0 + +/* GEN_MODE_REG: General Purpose mode register (external interrupt mask) */ +#define FR_BB_GEN_MODE 0x00000c90 +#define FRF_BB_XFP_PHY_INT_POL_SEL_LBN 3 +#define FRF_BB_XFP_PHY_INT_POL_SEL_WIDTH 1 +#define FRF_BB_XG_PHY_INT_POL_SEL_LBN 2 +#define FRF_BB_XG_PHY_INT_POL_SEL_WIDTH 1 +#define FRF_BB_XFP_PHY_INT_MASK_LBN 1 +#define FRF_BB_XFP_PHY_INT_MASK_WIDTH 1 +#define FRF_BB_XG_PHY_INT_MASK_LBN 0 +#define FRF_BB_XG_PHY_INT_MASK_WIDTH 1 + +/* MAC_MC_HASH_REG0: Multicast address hash table */ +#define FR_AB_MAC_MC_HASH_REG0 0x00000ca0 +#define FRF_AB_MAC_MCAST_HASH0_LBN 0 +#define FRF_AB_MAC_MCAST_HASH0_WIDTH 128 + +/* MAC_MC_HASH_REG1: Multicast address hash table */ +#define FR_AB_MAC_MC_HASH_REG1 0x00000cb0 +#define FRF_AB_MAC_MCAST_HASH1_LBN 0 +#define FRF_AB_MAC_MCAST_HASH1_WIDTH 128 + +/* GM_CFG1_REG: GMAC configuration register 1 */ +#define FR_AB_GM_CFG1 0x00000e00 +#define FRF_AB_GM_SW_RST_LBN 31 +#define FRF_AB_GM_SW_RST_WIDTH 1 +#define FRF_AB_GM_SIM_RST_LBN 30 +#define FRF_AB_GM_SIM_RST_WIDTH 1 +#define FRF_AB_GM_RST_RX_MAC_CTL_LBN 19 +#define FRF_AB_GM_RST_RX_MAC_CTL_WIDTH 1 +#define FRF_AB_GM_RST_TX_MAC_CTL_LBN 18 +#define FRF_AB_GM_RST_TX_MAC_CTL_WIDTH 1 +#define FRF_AB_GM_RST_RX_FUNC_LBN 17 +#define FRF_AB_GM_RST_RX_FUNC_WIDTH 1 +#define FRF_AB_GM_RST_TX_FUNC_LBN 16 +#define FRF_AB_GM_RST_TX_FUNC_WIDTH 1 +#define FRF_AB_GM_LOOP_LBN 8 +#define FRF_AB_GM_LOOP_WIDTH 1 +#define FRF_AB_GM_RX_FC_EN_LBN 5 +#define FRF_AB_GM_RX_FC_EN_WIDTH 1 +#define FRF_AB_GM_TX_FC_EN_LBN 4 +#define FRF_AB_GM_TX_FC_EN_WIDTH 1 +#define FRF_AB_GM_SYNC_RXEN_LBN 3 +#define FRF_AB_GM_SYNC_RXEN_WIDTH 1 +#define FRF_AB_GM_RX_EN_LBN 2 +#define FRF_AB_GM_RX_EN_WIDTH 1 +#define FRF_AB_GM_SYNC_TXEN_LBN 1 +#define FRF_AB_GM_SYNC_TXEN_WIDTH 1 +#define FRF_AB_GM_TX_EN_LBN 0 +#define FRF_AB_GM_TX_EN_WIDTH 1 + +/* GM_CFG2_REG: GMAC configuration register 2 */ +#define FR_AB_GM_CFG2 0x00000e10 +#define FRF_AB_GM_PAMBL_LEN_LBN 12 +#define FRF_AB_GM_PAMBL_LEN_WIDTH 4 +#define FRF_AB_GM_IF_MODE_LBN 8 +#define FRF_AB_GM_IF_MODE_WIDTH 2 +#define FFE_AB_IF_MODE_BYTE_MODE 2 +#define FFE_AB_IF_MODE_NIBBLE_MODE 1 +#define FRF_AB_GM_HUGE_FRM_EN_LBN 5 +#define FRF_AB_GM_HUGE_FRM_EN_WIDTH 1 +#define FRF_AB_GM_LEN_CHK_LBN 4 +#define FRF_AB_GM_LEN_CHK_WIDTH 1 +#define FRF_AB_GM_PAD_CRC_EN_LBN 2 +#define FRF_AB_GM_PAD_CRC_EN_WIDTH 1 +#define FRF_AB_GM_CRC_EN_LBN 1 +#define FRF_AB_GM_CRC_EN_WIDTH 1 +#define FRF_AB_GM_FD_LBN 0 +#define FRF_AB_GM_FD_WIDTH 1 + +/* GM_IPG_REG: GMAC IPG register */ +#define FR_AB_GM_IPG 0x00000e20 +#define FRF_AB_GM_NONB2B_IPG1_LBN 24 +#define FRF_AB_GM_NONB2B_IPG1_WIDTH 7 +#define FRF_AB_GM_NONB2B_IPG2_LBN 16 +#define FRF_AB_GM_NONB2B_IPG2_WIDTH 7 +#define FRF_AB_GM_MIN_IPG_ENF_LBN 8 +#define FRF_AB_GM_MIN_IPG_ENF_WIDTH 8 +#define FRF_AB_GM_B2B_IPG_LBN 0 +#define FRF_AB_GM_B2B_IPG_WIDTH 7 + +/* GM_HD_REG: GMAC half duplex register */ +#define FR_AB_GM_HD 0x00000e30 +#define FRF_AB_GM_ALT_BOFF_VAL_LBN 20 +#define FRF_AB_GM_ALT_BOFF_VAL_WIDTH 4 +#define FRF_AB_GM_ALT_BOFF_EN_LBN 19 +#define FRF_AB_GM_ALT_BOFF_EN_WIDTH 1 +#define FRF_AB_GM_BP_NO_BOFF_LBN 18 +#define FRF_AB_GM_BP_NO_BOFF_WIDTH 1 +#define FRF_AB_GM_DIS_BOFF_LBN 17 +#define FRF_AB_GM_DIS_BOFF_WIDTH 1 +#define FRF_AB_GM_EXDEF_TX_EN_LBN 16 +#define FRF_AB_GM_EXDEF_TX_EN_WIDTH 1 +#define FRF_AB_GM_RTRY_LIMIT_LBN 12 +#define FRF_AB_GM_RTRY_LIMIT_WIDTH 4 +#define FRF_AB_GM_COL_WIN_LBN 0 +#define FRF_AB_GM_COL_WIN_WIDTH 10 + +/* GM_MAX_FLEN_REG: GMAC maximum frame length register */ +#define FR_AB_GM_MAX_FLEN 0x00000e40 +#define FRF_AB_GM_MAX_FLEN_LBN 0 +#define FRF_AB_GM_MAX_FLEN_WIDTH 16 + +/* GM_TEST_REG: GMAC test register */ +#define FR_AB_GM_TEST 0x00000e70 +#define FRF_AB_GM_MAX_BOFF_LBN 3 +#define FRF_AB_GM_MAX_BOFF_WIDTH 1 +#define FRF_AB_GM_REG_TX_FLOW_EN_LBN 2 +#define FRF_AB_GM_REG_TX_FLOW_EN_WIDTH 1 +#define FRF_AB_GM_TEST_PAUSE_LBN 1 +#define FRF_AB_GM_TEST_PAUSE_WIDTH 1 +#define FRF_AB_GM_SHORT_SLOT_LBN 0 +#define FRF_AB_GM_SHORT_SLOT_WIDTH 1 + +/* GM_ADR1_REG: GMAC station address register 1 */ +#define FR_AB_GM_ADR1 0x00000f00 +#define FRF_AB_GM_ADR_B0_LBN 24 +#define FRF_AB_GM_ADR_B0_WIDTH 8 +#define FRF_AB_GM_ADR_B1_LBN 16 +#define FRF_AB_GM_ADR_B1_WIDTH 8 +#define FRF_AB_GM_ADR_B2_LBN 8 +#define FRF_AB_GM_ADR_B2_WIDTH 8 +#define FRF_AB_GM_ADR_B3_LBN 0 +#define FRF_AB_GM_ADR_B3_WIDTH 8 + +/* GM_ADR2_REG: GMAC station address register 2 */ +#define FR_AB_GM_ADR2 0x00000f10 +#define FRF_AB_GM_ADR_B4_LBN 24 +#define FRF_AB_GM_ADR_B4_WIDTH 8 +#define FRF_AB_GM_ADR_B5_LBN 16 +#define FRF_AB_GM_ADR_B5_WIDTH 8 + +/* GMF_CFG0_REG: GMAC FIFO configuration register 0 */ +#define FR_AB_GMF_CFG0 0x00000f20 +#define FRF_AB_GMF_FTFENRPLY_LBN 20 +#define FRF_AB_GMF_FTFENRPLY_WIDTH 1 +#define FRF_AB_GMF_STFENRPLY_LBN 19 +#define FRF_AB_GMF_STFENRPLY_WIDTH 1 +#define FRF_AB_GMF_FRFENRPLY_LBN 18 +#define FRF_AB_GMF_FRFENRPLY_WIDTH 1 +#define FRF_AB_GMF_SRFENRPLY_LBN 17 +#define FRF_AB_GMF_SRFENRPLY_WIDTH 1 +#define FRF_AB_GMF_WTMENRPLY_LBN 16 +#define FRF_AB_GMF_WTMENRPLY_WIDTH 1 +#define FRF_AB_GMF_FTFENREQ_LBN 12 +#define FRF_AB_GMF_FTFENREQ_WIDTH 1 +#define FRF_AB_GMF_STFENREQ_LBN 11 +#define FRF_AB_GMF_STFENREQ_WIDTH 1 +#define FRF_AB_GMF_FRFENREQ_LBN 10 +#define FRF_AB_GMF_FRFENREQ_WIDTH 1 +#define FRF_AB_GMF_SRFENREQ_LBN 9 +#define FRF_AB_GMF_SRFENREQ_WIDTH 1 +#define FRF_AB_GMF_WTMENREQ_LBN 8 +#define FRF_AB_GMF_WTMENREQ_WIDTH 1 +#define FRF_AB_GMF_HSTRSTFT_LBN 4 +#define FRF_AB_GMF_HSTRSTFT_WIDTH 1 +#define FRF_AB_GMF_HSTRSTST_LBN 3 +#define FRF_AB_GMF_HSTRSTST_WIDTH 1 +#define FRF_AB_GMF_HSTRSTFR_LBN 2 +#define FRF_AB_GMF_HSTRSTFR_WIDTH 1 +#define FRF_AB_GMF_HSTRSTSR_LBN 1 +#define FRF_AB_GMF_HSTRSTSR_WIDTH 1 +#define FRF_AB_GMF_HSTRSTWT_LBN 0 +#define FRF_AB_GMF_HSTRSTWT_WIDTH 1 + +/* GMF_CFG1_REG: GMAC FIFO configuration register 1 */ +#define FR_AB_GMF_CFG1 0x00000f30 +#define FRF_AB_GMF_CFGFRTH_LBN 16 +#define FRF_AB_GMF_CFGFRTH_WIDTH 5 +#define FRF_AB_GMF_CFGXOFFRTX_LBN 0 +#define FRF_AB_GMF_CFGXOFFRTX_WIDTH 16 + +/* GMF_CFG2_REG: GMAC FIFO configuration register 2 */ +#define FR_AB_GMF_CFG2 0x00000f40 +#define FRF_AB_GMF_CFGHWM_LBN 16 +#define FRF_AB_GMF_CFGHWM_WIDTH 6 +#define FRF_AB_GMF_CFGLWM_LBN 0 +#define FRF_AB_GMF_CFGLWM_WIDTH 6 + +/* GMF_CFG3_REG: GMAC FIFO configuration register 3 */ +#define FR_AB_GMF_CFG3 0x00000f50 +#define FRF_AB_GMF_CFGHWMFT_LBN 16 +#define FRF_AB_GMF_CFGHWMFT_WIDTH 6 +#define FRF_AB_GMF_CFGFTTH_LBN 0 +#define FRF_AB_GMF_CFGFTTH_WIDTH 6 + +/* GMF_CFG4_REG: GMAC FIFO configuration register 4 */ +#define FR_AB_GMF_CFG4 0x00000f60 +#define FRF_AB_GMF_HSTFLTRFRM_LBN 0 +#define FRF_AB_GMF_HSTFLTRFRM_WIDTH 18 + +/* GMF_CFG5_REG: GMAC FIFO configuration register 5 */ +#define FR_AB_GMF_CFG5 0x00000f70 +#define FRF_AB_GMF_CFGHDPLX_LBN 22 +#define FRF_AB_GMF_CFGHDPLX_WIDTH 1 +#define FRF_AB_GMF_SRFULL_LBN 21 +#define FRF_AB_GMF_SRFULL_WIDTH 1 +#define FRF_AB_GMF_HSTSRFULLCLR_LBN 20 +#define FRF_AB_GMF_HSTSRFULLCLR_WIDTH 1 +#define FRF_AB_GMF_CFGBYTMODE_LBN 19 +#define FRF_AB_GMF_CFGBYTMODE_WIDTH 1 +#define FRF_AB_GMF_HSTDRPLT64_LBN 18 +#define FRF_AB_GMF_HSTDRPLT64_WIDTH 1 +#define FRF_AB_GMF_HSTFLTRFRMDC_LBN 0 +#define FRF_AB_GMF_HSTFLTRFRMDC_WIDTH 18 + +/* TX_SRC_MAC_TBL: Transmit IP source address filter table */ +#define FR_BB_TX_SRC_MAC_TBL 0x00001000 +#define FR_BB_TX_SRC_MAC_TBL_STEP 16 +#define FR_BB_TX_SRC_MAC_TBL_ROWS 16 +#define FRF_BB_TX_SRC_MAC_ADR_1_LBN 64 +#define FRF_BB_TX_SRC_MAC_ADR_1_WIDTH 48 +#define FRF_BB_TX_SRC_MAC_ADR_0_LBN 0 +#define FRF_BB_TX_SRC_MAC_ADR_0_WIDTH 48 + +/* TX_SRC_MAC_CTL_REG: Transmit MAC source address filter control */ +#define FR_BB_TX_SRC_MAC_CTL 0x00001100 +#define FRF_BB_TX_SRC_DROP_CTR_LBN 16 +#define FRF_BB_TX_SRC_DROP_CTR_WIDTH 16 +#define FRF_BB_TX_SRC_FLTR_EN_LBN 15 +#define FRF_BB_TX_SRC_FLTR_EN_WIDTH 1 +#define FRF_BB_TX_DROP_CTR_CLR_LBN 12 +#define FRF_BB_TX_DROP_CTR_CLR_WIDTH 1 +#define FRF_BB_TX_MAC_QID_SEL_LBN 0 +#define FRF_BB_TX_MAC_QID_SEL_WIDTH 3 + +/* XM_ADR_LO_REG: XGMAC address register low */ +#define FR_AB_XM_ADR_LO 0x00001200 +#define FRF_AB_XM_ADR_LO_LBN 0 +#define FRF_AB_XM_ADR_LO_WIDTH 32 + +/* XM_ADR_HI_REG: XGMAC address register high */ +#define FR_AB_XM_ADR_HI 0x00001210 +#define FRF_AB_XM_ADR_HI_LBN 0 +#define FRF_AB_XM_ADR_HI_WIDTH 16 + +/* XM_GLB_CFG_REG: XGMAC global configuration */ +#define FR_AB_XM_GLB_CFG 0x00001220 +#define FRF_AB_XM_RMTFLT_GEN_LBN 17 +#define FRF_AB_XM_RMTFLT_GEN_WIDTH 1 +#define FRF_AB_XM_DEBUG_MODE_LBN 16 +#define FRF_AB_XM_DEBUG_MODE_WIDTH 1 +#define FRF_AB_XM_RX_STAT_EN_LBN 11 +#define FRF_AB_XM_RX_STAT_EN_WIDTH 1 +#define FRF_AB_XM_TX_STAT_EN_LBN 10 +#define FRF_AB_XM_TX_STAT_EN_WIDTH 1 +#define FRF_AB_XM_RX_JUMBO_MODE_LBN 6 +#define FRF_AB_XM_RX_JUMBO_MODE_WIDTH 1 +#define FRF_AB_XM_WAN_MODE_LBN 5 +#define FRF_AB_XM_WAN_MODE_WIDTH 1 +#define FRF_AB_XM_INTCLR_MODE_LBN 3 +#define FRF_AB_XM_INTCLR_MODE_WIDTH 1 +#define FRF_AB_XM_CORE_RST_LBN 0 +#define FRF_AB_XM_CORE_RST_WIDTH 1 + +/* XM_TX_CFG_REG: XGMAC transmit configuration */ +#define FR_AB_XM_TX_CFG 0x00001230 +#define FRF_AB_XM_TX_PROG_LBN 24 +#define FRF_AB_XM_TX_PROG_WIDTH 1 +#define FRF_AB_XM_IPG_LBN 16 +#define FRF_AB_XM_IPG_WIDTH 4 +#define FRF_AB_XM_FCNTL_LBN 10 +#define FRF_AB_XM_FCNTL_WIDTH 1 +#define FRF_AB_XM_TXCRC_LBN 8 +#define FRF_AB_XM_TXCRC_WIDTH 1 +#define FRF_AB_XM_EDRC_LBN 6 +#define FRF_AB_XM_EDRC_WIDTH 1 +#define FRF_AB_XM_AUTO_PAD_LBN 5 +#define FRF_AB_XM_AUTO_PAD_WIDTH 1 +#define FRF_AB_XM_TX_PRMBL_LBN 2 +#define FRF_AB_XM_TX_PRMBL_WIDTH 1 +#define FRF_AB_XM_TXEN_LBN 1 +#define FRF_AB_XM_TXEN_WIDTH 1 +#define FRF_AB_XM_TX_RST_LBN 0 +#define FRF_AB_XM_TX_RST_WIDTH 1 + +/* XM_RX_CFG_REG: XGMAC receive configuration */ +#define FR_AB_XM_RX_CFG 0x00001240 +#define FRF_AB_XM_PASS_LENERR_LBN 26 +#define FRF_AB_XM_PASS_LENERR_WIDTH 1 +#define FRF_AB_XM_PASS_CRC_ERR_LBN 25 +#define FRF_AB_XM_PASS_CRC_ERR_WIDTH 1 +#define FRF_AB_XM_PASS_PRMBLE_ERR_LBN 24 +#define FRF_AB_XM_PASS_PRMBLE_ERR_WIDTH 1 +#define FRF_AB_XM_REJ_BCAST_LBN 20 +#define FRF_AB_XM_REJ_BCAST_WIDTH 1 +#define FRF_AB_XM_ACPT_ALL_MCAST_LBN 11 +#define FRF_AB_XM_ACPT_ALL_MCAST_WIDTH 1 +#define FRF_AB_XM_ACPT_ALL_UCAST_LBN 9 +#define FRF_AB_XM_ACPT_ALL_UCAST_WIDTH 1 +#define FRF_AB_XM_AUTO_DEPAD_LBN 8 +#define FRF_AB_XM_AUTO_DEPAD_WIDTH 1 +#define FRF_AB_XM_RXCRC_LBN 3 +#define FRF_AB_XM_RXCRC_WIDTH 1 +#define FRF_AB_XM_RX_PRMBL_LBN 2 +#define FRF_AB_XM_RX_PRMBL_WIDTH 1 +#define FRF_AB_XM_RXEN_LBN 1 +#define FRF_AB_XM_RXEN_WIDTH 1 +#define FRF_AB_XM_RX_RST_LBN 0 +#define FRF_AB_XM_RX_RST_WIDTH 1 + +/* XM_MGT_INT_MASK: documentation to be written for sum_XM_MGT_INT_MASK */ +#define FR_AB_XM_MGT_INT_MASK 0x00001250 +#define FRF_AB_XM_MSK_STA_INTR_LBN 16 +#define FRF_AB_XM_MSK_STA_INTR_WIDTH 1 +#define FRF_AB_XM_MSK_STAT_CNTR_HF_LBN 9 +#define FRF_AB_XM_MSK_STAT_CNTR_HF_WIDTH 1 +#define FRF_AB_XM_MSK_STAT_CNTR_OF_LBN 8 +#define FRF_AB_XM_MSK_STAT_CNTR_OF_WIDTH 1 +#define FRF_AB_XM_MSK_PRMBLE_ERR_LBN 2 +#define FRF_AB_XM_MSK_PRMBLE_ERR_WIDTH 1 +#define FRF_AB_XM_MSK_RMTFLT_LBN 1 +#define FRF_AB_XM_MSK_RMTFLT_WIDTH 1 +#define FRF_AB_XM_MSK_LCLFLT_LBN 0 +#define FRF_AB_XM_MSK_LCLFLT_WIDTH 1 + +/* XM_FC_REG: XGMAC flow control register */ +#define FR_AB_XM_FC 0x00001270 +#define FRF_AB_XM_PAUSE_TIME_LBN 16 +#define FRF_AB_XM_PAUSE_TIME_WIDTH 16 +#define FRF_AB_XM_RX_MAC_STAT_LBN 11 +#define FRF_AB_XM_RX_MAC_STAT_WIDTH 1 +#define FRF_AB_XM_TX_MAC_STAT_LBN 10 +#define FRF_AB_XM_TX_MAC_STAT_WIDTH 1 +#define FRF_AB_XM_MCNTL_PASS_LBN 8 +#define FRF_AB_XM_MCNTL_PASS_WIDTH 2 +#define FRF_AB_XM_REJ_CNTL_UCAST_LBN 6 +#define FRF_AB_XM_REJ_CNTL_UCAST_WIDTH 1 +#define FRF_AB_XM_REJ_CNTL_MCAST_LBN 5 +#define FRF_AB_XM_REJ_CNTL_MCAST_WIDTH 1 +#define FRF_AB_XM_ZPAUSE_LBN 2 +#define FRF_AB_XM_ZPAUSE_WIDTH 1 +#define FRF_AB_XM_XMIT_PAUSE_LBN 1 +#define FRF_AB_XM_XMIT_PAUSE_WIDTH 1 +#define FRF_AB_XM_DIS_FCNTL_LBN 0 +#define FRF_AB_XM_DIS_FCNTL_WIDTH 1 + +/* XM_PAUSE_TIME_REG: XGMAC pause time register */ +#define FR_AB_XM_PAUSE_TIME 0x00001290 +#define FRF_AB_XM_TX_PAUSE_CNT_LBN 16 +#define FRF_AB_XM_TX_PAUSE_CNT_WIDTH 16 +#define FRF_AB_XM_RX_PAUSE_CNT_LBN 0 +#define FRF_AB_XM_RX_PAUSE_CNT_WIDTH 16 + +/* XM_TX_PARAM_REG: XGMAC transmit parameter register */ +#define FR_AB_XM_TX_PARAM 0x000012d0 +#define FRF_AB_XM_TX_JUMBO_MODE_LBN 31 +#define FRF_AB_XM_TX_JUMBO_MODE_WIDTH 1 +#define FRF_AB_XM_MAX_TX_FRM_SIZE_HI_LBN 19 +#define FRF_AB_XM_MAX_TX_FRM_SIZE_HI_WIDTH 11 +#define FRF_AB_XM_MAX_TX_FRM_SIZE_LO_LBN 16 +#define FRF_AB_XM_MAX_TX_FRM_SIZE_LO_WIDTH 3 +#define FRF_AB_XM_PAD_CHAR_LBN 0 +#define FRF_AB_XM_PAD_CHAR_WIDTH 8 + +/* XM_RX_PARAM_REG: XGMAC receive parameter register */ +#define FR_AB_XM_RX_PARAM 0x000012e0 +#define FRF_AB_XM_MAX_RX_FRM_SIZE_HI_LBN 3 +#define FRF_AB_XM_MAX_RX_FRM_SIZE_HI_WIDTH 11 +#define FRF_AB_XM_MAX_RX_FRM_SIZE_LO_LBN 0 +#define FRF_AB_XM_MAX_RX_FRM_SIZE_LO_WIDTH 3 + +/* XM_MGT_INT_MSK_REG: XGMAC management interrupt mask register */ +#define FR_AB_XM_MGT_INT_MSK 0x000012f0 +#define FRF_AB_XM_STAT_CNTR_OF_LBN 9 +#define FRF_AB_XM_STAT_CNTR_OF_WIDTH 1 +#define FRF_AB_XM_STAT_CNTR_HF_LBN 8 +#define FRF_AB_XM_STAT_CNTR_HF_WIDTH 1 +#define FRF_AB_XM_PRMBLE_ERR_LBN 2 +#define FRF_AB_XM_PRMBLE_ERR_WIDTH 1 +#define FRF_AB_XM_RMTFLT_LBN 1 +#define FRF_AB_XM_RMTFLT_WIDTH 1 +#define FRF_AB_XM_LCLFLT_LBN 0 +#define FRF_AB_XM_LCLFLT_WIDTH 1 + +/* XX_PWR_RST_REG: XGXS/XAUI powerdown/reset register */ +#define FR_AB_XX_PWR_RST 0x00001300 +#define FRF_AB_XX_PWRDND_SIG_LBN 31 +#define FRF_AB_XX_PWRDND_SIG_WIDTH 1 +#define FRF_AB_XX_PWRDNC_SIG_LBN 30 +#define FRF_AB_XX_PWRDNC_SIG_WIDTH 1 +#define FRF_AB_XX_PWRDNB_SIG_LBN 29 +#define FRF_AB_XX_PWRDNB_SIG_WIDTH 1 +#define FRF_AB_XX_PWRDNA_SIG_LBN 28 +#define FRF_AB_XX_PWRDNA_SIG_WIDTH 1 +#define FRF_AB_XX_SIM_MODE_LBN 27 +#define FRF_AB_XX_SIM_MODE_WIDTH 1 +#define FRF_AB_XX_RSTPLLCD_SIG_LBN 25 +#define FRF_AB_XX_RSTPLLCD_SIG_WIDTH 1 +#define FRF_AB_XX_RSTPLLAB_SIG_LBN 24 +#define FRF_AB_XX_RSTPLLAB_SIG_WIDTH 1 +#define FRF_AB_XX_RESETD_SIG_LBN 23 +#define FRF_AB_XX_RESETD_SIG_WIDTH 1 +#define FRF_AB_XX_RESETC_SIG_LBN 22 +#define FRF_AB_XX_RESETC_SIG_WIDTH 1 +#define FRF_AB_XX_RESETB_SIG_LBN 21 +#define FRF_AB_XX_RESETB_SIG_WIDTH 1 +#define FRF_AB_XX_RESETA_SIG_LBN 20 +#define FRF_AB_XX_RESETA_SIG_WIDTH 1 +#define FRF_AB_XX_RSTXGXSRX_SIG_LBN 18 +#define FRF_AB_XX_RSTXGXSRX_SIG_WIDTH 1 +#define FRF_AB_XX_RSTXGXSTX_SIG_LBN 17 +#define FRF_AB_XX_RSTXGXSTX_SIG_WIDTH 1 +#define FRF_AB_XX_SD_RST_ACT_LBN 16 +#define FRF_AB_XX_SD_RST_ACT_WIDTH 1 +#define FRF_AB_XX_PWRDND_EN_LBN 15 +#define FRF_AB_XX_PWRDND_EN_WIDTH 1 +#define FRF_AB_XX_PWRDNC_EN_LBN 14 +#define FRF_AB_XX_PWRDNC_EN_WIDTH 1 +#define FRF_AB_XX_PWRDNB_EN_LBN 13 +#define FRF_AB_XX_PWRDNB_EN_WIDTH 1 +#define FRF_AB_XX_PWRDNA_EN_LBN 12 +#define FRF_AB_XX_PWRDNA_EN_WIDTH 1 +#define FRF_AB_XX_RSTPLLCD_EN_LBN 9 +#define FRF_AB_XX_RSTPLLCD_EN_WIDTH 1 +#define FRF_AB_XX_RSTPLLAB_EN_LBN 8 +#define FRF_AB_XX_RSTPLLAB_EN_WIDTH 1 +#define FRF_AB_XX_RESETD_EN_LBN 7 +#define FRF_AB_XX_RESETD_EN_WIDTH 1 +#define FRF_AB_XX_RESETC_EN_LBN 6 +#define FRF_AB_XX_RESETC_EN_WIDTH 1 +#define FRF_AB_XX_RESETB_EN_LBN 5 +#define FRF_AB_XX_RESETB_EN_WIDTH 1 +#define FRF_AB_XX_RESETA_EN_LBN 4 +#define FRF_AB_XX_RESETA_EN_WIDTH 1 +#define FRF_AB_XX_RSTXGXSRX_EN_LBN 2 +#define FRF_AB_XX_RSTXGXSRX_EN_WIDTH 1 +#define FRF_AB_XX_RSTXGXSTX_EN_LBN 1 +#define FRF_AB_XX_RSTXGXSTX_EN_WIDTH 1 +#define FRF_AB_XX_RST_XX_EN_LBN 0 +#define FRF_AB_XX_RST_XX_EN_WIDTH 1 + +/* XX_SD_CTL_REG: XGXS/XAUI powerdown/reset control register */ +#define FR_AB_XX_SD_CTL 0x00001310 +#define FRF_AB_XX_TERMADJ1_LBN 17 +#define FRF_AB_XX_TERMADJ1_WIDTH 1 +#define FRF_AB_XX_TERMADJ0_LBN 16 +#define FRF_AB_XX_TERMADJ0_WIDTH 1 +#define FRF_AB_XX_HIDRVD_LBN 15 +#define FRF_AB_XX_HIDRVD_WIDTH 1 +#define FRF_AB_XX_LODRVD_LBN 14 +#define FRF_AB_XX_LODRVD_WIDTH 1 +#define FRF_AB_XX_HIDRVC_LBN 13 +#define FRF_AB_XX_HIDRVC_WIDTH 1 +#define FRF_AB_XX_LODRVC_LBN 12 +#define FRF_AB_XX_LODRVC_WIDTH 1 +#define FRF_AB_XX_HIDRVB_LBN 11 +#define FRF_AB_XX_HIDRVB_WIDTH 1 +#define FRF_AB_XX_LODRVB_LBN 10 +#define FRF_AB_XX_LODRVB_WIDTH 1 +#define FRF_AB_XX_HIDRVA_LBN 9 +#define FRF_AB_XX_HIDRVA_WIDTH 1 +#define FRF_AB_XX_LODRVA_LBN 8 +#define FRF_AB_XX_LODRVA_WIDTH 1 +#define FRF_AB_XX_LPBKD_LBN 3 +#define FRF_AB_XX_LPBKD_WIDTH 1 +#define FRF_AB_XX_LPBKC_LBN 2 +#define FRF_AB_XX_LPBKC_WIDTH 1 +#define FRF_AB_XX_LPBKB_LBN 1 +#define FRF_AB_XX_LPBKB_WIDTH 1 +#define FRF_AB_XX_LPBKA_LBN 0 +#define FRF_AB_XX_LPBKA_WIDTH 1 + +/* XX_TXDRV_CTL_REG: XAUI SerDes transmit drive control register */ +#define FR_AB_XX_TXDRV_CTL 0x00001320 +#define FRF_AB_XX_DEQD_LBN 28 +#define FRF_AB_XX_DEQD_WIDTH 4 +#define FRF_AB_XX_DEQC_LBN 24 +#define FRF_AB_XX_DEQC_WIDTH 4 +#define FRF_AB_XX_DEQB_LBN 20 +#define FRF_AB_XX_DEQB_WIDTH 4 +#define FRF_AB_XX_DEQA_LBN 16 +#define FRF_AB_XX_DEQA_WIDTH 4 +#define FRF_AB_XX_DTXD_LBN 12 +#define FRF_AB_XX_DTXD_WIDTH 4 +#define FRF_AB_XX_DTXC_LBN 8 +#define FRF_AB_XX_DTXC_WIDTH 4 +#define FRF_AB_XX_DTXB_LBN 4 +#define FRF_AB_XX_DTXB_WIDTH 4 +#define FRF_AB_XX_DTXA_LBN 0 +#define FRF_AB_XX_DTXA_WIDTH 4 + +/* XX_PRBS_CTL_REG: documentation to be written for sum_XX_PRBS_CTL_REG */ +#define FR_AB_XX_PRBS_CTL 0x00001330 +#define FRF_AB_XX_CH3_RX_PRBS_SEL_LBN 30 +#define FRF_AB_XX_CH3_RX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH3_RX_PRBS_INV_LBN 29 +#define FRF_AB_XX_CH3_RX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH3_RX_PRBS_CHKEN_LBN 28 +#define FRF_AB_XX_CH3_RX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH2_RX_PRBS_SEL_LBN 26 +#define FRF_AB_XX_CH2_RX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH2_RX_PRBS_INV_LBN 25 +#define FRF_AB_XX_CH2_RX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH2_RX_PRBS_CHKEN_LBN 24 +#define FRF_AB_XX_CH2_RX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH1_RX_PRBS_SEL_LBN 22 +#define FRF_AB_XX_CH1_RX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH1_RX_PRBS_INV_LBN 21 +#define FRF_AB_XX_CH1_RX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH1_RX_PRBS_CHKEN_LBN 20 +#define FRF_AB_XX_CH1_RX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH0_RX_PRBS_SEL_LBN 18 +#define FRF_AB_XX_CH0_RX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH0_RX_PRBS_INV_LBN 17 +#define FRF_AB_XX_CH0_RX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH0_RX_PRBS_CHKEN_LBN 16 +#define FRF_AB_XX_CH0_RX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH3_TX_PRBS_SEL_LBN 14 +#define FRF_AB_XX_CH3_TX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH3_TX_PRBS_INV_LBN 13 +#define FRF_AB_XX_CH3_TX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH3_TX_PRBS_CHKEN_LBN 12 +#define FRF_AB_XX_CH3_TX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH2_TX_PRBS_SEL_LBN 10 +#define FRF_AB_XX_CH2_TX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH2_TX_PRBS_INV_LBN 9 +#define FRF_AB_XX_CH2_TX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH2_TX_PRBS_CHKEN_LBN 8 +#define FRF_AB_XX_CH2_TX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH1_TX_PRBS_SEL_LBN 6 +#define FRF_AB_XX_CH1_TX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH1_TX_PRBS_INV_LBN 5 +#define FRF_AB_XX_CH1_TX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH1_TX_PRBS_CHKEN_LBN 4 +#define FRF_AB_XX_CH1_TX_PRBS_CHKEN_WIDTH 1 +#define FRF_AB_XX_CH0_TX_PRBS_SEL_LBN 2 +#define FRF_AB_XX_CH0_TX_PRBS_SEL_WIDTH 2 +#define FRF_AB_XX_CH0_TX_PRBS_INV_LBN 1 +#define FRF_AB_XX_CH0_TX_PRBS_INV_WIDTH 1 +#define FRF_AB_XX_CH0_TX_PRBS_CHKEN_LBN 0 +#define FRF_AB_XX_CH0_TX_PRBS_CHKEN_WIDTH 1 + +/* XX_PRBS_CHK_REG: documentation to be written for sum_XX_PRBS_CHK_REG */ +#define FR_AB_XX_PRBS_CHK 0x00001340 +#define FRF_AB_XX_REV_LB_EN_LBN 16 +#define FRF_AB_XX_REV_LB_EN_WIDTH 1 +#define FRF_AB_XX_CH3_DEG_DET_LBN 15 +#define FRF_AB_XX_CH3_DEG_DET_WIDTH 1 +#define FRF_AB_XX_CH3_LFSR_LOCK_IND_LBN 14 +#define FRF_AB_XX_CH3_LFSR_LOCK_IND_WIDTH 1 +#define FRF_AB_XX_CH3_PRBS_FRUN_LBN 13 +#define FRF_AB_XX_CH3_PRBS_FRUN_WIDTH 1 +#define FRF_AB_XX_CH3_ERR_CHK_LBN 12 +#define FRF_AB_XX_CH3_ERR_CHK_WIDTH 1 +#define FRF_AB_XX_CH2_DEG_DET_LBN 11 +#define FRF_AB_XX_CH2_DEG_DET_WIDTH 1 +#define FRF_AB_XX_CH2_LFSR_LOCK_IND_LBN 10 +#define FRF_AB_XX_CH2_LFSR_LOCK_IND_WIDTH 1 +#define FRF_AB_XX_CH2_PRBS_FRUN_LBN 9 +#define FRF_AB_XX_CH2_PRBS_FRUN_WIDTH 1 +#define FRF_AB_XX_CH2_ERR_CHK_LBN 8 +#define FRF_AB_XX_CH2_ERR_CHK_WIDTH 1 +#define FRF_AB_XX_CH1_DEG_DET_LBN 7 +#define FRF_AB_XX_CH1_DEG_DET_WIDTH 1 +#define FRF_AB_XX_CH1_LFSR_LOCK_IND_LBN 6 +#define FRF_AB_XX_CH1_LFSR_LOCK_IND_WIDTH 1 +#define FRF_AB_XX_CH1_PRBS_FRUN_LBN 5 +#define FRF_AB_XX_CH1_PRBS_FRUN_WIDTH 1 +#define FRF_AB_XX_CH1_ERR_CHK_LBN 4 +#define FRF_AB_XX_CH1_ERR_CHK_WIDTH 1 +#define FRF_AB_XX_CH0_DEG_DET_LBN 3 +#define FRF_AB_XX_CH0_DEG_DET_WIDTH 1 +#define FRF_AB_XX_CH0_LFSR_LOCK_IND_LBN 2 +#define FRF_AB_XX_CH0_LFSR_LOCK_IND_WIDTH 1 +#define FRF_AB_XX_CH0_PRBS_FRUN_LBN 1 +#define FRF_AB_XX_CH0_PRBS_FRUN_WIDTH 1 +#define FRF_AB_XX_CH0_ERR_CHK_LBN 0 +#define FRF_AB_XX_CH0_ERR_CHK_WIDTH 1 + +/* XX_PRBS_ERR_REG: documentation to be written for sum_XX_PRBS_ERR_REG */ +#define FR_AB_XX_PRBS_ERR 0x00001350 +#define FRF_AB_XX_CH3_PRBS_ERR_CNT_LBN 24 +#define FRF_AB_XX_CH3_PRBS_ERR_CNT_WIDTH 8 +#define FRF_AB_XX_CH2_PRBS_ERR_CNT_LBN 16 +#define FRF_AB_XX_CH2_PRBS_ERR_CNT_WIDTH 8 +#define FRF_AB_XX_CH1_PRBS_ERR_CNT_LBN 8 +#define FRF_AB_XX_CH1_PRBS_ERR_CNT_WIDTH 8 +#define FRF_AB_XX_CH0_PRBS_ERR_CNT_LBN 0 +#define FRF_AB_XX_CH0_PRBS_ERR_CNT_WIDTH 8 + +/* XX_CORE_STAT_REG: XAUI XGXS core status register */ +#define FR_AB_XX_CORE_STAT 0x00001360 +#define FRF_AB_XX_FORCE_SIG3_LBN 31 +#define FRF_AB_XX_FORCE_SIG3_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG3_VAL_LBN 30 +#define FRF_AB_XX_FORCE_SIG3_VAL_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG2_LBN 29 +#define FRF_AB_XX_FORCE_SIG2_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG2_VAL_LBN 28 +#define FRF_AB_XX_FORCE_SIG2_VAL_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG1_LBN 27 +#define FRF_AB_XX_FORCE_SIG1_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG1_VAL_LBN 26 +#define FRF_AB_XX_FORCE_SIG1_VAL_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG0_LBN 25 +#define FRF_AB_XX_FORCE_SIG0_WIDTH 1 +#define FRF_AB_XX_FORCE_SIG0_VAL_LBN 24 +#define FRF_AB_XX_FORCE_SIG0_VAL_WIDTH 1 +#define FRF_AB_XX_XGXS_LB_EN_LBN 23 +#define FRF_AB_XX_XGXS_LB_EN_WIDTH 1 +#define FRF_AB_XX_XGMII_LB_EN_LBN 22 +#define FRF_AB_XX_XGMII_LB_EN_WIDTH 1 +#define FRF_AB_XX_MATCH_FAULT_LBN 21 +#define FRF_AB_XX_MATCH_FAULT_WIDTH 1 +#define FRF_AB_XX_ALIGN_DONE_LBN 20 +#define FRF_AB_XX_ALIGN_DONE_WIDTH 1 +#define FRF_AB_XX_SYNC_STAT3_LBN 19 +#define FRF_AB_XX_SYNC_STAT3_WIDTH 1 +#define FRF_AB_XX_SYNC_STAT2_LBN 18 +#define FRF_AB_XX_SYNC_STAT2_WIDTH 1 +#define FRF_AB_XX_SYNC_STAT1_LBN 17 +#define FRF_AB_XX_SYNC_STAT1_WIDTH 1 +#define FRF_AB_XX_SYNC_STAT0_LBN 16 +#define FRF_AB_XX_SYNC_STAT0_WIDTH 1 +#define FRF_AB_XX_COMMA_DET_CH3_LBN 15 +#define FRF_AB_XX_COMMA_DET_CH3_WIDTH 1 +#define FRF_AB_XX_COMMA_DET_CH2_LBN 14 +#define FRF_AB_XX_COMMA_DET_CH2_WIDTH 1 +#define FRF_AB_XX_COMMA_DET_CH1_LBN 13 +#define FRF_AB_XX_COMMA_DET_CH1_WIDTH 1 +#define FRF_AB_XX_COMMA_DET_CH0_LBN 12 +#define FRF_AB_XX_COMMA_DET_CH0_WIDTH 1 +#define FRF_AB_XX_CGRP_ALIGN_CH3_LBN 11 +#define FRF_AB_XX_CGRP_ALIGN_CH3_WIDTH 1 +#define FRF_AB_XX_CGRP_ALIGN_CH2_LBN 10 +#define FRF_AB_XX_CGRP_ALIGN_CH2_WIDTH 1 +#define FRF_AB_XX_CGRP_ALIGN_CH1_LBN 9 +#define FRF_AB_XX_CGRP_ALIGN_CH1_WIDTH 1 +#define FRF_AB_XX_CGRP_ALIGN_CH0_LBN 8 +#define FRF_AB_XX_CGRP_ALIGN_CH0_WIDTH 1 +#define FRF_AB_XX_CHAR_ERR_CH3_LBN 7 +#define FRF_AB_XX_CHAR_ERR_CH3_WIDTH 1 +#define FRF_AB_XX_CHAR_ERR_CH2_LBN 6 +#define FRF_AB_XX_CHAR_ERR_CH2_WIDTH 1 +#define FRF_AB_XX_CHAR_ERR_CH1_LBN 5 +#define FRF_AB_XX_CHAR_ERR_CH1_WIDTH 1 +#define FRF_AB_XX_CHAR_ERR_CH0_LBN 4 +#define FRF_AB_XX_CHAR_ERR_CH0_WIDTH 1 +#define FRF_AB_XX_DISPERR_CH3_LBN 3 +#define FRF_AB_XX_DISPERR_CH3_WIDTH 1 +#define FRF_AB_XX_DISPERR_CH2_LBN 2 +#define FRF_AB_XX_DISPERR_CH2_WIDTH 1 +#define FRF_AB_XX_DISPERR_CH1_LBN 1 +#define FRF_AB_XX_DISPERR_CH1_WIDTH 1 +#define FRF_AB_XX_DISPERR_CH0_LBN 0 +#define FRF_AB_XX_DISPERR_CH0_WIDTH 1 + +/* RX_DESC_PTR_TBL_KER: Receive descriptor pointer table */ +#define FR_AA_RX_DESC_PTR_TBL_KER 0x00011800 +#define FR_AA_RX_DESC_PTR_TBL_KER_STEP 16 +#define FR_AA_RX_DESC_PTR_TBL_KER_ROWS 4 +/* RX_DESC_PTR_TBL: Receive descriptor pointer table */ +#define FR_BZ_RX_DESC_PTR_TBL 0x00f40000 +#define FR_BZ_RX_DESC_PTR_TBL_STEP 16 +#define FR_BB_RX_DESC_PTR_TBL_ROWS 4096 +#define FR_CZ_RX_DESC_PTR_TBL_ROWS 1024 +#define FRF_CZ_RX_HDR_SPLIT_LBN 90 +#define FRF_CZ_RX_HDR_SPLIT_WIDTH 1 +#define FRF_AA_RX_RESET_LBN 89 +#define FRF_AA_RX_RESET_WIDTH 1 +#define FRF_AZ_RX_ISCSI_DDIG_EN_LBN 88 +#define FRF_AZ_RX_ISCSI_DDIG_EN_WIDTH 1 +#define FRF_AZ_RX_ISCSI_HDIG_EN_LBN 87 +#define FRF_AZ_RX_ISCSI_HDIG_EN_WIDTH 1 +#define FRF_AZ_RX_DESC_PREF_ACT_LBN 86 +#define FRF_AZ_RX_DESC_PREF_ACT_WIDTH 1 +#define FRF_AZ_RX_DC_HW_RPTR_LBN 80 +#define FRF_AZ_RX_DC_HW_RPTR_WIDTH 6 +#define FRF_AZ_RX_DESCQ_HW_RPTR_LBN 68 +#define FRF_AZ_RX_DESCQ_HW_RPTR_WIDTH 12 +#define FRF_AZ_RX_DESCQ_SW_WPTR_LBN 56 +#define FRF_AZ_RX_DESCQ_SW_WPTR_WIDTH 12 +#define FRF_AZ_RX_DESCQ_BUF_BASE_ID_LBN 36 +#define FRF_AZ_RX_DESCQ_BUF_BASE_ID_WIDTH 20 +#define FRF_AZ_RX_DESCQ_EVQ_ID_LBN 24 +#define FRF_AZ_RX_DESCQ_EVQ_ID_WIDTH 12 +#define FRF_AZ_RX_DESCQ_OWNER_ID_LBN 10 +#define FRF_AZ_RX_DESCQ_OWNER_ID_WIDTH 14 +#define FRF_AZ_RX_DESCQ_LABEL_LBN 5 +#define FRF_AZ_RX_DESCQ_LABEL_WIDTH 5 +#define FRF_AZ_RX_DESCQ_SIZE_LBN 3 +#define FRF_AZ_RX_DESCQ_SIZE_WIDTH 2 +#define FFE_AZ_RX_DESCQ_SIZE_4K 3 +#define FFE_AZ_RX_DESCQ_SIZE_2K 2 +#define FFE_AZ_RX_DESCQ_SIZE_1K 1 +#define FFE_AZ_RX_DESCQ_SIZE_512 0 +#define FRF_AZ_RX_DESCQ_TYPE_LBN 2 +#define FRF_AZ_RX_DESCQ_TYPE_WIDTH 1 +#define FRF_AZ_RX_DESCQ_JUMBO_LBN 1 +#define FRF_AZ_RX_DESCQ_JUMBO_WIDTH 1 +#define FRF_AZ_RX_DESCQ_EN_LBN 0 +#define FRF_AZ_RX_DESCQ_EN_WIDTH 1 + +/* TX_DESC_PTR_TBL_KER: Transmit descriptor pointer */ +#define FR_AA_TX_DESC_PTR_TBL_KER 0x00011900 +#define FR_AA_TX_DESC_PTR_TBL_KER_STEP 16 +#define FR_AA_TX_DESC_PTR_TBL_KER_ROWS 8 +/* TX_DESC_PTR_TBL: Transmit descriptor pointer */ +#define FR_BZ_TX_DESC_PTR_TBL 0x00f50000 +#define FR_BZ_TX_DESC_PTR_TBL_STEP 16 +#define FR_BB_TX_DESC_PTR_TBL_ROWS 4096 +#define FR_CZ_TX_DESC_PTR_TBL_ROWS 1024 +#define FRF_CZ_TX_DPT_Q_MASK_WIDTH_LBN 94 +#define FRF_CZ_TX_DPT_Q_MASK_WIDTH_WIDTH 2 +#define FRF_CZ_TX_DPT_ETH_FILT_EN_LBN 93 +#define FRF_CZ_TX_DPT_ETH_FILT_EN_WIDTH 1 +#define FRF_CZ_TX_DPT_IP_FILT_EN_LBN 92 +#define FRF_CZ_TX_DPT_IP_FILT_EN_WIDTH 1 +#define FRF_BZ_TX_NON_IP_DROP_DIS_LBN 91 +#define FRF_BZ_TX_NON_IP_DROP_DIS_WIDTH 1 +#define FRF_BZ_TX_IP_CHKSM_DIS_LBN 90 +#define FRF_BZ_TX_IP_CHKSM_DIS_WIDTH 1 +#define FRF_BZ_TX_TCP_CHKSM_DIS_LBN 89 +#define FRF_BZ_TX_TCP_CHKSM_DIS_WIDTH 1 +#define FRF_AZ_TX_DESCQ_EN_LBN 88 +#define FRF_AZ_TX_DESCQ_EN_WIDTH 1 +#define FRF_AZ_TX_ISCSI_DDIG_EN_LBN 87 +#define FRF_AZ_TX_ISCSI_DDIG_EN_WIDTH 1 +#define FRF_AZ_TX_ISCSI_HDIG_EN_LBN 86 +#define FRF_AZ_TX_ISCSI_HDIG_EN_WIDTH 1 +#define FRF_AZ_TX_DC_HW_RPTR_LBN 80 +#define FRF_AZ_TX_DC_HW_RPTR_WIDTH 6 +#define FRF_AZ_TX_DESCQ_HW_RPTR_LBN 68 +#define FRF_AZ_TX_DESCQ_HW_RPTR_WIDTH 12 +#define FRF_AZ_TX_DESCQ_SW_WPTR_LBN 56 +#define FRF_AZ_TX_DESCQ_SW_WPTR_WIDTH 12 +#define FRF_AZ_TX_DESCQ_BUF_BASE_ID_LBN 36 +#define FRF_AZ_TX_DESCQ_BUF_BASE_ID_WIDTH 20 +#define FRF_AZ_TX_DESCQ_EVQ_ID_LBN 24 +#define FRF_AZ_TX_DESCQ_EVQ_ID_WIDTH 12 +#define FRF_AZ_TX_DESCQ_OWNER_ID_LBN 10 +#define FRF_AZ_TX_DESCQ_OWNER_ID_WIDTH 14 +#define FRF_AZ_TX_DESCQ_LABEL_LBN 5 +#define FRF_AZ_TX_DESCQ_LABEL_WIDTH 5 +#define FRF_AZ_TX_DESCQ_SIZE_LBN 3 +#define FRF_AZ_TX_DESCQ_SIZE_WIDTH 2 +#define FFE_AZ_TX_DESCQ_SIZE_4K 3 +#define FFE_AZ_TX_DESCQ_SIZE_2K 2 +#define FFE_AZ_TX_DESCQ_SIZE_1K 1 +#define FFE_AZ_TX_DESCQ_SIZE_512 0 +#define FRF_AZ_TX_DESCQ_TYPE_LBN 1 +#define FRF_AZ_TX_DESCQ_TYPE_WIDTH 2 +#define FRF_AZ_TX_DESCQ_FLUSH_LBN 0 +#define FRF_AZ_TX_DESCQ_FLUSH_WIDTH 1 + +/* EVQ_PTR_TBL_KER: Event queue pointer table */ +#define FR_AA_EVQ_PTR_TBL_KER 0x00011a00 +#define FR_AA_EVQ_PTR_TBL_KER_STEP 16 +#define FR_AA_EVQ_PTR_TBL_KER_ROWS 4 +/* EVQ_PTR_TBL: Event queue pointer table */ +#define FR_BZ_EVQ_PTR_TBL 0x00f60000 +#define FR_BZ_EVQ_PTR_TBL_STEP 16 +#define FR_CZ_EVQ_PTR_TBL_ROWS 1024 +#define FR_BB_EVQ_PTR_TBL_ROWS 4096 +#define FRF_BZ_EVQ_RPTR_IGN_LBN 40 +#define FRF_BZ_EVQ_RPTR_IGN_WIDTH 1 +#define FRF_AB_EVQ_WKUP_OR_INT_EN_LBN 39 +#define FRF_AB_EVQ_WKUP_OR_INT_EN_WIDTH 1 +#define FRF_CZ_EVQ_DOS_PROTECT_EN_LBN 39 +#define FRF_CZ_EVQ_DOS_PROTECT_EN_WIDTH 1 +#define FRF_AZ_EVQ_NXT_WPTR_LBN 24 +#define FRF_AZ_EVQ_NXT_WPTR_WIDTH 15 +#define FRF_AZ_EVQ_EN_LBN 23 +#define FRF_AZ_EVQ_EN_WIDTH 1 +#define FRF_AZ_EVQ_SIZE_LBN 20 +#define FRF_AZ_EVQ_SIZE_WIDTH 3 +#define FFE_AZ_EVQ_SIZE_32K 6 +#define FFE_AZ_EVQ_SIZE_16K 5 +#define FFE_AZ_EVQ_SIZE_8K 4 +#define FFE_AZ_EVQ_SIZE_4K 3 +#define FFE_AZ_EVQ_SIZE_2K 2 +#define FFE_AZ_EVQ_SIZE_1K 1 +#define FFE_AZ_EVQ_SIZE_512 0 +#define FRF_AZ_EVQ_BUF_BASE_ID_LBN 0 +#define FRF_AZ_EVQ_BUF_BASE_ID_WIDTH 20 + +/* BUF_HALF_TBL_KER: Buffer table in half buffer table mode direct access by driver */ +#define FR_AA_BUF_HALF_TBL_KER 0x00018000 +#define FR_AA_BUF_HALF_TBL_KER_STEP 8 +#define FR_AA_BUF_HALF_TBL_KER_ROWS 4096 +/* BUF_HALF_TBL: Buffer table in half buffer table mode direct access by driver */ +#define FR_BZ_BUF_HALF_TBL 0x00800000 +#define FR_BZ_BUF_HALF_TBL_STEP 8 +#define FR_CZ_BUF_HALF_TBL_ROWS 147456 +#define FR_BB_BUF_HALF_TBL_ROWS 524288 +#define FRF_AZ_BUF_ADR_HBUF_ODD_LBN 44 +#define FRF_AZ_BUF_ADR_HBUF_ODD_WIDTH 20 +#define FRF_AZ_BUF_OWNER_ID_HBUF_ODD_LBN 32 +#define FRF_AZ_BUF_OWNER_ID_HBUF_ODD_WIDTH 12 +#define FRF_AZ_BUF_ADR_HBUF_EVEN_LBN 12 +#define FRF_AZ_BUF_ADR_HBUF_EVEN_WIDTH 20 +#define FRF_AZ_BUF_OWNER_ID_HBUF_EVEN_LBN 0 +#define FRF_AZ_BUF_OWNER_ID_HBUF_EVEN_WIDTH 12 + +/* BUF_FULL_TBL_KER: Buffer table in full buffer table mode direct access by driver */ +#define FR_AA_BUF_FULL_TBL_KER 0x00018000 +#define FR_AA_BUF_FULL_TBL_KER_STEP 8 +#define FR_AA_BUF_FULL_TBL_KER_ROWS 4096 +/* BUF_FULL_TBL: Buffer table in full buffer table mode direct access by driver */ +#define FR_BZ_BUF_FULL_TBL 0x00800000 +#define FR_BZ_BUF_FULL_TBL_STEP 8 +#define FR_CZ_BUF_FULL_TBL_ROWS 147456 +#define FR_BB_BUF_FULL_TBL_ROWS 917504 +#define FRF_AZ_BUF_FULL_UNUSED_LBN 51 +#define FRF_AZ_BUF_FULL_UNUSED_WIDTH 13 +#define FRF_AZ_IP_DAT_BUF_SIZE_LBN 50 +#define FRF_AZ_IP_DAT_BUF_SIZE_WIDTH 1 +#define FRF_AZ_BUF_ADR_REGION_LBN 48 +#define FRF_AZ_BUF_ADR_REGION_WIDTH 2 +#define FFE_AZ_BUF_ADR_REGN3 3 +#define FFE_AZ_BUF_ADR_REGN2 2 +#define FFE_AZ_BUF_ADR_REGN1 1 +#define FFE_AZ_BUF_ADR_REGN0 0 +#define FRF_AZ_BUF_ADR_FBUF_LBN 14 +#define FRF_AZ_BUF_ADR_FBUF_WIDTH 34 +#define FRF_AZ_BUF_OWNER_ID_FBUF_LBN 0 +#define FRF_AZ_BUF_OWNER_ID_FBUF_WIDTH 14 + +/* RX_FILTER_TBL0: TCP/IPv4 Receive filter table */ +#define FR_BZ_RX_FILTER_TBL0 0x00f00000 +#define FR_BZ_RX_FILTER_TBL0_STEP 32 +#define FR_BZ_RX_FILTER_TBL0_ROWS 8192 +/* RX_FILTER_TBL1: TCP/IPv4 Receive filter table */ +#define FR_BB_RX_FILTER_TBL1 0x00f00010 +#define FR_BB_RX_FILTER_TBL1_STEP 32 +#define FR_BB_RX_FILTER_TBL1_ROWS 8192 +#define FRF_BZ_RSS_EN_LBN 110 +#define FRF_BZ_RSS_EN_WIDTH 1 +#define FRF_BZ_SCATTER_EN_LBN 109 +#define FRF_BZ_SCATTER_EN_WIDTH 1 +#define FRF_BZ_TCP_UDP_LBN 108 +#define FRF_BZ_TCP_UDP_WIDTH 1 +#define FRF_BZ_RXQ_ID_LBN 96 +#define FRF_BZ_RXQ_ID_WIDTH 12 +#define FRF_BZ_DEST_IP_LBN 64 +#define FRF_BZ_DEST_IP_WIDTH 32 +#define FRF_BZ_DEST_PORT_TCP_LBN 48 +#define FRF_BZ_DEST_PORT_TCP_WIDTH 16 +#define FRF_BZ_SRC_IP_LBN 16 +#define FRF_BZ_SRC_IP_WIDTH 32 +#define FRF_BZ_SRC_TCP_DEST_UDP_LBN 0 +#define FRF_BZ_SRC_TCP_DEST_UDP_WIDTH 16 + +/* RX_MAC_FILTER_TBL0: Receive Ethernet filter table */ +#define FR_CZ_RX_MAC_FILTER_TBL0 0x00f00010 +#define FR_CZ_RX_MAC_FILTER_TBL0_STEP 32 +#define FR_CZ_RX_MAC_FILTER_TBL0_ROWS 512 +#define FRF_CZ_RMFT_RSS_EN_LBN 75 +#define FRF_CZ_RMFT_RSS_EN_WIDTH 1 +#define FRF_CZ_RMFT_SCATTER_EN_LBN 74 +#define FRF_CZ_RMFT_SCATTER_EN_WIDTH 1 +#define FRF_CZ_RMFT_IP_OVERRIDE_LBN 73 +#define FRF_CZ_RMFT_IP_OVERRIDE_WIDTH 1 +#define FRF_CZ_RMFT_RXQ_ID_LBN 61 +#define FRF_CZ_RMFT_RXQ_ID_WIDTH 12 +#define FRF_CZ_RMFT_WILDCARD_MATCH_LBN 60 +#define FRF_CZ_RMFT_WILDCARD_MATCH_WIDTH 1 +#define FRF_CZ_RMFT_DEST_MAC_LBN 16 +#define FRF_CZ_RMFT_DEST_MAC_WIDTH 44 +#define FRF_CZ_RMFT_VLAN_ID_LBN 0 +#define FRF_CZ_RMFT_VLAN_ID_WIDTH 12 + +/* TIMER_TBL: Timer table */ +#define FR_BZ_TIMER_TBL 0x00f70000 +#define FR_BZ_TIMER_TBL_STEP 16 +#define FR_CZ_TIMER_TBL_ROWS 1024 +#define FR_BB_TIMER_TBL_ROWS 4096 +#define FRF_CZ_TIMER_Q_EN_LBN 33 +#define FRF_CZ_TIMER_Q_EN_WIDTH 1 +#define FRF_CZ_INT_ARMD_LBN 32 +#define FRF_CZ_INT_ARMD_WIDTH 1 +#define FRF_CZ_INT_PEND_LBN 31 +#define FRF_CZ_INT_PEND_WIDTH 1 +#define FRF_CZ_HOST_NOTIFY_MODE_LBN 30 +#define FRF_CZ_HOST_NOTIFY_MODE_WIDTH 1 +#define FRF_CZ_RELOAD_TIMER_VAL_LBN 16 +#define FRF_CZ_RELOAD_TIMER_VAL_WIDTH 14 +#define FRF_CZ_TIMER_MODE_LBN 14 +#define FRF_CZ_TIMER_MODE_WIDTH 2 +#define FFE_CZ_TIMER_MODE_INT_HLDOFF 3 +#define FFE_CZ_TIMER_MODE_TRIG_START 2 +#define FFE_CZ_TIMER_MODE_IMMED_START 1 +#define FFE_CZ_TIMER_MODE_DIS 0 +#define FRF_BB_TIMER_MODE_LBN 12 +#define FRF_BB_TIMER_MODE_WIDTH 2 +#define FFE_BB_TIMER_MODE_INT_HLDOFF 2 +#define FFE_BB_TIMER_MODE_TRIG_START 2 +#define FFE_BB_TIMER_MODE_IMMED_START 1 +#define FFE_BB_TIMER_MODE_DIS 0 +#define FRF_CZ_TIMER_VAL_LBN 0 +#define FRF_CZ_TIMER_VAL_WIDTH 14 +#define FRF_BB_TIMER_VAL_LBN 0 +#define FRF_BB_TIMER_VAL_WIDTH 12 + +/* TX_PACE_TBL: Transmit pacing table */ +#define FR_BZ_TX_PACE_TBL 0x00f80000 +#define FR_BZ_TX_PACE_TBL_STEP 16 +#define FR_CZ_TX_PACE_TBL_ROWS 1024 +#define FR_BB_TX_PACE_TBL_ROWS 4096 +#define FRF_BZ_TX_PACE_LBN 0 +#define FRF_BZ_TX_PACE_WIDTH 5 + +/* RX_INDIRECTION_TBL: RX Indirection Table */ +#define FR_BZ_RX_INDIRECTION_TBL 0x00fb0000 +#define FR_BZ_RX_INDIRECTION_TBL_STEP 16 +#define FR_BZ_RX_INDIRECTION_TBL_ROWS 128 +#define FRF_BZ_IT_QUEUE_LBN 0 +#define FRF_BZ_IT_QUEUE_WIDTH 6 + +/* TX_FILTER_TBL0: TCP/IPv4 Transmit filter table */ +#define FR_CZ_TX_FILTER_TBL0 0x00fc0000 +#define FR_CZ_TX_FILTER_TBL0_STEP 16 +#define FR_CZ_TX_FILTER_TBL0_ROWS 8192 +#define FRF_CZ_TIFT_TCP_UDP_LBN 108 +#define FRF_CZ_TIFT_TCP_UDP_WIDTH 1 +#define FRF_CZ_TIFT_TXQ_ID_LBN 96 +#define FRF_CZ_TIFT_TXQ_ID_WIDTH 12 +#define FRF_CZ_TIFT_DEST_IP_LBN 64 +#define FRF_CZ_TIFT_DEST_IP_WIDTH 32 +#define FRF_CZ_TIFT_DEST_PORT_TCP_LBN 48 +#define FRF_CZ_TIFT_DEST_PORT_TCP_WIDTH 16 +#define FRF_CZ_TIFT_SRC_IP_LBN 16 +#define FRF_CZ_TIFT_SRC_IP_WIDTH 32 +#define FRF_CZ_TIFT_SRC_TCP_DEST_UDP_LBN 0 +#define FRF_CZ_TIFT_SRC_TCP_DEST_UDP_WIDTH 16 + +/* TX_MAC_FILTER_TBL0: Transmit Ethernet filter table */ +#define FR_CZ_TX_MAC_FILTER_TBL0 0x00fe0000 +#define FR_CZ_TX_MAC_FILTER_TBL0_STEP 16 +#define FR_CZ_TX_MAC_FILTER_TBL0_ROWS 512 +#define FRF_CZ_TMFT_TXQ_ID_LBN 61 +#define FRF_CZ_TMFT_TXQ_ID_WIDTH 12 +#define FRF_CZ_TMFT_WILDCARD_MATCH_LBN 60 +#define FRF_CZ_TMFT_WILDCARD_MATCH_WIDTH 1 +#define FRF_CZ_TMFT_SRC_MAC_LBN 16 +#define FRF_CZ_TMFT_SRC_MAC_WIDTH 44 +#define FRF_CZ_TMFT_VLAN_ID_LBN 0 +#define FRF_CZ_TMFT_VLAN_ID_WIDTH 12 + +/* MC_TREG_SMEM: MC Shared Memory */ +#define FR_CZ_MC_TREG_SMEM 0x00ff0000 +#define FR_CZ_MC_TREG_SMEM_STEP 4 +#define FR_CZ_MC_TREG_SMEM_ROWS 512 +#define FRF_CZ_MC_TREG_SMEM_ROW_LBN 0 +#define FRF_CZ_MC_TREG_SMEM_ROW_WIDTH 32 + +/* MSIX_VECTOR_TABLE: MSIX Vector Table */ +#define FR_BB_MSIX_VECTOR_TABLE 0x00ff0000 +#define FR_BZ_MSIX_VECTOR_TABLE_STEP 16 +#define FR_BB_MSIX_VECTOR_TABLE_ROWS 64 +/* MSIX_VECTOR_TABLE: MSIX Vector Table */ +#define FR_CZ_MSIX_VECTOR_TABLE 0x00000000 +/* FR_BZ_MSIX_VECTOR_TABLE_STEP 16 */ +#define FR_CZ_MSIX_VECTOR_TABLE_ROWS 1024 +#define FRF_BZ_MSIX_VECTOR_RESERVED_LBN 97 +#define FRF_BZ_MSIX_VECTOR_RESERVED_WIDTH 31 +#define FRF_BZ_MSIX_VECTOR_MASK_LBN 96 +#define FRF_BZ_MSIX_VECTOR_MASK_WIDTH 1 +#define FRF_BZ_MSIX_MESSAGE_DATA_LBN 64 +#define FRF_BZ_MSIX_MESSAGE_DATA_WIDTH 32 +#define FRF_BZ_MSIX_MESSAGE_ADDRESS_HI_LBN 32 +#define FRF_BZ_MSIX_MESSAGE_ADDRESS_HI_WIDTH 32 +#define FRF_BZ_MSIX_MESSAGE_ADDRESS_LO_LBN 0 +#define FRF_BZ_MSIX_MESSAGE_ADDRESS_LO_WIDTH 32 + +/* MSIX_PBA_TABLE: MSIX Pending Bit Array */ +#define FR_BB_MSIX_PBA_TABLE 0x00ff2000 +#define FR_BZ_MSIX_PBA_TABLE_STEP 4 +#define FR_BB_MSIX_PBA_TABLE_ROWS 2 +/* MSIX_PBA_TABLE: MSIX Pending Bit Array */ +#define FR_CZ_MSIX_PBA_TABLE 0x00008000 +/* FR_BZ_MSIX_PBA_TABLE_STEP 4 */ +#define FR_CZ_MSIX_PBA_TABLE_ROWS 32 +#define FRF_BZ_MSIX_PBA_PEND_DWORD_LBN 0 +#define FRF_BZ_MSIX_PBA_PEND_DWORD_WIDTH 32 + +/* SRM_DBG_REG: SRAM debug access */ +#define FR_BZ_SRM_DBG 0x03000000 +#define FR_BZ_SRM_DBG_STEP 8 +#define FR_CZ_SRM_DBG_ROWS 262144 +#define FR_BB_SRM_DBG_ROWS 2097152 +#define FRF_BZ_SRM_DBG_LBN 0 +#define FRF_BZ_SRM_DBG_WIDTH 64 + +/* TB_MSIX_PBA_TABLE: MSIX Pending Bit Array */ +#define FR_CZ_TB_MSIX_PBA_TABLE 0x00008000 +#define FR_CZ_TB_MSIX_PBA_TABLE_STEP 4 +#define FR_CZ_TB_MSIX_PBA_TABLE_ROWS 1024 +#define FRF_CZ_TB_MSIX_PBA_PEND_DWORD_LBN 0 +#define FRF_CZ_TB_MSIX_PBA_PEND_DWORD_WIDTH 32 + +/* DRIVER_EV */ +#define FSF_AZ_DRIVER_EV_SUBCODE_LBN 56 +#define FSF_AZ_DRIVER_EV_SUBCODE_WIDTH 4 +#define FSE_BZ_TX_DSC_ERROR_EV 15 +#define FSE_BZ_RX_DSC_ERROR_EV 14 +#define FSE_AA_RX_RECOVER_EV 11 +#define FSE_AZ_TIMER_EV 10 +#define FSE_AZ_TX_PKT_NON_TCP_UDP 9 +#define FSE_AZ_WAKE_UP_EV 6 +#define FSE_AZ_SRM_UPD_DONE_EV 5 +#define FSE_AB_EVQ_NOT_EN_EV 3 +#define FSE_AZ_EVQ_INIT_DONE_EV 2 +#define FSE_AZ_RX_DESCQ_FLS_DONE_EV 1 +#define FSE_AZ_TX_DESCQ_FLS_DONE_EV 0 +#define FSF_AZ_DRIVER_EV_SUBDATA_LBN 0 +#define FSF_AZ_DRIVER_EV_SUBDATA_WIDTH 14 + +/* EVENT_ENTRY */ +#define FSF_AZ_EV_CODE_LBN 60 +#define FSF_AZ_EV_CODE_WIDTH 4 +#define FSE_CZ_EV_CODE_MCDI_EV 12 +#define FSE_CZ_EV_CODE_USER_EV 8 +#define FSE_AZ_EV_CODE_DRV_GEN_EV 7 +#define FSE_AZ_EV_CODE_GLOBAL_EV 6 +#define FSE_AZ_EV_CODE_DRIVER_EV 5 +#define FSE_AZ_EV_CODE_TX_EV 2 +#define FSE_AZ_EV_CODE_RX_EV 0 +#define FSF_AZ_EV_DATA_LBN 0 +#define FSF_AZ_EV_DATA_WIDTH 60 + +/* GLOBAL_EV */ +#define FSF_BB_GLB_EV_RX_RECOVERY_LBN 12 +#define FSF_BB_GLB_EV_RX_RECOVERY_WIDTH 1 +#define FSF_AA_GLB_EV_RX_RECOVERY_LBN 11 +#define FSF_AA_GLB_EV_RX_RECOVERY_WIDTH 1 +#define FSF_BB_GLB_EV_XG_MGT_INTR_LBN 11 +#define FSF_BB_GLB_EV_XG_MGT_INTR_WIDTH 1 +#define FSF_AB_GLB_EV_XFP_PHY0_INTR_LBN 10 +#define FSF_AB_GLB_EV_XFP_PHY0_INTR_WIDTH 1 +#define FSF_AB_GLB_EV_XG_PHY0_INTR_LBN 9 +#define FSF_AB_GLB_EV_XG_PHY0_INTR_WIDTH 1 +#define FSF_AB_GLB_EV_G_PHY0_INTR_LBN 7 +#define FSF_AB_GLB_EV_G_PHY0_INTR_WIDTH 1 + +/* LEGACY_INT_VEC */ +#define FSF_AZ_NET_IVEC_FATAL_INT_LBN 64 +#define FSF_AZ_NET_IVEC_FATAL_INT_WIDTH 1 +#define FSF_AZ_NET_IVEC_INT_Q_LBN 40 +#define FSF_AZ_NET_IVEC_INT_Q_WIDTH 4 +#define FSF_AZ_NET_IVEC_INT_FLAG_LBN 32 +#define FSF_AZ_NET_IVEC_INT_FLAG_WIDTH 1 +#define FSF_AZ_NET_IVEC_EVQ_FIFO_HF_LBN 1 +#define FSF_AZ_NET_IVEC_EVQ_FIFO_HF_WIDTH 1 +#define FSF_AZ_NET_IVEC_EVQ_FIFO_AF_LBN 0 +#define FSF_AZ_NET_IVEC_EVQ_FIFO_AF_WIDTH 1 + +/* MC_XGMAC_FLTR_RULE_DEF */ +#define FSF_CZ_MC_XFRC_MODE_LBN 416 +#define FSF_CZ_MC_XFRC_MODE_WIDTH 1 +#define FSE_CZ_MC_XFRC_MODE_LAYERED 1 +#define FSE_CZ_MC_XFRC_MODE_SIMPLE 0 +#define FSF_CZ_MC_XFRC_HASH_LBN 384 +#define FSF_CZ_MC_XFRC_HASH_WIDTH 32 +#define FSF_CZ_MC_XFRC_LAYER4_BYTE_MASK_LBN 256 +#define FSF_CZ_MC_XFRC_LAYER4_BYTE_MASK_WIDTH 128 +#define FSF_CZ_MC_XFRC_LAYER3_BYTE_MASK_LBN 128 +#define FSF_CZ_MC_XFRC_LAYER3_BYTE_MASK_WIDTH 128 +#define FSF_CZ_MC_XFRC_LAYER2_OR_SIMPLE_BYTE_MASK_LBN 0 +#define FSF_CZ_MC_XFRC_LAYER2_OR_SIMPLE_BYTE_MASK_WIDTH 128 + +/* RX_EV */ +#define FSF_CZ_RX_EV_PKT_NOT_PARSED_LBN 58 +#define FSF_CZ_RX_EV_PKT_NOT_PARSED_WIDTH 1 +#define FSF_CZ_RX_EV_IPV6_PKT_LBN 57 +#define FSF_CZ_RX_EV_IPV6_PKT_WIDTH 1 +#define FSF_AZ_RX_EV_PKT_OK_LBN 56 +#define FSF_AZ_RX_EV_PKT_OK_WIDTH 1 +#define FSF_AZ_RX_EV_PAUSE_FRM_ERR_LBN 55 +#define FSF_AZ_RX_EV_PAUSE_FRM_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_BUF_OWNER_ID_ERR_LBN 54 +#define FSF_AZ_RX_EV_BUF_OWNER_ID_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_IP_FRAG_ERR_LBN 53 +#define FSF_AZ_RX_EV_IP_FRAG_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_IP_HDR_CHKSUM_ERR_LBN 52 +#define FSF_AZ_RX_EV_IP_HDR_CHKSUM_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_TCP_UDP_CHKSUM_ERR_LBN 51 +#define FSF_AZ_RX_EV_TCP_UDP_CHKSUM_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_ETH_CRC_ERR_LBN 50 +#define FSF_AZ_RX_EV_ETH_CRC_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_FRM_TRUNC_LBN 49 +#define FSF_AZ_RX_EV_FRM_TRUNC_WIDTH 1 +#define FSF_AA_RX_EV_DRIB_NIB_LBN 49 +#define FSF_AA_RX_EV_DRIB_NIB_WIDTH 1 +#define FSF_AZ_RX_EV_TOBE_DISC_LBN 47 +#define FSF_AZ_RX_EV_TOBE_DISC_WIDTH 1 +#define FSF_AZ_RX_EV_PKT_TYPE_LBN 44 +#define FSF_AZ_RX_EV_PKT_TYPE_WIDTH 3 +#define FSE_AZ_RX_EV_PKT_TYPE_VLAN_JUMBO 5 +#define FSE_AZ_RX_EV_PKT_TYPE_VLAN_LLC 4 +#define FSE_AZ_RX_EV_PKT_TYPE_VLAN 3 +#define FSE_AZ_RX_EV_PKT_TYPE_JUMBO 2 +#define FSE_AZ_RX_EV_PKT_TYPE_LLC 1 +#define FSE_AZ_RX_EV_PKT_TYPE_ETH 0 +#define FSF_AZ_RX_EV_HDR_TYPE_LBN 42 +#define FSF_AZ_RX_EV_HDR_TYPE_WIDTH 2 +#define FSE_AZ_RX_EV_HDR_TYPE_OTHER 3 +#define FSE_AB_RX_EV_HDR_TYPE_IPV4_OTHER 2 +#define FSE_CZ_RX_EV_HDR_TYPE_IPV4V6_OTHER 2 +#define FSE_AB_RX_EV_HDR_TYPE_IPV4_UDP 1 +#define FSE_CZ_RX_EV_HDR_TYPE_IPV4V6_UDP 1 +#define FSE_AB_RX_EV_HDR_TYPE_IPV4_TCP 0 +#define FSE_CZ_RX_EV_HDR_TYPE_IPV4V6_TCP 0 +#define FSF_AZ_RX_EV_DESC_Q_EMPTY_LBN 41 +#define FSF_AZ_RX_EV_DESC_Q_EMPTY_WIDTH 1 +#define FSF_AZ_RX_EV_MCAST_HASH_MATCH_LBN 40 +#define FSF_AZ_RX_EV_MCAST_HASH_MATCH_WIDTH 1 +#define FSF_AZ_RX_EV_MCAST_PKT_LBN 39 +#define FSF_AZ_RX_EV_MCAST_PKT_WIDTH 1 +#define FSF_AA_RX_EV_RECOVERY_FLAG_LBN 37 +#define FSF_AA_RX_EV_RECOVERY_FLAG_WIDTH 1 +#define FSF_AZ_RX_EV_Q_LABEL_LBN 32 +#define FSF_AZ_RX_EV_Q_LABEL_WIDTH 5 +#define FSF_AZ_RX_EV_JUMBO_CONT_LBN 31 +#define FSF_AZ_RX_EV_JUMBO_CONT_WIDTH 1 +#define FSF_AZ_RX_EV_PORT_LBN 30 +#define FSF_AZ_RX_EV_PORT_WIDTH 1 +#define FSF_AZ_RX_EV_BYTE_CNT_LBN 16 +#define FSF_AZ_RX_EV_BYTE_CNT_WIDTH 14 +#define FSF_AZ_RX_EV_SOP_LBN 15 +#define FSF_AZ_RX_EV_SOP_WIDTH 1 +#define FSF_AZ_RX_EV_ISCSI_PKT_OK_LBN 14 +#define FSF_AZ_RX_EV_ISCSI_PKT_OK_WIDTH 1 +#define FSF_AZ_RX_EV_ISCSI_DDIG_ERR_LBN 13 +#define FSF_AZ_RX_EV_ISCSI_DDIG_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_ISCSI_HDIG_ERR_LBN 12 +#define FSF_AZ_RX_EV_ISCSI_HDIG_ERR_WIDTH 1 +#define FSF_AZ_RX_EV_DESC_PTR_LBN 0 +#define FSF_AZ_RX_EV_DESC_PTR_WIDTH 12 + +/* RX_KER_DESC */ +#define FSF_AZ_RX_KER_BUF_SIZE_LBN 48 +#define FSF_AZ_RX_KER_BUF_SIZE_WIDTH 14 +#define FSF_AZ_RX_KER_BUF_REGION_LBN 46 +#define FSF_AZ_RX_KER_BUF_REGION_WIDTH 2 +#define FSF_AZ_RX_KER_BUF_ADDR_LBN 0 +#define FSF_AZ_RX_KER_BUF_ADDR_WIDTH 46 + +/* RX_USER_DESC */ +#define FSF_AZ_RX_USER_2BYTE_OFFSET_LBN 20 +#define FSF_AZ_RX_USER_2BYTE_OFFSET_WIDTH 12 +#define FSF_AZ_RX_USER_BUF_ID_LBN 0 +#define FSF_AZ_RX_USER_BUF_ID_WIDTH 20 + +/* TX_EV */ +#define FSF_AZ_TX_EV_PKT_ERR_LBN 38 +#define FSF_AZ_TX_EV_PKT_ERR_WIDTH 1 +#define FSF_AZ_TX_EV_PKT_TOO_BIG_LBN 37 +#define FSF_AZ_TX_EV_PKT_TOO_BIG_WIDTH 1 +#define FSF_AZ_TX_EV_Q_LABEL_LBN 32 +#define FSF_AZ_TX_EV_Q_LABEL_WIDTH 5 +#define FSF_AZ_TX_EV_PORT_LBN 16 +#define FSF_AZ_TX_EV_PORT_WIDTH 1 +#define FSF_AZ_TX_EV_WQ_FF_FULL_LBN 15 +#define FSF_AZ_TX_EV_WQ_FF_FULL_WIDTH 1 +#define FSF_AZ_TX_EV_BUF_OWNER_ID_ERR_LBN 14 +#define FSF_AZ_TX_EV_BUF_OWNER_ID_ERR_WIDTH 1 +#define FSF_AZ_TX_EV_COMP_LBN 12 +#define FSF_AZ_TX_EV_COMP_WIDTH 1 +#define FSF_AZ_TX_EV_DESC_PTR_LBN 0 +#define FSF_AZ_TX_EV_DESC_PTR_WIDTH 12 + +/* TX_KER_DESC */ +#define FSF_AZ_TX_KER_CONT_LBN 62 +#define FSF_AZ_TX_KER_CONT_WIDTH 1 +#define FSF_AZ_TX_KER_BYTE_COUNT_LBN 48 +#define FSF_AZ_TX_KER_BYTE_COUNT_WIDTH 14 +#define FSF_AZ_TX_KER_BUF_REGION_LBN 46 +#define FSF_AZ_TX_KER_BUF_REGION_WIDTH 2 +#define FSF_AZ_TX_KER_BUF_ADDR_LBN 0 +#define FSF_AZ_TX_KER_BUF_ADDR_WIDTH 46 + +/* TX_USER_DESC */ +#define FSF_AZ_TX_USER_SW_EV_EN_LBN 48 +#define FSF_AZ_TX_USER_SW_EV_EN_WIDTH 1 +#define FSF_AZ_TX_USER_CONT_LBN 46 +#define FSF_AZ_TX_USER_CONT_WIDTH 1 +#define FSF_AZ_TX_USER_BYTE_CNT_LBN 33 +#define FSF_AZ_TX_USER_BYTE_CNT_WIDTH 13 +#define FSF_AZ_TX_USER_BUF_ID_LBN 13 +#define FSF_AZ_TX_USER_BUF_ID_WIDTH 20 +#define FSF_AZ_TX_USER_BYTE_OFS_LBN 0 +#define FSF_AZ_TX_USER_BYTE_OFS_WIDTH 13 + +/* USER_EV */ +#define FSF_CZ_USER_QID_LBN 32 +#define FSF_CZ_USER_QID_WIDTH 10 +#define FSF_CZ_USER_EV_REG_VALUE_LBN 0 +#define FSF_CZ_USER_EV_REG_VALUE_WIDTH 32 + +/************************************************************************** + * + * Falcon B0 PCIe core indirect registers + * + ************************************************************************** + */ + +#define FPCR_BB_PCIE_DEVICE_CTRL_STAT 0x68 + +#define FPCR_BB_PCIE_LINK_CTRL_STAT 0x70 + +#define FPCR_BB_ACK_RPL_TIMER 0x700 +#define FPCRF_BB_ACK_TL_LBN 0 +#define FPCRF_BB_ACK_TL_WIDTH 16 +#define FPCRF_BB_RPL_TL_LBN 16 +#define FPCRF_BB_RPL_TL_WIDTH 16 + +#define FPCR_BB_ACK_FREQ 0x70C +#define FPCRF_BB_ACK_FREQ_LBN 0 +#define FPCRF_BB_ACK_FREQ_WIDTH 7 + +/************************************************************************** + * + * Pseudo-registers and fields + * + ************************************************************************** + */ + +/* Interrupt acknowledge work-around register (A0/A1 only) */ +#define FR_AA_WORK_AROUND_BROKEN_PCI_READS 0x0070 + +/* EE_SPI_HCMD_REG: SPI host command register */ +/* Values for the EE_SPI_HCMD_SF_SEL register field */ +#define FFE_AB_SPI_DEVICE_EEPROM 0 +#define FFE_AB_SPI_DEVICE_FLASH 1 + +/* NIC_STAT_REG: NIC status register */ +#define FRF_AB_STRAP_10G_LBN 2 +#define FRF_AB_STRAP_10G_WIDTH 1 +#define FRF_AA_STRAP_PCIE_LBN 0 +#define FRF_AA_STRAP_PCIE_WIDTH 1 + +/* FATAL_INTR_REG_KER: Fatal interrupt register for Kernel */ +#define FRF_AZ_FATAL_INTR_LBN 0 +#define FRF_AZ_FATAL_INTR_WIDTH 12 + +/* SRM_CFG_REG: SRAM configuration register */ +/* We treat the number of SRAM banks and bank size as a single field */ +#define FRF_AZ_SRM_NB_SZ_LBN FRF_AZ_SRM_BANK_SIZE_LBN +#define FRF_AZ_SRM_NB_SZ_WIDTH \ + (FRF_AZ_SRM_BANK_SIZE_WIDTH + FRF_AZ_SRM_NUM_BANK_WIDTH) +#define FFE_AB_SRM_NB1_SZ2M 0 +#define FFE_AB_SRM_NB1_SZ4M 1 +#define FFE_AB_SRM_NB1_SZ8M 2 +#define FFE_AB_SRM_NB_SZ_DEF 3 +#define FFE_AB_SRM_NB2_SZ4M 4 +#define FFE_AB_SRM_NB2_SZ8M 5 +#define FFE_AB_SRM_NB2_SZ16M 6 +#define FFE_AB_SRM_NB_SZ_RES 7 + +/* RX_DESC_UPD_REGP0: Receive descriptor update register. */ +/* We write just the last dword of these registers */ +#define FR_AZ_RX_DESC_UPD_DWORD_P0 \ + (BUILD_BUG_ON_ZERO(FR_AA_RX_DESC_UPD_KER != FR_BZ_RX_DESC_UPD_P0) + \ + FR_BZ_RX_DESC_UPD_P0 + 3 * 4) +#define FRF_AZ_RX_DESC_WPTR_DWORD_LBN (FRF_AZ_RX_DESC_WPTR_LBN - 3 * 32) +#define FRF_AZ_RX_DESC_WPTR_DWORD_WIDTH FRF_AZ_RX_DESC_WPTR_WIDTH + +/* TX_DESC_UPD_REGP0: Transmit descriptor update register. */ +#define FR_AZ_TX_DESC_UPD_DWORD_P0 \ + (BUILD_BUG_ON_ZERO(FR_AA_TX_DESC_UPD_KER != FR_BZ_TX_DESC_UPD_P0) + \ + FR_BZ_TX_DESC_UPD_P0 + 3 * 4) +#define FRF_AZ_TX_DESC_WPTR_DWORD_LBN (FRF_AZ_TX_DESC_WPTR_LBN - 3 * 32) +#define FRF_AZ_TX_DESC_WPTR_DWORD_WIDTH FRF_AZ_TX_DESC_WPTR_WIDTH + +/* GMF_CFG4_REG: GMAC FIFO configuration register 4 */ +#define FRF_AB_GMF_HSTFLTRFRM_PAUSE_LBN 12 +#define FRF_AB_GMF_HSTFLTRFRM_PAUSE_WIDTH 1 + +/* GMF_CFG5_REG: GMAC FIFO configuration register 5 */ +#define FRF_AB_GMF_HSTFLTRFRMDC_PAUSE_LBN 12 +#define FRF_AB_GMF_HSTFLTRFRMDC_PAUSE_WIDTH 1 + +/* XM_TX_PARAM_REG: XGMAC transmit parameter register */ +#define FRF_AB_XM_MAX_TX_FRM_SIZE_LBN FRF_AB_XM_MAX_TX_FRM_SIZE_LO_LBN +#define FRF_AB_XM_MAX_TX_FRM_SIZE_WIDTH (FRF_AB_XM_MAX_TX_FRM_SIZE_HI_WIDTH + \ + FRF_AB_XM_MAX_TX_FRM_SIZE_LO_WIDTH) + +/* XM_RX_PARAM_REG: XGMAC receive parameter register */ +#define FRF_AB_XM_MAX_RX_FRM_SIZE_LBN FRF_AB_XM_MAX_RX_FRM_SIZE_LO_LBN +#define FRF_AB_XM_MAX_RX_FRM_SIZE_WIDTH (FRF_AB_XM_MAX_RX_FRM_SIZE_HI_WIDTH + \ + FRF_AB_XM_MAX_RX_FRM_SIZE_LO_WIDTH) + +/* XX_TXDRV_CTL_REG: XAUI SerDes transmit drive control register */ +/* Default values */ +#define FFE_AB_XX_TXDRV_DEQ_DEF 0xe /* deq=.6 */ +#define FFE_AB_XX_TXDRV_DTX_DEF 0x5 /* 1.25 */ +#define FFE_AB_XX_SD_CTL_DRV_DEF 0 /* 20mA */ + +/* XX_CORE_STAT_REG: XAUI XGXS core status register */ +/* XGXS all-lanes status fields */ +#define FRF_AB_XX_SYNC_STAT_LBN FRF_AB_XX_SYNC_STAT0_LBN +#define FRF_AB_XX_SYNC_STAT_WIDTH 4 +#define FRF_AB_XX_COMMA_DET_LBN FRF_AB_XX_COMMA_DET_CH0_LBN +#define FRF_AB_XX_COMMA_DET_WIDTH 4 +#define FRF_AB_XX_CHAR_ERR_LBN FRF_AB_XX_CHAR_ERR_CH0_LBN +#define FRF_AB_XX_CHAR_ERR_WIDTH 4 +#define FRF_AB_XX_DISPERR_LBN FRF_AB_XX_DISPERR_CH0_LBN +#define FRF_AB_XX_DISPERR_WIDTH 4 +#define FFE_AB_XX_STAT_ALL_LANES 0xf +#define FRF_AB_XX_FORCE_SIG_LBN FRF_AB_XX_FORCE_SIG0_VAL_LBN +#define FRF_AB_XX_FORCE_SIG_WIDTH 8 +#define FFE_AB_XX_FORCE_SIG_ALL_LANES 0xff + +/* DRIVER_EV */ +/* Sub-fields of an RX flush completion event */ +#define FSF_AZ_DRIVER_EV_RX_FLUSH_FAIL_LBN 12 +#define FSF_AZ_DRIVER_EV_RX_FLUSH_FAIL_WIDTH 1 +#define FSF_AZ_DRIVER_EV_RX_DESCQ_ID_LBN 0 +#define FSF_AZ_DRIVER_EV_RX_DESCQ_ID_WIDTH 12 + +/* EVENT_ENTRY */ +/* Magic number field for event test */ +#define FSF_AZ_DRV_GEN_EV_MAGIC_LBN 0 +#define FSF_AZ_DRV_GEN_EV_MAGIC_WIDTH 32 + +/************************************************************************** + * + * Falcon MAC stats + * + ************************************************************************** + * + */ + +#define GRxGoodOct_offset 0x0 +#define GRxGoodOct_WIDTH 48 +#define GRxBadOct_offset 0x8 +#define GRxBadOct_WIDTH 48 +#define GRxMissPkt_offset 0x10 +#define GRxMissPkt_WIDTH 32 +#define GRxFalseCRS_offset 0x14 +#define GRxFalseCRS_WIDTH 32 +#define GRxPausePkt_offset 0x18 +#define GRxPausePkt_WIDTH 32 +#define GRxBadPkt_offset 0x1C +#define GRxBadPkt_WIDTH 32 +#define GRxUcastPkt_offset 0x20 +#define GRxUcastPkt_WIDTH 32 +#define GRxMcastPkt_offset 0x24 +#define GRxMcastPkt_WIDTH 32 +#define GRxBcastPkt_offset 0x28 +#define GRxBcastPkt_WIDTH 32 +#define GRxGoodLt64Pkt_offset 0x2C +#define GRxGoodLt64Pkt_WIDTH 32 +#define GRxBadLt64Pkt_offset 0x30 +#define GRxBadLt64Pkt_WIDTH 32 +#define GRx64Pkt_offset 0x34 +#define GRx64Pkt_WIDTH 32 +#define GRx65to127Pkt_offset 0x38 +#define GRx65to127Pkt_WIDTH 32 +#define GRx128to255Pkt_offset 0x3C +#define GRx128to255Pkt_WIDTH 32 +#define GRx256to511Pkt_offset 0x40 +#define GRx256to511Pkt_WIDTH 32 +#define GRx512to1023Pkt_offset 0x44 +#define GRx512to1023Pkt_WIDTH 32 +#define GRx1024to15xxPkt_offset 0x48 +#define GRx1024to15xxPkt_WIDTH 32 +#define GRx15xxtoJumboPkt_offset 0x4C +#define GRx15xxtoJumboPkt_WIDTH 32 +#define GRxGtJumboPkt_offset 0x50 +#define GRxGtJumboPkt_WIDTH 32 +#define GRxFcsErr64to15xxPkt_offset 0x54 +#define GRxFcsErr64to15xxPkt_WIDTH 32 +#define GRxFcsErr15xxtoJumboPkt_offset 0x58 +#define GRxFcsErr15xxtoJumboPkt_WIDTH 32 +#define GRxFcsErrGtJumboPkt_offset 0x5C +#define GRxFcsErrGtJumboPkt_WIDTH 32 +#define GTxGoodBadOct_offset 0x80 +#define GTxGoodBadOct_WIDTH 48 +#define GTxGoodOct_offset 0x88 +#define GTxGoodOct_WIDTH 48 +#define GTxSglColPkt_offset 0x90 +#define GTxSglColPkt_WIDTH 32 +#define GTxMultColPkt_offset 0x94 +#define GTxMultColPkt_WIDTH 32 +#define GTxExColPkt_offset 0x98 +#define GTxExColPkt_WIDTH 32 +#define GTxDefPkt_offset 0x9C +#define GTxDefPkt_WIDTH 32 +#define GTxLateCol_offset 0xA0 +#define GTxLateCol_WIDTH 32 +#define GTxExDefPkt_offset 0xA4 +#define GTxExDefPkt_WIDTH 32 +#define GTxPausePkt_offset 0xA8 +#define GTxPausePkt_WIDTH 32 +#define GTxBadPkt_offset 0xAC +#define GTxBadPkt_WIDTH 32 +#define GTxUcastPkt_offset 0xB0 +#define GTxUcastPkt_WIDTH 32 +#define GTxMcastPkt_offset 0xB4 +#define GTxMcastPkt_WIDTH 32 +#define GTxBcastPkt_offset 0xB8 +#define GTxBcastPkt_WIDTH 32 +#define GTxLt64Pkt_offset 0xBC +#define GTxLt64Pkt_WIDTH 32 +#define GTx64Pkt_offset 0xC0 +#define GTx64Pkt_WIDTH 32 +#define GTx65to127Pkt_offset 0xC4 +#define GTx65to127Pkt_WIDTH 32 +#define GTx128to255Pkt_offset 0xC8 +#define GTx128to255Pkt_WIDTH 32 +#define GTx256to511Pkt_offset 0xCC +#define GTx256to511Pkt_WIDTH 32 +#define GTx512to1023Pkt_offset 0xD0 +#define GTx512to1023Pkt_WIDTH 32 +#define GTx1024to15xxPkt_offset 0xD4 +#define GTx1024to15xxPkt_WIDTH 32 +#define GTx15xxtoJumboPkt_offset 0xD8 +#define GTx15xxtoJumboPkt_WIDTH 32 +#define GTxGtJumboPkt_offset 0xDC +#define GTxGtJumboPkt_WIDTH 32 +#define GTxNonTcpUdpPkt_offset 0xE0 +#define GTxNonTcpUdpPkt_WIDTH 16 +#define GTxMacSrcErrPkt_offset 0xE4 +#define GTxMacSrcErrPkt_WIDTH 16 +#define GTxIpSrcErrPkt_offset 0xE8 +#define GTxIpSrcErrPkt_WIDTH 16 +#define GDmaDone_offset 0xEC +#define GDmaDone_WIDTH 32 + +#define XgRxOctets_offset 0x0 +#define XgRxOctets_WIDTH 48 +#define XgRxOctetsOK_offset 0x8 +#define XgRxOctetsOK_WIDTH 48 +#define XgRxPkts_offset 0x10 +#define XgRxPkts_WIDTH 32 +#define XgRxPktsOK_offset 0x14 +#define XgRxPktsOK_WIDTH 32 +#define XgRxBroadcastPkts_offset 0x18 +#define XgRxBroadcastPkts_WIDTH 32 +#define XgRxMulticastPkts_offset 0x1C +#define XgRxMulticastPkts_WIDTH 32 +#define XgRxUnicastPkts_offset 0x20 +#define XgRxUnicastPkts_WIDTH 32 +#define XgRxUndersizePkts_offset 0x24 +#define XgRxUndersizePkts_WIDTH 32 +#define XgRxOversizePkts_offset 0x28 +#define XgRxOversizePkts_WIDTH 32 +#define XgRxJabberPkts_offset 0x2C +#define XgRxJabberPkts_WIDTH 32 +#define XgRxUndersizeFCSerrorPkts_offset 0x30 +#define XgRxUndersizeFCSerrorPkts_WIDTH 32 +#define XgRxDropEvents_offset 0x34 +#define XgRxDropEvents_WIDTH 32 +#define XgRxFCSerrorPkts_offset 0x38 +#define XgRxFCSerrorPkts_WIDTH 32 +#define XgRxAlignError_offset 0x3C +#define XgRxAlignError_WIDTH 32 +#define XgRxSymbolError_offset 0x40 +#define XgRxSymbolError_WIDTH 32 +#define XgRxInternalMACError_offset 0x44 +#define XgRxInternalMACError_WIDTH 32 +#define XgRxControlPkts_offset 0x48 +#define XgRxControlPkts_WIDTH 32 +#define XgRxPausePkts_offset 0x4C +#define XgRxPausePkts_WIDTH 32 +#define XgRxPkts64Octets_offset 0x50 +#define XgRxPkts64Octets_WIDTH 32 +#define XgRxPkts65to127Octets_offset 0x54 +#define XgRxPkts65to127Octets_WIDTH 32 +#define XgRxPkts128to255Octets_offset 0x58 +#define XgRxPkts128to255Octets_WIDTH 32 +#define XgRxPkts256to511Octets_offset 0x5C +#define XgRxPkts256to511Octets_WIDTH 32 +#define XgRxPkts512to1023Octets_offset 0x60 +#define XgRxPkts512to1023Octets_WIDTH 32 +#define XgRxPkts1024to15xxOctets_offset 0x64 +#define XgRxPkts1024to15xxOctets_WIDTH 32 +#define XgRxPkts15xxtoMaxOctets_offset 0x68 +#define XgRxPkts15xxtoMaxOctets_WIDTH 32 +#define XgRxLengthError_offset 0x6C +#define XgRxLengthError_WIDTH 32 +#define XgTxPkts_offset 0x80 +#define XgTxPkts_WIDTH 32 +#define XgTxOctets_offset 0x88 +#define XgTxOctets_WIDTH 48 +#define XgTxMulticastPkts_offset 0x90 +#define XgTxMulticastPkts_WIDTH 32 +#define XgTxBroadcastPkts_offset 0x94 +#define XgTxBroadcastPkts_WIDTH 32 +#define XgTxUnicastPkts_offset 0x98 +#define XgTxUnicastPkts_WIDTH 32 +#define XgTxControlPkts_offset 0x9C +#define XgTxControlPkts_WIDTH 32 +#define XgTxPausePkts_offset 0xA0 +#define XgTxPausePkts_WIDTH 32 +#define XgTxPkts64Octets_offset 0xA4 +#define XgTxPkts64Octets_WIDTH 32 +#define XgTxPkts65to127Octets_offset 0xA8 +#define XgTxPkts65to127Octets_WIDTH 32 +#define XgTxPkts128to255Octets_offset 0xAC +#define XgTxPkts128to255Octets_WIDTH 32 +#define XgTxPkts256to511Octets_offset 0xB0 +#define XgTxPkts256to511Octets_WIDTH 32 +#define XgTxPkts512to1023Octets_offset 0xB4 +#define XgTxPkts512to1023Octets_WIDTH 32 +#define XgTxPkts1024to15xxOctets_offset 0xB8 +#define XgTxPkts1024to15xxOctets_WIDTH 32 +#define XgTxPkts1519toMaxOctets_offset 0xBC +#define XgTxPkts1519toMaxOctets_WIDTH 32 +#define XgTxUndersizePkts_offset 0xC0 +#define XgTxUndersizePkts_WIDTH 32 +#define XgTxOversizePkts_offset 0xC4 +#define XgTxOversizePkts_WIDTH 32 +#define XgTxNonTcpUdpPkt_offset 0xC8 +#define XgTxNonTcpUdpPkt_WIDTH 16 +#define XgTxMacSrcErrPkt_offset 0xCC +#define XgTxMacSrcErrPkt_WIDTH 16 +#define XgTxIpSrcErrPkt_offset 0xD0 +#define XgTxIpSrcErrPkt_WIDTH 16 +#define XgDmaDone_offset 0xD4 +#define XgDmaDone_WIDTH 32 + +#define FALCON_STATS_NOT_DONE 0x00000000 +#define FALCON_STATS_DONE 0xffffffff + +/************************************************************************** + * + * Falcon non-volatile configuration + * + ************************************************************************** + */ + +/* Board configuration v2 (v1 is obsolete; later versions are compatible) */ +struct falcon_nvconfig_board_v2 { + __le16 nports; + u8 port0_phy_addr; + u8 port0_phy_type; + u8 port1_phy_addr; + u8 port1_phy_type; + __le16 asic_sub_revision; + __le16 board_revision; +} __packed; + +/* Board configuration v3 extra information */ +struct falcon_nvconfig_board_v3 { + __le32 spi_device_type[2]; +} __packed; + +/* Bit numbers for spi_device_type */ +#define SPI_DEV_TYPE_SIZE_LBN 0 +#define SPI_DEV_TYPE_SIZE_WIDTH 5 +#define SPI_DEV_TYPE_ADDR_LEN_LBN 6 +#define SPI_DEV_TYPE_ADDR_LEN_WIDTH 2 +#define SPI_DEV_TYPE_ERASE_CMD_LBN 8 +#define SPI_DEV_TYPE_ERASE_CMD_WIDTH 8 +#define SPI_DEV_TYPE_ERASE_SIZE_LBN 16 +#define SPI_DEV_TYPE_ERASE_SIZE_WIDTH 5 +#define SPI_DEV_TYPE_BLOCK_SIZE_LBN 24 +#define SPI_DEV_TYPE_BLOCK_SIZE_WIDTH 5 +#define SPI_DEV_TYPE_FIELD(type, field) \ + (((type) >> EFX_LOW_BIT(field)) & EFX_MASK32(EFX_WIDTH(field))) + +#define FALCON_NVCONFIG_OFFSET 0x300 + +#define FALCON_NVCONFIG_BOARD_MAGIC_NUM 0xFA1C +struct falcon_nvconfig { + efx_oword_t ee_vpd_cfg_reg; /* 0x300 */ + u8 mac_address[2][8]; /* 0x310 */ + efx_oword_t pcie_sd_ctl0123_reg; /* 0x320 */ + efx_oword_t pcie_sd_ctl45_reg; /* 0x330 */ + efx_oword_t pcie_pcs_ctl_stat_reg; /* 0x340 */ + efx_oword_t hw_init_reg; /* 0x350 */ + efx_oword_t nic_stat_reg; /* 0x360 */ + efx_oword_t glb_ctl_reg; /* 0x370 */ + efx_oword_t srm_cfg_reg; /* 0x380 */ + efx_oword_t spare_reg; /* 0x390 */ + __le16 board_magic_num; /* 0x3A0 */ + __le16 board_struct_ver; + __le16 board_checksum; + struct falcon_nvconfig_board_v2 board_v2; + efx_oword_t ee_base_page_reg; /* 0x3B0 */ + struct falcon_nvconfig_board_v3 board_v3; /* 0x3C0 */ +} __packed; + +#endif /* EFX_REGS_H */ --- linux-2.6.32.orig/drivers/net/sfc/enum.h +++ linux-2.6.32/drivers/net/sfc/enum.h @@ -1,6 +1,6 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards - * Copyright 2007-2008 Solarflare Communications Inc. + * Copyright 2007-2009 Solarflare Communications Inc. * * 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 @@ -13,44 +13,101 @@ /** * enum efx_loopback_mode - loopback modes * @LOOPBACK_NONE: no loopback - * @LOOPBACK_GMAC: loopback within GMAC at unspecified level - * @LOOPBACK_XGMII: loopback within XMAC at XGMII level - * @LOOPBACK_XGXS: loopback within XMAC at XGXS level - * @LOOPBACK_XAUI: loopback within XMAC at XAUI level + * @LOOPBACK_DATA: data path loopback + * @LOOPBACK_GMAC: loopback within GMAC + * @LOOPBACK_XGMII: loopback after XMAC + * @LOOPBACK_XGXS: loopback within BPX after XGXS + * @LOOPBACK_XAUI: loopback within BPX before XAUI serdes + * @LOOPBACK_GMII: loopback within BPX after GMAC + * @LOOPBACK_SGMII: loopback within BPX within SGMII + * @LOOPBACK_XGBR: loopback within BPX within XGBR + * @LOOPBACK_XFI: loopback within BPX before XFI serdes + * @LOOPBACK_XAUI_FAR: loopback within BPX after XAUI serdes + * @LOOPBACK_GMII_FAR: loopback within BPX before SGMII + * @LOOPBACK_SGMII_FAR: loopback within BPX after SGMII + * @LOOPBACK_XFI_FAR: loopback after XFI serdes * @LOOPBACK_GPHY: loopback within 1G PHY at unspecified level * @LOOPBACK_PHYXS: loopback within 10G PHY at PHYXS level * @LOOPBACK_PCS: loopback within 10G PHY at PCS level * @LOOPBACK_PMAPMD: loopback within 10G PHY at PMAPMD level - * @LOOPBACK_NETWORK: reflecting loopback (even further than furthest!) + * @LOOPBACK_XPORT: cross port loopback + * @LOOPBACK_XGMII_WS: wireside loopback excluding XMAC + * @LOOPBACK_XAUI_WS: wireside loopback within BPX within XAUI serdes + * @LOOPBACK_XAUI_WS_FAR: wireside loopback within BPX including XAUI serdes + * @LOOPBACK_XAUI_WS_NEAR: wireside loopback within BPX excluding XAUI serdes + * @LOOPBACK_GMII_WS: wireside loopback excluding GMAC + * @LOOPBACK_XFI_WS: wireside loopback excluding XFI serdes + * @LOOPBACK_XFI_WS_FAR: wireside loopback including XFI serdes + * @LOOPBACK_PHYXS_WS: wireside loopback within 10G PHY at PHYXS level */ -/* Please keep in order and up-to-date w.r.t the following two #defines */ +/* Please keep up-to-date w.r.t the following two #defines */ enum efx_loopback_mode { LOOPBACK_NONE = 0, - LOOPBACK_GMAC = 1, - LOOPBACK_XGMII = 2, - LOOPBACK_XGXS = 3, - LOOPBACK_XAUI = 4, - LOOPBACK_GPHY = 5, - LOOPBACK_PHYXS = 6, - LOOPBACK_PCS = 7, - LOOPBACK_PMAPMD = 8, - LOOPBACK_NETWORK = 9, + LOOPBACK_DATA = 1, + LOOPBACK_GMAC = 2, + LOOPBACK_XGMII = 3, + LOOPBACK_XGXS = 4, + LOOPBACK_XAUI = 5, + LOOPBACK_GMII = 6, + LOOPBACK_SGMII = 7, + LOOPBACK_XGBR = 8, + LOOPBACK_XFI = 9, + LOOPBACK_XAUI_FAR = 10, + LOOPBACK_GMII_FAR = 11, + LOOPBACK_SGMII_FAR = 12, + LOOPBACK_XFI_FAR = 13, + LOOPBACK_GPHY = 14, + LOOPBACK_PHYXS = 15, + LOOPBACK_PCS = 16, + LOOPBACK_PMAPMD = 17, + LOOPBACK_XPORT = 18, + LOOPBACK_XGMII_WS = 19, + LOOPBACK_XAUI_WS = 20, + LOOPBACK_XAUI_WS_FAR = 21, + LOOPBACK_XAUI_WS_NEAR = 22, + LOOPBACK_GMII_WS = 23, + LOOPBACK_XFI_WS = 24, + LOOPBACK_XFI_WS_FAR = 25, + LOOPBACK_PHYXS_WS = 26, LOOPBACK_MAX }; - #define LOOPBACK_TEST_MAX LOOPBACK_PMAPMD -extern const char *efx_loopback_mode_names[]; -#define LOOPBACK_MODE_NAME(mode) \ - STRING_TABLE_LOOKUP(mode, efx_loopback_mode) -#define LOOPBACK_MODE(efx) \ - LOOPBACK_MODE_NAME(efx->loopback_mode) - /* These loopbacks occur within the controller */ -#define LOOPBACKS_INTERNAL ((1 << LOOPBACK_GMAC) | \ - (1 << LOOPBACK_XGMII)| \ - (1 << LOOPBACK_XGXS) | \ - (1 << LOOPBACK_XAUI)) +#define LOOPBACKS_INTERNAL ((1 << LOOPBACK_DATA) | \ + (1 << LOOPBACK_GMAC) | \ + (1 << LOOPBACK_XGMII)| \ + (1 << LOOPBACK_XGXS) | \ + (1 << LOOPBACK_XAUI) | \ + (1 << LOOPBACK_GMII) | \ + (1 << LOOPBACK_SGMII) | \ + (1 << LOOPBACK_SGMII) | \ + (1 << LOOPBACK_XGBR) | \ + (1 << LOOPBACK_XFI) | \ + (1 << LOOPBACK_XAUI_FAR) | \ + (1 << LOOPBACK_GMII_FAR) | \ + (1 << LOOPBACK_SGMII_FAR) | \ + (1 << LOOPBACK_XFI_FAR) | \ + (1 << LOOPBACK_XGMII_WS) | \ + (1 << LOOPBACK_XAUI_WS) | \ + (1 << LOOPBACK_XAUI_WS_FAR) | \ + (1 << LOOPBACK_XAUI_WS_NEAR) | \ + (1 << LOOPBACK_GMII_WS) | \ + (1 << LOOPBACK_XFI_WS) | \ + (1 << LOOPBACK_XFI_WS_FAR)) + +#define LOOPBACKS_WS ((1 << LOOPBACK_XGMII_WS) | \ + (1 << LOOPBACK_XAUI_WS) | \ + (1 << LOOPBACK_XAUI_WS_FAR) | \ + (1 << LOOPBACK_XAUI_WS_NEAR) | \ + (1 << LOOPBACK_GMII_WS) | \ + (1 << LOOPBACK_XFI_WS) | \ + (1 << LOOPBACK_XFI_WS_FAR) | \ + (1 << LOOPBACK_PHYXS_WS)) + +#define LOOPBACKS_EXTERNAL(_efx) \ + ((_efx)->loopback_modes & ~LOOPBACKS_INTERNAL & \ + ~(1 << LOOPBACK_NONE)) #define LOOPBACK_MASK(_efx) \ (1 << (_efx)->loopback_mode) @@ -58,6 +115,9 @@ #define LOOPBACK_INTERNAL(_efx) \ (!!(LOOPBACKS_INTERNAL & LOOPBACK_MASK(_efx))) +#define LOOPBACK_EXTERNAL(_efx) \ + (!!(LOOPBACK_MASK(_efx) & LOOPBACKS_EXTERNAL(_efx))) + #define LOOPBACK_CHANGED(_from, _to, _mask) \ (!!((LOOPBACK_MASK(_from) ^ LOOPBACK_MASK(_to)) & (_mask))) @@ -84,6 +144,7 @@ * @RESET_TYPE_RX_DESC_FETCH: pcie error during rx descriptor fetch * @RESET_TYPE_TX_DESC_FETCH: pcie error during tx descriptor fetch * @RESET_TYPE_TX_SKIP: hardware completed empty tx descriptors + * @RESET_TYPE_MC_FAILURE: MC reboot/assertion */ enum reset_type { RESET_TYPE_NONE = -1, @@ -98,6 +159,7 @@ RESET_TYPE_RX_DESC_FETCH, RESET_TYPE_TX_DESC_FETCH, RESET_TYPE_TX_SKIP, + RESET_TYPE_MC_FAILURE, RESET_TYPE_MAX, }; --- linux-2.6.32.orig/drivers/net/sfc/net_driver.h +++ linux-2.6.32/drivers/net/sfc/net_driver.h @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2005-2008 Solarflare Communications Inc. + * Copyright 2005-2009 Solarflare Communications Inc. * * 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 @@ -38,7 +38,7 @@ #ifndef EFX_DRIVER_NAME #define EFX_DRIVER_NAME "sfc" #endif -#define EFX_DRIVER_VERSION "2.3" +#define EFX_DRIVER_VERSION "3.0" #ifdef EFX_ENABLE_DEBUG #define EFX_BUG_ON_PARANOID(x) BUG_ON(x) @@ -113,6 +113,13 @@ int entries; }; +enum efx_flush_state { + FLUSH_NONE, + FLUSH_PENDING, + FLUSH_FAILED, + FLUSH_DONE, +}; + /** * struct efx_tx_buffer - An Efx TX buffer * @skb: The associated socket buffer. @@ -189,7 +196,7 @@ struct efx_nic *nic; struct efx_tx_buffer *buffer; struct efx_special_buffer txd; - bool flushed; + enum efx_flush_state flushed; /* Members used mainly on the completion path */ unsigned int read_count ____cacheline_aligned_in_smp; @@ -284,7 +291,7 @@ struct page *buf_page; dma_addr_t buf_dma_addr; char *buf_data; - bool flushed; + enum efx_flush_state flushed; }; /** @@ -327,7 +334,7 @@ * @used_flags: Channel is used by net driver * @enabled: Channel enabled indicator * @irq: IRQ number (MSI and MSI-X only) - * @irq_moderation: IRQ moderation value (in us) + * @irq_moderation: IRQ moderation value (in hardware ticks) * @napi_dev: Net device used with NAPI * @napi_str: NAPI control structure * @reset_work: Scheduled reset work thread @@ -343,9 +350,9 @@ * @rx_alloc_push_pages: RX allocation method currently in use for pushing * descriptors * @n_rx_tobe_disc: Count of RX_TOBE_DISC errors - * @n_rx_ip_frag_err: Count of RX IP fragment errors * @n_rx_ip_hdr_chksum_err: Count of RX IP header checksum errors * @n_rx_tcp_udp_chksum_err: Count of RX TCP and UDP checksum errors + * @n_rx_mcast_mismatch: Count of unmatched multicast frames * @n_rx_frm_trunc: Count of RX_FRM_TRUNC errors * @n_rx_overlength: Count of RX_OVERLENGTH errors * @n_skbuff_leaks: Count of skbuffs leaked due to RX overrun @@ -373,9 +380,9 @@ int rx_alloc_push_pages; unsigned n_rx_tobe_disc; - unsigned n_rx_ip_frag_err; unsigned n_rx_ip_hdr_chksum_err; unsigned n_rx_tcp_udp_chksum_err; + unsigned n_rx_mcast_mismatch; unsigned n_rx_frm_trunc; unsigned n_rx_overlength; unsigned n_skbuff_leaks; @@ -388,53 +395,29 @@ }; -/** - * struct efx_blinker - S/W LED blinking context - * @state: Current state - on or off - * @resubmit: Timer resubmission flag - * @timer: Control timer for blinking - */ -struct efx_blinker { - bool state; - bool resubmit; - struct timer_list timer; -}; - - -/** - * struct efx_board - board information - * @type: Board model type - * @major: Major rev. ('A', 'B' ...) - * @minor: Minor rev. (0, 1, ...) - * @init: Initialisation function - * @init_leds: Sets up board LEDs. May be called repeatedly. - * @set_id_led: Turns the identification LED on or off - * @blink: Starts/stops blinking - * @monitor: Board-specific health check function - * @fini: Cleanup function - * @blinker: used to blink LEDs in software - * @hwmon_client: I2C client for hardware monitor - * @ioexp_client: I2C client for power/port control - */ -struct efx_board { - int type; - int major; - int minor; - int (*init) (struct efx_nic *nic); - /* As the LEDs are typically attached to the PHY, LEDs - * have a separate init callback that happens later than - * board init. */ - void (*init_leds)(struct efx_nic *efx); - void (*set_id_led) (struct efx_nic *efx, bool state); - int (*monitor) (struct efx_nic *nic); - void (*blink) (struct efx_nic *efx, bool start); - void (*fini) (struct efx_nic *nic); - struct efx_blinker blinker; - struct i2c_client *hwmon_client, *ioexp_client; -}; - -#define STRING_TABLE_LOOKUP(val, member) \ - member ## _names[val] +enum efx_led_mode { + EFX_LED_OFF = 0, + EFX_LED_ON = 1, + EFX_LED_DEFAULT = 2 +}; + +#define STRING_TABLE_LOOKUP(val, member) \ + ((val) < member ## _max) ? member ## _names[val] : "(invalid)" + +extern const char *efx_loopback_mode_names[]; +extern const unsigned int efx_loopback_mode_max; +#define LOOPBACK_MODE(efx) \ + STRING_TABLE_LOOKUP((efx)->loopback_mode, efx_loopback_mode) + +extern const char *efx_interrupt_mode_names[]; +extern const unsigned int efx_interrupt_mode_max; +#define INT_MODE(efx) \ + STRING_TABLE_LOOKUP(efx->interrupt_mode, efx_interrupt_mode) + +extern const char *efx_reset_type_names[]; +extern const unsigned int efx_reset_type_max; +#define RESET_TYPE(type) \ + STRING_TABLE_LOOKUP(type, efx_reset_type) enum efx_int_mode { /* Be careful if altering to correct macro below */ @@ -445,20 +428,7 @@ }; #define EFX_INT_MODE_USE_MSI(x) (((x)->interrupt_mode) <= EFX_INT_MODE_MSI) -enum phy_type { - PHY_TYPE_NONE = 0, - PHY_TYPE_TXC43128 = 1, - PHY_TYPE_88E1111 = 2, - PHY_TYPE_SFX7101 = 3, - PHY_TYPE_QT2022C2 = 4, - PHY_TYPE_PM8358 = 6, - PHY_TYPE_SFT9001A = 8, - PHY_TYPE_QT2025C = 9, - PHY_TYPE_SFT9001B = 10, - PHY_TYPE_MAX /* Insert any new items before this */ -}; - -#define EFX_IS10G(efx) ((efx)->link_speed == 10000) +#define EFX_IS10G(efx) ((efx)->link_state.speed == 10000) enum nic_state { STATE_INIT = 0, @@ -500,73 +470,70 @@ EFX_FC_AUTO = 4, }; -/* Supported MAC bit-mask */ -enum efx_mac_type { - EFX_GMAC = 1, - EFX_XMAC = 2, +/** + * struct efx_link_state - Current state of the link + * @up: Link is up + * @fd: Link is full-duplex + * @fc: Actual flow control flags + * @speed: Link speed (Mbps) + */ +struct efx_link_state { + bool up; + bool fd; + enum efx_fc_type fc; + unsigned int speed; }; -static inline enum efx_fc_type efx_fc_resolve(enum efx_fc_type wanted_fc, - unsigned int lpa) +static inline bool efx_link_state_equal(const struct efx_link_state *left, + const struct efx_link_state *right) { - BUILD_BUG_ON(EFX_FC_AUTO & (EFX_FC_RX | EFX_FC_TX)); - - if (!(wanted_fc & EFX_FC_AUTO)) - return wanted_fc; - - return mii_resolve_flowctrl_fdx(mii_advertise_flowctrl(wanted_fc), lpa); + return left->up == right->up && left->fd == right->fd && + left->fc == right->fc && left->speed == right->speed; } /** * struct efx_mac_operations - Efx MAC operations table * @reconfigure: Reconfigure MAC. Serialised by the mac_lock * @update_stats: Update statistics - * @irq: Hardware MAC event callback. Serialised by the mac_lock - * @poll: Poll for hardware state. Serialised by the mac_lock + * @check_fault: Check fault state. True if fault present. */ struct efx_mac_operations { - void (*reconfigure) (struct efx_nic *efx); + int (*reconfigure) (struct efx_nic *efx); void (*update_stats) (struct efx_nic *efx); - void (*irq) (struct efx_nic *efx); - void (*poll) (struct efx_nic *efx); + bool (*check_fault)(struct efx_nic *efx); }; /** * struct efx_phy_operations - Efx PHY operations table + * @probe: Probe PHY and initialise efx->mdio.mode_support, efx->mdio.mmds, + * efx->loopback_modes. * @init: Initialise PHY * @fini: Shut down PHY * @reconfigure: Reconfigure PHY (e.g. for new link parameters) - * @clear_interrupt: Clear down interrupt - * @blink: Blink LEDs - * @poll: Poll for hardware state. Serialised by the mac_lock. + * @poll: Update @link_state and report whether it changed. + * Serialised by the mac_lock. * @get_settings: Get ethtool settings. Serialised by the mac_lock. * @set_settings: Set ethtool settings. Serialised by the mac_lock. * @set_npage_adv: Set abilities advertised in (Extended) Next Page * (only needed where AN bit is set in mmds) - * @num_tests: Number of PHY-specific tests/results - * @test_names: Names of the tests/results + * @test_name: Get the name of a PHY-specific test/result * @run_tests: Run tests and record results as appropriate. * Flags are the ethtool tests flags. - * @mmds: MMD presence mask - * @loopbacks: Supported loopback modes mask */ struct efx_phy_operations { - enum efx_mac_type macs; + int (*probe) (struct efx_nic *efx); int (*init) (struct efx_nic *efx); void (*fini) (struct efx_nic *efx); - void (*reconfigure) (struct efx_nic *efx); - void (*clear_interrupt) (struct efx_nic *efx); - void (*poll) (struct efx_nic *efx); + void (*remove) (struct efx_nic *efx); + int (*reconfigure) (struct efx_nic *efx); + bool (*poll) (struct efx_nic *efx); void (*get_settings) (struct efx_nic *efx, struct ethtool_cmd *ecmd); int (*set_settings) (struct efx_nic *efx, struct ethtool_cmd *ecmd); void (*set_npage_adv) (struct efx_nic *efx, u32); - u32 num_tests; - const char *const *test_names; + const char *(*test_name) (struct efx_nic *efx, unsigned int index); int (*run_tests) (struct efx_nic *efx, int *results, unsigned flags); - int mmds; - unsigned loopbacks; }; /** @@ -690,36 +657,38 @@ * @interrupt_mode: Interrupt mode * @irq_rx_adaptive: Adaptive IRQ moderation enabled for RX event queues * @irq_rx_moderation: IRQ moderation time for RX event queues - * @i2c_adap: I2C adapter - * @board_info: Board-level information * @state: Device state flag. Serialised by the rtnl_lock. * @reset_pending: Pending reset method (normally RESET_TYPE_NONE) * @tx_queue: TX DMA queues * @rx_queue: RX DMA queues * @channel: Channels + * @next_buffer_table: First available buffer table id * @n_rx_queues: Number of RX queues * @n_channels: Number of channels in use * @rx_buffer_len: RX buffer length * @rx_buffer_order: Order (log2) of number of pages for each RX buffer + * @int_error_count: Number of internal errors seen recently + * @int_error_expire: Time at which error count will be expired * @irq_status: Interrupt status buffer * @last_irq_cpu: Last CPU to handle interrupt. * This register is written with the SMP processor ID whenever an * interrupt is handled. It is used by falcon_test_interrupt() * to verify that an interrupt has occurred. * @spi_flash: SPI flash device - * This field will be %NULL if no flash device is present. + * This field will be %NULL if no flash device is present (or for Siena). * @spi_eeprom: SPI EEPROM device - * This field will be %NULL if no EEPROM device is present. + * This field will be %NULL if no EEPROM device is present (or for Siena). * @spi_lock: SPI bus lock + * @mtd_list: List of MTDs attached to the NIC * @n_rx_nodesc_drop_cnt: RX no descriptor drop count * @nic_data: Hardware dependant state * @mac_lock: MAC access lock. Protects @port_enabled, @phy_mode, * @port_inhibited, efx_monitor() and efx_reconfigure_port() * @port_enabled: Port enabled indicator. - * Serialises efx_stop_all(), efx_start_all(), efx_monitor(), - * efx_phy_work(), and efx_mac_work() with kernel interfaces. Safe to read - * under any one of the rtnl_lock, mac_lock, or netif_tx_lock, but all - * three must be held to modify it. + * Serialises efx_stop_all(), efx_start_all(), efx_monitor() and + * efx_mac_work() with kernel interfaces. Safe to read under any + * one of the rtnl_lock, mac_lock, or netif_tx_lock, but all three must + * be held to modify it. * @port_inhibited: If set, the netif_carrier is always off. Hold the mac_lock * @port_initialized: Port initialized? * @net_dev: Operating system network device. Consider holding the rtnl lock @@ -731,26 +700,23 @@ * &struct net_device_stats. * @stats_buffer: DMA buffer for statistics * @stats_lock: Statistics update lock. Serialises statistics fetches - * @stats_disable_count: Nest count for disabling statistics fetches * @mac_op: MAC interface * @mac_address: Permanent MAC address * @phy_type: PHY type - * @phy_lock: PHY access lock + * @mdio_lock: MDIO lock * @phy_op: PHY interface * @phy_data: PHY private data (including PHY-specific stats) * @mdio: PHY MDIO interface + * @mdio_bus: PHY MDIO bus ID (only used by Siena) * @phy_mode: PHY operating mode. Serialised by @mac_lock. - * @mac_up: MAC link state - * @link_up: Link status - * @link_fd: Link is full duplex - * @link_fc: Actualy flow control flags - * @link_speed: Link speed (Mbps) + * @xmac_poll_required: XMAC link state needs polling + * @link_advertising: Autonegotiation advertising flags + * @link_state: Current state of the link * @n_link_state_changes: Number of times the link has changed state * @promiscuous: Promiscuous flag. Protected by netif_tx_lock. * @multicast_hash: Multicast hash table * @wanted_fc: Wanted flow control flags - * @phy_work: work item for dealing with PHY events - * @mac_work: work item for dealing with MAC events + * @mac_work: Work item for changing MAC promiscuity and multicast hash * @loopback_mode: Loopback status * @loopback_modes: Supported loopback mode bitmask * @loopback_selftest: Offline self-test private state @@ -774,9 +740,6 @@ bool irq_rx_adaptive; unsigned int irq_rx_moderation; - struct i2c_adapter i2c_adap; - struct efx_board board_info; - enum nic_state state; enum reset_type reset_pending; @@ -784,21 +747,29 @@ struct efx_rx_queue rx_queue[EFX_MAX_RX_QUEUES]; struct efx_channel channel[EFX_MAX_CHANNELS]; + unsigned next_buffer_table; int n_rx_queues; int n_channels; unsigned int rx_buffer_len; unsigned int rx_buffer_order; + unsigned int_error_count; + unsigned long int_error_expire; + struct efx_buffer irq_status; volatile signed int last_irq_cpu; + unsigned long irq_zero_count; struct efx_spi_device *spi_flash; struct efx_spi_device *spi_eeprom; struct mutex spi_lock; +#ifdef CONFIG_SFC_MTD + struct list_head mtd_list; +#endif unsigned n_rx_nodesc_drop_cnt; - struct falcon_nic_data *nic_data; + void *nic_data; struct mutex mac_lock; struct work_struct mac_work; @@ -815,24 +786,21 @@ struct efx_mac_stats mac_stats; struct efx_buffer stats_buffer; spinlock_t stats_lock; - unsigned int stats_disable_count; struct efx_mac_operations *mac_op; unsigned char mac_address[ETH_ALEN]; - enum phy_type phy_type; - spinlock_t phy_lock; - struct work_struct phy_work; + unsigned int phy_type; + struct mutex mdio_lock; struct efx_phy_operations *phy_op; void *phy_data; struct mdio_if_info mdio; + unsigned int mdio_bus; enum efx_phy_mode phy_mode; - bool mac_up; - bool link_up; - bool link_fd; - enum efx_fc_type link_fc; - unsigned int link_speed; + bool xmac_poll_required; + u32 link_advertising; + struct efx_link_state link_state; unsigned int n_link_state_changes; bool promiscuous; @@ -841,7 +809,7 @@ atomic_t rx_reset; enum efx_loopback_mode loopback_mode; - unsigned int loopback_modes; + u64 loopback_modes; void *loopback_selftest; }; @@ -860,50 +828,95 @@ return efx_dev_registered(efx) ? efx->name : ""; } +static inline unsigned int efx_port_num(struct efx_nic *efx) +{ + return PCI_FUNC(efx->pci_dev->devfn); +} + /** * struct efx_nic_type - Efx device type definition - * @mem_bar: Memory BAR number + * @probe: Probe the controller + * @remove: Free resources allocated by probe() + * @init: Initialise the controller + * @fini: Shut down the controller + * @monitor: Periodic function for polling link state and hardware monitor + * @reset: Reset the controller hardware and possibly the PHY. This will + * be called while the controller is uninitialised. + * @probe_port: Probe the MAC and PHY + * @remove_port: Free resources allocated by probe_port() + * @prepare_flush: Prepare the hardware for flushing the DMA queues + * @update_stats: Update statistics not provided by event handling + * @start_stats: Start the regular fetching of statistics + * @stop_stats: Stop the regular fetching of statistics + * @set_id_led: Set state of identifying LED or revert to automatic function + * @push_irq_moderation: Apply interrupt moderation value + * @push_multicast_hash: Apply multicast hash table + * @reconfigure_port: Push loopback/power/txdis changes to the MAC and PHY + * @get_wol: Get WoL configuration from driver state + * @set_wol: Push WoL configuration to the NIC + * @resume_wol: Synchronise WoL state between driver and MC (e.g. after resume) + * @test_registers: Test read/write functionality of control registers + * @test_nvram: Test validity of NVRAM contents + * @default_mac_ops: efx_mac_operations to set at startup + * @revision: Hardware architecture revision * @mem_map_size: Memory BAR mapped size * @txd_ptr_tbl_base: TX descriptor ring base address * @rxd_ptr_tbl_base: RX descriptor ring base address * @buf_tbl_base: Buffer table base address * @evq_ptr_tbl_base: Event queue pointer table base address * @evq_rptr_tbl_base: Event queue read-pointer table base address - * @txd_ring_mask: TX descriptor ring size - 1 (must be a power of two - 1) - * @rxd_ring_mask: RX descriptor ring size - 1 (must be a power of two - 1) - * @evq_size: Event queue size (must be a power of two) * @max_dma_mask: Maximum possible DMA mask - * @tx_dma_mask: TX DMA mask - * @bug5391_mask: Address mask for bug 5391 workaround - * @rx_xoff_thresh: RX FIFO XOFF watermark (bytes) - * @rx_xon_thresh: RX FIFO XON watermark (bytes) * @rx_buffer_padding: Padding added to each RX buffer * @max_interrupt_mode: Highest capability interrupt mode supported * from &enum efx_init_mode. * @phys_addr_channels: Number of channels with physically addressed * descriptors + * @tx_dc_base: Base address in SRAM of TX queue descriptor caches + * @rx_dc_base: Base address in SRAM of RX queue descriptor caches + * @offload_features: net_device feature flags for protocol offload + * features implemented in hardware + * @reset_world_flags: Flags for additional components covered by + * reset method RESET_TYPE_WORLD */ struct efx_nic_type { - unsigned int mem_bar; + int (*probe)(struct efx_nic *efx); + void (*remove)(struct efx_nic *efx); + int (*init)(struct efx_nic *efx); + void (*fini)(struct efx_nic *efx); + void (*monitor)(struct efx_nic *efx); + int (*reset)(struct efx_nic *efx, enum reset_type method); + int (*probe_port)(struct efx_nic *efx); + void (*remove_port)(struct efx_nic *efx); + void (*prepare_flush)(struct efx_nic *efx); + void (*update_stats)(struct efx_nic *efx); + void (*start_stats)(struct efx_nic *efx); + void (*stop_stats)(struct efx_nic *efx); + void (*set_id_led)(struct efx_nic *efx, enum efx_led_mode mode); + void (*push_irq_moderation)(struct efx_channel *channel); + void (*push_multicast_hash)(struct efx_nic *efx); + int (*reconfigure_port)(struct efx_nic *efx); + void (*get_wol)(struct efx_nic *efx, struct ethtool_wolinfo *wol); + int (*set_wol)(struct efx_nic *efx, u32 type); + void (*resume_wol)(struct efx_nic *efx); + int (*test_registers)(struct efx_nic *efx); + int (*test_nvram)(struct efx_nic *efx); + struct efx_mac_operations *default_mac_ops; + + int revision; unsigned int mem_map_size; unsigned int txd_ptr_tbl_base; unsigned int rxd_ptr_tbl_base; unsigned int buf_tbl_base; unsigned int evq_ptr_tbl_base; unsigned int evq_rptr_tbl_base; - - unsigned int txd_ring_mask; - unsigned int rxd_ring_mask; - unsigned int evq_size; u64 max_dma_mask; - unsigned int tx_dma_mask; - unsigned bug5391_mask; - - int rx_xoff_thresh; - int rx_xon_thresh; unsigned int rx_buffer_padding; unsigned int max_interrupt_mode; unsigned int phys_addr_channels; + unsigned int tx_dc_base; + unsigned int rx_dc_base; + unsigned long offload_features; + u32 reset_world_flags; }; /************************************************************************** --- linux-2.6.32.orig/drivers/net/sfc/tenxpress.c +++ linux-2.6.32/drivers/net/sfc/tenxpress.c @@ -1,6 +1,6 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards - * Copyright 2007-2008 Solarflare Communications Inc. + * Copyright 2007-2009 Solarflare Communications Inc. * * 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 @@ -12,10 +12,9 @@ #include #include "efx.h" #include "mdio_10g.h" -#include "falcon.h" +#include "nic.h" #include "phy.h" -#include "falcon_hwdefs.h" -#include "boards.h" +#include "regs.h" #include "workarounds.h" #include "selftest.h" @@ -31,13 +30,13 @@ #define SFX7101_LOOPBACKS ((1 << LOOPBACK_PHYXS) | \ (1 << LOOPBACK_PCS) | \ (1 << LOOPBACK_PMAPMD) | \ - (1 << LOOPBACK_NETWORK)) + (1 << LOOPBACK_PHYXS_WS)) #define SFT9001_LOOPBACKS ((1 << LOOPBACK_GPHY) | \ (1 << LOOPBACK_PHYXS) | \ (1 << LOOPBACK_PCS) | \ (1 << LOOPBACK_PMAPMD) | \ - (1 << LOOPBACK_NETWORK)) + (1 << LOOPBACK_PHYXS_WS)) /* We complain if we fail to see the link partner as 10G capable this many * times in a row (must be > 1 as sampling the autoneg. registers is racy) @@ -84,9 +83,9 @@ #define PMA_PMD_LED_FLASH (3) #define PMA_PMD_LED_MASK 3 /* All LEDs under hardware control */ -#define PMA_PMD_LED_FULL_AUTO (0) +#define SFT9001_PMA_PMD_LED_DEFAULT 0 /* Green and Amber under hardware control, Red off */ -#define PMA_PMD_LED_DEFAULT (PMA_PMD_LED_OFF << PMA_PMD_LED_RX_LBN) +#define SFX7101_PMA_PMD_LED_DEFAULT (PMA_PMD_LED_OFF << PMA_PMD_LED_RX_LBN) #define PMA_PMD_SPEED_ENABLE_REG 49192 #define PMA_PMD_100TX_ADV_LBN 1 @@ -200,15 +199,20 @@ const char *buf, size_t count) { struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev)); + int rc; rtnl_lock(); - efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, MDIO_PMA_10GBT_TXPWR, - MDIO_PMA_10GBT_TXPWR_SHORT, - count != 0 && *buf != '0'); - efx_reconfigure_port(efx); + if (efx->state != STATE_RUNNING) { + rc = -EBUSY; + } else { + efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, MDIO_PMA_10GBT_TXPWR, + MDIO_PMA_10GBT_TXPWR_SHORT, + count != 0 && *buf != '0'); + rc = efx_reconfigure_port(efx); + } rtnl_unlock(); - return count; + return rc < 0 ? rc : (ssize_t)count; } static DEVICE_ATTR(phy_short_reach, 0644, show_phy_short_reach, @@ -292,23 +296,68 @@ efx_mdio_set_flag(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_CTRL_REG, 1 << PMA_PMA_LED_ACTIVITY_LBN, true); efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_OVERR_REG, - PMA_PMD_LED_DEFAULT); + SFX7101_PMA_PMD_LED_DEFAULT); } return 0; } -static int tenxpress_phy_init(struct efx_nic *efx) +static int tenxpress_phy_probe(struct efx_nic *efx) { struct tenxpress_phy_data *phy_data; - int rc = 0; + int rc; + /* Allocate phy private storage */ phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL); if (!phy_data) return -ENOMEM; efx->phy_data = phy_data; phy_data->phy_mode = efx->phy_mode; + /* Create any special files */ + if (efx->phy_type == PHY_TYPE_SFT9001B) { + rc = device_create_file(&efx->pci_dev->dev, + &dev_attr_phy_short_reach); + if (rc) + goto fail; + } + + if (efx->phy_type == PHY_TYPE_SFX7101) { + efx->mdio.mmds = TENXPRESS_REQUIRED_DEVS; + efx->mdio.mode_support = MDIO_SUPPORTS_C45; + + efx->loopback_modes = SFX7101_LOOPBACKS | FALCON_XMAC_LOOPBACKS; + + efx->link_advertising = (ADVERTISED_TP | ADVERTISED_Autoneg | + ADVERTISED_10000baseT_Full); + } else { + efx->mdio.mmds = TENXPRESS_REQUIRED_DEVS; + efx->mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; + + efx->loopback_modes = (SFT9001_LOOPBACKS | + FALCON_XMAC_LOOPBACKS | + FALCON_GMAC_LOOPBACKS); + + efx->link_advertising = (ADVERTISED_TP | ADVERTISED_Autoneg | + ADVERTISED_10000baseT_Full | + ADVERTISED_1000baseT_Full | + ADVERTISED_100baseT_Full); + } + + return 0; + +fail: + kfree(efx->phy_data); + efx->phy_data = NULL; + return rc; +} + +static int tenxpress_phy_init(struct efx_nic *efx) +{ + int rc; + + falcon_board(efx)->type->init_phy(efx); + if (!(efx->phy_mode & PHY_MODE_SPECIAL)) { if (efx->phy_type == PHY_TYPE_SFT9001A) { int reg; @@ -322,23 +371,20 @@ rc = efx_mdio_wait_reset_mmds(efx, TENXPRESS_REQUIRED_DEVS); if (rc < 0) - goto fail; + return rc; rc = efx_mdio_check_mmds(efx, TENXPRESS_REQUIRED_DEVS, 0); if (rc < 0) - goto fail; + return rc; } rc = tenxpress_init(efx); if (rc < 0) - goto fail; + return rc; - if (efx->phy_type == PHY_TYPE_SFT9001B) { - rc = device_create_file(&efx->pci_dev->dev, - &dev_attr_phy_short_reach); - if (rc) - goto fail; - } + /* Reinitialise flow control settings */ + efx_link_set_wanted_fc(efx, efx->wanted_fc); + efx_mdio_an_reconfigure(efx); schedule_timeout_uninterruptible(HZ / 5); /* 200ms */ @@ -346,11 +392,6 @@ falcon_reset_xaui(efx); return 0; - - fail: - kfree(efx->phy_data); - efx->phy_data = NULL; - return rc; } /* Perform a "special software reset" on the PHY. The caller is @@ -363,7 +404,7 @@ /* The XGMAC clock is driven from the SFC7101/SFT9001 312MHz clock, so * a special software reset can glitch the XGMAC sufficiently for stats * requests to fail. */ - efx_stats_disable(efx); + falcon_stop_nic_stats(efx); /* Initiate reset */ reg = efx_mdio_read(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG); @@ -385,7 +426,7 @@ /* Wait for the XGXS state machine to churn */ mdelay(10); out: - efx_stats_enable(efx); + falcon_start_nic_stats(efx); return rc; } @@ -489,133 +530,126 @@ !!(efx->phy_mode & PHY_MODE_LOW_POWER)); } -static void tenxpress_phy_reconfigure(struct efx_nic *efx) +static int tenxpress_phy_reconfigure(struct efx_nic *efx) { struct tenxpress_phy_data *phy_data = efx->phy_data; - struct ethtool_cmd ecmd; bool phy_mode_change, loop_reset; if (efx->phy_mode & (PHY_MODE_OFF | PHY_MODE_SPECIAL)) { phy_data->phy_mode = efx->phy_mode; - return; + return 0; } - tenxpress_low_power(efx); - phy_mode_change = (efx->phy_mode == PHY_MODE_NORMAL && phy_data->phy_mode != PHY_MODE_NORMAL); - loop_reset = (LOOPBACK_OUT_OF(phy_data, efx, efx->phy_op->loopbacks) || + loop_reset = (LOOPBACK_OUT_OF(phy_data, efx, LOOPBACKS_EXTERNAL(efx)) || LOOPBACK_CHANGED(phy_data, efx, 1 << LOOPBACK_GPHY)); if (loop_reset || phy_mode_change) { - int rc; - - efx->phy_op->get_settings(efx, &ecmd); - - if (loop_reset || phy_mode_change) { - tenxpress_special_reset(efx); + tenxpress_special_reset(efx); - /* Reset XAUI if we were in 10G, and are staying - * in 10G. If we're moving into and out of 10G - * then xaui will be reset anyway */ - if (EFX_IS10G(efx)) - falcon_reset_xaui(efx); - } - - rc = efx->phy_op->set_settings(efx, &ecmd); - WARN_ON(rc); + /* Reset XAUI if we were in 10G, and are staying + * in 10G. If we're moving into and out of 10G + * then xaui will be reset anyway */ + if (EFX_IS10G(efx)) + falcon_reset_xaui(efx); } + tenxpress_low_power(efx); efx_mdio_transmit_disable(efx); efx_mdio_phy_reconfigure(efx); tenxpress_ext_loopback(efx); + efx_mdio_an_reconfigure(efx); phy_data->loopback_mode = efx->loopback_mode; phy_data->phy_mode = efx->phy_mode; - if (efx->phy_type == PHY_TYPE_SFX7101) { - efx->link_speed = 10000; - efx->link_fd = true; - efx->link_up = sfx7101_link_ok(efx); - } else { - efx->phy_op->get_settings(efx, &ecmd); - efx->link_speed = ecmd.speed; - efx->link_fd = ecmd.duplex == DUPLEX_FULL; - efx->link_up = sft9001_link_ok(efx, &ecmd); - } - efx->link_fc = efx_mdio_get_pause(efx); + return 0; } -/* Poll PHY for interrupt */ -static void tenxpress_phy_poll(struct efx_nic *efx) +static void +tenxpress_get_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd); + +/* Poll for link state changes */ +static bool tenxpress_phy_poll(struct efx_nic *efx) { - struct tenxpress_phy_data *phy_data = efx->phy_data; - bool change = false; + struct efx_link_state old_state = efx->link_state; if (efx->phy_type == PHY_TYPE_SFX7101) { - bool link_ok = sfx7101_link_ok(efx); - if (link_ok != efx->link_up) { - change = true; - } else { - unsigned int link_fc = efx_mdio_get_pause(efx); - if (link_fc != efx->link_fc) - change = true; - } - sfx7101_check_bad_lp(efx, link_ok); - } else if (efx->loopback_mode) { - bool link_ok = sft9001_link_ok(efx, NULL); - if (link_ok != efx->link_up) - change = true; + efx->link_state.up = sfx7101_link_ok(efx); + efx->link_state.speed = 10000; + efx->link_state.fd = true; + efx->link_state.fc = efx_mdio_get_pause(efx); + + sfx7101_check_bad_lp(efx, efx->link_state.up); } else { - int status = efx_mdio_read(efx, MDIO_MMD_PMAPMD, - MDIO_PMA_LASI_STAT); - if (status & MDIO_PMA_LASI_LSALARM) - change = true; - } + struct ethtool_cmd ecmd; - if (change) - falcon_sim_phy_event(efx); + /* Check the LASI alarm first */ + if (efx->loopback_mode == LOOPBACK_NONE && + !(efx_mdio_read(efx, MDIO_MMD_PMAPMD, MDIO_PMA_LASI_STAT) & + MDIO_PMA_LASI_LSALARM)) + return false; - if (phy_data->phy_mode != PHY_MODE_NORMAL) - return; + tenxpress_get_settings(efx, &ecmd); + + efx->link_state.up = sft9001_link_ok(efx, &ecmd); + efx->link_state.speed = ecmd.speed; + efx->link_state.fd = (ecmd.duplex == DUPLEX_FULL); + efx->link_state.fc = efx_mdio_get_pause(efx); + } + + return !efx_link_state_equal(&efx->link_state, &old_state); } -static void tenxpress_phy_fini(struct efx_nic *efx) +static void sfx7101_phy_fini(struct efx_nic *efx) { int reg; + /* Power down the LNPGA */ + reg = (1 << PMA_PMD_LNPGA_POWERDOWN_LBN); + efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG, reg); + + /* Waiting here ensures that the board fini, which can turn + * off the power to the PHY, won't get run until the LNPGA + * powerdown has been given long enough to complete. */ + schedule_timeout_uninterruptible(LNPGA_PDOWN_WAIT); /* 200 ms */ +} + +static void tenxpress_phy_remove(struct efx_nic *efx) +{ if (efx->phy_type == PHY_TYPE_SFT9001B) device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_short_reach); - if (efx->phy_type == PHY_TYPE_SFX7101) { - /* Power down the LNPGA */ - reg = (1 << PMA_PMD_LNPGA_POWERDOWN_LBN); - efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_XCONTROL_REG, reg); - - /* Waiting here ensures that the board fini, which can turn - * off the power to the PHY, won't get run until the LNPGA - * powerdown has been given long enough to complete. */ - schedule_timeout_uninterruptible(LNPGA_PDOWN_WAIT); /* 200 ms */ - } - kfree(efx->phy_data); efx->phy_data = NULL; } -/* Set the RX and TX LEDs and Link LED flashing. The other LEDs - * (which probably aren't wired anyway) are left in AUTO mode */ -void tenxpress_phy_blink(struct efx_nic *efx, bool blink) +/* Override the RX, TX and link LEDs */ +void tenxpress_set_id_led(struct efx_nic *efx, enum efx_led_mode mode) { int reg; - if (blink) - reg = (PMA_PMD_LED_FLASH << PMA_PMD_LED_TX_LBN) | - (PMA_PMD_LED_FLASH << PMA_PMD_LED_RX_LBN) | - (PMA_PMD_LED_FLASH << PMA_PMD_LED_LINK_LBN); - else - reg = PMA_PMD_LED_DEFAULT; + switch (mode) { + case EFX_LED_OFF: + reg = (PMA_PMD_LED_OFF << PMA_PMD_LED_TX_LBN) | + (PMA_PMD_LED_OFF << PMA_PMD_LED_RX_LBN) | + (PMA_PMD_LED_OFF << PMA_PMD_LED_LINK_LBN); + break; + case EFX_LED_ON: + reg = (PMA_PMD_LED_ON << PMA_PMD_LED_TX_LBN) | + (PMA_PMD_LED_ON << PMA_PMD_LED_RX_LBN) | + (PMA_PMD_LED_ON << PMA_PMD_LED_LINK_LBN); + break; + default: + if (efx->phy_type == PHY_TYPE_SFX7101) + reg = SFX7101_PMA_PMD_LED_DEFAULT; + else + reg = SFT9001_PMA_PMD_LED_DEFAULT; + break; + } efx_mdio_write(efx, MDIO_MMD_PMAPMD, PMA_PMD_LED_OVERR_REG, reg); } @@ -624,6 +658,13 @@ "bist" }; +static const char *sfx7101_test_name(struct efx_nic *efx, unsigned int index) +{ + if (index < ARRAY_SIZE(sfx7101_test_names)) + return sfx7101_test_names[index]; + return NULL; +} + static int sfx7101_run_tests(struct efx_nic *efx, int *results, unsigned flags) { @@ -635,6 +676,9 @@ /* BIST is automatically run after a special software reset */ rc = tenxpress_special_reset(efx); results[0] = rc ? -1 : 1; + + efx_mdio_an_reconfigure(efx); + return rc; } @@ -650,14 +694,17 @@ "cable.pairD.length", }; +static const char *sft9001_test_name(struct efx_nic *efx, unsigned int index) +{ + if (index < ARRAY_SIZE(sft9001_test_names)) + return sft9001_test_names[index]; + return NULL; +} + static int sft9001_run_tests(struct efx_nic *efx, int *results, unsigned flags) { - struct ethtool_cmd ecmd; int rc = 0, rc2, i, ctrl_reg, res_reg; - if (flags & ETH_TEST_FL_OFFLINE) - efx->phy_op->get_settings(efx, &ecmd); - /* Initialise cable diagnostic results to unknown failure */ for (i = 1; i < 9; ++i) results[i] = -1; @@ -709,9 +756,7 @@ if (!rc) rc = rc2; - rc2 = efx->phy_op->set_settings(efx, &ecmd); - if (!rc) - rc = rc2; + efx_mdio_an_reconfigure(efx); } return rc; @@ -758,7 +803,7 @@ * but doesn't advertise the correct speed. So override it */ if (efx->loopback_mode == LOOPBACK_GPHY) ecmd->speed = SPEED_1000; - else if (LOOPBACK_MASK(efx) & efx->phy_op->loopbacks) + else if (LOOPBACK_EXTERNAL(efx)) ecmd->speed = SPEED_10000; } @@ -788,35 +833,29 @@ } struct efx_phy_operations falcon_sfx7101_phy_ops = { - .macs = EFX_XMAC, + .probe = tenxpress_phy_probe, .init = tenxpress_phy_init, .reconfigure = tenxpress_phy_reconfigure, .poll = tenxpress_phy_poll, - .fini = tenxpress_phy_fini, - .clear_interrupt = efx_port_dummy_op_void, + .fini = sfx7101_phy_fini, + .remove = tenxpress_phy_remove, .get_settings = tenxpress_get_settings, .set_settings = tenxpress_set_settings, .set_npage_adv = sfx7101_set_npage_adv, - .num_tests = ARRAY_SIZE(sfx7101_test_names), - .test_names = sfx7101_test_names, + .test_name = sfx7101_test_name, .run_tests = sfx7101_run_tests, - .mmds = TENXPRESS_REQUIRED_DEVS, - .loopbacks = SFX7101_LOOPBACKS, }; struct efx_phy_operations falcon_sft9001_phy_ops = { - .macs = EFX_GMAC | EFX_XMAC, + .probe = tenxpress_phy_probe, .init = tenxpress_phy_init, .reconfigure = tenxpress_phy_reconfigure, .poll = tenxpress_phy_poll, - .fini = tenxpress_phy_fini, - .clear_interrupt = efx_port_dummy_op_void, + .fini = efx_port_dummy_op_void, + .remove = tenxpress_phy_remove, .get_settings = tenxpress_get_settings, .set_settings = tenxpress_set_settings, .set_npage_adv = sft9001_set_npage_adv, - .num_tests = ARRAY_SIZE(sft9001_test_names), - .test_names = sft9001_test_names, + .test_name = sft9001_test_name, .run_tests = sft9001_run_tests, - .mmds = TENXPRESS_REQUIRED_DEVS, - .loopbacks = SFT9001_LOOPBACKS, }; --- linux-2.6.32.orig/drivers/net/sfc/falcon_xmac.c +++ linux-2.6.32/drivers/net/sfc/falcon_xmac.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -11,13 +11,12 @@ #include #include "net_driver.h" #include "efx.h" -#include "falcon.h" -#include "falcon_hwdefs.h" -#include "falcon_io.h" +#include "nic.h" +#include "regs.h" +#include "io.h" #include "mac.h" #include "mdio_10g.h" #include "phy.h" -#include "boards.h" #include "workarounds.h" /************************************************************************** @@ -36,43 +35,47 @@ if (efx->phy_type == PHY_TYPE_NONE) return; - falcon_read(efx, &sdctl, XX_SD_CTL_REG); - EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVD, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_LODRVD, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVC, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_LODRVC, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVB, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_LODRVB, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_HIDRVA, XX_SD_CTL_DRV_DEFAULT); - EFX_SET_OWORD_FIELD(sdctl, XX_LODRVA, XX_SD_CTL_DRV_DEFAULT); - falcon_write(efx, &sdctl, XX_SD_CTL_REG); + efx_reado(efx, &sdctl, FR_AB_XX_SD_CTL); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVD, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVD, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVC, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVC, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVB, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVB, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_HIDRVA, FFE_AB_XX_SD_CTL_DRV_DEF); + EFX_SET_OWORD_FIELD(sdctl, FRF_AB_XX_LODRVA, FFE_AB_XX_SD_CTL_DRV_DEF); + efx_writeo(efx, &sdctl, FR_AB_XX_SD_CTL); EFX_POPULATE_OWORD_8(txdrv, - XX_DEQD, XX_TXDRV_DEQ_DEFAULT, - XX_DEQC, XX_TXDRV_DEQ_DEFAULT, - XX_DEQB, XX_TXDRV_DEQ_DEFAULT, - XX_DEQA, XX_TXDRV_DEQ_DEFAULT, - XX_DTXD, XX_TXDRV_DTX_DEFAULT, - XX_DTXC, XX_TXDRV_DTX_DEFAULT, - XX_DTXB, XX_TXDRV_DTX_DEFAULT, - XX_DTXA, XX_TXDRV_DTX_DEFAULT); - falcon_write(efx, &txdrv, XX_TXDRV_CTL_REG); + FRF_AB_XX_DEQD, FFE_AB_XX_TXDRV_DEQ_DEF, + FRF_AB_XX_DEQC, FFE_AB_XX_TXDRV_DEQ_DEF, + FRF_AB_XX_DEQB, FFE_AB_XX_TXDRV_DEQ_DEF, + FRF_AB_XX_DEQA, FFE_AB_XX_TXDRV_DEQ_DEF, + FRF_AB_XX_DTXD, FFE_AB_XX_TXDRV_DTX_DEF, + FRF_AB_XX_DTXC, FFE_AB_XX_TXDRV_DTX_DEF, + FRF_AB_XX_DTXB, FFE_AB_XX_TXDRV_DTX_DEF, + FRF_AB_XX_DTXA, FFE_AB_XX_TXDRV_DTX_DEF); + efx_writeo(efx, &txdrv, FR_AB_XX_TXDRV_CTL); } int falcon_reset_xaui(struct efx_nic *efx) { + struct falcon_nic_data *nic_data = efx->nic_data; efx_oword_t reg; int count; + /* Don't fetch MAC statistics over an XMAC reset */ + WARN_ON(nic_data->stats_disable_count == 0); + /* Start reset sequence */ - EFX_POPULATE_DWORD_1(reg, XX_RST_XX_EN, 1); - falcon_write(efx, ®, XX_PWR_RST_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_XX_RST_XX_EN, 1); + efx_writeo(efx, ®, FR_AB_XX_PWR_RST); /* Wait up to 10 ms for completion, then reinitialise */ for (count = 0; count < 1000; count++) { - falcon_read(efx, ®, XX_PWR_RST_REG); - if (EFX_OWORD_FIELD(reg, XX_RST_XX_EN) == 0 && - EFX_OWORD_FIELD(reg, XX_SD_RST_ACT) == 0) { + efx_reado(efx, ®, FR_AB_XX_PWR_RST); + if (EFX_OWORD_FIELD(reg, FRF_AB_XX_RST_XX_EN) == 0 && + EFX_OWORD_FIELD(reg, FRF_AB_XX_SD_RST_ACT) == 0) { falcon_setup_xaui(efx); return 0; } @@ -86,117 +89,118 @@ { efx_oword_t reg; - if ((falcon_rev(efx) != FALCON_REV_B0) || LOOPBACK_INTERNAL(efx)) + if ((efx_nic_rev(efx) != EFX_REV_FALCON_B0) || LOOPBACK_INTERNAL(efx)) return; /* We expect xgmii faults if the wireside link is up */ - if (!EFX_WORKAROUND_5147(efx) || !efx->link_up) + if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up) return; /* We can only use this interrupt to signal the negative edge of * xaui_align [we have to poll the positive edge]. */ - if (!efx->mac_up) + if (efx->xmac_poll_required) return; /* Flush the ISR */ if (enable) - falcon_read(efx, ®, XM_MGT_INT_REG_B0); + efx_reado(efx, ®, FR_AB_XM_MGT_INT_MSK); EFX_POPULATE_OWORD_2(reg, - XM_MSK_RMTFLT, !enable, - XM_MSK_LCLFLT, !enable); - falcon_write(efx, ®, XM_MGT_INT_MSK_REG_B0); + FRF_AB_XM_MSK_RMTFLT, !enable, + FRF_AB_XM_MSK_LCLFLT, !enable); + efx_writeo(efx, ®, FR_AB_XM_MGT_INT_MASK); } -/* Get status of XAUI link */ -bool falcon_xaui_link_ok(struct efx_nic *efx) +static bool falcon_xgxs_link_ok(struct efx_nic *efx) { efx_oword_t reg; bool align_done, link_ok = false; int sync_status; - if (LOOPBACK_INTERNAL(efx)) - return true; - /* Read link status */ - falcon_read(efx, ®, XX_CORE_STAT_REG); + efx_reado(efx, ®, FR_AB_XX_CORE_STAT); - align_done = EFX_OWORD_FIELD(reg, XX_ALIGN_DONE); - sync_status = EFX_OWORD_FIELD(reg, XX_SYNC_STAT); - if (align_done && (sync_status == XX_SYNC_STAT_DECODE_SYNCED)) + align_done = EFX_OWORD_FIELD(reg, FRF_AB_XX_ALIGN_DONE); + sync_status = EFX_OWORD_FIELD(reg, FRF_AB_XX_SYNC_STAT); + if (align_done && (sync_status == FFE_AB_XX_STAT_ALL_LANES)) link_ok = true; /* Clear link status ready for next read */ - EFX_SET_OWORD_FIELD(reg, XX_COMMA_DET, XX_COMMA_DET_RESET); - EFX_SET_OWORD_FIELD(reg, XX_CHARERR, XX_CHARERR_RESET); - EFX_SET_OWORD_FIELD(reg, XX_DISPERR, XX_DISPERR_RESET); - falcon_write(efx, ®, XX_CORE_STAT_REG); - - /* If the link is up, then check the phy side of the xaui link */ - if (efx->link_up && link_ok) - if (efx->phy_op->mmds & (1 << MDIO_MMD_PHYXS)) - link_ok = efx_mdio_phyxgxs_lane_sync(efx); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_COMMA_DET, FFE_AB_XX_STAT_ALL_LANES); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_CHAR_ERR, FFE_AB_XX_STAT_ALL_LANES); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_DISPERR, FFE_AB_XX_STAT_ALL_LANES); + efx_writeo(efx, ®, FR_AB_XX_CORE_STAT); return link_ok; } -static void falcon_reconfigure_xmac_core(struct efx_nic *efx) +static bool falcon_xmac_link_ok(struct efx_nic *efx) +{ + /* + * Check MAC's XGXS link status except when using XGMII loopback + * which bypasses the XGXS block. + * If possible, check PHY's XGXS link status except when using + * MAC loopback. + */ + return (efx->loopback_mode == LOOPBACK_XGMII || + falcon_xgxs_link_ok(efx)) && + (!(efx->mdio.mmds & (1 << MDIO_MMD_PHYXS)) || + LOOPBACK_INTERNAL(efx) || + efx_mdio_phyxgxs_lane_sync(efx)); +} + +void falcon_reconfigure_xmac_core(struct efx_nic *efx) { unsigned int max_frame_len; efx_oword_t reg; - bool rx_fc = !!(efx->link_fc & EFX_FC_RX); + bool rx_fc = !!(efx->link_state.fc & EFX_FC_RX); + bool tx_fc = !!(efx->link_state.fc & EFX_FC_TX); /* Configure MAC - cut-thru mode is hard wired on */ - EFX_POPULATE_DWORD_3(reg, - XM_RX_JUMBO_MODE, 1, - XM_TX_STAT_EN, 1, - XM_RX_STAT_EN, 1); - falcon_write(efx, ®, XM_GLB_CFG_REG); + EFX_POPULATE_OWORD_3(reg, + FRF_AB_XM_RX_JUMBO_MODE, 1, + FRF_AB_XM_TX_STAT_EN, 1, + FRF_AB_XM_RX_STAT_EN, 1); + efx_writeo(efx, ®, FR_AB_XM_GLB_CFG); /* Configure TX */ - EFX_POPULATE_DWORD_6(reg, - XM_TXEN, 1, - XM_TX_PRMBL, 1, - XM_AUTO_PAD, 1, - XM_TXCRC, 1, - XM_FCNTL, 1, - XM_IPG, 0x3); - falcon_write(efx, ®, XM_TX_CFG_REG); + EFX_POPULATE_OWORD_6(reg, + FRF_AB_XM_TXEN, 1, + FRF_AB_XM_TX_PRMBL, 1, + FRF_AB_XM_AUTO_PAD, 1, + FRF_AB_XM_TXCRC, 1, + FRF_AB_XM_FCNTL, tx_fc, + FRF_AB_XM_IPG, 0x3); + efx_writeo(efx, ®, FR_AB_XM_TX_CFG); /* Configure RX */ - EFX_POPULATE_DWORD_5(reg, - XM_RXEN, 1, - XM_AUTO_DEPAD, 0, - XM_ACPT_ALL_MCAST, 1, - XM_ACPT_ALL_UCAST, efx->promiscuous, - XM_PASS_CRC_ERR, 1); - falcon_write(efx, ®, XM_RX_CFG_REG); + EFX_POPULATE_OWORD_5(reg, + FRF_AB_XM_RXEN, 1, + FRF_AB_XM_AUTO_DEPAD, 0, + FRF_AB_XM_ACPT_ALL_MCAST, 1, + FRF_AB_XM_ACPT_ALL_UCAST, efx->promiscuous, + FRF_AB_XM_PASS_CRC_ERR, 1); + efx_writeo(efx, ®, FR_AB_XM_RX_CFG); /* Set frame length */ max_frame_len = EFX_MAX_FRAME_LEN(efx->net_dev->mtu); - EFX_POPULATE_DWORD_1(reg, XM_MAX_RX_FRM_SIZE, max_frame_len); - falcon_write(efx, ®, XM_RX_PARAM_REG); - EFX_POPULATE_DWORD_2(reg, - XM_MAX_TX_FRM_SIZE, max_frame_len, - XM_TX_JUMBO_MODE, 1); - falcon_write(efx, ®, XM_TX_PARAM_REG); - - EFX_POPULATE_DWORD_2(reg, - XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */ - XM_DIS_FCNTL, !rx_fc); - falcon_write(efx, ®, XM_FC_REG); + EFX_POPULATE_OWORD_1(reg, FRF_AB_XM_MAX_RX_FRM_SIZE, max_frame_len); + efx_writeo(efx, ®, FR_AB_XM_RX_PARAM); + EFX_POPULATE_OWORD_2(reg, + FRF_AB_XM_MAX_TX_FRM_SIZE, max_frame_len, + FRF_AB_XM_TX_JUMBO_MODE, 1); + efx_writeo(efx, ®, FR_AB_XM_TX_PARAM); + + EFX_POPULATE_OWORD_2(reg, + FRF_AB_XM_PAUSE_TIME, 0xfffe, /* MAX PAUSE TIME */ + FRF_AB_XM_DIS_FCNTL, !rx_fc); + efx_writeo(efx, ®, FR_AB_XM_FC); /* Set MAC address */ - EFX_POPULATE_DWORD_4(reg, - XM_ADR_0, efx->net_dev->dev_addr[0], - XM_ADR_1, efx->net_dev->dev_addr[1], - XM_ADR_2, efx->net_dev->dev_addr[2], - XM_ADR_3, efx->net_dev->dev_addr[3]); - falcon_write(efx, ®, XM_ADR_LO_REG); - EFX_POPULATE_DWORD_2(reg, - XM_ADR_4, efx->net_dev->dev_addr[4], - XM_ADR_5, efx->net_dev->dev_addr[5]); - falcon_write(efx, ®, XM_ADR_HI_REG); + memcpy(®, &efx->net_dev->dev_addr[0], 4); + efx_writeo(efx, ®, FR_AB_XM_ADR_LO); + memcpy(®, &efx->net_dev->dev_addr[4], 2); + efx_writeo(efx, ®, FR_AB_XM_ADR_HI); } static void falcon_reconfigure_xgxs_core(struct efx_nic *efx) @@ -212,12 +216,13 @@ bool old_xgmii_loopback, old_xgxs_loopback, old_xaui_loopback; bool reset_xgxs; - falcon_read(efx, ®, XX_CORE_STAT_REG); - old_xgxs_loopback = EFX_OWORD_FIELD(reg, XX_XGXS_LB_EN); - old_xgmii_loopback = EFX_OWORD_FIELD(reg, XX_XGMII_LB_EN); + efx_reado(efx, ®, FR_AB_XX_CORE_STAT); + old_xgxs_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_XGXS_LB_EN); + old_xgmii_loopback = + EFX_OWORD_FIELD(reg, FRF_AB_XX_XGMII_LB_EN); - falcon_read(efx, ®, XX_SD_CTL_REG); - old_xaui_loopback = EFX_OWORD_FIELD(reg, XX_LPBKA); + efx_reado(efx, ®, FR_AB_XX_SD_CTL); + old_xaui_loopback = EFX_OWORD_FIELD(reg, FRF_AB_XX_LPBKA); /* The PHY driver may have turned XAUI off */ reset_xgxs = ((xgxs_loopback != old_xgxs_loopback) || @@ -228,45 +233,55 @@ falcon_reset_xaui(efx); } - falcon_read(efx, ®, XX_CORE_STAT_REG); - EFX_SET_OWORD_FIELD(reg, XX_FORCE_SIG, + efx_reado(efx, ®, FR_AB_XX_CORE_STAT); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_FORCE_SIG, (xgxs_loopback || xaui_loopback) ? - XX_FORCE_SIG_DECODE_FORCED : 0); - EFX_SET_OWORD_FIELD(reg, XX_XGXS_LB_EN, xgxs_loopback); - EFX_SET_OWORD_FIELD(reg, XX_XGMII_LB_EN, xgmii_loopback); - falcon_write(efx, ®, XX_CORE_STAT_REG); + FFE_AB_XX_FORCE_SIG_ALL_LANES : 0); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_XGXS_LB_EN, xgxs_loopback); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_XGMII_LB_EN, xgmii_loopback); + efx_writeo(efx, ®, FR_AB_XX_CORE_STAT); - falcon_read(efx, ®, XX_SD_CTL_REG); - EFX_SET_OWORD_FIELD(reg, XX_LPBKD, xaui_loopback); - EFX_SET_OWORD_FIELD(reg, XX_LPBKC, xaui_loopback); - EFX_SET_OWORD_FIELD(reg, XX_LPBKB, xaui_loopback); - EFX_SET_OWORD_FIELD(reg, XX_LPBKA, xaui_loopback); - falcon_write(efx, ®, XX_SD_CTL_REG); + efx_reado(efx, ®, FR_AB_XX_SD_CTL); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKD, xaui_loopback); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKC, xaui_loopback); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKB, xaui_loopback); + EFX_SET_OWORD_FIELD(reg, FRF_AB_XX_LPBKA, xaui_loopback); + efx_writeo(efx, ®, FR_AB_XX_SD_CTL); } -/* Try and bring the Falcon side of the Falcon-Phy XAUI link fails - * to come back up. Bash it until it comes back up */ -static void falcon_check_xaui_link_up(struct efx_nic *efx, int tries) +/* Try to bring up the Falcon side of the Falcon-Phy XAUI link */ +static bool falcon_xmac_link_ok_retry(struct efx_nic *efx, int tries) { - efx->mac_up = falcon_xaui_link_ok(efx); + bool mac_up = falcon_xmac_link_ok(efx); - if ((efx->loopback_mode == LOOPBACK_NETWORK) || + if (LOOPBACK_MASK(efx) & LOOPBACKS_EXTERNAL(efx) & LOOPBACKS_WS || efx_phy_mode_disabled(efx->phy_mode)) /* XAUI link is expected to be down */ - return; + return mac_up; + + falcon_stop_nic_stats(efx); - while (!efx->mac_up && tries) { + while (!mac_up && tries) { EFX_LOG(efx, "bashing xaui\n"); falcon_reset_xaui(efx); udelay(200); - efx->mac_up = falcon_xaui_link_ok(efx); + mac_up = falcon_xmac_link_ok(efx); --tries; } + + falcon_start_nic_stats(efx); + + return mac_up; +} + +static bool falcon_xmac_check_fault(struct efx_nic *efx) +{ + return !falcon_xmac_link_ok_retry(efx, 5); } -static void falcon_reconfigure_xmac(struct efx_nic *efx) +static int falcon_reconfigure_xmac(struct efx_nic *efx) { falcon_mask_status_intr(efx, false); @@ -275,18 +290,15 @@ falcon_reconfigure_mac_wrapper(efx); - falcon_check_xaui_link_up(efx, 5); + efx->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 5); falcon_mask_status_intr(efx, true); + + return 0; } static void falcon_update_stats_xmac(struct efx_nic *efx) { struct efx_mac_stats *mac_stats = &efx->mac_stats; - int rc; - - rc = falcon_dma_stats(efx, XgDmaDone_offset); - if (rc) - return; /* Update MAC stats from DMAed values */ FALCON_STAT(efx, XgRxOctets, rx_bytes); @@ -344,35 +356,19 @@ mac_stats->rx_control * 64); } -static void falcon_xmac_irq(struct efx_nic *efx) -{ - /* The XGMII link has a transient fault, which indicates either: - * - there's a transient xgmii fault - * - falcon's end of the xaui link may need a kick - * - the wire-side link may have gone down, but the lasi/poll() - * hasn't noticed yet. - * - * We only want to even bother polling XAUI if we're confident it's - * not (1) or (3). In both cases, the only reliable way to spot this - * is to wait a bit. We do this here by forcing the mac link state - * to down, and waiting for the mac poll to come round and check - */ - efx->mac_up = false; -} - -static void falcon_poll_xmac(struct efx_nic *efx) +void falcon_poll_xmac(struct efx_nic *efx) { - if (!EFX_WORKAROUND_5147(efx) || !efx->link_up || efx->mac_up) + if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up || + !efx->xmac_poll_required) return; falcon_mask_status_intr(efx, false); - falcon_check_xaui_link_up(efx, 1); + efx->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 1); falcon_mask_status_intr(efx, true); } struct efx_mac_operations falcon_xmac_operations = { .reconfigure = falcon_reconfigure_xmac, .update_stats = falcon_update_stats_xmac, - .irq = falcon_xmac_irq, - .poll = falcon_poll_xmac, + .check_fault = falcon_xmac_check_fault, }; --- linux-2.6.32.orig/drivers/net/sfc/Makefile +++ linux-2.6.32/drivers/net/sfc/Makefile @@ -1,6 +1,7 @@ -sfc-y += efx.o falcon.o tx.o rx.o falcon_gmac.o \ - falcon_xmac.o selftest.o ethtool.o xfp_phy.o \ - mdio_10g.o tenxpress.o boards.o sfe4001.o +sfc-y += efx.o nic.o falcon.o siena.o tx.o rx.o \ + falcon_gmac.o falcon_xmac.o mcdi_mac.o \ + selftest.o ethtool.o qt202x_phy.o mdio_10g.o \ + tenxpress.o falcon_boards.o mcdi.o mcdi_phy.o sfc-$(CONFIG_SFC_MTD) += mtd.o obj-$(CONFIG_SFC) += sfc.o --- linux-2.6.32.orig/drivers/net/sfc/mac.h +++ linux-2.6.32/drivers/net/sfc/mac.h @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -15,5 +15,9 @@ extern struct efx_mac_operations falcon_gmac_operations; extern struct efx_mac_operations falcon_xmac_operations; +extern struct efx_mac_operations efx_mcdi_mac_operations; +extern void falcon_reconfigure_xmac_core(struct efx_nic *efx); +extern int efx_mcdi_mac_stats(struct efx_nic *efx, dma_addr_t dma_addr, + u32 dma_len, int enable, int clear); #endif --- linux-2.6.32.orig/drivers/net/sfc/efx.h +++ linux-2.6.32/drivers/net/sfc/efx.h @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -18,35 +18,64 @@ #define FALCON_A_P_DEVID 0x0703 #define FALCON_A_S_DEVID 0x6703 #define FALCON_B_P_DEVID 0x0710 +#define BETHPAGE_A_P_DEVID 0x0803 +#define SIENA_A_P_DEVID 0x0813 + +/* Solarstorm controllers use BAR 0 for I/O space and BAR 2(&3) for memory */ +#define EFX_MEM_BAR 2 /* TX */ -extern netdev_tx_t efx_xmit(struct efx_nic *efx, - struct efx_tx_queue *tx_queue, - struct sk_buff *skb); +extern int efx_probe_tx_queue(struct efx_tx_queue *tx_queue); +extern void efx_remove_tx_queue(struct efx_tx_queue *tx_queue); +extern void efx_init_tx_queue(struct efx_tx_queue *tx_queue); +extern void efx_fini_tx_queue(struct efx_tx_queue *tx_queue); +extern void efx_release_tx_buffers(struct efx_tx_queue *tx_queue); +extern netdev_tx_t +efx_hard_start_xmit(struct sk_buff *skb, struct net_device *net_dev); +extern netdev_tx_t +efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb); +extern void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index); extern void efx_stop_queue(struct efx_nic *efx); extern void efx_wake_queue(struct efx_nic *efx); +#define EFX_TXQ_SIZE 1024 +#define EFX_TXQ_MASK (EFX_TXQ_SIZE - 1) /* RX */ -extern void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index); +extern int efx_probe_rx_queue(struct efx_rx_queue *rx_queue); +extern void efx_remove_rx_queue(struct efx_rx_queue *rx_queue); +extern void efx_init_rx_queue(struct efx_rx_queue *rx_queue); +extern void efx_fini_rx_queue(struct efx_rx_queue *rx_queue); +extern void efx_rx_strategy(struct efx_channel *channel); +extern void efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue); +extern void efx_rx_work(struct work_struct *data); +extern void __efx_rx_packet(struct efx_channel *channel, + struct efx_rx_buffer *rx_buf, bool checksummed); extern void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index, unsigned int len, bool checksummed, bool discard); extern void efx_schedule_slow_fill(struct efx_rx_queue *rx_queue, int delay); +#define EFX_RXQ_SIZE 1024 +#define EFX_RXQ_MASK (EFX_RXQ_SIZE - 1) /* Channels */ extern void efx_process_channel_now(struct efx_channel *channel); -extern void efx_flush_queues(struct efx_nic *efx); +#define EFX_EVQ_SIZE 4096 +#define EFX_EVQ_MASK (EFX_EVQ_SIZE - 1) /* Ports */ -extern void efx_stats_disable(struct efx_nic *efx); -extern void efx_stats_enable(struct efx_nic *efx); -extern void efx_reconfigure_port(struct efx_nic *efx); -extern void __efx_reconfigure_port(struct efx_nic *efx); +extern int efx_reconfigure_port(struct efx_nic *efx); +extern int __efx_reconfigure_port(struct efx_nic *efx); + +/* Ethtool support */ +extern int efx_ethtool_get_settings(struct net_device *net_dev, + struct ethtool_cmd *ecmd); +extern int efx_ethtool_set_settings(struct net_device *net_dev, + struct ethtool_cmd *ecmd); +extern const struct ethtool_ops efx_ethtool_ops; /* Reset handling */ -extern void efx_reset_down(struct efx_nic *efx, enum reset_type method, - struct ethtool_cmd *ecmd); -extern int efx_reset_up(struct efx_nic *efx, enum reset_type method, - struct ethtool_cmd *ecmd, bool ok); +extern int efx_reset(struct efx_nic *efx, enum reset_type method); +extern void efx_reset_down(struct efx_nic *efx, enum reset_type method); +extern int efx_reset_up(struct efx_nic *efx, enum reset_type method, bool ok); /* Global */ extern void efx_schedule_reset(struct efx_nic *efx, enum reset_type type); @@ -60,7 +89,9 @@ /* Dummy PHY ops for PHY drivers */ extern int efx_port_dummy_op_int(struct efx_nic *efx); extern void efx_port_dummy_op_void(struct efx_nic *efx); -extern void efx_port_dummy_op_blink(struct efx_nic *efx, bool blink); +extern void +efx_port_dummy_op_set_id_led(struct efx_nic *efx, enum efx_led_mode mode); +extern bool efx_port_dummy_op_poll(struct efx_nic *efx); /* MTD */ #ifdef CONFIG_SFC_MTD @@ -84,4 +115,8 @@ napi_schedule(&channel->napi_str); } +extern void efx_link_status_changed(struct efx_nic *efx); +extern void efx_link_set_advertising(struct efx_nic *efx, u32); +extern void efx_link_set_wanted_fc(struct efx_nic *efx, enum efx_fc_type); + #endif /* EFX_EFX_H */ --- linux-2.6.32.orig/drivers/net/sfc/mcdi_phy.c +++ linux-2.6.32/drivers/net/sfc/mcdi_phy.c @@ -0,0 +1,574 @@ +/**************************************************************************** + * Driver for Solarflare Solarstorm network controllers and boards + * Copyright 2009 Solarflare Communications Inc. + * + * 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, incorporated herein by reference. + */ + +/* + * Driver for PHY related operations via MCDI. + */ + +#include "efx.h" +#include "phy.h" +#include "mcdi.h" +#include "mcdi_pcol.h" +#include "mdio_10g.h" + +struct efx_mcdi_phy_cfg { + u32 flags; + u32 type; + u32 supported_cap; + u32 channel; + u32 port; + u32 stats_mask; + u8 name[20]; + u32 media; + u32 mmd_mask; + u8 revision[20]; + u32 forced_cap; +}; + +static int +efx_mcdi_get_phy_cfg(struct efx_nic *efx, struct efx_mcdi_phy_cfg *cfg) +{ + u8 outbuf[MC_CMD_GET_PHY_CFG_OUT_LEN]; + size_t outlen; + int rc; + + BUILD_BUG_ON(MC_CMD_GET_PHY_CFG_IN_LEN != 0); + BUILD_BUG_ON(MC_CMD_GET_PHY_CFG_OUT_NAME_LEN != sizeof(cfg->name)); + + rc = efx_mcdi_rpc(efx, MC_CMD_GET_PHY_CFG, NULL, 0, + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + if (outlen < MC_CMD_GET_PHY_CFG_OUT_LEN) { + rc = -EMSGSIZE; + goto fail; + } + + cfg->flags = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_FLAGS); + cfg->type = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_TYPE); + cfg->supported_cap = + MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_SUPPORTED_CAP); + cfg->channel = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_CHANNEL); + cfg->port = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_PRT); + cfg->stats_mask = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_STATS_MASK); + memcpy(cfg->name, MCDI_PTR(outbuf, GET_PHY_CFG_OUT_NAME), + sizeof(cfg->name)); + cfg->media = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_MEDIA_TYPE); + cfg->mmd_mask = MCDI_DWORD(outbuf, GET_PHY_CFG_OUT_MMD_MASK); + memcpy(cfg->revision, MCDI_PTR(outbuf, GET_PHY_CFG_OUT_REVISION), + sizeof(cfg->revision)); + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +static int efx_mcdi_set_link(struct efx_nic *efx, u32 capabilities, + u32 flags, u32 loopback_mode, + u32 loopback_speed) +{ + u8 inbuf[MC_CMD_SET_LINK_IN_LEN]; + int rc; + + BUILD_BUG_ON(MC_CMD_SET_LINK_OUT_LEN != 0); + + MCDI_SET_DWORD(inbuf, SET_LINK_IN_CAP, capabilities); + MCDI_SET_DWORD(inbuf, SET_LINK_IN_FLAGS, flags); + MCDI_SET_DWORD(inbuf, SET_LINK_IN_LOOPBACK_MODE, loopback_mode); + MCDI_SET_DWORD(inbuf, SET_LINK_IN_LOOPBACK_SPEED, loopback_speed); + + rc = efx_mcdi_rpc(efx, MC_CMD_SET_LINK, inbuf, sizeof(inbuf), + NULL, 0, NULL); + if (rc) + goto fail; + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +static int efx_mcdi_loopback_modes(struct efx_nic *efx, u64 *loopback_modes) +{ + u8 outbuf[MC_CMD_GET_LOOPBACK_MODES_OUT_LEN]; + size_t outlen; + int rc; + + rc = efx_mcdi_rpc(efx, MC_CMD_GET_LOOPBACK_MODES, NULL, 0, + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + if (outlen < MC_CMD_GET_LOOPBACK_MODES_OUT_LEN) { + rc = -EMSGSIZE; + goto fail; + } + + *loopback_modes = MCDI_QWORD(outbuf, GET_LOOPBACK_MODES_SUGGESTED); + + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_mdio_read(struct efx_nic *efx, unsigned int bus, + unsigned int prtad, unsigned int devad, u16 addr, + u16 *value_out, u32 *status_out) +{ + u8 inbuf[MC_CMD_MDIO_READ_IN_LEN]; + u8 outbuf[MC_CMD_MDIO_READ_OUT_LEN]; + size_t outlen; + int rc; + + MCDI_SET_DWORD(inbuf, MDIO_READ_IN_BUS, bus); + MCDI_SET_DWORD(inbuf, MDIO_READ_IN_PRTAD, prtad); + MCDI_SET_DWORD(inbuf, MDIO_READ_IN_DEVAD, devad); + MCDI_SET_DWORD(inbuf, MDIO_READ_IN_ADDR, addr); + + rc = efx_mcdi_rpc(efx, MC_CMD_MDIO_READ, inbuf, sizeof(inbuf), + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + *value_out = (u16)MCDI_DWORD(outbuf, MDIO_READ_OUT_VALUE); + *status_out = MCDI_DWORD(outbuf, MDIO_READ_OUT_STATUS); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +int efx_mcdi_mdio_write(struct efx_nic *efx, unsigned int bus, + unsigned int prtad, unsigned int devad, u16 addr, + u16 value, u32 *status_out) +{ + u8 inbuf[MC_CMD_MDIO_WRITE_IN_LEN]; + u8 outbuf[MC_CMD_MDIO_WRITE_OUT_LEN]; + size_t outlen; + int rc; + + MCDI_SET_DWORD(inbuf, MDIO_WRITE_IN_BUS, bus); + MCDI_SET_DWORD(inbuf, MDIO_WRITE_IN_PRTAD, prtad); + MCDI_SET_DWORD(inbuf, MDIO_WRITE_IN_DEVAD, devad); + MCDI_SET_DWORD(inbuf, MDIO_WRITE_IN_ADDR, addr); + MCDI_SET_DWORD(inbuf, MDIO_WRITE_IN_VALUE, value); + + rc = efx_mcdi_rpc(efx, MC_CMD_MDIO_WRITE, inbuf, sizeof(inbuf), + outbuf, sizeof(outbuf), &outlen); + if (rc) + goto fail; + + *status_out = MCDI_DWORD(outbuf, MDIO_WRITE_OUT_STATUS); + return 0; + +fail: + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return rc; +} + +static u32 mcdi_to_ethtool_cap(u32 media, u32 cap) +{ + u32 result = 0; + + switch (media) { + case MC_CMD_MEDIA_KX4: + result |= SUPPORTED_Backplane; + if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN)) + result |= SUPPORTED_1000baseKX_Full; + if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN)) + result |= SUPPORTED_10000baseKX4_Full; + break; + + case MC_CMD_MEDIA_XFP: + case MC_CMD_MEDIA_SFP_PLUS: + result |= SUPPORTED_FIBRE; + break; + + case MC_CMD_MEDIA_BASE_T: + result |= SUPPORTED_TP; + if (cap & (1 << MC_CMD_PHY_CAP_10HDX_LBN)) + result |= SUPPORTED_10baseT_Half; + if (cap & (1 << MC_CMD_PHY_CAP_10FDX_LBN)) + result |= SUPPORTED_10baseT_Full; + if (cap & (1 << MC_CMD_PHY_CAP_100HDX_LBN)) + result |= SUPPORTED_100baseT_Half; + if (cap & (1 << MC_CMD_PHY_CAP_100FDX_LBN)) + result |= SUPPORTED_100baseT_Full; + if (cap & (1 << MC_CMD_PHY_CAP_1000HDX_LBN)) + result |= SUPPORTED_1000baseT_Half; + if (cap & (1 << MC_CMD_PHY_CAP_1000FDX_LBN)) + result |= SUPPORTED_1000baseT_Full; + if (cap & (1 << MC_CMD_PHY_CAP_10000FDX_LBN)) + result |= SUPPORTED_10000baseT_Full; + break; + } + + if (cap & (1 << MC_CMD_PHY_CAP_PAUSE_LBN)) + result |= SUPPORTED_Pause; + if (cap & (1 << MC_CMD_PHY_CAP_ASYM_LBN)) + result |= SUPPORTED_Asym_Pause; + if (cap & (1 << MC_CMD_PHY_CAP_AN_LBN)) + result |= SUPPORTED_Autoneg; + + return result; +} + +static u32 ethtool_to_mcdi_cap(u32 cap) +{ + u32 result = 0; + + if (cap & SUPPORTED_10baseT_Half) + result |= (1 << MC_CMD_PHY_CAP_10HDX_LBN); + if (cap & SUPPORTED_10baseT_Full) + result |= (1 << MC_CMD_PHY_CAP_10FDX_LBN); + if (cap & SUPPORTED_100baseT_Half) + result |= (1 << MC_CMD_PHY_CAP_100HDX_LBN); + if (cap & SUPPORTED_100baseT_Full) + result |= (1 << MC_CMD_PHY_CAP_100FDX_LBN); + if (cap & SUPPORTED_1000baseT_Half) + result |= (1 << MC_CMD_PHY_CAP_1000HDX_LBN); + if (cap & (SUPPORTED_1000baseT_Full | SUPPORTED_1000baseKX_Full)) + result |= (1 << MC_CMD_PHY_CAP_1000FDX_LBN); + if (cap & (SUPPORTED_10000baseT_Full | SUPPORTED_10000baseKX4_Full)) + result |= (1 << MC_CMD_PHY_CAP_10000FDX_LBN); + if (cap & SUPPORTED_Pause) + result |= (1 << MC_CMD_PHY_CAP_PAUSE_LBN); + if (cap & SUPPORTED_Asym_Pause) + result |= (1 << MC_CMD_PHY_CAP_ASYM_LBN); + if (cap & SUPPORTED_Autoneg) + result |= (1 << MC_CMD_PHY_CAP_AN_LBN); + + return result; +} + +static u32 efx_get_mcdi_phy_flags(struct efx_nic *efx) +{ + struct efx_mcdi_phy_cfg *phy_cfg = efx->phy_data; + enum efx_phy_mode mode, supported; + u32 flags; + + /* TODO: Advertise the capabilities supported by this PHY */ + supported = 0; + if (phy_cfg->flags & (1 << MC_CMD_GET_PHY_CFG_TXDIS_LBN)) + supported |= PHY_MODE_TX_DISABLED; + if (phy_cfg->flags & (1 << MC_CMD_GET_PHY_CFG_LOWPOWER_LBN)) + supported |= PHY_MODE_LOW_POWER; + if (phy_cfg->flags & (1 << MC_CMD_GET_PHY_CFG_POWEROFF_LBN)) + supported |= PHY_MODE_OFF; + + mode = efx->phy_mode & supported; + + flags = 0; + if (mode & PHY_MODE_TX_DISABLED) + flags |= (1 << MC_CMD_SET_LINK_TXDIS_LBN); + if (mode & PHY_MODE_LOW_POWER) + flags |= (1 << MC_CMD_SET_LINK_LOWPOWER_LBN); + if (mode & PHY_MODE_OFF) + flags |= (1 << MC_CMD_SET_LINK_POWEROFF_LBN); + + return flags; +} + +static u32 mcdi_to_ethtool_media(u32 media) +{ + switch (media) { + case MC_CMD_MEDIA_XAUI: + case MC_CMD_MEDIA_CX4: + case MC_CMD_MEDIA_KX4: + return PORT_OTHER; + + case MC_CMD_MEDIA_XFP: + case MC_CMD_MEDIA_SFP_PLUS: + return PORT_FIBRE; + + case MC_CMD_MEDIA_BASE_T: + return PORT_TP; + + default: + return PORT_OTHER; + } +} + +static int efx_mcdi_phy_probe(struct efx_nic *efx) +{ + struct efx_mcdi_phy_cfg *phy_data; + u8 outbuf[MC_CMD_GET_LINK_OUT_LEN]; + u32 caps; + int rc; + + /* Initialise and populate phy_data */ + phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL); + if (phy_data == NULL) + return -ENOMEM; + + rc = efx_mcdi_get_phy_cfg(efx, phy_data); + if (rc != 0) + goto fail; + + /* Read initial link advertisement */ + BUILD_BUG_ON(MC_CMD_GET_LINK_IN_LEN != 0); + rc = efx_mcdi_rpc(efx, MC_CMD_GET_LINK, NULL, 0, + outbuf, sizeof(outbuf), NULL); + if (rc) + goto fail; + + /* Fill out nic state */ + efx->phy_data = phy_data; + efx->phy_type = phy_data->type; + + efx->mdio_bus = phy_data->channel; + efx->mdio.prtad = phy_data->port; + efx->mdio.mmds = phy_data->mmd_mask & ~(1 << MC_CMD_MMD_CLAUSE22); + efx->mdio.mode_support = 0; + if (phy_data->mmd_mask & (1 << MC_CMD_MMD_CLAUSE22)) + efx->mdio.mode_support |= MDIO_SUPPORTS_C22; + if (phy_data->mmd_mask & ~(1 << MC_CMD_MMD_CLAUSE22)) + efx->mdio.mode_support |= MDIO_SUPPORTS_C45 | MDIO_EMULATE_C22; + + caps = MCDI_DWORD(outbuf, GET_LINK_OUT_CAP); + if (caps & (1 << MC_CMD_PHY_CAP_AN_LBN)) + efx->link_advertising = + mcdi_to_ethtool_cap(phy_data->media, caps); + else + phy_data->forced_cap = caps; + + /* Assert that we can map efx -> mcdi loopback modes */ + BUILD_BUG_ON(LOOPBACK_NONE != MC_CMD_LOOPBACK_NONE); + BUILD_BUG_ON(LOOPBACK_DATA != MC_CMD_LOOPBACK_DATA); + BUILD_BUG_ON(LOOPBACK_GMAC != MC_CMD_LOOPBACK_GMAC); + BUILD_BUG_ON(LOOPBACK_XGMII != MC_CMD_LOOPBACK_XGMII); + BUILD_BUG_ON(LOOPBACK_XGXS != MC_CMD_LOOPBACK_XGXS); + BUILD_BUG_ON(LOOPBACK_XAUI != MC_CMD_LOOPBACK_XAUI); + BUILD_BUG_ON(LOOPBACK_GMII != MC_CMD_LOOPBACK_GMII); + BUILD_BUG_ON(LOOPBACK_SGMII != MC_CMD_LOOPBACK_SGMII); + BUILD_BUG_ON(LOOPBACK_XGBR != MC_CMD_LOOPBACK_XGBR); + BUILD_BUG_ON(LOOPBACK_XFI != MC_CMD_LOOPBACK_XFI); + BUILD_BUG_ON(LOOPBACK_XAUI_FAR != MC_CMD_LOOPBACK_XAUI_FAR); + BUILD_BUG_ON(LOOPBACK_GMII_FAR != MC_CMD_LOOPBACK_GMII_FAR); + BUILD_BUG_ON(LOOPBACK_SGMII_FAR != MC_CMD_LOOPBACK_SGMII_FAR); + BUILD_BUG_ON(LOOPBACK_XFI_FAR != MC_CMD_LOOPBACK_XFI_FAR); + BUILD_BUG_ON(LOOPBACK_GPHY != MC_CMD_LOOPBACK_GPHY); + BUILD_BUG_ON(LOOPBACK_PHYXS != MC_CMD_LOOPBACK_PHYXS); + BUILD_BUG_ON(LOOPBACK_PCS != MC_CMD_LOOPBACK_PCS); + BUILD_BUG_ON(LOOPBACK_PMAPMD != MC_CMD_LOOPBACK_PMAPMD); + BUILD_BUG_ON(LOOPBACK_XPORT != MC_CMD_LOOPBACK_XPORT); + BUILD_BUG_ON(LOOPBACK_XGMII_WS != MC_CMD_LOOPBACK_XGMII_WS); + BUILD_BUG_ON(LOOPBACK_XAUI_WS != MC_CMD_LOOPBACK_XAUI_WS); + BUILD_BUG_ON(LOOPBACK_XAUI_WS_FAR != MC_CMD_LOOPBACK_XAUI_WS_FAR); + BUILD_BUG_ON(LOOPBACK_XAUI_WS_NEAR != MC_CMD_LOOPBACK_XAUI_WS_NEAR); + BUILD_BUG_ON(LOOPBACK_GMII_WS != MC_CMD_LOOPBACK_GMII_WS); + BUILD_BUG_ON(LOOPBACK_XFI_WS != MC_CMD_LOOPBACK_XFI_WS); + BUILD_BUG_ON(LOOPBACK_XFI_WS_FAR != MC_CMD_LOOPBACK_XFI_WS_FAR); + BUILD_BUG_ON(LOOPBACK_PHYXS_WS != MC_CMD_LOOPBACK_PHYXS_WS); + + rc = efx_mcdi_loopback_modes(efx, &efx->loopback_modes); + if (rc != 0) + goto fail; + /* The MC indicates that LOOPBACK_NONE is a valid loopback mode, + * but by convention we don't */ + efx->loopback_modes &= ~(1 << LOOPBACK_NONE); + + return 0; + +fail: + kfree(phy_data); + return rc; +} + +int efx_mcdi_phy_reconfigure(struct efx_nic *efx) +{ + struct efx_mcdi_phy_cfg *phy_cfg = efx->phy_data; + u32 caps = (efx->link_advertising ? + ethtool_to_mcdi_cap(efx->link_advertising) : + phy_cfg->forced_cap); + + return efx_mcdi_set_link(efx, caps, efx_get_mcdi_phy_flags(efx), + efx->loopback_mode, 0); +} + +void efx_mcdi_phy_decode_link(struct efx_nic *efx, + struct efx_link_state *link_state, + u32 speed, u32 flags, u32 fcntl) +{ + switch (fcntl) { + case MC_CMD_FCNTL_AUTO: + WARN_ON(1); /* This is not a link mode */ + link_state->fc = EFX_FC_AUTO | EFX_FC_TX | EFX_FC_RX; + break; + case MC_CMD_FCNTL_BIDIR: + link_state->fc = EFX_FC_TX | EFX_FC_RX; + break; + case MC_CMD_FCNTL_RESPOND: + link_state->fc = EFX_FC_RX; + break; + default: + WARN_ON(1); + case MC_CMD_FCNTL_OFF: + link_state->fc = 0; + break; + } + + link_state->up = !!(flags & (1 << MC_CMD_GET_LINK_LINK_UP_LBN)); + link_state->fd = !!(flags & (1 << MC_CMD_GET_LINK_FULL_DUPLEX_LBN)); + link_state->speed = speed; +} + +/* Verify that the forced flow control settings (!EFX_FC_AUTO) are + * supported by the link partner. Warn the user if this isn't the case + */ +void efx_mcdi_phy_check_fcntl(struct efx_nic *efx, u32 lpa) +{ + struct efx_mcdi_phy_cfg *phy_cfg = efx->phy_data; + u32 rmtadv; + + /* The link partner capabilities are only relevent if the + * link supports flow control autonegotiation */ + if (~phy_cfg->supported_cap & (1 << MC_CMD_PHY_CAP_ASYM_LBN)) + return; + + /* If flow control autoneg is supported and enabled, then fine */ + if (efx->wanted_fc & EFX_FC_AUTO) + return; + + rmtadv = 0; + if (lpa & (1 << MC_CMD_PHY_CAP_PAUSE_LBN)) + rmtadv |= ADVERTISED_Pause; + if (lpa & (1 << MC_CMD_PHY_CAP_ASYM_LBN)) + rmtadv |= ADVERTISED_Asym_Pause; + + if ((efx->wanted_fc & EFX_FC_TX) && rmtadv == ADVERTISED_Asym_Pause) + EFX_ERR(efx, "warning: link partner doesn't support " + "pause frames"); +} + +static bool efx_mcdi_phy_poll(struct efx_nic *efx) +{ + struct efx_link_state old_state = efx->link_state; + u8 outbuf[MC_CMD_GET_LINK_OUT_LEN]; + int rc; + + WARN_ON(!mutex_is_locked(&efx->mac_lock)); + + BUILD_BUG_ON(MC_CMD_GET_LINK_IN_LEN != 0); + + rc = efx_mcdi_rpc(efx, MC_CMD_GET_LINK, NULL, 0, + outbuf, sizeof(outbuf), NULL); + if (rc) { + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + efx->link_state.up = false; + } else { + efx_mcdi_phy_decode_link( + efx, &efx->link_state, + MCDI_DWORD(outbuf, GET_LINK_OUT_LINK_SPEED), + MCDI_DWORD(outbuf, GET_LINK_OUT_FLAGS), + MCDI_DWORD(outbuf, GET_LINK_OUT_FCNTL)); + } + + return !efx_link_state_equal(&efx->link_state, &old_state); +} + +static void efx_mcdi_phy_remove(struct efx_nic *efx) +{ + struct efx_mcdi_phy_data *phy_data = efx->phy_data; + + efx->phy_data = NULL; + kfree(phy_data); +} + +static void efx_mcdi_phy_get_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) +{ + struct efx_mcdi_phy_cfg *phy_cfg = efx->phy_data; + u8 outbuf[MC_CMD_GET_LINK_OUT_LEN]; + int rc; + + ecmd->supported = + mcdi_to_ethtool_cap(phy_cfg->media, phy_cfg->supported_cap); + ecmd->advertising = efx->link_advertising; + ecmd->speed = efx->link_state.speed; + ecmd->duplex = efx->link_state.fd; + ecmd->port = mcdi_to_ethtool_media(phy_cfg->media); + ecmd->phy_address = phy_cfg->port; + ecmd->transceiver = XCVR_INTERNAL; + ecmd->autoneg = !!(efx->link_advertising & ADVERTISED_Autoneg); + ecmd->mdio_support = (efx->mdio.mode_support & + (MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22)); + + BUILD_BUG_ON(MC_CMD_GET_LINK_IN_LEN != 0); + rc = efx_mcdi_rpc(efx, MC_CMD_GET_LINK, NULL, 0, + outbuf, sizeof(outbuf), NULL); + if (rc) { + EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc); + return; + } + ecmd->lp_advertising = + mcdi_to_ethtool_cap(phy_cfg->media, + MCDI_DWORD(outbuf, GET_LINK_OUT_LP_CAP)); +} + +static int efx_mcdi_phy_set_settings(struct efx_nic *efx, struct ethtool_cmd *ecmd) +{ + struct efx_mcdi_phy_cfg *phy_cfg = efx->phy_data; + u32 caps; + int rc; + + if (ecmd->autoneg) { + caps = (ethtool_to_mcdi_cap(ecmd->advertising) | + 1 << MC_CMD_PHY_CAP_AN_LBN); + } else if (ecmd->duplex) { + switch (ecmd->speed) { + case 10: caps = 1 << MC_CMD_PHY_CAP_10FDX_LBN; break; + case 100: caps = 1 << MC_CMD_PHY_CAP_100FDX_LBN; break; + case 1000: caps = 1 << MC_CMD_PHY_CAP_1000FDX_LBN; break; + case 10000: caps = 1 << MC_CMD_PHY_CAP_10000FDX_LBN; break; + default: return -EINVAL; + } + } else { + switch (ecmd->speed) { + case 10: caps = 1 << MC_CMD_PHY_CAP_10HDX_LBN; break; + case 100: caps = 1 << MC_CMD_PHY_CAP_100HDX_LBN; break; + case 1000: caps = 1 << MC_CMD_PHY_CAP_1000HDX_LBN; break; + default: return -EINVAL; + } + } + + rc = efx_mcdi_set_link(efx, caps, efx_get_mcdi_phy_flags(efx), + efx->loopback_mode, 0); + if (rc) + return rc; + + if (ecmd->autoneg) { + efx_link_set_advertising( + efx, ecmd->advertising | ADVERTISED_Autoneg); + phy_cfg->forced_cap = 0; + } else { + efx_link_set_advertising(efx, 0); + phy_cfg->forced_cap = caps; + } + return 0; +} + +struct efx_phy_operations efx_mcdi_phy_ops = { + .probe = efx_mcdi_phy_probe, + .init = efx_port_dummy_op_int, + .reconfigure = efx_mcdi_phy_reconfigure, + .poll = efx_mcdi_phy_poll, + .fini = efx_port_dummy_op_void, + .remove = efx_mcdi_phy_remove, + .get_settings = efx_mcdi_phy_get_settings, + .set_settings = efx_mcdi_phy_set_settings, + .run_tests = NULL, + .test_name = NULL, +}; --- linux-2.6.32.orig/drivers/net/sfc/selftest.c +++ linux-2.6.32/drivers/net/sfc/selftest.c @@ -1,7 +1,7 @@ /**************************************************************************** * Driver for Solarflare Solarstorm network controllers and boards * Copyright 2005-2006 Fen Systems Ltd. - * Copyright 2006-2008 Solarflare Communications Inc. + * Copyright 2006-2009 Solarflare Communications Inc. * * 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 @@ -20,14 +20,12 @@ #include #include #include "net_driver.h" -#include "ethtool.h" #include "efx.h" -#include "falcon.h" +#include "nic.h" #include "selftest.h" -#include "boards.h" #include "workarounds.h" #include "spi.h" -#include "falcon_io.h" +#include "io.h" #include "mdio_10g.h" /* @@ -49,7 +47,7 @@ 0x00, 0x0f, 0x53, 0x1b, 0x1b, 0x1b, }; -static const char *payload_msg = +static const char payload_msg[] = "Hello world! This is an Efx loopback test in progress!"; /** @@ -57,6 +55,7 @@ * @flush: Drop all packets in efx_loopback_rx_packet * @packet_count: Number of packets being used in this test * @skbs: An array of skbs transmitted + * @offload_csum: Checksums are being offloaded * @rx_good: RX good packet count * @rx_bad: RX bad packet count * @payload: Payload used in tests @@ -65,10 +64,7 @@ bool flush; int packet_count; struct sk_buff **skbs; - - /* Checksums are being offloaded */ bool offload_csum; - atomic_t rx_good; atomic_t rx_bad; struct efx_loopback_payload payload; @@ -83,10 +79,14 @@ static int efx_test_mdio(struct efx_nic *efx, struct efx_self_tests *tests) { int rc = 0; - int devad = __ffs(efx->mdio.mmds); + int devad; u16 physid1, physid2; - if (efx->phy_type == PHY_TYPE_NONE) + if (efx->mdio.mode_support & MDIO_SUPPORTS_C45) + devad = __ffs(efx->mdio.mmds); + else if (efx->mdio.mode_support & MDIO_SUPPORTS_C22) + devad = MDIO_DEVAD_NONE; + else return 0; mutex_lock(&efx->mac_lock); @@ -104,7 +104,7 @@ } if (EFX_IS10G(efx)) { - rc = efx_mdio_check_mmds(efx, efx->phy_op->mmds, 0); + rc = efx_mdio_check_mmds(efx, efx->mdio.mmds, 0); if (rc) goto out; } @@ -117,23 +117,26 @@ static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests) { - int rc; + int rc = 0; + + if (efx->type->test_nvram) { + rc = efx->type->test_nvram(efx); + tests->nvram = rc ? -1 : 1; + } - rc = falcon_read_nvram(efx, NULL); - tests->nvram = rc ? -1 : 1; return rc; } static int efx_test_chip(struct efx_nic *efx, struct efx_self_tests *tests) { - int rc; + int rc = 0; - /* Not supported on A-series silicon */ - if (falcon_rev(efx) < FALCON_REV_B0) - return 0; + /* Test register access */ + if (efx->type->test_registers) { + rc = efx->type->test_registers(efx); + tests->registers = rc ? -1 : 1; + } - rc = falcon_test_registers(efx); - tests->registers = rc ? -1 : 1; return rc; } @@ -165,7 +168,7 @@ goto success; } - falcon_generate_interrupt(efx); + efx_nic_generate_interrupt(efx); /* Wait for arrival of test interrupt. */ EFX_LOG(efx, "waiting for test interrupt\n"); @@ -177,8 +180,8 @@ return -ETIMEDOUT; success: - EFX_LOG(efx, "test interrupt (mode %d) seen on CPU%d\n", - efx->interrupt_mode, efx->last_irq_cpu); + EFX_LOG(efx, "%s test interrupt seen on CPU%d\n", INT_MODE(efx), + efx->last_irq_cpu); tests->interrupt = 1; return 0; } @@ -203,7 +206,7 @@ channel->eventq_magic = 0; smp_wmb(); - falcon_generate_test_event(channel, magic); + efx_nic_generate_test_event(channel, magic); /* Wait for arrival of interrupt */ count = 0; @@ -254,9 +257,6 @@ if (!efx->phy_op->run_tests) return 0; - EFX_BUG_ON_PARANOID(efx->phy_op->num_tests == 0 || - efx->phy_op->num_tests > EFX_MAX_PHY_TESTS); - mutex_lock(&efx->mac_lock); rc = efx->phy_op->run_tests(efx, tests->phy, flags); mutex_unlock(&efx->mac_lock); @@ -426,7 +426,7 @@ if (efx_dev_registered(efx)) netif_tx_lock_bh(efx->net_dev); - rc = efx_xmit(efx, tx_queue, skb); + rc = efx_enqueue_skb(tx_queue, skb); if (efx_dev_registered(efx)) netif_tx_unlock_bh(efx->net_dev); @@ -439,7 +439,6 @@ kfree_skb(skb); return -EPIPE; } - efx->net_dev->trans_start = jiffies; } return 0; @@ -527,7 +526,7 @@ for (i = 0; i < 3; i++) { /* Determine how many packets to send */ - state->packet_count = (efx->type->txd_ring_mask + 1) / 3; + state->packet_count = EFX_TXQ_SIZE / 3; state->packet_count = min(1 << (i << 2), state->packet_count); state->skbs = kzalloc(sizeof(state->skbs[0]) * state->packet_count, GFP_KERNEL); @@ -568,14 +567,49 @@ return 0; } +/* Wait for link up. On Falcon, we would prefer to rely on efx_monitor, but + * any contention on the mac lock (via e.g. efx_mac_mcast_work) causes it + * to delay and retry. Therefore, it's safer to just poll directly. Wait + * for link up and any faults to dissipate. */ +static int efx_wait_for_link(struct efx_nic *efx) +{ + struct efx_link_state *link_state = &efx->link_state; + int count; + bool link_up; + + for (count = 0; count < 40; count++) { + schedule_timeout_uninterruptible(HZ / 10); + + if (efx->type->monitor != NULL) { + mutex_lock(&efx->mac_lock); + efx->type->monitor(efx); + mutex_unlock(&efx->mac_lock); + } else { + struct efx_channel *channel = &efx->channel[0]; + if (channel->work_pending) + efx_process_channel_now(channel); + } + + mutex_lock(&efx->mac_lock); + link_up = link_state->up; + if (link_up) + link_up = !efx->mac_op->check_fault(efx); + mutex_unlock(&efx->mac_lock); + + if (link_up) + return 0; + } + + return -ETIMEDOUT; +} + static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests, unsigned int loopback_modes) { enum efx_loopback_mode mode; struct efx_loopback_state *state; struct efx_tx_queue *tx_queue; - bool link_up; - int count, rc = 0; + int rc = 0; /* Set the port loopback_selftest member. From this point on * all received packets will be dropped. Mark the state as @@ -594,46 +628,23 @@ /* Move the port into the specified loopback mode. */ state->flush = true; + mutex_lock(&efx->mac_lock); efx->loopback_mode = mode; - efx_reconfigure_port(efx); - - /* Wait for the PHY to signal the link is up. Interrupts - * are enabled for PHY's using LASI, otherwise we poll() - * quickly */ - count = 0; - do { - struct efx_channel *channel = &efx->channel[0]; + rc = __efx_reconfigure_port(efx); + mutex_unlock(&efx->mac_lock); + if (rc) { + EFX_ERR(efx, "unable to move into %s loopback\n", + LOOPBACK_MODE(efx)); + goto out; + } - efx->phy_op->poll(efx); - schedule_timeout_uninterruptible(HZ / 10); - if (channel->work_pending) - efx_process_channel_now(channel); - /* Wait for PHY events to be processed */ - flush_workqueue(efx->workqueue); - rmb(); - - /* We need both the phy and xaui links to be ok. - * rather than relying on the falcon_xmac irq/poll - * regime, just poll xaui directly */ - link_up = efx->link_up; - if (link_up && EFX_IS10G(efx) && - !falcon_xaui_link_ok(efx)) - link_up = false; - - } while ((++count < 20) && !link_up); - - /* The link should now be up. If it isn't, there is no point - * in attempting a loopback test */ - if (!link_up) { + rc = efx_wait_for_link(efx); + if (rc) { EFX_ERR(efx, "loopback %s never came up\n", LOOPBACK_MODE(efx)); - rc = -EIO; goto out; } - EFX_LOG(efx, "link came up in %s loopback in %d iterations\n", - LOOPBACK_MODE(efx), count); - /* Test every TX queue */ efx_for_each_tx_queue(tx_queue, efx) { state->offload_csum = (tx_queue->queue == @@ -667,7 +678,6 @@ enum efx_loopback_mode loopback_mode = efx->loopback_mode; int phy_mode = efx->phy_mode; enum reset_type reset_method = RESET_TYPE_INVISIBLE; - struct ethtool_cmd ecmd; struct efx_channel *channel; int rc_test = 0, rc_reset = 0, rc; @@ -720,21 +730,21 @@ mutex_unlock(&efx->mac_lock); /* free up all consumers of SRAM (including all the queues) */ - efx_reset_down(efx, reset_method, &ecmd); + efx_reset_down(efx, reset_method); rc = efx_test_chip(efx, tests); if (rc && !rc_test) rc_test = rc; /* reset the chip to recover from the register test */ - rc_reset = falcon_reset_hw(efx, reset_method); + rc_reset = efx->type->reset(efx, reset_method); /* Ensure that the phy is powered and out of loopback * for the bist and loopback tests */ efx->phy_mode &= ~PHY_MODE_LOW_POWER; efx->loopback_mode = LOOPBACK_NONE; - rc = efx_reset_up(efx, reset_method, &ecmd, rc_reset == 0); + rc = efx_reset_up(efx, reset_method, rc_reset == 0); if (rc && !rc_reset) rc_reset = rc; @@ -753,10 +763,12 @@ rc_test = rc; /* restore the PHY to the previous state */ - efx->loopback_mode = loopback_mode; + mutex_lock(&efx->mac_lock); efx->phy_mode = phy_mode; efx->port_inhibited = false; - efx_ethtool_set_settings(efx->net_dev, &ecmd); + efx->loopback_mode = loopback_mode; + __efx_reconfigure_port(efx); + mutex_unlock(&efx->mac_lock); return rc_test; } --- linux-2.6.32.orig/drivers/net/e1000/e1000.h +++ linux-2.6.32/drivers/net/e1000/e1000.h @@ -326,6 +326,8 @@ /* for ioport free */ int bars; int need_ioport; + + bool discarding; }; enum e1000_state_t { --- linux-2.6.32.orig/drivers/net/e1000/e1000_main.c +++ linux-2.6.32/drivers/net/e1000/e1000_main.c @@ -1698,18 +1698,6 @@ rctl &= ~E1000_RCTL_SZ_4096; rctl |= E1000_RCTL_BSEX; switch (adapter->rx_buffer_len) { - case E1000_RXBUFFER_256: - rctl |= E1000_RCTL_SZ_256; - rctl &= ~E1000_RCTL_BSEX; - break; - case E1000_RXBUFFER_512: - rctl |= E1000_RCTL_SZ_512; - rctl &= ~E1000_RCTL_BSEX; - break; - case E1000_RXBUFFER_1024: - rctl |= E1000_RCTL_SZ_1024; - rctl &= ~E1000_RCTL_BSEX; - break; case E1000_RXBUFFER_2048: default: rctl |= E1000_RCTL_SZ_2048; @@ -3154,13 +3142,7 @@ * however with the new *_jumbo_rx* routines, jumbo receives will use * fragmented skbs */ - if (max_frame <= E1000_RXBUFFER_256) - adapter->rx_buffer_len = E1000_RXBUFFER_256; - else if (max_frame <= E1000_RXBUFFER_512) - adapter->rx_buffer_len = E1000_RXBUFFER_512; - else if (max_frame <= E1000_RXBUFFER_1024) - adapter->rx_buffer_len = E1000_RXBUFFER_1024; - else if (max_frame <= E1000_RXBUFFER_2048) + if (max_frame <= E1000_RXBUFFER_2048) adapter->rx_buffer_len = E1000_RXBUFFER_2048; else #if (PAGE_SIZE >= E1000_RXBUFFER_16384) @@ -3827,13 +3809,22 @@ length = le16_to_cpu(rx_desc->length); /* !EOP means multiple descriptors were used to store a single - * packet, also make sure the frame isn't just CRC only */ - if (unlikely(!(status & E1000_RXD_STAT_EOP) || (length <= 4))) { + * packet, if thats the case we need to toss it. In fact, we + * to toss every packet with the EOP bit clear and the next + * frame that _does_ have the EOP bit set, as it is by + * definition only a frame fragment + */ + if (unlikely(!(status & E1000_RXD_STAT_EOP))) + adapter->discarding = true; + + if (adapter->discarding) { /* All receives must fit into a single buffer */ E1000_DBG("%s: Receive packet consumed multiple" " buffers\n", netdev->name); /* recycle */ buffer_info->skb = skb; + if (status & E1000_RXD_STAT_EOP) + adapter->discarding = false; goto next_desc; } --- linux-2.6.32.orig/drivers/net/ixgbe/ixgbe_type.h +++ linux-2.6.32/drivers/net/ixgbe/ixgbe_type.h @@ -50,6 +50,7 @@ #define IXGBE_DEV_ID_82598EB_XF_LR 0x10F4 #define IXGBE_DEV_ID_82599_KX4 0x10F7 #define IXGBE_DEV_ID_82599_KX4_MEZZ 0x1514 +#define IXGBE_DEV_ID_82599_KR 0x1517 #define IXGBE_DEV_ID_82599_CX4 0x10F9 #define IXGBE_DEV_ID_82599_SFP 0x10FB #define IXGBE_DEV_ID_82599_XAUI_LOM 0x10FC --- linux-2.6.32.orig/drivers/net/ixgbe/ixgbe_main.c +++ linux-2.6.32/drivers/net/ixgbe/ixgbe_main.c @@ -96,6 +96,8 @@ board_82599 }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_XAUI_LOM), board_82599 }, + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_KR), + board_82599 }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_SFP), board_82599 }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_KX4_MEZZ), --- linux-2.6.32.orig/drivers/net/ixgbe/ixgbe_82599.c +++ linux-2.6.32/drivers/net/ixgbe/ixgbe_82599.c @@ -332,6 +332,7 @@ case IXGBE_DEV_ID_82599_KX4: case IXGBE_DEV_ID_82599_KX4_MEZZ: case IXGBE_DEV_ID_82599_COMBO_BACKPLANE: + case IXGBE_DEV_ID_82599_KR: case IXGBE_DEV_ID_82599_XAUI_LOM: /* Default device ID is mezzanine card KX/KX4 */ media_type = ixgbe_media_type_backplane; --- linux-2.6.32.orig/drivers/lguest/segments.c +++ linux-2.6.32/drivers/lguest/segments.c @@ -179,8 +179,10 @@ * We assume the Guest has the same number of GDT entries as the * Host, otherwise we'd have to dynamically allocate the Guest GDT. */ - if (num >= ARRAY_SIZE(cpu->arch.gdt)) + if (num >= ARRAY_SIZE(cpu->arch.gdt)) { kill_guest(cpu, "too many gdt entries %i", num); + return; + } /* Set it up, then fix it. */ cpu->arch.gdt[num].a = lo; --- linux-2.6.32.orig/drivers/platform/x86/acerhdf.c +++ linux-2.6.32/drivers/platform/x86/acerhdf.c @@ -52,7 +52,7 @@ */ #undef START_IN_KERNEL_MODE -#define DRV_VER "0.5.18" +#define DRV_VER "0.5.20" /* * According to the Atom N270 datasheet, @@ -112,12 +112,14 @@ MODULE_PARM_DESC(force_product, "Force BIOS product and omit BIOS check"); /* - * cmd_off: to switch the fan completely off / to check if the fan is off + * cmd_off: to switch the fan completely off + * chk_off: to check if the fan is off * cmd_auto: to set the BIOS in control of the fan. The BIOS regulates then * the fan speed depending on the temperature */ struct fancmd { u8 cmd_off; + u8 chk_off; u8 cmd_auto; }; @@ -134,32 +136,41 @@ /* Register addresses and values for different BIOS versions */ static const struct bios_settings_t bios_tbl[] = { /* AOA110 */ - {"Acer", "AOA110", "v0.3109", 0x55, 0x58, {0x1f, 0x00} }, - {"Acer", "AOA110", "v0.3114", 0x55, 0x58, {0x1f, 0x00} }, - {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0x00} }, - {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0x00} }, - {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0x00} }, - {"Acer", "AOA110", "v0.3307", 0x55, 0x58, {0xaf, 0x00} }, - {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x00} }, - {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x00} }, - {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x00} }, + {"Acer", "AOA110", "v0.3109", 0x55, 0x58, {0x1f, 0x1f, 0x00} }, + {"Acer", "AOA110", "v0.3114", 0x55, 0x58, {0x1f, 0x1f, 0x00} }, + {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0xaf, 0x00} }, + {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0xaf, 0x00} }, + {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0xaf, 0x00} }, + {"Acer", "AOA110", "v0.3307", 0x55, 0x58, {0xaf, 0xaf, 0x00} }, + {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x21, 0x00} }, + {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x21, 0x00} }, + {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x21, 0x00} }, /* AOA150 */ - {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3301", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3307", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x00} }, - {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x00} }, + {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3301", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3307", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x20, 0x00} }, + /* Acer 1410 */ + {"Acer", "Aspire 1410", "v0.3120", 0x55, 0x58, {0x9e, 0x9e, 0x00} }, /* special BIOS / other */ - {"Gateway", "AOA110", "v0.3103", 0x55, 0x58, {0x21, 0x00} }, - {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x00} }, - {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00} }, - {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x00} }, - {"Packard Bell", "AOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00} }, + {"Gateway", "AOA110", "v0.3103", 0x55, 0x58, {0x21, 0x21, 0x00} }, + {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Gateway ", "LT31 ", "v1.3103 ", 0x55, 0x58, + {0x10, 0x0f, 0x00} }, + {"Gateway ", "LT31 ", "v1.3201 ", 0x55, 0x58, + {0x10, 0x0f, 0x00} }, + {"Gateway ", "LT31 ", "v1.3302 ", 0x55, 0x58, + {0x10, 0x0f, 0x00} }, + {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x21, 0x00} }, + {"Packard Bell", "DOA150", "v0.3105", 0x55, 0x58, {0x20, 0x20, 0x00} }, + {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x21, 0x00} }, + {"Packard Bell", "AOA150", "v0.3105", 0x55, 0x58, {0x20, 0x20, 0x00} }, /* pewpew-terminator */ - {"", "", "", 0, 0, {0, 0} } + {"", "", "", 0, 0, {0, 0, 0} } }; static const struct bios_settings_t *bios_cfg __read_mostly; @@ -183,7 +194,7 @@ if (ec_read(bios_cfg->fanreg, &fan)) return -EINVAL; - if (fan != bios_cfg->cmd.cmd_off) + if (fan != bios_cfg->cmd.chk_off) *state = ACERHDF_FAN_AUTO; else *state = ACERHDF_FAN_OFF; @@ -629,9 +640,10 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Peter Feuerer"); MODULE_DESCRIPTION("Aspire One temperature and fan driver"); -MODULE_ALIAS("dmi:*:*Acer*:*:"); -MODULE_ALIAS("dmi:*:*Gateway*:*:"); -MODULE_ALIAS("dmi:*:*Packard Bell*:*:"); +MODULE_ALIAS("dmi:*:*Acer*:pnAOA*:"); +MODULE_ALIAS("dmi:*:*Gateway*:pnAOA*:"); +MODULE_ALIAS("dmi:*:*Packard Bell*:pnAOA*:"); +MODULE_ALIAS("dmi:*:*Packard Bell*:pnDOA*:"); module_init(acerhdf_init); module_exit(acerhdf_exit); --- linux-2.6.32.orig/drivers/platform/x86/compal-laptop.c +++ linux-2.6.32/drivers/platform/x86/compal-laptop.c @@ -26,17 +26,8 @@ /* * comapl-laptop.c - Compal laptop support. * - * This driver exports a few files in /sys/devices/platform/compal-laptop/: - * - * wlan - wlan subsystem state: contains 0 or 1 (rw) - * - * bluetooth - Bluetooth subsystem state: contains 0 or 1 (rw) - * - * raw - raw value taken from embedded controller register (ro) - * - * In addition to these platform device attributes the driver - * registers itself in the Linux backlight control subsystem and is - * available to userspace under /sys/class/backlight/compal-laptop/. + * The driver registers itself with the rfkill subsystem and + * the Linux backlight control subsystem. * * This driver might work on other laptops produced by Compal. If you * want to try it you can pass force=1 as argument to the module which @@ -52,6 +43,7 @@ #include #include #include +#include #define COMPAL_DRIVER_VERSION "0.2.6" @@ -64,6 +56,10 @@ #define WLAN_MASK 0x01 #define BT_MASK 0x02 +static struct rfkill *wifi_rfkill; +static struct rfkill *bt_rfkill; +static struct platform_device *compal_device; + static int force; module_param(force, bool, 0); MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); @@ -89,65 +85,75 @@ return (int) result; } -static int set_wlan_state(int state) +static int compal_rfkill_set(void *data, bool blocked) { + unsigned long radio = (unsigned long) data; u8 result, value; ec_read(COMPAL_EC_COMMAND_WIRELESS, &result); - if ((result & KILLSWITCH_MASK) == 0) - return -EINVAL; - else { - if (state) - value = (u8) (result | WLAN_MASK); - else - value = (u8) (result & ~WLAN_MASK); - ec_write(COMPAL_EC_COMMAND_WIRELESS, value); - } + if (!blocked) + value = (u8) (result | radio); + else + value = (u8) (result & ~radio); + ec_write(COMPAL_EC_COMMAND_WIRELESS, value); return 0; } -static int set_bluetooth_state(int state) +static void compal_rfkill_poll(struct rfkill *rfkill, void *data) { - u8 result, value; + u8 result; + bool hw_blocked; ec_read(COMPAL_EC_COMMAND_WIRELESS, &result); - if ((result & KILLSWITCH_MASK) == 0) - return -EINVAL; - else { - if (state) - value = (u8) (result | BT_MASK); - else - value = (u8) (result & ~BT_MASK); - ec_write(COMPAL_EC_COMMAND_WIRELESS, value); - } - - return 0; + hw_blocked = !(result & KILLSWITCH_MASK); + rfkill_set_hw_state(rfkill, hw_blocked); } -static int get_wireless_state(int *wlan, int *bluetooth) +static const struct rfkill_ops compal_rfkill_ops = { + .poll = compal_rfkill_poll, + .set_block = compal_rfkill_set, +}; + +static int setup_rfkill(void) { - u8 result; + int ret; - ec_read(COMPAL_EC_COMMAND_WIRELESS, &result); + wifi_rfkill = rfkill_alloc("compal-wifi", &compal_device->dev, + RFKILL_TYPE_WLAN, &compal_rfkill_ops, + (void *) WLAN_MASK); + if (!wifi_rfkill) + return -ENOMEM; - if (wlan) { - if ((result & KILLSWITCH_MASK) == 0) - *wlan = 0; - else - *wlan = result & WLAN_MASK; - } + ret = rfkill_register(wifi_rfkill); + if (ret) + goto err_wifi; - if (bluetooth) { - if ((result & KILLSWITCH_MASK) == 0) - *bluetooth = 0; - else - *bluetooth = (result & BT_MASK) >> 1; + bt_rfkill = rfkill_alloc("compal-bluetooth", &compal_device->dev, + RFKILL_TYPE_BLUETOOTH, &compal_rfkill_ops, + (void *) BT_MASK); + if (!bt_rfkill) { + ret = -ENOMEM; + goto err_allocate_bt; } + ret = rfkill_register(bt_rfkill); + if (ret) + goto err_register_bt; return 0; + +err_register_bt: + rfkill_destroy(bt_rfkill); + +err_allocate_bt: + rfkill_unregister(wifi_rfkill); + +err_wifi: + rfkill_destroy(wifi_rfkill); + + return ret; } /* Backlight device stuff */ @@ -170,86 +176,6 @@ static struct backlight_device *compalbl_device; -/* Platform device */ - -static ssize_t show_wlan(struct device *dev, - struct device_attribute *attr, char *buf) -{ - int ret, enabled; - - ret = get_wireless_state(&enabled, NULL); - if (ret < 0) - return ret; - - return sprintf(buf, "%i\n", enabled); -} - -static ssize_t show_raw(struct device *dev, - struct device_attribute *attr, char *buf) -{ - u8 result; - - ec_read(COMPAL_EC_COMMAND_WIRELESS, &result); - - return sprintf(buf, "%i\n", result); -} - -static ssize_t show_bluetooth(struct device *dev, - struct device_attribute *attr, char *buf) -{ - int ret, enabled; - - ret = get_wireless_state(NULL, &enabled); - if (ret < 0) - return ret; - - return sprintf(buf, "%i\n", enabled); -} - -static ssize_t store_wlan_state(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - int state, ret; - - if (sscanf(buf, "%i", &state) != 1 || (state < 0 || state > 1)) - return -EINVAL; - - ret = set_wlan_state(state); - if (ret < 0) - return ret; - - return count; -} - -static ssize_t store_bluetooth_state(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - int state, ret; - - if (sscanf(buf, "%i", &state) != 1 || (state < 0 || state > 1)) - return -EINVAL; - - ret = set_bluetooth_state(state); - if (ret < 0) - return ret; - - return count; -} - -static DEVICE_ATTR(bluetooth, 0644, show_bluetooth, store_bluetooth_state); -static DEVICE_ATTR(wlan, 0644, show_wlan, store_wlan_state); -static DEVICE_ATTR(raw, 0444, show_raw, NULL); - -static struct attribute *compal_attributes[] = { - &dev_attr_bluetooth.attr, - &dev_attr_wlan.attr, - &dev_attr_raw.attr, - NULL -}; - -static struct attribute_group compal_attribute_group = { - .attrs = compal_attributes -}; static struct platform_driver compal_driver = { .driver = { @@ -258,8 +184,6 @@ } }; -static struct platform_device *compal_device; - /* Initialization */ static int dmi_check_cb(const struct dmi_system_id *id) @@ -311,6 +235,47 @@ }, .callback = dmi_check_cb }, + { + .ident = "Dell Mini 9", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 910"), + }, + .callback = dmi_check_cb + }, + { + .ident = "Dell Mini 10", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1010"), + }, + .callback = dmi_check_cb + }, + { + .ident = "Dell Mini 10v", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1011"), + }, + .callback = dmi_check_cb + }, + { + .ident = "Dell Inspiron 11z", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1110"), + }, + .callback = dmi_check_cb + }, + { + .ident = "Dell Mini 12", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1210"), + }, + .callback = dmi_check_cb + }, + { } }; @@ -349,23 +314,21 @@ ret = platform_device_add(compal_device); if (ret) - goto fail_platform_device1; + goto fail_platform_device; - ret = sysfs_create_group(&compal_device->dev.kobj, - &compal_attribute_group); + ret = setup_rfkill(); if (ret) - goto fail_platform_device2; + goto fail_rfkill; printk(KERN_INFO "compal-laptop: driver "COMPAL_DRIVER_VERSION " successfully loaded.\n"); return 0; -fail_platform_device2: - +fail_rfkill: platform_device_del(compal_device); -fail_platform_device1: +fail_platform_device: platform_device_put(compal_device); @@ -383,10 +346,13 @@ static void __exit compal_cleanup(void) { - sysfs_remove_group(&compal_device->dev.kobj, &compal_attribute_group); platform_device_unregister(compal_device); platform_driver_unregister(&compal_driver); backlight_device_unregister(compalbl_device); + rfkill_unregister(wifi_rfkill); + rfkill_destroy(wifi_rfkill); + rfkill_unregister(bt_rfkill); + rfkill_destroy(bt_rfkill); printk(KERN_INFO "compal-laptop: driver unloaded.\n"); } @@ -404,3 +370,8 @@ MODULE_ALIAS("dmi:*:rnIFL91:rvrIFT00:*"); MODULE_ALIAS("dmi:*:rnJFL92:rvrIFT00:*"); MODULE_ALIAS("dmi:*:rnIFT00:rvrIFT00:*"); +MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron910:*"); +MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1010:*"); +MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1011:*"); +MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1110:*"); +MODULE_ALIAS("dmi:*:svnDellInc.:pnInspiron1210:*"); --- linux-2.6.32.orig/drivers/platform/x86/wmi.c +++ linux-2.6.32/drivers/platform/x86/wmi.c @@ -510,8 +510,8 @@ /** * wmi_get_event_data - Get WMI data associated with an event * - * @event - Event to find - * &out - Buffer to hold event data + * @event: Event to find + * @out: Buffer to hold event data. out->pointer should be freed with kfree() * * Returns extra data associated with an event in WMI. */ --- linux-2.6.32.orig/drivers/platform/x86/toshiba_acpi.c +++ linux-2.6.32/drivers/platform/x86/toshiba_acpi.c @@ -28,13 +28,28 @@ * engineering the Windows drivers * Yasushi Nagato - changes for linux kernel 2.4 -> 2.5 * Rob Miller - TV out and hotkeys help + * Daniel Silverstone - Punting of hotkeys via acpi using a thread * + * PLEASE NOTE + * + * This is an experimental version of toshiba_acpi which includes emulation + * of the original toshiba driver's /proc/toshiba and /dev/toshiba, + * allowing Toshiba userspace utilities to work. The relevant code was + * based on toshiba.c (copyright 1996-2001 Jonathan A. Buzzard) and + * incorporated into this driver with help from Gintautas Miliauskas, + * Charles Schwieters, and Christoph Burger-Scheidlin. + * + * Caveats: + * * hotkey status in /proc/toshiba is not implemented + * * to make accesses to /dev/toshiba load this driver instead of + * the original driver, you will have to modify your module + * auto-loading configuration * * TODO * */ -#define TOSHIBA_ACPI_VERSION "0.19" +#define TOSHIBA_ACPI_VERSION "0.19-dev-acpikeys" #define PROC_INTERFACE_VERSION 1 #include @@ -42,9 +57,15 @@ #include #include #include +#include +#include +#include +#include #include #include #include +#include +#include #include @@ -356,6 +377,11 @@ static int force_fan; static int last_key_event; static int key_event_valid; +static int hotkeys_over_acpi = 1; +static int hotkeys_check_per_sec = 2; + +module_param(hotkeys_over_acpi, uint, 0400); +module_param(hotkeys_check_per_sec, uint, 0400); typedef struct _ProcItem { const char *name; @@ -583,27 +609,34 @@ u32 hci_result; u32 value; - if (!key_event_valid) { - hci_read1(HCI_SYSTEM_EVENT, &value, &hci_result); - if (hci_result == HCI_SUCCESS) { - key_event_valid = 1; - last_key_event = value; - } else if (hci_result == HCI_EMPTY) { - /* better luck next time */ - } else if (hci_result == HCI_NOT_SUPPORTED) { - /* This is a workaround for an unresolved issue on - * some machines where system events sporadically - * become disabled. */ - hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result); - printk(MY_NOTICE "Re-enabled hotkeys\n"); - } else { - printk(MY_ERR "Error reading hotkey status\n"); - goto end; + if (!hotkeys_over_acpi) { + if (!key_event_valid) { + hci_read1(HCI_SYSTEM_EVENT, &value, &hci_result); + if (hci_result == HCI_SUCCESS) { + key_event_valid = 1; + last_key_event = value; + } else if (hci_result == HCI_EMPTY) { + /* better luck next time */ + } else if (hci_result == HCI_NOT_SUPPORTED) { + /* This is a workaround for an + * unresolved issue on some machines + * where system events sporadically + * become disabled. */ + hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result); + printk(MY_NOTICE "Re-enabled hotkeys\n"); + } else { + printk(MY_ERR "Error reading hotkey status\n"); + goto end; + } } + } else { + key_event_valid = 0; + last_key_event = 0; } p += sprintf(p, "hotkey_ready: %d\n", key_event_valid); p += sprintf(p, "hotkey: 0x%04x\n", last_key_event); + p += sprintf(p, "hotkeys_via_acpi: %d\n", hotkeys_over_acpi); end: return p; @@ -630,6 +663,191 @@ return p; } +/* /dev/toshiba and /proc/toshiba handlers {{{ + * + * ISSUE: lots of magic numbers and mysterious code + */ + +#define TOSH_MINOR_DEV 181 +#define OLD_PROC_TOSHIBA "toshiba" + +static int +tosh_acpi_bridge(SMMRegisters* regs) +{ + acpi_status status; + + /* assert(sizeof(SMMRegisters) == sizeof(u32)*HCI_WORDS); */ + status = hci_raw((u32*)regs, (u32*)regs); + if (status == AE_OK && (regs->eax & 0xff00) == HCI_SUCCESS) + return 0; + + return -EINVAL; +} + +static int +tosh_ioctl(struct inode* ip, struct file* fp, unsigned int cmd, + unsigned long arg) +{ + SMMRegisters regs; + unsigned short ax,bx; + int err; + + if ((!arg) || (cmd != TOSH_SMM)) + return -EINVAL; + + if (copy_from_user(®s, (SMMRegisters*)arg, sizeof(SMMRegisters))) + return -EFAULT; + + ax = regs.eax & 0xff00; + bx = regs.ebx & 0xffff; + + /* block HCI calls to read/write memory & PCI devices */ + if (((ax==HCI_SET) || (ax==HCI_GET)) && (bx>0x0069)) + return -EINVAL; + + err = tosh_acpi_bridge(®s); + + if (copy_to_user((SMMRegisters*)arg, ®s, sizeof(SMMRegisters))) + return -EFAULT; + + return err; +} + +static int +tosh_get_machine_id(void __iomem *bios) +{ + int id; + unsigned short bx,cx; + unsigned long address; + + id = (0x100*(int) readb(bios+0xfffe))+((int) readb(bios+0xfffa)); + + /* do we have a SCTTable machine identication number on our hands */ + if (id==0xfc2f) { + bx = 0xe6f5; /* cheat */ + /* now twiddle with our pointer a bit */ + address = 0x00000000 + bx; + cx = readw(bios + address); + address = 0x00000009 + bx + cx; + cx = readw(bios + address); + address = 0x0000000a + cx; + cx = readw(bios + address); + /* now construct our machine identification number */ + id = ((cx & 0xff)<<8)+((cx & 0xff00)>>8); + } + + return id; +} + +static int tosh_id; +static int tosh_bios; +static int tosh_date; +static int tosh_sci; + +static struct file_operations tosh_fops = { + .owner = THIS_MODULE, + .ioctl = tosh_ioctl +}; + +static struct miscdevice tosh_device = { + TOSH_MINOR_DEV, + "toshiba", + &tosh_fops +}; + +static void +setup_tosh_info(void __iomem *bios) +{ + int major, minor; + int day, month, year; + + tosh_id = tosh_get_machine_id(bios); + + /* get the BIOS version */ + major = readb(bios + 0xe009)-'0'; + minor = ((readb(bios + 0xe00b)-'0')*10)+(readb(bios + 0xe00c)-'0'); + tosh_bios = (major*0x100)+minor; + + /* get the BIOS date */ + day = ((readb(bios + 0xfff5)-'0')*10)+(readb(bios + 0xfff6)-'0'); + month = ((readb(bios + 0xfff8)-'0')*10)+(readb(bios + 0xfff9)-'0'); + year = ((readb(bios + 0xfffb)-'0')*10)+(readb(bios + 0xfffc)-'0'); + tosh_date = (((year-90) & 0x1f)<<10) | ((month & 0xf)<<6) + | ((day & 0x1f)<<1); +} + +/* /proc/toshiba read handler */ +static int +tosh_proc_show(struct seq_file *m, void *v) +{ + /* TODO: tosh_fn_status() */ + int key = 0; + + /* Format: + * 0) Linux driver version (this will change if format changes) + * 1) Machine ID + * 2) SCI version + * 3) BIOS version (major, minor) + * 4) BIOS date (in SCI date format) + * 5) Fn Key status + */ + + seq_printf(m, "1.1 0x%04x %d.%d %d.%d 0x%04x 0x%02x\n", + tosh_id, + (tosh_sci & 0xff00)>>8, + tosh_sci & 0xff, + (tosh_bios & 0xff00)>>8, + tosh_bios & 0xff, + tosh_date, + key); + + return 0; +} + +static int tosh_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, tosh_proc_show, NULL); +} + +static const struct file_operations tosh_proc_fops = { + .owner = THIS_MODULE, + .open = tosh_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int __init +old_driver_emulation_init(void) +{ + int status; + void __iomem *bios = ioremap(0xf0000, 0x10000); + if (!bios) + return -ENOMEM; + + if ((status = misc_register(&tosh_device))) { + printk(MY_ERR "failed to register misc device %d (\"%s\")\n", + tosh_device.minor, tosh_device.name); + return status; + } + + setup_tosh_info(bios); + proc_create(OLD_PROC_TOSHIBA, 0, NULL, &tosh_proc_fops); + + iounmap(bios); + + return 0; +} + +static void __exit +old_driver_emulation_exit(void) +{ + remove_proc_entry(OLD_PROC_TOSHIBA, NULL); + misc_deregister(&tosh_device); +} + +/* }}} end of /dev/toshiba and /proc/toshiba handlers */ + /* proc and module init */ @@ -676,6 +894,133 @@ .update_status = set_lcd_status, }; +static struct semaphore thread_sem; +static int thread_should_die; + +static struct acpi_device *threaded_device = 0; + +static void thread_deliver_button_event(u32 value) +{ + if (!threaded_device) return; + if( value == 0x0100 ) { + /* Ignore FN on its own */ + } else if( value & 0x80 ) { + acpi_bus_generate_proc_event( threaded_device, 1, value & ~0x80 ); + } else { + acpi_bus_generate_proc_event( threaded_device, 0, value ); + } +} + +static int toshiba_acpi_thread(void *data) +{ + int dropped = 0; + u32 hci_result, value; + + daemonize("ktoshkeyd"); + set_user_nice(current, 4); + thread_should_die = 0; + + up(&thread_sem); + + do { + /* In case we get stuck; we can rmmod the module here */ + if (thread_should_die) + break; + + hci_read1(HCI_SYSTEM_EVENT, &value, &hci_result); + if (hci_result == HCI_SUCCESS) { + dropped++; + } else if (hci_result == HCI_EMPTY) { + /* better luck next time */ + } else if (hci_result == HCI_NOT_SUPPORTED) { + /* This is a workaround for an unresolved issue on + * some machines where system events sporadically + * become disabled. */ + hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result); + printk(MY_NOTICE "Re-enabled hotkeys\n"); + } + } while (hci_result != HCI_EMPTY); + + printk(MY_INFO "Dropped %d keys from the queue on startup\n", dropped); + + for (;;) { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ / hotkeys_check_per_sec); + + if (thread_should_die) + break; + + if (try_to_freeze()) + continue; + + do { + hci_read1(HCI_SYSTEM_EVENT, &value, &hci_result); + if (hci_result == HCI_SUCCESS) { + thread_deliver_button_event(value); + } else if (hci_result == HCI_EMPTY) { + /* better luck next time */ + } else if (hci_result == HCI_NOT_SUPPORTED) { + /* This is a workaround for an + * unresolved issue on some machines + * where system events sporadically + * become disabled. */ + hci_write1(HCI_SYSTEM_EVENT, 1, &hci_result); + printk(MY_NOTICE "Re-enabled hotkeys\n"); + } + } while (hci_result == HCI_SUCCESS); + } + set_user_nice(current, -20); /* Become nasty so we are cleaned up + * before the module exits making us oops */ + up(&thread_sem); + return 0; +} + +static int acpi_toshkeys_add (struct acpi_device *device) +{ + threaded_device = device; + strcpy(acpi_device_name(device), "Toshiba laptop hotkeys"); + strcpy(acpi_device_class(device), "hkey"); + return 0; +} + +static int acpi_toshkeys_remove (struct acpi_device *device, int type) +{ + if (threaded_device == device) + threaded_device = 0; + return 0; +} + +static const struct acpi_device_id acpi_toshkeys_ids[] = { + { "TOS6200", 0 }, + { "TOS6207", 0 }, + { "TOS6208", 0 }, + {"", 0} +}; + +static struct acpi_driver acpi_threaded_toshkeys = { + .name = "Toshiba laptop hotkeys driver", + .class = "hkey", + .ids = acpi_toshkeys_ids, + .ops = { + .add = acpi_toshkeys_add, + .remove = acpi_toshkeys_remove, + }, +}; + +static int __init init_threaded_acpi(void) +{ + acpi_status result = AE_OK; + result = acpi_bus_register_driver(&acpi_threaded_toshkeys); + if( result < 0 ) + printk(MY_ERR "Registration of toshkeys acpi device failed\n"); + return result; +} + +static void kill_threaded_acpi(void) +{ + acpi_bus_unregister_driver(&acpi_threaded_toshkeys); +} + static void toshiba_acpi_exit(void) { if (toshiba_acpi.bt_rfk) { @@ -686,11 +1031,19 @@ if (toshiba_backlight_device) backlight_device_unregister(toshiba_backlight_device); + if (hotkeys_over_acpi) { + thread_should_die = 1; + down(&thread_sem); + kill_threaded_acpi(); + } + remove_device(); if (toshiba_proc_dir) remove_proc_entry(PROC_TOSHIBA, acpi_root_dir); + old_driver_emulation_exit(); + platform_device_unregister(toshiba_acpi.p_dev); return; @@ -730,6 +1083,9 @@ return ret; } + if ((ret = old_driver_emulation_init())) + return ret; + force_fan = 0; key_event_valid = 0; @@ -762,6 +1118,26 @@ } toshiba_backlight_device->props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1; + if (hotkeys_over_acpi && ACPI_SUCCESS(status)) { + printk(MY_INFO "Toshiba hotkeys are sent as ACPI events\n"); + if (hotkeys_check_per_sec < 1) + hotkeys_check_per_sec = 1; + if (hotkeys_check_per_sec > 10) + hotkeys_check_per_sec = 10; + printk(MY_INFO "ktoshkeyd will check %d time%s per second\n", + hotkeys_check_per_sec, hotkeys_check_per_sec==1?"":"s"); + if (init_threaded_acpi() >= 0) { + init_MUTEX_LOCKED(&thread_sem); + kernel_thread(toshiba_acpi_thread, NULL, CLONE_KERNEL); + down(&thread_sem); + } else { + remove_device(); + remove_proc_entry(PROC_TOSHIBA, acpi_root_dir); + status = AE_ERROR; + printk(MY_INFO "ktoshkeyd initialisation failed. Refusing to load module\n"); + } + } + /* Register rfkill switch for Bluetooth */ if (hci_get_bt_present(&bt_present) == HCI_SUCCESS && bt_present) { toshiba_acpi.bt_rfk = rfkill_alloc(toshiba_acpi.bt_name, --- linux-2.6.32.orig/drivers/platform/x86/Kconfig +++ linux-2.6.32/drivers/platform/x86/Kconfig @@ -233,6 +233,29 @@ If you have an IBM or Lenovo ThinkPad laptop, say Y or M here. +config THINKPAD_ACPI_ALSA_SUPPORT + bool "Console audio control ALSA interface" + depends on THINKPAD_ACPI + depends on SND + depends on SND = y || THINKPAD_ACPI = SND + default y + ---help--- + Enables monitoring of the built-in console audio output control + (headphone and speakers), which is operated by the mute and (in + some ThinkPad models) volume hotkeys. + + If this option is enabled, ThinkPad-ACPI will export an ALSA card + with a single read-only mixer control, which should be used for + on-screen-display feedback purposes by the Desktop Environment. + + Optionally, the driver will also allow software control (the + ALSA mixer will be made read-write). Please refer to the driver + documentation for details. + + All IBM models have both volume and mute control. Newer Lenovo + models only have mute control (the volume hotkeys are just normal + keys and volume control is done through the main HDA mixer). + config THINKPAD_ACPI_DEBUGFACILITIES bool "Maintainer debug facilities" depends on THINKPAD_ACPI --- linux-2.6.32.orig/drivers/platform/x86/hp-wmi.c +++ linux-2.6.32/drivers/platform/x86/hp-wmi.c @@ -334,8 +334,13 @@ struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL }; static struct key_entry *key; union acpi_object *obj; + acpi_status status; - wmi_get_event_data(value, &response); + status = wmi_get_event_data(value, &response); + if (status != AE_OK) { + printk(KERN_INFO "hp-wmi: bad event status 0x%x\n", status); + return; + } obj = (union acpi_object *)response.pointer; @@ -377,6 +382,8 @@ eventcode); } else printk(KERN_INFO "HP WMI: Unknown response received\n"); + + kfree(obj); } static int __init hp_wmi_input_setup(void) --- linux-2.6.32.orig/drivers/platform/x86/dell-laptop.c +++ linux-2.6.32/drivers/platform/x86/dell-laptop.c @@ -22,9 +22,15 @@ #include #include #include +#include #include "../../firmware/dcdbas.h" #define BRIGHTNESS_TOKEN 0x7d +#define WLAN_SWITCH_MASK 0 +#define BT_SWITCH_MASK 1 +#define WWAN_SWITCH_MASK 2 +#define HW_SWITCH_SUPPORT 3 +#define HW_SWITCH_MASK 16 /* This structure will be modified by the firmware when we enter * system management mode, hence the volatiles */ @@ -63,6 +69,13 @@ static struct rfkill *bluetooth_rfkill; static struct rfkill *wwan_rfkill; +/* + * RFkill status is maintained in software because the BIOS has an annoying + * habit of emitting a KEY_WLAN key press event before the BIOS state is updated, making + * dell_send_request() racy. + */ +static int hw_switch_status; + static const struct dmi_system_id __initdata dell_device_table[] = { { .ident = "Dell laptop", @@ -74,6 +87,54 @@ { } }; +static struct dmi_system_id __devinitdata dell_blacklist[] = { + /* BIOS always returns HW switch disabled */ + { + .ident = "Dell Vostro 1720", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"), + }, + }, + /* Supported by compal-laptop */ + { + .ident = "Dell Mini 9", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 910"), + }, + }, + { + .ident = "Dell Mini 10", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1010"), + }, + }, + { + .ident = "Dell Mini 10v", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1011"), + }, + }, + { + .ident = "Dell Inspiron 11z", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1110"), + }, + }, + { + .ident = "Dell Mini 12", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1210"), + }, + }, + {} +}; + static void parse_da_table(const struct dmi_header *dm) { /* Final token is a terminator, so we don't want to copy it */ @@ -180,10 +241,12 @@ int disable = blocked ? 1 : 0; unsigned long radio = (unsigned long)data; - memset(&buffer, 0, sizeof(struct calling_interface_buffer)); - buffer.input[0] = (1 | (radio<<8) | (disable << 16)); - dell_send_request(&buffer, 17, 11); - + if (!(hw_switch_status & BIT(radio-1)) || !(hw_switch_status & BIT(HW_SWITCH_MASK)) || \ + !(hw_switch_status & BIT(HW_SWITCH_SUPPORT))) { + memset(&buffer, 0, sizeof(struct calling_interface_buffer)); + buffer.input[0] = (1 | (radio<<8) | (disable << 16)); + dell_send_request(&buffer, 17, 11); + } return 0; } @@ -191,14 +254,33 @@ { struct calling_interface_buffer buffer; int status; - int bit = (unsigned long)data + 16; + int bit = (unsigned long)data - 1; memset(&buffer, 0, sizeof(struct calling_interface_buffer)); dell_send_request(&buffer, 17, 11); status = buffer.output[1]; - if (status & BIT(bit)) - rfkill_set_hw_state(rfkill, !!(status & BIT(16))); + hw_switch_status |= (status & BIT(0)) << BIT(HW_SWITCH_SUPPORT); + hw_switch_status |= (status & BIT(HW_SWITCH_MASK)) ^ BIT(HW_SWITCH_MASK); + + /* HW switch control not supported + explicitly set it to all 3 as they'll change in unison then */ + if (!(status & BIT(0))) + hw_switch_status |= BIT(WLAN_SWITCH_MASK) | BIT(BT_SWITCH_MASK) | (WWAN_SWITCH_MASK); + else { + /* rerun the query to see what is really supported */ + memset(&buffer, 0, sizeof(struct calling_interface_buffer)); + buffer.input[0] = 2; + dell_send_request(&buffer, 17, 11); + status = buffer.output[1]; + + hw_switch_status |= status & BIT(bit); + } + + if (hw_switch_status & BIT(bit)) + rfkill_set_hw_state(rfkill, hw_switch_status & BIT(HW_SWITCH_MASK)); + else + rfkill_set_hw_state(rfkill, 0); } static const struct rfkill_ops dell_rfkill_ops = { @@ -206,11 +288,38 @@ .query = dell_rfkill_query, }; +/* + * Called for each KEY_WLAN key press event. Note that a physical + * rf-kill switch change also causes the BIOS to emit a KEY_WLAN. + * + * dell_rfkill_set may block, so schedule it on a worker thread. + */ +static void dell_rfkill_update(struct work_struct *work) +{ + hw_switch_status ^= BIT(HW_SWITCH_MASK); + if (wifi_rfkill && (hw_switch_status & BIT(WLAN_SWITCH_MASK))) { + rfkill_set_hw_state(wifi_rfkill, hw_switch_status & BIT(HW_SWITCH_MASK)); + dell_rfkill_set((void*)1, rfkill_blocked(wifi_rfkill)); + } + + if (bluetooth_rfkill && (hw_switch_status & BIT(BT_SWITCH_MASK))) { + rfkill_set_hw_state(bluetooth_rfkill, hw_switch_status & BIT(HW_SWITCH_MASK)); + dell_rfkill_set((void*)2, rfkill_blocked(bluetooth_rfkill)); + } + + if (wwan_rfkill && (hw_switch_status & BIT(WWAN_SWITCH_MASK))) { + rfkill_set_hw_state(wwan_rfkill, hw_switch_status & BIT(HW_SWITCH_MASK)); + dell_rfkill_set((void*)3, rfkill_blocked(wwan_rfkill)); + } +} +DECLARE_WORK(dell_rfkill_update_work, &dell_rfkill_update); + static int dell_setup_rfkill(void) { struct calling_interface_buffer buffer; int status; int ret; + hw_switch_status = 0; memset(&buffer, 0, sizeof(struct calling_interface_buffer)); dell_send_request(&buffer, 17, 11); @@ -310,6 +419,92 @@ .update_status = dell_send_intensity, }; +static const struct input_device_id dell_input_ids[] = { + { + .bustype = 0x11, + .vendor = 0x01, + .product = 0x01, + .version = 0xab41, + .flags = INPUT_DEVICE_ID_MATCH_BUS | + INPUT_DEVICE_ID_MATCH_VENDOR | + INPUT_DEVICE_ID_MATCH_PRODUCT | + INPUT_DEVICE_ID_MATCH_VERSION + }, + { }, +}; + +static bool dell_input_filter(struct input_handle *handle, unsigned int type, + unsigned int code, int value) +{ + if (type == EV_KEY && code == KEY_WLAN && value == 1) { + if (!schedule_work(&dell_rfkill_update_work)) + printk(KERN_NOTICE "rfkill switch handling already " + "scheduled, dropping this event\n"); + return 1; + } + + return 0; +} + +static void dell_input_event(struct input_handle *handle, unsigned int type, + unsigned int code, int value) +{ +} + +static int dell_input_connect(struct input_handler *handler, + struct input_dev *dev, + const struct input_device_id *id) +{ + struct input_handle *handle; + int error; + + handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL); + if (!handle) + return -ENOMEM; + + handle->dev = dev; + handle->handler = handler; + handle->name = "dell-laptop"; + + error = input_register_handle(handle); + if (error) + goto err_free_handle; + + error = input_open_device(handle); + if (error) + goto err_unregister_handle; + + error = input_filter_device(handle); + if (error) + goto err_close_handle; + + return 0; + +err_close_handle: + input_close_device(handle); +err_unregister_handle: + input_unregister_handle(handle); +err_free_handle: + kfree(handle); + return error; +} + +static void dell_input_disconnect(struct input_handle *handle) +{ + input_close_device(handle); + input_unregister_handle(handle); + kfree(handle); +} + +static struct input_handler dell_input_handler = { + .name = "dell-laptop", + .filter = dell_input_filter, + .event = dell_input_event, + .connect = dell_input_connect, + .disconnect = dell_input_disconnect, + .id_table = dell_input_ids, +}; + static int __init dell_init(void) { struct calling_interface_buffer buffer; @@ -319,6 +514,12 @@ if (!dmi_check_system(dell_device_table)) return -ENODEV; + if (dmi_check_system(dell_blacklist)) { + printk(KERN_INFO "dell-laptop: Blacklisted hardware detected - " + "not loading\n"); + return -ENODEV; + } + dmi_walk(find_tokens, NULL); if (!da_tokens) { @@ -333,6 +534,10 @@ goto out; } + if (input_register_handler(&dell_input_handler)) + printk(KERN_INFO + "dell-laptop: Could not register input filter\n"); + #ifdef CONFIG_ACPI /* In the event of an ACPI backlight being available, don't * register the platform controller. @@ -388,6 +593,7 @@ rfkill_unregister(bluetooth_rfkill); if (wwan_rfkill) rfkill_unregister(wwan_rfkill); + input_unregister_handler(&dell_input_handler); } module_init(dell_init); --- linux-2.6.32.orig/drivers/platform/x86/sony-laptop.c +++ linux-2.6.32/drivers/platform/x86/sony-laptop.c @@ -1390,6 +1390,10 @@ struct sonypi_event *events; }; +struct sony_pic_quirk_entry { + u8 set_wwan_power; +}; + struct sony_pic_dev { struct acpi_device *acpi_dev; struct sony_pic_irq *cur_irq; @@ -1400,6 +1404,7 @@ struct sonypi_eventtypes *event_types; int (*handle_irq)(const u8, const u8); int model; + struct sony_pic_quirk_entry *quirks; u16 evport_offset; u8 camera_power; u8 bluetooth_power; @@ -2828,6 +2833,12 @@ if (result) goto err_remove_pf; + if (spic_dev.quirks && spic_dev.quirks->set_wwan_power) { + /* + * Power isn't enabled by default. + */ + __sony_pic_set_wwanpower(1); + } return 0; err_remove_pf: @@ -2898,6 +2909,16 @@ }, }; +static struct sony_pic_quirk_entry sony_pic_vaio_vgn = { + .set_wwan_power = 1, +}; + +static int dmi_matched(const struct dmi_system_id *dmi) +{ + spic_dev.quirks = dmi->driver_data; + return 0; +} + static struct dmi_system_id __initdata sonypi_dmi_table[] = { { .ident = "Sony Vaio", @@ -2912,6 +2933,8 @@ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), DMI_MATCH(DMI_PRODUCT_NAME, "VGN-"), }, + .callback = dmi_matched, + .driver_data = &sony_pic_vaio_vgn, }, { } }; --- linux-2.6.32.orig/drivers/platform/x86/asus-laptop.c +++ linux-2.6.32/drivers/platform/x86/asus-laptop.c @@ -221,6 +221,7 @@ */ static const struct acpi_device_id asus_device_ids[] = { {"ATK0100", 0}, + {"ATK0101", 0}, {"", 0}, }; MODULE_DEVICE_TABLE(acpi, asus_device_ids); @@ -293,6 +294,11 @@ enum { KE_KEY, KE_END }; static struct key_entry asus_keymap[] = { + {KE_KEY, 0x02, KEY_SCREENLOCK}, + {KE_KEY, 0x05, KEY_WLAN}, + {KE_KEY, 0x08, BTN_TOUCH}, + {KE_KEY, 0x17, KEY_ZOOM}, + {KE_KEY, 0x1f, KEY_BATTERY}, {KE_KEY, 0x30, KEY_VOLUMEUP}, {KE_KEY, 0x31, KEY_VOLUMEDOWN}, {KE_KEY, 0x32, KEY_MUTE}, @@ -312,6 +318,8 @@ {KE_KEY, 0x5F, KEY_WLAN}, {KE_KEY, 0x60, KEY_SWITCHVIDEOMODE}, {KE_KEY, 0x61, KEY_SWITCHVIDEOMODE}, + {KE_KEY, 0x62, KEY_SWITCHVIDEOMODE}, + {KE_KEY, 0x63, KEY_SWITCHVIDEOMODE}, {KE_KEY, 0x6B, BTN_TOUCH}, /* Lock Mouse */ {KE_KEY, 0x82, KEY_CAMERA}, {KE_KEY, 0x8A, KEY_PROG1}, @@ -1283,8 +1291,8 @@ hotk->ledd_status = 0xFFF; /* Set initial values of light sensor and level */ - hotk->light_switch = 1; /* Default to light sensor disabled */ - hotk->light_level = 0; /* level 5 for sensor sensitivity */ + hotk->light_switch = 0; /* Default to light sensor disabled */ + hotk->light_level = 5; /* level 5 for sensor sensitivity */ if (ls_switch_handle) set_light_sens_switch(hotk->light_switch); --- linux-2.6.32.orig/drivers/platform/x86/eeepc-laptop.c +++ linux-2.6.32/drivers/platform/x86/eeepc-laptop.c @@ -34,6 +34,7 @@ #include #include #include +#include #define EEEPC_LAPTOP_VERSION "0.1" @@ -135,6 +136,8 @@ acpi_handle handle; /* the handle of the hotk device */ u32 cm_supported; /* the control methods supported by this BIOS */ + bool cpufv_disabled; + bool hotplug_disabled; uint init_flag; /* Init flags */ u16 event_count[128]; /* count for each event */ struct input_dev *inputdev; @@ -251,6 +254,14 @@ MODULE_DESCRIPTION(EEEPC_HOTK_NAME); MODULE_LICENSE("GPL"); +static bool hotplug_disabled; + +module_param(hotplug_disabled, bool, 0644); +MODULE_PARM_DESC(hotplug_disabled, + "Disable hotplug for wireless device. " + "If your laptop need that, please report to " + "acpi4asus-user@lists.sourceforge.net."); + /* * ACPI Helpers */ @@ -467,6 +478,8 @@ struct eeepc_cpufv c; int rv, value; + if (ehotk->cpufv_disabled) + return -EPERM; if (get_cpufv(&c)) return -ENODEV; rv = parse_arg(buf, count, &value); @@ -478,6 +491,38 @@ return rv; } +static ssize_t show_cpufv_disabled(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return sprintf(buf, "%d\n", ehotk->cpufv_disabled); +} + +static ssize_t store_cpufv_disabled(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int rv, value; + + rv = parse_arg(buf, count, &value); + if (rv < 0) + return rv; + + switch (value) { + case 0: + if (ehotk->cpufv_disabled) + pr_warning("cpufv enabled (not officially supported " + "on this model)\n"); + ehotk->cpufv_disabled = false; + return rv; + case 1: + return -EPERM; + default: + return -EINVAL; + } +} + + static struct device_attribute dev_attr_cpufv = { .attr = { .name = "cpufv", @@ -493,12 +538,22 @@ .show = show_available_cpufv }; +static struct device_attribute dev_attr_cpufv_disabled = { + .attr = { + .name = "cpufv_disabled", + .mode = 0644 }, + .show = show_cpufv_disabled, + .store = store_cpufv_disabled +}; + + static struct attribute *platform_attributes[] = { &dev_attr_camera.attr, &dev_attr_cardr.attr, &dev_attr_disp.attr, &dev_attr_cpufv.attr, &dev_attr_available_cpufv.attr, + &dev_attr_cpufv_disabled.attr, NULL }; @@ -564,6 +619,54 @@ return -EINVAL; } +static void eeepc_dmi_check(void) +{ + const char *model; + + model = dmi_get_system_info(DMI_PRODUCT_NAME); + if (!model) + return; + + /* + * Blacklist for setting cpufv (cpu speed). + * + * EeePC 4G ("701") implements CFVS, but it is not supported + * by the pre-installed OS, and the original option to change it + * in the BIOS setup screen was removed in later versions. + * + * Judging by the lack of "Super Hybrid Engine" on Asus product pages, + * this applies to all "701" models (4G/4G Surf/2G Surf). + * + * So Asus made a deliberate decision not to support it on this model. + * We have several reports that using it can cause the system to hang + * + * The hang has also been reported on a "702" (Model name "8G"?). + * + * We avoid dmi_check_system() / dmi_match(), because they use + * substring matching. We don't want to affect the "701SD" + * and "701SDX" models, because they do support S.H.E. + */ + if (strcmp(model, "701") == 0 || strcmp(model, "702") == 0) { + ehotk->cpufv_disabled = true; + pr_info("model %s does not officially support setting cpu " + "speed\n", model); + pr_info("cpufv disabled to avoid instability\n"); + } + + /* + * Blacklist for wlan hotplug + * + * Eeepc 1005HA doesn't work like others models and don't need the + * hotplug code. In fact, current hotplug code seems to unplug another + * device... + */ + if (strcmp(model, "1005HA") == 0 || strcmp(model, "1201N") == 0 || + strcmp(model, "1005PE") == 0) { + ehotk->hotplug_disabled = true; + pr_info("wlan hotplug disabled\n"); + } +} + static void cmsg_quirk(int cm, const char *name) { int dummy; @@ -1095,6 +1198,9 @@ if (result && result != -ENODEV) goto exit; + if (ehotk->hotplug_disabled) + return 0; + result = eeepc_setup_pci_hotplug(); /* * If we get -EBUSY then something else is handling the PCI hotplug - @@ -1208,6 +1314,10 @@ device->driver_data = ehotk; ehotk->device = device; + ehotk->hotplug_disabled = hotplug_disabled; + + eeepc_dmi_check(); + result = eeepc_hotk_check(); if (result) goto fail_platform_driver; --- linux-2.6.32.orig/drivers/platform/x86/thinkpad_acpi.c +++ linux-2.6.32/drivers/platform/x86/thinkpad_acpi.c @@ -21,8 +21,8 @@ * 02110-1301, USA. */ -#define TPACPI_VERSION "0.23" -#define TPACPI_SYSFS_VERSION 0x020500 +#define TPACPI_VERSION "0.24" +#define TPACPI_SYSFS_VERSION 0x020700 /* * Changelog: @@ -61,6 +61,7 @@ #include #include +#include #include #include #include @@ -76,6 +77,10 @@ #include #include +#include +#include +#include + #include #include @@ -231,6 +236,7 @@ #define TPACPI_DBG_HKEY 0x0008 #define TPACPI_DBG_FAN 0x0010 #define TPACPI_DBG_BRGHT 0x0020 +#define TPACPI_DBG_MIXER 0x0040 #define onoff(status, bit) ((status) & (1 << (bit)) ? "on" : "off") #define enabled(status, bit) ((status) & (1 << (bit)) ? "enabled" : "disabled") @@ -256,7 +262,7 @@ struct ibm_struct { char *name; - int (*read) (char *); + int (*read) (struct seq_file *); int (*write) (char *); void (*exit) (void); void (*resume) (void); @@ -280,6 +286,7 @@ char param[32]; int (*init) (struct ibm_init_struct *); + mode_t base_procfs_mode; struct ibm_struct *data; }; @@ -298,6 +305,7 @@ u32 fan_ctrl_status_undef:1; u32 second_fan:1; u32 beep_needs_two_args:1; + u32 mixer_no_level_control:1; u32 input_device_registered:1; u32 platform_drv_registered:1; u32 platform_drv_attrs_registered:1; @@ -309,6 +317,7 @@ static struct { u16 hotkey_mask_ff:1; + u16 volume_ctrl_forbidden:1; } tp_warned; struct thinkpad_id_data { @@ -425,6 +434,12 @@ .ec = TPACPI_MATCH_ANY, \ .quirks = (__quirk) } +#define TPACPI_QEC_LNV(__id1, __id2, __quirk) \ + { .vendor = PCI_VENDOR_ID_LENOVO, \ + .bios = TPACPI_MATCH_ANY, \ + .ec = TPID(__id1, __id2), \ + .quirks = (__quirk) } + struct tpacpi_quirk { unsigned int vendor; u16 bios; @@ -776,36 +791,25 @@ **************************************************************************** ****************************************************************************/ -static int dispatch_procfs_read(char *page, char **start, off_t off, - int count, int *eof, void *data) +static int dispatch_proc_show(struct seq_file *m, void *v) { - struct ibm_struct *ibm = data; - int len; + struct ibm_struct *ibm = m->private; if (!ibm || !ibm->read) return -EINVAL; + return ibm->read(m); +} - len = ibm->read(page); - if (len < 0) - return len; - - if (len <= off + count) - *eof = 1; - *start = page + off; - len -= off; - if (len > count) - len = count; - if (len < 0) - len = 0; - - return len; +static int dispatch_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, dispatch_proc_show, PDE(inode)->data); } -static int dispatch_procfs_write(struct file *file, +static ssize_t dispatch_proc_write(struct file *file, const char __user *userbuf, - unsigned long count, void *data) + size_t count, loff_t *pos) { - struct ibm_struct *ibm = data; + struct ibm_struct *ibm = PDE(file->f_path.dentry->d_inode)->data; char *kernbuf; int ret; @@ -834,6 +838,15 @@ return ret; } +static const struct file_operations dispatch_proc_fops = { + .owner = THIS_MODULE, + .open = dispatch_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, + .write = dispatch_proc_write, +}; + static char *next_cmd(char **cmds) { char *start = *cmds; @@ -1264,6 +1277,7 @@ struct tpacpi_rfk *atp_rfk; int res; bool sw_state = false; + bool hw_state; int sw_status; BUG_ON(id >= TPACPI_RFK_SW_MAX || tpacpi_rfkill_switches[id]); @@ -1298,7 +1312,8 @@ rfkill_init_sw_state(atp_rfk->rfkill, sw_state); } } - rfkill_set_hw_state(atp_rfk->rfkill, tpacpi_rfk_check_hwblock_state()); + hw_state = tpacpi_rfk_check_hwblock_state(); + rfkill_set_hw_state(atp_rfk->rfkill, hw_state); res = rfkill_register(atp_rfk->rfkill); if (res < 0) { @@ -1311,6 +1326,9 @@ } tpacpi_rfkill_switches[id] = atp_rfk; + + printk(TPACPI_INFO "rfkill switch %s: radio is %sblocked\n", + name, (sw_state || hw_state) ? "" : "un"); return 0; } @@ -1383,12 +1401,10 @@ } /* procfs -------------------------------------------------------------- */ -static int tpacpi_rfk_procfs_read(const enum tpacpi_rfk_id id, char *p) +static int tpacpi_rfk_procfs_read(const enum tpacpi_rfk_id id, struct seq_file *m) { - int len = 0; - if (id >= TPACPI_RFK_SW_MAX) - len += sprintf(p + len, "status:\t\tnot supported\n"); + seq_printf(m, "status:\t\tnot supported\n"); else { int status; @@ -1402,13 +1418,13 @@ return status; } - len += sprintf(p + len, "status:\t\t%s\n", + seq_printf(m, "status:\t\t%s\n", (status == TPACPI_RFK_RADIO_ON) ? "enabled" : "disabled"); - len += sprintf(p + len, "commands:\tenable, disable\n"); + seq_printf(m, "commands:\tenable, disable\n"); } - return len; + return 0; } static int tpacpi_rfk_procfs_write(const enum tpacpi_rfk_id id, char *buf) @@ -1655,7 +1671,7 @@ * Table of recommended minimum BIOS versions * * Reasons for listing: - * 1. Stable BIOS, listed because the unknown ammount of + * 1. Stable BIOS, listed because the unknown amount of * bugs and bad ACPI behaviour on older versions * * 2. BIOS or EC fw with known bugs that trigger on Linux @@ -1779,7 +1795,7 @@ TPV_QL1('7', '9', 'E', '3', '5', '0'), /* T60/p */ TPV_QL1('7', 'C', 'D', '2', '2', '2'), /* R60, R60i */ - TPV_QL0('7', 'E', 'D', '0'), /* R60e, R60i */ + TPV_QL1('7', 'E', 'D', '0', '1', '5'), /* R60e, R60i */ /* BIOS FW BIOS VERS EC FW EC VERS */ TPV_QI2('1', 'W', '9', '0', '1', 'V', '2', '8'), /* R50e (1) */ @@ -1795,8 +1811,8 @@ TPV_QI1('7', '4', '6', '4', '2', '7'), /* X41 (0) */ TPV_QI1('7', '5', '6', '0', '2', '0'), /* X41t (0) */ - TPV_QL0('7', 'B', 'D', '7'), /* X60/s */ - TPV_QL0('7', 'J', '3', '0'), /* X60t */ + TPV_QL1('7', 'B', 'D', '7', '4', '0'), /* X60/s */ + TPV_QL1('7', 'J', '3', '0', '1', '3'), /* X60t */ /* (0) - older versions lack DMI EC fw string and functionality */ /* (1) - older versions known to lack functionality */ @@ -1886,14 +1902,11 @@ return 0; } -static int thinkpad_acpi_driver_read(char *p) +static int thinkpad_acpi_driver_read(struct seq_file *m) { - int len = 0; - - len += sprintf(p + len, "driver:\t\t%s\n", TPACPI_DESC); - len += sprintf(p + len, "version:\t%s\n", TPACPI_VERSION); - - return len; + seq_printf(m, "driver:\t\t%s\n", TPACPI_DESC); + seq_printf(m, "version:\t%s\n", TPACPI_VERSION); + return 0; } static struct ibm_struct thinkpad_acpi_driver_data = { @@ -2073,6 +2086,7 @@ static void tpacpi_driver_event(const unsigned int hkey_event); static void hotkey_driver_event(const unsigned int scancode); +static void hotkey_poll_setup(const bool may_warn); /* HKEY.MHKG() return bits */ #define TP_HOTKEY_TABLET_MASK (1 << 3) @@ -2189,7 +2203,8 @@ fwmask, hotkey_acpi_mask); } - hotkey_mask_warn_incomplete_mask(); + if (tpacpi_lifecycle != TPACPI_LIFE_EXITING) + hotkey_mask_warn_incomplete_mask(); return rc; } @@ -2254,6 +2269,8 @@ rc = hotkey_mask_set((hotkey_acpi_mask | hotkey_driver_mask) & ~hotkey_source_mask); + hotkey_poll_setup(true); + mutex_unlock(&hotkey_mutex); return rc; @@ -2538,7 +2555,7 @@ } /* call with hotkey_mutex held */ -static void hotkey_poll_setup(bool may_warn) +static void hotkey_poll_setup(const bool may_warn) { const u32 poll_driver_mask = hotkey_driver_mask & hotkey_source_mask; const u32 poll_user_mask = hotkey_user_mask & hotkey_source_mask; @@ -2569,7 +2586,7 @@ } } -static void hotkey_poll_setup_safe(bool may_warn) +static void hotkey_poll_setup_safe(const bool may_warn) { mutex_lock(&hotkey_mutex); hotkey_poll_setup(may_warn); @@ -2587,7 +2604,11 @@ #else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */ -static void hotkey_poll_setup_safe(bool __unused) +static void hotkey_poll_setup(const bool __unused) +{ +} + +static void hotkey_poll_setup_safe(const bool __unused) { } @@ -2597,16 +2618,11 @@ { switch (tpacpi_lifecycle) { case TPACPI_LIFE_INIT: - /* - * hotkey_init will call hotkey_poll_setup_safe - * at the appropriate moment - */ - return 0; - case TPACPI_LIFE_EXITING: - return -EBUSY; case TPACPI_LIFE_RUNNING: hotkey_poll_setup_safe(false); return 0; + case TPACPI_LIFE_EXITING: + return -EBUSY; } /* Should only happen if tpacpi_lifecycle is corrupt */ @@ -2617,7 +2633,7 @@ static void hotkey_inputdev_close(struct input_dev *dev) { /* disable hotkey polling when possible */ - if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING && + if (tpacpi_lifecycle != TPACPI_LIFE_EXITING && !(hotkey_source_mask & hotkey_driver_mask)) hotkey_poll_setup_safe(false); } @@ -3185,6 +3201,8 @@ int res, i; int status; int hkeyv; + bool radiosw_state = false; + bool tabletsw_state = false; unsigned long quirks; @@ -3290,6 +3308,7 @@ #ifdef CONFIG_THINKPAD_ACPI_DEBUGFACILITIES if (dbg_wlswemul) { tp_features.hotkey_wlsw = 1; + radiosw_state = !!tpacpi_wlsw_emulstate; printk(TPACPI_INFO "radio switch emulation enabled\n"); } else @@ -3297,6 +3316,7 @@ /* Not all thinkpads have a hardware radio switch */ if (acpi_evalf(hkey_handle, &status, "WLSW", "qd")) { tp_features.hotkey_wlsw = 1; + radiosw_state = !!status; printk(TPACPI_INFO "radio switch found; radios are %s\n", enabled(status, 0)); @@ -3308,11 +3328,11 @@ /* For X41t, X60t, X61t Tablets... */ if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) { tp_features.hotkey_tablet = 1; + tabletsw_state = !!(status & TP_HOTKEY_TABLET_MASK); printk(TPACPI_INFO "possible tablet mode switch found; " "ThinkPad in %s mode\n", - (status & TP_HOTKEY_TABLET_MASK)? - "tablet" : "laptop"); + (tabletsw_state) ? "tablet" : "laptop"); res = add_to_attr_set(hotkey_dev_attributes, &dev_attr_hotkey_tablet_mode.attr); } @@ -3347,16 +3367,14 @@ TPACPI_HOTKEY_MAP_SIZE); } - set_bit(EV_KEY, tpacpi_inputdev->evbit); - set_bit(EV_MSC, tpacpi_inputdev->evbit); - set_bit(MSC_SCAN, tpacpi_inputdev->mscbit); + input_set_capability(tpacpi_inputdev, EV_MSC, MSC_SCAN); tpacpi_inputdev->keycodesize = TPACPI_HOTKEY_MAP_TYPESIZE; tpacpi_inputdev->keycodemax = TPACPI_HOTKEY_MAP_LEN; tpacpi_inputdev->keycode = hotkey_keycode_map; for (i = 0; i < TPACPI_HOTKEY_MAP_LEN; i++) { if (hotkey_keycode_map[i] != KEY_RESERVED) { - set_bit(hotkey_keycode_map[i], - tpacpi_inputdev->keybit); + input_set_capability(tpacpi_inputdev, EV_KEY, + hotkey_keycode_map[i]); } else { if (i < sizeof(hotkey_reserved_mask)*8) hotkey_reserved_mask |= 1 << i; @@ -3364,12 +3382,14 @@ } if (tp_features.hotkey_wlsw) { - set_bit(EV_SW, tpacpi_inputdev->evbit); - set_bit(SW_RFKILL_ALL, tpacpi_inputdev->swbit); + input_set_capability(tpacpi_inputdev, EV_SW, SW_RFKILL_ALL); + input_report_switch(tpacpi_inputdev, + SW_RFKILL_ALL, radiosw_state); } if (tp_features.hotkey_tablet) { - set_bit(EV_SW, tpacpi_inputdev->evbit); - set_bit(SW_TABLET_MODE, tpacpi_inputdev->swbit); + input_set_capability(tpacpi_inputdev, EV_SW, SW_TABLET_MODE); + input_report_switch(tpacpi_inputdev, + SW_TABLET_MODE, tabletsw_state); } /* Do not issue duplicate brightness change events to @@ -3436,8 +3456,6 @@ tpacpi_inputdev->close = &hotkey_inputdev_close; hotkey_poll_setup_safe(true); - tpacpi_send_radiosw_update(); - tpacpi_input_send_tabletsw(); return 0; @@ -3545,49 +3563,57 @@ } } +static void thermal_dump_all_sensors(void); + static bool hotkey_notify_thermal(const u32 hkey, bool *send_acpi_ev, bool *ignore_acpi_ev) { + bool known = true; + /* 0x6000-0x6FFF: thermal alarms */ *send_acpi_ev = true; *ignore_acpi_ev = false; switch (hkey) { + case TP_HKEY_EV_THM_TABLE_CHANGED: + printk(TPACPI_INFO + "EC reports that Thermal Table has changed\n"); + /* recommended action: do nothing, we don't have + * Lenovo ATM information */ + return true; case TP_HKEY_EV_ALARM_BAT_HOT: printk(TPACPI_CRIT "THERMAL ALARM: battery is too hot!\n"); /* recommended action: warn user through gui */ - return true; + break; case TP_HKEY_EV_ALARM_BAT_XHOT: printk(TPACPI_ALERT "THERMAL EMERGENCY: battery is extremely hot!\n"); /* recommended action: immediate sleep/hibernate */ - return true; + break; case TP_HKEY_EV_ALARM_SENSOR_HOT: printk(TPACPI_CRIT "THERMAL ALARM: " "a sensor reports something is too hot!\n"); /* recommended action: warn user through gui, that */ /* some internal component is too hot */ - return true; + break; case TP_HKEY_EV_ALARM_SENSOR_XHOT: printk(TPACPI_ALERT "THERMAL EMERGENCY: " "a sensor reports something is extremely hot!\n"); /* recommended action: immediate sleep/hibernate */ - return true; - case TP_HKEY_EV_THM_TABLE_CHANGED: - printk(TPACPI_INFO - "EC reports that Thermal Table has changed\n"); - /* recommended action: do nothing, we don't have - * Lenovo ATM information */ - return true; + break; default: printk(TPACPI_ALERT "THERMAL ALERT: unknown thermal alarm received\n"); - return false; + known = false; } + + thermal_dump_all_sensors(); + + return known; } static void hotkey_notify(struct ibm_struct *ibm, u32 event) @@ -3635,13 +3661,19 @@ break; case 3: /* 0x3000-0x3FFF: bay-related wakeups */ - if (hkey == TP_HKEY_EV_BAYEJ_ACK) { + switch (hkey) { + case TP_HKEY_EV_BAYEJ_ACK: hotkey_autosleep_ack = 1; printk(TPACPI_INFO "bay ejected\n"); hotkey_wakeup_hotunplug_complete_notify_change(); known_ev = true; - } else { + break; + case TP_HKEY_EV_OPTDRV_EJ: + /* FIXME: kick libata if SATA link offline */ + known_ev = true; + break; + default: known_ev = false; } break; @@ -3730,14 +3762,13 @@ } /* procfs -------------------------------------------------------------- */ -static int hotkey_read(char *p) +static int hotkey_read(struct seq_file *m) { int res, status; - int len = 0; if (!tp_features.hotkey) { - len += sprintf(p + len, "status:\t\tnot supported\n"); - return len; + seq_printf(m, "status:\t\tnot supported\n"); + return 0; } if (mutex_lock_killable(&hotkey_mutex)) @@ -3749,17 +3780,16 @@ if (res) return res; - len += sprintf(p + len, "status:\t\t%s\n", enabled(status, 0)); + seq_printf(m, "status:\t\t%s\n", enabled(status, 0)); if (hotkey_all_mask) { - len += sprintf(p + len, "mask:\t\t0x%08x\n", hotkey_user_mask); - len += sprintf(p + len, - "commands:\tenable, disable, reset, \n"); + seq_printf(m, "mask:\t\t0x%08x\n", hotkey_user_mask); + seq_printf(m, "commands:\tenable, disable, reset, \n"); } else { - len += sprintf(p + len, "mask:\t\tnot supported\n"); - len += sprintf(p + len, "commands:\tenable, disable, reset\n"); + seq_printf(m, "mask:\t\tnot supported\n"); + seq_printf(m, "commands:\tenable, disable, reset\n"); } - return len; + return 0; } static void hotkey_enabledisable_warn(bool enable) @@ -3852,7 +3882,7 @@ TP_ACPI_BLUETOOTH_HWPRESENT = 0x01, /* Bluetooth hw available */ TP_ACPI_BLUETOOTH_RADIOSSW = 0x02, /* Bluetooth radio enabled */ TP_ACPI_BLUETOOTH_RESUMECTRL = 0x04, /* Bluetooth state at resume: - off / last state */ + 0 = disable, 1 = enable */ }; enum { @@ -3866,15 +3896,6 @@ #define TPACPI_RFK_BLUETOOTH_SW_NAME "tpacpi_bluetooth_sw" -static void bluetooth_suspend(pm_message_t state) -{ - /* Try to make sure radio will resume powered off */ - if (!acpi_evalf(NULL, NULL, "\\BLTH", "vd", - TP_ACPI_BLTH_PWR_OFF_ON_RESUME)) - vdbg_printk(TPACPI_DBG_RFKILL, - "bluetooth power down on resume request failed\n"); -} - static int bluetooth_get_status(void) { int status; @@ -3907,9 +3928,9 @@ } #endif - /* We make sure to keep TP_ACPI_BLUETOOTH_RESUMECTRL off */ if (state == TPACPI_RFK_RADIO_ON) - status = TP_ACPI_BLUETOOTH_RADIOSSW; + status = TP_ACPI_BLUETOOTH_RADIOSSW + | TP_ACPI_BLUETOOTH_RESUMECTRL; else status = 0; @@ -4035,9 +4056,9 @@ } /* procfs -------------------------------------------------------------- */ -static int bluetooth_read(char *p) +static int bluetooth_read(struct seq_file *m) { - return tpacpi_rfk_procfs_read(TPACPI_RFK_BLUETOOTH_SW_ID, p); + return tpacpi_rfk_procfs_read(TPACPI_RFK_BLUETOOTH_SW_ID, m); } static int bluetooth_write(char *buf) @@ -4050,7 +4071,6 @@ .read = bluetooth_read, .write = bluetooth_write, .exit = bluetooth_exit, - .suspend = bluetooth_suspend, .shutdown = bluetooth_shutdown, }; @@ -4063,20 +4083,11 @@ TP_ACPI_WANCARD_HWPRESENT = 0x01, /* Wan hw available */ TP_ACPI_WANCARD_RADIOSSW = 0x02, /* Wan radio enabled */ TP_ACPI_WANCARD_RESUMECTRL = 0x04, /* Wan state at resume: - off / last state */ + 0 = disable, 1 = enable */ }; #define TPACPI_RFK_WWAN_SW_NAME "tpacpi_wwan_sw" -static void wan_suspend(pm_message_t state) -{ - /* Try to make sure radio will resume powered off */ - if (!acpi_evalf(NULL, NULL, "\\WGSV", "qvd", - TP_ACPI_WGSV_PWR_OFF_ON_RESUME)) - vdbg_printk(TPACPI_DBG_RFKILL, - "WWAN power down on resume request failed\n"); -} - static int wan_get_status(void) { int status; @@ -4109,9 +4120,9 @@ } #endif - /* We make sure to keep TP_ACPI_WANCARD_RESUMECTRL off */ if (state == TPACPI_RFK_RADIO_ON) - status = TP_ACPI_WANCARD_RADIOSSW; + status = TP_ACPI_WANCARD_RADIOSSW + | TP_ACPI_WANCARD_RESUMECTRL; else status = 0; @@ -4236,9 +4247,9 @@ } /* procfs -------------------------------------------------------------- */ -static int wan_read(char *p) +static int wan_read(struct seq_file *m) { - return tpacpi_rfk_procfs_read(TPACPI_RFK_WWAN_SW_ID, p); + return tpacpi_rfk_procfs_read(TPACPI_RFK_WWAN_SW_ID, m); } static int wan_write(char *buf) @@ -4251,7 +4262,6 @@ .read = wan_read, .write = wan_write, .exit = wan_exit, - .suspend = wan_suspend, .shutdown = wan_shutdown, }; @@ -4614,16 +4624,19 @@ /* not reached */ } -static int video_read(char *p) +static int video_read(struct seq_file *m) { int status, autosw; - int len = 0; if (video_supported == TPACPI_VIDEO_NONE) { - len += sprintf(p + len, "status:\t\tnot supported\n"); - return len; + seq_printf(m, "status:\t\tnot supported\n"); + return 0; } + /* Even reads can crash X.org, so... */ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + status = video_outputsw_get(); if (status < 0) return status; @@ -4632,20 +4645,20 @@ if (autosw < 0) return autosw; - 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)); + seq_printf(m, "status:\t\tsupported\n"); + seq_printf(m, "lcd:\t\t%s\n", enabled(status, 0)); + seq_printf(m, "crt:\t\t%s\n", enabled(status, 1)); if (video_supported == TPACPI_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"); + seq_printf(m, "dvi:\t\t%s\n", enabled(status, 3)); + seq_printf(m, "auto:\t\t%s\n", enabled(autosw, 0)); + seq_printf(m, "commands:\tlcd_enable, lcd_disable\n"); + seq_printf(m, "commands:\tcrt_enable, crt_disable\n"); if (video_supported == TPACPI_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"); + seq_printf(m, "commands:\tdvi_enable, dvi_disable\n"); + seq_printf(m, "commands:\tauto_enable, auto_disable\n"); + seq_printf(m, "commands:\tvideo_switch, expand_toggle\n"); - return len; + return 0; } static int video_write(char *buf) @@ -4657,6 +4670,10 @@ if (video_supported == TPACPI_VIDEO_NONE) return -ENODEV; + /* Even reads can crash X.org, let alone writes... */ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + enable = 0; disable = 0; @@ -4837,25 +4854,24 @@ flush_workqueue(tpacpi_wq); } -static int light_read(char *p) +static int light_read(struct seq_file *m) { - int len = 0; int status; if (!tp_features.light) { - len += sprintf(p + len, "status:\t\tnot supported\n"); + seq_printf(m, "status:\t\tnot supported\n"); } else if (!tp_features.light_status) { - len += sprintf(p + len, "status:\t\tunknown\n"); - len += sprintf(p + len, "commands:\ton, off\n"); + seq_printf(m, "status:\t\tunknown\n"); + seq_printf(m, "commands:\ton, off\n"); } else { status = light_get_status(); if (status < 0) return status; - len += sprintf(p + len, "status:\t\t%s\n", onoff(status, 0)); - len += sprintf(p + len, "commands:\ton, off\n"); + seq_printf(m, "status:\t\t%s\n", onoff(status, 0)); + seq_printf(m, "commands:\ton, off\n"); } - return len; + return 0; } static int light_write(char *buf) @@ -4933,20 +4949,18 @@ device_remove_file(&tpacpi_pdev->dev, &dev_attr_cmos_command); } -static int cmos_read(char *p) +static int cmos_read(struct seq_file *m) { - int len = 0; - /* 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"); + seq_printf(m, "status:\t\tnot supported\n"); else { - len += sprintf(p + len, "status:\t\tsupported\n"); - len += sprintf(p + len, "commands:\t ( is 0-21)\n"); + seq_printf(m, "status:\t\tsupported\n"); + seq_printf(m, "commands:\t ( is 0-21)\n"); } - return len; + return 0; } static int cmos_write(char *buf) @@ -5321,15 +5335,13 @@ ((s) == TPACPI_LED_OFF ? "off" : \ ((s) == TPACPI_LED_ON ? "on" : "blinking")) -static int led_read(char *p) +static int led_read(struct seq_file *m) { - int len = 0; - if (!led_supported) { - len += sprintf(p + len, "status:\t\tnot supported\n"); - return len; + seq_printf(m, "status:\t\tnot supported\n"); + return 0; } - len += sprintf(p + len, "status:\t\tsupported\n"); + seq_printf(m, "status:\t\tsupported\n"); if (led_supported == TPACPI_LED_570) { /* 570 */ @@ -5338,15 +5350,15 @@ status = led_get_status(i); if (status < 0) return -EIO; - len += sprintf(p + len, "%d:\t\t%s\n", + seq_printf(m, "%d:\t\t%s\n", i, str_led_status(status)); } } - len += sprintf(p + len, "commands:\t" + seq_printf(m, "commands:\t" " on, off, blink ( is 0-15)\n"); - return len; + return 0; } static int led_write(char *buf) @@ -5419,18 +5431,16 @@ return (beep_handle)? 0 : 1; } -static int beep_read(char *p) +static int beep_read(struct seq_file *m) { - int len = 0; - if (!beep_handle) - len += sprintf(p + len, "status:\t\tnot supported\n"); + seq_printf(m, "status:\t\tnot supported\n"); else { - len += sprintf(p + len, "status:\t\tsupported\n"); - len += sprintf(p + len, "commands:\t ( is 0-17)\n"); + seq_printf(m, "status:\t\tsupported\n"); + seq_printf(m, "commands:\t ( is 0-17)\n"); } - return len; + return 0; } static int beep_write(char *buf) @@ -5483,8 +5493,11 @@ TP_EC_THERMAL_TMP0 = 0x78, /* ACPI EC regs TMP 0..7 */ TP_EC_THERMAL_TMP8 = 0xC0, /* ACPI EC regs TMP 8..15 */ TP_EC_THERMAL_TMP_NA = -128, /* ACPI EC sensor not available */ + + TPACPI_THERMAL_SENSOR_NA = -128000, /* Sensor not available */ }; + #define TPACPI_MAX_THERMAL_SENSORS 16 /* Max thermal sensors supported */ struct ibm_thermal_sensors_struct { s32 temp[TPACPI_MAX_THERMAL_SENSORS]; @@ -5574,6 +5587,28 @@ return n; } +static void thermal_dump_all_sensors(void) +{ + int n, i; + struct ibm_thermal_sensors_struct t; + + n = thermal_get_sensors(&t); + if (n <= 0) + return; + + printk(TPACPI_NOTICE + "temperatures (Celsius):"); + + for (i = 0; i < n; i++) { + if (t.temp[i] != TPACPI_THERMAL_SENSOR_NA) + printk(KERN_CONT " %d", (int)(t.temp[i] / 1000)); + else + printk(KERN_CONT " N/A"); + } + + printk(KERN_CONT "\n"); +} + /* sysfs temp##_input -------------------------------------------------- */ static ssize_t thermal_temp_input_show(struct device *dev, @@ -5589,7 +5624,7 @@ res = thermal_get_sensor(idx, &value); if (res) return res; - if (value == TP_EC_THERMAL_TMP_NA * 1000) + if (value == TPACPI_THERMAL_SENSOR_NA) return -ENXIO; return snprintf(buf, PAGE_SIZE, "%d\n", value); @@ -5758,7 +5793,7 @@ case TPACPI_THERMAL_ACPI_TMP07: case TPACPI_THERMAL_ACPI_UPDT: sysfs_remove_group(&tpacpi_sensors_pdev->dev.kobj, - &thermal_temp_input16_group); + &thermal_temp_input8_group); break; case TPACPI_THERMAL_NONE: default: @@ -5766,9 +5801,8 @@ } } -static int thermal_read(char *p) +static int thermal_read(struct seq_file *m) { - int len = 0; int n, i; struct ibm_thermal_sensors_struct t; @@ -5776,16 +5810,16 @@ if (unlikely(n < 0)) return n; - len += sprintf(p + len, "temperatures:\t"); + seq_printf(m, "temperatures:\t"); if (n > 0) { for (i = 0; i < (n - 1); i++) - len += sprintf(p + len, "%d ", t.temp[i] / 1000); - len += sprintf(p + len, "%d\n", t.temp[i] / 1000); + seq_printf(m, "%d ", t.temp[i] / 1000); + seq_printf(m, "%d\n", t.temp[i] / 1000); } else - len += sprintf(p + len, "not supported\n"); + seq_printf(m, "not supported\n"); - return len; + return 0; } static struct ibm_struct thermal_driver_data = { @@ -5800,39 +5834,38 @@ static u8 ecdump_regs[256]; -static int ecdump_read(char *p) +static int ecdump_read(struct seq_file *m) { - int len = 0; int i, j; u8 v; - len += sprintf(p + len, "EC " + seq_printf(m, "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); + seq_printf(m, "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); + seq_printf(m, " *%02x", v); else - len += sprintf(p + len, " %02x", v); + seq_printf(m, " %02x", v); ecdump_regs[i + j] = v; } - len += sprintf(p + len, "\n"); + seq_putc(m, '\n'); if (j != 16) break; } /* These are way too dangerous to advertise openly... */ #if 0 - len += sprintf(p + len, "commands:\t0x 0x" + seq_printf(m, "commands:\t0x 0x" " ( is 00-ff, is 00-ff)\n"); - len += sprintf(p + len, "commands:\t0x " + seq_printf(m, "commands:\t0x " " ( is 00-ff, is 0-255)\n"); #endif - return len; + return 0; } static int ecdump_write(char *buf) @@ -6095,6 +6128,12 @@ return status & TP_EC_BACKLIGHT_LVLMSK; } +static void tpacpi_brightness_notify_change(void) +{ + backlight_force_update(ibm_backlight_device, + BACKLIGHT_UPDATE_HOTKEY); +} + static struct backlight_ops ibm_backlight_data = { .get_brightness = brightness_get, .update_status = brightness_update_status, @@ -6116,15 +6155,15 @@ TPACPI_Q_IBM('1', 'Y', TPACPI_BRGHT_Q_EC), /* T43/p ATI */ /* Models with ATI GPUs that can use ECNVRAM */ - TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC), + TPACPI_Q_IBM('1', 'R', TPACPI_BRGHT_Q_EC), /* R50,51 T40-42 */ TPACPI_Q_IBM('1', 'Q', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC), - TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC), + TPACPI_Q_IBM('7', '6', TPACPI_BRGHT_Q_EC), /* R52 */ TPACPI_Q_IBM('7', '8', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC), /* Models with Intel Extreme Graphics 2 */ - TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC), - TPACPI_Q_IBM('1', 'V', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_NOEC), - TPACPI_Q_IBM('1', 'W', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_NOEC), + TPACPI_Q_IBM('1', 'U', TPACPI_BRGHT_Q_NOEC), /* X40 */ + TPACPI_Q_IBM('1', 'V', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC), + TPACPI_Q_IBM('1', 'W', TPACPI_BRGHT_Q_ASK|TPACPI_BRGHT_Q_EC), /* Models with Intel GMA900 */ TPACPI_Q_IBM('7', '0', TPACPI_BRGHT_Q_NOEC), /* T43, R52 */ @@ -6223,9 +6262,9 @@ printk(TPACPI_INFO "detected a 16-level brightness capable ThinkPad\n"); - ibm_backlight_device = backlight_device_register( - TPACPI_BACKLIGHT_DEV_NAME, NULL, NULL, - &ibm_backlight_data); + ibm_backlight_device = backlight_device_register(TPACPI_BACKLIGHT_DEV_NAME, + NULL, NULL, + &ibm_backlight_data); if (IS_ERR(ibm_backlight_device)) { int rc = PTR_ERR(ibm_backlight_device); ibm_backlight_device = NULL; @@ -6244,11 +6283,15 @@ "or not on your ThinkPad\n", TPACPI_MAIL); } - ibm_backlight_device->props.max_brightness = - (tp_features.bright_16levels)? 15 : 7; ibm_backlight_device->props.brightness = b & TP_EC_BACKLIGHT_LVLMSK; backlight_update_status(ibm_backlight_device); + vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_BRGHT, + "brightness: registering brightness hotkeys " + "as change notification\n"); + tpacpi_hotkey_driver_mask_set(hotkey_driver_mask + | TP_ACPI_HKEY_BRGHTUP_MASK + | TP_ACPI_HKEY_BRGHTDWN_MASK);; return 0; } @@ -6273,23 +6316,22 @@ tpacpi_brightness_checkpoint_nvram(); } -static int brightness_read(char *p) +static int brightness_read(struct seq_file *m) { - int len = 0; int level; level = brightness_get(NULL); if (level < 0) { - len += sprintf(p + len, "level:\t\tunreadable\n"); + seq_printf(m, "level:\t\tunreadable\n"); } else { - len += sprintf(p + len, "level:\t\t%d\n", level); - len += sprintf(p + len, "commands:\tup, down\n"); - len += sprintf(p + len, "commands:\tlevel " + seq_printf(m, "level:\t\t%d\n", level); + seq_printf(m, "commands:\tup, down\n"); + seq_printf(m, "commands:\tlevel " " ( is 0-%d)\n", (tp_features.bright_16levels) ? 15 : 7); } - return len; + return 0; } static int brightness_write(char *buf) @@ -6325,6 +6367,9 @@ * Doing it this way makes the syscall restartable in case of EINTR */ rc = brightness_set(level); + if (!rc && ibm_backlight_device) + backlight_force_update(ibm_backlight_device, + BACKLIGHT_UPDATE_SYSFS); return (rc == -EINTR)? -ERESTARTSYS : rc; } @@ -6341,101 +6386,704 @@ * Volume subdriver */ -static int volume_offset = 0x30; +/* + * IBM ThinkPads have a simple volume controller with MUTE gating. + * Very early Lenovo ThinkPads follow the IBM ThinkPad spec. + * + * Since the *61 series (and probably also the later *60 series), Lenovo + * ThinkPads only implement the MUTE gate. + * + * EC register 0x30 + * Bit 6: MUTE (1 mutes sound) + * Bit 3-0: Volume + * Other bits should be zero as far as we know. + * + * This is also stored in CMOS NVRAM, byte 0x60, bit 6 (MUTE), and + * bits 3-0 (volume). Other bits in NVRAM may have other functions, + * such as bit 7 which is used to detect repeated presses of MUTE, + * and we leave them unchanged. + */ + +#ifdef CONFIG_THINKPAD_ACPI_ALSA_SUPPORT + +#define TPACPI_ALSA_DRVNAME "ThinkPad EC" +#define TPACPI_ALSA_SHRTNAME "ThinkPad Console Audio Control" +#define TPACPI_ALSA_MIXERNAME TPACPI_ALSA_SHRTNAME + +static int alsa_index = ~((1 << (SNDRV_CARDS - 3)) - 1); /* last three slots */ +static char *alsa_id = "ThinkPadEC"; +static int alsa_enable = SNDRV_DEFAULT_ENABLE1; + +struct tpacpi_alsa_data { + struct snd_card *card; + struct snd_ctl_elem_id *ctl_mute_id; + struct snd_ctl_elem_id *ctl_vol_id; +}; + +static struct snd_card *alsa_card; + +enum { + TP_EC_AUDIO = 0x30, + + /* TP_EC_AUDIO bits */ + TP_EC_AUDIO_MUTESW = 6, + + /* TP_EC_AUDIO bitmasks */ + TP_EC_AUDIO_LVL_MSK = 0x0F, + TP_EC_AUDIO_MUTESW_MSK = (1 << TP_EC_AUDIO_MUTESW), + + /* Maximum volume */ + TP_EC_VOLUME_MAX = 14, +}; + +enum tpacpi_volume_access_mode { + TPACPI_VOL_MODE_AUTO = 0, /* Not implemented yet */ + TPACPI_VOL_MODE_EC, /* Pure EC control */ + TPACPI_VOL_MODE_UCMS_STEP, /* UCMS step-based control: N/A */ + TPACPI_VOL_MODE_ECNVRAM, /* EC control w/ NVRAM store */ + TPACPI_VOL_MODE_MAX +}; + +enum tpacpi_volume_capabilities { + TPACPI_VOL_CAP_AUTO = 0, /* Use white/blacklist */ + TPACPI_VOL_CAP_VOLMUTE, /* Output vol and mute */ + TPACPI_VOL_CAP_MUTEONLY, /* Output mute only */ + TPACPI_VOL_CAP_MAX +}; -static int volume_read(char *p) +static enum tpacpi_volume_access_mode volume_mode = + TPACPI_VOL_MODE_MAX; + +static enum tpacpi_volume_capabilities volume_capabilities; +static int volume_control_allowed; + +/* + * Used to syncronize writers to TP_EC_AUDIO and + * TP_NVRAM_ADDR_MIXER, as we need to do read-modify-write + */ +static struct mutex volume_mutex; + +static void tpacpi_volume_checkpoint_nvram(void) { - int len = 0; - u8 level; + u8 lec = 0; + u8 b_nvram; + u8 ec_mask; + + if (volume_mode != TPACPI_VOL_MODE_ECNVRAM) + return; + if (!volume_control_allowed) + return; + + vdbg_printk(TPACPI_DBG_MIXER, + "trying to checkpoint mixer state to NVRAM...\n"); + + if (tp_features.mixer_no_level_control) + ec_mask = TP_EC_AUDIO_MUTESW_MSK; + else + ec_mask = TP_EC_AUDIO_MUTESW_MSK | TP_EC_AUDIO_LVL_MSK; - if (!acpi_ec_read(volume_offset, &level)) { - len += sprintf(p + len, "level:\t\tunreadable\n"); + if (mutex_lock_killable(&volume_mutex) < 0) + return; + + if (unlikely(!acpi_ec_read(TP_EC_AUDIO, &lec))) + goto unlock; + lec &= ec_mask; + b_nvram = nvram_read_byte(TP_NVRAM_ADDR_MIXER); + + if (lec != (b_nvram & ec_mask)) { + /* NVRAM needs update */ + b_nvram &= ~ec_mask; + b_nvram |= lec; + nvram_write_byte(b_nvram, TP_NVRAM_ADDR_MIXER); + dbg_printk(TPACPI_DBG_MIXER, + "updated NVRAM mixer status to 0x%02x (0x%02x)\n", + (unsigned int) lec, (unsigned int) b_nvram); } 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 " - " ( is 0-15)\n"); + vdbg_printk(TPACPI_DBG_MIXER, + "NVRAM mixer status already is 0x%02x (0x%02x)\n", + (unsigned int) lec, (unsigned int) b_nvram); } - return len; +unlock: + mutex_unlock(&volume_mutex); } -static int volume_write(char *buf) +static int volume_get_status_ec(u8 *status) { - int cmos_cmd, inc, i; - u8 level, mute; - int new_level, new_mute; - char *cmd; + u8 s; - 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 (!acpi_ec_read(TP_EC_AUDIO, &s)) + return -EIO; - 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; + *status = s; - if (new_level != level) { - /* mute doesn't change */ + dbg_printk(TPACPI_DBG_MIXER, "status 0x%02x\n", s); - cmos_cmd = (new_level > level) ? - TP_CMOS_VOLUME_UP : TP_CMOS_VOLUME_DOWN; - inc = new_level > level ? 1 : -1; + return 0; +} - if (mute && (issue_thinkpad_cmos_command(cmos_cmd) || - !acpi_ec_write(volume_offset, level))) - return -EIO; +static int volume_get_status(u8 *status) +{ + return volume_get_status_ec(status); +} - for (i = level; i != new_level; i += inc) - if (issue_thinkpad_cmos_command(cmos_cmd) || - !acpi_ec_write(volume_offset, i + inc)) - return -EIO; - - if (mute && - (issue_thinkpad_cmos_command(TP_CMOS_VOLUME_MUTE) || - !acpi_ec_write(volume_offset, new_level + mute))) { - return -EIO; - } +static int volume_set_status_ec(const u8 status) +{ + if (!acpi_ec_write(TP_EC_AUDIO, status)) + return -EIO; + + dbg_printk(TPACPI_DBG_MIXER, "set EC mixer to 0x%02x\n", status); + + return 0; +} + +static int volume_set_status(const u8 status) +{ + return volume_set_status_ec(status); +} + +/* returns < 0 on error, 0 on no change, 1 on change */ +static int __volume_set_mute_ec(const bool mute) +{ + int rc; + u8 s, n; + + if (mutex_lock_killable(&volume_mutex) < 0) + return -EINTR; + + rc = volume_get_status_ec(&s); + if (rc) + goto unlock; + + n = (mute) ? s | TP_EC_AUDIO_MUTESW_MSK : + s & ~TP_EC_AUDIO_MUTESW_MSK; + + if (n != s) { + rc = volume_set_status_ec(n); + if (!rc) + rc = 1; + } + +unlock: + mutex_unlock(&volume_mutex); + return rc; +} + +static int volume_alsa_set_mute(const bool mute) +{ + dbg_printk(TPACPI_DBG_MIXER, "ALSA: trying to %smute\n", + (mute) ? "" : "un"); + return __volume_set_mute_ec(mute); +} + +static int volume_set_mute(const bool mute) +{ + int rc; + + dbg_printk(TPACPI_DBG_MIXER, "trying to %smute\n", + (mute) ? "" : "un"); + + rc = __volume_set_mute_ec(mute); + return (rc < 0) ? rc : 0; +} + +/* returns < 0 on error, 0 on no change, 1 on change */ +static int __volume_set_volume_ec(const u8 vol) +{ + int rc; + u8 s, n; + + if (vol > TP_EC_VOLUME_MAX) + return -EINVAL; + + if (mutex_lock_killable(&volume_mutex) < 0) + return -EINTR; + + rc = volume_get_status_ec(&s); + if (rc) + goto unlock; + + n = (s & ~TP_EC_AUDIO_LVL_MSK) | vol; + + if (n != s) { + rc = volume_set_status_ec(n); + if (!rc) + rc = 1; + } + +unlock: + mutex_unlock(&volume_mutex); + return rc; +} + +static int volume_alsa_set_volume(const u8 vol) +{ + dbg_printk(TPACPI_DBG_MIXER, + "ALSA: trying to set volume level to %hu\n", vol); + return __volume_set_volume_ec(vol); +} + +static void volume_alsa_notify_change(void) +{ + struct tpacpi_alsa_data *d; + + if (alsa_card && alsa_card->private_data) { + d = alsa_card->private_data; + if (d->ctl_mute_id) + snd_ctl_notify(alsa_card, + SNDRV_CTL_EVENT_MASK_VALUE, + d->ctl_mute_id); + if (d->ctl_vol_id) + snd_ctl_notify(alsa_card, + SNDRV_CTL_EVENT_MASK_VALUE, + d->ctl_vol_id); + } +} + +static int volume_alsa_vol_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = TP_EC_VOLUME_MAX; + return 0; +} + +static int volume_alsa_vol_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + u8 s; + int rc; + + rc = volume_get_status(&s); + if (rc < 0) + return rc; + + ucontrol->value.integer.value[0] = s & TP_EC_AUDIO_LVL_MSK; + return 0; +} + +static int volume_alsa_vol_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + return volume_alsa_set_volume(ucontrol->value.integer.value[0]); +} + +#define volume_alsa_mute_info snd_ctl_boolean_mono_info + +static int volume_alsa_mute_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + u8 s; + int rc; + + rc = volume_get_status(&s); + if (rc < 0) + return rc; + + ucontrol->value.integer.value[0] = + (s & TP_EC_AUDIO_MUTESW_MSK) ? 0 : 1; + return 0; +} + +static int volume_alsa_mute_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + return volume_alsa_set_mute(!ucontrol->value.integer.value[0]); +} + +static struct snd_kcontrol_new volume_alsa_control_vol __devinitdata = { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Console Playback Volume", + .index = 0, + .access = SNDRV_CTL_ELEM_ACCESS_READ, + .info = volume_alsa_vol_info, + .get = volume_alsa_vol_get, +}; + +static struct snd_kcontrol_new volume_alsa_control_mute __devinitdata = { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Console Playback Switch", + .index = 0, + .access = SNDRV_CTL_ELEM_ACCESS_READ, + .info = volume_alsa_mute_info, + .get = volume_alsa_mute_get, +}; + +static void volume_suspend(pm_message_t state) +{ + tpacpi_volume_checkpoint_nvram(); +} + +static void volume_resume(void) +{ + volume_alsa_notify_change(); +} + +static void volume_shutdown(void) +{ + tpacpi_volume_checkpoint_nvram(); +} + +static void volume_exit(void) +{ + if (alsa_card) { + snd_card_free(alsa_card); + alsa_card = NULL; + } + + tpacpi_volume_checkpoint_nvram(); +} + +static int __init volume_create_alsa_mixer(void) +{ + struct snd_card *card; + struct tpacpi_alsa_data *data; + struct snd_kcontrol *ctl_vol; + struct snd_kcontrol *ctl_mute; + int rc; + + rc = snd_card_create(alsa_index, alsa_id, THIS_MODULE, + sizeof(struct tpacpi_alsa_data), &card); + if (rc < 0 || !card) { + printk(TPACPI_ERR + "Failed to create ALSA card structures: %d\n", rc); + return 1; + } + + BUG_ON(!card->private_data); + data = card->private_data; + data->card = card; + + strlcpy(card->driver, TPACPI_ALSA_DRVNAME, + sizeof(card->driver)); + strlcpy(card->shortname, TPACPI_ALSA_SHRTNAME, + sizeof(card->shortname)); + snprintf(card->mixername, sizeof(card->mixername), "ThinkPad EC %s", + (thinkpad_id.ec_version_str) ? + thinkpad_id.ec_version_str : "(unknown)"); + snprintf(card->longname, sizeof(card->longname), + "%s at EC reg 0x%02x, fw %s", card->shortname, TP_EC_AUDIO, + (thinkpad_id.ec_version_str) ? + thinkpad_id.ec_version_str : "unknown"); + + if (volume_control_allowed) { + volume_alsa_control_vol.put = volume_alsa_vol_put; + volume_alsa_control_vol.access = + SNDRV_CTL_ELEM_ACCESS_READWRITE; + + volume_alsa_control_mute.put = volume_alsa_mute_put; + volume_alsa_control_mute.access = + SNDRV_CTL_ELEM_ACCESS_READWRITE; + } + + if (!tp_features.mixer_no_level_control) { + ctl_vol = snd_ctl_new1(&volume_alsa_control_vol, NULL); + rc = snd_ctl_add(card, ctl_vol); + if (rc < 0) { + printk(TPACPI_ERR + "Failed to create ALSA volume control: %d\n", + rc); + goto err_exit; } + data->ctl_vol_id = &ctl_vol->id; + } - if (new_mute != mute) { - /* level doesn't change */ + ctl_mute = snd_ctl_new1(&volume_alsa_control_mute, NULL); + rc = snd_ctl_add(card, ctl_mute); + if (rc < 0) { + printk(TPACPI_ERR "Failed to create ALSA mute control: %d\n", + rc); + goto err_exit; + } + data->ctl_mute_id = &ctl_mute->id; - cmos_cmd = (new_mute) ? - TP_CMOS_VOLUME_MUTE : TP_CMOS_VOLUME_UP; + snd_card_set_dev(card, &tpacpi_pdev->dev); + rc = snd_card_register(card); + if (rc < 0) { + printk(TPACPI_ERR "Failed to register ALSA card: %d\n", rc); + goto err_exit; + } - if (issue_thinkpad_cmos_command(cmos_cmd) || - !acpi_ec_write(volume_offset, level + new_mute)) - return -EIO; + alsa_card = card; + return 0; + +err_exit: + snd_card_free(card); + return 1; +} + +#define TPACPI_VOL_Q_MUTEONLY 0x0001 /* Mute-only control available */ +#define TPACPI_VOL_Q_LEVEL 0x0002 /* Volume control available */ + +static const struct tpacpi_quirk volume_quirk_table[] __initconst = { + /* Whitelist volume level on all IBM by default */ + { .vendor = PCI_VENDOR_ID_IBM, + .bios = TPACPI_MATCH_ANY, + .ec = TPACPI_MATCH_ANY, + .quirks = TPACPI_VOL_Q_LEVEL }, + + /* Lenovo models with volume control (needs confirmation) */ + TPACPI_QEC_LNV('7', 'C', TPACPI_VOL_Q_LEVEL), /* R60/i */ + TPACPI_QEC_LNV('7', 'E', TPACPI_VOL_Q_LEVEL), /* R60e/i */ + TPACPI_QEC_LNV('7', '9', TPACPI_VOL_Q_LEVEL), /* T60/p */ + TPACPI_QEC_LNV('7', 'B', TPACPI_VOL_Q_LEVEL), /* X60/s */ + TPACPI_QEC_LNV('7', 'J', TPACPI_VOL_Q_LEVEL), /* X60t */ + TPACPI_QEC_LNV('7', '7', TPACPI_VOL_Q_LEVEL), /* Z60 */ + TPACPI_QEC_LNV('7', 'F', TPACPI_VOL_Q_LEVEL), /* Z61 */ + + /* Whitelist mute-only on all Lenovo by default */ + { .vendor = PCI_VENDOR_ID_LENOVO, + .bios = TPACPI_MATCH_ANY, + .ec = TPACPI_MATCH_ANY, + .quirks = TPACPI_VOL_Q_MUTEONLY } +}; + +static int __init volume_init(struct ibm_init_struct *iibm) +{ + unsigned long quirks; + int rc; + + vdbg_printk(TPACPI_DBG_INIT, "initializing volume subdriver\n"); + + mutex_init(&volume_mutex); + + /* + * Check for module parameter bogosity, note that we + * init volume_mode to TPACPI_VOL_MODE_MAX in order to be + * able to detect "unspecified" + */ + if (volume_mode > TPACPI_VOL_MODE_MAX) + return -EINVAL; + + if (volume_mode == TPACPI_VOL_MODE_UCMS_STEP) { + printk(TPACPI_ERR + "UCMS step volume mode not implemented, " + "please contact %s\n", TPACPI_MAIL); + return 1; + } + + if (volume_capabilities >= TPACPI_VOL_CAP_MAX) + return -EINVAL; + + /* + * The ALSA mixer is our primary interface. + * When disabled, don't install the subdriver at all + */ + if (!alsa_enable) { + vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, + "ALSA mixer disabled by parameter, " + "not loading volume subdriver...\n"); + return 1; + } + + quirks = tpacpi_check_quirks(volume_quirk_table, + ARRAY_SIZE(volume_quirk_table)); + + switch (volume_capabilities) { + case TPACPI_VOL_CAP_AUTO: + if (quirks & TPACPI_VOL_Q_MUTEONLY) + tp_features.mixer_no_level_control = 1; + else if (quirks & TPACPI_VOL_Q_LEVEL) + tp_features.mixer_no_level_control = 0; + else + return 1; /* no mixer */ + break; + case TPACPI_VOL_CAP_VOLMUTE: + tp_features.mixer_no_level_control = 0; + break; + case TPACPI_VOL_CAP_MUTEONLY: + tp_features.mixer_no_level_control = 1; + break; + default: + return 1; + } + + if (volume_capabilities != TPACPI_VOL_CAP_AUTO) + dbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, + "using user-supplied volume_capabilities=%d\n", + volume_capabilities); + + if (volume_mode == TPACPI_VOL_MODE_AUTO || + volume_mode == TPACPI_VOL_MODE_MAX) { + volume_mode = TPACPI_VOL_MODE_ECNVRAM; + + dbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, + "driver auto-selected volume_mode=%d\n", + volume_mode); + } else { + dbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, + "using user-supplied volume_mode=%d\n", + volume_mode); + } + + vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, + "mute is supported, volume control is %s\n", + str_supported(!tp_features.mixer_no_level_control)); + + rc = volume_create_alsa_mixer(); + if (rc) { + printk(TPACPI_ERR + "Could not create the ALSA mixer interface\n"); + return rc; + } + + printk(TPACPI_INFO + "Console audio control enabled, mode: %s\n", + (volume_control_allowed) ? + "override (read/write)" : + "monitor (read only)"); + + vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_MIXER, + "registering volume hotkeys as change notification\n"); + tpacpi_hotkey_driver_mask_set(hotkey_driver_mask + | TP_ACPI_HKEY_VOLUP_MASK + | TP_ACPI_HKEY_VOLDWN_MASK + | TP_ACPI_HKEY_MUTE_MASK); + + return 0; +} + +static int volume_read(struct seq_file *m) +{ + u8 status; + + if (volume_get_status(&status) < 0) { + seq_printf(m, "level:\t\tunreadable\n"); + } else { + if (tp_features.mixer_no_level_control) + seq_printf(m, "level:\t\tunsupported\n"); + else + seq_printf(m, "level:\t\t%d\n", + status & TP_EC_AUDIO_LVL_MSK); + + seq_printf(m, "mute:\t\t%s\n", + onoff(status, TP_EC_AUDIO_MUTESW)); + + if (volume_control_allowed) { + seq_printf(m, "commands:\tunmute, mute\n"); + if (!tp_features.mixer_no_level_control) { + seq_printf(m, + "commands:\tup, down\n"); + seq_printf(m, + "commands:\tlevel " + " ( is 0-%d)\n", + TP_EC_VOLUME_MAX); + } } } return 0; } +static int volume_write(char *buf) +{ + u8 s; + u8 new_level, new_mute; + int l; + char *cmd; + int rc; + + /* + * We do allow volume control at driver startup, so that the + * user can set initial state through the volume=... parameter hack. + */ + if (!volume_control_allowed && tpacpi_lifecycle != TPACPI_LIFE_INIT) { + if (unlikely(!tp_warned.volume_ctrl_forbidden)) { + tp_warned.volume_ctrl_forbidden = 1; + printk(TPACPI_NOTICE + "Console audio control in monitor mode, " + "changes are not allowed.\n"); + printk(TPACPI_NOTICE + "Use the volume_control=1 module parameter " + "to enable volume control\n"); + } + return -EPERM; + } + + rc = volume_get_status(&s); + if (rc < 0) + return rc; + + new_level = s & TP_EC_AUDIO_LVL_MSK; + new_mute = s & TP_EC_AUDIO_MUTESW_MSK; + + while ((cmd = next_cmd(&buf))) { + if (!tp_features.mixer_no_level_control) { + if (strlencmp(cmd, "up") == 0) { + if (new_mute) + new_mute = 0; + else if (new_level < TP_EC_VOLUME_MAX) + new_level++; + continue; + } else if (strlencmp(cmd, "down") == 0) { + if (new_mute) + new_mute = 0; + else if (new_level > 0) + new_level--; + continue; + } else if (sscanf(cmd, "level %u", &l) == 1 && + l >= 0 && l <= TP_EC_VOLUME_MAX) { + new_level = l; + continue; + } + } + if (strlencmp(cmd, "mute") == 0) + new_mute = TP_EC_AUDIO_MUTESW_MSK; + else if (strlencmp(cmd, "unmute") == 0) + new_mute = 0; + else + return -EINVAL; + } + + if (tp_features.mixer_no_level_control) { + tpacpi_disclose_usertask("procfs volume", "%smute\n", + new_mute ? "" : "un"); + rc = volume_set_mute(!!new_mute); + } else { + tpacpi_disclose_usertask("procfs volume", + "%smute and set level to %d\n", + new_mute ? "" : "un", new_level); + rc = volume_set_status(new_mute | new_level); + } + volume_alsa_notify_change(); + + return (rc == -EINTR) ? -ERESTARTSYS : rc; +} + static struct ibm_struct volume_driver_data = { .name = "volume", .read = volume_read, .write = volume_write, + .exit = volume_exit, + .suspend = volume_suspend, + .resume = volume_resume, + .shutdown = volume_shutdown, +}; + +#else /* !CONFIG_THINKPAD_ACPI_ALSA_SUPPORT */ + +#define alsa_card NULL + +static void inline volume_alsa_notify_change(void) +{ +} + +static int __init volume_init(struct ibm_init_struct *iibm) +{ + printk(TPACPI_INFO + "volume: disabled as there is no ALSA support in this kernel\n"); + + return 1; +} + +static struct ibm_struct volume_driver_data = { + .name = "volume", }; +#endif /* CONFIG_THINKPAD_ACPI_ALSA_SUPPORT */ + /************************************************************************* * Fan subdriver */ @@ -6461,7 +7109,7 @@ * * Fan speed changes of any sort (including those caused by the * disengaged mode) are usually done slowly by the firmware as the - * maximum ammount of fan duty cycle change per second seems to be + * maximum amount of fan duty cycle change per second seems to be * limited. * * Reading is not available if GFAN exists. @@ -6545,7 +7193,7 @@ * The speeds are stored on handles * (FANA:FAN9), (FANC:FANB), (FANE:FAND). * - * There are three default speed sets, acessible as handles: + * There are three default speed sets, accessible as handles: * FS1L,FS1M,FS1H; FS2L,FS2M,FS2H; FS3L,FS3M,FS3H * * ACPI DSDT switches which set is in use depending on various @@ -7510,9 +8158,8 @@ } } -static int fan_read(char *p) +static int fan_read(struct seq_file *m) { - int len = 0; int rc; u8 status; unsigned int speed = 0; @@ -7524,7 +8171,7 @@ if (rc < 0) return rc; - len += sprintf(p + len, "status:\t\t%s\n" + seq_printf(m, "status:\t\t%s\n" "level:\t\t%d\n", (status != 0) ? "enabled" : "disabled", status); break; @@ -7535,54 +8182,54 @@ if (rc < 0) return rc; - len += sprintf(p + len, "status:\t\t%s\n", + seq_printf(m, "status:\t\t%s\n", (status != 0) ? "enabled" : "disabled"); rc = fan_get_speed(&speed); if (rc < 0) return rc; - len += sprintf(p + len, "speed:\t\t%d\n", speed); + seq_printf(m, "speed:\t\t%d\n", speed); if (status & TP_EC_FAN_FULLSPEED) /* Disengaged mode takes precedence */ - len += sprintf(p + len, "level:\t\tdisengaged\n"); + seq_printf(m, "level:\t\tdisengaged\n"); else if (status & TP_EC_FAN_AUTO) - len += sprintf(p + len, "level:\t\tauto\n"); + seq_printf(m, "level:\t\tauto\n"); else - len += sprintf(p + len, "level:\t\t%d\n", status); + seq_printf(m, "level:\t\t%d\n", status); break; case TPACPI_FAN_NONE: default: - len += sprintf(p + len, "status:\t\tnot supported\n"); + seq_printf(m, "status:\t\tnot supported\n"); } if (fan_control_commands & TPACPI_FAN_CMD_LEVEL) { - len += sprintf(p + len, "commands:\tlevel "); + seq_printf(m, "commands:\tlevel "); switch (fan_control_access_mode) { case TPACPI_FAN_WR_ACPI_SFAN: - len += sprintf(p + len, " ( is 0-7)\n"); + seq_printf(m, " ( is 0-7)\n"); break; default: - len += sprintf(p + len, " ( is 0-7, " + seq_printf(m, " ( is 0-7, " "auto, disengaged, full-speed)\n"); break; } } if (fan_control_commands & TPACPI_FAN_CMD_ENABLE) - len += sprintf(p + len, "commands:\tenable, disable\n" + seq_printf(m, "commands:\tenable, disable\n" "commands:\twatchdog ( " "is 0 (off), 1-120 (seconds))\n"); if (fan_control_commands & TPACPI_FAN_CMD_SPEED) - len += sprintf(p + len, "commands:\tspeed " + seq_printf(m, "commands:\tspeed " " ( is 0-65535)\n"); - return len; + return 0; } static int fan_write_cmd_level(const char *cmd, int *rc) @@ -7724,10 +8371,23 @@ */ static void tpacpi_driver_event(const unsigned int hkey_event) { + if (ibm_backlight_device) { + switch (hkey_event) { + case TP_HKEY_EV_BRGHT_UP: + case TP_HKEY_EV_BRGHT_DOWN: + tpacpi_brightness_notify_change(); + } + } + if (alsa_card) { + switch (hkey_event) { + case TP_HKEY_EV_VOL_UP: + case TP_HKEY_EV_VOL_DOWN: + case TP_HKEY_EV_VOL_MUTE: + volume_alsa_notify_change(); + } + } } - - static void hotkey_driver_event(const unsigned int scancode) { tpacpi_driver_event(TP_HKEY_EV_HOTKEY_BASE + scancode); @@ -7856,19 +8516,20 @@ "%s installed\n", ibm->name); if (ibm->read) { - entry = create_proc_entry(ibm->name, - S_IFREG | S_IRUGO | S_IWUSR, - proc_dir); + mode_t mode = iibm->base_procfs_mode; + + if (!mode) + mode = S_IRUGO; + if (ibm->write) + mode |= S_IWUSR; + entry = proc_create_data(ibm->name, mode, proc_dir, + &dispatch_proc_fops, ibm); if (!entry) { printk(TPACPI_ERR "unable to create proc entry %s\n", ibm->name); ret = -ENODEV; goto err_out; } - entry->data = ibm; - entry->read_proc = &dispatch_procfs_read; - if (ibm->write) - entry->write_proc = &dispatch_procfs_write; ibm->flags.proc_created = 1; } @@ -8049,6 +8710,7 @@ #ifdef CONFIG_THINKPAD_ACPI_VIDEO { .init = video_init, + .base_procfs_mode = S_IRUSR, .data = &video_driver_data, }, #endif @@ -8080,6 +8742,7 @@ .data = &brightness_driver_data, }, { + .init = volume_init, .data = &volume_driver_data, }, { @@ -8115,36 +8778,61 @@ return -EINVAL; } -module_param(experimental, int, 0); +module_param(experimental, int, 0444); MODULE_PARM_DESC(experimental, "Enables experimental features when non-zero"); module_param_named(debug, dbg_level, uint, 0); MODULE_PARM_DESC(debug, "Sets debug level bit-mask"); -module_param(force_load, bool, 0); +module_param(force_load, bool, 0444); MODULE_PARM_DESC(force_load, "Attempts to load the driver even on a " "mis-identified ThinkPad when true"); -module_param_named(fan_control, fan_control_allowed, bool, 0); +module_param_named(fan_control, fan_control_allowed, bool, 0444); MODULE_PARM_DESC(fan_control, "Enables setting fan parameters features when true"); -module_param_named(brightness_mode, brightness_mode, uint, 0); +module_param_named(brightness_mode, brightness_mode, uint, 0444); MODULE_PARM_DESC(brightness_mode, "Selects brightness control strategy: " "0=auto, 1=EC, 2=UCMS, 3=EC+NVRAM"); -module_param(brightness_enable, uint, 0); +module_param(brightness_enable, uint, 0444); MODULE_PARM_DESC(brightness_enable, "Enables backlight control when 1, disables when 0"); -module_param(hotkey_report_mode, uint, 0); +module_param(hotkey_report_mode, uint, 0444); MODULE_PARM_DESC(hotkey_report_mode, "used for backwards compatibility with userspace, " "see documentation"); +#ifdef CONFIG_THINKPAD_ACPI_ALSA_SUPPORT +module_param_named(volume_mode, volume_mode, uint, 0444); +MODULE_PARM_DESC(volume_mode, + "Selects volume control strategy: " + "0=auto, 1=EC, 2=N/A, 3=EC+NVRAM"); + +module_param_named(volume_capabilities, volume_capabilities, uint, 0444); +MODULE_PARM_DESC(volume_capabilities, + "Selects the mixer capabilites: " + "0=auto, 1=volume and mute, 2=mute only"); + +module_param_named(volume_control, volume_control_allowed, bool, 0444); +MODULE_PARM_DESC(volume_control, + "Enables software override for the console audio " + "control when true"); + +/* ALSA module API parameters */ +module_param_named(index, alsa_index, int, 0444); +MODULE_PARM_DESC(index, "ALSA index for the ACPI EC Mixer"); +module_param_named(id, alsa_id, charp, 0444); +MODULE_PARM_DESC(id, "ALSA id for the ACPI EC Mixer"); +module_param_named(enable, alsa_enable, bool, 0444); +MODULE_PARM_DESC(enable, "Enable the ALSA interface for the ACPI EC Mixer"); +#endif /* CONFIG_THINKPAD_ACPI_ALSA_SUPPORT */ + #define TPACPI_PARAM(feature) \ module_param_call(feature, set_ibm_param, NULL, NULL, 0); \ MODULE_PARM_DESC(feature, "Simulates thinkpad-acpi procfs command " \ @@ -8163,25 +8851,25 @@ TPACPI_PARAM(fan); #ifdef CONFIG_THINKPAD_ACPI_DEBUGFACILITIES -module_param(dbg_wlswemul, uint, 0); +module_param(dbg_wlswemul, uint, 0444); MODULE_PARM_DESC(dbg_wlswemul, "Enables WLSW emulation"); module_param_named(wlsw_state, tpacpi_wlsw_emulstate, bool, 0); MODULE_PARM_DESC(wlsw_state, "Initial state of the emulated WLSW switch"); -module_param(dbg_bluetoothemul, uint, 0); +module_param(dbg_bluetoothemul, uint, 0444); MODULE_PARM_DESC(dbg_bluetoothemul, "Enables bluetooth switch emulation"); module_param_named(bluetooth_state, tpacpi_bluetooth_emulstate, bool, 0); MODULE_PARM_DESC(bluetooth_state, "Initial state of the emulated bluetooth switch"); -module_param(dbg_wwanemul, uint, 0); +module_param(dbg_wwanemul, uint, 0444); MODULE_PARM_DESC(dbg_wwanemul, "Enables WWAN switch emulation"); module_param_named(wwan_state, tpacpi_wwan_emulstate, bool, 0); MODULE_PARM_DESC(wwan_state, "Initial state of the emulated WWAN switch"); -module_param(dbg_uwbemul, uint, 0); +module_param(dbg_uwbemul, uint, 0444); MODULE_PARM_DESC(dbg_uwbemul, "Enables UWB switch emulation"); module_param_named(uwb_state, tpacpi_uwb_emulstate, bool, 0); MODULE_PARM_DESC(uwb_state, @@ -8374,6 +9062,7 @@ PCI_VENDOR_ID_IBM; tpacpi_inputdev->id.product = TPACPI_HKEY_INPUT_PRODUCT; tpacpi_inputdev->id.version = TPACPI_HKEY_INPUT_VERSION; + tpacpi_inputdev->dev.parent = &tpacpi_pdev->dev; } for (i = 0; i < ARRAY_SIZE(ibms_init); i++) { ret = ibm_init(&ibms_init[i]); @@ -8384,6 +9073,9 @@ return ret; } } + + tpacpi_lifecycle = TPACPI_LIFE_RUNNING; + ret = input_register_device(tpacpi_inputdev); if (ret < 0) { printk(TPACPI_ERR "unable to register input device\n"); @@ -8393,7 +9085,6 @@ tp_features.input_device_registered = 1; } - tpacpi_lifecycle = TPACPI_LIFE_RUNNING; return 0; } --- linux-2.6.32.orig/drivers/platform/x86/dell-wmi.c +++ linux-2.6.32/drivers/platform/x86/dell-wmi.c @@ -40,6 +40,10 @@ MODULE_ALIAS("wmi:"DELL_EVENT_GUID); +/* Temporary workaround until the WMI sysfs interface goes in. + Borrowed from acer-wmi */ +MODULE_ALIAS("dmi:*:*Dell*:*:"); + struct key_entry { char type; /* See KE_* below */ u16 code; @@ -158,8 +162,13 @@ struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL }; static struct key_entry *key; union acpi_object *obj; + acpi_status status; - wmi_get_event_data(value, &response); + status = wmi_get_event_data(value, &response); + if (status != AE_OK) { + printk(KERN_INFO "dell-wmi: bad event status 0x%x\n", status); + return; + } obj = (union acpi_object *)response.pointer; @@ -180,6 +189,7 @@ printk(KERN_INFO "dell-wmi: Unknown key %x pressed\n", buffer[1] & 0xFFFF); } + kfree(obj); } static int __init dell_wmi_input_setup(void) --- linux-2.6.32.orig/drivers/w1/slaves/w1_therm.c +++ linux-2.6.32/drivers/w1/slaves/w1_therm.c @@ -115,9 +115,8 @@ static inline int w1_DS18B20_convert_temp(u8 rom[9]) { - int t = ((s16)rom[1] << 8) | rom[0]; - t = t*1000/16; - return t; + s16 t = le16_to_cpup((__le16 *)rom); + return t*1000/16; } static inline int w1_DS18S20_convert_temp(u8 rom[9]) --- linux-2.6.32.orig/drivers/firewire/core-card.c +++ linux-2.6.32/drivers/firewire/core-card.c @@ -57,6 +57,9 @@ static LIST_HEAD(descriptor_list); static int descriptor_count; +/* ROM header, bus info block, root dir header, capabilities = 7 quadlets */ +static size_t config_rom_length = 1 + 4 + 1 + 1; + #define BIB_CRC(v) ((v) << 0) #define BIB_CRC_LENGTH(v) ((v) << 16) #define BIB_INFO_LENGTH(v) ((v) << 24) @@ -72,7 +75,7 @@ #define BIB_CMC ((1) << 30) #define BIB_IMC ((1) << 31) -static u32 *generate_config_rom(struct fw_card *card, size_t *config_rom_length) +static u32 *generate_config_rom(struct fw_card *card) { struct fw_descriptor *desc; static u32 config_rom[256]; @@ -131,7 +134,7 @@ for (i = 0; i < j; i += length + 1) length = fw_compute_block_crc(config_rom + i); - *config_rom_length = j; + WARN_ON(j != config_rom_length); return config_rom; } @@ -140,17 +143,24 @@ { struct fw_card *card; u32 *config_rom; - size_t length; list_for_each_entry (card, &card_list, link) { - config_rom = generate_config_rom(card, &length); - card->driver->set_config_rom(card, config_rom, length); + config_rom = generate_config_rom(card); + card->driver->set_config_rom(card, config_rom, + config_rom_length); } } +static size_t required_space(struct fw_descriptor *desc) +{ + /* descriptor + entry into root dir + optional immediate entry */ + return desc->length + 1 + (desc->immediate > 0 ? 1 : 0); +} + int fw_core_add_descriptor(struct fw_descriptor *desc) { size_t i; + int ret; /* * Check descriptor is valid; the length of all blocks in the @@ -166,15 +176,21 @@ mutex_lock(&card_mutex); - list_add_tail(&desc->link, &descriptor_list); - descriptor_count++; - if (desc->immediate > 0) + if (config_rom_length + required_space(desc) > 256) { + ret = -EBUSY; + } else { + list_add_tail(&desc->link, &descriptor_list); + config_rom_length += required_space(desc); descriptor_count++; - update_config_roms(); + if (desc->immediate > 0) + descriptor_count++; + update_config_roms(); + ret = 0; + } mutex_unlock(&card_mutex); - return 0; + return ret; } EXPORT_SYMBOL(fw_core_add_descriptor); @@ -183,6 +199,7 @@ mutex_lock(&card_mutex); list_del(&desc->link); + config_rom_length -= required_space(desc); descriptor_count--; if (desc->immediate > 0) descriptor_count--; @@ -436,7 +453,6 @@ u32 max_receive, u32 link_speed, u64 guid) { u32 *config_rom; - size_t length; int ret; card->max_receive = max_receive; @@ -445,8 +461,8 @@ mutex_lock(&card_mutex); - config_rom = generate_config_rom(card, &length); - ret = card->driver->enable(card, config_rom, length); + config_rom = generate_config_rom(card); + ret = card->driver->enable(card, config_rom, config_rom_length); if (ret == 0) list_add_tail(&card->link, &card_list); --- linux-2.6.32.orig/drivers/firewire/ohci.c +++ linux-2.6.32/drivers/firewire/ohci.c @@ -2209,6 +2209,13 @@ page = payload >> PAGE_SHIFT; offset = payload & ~PAGE_MASK; rest = p->payload_length; + /* + * The controllers I've tested have not worked correctly when + * second_req_count is zero. Rather than do something we know won't + * work, return an error + */ + if (rest == 0) + return -EINVAL; /* FIXME: make packet-per-buffer/dual-buffer a context option */ while (rest > 0) { @@ -2262,7 +2269,7 @@ unsigned long payload) { struct iso_context *ctx = container_of(base, struct iso_context, base); - struct descriptor *d = NULL, *pd = NULL; + struct descriptor *d, *pd; struct fw_iso_packet *p = packet; dma_addr_t d_bus, page_bus; u32 z, header_z, rest; @@ -2300,8 +2307,9 @@ d->data_address = cpu_to_le32(d_bus + (z * sizeof(*d))); rest = payload_per_buffer; + pd = d; for (j = 1; j < z; j++) { - pd = d + j; + pd++; pd->control = cpu_to_le16(DESCRIPTOR_STATUS | DESCRIPTOR_INPUT_MORE); @@ -2404,6 +2412,7 @@ #define PCI_VENDOR_ID_AGERE PCI_VENDOR_ID_ATT #define PCI_DEVICE_ID_AGERE_FW643 0x5901 +#define PCI_DEVICE_ID_TI_TSB43AB23 0x8024 static int __devinit pci_probe(struct pci_dev *dev, const struct pci_device_id *ent) @@ -2469,7 +2478,8 @@ #if !defined(CONFIG_X86_32) /* dual-buffer mode is broken with descriptor addresses above 2G */ if (dev->vendor == PCI_VENDOR_ID_TI && - dev->device == PCI_DEVICE_ID_TI_TSB43AB22) + (dev->device == PCI_DEVICE_ID_TI_TSB43AB22 || + dev->device == PCI_DEVICE_ID_TI_TSB43AB23)) ohci->use_dualbuffer = false; #endif --- linux-2.6.32.orig/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ linux-2.6.32/drivers/infiniband/ulp/ipoib/ipoib_cm.c @@ -752,6 +752,8 @@ if (++priv->tx_outstanding == ipoib_sendq_size) { ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n", tx->qp->qp_num); + if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP)) + ipoib_warn(priv, "request notify on send CQ failed\n"); netif_stop_queue(dev); } } --- linux-2.6.32.orig/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ linux-2.6.32/drivers/infiniband/ulp/ipoib/ipoib_main.c @@ -884,6 +884,7 @@ neigh->neighbour = neighbour; neigh->dev = dev; + memset(&neigh->dgid.raw, 0, sizeof (union ib_gid)); *to_ipoib_neigh(neighbour) = neigh; skb_queue_head_init(&neigh->queue); ipoib_cm_set(neigh, NULL); --- linux-2.6.32.orig/drivers/infiniband/ulp/iser/iser_memory.c +++ linux-2.6.32/drivers/infiniband/ulp/iser/iser_memory.c @@ -209,6 +209,8 @@ mem_copy->copy_buf = NULL; } +#define IS_4K_ALIGNED(addr) ((((unsigned long)addr) & ~MASK_4K) == 0) + /** * iser_sg_to_page_vec - Translates scatterlist entries to physical addresses * and returns the length of resulting physical address array (may be less than @@ -221,62 +223,52 @@ * where --few fragments of the same page-- are present in the SG as * consecutive elements. Also, it handles one entry SG. */ + static int iser_sg_to_page_vec(struct iser_data_buf *data, struct iser_page_vec *page_vec, struct ib_device *ibdev) { - struct scatterlist *sgl = (struct scatterlist *)data->buf; - struct scatterlist *sg; - u64 first_addr, last_addr, page; - int end_aligned; - unsigned int cur_page = 0; + struct scatterlist *sg, *sgl = (struct scatterlist *)data->buf; + u64 start_addr, end_addr, page, chunk_start = 0; unsigned long total_sz = 0; - int i; + unsigned int dma_len; + int i, new_chunk, cur_page, last_ent = data->dma_nents - 1; /* compute the offset of first element */ page_vec->offset = (u64) sgl[0].offset & ~MASK_4K; + new_chunk = 1; + cur_page = 0; for_each_sg(sgl, sg, data->dma_nents, i) { - unsigned int dma_len = ib_sg_dma_len(ibdev, sg); - + start_addr = ib_sg_dma_address(ibdev, sg); + if (new_chunk) + chunk_start = start_addr; + dma_len = ib_sg_dma_len(ibdev, sg); + end_addr = start_addr + dma_len; total_sz += dma_len; - first_addr = ib_sg_dma_address(ibdev, sg); - last_addr = first_addr + dma_len; - - end_aligned = !(last_addr & ~MASK_4K); - - /* continue to collect page fragments till aligned or SG ends */ - while (!end_aligned && (i + 1 < data->dma_nents)) { - sg = sg_next(sg); - i++; - dma_len = ib_sg_dma_len(ibdev, sg); - total_sz += dma_len; - last_addr = ib_sg_dma_address(ibdev, sg) + dma_len; - end_aligned = !(last_addr & ~MASK_4K); + /* collect page fragments until aligned or end of SG list */ + if (!IS_4K_ALIGNED(end_addr) && i < last_ent) { + new_chunk = 0; + continue; } + new_chunk = 1; - /* handle the 1st page in the 1st DMA element */ - if (cur_page == 0) { - page = first_addr & MASK_4K; - page_vec->pages[cur_page] = page; - cur_page++; + /* address of the first page in the contiguous chunk; + masking relevant for the very first SG entry, + which might be unaligned */ + page = chunk_start & MASK_4K; + do { + page_vec->pages[cur_page++] = page; page += SIZE_4K; - } else - page = first_addr; - - for (; page < last_addr; page += SIZE_4K) { - page_vec->pages[cur_page] = page; - cur_page++; - } - + } while (page < end_addr); } + page_vec->data_size = total_sz; iser_dbg("page_vec->data_size:%d cur_page %d\n", page_vec->data_size,cur_page); return cur_page; } -#define IS_4K_ALIGNED(addr) ((((unsigned long)addr) & ~MASK_4K) == 0) /** * iser_data_buf_aligned_len - Tries to determine the maximal correctly aligned @@ -284,42 +276,40 @@ * the number of entries which are aligned correctly. Supports the case where * consecutive SG elements are actually fragments of the same physcial page. */ -static unsigned int iser_data_buf_aligned_len(struct iser_data_buf *data, - struct ib_device *ibdev) +static int iser_data_buf_aligned_len(struct iser_data_buf *data, + struct ib_device *ibdev) { - struct scatterlist *sgl, *sg; - u64 end_addr, next_addr; - int i, cnt; - unsigned int ret_len = 0; + struct scatterlist *sgl, *sg, *next_sg = NULL; + u64 start_addr, end_addr; + int i, ret_len, start_check = 0; + + if (data->dma_nents == 1) + return 1; sgl = (struct scatterlist *)data->buf; + start_addr = ib_sg_dma_address(ibdev, sgl); - cnt = 0; for_each_sg(sgl, sg, data->dma_nents, i) { - /* iser_dbg("Checking sg iobuf [%d]: phys=0x%08lX " - "offset: %ld sz: %ld\n", i, - (unsigned long)sg_phys(sg), - (unsigned long)sg->offset, - (unsigned long)sg->length); */ - end_addr = ib_sg_dma_address(ibdev, sg) + - ib_sg_dma_len(ibdev, sg); - /* iser_dbg("Checking sg iobuf end address " - "0x%08lX\n", end_addr); */ - if (i + 1 < data->dma_nents) { - next_addr = ib_sg_dma_address(ibdev, sg_next(sg)); - /* are i, i+1 fragments of the same page? */ - if (end_addr == next_addr) { - cnt++; - continue; - } else if (!IS_4K_ALIGNED(end_addr)) { - ret_len = cnt + 1; - break; - } - } - cnt++; + if (start_check && !IS_4K_ALIGNED(start_addr)) + break; + + next_sg = sg_next(sg); + if (!next_sg) + break; + + end_addr = start_addr + ib_sg_dma_len(ibdev, sg); + start_addr = ib_sg_dma_address(ibdev, next_sg); + + if (end_addr == start_addr) { + start_check = 0; + continue; + } else + start_check = 1; + + if (!IS_4K_ALIGNED(end_addr)) + break; } - if (i == data->dma_nents) - ret_len = cnt; /* loop ended */ + ret_len = (next_sg) ? i : i+1; iser_dbg("Found %d aligned entries out of %d in sg:0x%p\n", ret_len, data->dma_nents, data); return ret_len; --- linux-2.6.32.orig/drivers/infiniband/hw/ipath/ipath_fs.c +++ linux-2.6.32/drivers/infiniband/hw/ipath/ipath_fs.c @@ -346,10 +346,8 @@ list_for_each_entry_safe(dd, tmp, &ipath_dev_list, ipath_list) { spin_unlock_irqrestore(&ipath_devs_lock, flags); ret = create_device_files(sb, dd); - if (ret) { - deactivate_locked_super(sb); + if (ret) goto bail; - } spin_lock_irqsave(&ipath_devs_lock, flags); } --- linux-2.6.32.orig/drivers/staging/Kconfig +++ linux-2.6.32/drivers/staging/Kconfig @@ -81,8 +81,6 @@ source "drivers/staging/rtl8192e/Kconfig" -source "drivers/staging/mimio/Kconfig" - source "drivers/staging/frontier/Kconfig" source "drivers/staging/android/Kconfig" @@ -101,7 +99,7 @@ source "drivers/staging/line6/Kconfig" -source "drivers/gpu/drm/radeon/Kconfig" +source "drivers/gpu/drm/nouveau/Kconfig" source "drivers/staging/octeon/Kconfig" --- linux-2.6.32.orig/drivers/staging/Makefile +++ linux-2.6.32/drivers/staging/Makefile @@ -5,10 +5,10 @@ obj-$(CONFIG_ET131X) += et131x/ obj-$(CONFIG_SLICOSS) += slicoss/ -obj-$(CONFIG_VIDEO_GO7007) += go7007/ +#obj-$(CONFIG_VIDEO_GO7007) += go7007/ obj-$(CONFIG_VIDEO_CX25821) += cx25821/ obj-$(CONFIG_USB_IP_COMMON) += usbip/ -obj-$(CONFIG_W35UND) += winbond/ +#obj-$(CONFIG_W35UND) += winbond/ obj-$(CONFIG_PRISM2_USB) += wlan-ng/ obj-$(CONFIG_ECHO) += echo/ obj-$(CONFIG_POCH) += poch/ @@ -23,10 +23,9 @@ obj-$(CONFIG_RTL8187SE) += rtl8187se/ obj-$(CONFIG_RTL8192SU) += rtl8192su/ obj-$(CONFIG_RTL8192E) += rtl8192e/ -obj-$(CONFIG_INPUT_MIMIO) += mimio/ obj-$(CONFIG_TRANZPORT) += frontier/ -obj-$(CONFIG_ANDROID) += android/ -obj-$(CONFIG_ANDROID) += dream/ +#obj-$(CONFIG_ANDROID) += android/ +#obj-$(CONFIG_ANDROID) += dream/ obj-$(CONFIG_DST) += dst/ obj-$(CONFIG_POHMELFS) += pohmelfs/ obj-$(CONFIG_B3DFG) += b3dfg/ --- linux-2.6.32.orig/drivers/staging/usbip/usbip_event.c +++ linux-2.6.32/drivers/staging/usbip/usbip_event.c @@ -117,6 +117,9 @@ { struct usbip_task *eh = &ud->eh; + if (eh->thread == current) + return; /* do not wait for myself */ + wait_for_completion(&eh->thread_done); usbip_dbg_eh("usbip_eh has finished\n"); } --- linux-2.6.32.orig/drivers/staging/rtl8187se/r8180_core.c +++ linux-2.6.32/drivers/staging/rtl8187se/r8180_core.c @@ -1830,7 +1830,7 @@ if(priv->rx_skb->len > 4) skb_trim(priv->rx_skb,priv->rx_skb->len-4); #ifndef RX_DONT_PASS_UL - if(!ieee80211_rx(priv->ieee80211, + if(!ieee80211_rtl_rx(priv->ieee80211, priv->rx_skb, &stats)){ #endif // RX_DONT_PASS_UL @@ -1936,11 +1936,11 @@ if (!check_nic_enought_desc(dev, priority)){ DMESGW("Error: no descriptor left by previous TX (avail %d) ", get_curr_tx_free_desc(dev, priority)); - ieee80211_stop_queue(priv->ieee80211); + ieee80211_rtl_stop_queue(priv->ieee80211); } rtl8180_tx(dev, skb->data, skb->len, priority, morefrag,0,rate); if (!check_nic_enought_desc(dev, priority)) - ieee80211_stop_queue(priv->ieee80211); + ieee80211_rtl_stop_queue(priv->ieee80211); spin_unlock_irqrestore(&priv->tx_lock,flags); } @@ -3846,7 +3846,7 @@ .ndo_set_mac_address = r8180_set_mac_adr, .ndo_validate_addr = eth_validate_addr, .ndo_change_mtu = eth_change_mtu, - .ndo_start_xmit = ieee80211_xmit, + .ndo_start_xmit = ieee80211_rtl_xmit, }; static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, @@ -4066,7 +4066,7 @@ spin_unlock_irqrestore(&priv->tx_lock,flags); if(enough_desc) - ieee80211_wake_queue(priv->ieee80211); + ieee80211_rtl_wake_queue(priv->ieee80211); } void rtl8180_tx_isr(struct net_device *dev, int pri,short error) --- linux-2.6.32.orig/drivers/staging/rtl8187se/r8180_wx.c +++ linux-2.6.32/drivers/staging/rtl8187se/r8180_wx.c @@ -377,7 +377,7 @@ // queue_work(priv->ieee80211->wq, &priv->ieee80211->wx_sync_scan_wq); //printk("start scan============================>\n"); ieee80211_softmac_ips_scan_syncro(priv->ieee80211); -//ieee80211_start_scan(priv->ieee80211); +//ieee80211_rtl_start_scan(priv->ieee80211); /* intentionally forget to up sem */ // up(&priv->ieee80211->wx_sem); ret = 0; --- linux-2.6.32.orig/drivers/staging/rtl8187se/ieee80211/ieee80211.h +++ linux-2.6.32/drivers/staging/rtl8187se/ieee80211/ieee80211.h @@ -1318,13 +1318,13 @@ struct sk_buff *frag, int hdr_len); -extern int ieee80211_xmit(struct sk_buff *skb, +extern int ieee80211_rtl_xmit(struct sk_buff *skb, struct net_device *dev); extern void ieee80211_txb_free(struct ieee80211_txb *); /* ieee80211_rx.c */ -extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, +extern int ieee80211_rtl_rx(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats); extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, struct ieee80211_hdr_4addr *header, @@ -1376,8 +1376,8 @@ extern void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee); extern void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee); extern void ieee80211_reset_queue(struct ieee80211_device *ieee); -extern void ieee80211_wake_queue(struct ieee80211_device *ieee); -extern void ieee80211_stop_queue(struct ieee80211_device *ieee); +extern void ieee80211_rtl_wake_queue(struct ieee80211_device *ieee); +extern void ieee80211_rtl_stop_queue(struct ieee80211_device *ieee); extern struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee); extern void ieee80211_start_send_beacons(struct ieee80211_device *ieee); extern void ieee80211_stop_send_beacons(struct ieee80211_device *ieee); @@ -1385,7 +1385,7 @@ extern void notify_wx_assoc_event(struct ieee80211_device *ieee); extern void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success); extern void SendDisassociation(struct ieee80211_device *ieee,u8* asSta,u8 asRsn); -extern void ieee80211_start_scan(struct ieee80211_device *ieee); +extern void ieee80211_rtl_start_scan(struct ieee80211_device *ieee); //Add for RF power on power off by lizhaoming 080512 extern void SendDisassociation(struct ieee80211_device *ieee, --- linux-2.6.32.orig/drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c +++ linux-2.6.32/drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c @@ -305,7 +305,7 @@ } /* SKBs are added to the ieee->tx_queue. */ -int ieee80211_xmit(struct sk_buff *skb, +int ieee80211_rtl_xmit(struct sk_buff *skb, struct net_device *dev) { struct ieee80211_device *ieee = netdev_priv(dev); --- linux-2.6.32.orig/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c +++ linux-2.6.32/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c @@ -470,7 +470,7 @@ /* 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). */ -int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, +int ieee80211_rtl_rx(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats) { struct net_device *dev = ieee->dev; --- linux-2.6.32.orig/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c +++ linux-2.6.32/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c @@ -689,7 +689,7 @@ } /* called with ieee->lock held */ -void ieee80211_start_scan(struct ieee80211_device *ieee) +void ieee80211_rtl_start_scan(struct ieee80211_device *ieee) { if(IS_DOT11D_ENABLE(ieee) ) { @@ -1196,7 +1196,7 @@ } } -void ieee80211_auth_challenge(struct ieee80211_device *ieee, u8 *challenge, int chlen) +void ieee80211_rtl_auth_challenge(struct ieee80211_device *ieee, u8 *challenge, int chlen) { u8 *c; struct sk_buff *skb; @@ -1898,7 +1898,7 @@ ieee80211_associate_step2(ieee); }else{ - ieee80211_auth_challenge(ieee, challenge, chlen); + ieee80211_rtl_auth_challenge(ieee, challenge, chlen); } }else{ ieee->softmac_stats.rx_auth_rs_err++; @@ -2047,7 +2047,7 @@ } -void ieee80211_wake_queue(struct ieee80211_device *ieee) +void ieee80211_rtl_wake_queue(struct ieee80211_device *ieee) { unsigned long flags; @@ -2089,7 +2089,7 @@ } -void ieee80211_stop_queue(struct ieee80211_device *ieee) +void ieee80211_rtl_stop_queue(struct ieee80211_device *ieee) { //unsigned long flags; //spin_lock_irqsave(&ieee->lock,flags); @@ -2301,7 +2301,7 @@ //#else if (ieee->state == IEEE80211_NOLINK){ ieee->actscanning = true; - ieee80211_start_scan(ieee); + ieee80211_rtl_start_scan(ieee); } //#endif spin_unlock_irqrestore(&ieee->lock, flags); @@ -2357,7 +2357,7 @@ if(ieee->state == IEEE80211_NOLINK){ ieee->beinretry = false; ieee->actscanning = true; - ieee80211_start_scan(ieee); + ieee80211_rtl_start_scan(ieee); } //YJ,add,080828, notify os here if(ieee->state == IEEE80211_NOLINK) --- linux-2.6.32.orig/drivers/staging/rt2860/common/2860_rtmp_init.c +++ linux-2.6.32/drivers/staging/rt2860/common/2860_rtmp_init.c @@ -716,7 +716,7 @@ { if ((pAd->RxRing.Cell[index].DmaBuf.AllocVa) && (pAd->RxRing.Cell[index].pNdisPacket)) { - PCI_UNMAP_SINGLE(pObj->pci_dev, pAd->RxRing.Cell[index].DmaBuf.AllocPa, pAd->RxRing.Cell[index].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); + PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[index].DmaBuf.AllocPa, pAd->RxRing.Cell[index].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); RELEASE_NDIS_PACKET(pAd, pAd->RxRing.Cell[index].pNdisPacket, NDIS_STATUS_SUCCESS); } } --- linux-2.6.32.orig/drivers/staging/comedi/comedi.h +++ linux-2.6.32/drivers/staging/comedi/comedi.h @@ -455,7 +455,7 @@ #define COMEDI_CB_EOS 1 /* end of scan */ #define COMEDI_CB_EOA 2 /* end of acquisition */ -#define COMEDI_CB_BLOCK 4 /* DEPRECATED: convenient block size */ +#define COMEDI_CB_BLOCK 4 /* data has arrived: wakes up read() / write() */ #define COMEDI_CB_EOBUF 8 /* DEPRECATED: end of buffer */ #define COMEDI_CB_ERROR 16 /* card error during acquisition */ #define COMEDI_CB_OVERFLOW 32 /* buffer overflow/underflow */ --- linux-2.6.32.orig/drivers/staging/comedi/drivers/usbdux.c +++ linux-2.6.32/drivers/staging/comedi/drivers/usbdux.c @@ -1,4 +1,4 @@ -#define DRIVER_VERSION "v2.2" +#define DRIVER_VERSION "v2.4" #define DRIVER_AUTHOR "Bernd Porr, BerndPorr@f2s.com" #define DRIVER_DESC "Stirling/ITL USB-DUX -- Bernd.Porr@f2s.com" /* @@ -80,6 +80,9 @@ * 2.0: PWM seems to be stable and is not interfering with the other functions * 2.1: changed PWM API * 2.2: added firmware kernel request to fix an udev problem + * 2.3: corrected a bug in bulk timeouts which were far too short + * 2.4: fixed a bug which causes the driver to hang when it ran out of data. + * Thanks to Jan-Matthias Braun and Ian to spot the bug and fix it. * */ @@ -101,8 +104,8 @@ #define BOARDNAME "usbdux" -/* timeout for the USB-transfer */ -#define EZTIMEOUT 30 +/* timeout for the USB-transfer in ms*/ +#define BULK_TIMEOUT 1000 /* constants for "firmware" upload and download */ #define USBDUXSUB_FIRMWARE 0xA0 @@ -531,6 +534,7 @@ } } /* tell comedi that data is there */ + s->async->events |= COMEDI_CB_BLOCK | COMEDI_CB_EOS; comedi_event(this_usbduxsub->comedidev, s); } @@ -750,7 +754,7 @@ /* Length */ 1, /* Timeout */ - EZTIMEOUT); + BULK_TIMEOUT); if (errcode < 0) { dev_err(&usbduxsub->interface->dev, "comedi_: control msg failed (start)\n"); @@ -780,7 +784,7 @@ /* Length */ 1, /* Timeout */ - EZTIMEOUT); + BULK_TIMEOUT); if (errcode < 0) { dev_err(&usbduxsub->interface->dev, "comedi_: control msg failed (stop)\n"); @@ -810,7 +814,7 @@ /* length */ len, /* timeout */ - EZTIMEOUT); + BULK_TIMEOUT); dev_dbg(&usbduxsub->interface->dev, "comedi_: result=%d\n", errcode); if (errcode < 0) { dev_err(&usbduxsub->interface->dev, "comedi_: upload failed\n"); @@ -1110,7 +1114,7 @@ usb_sndbulkpipe(this_usbduxsub->usbdev, COMMAND_OUT_EP), this_usbduxsub->dux_commands, SIZEOFDUXBUFFER, - &nsent, 10); + &nsent, BULK_TIMEOUT); if (result < 0) dev_err(&this_usbduxsub->interface->dev, "comedi%d: " "could not transmit dux_command to the usb-device, " @@ -1130,7 +1134,7 @@ usb_rcvbulkpipe(this_usbduxsub->usbdev, COMMAND_IN_EP), this_usbduxsub->insnBuffer, SIZEINSNBUF, - &nrec, 1); + &nrec, BULK_TIMEOUT); if (result < 0) { dev_err(&this_usbduxsub->interface->dev, "comedi%d: " "insn: USB error %d while receiving DUX command" --- linux-2.6.32.orig/drivers/staging/asus_oled/asus_oled.c +++ linux-2.6.32/drivers/staging/asus_oled/asus_oled.c @@ -194,9 +194,11 @@ { struct usb_interface *intf = to_usb_interface(dev); struct asus_oled_dev *odev = usb_get_intfdata(intf); - int temp = strict_strtoul(buf, 10, NULL); + unsigned long value; + if (strict_strtoul(buf, 10, &value)) + return -EINVAL; - enable_oled(odev, temp); + enable_oled(odev, value); return count; } @@ -207,10 +209,12 @@ { struct asus_oled_dev *odev = (struct asus_oled_dev *) dev_get_drvdata(device); + unsigned long value; - int temp = strict_strtoul(buf, 10, NULL); + if (strict_strtoul(buf, 10, &value)) + return -EINVAL; - enable_oled(odev, temp); + enable_oled(odev, value); return count; } --- linux-2.6.32.orig/drivers/staging/rt2870/2870_main_dev.c +++ linux-2.6.32/drivers/staging/rt2870/2870_main_dev.c @@ -142,6 +142,7 @@ { USB_DEVICE(0x7392, 0x7717) }, /* Edimax */ { USB_DEVICE(0x1EDA, 0x2310) }, /* AirTies 3070 */ { USB_DEVICE(0x1737, 0x0077) }, /* Linksys WUSB54GC-EU v3 */ + { USB_DEVICE(0x0411, 0x015D) }, /* Buffalo Airstation WLI-UC-GN */ { } /* Terminating entry */ }; --- linux-2.6.32.orig/drivers/staging/hv/netvsc_drv.c +++ linux-2.6.32/drivers/staging/hv/netvsc_drv.c @@ -413,8 +413,7 @@ if (!net_drv_obj->Base.OnDeviceAdd) return -1; - net = alloc_netdev(sizeof(struct net_device_context), "seth%d", - ether_setup); + net = alloc_etherdev(sizeof(struct net_device_context)); if (!net) return -1; --- linux-2.6.32.orig/drivers/staging/hv/RndisFilter.c +++ linux-2.6.32/drivers/staging/hv/RndisFilter.c @@ -756,6 +756,7 @@ ret = RndisFilterSetPacketFilter(Device, NDIS_PACKET_TYPE_BROADCAST | + NDIS_PACKET_TYPE_ALL_MULTICAST | NDIS_PACKET_TYPE_DIRECTED); if (ret == 0) Device->State = RNDIS_DEV_DATAINITIALIZED; --- linux-2.6.32.orig/drivers/staging/hv/Hv.c +++ linux-2.6.32/drivers/staging/hv/Hv.c @@ -306,9 +306,9 @@ DPRINT_ENTER(VMBUS); if (gHvContext.SignalEventBuffer) { + kfree(gHvContext.SignalEventBuffer); gHvContext.SignalEventBuffer = NULL; gHvContext.SignalEventParam = NULL; - kfree(gHvContext.SignalEventBuffer); } if (gHvContext.GuestId == HV_LINUX_GUEST_ID) { @@ -386,7 +386,7 @@ * retrieve the initialized message and event pages. Otherwise, we create and * initialize the message and event pages. */ -int HvSynicInit(u32 irqVector) +void HvSynicInit(void *irqarg) { u64 version; union hv_synic_simp simp; @@ -394,13 +394,14 @@ union hv_synic_sint sharedSint; union hv_synic_scontrol sctrl; u64 guestID; - int ret = 0; + u32 irqVector = *((u32 *)(irqarg)); + int cpu = smp_processor_id(); DPRINT_ENTER(VMBUS); if (!gHvContext.HypercallPage) { DPRINT_EXIT(VMBUS); - return ret; + return; } /* Check the version */ @@ -425,27 +426,27 @@ */ rdmsrl(HV_X64_MSR_GUEST_OS_ID, guestID); if (guestID == HV_LINUX_GUEST_ID) { - gHvContext.synICMessagePage[0] = + gHvContext.synICMessagePage[cpu] = phys_to_virt(simp.BaseSimpGpa << PAGE_SHIFT); - gHvContext.synICEventPage[0] = + gHvContext.synICEventPage[cpu] = phys_to_virt(siefp.BaseSiefpGpa << PAGE_SHIFT); } else { DPRINT_ERR(VMBUS, "unknown guest id!!"); goto Cleanup; } DPRINT_DBG(VMBUS, "MAPPED: Simp: %p, Sifep: %p", - gHvContext.synICMessagePage[0], - gHvContext.synICEventPage[0]); + gHvContext.synICMessagePage[cpu], + gHvContext.synICEventPage[cpu]); } else { - gHvContext.synICMessagePage[0] = osd_PageAlloc(1); - if (gHvContext.synICMessagePage[0] == NULL) { + gHvContext.synICMessagePage[cpu] = (void *)get_zeroed_page(GFP_ATOMIC); + if (gHvContext.synICMessagePage[cpu] == NULL) { DPRINT_ERR(VMBUS, "unable to allocate SYNIC message page!!"); goto Cleanup; } - gHvContext.synICEventPage[0] = osd_PageAlloc(1); - if (gHvContext.synICEventPage[0] == NULL) { + gHvContext.synICEventPage[cpu] = (void *)get_zeroed_page(GFP_ATOMIC); + if (gHvContext.synICEventPage[cpu] == NULL) { DPRINT_ERR(VMBUS, "unable to allocate SYNIC event page!!"); goto Cleanup; @@ -454,7 +455,7 @@ /* Setup the Synic's message page */ rdmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); simp.SimpEnabled = 1; - simp.BaseSimpGpa = virt_to_phys(gHvContext.synICMessagePage[0]) + simp.BaseSimpGpa = virt_to_phys(gHvContext.synICMessagePage[cpu]) >> PAGE_SHIFT; DPRINT_DBG(VMBUS, "HV_X64_MSR_SIMP msr set to: %llx", @@ -465,7 +466,7 @@ /* Setup the Synic's event page */ rdmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); siefp.SiefpEnabled = 1; - siefp.BaseSiefpGpa = virt_to_phys(gHvContext.synICEventPage[0]) + siefp.BaseSiefpGpa = virt_to_phys(gHvContext.synICEventPage[cpu]) >> PAGE_SHIFT; DPRINT_DBG(VMBUS, "HV_X64_MSR_SIEFP msr set to: %llx", @@ -501,32 +502,30 @@ DPRINT_EXIT(VMBUS); - return ret; + return; Cleanup: - ret = -1; - if (gHvContext.GuestId == HV_LINUX_GUEST_ID) { - if (gHvContext.synICEventPage[0]) - osd_PageFree(gHvContext.synICEventPage[0], 1); + if (gHvContext.synICEventPage[cpu]) + osd_PageFree(gHvContext.synICEventPage[cpu], 1); - if (gHvContext.synICMessagePage[0]) - osd_PageFree(gHvContext.synICMessagePage[0], 1); + if (gHvContext.synICMessagePage[cpu]) + osd_PageFree(gHvContext.synICMessagePage[cpu], 1); } DPRINT_EXIT(VMBUS); - - return ret; + return; } /** * HvSynicCleanup - Cleanup routine for HvSynicInit(). */ -void HvSynicCleanup(void) +void HvSynicCleanup(void *arg) { union hv_synic_sint sharedSint; union hv_synic_simp simp; union hv_synic_siefp siefp; + int cpu = smp_processor_id(); DPRINT_ENTER(VMBUS); @@ -539,6 +538,7 @@ sharedSint.Masked = 1; + /* Need to correctly cleanup in the case of SMP!!! */ /* Disable the interrupt */ wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); @@ -560,8 +560,8 @@ wrmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); - osd_PageFree(gHvContext.synICMessagePage[0], 1); - osd_PageFree(gHvContext.synICEventPage[0], 1); + osd_PageFree(gHvContext.synICMessagePage[cpu], 1); + osd_PageFree(gHvContext.synICEventPage[cpu], 1); } DPRINT_EXIT(VMBUS); --- linux-2.6.32.orig/drivers/staging/hv/Vmbus.c +++ linux-2.6.32/drivers/staging/hv/Vmbus.c @@ -129,7 +129,7 @@ /* strcpy(dev->name, "vmbus"); */ /* SynIC setup... */ - ret = HvSynicInit(*irqvector); + on_each_cpu(HvSynicInit, (void *)irqvector, 1); /* Connect to VMBus in the root partition */ ret = VmbusConnect(); @@ -150,7 +150,7 @@ DPRINT_ENTER(VMBUS); VmbusChannelReleaseUnattachedChannels(); VmbusDisconnect(); - HvSynicCleanup(); + on_each_cpu(HvSynicCleanup, NULL, 1); DPRINT_EXIT(VMBUS); return ret; @@ -173,7 +173,8 @@ */ static void VmbusOnMsgDPC(struct hv_driver *drv) { - void *page_addr = gHvContext.synICMessagePage[0]; + int cpu = smp_processor_id(); + void *page_addr = gHvContext.synICMessagePage[cpu]; struct hv_message *msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT; struct hv_message *copied; @@ -230,11 +231,12 @@ static int VmbusOnISR(struct hv_driver *drv) { int ret = 0; + int cpu = smp_processor_id(); void *page_addr; struct hv_message *msg; union hv_synic_event_flags *event; - page_addr = gHvContext.synICMessagePage[0]; + page_addr = gHvContext.synICMessagePage[cpu]; msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT; DPRINT_ENTER(VMBUS); @@ -248,7 +250,7 @@ } /* TODO: Check if there are events to be process */ - page_addr = gHvContext.synICEventPage[0]; + page_addr = gHvContext.synICEventPage[cpu]; event = (union hv_synic_event_flags *)page_addr + VMBUS_MESSAGE_SINT; /* Since we are a child, we only need to check bit 0 */ --- linux-2.6.32.orig/drivers/staging/hv/Hv.h +++ linux-2.6.32/drivers/staging/hv/Hv.h @@ -93,7 +93,7 @@ }, }; -#define MAX_NUM_CPUS 1 +#define MAX_NUM_CPUS 32 struct hv_input_signal_event_buffer { @@ -137,8 +137,8 @@ extern u16 HvSignalEvent(void); -extern int HvSynicInit(u32 irqVector); +extern void HvSynicInit(void *irqarg); -extern void HvSynicCleanup(void); +extern void HvSynicCleanup(void *arg); #endif /* __HV_H__ */ --- linux-2.6.32.orig/drivers/staging/hv/vmbus_drv.c +++ linux-2.6.32/drivers/staging/hv/vmbus_drv.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include "osd.h" #include "logging.h" #include "vmbus.h" @@ -946,6 +948,19 @@ } } +static struct dmi_system_id __initdata microsoft_hv_dmi_table[] = { + { + .ident = "Hyper-V", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), + DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"), + DMI_MATCH(DMI_BOARD_NAME, "Virtual Machine"), + }, + }, + { }, +}; +MODULE_DEVICE_TABLE(dmi, microsoft_hv_dmi_table); + static int __init vmbus_init(void) { int ret = 0; @@ -957,6 +972,9 @@ vmbus_loglevel, HIWORD(vmbus_loglevel), LOWORD(vmbus_loglevel)); /* Todo: it is used for loglevel, to be ported to new kernel. */ + if (!dmi_check_system(microsoft_hv_dmi_table)) + return -ENODEV; + ret = vmbus_bus_init(VmbusInitialize); DPRINT_EXIT(VMBUS_DRV); @@ -973,6 +991,18 @@ return; } +/* + * We use a PCI table to determine if we should autoload this driver This is + * needed by distro tools to determine if the hyperv drivers should be + * installed and/or configured. We don't do anything else with the table, but + * it needs to be present. + */ +const static struct pci_device_id microsoft_hv_pci_table[] = { + { PCI_DEVICE(0x1414, 0x5353) }, /* VGA compatible controller */ + { 0 } +}; +MODULE_DEVICE_TABLE(pci, microsoft_hv_pci_table); + MODULE_LICENSE("GPL"); module_param(vmbus_irq, int, S_IRUGO); module_param(vmbus_loglevel, int, S_IRUGO); --- linux-2.6.32.orig/drivers/edac/i5000_edac.c +++ linux-2.6.32/drivers/edac/i5000_edac.c @@ -577,7 +577,13 @@ debugf0("\tUncorrected bits= 0x%x\n", ue_errors); branch = EXTRACT_FBDCHAN_INDX(info->ferr_nf_fbd); - channel = branch; + + /* + * According with i5000 datasheet, bit 28 has no significance + * for errors M4Err-M12Err and M17Err-M21Err, on FERR_NF_FBD + */ + channel = branch & 2; + bank = NREC_BANK(info->nrecmema); rank = NREC_RANK(info->nrecmema); rdwr = NREC_RDWR(info->nrecmema); --- linux-2.6.32.orig/drivers/edac/amd64_edac.c +++ linux-2.6.32/drivers/edac/amd64_edac.c @@ -13,6 +13,8 @@ static int ecc_enable_override; module_param(ecc_enable_override, int, 0644); +static struct msr *msrs; + /* Lookup table for all possible MC control instances */ struct amd64_pvt; static struct mem_ctl_info *mci_lookup[EDAC_MAX_NUMNODES]; @@ -2618,6 +2620,90 @@ return empty; } +/* get all cores on this DCT */ +static void get_cpus_on_this_dct_cpumask(struct cpumask *mask, int nid) +{ + int cpu; + + for_each_online_cpu(cpu) + if (amd_get_nb_id(cpu) == nid) + cpumask_set_cpu(cpu, mask); +} + +/* check MCG_CTL on all the cpus on this node */ +static bool amd64_nb_mce_bank_enabled_on_node(int nid) +{ + cpumask_var_t mask; + int cpu, nbe; + bool ret = false; + + if (!zalloc_cpumask_var(&mask, GFP_KERNEL)) { + amd64_printk(KERN_WARNING, "%s: error allocating mask\n", + __func__); + return false; + } + + get_cpus_on_this_dct_cpumask(mask, nid); + + rdmsr_on_cpus(mask, MSR_IA32_MCG_CTL, msrs); + + for_each_cpu(cpu, mask) { + struct msr *reg = per_cpu_ptr(msrs, cpu); + nbe = reg->l & K8_MSR_MCGCTL_NBE; + + debugf0("core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n", + cpu, reg->q, + (nbe ? "enabled" : "disabled")); + + if (!nbe) + goto out; + } + ret = true; + +out: + free_cpumask_var(mask); + return ret; +} + +static int amd64_toggle_ecc_err_reporting(struct amd64_pvt *pvt, bool on) +{ + cpumask_var_t cmask; + int cpu; + + if (!zalloc_cpumask_var(&cmask, GFP_KERNEL)) { + amd64_printk(KERN_WARNING, "%s: error allocating mask\n", + __func__); + return false; + } + + get_cpus_on_this_dct_cpumask(cmask, pvt->mc_node_id); + + rdmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs); + + for_each_cpu(cpu, cmask) { + + struct msr *reg = per_cpu_ptr(msrs, cpu); + + if (on) { + if (reg->l & K8_MSR_MCGCTL_NBE) + pvt->flags.ecc_report = 1; + + reg->l |= K8_MSR_MCGCTL_NBE; + } else { + /* + * Turn off ECC reporting only when it was off before + */ + if (!pvt->flags.ecc_report) + reg->l &= ~K8_MSR_MCGCTL_NBE; + } + } + wrmsr_on_cpus(cmask, MSR_IA32_MCG_CTL, msrs); + + free_cpumask_var(cmask); + + return 0; +} + /* * Only if 'ecc_enable_override' is set AND BIOS had ECC disabled, do "we" * enable it. @@ -2625,17 +2711,12 @@ static void amd64_enable_ecc_error_reporting(struct mem_ctl_info *mci) { struct amd64_pvt *pvt = mci->pvt_info; - const cpumask_t *cpumask = cpumask_of_node(pvt->mc_node_id); - int cpu, idx = 0, err = 0; - struct msr msrs[cpumask_weight(cpumask)]; - u32 value; - u32 mask = K8_NBCTL_CECCEn | K8_NBCTL_UECCEn; + int err = 0; + u32 value, mask = K8_NBCTL_CECCEn | K8_NBCTL_UECCEn; if (!ecc_enable_override) return; - memset(msrs, 0, sizeof(msrs)); - amd64_printk(KERN_WARNING, "'ecc_enable_override' parameter is active, " "Enabling AMD ECC hardware now: CAUTION\n"); @@ -2651,16 +2732,9 @@ value |= mask; pci_write_config_dword(pvt->misc_f3_ctl, K8_NBCTL, value); - rdmsr_on_cpus(cpumask, K8_MSR_MCGCTL, msrs); - - for_each_cpu(cpu, cpumask) { - if (msrs[idx].l & K8_MSR_MCGCTL_NBE) - set_bit(idx, &pvt->old_mcgctl); - - msrs[idx].l |= K8_MSR_MCGCTL_NBE; - idx++; - } - wrmsr_on_cpus(cpumask, K8_MSR_MCGCTL, msrs); + if (amd64_toggle_ecc_err_reporting(pvt, ON)) + amd64_printk(KERN_WARNING, "Error enabling ECC reporting over " + "MCGCTL!\n"); err = pci_read_config_dword(pvt->misc_f3_ctl, K8_NBCFG, &value); if (err) @@ -2701,17 +2775,12 @@ static void amd64_restore_ecc_error_reporting(struct amd64_pvt *pvt) { - const cpumask_t *cpumask = cpumask_of_node(pvt->mc_node_id); - int cpu, idx = 0, err = 0; - struct msr msrs[cpumask_weight(cpumask)]; - u32 value; - u32 mask = K8_NBCTL_CECCEn | K8_NBCTL_UECCEn; + int err = 0; + u32 value, mask = K8_NBCTL_CECCEn | K8_NBCTL_UECCEn; if (!pvt->nbctl_mcgctl_saved) return; - memset(msrs, 0, sizeof(msrs)); - err = pci_read_config_dword(pvt->misc_f3_ctl, K8_NBCTL, &value); if (err) debugf0("Reading K8_NBCTL failed\n"); @@ -2721,66 +2790,9 @@ /* restore the NB Enable MCGCTL bit */ pci_write_config_dword(pvt->misc_f3_ctl, K8_NBCTL, value); - rdmsr_on_cpus(cpumask, K8_MSR_MCGCTL, msrs); - - for_each_cpu(cpu, cpumask) { - msrs[idx].l &= ~K8_MSR_MCGCTL_NBE; - msrs[idx].l |= - test_bit(idx, &pvt->old_mcgctl) << K8_MSR_MCGCTL_NBE; - idx++; - } - - wrmsr_on_cpus(cpumask, K8_MSR_MCGCTL, msrs); -} - -/* get all cores on this DCT */ -static void get_cpus_on_this_dct_cpumask(cpumask_t *mask, int nid) -{ - int cpu; - - for_each_online_cpu(cpu) - if (amd_get_nb_id(cpu) == nid) - cpumask_set_cpu(cpu, mask); -} - -/* check MCG_CTL on all the cpus on this node */ -static bool amd64_nb_mce_bank_enabled_on_node(int nid) -{ - cpumask_t mask; - struct msr *msrs; - int cpu, nbe, idx = 0; - bool ret = false; - - cpumask_clear(&mask); - - get_cpus_on_this_dct_cpumask(&mask, nid); - - msrs = kzalloc(sizeof(struct msr) * cpumask_weight(&mask), GFP_KERNEL); - if (!msrs) { - amd64_printk(KERN_WARNING, "%s: error allocating msrs\n", - __func__); - return false; - } - - rdmsr_on_cpus(&mask, MSR_IA32_MCG_CTL, msrs); - - for_each_cpu(cpu, &mask) { - nbe = msrs[idx].l & K8_MSR_MCGCTL_NBE; - - debugf0("core: %u, MCG_CTL: 0x%llx, NB MSR is %s\n", - cpu, msrs[idx].q, - (nbe ? "enabled" : "disabled")); - - if (!nbe) - goto out; - - idx++; - } - ret = true; - -out: - kfree(msrs); - return ret; + if (amd64_toggle_ecc_err_reporting(pvt, OFF)) + amd64_printk(KERN_WARNING, "Error restoring ECC reporting over " + "MCGCTL!\n"); } /* @@ -2789,10 +2801,11 @@ * the memory system completely. A command line option allows to force-enable * hardware ECC later in amd64_enable_ecc_error_reporting(). */ -static const char *ecc_warning = - "WARNING: ECC is disabled by BIOS. Module will NOT be loaded.\n" - " Either Enable ECC in the BIOS, or set 'ecc_enable_override'.\n" - " Also, use of the override can cause unknown side effects.\n"; +static const char *ecc_msg = + "ECC disabled in the BIOS or no ECC capability, module will not load.\n" + " Either enable ECC checking or force module loading by setting " + "'ecc_enable_override'.\n" + " (Note that use of the override may cause unknown side effects.)\n"; static int amd64_check_ecc_enabled(struct amd64_pvt *pvt) { @@ -2807,7 +2820,7 @@ ecc_enabled = !!(value & K8_NBCFG_ECC_ENABLE); if (!ecc_enabled) - amd64_printk(KERN_WARNING, "This node reports that Memory ECC " + amd64_printk(KERN_NOTICE, "This node reports that Memory ECC " "is currently disabled, set F3x%x[22] (%s).\n", K8_NBCFG, pci_name(pvt->misc_f3_ctl)); else @@ -2815,18 +2828,17 @@ nb_mce_en = amd64_nb_mce_bank_enabled_on_node(pvt->mc_node_id); if (!nb_mce_en) - amd64_printk(KERN_WARNING, "NB MCE bank disabled, set MSR " + amd64_printk(KERN_NOTICE, "NB MCE bank disabled, set MSR " "0x%08x[4] on node %d to enable.\n", MSR_IA32_MCG_CTL, pvt->mc_node_id); if (!ecc_enabled || !nb_mce_en) { if (!ecc_enable_override) { - amd64_printk(KERN_WARNING, "%s", ecc_warning); + amd64_printk(KERN_NOTICE, "%s", ecc_msg); return -ENODEV; } - } else - /* CLEAR the override, since BIOS controlled it */ ecc_enable_override = 0; + } return 0; } @@ -2909,7 +2921,6 @@ pvt->ext_model = boot_cpu_data.x86_model >> 4; pvt->mc_type_index = mc_type_index; pvt->ops = family_ops(mc_type_index); - pvt->old_mcgctl = 0; /* * We have the dram_f2_ctl device as an argument, now go reserve its @@ -3071,16 +3082,15 @@ amd64_free_mc_sibling_devices(pvt); - kfree(pvt); - mci->pvt_info = NULL; - - mci_lookup[pvt->mc_node_id] = NULL; - /* unregister from EDAC MCE */ amd_report_gart_errors(false); amd_unregister_ecc_decoder(amd64_decode_bus_error); /* Free the EDAC CORE resources */ + mci->pvt_info = NULL; + mci_lookup[pvt->mc_node_id] = NULL; + + kfree(pvt); edac_mc_free(mci); } @@ -3157,23 +3167,29 @@ static int __init amd64_edac_init(void) { int nb, err = -ENODEV; + bool load_ok = false; edac_printk(KERN_INFO, EDAC_MOD_STR, EDAC_AMD64_VERSION "\n"); opstate_init(); if (cache_k8_northbridges() < 0) - return err; + goto err_ret; + + msrs = msrs_alloc(); + if (!msrs) + goto err_ret; err = pci_register_driver(&amd64_pci_driver); if (err) - return err; + goto err_pci; /* * At this point, the array 'pvt_lookup[]' contains pointers to alloc'd * amd64_pvt structs. These will be used in the 2nd stage init function * to finish initialization of the MC instances. */ + err = -ENODEV; for (nb = 0; nb < num_k8_northbridges; nb++) { if (!pvt_lookup[nb]) continue; @@ -3181,16 +3197,21 @@ err = amd64_init_2nd_stage(pvt_lookup[nb]); if (err) goto err_2nd_stage; - } - amd64_setup_pci_device(); + load_ok = true; + } - return 0; + if (load_ok) { + amd64_setup_pci_device(); + return 0; + } err_2nd_stage: - debugf0("2nd stage failed\n"); pci_unregister_driver(&amd64_pci_driver); - +err_pci: + msrs_free(msrs); + msrs = NULL; +err_ret: return err; } @@ -3200,6 +3221,9 @@ edac_pci_release_generic_ctl(amd64_ctl_pci); pci_unregister_driver(&amd64_pci_driver); + + msrs_free(msrs); + msrs = NULL; } module_init(amd64_edac_init); --- linux-2.6.32.orig/drivers/edac/amd64_edac.h +++ linux-2.6.32/drivers/edac/amd64_edac.h @@ -147,6 +147,8 @@ #define MAX_CS_COUNT 8 #define DRAM_REG_COUNT 8 +#define ON true +#define OFF false /* * PCI-defined configuration space registers @@ -386,10 +388,7 @@ #define K8_NBCAP_DUAL_NODE BIT(1) #define K8_NBCAP_DCT_DUAL BIT(0) -/* - * MSR Regs - */ -#define K8_MSR_MCGCTL 0x017b +/* MSRs */ #define K8_MSR_MCGCTL_NBE BIT(4) #define K8_MSR_MC4CTL 0x0410 @@ -487,7 +486,6 @@ /* Save old hw registers' values before we modified them */ u32 nbctl_mcgctl_saved; /* When true, following 2 are valid */ u32 old_nbctl; - unsigned long old_mcgctl; /* per core on this node */ /* MC Type Index value: socket F vs Family 10h */ u32 mc_type_index; @@ -495,6 +493,7 @@ /* misc settings */ struct flags { unsigned long cf8_extcfg:1; + unsigned long ecc_report:1; } flags; }; --- linux-2.6.32.orig/drivers/edac/edac_mce_amd.c +++ linux-2.6.32/drivers/edac/edac_mce_amd.c @@ -295,7 +295,6 @@ void amd_decode_nb_mce(int node_id, struct err_regs *regs, int handle_errors) { u32 ec = ERROR_CODE(regs->nbsl); - u32 xec = EXT_ERROR_CODE(regs->nbsl); if (!handle_errors) return; @@ -311,11 +310,15 @@ if (regs->nbsh & K8_NBSH_ERR_CPU_VAL) pr_cont(", core: %u\n", (u8)(regs->nbsh & 0xf)); } else { - pr_cont(", core: %d\n", ilog2((regs->nbsh & 0xf))); - } + u8 assoc_cpus = regs->nbsh & 0xf; + + if (assoc_cpus > 0) + pr_cont(", core: %d", fls(assoc_cpus) - 1); + pr_cont("\n"); + } - pr_emerg("%s.\n", EXT_ERR_MSG(xec)); + pr_emerg("%s.\n", EXT_ERR_MSG(regs->nbsl)); if (BUS_ERROR(ec) && nb_bus_decoder) nb_bus_decoder(node_id, regs); @@ -378,7 +381,7 @@ ((m->status & MCI_STATUS_PCC) ? "yes" : "no")); /* do the two bits[14:13] together */ - ecc = m->status & (3ULL << 45); + ecc = (m->status >> 45) & 0x3; if (ecc) pr_cont(", %sECC Error", ((ecc == 2) ? "C" : "U")); --- linux-2.6.32.orig/drivers/input/input.c +++ linux-2.6.32/drivers/input/input.c @@ -45,6 +45,7 @@ ABS_MT_TOOL_TYPE, ABS_MT_BLOB_ID, ABS_MT_TRACKING_ID, + ABS_MT_PRESSURE, 0 }; static unsigned long input_abs_bypass[BITS_TO_LONGS(ABS_CNT)]; @@ -90,19 +91,26 @@ */ static void input_pass_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) -{ - struct input_handle *handle; + +{ struct input_handle *handle; rcu_read_lock(); handle = rcu_dereference(dev->grab); - if (handle) + if (handle) { handle->handler->event(handle, type, code, value); - else - list_for_each_entry_rcu(handle, &dev->h_list, d_node) - if (handle->open) - handle->handler->event(handle, - type, code, value); + goto out; + } + + handle = rcu_dereference(dev->filter); + if (handle && handle->handler->filter(handle, type, code, value)) + goto out; + + list_for_each_entry_rcu(handle, &dev->h_list, d_node) + if (handle->open) + handle->handler->event(handle, + type, code, value); +out: rcu_read_unlock(); } @@ -377,12 +385,15 @@ } EXPORT_SYMBOL(input_grab_device); -static void __input_release_device(struct input_handle *handle) +static void __input_release_device(struct input_handle *handle, bool filter) { struct input_dev *dev = handle->dev; - if (dev->grab == handle) { - rcu_assign_pointer(dev->grab, NULL); + if (handle == (filter ? dev->filter : dev->grab)) { + if (filter) + rcu_assign_pointer(dev->filter, NULL); + else + rcu_assign_pointer(dev->grab, NULL); /* Make sure input_pass_event() notices that grab is gone */ synchronize_rcu(); @@ -406,12 +417,65 @@ struct input_dev *dev = handle->dev; mutex_lock(&dev->mutex); - __input_release_device(handle); + __input_release_device(handle, false); mutex_unlock(&dev->mutex); } EXPORT_SYMBOL(input_release_device); /** + * input_filter_device - allow input events to be filtered from higher layers + * @handle: input handle that wants to filter the device + * + * When a device is filtered by an input handle all events generated by + * the device are to this handle. If the filter function returns true then + * the event is discarded rather than being passed to any other input handles, + * otherwise it is passed to them as normal. Grabs will be handled before + * filters, so a grabbed device will not deliver events to a filter function. + */ +int input_filter_device(struct input_handle *handle) +{ + struct input_dev *dev = handle->dev; + int retval; + + retval = mutex_lock_interruptible(&dev->mutex); + if (retval) + return retval; + + if (dev->filter) { + retval = -EBUSY; + goto out; + } + + rcu_assign_pointer(dev->filter, handle); + synchronize_rcu(); + + out: + mutex_unlock(&dev->mutex); + return retval; +} +EXPORT_SYMBOL(input_filter_device); + +/** + * input_unfilter_device - removes a filter from a device + * @handle: input handle that owns the device + * + * Removes the filter from a device so that other input handles can + * start receiving unfiltered input events. Upon release all handlers + * attached to the device have their start() method called so they + * have a change to synchronize device state with the rest of the + * system. + */ +void input_unfilter_device(struct input_handle *handle) +{ + struct input_dev *dev = handle->dev; + + mutex_lock(&dev->mutex); + __input_release_device(handle, true); + mutex_unlock(&dev->mutex); +} +EXPORT_SYMBOL(input_unfilter_device); + +/** * input_open_device - open input device * @handle: handle through which device is being accessed * @@ -484,7 +548,9 @@ mutex_lock(&dev->mutex); - __input_release_device(handle); + /* Release both grabs and filters */ + __input_release_device(handle, false); + __input_release_device(handle, true); if (!--dev->users && dev->close) dev->close(dev); --- linux-2.6.32.orig/drivers/input/serio/i8042-x86ia64io.h +++ linux-2.6.32/drivers/input/serio/i8042-x86ia64io.h @@ -67,10 +67,12 @@ #include -static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = { +static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = { { - /* AUX LOOP command does not raise AUX IRQ */ - .ident = "Arima-Rioworks HDAMB", + /* + * Arima-Rioworks HDAMB - + * AUX LOOP command does not raise AUX IRQ + */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"), DMI_MATCH(DMI_BOARD_NAME, "HDAMB"), @@ -78,7 +80,7 @@ }, }, { - .ident = "ASUS G1S", + /* ASUS G1S */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."), DMI_MATCH(DMI_BOARD_NAME, "G1S"), @@ -86,8 +88,7 @@ }, }, { - /* AUX LOOP command does not raise AUX IRQ */ - .ident = "ASUS P65UP5", + /* ASUS P65UP5 - AUX LOOP command does not raise AUX IRQ */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"), @@ -95,7 +96,6 @@ }, }, { - .ident = "Compaq Proliant 8500", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"), @@ -103,7 +103,6 @@ }, }, { - .ident = "Compaq Proliant DL760", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"), @@ -111,7 +110,7 @@ }, }, { - .ident = "OQO Model 01", + /* OQO Model 01 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "OQO"), DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"), @@ -119,8 +118,7 @@ }, }, { - /* AUX LOOP does not work properly */ - .ident = "ULI EV4873", + /* ULI EV4873 - AUX LOOP does not work properly */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "ULI"), DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"), @@ -128,7 +126,7 @@ }, }, { - .ident = "Microsoft Virtual Machine", + /* Microsoft Virtual Machine */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"), @@ -136,7 +134,7 @@ }, }, { - .ident = "Medion MAM 2070", + /* Medion MAM 2070 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"), @@ -144,7 +142,7 @@ }, }, { - .ident = "Blue FB5601", + /* Blue FB5601 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "blue"), DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"), @@ -152,7 +150,7 @@ }, }, { - .ident = "Gigabyte M912", + /* Gigabyte M912 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), DMI_MATCH(DMI_PRODUCT_NAME, "M912"), @@ -160,7 +158,14 @@ }, }, { - .ident = "HP DV9700", + /* Gigabyte M1022M netbook */ + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co.,Ltd."), + DMI_MATCH(DMI_BOARD_NAME, "M1022E"), + DMI_MATCH(DMI_BOARD_VERSION, "1.02"), + }, + }, + { .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"), @@ -177,72 +182,72 @@ * ... apparently some Toshibas don't like MUX mode either and * die horrible death on reboot. */ -static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = { +static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { { - .ident = "Fujitsu Lifebook P7010/P7010D", + /* Fujitsu Lifebook P7010/P7010D */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), DMI_MATCH(DMI_PRODUCT_NAME, "P7010"), }, }, { - .ident = "Fujitsu Lifebook P7010", + /* Fujitsu Lifebook P7010 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"), }, }, { - .ident = "Fujitsu Lifebook P5020D", + /* Fujitsu Lifebook P5020D */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"), }, }, { - .ident = "Fujitsu Lifebook S2000", + /* Fujitsu Lifebook S2000 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"), }, }, { - .ident = "Fujitsu Lifebook S6230", + /* Fujitsu Lifebook S6230 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), }, }, { - .ident = "Fujitsu T70H", + /* Fujitsu T70H */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"), }, }, { - .ident = "Fujitsu-Siemens Lifebook T3010", + /* Fujitsu-Siemens Lifebook T3010 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"), }, }, { - .ident = "Fujitsu-Siemens Lifebook E4010", + /* Fujitsu-Siemens Lifebook E4010 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"), }, }, { - .ident = "Fujitsu-Siemens Amilo Pro 2010", + /* Fujitsu-Siemens Amilo Pro 2010 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"), }, }, { - .ident = "Fujitsu-Siemens Amilo Pro 2030", + /* Fujitsu-Siemens Amilo Pro 2030 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), @@ -253,7 +258,7 @@ * No data is coming from the touchscreen unless KBC * is in legacy mode. */ - .ident = "Panasonic CF-29", + /* Panasonic CF-29 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"), DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"), @@ -261,10 +266,10 @@ }, { /* - * Errors on MUX ports are reported without raising AUXDATA + * HP Pavilion DV4017EA - + * errors on MUX ports are reported without raising AUXDATA * causing "spurious NAK" messages. */ - .ident = "HP Pavilion DV4017EA", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"), @@ -272,9 +277,9 @@ }, { /* - * Like DV4017EA does not raise AUXERR for errors on MUX ports. + * HP Pavilion ZT1000 - + * like DV4017EA does not raise AUXERR for errors on MUX ports. */ - .ident = "HP Pavilion ZT1000", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), @@ -283,44 +288,41 @@ }, { /* - * Like DV4017EA does not raise AUXERR for errors on MUX ports. + * HP Pavilion DV4270ca - + * like DV4017EA does not raise AUXERR for errors on MUX ports. */ - .ident = "HP Pavilion DV4270ca", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"), }, }, { - .ident = "Toshiba P10", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"), }, }, { - .ident = "Toshiba Equium A110", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"), }, }, { - .ident = "Alienware Sentia", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), }, }, { - .ident = "Sharp Actius MM20", + /* Sharp Actius MM20 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "SHARP"), DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"), }, }, { - .ident = "Sony Vaio FS-115b", + /* Sony Vaio FS-115b */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"), @@ -328,73 +330,72 @@ }, { /* - * Reset and GET ID commands issued via KBD port are + * Sony Vaio FZ-240E - + * reset and GET ID commands issued via KBD port are * sometimes being delivered to AUX3. */ - .ident = "Sony Vaio FZ-240E", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"), }, }, { - .ident = "Amoi M636/A737", + /* Amoi M636/A737 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."), DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"), }, }, { - .ident = "Lenovo 3000 n100", + /* Lenovo 3000 n100 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), DMI_MATCH(DMI_PRODUCT_NAME, "076804U"), }, }, { - .ident = "Acer Aspire 1360", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"), }, }, { - .ident = "Gericom Bellagio", + /* Gericom Bellagio */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Gericom"), DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"), }, }, { - .ident = "IBM 2656", + /* IBM 2656 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "IBM"), DMI_MATCH(DMI_PRODUCT_NAME, "2656"), }, }, { - .ident = "Dell XPS M1530", + /* Dell XPS M1530 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"), }, }, { - .ident = "Compal HEL80I", + /* Compal HEL80I */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"), DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"), }, }, { - .ident = "Dell Vostro 1510", + /* Dell Vostro 1510 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), }, }, { - .ident = "Acer Aspire 5536", + /* Acer Aspire 5536 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"), @@ -404,65 +405,72 @@ { } }; -static struct dmi_system_id __initdata i8042_dmi_reset_table[] = { +static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { { - .ident = "MSI Wind U-100", + /* MSI Wind U-100 */ .matches = { DMI_MATCH(DMI_BOARD_NAME, "U-100"), DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), }, }, { - .ident = "LG Electronics X110", + /* LG Electronics X110 */ .matches = { DMI_MATCH(DMI_BOARD_NAME, "X110"), DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."), }, }, { - .ident = "Acer Aspire One 150", + /* Acer Aspire One 150 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"), }, }, { - .ident = "Advent 4211", + /* Advent 4211 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"), DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"), }, }, { - .ident = "Medion Akoya Mini E1210", + /* Medion Akoya Mini E1210 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), DMI_MATCH(DMI_PRODUCT_NAME, "E1210"), }, }, { - .ident = "Mivvy M310", + /* Medion Akoya E1222 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), + DMI_MATCH(DMI_PRODUCT_NAME, "E122X"), + }, + }, + { + /* Mivvy M310 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"), DMI_MATCH(DMI_PRODUCT_NAME, "N10"), }, }, { - .ident = "Dell Vostro 1320", + /* Dell Vostro 1320 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"), }, }, { - .ident = "Dell Vostro 1520", + /* Dell Vostro 1520 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"), }, }, { - .ident = "Dell Vostro 1720", + /* Dell Vostro 1720 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"), @@ -472,16 +480,16 @@ }; #ifdef CONFIG_PNP -static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { +static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = { { - .ident = "Intel MBO Desktop D845PESV", + /* Intel MBO Desktop D845PESV */ .matches = { DMI_MATCH(DMI_BOARD_NAME, "D845PESV"), DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), }, }, { - .ident = "MSI Wind U-100", + /* MSI Wind U-100 */ .matches = { DMI_MATCH(DMI_BOARD_NAME, "U-100"), DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), @@ -490,27 +498,23 @@ { } }; -static struct dmi_system_id __initdata i8042_dmi_laptop_table[] = { +static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = { { - .ident = "Portable", .matches = { DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ }, }, { - .ident = "Laptop", .matches = { DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */ }, }, { - .ident = "Notebook", .matches = { DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ }, }, { - .ident = "Sub-Notebook", .matches = { DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */ }, @@ -525,58 +529,65 @@ * Originally, this was just confined to older laptops, but a few Acer laptops * have turned up in 2007 that also need this again. */ -static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = { +static const struct dmi_system_id __initconst i8042_dmi_dritek_table[] = { + { + /* Acer Aspire 5610 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), + }, + }, { - .ident = "Acer Aspire 5630", + /* Acer Aspire 5630 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"), }, }, { - .ident = "Acer Aspire 5650", + /* Acer Aspire 5650 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"), }, }, { - .ident = "Acer Aspire 5680", + /* Acer Aspire 5680 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"), }, }, { - .ident = "Acer Aspire 5720", + /* Acer Aspire 5720 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"), }, }, { - .ident = "Acer Aspire 9110", + /* Acer Aspire 9110 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"), }, }, { - .ident = "Acer TravelMate 660", + /* Acer TravelMate 660 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), }, }, { - .ident = "Acer TravelMate 2490", + /* Acer TravelMate 2490 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"), }, }, { - .ident = "Acer TravelMate 4280", + /* Acer TravelMate 4280 */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"), --- linux-2.6.32.orig/drivers/input/tablet/wacom_wac.c +++ linux-2.6.32/drivers/input/tablet/wacom_wac.c @@ -1,7 +1,7 @@ /* * drivers/input/tablet/wacom_wac.c * - * USB Wacom Graphire and Wacom Intuos tablet support - Wacom specific code + * USB Wacom tablet support - Wacom specific code * */ @@ -65,9 +65,8 @@ prox = data[1] & 0x40; - wacom->id[0] = ERASER_DEVICE_ID; if (prox) { - + wacom->id[0] = ERASER_DEVICE_ID; pressure = (signed char)((data[7] << 1) | ((data[4] >> 2) & 1)); if (wacom->features->pressure_max > 255) pressure = (pressure << 1) | ((data[4] >> 6) & 1); @@ -608,54 +607,146 @@ return 1; } + +static void wacom_tpc_finger_in(struct wacom_wac *wacom, void *wcombo, char *data, int idx) +{ + wacom_report_abs(wcombo, ABS_X, + (data[2 + idx * 2] & 0xff) | ((data[3 + idx * 2] & 0x7f) << 8)); + wacom_report_abs(wcombo, ABS_Y, + (data[6 + idx * 2] & 0xff) | ((data[7 + idx * 2] & 0x7f) << 8)); + wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); + wacom_report_key(wcombo, wacom->tool[idx], 1); + if (idx) + wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0); + else + wacom_report_key(wcombo, BTN_TOUCH, 1); +} + +static void wacom_tpc_touch_out(struct wacom_wac *wacom, void *wcombo, int idx) +{ + wacom_report_abs(wcombo, ABS_X, 0); + wacom_report_abs(wcombo, ABS_Y, 0); + wacom_report_abs(wcombo, ABS_MISC, 0); + wacom_report_key(wcombo, wacom->tool[idx], 0); + if (idx) + wacom_input_event(wcombo, EV_MSC, MSC_SERIAL, 0xf0); + else + wacom_report_key(wcombo, BTN_TOUCH, 0); + return; +} + +static void wacom_tpc_touch_in(struct wacom_wac *wacom, void *wcombo) +{ + char *data = wacom->data; + struct urb *urb = ((struct wacom_combo *)wcombo)->urb; + static int firstFinger = 0; + static int secondFinger = 0; + + wacom->tool[0] = BTN_TOOL_DOUBLETAP; + wacom->id[0] = TOUCH_DEVICE_ID; + wacom->tool[1] = BTN_TOOL_TRIPLETAP; + + if (urb->actual_length != WACOM_PKGLEN_TPC1FG) { + switch (data[0]) { + case 6: + wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[2])); + wacom_report_abs(wcombo, ABS_Y, wacom_le16_to_cpu(&data[4])); + wacom_report_abs(wcombo, ABS_PRESSURE, wacom_le16_to_cpu(&data[6])); + wacom_report_key(wcombo, BTN_TOUCH, wacom_le16_to_cpu(&data[6])); + wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); + wacom_report_key(wcombo, wacom->tool[0], 1); + break; + case 13: + /* keep this byte to send proper out-prox event */ + wacom->id[1] = data[1] & 0x03; + + if (data[1] & 0x01) { + wacom_tpc_finger_in(wacom, wcombo, data, 0); + firstFinger = 1; + } else if (firstFinger) { + wacom_tpc_touch_out(wacom, wcombo, 0); + } + + if (data[1] & 0x02) { + /* sync first finger data */ + if (firstFinger) + wacom_input_sync(wcombo); + + wacom_tpc_finger_in(wacom, wcombo, data, 1); + secondFinger = 1; + } else if (secondFinger) { + /* sync first finger data */ + if (firstFinger) + wacom_input_sync(wcombo); + + wacom_tpc_touch_out(wacom, wcombo, 1); + secondFinger = 0; + } + if (!(data[1] & 0x01)) + firstFinger = 0; + break; + } + } else { + wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[1])); + wacom_report_abs(wcombo, ABS_Y, wacom_le16_to_cpu(&data[3])); + wacom_report_key(wcombo, BTN_TOUCH, 1); + wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); + wacom_report_key(wcombo, wacom->tool[0], 1); + } + return; +} + static int wacom_tpc_irq(struct wacom_wac *wacom, void *wcombo) { char *data = wacom->data; - int prox = 0, pressure; + int prox = 0, pressure, idx = -1; static int stylusInProx, touchInProx = 1, touchOut; struct urb *urb = ((struct wacom_combo *)wcombo)->urb; dbg("wacom_tpc_irq: received report #%d", data[0]); - if (urb->actual_length == 5 || data[0] == 6) { /* Touch data */ - if (urb->actual_length == 5) { /* with touch */ - prox = data[0] & 0x03; + if (urb->actual_length == WACOM_PKGLEN_TPC1FG || + data[0] == 6 || /* single touch */ + data[0] == 13) { /* 2FG touch */ + if (urb->actual_length == WACOM_PKGLEN_TPC1FG) { /* with touch */ + prox = data[0] & 0x01; } else { /* with capacity */ - prox = data[1] & 0x03; + if (data[0] == 6) + /* single touch */ + prox = data[1] & 0x01; + else + /* 2FG touch data */ + prox = data[1] & 0x03; } if (!stylusInProx) { /* stylus not in prox */ if (prox) { if (touchInProx) { - wacom->tool[1] = BTN_TOOL_DOUBLETAP; - wacom->id[0] = TOUCH_DEVICE_ID; - if (urb->actual_length != 5) { - wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[2])); - wacom_report_abs(wcombo, ABS_Y, wacom_le16_to_cpu(&data[4])); - wacom_report_abs(wcombo, ABS_PRESSURE, wacom_le16_to_cpu(&data[6])); - wacom_report_key(wcombo, BTN_TOUCH, wacom_le16_to_cpu(&data[6])); - } else { - wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[1])); - wacom_report_abs(wcombo, ABS_Y, wacom_le16_to_cpu(&data[3])); - wacom_report_key(wcombo, BTN_TOUCH, 1); - } - wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); - wacom_report_key(wcombo, wacom->tool[1], prox & 0x01); + wacom_tpc_touch_in(wacom, wcombo); touchOut = 1; return 1; } } else { - wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); - wacom_report_key(wcombo, wacom->tool[1], prox & 0x01); - wacom_report_key(wcombo, BTN_TOUCH, 0); + /* 2FGT out-prox */ + if ((data[0] & 0xff) == 13) { + idx = (wacom->id[1] & 0x01) - 1; + if (idx == 0) { + wacom_tpc_touch_out(wacom, wcombo, idx); + /* sync first finger event */ + if (wacom->id[1] & 0x02) + wacom_input_sync(wcombo); + } + idx = (wacom->id[1] & 0x02) - 1; + if (idx == 1) + wacom_tpc_touch_out(wacom, wcombo, idx); + } else /* one finger touch */ + wacom_tpc_touch_out(wacom, wcombo, 0); touchOut = 0; touchInProx = 1; return 1; } } else if (touchOut || !prox) { /* force touch out-prox */ - wacom_report_abs(wcombo, ABS_MISC, TOUCH_DEVICE_ID); - wacom_report_key(wcombo, wacom->tool[1], 0); - wacom_report_key(wcombo, BTN_TOUCH, 0); + wacom_tpc_touch_out(wacom, wcombo, 0); touchOut = 0; touchInProx = 1; return 1; @@ -665,38 +756,14 @@ touchInProx = 0; - wacom->id[0] = ERASER_DEVICE_ID; - - /* - * if going from out of proximity into proximity select between the eraser - * and the pen based on the state of the stylus2 button, choose eraser if - * pressed else choose pen. if not a proximity change from out to in, send - * an out of proximity for previous tool then a in for new tool. - */ if (prox) { /* in prox */ - if (!wacom->tool[0]) { + if (!wacom->id[0]) { /* Going into proximity select tool */ - wacom->tool[1] = (data[1] & 0x08) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; - if (wacom->tool[1] == BTN_TOOL_PEN) + wacom->tool[0] = (data[1] & 0x0c) ? BTN_TOOL_RUBBER : BTN_TOOL_PEN; + if (wacom->tool[0] == BTN_TOOL_PEN) wacom->id[0] = STYLUS_DEVICE_ID; - } else if (wacom->tool[1] == BTN_TOOL_RUBBER && !(data[1] & 0x08)) { - /* - * was entered with stylus2 pressed - * report out proximity for previous tool - */ - wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); - wacom_report_key(wcombo, wacom->tool[1], 0); - wacom_input_sync(wcombo); - - /* set new tool */ - wacom->tool[1] = BTN_TOOL_PEN; - wacom->id[0] = STYLUS_DEVICE_ID; - return 0; - } - if (wacom->tool[1] != BTN_TOOL_RUBBER) { - /* Unknown tool selected default to pen tool */ - wacom->tool[1] = BTN_TOOL_PEN; - wacom->id[0] = STYLUS_DEVICE_ID; + else + wacom->id[0] = ERASER_DEVICE_ID; } wacom_report_key(wcombo, BTN_STYLUS, data[1] & 0x02); wacom_report_key(wcombo, BTN_STYLUS2, data[1] & 0x10); @@ -706,17 +773,21 @@ if (pressure < 0) pressure = wacom->features->pressure_max + pressure + 1; wacom_report_abs(wcombo, ABS_PRESSURE, pressure); - wacom_report_key(wcombo, BTN_TOUCH, pressure); + wacom_report_key(wcombo, BTN_TOUCH, data[1] & 0x05); } else { + wacom_report_abs(wcombo, ABS_X, 0); + wacom_report_abs(wcombo, ABS_Y, 0); wacom_report_abs(wcombo, ABS_PRESSURE, 0); wacom_report_key(wcombo, BTN_STYLUS, 0); wacom_report_key(wcombo, BTN_STYLUS2, 0); wacom_report_key(wcombo, BTN_TOUCH, 0); + wacom->id[0] = 0; + /* pen is out so touch can be enabled now */ + touchInProx = 1; } - wacom_report_key(wcombo, wacom->tool[1], prox); + wacom_report_key(wcombo, wacom->tool[0], prox); wacom_report_abs(wcombo, ABS_MISC, wacom->id[0]); stylusInProx = prox; - wacom->tool[0] = prox; return 1; } return 0; @@ -751,6 +822,7 @@ return wacom_intuos_irq(wacom_wac, wcombo); case TABLETPC: + case TABLETPC2FG: return wacom_tpc_irq(wacom_wac, wcombo); default: @@ -791,9 +863,17 @@ input_dev_i4s(input_dev, wacom_wac); input_dev_i(input_dev, wacom_wac); break; + case TABLETPC2FG: + input_dev_tpc2fg(input_dev, wacom_wac); + /* fall through */ + case TABLETPC: + input_dev_tpc(input_dev, wacom_wac); + if (wacom_wac->features->device_type != BTN_TOOL_PEN) + break; /* no need to process stylus stuff */ + + /* fall through */ case PL: case PTU: - case TABLETPC: input_dev_pl(input_dev, wacom_wac); /* fall through */ case PENPARTNER: @@ -804,66 +884,69 @@ } static struct wacom_features wacom_features[] = { - { "Wacom Penpartner", 7, 5040, 3780, 255, 0, PENPARTNER }, - { "Wacom Graphire", 8, 10206, 7422, 511, 63, GRAPHIRE }, - { "Wacom Graphire2 4x5", 8, 10206, 7422, 511, 63, GRAPHIRE }, - { "Wacom Graphire2 5x7", 8, 13918, 10206, 511, 63, GRAPHIRE }, - { "Wacom Graphire3", 8, 10208, 7424, 511, 63, GRAPHIRE }, - { "Wacom Graphire3 6x8", 8, 16704, 12064, 511, 63, GRAPHIRE }, - { "Wacom Graphire4 4x5", 8, 10208, 7424, 511, 63, WACOM_G4 }, - { "Wacom Graphire4 6x8", 8, 16704, 12064, 511, 63, WACOM_G4 }, - { "Wacom BambooFun 4x5", 9, 14760, 9225, 511, 63, WACOM_MO }, - { "Wacom BambooFun 6x8", 9, 21648, 13530, 511, 63, WACOM_MO }, - { "Wacom Bamboo1 Medium",8, 16704, 12064, 511, 63, GRAPHIRE }, - { "Wacom Volito", 8, 5104, 3712, 511, 63, GRAPHIRE }, - { "Wacom PenStation2", 8, 3250, 2320, 255, 63, GRAPHIRE }, - { "Wacom Volito2 4x5", 8, 5104, 3712, 511, 63, GRAPHIRE }, - { "Wacom Volito2 2x3", 8, 3248, 2320, 511, 63, GRAPHIRE }, - { "Wacom PenPartner2", 8, 3250, 2320, 511, 63, GRAPHIRE }, - { "Wacom Bamboo", 9, 14760, 9225, 511, 63, WACOM_MO }, - { "Wacom Bamboo1", 8, 5104, 3712, 511, 63, GRAPHIRE }, - { "Wacom Intuos 4x5", 10, 12700, 10600, 1023, 31, INTUOS }, - { "Wacom Intuos 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, - { "Wacom Intuos 9x12", 10, 30480, 24060, 1023, 31, INTUOS }, - { "Wacom Intuos 12x12", 10, 30480, 31680, 1023, 31, INTUOS }, - { "Wacom Intuos 12x18", 10, 45720, 31680, 1023, 31, INTUOS }, - { "Wacom PL400", 8, 5408, 4056, 255, 0, PL }, - { "Wacom PL500", 8, 6144, 4608, 255, 0, PL }, - { "Wacom PL600", 8, 6126, 4604, 255, 0, PL }, - { "Wacom PL600SX", 8, 6260, 5016, 255, 0, PL }, - { "Wacom PL550", 8, 6144, 4608, 511, 0, PL }, - { "Wacom PL800", 8, 7220, 5780, 511, 0, PL }, - { "Wacom PL700", 8, 6758, 5406, 511, 0, PL }, - { "Wacom PL510", 8, 6282, 4762, 511, 0, PL }, - { "Wacom DTU710", 8, 34080, 27660, 511, 0, PL }, - { "Wacom DTF521", 8, 6282, 4762, 511, 0, PL }, - { "Wacom DTF720", 8, 6858, 5506, 511, 0, PL }, - { "Wacom DTF720a", 8, 6858, 5506, 511, 0, PL }, - { "Wacom Cintiq Partner",8, 20480, 15360, 511, 0, PTU }, - { "Wacom Intuos2 4x5", 10, 12700, 10600, 1023, 31, INTUOS }, - { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, - { "Wacom Intuos2 9x12", 10, 30480, 24060, 1023, 31, INTUOS }, - { "Wacom Intuos2 12x12", 10, 30480, 31680, 1023, 31, INTUOS }, - { "Wacom Intuos2 12x18", 10, 45720, 31680, 1023, 31, INTUOS }, - { "Wacom Intuos3 4x5", 10, 25400, 20320, 1023, 63, INTUOS3S }, - { "Wacom Intuos3 6x8", 10, 40640, 30480, 1023, 63, INTUOS3 }, - { "Wacom Intuos3 9x12", 10, 60960, 45720, 1023, 63, INTUOS3 }, - { "Wacom Intuos3 12x12", 10, 60960, 60960, 1023, 63, INTUOS3L }, - { "Wacom Intuos3 12x19", 10, 97536, 60960, 1023, 63, INTUOS3L }, - { "Wacom Intuos3 6x11", 10, 54204, 31750, 1023, 63, INTUOS3 }, - { "Wacom Intuos3 4x6", 10, 31496, 19685, 1023, 63, INTUOS3S }, - { "Wacom Intuos4 4x6", 10, 31496, 19685, 2047, 63, INTUOS4S }, - { "Wacom Intuos4 6x9", 10, 44704, 27940, 2047, 63, INTUOS4 }, - { "Wacom Intuos4 8x13", 10, 65024, 40640, 2047, 63, INTUOS4L }, - { "Wacom Intuos4 12x19", 10, 97536, 60960, 2047, 63, INTUOS4L }, - { "Wacom Cintiq 21UX", 10, 87200, 65600, 1023, 63, CINTIQ }, - { "Wacom Cintiq 20WSX", 10, 86680, 54180, 1023, 63, WACOM_BEE }, - { "Wacom Cintiq 12WX", 10, 53020, 33440, 1023, 63, WACOM_BEE }, - { "Wacom DTU1931", 8, 37832, 30305, 511, 0, PL }, - { "Wacom ISDv4 90", 8, 26202, 16325, 255, 0, TABLETPC }, - { "Wacom ISDv4 93", 8, 26202, 16325, 255, 0, TABLETPC }, - { "Wacom ISDv4 9A", 8, 26202, 16325, 255, 0, TABLETPC }, - { "Wacom Intuos2 6x8", 10, 20320, 16240, 1023, 31, INTUOS }, + { "Wacom Penpartner", WACOM_PKGLEN_PENPRTN, 5040, 3780, 255, 0, PENPARTNER }, + { "Wacom Graphire", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511, 63, GRAPHIRE }, + { "Wacom Graphire2 4x5", WACOM_PKGLEN_GRAPHIRE, 10206, 7422, 511, 63, GRAPHIRE }, + { "Wacom Graphire2 5x7", WACOM_PKGLEN_GRAPHIRE, 13918, 10206, 511, 63, GRAPHIRE }, + { "Wacom Graphire3", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511, 63, GRAPHIRE }, + { "Wacom Graphire3 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63, GRAPHIRE }, + { "Wacom Graphire4 4x5", WACOM_PKGLEN_GRAPHIRE, 10208, 7424, 511, 63, WACOM_G4 }, + { "Wacom Graphire4 6x8", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63, WACOM_G4 }, + { "Wacom BambooFun 4x5", WACOM_PKGLEN_BBFUN, 14760, 9225, 511, 63, WACOM_MO }, + { "Wacom BambooFun 6x8", WACOM_PKGLEN_BBFUN, 21648, 13530, 511, 63, WACOM_MO }, + { "Wacom Bamboo1 Medium", WACOM_PKGLEN_GRAPHIRE, 16704, 12064, 511, 63, GRAPHIRE }, + { "Wacom Volito", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63, GRAPHIRE }, + { "Wacom PenStation2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 255, 63, GRAPHIRE }, + { "Wacom Volito2 4x5", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63, GRAPHIRE }, + { "Wacom Volito2 2x3", WACOM_PKGLEN_GRAPHIRE, 3248, 2320, 511, 63, GRAPHIRE }, + { "Wacom PenPartner2", WACOM_PKGLEN_GRAPHIRE, 3250, 2320, 511, 63, GRAPHIRE }, + { "Wacom Bamboo", WACOM_PKGLEN_BBFUN, 14760, 9225, 511, 63, WACOM_MO }, + { "Wacom Bamboo1", WACOM_PKGLEN_GRAPHIRE, 5104, 3712, 511, 63, GRAPHIRE }, + { "Wacom Intuos 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023, 31, INTUOS }, + { "Wacom Intuos 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS }, + { "Wacom Intuos 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023, 31, INTUOS }, + { "Wacom Intuos 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023, 31, INTUOS }, + { "Wacom Intuos 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023, 31, INTUOS }, + { "Wacom PL400", WACOM_PKGLEN_GRAPHIRE, 5408, 4056, 255, 0, PL }, + { "Wacom PL500", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 255, 0, PL }, + { "Wacom PL600", WACOM_PKGLEN_GRAPHIRE, 6126, 4604, 255, 0, PL }, + { "Wacom PL600SX", WACOM_PKGLEN_GRAPHIRE, 6260, 5016, 255, 0, PL }, + { "Wacom PL550", WACOM_PKGLEN_GRAPHIRE, 6144, 4608, 511, 0, PL }, + { "Wacom PL800", WACOM_PKGLEN_GRAPHIRE, 7220, 5780, 511, 0, PL }, + { "Wacom PL700", WACOM_PKGLEN_GRAPHIRE, 6758, 5406, 511, 0, PL }, + { "Wacom PL510", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511, 0, PL }, + { "Wacom DTU710", WACOM_PKGLEN_GRAPHIRE, 34080, 27660, 511, 0, PL }, + { "Wacom DTF521", WACOM_PKGLEN_GRAPHIRE, 6282, 4762, 511, 0, PL }, + { "Wacom DTF720", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511, 0, PL }, + { "Wacom DTF720a", WACOM_PKGLEN_GRAPHIRE, 6858, 5506, 511, 0, PL }, + { "Wacom Cintiq Partner", WACOM_PKGLEN_GRAPHIRE, 20480, 15360, 511, 0, PTU }, + { "Wacom Intuos2 4x5", WACOM_PKGLEN_INTUOS, 12700, 10600, 1023, 31, INTUOS }, + { "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS }, + { "Wacom Intuos2 9x12", WACOM_PKGLEN_INTUOS, 30480, 24060, 1023, 31, INTUOS }, + { "Wacom Intuos2 12x12", WACOM_PKGLEN_INTUOS, 30480, 31680, 1023, 31, INTUOS }, + { "Wacom Intuos2 12x18", WACOM_PKGLEN_INTUOS, 45720, 31680, 1023, 31, INTUOS }, + { "Wacom Intuos3 4x5", WACOM_PKGLEN_INTUOS, 25400, 20320, 1023, 63, INTUOS3S }, + { "Wacom Intuos3 6x8", WACOM_PKGLEN_INTUOS, 40640, 30480, 1023, 63, INTUOS3 }, + { "Wacom Intuos3 9x12", WACOM_PKGLEN_INTUOS, 60960, 45720, 1023, 63, INTUOS3 }, + { "Wacom Intuos3 12x12", WACOM_PKGLEN_INTUOS, 60960, 60960, 1023, 63, INTUOS3L }, + { "Wacom Intuos3 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 1023, 63, INTUOS3L }, + { "Wacom Intuos3 6x11", WACOM_PKGLEN_INTUOS, 54204, 31750, 1023, 63, INTUOS3 }, + { "Wacom Intuos3 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 1023, 63, INTUOS3S }, + { "Wacom Intuos4 4x6", WACOM_PKGLEN_INTUOS, 31496, 19685, 2047, 63, INTUOS4S }, + { "Wacom Intuos4 6x9", WACOM_PKGLEN_INTUOS, 44704, 27940, 2047, 63, INTUOS4 }, + { "Wacom Intuos4 8x13", WACOM_PKGLEN_INTUOS, 65024, 40640, 2047, 63, INTUOS4L }, + { "Wacom Intuos4 12x19", WACOM_PKGLEN_INTUOS, 97536, 60960, 2047, 63, INTUOS4L }, + { "Wacom Cintiq 21UX", WACOM_PKGLEN_INTUOS, 87200, 65600, 1023, 63, CINTIQ }, + { "Wacom Cintiq 20WSX", WACOM_PKGLEN_INTUOS, 86680, 54180, 1023, 63, WACOM_BEE }, + { "Wacom Cintiq 12WX", WACOM_PKGLEN_INTUOS, 53020, 33440, 1023, 63, WACOM_BEE }, + { "Wacom DTU1931", WACOM_PKGLEN_GRAPHIRE, 37832, 30305, 511, 0, PL }, + { "Wacom ISDv4 90", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC }, + { "Wacom ISDv4 93", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC }, + { "Wacom ISDv4 9A", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255, 0, TABLETPC }, + { "Wacom ISDv4 9F", WACOM_PKGLEN_PENABLED, 26202, 16325, 255, 0, TABLETPC }, + { "Wacom ISDv4 E2", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG }, + { "Wacom ISDv4 E3", WACOM_PKGLEN_TPC2FG, 26202, 16325, 255, 0, TABLETPC2FG }, + { "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023, 31, INTUOS }, { } }; @@ -927,6 +1010,9 @@ { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x90) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x93) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x9A) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x9F) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xE2) }, + { USB_DEVICE(USB_VENDOR_ID_WACOM, 0xE3) }, { USB_DEVICE(USB_VENDOR_ID_WACOM, 0x47) }, { } }; --- linux-2.6.32.orig/drivers/input/tablet/wacom.h +++ linux-2.6.32/drivers/input/tablet/wacom.h @@ -1,7 +1,7 @@ /* * drivers/input/tablet/wacom.h * - * USB Wacom Graphire and Wacom Intuos tablet support + * USB Wacom tablet support * * Copyright (c) 2000-2004 Vojtech Pavlik * Copyright (c) 2000 Andreas Bach Aaen @@ -69,6 +69,9 @@ * v1.49 (pc) - Added support for USB Tablet PC (0x90, 0x93, and 0x9A) * v1.50 (pc) - Fixed a TabletPC touch bug in 2.6.28 * v1.51 (pc) - Added support for Intuos4 + * v1.52 (pc) - Query Wacom data upon system resume + * - add defines for features->type + * - add new devices (0x9F, 0xE2, and 0XE3) */ /* @@ -89,9 +92,9 @@ /* * Version Information */ -#define DRIVER_VERSION "v1.51" +#define DRIVER_VERSION "v1.52" #define DRIVER_AUTHOR "Vojtech Pavlik " -#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver" +#define DRIVER_DESC "USB Wacom tablet driver" #define DRIVER_LICENSE "GPL" MODULE_AUTHOR(DRIVER_AUTHOR); @@ -133,6 +136,8 @@ extern void input_dev_i4(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern void input_dev_pl(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern void input_dev_pt(struct input_dev *input_dev, struct wacom_wac *wacom_wac); +extern void input_dev_tpc(struct input_dev *input_dev, struct wacom_wac *wacom_wac); +extern void input_dev_tpc2fg(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern void input_dev_mo(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern void input_dev_bee(struct input_dev *input_dev, struct wacom_wac *wacom_wac); extern __u16 wacom_le16_to_cpu(unsigned char *data); --- linux-2.6.32.orig/drivers/input/tablet/wacom_sys.c +++ linux-2.6.32/drivers/input/tablet/wacom_sys.c @@ -1,7 +1,7 @@ /* * drivers/input/tablet/wacom_sys.c * - * USB Wacom Graphire and Wacom Intuos tablet support - system specific code + * USB Wacom tablet support - system specific code */ /* @@ -209,6 +209,7 @@ input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER) | + BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_STYLUS) | BIT_MASK(BTN_TOOL_MOUSE) | BIT_MASK(BTN_STYLUS2); input_set_abs_params(input_dev, ABS_DISTANCE, 0, wacom_wac->features->distance_max, 0, 0); } @@ -256,6 +257,7 @@ BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER) | + BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_STYLUS) | BIT_MASK(BTN_TOOL_MOUSE) | BIT_MASK(BTN_TOOL_BRUSH) | BIT_MASK(BTN_TOOL_PENCIL) | BIT_MASK(BTN_TOOL_AIRBRUSH) | BIT_MASK(BTN_TOOL_LENS) | BIT_MASK(BTN_STYLUS2); @@ -269,7 +271,8 @@ void input_dev_pl(struct input_dev *input_dev, struct wacom_wac *wacom_wac) { - input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_STYLUS2); + input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) | + BIT_MASK(BTN_STYLUS) | BIT_MASK(BTN_STYLUS2); } void input_dev_pt(struct input_dev *input_dev, struct wacom_wac *wacom_wac) @@ -277,12 +280,32 @@ input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER); } +void input_dev_tpc(struct input_dev *input_dev, struct wacom_wac *wacom_wac) +{ + if (wacom_wac->features->device_type == BTN_TOOL_DOUBLETAP || + wacom_wac->features->device_type == BTN_TOOL_TRIPLETAP) { + input_set_abs_params(input_dev, ABS_RX, 0, wacom_wac->features->x_phy, 0, 0); + input_set_abs_params(input_dev, ABS_RY, 0, wacom_wac->features->y_phy, 0, 0); + input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_DOUBLETAP); + } +} + +void input_dev_tpc2fg(struct input_dev *input_dev, struct wacom_wac *wacom_wac) +{ + if (wacom_wac->features->device_type == BTN_TOOL_TRIPLETAP) { + input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_TRIPLETAP); + input_dev->evbit[0] |= BIT_MASK(EV_MSC); + input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); + } +} + static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, - struct wacom_wac *wacom_wac) + struct wacom_features *features) { struct usb_device *dev = interface_to_usbdev(intf); - struct wacom_features *features = wacom_wac->features; - char limit = 0, result = 0; + char limit = 0; + /* result has to be defined as int for some devices */ + int result = 0; int i = 0, usage = WCM_UNDEFINED, finger = 0, pen = 0; unsigned char *report; @@ -328,13 +351,24 @@ case HID_USAGE_X: if (usage == WCM_DESKTOP) { if (finger) { - features->touch_x_max = - features->touch_y_max = - wacom_le16_to_cpu(&report[i + 3]); + features->device_type = BTN_TOOL_DOUBLETAP; + if (features->type == TABLETPC2FG) { + /* need to reset back */ + features->pktlen = WACOM_PKGLEN_TPC2FG; + features->device_type = BTN_TOOL_TRIPLETAP; + } features->x_max = + wacom_le16_to_cpu(&report[i + 3]); + features->x_phy = wacom_le16_to_cpu(&report[i + 6]); - i += 7; + features->unit = report[i + 9]; + features->unitExpo = report[i + 11]; + i += 12; } else if (pen) { + /* penabled only accepts exact bytes of data */ + if (features->type == TABLETPC2FG) + features->pktlen = WACOM_PKGLEN_PENABLED; + features->device_type = BTN_TOOL_PEN; features->x_max = wacom_le16_to_cpu(&report[i + 3]); i += 4; @@ -350,10 +384,35 @@ break; case HID_USAGE_Y: - if (usage == WCM_DESKTOP) - features->y_max = - wacom_le16_to_cpu(&report[i + 3]); - i += 4; + if (usage == WCM_DESKTOP) { + if (finger) { + features->device_type = BTN_TOOL_DOUBLETAP; + if (features->type == TABLETPC2FG) { + /* need to reset back */ + features->pktlen = WACOM_PKGLEN_TPC2FG; + features->device_type = BTN_TOOL_TRIPLETAP; + features->y_max = + wacom_le16_to_cpu(&report[i + 3]); + features->y_phy = + wacom_le16_to_cpu(&report[i + 6]); + i += 7; + } else { + features->y_max = + features->x_max; + features->y_phy = + wacom_le16_to_cpu(&report[i + 3]); + i += 4; + } + } else if (pen) { + /* penabled only accepts exact bytes of data */ + if (features->type == TABLETPC2FG) + features->pktlen = WACOM_PKGLEN_PENABLED; + features->device_type = BTN_TOOL_PEN; + features->y_max = + wacom_le16_to_cpu(&report[i + 3]); + i += 4; + } + } break; case HID_USAGE_FINGER: @@ -376,7 +435,7 @@ break; case HID_COLLECTION: - /* reset UsagePage ans Finger */ + /* reset UsagePage and Finger */ finger = usage = 0; break; } @@ -388,43 +447,92 @@ return result; } -static int wacom_query_tablet_data(struct usb_interface *intf) +static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_features *features) { unsigned char *rep_data; - int limit = 0; - int error; + int limit = 0, report_id = 2; + int error = -ENOMEM; rep_data = kmalloc(2, GFP_KERNEL); if (!rep_data) - return -ENOMEM; + return error; - do { - rep_data[0] = 2; - rep_data[1] = 2; - error = usb_set_report(intf, WAC_HID_FEATURE_REPORT, - 2, rep_data, 2); - if (error >= 0) - error = usb_get_report(intf, - WAC_HID_FEATURE_REPORT, 2, - rep_data, 2); - } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); + /* ask to report tablet data if it is 2FGT or not a Tablet PC */ + if (features->device_type == BTN_TOOL_TRIPLETAP) { + do { + rep_data[0] = 3; + rep_data[1] = 4; + report_id = 3; + error = usb_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 2); + if (error >= 0) + error = usb_get_report(intf, + WAC_HID_FEATURE_REPORT, report_id, + rep_data, 3); + } while ((error < 0 || rep_data[1] != 4) && limit++ < 5); + } else if (features->type != TABLETPC && features->type != TABLETPC2FG) { + do { + rep_data[0] = 2; + rep_data[1] = 2; + error = usb_set_report(intf, WAC_HID_FEATURE_REPORT, + report_id, rep_data, 2); + if (error >= 0) + error = usb_get_report(intf, + WAC_HID_FEATURE_REPORT, report_id, + rep_data, 2); + } while ((error < 0 || rep_data[1] != 2) && limit++ < 5); + } kfree(rep_data); return error < 0 ? error : 0; } +static int wacom_retrieve_hid_descriptor(struct usb_interface *intf, + struct wacom_features *features) +{ + int error = 0; + struct usb_host_interface *interface = intf->cur_altsetting; + struct hid_descriptor *hid_desc; + + /* default device to penabled */ + features->device_type = BTN_TOOL_PEN; + + /* only Tablet PCs need to retrieve the info */ + if ((features->type != TABLETPC) && (features->type != TABLETPC2FG)) + goto out; + + if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) { + if (usb_get_extra_descriptor(&interface->endpoint[0], + HID_DEVICET_REPORT, &hid_desc)) { + printk("wacom: can not retrieve extra class descriptor\n"); + error = 1; + goto out; + } + } + error = wacom_parse_hid(intf, hid_desc, features); + if (error) + goto out; + + /* touch device found but size is not defined. use default */ + if (features->device_type == BTN_TOOL_DOUBLETAP && !features->x_max) { + features->x_max = 1023; + features->y_max = 1023; + } + + out: + return error; +} + static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *id) { struct usb_device *dev = interface_to_usbdev(intf); - struct usb_host_interface *interface = intf->cur_altsetting; struct usb_endpoint_descriptor *endpoint; struct wacom *wacom; struct wacom_wac *wacom_wac; struct wacom_features *features; struct input_dev *input_dev; int error = -ENOMEM; - struct hid_descriptor *hid_desc; wacom = kzalloc(sizeof(struct wacom), GFP_KERNEL); wacom_wac = kzalloc(sizeof(struct wacom_wac), GFP_KERNEL); @@ -432,7 +540,7 @@ if (!wacom || !input_dev || !wacom_wac) goto fail1; - wacom_wac->data = usb_buffer_alloc(dev, 10, GFP_KERNEL, &wacom->data_dma); + wacom_wac->data = usb_buffer_alloc(dev, WACOM_PKGLEN_MAX, GFP_KERNEL, &wacom->data_dma); if (!wacom_wac->data) goto fail1; @@ -448,7 +556,7 @@ strlcat(wacom->phys, "/input0", sizeof(wacom->phys)); wacom_wac->features = features = get_wacom_feature(id); - BUG_ON(features->pktlen > 10); + BUG_ON(features->pktlen > WACOM_PKGLEN_MAX); input_dev->name = wacom_wac->features->name; wacom->wacom_wac = wacom_wac; @@ -463,47 +571,24 @@ endpoint = &intf->cur_altsetting->endpoint[0].desc; - /* Initialize touch_x_max and touch_y_max in case it is not defined */ - if (wacom_wac->features->type == TABLETPC) { - features->touch_x_max = 1023; - features->touch_y_max = 1023; - } else { - features->touch_x_max = 0; - features->touch_y_max = 0; - } - - /* TabletPC need to retrieve the physical and logical maximum from report descriptor */ - if (wacom_wac->features->type == TABLETPC) { - if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) { - if (usb_get_extra_descriptor(&interface->endpoint[0], - HID_DEVICET_REPORT, &hid_desc)) { - printk("wacom: can not retrive extra class descriptor\n"); - goto fail2; - } - } - error = wacom_parse_hid(intf, hid_desc, wacom_wac); - if (error) - goto fail2; - } + /* Retrieve the physical and logical size for OEM devices */ + error = wacom_retrieve_hid_descriptor(intf, features); + if (error) + goto fail2; input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); - input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) | - BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS); + input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOUCH); + input_set_abs_params(input_dev, ABS_X, 0, features->x_max, 4, 0); input_set_abs_params(input_dev, ABS_Y, 0, features->y_max, 4, 0); input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max, 0, 0); - if (features->type == TABLETPC) { - input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_DOUBLETAP); - input_set_abs_params(input_dev, ABS_RX, 0, features->touch_x_max, 4, 0); - input_set_abs_params(input_dev, ABS_RY, 0, features->touch_y_max, 4, 0); - } input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC); wacom_init_input_dev(input_dev, wacom_wac); usb_fill_int_urb(wacom->irq, dev, usb_rcvintpipe(dev, endpoint->bEndpointAddress), - wacom_wac->data, wacom_wac->features->pktlen, + wacom_wac->data, features->pktlen, wacom_sys_irq, wacom, endpoint->bInterval); wacom->irq->transfer_dma = wacom->data_dma; wacom->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; @@ -512,18 +597,14 @@ if (error) goto fail3; - /* - * Ask the tablet to report tablet data if it is not a Tablet PC. - * Note that if query fails it is not a hard failure. - */ - if (wacom_wac->features->type != TABLETPC) - wacom_query_tablet_data(intf); + /* Note that if query fails it is not a hard failure */ + wacom_query_tablet_data(intf, features); usb_set_intfdata(intf, wacom); return 0; fail3: usb_free_urb(wacom->irq); - fail2: usb_buffer_free(dev, 10, wacom_wac->data, wacom->data_dma); + fail2: usb_buffer_free(dev, WACOM_PKGLEN_MAX, wacom_wac->data, wacom->data_dma); fail1: input_free_device(input_dev); kfree(wacom); kfree(wacom_wac); @@ -539,7 +620,7 @@ usb_kill_urb(wacom->irq); input_unregister_device(wacom->dev); usb_free_urb(wacom->irq); - usb_buffer_free(interface_to_usbdev(intf), 10, + usb_buffer_free(interface_to_usbdev(intf), WACOM_PKGLEN_MAX, wacom->wacom_wac->data, wacom->data_dma); kfree(wacom->wacom_wac); kfree(wacom); @@ -559,13 +640,19 @@ static int wacom_resume(struct usb_interface *intf) { struct wacom *wacom = usb_get_intfdata(intf); + struct wacom_features *features = wacom->wacom_wac->features; int rv; mutex_lock(&wacom->lock); + + /* switch to wacom mode first */ + wacom_query_tablet_data(intf, features); + if (wacom->open) rv = usb_submit_urb(wacom->irq, GFP_NOIO); else rv = 0; + mutex_unlock(&wacom->lock); return rv; --- linux-2.6.32.orig/drivers/input/tablet/wacom_wac.h +++ linux-2.6.32/drivers/input/tablet/wacom_wac.h @@ -9,6 +9,19 @@ #ifndef WACOM_WAC_H #define WACOM_WAC_H +/* maximum packet length for USB devices */ +#define WACOM_PKGLEN_MAX 32 + +/* packet length for individual models */ +#define WACOM_PKGLEN_PENPRTN 7 +#define WACOM_PKGLEN_GRAPHIRE 8 +#define WACOM_PKGLEN_BBFUN 9 +#define WACOM_PKGLEN_INTUOS 10 +#define WACOM_PKGLEN_PENABLED 8 +#define WACOM_PKGLEN_TPC1FG 5 +#define WACOM_PKGLEN_TPC2FG 14 + +/* device IDs */ #define STYLUS_DEVICE_ID 0x02 #define TOUCH_DEVICE_ID 0x03 #define CURSOR_DEVICE_ID 0x06 @@ -32,6 +45,7 @@ WACOM_BEE, WACOM_MO, TABLETPC, + TABLETPC2FG, MAX_TYPE }; @@ -43,8 +57,11 @@ int pressure_max; int distance_max; int type; - int touch_x_max; - int touch_y_max; + int device_type; + int x_phy; + int y_phy; + unsigned char unit; + unsigned char unitExpo; }; struct wacom_wac { --- linux-2.6.32.orig/drivers/input/keyboard/atkbd.c +++ linux-2.6.32/drivers/input/keyboard/atkbd.c @@ -912,6 +912,14 @@ }; /* + * Fujitsu Siemens system with broken key release on volume keys and mute key + */ + +static unsigned int atkbd_amilo_xi_2428_forced_release_keys[] = { + 0xa0, 0xae, 0xb0, -1U +}; + +/* * Soltech TA12 system with broken key release on volume keys and mute key */ static unsigned int atkdb_soltech_ta12_forced_release_keys[] = { @@ -1695,6 +1703,34 @@ .driver_data = atkbd_amilo_xi3650_forced_release_keys, }, { + .ident = "Znote 6615WD", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Zepto"), + DMI_MATCH(DMI_PRODUCT_NAME, "Znote 6615WD"), + }, + .callback = atkbd_setup_forced_release, + .driver_data = atkbd_volume_forced_release_keys, + }, + { + .ident = "Znote 6625WD", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Zepto"), + DMI_MATCH(DMI_PRODUCT_NAME, "Znote"), + DMI_MATCH(DMI_PRODUCT_VERSION, "6625WD"), + }, + .callback = atkbd_setup_forced_release, + .driver_data = atkbd_volume_forced_release_keys, + }, + { + .ident = "AMILO Xi 2428", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), + DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 2428"), + }, + .callback = atkbd_setup_forced_release, + .driver_data = atkbd_amilo_xi_2428_forced_release_keys, + }, + { .ident = "Soltech Corporation TA12", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Soltech Corporation"), --- linux-2.6.32.orig/drivers/input/misc/winbond-cir.c +++ linux-2.6.32/drivers/input/misc/winbond-cir.c @@ -768,7 +768,7 @@ return; } - dev_info(dev, "IR-RC6 ad 0x%02X cm 0x%02X cu 0x%04X " + dev_dbg(dev, "IR-RC6 ad 0x%02X cm 0x%02X cu 0x%04X " "toggle %u mode %u scan 0x%08X\n", address, command, --- linux-2.6.32.orig/drivers/input/mouse/synaptics.h +++ linux-2.6.32/drivers/input/mouse/synaptics.h @@ -48,6 +48,8 @@ #define SYN_CAP_VALID(c) ((((c) & 0x00ff00) >> 8) == 0x47) #define SYN_EXT_CAP_REQUESTS(c) (((c) & 0x700000) >> 20) #define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12) +#define SYN_CAP_PRODUCT_ID(ec) (((ec) & 0xff0000) >> 16) +#define SYN_CAP_CLICKPAD(ec) (SYN_CAP_PRODUCT_ID(ec) == 0xe4) /* synaptics modes query bits */ #define SYN_MODE_ABSOLUTE(m) ((m) & (1 << 7)) @@ -103,6 +105,7 @@ unsigned char pkt_type; /* packet type - old, new, etc */ unsigned char mode; /* current mode byte */ int scroll; + struct synaptics_hw_state prev_hw; }; int synaptics_detect(struct psmouse *psmouse, bool set_properties); --- linux-2.6.32.orig/drivers/input/mouse/alps.h +++ linux-2.6.32/drivers/input/mouse/alps.h @@ -23,6 +23,7 @@ char phys[32]; /* Phys */ const struct alps_model_info *i;/* Info */ int prev_fin; /* Finger bit from previous packet */ + struct timer_list timer; }; #ifdef CONFIG_MOUSE_PS2_ALPS --- linux-2.6.32.orig/drivers/input/mouse/synaptics.c +++ linux-2.6.32/drivers/input/mouse/synaptics.c @@ -326,6 +326,45 @@ * Functions to interpret the absolute mode packets ****************************************************************************/ +/* left and right clickpad button ranges; + * the gap between them is interpreted as a middle-button click + */ +#define CLICKPAD_LEFT_BTN_X \ + ((XMAX_NOMINAL - XMIN_NOMINAL) * 2 / 5 + XMIN_NOMINAL) +#define CLICKPAD_RIGHT_BTN_X \ + ((XMAX_NOMINAL - XMIN_NOMINAL) * 3 / 5 + XMIN_NOMINAL) + +/* handle clickpad events */ +static void clickpad_process_packet(struct synaptics_data *priv, + struct synaptics_hw_state *hw) +{ + /* clickpad mode reports Y range from 0 to YMAX_NOMINAL, + * where the area Y < YMIN_NOMINAL is used as click buttons + */ + if (hw->y < YMIN_NOMINAL) { + /* button area */ + hw->z = 0; /* don't move pointer */ + /* clickpad reports only the middle button, and we need + * to fake left/right buttons depending on the touch position + */ + if (hw->middle) { /* clicked? */ + hw->middle = 0; + if (hw->x < CLICKPAD_LEFT_BTN_X) + hw->left = 1; + else if (hw->x > CLICKPAD_RIGHT_BTN_X) + hw->right = 1; + else + hw->middle = 1; + } + } else if (hw->middle) { + /* dragging */ + hw->left = priv->prev_hw.left; + hw->right = priv->prev_hw.right; + hw->middle = priv->prev_hw.middle; + } + priv->prev_hw = *hw; +} + static void synaptics_parse_hw_state(unsigned char buf[], struct synaptics_data *priv, struct synaptics_hw_state *hw) { memset(hw, 0, sizeof(struct synaptics_hw_state)); @@ -406,6 +445,9 @@ synaptics_parse_hw_state(psmouse->packet, priv, &hw); + if (SYN_CAP_CLICKPAD(priv->ext_cap)) + clickpad_process_packet(priv, &hw); + if (hw.scroll) { priv->scroll += hw.scroll; @@ -694,6 +736,12 @@ SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity), priv->model_id, priv->capabilities, priv->ext_cap); + if (SYN_CAP_CLICKPAD(priv->ext_cap)) { + printk(KERN_INFO "Synaptics: Clickpad mode enabled\n"); + /* force to enable the middle button */ + priv->capabilities |= (1 << 18); + } + set_input_params(psmouse->dev, priv); /* --- linux-2.6.32.orig/drivers/input/mouse/psmouse-base.c +++ linux-2.6.32/drivers/input/mouse/psmouse-base.c @@ -667,19 +667,6 @@ max_proto = PSMOUSE_IMEX; } -/* - * Try Finger Sensing Pad - */ - if (max_proto > PSMOUSE_IMEX) { - if (fsp_detect(psmouse, set_properties) == 0) { - if (!set_properties || fsp_init(psmouse) == 0) - return PSMOUSE_FSP; -/* - * Init failed, try basic relative protocols - */ - max_proto = PSMOUSE_IMEX; - } - } if (max_proto > PSMOUSE_IMEX) { if (genius_detect(psmouse, set_properties) == 0) @@ -696,6 +683,21 @@ } /* + * Try Finger Sensing Pad. We do it here because its probe upsets + * Trackpoint devices (causing TP_READ_ID command to time out). + */ + if (max_proto > PSMOUSE_IMEX) { + if (fsp_detect(psmouse, set_properties) == 0) { + if (!set_properties || fsp_init(psmouse) == 0) + return PSMOUSE_FSP; +/* + * Init failed, try basic relative protocols + */ + max_proto = PSMOUSE_IMEX; + } + } + +/* * Reset to defaults in case the device got confused by extended * protocol probes. Note that we follow up with full reset because * some mice put themselves to sleep when they see PSMOUSE_RESET_DIS. @@ -1347,6 +1349,7 @@ struct psmouse *psmouse = serio_get_drvdata(serio); struct psmouse *parent = NULL; struct serio_driver *drv = serio->drv; + unsigned char type; int rc = -1; if (!drv || !psmouse) { @@ -1366,10 +1369,15 @@ if (psmouse->reconnect) { if (psmouse->reconnect(psmouse)) goto out; - } else if (psmouse_probe(psmouse) < 0 || - psmouse->type != psmouse_extensions(psmouse, - psmouse_max_proto, false)) { - goto out; + } else { + psmouse_reset(psmouse); + + if (psmouse_probe(psmouse) < 0) + goto out; + + type = psmouse_extensions(psmouse, psmouse_max_proto, false); + if (psmouse->type != type) + goto out; } /* ok, the device type (and capabilities) match the old one, --- linux-2.6.32.orig/drivers/input/mouse/alps.c +++ linux-2.6.32/drivers/input/mouse/alps.c @@ -5,6 +5,7 @@ * Copyright (c) 2003-2005 Peter Osterlund * Copyright (c) 2004 Dmitry Torokhov * Copyright (c) 2005 Vojtech Pavlik + * Copyright (c) 2009 Sebastian Kapfer * * ALPS detection, tap switching and status querying info is taken from * tpconfig utility (by C. Scott Ananian and Bruce Kall). @@ -35,6 +36,8 @@ #define ALPS_OLDPROTO 0x10 #define ALPS_PASS 0x20 #define ALPS_FW_BK_2 0x40 +#define ALPS_PS2_INTERLEAVED 0x80 /* 3-byte PS/2 packet interleaved with + 6-byte ALPS packet */ static const struct alps_model_info alps_model_data[] = { { { 0x32, 0x02, 0x14 }, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, /* Toshiba Salellite Pro M10 */ @@ -55,8 +58,12 @@ { { 0x20, 0x02, 0x0e }, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, /* XXX */ { { 0x22, 0x02, 0x0a }, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, { { 0x22, 0x02, 0x14 }, 0xff, 0xff, ALPS_PASS | ALPS_DUALPOINT }, /* Dell Latitude D600 */ - { { 0x62, 0x02, 0x14 }, 0xcf, 0xcf, ALPS_PASS | ALPS_DUALPOINT }, /* Dell Latitude E6500 */ + /* Dell Latitude E5500, E6400, E6500, Precision M4400 */ + { { 0x62, 0x02, 0x14 }, 0xcf, 0xcf, + ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, { { 0x73, 0x02, 0x50 }, 0xcf, 0xcf, ALPS_FW_BK_1 }, /* Dell Vostro 1400 */ + { { 0x52, 0x01, 0x14 }, 0xff, 0xff, + ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Toshiba Tecra A11-11L */ }; /* @@ -66,20 +73,88 @@ */ /* - * ALPS abolute Mode - new format + * PS/2 packet format + * + * byte 0: 0 0 YSGN XSGN 1 M R L + * byte 1: X7 X6 X5 X4 X3 X2 X1 X0 + * byte 2: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 + * + * Note that the device never signals overflow condition. + * + * ALPS absolute Mode - new format * * byte 0: 1 ? ? ? 1 ? ? ? * byte 1: 0 x6 x5 x4 x3 x2 x1 x0 - * byte 2: 0 x10 x9 x8 x7 ? fin ges + * byte 2: 0 x10 x9 x8 x7 ? fin ges * byte 3: 0 y9 y8 y7 1 M R L * byte 4: 0 y6 y5 y4 y3 y2 y1 y0 * byte 5: 0 z6 z5 z4 z3 z2 z1 z0 * + * Dualpoint device -- interleaved packet format + * + * byte 0: 1 1 0 0 1 1 1 1 + * byte 1: 0 x6 x5 x4 x3 x2 x1 x0 + * byte 2: 0 x10 x9 x8 x7 0 fin ges + * byte 3: 0 0 YSGN XSGN 1 1 1 1 + * byte 4: X7 X6 X5 X4 X3 X2 X1 X0 + * byte 5: Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 + * byte 6: 0 y9 y8 y7 1 m r l + * byte 7: 0 y6 y5 y4 y3 y2 y1 y0 + * byte 8: 0 z6 z5 z4 z3 z2 z1 z0 + * + * CAPITALS = stick, miniscules = touchpad + * * ?'s can have different meanings on different models, * such as wheel rotation, extra buttons, stick buttons * on a dualpoint, etc. */ +static bool alps_is_valid_first_byte(const struct alps_model_info *model, + unsigned char data) +{ + return (data & model->mask0) == model->byte0; +} + +static void alps_report_buttons(struct psmouse *psmouse, + struct input_dev *dev1, struct input_dev *dev2, + int left, int right, int middle) +{ + struct alps_data *priv = psmouse->private; + const struct alps_model_info *model = priv->i; + + if (model->flags & ALPS_PS2_INTERLEAVED) { + struct input_dev *dev; + + /* + * If shared button has already been reported on the + * other device (dev2) then this event should be also + * sent through that device. + */ + dev = test_bit(BTN_LEFT, dev2->key) ? dev2 : dev1; + input_report_key(dev, BTN_LEFT, left); + + dev = test_bit(BTN_RIGHT, dev2->key) ? dev2 : dev1; + input_report_key(dev, BTN_RIGHT, right); + + dev = test_bit(BTN_MIDDLE, dev2->key) ? dev2 : dev1; + input_report_key(dev, BTN_MIDDLE, middle); + + /* + * Sync the _other_ device now, we'll do the first + * device later once we report the rest of the events. + */ + input_sync(dev2); + } else { + /* + * For devices with non-interleaved packets we know what + * device buttons belong to so we can simply report them. + */ + input_report_key(dev1, BTN_LEFT, left); + input_report_key(dev1, BTN_RIGHT, right); + input_report_key(dev1, BTN_MIDDLE, middle); + } +} + static void alps_process_packet(struct psmouse *psmouse) { struct alps_data *priv = psmouse->private; @@ -89,18 +164,6 @@ int x, y, z, ges, fin, left, right, middle; int back = 0, forward = 0; - if ((packet[0] & 0xc8) == 0x08) { /* 3-byte PS/2 packet */ - input_report_key(dev2, BTN_LEFT, packet[0] & 1); - input_report_key(dev2, BTN_RIGHT, packet[0] & 2); - input_report_key(dev2, BTN_MIDDLE, packet[0] & 4); - input_report_rel(dev2, REL_X, - packet[1] ? packet[1] - ((packet[0] << 4) & 0x100) : 0); - input_report_rel(dev2, REL_Y, - packet[2] ? ((packet[0] << 3) & 0x100) - packet[2] : 0); - input_sync(dev2); - return; - } - if (priv->i->flags & ALPS_OLDPROTO) { left = packet[2] & 0x10; right = packet[2] & 0x08; @@ -136,18 +199,13 @@ input_report_rel(dev2, REL_X, (x > 383 ? (x - 768) : x)); input_report_rel(dev2, REL_Y, -(y > 255 ? (y - 512) : y)); - input_report_key(dev2, BTN_LEFT, left); - input_report_key(dev2, BTN_RIGHT, right); - input_report_key(dev2, BTN_MIDDLE, middle); + alps_report_buttons(psmouse, dev2, dev, left, right, middle); - input_sync(dev); input_sync(dev2); return; } - input_report_key(dev, BTN_LEFT, left); - input_report_key(dev, BTN_RIGHT, right); - input_report_key(dev, BTN_MIDDLE, middle); + alps_report_buttons(psmouse, dev, dev2, left, right, middle); /* Convert hardware tap to a reasonable Z value */ if (ges && !fin) z = 40; @@ -188,25 +246,168 @@ input_sync(dev); } +static void alps_report_bare_ps2_packet(struct psmouse *psmouse, + unsigned char packet[], + bool report_buttons) +{ + struct alps_data *priv = psmouse->private; + struct input_dev *dev2 = priv->dev2; + + if (report_buttons) + alps_report_buttons(psmouse, dev2, psmouse->dev, + packet[0] & 1, packet[0] & 2, packet[0] & 4); + + input_report_rel(dev2, REL_X, + packet[1] ? packet[1] - ((packet[0] << 4) & 0x100) : 0); + input_report_rel(dev2, REL_Y, + packet[2] ? ((packet[0] << 3) & 0x100) - packet[2] : 0); + + input_sync(dev2); +} + +static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse) +{ + struct alps_data *priv = psmouse->private; + + if (psmouse->pktcnt < 6) + return PSMOUSE_GOOD_DATA; + + if (psmouse->pktcnt == 6) { + /* + * Start a timer to flush the packet if it ends up last + * 6-byte packet in the stream. Timer needs to fire + * psmouse core times out itself. 20 ms should be enough + * to decide if we are getting more data or not. + */ + mod_timer(&priv->timer, jiffies + msecs_to_jiffies(20)); + return PSMOUSE_GOOD_DATA; + } + + del_timer(&priv->timer); + + if (psmouse->packet[6] & 0x80) { + + /* + * Highest bit is set - that means we either had + * complete ALPS packet and this is start of the + * next packet or we got garbage. + */ + + if (((psmouse->packet[3] | + psmouse->packet[4] | + psmouse->packet[5]) & 0x80) || + (!alps_is_valid_first_byte(priv->i, psmouse->packet[6]))) { + dbg("refusing packet %x %x %x %x " + "(suspected interleaved ps/2)\n", + psmouse->packet[3], psmouse->packet[4], + psmouse->packet[5], psmouse->packet[6]); + return PSMOUSE_BAD_DATA; + } + + alps_process_packet(psmouse); + + /* Continue with the next packet */ + psmouse->packet[0] = psmouse->packet[6]; + psmouse->pktcnt = 1; + + } else { + + /* + * High bit is 0 - that means that we indeed got a PS/2 + * packet in the middle of ALPS packet. + * + * There is also possibility that we got 6-byte ALPS + * packet followed by 3-byte packet from trackpoint. We + * can not distinguish between these 2 scenarios but + * becase the latter is unlikely to happen in course of + * normal operation (user would need to press all + * buttons on the pad and start moving trackpoint + * without touching the pad surface) we assume former. + * Even if we are wrong the wost thing that would happen + * the cursor would jump but we should not get protocol + * desynchronization. + */ + + alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3], + false); + + /* + * Continue with the standard ALPS protocol handling, + * but make sure we won't process it as an interleaved + * packet again, which may happen if all buttons are + * pressed. To avoid this let's reset the 4th bit which + * is normally 1. + */ + psmouse->packet[3] = psmouse->packet[6] & 0xf7; + psmouse->pktcnt = 4; + } + + return PSMOUSE_GOOD_DATA; +} + +static void alps_flush_packet(unsigned long data) +{ + struct psmouse *psmouse = (struct psmouse *)data; + + serio_pause_rx(psmouse->ps2dev.serio); + + if (psmouse->pktcnt == 6) { + + /* + * We did not any more data in reasonable amount of time. + * Validate the last 3 bytes and process as a standard + * ALPS packet. + */ + if ((psmouse->packet[3] | + psmouse->packet[4] | + psmouse->packet[5]) & 0x80) { + dbg("refusing packet %x %x %x " + "(suspected interleaved ps/2)\n", + psmouse->packet[3], psmouse->packet[4], + psmouse->packet[5]); + } else { + alps_process_packet(psmouse); + } + psmouse->pktcnt = 0; + } + + serio_continue_rx(psmouse->ps2dev.serio); +} + static psmouse_ret_t alps_process_byte(struct psmouse *psmouse) { struct alps_data *priv = psmouse->private; + const struct alps_model_info *model = priv->i; if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ if (psmouse->pktcnt == 3) { - alps_process_packet(psmouse); + alps_report_bare_ps2_packet(psmouse, psmouse->packet, + true); return PSMOUSE_FULL_PACKET; } return PSMOUSE_GOOD_DATA; } - if ((psmouse->packet[0] & priv->i->mask0) != priv->i->byte0) + /* Check for PS/2 packet stuffed in the middle of ALPS packet. */ + + if ((model->flags & ALPS_PS2_INTERLEAVED) && + psmouse->pktcnt >= 4 && (psmouse->packet[3] & 0x0f) == 0x0f) { + return alps_handle_interleaved_ps2(psmouse); + } + + if (!alps_is_valid_first_byte(model, psmouse->packet[0])) { + dbg("refusing packet[0] = %x (mask0 = %x, byte0 = %x)\n", + psmouse->packet[0], model->mask0, model->byte0); return PSMOUSE_BAD_DATA; + } /* Bytes 2 - 6 should have 0 in the highest bit */ if (psmouse->pktcnt >= 2 && psmouse->pktcnt <= 6 && - (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) + (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) { + dbg("refusing packet[%i] = %x\n", + psmouse->pktcnt - 1, psmouse->packet[psmouse->pktcnt - 1]); return PSMOUSE_BAD_DATA; + } if (psmouse->pktcnt == 6) { alps_process_packet(psmouse); @@ -432,7 +633,8 @@ static int alps_reconnect(struct psmouse *psmouse) { - psmouse_reset(psmouse); + /* UBUNTU: Causes lockups on resume */ + /* psmouse_reset(psmouse); */ if (alps_hw_init(psmouse, NULL)) return -1; @@ -445,6 +647,7 @@ struct alps_data *priv = psmouse->private; psmouse_reset(psmouse); + del_timer_sync(&priv->timer); input_unregister_device(priv->dev2); kfree(priv); } @@ -461,6 +664,8 @@ goto init_fail; priv->dev2 = dev2; + setup_timer(&priv->timer, alps_flush_packet, (unsigned long)psmouse); + psmouse->private = priv; if (alps_hw_init(psmouse, &version)) --- linux-2.6.32.orig/drivers/gpu/drm/drm_fb_helper.c +++ linux-2.6.32/drivers/gpu/drm/drm_fb_helper.c @@ -156,7 +156,7 @@ force = DRM_FORCE_ON; break; case 'D': - if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) || + if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) && (connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)) force = DRM_FORCE_ON; else @@ -373,11 +373,9 @@ mutex_unlock(&dev->mode_config.mutex); } } - if (dpms_mode == DRM_MODE_DPMS_OFF) { - mutex_lock(&dev->mode_config.mutex); - crtc_funcs->dpms(crtc, dpms_mode); - mutex_unlock(&dev->mode_config.mutex); - } + mutex_lock(&dev->mode_config.mutex); + crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); + mutex_unlock(&dev->mode_config.mutex); } } } @@ -385,18 +383,23 @@ int drm_fb_helper_blank(int blank, struct fb_info *info) { switch (blank) { + /* Display: On; HSync: On, VSync: On */ case FB_BLANK_UNBLANK: drm_fb_helper_on(info); break; + /* Display: Off; HSync: On, VSync: On */ case FB_BLANK_NORMAL: drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY); break; + /* Display: Off; HSync: Off, VSync: On */ case FB_BLANK_HSYNC_SUSPEND: drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY); break; + /* Display: Off; HSync: On, VSync: Off */ case FB_BLANK_VSYNC_SUSPEND: drm_fb_helper_off(info, DRM_MODE_DPMS_SUSPEND); break; + /* Display: Off; HSync: Off, VSync: Off */ case FB_BLANK_POWERDOWN: drm_fb_helper_off(info, DRM_MODE_DPMS_OFF); break; @@ -603,11 +606,10 @@ return -EINVAL; /* Need to resize the fb object !!! */ - if (var->xres > fb->width || var->yres > fb->height) { - DRM_ERROR("Requested width/height is greater than current fb " - "object %dx%d > %dx%d\n", var->xres, var->yres, - fb->width, fb->height); - DRM_ERROR("Need resizing code.\n"); + if (var->bits_per_pixel > fb->bits_per_pixel || var->xres > fb->width || var->yres > fb->height) { + DRM_DEBUG("fb userspace requested width/height/bpp is greater than current fb " + "object %dx%d-%d > %dx%d-%d\n", var->xres, var->yres, var->bits_per_pixel, + fb->width, fb->height, fb->bits_per_pixel); return -EINVAL; } @@ -905,8 +907,13 @@ if (new_fb) { info->var.pixclock = 0; - if (register_framebuffer(info) < 0) + ret = fb_alloc_cmap(&info->cmap, modeset->crtc->gamma_size, 0); + if (ret) + return ret; + if (register_framebuffer(info) < 0) { + fb_dealloc_cmap(&info->cmap); return -EINVAL; + } } else { drm_fb_helper_set_par(info); } @@ -936,6 +943,7 @@ unregister_sysrq_key('v', &sysrq_drm_fb_helper_restore_op); } drm_fb_helper_crtc_free(helper); + fb_dealloc_cmap(&helper->fb->fbdev->cmap); } EXPORT_SYMBOL(drm_fb_helper_free); --- linux-2.6.32.orig/drivers/gpu/drm/drm_crtc.c +++ linux-2.6.32/drivers/gpu/drm/drm_crtc.c @@ -125,6 +125,15 @@ DRM_ENUM_NAME_FN(drm_get_tv_subconnector_name, drm_tv_subconnector_enum_list) +static struct drm_prop_enum_list drm_dirty_info_enum_list[] = { + { DRM_MODE_DIRTY_OFF, "Off" }, + { DRM_MODE_DIRTY_ON, "On" }, + { DRM_MODE_DIRTY_ANNOTATE, "Annotate" }, +}; + +DRM_ENUM_NAME_FN(drm_get_dirty_info_name, + drm_dirty_info_enum_list) + struct drm_conn_prop_enum_list { int type; char *name; @@ -149,6 +158,7 @@ { DRM_MODE_CONNECTOR_HDMIA, "HDMI Type A", 0 }, { DRM_MODE_CONNECTOR_HDMIB, "HDMI Type B", 0 }, { DRM_MODE_CONNECTOR_TV, "TV", 0 }, + { DRM_MODE_CONNECTOR_eDP, "Embedded DisplayPort", 0 }, }; static struct drm_prop_enum_list drm_encoder_enum_list[] = @@ -247,7 +257,8 @@ mutex_unlock(&dev->mode_config.idr_mutex); } -void *drm_mode_object_find(struct drm_device *dev, uint32_t id, uint32_t type) +struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, + uint32_t id, uint32_t type) { struct drm_mode_object *obj = NULL; @@ -272,7 +283,7 @@ * functions & device file and adds it to the master fd list. * * RETURNS: - * Zero on success, error code on falure. + * Zero on success, error code on failure. */ int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb, const struct drm_framebuffer_funcs *funcs) @@ -802,6 +813,36 @@ EXPORT_SYMBOL(drm_mode_create_dithering_property); /** + * drm_mode_create_dirty_property - create dirty property + * @dev: DRM device + * + * Called by a driver the first time it's needed, must be attached to desired + * connectors. + */ +int drm_mode_create_dirty_info_property(struct drm_device *dev) +{ + struct drm_property *dirty_info; + int i; + + if (dev->mode_config.dirty_info_property) + return 0; + + dirty_info = + drm_property_create(dev, DRM_MODE_PROP_ENUM | + DRM_MODE_PROP_IMMUTABLE, + "dirty", + ARRAY_SIZE(drm_dirty_info_enum_list)); + for (i = 0; i < ARRAY_SIZE(drm_dirty_info_enum_list); i++) + drm_property_add_enum(dirty_info, i, + drm_dirty_info_enum_list[i].type, + drm_dirty_info_enum_list[i].name); + dev->mode_config.dirty_info_property = dirty_info; + + return 0; +} +EXPORT_SYMBOL(drm_mode_create_dirty_info_property); + +/** * drm_mode_config_init - initialize DRM mode_configuration structure * @dev: DRM device * @@ -1753,6 +1794,71 @@ return ret; } +int drm_mode_dirtyfb_ioctl(struct drm_device *dev, + void *data, struct drm_file *file_priv) +{ + struct drm_clip_rect __user *clips_ptr; + struct drm_clip_rect *clips = NULL; + struct drm_mode_fb_dirty_cmd *r = data; + struct drm_mode_object *obj; + struct drm_framebuffer *fb; + unsigned flags; + int num_clips; + int ret = 0; + + mutex_lock(&dev->mode_config.mutex); + obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB); + if (!obj) { + DRM_ERROR("invalid framebuffer id\n"); + ret = -EINVAL; + goto out_err1; + } + fb = obj_to_fb(obj); + + num_clips = r->num_clips; + clips_ptr = (struct drm_clip_rect *)(unsigned long)r->clips_ptr; + + if (!num_clips != !clips_ptr) { + ret = -EINVAL; + goto out_err1; + } + + flags = DRM_MODE_FB_DIRTY_FLAGS & r->flags; + + /* If userspace annotates copy, clips must come in pairs */ + if (flags & DRM_MODE_FB_DIRTY_ANNOTATE_COPY && (num_clips % 2)) { + ret = -EINVAL; + goto out_err1; + } + + if (num_clips && clips_ptr) { + clips = kzalloc(num_clips * sizeof(*clips), GFP_KERNEL); + if (!clips) { + ret = -ENOMEM; + goto out_err1; + } + + ret = copy_from_user(clips, clips_ptr, + num_clips * sizeof(*clips)); + if (ret) + goto out_err2; + } + + if (fb->funcs->dirty) { + ret = fb->funcs->dirty(fb, flags, r->color, clips, num_clips); + } else { + ret = -ENOSYS; + goto out_err2; + } + +out_err2: + kfree(clips); +out_err1: + mutex_unlock(&dev->mode_config.mutex); + return ret; +} + + /** * drm_fb_release - remove and free the FBs on this file * @filp: file * from the ioctl @@ -2328,7 +2434,7 @@ } else if (connector->funcs->set_property) ret = connector->funcs->set_property(connector, property, out_resp->value); - /* store the property value if succesful */ + /* store the property value if successful */ if (!ret) drm_connector_property_set_value(connector, property, out_resp->value); out: @@ -2478,3 +2584,72 @@ mutex_unlock(&dev->mode_config.mutex); return ret; } + +int drm_mode_page_flip_ioctl(struct drm_device *dev, + void *data, struct drm_file *file_priv) +{ + struct drm_mode_crtc_page_flip *page_flip = data; + struct drm_mode_object *obj; + struct drm_crtc *crtc; + struct drm_framebuffer *fb; + struct drm_pending_vblank_event *e = NULL; + unsigned long flags; + int ret = -EINVAL; + + if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS || + page_flip->reserved != 0) + return -EINVAL; + + mutex_lock(&dev->mode_config.mutex); + obj = drm_mode_object_find(dev, page_flip->crtc_id, DRM_MODE_OBJECT_CRTC); + if (!obj) + goto out; + crtc = obj_to_crtc(obj); + + if (crtc->funcs->page_flip == NULL) + goto out; + + obj = drm_mode_object_find(dev, page_flip->fb_id, DRM_MODE_OBJECT_FB); + if (!obj) + goto out; + fb = obj_to_fb(obj); + + if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { + ret = -ENOMEM; + spin_lock_irqsave(&dev->event_lock, flags); + if (file_priv->event_space < sizeof e->event) { + spin_unlock_irqrestore(&dev->event_lock, flags); + goto out; + } + file_priv->event_space -= sizeof e->event; + spin_unlock_irqrestore(&dev->event_lock, flags); + + e = kzalloc(sizeof *e, GFP_KERNEL); + if (e == NULL) { + spin_lock_irqsave(&dev->event_lock, flags); + file_priv->event_space += sizeof e->event; + spin_unlock_irqrestore(&dev->event_lock, flags); + goto out; + } + + e->event.base.type = DRM_EVENT_FLIP_COMPLETE; + e->event.base.length = sizeof e->event; + e->event.user_data = page_flip->user_data; + e->base.event = &e->event.base; + e->base.file_priv = file_priv; + e->base.destroy = + (void (*) (struct drm_pending_event *)) kfree; + } + + ret = crtc->funcs->page_flip(crtc, fb, e); + if (ret) { + spin_lock_irqsave(&dev->event_lock, flags); + file_priv->event_space += sizeof e->event; + spin_unlock_irqrestore(&dev->event_lock, flags); + kfree(e); + } + +out: + mutex_unlock(&dev->mode_config.mutex); + return ret; +} --- linux-2.6.32.orig/drivers/gpu/drm/drm_pci.c +++ linux-2.6.32/drivers/gpu/drm/drm_pci.c @@ -47,8 +47,7 @@ /** * \brief Allocate a PCI consistent memory block, for DMA. */ -drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t align, - dma_addr_t maxaddr) +drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t align) { drm_dma_handle_t *dmah; #if 1 @@ -63,11 +62,6 @@ if (align > size) return NULL; - if (pci_set_dma_mask(dev->pdev, maxaddr) != 0) { - DRM_ERROR("Setting pci dma mask failed\n"); - return NULL; - } - dmah = kmalloc(sizeof(drm_dma_handle_t), GFP_KERNEL); if (!dmah) return NULL; --- linux-2.6.32.orig/drivers/gpu/drm/drm_drv.c +++ linux-2.6.32/drivers/gpu/drm/drm_drv.c @@ -145,6 +145,8 @@ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW) }; #define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls ) @@ -366,6 +368,29 @@ module_exit(drm_core_exit); /** + * Copy and IOCTL return string to user space + */ +static int drm_copy_field(char *buf, size_t *buf_len, const char *value) +{ + int len; + + /* don't overflow userbuf */ + len = strlen(value); + if (len > *buf_len) + len = *buf_len; + + /* let userspace know exact length of driver value (which could be + * larger than the userspace-supplied buffer) */ + *buf_len = strlen(value); + + /* finally, try filling in the userbuf */ + if (len && buf) + if (copy_to_user(buf, value, len)) + return -EFAULT; + return 0; +} + +/** * Get version information * * \param inode device inode. @@ -380,16 +405,21 @@ struct drm_file *file_priv) { struct drm_version *version = data; - int len; + int err; version->version_major = dev->driver->major; version->version_minor = dev->driver->minor; version->version_patchlevel = dev->driver->patchlevel; - DRM_COPY(version->name, dev->driver->name); - DRM_COPY(version->date, dev->driver->date); - DRM_COPY(version->desc, dev->driver->desc); + err = drm_copy_field(version->name, &version->name_len, + dev->driver->name); + if (!err) + err = drm_copy_field(version->date, &version->date_len, + dev->driver->date); + if (!err) + err = drm_copy_field(version->desc, &version->desc_len, + dev->driver->desc); - return 0; + return err; } /** @@ -404,11 +434,11 @@ * Looks up the ioctl function in the ::ioctls table, checking for root * previleges if so required, and dispatches to the respective function. */ -int drm_ioctl(struct inode *inode, struct file *filp, +long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct drm_file *file_priv = filp->private_data; - struct drm_device *dev = file_priv->minor->dev; + struct drm_device *dev; struct drm_ioctl_desc *ioctl; drm_ioctl_t *func; unsigned int nr = DRM_IOCTL_NR(cmd); @@ -416,6 +446,7 @@ char stack_kdata[128]; char *kdata = NULL; + dev = file_priv->minor->dev; atomic_inc(&dev->ioctl_count); atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]); ++file_priv->ioctl_count; @@ -471,7 +502,13 @@ goto err_i1; } } - retcode = func(dev, kdata, file_priv); + if (ioctl->flags & DRM_UNLOCKED) + retcode = func(dev, kdata, file_priv); + else { + lock_kernel(); + retcode = func(dev, kdata, file_priv); + unlock_kernel(); + } if (cmd & IOC_OUT) { if (copy_to_user((void __user *)arg, kdata, --- linux-2.6.32.orig/drivers/gpu/drm/drm_bufs.c +++ linux-2.6.32/drivers/gpu/drm/drm_bufs.c @@ -326,7 +326,7 @@ * As we're limiting the address to 2^32-1 (or less), * casting it down to 32 bits is no problem, but we * need to point to a 64bit variable first. */ - dmah = drm_pci_alloc(dev, map->size, map->size, 0xffffffffUL); + dmah = drm_pci_alloc(dev, map->size, map->size); if (!dmah) { kfree(map); return -ENOMEM; @@ -885,7 +885,7 @@ while (entry->buf_count < count) { - dmah = drm_pci_alloc(dev, PAGE_SIZE << page_order, 0x1000, 0xfffffffful); + dmah = drm_pci_alloc(dev, PAGE_SIZE << page_order, 0x1000); if (!dmah) { /* Set count correctly so we free the proper amount. */ --- linux-2.6.32.orig/drivers/gpu/drm/drm_crtc_helper.c +++ linux-2.6.32/drivers/gpu/drm/drm_crtc_helper.c @@ -104,12 +104,13 @@ if (connector->status == connector_status_disconnected) { DRM_DEBUG_KMS("%s is disconnected\n", drm_get_connector_name(connector)); + drm_mode_connector_update_edid_property(connector, NULL); goto prune; } count = (*connector_funcs->get_modes)(connector); if (!count) { - count = drm_add_modes_noedid(connector, 800, 600); + count = drm_add_modes_noedid(connector, 1024, 768); if (!count) return 0; } @@ -216,7 +217,7 @@ EXPORT_SYMBOL(drm_helper_crtc_in_use); /** - * drm_disable_unused_functions - disable unused objects + * drm_helper_disable_unused_functions - disable unused objects * @dev: DRM device * * LOCKING: @@ -702,7 +703,7 @@ if (encoder->crtc != crtc) continue; - DRM_INFO("%s: set mode %s %x\n", drm_get_encoder_name(encoder), + DRM_DEBUG("%s: set mode %s %x\n", drm_get_encoder_name(encoder), mode->name, mode->base.id); encoder_funcs = encoder->helper_private; encoder_funcs->mode_set(encoder, mode, adjusted_mode); @@ -1020,6 +1021,9 @@ { int count = 0; + /* disable all the possible outputs/crtcs before entering KMS mode */ + drm_helper_disable_unused_functions(dev); + drm_fb_helper_parse_command_line(dev); count = drm_helper_probe_connector_modes(dev, @@ -1029,7 +1033,8 @@ /* * we shouldn't end up with no modes here. */ - WARN(!count, "No connectors reported connected with modes\n"); + if (count == 0) + printk(KERN_INFO "No connectors reported connected with modes\n"); drm_setup_crtcs(dev); @@ -1159,6 +1164,9 @@ int drm_helper_resume_force_mode(struct drm_device *dev) { struct drm_crtc *crtc; + struct drm_encoder *encoder; + struct drm_encoder_helper_funcs *encoder_funcs; + struct drm_crtc_helper_funcs *crtc_funcs; int ret; list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { @@ -1171,6 +1179,25 @@ if (ret == false) DRM_ERROR("failed to set mode on crtc %p\n", crtc); + + /* Turn off outputs that were already powered off */ + if (drm_helper_choose_crtc_dpms(crtc)) { + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + + if(encoder->crtc != crtc) + continue; + + encoder_funcs = encoder->helper_private; + if (encoder_funcs->dpms) + (*encoder_funcs->dpms) (encoder, + drm_helper_choose_encoder_dpms(encoder)); + + crtc_funcs = crtc->helper_private; + if (crtc_funcs->dpms) + (*crtc_funcs->dpms) (crtc, + drm_helper_choose_crtc_dpms(crtc)); + } + } } /* disable the unused connectors while restoring the modesetting */ drm_helper_disable_unused_functions(dev); --- linux-2.6.32.orig/drivers/gpu/drm/drm_fops.c +++ linux-2.6.32/drivers/gpu/drm/drm_fops.c @@ -140,14 +140,16 @@ spin_unlock(&dev->count_lock); } out: - mutex_lock(&dev->struct_mutex); - if (minor->type == DRM_MINOR_LEGACY) { - BUG_ON((dev->dev_mapping != NULL) && - (dev->dev_mapping != inode->i_mapping)); - if (dev->dev_mapping == NULL) - dev->dev_mapping = inode->i_mapping; + if (!retcode) { + mutex_lock(&dev->struct_mutex); + if (minor->type == DRM_MINOR_LEGACY) { + if (dev->dev_mapping == NULL) + dev->dev_mapping = inode->i_mapping; + else if (dev->dev_mapping != inode->i_mapping) + retcode = -ENODEV; + } + mutex_unlock(&dev->struct_mutex); } - mutex_unlock(&dev->struct_mutex); return retcode; } @@ -257,6 +259,9 @@ INIT_LIST_HEAD(&priv->lhead); INIT_LIST_HEAD(&priv->fbs); + INIT_LIST_HEAD(&priv->event_list); + init_waitqueue_head(&priv->event_wait); + priv->event_space = 4096; /* set aside 4k for event buffer */ if (dev->driver->driver_features & DRIVER_GEM) drm_gem_open(dev, priv); @@ -297,6 +302,18 @@ goto out_free; } } + mutex_lock(&dev->struct_mutex); + if (dev->driver->master_set) { + ret = dev->driver->master_set(dev, priv, true); + if (ret) { + /* drop both references if this fails */ + drm_master_put(&priv->minor->master); + drm_master_put(&priv->master); + mutex_unlock(&dev->struct_mutex); + goto out_free; + } + } + mutex_unlock(&dev->struct_mutex); } else { /* get a reference to the master */ priv->master = drm_master_get(priv->minor->master); @@ -413,6 +430,30 @@ } } +static void drm_events_release(struct drm_file *file_priv) +{ + struct drm_device *dev = file_priv->minor->dev; + struct drm_pending_event *e, *et; + struct drm_pending_vblank_event *v, *vt; + unsigned long flags; + + spin_lock_irqsave(&dev->event_lock, flags); + + /* Remove pending flips */ + list_for_each_entry_safe(v, vt, &dev->vblank_event_list, base.link) + if (v->base.file_priv == file_priv) { + list_del(&v->base.link); + drm_vblank_put(dev, v->pipe); + v->base.destroy(&v->base); + } + + /* Remove unconsumed events */ + list_for_each_entry_safe(e, et, &file_priv->event_list, link) + e->destroy(e); + + spin_unlock_irqrestore(&dev->event_lock, flags); +} + /** * Release file. * @@ -451,6 +492,8 @@ if (file_priv->minor->master) drm_master_release(dev, filp); + drm_events_release(file_priv); + if (dev->driver->driver_features & DRIVER_GEM) drm_gem_release(dev, file_priv); @@ -504,6 +547,8 @@ if (file_priv->minor->master == file_priv->master) { /* drop the reference held my the minor */ + if (dev->driver->master_drop) + dev->driver->master_drop(dev, file_priv, true); drm_master_put(&file_priv->minor->master); } } @@ -544,9 +589,74 @@ } EXPORT_SYMBOL(drm_release); -/** No-op. */ +static bool +drm_dequeue_event(struct drm_file *file_priv, + size_t total, size_t max, struct drm_pending_event **out) +{ + struct drm_device *dev = file_priv->minor->dev; + struct drm_pending_event *e; + unsigned long flags; + bool ret = false; + + spin_lock_irqsave(&dev->event_lock, flags); + + *out = NULL; + if (list_empty(&file_priv->event_list)) + goto out; + e = list_first_entry(&file_priv->event_list, + struct drm_pending_event, link); + if (e->event->length + total > max) + goto out; + + file_priv->event_space += e->event->length; + list_del(&e->link); + *out = e; + ret = true; + +out: + spin_unlock_irqrestore(&dev->event_lock, flags); + return ret; +} + +ssize_t drm_read(struct file *filp, char __user *buffer, + size_t count, loff_t *offset) +{ + struct drm_file *file_priv = filp->private_data; + struct drm_pending_event *e; + size_t total; + ssize_t ret; + + ret = wait_event_interruptible(file_priv->event_wait, + !list_empty(&file_priv->event_list)); + if (ret < 0) + return ret; + + total = 0; + while (drm_dequeue_event(file_priv, total, count, &e)) { + if (copy_to_user(buffer + total, + e->event, e->event->length)) { + total = -EFAULT; + break; + } + + total += e->event->length; + e->destroy(e); + } + + return total; +} +EXPORT_SYMBOL(drm_read); + unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait) { - return 0; + struct drm_file *file_priv = filp->private_data; + unsigned int mask = 0; + + poll_wait(filp, &file_priv->event_wait, wait); + + if (!list_empty(&file_priv->event_list)) + mask |= POLLIN | POLLRDNORM; + + return mask; } EXPORT_SYMBOL(drm_poll); --- linux-2.6.32.orig/drivers/gpu/drm/drm_irq.c +++ linux-2.6.32/drivers/gpu/drm/drm_irq.c @@ -115,6 +115,7 @@ dev->num_crtcs = 0; } +EXPORT_SYMBOL(drm_vblank_cleanup); int drm_vblank_init(struct drm_device *dev, int num_crtcs) { @@ -163,7 +164,6 @@ } dev->vblank_disable_allowed = 0; - return 0; err: @@ -429,15 +429,21 @@ spin_lock_irqsave(&dev->vbl_lock, irqflags); /* Going from 0->1 means we have to enable interrupts again */ - if (atomic_add_return(1, &dev->vblank_refcount[crtc]) == 1 && - !dev->vblank_enabled[crtc]) { - ret = dev->driver->enable_vblank(dev, crtc); - DRM_DEBUG("enabling vblank on crtc %d, ret: %d\n", crtc, ret); - if (ret) + if (atomic_add_return(1, &dev->vblank_refcount[crtc]) == 1) { + if (!dev->vblank_enabled[crtc]) { + ret = dev->driver->enable_vblank(dev, crtc); + DRM_DEBUG("enabling vblank on crtc %d, ret: %d\n", crtc, ret); + if (ret) + atomic_dec(&dev->vblank_refcount[crtc]); + else { + dev->vblank_enabled[crtc] = 1; + drm_update_vblank_count(dev, crtc); + } + } + } else { + if (!dev->vblank_enabled[crtc]) { atomic_dec(&dev->vblank_refcount[crtc]); - else { - dev->vblank_enabled[crtc] = 1; - drm_update_vblank_count(dev, crtc); + ret = -EINVAL; } } spin_unlock_irqrestore(&dev->vbl_lock, irqflags); @@ -464,6 +470,18 @@ } EXPORT_SYMBOL(drm_vblank_put); +void drm_vblank_off(struct drm_device *dev, int crtc) +{ + unsigned long irqflags; + + spin_lock_irqsave(&dev->vbl_lock, irqflags); + DRM_WAKEUP(&dev->vbl_queue[crtc]); + dev->vblank_enabled[crtc] = 0; + dev->last_vblank[crtc] = dev->driver->get_vblank_counter(dev, crtc); + spin_unlock_irqrestore(&dev->vbl_lock, irqflags); +} +EXPORT_SYMBOL(drm_vblank_off); + /** * drm_vblank_pre_modeset - account for vblanks across mode sets * @dev: DRM device @@ -475,6 +493,9 @@ */ void drm_vblank_pre_modeset(struct drm_device *dev, int crtc) { + /* vblank is not initialized (IRQ not installed ?) */ + if (!dev->num_crtcs) + return; /* * To avoid all the problems that might happen if interrupts * were enabled/disabled around or between these calls, we just @@ -550,6 +571,63 @@ return ret; } +static int drm_queue_vblank_event(struct drm_device *dev, int pipe, + union drm_wait_vblank *vblwait, + struct drm_file *file_priv) +{ + struct drm_pending_vblank_event *e; + struct timeval now; + unsigned long flags; + unsigned int seq; + + e = kzalloc(sizeof *e, GFP_KERNEL); + if (e == NULL) + return -ENOMEM; + + e->pipe = pipe; + e->event.base.type = DRM_EVENT_VBLANK; + e->event.base.length = sizeof e->event; + e->event.user_data = vblwait->request.signal; + e->base.event = &e->event.base; + e->base.file_priv = file_priv; + e->base.destroy = (void (*) (struct drm_pending_event *)) kfree; + + do_gettimeofday(&now); + spin_lock_irqsave(&dev->event_lock, flags); + + if (file_priv->event_space < sizeof e->event) { + spin_unlock_irqrestore(&dev->event_lock, flags); + kfree(e); + return -ENOMEM; + } + + file_priv->event_space -= sizeof e->event; + seq = drm_vblank_count(dev, pipe); + if ((vblwait->request.type & _DRM_VBLANK_NEXTONMISS) && + (seq - vblwait->request.sequence) <= (1 << 23)) { + vblwait->request.sequence = seq + 1; + vblwait->reply.sequence = vblwait->request.sequence; + } + + DRM_DEBUG("event on vblank count %d, current %d, crtc %d\n", + vblwait->request.sequence, seq, pipe); + + e->event.sequence = vblwait->request.sequence; + if ((seq - vblwait->request.sequence) <= (1 << 23)) { + e->event.tv_sec = now.tv_sec; + e->event.tv_usec = now.tv_usec; + drm_vblank_put(dev, e->pipe); + list_add_tail(&e->base.link, &e->base.file_priv->event_list); + wake_up_interruptible(&e->base.file_priv->event_wait); + } else { + list_add_tail(&e->base.link, &dev->vblank_event_list); + } + + spin_unlock_irqrestore(&dev->event_lock, flags); + + return 0; +} + /** * Wait for VBLANK. * @@ -609,6 +687,9 @@ goto done; } + if (flags & _DRM_VBLANK_EVENT) + return drm_queue_vblank_event(dev, crtc, vblwait, file_priv); + if ((flags & _DRM_VBLANK_NEXTONMISS) && (seq - vblwait->request.sequence) <= (1<<23)) { vblwait->request.sequence = seq + 1; @@ -641,6 +722,38 @@ return ret; } +void drm_handle_vblank_events(struct drm_device *dev, int crtc) +{ + struct drm_pending_vblank_event *e, *t; + struct timeval now; + unsigned long flags; + unsigned int seq; + + do_gettimeofday(&now); + seq = drm_vblank_count(dev, crtc); + + spin_lock_irqsave(&dev->event_lock, flags); + + list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) { + if (e->pipe != crtc) + continue; + if ((seq - e->event.sequence) > (1<<23)) + continue; + + DRM_DEBUG("vblank event on %d, current %d\n", + e->event.sequence, seq); + + e->event.sequence = seq; + e->event.tv_sec = now.tv_sec; + e->event.tv_usec = now.tv_usec; + drm_vblank_put(dev, e->pipe); + list_move_tail(&e->base.link, &e->base.file_priv->event_list); + wake_up_interruptible(&e->base.file_priv->event_wait); + } + + spin_unlock_irqrestore(&dev->event_lock, flags); +} + /** * drm_handle_vblank - handle a vblank event * @dev: DRM device @@ -651,7 +764,11 @@ */ void drm_handle_vblank(struct drm_device *dev, int crtc) { + if (!dev->num_crtcs) + return; + atomic_inc(&dev->_vblank_count[crtc]); DRM_WAKEUP(&dev->vbl_queue[crtc]); + drm_handle_vblank_events(dev, crtc); } EXPORT_SYMBOL(drm_handle_vblank); --- linux-2.6.32.orig/drivers/gpu/drm/drm_ioc32.c +++ linux-2.6.32/drivers/gpu/drm/drm_ioc32.c @@ -104,7 +104,7 @@ &version->desc)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, + err = drm_ioctl(file, DRM_IOCTL_VERSION, (unsigned long)version); if (err) return err; @@ -145,8 +145,7 @@ &u->unique)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_GET_UNIQUE, (unsigned long)u); + err = drm_ioctl(file, DRM_IOCTL_GET_UNIQUE, (unsigned long)u); if (err) return err; @@ -174,8 +173,7 @@ &u->unique)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_SET_UNIQUE, (unsigned long)u); + return drm_ioctl(file, DRM_IOCTL_SET_UNIQUE, (unsigned long)u); } typedef struct drm_map32 { @@ -205,8 +203,7 @@ if (__put_user(idx, &map->offset)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_GET_MAP, (unsigned long)map); + err = drm_ioctl(file, DRM_IOCTL_GET_MAP, (unsigned long)map); if (err) return err; @@ -246,8 +243,7 @@ || __put_user(m32.flags, &map->flags)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_ADD_MAP, (unsigned long)map); + err = drm_ioctl(file, DRM_IOCTL_ADD_MAP, (unsigned long)map); if (err) return err; @@ -284,8 +280,7 @@ if (__put_user((void *)(unsigned long)handle, &map->handle)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RM_MAP, (unsigned long)map); + return drm_ioctl(file, DRM_IOCTL_RM_MAP, (unsigned long)map); } typedef struct drm_client32 { @@ -314,8 +309,7 @@ if (__put_user(idx, &client->idx)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_GET_CLIENT, (unsigned long)client); + err = drm_ioctl(file, DRM_IOCTL_GET_CLIENT, (unsigned long)client); if (err) return err; @@ -351,8 +345,7 @@ if (!access_ok(VERIFY_WRITE, stats, sizeof(*stats))) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_GET_STATS, (unsigned long)stats); + err = drm_ioctl(file, DRM_IOCTL_GET_STATS, (unsigned long)stats); if (err) return err; @@ -395,8 +388,7 @@ || __put_user(agp_start, &buf->agp_start)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_ADD_BUFS, (unsigned long)buf); + err = drm_ioctl(file, DRM_IOCTL_ADD_BUFS, (unsigned long)buf); if (err) return err; @@ -427,8 +419,7 @@ || __put_user(b32.high_mark, &buf->high_mark)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_MARK_BUFS, (unsigned long)buf); + return drm_ioctl(file, DRM_IOCTL_MARK_BUFS, (unsigned long)buf); } typedef struct drm_buf_info32 { @@ -469,8 +460,7 @@ || __put_user(list, &request->list)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_INFO_BUFS, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_INFO_BUFS, (unsigned long)request); if (err) return err; @@ -531,8 +521,7 @@ || __put_user(list, &request->list)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_MAP_BUFS, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_MAP_BUFS, (unsigned long)request); if (err) return err; @@ -578,8 +567,7 @@ &request->list)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_FREE_BUFS, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_FREE_BUFS, (unsigned long)request); } typedef struct drm_ctx_priv_map32 { @@ -605,8 +593,7 @@ &request->handle)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_SET_SAREA_CTX, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_SET_SAREA_CTX, (unsigned long)request); } static int compat_drm_getsareactx(struct file *file, unsigned int cmd, @@ -628,8 +615,7 @@ if (__put_user(ctx_id, &request->ctx_id)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_GET_SAREA_CTX, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_GET_SAREA_CTX, (unsigned long)request); if (err) return err; @@ -664,8 +650,7 @@ &res->contexts)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RES_CTX, (unsigned long)res); + err = drm_ioctl(file, DRM_IOCTL_RES_CTX, (unsigned long)res); if (err) return err; @@ -718,8 +703,7 @@ &d->request_sizes)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_DMA, (unsigned long)d); + err = drm_ioctl(file, DRM_IOCTL_DMA, (unsigned long)d); if (err) return err; @@ -751,8 +735,7 @@ if (put_user(m32.mode, &mode->mode)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_ENABLE, (unsigned long)mode); + return drm_ioctl(file, DRM_IOCTL_AGP_ENABLE, (unsigned long)mode); } typedef struct drm_agp_info32 { @@ -781,8 +764,7 @@ if (!access_ok(VERIFY_WRITE, info, sizeof(*info))) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_INFO, (unsigned long)info); + err = drm_ioctl(file, DRM_IOCTL_AGP_INFO, (unsigned long)info); if (err) return err; @@ -827,16 +809,14 @@ || __put_user(req32.type, &request->type)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_ALLOC, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_AGP_ALLOC, (unsigned long)request); if (err) return err; if (__get_user(req32.handle, &request->handle) || __get_user(req32.physical, &request->physical) || copy_to_user(argp, &req32, sizeof(req32))) { - drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_FREE, (unsigned long)request); + drm_ioctl(file, DRM_IOCTL_AGP_FREE, (unsigned long)request); return -EFAULT; } @@ -856,8 +836,7 @@ || __put_user(handle, &request->handle)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_FREE, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_AGP_FREE, (unsigned long)request); } typedef struct drm_agp_binding32 { @@ -881,8 +860,7 @@ || __put_user(req32.offset, &request->offset)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_BIND, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_AGP_BIND, (unsigned long)request); } static int compat_drm_agp_unbind(struct file *file, unsigned int cmd, @@ -898,8 +876,7 @@ || __put_user(handle, &request->handle)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_AGP_UNBIND, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_AGP_UNBIND, (unsigned long)request); } #endif /* __OS_HAS_AGP */ @@ -923,8 +900,7 @@ || __put_user(x, &request->size)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_SG_ALLOC, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_SG_ALLOC, (unsigned long)request); if (err) return err; @@ -950,8 +926,7 @@ || __put_user(x << PAGE_SHIFT, &request->handle)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_SG_FREE, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_SG_FREE, (unsigned long)request); } #if defined(CONFIG_X86) || defined(CONFIG_IA64) @@ -981,8 +956,7 @@ __put_user(update32.data, &request->data)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_UPDATE_DRAW, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_UPDATE_DRAW, (unsigned long)request); return err; } #endif @@ -1023,8 +997,7 @@ || __put_user(req32.request.signal, &request->request.signal)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_WAIT_VBLANK, (unsigned long)request); + err = drm_ioctl(file, DRM_IOCTL_WAIT_VBLANK, (unsigned long)request); if (err) return err; @@ -1094,16 +1067,14 @@ * than always failing. */ if (nr >= ARRAY_SIZE(drm_compat_ioctls)) - return drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg); + return drm_ioctl(filp, cmd, arg); fn = drm_compat_ioctls[nr]; - lock_kernel(); /* XXX for now */ if (fn != NULL) ret = (*fn) (filp, cmd, arg); else - ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); - unlock_kernel(); + ret = drm_ioctl(filp, cmd, arg); return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/drm_stub.c +++ linux-2.6.32/drivers/gpu/drm/drm_stub.c @@ -128,6 +128,7 @@ kref_get(&master->refcount); return master; } +EXPORT_SYMBOL(drm_master_get); static void drm_master_destroy(struct kref *kref) { @@ -170,10 +171,13 @@ kref_put(&(*master)->refcount, drm_master_destroy); *master = NULL; } +EXPORT_SYMBOL(drm_master_put); int drm_setmaster_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { + int ret = 0; + if (file_priv->is_master) return 0; @@ -188,6 +192,13 @@ mutex_lock(&dev->struct_mutex); file_priv->minor->master = drm_master_get(file_priv->master); file_priv->is_master = 1; + if (dev->driver->master_set) { + ret = dev->driver->master_set(dev, file_priv, false); + if (unlikely(ret != 0)) { + file_priv->is_master = 0; + drm_master_put(&file_priv->minor->master); + } + } mutex_unlock(&dev->struct_mutex); } @@ -204,6 +215,8 @@ return -EINVAL; mutex_lock(&dev->struct_mutex); + if (dev->driver->master_drop) + dev->driver->master_drop(dev, file_priv, false); drm_master_put(&file_priv->minor->master); file_priv->is_master = 0; mutex_unlock(&dev->struct_mutex); @@ -220,9 +233,11 @@ INIT_LIST_HEAD(&dev->ctxlist); INIT_LIST_HEAD(&dev->vmalist); INIT_LIST_HEAD(&dev->maplist); + INIT_LIST_HEAD(&dev->vblank_event_list); spin_lock_init(&dev->count_lock); spin_lock_init(&dev->drw_lock); + spin_lock_init(&dev->event_lock); init_timer(&dev->timer); mutex_init(&dev->struct_mutex); mutex_init(&dev->ctxlist_mutex); --- linux-2.6.32.orig/drivers/gpu/drm/drm_edid.c +++ linux-2.6.32/drivers/gpu/drm/drm_edid.c @@ -85,6 +85,8 @@ /* Envision Peripherals, Inc. EN-7100e */ { "EPI", 59264, EDID_QUIRK_135_CLOCK_TOO_HIGH }, + /* Envision EN2028 */ + { "EPI", 8232, EDID_QUIRK_PREFER_LARGE_60 }, /* Funai Electronics PM36B */ { "FCM", 13600, EDID_QUIRK_PREFER_LARGE_75 | @@ -123,18 +125,20 @@ */ static bool edid_is_valid(struct edid *edid) { - int i; + int i, score = 0; u8 csum = 0; u8 *raw_edid = (u8 *)edid; - if (memcmp(edid->header, edid_header, sizeof(edid_header))) - goto bad; - if (edid->version != 1) { - DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version); + for (i = 0; i < sizeof(edid_header); i++) + if (raw_edid[i] == edid_header[i]) + score++; + + if (score == 8) ; + else if (score >= 6) { + DRM_DEBUG("Fixing EDID header, your hardware may be failing\n"); + memcpy(raw_edid, edid_header, sizeof(edid_header)); + } else goto bad; - } - if (edid->revision > 4) - DRM_DEBUG("EDID minor > 4, assuming backward compatibility\n"); for (i = 0; i < EDID_LENGTH; i++) csum += raw_edid[i]; @@ -143,6 +147,14 @@ goto bad; } + if (edid->version != 1) { + DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version); + goto bad; + } + + if (edid->revision > 4) + DRM_DEBUG("EDID minor > 4, assuming backward compatibility\n"); + return 1; bad: @@ -481,16 +493,17 @@ 3048, 3536, 0, 1600, 1603, 1609, 1682, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, }; +static const int drm_num_dmt_modes = + sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode); static struct drm_display_mode *drm_find_dmt(struct drm_device *dev, int hsize, int vsize, int fresh) { - int i, count; + int i; struct drm_display_mode *ptr, *mode; - count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode); mode = NULL; - for (i = 0; i < count; i++) { + for (i = 0; i < drm_num_dmt_modes; i++) { ptr = &drm_dmt_modes[i]; if (hsize == ptr->hdisplay && vsize == ptr->vdisplay && @@ -587,6 +600,50 @@ return mode; } +/* + * EDID is delightfully ambiguous about how interlaced modes are to be + * encoded. Our internal representation is of frame height, but some + * HDTV detailed timings are encoded as field height. + * + * The format list here is from CEA, in frame size. Technically we + * should be checking refresh rate too. Whatever. + */ +static void +drm_mode_do_interlace_quirk(struct drm_display_mode *mode, + struct detailed_pixel_timing *pt) +{ + int i; + static const struct { + int w, h; + } cea_interlaced[] = { + { 1920, 1080 }, + { 720, 480 }, + { 1440, 480 }, + { 2880, 480 }, + { 720, 576 }, + { 1440, 576 }, + { 2880, 576 }, + }; + static const int n_sizes = + sizeof(cea_interlaced)/sizeof(cea_interlaced[0]); + + if (!(pt->misc & DRM_EDID_PT_INTERLACED)) + return; + + for (i = 0; i < n_sizes; i++) { + if ((mode->hdisplay == cea_interlaced[i].w) && + (mode->vdisplay == cea_interlaced[i].h / 2)) { + mode->vdisplay *= 2; + mode->vsync_start *= 2; + mode->vsync_end *= 2; + mode->vtotal *= 2; + mode->vtotal |= 1; + } + } + + mode->flags |= DRM_MODE_FLAG_INTERLACE; +} + /** * drm_mode_detailed - create a new mode from an EDID detailed timing section * @dev: DRM device (needed to create new mode) @@ -622,8 +679,7 @@ return NULL; } if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) { - printk(KERN_WARNING "integrated sync not supported\n"); - return NULL; + printk(KERN_WARNING "composite sync not supported\n"); } /* it is incorrect if hsync/vsync width is zero */ @@ -653,15 +709,6 @@ mode->vsync_end = mode->vsync_start + vsync_pulse_width; mode->vtotal = mode->vdisplay + vblank; - /* perform the basic check for the detailed timing */ - if (mode->hsync_end > mode->htotal || - mode->vsync_end > mode->vtotal) { - drm_mode_destroy(dev, mode); - DRM_DEBUG_KMS("Incorrect detailed timing. " - "Sync is beyond the blank.\n"); - return NULL; - } - /* Some EDIDs have bogus h/vtotal values */ if (mode->hsync_end > mode->htotal) mode->htotal = mode->hsync_end + 1; @@ -670,8 +717,7 @@ drm_mode_set_name(mode); - if (pt->misc & DRM_EDID_PT_INTERLACED) - mode->flags |= DRM_MODE_FLAG_INTERLACE; + drm_mode_do_interlace_quirk(mode, pt); if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) { pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE; @@ -834,8 +880,169 @@ return modes; } +/* + * XXX fix this for: + * - GTF secondary curve formula + * - EDID 1.4 range offsets + * - CVT extended bits + */ +static bool +mode_in_range(struct drm_display_mode *mode, struct detailed_timing *timing) +{ + struct detailed_data_monitor_range *range; + int hsync, vrefresh; + + range = &timing->data.other_data.data.range; + + hsync = drm_mode_hsync(mode); + vrefresh = drm_mode_vrefresh(mode); + + if (hsync < range->min_hfreq_khz || hsync > range->max_hfreq_khz) + return false; + + if (vrefresh < range->min_vfreq || vrefresh > range->max_vfreq) + return false; + + if (range->pixel_clock_mhz && range->pixel_clock_mhz != 0xff) { + /* be forgiving since it's in units of 10MHz */ + int max_clock = range->pixel_clock_mhz * 10 + 9; + max_clock *= 1000; + if (mode->clock > max_clock) + return false; + } + + return true; +} + +/* + * XXX If drm_dmt_modes ever regrows the CVT-R modes (and it will) this will + * need to account for them. + */ +static int drm_gtf_modes_for_range(struct drm_connector *connector, + struct detailed_timing *timing) +{ + int i, modes = 0; + struct drm_display_mode *newmode; + struct drm_device *dev = connector->dev; + + for (i = 0; i < drm_num_dmt_modes; i++) { + if (mode_in_range(drm_dmt_modes + i, timing)) { + newmode = drm_mode_duplicate(dev, &drm_dmt_modes[i]); + if (newmode) { + drm_mode_probed_add(connector, newmode); + modes++; + } + } + } + + return modes; +} + +static int drm_cvt_modes(struct drm_connector *connector, + struct detailed_timing *timing) +{ + int i, j, modes = 0; + struct drm_display_mode *newmode; + struct drm_device *dev = connector->dev; + struct cvt_timing *cvt; + const int rates[] = { 60, 85, 75, 60, 50 }; + const u8 empty[3] = { 0, 0, 0 }; + + for (i = 0; i < 4; i++) { + int uninitialized_var(width), height; + cvt = &(timing->data.other_data.data.cvt[i]); + + if (!memcmp(cvt->code, empty, 3)) + continue; + + height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 4) + 1) * 2; + switch (cvt->code[1] & 0x0c) { + case 0x00: + width = height * 4 / 3; + break; + case 0x04: + width = height * 16 / 9; + break; + case 0x08: + width = height * 16 / 10; + break; + case 0x0c: + width = height * 15 / 9; + break; + } + + for (j = 1; j < 5; j++) { + if (cvt->code[2] & (1 << j)) { + newmode = drm_cvt_mode(dev, width, height, + rates[j], j == 0, + false, false); + if (newmode) { + drm_mode_probed_add(connector, newmode); + modes++; + } + } + } + } + + return modes; +} + +static int add_detailed_modes(struct drm_connector *connector, + struct detailed_timing *timing, + struct edid *edid, u32 quirks, int preferred) +{ + int i, modes = 0; + struct detailed_non_pixel *data = &timing->data.other_data; + int timing_level = standard_timing_level(edid); + int gtf = (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF); + struct drm_display_mode *newmode; + struct drm_device *dev = connector->dev; + + if (timing->pixel_clock) { + newmode = drm_mode_detailed(dev, edid, timing, quirks); + if (!newmode) + return 0; + + if (preferred) + newmode->type |= DRM_MODE_TYPE_PREFERRED; + + drm_mode_probed_add(connector, newmode); + return 1; + } + + /* other timing types */ + switch (data->type) { + case EDID_DETAIL_MONITOR_RANGE: + if (gtf) + modes += drm_gtf_modes_for_range(connector, timing); + break; + case EDID_DETAIL_STD_MODES: + /* Six modes per detailed section */ + for (i = 0; i < 6; i++) { + struct std_timing *std; + struct drm_display_mode *newmode; + + std = &data->data.timings[i]; + newmode = drm_mode_std(dev, std, edid->revision, + timing_level); + if (newmode) { + drm_mode_probed_add(connector, newmode); + modes++; + } + } + break; + case EDID_DETAIL_CVT_3BYTE: + modes += drm_cvt_modes(connector, timing); + break; + default: + break; + } + + return modes; +} + /** - * add_detailed_modes - get detailed mode info from EDID data + * add_detailed_info - get detailed mode info from EDID data * @connector: attached connector * @edid: EDID block to scan * @quirks: quirks to apply @@ -846,67 +1053,24 @@ static int add_detailed_info(struct drm_connector *connector, struct edid *edid, u32 quirks) { - struct drm_device *dev = connector->dev; - int i, j, modes = 0; - int timing_level; - - timing_level = standard_timing_level(edid); + int i, modes = 0; for (i = 0; i < EDID_DETAILED_TIMINGS; i++) { struct detailed_timing *timing = &edid->detailed_timings[i]; - struct detailed_non_pixel *data = &timing->data.other_data; - struct drm_display_mode *newmode; - - /* X server check is version 1.1 or higher */ - if (edid->version == 1 && edid->revision >= 1 && - !timing->pixel_clock) { - /* Other timing or info */ - switch (data->type) { - case EDID_DETAIL_MONITOR_SERIAL: - break; - case EDID_DETAIL_MONITOR_STRING: - break; - case EDID_DETAIL_MONITOR_RANGE: - /* Get monitor range data */ - break; - case EDID_DETAIL_MONITOR_NAME: - break; - case EDID_DETAIL_MONITOR_CPDATA: - break; - case EDID_DETAIL_STD_MODES: - for (j = 0; j < 6; i++) { - struct std_timing *std; - struct drm_display_mode *newmode; - - std = &data->data.timings[j]; - newmode = drm_mode_std(dev, std, - edid->revision, - timing_level); - if (newmode) { - drm_mode_probed_add(connector, newmode); - modes++; - } - } - break; - default: - break; - } - } else { - newmode = drm_mode_detailed(dev, edid, timing, quirks); - if (!newmode) - continue; + int preferred = (i == 0) && (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING); - /* First detailed mode is preferred */ - if (i == 0 && (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING)) - newmode->type |= DRM_MODE_TYPE_PREFERRED; - drm_mode_probed_add(connector, newmode); + /* In 1.0, only timings are allowed */ + if (!timing->pixel_clock && edid->version == 1 && + edid->revision == 0) + continue; - modes++; - } + modes += add_detailed_modes(connector, timing, edid, quirks, + preferred); } return modes; } + /** * add_detailed_mode_eedid - get detailed mode info from addtional timing * EDID block @@ -920,12 +1084,9 @@ static int add_detailed_info_eedid(struct drm_connector *connector, struct edid *edid, u32 quirks) { - struct drm_device *dev = connector->dev; - int i, j, modes = 0; + int i, modes = 0; char *edid_ext = NULL; struct detailed_timing *timing; - struct detailed_non_pixel *data; - struct drm_display_mode *newmode; int edid_ext_num; int start_offset, end_offset; int timing_level; @@ -976,51 +1137,7 @@ for (i = start_offset; i < end_offset; i += sizeof(struct detailed_timing)) { timing = (struct detailed_timing *)(edid_ext + i); - data = &timing->data.other_data; - /* Detailed mode timing */ - if (timing->pixel_clock) { - newmode = drm_mode_detailed(dev, edid, timing, quirks); - if (!newmode) - continue; - - drm_mode_probed_add(connector, newmode); - - modes++; - continue; - } - - /* Other timing or info */ - switch (data->type) { - case EDID_DETAIL_MONITOR_SERIAL: - break; - case EDID_DETAIL_MONITOR_STRING: - break; - case EDID_DETAIL_MONITOR_RANGE: - /* Get monitor range data */ - break; - case EDID_DETAIL_MONITOR_NAME: - break; - case EDID_DETAIL_MONITOR_CPDATA: - break; - case EDID_DETAIL_STD_MODES: - /* Five modes per detailed section */ - for (j = 0; j < 5; i++) { - struct std_timing *std; - struct drm_display_mode *newmode; - - std = &data->data.timings[j]; - newmode = drm_mode_std(dev, std, - edid->revision, - timing_level); - if (newmode) { - drm_mode_probed_add(connector, newmode); - modes++; - } - } - break; - default: - break; - } + modes += add_detailed_modes(connector, timing, edid, quirks, 0); } return modes; @@ -1066,19 +1183,19 @@ struct i2c_adapter *adapter, char *buf, int len) { - int ret; + int i; - ret = drm_do_probe_ddc_edid(adapter, buf, len); - if (ret != 0) { - goto end; - } - if (!edid_is_valid((struct edid *)buf)) { - dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", - drm_get_connector_name(connector)); - ret = -1; + for (i = 0; i < 4; i++) { + if (drm_do_probe_ddc_edid(adapter, buf, len)) + return -1; + if (edid_is_valid((struct edid *)buf)) + return 0; } -end: - return ret; + + /* repeated checksum failures; warn, but carry on */ + dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", + drm_get_connector_name(connector)); + return -1; } /** @@ -1296,6 +1413,8 @@ ptr->vdisplay > vdisplay) continue; } + if (drm_mode_vrefresh(ptr) > 61) + continue; mode = drm_mode_duplicate(dev, ptr); if (mode) { drm_mode_probed_add(connector, mode); --- linux-2.6.32.orig/drivers/gpu/drm/Kconfig +++ linux-2.6.32/drivers/gpu/drm/Kconfig @@ -66,6 +66,8 @@ If M is selected, the module will be called radeon. +source "drivers/gpu/drm/radeon/Kconfig" + config DRM_I810 tristate "Intel I810" depends on DRM && AGP && AGP_INTEL --- linux-2.6.32.orig/drivers/gpu/drm/ati_pcigart.c +++ linux-2.6.32/drivers/gpu/drm/ati_pcigart.c @@ -39,8 +39,7 @@ struct drm_ati_pcigart_info *gart_info) { gart_info->table_handle = drm_pci_alloc(dev, gart_info->table_size, - PAGE_SIZE, - gart_info->table_mask); + PAGE_SIZE); if (gart_info->table_handle == NULL) return -ENOMEM; @@ -112,6 +111,13 @@ if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) { DRM_DEBUG("PCI: no table in VRAM: using normal RAM\n"); + if (pci_set_dma_mask(dev->pdev, gart_info->table_mask)) { + DRM_ERROR("fail to set dma mask to 0x%Lx\n", + (unsigned long long)gart_info->table_mask); + ret = 1; + goto done; + } + ret = drm_ati_alloc_pcigart_table(dev, gart_info); if (ret) { DRM_ERROR("cannot allocate PCI GART page!\n"); --- linux-2.6.32.orig/drivers/gpu/drm/drm_modes.c +++ linux-2.6.32/drivers/gpu/drm/drm_modes.c @@ -1,9 +1,4 @@ /* - * The list_sort function is (presumably) licensed under the GPL (see the - * top level "COPYING" file for details). - * - * The remainder of this file is: - * * Copyright © 1997-2003 by The XFree86 Project, Inc. * Copyright © 2007 Dave Airlie * Copyright © 2007-2008 Intel Corporation @@ -36,6 +31,7 @@ */ #include +#include #include "drmP.h" #include "drm.h" #include "drm_crtc.h" @@ -553,6 +549,32 @@ } EXPORT_SYMBOL(drm_mode_height); +/** drm_mode_hsync - get the hsync of a mode + * @mode: mode + * + * LOCKING: + * None. + * + * Return @modes's hsync rate in kHz, rounded to the nearest int. + */ +int drm_mode_hsync(struct drm_display_mode *mode) +{ + unsigned int calc_val; + + if (mode->hsync) + return mode->hsync; + + if (mode->htotal < 0) + return 0; + + calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */ + calc_val += 500; /* round to 1000Hz */ + calc_val /= 1000; /* truncate to kHz */ + + return calc_val; +} +EXPORT_SYMBOL(drm_mode_hsync); + /** * drm_mode_vrefresh - get the vrefresh of a mode * @mode: mode @@ -560,7 +582,7 @@ * LOCKING: * None. * - * Return @mode's vrefresh rate or calculate it if necessary. + * Return @mode's vrefresh rate in Hz or calculate it if necessary. * * FIXME: why is this needed? shouldn't vrefresh be set already? * @@ -829,6 +851,7 @@ /** * drm_mode_compare - compare modes for favorability + * @priv: unused * @lh_a: list_head for first mode * @lh_b: list_head for second mode * @@ -842,7 +865,7 @@ * Negative if @lh_a is better than @lh_b, zero if they're equivalent, or * positive if @lh_b is better than @lh_a. */ -static int drm_mode_compare(struct list_head *lh_a, struct list_head *lh_b) +static int drm_mode_compare(void *priv, struct list_head *lh_a, struct list_head *lh_b) { struct drm_display_mode *a = list_entry(lh_a, struct drm_display_mode, head); struct drm_display_mode *b = list_entry(lh_b, struct drm_display_mode, head); @@ -859,85 +882,6 @@ return diff; } -/* FIXME: what we don't have a list sort function? */ -/* list sort from Mark J Roberts (mjr@znex.org) */ -void list_sort(struct list_head *head, - int (*cmp)(struct list_head *a, struct list_head *b)) -{ - struct list_head *p, *q, *e, *list, *tail, *oldhead; - int insize, nmerges, psize, qsize, i; - - list = head->next; - list_del(head); - insize = 1; - for (;;) { - p = oldhead = list; - list = tail = NULL; - nmerges = 0; - - while (p) { - nmerges++; - q = p; - psize = 0; - for (i = 0; i < insize; i++) { - psize++; - q = q->next == oldhead ? NULL : q->next; - if (!q) - break; - } - - qsize = insize; - while (psize > 0 || (qsize > 0 && q)) { - if (!psize) { - e = q; - q = q->next; - qsize--; - if (q == oldhead) - q = NULL; - } else if (!qsize || !q) { - e = p; - p = p->next; - psize--; - if (p == oldhead) - p = NULL; - } else if (cmp(p, q) <= 0) { - e = p; - p = p->next; - psize--; - if (p == oldhead) - p = NULL; - } else { - e = q; - q = q->next; - qsize--; - if (q == oldhead) - q = NULL; - } - if (tail) - tail->next = e; - else - list = e; - e->prev = tail; - tail = e; - } - p = q; - } - - tail->next = list; - list->prev = tail; - - if (nmerges <= 1) - break; - - insize *= 2; - } - - head->next = list; - head->prev = list->prev; - list->prev->next = head; - list->prev = head; -} - /** * drm_mode_sort - sort mode list * @mode_list: list to sort @@ -949,7 +893,7 @@ */ void drm_mode_sort(struct list_head *mode_list) { - list_sort(mode_list, drm_mode_compare); + list_sort(NULL, mode_list, drm_mode_compare); } EXPORT_SYMBOL(drm_mode_sort); --- linux-2.6.32.orig/drivers/gpu/drm/drm_gem.c +++ linux-2.6.32/drivers/gpu/drm/drm_gem.c @@ -142,19 +142,6 @@ if (IS_ERR(obj->filp)) goto free; - /* Basically we want to disable the OOM killer and handle ENOMEM - * ourselves by sacrificing pages from cached buffers. - * XXX shmem_file_[gs]et_gfp_mask() - */ - mapping_set_gfp_mask(obj->filp->f_path.dentry->d_inode->i_mapping, - GFP_HIGHUSER | - __GFP_COLD | - __GFP_FS | - __GFP_RECLAIMABLE | - __GFP_NORETRY | - __GFP_NOWARN | - __GFP_NOMEMALLOC); - kref_init(&obj->refcount); kref_init(&obj->handlecount); obj->size = size; --- linux-2.6.32.orig/drivers/gpu/drm/drm_mm.c +++ linux-2.6.32/drivers/gpu/drm/drm_mm.c @@ -226,6 +226,44 @@ } EXPORT_SYMBOL(drm_mm_get_block_generic); +struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *node, + unsigned long size, + unsigned alignment, + unsigned long start, + unsigned long end, + int atomic) +{ + struct drm_mm_node *align_splitoff = NULL; + unsigned tmp = 0; + unsigned wasted = 0; + + if (node->start < start) + wasted += start - node->start; + if (alignment) + tmp = ((node->start + wasted) % alignment); + + if (tmp) + wasted += alignment - tmp; + if (wasted) { + align_splitoff = drm_mm_split_at_start(node, wasted, atomic); + if (unlikely(align_splitoff == NULL)) + return NULL; + } + + if (node->size == size) { + list_del_init(&node->fl_entry); + node->free = 0; + } else { + node = drm_mm_split_at_start(node, size, atomic); + } + + if (align_splitoff) + drm_mm_put_block(align_splitoff); + + return node; +} +EXPORT_SYMBOL(drm_mm_get_block_range_generic); + /* * Put a block. Merge with the previous and / or next block if they are free. * Otherwise add to the free stack. @@ -320,7 +358,7 @@ if (entry->size >= size + wasted) { if (!best_match) return entry; - if (size < best_size) { + if (entry->size < best_size) { best = entry; best_size = entry->size; } @@ -331,6 +369,57 @@ } EXPORT_SYMBOL(drm_mm_search_free); +struct drm_mm_node *drm_mm_search_free_in_range(const struct drm_mm *mm, + unsigned long size, + unsigned alignment, + unsigned long start, + unsigned long end, + int best_match) +{ + struct list_head *list; + const struct list_head *free_stack = &mm->fl_entry; + struct drm_mm_node *entry; + struct drm_mm_node *best; + unsigned long best_size; + unsigned wasted; + + best = NULL; + best_size = ~0UL; + + list_for_each(list, free_stack) { + entry = list_entry(list, struct drm_mm_node, fl_entry); + wasted = 0; + + if (entry->size < size) + continue; + + if (entry->start > end || (entry->start+entry->size) < start) + continue; + + if (entry->start < start) + wasted += start - entry->start; + + if (alignment) { + register unsigned tmp = (entry->start + wasted) % alignment; + if (tmp) + wasted += alignment - tmp; + } + + if (entry->size >= size + wasted && + (entry->start + wasted + size) <= end) { + if (!best_match) + return entry; + if (entry->size < best_size) { + best = entry; + best_size = entry->size; + } + } + } + + return best; +} +EXPORT_SYMBOL(drm_mm_search_free_in_range); + int drm_mm_clean(struct drm_mm * mm) { struct list_head *head = &mm->ml_entry; @@ -381,6 +470,26 @@ } EXPORT_SYMBOL(drm_mm_takedown); +void drm_mm_debug_table(struct drm_mm *mm, const char *prefix) +{ + struct drm_mm_node *entry; + int total_used = 0, total_free = 0, total = 0; + + list_for_each_entry(entry, &mm->ml_entry, ml_entry) { + printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8ld: %s\n", + prefix, entry->start, entry->start + entry->size, + entry->size, entry->free ? "free" : "used"); + total += entry->size; + if (entry->free) + total_free += entry->size; + else + total_used += entry->size; + } + printk(KERN_DEBUG "%s total: %d, used %d free %d\n", prefix, total, + total_used, total_free); +} +EXPORT_SYMBOL(drm_mm_debug_table); + #if defined(CONFIG_DEBUG_FS) int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) { @@ -395,7 +504,7 @@ else total_used += entry->size; } - seq_printf(m, "total: %d, used %d free %d\n", total, total_free, total_used); + seq_printf(m, "total: %d, used %d free %d\n", total, total_used, total_free); return 0; } EXPORT_SYMBOL(drm_mm_dump_table); --- linux-2.6.32.orig/drivers/gpu/drm/drm_dp_i2c_helper.c +++ linux-2.6.32/drivers/gpu/drm/drm_dp_i2c_helper.c @@ -0,0 +1,209 @@ +/* + * Copyright © 2009 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "drm_dp_helper.h" +#include "drmP.h" + +/* Run a single AUX_CH I2C transaction, writing/reading data as necessary */ +static int +i2c_algo_dp_aux_transaction(struct i2c_adapter *adapter, int mode, + uint8_t write_byte, uint8_t *read_byte) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + int ret; + + ret = (*algo_data->aux_ch)(adapter, mode, + write_byte, read_byte); + return ret; +} + +/* + * I2C over AUX CH + */ + +/* + * Send the address. If the I2C link is running, this 'restarts' + * the connection with the new address, this is used for doing + * a write followed by a read (as needed for DDC) + */ +static int +i2c_algo_dp_aux_address(struct i2c_adapter *adapter, u16 address, bool reading) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + int mode = MODE_I2C_START; + int ret; + + if (reading) + mode |= MODE_I2C_READ; + else + mode |= MODE_I2C_WRITE; + algo_data->address = address; + algo_data->running = true; + ret = i2c_algo_dp_aux_transaction(adapter, mode, 0, NULL); + return ret; +} + +/* + * Stop the I2C transaction. This closes out the link, sending + * a bare address packet with the MOT bit turned off + */ +static void +i2c_algo_dp_aux_stop(struct i2c_adapter *adapter, bool reading) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + int mode = MODE_I2C_STOP; + + if (reading) + mode |= MODE_I2C_READ; + else + mode |= MODE_I2C_WRITE; + if (algo_data->running) { + (void) i2c_algo_dp_aux_transaction(adapter, mode, 0, NULL); + algo_data->running = false; + } +} + +/* + * Write a single byte to the current I2C address, the + * the I2C link must be running or this returns -EIO + */ +static int +i2c_algo_dp_aux_put_byte(struct i2c_adapter *adapter, u8 byte) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + int ret; + + if (!algo_data->running) + return -EIO; + + ret = i2c_algo_dp_aux_transaction(adapter, MODE_I2C_WRITE, byte, NULL); + return ret; +} + +/* + * Read a single byte from the current I2C address, the + * I2C link must be running or this returns -EIO + */ +static int +i2c_algo_dp_aux_get_byte(struct i2c_adapter *adapter, u8 *byte_ret) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + int ret; + + if (!algo_data->running) + return -EIO; + + ret = i2c_algo_dp_aux_transaction(adapter, MODE_I2C_READ, 0, byte_ret); + return ret; +} + +static int +i2c_algo_dp_aux_xfer(struct i2c_adapter *adapter, + struct i2c_msg *msgs, + int num) +{ + int ret = 0; + bool reading = false; + int m; + int b; + + for (m = 0; m < num; m++) { + u16 len = msgs[m].len; + u8 *buf = msgs[m].buf; + reading = (msgs[m].flags & I2C_M_RD) != 0; + ret = i2c_algo_dp_aux_address(adapter, msgs[m].addr, reading); + if (ret < 0) + break; + if (reading) { + for (b = 0; b < len; b++) { + ret = i2c_algo_dp_aux_get_byte(adapter, &buf[b]); + if (ret < 0) + break; + } + } else { + for (b = 0; b < len; b++) { + ret = i2c_algo_dp_aux_put_byte(adapter, buf[b]); + if (ret < 0) + break; + } + } + if (ret < 0) + break; + } + if (ret >= 0) + ret = num; + i2c_algo_dp_aux_stop(adapter, reading); + DRM_DEBUG_KMS("dp_aux_xfer return %d\n", ret); + return ret; +} + +static u32 +i2c_algo_dp_aux_functionality(struct i2c_adapter *adapter) +{ + return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | + I2C_FUNC_SMBUS_READ_BLOCK_DATA | + I2C_FUNC_SMBUS_BLOCK_PROC_CALL | + I2C_FUNC_10BIT_ADDR; +} + +static const struct i2c_algorithm i2c_dp_aux_algo = { + .master_xfer = i2c_algo_dp_aux_xfer, + .functionality = i2c_algo_dp_aux_functionality, +}; + +static void +i2c_dp_aux_reset_bus(struct i2c_adapter *adapter) +{ + (void) i2c_algo_dp_aux_address(adapter, 0, false); + (void) i2c_algo_dp_aux_stop(adapter, false); + +} + +static int +i2c_dp_aux_prepare_bus(struct i2c_adapter *adapter) +{ + adapter->algo = &i2c_dp_aux_algo; + adapter->retries = 3; + i2c_dp_aux_reset_bus(adapter); + return 0; +} + +int +i2c_dp_aux_add_bus(struct i2c_adapter *adapter) +{ + int error; + + error = i2c_dp_aux_prepare_bus(adapter); + if (error) + return error; + error = i2c_add_adapter(adapter); + return error; +} +EXPORT_SYMBOL(i2c_dp_aux_add_bus); --- linux-2.6.32.orig/drivers/gpu/drm/Makefile +++ linux-2.6.32/drivers/gpu/drm/Makefile @@ -15,7 +15,7 @@ drm-$(CONFIG_COMPAT) += drm_ioc32.o -drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o +drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o drm_dp_i2c_helper.o obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o @@ -30,4 +30,7 @@ obj-$(CONFIG_DRM_I915) += i915/ obj-$(CONFIG_DRM_SIS) += sis/ obj-$(CONFIG_DRM_SAVAGE)+= savage/ +obj-$(CONFIG_DRM_VMWGFX)+= vmwgfx/ obj-$(CONFIG_DRM_VIA) +=via/ +obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/ +obj-y += i2c/ --- linux-2.6.32.orig/drivers/gpu/drm/r128/r128_ioc32.c +++ linux-2.6.32/drivers/gpu/drm/r128/r128_ioc32.c @@ -95,8 +95,7 @@ &init->agp_textures_offset)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_R128_INIT, (unsigned long)init); + return drm_ioctl(file, DRM_IOCTL_R128_INIT, (unsigned long)init); } typedef struct drm_r128_depth32 { @@ -129,8 +128,7 @@ &depth->mask)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_R128_DEPTH, (unsigned long)depth); + return drm_ioctl(file, DRM_IOCTL_R128_DEPTH, (unsigned long)depth); } @@ -153,8 +151,7 @@ &stipple->mask)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_R128_STIPPLE, (unsigned long)stipple); + return drm_ioctl(file, DRM_IOCTL_R128_STIPPLE, (unsigned long)stipple); } typedef struct drm_r128_getparam32 { @@ -178,8 +175,7 @@ &getparam->value)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_R128_GETPARAM, (unsigned long)getparam); + return drm_ioctl(file, DRM_IOCTL_R128_GETPARAM, (unsigned long)getparam); } drm_ioctl_compat_t *r128_compat_ioctls[] = { @@ -210,12 +206,10 @@ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(r128_compat_ioctls)) fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; - lock_kernel(); /* XXX for now */ if (fn != NULL) ret = (*fn) (filp, cmd, arg); else - ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); - unlock_kernel(); + ret = drm_ioctl(filp, cmd, arg); return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/r128/r128_drv.c +++ linux-2.6.32/drivers/gpu/drm/r128/r128_drv.c @@ -64,7 +64,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_reg.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_reg.h @@ -0,0 +1,57 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/** + * This file contains virtual hardware defines for kernel space. + */ + +#ifndef _VMWGFX_REG_H_ +#define _VMWGFX_REG_H_ + +#include + +#define VMWGFX_INDEX_PORT 0x0 +#define VMWGFX_VALUE_PORT 0x1 +#define VMWGFX_IRQSTATUS_PORT 0x8 + +struct svga_guest_mem_descriptor { + __le32 ppn; + __le32 num_pages; +}; + +struct svga_fifo_cmd_fence { + __le32 fence; +}; + +#define SVGA_SYNC_GENERIC 1 +#define SVGA_SYNC_FIFOFULL 2 + +#include "svga_types.h" + +#include "svga3d_reg.h" + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c @@ -0,0 +1,87 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_drv.h" +#include "vmwgfx_drm.h" + +int vmw_getparam_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct drm_vmw_getparam_arg *param = + (struct drm_vmw_getparam_arg *)data; + + switch (param->param) { + case DRM_VMW_PARAM_NUM_STREAMS: + param->value = vmw_overlay_num_overlays(dev_priv); + break; + case DRM_VMW_PARAM_NUM_FREE_STREAMS: + param->value = vmw_overlay_num_free_overlays(dev_priv); + break; + case DRM_VMW_PARAM_3D: + param->value = vmw_fifo_have_3d(dev_priv) ? 1 : 0; + break; + case DRM_VMW_PARAM_FIFO_OFFSET: + param->value = dev_priv->mmio_start; + break; + case DRM_VMW_PARAM_HW_CAPS: + param->value = dev_priv->capabilities; + break; + case DRM_VMW_PARAM_FIFO_CAPS: + param->value = dev_priv->fifo.capabilities; + break; + default: + DRM_ERROR("Illegal vmwgfx get param request: %d\n", + param->param); + return -EINVAL; + } + + return 0; +} + +int vmw_fifo_debug_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_fifo_state *fifo_state = &dev_priv->fifo; + struct drm_vmw_fifo_debug_arg *arg = + (struct drm_vmw_fifo_debug_arg *)data; + __le32 __user *buffer = (__le32 __user *) + (unsigned long)arg->debug_buffer; + + if (unlikely(fifo_state->last_buffer == NULL)) + return -EINVAL; + + if (arg->debug_buffer_size < fifo_state->last_data_size) { + arg->used_size = arg->debug_buffer_size; + arg->did_not_fit = 1; + } else { + arg->used_size = fifo_state->last_data_size; + arg->did_not_fit = 0; + } + return copy_to_user(buffer, fifo_state->last_buffer, arg->used_size); +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c @@ -0,0 +1,286 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "drmP.h" +#include "vmwgfx_drv.h" + +#define VMW_FENCE_WRAP (1 << 24) + +irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS) +{ + struct drm_device *dev = (struct drm_device *)arg; + struct vmw_private *dev_priv = vmw_priv(dev); + uint32_t status; + + spin_lock(&dev_priv->irq_lock); + status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); + spin_unlock(&dev_priv->irq_lock); + + if (status & SVGA_IRQFLAG_ANY_FENCE) + wake_up_all(&dev_priv->fence_queue); + if (status & SVGA_IRQFLAG_FIFO_PROGRESS) + wake_up_all(&dev_priv->fifo_queue); + + if (likely(status)) { + outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); + return IRQ_HANDLED; + } + + return IRQ_NONE; +} + +static bool vmw_fifo_idle(struct vmw_private *dev_priv, uint32_t sequence) +{ + uint32_t busy; + + mutex_lock(&dev_priv->hw_mutex); + busy = vmw_read(dev_priv, SVGA_REG_BUSY); + mutex_unlock(&dev_priv->hw_mutex); + + return (busy == 0); +} + + +bool vmw_fence_signaled(struct vmw_private *dev_priv, + uint32_t sequence) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + struct vmw_fifo_state *fifo_state; + bool ret; + + if (likely(dev_priv->last_read_sequence - sequence < VMW_FENCE_WRAP)) + return true; + + dev_priv->last_read_sequence = ioread32(fifo_mem + SVGA_FIFO_FENCE); + if (likely(dev_priv->last_read_sequence - sequence < VMW_FENCE_WRAP)) + return true; + + fifo_state = &dev_priv->fifo; + if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE) && + vmw_fifo_idle(dev_priv, sequence)) + return true; + + /** + * Then check if the sequence is higher than what we've actually + * emitted. Then the fence is stale and signaled. + */ + + ret = ((atomic_read(&dev_priv->fence_seq) - sequence) + > VMW_FENCE_WRAP); + + return ret; +} + +int vmw_fallback_wait(struct vmw_private *dev_priv, + bool lazy, + bool fifo_idle, + uint32_t sequence, + bool interruptible, + unsigned long timeout) +{ + struct vmw_fifo_state *fifo_state = &dev_priv->fifo; + + uint32_t count = 0; + uint32_t signal_seq; + int ret; + unsigned long end_jiffies = jiffies + timeout; + bool (*wait_condition)(struct vmw_private *, uint32_t); + DEFINE_WAIT(__wait); + + wait_condition = (fifo_idle) ? &vmw_fifo_idle : + &vmw_fence_signaled; + + /** + * Block command submission while waiting for idle. + */ + + if (fifo_idle) + down_read(&fifo_state->rwsem); + signal_seq = atomic_read(&dev_priv->fence_seq); + ret = 0; + + for (;;) { + prepare_to_wait(&dev_priv->fence_queue, &__wait, + (interruptible) ? + TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); + if (wait_condition(dev_priv, sequence)) + break; + if (time_after_eq(jiffies, end_jiffies)) { + DRM_ERROR("SVGA device lockup.\n"); + break; + } + if (lazy) + schedule_timeout(1); + else if ((++count & 0x0F) == 0) { + /** + * FIXME: Use schedule_hr_timeout here for + * newer kernels and lower CPU utilization. + */ + + __set_current_state(TASK_RUNNING); + schedule(); + __set_current_state((interruptible) ? + TASK_INTERRUPTIBLE : + TASK_UNINTERRUPTIBLE); + } + if (interruptible && signal_pending(current)) { + ret = -ERESTARTSYS; + break; + } + } + finish_wait(&dev_priv->fence_queue, &__wait); + if (ret == 0 && fifo_idle) { + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + iowrite32(signal_seq, fifo_mem + SVGA_FIFO_FENCE); + } + wake_up_all(&dev_priv->fence_queue); + if (fifo_idle) + up_read(&fifo_state->rwsem); + + return ret; +} + +int vmw_wait_fence(struct vmw_private *dev_priv, + bool lazy, uint32_t sequence, + bool interruptible, unsigned long timeout) +{ + long ret; + unsigned long irq_flags; + struct vmw_fifo_state *fifo = &dev_priv->fifo; + + if (likely(dev_priv->last_read_sequence - sequence < VMW_FENCE_WRAP)) + return 0; + + if (likely(vmw_fence_signaled(dev_priv, sequence))) + return 0; + + vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); + + if (!(fifo->capabilities & SVGA_FIFO_CAP_FENCE)) + return vmw_fallback_wait(dev_priv, lazy, true, sequence, + interruptible, timeout); + + if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) + return vmw_fallback_wait(dev_priv, lazy, false, sequence, + interruptible, timeout); + + mutex_lock(&dev_priv->hw_mutex); + if (atomic_add_return(1, &dev_priv->fence_queue_waiters) > 0) { + spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); + outl(SVGA_IRQFLAG_ANY_FENCE, + dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); + vmw_write(dev_priv, SVGA_REG_IRQMASK, + vmw_read(dev_priv, SVGA_REG_IRQMASK) | + SVGA_IRQFLAG_ANY_FENCE); + spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); + } + mutex_unlock(&dev_priv->hw_mutex); + + if (interruptible) + ret = wait_event_interruptible_timeout + (dev_priv->fence_queue, + vmw_fence_signaled(dev_priv, sequence), + timeout); + else + ret = wait_event_timeout + (dev_priv->fence_queue, + vmw_fence_signaled(dev_priv, sequence), + timeout); + + if (unlikely(ret == 0)) + ret = -EBUSY; + else if (likely(ret > 0)) + ret = 0; + + mutex_lock(&dev_priv->hw_mutex); + if (atomic_dec_and_test(&dev_priv->fence_queue_waiters)) { + spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); + vmw_write(dev_priv, SVGA_REG_IRQMASK, + vmw_read(dev_priv, SVGA_REG_IRQMASK) & + ~SVGA_IRQFLAG_ANY_FENCE); + spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); + } + mutex_unlock(&dev_priv->hw_mutex); + + return ret; +} + +void vmw_irq_preinstall(struct drm_device *dev) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + uint32_t status; + + if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) + return; + + spin_lock_init(&dev_priv->irq_lock); + status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); + outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); +} + +int vmw_irq_postinstall(struct drm_device *dev) +{ + return 0; +} + +void vmw_irq_uninstall(struct drm_device *dev) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + uint32_t status; + + if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) + return; + + mutex_lock(&dev_priv->hw_mutex); + vmw_write(dev_priv, SVGA_REG_IRQMASK, 0); + mutex_unlock(&dev_priv->hw_mutex); + + status = inl(dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); + outl(status, dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); +} + +#define VMW_FENCE_WAIT_TIMEOUT 3*HZ; + +int vmw_fence_wait_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_vmw_fence_wait_arg *arg = + (struct drm_vmw_fence_wait_arg *)data; + unsigned long timeout; + + if (!arg->cookie_valid) { + arg->cookie_valid = 1; + arg->kernel_cookie = jiffies + VMW_FENCE_WAIT_TIMEOUT; + } + + timeout = jiffies; + if (time_after_eq(timeout, (unsigned long)arg->kernel_cookie)) + return -EBUSY; + + timeout = (unsigned long)arg->kernel_cookie - timeout; + return vmw_wait_fence(vmw_priv(dev), true, arg->sequence, true, timeout); +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c @@ -0,0 +1,625 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + +#include "drmP.h" +#include "vmwgfx_drv.h" + +#include "ttm/ttm_placement.h" + +#include "svga_overlay.h" +#include "svga_escape.h" + +#define VMW_MAX_NUM_STREAMS 1 + +struct vmw_stream { + struct vmw_dma_buffer *buf; + bool claimed; + bool paused; + struct drm_vmw_control_stream_arg saved; +}; + +/** + * Overlay control + */ +struct vmw_overlay { + /* + * Each stream is a single overlay. In Xv these are called ports. + */ + struct mutex mutex; + struct vmw_stream stream[VMW_MAX_NUM_STREAMS]; +}; + +static inline struct vmw_overlay *vmw_overlay(struct drm_device *dev) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + return dev_priv ? dev_priv->overlay_priv : NULL; +} + +struct vmw_escape_header { + uint32_t cmd; + SVGAFifoCmdEscape body; +}; + +struct vmw_escape_video_flush { + struct vmw_escape_header escape; + SVGAEscapeVideoFlush flush; +}; + +static inline void fill_escape(struct vmw_escape_header *header, + uint32_t size) +{ + header->cmd = SVGA_CMD_ESCAPE; + header->body.nsid = SVGA_ESCAPE_NSID_VMWARE; + header->body.size = size; +} + +static inline void fill_flush(struct vmw_escape_video_flush *cmd, + uint32_t stream_id) +{ + fill_escape(&cmd->escape, sizeof(cmd->flush)); + cmd->flush.cmdType = SVGA_ESCAPE_VMWARE_VIDEO_FLUSH; + cmd->flush.streamId = stream_id; +} + +/** + * Pin or unpin a buffer in vram. + * + * @dev_priv: Driver private. + * @buf: DMA buffer to pin or unpin. + * @pin: Pin buffer in vram if true. + * @interruptible: Use interruptible wait. + * + * Takes the current masters ttm lock in read. + * + * Returns + * -ERESTARTSYS if interrupted by a signal. + */ +static int vmw_dmabuf_pin_in_vram(struct vmw_private *dev_priv, + struct vmw_dma_buffer *buf, + bool pin, bool interruptible) +{ + struct ttm_buffer_object *bo = &buf->base; + struct ttm_placement *overlay_placement = &vmw_vram_placement; + int ret; + + ret = ttm_read_lock(&dev_priv->active_master->lock, interruptible); + if (unlikely(ret != 0)) + return ret; + + ret = ttm_bo_reserve(bo, interruptible, false, false, 0); + if (unlikely(ret != 0)) + goto err; + + if (pin) + overlay_placement = &vmw_vram_ne_placement; + + ret = ttm_bo_validate(bo, overlay_placement, interruptible, false); + + ttm_bo_unreserve(bo); + +err: + ttm_read_unlock(&dev_priv->active_master->lock); + + return ret; +} + +/** + * Send put command to hw. + * + * Returns + * -ERESTARTSYS if interrupted by a signal. + */ +static int vmw_overlay_send_put(struct vmw_private *dev_priv, + struct vmw_dma_buffer *buf, + struct drm_vmw_control_stream_arg *arg, + bool interruptible) +{ + struct { + struct vmw_escape_header escape; + struct { + struct { + uint32_t cmdType; + uint32_t streamId; + } header; + struct { + uint32_t registerId; + uint32_t value; + } items[SVGA_VIDEO_PITCH_3 + 1]; + } body; + struct vmw_escape_video_flush flush; + } *cmds; + uint32_t offset; + int i, ret; + + for (;;) { + cmds = vmw_fifo_reserve(dev_priv, sizeof(*cmds)); + if (cmds) + break; + + ret = vmw_fallback_wait(dev_priv, false, true, 0, + interruptible, 3*HZ); + if (interruptible && ret == -ERESTARTSYS) + return ret; + else + BUG_ON(ret != 0); + } + + fill_escape(&cmds->escape, sizeof(cmds->body)); + cmds->body.header.cmdType = SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS; + cmds->body.header.streamId = arg->stream_id; + + for (i = 0; i <= SVGA_VIDEO_PITCH_3; i++) + cmds->body.items[i].registerId = i; + + offset = buf->base.offset + arg->offset; + + cmds->body.items[SVGA_VIDEO_ENABLED].value = true; + cmds->body.items[SVGA_VIDEO_FLAGS].value = arg->flags; + cmds->body.items[SVGA_VIDEO_DATA_OFFSET].value = offset; + cmds->body.items[SVGA_VIDEO_FORMAT].value = arg->format; + cmds->body.items[SVGA_VIDEO_COLORKEY].value = arg->color_key; + cmds->body.items[SVGA_VIDEO_SIZE].value = arg->size; + cmds->body.items[SVGA_VIDEO_WIDTH].value = arg->width; + cmds->body.items[SVGA_VIDEO_HEIGHT].value = arg->height; + cmds->body.items[SVGA_VIDEO_SRC_X].value = arg->src.x; + cmds->body.items[SVGA_VIDEO_SRC_Y].value = arg->src.y; + cmds->body.items[SVGA_VIDEO_SRC_WIDTH].value = arg->src.w; + cmds->body.items[SVGA_VIDEO_SRC_HEIGHT].value = arg->src.h; + cmds->body.items[SVGA_VIDEO_DST_X].value = arg->dst.x; + cmds->body.items[SVGA_VIDEO_DST_Y].value = arg->dst.y; + cmds->body.items[SVGA_VIDEO_DST_WIDTH].value = arg->dst.w; + cmds->body.items[SVGA_VIDEO_DST_HEIGHT].value = arg->dst.h; + cmds->body.items[SVGA_VIDEO_PITCH_1].value = arg->pitch[0]; + cmds->body.items[SVGA_VIDEO_PITCH_2].value = arg->pitch[1]; + cmds->body.items[SVGA_VIDEO_PITCH_3].value = arg->pitch[2]; + + fill_flush(&cmds->flush, arg->stream_id); + + vmw_fifo_commit(dev_priv, sizeof(*cmds)); + + return 0; +} + +/** + * Send stop command to hw. + * + * Returns + * -ERESTARTSYS if interrupted by a signal. + */ +static int vmw_overlay_send_stop(struct vmw_private *dev_priv, + uint32_t stream_id, + bool interruptible) +{ + struct { + struct vmw_escape_header escape; + SVGAEscapeVideoSetRegs body; + struct vmw_escape_video_flush flush; + } *cmds; + int ret; + + for (;;) { + cmds = vmw_fifo_reserve(dev_priv, sizeof(*cmds)); + if (cmds) + break; + + ret = vmw_fallback_wait(dev_priv, false, true, 0, + interruptible, 3*HZ); + if (interruptible && ret == -ERESTARTSYS) + return ret; + else + BUG_ON(ret != 0); + } + + fill_escape(&cmds->escape, sizeof(cmds->body)); + cmds->body.header.cmdType = SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS; + cmds->body.header.streamId = stream_id; + cmds->body.items[0].registerId = SVGA_VIDEO_ENABLED; + cmds->body.items[0].value = false; + fill_flush(&cmds->flush, stream_id); + + vmw_fifo_commit(dev_priv, sizeof(*cmds)); + + return 0; +} + +/** + * Stop or pause a stream. + * + * If the stream is paused the no evict flag is removed from the buffer + * but left in vram. This allows for instance mode_set to evict it + * should it need to. + * + * The caller must hold the overlay lock. + * + * @stream_id which stream to stop/pause. + * @pause true to pause, false to stop completely. + */ +static int vmw_overlay_stop(struct vmw_private *dev_priv, + uint32_t stream_id, bool pause, + bool interruptible) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + struct vmw_stream *stream = &overlay->stream[stream_id]; + int ret; + + /* no buffer attached the stream is completely stopped */ + if (!stream->buf) + return 0; + + /* If the stream is paused this is already done */ + if (!stream->paused) { + ret = vmw_overlay_send_stop(dev_priv, stream_id, + interruptible); + if (ret) + return ret; + + /* We just remove the NO_EVICT flag so no -ENOMEM */ + ret = vmw_dmabuf_pin_in_vram(dev_priv, stream->buf, false, + interruptible); + if (interruptible && ret == -ERESTARTSYS) + return ret; + else + BUG_ON(ret != 0); + } + + if (!pause) { + vmw_dmabuf_unreference(&stream->buf); + stream->paused = false; + } else { + stream->paused = true; + } + + return 0; +} + +/** + * Update a stream and send any put or stop fifo commands needed. + * + * The caller must hold the overlay lock. + * + * Returns + * -ENOMEM if buffer doesn't fit in vram. + * -ERESTARTSYS if interrupted. + */ +static int vmw_overlay_update_stream(struct vmw_private *dev_priv, + struct vmw_dma_buffer *buf, + struct drm_vmw_control_stream_arg *arg, + bool interruptible) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + struct vmw_stream *stream = &overlay->stream[arg->stream_id]; + int ret = 0; + + if (!buf) + return -EINVAL; + + DRM_DEBUG(" %s: old %p, new %p, %spaused\n", __func__, + stream->buf, buf, stream->paused ? "" : "not "); + + if (stream->buf != buf) { + ret = vmw_overlay_stop(dev_priv, arg->stream_id, + false, interruptible); + if (ret) + return ret; + } else if (!stream->paused) { + /* If the buffers match and not paused then just send + * the put command, no need to do anything else. + */ + ret = vmw_overlay_send_put(dev_priv, buf, arg, interruptible); + if (ret == 0) + stream->saved = *arg; + else + BUG_ON(!interruptible); + + return ret; + } + + /* We don't start the old stream if we are interrupted. + * Might return -ENOMEM if it can't fit the buffer in vram. + */ + ret = vmw_dmabuf_pin_in_vram(dev_priv, buf, true, interruptible); + if (ret) + return ret; + + ret = vmw_overlay_send_put(dev_priv, buf, arg, interruptible); + if (ret) { + /* This one needs to happen no matter what. We only remove + * the NO_EVICT flag so this is safe from -ENOMEM. + */ + BUG_ON(vmw_dmabuf_pin_in_vram(dev_priv, buf, false, false) != 0); + return ret; + } + + if (stream->buf != buf) + stream->buf = vmw_dmabuf_reference(buf); + stream->saved = *arg; + + return 0; +} + +/** + * Stop all streams. + * + * Used by the fb code when starting. + * + * Takes the overlay lock. + */ +int vmw_overlay_stop_all(struct vmw_private *dev_priv) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + int i, ret; + + if (!overlay) + return 0; + + mutex_lock(&overlay->mutex); + + for (i = 0; i < VMW_MAX_NUM_STREAMS; i++) { + struct vmw_stream *stream = &overlay->stream[i]; + if (!stream->buf) + continue; + + ret = vmw_overlay_stop(dev_priv, i, false, false); + WARN_ON(ret != 0); + } + + mutex_unlock(&overlay->mutex); + + return 0; +} + +/** + * Try to resume all paused streams. + * + * Used by the kms code after moving a new scanout buffer to vram. + * + * Takes the overlay lock. + */ +int vmw_overlay_resume_all(struct vmw_private *dev_priv) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + int i, ret; + + if (!overlay) + return 0; + + mutex_lock(&overlay->mutex); + + for (i = 0; i < VMW_MAX_NUM_STREAMS; i++) { + struct vmw_stream *stream = &overlay->stream[i]; + if (!stream->paused) + continue; + + ret = vmw_overlay_update_stream(dev_priv, stream->buf, + &stream->saved, false); + if (ret != 0) + DRM_INFO("%s: *warning* failed to resume stream %i\n", + __func__, i); + } + + mutex_unlock(&overlay->mutex); + + return 0; +} + +/** + * Pauses all active streams. + * + * Used by the kms code when moving a new scanout buffer to vram. + * + * Takes the overlay lock. + */ +int vmw_overlay_pause_all(struct vmw_private *dev_priv) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + int i, ret; + + if (!overlay) + return 0; + + mutex_lock(&overlay->mutex); + + for (i = 0; i < VMW_MAX_NUM_STREAMS; i++) { + if (overlay->stream[i].paused) + DRM_INFO("%s: *warning* stream %i already paused\n", + __func__, i); + ret = vmw_overlay_stop(dev_priv, i, true, false); + WARN_ON(ret != 0); + } + + mutex_unlock(&overlay->mutex); + + return 0; +} + +int vmw_overlay_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_overlay *overlay = dev_priv->overlay_priv; + struct drm_vmw_control_stream_arg *arg = + (struct drm_vmw_control_stream_arg *)data; + struct vmw_dma_buffer *buf; + struct vmw_resource *res; + int ret; + + if (!overlay) + return -ENOSYS; + + ret = vmw_user_stream_lookup(dev_priv, tfile, &arg->stream_id, &res); + if (ret) + return ret; + + mutex_lock(&overlay->mutex); + + if (!arg->enabled) { + ret = vmw_overlay_stop(dev_priv, arg->stream_id, false, true); + goto out_unlock; + } + + ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &buf); + if (ret) + goto out_unlock; + + ret = vmw_overlay_update_stream(dev_priv, buf, arg, true); + + vmw_dmabuf_unreference(&buf); + +out_unlock: + mutex_unlock(&overlay->mutex); + vmw_resource_unreference(&res); + + return ret; +} + +int vmw_overlay_num_overlays(struct vmw_private *dev_priv) +{ + if (!dev_priv->overlay_priv) + return 0; + + return VMW_MAX_NUM_STREAMS; +} + +int vmw_overlay_num_free_overlays(struct vmw_private *dev_priv) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + int i, k; + + if (!overlay) + return 0; + + mutex_lock(&overlay->mutex); + + for (i = 0, k = 0; i < VMW_MAX_NUM_STREAMS; i++) + if (!overlay->stream[i].claimed) + k++; + + mutex_unlock(&overlay->mutex); + + return k; +} + +int vmw_overlay_claim(struct vmw_private *dev_priv, uint32_t *out) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + int i; + + if (!overlay) + return -ENOSYS; + + mutex_lock(&overlay->mutex); + + for (i = 0; i < VMW_MAX_NUM_STREAMS; i++) { + + if (overlay->stream[i].claimed) + continue; + + overlay->stream[i].claimed = true; + *out = i; + mutex_unlock(&overlay->mutex); + return 0; + } + + mutex_unlock(&overlay->mutex); + return -ESRCH; +} + +int vmw_overlay_unref(struct vmw_private *dev_priv, uint32_t stream_id) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + + BUG_ON(stream_id >= VMW_MAX_NUM_STREAMS); + + if (!overlay) + return -ENOSYS; + + mutex_lock(&overlay->mutex); + + WARN_ON(!overlay->stream[stream_id].claimed); + vmw_overlay_stop(dev_priv, stream_id, false, false); + overlay->stream[stream_id].claimed = false; + + mutex_unlock(&overlay->mutex); + return 0; +} + +int vmw_overlay_init(struct vmw_private *dev_priv) +{ + struct vmw_overlay *overlay; + int i; + + if (dev_priv->overlay_priv) + return -EINVAL; + + if (!(dev_priv->fifo.capabilities & SVGA_FIFO_CAP_VIDEO) && + (dev_priv->fifo.capabilities & SVGA_FIFO_CAP_ESCAPE)) { + DRM_INFO("hardware doesn't support overlays\n"); + return -ENOSYS; + } + + overlay = kmalloc(GFP_KERNEL, sizeof(*overlay)); + if (!overlay) + return -ENOMEM; + + memset(overlay, 0, sizeof(*overlay)); + mutex_init(&overlay->mutex); + for (i = 0; i < VMW_MAX_NUM_STREAMS; i++) { + overlay->stream[i].buf = NULL; + overlay->stream[i].paused = false; + overlay->stream[i].claimed = false; + } + + dev_priv->overlay_priv = overlay; + + return 0; +} + +int vmw_overlay_close(struct vmw_private *dev_priv) +{ + struct vmw_overlay *overlay = dev_priv->overlay_priv; + bool forgotten_buffer = false; + int i; + + if (!overlay) + return -ENOSYS; + + for (i = 0; i < VMW_MAX_NUM_STREAMS; i++) { + if (overlay->stream[i].buf) { + forgotten_buffer = true; + vmw_overlay_stop(dev_priv, i, false, false); + } + } + + WARN_ON(forgotten_buffer); + + dev_priv->overlay_priv = NULL; + kfree(overlay); + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/svga3d_reg.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/svga3d_reg.h @@ -0,0 +1,1793 @@ +/********************************************************** + * Copyright 1998-2009 VMware, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + **********************************************************/ + +/* + * svga3d_reg.h -- + * + * SVGA 3D hardware definitions + */ + +#ifndef _SVGA3D_REG_H_ +#define _SVGA3D_REG_H_ + +#include "svga_reg.h" + + +/* + * 3D Hardware Version + * + * The hardware version is stored in the SVGA_FIFO_3D_HWVERSION fifo + * register. Is set by the host and read by the guest. This lets + * us make new guest drivers which are backwards-compatible with old + * SVGA hardware revisions. It does not let us support old guest + * drivers. Good enough for now. + * + */ + +#define SVGA3D_MAKE_HWVERSION(major, minor) (((major) << 16) | ((minor) & 0xFF)) +#define SVGA3D_MAJOR_HWVERSION(version) ((version) >> 16) +#define SVGA3D_MINOR_HWVERSION(version) ((version) & 0xFF) + +typedef enum { + SVGA3D_HWVERSION_WS5_RC1 = SVGA3D_MAKE_HWVERSION(0, 1), + SVGA3D_HWVERSION_WS5_RC2 = SVGA3D_MAKE_HWVERSION(0, 2), + SVGA3D_HWVERSION_WS51_RC1 = SVGA3D_MAKE_HWVERSION(0, 3), + SVGA3D_HWVERSION_WS6_B1 = SVGA3D_MAKE_HWVERSION(1, 1), + SVGA3D_HWVERSION_FUSION_11 = SVGA3D_MAKE_HWVERSION(1, 4), + SVGA3D_HWVERSION_WS65_B1 = SVGA3D_MAKE_HWVERSION(2, 0), + SVGA3D_HWVERSION_CURRENT = SVGA3D_HWVERSION_WS65_B1, +} SVGA3dHardwareVersion; + +/* + * Generic Types + */ + +typedef uint32 SVGA3dBool; /* 32-bit Bool definition */ +#define SVGA3D_NUM_CLIPPLANES 6 +#define SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS 8 + + +/* + * Surface formats. + * + * If you modify this list, be sure to keep GLUtil.c in sync. It + * includes the internal format definition of each surface in + * GLUtil_ConvertSurfaceFormat, and it contains a table of + * human-readable names in GLUtil_GetFormatName. + */ + +typedef enum SVGA3dSurfaceFormat { + SVGA3D_FORMAT_INVALID = 0, + + SVGA3D_X8R8G8B8 = 1, + SVGA3D_A8R8G8B8 = 2, + + SVGA3D_R5G6B5 = 3, + SVGA3D_X1R5G5B5 = 4, + SVGA3D_A1R5G5B5 = 5, + SVGA3D_A4R4G4B4 = 6, + + SVGA3D_Z_D32 = 7, + SVGA3D_Z_D16 = 8, + SVGA3D_Z_D24S8 = 9, + SVGA3D_Z_D15S1 = 10, + + SVGA3D_LUMINANCE8 = 11, + SVGA3D_LUMINANCE4_ALPHA4 = 12, + SVGA3D_LUMINANCE16 = 13, + SVGA3D_LUMINANCE8_ALPHA8 = 14, + + SVGA3D_DXT1 = 15, + SVGA3D_DXT2 = 16, + SVGA3D_DXT3 = 17, + SVGA3D_DXT4 = 18, + SVGA3D_DXT5 = 19, + + SVGA3D_BUMPU8V8 = 20, + SVGA3D_BUMPL6V5U5 = 21, + SVGA3D_BUMPX8L8V8U8 = 22, + SVGA3D_BUMPL8V8U8 = 23, + + SVGA3D_ARGB_S10E5 = 24, /* 16-bit floating-point ARGB */ + SVGA3D_ARGB_S23E8 = 25, /* 32-bit floating-point ARGB */ + + SVGA3D_A2R10G10B10 = 26, + + /* signed formats */ + SVGA3D_V8U8 = 27, + SVGA3D_Q8W8V8U8 = 28, + SVGA3D_CxV8U8 = 29, + + /* mixed formats */ + SVGA3D_X8L8V8U8 = 30, + SVGA3D_A2W10V10U10 = 31, + + SVGA3D_ALPHA8 = 32, + + /* Single- and dual-component floating point formats */ + SVGA3D_R_S10E5 = 33, + SVGA3D_R_S23E8 = 34, + SVGA3D_RG_S10E5 = 35, + SVGA3D_RG_S23E8 = 36, + + /* + * Any surface can be used as a buffer object, but SVGA3D_BUFFER is + * the most efficient format to use when creating new surfaces + * expressly for index or vertex data. + */ + SVGA3D_BUFFER = 37, + + SVGA3D_Z_D24X8 = 38, + + SVGA3D_V16U16 = 39, + + SVGA3D_G16R16 = 40, + SVGA3D_A16B16G16R16 = 41, + + /* Packed Video formats */ + SVGA3D_UYVY = 42, + SVGA3D_YUY2 = 43, + + SVGA3D_FORMAT_MAX +} SVGA3dSurfaceFormat; + +typedef uint32 SVGA3dColor; /* a, r, g, b */ + +/* + * These match the D3DFORMAT_OP definitions used by Direct3D. We need + * them so that we can query the host for what the supported surface + * operations are (when we're using the D3D backend, in particular), + * and so we can send those operations to the guest. + */ +typedef enum { + SVGA3DFORMAT_OP_TEXTURE = 0x00000001, + SVGA3DFORMAT_OP_VOLUMETEXTURE = 0x00000002, + SVGA3DFORMAT_OP_CUBETEXTURE = 0x00000004, + SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET = 0x00000008, + SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET = 0x00000010, + SVGA3DFORMAT_OP_ZSTENCIL = 0x00000040, + SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH = 0x00000080, + +/* + * This format can be used as a render target if the current display mode + * is the same depth if the alpha channel is ignored. e.g. if the device + * can render to A8R8G8B8 when the display mode is X8R8G8B8, then the + * format op list entry for A8R8G8B8 should have this cap. + */ + SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET = 0x00000100, + +/* + * This format contains DirectDraw support (including Flip). This flag + * should not to be set on alpha formats. + */ + SVGA3DFORMAT_OP_DISPLAYMODE = 0x00000400, + +/* + * The rasterizer can support some level of Direct3D support in this format + * and implies that the driver can create a Context in this mode (for some + * render target format). When this flag is set, the SVGA3DFORMAT_OP_DISPLAYMODE + * flag must also be set. + */ + SVGA3DFORMAT_OP_3DACCELERATION = 0x00000800, + +/* + * This is set for a private format when the driver has put the bpp in + * the structure. + */ + SVGA3DFORMAT_OP_PIXELSIZE = 0x00001000, + +/* + * Indicates that this format can be converted to any RGB format for which + * SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB is specified + */ + SVGA3DFORMAT_OP_CONVERT_TO_ARGB = 0x00002000, + +/* + * Indicates that this format can be used to create offscreen plain surfaces. + */ + SVGA3DFORMAT_OP_OFFSCREENPLAIN = 0x00004000, + +/* + * Indicated that this format can be read as an SRGB texture (meaning that the + * sampler will linearize the looked up data) + */ + SVGA3DFORMAT_OP_SRGBREAD = 0x00008000, + +/* + * Indicates that this format can be used in the bumpmap instructions + */ + SVGA3DFORMAT_OP_BUMPMAP = 0x00010000, + +/* + * Indicates that this format can be sampled by the displacement map sampler + */ + SVGA3DFORMAT_OP_DMAP = 0x00020000, + +/* + * Indicates that this format cannot be used with texture filtering + */ + SVGA3DFORMAT_OP_NOFILTER = 0x00040000, + +/* + * Indicates that format conversions are supported to this RGB format if + * SVGA3DFORMAT_OP_CONVERT_TO_ARGB is specified in the source format. + */ + SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB = 0x00080000, + +/* + * Indicated that this format can be written as an SRGB target (meaning that the + * pixel pipe will DE-linearize data on output to format) + */ + SVGA3DFORMAT_OP_SRGBWRITE = 0x00100000, + +/* + * Indicates that this format cannot be used with alpha blending + */ + SVGA3DFORMAT_OP_NOALPHABLEND = 0x00200000, + +/* + * Indicates that the device can auto-generated sublevels for resources + * of this format + */ + SVGA3DFORMAT_OP_AUTOGENMIPMAP = 0x00400000, + +/* + * Indicates that this format can be used by vertex texture sampler + */ + SVGA3DFORMAT_OP_VERTEXTEXTURE = 0x00800000, + +/* + * Indicates that this format supports neither texture coordinate wrap + * modes, nor mipmapping + */ + SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP = 0x01000000 +} SVGA3dFormatOp; + +/* + * This structure is a conversion of SVGA3DFORMAT_OP_*. + * Entries must be located at the same position. + */ +typedef union { + uint32 value; + struct { + uint32 texture : 1; + uint32 volumeTexture : 1; + uint32 cubeTexture : 1; + uint32 offscreenRenderTarget : 1; + uint32 sameFormatRenderTarget : 1; + uint32 unknown1 : 1; + uint32 zStencil : 1; + uint32 zStencilArbitraryDepth : 1; + uint32 sameFormatUpToAlpha : 1; + uint32 unknown2 : 1; + uint32 displayMode : 1; + uint32 acceleration3d : 1; + uint32 pixelSize : 1; + uint32 convertToARGB : 1; + uint32 offscreenPlain : 1; + uint32 sRGBRead : 1; + uint32 bumpMap : 1; + uint32 dmap : 1; + uint32 noFilter : 1; + uint32 memberOfGroupARGB : 1; + uint32 sRGBWrite : 1; + uint32 noAlphaBlend : 1; + uint32 autoGenMipMap : 1; + uint32 vertexTexture : 1; + uint32 noTexCoordWrapNorMip : 1; + }; +} SVGA3dSurfaceFormatCaps; + +/* + * SVGA_3D_CMD_SETRENDERSTATE Types. All value types + * must fit in a uint32. + */ + +typedef enum { + SVGA3D_RS_INVALID = 0, + SVGA3D_RS_ZENABLE = 1, /* SVGA3dBool */ + SVGA3D_RS_ZWRITEENABLE = 2, /* SVGA3dBool */ + SVGA3D_RS_ALPHATESTENABLE = 3, /* SVGA3dBool */ + SVGA3D_RS_DITHERENABLE = 4, /* SVGA3dBool */ + SVGA3D_RS_BLENDENABLE = 5, /* SVGA3dBool */ + SVGA3D_RS_FOGENABLE = 6, /* SVGA3dBool */ + SVGA3D_RS_SPECULARENABLE = 7, /* SVGA3dBool */ + SVGA3D_RS_STENCILENABLE = 8, /* SVGA3dBool */ + SVGA3D_RS_LIGHTINGENABLE = 9, /* SVGA3dBool */ + SVGA3D_RS_NORMALIZENORMALS = 10, /* SVGA3dBool */ + SVGA3D_RS_POINTSPRITEENABLE = 11, /* SVGA3dBool */ + SVGA3D_RS_POINTSCALEENABLE = 12, /* SVGA3dBool */ + SVGA3D_RS_STENCILREF = 13, /* uint32 */ + SVGA3D_RS_STENCILMASK = 14, /* uint32 */ + SVGA3D_RS_STENCILWRITEMASK = 15, /* uint32 */ + SVGA3D_RS_FOGSTART = 16, /* float */ + SVGA3D_RS_FOGEND = 17, /* float */ + SVGA3D_RS_FOGDENSITY = 18, /* float */ + SVGA3D_RS_POINTSIZE = 19, /* float */ + SVGA3D_RS_POINTSIZEMIN = 20, /* float */ + SVGA3D_RS_POINTSIZEMAX = 21, /* float */ + SVGA3D_RS_POINTSCALE_A = 22, /* float */ + SVGA3D_RS_POINTSCALE_B = 23, /* float */ + SVGA3D_RS_POINTSCALE_C = 24, /* float */ + SVGA3D_RS_FOGCOLOR = 25, /* SVGA3dColor */ + SVGA3D_RS_AMBIENT = 26, /* SVGA3dColor */ + SVGA3D_RS_CLIPPLANEENABLE = 27, /* SVGA3dClipPlanes */ + SVGA3D_RS_FOGMODE = 28, /* SVGA3dFogMode */ + SVGA3D_RS_FILLMODE = 29, /* SVGA3dFillMode */ + SVGA3D_RS_SHADEMODE = 30, /* SVGA3dShadeMode */ + SVGA3D_RS_LINEPATTERN = 31, /* SVGA3dLinePattern */ + SVGA3D_RS_SRCBLEND = 32, /* SVGA3dBlendOp */ + SVGA3D_RS_DSTBLEND = 33, /* SVGA3dBlendOp */ + SVGA3D_RS_BLENDEQUATION = 34, /* SVGA3dBlendEquation */ + SVGA3D_RS_CULLMODE = 35, /* SVGA3dFace */ + SVGA3D_RS_ZFUNC = 36, /* SVGA3dCmpFunc */ + SVGA3D_RS_ALPHAFUNC = 37, /* SVGA3dCmpFunc */ + SVGA3D_RS_STENCILFUNC = 38, /* SVGA3dCmpFunc */ + SVGA3D_RS_STENCILFAIL = 39, /* SVGA3dStencilOp */ + SVGA3D_RS_STENCILZFAIL = 40, /* SVGA3dStencilOp */ + SVGA3D_RS_STENCILPASS = 41, /* SVGA3dStencilOp */ + SVGA3D_RS_ALPHAREF = 42, /* float (0.0 .. 1.0) */ + SVGA3D_RS_FRONTWINDING = 43, /* SVGA3dFrontWinding */ + SVGA3D_RS_COORDINATETYPE = 44, /* SVGA3dCoordinateType */ + SVGA3D_RS_ZBIAS = 45, /* float */ + SVGA3D_RS_RANGEFOGENABLE = 46, /* SVGA3dBool */ + SVGA3D_RS_COLORWRITEENABLE = 47, /* SVGA3dColorMask */ + SVGA3D_RS_VERTEXMATERIALENABLE = 48, /* SVGA3dBool */ + SVGA3D_RS_DIFFUSEMATERIALSOURCE = 49, /* SVGA3dVertexMaterial */ + SVGA3D_RS_SPECULARMATERIALSOURCE = 50, /* SVGA3dVertexMaterial */ + SVGA3D_RS_AMBIENTMATERIALSOURCE = 51, /* SVGA3dVertexMaterial */ + SVGA3D_RS_EMISSIVEMATERIALSOURCE = 52, /* SVGA3dVertexMaterial */ + SVGA3D_RS_TEXTUREFACTOR = 53, /* SVGA3dColor */ + SVGA3D_RS_LOCALVIEWER = 54, /* SVGA3dBool */ + SVGA3D_RS_SCISSORTESTENABLE = 55, /* SVGA3dBool */ + SVGA3D_RS_BLENDCOLOR = 56, /* SVGA3dColor */ + SVGA3D_RS_STENCILENABLE2SIDED = 57, /* SVGA3dBool */ + SVGA3D_RS_CCWSTENCILFUNC = 58, /* SVGA3dCmpFunc */ + SVGA3D_RS_CCWSTENCILFAIL = 59, /* SVGA3dStencilOp */ + SVGA3D_RS_CCWSTENCILZFAIL = 60, /* SVGA3dStencilOp */ + SVGA3D_RS_CCWSTENCILPASS = 61, /* SVGA3dStencilOp */ + SVGA3D_RS_VERTEXBLEND = 62, /* SVGA3dVertexBlendFlags */ + SVGA3D_RS_SLOPESCALEDEPTHBIAS = 63, /* float */ + SVGA3D_RS_DEPTHBIAS = 64, /* float */ + + + /* + * Output Gamma Level + * + * Output gamma effects the gamma curve of colors that are output from the + * rendering pipeline. A value of 1.0 specifies a linear color space. If the + * value is <= 0.0, gamma correction is ignored and linear color space is + * used. + */ + + SVGA3D_RS_OUTPUTGAMMA = 65, /* float */ + SVGA3D_RS_ZVISIBLE = 66, /* SVGA3dBool */ + SVGA3D_RS_LASTPIXEL = 67, /* SVGA3dBool */ + SVGA3D_RS_CLIPPING = 68, /* SVGA3dBool */ + SVGA3D_RS_WRAP0 = 69, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP1 = 70, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP2 = 71, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP3 = 72, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP4 = 73, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP5 = 74, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP6 = 75, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP7 = 76, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP8 = 77, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP9 = 78, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP10 = 79, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP11 = 80, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP12 = 81, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP13 = 82, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP14 = 83, /* SVGA3dWrapFlags */ + SVGA3D_RS_WRAP15 = 84, /* SVGA3dWrapFlags */ + SVGA3D_RS_MULTISAMPLEANTIALIAS = 85, /* SVGA3dBool */ + SVGA3D_RS_MULTISAMPLEMASK = 86, /* uint32 */ + SVGA3D_RS_INDEXEDVERTEXBLENDENABLE = 87, /* SVGA3dBool */ + SVGA3D_RS_TWEENFACTOR = 88, /* float */ + SVGA3D_RS_ANTIALIASEDLINEENABLE = 89, /* SVGA3dBool */ + SVGA3D_RS_COLORWRITEENABLE1 = 90, /* SVGA3dColorMask */ + SVGA3D_RS_COLORWRITEENABLE2 = 91, /* SVGA3dColorMask */ + SVGA3D_RS_COLORWRITEENABLE3 = 92, /* SVGA3dColorMask */ + SVGA3D_RS_SEPARATEALPHABLENDENABLE = 93, /* SVGA3dBool */ + SVGA3D_RS_SRCBLENDALPHA = 94, /* SVGA3dBlendOp */ + SVGA3D_RS_DSTBLENDALPHA = 95, /* SVGA3dBlendOp */ + SVGA3D_RS_BLENDEQUATIONALPHA = 96, /* SVGA3dBlendEquation */ + SVGA3D_RS_MAX +} SVGA3dRenderStateName; + +typedef enum { + SVGA3D_VERTEXMATERIAL_NONE = 0, /* Use the value in the current material */ + SVGA3D_VERTEXMATERIAL_DIFFUSE = 1, /* Use the value in the diffuse component */ + SVGA3D_VERTEXMATERIAL_SPECULAR = 2, /* Use the value in the specular component */ +} SVGA3dVertexMaterial; + +typedef enum { + SVGA3D_FILLMODE_INVALID = 0, + SVGA3D_FILLMODE_POINT = 1, + SVGA3D_FILLMODE_LINE = 2, + SVGA3D_FILLMODE_FILL = 3, + SVGA3D_FILLMODE_MAX +} SVGA3dFillModeType; + + +typedef +union { + struct { + uint16 mode; /* SVGA3dFillModeType */ + uint16 face; /* SVGA3dFace */ + }; + uint32 uintValue; +} SVGA3dFillMode; + +typedef enum { + SVGA3D_SHADEMODE_INVALID = 0, + SVGA3D_SHADEMODE_FLAT = 1, + SVGA3D_SHADEMODE_SMOOTH = 2, + SVGA3D_SHADEMODE_PHONG = 3, /* Not supported */ + SVGA3D_SHADEMODE_MAX +} SVGA3dShadeMode; + +typedef +union { + struct { + uint16 repeat; + uint16 pattern; + }; + uint32 uintValue; +} SVGA3dLinePattern; + +typedef enum { + SVGA3D_BLENDOP_INVALID = 0, + SVGA3D_BLENDOP_ZERO = 1, + SVGA3D_BLENDOP_ONE = 2, + SVGA3D_BLENDOP_SRCCOLOR = 3, + SVGA3D_BLENDOP_INVSRCCOLOR = 4, + SVGA3D_BLENDOP_SRCALPHA = 5, + SVGA3D_BLENDOP_INVSRCALPHA = 6, + SVGA3D_BLENDOP_DESTALPHA = 7, + SVGA3D_BLENDOP_INVDESTALPHA = 8, + SVGA3D_BLENDOP_DESTCOLOR = 9, + SVGA3D_BLENDOP_INVDESTCOLOR = 10, + SVGA3D_BLENDOP_SRCALPHASAT = 11, + SVGA3D_BLENDOP_BLENDFACTOR = 12, + SVGA3D_BLENDOP_INVBLENDFACTOR = 13, + SVGA3D_BLENDOP_MAX +} SVGA3dBlendOp; + +typedef enum { + SVGA3D_BLENDEQ_INVALID = 0, + SVGA3D_BLENDEQ_ADD = 1, + SVGA3D_BLENDEQ_SUBTRACT = 2, + SVGA3D_BLENDEQ_REVSUBTRACT = 3, + SVGA3D_BLENDEQ_MINIMUM = 4, + SVGA3D_BLENDEQ_MAXIMUM = 5, + SVGA3D_BLENDEQ_MAX +} SVGA3dBlendEquation; + +typedef enum { + SVGA3D_FRONTWINDING_INVALID = 0, + SVGA3D_FRONTWINDING_CW = 1, + SVGA3D_FRONTWINDING_CCW = 2, + SVGA3D_FRONTWINDING_MAX +} SVGA3dFrontWinding; + +typedef enum { + SVGA3D_FACE_INVALID = 0, + SVGA3D_FACE_NONE = 1, + SVGA3D_FACE_FRONT = 2, + SVGA3D_FACE_BACK = 3, + SVGA3D_FACE_FRONT_BACK = 4, + SVGA3D_FACE_MAX +} SVGA3dFace; + +/* + * The order and the values should not be changed + */ + +typedef enum { + SVGA3D_CMP_INVALID = 0, + SVGA3D_CMP_NEVER = 1, + SVGA3D_CMP_LESS = 2, + SVGA3D_CMP_EQUAL = 3, + SVGA3D_CMP_LESSEQUAL = 4, + SVGA3D_CMP_GREATER = 5, + SVGA3D_CMP_NOTEQUAL = 6, + SVGA3D_CMP_GREATEREQUAL = 7, + SVGA3D_CMP_ALWAYS = 8, + SVGA3D_CMP_MAX +} SVGA3dCmpFunc; + +/* + * SVGA3D_FOGFUNC_* specifies the fog equation, or PER_VERTEX which allows + * the fog factor to be specified in the alpha component of the specular + * (a.k.a. secondary) vertex color. + */ +typedef enum { + SVGA3D_FOGFUNC_INVALID = 0, + SVGA3D_FOGFUNC_EXP = 1, + SVGA3D_FOGFUNC_EXP2 = 2, + SVGA3D_FOGFUNC_LINEAR = 3, + SVGA3D_FOGFUNC_PER_VERTEX = 4 +} SVGA3dFogFunction; + +/* + * SVGA3D_FOGTYPE_* specifies if fog factors are computed on a per-vertex + * or per-pixel basis. + */ +typedef enum { + SVGA3D_FOGTYPE_INVALID = 0, + SVGA3D_FOGTYPE_VERTEX = 1, + SVGA3D_FOGTYPE_PIXEL = 2, + SVGA3D_FOGTYPE_MAX = 3 +} SVGA3dFogType; + +/* + * SVGA3D_FOGBASE_* selects depth or range-based fog. Depth-based fog is + * computed using the eye Z value of each pixel (or vertex), whereas range- + * based fog is computed using the actual distance (range) to the eye. + */ +typedef enum { + SVGA3D_FOGBASE_INVALID = 0, + SVGA3D_FOGBASE_DEPTHBASED = 1, + SVGA3D_FOGBASE_RANGEBASED = 2, + SVGA3D_FOGBASE_MAX = 3 +} SVGA3dFogBase; + +typedef enum { + SVGA3D_STENCILOP_INVALID = 0, + SVGA3D_STENCILOP_KEEP = 1, + SVGA3D_STENCILOP_ZERO = 2, + SVGA3D_STENCILOP_REPLACE = 3, + SVGA3D_STENCILOP_INCRSAT = 4, + SVGA3D_STENCILOP_DECRSAT = 5, + SVGA3D_STENCILOP_INVERT = 6, + SVGA3D_STENCILOP_INCR = 7, + SVGA3D_STENCILOP_DECR = 8, + SVGA3D_STENCILOP_MAX +} SVGA3dStencilOp; + +typedef enum { + SVGA3D_CLIPPLANE_0 = (1 << 0), + SVGA3D_CLIPPLANE_1 = (1 << 1), + SVGA3D_CLIPPLANE_2 = (1 << 2), + SVGA3D_CLIPPLANE_3 = (1 << 3), + SVGA3D_CLIPPLANE_4 = (1 << 4), + SVGA3D_CLIPPLANE_5 = (1 << 5), +} SVGA3dClipPlanes; + +typedef enum { + SVGA3D_CLEAR_COLOR = 0x1, + SVGA3D_CLEAR_DEPTH = 0x2, + SVGA3D_CLEAR_STENCIL = 0x4 +} SVGA3dClearFlag; + +typedef enum { + SVGA3D_RT_DEPTH = 0, + SVGA3D_RT_STENCIL = 1, + SVGA3D_RT_COLOR0 = 2, + SVGA3D_RT_COLOR1 = 3, + SVGA3D_RT_COLOR2 = 4, + SVGA3D_RT_COLOR3 = 5, + SVGA3D_RT_COLOR4 = 6, + SVGA3D_RT_COLOR5 = 7, + SVGA3D_RT_COLOR6 = 8, + SVGA3D_RT_COLOR7 = 9, + SVGA3D_RT_MAX, + SVGA3D_RT_INVALID = ((uint32)-1), +} SVGA3dRenderTargetType; + +#define SVGA3D_MAX_RT_COLOR (SVGA3D_RT_COLOR7 - SVGA3D_RT_COLOR0 + 1) + +typedef +union { + struct { + uint32 red : 1; + uint32 green : 1; + uint32 blue : 1; + uint32 alpha : 1; + }; + uint32 uintValue; +} SVGA3dColorMask; + +typedef enum { + SVGA3D_VBLEND_DISABLE = 0, + SVGA3D_VBLEND_1WEIGHT = 1, + SVGA3D_VBLEND_2WEIGHT = 2, + SVGA3D_VBLEND_3WEIGHT = 3, +} SVGA3dVertexBlendFlags; + +typedef enum { + SVGA3D_WRAPCOORD_0 = 1 << 0, + SVGA3D_WRAPCOORD_1 = 1 << 1, + SVGA3D_WRAPCOORD_2 = 1 << 2, + SVGA3D_WRAPCOORD_3 = 1 << 3, + SVGA3D_WRAPCOORD_ALL = 0xF, +} SVGA3dWrapFlags; + +/* + * SVGA_3D_CMD_TEXTURESTATE Types. All value types + * must fit in a uint32. + */ + +typedef enum { + SVGA3D_TS_INVALID = 0, + SVGA3D_TS_BIND_TEXTURE = 1, /* SVGA3dSurfaceId */ + SVGA3D_TS_COLOROP = 2, /* SVGA3dTextureCombiner */ + SVGA3D_TS_COLORARG1 = 3, /* SVGA3dTextureArgData */ + SVGA3D_TS_COLORARG2 = 4, /* SVGA3dTextureArgData */ + SVGA3D_TS_ALPHAOP = 5, /* SVGA3dTextureCombiner */ + SVGA3D_TS_ALPHAARG1 = 6, /* SVGA3dTextureArgData */ + SVGA3D_TS_ALPHAARG2 = 7, /* SVGA3dTextureArgData */ + SVGA3D_TS_ADDRESSU = 8, /* SVGA3dTextureAddress */ + SVGA3D_TS_ADDRESSV = 9, /* SVGA3dTextureAddress */ + SVGA3D_TS_MIPFILTER = 10, /* SVGA3dTextureFilter */ + SVGA3D_TS_MAGFILTER = 11, /* SVGA3dTextureFilter */ + SVGA3D_TS_MINFILTER = 12, /* SVGA3dTextureFilter */ + SVGA3D_TS_BORDERCOLOR = 13, /* SVGA3dColor */ + SVGA3D_TS_TEXCOORDINDEX = 14, /* uint32 */ + SVGA3D_TS_TEXTURETRANSFORMFLAGS = 15, /* SVGA3dTexTransformFlags */ + SVGA3D_TS_TEXCOORDGEN = 16, /* SVGA3dTextureCoordGen */ + SVGA3D_TS_BUMPENVMAT00 = 17, /* float */ + SVGA3D_TS_BUMPENVMAT01 = 18, /* float */ + SVGA3D_TS_BUMPENVMAT10 = 19, /* float */ + SVGA3D_TS_BUMPENVMAT11 = 20, /* float */ + SVGA3D_TS_TEXTURE_MIPMAP_LEVEL = 21, /* uint32 */ + SVGA3D_TS_TEXTURE_LOD_BIAS = 22, /* float */ + SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL = 23, /* uint32 */ + SVGA3D_TS_ADDRESSW = 24, /* SVGA3dTextureAddress */ + + + /* + * Sampler Gamma Level + * + * Sampler gamma effects the color of samples taken from the sampler. A + * value of 1.0 will produce linear samples. If the value is <= 0.0 the + * gamma value is ignored and a linear space is used. + */ + + SVGA3D_TS_GAMMA = 25, /* float */ + SVGA3D_TS_BUMPENVLSCALE = 26, /* float */ + SVGA3D_TS_BUMPENVLOFFSET = 27, /* float */ + SVGA3D_TS_COLORARG0 = 28, /* SVGA3dTextureArgData */ + SVGA3D_TS_ALPHAARG0 = 29, /* SVGA3dTextureArgData */ + SVGA3D_TS_MAX +} SVGA3dTextureStateName; + +typedef enum { + SVGA3D_TC_INVALID = 0, + SVGA3D_TC_DISABLE = 1, + SVGA3D_TC_SELECTARG1 = 2, + SVGA3D_TC_SELECTARG2 = 3, + SVGA3D_TC_MODULATE = 4, + SVGA3D_TC_ADD = 5, + SVGA3D_TC_ADDSIGNED = 6, + SVGA3D_TC_SUBTRACT = 7, + SVGA3D_TC_BLENDTEXTUREALPHA = 8, + SVGA3D_TC_BLENDDIFFUSEALPHA = 9, + SVGA3D_TC_BLENDCURRENTALPHA = 10, + SVGA3D_TC_BLENDFACTORALPHA = 11, + SVGA3D_TC_MODULATE2X = 12, + SVGA3D_TC_MODULATE4X = 13, + SVGA3D_TC_DSDT = 14, + SVGA3D_TC_DOTPRODUCT3 = 15, + SVGA3D_TC_BLENDTEXTUREALPHAPM = 16, + SVGA3D_TC_ADDSIGNED2X = 17, + SVGA3D_TC_ADDSMOOTH = 18, + SVGA3D_TC_PREMODULATE = 19, + SVGA3D_TC_MODULATEALPHA_ADDCOLOR = 20, + SVGA3D_TC_MODULATECOLOR_ADDALPHA = 21, + SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR = 22, + SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA = 23, + SVGA3D_TC_BUMPENVMAPLUMINANCE = 24, + SVGA3D_TC_MULTIPLYADD = 25, + SVGA3D_TC_LERP = 26, + SVGA3D_TC_MAX +} SVGA3dTextureCombiner; + +#define SVGA3D_TC_CAP_BIT(svga3d_tc_op) (svga3d_tc_op ? (1 << (svga3d_tc_op - 1)) : 0) + +typedef enum { + SVGA3D_TEX_ADDRESS_INVALID = 0, + SVGA3D_TEX_ADDRESS_WRAP = 1, + SVGA3D_TEX_ADDRESS_MIRROR = 2, + SVGA3D_TEX_ADDRESS_CLAMP = 3, + SVGA3D_TEX_ADDRESS_BORDER = 4, + SVGA3D_TEX_ADDRESS_MIRRORONCE = 5, + SVGA3D_TEX_ADDRESS_EDGE = 6, + SVGA3D_TEX_ADDRESS_MAX +} SVGA3dTextureAddress; + +/* + * SVGA3D_TEX_FILTER_NONE as the minification filter means mipmapping is + * disabled, and the rasterizer should use the magnification filter instead. + */ +typedef enum { + SVGA3D_TEX_FILTER_NONE = 0, + SVGA3D_TEX_FILTER_NEAREST = 1, + SVGA3D_TEX_FILTER_LINEAR = 2, + SVGA3D_TEX_FILTER_ANISOTROPIC = 3, + SVGA3D_TEX_FILTER_FLATCUBIC = 4, // Deprecated, not implemented + SVGA3D_TEX_FILTER_GAUSSIANCUBIC = 5, // Deprecated, not implemented + SVGA3D_TEX_FILTER_PYRAMIDALQUAD = 6, // Not currently implemented + SVGA3D_TEX_FILTER_GAUSSIANQUAD = 7, // Not currently implemented + SVGA3D_TEX_FILTER_MAX +} SVGA3dTextureFilter; + +typedef enum { + SVGA3D_TEX_TRANSFORM_OFF = 0, + SVGA3D_TEX_TRANSFORM_S = (1 << 0), + SVGA3D_TEX_TRANSFORM_T = (1 << 1), + SVGA3D_TEX_TRANSFORM_R = (1 << 2), + SVGA3D_TEX_TRANSFORM_Q = (1 << 3), + SVGA3D_TEX_PROJECTED = (1 << 15), +} SVGA3dTexTransformFlags; + +typedef enum { + SVGA3D_TEXCOORD_GEN_OFF = 0, + SVGA3D_TEXCOORD_GEN_EYE_POSITION = 1, + SVGA3D_TEXCOORD_GEN_EYE_NORMAL = 2, + SVGA3D_TEXCOORD_GEN_REFLECTIONVECTOR = 3, + SVGA3D_TEXCOORD_GEN_SPHERE = 4, + SVGA3D_TEXCOORD_GEN_MAX +} SVGA3dTextureCoordGen; + +/* + * Texture argument constants for texture combiner + */ +typedef enum { + SVGA3D_TA_INVALID = 0, + SVGA3D_TA_CONSTANT = 1, + SVGA3D_TA_PREVIOUS = 2, + SVGA3D_TA_DIFFUSE = 3, + SVGA3D_TA_TEXTURE = 4, + SVGA3D_TA_SPECULAR = 5, + SVGA3D_TA_MAX +} SVGA3dTextureArgData; + +#define SVGA3D_TM_MASK_LEN 4 + +/* Modifiers for texture argument constants defined above. */ +typedef enum { + SVGA3D_TM_NONE = 0, + SVGA3D_TM_ALPHA = (1 << SVGA3D_TM_MASK_LEN), + SVGA3D_TM_ONE_MINUS = (2 << SVGA3D_TM_MASK_LEN), +} SVGA3dTextureArgModifier; + +#define SVGA3D_INVALID_ID ((uint32)-1) +#define SVGA3D_MAX_CLIP_PLANES 6 + +/* + * This is the limit to the number of fixed-function texture + * transforms and texture coordinates we can support. It does *not* + * correspond to the number of texture image units (samplers) we + * support! + */ +#define SVGA3D_MAX_TEXTURE_COORDS 8 + +/* + * Vertex declarations + * + * Notes: + * + * SVGA3D_DECLUSAGE_POSITIONT is for pre-transformed vertices. If you + * draw with any POSITIONT vertex arrays, the programmable vertex + * pipeline will be implicitly disabled. Drawing will take place as if + * no vertex shader was bound. + */ + +typedef enum { + SVGA3D_DECLUSAGE_POSITION = 0, + SVGA3D_DECLUSAGE_BLENDWEIGHT, // 1 + SVGA3D_DECLUSAGE_BLENDINDICES, // 2 + SVGA3D_DECLUSAGE_NORMAL, // 3 + SVGA3D_DECLUSAGE_PSIZE, // 4 + SVGA3D_DECLUSAGE_TEXCOORD, // 5 + SVGA3D_DECLUSAGE_TANGENT, // 6 + SVGA3D_DECLUSAGE_BINORMAL, // 7 + SVGA3D_DECLUSAGE_TESSFACTOR, // 8 + SVGA3D_DECLUSAGE_POSITIONT, // 9 + SVGA3D_DECLUSAGE_COLOR, // 10 + SVGA3D_DECLUSAGE_FOG, // 11 + SVGA3D_DECLUSAGE_DEPTH, // 12 + SVGA3D_DECLUSAGE_SAMPLE, // 13 + SVGA3D_DECLUSAGE_MAX +} SVGA3dDeclUsage; + +typedef enum { + SVGA3D_DECLMETHOD_DEFAULT = 0, + SVGA3D_DECLMETHOD_PARTIALU, + SVGA3D_DECLMETHOD_PARTIALV, + SVGA3D_DECLMETHOD_CROSSUV, // Normal + SVGA3D_DECLMETHOD_UV, + SVGA3D_DECLMETHOD_LOOKUP, // Lookup a displacement map + SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED, // Lookup a pre-sampled displacement map +} SVGA3dDeclMethod; + +typedef enum { + SVGA3D_DECLTYPE_FLOAT1 = 0, + SVGA3D_DECLTYPE_FLOAT2 = 1, + SVGA3D_DECLTYPE_FLOAT3 = 2, + SVGA3D_DECLTYPE_FLOAT4 = 3, + SVGA3D_DECLTYPE_D3DCOLOR = 4, + SVGA3D_DECLTYPE_UBYTE4 = 5, + SVGA3D_DECLTYPE_SHORT2 = 6, + SVGA3D_DECLTYPE_SHORT4 = 7, + SVGA3D_DECLTYPE_UBYTE4N = 8, + SVGA3D_DECLTYPE_SHORT2N = 9, + SVGA3D_DECLTYPE_SHORT4N = 10, + SVGA3D_DECLTYPE_USHORT2N = 11, + SVGA3D_DECLTYPE_USHORT4N = 12, + SVGA3D_DECLTYPE_UDEC3 = 13, + SVGA3D_DECLTYPE_DEC3N = 14, + SVGA3D_DECLTYPE_FLOAT16_2 = 15, + SVGA3D_DECLTYPE_FLOAT16_4 = 16, + SVGA3D_DECLTYPE_MAX, +} SVGA3dDeclType; + +/* + * This structure is used for the divisor for geometry instancing; + * it's a direct translation of the Direct3D equivalent. + */ +typedef union { + struct { + /* + * For index data, this number represents the number of instances to draw. + * For instance data, this number represents the number of + * instances/vertex in this stream + */ + uint32 count : 30; + + /* + * This is 1 if this is supposed to be the data that is repeated for + * every instance. + */ + uint32 indexedData : 1; + + /* + * This is 1 if this is supposed to be the per-instance data. + */ + uint32 instanceData : 1; + }; + + uint32 value; +} SVGA3dVertexDivisor; + +typedef enum { + SVGA3D_PRIMITIVE_INVALID = 0, + SVGA3D_PRIMITIVE_TRIANGLELIST = 1, + SVGA3D_PRIMITIVE_POINTLIST = 2, + SVGA3D_PRIMITIVE_LINELIST = 3, + SVGA3D_PRIMITIVE_LINESTRIP = 4, + SVGA3D_PRIMITIVE_TRIANGLESTRIP = 5, + SVGA3D_PRIMITIVE_TRIANGLEFAN = 6, + SVGA3D_PRIMITIVE_MAX +} SVGA3dPrimitiveType; + +typedef enum { + SVGA3D_COORDINATE_INVALID = 0, + SVGA3D_COORDINATE_LEFTHANDED = 1, + SVGA3D_COORDINATE_RIGHTHANDED = 2, + SVGA3D_COORDINATE_MAX +} SVGA3dCoordinateType; + +typedef enum { + SVGA3D_TRANSFORM_INVALID = 0, + SVGA3D_TRANSFORM_WORLD = 1, + SVGA3D_TRANSFORM_VIEW = 2, + SVGA3D_TRANSFORM_PROJECTION = 3, + SVGA3D_TRANSFORM_TEXTURE0 = 4, + SVGA3D_TRANSFORM_TEXTURE1 = 5, + SVGA3D_TRANSFORM_TEXTURE2 = 6, + SVGA3D_TRANSFORM_TEXTURE3 = 7, + SVGA3D_TRANSFORM_TEXTURE4 = 8, + SVGA3D_TRANSFORM_TEXTURE5 = 9, + SVGA3D_TRANSFORM_TEXTURE6 = 10, + SVGA3D_TRANSFORM_TEXTURE7 = 11, + SVGA3D_TRANSFORM_WORLD1 = 12, + SVGA3D_TRANSFORM_WORLD2 = 13, + SVGA3D_TRANSFORM_WORLD3 = 14, + SVGA3D_TRANSFORM_MAX +} SVGA3dTransformType; + +typedef enum { + SVGA3D_LIGHTTYPE_INVALID = 0, + SVGA3D_LIGHTTYPE_POINT = 1, + SVGA3D_LIGHTTYPE_SPOT1 = 2, /* 1-cone, in degrees */ + SVGA3D_LIGHTTYPE_SPOT2 = 3, /* 2-cone, in radians */ + SVGA3D_LIGHTTYPE_DIRECTIONAL = 4, + SVGA3D_LIGHTTYPE_MAX +} SVGA3dLightType; + +typedef enum { + SVGA3D_CUBEFACE_POSX = 0, + SVGA3D_CUBEFACE_NEGX = 1, + SVGA3D_CUBEFACE_POSY = 2, + SVGA3D_CUBEFACE_NEGY = 3, + SVGA3D_CUBEFACE_POSZ = 4, + SVGA3D_CUBEFACE_NEGZ = 5, +} SVGA3dCubeFace; + +typedef enum { + SVGA3D_SHADERTYPE_COMPILED_DX8 = 0, + SVGA3D_SHADERTYPE_VS = 1, + SVGA3D_SHADERTYPE_PS = 2, + SVGA3D_SHADERTYPE_MAX +} SVGA3dShaderType; + +typedef enum { + SVGA3D_CONST_TYPE_FLOAT = 0, + SVGA3D_CONST_TYPE_INT = 1, + SVGA3D_CONST_TYPE_BOOL = 2, +} SVGA3dShaderConstType; + +#define SVGA3D_MAX_SURFACE_FACES 6 + +typedef enum { + SVGA3D_STRETCH_BLT_POINT = 0, + SVGA3D_STRETCH_BLT_LINEAR = 1, + SVGA3D_STRETCH_BLT_MAX +} SVGA3dStretchBltMode; + +typedef enum { + SVGA3D_QUERYTYPE_OCCLUSION = 0, + SVGA3D_QUERYTYPE_MAX +} SVGA3dQueryType; + +typedef enum { + SVGA3D_QUERYSTATE_PENDING = 0, /* Waiting on the host (set by guest) */ + SVGA3D_QUERYSTATE_SUCCEEDED = 1, /* Completed successfully (set by host) */ + SVGA3D_QUERYSTATE_FAILED = 2, /* Completed unsuccessfully (set by host) */ + SVGA3D_QUERYSTATE_NEW = 3, /* Never submitted (For guest use only) */ +} SVGA3dQueryState; + +typedef enum { + SVGA3D_WRITE_HOST_VRAM = 1, + SVGA3D_READ_HOST_VRAM = 2, +} SVGA3dTransferType; + +/* + * The maximum number vertex arrays we're guaranteed to support in + * SVGA_3D_CMD_DRAWPRIMITIVES. + */ +#define SVGA3D_MAX_VERTEX_ARRAYS 32 + +/* + * Identifiers for commands in the command FIFO. + * + * IDs between 1000 and 1039 (inclusive) were used by obsolete versions of + * the SVGA3D protocol and remain reserved; they should not be used in the + * future. + * + * IDs between 1040 and 1999 (inclusive) are available for use by the + * current SVGA3D protocol. + * + * FIFO clients other than SVGA3D should stay below 1000, or at 2000 + * and up. + */ + +#define SVGA_3D_CMD_LEGACY_BASE 1000 +#define SVGA_3D_CMD_BASE 1040 + +#define SVGA_3D_CMD_SURFACE_DEFINE SVGA_3D_CMD_BASE + 0 +#define SVGA_3D_CMD_SURFACE_DESTROY SVGA_3D_CMD_BASE + 1 +#define SVGA_3D_CMD_SURFACE_COPY SVGA_3D_CMD_BASE + 2 +#define SVGA_3D_CMD_SURFACE_STRETCHBLT SVGA_3D_CMD_BASE + 3 +#define SVGA_3D_CMD_SURFACE_DMA SVGA_3D_CMD_BASE + 4 +#define SVGA_3D_CMD_CONTEXT_DEFINE SVGA_3D_CMD_BASE + 5 +#define SVGA_3D_CMD_CONTEXT_DESTROY SVGA_3D_CMD_BASE + 6 +#define SVGA_3D_CMD_SETTRANSFORM SVGA_3D_CMD_BASE + 7 +#define SVGA_3D_CMD_SETZRANGE SVGA_3D_CMD_BASE + 8 +#define SVGA_3D_CMD_SETRENDERSTATE SVGA_3D_CMD_BASE + 9 +#define SVGA_3D_CMD_SETRENDERTARGET SVGA_3D_CMD_BASE + 10 +#define SVGA_3D_CMD_SETTEXTURESTATE SVGA_3D_CMD_BASE + 11 +#define SVGA_3D_CMD_SETMATERIAL SVGA_3D_CMD_BASE + 12 +#define SVGA_3D_CMD_SETLIGHTDATA SVGA_3D_CMD_BASE + 13 +#define SVGA_3D_CMD_SETLIGHTENABLED SVGA_3D_CMD_BASE + 14 +#define SVGA_3D_CMD_SETVIEWPORT SVGA_3D_CMD_BASE + 15 +#define SVGA_3D_CMD_SETCLIPPLANE SVGA_3D_CMD_BASE + 16 +#define SVGA_3D_CMD_CLEAR SVGA_3D_CMD_BASE + 17 +#define SVGA_3D_CMD_PRESENT SVGA_3D_CMD_BASE + 18 // Deprecated +#define SVGA_3D_CMD_SHADER_DEFINE SVGA_3D_CMD_BASE + 19 +#define SVGA_3D_CMD_SHADER_DESTROY SVGA_3D_CMD_BASE + 20 +#define SVGA_3D_CMD_SET_SHADER SVGA_3D_CMD_BASE + 21 +#define SVGA_3D_CMD_SET_SHADER_CONST SVGA_3D_CMD_BASE + 22 +#define SVGA_3D_CMD_DRAW_PRIMITIVES SVGA_3D_CMD_BASE + 23 +#define SVGA_3D_CMD_SETSCISSORRECT SVGA_3D_CMD_BASE + 24 +#define SVGA_3D_CMD_BEGIN_QUERY SVGA_3D_CMD_BASE + 25 +#define SVGA_3D_CMD_END_QUERY SVGA_3D_CMD_BASE + 26 +#define SVGA_3D_CMD_WAIT_FOR_QUERY SVGA_3D_CMD_BASE + 27 +#define SVGA_3D_CMD_PRESENT_READBACK SVGA_3D_CMD_BASE + 28 // Deprecated +#define SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN SVGA_3D_CMD_BASE + 29 +#define SVGA_3D_CMD_MAX SVGA_3D_CMD_BASE + 30 + +#define SVGA_3D_CMD_FUTURE_MAX 2000 + +/* + * Common substructures used in multiple FIFO commands: + */ + +typedef struct { + union { + struct { + uint16 function; // SVGA3dFogFunction + uint8 type; // SVGA3dFogType + uint8 base; // SVGA3dFogBase + }; + uint32 uintValue; + }; +} SVGA3dFogMode; + +/* + * Uniquely identify one image (a 1D/2D/3D array) from a surface. This + * is a surface ID as well as face/mipmap indices. + */ + +typedef +struct SVGA3dSurfaceImageId { + uint32 sid; + uint32 face; + uint32 mipmap; +} SVGA3dSurfaceImageId; + +typedef +struct SVGA3dGuestImage { + SVGAGuestPtr ptr; + + /* + * A note on interpretation of pitch: This value of pitch is the + * number of bytes between vertically adjacent image + * blocks. Normally this is the number of bytes between the first + * pixel of two adjacent scanlines. With compressed textures, + * however, this may represent the number of bytes between + * compression blocks rather than between rows of pixels. + * + * XXX: Compressed textures currently must be tightly packed in guest memory. + * + * If the image is 1-dimensional, pitch is ignored. + * + * If 'pitch' is zero, the SVGA3D device calculates a pitch value + * assuming each row of blocks is tightly packed. + */ + uint32 pitch; +} SVGA3dGuestImage; + + +/* + * FIFO command format definitions: + */ + +/* + * The data size header following cmdNum for every 3d command + */ +typedef +struct { + uint32 id; + uint32 size; +} SVGA3dCmdHeader; + +/* + * A surface is a hierarchy of host VRAM surfaces: 1D, 2D, or 3D, with + * optional mipmaps and cube faces. + */ + +typedef +struct { + uint32 width; + uint32 height; + uint32 depth; +} SVGA3dSize; + +typedef enum { + SVGA3D_SURFACE_CUBEMAP = (1 << 0), + SVGA3D_SURFACE_HINT_STATIC = (1 << 1), + SVGA3D_SURFACE_HINT_DYNAMIC = (1 << 2), + SVGA3D_SURFACE_HINT_INDEXBUFFER = (1 << 3), + SVGA3D_SURFACE_HINT_VERTEXBUFFER = (1 << 4), + SVGA3D_SURFACE_HINT_TEXTURE = (1 << 5), + SVGA3D_SURFACE_HINT_RENDERTARGET = (1 << 6), + SVGA3D_SURFACE_HINT_DEPTHSTENCIL = (1 << 7), + SVGA3D_SURFACE_HINT_WRITEONLY = (1 << 8), +} SVGA3dSurfaceFlags; + +typedef +struct { + uint32 numMipLevels; +} SVGA3dSurfaceFace; + +typedef +struct { + uint32 sid; + SVGA3dSurfaceFlags surfaceFlags; + SVGA3dSurfaceFormat format; + SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES]; + /* + * Followed by an SVGA3dSize structure for each mip level in each face. + * + * A note on surface sizes: Sizes are always specified in pixels, + * even if the true surface size is not a multiple of the minimum + * block size of the surface's format. For example, a 3x3x1 DXT1 + * compressed texture would actually be stored as a 4x4x1 image in + * memory. + */ +} SVGA3dCmdDefineSurface; /* SVGA_3D_CMD_SURFACE_DEFINE */ + +typedef +struct { + uint32 sid; +} SVGA3dCmdDestroySurface; /* SVGA_3D_CMD_SURFACE_DESTROY */ + +typedef +struct { + uint32 cid; +} SVGA3dCmdDefineContext; /* SVGA_3D_CMD_CONTEXT_DEFINE */ + +typedef +struct { + uint32 cid; +} SVGA3dCmdDestroyContext; /* SVGA_3D_CMD_CONTEXT_DESTROY */ + +typedef +struct { + uint32 cid; + SVGA3dClearFlag clearFlag; + uint32 color; + float depth; + uint32 stencil; + /* Followed by variable number of SVGA3dRect structures */ +} SVGA3dCmdClear; /* SVGA_3D_CMD_CLEAR */ + +typedef +struct SVGA3dCopyRect { + uint32 x; + uint32 y; + uint32 w; + uint32 h; + uint32 srcx; + uint32 srcy; +} SVGA3dCopyRect; + +typedef +struct SVGA3dCopyBox { + uint32 x; + uint32 y; + uint32 z; + uint32 w; + uint32 h; + uint32 d; + uint32 srcx; + uint32 srcy; + uint32 srcz; +} SVGA3dCopyBox; + +typedef +struct { + uint32 x; + uint32 y; + uint32 w; + uint32 h; +} SVGA3dRect; + +typedef +struct { + uint32 x; + uint32 y; + uint32 z; + uint32 w; + uint32 h; + uint32 d; +} SVGA3dBox; + +typedef +struct { + uint32 x; + uint32 y; + uint32 z; +} SVGA3dPoint; + +typedef +struct { + SVGA3dLightType type; + SVGA3dBool inWorldSpace; + float diffuse[4]; + float specular[4]; + float ambient[4]; + float position[4]; + float direction[4]; + float range; + float falloff; + float attenuation0; + float attenuation1; + float attenuation2; + float theta; + float phi; +} SVGA3dLightData; + +typedef +struct { + uint32 sid; + /* Followed by variable number of SVGA3dCopyRect structures */ +} SVGA3dCmdPresent; /* SVGA_3D_CMD_PRESENT */ + +typedef +struct { + SVGA3dRenderStateName state; + union { + uint32 uintValue; + float floatValue; + }; +} SVGA3dRenderState; + +typedef +struct { + uint32 cid; + /* Followed by variable number of SVGA3dRenderState structures */ +} SVGA3dCmdSetRenderState; /* SVGA_3D_CMD_SETRENDERSTATE */ + +typedef +struct { + uint32 cid; + SVGA3dRenderTargetType type; + SVGA3dSurfaceImageId target; +} SVGA3dCmdSetRenderTarget; /* SVGA_3D_CMD_SETRENDERTARGET */ + +typedef +struct { + SVGA3dSurfaceImageId src; + SVGA3dSurfaceImageId dest; + /* Followed by variable number of SVGA3dCopyBox structures */ +} SVGA3dCmdSurfaceCopy; /* SVGA_3D_CMD_SURFACE_COPY */ + +typedef +struct { + SVGA3dSurfaceImageId src; + SVGA3dSurfaceImageId dest; + SVGA3dBox boxSrc; + SVGA3dBox boxDest; + SVGA3dStretchBltMode mode; +} SVGA3dCmdSurfaceStretchBlt; /* SVGA_3D_CMD_SURFACE_STRETCHBLT */ + +typedef +struct { + /* + * If the discard flag is present in a surface DMA operation, the host may + * discard the contents of the current mipmap level and face of the target + * surface before applying the surface DMA contents. + */ + uint32 discard : 1; + + /* + * If the unsynchronized flag is present, the host may perform this upload + * without syncing to pending reads on this surface. + */ + uint32 unsynchronized : 1; + + /* + * Guests *MUST* set the reserved bits to 0 before submitting the command + * suffix as future flags may occupy these bits. + */ + uint32 reserved : 30; +} SVGA3dSurfaceDMAFlags; + +typedef +struct { + SVGA3dGuestImage guest; + SVGA3dSurfaceImageId host; + SVGA3dTransferType transfer; + /* + * Followed by variable number of SVGA3dCopyBox structures. For consistency + * in all clipping logic and coordinate translation, we define the + * "source" in each copyBox as the guest image and the + * "destination" as the host image, regardless of transfer + * direction. + * + * For efficiency, the SVGA3D device is free to copy more data than + * specified. For example, it may round copy boxes outwards such + * that they lie on particular alignment boundaries. + */ +} SVGA3dCmdSurfaceDMA; /* SVGA_3D_CMD_SURFACE_DMA */ + +/* + * SVGA3dCmdSurfaceDMASuffix -- + * + * This is a command suffix that will appear after a SurfaceDMA command in + * the FIFO. It contains some extra information that hosts may use to + * optimize performance or protect the guest. This suffix exists to preserve + * backwards compatibility while also allowing for new functionality to be + * implemented. + */ + +typedef +struct { + uint32 suffixSize; + + /* + * The maximum offset is used to determine the maximum offset from the + * guestPtr base address that will be accessed or written to during this + * surfaceDMA. If the suffix is supported, the host will respect this + * boundary while performing surface DMAs. + * + * Defaults to MAX_UINT32 + */ + uint32 maximumOffset; + + /* + * A set of flags that describes optimizations that the host may perform + * while performing this surface DMA operation. The guest should never rely + * on behaviour that is different when these flags are set for correctness. + * + * Defaults to 0 + */ + SVGA3dSurfaceDMAFlags flags; +} SVGA3dCmdSurfaceDMASuffix; + +/* + * SVGA_3D_CMD_DRAW_PRIMITIVES -- + * + * This command is the SVGA3D device's generic drawing entry point. + * It can draw multiple ranges of primitives, optionally using an + * index buffer, using an arbitrary collection of vertex buffers. + * + * Each SVGA3dVertexDecl defines a distinct vertex array to bind + * during this draw call. The declarations specify which surface + * the vertex data lives in, what that vertex data is used for, + * and how to interpret it. + * + * Each SVGA3dPrimitiveRange defines a collection of primitives + * to render using the same vertex arrays. An index buffer is + * optional. + */ + +typedef +struct { + /* + * A range hint is an optional specification for the range of indices + * in an SVGA3dArray that will be used. If 'last' is zero, it is assumed + * that the entire array will be used. + * + * These are only hints. The SVGA3D device may use them for + * performance optimization if possible, but it's also allowed to + * ignore these values. + */ + uint32 first; + uint32 last; +} SVGA3dArrayRangeHint; + +typedef +struct { + /* + * Define the origin and shape of a vertex or index array. Both + * 'offset' and 'stride' are in bytes. The provided surface will be + * reinterpreted as a flat array of bytes in the same format used + * by surface DMA operations. To avoid unnecessary conversions, the + * surface should be created with the SVGA3D_BUFFER format. + * + * Index 0 in the array starts 'offset' bytes into the surface. + * Index 1 begins at byte 'offset + stride', etc. Array indices may + * not be negative. + */ + uint32 surfaceId; + uint32 offset; + uint32 stride; +} SVGA3dArray; + +typedef +struct { + /* + * Describe a vertex array's data type, and define how it is to be + * used by the fixed function pipeline or the vertex shader. It + * isn't useful to have two VertexDecls with the same + * VertexArrayIdentity in one draw call. + */ + SVGA3dDeclType type; + SVGA3dDeclMethod method; + SVGA3dDeclUsage usage; + uint32 usageIndex; +} SVGA3dVertexArrayIdentity; + +typedef +struct { + SVGA3dVertexArrayIdentity identity; + SVGA3dArray array; + SVGA3dArrayRangeHint rangeHint; +} SVGA3dVertexDecl; + +typedef +struct { + /* + * Define a group of primitives to render, from sequential indices. + * + * The value of 'primitiveType' and 'primitiveCount' imply the + * total number of vertices that will be rendered. + */ + SVGA3dPrimitiveType primType; + uint32 primitiveCount; + + /* + * Optional index buffer. If indexArray.surfaceId is + * SVGA3D_INVALID_ID, we render without an index buffer. Rendering + * without an index buffer is identical to rendering with an index + * buffer containing the sequence [0, 1, 2, 3, ...]. + * + * If an index buffer is in use, indexWidth specifies the width in + * bytes of each index value. It must be less than or equal to + * indexArray.stride. + * + * (Currently, the SVGA3D device requires index buffers to be tightly + * packed. In other words, indexWidth == indexArray.stride) + */ + SVGA3dArray indexArray; + uint32 indexWidth; + + /* + * Optional index bias. This number is added to all indices from + * indexArray before they are used as vertex array indices. This + * can be used in multiple ways: + * + * - When not using an indexArray, this bias can be used to + * specify where in the vertex arrays to begin rendering. + * + * - A positive number here is equivalent to increasing the + * offset in each vertex array. + * + * - A negative number can be used to render using a small + * vertex array and an index buffer that contains large + * values. This may be used by some applications that + * crop a vertex buffer without modifying their index + * buffer. + * + * Note that rendering with a negative bias value may be slower and + * use more memory than rendering with a positive or zero bias. + */ + int32 indexBias; +} SVGA3dPrimitiveRange; + +typedef +struct { + uint32 cid; + uint32 numVertexDecls; + uint32 numRanges; + + /* + * There are two variable size arrays after the + * SVGA3dCmdDrawPrimitives structure. In order, + * they are: + * + * 1. SVGA3dVertexDecl, quantity 'numVertexDecls' + * 2. SVGA3dPrimitiveRange, quantity 'numRanges' + * 3. Optionally, SVGA3dVertexDivisor, quantity 'numVertexDecls' (contains + * the frequency divisor for this the corresponding vertex decl) + */ +} SVGA3dCmdDrawPrimitives; /* SVGA_3D_CMD_DRAWPRIMITIVES */ + +typedef +struct { + uint32 stage; + SVGA3dTextureStateName name; + union { + uint32 value; + float floatValue; + }; +} SVGA3dTextureState; + +typedef +struct { + uint32 cid; + /* Followed by variable number of SVGA3dTextureState structures */ +} SVGA3dCmdSetTextureState; /* SVGA_3D_CMD_SETTEXTURESTATE */ + +typedef +struct { + uint32 cid; + SVGA3dTransformType type; + float matrix[16]; +} SVGA3dCmdSetTransform; /* SVGA_3D_CMD_SETTRANSFORM */ + +typedef +struct { + float min; + float max; +} SVGA3dZRange; + +typedef +struct { + uint32 cid; + SVGA3dZRange zRange; +} SVGA3dCmdSetZRange; /* SVGA_3D_CMD_SETZRANGE */ + +typedef +struct { + float diffuse[4]; + float ambient[4]; + float specular[4]; + float emissive[4]; + float shininess; +} SVGA3dMaterial; + +typedef +struct { + uint32 cid; + SVGA3dFace face; + SVGA3dMaterial material; +} SVGA3dCmdSetMaterial; /* SVGA_3D_CMD_SETMATERIAL */ + +typedef +struct { + uint32 cid; + uint32 index; + SVGA3dLightData data; +} SVGA3dCmdSetLightData; /* SVGA_3D_CMD_SETLIGHTDATA */ + +typedef +struct { + uint32 cid; + uint32 index; + uint32 enabled; +} SVGA3dCmdSetLightEnabled; /* SVGA_3D_CMD_SETLIGHTENABLED */ + +typedef +struct { + uint32 cid; + SVGA3dRect rect; +} SVGA3dCmdSetViewport; /* SVGA_3D_CMD_SETVIEWPORT */ + +typedef +struct { + uint32 cid; + SVGA3dRect rect; +} SVGA3dCmdSetScissorRect; /* SVGA_3D_CMD_SETSCISSORRECT */ + +typedef +struct { + uint32 cid; + uint32 index; + float plane[4]; +} SVGA3dCmdSetClipPlane; /* SVGA_3D_CMD_SETCLIPPLANE */ + +typedef +struct { + uint32 cid; + uint32 shid; + SVGA3dShaderType type; + /* Followed by variable number of DWORDs for shader bycode */ +} SVGA3dCmdDefineShader; /* SVGA_3D_CMD_SHADER_DEFINE */ + +typedef +struct { + uint32 cid; + uint32 shid; + SVGA3dShaderType type; +} SVGA3dCmdDestroyShader; /* SVGA_3D_CMD_SHADER_DESTROY */ + +typedef +struct { + uint32 cid; + uint32 reg; /* register number */ + SVGA3dShaderType type; + SVGA3dShaderConstType ctype; + uint32 values[4]; +} SVGA3dCmdSetShaderConst; /* SVGA_3D_CMD_SET_SHADER_CONST */ + +typedef +struct { + uint32 cid; + SVGA3dShaderType type; + uint32 shid; +} SVGA3dCmdSetShader; /* SVGA_3D_CMD_SET_SHADER */ + +typedef +struct { + uint32 cid; + SVGA3dQueryType type; +} SVGA3dCmdBeginQuery; /* SVGA_3D_CMD_BEGIN_QUERY */ + +typedef +struct { + uint32 cid; + SVGA3dQueryType type; + SVGAGuestPtr guestResult; /* Points to an SVGA3dQueryResult structure */ +} SVGA3dCmdEndQuery; /* SVGA_3D_CMD_END_QUERY */ + +typedef +struct { + uint32 cid; /* Same parameters passed to END_QUERY */ + SVGA3dQueryType type; + SVGAGuestPtr guestResult; +} SVGA3dCmdWaitForQuery; /* SVGA_3D_CMD_WAIT_FOR_QUERY */ + +typedef +struct { + uint32 totalSize; /* Set by guest before query is ended. */ + SVGA3dQueryState state; /* Set by host or guest. See SVGA3dQueryState. */ + union { /* Set by host on exit from PENDING state */ + uint32 result32; + }; +} SVGA3dQueryResult; + +/* + * SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN -- + * + * This is a blit from an SVGA3D surface to a Screen Object. Just + * like GMR-to-screen blits, this blit may be directed at a + * specific screen or to the virtual coordinate space. + * + * The blit copies from a rectangular region of an SVGA3D surface + * image to a rectangular region of a screen or screens. + * + * This command takes an optional variable-length list of clipping + * rectangles after the body of the command. If no rectangles are + * specified, there is no clipping region. The entire destRect is + * drawn to. If one or more rectangles are included, they describe + * a clipping region. The clip rectangle coordinates are measured + * relative to the top-left corner of destRect. + * + * This clipping region serves multiple purposes: + * + * - It can be used to perform an irregularly shaped blit more + * efficiently than by issuing many separate blit commands. + * + * - It is equivalent to allowing blits with non-integer + * source coordinates. You could blit just one half-pixel + * of a source, for example, by specifying a larger + * destination rectangle than you need, then removing + * part of it using a clip rectangle. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + * + * Limitations: + * + * - Currently, no backend supports blits from a mipmap or face + * other than the first one. + */ + +typedef +struct { + SVGA3dSurfaceImageId srcImage; + SVGASignedRect srcRect; + uint32 destScreenId; /* Screen ID or SVGA_ID_INVALID for virt. coords */ + SVGASignedRect destRect; /* Supports scaling if src/rest different size */ + /* Clipping: zero or more SVGASignedRects follow */ +} SVGA3dCmdBlitSurfaceToScreen; /* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN */ + + +/* + * Capability query index. + * + * Notes: + * + * 1. SVGA3D_DEVCAP_MAX_TEXTURES reflects the maximum number of + * fixed-function texture units available. Each of these units + * work in both FFP and Shader modes, and they support texture + * transforms and texture coordinates. The host may have additional + * texture image units that are only usable with shaders. + * + * 2. The BUFFER_FORMAT capabilities are deprecated, and they always + * return TRUE. Even on physical hardware that does not support + * these formats natively, the SVGA3D device will provide an emulation + * which should be invisible to the guest OS. + * + * In general, the SVGA3D device should support any operation on + * any surface format, it just may perform some of these + * operations in software depending on the capabilities of the + * available physical hardware. + * + * XXX: In the future, we will add capabilities that describe in + * detail what formats are supported in hardware for what kinds + * of operations. + */ + +typedef enum { + SVGA3D_DEVCAP_3D = 0, + SVGA3D_DEVCAP_MAX_LIGHTS = 1, + SVGA3D_DEVCAP_MAX_TEXTURES = 2, /* See note (1) */ + SVGA3D_DEVCAP_MAX_CLIP_PLANES = 3, + SVGA3D_DEVCAP_VERTEX_SHADER_VERSION = 4, + SVGA3D_DEVCAP_VERTEX_SHADER = 5, + SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION = 6, + SVGA3D_DEVCAP_FRAGMENT_SHADER = 7, + SVGA3D_DEVCAP_MAX_RENDER_TARGETS = 8, + SVGA3D_DEVCAP_S23E8_TEXTURES = 9, + SVGA3D_DEVCAP_S10E5_TEXTURES = 10, + SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND = 11, + SVGA3D_DEVCAP_D16_BUFFER_FORMAT = 12, /* See note (2) */ + SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT = 13, /* See note (2) */ + SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT = 14, /* See note (2) */ + SVGA3D_DEVCAP_QUERY_TYPES = 15, + SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING = 16, + SVGA3D_DEVCAP_MAX_POINT_SIZE = 17, + SVGA3D_DEVCAP_MAX_SHADER_TEXTURES = 18, + SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH = 19, + SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT = 20, + SVGA3D_DEVCAP_MAX_VOLUME_EXTENT = 21, + SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT = 22, + SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO = 23, + SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY = 24, + SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT = 25, + SVGA3D_DEVCAP_MAX_VERTEX_INDEX = 26, + SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS = 27, + SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS = 28, + SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS = 29, + SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS = 30, + SVGA3D_DEVCAP_TEXTURE_OPS = 31, + SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 = 32, + SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 = 33, + SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 = 34, + SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 = 35, + SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 = 36, + SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 = 37, + SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 = 38, + SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16 = 39, + SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8 = 40, + SVGA3D_DEVCAP_SURFACEFMT_ALPHA8 = 41, + SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8 = 42, + SVGA3D_DEVCAP_SURFACEFMT_Z_D16 = 43, + SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8 = 44, + SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8 = 45, + SVGA3D_DEVCAP_SURFACEFMT_DXT1 = 46, + SVGA3D_DEVCAP_SURFACEFMT_DXT2 = 47, + SVGA3D_DEVCAP_SURFACEFMT_DXT3 = 48, + SVGA3D_DEVCAP_SURFACEFMT_DXT4 = 49, + SVGA3D_DEVCAP_SURFACEFMT_DXT5 = 50, + SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8 = 51, + SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10 = 52, + SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8 = 53, + SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8 = 54, + SVGA3D_DEVCAP_SURFACEFMT_CxV8U8 = 55, + SVGA3D_DEVCAP_SURFACEFMT_R_S10E5 = 56, + SVGA3D_DEVCAP_SURFACEFMT_R_S23E8 = 57, + SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5 = 58, + SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8 = 59, + SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5 = 60, + SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8 = 61, + SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES = 63, + + /* + * Note that MAX_SIMULTANEOUS_RENDER_TARGETS is a maximum count of color + * render targets. This does no include the depth or stencil targets. + */ + SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS = 64, + + SVGA3D_DEVCAP_SURFACEFMT_V16U16 = 65, + SVGA3D_DEVCAP_SURFACEFMT_G16R16 = 66, + SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16 = 67, + SVGA3D_DEVCAP_SURFACEFMT_UYVY = 68, + SVGA3D_DEVCAP_SURFACEFMT_YUY2 = 69, + + /* + * Don't add new caps into the previous section; the values in this + * enumeration must not change. You can put new values right before + * SVGA3D_DEVCAP_MAX. + */ + SVGA3D_DEVCAP_MAX /* This must be the last index. */ +} SVGA3dDevCapIndex; + +typedef union { + Bool b; + uint32 u; + int32 i; + float f; +} SVGA3dDevCapResult; + +#endif /* _SVGA3D_REG_H_ */ --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/svga_escape.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/svga_escape.h @@ -0,0 +1,89 @@ +/********************************************************** + * Copyright 2007-2009 VMware, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + **********************************************************/ + +/* + * svga_escape.h -- + * + * Definitions for our own (vendor-specific) SVGA Escape commands. + */ + +#ifndef _SVGA_ESCAPE_H_ +#define _SVGA_ESCAPE_H_ + + +/* + * Namespace IDs for the escape command + */ + +#define SVGA_ESCAPE_NSID_VMWARE 0x00000000 +#define SVGA_ESCAPE_NSID_DEVEL 0xFFFFFFFF + + +/* + * Within SVGA_ESCAPE_NSID_VMWARE, we multiplex commands according to + * the first DWORD of escape data (after the nsID and size). As a + * guideline we're using the high word and low word as a major and + * minor command number, respectively. + * + * Major command number allocation: + * + * 0000: Reserved + * 0001: SVGA_ESCAPE_VMWARE_LOG (svga_binary_logger.h) + * 0002: SVGA_ESCAPE_VMWARE_VIDEO (svga_overlay.h) + * 0003: SVGA_ESCAPE_VMWARE_HINT (svga_escape.h) + */ + +#define SVGA_ESCAPE_VMWARE_MAJOR_MASK 0xFFFF0000 + + +/* + * SVGA Hint commands. + * + * These escapes let the SVGA driver provide optional information to + * he host about the state of the guest or guest applications. The + * host can use these hints to make user interface or performance + * decisions. + * + * Notes: + * + * - SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN is deprecated for guests + * that use the SVGA Screen Object extension. Instead of sending + * this escape, use the SVGA_SCREEN_FULLSCREEN_HINT flag on your + * Screen Object. + */ + +#define SVGA_ESCAPE_VMWARE_HINT 0x00030000 +#define SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN 0x00030001 // Deprecated + +typedef +struct { + uint32 command; + uint32 fullscreen; + struct { + int32 x, y; + } monitorPosition; +} SVGAEscapeHintFullscreen; + +#endif /* _SVGA_ESCAPE_H_ */ --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c @@ -0,0 +1,516 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_kms.h" + +#define vmw_crtc_to_ldu(x) \ + container_of(x, struct vmw_legacy_display_unit, base.crtc) +#define vmw_encoder_to_ldu(x) \ + container_of(x, struct vmw_legacy_display_unit, base.encoder) +#define vmw_connector_to_ldu(x) \ + container_of(x, struct vmw_legacy_display_unit, base.connector) + +struct vmw_legacy_display { + struct list_head active; + + unsigned num_active; + + struct vmw_framebuffer *fb; +}; + +/** + * Display unit using the legacy register interface. + */ +struct vmw_legacy_display_unit { + struct vmw_display_unit base; + + struct list_head active; + + unsigned unit; +}; + +static void vmw_ldu_destroy(struct vmw_legacy_display_unit *ldu) +{ + list_del_init(&ldu->active); + vmw_display_unit_cleanup(&ldu->base); + kfree(ldu); +} + + +/* + * Legacy Display Unit CRTC functions + */ + +static void vmw_ldu_crtc_save(struct drm_crtc *crtc) +{ +} + +static void vmw_ldu_crtc_restore(struct drm_crtc *crtc) +{ +} + +static void vmw_ldu_crtc_gamma_set(struct drm_crtc *crtc, + u16 *r, u16 *g, u16 *b, + uint32_t size) +{ +} + +static void vmw_ldu_crtc_destroy(struct drm_crtc *crtc) +{ + vmw_ldu_destroy(vmw_crtc_to_ldu(crtc)); +} + +static int vmw_ldu_commit_list(struct vmw_private *dev_priv) +{ + struct vmw_legacy_display *lds = dev_priv->ldu_priv; + struct vmw_legacy_display_unit *entry; + struct drm_crtc *crtc; + int i = 0; + + /* to stop the screen from changing size on resize */ + vmw_write(dev_priv, SVGA_REG_NUM_GUEST_DISPLAYS, 0); + for (i = 0; i < lds->num_active; i++) { + vmw_write(dev_priv, SVGA_REG_DISPLAY_ID, i); + vmw_write(dev_priv, SVGA_REG_DISPLAY_IS_PRIMARY, !i); + vmw_write(dev_priv, SVGA_REG_DISPLAY_POSITION_X, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_POSITION_Y, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_WIDTH, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_HEIGHT, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID); + } + + /* Now set the mode */ + vmw_write(dev_priv, SVGA_REG_NUM_GUEST_DISPLAYS, lds->num_active); + i = 0; + list_for_each_entry(entry, &lds->active, active) { + crtc = &entry->base.crtc; + + vmw_write(dev_priv, SVGA_REG_DISPLAY_ID, i); + vmw_write(dev_priv, SVGA_REG_DISPLAY_IS_PRIMARY, !i); + vmw_write(dev_priv, SVGA_REG_DISPLAY_POSITION_X, crtc->x); + vmw_write(dev_priv, SVGA_REG_DISPLAY_POSITION_Y, crtc->y); + vmw_write(dev_priv, SVGA_REG_DISPLAY_WIDTH, crtc->mode.hdisplay); + vmw_write(dev_priv, SVGA_REG_DISPLAY_HEIGHT, crtc->mode.vdisplay); + vmw_write(dev_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID); + + i++; + } + + return 0; +} + +static int vmw_ldu_del_active(struct vmw_private *vmw_priv, + struct vmw_legacy_display_unit *ldu) +{ + struct vmw_legacy_display *ld = vmw_priv->ldu_priv; + if (list_empty(&ldu->active)) + return 0; + + list_del_init(&ldu->active); + if (--(ld->num_active) == 0) { + BUG_ON(!ld->fb); + if (ld->fb->unpin) + ld->fb->unpin(ld->fb); + ld->fb = NULL; + } + + return 0; +} + +static int vmw_ldu_add_active(struct vmw_private *vmw_priv, + struct vmw_legacy_display_unit *ldu, + struct vmw_framebuffer *vfb) +{ + struct vmw_legacy_display *ld = vmw_priv->ldu_priv; + struct vmw_legacy_display_unit *entry; + struct list_head *at; + + if (!list_empty(&ldu->active)) + return 0; + + at = &ld->active; + list_for_each_entry(entry, &ld->active, active) { + if (entry->unit > ldu->unit) + break; + + at = &entry->active; + } + + list_add(&ldu->active, at); + if (ld->num_active++ == 0) { + BUG_ON(ld->fb); + if (vfb->pin) + vfb->pin(vfb); + ld->fb = vfb; + } + + return 0; +} + +static int vmw_ldu_crtc_set_config(struct drm_mode_set *set) +{ + struct vmw_private *dev_priv; + struct vmw_legacy_display_unit *ldu; + struct drm_connector *connector; + struct drm_display_mode *mode; + struct drm_encoder *encoder; + struct vmw_framebuffer *vfb; + struct drm_framebuffer *fb; + struct drm_crtc *crtc; + + if (!set) + return -EINVAL; + + if (!set->crtc) + return -EINVAL; + + /* get the ldu */ + crtc = set->crtc; + ldu = vmw_crtc_to_ldu(crtc); + vfb = set->fb ? vmw_framebuffer_to_vfb(set->fb) : NULL; + dev_priv = vmw_priv(crtc->dev); + + if (set->num_connectors > 1) { + DRM_ERROR("to many connectors\n"); + return -EINVAL; + } + + if (set->num_connectors == 1 && + set->connectors[0] != &ldu->base.connector) { + DRM_ERROR("connector doesn't match %p %p\n", + set->connectors[0], &ldu->base.connector); + return -EINVAL; + } + + /* ldu only supports one fb active at the time */ + if (dev_priv->ldu_priv->fb && vfb && + dev_priv->ldu_priv->fb != vfb) { + DRM_ERROR("Multiple framebuffers not supported\n"); + return -EINVAL; + } + + /* since they always map one to one these are safe */ + connector = &ldu->base.connector; + encoder = &ldu->base.encoder; + + /* should we turn the crtc off? */ + if (set->num_connectors == 0 || !set->mode || !set->fb) { + + connector->encoder = NULL; + encoder->crtc = NULL; + crtc->fb = NULL; + + vmw_ldu_del_active(dev_priv, ldu); + + vmw_ldu_commit_list(dev_priv); + + return 0; + } + + + /* we now know we want to set a mode */ + mode = set->mode; + fb = set->fb; + + if (set->x + mode->hdisplay > fb->width || + set->y + mode->vdisplay > fb->height) { + DRM_ERROR("set outside of framebuffer\n"); + return -EINVAL; + } + + vmw_fb_off(dev_priv); + + crtc->fb = fb; + encoder->crtc = crtc; + connector->encoder = encoder; + crtc->x = set->x; + crtc->y = set->y; + crtc->mode = *mode; + + vmw_ldu_add_active(dev_priv, ldu, vfb); + + vmw_ldu_commit_list(dev_priv); + + return 0; +} + +static struct drm_crtc_funcs vmw_legacy_crtc_funcs = { + .save = vmw_ldu_crtc_save, + .restore = vmw_ldu_crtc_restore, + .cursor_set = vmw_du_crtc_cursor_set, + .cursor_move = vmw_du_crtc_cursor_move, + .gamma_set = vmw_ldu_crtc_gamma_set, + .destroy = vmw_ldu_crtc_destroy, + .set_config = vmw_ldu_crtc_set_config, +}; + +/* + * Legacy Display Unit encoder functions + */ + +static void vmw_ldu_encoder_destroy(struct drm_encoder *encoder) +{ + vmw_ldu_destroy(vmw_encoder_to_ldu(encoder)); +} + +static struct drm_encoder_funcs vmw_legacy_encoder_funcs = { + .destroy = vmw_ldu_encoder_destroy, +}; + +/* + * Legacy Display Unit connector functions + */ + +static void vmw_ldu_connector_dpms(struct drm_connector *connector, int mode) +{ +} + +static void vmw_ldu_connector_save(struct drm_connector *connector) +{ +} + +static void vmw_ldu_connector_restore(struct drm_connector *connector) +{ +} + +static enum drm_connector_status + vmw_ldu_connector_detect(struct drm_connector *connector) +{ + /* XXX vmwctrl should control connection status */ + if (vmw_connector_to_ldu(connector)->base.unit == 0) + return connector_status_connected; + return connector_status_disconnected; +} + +static struct drm_display_mode vmw_ldu_connector_builtin[] = { + /* 640x480@60Hz */ + { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, + 752, 800, 0, 480, 489, 492, 525, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, + /* 800x600@60Hz */ + { DRM_MODE("800x600", + DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, + 40000, 800, 840, 968, 1056, 0, 600, 601, 605, 628, + 0, DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1024x768@60Hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048, + 1184, 1344, 0, 768, 771, 777, 806, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, + /* 1152x864@75Hz */ + { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216, + 1344, 1600, 0, 864, 865, 868, 900, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1280x768@60Hz */ + { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344, + 1472, 1664, 0, 768, 771, 778, 798, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1280x800@60Hz */ + { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352, + 1480, 1680, 0, 800, 803, 809, 831, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) }, + /* 1280x960@60Hz */ + { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376, + 1488, 1800, 0, 960, 961, 964, 1000, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1280x1024@60Hz */ + { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328, + 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1360x768@60Hz */ + { DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424, + 1536, 1792, 0, 768, 771, 777, 795, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1440x1050@60Hz */ + { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488, + 1632, 1864, 0, 1050, 1053, 1057, 1089, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1440x900@60Hz */ + { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520, + 1672, 1904, 0, 900, 903, 909, 934, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1600x1200@60Hz */ + { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664, + 1856, 2160, 0, 1200, 1201, 1204, 1250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1680x1050@60Hz */ + { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784, + 1960, 2240, 0, 1050, 1053, 1059, 1089, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1792x1344@60Hz */ + { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920, + 2120, 2448, 0, 1344, 1345, 1348, 1394, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1853x1392@60Hz */ + { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952, + 2176, 2528, 0, 1392, 1393, 1396, 1439, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1920x1200@60Hz */ + { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056, + 2256, 2592, 0, 1200, 1203, 1209, 1245, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1920x1440@60Hz */ + { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048, + 2256, 2600, 0, 1440, 1441, 1444, 1500, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 2560x1600@60Hz */ + { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752, + 3032, 3504, 0, 1600, 1603, 1609, 1658, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* Terminate */ + { DRM_MODE("", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) }, +}; + +static int vmw_ldu_connector_fill_modes(struct drm_connector *connector, + uint32_t max_width, uint32_t max_height) +{ + struct drm_device *dev = connector->dev; + struct drm_display_mode *mode = NULL; + int i; + + for (i = 0; vmw_ldu_connector_builtin[i].type != 0; i++) { + if (vmw_ldu_connector_builtin[i].hdisplay > max_width || + vmw_ldu_connector_builtin[i].vdisplay > max_height) + continue; + + mode = drm_mode_duplicate(dev, &vmw_ldu_connector_builtin[i]); + if (!mode) + return 0; + mode->vrefresh = drm_mode_vrefresh(mode); + + drm_mode_probed_add(connector, mode); + } + + drm_mode_connector_list_update(connector); + + return 1; +} + +static int vmw_ldu_connector_set_property(struct drm_connector *connector, + struct drm_property *property, + uint64_t val) +{ + return 0; +} + +static void vmw_ldu_connector_destroy(struct drm_connector *connector) +{ + vmw_ldu_destroy(vmw_connector_to_ldu(connector)); +} + +static struct drm_connector_funcs vmw_legacy_connector_funcs = { + .dpms = vmw_ldu_connector_dpms, + .save = vmw_ldu_connector_save, + .restore = vmw_ldu_connector_restore, + .detect = vmw_ldu_connector_detect, + .fill_modes = vmw_ldu_connector_fill_modes, + .set_property = vmw_ldu_connector_set_property, + .destroy = vmw_ldu_connector_destroy, +}; + +static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit) +{ + struct vmw_legacy_display_unit *ldu; + struct drm_device *dev = dev_priv->dev; + struct drm_connector *connector; + struct drm_encoder *encoder; + struct drm_crtc *crtc; + + ldu = kzalloc(sizeof(*ldu), GFP_KERNEL); + if (!ldu) + return -ENOMEM; + + ldu->unit = unit; + crtc = &ldu->base.crtc; + encoder = &ldu->base.encoder; + connector = &ldu->base.connector; + + drm_connector_init(dev, connector, &vmw_legacy_connector_funcs, + DRM_MODE_CONNECTOR_LVDS); + /* Initial status */ + if (unit == 0) + connector->status = connector_status_connected; + else + connector->status = connector_status_disconnected; + + drm_encoder_init(dev, encoder, &vmw_legacy_encoder_funcs, + DRM_MODE_ENCODER_LVDS); + drm_mode_connector_attach_encoder(connector, encoder); + encoder->possible_crtcs = (1 << unit); + encoder->possible_clones = 0; + + INIT_LIST_HEAD(&ldu->active); + + drm_crtc_init(dev, crtc, &vmw_legacy_crtc_funcs); + + drm_connector_attach_property(connector, + dev->mode_config.dirty_info_property, + 1); + + return 0; +} + +int vmw_kms_init_legacy_display_system(struct vmw_private *dev_priv) +{ + if (dev_priv->ldu_priv) { + DRM_INFO("ldu system already on\n"); + return -EINVAL; + } + + dev_priv->ldu_priv = kmalloc(GFP_KERNEL, sizeof(*dev_priv->ldu_priv)); + + if (!dev_priv->ldu_priv) + return -ENOMEM; + + INIT_LIST_HEAD(&dev_priv->ldu_priv->active); + dev_priv->ldu_priv->num_active = 0; + dev_priv->ldu_priv->fb = NULL; + + drm_mode_create_dirty_info_property(dev_priv->dev); + + vmw_ldu_init(dev_priv, 0); + vmw_ldu_init(dev_priv, 1); + vmw_ldu_init(dev_priv, 2); + vmw_ldu_init(dev_priv, 3); + vmw_ldu_init(dev_priv, 4); + vmw_ldu_init(dev_priv, 5); + vmw_ldu_init(dev_priv, 6); + vmw_ldu_init(dev_priv, 7); + + return 0; +} + +int vmw_kms_close_legacy_display_system(struct vmw_private *dev_priv) +{ + if (!dev_priv->ldu_priv) + return -ENOSYS; + + BUG_ON(!list_empty(&dev_priv->ldu_priv->active)); + + kfree(dev_priv->ldu_priv); + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -0,0 +1,521 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#ifndef _VMWGFX_DRV_H_ +#define _VMWGFX_DRV_H_ + +#include "vmwgfx_reg.h" +#include "drmP.h" +#include "vmwgfx_drm.h" +#include "drm_hashtab.h" +#include "linux/suspend.h" +#include "ttm/ttm_bo_driver.h" +#include "ttm/ttm_object.h" +#include "ttm/ttm_lock.h" +#include "ttm/ttm_execbuf_util.h" +#include "ttm/ttm_module.h" + +#define VMWGFX_DRIVER_DATE "20100209" +#define VMWGFX_DRIVER_MAJOR 1 +#define VMWGFX_DRIVER_MINOR 0 +#define VMWGFX_DRIVER_PATCHLEVEL 0 +#define VMWGFX_FILE_PAGE_OFFSET 0x00100000 +#define VMWGFX_FIFO_STATIC_SIZE (1024*1024) +#define VMWGFX_MAX_RELOCATIONS 2048 +#define VMWGFX_MAX_GMRS 2048 + +struct vmw_fpriv { + struct drm_master *locked_master; + struct ttm_object_file *tfile; +}; + +struct vmw_dma_buffer { + struct ttm_buffer_object base; + struct list_head validate_list; + struct list_head gmr_lru; + uint32_t gmr_id; + bool gmr_bound; + uint32_t cur_validate_node; + bool on_validate_list; +}; + +struct vmw_resource { + struct kref kref; + struct vmw_private *dev_priv; + struct idr *idr; + int id; + enum ttm_object_type res_type; + bool avail; + void (*hw_destroy) (struct vmw_resource *res); + void (*res_free) (struct vmw_resource *res); + + /* TODO is a generic snooper needed? */ +#if 0 + void (*snoop)(struct vmw_resource *res, + struct ttm_object_file *tfile, + SVGA3dCmdHeader *header); + void *snoop_priv; +#endif +}; + +struct vmw_cursor_snooper { + struct drm_crtc *crtc; + size_t age; + uint32_t *image; +}; + +struct vmw_surface { + struct vmw_resource res; + uint32_t flags; + uint32_t format; + uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES]; + struct drm_vmw_size *sizes; + uint32_t num_sizes; + + bool scanout; + + /* TODO so far just a extra pointer */ + struct vmw_cursor_snooper snooper; +}; + +struct vmw_fifo_state { + unsigned long reserved_size; + __le32 *dynamic_buffer; + __le32 *static_buffer; + __le32 *last_buffer; + uint32_t last_data_size; + uint32_t last_buffer_size; + bool last_buffer_add; + unsigned long static_buffer_size; + bool using_bounce_buffer; + uint32_t capabilities; + struct mutex fifo_mutex; + struct rw_semaphore rwsem; +}; + +struct vmw_relocation { + SVGAGuestPtr *location; + uint32_t index; +}; + +struct vmw_sw_context{ + struct ida bo_list; + uint32_t last_cid; + bool cid_valid; + uint32_t last_sid; + uint32_t sid_translation; + bool sid_valid; + struct ttm_object_file *tfile; + struct list_head validate_nodes; + struct vmw_relocation relocs[VMWGFX_MAX_RELOCATIONS]; + uint32_t cur_reloc; + struct ttm_validate_buffer val_bufs[VMWGFX_MAX_GMRS]; + uint32_t cur_val_buf; +}; + +struct vmw_legacy_display; +struct vmw_overlay; + +struct vmw_master { + struct ttm_lock lock; +}; + +struct vmw_private { + struct ttm_bo_device bdev; + struct ttm_bo_global_ref bo_global_ref; + struct ttm_global_reference mem_global_ref; + + struct vmw_fifo_state fifo; + + struct drm_device *dev; + unsigned long vmw_chipset; + unsigned int io_start; + uint32_t vram_start; + uint32_t vram_size; + uint32_t mmio_start; + uint32_t mmio_size; + uint32_t fb_max_width; + uint32_t fb_max_height; + __le32 __iomem *mmio_virt; + int mmio_mtrr; + uint32_t capabilities; + uint32_t max_gmr_descriptors; + uint32_t max_gmr_ids; + struct mutex hw_mutex; + + /* + * VGA registers. + */ + + uint32_t vga_width; + uint32_t vga_height; + uint32_t vga_depth; + uint32_t vga_bpp; + uint32_t vga_pseudo; + uint32_t vga_red_mask; + uint32_t vga_blue_mask; + uint32_t vga_green_mask; + + /* + * Framebuffer info. + */ + + void *fb_info; + struct vmw_legacy_display *ldu_priv; + struct vmw_overlay *overlay_priv; + + /* + * Context and surface management. + */ + + rwlock_t resource_lock; + struct idr context_idr; + struct idr surface_idr; + struct idr stream_idr; + + /* + * Block lastclose from racing with firstopen. + */ + + struct mutex init_mutex; + + /* + * A resource manager for kernel-only surfaces and + * contexts. + */ + + struct ttm_object_device *tdev; + + /* + * Fencing and IRQs. + */ + + atomic_t fence_seq; + wait_queue_head_t fence_queue; + wait_queue_head_t fifo_queue; + atomic_t fence_queue_waiters; + atomic_t fifo_queue_waiters; + uint32_t last_read_sequence; + spinlock_t irq_lock; + + /* + * Device state + */ + + uint32_t traces_state; + uint32_t enable_state; + uint32_t config_done_state; + + /** + * Execbuf + */ + /** + * Protected by the cmdbuf mutex. + */ + + struct vmw_sw_context ctx; + uint32_t val_seq; + struct mutex cmdbuf_mutex; + + /** + * GMR management. Protected by the lru spinlock. + */ + + struct ida gmr_ida; + struct list_head gmr_lru; + + + /** + * Operating mode. + */ + + bool stealth; + bool is_opened; + + /** + * Master management. + */ + + struct vmw_master *active_master; + struct vmw_master fbdev_master; + struct notifier_block pm_nb; +}; + +static inline struct vmw_private *vmw_priv(struct drm_device *dev) +{ + return (struct vmw_private *)dev->dev_private; +} + +static inline struct vmw_fpriv *vmw_fpriv(struct drm_file *file_priv) +{ + return (struct vmw_fpriv *)file_priv->driver_priv; +} + +static inline struct vmw_master *vmw_master(struct drm_master *master) +{ + return (struct vmw_master *) master->driver_priv; +} + +static inline void vmw_write(struct vmw_private *dev_priv, + unsigned int offset, uint32_t value) +{ + outl(offset, dev_priv->io_start + VMWGFX_INDEX_PORT); + outl(value, dev_priv->io_start + VMWGFX_VALUE_PORT); +} + +static inline uint32_t vmw_read(struct vmw_private *dev_priv, + unsigned int offset) +{ + uint32_t val; + + outl(offset, dev_priv->io_start + VMWGFX_INDEX_PORT); + val = inl(dev_priv->io_start + VMWGFX_VALUE_PORT); + return val; +} + +/** + * GMR utilities - vmwgfx_gmr.c + */ + +extern int vmw_gmr_bind(struct vmw_private *dev_priv, + struct ttm_buffer_object *bo); +extern void vmw_gmr_unbind(struct vmw_private *dev_priv, int gmr_id); + +/** + * Resource utilities - vmwgfx_resource.c + */ + +extern struct vmw_resource *vmw_context_alloc(struct vmw_private *dev_priv); +extern void vmw_resource_unreference(struct vmw_resource **p_res); +extern struct vmw_resource *vmw_resource_reference(struct vmw_resource *res); +extern int vmw_context_destroy_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_context_define_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_context_check(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + int id); +extern void vmw_surface_res_free(struct vmw_resource *res); +extern int vmw_surface_init(struct vmw_private *dev_priv, + struct vmw_surface *srf, + void (*res_free) (struct vmw_resource *res)); +extern int vmw_user_surface_lookup_handle(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + uint32_t handle, + struct vmw_surface **out); +extern int vmw_surface_destroy_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_surface_define_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_surface_reference_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_surface_check(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + uint32_t handle, int *id); +extern void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo); +extern int vmw_dmabuf_init(struct vmw_private *dev_priv, + struct vmw_dma_buffer *vmw_bo, + size_t size, struct ttm_placement *placement, + bool interuptable, + void (*bo_free) (struct ttm_buffer_object *bo)); +extern int vmw_dmabuf_alloc_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_dmabuf_unref_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern uint32_t vmw_dmabuf_validate_node(struct ttm_buffer_object *bo, + uint32_t cur_validate_node); +extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo); +extern int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, + uint32_t id, struct vmw_dma_buffer **out); +extern uint32_t vmw_dmabuf_gmr(struct ttm_buffer_object *bo); +extern void vmw_dmabuf_set_gmr(struct ttm_buffer_object *bo, uint32_t id); +extern int vmw_gmr_id_alloc(struct vmw_private *dev_priv, uint32_t *p_id); +extern int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, + struct vmw_dma_buffer *bo); +extern int vmw_dmabuf_from_vram(struct vmw_private *vmw_priv, + struct vmw_dma_buffer *bo); +extern void vmw_dmabuf_gmr_unbind(struct ttm_buffer_object *bo); +extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_user_stream_lookup(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + uint32_t *inout_id, + struct vmw_resource **out); + + +/** + * Misc Ioctl functionality - vmwgfx_ioctl.c + */ + +extern int vmw_getparam_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_fifo_debug_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); + +/** + * Fifo utilities - vmwgfx_fifo.c + */ + +extern int vmw_fifo_init(struct vmw_private *dev_priv, + struct vmw_fifo_state *fifo); +extern void vmw_fifo_release(struct vmw_private *dev_priv, + struct vmw_fifo_state *fifo); +extern void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes); +extern void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes); +extern int vmw_fifo_send_fence(struct vmw_private *dev_priv, + uint32_t *sequence); +extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason); +extern int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma); +extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv); + +/** + * TTM glue - vmwgfx_ttm_glue.c + */ + +extern int vmw_ttm_global_init(struct vmw_private *dev_priv); +extern void vmw_ttm_global_release(struct vmw_private *dev_priv); +extern int vmw_mmap(struct file *filp, struct vm_area_struct *vma); + +/** + * TTM buffer object driver - vmwgfx_buffer.c + */ + +extern struct ttm_placement vmw_vram_placement; +extern struct ttm_placement vmw_vram_ne_placement; +extern struct ttm_placement vmw_vram_sys_placement; +extern struct ttm_placement vmw_sys_placement; +extern struct ttm_bo_driver vmw_bo_driver; +extern int vmw_dma_quiescent(struct drm_device *dev); + +/** + * Command submission - vmwgfx_execbuf.c + */ + +extern int vmw_execbuf_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); + +/** + * IRQs and wating - vmwgfx_irq.c + */ + +extern irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS); +extern int vmw_wait_fence(struct vmw_private *dev_priv, bool lazy, + uint32_t sequence, bool interruptible, + unsigned long timeout); +extern void vmw_irq_preinstall(struct drm_device *dev); +extern int vmw_irq_postinstall(struct drm_device *dev); +extern void vmw_irq_uninstall(struct drm_device *dev); +extern bool vmw_fence_signaled(struct vmw_private *dev_priv, + uint32_t sequence); +extern int vmw_fence_wait_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int vmw_fallback_wait(struct vmw_private *dev_priv, + bool lazy, + bool fifo_idle, + uint32_t sequence, + bool interruptible, + unsigned long timeout); + +/** + * Kernel framebuffer - vmwgfx_fb.c + */ + +int vmw_fb_init(struct vmw_private *vmw_priv); +int vmw_fb_close(struct vmw_private *dev_priv); +int vmw_fb_off(struct vmw_private *vmw_priv); +int vmw_fb_on(struct vmw_private *vmw_priv); + +/** + * Kernel modesetting - vmwgfx_kms.c + */ + +int vmw_kms_init(struct vmw_private *dev_priv); +int vmw_kms_close(struct vmw_private *dev_priv); +int vmw_kms_save_vga(struct vmw_private *vmw_priv); +int vmw_kms_restore_vga(struct vmw_private *vmw_priv); +int vmw_kms_cursor_bypass_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +void vmw_kms_cursor_post_execbuf(struct vmw_private *dev_priv); +void vmw_kms_cursor_snoop(struct vmw_surface *srf, + struct ttm_object_file *tfile, + struct ttm_buffer_object *bo, + SVGA3dCmdHeader *header); + +/** + * Overlay control - vmwgfx_overlay.c + */ + +int vmw_overlay_init(struct vmw_private *dev_priv); +int vmw_overlay_close(struct vmw_private *dev_priv); +int vmw_overlay_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); +int vmw_overlay_stop_all(struct vmw_private *dev_priv); +int vmw_overlay_resume_all(struct vmw_private *dev_priv); +int vmw_overlay_pause_all(struct vmw_private *dev_priv); +int vmw_overlay_claim(struct vmw_private *dev_priv, uint32_t *out); +int vmw_overlay_unref(struct vmw_private *dev_priv, uint32_t stream_id); +int vmw_overlay_num_overlays(struct vmw_private *dev_priv); +int vmw_overlay_num_free_overlays(struct vmw_private *dev_priv); + +/** + * Inline helper functions + */ + +static inline void vmw_surface_unreference(struct vmw_surface **srf) +{ + struct vmw_surface *tmp_srf = *srf; + struct vmw_resource *res = &tmp_srf->res; + *srf = NULL; + + vmw_resource_unreference(&res); +} + +static inline struct vmw_surface *vmw_surface_reference(struct vmw_surface *srf) +{ + (void) vmw_resource_reference(&srf->res); + return srf; +} + +static inline void vmw_dmabuf_unreference(struct vmw_dma_buffer **buf) +{ + struct vmw_dma_buffer *tmp_buf = *buf; + struct ttm_buffer_object *bo = &tmp_buf->base; + *buf = NULL; + + ttm_bo_unref(&bo); +} + +static inline struct vmw_dma_buffer *vmw_dmabuf_reference(struct vmw_dma_buffer *buf) +{ + if (ttm_bo_reference(&buf->base)) + return buf; + return NULL; +} + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/svga_reg.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/svga_reg.h @@ -0,0 +1,1346 @@ +/********************************************************** + * Copyright 1998-2009 VMware, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + **********************************************************/ + +/* + * svga_reg.h -- + * + * Virtual hardware definitions for the VMware SVGA II device. + */ + +#ifndef _SVGA_REG_H_ +#define _SVGA_REG_H_ + +/* + * PCI device IDs. + */ +#define PCI_VENDOR_ID_VMWARE 0x15AD +#define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405 + +/* + * Legal values for the SVGA_REG_CURSOR_ON register in old-fashioned + * cursor bypass mode. This is still supported, but no new guest + * drivers should use it. + */ +#define SVGA_CURSOR_ON_HIDE 0x0 /* Must be 0 to maintain backward compatibility */ +#define SVGA_CURSOR_ON_SHOW 0x1 /* Must be 1 to maintain backward compatibility */ +#define SVGA_CURSOR_ON_REMOVE_FROM_FB 0x2 /* Remove the cursor from the framebuffer because we need to see what's under it */ +#define SVGA_CURSOR_ON_RESTORE_TO_FB 0x3 /* Put the cursor back in the framebuffer so the user can see it */ + +/* + * The maximum framebuffer size that can traced for e.g. guests in VESA mode. + * The changeMap in the monitor is proportional to this number. Therefore, we'd + * like to keep it as small as possible to reduce monitor overhead (using + * SVGA_VRAM_MAX_SIZE for this increases the size of the shared area by over + * 4k!). + * + * NB: For compatibility reasons, this value must be greater than 0xff0000. + * See bug 335072. + */ +#define SVGA_FB_MAX_TRACEABLE_SIZE 0x1000000 + +#define SVGA_MAX_PSEUDOCOLOR_DEPTH 8 +#define SVGA_MAX_PSEUDOCOLORS (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH) +#define SVGA_NUM_PALETTE_REGS (3 * SVGA_MAX_PSEUDOCOLORS) + +#define SVGA_MAGIC 0x900000UL +#define SVGA_MAKE_ID(ver) (SVGA_MAGIC << 8 | (ver)) + +/* Version 2 let the address of the frame buffer be unsigned on Win32 */ +#define SVGA_VERSION_2 2 +#define SVGA_ID_2 SVGA_MAKE_ID(SVGA_VERSION_2) + +/* Version 1 has new registers starting with SVGA_REG_CAPABILITIES so + PALETTE_BASE has moved */ +#define SVGA_VERSION_1 1 +#define SVGA_ID_1 SVGA_MAKE_ID(SVGA_VERSION_1) + +/* Version 0 is the initial version */ +#define SVGA_VERSION_0 0 +#define SVGA_ID_0 SVGA_MAKE_ID(SVGA_VERSION_0) + +/* "Invalid" value for all SVGA IDs. (Version ID, screen object ID, surface ID...) */ +#define SVGA_ID_INVALID 0xFFFFFFFF + +/* Port offsets, relative to BAR0 */ +#define SVGA_INDEX_PORT 0x0 +#define SVGA_VALUE_PORT 0x1 +#define SVGA_BIOS_PORT 0x2 +#define SVGA_IRQSTATUS_PORT 0x8 + +/* + * Interrupt source flags for IRQSTATUS_PORT and IRQMASK. + * + * Interrupts are only supported when the + * SVGA_CAP_IRQMASK capability is present. + */ +#define SVGA_IRQFLAG_ANY_FENCE 0x1 /* Any fence was passed */ +#define SVGA_IRQFLAG_FIFO_PROGRESS 0x2 /* Made forward progress in the FIFO */ +#define SVGA_IRQFLAG_FENCE_GOAL 0x4 /* SVGA_FIFO_FENCE_GOAL reached */ + +/* + * Registers + */ + +enum { + SVGA_REG_ID = 0, + SVGA_REG_ENABLE = 1, + SVGA_REG_WIDTH = 2, + SVGA_REG_HEIGHT = 3, + SVGA_REG_MAX_WIDTH = 4, + SVGA_REG_MAX_HEIGHT = 5, + SVGA_REG_DEPTH = 6, + SVGA_REG_BITS_PER_PIXEL = 7, /* Current bpp in the guest */ + SVGA_REG_PSEUDOCOLOR = 8, + SVGA_REG_RED_MASK = 9, + SVGA_REG_GREEN_MASK = 10, + SVGA_REG_BLUE_MASK = 11, + SVGA_REG_BYTES_PER_LINE = 12, + SVGA_REG_FB_START = 13, /* (Deprecated) */ + SVGA_REG_FB_OFFSET = 14, + SVGA_REG_VRAM_SIZE = 15, + SVGA_REG_FB_SIZE = 16, + + /* ID 0 implementation only had the above registers, then the palette */ + + SVGA_REG_CAPABILITIES = 17, + SVGA_REG_MEM_START = 18, /* (Deprecated) */ + SVGA_REG_MEM_SIZE = 19, + SVGA_REG_CONFIG_DONE = 20, /* Set when memory area configured */ + SVGA_REG_SYNC = 21, /* See "FIFO Synchronization Registers" */ + SVGA_REG_BUSY = 22, /* See "FIFO Synchronization Registers" */ + SVGA_REG_GUEST_ID = 23, /* Set guest OS identifier */ + SVGA_REG_CURSOR_ID = 24, /* (Deprecated) */ + SVGA_REG_CURSOR_X = 25, /* (Deprecated) */ + SVGA_REG_CURSOR_Y = 26, /* (Deprecated) */ + SVGA_REG_CURSOR_ON = 27, /* (Deprecated) */ + SVGA_REG_HOST_BITS_PER_PIXEL = 28, /* (Deprecated) */ + SVGA_REG_SCRATCH_SIZE = 29, /* Number of scratch registers */ + SVGA_REG_MEM_REGS = 30, /* Number of FIFO registers */ + SVGA_REG_NUM_DISPLAYS = 31, /* (Deprecated) */ + SVGA_REG_PITCHLOCK = 32, /* Fixed pitch for all modes */ + SVGA_REG_IRQMASK = 33, /* Interrupt mask */ + + /* Legacy multi-monitor support */ + SVGA_REG_NUM_GUEST_DISPLAYS = 34,/* Number of guest displays in X/Y direction */ + SVGA_REG_DISPLAY_ID = 35, /* Display ID for the following display attributes */ + SVGA_REG_DISPLAY_IS_PRIMARY = 36,/* Whether this is a primary display */ + SVGA_REG_DISPLAY_POSITION_X = 37,/* The display position x */ + SVGA_REG_DISPLAY_POSITION_Y = 38,/* The display position y */ + SVGA_REG_DISPLAY_WIDTH = 39, /* The display's width */ + SVGA_REG_DISPLAY_HEIGHT = 40, /* The display's height */ + + /* See "Guest memory regions" below. */ + SVGA_REG_GMR_ID = 41, + SVGA_REG_GMR_DESCRIPTOR = 42, + SVGA_REG_GMR_MAX_IDS = 43, + SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44, + + SVGA_REG_TRACES = 45, /* Enable trace-based updates even when FIFO is on */ + SVGA_REG_TOP = 46, /* Must be 1 more than the last register */ + + SVGA_PALETTE_BASE = 1024, /* Base of SVGA color map */ + /* Next 768 (== 256*3) registers exist for colormap */ + + SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS + /* Base of scratch registers */ + /* Next reg[SVGA_REG_SCRATCH_SIZE] registers exist for scratch usage: + First 4 are reserved for VESA BIOS Extension; any remaining are for + the use of the current SVGA driver. */ +}; + + +/* + * Guest memory regions (GMRs): + * + * This is a new memory mapping feature available in SVGA devices + * which have the SVGA_CAP_GMR bit set. Previously, there were two + * fixed memory regions available with which to share data between the + * device and the driver: the FIFO ('MEM') and the framebuffer. GMRs + * are our name for an extensible way of providing arbitrary DMA + * buffers for use between the driver and the SVGA device. They are a + * new alternative to framebuffer memory, usable for both 2D and 3D + * graphics operations. + * + * Since GMR mapping must be done synchronously with guest CPU + * execution, we use a new pair of SVGA registers: + * + * SVGA_REG_GMR_ID -- + * + * Read/write. + * This register holds the 32-bit ID (a small positive integer) + * of a GMR to create, delete, or redefine. Writing this register + * has no side-effects. + * + * SVGA_REG_GMR_DESCRIPTOR -- + * + * Write-only. + * Writing this register will create, delete, or redefine the GMR + * specified by the above ID register. If this register is zero, + * the GMR is deleted. Any pointers into this GMR (including those + * currently being processed by FIFO commands) will be + * synchronously invalidated. + * + * If this register is nonzero, it must be the physical page + * number (PPN) of a data structure which describes the physical + * layout of the memory region this GMR should describe. The + * descriptor structure will be read synchronously by the SVGA + * device when this register is written. The descriptor need not + * remain allocated for the lifetime of the GMR. + * + * The guest driver should write SVGA_REG_GMR_ID first, then + * SVGA_REG_GMR_DESCRIPTOR. + * + * SVGA_REG_GMR_MAX_IDS -- + * + * Read-only. + * The SVGA device may choose to support a maximum number of + * user-defined GMR IDs. This register holds the number of supported + * IDs. (The maximum supported ID plus 1) + * + * SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH -- + * + * Read-only. + * The SVGA device may choose to put a limit on the total number + * of SVGAGuestMemDescriptor structures it will read when defining + * a single GMR. + * + * The descriptor structure is an array of SVGAGuestMemDescriptor + * structures. Each structure may do one of three things: + * + * - Terminate the GMR descriptor list. + * (ppn==0, numPages==0) + * + * - Add a PPN or range of PPNs to the GMR's virtual address space. + * (ppn != 0, numPages != 0) + * + * - Provide the PPN of the next SVGAGuestMemDescriptor, in order to + * support multi-page GMR descriptor tables without forcing the + * driver to allocate physically contiguous memory. + * (ppn != 0, numPages == 0) + * + * Note that each physical page of SVGAGuestMemDescriptor structures + * can describe at least 2MB of guest memory. If the driver needs to + * use more than one page of descriptor structures, it must use one of + * its SVGAGuestMemDescriptors to point to an additional page. The + * device will never automatically cross a page boundary. + * + * Once the driver has described a GMR, it is immediately available + * for use via any FIFO command that uses an SVGAGuestPtr structure. + * These pointers include a GMR identifier plus an offset into that + * GMR. + * + * The driver must check the SVGA_CAP_GMR bit before using the GMR + * registers. + */ + +/* + * Special GMR IDs, allowing SVGAGuestPtrs to point to framebuffer + * memory as well. In the future, these IDs could even be used to + * allow legacy memory regions to be redefined by the guest as GMRs. + * + * Using the guest framebuffer (GFB) at BAR1 for general purpose DMA + * is being phased out. Please try to use user-defined GMRs whenever + * possible. + */ +#define SVGA_GMR_NULL ((uint32) -1) +#define SVGA_GMR_FRAMEBUFFER ((uint32) -2) // Guest Framebuffer (GFB) + +typedef +struct SVGAGuestMemDescriptor { + uint32 ppn; + uint32 numPages; +} SVGAGuestMemDescriptor; + +typedef +struct SVGAGuestPtr { + uint32 gmrId; + uint32 offset; +} SVGAGuestPtr; + + +/* + * SVGAGMRImageFormat -- + * + * This is a packed representation of the source 2D image format + * for a GMR-to-screen blit. Currently it is defined as an encoding + * of the screen's color depth and bits-per-pixel, however, 16 bits + * are reserved for future use to identify other encodings (such as + * RGBA or higher-precision images). + * + * Currently supported formats: + * + * bpp depth Format Name + * --- ----- ----------- + * 32 24 32-bit BGRX + * 24 24 24-bit BGR + * 16 16 RGB 5-6-5 + * 16 15 RGB 5-5-5 + * + */ + +typedef +struct SVGAGMRImageFormat { + union { + struct { + uint32 bitsPerPixel : 8; + uint32 colorDepth : 8; + uint32 reserved : 16; // Must be zero + }; + + uint32 value; + }; +} SVGAGMRImageFormat; + +/* + * SVGAColorBGRX -- + * + * A 24-bit color format (BGRX), which does not depend on the + * format of the legacy guest framebuffer (GFB) or the current + * GMRFB state. + */ + +typedef +struct SVGAColorBGRX { + union { + struct { + uint32 b : 8; + uint32 g : 8; + uint32 r : 8; + uint32 x : 8; // Unused + }; + + uint32 value; + }; +} SVGAColorBGRX; + + +/* + * SVGASignedRect -- + * SVGASignedPoint -- + * + * Signed rectangle and point primitives. These are used by the new + * 2D primitives for drawing to Screen Objects, which can occupy a + * signed virtual coordinate space. + * + * SVGASignedRect specifies a half-open interval: the (left, top) + * pixel is part of the rectangle, but the (right, bottom) pixel is + * not. + */ + +typedef +struct SVGASignedRect { + int32 left; + int32 top; + int32 right; + int32 bottom; +} SVGASignedRect; + +typedef +struct SVGASignedPoint { + int32 x; + int32 y; +} SVGASignedPoint; + + +/* + * Capabilities + * + * Note the holes in the bitfield. Missing bits have been deprecated, + * and must not be reused. Those capabilities will never be reported + * by new versions of the SVGA device. + */ + +#define SVGA_CAP_NONE 0x00000000 +#define SVGA_CAP_RECT_COPY 0x00000002 +#define SVGA_CAP_CURSOR 0x00000020 +#define SVGA_CAP_CURSOR_BYPASS 0x00000040 // Legacy (Use Cursor Bypass 3 instead) +#define SVGA_CAP_CURSOR_BYPASS_2 0x00000080 // Legacy (Use Cursor Bypass 3 instead) +#define SVGA_CAP_8BIT_EMULATION 0x00000100 +#define SVGA_CAP_ALPHA_CURSOR 0x00000200 +#define SVGA_CAP_3D 0x00004000 +#define SVGA_CAP_EXTENDED_FIFO 0x00008000 +#define SVGA_CAP_MULTIMON 0x00010000 // Legacy multi-monitor support +#define SVGA_CAP_PITCHLOCK 0x00020000 +#define SVGA_CAP_IRQMASK 0x00040000 +#define SVGA_CAP_DISPLAY_TOPOLOGY 0x00080000 // Legacy multi-monitor support +#define SVGA_CAP_GMR 0x00100000 +#define SVGA_CAP_TRACES 0x00200000 + + +/* + * FIFO register indices. + * + * The FIFO is a chunk of device memory mapped into guest physmem. It + * is always treated as 32-bit words. + * + * The guest driver gets to decide how to partition it between + * - FIFO registers (there are always at least 4, specifying where the + * following data area is and how much data it contains; there may be + * more registers following these, depending on the FIFO protocol + * version in use) + * - FIFO data, written by the guest and slurped out by the VMX. + * These indices are 32-bit word offsets into the FIFO. + */ + +enum { + /* + * Block 1 (basic registers): The originally defined FIFO registers. + * These exist and are valid for all versions of the FIFO protocol. + */ + + SVGA_FIFO_MIN = 0, + SVGA_FIFO_MAX, /* The distance from MIN to MAX must be at least 10K */ + SVGA_FIFO_NEXT_CMD, + SVGA_FIFO_STOP, + + /* + * Block 2 (extended registers): Mandatory registers for the extended + * FIFO. These exist if the SVGA caps register includes + * SVGA_CAP_EXTENDED_FIFO; some of them are valid only if their + * associated capability bit is enabled. + * + * Note that when originally defined, SVGA_CAP_EXTENDED_FIFO implied + * support only for (FIFO registers) CAPABILITIES, FLAGS, and FENCE. + * This means that the guest has to test individually (in most cases + * using FIFO caps) for the presence of registers after this; the VMX + * can define "extended FIFO" to mean whatever it wants, and currently + * won't enable it unless there's room for that set and much more. + */ + + SVGA_FIFO_CAPABILITIES = 4, + SVGA_FIFO_FLAGS, + // Valid with SVGA_FIFO_CAP_FENCE: + SVGA_FIFO_FENCE, + + /* + * Block 3a (optional extended registers): Additional registers for the + * extended FIFO, whose presence isn't actually implied by + * SVGA_CAP_EXTENDED_FIFO; these exist if SVGA_FIFO_MIN is high enough to + * leave room for them. + * + * These in block 3a, the VMX currently considers mandatory for the + * extended FIFO. + */ + + // Valid if exists (i.e. if extended FIFO enabled): + SVGA_FIFO_3D_HWVERSION, /* See SVGA3dHardwareVersion in svga3d_reg.h */ + // Valid with SVGA_FIFO_CAP_PITCHLOCK: + SVGA_FIFO_PITCHLOCK, + + // Valid with SVGA_FIFO_CAP_CURSOR_BYPASS_3: + SVGA_FIFO_CURSOR_ON, /* Cursor bypass 3 show/hide register */ + SVGA_FIFO_CURSOR_X, /* Cursor bypass 3 x register */ + SVGA_FIFO_CURSOR_Y, /* Cursor bypass 3 y register */ + SVGA_FIFO_CURSOR_COUNT, /* Incremented when any of the other 3 change */ + SVGA_FIFO_CURSOR_LAST_UPDATED,/* Last time the host updated the cursor */ + + // Valid with SVGA_FIFO_CAP_RESERVE: + SVGA_FIFO_RESERVED, /* Bytes past NEXT_CMD with real contents */ + + /* + * Valid with SVGA_FIFO_CAP_SCREEN_OBJECT: + * + * By default this is SVGA_ID_INVALID, to indicate that the cursor + * coordinates are specified relative to the virtual root. If this + * is set to a specific screen ID, cursor position is reinterpreted + * as a signed offset relative to that screen's origin. This is the + * only way to place the cursor on a non-rooted screen. + */ + SVGA_FIFO_CURSOR_SCREEN_ID, + + /* + * XXX: The gap here, up until SVGA_FIFO_3D_CAPS, can be used for new + * registers, but this must be done carefully and with judicious use of + * capability bits, since comparisons based on SVGA_FIFO_MIN aren't + * enough to tell you whether the register exists: we've shipped drivers + * and products that used SVGA_FIFO_3D_CAPS but didn't know about some of + * the earlier ones. The actual order of introduction was: + * - PITCHLOCK + * - 3D_CAPS + * - CURSOR_* (cursor bypass 3) + * - RESERVED + * So, code that wants to know whether it can use any of the + * aforementioned registers, or anything else added after PITCHLOCK and + * before 3D_CAPS, needs to reason about something other than + * SVGA_FIFO_MIN. + */ + + /* + * 3D caps block space; valid with 3D hardware version >= + * SVGA3D_HWVERSION_WS6_B1. + */ + SVGA_FIFO_3D_CAPS = 32, + SVGA_FIFO_3D_CAPS_LAST = 32 + 255, + + /* + * End of VMX's current definition of "extended-FIFO registers". + * Registers before here are always enabled/disabled as a block; either + * the extended FIFO is enabled and includes all preceding registers, or + * it's disabled entirely. + * + * Block 3b (truly optional extended registers): Additional registers for + * the extended FIFO, which the VMX already knows how to enable and + * disable with correct granularity. + * + * Registers after here exist if and only if the guest SVGA driver + * sets SVGA_FIFO_MIN high enough to leave room for them. + */ + + // Valid if register exists: + SVGA_FIFO_GUEST_3D_HWVERSION, /* Guest driver's 3D version */ + SVGA_FIFO_FENCE_GOAL, /* Matching target for SVGA_IRQFLAG_FENCE_GOAL */ + SVGA_FIFO_BUSY, /* See "FIFO Synchronization Registers" */ + + /* + * Always keep this last. This defines the maximum number of + * registers we know about. At power-on, this value is placed in + * the SVGA_REG_MEM_REGS register, and we expect the guest driver + * to allocate this much space in FIFO memory for registers. + */ + SVGA_FIFO_NUM_REGS +}; + + +/* + * Definition of registers included in extended FIFO support. + * + * The guest SVGA driver gets to allocate the FIFO between registers + * and data. It must always allocate at least 4 registers, but old + * drivers stopped there. + * + * The VMX will enable extended FIFO support if and only if the guest + * left enough room for all registers defined as part of the mandatory + * set for the extended FIFO. + * + * Note that the guest drivers typically allocate the FIFO only at + * initialization time, not at mode switches, so it's likely that the + * number of FIFO registers won't change without a reboot. + * + * All registers less than this value are guaranteed to be present if + * svgaUser->fifo.extended is set. Any later registers must be tested + * individually for compatibility at each use (in the VMX). + * + * This value is used only by the VMX, so it can change without + * affecting driver compatibility; keep it that way? + */ +#define SVGA_FIFO_EXTENDED_MANDATORY_REGS (SVGA_FIFO_3D_CAPS_LAST + 1) + + +/* + * FIFO Synchronization Registers + * + * This explains the relationship between the various FIFO + * sync-related registers in IOSpace and in FIFO space. + * + * SVGA_REG_SYNC -- + * + * The SYNC register can be used in two different ways by the guest: + * + * 1. If the guest wishes to fully sync (drain) the FIFO, + * it will write once to SYNC then poll on the BUSY + * register. The FIFO is sync'ed once BUSY is zero. + * + * 2. If the guest wants to asynchronously wake up the host, + * it will write once to SYNC without polling on BUSY. + * Ideally it will do this after some new commands have + * been placed in the FIFO, and after reading a zero + * from SVGA_FIFO_BUSY. + * + * (1) is the original behaviour that SYNC was designed to + * support. Originally, a write to SYNC would implicitly + * trigger a read from BUSY. This causes us to synchronously + * process the FIFO. + * + * This behaviour has since been changed so that writing SYNC + * will *not* implicitly cause a read from BUSY. Instead, it + * makes a channel call which asynchronously wakes up the MKS + * thread. + * + * New guests can use this new behaviour to implement (2) + * efficiently. This lets guests get the host's attention + * without waiting for the MKS to poll, which gives us much + * better CPU utilization on SMP hosts and on UP hosts while + * we're blocked on the host GPU. + * + * Old guests shouldn't notice the behaviour change. SYNC was + * never guaranteed to process the entire FIFO, since it was + * bounded to a particular number of CPU cycles. Old guests will + * still loop on the BUSY register until the FIFO is empty. + * + * Writing to SYNC currently has the following side-effects: + * + * - Sets SVGA_REG_BUSY to TRUE (in the monitor) + * - Asynchronously wakes up the MKS thread for FIFO processing + * - The value written to SYNC is recorded as a "reason", for + * stats purposes. + * + * If SVGA_FIFO_BUSY is available, drivers are advised to only + * write to SYNC if SVGA_FIFO_BUSY is FALSE. Drivers should set + * SVGA_FIFO_BUSY to TRUE after writing to SYNC. The MKS will + * eventually set SVGA_FIFO_BUSY on its own, but this approach + * lets the driver avoid sending multiple asynchronous wakeup + * messages to the MKS thread. + * + * SVGA_REG_BUSY -- + * + * This register is set to TRUE when SVGA_REG_SYNC is written, + * and it reads as FALSE when the FIFO has been completely + * drained. + * + * Every read from this register causes us to synchronously + * process FIFO commands. There is no guarantee as to how many + * commands each read will process. + * + * CPU time spent processing FIFO commands will be billed to + * the guest. + * + * New drivers should avoid using this register unless they + * need to guarantee that the FIFO is completely drained. It + * is overkill for performing a sync-to-fence. Older drivers + * will use this register for any type of synchronization. + * + * SVGA_FIFO_BUSY -- + * + * This register is a fast way for the guest driver to check + * whether the FIFO is already being processed. It reads and + * writes at normal RAM speeds, with no monitor intervention. + * + * If this register reads as TRUE, the host is guaranteeing that + * any new commands written into the FIFO will be noticed before + * the MKS goes back to sleep. + * + * If this register reads as FALSE, no such guarantee can be + * made. + * + * The guest should use this register to quickly determine + * whether or not it needs to wake up the host. If the guest + * just wrote a command or group of commands that it would like + * the host to begin processing, it should: + * + * 1. Read SVGA_FIFO_BUSY. If it reads as TRUE, no further + * action is necessary. + * + * 2. Write TRUE to SVGA_FIFO_BUSY. This informs future guest + * code that we've already sent a SYNC to the host and we + * don't need to send a duplicate. + * + * 3. Write a reason to SVGA_REG_SYNC. This will send an + * asynchronous wakeup to the MKS thread. + */ + + +/* + * FIFO Capabilities + * + * Fence -- Fence register and command are supported + * Accel Front -- Front buffer only commands are supported + * Pitch Lock -- Pitch lock register is supported + * Video -- SVGA Video overlay units are supported + * Escape -- Escape command is supported + * + * XXX: Add longer descriptions for each capability, including a list + * of the new features that each capability provides. + * + * SVGA_FIFO_CAP_SCREEN_OBJECT -- + * + * Provides dynamic multi-screen rendering, for improved Unity and + * multi-monitor modes. With Screen Object, the guest can + * dynamically create and destroy 'screens', which can represent + * Unity windows or virtual monitors. Screen Object also provides + * strong guarantees that DMA operations happen only when + * guest-initiated. Screen Object deprecates the BAR1 guest + * framebuffer (GFB) and all commands that work only with the GFB. + * + * New registers: + * FIFO_CURSOR_SCREEN_ID, VIDEO_DATA_GMRID, VIDEO_DST_SCREEN_ID + * + * New 2D commands: + * DEFINE_SCREEN, DESTROY_SCREEN, DEFINE_GMRFB, BLIT_GMRFB_TO_SCREEN, + * BLIT_SCREEN_TO_GMRFB, ANNOTATION_FILL, ANNOTATION_COPY + * + * New 3D commands: + * BLIT_SURFACE_TO_SCREEN + * + * New guarantees: + * + * - The host will not read or write guest memory, including the GFB, + * except when explicitly initiated by a DMA command. + * + * - All DMA, including legacy DMA like UPDATE and PRESENT_READBACK, + * is guaranteed to complete before any subsequent FENCEs. + * + * - All legacy commands which affect a Screen (UPDATE, PRESENT, + * PRESENT_READBACK) as well as new Screen blit commands will + * all behave consistently as blits, and memory will be read + * or written in FIFO order. + * + * For example, if you PRESENT from one SVGA3D surface to multiple + * places on the screen, the data copied will always be from the + * SVGA3D surface at the time the PRESENT was issued in the FIFO. + * This was not necessarily true on devices without Screen Object. + * + * This means that on devices that support Screen Object, the + * PRESENT_READBACK command should not be necessary unless you + * actually want to read back the results of 3D rendering into + * system memory. (And for that, the BLIT_SCREEN_TO_GMRFB + * command provides a strict superset of functionality.) + * + * - When a screen is resized, either using Screen Object commands or + * legacy multimon registers, its contents are preserved. + */ + +#define SVGA_FIFO_CAP_NONE 0 +#define SVGA_FIFO_CAP_FENCE (1<<0) +#define SVGA_FIFO_CAP_ACCELFRONT (1<<1) +#define SVGA_FIFO_CAP_PITCHLOCK (1<<2) +#define SVGA_FIFO_CAP_VIDEO (1<<3) +#define SVGA_FIFO_CAP_CURSOR_BYPASS_3 (1<<4) +#define SVGA_FIFO_CAP_ESCAPE (1<<5) +#define SVGA_FIFO_CAP_RESERVE (1<<6) +#define SVGA_FIFO_CAP_SCREEN_OBJECT (1<<7) + + +/* + * FIFO Flags + * + * Accel Front -- Driver should use front buffer only commands + */ + +#define SVGA_FIFO_FLAG_NONE 0 +#define SVGA_FIFO_FLAG_ACCELFRONT (1<<0) +#define SVGA_FIFO_FLAG_RESERVED (1<<31) // Internal use only + +/* + * FIFO reservation sentinel value + */ + +#define SVGA_FIFO_RESERVED_UNKNOWN 0xffffffff + + +/* + * Video overlay support + */ + +#define SVGA_NUM_OVERLAY_UNITS 32 + + +/* + * Video capabilities that the guest is currently using + */ + +#define SVGA_VIDEO_FLAG_COLORKEY 0x0001 + + +/* + * Offsets for the video overlay registers + */ + +enum { + SVGA_VIDEO_ENABLED = 0, + SVGA_VIDEO_FLAGS, + SVGA_VIDEO_DATA_OFFSET, + SVGA_VIDEO_FORMAT, + SVGA_VIDEO_COLORKEY, + SVGA_VIDEO_SIZE, // Deprecated + SVGA_VIDEO_WIDTH, + SVGA_VIDEO_HEIGHT, + SVGA_VIDEO_SRC_X, + SVGA_VIDEO_SRC_Y, + SVGA_VIDEO_SRC_WIDTH, + SVGA_VIDEO_SRC_HEIGHT, + SVGA_VIDEO_DST_X, // Signed int32 + SVGA_VIDEO_DST_Y, // Signed int32 + SVGA_VIDEO_DST_WIDTH, + SVGA_VIDEO_DST_HEIGHT, + SVGA_VIDEO_PITCH_1, + SVGA_VIDEO_PITCH_2, + SVGA_VIDEO_PITCH_3, + SVGA_VIDEO_DATA_GMRID, // Optional, defaults to SVGA_GMR_FRAMEBUFFER + SVGA_VIDEO_DST_SCREEN_ID, // Optional, defaults to virtual coords (SVGA_ID_INVALID) + SVGA_VIDEO_NUM_REGS +}; + + +/* + * SVGA Overlay Units + * + * width and height relate to the entire source video frame. + * srcX, srcY, srcWidth and srcHeight represent subset of the source + * video frame to be displayed. + */ + +typedef struct SVGAOverlayUnit { + uint32 enabled; + uint32 flags; + uint32 dataOffset; + uint32 format; + uint32 colorKey; + uint32 size; + uint32 width; + uint32 height; + uint32 srcX; + uint32 srcY; + uint32 srcWidth; + uint32 srcHeight; + int32 dstX; + int32 dstY; + uint32 dstWidth; + uint32 dstHeight; + uint32 pitches[3]; + uint32 dataGMRId; + uint32 dstScreenId; +} SVGAOverlayUnit; + + +/* + * SVGAScreenObject -- + * + * This is a new way to represent a guest's multi-monitor screen or + * Unity window. Screen objects are only supported if the + * SVGA_FIFO_CAP_SCREEN_OBJECT capability bit is set. + * + * If Screen Objects are supported, they can be used to fully + * replace the functionality provided by the framebuffer registers + * (SVGA_REG_WIDTH, HEIGHT, etc.) and by SVGA_CAP_DISPLAY_TOPOLOGY. + * + * The screen object is a struct with guaranteed binary + * compatibility. New flags can be added, and the struct may grow, + * but existing fields must retain their meaning. + * + */ + +#define SVGA_SCREEN_HAS_ROOT (1 << 0) // Screen is present in the virtual coord space +#define SVGA_SCREEN_IS_PRIMARY (1 << 1) // Guest considers this screen to be 'primary' +#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2) // Guest is running a fullscreen app here + +typedef +struct SVGAScreenObject { + uint32 structSize; // sizeof(SVGAScreenObject) + uint32 id; + uint32 flags; + struct { + uint32 width; + uint32 height; + } size; + struct { + int32 x; + int32 y; + } root; // Only used if SVGA_SCREEN_HAS_ROOT is set. +} SVGAScreenObject; + + +/* + * Commands in the command FIFO: + * + * Command IDs defined below are used for the traditional 2D FIFO + * communication (not all commands are available for all versions of the + * SVGA FIFO protocol). + * + * Note the holes in the command ID numbers: These commands have been + * deprecated, and the old IDs must not be reused. + * + * Command IDs from 1000 to 1999 are reserved for use by the SVGA3D + * protocol. + * + * Each command's parameters are described by the comments and + * structs below. + */ + +typedef enum { + SVGA_CMD_INVALID_CMD = 0, + SVGA_CMD_UPDATE = 1, + SVGA_CMD_RECT_COPY = 3, + SVGA_CMD_DEFINE_CURSOR = 19, + SVGA_CMD_DEFINE_ALPHA_CURSOR = 22, + SVGA_CMD_UPDATE_VERBOSE = 25, + SVGA_CMD_FRONT_ROP_FILL = 29, + SVGA_CMD_FENCE = 30, + SVGA_CMD_ESCAPE = 33, + SVGA_CMD_DEFINE_SCREEN = 34, + SVGA_CMD_DESTROY_SCREEN = 35, + SVGA_CMD_DEFINE_GMRFB = 36, + SVGA_CMD_BLIT_GMRFB_TO_SCREEN = 37, + SVGA_CMD_BLIT_SCREEN_TO_GMRFB = 38, + SVGA_CMD_ANNOTATION_FILL = 39, + SVGA_CMD_ANNOTATION_COPY = 40, + SVGA_CMD_MAX +} SVGAFifoCmdId; + +#define SVGA_CMD_MAX_ARGS 64 + + +/* + * SVGA_CMD_UPDATE -- + * + * This is a DMA transfer which copies from the Guest Framebuffer + * (GFB) at BAR1 + SVGA_REG_FB_OFFSET to any screens which + * intersect with the provided virtual rectangle. + * + * This command does not support using arbitrary guest memory as a + * data source- it only works with the pre-defined GFB memory. + * This command also does not support signed virtual coordinates. + * If you have defined screens (using SVGA_CMD_DEFINE_SCREEN) with + * negative root x/y coordinates, the negative portion of those + * screens will not be reachable by this command. + * + * This command is not necessary when using framebuffer + * traces. Traces are automatically enabled if the SVGA FIFO is + * disabled, and you may explicitly enable/disable traces using + * SVGA_REG_TRACES. With traces enabled, any write to the GFB will + * automatically act as if a subsequent SVGA_CMD_UPDATE was issued. + * + * Traces and SVGA_CMD_UPDATE are the only supported ways to render + * pseudocolor screen updates. The newer Screen Object commands + * only support true color formats. + * + * Availability: + * Always available. + */ + +typedef +struct { + uint32 x; + uint32 y; + uint32 width; + uint32 height; +} SVGAFifoCmdUpdate; + + +/* + * SVGA_CMD_RECT_COPY -- + * + * Perform a rectangular DMA transfer from one area of the GFB to + * another, and copy the result to any screens which intersect it. + * + * Availability: + * SVGA_CAP_RECT_COPY + */ + +typedef +struct { + uint32 srcX; + uint32 srcY; + uint32 destX; + uint32 destY; + uint32 width; + uint32 height; +} SVGAFifoCmdRectCopy; + + +/* + * SVGA_CMD_DEFINE_CURSOR -- + * + * Provide a new cursor image, as an AND/XOR mask. + * + * The recommended way to position the cursor overlay is by using + * the SVGA_FIFO_CURSOR_* registers, supported by the + * SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability. + * + * Availability: + * SVGA_CAP_CURSOR + */ + +typedef +struct { + uint32 id; // Reserved, must be zero. + uint32 hotspotX; + uint32 hotspotY; + uint32 width; + uint32 height; + uint32 andMaskDepth; // Value must be 1 or equal to BITS_PER_PIXEL + uint32 xorMaskDepth; // Value must be 1 or equal to BITS_PER_PIXEL + /* + * Followed by scanline data for AND mask, then XOR mask. + * Each scanline is padded to a 32-bit boundary. + */ +} SVGAFifoCmdDefineCursor; + + +/* + * SVGA_CMD_DEFINE_ALPHA_CURSOR -- + * + * Provide a new cursor image, in 32-bit BGRA format. + * + * The recommended way to position the cursor overlay is by using + * the SVGA_FIFO_CURSOR_* registers, supported by the + * SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability. + * + * Availability: + * SVGA_CAP_ALPHA_CURSOR + */ + +typedef +struct { + uint32 id; // Reserved, must be zero. + uint32 hotspotX; + uint32 hotspotY; + uint32 width; + uint32 height; + /* Followed by scanline data */ +} SVGAFifoCmdDefineAlphaCursor; + + +/* + * SVGA_CMD_UPDATE_VERBOSE -- + * + * Just like SVGA_CMD_UPDATE, but also provide a per-rectangle + * 'reason' value, an opaque cookie which is used by internal + * debugging tools. Third party drivers should not use this + * command. + * + * Availability: + * SVGA_CAP_EXTENDED_FIFO + */ + +typedef +struct { + uint32 x; + uint32 y; + uint32 width; + uint32 height; + uint32 reason; +} SVGAFifoCmdUpdateVerbose; + + +/* + * SVGA_CMD_FRONT_ROP_FILL -- + * + * This is a hint which tells the SVGA device that the driver has + * just filled a rectangular region of the GFB with a solid + * color. Instead of reading these pixels from the GFB, the device + * can assume that they all equal 'color'. This is primarily used + * for remote desktop protocols. + * + * Availability: + * SVGA_FIFO_CAP_ACCELFRONT + */ + +#define SVGA_ROP_COPY 0x03 + +typedef +struct { + uint32 color; // In the same format as the GFB + uint32 x; + uint32 y; + uint32 width; + uint32 height; + uint32 rop; // Must be SVGA_ROP_COPY +} SVGAFifoCmdFrontRopFill; + + +/* + * SVGA_CMD_FENCE -- + * + * Insert a synchronization fence. When the SVGA device reaches + * this command, it will copy the 'fence' value into the + * SVGA_FIFO_FENCE register. It will also compare the fence against + * SVGA_FIFO_FENCE_GOAL. If the fence matches the goal and the + * SVGA_IRQFLAG_FENCE_GOAL interrupt is enabled, the device will + * raise this interrupt. + * + * Availability: + * SVGA_FIFO_FENCE for this command, + * SVGA_CAP_IRQMASK for SVGA_FIFO_FENCE_GOAL. + */ + +typedef +struct { + uint32 fence; +} SVGAFifoCmdFence; + + +/* + * SVGA_CMD_ESCAPE -- + * + * Send an extended or vendor-specific variable length command. + * This is used for video overlay, third party plugins, and + * internal debugging tools. See svga_escape.h + * + * Availability: + * SVGA_FIFO_CAP_ESCAPE + */ + +typedef +struct { + uint32 nsid; + uint32 size; + /* followed by 'size' bytes of data */ +} SVGAFifoCmdEscape; + + +/* + * SVGA_CMD_DEFINE_SCREEN -- + * + * Define or redefine an SVGAScreenObject. See the description of + * SVGAScreenObject above. The video driver is responsible for + * generating new screen IDs. They should be small positive + * integers. The virtual device will have an implementation + * specific upper limit on the number of screen IDs + * supported. Drivers are responsible for recycling IDs. The first + * valid ID is zero. + * + * - Interaction with other registers: + * + * For backwards compatibility, when the GFB mode registers (WIDTH, + * HEIGHT, PITCHLOCK, BITS_PER_PIXEL) are modified, the SVGA device + * deletes all screens other than screen #0, and redefines screen + * #0 according to the specified mode. Drivers that use + * SVGA_CMD_DEFINE_SCREEN should destroy or redefine screen #0. + * + * If you use screen objects, do not use the legacy multi-mon + * registers (SVGA_REG_NUM_GUEST_DISPLAYS, SVGA_REG_DISPLAY_*). + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + SVGAScreenObject screen; // Variable-length according to version +} SVGAFifoCmdDefineScreen; + + +/* + * SVGA_CMD_DESTROY_SCREEN -- + * + * Destroy an SVGAScreenObject. Its ID is immediately available for + * re-use. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + uint32 screenId; +} SVGAFifoCmdDestroyScreen; + + +/* + * SVGA_CMD_DEFINE_GMRFB -- + * + * This command sets a piece of SVGA device state called the + * Guest Memory Region Framebuffer, or GMRFB. The GMRFB is a + * piece of light-weight state which identifies the location and + * format of an image in guest memory or in BAR1. The GMRFB has + * an arbitrary size, and it doesn't need to match the geometry + * of the GFB or any screen object. + * + * The GMRFB can be redefined as often as you like. You could + * always use the same GMRFB, you could redefine it before + * rendering from a different guest screen, or you could even + * redefine it before every blit. + * + * There are multiple ways to use this command. The simplest way is + * to use it to move the framebuffer either to elsewhere in the GFB + * (BAR1) memory region, or to a user-defined GMR. This lets a + * driver use a framebuffer allocated entirely out of normal system + * memory, which we encourage. + * + * Another way to use this command is to set up a ring buffer of + * updates in GFB memory. If a driver wants to ensure that no + * frames are skipped by the SVGA device, it is important that the + * driver not modify the source data for a blit until the device is + * done processing the command. One efficient way to accomplish + * this is to use a ring of small DMA buffers. Each buffer is used + * for one blit, then we move on to the next buffer in the + * ring. The FENCE mechanism is used to protect each buffer from + * re-use until the device is finished with that buffer's + * corresponding blit. + * + * This command does not affect the meaning of SVGA_CMD_UPDATE. + * UPDATEs always occur from the legacy GFB memory area. This + * command has no support for pseudocolor GMRFBs. Currently only + * true-color 15, 16, and 24-bit depths are supported. Future + * devices may expose capabilities for additional framebuffer + * formats. + * + * The default GMRFB value is undefined. Drivers must always send + * this command at least once before performing any blit from the + * GMRFB. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + SVGAGuestPtr ptr; + uint32 bytesPerLine; + SVGAGMRImageFormat format; +} SVGAFifoCmdDefineGMRFB; + + +/* + * SVGA_CMD_BLIT_GMRFB_TO_SCREEN -- + * + * This is a guest-to-host blit. It performs a DMA operation to + * copy a rectangular region of pixels from the current GMRFB to + * one or more Screen Objects. + * + * The destination coordinate may be specified relative to a + * screen's origin (if a screen ID is specified) or relative to the + * virtual coordinate system's origin (if the screen ID is + * SVGA_ID_INVALID). The actual destination may span zero or more + * screens, in the case of a virtual destination rect or a rect + * which extends off the edge of the specified screen. + * + * This command writes to the screen's "base layer": the underlying + * framebuffer which exists below any cursor or video overlays. No + * action is necessary to explicitly hide or update any overlays + * which exist on top of the updated region. + * + * The SVGA device is guaranteed to finish reading from the GMRFB + * by the time any subsequent FENCE commands are reached. + * + * This command consumes an annotation. See the + * SVGA_CMD_ANNOTATION_* commands for details. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + SVGASignedPoint srcOrigin; + SVGASignedRect destRect; + uint32 destScreenId; +} SVGAFifoCmdBlitGMRFBToScreen; + + +/* + * SVGA_CMD_BLIT_SCREEN_TO_GMRFB -- + * + * This is a host-to-guest blit. It performs a DMA operation to + * copy a rectangular region of pixels from a single Screen Object + * back to the current GMRFB. + * + * Usage note: This command should be used rarely. It will + * typically be inefficient, but it is necessary for some types of + * synchronization between 3D (GPU) and 2D (CPU) rendering into + * overlapping areas of a screen. + * + * The source coordinate is specified relative to a screen's + * origin. The provided screen ID must be valid. If any parameters + * are invalid, the resulting pixel values are undefined. + * + * This command reads the screen's "base layer". Overlays like + * video and cursor are not included, but any data which was sent + * using a blit-to-screen primitive will be available, no matter + * whether the data's original source was the GMRFB or the 3D + * acceleration hardware. + * + * Note that our guest-to-host blits and host-to-guest blits aren't + * symmetric in their current implementation. While the parameters + * are identical, host-to-guest blits are a lot less featureful. + * They do not support clipping: If the source parameters don't + * fully fit within a screen, the blit fails. They must originate + * from exactly one screen. Virtual coordinates are not directly + * supported. + * + * Host-to-guest blits do support the same set of GMRFB formats + * offered by guest-to-host blits. + * + * The SVGA device is guaranteed to finish writing to the GMRFB by + * the time any subsequent FENCE commands are reached. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + SVGASignedPoint destOrigin; + SVGASignedRect srcRect; + uint32 srcScreenId; +} SVGAFifoCmdBlitScreenToGMRFB; + + +/* + * SVGA_CMD_ANNOTATION_FILL -- + * + * This is a blit annotation. This command stores a small piece of + * device state which is consumed by the next blit-to-screen + * command. The state is only cleared by commands which are + * specifically documented as consuming an annotation. Other + * commands (such as ESCAPEs for debugging) may intervene between + * the annotation and its associated blit. + * + * This annotation is a promise about the contents of the next + * blit: The video driver is guaranteeing that all pixels in that + * blit will have the same value, specified here as a color in + * SVGAColorBGRX format. + * + * The SVGA device can still render the blit correctly even if it + * ignores this annotation, but the annotation may allow it to + * perform the blit more efficiently, for example by ignoring the + * source data and performing a fill in hardware. + * + * This annotation is most important for performance when the + * user's display is being remoted over a network connection. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + SVGAColorBGRX color; +} SVGAFifoCmdAnnotationFill; + + +/* + * SVGA_CMD_ANNOTATION_COPY -- + * + * This is a blit annotation. See SVGA_CMD_ANNOTATION_FILL for more + * information about annotations. + * + * This annotation is a promise about the contents of the next + * blit: The video driver is guaranteeing that all pixels in that + * blit will have the same value as those which already exist at an + * identically-sized region on the same or a different screen. + * + * Note that the source pixels for the COPY in this annotation are + * sampled before applying the anqnotation's associated blit. They + * are allowed to overlap with the blit's destination pixels. + * + * The copy source rectangle is specified the same way as the blit + * destination: it can be a rectangle which spans zero or more + * screens, specified relative to either a screen or to the virtual + * coordinate system's origin. If the source rectangle includes + * pixels which are not from exactly one screen, the results are + * undefined. + * + * Availability: + * SVGA_FIFO_CAP_SCREEN_OBJECT + */ + +typedef +struct { + SVGASignedPoint srcOrigin; + uint32 srcScreenId; +} SVGAFifoCmdAnnotationCopy; + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c @@ -0,0 +1,252 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_drv.h" +#include "ttm/ttm_bo_driver.h" +#include "ttm/ttm_placement.h" + +static uint32_t vram_placement_flags = TTM_PL_FLAG_VRAM | + TTM_PL_FLAG_CACHED; + +static uint32_t vram_ne_placement_flags = TTM_PL_FLAG_VRAM | + TTM_PL_FLAG_CACHED | + TTM_PL_FLAG_NO_EVICT; + +static uint32_t sys_placement_flags = TTM_PL_FLAG_SYSTEM | + TTM_PL_FLAG_CACHED; + +struct ttm_placement vmw_vram_placement = { + .fpfn = 0, + .lpfn = 0, + .num_placement = 1, + .placement = &vram_placement_flags, + .num_busy_placement = 1, + .busy_placement = &vram_placement_flags +}; + +struct ttm_placement vmw_vram_sys_placement = { + .fpfn = 0, + .lpfn = 0, + .num_placement = 1, + .placement = &vram_placement_flags, + .num_busy_placement = 1, + .busy_placement = &sys_placement_flags +}; + +struct ttm_placement vmw_vram_ne_placement = { + .fpfn = 0, + .lpfn = 0, + .num_placement = 1, + .placement = &vram_ne_placement_flags, + .num_busy_placement = 1, + .busy_placement = &vram_ne_placement_flags +}; + +struct ttm_placement vmw_sys_placement = { + .fpfn = 0, + .lpfn = 0, + .num_placement = 1, + .placement = &sys_placement_flags, + .num_busy_placement = 1, + .busy_placement = &sys_placement_flags +}; + +struct vmw_ttm_backend { + struct ttm_backend backend; +}; + +static int vmw_ttm_populate(struct ttm_backend *backend, + unsigned long num_pages, struct page **pages, + struct page *dummy_read_page) +{ + return 0; +} + +static int vmw_ttm_bind(struct ttm_backend *backend, struct ttm_mem_reg *bo_mem) +{ + return 0; +} + +static int vmw_ttm_unbind(struct ttm_backend *backend) +{ + return 0; +} + +static void vmw_ttm_clear(struct ttm_backend *backend) +{ +} + +static void vmw_ttm_destroy(struct ttm_backend *backend) +{ + struct vmw_ttm_backend *vmw_be = + container_of(backend, struct vmw_ttm_backend, backend); + + kfree(vmw_be); +} + +static struct ttm_backend_func vmw_ttm_func = { + .populate = vmw_ttm_populate, + .clear = vmw_ttm_clear, + .bind = vmw_ttm_bind, + .unbind = vmw_ttm_unbind, + .destroy = vmw_ttm_destroy, +}; + +struct ttm_backend *vmw_ttm_backend_init(struct ttm_bo_device *bdev) +{ + struct vmw_ttm_backend *vmw_be; + + vmw_be = kmalloc(sizeof(*vmw_be), GFP_KERNEL); + if (!vmw_be) + return NULL; + + vmw_be->backend.func = &vmw_ttm_func; + + return &vmw_be->backend; +} + +int vmw_invalidate_caches(struct ttm_bo_device *bdev, uint32_t flags) +{ + return 0; +} + +int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, + struct ttm_mem_type_manager *man) +{ + struct vmw_private *dev_priv = + container_of(bdev, struct vmw_private, bdev); + + switch (type) { + case TTM_PL_SYSTEM: + /* System memory */ + + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; + man->available_caching = TTM_PL_MASK_CACHING; + man->default_caching = TTM_PL_FLAG_CACHED; + break; + case TTM_PL_VRAM: + /* "On-card" video ram */ + man->gpu_offset = 0; + man->io_offset = dev_priv->vram_start; + man->io_size = dev_priv->vram_size; + man->flags = TTM_MEMTYPE_FLAG_FIXED | + TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | TTM_MEMTYPE_FLAG_MAPPABLE; + man->io_addr = NULL; + man->available_caching = TTM_PL_MASK_CACHING; + man->default_caching = TTM_PL_FLAG_WC; + break; + default: + DRM_ERROR("Unsupported memory type %u\n", (unsigned)type); + return -EINVAL; + } + return 0; +} + +void vmw_evict_flags(struct ttm_buffer_object *bo, + struct ttm_placement *placement) +{ + *placement = vmw_sys_placement; +} + +/** + * FIXME: Proper access checks on buffers. + */ + +static int vmw_verify_access(struct ttm_buffer_object *bo, struct file *filp) +{ + return 0; +} + +static void vmw_move_notify(struct ttm_buffer_object *bo, + struct ttm_mem_reg *new_mem) +{ + if (new_mem->mem_type != TTM_PL_SYSTEM) + vmw_dmabuf_gmr_unbind(bo); +} + +static void vmw_swap_notify(struct ttm_buffer_object *bo) +{ + vmw_dmabuf_gmr_unbind(bo); +} + +/** + * FIXME: We're using the old vmware polling method to sync. + * Do this with fences instead. + */ + +static void *vmw_sync_obj_ref(void *sync_obj) +{ + return sync_obj; +} + +static void vmw_sync_obj_unref(void **sync_obj) +{ + *sync_obj = NULL; +} + +static int vmw_sync_obj_flush(void *sync_obj, void *sync_arg) +{ + struct vmw_private *dev_priv = (struct vmw_private *)sync_arg; + + mutex_lock(&dev_priv->hw_mutex); + vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC); + mutex_unlock(&dev_priv->hw_mutex); + return 0; +} + +static bool vmw_sync_obj_signaled(void *sync_obj, void *sync_arg) +{ + struct vmw_private *dev_priv = (struct vmw_private *)sync_arg; + uint32_t sequence = (unsigned long) sync_obj; + + return vmw_fence_signaled(dev_priv, sequence); +} + +static int vmw_sync_obj_wait(void *sync_obj, void *sync_arg, + bool lazy, bool interruptible) +{ + struct vmw_private *dev_priv = (struct vmw_private *)sync_arg; + uint32_t sequence = (unsigned long) sync_obj; + + return vmw_wait_fence(dev_priv, false, sequence, false, 3*HZ); +} + +struct ttm_bo_driver vmw_bo_driver = { + .create_ttm_backend_entry = vmw_ttm_backend_init, + .invalidate_caches = vmw_invalidate_caches, + .init_mem_type = vmw_init_mem_type, + .evict_flags = vmw_evict_flags, + .move = NULL, + .verify_access = vmw_verify_access, + .sync_obj_signaled = vmw_sync_obj_signaled, + .sync_obj_wait = vmw_sync_obj_wait, + .sync_obj_flush = vmw_sync_obj_flush, + .sync_obj_unref = vmw_sync_obj_unref, + .sync_obj_ref = vmw_sync_obj_ref, + .move_notify = vmw_move_notify, + .swap_notify = vmw_swap_notify +}; --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -0,0 +1,880 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_kms.h" + +/* Might need a hrtimer here? */ +#define VMWGFX_PRESENT_RATE ((HZ / 60 > 0) ? HZ / 60 : 1) + + +void vmw_display_unit_cleanup(struct vmw_display_unit *du) +{ + if (du->cursor_surface) + vmw_surface_unreference(&du->cursor_surface); + if (du->cursor_dmabuf) + vmw_dmabuf_unreference(&du->cursor_dmabuf); + drm_crtc_cleanup(&du->crtc); + drm_encoder_cleanup(&du->encoder); + drm_connector_cleanup(&du->connector); +} + +/* + * Display Unit Cursor functions + */ + +int vmw_cursor_update_image(struct vmw_private *dev_priv, + u32 *image, u32 width, u32 height, + u32 hotspotX, u32 hotspotY) +{ + struct { + u32 cmd; + SVGAFifoCmdDefineAlphaCursor cursor; + } *cmd; + u32 image_size = width * height * 4; + u32 cmd_size = sizeof(*cmd) + image_size; + + if (!image) + return -EINVAL; + + cmd = vmw_fifo_reserve(dev_priv, cmd_size); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Fifo reserve failed.\n"); + return -ENOMEM; + } + + memset(cmd, 0, sizeof(*cmd)); + + memcpy(&cmd[1], image, image_size); + + cmd->cmd = cpu_to_le32(SVGA_CMD_DEFINE_ALPHA_CURSOR); + cmd->cursor.id = cpu_to_le32(0); + cmd->cursor.width = cpu_to_le32(width); + cmd->cursor.height = cpu_to_le32(height); + cmd->cursor.hotspotX = cpu_to_le32(hotspotX); + cmd->cursor.hotspotY = cpu_to_le32(hotspotY); + + vmw_fifo_commit(dev_priv, cmd_size); + + return 0; +} + +void vmw_cursor_update_position(struct vmw_private *dev_priv, + bool show, int x, int y) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t count; + + iowrite32(show ? 1 : 0, fifo_mem + SVGA_FIFO_CURSOR_ON); + iowrite32(x, fifo_mem + SVGA_FIFO_CURSOR_X); + iowrite32(y, fifo_mem + SVGA_FIFO_CURSOR_Y); + count = ioread32(fifo_mem + SVGA_FIFO_CURSOR_COUNT); + iowrite32(++count, fifo_mem + SVGA_FIFO_CURSOR_COUNT); +} + +int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, + uint32_t handle, uint32_t width, uint32_t height) +{ + struct vmw_private *dev_priv = vmw_priv(crtc->dev); + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + struct vmw_display_unit *du = vmw_crtc_to_du(crtc); + struct vmw_surface *surface = NULL; + struct vmw_dma_buffer *dmabuf = NULL; + int ret; + + if (handle) { + ret = vmw_user_surface_lookup_handle(dev_priv, tfile, + handle, &surface); + if (!ret) { + if (!surface->snooper.image) { + DRM_ERROR("surface not suitable for cursor\n"); + return -EINVAL; + } + } else { + ret = vmw_user_dmabuf_lookup(tfile, + handle, &dmabuf); + if (ret) { + DRM_ERROR("failed to find surface or dmabuf: %i\n", ret); + return -EINVAL; + } + } + } + + /* takedown old cursor */ + if (du->cursor_surface) { + du->cursor_surface->snooper.crtc = NULL; + vmw_surface_unreference(&du->cursor_surface); + } + if (du->cursor_dmabuf) + vmw_dmabuf_unreference(&du->cursor_dmabuf); + + /* setup new image */ + if (surface) { + /* vmw_user_surface_lookup takes one reference */ + du->cursor_surface = surface; + + du->cursor_surface->snooper.crtc = crtc; + du->cursor_age = du->cursor_surface->snooper.age; + vmw_cursor_update_image(dev_priv, surface->snooper.image, + 64, 64, du->hotspot_x, du->hotspot_y); + } else if (dmabuf) { + struct ttm_bo_kmap_obj map; + unsigned long kmap_offset; + unsigned long kmap_num; + void *virtual; + bool dummy; + + /* vmw_user_surface_lookup takes one reference */ + du->cursor_dmabuf = dmabuf; + + kmap_offset = 0; + kmap_num = (64*64*4) >> PAGE_SHIFT; + + ret = ttm_bo_reserve(&dmabuf->base, true, false, false, 0); + if (unlikely(ret != 0)) { + DRM_ERROR("reserve failed\n"); + return -EINVAL; + } + + ret = ttm_bo_kmap(&dmabuf->base, kmap_offset, kmap_num, &map); + if (unlikely(ret != 0)) + goto err_unreserve; + + virtual = ttm_kmap_obj_virtual(&map, &dummy); + vmw_cursor_update_image(dev_priv, virtual, 64, 64, + du->hotspot_x, du->hotspot_y); + + ttm_bo_kunmap(&map); +err_unreserve: + ttm_bo_unreserve(&dmabuf->base); + + } else { + vmw_cursor_update_position(dev_priv, false, 0, 0); + return 0; + } + + vmw_cursor_update_position(dev_priv, true, du->cursor_x, du->cursor_y); + + return 0; +} + +int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) +{ + struct vmw_private *dev_priv = vmw_priv(crtc->dev); + struct vmw_display_unit *du = vmw_crtc_to_du(crtc); + bool shown = du->cursor_surface || du->cursor_dmabuf ? true : false; + + du->cursor_x = x + crtc->x; + du->cursor_y = y + crtc->y; + + vmw_cursor_update_position(dev_priv, shown, + du->cursor_x, du->cursor_y); + + return 0; +} + +void vmw_kms_cursor_snoop(struct vmw_surface *srf, + struct ttm_object_file *tfile, + struct ttm_buffer_object *bo, + SVGA3dCmdHeader *header) +{ + struct ttm_bo_kmap_obj map; + unsigned long kmap_offset; + unsigned long kmap_num; + SVGA3dCopyBox *box; + unsigned box_count; + void *virtual; + bool dummy; + struct vmw_dma_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdSurfaceDMA dma; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_dma_cmd, header); + + /* No snooper installed */ + if (!srf->snooper.image) + return; + + if (cmd->dma.host.face != 0 || cmd->dma.host.mipmap != 0) { + DRM_ERROR("face and mipmap for cursors should never != 0\n"); + return; + } + + if (cmd->header.size < 64) { + DRM_ERROR("at least one full copy box must be given\n"); + return; + } + + box = (SVGA3dCopyBox *)&cmd[1]; + box_count = (cmd->header.size - sizeof(SVGA3dCmdSurfaceDMA)) / + sizeof(SVGA3dCopyBox); + + if (cmd->dma.guest.pitch != (64 * 4) || + cmd->dma.guest.ptr.offset % PAGE_SIZE || + box->x != 0 || box->y != 0 || box->z != 0 || + box->srcx != 0 || box->srcy != 0 || box->srcz != 0 || + box->w != 64 || box->h != 64 || box->d != 1 || + box_count != 1) { + /* TODO handle none page aligned offsets */ + /* TODO handle partial uploads and pitch != 256 */ + /* TODO handle more then one copy (size != 64) */ + DRM_ERROR("lazy programer, cant handle wierd stuff\n"); + return; + } + + kmap_offset = cmd->dma.guest.ptr.offset >> PAGE_SHIFT; + kmap_num = (64*64*4) >> PAGE_SHIFT; + + ret = ttm_bo_reserve(bo, true, false, false, 0); + if (unlikely(ret != 0)) { + DRM_ERROR("reserve failed\n"); + return; + } + + ret = ttm_bo_kmap(bo, kmap_offset, kmap_num, &map); + if (unlikely(ret != 0)) + goto err_unreserve; + + virtual = ttm_kmap_obj_virtual(&map, &dummy); + + memcpy(srf->snooper.image, virtual, 64*64*4); + srf->snooper.age++; + + /* we can't call this function from this function since execbuf has + * reserved fifo space. + * + * if (srf->snooper.crtc) + * vmw_ldu_crtc_cursor_update_image(dev_priv, + * srf->snooper.image, 64, 64, + * du->hotspot_x, du->hotspot_y); + */ + + ttm_bo_kunmap(&map); +err_unreserve: + ttm_bo_unreserve(bo); +} + +void vmw_kms_cursor_post_execbuf(struct vmw_private *dev_priv) +{ + struct drm_device *dev = dev_priv->dev; + struct vmw_display_unit *du; + struct drm_crtc *crtc; + + mutex_lock(&dev->mode_config.mutex); + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + du = vmw_crtc_to_du(crtc); + if (!du->cursor_surface || + du->cursor_age == du->cursor_surface->snooper.age) + continue; + + du->cursor_age = du->cursor_surface->snooper.age; + vmw_cursor_update_image(dev_priv, + du->cursor_surface->snooper.image, + 64, 64, du->hotspot_x, du->hotspot_y); + } + + mutex_unlock(&dev->mode_config.mutex); +} + +/* + * Generic framebuffer code + */ + +int vmw_framebuffer_create_handle(struct drm_framebuffer *fb, + struct drm_file *file_priv, + unsigned int *handle) +{ + if (handle) + handle = 0; + + return 0; +} + +/* + * Surface framebuffer code + */ + +#define vmw_framebuffer_to_vfbs(x) \ + container_of(x, struct vmw_framebuffer_surface, base.base) + +struct vmw_framebuffer_surface { + struct vmw_framebuffer base; + struct vmw_surface *surface; + struct delayed_work d_work; + struct mutex work_lock; + bool present_fs; +}; + +void vmw_framebuffer_surface_destroy(struct drm_framebuffer *framebuffer) +{ + struct vmw_framebuffer_surface *vfb = + vmw_framebuffer_to_vfbs(framebuffer); + + cancel_delayed_work_sync(&vfb->d_work); + drm_framebuffer_cleanup(framebuffer); + vmw_surface_unreference(&vfb->surface); + + kfree(framebuffer); +} + +static void vmw_framebuffer_present_fs_callback(struct work_struct *work) +{ + struct delayed_work *d_work = + container_of(work, struct delayed_work, work); + struct vmw_framebuffer_surface *vfbs = + container_of(d_work, struct vmw_framebuffer_surface, d_work); + struct vmw_surface *surf = vfbs->surface; + struct drm_framebuffer *framebuffer = &vfbs->base.base; + struct vmw_private *dev_priv = vmw_priv(framebuffer->dev); + + struct { + SVGA3dCmdHeader header; + SVGA3dCmdPresent body; + SVGA3dCopyRect cr; + } *cmd; + + mutex_lock(&vfbs->work_lock); + if (!vfbs->present_fs) + goto out_unlock; + + cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); + if (unlikely(cmd == NULL)) + goto out_resched; + + cmd->header.id = cpu_to_le32(SVGA_3D_CMD_PRESENT); + cmd->header.size = cpu_to_le32(sizeof(cmd->body) + sizeof(cmd->cr)); + cmd->body.sid = cpu_to_le32(surf->res.id); + cmd->cr.x = cpu_to_le32(0); + cmd->cr.y = cpu_to_le32(0); + cmd->cr.srcx = cmd->cr.x; + cmd->cr.srcy = cmd->cr.y; + cmd->cr.w = cpu_to_le32(framebuffer->width); + cmd->cr.h = cpu_to_le32(framebuffer->height); + vfbs->present_fs = false; + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +out_resched: + /** + * Will not re-add if already pending. + */ + schedule_delayed_work(&vfbs->d_work, VMWGFX_PRESENT_RATE); +out_unlock: + mutex_unlock(&vfbs->work_lock); +} + + +int vmw_framebuffer_surface_dirty(struct drm_framebuffer *framebuffer, + unsigned flags, unsigned color, + struct drm_clip_rect *clips, + unsigned num_clips) +{ + struct vmw_private *dev_priv = vmw_priv(framebuffer->dev); + struct vmw_framebuffer_surface *vfbs = + vmw_framebuffer_to_vfbs(framebuffer); + struct vmw_surface *surf = vfbs->surface; + struct drm_clip_rect norect; + SVGA3dCopyRect *cr; + int i, inc = 1; + + struct { + SVGA3dCmdHeader header; + SVGA3dCmdPresent body; + SVGA3dCopyRect cr; + } *cmd; + + if (!num_clips || + !(dev_priv->fifo.capabilities & + SVGA_FIFO_CAP_SCREEN_OBJECT)) { + int ret; + + mutex_lock(&vfbs->work_lock); + vfbs->present_fs = true; + ret = schedule_delayed_work(&vfbs->d_work, VMWGFX_PRESENT_RATE); + mutex_unlock(&vfbs->work_lock); + if (ret) { + /** + * No work pending, Force immediate present. + */ + vmw_framebuffer_present_fs_callback(&vfbs->d_work.work); + } + return 0; + } + + if (!num_clips) { + num_clips = 1; + clips = &norect; + norect.x1 = norect.y1 = 0; + norect.x2 = framebuffer->width; + norect.y2 = framebuffer->height; + } else if (flags & DRM_MODE_FB_DIRTY_ANNOTATE_COPY) { + num_clips /= 2; + inc = 2; /* skip source rects */ + } + + cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd) + (num_clips - 1) * sizeof(cmd->cr)); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Fifo reserve failed.\n"); + return -ENOMEM; + } + + memset(cmd, 0, sizeof(*cmd)); + + cmd->header.id = cpu_to_le32(SVGA_3D_CMD_PRESENT); + cmd->header.size = cpu_to_le32(sizeof(cmd->body) + num_clips * sizeof(cmd->cr)); + cmd->body.sid = cpu_to_le32(surf->res.id); + + for (i = 0, cr = &cmd->cr; i < num_clips; i++, cr++, clips += inc) { + cr->x = cpu_to_le16(clips->x1); + cr->y = cpu_to_le16(clips->y1); + cr->srcx = cr->x; + cr->srcy = cr->y; + cr->w = cpu_to_le16(clips->x2 - clips->x1); + cr->h = cpu_to_le16(clips->y2 - clips->y1); + } + + vmw_fifo_commit(dev_priv, sizeof(*cmd) + (num_clips - 1) * sizeof(cmd->cr)); + + return 0; +} + +static struct drm_framebuffer_funcs vmw_framebuffer_surface_funcs = { + .destroy = vmw_framebuffer_surface_destroy, + .dirty = vmw_framebuffer_surface_dirty, + .create_handle = vmw_framebuffer_create_handle, +}; + +int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv, + struct vmw_surface *surface, + struct vmw_framebuffer **out, + unsigned width, unsigned height) + +{ + struct drm_device *dev = dev_priv->dev; + struct vmw_framebuffer_surface *vfbs; + int ret; + + vfbs = kzalloc(sizeof(*vfbs), GFP_KERNEL); + if (!vfbs) { + ret = -ENOMEM; + goto out_err1; + } + + ret = drm_framebuffer_init(dev, &vfbs->base.base, + &vmw_framebuffer_surface_funcs); + if (ret) + goto out_err2; + + if (!vmw_surface_reference(surface)) { + DRM_ERROR("failed to reference surface %p\n", surface); + goto out_err3; + } + + /* XXX get the first 3 from the surface info */ + vfbs->base.base.bits_per_pixel = 32; + vfbs->base.base.pitch = width * 32 / 4; + vfbs->base.base.depth = 24; + vfbs->base.base.width = width; + vfbs->base.base.height = height; + vfbs->base.pin = NULL; + vfbs->base.unpin = NULL; + vfbs->surface = surface; + mutex_init(&vfbs->work_lock); + INIT_DELAYED_WORK(&vfbs->d_work, &vmw_framebuffer_present_fs_callback); + *out = &vfbs->base; + + return 0; + +out_err3: + drm_framebuffer_cleanup(&vfbs->base.base); +out_err2: + kfree(vfbs); +out_err1: + return ret; +} + +/* + * Dmabuf framebuffer code + */ + +#define vmw_framebuffer_to_vfbd(x) \ + container_of(x, struct vmw_framebuffer_dmabuf, base.base) + +struct vmw_framebuffer_dmabuf { + struct vmw_framebuffer base; + struct vmw_dma_buffer *buffer; +}; + +void vmw_framebuffer_dmabuf_destroy(struct drm_framebuffer *framebuffer) +{ + struct vmw_framebuffer_dmabuf *vfbd = + vmw_framebuffer_to_vfbd(framebuffer); + + drm_framebuffer_cleanup(framebuffer); + vmw_dmabuf_unreference(&vfbd->buffer); + + kfree(vfbd); +} + +int vmw_framebuffer_dmabuf_dirty(struct drm_framebuffer *framebuffer, + unsigned flags, unsigned color, + struct drm_clip_rect *clips, + unsigned num_clips) +{ + struct vmw_private *dev_priv = vmw_priv(framebuffer->dev); + struct drm_clip_rect norect; + struct { + uint32_t header; + SVGAFifoCmdUpdate body; + } *cmd; + int i, increment = 1; + + if (!num_clips) { + num_clips = 1; + clips = &norect; + norect.x1 = norect.y1 = 0; + norect.x2 = framebuffer->width; + norect.y2 = framebuffer->height; + } else if (flags & DRM_MODE_FB_DIRTY_ANNOTATE_COPY) { + num_clips /= 2; + increment = 2; + } + + cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd) * num_clips); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Fifo reserve failed.\n"); + return -ENOMEM; + } + + for (i = 0; i < num_clips; i++, clips += increment) { + cmd[i].header = cpu_to_le32(SVGA_CMD_UPDATE); + cmd[i].body.x = cpu_to_le32(clips->x1); + cmd[i].body.y = cpu_to_le32(clips->y1); + cmd[i].body.width = cpu_to_le32(clips->x2 - clips->x1); + cmd[i].body.height = cpu_to_le32(clips->y2 - clips->y1); + } + + vmw_fifo_commit(dev_priv, sizeof(*cmd) * num_clips); + + return 0; +} + +static struct drm_framebuffer_funcs vmw_framebuffer_dmabuf_funcs = { + .destroy = vmw_framebuffer_dmabuf_destroy, + .dirty = vmw_framebuffer_dmabuf_dirty, + .create_handle = vmw_framebuffer_create_handle, +}; + +static int vmw_framebuffer_dmabuf_pin(struct vmw_framebuffer *vfb) +{ + struct vmw_private *dev_priv = vmw_priv(vfb->base.dev); + struct vmw_framebuffer_dmabuf *vfbd = + vmw_framebuffer_to_vfbd(&vfb->base); + int ret; + + vmw_overlay_pause_all(dev_priv); + + ret = vmw_dmabuf_to_start_of_vram(dev_priv, vfbd->buffer); + + if (dev_priv->capabilities & SVGA_CAP_MULTIMON) { + vmw_write(dev_priv, SVGA_REG_NUM_GUEST_DISPLAYS, 1); + vmw_write(dev_priv, SVGA_REG_DISPLAY_ID, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_IS_PRIMARY, true); + vmw_write(dev_priv, SVGA_REG_DISPLAY_POSITION_X, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_POSITION_Y, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_WIDTH, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_HEIGHT, 0); + vmw_write(dev_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID); + + vmw_write(dev_priv, SVGA_REG_ENABLE, 1); + vmw_write(dev_priv, SVGA_REG_WIDTH, vfb->base.width); + vmw_write(dev_priv, SVGA_REG_HEIGHT, vfb->base.height); + vmw_write(dev_priv, SVGA_REG_BITS_PER_PIXEL, vfb->base.bits_per_pixel); + vmw_write(dev_priv, SVGA_REG_DEPTH, vfb->base.depth); + vmw_write(dev_priv, SVGA_REG_RED_MASK, 0x00ff0000); + vmw_write(dev_priv, SVGA_REG_GREEN_MASK, 0x0000ff00); + vmw_write(dev_priv, SVGA_REG_BLUE_MASK, 0x000000ff); + } else + WARN_ON(true); + + vmw_overlay_resume_all(dev_priv); + + return 0; +} + +static int vmw_framebuffer_dmabuf_unpin(struct vmw_framebuffer *vfb) +{ + struct vmw_private *dev_priv = vmw_priv(vfb->base.dev); + struct vmw_framebuffer_dmabuf *vfbd = + vmw_framebuffer_to_vfbd(&vfb->base); + + if (!vfbd->buffer) { + WARN_ON(!vfbd->buffer); + return 0; + } + + return vmw_dmabuf_from_vram(dev_priv, vfbd->buffer); +} + +int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv, + struct vmw_dma_buffer *dmabuf, + struct vmw_framebuffer **out, + unsigned width, unsigned height) + +{ + struct drm_device *dev = dev_priv->dev; + struct vmw_framebuffer_dmabuf *vfbd; + int ret; + + vfbd = kzalloc(sizeof(*vfbd), GFP_KERNEL); + if (!vfbd) { + ret = -ENOMEM; + goto out_err1; + } + + ret = drm_framebuffer_init(dev, &vfbd->base.base, + &vmw_framebuffer_dmabuf_funcs); + if (ret) + goto out_err2; + + if (!vmw_dmabuf_reference(dmabuf)) { + DRM_ERROR("failed to reference dmabuf %p\n", dmabuf); + goto out_err3; + } + + /* XXX get the first 3 from the surface info */ + vfbd->base.base.bits_per_pixel = 32; + vfbd->base.base.pitch = width * 32 / 4; + vfbd->base.base.depth = 24; + vfbd->base.base.width = width; + vfbd->base.base.height = height; + vfbd->base.pin = vmw_framebuffer_dmabuf_pin; + vfbd->base.unpin = vmw_framebuffer_dmabuf_unpin; + vfbd->buffer = dmabuf; + *out = &vfbd->base; + + return 0; + +out_err3: + drm_framebuffer_cleanup(&vfbd->base.base); +out_err2: + kfree(vfbd); +out_err1: + return ret; +} + +/* + * Generic Kernel modesetting functions + */ + +static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev, + struct drm_file *file_priv, + struct drm_mode_fb_cmd *mode_cmd) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + struct vmw_framebuffer *vfb = NULL; + struct vmw_surface *surface = NULL; + struct vmw_dma_buffer *bo = NULL; + int ret; + + ret = vmw_user_surface_lookup_handle(dev_priv, tfile, + mode_cmd->handle, &surface); + if (ret) + goto try_dmabuf; + + if (!surface->scanout) + goto err_not_scanout; + + ret = vmw_kms_new_framebuffer_surface(dev_priv, surface, &vfb, + mode_cmd->width, mode_cmd->height); + + /* vmw_user_surface_lookup takes one ref so does new_fb */ + vmw_surface_unreference(&surface); + + if (ret) { + DRM_ERROR("failed to create vmw_framebuffer: %i\n", ret); + return NULL; + } + return &vfb->base; + +try_dmabuf: + DRM_INFO("%s: trying buffer\n", __func__); + + ret = vmw_user_dmabuf_lookup(tfile, mode_cmd->handle, &bo); + if (ret) { + DRM_ERROR("failed to find buffer: %i\n", ret); + return NULL; + } + + ret = vmw_kms_new_framebuffer_dmabuf(dev_priv, bo, &vfb, + mode_cmd->width, mode_cmd->height); + + /* vmw_user_dmabuf_lookup takes one ref so does new_fb */ + vmw_dmabuf_unreference(&bo); + + if (ret) { + DRM_ERROR("failed to create vmw_framebuffer: %i\n", ret); + return NULL; + } + + return &vfb->base; + +err_not_scanout: + DRM_ERROR("surface not marked as scanout\n"); + /* vmw_user_surface_lookup takes one ref */ + vmw_surface_unreference(&surface); + + return NULL; +} + +static int vmw_kms_fb_changed(struct drm_device *dev) +{ + return 0; +} + +static struct drm_mode_config_funcs vmw_kms_funcs = { + .fb_create = vmw_kms_fb_create, + .fb_changed = vmw_kms_fb_changed, +}; + +int vmw_kms_init(struct vmw_private *dev_priv) +{ + struct drm_device *dev = dev_priv->dev; + int ret; + + drm_mode_config_init(dev); + dev->mode_config.funcs = &vmw_kms_funcs; + dev->mode_config.min_width = 1; + dev->mode_config.min_height = 1; + dev->mode_config.max_width = dev_priv->fb_max_width; + dev->mode_config.max_height = dev_priv->fb_max_height; + + ret = vmw_kms_init_legacy_display_system(dev_priv); + + return 0; +} + +int vmw_kms_close(struct vmw_private *dev_priv) +{ + /* + * Docs says we should take the lock before calling this function + * but since it destroys encoders and our destructor calls + * drm_encoder_cleanup which takes the lock we deadlock. + */ + drm_mode_config_cleanup(dev_priv->dev); + vmw_kms_close_legacy_display_system(dev_priv); + return 0; +} + +int vmw_kms_cursor_bypass_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_vmw_cursor_bypass_arg *arg = data; + struct vmw_display_unit *du; + struct drm_mode_object *obj; + struct drm_crtc *crtc; + int ret = 0; + + + mutex_lock(&dev->mode_config.mutex); + if (arg->flags & DRM_VMW_CURSOR_BYPASS_ALL) { + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + du = vmw_crtc_to_du(crtc); + du->hotspot_x = arg->xhot; + du->hotspot_y = arg->yhot; + } + + mutex_unlock(&dev->mode_config.mutex); + return 0; + } + + obj = drm_mode_object_find(dev, arg->crtc_id, DRM_MODE_OBJECT_CRTC); + if (!obj) { + ret = -EINVAL; + goto out; + } + + crtc = obj_to_crtc(obj); + du = vmw_crtc_to_du(crtc); + + du->hotspot_x = arg->xhot; + du->hotspot_y = arg->yhot; + +out: + mutex_unlock(&dev->mode_config.mutex); + + return ret; +} + +int vmw_kms_save_vga(struct vmw_private *vmw_priv) +{ + /* + * setup a single multimon monitor with the size + * of 0x0, this stops the UI from resizing when we + * change the framebuffer size + */ + if (vmw_priv->capabilities & SVGA_CAP_MULTIMON) { + vmw_write(vmw_priv, SVGA_REG_NUM_GUEST_DISPLAYS, 1); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_IS_PRIMARY, true); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_X, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID); + } + + vmw_priv->vga_width = vmw_read(vmw_priv, SVGA_REG_WIDTH); + vmw_priv->vga_height = vmw_read(vmw_priv, SVGA_REG_HEIGHT); + vmw_priv->vga_bpp = vmw_read(vmw_priv, SVGA_REG_BITS_PER_PIXEL); + vmw_priv->vga_depth = vmw_read(vmw_priv, SVGA_REG_DEPTH); + vmw_priv->vga_pseudo = vmw_read(vmw_priv, SVGA_REG_PSEUDOCOLOR); + vmw_priv->vga_red_mask = vmw_read(vmw_priv, SVGA_REG_RED_MASK); + vmw_priv->vga_green_mask = vmw_read(vmw_priv, SVGA_REG_GREEN_MASK); + vmw_priv->vga_blue_mask = vmw_read(vmw_priv, SVGA_REG_BLUE_MASK); + + return 0; +} + +int vmw_kms_restore_vga(struct vmw_private *vmw_priv) +{ + vmw_write(vmw_priv, SVGA_REG_WIDTH, vmw_priv->vga_width); + vmw_write(vmw_priv, SVGA_REG_HEIGHT, vmw_priv->vga_height); + vmw_write(vmw_priv, SVGA_REG_BITS_PER_PIXEL, vmw_priv->vga_bpp); + vmw_write(vmw_priv, SVGA_REG_DEPTH, vmw_priv->vga_depth); + vmw_write(vmw_priv, SVGA_REG_PSEUDOCOLOR, vmw_priv->vga_pseudo); + vmw_write(vmw_priv, SVGA_REG_RED_MASK, vmw_priv->vga_red_mask); + vmw_write(vmw_priv, SVGA_REG_GREEN_MASK, vmw_priv->vga_green_mask); + vmw_write(vmw_priv, SVGA_REG_BLUE_MASK, vmw_priv->vga_blue_mask); + + /* TODO check for multimon */ + vmw_write(vmw_priv, SVGA_REG_NUM_GUEST_DISPLAYS, 0); + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -0,0 +1,1187 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_drv.h" +#include "vmwgfx_drm.h" +#include "ttm/ttm_object.h" +#include "ttm/ttm_placement.h" +#include "drmP.h" + +#define VMW_RES_CONTEXT ttm_driver_type0 +#define VMW_RES_SURFACE ttm_driver_type1 +#define VMW_RES_STREAM ttm_driver_type2 + +struct vmw_user_context { + struct ttm_base_object base; + struct vmw_resource res; +}; + +struct vmw_user_surface { + struct ttm_base_object base; + struct vmw_surface srf; +}; + +struct vmw_user_dma_buffer { + struct ttm_base_object base; + struct vmw_dma_buffer dma; +}; + +struct vmw_bo_user_rep { + uint32_t handle; + uint64_t map_handle; +}; + +struct vmw_stream { + struct vmw_resource res; + uint32_t stream_id; +}; + +struct vmw_user_stream { + struct ttm_base_object base; + struct vmw_stream stream; +}; + +static inline struct vmw_dma_buffer * +vmw_dma_buffer(struct ttm_buffer_object *bo) +{ + return container_of(bo, struct vmw_dma_buffer, base); +} + +static inline struct vmw_user_dma_buffer * +vmw_user_dma_buffer(struct ttm_buffer_object *bo) +{ + struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); + return container_of(vmw_bo, struct vmw_user_dma_buffer, dma); +} + +struct vmw_resource *vmw_resource_reference(struct vmw_resource *res) +{ + kref_get(&res->kref); + return res; +} + +static void vmw_resource_release(struct kref *kref) +{ + struct vmw_resource *res = + container_of(kref, struct vmw_resource, kref); + struct vmw_private *dev_priv = res->dev_priv; + + idr_remove(res->idr, res->id); + write_unlock(&dev_priv->resource_lock); + + if (likely(res->hw_destroy != NULL)) + res->hw_destroy(res); + + if (res->res_free != NULL) + res->res_free(res); + else + kfree(res); + + write_lock(&dev_priv->resource_lock); +} + +void vmw_resource_unreference(struct vmw_resource **p_res) +{ + struct vmw_resource *res = *p_res; + struct vmw_private *dev_priv = res->dev_priv; + + *p_res = NULL; + write_lock(&dev_priv->resource_lock); + kref_put(&res->kref, vmw_resource_release); + write_unlock(&dev_priv->resource_lock); +} + +static int vmw_resource_init(struct vmw_private *dev_priv, + struct vmw_resource *res, + struct idr *idr, + enum ttm_object_type obj_type, + void (*res_free) (struct vmw_resource *res)) +{ + int ret; + + kref_init(&res->kref); + res->hw_destroy = NULL; + res->res_free = res_free; + res->res_type = obj_type; + res->idr = idr; + res->avail = false; + res->dev_priv = dev_priv; + + do { + if (unlikely(idr_pre_get(idr, GFP_KERNEL) == 0)) + return -ENOMEM; + + write_lock(&dev_priv->resource_lock); + ret = idr_get_new_above(idr, res, 1, &res->id); + write_unlock(&dev_priv->resource_lock); + + } while (ret == -EAGAIN); + + return ret; +} + +/** + * vmw_resource_activate + * + * @res: Pointer to the newly created resource + * @hw_destroy: Destroy function. NULL if none. + * + * Activate a resource after the hardware has been made aware of it. + * Set tye destroy function to @destroy. Typically this frees the + * resource and destroys the hardware resources associated with it. + * Activate basically means that the function vmw_resource_lookup will + * find it. + */ + +static void vmw_resource_activate(struct vmw_resource *res, + void (*hw_destroy) (struct vmw_resource *)) +{ + struct vmw_private *dev_priv = res->dev_priv; + + write_lock(&dev_priv->resource_lock); + res->avail = true; + res->hw_destroy = hw_destroy; + write_unlock(&dev_priv->resource_lock); +} + +struct vmw_resource *vmw_resource_lookup(struct vmw_private *dev_priv, + struct idr *idr, int id) +{ + struct vmw_resource *res; + + read_lock(&dev_priv->resource_lock); + res = idr_find(idr, id); + if (res && res->avail) + kref_get(&res->kref); + else + res = NULL; + read_unlock(&dev_priv->resource_lock); + + if (unlikely(res == NULL)) + return NULL; + + return res; +} + +/** + * Context management: + */ + +static void vmw_hw_context_destroy(struct vmw_resource *res) +{ + + struct vmw_private *dev_priv = res->dev_priv; + struct { + SVGA3dCmdHeader header; + SVGA3dCmdDestroyContext body; + } *cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); + + if (unlikely(cmd == NULL)) { + DRM_ERROR("Failed reserving FIFO space for surface " + "destruction.\n"); + return; + } + + cmd->header.id = cpu_to_le32(SVGA_3D_CMD_CONTEXT_DESTROY); + cmd->header.size = cpu_to_le32(sizeof(cmd->body)); + cmd->body.cid = cpu_to_le32(res->id); + + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +} + +static int vmw_context_init(struct vmw_private *dev_priv, + struct vmw_resource *res, + void (*res_free) (struct vmw_resource *res)) +{ + int ret; + + struct { + SVGA3dCmdHeader header; + SVGA3dCmdDefineContext body; + } *cmd; + + ret = vmw_resource_init(dev_priv, res, &dev_priv->context_idr, + VMW_RES_CONTEXT, res_free); + + if (unlikely(ret != 0)) { + if (res_free == NULL) + kfree(res); + else + res_free(res); + return ret; + } + + cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Fifo reserve failed.\n"); + vmw_resource_unreference(&res); + return -ENOMEM; + } + + cmd->header.id = cpu_to_le32(SVGA_3D_CMD_CONTEXT_DEFINE); + cmd->header.size = cpu_to_le32(sizeof(cmd->body)); + cmd->body.cid = cpu_to_le32(res->id); + + vmw_fifo_commit(dev_priv, sizeof(*cmd)); + vmw_resource_activate(res, vmw_hw_context_destroy); + return 0; +} + +struct vmw_resource *vmw_context_alloc(struct vmw_private *dev_priv) +{ + struct vmw_resource *res = kmalloc(sizeof(*res), GFP_KERNEL); + int ret; + + if (unlikely(res == NULL)) + return NULL; + + ret = vmw_context_init(dev_priv, res, NULL); + return (ret == 0) ? res : NULL; +} + +/** + * User-space context management: + */ + +static void vmw_user_context_free(struct vmw_resource *res) +{ + struct vmw_user_context *ctx = + container_of(res, struct vmw_user_context, res); + + kfree(ctx); +} + +/** + * This function is called when user space has no more references on the + * base object. It releases the base-object's reference on the resource object. + */ + +static void vmw_user_context_base_release(struct ttm_base_object **p_base) +{ + struct ttm_base_object *base = *p_base; + struct vmw_user_context *ctx = + container_of(base, struct vmw_user_context, base); + struct vmw_resource *res = &ctx->res; + + *p_base = NULL; + vmw_resource_unreference(&res); +} + +int vmw_context_destroy_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_resource *res; + struct vmw_user_context *ctx; + struct drm_vmw_context_arg *arg = (struct drm_vmw_context_arg *)data; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + int ret = 0; + + res = vmw_resource_lookup(dev_priv, &dev_priv->context_idr, arg->cid); + if (unlikely(res == NULL)) + return -EINVAL; + + if (res->res_free != &vmw_user_context_free) { + ret = -EINVAL; + goto out; + } + + ctx = container_of(res, struct vmw_user_context, res); + if (ctx->base.tfile != tfile && !ctx->base.shareable) { + ret = -EPERM; + goto out; + } + + ttm_ref_object_base_unref(tfile, ctx->base.hash.key, TTM_REF_USAGE); +out: + vmw_resource_unreference(&res); + return ret; +} + +int vmw_context_define_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_user_context *ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); + struct vmw_resource *res; + struct vmw_resource *tmp; + struct drm_vmw_context_arg *arg = (struct drm_vmw_context_arg *)data; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + int ret; + + if (unlikely(ctx == NULL)) + return -ENOMEM; + + res = &ctx->res; + ctx->base.shareable = false; + ctx->base.tfile = NULL; + + ret = vmw_context_init(dev_priv, res, vmw_user_context_free); + if (unlikely(ret != 0)) + return ret; + + tmp = vmw_resource_reference(&ctx->res); + ret = ttm_base_object_init(tfile, &ctx->base, false, VMW_RES_CONTEXT, + &vmw_user_context_base_release, NULL); + + if (unlikely(ret != 0)) { + vmw_resource_unreference(&tmp); + goto out_err; + } + + arg->cid = res->id; +out_err: + vmw_resource_unreference(&res); + return ret; + +} + +int vmw_context_check(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + int id) +{ + struct vmw_resource *res; + int ret = 0; + + read_lock(&dev_priv->resource_lock); + res = idr_find(&dev_priv->context_idr, id); + if (res && res->avail) { + struct vmw_user_context *ctx = + container_of(res, struct vmw_user_context, res); + if (ctx->base.tfile != tfile && !ctx->base.shareable) + ret = -EPERM; + } else + ret = -EINVAL; + read_unlock(&dev_priv->resource_lock); + + return ret; +} + + +/** + * Surface management. + */ + +static void vmw_hw_surface_destroy(struct vmw_resource *res) +{ + + struct vmw_private *dev_priv = res->dev_priv; + struct { + SVGA3dCmdHeader header; + SVGA3dCmdDestroySurface body; + } *cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); + + if (unlikely(cmd == NULL)) { + DRM_ERROR("Failed reserving FIFO space for surface " + "destruction.\n"); + return; + } + + cmd->header.id = cpu_to_le32(SVGA_3D_CMD_SURFACE_DESTROY); + cmd->header.size = cpu_to_le32(sizeof(cmd->body)); + cmd->body.sid = cpu_to_le32(res->id); + + vmw_fifo_commit(dev_priv, sizeof(*cmd)); +} + +void vmw_surface_res_free(struct vmw_resource *res) +{ + struct vmw_surface *srf = container_of(res, struct vmw_surface, res); + + kfree(srf->sizes); + kfree(srf->snooper.image); + kfree(srf); +} + +int vmw_surface_init(struct vmw_private *dev_priv, + struct vmw_surface *srf, + void (*res_free) (struct vmw_resource *res)) +{ + int ret; + struct { + SVGA3dCmdHeader header; + SVGA3dCmdDefineSurface body; + } *cmd; + SVGA3dSize *cmd_size; + struct vmw_resource *res = &srf->res; + struct drm_vmw_size *src_size; + size_t submit_size; + uint32_t cmd_len; + int i; + + BUG_ON(res_free == NULL); + ret = vmw_resource_init(dev_priv, res, &dev_priv->surface_idr, + VMW_RES_SURFACE, res_free); + + if (unlikely(ret != 0)) { + res_free(res); + return ret; + } + + submit_size = sizeof(*cmd) + srf->num_sizes * sizeof(SVGA3dSize); + cmd_len = sizeof(cmd->body) + srf->num_sizes * sizeof(SVGA3dSize); + + cmd = vmw_fifo_reserve(dev_priv, submit_size); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Fifo reserve failed for create surface.\n"); + vmw_resource_unreference(&res); + return -ENOMEM; + } + + cmd->header.id = cpu_to_le32(SVGA_3D_CMD_SURFACE_DEFINE); + cmd->header.size = cpu_to_le32(cmd_len); + cmd->body.sid = cpu_to_le32(res->id); + cmd->body.surfaceFlags = cpu_to_le32(srf->flags); + cmd->body.format = cpu_to_le32(srf->format); + for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i) { + cmd->body.face[i].numMipLevels = + cpu_to_le32(srf->mip_levels[i]); + } + + cmd += 1; + cmd_size = (SVGA3dSize *) cmd; + src_size = srf->sizes; + + for (i = 0; i < srf->num_sizes; ++i, cmd_size++, src_size++) { + cmd_size->width = cpu_to_le32(src_size->width); + cmd_size->height = cpu_to_le32(src_size->height); + cmd_size->depth = cpu_to_le32(src_size->depth); + } + + vmw_fifo_commit(dev_priv, submit_size); + vmw_resource_activate(res, vmw_hw_surface_destroy); + return 0; +} + +static void vmw_user_surface_free(struct vmw_resource *res) +{ + struct vmw_surface *srf = container_of(res, struct vmw_surface, res); + struct vmw_user_surface *user_srf = + container_of(srf, struct vmw_user_surface, srf); + + kfree(srf->sizes); + kfree(srf->snooper.image); + kfree(user_srf); +} + +int vmw_user_surface_lookup_handle(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + uint32_t handle, struct vmw_surface **out) +{ + struct vmw_resource *res; + struct vmw_surface *srf; + struct vmw_user_surface *user_srf; + struct ttm_base_object *base; + int ret = -EINVAL; + + base = ttm_base_object_lookup(tfile, handle); + if (unlikely(base == NULL)) + return -EINVAL; + + if (unlikely(base->object_type != VMW_RES_SURFACE)) + goto out_bad_resource; + + user_srf = container_of(base, struct vmw_user_surface, base); + srf = &user_srf->srf; + res = &srf->res; + + read_lock(&dev_priv->resource_lock); + + if (!res->avail || res->res_free != &vmw_user_surface_free) { + read_unlock(&dev_priv->resource_lock); + goto out_bad_resource; + } + + kref_get(&res->kref); + read_unlock(&dev_priv->resource_lock); + + *out = srf; + ret = 0; + +out_bad_resource: + ttm_base_object_unref(&base); + + return ret; +} + +static void vmw_user_surface_base_release(struct ttm_base_object **p_base) +{ + struct ttm_base_object *base = *p_base; + struct vmw_user_surface *user_srf = + container_of(base, struct vmw_user_surface, base); + struct vmw_resource *res = &user_srf->srf.res; + + *p_base = NULL; + vmw_resource_unreference(&res); +} + +int vmw_surface_destroy_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_vmw_surface_arg *arg = (struct drm_vmw_surface_arg *)data; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + + return ttm_ref_object_base_unref(tfile, arg->sid, TTM_REF_USAGE); +} + +int vmw_surface_define_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_user_surface *user_srf = + kmalloc(sizeof(*user_srf), GFP_KERNEL); + struct vmw_surface *srf; + struct vmw_resource *res; + struct vmw_resource *tmp; + union drm_vmw_surface_create_arg *arg = + (union drm_vmw_surface_create_arg *)data; + struct drm_vmw_surface_create_req *req = &arg->req; + struct drm_vmw_surface_arg *rep = &arg->rep; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + struct drm_vmw_size __user *user_sizes; + int ret; + int i; + + if (unlikely(user_srf == NULL)) + return -ENOMEM; + + srf = &user_srf->srf; + res = &srf->res; + + srf->flags = req->flags; + srf->format = req->format; + srf->scanout = req->scanout; + memcpy(srf->mip_levels, req->mip_levels, sizeof(srf->mip_levels)); + srf->num_sizes = 0; + for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i) + srf->num_sizes += srf->mip_levels[i]; + + if (srf->num_sizes > DRM_VMW_MAX_SURFACE_FACES * + DRM_VMW_MAX_MIP_LEVELS) { + ret = -EINVAL; + goto out_err0; + } + + srf->sizes = kmalloc(srf->num_sizes * sizeof(*srf->sizes), GFP_KERNEL); + if (unlikely(srf->sizes == NULL)) { + ret = -ENOMEM; + goto out_err0; + } + + user_sizes = (struct drm_vmw_size __user *)(unsigned long) + req->size_addr; + + ret = copy_from_user(srf->sizes, user_sizes, + srf->num_sizes * sizeof(*srf->sizes)); + if (unlikely(ret != 0)) + goto out_err1; + + if (srf->scanout && + srf->num_sizes == 1 && + srf->sizes[0].width == 64 && + srf->sizes[0].height == 64 && + srf->format == SVGA3D_A8R8G8B8) { + + srf->snooper.image = kmalloc(64 * 64 * 4, GFP_KERNEL); + /* clear the image */ + if (srf->snooper.image) { + memset(srf->snooper.image, 0x00, 64 * 64 * 4); + } else { + DRM_ERROR("Failed to allocate cursor_image\n"); + ret = -ENOMEM; + goto out_err1; + } + } else { + srf->snooper.image = NULL; + } + srf->snooper.crtc = NULL; + + user_srf->base.shareable = false; + user_srf->base.tfile = NULL; + + /** + * From this point, the generic resource management functions + * destroy the object on failure. + */ + + ret = vmw_surface_init(dev_priv, srf, vmw_user_surface_free); + if (unlikely(ret != 0)) + return ret; + + tmp = vmw_resource_reference(&srf->res); + ret = ttm_base_object_init(tfile, &user_srf->base, + req->shareable, VMW_RES_SURFACE, + &vmw_user_surface_base_release, NULL); + + if (unlikely(ret != 0)) { + vmw_resource_unreference(&tmp); + vmw_resource_unreference(&res); + return ret; + } + + rep->sid = user_srf->base.hash.key; + if (rep->sid == SVGA3D_INVALID_ID) + DRM_ERROR("Created bad Surface ID.\n"); + + vmw_resource_unreference(&res); + return 0; +out_err1: + kfree(srf->sizes); +out_err0: + kfree(user_srf); + return ret; +} + +int vmw_surface_reference_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + union drm_vmw_surface_reference_arg *arg = + (union drm_vmw_surface_reference_arg *)data; + struct drm_vmw_surface_arg *req = &arg->req; + struct drm_vmw_surface_create_req *rep = &arg->rep; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + struct vmw_surface *srf; + struct vmw_user_surface *user_srf; + struct drm_vmw_size __user *user_sizes; + struct ttm_base_object *base; + int ret = -EINVAL; + + base = ttm_base_object_lookup(tfile, req->sid); + if (unlikely(base == NULL)) { + DRM_ERROR("Could not find surface to reference.\n"); + return -EINVAL; + } + + if (unlikely(base->object_type != VMW_RES_SURFACE)) + goto out_bad_resource; + + user_srf = container_of(base, struct vmw_user_surface, base); + srf = &user_srf->srf; + + ret = ttm_ref_object_add(tfile, &user_srf->base, TTM_REF_USAGE, NULL); + if (unlikely(ret != 0)) { + DRM_ERROR("Could not add a reference to a surface.\n"); + goto out_no_reference; + } + + rep->flags = srf->flags; + rep->format = srf->format; + memcpy(rep->mip_levels, srf->mip_levels, sizeof(srf->mip_levels)); + user_sizes = (struct drm_vmw_size __user *)(unsigned long) + rep->size_addr; + + if (user_sizes) + ret = copy_to_user(user_sizes, srf->sizes, + srf->num_sizes * sizeof(*srf->sizes)); + if (unlikely(ret != 0)) + DRM_ERROR("copy_to_user failed %p %u\n", + user_sizes, srf->num_sizes); +out_bad_resource: +out_no_reference: + ttm_base_object_unref(&base); + + return ret; +} + +int vmw_surface_check(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + uint32_t handle, int *id) +{ + struct ttm_base_object *base; + struct vmw_user_surface *user_srf; + + int ret = -EPERM; + + base = ttm_base_object_lookup(tfile, handle); + if (unlikely(base == NULL)) + return -EINVAL; + + if (unlikely(base->object_type != VMW_RES_SURFACE)) + goto out_bad_surface; + + user_srf = container_of(base, struct vmw_user_surface, base); + *id = user_srf->srf.res.id; + ret = 0; + +out_bad_surface: + /** + * FIXME: May deadlock here when called from the + * command parsing code. + */ + + ttm_base_object_unref(&base); + return ret; +} + +/** + * Buffer management. + */ + +static size_t vmw_dmabuf_acc_size(struct ttm_bo_global *glob, + unsigned long num_pages) +{ + static size_t bo_user_size = ~0; + + size_t page_array_size = + (num_pages * sizeof(void *) + PAGE_SIZE - 1) & PAGE_MASK; + + if (unlikely(bo_user_size == ~0)) { + bo_user_size = glob->ttm_bo_extra_size + + ttm_round_pot(sizeof(struct vmw_dma_buffer)); + } + + return bo_user_size + page_array_size; +} + +void vmw_dmabuf_gmr_unbind(struct ttm_buffer_object *bo) +{ + struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); + struct ttm_bo_global *glob = bo->glob; + struct vmw_private *dev_priv = + container_of(bo->bdev, struct vmw_private, bdev); + + if (vmw_bo->gmr_bound) { + vmw_gmr_unbind(dev_priv, vmw_bo->gmr_id); + spin_lock(&glob->lru_lock); + ida_remove(&dev_priv->gmr_ida, vmw_bo->gmr_id); + spin_unlock(&glob->lru_lock); + vmw_bo->gmr_bound = false; + } +} + +void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo) +{ + struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); + struct ttm_bo_global *glob = bo->glob; + + vmw_dmabuf_gmr_unbind(bo); + ttm_mem_global_free(glob->mem_glob, bo->acc_size); + kfree(vmw_bo); +} + +int vmw_dmabuf_init(struct vmw_private *dev_priv, + struct vmw_dma_buffer *vmw_bo, + size_t size, struct ttm_placement *placement, + bool interruptible, + void (*bo_free) (struct ttm_buffer_object *bo)) +{ + struct ttm_bo_device *bdev = &dev_priv->bdev; + struct ttm_mem_global *mem_glob = bdev->glob->mem_glob; + size_t acc_size; + int ret; + + BUG_ON(!bo_free); + + acc_size = + vmw_dmabuf_acc_size(bdev->glob, + (size + PAGE_SIZE - 1) >> PAGE_SHIFT); + + ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false); + if (unlikely(ret != 0)) { + /* we must free the bo here as + * ttm_buffer_object_init does so as well */ + bo_free(&vmw_bo->base); + return ret; + } + + memset(vmw_bo, 0, sizeof(*vmw_bo)); + + INIT_LIST_HEAD(&vmw_bo->gmr_lru); + INIT_LIST_HEAD(&vmw_bo->validate_list); + vmw_bo->gmr_id = 0; + vmw_bo->gmr_bound = false; + + ret = ttm_bo_init(bdev, &vmw_bo->base, size, + ttm_bo_type_device, placement, + 0, 0, interruptible, + NULL, acc_size, bo_free); + return ret; +} + +static void vmw_user_dmabuf_destroy(struct ttm_buffer_object *bo) +{ + struct vmw_user_dma_buffer *vmw_user_bo = vmw_user_dma_buffer(bo); + struct ttm_bo_global *glob = bo->glob; + + vmw_dmabuf_gmr_unbind(bo); + ttm_mem_global_free(glob->mem_glob, bo->acc_size); + kfree(vmw_user_bo); +} + +static void vmw_user_dmabuf_release(struct ttm_base_object **p_base) +{ + struct vmw_user_dma_buffer *vmw_user_bo; + struct ttm_base_object *base = *p_base; + struct ttm_buffer_object *bo; + + *p_base = NULL; + + if (unlikely(base == NULL)) + return; + + vmw_user_bo = container_of(base, struct vmw_user_dma_buffer, base); + bo = &vmw_user_bo->dma.base; + ttm_bo_unref(&bo); +} + +int vmw_dmabuf_alloc_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + union drm_vmw_alloc_dmabuf_arg *arg = + (union drm_vmw_alloc_dmabuf_arg *)data; + struct drm_vmw_alloc_dmabuf_req *req = &arg->req; + struct drm_vmw_dmabuf_rep *rep = &arg->rep; + struct vmw_user_dma_buffer *vmw_user_bo; + struct ttm_buffer_object *tmp; + struct vmw_master *vmaster = vmw_master(file_priv->master); + int ret; + + vmw_user_bo = kzalloc(sizeof(*vmw_user_bo), GFP_KERNEL); + if (unlikely(vmw_user_bo == NULL)) + return -ENOMEM; + + ret = ttm_read_lock(&vmaster->lock, true); + if (unlikely(ret != 0)) { + kfree(vmw_user_bo); + return ret; + } + + ret = vmw_dmabuf_init(dev_priv, &vmw_user_bo->dma, req->size, + &vmw_vram_sys_placement, true, + &vmw_user_dmabuf_destroy); + if (unlikely(ret != 0)) + return ret; + + tmp = ttm_bo_reference(&vmw_user_bo->dma.base); + ret = ttm_base_object_init(vmw_fpriv(file_priv)->tfile, + &vmw_user_bo->base, + false, + ttm_buffer_type, + &vmw_user_dmabuf_release, NULL); + if (unlikely(ret != 0)) { + ttm_bo_unref(&tmp); + } else { + rep->handle = vmw_user_bo->base.hash.key; + rep->map_handle = vmw_user_bo->dma.base.addr_space_offset; + rep->cur_gmr_id = vmw_user_bo->base.hash.key; + rep->cur_gmr_offset = 0; + } + ttm_bo_unref(&tmp); + + ttm_read_unlock(&vmaster->lock); + + return 0; +} + +int vmw_dmabuf_unref_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_vmw_unref_dmabuf_arg *arg = + (struct drm_vmw_unref_dmabuf_arg *)data; + + return ttm_ref_object_base_unref(vmw_fpriv(file_priv)->tfile, + arg->handle, + TTM_REF_USAGE); +} + +uint32_t vmw_dmabuf_validate_node(struct ttm_buffer_object *bo, + uint32_t cur_validate_node) +{ + struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); + + if (likely(vmw_bo->on_validate_list)) + return vmw_bo->cur_validate_node; + + vmw_bo->cur_validate_node = cur_validate_node; + vmw_bo->on_validate_list = true; + + return cur_validate_node; +} + +void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo) +{ + struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); + + vmw_bo->on_validate_list = false; +} + +uint32_t vmw_dmabuf_gmr(struct ttm_buffer_object *bo) +{ + struct vmw_dma_buffer *vmw_bo; + + if (bo->mem.mem_type == TTM_PL_VRAM) + return SVGA_GMR_FRAMEBUFFER; + + vmw_bo = vmw_dma_buffer(bo); + + return (vmw_bo->gmr_bound) ? vmw_bo->gmr_id : SVGA_GMR_NULL; +} + +void vmw_dmabuf_set_gmr(struct ttm_buffer_object *bo, uint32_t id) +{ + struct vmw_dma_buffer *vmw_bo = vmw_dma_buffer(bo); + vmw_bo->gmr_bound = true; + vmw_bo->gmr_id = id; +} + +int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, + uint32_t handle, struct vmw_dma_buffer **out) +{ + struct vmw_user_dma_buffer *vmw_user_bo; + struct ttm_base_object *base; + + base = ttm_base_object_lookup(tfile, handle); + if (unlikely(base == NULL)) { + printk(KERN_ERR "Invalid buffer object handle 0x%08lx.\n", + (unsigned long)handle); + return -ESRCH; + } + + if (unlikely(base->object_type != ttm_buffer_type)) { + ttm_base_object_unref(&base); + printk(KERN_ERR "Invalid buffer object handle 0x%08lx.\n", + (unsigned long)handle); + return -EINVAL; + } + + vmw_user_bo = container_of(base, struct vmw_user_dma_buffer, base); + (void)ttm_bo_reference(&vmw_user_bo->dma.base); + ttm_base_object_unref(&base); + *out = &vmw_user_bo->dma; + + return 0; +} + +/** + * TODO: Implement a gmr id eviction mechanism. Currently we just fail + * when we're out of ids, causing GMR space to be allocated + * out of VRAM. + */ + +int vmw_gmr_id_alloc(struct vmw_private *dev_priv, uint32_t *p_id) +{ + struct ttm_bo_global *glob = dev_priv->bdev.glob; + int id; + int ret; + + do { + if (unlikely(ida_pre_get(&dev_priv->gmr_ida, GFP_KERNEL) == 0)) + return -ENOMEM; + + spin_lock(&glob->lru_lock); + ret = ida_get_new(&dev_priv->gmr_ida, &id); + spin_unlock(&glob->lru_lock); + } while (ret == -EAGAIN); + + if (unlikely(ret != 0)) + return ret; + + if (unlikely(id >= dev_priv->max_gmr_ids)) { + spin_lock(&glob->lru_lock); + ida_remove(&dev_priv->gmr_ida, id); + spin_unlock(&glob->lru_lock); + return -EBUSY; + } + + *p_id = (uint32_t) id; + return 0; +} + +/* + * Stream managment + */ + +static void vmw_stream_destroy(struct vmw_resource *res) +{ + struct vmw_private *dev_priv = res->dev_priv; + struct vmw_stream *stream; + int ret; + + DRM_INFO("%s: unref\n", __func__); + stream = container_of(res, struct vmw_stream, res); + + ret = vmw_overlay_unref(dev_priv, stream->stream_id); + WARN_ON(ret != 0); +} + +static int vmw_stream_init(struct vmw_private *dev_priv, + struct vmw_stream *stream, + void (*res_free) (struct vmw_resource *res)) +{ + struct vmw_resource *res = &stream->res; + int ret; + + ret = vmw_resource_init(dev_priv, res, &dev_priv->stream_idr, + VMW_RES_STREAM, res_free); + + if (unlikely(ret != 0)) { + if (res_free == NULL) + kfree(stream); + else + res_free(&stream->res); + return ret; + } + + ret = vmw_overlay_claim(dev_priv, &stream->stream_id); + if (ret) { + vmw_resource_unreference(&res); + return ret; + } + + DRM_INFO("%s: claimed\n", __func__); + + vmw_resource_activate(&stream->res, vmw_stream_destroy); + return 0; +} + +/** + * User-space context management: + */ + +static void vmw_user_stream_free(struct vmw_resource *res) +{ + struct vmw_user_stream *stream = + container_of(res, struct vmw_user_stream, stream.res); + + kfree(stream); +} + +/** + * This function is called when user space has no more references on the + * base object. It releases the base-object's reference on the resource object. + */ + +static void vmw_user_stream_base_release(struct ttm_base_object **p_base) +{ + struct ttm_base_object *base = *p_base; + struct vmw_user_stream *stream = + container_of(base, struct vmw_user_stream, base); + struct vmw_resource *res = &stream->stream.res; + + *p_base = NULL; + vmw_resource_unreference(&res); +} + +int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_resource *res; + struct vmw_user_stream *stream; + struct drm_vmw_stream_arg *arg = (struct drm_vmw_stream_arg *)data; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + int ret = 0; + + res = vmw_resource_lookup(dev_priv, &dev_priv->stream_idr, arg->stream_id); + if (unlikely(res == NULL)) + return -EINVAL; + + if (res->res_free != &vmw_user_stream_free) { + ret = -EINVAL; + goto out; + } + + stream = container_of(res, struct vmw_user_stream, stream.res); + if (stream->base.tfile != tfile) { + ret = -EINVAL; + goto out; + } + + ttm_ref_object_base_unref(tfile, stream->base.hash.key, TTM_REF_USAGE); +out: + vmw_resource_unreference(&res); + return ret; +} + +int vmw_stream_claim_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_user_stream *stream = kmalloc(sizeof(*stream), GFP_KERNEL); + struct vmw_resource *res; + struct vmw_resource *tmp; + struct drm_vmw_stream_arg *arg = (struct drm_vmw_stream_arg *)data; + struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; + int ret; + + if (unlikely(stream == NULL)) + return -ENOMEM; + + res = &stream->stream.res; + stream->base.shareable = false; + stream->base.tfile = NULL; + + ret = vmw_stream_init(dev_priv, &stream->stream, vmw_user_stream_free); + if (unlikely(ret != 0)) + return ret; + + tmp = vmw_resource_reference(res); + ret = ttm_base_object_init(tfile, &stream->base, false, VMW_RES_STREAM, + &vmw_user_stream_base_release, NULL); + + if (unlikely(ret != 0)) { + vmw_resource_unreference(&tmp); + goto out_err; + } + + arg->stream_id = res->id; +out_err: + vmw_resource_unreference(&res); + return ret; +} + +int vmw_user_stream_lookup(struct vmw_private *dev_priv, + struct ttm_object_file *tfile, + uint32_t *inout_id, struct vmw_resource **out) +{ + struct vmw_user_stream *stream; + struct vmw_resource *res; + int ret; + + res = vmw_resource_lookup(dev_priv, &dev_priv->stream_idr, *inout_id); + if (unlikely(res == NULL)) + return -EINVAL; + + if (res->res_free != &vmw_user_stream_free) { + ret = -EINVAL; + goto err_ref; + } + + stream = container_of(res, struct vmw_user_stream, stream.res); + if (stream->base.tfile != tfile) { + ret = -EPERM; + goto err_ref; + } + + *inout_id = stream->stream.stream_id; + *out = res; + return 0; +err_ref: + vmw_resource_unreference(&res); + return ret; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/Kconfig +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/Kconfig @@ -0,0 +1,13 @@ +config DRM_VMWGFX + tristate "DRM driver for VMware Virtual GPU" + depends on DRM && PCI + select FB_DEFERRED_IO + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select DRM_TTM + help + KMS enabled DRM driver for SVGA2 virtual hardware. + + If unsure say n. The compiled module will be + called vmwgfx.ko --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/svga_overlay.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/svga_overlay.h @@ -0,0 +1,201 @@ +/********************************************************** + * Copyright 2007-2009 VMware, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + **********************************************************/ + +/* + * svga_overlay.h -- + * + * Definitions for video-overlay support. + */ + +#ifndef _SVGA_OVERLAY_H_ +#define _SVGA_OVERLAY_H_ + +#include "svga_reg.h" + +/* + * Video formats we support + */ + +#define VMWARE_FOURCC_YV12 0x32315659 // 'Y' 'V' '1' '2' +#define VMWARE_FOURCC_YUY2 0x32595559 // 'Y' 'U' 'Y' '2' +#define VMWARE_FOURCC_UYVY 0x59565955 // 'U' 'Y' 'V' 'Y' + +typedef enum { + SVGA_OVERLAY_FORMAT_INVALID = 0, + SVGA_OVERLAY_FORMAT_YV12 = VMWARE_FOURCC_YV12, + SVGA_OVERLAY_FORMAT_YUY2 = VMWARE_FOURCC_YUY2, + SVGA_OVERLAY_FORMAT_UYVY = VMWARE_FOURCC_UYVY, +} SVGAOverlayFormat; + +#define SVGA_VIDEO_COLORKEY_MASK 0x00ffffff + +#define SVGA_ESCAPE_VMWARE_VIDEO 0x00020000 + +#define SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS 0x00020001 + /* FIFO escape layout: + * Type, Stream Id, (Register Id, Value) pairs */ + +#define SVGA_ESCAPE_VMWARE_VIDEO_FLUSH 0x00020002 + /* FIFO escape layout: + * Type, Stream Id */ + +typedef +struct SVGAEscapeVideoSetRegs { + struct { + uint32 cmdType; + uint32 streamId; + } header; + + // May include zero or more items. + struct { + uint32 registerId; + uint32 value; + } items[1]; +} SVGAEscapeVideoSetRegs; + +typedef +struct SVGAEscapeVideoFlush { + uint32 cmdType; + uint32 streamId; +} SVGAEscapeVideoFlush; + + +/* + * Struct definitions for the video overlay commands built on + * SVGAFifoCmdEscape. + */ +typedef +struct { + uint32 command; + uint32 overlay; +} SVGAFifoEscapeCmdVideoBase; + +typedef +struct { + SVGAFifoEscapeCmdVideoBase videoCmd; +} SVGAFifoEscapeCmdVideoFlush; + +typedef +struct { + SVGAFifoEscapeCmdVideoBase videoCmd; + struct { + uint32 regId; + uint32 value; + } items[1]; +} SVGAFifoEscapeCmdVideoSetRegs; + +typedef +struct { + SVGAFifoEscapeCmdVideoBase videoCmd; + struct { + uint32 regId; + uint32 value; + } items[SVGA_VIDEO_NUM_REGS]; +} SVGAFifoEscapeCmdVideoSetAllRegs; + + +/* + *---------------------------------------------------------------------- + * + * VMwareVideoGetAttributes -- + * + * Computes the size, pitches and offsets for YUV frames. + * + * Results: + * TRUE on success; otherwise FALSE on failure. + * + * Side effects: + * Pitches and offsets for the given YUV frame are put in 'pitches' + * and 'offsets' respectively. They are both optional though. + * + *---------------------------------------------------------------------- + */ + +static inline bool +VMwareVideoGetAttributes(const SVGAOverlayFormat format, // IN + uint32 *width, // IN / OUT + uint32 *height, // IN / OUT + uint32 *size, // OUT + uint32 *pitches, // OUT (optional) + uint32 *offsets) // OUT (optional) +{ + int tmp; + + *width = (*width + 1) & ~1; + + if (offsets) { + offsets[0] = 0; + } + + switch (format) { + case VMWARE_FOURCC_YV12: + *height = (*height + 1) & ~1; + *size = (*width + 3) & ~3; + + if (pitches) { + pitches[0] = *size; + } + + *size *= *height; + + if (offsets) { + offsets[1] = *size; + } + + tmp = ((*width >> 1) + 3) & ~3; + + if (pitches) { + pitches[1] = pitches[2] = tmp; + } + + tmp *= (*height >> 1); + *size += tmp; + + if (offsets) { + offsets[2] = *size; + } + + *size += tmp; + break; + + case VMWARE_FOURCC_YUY2: + case VMWARE_FOURCC_UYVY: + *size = *width * 2; + + if (pitches) { + pitches[0] = *size; + } + + *size *= *height; + break; + + default: + return false; + } + + return true; +} + +#endif // _SVGA_OVERLAY_H_ --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h @@ -0,0 +1,102 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#ifndef VMWGFX_KMS_H_ +#define VMWGFX_KMS_H_ + +#include "drmP.h" +#include "vmwgfx_drv.h" + + +#define vmw_framebuffer_to_vfb(x) \ + container_of(x, struct vmw_framebuffer, base) + +/** + * Base class for framebuffers + * + * @pin is called the when ever a crtc uses this framebuffer + * @unpin is called + */ +struct vmw_framebuffer { + struct drm_framebuffer base; + int (*pin)(struct vmw_framebuffer *fb); + int (*unpin)(struct vmw_framebuffer *fb); +}; + + +#define vmw_crtc_to_du(x) \ + container_of(x, struct vmw_display_unit, crtc) + +/* + * Basic cursor manipulation + */ +int vmw_cursor_update_image(struct vmw_private *dev_priv, + u32 *image, u32 width, u32 height, + u32 hotspotX, u32 hotspotY); +void vmw_cursor_update_position(struct vmw_private *dev_priv, + bool show, int x, int y); + +/** + * Base class display unit. + * + * Since the SVGA hw doesn't have a concept of a crtc, encoder or connector + * so the display unit is all of them at the same time. This is true for both + * legacy multimon and screen objects. + */ +struct vmw_display_unit { + struct drm_crtc crtc; + struct drm_encoder encoder; + struct drm_connector connector; + + struct vmw_surface *cursor_surface; + struct vmw_dma_buffer *cursor_dmabuf; + size_t cursor_age; + + int cursor_x; + int cursor_y; + + int hotspot_x; + int hotspot_y; + + unsigned unit; +}; + +/* + * Shared display unit functions - vmwgfx_kms.c + */ +void vmw_display_unit_cleanup(struct vmw_display_unit *du); +int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, + uint32_t handle, uint32_t width, uint32_t height); +int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y); + +/* + * Legacy display unit functions - vmwgfx_ldu.h + */ +int vmw_kms_init_legacy_display_system(struct vmw_private *dev_priv); +int vmw_kms_close_legacy_display_system(struct vmw_private *dev_priv); + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c @@ -0,0 +1,783 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "drmP.h" +#include "vmwgfx_drv.h" +#include "ttm/ttm_placement.h" +#include "ttm/ttm_bo_driver.h" +#include "ttm/ttm_object.h" +#include "ttm/ttm_module.h" + +#define VMWGFX_DRIVER_NAME "vmwgfx" +#define VMWGFX_DRIVER_DESC "Linux drm driver for VMware graphics devices" +#define VMWGFX_CHIP_SVGAII 0 +#define VMW_FB_RESERVATION 0 + +/** + * Fully encoded drm commands. Might move to vmw_drm.h + */ + +#define DRM_IOCTL_VMW_GET_PARAM \ + DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_GET_PARAM, \ + struct drm_vmw_getparam_arg) +#define DRM_IOCTL_VMW_ALLOC_DMABUF \ + DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_ALLOC_DMABUF, \ + union drm_vmw_alloc_dmabuf_arg) +#define DRM_IOCTL_VMW_UNREF_DMABUF \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_DMABUF, \ + struct drm_vmw_unref_dmabuf_arg) +#define DRM_IOCTL_VMW_CURSOR_BYPASS \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_CURSOR_BYPASS, \ + struct drm_vmw_cursor_bypass_arg) + +#define DRM_IOCTL_VMW_CONTROL_STREAM \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_CONTROL_STREAM, \ + struct drm_vmw_control_stream_arg) +#define DRM_IOCTL_VMW_CLAIM_STREAM \ + DRM_IOR(DRM_COMMAND_BASE + DRM_VMW_CLAIM_STREAM, \ + struct drm_vmw_stream_arg) +#define DRM_IOCTL_VMW_UNREF_STREAM \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_STREAM, \ + struct drm_vmw_stream_arg) + +#define DRM_IOCTL_VMW_CREATE_CONTEXT \ + DRM_IOR(DRM_COMMAND_BASE + DRM_VMW_CREATE_CONTEXT, \ + struct drm_vmw_context_arg) +#define DRM_IOCTL_VMW_UNREF_CONTEXT \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_CONTEXT, \ + struct drm_vmw_context_arg) +#define DRM_IOCTL_VMW_CREATE_SURFACE \ + DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_CREATE_SURFACE, \ + union drm_vmw_surface_create_arg) +#define DRM_IOCTL_VMW_UNREF_SURFACE \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_UNREF_SURFACE, \ + struct drm_vmw_surface_arg) +#define DRM_IOCTL_VMW_REF_SURFACE \ + DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_REF_SURFACE, \ + union drm_vmw_surface_reference_arg) +#define DRM_IOCTL_VMW_EXECBUF \ + DRM_IOW(DRM_COMMAND_BASE + DRM_VMW_EXECBUF, \ + struct drm_vmw_execbuf_arg) +#define DRM_IOCTL_VMW_FIFO_DEBUG \ + DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_FIFO_DEBUG, \ + struct drm_vmw_fifo_debug_arg) +#define DRM_IOCTL_VMW_FENCE_WAIT \ + DRM_IOWR(DRM_COMMAND_BASE + DRM_VMW_FENCE_WAIT, \ + struct drm_vmw_fence_wait_arg) + + +/** + * The core DRM version of this macro doesn't account for + * DRM_COMMAND_BASE. + */ + +#define VMW_IOCTL_DEF(ioctl, func, flags) \ + [DRM_IOCTL_NR(ioctl) - DRM_COMMAND_BASE] = {ioctl, flags, func} + +/** + * Ioctl definitions. + */ + +static struct drm_ioctl_desc vmw_ioctls[] = { + VMW_IOCTL_DEF(DRM_IOCTL_VMW_GET_PARAM, vmw_getparam_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_ALLOC_DMABUF, vmw_dmabuf_alloc_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_DMABUF, vmw_dmabuf_unref_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_CURSOR_BYPASS, + vmw_kms_cursor_bypass_ioctl, + DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED), + + VMW_IOCTL_DEF(DRM_IOCTL_VMW_CONTROL_STREAM, vmw_overlay_ioctl, + DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_CLAIM_STREAM, vmw_stream_claim_ioctl, + DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_STREAM, vmw_stream_unref_ioctl, + DRM_MASTER | DRM_CONTROL_ALLOW | DRM_UNLOCKED), + + VMW_IOCTL_DEF(DRM_IOCTL_VMW_CREATE_CONTEXT, vmw_context_define_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_CONTEXT, vmw_context_destroy_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_CREATE_SURFACE, vmw_surface_define_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_UNREF_SURFACE, vmw_surface_destroy_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_REF_SURFACE, vmw_surface_reference_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_EXECBUF, vmw_execbuf_ioctl, + DRM_AUTH | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_FIFO_DEBUG, vmw_fifo_debug_ioctl, + DRM_AUTH | DRM_ROOT_ONLY | DRM_MASTER | DRM_UNLOCKED), + VMW_IOCTL_DEF(DRM_IOCTL_VMW_FENCE_WAIT, vmw_fence_wait_ioctl, + DRM_AUTH | DRM_UNLOCKED) +}; + +static struct pci_device_id vmw_pci_id_list[] = { + {0x15ad, 0x0405, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VMWGFX_CHIP_SVGAII}, + {0, 0, 0} +}; + +static char *vmw_devname = "vmwgfx"; + +static int vmw_probe(struct pci_dev *, const struct pci_device_id *); +static void vmw_master_init(struct vmw_master *); +static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val, + void *ptr); + +static void vmw_print_capabilities(uint32_t capabilities) +{ + DRM_INFO("Capabilities:\n"); + if (capabilities & SVGA_CAP_RECT_COPY) + DRM_INFO(" Rect copy.\n"); + if (capabilities & SVGA_CAP_CURSOR) + DRM_INFO(" Cursor.\n"); + if (capabilities & SVGA_CAP_CURSOR_BYPASS) + DRM_INFO(" Cursor bypass.\n"); + if (capabilities & SVGA_CAP_CURSOR_BYPASS_2) + DRM_INFO(" Cursor bypass 2.\n"); + if (capabilities & SVGA_CAP_8BIT_EMULATION) + DRM_INFO(" 8bit emulation.\n"); + if (capabilities & SVGA_CAP_ALPHA_CURSOR) + DRM_INFO(" Alpha cursor.\n"); + if (capabilities & SVGA_CAP_3D) + DRM_INFO(" 3D.\n"); + if (capabilities & SVGA_CAP_EXTENDED_FIFO) + DRM_INFO(" Extended Fifo.\n"); + if (capabilities & SVGA_CAP_MULTIMON) + DRM_INFO(" Multimon.\n"); + if (capabilities & SVGA_CAP_PITCHLOCK) + DRM_INFO(" Pitchlock.\n"); + if (capabilities & SVGA_CAP_IRQMASK) + DRM_INFO(" Irq mask.\n"); + if (capabilities & SVGA_CAP_DISPLAY_TOPOLOGY) + DRM_INFO(" Display Topology.\n"); + if (capabilities & SVGA_CAP_GMR) + DRM_INFO(" GMR.\n"); + if (capabilities & SVGA_CAP_TRACES) + DRM_INFO(" Traces.\n"); +} + +static int vmw_request_device(struct vmw_private *dev_priv) +{ + int ret; + + vmw_kms_save_vga(dev_priv); + + ret = vmw_fifo_init(dev_priv, &dev_priv->fifo); + if (unlikely(ret != 0)) { + DRM_ERROR("Unable to initialize FIFO.\n"); + return ret; + } + + return 0; +} + +static void vmw_release_device(struct vmw_private *dev_priv) +{ + vmw_fifo_release(dev_priv, &dev_priv->fifo); + vmw_kms_restore_vga(dev_priv); +} + + +static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) +{ + struct vmw_private *dev_priv; + int ret; + uint32_t svga_id; + + dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); + if (unlikely(dev_priv == NULL)) { + DRM_ERROR("Failed allocating a device private struct.\n"); + return -ENOMEM; + } + memset(dev_priv, 0, sizeof(*dev_priv)); + + dev_priv->dev = dev; + dev_priv->vmw_chipset = chipset; + dev_priv->last_read_sequence = (uint32_t) -100; + mutex_init(&dev_priv->hw_mutex); + mutex_init(&dev_priv->cmdbuf_mutex); + rwlock_init(&dev_priv->resource_lock); + idr_init(&dev_priv->context_idr); + idr_init(&dev_priv->surface_idr); + idr_init(&dev_priv->stream_idr); + ida_init(&dev_priv->gmr_ida); + mutex_init(&dev_priv->init_mutex); + init_waitqueue_head(&dev_priv->fence_queue); + init_waitqueue_head(&dev_priv->fifo_queue); + atomic_set(&dev_priv->fence_queue_waiters, 0); + atomic_set(&dev_priv->fifo_queue_waiters, 0); + INIT_LIST_HEAD(&dev_priv->gmr_lru); + + dev_priv->io_start = pci_resource_start(dev->pdev, 0); + dev_priv->vram_start = pci_resource_start(dev->pdev, 1); + dev_priv->mmio_start = pci_resource_start(dev->pdev, 2); + + mutex_lock(&dev_priv->hw_mutex); + + vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2); + svga_id = vmw_read(dev_priv, SVGA_REG_ID); + if (svga_id != SVGA_ID_2) { + ret = -ENOSYS; + DRM_ERROR("Unsuported SVGA ID 0x%x\n", svga_id); + mutex_unlock(&dev_priv->hw_mutex); + goto out_err0; + } + + dev_priv->capabilities = vmw_read(dev_priv, SVGA_REG_CAPABILITIES); + + if (dev_priv->capabilities & SVGA_CAP_GMR) { + dev_priv->max_gmr_descriptors = + vmw_read(dev_priv, + SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH); + dev_priv->max_gmr_ids = + vmw_read(dev_priv, SVGA_REG_GMR_MAX_IDS); + } + + dev_priv->vram_size = vmw_read(dev_priv, SVGA_REG_VRAM_SIZE); + dev_priv->mmio_size = vmw_read(dev_priv, SVGA_REG_MEM_SIZE); + dev_priv->fb_max_width = vmw_read(dev_priv, SVGA_REG_MAX_WIDTH); + dev_priv->fb_max_height = vmw_read(dev_priv, SVGA_REG_MAX_HEIGHT); + + mutex_unlock(&dev_priv->hw_mutex); + + vmw_print_capabilities(dev_priv->capabilities); + + if (dev_priv->capabilities & SVGA_CAP_GMR) { + DRM_INFO("Max GMR ids is %u\n", + (unsigned)dev_priv->max_gmr_ids); + DRM_INFO("Max GMR descriptors is %u\n", + (unsigned)dev_priv->max_gmr_descriptors); + } + DRM_INFO("VRAM at 0x%08x size is %u kiB\n", + dev_priv->vram_start, dev_priv->vram_size / 1024); + DRM_INFO("MMIO at 0x%08x size is %u kiB\n", + dev_priv->mmio_start, dev_priv->mmio_size / 1024); + + ret = vmw_ttm_global_init(dev_priv); + if (unlikely(ret != 0)) + goto out_err0; + + + vmw_master_init(&dev_priv->fbdev_master); + ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM); + dev_priv->active_master = &dev_priv->fbdev_master; + + + ret = ttm_bo_device_init(&dev_priv->bdev, + dev_priv->bo_global_ref.ref.object, + &vmw_bo_driver, VMWGFX_FILE_PAGE_OFFSET, + false); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed initializing TTM buffer object driver.\n"); + goto out_err1; + } + + ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM, + (dev_priv->vram_size >> PAGE_SHIFT)); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed initializing memory manager for VRAM.\n"); + goto out_err2; + } + + dev_priv->mmio_mtrr = drm_mtrr_add(dev_priv->mmio_start, + dev_priv->mmio_size, DRM_MTRR_WC); + + dev_priv->mmio_virt = ioremap_wc(dev_priv->mmio_start, + dev_priv->mmio_size); + + if (unlikely(dev_priv->mmio_virt == NULL)) { + ret = -ENOMEM; + DRM_ERROR("Failed mapping MMIO.\n"); + goto out_err3; + } + + dev_priv->tdev = ttm_object_device_init + (dev_priv->mem_global_ref.object, 12); + + if (unlikely(dev_priv->tdev == NULL)) { + DRM_ERROR("Unable to initialize TTM object management.\n"); + ret = -ENOMEM; + goto out_err4; + } + + dev->dev_private = dev_priv; + + if (!dev->devname) + dev->devname = vmw_devname; + + if (dev_priv->capabilities & SVGA_CAP_IRQMASK) { + ret = drm_irq_install(dev); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed installing irq: %d\n", ret); + goto out_no_irq; + } + } + + ret = pci_request_regions(dev->pdev, "vmwgfx probe"); + dev_priv->stealth = (ret != 0); + if (dev_priv->stealth) { + /** + * Request at least the mmio PCI resource. + */ + + DRM_INFO("It appears like vesafb is loaded. " + "Ignore above error if any.\n"); + ret = pci_request_region(dev->pdev, 2, "vmwgfx stealth probe"); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed reserving the SVGA MMIO resource.\n"); + goto out_no_device; + } + } + ret = vmw_request_device(dev_priv); + if (unlikely(ret != 0)) + goto out_no_device; + vmw_kms_init(dev_priv); + vmw_overlay_init(dev_priv); + vmw_fb_init(dev_priv); + + dev_priv->pm_nb.notifier_call = vmwgfx_pm_notifier; + register_pm_notifier(&dev_priv->pm_nb); + + DRM_INFO("%s", vmw_fifo_have_3d(dev_priv) ? "Have 3D\n" : "No 3D\n"); + + return 0; + +out_no_device: + if (dev_priv->capabilities & SVGA_CAP_IRQMASK) + drm_irq_uninstall(dev_priv->dev); + if (dev->devname == vmw_devname) + dev->devname = NULL; +out_no_irq: + ttm_object_device_release(&dev_priv->tdev); +out_err4: + iounmap(dev_priv->mmio_virt); +out_err3: + drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start, + dev_priv->mmio_size, DRM_MTRR_WC); + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); +out_err2: + (void)ttm_bo_device_release(&dev_priv->bdev); +out_err1: + vmw_ttm_global_release(dev_priv); +out_err0: + ida_destroy(&dev_priv->gmr_ida); + idr_destroy(&dev_priv->surface_idr); + idr_destroy(&dev_priv->context_idr); + idr_destroy(&dev_priv->stream_idr); + kfree(dev_priv); + return ret; +} + +static int vmw_driver_unload(struct drm_device *dev) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + + DRM_INFO(VMWGFX_DRIVER_NAME " unload.\n"); + + unregister_pm_notifier(&dev_priv->pm_nb); + + vmw_fb_close(dev_priv); + vmw_kms_close(dev_priv); + vmw_overlay_close(dev_priv); + vmw_release_device(dev_priv); + if (dev_priv->stealth) + pci_release_region(dev->pdev, 2); + else + pci_release_regions(dev->pdev); + + if (dev_priv->capabilities & SVGA_CAP_IRQMASK) + drm_irq_uninstall(dev_priv->dev); + if (dev->devname == vmw_devname) + dev->devname = NULL; + ttm_object_device_release(&dev_priv->tdev); + iounmap(dev_priv->mmio_virt); + drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start, + dev_priv->mmio_size, DRM_MTRR_WC); + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); + (void)ttm_bo_device_release(&dev_priv->bdev); + vmw_ttm_global_release(dev_priv); + ida_destroy(&dev_priv->gmr_ida); + idr_destroy(&dev_priv->surface_idr); + idr_destroy(&dev_priv->context_idr); + idr_destroy(&dev_priv->stream_idr); + + kfree(dev_priv); + + return 0; +} + +static void vmw_postclose(struct drm_device *dev, + struct drm_file *file_priv) +{ + struct vmw_fpriv *vmw_fp; + + vmw_fp = vmw_fpriv(file_priv); + ttm_object_file_release(&vmw_fp->tfile); + if (vmw_fp->locked_master) + drm_master_put(&vmw_fp->locked_master); + kfree(vmw_fp); +} + +static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_fpriv *vmw_fp; + int ret = -ENOMEM; + + vmw_fp = kzalloc(sizeof(*vmw_fp), GFP_KERNEL); + if (unlikely(vmw_fp == NULL)) + return ret; + + vmw_fp->tfile = ttm_object_file_init(dev_priv->tdev, 10); + if (unlikely(vmw_fp->tfile == NULL)) + goto out_no_tfile; + + file_priv->driver_priv = vmw_fp; + + if (unlikely(dev_priv->bdev.dev_mapping == NULL)) + dev_priv->bdev.dev_mapping = + file_priv->filp->f_path.dentry->d_inode->i_mapping; + + return 0; + +out_no_tfile: + kfree(vmw_fp); + return ret; +} + +static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg) +{ + struct drm_file *file_priv = filp->private_data; + struct drm_device *dev = file_priv->minor->dev; + unsigned int nr = DRM_IOCTL_NR(cmd); + + /* + * Do extra checking on driver private ioctls. + */ + + if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END) + && (nr < DRM_COMMAND_BASE + dev->driver->num_ioctls)) { + struct drm_ioctl_desc *ioctl = + &vmw_ioctls[nr - DRM_COMMAND_BASE]; + + if (unlikely(ioctl->cmd != cmd)) { + DRM_ERROR("Invalid command format, ioctl %d\n", + nr - DRM_COMMAND_BASE); + return -EINVAL; + } + } + + return drm_ioctl(filp, cmd, arg); +} + +static int vmw_firstopen(struct drm_device *dev) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + dev_priv->is_opened = true; + + return 0; +} + +static void vmw_lastclose(struct drm_device *dev) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct drm_crtc *crtc; + struct drm_mode_set set; + int ret; + + /** + * Do nothing on the lastclose call from drm_unload. + */ + + if (!dev_priv->is_opened) + return; + + dev_priv->is_opened = false; + set.x = 0; + set.y = 0; + set.fb = NULL; + set.mode = NULL; + set.connectors = NULL; + set.num_connectors = 0; + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + set.crtc = crtc; + ret = crtc->funcs->set_config(&set); + WARN_ON(ret != 0); + } + +} + +static void vmw_master_init(struct vmw_master *vmaster) +{ + ttm_lock_init(&vmaster->lock); +} + +static int vmw_master_create(struct drm_device *dev, + struct drm_master *master) +{ + struct vmw_master *vmaster; + + DRM_INFO("Master create.\n"); + vmaster = kzalloc(sizeof(*vmaster), GFP_KERNEL); + if (unlikely(vmaster == NULL)) + return -ENOMEM; + + ttm_lock_init(&vmaster->lock); + ttm_lock_set_kill(&vmaster->lock, true, SIGTERM); + master->driver_priv = vmaster; + + return 0; +} + +static void vmw_master_destroy(struct drm_device *dev, + struct drm_master *master) +{ + struct vmw_master *vmaster = vmw_master(master); + + DRM_INFO("Master destroy.\n"); + master->driver_priv = NULL; + kfree(vmaster); +} + + +static int vmw_master_set(struct drm_device *dev, + struct drm_file *file_priv, + bool from_open) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv); + struct vmw_master *active = dev_priv->active_master; + struct vmw_master *vmaster = vmw_master(file_priv->master); + int ret = 0; + + DRM_INFO("Master set.\n"); + + if (active) { + BUG_ON(active != &dev_priv->fbdev_master); + ret = ttm_vt_lock(&active->lock, false, vmw_fp->tfile); + if (unlikely(ret != 0)) + goto out_no_active_lock; + + ttm_lock_set_kill(&active->lock, true, SIGTERM); + ret = ttm_bo_evict_mm(&dev_priv->bdev, TTM_PL_VRAM); + if (unlikely(ret != 0)) { + DRM_ERROR("Unable to clean VRAM on " + "master drop.\n"); + } + + dev_priv->active_master = NULL; + } + + ttm_lock_set_kill(&vmaster->lock, false, SIGTERM); + if (!from_open) { + ttm_vt_unlock(&vmaster->lock); + BUG_ON(vmw_fp->locked_master != file_priv->master); + drm_master_put(&vmw_fp->locked_master); + } + + dev_priv->active_master = vmaster; + + return 0; + +out_no_active_lock: + vmw_release_device(dev_priv); + return ret; +} + +static void vmw_master_drop(struct drm_device *dev, + struct drm_file *file_priv, + bool from_release) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv); + struct vmw_master *vmaster = vmw_master(file_priv->master); + int ret; + + DRM_INFO("Master drop.\n"); + + /** + * Make sure the master doesn't disappear while we have + * it locked. + */ + + vmw_fp->locked_master = drm_master_get(file_priv->master); + ret = ttm_vt_lock(&vmaster->lock, false, vmw_fp->tfile); + + if (unlikely((ret != 0))) { + DRM_ERROR("Unable to lock TTM at VT switch.\n"); + drm_master_put(&vmw_fp->locked_master); + } + + ttm_lock_set_kill(&vmaster->lock, true, SIGTERM); + + dev_priv->active_master = &dev_priv->fbdev_master; + ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM); + ttm_vt_unlock(&dev_priv->fbdev_master.lock); + + vmw_fb_on(dev_priv); +} + + +static void vmw_remove(struct pci_dev *pdev) +{ + struct drm_device *dev = pci_get_drvdata(pdev); + + drm_put_dev(dev); +} + +static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val, + void *ptr) +{ + struct vmw_private *dev_priv = + container_of(nb, struct vmw_private, pm_nb); + struct vmw_master *vmaster = dev_priv->active_master; + + switch (val) { + case PM_HIBERNATION_PREPARE: + case PM_SUSPEND_PREPARE: + ttm_suspend_lock(&vmaster->lock); + + /** + * This empties VRAM and unbinds all GMR bindings. + * Buffer contents is moved to swappable memory. + */ + ttm_bo_swapout_all(&dev_priv->bdev); + break; + case PM_POST_HIBERNATION: + case PM_POST_SUSPEND: + ttm_suspend_unlock(&vmaster->lock); + break; + case PM_RESTORE_PREPARE: + break; + case PM_POST_RESTORE: + break; + default: + break; + } + return 0; +} + +/** + * These might not be needed with the virtual SVGA device. + */ + +int vmw_pci_suspend(struct pci_dev *pdev, pm_message_t state) +{ + pci_save_state(pdev); + pci_disable_device(pdev); + pci_set_power_state(pdev, PCI_D3hot); + return 0; +} + +int vmw_pci_resume(struct pci_dev *pdev) +{ + pci_set_power_state(pdev, PCI_D0); + pci_restore_state(pdev); + return pci_enable_device(pdev); +} + +static struct drm_driver driver = { + .driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | + DRIVER_MODESET, + .load = vmw_driver_load, + .unload = vmw_driver_unload, + .firstopen = vmw_firstopen, + .lastclose = vmw_lastclose, + .irq_preinstall = vmw_irq_preinstall, + .irq_postinstall = vmw_irq_postinstall, + .irq_uninstall = vmw_irq_uninstall, + .irq_handler = vmw_irq_handler, + .reclaim_buffers_locked = NULL, + .get_map_ofs = drm_core_get_map_ofs, + .get_reg_ofs = drm_core_get_reg_ofs, + .ioctls = vmw_ioctls, + .num_ioctls = DRM_ARRAY_SIZE(vmw_ioctls), + .dma_quiescent = NULL, /*vmw_dma_quiescent, */ + .master_create = vmw_master_create, + .master_destroy = vmw_master_destroy, + .master_set = vmw_master_set, + .master_drop = vmw_master_drop, + .open = vmw_driver_open, + .postclose = vmw_postclose, + .fops = { + .owner = THIS_MODULE, + .open = drm_open, + .release = drm_release, + .unlocked_ioctl = vmw_unlocked_ioctl, + .mmap = vmw_mmap, + .poll = drm_poll, + .fasync = drm_fasync, +#if defined(CONFIG_COMPAT) + .compat_ioctl = drm_compat_ioctl, +#endif + }, + .pci_driver = { + .name = VMWGFX_DRIVER_NAME, + .id_table = vmw_pci_id_list, + .probe = vmw_probe, + .remove = vmw_remove, + .suspend = vmw_pci_suspend, + .resume = vmw_pci_resume + }, + .name = VMWGFX_DRIVER_NAME, + .desc = VMWGFX_DRIVER_DESC, + .date = VMWGFX_DRIVER_DATE, + .major = VMWGFX_DRIVER_MAJOR, + .minor = VMWGFX_DRIVER_MINOR, + .patchlevel = VMWGFX_DRIVER_PATCHLEVEL +}; + +static int vmw_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +{ + return drm_get_dev(pdev, ent, &driver); +} + +static int __init vmwgfx_init(void) +{ + int ret; + ret = drm_init(&driver); + if (ret) + DRM_ERROR("Failed initializing DRM.\n"); + return ret; +} + +static void __exit vmwgfx_exit(void) +{ + drm_exit(&driver); +} + +module_init(vmwgfx_init); +module_exit(vmwgfx_exit); + +MODULE_AUTHOR("VMware Inc. and others"); +MODULE_DESCRIPTION("Standalone drm driver for the VMware SVGA device"); +MODULE_LICENSE("GPL and additional rights"); --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c @@ -0,0 +1,538 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_drv.h" +#include "drmP.h" +#include "ttm/ttm_placement.h" + +bool vmw_fifo_have_3d(struct vmw_private *dev_priv) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t fifo_min, hwversion; + + fifo_min = ioread32(fifo_mem + SVGA_FIFO_MIN); + if (fifo_min <= SVGA_FIFO_3D_HWVERSION * sizeof(unsigned int)) + return false; + + hwversion = ioread32(fifo_mem + SVGA_FIFO_3D_HWVERSION); + if (hwversion == 0) + return false; + + if (hwversion < SVGA3D_HWVERSION_WS65_B1) + return false; + + return true; +} + +int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t max; + uint32_t min; + uint32_t dummy; + int ret; + + fifo->static_buffer_size = VMWGFX_FIFO_STATIC_SIZE; + fifo->static_buffer = vmalloc(fifo->static_buffer_size); + if (unlikely(fifo->static_buffer == NULL)) + return -ENOMEM; + + fifo->last_buffer_size = VMWGFX_FIFO_STATIC_SIZE; + fifo->last_data_size = 0; + fifo->last_buffer_add = false; + fifo->last_buffer = vmalloc(fifo->last_buffer_size); + if (unlikely(fifo->last_buffer == NULL)) { + ret = -ENOMEM; + goto out_err; + } + + fifo->dynamic_buffer = NULL; + fifo->reserved_size = 0; + fifo->using_bounce_buffer = false; + + mutex_init(&fifo->fifo_mutex); + init_rwsem(&fifo->rwsem); + + /* + * Allow mapping the first page read-only to user-space. + */ + + DRM_INFO("width %d\n", vmw_read(dev_priv, SVGA_REG_WIDTH)); + DRM_INFO("height %d\n", vmw_read(dev_priv, SVGA_REG_HEIGHT)); + DRM_INFO("bpp %d\n", vmw_read(dev_priv, SVGA_REG_BITS_PER_PIXEL)); + + mutex_lock(&dev_priv->hw_mutex); + dev_priv->enable_state = vmw_read(dev_priv, SVGA_REG_ENABLE); + dev_priv->config_done_state = vmw_read(dev_priv, SVGA_REG_CONFIG_DONE); + vmw_write(dev_priv, SVGA_REG_ENABLE, 1); + + min = 4; + if (dev_priv->capabilities & SVGA_CAP_EXTENDED_FIFO) + min = vmw_read(dev_priv, SVGA_REG_MEM_REGS); + min <<= 2; + + if (min < PAGE_SIZE) + min = PAGE_SIZE; + + iowrite32(min, fifo_mem + SVGA_FIFO_MIN); + iowrite32(dev_priv->mmio_size, fifo_mem + SVGA_FIFO_MAX); + wmb(); + iowrite32(min, fifo_mem + SVGA_FIFO_NEXT_CMD); + iowrite32(min, fifo_mem + SVGA_FIFO_STOP); + iowrite32(0, fifo_mem + SVGA_FIFO_BUSY); + mb(); + + vmw_write(dev_priv, SVGA_REG_CONFIG_DONE, 1); + mutex_unlock(&dev_priv->hw_mutex); + + max = ioread32(fifo_mem + SVGA_FIFO_MAX); + min = ioread32(fifo_mem + SVGA_FIFO_MIN); + fifo->capabilities = ioread32(fifo_mem + SVGA_FIFO_CAPABILITIES); + + DRM_INFO("Fifo max 0x%08x min 0x%08x cap 0x%08x\n", + (unsigned int) max, + (unsigned int) min, + (unsigned int) fifo->capabilities); + + atomic_set(&dev_priv->fence_seq, dev_priv->last_read_sequence); + iowrite32(dev_priv->last_read_sequence, fifo_mem + SVGA_FIFO_FENCE); + + return vmw_fifo_send_fence(dev_priv, &dummy); +out_err: + vfree(fifo->static_buffer); + fifo->static_buffer = NULL; + return ret; +} + +void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + + mutex_lock(&dev_priv->hw_mutex); + + if (unlikely(ioread32(fifo_mem + SVGA_FIFO_BUSY) == 0)) { + iowrite32(1, fifo_mem + SVGA_FIFO_BUSY); + vmw_write(dev_priv, SVGA_REG_SYNC, reason); + } + + mutex_unlock(&dev_priv->hw_mutex); +} + +void vmw_fifo_release(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + + mutex_lock(&dev_priv->hw_mutex); + + while (vmw_read(dev_priv, SVGA_REG_BUSY) != 0) + vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC); + + dev_priv->last_read_sequence = ioread32(fifo_mem + SVGA_FIFO_FENCE); + + vmw_write(dev_priv, SVGA_REG_CONFIG_DONE, + dev_priv->config_done_state); + vmw_write(dev_priv, SVGA_REG_ENABLE, + dev_priv->enable_state); + + mutex_unlock(&dev_priv->hw_mutex); + + if (likely(fifo->last_buffer != NULL)) { + vfree(fifo->last_buffer); + fifo->last_buffer = NULL; + } + + if (likely(fifo->static_buffer != NULL)) { + vfree(fifo->static_buffer); + fifo->static_buffer = NULL; + } + + if (likely(fifo->dynamic_buffer != NULL)) { + vfree(fifo->dynamic_buffer); + fifo->dynamic_buffer = NULL; + } +} + +static bool vmw_fifo_is_full(struct vmw_private *dev_priv, uint32_t bytes) +{ + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t max = ioread32(fifo_mem + SVGA_FIFO_MAX); + uint32_t next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); + uint32_t min = ioread32(fifo_mem + SVGA_FIFO_MIN); + uint32_t stop = ioread32(fifo_mem + SVGA_FIFO_STOP); + + return ((max - next_cmd) + (stop - min) <= bytes); +} + +static int vmw_fifo_wait_noirq(struct vmw_private *dev_priv, + uint32_t bytes, bool interruptible, + unsigned long timeout) +{ + int ret = 0; + unsigned long end_jiffies = jiffies + timeout; + DEFINE_WAIT(__wait); + + DRM_INFO("Fifo wait noirq.\n"); + + for (;;) { + prepare_to_wait(&dev_priv->fifo_queue, &__wait, + (interruptible) ? + TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); + if (!vmw_fifo_is_full(dev_priv, bytes)) + break; + if (time_after_eq(jiffies, end_jiffies)) { + ret = -EBUSY; + DRM_ERROR("SVGA device lockup.\n"); + break; + } + schedule_timeout(1); + if (interruptible && signal_pending(current)) { + ret = -ERESTARTSYS; + break; + } + } + finish_wait(&dev_priv->fifo_queue, &__wait); + wake_up_all(&dev_priv->fifo_queue); + DRM_INFO("Fifo noirq exit.\n"); + return ret; +} + +static int vmw_fifo_wait(struct vmw_private *dev_priv, + uint32_t bytes, bool interruptible, + unsigned long timeout) +{ + long ret = 1L; + unsigned long irq_flags; + + if (likely(!vmw_fifo_is_full(dev_priv, bytes))) + return 0; + + vmw_fifo_ping_host(dev_priv, SVGA_SYNC_FIFOFULL); + if (!(dev_priv->capabilities & SVGA_CAP_IRQMASK)) + return vmw_fifo_wait_noirq(dev_priv, bytes, + interruptible, timeout); + + mutex_lock(&dev_priv->hw_mutex); + if (atomic_add_return(1, &dev_priv->fifo_queue_waiters) > 0) { + spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); + outl(SVGA_IRQFLAG_FIFO_PROGRESS, + dev_priv->io_start + VMWGFX_IRQSTATUS_PORT); + vmw_write(dev_priv, SVGA_REG_IRQMASK, + vmw_read(dev_priv, SVGA_REG_IRQMASK) | + SVGA_IRQFLAG_FIFO_PROGRESS); + spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); + } + mutex_unlock(&dev_priv->hw_mutex); + + if (interruptible) + ret = wait_event_interruptible_timeout + (dev_priv->fifo_queue, + !vmw_fifo_is_full(dev_priv, bytes), timeout); + else + ret = wait_event_timeout + (dev_priv->fifo_queue, + !vmw_fifo_is_full(dev_priv, bytes), timeout); + + if (unlikely(ret == 0)) + ret = -EBUSY; + else if (likely(ret > 0)) + ret = 0; + + mutex_lock(&dev_priv->hw_mutex); + if (atomic_dec_and_test(&dev_priv->fifo_queue_waiters)) { + spin_lock_irqsave(&dev_priv->irq_lock, irq_flags); + vmw_write(dev_priv, SVGA_REG_IRQMASK, + vmw_read(dev_priv, SVGA_REG_IRQMASK) & + ~SVGA_IRQFLAG_FIFO_PROGRESS); + spin_unlock_irqrestore(&dev_priv->irq_lock, irq_flags); + } + mutex_unlock(&dev_priv->hw_mutex); + + return ret; +} + +void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes) +{ + struct vmw_fifo_state *fifo_state = &dev_priv->fifo; + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t max; + uint32_t min; + uint32_t next_cmd; + uint32_t reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE; + int ret; + + mutex_lock(&fifo_state->fifo_mutex); + max = ioread32(fifo_mem + SVGA_FIFO_MAX); + min = ioread32(fifo_mem + SVGA_FIFO_MIN); + next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); + + if (unlikely(bytes >= (max - min))) + goto out_err; + + BUG_ON(fifo_state->reserved_size != 0); + BUG_ON(fifo_state->dynamic_buffer != NULL); + + fifo_state->reserved_size = bytes; + + while (1) { + uint32_t stop = ioread32(fifo_mem + SVGA_FIFO_STOP); + bool need_bounce = false; + bool reserve_in_place = false; + + if (next_cmd >= stop) { + if (likely((next_cmd + bytes < max || + (next_cmd + bytes == max && stop > min)))) + reserve_in_place = true; + + else if (vmw_fifo_is_full(dev_priv, bytes)) { + ret = vmw_fifo_wait(dev_priv, bytes, + false, 3 * HZ); + if (unlikely(ret != 0)) + goto out_err; + } else + need_bounce = true; + + } else { + + if (likely((next_cmd + bytes < stop))) + reserve_in_place = true; + else { + ret = vmw_fifo_wait(dev_priv, bytes, + false, 3 * HZ); + if (unlikely(ret != 0)) + goto out_err; + } + } + + if (reserve_in_place) { + if (reserveable || bytes <= sizeof(uint32_t)) { + fifo_state->using_bounce_buffer = false; + + if (reserveable) + iowrite32(bytes, fifo_mem + + SVGA_FIFO_RESERVED); + return fifo_mem + (next_cmd >> 2); + } else { + need_bounce = true; + } + } + + if (need_bounce) { + fifo_state->using_bounce_buffer = true; + if (bytes < fifo_state->static_buffer_size) + return fifo_state->static_buffer; + else { + fifo_state->dynamic_buffer = vmalloc(bytes); + return fifo_state->dynamic_buffer; + } + } + } +out_err: + fifo_state->reserved_size = 0; + mutex_unlock(&fifo_state->fifo_mutex); + return NULL; +} + +static void vmw_fifo_res_copy(struct vmw_fifo_state *fifo_state, + __le32 __iomem *fifo_mem, + uint32_t next_cmd, + uint32_t max, uint32_t min, uint32_t bytes) +{ + uint32_t chunk_size = max - next_cmd; + uint32_t rest; + uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ? + fifo_state->dynamic_buffer : fifo_state->static_buffer; + + if (bytes < chunk_size) + chunk_size = bytes; + + iowrite32(bytes, fifo_mem + SVGA_FIFO_RESERVED); + mb(); + memcpy_toio(fifo_mem + (next_cmd >> 2), buffer, chunk_size); + rest = bytes - chunk_size; + if (rest) + memcpy_toio(fifo_mem + (min >> 2), buffer + (chunk_size >> 2), + rest); +} + +static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state, + __le32 __iomem *fifo_mem, + uint32_t next_cmd, + uint32_t max, uint32_t min, uint32_t bytes) +{ + uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ? + fifo_state->dynamic_buffer : fifo_state->static_buffer; + + while (bytes > 0) { + iowrite32(*buffer++, fifo_mem + (next_cmd >> 2)); + next_cmd += sizeof(uint32_t); + if (unlikely(next_cmd == max)) + next_cmd = min; + mb(); + iowrite32(next_cmd, fifo_mem + SVGA_FIFO_NEXT_CMD); + mb(); + bytes -= sizeof(uint32_t); + } +} + +void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes) +{ + struct vmw_fifo_state *fifo_state = &dev_priv->fifo; + __le32 __iomem *fifo_mem = dev_priv->mmio_virt; + uint32_t next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); + uint32_t max = ioread32(fifo_mem + SVGA_FIFO_MAX); + uint32_t min = ioread32(fifo_mem + SVGA_FIFO_MIN); + bool reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE; + + BUG_ON((bytes & 3) != 0); + BUG_ON(bytes > fifo_state->reserved_size); + + fifo_state->reserved_size = 0; + + if (fifo_state->using_bounce_buffer) { + if (reserveable) + vmw_fifo_res_copy(fifo_state, fifo_mem, + next_cmd, max, min, bytes); + else + vmw_fifo_slow_copy(fifo_state, fifo_mem, + next_cmd, max, min, bytes); + + if (fifo_state->dynamic_buffer) { + vfree(fifo_state->dynamic_buffer); + fifo_state->dynamic_buffer = NULL; + } + + } + + down_write(&fifo_state->rwsem); + if (fifo_state->using_bounce_buffer || reserveable) { + next_cmd += bytes; + if (next_cmd >= max) + next_cmd -= max - min; + mb(); + iowrite32(next_cmd, fifo_mem + SVGA_FIFO_NEXT_CMD); + } + + if (reserveable) + iowrite32(0, fifo_mem + SVGA_FIFO_RESERVED); + mb(); + up_write(&fifo_state->rwsem); + vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); + mutex_unlock(&fifo_state->fifo_mutex); +} + +int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence) +{ + struct vmw_fifo_state *fifo_state = &dev_priv->fifo; + struct svga_fifo_cmd_fence *cmd_fence; + void *fm; + int ret = 0; + uint32_t bytes = sizeof(__le32) + sizeof(*cmd_fence); + + fm = vmw_fifo_reserve(dev_priv, bytes); + if (unlikely(fm == NULL)) { + *sequence = atomic_read(&dev_priv->fence_seq); + ret = -ENOMEM; + (void)vmw_fallback_wait(dev_priv, false, true, *sequence, + false, 3*HZ); + goto out_err; + } + + do { + *sequence = atomic_add_return(1, &dev_priv->fence_seq); + } while (*sequence == 0); + + if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) { + + /* + * Don't request hardware to send a fence. The + * waiting code in vmwgfx_irq.c will emulate this. + */ + + vmw_fifo_commit(dev_priv, 0); + return 0; + } + + *(__le32 *) fm = cpu_to_le32(SVGA_CMD_FENCE); + cmd_fence = (struct svga_fifo_cmd_fence *) + ((unsigned long)fm + sizeof(__le32)); + + iowrite32(*sequence, &cmd_fence->fence); + fifo_state->last_buffer_add = true; + vmw_fifo_commit(dev_priv, bytes); + fifo_state->last_buffer_add = false; + +out_err: + return ret; +} + +/** + * Map the first page of the FIFO read-only to user-space. + */ + +static int vmw_fifo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +{ + int ret; + unsigned long address = (unsigned long)vmf->virtual_address; + + if (address != vma->vm_start) + return VM_FAULT_SIGBUS; + + ret = vm_insert_pfn(vma, address, vma->vm_pgoff); + if (likely(ret == -EBUSY || ret == 0)) + return VM_FAULT_NOPAGE; + else if (ret == -ENOMEM) + return VM_FAULT_OOM; + + return VM_FAULT_SIGBUS; +} + +static struct vm_operations_struct vmw_fifo_vm_ops = { + .fault = vmw_fifo_vm_fault, + .open = NULL, + .close = NULL +}; + +int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct drm_file *file_priv; + struct vmw_private *dev_priv; + + file_priv = (struct drm_file *)filp->private_data; + dev_priv = vmw_priv(file_priv->minor->dev); + + if (vma->vm_pgoff != (dev_priv->mmio_start >> PAGE_SHIFT) || + (vma->vm_end - vma->vm_start) != PAGE_SIZE) + return -EINVAL; + + vma->vm_flags &= ~(VM_WRITE | VM_MAYWRITE); + vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_SHARED; + vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); + vma->vm_page_prot = ttm_io_prot(TTM_PL_FLAG_UNCACHED, + vma->vm_page_prot); + vma->vm_ops = &vmw_fifo_vm_ops; + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c @@ -0,0 +1,213 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_drv.h" +#include "drmP.h" +#include "ttm/ttm_bo_driver.h" + +/** + * FIXME: Adjust to the ttm lowmem / highmem storage to minimize + * the number of used descriptors. + */ + +static int vmw_gmr_build_descriptors(struct list_head *desc_pages, + struct page *pages[], + unsigned long num_pages) +{ + struct page *page, *next; + struct svga_guest_mem_descriptor *page_virtual = NULL; + struct svga_guest_mem_descriptor *desc_virtual = NULL; + unsigned int desc_per_page; + unsigned long prev_pfn; + unsigned long pfn; + int ret; + + desc_per_page = PAGE_SIZE / + sizeof(struct svga_guest_mem_descriptor) - 1; + + while (likely(num_pages != 0)) { + page = alloc_page(__GFP_HIGHMEM); + if (unlikely(page == NULL)) { + ret = -ENOMEM; + goto out_err; + } + + list_add_tail(&page->lru, desc_pages); + + /* + * Point previous page terminating descriptor to this + * page before unmapping it. + */ + + if (likely(page_virtual != NULL)) { + desc_virtual->ppn = page_to_pfn(page); + kunmap_atomic(page_virtual, KM_USER0); + } + + page_virtual = kmap_atomic(page, KM_USER0); + desc_virtual = page_virtual - 1; + prev_pfn = ~(0UL); + + while (likely(num_pages != 0)) { + pfn = page_to_pfn(*pages); + + if (pfn != prev_pfn + 1) { + + if (desc_virtual - page_virtual == + desc_per_page - 1) + break; + + (++desc_virtual)->ppn = cpu_to_le32(pfn); + desc_virtual->num_pages = cpu_to_le32(1); + } else { + uint32_t tmp = + le32_to_cpu(desc_virtual->num_pages); + desc_virtual->num_pages = cpu_to_le32(tmp + 1); + } + prev_pfn = pfn; + --num_pages; + ++pages; + } + + (++desc_virtual)->ppn = cpu_to_le32(0); + desc_virtual->num_pages = cpu_to_le32(0); + } + + if (likely(page_virtual != NULL)) + kunmap_atomic(page_virtual, KM_USER0); + + return 0; +out_err: + list_for_each_entry_safe(page, next, desc_pages, lru) { + list_del_init(&page->lru); + __free_page(page); + } + return ret; +} + +static inline void vmw_gmr_free_descriptors(struct list_head *desc_pages) +{ + struct page *page, *next; + + list_for_each_entry_safe(page, next, desc_pages, lru) { + list_del_init(&page->lru); + __free_page(page); + } +} + +static void vmw_gmr_fire_descriptors(struct vmw_private *dev_priv, + int gmr_id, struct list_head *desc_pages) +{ + struct page *page; + + if (unlikely(list_empty(desc_pages))) + return; + + page = list_entry(desc_pages->next, struct page, lru); + + mutex_lock(&dev_priv->hw_mutex); + + vmw_write(dev_priv, SVGA_REG_GMR_ID, gmr_id); + wmb(); + vmw_write(dev_priv, SVGA_REG_GMR_DESCRIPTOR, page_to_pfn(page)); + mb(); + + mutex_unlock(&dev_priv->hw_mutex); + +} + +/** + * FIXME: Adjust to the ttm lowmem / highmem storage to minimize + * the number of used descriptors. + */ + +static unsigned long vmw_gmr_count_descriptors(struct page *pages[], + unsigned long num_pages) +{ + unsigned long prev_pfn = ~(0UL); + unsigned long pfn; + unsigned long descriptors = 0; + + while (num_pages--) { + pfn = page_to_pfn(*pages++); + if (prev_pfn + 1 != pfn) + ++descriptors; + prev_pfn = pfn; + } + + return descriptors; +} + +int vmw_gmr_bind(struct vmw_private *dev_priv, + struct ttm_buffer_object *bo) +{ + struct ttm_tt *ttm = bo->ttm; + unsigned long descriptors; + int ret; + uint32_t id; + struct list_head desc_pages; + + if (!(dev_priv->capabilities & SVGA_CAP_GMR)) + return -EINVAL; + + ret = ttm_tt_populate(ttm); + if (unlikely(ret != 0)) + return ret; + + descriptors = vmw_gmr_count_descriptors(ttm->pages, ttm->num_pages); + if (unlikely(descriptors > dev_priv->max_gmr_descriptors)) + return -EINVAL; + + INIT_LIST_HEAD(&desc_pages); + ret = vmw_gmr_build_descriptors(&desc_pages, ttm->pages, + ttm->num_pages); + if (unlikely(ret != 0)) + return ret; + + ret = vmw_gmr_id_alloc(dev_priv, &id); + if (unlikely(ret != 0)) + goto out_no_id; + + vmw_gmr_fire_descriptors(dev_priv, id, &desc_pages); + vmw_gmr_free_descriptors(&desc_pages); + vmw_dmabuf_set_gmr(bo, id); + return 0; + +out_no_id: + vmw_gmr_free_descriptors(&desc_pages); + return ret; +} + +void vmw_gmr_unbind(struct vmw_private *dev_priv, int gmr_id) +{ + mutex_lock(&dev_priv->hw_mutex); + vmw_write(dev_priv, SVGA_REG_GMR_ID, gmr_id); + wmb(); + vmw_write(dev_priv, SVGA_REG_GMR_DESCRIPTOR, 0); + mb(); + mutex_unlock(&dev_priv->hw_mutex); +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c @@ -0,0 +1,716 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "vmwgfx_drv.h" +#include "vmwgfx_reg.h" +#include "ttm/ttm_bo_api.h" +#include "ttm/ttm_placement.h" + +static int vmw_cmd_invalid(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + return capable(CAP_SYS_ADMIN) ? : -EINVAL; +} + +static int vmw_cmd_ok(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + return 0; +} + +static int vmw_cmd_cid_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_cid_cmd { + SVGA3dCmdHeader header; + __le32 cid; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_cid_cmd, header); + if (likely(sw_context->cid_valid && cmd->cid == sw_context->last_cid)) + return 0; + + ret = vmw_context_check(dev_priv, sw_context->tfile, cmd->cid); + if (unlikely(ret != 0)) { + DRM_ERROR("Could not find or use context %u\n", + (unsigned) cmd->cid); + return ret; + } + + sw_context->last_cid = cmd->cid; + sw_context->cid_valid = true; + + return 0; +} + +static int vmw_cmd_sid_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + uint32_t *sid) +{ + if (*sid == SVGA3D_INVALID_ID) + return 0; + + if (unlikely((!sw_context->sid_valid || + *sid != sw_context->last_sid))) { + int real_id; + int ret = vmw_surface_check(dev_priv, sw_context->tfile, + *sid, &real_id); + + if (unlikely(ret != 0)) { + DRM_ERROR("Could ot find or use surface 0x%08x " + "address 0x%08lx\n", + (unsigned int) *sid, + (unsigned long) sid); + return ret; + } + + sw_context->last_sid = *sid; + sw_context->sid_valid = true; + *sid = real_id; + sw_context->sid_translation = real_id; + } else + *sid = sw_context->sid_translation; + + return 0; +} + + +static int vmw_cmd_set_render_target_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_sid_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdSetRenderTarget body; + } *cmd; + int ret; + + ret = vmw_cmd_cid_check(dev_priv, sw_context, header); + if (unlikely(ret != 0)) + return ret; + + cmd = container_of(header, struct vmw_sid_cmd, header); + ret = vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.target.sid); + return ret; +} + +static int vmw_cmd_surface_copy_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_sid_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdSurfaceCopy body; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_sid_cmd, header); + ret = vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.src.sid); + if (unlikely(ret != 0)) + return ret; + return vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.dest.sid); +} + +static int vmw_cmd_stretch_blt_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_sid_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdSurfaceStretchBlt body; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_sid_cmd, header); + ret = vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.src.sid); + if (unlikely(ret != 0)) + return ret; + return vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.dest.sid); +} + +static int vmw_cmd_blt_surf_screen_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_sid_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdBlitSurfaceToScreen body; + } *cmd; + + cmd = container_of(header, struct vmw_sid_cmd, header); + return vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.srcImage.sid); +} + +static int vmw_cmd_present_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_sid_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdPresent body; + } *cmd; + + cmd = container_of(header, struct vmw_sid_cmd, header); + return vmw_cmd_sid_check(dev_priv, sw_context, &cmd->body.sid); +} + +static int vmw_translate_guest_ptr(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGAGuestPtr *ptr, + struct vmw_dma_buffer **vmw_bo_p) +{ + struct vmw_dma_buffer *vmw_bo = NULL; + struct ttm_buffer_object *bo; + uint32_t handle = ptr->gmrId; + struct vmw_relocation *reloc; + uint32_t cur_validate_node; + struct ttm_validate_buffer *val_buf; + int ret; + + ret = vmw_user_dmabuf_lookup(sw_context->tfile, handle, &vmw_bo); + if (unlikely(ret != 0)) { + DRM_ERROR("Could not find or use GMR region.\n"); + return -EINVAL; + } + bo = &vmw_bo->base; + + if (unlikely(sw_context->cur_reloc >= VMWGFX_MAX_RELOCATIONS)) { + DRM_ERROR("Max number relocations per submission" + " exceeded\n"); + ret = -EINVAL; + goto out_no_reloc; + } + + reloc = &sw_context->relocs[sw_context->cur_reloc++]; + reloc->location = ptr; + + cur_validate_node = vmw_dmabuf_validate_node(bo, sw_context->cur_val_buf); + if (unlikely(cur_validate_node >= VMWGFX_MAX_GMRS)) { + DRM_ERROR("Max number of DMA buffers per submission" + " exceeded.\n"); + ret = -EINVAL; + goto out_no_reloc; + } + + reloc->index = cur_validate_node; + if (unlikely(cur_validate_node == sw_context->cur_val_buf)) { + val_buf = &sw_context->val_bufs[cur_validate_node]; + val_buf->bo = ttm_bo_reference(bo); + val_buf->new_sync_obj_arg = (void *) dev_priv; + list_add_tail(&val_buf->head, &sw_context->validate_nodes); + ++sw_context->cur_val_buf; + } + *vmw_bo_p = vmw_bo; + return 0; + +out_no_reloc: + vmw_dmabuf_unreference(&vmw_bo); + vmw_bo_p = NULL; + return ret; +} + +static int vmw_cmd_end_query(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_dma_buffer *vmw_bo; + struct vmw_query_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdEndQuery q; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_query_cmd, header); + ret = vmw_cmd_cid_check(dev_priv, sw_context, header); + if (unlikely(ret != 0)) + return ret; + + ret = vmw_translate_guest_ptr(dev_priv, sw_context, + &cmd->q.guestResult, + &vmw_bo); + if (unlikely(ret != 0)) + return ret; + + vmw_dmabuf_unreference(&vmw_bo); + return 0; +} + +static int vmw_cmd_wait_query(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_dma_buffer *vmw_bo; + struct vmw_query_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdWaitForQuery q; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_query_cmd, header); + ret = vmw_cmd_cid_check(dev_priv, sw_context, header); + if (unlikely(ret != 0)) + return ret; + + ret = vmw_translate_guest_ptr(dev_priv, sw_context, + &cmd->q.guestResult, + &vmw_bo); + if (unlikely(ret != 0)) + return ret; + + vmw_dmabuf_unreference(&vmw_bo); + return 0; +} + + +static int vmw_cmd_dma(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_dma_buffer *vmw_bo = NULL; + struct ttm_buffer_object *bo; + struct vmw_surface *srf = NULL; + struct vmw_dma_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdSurfaceDMA dma; + } *cmd; + int ret; + + cmd = container_of(header, struct vmw_dma_cmd, header); + ret = vmw_translate_guest_ptr(dev_priv, sw_context, + &cmd->dma.guest.ptr, + &vmw_bo); + if (unlikely(ret != 0)) + return ret; + + bo = &vmw_bo->base; + ret = vmw_user_surface_lookup_handle(dev_priv, sw_context->tfile, + cmd->dma.host.sid, &srf); + if (ret) { + DRM_ERROR("could not find surface\n"); + goto out_no_reloc; + } + + /** + * Patch command stream with device SID. + */ + + cmd->dma.host.sid = srf->res.id; + vmw_kms_cursor_snoop(srf, sw_context->tfile, bo, header); + /** + * FIXME: May deadlock here when called from the + * command parsing code. + */ + vmw_surface_unreference(&srf); + +out_no_reloc: + vmw_dmabuf_unreference(&vmw_bo); + return ret; +} + +static int vmw_cmd_draw(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_draw_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdDrawPrimitives body; + } *cmd; + SVGA3dVertexDecl *decl = (SVGA3dVertexDecl *)( + (unsigned long)header + sizeof(*cmd)); + SVGA3dPrimitiveRange *range; + uint32_t i; + uint32_t maxnum; + int ret; + + ret = vmw_cmd_cid_check(dev_priv, sw_context, header); + if (unlikely(ret != 0)) + return ret; + + cmd = container_of(header, struct vmw_draw_cmd, header); + maxnum = (header->size - sizeof(cmd->body)) / sizeof(*decl); + + if (unlikely(cmd->body.numVertexDecls > maxnum)) { + DRM_ERROR("Illegal number of vertex declarations.\n"); + return -EINVAL; + } + + for (i = 0; i < cmd->body.numVertexDecls; ++i, ++decl) { + ret = vmw_cmd_sid_check(dev_priv, sw_context, + &decl->array.surfaceId); + if (unlikely(ret != 0)) + return ret; + } + + maxnum = (header->size - sizeof(cmd->body) - + cmd->body.numVertexDecls * sizeof(*decl)) / sizeof(*range); + if (unlikely(cmd->body.numRanges > maxnum)) { + DRM_ERROR("Illegal number of index ranges.\n"); + return -EINVAL; + } + + range = (SVGA3dPrimitiveRange *) decl; + for (i = 0; i < cmd->body.numRanges; ++i, ++range) { + ret = vmw_cmd_sid_check(dev_priv, sw_context, + &range->indexArray.surfaceId); + if (unlikely(ret != 0)) + return ret; + } + return 0; +} + + +static int vmw_cmd_tex_state(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + SVGA3dCmdHeader *header) +{ + struct vmw_tex_state_cmd { + SVGA3dCmdHeader header; + SVGA3dCmdSetTextureState state; + }; + + SVGA3dTextureState *last_state = (SVGA3dTextureState *) + ((unsigned long) header + header->size + sizeof(header)); + SVGA3dTextureState *cur_state = (SVGA3dTextureState *) + ((unsigned long) header + sizeof(struct vmw_tex_state_cmd)); + int ret; + + ret = vmw_cmd_cid_check(dev_priv, sw_context, header); + if (unlikely(ret != 0)) + return ret; + + for (; cur_state < last_state; ++cur_state) { + if (likely(cur_state->name != SVGA3D_TS_BIND_TEXTURE)) + continue; + + ret = vmw_cmd_sid_check(dev_priv, sw_context, + &cur_state->value); + if (unlikely(ret != 0)) + return ret; + } + + return 0; +} + + +typedef int (*vmw_cmd_func) (struct vmw_private *, + struct vmw_sw_context *, + SVGA3dCmdHeader *); + +#define VMW_CMD_DEF(cmd, func) \ + [cmd - SVGA_3D_CMD_BASE] = func + +static vmw_cmd_func vmw_cmd_funcs[SVGA_3D_CMD_MAX] = { + VMW_CMD_DEF(SVGA_3D_CMD_SURFACE_DEFINE, &vmw_cmd_invalid), + VMW_CMD_DEF(SVGA_3D_CMD_SURFACE_DESTROY, &vmw_cmd_invalid), + VMW_CMD_DEF(SVGA_3D_CMD_SURFACE_COPY, &vmw_cmd_surface_copy_check), + VMW_CMD_DEF(SVGA_3D_CMD_SURFACE_STRETCHBLT, &vmw_cmd_stretch_blt_check), + VMW_CMD_DEF(SVGA_3D_CMD_SURFACE_DMA, &vmw_cmd_dma), + VMW_CMD_DEF(SVGA_3D_CMD_CONTEXT_DEFINE, &vmw_cmd_invalid), + VMW_CMD_DEF(SVGA_3D_CMD_CONTEXT_DESTROY, &vmw_cmd_invalid), + VMW_CMD_DEF(SVGA_3D_CMD_SETTRANSFORM, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETZRANGE, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETRENDERSTATE, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETRENDERTARGET, + &vmw_cmd_set_render_target_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETTEXTURESTATE, &vmw_cmd_tex_state), + VMW_CMD_DEF(SVGA_3D_CMD_SETMATERIAL, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETLIGHTDATA, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETLIGHTENABLED, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETVIEWPORT, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SETCLIPPLANE, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_CLEAR, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_PRESENT, &vmw_cmd_present_check), + VMW_CMD_DEF(SVGA_3D_CMD_SHADER_DEFINE, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SHADER_DESTROY, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SET_SHADER, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_SET_SHADER_CONST, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_DRAW_PRIMITIVES, &vmw_cmd_draw), + VMW_CMD_DEF(SVGA_3D_CMD_SETSCISSORRECT, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_BEGIN_QUERY, &vmw_cmd_cid_check), + VMW_CMD_DEF(SVGA_3D_CMD_END_QUERY, &vmw_cmd_end_query), + VMW_CMD_DEF(SVGA_3D_CMD_WAIT_FOR_QUERY, &vmw_cmd_wait_query), + VMW_CMD_DEF(SVGA_3D_CMD_PRESENT_READBACK, &vmw_cmd_ok), + VMW_CMD_DEF(SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN, + &vmw_cmd_blt_surf_screen_check) +}; + +static int vmw_cmd_check(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + void *buf, uint32_t *size) +{ + uint32_t cmd_id; + uint32_t size_remaining = *size; + SVGA3dCmdHeader *header = (SVGA3dCmdHeader *) buf; + int ret; + + cmd_id = ((uint32_t *)buf)[0]; + if (cmd_id == SVGA_CMD_UPDATE) { + *size = 5 << 2; + return 0; + } + + cmd_id = le32_to_cpu(header->id); + *size = le32_to_cpu(header->size) + sizeof(SVGA3dCmdHeader); + + cmd_id -= SVGA_3D_CMD_BASE; + if (unlikely(*size > size_remaining)) + goto out_err; + + if (unlikely(cmd_id >= SVGA_3D_CMD_MAX - SVGA_3D_CMD_BASE)) + goto out_err; + + ret = vmw_cmd_funcs[cmd_id](dev_priv, sw_context, header); + if (unlikely(ret != 0)) + goto out_err; + + return 0; +out_err: + DRM_ERROR("Illegal / Invalid SVGA3D command: %d\n", + cmd_id + SVGA_3D_CMD_BASE); + return -EINVAL; +} + +static int vmw_cmd_check_all(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context, + void *buf, uint32_t size) +{ + int32_t cur_size = size; + int ret; + + while (cur_size > 0) { + size = cur_size; + ret = vmw_cmd_check(dev_priv, sw_context, buf, &size); + if (unlikely(ret != 0)) + return ret; + buf = (void *)((unsigned long) buf + size); + cur_size -= size; + } + + if (unlikely(cur_size != 0)) { + DRM_ERROR("Command verifier out of sync.\n"); + return -EINVAL; + } + + return 0; +} + +static void vmw_free_relocations(struct vmw_sw_context *sw_context) +{ + sw_context->cur_reloc = 0; +} + +static void vmw_apply_relocations(struct vmw_sw_context *sw_context) +{ + uint32_t i; + struct vmw_relocation *reloc; + struct ttm_validate_buffer *validate; + struct ttm_buffer_object *bo; + + for (i = 0; i < sw_context->cur_reloc; ++i) { + reloc = &sw_context->relocs[i]; + validate = &sw_context->val_bufs[reloc->index]; + bo = validate->bo; + reloc->location->offset += bo->offset; + reloc->location->gmrId = vmw_dmabuf_gmr(bo); + } + vmw_free_relocations(sw_context); +} + +static void vmw_clear_validations(struct vmw_sw_context *sw_context) +{ + struct ttm_validate_buffer *entry, *next; + + list_for_each_entry_safe(entry, next, &sw_context->validate_nodes, + head) { + list_del(&entry->head); + vmw_dmabuf_validate_clear(entry->bo); + ttm_bo_unref(&entry->bo); + sw_context->cur_val_buf--; + } + BUG_ON(sw_context->cur_val_buf != 0); +} + +static int vmw_validate_single_buffer(struct vmw_private *dev_priv, + struct ttm_buffer_object *bo) +{ + int ret; + + if (vmw_dmabuf_gmr(bo) != SVGA_GMR_NULL) + return 0; + + /** + * Put BO in VRAM, only if there is space. + */ + + ret = ttm_bo_validate(bo, &vmw_vram_sys_placement, true, false); + if (unlikely(ret == -ERESTARTSYS)) + return ret; + + /** + * Otherwise, set it up as GMR. + */ + + if (vmw_dmabuf_gmr(bo) != SVGA_GMR_NULL) + return 0; + + ret = vmw_gmr_bind(dev_priv, bo); + if (likely(ret == 0 || ret == -ERESTARTSYS)) + return ret; + + /** + * If that failed, try VRAM again, this time evicting + * previous contents. + */ + + ret = ttm_bo_validate(bo, &vmw_vram_placement, true, false); + return ret; +} + + +static int vmw_validate_buffers(struct vmw_private *dev_priv, + struct vmw_sw_context *sw_context) +{ + struct ttm_validate_buffer *entry; + int ret; + + list_for_each_entry(entry, &sw_context->validate_nodes, head) { + ret = vmw_validate_single_buffer(dev_priv, entry->bo); + if (unlikely(ret != 0)) + return ret; + } + return 0; +} + +int vmw_execbuf_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct vmw_private *dev_priv = vmw_priv(dev); + struct drm_vmw_execbuf_arg *arg = (struct drm_vmw_execbuf_arg *)data; + struct drm_vmw_fence_rep fence_rep; + struct drm_vmw_fence_rep __user *user_fence_rep; + int ret; + void *user_cmd; + void *cmd; + uint32_t sequence; + struct vmw_sw_context *sw_context = &dev_priv->ctx; + struct vmw_master *vmaster = vmw_master(file_priv->master); + + ret = ttm_read_lock(&vmaster->lock, true); + if (unlikely(ret != 0)) + return ret; + + ret = mutex_lock_interruptible(&dev_priv->cmdbuf_mutex); + if (unlikely(ret != 0)) { + ret = -ERESTARTSYS; + goto out_no_cmd_mutex; + } + + cmd = vmw_fifo_reserve(dev_priv, arg->command_size); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Failed reserving fifo space for commands.\n"); + ret = -ENOMEM; + goto out_unlock; + } + + user_cmd = (void __user *)(unsigned long)arg->commands; + ret = copy_from_user(cmd, user_cmd, arg->command_size); + + if (unlikely(ret != 0)) { + DRM_ERROR("Failed copying commands.\n"); + goto out_commit; + } + + sw_context->tfile = vmw_fpriv(file_priv)->tfile; + sw_context->cid_valid = false; + sw_context->sid_valid = false; + sw_context->cur_reloc = 0; + sw_context->cur_val_buf = 0; + + INIT_LIST_HEAD(&sw_context->validate_nodes); + + ret = vmw_cmd_check_all(dev_priv, sw_context, cmd, arg->command_size); + if (unlikely(ret != 0)) + goto out_err; + ret = ttm_eu_reserve_buffers(&sw_context->validate_nodes, + dev_priv->val_seq++); + if (unlikely(ret != 0)) + goto out_err; + + ret = vmw_validate_buffers(dev_priv, sw_context); + if (unlikely(ret != 0)) + goto out_err; + + vmw_apply_relocations(sw_context); + vmw_fifo_commit(dev_priv, arg->command_size); + + ret = vmw_fifo_send_fence(dev_priv, &sequence); + + ttm_eu_fence_buffer_objects(&sw_context->validate_nodes, + (void *)(unsigned long) sequence); + vmw_clear_validations(sw_context); + mutex_unlock(&dev_priv->cmdbuf_mutex); + + /* + * This error is harmless, because if fence submission fails, + * vmw_fifo_send_fence will sync. + */ + + if (ret != 0) + DRM_ERROR("Fence submission error. Syncing.\n"); + + fence_rep.error = ret; + fence_rep.fence_seq = (uint64_t) sequence; + + user_fence_rep = (struct drm_vmw_fence_rep __user *) + (unsigned long)arg->fence_rep; + + /* + * copy_to_user errors will be detected by user space not + * seeing fence_rep::error filled in. + */ + + ret = copy_to_user(user_fence_rep, &fence_rep, sizeof(fence_rep)); + + vmw_kms_cursor_post_execbuf(dev_priv); + ttm_read_unlock(&vmaster->lock); + return 0; +out_err: + vmw_free_relocations(sw_context); + ttm_eu_backoff_reservation(&sw_context->validate_nodes); + vmw_clear_validations(sw_context); +out_commit: + vmw_fifo_commit(dev_priv, 0); +out_unlock: + mutex_unlock(&dev_priv->cmdbuf_mutex); +out_no_cmd_mutex: + ttm_read_unlock(&vmaster->lock); + return ret; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/Makefile +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/Makefile @@ -0,0 +1,9 @@ + +ccflags-y := -Iinclude/drm + +vmwgfx-y := vmwgfx_execbuf.o vmwgfx_gmr.o vmwgfx_kms.o vmwgfx_drv.o \ + vmwgfx_fb.o vmwgfx_ioctl.o vmwgfx_resource.o vmwgfx_buffer.o \ + vmwgfx_fifo.o vmwgfx_irq.o vmwgfx_ldu.o vmwgfx_ttm_glue.o \ + vmwgfx_overlay.o + +obj-$(CONFIG_DRM_VMWGFX) := vmwgfx.o --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c @@ -0,0 +1,99 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "drmP.h" +#include "vmwgfx_drv.h" + +int vmw_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct drm_file *file_priv; + struct vmw_private *dev_priv; + + if (unlikely(vma->vm_pgoff < VMWGFX_FILE_PAGE_OFFSET)) { + if (vmw_fifo_mmap(filp, vma) == 0) + return 0; + return drm_mmap(filp, vma); + } + + file_priv = (struct drm_file *)filp->private_data; + dev_priv = vmw_priv(file_priv->minor->dev); + return ttm_bo_mmap(filp, vma, &dev_priv->bdev); +} + +static int vmw_ttm_mem_global_init(struct ttm_global_reference *ref) +{ + DRM_INFO("global init.\n"); + return ttm_mem_global_init(ref->object); +} + +static void vmw_ttm_mem_global_release(struct ttm_global_reference *ref) +{ + ttm_mem_global_release(ref->object); +} + +int vmw_ttm_global_init(struct vmw_private *dev_priv) +{ + struct ttm_global_reference *global_ref; + int ret; + + global_ref = &dev_priv->mem_global_ref; + global_ref->global_type = TTM_GLOBAL_TTM_MEM; + global_ref->size = sizeof(struct ttm_mem_global); + global_ref->init = &vmw_ttm_mem_global_init; + global_ref->release = &vmw_ttm_mem_global_release; + + ret = ttm_global_item_ref(global_ref); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed setting up TTM memory accounting.\n"); + return ret; + } + + dev_priv->bo_global_ref.mem_glob = + dev_priv->mem_global_ref.object; + global_ref = &dev_priv->bo_global_ref.ref; + global_ref->global_type = TTM_GLOBAL_TTM_BO; + global_ref->size = sizeof(struct ttm_bo_global); + global_ref->init = &ttm_bo_global_init; + global_ref->release = &ttm_bo_global_release; + ret = ttm_global_item_ref(global_ref); + + if (unlikely(ret != 0)) { + DRM_ERROR("Failed setting up TTM buffer objects.\n"); + goto out_no_bo; + } + + return 0; +out_no_bo: + ttm_global_item_unref(&dev_priv->mem_global_ref); + return ret; +} + +void vmw_ttm_global_release(struct vmw_private *dev_priv) +{ + ttm_global_item_unref(&dev_priv->bo_global_ref.ref); + ttm_global_item_unref(&dev_priv->mem_global_ref); +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c @@ -0,0 +1,737 @@ +/************************************************************************** + * + * Copyright © 2007 David Airlie + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "drmP.h" +#include "vmwgfx_drv.h" + +#include "ttm/ttm_placement.h" + +#define VMW_DIRTY_DELAY (HZ / 30) + +struct vmw_fb_par { + struct vmw_private *vmw_priv; + + void *vmalloc; + + struct vmw_dma_buffer *vmw_bo; + struct ttm_bo_kmap_obj map; + + u32 pseudo_palette[17]; + + unsigned depth; + unsigned bpp; + + unsigned max_width; + unsigned max_height; + + void *bo_ptr; + unsigned bo_size; + bool bo_iowrite; + + struct { + spinlock_t lock; + bool active; + unsigned x1; + unsigned y1; + unsigned x2; + unsigned y2; + } dirty; +}; + +static int vmw_fb_setcolreg(unsigned regno, unsigned red, unsigned green, + unsigned blue, unsigned transp, + struct fb_info *info) +{ + struct vmw_fb_par *par = info->par; + u32 *pal = par->pseudo_palette; + + if (regno > 15) { + DRM_ERROR("Bad regno %u.\n", regno); + return 1; + } + + switch (par->depth) { + case 24: + case 32: + pal[regno] = ((red & 0xff00) << 8) | + (green & 0xff00) | + ((blue & 0xff00) >> 8); + break; + default: + DRM_ERROR("Bad depth %u, bpp %u.\n", par->depth, par->bpp); + return 1; + } + + return 0; +} + +static int vmw_fb_check_var(struct fb_var_screeninfo *var, + struct fb_info *info) +{ + int depth = var->bits_per_pixel; + struct vmw_fb_par *par = info->par; + struct vmw_private *vmw_priv = par->vmw_priv; + + switch (var->bits_per_pixel) { + case 32: + depth = (var->transp.length > 0) ? 32 : 24; + break; + default: + DRM_ERROR("Bad bpp %u.\n", var->bits_per_pixel); + return -EINVAL; + } + + switch (depth) { + case 24: + var->red.offset = 16; + var->green.offset = 8; + var->blue.offset = 0; + var->red.length = 8; + var->green.length = 8; + var->blue.length = 8; + var->transp.length = 0; + var->transp.offset = 0; + break; + case 32: + var->red.offset = 16; + var->green.offset = 8; + var->blue.offset = 0; + var->red.length = 8; + var->green.length = 8; + var->blue.length = 8; + var->transp.length = 8; + var->transp.offset = 24; + break; + default: + DRM_ERROR("Bad depth %u.\n", depth); + return -EINVAL; + } + + /* without multimon its hard to resize */ + if (!(vmw_priv->capabilities & SVGA_CAP_MULTIMON) && + (var->xres != par->max_width || + var->yres != par->max_height)) { + DRM_ERROR("Tried to resize, but we don't have multimon\n"); + return -EINVAL; + } + + if (var->xres > par->max_width || + var->yres > par->max_height) { + DRM_ERROR("Requested geom can not fit in framebuffer\n"); + return -EINVAL; + } + + return 0; +} + +static int vmw_fb_set_par(struct fb_info *info) +{ + struct vmw_fb_par *par = info->par; + struct vmw_private *vmw_priv = par->vmw_priv; + + if (vmw_priv->capabilities & SVGA_CAP_MULTIMON) { + vmw_write(vmw_priv, SVGA_REG_NUM_GUEST_DISPLAYS, 1); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_IS_PRIMARY, true); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_X, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID); + + vmw_write(vmw_priv, SVGA_REG_ENABLE, 1); + vmw_write(vmw_priv, SVGA_REG_WIDTH, par->max_width); + vmw_write(vmw_priv, SVGA_REG_HEIGHT, par->max_height); + vmw_write(vmw_priv, SVGA_REG_BITS_PER_PIXEL, par->bpp); + vmw_write(vmw_priv, SVGA_REG_DEPTH, par->depth); + vmw_write(vmw_priv, SVGA_REG_RED_MASK, 0x00ff0000); + vmw_write(vmw_priv, SVGA_REG_GREEN_MASK, 0x0000ff00); + vmw_write(vmw_priv, SVGA_REG_BLUE_MASK, 0x000000ff); + + /* TODO check if pitch and offset changes */ + + vmw_write(vmw_priv, SVGA_REG_NUM_GUEST_DISPLAYS, 1); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, 0); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_IS_PRIMARY, true); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_X, info->var.xoffset); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, info->var.yoffset); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, info->var.xres); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, info->var.yres); + vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID); + } else { + vmw_write(vmw_priv, SVGA_REG_WIDTH, info->var.xres); + vmw_write(vmw_priv, SVGA_REG_HEIGHT, info->var.yres); + + /* TODO check if pitch and offset changes */ + } + + return 0; +} + +static int vmw_fb_pan_display(struct fb_var_screeninfo *var, + struct fb_info *info) +{ + return 0; +} + +static int vmw_fb_blank(int blank, struct fb_info *info) +{ + return 0; +} + +/* + * Dirty code + */ + +static void vmw_fb_dirty_flush(struct vmw_fb_par *par) +{ + struct vmw_private *vmw_priv = par->vmw_priv; + struct fb_info *info = vmw_priv->fb_info; + int stride = (info->fix.line_length / 4); + int *src = (int *)info->screen_base; + __le32 __iomem *vram_mem = par->bo_ptr; + unsigned long flags; + unsigned x, y, w, h; + int i, k; + struct { + uint32_t header; + SVGAFifoCmdUpdate body; + } *cmd; + + spin_lock_irqsave(&par->dirty.lock, flags); + if (!par->dirty.active) { + spin_unlock_irqrestore(&par->dirty.lock, flags); + return; + } + x = par->dirty.x1; + y = par->dirty.y1; + w = min(par->dirty.x2, info->var.xres) - x; + h = min(par->dirty.y2, info->var.yres) - y; + par->dirty.x1 = par->dirty.x2 = 0; + par->dirty.y1 = par->dirty.y2 = 0; + spin_unlock_irqrestore(&par->dirty.lock, flags); + + for (i = y * stride; i < info->fix.smem_len / 4; i += stride) { + for (k = i+x; k < i+x+w && k < info->fix.smem_len / 4; k++) + iowrite32(src[k], vram_mem + k); + } + +#if 0 + DRM_INFO("%s, (%u, %u) (%ux%u)\n", __func__, x, y, w, h); +#endif + + cmd = vmw_fifo_reserve(vmw_priv, sizeof(*cmd)); + if (unlikely(cmd == NULL)) { + DRM_ERROR("Fifo reserve failed.\n"); + return; + } + + cmd->header = cpu_to_le32(SVGA_CMD_UPDATE); + cmd->body.x = cpu_to_le32(x); + cmd->body.y = cpu_to_le32(y); + cmd->body.width = cpu_to_le32(w); + cmd->body.height = cpu_to_le32(h); + vmw_fifo_commit(vmw_priv, sizeof(*cmd)); +} + +static void vmw_fb_dirty_mark(struct vmw_fb_par *par, + unsigned x1, unsigned y1, + unsigned width, unsigned height) +{ + struct fb_info *info = par->vmw_priv->fb_info; + unsigned long flags; + unsigned x2 = x1 + width; + unsigned y2 = y1 + height; + + spin_lock_irqsave(&par->dirty.lock, flags); + if (par->dirty.x1 == par->dirty.x2) { + par->dirty.x1 = x1; + par->dirty.y1 = y1; + par->dirty.x2 = x2; + par->dirty.y2 = y2; + /* if we are active start the dirty work + * we share the work with the defio system */ + if (par->dirty.active) + schedule_delayed_work(&info->deferred_work, VMW_DIRTY_DELAY); + } else { + if (x1 < par->dirty.x1) + par->dirty.x1 = x1; + if (y1 < par->dirty.y1) + par->dirty.y1 = y1; + if (x2 > par->dirty.x2) + par->dirty.x2 = x2; + if (y2 > par->dirty.y2) + par->dirty.y2 = y2; + } + spin_unlock_irqrestore(&par->dirty.lock, flags); +} + +static void vmw_deferred_io(struct fb_info *info, + struct list_head *pagelist) +{ + struct vmw_fb_par *par = info->par; + unsigned long start, end, min, max; + unsigned long flags; + struct page *page; + int y1, y2; + + min = ULONG_MAX; + max = 0; + list_for_each_entry(page, pagelist, lru) { + start = page->index << PAGE_SHIFT; + end = start + PAGE_SIZE - 1; + min = min(min, start); + max = max(max, end); + } + + if (min < max) { + y1 = min / info->fix.line_length; + y2 = (max / info->fix.line_length) + 1; + + spin_lock_irqsave(&par->dirty.lock, flags); + par->dirty.x1 = 0; + par->dirty.y1 = y1; + par->dirty.x2 = info->var.xres; + par->dirty.y2 = y2; + spin_unlock_irqrestore(&par->dirty.lock, flags); + } + + vmw_fb_dirty_flush(par); +}; + +struct fb_deferred_io vmw_defio = { + .delay = VMW_DIRTY_DELAY, + .deferred_io = vmw_deferred_io, +}; + +/* + * Draw code + */ + +static void vmw_fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) +{ + cfb_fillrect(info, rect); + vmw_fb_dirty_mark(info->par, rect->dx, rect->dy, + rect->width, rect->height); +} + +static void vmw_fb_copyarea(struct fb_info *info, const struct fb_copyarea *region) +{ + cfb_copyarea(info, region); + vmw_fb_dirty_mark(info->par, region->dx, region->dy, + region->width, region->height); +} + +static void vmw_fb_imageblit(struct fb_info *info, const struct fb_image *image) +{ + cfb_imageblit(info, image); + vmw_fb_dirty_mark(info->par, image->dx, image->dy, + image->width, image->height); +} + +/* + * Bring up code + */ + +static struct fb_ops vmw_fb_ops = { + .owner = THIS_MODULE, + .fb_check_var = vmw_fb_check_var, + .fb_set_par = vmw_fb_set_par, + .fb_setcolreg = vmw_fb_setcolreg, + .fb_fillrect = vmw_fb_fillrect, + .fb_copyarea = vmw_fb_copyarea, + .fb_imageblit = vmw_fb_imageblit, + .fb_pan_display = vmw_fb_pan_display, + .fb_blank = vmw_fb_blank, +}; + +static int vmw_fb_create_bo(struct vmw_private *vmw_priv, + size_t size, struct vmw_dma_buffer **out) +{ + struct vmw_dma_buffer *vmw_bo; + struct ttm_placement ne_placement = vmw_vram_ne_placement; + int ret; + + ne_placement.lpfn = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; + + /* interuptable? */ + ret = ttm_write_lock(&vmw_priv->fbdev_master.lock, false); + if (unlikely(ret != 0)) + return ret; + + vmw_bo = kmalloc(sizeof(*vmw_bo), GFP_KERNEL); + if (!vmw_bo) + goto err_unlock; + + ret = vmw_dmabuf_init(vmw_priv, vmw_bo, size, + &ne_placement, + false, + &vmw_dmabuf_bo_free); + if (unlikely(ret != 0)) + goto err_unlock; /* init frees the buffer on failure */ + + *out = vmw_bo; + + ttm_write_unlock(&vmw_priv->fbdev_master.lock); + + return 0; + +err_unlock: + ttm_write_unlock(&vmw_priv->fbdev_master.lock); + return ret; +} + +int vmw_fb_init(struct vmw_private *vmw_priv) +{ + struct device *device = &vmw_priv->dev->pdev->dev; + struct vmw_fb_par *par; + struct fb_info *info; + unsigned initial_width, initial_height; + unsigned fb_width, fb_height; + unsigned fb_bbp, fb_depth, fb_offset, fb_pitch, fb_size; + int ret; + + initial_width = 800; + initial_height = 600; + + fb_bbp = 32; + fb_depth = 24; + + if (vmw_priv->capabilities & SVGA_CAP_MULTIMON) { + fb_width = min(vmw_priv->fb_max_width, (unsigned)2048); + fb_height = min(vmw_priv->fb_max_height, (unsigned)2048); + } else { + fb_width = min(vmw_priv->fb_max_width, initial_width); + fb_height = min(vmw_priv->fb_max_height, initial_height); + } + + initial_width = min(fb_width, initial_width); + initial_height = min(fb_height, initial_height); + + vmw_write(vmw_priv, SVGA_REG_WIDTH, fb_width); + vmw_write(vmw_priv, SVGA_REG_HEIGHT, fb_height); + vmw_write(vmw_priv, SVGA_REG_BITS_PER_PIXEL, fb_bbp); + vmw_write(vmw_priv, SVGA_REG_DEPTH, fb_depth); + vmw_write(vmw_priv, SVGA_REG_RED_MASK, 0x00ff0000); + vmw_write(vmw_priv, SVGA_REG_GREEN_MASK, 0x0000ff00); + vmw_write(vmw_priv, SVGA_REG_BLUE_MASK, 0x000000ff); + + fb_size = vmw_read(vmw_priv, SVGA_REG_FB_SIZE); + fb_offset = vmw_read(vmw_priv, SVGA_REG_FB_OFFSET); + fb_pitch = vmw_read(vmw_priv, SVGA_REG_BYTES_PER_LINE); + + DRM_DEBUG("width %u\n", vmw_read(vmw_priv, SVGA_REG_MAX_WIDTH)); + DRM_DEBUG("height %u\n", vmw_read(vmw_priv, SVGA_REG_MAX_HEIGHT)); + DRM_DEBUG("width %u\n", vmw_read(vmw_priv, SVGA_REG_WIDTH)); + DRM_DEBUG("height %u\n", vmw_read(vmw_priv, SVGA_REG_HEIGHT)); + DRM_DEBUG("bpp %u\n", vmw_read(vmw_priv, SVGA_REG_BITS_PER_PIXEL)); + DRM_DEBUG("depth %u\n", vmw_read(vmw_priv, SVGA_REG_DEPTH)); + DRM_DEBUG("bpl %u\n", vmw_read(vmw_priv, SVGA_REG_BYTES_PER_LINE)); + DRM_DEBUG("r mask %08x\n", vmw_read(vmw_priv, SVGA_REG_RED_MASK)); + DRM_DEBUG("g mask %08x\n", vmw_read(vmw_priv, SVGA_REG_GREEN_MASK)); + DRM_DEBUG("b mask %08x\n", vmw_read(vmw_priv, SVGA_REG_BLUE_MASK)); + DRM_DEBUG("fb_offset 0x%08x\n", fb_offset); + DRM_DEBUG("fb_pitch %u\n", fb_pitch); + DRM_DEBUG("fb_size %u kiB\n", fb_size / 1024); + + info = framebuffer_alloc(sizeof(*par), device); + if (!info) + return -ENOMEM; + + /* + * Par + */ + vmw_priv->fb_info = info; + par = info->par; + par->vmw_priv = vmw_priv; + par->depth = fb_depth; + par->bpp = fb_bbp; + par->vmalloc = NULL; + par->max_width = fb_width; + par->max_height = fb_height; + + /* + * Create buffers and alloc memory + */ + par->vmalloc = vmalloc(fb_size); + if (unlikely(par->vmalloc == NULL)) { + ret = -ENOMEM; + goto err_free; + } + + ret = vmw_fb_create_bo(vmw_priv, fb_size, &par->vmw_bo); + if (unlikely(ret != 0)) + goto err_free; + + ret = ttm_bo_kmap(&par->vmw_bo->base, + 0, + par->vmw_bo->base.num_pages, + &par->map); + if (unlikely(ret != 0)) + goto err_unref; + par->bo_ptr = ttm_kmap_obj_virtual(&par->map, &par->bo_iowrite); + par->bo_size = fb_size; + + /* + * Fixed and var + */ + strcpy(info->fix.id, "svgadrmfb"); + info->fix.type = FB_TYPE_PACKED_PIXELS; + info->fix.visual = FB_VISUAL_TRUECOLOR; + info->fix.type_aux = 0; + info->fix.xpanstep = 1; /* doing it in hw */ + info->fix.ypanstep = 1; /* doing it in hw */ + info->fix.ywrapstep = 0; + info->fix.accel = FB_ACCEL_NONE; + info->fix.line_length = fb_pitch; + + info->fix.smem_start = 0; + info->fix.smem_len = fb_size; + + info->fix.mmio_start = 0; + info->fix.mmio_len = 0; + + info->pseudo_palette = par->pseudo_palette; + info->screen_base = par->vmalloc; + info->screen_size = fb_size; + + info->flags = FBINFO_DEFAULT; + info->fbops = &vmw_fb_ops; + + /* 24 depth per default */ + info->var.red.offset = 16; + info->var.green.offset = 8; + info->var.blue.offset = 0; + info->var.red.length = 8; + info->var.green.length = 8; + info->var.blue.length = 8; + info->var.transp.offset = 0; + info->var.transp.length = 0; + + info->var.xres_virtual = fb_width; + info->var.yres_virtual = fb_height; + info->var.bits_per_pixel = par->bpp; + info->var.xoffset = 0; + info->var.yoffset = 0; + info->var.activate = FB_ACTIVATE_NOW; + info->var.height = -1; + info->var.width = -1; + + info->var.xres = initial_width; + info->var.yres = initial_height; + +#if 0 + info->pixmap.size = 64*1024; + info->pixmap.buf_align = 8; + info->pixmap.access_align = 32; + info->pixmap.flags = FB_PIXMAP_SYSTEM; + info->pixmap.scan_align = 1; +#else + info->pixmap.size = 0; + info->pixmap.buf_align = 8; + info->pixmap.access_align = 32; + info->pixmap.flags = FB_PIXMAP_SYSTEM; + info->pixmap.scan_align = 1; +#endif + + info->aperture_base = vmw_priv->vram_start; + info->aperture_size = vmw_priv->vram_size; + + /* + * Dirty & Deferred IO + */ + par->dirty.x1 = par->dirty.x2 = 0; + par->dirty.y1 = par->dirty.y1 = 0; + par->dirty.active = true; + spin_lock_init(&par->dirty.lock); + info->fbdefio = &vmw_defio; + fb_deferred_io_init(info); + + ret = register_framebuffer(info); + if (unlikely(ret != 0)) + goto err_defio; + + return 0; + +err_defio: + fb_deferred_io_cleanup(info); + ttm_bo_kunmap(&par->map); +err_unref: + ttm_bo_unref((struct ttm_buffer_object **)&par->vmw_bo); +err_free: + vfree(par->vmalloc); + framebuffer_release(info); + vmw_priv->fb_info = NULL; + + return ret; +} + +int vmw_fb_close(struct vmw_private *vmw_priv) +{ + struct fb_info *info; + struct vmw_fb_par *par; + struct ttm_buffer_object *bo; + + if (!vmw_priv->fb_info) + return 0; + + info = vmw_priv->fb_info; + par = info->par; + bo = &par->vmw_bo->base; + par->vmw_bo = NULL; + + /* ??? order */ + fb_deferred_io_cleanup(info); + unregister_framebuffer(info); + + ttm_bo_kunmap(&par->map); + ttm_bo_unref(&bo); + + vfree(par->vmalloc); + framebuffer_release(info); + + return 0; +} + +int vmw_dmabuf_from_vram(struct vmw_private *vmw_priv, + struct vmw_dma_buffer *vmw_bo) +{ + struct ttm_buffer_object *bo = &vmw_bo->base; + int ret = 0; + + ret = ttm_bo_reserve(bo, false, false, false, 0); + if (unlikely(ret != 0)) + return ret; + + ret = ttm_bo_validate(bo, &vmw_sys_placement, false, false); + ttm_bo_unreserve(bo); + + return ret; +} + +int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, + struct vmw_dma_buffer *vmw_bo) +{ + struct ttm_buffer_object *bo = &vmw_bo->base; + struct ttm_placement ne_placement = vmw_vram_ne_placement; + int ret = 0; + + ne_placement.lpfn = bo->num_pages; + + /* interuptable? */ + ret = ttm_write_lock(&vmw_priv->active_master->lock, false); + if (unlikely(ret != 0)) + return ret; + + ret = ttm_bo_reserve(bo, false, false, false, 0); + if (unlikely(ret != 0)) + goto err_unlock; + + ret = ttm_bo_validate(bo, &ne_placement, false, false); + ttm_bo_unreserve(bo); +err_unlock: + ttm_write_unlock(&vmw_priv->active_master->lock); + + return ret; +} + +int vmw_fb_off(struct vmw_private *vmw_priv) +{ + struct fb_info *info; + struct vmw_fb_par *par; + unsigned long flags; + + if (!vmw_priv->fb_info) + return -EINVAL; + + info = vmw_priv->fb_info; + par = info->par; + + spin_lock_irqsave(&par->dirty.lock, flags); + par->dirty.active = false; + spin_unlock_irqrestore(&par->dirty.lock, flags); + + flush_scheduled_work(); + + par->bo_ptr = NULL; + ttm_bo_kunmap(&par->map); + + vmw_dmabuf_from_vram(vmw_priv, par->vmw_bo); + + return 0; +} + +int vmw_fb_on(struct vmw_private *vmw_priv) +{ + struct fb_info *info; + struct vmw_fb_par *par; + unsigned long flags; + bool dummy; + int ret; + + if (!vmw_priv->fb_info) + return -EINVAL; + + info = vmw_priv->fb_info; + par = info->par; + + /* we are already active */ + if (par->bo_ptr != NULL) + return 0; + + /* Make sure that all overlays are stoped when we take over */ + vmw_overlay_stop_all(vmw_priv); + + ret = vmw_dmabuf_to_start_of_vram(vmw_priv, par->vmw_bo); + if (unlikely(ret != 0)) { + DRM_ERROR("could not move buffer to start of VRAM\n"); + goto err_no_buffer; + } + + ret = ttm_bo_kmap(&par->vmw_bo->base, + 0, + par->vmw_bo->base.num_pages, + &par->map); + BUG_ON(ret != 0); + par->bo_ptr = ttm_kmap_obj_virtual(&par->map, &dummy); + + spin_lock_irqsave(&par->dirty.lock, flags); + par->dirty.active = true; + spin_unlock_irqrestore(&par->dirty.lock, flags); + +err_no_buffer: + vmw_fb_set_par(info); + + vmw_fb_dirty_mark(par, 0, 0, info->var.xres, info->var.yres); + + /* If there already was stuff dirty we wont + * schedule a new work, so lets do it now */ + schedule_delayed_work(&info->deferred_work, 0); + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/vmwgfx/svga_types.h +++ linux-2.6.32/drivers/gpu/drm/vmwgfx/svga_types.h @@ -0,0 +1,45 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/** + * Silly typedefs for the svga headers. Currently the headers are shared + * between all components that talk to svga. And as such the headers are + * are in a completely different style and use weird defines. + * + * This file lets all the ugly be prefixed with svga*. + */ + +#ifndef _SVGA_TYPES_H_ +#define _SVGA_TYPES_H_ + +typedef uint16_t uint16; +typedef uint32_t uint32; +typedef uint8_t uint8; +typedef int32_t int32; +typedef bool Bool; + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_connector.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_connector.c @@ -0,0 +1,848 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include + +#include "drmP.h" +#include "drm_edid.h" +#include "drm_crtc_helper.h" + +#include "nouveau_reg.h" +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_crtc.h" +#include "nouveau_connector.h" +#include "nouveau_hw.h" + +static inline struct drm_encoder_slave_funcs * +get_slave_funcs(struct nouveau_encoder *enc) +{ + return to_encoder_slave(to_drm_encoder(enc))->slave_funcs; +} + +static struct nouveau_encoder * +find_encoder_by_type(struct drm_connector *connector, int type) +{ + struct drm_device *dev = connector->dev; + struct nouveau_encoder *nv_encoder; + struct drm_mode_object *obj; + int i, id; + + for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { + id = connector->encoder_ids[i]; + if (!id) + break; + + obj = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_ENCODER); + if (!obj) + continue; + nv_encoder = nouveau_encoder(obj_to_encoder(obj)); + + if (type == OUTPUT_ANY || nv_encoder->dcb->type == type) + return nv_encoder; + } + + return NULL; +} + +struct nouveau_connector * +nouveau_encoder_connector_get(struct nouveau_encoder *encoder) +{ + struct drm_device *dev = to_drm_encoder(encoder)->dev; + struct drm_connector *drm_connector; + + list_for_each_entry(drm_connector, &dev->mode_config.connector_list, head) { + if (drm_connector->encoder == to_drm_encoder(encoder)) + return nouveau_connector(drm_connector); + } + + return NULL; +} + + +static void +nouveau_connector_destroy(struct drm_connector *drm_connector) +{ + struct nouveau_connector *nv_connector = + nouveau_connector(drm_connector); + struct drm_device *dev; + + if (!nv_connector) + return; + + dev = nv_connector->base.dev; + NV_DEBUG_KMS(dev, "\n"); + + kfree(nv_connector->edid); + drm_sysfs_connector_remove(drm_connector); + drm_connector_cleanup(drm_connector); + kfree(drm_connector); +} + +static void +nouveau_connector_ddc_prepare(struct drm_connector *connector, int *flags) +{ + struct drm_nouveau_private *dev_priv = connector->dev->dev_private; + + if (dev_priv->card_type >= NV_50) + return; + + *flags = 0; + if (NVLockVgaCrtcs(dev_priv->dev, false)) + *flags |= 1; + if (nv_heads_tied(dev_priv->dev)) + *flags |= 2; + + if (*flags & 2) + NVSetOwner(dev_priv->dev, 0); /* necessary? */ +} + +static void +nouveau_connector_ddc_finish(struct drm_connector *connector, int flags) +{ + struct drm_nouveau_private *dev_priv = connector->dev->dev_private; + + if (dev_priv->card_type >= NV_50) + return; + + if (flags & 2) + NVSetOwner(dev_priv->dev, 4); + if (flags & 1) + NVLockVgaCrtcs(dev_priv->dev, true); +} + +static struct nouveau_i2c_chan * +nouveau_connector_ddc_detect(struct drm_connector *connector, + struct nouveau_encoder **pnv_encoder) +{ + struct drm_device *dev = connector->dev; + uint8_t out_buf[] = { 0x0, 0x0}, buf[2]; + int ret, flags, i; + + struct i2c_msg msgs[] = { + { + .addr = 0x50, + .flags = 0, + .len = 1, + .buf = out_buf, + }, + { + .addr = 0x50, + .flags = I2C_M_RD, + .len = 1, + .buf = buf, + } + }; + + for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { + struct nouveau_i2c_chan *i2c = NULL; + struct nouveau_encoder *nv_encoder; + struct drm_mode_object *obj; + int id; + + id = connector->encoder_ids[i]; + if (!id) + break; + + obj = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_ENCODER); + if (!obj) + continue; + nv_encoder = nouveau_encoder(obj_to_encoder(obj)); + + if (nv_encoder->dcb->i2c_index < 0xf) + i2c = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index); + if (!i2c) + continue; + + nouveau_connector_ddc_prepare(connector, &flags); + ret = i2c_transfer(&i2c->adapter, msgs, 2); + nouveau_connector_ddc_finish(connector, flags); + + if (ret == 2) { + *pnv_encoder = nv_encoder; + return i2c; + } + } + + return NULL; +} + +static void +nouveau_connector_set_encoder(struct drm_connector *connector, + struct nouveau_encoder *nv_encoder) +{ + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct drm_nouveau_private *dev_priv = connector->dev->dev_private; + struct drm_device *dev = connector->dev; + + if (nv_connector->detected_encoder == nv_encoder) + return; + nv_connector->detected_encoder = nv_encoder; + + if (nv_encoder->dcb->type == OUTPUT_LVDS || + nv_encoder->dcb->type == OUTPUT_TMDS) { + connector->doublescan_allowed = false; + connector->interlace_allowed = false; + } else { + connector->doublescan_allowed = true; + if (dev_priv->card_type == NV_20 || + (dev_priv->card_type == NV_10 && + (dev->pci_device & 0x0ff0) != 0x0100 && + (dev->pci_device & 0x0ff0) != 0x0150)) + /* HW is broken */ + connector->interlace_allowed = false; + else + connector->interlace_allowed = true; + } + + if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { + drm_connector_property_set_value(connector, + dev->mode_config.dvi_i_subconnector_property, + nv_encoder->dcb->type == OUTPUT_TMDS ? + DRM_MODE_SUBCONNECTOR_DVID : + DRM_MODE_SUBCONNECTOR_DVIA); + } +} + +static enum drm_connector_status +nouveau_connector_detect(struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct nouveau_encoder *nv_encoder = NULL; + struct nouveau_i2c_chan *i2c; + int type, flags; + + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) + nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS); + if (nv_encoder && nv_connector->native_mode) { + unsigned status = connector_status_connected; + +#ifdef CONFIG_ACPI + if (!nouveau_ignorelid && !acpi_lid_open()) + status = connector_status_unknown; +#endif + nouveau_connector_set_encoder(connector, nv_encoder); + return status; + } + + /* Cleanup the previous EDID block. */ + if (nv_connector->edid) { + drm_mode_connector_update_edid_property(connector, NULL); + kfree(nv_connector->edid); + nv_connector->edid = NULL; + } + + i2c = nouveau_connector_ddc_detect(connector, &nv_encoder); + if (i2c) { + nouveau_connector_ddc_prepare(connector, &flags); + nv_connector->edid = drm_get_edid(connector, &i2c->adapter); + nouveau_connector_ddc_finish(connector, flags); + drm_mode_connector_update_edid_property(connector, + nv_connector->edid); + if (!nv_connector->edid) { + NV_ERROR(dev, "DDC responded, but no EDID for %s\n", + drm_get_connector_name(connector)); + goto detect_analog; + } + + if (nv_encoder->dcb->type == OUTPUT_DP && + !nouveau_dp_detect(to_drm_encoder(nv_encoder))) { + NV_ERROR(dev, "Detected %s, but failed init\n", + drm_get_connector_name(connector)); + return connector_status_disconnected; + } + + /* Override encoder type for DVI-I based on whether EDID + * says the display is digital or analog, both use the + * same i2c channel so the value returned from ddc_detect + * isn't necessarily correct. + */ + if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { + if (nv_connector->edid->input & DRM_EDID_INPUT_DIGITAL) + type = OUTPUT_TMDS; + else + type = OUTPUT_ANALOG; + + nv_encoder = find_encoder_by_type(connector, type); + if (!nv_encoder) { + NV_ERROR(dev, "Detected %d encoder on %s, " + "but no object!\n", type, + drm_get_connector_name(connector)); + return connector_status_disconnected; + } + } + + nouveau_connector_set_encoder(connector, nv_encoder); + return connector_status_connected; + } + +detect_analog: + nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG); + if (!nv_encoder) + nv_encoder = find_encoder_by_type(connector, OUTPUT_TV); + if (nv_encoder) { + struct drm_encoder *encoder = to_drm_encoder(nv_encoder); + struct drm_encoder_helper_funcs *helper = + encoder->helper_private; + + if (helper->detect(encoder, connector) == + connector_status_connected) { + nouveau_connector_set_encoder(connector, nv_encoder); + return connector_status_connected; + } + + } + + return connector_status_disconnected; +} + +static void +nouveau_connector_force(struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct nouveau_encoder *nv_encoder; + int type; + + if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { + if (connector->force == DRM_FORCE_ON_DIGITAL) + type = OUTPUT_TMDS; + else + type = OUTPUT_ANALOG; + } else + type = OUTPUT_ANY; + + nv_encoder = find_encoder_by_type(connector, type); + if (!nv_encoder) { + NV_ERROR(dev, "can't find encoder to force %s on!\n", + drm_get_connector_name(connector)); + connector->status = connector_status_disconnected; + return; + } + + nouveau_connector_set_encoder(connector, nv_encoder); +} + +static int +nouveau_connector_set_property(struct drm_connector *connector, + struct drm_property *property, uint64_t value) +{ + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; + struct drm_device *dev = connector->dev; + int ret; + + /* Scaling mode */ + if (property == dev->mode_config.scaling_mode_property) { + struct nouveau_crtc *nv_crtc = NULL; + bool modeset = false; + + switch (value) { + case DRM_MODE_SCALE_NONE: + case DRM_MODE_SCALE_FULLSCREEN: + case DRM_MODE_SCALE_CENTER: + case DRM_MODE_SCALE_ASPECT: + break; + default: + return -EINVAL; + } + + /* LVDS always needs gpu scaling */ + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && + value == DRM_MODE_SCALE_NONE) + return -EINVAL; + + /* Changing between GPU and panel scaling requires a full + * modeset + */ + if ((nv_connector->scaling_mode == DRM_MODE_SCALE_NONE) || + (value == DRM_MODE_SCALE_NONE)) + modeset = true; + nv_connector->scaling_mode = value; + + if (connector->encoder && connector->encoder->crtc) + nv_crtc = nouveau_crtc(connector->encoder->crtc); + if (!nv_crtc) + return 0; + + if (modeset || !nv_crtc->set_scale) { + ret = drm_crtc_helper_set_mode(&nv_crtc->base, + &nv_crtc->base.mode, + nv_crtc->base.x, + nv_crtc->base.y, NULL); + if (!ret) + return -EINVAL; + } else { + ret = nv_crtc->set_scale(nv_crtc, value, true); + if (ret) + return ret; + } + + return 0; + } + + /* Dithering */ + if (property == dev->mode_config.dithering_mode_property) { + struct nouveau_crtc *nv_crtc = NULL; + + if (value == DRM_MODE_DITHERING_ON) + nv_connector->use_dithering = true; + else + nv_connector->use_dithering = false; + + if (connector->encoder && connector->encoder->crtc) + nv_crtc = nouveau_crtc(connector->encoder->crtc); + + if (!nv_crtc || !nv_crtc->set_dither) + return 0; + + return nv_crtc->set_dither(nv_crtc, nv_connector->use_dithering, + true); + } + + if (nv_encoder && nv_encoder->dcb->type == OUTPUT_TV) + return get_slave_funcs(nv_encoder)-> + set_property(to_drm_encoder(nv_encoder), connector, property, value); + + return -EINVAL; +} + +static struct drm_display_mode * +nouveau_connector_native_mode(struct nouveau_connector *connector) +{ + struct drm_device *dev = connector->base.dev; + struct drm_display_mode *mode, *largest = NULL; + int high_w = 0, high_h = 0, high_v = 0; + + /* Use preferred mode if there is one.. */ + list_for_each_entry(mode, &connector->base.probed_modes, head) { + if (mode->type & DRM_MODE_TYPE_PREFERRED) { + NV_DEBUG_KMS(dev, "native mode from preferred\n"); + return drm_mode_duplicate(dev, mode); + } + } + + /* Otherwise, take the resolution with the largest width, then height, + * then vertical refresh + */ + list_for_each_entry(mode, &connector->base.probed_modes, head) { + if (mode->hdisplay < high_w) + continue; + + if (mode->hdisplay == high_w && mode->vdisplay < high_h) + continue; + + if (mode->hdisplay == high_w && mode->vdisplay == high_h && + mode->vrefresh < high_v) + continue; + + high_w = mode->hdisplay; + high_h = mode->vdisplay; + high_v = mode->vrefresh; + largest = mode; + } + + NV_DEBUG_KMS(dev, "native mode from largest: %dx%d@%d\n", + high_w, high_h, high_v); + return largest ? drm_mode_duplicate(dev, largest) : NULL; +} + +struct moderec { + int hdisplay; + int vdisplay; +}; + +static struct moderec scaler_modes[] = { + { 1920, 1200 }, + { 1920, 1080 }, + { 1680, 1050 }, + { 1600, 1200 }, + { 1400, 1050 }, + { 1280, 1024 }, + { 1280, 960 }, + { 1152, 864 }, + { 1024, 768 }, + { 800, 600 }, + { 720, 400 }, + { 640, 480 }, + { 640, 400 }, + { 640, 350 }, + {} +}; + +static int +nouveau_connector_scaler_modes_add(struct drm_connector *connector) +{ + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct drm_display_mode *native = nv_connector->native_mode, *m; + struct drm_device *dev = connector->dev; + struct moderec *mode = &scaler_modes[0]; + int modes = 0; + + if (!native) + return 0; + + while (mode->hdisplay) { + if (mode->hdisplay <= native->hdisplay && + mode->vdisplay <= native->vdisplay) { + m = drm_cvt_mode(dev, mode->hdisplay, mode->vdisplay, + drm_mode_vrefresh(native), false, + false, false); + if (!m) + continue; + + m->type |= DRM_MODE_TYPE_DRIVER; + + drm_mode_probed_add(connector, m); + modes++; + } + + mode++; + } + + return modes; +} + +static int +nouveau_connector_get_modes(struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; + int ret = 0; + + /* If we're not LVDS, destroy the previous native mode, the attached + * monitor could have changed. + */ + if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && + nv_connector->native_mode) { + drm_mode_destroy(dev, nv_connector->native_mode); + nv_connector->native_mode = NULL; + } + + if (nv_connector->edid) + ret = drm_add_edid_modes(connector, nv_connector->edid); + + /* Find the native mode if this is a digital panel, if we didn't + * find any modes through DDC previously add the native mode to + * the list of modes. + */ + if (!nv_connector->native_mode) + nv_connector->native_mode = + nouveau_connector_native_mode(nv_connector); + if (ret == 0 && nv_connector->native_mode) { + struct drm_display_mode *mode; + + mode = drm_mode_duplicate(dev, nv_connector->native_mode); + drm_mode_probed_add(connector, mode); + ret = 1; + } + + if (nv_encoder->dcb->type == OUTPUT_TV) + ret = get_slave_funcs(nv_encoder)-> + get_modes(to_drm_encoder(nv_encoder), connector); + + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) + ret += nouveau_connector_scaler_modes_add(connector); + + return ret; +} + +static int +nouveau_connector_mode_valid(struct drm_connector *connector, + struct drm_display_mode *mode) +{ + struct drm_nouveau_private *dev_priv = connector->dev->dev_private; + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; + unsigned min_clock = 25000, max_clock = min_clock; + unsigned clock = mode->clock; + + switch (nv_encoder->dcb->type) { + case OUTPUT_LVDS: + BUG_ON(!nv_connector->native_mode); + if (mode->hdisplay > nv_connector->native_mode->hdisplay || + mode->vdisplay > nv_connector->native_mode->vdisplay) + return MODE_PANEL; + + min_clock = 0; + max_clock = 400000; + break; + case OUTPUT_TMDS: + if ((dev_priv->card_type >= NV_50 && !nouveau_duallink) || + (dev_priv->card_type < NV_50 && + !nv_encoder->dcb->duallink_possible)) + max_clock = 165000; + else + max_clock = 330000; + break; + case OUTPUT_ANALOG: + max_clock = nv_encoder->dcb->crtconf.maxfreq; + if (!max_clock) + max_clock = 350000; + break; + case OUTPUT_TV: + return get_slave_funcs(nv_encoder)-> + mode_valid(to_drm_encoder(nv_encoder), mode); + case OUTPUT_DP: + if (nv_encoder->dp.link_bw == DP_LINK_BW_2_7) + max_clock = nv_encoder->dp.link_nr * 270000; + else + max_clock = nv_encoder->dp.link_nr * 162000; + + clock *= 3; + break; + } + + if (clock < min_clock) + return MODE_CLOCK_LOW; + + if (clock > max_clock) + return MODE_CLOCK_HIGH; + + return MODE_OK; +} + +static struct drm_encoder * +nouveau_connector_best_encoder(struct drm_connector *connector) +{ + struct nouveau_connector *nv_connector = nouveau_connector(connector); + + if (nv_connector->detected_encoder) + return to_drm_encoder(nv_connector->detected_encoder); + + return NULL; +} + +static const struct drm_connector_helper_funcs +nouveau_connector_helper_funcs = { + .get_modes = nouveau_connector_get_modes, + .mode_valid = nouveau_connector_mode_valid, + .best_encoder = nouveau_connector_best_encoder, +}; + +static const struct drm_connector_funcs +nouveau_connector_funcs = { + .dpms = drm_helper_connector_dpms, + .save = NULL, + .restore = NULL, + .detect = nouveau_connector_detect, + .destroy = nouveau_connector_destroy, + .fill_modes = drm_helper_probe_single_connector_modes, + .set_property = nouveau_connector_set_property, + .force = nouveau_connector_force +}; + +static int +nouveau_connector_create_lvds(struct drm_device *dev, + struct drm_connector *connector) +{ + struct nouveau_connector *nv_connector = nouveau_connector(connector); + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_i2c_chan *i2c = NULL; + struct nouveau_encoder *nv_encoder; + struct drm_display_mode native, *mode, *temp; + bool dummy, if_is_24bit = false; + int ret, flags; + + nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS); + if (!nv_encoder) + return -ENODEV; + + ret = nouveau_bios_parse_lvds_table(dev, 0, &dummy, &if_is_24bit); + if (ret) { + NV_ERROR(dev, "Error parsing LVDS table, disabling LVDS\n"); + return ret; + } + nv_connector->use_dithering = !if_is_24bit; + + /* Firstly try getting EDID over DDC, if allowed and I2C channel + * is available. + */ + if (!dev_priv->VBIOS.pub.fp_no_ddc && nv_encoder->dcb->i2c_index < 0xf) + i2c = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index); + + if (i2c) { + nouveau_connector_ddc_prepare(connector, &flags); + nv_connector->edid = drm_get_edid(connector, &i2c->adapter); + nouveau_connector_ddc_finish(connector, flags); + } + + /* If no EDID found above, and the VBIOS indicates a hardcoded + * modeline is avalilable for the panel, set it as the panel's + * native mode and exit. + */ + if (!nv_connector->edid && nouveau_bios_fp_mode(dev, &native) && + (nv_encoder->dcb->lvdsconf.use_straps_for_mode || + dev_priv->VBIOS.pub.fp_no_ddc)) { + nv_connector->native_mode = drm_mode_duplicate(dev, &native); + goto out; + } + + /* Still nothing, some VBIOS images have a hardcoded EDID block + * stored for the panel stored in them. + */ + if (!nv_connector->edid && !nv_connector->native_mode && + !dev_priv->VBIOS.pub.fp_no_ddc) { + struct edid *edid = + (struct edid *)nouveau_bios_embedded_edid(dev); + if (edid) { + nv_connector->edid = kmalloc(EDID_LENGTH, GFP_KERNEL); + *(nv_connector->edid) = *edid; + } + } + + if (!nv_connector->edid) + goto out; + + /* We didn't find/use a panel mode from the VBIOS, so parse the EDID + * block and look for the preferred mode there. + */ + ret = drm_add_edid_modes(connector, nv_connector->edid); + if (ret == 0) + goto out; + nv_connector->detected_encoder = nv_encoder; + nv_connector->native_mode = nouveau_connector_native_mode(nv_connector); + list_for_each_entry_safe(mode, temp, &connector->probed_modes, head) + drm_mode_remove(connector, mode); + +out: + if (!nv_connector->native_mode) { + NV_ERROR(dev, "LVDS present in DCB table, but couldn't " + "determine its native mode. Disabling.\n"); + return -ENODEV; + } + + drm_mode_connector_update_edid_property(connector, nv_connector->edid); + return 0; +} + +int +nouveau_connector_create(struct drm_device *dev, int index, int type) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_connector *nv_connector = NULL; + struct drm_connector *connector; + struct drm_encoder *encoder; + int ret; + + NV_DEBUG_KMS(dev, "\n"); + + nv_connector = kzalloc(sizeof(*nv_connector), GFP_KERNEL); + if (!nv_connector) + return -ENOMEM; + nv_connector->dcb = nouveau_bios_connector_entry(dev, index); + connector = &nv_connector->base; + + switch (type) { + case DRM_MODE_CONNECTOR_VGA: + NV_INFO(dev, "Detected a VGA connector\n"); + break; + case DRM_MODE_CONNECTOR_DVID: + NV_INFO(dev, "Detected a DVI-D connector\n"); + break; + case DRM_MODE_CONNECTOR_DVII: + NV_INFO(dev, "Detected a DVI-I connector\n"); + break; + case DRM_MODE_CONNECTOR_LVDS: + NV_INFO(dev, "Detected a LVDS connector\n"); + break; + case DRM_MODE_CONNECTOR_TV: + NV_INFO(dev, "Detected a TV connector\n"); + break; + case DRM_MODE_CONNECTOR_DisplayPort: + NV_INFO(dev, "Detected a DisplayPort connector\n"); + break; + default: + NV_ERROR(dev, "Unknown connector, this is not good.\n"); + break; + } + + /* defaults, will get overridden in detect() */ + connector->interlace_allowed = false; + connector->doublescan_allowed = false; + + drm_connector_init(dev, connector, &nouveau_connector_funcs, type); + drm_connector_helper_add(connector, &nouveau_connector_helper_funcs); + + /* Init DVI-I specific properties */ + if (type == DRM_MODE_CONNECTOR_DVII) { + drm_mode_create_dvi_i_properties(dev); + drm_connector_attach_property(connector, dev->mode_config.dvi_i_subconnector_property, 0); + drm_connector_attach_property(connector, dev->mode_config.dvi_i_select_subconnector_property, 0); + } + + if (type != DRM_MODE_CONNECTOR_LVDS) + nv_connector->use_dithering = false; + + if (type == DRM_MODE_CONNECTOR_DVID || + type == DRM_MODE_CONNECTOR_DVII || + type == DRM_MODE_CONNECTOR_LVDS || + type == DRM_MODE_CONNECTOR_DisplayPort) { + nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; + + drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, + nv_connector->scaling_mode); + drm_connector_attach_property(connector, dev->mode_config.dithering_mode_property, + nv_connector->use_dithering ? DRM_MODE_DITHERING_ON + : DRM_MODE_DITHERING_OFF); + + } else { + nv_connector->scaling_mode = DRM_MODE_SCALE_NONE; + + if (type == DRM_MODE_CONNECTOR_VGA && + dev_priv->card_type >= NV_50) { + drm_connector_attach_property(connector, + dev->mode_config.scaling_mode_property, + nv_connector->scaling_mode); + } + } + + /* attach encoders */ + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (nv_encoder->dcb->connector != index) + continue; + + if (get_slave_funcs(nv_encoder)) + get_slave_funcs(nv_encoder)->create_resources(encoder, connector); + + drm_mode_connector_attach_encoder(connector, encoder); + } + + drm_sysfs_connector_add(connector); + + if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) { + ret = nouveau_connector_create_lvds(dev, connector); + if (ret) { + connector->funcs->destroy(connector); + return ret; + } + } + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv17_gpio.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv17_gpio.c @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_hw.h" + +static bool +get_gpio_location(struct dcb_gpio_entry *ent, uint32_t *reg, uint32_t *shift, + uint32_t *mask) +{ + if (ent->line < 2) { + *reg = NV_PCRTC_GPIO; + *shift = ent->line * 16; + *mask = 0x11; + + } else if (ent->line < 10) { + *reg = NV_PCRTC_GPIO_EXT; + *shift = (ent->line - 2) * 4; + *mask = 0x3; + + } else if (ent->line < 14) { + *reg = NV_PCRTC_850; + *shift = (ent->line - 10) * 4; + *mask = 0x3; + + } else { + return false; + } + + return true; +} + +int +nv17_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag) +{ + struct dcb_gpio_entry *ent = nouveau_bios_gpio_entry(dev, tag); + uint32_t reg, shift, mask, value; + + if (!ent) + return -ENODEV; + + if (!get_gpio_location(ent, ®, &shift, &mask)) + return -ENODEV; + + value = NVReadCRTC(dev, 0, reg) >> shift; + + return (ent->invert ? 1 : 0) ^ (value & 1); +} + +int +nv17_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state) +{ + struct dcb_gpio_entry *ent = nouveau_bios_gpio_entry(dev, tag); + uint32_t reg, shift, mask, value; + + if (!ent) + return -ENODEV; + + if (!get_gpio_location(ent, ®, &shift, &mask)) + return -ENODEV; + + value = ((ent->invert ? 1 : 0) ^ (state ? 1 : 0)) << shift; + mask = ~(mask << shift); + + NVWriteCRTC(dev, 0, reg, value | (NVReadCRTC(dev, 0, reg) & mask)); + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_crtc.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_crtc.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NOUVEAU_CRTC_H__ +#define __NOUVEAU_CRTC_H__ + +struct nouveau_crtc { + struct drm_crtc base; + + int index; + + struct drm_display_mode *mode; + + uint32_t dpms_saved_fp_control; + uint32_t fp_users; + int saturation; + int sharpness; + int last_dpms; + + struct { + int cpp; + bool blanked; + uint32_t offset; + uint32_t tile_flags; + } fb; + + struct { + struct nouveau_bo *nvbo; + bool visible; + uint32_t offset; + void (*set_offset)(struct nouveau_crtc *, uint32_t offset); + void (*set_pos)(struct nouveau_crtc *, int x, int y); + void (*hide)(struct nouveau_crtc *, bool update); + void (*show)(struct nouveau_crtc *, bool update); + } cursor; + + struct { + struct nouveau_bo *nvbo; + uint16_t r[256]; + uint16_t g[256]; + uint16_t b[256]; + int depth; + } lut; + + int (*set_dither)(struct nouveau_crtc *crtc, bool on, bool update); + int (*set_scale)(struct nouveau_crtc *crtc, int mode, bool update); +}; + +static inline struct nouveau_crtc *nouveau_crtc(struct drm_crtc *crtc) +{ + return container_of(crtc, struct nouveau_crtc, base); +} + +static inline struct drm_crtc *to_drm_crtc(struct nouveau_crtc *crtc) +{ + return &crtc->base; +} + +int nv50_crtc_create(struct drm_device *dev, int index); +int nv50_cursor_init(struct nouveau_crtc *); +void nv50_cursor_fini(struct nouveau_crtc *); +int nv50_crtc_cursor_set(struct drm_crtc *drm_crtc, struct drm_file *file_priv, + uint32_t buffer_handle, uint32_t width, + uint32_t height); +int nv50_crtc_cursor_move(struct drm_crtc *drm_crtc, int x, int y); + +int nv04_cursor_init(struct nouveau_crtc *); + +struct nouveau_connector * +nouveau_crtc_connector_get(struct nouveau_crtc *crtc); + +#endif /* __NOUVEAU_CRTC_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv17_tv_modes.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv17_tv_modes.c @@ -0,0 +1,583 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_crtc.h" +#include "nouveau_hw.h" +#include "nv17_tv.h" + +char *nv17_tv_norm_names[NUM_TV_NORMS] = { + [TV_NORM_PAL] = "PAL", + [TV_NORM_PAL_M] = "PAL-M", + [TV_NORM_PAL_N] = "PAL-N", + [TV_NORM_PAL_NC] = "PAL-Nc", + [TV_NORM_NTSC_M] = "NTSC-M", + [TV_NORM_NTSC_J] = "NTSC-J", + [TV_NORM_HD480I] = "hd480i", + [TV_NORM_HD480P] = "hd480p", + [TV_NORM_HD576I] = "hd576i", + [TV_NORM_HD576P] = "hd576p", + [TV_NORM_HD720P] = "hd720p", + [TV_NORM_HD1080I] = "hd1080i" +}; + +/* TV standard specific parameters */ + +struct nv17_tv_norm_params nv17_tv_norms[NUM_TV_NORMS] = { + [TV_NORM_PAL] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 576, 50000, { + 0x2a, 0x9, 0x8a, 0xcb, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x40, 0x8a, 0x35, 0x27, 0x0, 0x34, 0x3, + 0x3e, 0x3, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x9c, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x3, + 0xd3, 0x4, 0xd4, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x1a, 0xff, 0x3, 0x18, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x49, 0x10, 0x0, 0x9b, + 0xbd, 0x15, 0x5, 0x15, 0x3e, 0x3, 0x0, 0x0 + } } } }, + + [TV_NORM_PAL_M] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 480, 59940, { + 0x21, 0xe6, 0xef, 0xe3, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x44, 0x76, 0x32, 0x25, 0x0, 0x3c, 0x0, + 0x3c, 0x0, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x83, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x1, + 0xc5, 0x4, 0xc5, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x18, 0xff, 0x3, 0x20, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x40, 0x10, 0x0, 0x9c, + 0xc8, 0x15, 0x5, 0x15, 0x3c, 0x0, 0x0, 0x0 + } } } }, + + [TV_NORM_PAL_N] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 576, 50000, { + 0x2a, 0x9, 0x8a, 0xcb, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x40, 0x8a, 0x32, 0x25, 0x0, 0x3c, 0x0, + 0x3c, 0x0, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x9c, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x1, + 0xc5, 0x4, 0xc5, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x1a, 0xff, 0x3, 0x18, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x49, 0x10, 0x0, 0x9b, + 0xbd, 0x15, 0x5, 0x15, 0x3c, 0x0, 0x0, 0x0 + } } } }, + + [TV_NORM_PAL_NC] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 576, 50000, { + 0x21, 0xf6, 0x94, 0x46, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x44, 0x8a, 0x35, 0x27, 0x0, 0x34, 0x3, + 0x3e, 0x3, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x9c, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x3, + 0xd3, 0x4, 0xd4, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x1a, 0xff, 0x3, 0x18, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x49, 0x10, 0x0, 0x9b, + 0xbd, 0x15, 0x5, 0x15, 0x3e, 0x3, 0x0, 0x0 + } } } }, + + [TV_NORM_NTSC_M] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 480, 59940, { + 0x21, 0xf0, 0x7c, 0x1f, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x44, 0x76, 0x48, 0x0, 0x0, 0x3c, 0x0, + 0x3c, 0x0, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x83, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x1, + 0xc5, 0x4, 0xc5, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x16, 0xff, 0x3, 0x20, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x4, 0x10, 0x0, 0x9c, + 0xc8, 0x15, 0x5, 0x15, 0x3c, 0x0, 0x0, 0x0 + } } } }, + + [TV_NORM_NTSC_J] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 480, 59940, { + 0x21, 0xf0, 0x7c, 0x1f, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x44, 0x76, 0x48, 0x0, 0x0, 0x32, 0x0, + 0x3c, 0x0, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x83, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x1, + 0xcf, 0x4, 0xcf, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x16, 0xff, 0x3, 0x20, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x4, 0x10, 0x0, 0xa4, + 0xc8, 0x15, 0x5, 0x15, 0x3c, 0x0, 0x0, 0x0 + } } } }, + + [TV_NORM_HD480I] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 480, 59940, { + 0x21, 0xf0, 0x7c, 0x1f, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x44, 0x76, 0x48, 0x0, 0x0, 0x32, 0x0, + 0x3c, 0x0, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x83, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x1, + 0xcf, 0x4, 0xcf, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x16, 0xff, 0x3, 0x20, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x4, 0x10, 0x0, 0xa4, + 0xc8, 0x15, 0x5, 0x15, 0x3c, 0x0, 0x0, 0x0 + } } } }, + + [TV_NORM_HD576I] = { TV_ENC_MODE, { + .tv_enc_mode = { 720, 576, 50000, { + 0x2a, 0x9, 0x8a, 0xcb, 0x0, 0x0, 0xb, 0x18, + 0x7e, 0x40, 0x8a, 0x35, 0x27, 0x0, 0x34, 0x3, + 0x3e, 0x3, 0x17, 0x21, 0x1b, 0x1b, 0x24, 0x9c, + 0x1, 0x0, 0xf, 0xf, 0x60, 0x5, 0xd3, 0x3, + 0xd3, 0x4, 0xd4, 0x1, 0x2, 0x0, 0xa, 0x5, + 0x0, 0x1a, 0xff, 0x3, 0x18, 0xf, 0x78, 0x0, + 0x0, 0xb4, 0x0, 0x15, 0x49, 0x10, 0x0, 0x9b, + 0xbd, 0x15, 0x5, 0x15, 0x3e, 0x3, 0x0, 0x0 + } } } }, + + + [TV_NORM_HD480P] = { CTV_ENC_MODE, { + .ctv_enc_mode = { + .mode = { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, + 720, 735, 743, 858, 0, 480, 490, 494, 525, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + .ctv_regs = { 0x3540000, 0x0, 0x0, 0x314, + 0x354003a, 0x40000, 0x6f0344, 0x18100000, + 0x10160004, 0x10060005, 0x1006000c, 0x10060020, + 0x10060021, 0x140e0022, 0x10060202, 0x1802020a, + 0x1810020b, 0x10000fff, 0x10000fff, 0x10000fff, + 0x10000fff, 0x10000fff, 0x10000fff, 0x70, + 0x3ff0000, 0x57, 0x2e001e, 0x258012c, + 0xa0aa04ec, 0x30, 0x80960019, 0x12c0300, + 0x2019, 0x600, 0x32060019, 0x0, 0x0, 0x400 + } } } }, + + [TV_NORM_HD576P] = { CTV_ENC_MODE, { + .ctv_enc_mode = { + .mode = { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, + 720, 730, 738, 864, 0, 576, 581, 585, 625, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + .ctv_regs = { 0x3540000, 0x0, 0x0, 0x314, + 0x354003a, 0x40000, 0x6f0344, 0x18100000, + 0x10060001, 0x10060009, 0x10060026, 0x10060027, + 0x140e0028, 0x10060268, 0x1810026d, 0x10000fff, + 0x10000fff, 0x10000fff, 0x10000fff, 0x10000fff, + 0x10000fff, 0x10000fff, 0x10000fff, 0x69, + 0x3ff0000, 0x57, 0x2e001e, 0x258012c, + 0xa0aa04ec, 0x30, 0x80960019, 0x12c0300, + 0x2019, 0x600, 0x32060019, 0x0, 0x0, 0x400 + } } } }, + + [TV_NORM_HD720P] = { CTV_ENC_MODE, { + .ctv_enc_mode = { + .mode = { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, + 1280, 1349, 1357, 1650, 0, 720, 725, 730, 750, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + .ctv_regs = { 0x1260394, 0x0, 0x0, 0x622, + 0x66b0021, 0x6004a, 0x1210626, 0x8170000, + 0x70004, 0x70016, 0x70017, 0x40f0018, + 0x702e8, 0x81702ed, 0xfff, 0xfff, + 0xfff, 0xfff, 0xfff, 0xfff, + 0xfff, 0xfff, 0xfff, 0x0, + 0x2e40001, 0x58, 0x2e001e, 0x258012c, + 0xa0aa04ec, 0x30, 0x810c0039, 0x12c0300, + 0xc0002039, 0x600, 0x32060039, 0x0, 0x0, 0x0 + } } } }, + + [TV_NORM_HD1080I] = { CTV_ENC_MODE, { + .ctv_enc_mode = { + .mode = { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 74250, + 1920, 1961, 2049, 2200, 0, 1080, 1084, 1088, 1125, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC + | DRM_MODE_FLAG_INTERLACE) }, + .ctv_regs = { 0xac0420, 0x44c0478, 0x4a4, 0x4fc0868, + 0x8940028, 0x60054, 0xe80870, 0xbf70000, + 0xbc70004, 0x70005, 0x70012, 0x70013, + 0x40f0014, 0x70230, 0xbf70232, 0xbf70233, + 0x1c70237, 0x70238, 0x70244, 0x70245, + 0x40f0246, 0x70462, 0x1f70464, 0x0, + 0x2e40001, 0x58, 0x2e001e, 0x258012c, + 0xa0aa04ec, 0x30, 0x815f004c, 0x12c0300, + 0xc000204c, 0x600, 0x3206004c, 0x0, 0x0, 0x0 + } } } } +}; + +/* + * The following is some guesswork on how the TV encoder flicker + * filter/rescaler works: + * + * It seems to use some sort of resampling filter, it is controlled + * through the registers at NV_PTV_HFILTER and NV_PTV_VFILTER, they + * control the horizontal and vertical stage respectively, there is + * also NV_PTV_HFILTER2 the blob fills identically to NV_PTV_HFILTER, + * but they seem to do nothing. A rough guess might be that they could + * be used to independently control the filtering of each interlaced + * field, but I don't know how they are enabled. The whole filtering + * process seems to be disabled with bits 26:27 of PTV_200, but we + * aren't doing that. + * + * The layout of both register sets is the same: + * + * A: [BASE+0x18]...[BASE+0x0] [BASE+0x58]..[BASE+0x40] + * B: [BASE+0x34]...[BASE+0x1c] [BASE+0x74]..[BASE+0x5c] + * + * Each coefficient is stored in bits [31],[15:9] in two's complement + * format. They seem to be some kind of weights used in a low-pass + * filter. Both A and B coefficients are applied to the 14 nearest + * samples on each side (Listed from nearest to furthermost. They + * roughly cover 2 framebuffer pixels on each side). They are + * probably multiplied with some more hardwired weights before being + * used: B-coefficients are applied the same on both sides, + * A-coefficients are inverted before being applied to the opposite + * side. + * + * After all the hassle, I got the following formula by empirical + * means... + */ + +#define calc_overscan(o) interpolate(0x100, 0xe1, 0xc1, o) + +#define id1 (1LL << 8) +#define id2 (1LL << 16) +#define id3 (1LL << 24) +#define id4 (1LL << 32) +#define id5 (1LL << 48) + +static struct filter_params{ + int64_t k1; + int64_t ki; + int64_t ki2; + int64_t ki3; + int64_t kr; + int64_t kir; + int64_t ki2r; + int64_t ki3r; + int64_t kf; + int64_t kif; + int64_t ki2f; + int64_t ki3f; + int64_t krf; + int64_t kirf; + int64_t ki2rf; + int64_t ki3rf; +} fparams[2][4] = { + /* Horizontal filter parameters */ + { + {64.311690 * id5, -39.516924 * id5, 6.586143 * id5, 0.000002 * id5, + 0.051285 * id4, 26.168746 * id4, -4.361449 * id4, -0.000001 * id4, + 9.308169 * id3, 78.180965 * id3, -13.030158 * id3, -0.000001 * id3, + -8.801540 * id1, -46.572890 * id1, 7.762145 * id1, -0.000000 * id1}, + {-44.565569 * id5, -68.081246 * id5, 39.812074 * id5, -4.009316 * id5, + 29.832207 * id4, 50.047322 * id4, -25.380017 * id4, 2.546422 * id4, + 104.605622 * id3, 141.908641 * id3, -74.322319 * id3, 7.484316 * id3, + -37.081621 * id1, -90.397510 * id1, 42.784229 * id1, -4.289952 * id1}, + {-56.793244 * id5, 31.153584 * id5, -5.192247 * id5, -0.000003 * id5, + 33.541131 * id4, -34.149302 * id4, 5.691537 * id4, 0.000002 * id4, + 87.196610 * id3, -88.995169 * id3, 14.832456 * id3, 0.000012 * id3, + 17.288138 * id1, 71.864786 * id1, -11.977408 * id1, -0.000009 * id1}, + {51.787796 * id5, 21.211771 * id5, -18.993730 * id5, 1.853310 * id5, + -41.470726 * id4, -17.775823 * id4, 13.057821 * id4, -1.15823 * id4, + -154.235673 * id3, -44.878641 * id3, 40.656077 * id3, -3.695595 * id3, + 112.201065 * id1, 39.992155 * id1, -25.155714 * id1, 2.113984 * id1}, + }, + + /* Vertical filter parameters */ + { + {67.601979 * id5, 0.428319 * id5, -0.071318 * id5, -0.000012 * id5, + -3.402339 * id4, 0.000209 * id4, -0.000092 * id4, 0.000010 * id4, + -9.180996 * id3, 6.111270 * id3, -1.024457 * id3, 0.001043 * id3, + 6.060315 * id1, -0.017425 * id1, 0.007830 * id1, -0.000869 * id1}, + {6.755647 * id5, 5.841348 * id5, 1.469734 * id5, -0.149656 * id5, + 8.293120 * id4, -1.192888 * id4, -0.947652 * id4, 0.094507 * id4, + 37.526655 * id3, 10.257875 * id3, -10.823275 * id3, 1.081497 * id3, + -2.361928 * id1, -2.059432 * id1, 1.840671 * id1, -0.168100 * id1}, + {-14.780391 * id5, -16.042148 * id5, 2.673692 * id5, -0.000000 * id5, + 39.541978 * id4, 5.680053 * id4, -0.946676 * id4, 0.000000 * id4, + 152.994486 * id3, 12.625439 * id3, -2.119579 * id3, 0.002708 * id3, + -38.125089 * id1, -0.855880 * id1, 0.155359 * id1, -0.002245 * id1}, + {-27.476193 * id5, -1.454976 * id5, 1.286557 * id5, 0.025346 * id5, + 20.687300 * id4, 3.014003 * id4, -0.557786 * id4, -0.01311 * id4, + 60.008737 * id3, -0.738273 * id3, 5.408217 * id3, -0.796798 * id3, + -17.296835 * id1, 4.438577 * id1, -2.809420 * id1, 0.385491 * id1}, + } +}; + +static void tv_setup_filter(struct drm_encoder *encoder) +{ + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + struct drm_display_mode *mode = &encoder->crtc->mode; + uint32_t (*filters[])[4][7] = {&tv_enc->state.hfilter, + &tv_enc->state.vfilter}; + int i, j, k; + int32_t overscan = calc_overscan(tv_enc->overscan); + int64_t flicker = (tv_enc->flicker - 50) * (id3 / 100); + uint64_t rs[] = {mode->hdisplay * id3, + mode->vdisplay * id3}; + + do_div(rs[0], overscan * tv_norm->tv_enc_mode.hdisplay); + do_div(rs[1], overscan * tv_norm->tv_enc_mode.vdisplay); + + for (k = 0; k < 2; k++) { + rs[k] = max((int64_t)rs[k], id2); + + for (j = 0; j < 4; j++) { + struct filter_params *p = &fparams[k][j]; + + for (i = 0; i < 7; i++) { + int64_t c = (p->k1 + p->ki*i + p->ki2*i*i + p->ki3*i*i*i) + + (p->kr + p->kir*i + p->ki2r*i*i + p->ki3r*i*i*i)*rs[k] + + (p->kf + p->kif*i + p->ki2f*i*i + p->ki3f*i*i*i)*flicker + + (p->krf + p->kirf*i + p->ki2rf*i*i + p->ki3rf*i*i*i)*flicker*rs[k]; + + (*filters[k])[j][i] = (c + id5/2) >> 39 & (0x1 << 31 | 0x7f << 9); + } + } + } +} + +/* Hardware state saving/restoring */ + +static void tv_save_filter(struct drm_device *dev, uint32_t base, uint32_t regs[4][7]) +{ + int i, j; + uint32_t offsets[] = { base, base + 0x1c, base + 0x40, base + 0x5c }; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 7; j++) + regs[i][j] = nv_read_ptv(dev, offsets[i]+4*j); + } +} + +static void tv_load_filter(struct drm_device *dev, uint32_t base, uint32_t regs[4][7]) +{ + int i, j; + uint32_t offsets[] = { base, base + 0x1c, base + 0x40, base + 0x5c }; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 7; j++) + nv_write_ptv(dev, offsets[i]+4*j, regs[i][j]); + } +} + +void nv17_tv_state_save(struct drm_device *dev, struct nv17_tv_state *state) +{ + int i; + + for (i = 0; i < 0x40; i++) + state->tv_enc[i] = nv_read_tv_enc(dev, i); + + tv_save_filter(dev, NV_PTV_HFILTER, state->hfilter); + tv_save_filter(dev, NV_PTV_HFILTER2, state->hfilter2); + tv_save_filter(dev, NV_PTV_VFILTER, state->vfilter); + + nv_save_ptv(dev, state, 200); + nv_save_ptv(dev, state, 204); + nv_save_ptv(dev, state, 208); + nv_save_ptv(dev, state, 20c); + nv_save_ptv(dev, state, 304); + nv_save_ptv(dev, state, 500); + nv_save_ptv(dev, state, 504); + nv_save_ptv(dev, state, 508); + nv_save_ptv(dev, state, 600); + nv_save_ptv(dev, state, 604); + nv_save_ptv(dev, state, 608); + nv_save_ptv(dev, state, 60c); + nv_save_ptv(dev, state, 610); + nv_save_ptv(dev, state, 614); +} + +void nv17_tv_state_load(struct drm_device *dev, struct nv17_tv_state *state) +{ + int i; + + for (i = 0; i < 0x40; i++) + nv_write_tv_enc(dev, i, state->tv_enc[i]); + + tv_load_filter(dev, NV_PTV_HFILTER, state->hfilter); + tv_load_filter(dev, NV_PTV_HFILTER2, state->hfilter2); + tv_load_filter(dev, NV_PTV_VFILTER, state->vfilter); + + nv_load_ptv(dev, state, 200); + nv_load_ptv(dev, state, 204); + nv_load_ptv(dev, state, 208); + nv_load_ptv(dev, state, 20c); + nv_load_ptv(dev, state, 304); + nv_load_ptv(dev, state, 500); + nv_load_ptv(dev, state, 504); + nv_load_ptv(dev, state, 508); + nv_load_ptv(dev, state, 600); + nv_load_ptv(dev, state, 604); + nv_load_ptv(dev, state, 608); + nv_load_ptv(dev, state, 60c); + nv_load_ptv(dev, state, 610); + nv_load_ptv(dev, state, 614); + + /* This is required for some settings to kick in. */ + nv_write_tv_enc(dev, 0x3e, 1); + nv_write_tv_enc(dev, 0x3e, 0); +} + +/* Timings similar to the ones the blob sets */ + +struct drm_display_mode nv17_tv_modes[] = { + { DRM_MODE("320x200", DRM_MODE_TYPE_DRIVER, 0, + 320, 344, 392, 560, 0, 200, 200, 202, 220, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC + | DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_CLKDIV2) }, + { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 0, + 320, 344, 392, 560, 0, 240, 240, 246, 263, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC + | DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_CLKDIV2) }, + { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 0, + 400, 432, 496, 640, 0, 300, 300, 303, 314, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC + | DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_CLKDIV2) }, + { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 0, + 640, 672, 768, 880, 0, 480, 480, 492, 525, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, + { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 0, + 720, 752, 872, 960, 0, 480, 480, 493, 525, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, + { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 0, + 720, 776, 856, 960, 0, 576, 576, 588, 597, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, + { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 0, + 800, 840, 920, 1040, 0, 600, 600, 604, 618, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 0, + 1024, 1064, 1200, 1344, 0, 768, 768, 777, 806, 0, + DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, + {} +}; + +void nv17_tv_update_properties(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + struct nv17_tv_state *regs = &tv_enc->state; + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + int subconnector = tv_enc->select_subconnector ? + tv_enc->select_subconnector : + tv_enc->subconnector; + + switch (subconnector) { + case DRM_MODE_SUBCONNECTOR_Composite: + { + regs->ptv_204 = 0x2; + + /* The composite connector may be found on either pin. */ + if (tv_enc->pin_mask & 0x4) + regs->ptv_204 |= 0x010000; + else if (tv_enc->pin_mask & 0x2) + regs->ptv_204 |= 0x100000; + else + regs->ptv_204 |= 0x110000; + + regs->tv_enc[0x7] = 0x10; + break; + } + case DRM_MODE_SUBCONNECTOR_SVIDEO: + regs->ptv_204 = 0x11012; + regs->tv_enc[0x7] = 0x18; + break; + + case DRM_MODE_SUBCONNECTOR_Component: + regs->ptv_204 = 0x111333; + regs->tv_enc[0x7] = 0x14; + break; + + case DRM_MODE_SUBCONNECTOR_SCART: + regs->ptv_204 = 0x111012; + regs->tv_enc[0x7] = 0x18; + break; + } + + regs->tv_enc[0x20] = interpolate(0, tv_norm->tv_enc_mode.tv_enc[0x20], 255, + tv_enc->saturation); + regs->tv_enc[0x22] = interpolate(0, tv_norm->tv_enc_mode.tv_enc[0x22], 255, + tv_enc->saturation); + regs->tv_enc[0x25] = tv_enc->hue * 255 / 100; + + nv_load_ptv(dev, regs, 204); + nv_load_tv_enc(dev, regs, 7); + nv_load_tv_enc(dev, regs, 20); + nv_load_tv_enc(dev, regs, 22); + nv_load_tv_enc(dev, regs, 25); +} + +void nv17_tv_update_rescaler(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + struct nv17_tv_state *regs = &tv_enc->state; + + regs->ptv_208 = 0x40 | (calc_overscan(tv_enc->overscan) << 8); + + tv_setup_filter(encoder); + + nv_load_ptv(dev, regs, 208); + tv_load_filter(dev, NV_PTV_HFILTER, regs->hfilter); + tv_load_filter(dev, NV_PTV_HFILTER2, regs->hfilter2); + tv_load_filter(dev, NV_PTV_VFILTER, regs->vfilter); +} + +void nv17_ctv_update_rescaler(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + int head = nouveau_crtc(encoder->crtc)->index; + struct nv04_crtc_reg *regs = &dev_priv->mode_reg.crtc_reg[head]; + struct drm_display_mode *crtc_mode = &encoder->crtc->mode; + struct drm_display_mode *output_mode = &get_tv_norm(encoder)->ctv_enc_mode.mode; + int overscan, hmargin, vmargin, hratio, vratio; + + /* The rescaler doesn't do the right thing for interlaced modes. */ + if (output_mode->flags & DRM_MODE_FLAG_INTERLACE) + overscan = 100; + else + overscan = tv_enc->overscan; + + hmargin = (output_mode->hdisplay - crtc_mode->hdisplay) / 2; + vmargin = (output_mode->vdisplay - crtc_mode->vdisplay) / 2; + + hmargin = interpolate(0, min(hmargin, output_mode->hdisplay/20), hmargin, + overscan); + vmargin = interpolate(0, min(vmargin, output_mode->vdisplay/20), vmargin, + overscan); + + hratio = crtc_mode->hdisplay * 0x800 / (output_mode->hdisplay - 2*hmargin); + vratio = crtc_mode->vdisplay * 0x800 / (output_mode->vdisplay - 2*vmargin) & ~3; + + regs->fp_horiz_regs[FP_VALID_START] = hmargin; + regs->fp_horiz_regs[FP_VALID_END] = output_mode->hdisplay - hmargin - 1; + regs->fp_vert_regs[FP_VALID_START] = vmargin; + regs->fp_vert_regs[FP_VALID_END] = output_mode->vdisplay - vmargin - 1; + + regs->fp_debug_1 = NV_PRAMDAC_FP_DEBUG_1_YSCALE_TESTMODE_ENABLE | + XLATE(vratio, 0, NV_PRAMDAC_FP_DEBUG_1_YSCALE_VALUE) | + NV_PRAMDAC_FP_DEBUG_1_XSCALE_TESTMODE_ENABLE | + XLATE(hratio, 0, NV_PRAMDAC_FP_DEBUG_1_XSCALE_VALUE); + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HVALID_START, + regs->fp_horiz_regs[FP_VALID_START]); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HVALID_END, + regs->fp_horiz_regs[FP_VALID_END]); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_VVALID_START, + regs->fp_vert_regs[FP_VALID_START]); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_VVALID_END, + regs->fp_vert_regs[FP_VALID_END]); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_1, regs->fp_debug_1); +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_bios.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_bios.h @@ -0,0 +1,292 @@ +/* + * Copyright 2007-2008 Nouveau Project + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef __NOUVEAU_BIOS_H__ +#define __NOUVEAU_BIOS_H__ + +#include "nvreg.h" +#include "nouveau_i2c.h" + +#define DCB_MAX_NUM_ENTRIES 16 +#define DCB_MAX_NUM_I2C_ENTRIES 16 +#define DCB_MAX_NUM_GPIO_ENTRIES 32 +#define DCB_MAX_NUM_CONNECTOR_ENTRIES 16 + +#define DCB_LOC_ON_CHIP 0 + +struct dcb_entry { + int index; /* may not be raw dcb index if merging has happened */ + uint8_t type; + uint8_t i2c_index; + uint8_t heads; + uint8_t connector; + uint8_t bus; + uint8_t location; + uint8_t or; + bool duallink_possible; + union { + struct sor_conf { + int link; + } sorconf; + struct { + int maxfreq; + } crtconf; + struct { + struct sor_conf sor; + bool use_straps_for_mode; + bool use_power_scripts; + } lvdsconf; + struct { + bool has_component_output; + } tvconf; + struct { + struct sor_conf sor; + int link_nr; + int link_bw; + } dpconf; + struct { + struct sor_conf sor; + } tmdsconf; + }; + bool i2c_upper_default; +}; + +struct dcb_i2c_entry { + uint8_t port_type; + uint8_t read, write; + struct nouveau_i2c_chan *chan; +}; + +struct parsed_dcb { + int entries; + struct dcb_entry entry[DCB_MAX_NUM_ENTRIES]; + struct dcb_i2c_entry i2c[DCB_MAX_NUM_I2C_ENTRIES]; +}; + +enum dcb_gpio_tag { + DCB_GPIO_TVDAC0 = 0xc, + DCB_GPIO_TVDAC1 = 0x2d, +}; + +struct dcb_gpio_entry { + enum dcb_gpio_tag tag; + int line; + bool invert; +}; + +struct parsed_dcb_gpio { + int entries; + struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES]; +}; + +struct dcb_connector_table_entry { + uint32_t entry; + uint8_t type; + uint8_t index; + uint8_t gpio_tag; +}; + +struct dcb_connector_table { + int entries; + struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES]; +}; + +struct bios_parsed_dcb { + uint8_t version; + + struct parsed_dcb dcb; + + uint8_t *i2c_table; + uint8_t i2c_default_indices; + + uint16_t gpio_table_ptr; + struct parsed_dcb_gpio gpio; + uint16_t connector_table_ptr; + struct dcb_connector_table connector; +}; + +enum nouveau_encoder_type { + OUTPUT_ANALOG = 0, + OUTPUT_TV = 1, + OUTPUT_TMDS = 2, + OUTPUT_LVDS = 3, + OUTPUT_DP = 6, + OUTPUT_ANY = -1 +}; + +enum nouveau_or { + OUTPUT_A = (1 << 0), + OUTPUT_B = (1 << 1), + OUTPUT_C = (1 << 2) +}; + +enum LVDS_script { + /* Order *does* matter here */ + LVDS_INIT = 1, + LVDS_RESET, + LVDS_BACKLIGHT_ON, + LVDS_BACKLIGHT_OFF, + LVDS_PANEL_ON, + LVDS_PANEL_OFF +}; + +/* changing these requires matching changes to reg tables in nv_get_clock */ +#define MAX_PLL_TYPES 4 +enum pll_types { + NVPLL, + MPLL, + VPLL1, + VPLL2 +}; + +struct pll_lims { + struct { + int minfreq; + int maxfreq; + int min_inputfreq; + int max_inputfreq; + + uint8_t min_m; + uint8_t max_m; + uint8_t min_n; + uint8_t max_n; + } vco1, vco2; + + uint8_t max_log2p; + /* + * for most pre nv50 cards setting a log2P of 7 (the common max_log2p + * value) is no different to 6 (at least for vplls) so allowing the MNP + * calc to use 7 causes the generated clock to be out by a factor of 2. + * however, max_log2p cannot be fixed-up during parsing as the + * unmodified max_log2p value is still needed for setting mplls, hence + * an additional max_usable_log2p member + */ + uint8_t max_usable_log2p; + uint8_t log2p_bias; + + uint8_t min_p; + uint8_t max_p; + + int refclk; +}; + +struct nouveau_bios_info { + struct parsed_dcb *dcb; + + uint8_t chip_version; + + uint32_t dactestval; + uint32_t tvdactestval; + uint8_t digital_min_front_porch; + bool fp_no_ddc; +}; + +struct nvbios { + struct drm_device *dev; + struct nouveau_bios_info pub; + + struct mutex lock; + + uint8_t data[NV_PROM_SIZE]; + unsigned int length; + bool execute; + + uint8_t major_version; + uint8_t feature_byte; + bool is_mobile; + + uint32_t fmaxvco, fminvco; + + bool old_style_init; + uint16_t init_script_tbls_ptr; + uint16_t extra_init_script_tbl_ptr; + uint16_t macro_index_tbl_ptr; + uint16_t macro_tbl_ptr; + uint16_t condition_tbl_ptr; + uint16_t io_condition_tbl_ptr; + uint16_t io_flag_condition_tbl_ptr; + uint16_t init_function_tbl_ptr; + + uint16_t pll_limit_tbl_ptr; + uint16_t ram_restrict_tbl_ptr; + uint8_t ram_restrict_group_count; + + uint16_t some_script_ptr; /* BIT I + 14 */ + uint16_t init96_tbl_ptr; /* BIT I + 16 */ + + struct bios_parsed_dcb bdcb; + + struct { + int crtchead; + /* these need remembering across suspend */ + uint32_t saved_nv_pfb_cfg0; + } state; + + struct { + struct dcb_entry *output; + uint16_t script_table_ptr; + uint16_t dp_table_ptr; + } display; + + struct { + uint16_t fptablepointer; /* also used by tmds */ + uint16_t fpxlatetableptr; + int xlatwidth; + uint16_t lvdsmanufacturerpointer; + uint16_t fpxlatemanufacturertableptr; + uint16_t mode_ptr; + uint16_t xlated_entry; + bool power_off_for_reset; + bool reset_after_pclk_change; + bool dual_link; + bool link_c_increment; + bool BITbit1; + bool if_is_24bit; + int duallink_transition_clk; + uint8_t strapless_is_24bit; + uint8_t *edid; + + /* will need resetting after suspend */ + int last_script_invoc; + bool lvds_init_run; + } fp; + + struct { + uint16_t output0_script_ptr; + uint16_t output1_script_ptr; + } tmds; + + struct { + uint16_t mem_init_tbl_ptr; + uint16_t sdr_seq_tbl_ptr; + uint16_t ddr_seq_tbl_ptr; + + struct { + uint8_t crt, tv, panel; + } i2c_indices; + + uint16_t lvds_single_a_script_ptr; + } legacy; +}; + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_i2c.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_i2c.h @@ -0,0 +1,52 @@ +/* + * Copyright 2009 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __NOUVEAU_I2C_H__ +#define __NOUVEAU_I2C_H__ + +#include +#include +#include +#include "drm_dp_helper.h" + +struct dcb_i2c_entry; + +struct nouveau_i2c_chan { + struct i2c_adapter adapter; + struct drm_device *dev; + union { + struct i2c_algo_bit_data bit; + struct i2c_algo_dp_aux_data dp; + } algo; + unsigned rd; + unsigned wr; + unsigned data; +}; + +int nouveau_i2c_init(struct drm_device *, struct dcb_i2c_entry *, int index); +void nouveau_i2c_fini(struct drm_device *, struct dcb_i2c_entry *); +struct nouveau_i2c_chan *nouveau_i2c_find(struct drm_device *, int index); + +int nouveau_dp_i2c_aux_ch(struct i2c_adapter *, int mode, uint8_t write_byte, + uint8_t *read_byte); + +#endif /* __NOUVEAU_I2C_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv40_fifo.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv40_fifo.c @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +#define NV40_RAMFC(c) (dev_priv->ramfc_offset + ((c) * NV40_RAMFC__SIZE)) +#define NV40_RAMFC__SIZE 128 + +int +nv40_fifo_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t fc = NV40_RAMFC(chan->id); + int ret; + + ret = nouveau_gpuobj_new_fake(dev, NV40_RAMFC(chan->id), ~0, + NV40_RAMFC__SIZE, NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, NULL, &chan->ramfc); + if (ret) + return ret; + + dev_priv->engine.instmem.prepare_access(dev, true); + nv_wi32(dev, fc + 0, chan->pushbuf_base); + nv_wi32(dev, fc + 4, chan->pushbuf_base); + nv_wi32(dev, fc + 12, chan->pushbuf->instance >> 4); + nv_wi32(dev, fc + 24, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | + NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | + NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 | +#ifdef __BIG_ENDIAN + NV_PFIFO_CACHE1_BIG_ENDIAN | +#endif + 0x30000000 /* no idea.. */); + nv_wi32(dev, fc + 56, chan->ramin_grctx->instance >> 4); + nv_wi32(dev, fc + 60, 0x0001FFFF); + dev_priv->engine.instmem.finish_access(dev); + + /* enable the fifo dma operation */ + nv_wr32(dev, NV04_PFIFO_MODE, + nv_rd32(dev, NV04_PFIFO_MODE) | (1 << chan->id)); + return 0; +} + +void +nv40_fifo_destroy_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + + nv_wr32(dev, NV04_PFIFO_MODE, + nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); + + if (chan->ramfc) + nouveau_gpuobj_ref_del(dev, &chan->ramfc); +} + +static void +nv40_fifo_do_load_context(struct drm_device *dev, int chid) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t fc = NV40_RAMFC(chid), tmp, tmp2; + + dev_priv->engine.instmem.prepare_access(dev, false); + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUT, nv_ri32(dev, fc + 0)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_GET, nv_ri32(dev, fc + 4)); + nv_wr32(dev, NV10_PFIFO_CACHE1_REF_CNT, nv_ri32(dev, fc + 8)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_INSTANCE, nv_ri32(dev, fc + 12)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_DCOUNT, nv_ri32(dev, fc + 16)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_STATE, nv_ri32(dev, fc + 20)); + + /* No idea what 0x2058 is.. */ + tmp = nv_ri32(dev, fc + 24); + tmp2 = nv_rd32(dev, 0x2058) & 0xFFF; + tmp2 |= (tmp & 0x30000000); + nv_wr32(dev, 0x2058, tmp2); + tmp &= ~0x30000000; + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_FETCH, tmp); + + nv_wr32(dev, NV04_PFIFO_CACHE1_ENGINE, nv_ri32(dev, fc + 28)); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL1, nv_ri32(dev, fc + 32)); + nv_wr32(dev, NV10_PFIFO_CACHE1_ACQUIRE_VALUE, nv_ri32(dev, fc + 36)); + tmp = nv_ri32(dev, fc + 40); + nv_wr32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMESTAMP, tmp); + nv_wr32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMEOUT, nv_ri32(dev, fc + 44)); + nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, nv_ri32(dev, fc + 48)); + nv_wr32(dev, NV10_PFIFO_CACHE1_DMA_SUBROUTINE, nv_ri32(dev, fc + 52)); + nv_wr32(dev, NV40_PFIFO_GRCTX_INSTANCE, nv_ri32(dev, fc + 56)); + + /* Don't clobber the TIMEOUT_ENABLED flag when restoring from RAMFC */ + tmp = nv_rd32(dev, NV04_PFIFO_DMA_TIMESLICE) & ~0x1FFFF; + tmp |= nv_ri32(dev, fc + 60) & 0x1FFFF; + nv_wr32(dev, NV04_PFIFO_DMA_TIMESLICE, tmp); + + nv_wr32(dev, 0x32e4, nv_ri32(dev, fc + 64)); + /* NVIDIA does this next line twice... */ + nv_wr32(dev, 0x32e8, nv_ri32(dev, fc + 68)); + nv_wr32(dev, 0x2088, nv_ri32(dev, fc + 76)); + nv_wr32(dev, 0x3300, nv_ri32(dev, fc + 80)); + + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUT, 0); +} + +int +nv40_fifo_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + uint32_t tmp; + + nv40_fifo_do_load_context(dev, chan->id); + + /* Set channel active, and in DMA mode */ + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, + NV40_PFIFO_CACHE1_PUSH1_DMA | chan->id); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, 1); + + /* Reset DMA_CTL_AT_INFO to INVALID */ + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_CTL) & ~(1 << 31); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_CTL, tmp); + + return 0; +} + +int +nv40_fifo_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + uint32_t fc, tmp; + int chid; + + chid = pfifo->channel_id(dev); + if (chid < 0 || chid >= dev_priv->engine.fifo.channels) + return 0; + fc = NV40_RAMFC(chid); + + dev_priv->engine.instmem.prepare_access(dev, true); + nv_wi32(dev, fc + 0, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUT)); + nv_wi32(dev, fc + 4, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_GET)); + nv_wi32(dev, fc + 8, nv_rd32(dev, NV10_PFIFO_CACHE1_REF_CNT)); + nv_wi32(dev, fc + 12, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_INSTANCE)); + nv_wi32(dev, fc + 16, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_DCOUNT)); + nv_wi32(dev, fc + 20, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_STATE)); + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_FETCH); + tmp |= nv_rd32(dev, 0x2058) & 0x30000000; + nv_wi32(dev, fc + 24, tmp); + nv_wi32(dev, fc + 28, nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE)); + nv_wi32(dev, fc + 32, nv_rd32(dev, NV04_PFIFO_CACHE1_PULL1)); + nv_wi32(dev, fc + 36, nv_rd32(dev, NV10_PFIFO_CACHE1_ACQUIRE_VALUE)); + tmp = nv_rd32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMESTAMP); + nv_wi32(dev, fc + 40, tmp); + nv_wi32(dev, fc + 44, nv_rd32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMEOUT)); + nv_wi32(dev, fc + 48, nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE)); + /* NVIDIA read 0x3228 first, then write DMA_GET here.. maybe something + * more involved depending on the value of 0x3228? + */ + nv_wi32(dev, fc + 52, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_GET)); + nv_wi32(dev, fc + 56, nv_rd32(dev, NV40_PFIFO_GRCTX_INSTANCE)); + nv_wi32(dev, fc + 60, nv_rd32(dev, NV04_PFIFO_DMA_TIMESLICE) & 0x1ffff); + /* No idea what the below is for exactly, ripped from a mmio-trace */ + nv_wi32(dev, fc + 64, nv_rd32(dev, NV40_PFIFO_UNK32E4)); + /* NVIDIA do this next line twice.. bug? */ + nv_wi32(dev, fc + 68, nv_rd32(dev, 0x32e8)); + nv_wi32(dev, fc + 76, nv_rd32(dev, 0x2088)); + nv_wi32(dev, fc + 80, nv_rd32(dev, 0x3300)); +#if 0 /* no real idea which is PUT/GET in UNK_48.. */ + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_GET); + tmp |= (nv_rd32(dev, NV04_PFIFO_CACHE1_PUT) << 16); + nv_wi32(dev, fc + 72, tmp); +#endif + dev_priv->engine.instmem.finish_access(dev); + + nv40_fifo_do_load_context(dev, pfifo->channels - 1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, + NV40_PFIFO_CACHE1_PUSH1_DMA | (pfifo->channels - 1)); + return 0; +} + +static void +nv40_fifo_init_reset(struct drm_device *dev) +{ + int i; + + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) & ~NV_PMC_ENABLE_PFIFO); + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) | NV_PMC_ENABLE_PFIFO); + + nv_wr32(dev, 0x003224, 0x000f0078); + nv_wr32(dev, 0x003210, 0x00000000); + nv_wr32(dev, 0x003270, 0x00000000); + nv_wr32(dev, 0x003240, 0x00000000); + nv_wr32(dev, 0x003244, 0x00000000); + nv_wr32(dev, 0x003258, 0x00000000); + nv_wr32(dev, 0x002504, 0x00000000); + for (i = 0; i < 16; i++) + nv_wr32(dev, 0x002510 + (i * 4), 0x00000000); + nv_wr32(dev, 0x00250c, 0x0000ffff); + nv_wr32(dev, 0x002048, 0x00000000); + nv_wr32(dev, 0x003228, 0x00000000); + nv_wr32(dev, 0x0032e8, 0x00000000); + nv_wr32(dev, 0x002410, 0x00000000); + nv_wr32(dev, 0x002420, 0x00000000); + nv_wr32(dev, 0x002058, 0x00000001); + nv_wr32(dev, 0x00221c, 0x00000000); + /* something with 0x2084, read/modify/write, no change */ + nv_wr32(dev, 0x002040, 0x000000ff); + nv_wr32(dev, 0x002500, 0x00000000); + nv_wr32(dev, 0x003200, 0x00000000); + + nv_wr32(dev, NV04_PFIFO_DMA_TIMESLICE, 0x2101ffff); +} + +static void +nv40_fifo_init_ramxx(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + nv_wr32(dev, NV03_PFIFO_RAMHT, (0x03 << 24) /* search 128 */ | + ((dev_priv->ramht_bits - 9) << 16) | + (dev_priv->ramht_offset >> 8)); + nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro_offset>>8); + + switch (dev_priv->chipset) { + case 0x47: + case 0x49: + case 0x4b: + nv_wr32(dev, 0x2230, 1); + break; + default: + break; + } + + switch (dev_priv->chipset) { + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x45: + case 0x47: + case 0x48: + case 0x49: + case 0x4b: + nv_wr32(dev, NV40_PFIFO_RAMFC, 0x30002); + break; + default: + nv_wr32(dev, 0x2230, 0); + nv_wr32(dev, NV40_PFIFO_RAMFC, + ((nouveau_mem_fb_amount(dev) - 512 * 1024 + + dev_priv->ramfc_offset) >> 16) | (3 << 16)); + break; + } +} + +static void +nv40_fifo_init_intr(struct drm_device *dev) +{ + nv_wr32(dev, 0x002100, 0xffffffff); + nv_wr32(dev, 0x002140, 0xffffffff); +} + +int +nv40_fifo_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + int i; + + nv40_fifo_init_reset(dev); + nv40_fifo_init_ramxx(dev); + + nv40_fifo_do_load_context(dev, pfifo->channels - 1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, pfifo->channels - 1); + + nv40_fifo_init_intr(dev); + pfifo->enable(dev); + pfifo->reassign(dev, true); + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + if (dev_priv->fifos[i]) { + uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); + nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); + } + } + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_fbcon.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_fbcon.c @@ -0,0 +1,267 @@ +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" +#include "nouveau_fbcon.h" + +void +nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + + if (info->state != FBINFO_STATE_RUNNING) + return; + + if (!(info->flags & FBINFO_HWACCEL_DISABLED) && + RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11)) { + nouveau_fbcon_gpu_lockup(info); + } + + if (info->flags & FBINFO_HWACCEL_DISABLED) { + cfb_fillrect(info, rect); + return; + } + + if (rect->rop != ROP_COPY) { + BEGIN_RING(chan, NvSub2D, 0x02ac, 1); + OUT_RING(chan, 1); + } + BEGIN_RING(chan, NvSub2D, 0x0588, 1); + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) + OUT_RING(chan, ((uint32_t *)info->pseudo_palette)[rect->color]); + else + OUT_RING(chan, rect->color); + BEGIN_RING(chan, NvSub2D, 0x0600, 4); + OUT_RING(chan, rect->dx); + OUT_RING(chan, rect->dy); + OUT_RING(chan, rect->dx + rect->width); + OUT_RING(chan, rect->dy + rect->height); + if (rect->rop != ROP_COPY) { + BEGIN_RING(chan, NvSub2D, 0x02ac, 1); + OUT_RING(chan, 3); + } + FIRE_RING(chan); +} + +void +nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + + if (info->state != FBINFO_STATE_RUNNING) + return; + + if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 12)) { + nouveau_fbcon_gpu_lockup(info); + } + + if (info->flags & FBINFO_HWACCEL_DISABLED) { + cfb_copyarea(info, region); + return; + } + + BEGIN_RING(chan, NvSub2D, 0x0110, 1); + OUT_RING(chan, 0); + BEGIN_RING(chan, NvSub2D, 0x08b0, 4); + OUT_RING(chan, region->dx); + OUT_RING(chan, region->dy); + OUT_RING(chan, region->width); + OUT_RING(chan, region->height); + BEGIN_RING(chan, NvSub2D, 0x08d0, 4); + OUT_RING(chan, 0); + OUT_RING(chan, region->sx); + OUT_RING(chan, 0); + OUT_RING(chan, region->sy); + FIRE_RING(chan); +} + +void +nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + uint32_t width, dwords, *data = (uint32_t *)image->data; + uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + uint32_t *palette = info->pseudo_palette; + + if (info->state != FBINFO_STATE_RUNNING) + return; + + if (image->depth != 1) { + cfb_imageblit(info, image); + return; + } + + if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 11)) { + nouveau_fbcon_gpu_lockup(info); + } + + if (info->flags & FBINFO_HWACCEL_DISABLED) { + cfb_imageblit(info, image); + return; + } + + width = (image->width + 31) & ~31; + dwords = (width * image->height) >> 5; + + BEGIN_RING(chan, NvSub2D, 0x0814, 2); + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) { + OUT_RING(chan, palette[image->bg_color] | mask); + OUT_RING(chan, palette[image->fg_color] | mask); + } else { + OUT_RING(chan, image->bg_color); + OUT_RING(chan, image->fg_color); + } + BEGIN_RING(chan, NvSub2D, 0x0838, 2); + OUT_RING(chan, image->width); + OUT_RING(chan, image->height); + BEGIN_RING(chan, NvSub2D, 0x0850, 4); + OUT_RING(chan, 0); + OUT_RING(chan, image->dx); + OUT_RING(chan, 0); + OUT_RING(chan, image->dy); + + while (dwords) { + int push = dwords > 2047 ? 2047 : dwords; + + if (RING_SPACE(chan, push + 1)) { + nouveau_fbcon_gpu_lockup(info); + cfb_imageblit(info, image); + return; + } + + dwords -= push; + + BEGIN_RING(chan, NvSub2D, 0x40000860, push); + OUT_RINGp(chan, data, push); + data += push; + } + + FIRE_RING(chan); +} + +int +nv50_fbcon_accel_init(struct fb_info *info) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + struct nouveau_gpuobj *eng2d = NULL; + int ret, format; + + switch (info->var.bits_per_pixel) { + case 8: + format = 0xf3; + break; + case 15: + format = 0xf8; + break; + case 16: + format = 0xe8; + break; + case 32: + switch (info->var.transp.length) { + case 0: /* depth 24 */ + case 8: /* depth 32, just use 24.. */ + format = 0xe6; + break; + case 2: /* depth 30 */ + format = 0xd1; + break; + default: + return -EINVAL; + } + break; + default: + return -EINVAL; + } + + ret = nouveau_gpuobj_gr_new(dev_priv->channel, 0x502d, &eng2d); + if (ret) + return ret; + + ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, Nv2D, eng2d, NULL); + if (ret) + return ret; + + ret = RING_SPACE(chan, 59); + if (ret) { + nouveau_fbcon_gpu_lockup(info); + return ret; + } + + BEGIN_RING(chan, NvSub2D, 0x0000, 1); + OUT_RING(chan, Nv2D); + BEGIN_RING(chan, NvSub2D, 0x0180, 4); + OUT_RING(chan, NvNotify0); + OUT_RING(chan, chan->vram_handle); + OUT_RING(chan, chan->vram_handle); + OUT_RING(chan, chan->vram_handle); + BEGIN_RING(chan, NvSub2D, 0x0290, 1); + OUT_RING(chan, 0); + BEGIN_RING(chan, NvSub2D, 0x0888, 1); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x02ac, 1); + OUT_RING(chan, 3); + BEGIN_RING(chan, NvSub2D, 0x02a0, 1); + OUT_RING(chan, 0x55); + BEGIN_RING(chan, NvSub2D, 0x08c0, 4); + OUT_RING(chan, 0); + OUT_RING(chan, 1); + OUT_RING(chan, 0); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0580, 2); + OUT_RING(chan, 4); + OUT_RING(chan, format); + BEGIN_RING(chan, NvSub2D, 0x02e8, 2); + OUT_RING(chan, 2); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0804, 1); + OUT_RING(chan, format); + BEGIN_RING(chan, NvSub2D, 0x0800, 1); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0808, 3); + OUT_RING(chan, 0); + OUT_RING(chan, 0); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x081c, 1); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0840, 4); + OUT_RING(chan, 0); + OUT_RING(chan, 1); + OUT_RING(chan, 0); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0200, 2); + OUT_RING(chan, format); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0214, 5); + OUT_RING(chan, info->fix.line_length); + OUT_RING(chan, info->var.xres_virtual); + OUT_RING(chan, info->var.yres_virtual); + OUT_RING(chan, 0); + OUT_RING(chan, info->fix.smem_start - dev_priv->fb_phys + + dev_priv->vm_vram_base); + BEGIN_RING(chan, NvSub2D, 0x0230, 2); + OUT_RING(chan, format); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSub2D, 0x0244, 5); + OUT_RING(chan, info->fix.line_length); + OUT_RING(chan, info->var.xres_virtual); + OUT_RING(chan, info->var.yres_virtual); + OUT_RING(chan, 0); + OUT_RING(chan, info->fix.smem_start - dev_priv->fb_phys + + dev_priv->vm_vram_base); + + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_display.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_display.c @@ -0,0 +1,287 @@ +/* + * Copyright 2009 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Author: Ben Skeggs + */ + +#include "drmP.h" +#include "drm.h" +#include "drm_crtc_helper.h" + +#include "nouveau_drv.h" +#include "nouveau_fb.h" +#include "nouveau_hw.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" + +#define MULTIPLE_ENCODERS(e) (e & (e - 1)) + +static void +nv04_display_store_initial_head_owner(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->chipset != 0x11) { + dev_priv->crtc_owner = NVReadVgaCrtc(dev, 0, NV_CIO_CRE_44); + goto ownerknown; + } + + /* reading CR44 is broken on nv11, so we attempt to infer it */ + if (nvReadMC(dev, NV_PBUS_DEBUG_1) & (1 << 28)) /* heads tied, restore both */ + dev_priv->crtc_owner = 0x4; + else { + uint8_t slaved_on_A, slaved_on_B; + bool tvA = false; + bool tvB = false; + + NVLockVgaCrtcs(dev, false); + + slaved_on_B = NVReadVgaCrtc(dev, 1, NV_CIO_CRE_PIXEL_INDEX) & + 0x80; + if (slaved_on_B) + tvB = !(NVReadVgaCrtc(dev, 1, NV_CIO_CRE_LCD__INDEX) & + MASK(NV_CIO_CRE_LCD_LCD_SELECT)); + + slaved_on_A = NVReadVgaCrtc(dev, 0, NV_CIO_CRE_PIXEL_INDEX) & + 0x80; + if (slaved_on_A) + tvA = !(NVReadVgaCrtc(dev, 0, NV_CIO_CRE_LCD__INDEX) & + MASK(NV_CIO_CRE_LCD_LCD_SELECT)); + + NVLockVgaCrtcs(dev, true); + + if (slaved_on_A && !tvA) + dev_priv->crtc_owner = 0x0; + else if (slaved_on_B && !tvB) + dev_priv->crtc_owner = 0x3; + else if (slaved_on_A) + dev_priv->crtc_owner = 0x0; + else if (slaved_on_B) + dev_priv->crtc_owner = 0x3; + else + dev_priv->crtc_owner = 0x0; + } + +ownerknown: + NV_INFO(dev, "Initial CRTC_OWNER is %d\n", dev_priv->crtc_owner); + + /* we need to ensure the heads are not tied henceforth, or reading any + * 8 bit reg on head B will fail + * setting a single arbitrary head solves that */ + NVSetOwner(dev, 0); +} + +int +nv04_display_create(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct parsed_dcb *dcb = dev_priv->vbios->dcb; + struct drm_encoder *encoder; + struct drm_crtc *crtc; + uint16_t connector[16] = { 0 }; + int i, ret; + + NV_DEBUG_KMS(dev, "\n"); + + if (nv_two_heads(dev)) + nv04_display_store_initial_head_owner(dev); + nouveau_hw_save_vga_fonts(dev, 1); + + drm_mode_config_init(dev); + drm_mode_create_scaling_mode_property(dev); + drm_mode_create_dithering_property(dev); + + dev->mode_config.funcs = (void *)&nouveau_mode_config_funcs; + + dev->mode_config.min_width = 0; + dev->mode_config.min_height = 0; + switch (dev_priv->card_type) { + case NV_04: + dev->mode_config.max_width = 2048; + dev->mode_config.max_height = 2048; + break; + default: + dev->mode_config.max_width = 4096; + dev->mode_config.max_height = 4096; + break; + } + + dev->mode_config.fb_base = dev_priv->fb_phys; + + nv04_crtc_create(dev, 0); + if (nv_two_heads(dev)) + nv04_crtc_create(dev, 1); + + for (i = 0; i < dcb->entries; i++) { + struct dcb_entry *dcbent = &dcb->entry[i]; + + switch (dcbent->type) { + case OUTPUT_ANALOG: + ret = nv04_dac_create(dev, dcbent); + break; + case OUTPUT_LVDS: + case OUTPUT_TMDS: + ret = nv04_dfp_create(dev, dcbent); + break; + case OUTPUT_TV: + if (dcbent->location == DCB_LOC_ON_CHIP) + ret = nv17_tv_create(dev, dcbent); + else + ret = nv04_tv_create(dev, dcbent); + break; + default: + NV_WARN(dev, "DCB type %d not known\n", dcbent->type); + continue; + } + + if (ret) + continue; + + connector[dcbent->connector] |= (1 << dcbent->type); + } + + for (i = 0; i < dcb->entries; i++) { + struct dcb_entry *dcbent = &dcb->entry[i]; + uint16_t encoders; + int type; + + encoders = connector[dcbent->connector]; + if (!(encoders & (1 << dcbent->type))) + continue; + connector[dcbent->connector] = 0; + + switch (dcbent->type) { + case OUTPUT_ANALOG: + if (!MULTIPLE_ENCODERS(encoders)) + type = DRM_MODE_CONNECTOR_VGA; + else + type = DRM_MODE_CONNECTOR_DVII; + break; + case OUTPUT_TMDS: + if (!MULTIPLE_ENCODERS(encoders)) + type = DRM_MODE_CONNECTOR_DVID; + else + type = DRM_MODE_CONNECTOR_DVII; + break; + case OUTPUT_LVDS: + type = DRM_MODE_CONNECTOR_LVDS; +#if 0 + /* don't create i2c adapter when lvds ddc not allowed */ + if (dcbent->lvdsconf.use_straps_for_mode || + dev_priv->vbios->fp_no_ddc) + i2c_index = 0xf; +#endif + break; + case OUTPUT_TV: + type = DRM_MODE_CONNECTOR_TV; + break; + default: + type = DRM_MODE_CONNECTOR_Unknown; + continue; + } + + nouveau_connector_create(dev, dcbent->connector, type); + } + + /* Save previous state */ + NVLockVgaCrtcs(dev, false); + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) + crtc->funcs->save(crtc); + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct drm_encoder_helper_funcs *func = encoder->helper_private; + + func->save(encoder); + } + + return 0; +} + +void +nv04_display_destroy(struct drm_device *dev) +{ + struct drm_encoder *encoder; + struct drm_crtc *crtc; + + NV_DEBUG_KMS(dev, "\n"); + + /* Turn every CRTC off. */ + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + struct drm_mode_set modeset = { + .crtc = crtc, + }; + + crtc->funcs->set_config(&modeset); + } + + /* Restore state */ + NVLockVgaCrtcs(dev, false); + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct drm_encoder_helper_funcs *func = encoder->helper_private; + + func->restore(encoder); + } + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) + crtc->funcs->restore(crtc); + + drm_mode_config_cleanup(dev); + + nouveau_hw_save_vga_fonts(dev, 0); +} + +void +nv04_display_restore(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_encoder *encoder; + struct drm_crtc *crtc; + + NVLockVgaCrtcs(dev, false); + + /* meh.. modeset apparently doesn't setup all the regs and depends + * on pre-existing state, for now load the state of the card *before* + * nouveau was loaded, and then do a modeset. + * + * best thing to do probably is to make save/restore routines not + * save/restore "pre-load" state, but more general so we can save + * on suspend too. + */ + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct drm_encoder_helper_funcs *func = encoder->helper_private; + + func->restore(encoder); + } + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) + crtc->funcs->restore(crtc); + + if (nv_two_heads(dev)) { + NV_INFO(dev, "Restoring CRTC_OWNER to %d.\n", + dev_priv->crtc_owner); + NVSetOwner(dev, dev_priv->crtc_owner); + } + + NVLockVgaCrtcs(dev, true); +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_calc.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_calc.c @@ -0,0 +1,478 @@ +/* + * Copyright 1993-2003 NVIDIA, Corporation + * Copyright 2007-2009 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_hw.h" + +/****************************************************************************\ +* * +* The video arbitration routines calculate some "magic" numbers. Fixes * +* the snow seen when accessing the framebuffer without it. * +* It just works (I hope). * +* * +\****************************************************************************/ + +struct nv_fifo_info { + int lwm; + int burst; +}; + +struct nv_sim_state { + int pclk_khz; + int mclk_khz; + int nvclk_khz; + int bpp; + int mem_page_miss; + int mem_latency; + int memory_type; + int memory_width; + int two_heads; +}; + +static void +nv04_calc_arb(struct nv_fifo_info *fifo, struct nv_sim_state *arb) +{ + int pagemiss, cas, width, bpp; + int nvclks, mclks, pclks, crtpagemiss; + int found, mclk_extra, mclk_loop, cbs, m1, p1; + int mclk_freq, pclk_freq, nvclk_freq; + int us_m, us_n, us_p, crtc_drain_rate; + int cpm_us, us_crt, clwm; + + pclk_freq = arb->pclk_khz; + mclk_freq = arb->mclk_khz; + nvclk_freq = arb->nvclk_khz; + pagemiss = arb->mem_page_miss; + cas = arb->mem_latency; + width = arb->memory_width >> 6; + bpp = arb->bpp; + cbs = 128; + + pclks = 2; + nvclks = 10; + mclks = 13 + cas; + mclk_extra = 3; + found = 0; + + while (!found) { + found = 1; + + mclk_loop = mclks + mclk_extra; + us_m = mclk_loop * 1000 * 1000 / mclk_freq; + us_n = nvclks * 1000 * 1000 / nvclk_freq; + us_p = nvclks * 1000 * 1000 / pclk_freq; + + crtc_drain_rate = pclk_freq * bpp / 8; + crtpagemiss = 2; + crtpagemiss += 1; + cpm_us = crtpagemiss * pagemiss * 1000 * 1000 / mclk_freq; + us_crt = cpm_us + us_m + us_n + us_p; + clwm = us_crt * crtc_drain_rate / (1000 * 1000); + clwm++; + + m1 = clwm + cbs - 512; + p1 = m1 * pclk_freq / mclk_freq; + p1 = p1 * bpp / 8; + if ((p1 < m1 && m1 > 0) || clwm > 519) { + found = !mclk_extra; + mclk_extra--; + } + if (clwm < 384) + clwm = 384; + + fifo->lwm = clwm; + fifo->burst = cbs; + } +} + +static void +nv10_calc_arb(struct nv_fifo_info *fifo, struct nv_sim_state *arb) +{ + int fill_rate, drain_rate; + int pclks, nvclks, mclks, xclks; + int pclk_freq, nvclk_freq, mclk_freq; + int fill_lat, extra_lat; + int max_burst_o, max_burst_l; + int fifo_len, min_lwm, max_lwm; + const int burst_lat = 80; /* Maximum allowable latency due + * to the CRTC FIFO burst. (ns) */ + + pclk_freq = arb->pclk_khz; + nvclk_freq = arb->nvclk_khz; + mclk_freq = arb->mclk_khz; + + fill_rate = mclk_freq * arb->memory_width / 8; /* kB/s */ + drain_rate = pclk_freq * arb->bpp / 8; /* kB/s */ + + fifo_len = arb->two_heads ? 1536 : 1024; /* B */ + + /* Fixed FIFO refill latency. */ + + pclks = 4; /* lwm detect. */ + + nvclks = 3 /* lwm -> sync. */ + + 2 /* fbi bus cycles (1 req + 1 busy) */ + + 1 /* 2 edge sync. may be very close to edge so + * just put one. */ + + 1 /* fbi_d_rdv_n */ + + 1 /* Fbi_d_rdata */ + + 1; /* crtfifo load */ + + mclks = 1 /* 2 edge sync. may be very close to edge so + * just put one. */ + + 1 /* arb_hp_req */ + + 5 /* tiling pipeline */ + + 2 /* latency fifo */ + + 2 /* memory request to fbio block */ + + 7; /* data returned from fbio block */ + + /* Need to accumulate 256 bits for read */ + mclks += (arb->memory_type == 0 ? 2 : 1) + * arb->memory_width / 32; + + fill_lat = mclks * 1000 * 1000 / mclk_freq /* minimum mclk latency */ + + nvclks * 1000 * 1000 / nvclk_freq /* nvclk latency */ + + pclks * 1000 * 1000 / pclk_freq; /* pclk latency */ + + /* Conditional FIFO refill latency. */ + + xclks = 2 * arb->mem_page_miss + mclks /* Extra latency due to + * the overlay. */ + + 2 * arb->mem_page_miss /* Extra pagemiss latency. */ + + (arb->bpp == 32 ? 8 : 4); /* Margin of error. */ + + extra_lat = xclks * 1000 * 1000 / mclk_freq; + + if (arb->two_heads) + /* Account for another CRTC. */ + extra_lat += fill_lat + extra_lat + burst_lat; + + /* FIFO burst */ + + /* Max burst not leading to overflows. */ + max_burst_o = (1 + fifo_len - extra_lat * drain_rate / (1000 * 1000)) + * (fill_rate / 1000) / ((fill_rate - drain_rate) / 1000); + fifo->burst = min(max_burst_o, 1024); + + /* Max burst value with an acceptable latency. */ + max_burst_l = burst_lat * fill_rate / (1000 * 1000); + fifo->burst = min(max_burst_l, fifo->burst); + + fifo->burst = rounddown_pow_of_two(fifo->burst); + + /* FIFO low watermark */ + + min_lwm = (fill_lat + extra_lat) * drain_rate / (1000 * 1000) + 1; + max_lwm = fifo_len - fifo->burst + + fill_lat * drain_rate / (1000 * 1000) + + fifo->burst * drain_rate / fill_rate; + + fifo->lwm = min_lwm + 10 * (max_lwm - min_lwm) / 100; /* Empirical. */ +} + +static void +nv04_update_arb(struct drm_device *dev, int VClk, int bpp, + int *burst, int *lwm) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv_fifo_info fifo_data; + struct nv_sim_state sim_data; + int MClk = nouveau_hw_get_clock(dev, MPLL); + int NVClk = nouveau_hw_get_clock(dev, NVPLL); + uint32_t cfg1 = nvReadFB(dev, NV_PFB_CFG1); + + sim_data.pclk_khz = VClk; + sim_data.mclk_khz = MClk; + sim_data.nvclk_khz = NVClk; + sim_data.bpp = bpp; + sim_data.two_heads = nv_two_heads(dev); + if ((dev->pci_device & 0xffff) == 0x01a0 /*CHIPSET_NFORCE*/ || + (dev->pci_device & 0xffff) == 0x01f0 /*CHIPSET_NFORCE2*/) { + uint32_t type; + + pci_read_config_dword(pci_get_bus_and_slot(0, 1), 0x7c, &type); + + sim_data.memory_type = (type >> 12) & 1; + sim_data.memory_width = 64; + sim_data.mem_latency = 3; + sim_data.mem_page_miss = 10; + } else { + sim_data.memory_type = nvReadFB(dev, NV_PFB_CFG0) & 0x1; + sim_data.memory_width = (nvReadEXTDEV(dev, NV_PEXTDEV_BOOT_0) & 0x10) ? 128 : 64; + sim_data.mem_latency = cfg1 & 0xf; + sim_data.mem_page_miss = ((cfg1 >> 4) & 0xf) + ((cfg1 >> 31) & 0x1); + } + + if (dev_priv->card_type == NV_04) + nv04_calc_arb(&fifo_data, &sim_data); + else + nv10_calc_arb(&fifo_data, &sim_data); + + *burst = ilog2(fifo_data.burst >> 4); + *lwm = fifo_data.lwm >> 3; +} + +static void +nv30_update_arb(int *burst, int *lwm) +{ + unsigned int fifo_size, burst_size, graphics_lwm; + + fifo_size = 2048; + burst_size = 512; + graphics_lwm = fifo_size - burst_size; + + *burst = ilog2(burst_size >> 5); + *lwm = graphics_lwm >> 3; +} + +void +nouveau_calc_arb(struct drm_device *dev, int vclk, int bpp, int *burst, int *lwm) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->card_type < NV_30) + nv04_update_arb(dev, vclk, bpp, burst, lwm); + else if ((dev->pci_device & 0xfff0) == 0x0240 /*CHIPSET_C51*/ || + (dev->pci_device & 0xfff0) == 0x03d0 /*CHIPSET_C512*/) { + *burst = 128; + *lwm = 0x0480; + } else + nv30_update_arb(burst, lwm); +} + +static int +getMNP_single(struct drm_device *dev, struct pll_lims *pll_lim, int clk, + struct nouveau_pll_vals *bestpv) +{ + /* Find M, N and P for a single stage PLL + * + * Note that some bioses (NV3x) have lookup tables of precomputed MNP + * values, but we're too lazy to use those atm + * + * "clk" parameter in kHz + * returns calculated clock + */ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int cv = dev_priv->vbios->chip_version; + int minvco = pll_lim->vco1.minfreq, maxvco = pll_lim->vco1.maxfreq; + int minM = pll_lim->vco1.min_m, maxM = pll_lim->vco1.max_m; + int minN = pll_lim->vco1.min_n, maxN = pll_lim->vco1.max_n; + int minU = pll_lim->vco1.min_inputfreq; + int maxU = pll_lim->vco1.max_inputfreq; + int minP = pll_lim->max_p ? pll_lim->min_p : 0; + int maxP = pll_lim->max_p ? pll_lim->max_p : pll_lim->max_usable_log2p; + int crystal = pll_lim->refclk; + int M, N, thisP, P; + int clkP, calcclk; + int delta, bestdelta = INT_MAX; + int bestclk = 0; + + /* this division verified for nv20, nv18, nv28 (Haiku), and nv34 */ + /* possibly correlated with introduction of 27MHz crystal */ + if (dev_priv->card_type < NV_50) { + if (cv < 0x17 || cv == 0x1a || cv == 0x20) { + if (clk > 250000) + maxM = 6; + if (clk > 340000) + maxM = 2; + } else if (cv < 0x40) { + if (clk > 150000) + maxM = 6; + if (clk > 200000) + maxM = 4; + if (clk > 340000) + maxM = 2; + } + } + + P = pll_lim->max_p ? maxP : (1 << maxP); + if ((clk * P) < minvco) { + minvco = clk * maxP; + maxvco = minvco * 2; + } + + if (clk + clk/200 > maxvco) /* +0.5% */ + maxvco = clk + clk/200; + + /* NV34 goes maxlog2P->0, NV20 goes 0->maxlog2P */ + for (thisP = minP; thisP <= maxP; thisP++) { + P = pll_lim->max_p ? thisP : (1 << thisP); + clkP = clk * P; + + if (clkP < minvco) + continue; + if (clkP > maxvco) + return bestclk; + + for (M = minM; M <= maxM; M++) { + if (crystal/M < minU) + return bestclk; + if (crystal/M > maxU) + continue; + + /* add crystal/2 to round better */ + N = (clkP * M + crystal/2) / crystal; + + if (N < minN) + continue; + if (N > maxN) + break; + + /* more rounding additions */ + calcclk = ((N * crystal + P/2) / P + M/2) / M; + delta = abs(calcclk - clk); + /* we do an exhaustive search rather than terminating + * on an optimality condition... + */ + if (delta < bestdelta) { + bestdelta = delta; + bestclk = calcclk; + bestpv->N1 = N; + bestpv->M1 = M; + bestpv->log2P = thisP; + if (delta == 0) /* except this one */ + return bestclk; + } + } + } + + return bestclk; +} + +static int +getMNP_double(struct drm_device *dev, struct pll_lims *pll_lim, int clk, + struct nouveau_pll_vals *bestpv) +{ + /* Find M, N and P for a two stage PLL + * + * Note that some bioses (NV30+) have lookup tables of precomputed MNP + * values, but we're too lazy to use those atm + * + * "clk" parameter in kHz + * returns calculated clock + */ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int chip_version = dev_priv->vbios->chip_version; + int minvco1 = pll_lim->vco1.minfreq, maxvco1 = pll_lim->vco1.maxfreq; + int minvco2 = pll_lim->vco2.minfreq, maxvco2 = pll_lim->vco2.maxfreq; + int minU1 = pll_lim->vco1.min_inputfreq, minU2 = pll_lim->vco2.min_inputfreq; + int maxU1 = pll_lim->vco1.max_inputfreq, maxU2 = pll_lim->vco2.max_inputfreq; + int minM1 = pll_lim->vco1.min_m, maxM1 = pll_lim->vco1.max_m; + int minN1 = pll_lim->vco1.min_n, maxN1 = pll_lim->vco1.max_n; + int minM2 = pll_lim->vco2.min_m, maxM2 = pll_lim->vco2.max_m; + int minN2 = pll_lim->vco2.min_n, maxN2 = pll_lim->vco2.max_n; + int maxlog2P = pll_lim->max_usable_log2p; + int crystal = pll_lim->refclk; + bool fixedgain2 = (minM2 == maxM2 && minN2 == maxN2); + int M1, N1, M2, N2, log2P; + int clkP, calcclk1, calcclk2, calcclkout; + int delta, bestdelta = INT_MAX; + int bestclk = 0; + + int vco2 = (maxvco2 - maxvco2/200) / 2; + for (log2P = 0; clk && log2P < maxlog2P && clk <= (vco2 >> log2P); log2P++) + ; + clkP = clk << log2P; + + if (maxvco2 < clk + clk/200) /* +0.5% */ + maxvco2 = clk + clk/200; + + for (M1 = minM1; M1 <= maxM1; M1++) { + if (crystal/M1 < minU1) + return bestclk; + if (crystal/M1 > maxU1) + continue; + + for (N1 = minN1; N1 <= maxN1; N1++) { + calcclk1 = crystal * N1 / M1; + if (calcclk1 < minvco1) + continue; + if (calcclk1 > maxvco1) + break; + + for (M2 = minM2; M2 <= maxM2; M2++) { + if (calcclk1/M2 < minU2) + break; + if (calcclk1/M2 > maxU2) + continue; + + /* add calcclk1/2 to round better */ + N2 = (clkP * M2 + calcclk1/2) / calcclk1; + if (N2 < minN2) + continue; + if (N2 > maxN2) + break; + + if (!fixedgain2) { + if (chip_version < 0x60) + if (N2/M2 < 4 || N2/M2 > 10) + continue; + + calcclk2 = calcclk1 * N2 / M2; + if (calcclk2 < minvco2) + break; + if (calcclk2 > maxvco2) + continue; + } else + calcclk2 = calcclk1; + + calcclkout = calcclk2 >> log2P; + delta = abs(calcclkout - clk); + /* we do an exhaustive search rather than terminating + * on an optimality condition... + */ + if (delta < bestdelta) { + bestdelta = delta; + bestclk = calcclkout; + bestpv->N1 = N1; + bestpv->M1 = M1; + bestpv->N2 = N2; + bestpv->M2 = M2; + bestpv->log2P = log2P; + if (delta == 0) /* except this one */ + return bestclk; + } + } + } + } + + return bestclk; +} + +int +nouveau_calc_pll_mnp(struct drm_device *dev, struct pll_lims *pll_lim, int clk, + struct nouveau_pll_vals *pv) +{ + int outclk; + + if (!pll_lim->vco2.maxfreq) + outclk = getMNP_single(dev, pll_lim, clk, pv); + else + outclk = getMNP_double(dev, pll_lim, clk, pv); + + if (!outclk) + NV_ERROR(dev, "Could not find a compatible set of PLL values\n"); + + return outclk; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv40_grctx.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv40_grctx.c @@ -0,0 +1,678 @@ +/* + * Copyright 2009 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Ben Skeggs + */ + +/* NVIDIA context programs handle a number of other conditions which are + * not implemented in our versions. It's not clear why NVIDIA context + * programs have this code, nor whether it's strictly necessary for + * correct operation. We'll implement additional handling if/when we + * discover it's necessary. + * + * - On context save, NVIDIA set 0x400314 bit 0 to 1 if the "3D state" + * flag is set, this gets saved into the context. + * - On context save, the context program for all cards load nsource + * into a flag register and check for ILLEGAL_MTHD. If it's set, + * opcode 0x60000d is called before resuming normal operation. + * - Some context programs check more conditions than the above. NV44 + * checks: ((nsource & 0x0857) || (0x400718 & 0x0100) || (intr & 0x0001)) + * and calls 0x60000d before resuming normal operation. + * - At the very beginning of NVIDIA's context programs, flag 9 is checked + * and if true 0x800001 is called with count=0, pos=0, the flag is cleared + * and then the ctxprog is aborted. It looks like a complicated NOP, + * its purpose is unknown. + * - In the section of code that loads the per-vs state, NVIDIA check + * flag 10. If it's set, they only transfer the small 0x300 byte block + * of state + the state for a single vs as opposed to the state for + * all vs units. It doesn't seem likely that it'll occur in normal + * operation, especially seeing as it appears NVIDIA may have screwed + * up the ctxprogs for some cards and have an invalid instruction + * rather than a cp_lsr(ctx, dwords_for_1_vs_unit) instruction. + * - There's a number of places where context offset 0 (where we place + * the PRAMIN offset of the context) is loaded into either 0x408000, + * 0x408004 or 0x408008. Not sure what's up there either. + * - The ctxprogs for some cards save 0x400a00 again during the cleanup + * path for auto-loadctx. + */ + +#define CP_FLAG_CLEAR 0 +#define CP_FLAG_SET 1 +#define CP_FLAG_SWAP_DIRECTION ((0 * 32) + 0) +#define CP_FLAG_SWAP_DIRECTION_LOAD 0 +#define CP_FLAG_SWAP_DIRECTION_SAVE 1 +#define CP_FLAG_USER_SAVE ((0 * 32) + 5) +#define CP_FLAG_USER_SAVE_NOT_PENDING 0 +#define CP_FLAG_USER_SAVE_PENDING 1 +#define CP_FLAG_USER_LOAD ((0 * 32) + 6) +#define CP_FLAG_USER_LOAD_NOT_PENDING 0 +#define CP_FLAG_USER_LOAD_PENDING 1 +#define CP_FLAG_STATUS ((3 * 32) + 0) +#define CP_FLAG_STATUS_IDLE 0 +#define CP_FLAG_STATUS_BUSY 1 +#define CP_FLAG_AUTO_SAVE ((3 * 32) + 4) +#define CP_FLAG_AUTO_SAVE_NOT_PENDING 0 +#define CP_FLAG_AUTO_SAVE_PENDING 1 +#define CP_FLAG_AUTO_LOAD ((3 * 32) + 5) +#define CP_FLAG_AUTO_LOAD_NOT_PENDING 0 +#define CP_FLAG_AUTO_LOAD_PENDING 1 +#define CP_FLAG_UNK54 ((3 * 32) + 6) +#define CP_FLAG_UNK54_CLEAR 0 +#define CP_FLAG_UNK54_SET 1 +#define CP_FLAG_ALWAYS ((3 * 32) + 8) +#define CP_FLAG_ALWAYS_FALSE 0 +#define CP_FLAG_ALWAYS_TRUE 1 +#define CP_FLAG_UNK57 ((3 * 32) + 9) +#define CP_FLAG_UNK57_CLEAR 0 +#define CP_FLAG_UNK57_SET 1 + +#define CP_CTX 0x00100000 +#define CP_CTX_COUNT 0x000fc000 +#define CP_CTX_COUNT_SHIFT 14 +#define CP_CTX_REG 0x00003fff +#define CP_LOAD_SR 0x00200000 +#define CP_LOAD_SR_VALUE 0x000fffff +#define CP_BRA 0x00400000 +#define CP_BRA_IP 0x0000ff00 +#define CP_BRA_IP_SHIFT 8 +#define CP_BRA_IF_CLEAR 0x00000080 +#define CP_BRA_FLAG 0x0000007f +#define CP_WAIT 0x00500000 +#define CP_WAIT_SET 0x00000080 +#define CP_WAIT_FLAG 0x0000007f +#define CP_SET 0x00700000 +#define CP_SET_1 0x00000080 +#define CP_SET_FLAG 0x0000007f +#define CP_NEXT_TO_SWAP 0x00600007 +#define CP_NEXT_TO_CURRENT 0x00600009 +#define CP_SET_CONTEXT_POINTER 0x0060000a +#define CP_END 0x0060000e +#define CP_LOAD_MAGIC_UNK01 0x00800001 /* unknown */ +#define CP_LOAD_MAGIC_NV44TCL 0x00800029 /* per-vs state (0x4497) */ +#define CP_LOAD_MAGIC_NV40TCL 0x00800041 /* per-vs state (0x4097) */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_grctx.h" + +/* TODO: + * - get vs count from 0x1540 + * - document unimplemented bits compared to nvidia + * - nsource handling + * - R0 & 0x0200 handling + * - single-vs handling + * - 400314 bit 0 + */ + +static int +nv40_graph_4097(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if ((dev_priv->chipset & 0xf0) == 0x60) + return 0; + + return !!(0x0baf & (1 << dev_priv->chipset)); +} + +static int +nv40_graph_vs_count(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + switch (dev_priv->chipset) { + case 0x47: + case 0x49: + case 0x4b: + return 8; + case 0x40: + return 6; + case 0x41: + case 0x42: + return 5; + case 0x43: + case 0x44: + case 0x46: + case 0x4a: + return 3; + case 0x4c: + case 0x4e: + case 0x67: + default: + return 1; + } +} + + +enum cp_label { + cp_check_load = 1, + cp_setup_auto_load, + cp_setup_load, + cp_setup_save, + cp_swap_state, + cp_swap_state3d_3_is_save, + cp_prepare_exit, + cp_exit, +}; + +static void +nv40_graph_construct_general(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i; + + cp_ctx(ctx, 0x4000a4, 1); + gr_def(ctx, 0x4000a4, 0x00000008); + cp_ctx(ctx, 0x400144, 58); + gr_def(ctx, 0x400144, 0x00000001); + cp_ctx(ctx, 0x400314, 1); + gr_def(ctx, 0x400314, 0x00000000); + cp_ctx(ctx, 0x400400, 10); + cp_ctx(ctx, 0x400480, 10); + cp_ctx(ctx, 0x400500, 19); + gr_def(ctx, 0x400514, 0x00040000); + gr_def(ctx, 0x400524, 0x55555555); + gr_def(ctx, 0x400528, 0x55555555); + gr_def(ctx, 0x40052c, 0x55555555); + gr_def(ctx, 0x400530, 0x55555555); + cp_ctx(ctx, 0x400560, 6); + gr_def(ctx, 0x400568, 0x0000ffff); + gr_def(ctx, 0x40056c, 0x0000ffff); + cp_ctx(ctx, 0x40057c, 5); + cp_ctx(ctx, 0x400710, 3); + gr_def(ctx, 0x400710, 0x20010001); + gr_def(ctx, 0x400714, 0x0f73ef00); + cp_ctx(ctx, 0x400724, 1); + gr_def(ctx, 0x400724, 0x02008821); + cp_ctx(ctx, 0x400770, 3); + if (dev_priv->chipset == 0x40) { + cp_ctx(ctx, 0x400814, 4); + cp_ctx(ctx, 0x400828, 5); + cp_ctx(ctx, 0x400840, 5); + gr_def(ctx, 0x400850, 0x00000040); + cp_ctx(ctx, 0x400858, 4); + gr_def(ctx, 0x400858, 0x00000040); + gr_def(ctx, 0x40085c, 0x00000040); + gr_def(ctx, 0x400864, 0x80000000); + cp_ctx(ctx, 0x40086c, 9); + gr_def(ctx, 0x40086c, 0x80000000); + gr_def(ctx, 0x400870, 0x80000000); + gr_def(ctx, 0x400874, 0x80000000); + gr_def(ctx, 0x400878, 0x80000000); + gr_def(ctx, 0x400888, 0x00000040); + gr_def(ctx, 0x40088c, 0x80000000); + cp_ctx(ctx, 0x4009c0, 8); + gr_def(ctx, 0x4009cc, 0x80000000); + gr_def(ctx, 0x4009dc, 0x80000000); + } else { + cp_ctx(ctx, 0x400840, 20); + if (!nv40_graph_4097(ctx->dev)) { + for (i = 0; i < 8; i++) + gr_def(ctx, 0x400860 + (i * 4), 0x00000001); + } + gr_def(ctx, 0x400880, 0x00000040); + gr_def(ctx, 0x400884, 0x00000040); + gr_def(ctx, 0x400888, 0x00000040); + cp_ctx(ctx, 0x400894, 11); + gr_def(ctx, 0x400894, 0x00000040); + if (nv40_graph_4097(ctx->dev)) { + for (i = 0; i < 8; i++) + gr_def(ctx, 0x4008a0 + (i * 4), 0x80000000); + } + cp_ctx(ctx, 0x4008e0, 2); + cp_ctx(ctx, 0x4008f8, 2); + if (dev_priv->chipset == 0x4c || + (dev_priv->chipset & 0xf0) == 0x60) + cp_ctx(ctx, 0x4009f8, 1); + } + cp_ctx(ctx, 0x400a00, 73); + gr_def(ctx, 0x400b0c, 0x0b0b0b0c); + cp_ctx(ctx, 0x401000, 4); + cp_ctx(ctx, 0x405004, 1); + switch (dev_priv->chipset) { + case 0x47: + case 0x49: + case 0x4b: + cp_ctx(ctx, 0x403448, 1); + gr_def(ctx, 0x403448, 0x00001010); + break; + default: + cp_ctx(ctx, 0x403440, 1); + switch (dev_priv->chipset) { + case 0x40: + gr_def(ctx, 0x403440, 0x00000010); + break; + case 0x44: + case 0x46: + case 0x4a: + gr_def(ctx, 0x403440, 0x00003010); + break; + case 0x41: + case 0x42: + case 0x43: + case 0x4c: + case 0x4e: + case 0x67: + default: + gr_def(ctx, 0x403440, 0x00001010); + break; + } + break; + } +} + +static void +nv40_graph_construct_state3d(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i; + + if (dev_priv->chipset == 0x40) { + cp_ctx(ctx, 0x401880, 51); + gr_def(ctx, 0x401940, 0x00000100); + } else + if (dev_priv->chipset == 0x46 || dev_priv->chipset == 0x47 || + dev_priv->chipset == 0x49 || dev_priv->chipset == 0x4b) { + cp_ctx(ctx, 0x401880, 32); + for (i = 0; i < 16; i++) + gr_def(ctx, 0x401880 + (i * 4), 0x00000111); + if (dev_priv->chipset == 0x46) + cp_ctx(ctx, 0x401900, 16); + cp_ctx(ctx, 0x401940, 3); + } + cp_ctx(ctx, 0x40194c, 18); + gr_def(ctx, 0x401954, 0x00000111); + gr_def(ctx, 0x401958, 0x00080060); + gr_def(ctx, 0x401974, 0x00000080); + gr_def(ctx, 0x401978, 0xffff0000); + gr_def(ctx, 0x40197c, 0x00000001); + gr_def(ctx, 0x401990, 0x46400000); + if (dev_priv->chipset == 0x40) { + cp_ctx(ctx, 0x4019a0, 2); + cp_ctx(ctx, 0x4019ac, 5); + } else { + cp_ctx(ctx, 0x4019a0, 1); + cp_ctx(ctx, 0x4019b4, 3); + } + gr_def(ctx, 0x4019bc, 0xffff0000); + switch (dev_priv->chipset) { + case 0x46: + case 0x47: + case 0x49: + case 0x4b: + cp_ctx(ctx, 0x4019c0, 18); + for (i = 0; i < 16; i++) + gr_def(ctx, 0x4019c0 + (i * 4), 0x88888888); + break; + } + cp_ctx(ctx, 0x401a08, 8); + gr_def(ctx, 0x401a10, 0x0fff0000); + gr_def(ctx, 0x401a14, 0x0fff0000); + gr_def(ctx, 0x401a1c, 0x00011100); + cp_ctx(ctx, 0x401a2c, 4); + cp_ctx(ctx, 0x401a44, 26); + for (i = 0; i < 16; i++) + gr_def(ctx, 0x401a44 + (i * 4), 0x07ff0000); + gr_def(ctx, 0x401a8c, 0x4b7fffff); + if (dev_priv->chipset == 0x40) { + cp_ctx(ctx, 0x401ab8, 3); + } else { + cp_ctx(ctx, 0x401ab8, 1); + cp_ctx(ctx, 0x401ac0, 1); + } + cp_ctx(ctx, 0x401ad0, 8); + gr_def(ctx, 0x401ad0, 0x30201000); + gr_def(ctx, 0x401ad4, 0x70605040); + gr_def(ctx, 0x401ad8, 0xb8a89888); + gr_def(ctx, 0x401adc, 0xf8e8d8c8); + cp_ctx(ctx, 0x401b10, dev_priv->chipset == 0x40 ? 2 : 1); + gr_def(ctx, 0x401b10, 0x40100000); + cp_ctx(ctx, 0x401b18, dev_priv->chipset == 0x40 ? 6 : 5); + gr_def(ctx, 0x401b28, dev_priv->chipset == 0x40 ? + 0x00000004 : 0x00000000); + cp_ctx(ctx, 0x401b30, 25); + gr_def(ctx, 0x401b34, 0x0000ffff); + gr_def(ctx, 0x401b68, 0x435185d6); + gr_def(ctx, 0x401b6c, 0x2155b699); + gr_def(ctx, 0x401b70, 0xfedcba98); + gr_def(ctx, 0x401b74, 0x00000098); + gr_def(ctx, 0x401b84, 0xffffffff); + gr_def(ctx, 0x401b88, 0x00ff7000); + gr_def(ctx, 0x401b8c, 0x0000ffff); + if (dev_priv->chipset != 0x44 && dev_priv->chipset != 0x4a && + dev_priv->chipset != 0x4e) + cp_ctx(ctx, 0x401b94, 1); + cp_ctx(ctx, 0x401b98, 8); + gr_def(ctx, 0x401b9c, 0x00ff0000); + cp_ctx(ctx, 0x401bc0, 9); + gr_def(ctx, 0x401be0, 0x00ffff00); + cp_ctx(ctx, 0x401c00, 192); + for (i = 0; i < 16; i++) { /* fragment texture units */ + gr_def(ctx, 0x401c40 + (i * 4), 0x00018488); + gr_def(ctx, 0x401c80 + (i * 4), 0x00028202); + gr_def(ctx, 0x401d00 + (i * 4), 0x0000aae4); + gr_def(ctx, 0x401d40 + (i * 4), 0x01012000); + gr_def(ctx, 0x401d80 + (i * 4), 0x00080008); + gr_def(ctx, 0x401e00 + (i * 4), 0x00100008); + } + for (i = 0; i < 4; i++) { /* vertex texture units */ + gr_def(ctx, 0x401e90 + (i * 4), 0x0001bc80); + gr_def(ctx, 0x401ea0 + (i * 4), 0x00000202); + gr_def(ctx, 0x401ec0 + (i * 4), 0x00000008); + gr_def(ctx, 0x401ee0 + (i * 4), 0x00080008); + } + cp_ctx(ctx, 0x400f5c, 3); + gr_def(ctx, 0x400f5c, 0x00000002); + cp_ctx(ctx, 0x400f84, 1); +} + +static void +nv40_graph_construct_state3d_2(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i; + + cp_ctx(ctx, 0x402000, 1); + cp_ctx(ctx, 0x402404, dev_priv->chipset == 0x40 ? 1 : 2); + switch (dev_priv->chipset) { + case 0x40: + gr_def(ctx, 0x402404, 0x00000001); + break; + case 0x4c: + case 0x4e: + case 0x67: + gr_def(ctx, 0x402404, 0x00000020); + break; + case 0x46: + case 0x49: + case 0x4b: + gr_def(ctx, 0x402404, 0x00000421); + break; + default: + gr_def(ctx, 0x402404, 0x00000021); + } + if (dev_priv->chipset != 0x40) + gr_def(ctx, 0x402408, 0x030c30c3); + switch (dev_priv->chipset) { + case 0x44: + case 0x46: + case 0x4a: + case 0x4c: + case 0x4e: + case 0x67: + cp_ctx(ctx, 0x402440, 1); + gr_def(ctx, 0x402440, 0x00011001); + break; + default: + break; + } + cp_ctx(ctx, 0x402480, dev_priv->chipset == 0x40 ? 8 : 9); + gr_def(ctx, 0x402488, 0x3e020200); + gr_def(ctx, 0x40248c, 0x00ffffff); + switch (dev_priv->chipset) { + case 0x40: + gr_def(ctx, 0x402490, 0x60103f00); + break; + case 0x47: + gr_def(ctx, 0x402490, 0x40103f00); + break; + case 0x41: + case 0x42: + case 0x49: + case 0x4b: + gr_def(ctx, 0x402490, 0x20103f00); + break; + default: + gr_def(ctx, 0x402490, 0x0c103f00); + break; + } + gr_def(ctx, 0x40249c, dev_priv->chipset <= 0x43 ? + 0x00020000 : 0x00040000); + cp_ctx(ctx, 0x402500, 31); + gr_def(ctx, 0x402530, 0x00008100); + if (dev_priv->chipset == 0x40) + cp_ctx(ctx, 0x40257c, 6); + cp_ctx(ctx, 0x402594, 16); + cp_ctx(ctx, 0x402800, 17); + gr_def(ctx, 0x402800, 0x00000001); + switch (dev_priv->chipset) { + case 0x47: + case 0x49: + case 0x4b: + cp_ctx(ctx, 0x402864, 1); + gr_def(ctx, 0x402864, 0x00001001); + cp_ctx(ctx, 0x402870, 3); + gr_def(ctx, 0x402878, 0x00000003); + if (dev_priv->chipset != 0x47) { /* belong at end!! */ + cp_ctx(ctx, 0x402900, 1); + cp_ctx(ctx, 0x402940, 1); + cp_ctx(ctx, 0x402980, 1); + cp_ctx(ctx, 0x4029c0, 1); + cp_ctx(ctx, 0x402a00, 1); + cp_ctx(ctx, 0x402a40, 1); + cp_ctx(ctx, 0x402a80, 1); + cp_ctx(ctx, 0x402ac0, 1); + } + break; + case 0x40: + cp_ctx(ctx, 0x402844, 1); + gr_def(ctx, 0x402844, 0x00000001); + cp_ctx(ctx, 0x402850, 1); + break; + default: + cp_ctx(ctx, 0x402844, 1); + gr_def(ctx, 0x402844, 0x00001001); + cp_ctx(ctx, 0x402850, 2); + gr_def(ctx, 0x402854, 0x00000003); + break; + } + + cp_ctx(ctx, 0x402c00, 4); + gr_def(ctx, 0x402c00, dev_priv->chipset == 0x40 ? + 0x80800001 : 0x00888001); + switch (dev_priv->chipset) { + case 0x47: + case 0x49: + case 0x4b: + cp_ctx(ctx, 0x402c20, 40); + for (i = 0; i < 32; i++) + gr_def(ctx, 0x402c40 + (i * 4), 0xffffffff); + cp_ctx(ctx, 0x4030b8, 13); + gr_def(ctx, 0x4030dc, 0x00000005); + gr_def(ctx, 0x4030e8, 0x0000ffff); + break; + default: + cp_ctx(ctx, 0x402c10, 4); + if (dev_priv->chipset == 0x40) + cp_ctx(ctx, 0x402c20, 36); + else + if (dev_priv->chipset <= 0x42) + cp_ctx(ctx, 0x402c20, 24); + else + if (dev_priv->chipset <= 0x4a) + cp_ctx(ctx, 0x402c20, 16); + else + cp_ctx(ctx, 0x402c20, 8); + cp_ctx(ctx, 0x402cb0, dev_priv->chipset == 0x40 ? 12 : 13); + gr_def(ctx, 0x402cd4, 0x00000005); + if (dev_priv->chipset != 0x40) + gr_def(ctx, 0x402ce0, 0x0000ffff); + break; + } + + cp_ctx(ctx, 0x403400, dev_priv->chipset == 0x40 ? 4 : 3); + cp_ctx(ctx, 0x403410, dev_priv->chipset == 0x40 ? 4 : 3); + cp_ctx(ctx, 0x403420, nv40_graph_vs_count(ctx->dev)); + for (i = 0; i < nv40_graph_vs_count(ctx->dev); i++) + gr_def(ctx, 0x403420 + (i * 4), 0x00005555); + + if (dev_priv->chipset != 0x40) { + cp_ctx(ctx, 0x403600, 1); + gr_def(ctx, 0x403600, 0x00000001); + } + cp_ctx(ctx, 0x403800, 1); + + cp_ctx(ctx, 0x403c18, 1); + gr_def(ctx, 0x403c18, 0x00000001); + switch (dev_priv->chipset) { + case 0x46: + case 0x47: + case 0x49: + case 0x4b: + cp_ctx(ctx, 0x405018, 1); + gr_def(ctx, 0x405018, 0x08e00001); + cp_ctx(ctx, 0x405c24, 1); + gr_def(ctx, 0x405c24, 0x000e3000); + break; + } + if (dev_priv->chipset != 0x4e) + cp_ctx(ctx, 0x405800, 11); + cp_ctx(ctx, 0x407000, 1); +} + +static void +nv40_graph_construct_state3d_3(struct nouveau_grctx *ctx) +{ + int len = nv40_graph_4097(ctx->dev) ? 0x0684 : 0x0084; + + cp_out (ctx, 0x300000); + cp_lsr (ctx, len - 4); + cp_bra (ctx, SWAP_DIRECTION, SAVE, cp_swap_state3d_3_is_save); + cp_lsr (ctx, len); + cp_name(ctx, cp_swap_state3d_3_is_save); + cp_out (ctx, 0x800001); + + ctx->ctxvals_pos += len; +} + +static void +nv40_graph_construct_shader(struct nouveau_grctx *ctx) +{ + struct drm_device *dev = ctx->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *obj = ctx->data; + int vs, vs_nr, vs_len, vs_nr_b0, vs_nr_b1, b0_offset, b1_offset; + int offset, i; + + vs_nr = nv40_graph_vs_count(ctx->dev); + vs_nr_b0 = 363; + vs_nr_b1 = dev_priv->chipset == 0x40 ? 128 : 64; + if (dev_priv->chipset == 0x40) { + b0_offset = 0x2200/4; /* 33a0 */ + b1_offset = 0x55a0/4; /* 1500 */ + vs_len = 0x6aa0/4; + } else + if (dev_priv->chipset == 0x41 || dev_priv->chipset == 0x42) { + b0_offset = 0x2200/4; /* 2200 */ + b1_offset = 0x4400/4; /* 0b00 */ + vs_len = 0x4f00/4; + } else { + b0_offset = 0x1d40/4; /* 2200 */ + b1_offset = 0x3f40/4; /* 0b00 : 0a40 */ + vs_len = nv40_graph_4097(dev) ? 0x4a40/4 : 0x4980/4; + } + + cp_lsr(ctx, vs_len * vs_nr + 0x300/4); + cp_out(ctx, nv40_graph_4097(dev) ? 0x800041 : 0x800029); + + offset = ctx->ctxvals_pos; + ctx->ctxvals_pos += (0x0300/4 + (vs_nr * vs_len)); + + if (ctx->mode != NOUVEAU_GRCTX_VALS) + return; + + offset += 0x0280/4; + for (i = 0; i < 16; i++, offset += 2) + nv_wo32(dev, obj, offset, 0x3f800000); + + for (vs = 0; vs < vs_nr; vs++, offset += vs_len) { + for (i = 0; i < vs_nr_b0 * 6; i += 6) + nv_wo32(dev, obj, offset + b0_offset + i, 0x00000001); + for (i = 0; i < vs_nr_b1 * 4; i += 4) + nv_wo32(dev, obj, offset + b1_offset + i, 0x3f800000); + } +} + +void +nv40_grctx_init(struct nouveau_grctx *ctx) +{ + /* decide whether we're loading/unloading the context */ + cp_bra (ctx, AUTO_SAVE, PENDING, cp_setup_save); + cp_bra (ctx, USER_SAVE, PENDING, cp_setup_save); + + cp_name(ctx, cp_check_load); + cp_bra (ctx, AUTO_LOAD, PENDING, cp_setup_auto_load); + cp_bra (ctx, USER_LOAD, PENDING, cp_setup_load); + cp_bra (ctx, ALWAYS, TRUE, cp_exit); + + /* setup for context load */ + cp_name(ctx, cp_setup_auto_load); + cp_wait(ctx, STATUS, IDLE); + cp_out (ctx, CP_NEXT_TO_SWAP); + cp_name(ctx, cp_setup_load); + cp_wait(ctx, STATUS, IDLE); + cp_set (ctx, SWAP_DIRECTION, LOAD); + cp_out (ctx, 0x00910880); /* ?? */ + cp_out (ctx, 0x00901ffe); /* ?? */ + cp_out (ctx, 0x01940000); /* ?? */ + cp_lsr (ctx, 0x20); + cp_out (ctx, 0x0060000b); /* ?? */ + cp_wait(ctx, UNK57, CLEAR); + cp_out (ctx, 0x0060000c); /* ?? */ + cp_bra (ctx, ALWAYS, TRUE, cp_swap_state); + + /* setup for context save */ + cp_name(ctx, cp_setup_save); + cp_set (ctx, SWAP_DIRECTION, SAVE); + + /* general PGRAPH state */ + cp_name(ctx, cp_swap_state); + cp_pos (ctx, 0x00020/4); + nv40_graph_construct_general(ctx); + cp_wait(ctx, STATUS, IDLE); + + /* 3D state, block 1 */ + cp_bra (ctx, UNK54, CLEAR, cp_prepare_exit); + nv40_graph_construct_state3d(ctx); + cp_wait(ctx, STATUS, IDLE); + + /* 3D state, block 2 */ + nv40_graph_construct_state3d_2(ctx); + + /* Some other block of "random" state */ + nv40_graph_construct_state3d_3(ctx); + + /* Per-vertex shader state */ + cp_pos (ctx, ctx->ctxvals_pos); + nv40_graph_construct_shader(ctx); + + /* pre-exit state updates */ + cp_name(ctx, cp_prepare_exit); + cp_bra (ctx, SWAP_DIRECTION, SAVE, cp_check_load); + cp_bra (ctx, USER_SAVE, PENDING, cp_exit); + cp_out (ctx, CP_NEXT_TO_CURRENT); + + cp_name(ctx, cp_exit); + cp_set (ctx, USER_SAVE, NOT_PENDING); + cp_set (ctx, USER_LOAD, NOT_PENDING); + cp_out (ctx, CP_END); +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_connector.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_connector.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NOUVEAU_CONNECTOR_H__ +#define __NOUVEAU_CONNECTOR_H__ + +#include "drm_edid.h" +#include "nouveau_i2c.h" + +struct nouveau_connector { + struct drm_connector base; + + struct dcb_connector_table_entry *dcb; + + int scaling_mode; + bool use_dithering; + + struct nouveau_encoder *detected_encoder; + struct edid *edid; + struct drm_display_mode *native_mode; +}; + +static inline struct nouveau_connector *nouveau_connector( + struct drm_connector *con) +{ + return container_of(con, struct nouveau_connector, base); +} + +int nouveau_connector_create(struct drm_device *dev, int i2c_index, int type); + +#endif /* __NOUVEAU_CONNECTOR_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_dma.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_dma.c @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" + +void +nouveau_dma_pre_init(struct nouveau_channel *chan) +{ + chan->dma.max = (chan->pushbuf_bo->bo.mem.size >> 2) - 2; + chan->dma.put = 0; + chan->dma.cur = chan->dma.put; + chan->dma.free = chan->dma.max - chan->dma.cur; +} + +int +nouveau_dma_init(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *m2mf = NULL; + struct nouveau_gpuobj *nvsw = NULL; + int ret, i; + + /* Create NV_MEMORY_TO_MEMORY_FORMAT for buffer moves */ + ret = nouveau_gpuobj_gr_new(chan, dev_priv->card_type < NV_50 ? + 0x0039 : 0x5039, &m2mf); + if (ret) + return ret; + + ret = nouveau_gpuobj_ref_add(dev, chan, NvM2MF, m2mf, NULL); + if (ret) + return ret; + + /* Create an NV_SW object for various sync purposes */ + ret = nouveau_gpuobj_sw_new(chan, NV_SW, &nvsw); + if (ret) + return ret; + + ret = nouveau_gpuobj_ref_add(dev, chan, NvSw, nvsw, NULL); + if (ret) + return ret; + + /* NV_MEMORY_TO_MEMORY_FORMAT requires a notifier object */ + ret = nouveau_notifier_alloc(chan, NvNotify0, 32, &chan->m2mf_ntfy); + if (ret) + return ret; + + /* Map push buffer */ + ret = nouveau_bo_map(chan->pushbuf_bo); + if (ret) + return ret; + + /* Map M2MF notifier object - fbcon. */ + if (drm_core_check_feature(dev, DRIVER_MODESET)) { + ret = nouveau_bo_map(chan->notifier_bo); + if (ret) + return ret; + } + + /* Insert NOPS for NOUVEAU_DMA_SKIPS */ + ret = RING_SPACE(chan, NOUVEAU_DMA_SKIPS); + if (ret) + return ret; + + for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) + OUT_RING(chan, 0); + + /* Initialise NV_MEMORY_TO_MEMORY_FORMAT */ + ret = RING_SPACE(chan, 4); + if (ret) + return ret; + BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_NAME, 1); + OUT_RING(chan, NvM2MF); + BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY, 1); + OUT_RING(chan, NvNotify0); + + /* Initialise NV_SW */ + ret = RING_SPACE(chan, 2); + if (ret) + return ret; + BEGIN_RING(chan, NvSubSw, 0, 1); + OUT_RING(chan, NvSw); + + /* Sit back and pray the channel works.. */ + FIRE_RING(chan); + + return 0; +} + +void +OUT_RINGp(struct nouveau_channel *chan, const void *data, unsigned nr_dwords) +{ + bool is_iomem; + u32 *mem = ttm_kmap_obj_virtual(&chan->pushbuf_bo->kmap, &is_iomem); + mem = &mem[chan->dma.cur]; + if (is_iomem) + memcpy_toio((void __force __iomem *)mem, data, nr_dwords * 4); + else + memcpy(mem, data, nr_dwords * 4); + chan->dma.cur += nr_dwords; +} + +/* Fetch and adjust GPU GET pointer + * + * Returns: + * value >= 0, the adjusted GET pointer + * -EINVAL if GET pointer currently outside main push buffer + * -EBUSY if timeout exceeded + */ +static inline int +READ_GET(struct nouveau_channel *chan, uint32_t *prev_get, uint32_t *timeout) +{ + uint32_t val; + + val = nvchan_rd32(chan, chan->user_get); + + /* reset counter as long as GET is still advancing, this is + * to avoid misdetecting a GPU lockup if the GPU happens to + * just be processing an operation that takes a long time + */ + if (val != *prev_get) { + *prev_get = val; + *timeout = 0; + } + + if ((++*timeout & 0xff) == 0) { + DRM_UDELAY(1); + if (*timeout > 100000) + return -EBUSY; + } + + if (val < chan->pushbuf_base || + val > chan->pushbuf_base + (chan->dma.max << 2)) + return -EINVAL; + + return (val - chan->pushbuf_base) >> 2; +} + +int +nouveau_dma_wait(struct nouveau_channel *chan, int size) +{ + uint32_t prev_get = 0, cnt = 0; + int get; + + while (chan->dma.free < size) { + get = READ_GET(chan, &prev_get, &cnt); + if (unlikely(get == -EBUSY)) + return -EBUSY; + + /* loop until we have a usable GET pointer. the value + * we read from the GPU may be outside the main ring if + * PFIFO is processing a buffer called from the main ring, + * discard these values until something sensible is seen. + * + * the other case we discard GET is while the GPU is fetching + * from the SKIPS area, so the code below doesn't have to deal + * with some fun corner cases. + */ + if (unlikely(get == -EINVAL) || get < NOUVEAU_DMA_SKIPS) + continue; + + if (get <= chan->dma.cur) { + /* engine is fetching behind us, or is completely + * idle (GET == PUT) so we have free space up until + * the end of the push buffer + * + * we can only hit that path once per call due to + * looping back to the beginning of the push buffer, + * we'll hit the fetching-ahead-of-us path from that + * point on. + * + * the *one* exception to that rule is if we read + * GET==PUT, in which case the below conditional will + * always succeed and break us out of the wait loop. + */ + chan->dma.free = chan->dma.max - chan->dma.cur; + if (chan->dma.free >= size) + break; + + /* not enough space left at the end of the push buffer, + * instruct the GPU to jump back to the start right + * after processing the currently pending commands. + */ + OUT_RING(chan, chan->pushbuf_base | 0x20000000); + + /* wait for GET to depart from the skips area. + * prevents writing GET==PUT and causing a race + * condition that causes us to think the GPU is + * idle when it's not. + */ + do { + get = READ_GET(chan, &prev_get, &cnt); + if (unlikely(get == -EBUSY)) + return -EBUSY; + if (unlikely(get == -EINVAL)) + continue; + } while (get <= NOUVEAU_DMA_SKIPS); + WRITE_PUT(NOUVEAU_DMA_SKIPS); + + /* we're now submitting commands at the start of + * the push buffer. + */ + chan->dma.cur = + chan->dma.put = NOUVEAU_DMA_SKIPS; + } + + /* engine fetching ahead of us, we have space up until the + * current GET pointer. the "- 1" is to ensure there's + * space left to emit a jump back to the beginning of the + * push buffer if we require it. we can never get GET == PUT + * here, so this is safe. + */ + chan->dma.free = get - chan->dma.cur - 1; + } + + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_object.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_object.c @@ -0,0 +1,1295 @@ +/* + * Copyright (C) 2006 Ben Skeggs. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + * Ben Skeggs + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +/* NVidia uses context objects to drive drawing operations. + + Context objects can be selected into 8 subchannels in the FIFO, + and then used via DMA command buffers. + + A context object is referenced by a user defined handle (CARD32). The HW + looks up graphics objects in a hash table in the instance RAM. + + An entry in the hash table consists of 2 CARD32. The first CARD32 contains + the handle, the second one a bitfield, that contains the address of the + object in instance RAM. + + The format of the second CARD32 seems to be: + + NV4 to NV30: + + 15: 0 instance_addr >> 4 + 17:16 engine (here uses 1 = graphics) + 28:24 channel id (here uses 0) + 31 valid (use 1) + + NV40: + + 15: 0 instance_addr >> 4 (maybe 19-0) + 21:20 engine (here uses 1 = graphics) + I'm unsure about the other bits, but using 0 seems to work. + + The key into the hash table depends on the object handle and channel id and + is given as: +*/ +static uint32_t +nouveau_ramht_hash_handle(struct drm_device *dev, int channel, uint32_t handle) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t hash = 0; + int i; + + NV_DEBUG(dev, "ch%d handle=0x%08x\n", channel, handle); + + for (i = 32; i > 0; i -= dev_priv->ramht_bits) { + hash ^= (handle & ((1 << dev_priv->ramht_bits) - 1)); + handle >>= dev_priv->ramht_bits; + } + + if (dev_priv->card_type < NV_50) + hash ^= channel << (dev_priv->ramht_bits - 4); + hash <<= 3; + + NV_DEBUG(dev, "hash=0x%08x\n", hash); + return hash; +} + +static int +nouveau_ramht_entry_valid(struct drm_device *dev, struct nouveau_gpuobj *ramht, + uint32_t offset) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t ctx = nv_ro32(dev, ramht, (offset + 4)/4); + + if (dev_priv->card_type < NV_40) + return ((ctx & NV_RAMHT_CONTEXT_VALID) != 0); + return (ctx != 0); +} + +static int +nouveau_ramht_insert(struct drm_device *dev, struct nouveau_gpuobj_ref *ref) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + struct nouveau_channel *chan = ref->channel; + struct nouveau_gpuobj *ramht = chan->ramht ? chan->ramht->gpuobj : NULL; + uint32_t ctx, co, ho; + + if (!ramht) { + NV_ERROR(dev, "No hash table!\n"); + return -EINVAL; + } + + if (dev_priv->card_type < NV_40) { + ctx = NV_RAMHT_CONTEXT_VALID | (ref->instance >> 4) | + (chan->id << NV_RAMHT_CONTEXT_CHANNEL_SHIFT) | + (ref->gpuobj->engine << NV_RAMHT_CONTEXT_ENGINE_SHIFT); + } else + if (dev_priv->card_type < NV_50) { + ctx = (ref->instance >> 4) | + (chan->id << NV40_RAMHT_CONTEXT_CHANNEL_SHIFT) | + (ref->gpuobj->engine << NV40_RAMHT_CONTEXT_ENGINE_SHIFT); + } else { + if (ref->gpuobj->engine == NVOBJ_ENGINE_DISPLAY) { + ctx = (ref->instance << 10) | 2; + } else { + ctx = (ref->instance >> 4) | + ((ref->gpuobj->engine << + NV40_RAMHT_CONTEXT_ENGINE_SHIFT)); + } + } + + instmem->prepare_access(dev, true); + co = ho = nouveau_ramht_hash_handle(dev, chan->id, ref->handle); + do { + if (!nouveau_ramht_entry_valid(dev, ramht, co)) { + NV_DEBUG(dev, + "insert ch%d 0x%08x: h=0x%08x, c=0x%08x\n", + chan->id, co, ref->handle, ctx); + nv_wo32(dev, ramht, (co + 0)/4, ref->handle); + nv_wo32(dev, ramht, (co + 4)/4, ctx); + + list_add_tail(&ref->list, &chan->ramht_refs); + instmem->finish_access(dev); + return 0; + } + NV_DEBUG(dev, "collision ch%d 0x%08x: h=0x%08x\n", + chan->id, co, nv_ro32(dev, ramht, co/4)); + + co += 8; + if (co >= dev_priv->ramht_size) + co = 0; + } while (co != ho); + instmem->finish_access(dev); + + NV_ERROR(dev, "RAMHT space exhausted. ch=%d\n", chan->id); + return -ENOMEM; +} + +static void +nouveau_ramht_remove(struct drm_device *dev, struct nouveau_gpuobj_ref *ref) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + struct nouveau_channel *chan = ref->channel; + struct nouveau_gpuobj *ramht = chan->ramht ? chan->ramht->gpuobj : NULL; + uint32_t co, ho; + + if (!ramht) { + NV_ERROR(dev, "No hash table!\n"); + return; + } + + instmem->prepare_access(dev, true); + co = ho = nouveau_ramht_hash_handle(dev, chan->id, ref->handle); + do { + if (nouveau_ramht_entry_valid(dev, ramht, co) && + (ref->handle == nv_ro32(dev, ramht, (co/4)))) { + NV_DEBUG(dev, + "remove ch%d 0x%08x: h=0x%08x, c=0x%08x\n", + chan->id, co, ref->handle, + nv_ro32(dev, ramht, (co + 4))); + nv_wo32(dev, ramht, (co + 0)/4, 0x00000000); + nv_wo32(dev, ramht, (co + 4)/4, 0x00000000); + + list_del(&ref->list); + instmem->finish_access(dev); + return; + } + + co += 8; + if (co >= dev_priv->ramht_size) + co = 0; + } while (co != ho); + list_del(&ref->list); + instmem->finish_access(dev); + + NV_ERROR(dev, "RAMHT entry not found. ch=%d, handle=0x%08x\n", + chan->id, ref->handle); +} + +int +nouveau_gpuobj_new(struct drm_device *dev, struct nouveau_channel *chan, + uint32_t size, int align, uint32_t flags, + struct nouveau_gpuobj **gpuobj_ret) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + struct nouveau_gpuobj *gpuobj; + struct mem_block *pramin = NULL; + int ret; + + NV_DEBUG(dev, "ch%d size=%u align=%d flags=0x%08x\n", + chan ? chan->id : -1, size, align, flags); + + if (!dev_priv || !gpuobj_ret || *gpuobj_ret != NULL) + return -EINVAL; + + gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); + if (!gpuobj) + return -ENOMEM; + NV_DEBUG(dev, "gpuobj %p\n", gpuobj); + gpuobj->flags = flags; + gpuobj->im_channel = chan; + + list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); + + /* Choose between global instmem heap, and per-channel private + * instmem heap. On ramin_heap) { + NV_DEBUG(dev, "private heap\n"); + pramin = chan->ramin_heap; + } else + if (dev_priv->card_type < NV_50) { + NV_DEBUG(dev, "global heap fallback\n"); + pramin = dev_priv->ramin_heap; + } + } else { + NV_DEBUG(dev, "global heap\n"); + pramin = dev_priv->ramin_heap; + } + + if (!pramin) { + NV_ERROR(dev, "No PRAMIN heap!\n"); + return -EINVAL; + } + + if (!chan) { + ret = engine->instmem.populate(dev, gpuobj, &size); + if (ret) { + nouveau_gpuobj_del(dev, &gpuobj); + return ret; + } + } + + /* Allocate a chunk of the PRAMIN aperture */ + gpuobj->im_pramin = nouveau_mem_alloc_block(pramin, size, + drm_order(align), + (struct drm_file *)-2, 0); + if (!gpuobj->im_pramin) { + nouveau_gpuobj_del(dev, &gpuobj); + return -ENOMEM; + } + + if (!chan) { + ret = engine->instmem.bind(dev, gpuobj); + if (ret) { + nouveau_gpuobj_del(dev, &gpuobj); + return ret; + } + } + + if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { + int i; + + engine->instmem.prepare_access(dev, true); + for (i = 0; i < gpuobj->im_pramin->size; i += 4) + nv_wo32(dev, gpuobj, i/4, 0); + engine->instmem.finish_access(dev); + } + + *gpuobj_ret = gpuobj; + return 0; +} + +int +nouveau_gpuobj_early_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + NV_DEBUG(dev, "\n"); + + INIT_LIST_HEAD(&dev_priv->gpuobj_list); + + return 0; +} + +int +nouveau_gpuobj_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int ret; + + NV_DEBUG(dev, "\n"); + + if (dev_priv->card_type < NV_50) { + ret = nouveau_gpuobj_new_fake(dev, + dev_priv->ramht_offset, ~0, dev_priv->ramht_size, + NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ALLOW_NO_REFS, + &dev_priv->ramht, NULL); + if (ret) + return ret; + } + + return 0; +} + +void +nouveau_gpuobj_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + NV_DEBUG(dev, "\n"); + + nouveau_gpuobj_del(dev, &dev_priv->ramht); +} + +void +nouveau_gpuobj_late_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj = NULL; + struct list_head *entry, *tmp; + + NV_DEBUG(dev, "\n"); + + list_for_each_safe(entry, tmp, &dev_priv->gpuobj_list) { + gpuobj = list_entry(entry, struct nouveau_gpuobj, list); + + NV_ERROR(dev, "gpuobj %p still exists at takedown, refs=%d\n", + gpuobj, gpuobj->refcount); + gpuobj->refcount = 0; + nouveau_gpuobj_del(dev, &gpuobj); + } +} + +int +nouveau_gpuobj_del(struct drm_device *dev, struct nouveau_gpuobj **pgpuobj) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + struct nouveau_gpuobj *gpuobj; + int i; + + NV_DEBUG(dev, "gpuobj %p\n", pgpuobj ? *pgpuobj : NULL); + + if (!dev_priv || !pgpuobj || !(*pgpuobj)) + return -EINVAL; + gpuobj = *pgpuobj; + + if (gpuobj->refcount != 0) { + NV_ERROR(dev, "gpuobj refcount is %d\n", gpuobj->refcount); + return -EINVAL; + } + + if (gpuobj->im_pramin && (gpuobj->flags & NVOBJ_FLAG_ZERO_FREE)) { + engine->instmem.prepare_access(dev, true); + for (i = 0; i < gpuobj->im_pramin->size; i += 4) + nv_wo32(dev, gpuobj, i/4, 0); + engine->instmem.finish_access(dev); + } + + if (gpuobj->dtor) + gpuobj->dtor(dev, gpuobj); + + if (gpuobj->im_backing && !(gpuobj->flags & NVOBJ_FLAG_FAKE)) + engine->instmem.clear(dev, gpuobj); + + if (gpuobj->im_pramin) { + if (gpuobj->flags & NVOBJ_FLAG_FAKE) + kfree(gpuobj->im_pramin); + else + nouveau_mem_free_block(gpuobj->im_pramin); + } + + list_del(&gpuobj->list); + + *pgpuobj = NULL; + kfree(gpuobj); + return 0; +} + +static int +nouveau_gpuobj_instance_get(struct drm_device *dev, + struct nouveau_channel *chan, + struct nouveau_gpuobj *gpuobj, uint32_t *inst) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *cpramin; + + /* card_type < NV_50) { + *inst = gpuobj->im_pramin->start; + return 0; + } + + if (chan && gpuobj->im_channel != chan) { + NV_ERROR(dev, "Channel mismatch: obj %d, ref %d\n", + gpuobj->im_channel->id, chan->id); + return -EINVAL; + } + + /* NV50 channel-local instance */ + if (chan) { + cpramin = chan->ramin->gpuobj; + *inst = gpuobj->im_pramin->start - cpramin->im_pramin->start; + return 0; + } + + /* NV50 global (VRAM) instance */ + if (!gpuobj->im_channel) { + /* ...from global heap */ + if (!gpuobj->im_backing) { + NV_ERROR(dev, "AII, no VRAM backing gpuobj\n"); + return -EINVAL; + } + *inst = gpuobj->im_backing_start; + return 0; + } else { + /* ...from local heap */ + cpramin = gpuobj->im_channel->ramin->gpuobj; + *inst = cpramin->im_backing_start + + (gpuobj->im_pramin->start - cpramin->im_pramin->start); + return 0; + } + + return -EINVAL; +} + +int +nouveau_gpuobj_ref_add(struct drm_device *dev, struct nouveau_channel *chan, + uint32_t handle, struct nouveau_gpuobj *gpuobj, + struct nouveau_gpuobj_ref **ref_ret) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj_ref *ref; + uint32_t instance; + int ret; + + NV_DEBUG(dev, "ch%d h=0x%08x gpuobj=%p\n", + chan ? chan->id : -1, handle, gpuobj); + + if (!dev_priv || !gpuobj || (ref_ret && *ref_ret != NULL)) + return -EINVAL; + + if (!chan && !ref_ret) + return -EINVAL; + + if (gpuobj->engine == NVOBJ_ENGINE_SW && !gpuobj->im_pramin) { + /* sw object */ + instance = 0x40; + } else { + ret = nouveau_gpuobj_instance_get(dev, chan, gpuobj, &instance); + if (ret) + return ret; + } + + ref = kzalloc(sizeof(*ref), GFP_KERNEL); + if (!ref) + return -ENOMEM; + INIT_LIST_HEAD(&ref->list); + ref->gpuobj = gpuobj; + ref->channel = chan; + ref->instance = instance; + + if (!ref_ret) { + ref->handle = handle; + + ret = nouveau_ramht_insert(dev, ref); + if (ret) { + kfree(ref); + return ret; + } + } else { + ref->handle = ~0; + *ref_ret = ref; + } + + ref->gpuobj->refcount++; + return 0; +} + +int nouveau_gpuobj_ref_del(struct drm_device *dev, struct nouveau_gpuobj_ref **pref) +{ + struct nouveau_gpuobj_ref *ref; + + NV_DEBUG(dev, "ref %p\n", pref ? *pref : NULL); + + if (!dev || !pref || *pref == NULL) + return -EINVAL; + ref = *pref; + + if (ref->handle != ~0) + nouveau_ramht_remove(dev, ref); + + if (ref->gpuobj) { + ref->gpuobj->refcount--; + + if (ref->gpuobj->refcount == 0) { + if (!(ref->gpuobj->flags & NVOBJ_FLAG_ALLOW_NO_REFS)) + nouveau_gpuobj_del(dev, &ref->gpuobj); + } + } + + *pref = NULL; + kfree(ref); + return 0; +} + +int +nouveau_gpuobj_new_ref(struct drm_device *dev, + struct nouveau_channel *oc, struct nouveau_channel *rc, + uint32_t handle, uint32_t size, int align, + uint32_t flags, struct nouveau_gpuobj_ref **ref) +{ + struct nouveau_gpuobj *gpuobj = NULL; + int ret; + + ret = nouveau_gpuobj_new(dev, oc, size, align, flags, &gpuobj); + if (ret) + return ret; + + ret = nouveau_gpuobj_ref_add(dev, rc, handle, gpuobj, ref); + if (ret) { + nouveau_gpuobj_del(dev, &gpuobj); + return ret; + } + + return 0; +} + +int +nouveau_gpuobj_ref_find(struct nouveau_channel *chan, uint32_t handle, + struct nouveau_gpuobj_ref **ref_ret) +{ + struct nouveau_gpuobj_ref *ref; + struct list_head *entry, *tmp; + + list_for_each_safe(entry, tmp, &chan->ramht_refs) { + ref = list_entry(entry, struct nouveau_gpuobj_ref, list); + + if (ref->handle == handle) { + if (ref_ret) + *ref_ret = ref; + return 0; + } + } + + return -EINVAL; +} + +int +nouveau_gpuobj_new_fake(struct drm_device *dev, uint32_t p_offset, + uint32_t b_offset, uint32_t size, + uint32_t flags, struct nouveau_gpuobj **pgpuobj, + struct nouveau_gpuobj_ref **pref) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj = NULL; + int i; + + NV_DEBUG(dev, + "p_offset=0x%08x b_offset=0x%08x size=0x%08x flags=0x%08x\n", + p_offset, b_offset, size, flags); + + gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); + if (!gpuobj) + return -ENOMEM; + NV_DEBUG(dev, "gpuobj %p\n", gpuobj); + gpuobj->im_channel = NULL; + gpuobj->flags = flags | NVOBJ_FLAG_FAKE; + + list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); + + if (p_offset != ~0) { + gpuobj->im_pramin = kzalloc(sizeof(struct mem_block), + GFP_KERNEL); + if (!gpuobj->im_pramin) { + nouveau_gpuobj_del(dev, &gpuobj); + return -ENOMEM; + } + gpuobj->im_pramin->start = p_offset; + gpuobj->im_pramin->size = size; + } + + if (b_offset != ~0) { + gpuobj->im_backing = (struct nouveau_bo *)-1; + gpuobj->im_backing_start = b_offset; + } + + if (gpuobj->flags & NVOBJ_FLAG_ZERO_ALLOC) { + dev_priv->engine.instmem.prepare_access(dev, true); + for (i = 0; i < gpuobj->im_pramin->size; i += 4) + nv_wo32(dev, gpuobj, i/4, 0); + dev_priv->engine.instmem.finish_access(dev); + } + + if (pref) { + i = nouveau_gpuobj_ref_add(dev, NULL, 0, gpuobj, pref); + if (i) { + nouveau_gpuobj_del(dev, &gpuobj); + return i; + } + } + + if (pgpuobj) + *pgpuobj = gpuobj; + return 0; +} + + +static uint32_t +nouveau_gpuobj_class_instmem_size(struct drm_device *dev, int class) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /*XXX: dodgy hack for now */ + if (dev_priv->card_type >= NV_50) + return 24; + if (dev_priv->card_type >= NV_40) + return 32; + return 16; +} + +/* + DMA objects are used to reference a piece of memory in the + framebuffer, PCI or AGP address space. Each object is 16 bytes big + and looks as follows: + + entry[0] + 11:0 class (seems like I can always use 0 here) + 12 page table present? + 13 page entry linear? + 15:14 access: 0 rw, 1 ro, 2 wo + 17:16 target: 0 NV memory, 1 NV memory tiled, 2 PCI, 3 AGP + 31:20 dma adjust (bits 0-11 of the address) + entry[1] + dma limit (size of transfer) + entry[X] + 1 0 readonly, 1 readwrite + 31:12 dma frame address of the page (bits 12-31 of the address) + entry[N] + page table terminator, same value as the first pte, as does nvidia + rivatv uses 0xffffffff + + Non linear page tables need a list of frame addresses afterwards, + the rivatv project has some info on this. + + The method below creates a DMA object in instance RAM and returns a handle + to it that can be used to set up context objects. +*/ +int +nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, + uint64_t offset, uint64_t size, int access, + int target, struct nouveau_gpuobj **gpuobj) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + int ret; + + NV_DEBUG(dev, "ch%d class=0x%04x offset=0x%llx size=0x%llx\n", + chan->id, class, offset, size); + NV_DEBUG(dev, "access=%d target=%d\n", access, target); + + switch (target) { + case NV_DMA_TARGET_AGP: + offset += dev_priv->gart_info.aper_base; + break; + default: + break; + } + + ret = nouveau_gpuobj_new(dev, chan, + nouveau_gpuobj_class_instmem_size(dev, class), + 16, NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, gpuobj); + if (ret) { + NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); + return ret; + } + + instmem->prepare_access(dev, true); + + if (dev_priv->card_type < NV_50) { + uint32_t frame, adjust, pte_flags = 0; + + if (access != NV_DMA_ACCESS_RO) + pte_flags |= (1<<1); + adjust = offset & 0x00000fff; + frame = offset & ~0x00000fff; + + nv_wo32(dev, *gpuobj, 0, ((1<<12) | (1<<13) | + (adjust << 20) | + (access << 14) | + (target << 16) | + class)); + nv_wo32(dev, *gpuobj, 1, size - 1); + nv_wo32(dev, *gpuobj, 2, frame | pte_flags); + nv_wo32(dev, *gpuobj, 3, frame | pte_flags); + } else { + uint64_t limit = offset + size - 1; + uint32_t flags0, flags5; + + if (target == NV_DMA_TARGET_VIDMEM) { + flags0 = 0x00190000; + flags5 = 0x00010000; + } else { + flags0 = 0x7fc00000; + flags5 = 0x00080000; + } + + nv_wo32(dev, *gpuobj, 0, flags0 | class); + nv_wo32(dev, *gpuobj, 1, lower_32_bits(limit)); + nv_wo32(dev, *gpuobj, 2, lower_32_bits(offset)); + nv_wo32(dev, *gpuobj, 3, ((upper_32_bits(limit) & 0xff) << 24) | + (upper_32_bits(offset) & 0xff)); + nv_wo32(dev, *gpuobj, 5, flags5); + } + + instmem->finish_access(dev); + + (*gpuobj)->engine = NVOBJ_ENGINE_SW; + (*gpuobj)->class = class; + return 0; +} + +int +nouveau_gpuobj_gart_dma_new(struct nouveau_channel *chan, + uint64_t offset, uint64_t size, int access, + struct nouveau_gpuobj **gpuobj, + uint32_t *o_ret) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int ret; + + if (dev_priv->gart_info.type == NOUVEAU_GART_AGP || + (dev_priv->card_type >= NV_50 && + dev_priv->gart_info.type == NOUVEAU_GART_SGDMA)) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + offset + dev_priv->vm_gart_base, + size, access, NV_DMA_TARGET_AGP, + gpuobj); + if (o_ret) + *o_ret = 0; + } else + if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA) { + *gpuobj = dev_priv->gart_info.sg_ctxdma; + if (offset & ~0xffffffffULL) { + NV_ERROR(dev, "obj offset exceeds 32-bits\n"); + return -EINVAL; + } + if (o_ret) + *o_ret = (uint32_t)offset; + ret = (*gpuobj != NULL) ? 0 : -EINVAL; + } else { + NV_ERROR(dev, "Invalid GART type %d\n", dev_priv->gart_info.type); + return -EINVAL; + } + + return ret; +} + +/* Context objects in the instance RAM have the following structure. + * On NV40 they are 32 byte long, on NV30 and smaller 16 bytes. + + NV4 - NV30: + + entry[0] + 11:0 class + 12 chroma key enable + 13 user clip enable + 14 swizzle enable + 17:15 patch config: + scrcopy_and, rop_and, blend_and, scrcopy, srccopy_pre, blend_pre + 18 synchronize enable + 19 endian: 1 big, 0 little + 21:20 dither mode + 23 single step enable + 24 patch status: 0 invalid, 1 valid + 25 context_surface 0: 1 valid + 26 context surface 1: 1 valid + 27 context pattern: 1 valid + 28 context rop: 1 valid + 29,30 context beta, beta4 + entry[1] + 7:0 mono format + 15:8 color format + 31:16 notify instance address + entry[2] + 15:0 dma 0 instance address + 31:16 dma 1 instance address + entry[3] + dma method traps + + NV40: + No idea what the exact format is. Here's what can be deducted: + + entry[0]: + 11:0 class (maybe uses more bits here?) + 17 user clip enable + 21:19 patch config + 25 patch status valid ? + entry[1]: + 15:0 DMA notifier (maybe 20:0) + entry[2]: + 15:0 DMA 0 instance (maybe 20:0) + 24 big endian + entry[3]: + 15:0 DMA 1 instance (maybe 20:0) + entry[4]: + entry[5]: + set to 0? +*/ +int +nouveau_gpuobj_gr_new(struct nouveau_channel *chan, int class, + struct nouveau_gpuobj **gpuobj) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int ret; + + NV_DEBUG(dev, "ch%d class=0x%04x\n", chan->id, class); + + ret = nouveau_gpuobj_new(dev, chan, + nouveau_gpuobj_class_instmem_size(dev, class), + 16, + NVOBJ_FLAG_ZERO_ALLOC | NVOBJ_FLAG_ZERO_FREE, + gpuobj); + if (ret) { + NV_ERROR(dev, "Error creating gpuobj: %d\n", ret); + return ret; + } + + dev_priv->engine.instmem.prepare_access(dev, true); + if (dev_priv->card_type >= NV_50) { + nv_wo32(dev, *gpuobj, 0, class); + nv_wo32(dev, *gpuobj, 5, 0x00010000); + } else { + switch (class) { + case NV_CLASS_NULL: + nv_wo32(dev, *gpuobj, 0, 0x00001030); + nv_wo32(dev, *gpuobj, 1, 0xFFFFFFFF); + break; + default: + if (dev_priv->card_type >= NV_40) { + nv_wo32(dev, *gpuobj, 0, class); +#ifdef __BIG_ENDIAN + nv_wo32(dev, *gpuobj, 2, 0x01000000); +#endif + } else { +#ifdef __BIG_ENDIAN + nv_wo32(dev, *gpuobj, 0, class | 0x00080000); +#else + nv_wo32(dev, *gpuobj, 0, class); +#endif + } + } + } + dev_priv->engine.instmem.finish_access(dev); + + (*gpuobj)->engine = NVOBJ_ENGINE_GR; + (*gpuobj)->class = class; + return 0; +} + +int +nouveau_gpuobj_sw_new(struct nouveau_channel *chan, int class, + struct nouveau_gpuobj **gpuobj_ret) +{ + struct drm_nouveau_private *dev_priv; + struct nouveau_gpuobj *gpuobj; + + if (!chan || !gpuobj_ret || *gpuobj_ret != NULL) + return -EINVAL; + dev_priv = chan->dev->dev_private; + + gpuobj = kzalloc(sizeof(*gpuobj), GFP_KERNEL); + if (!gpuobj) + return -ENOMEM; + gpuobj->engine = NVOBJ_ENGINE_SW; + gpuobj->class = class; + + list_add_tail(&gpuobj->list, &dev_priv->gpuobj_list); + *gpuobj_ret = gpuobj; + return 0; +} + +static int +nouveau_gpuobj_channel_init_pramin(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *pramin = NULL; + uint32_t size; + uint32_t base; + int ret; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + /* Base amount for object storage (4KiB enough?) */ + size = 0x1000; + base = 0; + + /* PGRAPH context */ + + if (dev_priv->card_type == NV_50) { + /* Various fixed table thingos */ + size += 0x1400; /* mostly unknown stuff */ + size += 0x4000; /* vm pd */ + base = 0x6000; + /* RAMHT, not sure about setting size yet, 32KiB to be safe */ + size += 0x8000; + /* RAMFC */ + size += 0x1000; + /* PGRAPH context */ + size += 0x70000; + } + + NV_DEBUG(dev, "ch%d PRAMIN size: 0x%08x bytes, base alloc=0x%08x\n", + chan->id, size, base); + ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, size, 0x1000, 0, + &chan->ramin); + if (ret) { + NV_ERROR(dev, "Error allocating channel PRAMIN: %d\n", ret); + return ret; + } + pramin = chan->ramin->gpuobj; + + ret = nouveau_mem_init_heap(&chan->ramin_heap, + pramin->im_pramin->start + base, size); + if (ret) { + NV_ERROR(dev, "Error creating PRAMIN heap: %d\n", ret); + nouveau_gpuobj_ref_del(dev, &chan->ramin); + return ret; + } + + return 0; +} + +int +nouveau_gpuobj_channel_init(struct nouveau_channel *chan, + uint32_t vram_h, uint32_t tt_h) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + struct nouveau_gpuobj *vram = NULL, *tt = NULL; + int ret, i; + + INIT_LIST_HEAD(&chan->ramht_refs); + + NV_DEBUG(dev, "ch%d vram=0x%08x tt=0x%08x\n", chan->id, vram_h, tt_h); + + /* Reserve a block of PRAMIN for the channel + *XXX: maybe on card_type == NV_50) { + ret = nouveau_gpuobj_channel_init_pramin(chan); + if (ret) { + NV_ERROR(dev, "init pramin\n"); + return ret; + } + } + + /* NV50 VM + * - Allocate per-channel page-directory + * - Map GART and VRAM into the channel's address space at the + * locations determined during init. + */ + if (dev_priv->card_type >= NV_50) { + uint32_t vm_offset, pde; + + instmem->prepare_access(dev, true); + + vm_offset = (dev_priv->chipset & 0xf0) == 0x50 ? 0x1400 : 0x200; + vm_offset += chan->ramin->gpuobj->im_pramin->start; + + ret = nouveau_gpuobj_new_fake(dev, vm_offset, ~0, 0x4000, + 0, &chan->vm_pd, NULL); + if (ret) { + instmem->finish_access(dev); + return ret; + } + for (i = 0; i < 0x4000; i += 8) { + nv_wo32(dev, chan->vm_pd, (i+0)/4, 0x00000000); + nv_wo32(dev, chan->vm_pd, (i+4)/4, 0xdeadcafe); + } + + pde = (dev_priv->vm_gart_base / (512*1024*1024)) * 2; + ret = nouveau_gpuobj_ref_add(dev, NULL, 0, + dev_priv->gart_info.sg_ctxdma, + &chan->vm_gart_pt); + if (ret) { + instmem->finish_access(dev); + return ret; + } + nv_wo32(dev, chan->vm_pd, pde++, + chan->vm_gart_pt->instance | 0x03); + nv_wo32(dev, chan->vm_pd, pde++, 0x00000000); + + pde = (dev_priv->vm_vram_base / (512*1024*1024)) * 2; + for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) { + ret = nouveau_gpuobj_ref_add(dev, NULL, 0, + dev_priv->vm_vram_pt[i], + &chan->vm_vram_pt[i]); + if (ret) { + instmem->finish_access(dev); + return ret; + } + + nv_wo32(dev, chan->vm_pd, pde++, + chan->vm_vram_pt[i]->instance | 0x61); + nv_wo32(dev, chan->vm_pd, pde++, 0x00000000); + } + + instmem->finish_access(dev); + } + + /* RAMHT */ + if (dev_priv->card_type < NV_50) { + ret = nouveau_gpuobj_ref_add(dev, NULL, 0, dev_priv->ramht, + &chan->ramht); + if (ret) + return ret; + } else { + ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, + 0x8000, 16, + NVOBJ_FLAG_ZERO_ALLOC, + &chan->ramht); + if (ret) + return ret; + } + + /* VRAM ctxdma */ + if (dev_priv->card_type >= NV_50) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + 0, dev_priv->vm_end, + NV_DMA_ACCESS_RW, + NV_DMA_TARGET_AGP, &vram); + if (ret) { + NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); + return ret; + } + } else { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + 0, dev_priv->fb_available_size, + NV_DMA_ACCESS_RW, + NV_DMA_TARGET_VIDMEM, &vram); + if (ret) { + NV_ERROR(dev, "Error creating VRAM ctxdma: %d\n", ret); + return ret; + } + } + + ret = nouveau_gpuobj_ref_add(dev, chan, vram_h, vram, NULL); + if (ret) { + NV_ERROR(dev, "Error referencing VRAM ctxdma: %d\n", ret); + return ret; + } + + /* TT memory ctxdma */ + if (dev_priv->card_type >= NV_50) { + tt = vram; + } else + if (dev_priv->gart_info.type != NOUVEAU_GART_NONE) { + ret = nouveau_gpuobj_gart_dma_new(chan, 0, + dev_priv->gart_info.aper_size, + NV_DMA_ACCESS_RW, &tt, NULL); + } else { + NV_ERROR(dev, "Invalid GART type %d\n", dev_priv->gart_info.type); + ret = -EINVAL; + } + + if (ret) { + NV_ERROR(dev, "Error creating TT ctxdma: %d\n", ret); + return ret; + } + + ret = nouveau_gpuobj_ref_add(dev, chan, tt_h, tt, NULL); + if (ret) { + NV_ERROR(dev, "Error referencing TT ctxdma: %d\n", ret); + return ret; + } + + return 0; +} + +void +nouveau_gpuobj_channel_takedown(struct nouveau_channel *chan) +{ + struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct drm_device *dev = chan->dev; + struct list_head *entry, *tmp; + struct nouveau_gpuobj_ref *ref; + int i; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + if (!chan->ramht_refs.next) + return; + + list_for_each_safe(entry, tmp, &chan->ramht_refs) { + ref = list_entry(entry, struct nouveau_gpuobj_ref, list); + + nouveau_gpuobj_ref_del(dev, &ref); + } + + nouveau_gpuobj_ref_del(dev, &chan->ramht); + + nouveau_gpuobj_del(dev, &chan->vm_pd); + nouveau_gpuobj_ref_del(dev, &chan->vm_gart_pt); + for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) + nouveau_gpuobj_ref_del(dev, &chan->vm_vram_pt[i]); + + if (chan->ramin_heap) + nouveau_mem_takedown(&chan->ramin_heap); + if (chan->ramin) + nouveau_gpuobj_ref_del(dev, &chan->ramin); + +} + +int +nouveau_gpuobj_suspend(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj; + int i; + + if (dev_priv->card_type < NV_50) { + dev_priv->susres.ramin_copy = vmalloc(dev_priv->ramin_rsvd_vram); + if (!dev_priv->susres.ramin_copy) + return -ENOMEM; + + for (i = 0; i < dev_priv->ramin_rsvd_vram; i += 4) + dev_priv->susres.ramin_copy[i/4] = nv_ri32(dev, i); + return 0; + } + + list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { + if (!gpuobj->im_backing || (gpuobj->flags & NVOBJ_FLAG_FAKE)) + continue; + + gpuobj->im_backing_suspend = vmalloc(gpuobj->im_pramin->size); + if (!gpuobj->im_backing_suspend) { + nouveau_gpuobj_resume(dev); + return -ENOMEM; + } + + dev_priv->engine.instmem.prepare_access(dev, false); + for (i = 0; i < gpuobj->im_pramin->size / 4; i++) + gpuobj->im_backing_suspend[i] = nv_ro32(dev, gpuobj, i); + dev_priv->engine.instmem.finish_access(dev); + } + + return 0; +} + +void +nouveau_gpuobj_suspend_cleanup(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj; + + if (dev_priv->card_type < NV_50) { + vfree(dev_priv->susres.ramin_copy); + dev_priv->susres.ramin_copy = NULL; + return; + } + + list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { + if (!gpuobj->im_backing_suspend) + continue; + + vfree(gpuobj->im_backing_suspend); + gpuobj->im_backing_suspend = NULL; + } +} + +void +nouveau_gpuobj_resume(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj; + int i; + + if (dev_priv->card_type < NV_50) { + for (i = 0; i < dev_priv->ramin_rsvd_vram; i += 4) + nv_wi32(dev, i, dev_priv->susres.ramin_copy[i/4]); + nouveau_gpuobj_suspend_cleanup(dev); + return; + } + + list_for_each_entry(gpuobj, &dev_priv->gpuobj_list, list) { + if (!gpuobj->im_backing_suspend) + continue; + + dev_priv->engine.instmem.prepare_access(dev, true); + for (i = 0; i < gpuobj->im_pramin->size / 4; i++) + nv_wo32(dev, gpuobj, i, gpuobj->im_backing_suspend[i]); + dev_priv->engine.instmem.finish_access(dev); + } + + nouveau_gpuobj_suspend_cleanup(dev); +} + +int nouveau_ioctl_grobj_alloc(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_grobj_alloc *init = data; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_pgraph_object_class *grc; + struct nouveau_gpuobj *gr = NULL; + struct nouveau_channel *chan; + int ret; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(init->channel, file_priv, chan); + + if (init->handle == ~0) + return -EINVAL; + + grc = pgraph->grclass; + while (grc->id) { + if (grc->id == init->class) + break; + grc++; + } + + if (!grc->id) { + NV_ERROR(dev, "Illegal object class: 0x%x\n", init->class); + return -EPERM; + } + + if (nouveau_gpuobj_ref_find(chan, init->handle, NULL) == 0) + return -EEXIST; + + if (!grc->software) + ret = nouveau_gpuobj_gr_new(chan, grc->id, &gr); + else + ret = nouveau_gpuobj_sw_new(chan, grc->id, &gr); + + if (ret) { + NV_ERROR(dev, "Error creating object: %d (%d/0x%08x)\n", + ret, init->channel, init->handle); + return ret; + } + + ret = nouveau_gpuobj_ref_add(dev, chan, init->handle, gr, NULL); + if (ret) { + NV_ERROR(dev, "Error referencing object: %d (%d/0x%08x)\n", + ret, init->channel, init->handle); + nouveau_gpuobj_del(dev, &gr); + return ret; + } + + return 0; +} + +int nouveau_ioctl_gpuobj_free(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gpuobj_free *objfree = data; + struct nouveau_gpuobj_ref *ref; + struct nouveau_channel *chan; + int ret; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(objfree->channel, file_priv, chan); + + ret = nouveau_gpuobj_ref_find(chan, objfree->handle, &ref); + if (ret) + return ret; + nouveau_gpuobj_ref_del(dev, &ref); + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv40_graph.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv40_graph.c @@ -0,0 +1,406 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_grctx.h" + +struct nouveau_channel * +nv40_graph_channel(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t inst; + int i; + + inst = nv_rd32(dev, NV40_PGRAPH_CTXCTL_CUR); + if (!(inst & NV40_PGRAPH_CTXCTL_CUR_LOADED)) + return NULL; + inst = (inst & NV40_PGRAPH_CTXCTL_CUR_INSTANCE) << 4; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + struct nouveau_channel *chan = dev_priv->fifos[i]; + + if (chan && chan->ramin_grctx && + chan->ramin_grctx->instance == inst) + return chan; + } + + return NULL; +} + +int +nv40_graph_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + int ret; + + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pgraph->grctx_size, + 16, NVOBJ_FLAG_ZERO_ALLOC, + &chan->ramin_grctx); + if (ret) + return ret; + + /* Initialise default context values */ + dev_priv->engine.instmem.prepare_access(dev, true); + if (!pgraph->ctxprog) { + struct nouveau_grctx ctx = {}; + + ctx.dev = chan->dev; + ctx.mode = NOUVEAU_GRCTX_VALS; + ctx.data = chan->ramin_grctx->gpuobj; + nv40_grctx_init(&ctx); + } else { + nouveau_grctx_vals_load(dev, chan->ramin_grctx->gpuobj); + } + nv_wo32(dev, chan->ramin_grctx->gpuobj, 0, + chan->ramin_grctx->gpuobj->im_pramin->start); + dev_priv->engine.instmem.finish_access(dev); + return 0; +} + +void +nv40_graph_destroy_context(struct nouveau_channel *chan) +{ + nouveau_gpuobj_ref_del(chan->dev, &chan->ramin_grctx); +} + +static int +nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save) +{ + uint32_t old_cp, tv = 1000, tmp; + int i; + + old_cp = nv_rd32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER); + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); + + tmp = nv_rd32(dev, NV40_PGRAPH_CTXCTL_0310); + tmp |= save ? NV40_PGRAPH_CTXCTL_0310_XFER_SAVE : + NV40_PGRAPH_CTXCTL_0310_XFER_LOAD; + nv_wr32(dev, NV40_PGRAPH_CTXCTL_0310, tmp); + + tmp = nv_rd32(dev, NV40_PGRAPH_CTXCTL_0304); + tmp |= NV40_PGRAPH_CTXCTL_0304_XFER_CTX; + nv_wr32(dev, NV40_PGRAPH_CTXCTL_0304, tmp); + + nouveau_wait_for_idle(dev); + + for (i = 0; i < tv; i++) { + if (nv_rd32(dev, NV40_PGRAPH_CTXCTL_030C) == 0) + break; + } + + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, old_cp); + + if (i == tv) { + uint32_t ucstat = nv_rd32(dev, NV40_PGRAPH_CTXCTL_UCODE_STAT); + NV_ERROR(dev, "Failed: Instance=0x%08x Save=%d\n", inst, save); + NV_ERROR(dev, "IP: 0x%02x, Opcode: 0x%08x\n", + ucstat >> NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_SHIFT, + ucstat & NV40_PGRAPH_CTXCTL_UCODE_STAT_OP_MASK); + NV_ERROR(dev, "0x40030C = 0x%08x\n", + nv_rd32(dev, NV40_PGRAPH_CTXCTL_030C)); + return -EBUSY; + } + + return 0; +} + +/* Restore the context for a specific channel into PGRAPH */ +int +nv40_graph_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + uint32_t inst; + int ret; + + if (!chan->ramin_grctx) + return -EINVAL; + inst = chan->ramin_grctx->instance >> 4; + + ret = nv40_graph_transfer_context(dev, inst, 0); + if (ret) + return ret; + + /* 0x40032C, no idea of it's exact function. Could simply be a + * record of the currently active PGRAPH context. It's currently + * unknown as to what bit 24 does. The nv ddx has it set, so we will + * set it here too. + */ + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); + nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, + (inst & NV40_PGRAPH_CTXCTL_CUR_INSTANCE) | + NV40_PGRAPH_CTXCTL_CUR_LOADED); + /* 0x32E0 records the instance address of the active FIFO's PGRAPH + * context. If at any time this doesn't match 0x40032C, you will + * recieve PGRAPH_INTR_CONTEXT_SWITCH + */ + nv_wr32(dev, NV40_PFIFO_GRCTX_INSTANCE, inst); + return 0; +} + +int +nv40_graph_unload_context(struct drm_device *dev) +{ + uint32_t inst; + int ret; + + inst = nv_rd32(dev, NV40_PGRAPH_CTXCTL_CUR); + if (!(inst & NV40_PGRAPH_CTXCTL_CUR_LOADED)) + return 0; + inst &= NV40_PGRAPH_CTXCTL_CUR_INSTANCE; + + ret = nv40_graph_transfer_context(dev, inst, 1); + + nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, inst); + return ret; +} + +void +nv40_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t limit = max(1u, addr + size) - 1; + + if (pitch) + addr |= 1; + + switch (dev_priv->chipset) { + case 0x44: + case 0x4a: + case 0x4e: + nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); + nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); + nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); + break; + + case 0x46: + case 0x47: + case 0x49: + case 0x4b: + nv_wr32(dev, NV47_PGRAPH_TSIZE(i), pitch); + nv_wr32(dev, NV47_PGRAPH_TLIMIT(i), limit); + nv_wr32(dev, NV47_PGRAPH_TILE(i), addr); + nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), pitch); + nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), limit); + nv_wr32(dev, NV40_PGRAPH_TILE1(i), addr); + break; + + default: + nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); + nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); + nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); + nv_wr32(dev, NV40_PGRAPH_TSIZE1(i), pitch); + nv_wr32(dev, NV40_PGRAPH_TLIMIT1(i), limit); + nv_wr32(dev, NV40_PGRAPH_TILE1(i), addr); + break; + } +} + +/* + * G70 0x47 + * G71 0x49 + * NV45 0x48 + * G72[M] 0x46 + * G73 0x4b + * C51_G7X 0x4c + * C51 0x4e + */ +int +nv40_graph_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = + (struct drm_nouveau_private *)dev->dev_private; + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + uint32_t vramsz; + int i, j; + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & + ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | + NV_PMC_ENABLE_PGRAPH); + + if (nouveau_ctxfw) { + nouveau_grctx_prog_load(dev); + dev_priv->engine.graph.grctx_size = 175 * 1024; + } + + if (!dev_priv->engine.graph.ctxprog) { + struct nouveau_grctx ctx = {}; + uint32_t cp[256]; + + ctx.dev = dev; + ctx.mode = NOUVEAU_GRCTX_PROG; + ctx.data = cp; + ctx.ctxprog_max = 256; + nv40_grctx_init(&ctx); + dev_priv->engine.graph.grctx_size = ctx.ctxvals_pos * 4; + + nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0); + for (i = 0; i < ctx.ctxprog_len; i++) + nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_DATA, cp[i]); + } + + /* No context present currently */ + nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, 0x00000000); + + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV40_PGRAPH_INTR_EN, 0xFFFFFFFF); + + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF); + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x00000000); + nv_wr32(dev, NV04_PGRAPH_DEBUG_1, 0x401287c0); + nv_wr32(dev, NV04_PGRAPH_DEBUG_3, 0xe0de8055); + nv_wr32(dev, NV10_PGRAPH_DEBUG_4, 0x00008000); + nv_wr32(dev, NV04_PGRAPH_LIMIT_VIOL_PIX, 0x00be3c5f); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10010100); + nv_wr32(dev, NV10_PGRAPH_STATE , 0xFFFFFFFF); + + j = nv_rd32(dev, 0x1540) & 0xff; + if (j) { + for (i = 0; !(j & 1); j >>= 1, i++) + ; + nv_wr32(dev, 0x405000, i); + } + + if (dev_priv->chipset == 0x40) { + nv_wr32(dev, 0x4009b0, 0x83280fff); + nv_wr32(dev, 0x4009b4, 0x000000a0); + } else { + nv_wr32(dev, 0x400820, 0x83280eff); + nv_wr32(dev, 0x400824, 0x000000a0); + } + + switch (dev_priv->chipset) { + case 0x40: + case 0x45: + nv_wr32(dev, 0x4009b8, 0x0078e366); + nv_wr32(dev, 0x4009bc, 0x0000014c); + break; + case 0x41: + case 0x42: /* pciid also 0x00Cx */ + /* case 0x0120: XXX (pciid) */ + nv_wr32(dev, 0x400828, 0x007596ff); + nv_wr32(dev, 0x40082c, 0x00000108); + break; + case 0x43: + nv_wr32(dev, 0x400828, 0x0072cb77); + nv_wr32(dev, 0x40082c, 0x00000108); + break; + case 0x44: + case 0x46: /* G72 */ + case 0x4a: + case 0x4c: /* G7x-based C51 */ + case 0x4e: + nv_wr32(dev, 0x400860, 0); + nv_wr32(dev, 0x400864, 0); + break; + case 0x47: /* G70 */ + case 0x49: /* G71 */ + case 0x4b: /* G73 */ + nv_wr32(dev, 0x400828, 0x07830610); + nv_wr32(dev, 0x40082c, 0x0000016A); + break; + default: + break; + } + + nv_wr32(dev, 0x400b38, 0x2ffff800); + nv_wr32(dev, 0x400b3c, 0x00006000); + + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) + nv40_graph_set_region_tiling(dev, i, 0, 0, 0); + + /* begin RAM config */ + vramsz = drm_get_resource_len(dev, 0) - 1; + switch (dev_priv->chipset) { + case 0x40: + nv_wr32(dev, 0x4009A4, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x4009A8, nv_rd32(dev, NV04_PFB_CFG1)); + nv_wr32(dev, 0x4069A4, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x4069A8, nv_rd32(dev, NV04_PFB_CFG1)); + nv_wr32(dev, 0x400820, 0); + nv_wr32(dev, 0x400824, 0); + nv_wr32(dev, 0x400864, vramsz); + nv_wr32(dev, 0x400868, vramsz); + break; + default: + switch (dev_priv->chipset) { + case 0x46: + case 0x47: + case 0x49: + case 0x4b: + nv_wr32(dev, 0x400DF0, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x400DF4, nv_rd32(dev, NV04_PFB_CFG1)); + break; + default: + nv_wr32(dev, 0x4009F0, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x4009F4, nv_rd32(dev, NV04_PFB_CFG1)); + break; + } + nv_wr32(dev, 0x4069F0, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x4069F4, nv_rd32(dev, NV04_PFB_CFG1)); + nv_wr32(dev, 0x400840, 0); + nv_wr32(dev, 0x400844, 0); + nv_wr32(dev, 0x4008A0, vramsz); + nv_wr32(dev, 0x4008A4, vramsz); + break; + } + + return 0; +} + +void nv40_graph_takedown(struct drm_device *dev) +{ + nouveau_grctx_fini(dev); +} + +struct nouveau_pgraph_object_class nv40_graph_grclass[] = { + { 0x0030, false, NULL }, /* null */ + { 0x0039, false, NULL }, /* m2mf */ + { 0x004a, false, NULL }, /* gdirect */ + { 0x009f, false, NULL }, /* imageblit (nv12) */ + { 0x008a, false, NULL }, /* ifc */ + { 0x0089, false, NULL }, /* sifm */ + { 0x3089, false, NULL }, /* sifm (nv40) */ + { 0x0062, false, NULL }, /* surf2d */ + { 0x3062, false, NULL }, /* surf2d (nv40) */ + { 0x0043, false, NULL }, /* rop */ + { 0x0012, false, NULL }, /* beta1 */ + { 0x0072, false, NULL }, /* beta4 */ + { 0x0019, false, NULL }, /* cliprect */ + { 0x0044, false, NULL }, /* pattern */ + { 0x309e, false, NULL }, /* swzsurf */ + { 0x4097, false, NULL }, /* curie (nv40) */ + { 0x4497, false, NULL }, /* curie (nv44) */ + {} +}; + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_hw.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_hw.h @@ -0,0 +1,455 @@ +/* + * Copyright 2008 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef __NOUVEAU_HW_H__ +#define __NOUVEAU_HW_H__ + +#include "drmP.h" +#include "nouveau_drv.h" + +#define MASK(field) ( \ + (0xffffffff >> (31 - ((1 ? field) - (0 ? field)))) << (0 ? field)) + +#define XLATE(src, srclowbit, outfield) ( \ + (((src) >> (srclowbit)) << (0 ? outfield)) & MASK(outfield)) + +void NVWriteVgaSeq(struct drm_device *, int head, uint8_t index, uint8_t value); +uint8_t NVReadVgaSeq(struct drm_device *, int head, uint8_t index); +void NVWriteVgaGr(struct drm_device *, int head, uint8_t index, uint8_t value); +uint8_t NVReadVgaGr(struct drm_device *, int head, uint8_t index); +void NVSetOwner(struct drm_device *, int owner); +void NVBlankScreen(struct drm_device *, int head, bool blank); +void nouveau_hw_setpll(struct drm_device *, uint32_t reg1, + struct nouveau_pll_vals *pv); +int nouveau_hw_get_pllvals(struct drm_device *, enum pll_types plltype, + struct nouveau_pll_vals *pllvals); +int nouveau_hw_pllvals_to_clk(struct nouveau_pll_vals *pllvals); +int nouveau_hw_get_clock(struct drm_device *, enum pll_types plltype); +void nouveau_hw_save_vga_fonts(struct drm_device *, bool save); +void nouveau_hw_save_state(struct drm_device *, int head, + struct nv04_mode_state *state); +void nouveau_hw_load_state(struct drm_device *, int head, + struct nv04_mode_state *state); +void nouveau_hw_load_state_palette(struct drm_device *, int head, + struct nv04_mode_state *state); + +/* nouveau_calc.c */ +extern void nouveau_calc_arb(struct drm_device *, int vclk, int bpp, + int *burst, int *lwm); +extern int nouveau_calc_pll_mnp(struct drm_device *, struct pll_lims *pll_lim, + int clk, struct nouveau_pll_vals *pv); + +static inline uint32_t +nvReadMC(struct drm_device *dev, uint32_t reg) +{ + uint32_t val = nv_rd32(dev, reg); + NV_REG_DEBUG(MC, dev, "reg %08x val %08x\n", reg, val); + return val; +} + +static inline void +nvWriteMC(struct drm_device *dev, uint32_t reg, uint32_t val) +{ + NV_REG_DEBUG(MC, dev, "reg %08x val %08x\n", reg, val); + nv_wr32(dev, reg, val); +} + +static inline uint32_t +nvReadVIDEO(struct drm_device *dev, uint32_t reg) +{ + uint32_t val = nv_rd32(dev, reg); + NV_REG_DEBUG(VIDEO, dev, "reg %08x val %08x\n", reg, val); + return val; +} + +static inline void +nvWriteVIDEO(struct drm_device *dev, uint32_t reg, uint32_t val) +{ + NV_REG_DEBUG(VIDEO, dev, "reg %08x val %08x\n", reg, val); + nv_wr32(dev, reg, val); +} + +static inline uint32_t +nvReadFB(struct drm_device *dev, uint32_t reg) +{ + uint32_t val = nv_rd32(dev, reg); + NV_REG_DEBUG(FB, dev, "reg %08x val %08x\n", reg, val); + return val; +} + +static inline void +nvWriteFB(struct drm_device *dev, uint32_t reg, uint32_t val) +{ + NV_REG_DEBUG(FB, dev, "reg %08x val %08x\n", reg, val); + nv_wr32(dev, reg, val); +} + +static inline uint32_t +nvReadEXTDEV(struct drm_device *dev, uint32_t reg) +{ + uint32_t val = nv_rd32(dev, reg); + NV_REG_DEBUG(EXTDEV, dev, "reg %08x val %08x\n", reg, val); + return val; +} + +static inline void +nvWriteEXTDEV(struct drm_device *dev, uint32_t reg, uint32_t val) +{ + NV_REG_DEBUG(EXTDEV, dev, "reg %08x val %08x\n", reg, val); + nv_wr32(dev, reg, val); +} + +static inline uint32_t NVReadCRTC(struct drm_device *dev, + int head, uint32_t reg) +{ + uint32_t val; + if (head) + reg += NV_PCRTC0_SIZE; + val = nv_rd32(dev, reg); + NV_REG_DEBUG(CRTC, dev, "head %d reg %08x val %08x\n", head, reg, val); + return val; +} + +static inline void NVWriteCRTC(struct drm_device *dev, + int head, uint32_t reg, uint32_t val) +{ + if (head) + reg += NV_PCRTC0_SIZE; + NV_REG_DEBUG(CRTC, dev, "head %d reg %08x val %08x\n", head, reg, val); + nv_wr32(dev, reg, val); +} + +static inline uint32_t NVReadRAMDAC(struct drm_device *dev, + int head, uint32_t reg) +{ + uint32_t val; + if (head) + reg += NV_PRAMDAC0_SIZE; + val = nv_rd32(dev, reg); + NV_REG_DEBUG(RAMDAC, dev, "head %d reg %08x val %08x\n", + head, reg, val); + return val; +} + +static inline void NVWriteRAMDAC(struct drm_device *dev, + int head, uint32_t reg, uint32_t val) +{ + if (head) + reg += NV_PRAMDAC0_SIZE; + NV_REG_DEBUG(RAMDAC, dev, "head %d reg %08x val %08x\n", + head, reg, val); + nv_wr32(dev, reg, val); +} + +static inline uint8_t nv_read_tmds(struct drm_device *dev, + int or, int dl, uint8_t address) +{ + int ramdac = (or & OUTPUT_C) >> 2; + + NVWriteRAMDAC(dev, ramdac, NV_PRAMDAC_FP_TMDS_CONTROL + dl * 8, + NV_PRAMDAC_FP_TMDS_CONTROL_WRITE_DISABLE | address); + return NVReadRAMDAC(dev, ramdac, NV_PRAMDAC_FP_TMDS_DATA + dl * 8); +} + +static inline void nv_write_tmds(struct drm_device *dev, + int or, int dl, uint8_t address, + uint8_t data) +{ + int ramdac = (or & OUTPUT_C) >> 2; + + NVWriteRAMDAC(dev, ramdac, NV_PRAMDAC_FP_TMDS_DATA + dl * 8, data); + NVWriteRAMDAC(dev, ramdac, NV_PRAMDAC_FP_TMDS_CONTROL + dl * 8, address); +} + +static inline void NVWriteVgaCrtc(struct drm_device *dev, + int head, uint8_t index, uint8_t value) +{ + NV_REG_DEBUG(VGACRTC, dev, "head %d index 0x%02x data 0x%02x\n", + head, index, value); + nv_wr08(dev, NV_PRMCIO_CRX__COLOR + head * NV_PRMCIO_SIZE, index); + nv_wr08(dev, NV_PRMCIO_CR__COLOR + head * NV_PRMCIO_SIZE, value); +} + +static inline uint8_t NVReadVgaCrtc(struct drm_device *dev, + int head, uint8_t index) +{ + uint8_t val; + nv_wr08(dev, NV_PRMCIO_CRX__COLOR + head * NV_PRMCIO_SIZE, index); + val = nv_rd08(dev, NV_PRMCIO_CR__COLOR + head * NV_PRMCIO_SIZE); + NV_REG_DEBUG(VGACRTC, dev, "head %d index 0x%02x data 0x%02x\n", + head, index, val); + return val; +} + +/* CR57 and CR58 are a fun pair of regs. CR57 provides an index (0-0xf) for CR58 + * I suspect they in fact do nothing, but are merely a way to carry useful + * per-head variables around + * + * Known uses: + * CR57 CR58 + * 0x00 index to the appropriate dcb entry (or 7f for inactive) + * 0x02 dcb entry's "or" value (or 00 for inactive) + * 0x03 bit0 set for dual link (LVDS, possibly elsewhere too) + * 0x08 or 0x09 pxclk in MHz + * 0x0f laptop panel info - low nibble for PEXTDEV_BOOT_0 strap + * high nibble for xlat strap value + */ + +static inline void +NVWriteVgaCrtc5758(struct drm_device *dev, int head, uint8_t index, uint8_t value) +{ + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_57, index); + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_58, value); +} + +static inline uint8_t NVReadVgaCrtc5758(struct drm_device *dev, int head, uint8_t index) +{ + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_57, index); + return NVReadVgaCrtc(dev, head, NV_CIO_CRE_58); +} + +static inline uint8_t NVReadPRMVIO(struct drm_device *dev, + int head, uint32_t reg) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint8_t val; + + /* Only NV4x have two pvio ranges; other twoHeads cards MUST call + * NVSetOwner for the relevant head to be programmed */ + if (head && dev_priv->card_type == NV_40) + reg += NV_PRMVIO_SIZE; + + val = nv_rd08(dev, reg); + NV_REG_DEBUG(RMVIO, dev, "head %d reg %08x val %02x\n", head, reg, val); + return val; +} + +static inline void NVWritePRMVIO(struct drm_device *dev, + int head, uint32_t reg, uint8_t value) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /* Only NV4x have two pvio ranges; other twoHeads cards MUST call + * NVSetOwner for the relevant head to be programmed */ + if (head && dev_priv->card_type == NV_40) + reg += NV_PRMVIO_SIZE; + + NV_REG_DEBUG(RMVIO, dev, "head %d reg %08x val %02x\n", + head, reg, value); + nv_wr08(dev, reg, value); +} + +static inline void NVSetEnablePalette(struct drm_device *dev, int head, bool enable) +{ + nv_rd08(dev, NV_PRMCIO_INP0__COLOR + head * NV_PRMCIO_SIZE); + nv_wr08(dev, NV_PRMCIO_ARX + head * NV_PRMCIO_SIZE, enable ? 0 : 0x20); +} + +static inline bool NVGetEnablePalette(struct drm_device *dev, int head) +{ + nv_rd08(dev, NV_PRMCIO_INP0__COLOR + head * NV_PRMCIO_SIZE); + return !(nv_rd08(dev, NV_PRMCIO_ARX + head * NV_PRMCIO_SIZE) & 0x20); +} + +static inline void NVWriteVgaAttr(struct drm_device *dev, + int head, uint8_t index, uint8_t value) +{ + if (NVGetEnablePalette(dev, head)) + index &= ~0x20; + else + index |= 0x20; + + nv_rd08(dev, NV_PRMCIO_INP0__COLOR + head * NV_PRMCIO_SIZE); + NV_REG_DEBUG(VGAATTR, dev, "head %d index 0x%02x data 0x%02x\n", + head, index, value); + nv_wr08(dev, NV_PRMCIO_ARX + head * NV_PRMCIO_SIZE, index); + nv_wr08(dev, NV_PRMCIO_AR__WRITE + head * NV_PRMCIO_SIZE, value); +} + +static inline uint8_t NVReadVgaAttr(struct drm_device *dev, + int head, uint8_t index) +{ + uint8_t val; + if (NVGetEnablePalette(dev, head)) + index &= ~0x20; + else + index |= 0x20; + + nv_rd08(dev, NV_PRMCIO_INP0__COLOR + head * NV_PRMCIO_SIZE); + nv_wr08(dev, NV_PRMCIO_ARX + head * NV_PRMCIO_SIZE, index); + val = nv_rd08(dev, NV_PRMCIO_AR__READ + head * NV_PRMCIO_SIZE); + NV_REG_DEBUG(VGAATTR, dev, "head %d index 0x%02x data 0x%02x\n", + head, index, val); + return val; +} + +static inline void NVVgaSeqReset(struct drm_device *dev, int head, bool start) +{ + NVWriteVgaSeq(dev, head, NV_VIO_SR_RESET_INDEX, start ? 0x1 : 0x3); +} + +static inline void NVVgaProtect(struct drm_device *dev, int head, bool protect) +{ + uint8_t seq1 = NVReadVgaSeq(dev, head, NV_VIO_SR_CLOCK_INDEX); + + if (protect) { + NVVgaSeqReset(dev, head, true); + NVWriteVgaSeq(dev, head, NV_VIO_SR_CLOCK_INDEX, seq1 | 0x20); + } else { + /* Reenable sequencer, then turn on screen */ + NVWriteVgaSeq(dev, head, NV_VIO_SR_CLOCK_INDEX, seq1 & ~0x20); /* reenable display */ + NVVgaSeqReset(dev, head, false); + } + NVSetEnablePalette(dev, head, protect); +} + +static inline bool +nv_heads_tied(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->chipset == 0x11) + return !!(nvReadMC(dev, NV_PBUS_DEBUG_1) & (1 << 28)); + + return NVReadVgaCrtc(dev, 0, NV_CIO_CRE_44) & 0x4; +} + +/* makes cr0-7 on the specified head read-only */ +static inline bool +nv_lock_vga_crtc_base(struct drm_device *dev, int head, bool lock) +{ + uint8_t cr11 = NVReadVgaCrtc(dev, head, NV_CIO_CR_VRE_INDEX); + bool waslocked = cr11 & 0x80; + + if (lock) + cr11 |= 0x80; + else + cr11 &= ~0x80; + NVWriteVgaCrtc(dev, head, NV_CIO_CR_VRE_INDEX, cr11); + + return waslocked; +} + +static inline void +nv_lock_vga_crtc_shadow(struct drm_device *dev, int head, int lock) +{ + /* shadow lock: connects 0x60?3d? regs to "real" 0x3d? regs + * bit7: unlocks HDT, HBS, HBE, HRS, HRE, HEB + * bit6: seems to have some effect on CR09 (double scan, VBS_9) + * bit5: unlocks HDE + * bit4: unlocks VDE + * bit3: unlocks VDT, OVL, VRS, ?VRE?, VBS, VBE, LSR, EBR + * bit2: same as bit 1 of 0x60?804 + * bit0: same as bit 0 of 0x60?804 + */ + + uint8_t cr21 = lock; + + if (lock < 0) + /* 0xfa is generic "unlock all" mask */ + cr21 = NVReadVgaCrtc(dev, head, NV_CIO_CRE_21) | 0xfa; + + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_21, cr21); +} + +/* renders the extended crtc regs (cr19+) on all crtcs impervious: + * immutable and unreadable + */ +static inline bool +NVLockVgaCrtcs(struct drm_device *dev, bool lock) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + bool waslocked = !NVReadVgaCrtc(dev, 0, NV_CIO_SR_LOCK_INDEX); + + NVWriteVgaCrtc(dev, 0, NV_CIO_SR_LOCK_INDEX, + lock ? NV_CIO_SR_LOCK_VALUE : NV_CIO_SR_UNLOCK_RW_VALUE); + /* NV11 has independently lockable extended crtcs, except when tied */ + if (dev_priv->chipset == 0x11 && !nv_heads_tied(dev)) + NVWriteVgaCrtc(dev, 1, NV_CIO_SR_LOCK_INDEX, + lock ? NV_CIO_SR_LOCK_VALUE : + NV_CIO_SR_UNLOCK_RW_VALUE); + + return waslocked; +} + +/* nv04 cursor max dimensions of 32x32 (A1R5G5B5) */ +#define NV04_CURSOR_SIZE 32 +/* limit nv10 cursors to 64x64 (ARGB8) (we could go to 64x255) */ +#define NV10_CURSOR_SIZE 64 + +static inline int nv_cursor_width(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + return dev_priv->card_type >= NV_10 ? NV10_CURSOR_SIZE : NV04_CURSOR_SIZE; +} + +static inline void +nv_fix_nv40_hw_cursor(struct drm_device *dev, int head) +{ + /* on some nv40 (such as the "true" (in the NV_PFB_BOOT_0 sense) nv40, + * the gf6800gt) a hardware bug requires a write to PRAMDAC_CURSOR_POS + * for changes to the CRTC CURCTL regs to take effect, whether changing + * the pixmap location, or just showing/hiding the cursor + */ + uint32_t curpos = NVReadRAMDAC(dev, head, NV_PRAMDAC_CU_START_POS); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_CU_START_POS, curpos); +} + +static inline void +nv_show_cursor(struct drm_device *dev, int head, bool show) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint8_t *curctl1 = + &dev_priv->mode_reg.crtc_reg[head].CRTC[NV_CIO_CRE_HCUR_ADDR1_INDEX]; + + if (show) + *curctl1 |= MASK(NV_CIO_CRE_HCUR_ADDR1_ENABLE); + else + *curctl1 &= ~MASK(NV_CIO_CRE_HCUR_ADDR1_ENABLE); + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_HCUR_ADDR1_INDEX, *curctl1); + + if (dev_priv->card_type == NV_40) + nv_fix_nv40_hw_cursor(dev, head); +} + +static inline uint32_t +nv_pitch_align(struct drm_device *dev, uint32_t width, int bpp) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int mask; + + if (bpp == 15) + bpp = 16; + if (bpp == 24) + bpp = 8; + + /* Alignment requirements taken from the Haiku driver */ + if (dev_priv->card_type == NV_04) + mask = 128 / bpp - 1; + else + mask = 512 / bpp - 1; + + return (width + mask) & ~mask; +} + +#endif /* __NOUVEAU_HW_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_irq.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_irq.c @@ -0,0 +1,737 @@ +/* + * Copyright (C) 2006 Ben Skeggs. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + * Ben Skeggs + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drm.h" +#include "nouveau_drv.h" +#include "nouveau_reg.h" +#include + +/* needed for hotplug irq */ +#include "nouveau_connector.h" +#include "nv50_display.h" + +void +nouveau_irq_preinstall(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /* Master disable */ + nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); + + if (dev_priv->card_type == NV_50) { + INIT_WORK(&dev_priv->irq_work, nv50_display_irq_handler_bh); + INIT_LIST_HEAD(&dev_priv->vbl_waiting); + } +} + +int +nouveau_irq_postinstall(struct drm_device *dev) +{ + /* Master enable */ + nv_wr32(dev, NV03_PMC_INTR_EN_0, NV_PMC_INTR_EN_0_MASTER_ENABLE); + return 0; +} + +void +nouveau_irq_uninstall(struct drm_device *dev) +{ + /* Master disable */ + nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); +} + +static int +nouveau_call_method(struct nouveau_channel *chan, int class, int mthd, int data) +{ + struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct nouveau_pgraph_object_method *grm; + struct nouveau_pgraph_object_class *grc; + + grc = dev_priv->engine.graph.grclass; + while (grc->id) { + if (grc->id == class) + break; + grc++; + } + + if (grc->id != class || !grc->methods) + return -ENOENT; + + grm = grc->methods; + while (grm->id) { + if (grm->id == mthd) + return grm->exec(chan, class, mthd, data); + grm++; + } + + return -ENOENT; +} + +static bool +nouveau_fifo_swmthd(struct nouveau_channel *chan, uint32_t addr, uint32_t data) +{ + struct drm_device *dev = chan->dev; + const int subc = (addr >> 13) & 0x7; + const int mthd = addr & 0x1ffc; + + if (mthd == 0x0000) { + struct nouveau_gpuobj_ref *ref = NULL; + + if (nouveau_gpuobj_ref_find(chan, data, &ref)) + return false; + + if (ref->gpuobj->engine != NVOBJ_ENGINE_SW) + return false; + + chan->sw_subchannel[subc] = ref->gpuobj->class; + nv_wr32(dev, NV04_PFIFO_CACHE1_ENGINE, nv_rd32(dev, + NV04_PFIFO_CACHE1_ENGINE) & ~(0xf << subc * 4)); + return true; + } + + /* hw object */ + if (nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE) & (1 << (subc*4))) + return false; + + if (nouveau_call_method(chan, chan->sw_subchannel[subc], mthd, data)) + return false; + + return true; +} + +static void +nouveau_fifo_irq_handler(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + uint32_t status, reassign; + int cnt = 0; + + reassign = nv_rd32(dev, NV03_PFIFO_CACHES) & 1; + while ((status = nv_rd32(dev, NV03_PFIFO_INTR_0)) && (cnt++ < 100)) { + struct nouveau_channel *chan = NULL; + uint32_t chid, get; + + nv_wr32(dev, NV03_PFIFO_CACHES, 0); + + chid = engine->fifo.channel_id(dev); + if (chid >= 0 && chid < engine->fifo.channels) + chan = dev_priv->fifos[chid]; + get = nv_rd32(dev, NV03_PFIFO_CACHE1_GET); + + if (status & NV_PFIFO_INTR_CACHE_ERROR) { + uint32_t mthd, data; + int ptr; + + /* NV_PFIFO_CACHE1_GET actually goes to 0xffc before + * wrapping on my G80 chips, but CACHE1 isn't big + * enough for this much data.. Tests show that it + * wraps around to the start at GET=0x800.. No clue + * as to why.. + */ + ptr = (get & 0x7ff) >> 2; + + if (dev_priv->card_type < NV_40) { + mthd = nv_rd32(dev, + NV04_PFIFO_CACHE1_METHOD(ptr)); + data = nv_rd32(dev, + NV04_PFIFO_CACHE1_DATA(ptr)); + } else { + mthd = nv_rd32(dev, + NV40_PFIFO_CACHE1_METHOD(ptr)); + data = nv_rd32(dev, + NV40_PFIFO_CACHE1_DATA(ptr)); + } + + if (!chan || !nouveau_fifo_swmthd(chan, mthd, data)) { + NV_INFO(dev, "PFIFO_CACHE_ERROR - Ch %d/%d " + "Mthd 0x%04x Data 0x%08x\n", + chid, (mthd >> 13) & 7, mthd & 0x1ffc, + data); + } + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, 0); + nv_wr32(dev, NV03_PFIFO_INTR_0, + NV_PFIFO_INTR_CACHE_ERROR); + + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, + nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH0) & ~1); + nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, + nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH0) | 1); + nv_wr32(dev, NV04_PFIFO_CACHE1_HASH, 0); + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, + nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUSH) | 1); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); + + status &= ~NV_PFIFO_INTR_CACHE_ERROR; + } + + if (status & NV_PFIFO_INTR_DMA_PUSHER) { + NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d\n", chid); + + status &= ~NV_PFIFO_INTR_DMA_PUSHER; + nv_wr32(dev, NV03_PFIFO_INTR_0, + NV_PFIFO_INTR_DMA_PUSHER); + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_STATE, 0x00000000); + if (nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUT) != get) + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_GET, + get + 4); + } + + if (status & NV_PFIFO_INTR_SEMAPHORE) { + uint32_t sem; + + status &= ~NV_PFIFO_INTR_SEMAPHORE; + nv_wr32(dev, NV03_PFIFO_INTR_0, + NV_PFIFO_INTR_SEMAPHORE); + + sem = nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE); + nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, sem | 0x1); + + nv_wr32(dev, NV03_PFIFO_CACHE1_GET, get + 4); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); + } + + if (status) { + NV_INFO(dev, "PFIFO_INTR 0x%08x - Ch %d\n", + status, chid); + nv_wr32(dev, NV03_PFIFO_INTR_0, status); + status = 0; + } + + nv_wr32(dev, NV03_PFIFO_CACHES, reassign); + } + + if (status) { + NV_INFO(dev, "PFIFO still angry after %d spins, halt\n", cnt); + nv_wr32(dev, 0x2140, 0); + nv_wr32(dev, 0x140, 0); + } + + nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PFIFO_PENDING); +} + +struct nouveau_bitfield_names { + uint32_t mask; + const char *name; +}; + +static struct nouveau_bitfield_names nstatus_names[] = +{ + { NV04_PGRAPH_NSTATUS_STATE_IN_USE, "STATE_IN_USE" }, + { NV04_PGRAPH_NSTATUS_INVALID_STATE, "INVALID_STATE" }, + { NV04_PGRAPH_NSTATUS_BAD_ARGUMENT, "BAD_ARGUMENT" }, + { NV04_PGRAPH_NSTATUS_PROTECTION_FAULT, "PROTECTION_FAULT" } +}; + +static struct nouveau_bitfield_names nstatus_names_nv10[] = +{ + { NV10_PGRAPH_NSTATUS_STATE_IN_USE, "STATE_IN_USE" }, + { NV10_PGRAPH_NSTATUS_INVALID_STATE, "INVALID_STATE" }, + { NV10_PGRAPH_NSTATUS_BAD_ARGUMENT, "BAD_ARGUMENT" }, + { NV10_PGRAPH_NSTATUS_PROTECTION_FAULT, "PROTECTION_FAULT" } +}; + +static struct nouveau_bitfield_names nsource_names[] = +{ + { NV03_PGRAPH_NSOURCE_NOTIFICATION, "NOTIFICATION" }, + { NV03_PGRAPH_NSOURCE_DATA_ERROR, "DATA_ERROR" }, + { NV03_PGRAPH_NSOURCE_PROTECTION_ERROR, "PROTECTION_ERROR" }, + { NV03_PGRAPH_NSOURCE_RANGE_EXCEPTION, "RANGE_EXCEPTION" }, + { NV03_PGRAPH_NSOURCE_LIMIT_COLOR, "LIMIT_COLOR" }, + { NV03_PGRAPH_NSOURCE_LIMIT_ZETA, "LIMIT_ZETA" }, + { NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD, "ILLEGAL_MTHD" }, + { NV03_PGRAPH_NSOURCE_DMA_R_PROTECTION, "DMA_R_PROTECTION" }, + { NV03_PGRAPH_NSOURCE_DMA_W_PROTECTION, "DMA_W_PROTECTION" }, + { NV03_PGRAPH_NSOURCE_FORMAT_EXCEPTION, "FORMAT_EXCEPTION" }, + { NV03_PGRAPH_NSOURCE_PATCH_EXCEPTION, "PATCH_EXCEPTION" }, + { NV03_PGRAPH_NSOURCE_STATE_INVALID, "STATE_INVALID" }, + { NV03_PGRAPH_NSOURCE_DOUBLE_NOTIFY, "DOUBLE_NOTIFY" }, + { NV03_PGRAPH_NSOURCE_NOTIFY_IN_USE, "NOTIFY_IN_USE" }, + { NV03_PGRAPH_NSOURCE_METHOD_CNT, "METHOD_CNT" }, + { NV03_PGRAPH_NSOURCE_BFR_NOTIFICATION, "BFR_NOTIFICATION" }, + { NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION, "DMA_VTX_PROTECTION" }, + { NV03_PGRAPH_NSOURCE_DMA_WIDTH_A, "DMA_WIDTH_A" }, + { NV03_PGRAPH_NSOURCE_DMA_WIDTH_B, "DMA_WIDTH_B" }, +}; + +static void +nouveau_print_bitfield_names_(uint32_t value, + const struct nouveau_bitfield_names *namelist, + const int namelist_len) +{ + /* + * Caller must have already printed the KERN_* log level for us. + * Also the caller is responsible for adding the newline. + */ + int i; + for (i = 0; i < namelist_len; ++i) { + uint32_t mask = namelist[i].mask; + if (value & mask) { + printk(" %s", namelist[i].name); + value &= ~mask; + } + } + if (value) + printk(" (unknown bits 0x%08x)", value); +} +#define nouveau_print_bitfield_names(val, namelist) \ + nouveau_print_bitfield_names_((val), (namelist), ARRAY_SIZE(namelist)) + + +static int +nouveau_graph_chid_from_grctx(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t inst; + int i; + + if (dev_priv->card_type < NV_40) + return dev_priv->engine.fifo.channels; + else + if (dev_priv->card_type < NV_50) { + inst = (nv_rd32(dev, 0x40032c) & 0xfffff) << 4; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + struct nouveau_channel *chan = dev_priv->fifos[i]; + + if (!chan || !chan->ramin_grctx) + continue; + + if (inst == chan->ramin_grctx->instance) + break; + } + } else { + inst = (nv_rd32(dev, 0x40032c) & 0xfffff) << 12; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + struct nouveau_channel *chan = dev_priv->fifos[i]; + + if (!chan || !chan->ramin) + continue; + + if (inst == chan->ramin->instance) + break; + } + } + + + return i; +} + +static int +nouveau_graph_trapped_channel(struct drm_device *dev, int *channel_ret) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + int channel; + + if (dev_priv->card_type < NV_10) + channel = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 24) & 0xf; + else + if (dev_priv->card_type < NV_40) + channel = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 20) & 0x1f; + else + channel = nouveau_graph_chid_from_grctx(dev); + + if (channel >= engine->fifo.channels || !dev_priv->fifos[channel]) { + NV_ERROR(dev, "AIII, invalid/inactive channel id %d\n", channel); + return -EINVAL; + } + + *channel_ret = channel; + return 0; +} + +struct nouveau_pgraph_trap { + int channel; + int class; + int subc, mthd, size; + uint32_t data, data2; + uint32_t nsource, nstatus; +}; + +static void +nouveau_graph_trap_info(struct drm_device *dev, + struct nouveau_pgraph_trap *trap) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t address; + + trap->nsource = trap->nstatus = 0; + if (dev_priv->card_type < NV_50) { + trap->nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); + trap->nstatus = nv_rd32(dev, NV03_PGRAPH_NSTATUS); + } + + if (nouveau_graph_trapped_channel(dev, &trap->channel)) + trap->channel = -1; + address = nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR); + + trap->mthd = address & 0x1FFC; + trap->data = nv_rd32(dev, NV04_PGRAPH_TRAPPED_DATA); + if (dev_priv->card_type < NV_10) { + trap->subc = (address >> 13) & 0x7; + } else { + trap->subc = (address >> 16) & 0x7; + trap->data2 = nv_rd32(dev, NV10_PGRAPH_TRAPPED_DATA_HIGH); + } + + if (dev_priv->card_type < NV_10) + trap->class = nv_rd32(dev, 0x400180 + trap->subc*4) & 0xFF; + else if (dev_priv->card_type < NV_40) + trap->class = nv_rd32(dev, 0x400160 + trap->subc*4) & 0xFFF; + else if (dev_priv->card_type < NV_50) + trap->class = nv_rd32(dev, 0x400160 + trap->subc*4) & 0xFFFF; + else + trap->class = nv_rd32(dev, 0x400814); +} + +static void +nouveau_graph_dump_trap_info(struct drm_device *dev, const char *id, + struct nouveau_pgraph_trap *trap) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t nsource = trap->nsource, nstatus = trap->nstatus; + + NV_INFO(dev, "%s - nSource:", id); + nouveau_print_bitfield_names(nsource, nsource_names); + printk(", nStatus:"); + if (dev_priv->card_type < NV_10) + nouveau_print_bitfield_names(nstatus, nstatus_names); + else + nouveau_print_bitfield_names(nstatus, nstatus_names_nv10); + printk("\n"); + + NV_INFO(dev, "%s - Ch %d/%d Class 0x%04x Mthd 0x%04x " + "Data 0x%08x:0x%08x\n", + id, trap->channel, trap->subc, + trap->class, trap->mthd, + trap->data2, trap->data); +} + +static int +nouveau_pgraph_intr_swmthd(struct drm_device *dev, + struct nouveau_pgraph_trap *trap) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (trap->channel < 0 || + trap->channel >= dev_priv->engine.fifo.channels || + !dev_priv->fifos[trap->channel]) + return -ENODEV; + + return nouveau_call_method(dev_priv->fifos[trap->channel], + trap->class, trap->mthd, trap->data); +} + +static inline void +nouveau_pgraph_intr_notify(struct drm_device *dev, uint32_t nsource) +{ + struct nouveau_pgraph_trap trap; + int unhandled = 0; + + nouveau_graph_trap_info(dev, &trap); + + if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { + if (nouveau_pgraph_intr_swmthd(dev, &trap)) + unhandled = 1; + } else { + unhandled = 1; + } + + if (unhandled) + nouveau_graph_dump_trap_info(dev, "PGRAPH_NOTIFY", &trap); +} + +static DEFINE_RATELIMIT_STATE(nouveau_ratelimit_state, 3 * HZ, 20); + +static int nouveau_ratelimit(void) +{ + return __ratelimit(&nouveau_ratelimit_state); +} + + +static inline void +nouveau_pgraph_intr_error(struct drm_device *dev, uint32_t nsource) +{ + struct nouveau_pgraph_trap trap; + int unhandled = 0; + + nouveau_graph_trap_info(dev, &trap); + trap.nsource = nsource; + + if (nsource & NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD) { + if (nouveau_pgraph_intr_swmthd(dev, &trap)) + unhandled = 1; + } else if (nsource & NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION) { + uint32_t v = nv_rd32(dev, 0x402000); + nv_wr32(dev, 0x402000, v); + + /* dump the error anyway for now: it's useful for + Gallium development */ + unhandled = 1; + } else { + unhandled = 1; + } + + if (unhandled && nouveau_ratelimit()) + nouveau_graph_dump_trap_info(dev, "PGRAPH_ERROR", &trap); +} + +static inline void +nouveau_pgraph_intr_context_switch(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + uint32_t chid; + + chid = engine->fifo.channel_id(dev); + NV_DEBUG(dev, "PGRAPH context switch interrupt channel %x\n", chid); + + switch (dev_priv->card_type) { + case NV_04: + nv04_graph_context_switch(dev); + break; + case NV_10: + nv10_graph_context_switch(dev); + break; + default: + NV_ERROR(dev, "Context switch not implemented\n"); + break; + } +} + +static void +nouveau_pgraph_irq_handler(struct drm_device *dev) +{ + uint32_t status; + + while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) { + uint32_t nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); + + if (status & NV_PGRAPH_INTR_NOTIFY) { + nouveau_pgraph_intr_notify(dev, nsource); + + status &= ~NV_PGRAPH_INTR_NOTIFY; + nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_NOTIFY); + } + + if (status & NV_PGRAPH_INTR_ERROR) { + nouveau_pgraph_intr_error(dev, nsource); + + status &= ~NV_PGRAPH_INTR_ERROR; + nv_wr32(dev, NV03_PGRAPH_INTR, NV_PGRAPH_INTR_ERROR); + } + + if (status & NV_PGRAPH_INTR_CONTEXT_SWITCH) { + nouveau_pgraph_intr_context_switch(dev); + + status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; + nv_wr32(dev, NV03_PGRAPH_INTR, + NV_PGRAPH_INTR_CONTEXT_SWITCH); + } + + if (status) { + NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", status); + nv_wr32(dev, NV03_PGRAPH_INTR, status); + } + + if ((nv_rd32(dev, NV04_PGRAPH_FIFO) & (1 << 0)) == 0) + nv_wr32(dev, NV04_PGRAPH_FIFO, 1); + } + + nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); +} + +static void +nv50_pgraph_irq_handler(struct drm_device *dev) +{ + uint32_t status; + + while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) { + uint32_t nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE); + + if (status & 0x00000001) { + nouveau_pgraph_intr_notify(dev, nsource); + status &= ~0x00000001; + nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001); + } + + if (status & 0x00000010) { + nouveau_pgraph_intr_error(dev, nsource | + NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD); + + status &= ~0x00000010; + nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010); + } + + if (status & 0x00001000) { + nv_wr32(dev, 0x400500, 0x00000000); + nv_wr32(dev, NV03_PGRAPH_INTR, + NV_PGRAPH_INTR_CONTEXT_SWITCH); + nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, + NV40_PGRAPH_INTR_EN) & + ~NV_PGRAPH_INTR_CONTEXT_SWITCH); + nv_wr32(dev, 0x400500, 0x00010001); + + nv50_graph_context_switch(dev); + + status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH; + } + + if (status & 0x00100000) { + nouveau_pgraph_intr_error(dev, nsource | + NV03_PGRAPH_NSOURCE_DATA_ERROR); + + status &= ~0x00100000; + nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000); + } + + if (status & 0x00200000) { + int r; + + nouveau_pgraph_intr_error(dev, nsource | + NV03_PGRAPH_NSOURCE_PROTECTION_ERROR); + + NV_ERROR(dev, "magic set 1:\n"); + for (r = 0x408900; r <= 0x408910; r += 4) + NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, + nv_rd32(dev, r)); + nv_wr32(dev, 0x408900, + nv_rd32(dev, 0x408904) | 0xc0000000); + for (r = 0x408e08; r <= 0x408e24; r += 4) + NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, + nv_rd32(dev, r)); + nv_wr32(dev, 0x408e08, + nv_rd32(dev, 0x408e08) | 0xc0000000); + + NV_ERROR(dev, "magic set 2:\n"); + for (r = 0x409900; r <= 0x409910; r += 4) + NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, + nv_rd32(dev, r)); + nv_wr32(dev, 0x409900, + nv_rd32(dev, 0x409904) | 0xc0000000); + for (r = 0x409e08; r <= 0x409e24; r += 4) + NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r, + nv_rd32(dev, r)); + nv_wr32(dev, 0x409e08, + nv_rd32(dev, 0x409e08) | 0xc0000000); + + status &= ~0x00200000; + nv_wr32(dev, NV03_PGRAPH_NSOURCE, nsource); + nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000); + } + + if (status) { + NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n", + status); + nv_wr32(dev, NV03_PGRAPH_INTR, status); + } + + { + const int isb = (1 << 16) | (1 << 0); + + if ((nv_rd32(dev, 0x400500) & isb) != isb) + nv_wr32(dev, 0x400500, + nv_rd32(dev, 0x400500) | isb); + } + } + + nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING); + nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31)); +} + +static void +nouveau_crtc_irq_handler(struct drm_device *dev, int crtc) +{ + if (crtc & 1) + nv_wr32(dev, NV_CRTC0_INTSTAT, NV_CRTC_INTR_VBLANK); + + if (crtc & 2) + nv_wr32(dev, NV_CRTC1_INTSTAT, NV_CRTC_INTR_VBLANK); +} + +irqreturn_t +nouveau_irq_handler(DRM_IRQ_ARGS) +{ + struct drm_device *dev = (struct drm_device *)arg; + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t status, fbdev_flags = 0; + + status = nv_rd32(dev, NV03_PMC_INTR_0); + if (!status) + return IRQ_NONE; + + if (dev_priv->fbdev_info) { + fbdev_flags = dev_priv->fbdev_info->flags; + dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED; + } + + if (status & NV_PMC_INTR_0_PFIFO_PENDING) { + nouveau_fifo_irq_handler(dev); + status &= ~NV_PMC_INTR_0_PFIFO_PENDING; + } + + if (status & NV_PMC_INTR_0_PGRAPH_PENDING) { + if (dev_priv->card_type >= NV_50) + nv50_pgraph_irq_handler(dev); + else + nouveau_pgraph_irq_handler(dev); + + status &= ~NV_PMC_INTR_0_PGRAPH_PENDING; + } + + if (status & NV_PMC_INTR_0_CRTCn_PENDING) { + nouveau_crtc_irq_handler(dev, (status>>24)&3); + status &= ~NV_PMC_INTR_0_CRTCn_PENDING; + } + + if (status & (NV_PMC_INTR_0_NV50_DISPLAY_PENDING | + NV_PMC_INTR_0_NV50_I2C_PENDING)) { + nv50_display_irq_handler(dev); + status &= ~(NV_PMC_INTR_0_NV50_DISPLAY_PENDING | + NV_PMC_INTR_0_NV50_I2C_PENDING); + } + + if (status) + NV_ERROR(dev, "Unhandled PMC INTR status bits 0x%08x\n", status); + + if (dev_priv->fbdev_info) + dev_priv->fbdev_info->flags = fbdev_flags; + + return IRQ_HANDLED; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_graph.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_graph.c @@ -0,0 +1,400 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +#include "nouveau_grctx.h" + +#define IS_G80 ((dev_priv->chipset & 0xf0) == 0x50) + +static void +nv50_graph_init_reset(struct drm_device *dev) +{ + uint32_t pmc_e = NV_PMC_ENABLE_PGRAPH | (1 << 21); + + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & ~pmc_e); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | pmc_e); +} + +static void +nv50_graph_init_intr(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, NV03_PGRAPH_INTR, 0xffffffff); + nv_wr32(dev, 0x400138, 0xffffffff); + nv_wr32(dev, NV40_PGRAPH_INTR_EN, 0xffffffff); +} + +static void +nv50_graph_init_regs__nv(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, 0x400804, 0xc0000000); + nv_wr32(dev, 0x406800, 0xc0000000); + nv_wr32(dev, 0x400c04, 0xc0000000); + nv_wr32(dev, 0x401800, 0xc0000000); + nv_wr32(dev, 0x405018, 0xc0000000); + nv_wr32(dev, 0x402000, 0xc0000000); + + nv_wr32(dev, 0x400108, 0xffffffff); + + nv_wr32(dev, 0x400824, 0x00004000); + nv_wr32(dev, 0x400500, 0x00010001); +} + +static void +nv50_graph_init_regs(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, NV04_PGRAPH_DEBUG_3, + (1 << 2) /* HW_CONTEXT_SWITCH_ENABLED */); + nv_wr32(dev, 0x402ca8, 0x800); +} + +static int +nv50_graph_init_ctxctl(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + NV_DEBUG(dev, "\n"); + + if (nouveau_ctxfw) { + nouveau_grctx_prog_load(dev); + dev_priv->engine.graph.grctx_size = 0x70000; + } + if (!dev_priv->engine.graph.ctxprog) { + struct nouveau_grctx ctx = {}; + uint32_t *cp = kmalloc(512 * 4, GFP_KERNEL); + int i; + if (!cp) { + NV_ERROR(dev, "Couldn't alloc ctxprog! Disabling acceleration.\n"); + dev_priv->engine.graph.accel_blocked = true; + return 0; + } + ctx.dev = dev; + ctx.mode = NOUVEAU_GRCTX_PROG; + ctx.data = cp; + ctx.ctxprog_max = 512; + if (!nv50_grctx_init(&ctx)) { + dev_priv->engine.graph.grctx_size = ctx.ctxvals_pos * 4; + + nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0); + for (i = 0; i < ctx.ctxprog_len; i++) + nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_DATA, cp[i]); + } else { + dev_priv->engine.graph.accel_blocked = true; + } + kfree(cp); + } + + nv_wr32(dev, 0x400320, 4); + nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, 0); + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, 0); + return 0; +} + +int +nv50_graph_init(struct drm_device *dev) +{ + int ret; + + NV_DEBUG(dev, "\n"); + + nv50_graph_init_reset(dev); + nv50_graph_init_regs__nv(dev); + nv50_graph_init_regs(dev); + nv50_graph_init_intr(dev); + + ret = nv50_graph_init_ctxctl(dev); + if (ret) + return ret; + + return 0; +} + +void +nv50_graph_takedown(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + nouveau_grctx_fini(dev); +} + +void +nv50_graph_fifo_access(struct drm_device *dev, bool enabled) +{ + const uint32_t mask = 0x00010001; + + if (enabled) + nv_wr32(dev, 0x400500, nv_rd32(dev, 0x400500) | mask); + else + nv_wr32(dev, 0x400500, nv_rd32(dev, 0x400500) & ~mask); +} + +struct nouveau_channel * +nv50_graph_channel(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t inst; + int i; + + /* Be sure we're not in the middle of a context switch or bad things + * will happen, such as unloading the wrong pgraph context. + */ + if (!nv_wait(0x400300, 0x00000001, 0x00000000)) + NV_ERROR(dev, "Ctxprog is still running\n"); + + inst = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR); + if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED)) + return NULL; + inst = (inst & NV50_PGRAPH_CTXCTL_CUR_INSTANCE) << 12; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + struct nouveau_channel *chan = dev_priv->fifos[i]; + + if (chan && chan->ramin && chan->ramin->instance == inst) + return chan; + } + + return NULL; +} + +int +nv50_graph_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *ramin = chan->ramin->gpuobj; + struct nouveau_gpuobj *ctx; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + int hdr, ret; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pgraph->grctx_size, + 0x1000, NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, &chan->ramin_grctx); + if (ret) + return ret; + ctx = chan->ramin_grctx->gpuobj; + + hdr = IS_G80 ? 0x200 : 0x20; + dev_priv->engine.instmem.prepare_access(dev, true); + nv_wo32(dev, ramin, (hdr + 0x00)/4, 0x00190002); + nv_wo32(dev, ramin, (hdr + 0x04)/4, chan->ramin_grctx->instance + + pgraph->grctx_size - 1); + nv_wo32(dev, ramin, (hdr + 0x08)/4, chan->ramin_grctx->instance); + nv_wo32(dev, ramin, (hdr + 0x0c)/4, 0); + nv_wo32(dev, ramin, (hdr + 0x10)/4, 0); + nv_wo32(dev, ramin, (hdr + 0x14)/4, 0x00010000); + dev_priv->engine.instmem.finish_access(dev); + + dev_priv->engine.instmem.prepare_access(dev, true); + if (!pgraph->ctxprog) { + struct nouveau_grctx ctx = {}; + ctx.dev = chan->dev; + ctx.mode = NOUVEAU_GRCTX_VALS; + ctx.data = chan->ramin_grctx->gpuobj; + nv50_grctx_init(&ctx); + } else { + nouveau_grctx_vals_load(dev, ctx); + } + nv_wo32(dev, ctx, 0x00000/4, chan->ramin->instance >> 12); + dev_priv->engine.instmem.finish_access(dev); + + return 0; +} + +void +nv50_graph_destroy_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int i, hdr = IS_G80 ? 0x200 : 0x20; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + if (!chan->ramin || !chan->ramin->gpuobj) + return; + + dev_priv->engine.instmem.prepare_access(dev, true); + for (i = hdr; i < hdr + 24; i += 4) + nv_wo32(dev, chan->ramin->gpuobj, i/4, 0); + dev_priv->engine.instmem.finish_access(dev); + + nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); +} + +static int +nv50_graph_do_load_context(struct drm_device *dev, uint32_t inst) +{ + uint32_t fifo = nv_rd32(dev, 0x400500); + + nv_wr32(dev, 0x400500, fifo & ~1); + nv_wr32(dev, 0x400784, inst); + nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) | 0x40); + nv_wr32(dev, 0x400320, nv_rd32(dev, 0x400320) | 0x11); + nv_wr32(dev, 0x400040, 0xffffffff); + (void)nv_rd32(dev, 0x400040); + nv_wr32(dev, 0x400040, 0x00000000); + nv_wr32(dev, 0x400304, nv_rd32(dev, 0x400304) | 1); + + if (nouveau_wait_for_idle(dev)) + nv_wr32(dev, 0x40032c, inst | (1<<31)); + nv_wr32(dev, 0x400500, fifo); + + return 0; +} + +int +nv50_graph_load_context(struct nouveau_channel *chan) +{ + uint32_t inst = chan->ramin->instance >> 12; + + NV_DEBUG(chan->dev, "ch%d\n", chan->id); + return nv50_graph_do_load_context(chan->dev, inst); +} + +int +nv50_graph_unload_context(struct drm_device *dev) +{ + uint32_t inst; + + inst = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR); + if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED)) + return 0; + inst &= NV50_PGRAPH_CTXCTL_CUR_INSTANCE; + + nouveau_wait_for_idle(dev); + nv_wr32(dev, 0x400784, inst); + nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) | 0x20); + nv_wr32(dev, 0x400304, nv_rd32(dev, 0x400304) | 0x01); + nouveau_wait_for_idle(dev); + + nv_wr32(dev, NV50_PGRAPH_CTXCTL_CUR, inst); + return 0; +} + +void +nv50_graph_context_switch(struct drm_device *dev) +{ + uint32_t inst; + + nv50_graph_unload_context(dev); + + inst = nv_rd32(dev, NV50_PGRAPH_CTXCTL_NEXT); + inst &= NV50_PGRAPH_CTXCTL_NEXT_INSTANCE; + nv50_graph_do_load_context(dev, inst); + + nv_wr32(dev, NV40_PGRAPH_INTR_EN, nv_rd32(dev, + NV40_PGRAPH_INTR_EN) | NV_PGRAPH_INTR_CONTEXT_SWITCH); +} + +static int +nv50_graph_nvsw_dma_vblsem(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + struct nouveau_gpuobj_ref *ref = NULL; + + if (nouveau_gpuobj_ref_find(chan, data, &ref)) + return -ENOENT; + + if (nouveau_notifier_offset(ref->gpuobj, NULL)) + return -EINVAL; + + chan->nvsw.vblsem = ref->gpuobj; + chan->nvsw.vblsem_offset = ~0; + return 0; +} + +static int +nv50_graph_nvsw_vblsem_offset(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + if (nouveau_notifier_offset(chan->nvsw.vblsem, &data)) + return -ERANGE; + + chan->nvsw.vblsem_offset = data >> 2; + return 0; +} + +static int +nv50_graph_nvsw_vblsem_release_val(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + chan->nvsw.vblsem_rval = data; + return 0; +} + +static int +nv50_graph_nvsw_vblsem_release(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (!chan->nvsw.vblsem || chan->nvsw.vblsem_offset == ~0 || data > 1) + return -EINVAL; + + if (!(nv_rd32(dev, NV50_PDISPLAY_INTR_EN) & + NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(data))) { + nv_wr32(dev, NV50_PDISPLAY_INTR_1, + NV50_PDISPLAY_INTR_1_VBLANK_CRTC_(data)); + nv_wr32(dev, NV50_PDISPLAY_INTR_EN, nv_rd32(dev, + NV50_PDISPLAY_INTR_EN) | + NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(data)); + } + + list_add(&chan->nvsw.vbl_wait, &dev_priv->vbl_waiting); + return 0; +} + +static struct nouveau_pgraph_object_method nv50_graph_nvsw_methods[] = { + { 0x018c, nv50_graph_nvsw_dma_vblsem }, + { 0x0400, nv50_graph_nvsw_vblsem_offset }, + { 0x0404, nv50_graph_nvsw_vblsem_release_val }, + { 0x0408, nv50_graph_nvsw_vblsem_release }, + {} +}; + +struct nouveau_pgraph_object_class nv50_graph_grclass[] = { + { 0x506e, true, nv50_graph_nvsw_methods }, /* nvsw */ + { 0x0030, false, NULL }, /* null */ + { 0x5039, false, NULL }, /* m2mf */ + { 0x502d, false, NULL }, /* 2d */ + { 0x50c0, false, NULL }, /* compute */ + { 0x5097, false, NULL }, /* tesla (nv50) */ + { 0x8297, false, NULL }, /* tesla (nv80/nv90) */ + { 0x8397, false, NULL }, /* tesla (nva0) */ + { 0x8597, false, NULL }, /* tesla (nva8) */ + {} +}; --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_grctx.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_grctx.c @@ -0,0 +1,161 @@ +/* + * Copyright 2009 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Ben Skeggs + */ + +#include + +#include "drmP.h" +#include "nouveau_drv.h" + +struct nouveau_ctxprog { + uint32_t signature; + uint8_t version; + uint16_t length; + uint32_t data[]; +} __attribute__ ((packed)); + +struct nouveau_ctxvals { + uint32_t signature; + uint8_t version; + uint32_t length; + struct { + uint32_t offset; + uint32_t value; + } data[]; +} __attribute__ ((packed)); + +int +nouveau_grctx_prog_load(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + const int chipset = dev_priv->chipset; + const struct firmware *fw; + const struct nouveau_ctxprog *cp; + const struct nouveau_ctxvals *cv; + char name[32]; + int ret, i; + + if (pgraph->accel_blocked) + return -ENODEV; + + if (!pgraph->ctxprog) { + sprintf(name, "nouveau/nv%02x.ctxprog", chipset); + ret = request_firmware(&fw, name, &dev->pdev->dev); + if (ret) { + NV_ERROR(dev, "No ctxprog for NV%02x\n", chipset); + return ret; + } + + pgraph->ctxprog = kmalloc(fw->size, GFP_KERNEL); + if (!pgraph->ctxprog) { + NV_ERROR(dev, "OOM copying ctxprog\n"); + release_firmware(fw); + return -ENOMEM; + } + memcpy(pgraph->ctxprog, fw->data, fw->size); + + cp = pgraph->ctxprog; + if (le32_to_cpu(cp->signature) != 0x5043564e || + cp->version != 0 || + le16_to_cpu(cp->length) != ((fw->size - 7) / 4)) { + NV_ERROR(dev, "ctxprog invalid\n"); + release_firmware(fw); + nouveau_grctx_fini(dev); + return -EINVAL; + } + release_firmware(fw); + } + + if (!pgraph->ctxvals) { + sprintf(name, "nouveau/nv%02x.ctxvals", chipset); + ret = request_firmware(&fw, name, &dev->pdev->dev); + if (ret) { + NV_ERROR(dev, "No ctxvals for NV%02x\n", chipset); + nouveau_grctx_fini(dev); + return ret; + } + + pgraph->ctxvals = kmalloc(fw->size, GFP_KERNEL); + if (!pgraph->ctxvals) { + NV_ERROR(dev, "OOM copying ctxvals\n"); + release_firmware(fw); + nouveau_grctx_fini(dev); + return -ENOMEM; + } + memcpy(pgraph->ctxvals, fw->data, fw->size); + + cv = (void *)pgraph->ctxvals; + if (le32_to_cpu(cv->signature) != 0x5643564e || + cv->version != 0 || + le32_to_cpu(cv->length) != ((fw->size - 9) / 8)) { + NV_ERROR(dev, "ctxvals invalid\n"); + release_firmware(fw); + nouveau_grctx_fini(dev); + return -EINVAL; + } + release_firmware(fw); + } + + cp = pgraph->ctxprog; + + nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0); + for (i = 0; i < le16_to_cpu(cp->length); i++) + nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_DATA, + le32_to_cpu(cp->data[i])); + + return 0; +} + +void +nouveau_grctx_fini(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + + if (pgraph->ctxprog) { + kfree(pgraph->ctxprog); + pgraph->ctxprog = NULL; + } + + if (pgraph->ctxvals) { + kfree(pgraph->ctxprog); + pgraph->ctxvals = NULL; + } +} + +void +nouveau_grctx_vals_load(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_ctxvals *cv = pgraph->ctxvals; + int i; + + if (!cv) + return; + + for (i = 0; i < le32_to_cpu(cv->length); i++) + nv_wo32(dev, ctx, le32_to_cpu(cv->data[i].offset), + le32_to_cpu(cv->data[i].value)); +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_mem.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_mem.c @@ -0,0 +1,699 @@ +/* + * Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved. + * Copyright 2005 Stephane Marchesin + * + * The Weather Channel (TM) funded Tungsten Graphics to develop the + * initial release of the Radeon 8500 driver under the XFree86 license. + * This notice must be preserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Keith Whitwell + */ + + +#include "drmP.h" +#include "drm.h" +#include "drm_sarea.h" +#include "nouveau_drv.h" + +static struct mem_block * +split_block(struct mem_block *p, uint64_t start, uint64_t size, + struct drm_file *file_priv) +{ + /* Maybe cut off the start of an existing block */ + if (start > p->start) { + struct mem_block *newblock = + kmalloc(sizeof(*newblock), GFP_KERNEL); + if (!newblock) + goto out; + newblock->start = start; + newblock->size = p->size - (start - p->start); + newblock->file_priv = NULL; + newblock->next = p->next; + newblock->prev = p; + p->next->prev = newblock; + p->next = newblock; + p->size -= newblock->size; + p = newblock; + } + + /* Maybe cut off the end of an existing block */ + if (size < p->size) { + struct mem_block *newblock = + kmalloc(sizeof(*newblock), GFP_KERNEL); + if (!newblock) + goto out; + newblock->start = start + size; + newblock->size = p->size - size; + newblock->file_priv = NULL; + newblock->next = p->next; + newblock->prev = p; + p->next->prev = newblock; + p->next = newblock; + p->size = size; + } + +out: + /* Our block is in the middle */ + p->file_priv = file_priv; + return p; +} + +struct mem_block * +nouveau_mem_alloc_block(struct mem_block *heap, uint64_t size, + int align2, struct drm_file *file_priv, int tail) +{ + struct mem_block *p; + uint64_t mask = (1 << align2) - 1; + + if (!heap) + return NULL; + + if (tail) { + list_for_each_prev(p, heap) { + uint64_t start = ((p->start + p->size) - size) & ~mask; + + if (p->file_priv == NULL && start >= p->start && + start + size <= p->start + p->size) + return split_block(p, start, size, file_priv); + } + } else { + list_for_each(p, heap) { + uint64_t start = (p->start + mask) & ~mask; + + if (p->file_priv == NULL && + start + size <= p->start + p->size) + return split_block(p, start, size, file_priv); + } + } + + return NULL; +} + +void nouveau_mem_free_block(struct mem_block *p) +{ + p->file_priv = NULL; + + /* Assumes a single contiguous range. Needs a special file_priv in + * 'heap' to stop it being subsumed. + */ + if (p->next->file_priv == NULL) { + struct mem_block *q = p->next; + p->size += q->size; + p->next = q->next; + p->next->prev = p; + kfree(q); + } + + if (p->prev->file_priv == NULL) { + struct mem_block *q = p->prev; + q->size += p->size; + q->next = p->next; + q->next->prev = q; + kfree(p); + } +} + +/* Initialize. How to check for an uninitialized heap? + */ +int nouveau_mem_init_heap(struct mem_block **heap, uint64_t start, + uint64_t size) +{ + struct mem_block *blocks = kmalloc(sizeof(*blocks), GFP_KERNEL); + + if (!blocks) + return -ENOMEM; + + *heap = kmalloc(sizeof(**heap), GFP_KERNEL); + if (!*heap) { + kfree(blocks); + return -ENOMEM; + } + + blocks->start = start; + blocks->size = size; + blocks->file_priv = NULL; + blocks->next = blocks->prev = *heap; + + memset(*heap, 0, sizeof(**heap)); + (*heap)->file_priv = (struct drm_file *) -1; + (*heap)->next = (*heap)->prev = blocks; + return 0; +} + +/* + * Free all blocks associated with the releasing file_priv + */ +void nouveau_mem_release(struct drm_file *file_priv, struct mem_block *heap) +{ + struct mem_block *p; + + if (!heap || !heap->next) + return; + + list_for_each(p, heap) { + if (p->file_priv == file_priv) + p->file_priv = NULL; + } + + /* Assumes a single contiguous range. Needs a special file_priv in + * 'heap' to stop it being subsumed. + */ + list_for_each(p, heap) { + while ((p->file_priv == NULL) && + (p->next->file_priv == NULL) && + (p->next != heap)) { + struct mem_block *q = p->next; + p->size += q->size; + p->next = q->next; + p->next->prev = p; + kfree(q); + } + } +} + +/* + * NV10-NV40 tiling helpers + */ + +static void +nv10_mem_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_tile_reg *tile = &dev_priv->tile.reg[i]; + + tile->addr = addr; + tile->size = size; + tile->used = !!pitch; + nouveau_fence_unref((void **)&tile->fence); + + if (!pfifo->cache_flush(dev)) + return; + + pfifo->reassign(dev, false); + pfifo->cache_flush(dev); + pfifo->cache_pull(dev, false); + + nouveau_wait_for_idle(dev); + + pgraph->set_region_tiling(dev, i, addr, size, pitch); + pfb->set_region_tiling(dev, i, addr, size, pitch); + + pfifo->cache_pull(dev, true); + pfifo->reassign(dev, true); +} + +struct nouveau_tile_reg * +nv10_mem_set_tiling(struct drm_device *dev, uint32_t addr, uint32_t size, + uint32_t pitch) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + struct nouveau_tile_reg *tile = dev_priv->tile.reg, *found = NULL; + int i; + + spin_lock(&dev_priv->tile.lock); + + for (i = 0; i < pfb->num_tiles; i++) { + if (tile[i].used) + /* Tile region in use. */ + continue; + + if (tile[i].fence && + !nouveau_fence_signalled(tile[i].fence, NULL)) + /* Pending tile region. */ + continue; + + if (max(tile[i].addr, addr) < + min(tile[i].addr + tile[i].size, addr + size)) + /* Kill an intersecting tile region. */ + nv10_mem_set_region_tiling(dev, i, 0, 0, 0); + + if (pitch && !found) { + /* Free tile region. */ + nv10_mem_set_region_tiling(dev, i, addr, size, pitch); + found = &tile[i]; + } + } + + spin_unlock(&dev_priv->tile.lock); + + return found; +} + +void +nv10_mem_expire_tiling(struct drm_device *dev, struct nouveau_tile_reg *tile, + struct nouveau_fence *fence) +{ + if (fence) { + /* Mark it as pending. */ + tile->fence = fence; + nouveau_fence_ref(fence); + } + + tile->used = false; +} + +/* + * NV50 VM helpers + */ +int +nv50_mem_vm_bind_linear(struct drm_device *dev, uint64_t virt, uint32_t size, + uint32_t flags, uint64_t phys) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *pgt; + unsigned block; + int i; + + virt = ((virt - dev_priv->vm_vram_base) >> 16) << 1; + size = (size >> 16) << 1; + + phys |= ((uint64_t)flags << 32); + phys |= 1; + if (dev_priv->vram_sys_base) { + phys += dev_priv->vram_sys_base; + phys |= 0x30; + } + + dev_priv->engine.instmem.prepare_access(dev, true); + while (size) { + unsigned offset_h = upper_32_bits(phys); + unsigned offset_l = lower_32_bits(phys); + unsigned pte, end; + + for (i = 7; i >= 0; i--) { + block = 1 << (i + 1); + if (size >= block && !(virt & (block - 1))) + break; + } + offset_l |= (i << 7); + + phys += block << 15; + size -= block; + + while (block) { + pgt = dev_priv->vm_vram_pt[virt >> 14]; + pte = virt & 0x3ffe; + + end = pte + block; + if (end > 16384) + end = 16384; + block -= (end - pte); + virt += (end - pte); + + while (pte < end) { + nv_wo32(dev, pgt, pte++, offset_l); + nv_wo32(dev, pgt, pte++, offset_h); + } + } + } + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, 0x100c80, 0x00050001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); + return -EBUSY; + } + + nv_wr32(dev, 0x100c80, 0x00000001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); + return -EBUSY; + } + + return 0; +} + +void +nv50_mem_vm_unbind(struct drm_device *dev, uint64_t virt, uint32_t size) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *pgt; + unsigned pages, pte, end; + + virt -= dev_priv->vm_vram_base; + pages = (size >> 16) << 1; + + dev_priv->engine.instmem.prepare_access(dev, true); + while (pages) { + pgt = dev_priv->vm_vram_pt[virt >> 29]; + pte = (virt & 0x1ffe0000ULL) >> 15; + + end = pte + pages; + if (end > 16384) + end = 16384; + pages -= (end - pte); + virt += (end - pte) << 15; + + while (pte < end) + nv_wo32(dev, pgt, pte++, 0); + } + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, 0x100c80, 0x00050001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); + return; + } + + nv_wr32(dev, 0x100c80, 0x00000001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); + } +} + +/* + * Cleanup everything + */ +void nouveau_mem_takedown(struct mem_block **heap) +{ + struct mem_block *p; + + if (!*heap) + return; + + for (p = (*heap)->next; p != *heap;) { + struct mem_block *q = p; + p = p->next; + kfree(q); + } + + kfree(*heap); + *heap = NULL; +} + +void nouveau_mem_close(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + nouveau_bo_unpin(dev_priv->vga_ram); + nouveau_bo_ref(NULL, &dev_priv->vga_ram); + + ttm_bo_device_release(&dev_priv->ttm.bdev); + + nouveau_ttm_global_release(dev_priv); + + if (drm_core_has_AGP(dev) && dev->agp && + drm_core_check_feature(dev, DRIVER_MODESET)) { + struct drm_agp_mem *entry, *tempe; + + /* Remove AGP resources, but leave dev->agp + intact until drv_cleanup is called. */ + list_for_each_entry_safe(entry, tempe, &dev->agp->memory, head) { + if (entry->bound) + drm_unbind_agp(entry->memory); + drm_free_agp(entry->memory, entry->pages); + kfree(entry); + } + INIT_LIST_HEAD(&dev->agp->memory); + + if (dev->agp->acquired) + drm_agp_release(dev); + + dev->agp->acquired = 0; + dev->agp->enabled = 0; + } + + if (dev_priv->fb_mtrr) { + drm_mtrr_del(dev_priv->fb_mtrr, drm_get_resource_start(dev, 1), + drm_get_resource_len(dev, 1), DRM_MTRR_WC); + dev_priv->fb_mtrr = 0; + } +} + +/*XXX won't work on BSD because of pci_read_config_dword */ +static uint32_t +nouveau_mem_fb_amount_igp(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct pci_dev *bridge; + uint32_t mem; + + bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 1)); + if (!bridge) { + NV_ERROR(dev, "no bridge device\n"); + return 0; + } + + if (dev_priv->flags&NV_NFORCE) { + pci_read_config_dword(bridge, 0x7C, &mem); + return (uint64_t)(((mem >> 6) & 31) + 1)*1024*1024; + } else + if (dev_priv->flags&NV_NFORCE2) { + pci_read_config_dword(bridge, 0x84, &mem); + return (uint64_t)(((mem >> 4) & 127) + 1)*1024*1024; + } + + NV_ERROR(dev, "impossible!\n"); + return 0; +} + +/* returns the amount of FB ram in bytes */ +uint64_t nouveau_mem_fb_amount(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t boot0; + + switch (dev_priv->card_type) { + case NV_04: + boot0 = nv_rd32(dev, NV03_BOOT_0); + if (boot0 & 0x00000100) + return (((boot0 >> 12) & 0xf) * 2 + 2) * 1024 * 1024; + + switch (boot0 & NV03_BOOT_0_RAM_AMOUNT) { + case NV04_BOOT_0_RAM_AMOUNT_32MB: + return 32 * 1024 * 1024; + case NV04_BOOT_0_RAM_AMOUNT_16MB: + return 16 * 1024 * 1024; + case NV04_BOOT_0_RAM_AMOUNT_8MB: + return 8 * 1024 * 1024; + case NV04_BOOT_0_RAM_AMOUNT_4MB: + return 4 * 1024 * 1024; + } + break; + case NV_10: + case NV_20: + case NV_30: + case NV_40: + case NV_50: + default: + if (dev_priv->flags & (NV_NFORCE | NV_NFORCE2)) { + return nouveau_mem_fb_amount_igp(dev); + } else { + uint64_t mem; + mem = (nv_rd32(dev, NV04_FIFO_DATA) & + NV10_FIFO_DATA_RAM_AMOUNT_MB_MASK) >> + NV10_FIFO_DATA_RAM_AMOUNT_MB_SHIFT; + return mem * 1024 * 1024; + } + break; + } + + NV_ERROR(dev, + "Unable to detect video ram size. Please report your setup to " + DRIVER_EMAIL "\n"); + return 0; +} + +#if __OS_HAS_AGP +static void nouveau_mem_reset_agp(struct drm_device *dev) +{ + uint32_t saved_pci_nv_1, saved_pci_nv_19, pmc_enable; + + saved_pci_nv_1 = nv_rd32(dev, NV04_PBUS_PCI_NV_1); + saved_pci_nv_19 = nv_rd32(dev, NV04_PBUS_PCI_NV_19); + + /* clear busmaster bit */ + nv_wr32(dev, NV04_PBUS_PCI_NV_1, saved_pci_nv_1 & ~0x4); + /* clear SBA and AGP bits */ + nv_wr32(dev, NV04_PBUS_PCI_NV_19, saved_pci_nv_19 & 0xfffff0ff); + + /* power cycle pgraph, if enabled */ + pmc_enable = nv_rd32(dev, NV03_PMC_ENABLE); + if (pmc_enable & NV_PMC_ENABLE_PGRAPH) { + nv_wr32(dev, NV03_PMC_ENABLE, + pmc_enable & ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | + NV_PMC_ENABLE_PGRAPH); + } + + /* and restore (gives effect of resetting AGP) */ + nv_wr32(dev, NV04_PBUS_PCI_NV_19, saved_pci_nv_19); + nv_wr32(dev, NV04_PBUS_PCI_NV_1, saved_pci_nv_1); +} +#endif + +int +nouveau_mem_init_agp(struct drm_device *dev) +{ +#if __OS_HAS_AGP + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_agp_info info; + struct drm_agp_mode mode; + int ret; + + if (nouveau_noagp) + return 0; + + nouveau_mem_reset_agp(dev); + + if (!dev->agp->acquired) { + ret = drm_agp_acquire(dev); + if (ret) { + NV_ERROR(dev, "Unable to acquire AGP: %d\n", ret); + return ret; + } + } + + ret = drm_agp_info(dev, &info); + if (ret) { + NV_ERROR(dev, "Unable to get AGP info: %d\n", ret); + return ret; + } + + /* see agp.h for the AGPSTAT_* modes available */ + mode.mode = info.mode; + ret = drm_agp_enable(dev, mode); + if (ret) { + NV_ERROR(dev, "Unable to enable AGP: %d\n", ret); + return ret; + } + + dev_priv->gart_info.type = NOUVEAU_GART_AGP; + dev_priv->gart_info.aper_base = info.aperture_base; + dev_priv->gart_info.aper_size = info.aperture_size; +#endif + return 0; +} + +int +nouveau_mem_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct ttm_bo_device *bdev = &dev_priv->ttm.bdev; + int ret, dma_bits = 32; + + dev_priv->fb_phys = drm_get_resource_start(dev, 1); + dev_priv->gart_info.type = NOUVEAU_GART_NONE; + + if (dev_priv->card_type >= NV_50 && + pci_dma_supported(dev->pdev, DMA_BIT_MASK(40))) + dma_bits = 40; + + ret = pci_set_dma_mask(dev->pdev, DMA_BIT_MASK(dma_bits)); + if (ret) { + NV_ERROR(dev, "Error setting DMA mask: %d\n", ret); + return ret; + } + + ret = nouveau_ttm_global_init(dev_priv); + if (ret) + return ret; + + ret = ttm_bo_device_init(&dev_priv->ttm.bdev, + dev_priv->ttm.bo_global_ref.ref.object, + &nouveau_bo_driver, DRM_FILE_PAGE_OFFSET, + dma_bits <= 32 ? true : false); + if (ret) { + NV_ERROR(dev, "Error initialising bo driver: %d\n", ret); + return ret; + } + + INIT_LIST_HEAD(&dev_priv->ttm.bo_list); + spin_lock_init(&dev_priv->ttm.bo_list_lock); + spin_lock_init(&dev_priv->tile.lock); + + dev_priv->fb_available_size = nouveau_mem_fb_amount(dev); + + dev_priv->fb_mappable_pages = dev_priv->fb_available_size; + if (dev_priv->fb_mappable_pages > drm_get_resource_len(dev, 1)) + dev_priv->fb_mappable_pages = drm_get_resource_len(dev, 1); + dev_priv->fb_mappable_pages >>= PAGE_SHIFT; + + NV_INFO(dev, "%d MiB VRAM\n", (int)(dev_priv->fb_available_size >> 20)); + + /* remove reserved space at end of vram from available amount */ + dev_priv->fb_available_size -= dev_priv->ramin_rsvd_vram; + dev_priv->fb_aper_free = dev_priv->fb_available_size; + + /* mappable vram */ + ret = ttm_bo_init_mm(bdev, TTM_PL_VRAM, + dev_priv->fb_available_size >> PAGE_SHIFT); + if (ret) { + NV_ERROR(dev, "Failed VRAM mm init: %d\n", ret); + return ret; + } + + ret = nouveau_bo_new(dev, NULL, 256*1024, 0, TTM_PL_FLAG_VRAM, + 0, 0, true, true, &dev_priv->vga_ram); + if (ret == 0) + ret = nouveau_bo_pin(dev_priv->vga_ram, TTM_PL_FLAG_VRAM); + if (ret) { + NV_WARN(dev, "failed to reserve VGA memory\n"); + nouveau_bo_ref(NULL, &dev_priv->vga_ram); + } + + /* GART */ +#if !defined(__powerpc__) && !defined(__ia64__) + if (drm_device_is_agp(dev) && dev->agp) { + ret = nouveau_mem_init_agp(dev); + if (ret) + NV_ERROR(dev, "Error initialising AGP: %d\n", ret); + } +#endif + + if (dev_priv->gart_info.type == NOUVEAU_GART_NONE) { + ret = nouveau_sgdma_init(dev); + if (ret) { + NV_ERROR(dev, "Error initialising PCI(E): %d\n", ret); + return ret; + } + } + + NV_INFO(dev, "%d MiB GART (aperture)\n", + (int)(dev_priv->gart_info.aper_size >> 20)); + dev_priv->gart_info.aper_free = dev_priv->gart_info.aper_size; + + ret = ttm_bo_init_mm(bdev, TTM_PL_TT, + dev_priv->gart_info.aper_size >> PAGE_SHIFT); + if (ret) { + NV_ERROR(dev, "Failed TT mm init: %d\n", ret); + return ret; + } + + dev_priv->fb_mtrr = drm_mtrr_add(drm_get_resource_start(dev, 1), + drm_get_resource_len(dev, 1), + DRM_MTRR_WC); + + return 0; +} + + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_fence.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_fence.c @@ -0,0 +1,262 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" + +#include "nouveau_drv.h" +#include "nouveau_dma.h" + +#define USE_REFCNT (dev_priv->card_type >= NV_10) + +struct nouveau_fence { + struct nouveau_channel *channel; + struct kref refcount; + struct list_head entry; + + uint32_t sequence; + bool signalled; +}; + +static inline struct nouveau_fence * +nouveau_fence(void *sync_obj) +{ + return (struct nouveau_fence *)sync_obj; +} + +static void +nouveau_fence_del(struct kref *ref) +{ + struct nouveau_fence *fence = + container_of(ref, struct nouveau_fence, refcount); + + kfree(fence); +} + +void +nouveau_fence_update(struct nouveau_channel *chan) +{ + struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct list_head *entry, *tmp; + struct nouveau_fence *fence; + uint32_t sequence; + + if (USE_REFCNT) + sequence = nvchan_rd32(chan, 0x48); + else + sequence = chan->fence.last_sequence_irq; + + if (chan->fence.sequence_ack == sequence) + return; + chan->fence.sequence_ack = sequence; + + list_for_each_safe(entry, tmp, &chan->fence.pending) { + fence = list_entry(entry, struct nouveau_fence, entry); + + sequence = fence->sequence; + fence->signalled = true; + list_del(&fence->entry); + kref_put(&fence->refcount, nouveau_fence_del); + + if (sequence == chan->fence.sequence_ack) + break; + } +} + +int +nouveau_fence_new(struct nouveau_channel *chan, struct nouveau_fence **pfence, + bool emit) +{ + struct nouveau_fence *fence; + int ret = 0; + + fence = kzalloc(sizeof(*fence), GFP_KERNEL); + if (!fence) + return -ENOMEM; + kref_init(&fence->refcount); + fence->channel = chan; + + if (emit) + ret = nouveau_fence_emit(fence); + + if (ret) + nouveau_fence_unref((void *)&fence); + *pfence = fence; + return ret; +} + +struct nouveau_channel * +nouveau_fence_channel(struct nouveau_fence *fence) +{ + return fence ? fence->channel : NULL; +} + +int +nouveau_fence_emit(struct nouveau_fence *fence) +{ + struct drm_nouveau_private *dev_priv = fence->channel->dev->dev_private; + struct nouveau_channel *chan = fence->channel; + unsigned long flags; + int ret; + + ret = RING_SPACE(chan, 2); + if (ret) + return ret; + + if (unlikely(chan->fence.sequence == chan->fence.sequence_ack - 1)) { + spin_lock_irqsave(&chan->fence.lock, flags); + nouveau_fence_update(chan); + spin_unlock_irqrestore(&chan->fence.lock, flags); + + BUG_ON(chan->fence.sequence == + chan->fence.sequence_ack - 1); + } + + fence->sequence = ++chan->fence.sequence; + + kref_get(&fence->refcount); + spin_lock_irqsave(&chan->fence.lock, flags); + list_add_tail(&fence->entry, &chan->fence.pending); + spin_unlock_irqrestore(&chan->fence.lock, flags); + + BEGIN_RING(chan, NvSubSw, USE_REFCNT ? 0x0050 : 0x0150, 1); + OUT_RING(chan, fence->sequence); + FIRE_RING(chan); + + return 0; +} + +void +nouveau_fence_unref(void **sync_obj) +{ + struct nouveau_fence *fence = nouveau_fence(*sync_obj); + + if (fence) + kref_put(&fence->refcount, nouveau_fence_del); + *sync_obj = NULL; +} + +void * +nouveau_fence_ref(void *sync_obj) +{ + struct nouveau_fence *fence = nouveau_fence(sync_obj); + + kref_get(&fence->refcount); + return sync_obj; +} + +bool +nouveau_fence_signalled(void *sync_obj, void *sync_arg) +{ + struct nouveau_fence *fence = nouveau_fence(sync_obj); + struct nouveau_channel *chan = fence->channel; + unsigned long flags; + + if (fence->signalled) + return true; + + spin_lock_irqsave(&chan->fence.lock, flags); + nouveau_fence_update(chan); + spin_unlock_irqrestore(&chan->fence.lock, flags); + return fence->signalled; +} + +int +nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr) +{ + unsigned long timeout = jiffies + (3 * DRM_HZ); + int ret = 0; + + __set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); + + while (1) { + if (nouveau_fence_signalled(sync_obj, sync_arg)) + break; + + if (time_after_eq(jiffies, timeout)) { + ret = -EBUSY; + break; + } + + if (lazy) + schedule_timeout(1); + + if (intr && signal_pending(current)) { + ret = -ERESTARTSYS; + break; + } + } + + __set_current_state(TASK_RUNNING); + + return ret; +} + +int +nouveau_fence_flush(void *sync_obj, void *sync_arg) +{ + return 0; +} + +void +nouveau_fence_handler(struct drm_device *dev, int channel) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = NULL; + + if (channel >= 0 && channel < dev_priv->engine.fifo.channels) + chan = dev_priv->fifos[channel]; + + if (chan) { + spin_lock_irq(&chan->fence.lock); + nouveau_fence_update(chan); + spin_unlock_irq(&chan->fence.lock); + } +} + +int +nouveau_fence_init(struct nouveau_channel *chan) +{ + INIT_LIST_HEAD(&chan->fence.pending); + spin_lock_init(&chan->fence.lock); + return 0; +} + +void +nouveau_fence_fini(struct nouveau_channel *chan) +{ + struct list_head *entry, *tmp; + struct nouveau_fence *fence; + + list_for_each_safe(entry, tmp, &chan->fence.pending) { + fence = list_entry(entry, struct nouveau_fence, entry); + + fence->signalled = true; + list_del(&fence->entry); + kref_put(&fence->refcount, nouveau_fence_del); + } +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv40_fb.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv40_fb.c @@ -0,0 +1,75 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +void +nv40_fb_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t limit = max(1u, addr + size) - 1; + + if (pitch) + addr |= 1; + + switch (dev_priv->chipset) { + case 0x40: + nv_wr32(dev, NV10_PFB_TLIMIT(i), limit); + nv_wr32(dev, NV10_PFB_TSIZE(i), pitch); + nv_wr32(dev, NV10_PFB_TILE(i), addr); + break; + + default: + nv_wr32(dev, NV40_PFB_TLIMIT(i), limit); + nv_wr32(dev, NV40_PFB_TSIZE(i), pitch); + nv_wr32(dev, NV40_PFB_TILE(i), addr); + break; + } +} + +int +nv40_fb_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + uint32_t tmp; + int i; + + /* This is strictly a NV4x register (don't know about NV5x). */ + /* The blob sets these to all kinds of values, and they mess up our setup. */ + /* I got value 0x52802 instead. For some cards the blob even sets it back to 0x1. */ + /* Note: the blob doesn't read this value, so i'm pretty sure this is safe for all cards. */ + /* Any idea what this is? */ + nv_wr32(dev, NV40_PFB_UNK_800, 0x1); + + switch (dev_priv->chipset) { + case 0x40: + case 0x45: + tmp = nv_rd32(dev, NV10_PFB_CLOSE_PAGE2); + nv_wr32(dev, NV10_PFB_CLOSE_PAGE2, tmp & ~(1 << 15)); + pfb->num_tiles = NV10_PFB_TILE__SIZE; + break; + case 0x46: /* G72 */ + case 0x47: /* G70 */ + case 0x49: /* G71 */ + case 0x4b: /* G73 */ + case 0x4c: /* C51 (G7X version) */ + pfb->num_tiles = NV40_PFB_TILE__SIZE_1; + break; + default: + pfb->num_tiles = NV40_PFB_TILE__SIZE_0; + break; + } + + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) + pfb->set_region_tiling(dev, i, 0, 0, 0); + + return 0; +} + +void +nv40_fb_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_mc.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_mc.c @@ -0,0 +1,20 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +int +nv04_mc_init(struct drm_device *dev) +{ + /* Power up everything, resetting each individual unit will + * be done later if needed. + */ + + nv_wr32(dev, NV03_PMC_ENABLE, 0xFFFFFFFF); + return 0; +} + +void +nv04_mc_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv17_tv.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv17_tv.h @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NV17_TV_H__ +#define __NV17_TV_H__ + +struct nv17_tv_state { + uint8_t tv_enc[0x40]; + + uint32_t hfilter[4][7]; + uint32_t hfilter2[4][7]; + uint32_t vfilter[4][7]; + + uint32_t ptv_200; + uint32_t ptv_204; + uint32_t ptv_208; + uint32_t ptv_20c; + uint32_t ptv_304; + uint32_t ptv_500; + uint32_t ptv_504; + uint32_t ptv_508; + uint32_t ptv_600; + uint32_t ptv_604; + uint32_t ptv_608; + uint32_t ptv_60c; + uint32_t ptv_610; + uint32_t ptv_614; +}; + +enum nv17_tv_norm{ + TV_NORM_PAL, + TV_NORM_PAL_M, + TV_NORM_PAL_N, + TV_NORM_PAL_NC, + TV_NORM_NTSC_M, + TV_NORM_NTSC_J, + NUM_LD_TV_NORMS, + TV_NORM_HD480I = NUM_LD_TV_NORMS, + TV_NORM_HD480P, + TV_NORM_HD576I, + TV_NORM_HD576P, + TV_NORM_HD720P, + TV_NORM_HD1080I, + NUM_TV_NORMS +}; + +struct nv17_tv_encoder { + struct nouveau_encoder base; + + struct nv17_tv_state state; + struct nv17_tv_state saved_state; + + int overscan; + int flicker; + int saturation; + int hue; + enum nv17_tv_norm tv_norm; + int subconnector; + int select_subconnector; + uint32_t pin_mask; +}; +#define to_tv_enc(x) container_of(nouveau_encoder(x), \ + struct nv17_tv_encoder, base) + +extern char *nv17_tv_norm_names[NUM_TV_NORMS]; + +extern struct nv17_tv_norm_params { + enum { + TV_ENC_MODE, + CTV_ENC_MODE, + } kind; + + union { + struct { + int hdisplay; + int vdisplay; + int vrefresh; /* mHz */ + + uint8_t tv_enc[0x40]; + } tv_enc_mode; + + struct { + struct drm_display_mode mode; + + uint32_t ctv_regs[38]; + } ctv_enc_mode; + }; + +} nv17_tv_norms[NUM_TV_NORMS]; +#define get_tv_norm(enc) (&nv17_tv_norms[to_tv_enc(enc)->tv_norm]) + +extern struct drm_display_mode nv17_tv_modes[]; + +static inline int interpolate(int y0, int y1, int y2, int x) +{ + return y1 + (x < 50 ? y1 - y0 : y2 - y1) * (x - 50) / 50; +} + +void nv17_tv_state_save(struct drm_device *dev, struct nv17_tv_state *state); +void nv17_tv_state_load(struct drm_device *dev, struct nv17_tv_state *state); +void nv17_tv_update_properties(struct drm_encoder *encoder); +void nv17_tv_update_rescaler(struct drm_encoder *encoder); +void nv17_ctv_update_rescaler(struct drm_encoder *encoder); + +/* TV hardware access functions */ + +static inline void nv_write_ptv(struct drm_device *dev, uint32_t reg, uint32_t val) +{ + nv_wr32(dev, reg, val); +} + +static inline uint32_t nv_read_ptv(struct drm_device *dev, uint32_t reg) +{ + return nv_rd32(dev, reg); +} + +static inline void nv_write_tv_enc(struct drm_device *dev, uint8_t reg, uint8_t val) +{ + nv_write_ptv(dev, NV_PTV_TV_INDEX, reg); + nv_write_ptv(dev, NV_PTV_TV_DATA, val); +} + +static inline uint8_t nv_read_tv_enc(struct drm_device *dev, uint8_t reg) +{ + nv_write_ptv(dev, NV_PTV_TV_INDEX, reg); + return nv_read_ptv(dev, NV_PTV_TV_DATA); +} + +#define nv_load_ptv(dev, state, reg) nv_write_ptv(dev, NV_PTV_OFFSET + 0x##reg, state->ptv_##reg) +#define nv_save_ptv(dev, state, reg) state->ptv_##reg = nv_read_ptv(dev, NV_PTV_OFFSET + 0x##reg) +#define nv_load_tv_enc(dev, state, reg) nv_write_tv_enc(dev, 0x##reg, state->tv_enc[0x##reg]) + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_dma.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_dma.h @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NOUVEAU_DMA_H__ +#define __NOUVEAU_DMA_H__ + +#ifndef NOUVEAU_DMA_DEBUG +#define NOUVEAU_DMA_DEBUG 0 +#endif + +/* + * There's a hw race condition where you can't jump to your PUT offset, + * to avoid this we jump to offset + SKIPS and fill the difference with + * NOPs. + * + * xf86-video-nv configures the DMA fetch size to 32 bytes, and uses + * a SKIPS value of 8. Lets assume that the race condition is to do + * with writing into the fetch area, we configure a fetch size of 128 + * bytes so we need a larger SKIPS value. + */ +#define NOUVEAU_DMA_SKIPS (128 / 4) + +/* Hardcoded object assignments to subchannels (subchannel id). */ +enum { + NvSubM2MF = 0, + NvSubSw = 1, + NvSub2D = 2, + NvSubCtxSurf2D = 2, + NvSubGdiRect = 3, + NvSubImageBlit = 4 +}; + +/* Object handles. */ +enum { + NvM2MF = 0x80000001, + NvDmaFB = 0x80000002, + NvDmaTT = 0x80000003, + NvDmaVRAM = 0x80000004, + NvDmaGART = 0x80000005, + NvNotify0 = 0x80000006, + Nv2D = 0x80000007, + NvCtxSurf2D = 0x80000008, + NvRop = 0x80000009, + NvImagePatt = 0x8000000a, + NvClipRect = 0x8000000b, + NvGdiRect = 0x8000000c, + NvImageBlit = 0x8000000d, + NvSw = 0x8000000e, + + /* G80+ display objects */ + NvEvoVRAM = 0x01000000, + NvEvoFB16 = 0x01000001, + NvEvoFB32 = 0x01000002 +}; + +#define NV_MEMORY_TO_MEMORY_FORMAT 0x00000039 +#define NV_MEMORY_TO_MEMORY_FORMAT_NAME 0x00000000 +#define NV_MEMORY_TO_MEMORY_FORMAT_SET_REF 0x00000050 +#define NV_MEMORY_TO_MEMORY_FORMAT_NOP 0x00000100 +#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY 0x00000104 +#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY_STYLE_WRITE 0x00000000 +#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY_STYLE_WRITE_LE_AWAKEN 0x00000001 +#define NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY 0x00000180 +#define NV_MEMORY_TO_MEMORY_FORMAT_DMA_SOURCE 0x00000184 +#define NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN 0x0000030c + +#define NV50_MEMORY_TO_MEMORY_FORMAT 0x00005039 +#define NV50_MEMORY_TO_MEMORY_FORMAT_UNK200 0x00000200 +#define NV50_MEMORY_TO_MEMORY_FORMAT_UNK21C 0x0000021c +#define NV50_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN_HIGH 0x00000238 +#define NV50_MEMORY_TO_MEMORY_FORMAT_OFFSET_OUT_HIGH 0x0000023c + +static __must_check inline int +RING_SPACE(struct nouveau_channel *chan, int size) +{ + if (chan->dma.free < size) { + int ret; + + ret = nouveau_dma_wait(chan, size); + if (ret) + return ret; + } + + chan->dma.free -= size; + return 0; +} + +static inline void +OUT_RING(struct nouveau_channel *chan, int data) +{ + if (NOUVEAU_DMA_DEBUG) { + NV_INFO(chan->dev, "Ch%d/0x%08x: 0x%08x\n", + chan->id, chan->dma.cur << 2, data); + } + + nouveau_bo_wr32(chan->pushbuf_bo, chan->dma.cur++, data); +} + +extern void +OUT_RINGp(struct nouveau_channel *chan, const void *data, unsigned nr_dwords); + +static inline void +BEGIN_RING(struct nouveau_channel *chan, int subc, int mthd, int size) +{ + OUT_RING(chan, (subc << 13) | (size << 18) | mthd); +} + +#define WRITE_PUT(val) do { \ + DRM_MEMORYBARRIER(); \ + nouveau_bo_rd32(chan->pushbuf_bo, 0); \ + nvchan_wr32(chan, chan->user_put, ((val) << 2) + chan->pushbuf_base); \ +} while (0) + +static inline void +FIRE_RING(struct nouveau_channel *chan) +{ + if (NOUVEAU_DMA_DEBUG) { + NV_INFO(chan->dev, "Ch%d/0x%08x: PUSH!\n", + chan->id, chan->dma.cur << 2); + } + + if (chan->dma.cur == chan->dma.put) + return; + chan->accel_done = true; + + WRITE_PUT(chan->dma.cur); + chan->dma.put = chan->dma.cur; +} + +static inline void +WIND_RING(struct nouveau_channel *chan) +{ + chan->dma.cur = chan->dma.put; +} + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_fifo.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_fifo.c @@ -0,0 +1,495 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +struct nv50_fifo_priv { + struct nouveau_gpuobj_ref *thingo[2]; + int cur_thingo; +}; + +#define IS_G80 ((dev_priv->chipset & 0xf0) == 0x50) + +static void +nv50_fifo_init_thingo(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_fifo_priv *priv = dev_priv->engine.fifo.priv; + struct nouveau_gpuobj_ref *cur; + int i, nr; + + NV_DEBUG(dev, "\n"); + + cur = priv->thingo[priv->cur_thingo]; + priv->cur_thingo = !priv->cur_thingo; + + /* We never schedule channel 0 or 127 */ + dev_priv->engine.instmem.prepare_access(dev, true); + for (i = 1, nr = 0; i < 127; i++) { + if (dev_priv->fifos[i] && dev_priv->fifos[i]->ramfc) + nv_wo32(dev, cur->gpuobj, nr++, i); + } + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, 0x32f4, cur->instance >> 12); + nv_wr32(dev, 0x32ec, nr); + nv_wr32(dev, 0x2500, 0x101); +} + +static int +nv50_fifo_channel_enable(struct drm_device *dev, int channel, bool nt) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->fifos[channel]; + uint32_t inst; + + NV_DEBUG(dev, "ch%d\n", channel); + + if (!chan->ramfc) + return -EINVAL; + + if (IS_G80) + inst = chan->ramfc->instance >> 12; + else + inst = chan->ramfc->instance >> 8; + nv_wr32(dev, NV50_PFIFO_CTX_TABLE(channel), + inst | NV50_PFIFO_CTX_TABLE_CHANNEL_ENABLED); + + if (!nt) + nv50_fifo_init_thingo(dev); + return 0; +} + +static void +nv50_fifo_channel_disable(struct drm_device *dev, int channel, bool nt) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t inst; + + NV_DEBUG(dev, "ch%d, nt=%d\n", channel, nt); + + if (IS_G80) + inst = NV50_PFIFO_CTX_TABLE_INSTANCE_MASK_G80; + else + inst = NV50_PFIFO_CTX_TABLE_INSTANCE_MASK_G84; + nv_wr32(dev, NV50_PFIFO_CTX_TABLE(channel), inst); + + if (!nt) + nv50_fifo_init_thingo(dev); +} + +static void +nv50_fifo_init_reset(struct drm_device *dev) +{ + uint32_t pmc_e = NV_PMC_ENABLE_PFIFO; + + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & ~pmc_e); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | pmc_e); +} + +static void +nv50_fifo_init_intr(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, NV03_PFIFO_INTR_0, 0xFFFFFFFF); + nv_wr32(dev, NV03_PFIFO_INTR_EN_0, 0xFFFFFFFF); +} + +static void +nv50_fifo_init_context_table(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int i; + + NV_DEBUG(dev, "\n"); + + for (i = 0; i < NV50_PFIFO_CTX_TABLE__SIZE; i++) { + if (dev_priv->fifos[i]) + nv50_fifo_channel_enable(dev, i, true); + else + nv50_fifo_channel_disable(dev, i, true); + } + + nv50_fifo_init_thingo(dev); +} + +static void +nv50_fifo_init_regs__nv(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, 0x250c, 0x6f3cfc34); +} + +static void +nv50_fifo_init_regs(struct drm_device *dev) +{ + NV_DEBUG(dev, "\n"); + + nv_wr32(dev, 0x2500, 0); + nv_wr32(dev, 0x3250, 0); + nv_wr32(dev, 0x3220, 0); + nv_wr32(dev, 0x3204, 0); + nv_wr32(dev, 0x3210, 0); + nv_wr32(dev, 0x3270, 0); + + /* Enable dummy channels setup by nv50_instmem.c */ + nv50_fifo_channel_enable(dev, 0, true); + nv50_fifo_channel_enable(dev, 127, true); +} + +int +nv50_fifo_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_fifo_priv *priv; + int ret; + + NV_DEBUG(dev, "\n"); + + priv = dev_priv->engine.fifo.priv; + if (priv) { + priv->cur_thingo = !priv->cur_thingo; + goto just_reset; + } + + priv = kzalloc(sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + dev_priv->engine.fifo.priv = priv; + + ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 128*4, 0x1000, + NVOBJ_FLAG_ZERO_ALLOC, &priv->thingo[0]); + if (ret) { + NV_ERROR(dev, "error creating thingo0: %d\n", ret); + return ret; + } + + ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 128*4, 0x1000, + NVOBJ_FLAG_ZERO_ALLOC, &priv->thingo[1]); + if (ret) { + NV_ERROR(dev, "error creating thingo1: %d\n", ret); + return ret; + } + +just_reset: + nv50_fifo_init_reset(dev); + nv50_fifo_init_intr(dev); + nv50_fifo_init_context_table(dev); + nv50_fifo_init_regs__nv(dev); + nv50_fifo_init_regs(dev); + dev_priv->engine.fifo.enable(dev); + dev_priv->engine.fifo.reassign(dev, true); + + return 0; +} + +void +nv50_fifo_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_fifo_priv *priv = dev_priv->engine.fifo.priv; + + NV_DEBUG(dev, "\n"); + + if (!priv) + return; + + nouveau_gpuobj_ref_del(dev, &priv->thingo[0]); + nouveau_gpuobj_ref_del(dev, &priv->thingo[1]); + + dev_priv->engine.fifo.priv = NULL; + kfree(priv); +} + +int +nv50_fifo_channel_id(struct drm_device *dev) +{ + return nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH1) & + NV50_PFIFO_CACHE1_PUSH1_CHID_MASK; +} + +int +nv50_fifo_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *ramfc = NULL; + int ret; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + if (IS_G80) { + uint32_t ramin_poffset = chan->ramin->gpuobj->im_pramin->start; + uint32_t ramin_voffset = chan->ramin->gpuobj->im_backing_start; + + ret = nouveau_gpuobj_new_fake(dev, ramin_poffset, ramin_voffset, + 0x100, NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, &ramfc, + &chan->ramfc); + if (ret) + return ret; + + ret = nouveau_gpuobj_new_fake(dev, ramin_poffset + 0x0400, + ramin_voffset + 0x0400, 4096, + 0, NULL, &chan->cache); + if (ret) + return ret; + } else { + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, 0x100, 256, + NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, + &chan->ramfc); + if (ret) + return ret; + ramfc = chan->ramfc->gpuobj; + + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, 4096, 1024, + 0, &chan->cache); + if (ret) + return ret; + } + + dev_priv->engine.instmem.prepare_access(dev, true); + + nv_wo32(dev, ramfc, 0x08/4, chan->pushbuf_base); + nv_wo32(dev, ramfc, 0x10/4, chan->pushbuf_base); + nv_wo32(dev, ramfc, 0x48/4, chan->pushbuf->instance >> 4); + nv_wo32(dev, ramfc, 0x80/4, (0xc << 24) | (chan->ramht->instance >> 4)); + nv_wo32(dev, ramfc, 0x3c/4, 0x00086078); + nv_wo32(dev, ramfc, 0x44/4, 0x2101ffff); + nv_wo32(dev, ramfc, 0x60/4, 0x7fffffff); + nv_wo32(dev, ramfc, 0x40/4, 0x00000000); + nv_wo32(dev, ramfc, 0x7c/4, 0x30000001); + nv_wo32(dev, ramfc, 0x78/4, 0x00000000); + nv_wo32(dev, ramfc, 0x4c/4, 0xffffffff); + + if (!IS_G80) { + nv_wo32(dev, chan->ramin->gpuobj, 0, chan->id); + nv_wo32(dev, chan->ramin->gpuobj, 1, + chan->ramfc->instance >> 8); + + nv_wo32(dev, ramfc, 0x88/4, chan->cache->instance >> 10); + nv_wo32(dev, ramfc, 0x98/4, chan->ramin->instance >> 12); + } + + dev_priv->engine.instmem.finish_access(dev); + + ret = nv50_fifo_channel_enable(dev, chan->id, false); + if (ret) { + NV_ERROR(dev, "error enabling ch%d: %d\n", chan->id, ret); + nouveau_gpuobj_ref_del(dev, &chan->ramfc); + return ret; + } + + return 0; +} + +void +nv50_fifo_destroy_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct nouveau_gpuobj_ref *ramfc = chan->ramfc; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + /* This will ensure the channel is seen as disabled. */ + chan->ramfc = NULL; + nv50_fifo_channel_disable(dev, chan->id, false); + + /* Dummy channel, also used on ch 127 */ + if (chan->id == 0) + nv50_fifo_channel_disable(dev, 127, false); + + nouveau_gpuobj_ref_del(dev, &ramfc); + nouveau_gpuobj_ref_del(dev, &chan->cache); +} + +int +nv50_fifo_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *ramfc = chan->ramfc->gpuobj; + struct nouveau_gpuobj *cache = chan->cache->gpuobj; + int ptr, cnt; + + NV_DEBUG(dev, "ch%d\n", chan->id); + + dev_priv->engine.instmem.prepare_access(dev, false); + + nv_wr32(dev, 0x3330, nv_ro32(dev, ramfc, 0x00/4)); + nv_wr32(dev, 0x3334, nv_ro32(dev, ramfc, 0x04/4)); + nv_wr32(dev, 0x3240, nv_ro32(dev, ramfc, 0x08/4)); + nv_wr32(dev, 0x3320, nv_ro32(dev, ramfc, 0x0c/4)); + nv_wr32(dev, 0x3244, nv_ro32(dev, ramfc, 0x10/4)); + nv_wr32(dev, 0x3328, nv_ro32(dev, ramfc, 0x14/4)); + nv_wr32(dev, 0x3368, nv_ro32(dev, ramfc, 0x18/4)); + nv_wr32(dev, 0x336c, nv_ro32(dev, ramfc, 0x1c/4)); + nv_wr32(dev, 0x3370, nv_ro32(dev, ramfc, 0x20/4)); + nv_wr32(dev, 0x3374, nv_ro32(dev, ramfc, 0x24/4)); + nv_wr32(dev, 0x3378, nv_ro32(dev, ramfc, 0x28/4)); + nv_wr32(dev, 0x337c, nv_ro32(dev, ramfc, 0x2c/4)); + nv_wr32(dev, 0x3228, nv_ro32(dev, ramfc, 0x30/4)); + nv_wr32(dev, 0x3364, nv_ro32(dev, ramfc, 0x34/4)); + nv_wr32(dev, 0x32a0, nv_ro32(dev, ramfc, 0x38/4)); + nv_wr32(dev, 0x3224, nv_ro32(dev, ramfc, 0x3c/4)); + nv_wr32(dev, 0x324c, nv_ro32(dev, ramfc, 0x40/4)); + nv_wr32(dev, 0x2044, nv_ro32(dev, ramfc, 0x44/4)); + nv_wr32(dev, 0x322c, nv_ro32(dev, ramfc, 0x48/4)); + nv_wr32(dev, 0x3234, nv_ro32(dev, ramfc, 0x4c/4)); + nv_wr32(dev, 0x3340, nv_ro32(dev, ramfc, 0x50/4)); + nv_wr32(dev, 0x3344, nv_ro32(dev, ramfc, 0x54/4)); + nv_wr32(dev, 0x3280, nv_ro32(dev, ramfc, 0x58/4)); + nv_wr32(dev, 0x3254, nv_ro32(dev, ramfc, 0x5c/4)); + nv_wr32(dev, 0x3260, nv_ro32(dev, ramfc, 0x60/4)); + nv_wr32(dev, 0x3264, nv_ro32(dev, ramfc, 0x64/4)); + nv_wr32(dev, 0x3268, nv_ro32(dev, ramfc, 0x68/4)); + nv_wr32(dev, 0x326c, nv_ro32(dev, ramfc, 0x6c/4)); + nv_wr32(dev, 0x32e4, nv_ro32(dev, ramfc, 0x70/4)); + nv_wr32(dev, 0x3248, nv_ro32(dev, ramfc, 0x74/4)); + nv_wr32(dev, 0x2088, nv_ro32(dev, ramfc, 0x78/4)); + nv_wr32(dev, 0x2058, nv_ro32(dev, ramfc, 0x7c/4)); + nv_wr32(dev, 0x2210, nv_ro32(dev, ramfc, 0x80/4)); + + cnt = nv_ro32(dev, ramfc, 0x84/4); + for (ptr = 0; ptr < cnt; ptr++) { + nv_wr32(dev, NV40_PFIFO_CACHE1_METHOD(ptr), + nv_ro32(dev, cache, (ptr * 2) + 0)); + nv_wr32(dev, NV40_PFIFO_CACHE1_DATA(ptr), + nv_ro32(dev, cache, (ptr * 2) + 1)); + } + nv_wr32(dev, NV03_PFIFO_CACHE1_PUT, cnt << 2); + nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0); + + /* guessing that all the 0x34xx regs aren't on NV50 */ + if (!IS_G80) { + nv_wr32(dev, 0x340c, nv_ro32(dev, ramfc, 0x88/4)); + nv_wr32(dev, 0x3400, nv_ro32(dev, ramfc, 0x8c/4)); + nv_wr32(dev, 0x3404, nv_ro32(dev, ramfc, 0x90/4)); + nv_wr32(dev, 0x3408, nv_ro32(dev, ramfc, 0x94/4)); + nv_wr32(dev, 0x3410, nv_ro32(dev, ramfc, 0x98/4)); + } + + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, chan->id | (1<<16)); + return 0; +} + +int +nv50_fifo_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_gpuobj *ramfc, *cache; + struct nouveau_channel *chan = NULL; + int chid, get, put, ptr; + + NV_DEBUG(dev, "\n"); + + chid = pfifo->channel_id(dev); + if (chid < 1 || chid >= dev_priv->engine.fifo.channels - 1) + return 0; + + chan = dev_priv->fifos[chid]; + if (!chan) { + NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); + return -EINVAL; + } + NV_DEBUG(dev, "ch%d\n", chan->id); + ramfc = chan->ramfc->gpuobj; + cache = chan->cache->gpuobj; + + dev_priv->engine.instmem.prepare_access(dev, true); + + nv_wo32(dev, ramfc, 0x00/4, nv_rd32(dev, 0x3330)); + nv_wo32(dev, ramfc, 0x04/4, nv_rd32(dev, 0x3334)); + nv_wo32(dev, ramfc, 0x08/4, nv_rd32(dev, 0x3240)); + nv_wo32(dev, ramfc, 0x0c/4, nv_rd32(dev, 0x3320)); + nv_wo32(dev, ramfc, 0x10/4, nv_rd32(dev, 0x3244)); + nv_wo32(dev, ramfc, 0x14/4, nv_rd32(dev, 0x3328)); + nv_wo32(dev, ramfc, 0x18/4, nv_rd32(dev, 0x3368)); + nv_wo32(dev, ramfc, 0x1c/4, nv_rd32(dev, 0x336c)); + nv_wo32(dev, ramfc, 0x20/4, nv_rd32(dev, 0x3370)); + nv_wo32(dev, ramfc, 0x24/4, nv_rd32(dev, 0x3374)); + nv_wo32(dev, ramfc, 0x28/4, nv_rd32(dev, 0x3378)); + nv_wo32(dev, ramfc, 0x2c/4, nv_rd32(dev, 0x337c)); + nv_wo32(dev, ramfc, 0x30/4, nv_rd32(dev, 0x3228)); + nv_wo32(dev, ramfc, 0x34/4, nv_rd32(dev, 0x3364)); + nv_wo32(dev, ramfc, 0x38/4, nv_rd32(dev, 0x32a0)); + nv_wo32(dev, ramfc, 0x3c/4, nv_rd32(dev, 0x3224)); + nv_wo32(dev, ramfc, 0x40/4, nv_rd32(dev, 0x324c)); + nv_wo32(dev, ramfc, 0x44/4, nv_rd32(dev, 0x2044)); + nv_wo32(dev, ramfc, 0x48/4, nv_rd32(dev, 0x322c)); + nv_wo32(dev, ramfc, 0x4c/4, nv_rd32(dev, 0x3234)); + nv_wo32(dev, ramfc, 0x50/4, nv_rd32(dev, 0x3340)); + nv_wo32(dev, ramfc, 0x54/4, nv_rd32(dev, 0x3344)); + nv_wo32(dev, ramfc, 0x58/4, nv_rd32(dev, 0x3280)); + nv_wo32(dev, ramfc, 0x5c/4, nv_rd32(dev, 0x3254)); + nv_wo32(dev, ramfc, 0x60/4, nv_rd32(dev, 0x3260)); + nv_wo32(dev, ramfc, 0x64/4, nv_rd32(dev, 0x3264)); + nv_wo32(dev, ramfc, 0x68/4, nv_rd32(dev, 0x3268)); + nv_wo32(dev, ramfc, 0x6c/4, nv_rd32(dev, 0x326c)); + nv_wo32(dev, ramfc, 0x70/4, nv_rd32(dev, 0x32e4)); + nv_wo32(dev, ramfc, 0x74/4, nv_rd32(dev, 0x3248)); + nv_wo32(dev, ramfc, 0x78/4, nv_rd32(dev, 0x2088)); + nv_wo32(dev, ramfc, 0x7c/4, nv_rd32(dev, 0x2058)); + nv_wo32(dev, ramfc, 0x80/4, nv_rd32(dev, 0x2210)); + + put = (nv_rd32(dev, NV03_PFIFO_CACHE1_PUT) & 0x7ff) >> 2; + get = (nv_rd32(dev, NV03_PFIFO_CACHE1_GET) & 0x7ff) >> 2; + ptr = 0; + while (put != get) { + nv_wo32(dev, cache, ptr++, + nv_rd32(dev, NV40_PFIFO_CACHE1_METHOD(get))); + nv_wo32(dev, cache, ptr++, + nv_rd32(dev, NV40_PFIFO_CACHE1_DATA(get))); + get = (get + 1) & 0x1ff; + } + + /* guessing that all the 0x34xx regs aren't on NV50 */ + if (!IS_G80) { + nv_wo32(dev, ramfc, 0x84/4, ptr >> 1); + nv_wo32(dev, ramfc, 0x88/4, nv_rd32(dev, 0x340c)); + nv_wo32(dev, ramfc, 0x8c/4, nv_rd32(dev, 0x3400)); + nv_wo32(dev, ramfc, 0x90/4, nv_rd32(dev, 0x3404)); + nv_wo32(dev, ramfc, 0x94/4, nv_rd32(dev, 0x3408)); + nv_wo32(dev, ramfc, 0x98/4, nv_rd32(dev, 0x3410)); + } + + dev_priv->engine.instmem.finish_access(dev); + + /*XXX: probably reload ch127 (NULL) state back too */ + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, 127); + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv20_graph.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv20_graph.c @@ -0,0 +1,775 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +/* + * NV20 + * ----- + * There are 3 families : + * NV20 is 0x10de:0x020* + * NV25/28 is 0x10de:0x025* / 0x10de:0x028* + * NV2A is 0x10de:0x02A0 + * + * NV30 + * ----- + * There are 3 families : + * NV30/31 is 0x10de:0x030* / 0x10de:0x031* + * NV34 is 0x10de:0x032* + * NV35/36 is 0x10de:0x033* / 0x10de:0x034* + * + * Not seen in the wild, no dumps (probably NV35) : + * NV37 is 0x10de:0x00fc, 0x10de:0x00fd + * NV38 is 0x10de:0x0333, 0x10de:0x00fe + * + */ + +#define NV20_GRCTX_SIZE (3580*4) +#define NV25_GRCTX_SIZE (3529*4) +#define NV2A_GRCTX_SIZE (3500*4) + +#define NV30_31_GRCTX_SIZE (24392) +#define NV34_GRCTX_SIZE (18140) +#define NV35_36_GRCTX_SIZE (22396) + +static void +nv20_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + int i; + + nv_wo32(dev, ctx, 0x033c/4, 0xffff0000); + nv_wo32(dev, ctx, 0x03a0/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x03a4/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x047c/4, 0x00000101); + nv_wo32(dev, ctx, 0x0490/4, 0x00000111); + nv_wo32(dev, ctx, 0x04a8/4, 0x44400000); + for (i = 0x04d4; i <= 0x04e0; i += 4) + nv_wo32(dev, ctx, i/4, 0x00030303); + for (i = 0x04f4; i <= 0x0500; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080000); + for (i = 0x050c; i <= 0x0518; i += 4) + nv_wo32(dev, ctx, i/4, 0x01012000); + for (i = 0x051c; i <= 0x0528; i += 4) + nv_wo32(dev, ctx, i/4, 0x000105b8); + for (i = 0x052c; i <= 0x0538; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080008); + for (i = 0x055c; i <= 0x0598; i += 4) + nv_wo32(dev, ctx, i/4, 0x07ff0000); + nv_wo32(dev, ctx, 0x05a4/4, 0x4b7fffff); + nv_wo32(dev, ctx, 0x05fc/4, 0x00000001); + nv_wo32(dev, ctx, 0x0604/4, 0x00004000); + nv_wo32(dev, ctx, 0x0610/4, 0x00000001); + nv_wo32(dev, ctx, 0x0618/4, 0x00040000); + nv_wo32(dev, ctx, 0x061c/4, 0x00010000); + for (i = 0x1c1c; i <= 0x248c; i += 16) { + nv_wo32(dev, ctx, (i + 0)/4, 0x10700ff9); + nv_wo32(dev, ctx, (i + 4)/4, 0x0436086c); + nv_wo32(dev, ctx, (i + 8)/4, 0x000c001b); + } + nv_wo32(dev, ctx, 0x281c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2830/4, 0x3f800000); + nv_wo32(dev, ctx, 0x285c/4, 0x40000000); + nv_wo32(dev, ctx, 0x2860/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2864/4, 0x3f000000); + nv_wo32(dev, ctx, 0x286c/4, 0x40000000); + nv_wo32(dev, ctx, 0x2870/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2878/4, 0xbf800000); + nv_wo32(dev, ctx, 0x2880/4, 0xbf800000); + nv_wo32(dev, ctx, 0x34a4/4, 0x000fe000); + nv_wo32(dev, ctx, 0x3530/4, 0x000003f8); + nv_wo32(dev, ctx, 0x3540/4, 0x002fe000); + for (i = 0x355c; i <= 0x3578; i += 4) + nv_wo32(dev, ctx, i/4, 0x001c527c); +} + +static void +nv25_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + int i; + + nv_wo32(dev, ctx, 0x035c/4, 0xffff0000); + nv_wo32(dev, ctx, 0x03c0/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x03c4/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x049c/4, 0x00000101); + nv_wo32(dev, ctx, 0x04b0/4, 0x00000111); + nv_wo32(dev, ctx, 0x04c8/4, 0x00000080); + nv_wo32(dev, ctx, 0x04cc/4, 0xffff0000); + nv_wo32(dev, ctx, 0x04d0/4, 0x00000001); + nv_wo32(dev, ctx, 0x04e4/4, 0x44400000); + nv_wo32(dev, ctx, 0x04fc/4, 0x4b800000); + for (i = 0x0510; i <= 0x051c; i += 4) + nv_wo32(dev, ctx, i/4, 0x00030303); + for (i = 0x0530; i <= 0x053c; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080000); + for (i = 0x0548; i <= 0x0554; i += 4) + nv_wo32(dev, ctx, i/4, 0x01012000); + for (i = 0x0558; i <= 0x0564; i += 4) + nv_wo32(dev, ctx, i/4, 0x000105b8); + for (i = 0x0568; i <= 0x0574; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080008); + for (i = 0x0598; i <= 0x05d4; i += 4) + nv_wo32(dev, ctx, i/4, 0x07ff0000); + nv_wo32(dev, ctx, 0x05e0/4, 0x4b7fffff); + nv_wo32(dev, ctx, 0x0620/4, 0x00000080); + nv_wo32(dev, ctx, 0x0624/4, 0x30201000); + nv_wo32(dev, ctx, 0x0628/4, 0x70605040); + nv_wo32(dev, ctx, 0x062c/4, 0xb0a09080); + nv_wo32(dev, ctx, 0x0630/4, 0xf0e0d0c0); + nv_wo32(dev, ctx, 0x0664/4, 0x00000001); + nv_wo32(dev, ctx, 0x066c/4, 0x00004000); + nv_wo32(dev, ctx, 0x0678/4, 0x00000001); + nv_wo32(dev, ctx, 0x0680/4, 0x00040000); + nv_wo32(dev, ctx, 0x0684/4, 0x00010000); + for (i = 0x1b04; i <= 0x2374; i += 16) { + nv_wo32(dev, ctx, (i + 0)/4, 0x10700ff9); + nv_wo32(dev, ctx, (i + 4)/4, 0x0436086c); + nv_wo32(dev, ctx, (i + 8)/4, 0x000c001b); + } + nv_wo32(dev, ctx, 0x2704/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2718/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2744/4, 0x40000000); + nv_wo32(dev, ctx, 0x2748/4, 0x3f800000); + nv_wo32(dev, ctx, 0x274c/4, 0x3f000000); + nv_wo32(dev, ctx, 0x2754/4, 0x40000000); + nv_wo32(dev, ctx, 0x2758/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2760/4, 0xbf800000); + nv_wo32(dev, ctx, 0x2768/4, 0xbf800000); + nv_wo32(dev, ctx, 0x308c/4, 0x000fe000); + nv_wo32(dev, ctx, 0x3108/4, 0x000003f8); + nv_wo32(dev, ctx, 0x3468/4, 0x002fe000); + for (i = 0x3484; i <= 0x34a0; i += 4) + nv_wo32(dev, ctx, i/4, 0x001c527c); +} + +static void +nv2a_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + int i; + + nv_wo32(dev, ctx, 0x033c/4, 0xffff0000); + nv_wo32(dev, ctx, 0x03a0/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x03a4/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x047c/4, 0x00000101); + nv_wo32(dev, ctx, 0x0490/4, 0x00000111); + nv_wo32(dev, ctx, 0x04a8/4, 0x44400000); + for (i = 0x04d4; i <= 0x04e0; i += 4) + nv_wo32(dev, ctx, i/4, 0x00030303); + for (i = 0x04f4; i <= 0x0500; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080000); + for (i = 0x050c; i <= 0x0518; i += 4) + nv_wo32(dev, ctx, i/4, 0x01012000); + for (i = 0x051c; i <= 0x0528; i += 4) + nv_wo32(dev, ctx, i/4, 0x000105b8); + for (i = 0x052c; i <= 0x0538; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080008); + for (i = 0x055c; i <= 0x0598; i += 4) + nv_wo32(dev, ctx, i/4, 0x07ff0000); + nv_wo32(dev, ctx, 0x05a4/4, 0x4b7fffff); + nv_wo32(dev, ctx, 0x05fc/4, 0x00000001); + nv_wo32(dev, ctx, 0x0604/4, 0x00004000); + nv_wo32(dev, ctx, 0x0610/4, 0x00000001); + nv_wo32(dev, ctx, 0x0618/4, 0x00040000); + nv_wo32(dev, ctx, 0x061c/4, 0x00010000); + for (i = 0x1a9c; i <= 0x22fc; i += 16) { /*XXX: check!! */ + nv_wo32(dev, ctx, (i + 0)/4, 0x10700ff9); + nv_wo32(dev, ctx, (i + 4)/4, 0x0436086c); + nv_wo32(dev, ctx, (i + 8)/4, 0x000c001b); + } + nv_wo32(dev, ctx, 0x269c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x26b0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x26dc/4, 0x40000000); + nv_wo32(dev, ctx, 0x26e0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x26e4/4, 0x3f000000); + nv_wo32(dev, ctx, 0x26ec/4, 0x40000000); + nv_wo32(dev, ctx, 0x26f0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x26f8/4, 0xbf800000); + nv_wo32(dev, ctx, 0x2700/4, 0xbf800000); + nv_wo32(dev, ctx, 0x3024/4, 0x000fe000); + nv_wo32(dev, ctx, 0x30a0/4, 0x000003f8); + nv_wo32(dev, ctx, 0x33fc/4, 0x002fe000); + for (i = 0x341c; i <= 0x3438; i += 4) + nv_wo32(dev, ctx, i/4, 0x001c527c); +} + +static void +nv30_31_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + int i; + + nv_wo32(dev, ctx, 0x0410/4, 0x00000101); + nv_wo32(dev, ctx, 0x0424/4, 0x00000111); + nv_wo32(dev, ctx, 0x0428/4, 0x00000060); + nv_wo32(dev, ctx, 0x0444/4, 0x00000080); + nv_wo32(dev, ctx, 0x0448/4, 0xffff0000); + nv_wo32(dev, ctx, 0x044c/4, 0x00000001); + nv_wo32(dev, ctx, 0x0460/4, 0x44400000); + nv_wo32(dev, ctx, 0x048c/4, 0xffff0000); + for (i = 0x04e0; i < 0x04e8; i += 4) + nv_wo32(dev, ctx, i/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x04ec/4, 0x00011100); + for (i = 0x0508; i < 0x0548; i += 4) + nv_wo32(dev, ctx, i/4, 0x07ff0000); + nv_wo32(dev, ctx, 0x0550/4, 0x4b7fffff); + nv_wo32(dev, ctx, 0x058c/4, 0x00000080); + nv_wo32(dev, ctx, 0x0590/4, 0x30201000); + nv_wo32(dev, ctx, 0x0594/4, 0x70605040); + nv_wo32(dev, ctx, 0x0598/4, 0xb8a89888); + nv_wo32(dev, ctx, 0x059c/4, 0xf8e8d8c8); + nv_wo32(dev, ctx, 0x05b0/4, 0xb0000000); + for (i = 0x0600; i < 0x0640; i += 4) + nv_wo32(dev, ctx, i/4, 0x00010588); + for (i = 0x0640; i < 0x0680; i += 4) + nv_wo32(dev, ctx, i/4, 0x00030303); + for (i = 0x06c0; i < 0x0700; i += 4) + nv_wo32(dev, ctx, i/4, 0x0008aae4); + for (i = 0x0700; i < 0x0740; i += 4) + nv_wo32(dev, ctx, i/4, 0x01012000); + for (i = 0x0740; i < 0x0780; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080008); + nv_wo32(dev, ctx, 0x085c/4, 0x00040000); + nv_wo32(dev, ctx, 0x0860/4, 0x00010000); + for (i = 0x0864; i < 0x0874; i += 4) + nv_wo32(dev, ctx, i/4, 0x00040004); + for (i = 0x1f18; i <= 0x3088 ; i += 16) { + nv_wo32(dev, ctx, i/4 + 0, 0x10700ff9); + nv_wo32(dev, ctx, i/4 + 1, 0x0436086c); + nv_wo32(dev, ctx, i/4 + 2, 0x000c001b); + } + for (i = 0x30b8; i < 0x30c8; i += 4) + nv_wo32(dev, ctx, i/4, 0x0000ffff); + nv_wo32(dev, ctx, 0x344c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3808/4, 0x3f800000); + nv_wo32(dev, ctx, 0x381c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3848/4, 0x40000000); + nv_wo32(dev, ctx, 0x384c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3850/4, 0x3f000000); + nv_wo32(dev, ctx, 0x3858/4, 0x40000000); + nv_wo32(dev, ctx, 0x385c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3864/4, 0xbf800000); + nv_wo32(dev, ctx, 0x386c/4, 0xbf800000); +} + +static void +nv34_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + int i; + + nv_wo32(dev, ctx, 0x040c/4, 0x01000101); + nv_wo32(dev, ctx, 0x0420/4, 0x00000111); + nv_wo32(dev, ctx, 0x0424/4, 0x00000060); + nv_wo32(dev, ctx, 0x0440/4, 0x00000080); + nv_wo32(dev, ctx, 0x0444/4, 0xffff0000); + nv_wo32(dev, ctx, 0x0448/4, 0x00000001); + nv_wo32(dev, ctx, 0x045c/4, 0x44400000); + nv_wo32(dev, ctx, 0x0480/4, 0xffff0000); + for (i = 0x04d4; i < 0x04dc; i += 4) + nv_wo32(dev, ctx, i/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x04e0/4, 0x00011100); + for (i = 0x04fc; i < 0x053c; i += 4) + nv_wo32(dev, ctx, i/4, 0x07ff0000); + nv_wo32(dev, ctx, 0x0544/4, 0x4b7fffff); + nv_wo32(dev, ctx, 0x057c/4, 0x00000080); + nv_wo32(dev, ctx, 0x0580/4, 0x30201000); + nv_wo32(dev, ctx, 0x0584/4, 0x70605040); + nv_wo32(dev, ctx, 0x0588/4, 0xb8a89888); + nv_wo32(dev, ctx, 0x058c/4, 0xf8e8d8c8); + nv_wo32(dev, ctx, 0x05a0/4, 0xb0000000); + for (i = 0x05f0; i < 0x0630; i += 4) + nv_wo32(dev, ctx, i/4, 0x00010588); + for (i = 0x0630; i < 0x0670; i += 4) + nv_wo32(dev, ctx, i/4, 0x00030303); + for (i = 0x06b0; i < 0x06f0; i += 4) + nv_wo32(dev, ctx, i/4, 0x0008aae4); + for (i = 0x06f0; i < 0x0730; i += 4) + nv_wo32(dev, ctx, i/4, 0x01012000); + for (i = 0x0730; i < 0x0770; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080008); + nv_wo32(dev, ctx, 0x0850/4, 0x00040000); + nv_wo32(dev, ctx, 0x0854/4, 0x00010000); + for (i = 0x0858; i < 0x0868; i += 4) + nv_wo32(dev, ctx, i/4, 0x00040004); + for (i = 0x15ac; i <= 0x271c ; i += 16) { + nv_wo32(dev, ctx, i/4 + 0, 0x10700ff9); + nv_wo32(dev, ctx, i/4 + 1, 0x0436086c); + nv_wo32(dev, ctx, i/4 + 2, 0x000c001b); + } + for (i = 0x274c; i < 0x275c; i += 4) + nv_wo32(dev, ctx, i/4, 0x0000ffff); + nv_wo32(dev, ctx, 0x2ae0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2e9c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2eb0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2edc/4, 0x40000000); + nv_wo32(dev, ctx, 0x2ee0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2ee4/4, 0x3f000000); + nv_wo32(dev, ctx, 0x2eec/4, 0x40000000); + nv_wo32(dev, ctx, 0x2ef0/4, 0x3f800000); + nv_wo32(dev, ctx, 0x2ef8/4, 0xbf800000); + nv_wo32(dev, ctx, 0x2f00/4, 0xbf800000); +} + +static void +nv35_36_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx) +{ + int i; + + nv_wo32(dev, ctx, 0x040c/4, 0x00000101); + nv_wo32(dev, ctx, 0x0420/4, 0x00000111); + nv_wo32(dev, ctx, 0x0424/4, 0x00000060); + nv_wo32(dev, ctx, 0x0440/4, 0x00000080); + nv_wo32(dev, ctx, 0x0444/4, 0xffff0000); + nv_wo32(dev, ctx, 0x0448/4, 0x00000001); + nv_wo32(dev, ctx, 0x045c/4, 0x44400000); + nv_wo32(dev, ctx, 0x0488/4, 0xffff0000); + for (i = 0x04dc; i < 0x04e4; i += 4) + nv_wo32(dev, ctx, i/4, 0x0fff0000); + nv_wo32(dev, ctx, 0x04e8/4, 0x00011100); + for (i = 0x0504; i < 0x0544; i += 4) + nv_wo32(dev, ctx, i/4, 0x07ff0000); + nv_wo32(dev, ctx, 0x054c/4, 0x4b7fffff); + nv_wo32(dev, ctx, 0x0588/4, 0x00000080); + nv_wo32(dev, ctx, 0x058c/4, 0x30201000); + nv_wo32(dev, ctx, 0x0590/4, 0x70605040); + nv_wo32(dev, ctx, 0x0594/4, 0xb8a89888); + nv_wo32(dev, ctx, 0x0598/4, 0xf8e8d8c8); + nv_wo32(dev, ctx, 0x05ac/4, 0xb0000000); + for (i = 0x0604; i < 0x0644; i += 4) + nv_wo32(dev, ctx, i/4, 0x00010588); + for (i = 0x0644; i < 0x0684; i += 4) + nv_wo32(dev, ctx, i/4, 0x00030303); + for (i = 0x06c4; i < 0x0704; i += 4) + nv_wo32(dev, ctx, i/4, 0x0008aae4); + for (i = 0x0704; i < 0x0744; i += 4) + nv_wo32(dev, ctx, i/4, 0x01012000); + for (i = 0x0744; i < 0x0784; i += 4) + nv_wo32(dev, ctx, i/4, 0x00080008); + nv_wo32(dev, ctx, 0x0860/4, 0x00040000); + nv_wo32(dev, ctx, 0x0864/4, 0x00010000); + for (i = 0x0868; i < 0x0878; i += 4) + nv_wo32(dev, ctx, i/4, 0x00040004); + for (i = 0x1f1c; i <= 0x308c ; i += 16) { + nv_wo32(dev, ctx, i/4 + 0, 0x10700ff9); + nv_wo32(dev, ctx, i/4 + 1, 0x0436086c); + nv_wo32(dev, ctx, i/4 + 2, 0x000c001b); + } + for (i = 0x30bc; i < 0x30cc; i += 4) + nv_wo32(dev, ctx, i/4, 0x0000ffff); + nv_wo32(dev, ctx, 0x3450/4, 0x3f800000); + nv_wo32(dev, ctx, 0x380c/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3820/4, 0x3f800000); + nv_wo32(dev, ctx, 0x384c/4, 0x40000000); + nv_wo32(dev, ctx, 0x3850/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3854/4, 0x3f000000); + nv_wo32(dev, ctx, 0x385c/4, 0x40000000); + nv_wo32(dev, ctx, 0x3860/4, 0x3f800000); + nv_wo32(dev, ctx, 0x3868/4, 0xbf800000); + nv_wo32(dev, ctx, 0x3870/4, 0xbf800000); +} + +int +nv20_graph_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + void (*ctx_init)(struct drm_device *, struct nouveau_gpuobj *); + unsigned int ctx_size; + unsigned int idoffs = 0x28/4; + int ret; + + switch (dev_priv->chipset) { + case 0x20: + ctx_size = NV20_GRCTX_SIZE; + ctx_init = nv20_graph_context_init; + idoffs = 0; + break; + case 0x25: + case 0x28: + ctx_size = NV25_GRCTX_SIZE; + ctx_init = nv25_graph_context_init; + break; + case 0x2a: + ctx_size = NV2A_GRCTX_SIZE; + ctx_init = nv2a_graph_context_init; + idoffs = 0; + break; + case 0x30: + case 0x31: + ctx_size = NV30_31_GRCTX_SIZE; + ctx_init = nv30_31_graph_context_init; + break; + case 0x34: + ctx_size = NV34_GRCTX_SIZE; + ctx_init = nv34_graph_context_init; + break; + case 0x35: + case 0x36: + ctx_size = NV35_36_GRCTX_SIZE; + ctx_init = nv35_36_graph_context_init; + break; + default: + ctx_size = 0; + ctx_init = nv35_36_graph_context_init; + NV_ERROR(dev, "Please contact the devs if you want your NV%x" + " card to work\n", dev_priv->chipset); + return -ENOSYS; + break; + } + + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, ctx_size, 16, + NVOBJ_FLAG_ZERO_ALLOC, + &chan->ramin_grctx); + if (ret) + return ret; + + /* Initialise default context values */ + dev_priv->engine.instmem.prepare_access(dev, true); + ctx_init(dev, chan->ramin_grctx->gpuobj); + + /* nv20: nv_wo32(dev, chan->ramin_grctx->gpuobj, 10, chan->id<<24); */ + nv_wo32(dev, chan->ramin_grctx->gpuobj, idoffs, + (chan->id << 24) | 0x1); /* CTX_USER */ + + nv_wo32(dev, dev_priv->ctx_table->gpuobj, chan->id, + chan->ramin_grctx->instance >> 4); + + dev_priv->engine.instmem.finish_access(dev); + return 0; +} + +void +nv20_graph_destroy_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (chan->ramin_grctx) + nouveau_gpuobj_ref_del(dev, &chan->ramin_grctx); + + dev_priv->engine.instmem.prepare_access(dev, true); + nv_wo32(dev, dev_priv->ctx_table->gpuobj, chan->id, 0); + dev_priv->engine.instmem.finish_access(dev); +} + +int +nv20_graph_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + uint32_t inst; + + if (!chan->ramin_grctx) + return -EINVAL; + inst = chan->ramin_grctx->instance >> 4; + + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_XFER, + NV20_PGRAPH_CHANNEL_CTX_XFER_LOAD); + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10010100); + + nouveau_wait_for_idle(dev); + return 0; +} + +int +nv20_graph_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_channel *chan; + uint32_t inst, tmp; + + chan = pgraph->channel(dev); + if (!chan) + return 0; + inst = chan->ramin_grctx->instance >> 4; + + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_POINTER, inst); + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_XFER, + NV20_PGRAPH_CHANNEL_CTX_XFER_SAVE); + + nouveau_wait_for_idle(dev); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000000); + tmp = nv_rd32(dev, NV10_PGRAPH_CTX_USER) & 0x00ffffff; + tmp |= (pfifo->channels - 1) << 24; + nv_wr32(dev, NV10_PGRAPH_CTX_USER, tmp); + return 0; +} + +static void +nv20_graph_rdi(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int i, writecount = 32; + uint32_t rdi_index = 0x2c80000; + + if (dev_priv->chipset == 0x20) { + rdi_index = 0x3d0000; + writecount = 15; + } + + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, rdi_index); + for (i = 0; i < writecount; i++) + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, 0); + + nouveau_wait_for_idle(dev); +} + +void +nv20_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch) +{ + uint32_t limit = max(1u, addr + size) - 1; + + if (pitch) + addr |= 1; + + nv_wr32(dev, NV20_PGRAPH_TLIMIT(i), limit); + nv_wr32(dev, NV20_PGRAPH_TSIZE(i), pitch); + nv_wr32(dev, NV20_PGRAPH_TILE(i), addr); + + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0030 + 4 * i); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, limit); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0050 + 4 * i); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, pitch); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0010 + 4 * i); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, addr); +} + +int +nv20_graph_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = + (struct drm_nouveau_private *)dev->dev_private; + uint32_t tmp, vramsz; + int ret, i; + + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) & ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) | NV_PMC_ENABLE_PGRAPH); + + if (!dev_priv->ctx_table) { + /* Create Context Pointer Table */ + dev_priv->ctx_table_size = 32 * 4; + ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, + dev_priv->ctx_table_size, 16, + NVOBJ_FLAG_ZERO_ALLOC, + &dev_priv->ctx_table); + if (ret) + return ret; + } + + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_TABLE, + dev_priv->ctx_table->instance >> 4); + + nv20_graph_rdi(dev); + + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF); + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x00000000); + nv_wr32(dev, NV04_PGRAPH_DEBUG_1, 0x00118700); + nv_wr32(dev, NV04_PGRAPH_DEBUG_3, 0xF3CE0475); /* 0x4 = auto ctx switch */ + nv_wr32(dev, NV10_PGRAPH_DEBUG_4, 0x00000000); + nv_wr32(dev, 0x40009C , 0x00000040); + + if (dev_priv->chipset >= 0x25) { + nv_wr32(dev, 0x400890, 0x00080000); + nv_wr32(dev, 0x400610, 0x304B1FB6); + nv_wr32(dev, 0x400B80, 0x18B82880); + nv_wr32(dev, 0x400B84, 0x44000000); + nv_wr32(dev, 0x400098, 0x40000080); + nv_wr32(dev, 0x400B88, 0x000000ff); + } else { + nv_wr32(dev, 0x400880, 0x00080000); /* 0x0008c7df */ + nv_wr32(dev, 0x400094, 0x00000005); + nv_wr32(dev, 0x400B80, 0x45CAA208); /* 0x45eae20e */ + nv_wr32(dev, 0x400B84, 0x24000000); + nv_wr32(dev, 0x400098, 0x00000040); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E00038); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , 0x00000030); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E10038); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , 0x00000030); + } + + /* Turn all the tiling regions off. */ + for (i = 0; i < NV10_PFB_TILE__SIZE; i++) + nv20_graph_set_region_tiling(dev, i, 0, 0, 0); + + for (i = 0; i < 8; i++) { + nv_wr32(dev, 0x400980 + i * 4, nv_rd32(dev, 0x100300 + i * 4)); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0090 + i * 4); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, + nv_rd32(dev, 0x100300 + i * 4)); + } + nv_wr32(dev, 0x4009a0, nv_rd32(dev, 0x100324)); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA000C); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA, nv_rd32(dev, 0x100324)); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000100); + nv_wr32(dev, NV10_PGRAPH_STATE , 0xFFFFFFFF); + + tmp = nv_rd32(dev, NV10_PGRAPH_SURFACE) & 0x0007ff00; + nv_wr32(dev, NV10_PGRAPH_SURFACE, tmp); + tmp = nv_rd32(dev, NV10_PGRAPH_SURFACE) | 0x00020100; + nv_wr32(dev, NV10_PGRAPH_SURFACE, tmp); + + /* begin RAM config */ + vramsz = drm_get_resource_len(dev, 0) - 1; + nv_wr32(dev, 0x4009A4, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x4009A8, nv_rd32(dev, NV04_PFB_CFG1)); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0000); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0004); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , nv_rd32(dev, NV04_PFB_CFG1)); + nv_wr32(dev, 0x400820, 0); + nv_wr32(dev, 0x400824, 0); + nv_wr32(dev, 0x400864, vramsz - 1); + nv_wr32(dev, 0x400868, vramsz - 1); + + /* interesting.. the below overwrites some of the tile setup above.. */ + nv_wr32(dev, 0x400B20, 0x00000000); + nv_wr32(dev, 0x400B04, 0xFFFFFFFF); + + nv_wr32(dev, NV03_PGRAPH_ABS_UCLIP_XMIN, 0); + nv_wr32(dev, NV03_PGRAPH_ABS_UCLIP_YMIN, 0); + nv_wr32(dev, NV03_PGRAPH_ABS_UCLIP_XMAX, 0x7fff); + nv_wr32(dev, NV03_PGRAPH_ABS_UCLIP_YMAX, 0x7fff); + + return 0; +} + +void +nv20_graph_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table); +} + +int +nv30_graph_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int ret, i; + + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) & ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) | NV_PMC_ENABLE_PGRAPH); + + if (!dev_priv->ctx_table) { + /* Create Context Pointer Table */ + dev_priv->ctx_table_size = 32 * 4; + ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, + dev_priv->ctx_table_size, 16, + NVOBJ_FLAG_ZERO_ALLOC, + &dev_priv->ctx_table); + if (ret) + return ret; + } + + nv_wr32(dev, NV20_PGRAPH_CHANNEL_CTX_TABLE, + dev_priv->ctx_table->instance >> 4); + + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF); + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x00000000); + nv_wr32(dev, NV04_PGRAPH_DEBUG_1, 0x401287c0); + nv_wr32(dev, 0x400890, 0x01b463ff); + nv_wr32(dev, NV04_PGRAPH_DEBUG_3, 0xf2de0475); + nv_wr32(dev, NV10_PGRAPH_DEBUG_4, 0x00008000); + nv_wr32(dev, NV04_PGRAPH_LIMIT_VIOL_PIX, 0xf04bdff6); + nv_wr32(dev, 0x400B80, 0x1003d888); + nv_wr32(dev, 0x400B84, 0x0c000000); + nv_wr32(dev, 0x400098, 0x00000000); + nv_wr32(dev, 0x40009C, 0x0005ad00); + nv_wr32(dev, 0x400B88, 0x62ff00ff); /* suspiciously like PGRAPH_DEBUG_2 */ + nv_wr32(dev, 0x4000a0, 0x00000000); + nv_wr32(dev, 0x4000a4, 0x00000008); + nv_wr32(dev, 0x4008a8, 0xb784a400); + nv_wr32(dev, 0x400ba0, 0x002f8685); + nv_wr32(dev, 0x400ba4, 0x00231f3f); + nv_wr32(dev, 0x4008a4, 0x40000020); + + if (dev_priv->chipset == 0x34) { + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0004); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , 0x00200201); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0008); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , 0x00000008); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0000); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , 0x00000032); + nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E00004); + nv_wr32(dev, NV10_PGRAPH_RDI_DATA , 0x00000002); + } + + nv_wr32(dev, 0x4000c0, 0x00000016); + + /* Turn all the tiling regions off. */ + for (i = 0; i < NV10_PFB_TILE__SIZE; i++) + nv20_graph_set_region_tiling(dev, i, 0, 0, 0); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000100); + nv_wr32(dev, NV10_PGRAPH_STATE , 0xFFFFFFFF); + nv_wr32(dev, 0x0040075c , 0x00000001); + + /* begin RAM config */ + /* vramsz = drm_get_resource_len(dev, 0) - 1; */ + nv_wr32(dev, 0x4009A4, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x4009A8, nv_rd32(dev, NV04_PFB_CFG1)); + if (dev_priv->chipset != 0x34) { + nv_wr32(dev, 0x400750, 0x00EA0000); + nv_wr32(dev, 0x400754, nv_rd32(dev, NV04_PFB_CFG0)); + nv_wr32(dev, 0x400750, 0x00EA0004); + nv_wr32(dev, 0x400754, nv_rd32(dev, NV04_PFB_CFG1)); + } + + return 0; +} + +struct nouveau_pgraph_object_class nv20_graph_grclass[] = { + { 0x0030, false, NULL }, /* null */ + { 0x0039, false, NULL }, /* m2mf */ + { 0x004a, false, NULL }, /* gdirect */ + { 0x009f, false, NULL }, /* imageblit (nv12) */ + { 0x008a, false, NULL }, /* ifc */ + { 0x0089, false, NULL }, /* sifm */ + { 0x0062, false, NULL }, /* surf2d */ + { 0x0043, false, NULL }, /* rop */ + { 0x0012, false, NULL }, /* beta1 */ + { 0x0072, false, NULL }, /* beta4 */ + { 0x0019, false, NULL }, /* cliprect */ + { 0x0044, false, NULL }, /* pattern */ + { 0x009e, false, NULL }, /* swzsurf */ + { 0x0096, false, NULL }, /* celcius */ + { 0x0097, false, NULL }, /* kelvin (nv20) */ + { 0x0597, false, NULL }, /* kelvin (nv25) */ + {} +}; + +struct nouveau_pgraph_object_class nv30_graph_grclass[] = { + { 0x0030, false, NULL }, /* null */ + { 0x0039, false, NULL }, /* m2mf */ + { 0x004a, false, NULL }, /* gdirect */ + { 0x009f, false, NULL }, /* imageblit (nv12) */ + { 0x008a, false, NULL }, /* ifc */ + { 0x038a, false, NULL }, /* ifc (nv30) */ + { 0x0089, false, NULL }, /* sifm */ + { 0x0389, false, NULL }, /* sifm (nv30) */ + { 0x0062, false, NULL }, /* surf2d */ + { 0x0362, false, NULL }, /* surf2d (nv30) */ + { 0x0043, false, NULL }, /* rop */ + { 0x0012, false, NULL }, /* beta1 */ + { 0x0072, false, NULL }, /* beta4 */ + { 0x0019, false, NULL }, /* cliprect */ + { 0x0044, false, NULL }, /* pattern */ + { 0x039e, false, NULL }, /* swzsurf */ + { 0x0397, false, NULL }, /* rankine (nv30) */ + { 0x0497, false, NULL }, /* rankine (nv35) */ + { 0x0697, false, NULL }, /* rankine (nv34) */ + {} +}; + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_gem.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -0,0 +1,994 @@ +/* + * Copyright (C) 2008 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +#include "drmP.h" +#include "drm.h" + +#include "nouveau_drv.h" +#include "nouveau_drm.h" +#include "nouveau_dma.h" + +#define nouveau_gem_pushbuf_sync(chan) 0 + +int +nouveau_gem_object_new(struct drm_gem_object *gem) +{ + return 0; +} + +void +nouveau_gem_object_del(struct drm_gem_object *gem) +{ + struct nouveau_bo *nvbo = gem->driver_private; + struct ttm_buffer_object *bo = &nvbo->bo; + + if (!nvbo) + return; + nvbo->gem = NULL; + + if (unlikely(nvbo->cpu_filp)) + ttm_bo_synccpu_write_release(bo); + + if (unlikely(nvbo->pin_refcnt)) { + nvbo->pin_refcnt = 1; + nouveau_bo_unpin(nvbo); + } + + ttm_bo_unref(&bo); +} + +int +nouveau_gem_new(struct drm_device *dev, struct nouveau_channel *chan, + int size, int align, uint32_t flags, uint32_t tile_mode, + uint32_t tile_flags, bool no_vm, bool mappable, + struct nouveau_bo **pnvbo) +{ + struct nouveau_bo *nvbo; + int ret; + + ret = nouveau_bo_new(dev, chan, size, align, flags, tile_mode, + tile_flags, no_vm, mappable, pnvbo); + if (ret) + return ret; + nvbo = *pnvbo; + + nvbo->gem = drm_gem_object_alloc(dev, nvbo->bo.mem.size); + if (!nvbo->gem) { + nouveau_bo_ref(NULL, pnvbo); + return -ENOMEM; + } + + nvbo->bo.persistant_swap_storage = nvbo->gem->filp; + nvbo->gem->driver_private = nvbo; + return 0; +} + +static int +nouveau_gem_info(struct drm_gem_object *gem, struct drm_nouveau_gem_info *rep) +{ + struct nouveau_bo *nvbo = nouveau_gem_object(gem); + + if (nvbo->bo.mem.mem_type == TTM_PL_TT) + rep->domain = NOUVEAU_GEM_DOMAIN_GART; + else + rep->domain = NOUVEAU_GEM_DOMAIN_VRAM; + + rep->size = nvbo->bo.mem.num_pages << PAGE_SHIFT; + rep->offset = nvbo->bo.offset; + rep->map_handle = nvbo->mappable ? nvbo->bo.addr_space_offset : 0; + rep->tile_mode = nvbo->tile_mode; + rep->tile_flags = nvbo->tile_flags; + return 0; +} + +static bool +nouveau_gem_tile_flags_valid(struct drm_device *dev, uint32_t tile_flags) { + switch (tile_flags) { + case 0x0000: + case 0x1800: + case 0x2800: + case 0x4800: + case 0x7000: + case 0x7400: + case 0x7a00: + case 0xe000: + break; + default: + NV_ERROR(dev, "bad page flags: 0x%08x\n", tile_flags); + return false; + } + + return true; +} + +int +nouveau_gem_ioctl_new(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_gem_new *req = data; + struct nouveau_bo *nvbo = NULL; + struct nouveau_channel *chan = NULL; + uint32_t flags = 0; + int ret = 0; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + if (unlikely(dev_priv->ttm.bdev.dev_mapping == NULL)) + dev_priv->ttm.bdev.dev_mapping = dev_priv->dev->dev_mapping; + + if (req->channel_hint) { + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel_hint, + file_priv, chan); + } + + if (req->info.domain & NOUVEAU_GEM_DOMAIN_VRAM) + flags |= TTM_PL_FLAG_VRAM; + if (req->info.domain & NOUVEAU_GEM_DOMAIN_GART) + flags |= TTM_PL_FLAG_TT; + if (!flags || req->info.domain & NOUVEAU_GEM_DOMAIN_CPU) + flags |= TTM_PL_FLAG_SYSTEM; + + if (!nouveau_gem_tile_flags_valid(dev, req->info.tile_flags)) + return -EINVAL; + + ret = nouveau_gem_new(dev, chan, req->info.size, req->align, flags, + req->info.tile_mode, req->info.tile_flags, false, + (req->info.domain & NOUVEAU_GEM_DOMAIN_MAPPABLE), + &nvbo); + if (ret) + return ret; + + ret = nouveau_gem_info(nvbo->gem, &req->info); + if (ret) + goto out; + + ret = drm_gem_handle_create(file_priv, nvbo->gem, &req->info.handle); +out: + mutex_lock(&dev->struct_mutex); + drm_gem_object_handle_unreference(nvbo->gem); + mutex_unlock(&dev->struct_mutex); + + if (ret) + drm_gem_object_unreference(nvbo->gem); + return ret; +} + +static int +nouveau_gem_set_domain(struct drm_gem_object *gem, uint32_t read_domains, + uint32_t write_domains, uint32_t valid_domains) +{ + struct nouveau_bo *nvbo = gem->driver_private; + struct ttm_buffer_object *bo = &nvbo->bo; + uint64_t flags; + + if (!valid_domains || (!read_domains && !write_domains)) + return -EINVAL; + + if (write_domains) { + if ((valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) && + (write_domains & NOUVEAU_GEM_DOMAIN_VRAM)) + flags = TTM_PL_FLAG_VRAM; + else + if ((valid_domains & NOUVEAU_GEM_DOMAIN_GART) && + (write_domains & NOUVEAU_GEM_DOMAIN_GART)) + flags = TTM_PL_FLAG_TT; + else + return -EINVAL; + } else { + if ((valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) && + (read_domains & NOUVEAU_GEM_DOMAIN_VRAM) && + bo->mem.mem_type == TTM_PL_VRAM) + flags = TTM_PL_FLAG_VRAM; + else + if ((valid_domains & NOUVEAU_GEM_DOMAIN_GART) && + (read_domains & NOUVEAU_GEM_DOMAIN_GART) && + bo->mem.mem_type == TTM_PL_TT) + flags = TTM_PL_FLAG_TT; + else + if ((valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) && + (read_domains & NOUVEAU_GEM_DOMAIN_VRAM)) + flags = TTM_PL_FLAG_VRAM; + else + flags = TTM_PL_FLAG_TT; + } + + nouveau_bo_placement_set(nvbo, flags); + return 0; +} + +struct validate_op { + struct list_head vram_list; + struct list_head gart_list; + struct list_head both_list; +}; + +static void +validate_fini_list(struct list_head *list, struct nouveau_fence *fence) +{ + struct list_head *entry, *tmp; + struct nouveau_bo *nvbo; + + list_for_each_safe(entry, tmp, list) { + nvbo = list_entry(entry, struct nouveau_bo, entry); + if (likely(fence)) { + struct nouveau_fence *prev_fence; + + spin_lock(&nvbo->bo.lock); + prev_fence = nvbo->bo.sync_obj; + nvbo->bo.sync_obj = nouveau_fence_ref(fence); + spin_unlock(&nvbo->bo.lock); + nouveau_fence_unref((void *)&prev_fence); + } + + list_del(&nvbo->entry); + nvbo->reserved_by = NULL; + ttm_bo_unreserve(&nvbo->bo); + drm_gem_object_unreference(nvbo->gem); + } +} + +static void +validate_fini(struct validate_op *op, struct nouveau_fence* fence) +{ + validate_fini_list(&op->vram_list, fence); + validate_fini_list(&op->gart_list, fence); + validate_fini_list(&op->both_list, fence); +} + +static int +validate_init(struct nouveau_channel *chan, struct drm_file *file_priv, + struct drm_nouveau_gem_pushbuf_bo *pbbo, + int nr_buffers, struct validate_op *op) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t sequence; + int trycnt = 0; + int ret, i; + + sequence = atomic_add_return(1, &dev_priv->ttm.validate_sequence); +retry: + if (++trycnt > 100000) { + NV_ERROR(dev, "%s failed and gave up.\n", __func__); + return -EINVAL; + } + + for (i = 0; i < nr_buffers; i++) { + struct drm_nouveau_gem_pushbuf_bo *b = &pbbo[i]; + struct drm_gem_object *gem; + struct nouveau_bo *nvbo; + + gem = drm_gem_object_lookup(dev, file_priv, b->handle); + if (!gem) { + NV_ERROR(dev, "Unknown handle 0x%08x\n", b->handle); + validate_fini(op, NULL); + return -EINVAL; + } + nvbo = gem->driver_private; + + if (nvbo->reserved_by && nvbo->reserved_by == file_priv) { + NV_ERROR(dev, "multiple instances of buffer %d on " + "validation list\n", b->handle); + validate_fini(op, NULL); + return -EINVAL; + } + + ret = ttm_bo_reserve(&nvbo->bo, false, false, true, sequence); + if (ret) { + validate_fini(op, NULL); + if (ret == -EAGAIN) + ret = ttm_bo_wait_unreserved(&nvbo->bo, false); + drm_gem_object_unreference(gem); + if (ret) + return ret; + goto retry; + } + + nvbo->reserved_by = file_priv; + nvbo->pbbo_index = i; + if ((b->valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) && + (b->valid_domains & NOUVEAU_GEM_DOMAIN_GART)) + list_add_tail(&nvbo->entry, &op->both_list); + else + if (b->valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) + list_add_tail(&nvbo->entry, &op->vram_list); + else + if (b->valid_domains & NOUVEAU_GEM_DOMAIN_GART) + list_add_tail(&nvbo->entry, &op->gart_list); + else { + NV_ERROR(dev, "invalid valid domains: 0x%08x\n", + b->valid_domains); + list_add_tail(&nvbo->entry, &op->both_list); + validate_fini(op, NULL); + return -EINVAL; + } + + if (unlikely(atomic_read(&nvbo->bo.cpu_writers) > 0)) { + validate_fini(op, NULL); + + if (nvbo->cpu_filp == file_priv) { + NV_ERROR(dev, "bo %p mapped by process trying " + "to validate it!\n", nvbo); + return -EINVAL; + } + + ret = ttm_bo_wait_cpu(&nvbo->bo, false); + if (ret) + return ret; + goto retry; + } + } + + return 0; +} + +static int +validate_list(struct nouveau_channel *chan, struct list_head *list, + struct drm_nouveau_gem_pushbuf_bo *pbbo, uint64_t user_pbbo_ptr) +{ + struct drm_nouveau_gem_pushbuf_bo __user *upbbo = + (void __force __user *)(uintptr_t)user_pbbo_ptr; + struct nouveau_bo *nvbo; + int ret, relocs = 0; + + list_for_each_entry(nvbo, list, entry) { + struct drm_nouveau_gem_pushbuf_bo *b = &pbbo[nvbo->pbbo_index]; + struct nouveau_fence *prev_fence = nvbo->bo.sync_obj; + + if (prev_fence && nouveau_fence_channel(prev_fence) != chan) { + spin_lock(&nvbo->bo.lock); + ret = ttm_bo_wait(&nvbo->bo, false, false, false); + spin_unlock(&nvbo->bo.lock); + if (unlikely(ret)) + return ret; + } + + ret = nouveau_gem_set_domain(nvbo->gem, b->read_domains, + b->write_domains, + b->valid_domains); + if (unlikely(ret)) + return ret; + + nvbo->channel = chan; + ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement, + false, false); + nvbo->channel = NULL; + if (unlikely(ret)) + return ret; + + if (nvbo->bo.offset == b->presumed_offset && + ((nvbo->bo.mem.mem_type == TTM_PL_VRAM && + b->presumed_domain & NOUVEAU_GEM_DOMAIN_VRAM) || + (nvbo->bo.mem.mem_type == TTM_PL_TT && + b->presumed_domain & NOUVEAU_GEM_DOMAIN_GART))) + continue; + + if (nvbo->bo.mem.mem_type == TTM_PL_TT) + b->presumed_domain = NOUVEAU_GEM_DOMAIN_GART; + else + b->presumed_domain = NOUVEAU_GEM_DOMAIN_VRAM; + b->presumed_offset = nvbo->bo.offset; + b->presumed_ok = 0; + relocs++; + + if (DRM_COPY_TO_USER(&upbbo[nvbo->pbbo_index], b, sizeof(*b))) + return -EFAULT; + } + + return relocs; +} + +static int +nouveau_gem_pushbuf_validate(struct nouveau_channel *chan, + struct drm_file *file_priv, + struct drm_nouveau_gem_pushbuf_bo *pbbo, + uint64_t user_buffers, int nr_buffers, + struct validate_op *op, int *apply_relocs) +{ + int ret, relocs = 0; + + INIT_LIST_HEAD(&op->vram_list); + INIT_LIST_HEAD(&op->gart_list); + INIT_LIST_HEAD(&op->both_list); + + if (nr_buffers == 0) + return 0; + + ret = validate_init(chan, file_priv, pbbo, nr_buffers, op); + if (unlikely(ret)) + return ret; + + ret = validate_list(chan, &op->vram_list, pbbo, user_buffers); + if (unlikely(ret < 0)) { + validate_fini(op, NULL); + return ret; + } + relocs += ret; + + ret = validate_list(chan, &op->gart_list, pbbo, user_buffers); + if (unlikely(ret < 0)) { + validate_fini(op, NULL); + return ret; + } + relocs += ret; + + ret = validate_list(chan, &op->both_list, pbbo, user_buffers); + if (unlikely(ret < 0)) { + validate_fini(op, NULL); + return ret; + } + relocs += ret; + + *apply_relocs = relocs; + return 0; +} + +static inline void * +u_memcpya(uint64_t user, unsigned nmemb, unsigned size) +{ + void *mem; + void __user *userptr = (void __force __user *)(uintptr_t)user; + + mem = kmalloc(nmemb * size, GFP_KERNEL); + if (!mem) + return ERR_PTR(-ENOMEM); + + if (DRM_COPY_FROM_USER(mem, userptr, nmemb * size)) { + kfree(mem); + return ERR_PTR(-EFAULT); + } + + return mem; +} + +static int +nouveau_gem_pushbuf_reloc_apply(struct nouveau_channel *chan, int nr_bo, + struct drm_nouveau_gem_pushbuf_bo *bo, + unsigned nr_relocs, uint64_t ptr_relocs, + unsigned nr_dwords, unsigned first_dword, + uint32_t *pushbuf, bool is_iomem) +{ + struct drm_nouveau_gem_pushbuf_reloc *reloc = NULL; + struct drm_device *dev = chan->dev; + int ret = 0; + unsigned i; + + reloc = u_memcpya(ptr_relocs, nr_relocs, sizeof(*reloc)); + if (IS_ERR(reloc)) + return PTR_ERR(reloc); + + for (i = 0; i < nr_relocs; i++) { + struct drm_nouveau_gem_pushbuf_reloc *r = &reloc[i]; + struct drm_nouveau_gem_pushbuf_bo *b; + uint32_t data; + + if (r->bo_index >= nr_bo || r->reloc_index < first_dword || + r->reloc_index >= first_dword + nr_dwords) { + NV_ERROR(dev, "Bad relocation %d\n", i); + NV_ERROR(dev, " bo: %d max %d\n", r->bo_index, nr_bo); + NV_ERROR(dev, " id: %d max %d\n", r->reloc_index, nr_dwords); + ret = -EINVAL; + break; + } + + b = &bo[r->bo_index]; + if (b->presumed_ok) + continue; + + if (r->flags & NOUVEAU_GEM_RELOC_LOW) + data = b->presumed_offset + r->data; + else + if (r->flags & NOUVEAU_GEM_RELOC_HIGH) + data = (b->presumed_offset + r->data) >> 32; + else + data = r->data; + + if (r->flags & NOUVEAU_GEM_RELOC_OR) { + if (b->presumed_domain == NOUVEAU_GEM_DOMAIN_GART) + data |= r->tor; + else + data |= r->vor; + } + + if (is_iomem) + iowrite32_native(data, (void __force __iomem *) + &pushbuf[r->reloc_index]); + else + pushbuf[r->reloc_index] = data; + } + + kfree(reloc); + return ret; +} + +int +nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gem_pushbuf *req = data; + struct drm_nouveau_gem_pushbuf_bo *bo = NULL; + struct nouveau_channel *chan; + struct validate_op op; + struct nouveau_fence* fence = 0; + uint32_t *pushbuf = NULL; + int ret = 0, do_reloc = 0, i; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel, file_priv, chan); + + if (req->nr_dwords >= chan->dma.max || + req->nr_buffers > NOUVEAU_GEM_MAX_BUFFERS || + req->nr_relocs > NOUVEAU_GEM_MAX_RELOCS) { + NV_ERROR(dev, "Pushbuf config exceeds limits:\n"); + NV_ERROR(dev, " dwords : %d max %d\n", req->nr_dwords, + chan->dma.max - 1); + NV_ERROR(dev, " buffers: %d max %d\n", req->nr_buffers, + NOUVEAU_GEM_MAX_BUFFERS); + NV_ERROR(dev, " relocs : %d max %d\n", req->nr_relocs, + NOUVEAU_GEM_MAX_RELOCS); + return -EINVAL; + } + + pushbuf = u_memcpya(req->dwords, req->nr_dwords, sizeof(uint32_t)); + if (IS_ERR(pushbuf)) + return PTR_ERR(pushbuf); + + bo = u_memcpya(req->buffers, req->nr_buffers, sizeof(*bo)); + if (IS_ERR(bo)) { + kfree(pushbuf); + return PTR_ERR(bo); + } + + mutex_lock(&dev->struct_mutex); + + /* Validate buffer list */ + ret = nouveau_gem_pushbuf_validate(chan, file_priv, bo, req->buffers, + req->nr_buffers, &op, &do_reloc); + if (ret) + goto out; + + /* Apply any relocations that are required */ + if (do_reloc) { + ret = nouveau_gem_pushbuf_reloc_apply(chan, req->nr_buffers, + bo, req->nr_relocs, + req->relocs, + req->nr_dwords, 0, + pushbuf, false); + if (ret) + goto out; + } + + /* Emit push buffer to the hw + */ + ret = RING_SPACE(chan, req->nr_dwords); + if (ret) + goto out; + + OUT_RINGp(chan, pushbuf, req->nr_dwords); + + ret = nouveau_fence_new(chan, &fence, true); + if (ret) { + NV_ERROR(dev, "error fencing pushbuf: %d\n", ret); + WIND_RING(chan); + goto out; + } + + if (nouveau_gem_pushbuf_sync(chan)) { + ret = nouveau_fence_wait(fence, NULL, false, false); + if (ret) { + for (i = 0; i < req->nr_dwords; i++) + NV_ERROR(dev, "0x%08x\n", pushbuf[i]); + NV_ERROR(dev, "^^ above push buffer is fail :(\n"); + } + } + +out: + validate_fini(&op, fence); + nouveau_fence_unref((void**)&fence); + mutex_unlock(&dev->struct_mutex); + kfree(pushbuf); + kfree(bo); + return ret; +} + +#define PUSHBUF_CAL (dev_priv->card_type >= NV_20) + +int +nouveau_gem_ioctl_pushbuf_call(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_gem_pushbuf_call *req = data; + struct drm_nouveau_gem_pushbuf_bo *bo = NULL; + struct nouveau_channel *chan; + struct drm_gem_object *gem; + struct nouveau_bo *pbbo; + struct validate_op op; + struct nouveau_fence* fence = 0; + int i, ret = 0, do_reloc = 0; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(req->channel, file_priv, chan); + + if (unlikely(req->handle == 0)) + goto out_next; + + if (req->nr_buffers > NOUVEAU_GEM_MAX_BUFFERS || + req->nr_relocs > NOUVEAU_GEM_MAX_RELOCS) { + NV_ERROR(dev, "Pushbuf config exceeds limits:\n"); + NV_ERROR(dev, " buffers: %d max %d\n", req->nr_buffers, + NOUVEAU_GEM_MAX_BUFFERS); + NV_ERROR(dev, " relocs : %d max %d\n", req->nr_relocs, + NOUVEAU_GEM_MAX_RELOCS); + return -EINVAL; + } + + bo = u_memcpya(req->buffers, req->nr_buffers, sizeof(*bo)); + if (IS_ERR(bo)) + return PTR_ERR(bo); + + mutex_lock(&dev->struct_mutex); + + /* Validate buffer list */ + ret = nouveau_gem_pushbuf_validate(chan, file_priv, bo, req->buffers, + req->nr_buffers, &op, &do_reloc); + if (ret) { + NV_ERROR(dev, "validate: %d\n", ret); + goto out; + } + + /* Validate DMA push buffer */ + gem = drm_gem_object_lookup(dev, file_priv, req->handle); + if (!gem) { + NV_ERROR(dev, "Unknown pb handle 0x%08x\n", req->handle); + ret = -EINVAL; + goto out; + } + pbbo = nouveau_gem_object(gem); + + if ((req->offset & 3) || req->nr_dwords < 2 || + (unsigned long)req->offset > (unsigned long)pbbo->bo.mem.size || + (unsigned long)req->nr_dwords > + ((unsigned long)(pbbo->bo.mem.size - req->offset ) >> 2)) { + NV_ERROR(dev, "pb call misaligned or out of bounds: " + "%d + %d * 4 > %ld\n", + req->offset, req->nr_dwords, pbbo->bo.mem.size); + ret = -EINVAL; + drm_gem_object_unreference(gem); + goto out; + } + + ret = ttm_bo_reserve(&pbbo->bo, false, false, true, + chan->fence.sequence); + if (ret) { + NV_ERROR(dev, "resv pb: %d\n", ret); + drm_gem_object_unreference(gem); + goto out; + } + + nouveau_bo_placement_set(pbbo, 1 << chan->pushbuf_bo->bo.mem.mem_type); + ret = ttm_bo_validate(&pbbo->bo, &pbbo->placement, false, false); + if (ret) { + NV_ERROR(dev, "validate pb: %d\n", ret); + ttm_bo_unreserve(&pbbo->bo); + drm_gem_object_unreference(gem); + goto out; + } + + list_add_tail(&pbbo->entry, &op.both_list); + + /* If presumed return address doesn't match, we need to map the + * push buffer and fix it.. + */ + if (!PUSHBUF_CAL) { + uint32_t retaddy; + + if (chan->dma.free < 4 + NOUVEAU_DMA_SKIPS) { + ret = nouveau_dma_wait(chan, 4 + NOUVEAU_DMA_SKIPS); + if (ret) { + NV_ERROR(dev, "jmp_space: %d\n", ret); + goto out; + } + } + + retaddy = chan->pushbuf_base + ((chan->dma.cur + 2) << 2); + retaddy |= 0x20000000; + if (retaddy != req->suffix0) { + req->suffix0 = retaddy; + do_reloc = 1; + } + } + + /* Apply any relocations that are required */ + if (do_reloc) { + void *pbvirt; + bool is_iomem; + ret = ttm_bo_kmap(&pbbo->bo, 0, pbbo->bo.mem.num_pages, + &pbbo->kmap); + if (ret) { + NV_ERROR(dev, "kmap pb: %d\n", ret); + goto out; + } + + pbvirt = ttm_kmap_obj_virtual(&pbbo->kmap, &is_iomem); + ret = nouveau_gem_pushbuf_reloc_apply(chan, req->nr_buffers, bo, + req->nr_relocs, + req->relocs, + req->nr_dwords, + req->offset / 4, + pbvirt, is_iomem); + + if (!PUSHBUF_CAL) { + nouveau_bo_wr32(pbbo, + req->offset / 4 + req->nr_dwords - 2, + req->suffix0); + } + + ttm_bo_kunmap(&pbbo->kmap); + if (ret) { + NV_ERROR(dev, "reloc apply: %d\n", ret); + goto out; + } + } + + if (PUSHBUF_CAL) { + ret = RING_SPACE(chan, 2); + if (ret) { + NV_ERROR(dev, "cal_space: %d\n", ret); + goto out; + } + OUT_RING(chan, ((pbbo->bo.mem.mm_node->start << PAGE_SHIFT) + + req->offset) | 2); + OUT_RING(chan, 0); + } else { + ret = RING_SPACE(chan, 2 + NOUVEAU_DMA_SKIPS); + if (ret) { + NV_ERROR(dev, "jmp_space: %d\n", ret); + goto out; + } + OUT_RING(chan, ((pbbo->bo.mem.mm_node->start << PAGE_SHIFT) + + req->offset) | 0x20000000); + OUT_RING(chan, 0); + + /* Space the jumps apart with NOPs. */ + for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) + OUT_RING(chan, 0); + } + + ret = nouveau_fence_new(chan, &fence, true); + if (ret) { + NV_ERROR(dev, "error fencing pushbuf: %d\n", ret); + WIND_RING(chan); + goto out; + } + +out: + validate_fini(&op, fence); + nouveau_fence_unref((void**)&fence); + mutex_unlock(&dev->struct_mutex); + kfree(bo); + +out_next: + if (PUSHBUF_CAL) { + req->suffix0 = 0x00020000; + req->suffix1 = 0x00000000; + } else { + req->suffix0 = 0x20000000 | + (chan->pushbuf_base + ((chan->dma.cur + 2) << 2)); + req->suffix1 = 0x00000000; + } + + return ret; +} + +int +nouveau_gem_ioctl_pushbuf_call2(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_gem_pushbuf_call *req = data; + + req->vram_available = dev_priv->fb_aper_free; + req->gart_available = dev_priv->gart_info.aper_free; + + return nouveau_gem_ioctl_pushbuf_call(dev, data, file_priv); +} + +static inline uint32_t +domain_to_ttm(struct nouveau_bo *nvbo, uint32_t domain) +{ + uint32_t flags = 0; + + if (domain & NOUVEAU_GEM_DOMAIN_VRAM) + flags |= TTM_PL_FLAG_VRAM; + if (domain & NOUVEAU_GEM_DOMAIN_GART) + flags |= TTM_PL_FLAG_TT; + + return flags; +} + +int +nouveau_gem_ioctl_pin(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gem_pin *req = data; + struct drm_gem_object *gem; + struct nouveau_bo *nvbo; + int ret = 0; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + if (drm_core_check_feature(dev, DRIVER_MODESET)) { + NV_ERROR(dev, "pin only allowed without kernel modesetting\n"); + return -EINVAL; + } + + if (!DRM_SUSER(DRM_CURPROC)) + return -EPERM; + + gem = drm_gem_object_lookup(dev, file_priv, req->handle); + if (!gem) + return -EINVAL; + nvbo = nouveau_gem_object(gem); + + ret = nouveau_bo_pin(nvbo, domain_to_ttm(nvbo, req->domain)); + if (ret) + goto out; + + req->offset = nvbo->bo.offset; + if (nvbo->bo.mem.mem_type == TTM_PL_TT) + req->domain = NOUVEAU_GEM_DOMAIN_GART; + else + req->domain = NOUVEAU_GEM_DOMAIN_VRAM; + +out: + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + + return ret; +} + +int +nouveau_gem_ioctl_unpin(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gem_pin *req = data; + struct drm_gem_object *gem; + int ret; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + if (drm_core_check_feature(dev, DRIVER_MODESET)) + return -EINVAL; + + gem = drm_gem_object_lookup(dev, file_priv, req->handle); + if (!gem) + return -EINVAL; + + ret = nouveau_bo_unpin(nouveau_gem_object(gem)); + + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + + return ret; +} + +int +nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gem_cpu_prep *req = data; + struct drm_gem_object *gem; + struct nouveau_bo *nvbo; + bool no_wait = !!(req->flags & NOUVEAU_GEM_CPU_PREP_NOWAIT); + int ret = -EINVAL; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + gem = drm_gem_object_lookup(dev, file_priv, req->handle); + if (!gem) + return ret; + nvbo = nouveau_gem_object(gem); + + if (nvbo->cpu_filp) { + if (nvbo->cpu_filp == file_priv) + goto out; + + ret = ttm_bo_wait_cpu(&nvbo->bo, no_wait); + if (ret) + goto out; + } + + if (req->flags & NOUVEAU_GEM_CPU_PREP_NOBLOCK) { + spin_lock(&nvbo->bo.lock); + ret = ttm_bo_wait(&nvbo->bo, false, false, no_wait); + spin_unlock(&nvbo->bo.lock); + } else { + ret = ttm_bo_synccpu_write_grab(&nvbo->bo, no_wait); + if (ret == 0) + nvbo->cpu_filp = file_priv; + } + +out: + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + return ret; +} + +int +nouveau_gem_ioctl_cpu_fini(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gem_cpu_prep *req = data; + struct drm_gem_object *gem; + struct nouveau_bo *nvbo; + int ret = -EINVAL; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + gem = drm_gem_object_lookup(dev, file_priv, req->handle); + if (!gem) + return ret; + nvbo = nouveau_gem_object(gem); + + if (nvbo->cpu_filp != file_priv) + goto out; + nvbo->cpu_filp = NULL; + + ttm_bo_synccpu_write_release(&nvbo->bo); + ret = 0; + +out: + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + return ret; +} + +int +nouveau_gem_ioctl_info(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_gem_info *req = data; + struct drm_gem_object *gem; + int ret; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + gem = drm_gem_object_lookup(dev, file_priv, req->handle); + if (!gem) + return -EINVAL; + + ret = nouveau_gem_info(gem, req); + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + return ret; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_bo.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -0,0 +1,773 @@ +/* + * Copyright 2007 Dave Airlied + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +/* + * Authors: Dave Airlied + * Ben Skeggs + * Jeremy Kolb + */ + +#include "drmP.h" + +#include "nouveau_drm.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" + +#include + +static void +nouveau_bo_del_ttm(struct ttm_buffer_object *bo) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); + struct drm_device *dev = dev_priv->dev; + struct nouveau_bo *nvbo = nouveau_bo(bo); + + ttm_bo_kunmap(&nvbo->kmap); + + if (unlikely(nvbo->gem)) + DRM_ERROR("bo %p still attached to GEM object\n", bo); + + if (nvbo->tile) + nv10_mem_expire_tiling(dev, nvbo->tile, NULL); + + spin_lock(&dev_priv->ttm.bo_list_lock); + list_del(&nvbo->head); + spin_unlock(&dev_priv->ttm.bo_list_lock); + kfree(nvbo); +} + +static void +nouveau_bo_fixup_align(struct drm_device *dev, + uint32_t tile_mode, uint32_t tile_flags, + int *align, int *size) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /* + * Some of the tile_flags have a periodic structure of N*4096 bytes, + * align to to that as well as the page size. Align the size to the + * appropriate boundaries. This does imply that sizes are rounded up + * 3-7 pages, so be aware of this and do not waste memory by allocating + * many small buffers. + */ + if (dev_priv->card_type == NV_50) { + uint32_t block_size = nouveau_mem_fb_amount(dev) >> 15; + int i; + + switch (tile_flags) { + case 0x1800: + case 0x2800: + case 0x4800: + case 0x7a00: + if (is_power_of_2(block_size)) { + for (i = 1; i < 10; i++) { + *align = 12 * i * block_size; + if (!(*align % 65536)) + break; + } + } else { + for (i = 1; i < 10; i++) { + *align = 8 * i * block_size; + if (!(*align % 65536)) + break; + } + } + *size = roundup(*size, *align); + break; + default: + break; + } + + } else { + if (tile_mode) { + if (dev_priv->chipset >= 0x40) { + *align = 65536; + *size = roundup(*size, 64 * tile_mode); + + } else if (dev_priv->chipset >= 0x30) { + *align = 32768; + *size = roundup(*size, 64 * tile_mode); + + } else if (dev_priv->chipset >= 0x20) { + *align = 16384; + *size = roundup(*size, 64 * tile_mode); + + } else if (dev_priv->chipset >= 0x10) { + *align = 16384; + *size = roundup(*size, 32 * tile_mode); + } + } + } + + /* ALIGN works only on powers of two. */ + *size = roundup(*size, PAGE_SIZE); + + if (dev_priv->card_type == NV_50) { + *size = roundup(*size, 65536); + *align = max(65536, *align); + } +} + +int +nouveau_bo_new(struct drm_device *dev, struct nouveau_channel *chan, + int size, int align, uint32_t flags, uint32_t tile_mode, + uint32_t tile_flags, bool no_vm, bool mappable, + struct nouveau_bo **pnvbo) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_bo *nvbo; + int ret = 0; + + nvbo = kzalloc(sizeof(struct nouveau_bo), GFP_KERNEL); + if (!nvbo) + return -ENOMEM; + INIT_LIST_HEAD(&nvbo->head); + INIT_LIST_HEAD(&nvbo->entry); + nvbo->mappable = mappable; + nvbo->no_vm = no_vm; + nvbo->tile_mode = tile_mode; + nvbo->tile_flags = tile_flags; + + nouveau_bo_fixup_align(dev, tile_mode, tile_flags, &align, &size); + align >>= PAGE_SHIFT; + + nvbo->placement.fpfn = 0; + nvbo->placement.lpfn = mappable ? dev_priv->fb_mappable_pages : 0; + nouveau_bo_placement_set(nvbo, flags); + + nvbo->channel = chan; + ret = ttm_bo_init(&dev_priv->ttm.bdev, &nvbo->bo, size, + ttm_bo_type_device, &nvbo->placement, align, 0, + false, NULL, size, nouveau_bo_del_ttm); + nvbo->channel = NULL; + if (ret) { + /* ttm will call nouveau_bo_del_ttm if it fails.. */ + return ret; + } + + spin_lock(&dev_priv->ttm.bo_list_lock); + list_add_tail(&nvbo->head, &dev_priv->ttm.bo_list); + spin_unlock(&dev_priv->ttm.bo_list_lock); + *pnvbo = nvbo; + return 0; +} + +void +nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t memtype) +{ + int n = 0; + + if (memtype & TTM_PL_FLAG_VRAM) + nvbo->placements[n++] = TTM_PL_FLAG_VRAM | TTM_PL_MASK_CACHING; + if (memtype & TTM_PL_FLAG_TT) + nvbo->placements[n++] = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING; + if (memtype & TTM_PL_FLAG_SYSTEM) + nvbo->placements[n++] = TTM_PL_FLAG_SYSTEM | TTM_PL_MASK_CACHING; + nvbo->placement.placement = nvbo->placements; + nvbo->placement.busy_placement = nvbo->placements; + nvbo->placement.num_placement = n; + nvbo->placement.num_busy_placement = n; + + if (nvbo->pin_refcnt) { + while (n--) + nvbo->placements[n] |= TTM_PL_FLAG_NO_EVICT; + } +} + +int +nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev); + struct ttm_buffer_object *bo = &nvbo->bo; + int ret, i; + + if (nvbo->pin_refcnt && !(memtype & (1 << bo->mem.mem_type))) { + NV_ERROR(nouveau_bdev(bo->bdev)->dev, + "bo %p pinned elsewhere: 0x%08x vs 0x%08x\n", bo, + 1 << bo->mem.mem_type, memtype); + return -EINVAL; + } + + if (nvbo->pin_refcnt++) + return 0; + + ret = ttm_bo_reserve(bo, false, false, false, 0); + if (ret) + goto out; + + nouveau_bo_placement_set(nvbo, memtype); + for (i = 0; i < nvbo->placement.num_placement; i++) + nvbo->placements[i] |= TTM_PL_FLAG_NO_EVICT; + + ret = ttm_bo_validate(bo, &nvbo->placement, false, false); + if (ret == 0) { + switch (bo->mem.mem_type) { + case TTM_PL_VRAM: + dev_priv->fb_aper_free -= bo->mem.size; + break; + case TTM_PL_TT: + dev_priv->gart_info.aper_free -= bo->mem.size; + break; + default: + break; + } + } + ttm_bo_unreserve(bo); +out: + if (unlikely(ret)) + nvbo->pin_refcnt--; + return ret; +} + +int +nouveau_bo_unpin(struct nouveau_bo *nvbo) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev); + struct ttm_buffer_object *bo = &nvbo->bo; + int ret, i; + + if (--nvbo->pin_refcnt) + return 0; + + ret = ttm_bo_reserve(bo, false, false, false, 0); + if (ret) + return ret; + + for (i = 0; i < nvbo->placement.num_placement; i++) + nvbo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT; + + ret = ttm_bo_validate(bo, &nvbo->placement, false, false); + if (ret == 0) { + switch (bo->mem.mem_type) { + case TTM_PL_VRAM: + dev_priv->fb_aper_free += bo->mem.size; + break; + case TTM_PL_TT: + dev_priv->gart_info.aper_free += bo->mem.size; + break; + default: + break; + } + } + + ttm_bo_unreserve(bo); + return ret; +} + +int +nouveau_bo_map(struct nouveau_bo *nvbo) +{ + int ret; + + ret = ttm_bo_reserve(&nvbo->bo, false, false, false, 0); + if (ret) + return ret; + + ret = ttm_bo_kmap(&nvbo->bo, 0, nvbo->bo.mem.num_pages, &nvbo->kmap); + ttm_bo_unreserve(&nvbo->bo); + return ret; +} + +void +nouveau_bo_unmap(struct nouveau_bo *nvbo) +{ + ttm_bo_kunmap(&nvbo->kmap); +} + +u16 +nouveau_bo_rd16(struct nouveau_bo *nvbo, unsigned index) +{ + bool is_iomem; + u16 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); + mem = &mem[index]; + if (is_iomem) + return ioread16_native((void __force __iomem *)mem); + else + return *mem; +} + +void +nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val) +{ + bool is_iomem; + u16 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); + mem = &mem[index]; + if (is_iomem) + iowrite16_native(val, (void __force __iomem *)mem); + else + *mem = val; +} + +u32 +nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index) +{ + bool is_iomem; + u32 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); + mem = &mem[index]; + if (is_iomem) + return ioread32_native((void __force __iomem *)mem); + else + return *mem; +} + +void +nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val) +{ + bool is_iomem; + u32 *mem = ttm_kmap_obj_virtual(&nvbo->kmap, &is_iomem); + mem = &mem[index]; + if (is_iomem) + iowrite32_native(val, (void __force __iomem *)mem); + else + *mem = val; +} + +static struct ttm_backend * +nouveau_bo_create_ttm_backend_entry(struct ttm_bo_device *bdev) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(bdev); + struct drm_device *dev = dev_priv->dev; + + switch (dev_priv->gart_info.type) { +#if __OS_HAS_AGP + case NOUVEAU_GART_AGP: + return ttm_agp_backend_init(bdev, dev->agp->bridge); +#endif + case NOUVEAU_GART_SGDMA: + return nouveau_sgdma_init_ttm(dev); + default: + NV_ERROR(dev, "Unknown GART type %d\n", + dev_priv->gart_info.type); + break; + } + + return NULL; +} + +static int +nouveau_bo_invalidate_caches(struct ttm_bo_device *bdev, uint32_t flags) +{ + /* We'll do this from user space. */ + return 0; +} + +static int +nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, + struct ttm_mem_type_manager *man) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(bdev); + struct drm_device *dev = dev_priv->dev; + + switch (type) { + case TTM_PL_SYSTEM: + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; + man->available_caching = TTM_PL_MASK_CACHING; + man->default_caching = TTM_PL_FLAG_CACHED; + break; + case TTM_PL_VRAM: + man->flags = TTM_MEMTYPE_FLAG_FIXED | + TTM_MEMTYPE_FLAG_MAPPABLE | + TTM_MEMTYPE_FLAG_NEEDS_IOREMAP; + man->available_caching = TTM_PL_FLAG_UNCACHED | + TTM_PL_FLAG_WC; + man->default_caching = TTM_PL_FLAG_WC; + + man->io_addr = NULL; + man->io_offset = drm_get_resource_start(dev, 1); + man->io_size = drm_get_resource_len(dev, 1); + if (man->io_size > nouveau_mem_fb_amount(dev)) + man->io_size = nouveau_mem_fb_amount(dev); + + man->gpu_offset = dev_priv->vm_vram_base; + break; + case TTM_PL_TT: + switch (dev_priv->gart_info.type) { + case NOUVEAU_GART_AGP: + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | + TTM_MEMTYPE_FLAG_NEEDS_IOREMAP; + man->available_caching = TTM_PL_FLAG_UNCACHED; + man->default_caching = TTM_PL_FLAG_UNCACHED; + break; + case NOUVEAU_GART_SGDMA: + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | + TTM_MEMTYPE_FLAG_CMA; + man->available_caching = TTM_PL_MASK_CACHING; + man->default_caching = TTM_PL_FLAG_CACHED; + break; + default: + NV_ERROR(dev, "Unknown GART type: %d\n", + dev_priv->gart_info.type); + return -EINVAL; + } + + man->io_offset = dev_priv->gart_info.aper_base; + man->io_size = dev_priv->gart_info.aper_size; + man->io_addr = NULL; + man->gpu_offset = dev_priv->vm_gart_base; + break; + default: + NV_ERROR(dev, "Unsupported memory type %u\n", (unsigned)type); + return -EINVAL; + } + return 0; +} + +static void +nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl) +{ + struct nouveau_bo *nvbo = nouveau_bo(bo); + + switch (bo->mem.mem_type) { + case TTM_PL_VRAM: + nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_TT | + TTM_PL_FLAG_SYSTEM); + break; + default: + nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_SYSTEM); + break; + } + + *pl = nvbo->placement; +} + + +/* GPU-assisted copy using NV_MEMORY_TO_MEMORY_FORMAT, can access + * TTM_PL_{VRAM,TT} directly. + */ + +static int +nouveau_bo_move_accel_cleanup(struct nouveau_channel *chan, + struct nouveau_bo *nvbo, bool evict, bool no_wait, + struct ttm_mem_reg *new_mem) +{ + struct nouveau_fence *fence = NULL; + int ret; + + ret = nouveau_fence_new(chan, &fence, true); + if (ret) + return ret; + + ret = ttm_bo_move_accel_cleanup(&nvbo->bo, fence, NULL, + evict, no_wait, new_mem); + if (nvbo->channel && nvbo->channel != chan) + ret = nouveau_fence_wait(fence, NULL, false, false); + nouveau_fence_unref((void *)&fence); + return ret; +} + +static inline uint32_t +nouveau_bo_mem_ctxdma(struct nouveau_bo *nvbo, struct nouveau_channel *chan, + struct ttm_mem_reg *mem) +{ + if (chan == nouveau_bdev(nvbo->bo.bdev)->channel) { + if (mem->mem_type == TTM_PL_TT) + return NvDmaGART; + return NvDmaVRAM; + } + + if (mem->mem_type == TTM_PL_TT) + return chan->gart_handle; + return chan->vram_handle; +} + +static int +nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr, + int no_wait, struct ttm_mem_reg *new_mem) +{ + struct nouveau_bo *nvbo = nouveau_bo(bo); + struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); + struct ttm_mem_reg *old_mem = &bo->mem; + struct nouveau_channel *chan; + uint64_t src_offset, dst_offset; + uint32_t page_count; + int ret; + + chan = nvbo->channel; + if (!chan || nvbo->tile_flags || nvbo->no_vm) + chan = dev_priv->channel; + + src_offset = old_mem->mm_node->start << PAGE_SHIFT; + dst_offset = new_mem->mm_node->start << PAGE_SHIFT; + if (chan != dev_priv->channel) { + if (old_mem->mem_type == TTM_PL_TT) + src_offset += dev_priv->vm_gart_base; + else + src_offset += dev_priv->vm_vram_base; + + if (new_mem->mem_type == TTM_PL_TT) + dst_offset += dev_priv->vm_gart_base; + else + dst_offset += dev_priv->vm_vram_base; + } + + ret = RING_SPACE(chan, 3); + if (ret) + return ret; + BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_DMA_SOURCE, 2); + OUT_RING(chan, nouveau_bo_mem_ctxdma(nvbo, chan, old_mem)); + OUT_RING(chan, nouveau_bo_mem_ctxdma(nvbo, chan, new_mem)); + + if (dev_priv->card_type >= NV_50) { + ret = RING_SPACE(chan, 4); + if (ret) + return ret; + BEGIN_RING(chan, NvSubM2MF, 0x0200, 1); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSubM2MF, 0x021c, 1); + OUT_RING(chan, 1); + } + + page_count = new_mem->num_pages; + while (page_count) { + int line_count = (page_count > 2047) ? 2047 : page_count; + + if (dev_priv->card_type >= NV_50) { + ret = RING_SPACE(chan, 3); + if (ret) + return ret; + BEGIN_RING(chan, NvSubM2MF, 0x0238, 2); + OUT_RING(chan, upper_32_bits(src_offset)); + OUT_RING(chan, upper_32_bits(dst_offset)); + } + ret = RING_SPACE(chan, 11); + if (ret) + return ret; + BEGIN_RING(chan, NvSubM2MF, + NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8); + OUT_RING(chan, lower_32_bits(src_offset)); + OUT_RING(chan, lower_32_bits(dst_offset)); + OUT_RING(chan, PAGE_SIZE); /* src_pitch */ + OUT_RING(chan, PAGE_SIZE); /* dst_pitch */ + OUT_RING(chan, PAGE_SIZE); /* line_length */ + OUT_RING(chan, line_count); + OUT_RING(chan, (1<<8)|(1<<0)); + OUT_RING(chan, 0); + BEGIN_RING(chan, NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_NOP, 1); + OUT_RING(chan, 0); + + page_count -= line_count; + src_offset += (PAGE_SIZE * line_count); + dst_offset += (PAGE_SIZE * line_count); + } + + return nouveau_bo_move_accel_cleanup(chan, nvbo, evict, no_wait, new_mem); +} + +static int +nouveau_bo_move_flipd(struct ttm_buffer_object *bo, bool evict, bool intr, + bool no_wait, struct ttm_mem_reg *new_mem) +{ + u32 placement_memtype = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING; + struct ttm_placement placement; + struct ttm_mem_reg tmp_mem; + int ret; + + placement.fpfn = placement.lpfn = 0; + placement.num_placement = placement.num_busy_placement = 1; + placement.placement = placement.busy_placement = &placement_memtype; + + tmp_mem = *new_mem; + tmp_mem.mm_node = NULL; + ret = ttm_bo_mem_space(bo, &placement, &tmp_mem, intr, no_wait); + if (ret) + return ret; + + ret = ttm_tt_bind(bo->ttm, &tmp_mem); + if (ret) + goto out; + + ret = nouveau_bo_move_m2mf(bo, true, intr, no_wait, &tmp_mem); + if (ret) + goto out; + + ret = ttm_bo_move_ttm(bo, evict, no_wait, new_mem); +out: + if (tmp_mem.mm_node) { + spin_lock(&bo->bdev->glob->lru_lock); + drm_mm_put_block(tmp_mem.mm_node); + spin_unlock(&bo->bdev->glob->lru_lock); + } + + return ret; +} + +static int +nouveau_bo_move_flips(struct ttm_buffer_object *bo, bool evict, bool intr, + bool no_wait, struct ttm_mem_reg *new_mem) +{ + u32 placement_memtype = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING; + struct ttm_placement placement; + struct ttm_mem_reg tmp_mem; + int ret; + + placement.fpfn = placement.lpfn = 0; + placement.num_placement = placement.num_busy_placement = 1; + placement.placement = placement.busy_placement = &placement_memtype; + + tmp_mem = *new_mem; + tmp_mem.mm_node = NULL; + ret = ttm_bo_mem_space(bo, &placement, &tmp_mem, intr, no_wait); + if (ret) + return ret; + + ret = ttm_bo_move_ttm(bo, evict, no_wait, &tmp_mem); + if (ret) + goto out; + + ret = nouveau_bo_move_m2mf(bo, evict, intr, no_wait, new_mem); + if (ret) + goto out; + +out: + if (tmp_mem.mm_node) { + spin_lock(&bo->bdev->glob->lru_lock); + drm_mm_put_block(tmp_mem.mm_node); + spin_unlock(&bo->bdev->glob->lru_lock); + } + + return ret; +} + +static int +nouveau_bo_vm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem, + struct nouveau_tile_reg **new_tile) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); + struct drm_device *dev = dev_priv->dev; + struct nouveau_bo *nvbo = nouveau_bo(bo); + uint64_t offset; + int ret; + + if (nvbo->no_vm || new_mem->mem_type != TTM_PL_VRAM) { + /* Nothing to do. */ + *new_tile = NULL; + return 0; + } + + offset = new_mem->mm_node->start << PAGE_SHIFT; + + if (dev_priv->card_type == NV_50) { + ret = nv50_mem_vm_bind_linear(dev, + offset + dev_priv->vm_vram_base, + new_mem->size, nvbo->tile_flags, + offset); + if (ret) + return ret; + + } else if (dev_priv->card_type >= NV_10) { + *new_tile = nv10_mem_set_tiling(dev, offset, new_mem->size, + nvbo->tile_mode); + } + + return 0; +} + +static void +nouveau_bo_vm_cleanup(struct ttm_buffer_object *bo, + struct nouveau_tile_reg *new_tile, + struct nouveau_tile_reg **old_tile) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); + struct drm_device *dev = dev_priv->dev; + + if (dev_priv->card_type >= NV_10 && + dev_priv->card_type < NV_50) { + if (*old_tile) + nv10_mem_expire_tiling(dev, *old_tile, bo->sync_obj); + + *old_tile = new_tile; + } +} + +static int +nouveau_bo_move(struct ttm_buffer_object *bo, bool evict, bool intr, + bool no_wait, struct ttm_mem_reg *new_mem) +{ + struct drm_nouveau_private *dev_priv = nouveau_bdev(bo->bdev); + struct nouveau_bo *nvbo = nouveau_bo(bo); + struct ttm_mem_reg *old_mem = &bo->mem; + struct nouveau_tile_reg *new_tile = NULL; + int ret = 0; + + ret = nouveau_bo_vm_bind(bo, new_mem, &new_tile); + if (ret) + return ret; + + /* Software copy if the card isn't up and running yet. */ + if (dev_priv->init_state != NOUVEAU_CARD_INIT_DONE || + !dev_priv->channel) { + ret = ttm_bo_move_memcpy(bo, evict, no_wait, new_mem); + goto out; + } + + /* Fake bo copy. */ + if (old_mem->mem_type == TTM_PL_SYSTEM && !bo->ttm) { + BUG_ON(bo->mem.mm_node != NULL); + bo->mem = *new_mem; + new_mem->mm_node = NULL; + goto out; + } + + /* Hardware assisted copy. */ + if (new_mem->mem_type == TTM_PL_SYSTEM) + ret = nouveau_bo_move_flipd(bo, evict, intr, no_wait, new_mem); + else if (old_mem->mem_type == TTM_PL_SYSTEM) + ret = nouveau_bo_move_flips(bo, evict, intr, no_wait, new_mem); + else + ret = nouveau_bo_move_m2mf(bo, evict, intr, no_wait, new_mem); + + if (!ret) + goto out; + + /* Fallback to software copy. */ + ret = ttm_bo_move_memcpy(bo, evict, no_wait, new_mem); + +out: + if (ret) + nouveau_bo_vm_cleanup(bo, NULL, &new_tile); + else + nouveau_bo_vm_cleanup(bo, new_tile, &nvbo->tile); + + return ret; +} + +static int +nouveau_bo_verify_access(struct ttm_buffer_object *bo, struct file *filp) +{ + return 0; +} + +struct ttm_bo_driver nouveau_bo_driver = { + .create_ttm_backend_entry = nouveau_bo_create_ttm_backend_entry, + .invalidate_caches = nouveau_bo_invalidate_caches, + .init_mem_type = nouveau_bo_init_mem_type, + .evict_flags = nouveau_bo_evict_flags, + .move = nouveau_bo_move, + .verify_access = nouveau_bo_verify_access, + .sync_obj_signaled = nouveau_fence_signalled, + .sync_obj_wait = nouveau_fence_wait, + .sync_obj_flush = nouveau_fence_flush, + .sync_obj_unref = nouveau_fence_unref, + .sync_obj_ref = nouveau_fence_ref, +}; + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_display.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_display.c @@ -0,0 +1,1032 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "nv50_display.h" +#include "nouveau_crtc.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_fb.h" +#include "drm_crtc_helper.h" + +static void +nv50_evo_channel_del(struct nouveau_channel **pchan) +{ + struct nouveau_channel *chan = *pchan; + + if (!chan) + return; + *pchan = NULL; + + nouveau_gpuobj_channel_takedown(chan); + nouveau_bo_ref(NULL, &chan->pushbuf_bo); + + if (chan->user) + iounmap(chan->user); + + kfree(chan); +} + +static int +nv50_evo_dmaobj_new(struct nouveau_channel *evo, uint32_t class, uint32_t name, + uint32_t tile_flags, uint32_t magic_flags, + uint32_t offset, uint32_t limit) +{ + struct drm_nouveau_private *dev_priv = evo->dev->dev_private; + struct drm_device *dev = evo->dev; + struct nouveau_gpuobj *obj = NULL; + int ret; + + ret = nouveau_gpuobj_new(dev, evo, 6*4, 32, 0, &obj); + if (ret) + return ret; + obj->engine = NVOBJ_ENGINE_DISPLAY; + + ret = nouveau_gpuobj_ref_add(dev, evo, name, obj, NULL); + if (ret) { + nouveau_gpuobj_del(dev, &obj); + return ret; + } + + dev_priv->engine.instmem.prepare_access(dev, true); + nv_wo32(dev, obj, 0, (tile_flags << 22) | (magic_flags << 16) | class); + nv_wo32(dev, obj, 1, limit); + nv_wo32(dev, obj, 2, offset); + nv_wo32(dev, obj, 3, 0x00000000); + nv_wo32(dev, obj, 4, 0x00000000); + nv_wo32(dev, obj, 5, 0x00010000); + dev_priv->engine.instmem.finish_access(dev); + + return 0; +} + +static int +nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pchan) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan; + int ret; + + chan = kzalloc(sizeof(struct nouveau_channel), GFP_KERNEL); + if (!chan) + return -ENOMEM; + *pchan = chan; + + chan->id = -1; + chan->dev = dev; + chan->user_get = 4; + chan->user_put = 0; + + INIT_LIST_HEAD(&chan->ramht_refs); + + ret = nouveau_gpuobj_new_ref(dev, NULL, NULL, 0, 32768, 0x1000, + NVOBJ_FLAG_ZERO_ALLOC, &chan->ramin); + if (ret) { + NV_ERROR(dev, "Error allocating EVO channel memory: %d\n", ret); + nv50_evo_channel_del(pchan); + return ret; + } + + ret = nouveau_mem_init_heap(&chan->ramin_heap, chan->ramin->gpuobj-> + im_pramin->start, 32768); + if (ret) { + NV_ERROR(dev, "Error initialising EVO PRAMIN heap: %d\n", ret); + nv50_evo_channel_del(pchan); + return ret; + } + + ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, 4096, 16, + 0, &chan->ramht); + if (ret) { + NV_ERROR(dev, "Unable to allocate EVO RAMHT: %d\n", ret); + nv50_evo_channel_del(pchan); + return ret; + } + + if (dev_priv->chipset != 0x50) { + ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoFB16, 0x70, 0x19, + 0, 0xffffffff); + if (ret) { + nv50_evo_channel_del(pchan); + return ret; + } + + + ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoFB32, 0x7a, 0x19, + 0, 0xffffffff); + if (ret) { + nv50_evo_channel_del(pchan); + return ret; + } + } + + ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoVRAM, 0, 0x19, + 0, nouveau_mem_fb_amount(dev)); + if (ret) { + nv50_evo_channel_del(pchan); + return ret; + } + + ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM, 0, 0, + false, true, &chan->pushbuf_bo); + if (ret == 0) + ret = nouveau_bo_pin(chan->pushbuf_bo, TTM_PL_FLAG_VRAM); + if (ret) { + NV_ERROR(dev, "Error creating EVO DMA push buffer: %d\n", ret); + nv50_evo_channel_del(pchan); + return ret; + } + + ret = nouveau_bo_map(chan->pushbuf_bo); + if (ret) { + NV_ERROR(dev, "Error mapping EVO DMA push buffer: %d\n", ret); + nv50_evo_channel_del(pchan); + return ret; + } + + chan->user = ioremap(pci_resource_start(dev->pdev, 0) + + NV50_PDISPLAY_USER(0), PAGE_SIZE); + if (!chan->user) { + NV_ERROR(dev, "Error mapping EVO control regs.\n"); + nv50_evo_channel_del(pchan); + return -ENOMEM; + } + + return 0; +} + +int +nv50_display_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; + struct nouveau_channel *evo = dev_priv->evo; + struct drm_connector *connector; + uint32_t val, ram_amount, hpd_en[2]; + uint64_t start; + int ret, i; + + NV_DEBUG_KMS(dev, "\n"); + + nv_wr32(dev, 0x00610184, nv_rd32(dev, 0x00614004)); + /* + * I think the 0x006101XX range is some kind of main control area + * that enables things. + */ + /* CRTC? */ + for (i = 0; i < 2; i++) { + val = nv_rd32(dev, 0x00616100 + (i * 0x800)); + nv_wr32(dev, 0x00610190 + (i * 0x10), val); + val = nv_rd32(dev, 0x00616104 + (i * 0x800)); + nv_wr32(dev, 0x00610194 + (i * 0x10), val); + val = nv_rd32(dev, 0x00616108 + (i * 0x800)); + nv_wr32(dev, 0x00610198 + (i * 0x10), val); + val = nv_rd32(dev, 0x0061610c + (i * 0x800)); + nv_wr32(dev, 0x0061019c + (i * 0x10), val); + } + /* DAC */ + for (i = 0; i < 3; i++) { + val = nv_rd32(dev, 0x0061a000 + (i * 0x800)); + nv_wr32(dev, 0x006101d0 + (i * 0x04), val); + } + /* SOR */ + for (i = 0; i < 4; i++) { + val = nv_rd32(dev, 0x0061c000 + (i * 0x800)); + nv_wr32(dev, 0x006101e0 + (i * 0x04), val); + } + /* Something not yet in use, tv-out maybe. */ + for (i = 0; i < 3; i++) { + val = nv_rd32(dev, 0x0061e000 + (i * 0x800)); + nv_wr32(dev, 0x006101f0 + (i * 0x04), val); + } + + for (i = 0; i < 3; i++) { + nv_wr32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(i), 0x00550000 | + NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING); + nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL1(i), 0x00000001); + } + + /* This used to be in crtc unblank, but seems out of place there. */ + nv_wr32(dev, NV50_PDISPLAY_UNK_380, 0); + /* RAM is clamped to 256 MiB. */ + ram_amount = nouveau_mem_fb_amount(dev); + NV_DEBUG_KMS(dev, "ram_amount %d\n", ram_amount); + if (ram_amount > 256*1024*1024) + ram_amount = 256*1024*1024; + nv_wr32(dev, NV50_PDISPLAY_RAM_AMOUNT, ram_amount - 1); + nv_wr32(dev, NV50_PDISPLAY_UNK_388, 0x150000); + nv_wr32(dev, NV50_PDISPLAY_UNK_38C, 0); + + /* The precise purpose is unknown, i suspect it has something to do + * with text mode. + */ + if (nv_rd32(dev, NV50_PDISPLAY_INTR_1) & 0x100) { + nv_wr32(dev, NV50_PDISPLAY_INTR_1, 0x100); + nv_wr32(dev, 0x006194e8, nv_rd32(dev, 0x006194e8) & ~1); + if (!nv_wait(0x006194e8, 2, 0)) { + NV_ERROR(dev, "timeout: (0x6194e8 & 2) != 0\n"); + NV_ERROR(dev, "0x6194e8 = 0x%08x\n", + nv_rd32(dev, 0x6194e8)); + return -EBUSY; + } + } + + /* taken from nv bug #12637, attempts to un-wedge the hw if it's + * stuck in some unspecified state + */ + start = ptimer->read(dev); + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x2b00); + while ((val = nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))) & 0x1e0000) { + if ((val & 0x9f0000) == 0x20000) + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), + val | 0x800000); + + if ((val & 0x3f0000) == 0x30000) + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), + val | 0x200000); + + if (ptimer->read(dev) - start > 1000000000ULL) { + NV_ERROR(dev, "timeout: (0x610200 & 0x1e0000) != 0\n"); + NV_ERROR(dev, "0x610200 = 0x%08x\n", val); + return -EBUSY; + } + } + + nv_wr32(dev, NV50_PDISPLAY_CTRL_STATE, NV50_PDISPLAY_CTRL_STATE_ENABLE); + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x1000b03); + if (!nv_wait(NV50_PDISPLAY_CHANNEL_STAT(0), 0x40000000, 0x40000000)) { + NV_ERROR(dev, "timeout: (0x610200 & 0x40000000) == 0x40000000\n"); + NV_ERROR(dev, "0x610200 = 0x%08x\n", + nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))); + return -EBUSY; + } + + for (i = 0; i < 2; i++) { + nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), 0x2000); + if (!nv_wait(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), + NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, 0)) { + NV_ERROR(dev, "timeout: CURSOR_CTRL2_STATUS == 0\n"); + NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n", + nv_rd32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i))); + return -EBUSY; + } + + nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), + NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_ON); + if (!nv_wait(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i), + NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, + NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_ACTIVE)) { + NV_ERROR(dev, "timeout: " + "CURSOR_CTRL2_STATUS_ACTIVE(%d)\n", i); + NV_ERROR(dev, "CURSOR_CTRL2(%d) = 0x%08x\n", i, + nv_rd32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i))); + return -EBUSY; + } + } + + nv_wr32(dev, NV50_PDISPLAY_OBJECTS, (evo->ramin->instance >> 8) | 9); + + /* initialise fifo */ + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_DMA_CB(0), + ((evo->pushbuf_bo->bo.mem.mm_node->start << PAGE_SHIFT) >> 8) | + NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_VRAM | + NV50_PDISPLAY_CHANNEL_DMA_CB_VALID); + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_UNK2(0), 0x00010000); + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_UNK3(0), 0x00000002); + if (!nv_wait(0x610200, 0x80000000, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x610200 & 0x80000000) == 0\n"); + NV_ERROR(dev, "0x610200 = 0x%08x\n", nv_rd32(dev, 0x610200)); + return -EBUSY; + } + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), + (nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0)) & ~0x00000003) | + NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED); + nv_wr32(dev, NV50_PDISPLAY_USER_PUT(0), 0); + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0x01000003 | + NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED); + nv_wr32(dev, 0x610300, nv_rd32(dev, 0x610300) & ~1); + + evo->dma.max = (4096/4) - 2; + evo->dma.put = 0; + evo->dma.cur = evo->dma.put; + evo->dma.free = evo->dma.max - evo->dma.cur; + + ret = RING_SPACE(evo, NOUVEAU_DMA_SKIPS); + if (ret) + return ret; + + for (i = 0; i < NOUVEAU_DMA_SKIPS; i++) + OUT_RING(evo, 0); + + ret = RING_SPACE(evo, 11); + if (ret) + return ret; + BEGIN_RING(evo, 0, NV50_EVO_UNK84, 2); + OUT_RING(evo, NV50_EVO_UNK84_NOTIFY_DISABLED); + OUT_RING(evo, NV50_EVO_DMA_NOTIFY_HANDLE_NONE); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, FB_DMA), 1); + OUT_RING(evo, NV50_EVO_CRTC_FB_DMA_HANDLE_NONE); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, UNK0800), 1); + OUT_RING(evo, 0); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, DISPLAY_START), 1); + OUT_RING(evo, 0); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(0, UNK082C), 1); + OUT_RING(evo, 0); + FIRE_RING(evo); + if (!nv_wait(0x640004, 0xffffffff, evo->dma.put << 2)) + NV_ERROR(dev, "evo pushbuf stalled\n"); + + /* enable clock change interrupts. */ + nv_wr32(dev, 0x610028, 0x00010001); + nv_wr32(dev, NV50_PDISPLAY_INTR_EN, (NV50_PDISPLAY_INTR_EN_CLK_UNK10 | + NV50_PDISPLAY_INTR_EN_CLK_UNK20 | + NV50_PDISPLAY_INTR_EN_CLK_UNK40)); + + /* enable hotplug interrupts */ + hpd_en[0] = hpd_en[1] = 0; + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct nouveau_connector *conn = nouveau_connector(connector); + struct dcb_gpio_entry *gpio; + + if (connector->connector_type != DRM_MODE_CONNECTOR_DVII && + connector->connector_type != DRM_MODE_CONNECTOR_DVID && + connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) + continue; + + gpio = nouveau_bios_gpio_entry(dev, conn->dcb->gpio_tag); + if (!gpio) + continue; + + hpd_en[gpio->line >> 4] |= (0x00010001 << (gpio->line & 0xf)); + } + + nv_wr32(dev, 0xe054, 0xffffffff); + nv_wr32(dev, 0xe050, hpd_en[0]); + if (dev_priv->chipset >= 0x90) { + nv_wr32(dev, 0xe074, 0xffffffff); + nv_wr32(dev, 0xe070, hpd_en[1]); + } + + return 0; +} + +static int nv50_display_disable(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_crtc *drm_crtc; + int ret, i; + + NV_DEBUG_KMS(dev, "\n"); + + list_for_each_entry(drm_crtc, &dev->mode_config.crtc_list, head) { + struct nouveau_crtc *crtc = nouveau_crtc(drm_crtc); + + nv50_crtc_blank(crtc, true); + } + + ret = RING_SPACE(dev_priv->evo, 2); + if (ret == 0) { + BEGIN_RING(dev_priv->evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(dev_priv->evo, 0); + } + FIRE_RING(dev_priv->evo); + + /* Almost like ack'ing a vblank interrupt, maybe in the spirit of + * cleaning up? + */ + list_for_each_entry(drm_crtc, &dev->mode_config.crtc_list, head) { + struct nouveau_crtc *crtc = nouveau_crtc(drm_crtc); + uint32_t mask = NV50_PDISPLAY_INTR_1_VBLANK_CRTC_(crtc->index); + + if (!crtc->base.enabled) + continue; + + nv_wr32(dev, NV50_PDISPLAY_INTR_1, mask); + if (!nv_wait(NV50_PDISPLAY_INTR_1, mask, mask)) { + NV_ERROR(dev, "timeout: (0x610024 & 0x%08x) == " + "0x%08x\n", mask, mask); + NV_ERROR(dev, "0x610024 = 0x%08x\n", + nv_rd32(dev, NV50_PDISPLAY_INTR_1)); + } + } + + nv_wr32(dev, NV50_PDISPLAY_CHANNEL_STAT(0), 0); + nv_wr32(dev, NV50_PDISPLAY_CTRL_STATE, 0); + if (!nv_wait(NV50_PDISPLAY_CHANNEL_STAT(0), 0x1e0000, 0)) { + NV_ERROR(dev, "timeout: (0x610200 & 0x1e0000) == 0\n"); + NV_ERROR(dev, "0x610200 = 0x%08x\n", + nv_rd32(dev, NV50_PDISPLAY_CHANNEL_STAT(0))); + } + + for (i = 0; i < 3; i++) { + if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_STATE(i), + NV50_PDISPLAY_SOR_DPMS_STATE_WAIT, 0)) { + NV_ERROR(dev, "timeout: SOR_DPMS_STATE_WAIT(%d) == 0\n", i); + NV_ERROR(dev, "SOR_DPMS_STATE(%d) = 0x%08x\n", i, + nv_rd32(dev, NV50_PDISPLAY_SOR_DPMS_STATE(i))); + } + } + + /* disable interrupts. */ + nv_wr32(dev, NV50_PDISPLAY_INTR_EN, 0x00000000); + + /* disable hotplug interrupts */ + nv_wr32(dev, 0xe054, 0xffffffff); + nv_wr32(dev, 0xe050, 0x00000000); + if (dev_priv->chipset >= 0x90) { + nv_wr32(dev, 0xe074, 0xffffffff); + nv_wr32(dev, 0xe070, 0x00000000); + } + return 0; +} + +int nv50_display_create(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct parsed_dcb *dcb = dev_priv->vbios->dcb; + uint32_t connector[16] = {}; + int ret, i; + + NV_DEBUG_KMS(dev, "\n"); + + /* init basic kernel modesetting */ + drm_mode_config_init(dev); + + /* Initialise some optional connector properties. */ + drm_mode_create_scaling_mode_property(dev); + drm_mode_create_dithering_property(dev); + + dev->mode_config.min_width = 0; + dev->mode_config.min_height = 0; + + dev->mode_config.funcs = (void *)&nouveau_mode_config_funcs; + + dev->mode_config.max_width = 8192; + dev->mode_config.max_height = 8192; + + dev->mode_config.fb_base = dev_priv->fb_phys; + + /* Create EVO channel */ + ret = nv50_evo_channel_new(dev, &dev_priv->evo); + if (ret) { + NV_ERROR(dev, "Error creating EVO channel: %d\n", ret); + return ret; + } + + /* Create CRTC objects */ + for (i = 0; i < 2; i++) + nv50_crtc_create(dev, i); + + /* We setup the encoders from the BIOS table */ + for (i = 0 ; i < dcb->entries; i++) { + struct dcb_entry *entry = &dcb->entry[i]; + + if (entry->location != DCB_LOC_ON_CHIP) { + NV_WARN(dev, "Off-chip encoder %d/%d unsupported\n", + entry->type, ffs(entry->or) - 1); + continue; + } + + switch (entry->type) { + case OUTPUT_TMDS: + case OUTPUT_LVDS: + case OUTPUT_DP: + nv50_sor_create(dev, entry); + break; + case OUTPUT_ANALOG: + nv50_dac_create(dev, entry); + break; + default: + NV_WARN(dev, "DCB encoder %d unknown\n", entry->type); + continue; + } + + connector[entry->connector] |= (1 << entry->type); + } + + /* It appears that DCB 3.0+ VBIOS has a connector table, however, + * I'm not 100% certain how to decode it correctly yet so just + * look at what encoders are present on each connector index and + * attempt to derive the connector type from that. + */ + for (i = 0 ; i < dcb->entries; i++) { + struct dcb_entry *entry = &dcb->entry[i]; + uint16_t encoders; + int type; + + encoders = connector[entry->connector]; + if (!(encoders & (1 << entry->type))) + continue; + connector[entry->connector] = 0; + + if (encoders & (1 << OUTPUT_DP)) { + type = DRM_MODE_CONNECTOR_DisplayPort; + } else if (encoders & (1 << OUTPUT_TMDS)) { + if (encoders & (1 << OUTPUT_ANALOG)) + type = DRM_MODE_CONNECTOR_DVII; + else + type = DRM_MODE_CONNECTOR_DVID; + } else if (encoders & (1 << OUTPUT_ANALOG)) { + type = DRM_MODE_CONNECTOR_VGA; + } else if (encoders & (1 << OUTPUT_LVDS)) { + type = DRM_MODE_CONNECTOR_LVDS; + } else { + type = DRM_MODE_CONNECTOR_Unknown; + } + + if (type == DRM_MODE_CONNECTOR_Unknown) + continue; + + nouveau_connector_create(dev, entry->connector, type); + } + + ret = nv50_display_init(dev); + if (ret) + return ret; + + return 0; +} + +int nv50_display_destroy(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + NV_DEBUG_KMS(dev, "\n"); + + drm_mode_config_cleanup(dev); + + nv50_display_disable(dev); + nv50_evo_channel_del(&dev_priv->evo); + + return 0; +} + +static inline uint32_t +nv50_display_mode_ctrl(struct drm_device *dev, bool sor, int or) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t mc; + + if (sor) { + if (dev_priv->chipset < 0x90 || + dev_priv->chipset == 0x92 || dev_priv->chipset == 0xa0) + mc = nv_rd32(dev, NV50_PDISPLAY_SOR_MODE_CTRL_P(or)); + else + mc = nv_rd32(dev, NV90_PDISPLAY_SOR_MODE_CTRL_P(or)); + } else { + mc = nv_rd32(dev, NV50_PDISPLAY_DAC_MODE_CTRL_P(or)); + } + + return mc; +} + +static int +nv50_display_irq_head(struct drm_device *dev, int *phead, + struct dcb_entry **pdcbent) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t unk30 = nv_rd32(dev, NV50_PDISPLAY_UNK30_CTRL); + uint32_t dac = 0, sor = 0; + int head, i, or = 0, type = OUTPUT_ANY; + + /* We're assuming that head 0 *or* head 1 will be active here, + * and not both. I'm not sure if the hw will even signal both + * ever, but it definitely shouldn't for us as we commit each + * CRTC separately, and submission will be blocked by the GPU + * until we handle each in turn. + */ + NV_DEBUG_KMS(dev, "0x610030: 0x%08x\n", unk30); + head = ffs((unk30 >> 9) & 3) - 1; + if (head < 0) + return -EINVAL; + + /* This assumes CRTCs are never bound to multiple encoders, which + * should be the case. + */ + for (i = 0; i < 3 && type == OUTPUT_ANY; i++) { + uint32_t mc = nv50_display_mode_ctrl(dev, false, i); + if (!(mc & (1 << head))) + continue; + + switch ((mc >> 8) & 0xf) { + case 0: type = OUTPUT_ANALOG; break; + case 1: type = OUTPUT_TV; break; + default: + NV_ERROR(dev, "unknown dac mode_ctrl: 0x%08x\n", dac); + return -1; + } + + or = i; + } + + for (i = 0; i < 4 && type == OUTPUT_ANY; i++) { + uint32_t mc = nv50_display_mode_ctrl(dev, true, i); + if (!(mc & (1 << head))) + continue; + + switch ((mc >> 8) & 0xf) { + case 0: type = OUTPUT_LVDS; break; + case 1: type = OUTPUT_TMDS; break; + case 2: type = OUTPUT_TMDS; break; + case 5: type = OUTPUT_TMDS; break; + case 8: type = OUTPUT_DP; break; + case 9: type = OUTPUT_DP; break; + default: + NV_ERROR(dev, "unknown sor mode_ctrl: 0x%08x\n", sor); + return -1; + } + + or = i; + } + + NV_DEBUG_KMS(dev, "type %d, or %d\n", type, or); + if (type == OUTPUT_ANY) { + NV_ERROR(dev, "unknown encoder!!\n"); + return -1; + } + + for (i = 0; i < dev_priv->vbios->dcb->entries; i++) { + struct dcb_entry *dcbent = &dev_priv->vbios->dcb->entry[i]; + + if (dcbent->type != type) + continue; + + if (!(dcbent->or & (1 << or))) + continue; + + *phead = head; + *pdcbent = dcbent; + return 0; + } + + NV_ERROR(dev, "no DCB entry for %d %d\n", dac != 0, or); + return 0; +} + +static uint32_t +nv50_display_script_select(struct drm_device *dev, struct dcb_entry *dcbent, + int pxclk) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_connector *nv_connector = NULL; + struct drm_encoder *encoder; + struct nvbios *bios = &dev_priv->VBIOS; + uint32_t mc, script = 0, or; + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (nv_encoder->dcb != dcbent) + continue; + + nv_connector = nouveau_encoder_connector_get(nv_encoder); + break; + } + + or = ffs(dcbent->or) - 1; + mc = nv50_display_mode_ctrl(dev, dcbent->type != OUTPUT_ANALOG, or); + switch (dcbent->type) { + case OUTPUT_LVDS: + script = (mc >> 8) & 0xf; + if (bios->pub.fp_no_ddc) { + if (bios->fp.dual_link) + script |= 0x0100; + if (bios->fp.if_is_24bit) + script |= 0x0200; + } else { + if (pxclk >= bios->fp.duallink_transition_clk) { + script |= 0x0100; + if (bios->fp.strapless_is_24bit & 2) + script |= 0x0200; + } else + if (bios->fp.strapless_is_24bit & 1) + script |= 0x0200; + + if (nv_connector && nv_connector->edid && + (nv_connector->edid->revision >= 4) && + (nv_connector->edid->input & 0x70) >= 0x20) + script |= 0x0200; + } + + if (nouveau_uscript_lvds >= 0) { + NV_INFO(dev, "override script 0x%04x with 0x%04x " + "for output LVDS-%d\n", script, + nouveau_uscript_lvds, or); + script = nouveau_uscript_lvds; + } + break; + case OUTPUT_TMDS: + script = (mc >> 8) & 0xf; + if (pxclk >= 165000) + script |= 0x0100; + + if (nouveau_uscript_tmds >= 0) { + NV_INFO(dev, "override script 0x%04x with 0x%04x " + "for output TMDS-%d\n", script, + nouveau_uscript_tmds, or); + script = nouveau_uscript_tmds; + } + break; + case OUTPUT_DP: + script = (mc >> 8) & 0xf; + break; + case OUTPUT_ANALOG: + script = 0xff; + break; + default: + NV_ERROR(dev, "modeset on unsupported output type!\n"); + break; + } + + return script; +} + +static void +nv50_display_vblank_crtc_handler(struct drm_device *dev, int crtc) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan; + struct list_head *entry, *tmp; + + list_for_each_safe(entry, tmp, &dev_priv->vbl_waiting) { + chan = list_entry(entry, struct nouveau_channel, nvsw.vbl_wait); + + nouveau_bo_wr32(chan->notifier_bo, chan->nvsw.vblsem_offset, + chan->nvsw.vblsem_rval); + list_del(&chan->nvsw.vbl_wait); + } +} + +static void +nv50_display_vblank_handler(struct drm_device *dev, uint32_t intr) +{ + intr &= NV50_PDISPLAY_INTR_1_VBLANK_CRTC; + + if (intr & NV50_PDISPLAY_INTR_1_VBLANK_CRTC_0) + nv50_display_vblank_crtc_handler(dev, 0); + + if (intr & NV50_PDISPLAY_INTR_1_VBLANK_CRTC_1) + nv50_display_vblank_crtc_handler(dev, 1); + + nv_wr32(dev, NV50_PDISPLAY_INTR_EN, nv_rd32(dev, + NV50_PDISPLAY_INTR_EN) & ~intr); + nv_wr32(dev, NV50_PDISPLAY_INTR_1, intr); +} + +static void +nv50_display_unk10_handler(struct drm_device *dev) +{ + struct dcb_entry *dcbent; + int head, ret; + + ret = nv50_display_irq_head(dev, &head, &dcbent); + if (ret) + goto ack; + + nv_wr32(dev, 0x619494, nv_rd32(dev, 0x619494) & ~8); + + nouveau_bios_run_display_table(dev, dcbent, 0, -1); + +ack: + nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK10); + nv_wr32(dev, 0x610030, 0x80000000); +} + +static void +nv50_display_unk20_handler(struct drm_device *dev) +{ + struct dcb_entry *dcbent; + uint32_t tmp, pclk, script; + int head, or, ret; + + ret = nv50_display_irq_head(dev, &head, &dcbent); + if (ret) + goto ack; + or = ffs(dcbent->or) - 1; + pclk = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(head, CLOCK)) & 0x3fffff; + script = nv50_display_script_select(dev, dcbent, pclk); + + NV_DEBUG_KMS(dev, "head %d pxclk: %dKHz\n", head, pclk); + + if (dcbent->type != OUTPUT_DP) + nouveau_bios_run_display_table(dev, dcbent, 0, -2); + + nv50_crtc_set_clock(dev, head, pclk); + + nouveau_bios_run_display_table(dev, dcbent, script, pclk); + + tmp = nv_rd32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head)); + tmp &= ~0x000000f; + nv_wr32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head), tmp); + + if (dcbent->type != OUTPUT_ANALOG) { + tmp = nv_rd32(dev, NV50_PDISPLAY_SOR_CLK_CTRL2(or)); + tmp &= ~0x00000f0f; + if (script & 0x0100) + tmp |= 0x00000101; + nv_wr32(dev, NV50_PDISPLAY_SOR_CLK_CTRL2(or), tmp); + } else { + nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL2(or), 0); + } + +ack: + nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK20); + nv_wr32(dev, 0x610030, 0x80000000); +} + +static void +nv50_display_unk40_handler(struct drm_device *dev) +{ + struct dcb_entry *dcbent; + int head, pclk, script, ret; + + ret = nv50_display_irq_head(dev, &head, &dcbent); + if (ret) + goto ack; + pclk = nv_rd32(dev, NV50_PDISPLAY_CRTC_P(head, CLOCK)) & 0x3fffff; + script = nv50_display_script_select(dev, dcbent, pclk); + + nouveau_bios_run_display_table(dev, dcbent, script, -pclk); + +ack: + nv_wr32(dev, NV50_PDISPLAY_INTR_1, NV50_PDISPLAY_INTR_1_CLK_UNK40); + nv_wr32(dev, 0x610030, 0x80000000); + nv_wr32(dev, 0x619494, nv_rd32(dev, 0x619494) | 8); +} + +void +nv50_display_irq_handler_bh(struct work_struct *work) +{ + struct drm_nouveau_private *dev_priv = + container_of(work, struct drm_nouveau_private, irq_work); + struct drm_device *dev = dev_priv->dev; + + for (;;) { + uint32_t intr0 = nv_rd32(dev, NV50_PDISPLAY_INTR_0); + uint32_t intr1 = nv_rd32(dev, NV50_PDISPLAY_INTR_1); + + NV_DEBUG_KMS(dev, "PDISPLAY_INTR_BH 0x%08x 0x%08x\n", intr0, intr1); + + if (intr1 & NV50_PDISPLAY_INTR_1_CLK_UNK10) + nv50_display_unk10_handler(dev); + else + if (intr1 & NV50_PDISPLAY_INTR_1_CLK_UNK20) + nv50_display_unk20_handler(dev); + else + if (intr1 & NV50_PDISPLAY_INTR_1_CLK_UNK40) + nv50_display_unk40_handler(dev); + else + break; + } + + nv_wr32(dev, NV03_PMC_INTR_EN_0, 1); +} + +static void +nv50_display_error_handler(struct drm_device *dev) +{ + uint32_t addr, data; + + nv_wr32(dev, NV50_PDISPLAY_INTR_0, 0x00010000); + addr = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_ADDR); + data = nv_rd32(dev, NV50_PDISPLAY_TRAPPED_DATA); + + NV_ERROR(dev, "EvoCh %d Mthd 0x%04x Data 0x%08x (0x%04x 0x%02x)\n", + 0, addr & 0xffc, data, addr >> 16, (addr >> 12) & 0xf); + + nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR, 0x90000000); +} + +static void +nv50_display_irq_hotplug(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_connector *connector; + const uint32_t gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 }; + uint32_t unplug_mask, plug_mask, change_mask; + uint32_t hpd0, hpd1 = 0; + + hpd0 = nv_rd32(dev, 0xe054) & nv_rd32(dev, 0xe050); + if (dev_priv->chipset >= 0x90) + hpd1 = nv_rd32(dev, 0xe074) & nv_rd32(dev, 0xe070); + + plug_mask = (hpd0 & 0x0000ffff) | (hpd1 << 16); + unplug_mask = (hpd0 >> 16) | (hpd1 & 0xffff0000); + change_mask = plug_mask | unplug_mask; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct drm_encoder_helper_funcs *helper; + struct nouveau_connector *nv_connector = + nouveau_connector(connector); + struct nouveau_encoder *nv_encoder; + struct dcb_gpio_entry *gpio; + uint32_t reg; + bool plugged; + + if (!nv_connector->dcb) + continue; + + gpio = nouveau_bios_gpio_entry(dev, nv_connector->dcb->gpio_tag); + if (!gpio || !(change_mask & (1 << gpio->line))) + continue; + + reg = nv_rd32(dev, gpio_reg[gpio->line >> 3]); + plugged = !!(reg & (4 << ((gpio->line & 7) << 2))); + NV_INFO(dev, "%splugged %s\n", plugged ? "" : "un", + drm_get_connector_name(connector)) ; + + if (!connector->encoder || !connector->encoder->crtc || + !connector->encoder->crtc->enabled) + continue; + nv_encoder = nouveau_encoder(connector->encoder); + helper = connector->encoder->helper_private; + + if (nv_encoder->dcb->type != OUTPUT_DP) + continue; + + if (plugged) + helper->dpms(connector->encoder, DRM_MODE_DPMS_ON); + else + helper->dpms(connector->encoder, DRM_MODE_DPMS_OFF); + } + + nv_wr32(dev, 0xe054, nv_rd32(dev, 0xe054)); + if (dev_priv->chipset >= 0x90) + nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074)); +} + +void +nv50_display_irq_handler(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t delayed = 0; + + while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_HOTPLUG) + nv50_display_irq_hotplug(dev); + + while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_DISPLAY) { + uint32_t intr0 = nv_rd32(dev, NV50_PDISPLAY_INTR_0); + uint32_t intr1 = nv_rd32(dev, NV50_PDISPLAY_INTR_1); + uint32_t clock; + + NV_DEBUG_KMS(dev, "PDISPLAY_INTR 0x%08x 0x%08x\n", intr0, intr1); + + if (!intr0 && !(intr1 & ~delayed)) + break; + + if (intr0 & 0x00010000) { + nv50_display_error_handler(dev); + intr0 &= ~0x00010000; + } + + if (intr1 & NV50_PDISPLAY_INTR_1_VBLANK_CRTC) { + nv50_display_vblank_handler(dev, intr1); + intr1 &= ~NV50_PDISPLAY_INTR_1_VBLANK_CRTC; + } + + clock = (intr1 & (NV50_PDISPLAY_INTR_1_CLK_UNK10 | + NV50_PDISPLAY_INTR_1_CLK_UNK20 | + NV50_PDISPLAY_INTR_1_CLK_UNK40)); + if (clock) { + nv_wr32(dev, NV03_PMC_INTR_EN_0, 0); + if (!work_pending(&dev_priv->irq_work)) + queue_work(dev_priv->wq, &dev_priv->irq_work); + delayed |= clock; + intr1 &= ~clock; + } + + if (intr0) { + NV_ERROR(dev, "unknown PDISPLAY_INTR_0: 0x%08x\n", intr0); + nv_wr32(dev, NV50_PDISPLAY_INTR_0, intr0); + } + + if (intr1) { + NV_ERROR(dev, + "unknown PDISPLAY_INTR_1: 0x%08x\n", intr1); + nv_wr32(dev, NV50_PDISPLAY_INTR_1, intr1); + } + } +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_dfp.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_dfp.c @@ -0,0 +1,623 @@ +/* + * Copyright 2003 NVIDIA, Corporation + * Copyright 2006 Dave Airlie + * Copyright 2007 Maarten Maathuis + * Copyright 2007-2009 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" + +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nouveau_hw.h" +#include "nvreg.h" + +#define FP_TG_CONTROL_ON (NV_PRAMDAC_FP_TG_CONTROL_DISPEN_POS | \ + NV_PRAMDAC_FP_TG_CONTROL_HSYNC_POS | \ + NV_PRAMDAC_FP_TG_CONTROL_VSYNC_POS) +#define FP_TG_CONTROL_OFF (NV_PRAMDAC_FP_TG_CONTROL_DISPEN_DISABLE | \ + NV_PRAMDAC_FP_TG_CONTROL_HSYNC_DISABLE | \ + NV_PRAMDAC_FP_TG_CONTROL_VSYNC_DISABLE) + +static inline bool is_fpc_off(uint32_t fpc) +{ + return ((fpc & (FP_TG_CONTROL_ON | FP_TG_CONTROL_OFF)) == + FP_TG_CONTROL_OFF); +} + +int nv04_dfp_get_bound_head(struct drm_device *dev, struct dcb_entry *dcbent) +{ + /* special case of nv_read_tmds to find crtc associated with an output. + * this does not give a correct answer for off-chip dvi, but there's no + * use for such an answer anyway + */ + int ramdac = (dcbent->or & OUTPUT_C) >> 2; + + NVWriteRAMDAC(dev, ramdac, NV_PRAMDAC_FP_TMDS_CONTROL, + NV_PRAMDAC_FP_TMDS_CONTROL_WRITE_DISABLE | 0x4); + return ((NVReadRAMDAC(dev, ramdac, NV_PRAMDAC_FP_TMDS_DATA) & 0x8) >> 3) ^ ramdac; +} + +void nv04_dfp_bind_head(struct drm_device *dev, struct dcb_entry *dcbent, + int head, bool dl) +{ + /* The BIOS scripts don't do this for us, sadly + * Luckily we do know the values ;-) + * + * head < 0 indicates we wish to force a setting with the overrideval + * (for VT restore etc.) + */ + + int ramdac = (dcbent->or & OUTPUT_C) >> 2; + uint8_t tmds04 = 0x80; + + if (head != ramdac) + tmds04 = 0x88; + + if (dcbent->type == OUTPUT_LVDS) + tmds04 |= 0x01; + + nv_write_tmds(dev, dcbent->or, 0, 0x04, tmds04); + + if (dl) /* dual link */ + nv_write_tmds(dev, dcbent->or, 1, 0x04, tmds04 ^ 0x08); +} + +void nv04_dfp_disable(struct drm_device *dev, int head) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg; + + if (NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL) & + FP_TG_CONTROL_ON) { + /* digital remnants must be cleaned before new crtc + * values programmed. delay is time for the vga stuff + * to realise it's in control again + */ + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL, + FP_TG_CONTROL_OFF); + msleep(50); + } + /* don't inadvertently turn it on when state written later */ + crtcstate[head].fp_control = FP_TG_CONTROL_OFF; +} + +void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_crtc *crtc; + struct nouveau_crtc *nv_crtc; + uint32_t *fpc; + + if (mode == DRM_MODE_DPMS_ON) { + nv_crtc = nouveau_crtc(encoder->crtc); + fpc = &dev_priv->mode_reg.crtc_reg[nv_crtc->index].fp_control; + + if (is_fpc_off(*fpc)) { + /* using saved value is ok, as (is_digital && dpms_on && + * fp_control==OFF) is (at present) *only* true when + * fpc's most recent change was by below "off" code + */ + *fpc = nv_crtc->dpms_saved_fp_control; + } + + nv_crtc->fp_users |= 1 << nouveau_encoder(encoder)->dcb->index; + NVWriteRAMDAC(dev, nv_crtc->index, NV_PRAMDAC_FP_TG_CONTROL, *fpc); + } else { + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + nv_crtc = nouveau_crtc(crtc); + fpc = &dev_priv->mode_reg.crtc_reg[nv_crtc->index].fp_control; + + nv_crtc->fp_users &= ~(1 << nouveau_encoder(encoder)->dcb->index); + if (!is_fpc_off(*fpc) && !nv_crtc->fp_users) { + nv_crtc->dpms_saved_fp_control = *fpc; + /* cut the FP output */ + *fpc &= ~FP_TG_CONTROL_ON; + *fpc |= FP_TG_CONTROL_OFF; + NVWriteRAMDAC(dev, nv_crtc->index, + NV_PRAMDAC_FP_TG_CONTROL, *fpc); + } + } + } +} + +static bool nv04_dfp_mode_fixup(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); + + /* For internal panels and gpu scaling on DVI we need the native mode */ + if (nv_connector->scaling_mode != DRM_MODE_SCALE_NONE) { + if (!nv_connector->native_mode) + return false; + nv_encoder->mode = *nv_connector->native_mode; + adjusted_mode->clock = nv_connector->native_mode->clock; + } else { + nv_encoder->mode = *adjusted_mode; + } + + return true; +} + +static void nv04_dfp_prepare_sel_clk(struct drm_device *dev, + struct nouveau_encoder *nv_encoder, int head) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_mode_state *state = &dev_priv->mode_reg; + uint32_t bits1618 = nv_encoder->dcb->or & OUTPUT_A ? 0x10000 : 0x40000; + + if (nv_encoder->dcb->location != DCB_LOC_ON_CHIP) + return; + + /* SEL_CLK is only used on the primary ramdac + * It toggles spread spectrum PLL output and sets the bindings of PLLs + * to heads on digital outputs + */ + if (head) + state->sel_clk |= bits1618; + else + state->sel_clk &= ~bits1618; + + /* nv30: + * bit 0 NVClk spread spectrum on/off + * bit 2 MemClk spread spectrum on/off + * bit 4 PixClk1 spread spectrum on/off toggle + * bit 6 PixClk2 spread spectrum on/off toggle + * + * nv40 (observations from bios behaviour and mmio traces): + * bits 4&6 as for nv30 + * bits 5&7 head dependent as for bits 4&6, but do not appear with 4&6; + * maybe a different spread mode + * bits 8&10 seen on dual-link dvi outputs, purpose unknown (set by POST scripts) + * The logic behind turning spread spectrum on/off in the first place, + * and which bit-pair to use, is unclear on nv40 (for earlier cards, the fp table + * entry has the necessary info) + */ + if (nv_encoder->dcb->type == OUTPUT_LVDS && dev_priv->saved_reg.sel_clk & 0xf0) { + int shift = (dev_priv->saved_reg.sel_clk & 0x50) ? 0 : 1; + + state->sel_clk &= ~0xf0; + state->sel_clk |= (head ? 0x40 : 0x10) << shift; + } +} + +static void nv04_dfp_prepare(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int head = nouveau_crtc(encoder->crtc)->index; + struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg; + uint8_t *cr_lcd = &crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX]; + uint8_t *cr_lcd_oth = &crtcstate[head ^ 1].CRTC[NV_CIO_CRE_LCD__INDEX]; + + helper->dpms(encoder, DRM_MODE_DPMS_OFF); + + nv04_dfp_prepare_sel_clk(dev, nv_encoder, head); + + /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f) + * at LCD__INDEX which we don't alter + */ + if (!(*cr_lcd & 0x44)) { + *cr_lcd = 0x3; + + if (nv_two_heads(dev)) { + if (nv_encoder->dcb->location == DCB_LOC_ON_CHIP) + *cr_lcd |= head ? 0x0 : 0x8; + else { + *cr_lcd |= (nv_encoder->dcb->or << 4) & 0x30; + if (nv_encoder->dcb->type == OUTPUT_LVDS) + *cr_lcd |= 0x30; + if ((*cr_lcd & 0x30) == (*cr_lcd_oth & 0x30)) { + /* avoid being connected to both crtcs */ + *cr_lcd_oth &= ~0x30; + NVWriteVgaCrtc(dev, head ^ 1, + NV_CIO_CRE_LCD__INDEX, + *cr_lcd_oth); + } + } + } + } +} + + +static void nv04_dfp_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc); + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + struct nv04_crtc_reg *savep = &dev_priv->saved_reg.crtc_reg[nv_crtc->index]; + struct nouveau_connector *nv_connector = nouveau_crtc_connector_get(nv_crtc); + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_display_mode *output_mode = &nv_encoder->mode; + uint32_t mode_ratio, panel_ratio; + + NV_DEBUG_KMS(dev, "Output mode on CRTC %d:\n", nv_crtc->index); + drm_mode_debug_printmodeline(output_mode); + + /* Initialize the FP registers in this CRTC. */ + regp->fp_horiz_regs[FP_DISPLAY_END] = output_mode->hdisplay - 1; + regp->fp_horiz_regs[FP_TOTAL] = output_mode->htotal - 1; + if (!nv_gf4_disp_arch(dev) || + (output_mode->hsync_start - output_mode->hdisplay) >= + dev_priv->vbios->digital_min_front_porch) + regp->fp_horiz_regs[FP_CRTC] = output_mode->hdisplay; + else + regp->fp_horiz_regs[FP_CRTC] = output_mode->hsync_start - dev_priv->vbios->digital_min_front_porch - 1; + regp->fp_horiz_regs[FP_SYNC_START] = output_mode->hsync_start - 1; + regp->fp_horiz_regs[FP_SYNC_END] = output_mode->hsync_end - 1; + regp->fp_horiz_regs[FP_VALID_START] = output_mode->hskew; + regp->fp_horiz_regs[FP_VALID_END] = output_mode->hdisplay - 1; + + regp->fp_vert_regs[FP_DISPLAY_END] = output_mode->vdisplay - 1; + regp->fp_vert_regs[FP_TOTAL] = output_mode->vtotal - 1; + regp->fp_vert_regs[FP_CRTC] = output_mode->vtotal - 5 - 1; + regp->fp_vert_regs[FP_SYNC_START] = output_mode->vsync_start - 1; + regp->fp_vert_regs[FP_SYNC_END] = output_mode->vsync_end - 1; + regp->fp_vert_regs[FP_VALID_START] = 0; + regp->fp_vert_regs[FP_VALID_END] = output_mode->vdisplay - 1; + + /* bit26: a bit seen on some g7x, no as yet discernable purpose */ + regp->fp_control = NV_PRAMDAC_FP_TG_CONTROL_DISPEN_POS | + (savep->fp_control & (1 << 26 | NV_PRAMDAC_FP_TG_CONTROL_READ_PROG)); + /* Deal with vsync/hsync polarity */ + /* LVDS screens do set this, but modes with +ve syncs are very rare */ + if (output_mode->flags & DRM_MODE_FLAG_PVSYNC) + regp->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_VSYNC_POS; + if (output_mode->flags & DRM_MODE_FLAG_PHSYNC) + regp->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_HSYNC_POS; + /* panel scaling first, as native would get set otherwise */ + if (nv_connector->scaling_mode == DRM_MODE_SCALE_NONE || + nv_connector->scaling_mode == DRM_MODE_SCALE_CENTER) /* panel handles it */ + regp->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_MODE_CENTER; + else if (adjusted_mode->hdisplay == output_mode->hdisplay && + adjusted_mode->vdisplay == output_mode->vdisplay) /* native mode */ + regp->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_MODE_NATIVE; + else /* gpu needs to scale */ + regp->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_MODE_SCALE; + if (nvReadEXTDEV(dev, NV_PEXTDEV_BOOT_0) & NV_PEXTDEV_BOOT_0_STRAP_FP_IFACE_12BIT) + regp->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_WIDTH_12; + if (nv_encoder->dcb->location != DCB_LOC_ON_CHIP && + output_mode->clock > 165000) + regp->fp_control |= (2 << 24); + if (nv_encoder->dcb->type == OUTPUT_LVDS) { + bool duallink, dummy; + + nouveau_bios_parse_lvds_table(dev, nv_connector->native_mode-> + clock, &duallink, &dummy); + if (duallink) + regp->fp_control |= (8 << 28); + } else + if (output_mode->clock > 165000) + regp->fp_control |= (8 << 28); + + regp->fp_debug_0 = NV_PRAMDAC_FP_DEBUG_0_YWEIGHT_ROUND | + NV_PRAMDAC_FP_DEBUG_0_XWEIGHT_ROUND | + NV_PRAMDAC_FP_DEBUG_0_YINTERP_BILINEAR | + NV_PRAMDAC_FP_DEBUG_0_XINTERP_BILINEAR | + NV_RAMDAC_FP_DEBUG_0_TMDS_ENABLED | + NV_PRAMDAC_FP_DEBUG_0_YSCALE_ENABLE | + NV_PRAMDAC_FP_DEBUG_0_XSCALE_ENABLE; + + /* We want automatic scaling */ + regp->fp_debug_1 = 0; + /* This can override HTOTAL and VTOTAL */ + regp->fp_debug_2 = 0; + + /* Use 20.12 fixed point format to avoid floats */ + mode_ratio = (1 << 12) * adjusted_mode->hdisplay / adjusted_mode->vdisplay; + panel_ratio = (1 << 12) * output_mode->hdisplay / output_mode->vdisplay; + /* if ratios are equal, SCALE_ASPECT will automatically (and correctly) + * get treated the same as SCALE_FULLSCREEN */ + if (nv_connector->scaling_mode == DRM_MODE_SCALE_ASPECT && + mode_ratio != panel_ratio) { + uint32_t diff, scale; + bool divide_by_2 = nv_gf4_disp_arch(dev); + + if (mode_ratio < panel_ratio) { + /* vertical needs to expand to glass size (automatic) + * horizontal needs to be scaled at vertical scale factor + * to maintain aspect */ + + scale = (1 << 12) * adjusted_mode->vdisplay / output_mode->vdisplay; + regp->fp_debug_1 = NV_PRAMDAC_FP_DEBUG_1_XSCALE_TESTMODE_ENABLE | + XLATE(scale, divide_by_2, NV_PRAMDAC_FP_DEBUG_1_XSCALE_VALUE); + + /* restrict area of screen used, horizontally */ + diff = output_mode->hdisplay - + output_mode->vdisplay * mode_ratio / (1 << 12); + regp->fp_horiz_regs[FP_VALID_START] += diff / 2; + regp->fp_horiz_regs[FP_VALID_END] -= diff / 2; + } + + if (mode_ratio > panel_ratio) { + /* horizontal needs to expand to glass size (automatic) + * vertical needs to be scaled at horizontal scale factor + * to maintain aspect */ + + scale = (1 << 12) * adjusted_mode->hdisplay / output_mode->hdisplay; + regp->fp_debug_1 = NV_PRAMDAC_FP_DEBUG_1_YSCALE_TESTMODE_ENABLE | + XLATE(scale, divide_by_2, NV_PRAMDAC_FP_DEBUG_1_YSCALE_VALUE); + + /* restrict area of screen used, vertically */ + diff = output_mode->vdisplay - + (1 << 12) * output_mode->hdisplay / mode_ratio; + regp->fp_vert_regs[FP_VALID_START] += diff / 2; + regp->fp_vert_regs[FP_VALID_END] -= diff / 2; + } + } + + /* Output property. */ + if (nv_connector->use_dithering) { + if (dev_priv->chipset == 0x11) + regp->dither = savep->dither | 0x00010000; + else { + int i; + regp->dither = savep->dither | 0x00000001; + for (i = 0; i < 3; i++) { + regp->dither_regs[i] = 0xe4e4e4e4; + regp->dither_regs[i + 3] = 0x44444444; + } + } + } else { + if (dev_priv->chipset != 0x11) { + /* reset them */ + int i; + for (i = 0; i < 3; i++) { + regp->dither_regs[i] = savep->dither_regs[i]; + regp->dither_regs[i + 3] = savep->dither_regs[i + 3]; + } + } + regp->dither = savep->dither; + } + + regp->fp_margin_color = 0; +} + +static void nv04_dfp_commit(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc); + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct dcb_entry *dcbe = nv_encoder->dcb; + int head = nouveau_crtc(encoder->crtc)->index; + + NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n", + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), + nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); + + if (dcbe->type == OUTPUT_TMDS) + run_tmds_table(dev, dcbe, head, nv_encoder->mode.clock); + else if (dcbe->type == OUTPUT_LVDS) + call_lvds_script(dev, dcbe, head, LVDS_RESET, nv_encoder->mode.clock); + + /* update fp_control state for any changes made by scripts, + * so correct value is written at DPMS on */ + dev_priv->mode_reg.crtc_reg[head].fp_control = + NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL); + + /* This could use refinement for flatpanels, but it should work this way */ + if (dev_priv->chipset < 0x44) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + nv04_dac_output_offset(encoder), 0xf0000000); + else + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + nv04_dac_output_offset(encoder), 0x00100000); + + helper->dpms(encoder, DRM_MODE_DPMS_ON); + + NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n", + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), + nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); +} + +static inline bool is_powersaving_dpms(int mode) +{ + return (mode != DRM_MODE_DPMS_ON); +} + +static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct drm_crtc *crtc = encoder->crtc; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + bool was_powersaving = is_powersaving_dpms(nv_encoder->last_dpms); + + if (nv_encoder->last_dpms == mode) + return; + nv_encoder->last_dpms = mode; + + NV_INFO(dev, "Setting dpms mode %d on lvds encoder (output %d)\n", + mode, nv_encoder->dcb->index); + + if (was_powersaving && is_powersaving_dpms(mode)) + return; + + if (nv_encoder->dcb->lvdsconf.use_power_scripts) { + struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); + + /* when removing an output, crtc may not be set, but PANEL_OFF + * must still be run + */ + int head = crtc ? nouveau_crtc(crtc)->index : + nv04_dfp_get_bound_head(dev, nv_encoder->dcb); + + if (mode == DRM_MODE_DPMS_ON) { + if (!nv_connector->native_mode) { + NV_ERROR(dev, "Not turning on LVDS without native mode\n"); + return; + } + call_lvds_script(dev, nv_encoder->dcb, head, + LVDS_PANEL_ON, nv_connector->native_mode->clock); + } else + /* pxclk of 0 is fine for PANEL_OFF, and for a + * disconnected LVDS encoder there is no native_mode + */ + call_lvds_script(dev, nv_encoder->dcb, head, + LVDS_PANEL_OFF, 0); + } + + nv04_dfp_update_fp_control(encoder, mode); + + if (mode == DRM_MODE_DPMS_ON) + nv04_dfp_prepare_sel_clk(dev, nv_encoder, nouveau_crtc(crtc)->index); + else { + dev_priv->mode_reg.sel_clk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK); + dev_priv->mode_reg.sel_clk &= ~0xf0; + } + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK, dev_priv->mode_reg.sel_clk); +} + +static void nv04_tmds_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (nv_encoder->last_dpms == mode) + return; + nv_encoder->last_dpms = mode; + + NV_INFO(dev, "Setting dpms mode %d on tmds encoder (output %d)\n", + mode, nv_encoder->dcb->index); + + nv04_dfp_update_fp_control(encoder, mode); +} + +static void nv04_dfp_save(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + + if (nv_two_heads(dev)) + nv_encoder->restore.head = + nv04_dfp_get_bound_head(dev, nv_encoder->dcb); +} + +static void nv04_dfp_restore(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int head = nv_encoder->restore.head; + + if (nv_encoder->dcb->type == OUTPUT_LVDS) { + struct drm_display_mode *native_mode = nouveau_encoder_connector_get(nv_encoder)->native_mode; + if (native_mode) + call_lvds_script(dev, nv_encoder->dcb, head, LVDS_PANEL_ON, + native_mode->clock); + else + NV_ERROR(dev, "Not restoring LVDS without native mode\n"); + + } else if (nv_encoder->dcb->type == OUTPUT_TMDS) { + int clock = nouveau_hw_pllvals_to_clk + (&dev_priv->saved_reg.crtc_reg[head].pllvals); + + run_tmds_table(dev, nv_encoder->dcb, head, clock); + } + + nv_encoder->last_dpms = NV_DPMS_CLEARED; +} + +static void nv04_dfp_destroy(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + NV_DEBUG_KMS(encoder->dev, "\n"); + + drm_encoder_cleanup(encoder); + kfree(nv_encoder); +} + +static const struct drm_encoder_helper_funcs nv04_lvds_helper_funcs = { + .dpms = nv04_lvds_dpms, + .save = nv04_dfp_save, + .restore = nv04_dfp_restore, + .mode_fixup = nv04_dfp_mode_fixup, + .prepare = nv04_dfp_prepare, + .commit = nv04_dfp_commit, + .mode_set = nv04_dfp_mode_set, + .detect = NULL, +}; + +static const struct drm_encoder_helper_funcs nv04_tmds_helper_funcs = { + .dpms = nv04_tmds_dpms, + .save = nv04_dfp_save, + .restore = nv04_dfp_restore, + .mode_fixup = nv04_dfp_mode_fixup, + .prepare = nv04_dfp_prepare, + .commit = nv04_dfp_commit, + .mode_set = nv04_dfp_mode_set, + .detect = NULL, +}; + +static const struct drm_encoder_funcs nv04_dfp_funcs = { + .destroy = nv04_dfp_destroy, +}; + +int nv04_dfp_create(struct drm_device *dev, struct dcb_entry *entry) +{ + const struct drm_encoder_helper_funcs *helper; + struct drm_encoder *encoder; + struct nouveau_encoder *nv_encoder = NULL; + int type; + + switch (entry->type) { + case OUTPUT_TMDS: + type = DRM_MODE_ENCODER_TMDS; + helper = &nv04_tmds_helper_funcs; + break; + case OUTPUT_LVDS: + type = DRM_MODE_ENCODER_LVDS; + helper = &nv04_lvds_helper_funcs; + break; + default: + return -EINVAL; + } + + nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL); + if (!nv_encoder) + return -ENOMEM; + + encoder = to_drm_encoder(nv_encoder); + + nv_encoder->dcb = entry; + nv_encoder->or = ffs(entry->or) - 1; + + drm_encoder_init(dev, encoder, &nv04_dfp_funcs, type); + drm_encoder_helper_add(encoder, helper); + + encoder->possible_crtcs = entry->heads; + encoder->possible_clones = 0; + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_debugfs.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_debugfs.c @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2009 Red Hat + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + * Ben Skeggs + */ + +#include + +#include "drmP.h" +#include "nouveau_drv.h" + +static int +nouveau_debugfs_channel_info(struct seq_file *m, void *data) +{ + struct drm_info_node *node = (struct drm_info_node *) m->private; + struct nouveau_channel *chan = node->info_ent->data; + + seq_printf(m, "channel id : %d\n", chan->id); + + seq_printf(m, "cpu fifo state:\n"); + seq_printf(m, " base: 0x%08x\n", chan->pushbuf_base); + seq_printf(m, " max: 0x%08x\n", chan->dma.max << 2); + seq_printf(m, " cur: 0x%08x\n", chan->dma.cur << 2); + seq_printf(m, " put: 0x%08x\n", chan->dma.put << 2); + seq_printf(m, " free: 0x%08x\n", chan->dma.free << 2); + + seq_printf(m, "gpu fifo state:\n"); + seq_printf(m, " get: 0x%08x\n", + nvchan_rd32(chan, chan->user_get)); + seq_printf(m, " put: 0x%08x\n", + nvchan_rd32(chan, chan->user_put)); + + seq_printf(m, "last fence : %d\n", chan->fence.sequence); + seq_printf(m, "last signalled: %d\n", chan->fence.sequence_ack); + return 0; +} + +int +nouveau_debugfs_channel_init(struct nouveau_channel *chan) +{ + struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct drm_minor *minor = chan->dev->primary; + int ret; + + if (!dev_priv->debugfs.channel_root) { + dev_priv->debugfs.channel_root = + debugfs_create_dir("channel", minor->debugfs_root); + if (!dev_priv->debugfs.channel_root) + return -ENOENT; + } + + snprintf(chan->debugfs.name, 32, "%d", chan->id); + chan->debugfs.info.name = chan->debugfs.name; + chan->debugfs.info.show = nouveau_debugfs_channel_info; + chan->debugfs.info.driver_features = 0; + chan->debugfs.info.data = chan; + + ret = drm_debugfs_create_files(&chan->debugfs.info, 1, + dev_priv->debugfs.channel_root, + chan->dev->primary); + if (ret == 0) + chan->debugfs.active = true; + return ret; +} + +void +nouveau_debugfs_channel_fini(struct nouveau_channel *chan) +{ + struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + + if (!chan->debugfs.active) + return; + + drm_debugfs_remove_files(&chan->debugfs.info, 1, chan->dev->primary); + chan->debugfs.active = false; + + if (chan == dev_priv->channel) { + debugfs_remove(dev_priv->debugfs.channel_root); + dev_priv->debugfs.channel_root = NULL; + } +} + +static int +nouveau_debugfs_chipset_info(struct seq_file *m, void *data) +{ + struct drm_info_node *node = (struct drm_info_node *) m->private; + struct drm_minor *minor = node->minor; + struct drm_device *dev = minor->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t ppci_0; + + ppci_0 = nv_rd32(dev, dev_priv->chipset >= 0x40 ? 0x88000 : 0x1800); + + seq_printf(m, "PMC_BOOT_0: 0x%08x\n", nv_rd32(dev, NV03_PMC_BOOT_0)); + seq_printf(m, "PCI ID : 0x%04x:0x%04x\n", + ppci_0 & 0xffff, ppci_0 >> 16); + return 0; +} + +static int +nouveau_debugfs_memory_info(struct seq_file *m, void *data) +{ + struct drm_info_node *node = (struct drm_info_node *) m->private; + struct drm_minor *minor = node->minor; + struct drm_device *dev = minor->dev; + + seq_printf(m, "VRAM total: %dKiB\n", + (int)(nouveau_mem_fb_amount(dev) >> 10)); + return 0; +} + +static struct drm_info_list nouveau_debugfs_list[] = { + { "chipset", nouveau_debugfs_chipset_info, 0, NULL }, + { "memory", nouveau_debugfs_memory_info, 0, NULL }, +}; +#define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list) + +int +nouveau_debugfs_init(struct drm_minor *minor) +{ + drm_debugfs_create_files(nouveau_debugfs_list, NOUVEAU_DEBUGFS_ENTRIES, + minor->debugfs_root, minor); + return 0; +} + +void +nouveau_debugfs_takedown(struct drm_minor *minor) +{ + drm_debugfs_remove_files(nouveau_debugfs_list, NOUVEAU_DEBUGFS_ENTRIES, + minor); +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_bios.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_bios.c @@ -0,0 +1,6066 @@ +/* + * Copyright 2005-2006 Erik Waling + * Copyright 2006 Stephane Marchesin + * Copyright 2007-2009 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "drmP.h" +#define NV_DEBUG_NOTRACE +#include "nouveau_drv.h" +#include "nouveau_hw.h" + +/* these defines are made up */ +#define NV_CIO_CRE_44_HEADA 0x0 +#define NV_CIO_CRE_44_HEADB 0x3 +#define FEATURE_MOBILE 0x10 /* also FEATURE_QUADRO for BMP */ +#define LEGACY_I2C_CRT 0x80 +#define LEGACY_I2C_PANEL 0x81 +#define LEGACY_I2C_TV 0x82 + +#define EDID1_LEN 128 + +#define BIOSLOG(sip, fmt, arg...) NV_DEBUG(sip->dev, fmt, ##arg) +#define LOG_OLD_VALUE(x) + +#define ROM16(x) le16_to_cpu(*(uint16_t *)&(x)) +#define ROM32(x) le32_to_cpu(*(uint32_t *)&(x)) + +struct init_exec { + bool execute; + bool repeat; +}; + +static bool nv_cksum(const uint8_t *data, unsigned int length) +{ + /* + * There's a few checksums in the BIOS, so here's a generic checking + * function. + */ + int i; + uint8_t sum = 0; + + for (i = 0; i < length; i++) + sum += data[i]; + + if (sum) + return true; + + return false; +} + +static int +score_vbios(struct drm_device *dev, const uint8_t *data, const bool writeable) +{ + if (!(data[0] == 0x55 && data[1] == 0xAA)) { + NV_TRACEWARN(dev, "... BIOS signature not found\n"); + return 0; + } + + if (nv_cksum(data, data[2] * 512)) { + NV_TRACEWARN(dev, "... BIOS checksum invalid\n"); + /* if a ro image is somewhat bad, it's probably all rubbish */ + return writeable ? 2 : 1; + } else + NV_TRACE(dev, "... appears to be valid\n"); + + return 3; +} + +static void load_vbios_prom(struct drm_device *dev, uint8_t *data) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t pci_nv_20, save_pci_nv_20; + int pcir_ptr; + int i; + + if (dev_priv->card_type >= NV_50) + pci_nv_20 = 0x88050; + else + pci_nv_20 = NV_PBUS_PCI_NV_20; + + /* enable ROM access */ + save_pci_nv_20 = nvReadMC(dev, pci_nv_20); + nvWriteMC(dev, pci_nv_20, + save_pci_nv_20 & ~NV_PBUS_PCI_NV_20_ROM_SHADOW_ENABLED); + + /* bail if no rom signature */ + if (nv_rd08(dev, NV_PROM_OFFSET) != 0x55 || + nv_rd08(dev, NV_PROM_OFFSET + 1) != 0xaa) + goto out; + + /* additional check (see note below) - read PCI record header */ + pcir_ptr = nv_rd08(dev, NV_PROM_OFFSET + 0x18) | + nv_rd08(dev, NV_PROM_OFFSET + 0x19) << 8; + if (nv_rd08(dev, NV_PROM_OFFSET + pcir_ptr) != 'P' || + nv_rd08(dev, NV_PROM_OFFSET + pcir_ptr + 1) != 'C' || + nv_rd08(dev, NV_PROM_OFFSET + pcir_ptr + 2) != 'I' || + nv_rd08(dev, NV_PROM_OFFSET + pcir_ptr + 3) != 'R') + goto out; + + /* on some 6600GT/6800LE prom reads are messed up. nvclock alleges a + * a good read may be obtained by waiting or re-reading (cargocult: 5x) + * each byte. we'll hope pramin has something usable instead + */ + for (i = 0; i < NV_PROM_SIZE; i++) + data[i] = nv_rd08(dev, NV_PROM_OFFSET + i); + +out: + /* disable ROM access */ + nvWriteMC(dev, pci_nv_20, + save_pci_nv_20 | NV_PBUS_PCI_NV_20_ROM_SHADOW_ENABLED); +} + +static void load_vbios_pramin(struct drm_device *dev, uint8_t *data) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t old_bar0_pramin = 0; + int i; + + if (dev_priv->card_type >= NV_50) { + uint32_t vbios_vram = (nv_rd32(dev, 0x619f04) & ~0xff) << 8; + + if (!vbios_vram) + vbios_vram = (nv_rd32(dev, 0x1700) << 16) + 0xf0000; + + old_bar0_pramin = nv_rd32(dev, 0x1700); + nv_wr32(dev, 0x1700, vbios_vram >> 16); + } + + /* bail if no rom signature */ + if (nv_rd08(dev, NV_PRAMIN_OFFSET) != 0x55 || + nv_rd08(dev, NV_PRAMIN_OFFSET + 1) != 0xaa) + goto out; + + for (i = 0; i < NV_PROM_SIZE; i++) + data[i] = nv_rd08(dev, NV_PRAMIN_OFFSET + i); + +out: + if (dev_priv->card_type >= NV_50) + nv_wr32(dev, 0x1700, old_bar0_pramin); +} + +static void load_vbios_pci(struct drm_device *dev, uint8_t *data) +{ + void __iomem *rom = NULL; + size_t rom_len; + int ret; + + ret = pci_enable_rom(dev->pdev); + if (ret) + return; + + rom = pci_map_rom(dev->pdev, &rom_len); + if (!rom) + goto out; + memcpy_fromio(data, rom, rom_len); + pci_unmap_rom(dev->pdev, rom); + +out: + pci_disable_rom(dev->pdev); +} + +struct methods { + const char desc[8]; + void (*loadbios)(struct drm_device *, uint8_t *); + const bool rw; +}; + +static struct methods nv04_methods[] = { + { "PROM", load_vbios_prom, false }, + { "PRAMIN", load_vbios_pramin, true }, + { "PCIROM", load_vbios_pci, true }, +}; + +static struct methods nv50_methods[] = { + { "PRAMIN", load_vbios_pramin, true }, + { "PROM", load_vbios_prom, false }, + { "PCIROM", load_vbios_pci, true }, +}; + +#define METHODCNT 3 + +static bool NVShadowVBIOS(struct drm_device *dev, uint8_t *data) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct methods *methods; + int i; + int testscore = 3; + int scores[METHODCNT]; + + if (nouveau_vbios) { + methods = nv04_methods; + for (i = 0; i < METHODCNT; i++) + if (!strcasecmp(nouveau_vbios, methods[i].desc)) + break; + + if (i < METHODCNT) { + NV_INFO(dev, "Attempting to use BIOS image from %s\n", + methods[i].desc); + + methods[i].loadbios(dev, data); + if (score_vbios(dev, data, methods[i].rw)) + return true; + } + + NV_ERROR(dev, "VBIOS source \'%s\' invalid\n", nouveau_vbios); + } + + if (dev_priv->card_type < NV_50) + methods = nv04_methods; + else + methods = nv50_methods; + + for (i = 0; i < METHODCNT; i++) { + NV_TRACE(dev, "Attempting to load BIOS image from %s\n", + methods[i].desc); + data[0] = data[1] = 0; /* avoid reuse of previous image */ + methods[i].loadbios(dev, data); + scores[i] = score_vbios(dev, data, methods[i].rw); + if (scores[i] == testscore) + return true; + } + + while (--testscore > 0) { + for (i = 0; i < METHODCNT; i++) { + if (scores[i] == testscore) { + NV_TRACE(dev, "Using BIOS image from %s\n", + methods[i].desc); + methods[i].loadbios(dev, data); + return true; + } + } + } + + NV_ERROR(dev, "No valid BIOS image found\n"); + return false; +} + +struct init_tbl_entry { + char *name; + uint8_t id; + int (*handler)(struct nvbios *, uint16_t, struct init_exec *); +}; + +struct bit_entry { + uint8_t id[2]; + uint16_t length; + uint16_t offset; +}; + +static int parse_init_table(struct nvbios *, unsigned int, struct init_exec *); + +#define MACRO_INDEX_SIZE 2 +#define MACRO_SIZE 8 +#define CONDITION_SIZE 12 +#define IO_FLAG_CONDITION_SIZE 9 +#define IO_CONDITION_SIZE 5 +#define MEM_INIT_SIZE 66 + +static void still_alive(void) +{ +#if 0 + sync(); + msleep(2); +#endif +} + +static uint32_t +munge_reg(struct nvbios *bios, uint32_t reg) +{ + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + struct dcb_entry *dcbent = bios->display.output; + + if (dev_priv->card_type < NV_50) + return reg; + + if (reg & 0x40000000) { + BUG_ON(!dcbent); + + reg += (ffs(dcbent->or) - 1) * 0x800; + if ((reg & 0x20000000) && !(dcbent->sorconf.link & 1)) + reg += 0x00000080; + } + + reg &= ~0x60000000; + return reg; +} + +static int +valid_reg(struct nvbios *bios, uint32_t reg) +{ + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + struct drm_device *dev = bios->dev; + + /* C51 has misaligned regs on purpose. Marvellous */ + if (reg & 0x2 || + (reg & 0x1 && dev_priv->VBIOS.pub.chip_version != 0x51)) + NV_ERROR(dev, "======= misaligned reg 0x%08X =======\n", reg); + + /* warn on C51 regs that haven't been verified accessible in tracing */ + if (reg & 0x1 && dev_priv->VBIOS.pub.chip_version == 0x51 && + reg != 0x130d && reg != 0x1311 && reg != 0x60081d) + NV_WARN(dev, "=== C51 misaligned reg 0x%08X not verified ===\n", + reg); + + if (reg >= (8*1024*1024)) { + NV_ERROR(dev, "=== reg 0x%08x out of mapped bounds ===\n", reg); + return 0; + } + + return 1; +} + +static bool +valid_idx_port(struct nvbios *bios, uint16_t port) +{ + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + struct drm_device *dev = bios->dev; + + /* + * If adding more ports here, the read/write functions below will need + * updating so that the correct mmio range (PRMCIO, PRMDIO, PRMVIO) is + * used for the port in question + */ + if (dev_priv->card_type < NV_50) { + if (port == NV_CIO_CRX__COLOR) + return true; + if (port == NV_VIO_SRX) + return true; + } else { + if (port == NV_CIO_CRX__COLOR) + return true; + } + + NV_ERROR(dev, "========== unknown indexed io port 0x%04X ==========\n", + port); + + return false; +} + +static bool +valid_port(struct nvbios *bios, uint16_t port) +{ + struct drm_device *dev = bios->dev; + + /* + * If adding more ports here, the read/write functions below will need + * updating so that the correct mmio range (PRMCIO, PRMDIO, PRMVIO) is + * used for the port in question + */ + if (port == NV_VIO_VSE2) + return true; + + NV_ERROR(dev, "========== unknown io port 0x%04X ==========\n", port); + + return false; +} + +static uint32_t +bios_rd32(struct nvbios *bios, uint32_t reg) +{ + uint32_t data; + + reg = munge_reg(bios, reg); + if (!valid_reg(bios, reg)) + return 0; + + /* + * C51 sometimes uses regs with bit0 set in the address. For these + * cases there should exist a translation in a BIOS table to an IO + * port address which the BIOS uses for accessing the reg + * + * These only seem to appear for the power control regs to a flat panel, + * and the GPIO regs at 0x60081*. In C51 mmio traces the normal regs + * for 0x1308 and 0x1310 are used - hence the mask below. An S3 + * suspend-resume mmio trace from a C51 will be required to see if this + * is true for the power microcode in 0x14.., or whether the direct IO + * port access method is needed + */ + if (reg & 0x1) + reg &= ~0x1; + + data = nv_rd32(bios->dev, reg); + + BIOSLOG(bios, " Read: Reg: 0x%08X, Data: 0x%08X\n", reg, data); + + return data; +} + +static void +bios_wr32(struct nvbios *bios, uint32_t reg, uint32_t data) +{ + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + + reg = munge_reg(bios, reg); + if (!valid_reg(bios, reg)) + return; + + /* see note in bios_rd32 */ + if (reg & 0x1) + reg &= 0xfffffffe; + + LOG_OLD_VALUE(bios_rd32(bios, reg)); + BIOSLOG(bios, " Write: Reg: 0x%08X, Data: 0x%08X\n", reg, data); + + if (dev_priv->VBIOS.execute) { + still_alive(); + nv_wr32(bios->dev, reg, data); + } +} + +static uint8_t +bios_idxprt_rd(struct nvbios *bios, uint16_t port, uint8_t index) +{ + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + struct drm_device *dev = bios->dev; + uint8_t data; + + if (!valid_idx_port(bios, port)) + return 0; + + if (dev_priv->card_type < NV_50) { + if (port == NV_VIO_SRX) + data = NVReadVgaSeq(dev, bios->state.crtchead, index); + else /* assume NV_CIO_CRX__COLOR */ + data = NVReadVgaCrtc(dev, bios->state.crtchead, index); + } else { + uint32_t data32; + + data32 = bios_rd32(bios, NV50_PDISPLAY_VGACRTC(index & ~3)); + data = (data32 >> ((index & 3) << 3)) & 0xff; + } + + BIOSLOG(bios, " Indexed IO read: Port: 0x%04X, Index: 0x%02X, " + "Head: 0x%02X, Data: 0x%02X\n", + port, index, bios->state.crtchead, data); + return data; +} + +static void +bios_idxprt_wr(struct nvbios *bios, uint16_t port, uint8_t index, uint8_t data) +{ + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + struct drm_device *dev = bios->dev; + + if (!valid_idx_port(bios, port)) + return; + + /* + * The current head is maintained in the nvbios member state.crtchead. + * We trap changes to CR44 and update the head variable and hence the + * register set written. + * As CR44 only exists on CRTC0, we update crtchead to head0 in advance + * of the write, and to head1 after the write + */ + if (port == NV_CIO_CRX__COLOR && index == NV_CIO_CRE_44 && + data != NV_CIO_CRE_44_HEADB) + bios->state.crtchead = 0; + + LOG_OLD_VALUE(bios_idxprt_rd(bios, port, index)); + BIOSLOG(bios, " Indexed IO write: Port: 0x%04X, Index: 0x%02X, " + "Head: 0x%02X, Data: 0x%02X\n", + port, index, bios->state.crtchead, data); + + if (bios->execute && dev_priv->card_type < NV_50) { + still_alive(); + if (port == NV_VIO_SRX) + NVWriteVgaSeq(dev, bios->state.crtchead, index, data); + else /* assume NV_CIO_CRX__COLOR */ + NVWriteVgaCrtc(dev, bios->state.crtchead, index, data); + } else + if (bios->execute) { + uint32_t data32, shift = (index & 3) << 3; + + still_alive(); + + data32 = bios_rd32(bios, NV50_PDISPLAY_VGACRTC(index & ~3)); + data32 &= ~(0xff << shift); + data32 |= (data << shift); + bios_wr32(bios, NV50_PDISPLAY_VGACRTC(index & ~3), data32); + } + + if (port == NV_CIO_CRX__COLOR && + index == NV_CIO_CRE_44 && data == NV_CIO_CRE_44_HEADB) + bios->state.crtchead = 1; +} + +static uint8_t +bios_port_rd(struct nvbios *bios, uint16_t port) +{ + uint8_t data, head = bios->state.crtchead; + + if (!valid_port(bios, port)) + return 0; + + data = NVReadPRMVIO(bios->dev, head, NV_PRMVIO0_OFFSET + port); + + BIOSLOG(bios, " IO read: Port: 0x%04X, Head: 0x%02X, Data: 0x%02X\n", + port, head, data); + + return data; +} + +static void +bios_port_wr(struct nvbios *bios, uint16_t port, uint8_t data) +{ + int head = bios->state.crtchead; + + if (!valid_port(bios, port)) + return; + + LOG_OLD_VALUE(bios_port_rd(bios, port)); + BIOSLOG(bios, " IO write: Port: 0x%04X, Head: 0x%02X, Data: 0x%02X\n", + port, head, data); + + if (!bios->execute) + return; + + still_alive(); + NVWritePRMVIO(bios->dev, head, NV_PRMVIO0_OFFSET + port, data); +} + +static bool +io_flag_condition_met(struct nvbios *bios, uint16_t offset, uint8_t cond) +{ + /* + * The IO flag condition entry has 2 bytes for the CRTC port; 1 byte + * for the CRTC index; 1 byte for the mask to apply to the value + * retrieved from the CRTC; 1 byte for the shift right to apply to the + * masked CRTC value; 2 bytes for the offset to the flag array, to + * which the shifted value is added; 1 byte for the mask applied to the + * value read from the flag array; and 1 byte for the value to compare + * against the masked byte from the flag table. + */ + + uint16_t condptr = bios->io_flag_condition_tbl_ptr + cond * IO_FLAG_CONDITION_SIZE; + uint16_t crtcport = ROM16(bios->data[condptr]); + uint8_t crtcindex = bios->data[condptr + 2]; + uint8_t mask = bios->data[condptr + 3]; + uint8_t shift = bios->data[condptr + 4]; + uint16_t flagarray = ROM16(bios->data[condptr + 5]); + uint8_t flagarraymask = bios->data[condptr + 7]; + uint8_t cmpval = bios->data[condptr + 8]; + uint8_t data; + + BIOSLOG(bios, "0x%04X: Port: 0x%04X, Index: 0x%02X, Mask: 0x%02X, " + "Shift: 0x%02X, FlagArray: 0x%04X, FAMask: 0x%02X, " + "Cmpval: 0x%02X\n", + offset, crtcport, crtcindex, mask, shift, flagarray, flagarraymask, cmpval); + + data = bios_idxprt_rd(bios, crtcport, crtcindex); + + data = bios->data[flagarray + ((data & mask) >> shift)]; + data &= flagarraymask; + + BIOSLOG(bios, "0x%04X: Checking if 0x%02X equals 0x%02X\n", + offset, data, cmpval); + + return (data == cmpval); +} + +static bool +bios_condition_met(struct nvbios *bios, uint16_t offset, uint8_t cond) +{ + /* + * The condition table entry has 4 bytes for the address of the + * register to check, 4 bytes for a mask to apply to the register and + * 4 for a test comparison value + */ + + uint16_t condptr = bios->condition_tbl_ptr + cond * CONDITION_SIZE; + uint32_t reg = ROM32(bios->data[condptr]); + uint32_t mask = ROM32(bios->data[condptr + 4]); + uint32_t cmpval = ROM32(bios->data[condptr + 8]); + uint32_t data; + + BIOSLOG(bios, "0x%04X: Cond: 0x%02X, Reg: 0x%08X, Mask: 0x%08X\n", + offset, cond, reg, mask); + + data = bios_rd32(bios, reg) & mask; + + BIOSLOG(bios, "0x%04X: Checking if 0x%08X equals 0x%08X\n", + offset, data, cmpval); + + return (data == cmpval); +} + +static bool +io_condition_met(struct nvbios *bios, uint16_t offset, uint8_t cond) +{ + /* + * The IO condition entry has 2 bytes for the IO port address; 1 byte + * for the index to write to io_port; 1 byte for the mask to apply to + * the byte read from io_port+1; and 1 byte for the value to compare + * against the masked byte. + */ + + uint16_t condptr = bios->io_condition_tbl_ptr + cond * IO_CONDITION_SIZE; + uint16_t io_port = ROM16(bios->data[condptr]); + uint8_t port_index = bios->data[condptr + 2]; + uint8_t mask = bios->data[condptr + 3]; + uint8_t cmpval = bios->data[condptr + 4]; + + uint8_t data = bios_idxprt_rd(bios, io_port, port_index) & mask; + + BIOSLOG(bios, "0x%04X: Checking if 0x%02X equals 0x%02X\n", + offset, data, cmpval); + + return (data == cmpval); +} + +static int +nv50_pll_set(struct drm_device *dev, uint32_t reg, uint32_t clk) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t reg0 = nv_rd32(dev, reg + 0); + uint32_t reg1 = nv_rd32(dev, reg + 4); + struct nouveau_pll_vals pll; + struct pll_lims pll_limits; + int ret; + + ret = get_pll_limits(dev, reg, &pll_limits); + if (ret) + return ret; + + clk = nouveau_calc_pll_mnp(dev, &pll_limits, clk, &pll); + if (!clk) + return -ERANGE; + + reg0 = (reg0 & 0xfff8ffff) | (pll.log2P << 16); + reg1 = (reg1 & 0xffff0000) | (pll.N1 << 8) | pll.M1; + + if (dev_priv->VBIOS.execute) { + still_alive(); + nv_wr32(dev, reg + 4, reg1); + nv_wr32(dev, reg + 0, reg0); + } + + return 0; +} + +static int +setPLL(struct nvbios *bios, uint32_t reg, uint32_t clk) +{ + struct drm_device *dev = bios->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + /* clk in kHz */ + struct pll_lims pll_lim; + struct nouveau_pll_vals pllvals; + int ret; + + if (dev_priv->card_type >= NV_50) + return nv50_pll_set(dev, reg, clk); + + /* high regs (such as in the mac g5 table) are not -= 4 */ + ret = get_pll_limits(dev, reg > 0x405c ? reg : reg - 4, &pll_lim); + if (ret) + return ret; + + clk = nouveau_calc_pll_mnp(dev, &pll_lim, clk, &pllvals); + if (!clk) + return -ERANGE; + + if (bios->execute) { + still_alive(); + nouveau_hw_setpll(dev, reg, &pllvals); + } + + return 0; +} + +static int dcb_entry_idx_from_crtchead(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + + /* + * For the results of this function to be correct, CR44 must have been + * set (using bios_idxprt_wr to set crtchead), CR58 set for CR57 = 0, + * and the DCB table parsed, before the script calling the function is + * run. run_digital_op_script is example of how to do such setup + */ + + uint8_t dcb_entry = NVReadVgaCrtc5758(dev, bios->state.crtchead, 0); + + if (dcb_entry > bios->bdcb.dcb.entries) { + NV_ERROR(dev, "CR58 doesn't have a valid DCB entry currently " + "(%02X)\n", dcb_entry); + dcb_entry = 0x7f; /* unused / invalid marker */ + } + + return dcb_entry; +} + +static struct nouveau_i2c_chan * +init_i2c_device_find(struct drm_device *dev, int i2c_index) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct bios_parsed_dcb *bdcb = &dev_priv->VBIOS.bdcb; + + if (i2c_index == 0xff) { + /* note: dcb_entry_idx_from_crtchead needs pre-script set-up */ + int idx = dcb_entry_idx_from_crtchead(dev), shift = 0; + int default_indices = bdcb->i2c_default_indices; + + if (idx != 0x7f && bdcb->dcb.entry[idx].i2c_upper_default) + shift = 4; + + i2c_index = (default_indices >> shift) & 0xf; + } + if (i2c_index == 0x80) /* g80+ */ + i2c_index = bdcb->i2c_default_indices & 0xf; + + return nouveau_i2c_find(dev, i2c_index); +} + +static uint32_t get_tmds_index_reg(struct drm_device *dev, uint8_t mlv) +{ + /* + * For mlv < 0x80, it is an index into a table of TMDS base addresses. + * For mlv == 0x80 use the "or" value of the dcb_entry indexed by + * CR58 for CR57 = 0 to index a table of offsets to the basic + * 0x6808b0 address. + * For mlv == 0x81 use the "or" value of the dcb_entry indexed by + * CR58 for CR57 = 0 to index a table of offsets to the basic + * 0x6808b0 address, and then flip the offset by 8. + */ + + struct drm_nouveau_private *dev_priv = dev->dev_private; + const int pramdac_offset[13] = { + 0, 0, 0x8, 0, 0x2000, 0, 0, 0, 0x2008, 0, 0, 0, 0x2000 }; + const uint32_t pramdac_table[4] = { + 0x6808b0, 0x6808b8, 0x6828b0, 0x6828b8 }; + + if (mlv >= 0x80) { + int dcb_entry, dacoffset; + + /* note: dcb_entry_idx_from_crtchead needs pre-script set-up */ + dcb_entry = dcb_entry_idx_from_crtchead(dev); + if (dcb_entry == 0x7f) + return 0; + dacoffset = pramdac_offset[ + dev_priv->VBIOS.bdcb.dcb.entry[dcb_entry].or]; + if (mlv == 0x81) + dacoffset ^= 8; + return 0x6808b0 + dacoffset; + } else { + if (mlv > ARRAY_SIZE(pramdac_table)) { + NV_ERROR(dev, "Magic Lookup Value too big (%02X)\n", + mlv); + return 0; + } + return pramdac_table[mlv]; + } +} + +static int +init_io_restrict_prog(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_IO_RESTRICT_PROG opcode: 0x32 ('2') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): CRTC port + * offset + 3 (8 bit): CRTC index + * offset + 4 (8 bit): mask + * offset + 5 (8 bit): shift + * offset + 6 (8 bit): count + * offset + 7 (32 bit): register + * offset + 11 (32 bit): configuration 1 + * ... + * + * Starting at offset + 11 there are "count" 32 bit values. + * To find out which value to use read index "CRTC index" on "CRTC + * port", AND this value with "mask" and then bit shift right "shift" + * bits. Read the appropriate value using this index and write to + * "register" + */ + + uint16_t crtcport = ROM16(bios->data[offset + 1]); + uint8_t crtcindex = bios->data[offset + 3]; + uint8_t mask = bios->data[offset + 4]; + uint8_t shift = bios->data[offset + 5]; + uint8_t count = bios->data[offset + 6]; + uint32_t reg = ROM32(bios->data[offset + 7]); + uint8_t config; + uint32_t configval; + int len = 11 + count * 4; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: Port: 0x%04X, Index: 0x%02X, Mask: 0x%02X, " + "Shift: 0x%02X, Count: 0x%02X, Reg: 0x%08X\n", + offset, crtcport, crtcindex, mask, shift, count, reg); + + config = (bios_idxprt_rd(bios, crtcport, crtcindex) & mask) >> shift; + if (config > count) { + NV_ERROR(bios->dev, + "0x%04X: Config 0x%02X exceeds maximal bound 0x%02X\n", + offset, config, count); + return 0; + } + + configval = ROM32(bios->data[offset + 11 + config * 4]); + + BIOSLOG(bios, "0x%04X: Writing config %02X\n", offset, config); + + bios_wr32(bios, reg, configval); + + return len; +} + +static int +init_repeat(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_REPEAT opcode: 0x33 ('3') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): count + * + * Execute script following this opcode up to INIT_REPEAT_END + * "count" times + */ + + uint8_t count = bios->data[offset + 1]; + uint8_t i; + + /* no iexec->execute check by design */ + + BIOSLOG(bios, "0x%04X: Repeating following segment %d times\n", + offset, count); + + iexec->repeat = true; + + /* + * count - 1, as the script block will execute once when we leave this + * opcode -- this is compatible with bios behaviour as: + * a) the block is always executed at least once, even if count == 0 + * b) the bios interpreter skips to the op following INIT_END_REPEAT, + * while we don't + */ + for (i = 0; i < count - 1; i++) + parse_init_table(bios, offset + 2, iexec); + + iexec->repeat = false; + + return 2; +} + +static int +init_io_restrict_pll(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_IO_RESTRICT_PLL opcode: 0x34 ('4') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): CRTC port + * offset + 3 (8 bit): CRTC index + * offset + 4 (8 bit): mask + * offset + 5 (8 bit): shift + * offset + 6 (8 bit): IO flag condition index + * offset + 7 (8 bit): count + * offset + 8 (32 bit): register + * offset + 12 (16 bit): frequency 1 + * ... + * + * Starting at offset + 12 there are "count" 16 bit frequencies (10kHz). + * Set PLL register "register" to coefficients for frequency n, + * selected by reading index "CRTC index" of "CRTC port" ANDed with + * "mask" and shifted right by "shift". + * + * If "IO flag condition index" > 0, and condition met, double + * frequency before setting it. + */ + + uint16_t crtcport = ROM16(bios->data[offset + 1]); + uint8_t crtcindex = bios->data[offset + 3]; + uint8_t mask = bios->data[offset + 4]; + uint8_t shift = bios->data[offset + 5]; + int8_t io_flag_condition_idx = bios->data[offset + 6]; + uint8_t count = bios->data[offset + 7]; + uint32_t reg = ROM32(bios->data[offset + 8]); + uint8_t config; + uint16_t freq; + int len = 12 + count * 2; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: Port: 0x%04X, Index: 0x%02X, Mask: 0x%02X, " + "Shift: 0x%02X, IO Flag Condition: 0x%02X, " + "Count: 0x%02X, Reg: 0x%08X\n", + offset, crtcport, crtcindex, mask, shift, + io_flag_condition_idx, count, reg); + + config = (bios_idxprt_rd(bios, crtcport, crtcindex) & mask) >> shift; + if (config > count) { + NV_ERROR(bios->dev, + "0x%04X: Config 0x%02X exceeds maximal bound 0x%02X\n", + offset, config, count); + return 0; + } + + freq = ROM16(bios->data[offset + 12 + config * 2]); + + if (io_flag_condition_idx > 0) { + if (io_flag_condition_met(bios, offset, io_flag_condition_idx)) { + BIOSLOG(bios, "0x%04X: Condition fulfilled -- " + "frequency doubled\n", offset); + freq *= 2; + } else + BIOSLOG(bios, "0x%04X: Condition not fulfilled -- " + "frequency unchanged\n", offset); + } + + BIOSLOG(bios, "0x%04X: Reg: 0x%08X, Config: 0x%02X, Freq: %d0kHz\n", + offset, reg, config, freq); + + setPLL(bios, reg, freq * 10); + + return len; +} + +static int +init_end_repeat(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_END_REPEAT opcode: 0x36 ('6') + * + * offset (8 bit): opcode + * + * Marks the end of the block for INIT_REPEAT to repeat + */ + + /* no iexec->execute check by design */ + + /* + * iexec->repeat flag necessary to go past INIT_END_REPEAT opcode when + * we're not in repeat mode + */ + if (iexec->repeat) + return 0; + + return 1; +} + +static int +init_copy(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_COPY opcode: 0x37 ('7') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (8 bit): shift + * offset + 6 (8 bit): srcmask + * offset + 7 (16 bit): CRTC port + * offset + 9 (8 bit): CRTC index + * offset + 10 (8 bit): mask + * + * Read index "CRTC index" on "CRTC port", AND with "mask", OR with + * (REGVAL("register") >> "shift" & "srcmask") and write-back to CRTC + * port + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint8_t shift = bios->data[offset + 5]; + uint8_t srcmask = bios->data[offset + 6]; + uint16_t crtcport = ROM16(bios->data[offset + 7]); + uint8_t crtcindex = bios->data[offset + 9]; + uint8_t mask = bios->data[offset + 10]; + uint32_t data; + uint8_t crtcdata; + + if (!iexec->execute) + return 11; + + BIOSLOG(bios, "0x%04X: Reg: 0x%08X, Shift: 0x%02X, SrcMask: 0x%02X, " + "Port: 0x%04X, Index: 0x%02X, Mask: 0x%02X\n", + offset, reg, shift, srcmask, crtcport, crtcindex, mask); + + data = bios_rd32(bios, reg); + + if (shift < 0x80) + data >>= shift; + else + data <<= (0x100 - shift); + + data &= srcmask; + + crtcdata = bios_idxprt_rd(bios, crtcport, crtcindex) & mask; + crtcdata |= (uint8_t)data; + bios_idxprt_wr(bios, crtcport, crtcindex, crtcdata); + + return 11; +} + +static int +init_not(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_NOT opcode: 0x38 ('8') + * + * offset (8 bit): opcode + * + * Invert the current execute / no-execute condition (i.e. "else") + */ + if (iexec->execute) + BIOSLOG(bios, "0x%04X: ------ Skipping following commands ------\n", offset); + else + BIOSLOG(bios, "0x%04X: ------ Executing following commands ------\n", offset); + + iexec->execute = !iexec->execute; + return 1; +} + +static int +init_io_flag_condition(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_IO_FLAG_CONDITION opcode: 0x39 ('9') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): condition number + * + * Check condition "condition number" in the IO flag condition table. + * If condition not met skip subsequent opcodes until condition is + * inverted (INIT_NOT), or we hit INIT_RESUME + */ + + uint8_t cond = bios->data[offset + 1]; + + if (!iexec->execute) + return 2; + + if (io_flag_condition_met(bios, offset, cond)) + BIOSLOG(bios, "0x%04X: Condition fulfilled -- continuing to execute\n", offset); + else { + BIOSLOG(bios, "0x%04X: Condition not fulfilled -- skipping following commands\n", offset); + iexec->execute = false; + } + + return 2; +} + +static int +init_idx_addr_latched(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_INDEX_ADDRESS_LATCHED opcode: 0x49 ('I') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): control register + * offset + 5 (32 bit): data register + * offset + 9 (32 bit): mask + * offset + 13 (32 bit): data + * offset + 17 (8 bit): count + * offset + 18 (8 bit): address 1 + * offset + 19 (8 bit): data 1 + * ... + * + * For each of "count" address and data pairs, write "data n" to + * "data register", read the current value of "control register", + * and write it back once ANDed with "mask", ORed with "data", + * and ORed with "address n" + */ + + uint32_t controlreg = ROM32(bios->data[offset + 1]); + uint32_t datareg = ROM32(bios->data[offset + 5]); + uint32_t mask = ROM32(bios->data[offset + 9]); + uint32_t data = ROM32(bios->data[offset + 13]); + uint8_t count = bios->data[offset + 17]; + int len = 18 + count * 2; + uint32_t value; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: ControlReg: 0x%08X, DataReg: 0x%08X, " + "Mask: 0x%08X, Data: 0x%08X, Count: 0x%02X\n", + offset, controlreg, datareg, mask, data, count); + + for (i = 0; i < count; i++) { + uint8_t instaddress = bios->data[offset + 18 + i * 2]; + uint8_t instdata = bios->data[offset + 19 + i * 2]; + + BIOSLOG(bios, "0x%04X: Address: 0x%02X, Data: 0x%02X\n", + offset, instaddress, instdata); + + bios_wr32(bios, datareg, instdata); + value = bios_rd32(bios, controlreg) & mask; + value |= data; + value |= instaddress; + bios_wr32(bios, controlreg, value); + } + + return len; +} + +static int +init_io_restrict_pll2(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_IO_RESTRICT_PLL2 opcode: 0x4A ('J') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): CRTC port + * offset + 3 (8 bit): CRTC index + * offset + 4 (8 bit): mask + * offset + 5 (8 bit): shift + * offset + 6 (8 bit): count + * offset + 7 (32 bit): register + * offset + 11 (32 bit): frequency 1 + * ... + * + * Starting at offset + 11 there are "count" 32 bit frequencies (kHz). + * Set PLL register "register" to coefficients for frequency n, + * selected by reading index "CRTC index" of "CRTC port" ANDed with + * "mask" and shifted right by "shift". + */ + + uint16_t crtcport = ROM16(bios->data[offset + 1]); + uint8_t crtcindex = bios->data[offset + 3]; + uint8_t mask = bios->data[offset + 4]; + uint8_t shift = bios->data[offset + 5]; + uint8_t count = bios->data[offset + 6]; + uint32_t reg = ROM32(bios->data[offset + 7]); + int len = 11 + count * 4; + uint8_t config; + uint32_t freq; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: Port: 0x%04X, Index: 0x%02X, Mask: 0x%02X, " + "Shift: 0x%02X, Count: 0x%02X, Reg: 0x%08X\n", + offset, crtcport, crtcindex, mask, shift, count, reg); + + if (!reg) + return len; + + config = (bios_idxprt_rd(bios, crtcport, crtcindex) & mask) >> shift; + if (config > count) { + NV_ERROR(bios->dev, + "0x%04X: Config 0x%02X exceeds maximal bound 0x%02X\n", + offset, config, count); + return 0; + } + + freq = ROM32(bios->data[offset + 11 + config * 4]); + + BIOSLOG(bios, "0x%04X: Reg: 0x%08X, Config: 0x%02X, Freq: %dkHz\n", + offset, reg, config, freq); + + setPLL(bios, reg, freq); + + return len; +} + +static int +init_pll2(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_PLL2 opcode: 0x4B ('K') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (32 bit): freq + * + * Set PLL register "register" to coefficients for frequency "freq" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint32_t freq = ROM32(bios->data[offset + 5]); + + if (!iexec->execute) + return 9; + + BIOSLOG(bios, "0x%04X: Reg: 0x%04X, Freq: %dkHz\n", + offset, reg, freq); + + setPLL(bios, reg, freq); + return 9; +} + +static int +init_i2c_byte(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_I2C_BYTE opcode: 0x4C ('L') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): DCB I2C table entry index + * offset + 2 (8 bit): I2C slave address + * offset + 3 (8 bit): count + * offset + 4 (8 bit): I2C register 1 + * offset + 5 (8 bit): mask 1 + * offset + 6 (8 bit): data 1 + * ... + * + * For each of "count" registers given by "I2C register n" on the device + * addressed by "I2C slave address" on the I2C bus given by + * "DCB I2C table entry index", read the register, AND the result with + * "mask n" and OR it with "data n" before writing it back to the device + */ + + uint8_t i2c_index = bios->data[offset + 1]; + uint8_t i2c_address = bios->data[offset + 2]; + uint8_t count = bios->data[offset + 3]; + int len = 4 + count * 3; + struct nouveau_i2c_chan *chan; + struct i2c_msg msg; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: DCBI2CIndex: 0x%02X, I2CAddress: 0x%02X, " + "Count: 0x%02X\n", + offset, i2c_index, i2c_address, count); + + chan = init_i2c_device_find(bios->dev, i2c_index); + if (!chan) + return 0; + + for (i = 0; i < count; i++) { + uint8_t i2c_reg = bios->data[offset + 4 + i * 3]; + uint8_t mask = bios->data[offset + 5 + i * 3]; + uint8_t data = bios->data[offset + 6 + i * 3]; + uint8_t value; + + msg.addr = i2c_address; + msg.flags = I2C_M_RD; + msg.len = 1; + msg.buf = &value; + if (i2c_transfer(&chan->adapter, &msg, 1) != 1) + return 0; + + BIOSLOG(bios, "0x%04X: I2CReg: 0x%02X, Value: 0x%02X, " + "Mask: 0x%02X, Data: 0x%02X\n", + offset, i2c_reg, value, mask, data); + + value = (value & mask) | data; + + if (bios->execute) { + msg.addr = i2c_address; + msg.flags = 0; + msg.len = 1; + msg.buf = &value; + if (i2c_transfer(&chan->adapter, &msg, 1) != 1) + return 0; + } + } + + return len; +} + +static int +init_zm_i2c_byte(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_I2C_BYTE opcode: 0x4D ('M') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): DCB I2C table entry index + * offset + 2 (8 bit): I2C slave address + * offset + 3 (8 bit): count + * offset + 4 (8 bit): I2C register 1 + * offset + 5 (8 bit): data 1 + * ... + * + * For each of "count" registers given by "I2C register n" on the device + * addressed by "I2C slave address" on the I2C bus given by + * "DCB I2C table entry index", set the register to "data n" + */ + + uint8_t i2c_index = bios->data[offset + 1]; + uint8_t i2c_address = bios->data[offset + 2]; + uint8_t count = bios->data[offset + 3]; + int len = 4 + count * 2; + struct nouveau_i2c_chan *chan; + struct i2c_msg msg; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: DCBI2CIndex: 0x%02X, I2CAddress: 0x%02X, " + "Count: 0x%02X\n", + offset, i2c_index, i2c_address, count); + + chan = init_i2c_device_find(bios->dev, i2c_index); + if (!chan) + return 0; + + for (i = 0; i < count; i++) { + uint8_t i2c_reg = bios->data[offset + 4 + i * 2]; + uint8_t data = bios->data[offset + 5 + i * 2]; + + BIOSLOG(bios, "0x%04X: I2CReg: 0x%02X, Data: 0x%02X\n", + offset, i2c_reg, data); + + if (bios->execute) { + msg.addr = i2c_address; + msg.flags = 0; + msg.len = 1; + msg.buf = &data; + if (i2c_transfer(&chan->adapter, &msg, 1) != 1) + return 0; + } + } + + return len; +} + +static int +init_zm_i2c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_I2C opcode: 0x4E ('N') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): DCB I2C table entry index + * offset + 2 (8 bit): I2C slave address + * offset + 3 (8 bit): count + * offset + 4 (8 bit): data 1 + * ... + * + * Send "count" bytes ("data n") to the device addressed by "I2C slave + * address" on the I2C bus given by "DCB I2C table entry index" + */ + + uint8_t i2c_index = bios->data[offset + 1]; + uint8_t i2c_address = bios->data[offset + 2]; + uint8_t count = bios->data[offset + 3]; + int len = 4 + count; + struct nouveau_i2c_chan *chan; + struct i2c_msg msg; + uint8_t data[256]; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: DCBI2CIndex: 0x%02X, I2CAddress: 0x%02X, " + "Count: 0x%02X\n", + offset, i2c_index, i2c_address, count); + + chan = init_i2c_device_find(bios->dev, i2c_index); + if (!chan) + return 0; + + for (i = 0; i < count; i++) { + data[i] = bios->data[offset + 4 + i]; + + BIOSLOG(bios, "0x%04X: Data: 0x%02X\n", offset, data[i]); + } + + if (bios->execute) { + msg.addr = i2c_address; + msg.flags = 0; + msg.len = count; + msg.buf = data; + if (i2c_transfer(&chan->adapter, &msg, 1) != 1) + return 0; + } + + return len; +} + +static int +init_tmds(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_TMDS opcode: 0x4F ('O') (non-canon name) + * + * offset (8 bit): opcode + * offset + 1 (8 bit): magic lookup value + * offset + 2 (8 bit): TMDS address + * offset + 3 (8 bit): mask + * offset + 4 (8 bit): data + * + * Read the data reg for TMDS address "TMDS address", AND it with mask + * and OR it with data, then write it back + * "magic lookup value" determines which TMDS base address register is + * used -- see get_tmds_index_reg() + */ + + uint8_t mlv = bios->data[offset + 1]; + uint32_t tmdsaddr = bios->data[offset + 2]; + uint8_t mask = bios->data[offset + 3]; + uint8_t data = bios->data[offset + 4]; + uint32_t reg, value; + + if (!iexec->execute) + return 5; + + BIOSLOG(bios, "0x%04X: MagicLookupValue: 0x%02X, TMDSAddr: 0x%02X, " + "Mask: 0x%02X, Data: 0x%02X\n", + offset, mlv, tmdsaddr, mask, data); + + reg = get_tmds_index_reg(bios->dev, mlv); + if (!reg) + return 0; + + bios_wr32(bios, reg, + tmdsaddr | NV_PRAMDAC_FP_TMDS_CONTROL_WRITE_DISABLE); + value = (bios_rd32(bios, reg + 4) & mask) | data; + bios_wr32(bios, reg + 4, value); + bios_wr32(bios, reg, tmdsaddr); + + return 5; +} + +static int +init_zm_tmds_group(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_ZM_TMDS_GROUP opcode: 0x50 ('P') (non-canon name) + * + * offset (8 bit): opcode + * offset + 1 (8 bit): magic lookup value + * offset + 2 (8 bit): count + * offset + 3 (8 bit): addr 1 + * offset + 4 (8 bit): data 1 + * ... + * + * For each of "count" TMDS address and data pairs write "data n" to + * "addr n". "magic lookup value" determines which TMDS base address + * register is used -- see get_tmds_index_reg() + */ + + uint8_t mlv = bios->data[offset + 1]; + uint8_t count = bios->data[offset + 2]; + int len = 3 + count * 2; + uint32_t reg; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: MagicLookupValue: 0x%02X, Count: 0x%02X\n", + offset, mlv, count); + + reg = get_tmds_index_reg(bios->dev, mlv); + if (!reg) + return 0; + + for (i = 0; i < count; i++) { + uint8_t tmdsaddr = bios->data[offset + 3 + i * 2]; + uint8_t tmdsdata = bios->data[offset + 4 + i * 2]; + + bios_wr32(bios, reg + 4, tmdsdata); + bios_wr32(bios, reg, tmdsaddr); + } + + return len; +} + +static int +init_cr_idx_adr_latch(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_CR_INDEX_ADDRESS_LATCHED opcode: 0x51 ('Q') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): CRTC index1 + * offset + 2 (8 bit): CRTC index2 + * offset + 3 (8 bit): baseaddr + * offset + 4 (8 bit): count + * offset + 5 (8 bit): data 1 + * ... + * + * For each of "count" address and data pairs, write "baseaddr + n" to + * "CRTC index1" and "data n" to "CRTC index2" + * Once complete, restore initial value read from "CRTC index1" + */ + uint8_t crtcindex1 = bios->data[offset + 1]; + uint8_t crtcindex2 = bios->data[offset + 2]; + uint8_t baseaddr = bios->data[offset + 3]; + uint8_t count = bios->data[offset + 4]; + int len = 5 + count; + uint8_t oldaddr, data; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: Index1: 0x%02X, Index2: 0x%02X, " + "BaseAddr: 0x%02X, Count: 0x%02X\n", + offset, crtcindex1, crtcindex2, baseaddr, count); + + oldaddr = bios_idxprt_rd(bios, NV_CIO_CRX__COLOR, crtcindex1); + + for (i = 0; i < count; i++) { + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, crtcindex1, + baseaddr + i); + data = bios->data[offset + 5 + i]; + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, crtcindex2, data); + } + + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, crtcindex1, oldaddr); + + return len; +} + +static int +init_cr(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_CR opcode: 0x52 ('R') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): CRTC index + * offset + 2 (8 bit): mask + * offset + 3 (8 bit): data + * + * Assign the value of at "CRTC index" ANDed with mask and ORed with + * data back to "CRTC index" + */ + + uint8_t crtcindex = bios->data[offset + 1]; + uint8_t mask = bios->data[offset + 2]; + uint8_t data = bios->data[offset + 3]; + uint8_t value; + + if (!iexec->execute) + return 4; + + BIOSLOG(bios, "0x%04X: Index: 0x%02X, Mask: 0x%02X, Data: 0x%02X\n", + offset, crtcindex, mask, data); + + value = bios_idxprt_rd(bios, NV_CIO_CRX__COLOR, crtcindex) & mask; + value |= data; + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, crtcindex, value); + + return 4; +} + +static int +init_zm_cr(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_CR opcode: 0x53 ('S') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): CRTC index + * offset + 2 (8 bit): value + * + * Assign "value" to CRTC register with index "CRTC index". + */ + + uint8_t crtcindex = ROM32(bios->data[offset + 1]); + uint8_t data = bios->data[offset + 2]; + + if (!iexec->execute) + return 3; + + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, crtcindex, data); + + return 3; +} + +static int +init_zm_cr_group(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_CR_GROUP opcode: 0x54 ('T') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): count + * offset + 2 (8 bit): CRTC index 1 + * offset + 3 (8 bit): value 1 + * ... + * + * For "count", assign "value n" to CRTC register with index + * "CRTC index n". + */ + + uint8_t count = bios->data[offset + 1]; + int len = 2 + count * 2; + int i; + + if (!iexec->execute) + return len; + + for (i = 0; i < count; i++) + init_zm_cr(bios, offset + 2 + 2 * i - 1, iexec); + + return len; +} + +static int +init_condition_time(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_CONDITION_TIME opcode: 0x56 ('V') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): condition number + * offset + 2 (8 bit): retries / 50 + * + * Check condition "condition number" in the condition table. + * Bios code then sleeps for 2ms if the condition is not met, and + * repeats up to "retries" times, but on one C51 this has proved + * insufficient. In mmiotraces the driver sleeps for 20ms, so we do + * this, and bail after "retries" times, or 2s, whichever is less. + * If still not met after retries, clear execution flag for this table. + */ + + uint8_t cond = bios->data[offset + 1]; + uint16_t retries = bios->data[offset + 2] * 50; + unsigned cnt; + + if (!iexec->execute) + return 3; + + if (retries > 100) + retries = 100; + + BIOSLOG(bios, "0x%04X: Condition: 0x%02X, Retries: 0x%02X\n", + offset, cond, retries); + + if (!bios->execute) /* avoid 2s delays when "faking" execution */ + retries = 1; + + for (cnt = 0; cnt < retries; cnt++) { + if (bios_condition_met(bios, offset, cond)) { + BIOSLOG(bios, "0x%04X: Condition met, continuing\n", + offset); + break; + } else { + BIOSLOG(bios, "0x%04X: " + "Condition not met, sleeping for 20ms\n", + offset); + msleep(20); + } + } + + if (!bios_condition_met(bios, offset, cond)) { + NV_WARN(bios->dev, + "0x%04X: Condition still not met after %dms, " + "skipping following opcodes\n", offset, 20 * retries); + iexec->execute = false; + } + + return 3; +} + +static int +init_zm_reg_sequence(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_ZM_REG_SEQUENCE opcode: 0x58 ('X') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): base register + * offset + 5 (8 bit): count + * offset + 6 (32 bit): value 1 + * ... + * + * Starting at offset + 6 there are "count" 32 bit values. + * For "count" iterations set "base register" + 4 * current_iteration + * to "value current_iteration" + */ + + uint32_t basereg = ROM32(bios->data[offset + 1]); + uint32_t count = bios->data[offset + 5]; + int len = 6 + count * 4; + int i; + + if (!iexec->execute) + return len; + + BIOSLOG(bios, "0x%04X: BaseReg: 0x%08X, Count: 0x%02X\n", + offset, basereg, count); + + for (i = 0; i < count; i++) { + uint32_t reg = basereg + i * 4; + uint32_t data = ROM32(bios->data[offset + 6 + i * 4]); + + bios_wr32(bios, reg, data); + } + + return len; +} + +static int +init_sub_direct(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_SUB_DIRECT opcode: 0x5B ('[') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): subroutine offset (in bios) + * + * Calls a subroutine that will execute commands until INIT_DONE + * is found. + */ + + uint16_t sub_offset = ROM16(bios->data[offset + 1]); + + if (!iexec->execute) + return 3; + + BIOSLOG(bios, "0x%04X: Executing subroutine at 0x%04X\n", + offset, sub_offset); + + parse_init_table(bios, sub_offset, iexec); + + BIOSLOG(bios, "0x%04X: End of 0x%04X subroutine\n", offset, sub_offset); + + return 3; +} + +static int +init_copy_nv_reg(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_COPY_NV_REG opcode: 0x5F ('_') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): src reg + * offset + 5 (8 bit): shift + * offset + 6 (32 bit): src mask + * offset + 10 (32 bit): xor + * offset + 14 (32 bit): dst reg + * offset + 18 (32 bit): dst mask + * + * Shift REGVAL("src reg") right by (signed) "shift", AND result with + * "src mask", then XOR with "xor". Write this OR'd with + * (REGVAL("dst reg") AND'd with "dst mask") to "dst reg" + */ + + uint32_t srcreg = *((uint32_t *)(&bios->data[offset + 1])); + uint8_t shift = bios->data[offset + 5]; + uint32_t srcmask = *((uint32_t *)(&bios->data[offset + 6])); + uint32_t xor = *((uint32_t *)(&bios->data[offset + 10])); + uint32_t dstreg = *((uint32_t *)(&bios->data[offset + 14])); + uint32_t dstmask = *((uint32_t *)(&bios->data[offset + 18])); + uint32_t srcvalue, dstvalue; + + if (!iexec->execute) + return 22; + + BIOSLOG(bios, "0x%04X: SrcReg: 0x%08X, Shift: 0x%02X, SrcMask: 0x%08X, " + "Xor: 0x%08X, DstReg: 0x%08X, DstMask: 0x%08X\n", + offset, srcreg, shift, srcmask, xor, dstreg, dstmask); + + srcvalue = bios_rd32(bios, srcreg); + + if (shift < 0x80) + srcvalue >>= shift; + else + srcvalue <<= (0x100 - shift); + + srcvalue = (srcvalue & srcmask) ^ xor; + + dstvalue = bios_rd32(bios, dstreg) & dstmask; + + bios_wr32(bios, dstreg, dstvalue | srcvalue); + + return 22; +} + +static int +init_zm_index_io(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_INDEX_IO opcode: 0x62 ('b') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): CRTC port + * offset + 3 (8 bit): CRTC index + * offset + 4 (8 bit): data + * + * Write "data" to index "CRTC index" of "CRTC port" + */ + uint16_t crtcport = ROM16(bios->data[offset + 1]); + uint8_t crtcindex = bios->data[offset + 3]; + uint8_t data = bios->data[offset + 4]; + + if (!iexec->execute) + return 5; + + bios_idxprt_wr(bios, crtcport, crtcindex, data); + + return 5; +} + +static int +init_compute_mem(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_COMPUTE_MEM opcode: 0x63 ('c') + * + * offset (8 bit): opcode + * + * This opcode is meant to set NV_PFB_CFG0 (0x100200) appropriately so + * that the hardware can correctly calculate how much VRAM it has + * (and subsequently report that value in NV_PFB_CSTATUS (0x10020C)) + * + * The implementation of this opcode in general consists of two parts: + * 1) determination of the memory bus width + * 2) determination of how many of the card's RAM pads have ICs attached + * + * 1) is done by a cunning combination of writes to offsets 0x1c and + * 0x3c in the framebuffer, and seeing whether the written values are + * read back correctly. This then affects bits 4-7 of NV_PFB_CFG0 + * + * 2) is done by a cunning combination of writes to an offset slightly + * less than the maximum memory reported by NV_PFB_CSTATUS, then seeing + * if the test pattern can be read back. This then affects bits 12-15 of + * NV_PFB_CFG0 + * + * In this context a "cunning combination" may include multiple reads + * and writes to varying locations, often alternating the test pattern + * and 0, doubtless to make sure buffers are filled, residual charges + * on tracks are removed etc. + * + * Unfortunately, the "cunning combination"s mentioned above, and the + * changes to the bits in NV_PFB_CFG0 differ with nearly every bios + * trace I have. + * + * Therefore, we cheat and assume the value of NV_PFB_CFG0 with which + * we started was correct, and use that instead + */ + + /* no iexec->execute check by design */ + + /* + * This appears to be a NOP on G8x chipsets, both io logs of the VBIOS + * and kmmio traces of the binary driver POSTing the card show nothing + * being done for this opcode. why is it still listed in the table?! + */ + + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + + if (dev_priv->card_type >= NV_40) + return 1; + + /* + * On every card I've seen, this step gets done for us earlier in + * the init scripts + uint8_t crdata = bios_idxprt_rd(dev, NV_VIO_SRX, 0x01); + bios_idxprt_wr(dev, NV_VIO_SRX, 0x01, crdata | 0x20); + */ + + /* + * This also has probably been done in the scripts, but an mmio trace of + * s3 resume shows nvidia doing it anyway (unlike the NV_VIO_SRX write) + */ + bios_wr32(bios, NV_PFB_REFCTRL, NV_PFB_REFCTRL_VALID_1); + + /* write back the saved configuration value */ + bios_wr32(bios, NV_PFB_CFG0, bios->state.saved_nv_pfb_cfg0); + + return 1; +} + +static int +init_reset(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_RESET opcode: 0x65 ('e') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (32 bit): value1 + * offset + 9 (32 bit): value2 + * + * Assign "value1" to "register", then assign "value2" to "register" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint32_t value1 = ROM32(bios->data[offset + 5]); + uint32_t value2 = ROM32(bios->data[offset + 9]); + uint32_t pci_nv_19, pci_nv_20; + + /* no iexec->execute check by design */ + + pci_nv_19 = bios_rd32(bios, NV_PBUS_PCI_NV_19); + bios_wr32(bios, NV_PBUS_PCI_NV_19, 0); + bios_wr32(bios, reg, value1); + + udelay(10); + + bios_wr32(bios, reg, value2); + bios_wr32(bios, NV_PBUS_PCI_NV_19, pci_nv_19); + + pci_nv_20 = bios_rd32(bios, NV_PBUS_PCI_NV_20); + pci_nv_20 &= ~NV_PBUS_PCI_NV_20_ROM_SHADOW_ENABLED; /* 0xfffffffe */ + bios_wr32(bios, NV_PBUS_PCI_NV_20, pci_nv_20); + + return 13; +} + +static int +init_configure_mem(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_CONFIGURE_MEM opcode: 0x66 ('f') + * + * offset (8 bit): opcode + * + * Equivalent to INIT_DONE on bios version 3 or greater. + * For early bios versions, sets up the memory registers, using values + * taken from the memory init table + */ + + /* no iexec->execute check by design */ + + uint16_t meminitoffs = bios->legacy.mem_init_tbl_ptr + MEM_INIT_SIZE * (bios_idxprt_rd(bios, NV_CIO_CRX__COLOR, NV_CIO_CRE_SCRATCH4__INDEX) >> 4); + uint16_t seqtbloffs = bios->legacy.sdr_seq_tbl_ptr, meminitdata = meminitoffs + 6; + uint32_t reg, data; + + if (bios->major_version > 2) + return 0; + + bios_idxprt_wr(bios, NV_VIO_SRX, NV_VIO_SR_CLOCK_INDEX, bios_idxprt_rd( + bios, NV_VIO_SRX, NV_VIO_SR_CLOCK_INDEX) | 0x20); + + if (bios->data[meminitoffs] & 1) + seqtbloffs = bios->legacy.ddr_seq_tbl_ptr; + + for (reg = ROM32(bios->data[seqtbloffs]); + reg != 0xffffffff; + reg = ROM32(bios->data[seqtbloffs += 4])) { + + switch (reg) { + case NV_PFB_PRE: + data = NV_PFB_PRE_CMD_PRECHARGE; + break; + case NV_PFB_PAD: + data = NV_PFB_PAD_CKE_NORMAL; + break; + case NV_PFB_REF: + data = NV_PFB_REF_CMD_REFRESH; + break; + default: + data = ROM32(bios->data[meminitdata]); + meminitdata += 4; + if (data == 0xffffffff) + continue; + } + + bios_wr32(bios, reg, data); + } + + return 1; +} + +static int +init_configure_clk(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_CONFIGURE_CLK opcode: 0x67 ('g') + * + * offset (8 bit): opcode + * + * Equivalent to INIT_DONE on bios version 3 or greater. + * For early bios versions, sets up the NVClk and MClk PLLs, using + * values taken from the memory init table + */ + + /* no iexec->execute check by design */ + + uint16_t meminitoffs = bios->legacy.mem_init_tbl_ptr + MEM_INIT_SIZE * (bios_idxprt_rd(bios, NV_CIO_CRX__COLOR, NV_CIO_CRE_SCRATCH4__INDEX) >> 4); + int clock; + + if (bios->major_version > 2) + return 0; + + clock = ROM16(bios->data[meminitoffs + 4]) * 10; + setPLL(bios, NV_PRAMDAC_NVPLL_COEFF, clock); + + clock = ROM16(bios->data[meminitoffs + 2]) * 10; + if (bios->data[meminitoffs] & 1) /* DDR */ + clock *= 2; + setPLL(bios, NV_PRAMDAC_MPLL_COEFF, clock); + + return 1; +} + +static int +init_configure_preinit(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_CONFIGURE_PREINIT opcode: 0x68 ('h') + * + * offset (8 bit): opcode + * + * Equivalent to INIT_DONE on bios version 3 or greater. + * For early bios versions, does early init, loading ram and crystal + * configuration from straps into CR3C + */ + + /* no iexec->execute check by design */ + + uint32_t straps = bios_rd32(bios, NV_PEXTDEV_BOOT_0); + uint8_t cr3c = ((straps << 2) & 0xf0) | (straps & (1 << 6)); + + if (bios->major_version > 2) + return 0; + + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, + NV_CIO_CRE_SCRATCH4__INDEX, cr3c); + + return 1; +} + +static int +init_io(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_IO opcode: 0x69 ('i') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): CRTC port + * offset + 3 (8 bit): mask + * offset + 4 (8 bit): data + * + * Assign ((IOVAL("crtc port") & "mask") | "data") to "crtc port" + */ + + struct drm_nouveau_private *dev_priv = bios->dev->dev_private; + uint16_t crtcport = ROM16(bios->data[offset + 1]); + uint8_t mask = bios->data[offset + 3]; + uint8_t data = bios->data[offset + 4]; + + if (!iexec->execute) + return 5; + + BIOSLOG(bios, "0x%04X: Port: 0x%04X, Mask: 0x%02X, Data: 0x%02X\n", + offset, crtcport, mask, data); + + /* + * I have no idea what this does, but NVIDIA do this magic sequence + * in the places where this INIT_IO happens.. + */ + if (dev_priv->card_type >= NV_50 && crtcport == 0x3c3 && data == 1) { + int i; + + bios_wr32(bios, 0x614100, (bios_rd32( + bios, 0x614100) & 0x0fffffff) | 0x00800000); + + bios_wr32(bios, 0x00e18c, bios_rd32( + bios, 0x00e18c) | 0x00020000); + + bios_wr32(bios, 0x614900, (bios_rd32( + bios, 0x614900) & 0x0fffffff) | 0x00800000); + + bios_wr32(bios, 0x000200, bios_rd32( + bios, 0x000200) & ~0x40000000); + + mdelay(10); + + bios_wr32(bios, 0x00e18c, bios_rd32( + bios, 0x00e18c) & ~0x00020000); + + bios_wr32(bios, 0x000200, bios_rd32( + bios, 0x000200) | 0x40000000); + + bios_wr32(bios, 0x614100, 0x00800018); + bios_wr32(bios, 0x614900, 0x00800018); + + mdelay(10); + + bios_wr32(bios, 0x614100, 0x10000018); + bios_wr32(bios, 0x614900, 0x10000018); + + for (i = 0; i < 3; i++) + bios_wr32(bios, 0x614280 + (i*0x800), bios_rd32( + bios, 0x614280 + (i*0x800)) & 0xf0f0f0f0); + + for (i = 0; i < 2; i++) + bios_wr32(bios, 0x614300 + (i*0x800), bios_rd32( + bios, 0x614300 + (i*0x800)) & 0xfffff0f0); + + for (i = 0; i < 3; i++) + bios_wr32(bios, 0x614380 + (i*0x800), bios_rd32( + bios, 0x614380 + (i*0x800)) & 0xfffff0f0); + + for (i = 0; i < 2; i++) + bios_wr32(bios, 0x614200 + (i*0x800), bios_rd32( + bios, 0x614200 + (i*0x800)) & 0xfffffff0); + + for (i = 0; i < 2; i++) + bios_wr32(bios, 0x614108 + (i*0x800), bios_rd32( + bios, 0x614108 + (i*0x800)) & 0x0fffffff); + return 5; + } + + bios_port_wr(bios, crtcport, (bios_port_rd(bios, crtcport) & mask) | + data); + return 5; +} + +static int +init_sub(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_SUB opcode: 0x6B ('k') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): script number + * + * Execute script number "script number", as a subroutine + */ + + uint8_t sub = bios->data[offset + 1]; + + if (!iexec->execute) + return 2; + + BIOSLOG(bios, "0x%04X: Calling script %d\n", offset, sub); + + parse_init_table(bios, + ROM16(bios->data[bios->init_script_tbls_ptr + sub * 2]), + iexec); + + BIOSLOG(bios, "0x%04X: End of script %d\n", offset, sub); + + return 2; +} + +static int +init_ram_condition(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_RAM_CONDITION opcode: 0x6D ('m') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): mask + * offset + 2 (8 bit): cmpval + * + * Test if (NV_PFB_BOOT_0 & "mask") equals "cmpval". + * If condition not met skip subsequent opcodes until condition is + * inverted (INIT_NOT), or we hit INIT_RESUME + */ + + uint8_t mask = bios->data[offset + 1]; + uint8_t cmpval = bios->data[offset + 2]; + uint8_t data; + + if (!iexec->execute) + return 3; + + data = bios_rd32(bios, NV_PFB_BOOT_0) & mask; + + BIOSLOG(bios, "0x%04X: Checking if 0x%08X equals 0x%08X\n", + offset, data, cmpval); + + if (data == cmpval) + BIOSLOG(bios, "0x%04X: Condition fulfilled -- continuing to execute\n", offset); + else { + BIOSLOG(bios, "0x%04X: Condition not fulfilled -- skipping following commands\n", offset); + iexec->execute = false; + } + + return 3; +} + +static int +init_nv_reg(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_NV_REG opcode: 0x6E ('n') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (32 bit): mask + * offset + 9 (32 bit): data + * + * Assign ((REGVAL("register") & "mask") | "data") to "register" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint32_t mask = ROM32(bios->data[offset + 5]); + uint32_t data = ROM32(bios->data[offset + 9]); + + if (!iexec->execute) + return 13; + + BIOSLOG(bios, "0x%04X: Reg: 0x%08X, Mask: 0x%08X, Data: 0x%08X\n", + offset, reg, mask, data); + + bios_wr32(bios, reg, (bios_rd32(bios, reg) & mask) | data); + + return 13; +} + +static int +init_macro(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_MACRO opcode: 0x6F ('o') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): macro number + * + * Look up macro index "macro number" in the macro index table. + * The macro index table entry has 1 byte for the index in the macro + * table, and 1 byte for the number of times to repeat the macro. + * The macro table entry has 4 bytes for the register address and + * 4 bytes for the value to write to that register + */ + + uint8_t macro_index_tbl_idx = bios->data[offset + 1]; + uint16_t tmp = bios->macro_index_tbl_ptr + (macro_index_tbl_idx * MACRO_INDEX_SIZE); + uint8_t macro_tbl_idx = bios->data[tmp]; + uint8_t count = bios->data[tmp + 1]; + uint32_t reg, data; + int i; + + if (!iexec->execute) + return 2; + + BIOSLOG(bios, "0x%04X: Macro: 0x%02X, MacroTableIndex: 0x%02X, " + "Count: 0x%02X\n", + offset, macro_index_tbl_idx, macro_tbl_idx, count); + + for (i = 0; i < count; i++) { + uint16_t macroentryptr = bios->macro_tbl_ptr + (macro_tbl_idx + i) * MACRO_SIZE; + + reg = ROM32(bios->data[macroentryptr]); + data = ROM32(bios->data[macroentryptr + 4]); + + bios_wr32(bios, reg, data); + } + + return 2; +} + +static int +init_done(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_DONE opcode: 0x71 ('q') + * + * offset (8 bit): opcode + * + * End the current script + */ + + /* mild retval abuse to stop parsing this table */ + return 0; +} + +static int +init_resume(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_RESUME opcode: 0x72 ('r') + * + * offset (8 bit): opcode + * + * End the current execute / no-execute condition + */ + + if (iexec->execute) + return 1; + + iexec->execute = true; + BIOSLOG(bios, "0x%04X: ---- Executing following commands ----\n", offset); + + return 1; +} + +static int +init_time(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_TIME opcode: 0x74 ('t') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): time + * + * Sleep for "time" microseconds. + */ + + unsigned time = ROM16(bios->data[offset + 1]); + + if (!iexec->execute) + return 3; + + BIOSLOG(bios, "0x%04X: Sleeping for 0x%04X microseconds\n", + offset, time); + + if (time < 1000) + udelay(time); + else + msleep((time + 900) / 1000); + + return 3; +} + +static int +init_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_CONDITION opcode: 0x75 ('u') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): condition number + * + * Check condition "condition number" in the condition table. + * If condition not met skip subsequent opcodes until condition is + * inverted (INIT_NOT), or we hit INIT_RESUME + */ + + uint8_t cond = bios->data[offset + 1]; + + if (!iexec->execute) + return 2; + + BIOSLOG(bios, "0x%04X: Condition: 0x%02X\n", offset, cond); + + if (bios_condition_met(bios, offset, cond)) + BIOSLOG(bios, "0x%04X: Condition fulfilled -- continuing to execute\n", offset); + else { + BIOSLOG(bios, "0x%04X: Condition not fulfilled -- skipping following commands\n", offset); + iexec->execute = false; + } + + return 2; +} + +static int +init_io_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_IO_CONDITION opcode: 0x76 + * + * offset (8 bit): opcode + * offset + 1 (8 bit): condition number + * + * Check condition "condition number" in the io condition table. + * If condition not met skip subsequent opcodes until condition is + * inverted (INIT_NOT), or we hit INIT_RESUME + */ + + uint8_t cond = bios->data[offset + 1]; + + if (!iexec->execute) + return 2; + + BIOSLOG(bios, "0x%04X: IO condition: 0x%02X\n", offset, cond); + + if (io_condition_met(bios, offset, cond)) + BIOSLOG(bios, "0x%04X: Condition fulfilled -- continuing to execute\n", offset); + else { + BIOSLOG(bios, "0x%04X: Condition not fulfilled -- skipping following commands\n", offset); + iexec->execute = false; + } + + return 2; +} + +static int +init_index_io(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_INDEX_IO opcode: 0x78 ('x') + * + * offset (8 bit): opcode + * offset + 1 (16 bit): CRTC port + * offset + 3 (8 bit): CRTC index + * offset + 4 (8 bit): mask + * offset + 5 (8 bit): data + * + * Read value at index "CRTC index" on "CRTC port", AND with "mask", + * OR with "data", write-back + */ + + uint16_t crtcport = ROM16(bios->data[offset + 1]); + uint8_t crtcindex = bios->data[offset + 3]; + uint8_t mask = bios->data[offset + 4]; + uint8_t data = bios->data[offset + 5]; + uint8_t value; + + if (!iexec->execute) + return 6; + + BIOSLOG(bios, "0x%04X: Port: 0x%04X, Index: 0x%02X, Mask: 0x%02X, " + "Data: 0x%02X\n", + offset, crtcport, crtcindex, mask, data); + + value = (bios_idxprt_rd(bios, crtcport, crtcindex) & mask) | data; + bios_idxprt_wr(bios, crtcport, crtcindex, value); + + return 6; +} + +static int +init_pll(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_PLL opcode: 0x79 ('y') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (16 bit): freq + * + * Set PLL register "register" to coefficients for frequency (10kHz) + * "freq" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint16_t freq = ROM16(bios->data[offset + 5]); + + if (!iexec->execute) + return 7; + + BIOSLOG(bios, "0x%04X: Reg: 0x%08X, Freq: %d0kHz\n", offset, reg, freq); + + setPLL(bios, reg, freq * 10); + + return 7; +} + +static int +init_zm_reg(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_REG opcode: 0x7A ('z') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (32 bit): value + * + * Assign "value" to "register" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint32_t value = ROM32(bios->data[offset + 5]); + + if (!iexec->execute) + return 9; + + if (reg == 0x000200) + value |= 1; + + bios_wr32(bios, reg, value); + + return 9; +} + +static int +init_ram_restrict_pll(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_RAM_RESTRICT_PLL opcode: 0x87 ('') + * + * offset (8 bit): opcode + * offset + 1 (8 bit): PLL type + * offset + 2 (32 bit): frequency 0 + * + * Uses the RAMCFG strap of PEXTDEV_BOOT as an index into the table at + * ram_restrict_table_ptr. The value read from there is used to select + * a frequency from the table starting at 'frequency 0' to be + * programmed into the PLL corresponding to 'type'. + * + * The PLL limits table on cards using this opcode has a mapping of + * 'type' to the relevant registers. + */ + + struct drm_device *dev = bios->dev; + uint32_t strap = (bios_rd32(bios, NV_PEXTDEV_BOOT_0) & 0x0000003c) >> 2; + uint8_t index = bios->data[bios->ram_restrict_tbl_ptr + strap]; + uint8_t type = bios->data[offset + 1]; + uint32_t freq = ROM32(bios->data[offset + 2 + (index * 4)]); + uint8_t *pll_limits = &bios->data[bios->pll_limit_tbl_ptr], *entry; + int len = 2 + bios->ram_restrict_group_count * 4; + int i; + + if (!iexec->execute) + return len; + + if (!bios->pll_limit_tbl_ptr || (pll_limits[0] & 0xf0) != 0x30) { + NV_ERROR(dev, "PLL limits table not version 3.x\n"); + return len; /* deliberate, allow default clocks to remain */ + } + + entry = pll_limits + pll_limits[1]; + for (i = 0; i < pll_limits[3]; i++, entry += pll_limits[2]) { + if (entry[0] == type) { + uint32_t reg = ROM32(entry[3]); + + BIOSLOG(bios, "0x%04X: " + "Type %02x Reg 0x%08x Freq %dKHz\n", + offset, type, reg, freq); + + setPLL(bios, reg, freq); + return len; + } + } + + NV_ERROR(dev, "PLL type 0x%02x not found in PLL limits table", type); + return len; +} + +static int +init_8c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_8C opcode: 0x8C ('') + * + * NOP so far.... + * + */ + + return 1; +} + +static int +init_8d(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_8D opcode: 0x8D ('') + * + * NOP so far.... + * + */ + + return 1; +} + +static int +init_gpio(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_GPIO opcode: 0x8E ('') + * + * offset (8 bit): opcode + * + * Loop over all entries in the DCB GPIO table, and initialise + * each GPIO according to various values listed in each entry + */ + + const uint32_t nv50_gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 }; + const uint32_t nv50_gpio_ctl[2] = { 0xe100, 0xe28c }; + const uint8_t *gpio_table = &bios->data[bios->bdcb.gpio_table_ptr]; + const uint8_t *gpio_entry; + int i; + + if (!iexec->execute) + return 1; + + if (bios->bdcb.version != 0x40) { + NV_ERROR(bios->dev, "DCB table not version 4.0\n"); + return 0; + } + + if (!bios->bdcb.gpio_table_ptr) { + NV_WARN(bios->dev, "Invalid pointer to INIT_8E table\n"); + return 0; + } + + gpio_entry = gpio_table + gpio_table[1]; + for (i = 0; i < gpio_table[2]; i++, gpio_entry += gpio_table[3]) { + uint32_t entry = ROM32(gpio_entry[0]), r, s, v; + int line = (entry & 0x0000001f); + + BIOSLOG(bios, "0x%04X: Entry: 0x%08X\n", offset, entry); + + if ((entry & 0x0000ff00) == 0x0000ff00) + continue; + + r = nv50_gpio_reg[line >> 3]; + s = (line & 0x07) << 2; + v = bios_rd32(bios, r) & ~(0x00000003 << s); + if (entry & 0x01000000) + v |= (((entry & 0x60000000) >> 29) ^ 2) << s; + else + v |= (((entry & 0x18000000) >> 27) ^ 2) << s; + bios_wr32(bios, r, v); + + r = nv50_gpio_ctl[line >> 4]; + s = (line & 0x0f); + v = bios_rd32(bios, r) & ~(0x00010001 << s); + switch ((entry & 0x06000000) >> 25) { + case 1: + v |= (0x00000001 << s); + break; + case 2: + v |= (0x00010000 << s); + break; + default: + break; + } + bios_wr32(bios, r, v); + } + + return 1; +} + +static int +init_ram_restrict_zm_reg_group(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_RAM_RESTRICT_ZM_REG_GROUP opcode: 0x8F ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): reg + * offset + 5 (8 bit): regincrement + * offset + 6 (8 bit): count + * offset + 7 (32 bit): value 1,1 + * ... + * + * Use the RAMCFG strap of PEXTDEV_BOOT as an index into the table at + * ram_restrict_table_ptr. The value read from here is 'n', and + * "value 1,n" gets written to "reg". This repeats "count" times and on + * each iteration 'm', "reg" increases by "regincrement" and + * "value m,n" is used. The extent of n is limited by a number read + * from the 'M' BIT table, herein called "blocklen" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint8_t regincrement = bios->data[offset + 5]; + uint8_t count = bios->data[offset + 6]; + uint32_t strap_ramcfg, data; + /* previously set by 'M' BIT table */ + uint16_t blocklen = bios->ram_restrict_group_count * 4; + int len = 7 + count * blocklen; + uint8_t index; + int i; + + + if (!iexec->execute) + return len; + + if (!blocklen) { + NV_ERROR(bios->dev, + "0x%04X: Zero block length - has the M table " + "been parsed?\n", offset); + return 0; + } + + strap_ramcfg = (bios_rd32(bios, NV_PEXTDEV_BOOT_0) >> 2) & 0xf; + index = bios->data[bios->ram_restrict_tbl_ptr + strap_ramcfg]; + + BIOSLOG(bios, "0x%04X: Reg: 0x%08X, RegIncrement: 0x%02X, " + "Count: 0x%02X, StrapRamCfg: 0x%02X, Index: 0x%02X\n", + offset, reg, regincrement, count, strap_ramcfg, index); + + for (i = 0; i < count; i++) { + data = ROM32(bios->data[offset + 7 + index * 4 + blocklen * i]); + + bios_wr32(bios, reg, data); + + reg += regincrement; + } + + return len; +} + +static int +init_copy_zm_reg(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_COPY_ZM_REG opcode: 0x90 ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): src reg + * offset + 5 (32 bit): dst reg + * + * Put contents of "src reg" into "dst reg" + */ + + uint32_t srcreg = ROM32(bios->data[offset + 1]); + uint32_t dstreg = ROM32(bios->data[offset + 5]); + + if (!iexec->execute) + return 9; + + bios_wr32(bios, dstreg, bios_rd32(bios, srcreg)); + + return 9; +} + +static int +init_zm_reg_group_addr_latched(struct nvbios *bios, uint16_t offset, + struct init_exec *iexec) +{ + /* + * INIT_ZM_REG_GROUP_ADDRESS_LATCHED opcode: 0x91 ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): dst reg + * offset + 5 (8 bit): count + * offset + 6 (32 bit): data 1 + * ... + * + * For each of "count" values write "data n" to "dst reg" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint8_t count = bios->data[offset + 5]; + int len = 6 + count * 4; + int i; + + if (!iexec->execute) + return len; + + for (i = 0; i < count; i++) { + uint32_t data = ROM32(bios->data[offset + 6 + 4 * i]); + bios_wr32(bios, reg, data); + } + + return len; +} + +static int +init_reserved(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_RESERVED opcode: 0x92 ('') + * + * offset (8 bit): opcode + * + * Seemingly does nothing + */ + + return 1; +} + +static int +init_96(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_96 opcode: 0x96 ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): sreg + * offset + 5 (8 bit): sshift + * offset + 6 (8 bit): smask + * offset + 7 (8 bit): index + * offset + 8 (32 bit): reg + * offset + 12 (32 bit): mask + * offset + 16 (8 bit): shift + * + */ + + uint16_t xlatptr = bios->init96_tbl_ptr + (bios->data[offset + 7] * 2); + uint32_t reg = ROM32(bios->data[offset + 8]); + uint32_t mask = ROM32(bios->data[offset + 12]); + uint32_t val; + + val = bios_rd32(bios, ROM32(bios->data[offset + 1])); + if (bios->data[offset + 5] < 0x80) + val >>= bios->data[offset + 5]; + else + val <<= (0x100 - bios->data[offset + 5]); + val &= bios->data[offset + 6]; + + val = bios->data[ROM16(bios->data[xlatptr]) + val]; + val <<= bios->data[offset + 16]; + + if (!iexec->execute) + return 17; + + bios_wr32(bios, reg, (bios_rd32(bios, reg) & mask) | val); + return 17; +} + +static int +init_97(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_97 opcode: 0x97 ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): register + * offset + 5 (32 bit): mask + * offset + 9 (32 bit): value + * + * Adds "value" to "register" preserving the fields specified + * by "mask" + */ + + uint32_t reg = ROM32(bios->data[offset + 1]); + uint32_t mask = ROM32(bios->data[offset + 5]); + uint32_t add = ROM32(bios->data[offset + 9]); + uint32_t val; + + val = bios_rd32(bios, reg); + val = (val & mask) | ((val + add) & ~mask); + + if (!iexec->execute) + return 13; + + bios_wr32(bios, reg, val); + return 13; +} + +static int +init_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_AUXCH opcode: 0x98 ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): address + * offset + 5 (8 bit): count + * offset + 6 (8 bit): mask 0 + * offset + 7 (8 bit): data 0 + * ... + * + */ + + struct drm_device *dev = bios->dev; + struct nouveau_i2c_chan *auxch; + uint32_t addr = ROM32(bios->data[offset + 1]); + uint8_t count = bios->data[offset + 5]; + int len = 6 + count * 2; + int ret, i; + + if (!bios->display.output) { + NV_ERROR(dev, "INIT_AUXCH: no active output\n"); + return 0; + } + + auxch = init_i2c_device_find(dev, bios->display.output->i2c_index); + if (!auxch) { + NV_ERROR(dev, "INIT_AUXCH: couldn't get auxch %d\n", + bios->display.output->i2c_index); + return 0; + } + + if (!iexec->execute) + return len; + + offset += 6; + for (i = 0; i < count; i++, offset += 2) { + uint8_t data; + + ret = nouveau_dp_auxch(auxch, 9, addr, &data, 1); + if (ret) { + NV_ERROR(dev, "INIT_AUXCH: rd auxch fail %d\n", ret); + return 0; + } + + data &= bios->data[offset + 0]; + data |= bios->data[offset + 1]; + + ret = nouveau_dp_auxch(auxch, 8, addr, &data, 1); + if (ret) { + NV_ERROR(dev, "INIT_AUXCH: wr auxch fail %d\n", ret); + return 0; + } + } + + return len; +} + +static int +init_zm_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) +{ + /* + * INIT_ZM_AUXCH opcode: 0x99 ('') + * + * offset (8 bit): opcode + * offset + 1 (32 bit): address + * offset + 5 (8 bit): count + * offset + 6 (8 bit): data 0 + * ... + * + */ + + struct drm_device *dev = bios->dev; + struct nouveau_i2c_chan *auxch; + uint32_t addr = ROM32(bios->data[offset + 1]); + uint8_t count = bios->data[offset + 5]; + int len = 6 + count; + int ret, i; + + if (!bios->display.output) { + NV_ERROR(dev, "INIT_ZM_AUXCH: no active output\n"); + return 0; + } + + auxch = init_i2c_device_find(dev, bios->display.output->i2c_index); + if (!auxch) { + NV_ERROR(dev, "INIT_ZM_AUXCH: couldn't get auxch %d\n", + bios->display.output->i2c_index); + return 0; + } + + if (!iexec->execute) + return len; + + offset += 6; + for (i = 0; i < count; i++, offset++) { + ret = nouveau_dp_auxch(auxch, 8, addr, &bios->data[offset], 1); + if (ret) { + NV_ERROR(dev, "INIT_ZM_AUXCH: wr auxch fail %d\n", ret); + return 0; + } + } + + return len; +} + +static struct init_tbl_entry itbl_entry[] = { + /* command name , id , length , offset , mult , command handler */ + /* INIT_PROG (0x31, 15, 10, 4) removed due to no example of use */ + { "INIT_IO_RESTRICT_PROG" , 0x32, init_io_restrict_prog }, + { "INIT_REPEAT" , 0x33, init_repeat }, + { "INIT_IO_RESTRICT_PLL" , 0x34, init_io_restrict_pll }, + { "INIT_END_REPEAT" , 0x36, init_end_repeat }, + { "INIT_COPY" , 0x37, init_copy }, + { "INIT_NOT" , 0x38, init_not }, + { "INIT_IO_FLAG_CONDITION" , 0x39, init_io_flag_condition }, + { "INIT_INDEX_ADDRESS_LATCHED" , 0x49, init_idx_addr_latched }, + { "INIT_IO_RESTRICT_PLL2" , 0x4A, init_io_restrict_pll2 }, + { "INIT_PLL2" , 0x4B, init_pll2 }, + { "INIT_I2C_BYTE" , 0x4C, init_i2c_byte }, + { "INIT_ZM_I2C_BYTE" , 0x4D, init_zm_i2c_byte }, + { "INIT_ZM_I2C" , 0x4E, init_zm_i2c }, + { "INIT_TMDS" , 0x4F, init_tmds }, + { "INIT_ZM_TMDS_GROUP" , 0x50, init_zm_tmds_group }, + { "INIT_CR_INDEX_ADDRESS_LATCHED" , 0x51, init_cr_idx_adr_latch }, + { "INIT_CR" , 0x52, init_cr }, + { "INIT_ZM_CR" , 0x53, init_zm_cr }, + { "INIT_ZM_CR_GROUP" , 0x54, init_zm_cr_group }, + { "INIT_CONDITION_TIME" , 0x56, init_condition_time }, + { "INIT_ZM_REG_SEQUENCE" , 0x58, init_zm_reg_sequence }, + /* INIT_INDIRECT_REG (0x5A, 7, 0, 0) removed due to no example of use */ + { "INIT_SUB_DIRECT" , 0x5B, init_sub_direct }, + { "INIT_COPY_NV_REG" , 0x5F, init_copy_nv_reg }, + { "INIT_ZM_INDEX_IO" , 0x62, init_zm_index_io }, + { "INIT_COMPUTE_MEM" , 0x63, init_compute_mem }, + { "INIT_RESET" , 0x65, init_reset }, + { "INIT_CONFIGURE_MEM" , 0x66, init_configure_mem }, + { "INIT_CONFIGURE_CLK" , 0x67, init_configure_clk }, + { "INIT_CONFIGURE_PREINIT" , 0x68, init_configure_preinit }, + { "INIT_IO" , 0x69, init_io }, + { "INIT_SUB" , 0x6B, init_sub }, + { "INIT_RAM_CONDITION" , 0x6D, init_ram_condition }, + { "INIT_NV_REG" , 0x6E, init_nv_reg }, + { "INIT_MACRO" , 0x6F, init_macro }, + { "INIT_DONE" , 0x71, init_done }, + { "INIT_RESUME" , 0x72, init_resume }, + /* INIT_RAM_CONDITION2 (0x73, 9, 0, 0) removed due to no example of use */ + { "INIT_TIME" , 0x74, init_time }, + { "INIT_CONDITION" , 0x75, init_condition }, + { "INIT_IO_CONDITION" , 0x76, init_io_condition }, + { "INIT_INDEX_IO" , 0x78, init_index_io }, + { "INIT_PLL" , 0x79, init_pll }, + { "INIT_ZM_REG" , 0x7A, init_zm_reg }, + { "INIT_RAM_RESTRICT_PLL" , 0x87, init_ram_restrict_pll }, + { "INIT_8C" , 0x8C, init_8c }, + { "INIT_8D" , 0x8D, init_8d }, + { "INIT_GPIO" , 0x8E, init_gpio }, + { "INIT_RAM_RESTRICT_ZM_REG_GROUP" , 0x8F, init_ram_restrict_zm_reg_group }, + { "INIT_COPY_ZM_REG" , 0x90, init_copy_zm_reg }, + { "INIT_ZM_REG_GROUP_ADDRESS_LATCHED" , 0x91, init_zm_reg_group_addr_latched }, + { "INIT_RESERVED" , 0x92, init_reserved }, + { "INIT_96" , 0x96, init_96 }, + { "INIT_97" , 0x97, init_97 }, + { "INIT_AUXCH" , 0x98, init_auxch }, + { "INIT_ZM_AUXCH" , 0x99, init_zm_auxch }, + { NULL , 0 , NULL } +}; + +#define MAX_TABLE_OPS 1000 + +static int +parse_init_table(struct nvbios *bios, unsigned int offset, + struct init_exec *iexec) +{ + /* + * Parses all commands in an init table. + * + * We start out executing all commands found in the init table. Some + * opcodes may change the status of iexec->execute to SKIP, which will + * cause the following opcodes to perform no operation until the value + * is changed back to EXECUTE. + */ + + int count = 0, i, res; + uint8_t id; + + /* + * Loop until INIT_DONE causes us to break out of the loop + * (or until offset > bios length just in case... ) + * (and no more than MAX_TABLE_OPS iterations, just in case... ) + */ + while ((offset < bios->length) && (count++ < MAX_TABLE_OPS)) { + id = bios->data[offset]; + + /* Find matching id in itbl_entry */ + for (i = 0; itbl_entry[i].name && (itbl_entry[i].id != id); i++) + ; + + if (itbl_entry[i].name) { + BIOSLOG(bios, "0x%04X: [ (0x%02X) - %s ]\n", + offset, itbl_entry[i].id, itbl_entry[i].name); + + /* execute eventual command handler */ + res = (*itbl_entry[i].handler)(bios, offset, iexec); + if (!res) + break; + /* + * Add the offset of the current command including all data + * of that command. The offset will then be pointing on the + * next op code. + */ + offset += res; + } else { + NV_ERROR(bios->dev, + "0x%04X: Init table command not found: " + "0x%02X\n", offset, id); + return -ENOENT; + } + } + + if (offset >= bios->length) + NV_WARN(bios->dev, + "Offset 0x%04X greater than known bios image length. " + "Corrupt image?\n", offset); + if (count >= MAX_TABLE_OPS) + NV_WARN(bios->dev, + "More than %d opcodes to a table is unlikely, " + "is the bios image corrupt?\n", MAX_TABLE_OPS); + + return 0; +} + +static void +parse_init_tables(struct nvbios *bios) +{ + /* Loops and calls parse_init_table() for each present table. */ + + int i = 0; + uint16_t table; + struct init_exec iexec = {true, false}; + + if (bios->old_style_init) { + if (bios->init_script_tbls_ptr) + parse_init_table(bios, bios->init_script_tbls_ptr, &iexec); + if (bios->extra_init_script_tbl_ptr) + parse_init_table(bios, bios->extra_init_script_tbl_ptr, &iexec); + + return; + } + + while ((table = ROM16(bios->data[bios->init_script_tbls_ptr + i]))) { + NV_INFO(bios->dev, + "Parsing VBIOS init table %d at offset 0x%04X\n", + i / 2, table); + BIOSLOG(bios, "0x%04X: ------ Executing following commands ------\n", table); + + parse_init_table(bios, table, &iexec); + i += 2; + } +} + +static uint16_t clkcmptable(struct nvbios *bios, uint16_t clktable, int pxclk) +{ + int compare_record_len, i = 0; + uint16_t compareclk, scriptptr = 0; + + if (bios->major_version < 5) /* pre BIT */ + compare_record_len = 3; + else + compare_record_len = 4; + + do { + compareclk = ROM16(bios->data[clktable + compare_record_len * i]); + if (pxclk >= compareclk * 10) { + if (bios->major_version < 5) { + uint8_t tmdssub = bios->data[clktable + 2 + compare_record_len * i]; + scriptptr = ROM16(bios->data[bios->init_script_tbls_ptr + tmdssub * 2]); + } else + scriptptr = ROM16(bios->data[clktable + 2 + compare_record_len * i]); + break; + } + i++; + } while (compareclk); + + return scriptptr; +} + +static void +run_digital_op_script(struct drm_device *dev, uint16_t scriptptr, + struct dcb_entry *dcbent, int head, bool dl) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + struct init_exec iexec = {true, false}; + + NV_TRACE(dev, "0x%04X: Parsing digital output script table\n", + scriptptr); + bios_idxprt_wr(bios, NV_CIO_CRX__COLOR, NV_CIO_CRE_44, + head ? NV_CIO_CRE_44_HEADB : NV_CIO_CRE_44_HEADA); + /* note: if dcb entries have been merged, index may be misleading */ + NVWriteVgaCrtc5758(dev, head, 0, dcbent->index); + parse_init_table(bios, scriptptr, &iexec); + + nv04_dfp_bind_head(dev, dcbent, head, dl); +} + +static int call_lvds_manufacturer_script(struct drm_device *dev, struct dcb_entry *dcbent, int head, enum LVDS_script script) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint8_t sub = bios->data[bios->fp.xlated_entry + script] + (bios->fp.link_c_increment && dcbent->or & OUTPUT_C ? 1 : 0); + uint16_t scriptofs = ROM16(bios->data[bios->init_script_tbls_ptr + sub * 2]); + + if (!bios->fp.xlated_entry || !sub || !scriptofs) + return -EINVAL; + + run_digital_op_script(dev, scriptofs, dcbent, head, bios->fp.dual_link); + + if (script == LVDS_PANEL_OFF) { + /* off-on delay in ms */ + msleep(ROM16(bios->data[bios->fp.xlated_entry + 7])); + } +#ifdef __powerpc__ + /* Powerbook specific quirks */ + if ((dev->pci_device & 0xffff) == 0x0179 || + (dev->pci_device & 0xffff) == 0x0189 || + (dev->pci_device & 0xffff) == 0x0329) { + if (script == LVDS_RESET) { + nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72); + + } else if (script == LVDS_PANEL_ON) { + bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, + bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) + | (1 << 31)); + bios_wr32(bios, NV_PCRTC_GPIO_EXT, + bios_rd32(bios, NV_PCRTC_GPIO_EXT) | 1); + + } else if (script == LVDS_PANEL_OFF) { + bios_wr32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL, + bios_rd32(bios, NV_PBUS_DEBUG_DUALHEAD_CTL) + & ~(1 << 31)); + bios_wr32(bios, NV_PCRTC_GPIO_EXT, + bios_rd32(bios, NV_PCRTC_GPIO_EXT) & ~3); + } + } +#endif + + return 0; +} + +static int run_lvds_table(struct drm_device *dev, struct dcb_entry *dcbent, int head, enum LVDS_script script, int pxclk) +{ + /* + * The BIT LVDS table's header has the information to setup the + * necessary registers. Following the standard 4 byte header are: + * A bitmask byte and a dual-link transition pxclk value for use in + * selecting the init script when not using straps; 4 script pointers + * for panel power, selected by output and on/off; and 8 table pointers + * for panel init, the needed one determined by output, and bits in the + * conf byte. These tables are similar to the TMDS tables, consisting + * of a list of pxclks and script pointers. + */ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + unsigned int outputset = (dcbent->or == 4) ? 1 : 0; + uint16_t scriptptr = 0, clktable; + uint8_t clktableptr = 0; + + /* + * For now we assume version 3.0 table - g80 support will need some + * changes + */ + + switch (script) { + case LVDS_INIT: + return -ENOSYS; + case LVDS_BACKLIGHT_ON: + case LVDS_PANEL_ON: + scriptptr = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 7 + outputset * 2]); + break; + case LVDS_BACKLIGHT_OFF: + case LVDS_PANEL_OFF: + scriptptr = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 11 + outputset * 2]); + break; + case LVDS_RESET: + if (dcbent->lvdsconf.use_straps_for_mode) { + if (bios->fp.dual_link) + clktableptr += 2; + if (bios->fp.BITbit1) + clktableptr++; + } else { + /* using EDID */ + uint8_t fallback = bios->data[bios->fp.lvdsmanufacturerpointer + 4]; + int fallbackcmpval = (dcbent->or == 4) ? 4 : 1; + + if (bios->fp.dual_link) { + clktableptr += 2; + fallbackcmpval *= 2; + } + if (fallbackcmpval & fallback) + clktableptr++; + } + + /* adding outputset * 8 may not be correct */ + clktable = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 15 + clktableptr * 2 + outputset * 8]); + if (!clktable) { + NV_ERROR(dev, "Pixel clock comparison table not found\n"); + return -ENOENT; + } + scriptptr = clkcmptable(bios, clktable, pxclk); + } + + if (!scriptptr) { + NV_ERROR(dev, "LVDS output init script not found\n"); + return -ENOENT; + } + run_digital_op_script(dev, scriptptr, dcbent, head, bios->fp.dual_link); + + return 0; +} + +int call_lvds_script(struct drm_device *dev, struct dcb_entry *dcbent, int head, enum LVDS_script script, int pxclk) +{ + /* + * LVDS operations are multiplexed in an effort to present a single API + * which works with two vastly differing underlying structures. + * This acts as the demux + */ + + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint8_t lvds_ver = bios->data[bios->fp.lvdsmanufacturerpointer]; + uint32_t sel_clk_binding, sel_clk; + int ret; + + if (bios->fp.last_script_invoc == (script << 1 | head) || !lvds_ver || + (lvds_ver >= 0x30 && script == LVDS_INIT)) + return 0; + + if (!bios->fp.lvds_init_run) { + bios->fp.lvds_init_run = true; + call_lvds_script(dev, dcbent, head, LVDS_INIT, pxclk); + } + + if (script == LVDS_PANEL_ON && bios->fp.reset_after_pclk_change) + call_lvds_script(dev, dcbent, head, LVDS_RESET, pxclk); + if (script == LVDS_RESET && bios->fp.power_off_for_reset) + call_lvds_script(dev, dcbent, head, LVDS_PANEL_OFF, pxclk); + + NV_TRACE(dev, "Calling LVDS script %d:\n", script); + + /* don't let script change pll->head binding */ + sel_clk_binding = bios_rd32(bios, NV_PRAMDAC_SEL_CLK) & 0x50000; + + if (lvds_ver < 0x30) + ret = call_lvds_manufacturer_script(dev, dcbent, head, script); + else + ret = run_lvds_table(dev, dcbent, head, script, pxclk); + + bios->fp.last_script_invoc = (script << 1 | head); + + sel_clk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK) & ~0x50000; + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK, sel_clk | sel_clk_binding); + /* some scripts set a value in NV_PBUS_POWERCTRL_2 and break video overlay */ + nvWriteMC(dev, NV_PBUS_POWERCTRL_2, 0); + + return ret; +} + +struct lvdstableheader { + uint8_t lvds_ver, headerlen, recordlen; +}; + +static int parse_lvds_manufacturer_table_header(struct drm_device *dev, struct nvbios *bios, struct lvdstableheader *lth) +{ + /* + * BMP version (0xa) LVDS table has a simple header of version and + * record length. The BIT LVDS table has the typical BIT table header: + * version byte, header length byte, record length byte, and a byte for + * the maximum number of records that can be held in the table. + */ + + uint8_t lvds_ver, headerlen, recordlen; + + memset(lth, 0, sizeof(struct lvdstableheader)); + + if (bios->fp.lvdsmanufacturerpointer == 0x0) { + NV_ERROR(dev, "Pointer to LVDS manufacturer table invalid\n"); + return -EINVAL; + } + + lvds_ver = bios->data[bios->fp.lvdsmanufacturerpointer]; + + switch (lvds_ver) { + case 0x0a: /* pre NV40 */ + headerlen = 2; + recordlen = bios->data[bios->fp.lvdsmanufacturerpointer + 1]; + break; + case 0x30: /* NV4x */ + headerlen = bios->data[bios->fp.lvdsmanufacturerpointer + 1]; + if (headerlen < 0x1f) { + NV_ERROR(dev, "LVDS table header not understood\n"); + return -EINVAL; + } + recordlen = bios->data[bios->fp.lvdsmanufacturerpointer + 2]; + break; + case 0x40: /* G80/G90 */ + headerlen = bios->data[bios->fp.lvdsmanufacturerpointer + 1]; + if (headerlen < 0x7) { + NV_ERROR(dev, "LVDS table header not understood\n"); + return -EINVAL; + } + recordlen = bios->data[bios->fp.lvdsmanufacturerpointer + 2]; + break; + default: + NV_ERROR(dev, + "LVDS table revision %d.%d not currently supported\n", + lvds_ver >> 4, lvds_ver & 0xf); + return -ENOSYS; + } + + lth->lvds_ver = lvds_ver; + lth->headerlen = headerlen; + lth->recordlen = recordlen; + + return 0; +} + +static int +get_fp_strap(struct drm_device *dev, struct nvbios *bios) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /* + * The fp strap is normally dictated by the "User Strap" in + * PEXTDEV_BOOT_0[20:16], but on BMP cards when bit 2 of the + * Internal_Flags struct at 0x48 is set, the user strap gets overriden + * by the PCI subsystem ID during POST, but not before the previous user + * strap has been committed to CR58 for CR57=0xf on head A, which may be + * read and used instead + */ + + if (bios->major_version < 5 && bios->data[0x48] & 0x4) + return NVReadVgaCrtc5758(dev, 0, 0xf) & 0xf; + + if (dev_priv->card_type >= NV_50) + return (bios_rd32(bios, NV_PEXTDEV_BOOT_0) >> 24) & 0xf; + else + return (bios_rd32(bios, NV_PEXTDEV_BOOT_0) >> 16) & 0xf; +} + +static int parse_fp_mode_table(struct drm_device *dev, struct nvbios *bios) +{ + uint8_t *fptable; + uint8_t fptable_ver, headerlen = 0, recordlen, fpentries = 0xf, fpindex; + int ret, ofs, fpstrapping; + struct lvdstableheader lth; + + if (bios->fp.fptablepointer == 0x0) { + /* Apple cards don't have the fp table; the laptops use DDC */ + /* The table is also missing on some x86 IGPs */ +#ifndef __powerpc__ + NV_ERROR(dev, "Pointer to flat panel table invalid\n"); +#endif + bios->pub.digital_min_front_porch = 0x4b; + return 0; + } + + fptable = &bios->data[bios->fp.fptablepointer]; + fptable_ver = fptable[0]; + + switch (fptable_ver) { + /* + * BMP version 0x5.0x11 BIOSen have version 1 like tables, but no + * version field, and miss one of the spread spectrum/PWM bytes. + * This could affect early GF2Go parts (not seen any appropriate ROMs + * though). Here we assume that a version of 0x05 matches this case + * (combining with a BMP version check would be better), as the + * common case for the panel type field is 0x0005, and that is in + * fact what we are reading the first byte of. + */ + case 0x05: /* some NV10, 11, 15, 16 */ + recordlen = 42; + ofs = -1; + break; + case 0x10: /* some NV15/16, and NV11+ */ + recordlen = 44; + ofs = 0; + break; + case 0x20: /* NV40+ */ + headerlen = fptable[1]; + recordlen = fptable[2]; + fpentries = fptable[3]; + /* + * fptable[4] is the minimum + * RAMDAC_FP_HCRTC -> RAMDAC_FP_HSYNC_START gap + */ + bios->pub.digital_min_front_porch = fptable[4]; + ofs = -7; + break; + default: + NV_ERROR(dev, + "FP table revision %d.%d not currently supported\n", + fptable_ver >> 4, fptable_ver & 0xf); + return -ENOSYS; + } + + if (!bios->is_mobile) /* !mobile only needs digital_min_front_porch */ + return 0; + + ret = parse_lvds_manufacturer_table_header(dev, bios, <h); + if (ret) + return ret; + + if (lth.lvds_ver == 0x30 || lth.lvds_ver == 0x40) { + bios->fp.fpxlatetableptr = bios->fp.lvdsmanufacturerpointer + + lth.headerlen + 1; + bios->fp.xlatwidth = lth.recordlen; + } + if (bios->fp.fpxlatetableptr == 0x0) { + NV_ERROR(dev, "Pointer to flat panel xlat table invalid\n"); + return -EINVAL; + } + + fpstrapping = get_fp_strap(dev, bios); + + fpindex = bios->data[bios->fp.fpxlatetableptr + + fpstrapping * bios->fp.xlatwidth]; + + if (fpindex > fpentries) { + NV_ERROR(dev, "Bad flat panel table index\n"); + return -ENOENT; + } + + /* nv4x cards need both a strap value and fpindex of 0xf to use DDC */ + if (lth.lvds_ver > 0x10) + bios->pub.fp_no_ddc = fpstrapping != 0xf || fpindex != 0xf; + + /* + * If either the strap or xlated fpindex value are 0xf there is no + * panel using a strap-derived bios mode present. this condition + * includes, but is different from, the DDC panel indicator above + */ + if (fpstrapping == 0xf || fpindex == 0xf) + return 0; + + bios->fp.mode_ptr = bios->fp.fptablepointer + headerlen + + recordlen * fpindex + ofs; + + NV_TRACE(dev, "BIOS FP mode: %dx%d (%dkHz pixel clock)\n", + ROM16(bios->data[bios->fp.mode_ptr + 11]) + 1, + ROM16(bios->data[bios->fp.mode_ptr + 25]) + 1, + ROM16(bios->data[bios->fp.mode_ptr + 7]) * 10); + + return 0; +} + +bool nouveau_bios_fp_mode(struct drm_device *dev, struct drm_display_mode *mode) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint8_t *mode_entry = &bios->data[bios->fp.mode_ptr]; + + if (!mode) /* just checking whether we can produce a mode */ + return bios->fp.mode_ptr; + + memset(mode, 0, sizeof(struct drm_display_mode)); + /* + * For version 1.0 (version in byte 0): + * bytes 1-2 are "panel type", including bits on whether Colour/mono, + * single/dual link, and type (TFT etc.) + * bytes 3-6 are bits per colour in RGBX + */ + mode->clock = ROM16(mode_entry[7]) * 10; + /* bytes 9-10 is HActive */ + mode->hdisplay = ROM16(mode_entry[11]) + 1; + /* + * bytes 13-14 is HValid Start + * bytes 15-16 is HValid End + */ + mode->hsync_start = ROM16(mode_entry[17]) + 1; + mode->hsync_end = ROM16(mode_entry[19]) + 1; + mode->htotal = ROM16(mode_entry[21]) + 1; + /* bytes 23-24, 27-30 similarly, but vertical */ + mode->vdisplay = ROM16(mode_entry[25]) + 1; + mode->vsync_start = ROM16(mode_entry[31]) + 1; + mode->vsync_end = ROM16(mode_entry[33]) + 1; + mode->vtotal = ROM16(mode_entry[35]) + 1; + mode->flags |= (mode_entry[37] & 0x10) ? + DRM_MODE_FLAG_PHSYNC : DRM_MODE_FLAG_NHSYNC; + mode->flags |= (mode_entry[37] & 0x1) ? + DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC; + /* + * bytes 38-39 relate to spread spectrum settings + * bytes 40-43 are something to do with PWM + */ + + mode->status = MODE_OK; + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; + drm_mode_set_name(mode); + return bios->fp.mode_ptr; +} + +int nouveau_bios_parse_lvds_table(struct drm_device *dev, int pxclk, bool *dl, bool *if_is_24bit) +{ + /* + * The LVDS table header is (mostly) described in + * parse_lvds_manufacturer_table_header(): the BIT header additionally + * contains the dual-link transition pxclk (in 10s kHz), at byte 5 - if + * straps are not being used for the panel, this specifies the frequency + * at which modes should be set up in the dual link style. + * + * Following the header, the BMP (ver 0xa) table has several records, + * indexed by a seperate xlat table, indexed in turn by the fp strap in + * EXTDEV_BOOT. Each record had a config byte, followed by 6 script + * numbers for use by INIT_SUB which controlled panel init and power, + * and finally a dword of ms to sleep between power off and on + * operations. + * + * In the BIT versions, the table following the header serves as an + * integrated config and xlat table: the records in the table are + * indexed by the FP strap nibble in EXTDEV_BOOT, and each record has + * two bytes - the first as a config byte, the second for indexing the + * fp mode table pointed to by the BIT 'D' table + * + * DDC is not used until after card init, so selecting the correct table + * entry and setting the dual link flag for EDID equipped panels, + * requiring tests against the native-mode pixel clock, cannot be done + * until later, when this function should be called with non-zero pxclk + */ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + int fpstrapping = get_fp_strap(dev, bios), lvdsmanufacturerindex = 0; + struct lvdstableheader lth; + uint16_t lvdsofs; + int ret, chip_version = bios->pub.chip_version; + + ret = parse_lvds_manufacturer_table_header(dev, bios, <h); + if (ret) + return ret; + + switch (lth.lvds_ver) { + case 0x0a: /* pre NV40 */ + lvdsmanufacturerindex = bios->data[ + bios->fp.fpxlatemanufacturertableptr + + fpstrapping]; + + /* we're done if this isn't the EDID panel case */ + if (!pxclk) + break; + + if (chip_version < 0x25) { + /* nv17 behaviour + * + * It seems the old style lvds script pointer is reused + * to select 18/24 bit colour depth for EDID panels. + */ + lvdsmanufacturerindex = + (bios->legacy.lvds_single_a_script_ptr & 1) ? + 2 : 0; + if (pxclk >= bios->fp.duallink_transition_clk) + lvdsmanufacturerindex++; + } else if (chip_version < 0x30) { + /* nv28 behaviour (off-chip encoder) + * + * nv28 does a complex dance of first using byte 121 of + * the EDID to choose the lvdsmanufacturerindex, then + * later attempting to match the EDID manufacturer and + * product IDs in a table (signature 'pidt' (panel id + * table?)), setting an lvdsmanufacturerindex of 0 and + * an fp strap of the match index (or 0xf if none) + */ + lvdsmanufacturerindex = 0; + } else { + /* nv31, nv34 behaviour */ + lvdsmanufacturerindex = 0; + if (pxclk >= bios->fp.duallink_transition_clk) + lvdsmanufacturerindex = 2; + if (pxclk >= 140000) + lvdsmanufacturerindex = 3; + } + + /* + * nvidia set the high nibble of (cr57=f, cr58) to + * lvdsmanufacturerindex in this case; we don't + */ + break; + case 0x30: /* NV4x */ + case 0x40: /* G80/G90 */ + lvdsmanufacturerindex = fpstrapping; + break; + default: + NV_ERROR(dev, "LVDS table revision not currently supported\n"); + return -ENOSYS; + } + + lvdsofs = bios->fp.xlated_entry = bios->fp.lvdsmanufacturerpointer + lth.headerlen + lth.recordlen * lvdsmanufacturerindex; + switch (lth.lvds_ver) { + case 0x0a: + bios->fp.power_off_for_reset = bios->data[lvdsofs] & 1; + bios->fp.reset_after_pclk_change = bios->data[lvdsofs] & 2; + bios->fp.dual_link = bios->data[lvdsofs] & 4; + bios->fp.link_c_increment = bios->data[lvdsofs] & 8; + *if_is_24bit = bios->data[lvdsofs] & 16; + break; + case 0x30: + /* + * My money would be on there being a 24 bit interface bit in + * this table, but I have no example of a laptop bios with a + * 24 bit panel to confirm that. Hence we shout loudly if any + * bit other than bit 0 is set (I've not even seen bit 1) + */ + if (bios->data[lvdsofs] > 1) + NV_ERROR(dev, + "You have a very unusual laptop display; please report it\n"); + /* + * No sign of the "power off for reset" or "reset for panel + * on" bits, but it's safer to assume we should + */ + bios->fp.power_off_for_reset = true; + bios->fp.reset_after_pclk_change = true; + /* + * It's ok lvdsofs is wrong for nv4x edid case; dual_link is + * over-written, and BITbit1 isn't used + */ + bios->fp.dual_link = bios->data[lvdsofs] & 1; + bios->fp.BITbit1 = bios->data[lvdsofs] & 2; + bios->fp.duallink_transition_clk = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 5]) * 10; + break; + case 0x40: + bios->fp.dual_link = bios->data[lvdsofs] & 1; + bios->fp.if_is_24bit = bios->data[lvdsofs] & 2; + bios->fp.strapless_is_24bit = bios->data[bios->fp.lvdsmanufacturerpointer + 4]; + bios->fp.duallink_transition_clk = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 5]) * 10; + break; + } + + /* Dell Latitude D620 reports a too-high value for the dual-link + * transition freq, causing us to program the panel incorrectly. + * + * It doesn't appear the VBIOS actually uses its transition freq + * (90000kHz), instead it uses the "Number of LVDS channels" field + * out of the panel ID structure (http://www.spwg.org/). + * + * For the moment, a quirk will do :) + */ + if ((dev->pdev->device == 0x01d7) && + (dev->pdev->subsystem_vendor == 0x1028) && + (dev->pdev->subsystem_device == 0x01c2)) { + bios->fp.duallink_transition_clk = 80000; + } + + /* set dual_link flag for EDID case */ + if (pxclk && (chip_version < 0x25 || chip_version > 0x28)) + bios->fp.dual_link = (pxclk >= bios->fp.duallink_transition_clk); + + *dl = bios->fp.dual_link; + + return 0; +} + +static uint8_t * +bios_output_config_match(struct drm_device *dev, struct dcb_entry *dcbent, + uint16_t record, int record_len, int record_nr) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint32_t entry; + uint16_t table; + int i, v; + + for (i = 0; i < record_nr; i++, record += record_len) { + table = ROM16(bios->data[record]); + if (!table) + continue; + entry = ROM32(bios->data[table]); + + v = (entry & 0x000f0000) >> 16; + if (!(v & dcbent->or)) + continue; + + v = (entry & 0x000000f0) >> 4; + if (v != dcbent->location) + continue; + + v = (entry & 0x0000000f); + if (v != dcbent->type) + continue; + + return &bios->data[table]; + } + + return NULL; +} + +void * +nouveau_bios_dp_table(struct drm_device *dev, struct dcb_entry *dcbent, + int *length) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint8_t *table; + + if (!bios->display.dp_table_ptr) { + NV_ERROR(dev, "No pointer to DisplayPort table\n"); + return NULL; + } + table = &bios->data[bios->display.dp_table_ptr]; + + if (table[0] != 0x21) { + NV_ERROR(dev, "DisplayPort table version 0x%02x unknown\n", + table[0]); + return NULL; + } + + *length = table[4]; + return bios_output_config_match(dev, dcbent, + bios->display.dp_table_ptr + table[1], + table[2], table[3]); +} + +int +nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent, + uint32_t sub, int pxclk) +{ + /* + * The display script table is located by the BIT 'U' table. + * + * It contains an array of pointers to various tables describing + * a particular output type. The first 32-bits of the output + * tables contains similar information to a DCB entry, and is + * used to decide whether that particular table is suitable for + * the output you want to access. + * + * The "record header length" field here seems to indicate the + * offset of the first configuration entry in the output tables. + * This is 10 on most cards I've seen, but 12 has been witnessed + * on DP cards, and there's another script pointer within the + * header. + * + * offset + 0 ( 8 bits): version + * offset + 1 ( 8 bits): header length + * offset + 2 ( 8 bits): record length + * offset + 3 ( 8 bits): number of records + * offset + 4 ( 8 bits): record header length + * offset + 5 (16 bits): pointer to first output script table + */ + + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint8_t *table = &bios->data[bios->display.script_table_ptr]; + uint8_t *otable = NULL; + uint16_t script; + int i = 0; + + if (!bios->display.script_table_ptr) { + NV_ERROR(dev, "No pointer to output script table\n"); + return 1; + } + + /* + * Nothing useful has been in any of the pre-2.0 tables I've seen, + * so until they are, we really don't need to care. + */ + if (table[0] < 0x20) + return 1; + + if (table[0] != 0x20 && table[0] != 0x21) { + NV_ERROR(dev, "Output script table version 0x%02x unknown\n", + table[0]); + return 1; + } + + /* + * The output script tables describing a particular output type + * look as follows: + * + * offset + 0 (32 bits): output this table matches (hash of DCB) + * offset + 4 ( 8 bits): unknown + * offset + 5 ( 8 bits): number of configurations + * offset + 6 (16 bits): pointer to some script + * offset + 8 (16 bits): pointer to some script + * + * headerlen == 10 + * offset + 10 : configuration 0 + * + * headerlen == 12 + * offset + 10 : pointer to some script + * offset + 12 : configuration 0 + * + * Each config entry is as follows: + * + * offset + 0 (16 bits): unknown, assumed to be a match value + * offset + 2 (16 bits): pointer to script table (clock set?) + * offset + 4 (16 bits): pointer to script table (reset?) + * + * There doesn't appear to be a count value to say how many + * entries exist in each script table, instead, a 0 value in + * the first 16-bit word seems to indicate both the end of the + * list and the default entry. The second 16-bit word in the + * script tables is a pointer to the script to execute. + */ + + NV_DEBUG_KMS(dev, "Searching for output entry for %d %d %d\n", + dcbent->type, dcbent->location, dcbent->or); + otable = bios_output_config_match(dev, dcbent, table[1] + + bios->display.script_table_ptr, + table[2], table[3]); + if (!otable) { + NV_ERROR(dev, "Couldn't find matching output script table\n"); + return 1; + } + + if (pxclk < -2 || pxclk > 0) { + /* Try to find matching script table entry */ + for (i = 0; i < otable[5]; i++) { + if (ROM16(otable[table[4] + i*6]) == sub) + break; + } + + if (i == otable[5]) { + NV_ERROR(dev, "Table 0x%04x not found for %d/%d, " + "using first\n", + sub, dcbent->type, dcbent->or); + i = 0; + } + } + + if (pxclk == 0) { + script = ROM16(otable[6]); + if (!script) { + NV_DEBUG_KMS(dev, "output script 0 not found\n"); + return 1; + } + + NV_TRACE(dev, "0x%04X: parsing output script 0\n", script); + nouveau_bios_run_init_table(dev, script, dcbent); + } else + if (pxclk == -1) { + script = ROM16(otable[8]); + if (!script) { + NV_DEBUG_KMS(dev, "output script 1 not found\n"); + return 1; + } + + NV_TRACE(dev, "0x%04X: parsing output script 1\n", script); + nouveau_bios_run_init_table(dev, script, dcbent); + } else + if (pxclk == -2) { + if (table[4] >= 12) + script = ROM16(otable[10]); + else + script = 0; + if (!script) { + NV_DEBUG_KMS(dev, "output script 2 not found\n"); + return 1; + } + + NV_TRACE(dev, "0x%04X: parsing output script 2\n", script); + nouveau_bios_run_init_table(dev, script, dcbent); + } else + if (pxclk > 0) { + script = ROM16(otable[table[4] + i*6 + 2]); + if (script) + script = clkcmptable(bios, script, pxclk); + if (!script) { + NV_ERROR(dev, "clock script 0 not found\n"); + return 1; + } + + NV_TRACE(dev, "0x%04X: parsing clock script 0\n", script); + nouveau_bios_run_init_table(dev, script, dcbent); + } else + if (pxclk < 0) { + script = ROM16(otable[table[4] + i*6 + 4]); + if (script) + script = clkcmptable(bios, script, -pxclk); + if (!script) { + NV_DEBUG_KMS(dev, "clock script 1 not found\n"); + return 1; + } + + NV_TRACE(dev, "0x%04X: parsing clock script 1\n", script); + nouveau_bios_run_init_table(dev, script, dcbent); + } + + return 0; +} + + +int run_tmds_table(struct drm_device *dev, struct dcb_entry *dcbent, int head, int pxclk) +{ + /* + * the pxclk parameter is in kHz + * + * This runs the TMDS regs setting code found on BIT bios cards + * + * For ffs(or) == 1 use the first table, for ffs(or) == 2 and + * ffs(or) == 3, use the second. + */ + + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + int cv = bios->pub.chip_version; + uint16_t clktable = 0, scriptptr; + uint32_t sel_clk_binding, sel_clk; + + /* pre-nv17 off-chip tmds uses scripts, post nv17 doesn't */ + if (cv >= 0x17 && cv != 0x1a && cv != 0x20 && + dcbent->location != DCB_LOC_ON_CHIP) + return 0; + + switch (ffs(dcbent->or)) { + case 1: + clktable = bios->tmds.output0_script_ptr; + break; + case 2: + case 3: + clktable = bios->tmds.output1_script_ptr; + break; + } + + if (!clktable) { + NV_ERROR(dev, "Pixel clock comparison table not found\n"); + return -EINVAL; + } + + scriptptr = clkcmptable(bios, clktable, pxclk); + + if (!scriptptr) { + NV_ERROR(dev, "TMDS output init script not found\n"); + return -ENOENT; + } + + /* don't let script change pll->head binding */ + sel_clk_binding = bios_rd32(bios, NV_PRAMDAC_SEL_CLK) & 0x50000; + run_digital_op_script(dev, scriptptr, dcbent, head, pxclk >= 165000); + sel_clk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK) & ~0x50000; + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK, sel_clk | sel_clk_binding); + + return 0; +} + +int get_pll_limits(struct drm_device *dev, uint32_t limit_match, struct pll_lims *pll_lim) +{ + /* + * PLL limits table + * + * Version 0x10: NV30, NV31 + * One byte header (version), one record of 24 bytes + * Version 0x11: NV36 - Not implemented + * Seems to have same record style as 0x10, but 3 records rather than 1 + * Version 0x20: Found on Geforce 6 cards + * Trivial 4 byte BIT header. 31 (0x1f) byte record length + * Version 0x21: Found on Geforce 7, 8 and some Geforce 6 cards + * 5 byte header, fifth byte of unknown purpose. 35 (0x23) byte record + * length in general, some (integrated) have an extra configuration byte + * Version 0x30: Found on Geforce 8, separates the register mapping + * from the limits tables. + */ + + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + int cv = bios->pub.chip_version, pllindex = 0; + uint8_t pll_lim_ver = 0, headerlen = 0, recordlen = 0, entries = 0; + uint32_t crystal_strap_mask, crystal_straps; + + if (!bios->pll_limit_tbl_ptr) { + if (cv == 0x30 || cv == 0x31 || cv == 0x35 || cv == 0x36 || + cv >= 0x40) { + NV_ERROR(dev, "Pointer to PLL limits table invalid\n"); + return -EINVAL; + } + } else + pll_lim_ver = bios->data[bios->pll_limit_tbl_ptr]; + + crystal_strap_mask = 1 << 6; + /* open coded dev->twoHeads test */ + if (cv > 0x10 && cv != 0x15 && cv != 0x1a && cv != 0x20) + crystal_strap_mask |= 1 << 22; + crystal_straps = nvReadEXTDEV(dev, NV_PEXTDEV_BOOT_0) & + crystal_strap_mask; + + switch (pll_lim_ver) { + /* + * We use version 0 to indicate a pre limit table bios (single stage + * pll) and load the hard coded limits instead. + */ + case 0: + break; + case 0x10: + case 0x11: + /* + * Strictly v0x11 has 3 entries, but the last two don't seem + * to get used. + */ + headerlen = 1; + recordlen = 0x18; + entries = 1; + pllindex = 0; + break; + case 0x20: + case 0x21: + case 0x30: + case 0x40: + headerlen = bios->data[bios->pll_limit_tbl_ptr + 1]; + recordlen = bios->data[bios->pll_limit_tbl_ptr + 2]; + entries = bios->data[bios->pll_limit_tbl_ptr + 3]; + break; + default: + NV_ERROR(dev, "PLL limits table revision 0x%X not currently " + "supported\n", pll_lim_ver); + return -ENOSYS; + } + + /* initialize all members to zero */ + memset(pll_lim, 0, sizeof(struct pll_lims)); + + if (pll_lim_ver == 0x10 || pll_lim_ver == 0x11) { + uint8_t *pll_rec = &bios->data[bios->pll_limit_tbl_ptr + headerlen + recordlen * pllindex]; + + pll_lim->vco1.minfreq = ROM32(pll_rec[0]); + pll_lim->vco1.maxfreq = ROM32(pll_rec[4]); + pll_lim->vco2.minfreq = ROM32(pll_rec[8]); + pll_lim->vco2.maxfreq = ROM32(pll_rec[12]); + pll_lim->vco1.min_inputfreq = ROM32(pll_rec[16]); + pll_lim->vco2.min_inputfreq = ROM32(pll_rec[20]); + pll_lim->vco1.max_inputfreq = pll_lim->vco2.max_inputfreq = INT_MAX; + + /* these values taken from nv30/31/36 */ + pll_lim->vco1.min_n = 0x1; + if (cv == 0x36) + pll_lim->vco1.min_n = 0x5; + pll_lim->vco1.max_n = 0xff; + pll_lim->vco1.min_m = 0x1; + pll_lim->vco1.max_m = 0xd; + pll_lim->vco2.min_n = 0x4; + /* + * On nv30, 31, 36 (i.e. all cards with two stage PLLs with this + * table version (apart from nv35)), N2 is compared to + * maxN2 (0x46) and 10 * maxM2 (0x4), so set maxN2 to 0x28 and + * save a comparison + */ + pll_lim->vco2.max_n = 0x28; + if (cv == 0x30 || cv == 0x35) + /* only 5 bits available for N2 on nv30/35 */ + pll_lim->vco2.max_n = 0x1f; + pll_lim->vco2.min_m = 0x1; + pll_lim->vco2.max_m = 0x4; + pll_lim->max_log2p = 0x7; + pll_lim->max_usable_log2p = 0x6; + } else if (pll_lim_ver == 0x20 || pll_lim_ver == 0x21) { + uint16_t plloffs = bios->pll_limit_tbl_ptr + headerlen; + uint32_t reg = 0; /* default match */ + uint8_t *pll_rec; + int i; + + /* + * First entry is default match, if nothing better. warn if + * reg field nonzero + */ + if (ROM32(bios->data[plloffs])) + NV_WARN(dev, "Default PLL limit entry has non-zero " + "register field\n"); + + if (limit_match > MAX_PLL_TYPES) + /* we've been passed a reg as the match */ + reg = limit_match; + else /* limit match is a pll type */ + for (i = 1; i < entries && !reg; i++) { + uint32_t cmpreg = ROM32(bios->data[plloffs + recordlen * i]); + + if (limit_match == NVPLL && + (cmpreg == NV_PRAMDAC_NVPLL_COEFF || cmpreg == 0x4000)) + reg = cmpreg; + if (limit_match == MPLL && + (cmpreg == NV_PRAMDAC_MPLL_COEFF || cmpreg == 0x4020)) + reg = cmpreg; + if (limit_match == VPLL1 && + (cmpreg == NV_PRAMDAC_VPLL_COEFF || cmpreg == 0x4010)) + reg = cmpreg; + if (limit_match == VPLL2 && + (cmpreg == NV_RAMDAC_VPLL2 || cmpreg == 0x4018)) + reg = cmpreg; + } + + for (i = 1; i < entries; i++) + if (ROM32(bios->data[plloffs + recordlen * i]) == reg) { + pllindex = i; + break; + } + + pll_rec = &bios->data[plloffs + recordlen * pllindex]; + + BIOSLOG(bios, "Loading PLL limits for reg 0x%08x\n", + pllindex ? reg : 0); + + /* + * Frequencies are stored in tables in MHz, kHz are more + * useful, so we convert. + */ + + /* What output frequencies can each VCO generate? */ + pll_lim->vco1.minfreq = ROM16(pll_rec[4]) * 1000; + pll_lim->vco1.maxfreq = ROM16(pll_rec[6]) * 1000; + pll_lim->vco2.minfreq = ROM16(pll_rec[8]) * 1000; + pll_lim->vco2.maxfreq = ROM16(pll_rec[10]) * 1000; + + /* What input frequencies they accept (past the m-divider)? */ + pll_lim->vco1.min_inputfreq = ROM16(pll_rec[12]) * 1000; + pll_lim->vco2.min_inputfreq = ROM16(pll_rec[14]) * 1000; + pll_lim->vco1.max_inputfreq = ROM16(pll_rec[16]) * 1000; + pll_lim->vco2.max_inputfreq = ROM16(pll_rec[18]) * 1000; + + /* What values are accepted as multiplier and divider? */ + pll_lim->vco1.min_n = pll_rec[20]; + pll_lim->vco1.max_n = pll_rec[21]; + pll_lim->vco1.min_m = pll_rec[22]; + pll_lim->vco1.max_m = pll_rec[23]; + pll_lim->vco2.min_n = pll_rec[24]; + pll_lim->vco2.max_n = pll_rec[25]; + pll_lim->vco2.min_m = pll_rec[26]; + pll_lim->vco2.max_m = pll_rec[27]; + + pll_lim->max_usable_log2p = pll_lim->max_log2p = pll_rec[29]; + if (pll_lim->max_log2p > 0x7) + /* pll decoding in nv_hw.c assumes never > 7 */ + NV_WARN(dev, "Max log2 P value greater than 7 (%d)\n", + pll_lim->max_log2p); + if (cv < 0x60) + pll_lim->max_usable_log2p = 0x6; + pll_lim->log2p_bias = pll_rec[30]; + + if (recordlen > 0x22) + pll_lim->refclk = ROM32(pll_rec[31]); + + if (recordlen > 0x23 && pll_rec[35]) + NV_WARN(dev, + "Bits set in PLL configuration byte (%x)\n", + pll_rec[35]); + + /* C51 special not seen elsewhere */ + if (cv == 0x51 && !pll_lim->refclk) { + uint32_t sel_clk = bios_rd32(bios, NV_PRAMDAC_SEL_CLK); + + if (((limit_match == NV_PRAMDAC_VPLL_COEFF || limit_match == VPLL1) && sel_clk & 0x20) || + ((limit_match == NV_RAMDAC_VPLL2 || limit_match == VPLL2) && sel_clk & 0x80)) { + if (bios_idxprt_rd(bios, NV_CIO_CRX__COLOR, NV_CIO_CRE_CHIP_ID_INDEX) < 0xa3) + pll_lim->refclk = 200000; + else + pll_lim->refclk = 25000; + } + } + } else if (pll_lim_ver == 0x30) { /* ver 0x30 */ + uint8_t *entry = &bios->data[bios->pll_limit_tbl_ptr + headerlen]; + uint8_t *record = NULL; + int i; + + BIOSLOG(bios, "Loading PLL limits for register 0x%08x\n", + limit_match); + + for (i = 0; i < entries; i++, entry += recordlen) { + if (ROM32(entry[3]) == limit_match) { + record = &bios->data[ROM16(entry[1])]; + break; + } + } + + if (!record) { + NV_ERROR(dev, "Register 0x%08x not found in PLL " + "limits table", limit_match); + return -ENOENT; + } + + pll_lim->vco1.minfreq = ROM16(record[0]) * 1000; + pll_lim->vco1.maxfreq = ROM16(record[2]) * 1000; + pll_lim->vco2.minfreq = ROM16(record[4]) * 1000; + pll_lim->vco2.maxfreq = ROM16(record[6]) * 1000; + pll_lim->vco1.min_inputfreq = ROM16(record[8]) * 1000; + pll_lim->vco2.min_inputfreq = ROM16(record[10]) * 1000; + pll_lim->vco1.max_inputfreq = ROM16(record[12]) * 1000; + pll_lim->vco2.max_inputfreq = ROM16(record[14]) * 1000; + pll_lim->vco1.min_n = record[16]; + pll_lim->vco1.max_n = record[17]; + pll_lim->vco1.min_m = record[18]; + pll_lim->vco1.max_m = record[19]; + pll_lim->vco2.min_n = record[20]; + pll_lim->vco2.max_n = record[21]; + pll_lim->vco2.min_m = record[22]; + pll_lim->vco2.max_m = record[23]; + pll_lim->max_usable_log2p = pll_lim->max_log2p = record[25]; + pll_lim->log2p_bias = record[27]; + pll_lim->refclk = ROM32(record[28]); + } else if (pll_lim_ver) { /* ver 0x40 */ + uint8_t *entry = &bios->data[bios->pll_limit_tbl_ptr + headerlen]; + uint8_t *record = NULL; + int i; + + BIOSLOG(bios, "Loading PLL limits for register 0x%08x\n", + limit_match); + + for (i = 0; i < entries; i++, entry += recordlen) { + if (ROM32(entry[3]) == limit_match) { + record = &bios->data[ROM16(entry[1])]; + break; + } + } + + if (!record) { + NV_ERROR(dev, "Register 0x%08x not found in PLL " + "limits table", limit_match); + return -ENOENT; + } + + pll_lim->vco1.minfreq = ROM16(record[0]) * 1000; + pll_lim->vco1.maxfreq = ROM16(record[2]) * 1000; + pll_lim->vco1.min_inputfreq = ROM16(record[4]) * 1000; + pll_lim->vco1.max_inputfreq = ROM16(record[6]) * 1000; + pll_lim->vco1.min_m = record[8]; + pll_lim->vco1.max_m = record[9]; + pll_lim->vco1.min_n = record[10]; + pll_lim->vco1.max_n = record[11]; + pll_lim->min_p = record[12]; + pll_lim->max_p = record[13]; + /* where did this go to?? */ + if (limit_match == 0x00614100 || limit_match == 0x00614900) + pll_lim->refclk = 27000; + else + pll_lim->refclk = 100000; + } + + /* + * By now any valid limit table ought to have set a max frequency for + * vco1, so if it's zero it's either a pre limit table bios, or one + * with an empty limit table (seen on nv18) + */ + if (!pll_lim->vco1.maxfreq) { + pll_lim->vco1.minfreq = bios->fminvco; + pll_lim->vco1.maxfreq = bios->fmaxvco; + pll_lim->vco1.min_inputfreq = 0; + pll_lim->vco1.max_inputfreq = INT_MAX; + pll_lim->vco1.min_n = 0x1; + pll_lim->vco1.max_n = 0xff; + pll_lim->vco1.min_m = 0x1; + if (crystal_straps == 0) { + /* nv05 does this, nv11 doesn't, nv10 unknown */ + if (cv < 0x11) + pll_lim->vco1.min_m = 0x7; + pll_lim->vco1.max_m = 0xd; + } else { + if (cv < 0x11) + pll_lim->vco1.min_m = 0x8; + pll_lim->vco1.max_m = 0xe; + } + if (cv < 0x17 || cv == 0x1a || cv == 0x20) + pll_lim->max_log2p = 4; + else + pll_lim->max_log2p = 5; + pll_lim->max_usable_log2p = pll_lim->max_log2p; + } + + if (!pll_lim->refclk) + switch (crystal_straps) { + case 0: + pll_lim->refclk = 13500; + break; + case (1 << 6): + pll_lim->refclk = 14318; + break; + case (1 << 22): + pll_lim->refclk = 27000; + break; + case (1 << 22 | 1 << 6): + pll_lim->refclk = 25000; + break; + } + +#if 0 /* for easy debugging */ + ErrorF("pll.vco1.minfreq: %d\n", pll_lim->vco1.minfreq); + ErrorF("pll.vco1.maxfreq: %d\n", pll_lim->vco1.maxfreq); + ErrorF("pll.vco2.minfreq: %d\n", pll_lim->vco2.minfreq); + ErrorF("pll.vco2.maxfreq: %d\n", pll_lim->vco2.maxfreq); + + ErrorF("pll.vco1.min_inputfreq: %d\n", pll_lim->vco1.min_inputfreq); + ErrorF("pll.vco1.max_inputfreq: %d\n", pll_lim->vco1.max_inputfreq); + ErrorF("pll.vco2.min_inputfreq: %d\n", pll_lim->vco2.min_inputfreq); + ErrorF("pll.vco2.max_inputfreq: %d\n", pll_lim->vco2.max_inputfreq); + + ErrorF("pll.vco1.min_n: %d\n", pll_lim->vco1.min_n); + ErrorF("pll.vco1.max_n: %d\n", pll_lim->vco1.max_n); + ErrorF("pll.vco1.min_m: %d\n", pll_lim->vco1.min_m); + ErrorF("pll.vco1.max_m: %d\n", pll_lim->vco1.max_m); + ErrorF("pll.vco2.min_n: %d\n", pll_lim->vco2.min_n); + ErrorF("pll.vco2.max_n: %d\n", pll_lim->vco2.max_n); + ErrorF("pll.vco2.min_m: %d\n", pll_lim->vco2.min_m); + ErrorF("pll.vco2.max_m: %d\n", pll_lim->vco2.max_m); + + ErrorF("pll.max_log2p: %d\n", pll_lim->max_log2p); + ErrorF("pll.log2p_bias: %d\n", pll_lim->log2p_bias); + + ErrorF("pll.refclk: %d\n", pll_lim->refclk); +#endif + + return 0; +} + +static void parse_bios_version(struct drm_device *dev, struct nvbios *bios, uint16_t offset) +{ + /* + * offset + 0 (8 bits): Micro version + * offset + 1 (8 bits): Minor version + * offset + 2 (8 bits): Chip version + * offset + 3 (8 bits): Major version + */ + + bios->major_version = bios->data[offset + 3]; + bios->pub.chip_version = bios->data[offset + 2]; + NV_TRACE(dev, "Bios version %02x.%02x.%02x.%02x\n", + bios->data[offset + 3], bios->data[offset + 2], + bios->data[offset + 1], bios->data[offset]); +} + +static void parse_script_table_pointers(struct nvbios *bios, uint16_t offset) +{ + /* + * Parses the init table segment for pointers used in script execution. + * + * offset + 0 (16 bits): init script tables pointer + * offset + 2 (16 bits): macro index table pointer + * offset + 4 (16 bits): macro table pointer + * offset + 6 (16 bits): condition table pointer + * offset + 8 (16 bits): io condition table pointer + * offset + 10 (16 bits): io flag condition table pointer + * offset + 12 (16 bits): init function table pointer + */ + + bios->init_script_tbls_ptr = ROM16(bios->data[offset]); + bios->macro_index_tbl_ptr = ROM16(bios->data[offset + 2]); + bios->macro_tbl_ptr = ROM16(bios->data[offset + 4]); + bios->condition_tbl_ptr = ROM16(bios->data[offset + 6]); + bios->io_condition_tbl_ptr = ROM16(bios->data[offset + 8]); + bios->io_flag_condition_tbl_ptr = ROM16(bios->data[offset + 10]); + bios->init_function_tbl_ptr = ROM16(bios->data[offset + 12]); +} + +static int parse_bit_A_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * Parses the load detect values for g80 cards. + * + * offset + 0 (16 bits): loadval table pointer + */ + + uint16_t load_table_ptr; + uint8_t version, headerlen, entrylen, num_entries; + + if (bitentry->length != 3) { + NV_ERROR(dev, "Do not understand BIT A table\n"); + return -EINVAL; + } + + load_table_ptr = ROM16(bios->data[bitentry->offset]); + + if (load_table_ptr == 0x0) { + NV_ERROR(dev, "Pointer to BIT loadval table invalid\n"); + return -EINVAL; + } + + version = bios->data[load_table_ptr]; + + if (version != 0x10) { + NV_ERROR(dev, "BIT loadval table version %d.%d not supported\n", + version >> 4, version & 0xF); + return -ENOSYS; + } + + headerlen = bios->data[load_table_ptr + 1]; + entrylen = bios->data[load_table_ptr + 2]; + num_entries = bios->data[load_table_ptr + 3]; + + if (headerlen != 4 || entrylen != 4 || num_entries != 2) { + NV_ERROR(dev, "Do not understand BIT loadval table\n"); + return -EINVAL; + } + + /* First entry is normal dac, 2nd tv-out perhaps? */ + bios->pub.dactestval = ROM32(bios->data[load_table_ptr + headerlen]) & 0x3ff; + + return 0; +} + +static int parse_bit_C_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * offset + 8 (16 bits): PLL limits table pointer + * + * There's more in here, but that's unknown. + */ + + if (bitentry->length < 10) { + NV_ERROR(dev, "Do not understand BIT C table\n"); + return -EINVAL; + } + + bios->pll_limit_tbl_ptr = ROM16(bios->data[bitentry->offset + 8]); + + return 0; +} + +static int parse_bit_display_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * Parses the flat panel table segment that the bit entry points to. + * Starting at bitentry->offset: + * + * offset + 0 (16 bits): ??? table pointer - seems to have 18 byte + * records beginning with a freq. + * offset + 2 (16 bits): mode table pointer + */ + + if (bitentry->length != 4) { + NV_ERROR(dev, "Do not understand BIT display table\n"); + return -EINVAL; + } + + bios->fp.fptablepointer = ROM16(bios->data[bitentry->offset + 2]); + + return 0; +} + +static int parse_bit_init_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * Parses the init table segment that the bit entry points to. + * + * See parse_script_table_pointers for layout + */ + + if (bitentry->length < 14) { + NV_ERROR(dev, "Do not understand init table\n"); + return -EINVAL; + } + + parse_script_table_pointers(bios, bitentry->offset); + + if (bitentry->length >= 16) + bios->some_script_ptr = ROM16(bios->data[bitentry->offset + 14]); + if (bitentry->length >= 18) + bios->init96_tbl_ptr = ROM16(bios->data[bitentry->offset + 16]); + + return 0; +} + +static int parse_bit_i_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * BIT 'i' (info?) table + * + * offset + 0 (32 bits): BIOS version dword (as in B table) + * offset + 5 (8 bits): BIOS feature byte (same as for BMP?) + * offset + 13 (16 bits): pointer to table containing DAC load + * detection comparison values + * + * There's other things in the table, purpose unknown + */ + + uint16_t daccmpoffset; + uint8_t dacver, dacheaderlen; + + if (bitentry->length < 6) { + NV_ERROR(dev, "BIT i table too short for needed information\n"); + return -EINVAL; + } + + parse_bios_version(dev, bios, bitentry->offset); + + /* + * bit 4 seems to indicate a mobile bios (doesn't suffer from BMP's + * Quadro identity crisis), other bits possibly as for BMP feature byte + */ + bios->feature_byte = bios->data[bitentry->offset + 5]; + bios->is_mobile = bios->feature_byte & FEATURE_MOBILE; + + if (bitentry->length < 15) { + NV_WARN(dev, "BIT i table not long enough for DAC load " + "detection comparison table\n"); + return -EINVAL; + } + + daccmpoffset = ROM16(bios->data[bitentry->offset + 13]); + + /* doesn't exist on g80 */ + if (!daccmpoffset) + return 0; + + /* + * The first value in the table, following the header, is the + * comparison value, the second entry is a comparison value for + * TV load detection. + */ + + dacver = bios->data[daccmpoffset]; + dacheaderlen = bios->data[daccmpoffset + 1]; + + if (dacver != 0x00 && dacver != 0x10) { + NV_WARN(dev, "DAC load detection comparison table version " + "%d.%d not known\n", dacver >> 4, dacver & 0xf); + return -ENOSYS; + } + + bios->pub.dactestval = ROM32(bios->data[daccmpoffset + dacheaderlen]); + bios->pub.tvdactestval = ROM32(bios->data[daccmpoffset + dacheaderlen + 4]); + + return 0; +} + +static int parse_bit_lvds_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * Parses the LVDS table segment that the bit entry points to. + * Starting at bitentry->offset: + * + * offset + 0 (16 bits): LVDS strap xlate table pointer + */ + + if (bitentry->length != 2) { + NV_ERROR(dev, "Do not understand BIT LVDS table\n"); + return -EINVAL; + } + + /* + * No idea if it's still called the LVDS manufacturer table, but + * the concept's close enough. + */ + bios->fp.lvdsmanufacturerpointer = ROM16(bios->data[bitentry->offset]); + + return 0; +} + +static int +parse_bit_M_tbl_entry(struct drm_device *dev, struct nvbios *bios, + struct bit_entry *bitentry) +{ + /* + * offset + 2 (8 bits): number of options in an + * INIT_RAM_RESTRICT_ZM_REG_GROUP opcode option set + * offset + 3 (16 bits): pointer to strap xlate table for RAM + * restrict option selection + * + * There's a bunch of bits in this table other than the RAM restrict + * stuff that we don't use - their use currently unknown + */ + + /* + * Older bios versions don't have a sufficiently long table for + * what we want + */ + if (bitentry->length < 0x5) + return 0; + + if (bitentry->id[1] < 2) { + bios->ram_restrict_group_count = bios->data[bitentry->offset + 2]; + bios->ram_restrict_tbl_ptr = ROM16(bios->data[bitentry->offset + 3]); + } else { + bios->ram_restrict_group_count = bios->data[bitentry->offset + 0]; + bios->ram_restrict_tbl_ptr = ROM16(bios->data[bitentry->offset + 1]); + } + + return 0; +} + +static int parse_bit_tmds_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry) +{ + /* + * Parses the pointer to the TMDS table + * + * Starting at bitentry->offset: + * + * offset + 0 (16 bits): TMDS table pointer + * + * The TMDS table is typically found just before the DCB table, with a + * characteristic signature of 0x11,0x13 (1.1 being version, 0x13 being + * length?) + * + * At offset +7 is a pointer to a script, which I don't know how to + * run yet. + * At offset +9 is a pointer to another script, likewise + * Offset +11 has a pointer to a table where the first word is a pxclk + * frequency and the second word a pointer to a script, which should be + * run if the comparison pxclk frequency is less than the pxclk desired. + * This repeats for decreasing comparison frequencies + * Offset +13 has a pointer to a similar table + * The selection of table (and possibly +7/+9 script) is dictated by + * "or" from the DCB. + */ + + uint16_t tmdstableptr, script1, script2; + + if (bitentry->length != 2) { + NV_ERROR(dev, "Do not understand BIT TMDS table\n"); + return -EINVAL; + } + + tmdstableptr = ROM16(bios->data[bitentry->offset]); + + if (tmdstableptr == 0x0) { + NV_ERROR(dev, "Pointer to TMDS table invalid\n"); + return -EINVAL; + } + + /* nv50+ has v2.0, but we don't parse it atm */ + if (bios->data[tmdstableptr] != 0x11) { + NV_WARN(dev, + "TMDS table revision %d.%d not currently supported\n", + bios->data[tmdstableptr] >> 4, bios->data[tmdstableptr] & 0xf); + return -ENOSYS; + } + + /* + * These two scripts are odd: they don't seem to get run even when + * they are not stubbed. + */ + script1 = ROM16(bios->data[tmdstableptr + 7]); + script2 = ROM16(bios->data[tmdstableptr + 9]); + if (bios->data[script1] != 'q' || bios->data[script2] != 'q') + NV_WARN(dev, "TMDS table script pointers not stubbed\n"); + + bios->tmds.output0_script_ptr = ROM16(bios->data[tmdstableptr + 11]); + bios->tmds.output1_script_ptr = ROM16(bios->data[tmdstableptr + 13]); + + return 0; +} + +static int +parse_bit_U_tbl_entry(struct drm_device *dev, struct nvbios *bios, + struct bit_entry *bitentry) +{ + /* + * Parses the pointer to the G80 output script tables + * + * Starting at bitentry->offset: + * + * offset + 0 (16 bits): output script table pointer + */ + + uint16_t outputscripttableptr; + + if (bitentry->length != 3) { + NV_ERROR(dev, "Do not understand BIT U table\n"); + return -EINVAL; + } + + outputscripttableptr = ROM16(bios->data[bitentry->offset]); + bios->display.script_table_ptr = outputscripttableptr; + return 0; +} + +static int +parse_bit_displayport_tbl_entry(struct drm_device *dev, struct nvbios *bios, + struct bit_entry *bitentry) +{ + bios->display.dp_table_ptr = ROM16(bios->data[bitentry->offset]); + return 0; +} + +struct bit_table { + const char id; + int (* const parse_fn)(struct drm_device *, struct nvbios *, struct bit_entry *); +}; + +#define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry }) + +static int +parse_bit_table(struct nvbios *bios, const uint16_t bitoffset, + struct bit_table *table) +{ + struct drm_device *dev = bios->dev; + uint8_t maxentries = bios->data[bitoffset + 4]; + int i, offset; + struct bit_entry bitentry; + + for (i = 0, offset = bitoffset + 6; i < maxentries; i++, offset += 6) { + bitentry.id[0] = bios->data[offset]; + + if (bitentry.id[0] != table->id) + continue; + + bitentry.id[1] = bios->data[offset + 1]; + bitentry.length = ROM16(bios->data[offset + 2]); + bitentry.offset = ROM16(bios->data[offset + 4]); + + return table->parse_fn(dev, bios, &bitentry); + } + + NV_INFO(dev, "BIT table '%c' not found\n", table->id); + return -ENOSYS; +} + +static int +parse_bit_structure(struct nvbios *bios, const uint16_t bitoffset) +{ + int ret; + + /* + * The only restriction on parsing order currently is having 'i' first + * for use of bios->*_version or bios->feature_byte while parsing; + * functions shouldn't be actually *doing* anything apart from pulling + * data from the image into the bios struct, thus no interdependencies + */ + ret = parse_bit_table(bios, bitoffset, &BIT_TABLE('i', i)); + if (ret) /* info? */ + return ret; + if (bios->major_version >= 0x60) /* g80+ */ + parse_bit_table(bios, bitoffset, &BIT_TABLE('A', A)); + ret = parse_bit_table(bios, bitoffset, &BIT_TABLE('C', C)); + if (ret) + return ret; + parse_bit_table(bios, bitoffset, &BIT_TABLE('D', display)); + ret = parse_bit_table(bios, bitoffset, &BIT_TABLE('I', init)); + if (ret) + return ret; + parse_bit_table(bios, bitoffset, &BIT_TABLE('M', M)); /* memory? */ + parse_bit_table(bios, bitoffset, &BIT_TABLE('L', lvds)); + parse_bit_table(bios, bitoffset, &BIT_TABLE('T', tmds)); + parse_bit_table(bios, bitoffset, &BIT_TABLE('U', U)); + parse_bit_table(bios, bitoffset, &BIT_TABLE('d', displayport)); + + return 0; +} + +static int parse_bmp_structure(struct drm_device *dev, struct nvbios *bios, unsigned int offset) +{ + /* + * Parses the BMP structure for useful things, but does not act on them + * + * offset + 5: BMP major version + * offset + 6: BMP minor version + * offset + 9: BMP feature byte + * offset + 10: BCD encoded BIOS version + * + * offset + 18: init script table pointer (for bios versions < 5.10h) + * offset + 20: extra init script table pointer (for bios + * versions < 5.10h) + * + * offset + 24: memory init table pointer (used on early bios versions) + * offset + 26: SDR memory sequencing setup data table + * offset + 28: DDR memory sequencing setup data table + * + * offset + 54: index of I2C CRTC pair to use for CRT output + * offset + 55: index of I2C CRTC pair to use for TV output + * offset + 56: index of I2C CRTC pair to use for flat panel output + * offset + 58: write CRTC index for I2C pair 0 + * offset + 59: read CRTC index for I2C pair 0 + * offset + 60: write CRTC index for I2C pair 1 + * offset + 61: read CRTC index for I2C pair 1 + * + * offset + 67: maximum internal PLL frequency (single stage PLL) + * offset + 71: minimum internal PLL frequency (single stage PLL) + * + * offset + 75: script table pointers, as described in + * parse_script_table_pointers + * + * offset + 89: TMDS single link output A table pointer + * offset + 91: TMDS single link output B table pointer + * offset + 95: LVDS single link output A table pointer + * offset + 105: flat panel timings table pointer + * offset + 107: flat panel strapping translation table pointer + * offset + 117: LVDS manufacturer panel config table pointer + * offset + 119: LVDS manufacturer strapping translation table pointer + * + * offset + 142: PLL limits table pointer + * + * offset + 156: minimum pixel clock for LVDS dual link + */ + + uint8_t *bmp = &bios->data[offset], bmp_version_major, bmp_version_minor; + uint16_t bmplength; + uint16_t legacy_scripts_offset, legacy_i2c_offset; + + /* load needed defaults in case we can't parse this info */ + bios->bdcb.dcb.i2c[0].write = NV_CIO_CRE_DDC_WR__INDEX; + bios->bdcb.dcb.i2c[0].read = NV_CIO_CRE_DDC_STATUS__INDEX; + bios->bdcb.dcb.i2c[1].write = NV_CIO_CRE_DDC0_WR__INDEX; + bios->bdcb.dcb.i2c[1].read = NV_CIO_CRE_DDC0_STATUS__INDEX; + bios->pub.digital_min_front_porch = 0x4b; + bios->fmaxvco = 256000; + bios->fminvco = 128000; + bios->fp.duallink_transition_clk = 90000; + + bmp_version_major = bmp[5]; + bmp_version_minor = bmp[6]; + + NV_TRACE(dev, "BMP version %d.%d\n", + bmp_version_major, bmp_version_minor); + + /* + * Make sure that 0x36 is blank and can't be mistaken for a DCB + * pointer on early versions + */ + if (bmp_version_major < 5) + *(uint16_t *)&bios->data[0x36] = 0; + + /* + * Seems that the minor version was 1 for all major versions prior + * to 5. Version 6 could theoretically exist, but I suspect BIT + * happened instead. + */ + if ((bmp_version_major < 5 && bmp_version_minor != 1) || bmp_version_major > 5) { + NV_ERROR(dev, "You have an unsupported BMP version. " + "Please send in your bios\n"); + return -ENOSYS; + } + + if (bmp_version_major == 0) + /* nothing that's currently useful in this version */ + return 0; + else if (bmp_version_major == 1) + bmplength = 44; /* exact for 1.01 */ + else if (bmp_version_major == 2) + bmplength = 48; /* exact for 2.01 */ + else if (bmp_version_major == 3) + bmplength = 54; + /* guessed - mem init tables added in this version */ + else if (bmp_version_major == 4 || bmp_version_minor < 0x1) + /* don't know if 5.0 exists... */ + bmplength = 62; + /* guessed - BMP I2C indices added in version 4*/ + else if (bmp_version_minor < 0x6) + bmplength = 67; /* exact for 5.01 */ + else if (bmp_version_minor < 0x10) + bmplength = 75; /* exact for 5.06 */ + else if (bmp_version_minor == 0x10) + bmplength = 89; /* exact for 5.10h */ + else if (bmp_version_minor < 0x14) + bmplength = 118; /* exact for 5.11h */ + else if (bmp_version_minor < 0x24) + /* + * Not sure of version where pll limits came in; + * certainly exist by 0x24 though. + */ + /* length not exact: this is long enough to get lvds members */ + bmplength = 123; + else if (bmp_version_minor < 0x27) + /* + * Length not exact: this is long enough to get pll limit + * member + */ + bmplength = 144; + else + /* + * Length not exact: this is long enough to get dual link + * transition clock. + */ + bmplength = 158; + + /* checksum */ + if (nv_cksum(bmp, 8)) { + NV_ERROR(dev, "Bad BMP checksum\n"); + return -EINVAL; + } + + /* + * Bit 4 seems to indicate either a mobile bios or a quadro card -- + * mobile behaviour consistent (nv11+), quadro only seen nv18gl-nv36gl + * (not nv10gl), bit 5 that the flat panel tables are present, and + * bit 6 a tv bios. + */ + bios->feature_byte = bmp[9]; + + parse_bios_version(dev, bios, offset + 10); + + if (bmp_version_major < 5 || bmp_version_minor < 0x10) + bios->old_style_init = true; + legacy_scripts_offset = 18; + if (bmp_version_major < 2) + legacy_scripts_offset -= 4; + bios->init_script_tbls_ptr = ROM16(bmp[legacy_scripts_offset]); + bios->extra_init_script_tbl_ptr = ROM16(bmp[legacy_scripts_offset + 2]); + + if (bmp_version_major > 2) { /* appears in BMP 3 */ + bios->legacy.mem_init_tbl_ptr = ROM16(bmp[24]); + bios->legacy.sdr_seq_tbl_ptr = ROM16(bmp[26]); + bios->legacy.ddr_seq_tbl_ptr = ROM16(bmp[28]); + } + + legacy_i2c_offset = 0x48; /* BMP version 2 & 3 */ + if (bmplength > 61) + legacy_i2c_offset = offset + 54; + bios->legacy.i2c_indices.crt = bios->data[legacy_i2c_offset]; + bios->legacy.i2c_indices.tv = bios->data[legacy_i2c_offset + 1]; + bios->legacy.i2c_indices.panel = bios->data[legacy_i2c_offset + 2]; + bios->bdcb.dcb.i2c[0].write = bios->data[legacy_i2c_offset + 4]; + bios->bdcb.dcb.i2c[0].read = bios->data[legacy_i2c_offset + 5]; + bios->bdcb.dcb.i2c[1].write = bios->data[legacy_i2c_offset + 6]; + bios->bdcb.dcb.i2c[1].read = bios->data[legacy_i2c_offset + 7]; + + if (bmplength > 74) { + bios->fmaxvco = ROM32(bmp[67]); + bios->fminvco = ROM32(bmp[71]); + } + if (bmplength > 88) + parse_script_table_pointers(bios, offset + 75); + if (bmplength > 94) { + bios->tmds.output0_script_ptr = ROM16(bmp[89]); + bios->tmds.output1_script_ptr = ROM16(bmp[91]); + /* + * Never observed in use with lvds scripts, but is reused for + * 18/24 bit panel interface default for EDID equipped panels + * (if_is_24bit not set directly to avoid any oscillation). + */ + bios->legacy.lvds_single_a_script_ptr = ROM16(bmp[95]); + } + if (bmplength > 108) { + bios->fp.fptablepointer = ROM16(bmp[105]); + bios->fp.fpxlatetableptr = ROM16(bmp[107]); + bios->fp.xlatwidth = 1; + } + if (bmplength > 120) { + bios->fp.lvdsmanufacturerpointer = ROM16(bmp[117]); + bios->fp.fpxlatemanufacturertableptr = ROM16(bmp[119]); + } + if (bmplength > 143) + bios->pll_limit_tbl_ptr = ROM16(bmp[142]); + + if (bmplength > 157) + bios->fp.duallink_transition_clk = ROM16(bmp[156]) * 10; + + return 0; +} + +static uint16_t findstr(uint8_t *data, int n, const uint8_t *str, int len) +{ + int i, j; + + for (i = 0; i <= (n - len); i++) { + for (j = 0; j < len; j++) + if (data[i + j] != str[j]) + break; + if (j == len) + return i; + } + + return 0; +} + +static int +read_dcb_i2c_entry(struct drm_device *dev, int dcb_version, uint8_t *i2ctable, int index, struct dcb_i2c_entry *i2c) +{ + uint8_t dcb_i2c_ver = dcb_version, headerlen = 0, entry_len = 4; + int i2c_entries = DCB_MAX_NUM_I2C_ENTRIES; + int recordoffset = 0, rdofs = 1, wrofs = 0; + uint8_t port_type = 0; + + if (!i2ctable) + return -EINVAL; + + if (dcb_version >= 0x30) { + if (i2ctable[0] != dcb_version) /* necessary? */ + NV_WARN(dev, + "DCB I2C table version mismatch (%02X vs %02X)\n", + i2ctable[0], dcb_version); + dcb_i2c_ver = i2ctable[0]; + headerlen = i2ctable[1]; + if (i2ctable[2] <= DCB_MAX_NUM_I2C_ENTRIES) + i2c_entries = i2ctable[2]; + else + NV_WARN(dev, + "DCB I2C table has more entries than indexable " + "(%d entries, max index 15)\n", i2ctable[2]); + entry_len = i2ctable[3]; + /* [4] is i2c_default_indices, read in parse_dcb_table() */ + } + /* + * It's your own fault if you call this function on a DCB 1.1 BIOS -- + * the test below is for DCB 1.2 + */ + if (dcb_version < 0x14) { + recordoffset = 2; + rdofs = 0; + wrofs = 1; + } + + if (index == 0xf) + return 0; + if (index > i2c_entries) { + NV_ERROR(dev, "DCB I2C index too big (%d > %d)\n", + index, i2ctable[2]); + return -ENOENT; + } + if (i2ctable[headerlen + entry_len * index + 3] == 0xff) { + NV_ERROR(dev, "DCB I2C entry invalid\n"); + return -EINVAL; + } + + if (dcb_i2c_ver >= 0x30) { + port_type = i2ctable[headerlen + recordoffset + 3 + entry_len * index]; + + /* + * Fixup for chips using same address offset for read and + * write. + */ + if (port_type == 4) /* seen on C51 */ + rdofs = wrofs = 1; + if (port_type >= 5) /* G80+ */ + rdofs = wrofs = 0; + } + + if (dcb_i2c_ver >= 0x40 && port_type != 5 && port_type != 6) + NV_WARN(dev, "DCB I2C table has port type %d\n", port_type); + + i2c->port_type = port_type; + i2c->read = i2ctable[headerlen + recordoffset + rdofs + entry_len * index]; + i2c->write = i2ctable[headerlen + recordoffset + wrofs + entry_len * index]; + + return 0; +} + +static struct dcb_gpio_entry * +new_gpio_entry(struct nvbios *bios) +{ + struct parsed_dcb_gpio *gpio = &bios->bdcb.gpio; + + return &gpio->entry[gpio->entries++]; +} + +struct dcb_gpio_entry * +nouveau_bios_gpio_entry(struct drm_device *dev, enum dcb_gpio_tag tag) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + int i; + + for (i = 0; i < bios->bdcb.gpio.entries; i++) { + if (bios->bdcb.gpio.entry[i].tag != tag) + continue; + + return &bios->bdcb.gpio.entry[i]; + } + + return NULL; +} + +static void +parse_dcb30_gpio_entry(struct nvbios *bios, uint16_t offset) +{ + struct dcb_gpio_entry *gpio; + uint16_t ent = ROM16(bios->data[offset]); + uint8_t line = ent & 0x1f, + tag = ent >> 5 & 0x3f, + flags = ent >> 11 & 0x1f; + + if (tag == 0x3f) + return; + + gpio = new_gpio_entry(bios); + + gpio->tag = tag; + gpio->line = line; + gpio->invert = flags != 4; +} + +static void +parse_dcb40_gpio_entry(struct nvbios *bios, uint16_t offset) +{ + struct dcb_gpio_entry *gpio; + uint32_t ent = ROM32(bios->data[offset]); + uint8_t line = ent & 0x1f, + tag = ent >> 8 & 0xff; + + if (tag == 0xff) + return; + + gpio = new_gpio_entry(bios); + + /* Currently unused, we may need more fields parsed at some + * point. */ + gpio->tag = tag; + gpio->line = line; +} + +static void +parse_dcb_gpio_table(struct nvbios *bios) +{ + struct drm_device *dev = bios->dev; + uint16_t gpio_table_ptr = bios->bdcb.gpio_table_ptr; + uint8_t *gpio_table = &bios->data[gpio_table_ptr]; + int header_len = gpio_table[1], + entries = gpio_table[2], + entry_len = gpio_table[3]; + void (*parse_entry)(struct nvbios *, uint16_t) = NULL; + int i; + + if (bios->bdcb.version >= 0x40) { + if (gpio_table_ptr && entry_len != 4) { + NV_WARN(dev, "Invalid DCB GPIO table entry length.\n"); + return; + } + + parse_entry = parse_dcb40_gpio_entry; + + } else if (bios->bdcb.version >= 0x30) { + if (gpio_table_ptr && entry_len != 2) { + NV_WARN(dev, "Invalid DCB GPIO table entry length.\n"); + return; + } + + parse_entry = parse_dcb30_gpio_entry; + + } else if (bios->bdcb.version >= 0x22) { + /* + * DCBs older than v3.0 don't really have a GPIO + * table, instead they keep some GPIO info at fixed + * locations. + */ + uint16_t dcbptr = ROM16(bios->data[0x36]); + uint8_t *tvdac_gpio = &bios->data[dcbptr - 5]; + + if (tvdac_gpio[0] & 1) { + struct dcb_gpio_entry *gpio = new_gpio_entry(bios); + + gpio->tag = DCB_GPIO_TVDAC0; + gpio->line = tvdac_gpio[1] >> 4; + gpio->invert = tvdac_gpio[0] & 2; + } + } + + if (!gpio_table_ptr) + return; + + if (entries > DCB_MAX_NUM_GPIO_ENTRIES) { + NV_WARN(dev, "Too many entries in the DCB GPIO table.\n"); + entries = DCB_MAX_NUM_GPIO_ENTRIES; + } + + for (i = 0; i < entries; i++) + parse_entry(bios, gpio_table_ptr + header_len + entry_len * i); +} + +struct dcb_connector_table_entry * +nouveau_bios_connector_entry(struct drm_device *dev, int index) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + struct dcb_connector_table_entry *cte; + + if (index >= bios->bdcb.connector.entries) + return NULL; + + cte = &bios->bdcb.connector.entry[index]; + if (cte->type == 0xff) + return NULL; + + return cte; +} + +static void +parse_dcb_connector_table(struct nvbios *bios) +{ + struct drm_device *dev = bios->dev; + struct dcb_connector_table *ct = &bios->bdcb.connector; + struct dcb_connector_table_entry *cte; + uint8_t *conntab = &bios->data[bios->bdcb.connector_table_ptr]; + uint8_t *entry; + int i; + + if (!bios->bdcb.connector_table_ptr) { + NV_DEBUG_KMS(dev, "No DCB connector table present\n"); + return; + } + + NV_INFO(dev, "DCB connector table: VHER 0x%02x %d %d %d\n", + conntab[0], conntab[1], conntab[2], conntab[3]); + if ((conntab[0] != 0x30 && conntab[0] != 0x40) || + (conntab[3] != 2 && conntab[3] != 4)) { + NV_ERROR(dev, " Unknown! Please report.\n"); + return; + } + + ct->entries = conntab[2]; + + entry = conntab + conntab[1]; + cte = &ct->entry[0]; + for (i = 0; i < conntab[2]; i++, entry += conntab[3], cte++) { + if (conntab[3] == 2) + cte->entry = ROM16(entry[0]); + else + cte->entry = ROM32(entry[0]); + cte->type = (cte->entry & 0x000000ff) >> 0; + cte->index = (cte->entry & 0x00000f00) >> 8; + switch (cte->entry & 0x00033000) { + case 0x00001000: + cte->gpio_tag = 0x07; + break; + case 0x00002000: + cte->gpio_tag = 0x08; + break; + case 0x00010000: + cte->gpio_tag = 0x51; + break; + case 0x00020000: + cte->gpio_tag = 0x52; + break; + default: + cte->gpio_tag = 0xff; + break; + } + + if (cte->type == 0xff) + continue; + + NV_INFO(dev, " %d: 0x%08x: type 0x%02x idx %d tag 0x%02x\n", + i, cte->entry, cte->type, cte->index, cte->gpio_tag); + } +} + +static struct dcb_entry *new_dcb_entry(struct parsed_dcb *dcb) +{ + struct dcb_entry *entry = &dcb->entry[dcb->entries]; + + memset(entry, 0, sizeof(struct dcb_entry)); + entry->index = dcb->entries++; + + return entry; +} + +static void fabricate_vga_output(struct parsed_dcb *dcb, int i2c, int heads) +{ + struct dcb_entry *entry = new_dcb_entry(dcb); + + entry->type = 0; + entry->i2c_index = i2c; + entry->heads = heads; + entry->location = DCB_LOC_ON_CHIP; + /* "or" mostly unused in early gen crt modesetting, 0 is fine */ +} + +static void fabricate_dvi_i_output(struct parsed_dcb *dcb, bool twoHeads) +{ + struct dcb_entry *entry = new_dcb_entry(dcb); + + entry->type = 2; + entry->i2c_index = LEGACY_I2C_PANEL; + entry->heads = twoHeads ? 3 : 1; + entry->location = !DCB_LOC_ON_CHIP; /* ie OFF CHIP */ + entry->or = 1; /* means |0x10 gets set on CRE_LCD__INDEX */ + entry->duallink_possible = false; /* SiI164 and co. are single link */ + +#if 0 + /* + * For dvi-a either crtc probably works, but my card appears to only + * support dvi-d. "nvidia" still attempts to program it for dvi-a, + * doing the full fp output setup (program 0x6808.. fp dimension regs, + * setting 0x680848 to 0x10000111 to enable, maybe setting 0x680880); + * the monitor picks up the mode res ok and lights up, but no pixel + * data appears, so the board manufacturer probably connected up the + * sync lines, but missed the video traces / components + * + * with this introduction, dvi-a left as an exercise for the reader. + */ + fabricate_vga_output(dcb, LEGACY_I2C_PANEL, entry->heads); +#endif +} + +static void fabricate_tv_output(struct parsed_dcb *dcb, bool twoHeads) +{ + struct dcb_entry *entry = new_dcb_entry(dcb); + + entry->type = 1; + entry->i2c_index = LEGACY_I2C_TV; + entry->heads = twoHeads ? 3 : 1; + entry->location = !DCB_LOC_ON_CHIP; /* ie OFF CHIP */ +} + +static bool +parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb, + uint32_t conn, uint32_t conf, struct dcb_entry *entry) +{ + entry->type = conn & 0xf; + entry->i2c_index = (conn >> 4) & 0xf; + entry->heads = (conn >> 8) & 0xf; + if (bdcb->version >= 0x40) + entry->connector = (conn >> 12) & 0xf; + entry->bus = (conn >> 16) & 0xf; + entry->location = (conn >> 20) & 0x3; + entry->or = (conn >> 24) & 0xf; + /* + * Normal entries consist of a single bit, but dual link has the + * next most significant bit set too + */ + entry->duallink_possible = + ((1 << (ffs(entry->or) - 1)) * 3 == entry->or); + + switch (entry->type) { + case OUTPUT_ANALOG: + /* + * Although the rest of a CRT conf dword is usually + * zeros, mac biosen have stuff there so we must mask + */ + entry->crtconf.maxfreq = (bdcb->version < 0x30) ? + (conf & 0xffff) * 10 : + (conf & 0xff) * 10000; + break; + case OUTPUT_LVDS: + { + uint32_t mask; + if (conf & 0x1) + entry->lvdsconf.use_straps_for_mode = true; + if (bdcb->version < 0x22) { + mask = ~0xd; + /* + * The laptop in bug 14567 lies and claims to not use + * straps when it does, so assume all DCB 2.0 laptops + * use straps, until a broken EDID using one is produced + */ + entry->lvdsconf.use_straps_for_mode = true; + /* + * Both 0x4 and 0x8 show up in v2.0 tables; assume they + * mean the same thing (probably wrong, but might work) + */ + if (conf & 0x4 || conf & 0x8) + entry->lvdsconf.use_power_scripts = true; + } else { + mask = ~0x5; + if (conf & 0x4) + entry->lvdsconf.use_power_scripts = true; + } + if (conf & mask) { + /* + * Until we even try to use these on G8x, it's + * useless reporting unknown bits. They all are. + */ + if (bdcb->version >= 0x40) + break; + + NV_ERROR(dev, "Unknown LVDS configuration bits, " + "please report\n"); + } + break; + } + case OUTPUT_TV: + { + if (bdcb->version >= 0x30) + entry->tvconf.has_component_output = conf & (0x8 << 4); + else + entry->tvconf.has_component_output = false; + + break; + } + case OUTPUT_DP: + entry->dpconf.sor.link = (conf & 0x00000030) >> 4; + entry->dpconf.link_bw = (conf & 0x00e00000) >> 21; + switch ((conf & 0x0f000000) >> 24) { + case 0xf: + entry->dpconf.link_nr = 4; + break; + case 0x3: + entry->dpconf.link_nr = 2; + break; + default: + entry->dpconf.link_nr = 1; + break; + } + break; + case OUTPUT_TMDS: + entry->tmdsconf.sor.link = (conf & 0x00000030) >> 4; + break; + case 0xe: + /* weird g80 mobile type that "nv" treats as a terminator */ + bdcb->dcb.entries--; + return false; + } + + /* unsure what DCB version introduces this, 3.0? */ + if (conf & 0x100000) + entry->i2c_upper_default = true; + + return true; +} + +static bool +parse_dcb15_entry(struct drm_device *dev, struct parsed_dcb *dcb, + uint32_t conn, uint32_t conf, struct dcb_entry *entry) +{ + switch (conn & 0x0000000f) { + case 0: + entry->type = OUTPUT_ANALOG; + break; + case 1: + entry->type = OUTPUT_TV; + break; + case 2: + case 3: + entry->type = OUTPUT_LVDS; + break; + case 4: + switch ((conn & 0x000000f0) >> 4) { + case 0: + entry->type = OUTPUT_TMDS; + break; + case 1: + entry->type = OUTPUT_LVDS; + break; + default: + NV_ERROR(dev, "Unknown DCB subtype 4/%d\n", + (conn & 0x000000f0) >> 4); + return false; + } + break; + default: + NV_ERROR(dev, "Unknown DCB type %d\n", conn & 0x0000000f); + return false; + } + + entry->i2c_index = (conn & 0x0003c000) >> 14; + entry->heads = ((conn & 0x001c0000) >> 18) + 1; + entry->or = entry->heads; /* same as heads, hopefully safe enough */ + entry->location = (conn & 0x01e00000) >> 21; + entry->bus = (conn & 0x0e000000) >> 25; + entry->duallink_possible = false; + + switch (entry->type) { + case OUTPUT_ANALOG: + entry->crtconf.maxfreq = (conf & 0xffff) * 10; + break; + case OUTPUT_TV: + entry->tvconf.has_component_output = false; + break; + case OUTPUT_TMDS: + /* + * Invent a DVI-A output, by copying the fields of the DVI-D + * output; reported to work by math_b on an NV20(!). + */ + fabricate_vga_output(dcb, entry->i2c_index, entry->heads); + break; + case OUTPUT_LVDS: + if ((conn & 0x00003f00) != 0x10) + entry->lvdsconf.use_straps_for_mode = true; + entry->lvdsconf.use_power_scripts = true; + break; + default: + break; + } + + return true; +} + +static bool parse_dcb_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb, + uint32_t conn, uint32_t conf) +{ + struct dcb_entry *entry = new_dcb_entry(&bdcb->dcb); + bool ret; + + if (bdcb->version >= 0x20) + ret = parse_dcb20_entry(dev, bdcb, conn, conf, entry); + else + ret = parse_dcb15_entry(dev, &bdcb->dcb, conn, conf, entry); + if (!ret) + return ret; + + read_dcb_i2c_entry(dev, bdcb->version, bdcb->i2c_table, + entry->i2c_index, &bdcb->dcb.i2c[entry->i2c_index]); + + return true; +} + +static +void merge_like_dcb_entries(struct drm_device *dev, struct parsed_dcb *dcb) +{ + /* + * DCB v2.0 lists each output combination separately. + * Here we merge compatible entries to have fewer outputs, with + * more options + */ + + int i, newentries = 0; + + for (i = 0; i < dcb->entries; i++) { + struct dcb_entry *ient = &dcb->entry[i]; + int j; + + for (j = i + 1; j < dcb->entries; j++) { + struct dcb_entry *jent = &dcb->entry[j]; + + if (jent->type == 100) /* already merged entry */ + continue; + + /* merge heads field when all other fields the same */ + if (jent->i2c_index == ient->i2c_index && + jent->type == ient->type && + jent->location == ient->location && + jent->or == ient->or) { + NV_TRACE(dev, "Merging DCB entries %d and %d\n", + i, j); + ient->heads |= jent->heads; + jent->type = 100; /* dummy value */ + } + } + } + + /* Compact entries merged into others out of dcb */ + for (i = 0; i < dcb->entries; i++) { + if (dcb->entry[i].type == 100) + continue; + + if (newentries != i) { + dcb->entry[newentries] = dcb->entry[i]; + dcb->entry[newentries].index = newentries; + } + newentries++; + } + + dcb->entries = newentries; +} + +static int +parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct bios_parsed_dcb *bdcb = &bios->bdcb; + struct parsed_dcb *dcb; + uint16_t dcbptr = 0, i2ctabptr = 0; + uint8_t *dcbtable; + uint8_t headerlen = 0x4, entries = DCB_MAX_NUM_ENTRIES; + bool configblock = true; + int recordlength = 8, confofs = 4; + int i; + + dcb = bios->pub.dcb = &bdcb->dcb; + dcb->entries = 0; + + /* get the offset from 0x36 */ + if (dev_priv->card_type > NV_04) { + dcbptr = ROM16(bios->data[0x36]); + if (dcbptr == 0x0000) + NV_WARN(dev, "No output data (DCB) found in BIOS\n"); + } + + /* this situation likely means a really old card, pre DCB */ + if (dcbptr == 0x0) { + NV_INFO(dev, "Assuming a CRT output exists\n"); + fabricate_vga_output(dcb, LEGACY_I2C_CRT, 1); + + if (nv04_tv_identify(dev, bios->legacy.i2c_indices.tv) >= 0) + fabricate_tv_output(dcb, twoHeads); + + return 0; + } + + dcbtable = &bios->data[dcbptr]; + + /* get DCB version */ + bdcb->version = dcbtable[0]; + NV_TRACE(dev, "Found Display Configuration Block version %d.%d\n", + bdcb->version >> 4, bdcb->version & 0xf); + + if (bdcb->version >= 0x20) { /* NV17+ */ + uint32_t sig; + + if (bdcb->version >= 0x30) { /* NV40+ */ + headerlen = dcbtable[1]; + entries = dcbtable[2]; + recordlength = dcbtable[3]; + i2ctabptr = ROM16(dcbtable[4]); + sig = ROM32(dcbtable[6]); + bdcb->gpio_table_ptr = ROM16(dcbtable[10]); + bdcb->connector_table_ptr = ROM16(dcbtable[20]); + } else { + i2ctabptr = ROM16(dcbtable[2]); + sig = ROM32(dcbtable[4]); + headerlen = 8; + } + + if (sig != 0x4edcbdcb) { + NV_ERROR(dev, "Bad Display Configuration Block " + "signature (%08X)\n", sig); + return -EINVAL; + } + } else if (bdcb->version >= 0x15) { /* some NV11 and NV20 */ + char sig[8] = { 0 }; + + strncpy(sig, (char *)&dcbtable[-7], 7); + i2ctabptr = ROM16(dcbtable[2]); + recordlength = 10; + confofs = 6; + + if (strcmp(sig, "DEV_REC")) { + NV_ERROR(dev, "Bad Display Configuration Block " + "signature (%s)\n", sig); + return -EINVAL; + } + } else { + /* + * v1.4 (some NV15/16, NV11+) seems the same as v1.5, but always + * has the same single (crt) entry, even when tv-out present, so + * the conclusion is this version cannot really be used. + * v1.2 tables (some NV6/10, and NV15+) normally have the same + * 5 entries, which are not specific to the card and so no use. + * v1.2 does have an I2C table that read_dcb_i2c_table can + * handle, but cards exist (nv11 in #14821) with a bad i2c table + * pointer, so use the indices parsed in parse_bmp_structure. + * v1.1 (NV5+, maybe some NV4) is entirely unhelpful + */ + NV_TRACEWARN(dev, "No useful information in BIOS output table; " + "adding all possible outputs\n"); + fabricate_vga_output(dcb, LEGACY_I2C_CRT, 1); + + /* + * Attempt to detect TV before DVI because the test + * for the former is more accurate and it rules the + * latter out. + */ + if (nv04_tv_identify(dev, + bios->legacy.i2c_indices.tv) >= 0) + fabricate_tv_output(dcb, twoHeads); + + else if (bios->tmds.output0_script_ptr || + bios->tmds.output1_script_ptr) + fabricate_dvi_i_output(dcb, twoHeads); + + return 0; + } + + if (!i2ctabptr) + NV_WARN(dev, "No pointer to DCB I2C port table\n"); + else { + bdcb->i2c_table = &bios->data[i2ctabptr]; + if (bdcb->version >= 0x30) + bdcb->i2c_default_indices = bdcb->i2c_table[4]; + } + + parse_dcb_gpio_table(bios); + parse_dcb_connector_table(bios); + + if (entries > DCB_MAX_NUM_ENTRIES) + entries = DCB_MAX_NUM_ENTRIES; + + for (i = 0; i < entries; i++) { + uint32_t connection, config = 0; + + connection = ROM32(dcbtable[headerlen + recordlength * i]); + if (configblock) + config = ROM32(dcbtable[headerlen + confofs + recordlength * i]); + + /* seen on an NV11 with DCB v1.5 */ + if (connection == 0x00000000) + break; + + /* seen on an NV17 with DCB v2.0 */ + if (connection == 0xffffffff) + break; + + if ((connection & 0x0000000f) == 0x0000000f) + continue; + + NV_TRACEWARN(dev, "Raw DCB entry %d: %08x %08x\n", + dcb->entries, connection, config); + + if (!parse_dcb_entry(dev, bdcb, connection, config)) + break; + } + + /* + * apart for v2.1+ not being known for requiring merging, this + * guarantees dcbent->index is the index of the entry in the rom image + */ + if (bdcb->version < 0x21) + merge_like_dcb_entries(dev, dcb); + + return dcb->entries ? 0 : -ENXIO; +} + +static void +fixup_legacy_connector(struct nvbios *bios) +{ + struct bios_parsed_dcb *bdcb = &bios->bdcb; + struct parsed_dcb *dcb = &bdcb->dcb; + int high = 0, i; + + /* + * DCB 3.0 also has the table in most cases, but there are some cards + * where the table is filled with stub entries, and the DCB entriy + * indices are all 0. We don't need the connector indices on pre-G80 + * chips (yet?) so limit the use to DCB 4.0 and above. + */ + if (bdcb->version >= 0x40) + return; + + /* + * No known connector info before v3.0, so make it up. the rule here + * is: anything on the same i2c bus is considered to be on the same + * connector. any output without an associated i2c bus is assigned + * its own unique connector index. + */ + for (i = 0; i < dcb->entries; i++) { + if (dcb->entry[i].i2c_index == 0xf) + continue; + + /* + * Ignore the I2C index for on-chip TV-out, as there + * are cards with bogus values (nv31m in bug 23212), + * and it's otherwise useless. + */ + if (dcb->entry[i].type == OUTPUT_TV && + dcb->entry[i].location == DCB_LOC_ON_CHIP) { + dcb->entry[i].i2c_index = 0xf; + continue; + } + + dcb->entry[i].connector = dcb->entry[i].i2c_index; + if (dcb->entry[i].connector > high) + high = dcb->entry[i].connector; + } + + for (i = 0; i < dcb->entries; i++) { + if (dcb->entry[i].i2c_index != 0xf) + continue; + + dcb->entry[i].connector = ++high; + } +} + +static void +fixup_legacy_i2c(struct nvbios *bios) +{ + struct parsed_dcb *dcb = &bios->bdcb.dcb; + int i; + + for (i = 0; i < dcb->entries; i++) { + if (dcb->entry[i].i2c_index == LEGACY_I2C_CRT) + dcb->entry[i].i2c_index = bios->legacy.i2c_indices.crt; + if (dcb->entry[i].i2c_index == LEGACY_I2C_PANEL) + dcb->entry[i].i2c_index = bios->legacy.i2c_indices.panel; + if (dcb->entry[i].i2c_index == LEGACY_I2C_TV) + dcb->entry[i].i2c_index = bios->legacy.i2c_indices.tv; + } +} + +static int load_nv17_hwsq_ucode_entry(struct drm_device *dev, struct nvbios *bios, uint16_t hwsq_offset, int entry) +{ + /* + * The header following the "HWSQ" signature has the number of entries, + * and the entry size + * + * An entry consists of a dword to write to the sequencer control reg + * (0x00001304), followed by the ucode bytes, written sequentially, + * starting at reg 0x00001400 + */ + + uint8_t bytes_to_write; + uint16_t hwsq_entry_offset; + int i; + + if (bios->data[hwsq_offset] <= entry) { + NV_ERROR(dev, "Too few entries in HW sequencer table for " + "requested entry\n"); + return -ENOENT; + } + + bytes_to_write = bios->data[hwsq_offset + 1]; + + if (bytes_to_write != 36) { + NV_ERROR(dev, "Unknown HW sequencer entry size\n"); + return -EINVAL; + } + + NV_TRACE(dev, "Loading NV17 power sequencing microcode\n"); + + hwsq_entry_offset = hwsq_offset + 2 + entry * bytes_to_write; + + /* set sequencer control */ + bios_wr32(bios, 0x00001304, ROM32(bios->data[hwsq_entry_offset])); + bytes_to_write -= 4; + + /* write ucode */ + for (i = 0; i < bytes_to_write; i += 4) + bios_wr32(bios, 0x00001400 + i, ROM32(bios->data[hwsq_entry_offset + i + 4])); + + /* twiddle NV_PBUS_DEBUG_4 */ + bios_wr32(bios, NV_PBUS_DEBUG_4, bios_rd32(bios, NV_PBUS_DEBUG_4) | 0x18); + + return 0; +} + +static int load_nv17_hw_sequencer_ucode(struct drm_device *dev, + struct nvbios *bios) +{ + /* + * BMP based cards, from NV17, need a microcode loading to correctly + * control the GPIO etc for LVDS panels + * + * BIT based cards seem to do this directly in the init scripts + * + * The microcode entries are found by the "HWSQ" signature. + */ + + const uint8_t hwsq_signature[] = { 'H', 'W', 'S', 'Q' }; + const int sz = sizeof(hwsq_signature); + int hwsq_offset; + + hwsq_offset = findstr(bios->data, bios->length, hwsq_signature, sz); + if (!hwsq_offset) + return 0; + + /* always use entry 0? */ + return load_nv17_hwsq_ucode_entry(dev, bios, hwsq_offset + sz, 0); +} + +uint8_t *nouveau_bios_embedded_edid(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + const uint8_t edid_sig[] = { + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 }; + uint16_t offset = 0; + uint16_t newoffset; + int searchlen = NV_PROM_SIZE; + + if (bios->fp.edid) + return bios->fp.edid; + + while (searchlen) { + newoffset = findstr(&bios->data[offset], searchlen, + edid_sig, 8); + if (!newoffset) + return NULL; + offset += newoffset; + if (!nv_cksum(&bios->data[offset], EDID1_LEN)) + break; + + searchlen -= offset; + offset++; + } + + NV_TRACE(dev, "Found EDID in BIOS\n"); + + return bios->fp.edid = &bios->data[offset]; +} + +void +nouveau_bios_run_init_table(struct drm_device *dev, uint16_t table, + struct dcb_entry *dcbent) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + struct init_exec iexec = { true, false }; + + mutex_lock(&bios->lock); + bios->display.output = dcbent; + parse_init_table(bios, table, &iexec); + bios->display.output = NULL; + mutex_unlock(&bios->lock); +} + +static bool NVInitVBIOS(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + + memset(bios, 0, sizeof(struct nvbios)); + mutex_init(&bios->lock); + bios->dev = dev; + + if (!NVShadowVBIOS(dev, bios->data)) + return false; + + bios->length = NV_PROM_SIZE; + return true; +} + +static int nouveau_parse_vbios_struct(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + const uint8_t bit_signature[] = { 0xff, 0xb8, 'B', 'I', 'T' }; + const uint8_t bmp_signature[] = { 0xff, 0x7f, 'N', 'V', 0x0 }; + int offset; + + offset = findstr(bios->data, bios->length, + bit_signature, sizeof(bit_signature)); + if (offset) { + NV_TRACE(dev, "BIT BIOS found\n"); + return parse_bit_structure(bios, offset + 6); + } + + offset = findstr(bios->data, bios->length, + bmp_signature, sizeof(bmp_signature)); + if (offset) { + NV_TRACE(dev, "BMP BIOS found\n"); + return parse_bmp_structure(dev, bios, offset); + } + + NV_ERROR(dev, "No known BIOS signature found\n"); + return -ENODEV; +} + +int +nouveau_run_vbios_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + int i, ret = 0; + + NVLockVgaCrtcs(dev, false); + if (nv_two_heads(dev)) + NVSetOwner(dev, bios->state.crtchead); + + if (bios->major_version < 5) /* BMP only */ + load_nv17_hw_sequencer_ucode(dev, bios); + + if (bios->execute) { + bios->fp.last_script_invoc = 0; + bios->fp.lvds_init_run = false; + } + + parse_init_tables(bios); + + /* + * Runs some additional script seen on G8x VBIOSen. The VBIOS' + * parser will run this right after the init tables, the binary + * driver appears to run it at some point later. + */ + if (bios->some_script_ptr) { + struct init_exec iexec = {true, false}; + + NV_INFO(dev, "Parsing VBIOS init table at offset 0x%04X\n", + bios->some_script_ptr); + parse_init_table(bios, bios->some_script_ptr, &iexec); + } + + if (dev_priv->card_type >= NV_50) { + for (i = 0; i < bios->bdcb.dcb.entries; i++) { + nouveau_bios_run_display_table(dev, + &bios->bdcb.dcb.entry[i], + 0, 0); + } + } + + NVLockVgaCrtcs(dev, true); + + return ret; +} + +static void +nouveau_bios_i2c_devices_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + struct dcb_i2c_entry *entry; + int i; + + entry = &bios->bdcb.dcb.i2c[0]; + for (i = 0; i < DCB_MAX_NUM_I2C_ENTRIES; i++, entry++) + nouveau_i2c_fini(dev, entry); +} + +int +nouveau_bios_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + uint32_t saved_nv_pextdev_boot_0; + bool was_locked; + int ret; + + dev_priv->vbios = &bios->pub; + + if (!NVInitVBIOS(dev)) + return -ENODEV; + + ret = nouveau_parse_vbios_struct(dev); + if (ret) + return ret; + + ret = parse_dcb_table(dev, bios, nv_two_heads(dev)); + if (ret) + return ret; + + fixup_legacy_i2c(bios); + fixup_legacy_connector(bios); + + if (!bios->major_version) /* we don't run version 0 bios */ + return 0; + + /* these will need remembering across a suspend */ + saved_nv_pextdev_boot_0 = bios_rd32(bios, NV_PEXTDEV_BOOT_0); + bios->state.saved_nv_pfb_cfg0 = bios_rd32(bios, NV_PFB_CFG0); + + /* init script execution disabled */ + bios->execute = false; + + /* ... unless card isn't POSTed already */ + if (dev_priv->card_type >= NV_10 && + NVReadVgaCrtc(dev, 0, 0x00) == 0 && + NVReadVgaCrtc(dev, 0, 0x1a) == 0) { + NV_INFO(dev, "Adaptor not initialised\n"); + if (dev_priv->card_type < NV_50) { + NV_ERROR(dev, "Unable to POST this chipset\n"); + return -ENODEV; + } + + NV_INFO(dev, "Running VBIOS init tables\n"); + bios->execute = true; + } + + bios_wr32(bios, NV_PEXTDEV_BOOT_0, saved_nv_pextdev_boot_0); + + ret = nouveau_run_vbios_init(dev); + if (ret) { + dev_priv->vbios = NULL; + return ret; + } + + /* feature_byte on BMP is poor, but init always sets CR4B */ + was_locked = NVLockVgaCrtcs(dev, false); + if (bios->major_version < 5) + bios->is_mobile = NVReadVgaCrtc(dev, 0, NV_CIO_CRE_4B) & 0x40; + + /* all BIT systems need p_f_m_t for digital_min_front_porch */ + if (bios->is_mobile || bios->major_version >= 5) + ret = parse_fp_mode_table(dev, bios); + NVLockVgaCrtcs(dev, was_locked); + + /* allow subsequent scripts to execute */ + bios->execute = true; + + return 0; +} + +void +nouveau_bios_takedown(struct drm_device *dev) +{ + nouveau_bios_i2c_devices_takedown(dev); +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv10_fb.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv10_fb.c @@ -0,0 +1,44 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +void +nv10_fb_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t limit = max(1u, addr + size) - 1; + + if (pitch) { + if (dev_priv->card_type >= NV_20) + addr |= 1; + else + addr |= 1 << 31; + } + + nv_wr32(dev, NV10_PFB_TLIMIT(i), limit); + nv_wr32(dev, NV10_PFB_TSIZE(i), pitch); + nv_wr32(dev, NV10_PFB_TILE(i), addr); +} + +int +nv10_fb_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; + int i; + + pfb->num_tiles = NV10_PFB_TILE__SIZE; + + /* Turn all the tiling regions off. */ + for (i = 0; i < pfb->num_tiles; i++) + pfb->set_region_tiling(dev, i, 0, 0, 0); + + return 0; +} + +void +nv10_fb_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_fbcon.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_fbcon.c @@ -0,0 +1,312 @@ +/* + * Copyright 2009 Ben Skeggs + * Copyright 2008 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" +#include "nouveau_fbcon.h" + +void +nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + + if (info->state != FBINFO_STATE_RUNNING) + return; + + if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 4)) { + nouveau_fbcon_gpu_lockup(info); + } + + if (info->flags & FBINFO_HWACCEL_DISABLED) { + cfb_copyarea(info, region); + return; + } + + BEGIN_RING(chan, NvSubImageBlit, 0x0300, 3); + OUT_RING(chan, (region->sy << 16) | region->sx); + OUT_RING(chan, (region->dy << 16) | region->dx); + OUT_RING(chan, (region->height << 16) | region->width); + FIRE_RING(chan); +} + +void +nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + + if (info->state != FBINFO_STATE_RUNNING) + return; + + if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 7)) { + nouveau_fbcon_gpu_lockup(info); + } + + if (info->flags & FBINFO_HWACCEL_DISABLED) { + cfb_fillrect(info, rect); + return; + } + + BEGIN_RING(chan, NvSubGdiRect, 0x02fc, 1); + OUT_RING(chan, (rect->rop != ROP_COPY) ? 1 : 3); + BEGIN_RING(chan, NvSubGdiRect, 0x03fc, 1); + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) + OUT_RING(chan, ((uint32_t *)info->pseudo_palette)[rect->color]); + else + OUT_RING(chan, rect->color); + BEGIN_RING(chan, NvSubGdiRect, 0x0400, 2); + OUT_RING(chan, (rect->dx << 16) | rect->dy); + OUT_RING(chan, (rect->width << 16) | rect->height); + FIRE_RING(chan); +} + +void +nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + uint32_t fg; + uint32_t bg; + uint32_t dsize; + uint32_t width; + uint32_t *data = (uint32_t *)image->data; + + if (info->state != FBINFO_STATE_RUNNING) + return; + + if (image->depth != 1) { + cfb_imageblit(info, image); + return; + } + + if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 8)) { + nouveau_fbcon_gpu_lockup(info); + } + + if (info->flags & FBINFO_HWACCEL_DISABLED) { + cfb_imageblit(info, image); + return; + } + + width = ALIGN(image->width, 8); + dsize = ALIGN(width * image->height, 32) >> 5; + + if (info->fix.visual == FB_VISUAL_TRUECOLOR || + info->fix.visual == FB_VISUAL_DIRECTCOLOR) { + fg = ((uint32_t *) info->pseudo_palette)[image->fg_color]; + bg = ((uint32_t *) info->pseudo_palette)[image->bg_color]; + } else { + fg = image->fg_color; + bg = image->bg_color; + } + + BEGIN_RING(chan, NvSubGdiRect, 0x0be4, 7); + OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff)); + OUT_RING(chan, ((image->dy + image->height) << 16) | + ((image->dx + image->width) & 0xffff)); + OUT_RING(chan, bg); + OUT_RING(chan, fg); + OUT_RING(chan, (image->height << 16) | width); + OUT_RING(chan, (image->height << 16) | image->width); + OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff)); + + while (dsize) { + int iter_len = dsize > 128 ? 128 : dsize; + + if (RING_SPACE(chan, iter_len + 1)) { + nouveau_fbcon_gpu_lockup(info); + cfb_imageblit(info, image); + return; + } + + BEGIN_RING(chan, NvSubGdiRect, 0x0c00, iter_len); + OUT_RINGp(chan, data, iter_len); + data += iter_len; + dsize -= iter_len; + } + + FIRE_RING(chan); +} + +static int +nv04_fbcon_grobj_new(struct drm_device *dev, int class, uint32_t handle) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *obj = NULL; + int ret; + + ret = nouveau_gpuobj_gr_new(dev_priv->channel, class, &obj); + if (ret) + return ret; + + ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, handle, obj, NULL); + if (ret) + return ret; + + return 0; +} + +int +nv04_fbcon_accel_init(struct fb_info *info) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + const int sub = NvSubCtxSurf2D; + int surface_fmt, pattern_fmt, rect_fmt; + int ret; + + switch (info->var.bits_per_pixel) { + case 8: + surface_fmt = 1; + pattern_fmt = 3; + rect_fmt = 3; + break; + case 16: + surface_fmt = 4; + pattern_fmt = 1; + rect_fmt = 1; + break; + case 32: + switch (info->var.transp.length) { + case 0: /* depth 24 */ + case 8: /* depth 32 */ + break; + default: + return -EINVAL; + } + + surface_fmt = 6; + pattern_fmt = 3; + rect_fmt = 3; + break; + default: + return -EINVAL; + } + + ret = nv04_fbcon_grobj_new(dev, dev_priv->card_type >= NV_10 ? + 0x0062 : 0x0042, NvCtxSurf2D); + if (ret) + return ret; + + ret = nv04_fbcon_grobj_new(dev, 0x0019, NvClipRect); + if (ret) + return ret; + + ret = nv04_fbcon_grobj_new(dev, 0x0043, NvRop); + if (ret) + return ret; + + ret = nv04_fbcon_grobj_new(dev, 0x0044, NvImagePatt); + if (ret) + return ret; + + ret = nv04_fbcon_grobj_new(dev, 0x004a, NvGdiRect); + if (ret) + return ret; + + ret = nv04_fbcon_grobj_new(dev, dev_priv->card_type >= NV_10 ? + 0x009f : 0x005f, NvImageBlit); + if (ret) + return ret; + + if (RING_SPACE(chan, 49)) { + nouveau_fbcon_gpu_lockup(info); + return 0; + } + + BEGIN_RING(chan, sub, 0x0000, 1); + OUT_RING(chan, NvCtxSurf2D); + BEGIN_RING(chan, sub, 0x0184, 2); + OUT_RING(chan, NvDmaFB); + OUT_RING(chan, NvDmaFB); + BEGIN_RING(chan, sub, 0x0300, 4); + OUT_RING(chan, surface_fmt); + OUT_RING(chan, info->fix.line_length | (info->fix.line_length << 16)); + OUT_RING(chan, info->fix.smem_start - dev->mode_config.fb_base); + OUT_RING(chan, info->fix.smem_start - dev->mode_config.fb_base); + + BEGIN_RING(chan, sub, 0x0000, 1); + OUT_RING(chan, NvRop); + BEGIN_RING(chan, sub, 0x0300, 1); + OUT_RING(chan, 0x55); + + BEGIN_RING(chan, sub, 0x0000, 1); + OUT_RING(chan, NvImagePatt); + BEGIN_RING(chan, sub, 0x0300, 8); + OUT_RING(chan, pattern_fmt); +#ifdef __BIG_ENDIAN + OUT_RING(chan, 2); +#else + OUT_RING(chan, 1); +#endif + OUT_RING(chan, 0); + OUT_RING(chan, 1); + OUT_RING(chan, ~0); + OUT_RING(chan, ~0); + OUT_RING(chan, ~0); + OUT_RING(chan, ~0); + + BEGIN_RING(chan, sub, 0x0000, 1); + OUT_RING(chan, NvClipRect); + BEGIN_RING(chan, sub, 0x0300, 2); + OUT_RING(chan, 0); + OUT_RING(chan, (info->var.yres_virtual << 16) | info->var.xres_virtual); + + BEGIN_RING(chan, NvSubImageBlit, 0x0000, 1); + OUT_RING(chan, NvImageBlit); + BEGIN_RING(chan, NvSubImageBlit, 0x019c, 1); + OUT_RING(chan, NvCtxSurf2D); + BEGIN_RING(chan, NvSubImageBlit, 0x02fc, 1); + OUT_RING(chan, 3); + + BEGIN_RING(chan, NvSubGdiRect, 0x0000, 1); + OUT_RING(chan, NvGdiRect); + BEGIN_RING(chan, NvSubGdiRect, 0x0198, 1); + OUT_RING(chan, NvCtxSurf2D); + BEGIN_RING(chan, NvSubGdiRect, 0x0188, 2); + OUT_RING(chan, NvImagePatt); + OUT_RING(chan, NvRop); + BEGIN_RING(chan, NvSubGdiRect, 0x0304, 1); + OUT_RING(chan, 1); + BEGIN_RING(chan, NvSubGdiRect, 0x0300, 1); + OUT_RING(chan, rect_fmt); + BEGIN_RING(chan, NvSubGdiRect, 0x02fc, 1); + OUT_RING(chan, 3); + + FIRE_RING(chan); + + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_fifo.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_fifo.c @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +#define NV04_RAMFC(c) (dev_priv->ramfc_offset + ((c) * NV04_RAMFC__SIZE)) +#define NV04_RAMFC__SIZE 32 +#define NV04_RAMFC_DMA_PUT 0x00 +#define NV04_RAMFC_DMA_GET 0x04 +#define NV04_RAMFC_DMA_INSTANCE 0x08 +#define NV04_RAMFC_DMA_STATE 0x0C +#define NV04_RAMFC_DMA_FETCH 0x10 +#define NV04_RAMFC_ENGINE 0x14 +#define NV04_RAMFC_PULL1_ENGINE 0x18 + +#define RAMFC_WR(offset, val) nv_wo32(dev, chan->ramfc->gpuobj, \ + NV04_RAMFC_##offset/4, (val)) +#define RAMFC_RD(offset) nv_ro32(dev, chan->ramfc->gpuobj, \ + NV04_RAMFC_##offset/4) + +void +nv04_fifo_disable(struct drm_device *dev) +{ + uint32_t tmp; + + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUSH); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, tmp & ~1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, 0); + tmp = nv_rd32(dev, NV03_PFIFO_CACHE1_PULL1); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, tmp & ~1); +} + +void +nv04_fifo_enable(struct drm_device *dev) +{ + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH0, 1); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, 1); +} + +bool +nv04_fifo_reassign(struct drm_device *dev, bool enable) +{ + uint32_t reassign = nv_rd32(dev, NV03_PFIFO_CACHES); + + nv_wr32(dev, NV03_PFIFO_CACHES, enable ? 1 : 0); + return (reassign == 1); +} + +bool +nv04_fifo_cache_flush(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; + uint64_t start = ptimer->read(dev); + + do { + if (nv_rd32(dev, NV03_PFIFO_CACHE1_GET) == + nv_rd32(dev, NV03_PFIFO_CACHE1_PUT)) + return true; + + } while (ptimer->read(dev) - start < 100000000); + + NV_ERROR(dev, "Timeout flushing the PFIFO cache.\n"); + + return false; +} + +bool +nv04_fifo_cache_pull(struct drm_device *dev, bool enable) +{ + uint32_t pull = nv_rd32(dev, NV04_PFIFO_CACHE1_PULL0); + + if (enable) { + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, pull | 1); + } else { + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL0, pull & ~1); + nv_wr32(dev, NV04_PFIFO_CACHE1_HASH, 0); + } + + return !!(pull & 1); +} + +int +nv04_fifo_channel_id(struct drm_device *dev) +{ + return nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH1) & + NV03_PFIFO_CACHE1_PUSH1_CHID_MASK; +} + +int +nv04_fifo_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int ret; + + ret = nouveau_gpuobj_new_fake(dev, NV04_RAMFC(chan->id), ~0, + NV04_RAMFC__SIZE, + NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, + NULL, &chan->ramfc); + if (ret) + return ret; + + /* Setup initial state */ + dev_priv->engine.instmem.prepare_access(dev, true); + RAMFC_WR(DMA_PUT, chan->pushbuf_base); + RAMFC_WR(DMA_GET, chan->pushbuf_base); + RAMFC_WR(DMA_INSTANCE, chan->pushbuf->instance >> 4); + RAMFC_WR(DMA_FETCH, (NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | + NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | + NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 | +#ifdef __BIG_ENDIAN + NV_PFIFO_CACHE1_BIG_ENDIAN | +#endif + 0)); + dev_priv->engine.instmem.finish_access(dev); + + /* enable the fifo dma operation */ + nv_wr32(dev, NV04_PFIFO_MODE, + nv_rd32(dev, NV04_PFIFO_MODE) | (1 << chan->id)); + return 0; +} + +void +nv04_fifo_destroy_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + + nv_wr32(dev, NV04_PFIFO_MODE, + nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); + + nouveau_gpuobj_ref_del(dev, &chan->ramfc); +} + +static void +nv04_fifo_do_load_context(struct drm_device *dev, int chid) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t fc = NV04_RAMFC(chid), tmp; + + dev_priv->engine.instmem.prepare_access(dev, false); + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUT, nv_ri32(dev, fc + 0)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_GET, nv_ri32(dev, fc + 4)); + tmp = nv_ri32(dev, fc + 8); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_INSTANCE, tmp & 0xFFFF); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_DCOUNT, tmp >> 16); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_STATE, nv_ri32(dev, fc + 12)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_FETCH, nv_ri32(dev, fc + 16)); + nv_wr32(dev, NV04_PFIFO_CACHE1_ENGINE, nv_ri32(dev, fc + 20)); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL1, nv_ri32(dev, fc + 24)); + + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUT, 0); +} + +int +nv04_fifo_load_context(struct nouveau_channel *chan) +{ + uint32_t tmp; + + nv_wr32(chan->dev, NV03_PFIFO_CACHE1_PUSH1, + NV03_PFIFO_CACHE1_PUSH1_DMA | chan->id); + nv04_fifo_do_load_context(chan->dev, chan->id); + nv_wr32(chan->dev, NV04_PFIFO_CACHE1_DMA_PUSH, 1); + + /* Reset NV04_PFIFO_CACHE1_DMA_CTL_AT_INFO to INVALID */ + tmp = nv_rd32(chan->dev, NV04_PFIFO_CACHE1_DMA_CTL) & ~(1 << 31); + nv_wr32(chan->dev, NV04_PFIFO_CACHE1_DMA_CTL, tmp); + + return 0; +} + +int +nv04_fifo_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_channel *chan = NULL; + uint32_t tmp; + int chid; + + chid = pfifo->channel_id(dev); + if (chid < 0 || chid >= dev_priv->engine.fifo.channels) + return 0; + + chan = dev_priv->fifos[chid]; + if (!chan) { + NV_ERROR(dev, "Inactive channel on PFIFO: %d\n", chid); + return -EINVAL; + } + + dev_priv->engine.instmem.prepare_access(dev, true); + RAMFC_WR(DMA_PUT, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUT)); + RAMFC_WR(DMA_GET, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_GET)); + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_DCOUNT) << 16; + tmp |= nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_INSTANCE); + RAMFC_WR(DMA_INSTANCE, tmp); + RAMFC_WR(DMA_STATE, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_STATE)); + RAMFC_WR(DMA_FETCH, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_FETCH)); + RAMFC_WR(ENGINE, nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE)); + RAMFC_WR(PULL1_ENGINE, nv_rd32(dev, NV04_PFIFO_CACHE1_PULL1)); + dev_priv->engine.instmem.finish_access(dev); + + nv04_fifo_do_load_context(dev, pfifo->channels - 1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, pfifo->channels - 1); + return 0; +} + +static void +nv04_fifo_init_reset(struct drm_device *dev) +{ + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) & ~NV_PMC_ENABLE_PFIFO); + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) | NV_PMC_ENABLE_PFIFO); + + nv_wr32(dev, 0x003224, 0x000f0078); + nv_wr32(dev, 0x002044, 0x0101ffff); + nv_wr32(dev, 0x002040, 0x000000ff); + nv_wr32(dev, 0x002500, 0x00000000); + nv_wr32(dev, 0x003000, 0x00000000); + nv_wr32(dev, 0x003050, 0x00000000); + nv_wr32(dev, 0x003200, 0x00000000); + nv_wr32(dev, 0x003250, 0x00000000); + nv_wr32(dev, 0x003220, 0x00000000); + + nv_wr32(dev, 0x003250, 0x00000000); + nv_wr32(dev, 0x003270, 0x00000000); + nv_wr32(dev, 0x003210, 0x00000000); +} + +static void +nv04_fifo_init_ramxx(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + nv_wr32(dev, NV03_PFIFO_RAMHT, (0x03 << 24) /* search 128 */ | + ((dev_priv->ramht_bits - 9) << 16) | + (dev_priv->ramht_offset >> 8)); + nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro_offset>>8); + nv_wr32(dev, NV03_PFIFO_RAMFC, dev_priv->ramfc_offset >> 8); +} + +static void +nv04_fifo_init_intr(struct drm_device *dev) +{ + nv_wr32(dev, 0x002100, 0xffffffff); + nv_wr32(dev, 0x002140, 0xffffffff); +} + +int +nv04_fifo_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + int i; + + nv04_fifo_init_reset(dev); + nv04_fifo_init_ramxx(dev); + + nv04_fifo_do_load_context(dev, pfifo->channels - 1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, pfifo->channels - 1); + + nv04_fifo_init_intr(dev); + pfifo->enable(dev); + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + if (dev_priv->fifos[i]) { + uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); + nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); + } + } + + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_backlight.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_backlight.c @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2009 Red Hat + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + * Matthew Garrett + * + * Register locations derived from NVClock by Roderick Colenbrander + */ + +#include + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" +#include "nouveau_reg.h" + +static int nv40_get_intensity(struct backlight_device *bd) +{ + struct drm_device *dev = bl_get_data(bd); + int val = (nv_rd32(dev, NV40_PMC_BACKLIGHT) & NV40_PMC_BACKLIGHT_MASK) + >> 16; + + return val; +} + +static int nv40_set_intensity(struct backlight_device *bd) +{ + struct drm_device *dev = bl_get_data(bd); + int val = bd->props.brightness; + int reg = nv_rd32(dev, NV40_PMC_BACKLIGHT); + + nv_wr32(dev, NV40_PMC_BACKLIGHT, + (val << 16) | (reg & ~NV40_PMC_BACKLIGHT_MASK)); + + return 0; +} + +static struct backlight_ops nv40_bl_ops = { + .options = BL_CORE_SUSPENDRESUME, + .get_brightness = nv40_get_intensity, + .update_status = nv40_set_intensity, +}; + +static int nv50_get_intensity(struct backlight_device *bd) +{ + struct drm_device *dev = bl_get_data(bd); + + return nv_rd32(dev, NV50_PDISPLAY_SOR_BACKLIGHT); +} + +static int nv50_set_intensity(struct backlight_device *bd) +{ + struct drm_device *dev = bl_get_data(bd); + int val = bd->props.brightness; + + nv_wr32(dev, NV50_PDISPLAY_SOR_BACKLIGHT, + val | NV50_PDISPLAY_SOR_BACKLIGHT_ENABLE); + return 0; +} + +static struct backlight_ops nv50_bl_ops = { + .options = BL_CORE_SUSPENDRESUME, + .get_brightness = nv50_get_intensity, + .update_status = nv50_set_intensity, +}; + +static int nouveau_nv40_backlight_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct backlight_device *bd; + + if (!(nv_rd32(dev, NV40_PMC_BACKLIGHT) & NV40_PMC_BACKLIGHT_MASK)) + return 0; + + bd = backlight_device_register("nv_backlight", &dev->pdev->dev, dev, + &nv40_bl_ops); + if (IS_ERR(bd)) + return PTR_ERR(bd); + + dev_priv->backlight = bd; + bd->props.max_brightness = 31; + bd->props.brightness = nv40_get_intensity(bd); + backlight_update_status(bd); + + return 0; +} + +static int nouveau_nv50_backlight_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct backlight_device *bd; + + if (!nv_rd32(dev, NV50_PDISPLAY_SOR_BACKLIGHT)) + return 0; + + bd = backlight_device_register("nv_backlight", &dev->pdev->dev, dev, + &nv50_bl_ops); + if (IS_ERR(bd)) + return PTR_ERR(bd); + + dev_priv->backlight = bd; + bd->props.max_brightness = 1025; + bd->props.brightness = nv50_get_intensity(bd); + backlight_update_status(bd); + return 0; +} + +int nouveau_backlight_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + switch (dev_priv->card_type) { + case NV_40: + return nouveau_nv40_backlight_init(dev); + case NV_50: + return nouveau_nv50_backlight_init(dev); + default: + break; + } + + return 0; +} + +void nouveau_backlight_exit(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->backlight) { + backlight_device_unregister(dev_priv->backlight); + dev_priv->backlight = NULL; + } +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv40_mc.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv40_mc.c @@ -0,0 +1,38 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +int +nv40_mc_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t tmp; + + /* Power up everything, resetting each individual unit will + * be done later if needed. + */ + nv_wr32(dev, NV03_PMC_ENABLE, 0xFFFFFFFF); + + switch (dev_priv->chipset) { + case 0x44: + case 0x46: /* G72 */ + case 0x4e: + case 0x4c: /* C51_G7X */ + tmp = nv_rd32(dev, NV40_PFB_020C); + nv_wr32(dev, NV40_PMC_1700, tmp); + nv_wr32(dev, NV40_PMC_1704, 0); + nv_wr32(dev, NV40_PMC_1708, 0); + nv_wr32(dev, NV40_PMC_170C, tmp); + break; + default: + break; + } + + return 0; +} + +void +nv40_mc_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_grctx.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_grctx.h @@ -0,0 +1,133 @@ +#ifndef __NOUVEAU_GRCTX_H__ +#define __NOUVEAU_GRCTX_H__ + +struct nouveau_grctx { + struct drm_device *dev; + + enum { + NOUVEAU_GRCTX_PROG, + NOUVEAU_GRCTX_VALS + } mode; + void *data; + + uint32_t ctxprog_max; + uint32_t ctxprog_len; + uint32_t ctxprog_reg; + int ctxprog_label[32]; + uint32_t ctxvals_pos; + uint32_t ctxvals_base; +}; + +#ifdef CP_CTX +static inline void +cp_out(struct nouveau_grctx *ctx, uint32_t inst) +{ + uint32_t *ctxprog = ctx->data; + + if (ctx->mode != NOUVEAU_GRCTX_PROG) + return; + + BUG_ON(ctx->ctxprog_len == ctx->ctxprog_max); + ctxprog[ctx->ctxprog_len++] = inst; +} + +static inline void +cp_lsr(struct nouveau_grctx *ctx, uint32_t val) +{ + cp_out(ctx, CP_LOAD_SR | val); +} + +static inline void +cp_ctx(struct nouveau_grctx *ctx, uint32_t reg, uint32_t length) +{ + ctx->ctxprog_reg = (reg - 0x00400000) >> 2; + + ctx->ctxvals_base = ctx->ctxvals_pos; + ctx->ctxvals_pos = ctx->ctxvals_base + length; + + if (length > (CP_CTX_COUNT >> CP_CTX_COUNT_SHIFT)) { + cp_lsr(ctx, length); + length = 0; + } + + cp_out(ctx, CP_CTX | (length << CP_CTX_COUNT_SHIFT) | ctx->ctxprog_reg); +} + +static inline void +cp_name(struct nouveau_grctx *ctx, int name) +{ + uint32_t *ctxprog = ctx->data; + int i; + + if (ctx->mode != NOUVEAU_GRCTX_PROG) + return; + + ctx->ctxprog_label[name] = ctx->ctxprog_len; + for (i = 0; i < ctx->ctxprog_len; i++) { + if ((ctxprog[i] & 0xfff00000) != 0xff400000) + continue; + if ((ctxprog[i] & CP_BRA_IP) != ((name) << CP_BRA_IP_SHIFT)) + continue; + ctxprog[i] = (ctxprog[i] & 0x00ff00ff) | + (ctx->ctxprog_len << CP_BRA_IP_SHIFT); + } +} + +static inline void +_cp_bra(struct nouveau_grctx *ctx, u32 mod, int flag, int state, int name) +{ + int ip = 0; + + if (mod != 2) { + ip = ctx->ctxprog_label[name] << CP_BRA_IP_SHIFT; + if (ip == 0) + ip = 0xff000000 | (name << CP_BRA_IP_SHIFT); + } + + cp_out(ctx, CP_BRA | (mod << 18) | ip | flag | + (state ? 0 : CP_BRA_IF_CLEAR)); +} +#define cp_bra(c,f,s,n) _cp_bra((c), 0, CP_FLAG_##f, CP_FLAG_##f##_##s, n) +#ifdef CP_BRA_MOD +#define cp_cal(c,f,s,n) _cp_bra((c), 1, CP_FLAG_##f, CP_FLAG_##f##_##s, n) +#define cp_ret(c,f,s) _cp_bra((c), 2, CP_FLAG_##f, CP_FLAG_##f##_##s, 0) +#endif + +static inline void +_cp_wait(struct nouveau_grctx *ctx, int flag, int state) +{ + cp_out(ctx, CP_WAIT | flag | (state ? CP_WAIT_SET : 0)); +} +#define cp_wait(c,f,s) _cp_wait((c), CP_FLAG_##f, CP_FLAG_##f##_##s) + +static inline void +_cp_set(struct nouveau_grctx *ctx, int flag, int state) +{ + cp_out(ctx, CP_SET | flag | (state ? CP_SET_1 : 0)); +} +#define cp_set(c,f,s) _cp_set((c), CP_FLAG_##f, CP_FLAG_##f##_##s) + +static inline void +cp_pos(struct nouveau_grctx *ctx, int offset) +{ + ctx->ctxvals_pos = offset; + ctx->ctxvals_base = ctx->ctxvals_pos; + + cp_lsr(ctx, ctx->ctxvals_pos); + cp_out(ctx, CP_SET_CONTEXT_POINTER); +} + +static inline void +gr_def(struct nouveau_grctx *ctx, uint32_t reg, uint32_t val) +{ + if (ctx->mode != NOUVEAU_GRCTX_VALS) + return; + + reg = (reg - 0x00400000) / 4; + reg = (reg - ctx->ctxprog_reg) + ctx->ctxvals_base; + + nv_wo32(ctx->dev, ctx->data, reg, val); +} +#endif + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_fb.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_fb.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NOUVEAU_FB_H__ +#define __NOUVEAU_FB_H__ + +struct nouveau_framebuffer { + struct drm_framebuffer base; + struct nouveau_bo *nvbo; +}; + +static inline struct nouveau_framebuffer * +nouveau_framebuffer(struct drm_framebuffer *fb) +{ + return container_of(fb, struct nouveau_framebuffer, base); +} + +extern const struct drm_mode_config_funcs nouveau_mode_config_funcs; + +struct drm_framebuffer * +nouveau_framebuffer_create(struct drm_device *, struct nouveau_bo *, + struct drm_mode_fb_cmd *); + +#endif /* __NOUVEAU_FB_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv17_tv.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv17_tv.c @@ -0,0 +1,778 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nouveau_hw.h" +#include "nv17_tv.h" + +static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t testval, regoffset = nv04_dac_output_offset(encoder); + uint32_t gpio0, gpio1, fp_htotal, fp_hsync_start, fp_hsync_end, + fp_control, test_ctrl, dacclk, ctv_14, ctv_1c, ctv_6c; + uint32_t sample = 0; + int head; + +#define RGB_TEST_DATA(r, g, b) (r << 0 | g << 10 | b << 20) + testval = RGB_TEST_DATA(0x82, 0xeb, 0x82); + if (dev_priv->vbios->tvdactestval) + testval = dev_priv->vbios->tvdactestval; + + dacclk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset); + head = (dacclk & 0x100) >> 8; + + /* Save the previous state. */ + gpio1 = nv17_gpio_get(dev, DCB_GPIO_TVDAC1); + gpio0 = nv17_gpio_get(dev, DCB_GPIO_TVDAC0); + fp_htotal = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_HTOTAL); + fp_hsync_start = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_START); + fp_hsync_end = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_END); + fp_control = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL); + test_ctrl = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); + ctv_1c = NVReadRAMDAC(dev, head, 0x680c1c); + ctv_14 = NVReadRAMDAC(dev, head, 0x680c14); + ctv_6c = NVReadRAMDAC(dev, head, 0x680c6c); + + /* Prepare the DAC for load detection. */ + nv17_gpio_set(dev, DCB_GPIO_TVDAC1, true); + nv17_gpio_set(dev, DCB_GPIO_TVDAC0, true); + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HTOTAL, 1343); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_START, 1047); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_END, 1183); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL, + NV_PRAMDAC_FP_TG_CONTROL_DISPEN_POS | + NV_PRAMDAC_FP_TG_CONTROL_WIDTH_12 | + NV_PRAMDAC_FP_TG_CONTROL_READ_PROG | + NV_PRAMDAC_FP_TG_CONTROL_HSYNC_POS | + NV_PRAMDAC_FP_TG_CONTROL_VSYNC_POS); + + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset, 0); + + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, + (dacclk & ~0xff) | 0x22); + msleep(1); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, + (dacclk & ~0xff) | 0x21); + + NVWriteRAMDAC(dev, head, 0x680c1c, 1 << 20); + NVWriteRAMDAC(dev, head, 0x680c14, 4 << 16); + + /* Sample pin 0x4 (usually S-video luma). */ + NVWriteRAMDAC(dev, head, 0x680c6c, testval >> 10 & 0x3ff); + msleep(20); + sample |= NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset) + & 0x4 << 28; + + /* Sample the remaining pins. */ + NVWriteRAMDAC(dev, head, 0x680c6c, testval & 0x3ff); + msleep(20); + sample |= NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset) + & 0xa << 28; + + /* Restore the previous state. */ + NVWriteRAMDAC(dev, head, 0x680c1c, ctv_1c); + NVWriteRAMDAC(dev, head, 0x680c14, ctv_14); + NVWriteRAMDAC(dev, head, 0x680c6c, ctv_6c); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, dacclk); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset, test_ctrl); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL, fp_control); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_END, fp_hsync_end); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HSYNC_START, fp_hsync_start); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_HTOTAL, fp_htotal); + nv17_gpio_set(dev, DCB_GPIO_TVDAC1, gpio1); + nv17_gpio_set(dev, DCB_GPIO_TVDAC0, gpio0); + + return sample; +} + +static enum drm_connector_status +nv17_tv_detect(struct drm_encoder *encoder, struct drm_connector *connector) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_mode_config *conf = &dev->mode_config; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + struct dcb_entry *dcb = tv_enc->base.dcb; + + if (dev_priv->chipset == 0x42 || + dev_priv->chipset == 0x43) + tv_enc->pin_mask = nv42_tv_sample_load(encoder) >> 28 & 0xe; + else + tv_enc->pin_mask = nv17_dac_sample_load(encoder) >> 28 & 0xe; + + switch (tv_enc->pin_mask) { + case 0x2: + case 0x4: + tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_Composite; + break; + case 0xc: + tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_SVIDEO; + break; + case 0xe: + if (dcb->tvconf.has_component_output) + tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_Component; + else + tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_SCART; + break; + default: + tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_Unknown; + break; + } + + drm_connector_property_set_value(connector, + conf->tv_subconnector_property, + tv_enc->subconnector); + + if (tv_enc->subconnector) { + NV_INFO(dev, "Load detected on output %c\n", + '@' + ffs(dcb->or)); + return connector_status_connected; + } else { + return connector_status_disconnected; + } +} + +static const struct { + int hdisplay; + int vdisplay; +} modes[] = { + { 640, 400 }, + { 640, 480 }, + { 720, 480 }, + { 720, 576 }, + { 800, 600 }, + { 1024, 768 }, + { 1280, 720 }, + { 1280, 1024 }, + { 1920, 1080 } +}; + +static int nv17_tv_get_modes(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + struct drm_display_mode *mode; + struct drm_display_mode *output_mode; + int n = 0; + int i; + + if (tv_norm->kind != CTV_ENC_MODE) { + struct drm_display_mode *tv_mode; + + for (tv_mode = nv17_tv_modes; tv_mode->hdisplay; tv_mode++) { + mode = drm_mode_duplicate(encoder->dev, tv_mode); + + mode->clock = tv_norm->tv_enc_mode.vrefresh * + mode->htotal / 1000 * + mode->vtotal / 1000; + + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) + mode->clock *= 2; + + if (mode->hdisplay == tv_norm->tv_enc_mode.hdisplay && + mode->vdisplay == tv_norm->tv_enc_mode.vdisplay) + mode->type |= DRM_MODE_TYPE_PREFERRED; + + drm_mode_probed_add(connector, mode); + n++; + } + return n; + } + + /* tv_norm->kind == CTV_ENC_MODE */ + output_mode = &tv_norm->ctv_enc_mode.mode; + for (i = 0; i < ARRAY_SIZE(modes); i++) { + if (modes[i].hdisplay > output_mode->hdisplay || + modes[i].vdisplay > output_mode->vdisplay) + continue; + + if (modes[i].hdisplay == output_mode->hdisplay && + modes[i].vdisplay == output_mode->vdisplay) { + mode = drm_mode_duplicate(encoder->dev, output_mode); + mode->type |= DRM_MODE_TYPE_PREFERRED; + } else { + mode = drm_cvt_mode(encoder->dev, modes[i].hdisplay, + modes[i].vdisplay, 60, false, + output_mode->flags & DRM_MODE_FLAG_INTERLACE, + false); + } + + /* CVT modes are sometimes unsuitable... */ + if (output_mode->hdisplay <= 720 + || output_mode->hdisplay >= 1920) { + mode->htotal = output_mode->htotal; + mode->hsync_start = (mode->hdisplay + (mode->htotal + - mode->hdisplay) * 9 / 10) & ~7; + mode->hsync_end = mode->hsync_start + 8; + } + if (output_mode->vdisplay >= 1024) { + mode->vtotal = output_mode->vtotal; + mode->vsync_start = output_mode->vsync_start; + mode->vsync_end = output_mode->vsync_end; + } + + mode->type |= DRM_MODE_TYPE_DRIVER; + drm_mode_probed_add(connector, mode); + n++; + } + return n; +} + +static int nv17_tv_mode_valid(struct drm_encoder *encoder, + struct drm_display_mode *mode) +{ + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + + if (tv_norm->kind == CTV_ENC_MODE) { + struct drm_display_mode *output_mode = + &tv_norm->ctv_enc_mode.mode; + + if (mode->clock > 400000) + return MODE_CLOCK_HIGH; + + if (mode->hdisplay > output_mode->hdisplay || + mode->vdisplay > output_mode->vdisplay) + return MODE_BAD; + + if ((mode->flags & DRM_MODE_FLAG_INTERLACE) != + (output_mode->flags & DRM_MODE_FLAG_INTERLACE)) + return MODE_NO_INTERLACE; + + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) + return MODE_NO_DBLESCAN; + + } else { + const int vsync_tolerance = 600; + + if (mode->clock > 70000) + return MODE_CLOCK_HIGH; + + if (abs(drm_mode_vrefresh(mode) * 1000 - + tv_norm->tv_enc_mode.vrefresh) > vsync_tolerance) + return MODE_VSYNC; + + /* The encoder takes care of the actual interlacing */ + if (mode->flags & DRM_MODE_FLAG_INTERLACE) + return MODE_NO_INTERLACE; + } + + return MODE_OK; +} + +static bool nv17_tv_mode_fixup(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + + if (tv_norm->kind == CTV_ENC_MODE) + adjusted_mode->clock = tv_norm->ctv_enc_mode.mode.clock; + else + adjusted_mode->clock = 90000; + + return true; +} + +static void nv17_tv_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct nv17_tv_state *regs = &to_tv_enc(encoder)->state; + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + + if (nouveau_encoder(encoder)->last_dpms == mode) + return; + nouveau_encoder(encoder)->last_dpms = mode; + + NV_INFO(dev, "Setting dpms mode %d on TV encoder (output %d)\n", + mode, nouveau_encoder(encoder)->dcb->index); + + regs->ptv_200 &= ~1; + + if (tv_norm->kind == CTV_ENC_MODE) { + nv04_dfp_update_fp_control(encoder, mode); + + } else { + nv04_dfp_update_fp_control(encoder, DRM_MODE_DPMS_OFF); + + if (mode == DRM_MODE_DPMS_ON) + regs->ptv_200 |= 1; + } + + nv_load_ptv(dev, regs, 200); + + nv17_gpio_set(dev, DCB_GPIO_TVDAC1, mode == DRM_MODE_DPMS_ON); + nv17_gpio_set(dev, DCB_GPIO_TVDAC0, mode == DRM_MODE_DPMS_ON); + + nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON); +} + +static void nv17_tv_prepare(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + int head = nouveau_crtc(encoder->crtc)->index; + uint8_t *cr_lcd = &dev_priv->mode_reg.crtc_reg[head].CRTC[ + NV_CIO_CRE_LCD__INDEX]; + uint32_t dacclk_off = NV_PRAMDAC_DACCLK + + nv04_dac_output_offset(encoder); + uint32_t dacclk; + + helper->dpms(encoder, DRM_MODE_DPMS_OFF); + + nv04_dfp_disable(dev, head); + + /* Unbind any FP encoders from this head if we need the FP + * stuff enabled. */ + if (tv_norm->kind == CTV_ENC_MODE) { + struct drm_encoder *enc; + + list_for_each_entry(enc, &dev->mode_config.encoder_list, head) { + struct dcb_entry *dcb = nouveau_encoder(enc)->dcb; + + if ((dcb->type == OUTPUT_TMDS || + dcb->type == OUTPUT_LVDS) && + !enc->crtc && + nv04_dfp_get_bound_head(dev, dcb) == head) { + nv04_dfp_bind_head(dev, dcb, head ^ 1, + dev_priv->VBIOS.fp.dual_link); + } + } + + } + + /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f) + * at LCD__INDEX which we don't alter + */ + if (!(*cr_lcd & 0x44)) { + if (tv_norm->kind == CTV_ENC_MODE) + *cr_lcd = 0x1 | (head ? 0x0 : 0x8); + else + *cr_lcd = 0; + } + + /* Set the DACCLK register */ + dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1; + + if (dev_priv->card_type == NV_40) + dacclk |= 0x1a << 16; + + if (tv_norm->kind == CTV_ENC_MODE) { + dacclk |= 0x20; + + if (head) + dacclk |= 0x100; + else + dacclk &= ~0x100; + + } else { + dacclk |= 0x10; + + } + + NVWriteRAMDAC(dev, 0, dacclk_off, dacclk); +} + +static void nv17_tv_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *drm_mode, + struct drm_display_mode *adjusted_mode) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int head = nouveau_crtc(encoder->crtc)->index; + struct nv04_crtc_reg *regs = &dev_priv->mode_reg.crtc_reg[head]; + struct nv17_tv_state *tv_regs = &to_tv_enc(encoder)->state; + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + int i; + + regs->CRTC[NV_CIO_CRE_53] = 0x40; /* FP_HTIMING */ + regs->CRTC[NV_CIO_CRE_54] = 0; /* FP_VTIMING */ + regs->ramdac_630 = 0x2; /* turn off green mode (tv test pattern?) */ + regs->tv_setup = 1; + regs->ramdac_8c0 = 0x0; + + if (tv_norm->kind == TV_ENC_MODE) { + tv_regs->ptv_200 = 0x13111100; + if (head) + tv_regs->ptv_200 |= 0x10; + + tv_regs->ptv_20c = 0x808010; + tv_regs->ptv_304 = 0x2d00000; + tv_regs->ptv_600 = 0x0; + tv_regs->ptv_60c = 0x0; + tv_regs->ptv_610 = 0x1e00000; + + if (tv_norm->tv_enc_mode.vdisplay == 576) { + tv_regs->ptv_508 = 0x1200000; + tv_regs->ptv_614 = 0x33; + + } else if (tv_norm->tv_enc_mode.vdisplay == 480) { + tv_regs->ptv_508 = 0xf00000; + tv_regs->ptv_614 = 0x13; + } + + if (dev_priv->card_type >= NV_30) { + tv_regs->ptv_500 = 0xe8e0; + tv_regs->ptv_504 = 0x1710; + tv_regs->ptv_604 = 0x0; + tv_regs->ptv_608 = 0x0; + } else { + if (tv_norm->tv_enc_mode.vdisplay == 576) { + tv_regs->ptv_604 = 0x20; + tv_regs->ptv_608 = 0x10; + tv_regs->ptv_500 = 0x19710; + tv_regs->ptv_504 = 0x68f0; + + } else if (tv_norm->tv_enc_mode.vdisplay == 480) { + tv_regs->ptv_604 = 0x10; + tv_regs->ptv_608 = 0x20; + tv_regs->ptv_500 = 0x4b90; + tv_regs->ptv_504 = 0x1b480; + } + } + + for (i = 0; i < 0x40; i++) + tv_regs->tv_enc[i] = tv_norm->tv_enc_mode.tv_enc[i]; + + } else { + struct drm_display_mode *output_mode = + &tv_norm->ctv_enc_mode.mode; + + /* The registers in PRAMDAC+0xc00 control some timings and CSC + * parameters for the CTV encoder (It's only used for "HD" TV + * modes, I don't think I have enough working to guess what + * they exactly mean...), it's probably connected at the + * output of the FP encoder, but it also needs the analog + * encoder in its OR enabled and routed to the head it's + * using. It's enabled with the DACCLK register, bits [5:4]. + */ + for (i = 0; i < 38; i++) + regs->ctv_regs[i] = tv_norm->ctv_enc_mode.ctv_regs[i]; + + regs->fp_horiz_regs[FP_DISPLAY_END] = output_mode->hdisplay - 1; + regs->fp_horiz_regs[FP_TOTAL] = output_mode->htotal - 1; + regs->fp_horiz_regs[FP_SYNC_START] = + output_mode->hsync_start - 1; + regs->fp_horiz_regs[FP_SYNC_END] = output_mode->hsync_end - 1; + regs->fp_horiz_regs[FP_CRTC] = output_mode->hdisplay + + max((output_mode->hdisplay-600)/40 - 1, 1); + + regs->fp_vert_regs[FP_DISPLAY_END] = output_mode->vdisplay - 1; + regs->fp_vert_regs[FP_TOTAL] = output_mode->vtotal - 1; + regs->fp_vert_regs[FP_SYNC_START] = + output_mode->vsync_start - 1; + regs->fp_vert_regs[FP_SYNC_END] = output_mode->vsync_end - 1; + regs->fp_vert_regs[FP_CRTC] = output_mode->vdisplay - 1; + + regs->fp_control = NV_PRAMDAC_FP_TG_CONTROL_DISPEN_POS | + NV_PRAMDAC_FP_TG_CONTROL_READ_PROG | + NV_PRAMDAC_FP_TG_CONTROL_WIDTH_12; + + if (output_mode->flags & DRM_MODE_FLAG_PVSYNC) + regs->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_VSYNC_POS; + if (output_mode->flags & DRM_MODE_FLAG_PHSYNC) + regs->fp_control |= NV_PRAMDAC_FP_TG_CONTROL_HSYNC_POS; + + regs->fp_debug_0 = NV_PRAMDAC_FP_DEBUG_0_YWEIGHT_ROUND | + NV_PRAMDAC_FP_DEBUG_0_XWEIGHT_ROUND | + NV_PRAMDAC_FP_DEBUG_0_YINTERP_BILINEAR | + NV_PRAMDAC_FP_DEBUG_0_XINTERP_BILINEAR | + NV_RAMDAC_FP_DEBUG_0_TMDS_ENABLED | + NV_PRAMDAC_FP_DEBUG_0_YSCALE_ENABLE | + NV_PRAMDAC_FP_DEBUG_0_XSCALE_ENABLE; + + regs->fp_debug_2 = 0; + + regs->fp_margin_color = 0x801080; + + } +} + +static void nv17_tv_commit(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc); + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + + if (get_tv_norm(encoder)->kind == TV_ENC_MODE) { + nv17_tv_update_rescaler(encoder); + nv17_tv_update_properties(encoder); + } else { + nv17_ctv_update_rescaler(encoder); + } + + nv17_tv_state_load(dev, &to_tv_enc(encoder)->state); + + /* This could use refinement for flatpanels, but it should work */ + if (dev_priv->chipset < 0x44) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + + nv04_dac_output_offset(encoder), + 0xf0000000); + else + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + + nv04_dac_output_offset(encoder), + 0x00100000); + + helper->dpms(encoder, DRM_MODE_DPMS_ON); + + NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n", + drm_get_connector_name( + &nouveau_encoder_connector_get(nv_encoder)->base), + nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); +} + +static void nv17_tv_save(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + + nouveau_encoder(encoder)->restore.output = + NVReadRAMDAC(dev, 0, + NV_PRAMDAC_DACCLK + + nv04_dac_output_offset(encoder)); + + nv17_tv_state_save(dev, &tv_enc->saved_state); + + tv_enc->state.ptv_200 = tv_enc->saved_state.ptv_200; +} + +static void nv17_tv_restore(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + + nv04_dac_output_offset(encoder), + nouveau_encoder(encoder)->restore.output); + + nv17_tv_state_load(dev, &to_tv_enc(encoder)->saved_state); + + nouveau_encoder(encoder)->last_dpms = NV_DPMS_CLEARED; +} + +static int nv17_tv_create_resources(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct drm_device *dev = encoder->dev; + struct drm_mode_config *conf = &dev->mode_config; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + struct dcb_entry *dcb = nouveau_encoder(encoder)->dcb; + int num_tv_norms = dcb->tvconf.has_component_output ? NUM_TV_NORMS : + NUM_LD_TV_NORMS; + int i; + + if (nouveau_tv_norm) { + for (i = 0; i < num_tv_norms; i++) { + if (!strcmp(nv17_tv_norm_names[i], nouveau_tv_norm)) { + tv_enc->tv_norm = i; + break; + } + } + + if (i == num_tv_norms) + NV_WARN(dev, "Invalid TV norm setting \"%s\"\n", + nouveau_tv_norm); + } + + drm_mode_create_tv_properties(dev, num_tv_norms, nv17_tv_norm_names); + + drm_connector_attach_property(connector, + conf->tv_select_subconnector_property, + tv_enc->select_subconnector); + drm_connector_attach_property(connector, + conf->tv_subconnector_property, + tv_enc->subconnector); + drm_connector_attach_property(connector, + conf->tv_mode_property, + tv_enc->tv_norm); + drm_connector_attach_property(connector, + conf->tv_flicker_reduction_property, + tv_enc->flicker); + drm_connector_attach_property(connector, + conf->tv_saturation_property, + tv_enc->saturation); + drm_connector_attach_property(connector, + conf->tv_hue_property, + tv_enc->hue); + drm_connector_attach_property(connector, + conf->tv_overscan_property, + tv_enc->overscan); + + return 0; +} + +static int nv17_tv_set_property(struct drm_encoder *encoder, + struct drm_connector *connector, + struct drm_property *property, + uint64_t val) +{ + struct drm_mode_config *conf = &encoder->dev->mode_config; + struct drm_crtc *crtc = encoder->crtc; + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder); + bool modes_changed = false; + + if (property == conf->tv_overscan_property) { + tv_enc->overscan = val; + if (encoder->crtc) { + if (tv_norm->kind == CTV_ENC_MODE) + nv17_ctv_update_rescaler(encoder); + else + nv17_tv_update_rescaler(encoder); + } + + } else if (property == conf->tv_saturation_property) { + if (tv_norm->kind != TV_ENC_MODE) + return -EINVAL; + + tv_enc->saturation = val; + nv17_tv_update_properties(encoder); + + } else if (property == conf->tv_hue_property) { + if (tv_norm->kind != TV_ENC_MODE) + return -EINVAL; + + tv_enc->hue = val; + nv17_tv_update_properties(encoder); + + } else if (property == conf->tv_flicker_reduction_property) { + if (tv_norm->kind != TV_ENC_MODE) + return -EINVAL; + + tv_enc->flicker = val; + if (encoder->crtc) + nv17_tv_update_rescaler(encoder); + + } else if (property == conf->tv_mode_property) { + if (connector->dpms != DRM_MODE_DPMS_OFF) + return -EINVAL; + + tv_enc->tv_norm = val; + + modes_changed = true; + + } else if (property == conf->tv_select_subconnector_property) { + if (tv_norm->kind != TV_ENC_MODE) + return -EINVAL; + + tv_enc->select_subconnector = val; + nv17_tv_update_properties(encoder); + + } else { + return -EINVAL; + } + + if (modes_changed) { + drm_helper_probe_single_connector_modes(connector, 0, 0); + + /* Disable the crtc to ensure a full modeset is + * performed whenever it's turned on again. */ + if (crtc) { + struct drm_mode_set modeset = { + .crtc = crtc, + }; + + crtc->funcs->set_config(&modeset); + } + } + + return 0; +} + +static void nv17_tv_destroy(struct drm_encoder *encoder) +{ + struct nv17_tv_encoder *tv_enc = to_tv_enc(encoder); + + NV_DEBUG_KMS(encoder->dev, "\n"); + + drm_encoder_cleanup(encoder); + kfree(tv_enc); +} + +static struct drm_encoder_helper_funcs nv17_tv_helper_funcs = { + .dpms = nv17_tv_dpms, + .save = nv17_tv_save, + .restore = nv17_tv_restore, + .mode_fixup = nv17_tv_mode_fixup, + .prepare = nv17_tv_prepare, + .commit = nv17_tv_commit, + .mode_set = nv17_tv_mode_set, + .detect = nv17_tv_detect, +}; + +static struct drm_encoder_slave_funcs nv17_tv_slave_funcs = { + .get_modes = nv17_tv_get_modes, + .mode_valid = nv17_tv_mode_valid, + .create_resources = nv17_tv_create_resources, + .set_property = nv17_tv_set_property, +}; + +static struct drm_encoder_funcs nv17_tv_funcs = { + .destroy = nv17_tv_destroy, +}; + +int nv17_tv_create(struct drm_device *dev, struct dcb_entry *entry) +{ + struct drm_encoder *encoder; + struct nv17_tv_encoder *tv_enc = NULL; + + tv_enc = kzalloc(sizeof(*tv_enc), GFP_KERNEL); + if (!tv_enc) + return -ENOMEM; + + tv_enc->overscan = 50; + tv_enc->flicker = 50; + tv_enc->saturation = 50; + tv_enc->hue = 0; + tv_enc->tv_norm = TV_NORM_PAL; + tv_enc->subconnector = DRM_MODE_SUBCONNECTOR_Unknown; + tv_enc->select_subconnector = DRM_MODE_SUBCONNECTOR_Automatic; + tv_enc->pin_mask = 0; + + encoder = to_drm_encoder(&tv_enc->base); + + tv_enc->base.dcb = entry; + tv_enc->base.or = ffs(entry->or) - 1; + + drm_encoder_init(dev, encoder, &nv17_tv_funcs, DRM_MODE_ENCODER_TVDAC); + drm_encoder_helper_add(encoder, &nv17_tv_helper_funcs); + to_encoder_slave(encoder)->slave_funcs = &nv17_tv_slave_funcs; + + encoder->possible_crtcs = entry->heads; + encoder->possible_clones = 0; + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_hw.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_hw.c @@ -0,0 +1,1080 @@ +/* + * Copyright 2006 Dave Airlie + * Copyright 2007 Maarten Maathuis + * Copyright 2007-2009 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_hw.h" + +#define CHIPSET_NFORCE 0x01a0 +#define CHIPSET_NFORCE2 0x01f0 + +/* + * misc hw access wrappers/control functions + */ + +void +NVWriteVgaSeq(struct drm_device *dev, int head, uint8_t index, uint8_t value) +{ + NVWritePRMVIO(dev, head, NV_PRMVIO_SRX, index); + NVWritePRMVIO(dev, head, NV_PRMVIO_SR, value); +} + +uint8_t +NVReadVgaSeq(struct drm_device *dev, int head, uint8_t index) +{ + NVWritePRMVIO(dev, head, NV_PRMVIO_SRX, index); + return NVReadPRMVIO(dev, head, NV_PRMVIO_SR); +} + +void +NVWriteVgaGr(struct drm_device *dev, int head, uint8_t index, uint8_t value) +{ + NVWritePRMVIO(dev, head, NV_PRMVIO_GRX, index); + NVWritePRMVIO(dev, head, NV_PRMVIO_GX, value); +} + +uint8_t +NVReadVgaGr(struct drm_device *dev, int head, uint8_t index) +{ + NVWritePRMVIO(dev, head, NV_PRMVIO_GRX, index); + return NVReadPRMVIO(dev, head, NV_PRMVIO_GX); +} + +/* CR44 takes values 0 (head A), 3 (head B) and 4 (heads tied) + * it affects only the 8 bit vga io regs, which we access using mmio at + * 0xc{0,2}3c*, 0x60{1,3}3*, and 0x68{1,3}3d* + * in general, the set value of cr44 does not matter: reg access works as + * expected and values can be set for the appropriate head by using a 0x2000 + * offset as required + * however: + * a) pre nv40, the head B range of PRMVIO regs at 0xc23c* was not exposed and + * cr44 must be set to 0 or 3 for accessing values on the correct head + * through the common 0xc03c* addresses + * b) in tied mode (4) head B is programmed to the values set on head A, and + * access using the head B addresses can have strange results, ergo we leave + * tied mode in init once we know to what cr44 should be restored on exit + * + * the owner parameter is slightly abused: + * 0 and 1 are treated as head values and so the set value is (owner * 3) + * other values are treated as literal values to set + */ +void +NVSetOwner(struct drm_device *dev, int owner) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (owner == 1) + owner *= 3; + + if (dev_priv->chipset == 0x11) { + /* This might seem stupid, but the blob does it and + * omitting it often locks the system up. + */ + NVReadVgaCrtc(dev, 0, NV_CIO_SR_LOCK_INDEX); + NVReadVgaCrtc(dev, 1, NV_CIO_SR_LOCK_INDEX); + } + + /* CR44 is always changed on CRTC0 */ + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_44, owner); + + if (dev_priv->chipset == 0x11) { /* set me harder */ + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_2E, owner); + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_2E, owner); + } +} + +void +NVBlankScreen(struct drm_device *dev, int head, bool blank) +{ + unsigned char seq1; + + if (nv_two_heads(dev)) + NVSetOwner(dev, head); + + seq1 = NVReadVgaSeq(dev, head, NV_VIO_SR_CLOCK_INDEX); + + NVVgaSeqReset(dev, head, true); + if (blank) + NVWriteVgaSeq(dev, head, NV_VIO_SR_CLOCK_INDEX, seq1 | 0x20); + else + NVWriteVgaSeq(dev, head, NV_VIO_SR_CLOCK_INDEX, seq1 & ~0x20); + NVVgaSeqReset(dev, head, false); +} + +/* + * PLL setting + */ + +static int +powerctrl_1_shift(int chip_version, int reg) +{ + int shift = -4; + + if (chip_version < 0x17 || chip_version == 0x1a || chip_version == 0x20) + return shift; + + switch (reg) { + case NV_RAMDAC_VPLL2: + shift += 4; + case NV_PRAMDAC_VPLL_COEFF: + shift += 4; + case NV_PRAMDAC_MPLL_COEFF: + shift += 4; + case NV_PRAMDAC_NVPLL_COEFF: + shift += 4; + } + + /* + * the shift for vpll regs is only used for nv3x chips with a single + * stage pll + */ + if (shift > 4 && (chip_version < 0x32 || chip_version == 0x35 || + chip_version == 0x36 || chip_version >= 0x40)) + shift = -4; + + return shift; +} + +static void +setPLL_single(struct drm_device *dev, uint32_t reg, struct nouveau_pll_vals *pv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int chip_version = dev_priv->vbios->chip_version; + uint32_t oldpll = NVReadRAMDAC(dev, 0, reg); + int oldN = (oldpll >> 8) & 0xff, oldM = oldpll & 0xff; + uint32_t pll = (oldpll & 0xfff80000) | pv->log2P << 16 | pv->NM1; + uint32_t saved_powerctrl_1 = 0; + int shift_powerctrl_1 = powerctrl_1_shift(chip_version, reg); + + if (oldpll == pll) + return; /* already set */ + + if (shift_powerctrl_1 >= 0) { + saved_powerctrl_1 = nvReadMC(dev, NV_PBUS_POWERCTRL_1); + nvWriteMC(dev, NV_PBUS_POWERCTRL_1, + (saved_powerctrl_1 & ~(0xf << shift_powerctrl_1)) | + 1 << shift_powerctrl_1); + } + + if (oldM && pv->M1 && (oldN / oldM < pv->N1 / pv->M1)) + /* upclock -- write new post divider first */ + NVWriteRAMDAC(dev, 0, reg, pv->log2P << 16 | (oldpll & 0xffff)); + else + /* downclock -- write new NM first */ + NVWriteRAMDAC(dev, 0, reg, (oldpll & 0xffff0000) | pv->NM1); + + if (chip_version < 0x17 && chip_version != 0x11) + /* wait a bit on older chips */ + msleep(64); + NVReadRAMDAC(dev, 0, reg); + + /* then write the other half as well */ + NVWriteRAMDAC(dev, 0, reg, pll); + + if (shift_powerctrl_1 >= 0) + nvWriteMC(dev, NV_PBUS_POWERCTRL_1, saved_powerctrl_1); +} + +static uint32_t +new_ramdac580(uint32_t reg1, bool ss, uint32_t ramdac580) +{ + bool head_a = (reg1 == NV_PRAMDAC_VPLL_COEFF); + + if (ss) /* single stage pll mode */ + ramdac580 |= head_a ? NV_RAMDAC_580_VPLL1_ACTIVE : + NV_RAMDAC_580_VPLL2_ACTIVE; + else + ramdac580 &= head_a ? ~NV_RAMDAC_580_VPLL1_ACTIVE : + ~NV_RAMDAC_580_VPLL2_ACTIVE; + + return ramdac580; +} + +static void +setPLL_double_highregs(struct drm_device *dev, uint32_t reg1, + struct nouveau_pll_vals *pv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int chip_version = dev_priv->vbios->chip_version; + bool nv3035 = chip_version == 0x30 || chip_version == 0x35; + uint32_t reg2 = reg1 + ((reg1 == NV_RAMDAC_VPLL2) ? 0x5c : 0x70); + uint32_t oldpll1 = NVReadRAMDAC(dev, 0, reg1); + uint32_t oldpll2 = !nv3035 ? NVReadRAMDAC(dev, 0, reg2) : 0; + uint32_t pll1 = (oldpll1 & 0xfff80000) | pv->log2P << 16 | pv->NM1; + uint32_t pll2 = (oldpll2 & 0x7fff0000) | 1 << 31 | pv->NM2; + uint32_t oldramdac580 = 0, ramdac580 = 0; + bool single_stage = !pv->NM2 || pv->N2 == pv->M2; /* nv41+ only */ + uint32_t saved_powerctrl_1 = 0, savedc040 = 0; + int shift_powerctrl_1 = powerctrl_1_shift(chip_version, reg1); + + /* model specific additions to generic pll1 and pll2 set up above */ + if (nv3035) { + pll1 = (pll1 & 0xfcc7ffff) | (pv->N2 & 0x18) << 21 | + (pv->N2 & 0x7) << 19 | 8 << 4 | (pv->M2 & 7) << 4; + pll2 = 0; + } + if (chip_version > 0x40 && reg1 >= NV_PRAMDAC_VPLL_COEFF) { /* !nv40 */ + oldramdac580 = NVReadRAMDAC(dev, 0, NV_PRAMDAC_580); + ramdac580 = new_ramdac580(reg1, single_stage, oldramdac580); + if (oldramdac580 != ramdac580) + oldpll1 = ~0; /* force mismatch */ + if (single_stage) + /* magic value used by nvidia in single stage mode */ + pll2 |= 0x011f; + } + if (chip_version > 0x70) + /* magic bits set by the blob (but not the bios) on g71-73 */ + pll1 = (pll1 & 0x7fffffff) | (single_stage ? 0x4 : 0xc) << 28; + + if (oldpll1 == pll1 && oldpll2 == pll2) + return; /* already set */ + + if (shift_powerctrl_1 >= 0) { + saved_powerctrl_1 = nvReadMC(dev, NV_PBUS_POWERCTRL_1); + nvWriteMC(dev, NV_PBUS_POWERCTRL_1, + (saved_powerctrl_1 & ~(0xf << shift_powerctrl_1)) | + 1 << shift_powerctrl_1); + } + + if (chip_version >= 0x40) { + int shift_c040 = 14; + + switch (reg1) { + case NV_PRAMDAC_MPLL_COEFF: + shift_c040 += 2; + case NV_PRAMDAC_NVPLL_COEFF: + shift_c040 += 2; + case NV_RAMDAC_VPLL2: + shift_c040 += 2; + case NV_PRAMDAC_VPLL_COEFF: + shift_c040 += 2; + } + + savedc040 = nvReadMC(dev, 0xc040); + if (shift_c040 != 14) + nvWriteMC(dev, 0xc040, savedc040 & ~(3 << shift_c040)); + } + + if (oldramdac580 != ramdac580) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_580, ramdac580); + + if (!nv3035) + NVWriteRAMDAC(dev, 0, reg2, pll2); + NVWriteRAMDAC(dev, 0, reg1, pll1); + + if (shift_powerctrl_1 >= 0) + nvWriteMC(dev, NV_PBUS_POWERCTRL_1, saved_powerctrl_1); + if (chip_version >= 0x40) + nvWriteMC(dev, 0xc040, savedc040); +} + +static void +setPLL_double_lowregs(struct drm_device *dev, uint32_t NMNMreg, + struct nouveau_pll_vals *pv) +{ + /* When setting PLLs, there is a merry game of disabling and enabling + * various bits of hardware during the process. This function is a + * synthesis of six nv4x traces, nearly each card doing a subtly + * different thing. With luck all the necessary bits for each card are + * combined herein. Without luck it deviates from each card's formula + * so as to not work on any :) + */ + + uint32_t Preg = NMNMreg - 4; + bool mpll = Preg == 0x4020; + uint32_t oldPval = nvReadMC(dev, Preg); + uint32_t NMNM = pv->NM2 << 16 | pv->NM1; + uint32_t Pval = (oldPval & (mpll ? ~(0x11 << 16) : ~(1 << 16))) | + 0xc << 28 | pv->log2P << 16; + uint32_t saved4600 = 0; + /* some cards have different maskc040s */ + uint32_t maskc040 = ~(3 << 14), savedc040; + bool single_stage = !pv->NM2 || pv->N2 == pv->M2; + + if (nvReadMC(dev, NMNMreg) == NMNM && (oldPval & 0xc0070000) == Pval) + return; + + if (Preg == 0x4000) + maskc040 = ~0x333; + if (Preg == 0x4058) + maskc040 = ~(0xc << 24); + + if (mpll) { + struct pll_lims pll_lim; + uint8_t Pval2; + + if (get_pll_limits(dev, Preg, &pll_lim)) + return; + + Pval2 = pv->log2P + pll_lim.log2p_bias; + if (Pval2 > pll_lim.max_log2p) + Pval2 = pll_lim.max_log2p; + Pval |= 1 << 28 | Pval2 << 20; + + saved4600 = nvReadMC(dev, 0x4600); + nvWriteMC(dev, 0x4600, saved4600 | 8 << 28); + } + if (single_stage) + Pval |= mpll ? 1 << 12 : 1 << 8; + + nvWriteMC(dev, Preg, oldPval | 1 << 28); + nvWriteMC(dev, Preg, Pval & ~(4 << 28)); + if (mpll) { + Pval |= 8 << 20; + nvWriteMC(dev, 0x4020, Pval & ~(0xc << 28)); + nvWriteMC(dev, 0x4038, Pval & ~(0xc << 28)); + } + + savedc040 = nvReadMC(dev, 0xc040); + nvWriteMC(dev, 0xc040, savedc040 & maskc040); + + nvWriteMC(dev, NMNMreg, NMNM); + if (NMNMreg == 0x4024) + nvWriteMC(dev, 0x403c, NMNM); + + nvWriteMC(dev, Preg, Pval); + if (mpll) { + Pval &= ~(8 << 20); + nvWriteMC(dev, 0x4020, Pval); + nvWriteMC(dev, 0x4038, Pval); + nvWriteMC(dev, 0x4600, saved4600); + } + + nvWriteMC(dev, 0xc040, savedc040); + + if (mpll) { + nvWriteMC(dev, 0x4020, Pval & ~(1 << 28)); + nvWriteMC(dev, 0x4038, Pval & ~(1 << 28)); + } +} + +void +nouveau_hw_setpll(struct drm_device *dev, uint32_t reg1, + struct nouveau_pll_vals *pv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int cv = dev_priv->vbios->chip_version; + + if (cv == 0x30 || cv == 0x31 || cv == 0x35 || cv == 0x36 || + cv >= 0x40) { + if (reg1 > 0x405c) + setPLL_double_highregs(dev, reg1, pv); + else + setPLL_double_lowregs(dev, reg1, pv); + } else + setPLL_single(dev, reg1, pv); +} + +/* + * PLL getting + */ + +static void +nouveau_hw_decode_pll(struct drm_device *dev, uint32_t reg1, uint32_t pll1, + uint32_t pll2, struct nouveau_pll_vals *pllvals) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /* to force parsing as single stage (i.e. nv40 vplls) pass pll2 as 0 */ + + /* log2P is & 0x7 as never more than 7, and nv30/35 only uses 3 bits */ + pllvals->log2P = (pll1 >> 16) & 0x7; + pllvals->N2 = pllvals->M2 = 1; + + if (reg1 <= 0x405c) { + pllvals->NM1 = pll2 & 0xffff; + /* single stage NVPLL and VPLLs use 1 << 8, MPLL uses 1 << 12 */ + if (!(pll1 & 0x1100)) + pllvals->NM2 = pll2 >> 16; + } else { + pllvals->NM1 = pll1 & 0xffff; + if (nv_two_reg_pll(dev) && pll2 & NV31_RAMDAC_ENABLE_VCO2) + pllvals->NM2 = pll2 & 0xffff; + else if (dev_priv->chipset == 0x30 || dev_priv->chipset == 0x35) { + pllvals->M1 &= 0xf; /* only 4 bits */ + if (pll1 & NV30_RAMDAC_ENABLE_VCO2) { + pllvals->M2 = (pll1 >> 4) & 0x7; + pllvals->N2 = ((pll1 >> 21) & 0x18) | + ((pll1 >> 19) & 0x7); + } + } + } +} + +int +nouveau_hw_get_pllvals(struct drm_device *dev, enum pll_types plltype, + struct nouveau_pll_vals *pllvals) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + const uint32_t nv04_regs[MAX_PLL_TYPES] = { NV_PRAMDAC_NVPLL_COEFF, + NV_PRAMDAC_MPLL_COEFF, + NV_PRAMDAC_VPLL_COEFF, + NV_RAMDAC_VPLL2 }; + const uint32_t nv40_regs[MAX_PLL_TYPES] = { 0x4000, + 0x4020, + NV_PRAMDAC_VPLL_COEFF, + NV_RAMDAC_VPLL2 }; + uint32_t reg1, pll1, pll2 = 0; + struct pll_lims pll_lim; + int ret; + + if (dev_priv->card_type < NV_40) + reg1 = nv04_regs[plltype]; + else + reg1 = nv40_regs[plltype]; + + pll1 = nvReadMC(dev, reg1); + + if (reg1 <= 0x405c) + pll2 = nvReadMC(dev, reg1 + 4); + else if (nv_two_reg_pll(dev)) { + uint32_t reg2 = reg1 + (reg1 == NV_RAMDAC_VPLL2 ? 0x5c : 0x70); + + pll2 = nvReadMC(dev, reg2); + } + + if (dev_priv->card_type == 0x40 && reg1 >= NV_PRAMDAC_VPLL_COEFF) { + uint32_t ramdac580 = NVReadRAMDAC(dev, 0, NV_PRAMDAC_580); + + /* check whether vpll has been forced into single stage mode */ + if (reg1 == NV_PRAMDAC_VPLL_COEFF) { + if (ramdac580 & NV_RAMDAC_580_VPLL1_ACTIVE) + pll2 = 0; + } else + if (ramdac580 & NV_RAMDAC_580_VPLL2_ACTIVE) + pll2 = 0; + } + + nouveau_hw_decode_pll(dev, reg1, pll1, pll2, pllvals); + + ret = get_pll_limits(dev, plltype, &pll_lim); + if (ret) + return ret; + + pllvals->refclk = pll_lim.refclk; + + return 0; +} + +int +nouveau_hw_pllvals_to_clk(struct nouveau_pll_vals *pv) +{ + /* Avoid divide by zero if called at an inappropriate time */ + if (!pv->M1 || !pv->M2) + return 0; + + return pv->N1 * pv->N2 * pv->refclk / (pv->M1 * pv->M2) >> pv->log2P; +} + +int +nouveau_hw_get_clock(struct drm_device *dev, enum pll_types plltype) +{ + struct nouveau_pll_vals pllvals; + + if (plltype == MPLL && (dev->pci_device & 0x0ff0) == CHIPSET_NFORCE) { + uint32_t mpllP; + + pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP); + if (!mpllP) + mpllP = 4; + + return 400000 / mpllP; + } else + if (plltype == MPLL && (dev->pci_device & 0xff0) == CHIPSET_NFORCE2) { + uint32_t clock; + + pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock); + return clock; + } + + nouveau_hw_get_pllvals(dev, plltype, &pllvals); + + return nouveau_hw_pllvals_to_clk(&pllvals); +} + +static void +nouveau_hw_fix_bad_vpll(struct drm_device *dev, int head) +{ + /* the vpll on an unused head can come up with a random value, way + * beyond the pll limits. for some reason this causes the chip to + * lock up when reading the dac palette regs, so set a valid pll here + * when such a condition detected. only seen on nv11 to date + */ + + struct pll_lims pll_lim; + struct nouveau_pll_vals pv; + uint32_t pllreg = head ? NV_RAMDAC_VPLL2 : NV_PRAMDAC_VPLL_COEFF; + + if (get_pll_limits(dev, head ? VPLL2 : VPLL1, &pll_lim)) + return; + nouveau_hw_get_pllvals(dev, head ? VPLL2 : VPLL1, &pv); + + if (pv.M1 >= pll_lim.vco1.min_m && pv.M1 <= pll_lim.vco1.max_m && + pv.N1 >= pll_lim.vco1.min_n && pv.N1 <= pll_lim.vco1.max_n && + pv.log2P <= pll_lim.max_log2p) + return; + + NV_WARN(dev, "VPLL %d outwith limits, attempting to fix\n", head + 1); + + /* set lowest clock within static limits */ + pv.M1 = pll_lim.vco1.max_m; + pv.N1 = pll_lim.vco1.min_n; + pv.log2P = pll_lim.max_usable_log2p; + nouveau_hw_setpll(dev, pllreg, &pv); +} + +/* + * vga font save/restore + */ + +static void nouveau_vga_font_io(struct drm_device *dev, + void __iomem *iovram, + bool save, unsigned plane) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + unsigned i; + + NVWriteVgaSeq(dev, 0, NV_VIO_SR_PLANE_MASK_INDEX, 1 << plane); + NVWriteVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX, plane); + for (i = 0; i < 16384; i++) { + if (save) { + dev_priv->saved_vga_font[plane][i] = + ioread32_native(iovram + i * 4); + } else { + iowrite32_native(dev_priv->saved_vga_font[plane][i], + iovram + i * 4); + } + } +} + +void +nouveau_hw_save_vga_fonts(struct drm_device *dev, bool save) +{ + uint8_t misc, gr4, gr5, gr6, seq2, seq4; + bool graphicsmode; + unsigned plane; + void __iomem *iovram; + + if (nv_two_heads(dev)) + NVSetOwner(dev, 0); + + NVSetEnablePalette(dev, 0, true); + graphicsmode = NVReadVgaAttr(dev, 0, NV_CIO_AR_MODE_INDEX) & 1; + NVSetEnablePalette(dev, 0, false); + + if (graphicsmode) /* graphics mode => framebuffer => no need to save */ + return; + + NV_INFO(dev, "%sing VGA fonts\n", save ? "Sav" : "Restor"); + + /* map first 64KiB of VRAM, holds VGA fonts etc */ + iovram = ioremap(pci_resource_start(dev->pdev, 1), 65536); + if (!iovram) { + NV_ERROR(dev, "Failed to map VRAM, " + "cannot save/restore VGA fonts.\n"); + return; + } + + if (nv_two_heads(dev)) + NVBlankScreen(dev, 1, true); + NVBlankScreen(dev, 0, true); + + /* save control regs */ + misc = NVReadPRMVIO(dev, 0, NV_PRMVIO_MISC__READ); + seq2 = NVReadVgaSeq(dev, 0, NV_VIO_SR_PLANE_MASK_INDEX); + seq4 = NVReadVgaSeq(dev, 0, NV_VIO_SR_MEM_MODE_INDEX); + gr4 = NVReadVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX); + gr5 = NVReadVgaGr(dev, 0, NV_VIO_GX_MODE_INDEX); + gr6 = NVReadVgaGr(dev, 0, NV_VIO_GX_MISC_INDEX); + + NVWritePRMVIO(dev, 0, NV_PRMVIO_MISC__WRITE, 0x67); + NVWriteVgaSeq(dev, 0, NV_VIO_SR_MEM_MODE_INDEX, 0x6); + NVWriteVgaGr(dev, 0, NV_VIO_GX_MODE_INDEX, 0x0); + NVWriteVgaGr(dev, 0, NV_VIO_GX_MISC_INDEX, 0x5); + + /* store font in planes 0..3 */ + for (plane = 0; plane < 4; plane++) + nouveau_vga_font_io(dev, iovram, save, plane); + + /* restore control regs */ + NVWritePRMVIO(dev, 0, NV_PRMVIO_MISC__WRITE, misc); + NVWriteVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX, gr4); + NVWriteVgaGr(dev, 0, NV_VIO_GX_MODE_INDEX, gr5); + NVWriteVgaGr(dev, 0, NV_VIO_GX_MISC_INDEX, gr6); + NVWriteVgaSeq(dev, 0, NV_VIO_SR_PLANE_MASK_INDEX, seq2); + NVWriteVgaSeq(dev, 0, NV_VIO_SR_MEM_MODE_INDEX, seq4); + + if (nv_two_heads(dev)) + NVBlankScreen(dev, 1, false); + NVBlankScreen(dev, 0, false); + + iounmap(iovram); +} + +/* + * mode state save/load + */ + +static void +rd_cio_state(struct drm_device *dev, int head, + struct nv04_crtc_reg *crtcstate, int index) +{ + crtcstate->CRTC[index] = NVReadVgaCrtc(dev, head, index); +} + +static void +wr_cio_state(struct drm_device *dev, int head, + struct nv04_crtc_reg *crtcstate, int index) +{ + NVWriteVgaCrtc(dev, head, index, crtcstate->CRTC[index]); +} + +static void +nv_save_state_ramdac(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *regp = &state->crtc_reg[head]; + int i; + + if (dev_priv->card_type >= NV_10) + regp->nv10_cursync = NVReadRAMDAC(dev, head, NV_RAMDAC_NV10_CURSYNC); + + nouveau_hw_get_pllvals(dev, head ? VPLL2 : VPLL1, ®p->pllvals); + state->pllsel = NVReadRAMDAC(dev, 0, NV_PRAMDAC_PLL_COEFF_SELECT); + if (nv_two_heads(dev)) + state->sel_clk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK); + if (dev_priv->chipset == 0x11) + regp->dither = NVReadRAMDAC(dev, head, NV_RAMDAC_DITHER_NV11); + + regp->ramdac_gen_ctrl = NVReadRAMDAC(dev, head, NV_PRAMDAC_GENERAL_CONTROL); + + if (nv_gf4_disp_arch(dev)) + regp->ramdac_630 = NVReadRAMDAC(dev, head, NV_PRAMDAC_630); + if (dev_priv->chipset >= 0x30) + regp->ramdac_634 = NVReadRAMDAC(dev, head, NV_PRAMDAC_634); + + regp->tv_setup = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_SETUP); + regp->tv_vtotal = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_VTOTAL); + regp->tv_vskew = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_VSKEW); + regp->tv_vsync_delay = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_VSYNC_DELAY); + regp->tv_htotal = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_HTOTAL); + regp->tv_hskew = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_HSKEW); + regp->tv_hsync_delay = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_HSYNC_DELAY); + regp->tv_hsync_delay2 = NVReadRAMDAC(dev, head, NV_PRAMDAC_TV_HSYNC_DELAY2); + + for (i = 0; i < 7; i++) { + uint32_t ramdac_reg = NV_PRAMDAC_FP_VDISPLAY_END + (i * 4); + regp->fp_vert_regs[i] = NVReadRAMDAC(dev, head, ramdac_reg); + regp->fp_horiz_regs[i] = NVReadRAMDAC(dev, head, ramdac_reg + 0x20); + } + + if (nv_gf4_disp_arch(dev)) { + regp->dither = NVReadRAMDAC(dev, head, NV_RAMDAC_FP_DITHER); + for (i = 0; i < 3; i++) { + regp->dither_regs[i] = NVReadRAMDAC(dev, head, NV_PRAMDAC_850 + i * 4); + regp->dither_regs[i + 3] = NVReadRAMDAC(dev, head, NV_PRAMDAC_85C + i * 4); + } + } + + regp->fp_control = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL); + regp->fp_debug_0 = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_0); + if (!nv_gf4_disp_arch(dev) && head == 0) { + /* early chips don't allow access to PRAMDAC_TMDS_* without + * the head A FPCLK on (nv11 even locks up) */ + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_FP_DEBUG_0, regp->fp_debug_0 & + ~NV_PRAMDAC_FP_DEBUG_0_PWRDOWN_FPCLK); + } + regp->fp_debug_1 = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_1); + regp->fp_debug_2 = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_2); + + regp->fp_margin_color = NVReadRAMDAC(dev, head, NV_PRAMDAC_FP_MARGIN_COLOR); + + if (nv_gf4_disp_arch(dev)) + regp->ramdac_8c0 = NVReadRAMDAC(dev, head, NV_PRAMDAC_8C0); + + if (dev_priv->card_type == NV_40) { + regp->ramdac_a20 = NVReadRAMDAC(dev, head, NV_PRAMDAC_A20); + regp->ramdac_a24 = NVReadRAMDAC(dev, head, NV_PRAMDAC_A24); + regp->ramdac_a34 = NVReadRAMDAC(dev, head, NV_PRAMDAC_A34); + + for (i = 0; i < 38; i++) + regp->ctv_regs[i] = NVReadRAMDAC(dev, head, + NV_PRAMDAC_CTV + 4*i); + } +} + +static void +nv_load_state_ramdac(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *regp = &state->crtc_reg[head]; + uint32_t pllreg = head ? NV_RAMDAC_VPLL2 : NV_PRAMDAC_VPLL_COEFF; + int i; + + if (dev_priv->card_type >= NV_10) + NVWriteRAMDAC(dev, head, NV_RAMDAC_NV10_CURSYNC, regp->nv10_cursync); + + nouveau_hw_setpll(dev, pllreg, ®p->pllvals); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_PLL_COEFF_SELECT, state->pllsel); + if (nv_two_heads(dev)) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK, state->sel_clk); + if (dev_priv->chipset == 0x11) + NVWriteRAMDAC(dev, head, NV_RAMDAC_DITHER_NV11, regp->dither); + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_GENERAL_CONTROL, regp->ramdac_gen_ctrl); + + if (nv_gf4_disp_arch(dev)) + NVWriteRAMDAC(dev, head, NV_PRAMDAC_630, regp->ramdac_630); + if (dev_priv->chipset >= 0x30) + NVWriteRAMDAC(dev, head, NV_PRAMDAC_634, regp->ramdac_634); + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_SETUP, regp->tv_setup); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_VTOTAL, regp->tv_vtotal); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_VSKEW, regp->tv_vskew); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_VSYNC_DELAY, regp->tv_vsync_delay); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_HTOTAL, regp->tv_htotal); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_HSKEW, regp->tv_hskew); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_HSYNC_DELAY, regp->tv_hsync_delay); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_HSYNC_DELAY2, regp->tv_hsync_delay2); + + for (i = 0; i < 7; i++) { + uint32_t ramdac_reg = NV_PRAMDAC_FP_VDISPLAY_END + (i * 4); + + NVWriteRAMDAC(dev, head, ramdac_reg, regp->fp_vert_regs[i]); + NVWriteRAMDAC(dev, head, ramdac_reg + 0x20, regp->fp_horiz_regs[i]); + } + + if (nv_gf4_disp_arch(dev)) { + NVWriteRAMDAC(dev, head, NV_RAMDAC_FP_DITHER, regp->dither); + for (i = 0; i < 3; i++) { + NVWriteRAMDAC(dev, head, NV_PRAMDAC_850 + i * 4, regp->dither_regs[i]); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_85C + i * 4, regp->dither_regs[i + 3]); + } + } + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_TG_CONTROL, regp->fp_control); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_0, regp->fp_debug_0); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_1, regp->fp_debug_1); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_DEBUG_2, regp->fp_debug_2); + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_FP_MARGIN_COLOR, regp->fp_margin_color); + + if (nv_gf4_disp_arch(dev)) + NVWriteRAMDAC(dev, head, NV_PRAMDAC_8C0, regp->ramdac_8c0); + + if (dev_priv->card_type == NV_40) { + NVWriteRAMDAC(dev, head, NV_PRAMDAC_A20, regp->ramdac_a20); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_A24, regp->ramdac_a24); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_A34, regp->ramdac_a34); + + for (i = 0; i < 38; i++) + NVWriteRAMDAC(dev, head, + NV_PRAMDAC_CTV + 4*i, regp->ctv_regs[i]); + } +} + +static void +nv_save_state_vga(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct nv04_crtc_reg *regp = &state->crtc_reg[head]; + int i; + + regp->MiscOutReg = NVReadPRMVIO(dev, head, NV_PRMVIO_MISC__READ); + + for (i = 0; i < 25; i++) + rd_cio_state(dev, head, regp, i); + + NVSetEnablePalette(dev, head, true); + for (i = 0; i < 21; i++) + regp->Attribute[i] = NVReadVgaAttr(dev, head, i); + NVSetEnablePalette(dev, head, false); + + for (i = 0; i < 9; i++) + regp->Graphics[i] = NVReadVgaGr(dev, head, i); + + for (i = 0; i < 5; i++) + regp->Sequencer[i] = NVReadVgaSeq(dev, head, i); +} + +static void +nv_load_state_vga(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct nv04_crtc_reg *regp = &state->crtc_reg[head]; + int i; + + NVWritePRMVIO(dev, head, NV_PRMVIO_MISC__WRITE, regp->MiscOutReg); + + for (i = 0; i < 5; i++) + NVWriteVgaSeq(dev, head, i, regp->Sequencer[i]); + + nv_lock_vga_crtc_base(dev, head, false); + for (i = 0; i < 25; i++) + wr_cio_state(dev, head, regp, i); + nv_lock_vga_crtc_base(dev, head, true); + + for (i = 0; i < 9; i++) + NVWriteVgaGr(dev, head, i, regp->Graphics[i]); + + NVSetEnablePalette(dev, head, true); + for (i = 0; i < 21; i++) + NVWriteVgaAttr(dev, head, i, regp->Attribute[i]); + NVSetEnablePalette(dev, head, false); +} + +static void +nv_save_state_ext(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *regp = &state->crtc_reg[head]; + int i; + + rd_cio_state(dev, head, regp, NV_CIO_CRE_LCD__INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_RPC0_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_RPC1_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_LSR_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_PIXEL_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_HEB__INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_ENH_INDEX); + + rd_cio_state(dev, head, regp, NV_CIO_CRE_FF_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_FFLWM__INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_21); + if (dev_priv->card_type >= NV_30) + rd_cio_state(dev, head, regp, NV_CIO_CRE_47); + rd_cio_state(dev, head, regp, NV_CIO_CRE_49); + rd_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR0_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR1_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR2_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_ILACE__INDEX); + + if (dev_priv->card_type >= NV_10) { + regp->crtc_830 = NVReadCRTC(dev, head, NV_PCRTC_830); + regp->crtc_834 = NVReadCRTC(dev, head, NV_PCRTC_834); + + if (dev_priv->card_type >= NV_30) + regp->gpio_ext = NVReadCRTC(dev, head, NV_PCRTC_GPIO_EXT); + + if (dev_priv->card_type == NV_40) + regp->crtc_850 = NVReadCRTC(dev, head, NV_PCRTC_850); + + if (nv_two_heads(dev)) + regp->crtc_eng_ctrl = NVReadCRTC(dev, head, NV_PCRTC_ENGINE_CTRL); + regp->cursor_cfg = NVReadCRTC(dev, head, NV_PCRTC_CURSOR_CONFIG); + } + + regp->crtc_cfg = NVReadCRTC(dev, head, NV_PCRTC_CONFIG); + + rd_cio_state(dev, head, regp, NV_CIO_CRE_SCRATCH3__INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_SCRATCH4__INDEX); + if (dev_priv->card_type >= NV_10) { + rd_cio_state(dev, head, regp, NV_CIO_CRE_EBR_INDEX); + rd_cio_state(dev, head, regp, NV_CIO_CRE_CSB); + rd_cio_state(dev, head, regp, NV_CIO_CRE_4B); + rd_cio_state(dev, head, regp, NV_CIO_CRE_TVOUT_LATENCY); + } + /* NV11 and NV20 don't have this, they stop at 0x52. */ + if (nv_gf4_disp_arch(dev)) { + rd_cio_state(dev, head, regp, NV_CIO_CRE_53); + rd_cio_state(dev, head, regp, NV_CIO_CRE_54); + + for (i = 0; i < 0x10; i++) + regp->CR58[i] = NVReadVgaCrtc5758(dev, head, i); + rd_cio_state(dev, head, regp, NV_CIO_CRE_59); + rd_cio_state(dev, head, regp, NV_CIO_CRE_5B); + + rd_cio_state(dev, head, regp, NV_CIO_CRE_85); + rd_cio_state(dev, head, regp, NV_CIO_CRE_86); + } + + regp->fb_start = NVReadCRTC(dev, head, NV_PCRTC_START); +} + +static void +nv_load_state_ext(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *regp = &state->crtc_reg[head]; + uint32_t reg900; + int i; + + if (dev_priv->card_type >= NV_10) { + if (nv_two_heads(dev)) + /* setting ENGINE_CTRL (EC) *must* come before + * CIO_CRE_LCD, as writing CRE_LCD sets bits 16 & 17 in + * EC that should not be overwritten by writing stale EC + */ + NVWriteCRTC(dev, head, NV_PCRTC_ENGINE_CTRL, regp->crtc_eng_ctrl); + + nvWriteVIDEO(dev, NV_PVIDEO_STOP, 1); + nvWriteVIDEO(dev, NV_PVIDEO_INTR_EN, 0); + nvWriteVIDEO(dev, NV_PVIDEO_OFFSET_BUFF(0), 0); + nvWriteVIDEO(dev, NV_PVIDEO_OFFSET_BUFF(1), 0); + nvWriteVIDEO(dev, NV_PVIDEO_LIMIT(0), dev_priv->fb_available_size - 1); + nvWriteVIDEO(dev, NV_PVIDEO_LIMIT(1), dev_priv->fb_available_size - 1); + nvWriteVIDEO(dev, NV_PVIDEO_UVPLANE_LIMIT(0), dev_priv->fb_available_size - 1); + nvWriteVIDEO(dev, NV_PVIDEO_UVPLANE_LIMIT(1), dev_priv->fb_available_size - 1); + nvWriteMC(dev, NV_PBUS_POWERCTRL_2, 0); + + NVWriteCRTC(dev, head, NV_PCRTC_CURSOR_CONFIG, regp->cursor_cfg); + NVWriteCRTC(dev, head, NV_PCRTC_830, regp->crtc_830); + NVWriteCRTC(dev, head, NV_PCRTC_834, regp->crtc_834); + + if (dev_priv->card_type >= NV_30) + NVWriteCRTC(dev, head, NV_PCRTC_GPIO_EXT, regp->gpio_ext); + + if (dev_priv->card_type == NV_40) { + NVWriteCRTC(dev, head, NV_PCRTC_850, regp->crtc_850); + + reg900 = NVReadRAMDAC(dev, head, NV_PRAMDAC_900); + if (regp->crtc_cfg == NV_PCRTC_CONFIG_START_ADDRESS_HSYNC) + NVWriteRAMDAC(dev, head, NV_PRAMDAC_900, reg900 | 0x10000); + else + NVWriteRAMDAC(dev, head, NV_PRAMDAC_900, reg900 & ~0x10000); + } + } + + NVWriteCRTC(dev, head, NV_PCRTC_CONFIG, regp->crtc_cfg); + + wr_cio_state(dev, head, regp, NV_CIO_CRE_RPC0_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_RPC1_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_LSR_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_PIXEL_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_LCD__INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_HEB__INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_ENH_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_FF_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_FFLWM__INDEX); + if (dev_priv->card_type >= NV_30) + wr_cio_state(dev, head, regp, NV_CIO_CRE_47); + + wr_cio_state(dev, head, regp, NV_CIO_CRE_49); + wr_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR0_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR1_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_HCUR_ADDR2_INDEX); + if (dev_priv->card_type == NV_40) + nv_fix_nv40_hw_cursor(dev, head); + wr_cio_state(dev, head, regp, NV_CIO_CRE_ILACE__INDEX); + + wr_cio_state(dev, head, regp, NV_CIO_CRE_SCRATCH3__INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_SCRATCH4__INDEX); + if (dev_priv->card_type >= NV_10) { + wr_cio_state(dev, head, regp, NV_CIO_CRE_EBR_INDEX); + wr_cio_state(dev, head, regp, NV_CIO_CRE_CSB); + wr_cio_state(dev, head, regp, NV_CIO_CRE_4B); + wr_cio_state(dev, head, regp, NV_CIO_CRE_TVOUT_LATENCY); + } + /* NV11 and NV20 stop at 0x52. */ + if (nv_gf4_disp_arch(dev)) { + if (dev_priv->card_type == NV_10) { + /* Not waiting for vertical retrace before modifying + CRE_53/CRE_54 causes lockups. */ + nouveau_wait_until(dev, 650000000, NV_PRMCIO_INP0__COLOR, 0x8, 0x8); + nouveau_wait_until(dev, 650000000, NV_PRMCIO_INP0__COLOR, 0x8, 0x0); + } + + wr_cio_state(dev, head, regp, NV_CIO_CRE_53); + wr_cio_state(dev, head, regp, NV_CIO_CRE_54); + + for (i = 0; i < 0x10; i++) + NVWriteVgaCrtc5758(dev, head, i, regp->CR58[i]); + wr_cio_state(dev, head, regp, NV_CIO_CRE_59); + wr_cio_state(dev, head, regp, NV_CIO_CRE_5B); + + wr_cio_state(dev, head, regp, NV_CIO_CRE_85); + wr_cio_state(dev, head, regp, NV_CIO_CRE_86); + } + + NVWriteCRTC(dev, head, NV_PCRTC_START, regp->fb_start); + + /* Setting 1 on this value gives you interrupts for every vblank period. */ + NVWriteCRTC(dev, head, NV_PCRTC_INTR_EN_0, 0); + NVWriteCRTC(dev, head, NV_PCRTC_INTR_0, NV_PCRTC_INTR_0_VBLANK); +} + +static void +nv_save_state_palette(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + int head_offset = head * NV_PRMDIO_SIZE, i; + + nv_wr08(dev, NV_PRMDIO_PIXEL_MASK + head_offset, + NV_PRMDIO_PIXEL_MASK_MASK); + nv_wr08(dev, NV_PRMDIO_READ_MODE_ADDRESS + head_offset, 0x0); + + for (i = 0; i < 768; i++) { + state->crtc_reg[head].DAC[i] = nv_rd08(dev, + NV_PRMDIO_PALETTE_DATA + head_offset); + } + + NVSetEnablePalette(dev, head, false); +} + +void +nouveau_hw_load_state_palette(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + int head_offset = head * NV_PRMDIO_SIZE, i; + + nv_wr08(dev, NV_PRMDIO_PIXEL_MASK + head_offset, + NV_PRMDIO_PIXEL_MASK_MASK); + nv_wr08(dev, NV_PRMDIO_WRITE_MODE_ADDRESS + head_offset, 0x0); + + for (i = 0; i < 768; i++) { + nv_wr08(dev, NV_PRMDIO_PALETTE_DATA + head_offset, + state->crtc_reg[head].DAC[i]); + } + + NVSetEnablePalette(dev, head, false); +} + +void nouveau_hw_save_state(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->chipset == 0x11) + /* NB: no attempt is made to restore the bad pll later on */ + nouveau_hw_fix_bad_vpll(dev, head); + nv_save_state_ramdac(dev, head, state); + nv_save_state_vga(dev, head, state); + nv_save_state_palette(dev, head, state); + nv_save_state_ext(dev, head, state); +} + +void nouveau_hw_load_state(struct drm_device *dev, int head, + struct nv04_mode_state *state) +{ + NVVgaProtect(dev, head, true); + nv_load_state_ramdac(dev, head, state); + nv_load_state_ext(dev, head, state); + nouveau_hw_load_state_palette(dev, head, state); + nv_load_state_vga(dev, head, state); + NVVgaProtect(dev, head, false); +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/Kconfig +++ linux-2.6.32/drivers/gpu/drm/nouveau/Kconfig @@ -0,0 +1,44 @@ +config DRM_NOUVEAU + tristate "Nouveau (nVidia) cards" + depends on DRM + select FW_LOADER + select DRM_KMS_HELPER + select DRM_TTM + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + select FB + select FRAMEBUFFER_CONSOLE if !EMBEDDED + select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT + help + Choose this option for open-source nVidia support. + +config DRM_NOUVEAU_BACKLIGHT + bool "Support for backlight control" + depends on DRM_NOUVEAU + default y + help + Say Y here if you want to control the backlight of your display + (e.g. a laptop panel). + +config DRM_NOUVEAU_DEBUG + bool "Build in Nouveau's debugfs support" + depends on DRM_NOUVEAU && DEBUG_FS + default y + help + Say Y here if you want Nouveau to output debugging information + via debugfs. + +menu "I2C encoder or helper chips" + depends on DRM && DRM_KMS_HELPER && I2C + +config DRM_I2C_CH7006 + tristate "Chrontel ch7006 TV encoder" + default m if DRM_NOUVEAU + help + Support for Chrontel ch7006 and similar TV encoders, found + on some nVidia video cards. + + This driver is currently only useful if you're also using + the nouveau driver. +endmenu --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_dp.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_dp.c @@ -0,0 +1,575 @@ +/* + * Copyright 2009 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Ben Skeggs + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_i2c.h" +#include "nouveau_encoder.h" + +static int +auxch_rd(struct drm_encoder *encoder, int address, uint8_t *buf, int size) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct nouveau_i2c_chan *auxch; + int ret; + + auxch = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index); + if (!auxch) + return -ENODEV; + + ret = nouveau_dp_auxch(auxch, 9, address, buf, size); + if (ret) + return ret; + + return 0; +} + +static int +auxch_wr(struct drm_encoder *encoder, int address, uint8_t *buf, int size) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct nouveau_i2c_chan *auxch; + int ret; + + auxch = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index); + if (!auxch) + return -ENODEV; + + ret = nouveau_dp_auxch(auxch, 8, address, buf, size); + return ret; +} + +static int +nouveau_dp_lane_count_set(struct drm_encoder *encoder, uint8_t cmd) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + uint32_t tmp; + int or = nv_encoder->or, link = !(nv_encoder->dcb->sorconf.link & 1); + + tmp = nv_rd32(dev, NV50_SOR_DP_CTRL(or, link)); + tmp &= ~(NV50_SOR_DP_CTRL_ENHANCED_FRAME_ENABLED | + NV50_SOR_DP_CTRL_LANE_MASK); + tmp |= ((1 << (cmd & DP_LANE_COUNT_MASK)) - 1) << 16; + if (cmd & DP_LANE_COUNT_ENHANCED_FRAME_EN) + tmp |= NV50_SOR_DP_CTRL_ENHANCED_FRAME_ENABLED; + nv_wr32(dev, NV50_SOR_DP_CTRL(or, link), tmp); + + return auxch_wr(encoder, DP_LANE_COUNT_SET, &cmd, 1); +} + +static int +nouveau_dp_link_bw_set(struct drm_encoder *encoder, uint8_t cmd) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + uint32_t tmp; + int reg = 0x614300 + (nv_encoder->or * 0x800); + + tmp = nv_rd32(dev, reg); + tmp &= 0xfff3ffff; + if (cmd == DP_LINK_BW_2_7) + tmp |= 0x00040000; + nv_wr32(dev, reg, tmp); + + return auxch_wr(encoder, DP_LINK_BW_SET, &cmd, 1); +} + +static int +nouveau_dp_link_train_set(struct drm_encoder *encoder, int pattern) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + uint32_t tmp; + uint8_t cmd; + int or = nv_encoder->or, link = !(nv_encoder->dcb->sorconf.link & 1); + int ret; + + tmp = nv_rd32(dev, NV50_SOR_DP_CTRL(or, link)); + tmp &= ~NV50_SOR_DP_CTRL_TRAINING_PATTERN; + tmp |= (pattern << 24); + nv_wr32(dev, NV50_SOR_DP_CTRL(or, link), tmp); + + ret = auxch_rd(encoder, DP_TRAINING_PATTERN_SET, &cmd, 1); + if (ret) + return ret; + cmd &= ~DP_TRAINING_PATTERN_MASK; + cmd |= (pattern & DP_TRAINING_PATTERN_MASK); + return auxch_wr(encoder, DP_TRAINING_PATTERN_SET, &cmd, 1); +} + +static int +nouveau_dp_max_voltage_swing(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct bit_displayport_encoder_table_entry *dpse; + struct bit_displayport_encoder_table *dpe; + int i, dpe_headerlen, max_vs = 0; + + dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen); + if (!dpe) + return false; + dpse = (void *)((char *)dpe + dpe_headerlen); + + for (i = 0; i < dpe_headerlen; i++, dpse++) { + if (dpse->vs_level > max_vs) + max_vs = dpse->vs_level; + } + + return max_vs; +} + +static int +nouveau_dp_max_pre_emphasis(struct drm_encoder *encoder, int vs) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct bit_displayport_encoder_table_entry *dpse; + struct bit_displayport_encoder_table *dpe; + int i, dpe_headerlen, max_pre = 0; + + dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen); + if (!dpe) + return false; + dpse = (void *)((char *)dpe + dpe_headerlen); + + for (i = 0; i < dpe_headerlen; i++, dpse++) { + if (dpse->vs_level != vs) + continue; + + if (dpse->pre_level > max_pre) + max_pre = dpse->pre_level; + } + + return max_pre; +} + +static bool +nouveau_dp_link_train_adjust(struct drm_encoder *encoder, uint8_t *config) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct bit_displayport_encoder_table_entry *dpse; + struct bit_displayport_encoder_table *dpe; + int ret, i, dpe_headerlen, vs = 0, pre = 0; + uint8_t request[2]; + + dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen); + if (!dpe) + return false; + dpse = (void *)((char *)dpe + dpe_headerlen); + + ret = auxch_rd(encoder, DP_ADJUST_REQUEST_LANE0_1, request, 2); + if (ret) + return false; + + NV_DEBUG_KMS(dev, "\t\tadjust 0x%02x 0x%02x\n", request[0], request[1]); + + /* Keep all lanes at the same level.. */ + for (i = 0; i < nv_encoder->dp.link_nr; i++) { + int lane_req = (request[i >> 1] >> ((i & 1) << 2)) & 0xf; + int lane_vs = lane_req & 3; + int lane_pre = (lane_req >> 2) & 3; + + if (lane_vs > vs) + vs = lane_vs; + if (lane_pre > pre) + pre = lane_pre; + } + + if (vs >= nouveau_dp_max_voltage_swing(encoder)) { + vs = nouveau_dp_max_voltage_swing(encoder); + vs |= 4; + } + + if (pre >= nouveau_dp_max_pre_emphasis(encoder, vs & 3)) { + pre = nouveau_dp_max_pre_emphasis(encoder, vs & 3); + pre |= 4; + } + + /* Update the configuration for all lanes.. */ + for (i = 0; i < nv_encoder->dp.link_nr; i++) + config[i] = (pre << 3) | vs; + + return true; +} + +static bool +nouveau_dp_link_train_commit(struct drm_encoder *encoder, uint8_t *config) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct bit_displayport_encoder_table_entry *dpse; + struct bit_displayport_encoder_table *dpe; + int or = nv_encoder->or, link = !(nv_encoder->dcb->sorconf.link & 1); + int dpe_headerlen, ret, i; + + NV_DEBUG_KMS(dev, "\t\tconfig 0x%02x 0x%02x 0x%02x 0x%02x\n", + config[0], config[1], config[2], config[3]); + + dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen); + if (!dpe) + return false; + dpse = (void *)((char *)dpe + dpe_headerlen); + + for (i = 0; i < dpe->record_nr; i++, dpse++) { + if (dpse->vs_level == (config[0] & 3) && + dpse->pre_level == ((config[0] >> 3) & 3)) + break; + } + BUG_ON(i == dpe->record_nr); + + for (i = 0; i < nv_encoder->dp.link_nr; i++) { + const int shift[4] = { 16, 8, 0, 24 }; + uint32_t mask = 0xff << shift[i]; + uint32_t reg0, reg1, reg2; + + reg0 = nv_rd32(dev, NV50_SOR_DP_UNK118(or, link)) & ~mask; + reg0 |= (dpse->reg0 << shift[i]); + reg1 = nv_rd32(dev, NV50_SOR_DP_UNK120(or, link)) & ~mask; + reg1 |= (dpse->reg1 << shift[i]); + reg2 = nv_rd32(dev, NV50_SOR_DP_UNK130(or, link)) & 0xffff00ff; + reg2 |= (dpse->reg2 << 8); + nv_wr32(dev, NV50_SOR_DP_UNK118(or, link), reg0); + nv_wr32(dev, NV50_SOR_DP_UNK120(or, link), reg1); + nv_wr32(dev, NV50_SOR_DP_UNK130(or, link), reg2); + } + + ret = auxch_wr(encoder, DP_TRAINING_LANE0_SET, config, 4); + if (ret) + return false; + + return true; +} + +bool +nouveau_dp_link_train(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + uint8_t config[4]; + uint8_t status[3]; + bool cr_done, cr_max_vs, eq_done; + int ret = 0, i, tries, voltage; + + NV_DEBUG_KMS(dev, "link training!!\n"); +train: + cr_done = eq_done = false; + + /* set link configuration */ + NV_DEBUG_KMS(dev, "\tbegin train: bw %d, lanes %d\n", + nv_encoder->dp.link_bw, nv_encoder->dp.link_nr); + + ret = nouveau_dp_link_bw_set(encoder, nv_encoder->dp.link_bw); + if (ret) + return false; + + config[0] = nv_encoder->dp.link_nr; + if (nv_encoder->dp.dpcd_version >= 0x11) + config[0] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + + ret = nouveau_dp_lane_count_set(encoder, config[0]); + if (ret) + return false; + + /* clock recovery */ + NV_DEBUG_KMS(dev, "\tbegin cr\n"); + ret = nouveau_dp_link_train_set(encoder, DP_TRAINING_PATTERN_1); + if (ret) + goto stop; + + tries = 0; + voltage = -1; + memset(config, 0x00, sizeof(config)); + for (;;) { + if (!nouveau_dp_link_train_commit(encoder, config)) + break; + + udelay(100); + + ret = auxch_rd(encoder, DP_LANE0_1_STATUS, status, 2); + if (ret) + break; + NV_DEBUG_KMS(dev, "\t\tstatus: 0x%02x 0x%02x\n", + status[0], status[1]); + + cr_done = true; + cr_max_vs = false; + for (i = 0; i < nv_encoder->dp.link_nr; i++) { + int lane = (status[i >> 1] >> ((i & 1) * 4)) & 0xf; + + if (!(lane & DP_LANE_CR_DONE)) { + cr_done = false; + if (config[i] & DP_TRAIN_MAX_PRE_EMPHASIS_REACHED) + cr_max_vs = true; + break; + } + } + + if ((config[0] & DP_TRAIN_VOLTAGE_SWING_MASK) != voltage) { + voltage = config[0] & DP_TRAIN_VOLTAGE_SWING_MASK; + tries = 0; + } + + if (cr_done || cr_max_vs || (++tries == 5)) + break; + + if (!nouveau_dp_link_train_adjust(encoder, config)) + break; + } + + if (!cr_done) + goto stop; + + /* channel equalisation */ + NV_DEBUG_KMS(dev, "\tbegin eq\n"); + ret = nouveau_dp_link_train_set(encoder, DP_TRAINING_PATTERN_2); + if (ret) + goto stop; + + for (tries = 0; tries <= 5; tries++) { + udelay(400); + + ret = auxch_rd(encoder, DP_LANE0_1_STATUS, status, 3); + if (ret) + break; + NV_DEBUG_KMS(dev, "\t\tstatus: 0x%02x 0x%02x\n", + status[0], status[1]); + + eq_done = true; + if (!(status[2] & DP_INTERLANE_ALIGN_DONE)) + eq_done = false; + + for (i = 0; eq_done && i < nv_encoder->dp.link_nr; i++) { + int lane = (status[i >> 1] >> ((i & 1) * 4)) & 0xf; + + if (!(lane & DP_LANE_CR_DONE)) { + cr_done = false; + break; + } + + if (!(lane & DP_LANE_CHANNEL_EQ_DONE) || + !(lane & DP_LANE_SYMBOL_LOCKED)) { + eq_done = false; + break; + } + } + + if (eq_done || !cr_done) + break; + + if (!nouveau_dp_link_train_adjust(encoder, config) || + !nouveau_dp_link_train_commit(encoder, config)) + break; + } + +stop: + /* end link training */ + ret = nouveau_dp_link_train_set(encoder, DP_TRAINING_PATTERN_DISABLE); + if (ret) + return false; + + /* retry at a lower setting, if possible */ + if (!ret && !(eq_done && cr_done)) { + NV_DEBUG_KMS(dev, "\twe failed\n"); + if (nv_encoder->dp.link_bw != DP_LINK_BW_1_62) { + NV_DEBUG_KMS(dev, "retry link training at low rate\n"); + nv_encoder->dp.link_bw = DP_LINK_BW_1_62; + goto train; + } + } + + return eq_done; +} + +bool +nouveau_dp_detect(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + uint8_t dpcd[4]; + int ret; + + ret = auxch_rd(encoder, 0x0000, dpcd, 4); + if (ret) + return false; + + NV_DEBUG_KMS(dev, "encoder: link_bw %d, link_nr %d\n" + "display: link_bw %d, link_nr %d version 0x%02x\n", + nv_encoder->dcb->dpconf.link_bw, + nv_encoder->dcb->dpconf.link_nr, + dpcd[1], dpcd[2] & 0x0f, dpcd[0]); + + nv_encoder->dp.dpcd_version = dpcd[0]; + + nv_encoder->dp.link_bw = dpcd[1]; + if (nv_encoder->dp.link_bw != DP_LINK_BW_1_62 && + !nv_encoder->dcb->dpconf.link_bw) + nv_encoder->dp.link_bw = DP_LINK_BW_1_62; + + nv_encoder->dp.link_nr = dpcd[2] & 0xf; + if (nv_encoder->dp.link_nr > nv_encoder->dcb->dpconf.link_nr) + nv_encoder->dp.link_nr = nv_encoder->dcb->dpconf.link_nr; + + return true; +} + +int +nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr, + uint8_t *data, int data_nr) +{ + struct drm_device *dev = auxch->dev; + uint32_t tmp, ctrl, stat = 0, data32[4] = {}; + int ret = 0, i, index = auxch->rd; + + NV_DEBUG_KMS(dev, "ch %d cmd %d addr 0x%x len %d\n", index, cmd, addr, data_nr); + + tmp = nv_rd32(dev, NV50_AUXCH_CTRL(auxch->rd)); + nv_wr32(dev, NV50_AUXCH_CTRL(auxch->rd), tmp | 0x00100000); + tmp = nv_rd32(dev, NV50_AUXCH_CTRL(auxch->rd)); + if (!(tmp & 0x01000000)) { + NV_ERROR(dev, "expected bit 24 == 1, got 0x%08x\n", tmp); + ret = -EIO; + goto out; + } + + for (i = 0; i < 3; i++) { + tmp = nv_rd32(dev, NV50_AUXCH_STAT(auxch->rd)); + if (tmp & NV50_AUXCH_STAT_STATE_READY) + break; + udelay(100); + } + + if (i == 3) { + ret = -EBUSY; + goto out; + } + + if (!(cmd & 1)) { + memcpy(data32, data, data_nr); + for (i = 0; i < 4; i++) { + NV_DEBUG_KMS(dev, "wr %d: 0x%08x\n", i, data32[i]); + nv_wr32(dev, NV50_AUXCH_DATA_OUT(index, i), data32[i]); + } + } + + nv_wr32(dev, NV50_AUXCH_ADDR(index), addr); + ctrl = nv_rd32(dev, NV50_AUXCH_CTRL(index)); + ctrl &= ~(NV50_AUXCH_CTRL_CMD | NV50_AUXCH_CTRL_LEN); + ctrl |= (cmd << NV50_AUXCH_CTRL_CMD_SHIFT); + ctrl |= ((data_nr - 1) << NV50_AUXCH_CTRL_LEN_SHIFT); + + for (;;) { + nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x80000000); + nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl); + nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x00010000); + if (!nv_wait(NV50_AUXCH_CTRL(index), 0x00010000, 0x00000000)) { + NV_ERROR(dev, "expected bit 16 == 0, got 0x%08x\n", + nv_rd32(dev, NV50_AUXCH_CTRL(index))); + ret = -EBUSY; + goto out; + } + + udelay(400); + + stat = nv_rd32(dev, NV50_AUXCH_STAT(index)); + if ((stat & NV50_AUXCH_STAT_REPLY_AUX) != + NV50_AUXCH_STAT_REPLY_AUX_DEFER) + break; + } + + if (cmd & 1) { + if ((stat & NV50_AUXCH_STAT_COUNT) != data_nr) { + ret = -EREMOTEIO; + goto out; + } + + for (i = 0; i < 4; i++) { + data32[i] = nv_rd32(dev, NV50_AUXCH_DATA_IN(index, i)); + NV_DEBUG_KMS(dev, "rd %d: 0x%08x\n", i, data32[i]); + } + memcpy(data, data32, data_nr); + } + +out: + tmp = nv_rd32(dev, NV50_AUXCH_CTRL(auxch->rd)); + nv_wr32(dev, NV50_AUXCH_CTRL(auxch->rd), tmp & ~0x00100000); + tmp = nv_rd32(dev, NV50_AUXCH_CTRL(auxch->rd)); + if (tmp & 0x01000000) { + NV_ERROR(dev, "expected bit 24 == 0, got 0x%08x\n", tmp); + ret = -EIO; + } + + udelay(400); + + return ret ? ret : (stat & NV50_AUXCH_STAT_REPLY); +} + +int +nouveau_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, + uint8_t write_byte, uint8_t *read_byte) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + struct nouveau_i2c_chan *auxch = (struct nouveau_i2c_chan *)adapter; + struct drm_device *dev = auxch->dev; + int ret = 0, cmd, addr = algo_data->address; + uint8_t *buf; + + if (mode == MODE_I2C_READ) { + cmd = AUX_I2C_READ; + buf = read_byte; + } else { + cmd = (mode & MODE_I2C_READ) ? AUX_I2C_READ : AUX_I2C_WRITE; + buf = &write_byte; + } + + if (!(mode & MODE_I2C_STOP)) + cmd |= AUX_I2C_MOT; + + if (mode & MODE_I2C_START) + return 1; + + for (;;) { + ret = nouveau_dp_auxch(auxch, cmd, addr, buf, 1); + if (ret < 0) + return ret; + + switch (ret & NV50_AUXCH_STAT_REPLY_I2C) { + case NV50_AUXCH_STAT_REPLY_I2C_ACK: + return 1; + case NV50_AUXCH_STAT_REPLY_I2C_NACK: + return -EREMOTEIO; + case NV50_AUXCH_STAT_REPLY_I2C_DEFER: + udelay(100); + break; + default: + NV_ERROR(dev, "invalid auxch status: 0x%08x\n", ret); + return -EREMOTEIO; + } + } +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_reg.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_reg.h @@ -0,0 +1,837 @@ + + +#define NV03_BOOT_0 0x00100000 +# define NV03_BOOT_0_RAM_AMOUNT 0x00000003 +# define NV03_BOOT_0_RAM_AMOUNT_8MB 0x00000000 +# define NV03_BOOT_0_RAM_AMOUNT_2MB 0x00000001 +# define NV03_BOOT_0_RAM_AMOUNT_4MB 0x00000002 +# define NV03_BOOT_0_RAM_AMOUNT_8MB_SDRAM 0x00000003 +# define NV04_BOOT_0_RAM_AMOUNT_32MB 0x00000000 +# define NV04_BOOT_0_RAM_AMOUNT_4MB 0x00000001 +# define NV04_BOOT_0_RAM_AMOUNT_8MB 0x00000002 +# define NV04_BOOT_0_RAM_AMOUNT_16MB 0x00000003 + +#define NV04_FIFO_DATA 0x0010020c +# define NV10_FIFO_DATA_RAM_AMOUNT_MB_MASK 0xfff00000 +# define NV10_FIFO_DATA_RAM_AMOUNT_MB_SHIFT 20 + +#define NV_RAMIN 0x00700000 + +#define NV_RAMHT_HANDLE_OFFSET 0 +#define NV_RAMHT_CONTEXT_OFFSET 4 +# define NV_RAMHT_CONTEXT_VALID (1<<31) +# define NV_RAMHT_CONTEXT_CHANNEL_SHIFT 24 +# define NV_RAMHT_CONTEXT_ENGINE_SHIFT 16 +# define NV_RAMHT_CONTEXT_ENGINE_SOFTWARE 0 +# define NV_RAMHT_CONTEXT_ENGINE_GRAPHICS 1 +# define NV_RAMHT_CONTEXT_INSTANCE_SHIFT 0 +# define NV40_RAMHT_CONTEXT_CHANNEL_SHIFT 23 +# define NV40_RAMHT_CONTEXT_ENGINE_SHIFT 20 +# define NV40_RAMHT_CONTEXT_INSTANCE_SHIFT 0 + +/* DMA object defines */ +#define NV_DMA_ACCESS_RW 0 +#define NV_DMA_ACCESS_RO 1 +#define NV_DMA_ACCESS_WO 2 +#define NV_DMA_TARGET_VIDMEM 0 +#define NV_DMA_TARGET_PCI 2 +#define NV_DMA_TARGET_AGP 3 +/* The following is not a real value used by the card, it's changed by + * nouveau_object_dma_create */ +#define NV_DMA_TARGET_PCI_NONLINEAR 8 + +/* Some object classes we care about in the drm */ +#define NV_CLASS_DMA_FROM_MEMORY 0x00000002 +#define NV_CLASS_DMA_TO_MEMORY 0x00000003 +#define NV_CLASS_NULL 0x00000030 +#define NV_CLASS_DMA_IN_MEMORY 0x0000003D + +#define NV03_USER(i) (0x00800000+(i*NV03_USER_SIZE)) +#define NV03_USER__SIZE 16 +#define NV10_USER__SIZE 32 +#define NV03_USER_SIZE 0x00010000 +#define NV03_USER_DMA_PUT(i) (0x00800040+(i*NV03_USER_SIZE)) +#define NV03_USER_DMA_PUT__SIZE 16 +#define NV10_USER_DMA_PUT__SIZE 32 +#define NV03_USER_DMA_GET(i) (0x00800044+(i*NV03_USER_SIZE)) +#define NV03_USER_DMA_GET__SIZE 16 +#define NV10_USER_DMA_GET__SIZE 32 +#define NV03_USER_REF_CNT(i) (0x00800048+(i*NV03_USER_SIZE)) +#define NV03_USER_REF_CNT__SIZE 16 +#define NV10_USER_REF_CNT__SIZE 32 + +#define NV40_USER(i) (0x00c00000+(i*NV40_USER_SIZE)) +#define NV40_USER_SIZE 0x00001000 +#define NV40_USER_DMA_PUT(i) (0x00c00040+(i*NV40_USER_SIZE)) +#define NV40_USER_DMA_PUT__SIZE 32 +#define NV40_USER_DMA_GET(i) (0x00c00044+(i*NV40_USER_SIZE)) +#define NV40_USER_DMA_GET__SIZE 32 +#define NV40_USER_REF_CNT(i) (0x00c00048+(i*NV40_USER_SIZE)) +#define NV40_USER_REF_CNT__SIZE 32 + +#define NV50_USER(i) (0x00c00000+(i*NV50_USER_SIZE)) +#define NV50_USER_SIZE 0x00002000 +#define NV50_USER_DMA_PUT(i) (0x00c00040+(i*NV50_USER_SIZE)) +#define NV50_USER_DMA_PUT__SIZE 128 +#define NV50_USER_DMA_GET(i) (0x00c00044+(i*NV50_USER_SIZE)) +#define NV50_USER_DMA_GET__SIZE 128 +#define NV50_USER_REF_CNT(i) (0x00c00048+(i*NV50_USER_SIZE)) +#define NV50_USER_REF_CNT__SIZE 128 + +#define NV03_FIFO_SIZE 0x8000UL + +#define NV03_PMC_BOOT_0 0x00000000 +#define NV03_PMC_BOOT_1 0x00000004 +#define NV03_PMC_INTR_0 0x00000100 +# define NV_PMC_INTR_0_PFIFO_PENDING (1<<8) +# define NV_PMC_INTR_0_PGRAPH_PENDING (1<<12) +# define NV_PMC_INTR_0_NV50_I2C_PENDING (1<<21) +# define NV_PMC_INTR_0_CRTC0_PENDING (1<<24) +# define NV_PMC_INTR_0_CRTC1_PENDING (1<<25) +# define NV_PMC_INTR_0_NV50_DISPLAY_PENDING (1<<26) +# define NV_PMC_INTR_0_CRTCn_PENDING (3<<24) +#define NV03_PMC_INTR_EN_0 0x00000140 +# define NV_PMC_INTR_EN_0_MASTER_ENABLE (1<<0) +#define NV03_PMC_ENABLE 0x00000200 +# define NV_PMC_ENABLE_PFIFO (1<<8) +# define NV_PMC_ENABLE_PGRAPH (1<<12) +/* Disabling the below bit breaks newer (G7X only?) mobile chipsets, + * the card will hang early on in the X init process. + */ +# define NV_PMC_ENABLE_UNK13 (1<<13) +#define NV40_PMC_GRAPH_UNITS 0x00001540 +#define NV40_PMC_BACKLIGHT 0x000015f0 +# define NV40_PMC_BACKLIGHT_MASK 0x001f0000 +#define NV40_PMC_1700 0x00001700 +#define NV40_PMC_1704 0x00001704 +#define NV40_PMC_1708 0x00001708 +#define NV40_PMC_170C 0x0000170C + +/* probably PMC ? */ +#define NV50_PUNK_BAR0_PRAMIN 0x00001700 +#define NV50_PUNK_BAR_CFG_BASE 0x00001704 +#define NV50_PUNK_BAR_CFG_BASE_VALID (1<<30) +#define NV50_PUNK_BAR1_CTXDMA 0x00001708 +#define NV50_PUNK_BAR1_CTXDMA_VALID (1<<31) +#define NV50_PUNK_BAR3_CTXDMA 0x0000170C +#define NV50_PUNK_BAR3_CTXDMA_VALID (1<<31) +#define NV50_PUNK_UNK1710 0x00001710 + +#define NV04_PBUS_PCI_NV_1 0x00001804 +#define NV04_PBUS_PCI_NV_19 0x0000184C +#define NV04_PBUS_PCI_NV_20 0x00001850 +# define NV04_PBUS_PCI_NV_20_ROM_SHADOW_DISABLED (0 << 0) +# define NV04_PBUS_PCI_NV_20_ROM_SHADOW_ENABLED (1 << 0) + +#define NV04_PTIMER_INTR_0 0x00009100 +#define NV04_PTIMER_INTR_EN_0 0x00009140 +#define NV04_PTIMER_NUMERATOR 0x00009200 +#define NV04_PTIMER_DENOMINATOR 0x00009210 +#define NV04_PTIMER_TIME_0 0x00009400 +#define NV04_PTIMER_TIME_1 0x00009410 +#define NV04_PTIMER_ALARM_0 0x00009420 + +#define NV04_PFB_CFG0 0x00100200 +#define NV04_PFB_CFG1 0x00100204 +#define NV40_PFB_020C 0x0010020C +#define NV10_PFB_TILE(i) (0x00100240 + (i*16)) +#define NV10_PFB_TILE__SIZE 8 +#define NV10_PFB_TLIMIT(i) (0x00100244 + (i*16)) +#define NV10_PFB_TSIZE(i) (0x00100248 + (i*16)) +#define NV10_PFB_TSTATUS(i) (0x0010024C + (i*16)) +#define NV10_PFB_CLOSE_PAGE2 0x0010033C +#define NV40_PFB_TILE(i) (0x00100600 + (i*16)) +#define NV40_PFB_TILE__SIZE_0 12 +#define NV40_PFB_TILE__SIZE_1 15 +#define NV40_PFB_TLIMIT(i) (0x00100604 + (i*16)) +#define NV40_PFB_TSIZE(i) (0x00100608 + (i*16)) +#define NV40_PFB_TSTATUS(i) (0x0010060C + (i*16)) +#define NV40_PFB_UNK_800 0x00100800 + +#define NV04_PGRAPH_DEBUG_0 0x00400080 +#define NV04_PGRAPH_DEBUG_1 0x00400084 +#define NV04_PGRAPH_DEBUG_2 0x00400088 +#define NV04_PGRAPH_DEBUG_3 0x0040008c +#define NV10_PGRAPH_DEBUG_4 0x00400090 +#define NV03_PGRAPH_INTR 0x00400100 +#define NV03_PGRAPH_NSTATUS 0x00400104 +# define NV04_PGRAPH_NSTATUS_STATE_IN_USE (1<<11) +# define NV04_PGRAPH_NSTATUS_INVALID_STATE (1<<12) +# define NV04_PGRAPH_NSTATUS_BAD_ARGUMENT (1<<13) +# define NV04_PGRAPH_NSTATUS_PROTECTION_FAULT (1<<14) +# define NV10_PGRAPH_NSTATUS_STATE_IN_USE (1<<23) +# define NV10_PGRAPH_NSTATUS_INVALID_STATE (1<<24) +# define NV10_PGRAPH_NSTATUS_BAD_ARGUMENT (1<<25) +# define NV10_PGRAPH_NSTATUS_PROTECTION_FAULT (1<<26) +#define NV03_PGRAPH_NSOURCE 0x00400108 +# define NV03_PGRAPH_NSOURCE_NOTIFICATION (1<<0) +# define NV03_PGRAPH_NSOURCE_DATA_ERROR (1<<1) +# define NV03_PGRAPH_NSOURCE_PROTECTION_ERROR (1<<2) +# define NV03_PGRAPH_NSOURCE_RANGE_EXCEPTION (1<<3) +# define NV03_PGRAPH_NSOURCE_LIMIT_COLOR (1<<4) +# define NV03_PGRAPH_NSOURCE_LIMIT_ZETA (1<<5) +# define NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD (1<<6) +# define NV03_PGRAPH_NSOURCE_DMA_R_PROTECTION (1<<7) +# define NV03_PGRAPH_NSOURCE_DMA_W_PROTECTION (1<<8) +# define NV03_PGRAPH_NSOURCE_FORMAT_EXCEPTION (1<<9) +# define NV03_PGRAPH_NSOURCE_PATCH_EXCEPTION (1<<10) +# define NV03_PGRAPH_NSOURCE_STATE_INVALID (1<<11) +# define NV03_PGRAPH_NSOURCE_DOUBLE_NOTIFY (1<<12) +# define NV03_PGRAPH_NSOURCE_NOTIFY_IN_USE (1<<13) +# define NV03_PGRAPH_NSOURCE_METHOD_CNT (1<<14) +# define NV03_PGRAPH_NSOURCE_BFR_NOTIFICATION (1<<15) +# define NV03_PGRAPH_NSOURCE_DMA_VTX_PROTECTION (1<<16) +# define NV03_PGRAPH_NSOURCE_DMA_WIDTH_A (1<<17) +# define NV03_PGRAPH_NSOURCE_DMA_WIDTH_B (1<<18) +#define NV03_PGRAPH_INTR_EN 0x00400140 +#define NV40_PGRAPH_INTR_EN 0x0040013C +# define NV_PGRAPH_INTR_NOTIFY (1<<0) +# define NV_PGRAPH_INTR_MISSING_HW (1<<4) +# define NV_PGRAPH_INTR_CONTEXT_SWITCH (1<<12) +# define NV_PGRAPH_INTR_BUFFER_NOTIFY (1<<16) +# define NV_PGRAPH_INTR_ERROR (1<<20) +#define NV10_PGRAPH_CTX_CONTROL 0x00400144 +#define NV10_PGRAPH_CTX_USER 0x00400148 +#define NV10_PGRAPH_CTX_SWITCH1 0x0040014C +#define NV10_PGRAPH_CTX_SWITCH2 0x00400150 +#define NV10_PGRAPH_CTX_SWITCH3 0x00400154 +#define NV10_PGRAPH_CTX_SWITCH4 0x00400158 +#define NV10_PGRAPH_CTX_SWITCH5 0x0040015C +#define NV04_PGRAPH_CTX_SWITCH1 0x00400160 +#define NV10_PGRAPH_CTX_CACHE1 0x00400160 +#define NV04_PGRAPH_CTX_SWITCH2 0x00400164 +#define NV04_PGRAPH_CTX_SWITCH3 0x00400168 +#define NV04_PGRAPH_CTX_SWITCH4 0x0040016C +#define NV04_PGRAPH_CTX_CONTROL 0x00400170 +#define NV04_PGRAPH_CTX_USER 0x00400174 +#define NV04_PGRAPH_CTX_CACHE1 0x00400180 +#define NV10_PGRAPH_CTX_CACHE2 0x00400180 +#define NV03_PGRAPH_CTX_CONTROL 0x00400190 +#define NV03_PGRAPH_CTX_USER 0x00400194 +#define NV04_PGRAPH_CTX_CACHE2 0x004001A0 +#define NV10_PGRAPH_CTX_CACHE3 0x004001A0 +#define NV04_PGRAPH_CTX_CACHE3 0x004001C0 +#define NV10_PGRAPH_CTX_CACHE4 0x004001C0 +#define NV04_PGRAPH_CTX_CACHE4 0x004001E0 +#define NV10_PGRAPH_CTX_CACHE5 0x004001E0 +#define NV40_PGRAPH_CTXCTL_0304 0x00400304 +#define NV40_PGRAPH_CTXCTL_0304_XFER_CTX 0x00000001 +#define NV40_PGRAPH_CTXCTL_UCODE_STAT 0x00400308 +#define NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_MASK 0xff000000 +#define NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_SHIFT 24 +#define NV40_PGRAPH_CTXCTL_UCODE_STAT_OP_MASK 0x00ffffff +#define NV40_PGRAPH_CTXCTL_0310 0x00400310 +#define NV40_PGRAPH_CTXCTL_0310_XFER_SAVE 0x00000020 +#define NV40_PGRAPH_CTXCTL_0310_XFER_LOAD 0x00000040 +#define NV40_PGRAPH_CTXCTL_030C 0x0040030c +#define NV40_PGRAPH_CTXCTL_UCODE_INDEX 0x00400324 +#define NV40_PGRAPH_CTXCTL_UCODE_DATA 0x00400328 +#define NV40_PGRAPH_CTXCTL_CUR 0x0040032c +#define NV40_PGRAPH_CTXCTL_CUR_LOADED 0x01000000 +#define NV40_PGRAPH_CTXCTL_CUR_INSTANCE 0x000FFFFF +#define NV40_PGRAPH_CTXCTL_NEXT 0x00400330 +#define NV40_PGRAPH_CTXCTL_NEXT_INSTANCE 0x000fffff +#define NV50_PGRAPH_CTXCTL_CUR 0x0040032c +#define NV50_PGRAPH_CTXCTL_CUR_LOADED 0x80000000 +#define NV50_PGRAPH_CTXCTL_CUR_INSTANCE 0x00ffffff +#define NV50_PGRAPH_CTXCTL_NEXT 0x00400330 +#define NV50_PGRAPH_CTXCTL_NEXT_INSTANCE 0x00ffffff +#define NV03_PGRAPH_ABS_X_RAM 0x00400400 +#define NV03_PGRAPH_ABS_Y_RAM 0x00400480 +#define NV03_PGRAPH_X_MISC 0x00400500 +#define NV03_PGRAPH_Y_MISC 0x00400504 +#define NV04_PGRAPH_VALID1 0x00400508 +#define NV04_PGRAPH_SOURCE_COLOR 0x0040050C +#define NV04_PGRAPH_MISC24_0 0x00400510 +#define NV03_PGRAPH_XY_LOGIC_MISC0 0x00400514 +#define NV03_PGRAPH_XY_LOGIC_MISC1 0x00400518 +#define NV03_PGRAPH_XY_LOGIC_MISC2 0x0040051C +#define NV03_PGRAPH_XY_LOGIC_MISC3 0x00400520 +#define NV03_PGRAPH_CLIPX_0 0x00400524 +#define NV03_PGRAPH_CLIPX_1 0x00400528 +#define NV03_PGRAPH_CLIPY_0 0x0040052C +#define NV03_PGRAPH_CLIPY_1 0x00400530 +#define NV03_PGRAPH_ABS_ICLIP_XMAX 0x00400534 +#define NV03_PGRAPH_ABS_ICLIP_YMAX 0x00400538 +#define NV03_PGRAPH_ABS_UCLIP_XMIN 0x0040053C +#define NV03_PGRAPH_ABS_UCLIP_YMIN 0x00400540 +#define NV03_PGRAPH_ABS_UCLIP_XMAX 0x00400544 +#define NV03_PGRAPH_ABS_UCLIP_YMAX 0x00400548 +#define NV03_PGRAPH_ABS_UCLIPA_XMIN 0x00400560 +#define NV03_PGRAPH_ABS_UCLIPA_YMIN 0x00400564 +#define NV03_PGRAPH_ABS_UCLIPA_XMAX 0x00400568 +#define NV03_PGRAPH_ABS_UCLIPA_YMAX 0x0040056C +#define NV04_PGRAPH_MISC24_1 0x00400570 +#define NV04_PGRAPH_MISC24_2 0x00400574 +#define NV04_PGRAPH_VALID2 0x00400578 +#define NV04_PGRAPH_PASSTHRU_0 0x0040057C +#define NV04_PGRAPH_PASSTHRU_1 0x00400580 +#define NV04_PGRAPH_PASSTHRU_2 0x00400584 +#define NV10_PGRAPH_DIMX_TEXTURE 0x00400588 +#define NV10_PGRAPH_WDIMX_TEXTURE 0x0040058C +#define NV04_PGRAPH_COMBINE_0_ALPHA 0x00400590 +#define NV04_PGRAPH_COMBINE_0_COLOR 0x00400594 +#define NV04_PGRAPH_COMBINE_1_ALPHA 0x00400598 +#define NV04_PGRAPH_COMBINE_1_COLOR 0x0040059C +#define NV04_PGRAPH_FORMAT_0 0x004005A8 +#define NV04_PGRAPH_FORMAT_1 0x004005AC +#define NV04_PGRAPH_FILTER_0 0x004005B0 +#define NV04_PGRAPH_FILTER_1 0x004005B4 +#define NV03_PGRAPH_MONO_COLOR0 0x00400600 +#define NV04_PGRAPH_ROP3 0x00400604 +#define NV04_PGRAPH_BETA_AND 0x00400608 +#define NV04_PGRAPH_BETA_PREMULT 0x0040060C +#define NV04_PGRAPH_LIMIT_VIOL_PIX 0x00400610 +#define NV04_PGRAPH_FORMATS 0x00400618 +#define NV10_PGRAPH_DEBUG_2 0x00400620 +#define NV04_PGRAPH_BOFFSET0 0x00400640 +#define NV04_PGRAPH_BOFFSET1 0x00400644 +#define NV04_PGRAPH_BOFFSET2 0x00400648 +#define NV04_PGRAPH_BOFFSET3 0x0040064C +#define NV04_PGRAPH_BOFFSET4 0x00400650 +#define NV04_PGRAPH_BOFFSET5 0x00400654 +#define NV04_PGRAPH_BBASE0 0x00400658 +#define NV04_PGRAPH_BBASE1 0x0040065C +#define NV04_PGRAPH_BBASE2 0x00400660 +#define NV04_PGRAPH_BBASE3 0x00400664 +#define NV04_PGRAPH_BBASE4 0x00400668 +#define NV04_PGRAPH_BBASE5 0x0040066C +#define NV04_PGRAPH_BPITCH0 0x00400670 +#define NV04_PGRAPH_BPITCH1 0x00400674 +#define NV04_PGRAPH_BPITCH2 0x00400678 +#define NV04_PGRAPH_BPITCH3 0x0040067C +#define NV04_PGRAPH_BPITCH4 0x00400680 +#define NV04_PGRAPH_BLIMIT0 0x00400684 +#define NV04_PGRAPH_BLIMIT1 0x00400688 +#define NV04_PGRAPH_BLIMIT2 0x0040068C +#define NV04_PGRAPH_BLIMIT3 0x00400690 +#define NV04_PGRAPH_BLIMIT4 0x00400694 +#define NV04_PGRAPH_BLIMIT5 0x00400698 +#define NV04_PGRAPH_BSWIZZLE2 0x0040069C +#define NV04_PGRAPH_BSWIZZLE5 0x004006A0 +#define NV03_PGRAPH_STATUS 0x004006B0 +#define NV04_PGRAPH_STATUS 0x00400700 +#define NV04_PGRAPH_TRAPPED_ADDR 0x00400704 +#define NV04_PGRAPH_TRAPPED_DATA 0x00400708 +#define NV04_PGRAPH_SURFACE 0x0040070C +#define NV10_PGRAPH_TRAPPED_DATA_HIGH 0x0040070C +#define NV04_PGRAPH_STATE 0x00400710 +#define NV10_PGRAPH_SURFACE 0x00400710 +#define NV04_PGRAPH_NOTIFY 0x00400714 +#define NV10_PGRAPH_STATE 0x00400714 +#define NV10_PGRAPH_NOTIFY 0x00400718 + +#define NV04_PGRAPH_FIFO 0x00400720 + +#define NV04_PGRAPH_BPIXEL 0x00400724 +#define NV10_PGRAPH_RDI_INDEX 0x00400750 +#define NV04_PGRAPH_FFINTFC_ST2 0x00400754 +#define NV10_PGRAPH_RDI_DATA 0x00400754 +#define NV04_PGRAPH_DMA_PITCH 0x00400760 +#define NV10_PGRAPH_FFINTFC_ST2 0x00400764 +#define NV04_PGRAPH_DVD_COLORFMT 0x00400764 +#define NV04_PGRAPH_SCALED_FORMAT 0x00400768 +#define NV10_PGRAPH_DMA_PITCH 0x00400770 +#define NV10_PGRAPH_DVD_COLORFMT 0x00400774 +#define NV10_PGRAPH_SCALED_FORMAT 0x00400778 +#define NV20_PGRAPH_CHANNEL_CTX_TABLE 0x00400780 +#define NV20_PGRAPH_CHANNEL_CTX_POINTER 0x00400784 +#define NV20_PGRAPH_CHANNEL_CTX_XFER 0x00400788 +#define NV20_PGRAPH_CHANNEL_CTX_XFER_LOAD 0x00000001 +#define NV20_PGRAPH_CHANNEL_CTX_XFER_SAVE 0x00000002 +#define NV04_PGRAPH_PATT_COLOR0 0x00400800 +#define NV04_PGRAPH_PATT_COLOR1 0x00400804 +#define NV04_PGRAPH_PATTERN 0x00400808 +#define NV04_PGRAPH_PATTERN_SHAPE 0x00400810 +#define NV04_PGRAPH_CHROMA 0x00400814 +#define NV04_PGRAPH_CONTROL0 0x00400818 +#define NV04_PGRAPH_CONTROL1 0x0040081C +#define NV04_PGRAPH_CONTROL2 0x00400820 +#define NV04_PGRAPH_BLEND 0x00400824 +#define NV04_PGRAPH_STORED_FMT 0x00400830 +#define NV04_PGRAPH_PATT_COLORRAM 0x00400900 +#define NV20_PGRAPH_TILE(i) (0x00400900 + (i*16)) +#define NV20_PGRAPH_TLIMIT(i) (0x00400904 + (i*16)) +#define NV20_PGRAPH_TSIZE(i) (0x00400908 + (i*16)) +#define NV20_PGRAPH_TSTATUS(i) (0x0040090C + (i*16)) +#define NV10_PGRAPH_TILE(i) (0x00400B00 + (i*16)) +#define NV10_PGRAPH_TLIMIT(i) (0x00400B04 + (i*16)) +#define NV10_PGRAPH_TSIZE(i) (0x00400B08 + (i*16)) +#define NV10_PGRAPH_TSTATUS(i) (0x00400B0C + (i*16)) +#define NV04_PGRAPH_U_RAM 0x00400D00 +#define NV47_PGRAPH_TILE(i) (0x00400D00 + (i*16)) +#define NV47_PGRAPH_TLIMIT(i) (0x00400D04 + (i*16)) +#define NV47_PGRAPH_TSIZE(i) (0x00400D08 + (i*16)) +#define NV47_PGRAPH_TSTATUS(i) (0x00400D0C + (i*16)) +#define NV04_PGRAPH_V_RAM 0x00400D40 +#define NV04_PGRAPH_W_RAM 0x00400D80 +#define NV10_PGRAPH_COMBINER0_IN_ALPHA 0x00400E40 +#define NV10_PGRAPH_COMBINER1_IN_ALPHA 0x00400E44 +#define NV10_PGRAPH_COMBINER0_IN_RGB 0x00400E48 +#define NV10_PGRAPH_COMBINER1_IN_RGB 0x00400E4C +#define NV10_PGRAPH_COMBINER_COLOR0 0x00400E50 +#define NV10_PGRAPH_COMBINER_COLOR1 0x00400E54 +#define NV10_PGRAPH_COMBINER0_OUT_ALPHA 0x00400E58 +#define NV10_PGRAPH_COMBINER1_OUT_ALPHA 0x00400E5C +#define NV10_PGRAPH_COMBINER0_OUT_RGB 0x00400E60 +#define NV10_PGRAPH_COMBINER1_OUT_RGB 0x00400E64 +#define NV10_PGRAPH_COMBINER_FINAL0 0x00400E68 +#define NV10_PGRAPH_COMBINER_FINAL1 0x00400E6C +#define NV10_PGRAPH_WINDOWCLIP_HORIZONTAL 0x00400F00 +#define NV10_PGRAPH_WINDOWCLIP_VERTICAL 0x00400F20 +#define NV10_PGRAPH_XFMODE0 0x00400F40 +#define NV10_PGRAPH_XFMODE1 0x00400F44 +#define NV10_PGRAPH_GLOBALSTATE0 0x00400F48 +#define NV10_PGRAPH_GLOBALSTATE1 0x00400F4C +#define NV10_PGRAPH_PIPE_ADDRESS 0x00400F50 +#define NV10_PGRAPH_PIPE_DATA 0x00400F54 +#define NV04_PGRAPH_DMA_START_0 0x00401000 +#define NV04_PGRAPH_DMA_START_1 0x00401004 +#define NV04_PGRAPH_DMA_LENGTH 0x00401008 +#define NV04_PGRAPH_DMA_MISC 0x0040100C +#define NV04_PGRAPH_DMA_DATA_0 0x00401020 +#define NV04_PGRAPH_DMA_DATA_1 0x00401024 +#define NV04_PGRAPH_DMA_RM 0x00401030 +#define NV04_PGRAPH_DMA_A_XLATE_INST 0x00401040 +#define NV04_PGRAPH_DMA_A_CONTROL 0x00401044 +#define NV04_PGRAPH_DMA_A_LIMIT 0x00401048 +#define NV04_PGRAPH_DMA_A_TLB_PTE 0x0040104C +#define NV04_PGRAPH_DMA_A_TLB_TAG 0x00401050 +#define NV04_PGRAPH_DMA_A_ADJ_OFFSET 0x00401054 +#define NV04_PGRAPH_DMA_A_OFFSET 0x00401058 +#define NV04_PGRAPH_DMA_A_SIZE 0x0040105C +#define NV04_PGRAPH_DMA_A_Y_SIZE 0x00401060 +#define NV04_PGRAPH_DMA_B_XLATE_INST 0x00401080 +#define NV04_PGRAPH_DMA_B_CONTROL 0x00401084 +#define NV04_PGRAPH_DMA_B_LIMIT 0x00401088 +#define NV04_PGRAPH_DMA_B_TLB_PTE 0x0040108C +#define NV04_PGRAPH_DMA_B_TLB_TAG 0x00401090 +#define NV04_PGRAPH_DMA_B_ADJ_OFFSET 0x00401094 +#define NV04_PGRAPH_DMA_B_OFFSET 0x00401098 +#define NV04_PGRAPH_DMA_B_SIZE 0x0040109C +#define NV04_PGRAPH_DMA_B_Y_SIZE 0x004010A0 +#define NV40_PGRAPH_TILE1(i) (0x00406900 + (i*16)) +#define NV40_PGRAPH_TLIMIT1(i) (0x00406904 + (i*16)) +#define NV40_PGRAPH_TSIZE1(i) (0x00406908 + (i*16)) +#define NV40_PGRAPH_TSTATUS1(i) (0x0040690C + (i*16)) + + +/* It's a guess that this works on NV03. Confirmed on NV04, though */ +#define NV04_PFIFO_DELAY_0 0x00002040 +#define NV04_PFIFO_DMA_TIMESLICE 0x00002044 +#define NV04_PFIFO_NEXT_CHANNEL 0x00002050 +#define NV03_PFIFO_INTR_0 0x00002100 +#define NV03_PFIFO_INTR_EN_0 0x00002140 +# define NV_PFIFO_INTR_CACHE_ERROR (1<<0) +# define NV_PFIFO_INTR_RUNOUT (1<<4) +# define NV_PFIFO_INTR_RUNOUT_OVERFLOW (1<<8) +# define NV_PFIFO_INTR_DMA_PUSHER (1<<12) +# define NV_PFIFO_INTR_DMA_PT (1<<16) +# define NV_PFIFO_INTR_SEMAPHORE (1<<20) +# define NV_PFIFO_INTR_ACQUIRE_TIMEOUT (1<<24) +#define NV03_PFIFO_RAMHT 0x00002210 +#define NV03_PFIFO_RAMFC 0x00002214 +#define NV03_PFIFO_RAMRO 0x00002218 +#define NV40_PFIFO_RAMFC 0x00002220 +#define NV03_PFIFO_CACHES 0x00002500 +#define NV04_PFIFO_MODE 0x00002504 +#define NV04_PFIFO_DMA 0x00002508 +#define NV04_PFIFO_SIZE 0x0000250c +#define NV50_PFIFO_CTX_TABLE(c) (0x2600+(c)*4) +#define NV50_PFIFO_CTX_TABLE__SIZE 128 +#define NV50_PFIFO_CTX_TABLE_CHANNEL_ENABLED (1<<31) +#define NV50_PFIFO_CTX_TABLE_UNK30_BAD (1<<30) +#define NV50_PFIFO_CTX_TABLE_INSTANCE_MASK_G80 0x0FFFFFFF +#define NV50_PFIFO_CTX_TABLE_INSTANCE_MASK_G84 0x00FFFFFF +#define NV03_PFIFO_CACHE0_PUSH0 0x00003000 +#define NV03_PFIFO_CACHE0_PULL0 0x00003040 +#define NV04_PFIFO_CACHE0_PULL0 0x00003050 +#define NV04_PFIFO_CACHE0_PULL1 0x00003054 +#define NV03_PFIFO_CACHE1_PUSH0 0x00003200 +#define NV03_PFIFO_CACHE1_PUSH1 0x00003204 +#define NV03_PFIFO_CACHE1_PUSH1_DMA (1<<8) +#define NV40_PFIFO_CACHE1_PUSH1_DMA (1<<16) +#define NV03_PFIFO_CACHE1_PUSH1_CHID_MASK 0x0000000f +#define NV10_PFIFO_CACHE1_PUSH1_CHID_MASK 0x0000001f +#define NV50_PFIFO_CACHE1_PUSH1_CHID_MASK 0x0000007f +#define NV03_PFIFO_CACHE1_PUT 0x00003210 +#define NV04_PFIFO_CACHE1_DMA_PUSH 0x00003220 +#define NV04_PFIFO_CACHE1_DMA_FETCH 0x00003224 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_8_BYTES 0x00000000 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_16_BYTES 0x00000008 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_24_BYTES 0x00000010 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_32_BYTES 0x00000018 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_40_BYTES 0x00000020 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_48_BYTES 0x00000028 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_56_BYTES 0x00000030 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_64_BYTES 0x00000038 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_72_BYTES 0x00000040 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_80_BYTES 0x00000048 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_88_BYTES 0x00000050 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_96_BYTES 0x00000058 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_104_BYTES 0x00000060 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_112_BYTES 0x00000068 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_120_BYTES 0x00000070 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES 0x00000078 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_136_BYTES 0x00000080 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_144_BYTES 0x00000088 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_152_BYTES 0x00000090 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_160_BYTES 0x00000098 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_168_BYTES 0x000000A0 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_176_BYTES 0x000000A8 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_184_BYTES 0x000000B0 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_192_BYTES 0x000000B8 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_200_BYTES 0x000000C0 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_208_BYTES 0x000000C8 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_216_BYTES 0x000000D0 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_224_BYTES 0x000000D8 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_232_BYTES 0x000000E0 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_240_BYTES 0x000000E8 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_248_BYTES 0x000000F0 +# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_256_BYTES 0x000000F8 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE 0x0000E000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_32_BYTES 0x00000000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_64_BYTES 0x00002000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_96_BYTES 0x00004000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES 0x00006000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_160_BYTES 0x00008000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_192_BYTES 0x0000A000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_224_BYTES 0x0000C000 +# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE_256_BYTES 0x0000E000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS 0x001F0000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_0 0x00000000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_1 0x00010000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_2 0x00020000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_3 0x00030000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_4 0x00040000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_5 0x00050000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_6 0x00060000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_7 0x00070000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 0x00080000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_9 0x00090000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_10 0x000A0000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_11 0x000B0000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_12 0x000C0000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_13 0x000D0000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_14 0x000E0000 +# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_15 0x000F0000 +# define NV_PFIFO_CACHE1_ENDIAN 0x80000000 +# define NV_PFIFO_CACHE1_LITTLE_ENDIAN 0x7FFFFFFF +# define NV_PFIFO_CACHE1_BIG_ENDIAN 0x80000000 +#define NV04_PFIFO_CACHE1_DMA_STATE 0x00003228 +#define NV04_PFIFO_CACHE1_DMA_INSTANCE 0x0000322c +#define NV04_PFIFO_CACHE1_DMA_CTL 0x00003230 +#define NV04_PFIFO_CACHE1_DMA_PUT 0x00003240 +#define NV04_PFIFO_CACHE1_DMA_GET 0x00003244 +#define NV10_PFIFO_CACHE1_REF_CNT 0x00003248 +#define NV10_PFIFO_CACHE1_DMA_SUBROUTINE 0x0000324C +#define NV03_PFIFO_CACHE1_PULL0 0x00003240 +#define NV04_PFIFO_CACHE1_PULL0 0x00003250 +#define NV03_PFIFO_CACHE1_PULL1 0x00003250 +#define NV04_PFIFO_CACHE1_PULL1 0x00003254 +#define NV04_PFIFO_CACHE1_HASH 0x00003258 +#define NV10_PFIFO_CACHE1_ACQUIRE_TIMEOUT 0x00003260 +#define NV10_PFIFO_CACHE1_ACQUIRE_TIMESTAMP 0x00003264 +#define NV10_PFIFO_CACHE1_ACQUIRE_VALUE 0x00003268 +#define NV10_PFIFO_CACHE1_SEMAPHORE 0x0000326C +#define NV03_PFIFO_CACHE1_GET 0x00003270 +#define NV04_PFIFO_CACHE1_ENGINE 0x00003280 +#define NV04_PFIFO_CACHE1_DMA_DCOUNT 0x000032A0 +#define NV40_PFIFO_GRCTX_INSTANCE 0x000032E0 +#define NV40_PFIFO_UNK32E4 0x000032E4 +#define NV04_PFIFO_CACHE1_METHOD(i) (0x00003800+(i*8)) +#define NV04_PFIFO_CACHE1_DATA(i) (0x00003804+(i*8)) +#define NV40_PFIFO_CACHE1_METHOD(i) (0x00090000+(i*8)) +#define NV40_PFIFO_CACHE1_DATA(i) (0x00090004+(i*8)) + +#define NV_CRTC0_INTSTAT 0x00600100 +#define NV_CRTC0_INTEN 0x00600140 +#define NV_CRTC1_INTSTAT 0x00602100 +#define NV_CRTC1_INTEN 0x00602140 +# define NV_CRTC_INTR_VBLANK (1<<0) + +#define NV04_PRAMIN 0x00700000 + +/* Fifo commands. These are not regs, neither masks */ +#define NV03_FIFO_CMD_JUMP 0x20000000 +#define NV03_FIFO_CMD_JUMP_OFFSET_MASK 0x1ffffffc +#define NV03_FIFO_CMD_REWIND (NV03_FIFO_CMD_JUMP | (0 & NV03_FIFO_CMD_JUMP_OFFSET_MASK)) + +/* This is a partial import from rules-ng, a few things may be duplicated. + * Eventually we should completely import everything from rules-ng. + * For the moment check rules-ng for docs. + */ + +#define NV50_PMC 0x00000000 +#define NV50_PMC__LEN 0x1 +#define NV50_PMC__ESIZE 0x2000 +# define NV50_PMC_BOOT_0 0x00000000 +# define NV50_PMC_BOOT_0_REVISION 0x000000ff +# define NV50_PMC_BOOT_0_REVISION__SHIFT 0 +# define NV50_PMC_BOOT_0_ARCH 0x0ff00000 +# define NV50_PMC_BOOT_0_ARCH__SHIFT 20 +# define NV50_PMC_INTR_0 0x00000100 +# define NV50_PMC_INTR_0_PFIFO (1<<8) +# define NV50_PMC_INTR_0_PGRAPH (1<<12) +# define NV50_PMC_INTR_0_PTIMER (1<<20) +# define NV50_PMC_INTR_0_HOTPLUG (1<<21) +# define NV50_PMC_INTR_0_DISPLAY (1<<26) +# define NV50_PMC_INTR_EN_0 0x00000140 +# define NV50_PMC_INTR_EN_0_MASTER (1<<0) +# define NV50_PMC_INTR_EN_0_MASTER_DISABLED (0<<0) +# define NV50_PMC_INTR_EN_0_MASTER_ENABLED (1<<0) +# define NV50_PMC_ENABLE 0x00000200 +# define NV50_PMC_ENABLE_PFIFO (1<<8) +# define NV50_PMC_ENABLE_PGRAPH (1<<12) + +#define NV50_PCONNECTOR 0x0000e000 +#define NV50_PCONNECTOR__LEN 0x1 +#define NV50_PCONNECTOR__ESIZE 0x1000 +# define NV50_PCONNECTOR_HOTPLUG_INTR 0x0000e050 +# define NV50_PCONNECTOR_HOTPLUG_INTR_PLUG_I2C0 (1<<0) +# define NV50_PCONNECTOR_HOTPLUG_INTR_PLUG_I2C1 (1<<1) +# define NV50_PCONNECTOR_HOTPLUG_INTR_PLUG_I2C2 (1<<2) +# define NV50_PCONNECTOR_HOTPLUG_INTR_PLUG_I2C3 (1<<3) +# define NV50_PCONNECTOR_HOTPLUG_INTR_UNPLUG_I2C0 (1<<16) +# define NV50_PCONNECTOR_HOTPLUG_INTR_UNPLUG_I2C1 (1<<17) +# define NV50_PCONNECTOR_HOTPLUG_INTR_UNPLUG_I2C2 (1<<18) +# define NV50_PCONNECTOR_HOTPLUG_INTR_UNPLUG_I2C3 (1<<19) +# define NV50_PCONNECTOR_HOTPLUG_CTRL 0x0000e054 +# define NV50_PCONNECTOR_HOTPLUG_CTRL_PLUG_I2C0 (1<<0) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_PLUG_I2C1 (1<<1) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_PLUG_I2C2 (1<<2) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_PLUG_I2C3 (1<<3) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_UNPLUG_I2C0 (1<<16) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_UNPLUG_I2C1 (1<<17) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_UNPLUG_I2C2 (1<<18) +# define NV50_PCONNECTOR_HOTPLUG_CTRL_UNPLUG_I2C3 (1<<19) +# define NV50_PCONNECTOR_HOTPLUG_STATE 0x0000e104 +# define NV50_PCONNECTOR_HOTPLUG_STATE_PIN_CONNECTED_I2C0 (1<<2) +# define NV50_PCONNECTOR_HOTPLUG_STATE_PIN_CONNECTED_I2C1 (1<<6) +# define NV50_PCONNECTOR_HOTPLUG_STATE_PIN_CONNECTED_I2C2 (1<<10) +# define NV50_PCONNECTOR_HOTPLUG_STATE_PIN_CONNECTED_I2C3 (1<<14) +# define NV50_PCONNECTOR_I2C_PORT_0 0x0000e138 +# define NV50_PCONNECTOR_I2C_PORT_1 0x0000e150 +# define NV50_PCONNECTOR_I2C_PORT_2 0x0000e168 +# define NV50_PCONNECTOR_I2C_PORT_3 0x0000e180 +# define NV50_PCONNECTOR_I2C_PORT_4 0x0000e240 +# define NV50_PCONNECTOR_I2C_PORT_5 0x0000e258 + +#define NV50_AUXCH_DATA_OUT(i,n) ((n) * 4 + (i) * 0x50 + 0x0000e4c0) +#define NV50_AUXCH_DATA_OUT__SIZE 4 +#define NV50_AUXCH_DATA_IN(i,n) ((n) * 4 + (i) * 0x50 + 0x0000e4d0) +#define NV50_AUXCH_DATA_IN__SIZE 4 +#define NV50_AUXCH_ADDR(i) ((i) * 0x50 + 0x0000e4e0) +#define NV50_AUXCH_CTRL(i) ((i) * 0x50 + 0x0000e4e4) +#define NV50_AUXCH_CTRL_LINKSTAT 0x01000000 +#define NV50_AUXCH_CTRL_LINKSTAT_NOT_READY 0x00000000 +#define NV50_AUXCH_CTRL_LINKSTAT_READY 0x01000000 +#define NV50_AUXCH_CTRL_LINKEN 0x00100000 +#define NV50_AUXCH_CTRL_LINKEN_DISABLED 0x00000000 +#define NV50_AUXCH_CTRL_LINKEN_ENABLED 0x00100000 +#define NV50_AUXCH_CTRL_EXEC 0x00010000 +#define NV50_AUXCH_CTRL_EXEC_COMPLETE 0x00000000 +#define NV50_AUXCH_CTRL_EXEC_IN_PROCESS 0x00010000 +#define NV50_AUXCH_CTRL_CMD 0x0000f000 +#define NV50_AUXCH_CTRL_CMD_SHIFT 12 +#define NV50_AUXCH_CTRL_LEN 0x0000000f +#define NV50_AUXCH_CTRL_LEN_SHIFT 0 +#define NV50_AUXCH_STAT(i) ((i) * 0x50 + 0x0000e4e8) +#define NV50_AUXCH_STAT_STATE 0x10000000 +#define NV50_AUXCH_STAT_STATE_NOT_READY 0x00000000 +#define NV50_AUXCH_STAT_STATE_READY 0x10000000 +#define NV50_AUXCH_STAT_REPLY 0x000f0000 +#define NV50_AUXCH_STAT_REPLY_AUX 0x00030000 +#define NV50_AUXCH_STAT_REPLY_AUX_ACK 0x00000000 +#define NV50_AUXCH_STAT_REPLY_AUX_NACK 0x00010000 +#define NV50_AUXCH_STAT_REPLY_AUX_DEFER 0x00020000 +#define NV50_AUXCH_STAT_REPLY_I2C 0x000c0000 +#define NV50_AUXCH_STAT_REPLY_I2C_ACK 0x00000000 +#define NV50_AUXCH_STAT_REPLY_I2C_NACK 0x00040000 +#define NV50_AUXCH_STAT_REPLY_I2C_DEFER 0x00080000 +#define NV50_AUXCH_STAT_COUNT 0x0000001f + +#define NV50_PBUS 0x00088000 +#define NV50_PBUS__LEN 0x1 +#define NV50_PBUS__ESIZE 0x1000 +# define NV50_PBUS_PCI_ID 0x00088000 +# define NV50_PBUS_PCI_ID_VENDOR_ID 0x0000ffff +# define NV50_PBUS_PCI_ID_VENDOR_ID__SHIFT 0 +# define NV50_PBUS_PCI_ID_DEVICE_ID 0xffff0000 +# define NV50_PBUS_PCI_ID_DEVICE_ID__SHIFT 16 + +#define NV50_PFB 0x00100000 +#define NV50_PFB__LEN 0x1 +#define NV50_PFB__ESIZE 0x1000 + +#define NV50_PEXTDEV 0x00101000 +#define NV50_PEXTDEV__LEN 0x1 +#define NV50_PEXTDEV__ESIZE 0x1000 + +#define NV50_PROM 0x00300000 +#define NV50_PROM__LEN 0x1 +#define NV50_PROM__ESIZE 0x10000 + +#define NV50_PGRAPH 0x00400000 +#define NV50_PGRAPH__LEN 0x1 +#define NV50_PGRAPH__ESIZE 0x10000 + +#define NV50_PDISPLAY 0x00610000 +#define NV50_PDISPLAY_OBJECTS 0x00610010 +#define NV50_PDISPLAY_INTR_0 0x00610020 +#define NV50_PDISPLAY_INTR_1 0x00610024 +#define NV50_PDISPLAY_INTR_1_VBLANK_CRTC 0x0000000c +#define NV50_PDISPLAY_INTR_1_VBLANK_CRTC_SHIFT 2 +#define NV50_PDISPLAY_INTR_1_VBLANK_CRTC_(n) (1 << ((n) + 2)) +#define NV50_PDISPLAY_INTR_1_VBLANK_CRTC_0 0x00000004 +#define NV50_PDISPLAY_INTR_1_VBLANK_CRTC_1 0x00000008 +#define NV50_PDISPLAY_INTR_1_CLK_UNK10 0x00000010 +#define NV50_PDISPLAY_INTR_1_CLK_UNK20 0x00000020 +#define NV50_PDISPLAY_INTR_1_CLK_UNK40 0x00000040 +#define NV50_PDISPLAY_INTR_EN 0x0061002c +#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC 0x0000000c +#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_(n) (1 << ((n) + 2)) +#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_0 0x00000004 +#define NV50_PDISPLAY_INTR_EN_VBLANK_CRTC_1 0x00000008 +#define NV50_PDISPLAY_INTR_EN_CLK_UNK10 0x00000010 +#define NV50_PDISPLAY_INTR_EN_CLK_UNK20 0x00000020 +#define NV50_PDISPLAY_INTR_EN_CLK_UNK40 0x00000040 +#define NV50_PDISPLAY_UNK30_CTRL 0x00610030 +#define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK0 0x00000200 +#define NV50_PDISPLAY_UNK30_CTRL_UPDATE_VCLK1 0x00000400 +#define NV50_PDISPLAY_UNK30_CTRL_PENDING 0x80000000 +#define NV50_PDISPLAY_TRAPPED_ADDR 0x00610080 +#define NV50_PDISPLAY_TRAPPED_DATA 0x00610084 +#define NV50_PDISPLAY_CHANNEL_STAT(i) ((i) * 0x10 + 0x00610200) +#define NV50_PDISPLAY_CHANNEL_STAT_DMA 0x00000010 +#define NV50_PDISPLAY_CHANNEL_STAT_DMA_DISABLED 0x00000000 +#define NV50_PDISPLAY_CHANNEL_STAT_DMA_ENABLED 0x00000010 +#define NV50_PDISPLAY_CHANNEL_DMA_CB(i) ((i) * 0x10 + 0x00610204) +#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION 0x00000002 +#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_VRAM 0x00000000 +#define NV50_PDISPLAY_CHANNEL_DMA_CB_LOCATION_SYSTEM 0x00000002 +#define NV50_PDISPLAY_CHANNEL_DMA_CB_VALID 0x00000001 +#define NV50_PDISPLAY_CHANNEL_UNK2(i) ((i) * 0x10 + 0x00610208) +#define NV50_PDISPLAY_CHANNEL_UNK3(i) ((i) * 0x10 + 0x0061020c) + +#define NV50_PDISPLAY_CURSOR 0x00610270 +#define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(i) ((i) * 0x10 + 0x00610270) +#define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_ON 0x00000001 +#define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS 0x00030000 +#define NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS_ACTIVE 0x00010000 + +#define NV50_PDISPLAY_CTRL_STATE 0x00610300 +#define NV50_PDISPLAY_CTRL_STATE_PENDING 0x80000000 +#define NV50_PDISPLAY_CTRL_STATE_METHOD 0x00001ffc +#define NV50_PDISPLAY_CTRL_STATE_ENABLE 0x00000001 +#define NV50_PDISPLAY_CTRL_VAL 0x00610304 +#define NV50_PDISPLAY_UNK_380 0x00610380 +#define NV50_PDISPLAY_RAM_AMOUNT 0x00610384 +#define NV50_PDISPLAY_UNK_388 0x00610388 +#define NV50_PDISPLAY_UNK_38C 0x0061038c + +#define NV50_PDISPLAY_CRTC_P(i, r) ((i) * 0x540 + NV50_PDISPLAY_CRTC_##r) +#define NV50_PDISPLAY_CRTC_C(i, r) (4 + (i) * 0x540 + NV50_PDISPLAY_CRTC_##r) +#define NV50_PDISPLAY_CRTC_UNK_0A18 /* mthd 0x0900 */ 0x00610a18 +#define NV50_PDISPLAY_CRTC_CLUT_MODE 0x00610a24 +#define NV50_PDISPLAY_CRTC_INTERLACE 0x00610a48 +#define NV50_PDISPLAY_CRTC_SCALE_CTRL 0x00610a50 +#define NV50_PDISPLAY_CRTC_CURSOR_CTRL 0x00610a58 +#define NV50_PDISPLAY_CRTC_UNK0A78 /* mthd 0x0904 */ 0x00610a78 +#define NV50_PDISPLAY_CRTC_UNK0AB8 0x00610ab8 +#define NV50_PDISPLAY_CRTC_DEPTH 0x00610ac8 +#define NV50_PDISPLAY_CRTC_CLOCK 0x00610ad0 +#define NV50_PDISPLAY_CRTC_COLOR_CTRL 0x00610ae0 +#define NV50_PDISPLAY_CRTC_SYNC_START_TO_BLANK_END 0x00610ae8 +#define NV50_PDISPLAY_CRTC_MODE_UNK1 0x00610af0 +#define NV50_PDISPLAY_CRTC_DISPLAY_TOTAL 0x00610af8 +#define NV50_PDISPLAY_CRTC_SYNC_DURATION 0x00610b00 +#define NV50_PDISPLAY_CRTC_MODE_UNK2 0x00610b08 +#define NV50_PDISPLAY_CRTC_UNK_0B10 /* mthd 0x0828 */ 0x00610b10 +#define NV50_PDISPLAY_CRTC_FB_SIZE 0x00610b18 +#define NV50_PDISPLAY_CRTC_FB_PITCH 0x00610b20 +#define NV50_PDISPLAY_CRTC_FB_PITCH_LINEAR 0x00100000 +#define NV50_PDISPLAY_CRTC_FB_POS 0x00610b28 +#define NV50_PDISPLAY_CRTC_SCALE_CENTER_OFFSET 0x00610b38 +#define NV50_PDISPLAY_CRTC_REAL_RES 0x00610b40 +#define NV50_PDISPLAY_CRTC_SCALE_RES1 0x00610b48 +#define NV50_PDISPLAY_CRTC_SCALE_RES2 0x00610b50 + +#define NV50_PDISPLAY_DAC_MODE_CTRL_P(i) (0x00610b58 + (i) * 0x8) +#define NV50_PDISPLAY_DAC_MODE_CTRL_C(i) (0x00610b5c + (i) * 0x8) +#define NV50_PDISPLAY_SOR_MODE_CTRL_P(i) (0x00610b70 + (i) * 0x8) +#define NV50_PDISPLAY_SOR_MODE_CTRL_C(i) (0x00610b74 + (i) * 0x8) +#define NV50_PDISPLAY_DAC_MODE_CTRL2_P(i) (0x00610bdc + (i) * 0x8) +#define NV50_PDISPLAY_DAC_MODE_CTRL2_C(i) (0x00610be0 + (i) * 0x8) + +#define NV90_PDISPLAY_SOR_MODE_CTRL_P(i) (0x00610794 + (i) * 0x8) +#define NV90_PDISPLAY_SOR_MODE_CTRL_C(i) (0x00610798 + (i) * 0x8) +#define NV90_PDISPLAY_DAC_MODE_CTRL_P(i) (0x00610b58 + (i) * 0x8) +#define NV90_PDISPLAY_DAC_MODE_CTRL_C(i) (0x00610b5c + (i) * 0x8) +#define NV90_PDISPLAY_DAC_MODE_CTRL2_P(i) (0x00610b80 + (i) * 0x8) +#define NV90_PDISPLAY_DAC_MODE_CTRL2_C(i) (0x00610b84 + (i) * 0x8) + +#define NV50_PDISPLAY_CRTC_CLK 0x00614000 +#define NV50_PDISPLAY_CRTC_CLK_CTRL1(i) ((i) * 0x800 + 0x614100) +#define NV50_PDISPLAY_CRTC_CLK_CTRL1_CONNECTED 0x00000600 +#define NV50_PDISPLAY_CRTC_CLK_VPLL_A(i) ((i) * 0x800 + 0x614104) +#define NV50_PDISPLAY_CRTC_CLK_VPLL_B(i) ((i) * 0x800 + 0x614108) +#define NV50_PDISPLAY_CRTC_CLK_CTRL2(i) ((i) * 0x800 + 0x614200) + +#define NV50_PDISPLAY_DAC_CLK 0x00614000 +#define NV50_PDISPLAY_DAC_CLK_CTRL2(i) ((i) * 0x800 + 0x614280) + +#define NV50_PDISPLAY_SOR_CLK 0x00614000 +#define NV50_PDISPLAY_SOR_CLK_CTRL2(i) ((i) * 0x800 + 0x614300) + +#define NV50_PDISPLAY_VGACRTC(r) ((r) + 0x619400) + +#define NV50_PDISPLAY_DAC 0x0061a000 +#define NV50_PDISPLAY_DAC_DPMS_CTRL(i) (0x0061a004 + (i) * 0x800) +#define NV50_PDISPLAY_DAC_DPMS_CTRL_HSYNC_OFF 0x00000001 +#define NV50_PDISPLAY_DAC_DPMS_CTRL_VSYNC_OFF 0x00000004 +#define NV50_PDISPLAY_DAC_DPMS_CTRL_BLANKED 0x00000010 +#define NV50_PDISPLAY_DAC_DPMS_CTRL_OFF 0x00000040 +#define NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING 0x80000000 +#define NV50_PDISPLAY_DAC_LOAD_CTRL(i) (0x0061a00c + (i) * 0x800) +#define NV50_PDISPLAY_DAC_LOAD_CTRL_ACTIVE 0x00100000 +#define NV50_PDISPLAY_DAC_LOAD_CTRL_PRESENT 0x38000000 +#define NV50_PDISPLAY_DAC_LOAD_CTRL_DONE 0x80000000 +#define NV50_PDISPLAY_DAC_CLK_CTRL1(i) (0x0061a010 + (i) * 0x800) +#define NV50_PDISPLAY_DAC_CLK_CTRL1_CONNECTED 0x00000600 + +#define NV50_PDISPLAY_SOR 0x0061c000 +#define NV50_PDISPLAY_SOR_DPMS_CTRL(i) (0x0061c004 + (i) * 0x800) +#define NV50_PDISPLAY_SOR_DPMS_CTRL_PENDING 0x80000000 +#define NV50_PDISPLAY_SOR_DPMS_CTRL_ON 0x00000001 +#define NV50_PDISPLAY_SOR_CLK_CTRL1(i) (0x0061c008 + (i) * 0x800) +#define NV50_PDISPLAY_SOR_CLK_CTRL1_CONNECTED 0x00000600 +#define NV50_PDISPLAY_SOR_DPMS_STATE(i) (0x0061c030 + (i) * 0x800) +#define NV50_PDISPLAY_SOR_DPMS_STATE_ACTIVE 0x00030000 +#define NV50_PDISPLAY_SOR_DPMS_STATE_BLANKED 0x00080000 +#define NV50_PDISPLAY_SOR_DPMS_STATE_WAIT 0x10000000 +#define NV50_PDISPLAY_SOR_BACKLIGHT 0x0061c084 +#define NV50_PDISPLAY_SOR_BACKLIGHT_ENABLE 0x80000000 +#define NV50_PDISPLAY_SOR_BACKLIGHT_LEVEL 0x00000fff +#define NV50_SOR_DP_CTRL(i,l) (0x0061c10c + (i) * 0x800 + (l) * 0x80) +#define NV50_SOR_DP_CTRL_ENHANCED_FRAME_ENABLED 0x00004000 +#define NV50_SOR_DP_CTRL_LANE_MASK 0x001f0000 +#define NV50_SOR_DP_CTRL_LANE_0_ENABLED 0x00010000 +#define NV50_SOR_DP_CTRL_LANE_1_ENABLED 0x00020000 +#define NV50_SOR_DP_CTRL_LANE_2_ENABLED 0x00040000 +#define NV50_SOR_DP_CTRL_LANE_3_ENABLED 0x00080000 +#define NV50_SOR_DP_CTRL_TRAINING_PATTERN 0x0f000000 +#define NV50_SOR_DP_CTRL_TRAINING_PATTERN_DISABLED 0x00000000 +#define NV50_SOR_DP_CTRL_TRAINING_PATTERN_1 0x01000000 +#define NV50_SOR_DP_CTRL_TRAINING_PATTERN_2 0x02000000 +#define NV50_SOR_DP_UNK118(i,l) (0x0061c118 + (i) * 0x800 + (l) * 0x80) +#define NV50_SOR_DP_UNK120(i,l) (0x0061c120 + (i) * 0x800 + (l) * 0x80) +#define NV50_SOR_DP_UNK130(i,l) (0x0061c130 + (i) * 0x800 + (l) * 0x80) + +#define NV50_PDISPLAY_USER(i) ((i) * 0x1000 + 0x00640000) +#define NV50_PDISPLAY_USER_PUT(i) ((i) * 0x1000 + 0x00640000) +#define NV50_PDISPLAY_USER_GET(i) ((i) * 0x1000 + 0x00640004) + +#define NV50_PDISPLAY_CURSOR_USER 0x00647000 +#define NV50_PDISPLAY_CURSOR_USER_POS_CTRL(i) ((i) * 0x1000 + 0x00647080) +#define NV50_PDISPLAY_CURSOR_USER_POS(i) ((i) * 0x1000 + 0x00647084) --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_instmem.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_instmem.c @@ -0,0 +1,208 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +/* returns the size of fifo context */ +static int +nouveau_fifo_ctx_size(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->chipset >= 0x40) + return 128; + else + if (dev_priv->chipset >= 0x17) + return 64; + + return 32; +} + +static void +nv04_instmem_determine_amount(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int i; + + /* Figure out how much instance memory we need */ + if (dev_priv->card_type >= NV_40) { + /* We'll want more instance memory than this on some NV4x cards. + * There's a 16MB aperture to play with that maps onto the end + * of vram. For now, only reserve a small piece until we know + * more about what each chipset requires. + */ + switch (dev_priv->chipset) { + case 0x40: + case 0x47: + case 0x49: + case 0x4b: + dev_priv->ramin_rsvd_vram = (2 * 1024 * 1024); + break; + default: + dev_priv->ramin_rsvd_vram = (1 * 1024 * 1024); + break; + } + } else { + /*XXX: what *are* the limits on ramin_rsvd_vram = (512 * 1024); + } + NV_DEBUG(dev, "RAMIN size: %dKiB\n", dev_priv->ramin_rsvd_vram >> 10); + + /* Clear all of it, except the BIOS image that's in the first 64KiB */ + dev_priv->engine.instmem.prepare_access(dev, true); + for (i = 64 * 1024; i < dev_priv->ramin_rsvd_vram; i += 4) + nv_wi32(dev, i, 0x00000000); + dev_priv->engine.instmem.finish_access(dev); +} + +static void +nv04_instmem_configure_fixed_tables(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + + /* FIFO hash table (RAMHT) + * use 4k hash table at RAMIN+0x10000 + * TODO: extend the hash table + */ + dev_priv->ramht_offset = 0x10000; + dev_priv->ramht_bits = 9; + dev_priv->ramht_size = (1 << dev_priv->ramht_bits); /* nr entries */ + dev_priv->ramht_size *= 8; /* 2 32-bit values per entry in RAMHT */ + NV_DEBUG(dev, "RAMHT offset=0x%x, size=%d\n", dev_priv->ramht_offset, + dev_priv->ramht_size); + + /* FIFO runout table (RAMRO) - 512k at 0x11200 */ + dev_priv->ramro_offset = 0x11200; + dev_priv->ramro_size = 512; + NV_DEBUG(dev, "RAMRO offset=0x%x, size=%d\n", dev_priv->ramro_offset, + dev_priv->ramro_size); + + /* FIFO context table (RAMFC) + * NV40 : Not sure exactly how to position RAMFC on some cards, + * 0x30002 seems to position it at RAMIN+0x20000 on these + * cards. RAMFC is 4kb (32 fifos, 128byte entries). + * Others: Position RAMFC at RAMIN+0x11400 + */ + dev_priv->ramfc_size = engine->fifo.channels * + nouveau_fifo_ctx_size(dev); + switch (dev_priv->card_type) { + case NV_40: + dev_priv->ramfc_offset = 0x20000; + break; + case NV_30: + case NV_20: + case NV_10: + case NV_04: + default: + dev_priv->ramfc_offset = 0x11400; + break; + } + NV_DEBUG(dev, "RAMFC offset=0x%x, size=%d\n", dev_priv->ramfc_offset, + dev_priv->ramfc_size); +} + +int nv04_instmem_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t offset; + int ret = 0; + + nv04_instmem_determine_amount(dev); + nv04_instmem_configure_fixed_tables(dev); + + /* Create a heap to manage RAMIN allocations, we don't allocate + * the space that was reserved for RAMHT/FC/RO. + */ + offset = dev_priv->ramfc_offset + dev_priv->ramfc_size; + + /* It appears RAMRO (or something?) is controlled by 0x2220/0x2230 + * on certain NV4x chipsets as well as RAMFC. When 0x2230 == 0 + * ("new style" control) the upper 16-bits of 0x2220 points at this + * other mysterious table that's clobbering important things. + * + * We're now pointing this at RAMIN+0x30000 to avoid RAMFC getting + * smashed to pieces on us, so reserve 0x30000-0x40000 too.. + */ + if (dev_priv->card_type >= NV_40) { + if (offset < 0x40000) + offset = 0x40000; + } + + ret = nouveau_mem_init_heap(&dev_priv->ramin_heap, + offset, dev_priv->ramin_rsvd_vram - offset); + if (ret) { + dev_priv->ramin_heap = NULL; + NV_ERROR(dev, "Failed to init RAMIN heap\n"); + } + + return ret; +} + +void +nv04_instmem_takedown(struct drm_device *dev) +{ +} + +int +nv04_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, uint32_t *sz) +{ + if (gpuobj->im_backing) + return -EINVAL; + + return 0; +} + +void +nv04_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (gpuobj && gpuobj->im_backing) { + if (gpuobj->im_bound) + dev_priv->engine.instmem.unbind(dev, gpuobj); + gpuobj->im_backing = NULL; + } +} + +int +nv04_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +{ + if (!gpuobj->im_pramin || gpuobj->im_bound) + return -EINVAL; + + gpuobj->im_bound = 1; + return 0; +} + +int +nv04_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +{ + if (gpuobj->im_bound == 0) + return -EINVAL; + + gpuobj->im_bound = 0; + return 0; +} + +void +nv04_instmem_prepare_access(struct drm_device *dev, bool write) +{ +} + +void +nv04_instmem_finish_access(struct drm_device *dev) +{ +} + +int +nv04_instmem_suspend(struct drm_device *dev) +{ + return 0; +} + +void +nv04_instmem_resume(struct drm_device *dev) +{ +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_crtc.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_crtc.c @@ -0,0 +1,792 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_mode.h" +#include "drm_crtc_helper.h" + +#define NOUVEAU_DMA_DEBUG (nouveau_reg_debug & NOUVEAU_REG_DEBUG_EVO) +#include "nouveau_reg.h" +#include "nouveau_drv.h" +#include "nouveau_hw.h" +#include "nouveau_encoder.h" +#include "nouveau_crtc.h" +#include "nouveau_fb.h" +#include "nouveau_connector.h" +#include "nv50_display.h" + +static void +nv50_crtc_lut_load(struct drm_crtc *crtc) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + void __iomem *lut = nvbo_kmap_obj_iovirtual(nv_crtc->lut.nvbo); + int i; + + NV_DEBUG_KMS(crtc->dev, "\n"); + + for (i = 0; i < 256; i++) { + writew(nv_crtc->lut.r[i] >> 2, lut + 8*i + 0); + writew(nv_crtc->lut.g[i] >> 2, lut + 8*i + 2); + writew(nv_crtc->lut.b[i] >> 2, lut + 8*i + 4); + } + + if (nv_crtc->lut.depth == 30) { + writew(nv_crtc->lut.r[i - 1] >> 2, lut + 8*i + 0); + writew(nv_crtc->lut.g[i - 1] >> 2, lut + 8*i + 2); + writew(nv_crtc->lut.b[i - 1] >> 2, lut + 8*i + 4); + } +} + +int +nv50_crtc_blank(struct nouveau_crtc *nv_crtc, bool blanked) +{ + struct drm_device *dev = nv_crtc->base.dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + int index = nv_crtc->index, ret; + + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + NV_DEBUG_KMS(dev, "%s\n", blanked ? "blanked" : "unblanked"); + + if (blanked) { + nv_crtc->cursor.hide(nv_crtc, false); + + ret = RING_SPACE(evo, dev_priv->chipset != 0x50 ? 7 : 5); + if (ret) { + NV_ERROR(dev, "no space while blanking crtc\n"); + return ret; + } + BEGIN_RING(evo, 0, NV50_EVO_CRTC(index, CLUT_MODE), 2); + OUT_RING(evo, NV50_EVO_CRTC_CLUT_MODE_BLANK); + OUT_RING(evo, 0); + if (dev_priv->chipset != 0x50) { + BEGIN_RING(evo, 0, NV84_EVO_CRTC(index, CLUT_DMA), 1); + OUT_RING(evo, NV84_EVO_CRTC_CLUT_DMA_HANDLE_NONE); + } + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(index, FB_DMA), 1); + OUT_RING(evo, NV50_EVO_CRTC_FB_DMA_HANDLE_NONE); + } else { + if (nv_crtc->cursor.visible) + nv_crtc->cursor.show(nv_crtc, false); + else + nv_crtc->cursor.hide(nv_crtc, false); + + ret = RING_SPACE(evo, dev_priv->chipset != 0x50 ? 10 : 8); + if (ret) { + NV_ERROR(dev, "no space while unblanking crtc\n"); + return ret; + } + BEGIN_RING(evo, 0, NV50_EVO_CRTC(index, CLUT_MODE), 2); + OUT_RING(evo, nv_crtc->lut.depth == 8 ? + NV50_EVO_CRTC_CLUT_MODE_OFF : + NV50_EVO_CRTC_CLUT_MODE_ON); + OUT_RING(evo, (nv_crtc->lut.nvbo->bo.mem.mm_node->start << + PAGE_SHIFT) >> 8); + if (dev_priv->chipset != 0x50) { + BEGIN_RING(evo, 0, NV84_EVO_CRTC(index, CLUT_DMA), 1); + OUT_RING(evo, NvEvoVRAM); + } + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(index, FB_OFFSET), 2); + OUT_RING(evo, nv_crtc->fb.offset >> 8); + OUT_RING(evo, 0); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(index, FB_DMA), 1); + if (dev_priv->chipset != 0x50) + if (nv_crtc->fb.tile_flags == 0x7a00) + OUT_RING(evo, NvEvoFB32); + else + if (nv_crtc->fb.tile_flags == 0x7000) + OUT_RING(evo, NvEvoFB16); + else + OUT_RING(evo, NvEvoVRAM); + else + OUT_RING(evo, NvEvoVRAM); + } + + nv_crtc->fb.blanked = blanked; + return 0; +} + +static int +nv50_crtc_set_dither(struct nouveau_crtc *nv_crtc, bool on, bool update) +{ + struct drm_device *dev = nv_crtc->base.dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + int ret; + + NV_DEBUG_KMS(dev, "\n"); + + ret = RING_SPACE(evo, 2 + (update ? 2 : 0)); + if (ret) { + NV_ERROR(dev, "no space while setting dither\n"); + return ret; + } + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, DITHER_CTRL), 1); + if (on) + OUT_RING(evo, NV50_EVO_CRTC_DITHER_CTRL_ON); + else + OUT_RING(evo, NV50_EVO_CRTC_DITHER_CTRL_OFF); + + if (update) { + BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(evo, 0); + FIRE_RING(evo); + } + + return 0; +} + +struct nouveau_connector * +nouveau_crtc_connector_get(struct nouveau_crtc *nv_crtc) +{ + struct drm_device *dev = nv_crtc->base.dev; + struct drm_connector *connector; + struct drm_crtc *crtc = to_drm_crtc(nv_crtc); + + /* The safest approach is to find an encoder with the right crtc, that + * is also linked to a connector. */ + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + if (connector->encoder) + if (connector->encoder->crtc == crtc) + return nouveau_connector(connector); + } + + return NULL; +} + +static int +nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) +{ + struct nouveau_connector *nv_connector = + nouveau_crtc_connector_get(nv_crtc); + struct drm_device *dev = nv_crtc->base.dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct drm_display_mode *native_mode = NULL; + struct drm_display_mode *mode = &nv_crtc->base.mode; + uint32_t outX, outY, horiz, vert; + int ret; + + NV_DEBUG_KMS(dev, "\n"); + + switch (scaling_mode) { + case DRM_MODE_SCALE_NONE: + break; + default: + if (!nv_connector || !nv_connector->native_mode) { + NV_ERROR(dev, "No native mode, forcing panel scaling\n"); + scaling_mode = DRM_MODE_SCALE_NONE; + } else { + native_mode = nv_connector->native_mode; + } + break; + } + + switch (scaling_mode) { + case DRM_MODE_SCALE_ASPECT: + horiz = (native_mode->hdisplay << 19) / mode->hdisplay; + vert = (native_mode->vdisplay << 19) / mode->vdisplay; + + if (vert > horiz) { + outX = (mode->hdisplay * horiz) >> 19; + outY = (mode->vdisplay * horiz) >> 19; + } else { + outX = (mode->hdisplay * vert) >> 19; + outY = (mode->vdisplay * vert) >> 19; + } + break; + case DRM_MODE_SCALE_FULLSCREEN: + outX = native_mode->hdisplay; + outY = native_mode->vdisplay; + break; + case DRM_MODE_SCALE_CENTER: + case DRM_MODE_SCALE_NONE: + default: + outX = mode->hdisplay; + outY = mode->vdisplay; + break; + } + + ret = RING_SPACE(evo, update ? 7 : 5); + if (ret) + return ret; + + /* Got a better name for SCALER_ACTIVE? */ + /* One day i've got to really figure out why this is needed. */ + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, SCALE_CTRL), 1); + if ((mode->flags & DRM_MODE_FLAG_DBLSCAN) || + (mode->flags & DRM_MODE_FLAG_INTERLACE) || + mode->hdisplay != outX || mode->vdisplay != outY) { + OUT_RING(evo, NV50_EVO_CRTC_SCALE_CTRL_ACTIVE); + } else { + OUT_RING(evo, NV50_EVO_CRTC_SCALE_CTRL_INACTIVE); + } + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, SCALE_RES1), 2); + OUT_RING(evo, outY << 16 | outX); + OUT_RING(evo, outY << 16 | outX); + + if (update) { + BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(evo, 0); + FIRE_RING(evo); + } + + return 0; +} + +int +nv50_crtc_set_clock(struct drm_device *dev, int head, int pclk) +{ + uint32_t pll_reg = NV50_PDISPLAY_CRTC_CLK_CTRL1(head); + struct nouveau_pll_vals pll; + struct pll_lims limits; + uint32_t reg1, reg2; + int ret; + + ret = get_pll_limits(dev, pll_reg, &limits); + if (ret) + return ret; + + ret = nouveau_calc_pll_mnp(dev, &limits, pclk, &pll); + if (ret <= 0) + return ret; + + if (limits.vco2.maxfreq) { + reg1 = nv_rd32(dev, pll_reg + 4) & 0xff00ff00; + reg2 = nv_rd32(dev, pll_reg + 8) & 0x8000ff00; + nv_wr32(dev, pll_reg, 0x10000611); + nv_wr32(dev, pll_reg + 4, reg1 | (pll.M1 << 16) | pll.N1); + nv_wr32(dev, pll_reg + 8, + reg2 | (pll.log2P << 28) | (pll.M2 << 16) | pll.N2); + } else { + reg1 = nv_rd32(dev, pll_reg + 4) & 0xffc00000; + nv_wr32(dev, pll_reg, 0x50000610); + nv_wr32(dev, pll_reg + 4, reg1 | + (pll.log2P << 16) | (pll.M1 << 8) | pll.N1); + } + + return 0; +} + +static void +nv50_crtc_destroy(struct drm_crtc *crtc) +{ + struct drm_device *dev; + struct nouveau_crtc *nv_crtc; + + if (!crtc) + return; + + dev = crtc->dev; + nv_crtc = nouveau_crtc(crtc); + + NV_DEBUG_KMS(dev, "\n"); + + drm_crtc_cleanup(&nv_crtc->base); + + nv50_cursor_fini(nv_crtc); + + nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo); + nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); + kfree(nv_crtc->mode); + kfree(nv_crtc); +} + +int +nv50_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, + uint32_t buffer_handle, uint32_t width, uint32_t height) +{ + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct nouveau_bo *cursor = NULL; + struct drm_gem_object *gem; + int ret = 0, i; + + if (width != 64 || height != 64) + return -EINVAL; + + if (!buffer_handle) { + nv_crtc->cursor.hide(nv_crtc, true); + return 0; + } + + gem = drm_gem_object_lookup(dev, file_priv, buffer_handle); + if (!gem) + return -EINVAL; + cursor = nouveau_gem_object(gem); + + ret = nouveau_bo_map(cursor); + if (ret) + goto out; + + /* The simple will do for now. */ + for (i = 0; i < 64 * 64; i++) + nouveau_bo_wr32(nv_crtc->cursor.nvbo, i, nouveau_bo_rd32(cursor, i)); + + nouveau_bo_unmap(cursor); + + nv_crtc->cursor.set_offset(nv_crtc, nv_crtc->cursor.nvbo->bo.offset - + dev_priv->vm_vram_base); + nv_crtc->cursor.show(nv_crtc, true); + +out: + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + return ret; +} + +int +nv50_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + nv_crtc->cursor.set_pos(nv_crtc, x, y); + return 0; +} + +static void +nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, + uint32_t size) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + int i; + + if (size != 256) + return; + + for (i = 0; i < 256; i++) { + nv_crtc->lut.r[i] = r[i]; + nv_crtc->lut.g[i] = g[i]; + nv_crtc->lut.b[i] = b[i]; + } + + /* We need to know the depth before we upload, but it's possible to + * get called before a framebuffer is bound. If this is the case, + * mark the lut values as dirty by setting depth==0, and it'll be + * uploaded on the first mode_set_base() + */ + if (!nv_crtc->base.fb) { + nv_crtc->lut.depth = 0; + return; + } + + nv50_crtc_lut_load(crtc); +} + +static void +nv50_crtc_save(struct drm_crtc *crtc) +{ + NV_ERROR(crtc->dev, "!!\n"); +} + +static void +nv50_crtc_restore(struct drm_crtc *crtc) +{ + NV_ERROR(crtc->dev, "!!\n"); +} + +static const struct drm_crtc_funcs nv50_crtc_funcs = { + .save = nv50_crtc_save, + .restore = nv50_crtc_restore, + .cursor_set = nv50_crtc_cursor_set, + .cursor_move = nv50_crtc_cursor_move, + .gamma_set = nv50_crtc_gamma_set, + .set_config = drm_crtc_helper_set_config, + .destroy = nv50_crtc_destroy, +}; + +static void +nv50_crtc_dpms(struct drm_crtc *crtc, int mode) +{ +} + +static void +nv50_crtc_prepare(struct drm_crtc *crtc) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_device *dev = crtc->dev; + struct drm_encoder *encoder; + uint32_t dac = 0, sor = 0; + + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + + /* Disconnect all unused encoders. */ + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (!drm_helper_encoder_in_use(encoder)) + continue; + + if (nv_encoder->dcb->type == OUTPUT_ANALOG || + nv_encoder->dcb->type == OUTPUT_TV) + dac |= (1 << nv_encoder->or); + else + sor |= (1 << nv_encoder->or); + } + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (nv_encoder->dcb->type == OUTPUT_ANALOG || + nv_encoder->dcb->type == OUTPUT_TV) { + if (dac & (1 << nv_encoder->or)) + continue; + } else { + if (sor & (1 << nv_encoder->or)) + continue; + } + + nv_encoder->disconnect(nv_encoder); + } + + nv50_crtc_blank(nv_crtc, true); +} + +static void +nv50_crtc_commit(struct drm_crtc *crtc) +{ + struct drm_crtc *crtc2; + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + int ret; + + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + + nv50_crtc_blank(nv_crtc, false); + + /* Explicitly blank all unused crtc's. */ + list_for_each_entry(crtc2, &dev->mode_config.crtc_list, head) { + if (!drm_helper_crtc_in_use(crtc2)) + nv50_crtc_blank(nouveau_crtc(crtc2), true); + } + + ret = RING_SPACE(evo, 2); + if (ret) { + NV_ERROR(dev, "no space while committing crtc\n"); + return; + } + BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(evo, 0); + FIRE_RING(evo); +} + +static bool +nv50_crtc_mode_fixup(struct drm_crtc *crtc, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + return true; +} + +static int +nv50_crtc_do_mode_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb, bool update) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_device *dev = nv_crtc->base.dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct drm_framebuffer *drm_fb = nv_crtc->base.fb; + struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb); + int ret, format; + + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + + switch (drm_fb->depth) { + case 8: + format = NV50_EVO_CRTC_FB_DEPTH_8; + break; + case 15: + format = NV50_EVO_CRTC_FB_DEPTH_15; + break; + case 16: + format = NV50_EVO_CRTC_FB_DEPTH_16; + break; + case 24: + case 32: + format = NV50_EVO_CRTC_FB_DEPTH_24; + break; + case 30: + format = NV50_EVO_CRTC_FB_DEPTH_30; + break; + default: + NV_ERROR(dev, "unknown depth %d\n", drm_fb->depth); + return -EINVAL; + } + + ret = nouveau_bo_pin(fb->nvbo, TTM_PL_FLAG_VRAM); + if (ret) + return ret; + + if (old_fb) { + struct nouveau_framebuffer *ofb = nouveau_framebuffer(old_fb); + nouveau_bo_unpin(ofb->nvbo); + } + + nv_crtc->fb.offset = fb->nvbo->bo.offset - dev_priv->vm_vram_base; + nv_crtc->fb.tile_flags = fb->nvbo->tile_flags; + nv_crtc->fb.cpp = drm_fb->bits_per_pixel / 8; + if (!nv_crtc->fb.blanked && dev_priv->chipset != 0x50) { + ret = RING_SPACE(evo, 2); + if (ret) + return ret; + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, FB_DMA), 1); + if (nv_crtc->fb.tile_flags == 0x7a00) + OUT_RING(evo, NvEvoFB32); + else + if (nv_crtc->fb.tile_flags == 0x7000) + OUT_RING(evo, NvEvoFB16); + else + OUT_RING(evo, NvEvoVRAM); + } + + ret = RING_SPACE(evo, 12); + if (ret) + return ret; + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, FB_OFFSET), 5); + OUT_RING(evo, nv_crtc->fb.offset >> 8); + OUT_RING(evo, 0); + OUT_RING(evo, (drm_fb->height << 16) | drm_fb->width); + if (!nv_crtc->fb.tile_flags) { + OUT_RING(evo, drm_fb->pitch | (1 << 20)); + } else { + OUT_RING(evo, ((drm_fb->pitch / 4) << 4) | + fb->nvbo->tile_mode); + } + if (dev_priv->chipset == 0x50) + OUT_RING(evo, (fb->nvbo->tile_flags << 8) | format); + else + OUT_RING(evo, format); + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, CLUT_MODE), 1); + OUT_RING(evo, fb->base.depth == 8 ? + NV50_EVO_CRTC_CLUT_MODE_OFF : NV50_EVO_CRTC_CLUT_MODE_ON); + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, COLOR_CTRL), 1); + OUT_RING(evo, NV50_EVO_CRTC_COLOR_CTRL_COLOR); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, FB_POS), 1); + OUT_RING(evo, (y << 16) | x); + + if (nv_crtc->lut.depth != fb->base.depth) { + nv_crtc->lut.depth = fb->base.depth; + nv50_crtc_lut_load(crtc); + } + + if (update) { + ret = RING_SPACE(evo, 2); + if (ret) + return ret; + BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(evo, 0); + FIRE_RING(evo); + } + + return 0; +} + +static int +nv50_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode, int x, int y, + struct drm_framebuffer *old_fb) +{ + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct nouveau_connector *nv_connector = NULL; + uint32_t hsync_dur, vsync_dur, hsync_start_to_end, vsync_start_to_end; + uint32_t hunk1, vunk1, vunk2a, vunk2b; + int ret; + + /* Find the connector attached to this CRTC */ + nv_connector = nouveau_crtc_connector_get(nv_crtc); + + *nv_crtc->mode = *adjusted_mode; + + NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index); + + hsync_dur = adjusted_mode->hsync_end - adjusted_mode->hsync_start; + vsync_dur = adjusted_mode->vsync_end - adjusted_mode->vsync_start; + hsync_start_to_end = adjusted_mode->htotal - adjusted_mode->hsync_start; + vsync_start_to_end = adjusted_mode->vtotal - adjusted_mode->vsync_start; + /* I can't give this a proper name, anyone else can? */ + hunk1 = adjusted_mode->htotal - + adjusted_mode->hsync_start + adjusted_mode->hdisplay; + vunk1 = adjusted_mode->vtotal - + adjusted_mode->vsync_start + adjusted_mode->vdisplay; + /* Another strange value, this time only for interlaced adjusted_modes. */ + vunk2a = 2 * adjusted_mode->vtotal - + adjusted_mode->vsync_start + adjusted_mode->vdisplay; + vunk2b = adjusted_mode->vtotal - + adjusted_mode->vsync_start + adjusted_mode->vtotal; + + if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { + vsync_dur /= 2; + vsync_start_to_end /= 2; + vunk1 /= 2; + vunk2a /= 2; + vunk2b /= 2; + /* magic */ + if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) { + vsync_start_to_end -= 1; + vunk1 -= 1; + vunk2a -= 1; + vunk2b -= 1; + } + } + + ret = RING_SPACE(evo, 17); + if (ret) + return ret; + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, CLOCK), 2); + OUT_RING(evo, adjusted_mode->clock | 0x800000); + OUT_RING(evo, (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) ? 2 : 0); + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, DISPLAY_START), 5); + OUT_RING(evo, 0); + OUT_RING(evo, (adjusted_mode->vtotal << 16) | adjusted_mode->htotal); + OUT_RING(evo, (vsync_dur - 1) << 16 | (hsync_dur - 1)); + OUT_RING(evo, (vsync_start_to_end - 1) << 16 | + (hsync_start_to_end - 1)); + OUT_RING(evo, (vunk1 - 1) << 16 | (hunk1 - 1)); + + if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, UNK0824), 1); + OUT_RING(evo, (vunk2b - 1) << 16 | (vunk2a - 1)); + } else { + OUT_RING(evo, 0); + OUT_RING(evo, 0); + } + + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, UNK082C), 1); + OUT_RING(evo, 0); + + /* This is the actual resolution of the mode. */ + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, REAL_RES), 1); + OUT_RING(evo, (mode->vdisplay << 16) | mode->hdisplay); + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, SCALE_CENTER_OFFSET), 1); + OUT_RING(evo, NV50_EVO_CRTC_SCALE_CENTER_OFFSET_VAL(0, 0)); + + nv_crtc->set_dither(nv_crtc, nv_connector->use_dithering, false); + nv_crtc->set_scale(nv_crtc, nv_connector->scaling_mode, false); + + return nv50_crtc_do_mode_set_base(crtc, x, y, old_fb, false); +} + +static int +nv50_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb) +{ + return nv50_crtc_do_mode_set_base(crtc, x, y, old_fb, true); +} + +static const struct drm_crtc_helper_funcs nv50_crtc_helper_funcs = { + .dpms = nv50_crtc_dpms, + .prepare = nv50_crtc_prepare, + .commit = nv50_crtc_commit, + .mode_fixup = nv50_crtc_mode_fixup, + .mode_set = nv50_crtc_mode_set, + .mode_set_base = nv50_crtc_mode_set_base, + .load_lut = nv50_crtc_lut_load, +}; + +int +nv50_crtc_create(struct drm_device *dev, int index) +{ + struct nouveau_crtc *nv_crtc = NULL; + int ret, i; + + NV_DEBUG_KMS(dev, "\n"); + + nv_crtc = kzalloc(sizeof(*nv_crtc), GFP_KERNEL); + if (!nv_crtc) + return -ENOMEM; + + nv_crtc->mode = kzalloc(sizeof(*nv_crtc->mode), GFP_KERNEL); + if (!nv_crtc->mode) { + kfree(nv_crtc); + return -ENOMEM; + } + + /* Default CLUT parameters, will be activated on the hw upon + * first mode set. + */ + for (i = 0; i < 256; i++) { + nv_crtc->lut.r[i] = i << 8; + nv_crtc->lut.g[i] = i << 8; + nv_crtc->lut.b[i] = i << 8; + } + nv_crtc->lut.depth = 0; + + ret = nouveau_bo_new(dev, NULL, 4096, 0x100, TTM_PL_FLAG_VRAM, + 0, 0x0000, false, true, &nv_crtc->lut.nvbo); + if (!ret) { + ret = nouveau_bo_pin(nv_crtc->lut.nvbo, TTM_PL_FLAG_VRAM); + if (!ret) + ret = nouveau_bo_map(nv_crtc->lut.nvbo); + if (ret) + nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo); + } + + if (ret) { + kfree(nv_crtc->mode); + kfree(nv_crtc); + return ret; + } + + nv_crtc->index = index; + + /* set function pointers */ + nv_crtc->set_dither = nv50_crtc_set_dither; + nv_crtc->set_scale = nv50_crtc_set_scale; + + drm_crtc_init(dev, &nv_crtc->base, &nv50_crtc_funcs); + drm_crtc_helper_add(&nv_crtc->base, &nv50_crtc_helper_funcs); + drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256); + + ret = nouveau_bo_new(dev, NULL, 64*64*4, 0x100, TTM_PL_FLAG_VRAM, + 0, 0x0000, false, true, &nv_crtc->cursor.nvbo); + if (!ret) { + ret = nouveau_bo_pin(nv_crtc->cursor.nvbo, TTM_PL_FLAG_VRAM); + if (!ret) + ret = nouveau_bo_map(nv_crtc->cursor.nvbo); + if (ret) + nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); + } + + nv50_cursor_init(nv_crtc); + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_mc.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_mc.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +int +nv50_mc_init(struct drm_device *dev) +{ + nv_wr32(dev, NV03_PMC_ENABLE, 0xFFFFFFFF); + return 0; +} + +void nv50_mc_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_sgdma.c @@ -0,0 +1,322 @@ +#include "drmP.h" +#include "nouveau_drv.h" +#include + +#define NV_CTXDMA_PAGE_SHIFT 12 +#define NV_CTXDMA_PAGE_SIZE (1 << NV_CTXDMA_PAGE_SHIFT) +#define NV_CTXDMA_PAGE_MASK (NV_CTXDMA_PAGE_SIZE - 1) + +struct nouveau_sgdma_be { + struct ttm_backend backend; + struct drm_device *dev; + + dma_addr_t *pages; + unsigned nr_pages; + + unsigned pte_start; + bool bound; +}; + +static int +nouveau_sgdma_populate(struct ttm_backend *be, unsigned long num_pages, + struct page **pages, struct page *dummy_read_page) +{ + struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; + struct drm_device *dev = nvbe->dev; + + NV_DEBUG(nvbe->dev, "num_pages = %ld\n", num_pages); + + if (nvbe->pages) + return -EINVAL; + + nvbe->pages = kmalloc(sizeof(dma_addr_t) * num_pages, GFP_KERNEL); + if (!nvbe->pages) + return -ENOMEM; + + nvbe->nr_pages = 0; + while (num_pages--) { + nvbe->pages[nvbe->nr_pages] = + pci_map_page(dev->pdev, pages[nvbe->nr_pages], 0, + PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); + if (pci_dma_mapping_error(dev->pdev, + nvbe->pages[nvbe->nr_pages])) { + be->func->clear(be); + return -EFAULT; + } + + nvbe->nr_pages++; + } + + return 0; +} + +static void +nouveau_sgdma_clear(struct ttm_backend *be) +{ + struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; + struct drm_device *dev; + + if (nvbe && nvbe->pages) { + dev = nvbe->dev; + NV_DEBUG(dev, "\n"); + + if (nvbe->bound) + be->func->unbind(be); + + while (nvbe->nr_pages--) { + pci_unmap_page(dev->pdev, nvbe->pages[nvbe->nr_pages], + PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); + } + kfree(nvbe->pages); + nvbe->pages = NULL; + nvbe->nr_pages = 0; + } +} + +static inline unsigned +nouveau_sgdma_pte(struct drm_device *dev, uint64_t offset) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + unsigned pte = (offset >> NV_CTXDMA_PAGE_SHIFT); + + if (dev_priv->card_type < NV_50) + return pte + 2; + + return pte << 1; +} + +static int +nouveau_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem) +{ + struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; + struct drm_device *dev = nvbe->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; + unsigned i, j, pte; + + NV_DEBUG(dev, "pg=0x%lx\n", mem->mm_node->start); + + dev_priv->engine.instmem.prepare_access(nvbe->dev, true); + pte = nouveau_sgdma_pte(nvbe->dev, mem->mm_node->start << PAGE_SHIFT); + nvbe->pte_start = pte; + for (i = 0; i < nvbe->nr_pages; i++) { + dma_addr_t dma_offset = nvbe->pages[i]; + uint32_t offset_l = lower_32_bits(dma_offset); + uint32_t offset_h = upper_32_bits(dma_offset); + + for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) { + if (dev_priv->card_type < NV_50) + nv_wo32(dev, gpuobj, pte++, offset_l | 3); + else { + nv_wo32(dev, gpuobj, pte++, offset_l | 0x21); + nv_wo32(dev, gpuobj, pte++, offset_h & 0xff); + } + + dma_offset += NV_CTXDMA_PAGE_SIZE; + } + } + dev_priv->engine.instmem.finish_access(nvbe->dev); + + if (dev_priv->card_type == NV_50) { + nv_wr32(dev, 0x100c80, 0x00050001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", + nv_rd32(dev, 0x100c80)); + return -EBUSY; + } + + nv_wr32(dev, 0x100c80, 0x00000001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", + nv_rd32(dev, 0x100c80)); + return -EBUSY; + } + } + + nvbe->bound = true; + return 0; +} + +static int +nouveau_sgdma_unbind(struct ttm_backend *be) +{ + struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; + struct drm_device *dev = nvbe->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; + unsigned i, j, pte; + + NV_DEBUG(dev, "\n"); + + if (!nvbe->bound) + return 0; + + dev_priv->engine.instmem.prepare_access(nvbe->dev, true); + pte = nvbe->pte_start; + for (i = 0; i < nvbe->nr_pages; i++) { + dma_addr_t dma_offset = dev_priv->gart_info.sg_dummy_bus; + + for (j = 0; j < PAGE_SIZE / NV_CTXDMA_PAGE_SIZE; j++) { + if (dev_priv->card_type < NV_50) + nv_wo32(dev, gpuobj, pte++, dma_offset | 3); + else { + nv_wo32(dev, gpuobj, pte++, dma_offset | 0x21); + nv_wo32(dev, gpuobj, pte++, 0x00000000); + } + + dma_offset += NV_CTXDMA_PAGE_SIZE; + } + } + dev_priv->engine.instmem.finish_access(nvbe->dev); + + nvbe->bound = false; + return 0; +} + +static void +nouveau_sgdma_destroy(struct ttm_backend *be) +{ + struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be; + + if (be) { + NV_DEBUG(nvbe->dev, "\n"); + + if (nvbe) { + if (nvbe->pages) + be->func->clear(be); + kfree(nvbe); + } + } +} + +static struct ttm_backend_func nouveau_sgdma_backend = { + .populate = nouveau_sgdma_populate, + .clear = nouveau_sgdma_clear, + .bind = nouveau_sgdma_bind, + .unbind = nouveau_sgdma_unbind, + .destroy = nouveau_sgdma_destroy +}; + +struct ttm_backend * +nouveau_sgdma_init_ttm(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_sgdma_be *nvbe; + + if (!dev_priv->gart_info.sg_ctxdma) + return NULL; + + nvbe = kzalloc(sizeof(*nvbe), GFP_KERNEL); + if (!nvbe) + return NULL; + + nvbe->dev = dev; + + nvbe->backend.func = &nouveau_sgdma_backend; + + return &nvbe->backend; +} + +int +nouveau_sgdma_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj = NULL; + uint32_t aper_size, obj_size; + int i, ret; + + if (dev_priv->card_type < NV_50) { + aper_size = (64 * 1024 * 1024); + obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4; + obj_size += 8; /* ctxdma header */ + } else { + /* 1 entire VM page table */ + aper_size = (512 * 1024 * 1024); + obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 8; + } + + ret = nouveau_gpuobj_new(dev, NULL, obj_size, 16, + NVOBJ_FLAG_ALLOW_NO_REFS | + NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, &gpuobj); + if (ret) { + NV_ERROR(dev, "Error creating sgdma object: %d\n", ret); + return ret; + } + + dev_priv->gart_info.sg_dummy_page = + alloc_page(GFP_KERNEL|__GFP_DMA32); + set_bit(PG_locked, &dev_priv->gart_info.sg_dummy_page->flags); + dev_priv->gart_info.sg_dummy_bus = + pci_map_page(dev->pdev, dev_priv->gart_info.sg_dummy_page, 0, + PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); + + dev_priv->engine.instmem.prepare_access(dev, true); + if (dev_priv->card_type < NV_50) { + /* Maybe use NV_DMA_TARGET_AGP for PCIE? NVIDIA do this, and + * confirmed to work on c51. Perhaps means NV_DMA_TARGET_PCIE + * on those cards? */ + nv_wo32(dev, gpuobj, 0, NV_CLASS_DMA_IN_MEMORY | + (1 << 12) /* PT present */ | + (0 << 13) /* PT *not* linear */ | + (NV_DMA_ACCESS_RW << 14) | + (NV_DMA_TARGET_PCI << 16)); + nv_wo32(dev, gpuobj, 1, aper_size - 1); + for (i = 2; i < 2 + (aper_size >> 12); i++) { + nv_wo32(dev, gpuobj, i, + dev_priv->gart_info.sg_dummy_bus | 3); + } + } else { + for (i = 0; i < obj_size; i += 8) { + nv_wo32(dev, gpuobj, (i+0)/4, + dev_priv->gart_info.sg_dummy_bus | 0x21); + nv_wo32(dev, gpuobj, (i+4)/4, 0); + } + } + dev_priv->engine.instmem.finish_access(dev); + + dev_priv->gart_info.type = NOUVEAU_GART_SGDMA; + dev_priv->gart_info.aper_base = 0; + dev_priv->gart_info.aper_size = aper_size; + dev_priv->gart_info.sg_ctxdma = gpuobj; + return 0; +} + +void +nouveau_sgdma_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->gart_info.sg_dummy_page) { + pci_unmap_page(dev->pdev, dev_priv->gart_info.sg_dummy_bus, + NV_CTXDMA_PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); + unlock_page(dev_priv->gart_info.sg_dummy_page); + __free_page(dev_priv->gart_info.sg_dummy_page); + dev_priv->gart_info.sg_dummy_page = NULL; + dev_priv->gart_info.sg_dummy_bus = 0; + } + + nouveau_gpuobj_del(dev, &dev_priv->gart_info.sg_ctxdma); +} + +int +nouveau_sgdma_get_page(struct drm_device *dev, uint32_t offset, uint32_t *page) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj = dev_priv->gart_info.sg_ctxdma; + struct nouveau_instmem_engine *instmem = &dev_priv->engine.instmem; + int pte; + + pte = (offset >> NV_CTXDMA_PAGE_SHIFT); + if (dev_priv->card_type < NV_50) { + instmem->prepare_access(dev, false); + *page = nv_ro32(dev, gpuobj, (pte + 2)) & ~NV_CTXDMA_PAGE_MASK; + instmem->finish_access(dev); + return 0; + } + + NV_ERROR(dev, "Unimplemented on NV50\n"); + return -EINVAL; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_cursor.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_cursor.c @@ -0,0 +1,70 @@ +#include "drmP.h" +#include "drm_mode.h" +#include "nouveau_reg.h" +#include "nouveau_drv.h" +#include "nouveau_crtc.h" +#include "nouveau_hw.h" + +static void +nv04_cursor_show(struct nouveau_crtc *nv_crtc, bool update) +{ + nv_show_cursor(nv_crtc->base.dev, nv_crtc->index, true); +} + +static void +nv04_cursor_hide(struct nouveau_crtc *nv_crtc, bool update) +{ + nv_show_cursor(nv_crtc->base.dev, nv_crtc->index, false); +} + +static void +nv04_cursor_set_pos(struct nouveau_crtc *nv_crtc, int x, int y) +{ + NVWriteRAMDAC(nv_crtc->base.dev, nv_crtc->index, + NV_PRAMDAC_CU_START_POS, + XLATE(y, 0, NV_PRAMDAC_CU_START_POS_Y) | + XLATE(x, 0, NV_PRAMDAC_CU_START_POS_X)); +} + +static void +crtc_wr_cio_state(struct drm_crtc *crtc, struct nv04_crtc_reg *crtcstate, int index) +{ + NVWriteVgaCrtc(crtc->dev, nouveau_crtc(crtc)->index, index, + crtcstate->CRTC[index]); +} + +static void +nv04_cursor_set_offset(struct nouveau_crtc *nv_crtc, uint32_t offset) +{ + struct drm_device *dev = nv_crtc->base.dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + struct drm_crtc *crtc = &nv_crtc->base; + + regp->CRTC[NV_CIO_CRE_HCUR_ADDR0_INDEX] = + MASK(NV_CIO_CRE_HCUR_ASI) | + XLATE(offset, 17, NV_CIO_CRE_HCUR_ADDR0_ADR); + regp->CRTC[NV_CIO_CRE_HCUR_ADDR1_INDEX] = + XLATE(offset, 11, NV_CIO_CRE_HCUR_ADDR1_ADR); + if (crtc->mode.flags & DRM_MODE_FLAG_DBLSCAN) + regp->CRTC[NV_CIO_CRE_HCUR_ADDR1_INDEX] |= + MASK(NV_CIO_CRE_HCUR_ADDR1_CUR_DBL); + regp->CRTC[NV_CIO_CRE_HCUR_ADDR2_INDEX] = offset >> 24; + + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_HCUR_ADDR0_INDEX); + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_HCUR_ADDR1_INDEX); + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_HCUR_ADDR2_INDEX); + if (dev_priv->card_type == NV_40) + nv_fix_nv40_hw_cursor(dev, nv_crtc->index); +} + +int +nv04_cursor_init(struct nouveau_crtc *crtc) +{ + crtc->cursor.set_offset = nv04_cursor_set_offset; + crtc->cursor.set_pos = nv04_cursor_set_pos; + crtc->cursor.hide = nv04_cursor_hide; + crtc->cursor.show = nv04_cursor_show; + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_instmem.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_instmem.c @@ -0,0 +1,531 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +struct nv50_instmem_priv { + uint32_t save1700[5]; /* 0x1700->0x1710 */ + + struct nouveau_gpuobj_ref *pramin_pt; + struct nouveau_gpuobj_ref *pramin_bar; + struct nouveau_gpuobj_ref *fb_bar; + + bool last_access_wr; +}; + +#define NV50_INSTMEM_PAGE_SHIFT 12 +#define NV50_INSTMEM_PAGE_SIZE (1 << NV50_INSTMEM_PAGE_SHIFT) +#define NV50_INSTMEM_PT_SIZE(a) (((a) >> 12) << 3) + +/*NOTE: - Assumes 0x1700 already covers the correct MiB of PRAMIN + */ +#define BAR0_WI32(g, o, v) do { \ + uint32_t offset; \ + if ((g)->im_backing) { \ + offset = (g)->im_backing_start; \ + } else { \ + offset = chan->ramin->gpuobj->im_backing_start; \ + offset += (g)->im_pramin->start; \ + } \ + offset += (o); \ + nv_wr32(dev, NV_RAMIN + (offset & 0xfffff), (v)); \ +} while (0) + +int +nv50_instmem_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan; + uint32_t c_offset, c_size, c_ramfc, c_vmpd, c_base, pt_size; + struct nv50_instmem_priv *priv; + int ret, i; + uint32_t v, save_nv001700; + + priv = kzalloc(sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + dev_priv->engine.instmem.priv = priv; + + /* Save state, will restore at takedown. */ + for (i = 0x1700; i <= 0x1710; i += 4) + priv->save1700[(i-0x1700)/4] = nv_rd32(dev, i); + + if (dev_priv->chipset == 0xaa || dev_priv->chipset == 0xac) + dev_priv->vram_sys_base = nv_rd32(dev, 0x100e10) << 12; + else + dev_priv->vram_sys_base = 0; + + /* Reserve the last MiB of VRAM, we should probably try to avoid + * setting up the below tables over the top of the VBIOS image at + * some point. + */ + dev_priv->ramin_rsvd_vram = 1 << 20; + c_offset = nouveau_mem_fb_amount(dev) - dev_priv->ramin_rsvd_vram; + c_size = 128 << 10; + c_vmpd = ((dev_priv->chipset & 0xf0) == 0x50) ? 0x1400 : 0x200; + c_ramfc = ((dev_priv->chipset & 0xf0) == 0x50) ? 0x0 : 0x20; + c_base = c_vmpd + 0x4000; + pt_size = NV50_INSTMEM_PT_SIZE(dev_priv->ramin_size); + + NV_DEBUG(dev, " Rsvd VRAM base: 0x%08x\n", c_offset); + NV_DEBUG(dev, " VBIOS image: 0x%08x\n", + (nv_rd32(dev, 0x619f04) & ~0xff) << 8); + NV_DEBUG(dev, " Aperture size: %d MiB\n", dev_priv->ramin_size >> 20); + NV_DEBUG(dev, " PT size: %d KiB\n", pt_size >> 10); + + /* Determine VM layout, we need to do this first to make sure + * we allocate enough memory for all the page tables. + */ + dev_priv->vm_gart_base = roundup(NV50_VM_BLOCK, NV50_VM_BLOCK); + dev_priv->vm_gart_size = NV50_VM_BLOCK; + + dev_priv->vm_vram_base = dev_priv->vm_gart_base + dev_priv->vm_gart_size; + dev_priv->vm_vram_size = nouveau_mem_fb_amount(dev); + if (dev_priv->vm_vram_size > NV50_VM_MAX_VRAM) + dev_priv->vm_vram_size = NV50_VM_MAX_VRAM; + dev_priv->vm_vram_size = roundup(dev_priv->vm_vram_size, NV50_VM_BLOCK); + dev_priv->vm_vram_pt_nr = dev_priv->vm_vram_size / NV50_VM_BLOCK; + + dev_priv->vm_end = dev_priv->vm_vram_base + dev_priv->vm_vram_size; + + NV_DEBUG(dev, "NV50VM: GART 0x%016llx-0x%016llx\n", + dev_priv->vm_gart_base, + dev_priv->vm_gart_base + dev_priv->vm_gart_size - 1); + NV_DEBUG(dev, "NV50VM: VRAM 0x%016llx-0x%016llx\n", + dev_priv->vm_vram_base, + dev_priv->vm_vram_base + dev_priv->vm_vram_size - 1); + + c_size += dev_priv->vm_vram_pt_nr * (NV50_VM_BLOCK / 65536 * 8); + + /* Map BAR0 PRAMIN aperture over the memory we want to use */ + save_nv001700 = nv_rd32(dev, NV50_PUNK_BAR0_PRAMIN); + nv_wr32(dev, NV50_PUNK_BAR0_PRAMIN, (c_offset >> 16)); + + /* Create a fake channel, and use it as our "dummy" channels 0/127. + * The main reason for creating a channel is so we can use the gpuobj + * code. However, it's probably worth noting that NVIDIA also setup + * their channels 0/127 with the same values they configure here. + * So, there may be some other reason for doing this. + * + * Have to create the entire channel manually, as the real channel + * creation code assumes we have PRAMIN access, and we don't until + * we're done here. + */ + chan = kzalloc(sizeof(*chan), GFP_KERNEL); + if (!chan) + return -ENOMEM; + chan->id = 0; + chan->dev = dev; + chan->file_priv = (struct drm_file *)-2; + dev_priv->fifos[0] = dev_priv->fifos[127] = chan; + + /* Channel's PRAMIN object + heap */ + ret = nouveau_gpuobj_new_fake(dev, 0, c_offset, c_size, 0, + NULL, &chan->ramin); + if (ret) + return ret; + + if (nouveau_mem_init_heap(&chan->ramin_heap, c_base, c_size - c_base)) + return -ENOMEM; + + /* RAMFC + zero channel's PRAMIN up to start of VM pagedir */ + ret = nouveau_gpuobj_new_fake(dev, c_ramfc, c_offset + c_ramfc, + 0x4000, 0, NULL, &chan->ramfc); + if (ret) + return ret; + + for (i = 0; i < c_vmpd; i += 4) + BAR0_WI32(chan->ramin->gpuobj, i, 0); + + /* VM page directory */ + ret = nouveau_gpuobj_new_fake(dev, c_vmpd, c_offset + c_vmpd, + 0x4000, 0, &chan->vm_pd, NULL); + if (ret) + return ret; + for (i = 0; i < 0x4000; i += 8) { + BAR0_WI32(chan->vm_pd, i + 0x00, 0x00000000); + BAR0_WI32(chan->vm_pd, i + 0x04, 0x00000000); + } + + /* PRAMIN page table, cheat and map into VM at 0x0000000000. + * We map the entire fake channel into the start of the PRAMIN BAR + */ + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pt_size, 0x1000, + 0, &priv->pramin_pt); + if (ret) + return ret; + + v = c_offset | 1; + if (dev_priv->vram_sys_base) { + v += dev_priv->vram_sys_base; + v |= 0x30; + } + + i = 0; + while (v < dev_priv->vram_sys_base + c_offset + c_size) { + BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, v); + BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, 0x00000000); + v += 0x1000; + i += 8; + } + + while (i < pt_size) { + BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, 0x00000000); + BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, 0x00000000); + i += 8; + } + + BAR0_WI32(chan->vm_pd, 0x00, priv->pramin_pt->instance | 0x63); + BAR0_WI32(chan->vm_pd, 0x04, 0x00000000); + + /* VRAM page table(s), mapped into VM at +1GiB */ + for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) { + ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, + NV50_VM_BLOCK/65536*8, 0, 0, + &chan->vm_vram_pt[i]); + if (ret) { + NV_ERROR(dev, "Error creating VRAM page tables: %d\n", + ret); + dev_priv->vm_vram_pt_nr = i; + return ret; + } + dev_priv->vm_vram_pt[i] = chan->vm_vram_pt[i]->gpuobj; + + for (v = 0; v < dev_priv->vm_vram_pt[i]->im_pramin->size; + v += 4) + BAR0_WI32(dev_priv->vm_vram_pt[i], v, 0); + + BAR0_WI32(chan->vm_pd, 0x10 + (i*8), + chan->vm_vram_pt[i]->instance | 0x61); + BAR0_WI32(chan->vm_pd, 0x14 + (i*8), 0); + } + + /* DMA object for PRAMIN BAR */ + ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, 6*4, 16, 0, + &priv->pramin_bar); + if (ret) + return ret; + BAR0_WI32(priv->pramin_bar->gpuobj, 0x00, 0x7fc00000); + BAR0_WI32(priv->pramin_bar->gpuobj, 0x04, dev_priv->ramin_size - 1); + BAR0_WI32(priv->pramin_bar->gpuobj, 0x08, 0x00000000); + BAR0_WI32(priv->pramin_bar->gpuobj, 0x0c, 0x00000000); + BAR0_WI32(priv->pramin_bar->gpuobj, 0x10, 0x00000000); + BAR0_WI32(priv->pramin_bar->gpuobj, 0x14, 0x00000000); + + /* DMA object for FB BAR */ + ret = nouveau_gpuobj_new_ref(dev, chan, chan, 0, 6*4, 16, 0, + &priv->fb_bar); + if (ret) + return ret; + BAR0_WI32(priv->fb_bar->gpuobj, 0x00, 0x7fc00000); + BAR0_WI32(priv->fb_bar->gpuobj, 0x04, 0x40000000 + + drm_get_resource_len(dev, 1) - 1); + BAR0_WI32(priv->fb_bar->gpuobj, 0x08, 0x40000000); + BAR0_WI32(priv->fb_bar->gpuobj, 0x0c, 0x00000000); + BAR0_WI32(priv->fb_bar->gpuobj, 0x10, 0x00000000); + BAR0_WI32(priv->fb_bar->gpuobj, 0x14, 0x00000000); + + /* Poke the relevant regs, and pray it works :) */ + nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12)); + nv_wr32(dev, NV50_PUNK_UNK1710, 0); + nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12) | + NV50_PUNK_BAR_CFG_BASE_VALID); + nv_wr32(dev, NV50_PUNK_BAR1_CTXDMA, (priv->fb_bar->instance >> 4) | + NV50_PUNK_BAR1_CTXDMA_VALID); + nv_wr32(dev, NV50_PUNK_BAR3_CTXDMA, (priv->pramin_bar->instance >> 4) | + NV50_PUNK_BAR3_CTXDMA_VALID); + + for (i = 0; i < 8; i++) + nv_wr32(dev, 0x1900 + (i*4), 0); + + /* Assume that praying isn't enough, check that we can re-read the + * entire fake channel back from the PRAMIN BAR */ + dev_priv->engine.instmem.prepare_access(dev, false); + for (i = 0; i < c_size; i += 4) { + if (nv_rd32(dev, NV_RAMIN + i) != nv_ri32(dev, i)) { + NV_ERROR(dev, "Error reading back PRAMIN at 0x%08x\n", + i); + dev_priv->engine.instmem.finish_access(dev); + return -EINVAL; + } + } + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, NV50_PUNK_BAR0_PRAMIN, save_nv001700); + + /* Global PRAMIN heap */ + if (nouveau_mem_init_heap(&dev_priv->ramin_heap, + c_size, dev_priv->ramin_size - c_size)) { + dev_priv->ramin_heap = NULL; + NV_ERROR(dev, "Failed to init RAMIN heap\n"); + } + + /*XXX: incorrect, but needed to make hash func "work" */ + dev_priv->ramht_offset = 0x10000; + dev_priv->ramht_bits = 9; + dev_priv->ramht_size = (1 << dev_priv->ramht_bits); + return 0; +} + +void +nv50_instmem_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; + struct nouveau_channel *chan = dev_priv->fifos[0]; + int i; + + NV_DEBUG(dev, "\n"); + + if (!priv) + return; + + /* Restore state from before init */ + for (i = 0x1700; i <= 0x1710; i += 4) + nv_wr32(dev, i, priv->save1700[(i - 0x1700) / 4]); + + nouveau_gpuobj_ref_del(dev, &priv->fb_bar); + nouveau_gpuobj_ref_del(dev, &priv->pramin_bar); + nouveau_gpuobj_ref_del(dev, &priv->pramin_pt); + + /* Destroy dummy channel */ + if (chan) { + for (i = 0; i < dev_priv->vm_vram_pt_nr; i++) { + nouveau_gpuobj_ref_del(dev, &chan->vm_vram_pt[i]); + dev_priv->vm_vram_pt[i] = NULL; + } + dev_priv->vm_vram_pt_nr = 0; + + nouveau_gpuobj_del(dev, &chan->vm_pd); + nouveau_gpuobj_ref_del(dev, &chan->ramfc); + nouveau_gpuobj_ref_del(dev, &chan->ramin); + nouveau_mem_takedown(&chan->ramin_heap); + + dev_priv->fifos[0] = dev_priv->fifos[127] = NULL; + kfree(chan); + } + + dev_priv->engine.instmem.priv = NULL; + kfree(priv); +} + +int +nv50_instmem_suspend(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->fifos[0]; + struct nouveau_gpuobj *ramin = chan->ramin->gpuobj; + int i; + + ramin->im_backing_suspend = vmalloc(ramin->im_pramin->size); + if (!ramin->im_backing_suspend) + return -ENOMEM; + + for (i = 0; i < ramin->im_pramin->size; i += 4) + ramin->im_backing_suspend[i/4] = nv_ri32(dev, i); + return 0; +} + +void +nv50_instmem_resume(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; + struct nouveau_channel *chan = dev_priv->fifos[0]; + struct nouveau_gpuobj *ramin = chan->ramin->gpuobj; + int i; + + nv_wr32(dev, NV50_PUNK_BAR0_PRAMIN, (ramin->im_backing_start >> 16)); + for (i = 0; i < ramin->im_pramin->size; i += 4) + BAR0_WI32(ramin, i, ramin->im_backing_suspend[i/4]); + vfree(ramin->im_backing_suspend); + ramin->im_backing_suspend = NULL; + + /* Poke the relevant regs, and pray it works :) */ + nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12)); + nv_wr32(dev, NV50_PUNK_UNK1710, 0); + nv_wr32(dev, NV50_PUNK_BAR_CFG_BASE, (chan->ramin->instance >> 12) | + NV50_PUNK_BAR_CFG_BASE_VALID); + nv_wr32(dev, NV50_PUNK_BAR1_CTXDMA, (priv->fb_bar->instance >> 4) | + NV50_PUNK_BAR1_CTXDMA_VALID); + nv_wr32(dev, NV50_PUNK_BAR3_CTXDMA, (priv->pramin_bar->instance >> 4) | + NV50_PUNK_BAR3_CTXDMA_VALID); + + for (i = 0; i < 8; i++) + nv_wr32(dev, 0x1900 + (i*4), 0); +} + +int +nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj, + uint32_t *sz) +{ + int ret; + + if (gpuobj->im_backing) + return -EINVAL; + + *sz = (*sz + (NV50_INSTMEM_PAGE_SIZE-1)) & ~(NV50_INSTMEM_PAGE_SIZE-1); + if (*sz == 0) + return -EINVAL; + + ret = nouveau_bo_new(dev, NULL, *sz, 0, TTM_PL_FLAG_VRAM, 0, 0x0000, + true, false, &gpuobj->im_backing); + if (ret) { + NV_ERROR(dev, "error getting PRAMIN backing pages: %d\n", ret); + return ret; + } + + ret = nouveau_bo_pin(gpuobj->im_backing, TTM_PL_FLAG_VRAM); + if (ret) { + NV_ERROR(dev, "error pinning PRAMIN backing VRAM: %d\n", ret); + nouveau_bo_ref(NULL, &gpuobj->im_backing); + return ret; + } + + gpuobj->im_backing_start = gpuobj->im_backing->bo.mem.mm_node->start; + gpuobj->im_backing_start <<= PAGE_SHIFT; + + return 0; +} + +void +nv50_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (gpuobj && gpuobj->im_backing) { + if (gpuobj->im_bound) + dev_priv->engine.instmem.unbind(dev, gpuobj); + nouveau_bo_unpin(gpuobj->im_backing); + nouveau_bo_ref(NULL, &gpuobj->im_backing); + gpuobj->im_backing = NULL; + } +} + +int +nv50_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; + struct nouveau_gpuobj *pramin_pt = priv->pramin_pt->gpuobj; + uint32_t pte, pte_end; + uint64_t vram; + + if (!gpuobj->im_backing || !gpuobj->im_pramin || gpuobj->im_bound) + return -EINVAL; + + NV_DEBUG(dev, "st=0x%0llx sz=0x%0llx\n", + gpuobj->im_pramin->start, gpuobj->im_pramin->size); + + pte = (gpuobj->im_pramin->start >> 12) << 1; + pte_end = ((gpuobj->im_pramin->size >> 12) << 1) + pte; + vram = gpuobj->im_backing_start; + + NV_DEBUG(dev, "pramin=0x%llx, pte=%d, pte_end=%d\n", + gpuobj->im_pramin->start, pte, pte_end); + NV_DEBUG(dev, "first vram page: 0x%08x\n", gpuobj->im_backing_start); + + vram |= 1; + if (dev_priv->vram_sys_base) { + vram += dev_priv->vram_sys_base; + vram |= 0x30; + } + + dev_priv->engine.instmem.prepare_access(dev, true); + while (pte < pte_end) { + nv_wo32(dev, pramin_pt, pte++, lower_32_bits(vram)); + nv_wo32(dev, pramin_pt, pte++, upper_32_bits(vram)); + vram += NV50_INSTMEM_PAGE_SIZE; + } + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, 0x100c80, 0x00040001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (1)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); + return -EBUSY; + } + + nv_wr32(dev, 0x100c80, 0x00060001); + if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { + NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); + NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); + return -EBUSY; + } + + gpuobj->im_bound = 1; + return 0; +} + +int +nv50_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; + uint32_t pte, pte_end; + + if (gpuobj->im_bound == 0) + return -EINVAL; + + pte = (gpuobj->im_pramin->start >> 12) << 1; + pte_end = ((gpuobj->im_pramin->size >> 12) << 1) + pte; + + dev_priv->engine.instmem.prepare_access(dev, true); + while (pte < pte_end) { + nv_wo32(dev, priv->pramin_pt->gpuobj, pte++, 0x00000000); + nv_wo32(dev, priv->pramin_pt->gpuobj, pte++, 0x00000000); + } + dev_priv->engine.instmem.finish_access(dev); + + gpuobj->im_bound = 0; + return 0; +} + +void +nv50_instmem_prepare_access(struct drm_device *dev, bool write) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; + + priv->last_access_wr = write; +} + +void +nv50_instmem_finish_access(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv50_instmem_priv *priv = dev_priv->engine.instmem.priv; + + if (priv->last_access_wr) { + nv_wr32(dev, 0x070000, 0x00000001); + if (!nv_wait(0x070000, 0x00000001, 0x00000000)) + NV_ERROR(dev, "PRAMIN flush timeout\n"); + } +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_display.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_display.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NV50_DISPLAY_H__ +#define __NV50_DISPLAY_H__ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" +#include "nouveau_reg.h" +#include "nouveau_crtc.h" +#include "nv50_evo.h" + +void nv50_display_irq_handler(struct drm_device *dev); +void nv50_display_irq_handler_bh(struct work_struct *work); +int nv50_display_init(struct drm_device *dev); +int nv50_display_create(struct drm_device *dev); +int nv50_display_destroy(struct drm_device *dev); +int nv50_crtc_blank(struct nouveau_crtc *, bool blank); +int nv50_crtc_set_clock(struct drm_device *, int head, int pclk); + +#endif /* __NV50_DISPLAY_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_cursor.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_cursor.c @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_mode.h" + +#define NOUVEAU_DMA_DEBUG (nouveau_reg_debug & NOUVEAU_REG_DEBUG_EVO) +#include "nouveau_reg.h" +#include "nouveau_drv.h" +#include "nouveau_crtc.h" +#include "nv50_display.h" + +static void +nv50_cursor_show(struct nouveau_crtc *nv_crtc, bool update) +{ + struct drm_nouveau_private *dev_priv = nv_crtc->base.dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct drm_device *dev = nv_crtc->base.dev; + int ret; + + NV_DEBUG_KMS(dev, "\n"); + + if (update && nv_crtc->cursor.visible) + return; + + ret = RING_SPACE(evo, (dev_priv->chipset != 0x50 ? 5 : 3) + update * 2); + if (ret) { + NV_ERROR(dev, "no space while unhiding cursor\n"); + return; + } + + if (dev_priv->chipset != 0x50) { + BEGIN_RING(evo, 0, NV84_EVO_CRTC(nv_crtc->index, CURSOR_DMA), 1); + OUT_RING(evo, NvEvoVRAM); + } + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, CURSOR_CTRL), 2); + OUT_RING(evo, NV50_EVO_CRTC_CURSOR_CTRL_SHOW); + OUT_RING(evo, nv_crtc->cursor.offset >> 8); + + if (update) { + BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(evo, 0); + FIRE_RING(evo); + nv_crtc->cursor.visible = true; + } +} + +static void +nv50_cursor_hide(struct nouveau_crtc *nv_crtc, bool update) +{ + struct drm_nouveau_private *dev_priv = nv_crtc->base.dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct drm_device *dev = nv_crtc->base.dev; + int ret; + + NV_DEBUG_KMS(dev, "\n"); + + if (update && !nv_crtc->cursor.visible) + return; + + ret = RING_SPACE(evo, (dev_priv->chipset != 0x50 ? 5 : 3) + update * 2); + if (ret) { + NV_ERROR(dev, "no space while hiding cursor\n"); + return; + } + BEGIN_RING(evo, 0, NV50_EVO_CRTC(nv_crtc->index, CURSOR_CTRL), 2); + OUT_RING(evo, NV50_EVO_CRTC_CURSOR_CTRL_HIDE); + OUT_RING(evo, 0); + if (dev_priv->chipset != 0x50) { + BEGIN_RING(evo, 0, NV84_EVO_CRTC(nv_crtc->index, CURSOR_DMA), 1); + OUT_RING(evo, NV84_EVO_CRTC_CURSOR_DMA_HANDLE_NONE); + } + + if (update) { + BEGIN_RING(evo, 0, NV50_EVO_UPDATE, 1); + OUT_RING(evo, 0); + FIRE_RING(evo); + nv_crtc->cursor.visible = false; + } +} + +static void +nv50_cursor_set_pos(struct nouveau_crtc *nv_crtc, int x, int y) +{ + struct drm_device *dev = nv_crtc->base.dev; + + nv_wr32(dev, NV50_PDISPLAY_CURSOR_USER_POS(nv_crtc->index), + ((y & 0xFFFF) << 16) | (x & 0xFFFF)); + /* Needed to make the cursor move. */ + nv_wr32(dev, NV50_PDISPLAY_CURSOR_USER_POS_CTRL(nv_crtc->index), 0); +} + +static void +nv50_cursor_set_offset(struct nouveau_crtc *nv_crtc, uint32_t offset) +{ + NV_DEBUG_KMS(nv_crtc->base.dev, "\n"); + if (offset == nv_crtc->cursor.offset) + return; + + nv_crtc->cursor.offset = offset; + if (nv_crtc->cursor.visible) { + nv_crtc->cursor.visible = false; + nv_crtc->cursor.show(nv_crtc, true); + } +} + +int +nv50_cursor_init(struct nouveau_crtc *nv_crtc) +{ + nv_crtc->cursor.set_offset = nv50_cursor_set_offset; + nv_crtc->cursor.set_pos = nv50_cursor_set_pos; + nv_crtc->cursor.hide = nv50_cursor_hide; + nv_crtc->cursor.show = nv50_cursor_show; + return 0; +} + +void +nv50_cursor_fini(struct nouveau_crtc *nv_crtc) +{ + struct drm_device *dev = nv_crtc->base.dev; + int idx = nv_crtc->index; + + NV_DEBUG_KMS(dev, "\n"); + + nv_wr32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx), 0); + if (!nv_wait(NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx), + NV50_PDISPLAY_CURSOR_CURSOR_CTRL2_STATUS, 0)) { + NV_ERROR(dev, "timeout: CURSOR_CTRL2_STATUS == 0\n"); + NV_ERROR(dev, "CURSOR_CTRL2 = 0x%08x\n", + nv_rd32(dev, NV50_PDISPLAY_CURSOR_CURSOR_CTRL2(idx))); + } +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_fbcon.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_fbcon.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NOUVEAU_FBCON_H__ +#define __NOUVEAU_FBCON_H__ + +#include "drm_fb_helper.h" + +struct nouveau_fbcon_par { + struct drm_fb_helper helper; + struct drm_device *dev; + struct nouveau_framebuffer *nouveau_fb; +}; + +int nouveau_fbcon_probe(struct drm_device *dev); +int nouveau_fbcon_remove(struct drm_device *dev, struct drm_framebuffer *fb); +void nouveau_fbcon_restore(void); +void nouveau_fbcon_zfill(struct drm_device *dev); + +void nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +void nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +void nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); +int nv04_fbcon_accel_init(struct fb_info *info); +void nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect); +void nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region); +void nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image); +int nv50_fbcon_accel_init(struct fb_info *info); + +void nouveau_fbcon_gpu_lockup(struct fb_info *info); +#endif /* __NV50_FBCON_H__ */ + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_display.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_display.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" +#include "nouveau_drv.h" +#include "nouveau_fb.h" +#include "nouveau_fbcon.h" + +static void +nouveau_user_framebuffer_destroy(struct drm_framebuffer *drm_fb) +{ + struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb); + struct drm_device *dev = drm_fb->dev; + + if (drm_fb->fbdev) + nouveau_fbcon_remove(dev, drm_fb); + + if (fb->nvbo) { + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(fb->nvbo->gem); + mutex_unlock(&dev->struct_mutex); + } + + drm_framebuffer_cleanup(drm_fb); + kfree(fb); +} + +static int +nouveau_user_framebuffer_create_handle(struct drm_framebuffer *drm_fb, + struct drm_file *file_priv, + unsigned int *handle) +{ + struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb); + + return drm_gem_handle_create(file_priv, fb->nvbo->gem, handle); +} + +static const struct drm_framebuffer_funcs nouveau_framebuffer_funcs = { + .destroy = nouveau_user_framebuffer_destroy, + .create_handle = nouveau_user_framebuffer_create_handle, +}; + +struct drm_framebuffer * +nouveau_framebuffer_create(struct drm_device *dev, struct nouveau_bo *nvbo, + struct drm_mode_fb_cmd *mode_cmd) +{ + struct nouveau_framebuffer *fb; + int ret; + + fb = kzalloc(sizeof(struct nouveau_framebuffer), GFP_KERNEL); + if (!fb) + return NULL; + + ret = drm_framebuffer_init(dev, &fb->base, &nouveau_framebuffer_funcs); + if (ret) { + kfree(fb); + return NULL; + } + + drm_helper_mode_fill_fb_struct(&fb->base, mode_cmd); + + fb->nvbo = nvbo; + return &fb->base; +} + +static struct drm_framebuffer * +nouveau_user_framebuffer_create(struct drm_device *dev, + struct drm_file *file_priv, + struct drm_mode_fb_cmd *mode_cmd) +{ + struct drm_framebuffer *fb; + struct drm_gem_object *gem; + + gem = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle); + if (!gem) + return NULL; + + fb = nouveau_framebuffer_create(dev, nouveau_gem_object(gem), mode_cmd); + if (!fb) { + drm_gem_object_unreference(gem); + return NULL; + } + + return fb; +} + +const struct drm_mode_config_funcs nouveau_mode_config_funcs = { + .fb_create = nouveau_user_framebuffer_create, + .fb_changed = nouveau_fbcon_probe, +}; + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_fb.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_fb.c @@ -0,0 +1,21 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +int +nv04_fb_init(struct drm_device *dev) +{ + /* This is what the DDX did for NV_ARCH_04, but a mmio-trace shows + * nvidia reading PFB_CFG_0, then writing back its original value. + * (which was 0x701114 in this case) + */ + + nv_wr32(dev, NV04_PFB_CFG0, 0x1114); + return 0; +} + +void +nv04_fb_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_graph.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_graph.c @@ -0,0 +1,584 @@ +/* + * Copyright 2007 Stephane Marchesin + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drm.h" +#include "nouveau_drv.h" + +static uint32_t nv04_graph_ctx_regs[] = { + 0x0040053c, + 0x00400544, + 0x00400540, + 0x00400548, + NV04_PGRAPH_CTX_SWITCH1, + NV04_PGRAPH_CTX_SWITCH2, + NV04_PGRAPH_CTX_SWITCH3, + NV04_PGRAPH_CTX_SWITCH4, + NV04_PGRAPH_CTX_CACHE1, + NV04_PGRAPH_CTX_CACHE2, + NV04_PGRAPH_CTX_CACHE3, + NV04_PGRAPH_CTX_CACHE4, + 0x00400184, + 0x004001a4, + 0x004001c4, + 0x004001e4, + 0x00400188, + 0x004001a8, + 0x004001c8, + 0x004001e8, + 0x0040018c, + 0x004001ac, + 0x004001cc, + 0x004001ec, + 0x00400190, + 0x004001b0, + 0x004001d0, + 0x004001f0, + 0x00400194, + 0x004001b4, + 0x004001d4, + 0x004001f4, + 0x00400198, + 0x004001b8, + 0x004001d8, + 0x004001f8, + 0x0040019c, + 0x004001bc, + 0x004001dc, + 0x004001fc, + 0x00400174, + NV04_PGRAPH_DMA_START_0, + NV04_PGRAPH_DMA_START_1, + NV04_PGRAPH_DMA_LENGTH, + NV04_PGRAPH_DMA_MISC, + NV04_PGRAPH_DMA_PITCH, + NV04_PGRAPH_BOFFSET0, + NV04_PGRAPH_BBASE0, + NV04_PGRAPH_BLIMIT0, + NV04_PGRAPH_BOFFSET1, + NV04_PGRAPH_BBASE1, + NV04_PGRAPH_BLIMIT1, + NV04_PGRAPH_BOFFSET2, + NV04_PGRAPH_BBASE2, + NV04_PGRAPH_BLIMIT2, + NV04_PGRAPH_BOFFSET3, + NV04_PGRAPH_BBASE3, + NV04_PGRAPH_BLIMIT3, + NV04_PGRAPH_BOFFSET4, + NV04_PGRAPH_BBASE4, + NV04_PGRAPH_BLIMIT4, + NV04_PGRAPH_BOFFSET5, + NV04_PGRAPH_BBASE5, + NV04_PGRAPH_BLIMIT5, + NV04_PGRAPH_BPITCH0, + NV04_PGRAPH_BPITCH1, + NV04_PGRAPH_BPITCH2, + NV04_PGRAPH_BPITCH3, + NV04_PGRAPH_BPITCH4, + NV04_PGRAPH_SURFACE, + NV04_PGRAPH_STATE, + NV04_PGRAPH_BSWIZZLE2, + NV04_PGRAPH_BSWIZZLE5, + NV04_PGRAPH_BPIXEL, + NV04_PGRAPH_NOTIFY, + NV04_PGRAPH_PATT_COLOR0, + NV04_PGRAPH_PATT_COLOR1, + NV04_PGRAPH_PATT_COLORRAM+0x00, + NV04_PGRAPH_PATT_COLORRAM+0x04, + NV04_PGRAPH_PATT_COLORRAM+0x08, + NV04_PGRAPH_PATT_COLORRAM+0x0c, + NV04_PGRAPH_PATT_COLORRAM+0x10, + NV04_PGRAPH_PATT_COLORRAM+0x14, + NV04_PGRAPH_PATT_COLORRAM+0x18, + NV04_PGRAPH_PATT_COLORRAM+0x1c, + NV04_PGRAPH_PATT_COLORRAM+0x20, + NV04_PGRAPH_PATT_COLORRAM+0x24, + NV04_PGRAPH_PATT_COLORRAM+0x28, + NV04_PGRAPH_PATT_COLORRAM+0x2c, + NV04_PGRAPH_PATT_COLORRAM+0x30, + NV04_PGRAPH_PATT_COLORRAM+0x34, + NV04_PGRAPH_PATT_COLORRAM+0x38, + NV04_PGRAPH_PATT_COLORRAM+0x3c, + NV04_PGRAPH_PATT_COLORRAM+0x40, + NV04_PGRAPH_PATT_COLORRAM+0x44, + NV04_PGRAPH_PATT_COLORRAM+0x48, + NV04_PGRAPH_PATT_COLORRAM+0x4c, + NV04_PGRAPH_PATT_COLORRAM+0x50, + NV04_PGRAPH_PATT_COLORRAM+0x54, + NV04_PGRAPH_PATT_COLORRAM+0x58, + NV04_PGRAPH_PATT_COLORRAM+0x5c, + NV04_PGRAPH_PATT_COLORRAM+0x60, + NV04_PGRAPH_PATT_COLORRAM+0x64, + NV04_PGRAPH_PATT_COLORRAM+0x68, + NV04_PGRAPH_PATT_COLORRAM+0x6c, + NV04_PGRAPH_PATT_COLORRAM+0x70, + NV04_PGRAPH_PATT_COLORRAM+0x74, + NV04_PGRAPH_PATT_COLORRAM+0x78, + NV04_PGRAPH_PATT_COLORRAM+0x7c, + NV04_PGRAPH_PATT_COLORRAM+0x80, + NV04_PGRAPH_PATT_COLORRAM+0x84, + NV04_PGRAPH_PATT_COLORRAM+0x88, + NV04_PGRAPH_PATT_COLORRAM+0x8c, + NV04_PGRAPH_PATT_COLORRAM+0x90, + NV04_PGRAPH_PATT_COLORRAM+0x94, + NV04_PGRAPH_PATT_COLORRAM+0x98, + NV04_PGRAPH_PATT_COLORRAM+0x9c, + NV04_PGRAPH_PATT_COLORRAM+0xa0, + NV04_PGRAPH_PATT_COLORRAM+0xa4, + NV04_PGRAPH_PATT_COLORRAM+0xa8, + NV04_PGRAPH_PATT_COLORRAM+0xac, + NV04_PGRAPH_PATT_COLORRAM+0xb0, + NV04_PGRAPH_PATT_COLORRAM+0xb4, + NV04_PGRAPH_PATT_COLORRAM+0xb8, + NV04_PGRAPH_PATT_COLORRAM+0xbc, + NV04_PGRAPH_PATT_COLORRAM+0xc0, + NV04_PGRAPH_PATT_COLORRAM+0xc4, + NV04_PGRAPH_PATT_COLORRAM+0xc8, + NV04_PGRAPH_PATT_COLORRAM+0xcc, + NV04_PGRAPH_PATT_COLORRAM+0xd0, + NV04_PGRAPH_PATT_COLORRAM+0xd4, + NV04_PGRAPH_PATT_COLORRAM+0xd8, + NV04_PGRAPH_PATT_COLORRAM+0xdc, + NV04_PGRAPH_PATT_COLORRAM+0xe0, + NV04_PGRAPH_PATT_COLORRAM+0xe4, + NV04_PGRAPH_PATT_COLORRAM+0xe8, + NV04_PGRAPH_PATT_COLORRAM+0xec, + NV04_PGRAPH_PATT_COLORRAM+0xf0, + NV04_PGRAPH_PATT_COLORRAM+0xf4, + NV04_PGRAPH_PATT_COLORRAM+0xf8, + NV04_PGRAPH_PATT_COLORRAM+0xfc, + NV04_PGRAPH_PATTERN, + 0x0040080c, + NV04_PGRAPH_PATTERN_SHAPE, + 0x00400600, + NV04_PGRAPH_ROP3, + NV04_PGRAPH_CHROMA, + NV04_PGRAPH_BETA_AND, + NV04_PGRAPH_BETA_PREMULT, + NV04_PGRAPH_CONTROL0, + NV04_PGRAPH_CONTROL1, + NV04_PGRAPH_CONTROL2, + NV04_PGRAPH_BLEND, + NV04_PGRAPH_STORED_FMT, + NV04_PGRAPH_SOURCE_COLOR, + 0x00400560, + 0x00400568, + 0x00400564, + 0x0040056c, + 0x00400400, + 0x00400480, + 0x00400404, + 0x00400484, + 0x00400408, + 0x00400488, + 0x0040040c, + 0x0040048c, + 0x00400410, + 0x00400490, + 0x00400414, + 0x00400494, + 0x00400418, + 0x00400498, + 0x0040041c, + 0x0040049c, + 0x00400420, + 0x004004a0, + 0x00400424, + 0x004004a4, + 0x00400428, + 0x004004a8, + 0x0040042c, + 0x004004ac, + 0x00400430, + 0x004004b0, + 0x00400434, + 0x004004b4, + 0x00400438, + 0x004004b8, + 0x0040043c, + 0x004004bc, + 0x00400440, + 0x004004c0, + 0x00400444, + 0x004004c4, + 0x00400448, + 0x004004c8, + 0x0040044c, + 0x004004cc, + 0x00400450, + 0x004004d0, + 0x00400454, + 0x004004d4, + 0x00400458, + 0x004004d8, + 0x0040045c, + 0x004004dc, + 0x00400460, + 0x004004e0, + 0x00400464, + 0x004004e4, + 0x00400468, + 0x004004e8, + 0x0040046c, + 0x004004ec, + 0x00400470, + 0x004004f0, + 0x00400474, + 0x004004f4, + 0x00400478, + 0x004004f8, + 0x0040047c, + 0x004004fc, + 0x00400534, + 0x00400538, + 0x00400514, + 0x00400518, + 0x0040051c, + 0x00400520, + 0x00400524, + 0x00400528, + 0x0040052c, + 0x00400530, + 0x00400d00, + 0x00400d40, + 0x00400d80, + 0x00400d04, + 0x00400d44, + 0x00400d84, + 0x00400d08, + 0x00400d48, + 0x00400d88, + 0x00400d0c, + 0x00400d4c, + 0x00400d8c, + 0x00400d10, + 0x00400d50, + 0x00400d90, + 0x00400d14, + 0x00400d54, + 0x00400d94, + 0x00400d18, + 0x00400d58, + 0x00400d98, + 0x00400d1c, + 0x00400d5c, + 0x00400d9c, + 0x00400d20, + 0x00400d60, + 0x00400da0, + 0x00400d24, + 0x00400d64, + 0x00400da4, + 0x00400d28, + 0x00400d68, + 0x00400da8, + 0x00400d2c, + 0x00400d6c, + 0x00400dac, + 0x00400d30, + 0x00400d70, + 0x00400db0, + 0x00400d34, + 0x00400d74, + 0x00400db4, + 0x00400d38, + 0x00400d78, + 0x00400db8, + 0x00400d3c, + 0x00400d7c, + 0x00400dbc, + 0x00400590, + 0x00400594, + 0x00400598, + 0x0040059c, + 0x004005a8, + 0x004005ac, + 0x004005b0, + 0x004005b4, + 0x004005c0, + 0x004005c4, + 0x004005c8, + 0x004005cc, + 0x004005d0, + 0x004005d4, + 0x004005d8, + 0x004005dc, + 0x004005e0, + NV04_PGRAPH_PASSTHRU_0, + NV04_PGRAPH_PASSTHRU_1, + NV04_PGRAPH_PASSTHRU_2, + NV04_PGRAPH_DVD_COLORFMT, + NV04_PGRAPH_SCALED_FORMAT, + NV04_PGRAPH_MISC24_0, + NV04_PGRAPH_MISC24_1, + NV04_PGRAPH_MISC24_2, + 0x00400500, + 0x00400504, + NV04_PGRAPH_VALID1, + NV04_PGRAPH_VALID2, + NV04_PGRAPH_DEBUG_3 +}; + +struct graph_state { + int nv04[ARRAY_SIZE(nv04_graph_ctx_regs)]; +}; + +struct nouveau_channel * +nv04_graph_channel(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int chid = dev_priv->engine.fifo.channels; + + if (nv_rd32(dev, NV04_PGRAPH_CTX_CONTROL) & 0x00010000) + chid = nv_rd32(dev, NV04_PGRAPH_CTX_USER) >> 24; + + if (chid >= dev_priv->engine.fifo.channels) + return NULL; + + return dev_priv->fifos[chid]; +} + +void +nv04_graph_context_switch(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_channel *chan = NULL; + int chid; + + pgraph->fifo_access(dev, false); + nouveau_wait_for_idle(dev); + + /* If previous context is valid, we need to save it */ + pgraph->unload_context(dev); + + /* Load context for next channel */ + chid = dev_priv->engine.fifo.channel_id(dev); + chan = dev_priv->fifos[chid]; + if (chan) + nv04_graph_load_context(chan); + + pgraph->fifo_access(dev, true); +} + +static uint32_t *ctx_reg(struct graph_state *ctx, uint32_t reg) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(nv04_graph_ctx_regs); i++) { + if (nv04_graph_ctx_regs[i] == reg) + return &ctx->nv04[i]; + } + + return NULL; +} + +int nv04_graph_create_context(struct nouveau_channel *chan) +{ + struct graph_state *pgraph_ctx; + NV_DEBUG(chan->dev, "nv04_graph_context_create %d\n", chan->id); + + chan->pgraph_ctx = pgraph_ctx = kzalloc(sizeof(*pgraph_ctx), + GFP_KERNEL); + if (pgraph_ctx == NULL) + return -ENOMEM; + + *ctx_reg(pgraph_ctx, NV04_PGRAPH_DEBUG_3) = 0xfad4ff31; + + return 0; +} + +void nv04_graph_destroy_context(struct nouveau_channel *chan) +{ + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + + kfree(pgraph_ctx); + chan->pgraph_ctx = NULL; +} + +int nv04_graph_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + uint32_t tmp; + int i; + + for (i = 0; i < ARRAY_SIZE(nv04_graph_ctx_regs); i++) + nv_wr32(dev, nv04_graph_ctx_regs[i], pgraph_ctx->nv04[i]); + + nv_wr32(dev, NV04_PGRAPH_CTX_CONTROL, 0x10010100); + + tmp = nv_rd32(dev, NV04_PGRAPH_CTX_USER) & 0x00ffffff; + nv_wr32(dev, NV04_PGRAPH_CTX_USER, tmp | chan->id << 24); + + tmp = nv_rd32(dev, NV04_PGRAPH_FFINTFC_ST2); + nv_wr32(dev, NV04_PGRAPH_FFINTFC_ST2, tmp & 0x000fffff); + + return 0; +} + +int +nv04_graph_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_channel *chan = NULL; + struct graph_state *ctx; + uint32_t tmp; + int i; + + chan = pgraph->channel(dev); + if (!chan) + return 0; + ctx = chan->pgraph_ctx; + + for (i = 0; i < ARRAY_SIZE(nv04_graph_ctx_regs); i++) + ctx->nv04[i] = nv_rd32(dev, nv04_graph_ctx_regs[i]); + + nv_wr32(dev, NV04_PGRAPH_CTX_CONTROL, 0x10000000); + tmp = nv_rd32(dev, NV04_PGRAPH_CTX_USER) & 0x00ffffff; + tmp |= (dev_priv->engine.fifo.channels - 1) << 24; + nv_wr32(dev, NV04_PGRAPH_CTX_USER, tmp); + return 0; +} + +int nv04_graph_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t tmp; + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & + ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | + NV_PMC_ENABLE_PGRAPH); + + /* Enable PGRAPH interrupts */ + nv_wr32(dev, NV03_PGRAPH_INTR, 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + + nv_wr32(dev, NV04_PGRAPH_VALID1, 0); + nv_wr32(dev, NV04_PGRAPH_VALID2, 0); + /*nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x000001FF); + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x001FFFFF);*/ + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x1231c000); + /*1231C000 blob, 001 haiku*/ + //*V_WRITE(NV04_PGRAPH_DEBUG_1, 0xf2d91100);*/ + nv_wr32(dev, NV04_PGRAPH_DEBUG_1, 0x72111100); + /*0x72111100 blob , 01 haiku*/ + /*nv_wr32(dev, NV04_PGRAPH_DEBUG_2, 0x11d5f870);*/ + nv_wr32(dev, NV04_PGRAPH_DEBUG_2, 0x11d5f071); + /*haiku same*/ + + /*nv_wr32(dev, NV04_PGRAPH_DEBUG_3, 0xfad4ff31);*/ + nv_wr32(dev, NV04_PGRAPH_DEBUG_3, 0xf0d4ff31); + /*haiku and blob 10d4*/ + + nv_wr32(dev, NV04_PGRAPH_STATE , 0xFFFFFFFF); + nv_wr32(dev, NV04_PGRAPH_CTX_CONTROL , 0x10000100); + tmp = nv_rd32(dev, NV04_PGRAPH_CTX_USER) & 0x00ffffff; + tmp |= (dev_priv->engine.fifo.channels - 1) << 24; + nv_wr32(dev, NV04_PGRAPH_CTX_USER, tmp); + + /* These don't belong here, they're part of a per-channel context */ + nv_wr32(dev, NV04_PGRAPH_PATTERN_SHAPE, 0x00000000); + nv_wr32(dev, NV04_PGRAPH_BETA_AND , 0xFFFFFFFF); + + return 0; +} + +void nv04_graph_takedown(struct drm_device *dev) +{ +} + +void +nv04_graph_fifo_access(struct drm_device *dev, bool enabled) +{ + if (enabled) + nv_wr32(dev, NV04_PGRAPH_FIFO, + nv_rd32(dev, NV04_PGRAPH_FIFO) | 1); + else + nv_wr32(dev, NV04_PGRAPH_FIFO, + nv_rd32(dev, NV04_PGRAPH_FIFO) & ~1); +} + +static int +nv04_graph_mthd_set_ref(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + chan->fence.last_sequence_irq = data; + nouveau_fence_handler(chan->dev, chan->id); + return 0; +} + +static int +nv04_graph_mthd_set_operation(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + struct drm_device *dev = chan->dev; + uint32_t instance = (nv_rd32(dev, NV04_PGRAPH_CTX_SWITCH4) & 0xffff) << 4; + int subc = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 13) & 0x7; + uint32_t tmp; + + tmp = nv_ri32(dev, instance); + tmp &= ~0x00038000; + tmp |= ((data & 7) << 15); + + nv_wi32(dev, instance, tmp); + nv_wr32(dev, NV04_PGRAPH_CTX_SWITCH1, tmp); + nv_wr32(dev, NV04_PGRAPH_CTX_CACHE1 + (subc<<2), tmp); + return 0; +} + +static struct nouveau_pgraph_object_method nv04_graph_mthds_sw[] = { + { 0x0150, nv04_graph_mthd_set_ref }, + {} +}; + +static struct nouveau_pgraph_object_method nv04_graph_mthds_set_operation[] = { + { 0x02fc, nv04_graph_mthd_set_operation }, + {}, +}; + +struct nouveau_pgraph_object_class nv04_graph_grclass[] = { + { 0x0039, false, NULL }, + { 0x004a, false, nv04_graph_mthds_set_operation }, /* gdirect */ + { 0x005f, false, nv04_graph_mthds_set_operation }, /* imageblit */ + { 0x0061, false, nv04_graph_mthds_set_operation }, /* ifc */ + { 0x0077, false, nv04_graph_mthds_set_operation }, /* sifm */ + { 0x0030, false, NULL }, /* null */ + { 0x0042, false, NULL }, /* surf2d */ + { 0x0043, false, NULL }, /* rop */ + { 0x0012, false, NULL }, /* beta1 */ + { 0x0072, false, NULL }, /* beta4 */ + { 0x0019, false, NULL }, /* cliprect */ + { 0x0044, false, NULL }, /* pattern */ + { 0x0052, false, NULL }, /* swzsurf */ + { 0x0053, false, NULL }, /* surf3d */ + { 0x0054, false, NULL }, /* tex_tri */ + { 0x0055, false, NULL }, /* multitex_tri */ + { 0x506e, true, nv04_graph_mthds_sw }, + {} +}; + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_crtc.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_crtc.c @@ -0,0 +1,1002 @@ +/* + * Copyright 1993-2003 NVIDIA, Corporation + * Copyright 2006 Dave Airlie + * Copyright 2007 Maarten Maathuis + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" + +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nouveau_fb.h" +#include "nouveau_hw.h" +#include "nvreg.h" + +static int +nv04_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb); + +static void +crtc_wr_cio_state(struct drm_crtc *crtc, struct nv04_crtc_reg *crtcstate, int index) +{ + NVWriteVgaCrtc(crtc->dev, nouveau_crtc(crtc)->index, index, + crtcstate->CRTC[index]); +} + +static void nv_crtc_set_digital_vibrance(struct drm_crtc *crtc, int level) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_nouveau_private *dev_priv = crtc->dev->dev_private; + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + + regp->CRTC[NV_CIO_CRE_CSB] = nv_crtc->saturation = level; + if (nv_crtc->saturation && nv_gf4_disp_arch(crtc->dev)) { + regp->CRTC[NV_CIO_CRE_CSB] = 0x80; + regp->CRTC[NV_CIO_CRE_5B] = nv_crtc->saturation << 2; + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_5B); + } + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_CSB); +} + +static void nv_crtc_set_image_sharpening(struct drm_crtc *crtc, int level) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_nouveau_private *dev_priv = crtc->dev->dev_private; + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + + nv_crtc->sharpness = level; + if (level < 0) /* blur is in hw range 0x3f -> 0x20 */ + level += 0x40; + regp->ramdac_634 = level; + NVWriteRAMDAC(crtc->dev, nv_crtc->index, NV_PRAMDAC_634, regp->ramdac_634); +} + +#define PLLSEL_VPLL1_MASK \ + (NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_VPLL \ + | NV_PRAMDAC_PLL_COEFF_SELECT_VCLK_RATIO_DB2) +#define PLLSEL_VPLL2_MASK \ + (NV_PRAMDAC_PLL_COEFF_SELECT_PLL_SOURCE_VPLL2 \ + | NV_PRAMDAC_PLL_COEFF_SELECT_VCLK2_RATIO_DB2) +#define PLLSEL_TV_MASK \ + (NV_PRAMDAC_PLL_COEFF_SELECT_TV_VSCLK1 \ + | NV_PRAMDAC_PLL_COEFF_SELECT_TV_PCLK1 \ + | NV_PRAMDAC_PLL_COEFF_SELECT_TV_VSCLK2 \ + | NV_PRAMDAC_PLL_COEFF_SELECT_TV_PCLK2) + +/* NV4x 0x40.. pll notes: + * gpu pll: 0x4000 + 0x4004 + * ?gpu? pll: 0x4008 + 0x400c + * vpll1: 0x4010 + 0x4014 + * vpll2: 0x4018 + 0x401c + * mpll: 0x4020 + 0x4024 + * mpll: 0x4038 + 0x403c + * + * the first register of each pair has some unknown details: + * bits 0-7: redirected values from elsewhere? (similar to PLL_SETUP_CONTROL?) + * bits 20-23: (mpll) something to do with post divider? + * bits 28-31: related to single stage mode? (bit 8/12) + */ + +static void nv_crtc_calc_state_ext(struct drm_crtc *crtc, struct drm_display_mode * mode, int dot_clock) +{ + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct nv04_mode_state *state = &dev_priv->mode_reg; + struct nv04_crtc_reg *regp = &state->crtc_reg[nv_crtc->index]; + struct nouveau_pll_vals *pv = ®p->pllvals; + struct pll_lims pll_lim; + + if (get_pll_limits(dev, nv_crtc->index ? VPLL2 : VPLL1, &pll_lim)) + return; + + /* NM2 == 0 is used to determine single stage mode on two stage plls */ + pv->NM2 = 0; + + /* for newer nv4x the blob uses only the first stage of the vpll below a + * certain clock. for a certain nv4b this is 150MHz. since the max + * output frequency of the first stage for this card is 300MHz, it is + * assumed the threshold is given by vco1 maxfreq/2 + */ + /* for early nv4x, specifically nv40 and *some* nv43 (devids 0 and 6, + * not 8, others unknown), the blob always uses both plls. no problem + * has yet been observed in allowing the use a single stage pll on all + * nv43 however. the behaviour of single stage use is untested on nv40 + */ + if (dev_priv->chipset > 0x40 && dot_clock <= (pll_lim.vco1.maxfreq / 2)) + memset(&pll_lim.vco2, 0, sizeof(pll_lim.vco2)); + + if (!nouveau_calc_pll_mnp(dev, &pll_lim, dot_clock, pv)) + return; + + state->pllsel &= PLLSEL_VPLL1_MASK | PLLSEL_VPLL2_MASK | PLLSEL_TV_MASK; + + /* The blob uses this always, so let's do the same */ + if (dev_priv->card_type == NV_40) + state->pllsel |= NV_PRAMDAC_PLL_COEFF_SELECT_USE_VPLL2_TRUE; + /* again nv40 and some nv43 act more like nv3x as described above */ + if (dev_priv->chipset < 0x41) + state->pllsel |= NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_MPLL | + NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_NVPLL; + state->pllsel |= nv_crtc->index ? PLLSEL_VPLL2_MASK : PLLSEL_VPLL1_MASK; + + if (pv->NM2) + NV_DEBUG_KMS(dev, "vpll: n1 %d n2 %d m1 %d m2 %d log2p %d\n", + pv->N1, pv->N2, pv->M1, pv->M2, pv->log2P); + else + NV_DEBUG_KMS(dev, "vpll: n %d m %d log2p %d\n", + pv->N1, pv->M1, pv->log2P); + + nv_crtc->cursor.set_offset(nv_crtc, nv_crtc->cursor.offset); +} + +static void +nv_crtc_dpms(struct drm_crtc *crtc, int mode) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_device *dev = crtc->dev; + unsigned char seq1 = 0, crtc17 = 0; + unsigned char crtc1A; + + NV_DEBUG_KMS(dev, "Setting dpms mode %d on CRTC %d\n", mode, + nv_crtc->index); + + if (nv_crtc->last_dpms == mode) /* Don't do unnecesary mode changes. */ + return; + + nv_crtc->last_dpms = mode; + + if (nv_two_heads(dev)) + NVSetOwner(dev, nv_crtc->index); + + /* nv4ref indicates these two RPC1 bits inhibit h/v sync */ + crtc1A = NVReadVgaCrtc(dev, nv_crtc->index, + NV_CIO_CRE_RPC1_INDEX) & ~0xC0; + switch (mode) { + case DRM_MODE_DPMS_STANDBY: + /* Screen: Off; HSync: Off, VSync: On -- Not Supported */ + seq1 = 0x20; + crtc17 = 0x80; + crtc1A |= 0x80; + break; + case DRM_MODE_DPMS_SUSPEND: + /* Screen: Off; HSync: On, VSync: Off -- Not Supported */ + seq1 = 0x20; + crtc17 = 0x80; + crtc1A |= 0x40; + break; + case DRM_MODE_DPMS_OFF: + /* Screen: Off; HSync: Off, VSync: Off */ + seq1 = 0x20; + crtc17 = 0x00; + crtc1A |= 0xC0; + break; + case DRM_MODE_DPMS_ON: + default: + /* Screen: On; HSync: On, VSync: On */ + seq1 = 0x00; + crtc17 = 0x80; + break; + } + + NVVgaSeqReset(dev, nv_crtc->index, true); + /* Each head has it's own sequencer, so we can turn it off when we want */ + seq1 |= (NVReadVgaSeq(dev, nv_crtc->index, NV_VIO_SR_CLOCK_INDEX) & ~0x20); + NVWriteVgaSeq(dev, nv_crtc->index, NV_VIO_SR_CLOCK_INDEX, seq1); + crtc17 |= (NVReadVgaCrtc(dev, nv_crtc->index, NV_CIO_CR_MODE_INDEX) & ~0x80); + mdelay(10); + NVWriteVgaCrtc(dev, nv_crtc->index, NV_CIO_CR_MODE_INDEX, crtc17); + NVVgaSeqReset(dev, nv_crtc->index, false); + + NVWriteVgaCrtc(dev, nv_crtc->index, NV_CIO_CRE_RPC1_INDEX, crtc1A); +} + +static bool +nv_crtc_mode_fixup(struct drm_crtc *crtc, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + return true; +} + +static void +nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode) +{ + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + struct drm_framebuffer *fb = crtc->fb; + + /* Calculate our timings */ + int horizDisplay = (mode->crtc_hdisplay >> 3) - 1; + int horizStart = (mode->crtc_hsync_start >> 3) + 1; + int horizEnd = (mode->crtc_hsync_end >> 3) + 1; + int horizTotal = (mode->crtc_htotal >> 3) - 5; + int horizBlankStart = (mode->crtc_hdisplay >> 3) - 1; + int horizBlankEnd = (mode->crtc_htotal >> 3) - 1; + int vertDisplay = mode->crtc_vdisplay - 1; + int vertStart = mode->crtc_vsync_start - 1; + int vertEnd = mode->crtc_vsync_end - 1; + int vertTotal = mode->crtc_vtotal - 2; + int vertBlankStart = mode->crtc_vdisplay - 1; + int vertBlankEnd = mode->crtc_vtotal - 1; + + struct drm_encoder *encoder; + bool fp_output = false; + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (encoder->crtc == crtc && + (nv_encoder->dcb->type == OUTPUT_LVDS || + nv_encoder->dcb->type == OUTPUT_TMDS)) + fp_output = true; + } + + if (fp_output) { + vertStart = vertTotal - 3; + vertEnd = vertTotal - 2; + vertBlankStart = vertStart; + horizStart = horizTotal - 5; + horizEnd = horizTotal - 2; + horizBlankEnd = horizTotal + 4; +#if 0 + if (dev->overlayAdaptor && dev_priv->card_type >= NV_10) + /* This reportedly works around some video overlay bandwidth problems */ + horizTotal += 2; +#endif + } + + if (mode->flags & DRM_MODE_FLAG_INTERLACE) + vertTotal |= 1; + +#if 0 + ErrorF("horizDisplay: 0x%X \n", horizDisplay); + ErrorF("horizStart: 0x%X \n", horizStart); + ErrorF("horizEnd: 0x%X \n", horizEnd); + ErrorF("horizTotal: 0x%X \n", horizTotal); + ErrorF("horizBlankStart: 0x%X \n", horizBlankStart); + ErrorF("horizBlankEnd: 0x%X \n", horizBlankEnd); + ErrorF("vertDisplay: 0x%X \n", vertDisplay); + ErrorF("vertStart: 0x%X \n", vertStart); + ErrorF("vertEnd: 0x%X \n", vertEnd); + ErrorF("vertTotal: 0x%X \n", vertTotal); + ErrorF("vertBlankStart: 0x%X \n", vertBlankStart); + ErrorF("vertBlankEnd: 0x%X \n", vertBlankEnd); +#endif + + /* + * compute correct Hsync & Vsync polarity + */ + if ((mode->flags & (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC)) + && (mode->flags & (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC))) { + + regp->MiscOutReg = 0x23; + if (mode->flags & DRM_MODE_FLAG_NHSYNC) + regp->MiscOutReg |= 0x40; + if (mode->flags & DRM_MODE_FLAG_NVSYNC) + regp->MiscOutReg |= 0x80; + } else { + int vdisplay = mode->vdisplay; + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) + vdisplay *= 2; + if (mode->vscan > 1) + vdisplay *= mode->vscan; + if (vdisplay < 400) + regp->MiscOutReg = 0xA3; /* +hsync -vsync */ + else if (vdisplay < 480) + regp->MiscOutReg = 0x63; /* -hsync +vsync */ + else if (vdisplay < 768) + regp->MiscOutReg = 0xE3; /* -hsync -vsync */ + else + regp->MiscOutReg = 0x23; /* +hsync +vsync */ + } + + regp->MiscOutReg |= (mode->clock_index & 0x03) << 2; + + /* + * Time Sequencer + */ + regp->Sequencer[NV_VIO_SR_RESET_INDEX] = 0x00; + /* 0x20 disables the sequencer */ + if (mode->flags & DRM_MODE_FLAG_CLKDIV2) + regp->Sequencer[NV_VIO_SR_CLOCK_INDEX] = 0x29; + else + regp->Sequencer[NV_VIO_SR_CLOCK_INDEX] = 0x21; + regp->Sequencer[NV_VIO_SR_PLANE_MASK_INDEX] = 0x0F; + regp->Sequencer[NV_VIO_SR_CHAR_MAP_INDEX] = 0x00; + regp->Sequencer[NV_VIO_SR_MEM_MODE_INDEX] = 0x0E; + + /* + * CRTC + */ + regp->CRTC[NV_CIO_CR_HDT_INDEX] = horizTotal; + regp->CRTC[NV_CIO_CR_HDE_INDEX] = horizDisplay; + regp->CRTC[NV_CIO_CR_HBS_INDEX] = horizBlankStart; + regp->CRTC[NV_CIO_CR_HBE_INDEX] = (1 << 7) | + XLATE(horizBlankEnd, 0, NV_CIO_CR_HBE_4_0); + regp->CRTC[NV_CIO_CR_HRS_INDEX] = horizStart; + regp->CRTC[NV_CIO_CR_HRE_INDEX] = XLATE(horizBlankEnd, 5, NV_CIO_CR_HRE_HBE_5) | + XLATE(horizEnd, 0, NV_CIO_CR_HRE_4_0); + regp->CRTC[NV_CIO_CR_VDT_INDEX] = vertTotal; + regp->CRTC[NV_CIO_CR_OVL_INDEX] = XLATE(vertStart, 9, NV_CIO_CR_OVL_VRS_9) | + XLATE(vertDisplay, 9, NV_CIO_CR_OVL_VDE_9) | + XLATE(vertTotal, 9, NV_CIO_CR_OVL_VDT_9) | + (1 << 4) | + XLATE(vertBlankStart, 8, NV_CIO_CR_OVL_VBS_8) | + XLATE(vertStart, 8, NV_CIO_CR_OVL_VRS_8) | + XLATE(vertDisplay, 8, NV_CIO_CR_OVL_VDE_8) | + XLATE(vertTotal, 8, NV_CIO_CR_OVL_VDT_8); + regp->CRTC[NV_CIO_CR_RSAL_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_CELL_HT_INDEX] = ((mode->flags & DRM_MODE_FLAG_DBLSCAN) ? MASK(NV_CIO_CR_CELL_HT_SCANDBL) : 0) | + 1 << 6 | + XLATE(vertBlankStart, 9, NV_CIO_CR_CELL_HT_VBS_9); + regp->CRTC[NV_CIO_CR_CURS_ST_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_CURS_END_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_SA_HI_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_SA_LO_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_TCOFF_HI_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_TCOFF_LO_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_VRS_INDEX] = vertStart; + regp->CRTC[NV_CIO_CR_VRE_INDEX] = 1 << 5 | XLATE(vertEnd, 0, NV_CIO_CR_VRE_3_0); + regp->CRTC[NV_CIO_CR_VDE_INDEX] = vertDisplay; + /* framebuffer can be larger than crtc scanout area. */ + regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = fb->pitch / 8; + regp->CRTC[NV_CIO_CR_ULINE_INDEX] = 0x00; + regp->CRTC[NV_CIO_CR_VBS_INDEX] = vertBlankStart; + regp->CRTC[NV_CIO_CR_VBE_INDEX] = vertBlankEnd; + regp->CRTC[NV_CIO_CR_MODE_INDEX] = 0x43; + regp->CRTC[NV_CIO_CR_LCOMP_INDEX] = 0xff; + + /* + * Some extended CRTC registers (they are not saved with the rest of the vga regs). + */ + + /* framebuffer can be larger than crtc scanout area. */ + regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = XLATE(fb->pitch / 8, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); + regp->CRTC[NV_CIO_CRE_RPC1_INDEX] = mode->crtc_hdisplay < 1280 ? + MASK(NV_CIO_CRE_RPC1_LARGE) : 0x00; + regp->CRTC[NV_CIO_CRE_LSR_INDEX] = XLATE(horizBlankEnd, 6, NV_CIO_CRE_LSR_HBE_6) | + XLATE(vertBlankStart, 10, NV_CIO_CRE_LSR_VBS_10) | + XLATE(vertStart, 10, NV_CIO_CRE_LSR_VRS_10) | + XLATE(vertDisplay, 10, NV_CIO_CRE_LSR_VDE_10) | + XLATE(vertTotal, 10, NV_CIO_CRE_LSR_VDT_10); + regp->CRTC[NV_CIO_CRE_HEB__INDEX] = XLATE(horizStart, 8, NV_CIO_CRE_HEB_HRS_8) | + XLATE(horizBlankStart, 8, NV_CIO_CRE_HEB_HBS_8) | + XLATE(horizDisplay, 8, NV_CIO_CRE_HEB_HDE_8) | + XLATE(horizTotal, 8, NV_CIO_CRE_HEB_HDT_8); + regp->CRTC[NV_CIO_CRE_EBR_INDEX] = XLATE(vertBlankStart, 11, NV_CIO_CRE_EBR_VBS_11) | + XLATE(vertStart, 11, NV_CIO_CRE_EBR_VRS_11) | + XLATE(vertDisplay, 11, NV_CIO_CRE_EBR_VDE_11) | + XLATE(vertTotal, 11, NV_CIO_CRE_EBR_VDT_11); + + if (mode->flags & DRM_MODE_FLAG_INTERLACE) { + horizTotal = (horizTotal >> 1) & ~1; + regp->CRTC[NV_CIO_CRE_ILACE__INDEX] = horizTotal; + regp->CRTC[NV_CIO_CRE_HEB__INDEX] |= XLATE(horizTotal, 8, NV_CIO_CRE_HEB_ILC_8); + } else + regp->CRTC[NV_CIO_CRE_ILACE__INDEX] = 0xff; /* interlace off */ + + /* + * Graphics Display Controller + */ + regp->Graphics[NV_VIO_GX_SR_INDEX] = 0x00; + regp->Graphics[NV_VIO_GX_SREN_INDEX] = 0x00; + regp->Graphics[NV_VIO_GX_CCOMP_INDEX] = 0x00; + regp->Graphics[NV_VIO_GX_ROP_INDEX] = 0x00; + regp->Graphics[NV_VIO_GX_READ_MAP_INDEX] = 0x00; + regp->Graphics[NV_VIO_GX_MODE_INDEX] = 0x40; /* 256 color mode */ + regp->Graphics[NV_VIO_GX_MISC_INDEX] = 0x05; /* map 64k mem + graphic mode */ + regp->Graphics[NV_VIO_GX_DONT_CARE_INDEX] = 0x0F; + regp->Graphics[NV_VIO_GX_BIT_MASK_INDEX] = 0xFF; + + regp->Attribute[0] = 0x00; /* standard colormap translation */ + regp->Attribute[1] = 0x01; + regp->Attribute[2] = 0x02; + regp->Attribute[3] = 0x03; + regp->Attribute[4] = 0x04; + regp->Attribute[5] = 0x05; + regp->Attribute[6] = 0x06; + regp->Attribute[7] = 0x07; + regp->Attribute[8] = 0x08; + regp->Attribute[9] = 0x09; + regp->Attribute[10] = 0x0A; + regp->Attribute[11] = 0x0B; + regp->Attribute[12] = 0x0C; + regp->Attribute[13] = 0x0D; + regp->Attribute[14] = 0x0E; + regp->Attribute[15] = 0x0F; + regp->Attribute[NV_CIO_AR_MODE_INDEX] = 0x01; /* Enable graphic mode */ + /* Non-vga */ + regp->Attribute[NV_CIO_AR_OSCAN_INDEX] = 0x00; + regp->Attribute[NV_CIO_AR_PLANE_INDEX] = 0x0F; /* enable all color planes */ + regp->Attribute[NV_CIO_AR_HPP_INDEX] = 0x00; + regp->Attribute[NV_CIO_AR_CSEL_INDEX] = 0x00; +} + +/** + * Sets up registers for the given mode/adjusted_mode pair. + * + * The clocks, CRTCs and outputs attached to this CRTC must be off. + * + * This shouldn't enable any clocks, CRTCs, or outputs, but they should + * be easily turned on/off after this. + */ +static void +nv_crtc_mode_set_regs(struct drm_crtc *crtc, struct drm_display_mode * mode) +{ + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + struct nv04_crtc_reg *savep = &dev_priv->saved_reg.crtc_reg[nv_crtc->index]; + struct drm_encoder *encoder; + bool lvds_output = false, tmds_output = false, tv_output = false, + off_chip_digital = false; + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + bool digital = false; + + if (encoder->crtc != crtc) + continue; + + if (nv_encoder->dcb->type == OUTPUT_LVDS) + digital = lvds_output = true; + if (nv_encoder->dcb->type == OUTPUT_TV) + tv_output = true; + if (nv_encoder->dcb->type == OUTPUT_TMDS) + digital = tmds_output = true; + if (nv_encoder->dcb->location != DCB_LOC_ON_CHIP && digital) + off_chip_digital = true; + } + + /* Registers not directly related to the (s)vga mode */ + + /* What is the meaning of this register? */ + /* A few popular values are 0x18, 0x1c, 0x38, 0x3c */ + regp->CRTC[NV_CIO_CRE_ENH_INDEX] = savep->CRTC[NV_CIO_CRE_ENH_INDEX] & ~(1<<5); + + regp->crtc_eng_ctrl = 0; + /* Except for rare conditions I2C is enabled on the primary crtc */ + if (nv_crtc->index == 0) + regp->crtc_eng_ctrl |= NV_CRTC_FSEL_I2C; +#if 0 + /* Set overlay to desired crtc. */ + if (dev->overlayAdaptor) { + NVPortPrivPtr pPriv = GET_OVERLAY_PRIVATE(dev); + if (pPriv->overlayCRTC == nv_crtc->index) + regp->crtc_eng_ctrl |= NV_CRTC_FSEL_OVERLAY; + } +#endif + + /* ADDRESS_SPACE_PNVM is the same as setting HCUR_ASI */ + regp->cursor_cfg = NV_PCRTC_CURSOR_CONFIG_CUR_LINES_64 | + NV_PCRTC_CURSOR_CONFIG_CUR_PIXELS_64 | + NV_PCRTC_CURSOR_CONFIG_ADDRESS_SPACE_PNVM; + if (dev_priv->chipset >= 0x11) + regp->cursor_cfg |= NV_PCRTC_CURSOR_CONFIG_CUR_BPP_32; + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) + regp->cursor_cfg |= NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE; + + /* Unblock some timings */ + regp->CRTC[NV_CIO_CRE_53] = 0; + regp->CRTC[NV_CIO_CRE_54] = 0; + + /* 0x00 is disabled, 0x11 is lvds, 0x22 crt and 0x88 tmds */ + if (lvds_output) + regp->CRTC[NV_CIO_CRE_SCRATCH3__INDEX] = 0x11; + else if (tmds_output) + regp->CRTC[NV_CIO_CRE_SCRATCH3__INDEX] = 0x88; + else + regp->CRTC[NV_CIO_CRE_SCRATCH3__INDEX] = 0x22; + + /* These values seem to vary */ + /* This register seems to be used by the bios to make certain decisions on some G70 cards? */ + regp->CRTC[NV_CIO_CRE_SCRATCH4__INDEX] = savep->CRTC[NV_CIO_CRE_SCRATCH4__INDEX]; + + nv_crtc_set_digital_vibrance(crtc, nv_crtc->saturation); + + /* probably a scratch reg, but kept for cargo-cult purposes: + * bit0: crtc0?, head A + * bit6: lvds, head A + * bit7: (only in X), head A + */ + if (nv_crtc->index == 0) + regp->CRTC[NV_CIO_CRE_4B] = savep->CRTC[NV_CIO_CRE_4B] | 0x80; + + /* The blob seems to take the current value from crtc 0, add 4 to that + * and reuse the old value for crtc 1 */ + regp->CRTC[NV_CIO_CRE_TVOUT_LATENCY] = dev_priv->saved_reg.crtc_reg[0].CRTC[NV_CIO_CRE_TVOUT_LATENCY]; + if (!nv_crtc->index) + regp->CRTC[NV_CIO_CRE_TVOUT_LATENCY] += 4; + + /* the blob sometimes sets |= 0x10 (which is the same as setting |= + * 1 << 30 on 0x60.830), for no apparent reason */ + regp->CRTC[NV_CIO_CRE_59] = off_chip_digital; + + regp->crtc_830 = mode->crtc_vdisplay - 3; + regp->crtc_834 = mode->crtc_vdisplay - 1; + + if (dev_priv->card_type == NV_40) + /* This is what the blob does */ + regp->crtc_850 = NVReadCRTC(dev, 0, NV_PCRTC_850); + + if (dev_priv->card_type >= NV_30) + regp->gpio_ext = NVReadCRTC(dev, 0, NV_PCRTC_GPIO_EXT); + + regp->crtc_cfg = NV_PCRTC_CONFIG_START_ADDRESS_HSYNC; + + /* Some misc regs */ + if (dev_priv->card_type == NV_40) { + regp->CRTC[NV_CIO_CRE_85] = 0xFF; + regp->CRTC[NV_CIO_CRE_86] = 0x1; + } + + regp->CRTC[NV_CIO_CRE_PIXEL_INDEX] = (crtc->fb->depth + 1) / 8; + /* Enable slaved mode (called MODE_TV in nv4ref.h) */ + if (lvds_output || tmds_output || tv_output) + regp->CRTC[NV_CIO_CRE_PIXEL_INDEX] |= (1 << 7); + + /* Generic PRAMDAC regs */ + + if (dev_priv->card_type >= NV_10) + /* Only bit that bios and blob set. */ + regp->nv10_cursync = (1 << 25); + + regp->ramdac_gen_ctrl = NV_PRAMDAC_GENERAL_CONTROL_BPC_8BITS | + NV_PRAMDAC_GENERAL_CONTROL_VGA_STATE_SEL | + NV_PRAMDAC_GENERAL_CONTROL_PIXMIX_ON; + if (crtc->fb->depth == 16) + regp->ramdac_gen_ctrl |= NV_PRAMDAC_GENERAL_CONTROL_ALT_MODE_SEL; + if (dev_priv->chipset >= 0x11) + regp->ramdac_gen_ctrl |= NV_PRAMDAC_GENERAL_CONTROL_PIPE_LONG; + + regp->ramdac_630 = 0; /* turn off green mode (tv test pattern?) */ + regp->tv_setup = 0; + + nv_crtc_set_image_sharpening(crtc, nv_crtc->sharpness); + + /* Some values the blob sets */ + regp->ramdac_8c0 = 0x100; + regp->ramdac_a20 = 0x0; + regp->ramdac_a24 = 0xfffff; + regp->ramdac_a34 = 0x1; +} + +/** + * Sets up registers for the given mode/adjusted_mode pair. + * + * The clocks, CRTCs and outputs attached to this CRTC must be off. + * + * This shouldn't enable any clocks, CRTCs, or outputs, but they should + * be easily turned on/off after this. + */ +static int +nv_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode, + int x, int y, struct drm_framebuffer *old_fb) +{ + struct drm_device *dev = crtc->dev; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_nouveau_private *dev_priv = dev->dev_private; + + NV_DEBUG_KMS(dev, "CTRC mode on CRTC %d:\n", nv_crtc->index); + drm_mode_debug_printmodeline(adjusted_mode); + + /* unlock must come after turning off FP_TG_CONTROL in output_prepare */ + nv_lock_vga_crtc_shadow(dev, nv_crtc->index, -1); + + nv_crtc_mode_set_vga(crtc, adjusted_mode); + /* calculated in nv04_dfp_prepare, nv40 needs it written before calculating PLLs */ + if (dev_priv->card_type == NV_40) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_SEL_CLK, dev_priv->mode_reg.sel_clk); + nv_crtc_mode_set_regs(crtc, adjusted_mode); + nv_crtc_calc_state_ext(crtc, mode, adjusted_mode->clock); + return 0; +} + +static void nv_crtc_save(struct drm_crtc *crtc) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_nouveau_private *dev_priv = crtc->dev->dev_private; + struct nv04_mode_state *state = &dev_priv->mode_reg; + struct nv04_crtc_reg *crtc_state = &state->crtc_reg[nv_crtc->index]; + struct nv04_mode_state *saved = &dev_priv->saved_reg; + struct nv04_crtc_reg *crtc_saved = &saved->crtc_reg[nv_crtc->index]; + + if (nv_two_heads(crtc->dev)) + NVSetOwner(crtc->dev, nv_crtc->index); + + nouveau_hw_save_state(crtc->dev, nv_crtc->index, saved); + + /* init some state to saved value */ + state->sel_clk = saved->sel_clk & ~(0x5 << 16); + crtc_state->CRTC[NV_CIO_CRE_LCD__INDEX] = crtc_saved->CRTC[NV_CIO_CRE_LCD__INDEX]; + state->pllsel = saved->pllsel & ~(PLLSEL_VPLL1_MASK | PLLSEL_VPLL2_MASK | PLLSEL_TV_MASK); + crtc_state->gpio_ext = crtc_saved->gpio_ext; +} + +static void nv_crtc_restore(struct drm_crtc *crtc) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_nouveau_private *dev_priv = crtc->dev->dev_private; + int head = nv_crtc->index; + uint8_t saved_cr21 = dev_priv->saved_reg.crtc_reg[head].CRTC[NV_CIO_CRE_21]; + + if (nv_two_heads(crtc->dev)) + NVSetOwner(crtc->dev, head); + + nouveau_hw_load_state(crtc->dev, head, &dev_priv->saved_reg); + nv_lock_vga_crtc_shadow(crtc->dev, head, saved_cr21); + + nv_crtc->last_dpms = NV_DPMS_CLEARED; +} + +static void nv_crtc_prepare(struct drm_crtc *crtc) +{ + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_crtc_helper_funcs *funcs = crtc->helper_private; + + if (nv_two_heads(dev)) + NVSetOwner(dev, nv_crtc->index); + + funcs->dpms(crtc, DRM_MODE_DPMS_OFF); + + NVBlankScreen(dev, nv_crtc->index, true); + + /* Some more preperation. */ + NVWriteCRTC(dev, nv_crtc->index, NV_PCRTC_CONFIG, NV_PCRTC_CONFIG_START_ADDRESS_NON_VGA); + if (dev_priv->card_type == NV_40) { + uint32_t reg900 = NVReadRAMDAC(dev, nv_crtc->index, NV_PRAMDAC_900); + NVWriteRAMDAC(dev, nv_crtc->index, NV_PRAMDAC_900, reg900 & ~0x10000); + } +} + +static void nv_crtc_commit(struct drm_crtc *crtc) +{ + struct drm_device *dev = crtc->dev; + struct drm_crtc_helper_funcs *funcs = crtc->helper_private; + struct drm_nouveau_private *dev_priv = crtc->dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + nouveau_hw_load_state(dev, nv_crtc->index, &dev_priv->mode_reg); + nv04_crtc_mode_set_base(crtc, crtc->x, crtc->y, NULL); + +#ifdef __BIG_ENDIAN + /* turn on LFB swapping */ + { + uint8_t tmp = NVReadVgaCrtc(dev, nv_crtc->index, NV_CIO_CRE_RCR); + tmp |= MASK(NV_CIO_CRE_RCR_ENDIAN_BIG); + NVWriteVgaCrtc(dev, nv_crtc->index, NV_CIO_CRE_RCR, tmp); + } +#endif + + funcs->dpms(crtc, DRM_MODE_DPMS_ON); +} + +static void nv_crtc_destroy(struct drm_crtc *crtc) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + NV_DEBUG_KMS(crtc->dev, "\n"); + + if (!nv_crtc) + return; + + drm_crtc_cleanup(crtc); + + nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); + kfree(nv_crtc); +} + +static void +nv_crtc_gamma_load(struct drm_crtc *crtc) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_device *dev = nv_crtc->base.dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct rgb { uint8_t r, g, b; } __attribute__((packed)) *rgbs; + int i; + + rgbs = (struct rgb *)dev_priv->mode_reg.crtc_reg[nv_crtc->index].DAC; + for (i = 0; i < 256; i++) { + rgbs[i].r = nv_crtc->lut.r[i] >> 8; + rgbs[i].g = nv_crtc->lut.g[i] >> 8; + rgbs[i].b = nv_crtc->lut.b[i] >> 8; + } + + nouveau_hw_load_state_palette(dev, nv_crtc->index, &dev_priv->mode_reg); +} + +static void +nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t size) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + int i; + + if (size != 256) + return; + + for (i = 0; i < 256; i++) { + nv_crtc->lut.r[i] = r[i]; + nv_crtc->lut.g[i] = g[i]; + nv_crtc->lut.b[i] = b[i]; + } + + /* We need to know the depth before we upload, but it's possible to + * get called before a framebuffer is bound. If this is the case, + * mark the lut values as dirty by setting depth==0, and it'll be + * uploaded on the first mode_set_base() + */ + if (!nv_crtc->base.fb) { + nv_crtc->lut.depth = 0; + return; + } + + nv_crtc_gamma_load(crtc); +} + +static int +nv04_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct drm_device *dev = crtc->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + struct drm_framebuffer *drm_fb = nv_crtc->base.fb; + struct nouveau_framebuffer *fb = nouveau_framebuffer(drm_fb); + int arb_burst, arb_lwm; + int ret; + + ret = nouveau_bo_pin(fb->nvbo, TTM_PL_FLAG_VRAM); + if (ret) + return ret; + + if (old_fb) { + struct nouveau_framebuffer *ofb = nouveau_framebuffer(old_fb); + nouveau_bo_unpin(ofb->nvbo); + } + + nv_crtc->fb.offset = fb->nvbo->bo.offset; + + if (nv_crtc->lut.depth != drm_fb->depth) { + nv_crtc->lut.depth = drm_fb->depth; + nv_crtc_gamma_load(crtc); + } + + /* Update the framebuffer format. */ + regp->CRTC[NV_CIO_CRE_PIXEL_INDEX] &= ~3; + regp->CRTC[NV_CIO_CRE_PIXEL_INDEX] |= (crtc->fb->depth + 1) / 8; + regp->ramdac_gen_ctrl &= ~NV_PRAMDAC_GENERAL_CONTROL_ALT_MODE_SEL; + if (crtc->fb->depth == 16) + regp->ramdac_gen_ctrl |= NV_PRAMDAC_GENERAL_CONTROL_ALT_MODE_SEL; + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_PIXEL_INDEX); + NVWriteRAMDAC(dev, nv_crtc->index, NV_PRAMDAC_GENERAL_CONTROL, + regp->ramdac_gen_ctrl); + + regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = drm_fb->pitch >> 3; + regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = + XLATE(drm_fb->pitch >> 3, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_RPC0_INDEX); + crtc_wr_cio_state(crtc, regp, NV_CIO_CR_OFFSET_INDEX); + + /* Update the framebuffer location. */ + regp->fb_start = nv_crtc->fb.offset & ~3; + regp->fb_start += (y * drm_fb->pitch) + (x * drm_fb->bits_per_pixel / 8); + NVWriteCRTC(dev, nv_crtc->index, NV_PCRTC_START, regp->fb_start); + + /* Update the arbitration parameters. */ + nouveau_calc_arb(dev, crtc->mode.clock, drm_fb->bits_per_pixel, + &arb_burst, &arb_lwm); + + regp->CRTC[NV_CIO_CRE_FF_INDEX] = arb_burst; + regp->CRTC[NV_CIO_CRE_FFLWM__INDEX] = arb_lwm & 0xff; + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_FF_INDEX); + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_FFLWM__INDEX); + + if (dev_priv->card_type >= NV_30) { + regp->CRTC[NV_CIO_CRE_47] = arb_lwm >> 8; + crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_47); + } + + return 0; +} + +static void nv04_cursor_upload(struct drm_device *dev, struct nouveau_bo *src, + struct nouveau_bo *dst) +{ + int width = nv_cursor_width(dev); + uint32_t pixel; + int i, j; + + for (i = 0; i < width; i++) { + for (j = 0; j < width; j++) { + pixel = nouveau_bo_rd32(src, i*64 + j); + + nouveau_bo_wr16(dst, i*width + j, (pixel & 0x80000000) >> 16 + | (pixel & 0xf80000) >> 9 + | (pixel & 0xf800) >> 6 + | (pixel & 0xf8) >> 3); + } + } +} + +static void nv11_cursor_upload(struct drm_device *dev, struct nouveau_bo *src, + struct nouveau_bo *dst) +{ + uint32_t pixel; + int alpha, i; + + /* nv11+ supports premultiplied (PM), or non-premultiplied (NPM) alpha + * cursors (though NPM in combination with fp dithering may not work on + * nv11, from "nv" driver history) + * NPM mode needs NV_PCRTC_CURSOR_CONFIG_ALPHA_BLEND set and is what the + * blob uses, however we get given PM cursors so we use PM mode + */ + for (i = 0; i < 64 * 64; i++) { + pixel = nouveau_bo_rd32(src, i); + + /* hw gets unhappy if alpha <= rgb values. for a PM image "less + * than" shouldn't happen; fix "equal to" case by adding one to + * alpha channel (slightly inaccurate, but so is attempting to + * get back to NPM images, due to limits of integer precision) + */ + alpha = pixel >> 24; + if (alpha > 0 && alpha < 255) + pixel = (pixel & 0x00ffffff) | ((alpha + 1) << 24); + +#ifdef __BIG_ENDIAN + { + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->chipset == 0x11) { + pixel = ((pixel & 0x000000ff) << 24) | + ((pixel & 0x0000ff00) << 8) | + ((pixel & 0x00ff0000) >> 8) | + ((pixel & 0xff000000) >> 24); + } + } +#endif + + nouveau_bo_wr32(dst, i, pixel); + } +} + +static int +nv04_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, + uint32_t buffer_handle, uint32_t width, uint32_t height) +{ + struct drm_nouveau_private *dev_priv = crtc->dev->dev_private; + struct drm_device *dev = dev_priv->dev; + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + struct nouveau_bo *cursor = NULL; + struct drm_gem_object *gem; + int ret = 0; + + if (width != 64 || height != 64) + return -EINVAL; + + if (!buffer_handle) { + nv_crtc->cursor.hide(nv_crtc, true); + return 0; + } + + gem = drm_gem_object_lookup(dev, file_priv, buffer_handle); + if (!gem) + return -EINVAL; + cursor = nouveau_gem_object(gem); + + ret = nouveau_bo_map(cursor); + if (ret) + goto out; + + if (dev_priv->chipset >= 0x11) + nv11_cursor_upload(dev, cursor, nv_crtc->cursor.nvbo); + else + nv04_cursor_upload(dev, cursor, nv_crtc->cursor.nvbo); + + nouveau_bo_unmap(cursor); + nv_crtc->cursor.offset = nv_crtc->cursor.nvbo->bo.offset; + nv_crtc->cursor.set_offset(nv_crtc, nv_crtc->cursor.offset); + nv_crtc->cursor.show(nv_crtc, true); +out: + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(gem); + mutex_unlock(&dev->struct_mutex); + return ret; +} + +static int +nv04_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + nv_crtc->cursor.set_pos(nv_crtc, x, y); + return 0; +} + +static const struct drm_crtc_funcs nv04_crtc_funcs = { + .save = nv_crtc_save, + .restore = nv_crtc_restore, + .cursor_set = nv04_crtc_cursor_set, + .cursor_move = nv04_crtc_cursor_move, + .gamma_set = nv_crtc_gamma_set, + .set_config = drm_crtc_helper_set_config, + .destroy = nv_crtc_destroy, +}; + +static const struct drm_crtc_helper_funcs nv04_crtc_helper_funcs = { + .dpms = nv_crtc_dpms, + .prepare = nv_crtc_prepare, + .commit = nv_crtc_commit, + .mode_fixup = nv_crtc_mode_fixup, + .mode_set = nv_crtc_mode_set, + .mode_set_base = nv04_crtc_mode_set_base, + .load_lut = nv_crtc_gamma_load, +}; + +int +nv04_crtc_create(struct drm_device *dev, int crtc_num) +{ + struct nouveau_crtc *nv_crtc; + int ret, i; + + nv_crtc = kzalloc(sizeof(*nv_crtc), GFP_KERNEL); + if (!nv_crtc) + return -ENOMEM; + + for (i = 0; i < 256; i++) { + nv_crtc->lut.r[i] = i << 8; + nv_crtc->lut.g[i] = i << 8; + nv_crtc->lut.b[i] = i << 8; + } + nv_crtc->lut.depth = 0; + + nv_crtc->index = crtc_num; + nv_crtc->last_dpms = NV_DPMS_CLEARED; + + drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs); + drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs); + drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256); + + ret = nouveau_bo_new(dev, NULL, 64*64*4, 0x100, TTM_PL_FLAG_VRAM, + 0, 0x0000, false, true, &nv_crtc->cursor.nvbo); + if (!ret) { + ret = nouveau_bo_pin(nv_crtc->cursor.nvbo, TTM_PL_FLAG_VRAM); + if (!ret) + ret = nouveau_bo_map(nv_crtc->cursor.nvbo); + if (ret) + nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); + } + + nv04_cursor_init(nv_crtc); + + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_channel.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_channel.c @@ -0,0 +1,430 @@ +/* + * Copyright 2005-2006 Stephane Marchesin + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" +#include "nouveau_dma.h" + +static int +nouveau_channel_pushbuf_ctxdma_init(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_bo *pb = chan->pushbuf_bo; + struct nouveau_gpuobj *pushbuf = NULL; + uint32_t start = pb->bo.mem.mm_node->start << PAGE_SHIFT; + int ret; + + if (pb->bo.mem.mem_type == TTM_PL_TT) { + ret = nouveau_gpuobj_gart_dma_new(chan, 0, + dev_priv->gart_info.aper_size, + NV_DMA_ACCESS_RO, &pushbuf, + NULL); + chan->pushbuf_base = start; + } else + if (dev_priv->card_type != NV_04) { + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, 0, + dev_priv->fb_available_size, + NV_DMA_ACCESS_RO, + NV_DMA_TARGET_VIDMEM, &pushbuf); + chan->pushbuf_base = start; + } else { + /* NV04 cmdbuf hack, from original ddx.. not sure of it's + * exact reason for existing :) PCI access to cmdbuf in + * VRAM. + */ + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, + drm_get_resource_start(dev, 1), + dev_priv->fb_available_size, + NV_DMA_ACCESS_RO, + NV_DMA_TARGET_PCI, &pushbuf); + chan->pushbuf_base = start; + } + + ret = nouveau_gpuobj_ref_add(dev, chan, 0, pushbuf, &chan->pushbuf); + if (ret) { + NV_ERROR(dev, "Error referencing pushbuf ctxdma: %d\n", ret); + if (pushbuf != dev_priv->gart_info.sg_ctxdma) + nouveau_gpuobj_del(dev, &pushbuf); + return ret; + } + + return 0; +} + +static struct nouveau_bo * +nouveau_channel_user_pushbuf_alloc(struct drm_device *dev) +{ + struct nouveau_bo *pushbuf = NULL; + int location, ret; + + if (nouveau_vram_pushbuf) + location = TTM_PL_FLAG_VRAM; + else + location = TTM_PL_FLAG_TT; + + ret = nouveau_bo_new(dev, NULL, 65536, 0, location, 0, 0x0000, false, + true, &pushbuf); + if (ret) { + NV_ERROR(dev, "error allocating DMA push buffer: %d\n", ret); + return NULL; + } + + ret = nouveau_bo_pin(pushbuf, location); + if (ret) { + NV_ERROR(dev, "error pinning DMA push buffer: %d\n", ret); + nouveau_bo_ref(NULL, &pushbuf); + return NULL; + } + + return pushbuf; +} + +/* allocates and initializes a fifo for user space consumption */ +int +nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret, + struct drm_file *file_priv, + uint32_t vram_handle, uint32_t tt_handle) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_channel *chan; + int channel, user; + int ret; + + /* + * Alright, here is the full story + * Nvidia cards have multiple hw fifo contexts (praise them for that, + * no complicated crash-prone context switches) + * We allocate a new context for each app and let it write to it + * directly (woo, full userspace command submission !) + * When there are no more contexts, you lost + */ + for (channel = 0; channel < pfifo->channels; channel++) { + if (dev_priv->fifos[channel] == NULL) + break; + } + + /* no more fifos. you lost. */ + if (channel == pfifo->channels) + return -EINVAL; + + dev_priv->fifos[channel] = kzalloc(sizeof(struct nouveau_channel), + GFP_KERNEL); + if (!dev_priv->fifos[channel]) + return -ENOMEM; + dev_priv->fifo_alloc_count++; + chan = dev_priv->fifos[channel]; + INIT_LIST_HEAD(&chan->nvsw.vbl_wait); + INIT_LIST_HEAD(&chan->fence.pending); + chan->dev = dev; + chan->id = channel; + chan->file_priv = file_priv; + chan->vram_handle = vram_handle; + chan->gart_handle = tt_handle; + + NV_INFO(dev, "Allocating FIFO number %d\n", channel); + + /* Allocate DMA push buffer */ + chan->pushbuf_bo = nouveau_channel_user_pushbuf_alloc(dev); + if (!chan->pushbuf_bo) { + ret = -ENOMEM; + NV_ERROR(dev, "pushbuf %d\n", ret); + nouveau_channel_free(chan); + return ret; + } + + nouveau_dma_pre_init(chan); + + /* Locate channel's user control regs */ + if (dev_priv->card_type < NV_40) + user = NV03_USER(channel); + else + if (dev_priv->card_type < NV_50) + user = NV40_USER(channel); + else + user = NV50_USER(channel); + + chan->user = ioremap(pci_resource_start(dev->pdev, 0) + user, + PAGE_SIZE); + if (!chan->user) { + NV_ERROR(dev, "ioremap of regs failed.\n"); + nouveau_channel_free(chan); + return -ENOMEM; + } + chan->user_put = 0x40; + chan->user_get = 0x44; + + /* Allocate space for per-channel fixed notifier memory */ + ret = nouveau_notifier_init_channel(chan); + if (ret) { + NV_ERROR(dev, "ntfy %d\n", ret); + nouveau_channel_free(chan); + return ret; + } + + /* Setup channel's default objects */ + ret = nouveau_gpuobj_channel_init(chan, vram_handle, tt_handle); + if (ret) { + NV_ERROR(dev, "gpuobj %d\n", ret); + nouveau_channel_free(chan); + return ret; + } + + /* Create a dma object for the push buffer */ + ret = nouveau_channel_pushbuf_ctxdma_init(chan); + if (ret) { + NV_ERROR(dev, "pbctxdma %d\n", ret); + nouveau_channel_free(chan); + return ret; + } + + /* disable the fifo caches */ + pfifo->reassign(dev, false); + + /* Create a graphics context for new channel */ + ret = pgraph->create_context(chan); + if (ret) { + nouveau_channel_free(chan); + return ret; + } + + /* Construct inital RAMFC for new channel */ + ret = pfifo->create_context(chan); + if (ret) { + nouveau_channel_free(chan); + return ret; + } + + pfifo->reassign(dev, true); + + ret = nouveau_dma_init(chan); + if (!ret) + ret = nouveau_fence_init(chan); + if (ret) { + nouveau_channel_free(chan); + return ret; + } + + nouveau_debugfs_channel_init(chan); + + NV_INFO(dev, "%s: initialised FIFO %d\n", __func__, channel); + *chan_ret = chan; + return 0; +} + +/* stops a fifo */ +void +nouveau_channel_free(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + unsigned long flags; + int ret; + + NV_INFO(dev, "%s: freeing fifo %d\n", __func__, chan->id); + + nouveau_debugfs_channel_fini(chan); + + /* Give outstanding push buffers a chance to complete */ + spin_lock_irqsave(&chan->fence.lock, flags); + nouveau_fence_update(chan); + spin_unlock_irqrestore(&chan->fence.lock, flags); + if (chan->fence.sequence != chan->fence.sequence_ack) { + struct nouveau_fence *fence = NULL; + + ret = nouveau_fence_new(chan, &fence, true); + if (ret == 0) { + ret = nouveau_fence_wait(fence, NULL, false, false); + nouveau_fence_unref((void *)&fence); + } + + if (ret) + NV_ERROR(dev, "Failed to idle channel %d.\n", chan->id); + } + + /* Ensure all outstanding fences are signaled. They should be if the + * above attempts at idling were OK, but if we failed this'll tell TTM + * we're done with the buffers. + */ + nouveau_fence_fini(chan); + + /* Ensure the channel is no longer active on the GPU */ + pfifo->reassign(dev, false); + + pgraph->fifo_access(dev, false); + if (pgraph->channel(dev) == chan) + pgraph->unload_context(dev); + pgraph->destroy_context(chan); + pgraph->fifo_access(dev, true); + + if (pfifo->channel_id(dev) == chan->id) { + pfifo->disable(dev); + pfifo->unload_context(dev); + pfifo->enable(dev); + } + pfifo->destroy_context(chan); + + pfifo->reassign(dev, true); + + /* Release the channel's resources */ + nouveau_gpuobj_ref_del(dev, &chan->pushbuf); + if (chan->pushbuf_bo) { + nouveau_bo_unpin(chan->pushbuf_bo); + nouveau_bo_ref(NULL, &chan->pushbuf_bo); + } + nouveau_gpuobj_channel_takedown(chan); + nouveau_notifier_takedown_channel(chan); + if (chan->user) + iounmap(chan->user); + + dev_priv->fifos[chan->id] = NULL; + dev_priv->fifo_alloc_count--; + kfree(chan); +} + +/* cleans up all the fifos from file_priv */ +void +nouveau_channel_cleanup(struct drm_device *dev, struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + int i; + + NV_DEBUG(dev, "clearing FIFO enables from file_priv\n"); + for (i = 0; i < engine->fifo.channels; i++) { + struct nouveau_channel *chan = dev_priv->fifos[i]; + + if (chan && chan->file_priv == file_priv) + nouveau_channel_free(chan); + } +} + +int +nouveau_channel_owner(struct drm_device *dev, struct drm_file *file_priv, + int channel) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + + if (channel >= engine->fifo.channels) + return 0; + if (dev_priv->fifos[channel] == NULL) + return 0; + + return (dev_priv->fifos[channel]->file_priv == file_priv); +} + +/*********************************** + * ioctls wrapping the functions + ***********************************/ + +static int +nouveau_ioctl_fifo_alloc(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_channel_alloc *init = data; + struct nouveau_channel *chan; + int ret; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + if (dev_priv->engine.graph.accel_blocked) + return -ENODEV; + + if (init->fb_ctxdma_handle == ~0 || init->tt_ctxdma_handle == ~0) + return -EINVAL; + + ret = nouveau_channel_alloc(dev, &chan, file_priv, + init->fb_ctxdma_handle, + init->tt_ctxdma_handle); + if (ret) + return ret; + init->channel = chan->id; + + init->subchan[0].handle = NvM2MF; + if (dev_priv->card_type < NV_50) + init->subchan[0].grclass = 0x0039; + else + init->subchan[0].grclass = 0x5039; + init->subchan[1].handle = NvSw; + init->subchan[1].grclass = NV_SW; + init->nr_subchan = 2; + + /* Named memory object area */ + ret = drm_gem_handle_create(file_priv, chan->notifier_bo->gem, + &init->notifier_handle); + if (ret) { + nouveau_channel_free(chan); + return ret; + } + + return 0; +} + +static int +nouveau_ioctl_fifo_free(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_channel_free *cfree = data; + struct nouveau_channel *chan; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(cfree->channel, file_priv, chan); + + nouveau_channel_free(chan); + return 0; +} + +/*********************************** + * finally, the ioctl table + ***********************************/ + +struct drm_ioctl_desc nouveau_ioctls[] = { + DRM_IOCTL_DEF(DRM_NOUVEAU_CARD_INIT, nouveau_ioctl_card_init, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GETPARAM, nouveau_ioctl_getparam, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_SETPARAM, nouveau_ioctl_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + DRM_IOCTL_DEF(DRM_NOUVEAU_CHANNEL_ALLOC, nouveau_ioctl_fifo_alloc, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_CHANNEL_FREE, nouveau_ioctl_fifo_free, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GROBJ_ALLOC, nouveau_ioctl_grobj_alloc, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_NOTIFIEROBJ_ALLOC, nouveau_ioctl_notifier_alloc, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GPUOBJ_FREE, nouveau_ioctl_gpuobj_free, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_NEW, nouveau_gem_ioctl_new, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_PUSHBUF, nouveau_gem_ioctl_pushbuf, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_PUSHBUF_CALL, nouveau_gem_ioctl_pushbuf_call, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_PIN, nouveau_gem_ioctl_pin, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_UNPIN, nouveau_gem_ioctl_unpin, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_CPU_PREP, nouveau_gem_ioctl_cpu_prep, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_CPU_FINI, nouveau_gem_ioctl_cpu_fini, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_INFO, nouveau_gem_ioctl_info, DRM_AUTH), + DRM_IOCTL_DEF(DRM_NOUVEAU_GEM_PUSHBUF_CALL2, nouveau_gem_ioctl_pushbuf_call2, DRM_AUTH), +}; + +int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls); --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_dac.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_dac.c @@ -0,0 +1,531 @@ +/* + * Copyright 2003 NVIDIA, Corporation + * Copyright 2006 Dave Airlie + * Copyright 2007 Maarten Maathuis + * Copyright 2007-2009 Stuart Bennett + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" + +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nouveau_hw.h" +#include "nvreg.h" + +int nv04_dac_output_offset(struct drm_encoder *encoder) +{ + struct dcb_entry *dcb = nouveau_encoder(encoder)->dcb; + int offset = 0; + + if (dcb->or & (8 | OUTPUT_C)) + offset += 0x68; + if (dcb->or & (8 | OUTPUT_B)) + offset += 0x2000; + + return offset; +} + +/* + * arbitrary limit to number of sense oscillations tolerated in one sample + * period (observed to be at least 13 in "nvidia") + */ +#define MAX_HBLANK_OSC 20 + +/* + * arbitrary limit to number of conflicting sample pairs to tolerate at a + * voltage step (observed to be at least 5 in "nvidia") + */ +#define MAX_SAMPLE_PAIRS 10 + +static int sample_load_twice(struct drm_device *dev, bool sense[2]) +{ + int i; + + for (i = 0; i < 2; i++) { + bool sense_a, sense_b, sense_b_prime; + int j = 0; + + /* + * wait for bit 0 clear -- out of hblank -- (say reg value 0x4), + * then wait for transition 0x4->0x5->0x4: enter hblank, leave + * hblank again + * use a 10ms timeout (guards against crtc being inactive, in + * which case blank state would never change) + */ + if (!nouveau_wait_until(dev, 10000000, NV_PRMCIO_INP0__COLOR, + 0x00000001, 0x00000000)) + return -EBUSY; + if (!nouveau_wait_until(dev, 10000000, NV_PRMCIO_INP0__COLOR, + 0x00000001, 0x00000001)) + return -EBUSY; + if (!nouveau_wait_until(dev, 10000000, NV_PRMCIO_INP0__COLOR, + 0x00000001, 0x00000000)) + return -EBUSY; + + udelay(100); + /* when level triggers, sense is _LO_ */ + sense_a = nv_rd08(dev, NV_PRMCIO_INP0) & 0x10; + + /* take another reading until it agrees with sense_a... */ + do { + udelay(100); + sense_b = nv_rd08(dev, NV_PRMCIO_INP0) & 0x10; + if (sense_a != sense_b) { + sense_b_prime = + nv_rd08(dev, NV_PRMCIO_INP0) & 0x10; + if (sense_b == sense_b_prime) { + /* ... unless two consecutive subsequent + * samples agree; sense_a is replaced */ + sense_a = sense_b; + /* force mis-match so we loop */ + sense_b = !sense_a; + } + } + } while ((sense_a != sense_b) && ++j < MAX_HBLANK_OSC); + + if (j == MAX_HBLANK_OSC) + /* with so much oscillation, default to sense:LO */ + sense[i] = false; + else + sense[i] = sense_a; + } + + return 0; +} + +static enum drm_connector_status nv04_dac_detect(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct drm_device *dev = encoder->dev; + uint8_t saved_seq1, saved_pi, saved_rpc1, saved_cr_mode; + uint8_t saved_palette0[3], saved_palette_mask; + uint32_t saved_rtest_ctrl, saved_rgen_ctrl; + int i; + uint8_t blue; + bool sense = true; + + /* + * for this detection to work, there needs to be a mode set up on the + * CRTC. this is presumed to be the case + */ + + if (nv_two_heads(dev)) + /* only implemented for head A for now */ + NVSetOwner(dev, 0); + + saved_cr_mode = NVReadVgaCrtc(dev, 0, NV_CIO_CR_MODE_INDEX); + NVWriteVgaCrtc(dev, 0, NV_CIO_CR_MODE_INDEX, saved_cr_mode | 0x80); + + saved_seq1 = NVReadVgaSeq(dev, 0, NV_VIO_SR_CLOCK_INDEX); + NVWriteVgaSeq(dev, 0, NV_VIO_SR_CLOCK_INDEX, saved_seq1 & ~0x20); + + saved_rtest_ctrl = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL, + saved_rtest_ctrl & ~NV_PRAMDAC_TEST_CONTROL_PWRDWN_DAC_OFF); + + msleep(10); + + saved_pi = NVReadVgaCrtc(dev, 0, NV_CIO_CRE_PIXEL_INDEX); + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_PIXEL_INDEX, + saved_pi & ~(0x80 | MASK(NV_CIO_CRE_PIXEL_FORMAT))); + saved_rpc1 = NVReadVgaCrtc(dev, 0, NV_CIO_CRE_RPC1_INDEX); + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_RPC1_INDEX, saved_rpc1 & ~0xc0); + + nv_wr08(dev, NV_PRMDIO_READ_MODE_ADDRESS, 0x0); + for (i = 0; i < 3; i++) + saved_palette0[i] = nv_rd08(dev, NV_PRMDIO_PALETTE_DATA); + saved_palette_mask = nv_rd08(dev, NV_PRMDIO_PIXEL_MASK); + nv_wr08(dev, NV_PRMDIO_PIXEL_MASK, 0); + + saved_rgen_ctrl = NVReadRAMDAC(dev, 0, NV_PRAMDAC_GENERAL_CONTROL); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_GENERAL_CONTROL, + (saved_rgen_ctrl & ~(NV_PRAMDAC_GENERAL_CONTROL_BPC_8BITS | + NV_PRAMDAC_GENERAL_CONTROL_TERMINATION_75OHM)) | + NV_PRAMDAC_GENERAL_CONTROL_PIXMIX_ON); + + blue = 8; /* start of test range */ + + do { + bool sense_pair[2]; + + nv_wr08(dev, NV_PRMDIO_WRITE_MODE_ADDRESS, 0); + nv_wr08(dev, NV_PRMDIO_PALETTE_DATA, 0); + nv_wr08(dev, NV_PRMDIO_PALETTE_DATA, 0); + /* testing blue won't find monochrome monitors. I don't care */ + nv_wr08(dev, NV_PRMDIO_PALETTE_DATA, blue); + + i = 0; + /* take sample pairs until both samples in the pair agree */ + do { + if (sample_load_twice(dev, sense_pair)) + goto out; + } while ((sense_pair[0] != sense_pair[1]) && + ++i < MAX_SAMPLE_PAIRS); + + if (i == MAX_SAMPLE_PAIRS) + /* too much oscillation defaults to LO */ + sense = false; + else + sense = sense_pair[0]; + + /* + * if sense goes LO before blue ramps to 0x18, monitor is not connected. + * ergo, if blue gets to 0x18, monitor must be connected + */ + } while (++blue < 0x18 && sense); + +out: + nv_wr08(dev, NV_PRMDIO_PIXEL_MASK, saved_palette_mask); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_GENERAL_CONTROL, saved_rgen_ctrl); + nv_wr08(dev, NV_PRMDIO_WRITE_MODE_ADDRESS, 0); + for (i = 0; i < 3; i++) + nv_wr08(dev, NV_PRMDIO_PALETTE_DATA, saved_palette0[i]); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL, saved_rtest_ctrl); + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_PIXEL_INDEX, saved_pi); + NVWriteVgaCrtc(dev, 0, NV_CIO_CRE_RPC1_INDEX, saved_rpc1); + NVWriteVgaSeq(dev, 0, NV_VIO_SR_CLOCK_INDEX, saved_seq1); + NVWriteVgaCrtc(dev, 0, NV_CIO_CR_MODE_INDEX, saved_cr_mode); + + if (blue == 0x18) { + NV_INFO(dev, "Load detected on head A\n"); + return connector_status_connected; + } + + return connector_status_disconnected; +} + +uint32_t nv17_dac_sample_load(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct dcb_entry *dcb = nouveau_encoder(encoder)->dcb; + uint32_t sample, testval, regoffset = nv04_dac_output_offset(encoder); + uint32_t saved_powerctrl_2 = 0, saved_powerctrl_4 = 0, saved_routput, + saved_rtest_ctrl, saved_gpio0, saved_gpio1, temp, routput; + int head; + +#define RGB_TEST_DATA(r, g, b) (r << 0 | g << 10 | b << 20) + if (dcb->type == OUTPUT_TV) { + testval = RGB_TEST_DATA(0xa0, 0xa0, 0xa0); + + if (dev_priv->vbios->tvdactestval) + testval = dev_priv->vbios->tvdactestval; + } else { + testval = RGB_TEST_DATA(0x140, 0x140, 0x140); /* 0x94050140 */ + + if (dev_priv->vbios->dactestval) + testval = dev_priv->vbios->dactestval; + } + + saved_rtest_ctrl = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset, + saved_rtest_ctrl & ~NV_PRAMDAC_TEST_CONTROL_PWRDWN_DAC_OFF); + + saved_powerctrl_2 = nvReadMC(dev, NV_PBUS_POWERCTRL_2); + + nvWriteMC(dev, NV_PBUS_POWERCTRL_2, saved_powerctrl_2 & 0xd7ffffff); + if (regoffset == 0x68) { + saved_powerctrl_4 = nvReadMC(dev, NV_PBUS_POWERCTRL_4); + nvWriteMC(dev, NV_PBUS_POWERCTRL_4, saved_powerctrl_4 & 0xffffffcf); + } + + saved_gpio1 = nv17_gpio_get(dev, DCB_GPIO_TVDAC1); + saved_gpio0 = nv17_gpio_get(dev, DCB_GPIO_TVDAC0); + + nv17_gpio_set(dev, DCB_GPIO_TVDAC1, dcb->type == OUTPUT_TV); + nv17_gpio_set(dev, DCB_GPIO_TVDAC0, dcb->type == OUTPUT_TV); + + msleep(4); + + saved_routput = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset); + head = (saved_routput & 0x100) >> 8; +#if 0 + /* if there's a spare crtc, using it will minimise flicker for the case + * where the in-use crtc is in use by an off-chip tmds encoder */ + if (xf86_config->crtc[head]->enabled && !xf86_config->crtc[head ^ 1]->enabled) + head ^= 1; +#endif + /* nv driver and nv31 use 0xfffffeee, nv34 and 6600 use 0xfffffece */ + routput = (saved_routput & 0xfffffece) | head << 8; + + if (dev_priv->card_type >= NV_40) { + if (dcb->type == OUTPUT_TV) + routput |= 0x1a << 16; + else + routput &= ~(0x1a << 16); + } + + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, routput); + msleep(1); + + temp = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, temp | 1); + + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TESTPOINT_DATA, + NV_PRAMDAC_TESTPOINT_DATA_NOTBLANK | testval); + temp = NVReadRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL, + temp | NV_PRAMDAC_TEST_CONTROL_TP_INS_EN_ASSERTED); + msleep(5); + + sample = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); + + temp = NVReadRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL, + temp & ~NV_PRAMDAC_TEST_CONTROL_TP_INS_EN_ASSERTED); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TESTPOINT_DATA, 0); + + /* bios does something more complex for restoring, but I think this is good enough */ + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, saved_routput); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset, saved_rtest_ctrl); + if (regoffset == 0x68) + nvWriteMC(dev, NV_PBUS_POWERCTRL_4, saved_powerctrl_4); + nvWriteMC(dev, NV_PBUS_POWERCTRL_2, saved_powerctrl_2); + + nv17_gpio_set(dev, DCB_GPIO_TVDAC1, saved_gpio1); + nv17_gpio_set(dev, DCB_GPIO_TVDAC0, saved_gpio0); + + return sample; +} + +static enum drm_connector_status +nv17_dac_detect(struct drm_encoder *encoder, struct drm_connector *connector) +{ + struct drm_device *dev = encoder->dev; + struct dcb_entry *dcb = nouveau_encoder(encoder)->dcb; + uint32_t sample = nv17_dac_sample_load(encoder); + + if (sample & NV_PRAMDAC_TEST_CONTROL_SENSEB_ALLHI) { + NV_INFO(dev, "Load detected on output %c\n", + '@' + ffs(dcb->or)); + return connector_status_connected; + } else { + return connector_status_disconnected; + } +} + +static bool nv04_dac_mode_fixup(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + return true; +} + +static void nv04_dac_prepare(struct drm_encoder *encoder) +{ + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int head = nouveau_crtc(encoder->crtc)->index; + struct nv04_crtc_reg *crtcstate = dev_priv->mode_reg.crtc_reg; + + helper->dpms(encoder, DRM_MODE_DPMS_OFF); + + nv04_dfp_disable(dev, head); + + /* Some NV4x have unknown values (0x3f, 0x50, 0x54, 0x6b, 0x79, 0x7f) + * at LCD__INDEX which we don't alter + */ + if (!(crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] & 0x44)) + crtcstate[head].CRTC[NV_CIO_CRE_LCD__INDEX] = 0; +} + + +static void nv04_dac_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + int head = nouveau_crtc(encoder->crtc)->index; + + if (nv_gf4_disp_arch(dev)) { + struct drm_encoder *rebind; + uint32_t dac_offset = nv04_dac_output_offset(encoder); + uint32_t otherdac; + + /* bit 16-19 are bits that are set on some G70 cards, + * but don't seem to have much effect */ + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + dac_offset, + head << 8 | NV_PRAMDAC_DACCLK_SEL_DACCLK); + /* force any other vga encoders to bind to the other crtc */ + list_for_each_entry(rebind, &dev->mode_config.encoder_list, head) { + if (rebind == encoder + || nouveau_encoder(rebind)->dcb->type != OUTPUT_ANALOG) + continue; + + dac_offset = nv04_dac_output_offset(rebind); + otherdac = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + dac_offset); + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + dac_offset, + (otherdac & ~0x0100) | (head ^ 1) << 8); + } + } + + /* This could use refinement for flatpanels, but it should work this way */ + if (dev_priv->chipset < 0x44) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + nv04_dac_output_offset(encoder), 0xf0000000); + else + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + nv04_dac_output_offset(encoder), 0x00100000); +} + +static void nv04_dac_commit(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc); + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + + helper->dpms(encoder, DRM_MODE_DPMS_ON); + + NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n", + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), + nv_crtc->index, '@' + ffs(nv_encoder->dcb->or)); +} + +void nv04_dac_update_dacclk(struct drm_encoder *encoder, bool enable) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct dcb_entry *dcb = nouveau_encoder(encoder)->dcb; + + if (nv_gf4_disp_arch(dev)) { + uint32_t *dac_users = &dev_priv->dac_users[ffs(dcb->or) - 1]; + int dacclk_off = NV_PRAMDAC_DACCLK + nv04_dac_output_offset(encoder); + uint32_t dacclk = NVReadRAMDAC(dev, 0, dacclk_off); + + if (enable) { + *dac_users |= 1 << dcb->index; + NVWriteRAMDAC(dev, 0, dacclk_off, dacclk | NV_PRAMDAC_DACCLK_SEL_DACCLK); + + } else { + *dac_users &= ~(1 << dcb->index); + if (!*dac_users) + NVWriteRAMDAC(dev, 0, dacclk_off, + dacclk & ~NV_PRAMDAC_DACCLK_SEL_DACCLK); + } + } +} + +static void nv04_dac_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (nv_encoder->last_dpms == mode) + return; + nv_encoder->last_dpms = mode; + + NV_INFO(dev, "Setting dpms mode %d on vga encoder (output %d)\n", + mode, nv_encoder->dcb->index); + + nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON); +} + +static void nv04_dac_save(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + + if (nv_gf4_disp_arch(dev)) + nv_encoder->restore.output = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + + nv04_dac_output_offset(encoder)); +} + +static void nv04_dac_restore(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + + if (nv_gf4_disp_arch(dev)) + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + nv04_dac_output_offset(encoder), + nv_encoder->restore.output); + + nv_encoder->last_dpms = NV_DPMS_CLEARED; +} + +static void nv04_dac_destroy(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + NV_DEBUG_KMS(encoder->dev, "\n"); + + drm_encoder_cleanup(encoder); + kfree(nv_encoder); +} + +static const struct drm_encoder_helper_funcs nv04_dac_helper_funcs = { + .dpms = nv04_dac_dpms, + .save = nv04_dac_save, + .restore = nv04_dac_restore, + .mode_fixup = nv04_dac_mode_fixup, + .prepare = nv04_dac_prepare, + .commit = nv04_dac_commit, + .mode_set = nv04_dac_mode_set, + .detect = nv04_dac_detect +}; + +static const struct drm_encoder_helper_funcs nv17_dac_helper_funcs = { + .dpms = nv04_dac_dpms, + .save = nv04_dac_save, + .restore = nv04_dac_restore, + .mode_fixup = nv04_dac_mode_fixup, + .prepare = nv04_dac_prepare, + .commit = nv04_dac_commit, + .mode_set = nv04_dac_mode_set, + .detect = nv17_dac_detect +}; + +static const struct drm_encoder_funcs nv04_dac_funcs = { + .destroy = nv04_dac_destroy, +}; + +int nv04_dac_create(struct drm_device *dev, struct dcb_entry *entry) +{ + const struct drm_encoder_helper_funcs *helper; + struct drm_encoder *encoder; + struct nouveau_encoder *nv_encoder = NULL; + + nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL); + if (!nv_encoder) + return -ENOMEM; + + encoder = to_drm_encoder(nv_encoder); + + nv_encoder->dcb = entry; + nv_encoder->or = ffs(entry->or) - 1; + + if (nv_gf4_disp_arch(dev)) + helper = &nv17_dac_helper_funcs; + else + helper = &nv04_dac_helper_funcs; + + drm_encoder_init(dev, encoder, &nv04_dac_funcs, DRM_MODE_ENCODER_DAC); + drm_encoder_helper_add(encoder, helper); + + encoder->possible_crtcs = entry->heads; + encoder->possible_clones = 0; + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_grctx.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_grctx.c @@ -0,0 +1,2367 @@ +/* + * Copyright 2009 Marcin KoÅ›cielnicki + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#define CP_FLAG_CLEAR 0 +#define CP_FLAG_SET 1 +#define CP_FLAG_SWAP_DIRECTION ((0 * 32) + 0) +#define CP_FLAG_SWAP_DIRECTION_LOAD 0 +#define CP_FLAG_SWAP_DIRECTION_SAVE 1 +#define CP_FLAG_UNK01 ((0 * 32) + 1) +#define CP_FLAG_UNK01_CLEAR 0 +#define CP_FLAG_UNK01_SET 1 +#define CP_FLAG_UNK03 ((0 * 32) + 3) +#define CP_FLAG_UNK03_CLEAR 0 +#define CP_FLAG_UNK03_SET 1 +#define CP_FLAG_USER_SAVE ((0 * 32) + 5) +#define CP_FLAG_USER_SAVE_NOT_PENDING 0 +#define CP_FLAG_USER_SAVE_PENDING 1 +#define CP_FLAG_USER_LOAD ((0 * 32) + 6) +#define CP_FLAG_USER_LOAD_NOT_PENDING 0 +#define CP_FLAG_USER_LOAD_PENDING 1 +#define CP_FLAG_UNK0B ((0 * 32) + 0xb) +#define CP_FLAG_UNK0B_CLEAR 0 +#define CP_FLAG_UNK0B_SET 1 +#define CP_FLAG_UNK1D ((0 * 32) + 0x1d) +#define CP_FLAG_UNK1D_CLEAR 0 +#define CP_FLAG_UNK1D_SET 1 +#define CP_FLAG_UNK20 ((1 * 32) + 0) +#define CP_FLAG_UNK20_CLEAR 0 +#define CP_FLAG_UNK20_SET 1 +#define CP_FLAG_STATUS ((2 * 32) + 0) +#define CP_FLAG_STATUS_BUSY 0 +#define CP_FLAG_STATUS_IDLE 1 +#define CP_FLAG_AUTO_SAVE ((2 * 32) + 4) +#define CP_FLAG_AUTO_SAVE_NOT_PENDING 0 +#define CP_FLAG_AUTO_SAVE_PENDING 1 +#define CP_FLAG_AUTO_LOAD ((2 * 32) + 5) +#define CP_FLAG_AUTO_LOAD_NOT_PENDING 0 +#define CP_FLAG_AUTO_LOAD_PENDING 1 +#define CP_FLAG_XFER ((2 * 32) + 11) +#define CP_FLAG_XFER_IDLE 0 +#define CP_FLAG_XFER_BUSY 1 +#define CP_FLAG_NEWCTX ((2 * 32) + 12) +#define CP_FLAG_NEWCTX_BUSY 0 +#define CP_FLAG_NEWCTX_DONE 1 +#define CP_FLAG_ALWAYS ((2 * 32) + 13) +#define CP_FLAG_ALWAYS_FALSE 0 +#define CP_FLAG_ALWAYS_TRUE 1 + +#define CP_CTX 0x00100000 +#define CP_CTX_COUNT 0x000f0000 +#define CP_CTX_COUNT_SHIFT 16 +#define CP_CTX_REG 0x00003fff +#define CP_LOAD_SR 0x00200000 +#define CP_LOAD_SR_VALUE 0x000fffff +#define CP_BRA 0x00400000 +#define CP_BRA_IP 0x0001ff00 +#define CP_BRA_IP_SHIFT 8 +#define CP_BRA_IF_CLEAR 0x00000080 +#define CP_BRA_FLAG 0x0000007f +#define CP_WAIT 0x00500000 +#define CP_WAIT_SET 0x00000080 +#define CP_WAIT_FLAG 0x0000007f +#define CP_SET 0x00700000 +#define CP_SET_1 0x00000080 +#define CP_SET_FLAG 0x0000007f +#define CP_NEWCTX 0x00600004 +#define CP_NEXT_TO_SWAP 0x00600005 +#define CP_SET_CONTEXT_POINTER 0x00600006 +#define CP_SET_XFER_POINTER 0x00600007 +#define CP_ENABLE 0x00600009 +#define CP_END 0x0060000c +#define CP_NEXT_TO_CURRENT 0x0060000d +#define CP_DISABLE1 0x0090ffff +#define CP_DISABLE2 0x0091ffff +#define CP_XFER_1 0x008000ff +#define CP_XFER_2 0x008800ff +#define CP_SEEK_1 0x00c000ff +#define CP_SEEK_2 0x00c800ff + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_grctx.h" + +/* + * This code deals with PGRAPH contexts on NV50 family cards. Like NV40, it's + * the GPU itself that does context-switching, but it needs a special + * microcode to do it. And it's the driver's task to supply this microcode, + * further known as ctxprog, as well as the initial context values, known + * as ctxvals. + * + * Without ctxprog, you cannot switch contexts. Not even in software, since + * the majority of context [xfer strands] isn't accessible directly. You're + * stuck with a single channel, and you also suffer all the problems resulting + * from missing ctxvals, since you cannot load them. + * + * Without ctxvals, you're stuck with PGRAPH's default context. It's enough to + * run 2d operations, but trying to utilise 3d or CUDA will just lock you up, + * since you don't have... some sort of needed setup. + * + * Nouveau will just disable acceleration if not given ctxprog + ctxvals, since + * it's too much hassle to handle no-ctxprog as a special case. + */ + +/* + * How ctxprogs work. + * + * The ctxprog is written in its own kind of microcode, with very small and + * crappy set of available commands. You upload it to a small [512 insns] + * area of memory on PGRAPH, and it'll be run when PFIFO wants PGRAPH to + * switch channel. or when the driver explicitely requests it. Stuff visible + * to ctxprog consists of: PGRAPH MMIO registers, PGRAPH context strands, + * the per-channel context save area in VRAM [known as ctxvals or grctx], + * 4 flags registers, a scratch register, two grctx pointers, plus many + * random poorly-understood details. + * + * When ctxprog runs, it's supposed to check what operations are asked of it, + * save old context if requested, optionally reset PGRAPH and switch to the + * new channel, and load the new context. Context consists of three major + * parts: subset of MMIO registers and two "xfer areas". + */ + +/* TODO: + * - document unimplemented bits compared to nvidia + * - NVAx: make a TP subroutine, use it. + * - use 0x4008fc instead of 0x1540? + */ + +enum cp_label { + cp_check_load = 1, + cp_setup_auto_load, + cp_setup_load, + cp_setup_save, + cp_swap_state, + cp_prepare_exit, + cp_exit, +}; + +static void nv50_graph_construct_mmio(struct nouveau_grctx *ctx); +static void nv50_graph_construct_xfer1(struct nouveau_grctx *ctx); +static void nv50_graph_construct_xfer2(struct nouveau_grctx *ctx); + +/* Main function: construct the ctxprog skeleton, call the other functions. */ + +int +nv50_grctx_init(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + + switch (dev_priv->chipset) { + case 0x50: + case 0x84: + case 0x86: + case 0x92: + case 0x94: + case 0x96: + case 0x98: + case 0xa0: + case 0xa5: + case 0xa8: + case 0xaa: + case 0xac: + break; + default: + NV_ERROR(ctx->dev, "I don't know how to make a ctxprog for " + "your NV%x card.\n", dev_priv->chipset); + NV_ERROR(ctx->dev, "Disabling acceleration. Please contact " + "the devs.\n"); + return -ENOSYS; + } + /* decide whether we're loading/unloading the context */ + cp_bra (ctx, AUTO_SAVE, PENDING, cp_setup_save); + cp_bra (ctx, USER_SAVE, PENDING, cp_setup_save); + + cp_name(ctx, cp_check_load); + cp_bra (ctx, AUTO_LOAD, PENDING, cp_setup_auto_load); + cp_bra (ctx, USER_LOAD, PENDING, cp_setup_load); + cp_bra (ctx, ALWAYS, TRUE, cp_exit); + + /* setup for context load */ + cp_name(ctx, cp_setup_auto_load); + cp_out (ctx, CP_DISABLE1); + cp_out (ctx, CP_DISABLE2); + cp_out (ctx, CP_ENABLE); + cp_out (ctx, CP_NEXT_TO_SWAP); + cp_set (ctx, UNK01, SET); + cp_name(ctx, cp_setup_load); + cp_out (ctx, CP_NEWCTX); + cp_wait(ctx, NEWCTX, BUSY); + cp_set (ctx, UNK1D, CLEAR); + cp_set (ctx, SWAP_DIRECTION, LOAD); + cp_bra (ctx, UNK0B, SET, cp_prepare_exit); + cp_bra (ctx, ALWAYS, TRUE, cp_swap_state); + + /* setup for context save */ + cp_name(ctx, cp_setup_save); + cp_set (ctx, UNK1D, SET); + cp_wait(ctx, STATUS, BUSY); + cp_set (ctx, UNK01, SET); + cp_set (ctx, SWAP_DIRECTION, SAVE); + + /* general PGRAPH state */ + cp_name(ctx, cp_swap_state); + cp_set (ctx, UNK03, SET); + cp_pos (ctx, 0x00004/4); + cp_ctx (ctx, 0x400828, 1); /* needed. otherwise, flickering happens. */ + cp_pos (ctx, 0x00100/4); + nv50_graph_construct_mmio(ctx); + nv50_graph_construct_xfer1(ctx); + nv50_graph_construct_xfer2(ctx); + + cp_bra (ctx, SWAP_DIRECTION, SAVE, cp_check_load); + + cp_set (ctx, UNK20, SET); + cp_set (ctx, SWAP_DIRECTION, SAVE); /* no idea why this is needed, but fixes at least one lockup. */ + cp_lsr (ctx, ctx->ctxvals_base); + cp_out (ctx, CP_SET_XFER_POINTER); + cp_lsr (ctx, 4); + cp_out (ctx, CP_SEEK_1); + cp_out (ctx, CP_XFER_1); + cp_wait(ctx, XFER, BUSY); + + /* pre-exit state updates */ + cp_name(ctx, cp_prepare_exit); + cp_set (ctx, UNK01, CLEAR); + cp_set (ctx, UNK03, CLEAR); + cp_set (ctx, UNK1D, CLEAR); + + cp_bra (ctx, USER_SAVE, PENDING, cp_exit); + cp_out (ctx, CP_NEXT_TO_CURRENT); + + cp_name(ctx, cp_exit); + cp_set (ctx, USER_SAVE, NOT_PENDING); + cp_set (ctx, USER_LOAD, NOT_PENDING); + cp_out (ctx, CP_END); + ctx->ctxvals_pos += 0x400; /* padding... no idea why you need it */ + + return 0; +} + +/* + * Constructs MMIO part of ctxprog and ctxvals. Just a matter of knowing which + * registers to save/restore and the default values for them. + */ + +static void +nv50_graph_construct_mmio(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i, j; + int offset, base; + uint32_t units = nv_rd32 (ctx->dev, 0x1540); + + /* 0800 */ + cp_ctx(ctx, 0x400808, 7); + gr_def(ctx, 0x400814, 0x00000030); + cp_ctx(ctx, 0x400834, 0x32); + if (dev_priv->chipset == 0x50) { + gr_def(ctx, 0x400834, 0xff400040); + gr_def(ctx, 0x400838, 0xfff00080); + gr_def(ctx, 0x40083c, 0xfff70090); + gr_def(ctx, 0x400840, 0xffe806a8); + } + gr_def(ctx, 0x400844, 0x00000002); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + gr_def(ctx, 0x400894, 0x00001000); + gr_def(ctx, 0x4008e8, 0x00000003); + gr_def(ctx, 0x4008ec, 0x00001000); + if (dev_priv->chipset == 0x50) + cp_ctx(ctx, 0x400908, 0xb); + else if (dev_priv->chipset < 0xa0) + cp_ctx(ctx, 0x400908, 0xc); + else + cp_ctx(ctx, 0x400908, 0xe); + + if (dev_priv->chipset >= 0xa0) + cp_ctx(ctx, 0x400b00, 0x1); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + cp_ctx(ctx, 0x400b10, 0x1); + gr_def(ctx, 0x400b10, 0x0001629d); + cp_ctx(ctx, 0x400b20, 0x1); + gr_def(ctx, 0x400b20, 0x0001629d); + } + + /* 0C00 */ + cp_ctx(ctx, 0x400c08, 0x2); + gr_def(ctx, 0x400c08, 0x0000fe0c); + + /* 1000 */ + if (dev_priv->chipset < 0xa0) { + cp_ctx(ctx, 0x401008, 0x4); + gr_def(ctx, 0x401014, 0x00001000); + } else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) { + cp_ctx(ctx, 0x401008, 0x5); + gr_def(ctx, 0x401018, 0x00001000); + } else { + cp_ctx(ctx, 0x401008, 0x5); + gr_def(ctx, 0x401018, 0x00004000); + } + + /* 1400 */ + cp_ctx(ctx, 0x401400, 0x8); + cp_ctx(ctx, 0x401424, 0x3); + if (dev_priv->chipset == 0x50) + gr_def(ctx, 0x40142c, 0x0001fd87); + else + gr_def(ctx, 0x40142c, 0x00000187); + cp_ctx(ctx, 0x401540, 0x5); + gr_def(ctx, 0x401550, 0x00001018); + + /* 1800 */ + cp_ctx(ctx, 0x401814, 0x1); + gr_def(ctx, 0x401814, 0x000000ff); + if (dev_priv->chipset == 0x50) { + cp_ctx(ctx, 0x40181c, 0xe); + gr_def(ctx, 0x401850, 0x00000004); + } else if (dev_priv->chipset < 0xa0) { + cp_ctx(ctx, 0x40181c, 0xf); + gr_def(ctx, 0x401854, 0x00000004); + } else { + cp_ctx(ctx, 0x40181c, 0x13); + gr_def(ctx, 0x401864, 0x00000004); + } + + /* 1C00 */ + cp_ctx(ctx, 0x401c00, 0x1); + switch (dev_priv->chipset) { + case 0x50: + gr_def(ctx, 0x401c00, 0x0001005f); + break; + case 0x84: + case 0x86: + case 0x94: + gr_def(ctx, 0x401c00, 0x044d00df); + break; + case 0x92: + case 0x96: + case 0x98: + case 0xa0: + case 0xaa: + case 0xac: + gr_def(ctx, 0x401c00, 0x042500df); + break; + case 0xa5: + case 0xa8: + gr_def(ctx, 0x401c00, 0x142500df); + break; + } + + /* 2400 */ + cp_ctx(ctx, 0x402400, 0x1); + if (dev_priv->chipset == 0x50) + cp_ctx(ctx, 0x402408, 0x1); + else + cp_ctx(ctx, 0x402408, 0x2); + gr_def(ctx, 0x402408, 0x00000600); + + /* 2800 */ + cp_ctx(ctx, 0x402800, 0x1); + if (dev_priv->chipset == 0x50) + gr_def(ctx, 0x402800, 0x00000006); + + /* 2C00 */ + cp_ctx(ctx, 0x402c08, 0x6); + if (dev_priv->chipset != 0x50) + gr_def(ctx, 0x402c14, 0x01000000); + gr_def(ctx, 0x402c18, 0x000000ff); + if (dev_priv->chipset == 0x50) + cp_ctx(ctx, 0x402ca0, 0x1); + else + cp_ctx(ctx, 0x402ca0, 0x2); + if (dev_priv->chipset < 0xa0) + gr_def(ctx, 0x402ca0, 0x00000400); + else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) + gr_def(ctx, 0x402ca0, 0x00000800); + else + gr_def(ctx, 0x402ca0, 0x00000400); + cp_ctx(ctx, 0x402cac, 0x4); + + /* 3000 */ + cp_ctx(ctx, 0x403004, 0x1); + gr_def(ctx, 0x403004, 0x00000001); + + /* 3404 */ + if (dev_priv->chipset >= 0xa0) { + cp_ctx(ctx, 0x403404, 0x1); + gr_def(ctx, 0x403404, 0x00000001); + } + + /* 5000 */ + cp_ctx(ctx, 0x405000, 0x1); + switch (dev_priv->chipset) { + case 0x50: + gr_def(ctx, 0x405000, 0x00300080); + break; + case 0x84: + case 0xa0: + case 0xa5: + case 0xa8: + case 0xaa: + case 0xac: + gr_def(ctx, 0x405000, 0x000e0080); + break; + case 0x86: + case 0x92: + case 0x94: + case 0x96: + case 0x98: + gr_def(ctx, 0x405000, 0x00000080); + break; + } + cp_ctx(ctx, 0x405014, 0x1); + gr_def(ctx, 0x405014, 0x00000004); + cp_ctx(ctx, 0x40501c, 0x1); + cp_ctx(ctx, 0x405024, 0x1); + cp_ctx(ctx, 0x40502c, 0x1); + + /* 5400 or maybe 4800 */ + if (dev_priv->chipset == 0x50) { + offset = 0x405400; + cp_ctx(ctx, 0x405400, 0xea); + } else if (dev_priv->chipset < 0x94) { + offset = 0x405400; + cp_ctx(ctx, 0x405400, 0xcb); + } else if (dev_priv->chipset < 0xa0) { + offset = 0x405400; + cp_ctx(ctx, 0x405400, 0xcc); + } else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + offset = 0x404800; + cp_ctx(ctx, 0x404800, 0xda); + } else { + offset = 0x405400; + cp_ctx(ctx, 0x405400, 0xd4); + } + gr_def(ctx, offset + 0x0c, 0x00000002); + gr_def(ctx, offset + 0x10, 0x00000001); + if (dev_priv->chipset >= 0x94) + offset += 4; + gr_def(ctx, offset + 0x1c, 0x00000001); + gr_def(ctx, offset + 0x20, 0x00000100); + gr_def(ctx, offset + 0x38, 0x00000002); + gr_def(ctx, offset + 0x3c, 0x00000001); + gr_def(ctx, offset + 0x40, 0x00000001); + gr_def(ctx, offset + 0x50, 0x00000001); + gr_def(ctx, offset + 0x54, 0x003fffff); + gr_def(ctx, offset + 0x58, 0x00001fff); + gr_def(ctx, offset + 0x60, 0x00000001); + gr_def(ctx, offset + 0x64, 0x00000001); + gr_def(ctx, offset + 0x6c, 0x00000001); + gr_def(ctx, offset + 0x70, 0x00000001); + gr_def(ctx, offset + 0x74, 0x00000001); + gr_def(ctx, offset + 0x78, 0x00000004); + gr_def(ctx, offset + 0x7c, 0x00000001); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + offset += 4; + gr_def(ctx, offset + 0x80, 0x00000001); + gr_def(ctx, offset + 0x84, 0x00000001); + gr_def(ctx, offset + 0x88, 0x00000007); + gr_def(ctx, offset + 0x8c, 0x00000001); + gr_def(ctx, offset + 0x90, 0x00000007); + gr_def(ctx, offset + 0x94, 0x00000001); + gr_def(ctx, offset + 0x98, 0x00000001); + gr_def(ctx, offset + 0x9c, 0x00000001); + if (dev_priv->chipset == 0x50) { + gr_def(ctx, offset + 0xb0, 0x00000001); + gr_def(ctx, offset + 0xb4, 0x00000001); + gr_def(ctx, offset + 0xbc, 0x00000001); + gr_def(ctx, offset + 0xc0, 0x0000000a); + gr_def(ctx, offset + 0xd0, 0x00000040); + gr_def(ctx, offset + 0xd8, 0x00000002); + gr_def(ctx, offset + 0xdc, 0x00000100); + gr_def(ctx, offset + 0xe0, 0x00000001); + gr_def(ctx, offset + 0xe4, 0x00000100); + gr_def(ctx, offset + 0x100, 0x00000001); + gr_def(ctx, offset + 0x124, 0x00000004); + gr_def(ctx, offset + 0x13c, 0x00000001); + gr_def(ctx, offset + 0x140, 0x00000100); + gr_def(ctx, offset + 0x148, 0x00000001); + gr_def(ctx, offset + 0x154, 0x00000100); + gr_def(ctx, offset + 0x158, 0x00000001); + gr_def(ctx, offset + 0x15c, 0x00000100); + gr_def(ctx, offset + 0x164, 0x00000001); + gr_def(ctx, offset + 0x170, 0x00000100); + gr_def(ctx, offset + 0x174, 0x00000001); + gr_def(ctx, offset + 0x17c, 0x00000001); + gr_def(ctx, offset + 0x188, 0x00000002); + gr_def(ctx, offset + 0x190, 0x00000001); + gr_def(ctx, offset + 0x198, 0x00000001); + gr_def(ctx, offset + 0x1ac, 0x00000003); + offset += 0xd0; + } else { + gr_def(ctx, offset + 0xb0, 0x00000001); + gr_def(ctx, offset + 0xb4, 0x00000100); + gr_def(ctx, offset + 0xbc, 0x00000001); + gr_def(ctx, offset + 0xc8, 0x00000100); + gr_def(ctx, offset + 0xcc, 0x00000001); + gr_def(ctx, offset + 0xd0, 0x00000100); + gr_def(ctx, offset + 0xd8, 0x00000001); + gr_def(ctx, offset + 0xe4, 0x00000100); + } + gr_def(ctx, offset + 0xf8, 0x00000004); + gr_def(ctx, offset + 0xfc, 0x00000070); + gr_def(ctx, offset + 0x100, 0x00000080); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + offset += 4; + gr_def(ctx, offset + 0x114, 0x0000000c); + if (dev_priv->chipset == 0x50) + offset -= 4; + gr_def(ctx, offset + 0x11c, 0x00000008); + gr_def(ctx, offset + 0x120, 0x00000014); + if (dev_priv->chipset == 0x50) { + gr_def(ctx, offset + 0x124, 0x00000026); + offset -= 0x18; + } else { + gr_def(ctx, offset + 0x128, 0x00000029); + gr_def(ctx, offset + 0x12c, 0x00000027); + gr_def(ctx, offset + 0x130, 0x00000026); + gr_def(ctx, offset + 0x134, 0x00000008); + gr_def(ctx, offset + 0x138, 0x00000004); + gr_def(ctx, offset + 0x13c, 0x00000027); + } + gr_def(ctx, offset + 0x148, 0x00000001); + gr_def(ctx, offset + 0x14c, 0x00000002); + gr_def(ctx, offset + 0x150, 0x00000003); + gr_def(ctx, offset + 0x154, 0x00000004); + gr_def(ctx, offset + 0x158, 0x00000005); + gr_def(ctx, offset + 0x15c, 0x00000006); + gr_def(ctx, offset + 0x160, 0x00000007); + gr_def(ctx, offset + 0x164, 0x00000001); + gr_def(ctx, offset + 0x1a8, 0x000000cf); + if (dev_priv->chipset == 0x50) + offset -= 4; + gr_def(ctx, offset + 0x1d8, 0x00000080); + gr_def(ctx, offset + 0x1dc, 0x00000004); + gr_def(ctx, offset + 0x1e0, 0x00000004); + if (dev_priv->chipset == 0x50) + offset -= 4; + else + gr_def(ctx, offset + 0x1e4, 0x00000003); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + gr_def(ctx, offset + 0x1ec, 0x00000003); + offset += 8; + } + gr_def(ctx, offset + 0x1e8, 0x00000001); + if (dev_priv->chipset == 0x50) + offset -= 4; + gr_def(ctx, offset + 0x1f4, 0x00000012); + gr_def(ctx, offset + 0x1f8, 0x00000010); + gr_def(ctx, offset + 0x1fc, 0x0000000c); + gr_def(ctx, offset + 0x200, 0x00000001); + gr_def(ctx, offset + 0x210, 0x00000004); + gr_def(ctx, offset + 0x214, 0x00000002); + gr_def(ctx, offset + 0x218, 0x00000004); + if (dev_priv->chipset >= 0xa0) + offset += 4; + gr_def(ctx, offset + 0x224, 0x003fffff); + gr_def(ctx, offset + 0x228, 0x00001fff); + if (dev_priv->chipset == 0x50) + offset -= 0x20; + else if (dev_priv->chipset >= 0xa0) { + gr_def(ctx, offset + 0x250, 0x00000001); + gr_def(ctx, offset + 0x254, 0x00000001); + gr_def(ctx, offset + 0x258, 0x00000002); + offset += 0x10; + } + gr_def(ctx, offset + 0x250, 0x00000004); + gr_def(ctx, offset + 0x254, 0x00000014); + gr_def(ctx, offset + 0x258, 0x00000001); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + offset += 4; + gr_def(ctx, offset + 0x264, 0x00000002); + if (dev_priv->chipset >= 0xa0) + offset += 8; + gr_def(ctx, offset + 0x270, 0x00000001); + gr_def(ctx, offset + 0x278, 0x00000002); + gr_def(ctx, offset + 0x27c, 0x00001000); + if (dev_priv->chipset == 0x50) + offset -= 0xc; + else { + gr_def(ctx, offset + 0x280, 0x00000e00); + gr_def(ctx, offset + 0x284, 0x00001000); + gr_def(ctx, offset + 0x288, 0x00001e00); + } + gr_def(ctx, offset + 0x290, 0x00000001); + gr_def(ctx, offset + 0x294, 0x00000001); + gr_def(ctx, offset + 0x298, 0x00000001); + gr_def(ctx, offset + 0x29c, 0x00000001); + gr_def(ctx, offset + 0x2a0, 0x00000001); + gr_def(ctx, offset + 0x2b0, 0x00000200); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + gr_def(ctx, offset + 0x2b4, 0x00000200); + offset += 4; + } + if (dev_priv->chipset < 0xa0) { + gr_def(ctx, offset + 0x2b8, 0x00000001); + gr_def(ctx, offset + 0x2bc, 0x00000070); + gr_def(ctx, offset + 0x2c0, 0x00000080); + gr_def(ctx, offset + 0x2cc, 0x00000001); + gr_def(ctx, offset + 0x2d0, 0x00000070); + gr_def(ctx, offset + 0x2d4, 0x00000080); + } else { + gr_def(ctx, offset + 0x2b8, 0x00000001); + gr_def(ctx, offset + 0x2bc, 0x000000f0); + gr_def(ctx, offset + 0x2c0, 0x000000ff); + gr_def(ctx, offset + 0x2cc, 0x00000001); + gr_def(ctx, offset + 0x2d0, 0x000000f0); + gr_def(ctx, offset + 0x2d4, 0x000000ff); + gr_def(ctx, offset + 0x2dc, 0x00000009); + offset += 4; + } + gr_def(ctx, offset + 0x2e4, 0x00000001); + gr_def(ctx, offset + 0x2e8, 0x000000cf); + gr_def(ctx, offset + 0x2f0, 0x00000001); + gr_def(ctx, offset + 0x300, 0x000000cf); + gr_def(ctx, offset + 0x308, 0x00000002); + gr_def(ctx, offset + 0x310, 0x00000001); + gr_def(ctx, offset + 0x318, 0x00000001); + gr_def(ctx, offset + 0x320, 0x000000cf); + gr_def(ctx, offset + 0x324, 0x000000cf); + gr_def(ctx, offset + 0x328, 0x00000001); + + /* 6000? */ + if (dev_priv->chipset == 0x50) + cp_ctx(ctx, 0x4063e0, 0x1); + + /* 6800 */ + if (dev_priv->chipset < 0x90) { + cp_ctx(ctx, 0x406814, 0x2b); + gr_def(ctx, 0x406818, 0x00000f80); + gr_def(ctx, 0x406860, 0x007f0080); + gr_def(ctx, 0x40689c, 0x007f0080); + } else { + cp_ctx(ctx, 0x406814, 0x4); + if (dev_priv->chipset == 0x98) + gr_def(ctx, 0x406818, 0x00000f80); + else + gr_def(ctx, 0x406818, 0x00001f80); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + gr_def(ctx, 0x40681c, 0x00000030); + cp_ctx(ctx, 0x406830, 0x3); + } + + /* 7000: per-ROP group state */ + for (i = 0; i < 8; i++) { + if (units & (1<<(i+16))) { + cp_ctx(ctx, 0x407000 + (i<<8), 3); + if (dev_priv->chipset == 0x50) + gr_def(ctx, 0x407000 + (i<<8), 0x1b74f820); + else if (dev_priv->chipset != 0xa5) + gr_def(ctx, 0x407000 + (i<<8), 0x3b74f821); + else + gr_def(ctx, 0x407000 + (i<<8), 0x7b74f821); + gr_def(ctx, 0x407004 + (i<<8), 0x89058001); + + if (dev_priv->chipset == 0x50) { + cp_ctx(ctx, 0x407010 + (i<<8), 1); + } else if (dev_priv->chipset < 0xa0) { + cp_ctx(ctx, 0x407010 + (i<<8), 2); + gr_def(ctx, 0x407010 + (i<<8), 0x00001000); + gr_def(ctx, 0x407014 + (i<<8), 0x0000001f); + } else { + cp_ctx(ctx, 0x407010 + (i<<8), 3); + gr_def(ctx, 0x407010 + (i<<8), 0x00001000); + if (dev_priv->chipset != 0xa5) + gr_def(ctx, 0x407014 + (i<<8), 0x000000ff); + else + gr_def(ctx, 0x407014 + (i<<8), 0x000001ff); + } + + cp_ctx(ctx, 0x407080 + (i<<8), 4); + if (dev_priv->chipset != 0xa5) + gr_def(ctx, 0x407080 + (i<<8), 0x027c10fa); + else + gr_def(ctx, 0x407080 + (i<<8), 0x827c10fa); + if (dev_priv->chipset == 0x50) + gr_def(ctx, 0x407084 + (i<<8), 0x000000c0); + else + gr_def(ctx, 0x407084 + (i<<8), 0x400000c0); + gr_def(ctx, 0x407088 + (i<<8), 0xb7892080); + + if (dev_priv->chipset < 0xa0) + cp_ctx(ctx, 0x407094 + (i<<8), 1); + else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) + cp_ctx(ctx, 0x407094 + (i<<8), 3); + else { + cp_ctx(ctx, 0x407094 + (i<<8), 4); + gr_def(ctx, 0x4070a0 + (i<<8), 1); + } + } + } + + cp_ctx(ctx, 0x407c00, 0x3); + if (dev_priv->chipset < 0x90) + gr_def(ctx, 0x407c00, 0x00010040); + else if (dev_priv->chipset < 0xa0) + gr_def(ctx, 0x407c00, 0x00390040); + else + gr_def(ctx, 0x407c00, 0x003d0040); + gr_def(ctx, 0x407c08, 0x00000022); + if (dev_priv->chipset >= 0xa0) { + cp_ctx(ctx, 0x407c10, 0x3); + cp_ctx(ctx, 0x407c20, 0x1); + cp_ctx(ctx, 0x407c2c, 0x1); + } + + if (dev_priv->chipset < 0xa0) { + cp_ctx(ctx, 0x407d00, 0x9); + } else { + cp_ctx(ctx, 0x407d00, 0x15); + } + if (dev_priv->chipset == 0x98) + gr_def(ctx, 0x407d08, 0x00380040); + else { + if (dev_priv->chipset < 0x90) + gr_def(ctx, 0x407d08, 0x00010040); + else if (dev_priv->chipset < 0xa0) + gr_def(ctx, 0x407d08, 0x00390040); + else + gr_def(ctx, 0x407d08, 0x003d0040); + gr_def(ctx, 0x407d0c, 0x00000022); + } + + /* 8000+: per-TP state */ + for (i = 0; i < 10; i++) { + if (units & (1<chipset < 0xa0) + base = 0x408000 + (i<<12); + else + base = 0x408000 + (i<<11); + if (dev_priv->chipset < 0xa0) + offset = base + 0xc00; + else + offset = base + 0x80; + cp_ctx(ctx, offset + 0x00, 1); + gr_def(ctx, offset + 0x00, 0x0000ff0a); + cp_ctx(ctx, offset + 0x08, 1); + + /* per-MP state */ + for (j = 0; j < (dev_priv->chipset < 0xa0 ? 2 : 4); j++) { + if (!(units & (1 << (j+24)))) continue; + if (dev_priv->chipset < 0xa0) + offset = base + 0x200 + (j<<7); + else + offset = base + 0x100 + (j<<7); + cp_ctx(ctx, offset, 0x20); + gr_def(ctx, offset + 0x00, 0x01800000); + gr_def(ctx, offset + 0x04, 0x00160000); + gr_def(ctx, offset + 0x08, 0x01800000); + gr_def(ctx, offset + 0x18, 0x0003ffff); + switch (dev_priv->chipset) { + case 0x50: + gr_def(ctx, offset + 0x1c, 0x00080000); + break; + case 0x84: + gr_def(ctx, offset + 0x1c, 0x00880000); + break; + case 0x86: + gr_def(ctx, offset + 0x1c, 0x008c0000); + break; + case 0x92: + case 0x96: + case 0x98: + gr_def(ctx, offset + 0x1c, 0x118c0000); + break; + case 0x94: + gr_def(ctx, offset + 0x1c, 0x10880000); + break; + case 0xa0: + case 0xa5: + gr_def(ctx, offset + 0x1c, 0x310c0000); + break; + case 0xa8: + case 0xaa: + case 0xac: + gr_def(ctx, offset + 0x1c, 0x300c0000); + break; + } + gr_def(ctx, offset + 0x40, 0x00010401); + if (dev_priv->chipset == 0x50) + gr_def(ctx, offset + 0x48, 0x00000040); + else + gr_def(ctx, offset + 0x48, 0x00000078); + gr_def(ctx, offset + 0x50, 0x000000bf); + gr_def(ctx, offset + 0x58, 0x00001210); + if (dev_priv->chipset == 0x50) + gr_def(ctx, offset + 0x5c, 0x00000080); + else + gr_def(ctx, offset + 0x5c, 0x08000080); + if (dev_priv->chipset >= 0xa0) + gr_def(ctx, offset + 0x68, 0x0000003e); + } + + if (dev_priv->chipset < 0xa0) + cp_ctx(ctx, base + 0x300, 0x4); + else + cp_ctx(ctx, base + 0x300, 0x5); + if (dev_priv->chipset == 0x50) + gr_def(ctx, base + 0x304, 0x00007070); + else if (dev_priv->chipset < 0xa0) + gr_def(ctx, base + 0x304, 0x00027070); + else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) + gr_def(ctx, base + 0x304, 0x01127070); + else + gr_def(ctx, base + 0x304, 0x05127070); + + if (dev_priv->chipset < 0xa0) + cp_ctx(ctx, base + 0x318, 1); + else + cp_ctx(ctx, base + 0x320, 1); + if (dev_priv->chipset == 0x50) + gr_def(ctx, base + 0x318, 0x0003ffff); + else if (dev_priv->chipset < 0xa0) + gr_def(ctx, base + 0x318, 0x03ffffff); + else + gr_def(ctx, base + 0x320, 0x07ffffff); + + if (dev_priv->chipset < 0xa0) + cp_ctx(ctx, base + 0x324, 5); + else + cp_ctx(ctx, base + 0x328, 4); + + if (dev_priv->chipset < 0xa0) { + cp_ctx(ctx, base + 0x340, 9); + offset = base + 0x340; + } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) { + cp_ctx(ctx, base + 0x33c, 0xb); + offset = base + 0x344; + } else { + cp_ctx(ctx, base + 0x33c, 0xd); + offset = base + 0x344; + } + gr_def(ctx, offset + 0x0, 0x00120407); + gr_def(ctx, offset + 0x4, 0x05091507); + if (dev_priv->chipset == 0x84) + gr_def(ctx, offset + 0x8, 0x05100202); + else + gr_def(ctx, offset + 0x8, 0x05010202); + gr_def(ctx, offset + 0xc, 0x00030201); + + cp_ctx(ctx, base + 0x400, 2); + gr_def(ctx, base + 0x404, 0x00000040); + cp_ctx(ctx, base + 0x40c, 2); + gr_def(ctx, base + 0x40c, 0x0d0c0b0a); + gr_def(ctx, base + 0x410, 0x00141210); + + if (dev_priv->chipset < 0xa0) + offset = base + 0x800; + else + offset = base + 0x500; + cp_ctx(ctx, offset, 6); + gr_def(ctx, offset + 0x0, 0x000001f0); + gr_def(ctx, offset + 0x4, 0x00000001); + gr_def(ctx, offset + 0x8, 0x00000003); + if (dev_priv->chipset == 0x50 || dev_priv->chipset >= 0xaa) + gr_def(ctx, offset + 0xc, 0x00008000); + gr_def(ctx, offset + 0x14, 0x00039e00); + cp_ctx(ctx, offset + 0x1c, 2); + if (dev_priv->chipset == 0x50) + gr_def(ctx, offset + 0x1c, 0x00000040); + else + gr_def(ctx, offset + 0x1c, 0x00000100); + gr_def(ctx, offset + 0x20, 0x00003800); + + if (dev_priv->chipset >= 0xa0) { + cp_ctx(ctx, base + 0x54c, 2); + if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) + gr_def(ctx, base + 0x54c, 0x003fe006); + else + gr_def(ctx, base + 0x54c, 0x003fe007); + gr_def(ctx, base + 0x550, 0x003fe000); + } + + if (dev_priv->chipset < 0xa0) + offset = base + 0xa00; + else + offset = base + 0x680; + cp_ctx(ctx, offset, 1); + gr_def(ctx, offset, 0x00404040); + + if (dev_priv->chipset < 0xa0) + offset = base + 0xe00; + else + offset = base + 0x700; + cp_ctx(ctx, offset, 2); + if (dev_priv->chipset < 0xa0) + gr_def(ctx, offset, 0x0077f005); + else if (dev_priv->chipset == 0xa5) + gr_def(ctx, offset, 0x6cf7f007); + else if (dev_priv->chipset == 0xa8) + gr_def(ctx, offset, 0x6cfff007); + else if (dev_priv->chipset == 0xac) + gr_def(ctx, offset, 0x0cfff007); + else + gr_def(ctx, offset, 0x0cf7f007); + if (dev_priv->chipset == 0x50) + gr_def(ctx, offset + 0x4, 0x00007fff); + else if (dev_priv->chipset < 0xa0) + gr_def(ctx, offset + 0x4, 0x003f7fff); + else + gr_def(ctx, offset + 0x4, 0x02bf7fff); + cp_ctx(ctx, offset + 0x2c, 1); + if (dev_priv->chipset == 0x50) { + cp_ctx(ctx, offset + 0x50, 9); + gr_def(ctx, offset + 0x54, 0x000003ff); + gr_def(ctx, offset + 0x58, 0x00000003); + gr_def(ctx, offset + 0x5c, 0x00000003); + gr_def(ctx, offset + 0x60, 0x000001ff); + gr_def(ctx, offset + 0x64, 0x0000001f); + gr_def(ctx, offset + 0x68, 0x0000000f); + gr_def(ctx, offset + 0x6c, 0x0000000f); + } else if(dev_priv->chipset < 0xa0) { + cp_ctx(ctx, offset + 0x50, 1); + cp_ctx(ctx, offset + 0x70, 1); + } else { + cp_ctx(ctx, offset + 0x50, 1); + cp_ctx(ctx, offset + 0x60, 5); + } + } + } +} + +/* + * xfer areas. These are a pain. + * + * There are 2 xfer areas: the first one is big and contains all sorts of + * stuff, the second is small and contains some per-TP context. + * + * Each area is split into 8 "strands". The areas, when saved to grctx, + * are made of 8-word blocks. Each block contains a single word from + * each strand. The strands are independent of each other, their + * addresses are unrelated to each other, and data in them is closely + * packed together. The strand layout varies a bit between cards: here + * and there, a single word is thrown out in the middle and the whole + * strand is offset by a bit from corresponding one on another chipset. + * For this reason, addresses of stuff in strands are almost useless. + * Knowing sequence of stuff and size of gaps between them is much more + * useful, and that's how we build the strands in our generator. + * + * NVA0 takes this mess to a whole new level by cutting the old strands + * into a few dozen pieces [known as genes], rearranging them randomly, + * and putting them back together to make new strands. Hopefully these + * genes correspond more or less directly to the same PGRAPH subunits + * as in 400040 register. + * + * The most common value in default context is 0, and when the genes + * are separated by 0's, gene bounduaries are quite speculative... + * some of them can be clearly deduced, others can be guessed, and yet + * others won't be resolved without figuring out the real meaning of + * given ctxval. For the same reason, ending point of each strand + * is unknown. Except for strand 0, which is the longest strand and + * its end corresponds to end of the whole xfer. + * + * An unsolved mystery is the seek instruction: it takes an argument + * in bits 8-18, and that argument is clearly the place in strands to + * seek to... but the offsets don't seem to correspond to offsets as + * seen in grctx. Perhaps there's another, real, not randomly-changing + * addressing in strands, and the xfer insn just happens to skip over + * the unused bits? NV10-NV30 PIPE comes to mind... + * + * As far as I know, there's no way to access the xfer areas directly + * without the help of ctxprog. + */ + +static inline void +xf_emit(struct nouveau_grctx *ctx, int num, uint32_t val) { + int i; + if (val && ctx->mode == NOUVEAU_GRCTX_VALS) + for (i = 0; i < num; i++) + nv_wo32(ctx->dev, ctx->data, ctx->ctxvals_pos + (i << 3), val); + ctx->ctxvals_pos += num << 3; +} + +/* Gene declarations... */ + +static void nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk1(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk2(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk3(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk4(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk5(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk6(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk7(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk8(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk9(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_unk10(struct nouveau_grctx *ctx); +static void nv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx); +static void nv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx); + +static void +nv50_graph_construct_xfer1(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i; + int offset; + int size = 0; + uint32_t units = nv_rd32 (ctx->dev, 0x1540); + + offset = (ctx->ctxvals_pos+0x3f)&~0x3f; + ctx->ctxvals_base = offset; + + if (dev_priv->chipset < 0xa0) { + /* Strand 0 */ + ctx->ctxvals_pos = offset; + switch (dev_priv->chipset) { + case 0x50: + xf_emit(ctx, 0x99, 0); + break; + case 0x84: + case 0x86: + xf_emit(ctx, 0x384, 0); + break; + case 0x92: + case 0x94: + case 0x96: + case 0x98: + xf_emit(ctx, 0x380, 0); + break; + } + nv50_graph_construct_gene_m2mf (ctx); + switch (dev_priv->chipset) { + case 0x50: + case 0x84: + case 0x86: + case 0x98: + xf_emit(ctx, 0x4c4, 0); + break; + case 0x92: + case 0x94: + case 0x96: + xf_emit(ctx, 0x984, 0); + break; + } + nv50_graph_construct_gene_unk5(ctx); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 0xa, 0); + else + xf_emit(ctx, 0xb, 0); + nv50_graph_construct_gene_unk4(ctx); + nv50_graph_construct_gene_unk3(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 1 */ + ctx->ctxvals_pos = offset + 0x1; + nv50_graph_construct_gene_unk6(ctx); + nv50_graph_construct_gene_unk7(ctx); + nv50_graph_construct_gene_unk8(ctx); + switch (dev_priv->chipset) { + case 0x50: + case 0x92: + xf_emit(ctx, 0xfb, 0); + break; + case 0x84: + xf_emit(ctx, 0xd3, 0); + break; + case 0x94: + case 0x96: + xf_emit(ctx, 0xab, 0); + break; + case 0x86: + case 0x98: + xf_emit(ctx, 0x6b, 0); + break; + } + xf_emit(ctx, 2, 0x4e3bfdf); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 0xb, 0); + xf_emit(ctx, 2, 0x4e3bfdf); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 2 */ + ctx->ctxvals_pos = offset + 0x2; + switch (dev_priv->chipset) { + case 0x50: + case 0x92: + xf_emit(ctx, 0xa80, 0); + break; + case 0x84: + xf_emit(ctx, 0xa7e, 0); + break; + case 0x94: + case 0x96: + xf_emit(ctx, 0xa7c, 0); + break; + case 0x86: + case 0x98: + xf_emit(ctx, 0xa7a, 0); + break; + } + xf_emit(ctx, 1, 0x3fffff); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x1fff); + xf_emit(ctx, 0xe, 0); + nv50_graph_construct_gene_unk9(ctx); + nv50_graph_construct_gene_unk2(ctx); + nv50_graph_construct_gene_unk1(ctx); + nv50_graph_construct_gene_unk10(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 3: per-ROP group state */ + ctx->ctxvals_pos = offset + 3; + for (i = 0; i < 6; i++) + if (units & (1 << (i + 16))) + nv50_graph_construct_gene_ropc(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strands 4-7: per-TP state */ + for (i = 0; i < 4; i++) { + ctx->ctxvals_pos = offset + 4 + i; + if (units & (1 << (2 * i))) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << (2 * i + 1))) + nv50_graph_construct_xfer_tp(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + } + } else { + /* Strand 0 */ + ctx->ctxvals_pos = offset; + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0x385, 0); + else + xf_emit(ctx, 0x384, 0); + nv50_graph_construct_gene_m2mf(ctx); + xf_emit(ctx, 0x950, 0); + nv50_graph_construct_gene_unk10(ctx); + xf_emit(ctx, 1, 0x0fac6881); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 1, 1); + xf_emit(ctx, 3, 0); + } + nv50_graph_construct_gene_unk8(ctx); + if (dev_priv->chipset == 0xa0) + xf_emit(ctx, 0x189, 0); + else if (dev_priv->chipset < 0xa8) + xf_emit(ctx, 0x99, 0); + else if (dev_priv->chipset == 0xaa) + xf_emit(ctx, 0x65, 0); + else + xf_emit(ctx, 0x6d, 0); + nv50_graph_construct_gene_unk9(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 1 */ + ctx->ctxvals_pos = offset + 1; + nv50_graph_construct_gene_unk1(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 2 */ + ctx->ctxvals_pos = offset + 2; + if (dev_priv->chipset == 0xa0) { + nv50_graph_construct_gene_unk2(ctx); + } + xf_emit(ctx, 0x36, 0); + nv50_graph_construct_gene_unk5(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 3 */ + ctx->ctxvals_pos = offset + 3; + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + nv50_graph_construct_gene_unk6(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 4 */ + ctx->ctxvals_pos = offset + 4; + if (dev_priv->chipset == 0xa0) + xf_emit(ctx, 0xa80, 0); + else + xf_emit(ctx, 0xa7a, 0); + xf_emit(ctx, 1, 0x3fffff); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x1fff); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 5 */ + ctx->ctxvals_pos = offset + 5; + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 0xb, 0); + xf_emit(ctx, 2, 0x4e3bfdf); + xf_emit(ctx, 3, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 2, 0x4e3bfdf); + xf_emit(ctx, 2, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 0); + for (i = 0; i < 8; i++) + if (units & (1<<(i+16))) + nv50_graph_construct_gene_ropc(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 6 */ + ctx->ctxvals_pos = offset + 6; + nv50_graph_construct_gene_unk3(ctx); + xf_emit(ctx, 0xb, 0); + nv50_graph_construct_gene_unk4(ctx); + nv50_graph_construct_gene_unk7(ctx); + if (units & (1 << 0)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 1)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 2)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 3)) + nv50_graph_construct_xfer_tp(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 7 */ + ctx->ctxvals_pos = offset + 7; + if (dev_priv->chipset == 0xa0) { + if (units & (1 << 4)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 5)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 6)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 7)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 8)) + nv50_graph_construct_xfer_tp(ctx); + if (units & (1 << 9)) + nv50_graph_construct_xfer_tp(ctx); + } else { + nv50_graph_construct_gene_unk2(ctx); + } + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + } + + ctx->ctxvals_pos = offset + size * 8; + ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f; + cp_lsr (ctx, offset); + cp_out (ctx, CP_SET_XFER_POINTER); + cp_lsr (ctx, size); + cp_out (ctx, CP_SEEK_1); + cp_out (ctx, CP_XFER_1); + cp_wait(ctx, XFER, BUSY); +} + +/* + * non-trivial demagiced parts of ctx init go here + */ + +static void +nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx) +{ + /* m2mf state */ + xf_emit (ctx, 1, 0); /* DMA_NOTIFY instance >> 4 */ + xf_emit (ctx, 1, 0); /* DMA_BUFFER_IN instance >> 4 */ + xf_emit (ctx, 1, 0); /* DMA_BUFFER_OUT instance >> 4 */ + xf_emit (ctx, 1, 0); /* OFFSET_IN */ + xf_emit (ctx, 1, 0); /* OFFSET_OUT */ + xf_emit (ctx, 1, 0); /* PITCH_IN */ + xf_emit (ctx, 1, 0); /* PITCH_OUT */ + xf_emit (ctx, 1, 0); /* LINE_LENGTH */ + xf_emit (ctx, 1, 0); /* LINE_COUNT */ + xf_emit (ctx, 1, 0x21); /* FORMAT: bits 0-4 INPUT_INC, bits 5-9 OUTPUT_INC */ + xf_emit (ctx, 1, 1); /* LINEAR_IN */ + xf_emit (ctx, 1, 0x2); /* TILING_MODE_IN: bits 0-2 y tiling, bits 3-5 z tiling */ + xf_emit (ctx, 1, 0x100); /* TILING_PITCH_IN */ + xf_emit (ctx, 1, 0x100); /* TILING_HEIGHT_IN */ + xf_emit (ctx, 1, 1); /* TILING_DEPTH_IN */ + xf_emit (ctx, 1, 0); /* TILING_POSITION_IN_Z */ + xf_emit (ctx, 1, 0); /* TILING_POSITION_IN */ + xf_emit (ctx, 1, 1); /* LINEAR_OUT */ + xf_emit (ctx, 1, 0x2); /* TILING_MODE_OUT: bits 0-2 y tiling, bits 3-5 z tiling */ + xf_emit (ctx, 1, 0x100); /* TILING_PITCH_OUT */ + xf_emit (ctx, 1, 0x100); /* TILING_HEIGHT_OUT */ + xf_emit (ctx, 1, 1); /* TILING_DEPTH_OUT */ + xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT_Z */ + xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT */ + xf_emit (ctx, 1, 0); /* OFFSET_IN_HIGH */ + xf_emit (ctx, 1, 0); /* OFFSET_OUT_HIGH */ +} + +static void +nv50_graph_construct_gene_unk1(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* end of area 2 on pre-NVA0, area 1 on NVAx */ + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x80); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0x80c14); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 1, 0x3ff); + else + xf_emit(ctx, 1, 0x7ff); + switch (dev_priv->chipset) { + case 0x50: + case 0x86: + case 0x98: + case 0xaa: + case 0xac: + xf_emit(ctx, 0x542, 0); + break; + case 0x84: + case 0x92: + case 0x94: + case 0x96: + xf_emit(ctx, 0x942, 0); + break; + case 0xa0: + xf_emit(ctx, 0x2042, 0); + break; + case 0xa5: + case 0xa8: + xf_emit(ctx, 0x842, 0); + break; + } + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x80); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x27); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x26); + xf_emit(ctx, 3, 0); +} + +static void +nv50_graph_construct_gene_unk10(struct nouveau_grctx *ctx) +{ + /* end of area 2 on pre-NVA0, area 1 on NVAx */ + xf_emit(ctx, 0x10, 0x04000000); + xf_emit(ctx, 0x24, 0); + xf_emit(ctx, 2, 0x04e3bfdf); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x1fe21); +} + +static void +nv50_graph_construct_gene_unk2(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* middle of area 2 on pre-NVA0, beginning of area 2 on NVA0, area 7 on >NVA0 */ + if (dev_priv->chipset != 0x50) { + xf_emit(ctx, 5, 0); + xf_emit(ctx, 1, 0x80c14); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x804); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0x8100c12); + } + xf_emit(ctx, 1, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x10); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 3, 0); + else + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x804); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x1a); + if (dev_priv->chipset != 0x50) + xf_emit(ctx, 1, 0x7f); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x80c14); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 6, 0); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 1, 0x3ff); + else + xf_emit(ctx, 1, 0x7ff); + xf_emit(ctx, 1, 0x80c14); + xf_emit(ctx, 0x38, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 0x38, 0); + xf_emit(ctx, 2, 0x88); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 0x16, 0); + xf_emit(ctx, 1, 0x26); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x3f800000); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 4, 0); + else + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x1a); + xf_emit(ctx, 1, 0x10); + if (dev_priv->chipset != 0x50) + xf_emit(ctx, 0x28, 0); + else + xf_emit(ctx, 0x25, 0); + xf_emit(ctx, 1, 0x52); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x26); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x1a); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x00ffff00); + xf_emit(ctx, 1, 0); +} + +static void +nv50_graph_construct_gene_unk3(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* end of area 0 on pre-NVA0, beginning of area 6 on NVAx */ + xf_emit(ctx, 1, 0x3f); + xf_emit(ctx, 0xa, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 0x04000000); + xf_emit(ctx, 8, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 4); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 0x10, 0); + else + xf_emit(ctx, 0x11, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x1001); + xf_emit(ctx, 4, 0xffff); + xf_emit(ctx, 0x20, 0); + xf_emit(ctx, 0x10, 0x3f800000); + xf_emit(ctx, 1, 0x10); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 1, 0); + else + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 3); + xf_emit(ctx, 2, 0); +} + +static void +nv50_graph_construct_gene_unk4(struct nouveau_grctx *ctx) +{ + /* middle of area 0 on pre-NVA0, middle of area 6 on NVAx */ + xf_emit(ctx, 2, 0x04000000); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x80); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x80); + xf_emit(ctx, 1, 0); +} + +static void +nv50_graph_construct_gene_unk5(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* middle of area 0 on pre-NVA0 [after m2mf], end of area 2 on NVAx */ + xf_emit(ctx, 2, 4); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0x1c4d, 0); + else + xf_emit(ctx, 0x1c4b, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0x8100c12); + if (dev_priv->chipset != 0x50) + xf_emit(ctx, 1, 3); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x80c14); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0x80c14); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 1, 0x27); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x3c1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x16, 0); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 1, 0); +} + +static void +nv50_graph_construct_gene_unk6(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* beginning of area 1 on pre-NVA0 [after m2mf], area 3 on NVAx */ + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0xf); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 8, 0); + else + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x20); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0x11, 0); + else if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 0xf, 0); + else + xf_emit(ctx, 0xe, 0); + xf_emit(ctx, 1, 0x1a); + xf_emit(ctx, 0xd, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 8); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 1, 0x3ff); + else + xf_emit(ctx, 1, 0x7ff); + if (dev_priv->chipset == 0xa8) + xf_emit(ctx, 1, 0x1e00); + xf_emit(ctx, 0xc, 0); + xf_emit(ctx, 1, 0xf); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 0x125, 0); + else if (dev_priv->chipset < 0xa0) + xf_emit(ctx, 0x126, 0); + else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) + xf_emit(ctx, 0x124, 0); + else + xf_emit(ctx, 0x1f7, 0); + xf_emit(ctx, 1, 0xf); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 3, 0); + else + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0xa1, 0); + else + xf_emit(ctx, 0x5a, 0); + xf_emit(ctx, 1, 0xf); + if (dev_priv->chipset < 0xa0) + xf_emit(ctx, 0x834, 0); + else if (dev_priv->chipset == 0xa0) + xf_emit(ctx, 0x1873, 0); + else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0x8ba, 0); + else + xf_emit(ctx, 0x833, 0); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 0xf, 0); +} + +static void +nv50_graph_construct_gene_unk7(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* middle of area 1 on pre-NVA0 [after m2mf], middle of area 6 on NVAx */ + xf_emit(ctx, 2, 0); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 2, 1); + else + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0x100); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 8); + xf_emit(ctx, 5, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 3, 1); + xf_emit(ctx, 1, 0xcf); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 6, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 3, 1); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x15); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x4444480); + xf_emit(ctx, 0x37, 0); +} + +static void +nv50_graph_construct_gene_unk8(struct nouveau_grctx *ctx) +{ + /* middle of area 1 on pre-NVA0 [after m2mf], middle of area 0 on NVAx */ + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x100); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x10001); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x10001); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x10001); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 2); +} + +static void +nv50_graph_construct_gene_unk9(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + /* middle of area 2 on pre-NVA0 [after m2mf], end of area 0 on NVAx */ + xf_emit(ctx, 1, 0x3f800000); + xf_emit(ctx, 6, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0x1a); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x12, 0); + xf_emit(ctx, 1, 0x00ffff00); + xf_emit(ctx, 6, 0); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 0xf, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 2, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 3); + else if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 0x04000000); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 5); + xf_emit(ctx, 1, 0x52); + if (dev_priv->chipset == 0x50) { + xf_emit(ctx, 0x13, 0); + } else { + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0x11, 0); + else + xf_emit(ctx, 0x10, 0); + } + xf_emit(ctx, 0x10, 0x3f800000); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 0x26, 0); + xf_emit(ctx, 1, 0x8100c12); + xf_emit(ctx, 1, 5); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 4, 0xffff); + if (dev_priv->chipset != 0x50) + xf_emit(ctx, 1, 3); + if (dev_priv->chipset < 0xa0) + xf_emit(ctx, 0x1f, 0); + else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0xc, 0); + else + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x00ffff00); + xf_emit(ctx, 1, 0x1a); + if (dev_priv->chipset != 0x50) { + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 3); + } + if (dev_priv->chipset < 0xa0) + xf_emit(ctx, 0x26, 0); + else + xf_emit(ctx, 0x3c, 0); + xf_emit(ctx, 1, 0x102); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 4, 4); + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 8, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 1, 0x3ff); + else + xf_emit(ctx, 1, 0x7ff); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x102); + xf_emit(ctx, 9, 0); + xf_emit(ctx, 4, 4); + xf_emit(ctx, 0x2c, 0); +} + +static void +nv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int magic2; + if (dev_priv->chipset == 0x50) { + magic2 = 0x00003e60; + } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) { + magic2 = 0x001ffe67; + } else { + magic2 = 0x00087e67; + } + xf_emit(ctx, 8, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, magic2); + xf_emit(ctx, 4, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 7, 0); + if (dev_priv->chipset >= 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 0x15); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 4, 0); + if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x92 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa0) { + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0x400); + xf_emit(ctx, 1, 0x300); + xf_emit(ctx, 1, 0x1001); + if (dev_priv->chipset != 0xa0) { + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 0); + else + xf_emit(ctx, 1, 0x15); + } + xf_emit(ctx, 3, 0); + } + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 8, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x13, 0); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 0x10, 0); + xf_emit(ctx, 0x10, 0x3f800000); + xf_emit(ctx, 0x19, 0); + xf_emit(ctx, 1, 0x10); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x3f); + xf_emit(ctx, 6, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset >= 0xa0) { + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x1001); + xf_emit(ctx, 0xb, 0); + } else { + xf_emit(ctx, 0xc, 0); + } + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x11); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 4, 0); + else + xf_emit(ctx, 6, 0); + xf_emit(ctx, 3, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, magic2); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x0fac6881); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 1, 0); + xf_emit(ctx, 0x18, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 5, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x16, 0); + } else { + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 0x1b, 0); + else + xf_emit(ctx, 0x15, 0); + } + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 1); + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 4, 0); + else + xf_emit(ctx, 3, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 0x10, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 0x10, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 3, 0); + } + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x5b, 0); +} + +static void +nv50_graph_construct_xfer_tp_x1(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int magic3; + if (dev_priv->chipset == 0x50) + magic3 = 0x1000; + else if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa8) + magic3 = 0x1e00; + else + magic3 = 0; + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 4); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0x24, 0); + else if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 0x14, 0); + else + xf_emit(ctx, 0x15, 0); + xf_emit(ctx, 2, 4); + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 1, 0x03020100); + else + xf_emit(ctx, 1, 0x00608080); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 2, 4); + xf_emit(ctx, 1, 0x80); + if (magic3) + xf_emit(ctx, 1, magic3); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 0x24, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0x80); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0x03020100); + xf_emit(ctx, 1, 3); + if (magic3) + xf_emit(ctx, 1, magic3); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 3); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 4); + if (dev_priv->chipset == 0x94 || dev_priv->chipset == 0x96) + xf_emit(ctx, 0x1024, 0); + else if (dev_priv->chipset < 0xa0) + xf_emit(ctx, 0xa24, 0); + else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) + xf_emit(ctx, 0x214, 0); + else + xf_emit(ctx, 0x414, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 3); + xf_emit(ctx, 2, 0); +} + +static void +nv50_graph_construct_xfer_tp_x2(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int magic1, magic2; + if (dev_priv->chipset == 0x50) { + magic1 = 0x3ff; + magic2 = 0x00003e60; + } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) { + magic1 = 0x7ff; + magic2 = 0x001ffe67; + } else { + magic1 = 0x7ff; + magic2 = 0x00087e67; + } + xf_emit(ctx, 3, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0xc, 0); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 0xb, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 4, 0xffff); + xf_emit(ctx, 8, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 5, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 1, 3); + xf_emit(ctx, 1, 0); + } else if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0xa, 0); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 1, 2); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 1, 0); + xf_emit(ctx, 0x18, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 1, 0); + } + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 3, 0xcf); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0xa, 0); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, magic2); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x11); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 2, 1); + else + xf_emit(ctx, 1, 1); + if(dev_priv->chipset == 0x50) + xf_emit(ctx, 1, 0); + else + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 5, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, magic1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x28, 0); + xf_emit(ctx, 8, 8); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 8, 0x400); + xf_emit(ctx, 8, 0x300); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x20); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 0x100); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x40); + xf_emit(ctx, 1, 0x100); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 3); + xf_emit(ctx, 4, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, magic2); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 9, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x400); + xf_emit(ctx, 1, 0x300); + xf_emit(ctx, 1, 0x1001); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 4, 0); + else + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 1, 0xf); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 0x15, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 3, 0); + } else + xf_emit(ctx, 0x17, 0); + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 1, 0x0fac6881); + xf_emit(ctx, 1, magic2); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 3, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 2, 1); + else + xf_emit(ctx, 1, 1); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 2, 0); + else if (dev_priv->chipset != 0x50) + xf_emit(ctx, 1, 0); +} + +static void +nv50_graph_construct_xfer_tp_x3(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 2, 0); + else + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0x2a712488); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x4085c000); + xf_emit(ctx, 1, 0x40); + xf_emit(ctx, 1, 0x100); + xf_emit(ctx, 1, 0x10100); + xf_emit(ctx, 1, 0x02800000); +} + +static void +nv50_graph_construct_xfer_tp_x4(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + xf_emit(ctx, 2, 0x04e3bfdf); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x00ffff00); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 2, 1); + else + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 0x00ffff00); + xf_emit(ctx, 8, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0x30201000); + xf_emit(ctx, 1, 0x70605040); + xf_emit(ctx, 1, 0xb8a89888); + xf_emit(ctx, 1, 0xf8e8d8c8); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x1a); +} + +static void +nv50_graph_construct_xfer_tp_x5(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 0xfac6881); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 2, 0); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 0xb, 0); + else + xf_emit(ctx, 0xa, 0); + xf_emit(ctx, 8, 1); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0xfac6881); + xf_emit(ctx, 1, 0xf); + xf_emit(ctx, 7, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 1); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 6, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 6, 0); + } else { + xf_emit(ctx, 0xb, 0); + } +} + +static void +nv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + if (dev_priv->chipset < 0xa0) { + nv50_graph_construct_xfer_tp_x1(ctx); + nv50_graph_construct_xfer_tp_x2(ctx); + nv50_graph_construct_xfer_tp_x3(ctx); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 0xf, 0); + else + xf_emit(ctx, 0x12, 0); + nv50_graph_construct_xfer_tp_x4(ctx); + } else { + nv50_graph_construct_xfer_tp_x3(ctx); + if (dev_priv->chipset < 0xaa) + xf_emit(ctx, 0xc, 0); + else + xf_emit(ctx, 0xa, 0); + nv50_graph_construct_xfer_tp_x2(ctx); + nv50_graph_construct_xfer_tp_x5(ctx); + nv50_graph_construct_xfer_tp_x4(ctx); + nv50_graph_construct_xfer_tp_x1(ctx); + } +} + +static void +nv50_graph_construct_xfer_tp2(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i, mpcnt; + if (dev_priv->chipset == 0x98 || dev_priv->chipset == 0xaa) + mpcnt = 1; + else if (dev_priv->chipset < 0xa0 || dev_priv->chipset >= 0xa8) + mpcnt = 2; + else + mpcnt = 3; + for (i = 0; i < mpcnt; i++) { + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x80); + xf_emit(ctx, 1, 0x80007004); + xf_emit(ctx, 1, 0x04000400); + if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 1, 0xc0); + xf_emit(ctx, 1, 0x1000); + xf_emit(ctx, 2, 0); + if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa8) { + xf_emit(ctx, 1, 0xe00); + xf_emit(ctx, 1, 0x1e00); + } + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 2, 0x1000); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 2); + if (dev_priv->chipset >= 0xaa) + xf_emit(ctx, 0xb, 0); + else if (dev_priv->chipset >= 0xa0) + xf_emit(ctx, 0xc, 0); + else + xf_emit(ctx, 0xa, 0); + } + xf_emit(ctx, 1, 0x08100c12); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset >= 0xa0) { + xf_emit(ctx, 1, 0x1fe21); + } + xf_emit(ctx, 5, 0); + xf_emit(ctx, 4, 0xffff); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 2, 0x10001); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 0x1fe21); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 1); + xf_emit(ctx, 4, 0); + xf_emit(ctx, 1, 0x08100c12); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 8, 0); + xf_emit(ctx, 1, 0xfac6881); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) + xf_emit(ctx, 1, 3); + xf_emit(ctx, 3, 0); + xf_emit(ctx, 1, 4); + xf_emit(ctx, 9, 0); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 2, 1); + xf_emit(ctx, 1, 2); + xf_emit(ctx, 3, 1); + xf_emit(ctx, 1, 0); + if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) { + xf_emit(ctx, 8, 2); + xf_emit(ctx, 0x10, 1); + xf_emit(ctx, 8, 2); + xf_emit(ctx, 0x18, 1); + xf_emit(ctx, 3, 0); + } + xf_emit(ctx, 1, 4); + if (dev_priv->chipset == 0x50) + xf_emit(ctx, 0x3a0, 0); + else if (dev_priv->chipset < 0x94) + xf_emit(ctx, 0x3a2, 0); + else if (dev_priv->chipset == 0x98 || dev_priv->chipset == 0xaa) + xf_emit(ctx, 0x39f, 0); + else + xf_emit(ctx, 0x3a3, 0); + xf_emit(ctx, 1, 0x11); + xf_emit(ctx, 1, 0); + xf_emit(ctx, 1, 1); + xf_emit(ctx, 0x2d, 0); +} + +static void +nv50_graph_construct_xfer2(struct nouveau_grctx *ctx) +{ + struct drm_nouveau_private *dev_priv = ctx->dev->dev_private; + int i; + uint32_t offset; + uint32_t units = nv_rd32 (ctx->dev, 0x1540); + int size = 0; + + offset = (ctx->ctxvals_pos+0x3f)&~0x3f; + + if (dev_priv->chipset < 0xa0) { + for (i = 0; i < 8; i++) { + ctx->ctxvals_pos = offset + i; + if (i == 0) + xf_emit(ctx, 1, 0x08100c12); + if (units & (1 << i)) + nv50_graph_construct_xfer_tp2(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + } + } else { + /* Strand 0: TPs 0, 1 */ + ctx->ctxvals_pos = offset; + xf_emit(ctx, 1, 0x08100c12); + if (units & (1 << 0)) + nv50_graph_construct_xfer_tp2(ctx); + if (units & (1 << 1)) + nv50_graph_construct_xfer_tp2(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 0: TPs 2, 3 */ + ctx->ctxvals_pos = offset + 1; + if (units & (1 << 2)) + nv50_graph_construct_xfer_tp2(ctx); + if (units & (1 << 3)) + nv50_graph_construct_xfer_tp2(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 0: TPs 4, 5, 6 */ + ctx->ctxvals_pos = offset + 2; + if (units & (1 << 4)) + nv50_graph_construct_xfer_tp2(ctx); + if (units & (1 << 5)) + nv50_graph_construct_xfer_tp2(ctx); + if (units & (1 << 6)) + nv50_graph_construct_xfer_tp2(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + + /* Strand 0: TPs 7, 8, 9 */ + ctx->ctxvals_pos = offset + 3; + if (units & (1 << 7)) + nv50_graph_construct_xfer_tp2(ctx); + if (units & (1 << 8)) + nv50_graph_construct_xfer_tp2(ctx); + if (units & (1 << 9)) + nv50_graph_construct_xfer_tp2(ctx); + if ((ctx->ctxvals_pos-offset)/8 > size) + size = (ctx->ctxvals_pos-offset)/8; + } + ctx->ctxvals_pos = offset + size * 8; + ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f; + cp_lsr (ctx, offset); + cp_out (ctx, CP_SET_XFER_POINTER); + cp_lsr (ctx, size); + cp_out (ctx, CP_SEEK_2); + cp_out (ctx, CP_XFER_2); + cp_wait(ctx, XFER, BUSY); +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_i2c.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_i2c.c @@ -0,0 +1,269 @@ +/* + * Copyright 2009 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Ben Skeggs + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_i2c.h" +#include "nouveau_hw.h" + +static void +nv04_i2c_setscl(void *data, int state) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + uint8_t val; + + val = (NVReadVgaCrtc(dev, 0, i2c->wr) & 0xd0) | (state ? 0x20 : 0); + NVWriteVgaCrtc(dev, 0, i2c->wr, val | 0x01); +} + +static void +nv04_i2c_setsda(void *data, int state) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + uint8_t val; + + val = (NVReadVgaCrtc(dev, 0, i2c->wr) & 0xe0) | (state ? 0x10 : 0); + NVWriteVgaCrtc(dev, 0, i2c->wr, val | 0x01); +} + +static int +nv04_i2c_getscl(void *data) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + return !!(NVReadVgaCrtc(dev, 0, i2c->rd) & 4); +} + +static int +nv04_i2c_getsda(void *data) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + return !!(NVReadVgaCrtc(dev, 0, i2c->rd) & 8); +} + +static void +nv4e_i2c_setscl(void *data, int state) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + uint8_t val; + + val = (nv_rd32(dev, i2c->wr) & 0xd0) | (state ? 0x20 : 0); + nv_wr32(dev, i2c->wr, val | 0x01); +} + +static void +nv4e_i2c_setsda(void *data, int state) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + uint8_t val; + + val = (nv_rd32(dev, i2c->wr) & 0xe0) | (state ? 0x10 : 0); + nv_wr32(dev, i2c->wr, val | 0x01); +} + +static int +nv4e_i2c_getscl(void *data) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + return !!((nv_rd32(dev, i2c->rd) >> 16) & 4); +} + +static int +nv4e_i2c_getsda(void *data) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + return !!((nv_rd32(dev, i2c->rd) >> 16) & 8); +} + +static int +nv50_i2c_getscl(void *data) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + return !!(nv_rd32(dev, i2c->rd) & 1); +} + + +static int +nv50_i2c_getsda(void *data) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + return !!(nv_rd32(dev, i2c->rd) & 2); +} + +static void +nv50_i2c_setscl(void *data, int state) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + nv_wr32(dev, i2c->wr, 4 | (i2c->data ? 2 : 0) | (state ? 1 : 0)); +} + +static void +nv50_i2c_setsda(void *data, int state) +{ + struct nouveau_i2c_chan *i2c = data; + struct drm_device *dev = i2c->dev; + + nv_wr32(dev, i2c->wr, + (nv_rd32(dev, i2c->rd) & 1) | 4 | (state ? 2 : 0)); + i2c->data = state; +} + +static const uint32_t nv50_i2c_port[] = { + 0x00e138, 0x00e150, 0x00e168, 0x00e180, + 0x00e254, 0x00e274, 0x00e764, 0x00e780, + 0x00e79c, 0x00e7b8 +}; +#define NV50_I2C_PORTS ARRAY_SIZE(nv50_i2c_port) + +int +nouveau_i2c_init(struct drm_device *dev, struct dcb_i2c_entry *entry, int index) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_i2c_chan *i2c; + int ret; + + if (entry->chan) + return -EEXIST; + + if (dev_priv->card_type == NV_50 && entry->read >= NV50_I2C_PORTS) { + NV_ERROR(dev, "unknown i2c port %d\n", entry->read); + return -EINVAL; + } + + i2c = kzalloc(sizeof(*i2c), GFP_KERNEL); + if (i2c == NULL) + return -ENOMEM; + + switch (entry->port_type) { + case 0: + i2c->algo.bit.setsda = nv04_i2c_setsda; + i2c->algo.bit.setscl = nv04_i2c_setscl; + i2c->algo.bit.getsda = nv04_i2c_getsda; + i2c->algo.bit.getscl = nv04_i2c_getscl; + i2c->rd = entry->read; + i2c->wr = entry->write; + break; + case 4: + i2c->algo.bit.setsda = nv4e_i2c_setsda; + i2c->algo.bit.setscl = nv4e_i2c_setscl; + i2c->algo.bit.getsda = nv4e_i2c_getsda; + i2c->algo.bit.getscl = nv4e_i2c_getscl; + i2c->rd = 0x600800 + entry->read; + i2c->wr = 0x600800 + entry->write; + break; + case 5: + i2c->algo.bit.setsda = nv50_i2c_setsda; + i2c->algo.bit.setscl = nv50_i2c_setscl; + i2c->algo.bit.getsda = nv50_i2c_getsda; + i2c->algo.bit.getscl = nv50_i2c_getscl; + i2c->rd = nv50_i2c_port[entry->read]; + i2c->wr = i2c->rd; + break; + case 6: + i2c->rd = entry->read; + i2c->wr = entry->write; + break; + default: + NV_ERROR(dev, "DCB I2C port type %d unknown\n", + entry->port_type); + kfree(i2c); + return -EINVAL; + } + + snprintf(i2c->adapter.name, sizeof(i2c->adapter.name), + "nouveau-%s-%d", pci_name(dev->pdev), index); + i2c->adapter.owner = THIS_MODULE; + i2c->adapter.dev.parent = &dev->pdev->dev; + i2c->dev = dev; + i2c_set_adapdata(&i2c->adapter, i2c); + + if (entry->port_type < 6) { + i2c->adapter.algo_data = &i2c->algo.bit; + i2c->algo.bit.udelay = 40; + i2c->algo.bit.timeout = usecs_to_jiffies(5000); + i2c->algo.bit.data = i2c; + ret = i2c_bit_add_bus(&i2c->adapter); + } else { + i2c->adapter.algo_data = &i2c->algo.dp; + i2c->algo.dp.running = false; + i2c->algo.dp.address = 0; + i2c->algo.dp.aux_ch = nouveau_dp_i2c_aux_ch; + ret = i2c_dp_aux_add_bus(&i2c->adapter); + } + + if (ret) { + NV_ERROR(dev, "Failed to register i2c %d\n", index); + kfree(i2c); + return ret; + } + + entry->chan = i2c; + return 0; +} + +void +nouveau_i2c_fini(struct drm_device *dev, struct dcb_i2c_entry *entry) +{ + if (!entry->chan) + return; + + i2c_del_adapter(&entry->chan->adapter); + kfree(entry->chan); + entry->chan = NULL; +} + +struct nouveau_i2c_chan * +nouveau_i2c_find(struct drm_device *dev, int index) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nvbios *bios = &dev_priv->VBIOS; + + if (index > DCB_MAX_NUM_I2C_ENTRIES) + return NULL; + + if (!bios->bdcb.dcb.i2c[index].chan) { + if (nouveau_i2c_init(dev, &bios->bdcb.dcb.i2c[index], index)) + return NULL; + } + + return bios->bdcb.dcb.i2c[index].chan; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_evo.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_evo.h @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#define NV50_EVO_UPDATE 0x00000080 +#define NV50_EVO_UNK84 0x00000084 +#define NV50_EVO_UNK84_NOTIFY 0x40000000 +#define NV50_EVO_UNK84_NOTIFY_DISABLED 0x00000000 +#define NV50_EVO_UNK84_NOTIFY_ENABLED 0x40000000 +#define NV50_EVO_DMA_NOTIFY 0x00000088 +#define NV50_EVO_DMA_NOTIFY_HANDLE 0xffffffff +#define NV50_EVO_DMA_NOTIFY_HANDLE_NONE 0x00000000 +#define NV50_EVO_UNK8C 0x0000008C + +#define NV50_EVO_DAC(n, r) ((n) * 0x80 + NV50_EVO_DAC_##r) +#define NV50_EVO_DAC_MODE_CTRL 0x00000400 +#define NV50_EVO_DAC_MODE_CTRL_CRTC0 0x00000001 +#define NV50_EVO_DAC_MODE_CTRL_CRTC1 0x00000002 +#define NV50_EVO_DAC_MODE_CTRL2 0x00000404 +#define NV50_EVO_DAC_MODE_CTRL2_NHSYNC 0x00000001 +#define NV50_EVO_DAC_MODE_CTRL2_NVSYNC 0x00000002 + +#define NV50_EVO_SOR(n, r) ((n) * 0x40 + NV50_EVO_SOR_##r) +#define NV50_EVO_SOR_MODE_CTRL 0x00000600 +#define NV50_EVO_SOR_MODE_CTRL_CRTC0 0x00000001 +#define NV50_EVO_SOR_MODE_CTRL_CRTC1 0x00000002 +#define NV50_EVO_SOR_MODE_CTRL_TMDS 0x00000100 +#define NV50_EVO_SOR_MODE_CTRL_TMDS_DUAL_LINK 0x00000400 +#define NV50_EVO_SOR_MODE_CTRL_NHSYNC 0x00001000 +#define NV50_EVO_SOR_MODE_CTRL_NVSYNC 0x00002000 + +#define NV50_EVO_CRTC(n, r) ((n) * 0x400 + NV50_EVO_CRTC_##r) +#define NV84_EVO_CRTC(n, r) ((n) * 0x400 + NV84_EVO_CRTC_##r) +#define NV50_EVO_CRTC_UNK0800 0x00000800 +#define NV50_EVO_CRTC_CLOCK 0x00000804 +#define NV50_EVO_CRTC_INTERLACE 0x00000808 +#define NV50_EVO_CRTC_DISPLAY_START 0x00000810 +#define NV50_EVO_CRTC_DISPLAY_TOTAL 0x00000814 +#define NV50_EVO_CRTC_SYNC_DURATION 0x00000818 +#define NV50_EVO_CRTC_SYNC_START_TO_BLANK_END 0x0000081c +#define NV50_EVO_CRTC_UNK0820 0x00000820 +#define NV50_EVO_CRTC_UNK0824 0x00000824 +#define NV50_EVO_CRTC_UNK082C 0x0000082c +#define NV50_EVO_CRTC_CLUT_MODE 0x00000840 +/* You can't have a palette in 8 bit mode (=OFF) */ +#define NV50_EVO_CRTC_CLUT_MODE_BLANK 0x00000000 +#define NV50_EVO_CRTC_CLUT_MODE_OFF 0x80000000 +#define NV50_EVO_CRTC_CLUT_MODE_ON 0xC0000000 +#define NV50_EVO_CRTC_CLUT_OFFSET 0x00000844 +#define NV84_EVO_CRTC_CLUT_DMA 0x0000085C +#define NV84_EVO_CRTC_CLUT_DMA_HANDLE 0xffffffff +#define NV84_EVO_CRTC_CLUT_DMA_HANDLE_NONE 0x00000000 +#define NV50_EVO_CRTC_FB_OFFSET 0x00000860 +#define NV50_EVO_CRTC_FB_SIZE 0x00000868 +#define NV50_EVO_CRTC_FB_CONFIG 0x0000086c +#define NV50_EVO_CRTC_FB_CONFIG_MODE 0x00100000 +#define NV50_EVO_CRTC_FB_CONFIG_MODE_TILE 0x00000000 +#define NV50_EVO_CRTC_FB_CONFIG_MODE_PITCH 0x00100000 +#define NV50_EVO_CRTC_FB_DEPTH 0x00000870 +#define NV50_EVO_CRTC_FB_DEPTH_8 0x00001e00 +#define NV50_EVO_CRTC_FB_DEPTH_15 0x0000e900 +#define NV50_EVO_CRTC_FB_DEPTH_16 0x0000e800 +#define NV50_EVO_CRTC_FB_DEPTH_24 0x0000cf00 +#define NV50_EVO_CRTC_FB_DEPTH_30 0x0000d100 +#define NV50_EVO_CRTC_FB_DMA 0x00000874 +#define NV50_EVO_CRTC_FB_DMA_HANDLE 0xffffffff +#define NV50_EVO_CRTC_FB_DMA_HANDLE_NONE 0x00000000 +#define NV50_EVO_CRTC_CURSOR_CTRL 0x00000880 +#define NV50_EVO_CRTC_CURSOR_CTRL_HIDE 0x05000000 +#define NV50_EVO_CRTC_CURSOR_CTRL_SHOW 0x85000000 +#define NV50_EVO_CRTC_CURSOR_OFFSET 0x00000884 +#define NV84_EVO_CRTC_CURSOR_DMA 0x0000089c +#define NV84_EVO_CRTC_CURSOR_DMA_HANDLE 0xffffffff +#define NV84_EVO_CRTC_CURSOR_DMA_HANDLE_NONE 0x00000000 +#define NV50_EVO_CRTC_DITHER_CTRL 0x000008a0 +#define NV50_EVO_CRTC_DITHER_CTRL_OFF 0x00000000 +#define NV50_EVO_CRTC_DITHER_CTRL_ON 0x00000011 +#define NV50_EVO_CRTC_SCALE_CTRL 0x000008a4 +#define NV50_EVO_CRTC_SCALE_CTRL_INACTIVE 0x00000000 +#define NV50_EVO_CRTC_SCALE_CTRL_ACTIVE 0x00000009 +#define NV50_EVO_CRTC_COLOR_CTRL 0x000008a8 +#define NV50_EVO_CRTC_COLOR_CTRL_COLOR 0x00040000 +#define NV50_EVO_CRTC_FB_POS 0x000008c0 +#define NV50_EVO_CRTC_REAL_RES 0x000008c8 +#define NV50_EVO_CRTC_SCALE_CENTER_OFFSET 0x000008d4 +#define NV50_EVO_CRTC_SCALE_CENTER_OFFSET_VAL(x, y) \ + ((((unsigned)y << 16) & 0xFFFF0000) | (((unsigned)x) & 0x0000FFFF)) +/* Both of these are needed, otherwise nothing happens. */ +#define NV50_EVO_CRTC_SCALE_RES1 0x000008d8 +#define NV50_EVO_CRTC_SCALE_RES2 0x000008dc + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_sor.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_sor.c @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" + +#define NOUVEAU_DMA_DEBUG (nouveau_reg_debug & NOUVEAU_REG_DEBUG_EVO) +#include "nouveau_reg.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nv50_display.h" + +static void +nv50_sor_disconnect(struct nouveau_encoder *nv_encoder) +{ + struct drm_device *dev = to_drm_encoder(nv_encoder)->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + int ret; + + NV_DEBUG_KMS(dev, "Disconnecting SOR %d\n", nv_encoder->or); + + ret = RING_SPACE(evo, 2); + if (ret) { + NV_ERROR(dev, "no space while disconnecting SOR\n"); + return; + } + BEGIN_RING(evo, 0, NV50_EVO_SOR(nv_encoder->or, MODE_CTRL), 1); + OUT_RING(evo, 0); +} + +static void +nv50_sor_dp_link_train(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct bit_displayport_encoder_table *dpe; + int dpe_headerlen; + + dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen); + if (!dpe) { + NV_ERROR(dev, "SOR-%d: no DP encoder table!\n", nv_encoder->or); + return; + } + + if (dpe->script0) { + NV_DEBUG_KMS(dev, "SOR-%d: running DP script 0\n", nv_encoder->or); + nouveau_bios_run_init_table(dev, le16_to_cpu(dpe->script0), + nv_encoder->dcb); + } + + if (!nouveau_dp_link_train(encoder)) + NV_ERROR(dev, "SOR-%d: link training failed\n", nv_encoder->or); + + if (dpe->script1) { + NV_DEBUG_KMS(dev, "SOR-%d: running DP script 1\n", nv_encoder->or); + nouveau_bios_run_init_table(dev, le16_to_cpu(dpe->script1), + nv_encoder->dcb); + } +} + +static void +nv50_sor_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_encoder *enc; + uint32_t val; + int or = nv_encoder->or; + + NV_DEBUG_KMS(dev, "or %d mode %d\n", or, mode); + + nv_encoder->last_dpms = mode; + list_for_each_entry(enc, &dev->mode_config.encoder_list, head) { + struct nouveau_encoder *nvenc = nouveau_encoder(enc); + + if (nvenc == nv_encoder || + nvenc->disconnect != nv50_sor_disconnect || + nvenc->dcb->or != nv_encoder->dcb->or) + continue; + + if (nvenc->last_dpms == DRM_MODE_DPMS_ON) + return; + } + + /* wait for it to be done */ + if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_CTRL(or), + NV50_PDISPLAY_SOR_DPMS_CTRL_PENDING, 0)) { + NV_ERROR(dev, "timeout: SOR_DPMS_CTRL_PENDING(%d) == 0\n", or); + NV_ERROR(dev, "SOR_DPMS_CTRL(%d) = 0x%08x\n", or, + nv_rd32(dev, NV50_PDISPLAY_SOR_DPMS_CTRL(or))); + } + + val = nv_rd32(dev, NV50_PDISPLAY_SOR_DPMS_CTRL(or)); + + if (mode == DRM_MODE_DPMS_ON) + val |= NV50_PDISPLAY_SOR_DPMS_CTRL_ON; + else + val &= ~NV50_PDISPLAY_SOR_DPMS_CTRL_ON; + + nv_wr32(dev, NV50_PDISPLAY_SOR_DPMS_CTRL(or), val | + NV50_PDISPLAY_SOR_DPMS_CTRL_PENDING); + if (!nv_wait(NV50_PDISPLAY_SOR_DPMS_STATE(or), + NV50_PDISPLAY_SOR_DPMS_STATE_WAIT, 0)) { + NV_ERROR(dev, "timeout: SOR_DPMS_STATE_WAIT(%d) == 0\n", or); + NV_ERROR(dev, "SOR_DPMS_STATE(%d) = 0x%08x\n", or, + nv_rd32(dev, NV50_PDISPLAY_SOR_DPMS_STATE(or))); + } + + if (nv_encoder->dcb->type == OUTPUT_DP && mode == DRM_MODE_DPMS_ON) + nv50_sor_dp_link_train(encoder); +} + +static void +nv50_sor_save(struct drm_encoder *encoder) +{ + NV_ERROR(encoder->dev, "!!\n"); +} + +static void +nv50_sor_restore(struct drm_encoder *encoder) +{ + NV_ERROR(encoder->dev, "!!\n"); +} + +static bool +nv50_sor_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct nouveau_connector *connector; + + NV_DEBUG_KMS(encoder->dev, "or %d\n", nv_encoder->or); + + connector = nouveau_encoder_connector_get(nv_encoder); + if (!connector) { + NV_ERROR(encoder->dev, "Encoder has no connector\n"); + return false; + } + + if (connector->scaling_mode != DRM_MODE_SCALE_NONE && + connector->native_mode) { + int id = adjusted_mode->base.id; + *adjusted_mode = *connector->native_mode; + adjusted_mode->base.id = id; + } + + return true; +} + +static void +nv50_sor_prepare(struct drm_encoder *encoder) +{ +} + +static void +nv50_sor_commit(struct drm_encoder *encoder) +{ +} + +static void +nv50_sor_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct drm_nouveau_private *dev_priv = encoder->dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct nouveau_crtc *crtc = nouveau_crtc(encoder->crtc); + uint32_t mode_ctl = 0; + int ret; + + NV_DEBUG_KMS(dev, "or %d\n", nv_encoder->or); + + nv50_sor_dpms(encoder, DRM_MODE_DPMS_ON); + + switch (nv_encoder->dcb->type) { + case OUTPUT_TMDS: + if (nv_encoder->dcb->sorconf.link & 1) { + if (adjusted_mode->clock < 165000) + mode_ctl = 0x0100; + else + mode_ctl = 0x0500; + } else + mode_ctl = 0x0200; + break; + case OUTPUT_DP: + mode_ctl |= 0x00050000; + if (nv_encoder->dcb->sorconf.link & 1) + mode_ctl |= 0x00000800; + else + mode_ctl |= 0x00000900; + break; + default: + break; + } + + if (crtc->index == 1) + mode_ctl |= NV50_EVO_SOR_MODE_CTRL_CRTC1; + else + mode_ctl |= NV50_EVO_SOR_MODE_CTRL_CRTC0; + + if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) + mode_ctl |= NV50_EVO_SOR_MODE_CTRL_NHSYNC; + + if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) + mode_ctl |= NV50_EVO_SOR_MODE_CTRL_NVSYNC; + + ret = RING_SPACE(evo, 2); + if (ret) { + NV_ERROR(dev, "no space while connecting SOR\n"); + return; + } + BEGIN_RING(evo, 0, NV50_EVO_SOR(nv_encoder->or, MODE_CTRL), 1); + OUT_RING(evo, mode_ctl); +} + +static const struct drm_encoder_helper_funcs nv50_sor_helper_funcs = { + .dpms = nv50_sor_dpms, + .save = nv50_sor_save, + .restore = nv50_sor_restore, + .mode_fixup = nv50_sor_mode_fixup, + .prepare = nv50_sor_prepare, + .commit = nv50_sor_commit, + .mode_set = nv50_sor_mode_set, + .detect = NULL +}; + +static void +nv50_sor_destroy(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (!encoder) + return; + + NV_DEBUG_KMS(encoder->dev, "\n"); + + drm_encoder_cleanup(encoder); + + kfree(nv_encoder); +} + +static const struct drm_encoder_funcs nv50_sor_encoder_funcs = { + .destroy = nv50_sor_destroy, +}; + +int +nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry) +{ + struct nouveau_encoder *nv_encoder = NULL; + struct drm_encoder *encoder; + bool dum; + int type; + + NV_DEBUG_KMS(dev, "\n"); + + switch (entry->type) { + case OUTPUT_TMDS: + NV_INFO(dev, "Detected a TMDS output\n"); + type = DRM_MODE_ENCODER_TMDS; + break; + case OUTPUT_LVDS: + NV_INFO(dev, "Detected a LVDS output\n"); + type = DRM_MODE_ENCODER_LVDS; + + if (nouveau_bios_parse_lvds_table(dev, 0, &dum, &dum)) { + NV_ERROR(dev, "Failed parsing LVDS table\n"); + return -EINVAL; + } + break; + case OUTPUT_DP: + NV_INFO(dev, "Detected a DP output\n"); + type = DRM_MODE_ENCODER_TMDS; + break; + default: + return -EINVAL; + } + + nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL); + if (!nv_encoder) + return -ENOMEM; + encoder = to_drm_encoder(nv_encoder); + + nv_encoder->dcb = entry; + nv_encoder->or = ffs(entry->or) - 1; + + nv_encoder->disconnect = nv50_sor_disconnect; + + drm_encoder_init(dev, encoder, &nv50_sor_encoder_funcs, type); + drm_encoder_helper_add(encoder, &nv50_sor_helper_funcs); + + encoder->possible_crtcs = entry->heads; + encoder->possible_clones = 0; + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_fbcon.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_fbcon.c @@ -0,0 +1,423 @@ +/* + * Copyright © 2007 David Airlie + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * David Airlie + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "drmP.h" +#include "drm.h" +#include "drm_crtc.h" +#include "drm_crtc_helper.h" +#include "drm_fb_helper.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" +#include "nouveau_crtc.h" +#include "nouveau_fb.h" +#include "nouveau_fbcon.h" +#include "nouveau_dma.h" + +static int +nouveau_fbcon_sync(struct fb_info *info) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *chan = dev_priv->channel; + int ret, i; + + if (!chan || !chan->accel_done || + info->state != FBINFO_STATE_RUNNING || + info->flags & FBINFO_HWACCEL_DISABLED) + return 0; + + if (RING_SPACE(chan, 4)) { + nouveau_fbcon_gpu_lockup(info); + return 0; + } + + BEGIN_RING(chan, 0, 0x0104, 1); + OUT_RING(chan, 0); + BEGIN_RING(chan, 0, 0x0100, 1); + OUT_RING(chan, 0); + nouveau_bo_wr32(chan->notifier_bo, chan->m2mf_ntfy + 3, 0xffffffff); + FIRE_RING(chan); + + ret = -EBUSY; + for (i = 0; i < 100000; i++) { + if (!nouveau_bo_rd32(chan->notifier_bo, chan->m2mf_ntfy + 3)) { + ret = 0; + break; + } + DRM_UDELAY(1); + } + + if (ret) { + nouveau_fbcon_gpu_lockup(info); + return 0; + } + + chan->accel_done = false; + return 0; +} + +static struct fb_ops nouveau_fbcon_ops = { + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, + .fb_setcolreg = drm_fb_helper_setcolreg, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, + .fb_sync = nouveau_fbcon_sync, + .fb_pan_display = drm_fb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, + .fb_setcmap = drm_fb_helper_setcmap, +}; + +static struct fb_ops nv04_fbcon_ops = { + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, + .fb_setcolreg = drm_fb_helper_setcolreg, + .fb_fillrect = nv04_fbcon_fillrect, + .fb_copyarea = nv04_fbcon_copyarea, + .fb_imageblit = nv04_fbcon_imageblit, + .fb_sync = nouveau_fbcon_sync, + .fb_pan_display = drm_fb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, + .fb_setcmap = drm_fb_helper_setcmap, +}; + +static struct fb_ops nv50_fbcon_ops = { + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, + .fb_setcolreg = drm_fb_helper_setcolreg, + .fb_fillrect = nv50_fbcon_fillrect, + .fb_copyarea = nv50_fbcon_copyarea, + .fb_imageblit = nv50_fbcon_imageblit, + .fb_sync = nouveau_fbcon_sync, + .fb_pan_display = drm_fb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, + .fb_setcmap = drm_fb_helper_setcmap, +}; + +static void nouveau_fbcon_gamma_set(struct drm_crtc *crtc, u16 red, u16 green, + u16 blue, int regno) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + nv_crtc->lut.r[regno] = red; + nv_crtc->lut.g[regno] = green; + nv_crtc->lut.b[regno] = blue; +} + +static void nouveau_fbcon_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, + u16 *blue, int regno) +{ + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + *red = nv_crtc->lut.r[regno]; + *green = nv_crtc->lut.g[regno]; + *blue = nv_crtc->lut.b[regno]; +} + +static struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = { + .gamma_set = nouveau_fbcon_gamma_set, + .gamma_get = nouveau_fbcon_gamma_get +}; + +#if defined(__i386__) || defined(__x86_64__) +static bool +nouveau_fbcon_has_vesafb_or_efifb(struct drm_device *dev) +{ + struct pci_dev *pdev = dev->pdev; + int ramin; + + if (screen_info.orig_video_isVGA != VIDEO_TYPE_VLFB && + screen_info.orig_video_isVGA != VIDEO_TYPE_EFI) + return false; + + if (screen_info.lfb_base < pci_resource_start(pdev, 1)) + goto not_fb; + + if (screen_info.lfb_base + screen_info.lfb_size >= + pci_resource_start(pdev, 1) + pci_resource_len(pdev, 1)) + goto not_fb; + + return true; +not_fb: + ramin = 2; + if (pci_resource_len(pdev, ramin) == 0) { + ramin = 3; + if (pci_resource_len(pdev, ramin) == 0) + return false; + } + + if (screen_info.lfb_base < pci_resource_start(pdev, ramin)) + return false; + + if (screen_info.lfb_base + screen_info.lfb_size >= + pci_resource_start(pdev, ramin) + pci_resource_len(pdev, ramin)) + return false; + + return true; +} +#endif + +void +nouveau_fbcon_zfill(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct fb_info *info = dev_priv->fbdev_info; + struct fb_fillrect rect; + + /* Clear the entire fbcon. The drm will program every connector + * with it's preferred mode. If the sizes differ, one display will + * quite likely have garbage around the console. + */ + rect.dx = rect.dy = 0; + rect.width = info->var.xres_virtual; + rect.height = info->var.yres_virtual; + rect.color = 0; + rect.rop = ROP_COPY; + info->fbops->fb_fillrect(info, &rect); +} + +static int +nouveau_fbcon_create(struct drm_device *dev, uint32_t fb_width, + uint32_t fb_height, uint32_t surface_width, + uint32_t surface_height, uint32_t surface_depth, + uint32_t surface_bpp, struct drm_framebuffer **pfb) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct fb_info *info; + struct nouveau_fbcon_par *par; + struct drm_framebuffer *fb; + struct nouveau_framebuffer *nouveau_fb; + struct nouveau_bo *nvbo; + struct drm_mode_fb_cmd mode_cmd; + struct device *device = &dev->pdev->dev; + int size, ret; + + mode_cmd.width = surface_width; + mode_cmd.height = surface_height; + + mode_cmd.bpp = surface_bpp; + mode_cmd.pitch = mode_cmd.width * (mode_cmd.bpp >> 3); + mode_cmd.pitch = roundup(mode_cmd.pitch, 256); + mode_cmd.depth = surface_depth; + + size = mode_cmd.pitch * mode_cmd.height; + size = roundup(size, PAGE_SIZE); + + ret = nouveau_gem_new(dev, dev_priv->channel, size, 0, TTM_PL_FLAG_VRAM, + 0, 0x0000, false, true, &nvbo); + if (ret) { + NV_ERROR(dev, "failed to allocate framebuffer\n"); + goto out; + } + + ret = nouveau_bo_pin(nvbo, TTM_PL_FLAG_VRAM); + if (ret) { + NV_ERROR(dev, "failed to pin fb: %d\n", ret); + nouveau_bo_ref(NULL, &nvbo); + goto out; + } + + ret = nouveau_bo_map(nvbo); + if (ret) { + NV_ERROR(dev, "failed to map fb: %d\n", ret); + nouveau_bo_unpin(nvbo); + nouveau_bo_ref(NULL, &nvbo); + goto out; + } + + mutex_lock(&dev->struct_mutex); + + fb = nouveau_framebuffer_create(dev, nvbo, &mode_cmd); + if (!fb) { + ret = -ENOMEM; + NV_ERROR(dev, "failed to allocate fb.\n"); + goto out_unref; + } + + list_add(&fb->filp_head, &dev->mode_config.fb_kernel_list); + + nouveau_fb = nouveau_framebuffer(fb); + *pfb = fb; + + info = framebuffer_alloc(sizeof(struct nouveau_fbcon_par), device); + if (!info) { + ret = -ENOMEM; + goto out_unref; + } + + par = info->par; + par->helper.funcs = &nouveau_fbcon_helper_funcs; + par->helper.dev = dev; + ret = drm_fb_helper_init_crtc_count(&par->helper, 2, 4); + if (ret) + goto out_unref; + dev_priv->fbdev_info = info; + + strcpy(info->fix.id, "nouveaufb"); + if (nouveau_nofbaccel) + info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_DISABLED; + else + info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA | + FBINFO_HWACCEL_FILLRECT | + FBINFO_HWACCEL_IMAGEBLIT; + info->fbops = &nouveau_fbcon_ops; + info->fix.smem_start = dev->mode_config.fb_base + nvbo->bo.offset - + dev_priv->vm_vram_base; + info->fix.smem_len = size; + + info->screen_base = nvbo_kmap_obj_iovirtual(nouveau_fb->nvbo); + info->screen_size = size; + + drm_fb_helper_fill_fix(info, fb->pitch, fb->depth); + drm_fb_helper_fill_var(info, fb, fb_width, fb_height); + + /* FIXME: we really shouldn't expose mmio space at all */ + info->fix.mmio_start = pci_resource_start(dev->pdev, 1); + info->fix.mmio_len = pci_resource_len(dev->pdev, 1); + + /* Set aperture base/size for vesafb takeover */ +#if defined(__i386__) || defined(__x86_64__) + if (nouveau_fbcon_has_vesafb_or_efifb(dev)) { + /* Some NVIDIA VBIOS' are stupid and decide to put the + * framebuffer in the middle of the PRAMIN BAR for + * whatever reason. We need to know the exact lfb_base + * to get vesafb kicked off, and the only reliable way + * we have left is to find out lfb_base the same way + * vesafb did. + */ + info->aperture_base = screen_info.lfb_base; + info->aperture_size = screen_info.lfb_size; + if (screen_info.orig_video_isVGA == VIDEO_TYPE_VLFB) + info->aperture_size *= 65536; + } else +#endif + { + info->aperture_base = info->fix.mmio_start; + info->aperture_size = info->fix.mmio_len; + } + + info->pixmap.size = 64*1024; + info->pixmap.buf_align = 8; + info->pixmap.access_align = 32; + info->pixmap.flags = FB_PIXMAP_SYSTEM; + info->pixmap.scan_align = 1; + + fb->fbdev = info; + + par->nouveau_fb = nouveau_fb; + par->dev = dev; + + if (dev_priv->channel && !nouveau_nofbaccel) { + switch (dev_priv->card_type) { + case NV_50: + nv50_fbcon_accel_init(info); + info->fbops = &nv50_fbcon_ops; + break; + default: + nv04_fbcon_accel_init(info); + info->fbops = &nv04_fbcon_ops; + break; + }; + } + + nouveau_fbcon_zfill(dev); + + /* To allow resizeing without swapping buffers */ + NV_INFO(dev, "allocated %dx%d fb: 0x%lx, bo %p\n", + nouveau_fb->base.width, + nouveau_fb->base.height, + nvbo->bo.offset, nvbo); + + mutex_unlock(&dev->struct_mutex); + return 0; + +out_unref: + mutex_unlock(&dev->struct_mutex); +out: + return ret; +} + +int +nouveau_fbcon_probe(struct drm_device *dev) +{ + NV_DEBUG_KMS(dev, "\n"); + + return drm_fb_helper_single_fb_probe(dev, 32, nouveau_fbcon_create); +} + +int +nouveau_fbcon_remove(struct drm_device *dev, struct drm_framebuffer *fb) +{ + struct nouveau_framebuffer *nouveau_fb = nouveau_framebuffer(fb); + struct fb_info *info; + + if (!fb) + return -EINVAL; + + info = fb->fbdev; + if (info) { + struct nouveau_fbcon_par *par = info->par; + + unregister_framebuffer(info); + nouveau_bo_unmap(nouveau_fb->nvbo); + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(nouveau_fb->nvbo->gem); + nouveau_fb->nvbo = NULL; + mutex_unlock(&dev->struct_mutex); + if (par) + drm_fb_helper_free(&par->helper); + framebuffer_release(info); + } + + return 0; +} + +void nouveau_fbcon_gpu_lockup(struct fb_info *info) +{ + struct nouveau_fbcon_par *par = info->par; + struct drm_device *dev = par->dev; + + NV_ERROR(dev, "GPU lockup - switching to software fbcon\n"); + info->flags |= FBINFO_HWACCEL_DISABLED; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_tv.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_tv.c @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "nouveau_drv.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nouveau_hw.h" +#include "drm_crtc_helper.h" + +#include "i2c/ch7006.h" + +static struct { + struct i2c_board_info board_info; + struct drm_encoder_funcs funcs; + struct drm_encoder_helper_funcs hfuncs; + void *params; + +} nv04_tv_encoder_info[] = { + { + .board_info = { I2C_BOARD_INFO("ch7006", 0x75) }, + .params = &(struct ch7006_encoder_params) { + CH7006_FORMAT_RGB24m12I, CH7006_CLOCK_MASTER, + 0, 0, 0, + CH7006_SYNC_SLAVE, CH7006_SYNC_SEPARATED, + CH7006_POUT_3_3V, CH7006_ACTIVE_HSYNC + }, + }, +}; + +static bool probe_i2c_addr(struct i2c_adapter *adapter, int addr) +{ + struct i2c_msg msg = { + .addr = addr, + .len = 0, + }; + + return i2c_transfer(adapter, &msg, 1) == 1; +} + +int nv04_tv_identify(struct drm_device *dev, int i2c_index) +{ + struct nouveau_i2c_chan *i2c; + bool was_locked; + int i, ret; + + NV_TRACE(dev, "Probing TV encoders on I2C bus: %d\n", i2c_index); + + i2c = nouveau_i2c_find(dev, i2c_index); + if (!i2c) + return -ENODEV; + + was_locked = NVLockVgaCrtcs(dev, false); + + for (i = 0; i < ARRAY_SIZE(nv04_tv_encoder_info); i++) { + if (probe_i2c_addr(&i2c->adapter, + nv04_tv_encoder_info[i].board_info.addr)) { + ret = i; + break; + } + } + + if (i < ARRAY_SIZE(nv04_tv_encoder_info)) { + NV_TRACE(dev, "Detected TV encoder: %s\n", + nv04_tv_encoder_info[i].board_info.type); + + } else { + NV_TRACE(dev, "No TV encoders found.\n"); + i = -ENODEV; + } + + NVLockVgaCrtcs(dev, was_locked); + return i; +} + +#define PLLSEL_TV_CRTC1_MASK \ + (NV_PRAMDAC_PLL_COEFF_SELECT_TV_VSCLK1 \ + | NV_PRAMDAC_PLL_COEFF_SELECT_TV_PCLK1) +#define PLLSEL_TV_CRTC2_MASK \ + (NV_PRAMDAC_PLL_COEFF_SELECT_TV_VSCLK2 \ + | NV_PRAMDAC_PLL_COEFF_SELECT_TV_PCLK2) + +static void nv04_tv_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_mode_state *state = &dev_priv->mode_reg; + uint8_t crtc1A; + + NV_INFO(dev, "Setting dpms mode %d on TV encoder (output %d)\n", + mode, nv_encoder->dcb->index); + + state->pllsel &= ~(PLLSEL_TV_CRTC1_MASK | PLLSEL_TV_CRTC2_MASK); + + if (mode == DRM_MODE_DPMS_ON) { + int head = nouveau_crtc(encoder->crtc)->index; + crtc1A = NVReadVgaCrtc(dev, head, NV_CIO_CRE_RPC1_INDEX); + + state->pllsel |= head ? PLLSEL_TV_CRTC2_MASK : + PLLSEL_TV_CRTC1_MASK; + + /* Inhibit hsync */ + crtc1A |= 0x80; + + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_RPC1_INDEX, crtc1A); + } + + NVWriteRAMDAC(dev, 0, NV_PRAMDAC_PLL_COEFF_SELECT, state->pllsel); + + to_encoder_slave(encoder)->slave_funcs->dpms(encoder, mode); +} + +static void nv04_tv_bind(struct drm_device *dev, int head, bool bind) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nv04_crtc_reg *state = &dev_priv->mode_reg.crtc_reg[head]; + + state->tv_setup = 0; + + if (bind) { + state->CRTC[NV_CIO_CRE_LCD__INDEX] = 0; + state->CRTC[NV_CIO_CRE_49] |= 0x10; + } else { + state->CRTC[NV_CIO_CRE_49] &= ~0x10; + } + + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_LCD__INDEX, + state->CRTC[NV_CIO_CRE_LCD__INDEX]); + NVWriteVgaCrtc(dev, head, NV_CIO_CRE_49, + state->CRTC[NV_CIO_CRE_49]); + NVWriteRAMDAC(dev, head, NV_PRAMDAC_TV_SETUP, + state->tv_setup); +} + +static void nv04_tv_prepare(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + int head = nouveau_crtc(encoder->crtc)->index; + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + + helper->dpms(encoder, DRM_MODE_DPMS_OFF); + + nv04_dfp_disable(dev, head); + + if (nv_two_heads(dev)) + nv04_tv_bind(dev, head ^ 1, false); + + nv04_tv_bind(dev, head, true); +} + +static void nv04_tv_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc); + struct nv04_crtc_reg *regp = &dev_priv->mode_reg.crtc_reg[nv_crtc->index]; + + regp->tv_htotal = adjusted_mode->htotal; + regp->tv_vtotal = adjusted_mode->vtotal; + + /* These delay the TV signals with respect to the VGA port, + * they might be useful if we ever allow a CRTC to drive + * multiple outputs. + */ + regp->tv_hskew = 1; + regp->tv_hsync_delay = 1; + regp->tv_hsync_delay2 = 64; + regp->tv_vskew = 1; + regp->tv_vsync_delay = 1; + + to_encoder_slave(encoder)->slave_funcs->mode_set(encoder, mode, adjusted_mode); +} + +static void nv04_tv_commit(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc); + struct drm_encoder_helper_funcs *helper = encoder->helper_private; + + helper->dpms(encoder, DRM_MODE_DPMS_ON); + + NV_INFO(dev, "Output %s is running on CRTC %d using output %c\n", + drm_get_connector_name(&nouveau_encoder_connector_get(nv_encoder)->base), nv_crtc->index, + '@' + ffs(nv_encoder->dcb->or)); +} + +static void nv04_tv_destroy(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + to_encoder_slave(encoder)->slave_funcs->destroy(encoder); + + drm_encoder_cleanup(encoder); + + kfree(nv_encoder); +} + +int nv04_tv_create(struct drm_device *dev, struct dcb_entry *entry) +{ + struct nouveau_encoder *nv_encoder; + struct drm_encoder *encoder; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct i2c_adapter *adap; + struct drm_encoder_funcs *funcs = NULL; + struct drm_encoder_helper_funcs *hfuncs = NULL; + struct drm_encoder_slave_funcs *sfuncs = NULL; + int i2c_index = entry->i2c_index; + int type, ret; + bool was_locked; + + /* Ensure that we can talk to this encoder */ + type = nv04_tv_identify(dev, i2c_index); + if (type < 0) + return type; + + /* Allocate the necessary memory */ + nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL); + if (!nv_encoder) + return -ENOMEM; + + /* Initialize the common members */ + encoder = to_drm_encoder(nv_encoder); + + funcs = &nv04_tv_encoder_info[type].funcs; + hfuncs = &nv04_tv_encoder_info[type].hfuncs; + + drm_encoder_init(dev, encoder, funcs, DRM_MODE_ENCODER_TVDAC); + drm_encoder_helper_add(encoder, hfuncs); + + encoder->possible_crtcs = entry->heads; + encoder->possible_clones = 0; + + nv_encoder->dcb = entry; + nv_encoder->or = ffs(entry->or) - 1; + + /* Run the slave-specific initialization */ + adap = &dev_priv->vbios->dcb->i2c[i2c_index].chan->adapter; + + was_locked = NVLockVgaCrtcs(dev, false); + + ret = drm_i2c_encoder_init(encoder->dev, to_encoder_slave(encoder), adap, + &nv04_tv_encoder_info[type].board_info); + + NVLockVgaCrtcs(dev, was_locked); + + if (ret < 0) + goto fail; + + /* Fill the function pointers */ + sfuncs = to_encoder_slave(encoder)->slave_funcs; + + *funcs = (struct drm_encoder_funcs) { + .destroy = nv04_tv_destroy, + }; + + *hfuncs = (struct drm_encoder_helper_funcs) { + .dpms = nv04_tv_dpms, + .save = sfuncs->save, + .restore = sfuncs->restore, + .mode_fixup = sfuncs->mode_fixup, + .prepare = nv04_tv_prepare, + .commit = nv04_tv_commit, + .mode_set = nv04_tv_mode_set, + .detect = sfuncs->detect, + }; + + /* Set the slave encoder configuration */ + sfuncs->set_config(encoder, nv04_tv_encoder_info[type].params); + + return 0; + +fail: + drm_encoder_cleanup(encoder); + + kfree(nv_encoder); + return ret; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_ttm.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_ttm.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA, + * All Rights Reserved. + * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA, + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" + +#include "nouveau_drv.h" + +int +nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct drm_file *file_priv = filp->private_data; + struct drm_nouveau_private *dev_priv = + file_priv->minor->dev->dev_private; + + if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET)) + return drm_mmap(filp, vma); + + return ttm_bo_mmap(filp, vma, &dev_priv->ttm.bdev); +} + +static int +nouveau_ttm_mem_global_init(struct ttm_global_reference *ref) +{ + return ttm_mem_global_init(ref->object); +} + +static void +nouveau_ttm_mem_global_release(struct ttm_global_reference *ref) +{ + ttm_mem_global_release(ref->object); +} + +int +nouveau_ttm_global_init(struct drm_nouveau_private *dev_priv) +{ + struct ttm_global_reference *global_ref; + int ret; + + global_ref = &dev_priv->ttm.mem_global_ref; + global_ref->global_type = TTM_GLOBAL_TTM_MEM; + global_ref->size = sizeof(struct ttm_mem_global); + global_ref->init = &nouveau_ttm_mem_global_init; + global_ref->release = &nouveau_ttm_mem_global_release; + + ret = ttm_global_item_ref(global_ref); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed setting up TTM memory accounting\n"); + dev_priv->ttm.mem_global_ref.release = NULL; + return ret; + } + + dev_priv->ttm.bo_global_ref.mem_glob = global_ref->object; + global_ref = &dev_priv->ttm.bo_global_ref.ref; + global_ref->global_type = TTM_GLOBAL_TTM_BO; + global_ref->size = sizeof(struct ttm_bo_global); + global_ref->init = &ttm_bo_global_init; + global_ref->release = &ttm_bo_global_release; + + ret = ttm_global_item_ref(global_ref); + if (unlikely(ret != 0)) { + DRM_ERROR("Failed setting up TTM BO subsystem\n"); + ttm_global_item_unref(&dev_priv->ttm.mem_global_ref); + dev_priv->ttm.mem_global_ref.release = NULL; + return ret; + } + + return 0; +} + +void +nouveau_ttm_global_release(struct drm_nouveau_private *dev_priv) +{ + if (dev_priv->ttm.mem_global_ref.release == NULL) + return; + + ttm_global_item_unref(&dev_priv->ttm.bo_global_ref.ref); + ttm_global_item_unref(&dev_priv->ttm.mem_global_ref); + dev_priv->ttm.mem_global_ref.release = NULL; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/Makefile +++ linux-2.6.32/drivers/gpu/drm/nouveau/Makefile @@ -0,0 +1,32 @@ +# +# Makefile for the drm device driver. This driver provides support for the +# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. + +ccflags-y := -Iinclude/drm +nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ + nouveau_object.o nouveau_irq.o nouveau_notifier.o \ + nouveau_sgdma.o nouveau_dma.o \ + nouveau_bo.o nouveau_fence.o nouveau_gem.o nouveau_ttm.o \ + nouveau_hw.o nouveau_calc.o nouveau_bios.o nouveau_i2c.o \ + nouveau_display.o nouveau_connector.o nouveau_fbcon.o \ + nouveau_dp.o nouveau_grctx.o \ + nv04_timer.o \ + nv04_mc.o nv40_mc.o nv50_mc.o \ + nv04_fb.o nv10_fb.o nv40_fb.o \ + nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \ + nv04_graph.o nv10_graph.o nv20_graph.o \ + nv40_graph.o nv50_graph.o \ + nv40_grctx.o nv50_grctx.o \ + nv04_instmem.o nv50_instmem.o \ + nv50_crtc.o nv50_dac.o nv50_sor.o \ + nv50_cursor.o nv50_display.o nv50_fbcon.o \ + nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \ + nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \ + nv17_gpio.o + +nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o +nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o +nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o +nouveau-$(CONFIG_ACPI) += nouveau_acpi.o + +obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_drv.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_drv.c @@ -0,0 +1,421 @@ +/* + * Copyright 2005 Stephane Marchesin. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include + +#include "drmP.h" +#include "drm.h" +#include "drm_crtc_helper.h" +#include "nouveau_drv.h" +#include "nouveau_hw.h" +#include "nouveau_fb.h" +#include "nouveau_fbcon.h" +#include "nv50_display.h" + +#include "drm_pciids.h" + +MODULE_PARM_DESC(ctxfw, "Use external firmware blob for grctx init (NV40)"); +int nouveau_ctxfw = 0; +module_param_named(ctxfw, nouveau_ctxfw, int, 0400); + +MODULE_PARM_DESC(noagp, "Disable AGP"); +int nouveau_noagp; +module_param_named(noagp, nouveau_noagp, int, 0400); + +MODULE_PARM_DESC(modeset, "Enable kernel modesetting"); +static int nouveau_modeset = -1; /* kms */ +module_param_named(modeset, nouveau_modeset, int, 0400); + +MODULE_PARM_DESC(vbios, "Override default VBIOS location"); +char *nouveau_vbios; +module_param_named(vbios, nouveau_vbios, charp, 0400); + +MODULE_PARM_DESC(vram_pushbuf, "Force DMA push buffers to be in VRAM"); +int nouveau_vram_pushbuf; +module_param_named(vram_pushbuf, nouveau_vram_pushbuf, int, 0400); + +MODULE_PARM_DESC(vram_notify, "Force DMA notifiers to be in VRAM"); +int nouveau_vram_notify = 1; +module_param_named(vram_notify, nouveau_vram_notify, int, 0400); + +MODULE_PARM_DESC(duallink, "Allow dual-link TMDS (>=GeForce 8)"); +int nouveau_duallink = 1; +module_param_named(duallink, nouveau_duallink, int, 0400); + +MODULE_PARM_DESC(uscript_lvds, "LVDS output script table ID (>=GeForce 8)"); +int nouveau_uscript_lvds = -1; +module_param_named(uscript_lvds, nouveau_uscript_lvds, int, 0400); + +MODULE_PARM_DESC(uscript_tmds, "TMDS output script table ID (>=GeForce 8)"); +int nouveau_uscript_tmds = -1; +module_param_named(uscript_tmds, nouveau_uscript_tmds, int, 0400); + +MODULE_PARM_DESC(ignorelid, "Ignore ACPI lid status"); +int nouveau_ignorelid = 0; +module_param_named(ignorelid, nouveau_ignorelid, int, 0400); + +MODULE_PARM_DESC(noagp, "Disable all acceleration"); +int nouveau_noaccel = -1; +module_param_named(noaccel, nouveau_noaccel, int, 0400); + +MODULE_PARM_DESC(noagp, "Disable fbcon acceleration"); +int nouveau_nofbaccel = 0; +module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400); + +MODULE_PARM_DESC(tv_norm, "Default TV norm.\n" + "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n" + "\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n" + "\t\tDefault: PAL\n" + "\t\t*NOTE* Ignored for cards with external TV encoders."); +char *nouveau_tv_norm; +module_param_named(tv_norm, nouveau_tv_norm, charp, 0400); + +MODULE_PARM_DESC(reg_debug, "Register access debug bitmask:\n" + "\t\t0x1 mc, 0x2 video, 0x4 fb, 0x8 extdev,\n" + "\t\t0x10 crtc, 0x20 ramdac, 0x40 vgacrtc, 0x80 rmvio,\n" + "\t\t0x100 vgaattr, 0x200 EVO (G80+). "); +int nouveau_reg_debug; +module_param_named(reg_debug, nouveau_reg_debug, int, 0600); + +int nouveau_fbpercrtc; +#if 0 +module_param_named(fbpercrtc, nouveau_fbpercrtc, int, 0400); +#endif + +static struct pci_device_id pciidlist[] = { + { + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID), + .class = PCI_BASE_CLASS_DISPLAY << 16, + .class_mask = 0xff << 16, + }, + { + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA_SGS, PCI_ANY_ID), + .class = PCI_BASE_CLASS_DISPLAY << 16, + .class_mask = 0xff << 16, + }, + {} +}; + +MODULE_DEVICE_TABLE(pci, pciidlist); + +static struct drm_driver driver; + +static int __devinit +nouveau_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +{ + return drm_get_dev(pdev, ent, &driver); +} + +static void +nouveau_pci_remove(struct pci_dev *pdev) +{ + struct drm_device *dev = pci_get_drvdata(pdev); + + drm_put_dev(dev); +} + +static int +nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state) +{ + struct drm_device *dev = pci_get_drvdata(pdev); + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_instmem_engine *pinstmem = &dev_priv->engine.instmem; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_channel *chan; + struct drm_crtc *crtc; + uint32_t fbdev_flags; + int ret, i; + + if (!drm_core_check_feature(dev, DRIVER_MODESET)) + return -ENODEV; + + if (pm_state.event == PM_EVENT_PRETHAW) + return 0; + + fbdev_flags = dev_priv->fbdev_info->flags; + dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED; + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + struct nouveau_framebuffer *nouveau_fb; + + nouveau_fb = nouveau_framebuffer(crtc->fb); + if (!nouveau_fb || !nouveau_fb->nvbo) + continue; + + nouveau_bo_unpin(nouveau_fb->nvbo); + } + + NV_INFO(dev, "Evicting buffers...\n"); + ttm_bo_evict_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM); + + NV_INFO(dev, "Idling channels...\n"); + for (i = 0; i < pfifo->channels; i++) { + struct nouveau_fence *fence = NULL; + + chan = dev_priv->fifos[i]; + if (!chan || (dev_priv->card_type >= NV_50 && + chan == dev_priv->fifos[0])) + continue; + + ret = nouveau_fence_new(chan, &fence, true); + if (ret == 0) { + ret = nouveau_fence_wait(fence, NULL, false, false); + nouveau_fence_unref((void *)&fence); + } + + if (ret) { + NV_ERROR(dev, "Failed to idle channel %d for suspend\n", + chan->id); + } + } + + pgraph->fifo_access(dev, false); + nouveau_wait_for_idle(dev); + pfifo->reassign(dev, false); + pfifo->disable(dev); + pfifo->unload_context(dev); + pgraph->unload_context(dev); + + NV_INFO(dev, "Suspending GPU objects...\n"); + ret = nouveau_gpuobj_suspend(dev); + if (ret) { + NV_ERROR(dev, "... failed: %d\n", ret); + goto out_abort; + } + + ret = pinstmem->suspend(dev); + if (ret) { + NV_ERROR(dev, "... failed: %d\n", ret); + nouveau_gpuobj_suspend_cleanup(dev); + goto out_abort; + } + + NV_INFO(dev, "And we're gone!\n"); + pci_save_state(pdev); + if (pm_state.event == PM_EVENT_SUSPEND) { + pci_disable_device(pdev); + pci_set_power_state(pdev, PCI_D3hot); + } + + acquire_console_sem(); + fb_set_suspend(dev_priv->fbdev_info, 1); + release_console_sem(); + dev_priv->fbdev_info->flags = fbdev_flags; + return 0; + +out_abort: + NV_INFO(dev, "Re-enabling acceleration..\n"); + pfifo->enable(dev); + pfifo->reassign(dev, true); + pgraph->fifo_access(dev, true); + return ret; +} + +static int +nouveau_pci_resume(struct pci_dev *pdev) +{ + struct drm_device *dev = pci_get_drvdata(pdev); + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + struct drm_crtc *crtc; + uint32_t fbdev_flags; + int ret, i; + + if (!drm_core_check_feature(dev, DRIVER_MODESET)) + return -ENODEV; + + fbdev_flags = dev_priv->fbdev_info->flags; + dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED; + + NV_INFO(dev, "We're back, enabling device...\n"); + pci_set_power_state(pdev, PCI_D0); + pci_restore_state(pdev); + if (pci_enable_device(pdev)) + return -1; + pci_set_master(dev->pdev); + + NV_INFO(dev, "POSTing device...\n"); + ret = nouveau_run_vbios_init(dev); + if (ret) + return ret; + + if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) { + ret = nouveau_mem_init_agp(dev); + if (ret) { + NV_ERROR(dev, "error reinitialising AGP: %d\n", ret); + return ret; + } + } + + NV_INFO(dev, "Reinitialising engines...\n"); + engine->instmem.resume(dev); + engine->mc.init(dev); + engine->timer.init(dev); + engine->fb.init(dev); + engine->graph.init(dev); + engine->fifo.init(dev); + + NV_INFO(dev, "Restoring GPU objects...\n"); + nouveau_gpuobj_resume(dev); + + nouveau_irq_postinstall(dev); + + /* Re-write SKIPS, they'll have been lost over the suspend */ + if (nouveau_vram_pushbuf) { + struct nouveau_channel *chan; + int j; + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + chan = dev_priv->fifos[i]; + if (!chan || !chan->pushbuf_bo) + continue; + + for (j = 0; j < NOUVEAU_DMA_SKIPS; j++) + nouveau_bo_wr32(chan->pushbuf_bo, i, 0); + } + } + + NV_INFO(dev, "Restoring mode...\n"); + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + struct nouveau_framebuffer *nouveau_fb; + + nouveau_fb = nouveau_framebuffer(crtc->fb); + if (!nouveau_fb || !nouveau_fb->nvbo) + continue; + + nouveau_bo_pin(nouveau_fb->nvbo, TTM_PL_FLAG_VRAM); + } + + if (dev_priv->card_type < NV_50) { + nv04_display_restore(dev); + NVLockVgaCrtcs(dev, false); + } else + nv50_display_init(dev); + + /* Force CLUT to get re-loaded during modeset */ + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc); + + nv_crtc->lut.depth = 0; + } + + acquire_console_sem(); + fb_set_suspend(dev_priv->fbdev_info, 0); + release_console_sem(); + + nouveau_fbcon_zfill(dev); + + drm_helper_resume_force_mode(dev); + dev_priv->fbdev_info->flags = fbdev_flags; + return 0; +} + +static struct drm_driver driver = { + .driver_features = + DRIVER_USE_AGP | DRIVER_PCI_DMA | DRIVER_SG | + DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM, + .load = nouveau_load, + .firstopen = nouveau_firstopen, + .lastclose = nouveau_lastclose, + .unload = nouveau_unload, + .preclose = nouveau_preclose, +#if defined(CONFIG_DRM_NOUVEAU_DEBUG) + .debugfs_init = nouveau_debugfs_init, + .debugfs_cleanup = nouveau_debugfs_takedown, +#endif + .irq_preinstall = nouveau_irq_preinstall, + .irq_postinstall = nouveau_irq_postinstall, + .irq_uninstall = nouveau_irq_uninstall, + .irq_handler = nouveau_irq_handler, + .reclaim_buffers = drm_core_reclaim_buffers, + .get_map_ofs = drm_core_get_map_ofs, + .get_reg_ofs = drm_core_get_reg_ofs, + .ioctls = nouveau_ioctls, + .fops = { + .owner = THIS_MODULE, + .open = drm_open, + .release = drm_release, + .unlocked_ioctl = drm_ioctl, + .mmap = nouveau_ttm_mmap, + .poll = drm_poll, + .fasync = drm_fasync, +#if defined(CONFIG_COMPAT) + .compat_ioctl = nouveau_compat_ioctl, +#endif + }, + .pci_driver = { + .name = DRIVER_NAME, + .id_table = pciidlist, + .probe = nouveau_pci_probe, + .remove = nouveau_pci_remove, + .suspend = nouveau_pci_suspend, + .resume = nouveau_pci_resume + }, + + .gem_init_object = nouveau_gem_object_new, + .gem_free_object = nouveau_gem_object_del, + + .name = DRIVER_NAME, + .desc = DRIVER_DESC, +#ifdef GIT_REVISION + .date = GIT_REVISION, +#else + .date = DRIVER_DATE, +#endif + .major = DRIVER_MAJOR, + .minor = DRIVER_MINOR, + .patchlevel = DRIVER_PATCHLEVEL, +}; + +static int __init nouveau_init(void) +{ + driver.num_ioctls = nouveau_max_ioctl; + + if (nouveau_modeset == -1) { +#ifdef CONFIG_VGA_CONSOLE + if (vgacon_text_force()) + nouveau_modeset = 0; + else +#endif + nouveau_modeset = 1; + } + + if (nouveau_modeset == 1) + driver.driver_features |= DRIVER_MODESET; + + return drm_init(&driver); +} + +static void __exit nouveau_exit(void) +{ + drm_exit(&driver); +} + +module_init(nouveau_init); +module_exit(nouveau_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL and additional rights"); --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv10_fifo.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv10_fifo.c @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +#define NV10_RAMFC(c) (dev_priv->ramfc_offset + ((c) * NV10_RAMFC__SIZE)) +#define NV10_RAMFC__SIZE ((dev_priv->chipset) >= 0x17 ? 64 : 32) + +int +nv10_fifo_channel_id(struct drm_device *dev) +{ + return nv_rd32(dev, NV03_PFIFO_CACHE1_PUSH1) & + NV10_PFIFO_CACHE1_PUSH1_CHID_MASK; +} + +int +nv10_fifo_create_context(struct nouveau_channel *chan) +{ + struct drm_nouveau_private *dev_priv = chan->dev->dev_private; + struct drm_device *dev = chan->dev; + uint32_t fc = NV10_RAMFC(chan->id); + int ret; + + ret = nouveau_gpuobj_new_fake(dev, NV10_RAMFC(chan->id), ~0, + NV10_RAMFC__SIZE, NVOBJ_FLAG_ZERO_ALLOC | + NVOBJ_FLAG_ZERO_FREE, NULL, &chan->ramfc); + if (ret) + return ret; + + /* Fill entries that are seen filled in dumps of nvidia driver just + * after channel's is put into DMA mode + */ + dev_priv->engine.instmem.prepare_access(dev, true); + nv_wi32(dev, fc + 0, chan->pushbuf_base); + nv_wi32(dev, fc + 4, chan->pushbuf_base); + nv_wi32(dev, fc + 12, chan->pushbuf->instance >> 4); + nv_wi32(dev, fc + 20, NV_PFIFO_CACHE1_DMA_FETCH_TRIG_128_BYTES | + NV_PFIFO_CACHE1_DMA_FETCH_SIZE_128_BYTES | + NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS_8 | +#ifdef __BIG_ENDIAN + NV_PFIFO_CACHE1_BIG_ENDIAN | +#endif + 0); + dev_priv->engine.instmem.finish_access(dev); + + /* enable the fifo dma operation */ + nv_wr32(dev, NV04_PFIFO_MODE, + nv_rd32(dev, NV04_PFIFO_MODE) | (1 << chan->id)); + return 0; +} + +void +nv10_fifo_destroy_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + + nv_wr32(dev, NV04_PFIFO_MODE, + nv_rd32(dev, NV04_PFIFO_MODE) & ~(1 << chan->id)); + + nouveau_gpuobj_ref_del(dev, &chan->ramfc); +} + +static void +nv10_fifo_do_load_context(struct drm_device *dev, int chid) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t fc = NV10_RAMFC(chid), tmp; + + dev_priv->engine.instmem.prepare_access(dev, false); + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUT, nv_ri32(dev, fc + 0)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_GET, nv_ri32(dev, fc + 4)); + nv_wr32(dev, NV10_PFIFO_CACHE1_REF_CNT, nv_ri32(dev, fc + 8)); + + tmp = nv_ri32(dev, fc + 12); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_INSTANCE, tmp & 0xFFFF); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_DCOUNT, tmp >> 16); + + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_STATE, nv_ri32(dev, fc + 16)); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_FETCH, nv_ri32(dev, fc + 20)); + nv_wr32(dev, NV04_PFIFO_CACHE1_ENGINE, nv_ri32(dev, fc + 24)); + nv_wr32(dev, NV04_PFIFO_CACHE1_PULL1, nv_ri32(dev, fc + 28)); + + if (dev_priv->chipset < 0x17) + goto out; + + nv_wr32(dev, NV10_PFIFO_CACHE1_ACQUIRE_VALUE, nv_ri32(dev, fc + 32)); + tmp = nv_ri32(dev, fc + 36); + nv_wr32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMESTAMP, tmp); + nv_wr32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMEOUT, nv_ri32(dev, fc + 40)); + nv_wr32(dev, NV10_PFIFO_CACHE1_SEMAPHORE, nv_ri32(dev, fc + 44)); + nv_wr32(dev, NV10_PFIFO_CACHE1_DMA_SUBROUTINE, nv_ri32(dev, fc + 48)); + +out: + dev_priv->engine.instmem.finish_access(dev); + + nv_wr32(dev, NV03_PFIFO_CACHE1_GET, 0); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUT, 0); +} + +int +nv10_fifo_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + uint32_t tmp; + + nv10_fifo_do_load_context(dev, chan->id); + + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, + NV03_PFIFO_CACHE1_PUSH1_DMA | chan->id); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_PUSH, 1); + + /* Reset NV04_PFIFO_CACHE1_DMA_CTL_AT_INFO to INVALID */ + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_CTL) & ~(1 << 31); + nv_wr32(dev, NV04_PFIFO_CACHE1_DMA_CTL, tmp); + + return 0; +} + +int +nv10_fifo_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + uint32_t fc, tmp; + int chid; + + chid = pfifo->channel_id(dev); + if (chid < 0 || chid >= dev_priv->engine.fifo.channels) + return 0; + fc = NV10_RAMFC(chid); + + dev_priv->engine.instmem.prepare_access(dev, true); + + nv_wi32(dev, fc + 0, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_PUT)); + nv_wi32(dev, fc + 4, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_GET)); + nv_wi32(dev, fc + 8, nv_rd32(dev, NV10_PFIFO_CACHE1_REF_CNT)); + tmp = nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_INSTANCE) & 0xFFFF; + tmp |= (nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_DCOUNT) << 16); + nv_wi32(dev, fc + 12, tmp); + nv_wi32(dev, fc + 16, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_STATE)); + nv_wi32(dev, fc + 20, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_FETCH)); + nv_wi32(dev, fc + 24, nv_rd32(dev, NV04_PFIFO_CACHE1_ENGINE)); + nv_wi32(dev, fc + 28, nv_rd32(dev, NV04_PFIFO_CACHE1_PULL1)); + + if (dev_priv->chipset < 0x17) + goto out; + + nv_wi32(dev, fc + 32, nv_rd32(dev, NV10_PFIFO_CACHE1_ACQUIRE_VALUE)); + tmp = nv_rd32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMESTAMP); + nv_wi32(dev, fc + 36, tmp); + nv_wi32(dev, fc + 40, nv_rd32(dev, NV10_PFIFO_CACHE1_ACQUIRE_TIMEOUT)); + nv_wi32(dev, fc + 44, nv_rd32(dev, NV10_PFIFO_CACHE1_SEMAPHORE)); + nv_wi32(dev, fc + 48, nv_rd32(dev, NV04_PFIFO_CACHE1_DMA_GET)); + +out: + dev_priv->engine.instmem.finish_access(dev); + + nv10_fifo_do_load_context(dev, pfifo->channels - 1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, pfifo->channels - 1); + return 0; +} + +static void +nv10_fifo_init_reset(struct drm_device *dev) +{ + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) & ~NV_PMC_ENABLE_PFIFO); + nv_wr32(dev, NV03_PMC_ENABLE, + nv_rd32(dev, NV03_PMC_ENABLE) | NV_PMC_ENABLE_PFIFO); + + nv_wr32(dev, 0x003224, 0x000f0078); + nv_wr32(dev, 0x002044, 0x0101ffff); + nv_wr32(dev, 0x002040, 0x000000ff); + nv_wr32(dev, 0x002500, 0x00000000); + nv_wr32(dev, 0x003000, 0x00000000); + nv_wr32(dev, 0x003050, 0x00000000); + + nv_wr32(dev, 0x003258, 0x00000000); + nv_wr32(dev, 0x003210, 0x00000000); + nv_wr32(dev, 0x003270, 0x00000000); +} + +static void +nv10_fifo_init_ramxx(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + nv_wr32(dev, NV03_PFIFO_RAMHT, (0x03 << 24) /* search 128 */ | + ((dev_priv->ramht_bits - 9) << 16) | + (dev_priv->ramht_offset >> 8)); + nv_wr32(dev, NV03_PFIFO_RAMRO, dev_priv->ramro_offset>>8); + + if (dev_priv->chipset < 0x17) { + nv_wr32(dev, NV03_PFIFO_RAMFC, dev_priv->ramfc_offset >> 8); + } else { + nv_wr32(dev, NV03_PFIFO_RAMFC, (dev_priv->ramfc_offset >> 8) | + (1 << 16) /* 64 Bytes entry*/); + /* XXX nvidia blob set bit 18, 21,23 for nv20 & nv30 */ + } +} + +static void +nv10_fifo_init_intr(struct drm_device *dev) +{ + nv_wr32(dev, 0x002100, 0xffffffff); + nv_wr32(dev, 0x002140, 0xffffffff); +} + +int +nv10_fifo_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + int i; + + nv10_fifo_init_reset(dev); + nv10_fifo_init_ramxx(dev); + + nv10_fifo_do_load_context(dev, pfifo->channels - 1); + nv_wr32(dev, NV03_PFIFO_CACHE1_PUSH1, pfifo->channels - 1); + + nv10_fifo_init_intr(dev); + pfifo->enable(dev); + pfifo->reassign(dev, true); + + for (i = 0; i < dev_priv->engine.fifo.channels; i++) { + if (dev_priv->fifos[i]) { + uint32_t mode = nv_rd32(dev, NV04_PFIFO_MODE); + nv_wr32(dev, NV04_PFIFO_MODE, mode | (1 << i)); + } + } + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv10_graph.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv10_graph.c @@ -0,0 +1,1009 @@ +/* + * Copyright 2007 Matthieu CASTET + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drm.h" +#include "nouveau_drv.h" + +#define NV10_FIFO_NUMBER 32 + +struct pipe_state { + uint32_t pipe_0x0000[0x040/4]; + uint32_t pipe_0x0040[0x010/4]; + uint32_t pipe_0x0200[0x0c0/4]; + uint32_t pipe_0x4400[0x080/4]; + uint32_t pipe_0x6400[0x3b0/4]; + uint32_t pipe_0x6800[0x2f0/4]; + uint32_t pipe_0x6c00[0x030/4]; + uint32_t pipe_0x7000[0x130/4]; + uint32_t pipe_0x7400[0x0c0/4]; + uint32_t pipe_0x7800[0x0c0/4]; +}; + +static int nv10_graph_ctx_regs[] = { + NV10_PGRAPH_CTX_SWITCH1, + NV10_PGRAPH_CTX_SWITCH2, + NV10_PGRAPH_CTX_SWITCH3, + NV10_PGRAPH_CTX_SWITCH4, + NV10_PGRAPH_CTX_SWITCH5, + NV10_PGRAPH_CTX_CACHE1, /* 8 values from 0x400160 to 0x40017c */ + NV10_PGRAPH_CTX_CACHE2, /* 8 values from 0x400180 to 0x40019c */ + NV10_PGRAPH_CTX_CACHE3, /* 8 values from 0x4001a0 to 0x4001bc */ + NV10_PGRAPH_CTX_CACHE4, /* 8 values from 0x4001c0 to 0x4001dc */ + NV10_PGRAPH_CTX_CACHE5, /* 8 values from 0x4001e0 to 0x4001fc */ + 0x00400164, + 0x00400184, + 0x004001a4, + 0x004001c4, + 0x004001e4, + 0x00400168, + 0x00400188, + 0x004001a8, + 0x004001c8, + 0x004001e8, + 0x0040016c, + 0x0040018c, + 0x004001ac, + 0x004001cc, + 0x004001ec, + 0x00400170, + 0x00400190, + 0x004001b0, + 0x004001d0, + 0x004001f0, + 0x00400174, + 0x00400194, + 0x004001b4, + 0x004001d4, + 0x004001f4, + 0x00400178, + 0x00400198, + 0x004001b8, + 0x004001d8, + 0x004001f8, + 0x0040017c, + 0x0040019c, + 0x004001bc, + 0x004001dc, + 0x004001fc, + NV10_PGRAPH_CTX_USER, + NV04_PGRAPH_DMA_START_0, + NV04_PGRAPH_DMA_START_1, + NV04_PGRAPH_DMA_LENGTH, + NV04_PGRAPH_DMA_MISC, + NV10_PGRAPH_DMA_PITCH, + NV04_PGRAPH_BOFFSET0, + NV04_PGRAPH_BBASE0, + NV04_PGRAPH_BLIMIT0, + NV04_PGRAPH_BOFFSET1, + NV04_PGRAPH_BBASE1, + NV04_PGRAPH_BLIMIT1, + NV04_PGRAPH_BOFFSET2, + NV04_PGRAPH_BBASE2, + NV04_PGRAPH_BLIMIT2, + NV04_PGRAPH_BOFFSET3, + NV04_PGRAPH_BBASE3, + NV04_PGRAPH_BLIMIT3, + NV04_PGRAPH_BOFFSET4, + NV04_PGRAPH_BBASE4, + NV04_PGRAPH_BLIMIT4, + NV04_PGRAPH_BOFFSET5, + NV04_PGRAPH_BBASE5, + NV04_PGRAPH_BLIMIT5, + NV04_PGRAPH_BPITCH0, + NV04_PGRAPH_BPITCH1, + NV04_PGRAPH_BPITCH2, + NV04_PGRAPH_BPITCH3, + NV04_PGRAPH_BPITCH4, + NV10_PGRAPH_SURFACE, + NV10_PGRAPH_STATE, + NV04_PGRAPH_BSWIZZLE2, + NV04_PGRAPH_BSWIZZLE5, + NV04_PGRAPH_BPIXEL, + NV10_PGRAPH_NOTIFY, + NV04_PGRAPH_PATT_COLOR0, + NV04_PGRAPH_PATT_COLOR1, + NV04_PGRAPH_PATT_COLORRAM, /* 64 values from 0x400900 to 0x4009fc */ + 0x00400904, + 0x00400908, + 0x0040090c, + 0x00400910, + 0x00400914, + 0x00400918, + 0x0040091c, + 0x00400920, + 0x00400924, + 0x00400928, + 0x0040092c, + 0x00400930, + 0x00400934, + 0x00400938, + 0x0040093c, + 0x00400940, + 0x00400944, + 0x00400948, + 0x0040094c, + 0x00400950, + 0x00400954, + 0x00400958, + 0x0040095c, + 0x00400960, + 0x00400964, + 0x00400968, + 0x0040096c, + 0x00400970, + 0x00400974, + 0x00400978, + 0x0040097c, + 0x00400980, + 0x00400984, + 0x00400988, + 0x0040098c, + 0x00400990, + 0x00400994, + 0x00400998, + 0x0040099c, + 0x004009a0, + 0x004009a4, + 0x004009a8, + 0x004009ac, + 0x004009b0, + 0x004009b4, + 0x004009b8, + 0x004009bc, + 0x004009c0, + 0x004009c4, + 0x004009c8, + 0x004009cc, + 0x004009d0, + 0x004009d4, + 0x004009d8, + 0x004009dc, + 0x004009e0, + 0x004009e4, + 0x004009e8, + 0x004009ec, + 0x004009f0, + 0x004009f4, + 0x004009f8, + 0x004009fc, + NV04_PGRAPH_PATTERN, /* 2 values from 0x400808 to 0x40080c */ + 0x0040080c, + NV04_PGRAPH_PATTERN_SHAPE, + NV03_PGRAPH_MONO_COLOR0, + NV04_PGRAPH_ROP3, + NV04_PGRAPH_CHROMA, + NV04_PGRAPH_BETA_AND, + NV04_PGRAPH_BETA_PREMULT, + 0x00400e70, + 0x00400e74, + 0x00400e78, + 0x00400e7c, + 0x00400e80, + 0x00400e84, + 0x00400e88, + 0x00400e8c, + 0x00400ea0, + 0x00400ea4, + 0x00400ea8, + 0x00400e90, + 0x00400e94, + 0x00400e98, + 0x00400e9c, + NV10_PGRAPH_WINDOWCLIP_HORIZONTAL, /* 8 values from 0x400f00-0x400f1c */ + NV10_PGRAPH_WINDOWCLIP_VERTICAL, /* 8 values from 0x400f20-0x400f3c */ + 0x00400f04, + 0x00400f24, + 0x00400f08, + 0x00400f28, + 0x00400f0c, + 0x00400f2c, + 0x00400f10, + 0x00400f30, + 0x00400f14, + 0x00400f34, + 0x00400f18, + 0x00400f38, + 0x00400f1c, + 0x00400f3c, + NV10_PGRAPH_XFMODE0, + NV10_PGRAPH_XFMODE1, + NV10_PGRAPH_GLOBALSTATE0, + NV10_PGRAPH_GLOBALSTATE1, + NV04_PGRAPH_STORED_FMT, + NV04_PGRAPH_SOURCE_COLOR, + NV03_PGRAPH_ABS_X_RAM, /* 32 values from 0x400400 to 0x40047c */ + NV03_PGRAPH_ABS_Y_RAM, /* 32 values from 0x400480 to 0x4004fc */ + 0x00400404, + 0x00400484, + 0x00400408, + 0x00400488, + 0x0040040c, + 0x0040048c, + 0x00400410, + 0x00400490, + 0x00400414, + 0x00400494, + 0x00400418, + 0x00400498, + 0x0040041c, + 0x0040049c, + 0x00400420, + 0x004004a0, + 0x00400424, + 0x004004a4, + 0x00400428, + 0x004004a8, + 0x0040042c, + 0x004004ac, + 0x00400430, + 0x004004b0, + 0x00400434, + 0x004004b4, + 0x00400438, + 0x004004b8, + 0x0040043c, + 0x004004bc, + 0x00400440, + 0x004004c0, + 0x00400444, + 0x004004c4, + 0x00400448, + 0x004004c8, + 0x0040044c, + 0x004004cc, + 0x00400450, + 0x004004d0, + 0x00400454, + 0x004004d4, + 0x00400458, + 0x004004d8, + 0x0040045c, + 0x004004dc, + 0x00400460, + 0x004004e0, + 0x00400464, + 0x004004e4, + 0x00400468, + 0x004004e8, + 0x0040046c, + 0x004004ec, + 0x00400470, + 0x004004f0, + 0x00400474, + 0x004004f4, + 0x00400478, + 0x004004f8, + 0x0040047c, + 0x004004fc, + NV03_PGRAPH_ABS_UCLIP_XMIN, + NV03_PGRAPH_ABS_UCLIP_XMAX, + NV03_PGRAPH_ABS_UCLIP_YMIN, + NV03_PGRAPH_ABS_UCLIP_YMAX, + 0x00400550, + 0x00400558, + 0x00400554, + 0x0040055c, + NV03_PGRAPH_ABS_UCLIPA_XMIN, + NV03_PGRAPH_ABS_UCLIPA_XMAX, + NV03_PGRAPH_ABS_UCLIPA_YMIN, + NV03_PGRAPH_ABS_UCLIPA_YMAX, + NV03_PGRAPH_ABS_ICLIP_XMAX, + NV03_PGRAPH_ABS_ICLIP_YMAX, + NV03_PGRAPH_XY_LOGIC_MISC0, + NV03_PGRAPH_XY_LOGIC_MISC1, + NV03_PGRAPH_XY_LOGIC_MISC2, + NV03_PGRAPH_XY_LOGIC_MISC3, + NV03_PGRAPH_CLIPX_0, + NV03_PGRAPH_CLIPX_1, + NV03_PGRAPH_CLIPY_0, + NV03_PGRAPH_CLIPY_1, + NV10_PGRAPH_COMBINER0_IN_ALPHA, + NV10_PGRAPH_COMBINER1_IN_ALPHA, + NV10_PGRAPH_COMBINER0_IN_RGB, + NV10_PGRAPH_COMBINER1_IN_RGB, + NV10_PGRAPH_COMBINER_COLOR0, + NV10_PGRAPH_COMBINER_COLOR1, + NV10_PGRAPH_COMBINER0_OUT_ALPHA, + NV10_PGRAPH_COMBINER1_OUT_ALPHA, + NV10_PGRAPH_COMBINER0_OUT_RGB, + NV10_PGRAPH_COMBINER1_OUT_RGB, + NV10_PGRAPH_COMBINER_FINAL0, + NV10_PGRAPH_COMBINER_FINAL1, + 0x00400e00, + 0x00400e04, + 0x00400e08, + 0x00400e0c, + 0x00400e10, + 0x00400e14, + 0x00400e18, + 0x00400e1c, + 0x00400e20, + 0x00400e24, + 0x00400e28, + 0x00400e2c, + 0x00400e30, + 0x00400e34, + 0x00400e38, + 0x00400e3c, + NV04_PGRAPH_PASSTHRU_0, + NV04_PGRAPH_PASSTHRU_1, + NV04_PGRAPH_PASSTHRU_2, + NV10_PGRAPH_DIMX_TEXTURE, + NV10_PGRAPH_WDIMX_TEXTURE, + NV10_PGRAPH_DVD_COLORFMT, + NV10_PGRAPH_SCALED_FORMAT, + NV04_PGRAPH_MISC24_0, + NV04_PGRAPH_MISC24_1, + NV04_PGRAPH_MISC24_2, + NV03_PGRAPH_X_MISC, + NV03_PGRAPH_Y_MISC, + NV04_PGRAPH_VALID1, + NV04_PGRAPH_VALID2, +}; + +static int nv17_graph_ctx_regs[] = { + NV10_PGRAPH_DEBUG_4, + 0x004006b0, + 0x00400eac, + 0x00400eb0, + 0x00400eb4, + 0x00400eb8, + 0x00400ebc, + 0x00400ec0, + 0x00400ec4, + 0x00400ec8, + 0x00400ecc, + 0x00400ed0, + 0x00400ed4, + 0x00400ed8, + 0x00400edc, + 0x00400ee0, + 0x00400a00, + 0x00400a04, +}; + +struct graph_state { + int nv10[ARRAY_SIZE(nv10_graph_ctx_regs)]; + int nv17[ARRAY_SIZE(nv17_graph_ctx_regs)]; + struct pipe_state pipe_state; + uint32_t lma_window[4]; +}; + +#define PIPE_SAVE(dev, state, addr) \ + do { \ + int __i; \ + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, addr); \ + for (__i = 0; __i < ARRAY_SIZE(state); __i++) \ + state[__i] = nv_rd32(dev, NV10_PGRAPH_PIPE_DATA); \ + } while (0) + +#define PIPE_RESTORE(dev, state, addr) \ + do { \ + int __i; \ + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, addr); \ + for (__i = 0; __i < ARRAY_SIZE(state); __i++) \ + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, state[__i]); \ + } while (0) + +static void nv10_graph_save_pipe(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + struct pipe_state *pipe = &pgraph_ctx->pipe_state; + + PIPE_SAVE(dev, pipe->pipe_0x4400, 0x4400); + PIPE_SAVE(dev, pipe->pipe_0x0200, 0x0200); + PIPE_SAVE(dev, pipe->pipe_0x6400, 0x6400); + PIPE_SAVE(dev, pipe->pipe_0x6800, 0x6800); + PIPE_SAVE(dev, pipe->pipe_0x6c00, 0x6c00); + PIPE_SAVE(dev, pipe->pipe_0x7000, 0x7000); + PIPE_SAVE(dev, pipe->pipe_0x7400, 0x7400); + PIPE_SAVE(dev, pipe->pipe_0x7800, 0x7800); + PIPE_SAVE(dev, pipe->pipe_0x0040, 0x0040); + PIPE_SAVE(dev, pipe->pipe_0x0000, 0x0000); +} + +static void nv10_graph_load_pipe(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + struct pipe_state *pipe = &pgraph_ctx->pipe_state; + uint32_t xfmode0, xfmode1; + int i; + + nouveau_wait_for_idle(dev); + /* XXX check haiku comments */ + xfmode0 = nv_rd32(dev, NV10_PGRAPH_XFMODE0); + xfmode1 = nv_rd32(dev, NV10_PGRAPH_XFMODE1); + nv_wr32(dev, NV10_PGRAPH_XFMODE0, 0x10000000); + nv_wr32(dev, NV10_PGRAPH_XFMODE1, 0x00000000); + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x000064c0); + for (i = 0; i < 4; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x3f800000); + for (i = 0; i < 4; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000000); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x00006ab0); + for (i = 0; i < 3; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x3f800000); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x00006a80); + for (i = 0; i < 3; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000000); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x00000040); + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000008); + + + PIPE_RESTORE(dev, pipe->pipe_0x0200, 0x0200); + nouveau_wait_for_idle(dev); + + /* restore XFMODE */ + nv_wr32(dev, NV10_PGRAPH_XFMODE0, xfmode0); + nv_wr32(dev, NV10_PGRAPH_XFMODE1, xfmode1); + PIPE_RESTORE(dev, pipe->pipe_0x6400, 0x6400); + PIPE_RESTORE(dev, pipe->pipe_0x6800, 0x6800); + PIPE_RESTORE(dev, pipe->pipe_0x6c00, 0x6c00); + PIPE_RESTORE(dev, pipe->pipe_0x7000, 0x7000); + PIPE_RESTORE(dev, pipe->pipe_0x7400, 0x7400); + PIPE_RESTORE(dev, pipe->pipe_0x7800, 0x7800); + PIPE_RESTORE(dev, pipe->pipe_0x4400, 0x4400); + PIPE_RESTORE(dev, pipe->pipe_0x0000, 0x0000); + PIPE_RESTORE(dev, pipe->pipe_0x0040, 0x0040); + nouveau_wait_for_idle(dev); +} + +static void nv10_graph_create_pipe(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + struct pipe_state *fifo_pipe_state = &pgraph_ctx->pipe_state; + uint32_t *fifo_pipe_state_addr; + int i; +#define PIPE_INIT(addr) \ + do { \ + fifo_pipe_state_addr = fifo_pipe_state->pipe_##addr; \ + } while (0) +#define PIPE_INIT_END(addr) \ + do { \ + uint32_t *__end_addr = fifo_pipe_state->pipe_##addr + \ + ARRAY_SIZE(fifo_pipe_state->pipe_##addr); \ + if (fifo_pipe_state_addr != __end_addr) \ + NV_ERROR(dev, "incomplete pipe init for 0x%x : %p/%p\n", \ + addr, fifo_pipe_state_addr, __end_addr); \ + } while (0) +#define NV_WRITE_PIPE_INIT(value) *(fifo_pipe_state_addr++) = value + + PIPE_INIT(0x0200); + for (i = 0; i < 48; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x0200); + + PIPE_INIT(0x6400); + for (i = 0; i < 211; i++) + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x3f800000); + NV_WRITE_PIPE_INIT(0x40000000); + NV_WRITE_PIPE_INIT(0x40000000); + NV_WRITE_PIPE_INIT(0x40000000); + NV_WRITE_PIPE_INIT(0x40000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x3f800000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x3f000000); + NV_WRITE_PIPE_INIT(0x3f000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x3f800000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x3f800000); + NV_WRITE_PIPE_INIT(0x3f800000); + NV_WRITE_PIPE_INIT(0x3f800000); + NV_WRITE_PIPE_INIT(0x3f800000); + PIPE_INIT_END(0x6400); + + PIPE_INIT(0x6800); + for (i = 0; i < 162; i++) + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x3f800000); + for (i = 0; i < 25; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x6800); + + PIPE_INIT(0x6c00); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0xbf800000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x6c00); + + PIPE_INIT(0x7000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x00000000); + NV_WRITE_PIPE_INIT(0x7149f2ca); + for (i = 0; i < 35; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x7000); + + PIPE_INIT(0x7400); + for (i = 0; i < 48; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x7400); + + PIPE_INIT(0x7800); + for (i = 0; i < 48; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x7800); + + PIPE_INIT(0x4400); + for (i = 0; i < 32; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x4400); + + PIPE_INIT(0x0000); + for (i = 0; i < 16; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x0000); + + PIPE_INIT(0x0040); + for (i = 0; i < 4; i++) + NV_WRITE_PIPE_INIT(0x00000000); + PIPE_INIT_END(0x0040); + +#undef PIPE_INIT +#undef PIPE_INIT_END +#undef NV_WRITE_PIPE_INIT +} + +static int nv10_graph_ctx_regs_find_offset(struct drm_device *dev, int reg) +{ + int i; + for (i = 0; i < ARRAY_SIZE(nv10_graph_ctx_regs); i++) { + if (nv10_graph_ctx_regs[i] == reg) + return i; + } + NV_ERROR(dev, "unknow offset nv10_ctx_regs %d\n", reg); + return -1; +} + +static int nv17_graph_ctx_regs_find_offset(struct drm_device *dev, int reg) +{ + int i; + for (i = 0; i < ARRAY_SIZE(nv17_graph_ctx_regs); i++) { + if (nv17_graph_ctx_regs[i] == reg) + return i; + } + NV_ERROR(dev, "unknow offset nv17_ctx_regs %d\n", reg); + return -1; +} + +int nv10_graph_load_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + uint32_t tmp; + int i; + + for (i = 0; i < ARRAY_SIZE(nv10_graph_ctx_regs); i++) + nv_wr32(dev, nv10_graph_ctx_regs[i], pgraph_ctx->nv10[i]); + if (dev_priv->chipset >= 0x17) { + for (i = 0; i < ARRAY_SIZE(nv17_graph_ctx_regs); i++) + nv_wr32(dev, nv17_graph_ctx_regs[i], + pgraph_ctx->nv17[i]); + } + + nv10_graph_load_pipe(chan); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10010100); + tmp = nv_rd32(dev, NV10_PGRAPH_CTX_USER); + nv_wr32(dev, NV10_PGRAPH_CTX_USER, (tmp & 0xffffff) | chan->id << 24); + tmp = nv_rd32(dev, NV10_PGRAPH_FFINTFC_ST2); + nv_wr32(dev, NV10_PGRAPH_FFINTFC_ST2, tmp & 0xcfffffff); + return 0; +} + +int +nv10_graph_unload_context(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; + struct nouveau_channel *chan; + struct graph_state *ctx; + uint32_t tmp; + int i; + + chan = pgraph->channel(dev); + if (!chan) + return 0; + ctx = chan->pgraph_ctx; + + for (i = 0; i < ARRAY_SIZE(nv10_graph_ctx_regs); i++) + ctx->nv10[i] = nv_rd32(dev, nv10_graph_ctx_regs[i]); + + if (dev_priv->chipset >= 0x17) { + for (i = 0; i < ARRAY_SIZE(nv17_graph_ctx_regs); i++) + ctx->nv17[i] = nv_rd32(dev, nv17_graph_ctx_regs[i]); + } + + nv10_graph_save_pipe(chan); + + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000000); + tmp = nv_rd32(dev, NV10_PGRAPH_CTX_USER) & 0x00ffffff; + tmp |= (pfifo->channels - 1) << 24; + nv_wr32(dev, NV10_PGRAPH_CTX_USER, tmp); + return 0; +} + +void +nv10_graph_context_switch(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + struct nouveau_channel *chan = NULL; + int chid; + + pgraph->fifo_access(dev, false); + nouveau_wait_for_idle(dev); + + /* If previous context is valid, we need to save it */ + nv10_graph_unload_context(dev); + + /* Load context for next channel */ + chid = (nv_rd32(dev, NV04_PGRAPH_TRAPPED_ADDR) >> 20) & 0x1f; + chan = dev_priv->fifos[chid]; + if (chan) + nv10_graph_load_context(chan); + + pgraph->fifo_access(dev, true); +} + +#define NV_WRITE_CTX(reg, val) do { \ + int offset = nv10_graph_ctx_regs_find_offset(dev, reg); \ + if (offset > 0) \ + pgraph_ctx->nv10[offset] = val; \ + } while (0) + +#define NV17_WRITE_CTX(reg, val) do { \ + int offset = nv17_graph_ctx_regs_find_offset(dev, reg); \ + if (offset > 0) \ + pgraph_ctx->nv17[offset] = val; \ + } while (0) + +struct nouveau_channel * +nv10_graph_channel(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + int chid = dev_priv->engine.fifo.channels; + + if (nv_rd32(dev, NV10_PGRAPH_CTX_CONTROL) & 0x00010000) + chid = nv_rd32(dev, NV10_PGRAPH_CTX_USER) >> 24; + + if (chid >= dev_priv->engine.fifo.channels) + return NULL; + + return dev_priv->fifos[chid]; +} + +int nv10_graph_create_context(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct graph_state *pgraph_ctx; + + NV_DEBUG(dev, "nv10_graph_context_create %d\n", chan->id); + + chan->pgraph_ctx = pgraph_ctx = kzalloc(sizeof(*pgraph_ctx), + GFP_KERNEL); + if (pgraph_ctx == NULL) + return -ENOMEM; + + + NV_WRITE_CTX(0x00400e88, 0x08000000); + NV_WRITE_CTX(0x00400e9c, 0x4b7fffff); + NV_WRITE_CTX(NV03_PGRAPH_XY_LOGIC_MISC0, 0x0001ffff); + NV_WRITE_CTX(0x00400e10, 0x00001000); + NV_WRITE_CTX(0x00400e14, 0x00001000); + NV_WRITE_CTX(0x00400e30, 0x00080008); + NV_WRITE_CTX(0x00400e34, 0x00080008); + if (dev_priv->chipset >= 0x17) { + /* is it really needed ??? */ + NV17_WRITE_CTX(NV10_PGRAPH_DEBUG_4, + nv_rd32(dev, NV10_PGRAPH_DEBUG_4)); + NV17_WRITE_CTX(0x004006b0, nv_rd32(dev, 0x004006b0)); + NV17_WRITE_CTX(0x00400eac, 0x0fff0000); + NV17_WRITE_CTX(0x00400eb0, 0x0fff0000); + NV17_WRITE_CTX(0x00400ec0, 0x00000080); + NV17_WRITE_CTX(0x00400ed0, 0x00000080); + } + NV_WRITE_CTX(NV10_PGRAPH_CTX_USER, chan->id << 24); + + nv10_graph_create_pipe(chan); + return 0; +} + +void nv10_graph_destroy_context(struct nouveau_channel *chan) +{ + struct graph_state *pgraph_ctx = chan->pgraph_ctx; + + kfree(pgraph_ctx); + chan->pgraph_ctx = NULL; +} + +void +nv10_graph_set_region_tiling(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch) +{ + uint32_t limit = max(1u, addr + size) - 1; + + if (pitch) + addr |= 1 << 31; + + nv_wr32(dev, NV10_PGRAPH_TLIMIT(i), limit); + nv_wr32(dev, NV10_PGRAPH_TSIZE(i), pitch); + nv_wr32(dev, NV10_PGRAPH_TILE(i), addr); +} + +int nv10_graph_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + uint32_t tmp; + int i; + + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) & + ~NV_PMC_ENABLE_PGRAPH); + nv_wr32(dev, NV03_PMC_ENABLE, nv_rd32(dev, NV03_PMC_ENABLE) | + NV_PMC_ENABLE_PGRAPH); + + nv_wr32(dev, NV03_PGRAPH_INTR , 0xFFFFFFFF); + nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0xFFFFFFFF); + + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0xFFFFFFFF); + nv_wr32(dev, NV04_PGRAPH_DEBUG_0, 0x00000000); + nv_wr32(dev, NV04_PGRAPH_DEBUG_1, 0x00118700); + /* nv_wr32(dev, NV04_PGRAPH_DEBUG_2, 0x24E00810); */ /* 0x25f92ad9 */ + nv_wr32(dev, NV04_PGRAPH_DEBUG_2, 0x25f92ad9); + nv_wr32(dev, NV04_PGRAPH_DEBUG_3, 0x55DE0830 | + (1<<29) | + (1<<31)); + if (dev_priv->chipset >= 0x17) { + nv_wr32(dev, NV10_PGRAPH_DEBUG_4, 0x1f000000); + nv_wr32(dev, 0x400a10, 0x3ff3fb6); + nv_wr32(dev, 0x400838, 0x2f8684); + nv_wr32(dev, 0x40083c, 0x115f3f); + nv_wr32(dev, 0x004006b0, 0x40000020); + } else + nv_wr32(dev, NV10_PGRAPH_DEBUG_4, 0x00000000); + + /* Turn all the tiling regions off. */ + for (i = 0; i < NV10_PFB_TILE__SIZE; i++) + nv10_graph_set_region_tiling(dev, i, 0, 0, 0); + + nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH1, 0x00000000); + nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH2, 0x00000000); + nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH3, 0x00000000); + nv_wr32(dev, NV10_PGRAPH_CTX_SWITCH4, 0x00000000); + nv_wr32(dev, NV10_PGRAPH_STATE , 0xFFFFFFFF); + + tmp = nv_rd32(dev, NV10_PGRAPH_CTX_USER) & 0x00ffffff; + tmp |= (dev_priv->engine.fifo.channels - 1) << 24; + nv_wr32(dev, NV10_PGRAPH_CTX_USER, tmp); + nv_wr32(dev, NV10_PGRAPH_CTX_CONTROL, 0x10000100); + nv_wr32(dev, NV10_PGRAPH_FFINTFC_ST2, 0x08000000); + + return 0; +} + +void nv10_graph_takedown(struct drm_device *dev) +{ +} + +static int +nv17_graph_mthd_lma_window(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + struct drm_device *dev = chan->dev; + struct graph_state *ctx = chan->pgraph_ctx; + struct pipe_state *pipe = &ctx->pipe_state; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + uint32_t pipe_0x0040[1], pipe_0x64c0[8], pipe_0x6a80[3], pipe_0x6ab0[3]; + uint32_t xfmode0, xfmode1; + int i; + + ctx->lma_window[(mthd - 0x1638) / 4] = data; + + if (mthd != 0x1644) + return 0; + + nouveau_wait_for_idle(dev); + + PIPE_SAVE(dev, pipe_0x0040, 0x0040); + PIPE_SAVE(dev, pipe->pipe_0x0200, 0x0200); + + PIPE_RESTORE(dev, ctx->lma_window, 0x6790); + + nouveau_wait_for_idle(dev); + + xfmode0 = nv_rd32(dev, NV10_PGRAPH_XFMODE0); + xfmode1 = nv_rd32(dev, NV10_PGRAPH_XFMODE1); + + PIPE_SAVE(dev, pipe->pipe_0x4400, 0x4400); + PIPE_SAVE(dev, pipe_0x64c0, 0x64c0); + PIPE_SAVE(dev, pipe_0x6ab0, 0x6ab0); + PIPE_SAVE(dev, pipe_0x6a80, 0x6a80); + + nouveau_wait_for_idle(dev); + + nv_wr32(dev, NV10_PGRAPH_XFMODE0, 0x10000000); + nv_wr32(dev, NV10_PGRAPH_XFMODE1, 0x00000000); + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x000064c0); + for (i = 0; i < 4; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x3f800000); + for (i = 0; i < 4; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000000); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x00006ab0); + for (i = 0; i < 3; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x3f800000); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x00006a80); + for (i = 0; i < 3; i++) + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000000); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x00000040); + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000008); + + PIPE_RESTORE(dev, pipe->pipe_0x0200, 0x0200); + + nouveau_wait_for_idle(dev); + + PIPE_RESTORE(dev, pipe_0x0040, 0x0040); + + nv_wr32(dev, NV10_PGRAPH_XFMODE0, xfmode0); + nv_wr32(dev, NV10_PGRAPH_XFMODE1, xfmode1); + + PIPE_RESTORE(dev, pipe_0x64c0, 0x64c0); + PIPE_RESTORE(dev, pipe_0x6ab0, 0x6ab0); + PIPE_RESTORE(dev, pipe_0x6a80, 0x6a80); + PIPE_RESTORE(dev, pipe->pipe_0x4400, 0x4400); + + nv_wr32(dev, NV10_PGRAPH_PIPE_ADDRESS, 0x000000c0); + nv_wr32(dev, NV10_PGRAPH_PIPE_DATA, 0x00000000); + + nouveau_wait_for_idle(dev); + + pgraph->fifo_access(dev, true); + + return 0; +} + +static int +nv17_graph_mthd_lma_enable(struct nouveau_channel *chan, int grclass, + int mthd, uint32_t data) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; + + nouveau_wait_for_idle(dev); + + nv_wr32(dev, NV10_PGRAPH_DEBUG_4, + nv_rd32(dev, NV10_PGRAPH_DEBUG_4) | 0x1 << 8); + nv_wr32(dev, 0x004006b0, + nv_rd32(dev, 0x004006b0) | 0x8 << 24); + + pgraph->fifo_access(dev, true); + + return 0; +} + +static struct nouveau_pgraph_object_method nv17_graph_celsius_mthds[] = { + { 0x1638, nv17_graph_mthd_lma_window }, + { 0x163c, nv17_graph_mthd_lma_window }, + { 0x1640, nv17_graph_mthd_lma_window }, + { 0x1644, nv17_graph_mthd_lma_window }, + { 0x1658, nv17_graph_mthd_lma_enable }, + {} +}; + +struct nouveau_pgraph_object_class nv10_graph_grclass[] = { + { 0x0030, false, NULL }, /* null */ + { 0x0039, false, NULL }, /* m2mf */ + { 0x004a, false, NULL }, /* gdirect */ + { 0x005f, false, NULL }, /* imageblit */ + { 0x009f, false, NULL }, /* imageblit (nv12) */ + { 0x008a, false, NULL }, /* ifc */ + { 0x0089, false, NULL }, /* sifm */ + { 0x0062, false, NULL }, /* surf2d */ + { 0x0043, false, NULL }, /* rop */ + { 0x0012, false, NULL }, /* beta1 */ + { 0x0072, false, NULL }, /* beta4 */ + { 0x0019, false, NULL }, /* cliprect */ + { 0x0044, false, NULL }, /* pattern */ + { 0x0052, false, NULL }, /* swzsurf */ + { 0x0093, false, NULL }, /* surf3d */ + { 0x0094, false, NULL }, /* tex_tri */ + { 0x0095, false, NULL }, /* multitex_tri */ + { 0x0056, false, NULL }, /* celcius (nv10) */ + { 0x0096, false, NULL }, /* celcius (nv11) */ + { 0x0099, false, nv17_graph_celsius_mthds }, /* celcius (nv17) */ + {} +}; --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv04_timer.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv04_timer.c @@ -0,0 +1,51 @@ +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" + +int +nv04_timer_init(struct drm_device *dev) +{ + nv_wr32(dev, NV04_PTIMER_INTR_EN_0, 0x00000000); + nv_wr32(dev, NV04_PTIMER_INTR_0, 0xFFFFFFFF); + + /* Just use the pre-existing values when possible for now; these regs + * are not written in nv (driver writer missed a /4 on the address), and + * writing 8 and 3 to the correct regs breaks the timings on the LVDS + * hardware sequencing microcode. + * A correct solution (involving calculations with the GPU PLL) can + * be done when kernel modesetting lands + */ + if (!nv_rd32(dev, NV04_PTIMER_NUMERATOR) || + !nv_rd32(dev, NV04_PTIMER_DENOMINATOR)) { + nv_wr32(dev, NV04_PTIMER_NUMERATOR, 0x00000008); + nv_wr32(dev, NV04_PTIMER_DENOMINATOR, 0x00000003); + } + + return 0; +} + +uint64_t +nv04_timer_read(struct drm_device *dev) +{ + uint32_t low; + /* From kmmio dumps on nv28 this looks like how the blob does this. + * It reads the high dword twice, before and after. + * The only explanation seems to be that the 64-bit timer counter + * advances between high and low dword reads and may corrupt the + * result. Not confirmed. + */ + uint32_t high2 = nv_rd32(dev, NV04_PTIMER_TIME_1); + uint32_t high1; + do { + high1 = high2; + low = nv_rd32(dev, NV04_PTIMER_TIME_0); + high2 = nv_rd32(dev, NV04_PTIMER_TIME_1); + } while (high1 != high2); + return (((uint64_t)high2) << 32) | (uint64_t)low; +} + +void +nv04_timer_takedown(struct drm_device *dev) +{ +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_acpi.c @@ -0,0 +1,125 @@ +#include +#include +#include +#include + +#include "drmP.h" +#include "drm.h" +#include "drm_sarea.h" +#include "drm_crtc_helper.h" +#include "nouveau_drv.h" +#include "nouveau_drm.h" +#include "nv50_display.h" + +#define NOUVEAU_DSM_SUPPORTED 0x00 +#define NOUVEAU_DSM_SUPPORTED_FUNCTIONS 0x00 + +#define NOUVEAU_DSM_ACTIVE 0x01 +#define NOUVEAU_DSM_ACTIVE_QUERY 0x00 + +#define NOUVEAU_DSM_LED 0x02 +#define NOUVEAU_DSM_LED_STATE 0x00 +#define NOUVEAU_DSM_LED_OFF 0x10 +#define NOUVEAU_DSM_LED_STAMINA 0x11 +#define NOUVEAU_DSM_LED_SPEED 0x12 + +#define NOUVEAU_DSM_POWER 0x03 +#define NOUVEAU_DSM_POWER_STATE 0x00 +#define NOUVEAU_DSM_POWER_SPEED 0x01 +#define NOUVEAU_DSM_POWER_STAMINA 0x02 + +static int nouveau_dsm(struct drm_device *dev, int func, int arg, int *result) +{ + static char muid[] = { + 0xA0, 0xA0, 0x95, 0x9D, 0x60, 0x00, 0x48, 0x4D, + 0xB3, 0x4D, 0x7E, 0x5F, 0xEA, 0x12, 0x9F, 0xD4, + }; + + struct pci_dev *pdev = dev->pdev; + struct acpi_handle *handle; + struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; + struct acpi_object_list input; + union acpi_object params[4]; + union acpi_object *obj; + int err; + + handle = DEVICE_ACPI_HANDLE(&pdev->dev); + + if (!handle) + return -ENODEV; + + input.count = 4; + input.pointer = params; + params[0].type = ACPI_TYPE_BUFFER; + params[0].buffer.length = sizeof(muid); + params[0].buffer.pointer = (char *)muid; + params[1].type = ACPI_TYPE_INTEGER; + params[1].integer.value = 0x00000102; + params[2].type = ACPI_TYPE_INTEGER; + params[2].integer.value = func; + params[3].type = ACPI_TYPE_INTEGER; + params[3].integer.value = arg; + + err = acpi_evaluate_object(handle, "_DSM", &input, &output); + if (err) { + NV_INFO(dev, "failed to evaluate _DSM: %d\n", err); + return err; + } + + obj = (union acpi_object *)output.pointer; + + if (obj->type == ACPI_TYPE_INTEGER) + if (obj->integer.value == 0x80000002) + return -ENODEV; + + if (obj->type == ACPI_TYPE_BUFFER) { + if (obj->buffer.length == 4 && result) { + *result = 0; + *result |= obj->buffer.pointer[0]; + *result |= (obj->buffer.pointer[1] << 8); + *result |= (obj->buffer.pointer[2] << 16); + *result |= (obj->buffer.pointer[3] << 24); + } + } + + kfree(output.pointer); + return 0; +} + +int nouveau_hybrid_setup(struct drm_device *dev) +{ + int result; + + if (nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STATE, + &result)) + return -ENODEV; + + NV_INFO(dev, "_DSM hardware status gave 0x%x\n", result); + + if (result) { /* Ensure that the external GPU is enabled */ + nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_SPEED, NULL); + nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_SPEED, + NULL); + } else { /* Stamina mode - disable the external GPU */ + nouveau_dsm(dev, NOUVEAU_DSM_LED, NOUVEAU_DSM_LED_STAMINA, + NULL); + nouveau_dsm(dev, NOUVEAU_DSM_POWER, NOUVEAU_DSM_POWER_STAMINA, + NULL); + } + + return 0; +} + +bool nouveau_dsm_probe(struct drm_device *dev) +{ + int support = 0; + + if (nouveau_dsm(dev, NOUVEAU_DSM_SUPPORTED, + NOUVEAU_DSM_SUPPORTED_FUNCTIONS, &support)) + return false; + + if (!support) + return false; + + return true; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_ioc32.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_ioc32.c @@ -0,0 +1,70 @@ +/** + * \file mga_ioc32.c + * + * 32-bit ioctl compatibility routines for the MGA DRM. + * + * \author Dave Airlie with code from patches by Egbert Eich + * + * + * Copyright (C) Paul Mackerras 2005 + * Copyright (C) Egbert Eich 2003,2004 + * Copyright (C) Dave Airlie 2005 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include + +#include "drmP.h" +#include "drm.h" + +#include "nouveau_drv.h" + +/** + * Called whenever a 32-bit process running under a 64-bit kernel + * performs an ioctl on /dev/dri/card. + * + * \param filp file pointer. + * \param cmd command. + * \param arg user argument. + * \return zero on success or negative number on failure. + */ +long nouveau_compat_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg) +{ + unsigned int nr = DRM_IOCTL_NR(cmd); + drm_ioctl_compat_t *fn = NULL; + int ret; + + if (nr < DRM_COMMAND_BASE) + return drm_compat_ioctl(filp, cmd, arg); + +#if 0 + if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) + fn = nouveau_compat_ioctls[nr - DRM_COMMAND_BASE]; +#endif + if (fn != NULL) + ret = (*fn)(filp, cmd, arg); + else + ret = drm_ioctl(filp, cmd, arg); + + return ret; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_notifier.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_notifier.c @@ -0,0 +1,203 @@ +/* + * Copyright (C) 2007 Ben Skeggs. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm.h" +#include "nouveau_drv.h" + +int +nouveau_notifier_init_channel(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + struct nouveau_bo *ntfy = NULL; + uint32_t flags; + int ret; + + if (nouveau_vram_notify) + flags = TTM_PL_FLAG_VRAM; + else + flags = TTM_PL_FLAG_TT; + + ret = nouveau_gem_new(dev, NULL, PAGE_SIZE, 0, flags, + 0, 0x0000, false, true, &ntfy); + if (ret) + return ret; + + ret = nouveau_bo_pin(ntfy, flags); + if (ret) + goto out_err; + + ret = nouveau_bo_map(ntfy); + if (ret) + goto out_err; + + ret = nouveau_mem_init_heap(&chan->notifier_heap, 0, ntfy->bo.mem.size); + if (ret) + goto out_err; + + chan->notifier_bo = ntfy; +out_err: + if (ret) { + mutex_lock(&dev->struct_mutex); + drm_gem_object_unreference(ntfy->gem); + mutex_unlock(&dev->struct_mutex); + } + + return ret; +} + +void +nouveau_notifier_takedown_channel(struct nouveau_channel *chan) +{ + struct drm_device *dev = chan->dev; + + if (!chan->notifier_bo) + return; + + nouveau_bo_unmap(chan->notifier_bo); + mutex_lock(&dev->struct_mutex); + nouveau_bo_unpin(chan->notifier_bo); + drm_gem_object_unreference(chan->notifier_bo->gem); + mutex_unlock(&dev->struct_mutex); + nouveau_mem_takedown(&chan->notifier_heap); +} + +static void +nouveau_notifier_gpuobj_dtor(struct drm_device *dev, + struct nouveau_gpuobj *gpuobj) +{ + NV_DEBUG(dev, "\n"); + + if (gpuobj->priv) + nouveau_mem_free_block(gpuobj->priv); +} + +int +nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle, + int size, uint32_t *b_offset) +{ + struct drm_device *dev = chan->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *nobj = NULL; + struct mem_block *mem; + uint32_t offset; + int target, ret; + + if (!chan->notifier_heap) { + NV_ERROR(dev, "Channel %d doesn't have a notifier heap!\n", + chan->id); + return -EINVAL; + } + + mem = nouveau_mem_alloc_block(chan->notifier_heap, size, 0, + (struct drm_file *)-2, 0); + if (!mem) { + NV_ERROR(dev, "Channel %d notifier block full\n", chan->id); + return -ENOMEM; + } + + offset = chan->notifier_bo->bo.mem.mm_node->start << PAGE_SHIFT; + if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_VRAM) { + target = NV_DMA_TARGET_VIDMEM; + } else + if (chan->notifier_bo->bo.mem.mem_type == TTM_PL_TT) { + if (dev_priv->gart_info.type == NOUVEAU_GART_SGDMA && + dev_priv->card_type < NV_50) { + ret = nouveau_sgdma_get_page(dev, offset, &offset); + if (ret) + return ret; + target = NV_DMA_TARGET_PCI; + } else { + target = NV_DMA_TARGET_AGP; + if (dev_priv->card_type >= NV_50) + offset += dev_priv->vm_gart_base; + } + } else { + NV_ERROR(dev, "Bad DMA target, mem_type %d!\n", + chan->notifier_bo->bo.mem.mem_type); + return -EINVAL; + } + offset += mem->start; + + ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY, offset, + mem->size, NV_DMA_ACCESS_RW, target, + &nobj); + if (ret) { + nouveau_mem_free_block(mem); + NV_ERROR(dev, "Error creating notifier ctxdma: %d\n", ret); + return ret; + } + nobj->dtor = nouveau_notifier_gpuobj_dtor; + nobj->priv = mem; + + ret = nouveau_gpuobj_ref_add(dev, chan, handle, nobj, NULL); + if (ret) { + nouveau_gpuobj_del(dev, &nobj); + nouveau_mem_free_block(mem); + NV_ERROR(dev, "Error referencing notifier ctxdma: %d\n", ret); + return ret; + } + + *b_offset = mem->start; + return 0; +} + +int +nouveau_notifier_offset(struct nouveau_gpuobj *nobj, uint32_t *poffset) +{ + if (!nobj || nobj->dtor != nouveau_notifier_gpuobj_dtor) + return -EINVAL; + + if (poffset) { + struct mem_block *mem = nobj->priv; + + if (*poffset >= mem->size) + return false; + + *poffset += mem->start; + } + + return 0; +} + +int +nouveau_ioctl_notifier_alloc(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_notifierobj_alloc *na = data; + struct nouveau_channel *chan; + int ret; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(na->channel, file_priv, chan); + + ret = nouveau_notifier_alloc(chan, na->handle, na->size, &na->offset); + if (ret) + return ret; + + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_encoder.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_encoder.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __NOUVEAU_ENCODER_H__ +#define __NOUVEAU_ENCODER_H__ + +#include "drm_encoder_slave.h" +#include "nouveau_drv.h" + +#define NV_DPMS_CLEARED 0x80 + +struct nouveau_encoder { + struct drm_encoder_slave base; + + struct dcb_entry *dcb; + int or; + + struct drm_display_mode mode; + int last_dpms; + + struct nv04_output_reg restore; + + void (*disconnect)(struct nouveau_encoder *encoder); + + union { + struct { + int dpcd_version; + int link_nr; + int link_bw; + } dp; + }; +}; + +static inline struct nouveau_encoder *nouveau_encoder(struct drm_encoder *enc) +{ + struct drm_encoder_slave *slave = to_encoder_slave(enc); + + return container_of(slave, struct nouveau_encoder, base); +} + +static inline struct drm_encoder *to_drm_encoder(struct nouveau_encoder *enc) +{ + return &enc->base.base; +} + +struct nouveau_connector * +nouveau_encoder_connector_get(struct nouveau_encoder *encoder); +int nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry); +int nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry); + +struct bit_displayport_encoder_table { + uint32_t match; + uint8_t record_nr; + uint8_t unknown; + uint16_t script0; + uint16_t script1; + uint16_t unknown_table; +} __attribute__ ((packed)); + +struct bit_displayport_encoder_table_entry { + uint8_t vs_level; + uint8_t pre_level; + uint8_t reg0; + uint8_t reg1; + uint8_t reg2; +} __attribute__ ((packed)); + +#endif /* __NOUVEAU_ENCODER_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nv50_dac.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nv50_dac.c @@ -0,0 +1,304 @@ +/* + * Copyright (C) 2008 Maarten Maathuis. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "drmP.h" +#include "drm_crtc_helper.h" + +#define NOUVEAU_DMA_DEBUG (nouveau_reg_debug & NOUVEAU_REG_DEBUG_EVO) +#include "nouveau_reg.h" +#include "nouveau_drv.h" +#include "nouveau_dma.h" +#include "nouveau_encoder.h" +#include "nouveau_connector.h" +#include "nouveau_crtc.h" +#include "nv50_display.h" + +static void +nv50_dac_disconnect(struct nouveau_encoder *nv_encoder) +{ + struct drm_device *dev = to_drm_encoder(nv_encoder)->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + int ret; + + NV_DEBUG_KMS(dev, "Disconnecting DAC %d\n", nv_encoder->or); + + ret = RING_SPACE(evo, 2); + if (ret) { + NV_ERROR(dev, "no space while disconnecting DAC\n"); + return; + } + BEGIN_RING(evo, 0, NV50_EVO_DAC(nv_encoder->or, MODE_CTRL), 1); + OUT_RING(evo, 0); +} + +static enum drm_connector_status +nv50_dac_detect(struct drm_encoder *encoder, struct drm_connector *connector) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + enum drm_connector_status status = connector_status_disconnected; + uint32_t dpms_state, load_pattern, load_state; + int or = nv_encoder->or; + + nv_wr32(dev, NV50_PDISPLAY_DAC_CLK_CTRL1(or), 0x00000001); + dpms_state = nv_rd32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or)); + + nv_wr32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), + 0x00150000 | NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING); + if (!nv_wait(NV50_PDISPLAY_DAC_DPMS_CTRL(or), + NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING, 0)) { + NV_ERROR(dev, "timeout: DAC_DPMS_CTRL_PENDING(%d) == 0\n", or); + NV_ERROR(dev, "DAC_DPMS_CTRL(%d) = 0x%08x\n", or, + nv_rd32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or))); + return status; + } + + /* Use bios provided value if possible. */ + if (dev_priv->vbios->dactestval) { + load_pattern = dev_priv->vbios->dactestval; + NV_DEBUG_KMS(dev, "Using bios provided load_pattern of %d\n", + load_pattern); + } else { + load_pattern = 340; + NV_DEBUG_KMS(dev, "Using default load_pattern of %d\n", + load_pattern); + } + + nv_wr32(dev, NV50_PDISPLAY_DAC_LOAD_CTRL(or), + NV50_PDISPLAY_DAC_LOAD_CTRL_ACTIVE | load_pattern); + mdelay(45); /* give it some time to process */ + load_state = nv_rd32(dev, NV50_PDISPLAY_DAC_LOAD_CTRL(or)); + + nv_wr32(dev, NV50_PDISPLAY_DAC_LOAD_CTRL(or), 0); + nv_wr32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), dpms_state | + NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING); + + if ((load_state & NV50_PDISPLAY_DAC_LOAD_CTRL_PRESENT) == + NV50_PDISPLAY_DAC_LOAD_CTRL_PRESENT) + status = connector_status_connected; + + if (status == connector_status_connected) + NV_DEBUG_KMS(dev, "Load was detected on output with or %d\n", or); + else + NV_DEBUG_KMS(dev, "Load was not detected on output with or %d\n", or); + + return status; +} + +static void +nv50_dac_dpms(struct drm_encoder *encoder, int mode) +{ + struct drm_device *dev = encoder->dev; + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + uint32_t val; + int or = nv_encoder->or; + + NV_DEBUG_KMS(dev, "or %d mode %d\n", or, mode); + + /* wait for it to be done */ + if (!nv_wait(NV50_PDISPLAY_DAC_DPMS_CTRL(or), + NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING, 0)) { + NV_ERROR(dev, "timeout: DAC_DPMS_CTRL_PENDING(%d) == 0\n", or); + NV_ERROR(dev, "DAC_DPMS_CTRL(%d) = 0x%08x\n", or, + nv_rd32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or))); + return; + } + + val = nv_rd32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or)) & ~0x7F; + + if (mode != DRM_MODE_DPMS_ON) + val |= NV50_PDISPLAY_DAC_DPMS_CTRL_BLANKED; + + switch (mode) { + case DRM_MODE_DPMS_STANDBY: + val |= NV50_PDISPLAY_DAC_DPMS_CTRL_HSYNC_OFF; + break; + case DRM_MODE_DPMS_SUSPEND: + val |= NV50_PDISPLAY_DAC_DPMS_CTRL_VSYNC_OFF; + break; + case DRM_MODE_DPMS_OFF: + val |= NV50_PDISPLAY_DAC_DPMS_CTRL_OFF; + val |= NV50_PDISPLAY_DAC_DPMS_CTRL_HSYNC_OFF; + val |= NV50_PDISPLAY_DAC_DPMS_CTRL_VSYNC_OFF; + break; + default: + break; + } + + nv_wr32(dev, NV50_PDISPLAY_DAC_DPMS_CTRL(or), val | + NV50_PDISPLAY_DAC_DPMS_CTRL_PENDING); +} + +static void +nv50_dac_save(struct drm_encoder *encoder) +{ + NV_ERROR(encoder->dev, "!!\n"); +} + +static void +nv50_dac_restore(struct drm_encoder *encoder) +{ + NV_ERROR(encoder->dev, "!!\n"); +} + +static bool +nv50_dac_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct nouveau_connector *connector; + + NV_DEBUG_KMS(encoder->dev, "or %d\n", nv_encoder->or); + + connector = nouveau_encoder_connector_get(nv_encoder); + if (!connector) { + NV_ERROR(encoder->dev, "Encoder has no connector\n"); + return false; + } + + if (connector->scaling_mode != DRM_MODE_SCALE_NONE && + connector->native_mode) { + int id = adjusted_mode->base.id; + *adjusted_mode = *connector->native_mode; + adjusted_mode->base.id = id; + } + + return true; +} + +static void +nv50_dac_prepare(struct drm_encoder *encoder) +{ +} + +static void +nv50_dac_commit(struct drm_encoder *encoder) +{ +} + +static void +nv50_dac_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + struct drm_device *dev = encoder->dev; + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_channel *evo = dev_priv->evo; + struct nouveau_crtc *crtc = nouveau_crtc(encoder->crtc); + uint32_t mode_ctl = 0, mode_ctl2 = 0; + int ret; + + NV_DEBUG_KMS(dev, "or %d\n", nv_encoder->or); + + nv50_dac_dpms(encoder, DRM_MODE_DPMS_ON); + + if (crtc->index == 1) + mode_ctl |= NV50_EVO_DAC_MODE_CTRL_CRTC1; + else + mode_ctl |= NV50_EVO_DAC_MODE_CTRL_CRTC0; + + /* Lacking a working tv-out, this is not a 100% sure. */ + if (nv_encoder->dcb->type == OUTPUT_ANALOG) + mode_ctl |= 0x40; + else + if (nv_encoder->dcb->type == OUTPUT_TV) + mode_ctl |= 0x100; + + if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC) + mode_ctl2 |= NV50_EVO_DAC_MODE_CTRL2_NHSYNC; + + if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) + mode_ctl2 |= NV50_EVO_DAC_MODE_CTRL2_NVSYNC; + + ret = RING_SPACE(evo, 3); + if (ret) { + NV_ERROR(dev, "no space while connecting DAC\n"); + return; + } + BEGIN_RING(evo, 0, NV50_EVO_DAC(nv_encoder->or, MODE_CTRL), 2); + OUT_RING(evo, mode_ctl); + OUT_RING(evo, mode_ctl2); +} + +static const struct drm_encoder_helper_funcs nv50_dac_helper_funcs = { + .dpms = nv50_dac_dpms, + .save = nv50_dac_save, + .restore = nv50_dac_restore, + .mode_fixup = nv50_dac_mode_fixup, + .prepare = nv50_dac_prepare, + .commit = nv50_dac_commit, + .mode_set = nv50_dac_mode_set, + .detect = nv50_dac_detect +}; + +static void +nv50_dac_destroy(struct drm_encoder *encoder) +{ + struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder); + + if (!encoder) + return; + + NV_DEBUG_KMS(encoder->dev, "\n"); + + drm_encoder_cleanup(encoder); + kfree(nv_encoder); +} + +static const struct drm_encoder_funcs nv50_dac_encoder_funcs = { + .destroy = nv50_dac_destroy, +}; + +int +nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry) +{ + struct nouveau_encoder *nv_encoder; + struct drm_encoder *encoder; + + NV_DEBUG_KMS(dev, "\n"); + NV_INFO(dev, "Detected a DAC output\n"); + + nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL); + if (!nv_encoder) + return -ENOMEM; + encoder = to_drm_encoder(nv_encoder); + + nv_encoder->dcb = entry; + nv_encoder->or = ffs(entry->or) - 1; + + nv_encoder->disconnect = nv50_dac_disconnect; + + drm_encoder_init(dev, encoder, &nv50_dac_encoder_funcs, + DRM_MODE_ENCODER_DAC); + drm_encoder_helper_add(encoder, &nv50_dac_helper_funcs); + + encoder->possible_crtcs = entry->heads; + encoder->possible_clones = 0; + return 0; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_state.c +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_state.c @@ -0,0 +1,932 @@ +/* + * Copyright 2005 Stephane Marchesin + * Copyright 2008 Stuart Bennett + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include "drmP.h" +#include "drm.h" +#include "drm_sarea.h" +#include "drm_crtc_helper.h" +#include + +#include "nouveau_drv.h" +#include "nouveau_drm.h" +#include "nv50_display.h" + +static int nouveau_stub_init(struct drm_device *dev) { return 0; } +static void nouveau_stub_takedown(struct drm_device *dev) {} + +static int nouveau_init_engine_ptrs(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + + switch (dev_priv->chipset & 0xf0) { + case 0x00: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; + engine->instmem.populate = nv04_instmem_populate; + engine->instmem.clear = nv04_instmem_clear; + engine->instmem.bind = nv04_instmem_bind; + engine->instmem.unbind = nv04_instmem_unbind; + engine->instmem.prepare_access = nv04_instmem_prepare_access; + engine->instmem.finish_access = nv04_instmem_finish_access; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; + engine->timer.init = nv04_timer_init; + engine->timer.read = nv04_timer_read; + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv04_fb_init; + engine->fb.takedown = nv04_fb_takedown; + engine->graph.grclass = nv04_graph_grclass; + engine->graph.init = nv04_graph_init; + engine->graph.takedown = nv04_graph_takedown; + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.channel = nv04_graph_channel; + engine->graph.create_context = nv04_graph_create_context; + engine->graph.destroy_context = nv04_graph_destroy_context; + engine->graph.load_context = nv04_graph_load_context; + engine->graph.unload_context = nv04_graph_unload_context; + engine->fifo.channels = 16; + engine->fifo.init = nv04_fifo_init; + engine->fifo.takedown = nouveau_stub_takedown; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_flush = nv04_fifo_cache_flush; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv04_fifo_channel_id; + engine->fifo.create_context = nv04_fifo_create_context; + engine->fifo.destroy_context = nv04_fifo_destroy_context; + engine->fifo.load_context = nv04_fifo_load_context; + engine->fifo.unload_context = nv04_fifo_unload_context; + break; + case 0x10: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; + engine->instmem.populate = nv04_instmem_populate; + engine->instmem.clear = nv04_instmem_clear; + engine->instmem.bind = nv04_instmem_bind; + engine->instmem.unbind = nv04_instmem_unbind; + engine->instmem.prepare_access = nv04_instmem_prepare_access; + engine->instmem.finish_access = nv04_instmem_finish_access; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; + engine->timer.init = nv04_timer_init; + engine->timer.read = nv04_timer_read; + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv10_fb_init; + engine->fb.takedown = nv10_fb_takedown; + engine->fb.set_region_tiling = nv10_fb_set_region_tiling; + engine->graph.grclass = nv10_graph_grclass; + engine->graph.init = nv10_graph_init; + engine->graph.takedown = nv10_graph_takedown; + engine->graph.channel = nv10_graph_channel; + engine->graph.create_context = nv10_graph_create_context; + engine->graph.destroy_context = nv10_graph_destroy_context; + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.load_context = nv10_graph_load_context; + engine->graph.unload_context = nv10_graph_unload_context; + engine->graph.set_region_tiling = nv10_graph_set_region_tiling; + engine->fifo.channels = 32; + engine->fifo.init = nv10_fifo_init; + engine->fifo.takedown = nouveau_stub_takedown; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_flush = nv04_fifo_cache_flush; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv10_fifo_create_context; + engine->fifo.destroy_context = nv10_fifo_destroy_context; + engine->fifo.load_context = nv10_fifo_load_context; + engine->fifo.unload_context = nv10_fifo_unload_context; + break; + case 0x20: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; + engine->instmem.populate = nv04_instmem_populate; + engine->instmem.clear = nv04_instmem_clear; + engine->instmem.bind = nv04_instmem_bind; + engine->instmem.unbind = nv04_instmem_unbind; + engine->instmem.prepare_access = nv04_instmem_prepare_access; + engine->instmem.finish_access = nv04_instmem_finish_access; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; + engine->timer.init = nv04_timer_init; + engine->timer.read = nv04_timer_read; + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv10_fb_init; + engine->fb.takedown = nv10_fb_takedown; + engine->fb.set_region_tiling = nv10_fb_set_region_tiling; + engine->graph.grclass = nv20_graph_grclass; + engine->graph.init = nv20_graph_init; + engine->graph.takedown = nv20_graph_takedown; + engine->graph.channel = nv10_graph_channel; + engine->graph.create_context = nv20_graph_create_context; + engine->graph.destroy_context = nv20_graph_destroy_context; + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.load_context = nv20_graph_load_context; + engine->graph.unload_context = nv20_graph_unload_context; + engine->graph.set_region_tiling = nv20_graph_set_region_tiling; + engine->fifo.channels = 32; + engine->fifo.init = nv10_fifo_init; + engine->fifo.takedown = nouveau_stub_takedown; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_flush = nv04_fifo_cache_flush; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv10_fifo_create_context; + engine->fifo.destroy_context = nv10_fifo_destroy_context; + engine->fifo.load_context = nv10_fifo_load_context; + engine->fifo.unload_context = nv10_fifo_unload_context; + break; + case 0x30: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; + engine->instmem.populate = nv04_instmem_populate; + engine->instmem.clear = nv04_instmem_clear; + engine->instmem.bind = nv04_instmem_bind; + engine->instmem.unbind = nv04_instmem_unbind; + engine->instmem.prepare_access = nv04_instmem_prepare_access; + engine->instmem.finish_access = nv04_instmem_finish_access; + engine->mc.init = nv04_mc_init; + engine->mc.takedown = nv04_mc_takedown; + engine->timer.init = nv04_timer_init; + engine->timer.read = nv04_timer_read; + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv10_fb_init; + engine->fb.takedown = nv10_fb_takedown; + engine->fb.set_region_tiling = nv10_fb_set_region_tiling; + engine->graph.grclass = nv30_graph_grclass; + engine->graph.init = nv30_graph_init; + engine->graph.takedown = nv20_graph_takedown; + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.channel = nv10_graph_channel; + engine->graph.create_context = nv20_graph_create_context; + engine->graph.destroy_context = nv20_graph_destroy_context; + engine->graph.load_context = nv20_graph_load_context; + engine->graph.unload_context = nv20_graph_unload_context; + engine->graph.set_region_tiling = nv20_graph_set_region_tiling; + engine->fifo.channels = 32; + engine->fifo.init = nv10_fifo_init; + engine->fifo.takedown = nouveau_stub_takedown; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_flush = nv04_fifo_cache_flush; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv10_fifo_create_context; + engine->fifo.destroy_context = nv10_fifo_destroy_context; + engine->fifo.load_context = nv10_fifo_load_context; + engine->fifo.unload_context = nv10_fifo_unload_context; + break; + case 0x40: + case 0x60: + engine->instmem.init = nv04_instmem_init; + engine->instmem.takedown = nv04_instmem_takedown; + engine->instmem.suspend = nv04_instmem_suspend; + engine->instmem.resume = nv04_instmem_resume; + engine->instmem.populate = nv04_instmem_populate; + engine->instmem.clear = nv04_instmem_clear; + engine->instmem.bind = nv04_instmem_bind; + engine->instmem.unbind = nv04_instmem_unbind; + engine->instmem.prepare_access = nv04_instmem_prepare_access; + engine->instmem.finish_access = nv04_instmem_finish_access; + engine->mc.init = nv40_mc_init; + engine->mc.takedown = nv40_mc_takedown; + engine->timer.init = nv04_timer_init; + engine->timer.read = nv04_timer_read; + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nv40_fb_init; + engine->fb.takedown = nv40_fb_takedown; + engine->fb.set_region_tiling = nv40_fb_set_region_tiling; + engine->graph.grclass = nv40_graph_grclass; + engine->graph.init = nv40_graph_init; + engine->graph.takedown = nv40_graph_takedown; + engine->graph.fifo_access = nv04_graph_fifo_access; + engine->graph.channel = nv40_graph_channel; + engine->graph.create_context = nv40_graph_create_context; + engine->graph.destroy_context = nv40_graph_destroy_context; + engine->graph.load_context = nv40_graph_load_context; + engine->graph.unload_context = nv40_graph_unload_context; + engine->graph.set_region_tiling = nv40_graph_set_region_tiling; + engine->fifo.channels = 32; + engine->fifo.init = nv40_fifo_init; + engine->fifo.takedown = nouveau_stub_takedown; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.cache_flush = nv04_fifo_cache_flush; + engine->fifo.cache_pull = nv04_fifo_cache_pull; + engine->fifo.channel_id = nv10_fifo_channel_id; + engine->fifo.create_context = nv40_fifo_create_context; + engine->fifo.destroy_context = nv40_fifo_destroy_context; + engine->fifo.load_context = nv40_fifo_load_context; + engine->fifo.unload_context = nv40_fifo_unload_context; + break; + case 0x50: + case 0x80: /* gotta love NVIDIA's consistency.. */ + case 0x90: + case 0xA0: + engine->instmem.init = nv50_instmem_init; + engine->instmem.takedown = nv50_instmem_takedown; + engine->instmem.suspend = nv50_instmem_suspend; + engine->instmem.resume = nv50_instmem_resume; + engine->instmem.populate = nv50_instmem_populate; + engine->instmem.clear = nv50_instmem_clear; + engine->instmem.bind = nv50_instmem_bind; + engine->instmem.unbind = nv50_instmem_unbind; + engine->instmem.prepare_access = nv50_instmem_prepare_access; + engine->instmem.finish_access = nv50_instmem_finish_access; + engine->mc.init = nv50_mc_init; + engine->mc.takedown = nv50_mc_takedown; + engine->timer.init = nv04_timer_init; + engine->timer.read = nv04_timer_read; + engine->timer.takedown = nv04_timer_takedown; + engine->fb.init = nouveau_stub_init; + engine->fb.takedown = nouveau_stub_takedown; + engine->graph.grclass = nv50_graph_grclass; + engine->graph.init = nv50_graph_init; + engine->graph.takedown = nv50_graph_takedown; + engine->graph.fifo_access = nv50_graph_fifo_access; + engine->graph.channel = nv50_graph_channel; + engine->graph.create_context = nv50_graph_create_context; + engine->graph.destroy_context = nv50_graph_destroy_context; + engine->graph.load_context = nv50_graph_load_context; + engine->graph.unload_context = nv50_graph_unload_context; + engine->fifo.channels = 128; + engine->fifo.init = nv50_fifo_init; + engine->fifo.takedown = nv50_fifo_takedown; + engine->fifo.disable = nv04_fifo_disable; + engine->fifo.enable = nv04_fifo_enable; + engine->fifo.reassign = nv04_fifo_reassign; + engine->fifo.channel_id = nv50_fifo_channel_id; + engine->fifo.create_context = nv50_fifo_create_context; + engine->fifo.destroy_context = nv50_fifo_destroy_context; + engine->fifo.load_context = nv50_fifo_load_context; + engine->fifo.unload_context = nv50_fifo_unload_context; + break; + default: + NV_ERROR(dev, "NV%02x unsupported\n", dev_priv->chipset); + return 1; + } + + return 0; +} + +static unsigned int +nouveau_vga_set_decode(void *priv, bool state) +{ + struct drm_device *dev = priv; + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (dev_priv->chipset >= 0x40) + nv_wr32(dev, 0x88054, state); + else + nv_wr32(dev, 0x1854, state); + + if (state) + return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM | + VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; + else + return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM; +} + +static int +nouveau_card_init_channel(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_gpuobj *gpuobj; + int ret; + + ret = nouveau_channel_alloc(dev, &dev_priv->channel, + (struct drm_file *)-2, + NvDmaFB, NvDmaTT); + if (ret) + return ret; + + gpuobj = NULL; + ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY, + 0, nouveau_mem_fb_amount(dev), + NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM, + &gpuobj); + if (ret) + goto out_err; + + ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaVRAM, + gpuobj, NULL); + if (ret) + goto out_err; + + gpuobj = NULL; + ret = nouveau_gpuobj_gart_dma_new(dev_priv->channel, 0, + dev_priv->gart_info.aper_size, + NV_DMA_ACCESS_RW, &gpuobj, NULL); + if (ret) + goto out_err; + + ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaGART, + gpuobj, NULL); + if (ret) + goto out_err; + + return 0; +out_err: + nouveau_gpuobj_del(dev, &gpuobj); + nouveau_channel_free(dev_priv->channel); + dev_priv->channel = NULL; + return ret; +} + +int +nouveau_card_init(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine; + int ret; + + NV_DEBUG(dev, "prev state = %d\n", dev_priv->init_state); + + if (dev_priv->init_state == NOUVEAU_CARD_INIT_DONE) + return 0; + + vga_client_register(dev->pdev, dev, NULL, nouveau_vga_set_decode); + + /* Initialise internal driver API hooks */ + ret = nouveau_init_engine_ptrs(dev); + if (ret) + goto out; + engine = &dev_priv->engine; + dev_priv->init_state = NOUVEAU_CARD_INIT_FAILED; + + /* Parse BIOS tables / Run init tables if card not POSTed */ + if (drm_core_check_feature(dev, DRIVER_MODESET)) { + ret = nouveau_bios_init(dev); + if (ret) + goto out; + } + + ret = nouveau_gpuobj_early_init(dev); + if (ret) + goto out_bios; + + /* Initialise instance memory, must happen before mem_init so we + * know exactly how much VRAM we're able to use for "normal" + * purposes. + */ + ret = engine->instmem.init(dev); + if (ret) + goto out_gpuobj_early; + + /* Setup the memory manager */ + ret = nouveau_mem_init(dev); + if (ret) + goto out_instmem; + + ret = nouveau_gpuobj_init(dev); + if (ret) + goto out_mem; + + /* PMC */ + ret = engine->mc.init(dev); + if (ret) + goto out_gpuobj; + + /* PTIMER */ + ret = engine->timer.init(dev); + if (ret) + goto out_mc; + + /* PFB */ + ret = engine->fb.init(dev); + if (ret) + goto out_timer; + + if (nouveau_noaccel) + engine->graph.accel_blocked = true; + else { + /* PGRAPH */ + ret = engine->graph.init(dev); + if (ret) + goto out_fb; + + /* PFIFO */ + ret = engine->fifo.init(dev); + if (ret) + goto out_graph; + } + + /* this call irq_preinstall, register irq handler and + * call irq_postinstall + */ + ret = drm_irq_install(dev); + if (ret) + goto out_fifo; + + ret = drm_vblank_init(dev, 0); + if (ret) + goto out_irq; + + /* what about PVIDEO/PCRTC/PRAMDAC etc? */ + + if (!engine->graph.accel_blocked) { + ret = nouveau_card_init_channel(dev); + if (ret) + goto out_irq; + } + + if (drm_core_check_feature(dev, DRIVER_MODESET)) { + if (dev_priv->card_type >= NV_50) + ret = nv50_display_create(dev); + else + ret = nv04_display_create(dev); + if (ret) + goto out_irq; + } + + ret = nouveau_backlight_init(dev); + if (ret) + NV_ERROR(dev, "Error %d registering backlight\n", ret); + + dev_priv->init_state = NOUVEAU_CARD_INIT_DONE; + + if (drm_core_check_feature(dev, DRIVER_MODESET)) + drm_helper_initial_config(dev); + + return 0; + +out_irq: + drm_irq_uninstall(dev); +out_fifo: + if (!nouveau_noaccel) + engine->fifo.takedown(dev); +out_graph: + if (!nouveau_noaccel) + engine->graph.takedown(dev); +out_fb: + engine->fb.takedown(dev); +out_timer: + engine->timer.takedown(dev); +out_mc: + engine->mc.takedown(dev); +out_gpuobj: + nouveau_gpuobj_takedown(dev); +out_mem: + nouveau_mem_close(dev); +out_instmem: + engine->instmem.takedown(dev); +out_gpuobj_early: + nouveau_gpuobj_late_takedown(dev); +out_bios: + nouveau_bios_takedown(dev); +out: + vga_client_register(dev->pdev, NULL, NULL, NULL); + return ret; +} + +static void nouveau_card_takedown(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_engine *engine = &dev_priv->engine; + + NV_DEBUG(dev, "prev state = %d\n", dev_priv->init_state); + + if (dev_priv->init_state != NOUVEAU_CARD_INIT_DOWN) { + nouveau_backlight_exit(dev); + + if (dev_priv->channel) { + nouveau_channel_free(dev_priv->channel); + dev_priv->channel = NULL; + } + + if (!nouveau_noaccel) { + engine->fifo.takedown(dev); + engine->graph.takedown(dev); + } + engine->fb.takedown(dev); + engine->timer.takedown(dev); + engine->mc.takedown(dev); + + mutex_lock(&dev->struct_mutex); + ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM); + ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_TT); + mutex_unlock(&dev->struct_mutex); + nouveau_sgdma_takedown(dev); + + nouveau_gpuobj_takedown(dev); + nouveau_mem_close(dev); + engine->instmem.takedown(dev); + + if (drm_core_check_feature(dev, DRIVER_MODESET)) + drm_irq_uninstall(dev); + + nouveau_gpuobj_late_takedown(dev); + nouveau_bios_takedown(dev); + + vga_client_register(dev->pdev, NULL, NULL, NULL); + + dev_priv->init_state = NOUVEAU_CARD_INIT_DOWN; + } +} + +/* here a client dies, release the stuff that was allocated for its + * file_priv */ +void nouveau_preclose(struct drm_device *dev, struct drm_file *file_priv) +{ + nouveau_channel_cleanup(dev, file_priv); +} + +/* first module load, setup the mmio/fb mapping */ +/* KMS: we need mmio at load time, not when the first drm client opens. */ +int nouveau_firstopen(struct drm_device *dev) +{ + return 0; +} + +/* if we have an OF card, copy vbios to RAMIN */ +static void nouveau_OF_copy_vbios_to_ramin(struct drm_device *dev) +{ +#if defined(__powerpc__) + int size, i; + const uint32_t *bios; + struct device_node *dn = pci_device_to_OF_node(dev->pdev); + if (!dn) { + NV_INFO(dev, "Unable to get the OF node\n"); + return; + } + + bios = of_get_property(dn, "NVDA,BMP", &size); + if (bios) { + for (i = 0; i < size; i += 4) + nv_wi32(dev, i, bios[i/4]); + NV_INFO(dev, "OF bios successfully copied (%d bytes)\n", size); + } else { + NV_INFO(dev, "Unable to get the OF bios\n"); + } +#endif +} + +static void nouveau_apply_noaccel_quirks (struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + if (nouveau_noaccel == -1) { + /* If not specified, noaccel should default off */ + nouveau_noaccel = 0; + + /* MacBook Pro laptops with 9600GT cards hang with acceleration */ + /* See https://bugs.launchpad.net/bugs/546393 */ + if ((dev->pdev->device == 0x0647) && + (dev->pdev->subsystem_vendor == 0x106b)) { + nouveau_noaccel = 1; + NV_INFO(dev, "Detected MacBook Pro 9600GT chip. " + "Disabling acceleration\n"); + } + /* At least two of the three nv20 cards hang with acceleration */ + /* See https://bugs.launchpad.net/bugs/544088 */ + if (dev_priv->chipset == 0x20) { + nouveau_noaccel = 1; + NV_INFO(dev, "Detected NV20 (GeForce 3) chip. " + "Disabling acceleration\n"); + } + /* GeForce 6100 cards also hang with acceleration */ + /* See https://bugs.launchpad.net/bugs/542950 */ + if (dev->pdev->device == 0x0242) { + nouveau_noaccel = 1; + NV_INFO(dev, "Detected GeForce 6100 chip. " + "Disabling acceleration\n"); + } + } +} + +int nouveau_load(struct drm_device *dev, unsigned long flags) +{ + struct drm_nouveau_private *dev_priv; + uint32_t reg0; + resource_size_t mmio_start_offs; + + dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); + if (!dev_priv) + return -ENOMEM; + dev->dev_private = dev_priv; + dev_priv->dev = dev; + + dev_priv->flags = flags & NOUVEAU_FLAGS; + dev_priv->init_state = NOUVEAU_CARD_INIT_DOWN; + + NV_DEBUG(dev, "vendor: 0x%X device: 0x%X class: 0x%X\n", + dev->pci_vendor, dev->pci_device, dev->pdev->class); + + dev_priv->acpi_dsm = nouveau_dsm_probe(dev); + + if (dev_priv->acpi_dsm) + nouveau_hybrid_setup(dev); + + dev_priv->wq = create_workqueue("nouveau"); + if (!dev_priv->wq) + return -EINVAL; + + /* resource 0 is mmio regs */ + /* resource 1 is linear FB */ + /* resource 2 is RAMIN (mmio regs + 0x1000000) */ + /* resource 6 is bios */ + + /* map the mmio regs */ + mmio_start_offs = pci_resource_start(dev->pdev, 0); + dev_priv->mmio = ioremap(mmio_start_offs, 0x00800000); + if (!dev_priv->mmio) { + NV_ERROR(dev, "Unable to initialize the mmio mapping. " + "Please report your setup to " DRIVER_EMAIL "\n"); + return -EINVAL; + } + NV_DEBUG(dev, "regs mapped ok at 0x%llx\n", + (unsigned long long)mmio_start_offs); + +#ifdef __BIG_ENDIAN + /* Put the card in BE mode if it's not */ + if (nv_rd32(dev, NV03_PMC_BOOT_1)) + nv_wr32(dev, NV03_PMC_BOOT_1, 0x00000001); + + DRM_MEMORYBARRIER(); +#endif + + /* Time to determine the card architecture */ + reg0 = nv_rd32(dev, NV03_PMC_BOOT_0); + + /* We're dealing with >=NV10 */ + if ((reg0 & 0x0f000000) > 0) { + /* Bit 27-20 contain the architecture in hex */ + dev_priv->chipset = (reg0 & 0xff00000) >> 20; + /* NV04 or NV05 */ + } else if ((reg0 & 0xff00fff0) == 0x20004000) { + if (reg0 & 0x00f00000) + dev_priv->chipset = 0x05; + else + dev_priv->chipset = 0x04; + } else + dev_priv->chipset = 0xff; + + switch (dev_priv->chipset & 0xf0) { + case 0x00: + case 0x10: + case 0x20: + case 0x30: + dev_priv->card_type = dev_priv->chipset & 0xf0; + break; + case 0x40: + case 0x60: + dev_priv->card_type = NV_40; + break; + case 0x50: + case 0x80: + case 0x90: + case 0xa0: + dev_priv->card_type = NV_50; + break; + default: + NV_INFO(dev, "Unsupported chipset 0x%08x\n", reg0); + return -EINVAL; + } + + NV_INFO(dev, "Detected an NV%2x generation card (0x%08x)\n", + dev_priv->card_type, reg0); + + /* map larger RAMIN aperture on NV40 cards */ + dev_priv->ramin = NULL; + if (dev_priv->card_type >= NV_40) { + int ramin_bar = 2; + if (pci_resource_len(dev->pdev, ramin_bar) == 0) + ramin_bar = 3; + + dev_priv->ramin_size = pci_resource_len(dev->pdev, ramin_bar); + dev_priv->ramin = ioremap( + pci_resource_start(dev->pdev, ramin_bar), + dev_priv->ramin_size); + if (!dev_priv->ramin) { + NV_ERROR(dev, "Failed to init RAMIN mapping, " + "limited instance memory available\n"); + } + } + + /* On older cards (or if the above failed), create a map covering + * the BAR0 PRAMIN aperture */ + if (!dev_priv->ramin) { + dev_priv->ramin_size = 1 * 1024 * 1024; + dev_priv->ramin = ioremap(mmio_start_offs + NV_RAMIN, + dev_priv->ramin_size); + if (!dev_priv->ramin) { + NV_ERROR(dev, "Failed to map BAR0 PRAMIN.\n"); + return -ENOMEM; + } + } + + nouveau_OF_copy_vbios_to_ramin(dev); + + /* Special flags */ + if (dev->pci_device == 0x01a0) + dev_priv->flags |= NV_NFORCE; + else if (dev->pci_device == 0x01f0) + dev_priv->flags |= NV_NFORCE2; + + /* Apply noaccel quirks */ + nouveau_apply_noaccel_quirks(dev); + + /* For kernel modesetting, init card now and bring up fbcon */ + if (drm_core_check_feature(dev, DRIVER_MODESET)) { + int ret = nouveau_card_init(dev); + if (ret) + return ret; + } + + return 0; +} + +static void nouveau_close(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + /* In the case of an error dev_priv may not be allocated yet */ + if (dev_priv) + nouveau_card_takedown(dev); +} + +/* KMS: we need mmio at load time, not when the first drm client opens. */ +void nouveau_lastclose(struct drm_device *dev) +{ + if (drm_core_check_feature(dev, DRIVER_MODESET)) + return; + + nouveau_close(dev); +} + +int nouveau_unload(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + + if (drm_core_check_feature(dev, DRIVER_MODESET)) { + if (dev_priv->card_type >= NV_50) + nv50_display_destroy(dev); + else + nv04_display_destroy(dev); + nouveau_close(dev); + } + + iounmap(dev_priv->mmio); + iounmap(dev_priv->ramin); + + kfree(dev_priv); + dev->dev_private = NULL; + return 0; +} + +int +nouveau_ioctl_card_init(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + return nouveau_card_init(dev); +} + +int nouveau_ioctl_getparam(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct drm_nouveau_getparam *getparam = data; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + switch (getparam->param) { + case NOUVEAU_GETPARAM_CHIPSET_ID: + getparam->value = dev_priv->chipset; + break; + case NOUVEAU_GETPARAM_PCI_VENDOR: + getparam->value = dev->pci_vendor; + break; + case NOUVEAU_GETPARAM_PCI_DEVICE: + getparam->value = dev->pci_device; + break; + case NOUVEAU_GETPARAM_BUS_TYPE: + if (drm_device_is_agp(dev)) + getparam->value = NV_AGP; + else if (drm_device_is_pcie(dev)) + getparam->value = NV_PCIE; + else + getparam->value = NV_PCI; + break; + case NOUVEAU_GETPARAM_FB_PHYSICAL: + getparam->value = dev_priv->fb_phys; + break; + case NOUVEAU_GETPARAM_AGP_PHYSICAL: + getparam->value = dev_priv->gart_info.aper_base; + break; + case NOUVEAU_GETPARAM_PCI_PHYSICAL: + if (dev->sg) { + getparam->value = (unsigned long)dev->sg->virtual; + } else { + NV_ERROR(dev, "Requested PCIGART address, " + "while no PCIGART was created\n"); + return -EINVAL; + } + break; + case NOUVEAU_GETPARAM_FB_SIZE: + getparam->value = dev_priv->fb_available_size; + break; + case NOUVEAU_GETPARAM_AGP_SIZE: + getparam->value = dev_priv->gart_info.aper_size; + break; + case NOUVEAU_GETPARAM_VM_VRAM_BASE: + getparam->value = dev_priv->vm_vram_base; + break; + case NOUVEAU_GETPARAM_GRAPH_UNITS: + /* NV40 and NV50 versions are quite different, but register + * address is the same. User is supposed to know the card + * family anyway... */ + if (dev_priv->chipset >= 0x40) { + getparam->value = nv_rd32(dev, NV40_PMC_GRAPH_UNITS); + break; + } + /* FALLTHRU */ + default: + NV_ERROR(dev, "unknown parameter %lld\n", getparam->param); + return -EINVAL; + } + + return 0; +} + +int +nouveau_ioctl_setparam(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_nouveau_setparam *setparam = data; + + NOUVEAU_CHECK_INITIALISED_WITH_RETURN; + + switch (setparam->param) { + default: + NV_ERROR(dev, "unknown parameter %lld\n", setparam->param); + return -EINVAL; + } + + return 0; +} + +/* Wait until (value(reg) & mask) == val, up until timeout has hit */ +bool nouveau_wait_until(struct drm_device *dev, uint64_t timeout, + uint32_t reg, uint32_t mask, uint32_t val) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; + uint64_t start = ptimer->read(dev); + + do { + if ((nv_rd32(dev, reg) & mask) == val) + return true; + } while (ptimer->read(dev) - start < timeout); + + return false; +} + +/* Waits for PGRAPH to go completely idle */ +bool nouveau_wait_for_idle(struct drm_device *dev) +{ + if (!nv_wait(NV04_PGRAPH_STATUS, 0xffffffff, 0x00000000)) { + NV_ERROR(dev, "PGRAPH idle timed out with status 0x%08x\n", + nv_rd32(dev, NV04_PGRAPH_STATUS)); + return false; + } + + return true; +} + --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nvreg.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nvreg.h @@ -0,0 +1,535 @@ +/* $XConsortium: nvreg.h /main/2 1996/10/28 05:13:41 kaleb $ */ +/* + * Copyright 1996-1997 David J. McKay + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * DAVID J. MCKAY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nvreg.h,v 1.6 2002/01/25 21:56:06 tsi Exp $ */ + +#ifndef __NVREG_H_ +#define __NVREG_H_ + +#define NV_PMC_OFFSET 0x00000000 +#define NV_PMC_SIZE 0x00001000 + +#define NV_PBUS_OFFSET 0x00001000 +#define NV_PBUS_SIZE 0x00001000 + +#define NV_PFIFO_OFFSET 0x00002000 +#define NV_PFIFO_SIZE 0x00002000 + +#define NV_HDIAG_OFFSET 0x00005000 +#define NV_HDIAG_SIZE 0x00001000 + +#define NV_PRAM_OFFSET 0x00006000 +#define NV_PRAM_SIZE 0x00001000 + +#define NV_PVIDEO_OFFSET 0x00008000 +#define NV_PVIDEO_SIZE 0x00001000 + +#define NV_PTIMER_OFFSET 0x00009000 +#define NV_PTIMER_SIZE 0x00001000 + +#define NV_PPM_OFFSET 0x0000A000 +#define NV_PPM_SIZE 0x00001000 + +#define NV_PTV_OFFSET 0x0000D000 +#define NV_PTV_SIZE 0x00001000 + +#define NV_PRMVGA_OFFSET 0x000A0000 +#define NV_PRMVGA_SIZE 0x00020000 + +#define NV_PRMVIO0_OFFSET 0x000C0000 +#define NV_PRMVIO_SIZE 0x00002000 +#define NV_PRMVIO1_OFFSET 0x000C2000 + +#define NV_PFB_OFFSET 0x00100000 +#define NV_PFB_SIZE 0x00001000 + +#define NV_PEXTDEV_OFFSET 0x00101000 +#define NV_PEXTDEV_SIZE 0x00001000 + +#define NV_PME_OFFSET 0x00200000 +#define NV_PME_SIZE 0x00001000 + +#define NV_PROM_OFFSET 0x00300000 +#define NV_PROM_SIZE 0x00010000 + +#define NV_PGRAPH_OFFSET 0x00400000 +#define NV_PGRAPH_SIZE 0x00010000 + +#define NV_PCRTC0_OFFSET 0x00600000 +#define NV_PCRTC0_SIZE 0x00002000 /* empirical */ + +#define NV_PRMCIO0_OFFSET 0x00601000 +#define NV_PRMCIO_SIZE 0x00002000 +#define NV_PRMCIO1_OFFSET 0x00603000 + +#define NV50_DISPLAY_OFFSET 0x00610000 +#define NV50_DISPLAY_SIZE 0x0000FFFF + +#define NV_PRAMDAC0_OFFSET 0x00680000 +#define NV_PRAMDAC0_SIZE 0x00002000 + +#define NV_PRMDIO0_OFFSET 0x00681000 +#define NV_PRMDIO_SIZE 0x00002000 +#define NV_PRMDIO1_OFFSET 0x00683000 + +#define NV_PRAMIN_OFFSET 0x00700000 +#define NV_PRAMIN_SIZE 0x00100000 + +#define NV_FIFO_OFFSET 0x00800000 +#define NV_FIFO_SIZE 0x00800000 + +#define NV_PMC_BOOT_0 0x00000000 +#define NV_PMC_ENABLE 0x00000200 + +#define NV_VIO_VSE2 0x000003c3 +#define NV_VIO_SRX 0x000003c4 + +#define NV_CIO_CRX__COLOR 0x000003d4 +#define NV_CIO_CR__COLOR 0x000003d5 + +#define NV_PBUS_DEBUG_1 0x00001084 +#define NV_PBUS_DEBUG_4 0x00001098 +#define NV_PBUS_DEBUG_DUALHEAD_CTL 0x000010f0 +#define NV_PBUS_POWERCTRL_1 0x00001584 +#define NV_PBUS_POWERCTRL_2 0x00001588 +#define NV_PBUS_POWERCTRL_4 0x00001590 +#define NV_PBUS_PCI_NV_19 0x0000184C +#define NV_PBUS_PCI_NV_20 0x00001850 +# define NV_PBUS_PCI_NV_20_ROM_SHADOW_DISABLED (0 << 0) +# define NV_PBUS_PCI_NV_20_ROM_SHADOW_ENABLED (1 << 0) + +#define NV_PFIFO_RAMHT 0x00002210 + +#define NV_PTV_TV_INDEX 0x0000d220 +#define NV_PTV_TV_DATA 0x0000d224 +#define NV_PTV_HFILTER 0x0000d310 +#define NV_PTV_HFILTER2 0x0000d390 +#define NV_PTV_VFILTER 0x0000d510 + +#define NV_PRMVIO_MISC__WRITE 0x000c03c2 +#define NV_PRMVIO_SRX 0x000c03c4 +#define NV_PRMVIO_SR 0x000c03c5 +# define NV_VIO_SR_RESET_INDEX 0x00 +# define NV_VIO_SR_CLOCK_INDEX 0x01 +# define NV_VIO_SR_PLANE_MASK_INDEX 0x02 +# define NV_VIO_SR_CHAR_MAP_INDEX 0x03 +# define NV_VIO_SR_MEM_MODE_INDEX 0x04 +#define NV_PRMVIO_MISC__READ 0x000c03cc +#define NV_PRMVIO_GRX 0x000c03ce +#define NV_PRMVIO_GX 0x000c03cf +# define NV_VIO_GX_SR_INDEX 0x00 +# define NV_VIO_GX_SREN_INDEX 0x01 +# define NV_VIO_GX_CCOMP_INDEX 0x02 +# define NV_VIO_GX_ROP_INDEX 0x03 +# define NV_VIO_GX_READ_MAP_INDEX 0x04 +# define NV_VIO_GX_MODE_INDEX 0x05 +# define NV_VIO_GX_MISC_INDEX 0x06 +# define NV_VIO_GX_DONT_CARE_INDEX 0x07 +# define NV_VIO_GX_BIT_MASK_INDEX 0x08 + +#define NV_PFB_BOOT_0 0x00100000 +#define NV_PFB_CFG0 0x00100200 +#define NV_PFB_CFG1 0x00100204 +#define NV_PFB_CSTATUS 0x0010020C +#define NV_PFB_REFCTRL 0x00100210 +# define NV_PFB_REFCTRL_VALID_1 (1 << 31) +#define NV_PFB_PAD 0x0010021C +# define NV_PFB_PAD_CKE_NORMAL (1 << 0) +#define NV_PFB_TILE_NV10 0x00100240 +#define NV_PFB_TILE_SIZE_NV10 0x00100244 +#define NV_PFB_REF 0x001002D0 +# define NV_PFB_REF_CMD_REFRESH (1 << 0) +#define NV_PFB_PRE 0x001002D4 +# define NV_PFB_PRE_CMD_PRECHARGE (1 << 0) +#define NV_PFB_CLOSE_PAGE2 0x0010033C +#define NV_PFB_TILE_NV40 0x00100600 +#define NV_PFB_TILE_SIZE_NV40 0x00100604 + +#define NV_PEXTDEV_BOOT_0 0x00101000 +# define NV_PEXTDEV_BOOT_0_STRAP_FP_IFACE_12BIT (8 << 12) +#define NV_PEXTDEV_BOOT_3 0x0010100c + +#define NV_PCRTC_INTR_0 0x00600100 +# define NV_PCRTC_INTR_0_VBLANK (1 << 0) +#define NV_PCRTC_INTR_EN_0 0x00600140 +#define NV_PCRTC_START 0x00600800 +#define NV_PCRTC_CONFIG 0x00600804 +# define NV_PCRTC_CONFIG_START_ADDRESS_NON_VGA (1 << 0) +# define NV_PCRTC_CONFIG_START_ADDRESS_HSYNC (2 << 0) +#define NV_PCRTC_CURSOR_CONFIG 0x00600810 +# define NV_PCRTC_CURSOR_CONFIG_ENABLE_ENABLE (1 << 0) +# define NV_PCRTC_CURSOR_CONFIG_DOUBLE_SCAN_ENABLE (1 << 4) +# define NV_PCRTC_CURSOR_CONFIG_ADDRESS_SPACE_PNVM (1 << 8) +# define NV_PCRTC_CURSOR_CONFIG_CUR_BPP_32 (1 << 12) +# define NV_PCRTC_CURSOR_CONFIG_CUR_PIXELS_64 (1 << 16) +# define NV_PCRTC_CURSOR_CONFIG_CUR_LINES_32 (2 << 24) +# define NV_PCRTC_CURSOR_CONFIG_CUR_LINES_64 (4 << 24) +# define NV_PCRTC_CURSOR_CONFIG_CUR_BLEND_ALPHA (1 << 28) + +/* note: PCRTC_GPIO is not available on nv10, and in fact aliases 0x600810 */ +#define NV_PCRTC_GPIO 0x00600818 +#define NV_PCRTC_GPIO_EXT 0x0060081c +#define NV_PCRTC_830 0x00600830 +#define NV_PCRTC_834 0x00600834 +#define NV_PCRTC_850 0x00600850 +#define NV_PCRTC_ENGINE_CTRL 0x00600860 +# define NV_CRTC_FSEL_I2C (1 << 4) +# define NV_CRTC_FSEL_OVERLAY (1 << 12) + +#define NV_PRMCIO_ARX 0x006013c0 +#define NV_PRMCIO_AR__WRITE 0x006013c0 +#define NV_PRMCIO_AR__READ 0x006013c1 +# define NV_CIO_AR_MODE_INDEX 0x10 +# define NV_CIO_AR_OSCAN_INDEX 0x11 +# define NV_CIO_AR_PLANE_INDEX 0x12 +# define NV_CIO_AR_HPP_INDEX 0x13 +# define NV_CIO_AR_CSEL_INDEX 0x14 +#define NV_PRMCIO_INP0 0x006013c2 +#define NV_PRMCIO_CRX__COLOR 0x006013d4 +#define NV_PRMCIO_CR__COLOR 0x006013d5 + /* Standard VGA CRTC registers */ +# define NV_CIO_CR_HDT_INDEX 0x00 /* horizontal display total */ +# define NV_CIO_CR_HDE_INDEX 0x01 /* horizontal display end */ +# define NV_CIO_CR_HBS_INDEX 0x02 /* horizontal blanking start */ +# define NV_CIO_CR_HBE_INDEX 0x03 /* horizontal blanking end */ +# define NV_CIO_CR_HBE_4_0 4:0 +# define NV_CIO_CR_HRS_INDEX 0x04 /* horizontal retrace start */ +# define NV_CIO_CR_HRE_INDEX 0x05 /* horizontal retrace end */ +# define NV_CIO_CR_HRE_4_0 4:0 +# define NV_CIO_CR_HRE_HBE_5 7:7 +# define NV_CIO_CR_VDT_INDEX 0x06 /* vertical display total */ +# define NV_CIO_CR_OVL_INDEX 0x07 /* overflow bits */ +# define NV_CIO_CR_OVL_VDT_8 0:0 +# define NV_CIO_CR_OVL_VDE_8 1:1 +# define NV_CIO_CR_OVL_VRS_8 2:2 +# define NV_CIO_CR_OVL_VBS_8 3:3 +# define NV_CIO_CR_OVL_VDT_9 5:5 +# define NV_CIO_CR_OVL_VDE_9 6:6 +# define NV_CIO_CR_OVL_VRS_9 7:7 +# define NV_CIO_CR_RSAL_INDEX 0x08 /* normally "preset row scan" */ +# define NV_CIO_CR_CELL_HT_INDEX 0x09 /* cell height?! normally "max scan line" */ +# define NV_CIO_CR_CELL_HT_VBS_9 5:5 +# define NV_CIO_CR_CELL_HT_SCANDBL 7:7 +# define NV_CIO_CR_CURS_ST_INDEX 0x0a /* cursor start */ +# define NV_CIO_CR_CURS_END_INDEX 0x0b /* cursor end */ +# define NV_CIO_CR_SA_HI_INDEX 0x0c /* screen start address high */ +# define NV_CIO_CR_SA_LO_INDEX 0x0d /* screen start address low */ +# define NV_CIO_CR_TCOFF_HI_INDEX 0x0e /* cursor offset high */ +# define NV_CIO_CR_TCOFF_LO_INDEX 0x0f /* cursor offset low */ +# define NV_CIO_CR_VRS_INDEX 0x10 /* vertical retrace start */ +# define NV_CIO_CR_VRE_INDEX 0x11 /* vertical retrace end */ +# define NV_CIO_CR_VRE_3_0 3:0 +# define NV_CIO_CR_VDE_INDEX 0x12 /* vertical display end */ +# define NV_CIO_CR_OFFSET_INDEX 0x13 /* sets screen pitch */ +# define NV_CIO_CR_ULINE_INDEX 0x14 /* underline location */ +# define NV_CIO_CR_VBS_INDEX 0x15 /* vertical blank start */ +# define NV_CIO_CR_VBE_INDEX 0x16 /* vertical blank end */ +# define NV_CIO_CR_MODE_INDEX 0x17 /* crtc mode control */ +# define NV_CIO_CR_LCOMP_INDEX 0x18 /* line compare */ + /* Extended VGA CRTC registers */ +# define NV_CIO_CRE_RPC0_INDEX 0x19 /* repaint control 0 */ +# define NV_CIO_CRE_RPC0_OFFSET_10_8 7:5 +# define NV_CIO_CRE_RPC1_INDEX 0x1a /* repaint control 1 */ +# define NV_CIO_CRE_RPC1_LARGE 2:2 +# define NV_CIO_CRE_FF_INDEX 0x1b /* fifo control */ +# define NV_CIO_CRE_ENH_INDEX 0x1c /* enhanced? */ +# define NV_CIO_SR_LOCK_INDEX 0x1f /* crtc lock */ +# define NV_CIO_SR_UNLOCK_RW_VALUE 0x57 +# define NV_CIO_SR_LOCK_VALUE 0x99 +# define NV_CIO_CRE_FFLWM__INDEX 0x20 /* fifo low water mark */ +# define NV_CIO_CRE_21 0x21 /* vga shadow crtc lock */ +# define NV_CIO_CRE_LSR_INDEX 0x25 /* ? */ +# define NV_CIO_CRE_LSR_VDT_10 0:0 +# define NV_CIO_CRE_LSR_VDE_10 1:1 +# define NV_CIO_CRE_LSR_VRS_10 2:2 +# define NV_CIO_CRE_LSR_VBS_10 3:3 +# define NV_CIO_CRE_LSR_HBE_6 4:4 +# define NV_CIO_CR_ARX_INDEX 0x26 /* attribute index -- ro copy of 0x60.3c0 */ +# define NV_CIO_CRE_CHIP_ID_INDEX 0x27 /* chip revision */ +# define NV_CIO_CRE_PIXEL_INDEX 0x28 +# define NV_CIO_CRE_PIXEL_FORMAT 1:0 +# define NV_CIO_CRE_HEB__INDEX 0x2d /* horizontal extra bits? */ +# define NV_CIO_CRE_HEB_HDT_8 0:0 +# define NV_CIO_CRE_HEB_HDE_8 1:1 +# define NV_CIO_CRE_HEB_HBS_8 2:2 +# define NV_CIO_CRE_HEB_HRS_8 3:3 +# define NV_CIO_CRE_HEB_ILC_8 4:4 +# define NV_CIO_CRE_2E 0x2e /* some scratch or dummy reg to force writes to sink in */ +# define NV_CIO_CRE_HCUR_ADDR2_INDEX 0x2f /* cursor */ +# define NV_CIO_CRE_HCUR_ADDR0_INDEX 0x30 /* pixmap */ +# define NV_CIO_CRE_HCUR_ADDR0_ADR 6:0 +# define NV_CIO_CRE_HCUR_ASI 7:7 +# define NV_CIO_CRE_HCUR_ADDR1_INDEX 0x31 /* address */ +# define NV_CIO_CRE_HCUR_ADDR1_ENABLE 0:0 +# define NV_CIO_CRE_HCUR_ADDR1_CUR_DBL 1:1 +# define NV_CIO_CRE_HCUR_ADDR1_ADR 7:2 +# define NV_CIO_CRE_LCD__INDEX 0x33 +# define NV_CIO_CRE_LCD_LCD_SELECT 0:0 +# define NV_CIO_CRE_DDC0_STATUS__INDEX 0x36 +# define NV_CIO_CRE_DDC0_WR__INDEX 0x37 +# define NV_CIO_CRE_ILACE__INDEX 0x39 /* interlace */ +# define NV_CIO_CRE_SCRATCH3__INDEX 0x3b +# define NV_CIO_CRE_SCRATCH4__INDEX 0x3c +# define NV_CIO_CRE_DDC_STATUS__INDEX 0x3e +# define NV_CIO_CRE_DDC_WR__INDEX 0x3f +# define NV_CIO_CRE_EBR_INDEX 0x41 /* extra bits ? (vertical) */ +# define NV_CIO_CRE_EBR_VDT_11 0:0 +# define NV_CIO_CRE_EBR_VDE_11 2:2 +# define NV_CIO_CRE_EBR_VRS_11 4:4 +# define NV_CIO_CRE_EBR_VBS_11 6:6 +# define NV_CIO_CRE_43 0x43 +# define NV_CIO_CRE_44 0x44 /* head control */ +# define NV_CIO_CRE_CSB 0x45 /* colour saturation boost */ +# define NV_CIO_CRE_RCR 0x46 +# define NV_CIO_CRE_RCR_ENDIAN_BIG 7:7 +# define NV_CIO_CRE_47 0x47 /* extended fifo lwm, used on nv30+ */ +# define NV_CIO_CRE_49 0x49 +# define NV_CIO_CRE_4B 0x4b /* given patterns in 0x[2-3][a-c] regs, probably scratch 6 */ +# define NV_CIO_CRE_TVOUT_LATENCY 0x52 +# define NV_CIO_CRE_53 0x53 /* `fp_htiming' according to Haiku */ +# define NV_CIO_CRE_54 0x54 /* `fp_vtiming' according to Haiku */ +# define NV_CIO_CRE_57 0x57 /* index reg for cr58 */ +# define NV_CIO_CRE_58 0x58 /* data reg for cr57 */ +# define NV_CIO_CRE_59 0x59 /* related to on/off-chip-ness of digital outputs */ +# define NV_CIO_CRE_5B 0x5B /* newer colour saturation reg */ +# define NV_CIO_CRE_85 0x85 +# define NV_CIO_CRE_86 0x86 +#define NV_PRMCIO_INP0__COLOR 0x006013da + +#define NV_PRAMDAC_CU_START_POS 0x00680300 +# define NV_PRAMDAC_CU_START_POS_X 15:0 +# define NV_PRAMDAC_CU_START_POS_Y 31:16 +#define NV_RAMDAC_NV10_CURSYNC 0x00680404 + +#define NV_PRAMDAC_NVPLL_COEFF 0x00680500 +#define NV_PRAMDAC_MPLL_COEFF 0x00680504 +#define NV_PRAMDAC_VPLL_COEFF 0x00680508 +# define NV30_RAMDAC_ENABLE_VCO2 (8 << 4) + +#define NV_PRAMDAC_PLL_COEFF_SELECT 0x0068050c +# define NV_PRAMDAC_PLL_COEFF_SELECT_USE_VPLL2_TRUE (4 << 0) +# define NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_MPLL (1 << 8) +# define NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_VPLL (2 << 8) +# define NV_PRAMDAC_PLL_COEFF_SELECT_SOURCE_PROG_NVPLL (4 << 8) +# define NV_PRAMDAC_PLL_COEFF_SELECT_PLL_SOURCE_VPLL2 (8 << 8) +# define NV_PRAMDAC_PLL_COEFF_SELECT_TV_VSCLK1 (1 << 16) +# define NV_PRAMDAC_PLL_COEFF_SELECT_TV_PCLK1 (2 << 16) +# define NV_PRAMDAC_PLL_COEFF_SELECT_TV_VSCLK2 (4 << 16) +# define NV_PRAMDAC_PLL_COEFF_SELECT_TV_PCLK2 (8 << 16) +# define NV_PRAMDAC_PLL_COEFF_SELECT_TV_CLK_SOURCE_VIP (1 << 20) +# define NV_PRAMDAC_PLL_COEFF_SELECT_VCLK_RATIO_DB2 (1 << 28) +# define NV_PRAMDAC_PLL_COEFF_SELECT_VCLK2_RATIO_DB2 (2 << 28) + +#define NV_PRAMDAC_PLL_SETUP_CONTROL 0x00680510 +#define NV_RAMDAC_VPLL2 0x00680520 +#define NV_PRAMDAC_SEL_CLK 0x00680524 +#define NV_RAMDAC_DITHER_NV11 0x00680528 +#define NV_PRAMDAC_DACCLK 0x0068052c +# define NV_PRAMDAC_DACCLK_SEL_DACCLK (1 << 0) + +#define NV_RAMDAC_NVPLL_B 0x00680570 +#define NV_RAMDAC_MPLL_B 0x00680574 +#define NV_RAMDAC_VPLL_B 0x00680578 +#define NV_RAMDAC_VPLL2_B 0x0068057c +# define NV31_RAMDAC_ENABLE_VCO2 (8 << 28) +#define NV_PRAMDAC_580 0x00680580 +# define NV_RAMDAC_580_VPLL1_ACTIVE (1 << 8) +# define NV_RAMDAC_580_VPLL2_ACTIVE (1 << 28) + +#define NV_PRAMDAC_GENERAL_CONTROL 0x00680600 +# define NV_PRAMDAC_GENERAL_CONTROL_PIXMIX_ON (3 << 4) +# define NV_PRAMDAC_GENERAL_CONTROL_VGA_STATE_SEL (1 << 8) +# define NV_PRAMDAC_GENERAL_CONTROL_ALT_MODE_SEL (1 << 12) +# define NV_PRAMDAC_GENERAL_CONTROL_TERMINATION_75OHM (2 << 16) +# define NV_PRAMDAC_GENERAL_CONTROL_BPC_8BITS (1 << 20) +# define NV_PRAMDAC_GENERAL_CONTROL_PIPE_LONG (2 << 28) +#define NV_PRAMDAC_TEST_CONTROL 0x00680608 +# define NV_PRAMDAC_TEST_CONTROL_TP_INS_EN_ASSERTED (1 << 12) +# define NV_PRAMDAC_TEST_CONTROL_PWRDWN_DAC_OFF (1 << 16) +# define NV_PRAMDAC_TEST_CONTROL_SENSEB_ALLHI (1 << 28) +#define NV_PRAMDAC_TESTPOINT_DATA 0x00680610 +# define NV_PRAMDAC_TESTPOINT_DATA_NOTBLANK (8 << 28) +#define NV_PRAMDAC_630 0x00680630 +#define NV_PRAMDAC_634 0x00680634 + +#define NV_PRAMDAC_TV_SETUP 0x00680700 +#define NV_PRAMDAC_TV_VTOTAL 0x00680720 +#define NV_PRAMDAC_TV_VSKEW 0x00680724 +#define NV_PRAMDAC_TV_VSYNC_DELAY 0x00680728 +#define NV_PRAMDAC_TV_HTOTAL 0x0068072c +#define NV_PRAMDAC_TV_HSKEW 0x00680730 +#define NV_PRAMDAC_TV_HSYNC_DELAY 0x00680734 +#define NV_PRAMDAC_TV_HSYNC_DELAY2 0x00680738 + +#define NV_PRAMDAC_TV_SETUP 0x00680700 + +#define NV_PRAMDAC_FP_VDISPLAY_END 0x00680800 +#define NV_PRAMDAC_FP_VTOTAL 0x00680804 +#define NV_PRAMDAC_FP_VCRTC 0x00680808 +#define NV_PRAMDAC_FP_VSYNC_START 0x0068080c +#define NV_PRAMDAC_FP_VSYNC_END 0x00680810 +#define NV_PRAMDAC_FP_VVALID_START 0x00680814 +#define NV_PRAMDAC_FP_VVALID_END 0x00680818 +#define NV_PRAMDAC_FP_HDISPLAY_END 0x00680820 +#define NV_PRAMDAC_FP_HTOTAL 0x00680824 +#define NV_PRAMDAC_FP_HCRTC 0x00680828 +#define NV_PRAMDAC_FP_HSYNC_START 0x0068082c +#define NV_PRAMDAC_FP_HSYNC_END 0x00680830 +#define NV_PRAMDAC_FP_HVALID_START 0x00680834 +#define NV_PRAMDAC_FP_HVALID_END 0x00680838 + +#define NV_RAMDAC_FP_DITHER 0x0068083c +#define NV_PRAMDAC_FP_TG_CONTROL 0x00680848 +# define NV_PRAMDAC_FP_TG_CONTROL_VSYNC_POS (1 << 0) +# define NV_PRAMDAC_FP_TG_CONTROL_VSYNC_DISABLE (2 << 0) +# define NV_PRAMDAC_FP_TG_CONTROL_HSYNC_POS (1 << 4) +# define NV_PRAMDAC_FP_TG_CONTROL_HSYNC_DISABLE (2 << 4) +# define NV_PRAMDAC_FP_TG_CONTROL_MODE_SCALE (0 << 8) +# define NV_PRAMDAC_FP_TG_CONTROL_MODE_CENTER (1 << 8) +# define NV_PRAMDAC_FP_TG_CONTROL_MODE_NATIVE (2 << 8) +# define NV_PRAMDAC_FP_TG_CONTROL_READ_PROG (1 << 20) +# define NV_PRAMDAC_FP_TG_CONTROL_WIDTH_12 (1 << 24) +# define NV_PRAMDAC_FP_TG_CONTROL_DISPEN_POS (1 << 28) +# define NV_PRAMDAC_FP_TG_CONTROL_DISPEN_DISABLE (2 << 28) +#define NV_PRAMDAC_FP_MARGIN_COLOR 0x0068084c +#define NV_PRAMDAC_850 0x00680850 +#define NV_PRAMDAC_85C 0x0068085c +#define NV_PRAMDAC_FP_DEBUG_0 0x00680880 +# define NV_PRAMDAC_FP_DEBUG_0_XSCALE_ENABLE (1 << 0) +# define NV_PRAMDAC_FP_DEBUG_0_YSCALE_ENABLE (1 << 4) +/* This doesn't seem to be essential for tmds, but still often set */ +# define NV_RAMDAC_FP_DEBUG_0_TMDS_ENABLED (8 << 4) +# define NV_PRAMDAC_FP_DEBUG_0_XINTERP_BILINEAR (1 << 8) +# define NV_PRAMDAC_FP_DEBUG_0_YINTERP_BILINEAR (1 << 12) +# define NV_PRAMDAC_FP_DEBUG_0_XWEIGHT_ROUND (1 << 20) +# define NV_PRAMDAC_FP_DEBUG_0_YWEIGHT_ROUND (1 << 24) +# define NV_PRAMDAC_FP_DEBUG_0_PWRDOWN_FPCLK (1 << 28) +#define NV_PRAMDAC_FP_DEBUG_1 0x00680884 +# define NV_PRAMDAC_FP_DEBUG_1_XSCALE_VALUE 11:0 +# define NV_PRAMDAC_FP_DEBUG_1_XSCALE_TESTMODE_ENABLE (1 << 12) +# define NV_PRAMDAC_FP_DEBUG_1_YSCALE_VALUE 27:16 +# define NV_PRAMDAC_FP_DEBUG_1_YSCALE_TESTMODE_ENABLE (1 << 28) +#define NV_PRAMDAC_FP_DEBUG_2 0x00680888 +#define NV_PRAMDAC_FP_DEBUG_3 0x0068088C + +/* see NV_PRAMDAC_INDIR_TMDS in rules.xml */ +#define NV_PRAMDAC_FP_TMDS_CONTROL 0x006808b0 +# define NV_PRAMDAC_FP_TMDS_CONTROL_WRITE_DISABLE (1 << 16) +#define NV_PRAMDAC_FP_TMDS_DATA 0x006808b4 + +#define NV_PRAMDAC_8C0 0x006808c0 + +/* Some kind of switch */ +#define NV_PRAMDAC_900 0x00680900 +#define NV_PRAMDAC_A20 0x00680A20 +#define NV_PRAMDAC_A24 0x00680A24 +#define NV_PRAMDAC_A34 0x00680A34 + +#define NV_PRAMDAC_CTV 0x00680c00 + +/* names fabricated from NV_USER_DAC info */ +#define NV_PRMDIO_PIXEL_MASK 0x006813c6 +# define NV_PRMDIO_PIXEL_MASK_MASK 0xff +#define NV_PRMDIO_READ_MODE_ADDRESS 0x006813c7 +#define NV_PRMDIO_WRITE_MODE_ADDRESS 0x006813c8 +#define NV_PRMDIO_PALETTE_DATA 0x006813c9 + +#define NV_PGRAPH_DEBUG_0 0x00400080 +#define NV_PGRAPH_DEBUG_1 0x00400084 +#define NV_PGRAPH_DEBUG_2_NV04 0x00400088 +#define NV_PGRAPH_DEBUG_2 0x00400620 +#define NV_PGRAPH_DEBUG_3 0x0040008c +#define NV_PGRAPH_DEBUG_4 0x00400090 +#define NV_PGRAPH_INTR 0x00400100 +#define NV_PGRAPH_INTR_EN 0x00400140 +#define NV_PGRAPH_CTX_CONTROL 0x00400144 +#define NV_PGRAPH_CTX_CONTROL_NV04 0x00400170 +#define NV_PGRAPH_ABS_UCLIP_XMIN 0x0040053C +#define NV_PGRAPH_ABS_UCLIP_YMIN 0x00400540 +#define NV_PGRAPH_ABS_UCLIP_XMAX 0x00400544 +#define NV_PGRAPH_ABS_UCLIP_YMAX 0x00400548 +#define NV_PGRAPH_BETA_AND 0x00400608 +#define NV_PGRAPH_LIMIT_VIOL_PIX 0x00400610 +#define NV_PGRAPH_BOFFSET0 0x00400640 +#define NV_PGRAPH_BOFFSET1 0x00400644 +#define NV_PGRAPH_BOFFSET2 0x00400648 +#define NV_PGRAPH_BLIMIT0 0x00400684 +#define NV_PGRAPH_BLIMIT1 0x00400688 +#define NV_PGRAPH_BLIMIT2 0x0040068c +#define NV_PGRAPH_STATUS 0x00400700 +#define NV_PGRAPH_SURFACE 0x00400710 +#define NV_PGRAPH_STATE 0x00400714 +#define NV_PGRAPH_FIFO 0x00400720 +#define NV_PGRAPH_PATTERN_SHAPE 0x00400810 +#define NV_PGRAPH_TILE 0x00400b00 + +#define NV_PVIDEO_INTR_EN 0x00008140 +#define NV_PVIDEO_BUFFER 0x00008700 +#define NV_PVIDEO_STOP 0x00008704 +#define NV_PVIDEO_UVPLANE_BASE(buff) (0x00008800+(buff)*4) +#define NV_PVIDEO_UVPLANE_LIMIT(buff) (0x00008808+(buff)*4) +#define NV_PVIDEO_UVPLANE_OFFSET_BUFF(buff) (0x00008820+(buff)*4) +#define NV_PVIDEO_BASE(buff) (0x00008900+(buff)*4) +#define NV_PVIDEO_LIMIT(buff) (0x00008908+(buff)*4) +#define NV_PVIDEO_LUMINANCE(buff) (0x00008910+(buff)*4) +#define NV_PVIDEO_CHROMINANCE(buff) (0x00008918+(buff)*4) +#define NV_PVIDEO_OFFSET_BUFF(buff) (0x00008920+(buff)*4) +#define NV_PVIDEO_SIZE_IN(buff) (0x00008928+(buff)*4) +#define NV_PVIDEO_POINT_IN(buff) (0x00008930+(buff)*4) +#define NV_PVIDEO_DS_DX(buff) (0x00008938+(buff)*4) +#define NV_PVIDEO_DT_DY(buff) (0x00008940+(buff)*4) +#define NV_PVIDEO_POINT_OUT(buff) (0x00008948+(buff)*4) +#define NV_PVIDEO_SIZE_OUT(buff) (0x00008950+(buff)*4) +#define NV_PVIDEO_FORMAT(buff) (0x00008958+(buff)*4) +# define NV_PVIDEO_FORMAT_PLANAR (1 << 0) +# define NV_PVIDEO_FORMAT_COLOR_LE_CR8YB8CB8YA8 (1 << 16) +# define NV_PVIDEO_FORMAT_DISPLAY_COLOR_KEY (1 << 20) +# define NV_PVIDEO_FORMAT_MATRIX_ITURBT709 (1 << 24) +#define NV_PVIDEO_COLOR_KEY 0x00008B00 + +/* NV04 overlay defines from VIDIX & Haiku */ +#define NV_PVIDEO_INTR_EN_0 0x00680140 +#define NV_PVIDEO_STEP_SIZE 0x00680200 +#define NV_PVIDEO_CONTROL_Y 0x00680204 +#define NV_PVIDEO_CONTROL_X 0x00680208 +#define NV_PVIDEO_BUFF0_START_ADDRESS 0x0068020c +#define NV_PVIDEO_BUFF0_PITCH_LENGTH 0x00680214 +#define NV_PVIDEO_BUFF0_OFFSET 0x0068021c +#define NV_PVIDEO_BUFF1_START_ADDRESS 0x00680210 +#define NV_PVIDEO_BUFF1_PITCH_LENGTH 0x00680218 +#define NV_PVIDEO_BUFF1_OFFSET 0x00680220 +#define NV_PVIDEO_OE_STATE 0x00680224 +#define NV_PVIDEO_SU_STATE 0x00680228 +#define NV_PVIDEO_RM_STATE 0x0068022c +#define NV_PVIDEO_WINDOW_START 0x00680230 +#define NV_PVIDEO_WINDOW_SIZE 0x00680234 +#define NV_PVIDEO_FIFO_THRES_SIZE 0x00680238 +#define NV_PVIDEO_FIFO_BURST_LENGTH 0x0068023c +#define NV_PVIDEO_KEY 0x00680240 +#define NV_PVIDEO_OVERLAY 0x00680244 +#define NV_PVIDEO_RED_CSC_OFFSET 0x00680280 +#define NV_PVIDEO_GREEN_CSC_OFFSET 0x00680284 +#define NV_PVIDEO_BLUE_CSC_OFFSET 0x00680288 +#define NV_PVIDEO_CSC_ADJUST 0x0068028c + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/nouveau/nouveau_drv.h +++ linux-2.6.32/drivers/gpu/drm/nouveau/nouveau_drv.h @@ -0,0 +1,1352 @@ +/* + * Copyright 2005 Stephane Marchesin. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __NOUVEAU_DRV_H__ +#define __NOUVEAU_DRV_H__ + +#define DRIVER_AUTHOR "Stephane Marchesin" +#define DRIVER_EMAIL "dri-devel@lists.sourceforge.net" + +#define DRIVER_NAME "nouveau" +#define DRIVER_DESC "nVidia Riva/TNT/GeForce" +#define DRIVER_DATE "20090420" + +#define DRIVER_MAJOR 0 +#define DRIVER_MINOR 0 +#define DRIVER_PATCHLEVEL 15 + +#define NOUVEAU_FAMILY 0x0000FFFF +#define NOUVEAU_FLAGS 0xFFFF0000 + +#include "ttm/ttm_bo_api.h" +#include "ttm/ttm_bo_driver.h" +#include "ttm/ttm_placement.h" +#include "ttm/ttm_memory.h" +#include "ttm/ttm_module.h" + +struct nouveau_fpriv { + struct ttm_object_file *tfile; +}; + +#define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT) + +#include "nouveau_drm.h" +#include "nouveau_reg.h" +#include "nouveau_bios.h" +struct nouveau_grctx; + +#define MAX_NUM_DCB_ENTRIES 16 + +#define NOUVEAU_MAX_CHANNEL_NR 128 +#define NOUVEAU_MAX_TILE_NR 15 + +#define NV50_VM_MAX_VRAM (2*1024*1024*1024ULL) +#define NV50_VM_BLOCK (512*1024*1024ULL) +#define NV50_VM_VRAM_NR (NV50_VM_MAX_VRAM / NV50_VM_BLOCK) + +struct nouveau_tile_reg { + struct nouveau_fence *fence; + uint32_t addr; + uint32_t size; + bool used; +}; + +struct nouveau_bo { + struct ttm_buffer_object bo; + struct ttm_placement placement; + u32 placements[3]; + struct ttm_bo_kmap_obj kmap; + struct list_head head; + + /* protected by ttm_bo_reserve() */ + struct drm_file *reserved_by; + struct list_head entry; + int pbbo_index; + + struct nouveau_channel *channel; + + bool mappable; + bool no_vm; + + uint32_t tile_mode; + uint32_t tile_flags; + struct nouveau_tile_reg *tile; + + struct drm_gem_object *gem; + struct drm_file *cpu_filp; + int pin_refcnt; +}; + +static inline struct nouveau_bo * +nouveau_bo(struct ttm_buffer_object *bo) +{ + return container_of(bo, struct nouveau_bo, bo); +} + +static inline struct nouveau_bo * +nouveau_gem_object(struct drm_gem_object *gem) +{ + return gem ? gem->driver_private : NULL; +} + +/* TODO: submit equivalent to TTM generic API upstream? */ +static inline void __iomem * +nvbo_kmap_obj_iovirtual(struct nouveau_bo *nvbo) +{ + bool is_iomem; + void __iomem *ioptr = (void __force __iomem *)ttm_kmap_obj_virtual( + &nvbo->kmap, &is_iomem); + WARN_ON_ONCE(ioptr && !is_iomem); + return ioptr; +} + +struct mem_block { + struct mem_block *next; + struct mem_block *prev; + uint64_t start; + uint64_t size; + struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */ +}; + +enum nouveau_flags { + NV_NFORCE = 0x10000000, + NV_NFORCE2 = 0x20000000 +}; + +#define NVOBJ_ENGINE_SW 0 +#define NVOBJ_ENGINE_GR 1 +#define NVOBJ_ENGINE_DISPLAY 2 +#define NVOBJ_ENGINE_INT 0xdeadbeef + +#define NVOBJ_FLAG_ALLOW_NO_REFS (1 << 0) +#define NVOBJ_FLAG_ZERO_ALLOC (1 << 1) +#define NVOBJ_FLAG_ZERO_FREE (1 << 2) +#define NVOBJ_FLAG_FAKE (1 << 3) +struct nouveau_gpuobj { + struct list_head list; + + struct nouveau_channel *im_channel; + struct mem_block *im_pramin; + struct nouveau_bo *im_backing; + uint32_t im_backing_start; + uint32_t *im_backing_suspend; + int im_bound; + + uint32_t flags; + int refcount; + + uint32_t engine; + uint32_t class; + + void (*dtor)(struct drm_device *, struct nouveau_gpuobj *); + void *priv; +}; + +struct nouveau_gpuobj_ref { + struct list_head list; + + struct nouveau_gpuobj *gpuobj; + uint32_t instance; + + struct nouveau_channel *channel; + int handle; +}; + +struct nouveau_channel { + struct drm_device *dev; + int id; + + /* owner of this fifo */ + struct drm_file *file_priv; + /* mapping of the fifo itself */ + struct drm_local_map *map; + + /* mapping of the regs controling the fifo */ + void __iomem *user; + uint32_t user_get; + uint32_t user_put; + + /* Fencing */ + struct { + /* lock protects the pending list only */ + spinlock_t lock; + struct list_head pending; + uint32_t sequence; + uint32_t sequence_ack; + uint32_t last_sequence_irq; + } fence; + + /* DMA push buffer */ + struct nouveau_gpuobj_ref *pushbuf; + struct nouveau_bo *pushbuf_bo; + uint32_t pushbuf_base; + + /* Notifier memory */ + struct nouveau_bo *notifier_bo; + struct mem_block *notifier_heap; + + /* PFIFO context */ + struct nouveau_gpuobj_ref *ramfc; + struct nouveau_gpuobj_ref *cache; + + /* PGRAPH context */ + /* XXX may be merge 2 pointers as private data ??? */ + struct nouveau_gpuobj_ref *ramin_grctx; + void *pgraph_ctx; + + /* NV50 VM */ + struct nouveau_gpuobj *vm_pd; + struct nouveau_gpuobj_ref *vm_gart_pt; + struct nouveau_gpuobj_ref *vm_vram_pt[NV50_VM_VRAM_NR]; + + /* Objects */ + struct nouveau_gpuobj_ref *ramin; /* Private instmem */ + struct mem_block *ramin_heap; /* Private PRAMIN heap */ + struct nouveau_gpuobj_ref *ramht; /* Hash table */ + struct list_head ramht_refs; /* Objects referenced by RAMHT */ + + /* GPU object info for stuff used in-kernel (mm_enabled) */ + uint32_t m2mf_ntfy; + uint32_t vram_handle; + uint32_t gart_handle; + bool accel_done; + + /* Push buffer state (only for drm's channel on !mm_enabled) */ + struct { + int max; + int free; + int cur; + int put; + /* access via pushbuf_bo */ + } dma; + + uint32_t sw_subchannel[8]; + + struct { + struct nouveau_gpuobj *vblsem; + uint32_t vblsem_offset; + uint32_t vblsem_rval; + struct list_head vbl_wait; + } nvsw; + + struct { + bool active; + char name[32]; + struct drm_info_list info; + } debugfs; +}; + +struct nouveau_instmem_engine { + void *priv; + + int (*init)(struct drm_device *dev); + void (*takedown)(struct drm_device *dev); + int (*suspend)(struct drm_device *dev); + void (*resume)(struct drm_device *dev); + + int (*populate)(struct drm_device *, struct nouveau_gpuobj *, + uint32_t *size); + void (*clear)(struct drm_device *, struct nouveau_gpuobj *); + int (*bind)(struct drm_device *, struct nouveau_gpuobj *); + int (*unbind)(struct drm_device *, struct nouveau_gpuobj *); + void (*prepare_access)(struct drm_device *, bool write); + void (*finish_access)(struct drm_device *); +}; + +struct nouveau_mc_engine { + int (*init)(struct drm_device *dev); + void (*takedown)(struct drm_device *dev); +}; + +struct nouveau_timer_engine { + int (*init)(struct drm_device *dev); + void (*takedown)(struct drm_device *dev); + uint64_t (*read)(struct drm_device *dev); +}; + +struct nouveau_fb_engine { + int num_tiles; + + int (*init)(struct drm_device *dev); + void (*takedown)(struct drm_device *dev); + + void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch); +}; + +struct nouveau_fifo_engine { + void *priv; + + int channels; + + int (*init)(struct drm_device *); + void (*takedown)(struct drm_device *); + + void (*disable)(struct drm_device *); + void (*enable)(struct drm_device *); + bool (*reassign)(struct drm_device *, bool enable); + bool (*cache_flush)(struct drm_device *dev); + bool (*cache_pull)(struct drm_device *dev, bool enable); + + int (*channel_id)(struct drm_device *); + + int (*create_context)(struct nouveau_channel *); + void (*destroy_context)(struct nouveau_channel *); + int (*load_context)(struct nouveau_channel *); + int (*unload_context)(struct drm_device *); +}; + +struct nouveau_pgraph_object_method { + int id; + int (*exec)(struct nouveau_channel *chan, int grclass, int mthd, + uint32_t data); +}; + +struct nouveau_pgraph_object_class { + int id; + bool software; + struct nouveau_pgraph_object_method *methods; +}; + +struct nouveau_pgraph_engine { + struct nouveau_pgraph_object_class *grclass; + bool accel_blocked; + void *ctxprog; + void *ctxvals; + int grctx_size; + + int (*init)(struct drm_device *); + void (*takedown)(struct drm_device *); + + void (*fifo_access)(struct drm_device *, bool); + + struct nouveau_channel *(*channel)(struct drm_device *); + int (*create_context)(struct nouveau_channel *); + void (*destroy_context)(struct nouveau_channel *); + int (*load_context)(struct nouveau_channel *); + int (*unload_context)(struct drm_device *); + + void (*set_region_tiling)(struct drm_device *dev, int i, uint32_t addr, + uint32_t size, uint32_t pitch); +}; + +struct nouveau_engine { + struct nouveau_instmem_engine instmem; + struct nouveau_mc_engine mc; + struct nouveau_timer_engine timer; + struct nouveau_fb_engine fb; + struct nouveau_pgraph_engine graph; + struct nouveau_fifo_engine fifo; +}; + +struct nouveau_pll_vals { + union { + struct { +#ifdef __BIG_ENDIAN + uint8_t N1, M1, N2, M2; +#else + uint8_t M1, N1, M2, N2; +#endif + }; + struct { + uint16_t NM1, NM2; + } __attribute__((packed)); + }; + int log2P; + + int refclk; +}; + +enum nv04_fp_display_regs { + FP_DISPLAY_END, + FP_TOTAL, + FP_CRTC, + FP_SYNC_START, + FP_SYNC_END, + FP_VALID_START, + FP_VALID_END +}; + +struct nv04_crtc_reg { + unsigned char MiscOutReg; /* */ + uint8_t CRTC[0x9f]; + uint8_t CR58[0x10]; + uint8_t Sequencer[5]; + uint8_t Graphics[9]; + uint8_t Attribute[21]; + unsigned char DAC[768]; /* Internal Colorlookuptable */ + + /* PCRTC regs */ + uint32_t fb_start; + uint32_t crtc_cfg; + uint32_t cursor_cfg; + uint32_t gpio_ext; + uint32_t crtc_830; + uint32_t crtc_834; + uint32_t crtc_850; + uint32_t crtc_eng_ctrl; + + /* PRAMDAC regs */ + uint32_t nv10_cursync; + struct nouveau_pll_vals pllvals; + uint32_t ramdac_gen_ctrl; + uint32_t ramdac_630; + uint32_t ramdac_634; + uint32_t tv_setup; + uint32_t tv_vtotal; + uint32_t tv_vskew; + uint32_t tv_vsync_delay; + uint32_t tv_htotal; + uint32_t tv_hskew; + uint32_t tv_hsync_delay; + uint32_t tv_hsync_delay2; + uint32_t fp_horiz_regs[7]; + uint32_t fp_vert_regs[7]; + uint32_t dither; + uint32_t fp_control; + uint32_t dither_regs[6]; + uint32_t fp_debug_0; + uint32_t fp_debug_1; + uint32_t fp_debug_2; + uint32_t fp_margin_color; + uint32_t ramdac_8c0; + uint32_t ramdac_a20; + uint32_t ramdac_a24; + uint32_t ramdac_a34; + uint32_t ctv_regs[38]; +}; + +struct nv04_output_reg { + uint32_t output; + int head; +}; + +struct nv04_mode_state { + uint32_t bpp; + uint32_t width; + uint32_t height; + uint32_t interlace; + uint32_t repaint0; + uint32_t repaint1; + uint32_t screen; + uint32_t scale; + uint32_t dither; + uint32_t extra; + uint32_t fifo; + uint32_t pixel; + uint32_t horiz; + int arbitration0; + int arbitration1; + uint32_t pll; + uint32_t pllB; + uint32_t vpll; + uint32_t vpll2; + uint32_t vpllB; + uint32_t vpll2B; + uint32_t pllsel; + uint32_t sel_clk; + uint32_t general; + uint32_t crtcOwner; + uint32_t head; + uint32_t head2; + uint32_t cursorConfig; + uint32_t cursor0; + uint32_t cursor1; + uint32_t cursor2; + uint32_t timingH; + uint32_t timingV; + uint32_t displayV; + uint32_t crtcSync; + + struct nv04_crtc_reg crtc_reg[2]; +}; + +enum nouveau_card_type { + NV_04 = 0x00, + NV_10 = 0x10, + NV_20 = 0x20, + NV_30 = 0x30, + NV_40 = 0x40, + NV_50 = 0x50, +}; + +struct drm_nouveau_private { + struct drm_device *dev; + enum { + NOUVEAU_CARD_INIT_DOWN, + NOUVEAU_CARD_INIT_DONE, + NOUVEAU_CARD_INIT_FAILED + } init_state; + + /* the card type, takes NV_* as values */ + enum nouveau_card_type card_type; + /* exact chipset, derived from NV_PMC_BOOT_0 */ + int chipset; + int flags; + + void __iomem *mmio; + void __iomem *ramin; + uint32_t ramin_size; + + struct nouveau_bo *vga_ram; + + struct workqueue_struct *wq; + struct work_struct irq_work; + + struct list_head vbl_waiting; + + struct { + struct ttm_global_reference mem_global_ref; + struct ttm_bo_global_ref bo_global_ref; + struct ttm_bo_device bdev; + spinlock_t bo_list_lock; + struct list_head bo_list; + atomic_t validate_sequence; + } ttm; + + struct fb_info *fbdev_info; + + int fifo_alloc_count; + struct nouveau_channel *fifos[NOUVEAU_MAX_CHANNEL_NR]; + + struct nouveau_engine engine; + struct nouveau_channel *channel; + + /* RAMIN configuration, RAMFC, RAMHT and RAMRO offsets */ + struct nouveau_gpuobj *ramht; + uint32_t ramin_rsvd_vram; + uint32_t ramht_offset; + uint32_t ramht_size; + uint32_t ramht_bits; + uint32_t ramfc_offset; + uint32_t ramfc_size; + uint32_t ramro_offset; + uint32_t ramro_size; + + /* base physical adresses */ + uint64_t fb_phys; + uint64_t fb_available_size; + uint64_t fb_mappable_pages; + uint64_t fb_aper_free; + + struct { + enum { + NOUVEAU_GART_NONE = 0, + NOUVEAU_GART_AGP, + NOUVEAU_GART_SGDMA + } type; + uint64_t aper_base; + uint64_t aper_size; + uint64_t aper_free; + + struct nouveau_gpuobj *sg_ctxdma; + struct page *sg_dummy_page; + dma_addr_t sg_dummy_bus; + + /* nottm hack */ + struct drm_ttm_backend *sg_be; + unsigned long sg_handle; + } gart_info; + + /* nv10-nv40 tiling regions */ + struct { + struct nouveau_tile_reg reg[NOUVEAU_MAX_TILE_NR]; + spinlock_t lock; + } tile; + + /* G8x/G9x virtual address space */ + uint64_t vm_gart_base; + uint64_t vm_gart_size; + uint64_t vm_vram_base; + uint64_t vm_vram_size; + uint64_t vm_end; + struct nouveau_gpuobj *vm_vram_pt[NV50_VM_VRAM_NR]; + int vm_vram_pt_nr; + uint64_t vram_sys_base; + + /* the mtrr covering the FB */ + int fb_mtrr; + + struct mem_block *ramin_heap; + + /* context table pointed to be NV_PGRAPH_CHANNEL_CTX_TABLE (0x400780) */ + uint32_t ctx_table_size; + struct nouveau_gpuobj_ref *ctx_table; + + struct list_head gpuobj_list; + + struct nvbios VBIOS; + struct nouveau_bios_info *vbios; + + struct nv04_mode_state mode_reg; + struct nv04_mode_state saved_reg; + uint32_t saved_vga_font[4][16384]; + uint32_t crtc_owner; + uint32_t dac_users[4]; + + struct nouveau_suspend_resume { + uint32_t fifo_mode; + uint32_t graph_ctx_control; + uint32_t graph_state; + uint32_t *ramin_copy; + uint64_t ramin_size; + } susres; + + struct backlight_device *backlight; + bool acpi_dsm; + + struct nouveau_channel *evo; + + struct { + struct dentry *channel_root; + } debugfs; +}; + +static inline struct drm_nouveau_private * +nouveau_bdev(struct ttm_bo_device *bd) +{ + return container_of(bd, struct drm_nouveau_private, ttm.bdev); +} + +static inline int +nouveau_bo_ref(struct nouveau_bo *ref, struct nouveau_bo **pnvbo) +{ + struct nouveau_bo *prev; + + if (!pnvbo) + return -EINVAL; + prev = *pnvbo; + + *pnvbo = ref ? nouveau_bo(ttm_bo_reference(&ref->bo)) : NULL; + if (prev) { + struct ttm_buffer_object *bo = &prev->bo; + + ttm_bo_unref(&bo); + } + + return 0; +} + +#define NOUVEAU_CHECK_INITIALISED_WITH_RETURN do { \ + struct drm_nouveau_private *nv = dev->dev_private; \ + if (nv->init_state != NOUVEAU_CARD_INIT_DONE) { \ + NV_ERROR(dev, "called without init\n"); \ + return -EINVAL; \ + } \ +} while (0) + +#define NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(id, cl, ch) do { \ + struct drm_nouveau_private *nv = dev->dev_private; \ + if (!nouveau_channel_owner(dev, (cl), (id))) { \ + NV_ERROR(dev, "pid %d doesn't own channel %d\n", \ + DRM_CURRENTPID, (id)); \ + return -EPERM; \ + } \ + (ch) = nv->fifos[(id)]; \ +} while (0) + +/* nouveau_drv.c */ +extern int nouveau_noagp; +extern int nouveau_duallink; +extern int nouveau_uscript_lvds; +extern int nouveau_uscript_tmds; +extern int nouveau_vram_pushbuf; +extern int nouveau_vram_notify; +extern int nouveau_fbpercrtc; +extern char *nouveau_tv_norm; +extern int nouveau_reg_debug; +extern char *nouveau_vbios; +extern int nouveau_ctxfw; +extern int nouveau_ignorelid; +extern int nouveau_nofbaccel; +extern int nouveau_noaccel; + +/* nouveau_state.c */ +extern void nouveau_preclose(struct drm_device *dev, struct drm_file *); +extern int nouveau_load(struct drm_device *, unsigned long flags); +extern int nouveau_firstopen(struct drm_device *); +extern void nouveau_lastclose(struct drm_device *); +extern int nouveau_unload(struct drm_device *); +extern int nouveau_ioctl_getparam(struct drm_device *, void *data, + struct drm_file *); +extern int nouveau_ioctl_setparam(struct drm_device *, void *data, + struct drm_file *); +extern bool nouveau_wait_until(struct drm_device *, uint64_t timeout, + uint32_t reg, uint32_t mask, uint32_t val); +extern bool nouveau_wait_for_idle(struct drm_device *); +extern int nouveau_card_init(struct drm_device *); +extern int nouveau_ioctl_card_init(struct drm_device *, void *data, + struct drm_file *); +extern int nouveau_ioctl_suspend(struct drm_device *, void *data, + struct drm_file *); +extern int nouveau_ioctl_resume(struct drm_device *, void *data, + struct drm_file *); + +/* nouveau_mem.c */ +extern int nouveau_mem_init_heap(struct mem_block **, uint64_t start, + uint64_t size); +extern struct mem_block *nouveau_mem_alloc_block(struct mem_block *, + uint64_t size, int align2, + struct drm_file *, int tail); +extern void nouveau_mem_takedown(struct mem_block **heap); +extern void nouveau_mem_free_block(struct mem_block *); +extern uint64_t nouveau_mem_fb_amount(struct drm_device *); +extern void nouveau_mem_release(struct drm_file *, struct mem_block *heap); +extern int nouveau_mem_init(struct drm_device *); +extern int nouveau_mem_init_agp(struct drm_device *); +extern void nouveau_mem_close(struct drm_device *); +extern struct nouveau_tile_reg *nv10_mem_set_tiling(struct drm_device *dev, + uint32_t addr, + uint32_t size, + uint32_t pitch); +extern void nv10_mem_expire_tiling(struct drm_device *dev, + struct nouveau_tile_reg *tile, + struct nouveau_fence *fence); +extern int nv50_mem_vm_bind_linear(struct drm_device *, uint64_t virt, + uint32_t size, uint32_t flags, + uint64_t phys); +extern void nv50_mem_vm_unbind(struct drm_device *, uint64_t virt, + uint32_t size); + +/* nouveau_notifier.c */ +extern int nouveau_notifier_init_channel(struct nouveau_channel *); +extern void nouveau_notifier_takedown_channel(struct nouveau_channel *); +extern int nouveau_notifier_alloc(struct nouveau_channel *, uint32_t handle, + int cout, uint32_t *offset); +extern int nouveau_notifier_offset(struct nouveau_gpuobj *, uint32_t *); +extern int nouveau_ioctl_notifier_alloc(struct drm_device *, void *data, + struct drm_file *); +extern int nouveau_ioctl_notifier_free(struct drm_device *, void *data, + struct drm_file *); + +/* nouveau_channel.c */ +extern struct drm_ioctl_desc nouveau_ioctls[]; +extern int nouveau_max_ioctl; +extern void nouveau_channel_cleanup(struct drm_device *, struct drm_file *); +extern int nouveau_channel_owner(struct drm_device *, struct drm_file *, + int channel); +extern int nouveau_channel_alloc(struct drm_device *dev, + struct nouveau_channel **chan, + struct drm_file *file_priv, + uint32_t fb_ctxdma, uint32_t tt_ctxdma); +extern void nouveau_channel_free(struct nouveau_channel *); + +/* nouveau_object.c */ +extern int nouveau_gpuobj_early_init(struct drm_device *); +extern int nouveau_gpuobj_init(struct drm_device *); +extern void nouveau_gpuobj_takedown(struct drm_device *); +extern void nouveau_gpuobj_late_takedown(struct drm_device *); +extern int nouveau_gpuobj_suspend(struct drm_device *dev); +extern void nouveau_gpuobj_suspend_cleanup(struct drm_device *dev); +extern void nouveau_gpuobj_resume(struct drm_device *dev); +extern int nouveau_gpuobj_channel_init(struct nouveau_channel *, + uint32_t vram_h, uint32_t tt_h); +extern void nouveau_gpuobj_channel_takedown(struct nouveau_channel *); +extern int nouveau_gpuobj_new(struct drm_device *, struct nouveau_channel *, + uint32_t size, int align, uint32_t flags, + struct nouveau_gpuobj **); +extern int nouveau_gpuobj_del(struct drm_device *, struct nouveau_gpuobj **); +extern int nouveau_gpuobj_ref_add(struct drm_device *, struct nouveau_channel *, + uint32_t handle, struct nouveau_gpuobj *, + struct nouveau_gpuobj_ref **); +extern int nouveau_gpuobj_ref_del(struct drm_device *, + struct nouveau_gpuobj_ref **); +extern int nouveau_gpuobj_ref_find(struct nouveau_channel *, uint32_t handle, + struct nouveau_gpuobj_ref **ref_ret); +extern int nouveau_gpuobj_new_ref(struct drm_device *, + struct nouveau_channel *alloc_chan, + struct nouveau_channel *ref_chan, + uint32_t handle, uint32_t size, int align, + uint32_t flags, struct nouveau_gpuobj_ref **); +extern int nouveau_gpuobj_new_fake(struct drm_device *, + uint32_t p_offset, uint32_t b_offset, + uint32_t size, uint32_t flags, + struct nouveau_gpuobj **, + struct nouveau_gpuobj_ref**); +extern int nouveau_gpuobj_dma_new(struct nouveau_channel *, int class, + uint64_t offset, uint64_t size, int access, + int target, struct nouveau_gpuobj **); +extern int nouveau_gpuobj_gart_dma_new(struct nouveau_channel *, + uint64_t offset, uint64_t size, + int access, struct nouveau_gpuobj **, + uint32_t *o_ret); +extern int nouveau_gpuobj_gr_new(struct nouveau_channel *, int class, + struct nouveau_gpuobj **); +extern int nouveau_gpuobj_sw_new(struct nouveau_channel *, int class, + struct nouveau_gpuobj **); +extern int nouveau_ioctl_grobj_alloc(struct drm_device *, void *data, + struct drm_file *); +extern int nouveau_ioctl_gpuobj_free(struct drm_device *, void *data, + struct drm_file *); + +/* nouveau_irq.c */ +extern irqreturn_t nouveau_irq_handler(DRM_IRQ_ARGS); +extern void nouveau_irq_preinstall(struct drm_device *); +extern int nouveau_irq_postinstall(struct drm_device *); +extern void nouveau_irq_uninstall(struct drm_device *); + +/* nouveau_sgdma.c */ +extern int nouveau_sgdma_init(struct drm_device *); +extern void nouveau_sgdma_takedown(struct drm_device *); +extern int nouveau_sgdma_get_page(struct drm_device *, uint32_t offset, + uint32_t *page); +extern struct ttm_backend *nouveau_sgdma_init_ttm(struct drm_device *); + +/* nouveau_debugfs.c */ +#if defined(CONFIG_DRM_NOUVEAU_DEBUG) +extern int nouveau_debugfs_init(struct drm_minor *); +extern void nouveau_debugfs_takedown(struct drm_minor *); +extern int nouveau_debugfs_channel_init(struct nouveau_channel *); +extern void nouveau_debugfs_channel_fini(struct nouveau_channel *); +#else +static inline int +nouveau_debugfs_init(struct drm_minor *minor) +{ + return 0; +} + +static inline void nouveau_debugfs_takedown(struct drm_minor *minor) +{ +} + +static inline int +nouveau_debugfs_channel_init(struct nouveau_channel *chan) +{ + return 0; +} + +static inline void +nouveau_debugfs_channel_fini(struct nouveau_channel *chan) +{ +} +#endif + +/* nouveau_dma.c */ +extern void nouveau_dma_pre_init(struct nouveau_channel *); +extern int nouveau_dma_init(struct nouveau_channel *); +extern int nouveau_dma_wait(struct nouveau_channel *, int size); + +/* nouveau_acpi.c */ +#ifdef CONFIG_ACPI +extern int nouveau_hybrid_setup(struct drm_device *dev); +extern bool nouveau_dsm_probe(struct drm_device *dev); +#else +static inline int nouveau_hybrid_setup(struct drm_device *dev) +{ + return 0; +} +static inline bool nouveau_dsm_probe(struct drm_device *dev) +{ + return false; +} +#endif + +/* nouveau_backlight.c */ +#ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT +extern int nouveau_backlight_init(struct drm_device *); +extern void nouveau_backlight_exit(struct drm_device *); +#else +static inline int nouveau_backlight_init(struct drm_device *dev) +{ + return 0; +} + +static inline void nouveau_backlight_exit(struct drm_device *dev) { } +#endif + +/* nouveau_bios.c */ +extern int nouveau_bios_init(struct drm_device *); +extern void nouveau_bios_takedown(struct drm_device *dev); +extern int nouveau_run_vbios_init(struct drm_device *); +extern void nouveau_bios_run_init_table(struct drm_device *, uint16_t table, + struct dcb_entry *); +extern struct dcb_gpio_entry *nouveau_bios_gpio_entry(struct drm_device *, + enum dcb_gpio_tag); +extern struct dcb_connector_table_entry * +nouveau_bios_connector_entry(struct drm_device *, int index); +extern int get_pll_limits(struct drm_device *, uint32_t limit_match, + struct pll_lims *); +extern int nouveau_bios_run_display_table(struct drm_device *, + struct dcb_entry *, + uint32_t script, int pxclk); +extern void *nouveau_bios_dp_table(struct drm_device *, struct dcb_entry *, + int *length); +extern bool nouveau_bios_fp_mode(struct drm_device *, struct drm_display_mode *); +extern uint8_t *nouveau_bios_embedded_edid(struct drm_device *); +extern int nouveau_bios_parse_lvds_table(struct drm_device *, int pxclk, + bool *dl, bool *if_is_24bit); +extern int run_tmds_table(struct drm_device *, struct dcb_entry *, + int head, int pxclk); +extern int call_lvds_script(struct drm_device *, struct dcb_entry *, int head, + enum LVDS_script, int pxclk); + +/* nouveau_ttm.c */ +int nouveau_ttm_global_init(struct drm_nouveau_private *); +void nouveau_ttm_global_release(struct drm_nouveau_private *); +int nouveau_ttm_mmap(struct file *, struct vm_area_struct *); + +/* nouveau_dp.c */ +int nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr, + uint8_t *data, int data_nr); +bool nouveau_dp_detect(struct drm_encoder *); +bool nouveau_dp_link_train(struct drm_encoder *); + +/* nv04_fb.c */ +extern int nv04_fb_init(struct drm_device *); +extern void nv04_fb_takedown(struct drm_device *); + +/* nv10_fb.c */ +extern int nv10_fb_init(struct drm_device *); +extern void nv10_fb_takedown(struct drm_device *); +extern void nv10_fb_set_region_tiling(struct drm_device *, int, uint32_t, + uint32_t, uint32_t); + +/* nv40_fb.c */ +extern int nv40_fb_init(struct drm_device *); +extern void nv40_fb_takedown(struct drm_device *); +extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t, + uint32_t, uint32_t); + +/* nv04_fifo.c */ +extern int nv04_fifo_init(struct drm_device *); +extern void nv04_fifo_disable(struct drm_device *); +extern void nv04_fifo_enable(struct drm_device *); +extern bool nv04_fifo_reassign(struct drm_device *, bool); +extern bool nv04_fifo_cache_flush(struct drm_device *); +extern bool nv04_fifo_cache_pull(struct drm_device *, bool); +extern int nv04_fifo_channel_id(struct drm_device *); +extern int nv04_fifo_create_context(struct nouveau_channel *); +extern void nv04_fifo_destroy_context(struct nouveau_channel *); +extern int nv04_fifo_load_context(struct nouveau_channel *); +extern int nv04_fifo_unload_context(struct drm_device *); + +/* nv10_fifo.c */ +extern int nv10_fifo_init(struct drm_device *); +extern int nv10_fifo_channel_id(struct drm_device *); +extern int nv10_fifo_create_context(struct nouveau_channel *); +extern void nv10_fifo_destroy_context(struct nouveau_channel *); +extern int nv10_fifo_load_context(struct nouveau_channel *); +extern int nv10_fifo_unload_context(struct drm_device *); + +/* nv40_fifo.c */ +extern int nv40_fifo_init(struct drm_device *); +extern int nv40_fifo_create_context(struct nouveau_channel *); +extern void nv40_fifo_destroy_context(struct nouveau_channel *); +extern int nv40_fifo_load_context(struct nouveau_channel *); +extern int nv40_fifo_unload_context(struct drm_device *); + +/* nv50_fifo.c */ +extern int nv50_fifo_init(struct drm_device *); +extern void nv50_fifo_takedown(struct drm_device *); +extern int nv50_fifo_channel_id(struct drm_device *); +extern int nv50_fifo_create_context(struct nouveau_channel *); +extern void nv50_fifo_destroy_context(struct nouveau_channel *); +extern int nv50_fifo_load_context(struct nouveau_channel *); +extern int nv50_fifo_unload_context(struct drm_device *); + +/* nv04_graph.c */ +extern struct nouveau_pgraph_object_class nv04_graph_grclass[]; +extern int nv04_graph_init(struct drm_device *); +extern void nv04_graph_takedown(struct drm_device *); +extern void nv04_graph_fifo_access(struct drm_device *, bool); +extern struct nouveau_channel *nv04_graph_channel(struct drm_device *); +extern int nv04_graph_create_context(struct nouveau_channel *); +extern void nv04_graph_destroy_context(struct nouveau_channel *); +extern int nv04_graph_load_context(struct nouveau_channel *); +extern int nv04_graph_unload_context(struct drm_device *); +extern void nv04_graph_context_switch(struct drm_device *); + +/* nv10_graph.c */ +extern struct nouveau_pgraph_object_class nv10_graph_grclass[]; +extern int nv10_graph_init(struct drm_device *); +extern void nv10_graph_takedown(struct drm_device *); +extern struct nouveau_channel *nv10_graph_channel(struct drm_device *); +extern int nv10_graph_create_context(struct nouveau_channel *); +extern void nv10_graph_destroy_context(struct nouveau_channel *); +extern int nv10_graph_load_context(struct nouveau_channel *); +extern int nv10_graph_unload_context(struct drm_device *); +extern void nv10_graph_context_switch(struct drm_device *); +extern void nv10_graph_set_region_tiling(struct drm_device *, int, uint32_t, + uint32_t, uint32_t); + +/* nv20_graph.c */ +extern struct nouveau_pgraph_object_class nv20_graph_grclass[]; +extern struct nouveau_pgraph_object_class nv30_graph_grclass[]; +extern int nv20_graph_create_context(struct nouveau_channel *); +extern void nv20_graph_destroy_context(struct nouveau_channel *); +extern int nv20_graph_load_context(struct nouveau_channel *); +extern int nv20_graph_unload_context(struct drm_device *); +extern int nv20_graph_init(struct drm_device *); +extern void nv20_graph_takedown(struct drm_device *); +extern int nv30_graph_init(struct drm_device *); +extern void nv20_graph_set_region_tiling(struct drm_device *, int, uint32_t, + uint32_t, uint32_t); + +/* nv40_graph.c */ +extern struct nouveau_pgraph_object_class nv40_graph_grclass[]; +extern int nv40_graph_init(struct drm_device *); +extern void nv40_graph_takedown(struct drm_device *); +extern struct nouveau_channel *nv40_graph_channel(struct drm_device *); +extern int nv40_graph_create_context(struct nouveau_channel *); +extern void nv40_graph_destroy_context(struct nouveau_channel *); +extern int nv40_graph_load_context(struct nouveau_channel *); +extern int nv40_graph_unload_context(struct drm_device *); +extern void nv40_grctx_init(struct nouveau_grctx *); +extern void nv40_graph_set_region_tiling(struct drm_device *, int, uint32_t, + uint32_t, uint32_t); + +/* nv50_graph.c */ +extern struct nouveau_pgraph_object_class nv50_graph_grclass[]; +extern int nv50_graph_init(struct drm_device *); +extern void nv50_graph_takedown(struct drm_device *); +extern void nv50_graph_fifo_access(struct drm_device *, bool); +extern struct nouveau_channel *nv50_graph_channel(struct drm_device *); +extern int nv50_graph_create_context(struct nouveau_channel *); +extern void nv50_graph_destroy_context(struct nouveau_channel *); +extern int nv50_graph_load_context(struct nouveau_channel *); +extern int nv50_graph_unload_context(struct drm_device *); +extern void nv50_graph_context_switch(struct drm_device *); +extern int nv50_grctx_init(struct nouveau_grctx *); + +/* nouveau_grctx.c */ +extern int nouveau_grctx_prog_load(struct drm_device *); +extern void nouveau_grctx_vals_load(struct drm_device *, + struct nouveau_gpuobj *); +extern void nouveau_grctx_fini(struct drm_device *); + +/* nv04_instmem.c */ +extern int nv04_instmem_init(struct drm_device *); +extern void nv04_instmem_takedown(struct drm_device *); +extern int nv04_instmem_suspend(struct drm_device *); +extern void nv04_instmem_resume(struct drm_device *); +extern int nv04_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, + uint32_t *size); +extern void nv04_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); +extern int nv04_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); +extern int nv04_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); +extern void nv04_instmem_prepare_access(struct drm_device *, bool write); +extern void nv04_instmem_finish_access(struct drm_device *); + +/* nv50_instmem.c */ +extern int nv50_instmem_init(struct drm_device *); +extern void nv50_instmem_takedown(struct drm_device *); +extern int nv50_instmem_suspend(struct drm_device *); +extern void nv50_instmem_resume(struct drm_device *); +extern int nv50_instmem_populate(struct drm_device *, struct nouveau_gpuobj *, + uint32_t *size); +extern void nv50_instmem_clear(struct drm_device *, struct nouveau_gpuobj *); +extern int nv50_instmem_bind(struct drm_device *, struct nouveau_gpuobj *); +extern int nv50_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *); +extern void nv50_instmem_prepare_access(struct drm_device *, bool write); +extern void nv50_instmem_finish_access(struct drm_device *); + +/* nv04_mc.c */ +extern int nv04_mc_init(struct drm_device *); +extern void nv04_mc_takedown(struct drm_device *); + +/* nv40_mc.c */ +extern int nv40_mc_init(struct drm_device *); +extern void nv40_mc_takedown(struct drm_device *); + +/* nv50_mc.c */ +extern int nv50_mc_init(struct drm_device *); +extern void nv50_mc_takedown(struct drm_device *); + +/* nv04_timer.c */ +extern int nv04_timer_init(struct drm_device *); +extern uint64_t nv04_timer_read(struct drm_device *); +extern void nv04_timer_takedown(struct drm_device *); + +extern long nouveau_compat_ioctl(struct file *file, unsigned int cmd, + unsigned long arg); + +/* nv04_dac.c */ +extern int nv04_dac_create(struct drm_device *dev, struct dcb_entry *entry); +extern uint32_t nv17_dac_sample_load(struct drm_encoder *encoder); +extern int nv04_dac_output_offset(struct drm_encoder *encoder); +extern void nv04_dac_update_dacclk(struct drm_encoder *encoder, bool enable); + +/* nv04_dfp.c */ +extern int nv04_dfp_create(struct drm_device *dev, struct dcb_entry *entry); +extern int nv04_dfp_get_bound_head(struct drm_device *dev, struct dcb_entry *dcbent); +extern void nv04_dfp_bind_head(struct drm_device *dev, struct dcb_entry *dcbent, + int head, bool dl); +extern void nv04_dfp_disable(struct drm_device *dev, int head); +extern void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode); + +/* nv04_tv.c */ +extern int nv04_tv_identify(struct drm_device *dev, int i2c_index); +extern int nv04_tv_create(struct drm_device *dev, struct dcb_entry *entry); + +/* nv17_tv.c */ +extern int nv17_tv_create(struct drm_device *dev, struct dcb_entry *entry); + +/* nv04_display.c */ +extern int nv04_display_create(struct drm_device *); +extern void nv04_display_destroy(struct drm_device *); +extern void nv04_display_restore(struct drm_device *); + +/* nv04_crtc.c */ +extern int nv04_crtc_create(struct drm_device *, int index); + +/* nouveau_bo.c */ +extern struct ttm_bo_driver nouveau_bo_driver; +extern int nouveau_bo_new(struct drm_device *, struct nouveau_channel *, + int size, int align, uint32_t flags, + uint32_t tile_mode, uint32_t tile_flags, + bool no_vm, bool mappable, struct nouveau_bo **); +extern int nouveau_bo_pin(struct nouveau_bo *, uint32_t flags); +extern int nouveau_bo_unpin(struct nouveau_bo *); +extern int nouveau_bo_map(struct nouveau_bo *); +extern void nouveau_bo_unmap(struct nouveau_bo *); +extern void nouveau_bo_placement_set(struct nouveau_bo *, uint32_t memtype); +extern u16 nouveau_bo_rd16(struct nouveau_bo *nvbo, unsigned index); +extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val); +extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index); +extern void nouveau_bo_wr32(struct nouveau_bo *nvbo, unsigned index, u32 val); + +/* nouveau_fence.c */ +struct nouveau_fence; +extern int nouveau_fence_init(struct nouveau_channel *); +extern void nouveau_fence_fini(struct nouveau_channel *); +extern void nouveau_fence_update(struct nouveau_channel *); +extern int nouveau_fence_new(struct nouveau_channel *, struct nouveau_fence **, + bool emit); +extern int nouveau_fence_emit(struct nouveau_fence *); +struct nouveau_channel *nouveau_fence_channel(struct nouveau_fence *); +extern bool nouveau_fence_signalled(void *obj, void *arg); +extern int nouveau_fence_wait(void *obj, void *arg, bool lazy, bool intr); +extern int nouveau_fence_flush(void *obj, void *arg); +extern void nouveau_fence_unref(void **obj); +extern void *nouveau_fence_ref(void *obj); +extern void nouveau_fence_handler(struct drm_device *dev, int channel); + +/* nouveau_gem.c */ +extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *, + int size, int align, uint32_t flags, + uint32_t tile_mode, uint32_t tile_flags, + bool no_vm, bool mappable, struct nouveau_bo **); +extern int nouveau_gem_object_new(struct drm_gem_object *); +extern void nouveau_gem_object_del(struct drm_gem_object *); +extern int nouveau_gem_ioctl_new(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_pushbuf(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_pushbuf_call(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_pushbuf_call2(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_pin(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_unpin(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_tile(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_cpu_prep(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_cpu_fini(struct drm_device *, void *, + struct drm_file *); +extern int nouveau_gem_ioctl_info(struct drm_device *, void *, + struct drm_file *); + +/* nv17_gpio.c */ +int nv17_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag); +int nv17_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state); + +#ifndef ioread32_native +#ifdef __BIG_ENDIAN +#define ioread16_native ioread16be +#define iowrite16_native iowrite16be +#define ioread32_native ioread32be +#define iowrite32_native iowrite32be +#else /* def __BIG_ENDIAN */ +#define ioread16_native ioread16 +#define iowrite16_native iowrite16 +#define ioread32_native ioread32 +#define iowrite32_native iowrite32 +#endif /* def __BIG_ENDIAN else */ +#endif /* !ioread32_native */ + +/* channel control reg access */ +static inline u32 nvchan_rd32(struct nouveau_channel *chan, unsigned reg) +{ + return ioread32_native(chan->user + reg); +} + +static inline void nvchan_wr32(struct nouveau_channel *chan, + unsigned reg, u32 val) +{ + iowrite32_native(val, chan->user + reg); +} + +/* register access */ +static inline u32 nv_rd32(struct drm_device *dev, unsigned reg) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + return ioread32_native(dev_priv->mmio + reg); +} + +static inline void nv_wr32(struct drm_device *dev, unsigned reg, u32 val) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + iowrite32_native(val, dev_priv->mmio + reg); +} + +static inline u8 nv_rd08(struct drm_device *dev, unsigned reg) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + return ioread8(dev_priv->mmio + reg); +} + +static inline void nv_wr08(struct drm_device *dev, unsigned reg, u8 val) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + iowrite8(val, dev_priv->mmio + reg); +} + +#define nv_wait(reg, mask, val) \ + nouveau_wait_until(dev, 2000000000ULL, (reg), (mask), (val)) + +/* PRAMIN access */ +static inline u32 nv_ri32(struct drm_device *dev, unsigned offset) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + return ioread32_native(dev_priv->ramin + offset); +} + +static inline void nv_wi32(struct drm_device *dev, unsigned offset, u32 val) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + iowrite32_native(val, dev_priv->ramin + offset); +} + +/* object access */ +static inline u32 nv_ro32(struct drm_device *dev, struct nouveau_gpuobj *obj, + unsigned index) +{ + return nv_ri32(dev, obj->im_pramin->start + index * 4); +} + +static inline void nv_wo32(struct drm_device *dev, struct nouveau_gpuobj *obj, + unsigned index, u32 val) +{ + nv_wi32(dev, obj->im_pramin->start + index * 4, val); +} + +/* + * Logging + * Argument d is (struct drm_device *). + */ +#define NV_PRINTK(level, d, fmt, arg...) \ + printk(level "[" DRM_NAME "] " DRIVER_NAME " %s: " fmt, \ + pci_name(d->pdev), ##arg) +#ifndef NV_DEBUG_NOTRACE +#define NV_DEBUG(d, fmt, arg...) do { \ + if (drm_debug & DRM_UT_DRIVER) { \ + NV_PRINTK(KERN_DEBUG, d, "%s:%d - " fmt, __func__, \ + __LINE__, ##arg); \ + } \ +} while (0) +#define NV_DEBUG_KMS(d, fmt, arg...) do { \ + if (drm_debug & DRM_UT_KMS) { \ + NV_PRINTK(KERN_DEBUG, d, "%s:%d - " fmt, __func__, \ + __LINE__, ##arg); \ + } \ +} while (0) +#else +#define NV_DEBUG(d, fmt, arg...) do { \ + if (drm_debug & DRM_UT_DRIVER) \ + NV_PRINTK(KERN_DEBUG, d, fmt, ##arg); \ +} while (0) +#define NV_DEBUG_KMS(d, fmt, arg...) do { \ + if (drm_debug & DRM_UT_KMS) \ + NV_PRINTK(KERN_DEBUG, d, fmt, ##arg); \ +} while (0) +#endif +#define NV_ERROR(d, fmt, arg...) NV_PRINTK(KERN_ERR, d, fmt, ##arg) +#define NV_INFO(d, fmt, arg...) NV_PRINTK(KERN_INFO, d, fmt, ##arg) +#define NV_TRACEWARN(d, fmt, arg...) NV_PRINTK(KERN_NOTICE, d, fmt, ##arg) +#define NV_TRACE(d, fmt, arg...) NV_PRINTK(KERN_INFO, d, fmt, ##arg) +#define NV_WARN(d, fmt, arg...) NV_PRINTK(KERN_WARNING, d, fmt, ##arg) + +/* nouveau_reg_debug bitmask */ +enum { + NOUVEAU_REG_DEBUG_MC = 0x1, + NOUVEAU_REG_DEBUG_VIDEO = 0x2, + NOUVEAU_REG_DEBUG_FB = 0x4, + NOUVEAU_REG_DEBUG_EXTDEV = 0x8, + NOUVEAU_REG_DEBUG_CRTC = 0x10, + NOUVEAU_REG_DEBUG_RAMDAC = 0x20, + NOUVEAU_REG_DEBUG_VGACRTC = 0x40, + NOUVEAU_REG_DEBUG_RMVIO = 0x80, + NOUVEAU_REG_DEBUG_VGAATTR = 0x100, + NOUVEAU_REG_DEBUG_EVO = 0x200, +}; + +#define NV_REG_DEBUG(type, dev, fmt, arg...) do { \ + if (nouveau_reg_debug & NOUVEAU_REG_DEBUG_##type) \ + NV_PRINTK(KERN_DEBUG, dev, "%s: " fmt, __func__, ##arg); \ +} while (0) + +static inline bool +nv_two_heads(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + const int impl = dev->pci_device & 0x0ff0; + + if (dev_priv->card_type >= NV_10 && impl != 0x0100 && + impl != 0x0150 && impl != 0x01a0 && impl != 0x0200) + return true; + + return false; +} + +static inline bool +nv_gf4_disp_arch(struct drm_device *dev) +{ + return nv_two_heads(dev) && (dev->pci_device & 0x0ff0) != 0x0110; +} + +static inline bool +nv_two_reg_pll(struct drm_device *dev) +{ + struct drm_nouveau_private *dev_priv = dev->dev_private; + const int impl = dev->pci_device & 0x0ff0; + + if (impl == 0x0310 || impl == 0x0340 || dev_priv->card_type >= NV_40) + return true; + return false; +} + +#define NV_SW 0x0000506e +#define NV_SW_DMA_SEMAPHORE 0x00000060 +#define NV_SW_SEMAPHORE_OFFSET 0x00000064 +#define NV_SW_SEMAPHORE_ACQUIRE 0x00000068 +#define NV_SW_SEMAPHORE_RELEASE 0x0000006c +#define NV_SW_DMA_VBLSEM 0x0000018c +#define NV_SW_VBLSEM_OFFSET 0x00000400 +#define NV_SW_VBLSEM_RELEASE_VALUE 0x00000404 +#define NV_SW_VBLSEM_RELEASE 0x00000408 + +#endif /* __NOUVEAU_DRV_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/i810/i810_dma.c +++ linux-2.6.32/drivers/gpu/drm/i810/i810_dma.c @@ -115,7 +115,7 @@ static const struct file_operations i810_buffer_fops = { .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = i810_mmap_buffers, .fasync = drm_fasync, }; --- linux-2.6.32.orig/drivers/gpu/drm/i810/i810_drv.c +++ linux-2.6.32/drivers/gpu/drm/i810/i810_drv.c @@ -59,7 +59,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/mga/mga_drv.c +++ linux-2.6.32/drivers/gpu/drm/mga/mga_drv.c @@ -68,7 +68,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/mga/mga_ioc32.c +++ linux-2.6.32/drivers/gpu/drm/mga/mga_ioc32.c @@ -100,8 +100,7 @@ if (err) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_MGA_INIT, (unsigned long)init); + return drm_ioctl(file, DRM_IOCTL_MGA_INIT, (unsigned long)init); } typedef struct drm_mga_getparam32 { @@ -125,8 +124,7 @@ &getparam->value)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam); + return drm_ioctl(file, DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam); } typedef struct drm_mga_drm_bootstrap32 { @@ -166,8 +164,7 @@ || __put_user(dma_bootstrap32.agp_size, &dma_bootstrap->agp_size)) return -EFAULT; - err = drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_MGA_DMA_BOOTSTRAP, + err = drm_ioctl(file, DRM_IOCTL_MGA_DMA_BOOTSTRAP, (unsigned long)dma_bootstrap); if (err) return err; @@ -220,12 +217,10 @@ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; - lock_kernel(); /* XXX for now */ if (fn != NULL) ret = (*fn) (filp, cmd, arg); else - ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); - unlock_kernel(); + ret = drm_ioctl(filp, cmd, arg); return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/i2c/ch7006_drv.c +++ linux-2.6.32/drivers/gpu/drm/i2c/ch7006_drv.c @@ -0,0 +1,536 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "ch7006_priv.h" + +/* DRM encoder functions */ + +static void ch7006_encoder_set_config(struct drm_encoder *encoder, + void *params) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + + priv->params = params; +} + +static void ch7006_encoder_destroy(struct drm_encoder *encoder) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + + drm_property_destroy(encoder->dev, priv->scale_property); + + kfree(priv); + to_encoder_slave(encoder)->slave_priv = NULL; + + drm_i2c_encoder_destroy(encoder); +} + +static void ch7006_encoder_dpms(struct drm_encoder *encoder, int mode) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_state *state = &priv->state; + + ch7006_dbg(client, "\n"); + + if (mode == priv->last_dpms) + return; + priv->last_dpms = mode; + + ch7006_setup_power_state(encoder); + + ch7006_load_reg(client, state, CH7006_POWER); +} + +static void ch7006_encoder_save(struct drm_encoder *encoder) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + + ch7006_dbg(client, "\n"); + + ch7006_state_save(client, &priv->saved_state); +} + +static void ch7006_encoder_restore(struct drm_encoder *encoder) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + + ch7006_dbg(client, "\n"); + + ch7006_state_load(client, &priv->saved_state); +} + +static bool ch7006_encoder_mode_fixup(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + + /* The ch7006 is painfully picky with the input timings so no + * custom modes for now... */ + + priv->mode = ch7006_lookup_mode(encoder, mode); + + return !!priv->mode; +} + +static int ch7006_encoder_mode_valid(struct drm_encoder *encoder, + struct drm_display_mode *mode) +{ + if (ch7006_lookup_mode(encoder, mode)) + return MODE_OK; + else + return MODE_BAD; +} + +static void ch7006_encoder_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *drm_mode, + struct drm_display_mode *adjusted_mode) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_encoder_params *params = priv->params; + struct ch7006_state *state = &priv->state; + uint8_t *regs = state->regs; + struct ch7006_mode *mode = priv->mode; + struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm]; + int start_active; + + ch7006_dbg(client, "\n"); + + regs[CH7006_DISPMODE] = norm->dispmode | mode->dispmode; + regs[CH7006_BWIDTH] = 0; + regs[CH7006_INPUT_FORMAT] = bitf(CH7006_INPUT_FORMAT_FORMAT, + params->input_format); + + regs[CH7006_CLKMODE] = CH7006_CLKMODE_SUBC_LOCK + | bitf(CH7006_CLKMODE_XCM, params->xcm) + | bitf(CH7006_CLKMODE_PCM, params->pcm); + if (params->clock_mode) + regs[CH7006_CLKMODE] |= CH7006_CLKMODE_MASTER; + if (params->clock_edge) + regs[CH7006_CLKMODE] |= CH7006_CLKMODE_POS_EDGE; + + start_active = (drm_mode->htotal & ~0x7) - (drm_mode->hsync_start & ~0x7); + regs[CH7006_POV] = bitf(CH7006_POV_START_ACTIVE_8, start_active); + regs[CH7006_START_ACTIVE] = bitf(CH7006_START_ACTIVE_0, start_active); + + regs[CH7006_INPUT_SYNC] = 0; + if (params->sync_direction) + regs[CH7006_INPUT_SYNC] |= CH7006_INPUT_SYNC_OUTPUT; + if (params->sync_encoding) + regs[CH7006_INPUT_SYNC] |= CH7006_INPUT_SYNC_EMBEDDED; + if (drm_mode->flags & DRM_MODE_FLAG_PVSYNC) + regs[CH7006_INPUT_SYNC] |= CH7006_INPUT_SYNC_PVSYNC; + if (drm_mode->flags & DRM_MODE_FLAG_PHSYNC) + regs[CH7006_INPUT_SYNC] |= CH7006_INPUT_SYNC_PHSYNC; + + regs[CH7006_DETECT] = 0; + regs[CH7006_BCLKOUT] = 0; + + regs[CH7006_SUBC_INC3] = 0; + if (params->pout_level) + regs[CH7006_SUBC_INC3] |= CH7006_SUBC_INC3_POUT_3_3V; + + regs[CH7006_SUBC_INC4] = 0; + if (params->active_detect) + regs[CH7006_SUBC_INC4] |= CH7006_SUBC_INC4_DS_INPUT; + + regs[CH7006_PLL_CONTROL] = priv->saved_state.regs[CH7006_PLL_CONTROL]; + + ch7006_setup_levels(encoder); + ch7006_setup_subcarrier(encoder); + ch7006_setup_pll(encoder); + ch7006_setup_power_state(encoder); + ch7006_setup_properties(encoder); + + ch7006_state_load(client, state); +} + +static enum drm_connector_status ch7006_encoder_detect(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_state *state = &priv->state; + int det; + + ch7006_dbg(client, "\n"); + + ch7006_save_reg(client, state, CH7006_DETECT); + ch7006_save_reg(client, state, CH7006_POWER); + ch7006_save_reg(client, state, CH7006_CLKMODE); + + ch7006_write(client, CH7006_POWER, CH7006_POWER_RESET | + bitfs(CH7006_POWER_LEVEL, NORMAL)); + ch7006_write(client, CH7006_CLKMODE, CH7006_CLKMODE_MASTER); + + ch7006_write(client, CH7006_DETECT, CH7006_DETECT_SENSE); + + ch7006_write(client, CH7006_DETECT, 0); + + det = ch7006_read(client, CH7006_DETECT); + + ch7006_load_reg(client, state, CH7006_CLKMODE); + ch7006_load_reg(client, state, CH7006_POWER); + ch7006_load_reg(client, state, CH7006_DETECT); + + if ((det & (CH7006_DETECT_SVIDEO_Y_TEST| + CH7006_DETECT_SVIDEO_C_TEST| + CH7006_DETECT_CVBS_TEST)) == 0) + priv->subconnector = DRM_MODE_SUBCONNECTOR_SCART; + else if ((det & (CH7006_DETECT_SVIDEO_Y_TEST| + CH7006_DETECT_SVIDEO_C_TEST)) == 0) + priv->subconnector = DRM_MODE_SUBCONNECTOR_SVIDEO; + else if ((det & CH7006_DETECT_CVBS_TEST) == 0) + priv->subconnector = DRM_MODE_SUBCONNECTOR_Composite; + else + priv->subconnector = DRM_MODE_SUBCONNECTOR_Unknown; + + drm_connector_property_set_value(connector, + encoder->dev->mode_config.tv_subconnector_property, + priv->subconnector); + + return priv->subconnector ? connector_status_connected : + connector_status_disconnected; +} + +static int ch7006_encoder_get_modes(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_mode *mode; + int n = 0; + + for (mode = ch7006_modes; mode->mode.clock; mode++) { + if (~mode->valid_scales & 1<scale || + ~mode->valid_norms & 1<norm) + continue; + + drm_mode_probed_add(connector, + drm_mode_duplicate(encoder->dev, &mode->mode)); + + n++; + } + + return n; +} + +static int ch7006_encoder_create_resources(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct drm_device *dev = encoder->dev; + struct drm_mode_config *conf = &dev->mode_config; + + drm_mode_create_tv_properties(dev, NUM_TV_NORMS, ch7006_tv_norm_names); + + priv->scale_property = drm_property_create(dev, DRM_MODE_PROP_RANGE, + "scale", 2); + priv->scale_property->values[0] = 0; + priv->scale_property->values[1] = 2; + + drm_connector_attach_property(connector, conf->tv_select_subconnector_property, + priv->select_subconnector); + drm_connector_attach_property(connector, conf->tv_subconnector_property, + priv->subconnector); + drm_connector_attach_property(connector, conf->tv_left_margin_property, + priv->hmargin); + drm_connector_attach_property(connector, conf->tv_bottom_margin_property, + priv->vmargin); + drm_connector_attach_property(connector, conf->tv_mode_property, + priv->norm); + drm_connector_attach_property(connector, conf->tv_brightness_property, + priv->brightness); + drm_connector_attach_property(connector, conf->tv_contrast_property, + priv->contrast); + drm_connector_attach_property(connector, conf->tv_flicker_reduction_property, + priv->flicker); + drm_connector_attach_property(connector, priv->scale_property, + priv->scale); + + return 0; +} + +static int ch7006_encoder_set_property(struct drm_encoder *encoder, + struct drm_connector *connector, + struct drm_property *property, + uint64_t val) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_state *state = &priv->state; + struct drm_mode_config *conf = &encoder->dev->mode_config; + struct drm_crtc *crtc = encoder->crtc; + bool modes_changed = false; + + ch7006_dbg(client, "\n"); + + if (property == conf->tv_select_subconnector_property) { + priv->select_subconnector = val; + + ch7006_setup_power_state(encoder); + + ch7006_load_reg(client, state, CH7006_POWER); + + } else if (property == conf->tv_left_margin_property) { + priv->hmargin = val; + + ch7006_setup_properties(encoder); + + ch7006_load_reg(client, state, CH7006_POV); + ch7006_load_reg(client, state, CH7006_HPOS); + + } else if (property == conf->tv_bottom_margin_property) { + priv->vmargin = val; + + ch7006_setup_properties(encoder); + + ch7006_load_reg(client, state, CH7006_POV); + ch7006_load_reg(client, state, CH7006_VPOS); + + } else if (property == conf->tv_mode_property) { + if (connector->dpms != DRM_MODE_DPMS_OFF) + return -EINVAL; + + priv->norm = val; + + modes_changed = true; + + } else if (property == conf->tv_brightness_property) { + priv->brightness = val; + + ch7006_setup_levels(encoder); + + ch7006_load_reg(client, state, CH7006_BLACK_LEVEL); + + } else if (property == conf->tv_contrast_property) { + priv->contrast = val; + + ch7006_setup_properties(encoder); + + ch7006_load_reg(client, state, CH7006_CONTRAST); + + } else if (property == conf->tv_flicker_reduction_property) { + priv->flicker = val; + + ch7006_setup_properties(encoder); + + ch7006_load_reg(client, state, CH7006_FFILTER); + + } else if (property == priv->scale_property) { + if (connector->dpms != DRM_MODE_DPMS_OFF) + return -EINVAL; + + priv->scale = val; + + modes_changed = true; + + } else { + return -EINVAL; + } + + if (modes_changed) { + drm_helper_probe_single_connector_modes(connector, 0, 0); + + /* Disable the crtc to ensure a full modeset is + * performed whenever it's turned on again. */ + if (crtc) { + struct drm_mode_set modeset = { + .crtc = crtc, + }; + + crtc->funcs->set_config(&modeset); + } + } + + return 0; +} + +static struct drm_encoder_slave_funcs ch7006_encoder_funcs = { + .set_config = ch7006_encoder_set_config, + .destroy = ch7006_encoder_destroy, + .dpms = ch7006_encoder_dpms, + .save = ch7006_encoder_save, + .restore = ch7006_encoder_restore, + .mode_fixup = ch7006_encoder_mode_fixup, + .mode_valid = ch7006_encoder_mode_valid, + .mode_set = ch7006_encoder_mode_set, + .detect = ch7006_encoder_detect, + .get_modes = ch7006_encoder_get_modes, + .create_resources = ch7006_encoder_create_resources, + .set_property = ch7006_encoder_set_property, +}; + + +/* I2C driver functions */ + +static int ch7006_probe(struct i2c_client *client, const struct i2c_device_id *id) +{ + uint8_t addr = CH7006_VERSION_ID; + uint8_t val; + int ret; + + ch7006_dbg(client, "\n"); + + ret = i2c_master_send(client, &addr, sizeof(addr)); + if (ret < 0) + goto fail; + + ret = i2c_master_recv(client, &val, sizeof(val)); + if (ret < 0) + goto fail; + + ch7006_info(client, "Detected version ID: %x\n", val); + + /* I don't know what this is for, but otherwise I get no + * signal. + */ + ch7006_write(client, 0x3d, 0x0); + + return 0; + +fail: + ch7006_err(client, "Error %d reading version ID\n", ret); + + return -ENODEV; +} + +static int ch7006_remove(struct i2c_client *client) +{ + ch7006_dbg(client, "\n"); + + return 0; +} + +static int ch7006_encoder_init(struct i2c_client *client, + struct drm_device *dev, + struct drm_encoder_slave *encoder) +{ + struct ch7006_priv *priv; + int i; + + ch7006_dbg(client, "\n"); + + priv = kzalloc(sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + encoder->slave_priv = priv; + encoder->slave_funcs = &ch7006_encoder_funcs; + + priv->norm = TV_NORM_PAL; + priv->select_subconnector = DRM_MODE_SUBCONNECTOR_Automatic; + priv->subconnector = DRM_MODE_SUBCONNECTOR_Unknown; + priv->scale = 1; + priv->contrast = 50; + priv->brightness = 50; + priv->flicker = 50; + priv->hmargin = 50; + priv->vmargin = 50; + priv->last_dpms = -1; + + if (ch7006_tv_norm) { + for (i = 0; i < NUM_TV_NORMS; i++) { + if (!strcmp(ch7006_tv_norm_names[i], ch7006_tv_norm)) { + priv->norm = i; + break; + } + } + + if (i == NUM_TV_NORMS) + ch7006_err(client, "Invalid TV norm setting \"%s\".\n", + ch7006_tv_norm); + } + + if (ch7006_scale >= 0 && ch7006_scale <= 2) + priv->scale = ch7006_scale; + else + ch7006_err(client, "Invalid scale setting \"%d\".\n", + ch7006_scale); + + return 0; +} + +static struct i2c_device_id ch7006_ids[] = { + { "ch7006", 0 }, + { } +}; +MODULE_DEVICE_TABLE(i2c, ch7006_ids); + +static struct drm_i2c_encoder_driver ch7006_driver = { + .i2c_driver = { + .probe = ch7006_probe, + .remove = ch7006_remove, + + .driver = { + .name = "ch7006", + }, + + .id_table = ch7006_ids, + }, + + .encoder_init = ch7006_encoder_init, +}; + + +/* Module initialization */ + +static int __init ch7006_init(void) +{ + return drm_i2c_encoder_register(THIS_MODULE, &ch7006_driver); +} + +static void __exit ch7006_exit(void) +{ + drm_i2c_encoder_unregister(&ch7006_driver); +} + +int ch7006_debug; +module_param_named(debug, ch7006_debug, int, 0600); +MODULE_PARM_DESC(debug, "Enable debug output."); + +char *ch7006_tv_norm; +module_param_named(tv_norm, ch7006_tv_norm, charp, 0600); +MODULE_PARM_DESC(tv_norm, "Default TV norm.\n" + "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, PAL-60, NTSC-M, NTSC-J.\n" + "\t\tDefault: PAL"); + +int ch7006_scale = 1; +module_param_named(scale, ch7006_scale, int, 0600); +MODULE_PARM_DESC(scale, "Default scale.\n" + "\t\tSupported: 0 -> Select video modes with a higher blanking ratio.\n" + "\t\t\t1 -> Select default video modes.\n" + "\t\t\t2 -> Select video modes with a lower blanking ratio."); + +MODULE_AUTHOR("Francisco Jerez "); +MODULE_DESCRIPTION("Chrontel ch7006 TV encoder driver"); +MODULE_LICENSE("GPL and additional rights"); + +module_init(ch7006_init); +module_exit(ch7006_exit); --- linux-2.6.32.orig/drivers/gpu/drm/i2c/ch7006_priv.h +++ linux-2.6.32/drivers/gpu/drm/i2c/ch7006_priv.h @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __DRM_I2C_CH7006_PRIV_H__ +#define __DRM_I2C_CH7006_PRIV_H__ + +#include "drmP.h" +#include "drm_crtc_helper.h" +#include "drm_encoder_slave.h" +#include "i2c/ch7006.h" + +typedef int64_t fixed; +#define fixed1 (1LL << 32) + +enum ch7006_tv_norm { + TV_NORM_PAL, + TV_NORM_PAL_M, + TV_NORM_PAL_N, + TV_NORM_PAL_NC, + TV_NORM_PAL_60, + TV_NORM_NTSC_M, + TV_NORM_NTSC_J, + NUM_TV_NORMS +}; + +struct ch7006_tv_norm_info { + fixed vrefresh; + int vdisplay; + int vtotal; + int hvirtual; + + fixed subc_freq; + fixed black_level; + + uint32_t dispmode; + int voffset; +}; + +struct ch7006_mode { + struct drm_display_mode mode; + + int enc_hdisp; + int enc_vdisp; + + fixed subc_coeff; + uint32_t dispmode; + + uint32_t valid_scales; + uint32_t valid_norms; +}; + +struct ch7006_state { + uint8_t regs[0x26]; +}; + +struct ch7006_priv { + struct ch7006_encoder_params *params; + struct ch7006_mode *mode; + + struct ch7006_state state; + struct ch7006_state saved_state; + + struct drm_property *scale_property; + + int select_subconnector; + int subconnector; + int hmargin; + int vmargin; + enum ch7006_tv_norm norm; + int brightness; + int contrast; + int flicker; + int scale; + + int last_dpms; +}; + +#define to_ch7006_priv(x) \ + ((struct ch7006_priv *)to_encoder_slave(x)->slave_priv) + +extern int ch7006_debug; +extern char *ch7006_tv_norm; +extern int ch7006_scale; + +extern char *ch7006_tv_norm_names[]; +extern struct ch7006_tv_norm_info ch7006_tv_norms[]; +extern struct ch7006_mode ch7006_modes[]; + +struct ch7006_mode *ch7006_lookup_mode(struct drm_encoder *encoder, + struct drm_display_mode *drm_mode); + +void ch7006_setup_levels(struct drm_encoder *encoder); +void ch7006_setup_subcarrier(struct drm_encoder *encoder); +void ch7006_setup_pll(struct drm_encoder *encoder); +void ch7006_setup_power_state(struct drm_encoder *encoder); +void ch7006_setup_properties(struct drm_encoder *encoder); + +void ch7006_write(struct i2c_client *client, uint8_t addr, uint8_t val); +uint8_t ch7006_read(struct i2c_client *client, uint8_t addr); + +void ch7006_state_load(struct i2c_client *client, + struct ch7006_state *state); +void ch7006_state_save(struct i2c_client *client, + struct ch7006_state *state); + +/* Some helper macros */ + +#define ch7006_dbg(client, format, ...) do { \ + if (ch7006_debug) \ + dev_printk(KERN_DEBUG, &client->dev, \ + "%s: " format, __func__, ## __VA_ARGS__); \ + } while (0) +#define ch7006_info(client, format, ...) \ + dev_info(&client->dev, format, __VA_ARGS__) +#define ch7006_err(client, format, ...) \ + dev_err(&client->dev, format, __VA_ARGS__) + +#define __mask(src, bitfield) \ + (((2 << (1 ? bitfield)) - 1) & ~((1 << (0 ? bitfield)) - 1)) +#define mask(bitfield) __mask(bitfield) + +#define __bitf(src, bitfield, x) \ + (((x) >> (src) << (0 ? bitfield)) & __mask(src, bitfield)) +#define bitf(bitfield, x) __bitf(bitfield, x) +#define bitfs(bitfield, s) __bitf(bitfield, bitfield##_##s) +#define setbitf(state, reg, bitfield, x) \ + state->regs[reg] = (state->regs[reg] & ~mask(reg##_##bitfield)) \ + | bitf(reg##_##bitfield, x) + +#define __unbitf(src, bitfield, x) \ + ((x & __mask(src, bitfield)) >> (0 ? bitfield) << (src)) +#define unbitf(bitfield, x) __unbitf(bitfield, x) + +static inline int interpolate(int y0, int y1, int y2, int x) +{ + return y1 + (x < 50 ? y1 - y0 : y2 - y1) * (x - 50) / 50; +} + +static inline int32_t round_fixed(fixed x) +{ + return (x + fixed1/2) >> 32; +} + +#define ch7006_load_reg(client, state, reg) ch7006_write(client, reg, state->regs[reg]) +#define ch7006_save_reg(client, state, reg) state->regs[reg] = ch7006_read(client, reg) + +/* Fixed hardware specs */ + +#define CH7006_FREQ0 14318 +#define CH7006_MAXN 650 +#define CH7006_MAXM 315 + +/* Register definitions */ + +#define CH7006_DISPMODE 0x00 +#define CH7006_DISPMODE_INPUT_RES 0, 7:5 +#define CH7006_DISPMODE_INPUT_RES_512x384 0x0 +#define CH7006_DISPMODE_INPUT_RES_720x400 0x1 +#define CH7006_DISPMODE_INPUT_RES_640x400 0x2 +#define CH7006_DISPMODE_INPUT_RES_640x480 0x3 +#define CH7006_DISPMODE_INPUT_RES_800x600 0x4 +#define CH7006_DISPMODE_INPUT_RES_NATIVE 0x5 +#define CH7006_DISPMODE_OUTPUT_STD 0, 4:3 +#define CH7006_DISPMODE_OUTPUT_STD_PAL 0x0 +#define CH7006_DISPMODE_OUTPUT_STD_NTSC 0x1 +#define CH7006_DISPMODE_OUTPUT_STD_PAL_M 0x2 +#define CH7006_DISPMODE_OUTPUT_STD_NTSC_J 0x3 +#define CH7006_DISPMODE_SCALING_RATIO 0, 2:0 +#define CH7006_DISPMODE_SCALING_RATIO_5_4 0x0 +#define CH7006_DISPMODE_SCALING_RATIO_1_1 0x1 +#define CH7006_DISPMODE_SCALING_RATIO_7_8 0x2 +#define CH7006_DISPMODE_SCALING_RATIO_5_6 0x3 +#define CH7006_DISPMODE_SCALING_RATIO_3_4 0x4 +#define CH7006_DISPMODE_SCALING_RATIO_7_10 0x5 + +#define CH7006_FFILTER 0x01 +#define CH7006_FFILTER_TEXT 0, 5:4 +#define CH7006_FFILTER_LUMA 0, 3:2 +#define CH7006_FFILTER_CHROMA 0, 1:0 +#define CH7006_FFILTER_CHROMA_NO_DCRAWL 0x3 + +#define CH7006_BWIDTH 0x03 +#define CH7006_BWIDTH_5L_FFILER (1 << 7) +#define CH7006_BWIDTH_CVBS_NO_CHROMA (1 << 6) +#define CH7006_BWIDTH_CHROMA 0, 5:4 +#define CH7006_BWIDTH_SVIDEO_YPEAK (1 << 3) +#define CH7006_BWIDTH_SVIDEO_LUMA 0, 2:1 +#define CH7006_BWIDTH_CVBS_LUMA 0, 0:0 + +#define CH7006_INPUT_FORMAT 0x04 +#define CH7006_INPUT_FORMAT_DAC_GAIN (1 << 6) +#define CH7006_INPUT_FORMAT_RGB_PASS_THROUGH (1 << 5) +#define CH7006_INPUT_FORMAT_FORMAT 0, 3:0 +#define CH7006_INPUT_FORMAT_FORMAT_RGB16 0x0 +#define CH7006_INPUT_FORMAT_FORMAT_YCrCb24m16 0x1 +#define CH7006_INPUT_FORMAT_FORMAT_RGB24m16 0x2 +#define CH7006_INPUT_FORMAT_FORMAT_RGB15 0x3 +#define CH7006_INPUT_FORMAT_FORMAT_RGB24m12C 0x4 +#define CH7006_INPUT_FORMAT_FORMAT_RGB24m12I 0x5 +#define CH7006_INPUT_FORMAT_FORMAT_RGB24m8 0x6 +#define CH7006_INPUT_FORMAT_FORMAT_RGB16m8 0x7 +#define CH7006_INPUT_FORMAT_FORMAT_RGB15m8 0x8 +#define CH7006_INPUT_FORMAT_FORMAT_YCrCb24m8 0x9 + +#define CH7006_CLKMODE 0x06 +#define CH7006_CLKMODE_SUBC_LOCK (1 << 7) +#define CH7006_CLKMODE_MASTER (1 << 6) +#define CH7006_CLKMODE_POS_EDGE (1 << 4) +#define CH7006_CLKMODE_XCM 0, 3:2 +#define CH7006_CLKMODE_PCM 0, 1:0 + +#define CH7006_START_ACTIVE 0x07 +#define CH7006_START_ACTIVE_0 0, 7:0 + +#define CH7006_POV 0x08 +#define CH7006_POV_START_ACTIVE_8 8, 2:2 +#define CH7006_POV_HPOS_8 8, 1:1 +#define CH7006_POV_VPOS_8 8, 0:0 + +#define CH7006_BLACK_LEVEL 0x09 +#define CH7006_BLACK_LEVEL_0 0, 7:0 + +#define CH7006_HPOS 0x0a +#define CH7006_HPOS_0 0, 7:0 + +#define CH7006_VPOS 0x0b +#define CH7006_VPOS_0 0, 7:0 + +#define CH7006_INPUT_SYNC 0x0d +#define CH7006_INPUT_SYNC_EMBEDDED (1 << 3) +#define CH7006_INPUT_SYNC_OUTPUT (1 << 2) +#define CH7006_INPUT_SYNC_PVSYNC (1 << 1) +#define CH7006_INPUT_SYNC_PHSYNC (1 << 0) + +#define CH7006_POWER 0x0e +#define CH7006_POWER_SCART (1 << 4) +#define CH7006_POWER_RESET (1 << 3) +#define CH7006_POWER_LEVEL 0, 2:0 +#define CH7006_POWER_LEVEL_CVBS_OFF 0x0 +#define CH7006_POWER_LEVEL_POWER_OFF 0x1 +#define CH7006_POWER_LEVEL_SVIDEO_OFF 0x2 +#define CH7006_POWER_LEVEL_NORMAL 0x3 +#define CH7006_POWER_LEVEL_FULL_POWER_OFF 0x4 + +#define CH7006_DETECT 0x10 +#define CH7006_DETECT_SVIDEO_Y_TEST (1 << 3) +#define CH7006_DETECT_SVIDEO_C_TEST (1 << 2) +#define CH7006_DETECT_CVBS_TEST (1 << 1) +#define CH7006_DETECT_SENSE (1 << 0) + +#define CH7006_CONTRAST 0x11 +#define CH7006_CONTRAST_0 0, 2:0 + +#define CH7006_PLLOV 0x13 +#define CH7006_PLLOV_N_8 8, 2:1 +#define CH7006_PLLOV_M_8 8, 0:0 + +#define CH7006_PLLM 0x14 +#define CH7006_PLLM_0 0, 7:0 + +#define CH7006_PLLN 0x15 +#define CH7006_PLLN_0 0, 7:0 + +#define CH7006_BCLKOUT 0x17 + +#define CH7006_SUBC_INC0 0x18 +#define CH7006_SUBC_INC0_28 28, 3:0 + +#define CH7006_SUBC_INC1 0x19 +#define CH7006_SUBC_INC1_24 24, 3:0 + +#define CH7006_SUBC_INC2 0x1a +#define CH7006_SUBC_INC2_20 20, 3:0 + +#define CH7006_SUBC_INC3 0x1b +#define CH7006_SUBC_INC3_GPIO1_VAL (1 << 7) +#define CH7006_SUBC_INC3_GPIO0_VAL (1 << 6) +#define CH7006_SUBC_INC3_POUT_3_3V (1 << 5) +#define CH7006_SUBC_INC3_POUT_INV (1 << 4) +#define CH7006_SUBC_INC3_16 16, 3:0 + +#define CH7006_SUBC_INC4 0x1c +#define CH7006_SUBC_INC4_GPIO1_IN (1 << 7) +#define CH7006_SUBC_INC4_GPIO0_IN (1 << 6) +#define CH7006_SUBC_INC4_DS_INPUT (1 << 4) +#define CH7006_SUBC_INC4_12 12, 3:0 + +#define CH7006_SUBC_INC5 0x1d +#define CH7006_SUBC_INC5_8 8, 3:0 + +#define CH7006_SUBC_INC6 0x1e +#define CH7006_SUBC_INC6_4 4, 3:0 + +#define CH7006_SUBC_INC7 0x1f +#define CH7006_SUBC_INC7_0 0, 3:0 + +#define CH7006_PLL_CONTROL 0x20 +#define CH7006_PLL_CONTROL_CPI (1 << 5) +#define CH7006_PLL_CONTROL_CAPACITOR (1 << 4) +#define CH7006_PLL_CONTROL_7STAGES (1 << 3) +#define CH7006_PLL_CONTROL_DIGITAL_5V (1 << 2) +#define CH7006_PLL_CONTROL_ANALOG_5V (1 << 1) +#define CH7006_PLL_CONTROL_MEMORY_5V (1 << 0) + +#define CH7006_CALC_SUBC_INC0 0x21 +#define CH7006_CALC_SUBC_INC0_24 24, 4:3 +#define CH7006_CALC_SUBC_INC0_HYST 0, 2:1 +#define CH7006_CALC_SUBC_INC0_AUTO (1 << 0) + +#define CH7006_CALC_SUBC_INC1 0x22 +#define CH7006_CALC_SUBC_INC1_16 16, 7:0 + +#define CH7006_CALC_SUBC_INC2 0x23 +#define CH7006_CALC_SUBC_INC2_8 8, 7:0 + +#define CH7006_CALC_SUBC_INC3 0x24 +#define CH7006_CALC_SUBC_INC3_0 0, 7:0 + +#define CH7006_VERSION_ID 0x25 + +#endif --- linux-2.6.32.orig/drivers/gpu/drm/i2c/ch7006_mode.c +++ linux-2.6.32/drivers/gpu/drm/i2c/ch7006_mode.c @@ -0,0 +1,468 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "ch7006_priv.h" + +char *ch7006_tv_norm_names[] = { + [TV_NORM_PAL] = "PAL", + [TV_NORM_PAL_M] = "PAL-M", + [TV_NORM_PAL_N] = "PAL-N", + [TV_NORM_PAL_NC] = "PAL-Nc", + [TV_NORM_PAL_60] = "PAL-60", + [TV_NORM_NTSC_M] = "NTSC-M", + [TV_NORM_NTSC_J] = "NTSC-J", +}; + +#define NTSC_LIKE_TIMINGS .vrefresh = 60 * fixed1/1.001, \ + .vdisplay = 480, \ + .vtotal = 525, \ + .hvirtual = 660 + +#define PAL_LIKE_TIMINGS .vrefresh = 50 * fixed1, \ + .vdisplay = 576, \ + .vtotal = 625, \ + .hvirtual = 810 + +struct ch7006_tv_norm_info ch7006_tv_norms[] = { + [TV_NORM_NTSC_M] = { + NTSC_LIKE_TIMINGS, + .black_level = 0.339 * fixed1, + .subc_freq = 3579545 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, NTSC), + .voffset = 0, + }, + [TV_NORM_NTSC_J] = { + NTSC_LIKE_TIMINGS, + .black_level = 0.286 * fixed1, + .subc_freq = 3579545 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, NTSC_J), + .voffset = 0, + }, + [TV_NORM_PAL] = { + PAL_LIKE_TIMINGS, + .black_level = 0.3 * fixed1, + .subc_freq = 4433618.75 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, PAL), + .voffset = 0, + }, + [TV_NORM_PAL_M] = { + NTSC_LIKE_TIMINGS, + .black_level = 0.339 * fixed1, + .subc_freq = 3575611.433 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, PAL_M), + .voffset = 16, + }, + + /* The following modes seem to work right but they're + * undocumented */ + + [TV_NORM_PAL_N] = { + PAL_LIKE_TIMINGS, + .black_level = 0.339 * fixed1, + .subc_freq = 4433618.75 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, PAL), + .voffset = 0, + }, + [TV_NORM_PAL_NC] = { + PAL_LIKE_TIMINGS, + .black_level = 0.3 * fixed1, + .subc_freq = 3582056.25 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, PAL), + .voffset = 0, + }, + [TV_NORM_PAL_60] = { + NTSC_LIKE_TIMINGS, + .black_level = 0.3 * fixed1, + .subc_freq = 4433618.75 * fixed1, + .dispmode = bitfs(CH7006_DISPMODE_OUTPUT_STD, PAL_M), + .voffset = 16, + }, +}; + +#define __MODE(f, hd, vd, ht, vt, hsynp, vsynp, \ + subc, scale, scale_mask, norm_mask, e_hd, e_vd) { \ + .mode = { \ + .name = #hd "x" #vd, \ + .status = 0, \ + .type = DRM_MODE_TYPE_DRIVER, \ + .clock = f, \ + .hdisplay = hd, \ + .hsync_start = e_hd + 16, \ + .hsync_end = e_hd + 80, \ + .htotal = ht, \ + .hskew = 0, \ + .vdisplay = vd, \ + .vsync_start = vd + 10, \ + .vsync_end = vd + 26, \ + .vtotal = vt, \ + .vscan = 0, \ + .flags = DRM_MODE_FLAG_##hsynp##HSYNC | \ + DRM_MODE_FLAG_##vsynp##VSYNC, \ + .vrefresh = 0, \ + }, \ + .enc_hdisp = e_hd, \ + .enc_vdisp = e_vd, \ + .subc_coeff = subc * fixed1, \ + .dispmode = bitfs(CH7006_DISPMODE_SCALING_RATIO, scale) | \ + bitfs(CH7006_DISPMODE_INPUT_RES, e_hd##x##e_vd), \ + .valid_scales = scale_mask, \ + .valid_norms = norm_mask \ + } + +#define MODE(f, hd, vd, ht, vt, hsynp, vsynp, \ + subc, scale, scale_mask, norm_mask) \ + __MODE(f, hd, vd, ht, vt, hsynp, vsynp, subc, scale, \ + scale_mask, norm_mask, hd, vd) + +#define NTSC_LIKE (1 << TV_NORM_NTSC_M | 1 << TV_NORM_NTSC_J | \ + 1 << TV_NORM_PAL_M | 1 << TV_NORM_PAL_60) + +#define PAL_LIKE (1 << TV_NORM_PAL | 1 << TV_NORM_PAL_N | 1 << TV_NORM_PAL_NC) + +struct ch7006_mode ch7006_modes[] = { + MODE(21000, 512, 384, 840, 500, N, N, 181.797557582, 5_4, 0x6, PAL_LIKE), + MODE(26250, 512, 384, 840, 625, N, N, 145.438046066, 1_1, 0x1, PAL_LIKE), + MODE(20140, 512, 384, 800, 420, N, N, 213.257083791, 5_4, 0x4, NTSC_LIKE), + MODE(24671, 512, 384, 784, 525, N, N, 174.0874153, 1_1, 0x3, NTSC_LIKE), + MODE(28125, 720, 400, 1125, 500, N, N, 135.742176298, 5_4, 0x6, PAL_LIKE), + MODE(34875, 720, 400, 1116, 625, N, N, 109.469496898, 1_1, 0x1, PAL_LIKE), + MODE(23790, 720, 400, 945, 420, N, N, 160.475642016, 5_4, 0x4, NTSC_LIKE), + MODE(29455, 720, 400, 936, 525, N, N, 129.614941843, 1_1, 0x3, NTSC_LIKE), + MODE(25000, 640, 400, 1000, 500, N, N, 152.709948279, 5_4, 0x6, PAL_LIKE), + MODE(31500, 640, 400, 1008, 625, N, N, 121.198371646, 1_1, 0x1, PAL_LIKE), + MODE(21147, 640, 400, 840, 420, N, N, 180.535097338, 5_4, 0x4, NTSC_LIKE), + MODE(26434, 640, 400, 840, 525, N, N, 144.42807787, 1_1, 0x2, NTSC_LIKE), + MODE(30210, 640, 400, 840, 600, N, N, 126.374568276, 7_8, 0x1, NTSC_LIKE), + MODE(21000, 640, 480, 840, 500, N, N, 181.797557582, 5_4, 0x4, PAL_LIKE), + MODE(26250, 640, 480, 840, 625, N, N, 145.438046066, 1_1, 0x2, PAL_LIKE), + MODE(31500, 640, 480, 840, 750, N, N, 121.198371646, 5_6, 0x1, PAL_LIKE), + MODE(24671, 640, 480, 784, 525, N, N, 174.0874153, 1_1, 0x4, NTSC_LIKE), + MODE(28196, 640, 480, 784, 600, N, N, 152.326488422, 7_8, 0x2, NTSC_LIKE), + MODE(30210, 640, 480, 800, 630, N, N, 142.171389101, 5_6, 0x1, NTSC_LIKE), + __MODE(29500, 720, 576, 944, 625, P, P, 145.592111636, 1_1, 0x7, PAL_LIKE, 800, 600), + MODE(36000, 800, 600, 960, 750, P, P, 119.304647022, 5_6, 0x6, PAL_LIKE), + MODE(39000, 800, 600, 936, 836, P, P, 110.127366499, 3_4, 0x1, PAL_LIKE), + MODE(39273, 800, 600, 1040, 630, P, P, 145.816809399, 5_6, 0x4, NTSC_LIKE), + MODE(43636, 800, 600, 1040, 700, P, P, 131.235128487, 3_4, 0x2, NTSC_LIKE), + MODE(47832, 800, 600, 1064, 750, P, P, 119.723275165, 7_10, 0x1, NTSC_LIKE), + {} +}; + +struct ch7006_mode *ch7006_lookup_mode(struct drm_encoder *encoder, + struct drm_display_mode *drm_mode) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_mode *mode; + + for (mode = ch7006_modes; mode->mode.clock; mode++) { + + if (~mode->valid_norms & 1<norm) + continue; + + if (mode->mode.hdisplay != drm_mode->hdisplay || + mode->mode.vdisplay != drm_mode->vdisplay || + mode->mode.vtotal != drm_mode->vtotal || + mode->mode.htotal != drm_mode->htotal || + mode->mode.clock != drm_mode->clock) + continue; + + return mode; + } + + return NULL; +} + +/* Some common HW state calculation code */ + +void ch7006_setup_levels(struct drm_encoder *encoder) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + uint8_t *regs = priv->state.regs; + struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm]; + int gain; + int black_level; + + /* Set DAC_GAIN if the voltage drop between white and black is + * high enough. */ + if (norm->black_level < 339*fixed1/1000) { + gain = 76; + + regs[CH7006_INPUT_FORMAT] |= CH7006_INPUT_FORMAT_DAC_GAIN; + } else { + gain = 71; + + regs[CH7006_INPUT_FORMAT] &= ~CH7006_INPUT_FORMAT_DAC_GAIN; + } + + black_level = round_fixed(norm->black_level*26625)/gain; + + /* Correct it with the specified brightness. */ + black_level = interpolate(90, black_level, 208, priv->brightness); + + regs[CH7006_BLACK_LEVEL] = bitf(CH7006_BLACK_LEVEL_0, black_level); + + ch7006_dbg(client, "black level: %d\n", black_level); +} + +void ch7006_setup_subcarrier(struct drm_encoder *encoder) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_state *state = &priv->state; + struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm]; + struct ch7006_mode *mode = priv->mode; + uint32_t subc_inc; + + subc_inc = round_fixed((mode->subc_coeff >> 8) + * (norm->subc_freq >> 24)); + + setbitf(state, CH7006_SUBC_INC0, 28, subc_inc); + setbitf(state, CH7006_SUBC_INC1, 24, subc_inc); + setbitf(state, CH7006_SUBC_INC2, 20, subc_inc); + setbitf(state, CH7006_SUBC_INC3, 16, subc_inc); + setbitf(state, CH7006_SUBC_INC4, 12, subc_inc); + setbitf(state, CH7006_SUBC_INC5, 8, subc_inc); + setbitf(state, CH7006_SUBC_INC6, 4, subc_inc); + setbitf(state, CH7006_SUBC_INC7, 0, subc_inc); + + ch7006_dbg(client, "subcarrier inc: %u\n", subc_inc); +} + +void ch7006_setup_pll(struct drm_encoder *encoder) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + uint8_t *regs = priv->state.regs; + struct ch7006_mode *mode = priv->mode; + int n, best_n = 0; + int m, best_m = 0; + int freq, best_freq = 0; + + for (n = 0; n < CH7006_MAXN; n++) { + for (m = 0; m < CH7006_MAXM; m++) { + freq = CH7006_FREQ0*(n+2)/(m+2); + + if (abs(freq - mode->mode.clock) < + abs(best_freq - mode->mode.clock)) { + best_freq = freq; + best_n = n; + best_m = m; + } + } + } + + regs[CH7006_PLLOV] = bitf(CH7006_PLLOV_N_8, best_n) | + bitf(CH7006_PLLOV_M_8, best_m); + + regs[CH7006_PLLM] = bitf(CH7006_PLLM_0, best_m); + regs[CH7006_PLLN] = bitf(CH7006_PLLN_0, best_n); + + if (best_n < 108) + regs[CH7006_PLL_CONTROL] |= CH7006_PLL_CONTROL_CAPACITOR; + else + regs[CH7006_PLL_CONTROL] &= ~CH7006_PLL_CONTROL_CAPACITOR; + + ch7006_dbg(client, "n=%d m=%d f=%d c=%d\n", + best_n, best_m, best_freq, best_n < 108); +} + +void ch7006_setup_power_state(struct drm_encoder *encoder) +{ + struct ch7006_priv *priv = to_ch7006_priv(encoder); + uint8_t *power = &priv->state.regs[CH7006_POWER]; + int subconnector; + + subconnector = priv->select_subconnector ? priv->select_subconnector : + priv->subconnector; + + *power = CH7006_POWER_RESET; + + if (priv->last_dpms == DRM_MODE_DPMS_ON) { + switch (subconnector) { + case DRM_MODE_SUBCONNECTOR_SVIDEO: + *power |= bitfs(CH7006_POWER_LEVEL, CVBS_OFF); + break; + case DRM_MODE_SUBCONNECTOR_Composite: + *power |= bitfs(CH7006_POWER_LEVEL, SVIDEO_OFF); + break; + case DRM_MODE_SUBCONNECTOR_SCART: + *power |= bitfs(CH7006_POWER_LEVEL, NORMAL) | + CH7006_POWER_SCART; + break; + } + + } else { + *power |= bitfs(CH7006_POWER_LEVEL, FULL_POWER_OFF); + } +} + +void ch7006_setup_properties(struct drm_encoder *encoder) +{ + struct i2c_client *client = drm_i2c_encoder_get_client(encoder); + struct ch7006_priv *priv = to_ch7006_priv(encoder); + struct ch7006_state *state = &priv->state; + struct ch7006_tv_norm_info *norm = &ch7006_tv_norms[priv->norm]; + struct ch7006_mode *ch_mode = priv->mode; + struct drm_display_mode *mode = &ch_mode->mode; + uint8_t *regs = state->regs; + int flicker, contrast, hpos, vpos; + uint64_t scale, aspect; + + flicker = interpolate(0, 2, 3, priv->flicker); + regs[CH7006_FFILTER] = bitf(CH7006_FFILTER_TEXT, flicker) | + bitf(CH7006_FFILTER_LUMA, flicker) | + bitf(CH7006_FFILTER_CHROMA, 1); + + contrast = interpolate(0, 5, 7, priv->contrast); + regs[CH7006_CONTRAST] = bitf(CH7006_CONTRAST_0, contrast); + + scale = norm->vtotal*fixed1; + do_div(scale, mode->vtotal); + + aspect = ch_mode->enc_hdisp*fixed1; + do_div(aspect, ch_mode->enc_vdisp); + + hpos = round_fixed((norm->hvirtual * aspect - mode->hdisplay * scale) + * priv->hmargin * mode->vtotal) / norm->vtotal / 100 / 4; + + setbitf(state, CH7006_POV, HPOS_8, hpos); + setbitf(state, CH7006_HPOS, 0, hpos); + + vpos = max(0, norm->vdisplay - round_fixed(mode->vdisplay*scale) + + norm->voffset) * priv->vmargin / 100 / 2; + + setbitf(state, CH7006_POV, VPOS_8, vpos); + setbitf(state, CH7006_VPOS, 0, vpos); + + ch7006_dbg(client, "hpos: %d, vpos: %d\n", hpos, vpos); +} + +/* HW access functions */ + +void ch7006_write(struct i2c_client *client, uint8_t addr, uint8_t val) +{ + uint8_t buf[] = {addr, val}; + int ret; + + ret = i2c_master_send(client, buf, ARRAY_SIZE(buf)); + if (ret < 0) + ch7006_err(client, "Error %d writing to subaddress 0x%x\n", + ret, addr); +} + +uint8_t ch7006_read(struct i2c_client *client, uint8_t addr) +{ + uint8_t val; + int ret; + + ret = i2c_master_send(client, &addr, sizeof(addr)); + if (ret < 0) + goto fail; + + ret = i2c_master_recv(client, &val, sizeof(val)); + if (ret < 0) + goto fail; + + return val; + +fail: + ch7006_err(client, "Error %d reading from subaddress 0x%x\n", + ret, addr); + return 0; +} + +void ch7006_state_load(struct i2c_client *client, + struct ch7006_state *state) +{ + ch7006_load_reg(client, state, CH7006_POWER); + + ch7006_load_reg(client, state, CH7006_DISPMODE); + ch7006_load_reg(client, state, CH7006_FFILTER); + ch7006_load_reg(client, state, CH7006_BWIDTH); + ch7006_load_reg(client, state, CH7006_INPUT_FORMAT); + ch7006_load_reg(client, state, CH7006_CLKMODE); + ch7006_load_reg(client, state, CH7006_START_ACTIVE); + ch7006_load_reg(client, state, CH7006_POV); + ch7006_load_reg(client, state, CH7006_BLACK_LEVEL); + ch7006_load_reg(client, state, CH7006_HPOS); + ch7006_load_reg(client, state, CH7006_VPOS); + ch7006_load_reg(client, state, CH7006_INPUT_SYNC); + ch7006_load_reg(client, state, CH7006_DETECT); + ch7006_load_reg(client, state, CH7006_CONTRAST); + ch7006_load_reg(client, state, CH7006_PLLOV); + ch7006_load_reg(client, state, CH7006_PLLM); + ch7006_load_reg(client, state, CH7006_PLLN); + ch7006_load_reg(client, state, CH7006_BCLKOUT); + ch7006_load_reg(client, state, CH7006_SUBC_INC0); + ch7006_load_reg(client, state, CH7006_SUBC_INC1); + ch7006_load_reg(client, state, CH7006_SUBC_INC2); + ch7006_load_reg(client, state, CH7006_SUBC_INC3); + ch7006_load_reg(client, state, CH7006_SUBC_INC4); + ch7006_load_reg(client, state, CH7006_SUBC_INC5); + ch7006_load_reg(client, state, CH7006_SUBC_INC6); + ch7006_load_reg(client, state, CH7006_SUBC_INC7); + ch7006_load_reg(client, state, CH7006_PLL_CONTROL); + ch7006_load_reg(client, state, CH7006_CALC_SUBC_INC0); +} + +void ch7006_state_save(struct i2c_client *client, + struct ch7006_state *state) +{ + ch7006_save_reg(client, state, CH7006_POWER); + + ch7006_save_reg(client, state, CH7006_DISPMODE); + ch7006_save_reg(client, state, CH7006_FFILTER); + ch7006_save_reg(client, state, CH7006_BWIDTH); + ch7006_save_reg(client, state, CH7006_INPUT_FORMAT); + ch7006_save_reg(client, state, CH7006_CLKMODE); + ch7006_save_reg(client, state, CH7006_START_ACTIVE); + ch7006_save_reg(client, state, CH7006_POV); + ch7006_save_reg(client, state, CH7006_BLACK_LEVEL); + ch7006_save_reg(client, state, CH7006_HPOS); + ch7006_save_reg(client, state, CH7006_VPOS); + ch7006_save_reg(client, state, CH7006_INPUT_SYNC); + ch7006_save_reg(client, state, CH7006_DETECT); + ch7006_save_reg(client, state, CH7006_CONTRAST); + ch7006_save_reg(client, state, CH7006_PLLOV); + ch7006_save_reg(client, state, CH7006_PLLM); + ch7006_save_reg(client, state, CH7006_PLLN); + ch7006_save_reg(client, state, CH7006_BCLKOUT); + ch7006_save_reg(client, state, CH7006_SUBC_INC0); + ch7006_save_reg(client, state, CH7006_SUBC_INC1); + ch7006_save_reg(client, state, CH7006_SUBC_INC2); + ch7006_save_reg(client, state, CH7006_SUBC_INC3); + ch7006_save_reg(client, state, CH7006_SUBC_INC4); + ch7006_save_reg(client, state, CH7006_SUBC_INC5); + ch7006_save_reg(client, state, CH7006_SUBC_INC6); + ch7006_save_reg(client, state, CH7006_SUBC_INC7); + ch7006_save_reg(client, state, CH7006_PLL_CONTROL); + ch7006_save_reg(client, state, CH7006_CALC_SUBC_INC0); + + state->regs[CH7006_FFILTER] = (state->regs[CH7006_FFILTER] & 0xf0) | + (state->regs[CH7006_FFILTER] & 0x0c) >> 2 | + (state->regs[CH7006_FFILTER] & 0x03) << 2; +} --- linux-2.6.32.orig/drivers/gpu/drm/i2c/Makefile +++ linux-2.6.32/drivers/gpu/drm/i2c/Makefile @@ -0,0 +1,4 @@ +ccflags-y := -Iinclude/drm + +ch7006-y := ch7006_drv.o ch7006_mode.o +obj-$(CONFIG_DRM_I2C_CH7006) += ch7006.o --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon.h @@ -28,8 +28,6 @@ #ifndef __RADEON_H__ #define __RADEON_H__ -#include "radeon_object.h" - /* TODO: Here are things that needs to be done : * - surface allocator & initializer : (bit like scratch reg) should * initialize HDP_ stuff on RS600, R600, R700 hw, well anythings @@ -67,6 +65,11 @@ #include #include +#include +#include +#include +#include + #include "radeon_family.h" #include "radeon_mode.h" #include "radeon_reg.h" @@ -85,12 +88,15 @@ extern int radeon_testing; extern int radeon_connector_table; extern int radeon_tv; +extern int radeon_new_pll; +extern int radeon_audio; /* * Copy from radeon_drv.h so we don't have to include both and have conflicting * symbol; */ #define RADEON_MAX_USEC_TIMEOUT 100000 /* 100 ms */ +/* RADEON_IB_POOL_SIZE must be a power of 2 */ #define RADEON_IB_POOL_SIZE 16 #define RADEON_DEBUGFS_MAX_NUM_FILES 32 #define RADEONFB_CONN_LIMIT 4 @@ -157,6 +163,7 @@ struct list_head created; struct list_head emited; struct list_head signaled; + bool initialized; }; struct radeon_fence { @@ -186,76 +193,65 @@ * Tiling registers */ struct radeon_surface_reg { - struct radeon_object *robj; + struct radeon_bo *bo; }; #define RADEON_GEM_MAX_SURFACES 8 /* - * Radeon buffer. + * TTM. */ -struct radeon_object; +struct radeon_mman { + struct ttm_bo_global_ref bo_global_ref; + struct ttm_global_reference mem_global_ref; + struct ttm_bo_device bdev; + bool mem_global_referenced; + bool initialized; +}; -struct radeon_object_list { +struct radeon_bo { + /* Protected by gem.mutex */ + struct list_head list; + /* Protected by tbo.reserved */ + u32 placements[3]; + u32 busy_placements[3]; + struct ttm_placement placement; + struct ttm_placement busy_placement; + struct ttm_buffer_object tbo; + struct ttm_bo_kmap_obj kmap; + unsigned pin_count; + void *kptr; + u32 tiling_flags; + u32 pitch; + int surface_reg; + /* Constant after initialization */ + struct radeon_device *rdev; + struct drm_gem_object *gobj; +}; + +struct radeon_bo_list { struct list_head list; - struct radeon_object *robj; + struct radeon_bo *bo; uint64_t gpu_offset; unsigned rdomain; unsigned wdomain; - uint32_t tiling_flags; + u32 tiling_flags; }; -int radeon_object_init(struct radeon_device *rdev); -void radeon_object_fini(struct radeon_device *rdev); -int radeon_object_create(struct radeon_device *rdev, - struct drm_gem_object *gobj, - unsigned long size, - bool kernel, - uint32_t domain, - bool interruptible, - struct radeon_object **robj_ptr); -int radeon_object_kmap(struct radeon_object *robj, void **ptr); -void radeon_object_kunmap(struct radeon_object *robj); -void radeon_object_unref(struct radeon_object **robj); -int radeon_object_pin(struct radeon_object *robj, uint32_t domain, - uint64_t *gpu_addr); -void radeon_object_unpin(struct radeon_object *robj); -int radeon_object_wait(struct radeon_object *robj); -int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement); -int radeon_object_evict_vram(struct radeon_device *rdev); -int radeon_object_mmap(struct radeon_object *robj, uint64_t *offset); -void radeon_object_force_delete(struct radeon_device *rdev); -void radeon_object_list_add_object(struct radeon_object_list *lobj, - struct list_head *head); -int radeon_object_list_validate(struct list_head *head, void *fence); -void radeon_object_list_unvalidate(struct list_head *head); -void radeon_object_list_clean(struct list_head *head); -int radeon_object_fbdev_mmap(struct radeon_object *robj, - struct vm_area_struct *vma); -unsigned long radeon_object_size(struct radeon_object *robj); -void radeon_object_clear_surface_reg(struct radeon_object *robj); -int radeon_object_check_tiling(struct radeon_object *robj, bool has_moved, - bool force_drop); -void radeon_object_set_tiling_flags(struct radeon_object *robj, - uint32_t tiling_flags, uint32_t pitch); -void radeon_object_get_tiling_flags(struct radeon_object *robj, uint32_t *tiling_flags, uint32_t *pitch); -void radeon_bo_move_notify(struct ttm_buffer_object *bo, - struct ttm_mem_reg *mem); -void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo); /* * GEM objects. */ struct radeon_gem { + struct mutex mutex; struct list_head objects; }; int radeon_gem_init(struct radeon_device *rdev); void radeon_gem_fini(struct radeon_device *rdev); int radeon_gem_object_create(struct radeon_device *rdev, int size, - int alignment, int initial_domain, - bool discardable, bool kernel, - bool interruptible, - struct drm_gem_object **obj); + int alignment, int initial_domain, + bool discardable, bool kernel, + struct drm_gem_object **obj); int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, uint64_t *gpu_addr); void radeon_gem_object_unpin(struct drm_gem_object *obj); @@ -271,7 +267,7 @@ }; struct radeon_gart_table_vram { - struct radeon_object *robj; + struct radeon_bo *robj; volatile uint32_t *ptr; }; @@ -326,10 +322,12 @@ u64 real_vram_size; int vram_mtrr; bool vram_is_ddr; + bool igp_sideport_enabled; }; int radeon_mc_setup(struct radeon_device *rdev); - +bool radeon_combios_sideport_present(struct radeon_device *rdev); +bool radeon_atombios_sideport_present(struct radeon_device *rdev); /* * GPU scratch registers structures, functions & helpers @@ -352,22 +350,28 @@ bool sw_int; /* FIXME: use a define max crtc rather than hardcode it */ bool crtc_vblank_int[2]; + /* FIXME: use defines for max hpd/dacs */ + bool hpd[6]; + spinlock_t sw_lock; + int sw_refcount; }; int radeon_irq_kms_init(struct radeon_device *rdev); void radeon_irq_kms_fini(struct radeon_device *rdev); - +void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev); +void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev); /* * CP & ring. */ struct radeon_ib { struct list_head list; - unsigned long idx; + unsigned idx; uint64_t gpu_addr; struct radeon_fence *fence; - uint32_t *ptr; + uint32_t *ptr; uint32_t length_dw; + bool free; }; /* @@ -376,15 +380,14 @@ */ struct radeon_ib_pool { struct mutex mutex; - struct radeon_object *robj; - struct list_head scheduled_ibs; + struct radeon_bo *robj; struct radeon_ib ibs[RADEON_IB_POOL_SIZE]; bool ready; - DECLARE_BITMAP(alloc_bm, RADEON_IB_POOL_SIZE); + unsigned head_id; }; struct radeon_cp { - struct radeon_object *ring_obj; + struct radeon_bo *ring_obj; volatile uint32_t *ring; unsigned rptr; unsigned wptr; @@ -399,8 +402,25 @@ bool ready; }; +/* + * R6xx+ IH ring + */ +struct r600_ih { + struct radeon_bo *ring_obj; + volatile uint32_t *ring; + unsigned rptr; + unsigned wptr; + unsigned wptr_old; + unsigned ring_size; + uint64_t gpu_addr; + uint32_t ptr_mask; + spinlock_t lock; + bool enabled; +}; + struct r600_blit { - struct radeon_object *shader_obj; + struct mutex mutex; + struct radeon_bo *shader_obj; u64 shader_gpu_addr; u32 vs_offset, ps_offset; u32 state_offset; @@ -430,8 +450,8 @@ */ struct radeon_cs_reloc { struct drm_gem_object *gobj; - struct radeon_object *robj; - struct radeon_object_list lobj; + struct radeon_bo *robj; + struct radeon_bo_list lobj; uint32_t handle; uint32_t flags; }; @@ -448,6 +468,7 @@ }; struct radeon_cs_parser { + struct device *dev; struct radeon_device *rdev; struct drm_file *filp; /* chunks */ @@ -527,7 +548,7 @@ * Writeback */ struct radeon_wb { - struct radeon_object *wb_obj; + struct radeon_bo *wb_obj; volatile uint32_t *wb; uint64_t gpu_addr; }; @@ -639,6 +660,17 @@ uint32_t offset, uint32_t obj_size); int (*clear_surface_reg)(struct radeon_device *rdev, int reg); void (*bandwidth_update)(struct radeon_device *rdev); + void (*hpd_init)(struct radeon_device *rdev); + void (*hpd_fini)(struct radeon_device *rdev); + bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); + void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); + /* ioctl hw specific callback. Some hw might want to perform special + * operation on specific ioctl. For instance on wait idle some hw + * might want to perform and HDP flush through MMIO as it seems that + * some R6XX/R7XX hw doesn't take HDP flush into account if programmed + * through ring. + */ + void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); }; /* @@ -647,11 +679,14 @@ struct r100_asic { const unsigned *reg_safe_bm; unsigned reg_safe_bm_size; + u32 hdp_cntl; }; struct r300_asic { const unsigned *reg_safe_bm; unsigned reg_safe_bm_size; + u32 resync_scratch; + u32 hdp_cntl; }; struct r600_asic { @@ -751,9 +786,9 @@ uint8_t *bios; bool is_atom_bios; uint16_t bios_header_start; - struct radeon_object *stollen_vga_memory; + struct radeon_bo *stollen_vga_memory; struct fb_info *fbdev_info; - struct radeon_object *fbdev_robj; + struct radeon_bo *fbdev_rbo; struct radeon_framebuffer *fbdev_rfb; /* Register mmio */ resource_size_t rmmio_base; @@ -791,8 +826,20 @@ struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; const struct firmware *me_fw; /* all family ME firmware */ const struct firmware *pfp_fw; /* r6/700 PFP firmware */ + const struct firmware *rlc_fw; /* r6/700 RLC firmware */ struct r600_blit r600_blit; int msi_enabled; /* msi enabled */ + struct r600_ih ih; /* r6/700 interrupt ring */ + struct workqueue_struct *wq; + struct work_struct hotplug_work; + + /* audio stuff */ + struct timer_list audio_timer; + int audio_channels; + int audio_rate; + int audio_bits_per_sample; + uint8_t audio_status_bits; + uint8_t audio_category_code; }; int radeon_device_init(struct radeon_device *rdev, @@ -811,7 +858,7 @@ static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) { - if (reg < 0x10000) + if (reg < rdev->rmmio_size) return readl(((void __iomem *)rdev->rmmio) + reg); else { writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); @@ -821,7 +868,7 @@ static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) { - if (reg < 0x10000) + if (reg < rdev->rmmio_size) writel(v, ((void __iomem *)rdev->rmmio) + reg); else { writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); @@ -829,6 +876,10 @@ } } +/* + * Cast helper + */ +#define to_radeon_fence(p) ((struct radeon_fence *)(p)) /* * Registers read & write functions. @@ -965,18 +1016,25 @@ #define radeon_get_engine_clock(rdev) (rdev)->asic->get_engine_clock((rdev)) #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) #define radeon_get_memory_clock(rdev) (rdev)->asic->get_memory_clock((rdev)) -#define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) +#define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_memory_clock((rdev), (e)) #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) +#define radeon_hpd_init(rdev) (rdev)->asic->hpd_init((rdev)) +#define radeon_hpd_fini(rdev) (rdev)->asic->hpd_fini((rdev)) +#define radeon_hpd_sense(rdev, hpd) (rdev)->asic->hpd_sense((rdev), (hpd)) +#define radeon_hpd_set_polarity(rdev, hpd) (rdev)->asic->hpd_set_polarity((rdev), (hpd)) /* Common functions */ +/* AGP */ +extern void radeon_agp_disable(struct radeon_device *rdev); extern int radeon_gart_table_vram_pin(struct radeon_device *rdev); extern int radeon_modeset_init(struct radeon_device *rdev); extern void radeon_modeset_fini(struct radeon_device *rdev); extern bool radeon_card_posted(struct radeon_device *rdev); +extern bool radeon_boot_test_post_card(struct radeon_device *rdev); extern int radeon_clocks_init(struct radeon_device *rdev); extern void radeon_clocks_fini(struct radeon_device *rdev); extern void radeon_scratch_init(struct radeon_device *rdev); @@ -984,6 +1042,8 @@ extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); +extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain); +extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo); /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ struct r100_mc_save { @@ -1021,7 +1081,7 @@ extern void r100_vga_render_disable(struct radeon_device *rdev); extern int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p, struct radeon_cs_packet *pkt, - struct radeon_object *robj); + struct radeon_bo *robj); extern int r100_cs_parse_packet0(struct radeon_cs_parser *p, struct radeon_cs_packet *pkt, const unsigned *auth, unsigned n, @@ -1029,6 +1089,8 @@ extern int r100_cs_packet_parse(struct radeon_cs_parser *p, struct radeon_cs_packet *pkt, unsigned idx); +extern void r100_enable_bm(struct radeon_device *rdev); +extern void r100_set_common_regs(struct radeon_device *rdev); /* rv200,rv250,rv280 */ extern void r200_set_safe_registers(struct radeon_device *rdev); @@ -1091,6 +1153,7 @@ extern void r600_cp_stop(struct radeon_device *rdev); extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size); extern int r600_cp_resume(struct radeon_device *rdev); +extern void r600_cp_fini(struct radeon_device *rdev); extern int r600_count_pipe_bits(uint32_t val); extern int r600_gart_clear_page(struct radeon_device *rdev, int i); extern int r600_mc_wait_for_idle(struct radeon_device *rdev); @@ -1104,7 +1167,30 @@ extern void r600_scratch_init(struct radeon_device *rdev); extern int r600_blit_init(struct radeon_device *rdev); extern void r600_blit_fini(struct radeon_device *rdev); -extern int r600_cp_init_microcode(struct radeon_device *rdev); +extern int r600_init_microcode(struct radeon_device *rdev); extern int r600_gpu_reset(struct radeon_device *rdev); +/* r600 irq */ +extern int r600_irq_init(struct radeon_device *rdev); +extern void r600_irq_fini(struct radeon_device *rdev); +extern void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size); +extern int r600_irq_set(struct radeon_device *rdev); +extern void r600_irq_suspend(struct radeon_device *rdev); +/* r600 audio */ +extern int r600_audio_init(struct radeon_device *rdev); +extern int r600_audio_tmds_index(struct drm_encoder *encoder); +extern void r600_audio_set_clock(struct drm_encoder *encoder, int clock); +extern void r600_audio_fini(struct radeon_device *rdev); +extern void r600_hdmi_init(struct drm_encoder *encoder); +extern void r600_hdmi_enable(struct drm_encoder *encoder, int enable); +extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); +extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder); +extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder, + int channels, + int rate, + int bps, + uint8_t status_bits, + uint8_t category_code); + +#include "radeon_object.h" #endif --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_gem.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_gem.c @@ -38,22 +38,21 @@ void radeon_gem_object_free(struct drm_gem_object *gobj) { - struct radeon_object *robj = gobj->driver_private; + struct radeon_bo *robj = gobj->driver_private; gobj->driver_private = NULL; if (robj) { - radeon_object_unref(&robj); + radeon_bo_unref(&robj); } } int radeon_gem_object_create(struct radeon_device *rdev, int size, - int alignment, int initial_domain, - bool discardable, bool kernel, - bool interruptible, - struct drm_gem_object **obj) + int alignment, int initial_domain, + bool discardable, bool kernel, + struct drm_gem_object **obj) { struct drm_gem_object *gobj; - struct radeon_object *robj; + struct radeon_bo *robj; int r; *obj = NULL; @@ -65,11 +64,11 @@ if (alignment < PAGE_SIZE) { alignment = PAGE_SIZE; } - r = radeon_object_create(rdev, gobj, size, kernel, initial_domain, - interruptible, &robj); + r = radeon_bo_create(rdev, gobj, size, kernel, initial_domain, &robj); if (r) { - DRM_ERROR("Failed to allocate GEM object (%d, %d, %u)\n", - size, initial_domain, alignment); + if (r != -ERESTARTSYS) + DRM_ERROR("Failed to allocate GEM object (%d, %d, %u, %d)\n", + size, initial_domain, alignment, r); mutex_lock(&rdev->ddev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&rdev->ddev->struct_mutex); @@ -83,33 +82,33 @@ int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, uint64_t *gpu_addr) { - struct radeon_object *robj = obj->driver_private; - uint32_t flags; + struct radeon_bo *robj = obj->driver_private; + int r; - switch (pin_domain) { - case RADEON_GEM_DOMAIN_VRAM: - flags = TTM_PL_FLAG_VRAM; - break; - case RADEON_GEM_DOMAIN_GTT: - flags = TTM_PL_FLAG_TT; - break; - default: - flags = TTM_PL_FLAG_SYSTEM; - break; - } - return radeon_object_pin(robj, flags, gpu_addr); + r = radeon_bo_reserve(robj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(robj, pin_domain, gpu_addr); + radeon_bo_unreserve(robj); + return r; } void radeon_gem_object_unpin(struct drm_gem_object *obj) { - struct radeon_object *robj = obj->driver_private; - radeon_object_unpin(robj); + struct radeon_bo *robj = obj->driver_private; + int r; + + r = radeon_bo_reserve(robj, false); + if (likely(r == 0)) { + radeon_bo_unpin(robj); + radeon_bo_unreserve(robj); + } } int radeon_gem_set_domain(struct drm_gem_object *gobj, uint32_t rdomain, uint32_t wdomain) { - struct radeon_object *robj; + struct radeon_bo *robj; uint32_t domain; int r; @@ -127,7 +126,7 @@ } if (domain == RADEON_GEM_DOMAIN_CPU) { /* Asking for cpu access wait for object idle */ - r = radeon_object_wait(robj); + r = radeon_bo_wait(robj, NULL, false); if (r) { printk(KERN_ERR "Failed to wait for object !\n"); return r; @@ -144,7 +143,7 @@ void radeon_gem_fini(struct radeon_device *rdev) { - radeon_object_force_delete(rdev); + radeon_bo_force_delete(rdev); } @@ -158,9 +157,13 @@ struct drm_radeon_gem_info *args = data; args->vram_size = rdev->mc.real_vram_size; - /* FIXME: report somethings that makes sense */ - args->vram_visible = rdev->mc.real_vram_size - (4 * 1024 * 1024); - args->gart_size = rdev->mc.gtt_size; + args->vram_visible = rdev->mc.real_vram_size; + if (rdev->stollen_vga_memory) + args->vram_visible -= radeon_bo_size(rdev->stollen_vga_memory); + if (rdev->fbdev_rbo) + args->vram_visible -= radeon_bo_size(rdev->fbdev_rbo); + args->gart_size = rdev->mc.gtt_size - rdev->cp.ring_size - 4096 - + RADEON_IB_POOL_SIZE*64*1024; return 0; } @@ -192,8 +195,8 @@ /* create a gem object to contain this object in */ args->size = roundup(args->size, PAGE_SIZE); r = radeon_gem_object_create(rdev, args->size, args->alignment, - args->initial_domain, false, - false, true, &gobj); + args->initial_domain, false, + false, &gobj); if (r) { return r; } @@ -218,7 +221,7 @@ * just validate the BO into a certain domain */ struct drm_radeon_gem_set_domain *args = data; struct drm_gem_object *gobj; - struct radeon_object *robj; + struct radeon_bo *robj; int r; /* for now if someone requests domain CPU - @@ -244,19 +247,18 @@ { struct drm_radeon_gem_mmap *args = data; struct drm_gem_object *gobj; - struct radeon_object *robj; - int r; + struct radeon_bo *robj; gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) { return -EINVAL; } robj = gobj->driver_private; - r = radeon_object_mmap(robj, &args->addr_ptr); + args->addr_ptr = radeon_bo_mmap_offset(robj); mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); - return r; + return 0; } int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, @@ -264,16 +266,16 @@ { struct drm_radeon_gem_busy *args = data; struct drm_gem_object *gobj; - struct radeon_object *robj; + struct radeon_bo *robj; int r; - uint32_t cur_placement; + uint32_t cur_placement = 0; gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) { return -EINVAL; } robj = gobj->driver_private; - r = radeon_object_busy_domain(robj, &cur_placement); + r = radeon_bo_wait(robj, &cur_placement, true); switch (cur_placement) { case TTM_PL_VRAM: args->domain = RADEON_GEM_DOMAIN_VRAM; @@ -297,7 +299,7 @@ { struct drm_radeon_gem_wait_idle *args = data; struct drm_gem_object *gobj; - struct radeon_object *robj; + struct radeon_bo *robj; int r; gobj = drm_gem_object_lookup(dev, filp, args->handle); @@ -305,7 +307,10 @@ return -EINVAL; } robj = gobj->driver_private; - r = radeon_object_wait(robj); + r = radeon_bo_wait(robj, NULL, false); + /* callback hw specific functions if any */ + if (robj->rdev->asic->ioctl_wait_idle) + robj->rdev->asic->ioctl_wait_idle(robj->rdev, robj); mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); @@ -317,7 +322,7 @@ { struct drm_radeon_gem_set_tiling *args = data; struct drm_gem_object *gobj; - struct radeon_object *robj; + struct radeon_bo *robj; int r = 0; DRM_DEBUG("%d \n", args->handle); @@ -325,7 +330,7 @@ if (gobj == NULL) return -EINVAL; robj = gobj->driver_private; - radeon_object_set_tiling_flags(robj, args->tiling_flags, args->pitch); + r = radeon_bo_set_tiling_flags(robj, args->tiling_flags, args->pitch); mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); @@ -337,16 +342,20 @@ { struct drm_radeon_gem_get_tiling *args = data; struct drm_gem_object *gobj; - struct radeon_object *robj; + struct radeon_bo *rbo; int r = 0; DRM_DEBUG("\n"); gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) return -EINVAL; - robj = gobj->driver_private; - radeon_object_get_tiling_flags(robj, &args->tiling_flags, - &args->pitch); + rbo = gobj->driver_private; + r = radeon_bo_reserve(rbo, false); + if (unlikely(r != 0)) + goto out; + radeon_bo_get_tiling_flags(rbo, &args->tiling_flags, &args->pitch); + radeon_bo_unreserve(rbo); +out: mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_agp.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_agp.c @@ -144,9 +144,19 @@ ret = drm_agp_info(rdev->ddev, &info); if (ret) { + drm_agp_release(rdev->ddev); DRM_ERROR("Unable to get AGP info: %d\n", ret); return ret; } + + if (rdev->ddev->agp->agp_info.aper_size < 32) { + drm_agp_release(rdev->ddev); + dev_warn(rdev->dev, "AGP aperture too small (%zuM) " + "need at least 32M, disabling AGP\n", + rdev->ddev->agp->agp_info.aper_size); + return -EINVAL; + } + mode.mode = info.mode; agp_status = (RREG32(RADEON_AGP_STATUS) | RADEON_AGPv3_MODE) & mode.mode; is_v3 = !!(agp_status & RADEON_AGPv3_MODE); @@ -221,6 +231,7 @@ ret = drm_agp_enable(rdev->ddev, mode); if (ret) { DRM_ERROR("Unable to enable AGP (mode = 0x%lx)\n", mode.mode); + drm_agp_release(rdev->ddev); return ret; } @@ -252,10 +263,8 @@ void radeon_agp_fini(struct radeon_device *rdev) { #if __OS_HAS_AGP - if (rdev->flags & RADEON_IS_AGP) { - if (rdev->ddev->agp && rdev->ddev->agp->acquired) { - drm_agp_release(rdev->ddev); - } + if (rdev->ddev->agp && rdev->ddev->agp->acquired) { + drm_agp_release(rdev->ddev); } #endif } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/rs600.c +++ linux-2.6.32/drivers/gpu/drm/radeon/rs600.c @@ -45,6 +45,124 @@ void rs600_gpu_init(struct radeon_device *rdev); int rs600_mc_wait_for_idle(struct radeon_device *rdev); +int rs600_mc_init(struct radeon_device *rdev) +{ + /* read back the MC value from the hw */ + int r; + u32 tmp; + + /* Setup GPU memory space */ + tmp = RREG32_MC(R_000004_MC_FB_LOCATION); + rdev->mc.vram_location = G_000004_MC_FB_START(tmp) << 16; + rdev->mc.gtt_location = 0xffffffffUL; + r = radeon_mc_setup(rdev); + rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev); + if (r) + return r; + return 0; +} + +/* hpd for digital panel detect/disconnect */ +bool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) +{ + u32 tmp; + bool connected = false; + + switch (hpd) { + case RADEON_HPD_1: + tmp = RREG32(R_007D04_DC_HOT_PLUG_DETECT1_INT_STATUS); + if (G_007D04_DC_HOT_PLUG_DETECT1_SENSE(tmp)) + connected = true; + break; + case RADEON_HPD_2: + tmp = RREG32(R_007D14_DC_HOT_PLUG_DETECT2_INT_STATUS); + if (G_007D14_DC_HOT_PLUG_DETECT2_SENSE(tmp)) + connected = true; + break; + default: + break; + } + return connected; +} + +void rs600_hpd_set_polarity(struct radeon_device *rdev, + enum radeon_hpd_id hpd) +{ + u32 tmp; + bool connected = rs600_hpd_sense(rdev, hpd); + + switch (hpd) { + case RADEON_HPD_1: + tmp = RREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL); + if (connected) + tmp &= ~S_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY(1); + else + tmp |= S_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY(1); + WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); + break; + case RADEON_HPD_2: + tmp = RREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL); + if (connected) + tmp &= ~S_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY(1); + else + tmp |= S_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY(1); + WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); + break; + default: + break; + } +} + +void rs600_hpd_init(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + struct drm_connector *connector; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + WREG32(R_007D00_DC_HOT_PLUG_DETECT1_CONTROL, + S_007D00_DC_HOT_PLUG_DETECT1_EN(1)); + rdev->irq.hpd[0] = true; + break; + case RADEON_HPD_2: + WREG32(R_007D10_DC_HOT_PLUG_DETECT2_CONTROL, + S_007D10_DC_HOT_PLUG_DETECT2_EN(1)); + rdev->irq.hpd[1] = true; + break; + default: + break; + } + } + if (rdev->irq.installed) + rs600_irq_set(rdev); +} + +void rs600_hpd_fini(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + struct drm_connector *connector; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + WREG32(R_007D00_DC_HOT_PLUG_DETECT1_CONTROL, + S_007D00_DC_HOT_PLUG_DETECT1_EN(0)); + rdev->irq.hpd[0] = false; + break; + case RADEON_HPD_2: + WREG32(R_007D10_DC_HOT_PLUG_DETECT2_CONTROL, + S_007D10_DC_HOT_PLUG_DETECT2_EN(0)); + rdev->irq.hpd[1] = false; + break; + default: + break; + } + } +} + /* * GART. */ @@ -57,7 +175,7 @@ WREG32_MC(R_000100_MC_PT0_CNTL, tmp); tmp = RREG32_MC(R_000100_MC_PT0_CNTL); - tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) & S_000100_INVALIDATE_L2_CACHE(1); + tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) | S_000100_INVALIDATE_L2_CACHE(1); WREG32_MC(R_000100_MC_PT0_CNTL, tmp); tmp = RREG32_MC(R_000100_MC_PT0_CNTL); @@ -100,40 +218,40 @@ WREG32(R_00004C_BUS_CNTL, tmp); /* FIXME: setup default page */ WREG32_MC(R_000100_MC_PT0_CNTL, - (S_000100_EFFECTIVE_L2_CACHE_SIZE(6) | - S_000100_EFFECTIVE_L2_QUEUE_SIZE(6))); + (S_000100_EFFECTIVE_L2_CACHE_SIZE(6) | + S_000100_EFFECTIVE_L2_QUEUE_SIZE(6))); + for (i = 0; i < 19; i++) { WREG32_MC(R_00016C_MC_PT0_CLIENT0_CNTL + i, - S_00016C_ENABLE_TRANSLATION_MODE_OVERRIDE(1) | - S_00016C_SYSTEM_ACCESS_MODE_MASK( - V_00016C_SYSTEM_ACCESS_MODE_IN_SYS) | - S_00016C_SYSTEM_APERTURE_UNMAPPED_ACCESS( - V_00016C_SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE) | - S_00016C_EFFECTIVE_L1_CACHE_SIZE(1) | - S_00016C_ENABLE_FRAGMENT_PROCESSING(1) | - S_00016C_EFFECTIVE_L1_QUEUE_SIZE(1)); + S_00016C_ENABLE_TRANSLATION_MODE_OVERRIDE(1) | + S_00016C_SYSTEM_ACCESS_MODE_MASK( + V_00016C_SYSTEM_ACCESS_MODE_NOT_IN_SYS) | + S_00016C_SYSTEM_APERTURE_UNMAPPED_ACCESS( + V_00016C_SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH) | + S_00016C_EFFECTIVE_L1_CACHE_SIZE(3) | + S_00016C_ENABLE_FRAGMENT_PROCESSING(1) | + S_00016C_EFFECTIVE_L1_QUEUE_SIZE(3)); } - - /* System context map to GART space */ - WREG32_MC(R_000112_MC_PT0_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.gtt_start); - WREG32_MC(R_000114_MC_PT0_SYSTEM_APERTURE_HIGH_ADDR, rdev->mc.gtt_end); - /* enable first context */ - WREG32_MC(R_00013C_MC_PT0_CONTEXT0_FLAT_START_ADDR, rdev->mc.gtt_start); - WREG32_MC(R_00014C_MC_PT0_CONTEXT0_FLAT_END_ADDR, rdev->mc.gtt_end); WREG32_MC(R_000102_MC_PT0_CONTEXT0_CNTL, - S_000102_ENABLE_PAGE_TABLE(1) | - S_000102_PAGE_TABLE_DEPTH(V_000102_PAGE_TABLE_FLAT)); + S_000102_ENABLE_PAGE_TABLE(1) | + S_000102_PAGE_TABLE_DEPTH(V_000102_PAGE_TABLE_FLAT)); + /* disable all other contexts */ - for (i = 1; i < 8; i++) { + for (i = 1; i < 8; i++) WREG32_MC(R_000102_MC_PT0_CONTEXT0_CNTL + i, 0); - } /* setup the page table */ WREG32_MC(R_00012C_MC_PT0_CONTEXT0_FLAT_BASE_ADDR, - rdev->gart.table_addr); + rdev->gart.table_addr); + WREG32_MC(R_00013C_MC_PT0_CONTEXT0_FLAT_START_ADDR, rdev->mc.gtt_start); + WREG32_MC(R_00014C_MC_PT0_CONTEXT0_FLAT_END_ADDR, rdev->mc.gtt_end); WREG32_MC(R_00011C_MC_PT0_CONTEXT0_DEFAULT_READ_ADDR, 0); + /* System context maps to VRAM space */ + WREG32_MC(R_000112_MC_PT0_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.vram_start); + WREG32_MC(R_000114_MC_PT0_SYSTEM_APERTURE_HIGH_ADDR, rdev->mc.vram_end); + /* enable page tables */ tmp = RREG32_MC(R_000100_MC_PT0_CNTL); WREG32_MC(R_000100_MC_PT0_CNTL, (tmp | S_000100_ENABLE_PT(1))); @@ -146,15 +264,20 @@ void rs600_gart_disable(struct radeon_device *rdev) { - uint32_t tmp; + u32 tmp; + int r; /* FIXME: disable out of gart access */ WREG32_MC(R_000100_MC_PT0_CNTL, 0); tmp = RREG32_MC(R_000009_MC_CNTL1); WREG32_MC(R_000009_MC_CNTL1, tmp & C_000009_ENABLE_PAGE_TABLES); if (rdev->gart.table.vram.robj) { - radeon_object_kunmap(rdev->gart.table.vram.robj); - radeon_object_unpin(rdev->gart.table.vram.robj); + r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); + if (r == 0) { + radeon_bo_kunmap(rdev->gart.table.vram.robj); + radeon_bo_unpin(rdev->gart.table.vram.robj); + radeon_bo_unreserve(rdev->gart.table.vram.robj); + } } } @@ -189,7 +312,16 @@ { uint32_t tmp = 0; uint32_t mode_int = 0; - + u32 hpd1 = RREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL) & + ~S_007D08_DC_HOT_PLUG_DETECT1_INT_EN(1); + u32 hpd2 = RREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL) & + ~S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(1); + + if (!rdev->irq.installed) { + WARN(1, "Can't enable IRQ/MSI because no handler is installed.\n"); + WREG32(R_000040_GEN_INT_CNTL, 0); + return -EINVAL; + } if (rdev->irq.sw_int) { tmp |= S_000040_SW_INT_EN(1); } @@ -199,8 +331,16 @@ if (rdev->irq.crtc_vblank_int[1]) { mode_int |= S_006540_D2MODE_VBLANK_INT_MASK(1); } + if (rdev->irq.hpd[0]) { + hpd1 |= S_007D08_DC_HOT_PLUG_DETECT1_INT_EN(1); + } + if (rdev->irq.hpd[1]) { + hpd2 |= S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(1); + } WREG32(R_000040_GEN_INT_CNTL, tmp); WREG32(R_006540_DxMODE_INT_MASK, mode_int); + WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, hpd1); + WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); return 0; } @@ -208,6 +348,7 @@ { uint32_t irqs = RREG32(R_000044_GEN_INT_STATUS); uint32_t irq_mask = ~C_000044_SW_INT; + u32 tmp; if (G_000044_DISPLAY_INT_STAT(irqs)) { *r500_disp_int = RREG32(R_007EDC_DISP_INTERRUPT_STATUS); @@ -219,6 +360,16 @@ WREG32(R_006D34_D2MODE_VBLANK_STATUS, S_006D34_D2MODE_VBLANK_ACK(1)); } + if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(*r500_disp_int)) { + tmp = RREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL); + tmp |= S_007D08_DC_HOT_PLUG_DETECT1_INT_ACK(1); + WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); + } + if (G_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT(*r500_disp_int)) { + tmp = RREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL); + tmp |= S_007D18_DC_HOT_PLUG_DETECT2_INT_ACK(1); + WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); + } } else { *r500_disp_int = 0; } @@ -244,6 +395,7 @@ { uint32_t status, msi_rearm; uint32_t r500_disp_int; + bool queue_hotplug = false; status = rs600_irq_ack(rdev, &r500_disp_int); if (!status && !r500_disp_int) { @@ -251,15 +403,25 @@ } while (status || r500_disp_int) { /* SW interrupt */ - if (G_000040_SW_INT_EN(status)) + if (G_000044_SW_INT(status)) radeon_fence_process(rdev); /* Vertical blank interrupts */ if (G_007EDC_LB_D1_VBLANK_INTERRUPT(r500_disp_int)) drm_handle_vblank(rdev->ddev, 0); if (G_007EDC_LB_D2_VBLANK_INTERRUPT(r500_disp_int)) drm_handle_vblank(rdev->ddev, 1); + if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(r500_disp_int)) { + queue_hotplug = true; + DRM_DEBUG("HPD1\n"); + } + if (G_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT(r500_disp_int)) { + queue_hotplug = true; + DRM_DEBUG("HPD2\n"); + } status = rs600_irq_ack(rdev, &r500_disp_int); } + if (queue_hotplug) + queue_work(rdev->wq, &rdev->hotplug_work); if (rdev->msi_enabled) { switch (rdev->family) { case CHIP_RS600: @@ -301,9 +463,7 @@ void rs600_gpu_init(struct radeon_device *rdev) { - /* FIXME: HDP same place on rs600 ? */ r100_hdp_reset(rdev); - /* FIXME: is this correct ? */ r420_pipes_init(rdev); /* Wait for mc idle */ if (rs600_mc_wait_for_idle(rdev)) @@ -312,9 +472,20 @@ void rs600_vram_info(struct radeon_device *rdev) { - /* FIXME: to do or is these values sane ? */ rdev->mc.vram_is_ddr = true; rdev->mc.vram_width = 128; + + rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE); + rdev->mc.mc_vram_size = rdev->mc.real_vram_size; + + rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); + rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); + + if (rdev->mc.mc_vram_size > rdev->mc.aper_size) + rdev->mc.mc_vram_size = rdev->mc.aper_size; + + if (rdev->mc.real_vram_size > rdev->mc.aper_size) + rdev->mc.real_vram_size = rdev->mc.aper_size; } void rs600_bandwidth_update(struct radeon_device *rdev) @@ -388,8 +559,8 @@ if (r) return r; /* Enable IRQ */ - rdev->irq.sw_int = true; rs600_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -423,6 +594,8 @@ atom_asic_init(rdev->mode_info.atom_context); /* Resume clock after posting */ rv515_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return rs600_startup(rdev); } @@ -437,7 +610,6 @@ void rs600_fini(struct radeon_device *rdev) { - rs600_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); @@ -445,7 +617,7 @@ rs600_gart_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -482,10 +654,9 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - atom_asic_init(rdev->mode_info.atom_context); - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; + /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); /* Initialize power management */ @@ -493,7 +664,7 @@ /* Get vram informations */ rs600_vram_info(rdev); /* Initialize memory controller (also test AGP) */ - r = r420_mc_init(rdev); + r = rs600_mc_init(rdev); if (r) return r; rs600_debugfs(rdev); @@ -505,7 +676,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; r = rs600_gart_init(rdev); @@ -517,7 +688,6 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - rs600_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_fence.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_fence.c @@ -140,16 +140,15 @@ bool radeon_fence_signaled(struct radeon_fence *fence) { - struct radeon_device *rdev = fence->rdev; unsigned long irq_flags; bool signaled = false; - if (rdev->gpu_lockup) { + if (!fence) return true; - } - if (fence == NULL) { + + if (fence->rdev->gpu_lockup) return true; - } + write_lock_irqsave(&fence->rdev->fence_drv.lock, irq_flags); signaled = fence->signaled; /* if we are shuting down report all fence as signaled */ @@ -168,37 +167,6 @@ return signaled; } -int r600_fence_wait(struct radeon_fence *fence, bool intr, bool lazy) -{ - struct radeon_device *rdev; - int ret = 0; - - rdev = fence->rdev; - - __set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); - - while (1) { - if (radeon_fence_signaled(fence)) - break; - - if (time_after_eq(jiffies, fence->timeout)) { - ret = -EBUSY; - break; - } - - if (lazy) - schedule_timeout(1); - - if (intr && signal_pending(current)) { - ret = -ERESTARTSYS; - break; - } - } - __set_current_state(TASK_RUNNING); - return ret; -} - - int radeon_fence_wait(struct radeon_fence *fence, bool intr) { struct radeon_device *rdev; @@ -216,13 +184,6 @@ return 0; } - if (rdev->family >= CHIP_R600) { - r = r600_fence_wait(fence, intr, 0); - if (r == -ERESTARTSYS) - return -EBUSY; - return r; - } - retry: cur_jiffies = jiffies; timeout = HZ / 100; @@ -231,14 +192,17 @@ } if (intr) { + radeon_irq_kms_sw_irq_get(rdev); r = wait_event_interruptible_timeout(rdev->fence_drv.queue, radeon_fence_signaled(fence), timeout); - if (unlikely(r == -ERESTARTSYS)) { - return -EBUSY; - } + radeon_irq_kms_sw_irq_put(rdev); + if (unlikely(r < 0)) + return r; } else { + radeon_irq_kms_sw_irq_get(rdev); r = wait_event_timeout(rdev->fence_drv.queue, radeon_fence_signaled(fence), timeout); + radeon_irq_kms_sw_irq_put(rdev); } if (unlikely(!radeon_fence_signaled(fence))) { if (unlikely(r == 0)) { @@ -359,7 +323,7 @@ write_lock_irqsave(&rdev->fence_drv.lock, irq_flags); r = radeon_scratch_get(rdev, &rdev->fence_drv.scratch_reg); if (r) { - DRM_ERROR("Fence failed to get a scratch register."); + dev_err(rdev->dev, "fence failed to get scratch register\n"); write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags); return r; } @@ -370,9 +334,10 @@ INIT_LIST_HEAD(&rdev->fence_drv.signaled); rdev->fence_drv.count_timeout = 0; init_waitqueue_head(&rdev->fence_drv.queue); + rdev->fence_drv.initialized = true; write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags); if (radeon_debugfs_fence_init(rdev)) { - DRM_ERROR("Failed to register debugfs file for fence !\n"); + dev_err(rdev->dev, "fence debugfs file creation failed\n"); } return 0; } @@ -381,11 +346,13 @@ { unsigned long irq_flags; + if (!rdev->fence_drv.initialized) + return; wake_up_all(&rdev->fence_drv.queue); write_lock_irqsave(&rdev->fence_drv.lock, irq_flags); radeon_scratch_free(rdev, rdev->fence_drv.scratch_reg); write_unlock_irqrestore(&rdev->fence_drv.lock, irq_flags); - DRM_INFO("radeon: fence finalized\n"); + rdev->fence_drv.initialized = false; } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_reg.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_reg.h @@ -887,6 +887,7 @@ # define RADEON_FP_PANEL_FORMAT (1 << 3) # define RADEON_FP_EN_TMDS (1 << 7) # define RADEON_FP_DETECT_SENSE (1 << 8) +# define RADEON_FP_DETECT_INT_POL (1 << 9) # define R200_FP_SOURCE_SEL_MASK (3 << 10) # define R200_FP_SOURCE_SEL_CRTC1 (0 << 10) # define R200_FP_SOURCE_SEL_CRTC2 (1 << 10) @@ -894,6 +895,7 @@ # define R200_FP_SOURCE_SEL_TRANS (3 << 10) # define RADEON_FP_SEL_CRTC1 (0 << 13) # define RADEON_FP_SEL_CRTC2 (1 << 13) +# define R300_HPD_SEL(x) ((x) << 13) # define RADEON_FP_CRTC_DONT_SHADOW_HPAR (1 << 15) # define RADEON_FP_CRTC_DONT_SHADOW_VPAR (1 << 16) # define RADEON_FP_CRTC_DONT_SHADOW_HEND (1 << 17) @@ -909,6 +911,7 @@ # define RADEON_FP2_ON (1 << 2) # define RADEON_FP2_PANEL_FORMAT (1 << 3) # define RADEON_FP2_DETECT_SENSE (1 << 8) +# define RADEON_FP2_DETECT_INT_POL (1 << 9) # define R200_FP2_SOURCE_SEL_MASK (3 << 10) # define R200_FP2_SOURCE_SEL_CRTC1 (0 << 10) # define R200_FP2_SOURCE_SEL_CRTC2 (1 << 10) @@ -988,14 +991,20 @@ #define RADEON_GEN_INT_CNTL 0x0040 # define RADEON_CRTC_VBLANK_MASK (1 << 0) +# define RADEON_FP_DETECT_MASK (1 << 4) # define RADEON_CRTC2_VBLANK_MASK (1 << 9) +# define RADEON_FP2_DETECT_MASK (1 << 10) # define RADEON_SW_INT_ENABLE (1 << 25) #define RADEON_GEN_INT_STATUS 0x0044 # define AVIVO_DISPLAY_INT_STATUS (1 << 0) # define RADEON_CRTC_VBLANK_STAT (1 << 0) # define RADEON_CRTC_VBLANK_STAT_ACK (1 << 0) +# define RADEON_FP_DETECT_STAT (1 << 4) +# define RADEON_FP_DETECT_STAT_ACK (1 << 4) # define RADEON_CRTC2_VBLANK_STAT (1 << 9) # define RADEON_CRTC2_VBLANK_STAT_ACK (1 << 9) +# define RADEON_FP2_DETECT_STAT (1 << 10) +# define RADEON_FP2_DETECT_STAT_ACK (1 << 10) # define RADEON_SW_INT_FIRE (1 << 26) # define RADEON_SW_INT_TEST (1 << 25) # define RADEON_SW_INT_TEST_ACK (1 << 25) @@ -1051,20 +1060,25 @@ /* Multimedia I2C bus */ #define RADEON_I2C_CNTL_0 0x0090 -#define RADEON_I2C_DONE (1<<0) -#define RADEON_I2C_NACK (1<<1) -#define RADEON_I2C_HALT (1<<2) -#define RADEON_I2C_SOFT_RST (1<<5) -#define RADEON_I2C_DRIVE_EN (1<<6) -#define RADEON_I2C_DRIVE_SEL (1<<7) -#define RADEON_I2C_START (1<<8) -#define RADEON_I2C_STOP (1<<9) -#define RADEON_I2C_RECEIVE (1<<10) -#define RADEON_I2C_ABORT (1<<11) -#define RADEON_I2C_GO (1<<12) +#define RADEON_I2C_DONE (1 << 0) +#define RADEON_I2C_NACK (1 << 1) +#define RADEON_I2C_HALT (1 << 2) +#define RADEON_I2C_SOFT_RST (1 << 5) +#define RADEON_I2C_DRIVE_EN (1 << 6) +#define RADEON_I2C_DRIVE_SEL (1 << 7) +#define RADEON_I2C_START (1 << 8) +#define RADEON_I2C_STOP (1 << 9) +#define RADEON_I2C_RECEIVE (1 << 10) +#define RADEON_I2C_ABORT (1 << 11) +#define RADEON_I2C_GO (1 << 12) +#define RADEON_I2C_PRESCALE_SHIFT 16 #define RADEON_I2C_CNTL_1 0x0094 -#define RADEON_I2C_SEL (1<<16) -#define RADEON_I2C_EN (1<<17) +#define RADEON_I2C_DATA_COUNT_SHIFT 0 +#define RADEON_I2C_ADDR_COUNT_SHIFT 4 +#define RADEON_I2C_INTRA_BYTE_DELAY_SHIFT 8 +#define RADEON_I2C_SEL (1 << 16) +#define RADEON_I2C_EN (1 << 17) +#define RADEON_I2C_TIME_LIMIT_SHIFT 24 #define RADEON_I2C_DATA 0x0098 #define RADEON_DVI_I2C_CNTL_0 0x02e0 @@ -1072,7 +1086,7 @@ # define R200_SEL_DDC1 0 /* 0x60 - VGA_DDC */ # define R200_SEL_DDC2 1 /* 0x64 - DVI_DDC */ # define R200_SEL_DDC3 2 /* 0x68 - MONID_DDC */ -#define RADEON_DVI_I2C_CNTL_1 0x02e4 /* ? */ +#define RADEON_DVI_I2C_CNTL_1 0x02e4 #define RADEON_DVI_I2C_DATA 0x02e8 #define RADEON_INTERRUPT_LINE 0x0f3c /* PCI */ @@ -1143,15 +1157,16 @@ # define RADEON_IO_MCLK_MAX_DYN_STOP_LAT (1 << 13) # define RADEON_MC_MCLK_DYN_ENABLE (1 << 14) # define RADEON_IO_MCLK_DYN_ENABLE (1 << 15) -#define RADEON_LCD_GPIO_MASK 0x01a0 -#define RADEON_GPIOPAD_EN 0x01a0 -#define RADEON_LCD_GPIO_Y_REG 0x01a4 -#define RADEON_MDGPIO_A_REG 0x01ac -#define RADEON_MDGPIO_EN_REG 0x01b0 -#define RADEON_MDGPIO_MASK 0x0198 + #define RADEON_GPIOPAD_MASK 0x0198 #define RADEON_GPIOPAD_A 0x019c -#define RADEON_MDGPIO_Y_REG 0x01b4 +#define RADEON_GPIOPAD_EN 0x01a0 +#define RADEON_GPIOPAD_Y 0x01a4 +#define RADEON_MDGPIO_MASK 0x01a8 +#define RADEON_MDGPIO_A 0x01ac +#define RADEON_MDGPIO_EN 0x01b0 +#define RADEON_MDGPIO_Y 0x01b4 + #define RADEON_MEM_ADDR_CONFIG 0x0148 #define RADEON_MEM_BASE 0x0f10 /* PCI */ #define RADEON_MEM_CNTL 0x0140 @@ -1360,6 +1375,9 @@ #define RADEON_OVR_CLR 0x0230 #define RADEON_OVR_WID_LEFT_RIGHT 0x0234 #define RADEON_OVR_WID_TOP_BOTTOM 0x0238 +#define RADEON_OVR2_CLR 0x0330 +#define RADEON_OVR2_WID_LEFT_RIGHT 0x0334 +#define RADEON_OVR2_WID_TOP_BOTTOM 0x0338 /* first capture unit */ --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r600.c @@ -38,8 +38,10 @@ #define PFP_UCODE_SIZE 576 #define PM4_UCODE_SIZE 1792 +#define RLC_UCODE_SIZE 768 #define R700_PFP_UCODE_SIZE 848 #define R700_PM4_UCODE_SIZE 1360 +#define R700_RLC_UCODE_SIZE 1024 /* Firmware Names */ MODULE_FIRMWARE("radeon/R600_pfp.bin"); @@ -62,6 +64,8 @@ MODULE_FIRMWARE("radeon/RV730_me.bin"); MODULE_FIRMWARE("radeon/RV710_pfp.bin"); MODULE_FIRMWARE("radeon/RV710_me.bin"); +MODULE_FIRMWARE("radeon/R600_rlc.bin"); +MODULE_FIRMWARE("radeon/R700_rlc.bin"); int r600_debugfs_mc_info_init(struct radeon_device *rdev); @@ -70,6 +74,282 @@ void r600_gpu_init(struct radeon_device *rdev); void r600_fini(struct radeon_device *rdev); +/* hpd for digital panel detect/disconnect */ +bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) +{ + bool connected = false; + + if (ASIC_IS_DCE3(rdev)) { + switch (hpd) { + case RADEON_HPD_1: + if (RREG32(DC_HPD1_INT_STATUS) & DC_HPDx_SENSE) + connected = true; + break; + case RADEON_HPD_2: + if (RREG32(DC_HPD2_INT_STATUS) & DC_HPDx_SENSE) + connected = true; + break; + case RADEON_HPD_3: + if (RREG32(DC_HPD3_INT_STATUS) & DC_HPDx_SENSE) + connected = true; + break; + case RADEON_HPD_4: + if (RREG32(DC_HPD4_INT_STATUS) & DC_HPDx_SENSE) + connected = true; + break; + /* DCE 3.2 */ + case RADEON_HPD_5: + if (RREG32(DC_HPD5_INT_STATUS) & DC_HPDx_SENSE) + connected = true; + break; + case RADEON_HPD_6: + if (RREG32(DC_HPD6_INT_STATUS) & DC_HPDx_SENSE) + connected = true; + break; + default: + break; + } + } else { + switch (hpd) { + case RADEON_HPD_1: + if (RREG32(DC_HOT_PLUG_DETECT1_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) + connected = true; + break; + case RADEON_HPD_2: + if (RREG32(DC_HOT_PLUG_DETECT2_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) + connected = true; + break; + case RADEON_HPD_3: + if (RREG32(DC_HOT_PLUG_DETECT3_INT_STATUS) & DC_HOT_PLUG_DETECTx_SENSE) + connected = true; + break; + default: + break; + } + } + return connected; +} + +void r600_hpd_set_polarity(struct radeon_device *rdev, + enum radeon_hpd_id hpd) +{ + u32 tmp; + bool connected = r600_hpd_sense(rdev, hpd); + + if (ASIC_IS_DCE3(rdev)) { + switch (hpd) { + case RADEON_HPD_1: + tmp = RREG32(DC_HPD1_INT_CONTROL); + if (connected) + tmp &= ~DC_HPDx_INT_POLARITY; + else + tmp |= DC_HPDx_INT_POLARITY; + WREG32(DC_HPD1_INT_CONTROL, tmp); + break; + case RADEON_HPD_2: + tmp = RREG32(DC_HPD2_INT_CONTROL); + if (connected) + tmp &= ~DC_HPDx_INT_POLARITY; + else + tmp |= DC_HPDx_INT_POLARITY; + WREG32(DC_HPD2_INT_CONTROL, tmp); + break; + case RADEON_HPD_3: + tmp = RREG32(DC_HPD3_INT_CONTROL); + if (connected) + tmp &= ~DC_HPDx_INT_POLARITY; + else + tmp |= DC_HPDx_INT_POLARITY; + WREG32(DC_HPD3_INT_CONTROL, tmp); + break; + case RADEON_HPD_4: + tmp = RREG32(DC_HPD4_INT_CONTROL); + if (connected) + tmp &= ~DC_HPDx_INT_POLARITY; + else + tmp |= DC_HPDx_INT_POLARITY; + WREG32(DC_HPD4_INT_CONTROL, tmp); + break; + case RADEON_HPD_5: + tmp = RREG32(DC_HPD5_INT_CONTROL); + if (connected) + tmp &= ~DC_HPDx_INT_POLARITY; + else + tmp |= DC_HPDx_INT_POLARITY; + WREG32(DC_HPD5_INT_CONTROL, tmp); + break; + /* DCE 3.2 */ + case RADEON_HPD_6: + tmp = RREG32(DC_HPD6_INT_CONTROL); + if (connected) + tmp &= ~DC_HPDx_INT_POLARITY; + else + tmp |= DC_HPDx_INT_POLARITY; + WREG32(DC_HPD6_INT_CONTROL, tmp); + break; + default: + break; + } + } else { + switch (hpd) { + case RADEON_HPD_1: + tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL); + if (connected) + tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; + else + tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; + WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); + break; + case RADEON_HPD_2: + tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL); + if (connected) + tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; + else + tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; + WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); + break; + case RADEON_HPD_3: + tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL); + if (connected) + tmp &= ~DC_HOT_PLUG_DETECTx_INT_POLARITY; + else + tmp |= DC_HOT_PLUG_DETECTx_INT_POLARITY; + WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); + break; + default: + break; + } + } +} + +void r600_hpd_init(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + struct drm_connector *connector; + + if (ASIC_IS_DCE3(rdev)) { + u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) | DC_HPDx_RX_INT_TIMER(0xfa); + if (ASIC_IS_DCE32(rdev)) + tmp |= DC_HPDx_EN; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + WREG32(DC_HPD1_CONTROL, tmp); + rdev->irq.hpd[0] = true; + break; + case RADEON_HPD_2: + WREG32(DC_HPD2_CONTROL, tmp); + rdev->irq.hpd[1] = true; + break; + case RADEON_HPD_3: + WREG32(DC_HPD3_CONTROL, tmp); + rdev->irq.hpd[2] = true; + break; + case RADEON_HPD_4: + WREG32(DC_HPD4_CONTROL, tmp); + rdev->irq.hpd[3] = true; + break; + /* DCE 3.2 */ + case RADEON_HPD_5: + WREG32(DC_HPD5_CONTROL, tmp); + rdev->irq.hpd[4] = true; + break; + case RADEON_HPD_6: + WREG32(DC_HPD6_CONTROL, tmp); + rdev->irq.hpd[5] = true; + break; + default: + break; + } + } + } else { + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + WREG32(DC_HOT_PLUG_DETECT1_CONTROL, DC_HOT_PLUG_DETECTx_EN); + rdev->irq.hpd[0] = true; + break; + case RADEON_HPD_2: + WREG32(DC_HOT_PLUG_DETECT2_CONTROL, DC_HOT_PLUG_DETECTx_EN); + rdev->irq.hpd[1] = true; + break; + case RADEON_HPD_3: + WREG32(DC_HOT_PLUG_DETECT3_CONTROL, DC_HOT_PLUG_DETECTx_EN); + rdev->irq.hpd[2] = true; + break; + default: + break; + } + } + } + if (rdev->irq.installed) + r600_irq_set(rdev); +} + +void r600_hpd_fini(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + struct drm_connector *connector; + + if (ASIC_IS_DCE3(rdev)) { + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + WREG32(DC_HPD1_CONTROL, 0); + rdev->irq.hpd[0] = false; + break; + case RADEON_HPD_2: + WREG32(DC_HPD2_CONTROL, 0); + rdev->irq.hpd[1] = false; + break; + case RADEON_HPD_3: + WREG32(DC_HPD3_CONTROL, 0); + rdev->irq.hpd[2] = false; + break; + case RADEON_HPD_4: + WREG32(DC_HPD4_CONTROL, 0); + rdev->irq.hpd[3] = false; + break; + /* DCE 3.2 */ + case RADEON_HPD_5: + WREG32(DC_HPD5_CONTROL, 0); + rdev->irq.hpd[4] = false; + break; + case RADEON_HPD_6: + WREG32(DC_HPD6_CONTROL, 0); + rdev->irq.hpd[5] = false; + break; + default: + break; + } + } + } else { + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + WREG32(DC_HOT_PLUG_DETECT1_CONTROL, 0); + rdev->irq.hpd[0] = false; + break; + case RADEON_HPD_2: + WREG32(DC_HOT_PLUG_DETECT2_CONTROL, 0); + rdev->irq.hpd[1] = false; + break; + case RADEON_HPD_3: + WREG32(DC_HOT_PLUG_DETECT3_CONTROL, 0); + rdev->irq.hpd[2] = false; + break; + default: + break; + } + } + } +} + /* * R600 PCIE GART */ @@ -180,7 +460,7 @@ void r600_pcie_gart_disable(struct radeon_device *rdev) { u32 tmp; - int i; + int i, r; /* Disable all tables */ for (i = 0; i < 7; i++) @@ -208,8 +488,12 @@ WREG32(MC_VM_L1_TLB_MCB_RD_HDP_CNTL, tmp); WREG32(MC_VM_L1_TLB_MCB_WR_HDP_CNTL, tmp); if (rdev->gart.table.vram.robj) { - radeon_object_kunmap(rdev->gart.table.vram.robj); - radeon_object_unpin(rdev->gart.table.vram.robj); + r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->gart.table.vram.robj); + radeon_bo_unpin(rdev->gart.table.vram.robj); + radeon_bo_unreserve(rdev->gart.table.vram.robj); + } } } @@ -340,7 +624,6 @@ fixed20_12 a; u32 tmp; int chansize, numchan; - int r; /* Get VRAM informations */ rdev->mc.vram_is_ddr = true; @@ -383,9 +666,6 @@ rdev->mc.real_vram_size = rdev->mc.aper_size; if (rdev->flags & RADEON_IS_AGP) { - r = radeon_agp_init(rdev); - if (r) - return r; /* gtt_size is setup by radeon_agp_init */ rdev->mc.gtt_location = rdev->mc.agp_base; tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size; @@ -394,11 +674,11 @@ * AGP so that GPU can catch out of VRAM/AGP access */ if (rdev->mc.gtt_location > rdev->mc.mc_vram_size) { - /* Enought place before */ + /* Enough place before */ rdev->mc.vram_location = rdev->mc.gtt_location - rdev->mc.mc_vram_size; } else if (tmp > rdev->mc.mc_vram_size) { - /* Enought place after */ + /* Enough place after */ rdev->mc.vram_location = rdev->mc.gtt_location + rdev->mc.gtt_size; } else { @@ -443,6 +723,10 @@ a.full = rfixed_const(100); rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk); rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a); + + if (rdev->flags & RADEON_IS_IGP) + rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev); + return 0; } @@ -1101,7 +1385,6 @@ (void)RREG32(PCIE_PORT_DATA); } - /* * CP & Ring */ @@ -1110,11 +1393,12 @@ WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); } -int r600_cp_init_microcode(struct radeon_device *rdev) +int r600_init_microcode(struct radeon_device *rdev) { struct platform_device *pdev; const char *chip_name; - size_t pfp_req_size, me_req_size; + const char *rlc_chip_name; + size_t pfp_req_size, me_req_size, rlc_req_size; char fw_name[30]; int err; @@ -1128,30 +1412,62 @@ } switch (rdev->family) { - case CHIP_R600: chip_name = "R600"; break; - case CHIP_RV610: chip_name = "RV610"; break; - case CHIP_RV630: chip_name = "RV630"; break; - case CHIP_RV620: chip_name = "RV620"; break; - case CHIP_RV635: chip_name = "RV635"; break; - case CHIP_RV670: chip_name = "RV670"; break; + case CHIP_R600: + chip_name = "R600"; + rlc_chip_name = "R600"; + break; + case CHIP_RV610: + chip_name = "RV610"; + rlc_chip_name = "R600"; + break; + case CHIP_RV630: + chip_name = "RV630"; + rlc_chip_name = "R600"; + break; + case CHIP_RV620: + chip_name = "RV620"; + rlc_chip_name = "R600"; + break; + case CHIP_RV635: + chip_name = "RV635"; + rlc_chip_name = "R600"; + break; + case CHIP_RV670: + chip_name = "RV670"; + rlc_chip_name = "R600"; + break; case CHIP_RS780: - case CHIP_RS880: chip_name = "RS780"; break; - case CHIP_RV770: chip_name = "RV770"; break; + case CHIP_RS880: + chip_name = "RS780"; + rlc_chip_name = "R600"; + break; + case CHIP_RV770: + chip_name = "RV770"; + rlc_chip_name = "R700"; + break; case CHIP_RV730: - case CHIP_RV740: chip_name = "RV730"; break; - case CHIP_RV710: chip_name = "RV710"; break; + case CHIP_RV740: + chip_name = "RV730"; + rlc_chip_name = "R700"; + break; + case CHIP_RV710: + chip_name = "RV710"; + rlc_chip_name = "R700"; + break; default: BUG(); } if (rdev->family >= CHIP_RV770) { pfp_req_size = R700_PFP_UCODE_SIZE * 4; me_req_size = R700_PM4_UCODE_SIZE * 4; + rlc_req_size = R700_RLC_UCODE_SIZE * 4; } else { pfp_req_size = PFP_UCODE_SIZE * 4; me_req_size = PM4_UCODE_SIZE * 12; + rlc_req_size = RLC_UCODE_SIZE * 4; } - DRM_INFO("Loading %s CP Microcode\n", chip_name); + DRM_INFO("Loading %s Microcode\n", chip_name); snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev); @@ -1175,6 +1491,18 @@ rdev->me_fw->size, fw_name); err = -EINVAL; } + + snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", rlc_chip_name); + err = request_firmware(&rdev->rlc_fw, fw_name, &pdev->dev); + if (err) + goto out; + if (rdev->rlc_fw->size != rlc_req_size) { + printk(KERN_ERR + "r600_rlc: Bogus length %zu in firmware \"%s\"\n", + rdev->rlc_fw->size, fw_name); + err = -EINVAL; + } + out: platform_device_unregister(pdev); @@ -1187,6 +1515,8 @@ rdev->pfp_fw = NULL; release_firmware(rdev->me_fw); rdev->me_fw = NULL; + release_firmware(rdev->rlc_fw); + rdev->rlc_fw = NULL; } return err; } @@ -1324,6 +1654,12 @@ rdev->cp.align_mask = 16 - 1; } +void r600_cp_fini(struct radeon_device *rdev) +{ + r600_cp_stop(rdev); + radeon_ring_fini(rdev); +} + /* * GPU scratch registers helpers function. @@ -1381,10 +1717,16 @@ void r600_wb_disable(struct radeon_device *rdev) { + int r; + WREG32(SCRATCH_UMSK, 0); if (rdev->wb.wb_obj) { - radeon_object_kunmap(rdev->wb.wb_obj); - radeon_object_unpin(rdev->wb.wb_obj); + r = radeon_bo_reserve(rdev->wb.wb_obj, false); + if (unlikely(r != 0)) + return; + radeon_bo_kunmap(rdev->wb.wb_obj); + radeon_bo_unpin(rdev->wb.wb_obj); + radeon_bo_unreserve(rdev->wb.wb_obj); } } @@ -1392,7 +1734,7 @@ { r600_wb_disable(rdev); if (rdev->wb.wb_obj) { - radeon_object_unref(&rdev->wb.wb_obj); + radeon_bo_unref(&rdev->wb.wb_obj); rdev->wb.wb = NULL; rdev->wb.wb_obj = NULL; } @@ -1403,22 +1745,29 @@ int r; if (rdev->wb.wb_obj == NULL) { - r = radeon_object_create(rdev, NULL, RADEON_GPU_PAGE_SIZE, true, - RADEON_GEM_DOMAIN_GTT, false, &rdev->wb.wb_obj); + r = radeon_bo_create(rdev, NULL, RADEON_GPU_PAGE_SIZE, true, + RADEON_GEM_DOMAIN_GTT, &rdev->wb.wb_obj); if (r) { - dev_warn(rdev->dev, "failed to create WB buffer (%d).\n", r); + dev_warn(rdev->dev, "(%d) create WB bo failed\n", r); return r; } - r = radeon_object_pin(rdev->wb.wb_obj, RADEON_GEM_DOMAIN_GTT, + r = radeon_bo_reserve(rdev->wb.wb_obj, false); + if (unlikely(r != 0)) { + r600_wb_fini(rdev); + return r; + } + r = radeon_bo_pin(rdev->wb.wb_obj, RADEON_GEM_DOMAIN_GTT, &rdev->wb.gpu_addr); if (r) { - dev_warn(rdev->dev, "failed to pin WB buffer (%d).\n", r); + radeon_bo_unreserve(rdev->wb.wb_obj); + dev_warn(rdev->dev, "(%d) pin WB bo failed\n", r); r600_wb_fini(rdev); return r; } - r = radeon_object_kmap(rdev->wb.wb_obj, (void **)&rdev->wb.wb); + r = radeon_bo_kmap(rdev->wb.wb_obj, (void **)&rdev->wb.wb); + radeon_bo_unreserve(rdev->wb.wb_obj); if (r) { - dev_warn(rdev->dev, "failed to map WB buffer (%d).\n", r); + dev_warn(rdev->dev, "(%d) map WB bo failed\n", r); r600_wb_fini(rdev); return r; } @@ -1433,41 +1782,36 @@ void r600_fence_ring_emit(struct radeon_device *rdev, struct radeon_fence *fence) { + /* Also consider EVENT_WRITE_EOP. it handles the interrupts + timestamps + events */ /* Emit fence sequence & fire IRQ */ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1)); radeon_ring_write(rdev, ((rdev->fence_drv.scratch_reg - PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); radeon_ring_write(rdev, fence->seq); -} - -int r600_copy_dma(struct radeon_device *rdev, - uint64_t src_offset, - uint64_t dst_offset, - unsigned num_pages, - struct radeon_fence *fence) -{ - /* FIXME: implement */ - return 0; + radeon_ring_write(rdev, PACKET0(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0)); + radeon_ring_write(rdev, 1); + /* CP_INTERRUPT packet 3 no longer exists, use packet 0 */ + radeon_ring_write(rdev, PACKET0(CP_INT_STATUS, 0)); + radeon_ring_write(rdev, RB_INT_STAT); } int r600_copy_blit(struct radeon_device *rdev, uint64_t src_offset, uint64_t dst_offset, unsigned num_pages, struct radeon_fence *fence) { - r600_blit_prepare_copy(rdev, num_pages * RADEON_GPU_PAGE_SIZE); + int r; + + mutex_lock(&rdev->r600_blit.mutex); + rdev->r600_blit.vb_ib = NULL; + r = r600_blit_prepare_copy(rdev, num_pages * RADEON_GPU_PAGE_SIZE); + if (r) { + if (rdev->r600_blit.vb_ib) + radeon_ib_free(rdev, &rdev->r600_blit.vb_ib); + mutex_unlock(&rdev->r600_blit.mutex); + return r; + } r600_kms_blit_copy(rdev, src_offset, dst_offset, num_pages * RADEON_GPU_PAGE_SIZE); r600_blit_done_copy(rdev, fence); - return 0; -} - -int r600_irq_process(struct radeon_device *rdev) -{ - /* FIXME: implement */ - return 0; -} - -int r600_irq_set(struct radeon_device *rdev) -{ - /* FIXME: implement */ + mutex_unlock(&rdev->r600_blit.mutex); return 0; } @@ -1506,6 +1850,14 @@ { int r; + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { + r = r600_init_microcode(rdev); + if (r) { + DRM_ERROR("Failed to load firmware!\n"); + return r; + } + } + r600_mc_program(rdev); if (rdev->flags & RADEON_IS_AGP) { r600_agp_enable(rdev); @@ -1515,13 +1867,33 @@ return r; } r600_gpu_init(rdev); - - r = radeon_object_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, - &rdev->r600_blit.shader_gpu_addr); + r = r600_blit_init(rdev); if (r) { - DRM_ERROR("failed to pin blit object %d\n", r); + r600_blit_fini(rdev); + rdev->asic->copy = NULL; + dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); + } + /* pin copy shader into vram */ + if (rdev->r600_blit.shader_obj) { + r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, + &rdev->r600_blit.shader_gpu_addr); + radeon_bo_unreserve(rdev->r600_blit.shader_obj); + if (r) { + dev_err(rdev->dev, "(%d) pin blit object failed\n", r); + return r; + } + } + /* Enable IRQ */ + r = r600_irq_init(rdev); + if (r) { + DRM_ERROR("radeon: IH init failed (%d).\n", r); + radeon_irq_kms_fini(rdev); return r; } + r600_irq_set(rdev); r = radeon_ring_init(rdev, rdev->cp.ring_size); if (r) @@ -1578,18 +1950,35 @@ DRM_ERROR("radeon: failled testing IB (%d).\n", r); return r; } + + r = r600_audio_init(rdev); + if (r) { + DRM_ERROR("radeon: audio resume failed\n"); + return r; + } + return r; } int r600_suspend(struct radeon_device *rdev) { + int r; + + r600_audio_fini(rdev); /* FIXME: we should wait for ring to be empty */ r600_cp_stop(rdev); rdev->cp.ready = false; + r600_irq_suspend(rdev); r600_wb_disable(rdev); r600_pcie_gart_disable(rdev); /* unpin shaders bo */ - radeon_object_unpin(rdev->r600_blit.shader_obj); + if (rdev->r600_blit.shader_obj) { + r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); + if (!r) { + radeon_bo_unpin(rdev->r600_blit.shader_obj); + radeon_bo_unreserve(rdev->r600_blit.shader_obj); + } + } return 0; } @@ -1627,7 +2016,11 @@ if (r) return r; /* Post card if necessary */ - if (!r600_card_posted(rdev) && rdev->bios) { + if (!r600_card_posted(rdev)) { + if (!rdev->bios) { + dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n"); + return -EINVAL; + } DRM_INFO("GPU not posted. posting now...\n"); atom_asic_init(rdev->mode_info.atom_context); } @@ -1646,73 +2039,78 @@ r = radeon_fence_driver_init(rdev); if (r) return r; + if (rdev->flags & RADEON_IS_AGP) { + r = radeon_agp_init(rdev); + if (r) + radeon_agp_disable(rdev); + } r = r600_mc_init(rdev); if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); + if (r) + return r; + + r = radeon_irq_kms_init(rdev); if (r) return r; + rdev->cp.ring_obj = NULL; r600_ring_init(rdev, 1024 * 1024); - if (!rdev->me_fw || !rdev->pfp_fw) { - r = r600_cp_init_microcode(rdev); - if (r) { - DRM_ERROR("Failed to load firmware!\n"); - return r; - } - } + rdev->ih.ring_obj = NULL; + r600_ih_ring_init(rdev, 64 * 1024); r = r600_pcie_gart_init(rdev); if (r) return r; rdev->accel_working = true; - r = r600_blit_init(rdev); - if (r) { - DRM_ERROR("radeon: failled blitter (%d).\n", r); - return r; - } - r = r600_startup(rdev); if (r) { - r600_suspend(rdev); + dev_err(rdev->dev, "disabling GPU acceleration\n"); + r600_cp_fini(rdev); r600_wb_fini(rdev); - radeon_ring_fini(rdev); + r600_irq_fini(rdev); + radeon_irq_kms_fini(rdev); r600_pcie_gart_fini(rdev); rdev->accel_working = false; } if (rdev->accel_working) { r = radeon_ib_pool_init(rdev); if (r) { - DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); - rdev->accel_working = false; - } - r = r600_ib_test(rdev); - if (r) { - DRM_ERROR("radeon: failled testing IB (%d).\n", r); + dev_err(rdev->dev, "IB initialization failed (%d).\n", r); rdev->accel_working = false; + } else { + r = r600_ib_test(rdev); + if (r) { + dev_err(rdev->dev, "IB test failed (%d).\n", r); + rdev->accel_working = false; + } } } + + r = r600_audio_init(rdev); + if (r) + return r; /* TODO error handling */ return 0; } void r600_fini(struct radeon_device *rdev) { - /* Suspend operations */ - r600_suspend(rdev); - + r600_audio_fini(rdev); r600_blit_fini(rdev); - radeon_ring_fini(rdev); + r600_cp_fini(rdev); r600_wb_fini(rdev); + r600_irq_fini(rdev); + radeon_irq_kms_fini(rdev); r600_pcie_gart_fini(rdev); + radeon_agp_fini(rdev); radeon_gem_fini(rdev); radeon_fence_driver_fini(rdev); radeon_clocks_fini(rdev); - if (rdev->flags & RADEON_IS_AGP) - radeon_agp_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -1798,8 +2196,668 @@ return r; } +/* + * Interrupts + * + * Interrupts use a ring buffer on r6xx/r7xx hardware. It works pretty + * the same as the CP ring buffer, but in reverse. Rather than the CPU + * writing to the ring and the GPU consuming, the GPU writes to the ring + * and host consumes. As the host irq handler processes interrupts, it + * increments the rptr. When the rptr catches up with the wptr, all the + * current interrupts have been processed. + */ + +void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size) +{ + u32 rb_bufsz; + + /* Align ring size */ + rb_bufsz = drm_order(ring_size / 4); + ring_size = (1 << rb_bufsz) * 4; + rdev->ih.ring_size = ring_size; + rdev->ih.ptr_mask = rdev->ih.ring_size - 1; + rdev->ih.rptr = 0; +} + +static int r600_ih_ring_alloc(struct radeon_device *rdev) +{ + int r; + + /* Allocate ring buffer */ + if (rdev->ih.ring_obj == NULL) { + r = radeon_bo_create(rdev, NULL, rdev->ih.ring_size, + true, + RADEON_GEM_DOMAIN_GTT, + &rdev->ih.ring_obj); + if (r) { + DRM_ERROR("radeon: failed to create ih ring buffer (%d).\n", r); + return r; + } + r = radeon_bo_reserve(rdev->ih.ring_obj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rdev->ih.ring_obj, + RADEON_GEM_DOMAIN_GTT, + &rdev->ih.gpu_addr); + if (r) { + radeon_bo_unreserve(rdev->ih.ring_obj); + DRM_ERROR("radeon: failed to pin ih ring buffer (%d).\n", r); + return r; + } + r = radeon_bo_kmap(rdev->ih.ring_obj, + (void **)&rdev->ih.ring); + radeon_bo_unreserve(rdev->ih.ring_obj); + if (r) { + DRM_ERROR("radeon: failed to map ih ring buffer (%d).\n", r); + return r; + } + } + return 0; +} +static void r600_ih_ring_fini(struct radeon_device *rdev) +{ + int r; + if (rdev->ih.ring_obj) { + r = radeon_bo_reserve(rdev->ih.ring_obj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->ih.ring_obj); + radeon_bo_unpin(rdev->ih.ring_obj); + radeon_bo_unreserve(rdev->ih.ring_obj); + } + radeon_bo_unref(&rdev->ih.ring_obj); + rdev->ih.ring = NULL; + rdev->ih.ring_obj = NULL; + } +} +static void r600_rlc_stop(struct radeon_device *rdev) +{ + + if (rdev->family >= CHIP_RV770) { + /* r7xx asics need to soft reset RLC before halting */ + WREG32(SRBM_SOFT_RESET, SOFT_RESET_RLC); + RREG32(SRBM_SOFT_RESET); + udelay(15000); + WREG32(SRBM_SOFT_RESET, 0); + RREG32(SRBM_SOFT_RESET); + } + + WREG32(RLC_CNTL, 0); +} + +static void r600_rlc_start(struct radeon_device *rdev) +{ + WREG32(RLC_CNTL, RLC_ENABLE); +} + +static int r600_rlc_init(struct radeon_device *rdev) +{ + u32 i; + const __be32 *fw_data; + + if (!rdev->rlc_fw) + return -EINVAL; + + r600_rlc_stop(rdev); + + WREG32(RLC_HB_BASE, 0); + WREG32(RLC_HB_CNTL, 0); + WREG32(RLC_HB_RPTR, 0); + WREG32(RLC_HB_WPTR, 0); + WREG32(RLC_HB_WPTR_LSB_ADDR, 0); + WREG32(RLC_HB_WPTR_MSB_ADDR, 0); + WREG32(RLC_MC_CNTL, 0); + WREG32(RLC_UCODE_CNTL, 0); + + fw_data = (const __be32 *)rdev->rlc_fw->data; + if (rdev->family >= CHIP_RV770) { + for (i = 0; i < R700_RLC_UCODE_SIZE; i++) { + WREG32(RLC_UCODE_ADDR, i); + WREG32(RLC_UCODE_DATA, be32_to_cpup(fw_data++)); + } + } else { + for (i = 0; i < RLC_UCODE_SIZE; i++) { + WREG32(RLC_UCODE_ADDR, i); + WREG32(RLC_UCODE_DATA, be32_to_cpup(fw_data++)); + } + } + WREG32(RLC_UCODE_ADDR, 0); + + r600_rlc_start(rdev); + + return 0; +} + +static void r600_enable_interrupts(struct radeon_device *rdev) +{ + u32 ih_cntl = RREG32(IH_CNTL); + u32 ih_rb_cntl = RREG32(IH_RB_CNTL); + + ih_cntl |= ENABLE_INTR; + ih_rb_cntl |= IH_RB_ENABLE; + WREG32(IH_CNTL, ih_cntl); + WREG32(IH_RB_CNTL, ih_rb_cntl); + rdev->ih.enabled = true; +} + +static void r600_disable_interrupts(struct radeon_device *rdev) +{ + u32 ih_rb_cntl = RREG32(IH_RB_CNTL); + u32 ih_cntl = RREG32(IH_CNTL); + + ih_rb_cntl &= ~IH_RB_ENABLE; + ih_cntl &= ~ENABLE_INTR; + WREG32(IH_RB_CNTL, ih_rb_cntl); + WREG32(IH_CNTL, ih_cntl); + /* set rptr, wptr to 0 */ + WREG32(IH_RB_RPTR, 0); + WREG32(IH_RB_WPTR, 0); + rdev->ih.enabled = false; + rdev->ih.wptr = 0; + rdev->ih.rptr = 0; +} + +static void r600_disable_interrupt_state(struct radeon_device *rdev) +{ + u32 tmp; + + WREG32(CP_INT_CNTL, 0); + WREG32(GRBM_INT_CNTL, 0); + WREG32(DxMODE_INT_MASK, 0); + if (ASIC_IS_DCE3(rdev)) { + WREG32(DCE3_DACA_AUTODETECT_INT_CONTROL, 0); + WREG32(DCE3_DACB_AUTODETECT_INT_CONTROL, 0); + tmp = RREG32(DC_HPD1_INT_CONTROL) & DC_HPDx_INT_POLARITY; + WREG32(DC_HPD1_INT_CONTROL, tmp); + tmp = RREG32(DC_HPD2_INT_CONTROL) & DC_HPDx_INT_POLARITY; + WREG32(DC_HPD2_INT_CONTROL, tmp); + tmp = RREG32(DC_HPD3_INT_CONTROL) & DC_HPDx_INT_POLARITY; + WREG32(DC_HPD3_INT_CONTROL, tmp); + tmp = RREG32(DC_HPD4_INT_CONTROL) & DC_HPDx_INT_POLARITY; + WREG32(DC_HPD4_INT_CONTROL, tmp); + if (ASIC_IS_DCE32(rdev)) { + tmp = RREG32(DC_HPD5_INT_CONTROL) & DC_HPDx_INT_POLARITY; + WREG32(DC_HPD5_INT_CONTROL, 0); + tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY; + WREG32(DC_HPD6_INT_CONTROL, 0); + } + } else { + WREG32(DACA_AUTODETECT_INT_CONTROL, 0); + WREG32(DACB_AUTODETECT_INT_CONTROL, 0); + tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL) & DC_HOT_PLUG_DETECTx_INT_POLARITY; + WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, 0); + tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL) & DC_HOT_PLUG_DETECTx_INT_POLARITY; + WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, 0); + tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL) & DC_HOT_PLUG_DETECTx_INT_POLARITY; + WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, 0); + } +} + +int r600_irq_init(struct radeon_device *rdev) +{ + int ret = 0; + int rb_bufsz; + u32 interrupt_cntl, ih_cntl, ih_rb_cntl; + + /* allocate ring */ + ret = r600_ih_ring_alloc(rdev); + if (ret) + return ret; + + /* disable irqs */ + r600_disable_interrupts(rdev); + + /* init rlc */ + ret = r600_rlc_init(rdev); + if (ret) { + r600_ih_ring_fini(rdev); + return ret; + } + + /* setup interrupt control */ + /* set dummy read address to ring address */ + WREG32(INTERRUPT_CNTL2, rdev->ih.gpu_addr >> 8); + interrupt_cntl = RREG32(INTERRUPT_CNTL); + /* IH_DUMMY_RD_OVERRIDE=0 - dummy read disabled with msi, enabled without msi + * IH_DUMMY_RD_OVERRIDE=1 - dummy read controlled by IH_DUMMY_RD_EN + */ + interrupt_cntl &= ~IH_DUMMY_RD_OVERRIDE; + /* IH_REQ_NONSNOOP_EN=1 if ring is in non-cacheable memory, e.g., vram */ + interrupt_cntl &= ~IH_REQ_NONSNOOP_EN; + WREG32(INTERRUPT_CNTL, interrupt_cntl); + + WREG32(IH_RB_BASE, rdev->ih.gpu_addr >> 8); + rb_bufsz = drm_order(rdev->ih.ring_size / 4); + + ih_rb_cntl = (IH_WPTR_OVERFLOW_ENABLE | + IH_WPTR_OVERFLOW_CLEAR | + (rb_bufsz << 1)); + /* WPTR writeback, not yet */ + /*ih_rb_cntl |= IH_WPTR_WRITEBACK_ENABLE;*/ + WREG32(IH_RB_WPTR_ADDR_LO, 0); + WREG32(IH_RB_WPTR_ADDR_HI, 0); + + WREG32(IH_RB_CNTL, ih_rb_cntl); + + /* set rptr, wptr to 0 */ + WREG32(IH_RB_RPTR, 0); + WREG32(IH_RB_WPTR, 0); + + /* Default settings for IH_CNTL (disabled at first) */ + ih_cntl = MC_WRREQ_CREDIT(0x10) | MC_WR_CLEAN_CNT(0x10); + /* RPTR_REARM only works if msi's are enabled */ + if (rdev->msi_enabled) + ih_cntl |= RPTR_REARM; + +#ifdef __BIG_ENDIAN + ih_cntl |= IH_MC_SWAP(IH_MC_SWAP_32BIT); +#endif + WREG32(IH_CNTL, ih_cntl); + + /* force the active interrupt state to all disabled */ + r600_disable_interrupt_state(rdev); + + /* enable irqs */ + r600_enable_interrupts(rdev); + + return ret; +} + +void r600_irq_suspend(struct radeon_device *rdev) +{ + r600_disable_interrupts(rdev); + r600_rlc_stop(rdev); +} + +void r600_irq_fini(struct radeon_device *rdev) +{ + r600_irq_suspend(rdev); + r600_ih_ring_fini(rdev); +} + +int r600_irq_set(struct radeon_device *rdev) +{ + u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE; + u32 mode_int = 0; + u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0; + + if (!rdev->irq.installed) { + WARN(1, "Can't enable IRQ/MSI because no handler is installed.\n"); + return -EINVAL; + } + /* don't enable anything if the ih is disabled */ + if (!rdev->ih.enabled) { + r600_disable_interrupts(rdev); + /* force the active interrupt state to all disabled */ + r600_disable_interrupt_state(rdev); + return 0; + } + + if (ASIC_IS_DCE3(rdev)) { + hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN; + hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN; + hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN; + hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN; + if (ASIC_IS_DCE32(rdev)) { + hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN; + hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN; + } + } else { + hpd1 = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL) & ~DC_HPDx_INT_EN; + hpd2 = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL) & ~DC_HPDx_INT_EN; + hpd3 = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL) & ~DC_HPDx_INT_EN; + } + + if (rdev->irq.sw_int) { + DRM_DEBUG("r600_irq_set: sw int\n"); + cp_int_cntl |= RB_INT_ENABLE; + } + if (rdev->irq.crtc_vblank_int[0]) { + DRM_DEBUG("r600_irq_set: vblank 0\n"); + mode_int |= D1MODE_VBLANK_INT_MASK; + } + if (rdev->irq.crtc_vblank_int[1]) { + DRM_DEBUG("r600_irq_set: vblank 1\n"); + mode_int |= D2MODE_VBLANK_INT_MASK; + } + if (rdev->irq.hpd[0]) { + DRM_DEBUG("r600_irq_set: hpd 1\n"); + hpd1 |= DC_HPDx_INT_EN; + } + if (rdev->irq.hpd[1]) { + DRM_DEBUG("r600_irq_set: hpd 2\n"); + hpd2 |= DC_HPDx_INT_EN; + } + if (rdev->irq.hpd[2]) { + DRM_DEBUG("r600_irq_set: hpd 3\n"); + hpd3 |= DC_HPDx_INT_EN; + } + if (rdev->irq.hpd[3]) { + DRM_DEBUG("r600_irq_set: hpd 4\n"); + hpd4 |= DC_HPDx_INT_EN; + } + if (rdev->irq.hpd[4]) { + DRM_DEBUG("r600_irq_set: hpd 5\n"); + hpd5 |= DC_HPDx_INT_EN; + } + if (rdev->irq.hpd[5]) { + DRM_DEBUG("r600_irq_set: hpd 6\n"); + hpd6 |= DC_HPDx_INT_EN; + } + + WREG32(CP_INT_CNTL, cp_int_cntl); + WREG32(DxMODE_INT_MASK, mode_int); + if (ASIC_IS_DCE3(rdev)) { + WREG32(DC_HPD1_INT_CONTROL, hpd1); + WREG32(DC_HPD2_INT_CONTROL, hpd2); + WREG32(DC_HPD3_INT_CONTROL, hpd3); + WREG32(DC_HPD4_INT_CONTROL, hpd4); + if (ASIC_IS_DCE32(rdev)) { + WREG32(DC_HPD5_INT_CONTROL, hpd5); + WREG32(DC_HPD6_INT_CONTROL, hpd6); + } + } else { + WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, hpd1); + WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); + WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, hpd3); + } + + return 0; +} + +static inline void r600_irq_ack(struct radeon_device *rdev, + u32 *disp_int, + u32 *disp_int_cont, + u32 *disp_int_cont2) +{ + u32 tmp; + + if (ASIC_IS_DCE3(rdev)) { + *disp_int = RREG32(DCE3_DISP_INTERRUPT_STATUS); + *disp_int_cont = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE); + *disp_int_cont2 = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE2); + } else { + *disp_int = RREG32(DISP_INTERRUPT_STATUS); + *disp_int_cont = RREG32(DISP_INTERRUPT_STATUS_CONTINUE); + *disp_int_cont2 = 0; + } + + if (*disp_int & LB_D1_VBLANK_INTERRUPT) + WREG32(D1MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK); + if (*disp_int & LB_D1_VLINE_INTERRUPT) + WREG32(D1MODE_VLINE_STATUS, DxMODE_VLINE_ACK); + if (*disp_int & LB_D2_VBLANK_INTERRUPT) + WREG32(D2MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK); + if (*disp_int & LB_D2_VLINE_INTERRUPT) + WREG32(D2MODE_VLINE_STATUS, DxMODE_VLINE_ACK); + if (*disp_int & DC_HPD1_INTERRUPT) { + if (ASIC_IS_DCE3(rdev)) { + tmp = RREG32(DC_HPD1_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HPD1_INT_CONTROL, tmp); + } else { + tmp = RREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); + } + } + if (*disp_int & DC_HPD2_INTERRUPT) { + if (ASIC_IS_DCE3(rdev)) { + tmp = RREG32(DC_HPD2_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HPD2_INT_CONTROL, tmp); + } else { + tmp = RREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); + } + } + if (*disp_int_cont & DC_HPD3_INTERRUPT) { + if (ASIC_IS_DCE3(rdev)) { + tmp = RREG32(DC_HPD3_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HPD3_INT_CONTROL, tmp); + } else { + tmp = RREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); + } + } + if (*disp_int_cont & DC_HPD4_INTERRUPT) { + tmp = RREG32(DC_HPD4_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HPD4_INT_CONTROL, tmp); + } + if (ASIC_IS_DCE32(rdev)) { + if (*disp_int_cont2 & DC_HPD5_INTERRUPT) { + tmp = RREG32(DC_HPD5_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HPD5_INT_CONTROL, tmp); + } + if (*disp_int_cont2 & DC_HPD6_INTERRUPT) { + tmp = RREG32(DC_HPD5_INT_CONTROL); + tmp |= DC_HPDx_INT_ACK; + WREG32(DC_HPD6_INT_CONTROL, tmp); + } + } +} + +void r600_irq_disable(struct radeon_device *rdev) +{ + u32 disp_int, disp_int_cont, disp_int_cont2; + + r600_disable_interrupts(rdev); + /* Wait and acknowledge irq */ + mdelay(1); + r600_irq_ack(rdev, &disp_int, &disp_int_cont, &disp_int_cont2); + r600_disable_interrupt_state(rdev); +} + +static inline u32 r600_get_ih_wptr(struct radeon_device *rdev) +{ + u32 wptr, tmp; + + /* XXX use writeback */ + wptr = RREG32(IH_RB_WPTR); + + if (wptr & RB_OVERFLOW) { + /* When a ring buffer overflow happen start parsing interrupt + * from the last not overwritten vector (wptr + 16). Hopefully + * this should allow us to catchup. + */ + dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n", + wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask); + rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask; + tmp = RREG32(IH_RB_CNTL); + tmp |= IH_WPTR_OVERFLOW_CLEAR; + WREG32(IH_RB_CNTL, tmp); + } + return (wptr & rdev->ih.ptr_mask); +} + +/* r600 IV Ring + * Each IV ring entry is 128 bits: + * [7:0] - interrupt source id + * [31:8] - reserved + * [59:32] - interrupt source data + * [127:60] - reserved + * + * The basic interrupt vector entries + * are decoded as follows: + * src_id src_data description + * 1 0 D1 Vblank + * 1 1 D1 Vline + * 5 0 D2 Vblank + * 5 1 D2 Vline + * 19 0 FP Hot plug detection A + * 19 1 FP Hot plug detection B + * 19 2 DAC A auto-detection + * 19 3 DAC B auto-detection + * 176 - CP_INT RB + * 177 - CP_INT IB1 + * 178 - CP_INT IB2 + * 181 - EOP Interrupt + * 233 - GUI Idle + * + * Note, these are based on r600 and may need to be + * adjusted or added to on newer asics + */ + +int r600_irq_process(struct radeon_device *rdev) +{ + u32 wptr = r600_get_ih_wptr(rdev); + u32 rptr = rdev->ih.rptr; + u32 src_id, src_data; + u32 ring_index, disp_int, disp_int_cont, disp_int_cont2; + unsigned long flags; + bool queue_hotplug = false; + + DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr); + if (!rdev->ih.enabled) + return IRQ_NONE; + + spin_lock_irqsave(&rdev->ih.lock, flags); + + if (rptr == wptr) { + spin_unlock_irqrestore(&rdev->ih.lock, flags); + return IRQ_NONE; + } + if (rdev->shutdown) { + spin_unlock_irqrestore(&rdev->ih.lock, flags); + return IRQ_NONE; + } + +restart_ih: + /* display interrupts */ + r600_irq_ack(rdev, &disp_int, &disp_int_cont, &disp_int_cont2); + + rdev->ih.wptr = wptr; + while (rptr != wptr) { + /* wptr/rptr are in bytes! */ + ring_index = rptr / 4; + src_id = rdev->ih.ring[ring_index] & 0xff; + src_data = rdev->ih.ring[ring_index + 1] & 0xfffffff; + + switch (src_id) { + case 1: /* D1 vblank/vline */ + switch (src_data) { + case 0: /* D1 vblank */ + if (disp_int & LB_D1_VBLANK_INTERRUPT) { + drm_handle_vblank(rdev->ddev, 0); + disp_int &= ~LB_D1_VBLANK_INTERRUPT; + DRM_DEBUG("IH: D1 vblank\n"); + } + break; + case 1: /* D1 vline */ + if (disp_int & LB_D1_VLINE_INTERRUPT) { + disp_int &= ~LB_D1_VLINE_INTERRUPT; + DRM_DEBUG("IH: D1 vline\n"); + } + break; + default: + DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); + break; + } + break; + case 5: /* D2 vblank/vline */ + switch (src_data) { + case 0: /* D2 vblank */ + if (disp_int & LB_D2_VBLANK_INTERRUPT) { + drm_handle_vblank(rdev->ddev, 1); + disp_int &= ~LB_D2_VBLANK_INTERRUPT; + DRM_DEBUG("IH: D2 vblank\n"); + } + break; + case 1: /* D1 vline */ + if (disp_int & LB_D2_VLINE_INTERRUPT) { + disp_int &= ~LB_D2_VLINE_INTERRUPT; + DRM_DEBUG("IH: D2 vline\n"); + } + break; + default: + DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); + break; + } + break; + case 19: /* HPD/DAC hotplug */ + switch (src_data) { + case 0: + if (disp_int & DC_HPD1_INTERRUPT) { + disp_int &= ~DC_HPD1_INTERRUPT; + queue_hotplug = true; + DRM_DEBUG("IH: HPD1\n"); + } + break; + case 1: + if (disp_int & DC_HPD2_INTERRUPT) { + disp_int &= ~DC_HPD2_INTERRUPT; + queue_hotplug = true; + DRM_DEBUG("IH: HPD2\n"); + } + break; + case 4: + if (disp_int_cont & DC_HPD3_INTERRUPT) { + disp_int_cont &= ~DC_HPD3_INTERRUPT; + queue_hotplug = true; + DRM_DEBUG("IH: HPD3\n"); + } + break; + case 5: + if (disp_int_cont & DC_HPD4_INTERRUPT) { + disp_int_cont &= ~DC_HPD4_INTERRUPT; + queue_hotplug = true; + DRM_DEBUG("IH: HPD4\n"); + } + break; + case 10: + if (disp_int_cont2 & DC_HPD5_INTERRUPT) { + disp_int_cont &= ~DC_HPD5_INTERRUPT; + queue_hotplug = true; + DRM_DEBUG("IH: HPD5\n"); + } + break; + case 12: + if (disp_int_cont2 & DC_HPD6_INTERRUPT) { + disp_int_cont &= ~DC_HPD6_INTERRUPT; + queue_hotplug = true; + DRM_DEBUG("IH: HPD6\n"); + } + break; + default: + DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); + break; + } + break; + case 176: /* CP_INT in ring buffer */ + case 177: /* CP_INT in IB1 */ + case 178: /* CP_INT in IB2 */ + DRM_DEBUG("IH: CP int: 0x%08x\n", src_data); + radeon_fence_process(rdev); + break; + case 181: /* CP EOP event */ + DRM_DEBUG("IH: CP EOP\n"); + break; + default: + DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data); + break; + } + + /* wptr/rptr are in bytes! */ + rptr += 16; + rptr &= rdev->ih.ptr_mask; + } + /* make sure wptr hasn't changed while processing */ + wptr = r600_get_ih_wptr(rdev); + if (wptr != rdev->ih.wptr) + goto restart_ih; + if (queue_hotplug) + queue_work(rdev->wq, &rdev->hotplug_work); + rdev->ih.rptr = rptr; + WREG32(IH_RB_RPTR, rdev->ih.rptr); + spin_unlock_irqrestore(&rdev->ih.lock, flags); + return IRQ_HANDLED; +} /* * Debugfs info @@ -1811,21 +2869,21 @@ struct drm_info_node *node = (struct drm_info_node *) m->private; struct drm_device *dev = node->minor->dev; struct radeon_device *rdev = dev->dev_private; - uint32_t rdp, wdp; unsigned count, i, j; radeon_ring_free_size(rdev); - rdp = RREG32(CP_RB_RPTR); - wdp = RREG32(CP_RB_WPTR); - count = (rdp + rdev->cp.ring_size - wdp) & rdev->cp.ptr_mask; + count = (rdev->cp.ring_size / 4) - rdev->cp.ring_free_dw; seq_printf(m, "CP_STAT 0x%08x\n", RREG32(CP_STAT)); - seq_printf(m, "CP_RB_WPTR 0x%08x\n", wdp); - seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp); + seq_printf(m, "CP_RB_WPTR 0x%08x\n", RREG32(CP_RB_WPTR)); + seq_printf(m, "CP_RB_RPTR 0x%08x\n", RREG32(CP_RB_RPTR)); + seq_printf(m, "driver's copy of the CP_RB_WPTR 0x%08x\n", rdev->cp.wptr); + seq_printf(m, "driver's copy of the CP_RB_RPTR 0x%08x\n", rdev->cp.rptr); seq_printf(m, "%u free dwords in ring\n", rdev->cp.ring_free_dw); seq_printf(m, "%u dwords in ring\n", count); + i = rdev->cp.rptr; for (j = 0; j <= count; j++) { - i = (rdp + j) & rdev->cp.ptr_mask; seq_printf(m, "r[%04d]=0x%08x\n", i, rdev->cp.ring[i]); + i = (i + 1) & rdev->cp.ptr_mask; } return 0; } @@ -1855,3 +2913,18 @@ return 0; #endif } + +/** + * r600_ioctl_wait_idle - flush host path cache on wait idle ioctl + * rdev: radeon device structure + * bo: buffer object struct which userspace is waiting for idle + * + * Some R6XX/R7XX doesn't seems to take into account HDP flush performed + * through ring buffer, this leads to corruption in rendering, see + * http://bugzilla.kernel.org/show_bug.cgi?id=15186 to avoid this we + * directly perform HDP flush by writing register through MMIO. + */ +void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo) +{ + WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1); +} --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_benchmark.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_benchmark.c @@ -29,8 +29,8 @@ void radeon_benchmark_move(struct radeon_device *rdev, unsigned bsize, unsigned sdomain, unsigned ddomain) { - struct radeon_object *dobj = NULL; - struct radeon_object *sobj = NULL; + struct radeon_bo *dobj = NULL; + struct radeon_bo *sobj = NULL; struct radeon_fence *fence = NULL; uint64_t saddr, daddr; unsigned long start_jiffies; @@ -41,47 +41,66 @@ size = bsize; n = 1024; - r = radeon_object_create(rdev, NULL, size, true, sdomain, false, &sobj); + r = radeon_bo_create(rdev, NULL, size, true, sdomain, &sobj); if (r) { goto out_cleanup; } - r = radeon_object_pin(sobj, sdomain, &saddr); + r = radeon_bo_reserve(sobj, false); + if (unlikely(r != 0)) + goto out_cleanup; + r = radeon_bo_pin(sobj, sdomain, &saddr); + radeon_bo_unreserve(sobj); if (r) { goto out_cleanup; } - r = radeon_object_create(rdev, NULL, size, true, ddomain, false, &dobj); + r = radeon_bo_create(rdev, NULL, size, true, ddomain, &dobj); if (r) { goto out_cleanup; } - r = radeon_object_pin(dobj, ddomain, &daddr); + r = radeon_bo_reserve(dobj, false); + if (unlikely(r != 0)) + goto out_cleanup; + r = radeon_bo_pin(dobj, ddomain, &daddr); + radeon_bo_unreserve(dobj); if (r) { goto out_cleanup; } - start_jiffies = jiffies; - for (i = 0; i < n; i++) { - r = radeon_fence_create(rdev, &fence); - if (r) { - goto out_cleanup; - } - r = radeon_copy_dma(rdev, saddr, daddr, size / RADEON_GPU_PAGE_SIZE, fence); - if (r) { - goto out_cleanup; - } - r = radeon_fence_wait(fence, false); - if (r) { - goto out_cleanup; + + /* r100 doesn't have dma engine so skip the test */ + if (rdev->asic->copy_dma) { + + start_jiffies = jiffies; + for (i = 0; i < n; i++) { + r = radeon_fence_create(rdev, &fence); + if (r) { + goto out_cleanup; + } + + r = radeon_copy_dma(rdev, saddr, daddr, + size / RADEON_GPU_PAGE_SIZE, fence); + + if (r) { + goto out_cleanup; + } + r = radeon_fence_wait(fence, false); + if (r) { + goto out_cleanup; + } + radeon_fence_unref(&fence); + } + end_jiffies = jiffies; + time = end_jiffies - start_jiffies; + time = jiffies_to_msecs(time); + if (time > 0) { + i = ((n * size) >> 10) / time; + printk(KERN_INFO "radeon: dma %u bo moves of %ukb from" + " %d to %d in %lums (%ukb/ms %ukb/s %uM/s)\n", + n, size >> 10, + sdomain, ddomain, time, + i, i * 1000, (i * 1000) / 1024); } - radeon_fence_unref(&fence); - } - end_jiffies = jiffies; - time = end_jiffies - start_jiffies; - time = jiffies_to_msecs(time); - if (time > 0) { - i = ((n * size) >> 10) / time; - printk(KERN_INFO "radeon: dma %u bo moves of %ukb from %d to %d" - " in %lums (%ukb/ms %ukb/s %uM/s)\n", n, size >> 10, - sdomain, ddomain, time, i, i * 1000, (i * 1000) / 1024); } + start_jiffies = jiffies; for (i = 0; i < n; i++) { r = radeon_fence_create(rdev, &fence); @@ -109,12 +128,20 @@ } out_cleanup: if (sobj) { - radeon_object_unpin(sobj); - radeon_object_unref(&sobj); + r = radeon_bo_reserve(sobj, false); + if (likely(r == 0)) { + radeon_bo_unpin(sobj); + radeon_bo_unreserve(sobj); + } + radeon_bo_unref(&sobj); } if (dobj) { - radeon_object_unpin(dobj); - radeon_object_unref(&dobj); + r = radeon_bo_reserve(dobj, false); + if (likely(r == 0)) { + radeon_bo_unpin(dobj); + radeon_bo_unreserve(dobj); + } + radeon_bo_unref(&dobj); } if (fence) { radeon_fence_unref(&fence); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_gart.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_gart.c @@ -78,11 +78,9 @@ int r; if (rdev->gart.table.vram.robj == NULL) { - r = radeon_object_create(rdev, NULL, - rdev->gart.table_size, - true, - RADEON_GEM_DOMAIN_VRAM, - false, &rdev->gart.table.vram.robj); + r = radeon_bo_create(rdev, NULL, rdev->gart.table_size, + true, RADEON_GEM_DOMAIN_VRAM, + &rdev->gart.table.vram.robj); if (r) { return r; } @@ -95,32 +93,38 @@ uint64_t gpu_addr; int r; - r = radeon_object_pin(rdev->gart.table.vram.robj, - RADEON_GEM_DOMAIN_VRAM, &gpu_addr); - if (r) { - radeon_object_unref(&rdev->gart.table.vram.robj); + r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); + if (unlikely(r != 0)) return r; - } - r = radeon_object_kmap(rdev->gart.table.vram.robj, - (void **)&rdev->gart.table.vram.ptr); + r = radeon_bo_pin(rdev->gart.table.vram.robj, + RADEON_GEM_DOMAIN_VRAM, &gpu_addr); if (r) { - radeon_object_unpin(rdev->gart.table.vram.robj); - radeon_object_unref(&rdev->gart.table.vram.robj); - DRM_ERROR("radeon: failed to map gart vram table.\n"); + radeon_bo_unreserve(rdev->gart.table.vram.robj); return r; } + r = radeon_bo_kmap(rdev->gart.table.vram.robj, + (void **)&rdev->gart.table.vram.ptr); + if (r) + radeon_bo_unpin(rdev->gart.table.vram.robj); + radeon_bo_unreserve(rdev->gart.table.vram.robj); rdev->gart.table_addr = gpu_addr; - return 0; + return r; } void radeon_gart_table_vram_free(struct radeon_device *rdev) { + int r; + if (rdev->gart.table.vram.robj == NULL) { return; } - radeon_object_kunmap(rdev->gart.table.vram.robj); - radeon_object_unpin(rdev->gart.table.vram.robj); - radeon_object_unref(&rdev->gart.table.vram.robj); + r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->gart.table.vram.robj); + radeon_bo_unpin(rdev->gart.table.vram.robj); + radeon_bo_unreserve(rdev->gart.table.vram.robj); + } + radeon_bo_unref(&rdev->gart.table.vram.robj); } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r300.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r300.c @@ -36,7 +36,15 @@ #include "rv350d.h" #include "r300_reg_safe.h" -/* This files gather functions specifics to: r300,r350,rv350,rv370,rv380 */ +/* This files gather functions specifics to: r300,r350,rv350,rv370,rv380 + * + * GPU Errata: + * - HOST_PATH_CNTL: r300 family seems to dislike write to HOST_PATH_CNTL + * using MMIO to flush host path read cache, this lead to HARDLOCKUP. + * However, scheduling such write to the ring seems harmless, i suspect + * the CP read collide with the flush somehow, or maybe the MC, hard to + * tell. (Jerome Glisse) + */ /* * rv370,rv380 PCIE GART @@ -137,14 +145,19 @@ void rv370_pcie_gart_disable(struct radeon_device *rdev) { - uint32_t tmp; + u32 tmp; + int r; tmp = RREG32_PCIE(RADEON_PCIE_TX_GART_CNTL); tmp |= RADEON_PCIE_TX_GART_UNMAPPED_ACCESS_DISCARD; WREG32_PCIE(RADEON_PCIE_TX_GART_CNTL, tmp & ~RADEON_PCIE_TX_GART_EN); if (rdev->gart.table.vram.robj) { - radeon_object_kunmap(rdev->gart.table.vram.robj); - radeon_object_unpin(rdev->gart.table.vram.robj); + r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->gart.table.vram.robj); + radeon_bo_unpin(rdev->gart.table.vram.robj); + radeon_bo_unreserve(rdev->gart.table.vram.robj); + } } } @@ -173,6 +186,11 @@ /* Wait until IDLE & CLEAN */ radeon_ring_write(rdev, PACKET0(0x1720, 0)); radeon_ring_write(rdev, (1 << 17) | (1 << 16) | (1 << 9)); + radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); + radeon_ring_write(rdev, rdev->config.r300.hdp_cntl | + RADEON_HDP_READ_BUFFER_INVALIDATE); + radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); + radeon_ring_write(rdev, rdev->config.r300.hdp_cntl); /* Emit fence sequence & fire IRQ */ radeon_ring_write(rdev, PACKET0(rdev->fence_drv.scratch_reg, 0)); radeon_ring_write(rdev, fence->seq); @@ -346,11 +364,12 @@ r100_hdp_reset(rdev); /* FIXME: rv380 one pipes ? */ - if ((rdev->family == CHIP_R300) || (rdev->family == CHIP_R350)) { + if ((rdev->family == CHIP_R300 && rdev->pdev->device != 0x4144) || + (rdev->family == CHIP_R350)) { /* r300,r350 */ rdev->num_gb_pipes = 2; } else { - /* rv350,rv370,rv380 */ + /* rv350,rv370,rv380,r300 AD */ rdev->num_gb_pipes = 1; } rdev->num_z_pipes = 1; @@ -488,11 +507,14 @@ /* DDR for all card after R300 & IGP */ rdev->mc.vram_is_ddr = true; + tmp = RREG32(RADEON_MEM_CNTL); - if (tmp & R300_MEM_NUM_CHANNELS_MASK) { - rdev->mc.vram_width = 128; - } else { - rdev->mc.vram_width = 64; + tmp &= R300_MEM_NUM_CHANNELS_MASK; + switch (tmp) { + case 0: rdev->mc.vram_width = 64; break; + case 1: rdev->mc.vram_width = 128; break; + case 2: rdev->mc.vram_width = 256; break; + default: rdev->mc.vram_width = 128; break; } r100_vram_init_sizes(rdev); @@ -681,7 +703,15 @@ r100_cs_dump_packet(p, pkt); return r; } - ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); + + if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) + tile_flags |= R300_TXO_MACRO_TILE; + if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO) + tile_flags |= R300_TXO_MICRO_TILE; + + tmp = idx_value + ((u32)reloc->lobj.gpu_offset); + tmp |= tile_flags; + ib[idx] = tmp; track->textures[i].robj = reloc->robj; break; /* Tracked registers */ @@ -847,7 +877,6 @@ case R300_TX_FORMAT_Z6Y5X5: case R300_TX_FORMAT_W4Z4Y4X4: case R300_TX_FORMAT_W1Z5Y5X5: - case R300_TX_FORMAT_DXT1: case R300_TX_FORMAT_D3DMFT_CxV8U8: case R300_TX_FORMAT_B8G8_B8G8: case R300_TX_FORMAT_G8R8_G8B8: @@ -861,8 +890,6 @@ case 0x17: case R300_TX_FORMAT_FL_I32: case 0x1e: - case R300_TX_FORMAT_DXT3: - case R300_TX_FORMAT_DXT5: track->textures[i].cpp = 4; break; case R300_TX_FORMAT_W16Z16Y16X16: @@ -873,6 +900,23 @@ case R300_TX_FORMAT_FL_R32G32B32A32: track->textures[i].cpp = 16; break; + case R300_TX_FORMAT_DXT1: + track->textures[i].cpp = 1; + track->textures[i].compress_format = R100_TRACK_COMP_DXT1; + break; + case R300_TX_FORMAT_ATI2N: + if (p->rdev->family < CHIP_R420) { + DRM_ERROR("Invalid texture format %u\n", + (idx_value & 0x1F)); + return -EINVAL; + } + /* The same rules apply as for DXT3/5. */ + /* Pass through. */ + case R300_TX_FORMAT_DXT3: + case R300_TX_FORMAT_DXT5: + track->textures[i].cpp = 1; + track->textures[i].compress_format = R100_TRACK_COMP_DXT35; + break; default: DRM_ERROR("Invalid texture format %u\n", (idx_value & 0x1F)); @@ -932,6 +976,16 @@ track->textures[i].width_11 = tmp; tmp = ((idx_value >> 16) & 1) << 11; track->textures[i].height_11 = tmp; + + /* ATI1N */ + if (idx_value & (1 << 14)) { + /* The same rules apply as for DXT1. */ + track->textures[i].compress_format = + R100_TRACK_COMP_DXT1; + } + } else if (idx_value & (1 << 14)) { + DRM_ERROR("Forbidden bit TXFORMAT_MSB\n"); + return -EINVAL; } break; case 0x4480: @@ -973,6 +1027,18 @@ } ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); break; + case 0x4e0c: + /* RB3D_COLOR_CHANNEL_MASK */ + track->color_channel_mask = idx_value; + break; + case 0x4d1c: + /* ZB_BW_CNTL */ + track->fastfill = !!(idx_value & (1 << 2)); + break; + case 0x4e04: + /* RB3D_BLENDCNTL */ + track->blend_read_enable = !!(idx_value & (1 << 2)); + break; case 0x4be8: /* valid register only on RV530 */ if (p->rdev->family == CHIP_RV530) @@ -1181,6 +1247,9 @@ { int r; + /* set common regs */ + r100_set_common_regs(rdev); + /* program mc */ r300_mc_program(rdev); /* Resume clock */ r300_clock_startup(rdev); @@ -1193,14 +1262,20 @@ if (r) return r; } + + if (rdev->family == CHIP_R300 || + rdev->family == CHIP_R350 || + rdev->family == CHIP_RV350) + r100_enable_bm(rdev); + if (rdev->flags & RADEON_IS_PCI) { r = r100_pci_gart_enable(rdev); if (r) return r; } /* Enable IRQ */ - rdev->irq.sw_int = true; r100_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -1237,6 +1312,8 @@ radeon_combios_asic_init(rdev->ddev); /* Resume clock after posting */ r300_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return r300_startup(rdev); } @@ -1254,7 +1331,6 @@ void r300_fini(struct radeon_device *rdev) { - r300_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); @@ -1263,9 +1339,10 @@ rv370_pcie_gart_fini(rdev); if (rdev->flags & RADEON_IS_PCI) r100_pci_gart_fini(rdev); + radeon_agp_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -1303,14 +1380,14 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - radeon_combios_asic_init(rdev->ddev); - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; /* Set asic errata */ r300_errata(rdev); /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); + /* Initialize power management */ + radeon_pm_init(rdev); /* Get vram informations */ r300_vram_info(rdev); /* Initialize memory controller (also test AGP) */ @@ -1325,7 +1402,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; if (rdev->flags & RADEON_IS_PCIE) { @@ -1344,15 +1421,15 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - r300_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); + radeon_irq_kms_fini(rdev); if (rdev->flags & RADEON_IS_PCIE) rv370_pcie_gart_fini(rdev); if (rdev->flags & RADEON_IS_PCI) r100_pci_gart_fini(rdev); - radeon_irq_kms_fini(rdev); + radeon_agp_fini(rdev); rdev->accel_working = false; } return 0; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_drv.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_drv.h @@ -106,9 +106,10 @@ * 1.29- R500 3D cmd buffer support * 1.30- Add support for occlusion queries * 1.31- Add support for num Z pipes from GET_PARAM + * 1.32- fixes for rv740 setup */ #define DRIVER_MAJOR 1 -#define DRIVER_MINOR 31 +#define DRIVER_MINOR 32 #define DRIVER_PATCHLEVEL 0 enum radeon_cp_microcode_version { @@ -1104,7 +1105,6 @@ # define R600_IT_WAIT_REG_MEM 0x00003C00 # define R600_IT_MEM_WRITE 0x00003D00 # define R600_IT_INDIRECT_BUFFER 0x00003200 -# define R600_IT_CP_INTERRUPT 0x00004000 # define R600_IT_SURFACE_SYNC 0x00004300 # define R600_CB0_DEST_BASE_ENA (1 << 6) # define R600_TC_ACTION_ENA (1 << 23) --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r100_track.h +++ linux-2.6.32/drivers/gpu/drm/radeon/r100_track.h @@ -10,26 +10,30 @@ * CS functions */ struct r100_cs_track_cb { - struct radeon_object *robj; + struct radeon_bo *robj; unsigned pitch; unsigned cpp; unsigned offset; }; struct r100_cs_track_array { - struct radeon_object *robj; + struct radeon_bo *robj; unsigned esize; }; struct r100_cs_cube_info { - struct radeon_object *robj; - unsigned offset; + struct radeon_bo *robj; + unsigned offset; unsigned width; unsigned height; }; +#define R100_TRACK_COMP_NONE 0 +#define R100_TRACK_COMP_DXT1 1 +#define R100_TRACK_COMP_DXT35 2 + struct r100_cs_track_texture { - struct radeon_object *robj; + struct radeon_bo *robj; struct r100_cs_cube_info cube_info[5]; /* info for 5 non-primary faces */ unsigned pitch; unsigned width; @@ -44,6 +48,7 @@ bool enabled; bool roundup_w; bool roundup_h; + unsigned compress_format; }; struct r100_cs_track_limits { @@ -62,13 +67,15 @@ unsigned immd_dwords; unsigned num_arrays; unsigned max_indx; + unsigned color_channel_mask; struct r100_cs_track_array arrays[11]; struct r100_cs_track_cb cb[R300_MAX_CB]; struct r100_cs_track_cb zb; struct r100_cs_track_texture textures[R300_TRACK_MAX_TEXTURE]; bool z_enabled; bool separate_cube; - + bool fastfill; + bool blend_read_enable; }; int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/rs690.c +++ linux-2.6.32/drivers/gpu/drm/radeon/rs690.c @@ -131,24 +131,25 @@ void rs690_vram_info(struct radeon_device *rdev) { - uint32_t tmp; fixed20_12 a; rs400_gart_adjust_size(rdev); - /* DDR for all card after R300 & IGP */ + rdev->mc.vram_is_ddr = true; - /* FIXME: is this correct for RS690/RS740 ? */ - tmp = RREG32(RADEON_MEM_CNTL); - if (tmp & R300_MEM_NUM_CHANNELS_MASK) { - rdev->mc.vram_width = 128; - } else { - rdev->mc.vram_width = 64; - } + rdev->mc.vram_width = 128; + rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE); rdev->mc.mc_vram_size = rdev->mc.real_vram_size; rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); + + if (rdev->mc.mc_vram_size > rdev->mc.aper_size) + rdev->mc.mc_vram_size = rdev->mc.aper_size; + + if (rdev->mc.real_vram_size > rdev->mc.aper_size) + rdev->mc.real_vram_size = rdev->mc.aper_size; + rs690_pm_info(rdev); /* FIXME: we should enforce default clock in case GPU is not in * default setup @@ -161,6 +162,22 @@ rdev->pm.core_bandwidth.full = rfixed_div(rdev->pm.sclk, a); } +static int rs690_mc_init(struct radeon_device *rdev) +{ + int r; + u32 tmp; + + /* Setup GPU memory space */ + tmp = RREG32_MC(R_000100_MCCFG_FB_LOCATION); + rdev->mc.vram_location = G_000100_MC_FB_START(tmp) << 16; + rdev->mc.gtt_location = 0xFFFFFFFFUL; + r = radeon_mc_setup(rdev); + rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev); + if (r) + return r; + return 0; +} + void rs690_line_buffer_adjust(struct radeon_device *rdev, struct drm_display_mode *mode1, struct drm_display_mode *mode2) @@ -244,8 +261,9 @@ b.full = rfixed_const(mode->crtc_hdisplay); c.full = rfixed_const(256); - a.full = rfixed_mul(wm->num_line_pair, b); - request_fifo_depth.full = rfixed_div(a, c); + a.full = rfixed_div(b, c); + request_fifo_depth.full = rfixed_mul(a, wm->num_line_pair); + request_fifo_depth.full = rfixed_ceil(request_fifo_depth); if (a.full < rfixed_const(4)) { wm->lb_request_fifo_depth = 4; } else { @@ -374,6 +392,7 @@ a.full = rfixed_const(16); wm->priority_mark_max.full = rfixed_const(crtc->base.mode.crtc_hdisplay); wm->priority_mark_max.full = rfixed_div(wm->priority_mark_max, a); + wm->priority_mark_max.full = rfixed_ceil(wm->priority_mark_max); /* Determine estimated width */ estimated_width.full = tolerable_latency.full - wm->worst_case_latency.full; @@ -383,6 +402,7 @@ } else { a.full = rfixed_const(16); wm->priority_mark.full = rfixed_div(estimated_width, a); + wm->priority_mark.full = rfixed_ceil(wm->priority_mark); wm->priority_mark.full = wm->priority_mark_max.full - wm->priority_mark.full; } } @@ -605,8 +625,8 @@ if (r) return r; /* Enable IRQ */ - rdev->irq.sw_int = true; rs600_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -640,6 +660,8 @@ atom_asic_init(rdev->mode_info.atom_context); /* Resume clock after posting */ rv515_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return rs690_startup(rdev); } @@ -654,7 +676,6 @@ void rs690_fini(struct radeon_device *rdev) { - rs690_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); @@ -662,7 +683,7 @@ rs400_gart_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -700,10 +721,9 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - atom_asic_init(rdev->mode_info.atom_context); - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; + /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); /* Initialize power management */ @@ -711,7 +731,7 @@ /* Get vram informations */ rs690_vram_info(rdev); /* Initialize memory controller (also test AGP) */ - r = r420_mc_init(rdev); + r = rs690_mc_init(rdev); if (r) return r; rv515_debugfs(rdev); @@ -723,7 +743,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; r = rs400_gart_init(rdev); @@ -735,7 +755,6 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - rs690_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r500_reg.h +++ linux-2.6.32/drivers/gpu/drm/radeon/r500_reg.h @@ -716,6 +716,8 @@ #define AVIVO_DVOA_BIT_DEPTH_CONTROL 0x7988 +#define AVIVO_DC_GPIO_HPD_A 0x7e94 + #define AVIVO_GPIO_0 0x7e30 #define AVIVO_GPIO_1 0x7e40 #define AVIVO_GPIO_2 0x7e50 --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_cs.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_cs.c @@ -76,17 +76,17 @@ } p->relocs_ptr[i] = &p->relocs[i]; p->relocs[i].robj = p->relocs[i].gobj->driver_private; - p->relocs[i].lobj.robj = p->relocs[i].robj; + p->relocs[i].lobj.bo = p->relocs[i].robj; p->relocs[i].lobj.rdomain = r->read_domains; p->relocs[i].lobj.wdomain = r->write_domain; p->relocs[i].handle = r->handle; p->relocs[i].flags = r->flags; INIT_LIST_HEAD(&p->relocs[i].lobj.list); - radeon_object_list_add_object(&p->relocs[i].lobj, - &p->validated); + radeon_bo_list_add_object(&p->relocs[i].lobj, + &p->validated); } } - return radeon_object_list_validate(&p->validated, p->ib->fence); + return radeon_bo_list_validate(&p->validated); } int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data) @@ -189,16 +189,17 @@ { unsigned i; - if (error) { - radeon_object_list_unvalidate(&parser->validated); - } else { - radeon_object_list_clean(&parser->validated); - } - for (i = 0; i < parser->nrelocs; i++) { - if (parser->relocs[i].gobj) { - mutex_lock(&parser->rdev->ddev->struct_mutex); - drm_gem_object_unreference(parser->relocs[i].gobj); - mutex_unlock(&parser->rdev->ddev->struct_mutex); + if (!error && parser->ib) { + radeon_bo_list_fence(&parser->validated, parser->ib->fence); + } + radeon_bo_list_unreserve(&parser->validated); + if (parser->relocs != NULL) { + for (i = 0; i < parser->nrelocs; i++) { + if (parser->relocs[i].gobj) { + mutex_lock(&parser->rdev->ddev->struct_mutex); + drm_gem_object_unreference(parser->relocs[i].gobj); + mutex_unlock(&parser->rdev->ddev->struct_mutex); + } } } kfree(parser->track); @@ -230,6 +231,7 @@ memset(&parser, 0, sizeof(struct radeon_cs_parser)); parser.filp = filp; parser.rdev = rdev; + parser.dev = rdev->dev; r = radeon_cs_parser_init(&parser, data); if (r) { DRM_ERROR("Failed to initialize parser !\n"); @@ -246,7 +248,8 @@ } r = radeon_cs_parser_relocs(&parser); if (r) { - DRM_ERROR("Failed to parse relocation !\n"); + if (r != -ERESTARTSYS) + DRM_ERROR("Failed to parse relocation %d!\n", r); radeon_cs_parser_fini(&parser, r); mutex_unlock(&rdev->cs_mutex); return r; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_legacy_encoders.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_legacy_encoders.c @@ -46,6 +46,7 @@ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); uint32_t lvds_gen_cntl, lvds_pll_cntl, pixclks_cntl, disp_pwr_man; int panel_pwr_delay = 2000; + bool is_mac = false; DRM_DEBUG("\n"); if (radeon_encoder->enc_priv) { @@ -58,6 +59,15 @@ } } + /* macs (and possibly some x86 oem systems?) wire up LVDS strangely + * Taken from radeonfb. + */ + if ((rdev->mode_info.connector_table == CT_IBOOK) || + (rdev->mode_info.connector_table == CT_POWERBOOK_EXTERNAL) || + (rdev->mode_info.connector_table == CT_POWERBOOK_INTERNAL) || + (rdev->mode_info.connector_table == CT_POWERBOOK_VGA)) + is_mac = true; + switch (mode) { case DRM_MODE_DPMS_ON: disp_pwr_man = RREG32(RADEON_DISP_PWR_MAN); @@ -74,6 +84,8 @@ lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); lvds_gen_cntl |= (RADEON_LVDS_ON | RADEON_LVDS_EN | RADEON_LVDS_DIGON | RADEON_LVDS_BLON); + if (is_mac) + lvds_gen_cntl |= RADEON_LVDS_BL_MOD_EN; lvds_gen_cntl &= ~(RADEON_LVDS_DISPLAY_DIS); udelay(panel_pwr_delay * 1000); WREG32(RADEON_LVDS_GEN_CNTL, lvds_gen_cntl); @@ -85,7 +97,14 @@ WREG32_PLL_P(RADEON_PIXCLKS_CNTL, 0, ~RADEON_PIXCLK_LVDS_ALWAYS_ONb); lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); lvds_gen_cntl |= RADEON_LVDS_DISPLAY_DIS; - lvds_gen_cntl &= ~(RADEON_LVDS_ON | RADEON_LVDS_BLON | RADEON_LVDS_EN | RADEON_LVDS_DIGON); + if (is_mac) { + lvds_gen_cntl &= ~RADEON_LVDS_BL_MOD_EN; + WREG32(RADEON_LVDS_GEN_CNTL, lvds_gen_cntl); + lvds_gen_cntl &= ~(RADEON_LVDS_ON | RADEON_LVDS_EN); + } else { + WREG32(RADEON_LVDS_GEN_CNTL, lvds_gen_cntl); + lvds_gen_cntl &= ~(RADEON_LVDS_ON | RADEON_LVDS_BLON | RADEON_LVDS_EN | RADEON_LVDS_DIGON); + } udelay(panel_pwr_delay * 1000); WREG32(RADEON_LVDS_GEN_CNTL, lvds_gen_cntl); WREG32_PLL(RADEON_PIXCLKS_CNTL, pixclks_cntl); @@ -136,7 +155,14 @@ lvds_pll_cntl &= ~RADEON_LVDS_PLL_EN; lvds_ss_gen_cntl = RREG32(RADEON_LVDS_SS_GEN_CNTL); - if ((!rdev->is_atom_bios)) { + if (rdev->is_atom_bios) { + /* LVDS_GEN_CNTL parameters are computed in LVDSEncoderControl + * need to call that on resume to set up the reg properly. + */ + radeon_encoder->pixel_clock = adjusted_mode->clock; + atombios_digital_setup(encoder, PANEL_ENCODER_ACTION_ENABLE); + lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); + } else { struct radeon_encoder_lvds *lvds = (struct radeon_encoder_lvds *)radeon_encoder->enc_priv; if (lvds) { DRM_DEBUG("bios LVDS_GEN_CNTL: 0x%x\n", lvds->lvds_gen_cntl); @@ -147,8 +173,7 @@ (lvds->panel_blon_delay << RADEON_LVDS_PWRSEQ_DELAY2_SHIFT)); } else lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); - } else - lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); + } lvds_gen_cntl |= RADEON_LVDS_DISPLAY_DIS; lvds_gen_cntl &= ~(RADEON_LVDS_ON | RADEON_LVDS_BLON | @@ -184,9 +209,9 @@ radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); } -static bool radeon_legacy_lvds_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) +static bool radeon_legacy_mode_fixup(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) { struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); @@ -194,15 +219,24 @@ radeon_encoder_set_active_device(encoder); drm_mode_set_crtcinfo(adjusted_mode, 0); - if (radeon_encoder->rmx_type != RMX_OFF) - radeon_rmx_mode_fixup(encoder, mode, adjusted_mode); + /* get the native mode for LVDS */ + if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) { + struct drm_display_mode *native_mode = &radeon_encoder->native_mode; + int mode_id = adjusted_mode->base.id; + *adjusted_mode = *native_mode; + adjusted_mode->hdisplay = mode->hdisplay; + adjusted_mode->vdisplay = mode->vdisplay; + adjusted_mode->crtc_hdisplay = mode->hdisplay; + adjusted_mode->crtc_vdisplay = mode->vdisplay; + adjusted_mode->base.id = mode_id; + } return true; } static const struct drm_encoder_helper_funcs radeon_legacy_lvds_helper_funcs = { .dpms = radeon_legacy_lvds_dpms, - .mode_fixup = radeon_legacy_lvds_mode_fixup, + .mode_fixup = radeon_legacy_mode_fixup, .prepare = radeon_legacy_lvds_prepare, .mode_set = radeon_legacy_lvds_mode_set, .commit = radeon_legacy_lvds_commit, @@ -214,17 +248,6 @@ .destroy = radeon_enc_destroy, }; -static bool radeon_legacy_primary_dac_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - /* set the active encoder to connector routing */ - radeon_encoder_set_active_device(encoder); - drm_mode_set_crtcinfo(adjusted_mode, 0); - - return true; -} - static void radeon_legacy_primary_dac_dpms(struct drm_encoder *encoder, int mode) { struct drm_device *dev = encoder->dev; @@ -410,7 +433,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_primary_dac_helper_funcs = { .dpms = radeon_legacy_primary_dac_dpms, - .mode_fixup = radeon_legacy_primary_dac_mode_fixup, + .mode_fixup = radeon_legacy_mode_fixup, .prepare = radeon_legacy_primary_dac_prepare, .mode_set = radeon_legacy_primary_dac_mode_set, .commit = radeon_legacy_primary_dac_commit, @@ -423,16 +446,6 @@ .destroy = radeon_enc_destroy, }; -static bool radeon_legacy_tmds_int_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - - drm_mode_set_crtcinfo(adjusted_mode, 0); - - return true; -} - static void radeon_legacy_tmds_int_dpms(struct drm_encoder *encoder, int mode) { struct drm_device *dev = encoder->dev; @@ -584,7 +597,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_tmds_int_helper_funcs = { .dpms = radeon_legacy_tmds_int_dpms, - .mode_fixup = radeon_legacy_tmds_int_mode_fixup, + .mode_fixup = radeon_legacy_mode_fixup, .prepare = radeon_legacy_tmds_int_prepare, .mode_set = radeon_legacy_tmds_int_mode_set, .commit = radeon_legacy_tmds_int_commit, @@ -596,17 +609,6 @@ .destroy = radeon_enc_destroy, }; -static bool radeon_legacy_tmds_ext_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - /* set the active encoder to connector routing */ - radeon_encoder_set_active_device(encoder); - drm_mode_set_crtcinfo(adjusted_mode, 0); - - return true; -} - static void radeon_legacy_tmds_ext_dpms(struct drm_encoder *encoder, int mode) { struct drm_device *dev = encoder->dev; @@ -697,6 +699,8 @@ /*if (mode->clock > 165000) fp2_gen_cntl |= R300_FP2_DVO_DUAL_CHANNEL_EN;*/ } + if (!radeon_combios_external_tmds_setup(encoder)) + radeon_external_tmds_setup(encoder); } if (radeon_crtc->crtc_id == 0) { @@ -724,9 +728,22 @@ radeon_combios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id); } +static void radeon_ext_tmds_enc_destroy(struct drm_encoder *encoder) +{ + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct radeon_encoder_ext_tmds *tmds = radeon_encoder->enc_priv; + if (tmds) { + if (tmds->i2c_bus) + radeon_i2c_destroy(tmds->i2c_bus); + } + kfree(radeon_encoder->enc_priv); + drm_encoder_cleanup(encoder); + kfree(radeon_encoder); +} + static const struct drm_encoder_helper_funcs radeon_legacy_tmds_ext_helper_funcs = { .dpms = radeon_legacy_tmds_ext_dpms, - .mode_fixup = radeon_legacy_tmds_ext_mode_fixup, + .mode_fixup = radeon_legacy_mode_fixup, .prepare = radeon_legacy_tmds_ext_prepare, .mode_set = radeon_legacy_tmds_ext_mode_set, .commit = radeon_legacy_tmds_ext_commit, @@ -735,20 +752,9 @@ static const struct drm_encoder_funcs radeon_legacy_tmds_ext_enc_funcs = { - .destroy = radeon_enc_destroy, + .destroy = radeon_ext_tmds_enc_destroy, }; -static bool radeon_legacy_tv_dac_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - /* set the active encoder to connector routing */ - radeon_encoder_set_active_device(encoder); - drm_mode_set_crtcinfo(adjusted_mode, 0); - - return true; -} - static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode) { struct drm_device *dev = encoder->dev; @@ -1265,7 +1271,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_tv_dac_helper_funcs = { .dpms = radeon_legacy_tv_dac_dpms, - .mode_fixup = radeon_legacy_tv_dac_mode_fixup, + .mode_fixup = radeon_legacy_mode_fixup, .prepare = radeon_legacy_tv_dac_prepare, .mode_set = radeon_legacy_tv_dac_mode_set, .commit = radeon_legacy_tv_dac_commit, @@ -1302,6 +1308,29 @@ return tmds; } +static struct radeon_encoder_ext_tmds *radeon_legacy_get_ext_tmds_info(struct radeon_encoder *encoder) +{ + struct drm_device *dev = encoder->base.dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder_ext_tmds *tmds = NULL; + bool ret; + + if (rdev->is_atom_bios) + return NULL; + + tmds = kzalloc(sizeof(struct radeon_encoder_ext_tmds), GFP_KERNEL); + + if (!tmds) + return NULL; + + ret = radeon_legacy_get_ext_tmds_info_from_combios(encoder, tmds); + + if (ret == false) + radeon_legacy_get_ext_tmds_info_from_table(encoder, tmds); + + return tmds; +} + void radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t supported_device) { @@ -1329,7 +1358,6 @@ encoder->possible_crtcs = 0x1; else encoder->possible_crtcs = 0x3; - encoder->possible_clones = 0; radeon_encoder->enc_priv = NULL; @@ -1373,7 +1401,7 @@ drm_encoder_init(dev, encoder, &radeon_legacy_tmds_ext_enc_funcs, DRM_MODE_ENCODER_TMDS); drm_encoder_helper_add(encoder, &radeon_legacy_tmds_ext_helper_funcs); if (!rdev->is_atom_bios) - radeon_combios_get_ext_tmds_info(radeon_encoder); + radeon_encoder->enc_priv = radeon_legacy_get_ext_tmds_info(radeon_encoder); break; } } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_ioc32.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_ioc32.c @@ -92,8 +92,7 @@ &init->gart_textures_offset)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_CP_INIT, (unsigned long)init); + return drm_ioctl(file, DRM_IOCTL_RADEON_CP_INIT, (unsigned long)init); } typedef struct drm_radeon_clear32 { @@ -125,8 +124,7 @@ &clr->depth_boxes)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_CLEAR, (unsigned long)clr); + return drm_ioctl(file, DRM_IOCTL_RADEON_CLEAR, (unsigned long)clr); } typedef struct drm_radeon_stipple32 { @@ -149,8 +147,7 @@ &request->mask)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_STIPPLE, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_STIPPLE, (unsigned long)request); } typedef struct drm_radeon_tex_image32 { @@ -204,8 +201,7 @@ &image->data)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_TEXTURE, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_TEXTURE, (unsigned long)request); } typedef struct drm_radeon_vertex2_32 { @@ -238,8 +234,7 @@ &request->prim)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_VERTEX2, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_VERTEX2, (unsigned long)request); } typedef struct drm_radeon_cmd_buffer32 { @@ -268,8 +263,7 @@ &request->boxes)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_CMDBUF, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_CMDBUF, (unsigned long)request); } typedef struct drm_radeon_getparam32 { @@ -293,8 +287,7 @@ &request->value)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_GETPARAM, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_GETPARAM, (unsigned long)request); } typedef struct drm_radeon_mem_alloc32 { @@ -322,8 +315,7 @@ &request->region_offset)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_ALLOC, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_ALLOC, (unsigned long)request); } typedef struct drm_radeon_irq_emit32 { @@ -345,8 +337,7 @@ &request->irq_seq)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_RADEON_IRQ_EMIT, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_RADEON_IRQ_EMIT, (unsigned long)request); } /* The two 64-bit arches where alignof(u64)==4 in 32-bit code */ @@ -372,8 +363,7 @@ &request->value)) return -EFAULT; - return drm_ioctl(file->f_dentry->d_inode, file, - DRM_IOCTL_RADEON_SETPARAM, (unsigned long) request); + return drm_ioctl(file, DRM_IOCTL_RADEON_SETPARAM, (unsigned long) request); } #else #define compat_radeon_cp_setparam NULL @@ -413,12 +403,10 @@ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls)) fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; - lock_kernel(); /* XXX for now */ if (fn != NULL) ret = (*fn) (filp, cmd, arg); else - ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); - unlock_kernel(); + ret = drm_ioctl(filp, cmd, arg); return ret; } @@ -431,9 +419,7 @@ if (nr < DRM_COMMAND_BASE) return drm_compat_ioctl(filp, cmd, arg); - lock_kernel(); /* XXX for now */ - ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); - unlock_kernel(); + ret = drm_ioctl(filp, cmd, arg); return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_ttm.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_ttm.c @@ -150,7 +150,7 @@ man->default_caching = TTM_PL_FLAG_CACHED; break; case TTM_PL_TT: - man->gpu_offset = 0; + man->gpu_offset = rdev->mc.gtt_location; man->available_caching = TTM_PL_MASK_CACHING; man->default_caching = TTM_PL_FLAG_CACHED; man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA; @@ -180,7 +180,7 @@ break; case TTM_PL_VRAM: /* "On-card" video ram */ - man->gpu_offset = 0; + man->gpu_offset = rdev->mc.vram_location; man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | TTM_MEMTYPE_FLAG_MAPPABLE; @@ -197,16 +197,34 @@ return 0; } -static uint32_t radeon_evict_flags(struct ttm_buffer_object *bo) +static void radeon_evict_flags(struct ttm_buffer_object *bo, + struct ttm_placement *placement) { - uint32_t cur_placement = bo->mem.placement & ~TTM_PL_MASK_MEMTYPE; + struct radeon_bo *rbo; + static u32 placements = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; + if (!radeon_ttm_bo_is_radeon_bo(bo)) { + placement->fpfn = 0; + placement->lpfn = 0; + placement->placement = &placements; + placement->busy_placement = &placements; + placement->num_placement = 1; + placement->num_busy_placement = 1; + return; + } + rbo = container_of(bo, struct radeon_bo, tbo); switch (bo->mem.mem_type) { + case TTM_PL_VRAM: + if (rbo->rdev->cp.ready == false) + radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_CPU); + else + radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT); + break; + case TTM_PL_TT: default: - return (cur_placement & ~TTM_PL_MASK_CACHING) | - TTM_PL_FLAG_SYSTEM | - TTM_PL_FLAG_CACHED; + radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_CPU); } + *placement = rbo->placement; } static int radeon_verify_access(struct ttm_buffer_object *bo, struct file *filp) @@ -283,14 +301,21 @@ struct radeon_device *rdev; struct ttm_mem_reg *old_mem = &bo->mem; struct ttm_mem_reg tmp_mem; - uint32_t proposed_placement; + u32 placements; + struct ttm_placement placement; int r; rdev = radeon_get_rdev(bo->bdev); tmp_mem = *new_mem; tmp_mem.mm_node = NULL; - proposed_placement = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING; - r = ttm_bo_mem_space(bo, proposed_placement, &tmp_mem, + placement.fpfn = 0; + placement.lpfn = 0; + placement.num_placement = 1; + placement.placement = &placements; + placement.num_busy_placement = 1; + placement.busy_placement = &placements; + placements = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT; + r = ttm_bo_mem_space(bo, &placement, &tmp_mem, interruptible, no_wait); if (unlikely(r)) { return r; @@ -329,15 +354,21 @@ struct radeon_device *rdev; struct ttm_mem_reg *old_mem = &bo->mem; struct ttm_mem_reg tmp_mem; - uint32_t proposed_flags; + struct ttm_placement placement; + u32 placements; int r; rdev = radeon_get_rdev(bo->bdev); tmp_mem = *new_mem; tmp_mem.mm_node = NULL; - proposed_flags = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING; - r = ttm_bo_mem_space(bo, proposed_flags, &tmp_mem, - interruptible, no_wait); + placement.fpfn = 0; + placement.lpfn = 0; + placement.num_placement = 1; + placement.placement = &placements; + placement.num_busy_placement = 1; + placement.busy_placement = &placements; + placements = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT; + r = ttm_bo_mem_space(bo, &placement, &tmp_mem, interruptible, no_wait); if (unlikely(r)) { return r; } @@ -378,7 +409,7 @@ new_mem->mem_type == TTM_PL_SYSTEM) || (old_mem->mem_type == TTM_PL_SYSTEM && new_mem->mem_type == TTM_PL_TT)) { - /* bind is enought */ + /* bind is enough */ radeon_move_null(bo, new_mem); return 0; } @@ -407,18 +438,6 @@ return r; } -const uint32_t radeon_mem_prios[] = { - TTM_PL_VRAM, - TTM_PL_TT, - TTM_PL_SYSTEM, -}; - -const uint32_t radeon_busy_prios[] = { - TTM_PL_TT, - TTM_PL_VRAM, - TTM_PL_SYSTEM, -}; - static int radeon_sync_obj_wait(void *sync_obj, void *sync_arg, bool lazy, bool interruptible) { @@ -446,10 +465,6 @@ } static struct ttm_bo_driver radeon_bo_driver = { - .mem_type_prio = radeon_mem_prios, - .mem_busy_prio = radeon_busy_prios, - .num_mem_type_prio = ARRAY_SIZE(radeon_mem_prios), - .num_mem_busy_prio = ARRAY_SIZE(radeon_busy_prios), .create_ttm_backend_entry = &radeon_create_ttm_backend_entry, .invalidate_caches = &radeon_invalidate_caches, .init_mem_type = &radeon_init_mem_type, @@ -482,27 +497,32 @@ DRM_ERROR("failed initializing buffer object driver(%d).\n", r); return r; } - r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_VRAM, 0, - ((rdev->mc.real_vram_size) >> PAGE_SHIFT)); + rdev->mman.initialized = true; + r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_VRAM, + rdev->mc.real_vram_size >> PAGE_SHIFT); if (r) { DRM_ERROR("Failed initializing VRAM heap.\n"); return r; } - r = radeon_object_create(rdev, NULL, 256 * 1024, true, - RADEON_GEM_DOMAIN_VRAM, false, - &rdev->stollen_vga_memory); + r = radeon_bo_create(rdev, NULL, 256 * 1024, true, + RADEON_GEM_DOMAIN_VRAM, + &rdev->stollen_vga_memory); if (r) { return r; } - r = radeon_object_pin(rdev->stollen_vga_memory, RADEON_GEM_DOMAIN_VRAM, NULL); + r = radeon_bo_reserve(rdev->stollen_vga_memory, false); + if (r) + return r; + r = radeon_bo_pin(rdev->stollen_vga_memory, RADEON_GEM_DOMAIN_VRAM, NULL); + radeon_bo_unreserve(rdev->stollen_vga_memory); if (r) { - radeon_object_unref(&rdev->stollen_vga_memory); + radeon_bo_unref(&rdev->stollen_vga_memory); return r; } DRM_INFO("radeon: %uM of VRAM memory ready\n", (unsigned)rdev->mc.real_vram_size / (1024 * 1024)); - r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT, 0, - ((rdev->mc.gtt_size) >> PAGE_SHIFT)); + r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT, + rdev->mc.gtt_size >> PAGE_SHIFT); if (r) { DRM_ERROR("Failed initializing GTT heap.\n"); return r; @@ -523,15 +543,24 @@ void radeon_ttm_fini(struct radeon_device *rdev) { + int r; + + if (!rdev->mman.initialized) + return; if (rdev->stollen_vga_memory) { - radeon_object_unpin(rdev->stollen_vga_memory); - radeon_object_unref(&rdev->stollen_vga_memory); + r = radeon_bo_reserve(rdev->stollen_vga_memory, false); + if (r == 0) { + radeon_bo_unpin(rdev->stollen_vga_memory); + radeon_bo_unreserve(rdev->stollen_vga_memory); + } + radeon_bo_unref(&rdev->stollen_vga_memory); } ttm_bo_clean_mm(&rdev->mman.bdev, TTM_PL_VRAM); ttm_bo_clean_mm(&rdev->mman.bdev, TTM_PL_TT); ttm_bo_device_release(&rdev->mman.bdev); radeon_gart_fini(rdev); radeon_ttm_global_fini(rdev); + rdev->mman.initialized = false; DRM_INFO("radeon: ttm finalized\n"); } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600_blit_kms.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r600_blit_kms.c @@ -449,6 +449,7 @@ u32 packet2s[16]; int num_packet2s = 0; + mutex_init(&rdev->r600_blit.mutex); rdev->r600_blit.state_offset = 0; if (rdev->family >= CHIP_RV770) @@ -473,9 +474,8 @@ obj_size += r6xx_ps_size * 4; obj_size = ALIGN(obj_size, 256); - r = radeon_object_create(rdev, NULL, obj_size, - true, RADEON_GEM_DOMAIN_VRAM, - false, &rdev->r600_blit.shader_obj); + r = radeon_bo_create(rdev, NULL, obj_size, true, RADEON_GEM_DOMAIN_VRAM, + &rdev->r600_blit.shader_obj); if (r) { DRM_ERROR("r600 failed to allocate shader\n"); return r; @@ -485,12 +485,14 @@ obj_size, rdev->r600_blit.vs_offset, rdev->r600_blit.ps_offset); - r = radeon_object_kmap(rdev->r600_blit.shader_obj, &ptr); + r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_kmap(rdev->r600_blit.shader_obj, &ptr); if (r) { DRM_ERROR("failed to map blit object %d\n", r); return r; } - if (rdev->family >= CHIP_RV770) memcpy_toio(ptr + rdev->r600_blit.state_offset, r7xx_default_state, rdev->r600_blit.state_len * 4); @@ -500,19 +502,28 @@ if (num_packet2s) memcpy_toio(ptr + rdev->r600_blit.state_offset + (rdev->r600_blit.state_len * 4), packet2s, num_packet2s * 4); - - memcpy(ptr + rdev->r600_blit.vs_offset, r6xx_vs, r6xx_vs_size * 4); memcpy(ptr + rdev->r600_blit.ps_offset, r6xx_ps, r6xx_ps_size * 4); - - radeon_object_kunmap(rdev->r600_blit.shader_obj); + radeon_bo_kunmap(rdev->r600_blit.shader_obj); + radeon_bo_unreserve(rdev->r600_blit.shader_obj); return 0; } void r600_blit_fini(struct radeon_device *rdev) { - radeon_object_unpin(rdev->r600_blit.shader_obj); - radeon_object_unref(&rdev->r600_blit.shader_obj); + int r; + + if (rdev->r600_blit.shader_obj == NULL) + return; + /* If we can't reserve the bo, unref should be enough to destroy + * it when it becomes idle. + */ + r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); + if (!r) { + radeon_bo_unpin(rdev->r600_blit.shader_obj); + radeon_bo_unreserve(rdev->r600_blit.shader_obj); + } + radeon_bo_unref(&rdev->r600_blit.shader_obj); } int r600_vb_ib_get(struct radeon_device *rdev) @@ -532,9 +543,6 @@ void r600_vb_ib_put(struct radeon_device *rdev) { radeon_fence_emit(rdev, rdev->r600_blit.vb_ib->fence); - mutex_lock(&rdev->ib_pool.mutex); - list_add_tail(&rdev->r600_blit.vb_ib->list, &rdev->ib_pool.scheduled_ibs); - mutex_unlock(&rdev->ib_pool.mutex); radeon_ib_free(rdev, &rdev->r600_blit.vb_ib); } @@ -547,7 +555,8 @@ int dwords_per_loop = 76, num_loops; r = r600_vb_ib_get(rdev); - WARN_ON(r); + if (r) + return r; /* set_render_target emits 2 extra dwords on rv6xx */ if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770) @@ -569,11 +578,12 @@ ring_size = num_loops * dwords_per_loop; /* set default + shaders */ ring_size += 40; /* shaders + def state */ - ring_size += 3; /* fence emit for VB IB */ + ring_size += 7; /* fence emit for VB IB */ ring_size += 5; /* done copy */ - ring_size += 3; /* fence emit for done copy */ + ring_size += 7; /* fence emit for done copy */ r = radeon_ring_lock(rdev, ring_size); - WARN_ON(r); + if (r) + return r; set_default_state(rdev); /* 14 */ set_shaders(rdev); /* 26 */ --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600_hdmi.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r600_hdmi.c @@ -0,0 +1,506 @@ +/* + * Copyright 2008 Advanced Micro Devices, Inc. + * Copyright 2008 Red Hat Inc. + * Copyright 2009 Christian König. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Christian König + */ +#include "drmP.h" +#include "radeon_drm.h" +#include "radeon.h" +#include "atom.h" + +/* + * HDMI color format + */ +enum r600_hdmi_color_format { + RGB = 0, + YCC_422 = 1, + YCC_444 = 2 +}; + +/* + * IEC60958 status bits + */ +enum r600_hdmi_iec_status_bits { + AUDIO_STATUS_DIG_ENABLE = 0x01, + AUDIO_STATUS_V = 0x02, + AUDIO_STATUS_VCFG = 0x04, + AUDIO_STATUS_EMPHASIS = 0x08, + AUDIO_STATUS_COPYRIGHT = 0x10, + AUDIO_STATUS_NONAUDIO = 0x20, + AUDIO_STATUS_PROFESSIONAL = 0x40, + AUDIO_STATUS_LEVEL = 0x80 +}; + +struct { + uint32_t Clock; + + int N_32kHz; + int CTS_32kHz; + + int N_44_1kHz; + int CTS_44_1kHz; + + int N_48kHz; + int CTS_48kHz; + +} r600_hdmi_ACR[] = { + /* 32kHz 44.1kHz 48kHz */ + /* Clock N CTS N CTS N CTS */ + { 25174, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */ + { 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */ + { 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */ + { 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */ + { 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */ + { 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */ + { 74175, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */ + { 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */ + { 148351, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */ + { 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */ + { 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */ +}; + +/* + * calculate CTS value if it's not found in the table + */ +static void r600_hdmi_calc_CTS(uint32_t clock, int *CTS, int N, int freq) +{ + if (*CTS == 0) + *CTS = clock*N/(128*freq)*1000; + DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n", + N, *CTS, freq); +} + +/* + * update the N and CTS parameters for a given pixel clock rate + */ +static void r600_hdmi_update_ACR(struct drm_encoder *encoder, uint32_t clock) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + int CTS; + int N; + int i; + + for (i = 0; r600_hdmi_ACR[i].Clock != clock && r600_hdmi_ACR[i].Clock != 0; i++); + + CTS = r600_hdmi_ACR[i].CTS_32kHz; + N = r600_hdmi_ACR[i].N_32kHz; + r600_hdmi_calc_CTS(clock, &CTS, N, 32000); + WREG32(offset+R600_HDMI_32kHz_CTS, CTS << 12); + WREG32(offset+R600_HDMI_32kHz_N, N); + + CTS = r600_hdmi_ACR[i].CTS_44_1kHz; + N = r600_hdmi_ACR[i].N_44_1kHz; + r600_hdmi_calc_CTS(clock, &CTS, N, 44100); + WREG32(offset+R600_HDMI_44_1kHz_CTS, CTS << 12); + WREG32(offset+R600_HDMI_44_1kHz_N, N); + + CTS = r600_hdmi_ACR[i].CTS_48kHz; + N = r600_hdmi_ACR[i].N_48kHz; + r600_hdmi_calc_CTS(clock, &CTS, N, 48000); + WREG32(offset+R600_HDMI_48kHz_CTS, CTS << 12); + WREG32(offset+R600_HDMI_48kHz_N, N); +} + +/* + * calculate the crc for a given info frame + */ +static void r600_hdmi_infoframe_checksum(uint8_t packetType, + uint8_t versionNumber, + uint8_t length, + uint8_t *frame) +{ + int i; + frame[0] = packetType + versionNumber + length; + for (i = 1; i <= length; i++) + frame[0] += frame[i]; + frame[0] = 0x100 - frame[0]; +} + +/* + * build a HDMI Video Info Frame + */ +static void r600_hdmi_videoinfoframe( + struct drm_encoder *encoder, + enum r600_hdmi_color_format color_format, + int active_information_present, + uint8_t active_format_aspect_ratio, + uint8_t scan_information, + uint8_t colorimetry, + uint8_t ex_colorimetry, + uint8_t quantization, + int ITC, + uint8_t picture_aspect_ratio, + uint8_t video_format_identification, + uint8_t pixel_repetition, + uint8_t non_uniform_picture_scaling, + uint8_t bar_info_data_valid, + uint16_t top_bar, + uint16_t bottom_bar, + uint16_t left_bar, + uint16_t right_bar +) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + + uint8_t frame[14]; + + frame[0x0] = 0; + frame[0x1] = + (scan_information & 0x3) | + ((bar_info_data_valid & 0x3) << 2) | + ((active_information_present & 0x1) << 4) | + ((color_format & 0x3) << 5); + frame[0x2] = + (active_format_aspect_ratio & 0xF) | + ((picture_aspect_ratio & 0x3) << 4) | + ((colorimetry & 0x3) << 6); + frame[0x3] = + (non_uniform_picture_scaling & 0x3) | + ((quantization & 0x3) << 2) | + ((ex_colorimetry & 0x7) << 4) | + ((ITC & 0x1) << 7); + frame[0x4] = (video_format_identification & 0x7F); + frame[0x5] = (pixel_repetition & 0xF); + frame[0x6] = (top_bar & 0xFF); + frame[0x7] = (top_bar >> 8); + frame[0x8] = (bottom_bar & 0xFF); + frame[0x9] = (bottom_bar >> 8); + frame[0xA] = (left_bar & 0xFF); + frame[0xB] = (left_bar >> 8); + frame[0xC] = (right_bar & 0xFF); + frame[0xD] = (right_bar >> 8); + + r600_hdmi_infoframe_checksum(0x82, 0x02, 0x0D, frame); + + WREG32(offset+R600_HDMI_VIDEOINFOFRAME_0, + frame[0x0] | (frame[0x1] << 8) | (frame[0x2] << 16) | (frame[0x3] << 24)); + WREG32(offset+R600_HDMI_VIDEOINFOFRAME_1, + frame[0x4] | (frame[0x5] << 8) | (frame[0x6] << 16) | (frame[0x7] << 24)); + WREG32(offset+R600_HDMI_VIDEOINFOFRAME_2, + frame[0x8] | (frame[0x9] << 8) | (frame[0xA] << 16) | (frame[0xB] << 24)); + WREG32(offset+R600_HDMI_VIDEOINFOFRAME_3, + frame[0xC] | (frame[0xD] << 8)); +} + +/* + * build a Audio Info Frame + */ +static void r600_hdmi_audioinfoframe( + struct drm_encoder *encoder, + uint8_t channel_count, + uint8_t coding_type, + uint8_t sample_size, + uint8_t sample_frequency, + uint8_t format, + uint8_t channel_allocation, + uint8_t level_shift, + int downmix_inhibit +) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + + uint8_t frame[11]; + + frame[0x0] = 0; + frame[0x1] = (channel_count & 0x7) | ((coding_type & 0xF) << 4); + frame[0x2] = (sample_size & 0x3) | ((sample_frequency & 0x7) << 2); + frame[0x3] = format; + frame[0x4] = channel_allocation; + frame[0x5] = ((level_shift & 0xF) << 3) | ((downmix_inhibit & 0x1) << 7); + frame[0x6] = 0; + frame[0x7] = 0; + frame[0x8] = 0; + frame[0x9] = 0; + frame[0xA] = 0; + + r600_hdmi_infoframe_checksum(0x84, 0x01, 0x0A, frame); + + WREG32(offset+R600_HDMI_AUDIOINFOFRAME_0, + frame[0x0] | (frame[0x1] << 8) | (frame[0x2] << 16) | (frame[0x3] << 24)); + WREG32(offset+R600_HDMI_AUDIOINFOFRAME_1, + frame[0x4] | (frame[0x5] << 8) | (frame[0x6] << 16) | (frame[0x8] << 24)); +} + +/* + * test if audio buffer is filled enough to start playing + */ +static int r600_hdmi_is_audio_buffer_filled(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + + return (RREG32(offset+R600_HDMI_STATUS) & 0x10) != 0; +} + +/* + * have buffer status changed since last call? + */ +int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder) +{ + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + int status, result; + + if (!radeon_encoder->hdmi_offset) + return 0; + + status = r600_hdmi_is_audio_buffer_filled(encoder); + result = radeon_encoder->hdmi_buffer_status != status; + radeon_encoder->hdmi_buffer_status = status; + + return result; +} + +/* + * write the audio workaround status to the hardware + */ +void r600_hdmi_audio_workaround(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + uint32_t offset = radeon_encoder->hdmi_offset; + + if (!offset) + return; + + if (r600_hdmi_is_audio_buffer_filled(encoder)) { + /* disable audio workaround and start delivering of audio frames */ + WREG32_P(offset+R600_HDMI_CNTL, 0x00000001, ~0x00001001); + + } else if (radeon_encoder->hdmi_audio_workaround) { + /* enable audio workaround and start delivering of audio frames */ + WREG32_P(offset+R600_HDMI_CNTL, 0x00001001, ~0x00001001); + + } else { + /* disable audio workaround and stop delivering of audio frames */ + WREG32_P(offset+R600_HDMI_CNTL, 0x00000000, ~0x00001001); + } +} + + +/* + * update the info frames with the data from the current display mode + */ +void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + + if (!offset) + return; + + r600_audio_set_clock(encoder, mode->clock); + + WREG32(offset+R600_HDMI_UNKNOWN_0, 0x1000); + WREG32(offset+R600_HDMI_UNKNOWN_1, 0x0); + WREG32(offset+R600_HDMI_UNKNOWN_2, 0x1000); + + r600_hdmi_update_ACR(encoder, mode->clock); + + WREG32(offset+R600_HDMI_VIDEOCNTL, 0x13); + + WREG32(offset+R600_HDMI_VERSION, 0x202); + + r600_hdmi_videoinfoframe(encoder, RGB, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + + /* it's unknown what these bits do excatly, but it's indeed quite usefull for debugging */ + WREG32(offset+R600_HDMI_AUDIO_DEBUG_0, 0x00FFFFFF); + WREG32(offset+R600_HDMI_AUDIO_DEBUG_1, 0x007FFFFF); + WREG32(offset+R600_HDMI_AUDIO_DEBUG_2, 0x00000001); + WREG32(offset+R600_HDMI_AUDIO_DEBUG_3, 0x00000001); + + r600_hdmi_audio_workaround(encoder); + + /* audio packets per line, does anyone know how to calc this ? */ + WREG32_P(offset+R600_HDMI_CNTL, 0x00040000, ~0x001F0000); + + /* update? reset? don't realy know */ + WREG32_P(offset+R600_HDMI_CNTL, 0x14000000, ~0x14000000); +} + +/* + * update settings with current parameters from audio engine + */ +void r600_hdmi_update_audio_settings(struct drm_encoder *encoder, + int channels, + int rate, + int bps, + uint8_t status_bits, + uint8_t category_code) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + + uint32_t iec; + + if (!offset) + return; + + DRM_DEBUG("%s with %d channels, %d Hz sampling rate, %d bits per sample,\n", + r600_hdmi_is_audio_buffer_filled(encoder) ? "playing" : "stopped", + channels, rate, bps); + DRM_DEBUG("0x%02X IEC60958 status bits and 0x%02X category code\n", + (int)status_bits, (int)category_code); + + iec = 0; + if (status_bits & AUDIO_STATUS_PROFESSIONAL) + iec |= 1 << 0; + if (status_bits & AUDIO_STATUS_NONAUDIO) + iec |= 1 << 1; + if (status_bits & AUDIO_STATUS_COPYRIGHT) + iec |= 1 << 2; + if (status_bits & AUDIO_STATUS_EMPHASIS) + iec |= 1 << 3; + + iec |= category_code << 8; + + switch (rate) { + case 32000: iec |= 0x3 << 24; break; + case 44100: iec |= 0x0 << 24; break; + case 88200: iec |= 0x8 << 24; break; + case 176400: iec |= 0xc << 24; break; + case 48000: iec |= 0x2 << 24; break; + case 96000: iec |= 0xa << 24; break; + case 192000: iec |= 0xe << 24; break; + } + + WREG32(offset+R600_HDMI_IEC60958_1, iec); + + iec = 0; + switch (bps) { + case 16: iec |= 0x2; break; + case 20: iec |= 0x3; break; + case 24: iec |= 0xb; break; + } + if (status_bits & AUDIO_STATUS_V) + iec |= 0x5 << 16; + + WREG32_P(offset+R600_HDMI_IEC60958_2, iec, ~0x5000f); + + /* 0x021 or 0x031 sets the audio frame length */ + WREG32(offset+R600_HDMI_AUDIOCNTL, 0x31); + r600_hdmi_audioinfoframe(encoder, channels-1, 0, 0, 0, 0, 0, 0, 0); + + r600_hdmi_audio_workaround(encoder); + + /* update? reset? don't realy know */ + WREG32_P(offset+R600_HDMI_CNTL, 0x04000000, ~0x04000000); +} + +/* + * enable/disable the HDMI engine + */ +void r600_hdmi_enable(struct drm_encoder *encoder, int enable) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; + + if (!offset) + return; + + DRM_DEBUG("%s HDMI interface @ 0x%04X\n", enable ? "Enabling" : "Disabling", offset); + + /* some version of atombios ignore the enable HDMI flag + * so enabling/disabling HDMI was moved here for TMDS1+2 */ + switch (radeon_encoder->encoder_id) { + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: + WREG32_P(AVIVO_TMDSA_CNTL, enable ? 0x4 : 0x0, ~0x4); + WREG32(offset+R600_HDMI_ENABLE, enable ? 0x101 : 0x0); + break; + + case ENCODER_OBJECT_ID_INTERNAL_LVTM1: + WREG32_P(AVIVO_LVTMA_CNTL, enable ? 0x4 : 0x0, ~0x4); + WREG32(offset+R600_HDMI_ENABLE, enable ? 0x105 : 0x0); + break; + + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: + /* This part is doubtfull in my opinion */ + WREG32(offset+R600_HDMI_ENABLE, enable ? 0x110 : 0x0); + break; + + default: + DRM_ERROR("unknown HDMI output type\n"); + break; + } +} + +/* + * determin at which register offset the HDMI encoder is + */ +void r600_hdmi_init(struct drm_encoder *encoder) +{ + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + + switch (radeon_encoder->encoder_id) { + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: + radeon_encoder->hdmi_offset = R600_HDMI_TMDS1; + break; + + case ENCODER_OBJECT_ID_INTERNAL_LVTM1: + switch (r600_audio_tmds_index(encoder)) { + case 0: + radeon_encoder->hdmi_offset = R600_HDMI_TMDS1; + break; + case 1: + radeon_encoder->hdmi_offset = R600_HDMI_TMDS2; + break; + default: + radeon_encoder->hdmi_offset = 0; + break; + } + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: + radeon_encoder->hdmi_offset = R600_HDMI_TMDS2; + break; + + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: + radeon_encoder->hdmi_offset = R600_HDMI_DIG; + break; + + default: + radeon_encoder->hdmi_offset = 0; + break; + } + + DRM_DEBUG("using HDMI engine at offset 0x%04X for encoder 0x%x\n", + radeon_encoder->hdmi_offset, radeon_encoder->encoder_id); + + /* TODO: make this configureable */ + radeon_encoder->hdmi_audio_workaround = 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/radeon/atombios_dp.c +++ linux-2.6.32/drivers/gpu/drm/radeon/atombios_dp.c @@ -0,0 +1,789 @@ +/* + * Copyright 2007-8 Advanced Micro Devices, Inc. + * Copyright 2008 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Dave Airlie + * Alex Deucher + */ +#include "drmP.h" +#include "radeon_drm.h" +#include "radeon.h" + +#include "atom.h" +#include "atom-bits.h" +#include "drm_dp_helper.h" + +/* move these to drm_dp_helper.c/h */ +#define DP_LINK_CONFIGURATION_SIZE 9 +#define DP_LINK_STATUS_SIZE 6 +#define DP_DPCD_SIZE 8 + +static char *voltage_names[] = { + "0.4V", "0.6V", "0.8V", "1.2V" +}; +static char *pre_emph_names[] = { + "0dB", "3.5dB", "6dB", "9.5dB" +}; + +static const int dp_clocks[] = { + 54000, /* 1 lane, 1.62 Ghz */ + 90000, /* 1 lane, 2.70 Ghz */ + 108000, /* 2 lane, 1.62 Ghz */ + 180000, /* 2 lane, 2.70 Ghz */ + 216000, /* 4 lane, 1.62 Ghz */ + 360000, /* 4 lane, 2.70 Ghz */ +}; + +static const int num_dp_clocks = sizeof(dp_clocks) / sizeof(int); + +/* common helper functions */ +static int dp_lanes_for_mode_clock(u8 dpcd[DP_DPCD_SIZE], int mode_clock) +{ + int i; + u8 max_link_bw; + u8 max_lane_count; + + if (!dpcd) + return 0; + + max_link_bw = dpcd[DP_MAX_LINK_RATE]; + max_lane_count = dpcd[DP_MAX_LANE_COUNT] & DP_MAX_LANE_COUNT_MASK; + + switch (max_link_bw) { + case DP_LINK_BW_1_62: + default: + for (i = 0; i < num_dp_clocks; i++) { + if (i % 2) + continue; + switch (max_lane_count) { + case 1: + if (i > 1) + return 0; + break; + case 2: + if (i > 3) + return 0; + break; + case 4: + default: + break; + } + if (dp_clocks[i] > mode_clock) { + if (i < 2) + return 1; + else if (i < 4) + return 2; + else + return 4; + } + } + break; + case DP_LINK_BW_2_7: + for (i = 0; i < num_dp_clocks; i++) { + switch (max_lane_count) { + case 1: + if (i > 1) + return 0; + break; + case 2: + if (i > 3) + return 0; + break; + case 4: + default: + break; + } + if (dp_clocks[i] > mode_clock) { + if (i < 2) + return 1; + else if (i < 4) + return 2; + else + return 4; + } + } + break; + } + + return 0; +} + +static int dp_link_clock_for_mode_clock(u8 dpcd[DP_DPCD_SIZE], int mode_clock) +{ + int i; + u8 max_link_bw; + u8 max_lane_count; + + if (!dpcd) + return 0; + + max_link_bw = dpcd[DP_MAX_LINK_RATE]; + max_lane_count = dpcd[DP_MAX_LANE_COUNT] & DP_MAX_LANE_COUNT_MASK; + + switch (max_link_bw) { + case DP_LINK_BW_1_62: + default: + for (i = 0; i < num_dp_clocks; i++) { + if (i % 2) + continue; + switch (max_lane_count) { + case 1: + if (i > 1) + return 0; + break; + case 2: + if (i > 3) + return 0; + break; + case 4: + default: + break; + } + if (dp_clocks[i] > mode_clock) + return 162000; + } + break; + case DP_LINK_BW_2_7: + for (i = 0; i < num_dp_clocks; i++) { + switch (max_lane_count) { + case 1: + if (i > 1) + return 0; + break; + case 2: + if (i > 3) + return 0; + break; + case 4: + default: + break; + } + if (dp_clocks[i] > mode_clock) + return (i % 2) ? 270000 : 162000; + } + } + + return 0; +} + +int dp_mode_valid(u8 dpcd[DP_DPCD_SIZE], int mode_clock) +{ + int lanes = dp_lanes_for_mode_clock(dpcd, mode_clock); + int bw = dp_lanes_for_mode_clock(dpcd, mode_clock); + + if ((lanes == 0) || (bw == 0)) + return MODE_CLOCK_HIGH; + + return MODE_OK; +} + +static u8 dp_link_status(u8 link_status[DP_LINK_STATUS_SIZE], int r) +{ + return link_status[r - DP_LANE0_1_STATUS]; +} + +static u8 dp_get_lane_status(u8 link_status[DP_LINK_STATUS_SIZE], + int lane) +{ + int i = DP_LANE0_1_STATUS + (lane >> 1); + int s = (lane & 1) * 4; + u8 l = dp_link_status(link_status, i); + return (l >> s) & 0xf; +} + +static bool dp_clock_recovery_ok(u8 link_status[DP_LINK_STATUS_SIZE], + int lane_count) +{ + int lane; + u8 lane_status; + + for (lane = 0; lane < lane_count; lane++) { + lane_status = dp_get_lane_status(link_status, lane); + if ((lane_status & DP_LANE_CR_DONE) == 0) + return false; + } + return true; +} + +static bool dp_channel_eq_ok(u8 link_status[DP_LINK_STATUS_SIZE], + int lane_count) +{ + u8 lane_align; + u8 lane_status; + int lane; + + lane_align = dp_link_status(link_status, + DP_LANE_ALIGN_STATUS_UPDATED); + if ((lane_align & DP_INTERLANE_ALIGN_DONE) == 0) + return false; + for (lane = 0; lane < lane_count; lane++) { + lane_status = dp_get_lane_status(link_status, lane); + if ((lane_status & DP_CHANNEL_EQ_BITS) != DP_CHANNEL_EQ_BITS) + return false; + } + return true; +} + +static u8 dp_get_adjust_request_voltage(uint8_t link_status[DP_LINK_STATUS_SIZE], + int lane) + +{ + int i = DP_ADJUST_REQUEST_LANE0_1 + (lane >> 1); + int s = ((lane & 1) ? + DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT : + DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT); + u8 l = dp_link_status(link_status, i); + + return ((l >> s) & 0x3) << DP_TRAIN_VOLTAGE_SWING_SHIFT; +} + +static u8 dp_get_adjust_request_pre_emphasis(uint8_t link_status[DP_LINK_STATUS_SIZE], + int lane) +{ + int i = DP_ADJUST_REQUEST_LANE0_1 + (lane >> 1); + int s = ((lane & 1) ? + DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT : + DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT); + u8 l = dp_link_status(link_status, i); + + return ((l >> s) & 0x3) << DP_TRAIN_PRE_EMPHASIS_SHIFT; +} + +/* XXX fix me -- chip specific */ +#define DP_VOLTAGE_MAX DP_TRAIN_VOLTAGE_SWING_1200 +static u8 dp_pre_emphasis_max(u8 voltage_swing) +{ + switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) { + case DP_TRAIN_VOLTAGE_SWING_400: + return DP_TRAIN_PRE_EMPHASIS_6; + case DP_TRAIN_VOLTAGE_SWING_600: + return DP_TRAIN_PRE_EMPHASIS_6; + case DP_TRAIN_VOLTAGE_SWING_800: + return DP_TRAIN_PRE_EMPHASIS_3_5; + case DP_TRAIN_VOLTAGE_SWING_1200: + default: + return DP_TRAIN_PRE_EMPHASIS_0; + } +} + +static void dp_get_adjust_train(u8 link_status[DP_LINK_STATUS_SIZE], + int lane_count, + u8 train_set[4]) +{ + u8 v = 0; + u8 p = 0; + int lane; + + for (lane = 0; lane < lane_count; lane++) { + u8 this_v = dp_get_adjust_request_voltage(link_status, lane); + u8 this_p = dp_get_adjust_request_pre_emphasis(link_status, lane); + + DRM_DEBUG("requested signal parameters: lane %d voltage %s pre_emph %s\n", + lane, + voltage_names[this_v >> DP_TRAIN_VOLTAGE_SWING_SHIFT], + pre_emph_names[this_p >> DP_TRAIN_PRE_EMPHASIS_SHIFT]); + + if (this_v > v) + v = this_v; + if (this_p > p) + p = this_p; + } + + if (v >= DP_VOLTAGE_MAX) + v = DP_VOLTAGE_MAX | DP_TRAIN_MAX_SWING_REACHED; + + if (p >= dp_pre_emphasis_max(v)) + p = dp_pre_emphasis_max(v) | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED; + + DRM_DEBUG("using signal parameters: voltage %s pre_emph %s\n", + voltage_names[(v & DP_TRAIN_VOLTAGE_SWING_MASK) >> DP_TRAIN_VOLTAGE_SWING_SHIFT], + pre_emph_names[(p & DP_TRAIN_PRE_EMPHASIS_MASK) >> DP_TRAIN_PRE_EMPHASIS_SHIFT]); + + for (lane = 0; lane < 4; lane++) + train_set[lane] = v | p; +} + + +/* radeon aux chan functions */ +bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes, + int num_bytes, u8 *read_byte, + u8 read_buf_len, u8 delay) +{ + struct drm_device *dev = chan->dev; + struct radeon_device *rdev = dev->dev_private; + PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION args; + int index = GetIndexIntoMasterTable(COMMAND, ProcessAuxChannelTransaction); + unsigned char *base; + int retry_count = 0; + + memset(&args, 0, sizeof(args)); + + base = (unsigned char *)rdev->mode_info.atom_context->scratch; + +retry: + memcpy(base, req_bytes, num_bytes); + + args.lpAuxRequest = 0; + args.lpDataOut = 16; + args.ucDataOutLen = 0; + args.ucChannelID = chan->rec.i2c_id; + args.ucDelay = delay / 10; + + atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); + + if (args.ucReplyStatus && !args.ucDataOutLen) { + if (args.ucReplyStatus == 0x20 && retry_count++ < 10) + goto retry; + DRM_DEBUG("failed to get auxch %02x%02x %02x %02x 0x%02x %02x after %d retries\n", + req_bytes[1], req_bytes[0], req_bytes[2], req_bytes[3], + chan->rec.i2c_id, args.ucReplyStatus, retry_count); + return false; + } + + if (args.ucDataOutLen && read_byte && read_buf_len) { + if (read_buf_len < args.ucDataOutLen) { + DRM_ERROR("Buffer to small for return answer %d %d\n", + read_buf_len, args.ucDataOutLen); + return false; + } + { + int len = min(read_buf_len, args.ucDataOutLen); + memcpy(read_byte, base + 16, len); + } + } + return true; +} + +bool radeon_dp_aux_native_write(struct radeon_connector *radeon_connector, uint16_t address, + uint8_t send_bytes, uint8_t *send) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + u8 msg[20]; + u8 msg_len, dp_msg_len; + bool ret; + + dp_msg_len = 4; + msg[0] = address; + msg[1] = address >> 8; + msg[2] = AUX_NATIVE_WRITE << 4; + dp_msg_len += send_bytes; + msg[3] = (dp_msg_len << 4) | (send_bytes - 1); + + if (send_bytes > 16) + return false; + + memcpy(&msg[4], send, send_bytes); + msg_len = 4 + send_bytes; + ret = radeon_process_aux_ch(dig_connector->dp_i2c_bus, msg, msg_len, NULL, 0, 0); + return ret; +} + +bool radeon_dp_aux_native_read(struct radeon_connector *radeon_connector, uint16_t address, + uint8_t delay, uint8_t expected_bytes, + uint8_t *read_p) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + u8 msg[20]; + u8 msg_len, dp_msg_len; + bool ret = false; + msg_len = 4; + dp_msg_len = 4; + msg[0] = address; + msg[1] = address >> 8; + msg[2] = AUX_NATIVE_READ << 4; + msg[3] = (dp_msg_len) << 4; + msg[3] |= expected_bytes - 1; + + ret = radeon_process_aux_ch(dig_connector->dp_i2c_bus, msg, msg_len, read_p, expected_bytes, delay); + return ret; +} + +/* radeon dp functions */ +static u8 radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clock, + uint8_t ucconfig, uint8_t lane_num) +{ + DP_ENCODER_SERVICE_PARAMETERS args; + int index = GetIndexIntoMasterTable(COMMAND, DPEncoderService); + + memset(&args, 0, sizeof(args)); + args.ucLinkClock = dp_clock / 10; + args.ucConfig = ucconfig; + args.ucAction = action; + args.ucLaneNum = lane_num; + args.ucStatus = 0; + + atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); + return args.ucStatus; +} + +u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + struct drm_device *dev = radeon_connector->base.dev; + struct radeon_device *rdev = dev->dev_private; + + return radeon_dp_encoder_service(rdev, ATOM_DP_ACTION_GET_SINK_TYPE, 0, + dig_connector->dp_i2c_bus->rec.i2c_id, 0); +} + +bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + u8 msg[25]; + int ret; + + ret = radeon_dp_aux_native_read(radeon_connector, DP_DPCD_REV, 0, 8, msg); + if (ret) { + memcpy(dig_connector->dpcd, msg, 8); + { + int i; + DRM_DEBUG("DPCD: "); + for (i = 0; i < 8; i++) + DRM_DEBUG("%02x ", msg[i]); + DRM_DEBUG("\n"); + } + return true; + } + dig_connector->dpcd[0] = 0; + return false; +} + +void radeon_dp_set_link_config(struct drm_connector *connector, + struct drm_display_mode *mode) +{ + struct radeon_connector *radeon_connector; + struct radeon_connector_atom_dig *dig_connector; + + if ((connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) && + (connector->connector_type != DRM_MODE_CONNECTOR_eDP)) + return; + + radeon_connector = to_radeon_connector(connector); + if (!radeon_connector->con_priv) + return; + dig_connector = radeon_connector->con_priv; + + dig_connector->dp_clock = + dp_link_clock_for_mode_clock(dig_connector->dpcd, mode->clock); + dig_connector->dp_lane_count = + dp_lanes_for_mode_clock(dig_connector->dpcd, mode->clock); +} + +int radeon_dp_mode_valid_helper(struct radeon_connector *radeon_connector, + struct drm_display_mode *mode) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + + return dp_mode_valid(dig_connector->dpcd, mode->clock); +} + +static bool atom_dp_get_link_status(struct radeon_connector *radeon_connector, + u8 link_status[DP_LINK_STATUS_SIZE]) +{ + int ret; + ret = radeon_dp_aux_native_read(radeon_connector, DP_LANE0_1_STATUS, 100, + DP_LINK_STATUS_SIZE, link_status); + if (!ret) { + DRM_ERROR("displayport link status failed\n"); + return false; + } + + DRM_DEBUG("link status %02x %02x %02x %02x %02x %02x\n", + link_status[0], link_status[1], link_status[2], + link_status[3], link_status[4], link_status[5]); + return true; +} + +bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + u8 link_status[DP_LINK_STATUS_SIZE]; + + if (!atom_dp_get_link_status(radeon_connector, link_status)) + return false; + if (dp_channel_eq_ok(link_status, dig_connector->dp_lane_count)) + return false; + return true; +} + +static void dp_set_power(struct radeon_connector *radeon_connector, u8 power_state) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + + if (dig_connector->dpcd[0] >= 0x11) { + radeon_dp_aux_native_write(radeon_connector, DP_SET_POWER, 1, + &power_state); + } +} + +static void dp_set_downspread(struct radeon_connector *radeon_connector, u8 downspread) +{ + radeon_dp_aux_native_write(radeon_connector, DP_DOWNSPREAD_CTRL, 1, + &downspread); +} + +static void dp_set_link_bw_lanes(struct radeon_connector *radeon_connector, + u8 link_configuration[DP_LINK_CONFIGURATION_SIZE]) +{ + radeon_dp_aux_native_write(radeon_connector, DP_LINK_BW_SET, 2, + link_configuration); +} + +static void dp_update_dpvs_emph(struct radeon_connector *radeon_connector, + struct drm_encoder *encoder, + u8 train_set[4]) +{ + struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; + int i; + + for (i = 0; i < dig_connector->dp_lane_count; i++) + atombios_dig_transmitter_setup(encoder, + ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH, + i, train_set[i]); + + radeon_dp_aux_native_write(radeon_connector, DP_TRAINING_LANE0_SET, + dig_connector->dp_lane_count, train_set); +} + +static void dp_set_training(struct radeon_connector *radeon_connector, + u8 training) +{ + radeon_dp_aux_native_write(radeon_connector, DP_TRAINING_PATTERN_SET, + 1, &training); +} + +void dp_link_train(struct drm_encoder *encoder, + struct drm_connector *connector) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct radeon_encoder_atom_dig *dig; + struct radeon_connector *radeon_connector; + struct radeon_connector_atom_dig *dig_connector; + int enc_id = 0; + bool clock_recovery, channel_eq; + u8 link_status[DP_LINK_STATUS_SIZE]; + u8 link_configuration[DP_LINK_CONFIGURATION_SIZE]; + u8 tries, voltage; + u8 train_set[4]; + int i; + + if ((connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) && + (connector->connector_type != DRM_MODE_CONNECTOR_eDP)) + return; + + if (!radeon_encoder->enc_priv) + return; + dig = radeon_encoder->enc_priv; + + radeon_connector = to_radeon_connector(connector); + if (!radeon_connector->con_priv) + return; + dig_connector = radeon_connector->con_priv; + + if (dig->dig_encoder) + enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER; + else + enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER; + if (dig_connector->linkb) + enc_id |= ATOM_DP_CONFIG_LINK_B; + else + enc_id |= ATOM_DP_CONFIG_LINK_A; + + memset(link_configuration, 0, DP_LINK_CONFIGURATION_SIZE); + if (dig_connector->dp_clock == 270000) + link_configuration[0] = DP_LINK_BW_2_7; + else + link_configuration[0] = DP_LINK_BW_1_62; + link_configuration[1] = dig_connector->dp_lane_count; + if (dig_connector->dpcd[0] >= 0x11) + link_configuration[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + + /* power up the sink */ + dp_set_power(radeon_connector, DP_SET_POWER_D0); + /* disable the training pattern on the sink */ + dp_set_training(radeon_connector, DP_TRAINING_PATTERN_DISABLE); + /* set link bw and lanes on the sink */ + dp_set_link_bw_lanes(radeon_connector, link_configuration); + /* disable downspread on the sink */ + dp_set_downspread(radeon_connector, 0); + /* start training on the source */ + radeon_dp_encoder_service(rdev, ATOM_DP_ACTION_TRAINING_START, + dig_connector->dp_clock, enc_id, 0); + /* set training pattern 1 on the source */ + radeon_dp_encoder_service(rdev, ATOM_DP_ACTION_TRAINING_PATTERN_SEL, + dig_connector->dp_clock, enc_id, 0); + + /* set initial vs/emph */ + memset(train_set, 0, 4); + udelay(400); + /* set training pattern 1 on the sink */ + dp_set_training(radeon_connector, DP_TRAINING_PATTERN_1); + + dp_update_dpvs_emph(radeon_connector, encoder, train_set); + + /* clock recovery loop */ + clock_recovery = false; + tries = 0; + voltage = 0xff; + for (;;) { + udelay(100); + if (!atom_dp_get_link_status(radeon_connector, link_status)) + break; + + if (dp_clock_recovery_ok(link_status, dig_connector->dp_lane_count)) { + clock_recovery = true; + break; + } + + for (i = 0; i < dig_connector->dp_lane_count; i++) { + if ((train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0) + break; + } + if (i == dig_connector->dp_lane_count) { + DRM_ERROR("clock recovery reached max voltage\n"); + break; + } + + if ((train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == voltage) { + ++tries; + if (tries == 5) { + DRM_ERROR("clock recovery tried 5 times\n"); + break; + } + } else + tries = 0; + + voltage = train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK; + + /* Compute new train_set as requested by sink */ + dp_get_adjust_train(link_status, dig_connector->dp_lane_count, train_set); + dp_update_dpvs_emph(radeon_connector, encoder, train_set); + } + if (!clock_recovery) + DRM_ERROR("clock recovery failed\n"); + else + DRM_DEBUG("clock recovery at voltage %d pre-emphasis %d\n", + train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK, + (train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK) >> + DP_TRAIN_PRE_EMPHASIS_SHIFT); + + + /* set training pattern 2 on the sink */ + dp_set_training(radeon_connector, DP_TRAINING_PATTERN_2); + /* set training pattern 2 on the source */ + radeon_dp_encoder_service(rdev, ATOM_DP_ACTION_TRAINING_PATTERN_SEL, + dig_connector->dp_clock, enc_id, 1); + + /* channel equalization loop */ + tries = 0; + channel_eq = false; + for (;;) { + udelay(400); + if (!atom_dp_get_link_status(radeon_connector, link_status)) + break; + + if (dp_channel_eq_ok(link_status, dig_connector->dp_lane_count)) { + channel_eq = true; + break; + } + + /* Try 5 times */ + if (tries > 5) { + DRM_ERROR("channel eq failed: 5 tries\n"); + break; + } + + /* Compute new train_set as requested by sink */ + dp_get_adjust_train(link_status, dig_connector->dp_lane_count, train_set); + dp_update_dpvs_emph(radeon_connector, encoder, train_set); + + tries++; + } + + if (!channel_eq) + DRM_ERROR("channel eq failed\n"); + else + DRM_DEBUG("channel eq at voltage %d pre-emphasis %d\n", + train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK, + (train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK) + >> DP_TRAIN_PRE_EMPHASIS_SHIFT); + + /* disable the training pattern on the sink */ + dp_set_training(radeon_connector, DP_TRAINING_PATTERN_DISABLE); + + radeon_dp_encoder_service(rdev, ATOM_DP_ACTION_TRAINING_COMPLETE, + dig_connector->dp_clock, enc_id, 0); +} + +int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, + uint8_t write_byte, uint8_t *read_byte) +{ + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; + struct radeon_i2c_chan *auxch = (struct radeon_i2c_chan *)adapter; + int ret = 0; + uint16_t address = algo_data->address; + uint8_t msg[5]; + uint8_t reply[2]; + int msg_len, dp_msg_len; + int reply_bytes; + + /* Set up the command byte */ + if (mode & MODE_I2C_READ) + msg[2] = AUX_I2C_READ << 4; + else + msg[2] = AUX_I2C_WRITE << 4; + + if (!(mode & MODE_I2C_STOP)) + msg[2] |= AUX_I2C_MOT << 4; + + msg[0] = address; + msg[1] = address >> 8; + + reply_bytes = 1; + + msg_len = 4; + dp_msg_len = 3; + switch (mode) { + case MODE_I2C_WRITE: + msg[4] = write_byte; + msg_len++; + dp_msg_len += 2; + break; + case MODE_I2C_READ: + dp_msg_len += 1; + break; + default: + break; + } + + msg[3] = (dp_msg_len) << 4; + ret = radeon_process_aux_ch(auxch, msg, msg_len, reply, reply_bytes, 0); + + if (ret) { + if (read_byte) + *read_byte = reply[0]; + return reply_bytes; + } + return -EREMOTEIO; +} + --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_ring.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_ring.c @@ -41,68 +41,55 @@ { struct radeon_fence *fence; struct radeon_ib *nib; - unsigned long i; - int r = 0; + int r = 0, i, c; *ib = NULL; r = radeon_fence_create(rdev, &fence); if (r) { - DRM_ERROR("failed to create fence for new IB\n"); + dev_err(rdev->dev, "failed to create fence for new IB\n"); return r; } mutex_lock(&rdev->ib_pool.mutex); - i = find_first_zero_bit(rdev->ib_pool.alloc_bm, RADEON_IB_POOL_SIZE); - if (i < RADEON_IB_POOL_SIZE) { - set_bit(i, rdev->ib_pool.alloc_bm); - rdev->ib_pool.ibs[i].length_dw = 0; - *ib = &rdev->ib_pool.ibs[i]; - mutex_unlock(&rdev->ib_pool.mutex); - goto out; + for (i = rdev->ib_pool.head_id, c = 0, nib = NULL; c < RADEON_IB_POOL_SIZE; c++, i++) { + i &= (RADEON_IB_POOL_SIZE - 1); + if (rdev->ib_pool.ibs[i].free) { + nib = &rdev->ib_pool.ibs[i]; + break; + } } - if (list_empty(&rdev->ib_pool.scheduled_ibs)) { - /* we go do nothings here */ + if (nib == NULL) { + /* This should never happen, it means we allocated all + * IB and haven't scheduled one yet, return EBUSY to + * userspace hoping that on ioctl recall we get better + * luck + */ + dev_err(rdev->dev, "no free indirect buffer !\n"); mutex_unlock(&rdev->ib_pool.mutex); - DRM_ERROR("all IB allocated none scheduled.\n"); - r = -EINVAL; - goto out; - } - /* get the first ib on the scheduled list */ - nib = list_entry(rdev->ib_pool.scheduled_ibs.next, - struct radeon_ib, list); - if (nib->fence == NULL) { - /* we go do nothings here */ - mutex_unlock(&rdev->ib_pool.mutex); - DRM_ERROR("IB %lu scheduled without a fence.\n", nib->idx); - r = -EINVAL; - goto out; + radeon_fence_unref(&fence); + return -EBUSY; } - mutex_unlock(&rdev->ib_pool.mutex); - - r = radeon_fence_wait(nib->fence, false); - if (r) { - DRM_ERROR("radeon: IB(%lu:0x%016lX:%u)\n", nib->idx, - (unsigned long)nib->gpu_addr, nib->length_dw); - DRM_ERROR("radeon: GPU lockup detected, fail to get a IB\n"); - goto out; + rdev->ib_pool.head_id = (nib->idx + 1) & (RADEON_IB_POOL_SIZE - 1); + nib->free = false; + if (nib->fence) { + mutex_unlock(&rdev->ib_pool.mutex); + r = radeon_fence_wait(nib->fence, false); + if (r) { + dev_err(rdev->dev, "error waiting fence of IB(%u:0x%016lX:%u)\n", + nib->idx, (unsigned long)nib->gpu_addr, nib->length_dw); + mutex_lock(&rdev->ib_pool.mutex); + nib->free = true; + mutex_unlock(&rdev->ib_pool.mutex); + radeon_fence_unref(&fence); + return r; + } + mutex_lock(&rdev->ib_pool.mutex); } radeon_fence_unref(&nib->fence); - + nib->fence = fence; nib->length_dw = 0; - - /* scheduled list is accessed here */ - mutex_lock(&rdev->ib_pool.mutex); - list_del(&nib->list); - INIT_LIST_HEAD(&nib->list); mutex_unlock(&rdev->ib_pool.mutex); - *ib = nib; -out: - if (r) { - radeon_fence_unref(&fence); - } else { - (*ib)->fence = fence; - } - return r; + return 0; } void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib) @@ -113,19 +100,10 @@ if (tmp == NULL) { return; } - mutex_lock(&rdev->ib_pool.mutex); - if (!list_empty(&tmp->list) && !radeon_fence_signaled(tmp->fence)) { - /* IB is scheduled & not signaled don't do anythings */ - mutex_unlock(&rdev->ib_pool.mutex); - return; - } - list_del(&tmp->list); - INIT_LIST_HEAD(&tmp->list); - if (tmp->fence) + if (!tmp->fence->emited) radeon_fence_unref(&tmp->fence); - - tmp->length_dw = 0; - clear_bit(tmp->idx, rdev->ib_pool.alloc_bm); + mutex_lock(&rdev->ib_pool.mutex); + tmp->free = true; mutex_unlock(&rdev->ib_pool.mutex); } @@ -135,7 +113,7 @@ if (!ib->length_dw || !rdev->cp.ready) { /* TODO: Nothings in the ib we should report. */ - DRM_ERROR("radeon: couldn't schedule IB(%lu).\n", ib->idx); + DRM_ERROR("radeon: couldn't schedule IB(%u).\n", ib->idx); return -EINVAL; } @@ -148,7 +126,8 @@ radeon_ring_ib_execute(rdev, ib); radeon_fence_emit(rdev, ib->fence); mutex_lock(&rdev->ib_pool.mutex); - list_add_tail(&ib->list, &rdev->ib_pool.scheduled_ibs); + /* once scheduled IB is considered free and protected by the fence */ + ib->free = true; mutex_unlock(&rdev->ib_pool.mutex); radeon_ring_unlock_commit(rdev); return 0; @@ -164,20 +143,24 @@ if (rdev->ib_pool.robj) return 0; /* Allocate 1M object buffer */ - INIT_LIST_HEAD(&rdev->ib_pool.scheduled_ibs); - r = radeon_object_create(rdev, NULL, RADEON_IB_POOL_SIZE*64*1024, - true, RADEON_GEM_DOMAIN_GTT, - false, &rdev->ib_pool.robj); + r = radeon_bo_create(rdev, NULL, RADEON_IB_POOL_SIZE*64*1024, + true, RADEON_GEM_DOMAIN_GTT, + &rdev->ib_pool.robj); if (r) { DRM_ERROR("radeon: failed to ib pool (%d).\n", r); return r; } - r = radeon_object_pin(rdev->ib_pool.robj, RADEON_GEM_DOMAIN_GTT, &gpu_addr); + r = radeon_bo_reserve(rdev->ib_pool.robj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rdev->ib_pool.robj, RADEON_GEM_DOMAIN_GTT, &gpu_addr); if (r) { + radeon_bo_unreserve(rdev->ib_pool.robj); DRM_ERROR("radeon: failed to pin ib pool (%d).\n", r); return r; } - r = radeon_object_kmap(rdev->ib_pool.robj, &ptr); + r = radeon_bo_kmap(rdev->ib_pool.robj, &ptr); + radeon_bo_unreserve(rdev->ib_pool.robj); if (r) { DRM_ERROR("radeon: failed to map ib poll (%d).\n", r); return r; @@ -190,9 +173,9 @@ rdev->ib_pool.ibs[i].ptr = ptr + offset; rdev->ib_pool.ibs[i].idx = i; rdev->ib_pool.ibs[i].length_dw = 0; - INIT_LIST_HEAD(&rdev->ib_pool.ibs[i].list); + rdev->ib_pool.ibs[i].free = true; } - bitmap_zero(rdev->ib_pool.alloc_bm, RADEON_IB_POOL_SIZE); + rdev->ib_pool.head_id = 0; rdev->ib_pool.ready = true; DRM_INFO("radeon: ib pool ready.\n"); if (radeon_debugfs_ib_init(rdev)) { @@ -203,14 +186,20 @@ void radeon_ib_pool_fini(struct radeon_device *rdev) { + int r; + if (!rdev->ib_pool.ready) { return; } mutex_lock(&rdev->ib_pool.mutex); - bitmap_zero(rdev->ib_pool.alloc_bm, RADEON_IB_POOL_SIZE); if (rdev->ib_pool.robj) { - radeon_object_kunmap(rdev->ib_pool.robj); - radeon_object_unref(&rdev->ib_pool.robj); + r = radeon_bo_reserve(rdev->ib_pool.robj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->ib_pool.robj); + radeon_bo_unpin(rdev->ib_pool.robj); + radeon_bo_unreserve(rdev->ib_pool.robj); + } + radeon_bo_unref(&rdev->ib_pool.robj); rdev->ib_pool.robj = NULL; } mutex_unlock(&rdev->ib_pool.mutex); @@ -288,29 +277,28 @@ rdev->cp.ring_size = ring_size; /* Allocate ring buffer */ if (rdev->cp.ring_obj == NULL) { - r = radeon_object_create(rdev, NULL, rdev->cp.ring_size, - true, - RADEON_GEM_DOMAIN_GTT, - false, - &rdev->cp.ring_obj); + r = radeon_bo_create(rdev, NULL, rdev->cp.ring_size, true, + RADEON_GEM_DOMAIN_GTT, + &rdev->cp.ring_obj); if (r) { - DRM_ERROR("radeon: failed to create ring buffer (%d).\n", r); - mutex_unlock(&rdev->cp.mutex); + dev_err(rdev->dev, "(%d) ring create failed\n", r); return r; } - r = radeon_object_pin(rdev->cp.ring_obj, - RADEON_GEM_DOMAIN_GTT, - &rdev->cp.gpu_addr); + r = radeon_bo_reserve(rdev->cp.ring_obj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rdev->cp.ring_obj, RADEON_GEM_DOMAIN_GTT, + &rdev->cp.gpu_addr); if (r) { - DRM_ERROR("radeon: failed to pin ring buffer (%d).\n", r); - mutex_unlock(&rdev->cp.mutex); + radeon_bo_unreserve(rdev->cp.ring_obj); + dev_err(rdev->dev, "(%d) ring pin failed\n", r); return r; } - r = radeon_object_kmap(rdev->cp.ring_obj, + r = radeon_bo_kmap(rdev->cp.ring_obj, (void **)&rdev->cp.ring); + radeon_bo_unreserve(rdev->cp.ring_obj); if (r) { - DRM_ERROR("radeon: failed to map ring buffer (%d).\n", r); - mutex_unlock(&rdev->cp.mutex); + dev_err(rdev->dev, "(%d) ring map failed\n", r); return r; } } @@ -321,11 +309,17 @@ void radeon_ring_fini(struct radeon_device *rdev) { + int r; + mutex_lock(&rdev->cp.mutex); if (rdev->cp.ring_obj) { - radeon_object_kunmap(rdev->cp.ring_obj); - radeon_object_unpin(rdev->cp.ring_obj); - radeon_object_unref(&rdev->cp.ring_obj); + r = radeon_bo_reserve(rdev->cp.ring_obj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->cp.ring_obj); + radeon_bo_unpin(rdev->cp.ring_obj); + radeon_bo_unreserve(rdev->cp.ring_obj); + } + radeon_bo_unref(&rdev->cp.ring_obj); rdev->cp.ring = NULL; rdev->cp.ring_obj = NULL; } @@ -346,7 +340,7 @@ if (ib == NULL) { return 0; } - seq_printf(m, "IB %04lu\n", ib->idx); + seq_printf(m, "IB %04u\n", ib->idx); seq_printf(m, "IB fence %p\n", ib->fence); seq_printf(m, "IB size %05u dwords\n", ib->length_dw); for (i = 0; i < ib->length_dw; i++) { --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_encoders.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_encoders.c @@ -35,6 +35,51 @@ bool radeon_atom_get_tv_timings(struct radeon_device *rdev, int index, struct drm_display_mode *mode); +static uint32_t radeon_encoder_clones(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct drm_encoder *clone_encoder; + uint32_t index_mask = 0; + int count; + + /* DIG routing gets problematic */ + if (rdev->family >= CHIP_R600) + return index_mask; + /* LVDS/TV are too wacky */ + if (radeon_encoder->devices & ATOM_DEVICE_LCD_SUPPORT) + return index_mask; + /* DVO requires 2x ppll clocks depending on tmds chip */ + if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) + return index_mask; + + count = -1; + list_for_each_entry(clone_encoder, &dev->mode_config.encoder_list, head) { + struct radeon_encoder *radeon_clone = to_radeon_encoder(clone_encoder); + count++; + + if (clone_encoder == encoder) + continue; + if (radeon_clone->devices & (ATOM_DEVICE_LCD_SUPPORT)) + continue; + if (radeon_clone->devices & ATOM_DEVICE_DFP2_SUPPORT) + continue; + else + index_mask |= (1 << count); + } + return index_mask; +} + +void radeon_setup_encoder_clones(struct drm_device *dev) +{ + struct drm_encoder *encoder; + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + encoder->possible_clones = radeon_encoder_clones(encoder); + } +} + uint32_t radeon_get_encoder_id(struct drm_device *dev, uint32_t supported_device, uint8_t dac) { @@ -111,6 +156,26 @@ return ret; } +static inline bool radeon_encoder_is_digital(struct drm_encoder *encoder) +{ + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + switch (radeon_encoder->encoder_id) { + case ENCODER_OBJECT_ID_INTERNAL_LVDS: + case ENCODER_OBJECT_ID_INTERNAL_TMDS1: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: + case ENCODER_OBJECT_ID_INTERNAL_LVTM1: + case ENCODER_OBJECT_ID_INTERNAL_DVO1: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1: + case ENCODER_OBJECT_ID_INTERNAL_DDI: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: + return true; + default: + return false; + } +} void radeon_link_encoder_connector(struct drm_device *dev) { @@ -157,35 +222,12 @@ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { radeon_connector = to_radeon_connector(connector); - if (radeon_encoder->devices & radeon_connector->devices) + if (radeon_encoder->active_device & radeon_connector->devices) return connector; } return NULL; } -/* used for both atom and legacy */ -void radeon_rmx_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) -{ - struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); - struct drm_device *dev = encoder->dev; - struct radeon_device *rdev = dev->dev_private; - struct drm_display_mode *native_mode = &radeon_encoder->native_mode; - - if (mode->hdisplay < native_mode->hdisplay || - mode->vdisplay < native_mode->vdisplay) { - int mode_id = adjusted_mode->base.id; - *adjusted_mode = *native_mode; - if (!ASIC_IS_AVIVO(rdev)) { - adjusted_mode->hdisplay = mode->hdisplay; - adjusted_mode->vdisplay = mode->vdisplay; - } - adjusted_mode->base.id = mode_id; - } -} - - static bool radeon_atom_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) @@ -198,14 +240,26 @@ radeon_encoder_set_active_device(encoder); drm_mode_set_crtcinfo(adjusted_mode, 0); - if (radeon_encoder->rmx_type != RMX_OFF) - radeon_rmx_mode_fixup(encoder, mode, adjusted_mode); - /* hw bug */ if ((mode->flags & DRM_MODE_FLAG_INTERLACE) && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; + /* get the native mode for LVDS */ + if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) { + struct drm_display_mode *native_mode = &radeon_encoder->native_mode; + int mode_id = adjusted_mode->base.id; + *adjusted_mode = *native_mode; + if (!ASIC_IS_AVIVO(rdev)) { + adjusted_mode->hdisplay = mode->hdisplay; + adjusted_mode->vdisplay = mode->vdisplay; + adjusted_mode->crtc_hdisplay = mode->hdisplay; + adjusted_mode->crtc_vdisplay = mode->vdisplay; + } + adjusted_mode->base.id = mode_id; + } + + /* get the native mode for TV */ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) { struct radeon_encoder_atom_dac *tv_dac = radeon_encoder->enc_priv; if (tv_dac) { @@ -218,6 +272,12 @@ } } + if (ASIC_IS_DCE3(rdev) && + (radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT))) { + struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); + radeon_dp_set_link_config(connector, mode); + } + return true; } @@ -392,7 +452,7 @@ LVDS_ENCODER_CONTROL_PS_ALLOCATION_V2 v2; }; -static void +void atombios_digital_setup(struct drm_encoder *encoder, int action) { struct drm_device *dev = encoder->dev; @@ -400,6 +460,7 @@ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); union lvds_encoder_control args; int index = 0; + int hdmi_detected = 0; uint8_t frev, crev; struct radeon_encoder_atom_dig *dig; struct drm_connector *connector; @@ -420,6 +481,9 @@ if (!radeon_connector->con_priv) return; + if (drm_detect_hdmi_monitor(radeon_connector->edid)) + hdmi_detected = 1; + dig_connector = radeon_connector->con_priv; memset(&args, 0, sizeof(args)); @@ -449,13 +513,13 @@ case 1: args.v1.ucMisc = 0; args.v1.ucAction = action; - if (drm_detect_hdmi_monitor(radeon_connector->edid)) + if (hdmi_detected) args.v1.ucMisc |= PANEL_ENCODER_MISC_HDMI_TYPE; args.v1.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { - if (dig->lvds_misc & (1 << 0)) + if (dig->lvds_misc & ATOM_PANEL_MISC_DUAL) args.v1.ucMisc |= PANEL_ENCODER_MISC_DUAL; - if (dig->lvds_misc & (1 << 1)) + if (dig->lvds_misc & ATOM_PANEL_MISC_888RGB) args.v1.ucMisc |= (1 << 1); } else { if (dig_connector->linkb) @@ -474,7 +538,7 @@ if (dig->coherent_mode) args.v2.ucMisc |= PANEL_ENCODER_MISC_COHERENT; } - if (drm_detect_hdmi_monitor(radeon_connector->edid)) + if (hdmi_detected) args.v2.ucMisc |= PANEL_ENCODER_MISC_HDMI_TYPE; args.v2.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); args.v2.ucTruncate = 0; @@ -482,18 +546,18 @@ args.v2.ucTemporal = 0; args.v2.ucFRC = 0; if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { - if (dig->lvds_misc & (1 << 0)) + if (dig->lvds_misc & ATOM_PANEL_MISC_DUAL) args.v2.ucMisc |= PANEL_ENCODER_MISC_DUAL; - if (dig->lvds_misc & (1 << 5)) { + if (dig->lvds_misc & ATOM_PANEL_MISC_SPATIAL) { args.v2.ucSpatial = PANEL_ENCODER_SPATIAL_DITHER_EN; - if (dig->lvds_misc & (1 << 1)) + if (dig->lvds_misc & ATOM_PANEL_MISC_888RGB) args.v2.ucSpatial |= PANEL_ENCODER_SPATIAL_DITHER_DEPTH; } - if (dig->lvds_misc & (1 << 6)) { + if (dig->lvds_misc & ATOM_PANEL_MISC_TEMPORAL) { args.v2.ucTemporal = PANEL_ENCODER_TEMPORAL_DITHER_EN; - if (dig->lvds_misc & (1 << 1)) + if (dig->lvds_misc & ATOM_PANEL_MISC_888RGB) args.v2.ucTemporal |= PANEL_ENCODER_TEMPORAL_DITHER_DEPTH; - if (((dig->lvds_misc >> 2) & 0x3) == 2) + if (((dig->lvds_misc >> ATOM_PANEL_MISC_GREY_LEVEL_SHIFT) & 0x3) == 2) args.v2.ucTemporal |= PANEL_ENCODER_TEMPORAL_LEVEL_4; } } else { @@ -514,7 +578,7 @@ } atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); - + r600_hdmi_enable(encoder, hdmi_detected); } int @@ -522,6 +586,7 @@ { struct drm_connector *connector; struct radeon_connector *radeon_connector; + struct radeon_connector_atom_dig *radeon_dig_connector; connector = radeon_get_connector_for_encoder(encoder); if (!connector) @@ -551,21 +616,23 @@ return ATOM_ENCODER_MODE_LVDS; break; case DRM_MODE_CONNECTOR_DisplayPort: - /*if (radeon_output->MonType == MT_DP) - return ATOM_ENCODER_MODE_DP; - else*/ - if (drm_detect_hdmi_monitor(radeon_connector->edid)) + case DRM_MODE_CONNECTOR_eDP: + radeon_dig_connector = radeon_connector->con_priv; + if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || + (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) + return ATOM_ENCODER_MODE_DP; + else if (drm_detect_hdmi_monitor(radeon_connector->edid)) return ATOM_ENCODER_MODE_HDMI; else return ATOM_ENCODER_MODE_DVI; break; - case CONNECTOR_DVI_A: - case CONNECTOR_VGA: + case DRM_MODE_CONNECTOR_DVIA: + case DRM_MODE_CONNECTOR_VGA: return ATOM_ENCODER_MODE_CRT; break; - case CONNECTOR_STV: - case CONNECTOR_CTV: - case CONNECTOR_DIN: + case DRM_MODE_CONNECTOR_Composite: + case DRM_MODE_CONNECTOR_SVIDEO: + case DRM_MODE_CONNECTOR_9PinDIN: /* fix me */ return ATOM_ENCODER_MODE_TV; /*return ATOM_ENCODER_MODE_CV;*/ @@ -573,6 +640,30 @@ } } +/* + * DIG Encoder/Transmitter Setup + * + * DCE 3.0/3.1 + * - 2 DIG transmitter blocks. UNIPHY (links A and B) and LVTMA. + * Supports up to 3 digital outputs + * - 2 DIG encoder blocks. + * DIG1 can drive UNIPHY link A or link B + * DIG2 can drive UNIPHY link B or LVTMA + * + * DCE 3.2 + * - 3 DIG transmitter blocks. UNIPHY0/1/2 (links A and B). + * Supports up to 5 digital outputs + * - 2 DIG encoder blocks. + * DIG1/2 can drive UNIPHY0/1/2 link A or link B + * + * Routing + * crtc -> dig encoder -> UNIPHY/LVTMA (1 or 2 links) + * Examples: + * crtc0 -> dig2 -> LVTMA links A+B -> TMDS/HDMI + * crtc1 -> dig1 -> UNIPHY0 link B -> DP + * crtc0 -> dig1 -> UNIPHY2 link A -> LVDS + * crtc1 -> dig2 -> UNIPHY1 link B+A -> TMDS/HDMI + */ static void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action) { @@ -605,24 +696,11 @@ memset(&args, 0, sizeof(args)); - if (ASIC_IS_DCE32(rdev)) { - if (dig->dig_block) - index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); - else - index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl); - num = dig->dig_block + 1; - } else { - switch (radeon_encoder->encoder_id) { - case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: - index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl); - num = 1; - break; - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: - index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); - num = 2; - break; - } - } + if (dig->dig_encoder) + index = GetIndexIntoMasterTable(COMMAND, DIG2EncoderControl); + else + index = GetIndexIntoMasterTable(COMMAND, DIG1EncoderControl); + num = dig->dig_encoder + 1; atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev); @@ -652,18 +730,21 @@ } } - if (radeon_encoder->pixel_clock > 165000) { - args.ucConfig |= ATOM_ENCODER_CONFIG_LINKA_B; + args.ucEncoderMode = atombios_get_encoder_mode(encoder); + + if (args.ucEncoderMode == ATOM_ENCODER_MODE_DP) { + if (dig_connector->dp_clock == 270000) + args.ucConfig |= ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ; + args.ucLaneNum = dig_connector->dp_lane_count; + } else if (radeon_encoder->pixel_clock > 165000) args.ucLaneNum = 8; - } else { - if (dig_connector->linkb) - args.ucConfig |= ATOM_ENCODER_CONFIG_LINKB; - else - args.ucConfig |= ATOM_ENCODER_CONFIG_LINKA; + else args.ucLaneNum = 4; - } - args.ucEncoderMode = atombios_get_encoder_mode(encoder); + if (dig_connector->linkb) + args.ucConfig |= ATOM_ENCODER_CONFIG_LINKB; + else + args.ucConfig |= ATOM_ENCODER_CONFIG_LINKA; atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); @@ -674,8 +755,8 @@ DIG_TRANSMITTER_CONTROL_PARAMETERS_V2 v2; }; -static void -atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action) +void +atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t lane_num, uint8_t lane_set) { struct drm_device *dev = encoder->dev; struct radeon_device *rdev = dev->dev_private; @@ -687,6 +768,7 @@ struct drm_connector *connector; struct radeon_connector *radeon_connector; struct radeon_connector_atom_dig *dig_connector; + bool is_dp = false; connector = radeon_get_connector_for_encoder(encoder); if (!connector) @@ -704,6 +786,9 @@ dig_connector = radeon_connector->con_priv; + if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP) + is_dp = true; + memset(&args, 0, sizeof(args)); if (ASIC_IS_DCE32(rdev)) @@ -724,17 +809,23 @@ args.v1.ucAction = action; if (action == ATOM_TRANSMITTER_ACTION_INIT) { args.v1.usInitInfo = radeon_connector->connector_object_id; + } else if (action == ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH) { + args.v1.asMode.ucLaneSel = lane_num; + args.v1.asMode.ucLaneSet = lane_set; } else { - if (radeon_encoder->pixel_clock > 165000) + if (is_dp) + args.v1.usPixelClock = + cpu_to_le16(dig_connector->dp_clock / 10); + else if (radeon_encoder->pixel_clock > 165000) args.v1.usPixelClock = cpu_to_le16((radeon_encoder->pixel_clock / 2) / 10); else args.v1.usPixelClock = cpu_to_le16(radeon_encoder->pixel_clock / 10); } if (ASIC_IS_DCE32(rdev)) { - if (radeon_encoder->pixel_clock > 165000) - args.v2.usPixelClock = cpu_to_le16((radeon_encoder->pixel_clock / 2) / 10); - if (dig->dig_block) + if (dig->dig_encoder == 1) args.v2.acConfig.ucEncoderSel = 1; + if (dig_connector->linkb) + args.v2.acConfig.ucLinkSel = 1; switch (radeon_encoder->encoder_id) { case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: @@ -751,26 +842,32 @@ break; } - if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { + if (is_dp) + args.v2.acConfig.fCoherentMode = 1; + else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { if (dig->coherent_mode) args.v2.acConfig.fCoherentMode = 1; + if (radeon_encoder->pixel_clock > 165000) + args.v2.acConfig.fDualLinkConnector = 1; } } else { + args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; + if (dig->dig_encoder) + args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER; + else + args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER; + switch (radeon_encoder->encoder_id) { case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER; if (rdev->flags & RADEON_IS_IGP) { if (radeon_encoder->pixel_clock > 165000) { - args.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK | - ATOM_TRANSMITTER_CONFIG_LINKA_B); if (dig_connector->igp_lane_info & 0x3) args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_0_7; else if (dig_connector->igp_lane_info & 0xc) args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_8_15; } else { - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKA; if (dig_connector->igp_lane_info & 0x1) args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_0_3; else if (dig_connector->igp_lane_info & 0x2) @@ -780,42 +877,27 @@ else if (dig_connector->igp_lane_info & 0x8) args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LANE_12_15; } - } else { - if (radeon_encoder->pixel_clock > 165000) - args.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK | - ATOM_TRANSMITTER_CONFIG_LINKA_B | - ATOM_TRANSMITTER_CONFIG_LANE_0_7); - else { - if (dig_connector->linkb) - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKB | ATOM_TRANSMITTER_CONFIG_LANE_0_3; - else - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKA | ATOM_TRANSMITTER_CONFIG_LANE_0_3; - } - } - break; - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER; - if (radeon_encoder->pixel_clock > 165000) - args.v1.ucConfig |= (ATOM_TRANSMITTER_CONFIG_8LANE_LINK | - ATOM_TRANSMITTER_CONFIG_LINKA_B | - ATOM_TRANSMITTER_CONFIG_LANE_0_7); - else { - if (dig_connector->linkb) - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKB | ATOM_TRANSMITTER_CONFIG_LANE_0_3; - else - args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKA | ATOM_TRANSMITTER_CONFIG_LANE_0_3; } break; } - if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { + if (radeon_encoder->pixel_clock > 165000) + args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_8LANE_LINK; + + if (dig_connector->linkb) + args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKB; + else + args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_LINKA; + + if (is_dp) + args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_COHERENT; + else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { if (dig->coherent_mode) args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_COHERENT; } } atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); - } static void @@ -918,12 +1000,16 @@ if (is_dig) { switch (mode) { case DRM_MODE_DPMS_ON: - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE); + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0); + { + struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); + dp_link_train(encoder, connector); + } break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE); + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT, 0, 0); break; } } else { @@ -957,6 +1043,7 @@ union crtc_sourc_param args; int index = GetIndexIntoMasterTable(COMMAND, SelectCRTC_Source); uint8_t frev, crev; + struct radeon_encoder_atom_dig *dig; memset(&args, 0, sizeof(args)); @@ -1020,20 +1107,16 @@ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: - if (ASIC_IS_DCE32(rdev)) { - if (radeon_crtc->crtc_id) - args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; - else - args.v2.ucEncoderID = ASIC_INT_DIG1_ENCODER_ID; - } else + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: + dig = radeon_encoder->enc_priv; + if (dig->dig_encoder) + args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; + else args.v2.ucEncoderID = ASIC_INT_DIG1_ENCODER_ID; break; case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1: args.v2.ucEncoderID = ASIC_INT_DVO_ENCODER_ID; break; - case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: - args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID; - break; case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) args.v2.ucEncoderID = ASIC_INT_TV_ENCODER_ID; @@ -1060,7 +1143,6 @@ } atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); - } static void @@ -1094,6 +1176,47 @@ } } +static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct drm_encoder *test_encoder; + struct radeon_encoder_atom_dig *dig; + uint32_t dig_enc_in_use = 0; + /* on DCE32 and encoder can driver any block so just crtc id */ + if (ASIC_IS_DCE32(rdev)) { + return radeon_crtc->crtc_id; + } + + /* on DCE3 - LVTMA can only be driven by DIGB */ + list_for_each_entry(test_encoder, &dev->mode_config.encoder_list, head) { + struct radeon_encoder *radeon_test_encoder; + + if (encoder == test_encoder) + continue; + + if (!radeon_encoder_is_digital(test_encoder)) + continue; + + radeon_test_encoder = to_radeon_encoder(test_encoder); + dig = radeon_test_encoder->enc_priv; + + if (dig->dig_encoder >= 0) + dig_enc_in_use |= (1 << dig->dig_encoder); + } + + if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA) { + if (dig_enc_in_use & 0x2) + DRM_ERROR("LVDS required digital encoder 2 but it was in use - stealing\n"); + return 1; + } + if (!(dig_enc_in_use & 1)) + return 0; + return 1; +} + static void radeon_atom_encoder_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, @@ -1104,11 +1227,11 @@ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc); - if (radeon_encoder->enc_priv) { - struct radeon_encoder_atom_dig *dig; - - dig = radeon_encoder->enc_priv; - dig->dig_block = radeon_crtc->crtc_id; + if (radeon_encoder->active_device & + (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) { + struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; + if (dig) + dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder); } radeon_encoder->pixel_clock = adjusted_mode->clock; @@ -1134,14 +1257,14 @@ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: /* disable the encoder and transmitter */ - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE); + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0); atombios_dig_encoder_setup(encoder, ATOM_DISABLE); /* setup and enable the encoder and transmitter */ atombios_dig_encoder_setup(encoder, ATOM_ENABLE); - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_INIT); - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP); - atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE); + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_INIT, 0, 0); + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0); + atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0); break; case ENCODER_OBJECT_ID_INTERNAL_DDI: atombios_ddia_setup(encoder, ATOM_ENABLE); @@ -1155,11 +1278,17 @@ case ENCODER_OBJECT_ID_INTERNAL_DAC2: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: atombios_dac_setup(encoder, ATOM_ENABLE); - if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) - atombios_tv_setup(encoder, ATOM_ENABLE); + if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) { + if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) + atombios_tv_setup(encoder, ATOM_ENABLE); + else + atombios_tv_setup(encoder, ATOM_DISABLE); + } break; } atombios_apply_encoder_quirks(encoder, adjusted_mode); + + r600_hdmi_setmode(encoder, adjusted_mode); } static bool @@ -1266,7 +1395,13 @@ static void radeon_atom_encoder_disable(struct drm_encoder *encoder) { struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct radeon_encoder_atom_dig *dig; radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF); + + if (radeon_encoder_is_digital(encoder)) { + dig = radeon_encoder->enc_priv; + dig->dig_encoder = -1; + } radeon_encoder->active_device = 0; } @@ -1323,6 +1458,7 @@ /* coherent mode by default */ dig->coherent_mode = true; + dig->dig_encoder = -1; return dig; } @@ -1354,7 +1490,6 @@ encoder->possible_crtcs = 0x1; else encoder->possible_crtcs = 0x3; - encoder->possible_clones = 0; radeon_encoder->enc_priv = NULL; @@ -1406,4 +1541,6 @@ drm_encoder_helper_add(encoder, &radeon_atom_dig_helper_funcs); break; } + + r600_hdmi_init(encoder); } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_atombios.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_atombios.c @@ -47,7 +47,8 @@ int connector_type, struct radeon_i2c_bus_rec *i2c_bus, bool linkb, uint32_t igp_lane_info, - uint16_t connector_object_id); + uint16_t connector_object_id, + struct radeon_hpd *hpd); /* from radeon_legacy_encoder.c */ extern void @@ -60,16 +61,16 @@ struct _ATOM_SUPPORTED_DEVICES_INFO_2d1 info_2d1; }; -static inline struct radeon_i2c_bus_rec radeon_lookup_gpio(struct drm_device - *dev, uint8_t id) +static inline struct radeon_i2c_bus_rec radeon_lookup_i2c_gpio(struct radeon_device *rdev, + uint8_t id) { - struct radeon_device *rdev = dev->dev_private; struct atom_context *ctx = rdev->mode_info.atom_context; - ATOM_GPIO_I2C_ASSIGMENT gpio; + ATOM_GPIO_I2C_ASSIGMENT *gpio; struct radeon_i2c_bus_rec i2c; int index = GetIndexIntoMasterTable(DATA, GPIO_I2C_Info); struct _ATOM_GPIO_I2C_INFO *i2c_info; uint16_t data_offset; + int i; memset(&i2c, 0, sizeof(struct radeon_i2c_bus_rec)); i2c.valid = false; @@ -78,34 +79,122 @@ i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); - gpio = i2c_info->asGPIO_Info[id]; - i2c.mask_clk_reg = le16_to_cpu(gpio.usClkMaskRegisterIndex) * 4; - i2c.mask_data_reg = le16_to_cpu(gpio.usDataMaskRegisterIndex) * 4; - i2c.put_clk_reg = le16_to_cpu(gpio.usClkEnRegisterIndex) * 4; - i2c.put_data_reg = le16_to_cpu(gpio.usDataEnRegisterIndex) * 4; - i2c.get_clk_reg = le16_to_cpu(gpio.usClkY_RegisterIndex) * 4; - i2c.get_data_reg = le16_to_cpu(gpio.usDataY_RegisterIndex) * 4; - i2c.a_clk_reg = le16_to_cpu(gpio.usClkA_RegisterIndex) * 4; - i2c.a_data_reg = le16_to_cpu(gpio.usDataA_RegisterIndex) * 4; - i2c.mask_clk_mask = (1 << gpio.ucClkMaskShift); - i2c.mask_data_mask = (1 << gpio.ucDataMaskShift); - i2c.put_clk_mask = (1 << gpio.ucClkEnShift); - i2c.put_data_mask = (1 << gpio.ucDataEnShift); - i2c.get_clk_mask = (1 << gpio.ucClkY_Shift); - i2c.get_data_mask = (1 << gpio.ucDataY_Shift); - i2c.a_clk_mask = (1 << gpio.ucClkA_Shift); - i2c.a_data_mask = (1 << gpio.ucDataA_Shift); - i2c.valid = true; + for (i = 0; i < ATOM_MAX_SUPPORTED_DEVICE; i++) { + gpio = &i2c_info->asGPIO_Info[i]; + + if (gpio->sucI2cId.ucAccess == id) { + i2c.mask_clk_reg = le16_to_cpu(gpio->usClkMaskRegisterIndex) * 4; + i2c.mask_data_reg = le16_to_cpu(gpio->usDataMaskRegisterIndex) * 4; + i2c.en_clk_reg = le16_to_cpu(gpio->usClkEnRegisterIndex) * 4; + i2c.en_data_reg = le16_to_cpu(gpio->usDataEnRegisterIndex) * 4; + i2c.y_clk_reg = le16_to_cpu(gpio->usClkY_RegisterIndex) * 4; + i2c.y_data_reg = le16_to_cpu(gpio->usDataY_RegisterIndex) * 4; + i2c.a_clk_reg = le16_to_cpu(gpio->usClkA_RegisterIndex) * 4; + i2c.a_data_reg = le16_to_cpu(gpio->usDataA_RegisterIndex) * 4; + i2c.mask_clk_mask = (1 << gpio->ucClkMaskShift); + i2c.mask_data_mask = (1 << gpio->ucDataMaskShift); + i2c.en_clk_mask = (1 << gpio->ucClkEnShift); + i2c.en_data_mask = (1 << gpio->ucDataEnShift); + i2c.y_clk_mask = (1 << gpio->ucClkY_Shift); + i2c.y_data_mask = (1 << gpio->ucDataY_Shift); + i2c.a_clk_mask = (1 << gpio->ucClkA_Shift); + i2c.a_data_mask = (1 << gpio->ucDataA_Shift); + + if (gpio->sucI2cId.sbfAccess.bfHW_Capable) + i2c.hw_capable = true; + else + i2c.hw_capable = false; + + if (gpio->sucI2cId.ucAccess == 0xa0) + i2c.mm_i2c = true; + else + i2c.mm_i2c = false; + + i2c.i2c_id = gpio->sucI2cId.ucAccess; + + i2c.valid = true; + break; + } + } return i2c; } +static inline struct radeon_gpio_rec radeon_lookup_gpio(struct radeon_device *rdev, + u8 id) +{ + struct atom_context *ctx = rdev->mode_info.atom_context; + struct radeon_gpio_rec gpio; + int index = GetIndexIntoMasterTable(DATA, GPIO_Pin_LUT); + struct _ATOM_GPIO_PIN_LUT *gpio_info; + ATOM_GPIO_PIN_ASSIGNMENT *pin; + u16 data_offset, size; + int i, num_indices; + + memset(&gpio, 0, sizeof(struct radeon_gpio_rec)); + gpio.valid = false; + + atom_parse_data_header(ctx, index, &size, NULL, NULL, &data_offset); + + gpio_info = (struct _ATOM_GPIO_PIN_LUT *)(ctx->bios + data_offset); + + num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / sizeof(ATOM_GPIO_PIN_ASSIGNMENT); + + for (i = 0; i < num_indices; i++) { + pin = &gpio_info->asGPIO_Pin[i]; + if (id == pin->ucGPIO_ID) { + gpio.id = pin->ucGPIO_ID; + gpio.reg = pin->usGpioPin_AIndex * 4; + gpio.mask = (1 << pin->ucGpioPinBitShift); + gpio.valid = true; + break; + } + } + + return gpio; +} + +static struct radeon_hpd radeon_atom_get_hpd_info_from_gpio(struct radeon_device *rdev, + struct radeon_gpio_rec *gpio) +{ + struct radeon_hpd hpd; + hpd.gpio = *gpio; + if (gpio->reg == AVIVO_DC_GPIO_HPD_A) { + switch(gpio->mask) { + case (1 << 0): + hpd.hpd = RADEON_HPD_1; + break; + case (1 << 8): + hpd.hpd = RADEON_HPD_2; + break; + case (1 << 16): + hpd.hpd = RADEON_HPD_3; + break; + case (1 << 24): + hpd.hpd = RADEON_HPD_4; + break; + case (1 << 26): + hpd.hpd = RADEON_HPD_5; + break; + case (1 << 28): + hpd.hpd = RADEON_HPD_6; + break; + default: + hpd.hpd = RADEON_HPD_NONE; + break; + } + } else + hpd.hpd = RADEON_HPD_NONE; + return hpd; +} + static bool radeon_atom_apply_quirks(struct drm_device *dev, uint32_t supported_device, int *connector_type, struct radeon_i2c_bus_rec *i2c_bus, - uint16_t *line_mux) + uint16_t *line_mux, + struct radeon_hpd *hpd) { /* Asus M2A-VM HDMI board lists the DVI port as HDMI */ @@ -117,6 +206,15 @@ *connector_type = DRM_MODE_CONNECTOR_DVID; } + /* Asrock RS600 board lists the DVI port as HDMI */ + if ((dev->pdev->device == 0x7941) && + (dev->pdev->subsystem_vendor == 0x1849) && + (dev->pdev->subsystem_device == 0x7941)) { + if ((*connector_type == DRM_MODE_CONNECTOR_HDMIA) && + (supported_device == ATOM_DEVICE_DFP3_SUPPORT)) + *connector_type = DRM_MODE_CONNECTOR_DVID; + } + /* a-bit f-i90hd - ciaranm on #radeonhd - this board has no DVI */ if ((dev->pdev->device == 0x7941) && (dev->pdev->subsystem_vendor == 0x147b) && @@ -135,6 +233,23 @@ } } + /* HIS X1300 is DVI+VGA, not DVI+DVI */ + if ((dev->pdev->device == 0x7146) && + (dev->pdev->subsystem_vendor == 0x17af) && + (dev->pdev->subsystem_device == 0x2058)) { + if (supported_device == ATOM_DEVICE_DFP1_SUPPORT) + return false; + } + + /* Gigabyte X1300 is DVI+VGA, not DVI+DVI */ + if ((dev->pdev->device == 0x7142) && + (dev->pdev->subsystem_vendor == 0x1458) && + (dev->pdev->subsystem_device == 0x2134)) { + if (supported_device == ATOM_DEVICE_DFP1_SUPPORT) + return false; + } + + /* Funky macbooks */ if ((dev->pdev->device == 0x71C5) && (dev->pdev->subsystem_vendor == 0x106b) && @@ -172,6 +287,24 @@ } } + /* Acer laptop reports DVI-D as DVI-I */ + if ((dev->pdev->device == 0x95c4) && + (dev->pdev->subsystem_vendor == 0x1025) && + (dev->pdev->subsystem_device == 0x013c)) { + if ((*connector_type == DRM_MODE_CONNECTOR_DVII) && + (supported_device == ATOM_DEVICE_DFP1_SUPPORT)) + *connector_type = DRM_MODE_CONNECTOR_DVID; + } + + /* XFX Pine Group device rv730 reports no VGA DDC lines + * even though they are wired up to record 0x93 + */ + if ((dev->pdev->device == 0x9498) && + (dev->pdev->subsystem_vendor == 0x1682) && + (dev->pdev->subsystem_device == 0x2452)) { + struct radeon_device *rdev = dev->dev_private; + *i2c_bus = radeon_lookup_i2c_gpio(rdev, 0x93); + } return true; } @@ -231,7 +364,9 @@ DRM_MODE_CONNECTOR_Unknown, DRM_MODE_CONNECTOR_Unknown, DRM_MODE_CONNECTOR_Unknown, - DRM_MODE_CONNECTOR_DisplayPort + DRM_MODE_CONNECTOR_DisplayPort, + DRM_MODE_CONNECTOR_eDP, + DRM_MODE_CONNECTOR_Unknown }; bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev) @@ -240,16 +375,18 @@ struct radeon_mode_info *mode_info = &rdev->mode_info; struct atom_context *ctx = mode_info->atom_context; int index = GetIndexIntoMasterTable(DATA, Object_Header); - uint16_t size, data_offset; - uint8_t frev, crev, line_mux = 0; + u16 size, data_offset; + u8 frev, crev; ATOM_CONNECTOR_OBJECT_TABLE *con_obj; ATOM_DISPLAY_OBJECT_PATH_TABLE *path_obj; ATOM_OBJECT_HEADER *obj_header; int i, j, path_size, device_support; int connector_type; - uint16_t igp_lane_info, conn_id, connector_object_id; + u16 igp_lane_info, conn_id, connector_object_id; bool linkb; struct radeon_i2c_bus_rec ddc_bus; + struct radeon_gpio_rec gpio; + struct radeon_hpd hpd; atom_parse_data_header(ctx, index, &size, &frev, &crev, &data_offset); @@ -276,7 +413,6 @@ path = (ATOM_DISPLAY_OBJECT_PATH *) addr; path_size += le16_to_cpu(path->usSize); linkb = false; - if (device_support & le16_to_cpu(path->usDeviceTag)) { uint8_t con_obj_id, con_obj_num, con_obj_type; @@ -377,10 +513,9 @@ } } - /* look up gpio for ddc */ + /* look up gpio for ddc, hpd */ if ((le16_to_cpu(path->usDeviceTag) & - (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) - == 0) { + (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) == 0) { for (j = 0; j < con_obj->ucNumberOfObjects; j++) { if (le16_to_cpu(path->usConnObjectId) == le16_to_cpu(con_obj->asObjects[j]. @@ -394,21 +529,34 @@ asObjects[j]. usRecordOffset)); ATOM_I2C_RECORD *i2c_record; + ATOM_HPD_INT_RECORD *hpd_record; + ATOM_I2C_ID_CONFIG_ACCESS *i2c_config; + hpd.hpd = RADEON_HPD_NONE; while (record->ucRecordType > 0 && record-> ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { - switch (record-> - ucRecordType) { + switch (record->ucRecordType) { case ATOM_I2C_RECORD_TYPE: i2c_record = - (ATOM_I2C_RECORD - *) record; - line_mux = - i2c_record-> - sucI2cId. - bfI2C_LineMux; + (ATOM_I2C_RECORD *) + record; + i2c_config = + (ATOM_I2C_ID_CONFIG_ACCESS *) + &i2c_record->sucI2cId; + ddc_bus = radeon_lookup_i2c_gpio(rdev, + i2c_config-> + ucAccess); + break; + case ATOM_HPD_INT_RECORD_TYPE: + hpd_record = + (ATOM_HPD_INT_RECORD *) + record; + gpio = radeon_lookup_gpio(rdev, + hpd_record->ucHPDIntGPIOID); + hpd = radeon_atom_get_hpd_info_from_gpio(rdev, &gpio); + hpd.plugged_state = hpd_record->ucPlugged_PinState; break; } record = @@ -421,24 +569,16 @@ break; } } - } else - line_mux = 0; - - if ((le16_to_cpu(path->usDeviceTag) == - ATOM_DEVICE_TV1_SUPPORT) - || (le16_to_cpu(path->usDeviceTag) == - ATOM_DEVICE_TV2_SUPPORT) - || (le16_to_cpu(path->usDeviceTag) == - ATOM_DEVICE_CV_SUPPORT)) + } else { + hpd.hpd = RADEON_HPD_NONE; ddc_bus.valid = false; - else - ddc_bus = radeon_lookup_gpio(dev, line_mux); + } conn_id = le16_to_cpu(path->usConnObjectId); if (!radeon_atom_apply_quirks (dev, le16_to_cpu(path->usDeviceTag), &connector_type, - &ddc_bus, &conn_id)) + &ddc_bus, &conn_id, &hpd)) continue; radeon_add_atom_connector(dev, @@ -447,7 +587,8 @@ usDeviceTag), connector_type, &ddc_bus, linkb, igp_lane_info, - connector_object_id); + connector_object_id, + &hpd); } } @@ -502,6 +643,7 @@ uint16_t devices; int connector_type; struct radeon_i2c_bus_rec ddc_bus; + struct radeon_hpd hpd; }; bool radeon_get_atom_connector_info_from_supported_devices_table(struct @@ -517,7 +659,7 @@ uint16_t device_support; uint8_t dac; union atom_supported_devices *supported_devices; - int i, j; + int i, j, max_device; struct bios_connector bios_connectors[ATOM_MAX_SUPPORTED_DEVICE]; atom_parse_data_header(ctx, index, &size, &frev, &crev, &data_offset); @@ -527,7 +669,12 @@ device_support = le16_to_cpu(supported_devices->info.usDeviceSupport); - for (i = 0; i < ATOM_MAX_SUPPORTED_DEVICE; i++) { + if (frev > 1) + max_device = ATOM_MAX_SUPPORTED_DEVICE; + else + max_device = ATOM_MAX_SUPPORTED_DEVICE_INFO; + + for (i = 0; i < max_device; i++) { ATOM_CONNECTOR_INFO_I2C ci = supported_devices->info.asConnInfo[i]; @@ -553,22 +700,8 @@ dac = ci.sucConnectorInfo.sbfAccess.bfAssociatedDAC; - if ((rdev->family == CHIP_RS690) || - (rdev->family == CHIP_RS740)) { - if ((i == ATOM_DEVICE_DFP2_INDEX) - && (ci.sucI2cId.sbfAccess.bfI2C_LineMux == 2)) - bios_connectors[i].line_mux = - ci.sucI2cId.sbfAccess.bfI2C_LineMux + 1; - else if ((i == ATOM_DEVICE_DFP3_INDEX) - && (ci.sucI2cId.sbfAccess.bfI2C_LineMux == 1)) - bios_connectors[i].line_mux = - ci.sucI2cId.sbfAccess.bfI2C_LineMux + 1; - else - bios_connectors[i].line_mux = - ci.sucI2cId.sbfAccess.bfI2C_LineMux; - } else - bios_connectors[i].line_mux = - ci.sucI2cId.sbfAccess.bfI2C_LineMux; + bios_connectors[i].line_mux = + ci.sucI2cId.ucAccess; /* give tv unique connector ids */ if (i == ATOM_DEVICE_TV1_INDEX) { @@ -582,8 +715,30 @@ bios_connectors[i].line_mux = 52; } else bios_connectors[i].ddc_bus = - radeon_lookup_gpio(dev, - bios_connectors[i].line_mux); + radeon_lookup_i2c_gpio(rdev, + bios_connectors[i].line_mux); + + if ((crev > 1) && (frev > 1)) { + u8 isb = supported_devices->info_2d1.asIntSrcInfo[i].ucIntSrcBitmap; + switch (isb) { + case 0x4: + bios_connectors[i].hpd.hpd = RADEON_HPD_1; + break; + case 0xa: + bios_connectors[i].hpd.hpd = RADEON_HPD_2; + break; + default: + bios_connectors[i].hpd.hpd = RADEON_HPD_NONE; + break; + } + } else { + if (i == ATOM_DEVICE_DFP1_INDEX) + bios_connectors[i].hpd.hpd = RADEON_HPD_1; + else if (i == ATOM_DEVICE_DFP2_INDEX) + bios_connectors[i].hpd.hpd = RADEON_HPD_2; + else + bios_connectors[i].hpd.hpd = RADEON_HPD_NONE; + } /* Always set the connector type to VGA for CRT1/CRT2. if they are * shared with a DVI port, we'll pick up the DVI connector when we @@ -595,7 +750,8 @@ if (!radeon_atom_apply_quirks (dev, (1 << i), &bios_connectors[i].connector_type, - &bios_connectors[i].ddc_bus, &bios_connectors[i].line_mux)) + &bios_connectors[i].ddc_bus, &bios_connectors[i].line_mux, + &bios_connectors[i].hpd)) continue; bios_connectors[i].valid = true; @@ -610,41 +766,42 @@ else radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, - (1 << - i), + (1 << i), dac), (1 << i)); } /* combine shared connectors */ - for (i = 0; i < ATOM_MAX_SUPPORTED_DEVICE; i++) { + for (i = 0; i < max_device; i++) { if (bios_connectors[i].valid) { - for (j = 0; j < ATOM_MAX_SUPPORTED_DEVICE; j++) { + for (j = 0; j < max_device; j++) { if (bios_connectors[j].valid && (i != j)) { if (bios_connectors[i].line_mux == bios_connectors[j].line_mux) { - if (((bios_connectors[i]. - devices & - (ATOM_DEVICE_DFP_SUPPORT)) - && (bios_connectors[j]. - devices & - (ATOM_DEVICE_CRT_SUPPORT))) - || - ((bios_connectors[j]. - devices & - (ATOM_DEVICE_DFP_SUPPORT)) - && (bios_connectors[i]. - devices & - (ATOM_DEVICE_CRT_SUPPORT)))) { - bios_connectors[i]. - devices |= - bios_connectors[j]. - devices; - bios_connectors[i]. - connector_type = - DRM_MODE_CONNECTOR_DVII; - bios_connectors[j]. - valid = false; + /* make sure not to combine LVDS */ + if (bios_connectors[i].devices & (ATOM_DEVICE_LCD_SUPPORT)) { + bios_connectors[i].line_mux = 53; + bios_connectors[i].ddc_bus.valid = false; + continue; + } + if (bios_connectors[j].devices & (ATOM_DEVICE_LCD_SUPPORT)) { + bios_connectors[j].line_mux = 53; + bios_connectors[j].ddc_bus.valid = false; + continue; + } + /* combine analog and digital for DVI-I */ + if (((bios_connectors[i].devices & (ATOM_DEVICE_DFP_SUPPORT)) && + (bios_connectors[j].devices & (ATOM_DEVICE_CRT_SUPPORT))) || + ((bios_connectors[j].devices & (ATOM_DEVICE_DFP_SUPPORT)) && + (bios_connectors[i].devices & (ATOM_DEVICE_CRT_SUPPORT)))) { + bios_connectors[i].devices |= + bios_connectors[j].devices; + bios_connectors[i].connector_type = + DRM_MODE_CONNECTOR_DVII; + if (bios_connectors[j].devices & (ATOM_DEVICE_DFP_SUPPORT)) + bios_connectors[i].hpd = + bios_connectors[j].hpd; + bios_connectors[j].valid = false; } } } @@ -653,7 +810,7 @@ } /* add the connectors */ - for (i = 0; i < ATOM_MAX_SUPPORTED_DEVICE; i++) { + for (i = 0; i < max_device; i++) { if (bios_connectors[i].valid) { uint16_t connector_object_id = atombios_get_connector_object_id(dev, @@ -666,7 +823,8 @@ connector_type, &bios_connectors[i].ddc_bus, false, 0, - connector_object_id); + connector_object_id, + &bios_connectors[i].hpd); } } @@ -731,7 +889,8 @@ * pre-DCE 3.0 r6xx hardware. This might need to be adjusted per * family. */ - p1pll->pll_out_min = 64800; + if (!radeon_new_pll) + p1pll->pll_out_min = 64800; } p1pll->pll_in_min = @@ -797,6 +956,43 @@ return false; } +union igp_info { + struct _ATOM_INTEGRATED_SYSTEM_INFO info; + struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 info_2; +}; + +bool radeon_atombios_sideport_present(struct radeon_device *rdev) +{ + struct radeon_mode_info *mode_info = &rdev->mode_info; + int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo); + union igp_info *igp_info; + u8 frev, crev; + u16 data_offset; + + atom_parse_data_header(mode_info->atom_context, index, NULL, &frev, + &crev, &data_offset); + + igp_info = (union igp_info *)(mode_info->atom_context->bios + + data_offset); + + if (igp_info) { + switch (crev) { + case 1: + if (igp_info->info.ucMemoryType & 0xf0) + return true; + break; + case 2: + if (igp_info->info_2.ucMemoryType & 0x0f) + return true; + break; + default: + DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); + break; + } + } + return false; +} + bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder, struct radeon_encoder_int_tmds *tmds) { @@ -861,6 +1057,7 @@ struct _ATOM_SPREAD_SPECTRUM_INFO *ss_info; uint8_t frev, crev; struct radeon_atom_ss *ss = NULL; + int i; if (id > ATOM_MAX_SS_ENTRY) return NULL; @@ -878,12 +1075,18 @@ if (!ss) return NULL; - ss->percentage = le16_to_cpu(ss_info->asSS_Info[id].usSpreadSpectrumPercentage); - ss->type = ss_info->asSS_Info[id].ucSpreadSpectrumType; - ss->step = ss_info->asSS_Info[id].ucSS_Step; - ss->delay = ss_info->asSS_Info[id].ucSS_Delay; - ss->range = ss_info->asSS_Info[id].ucSS_Range; - ss->refdiv = ss_info->asSS_Info[id].ucRecommendedRef_Div; + for (i = 0; i < ATOM_MAX_SS_ENTRY; i++) { + if (ss_info->asSS_Info[i].ucSS_Id == id) { + ss->percentage = + le16_to_cpu(ss_info->asSS_Info[i].usSpreadSpectrumPercentage); + ss->type = ss_info->asSS_Info[i].ucSpreadSpectrumType; + ss->step = ss_info->asSS_Info[i].ucSS_Step; + ss->delay = ss_info->asSS_Info[i].ucSS_Delay; + ss->range = ss_info->asSS_Info[i].ucSS_Range; + ss->refdiv = ss_info->asSS_Info[i].ucRecommendedRef_Div; + break; + } + } } return ss; } @@ -901,7 +1104,7 @@ struct radeon_device *rdev = dev->dev_private; struct radeon_mode_info *mode_info = &rdev->mode_info; int index = GetIndexIntoMasterTable(DATA, LVDS_Info); - uint16_t data_offset; + uint16_t data_offset, misc; union lvds_info *lvds_info; uint8_t frev, crev; struct radeon_encoder_atom_dig *lvds = NULL; @@ -940,11 +1143,36 @@ lvds->panel_pwr_delay = le16_to_cpu(lvds_info->info.usOffDelayInMs); lvds->lvds_misc = lvds_info->info.ucLVDS_Misc; + + misc = le16_to_cpu(lvds_info->info.sLCDTiming.susModeMiscInfo.usAccess); + if (misc & ATOM_VSYNC_POLARITY) + lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC; + if (misc & ATOM_HSYNC_POLARITY) + lvds->native_mode.flags |= DRM_MODE_FLAG_NHSYNC; + if (misc & ATOM_COMPOSITESYNC) + lvds->native_mode.flags |= DRM_MODE_FLAG_CSYNC; + if (misc & ATOM_INTERLACE) + lvds->native_mode.flags |= DRM_MODE_FLAG_INTERLACE; + if (misc & ATOM_DOUBLE_CLOCK_MODE) + lvds->native_mode.flags |= DRM_MODE_FLAG_DBLSCAN; + /* set crtc values */ drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V); lvds->ss = radeon_atombios_get_ss_info(encoder, lvds_info->info.ucSS_Id); + if (ASIC_IS_AVIVO(rdev)) { + if (radeon_new_pll == 0) + lvds->pll_algo = PLL_ALGO_LEGACY; + else + lvds->pll_algo = PLL_ALGO_NEW; + } else { + if (radeon_new_pll == 1) + lvds->pll_algo = PLL_ALGO_NEW; + else + lvds->pll_algo = PLL_ALGO_LEGACY; + } + encoder->native_mode = lvds->native_mode; } return lvds; @@ -1074,6 +1302,61 @@ return true; } +enum radeon_tv_std +radeon_atombios_get_tv_info(struct radeon_device *rdev) +{ + struct radeon_mode_info *mode_info = &rdev->mode_info; + int index = GetIndexIntoMasterTable(DATA, AnalogTV_Info); + uint16_t data_offset; + uint8_t frev, crev; + struct _ATOM_ANALOG_TV_INFO *tv_info; + enum radeon_tv_std tv_std = TV_STD_NTSC; + + atom_parse_data_header(mode_info->atom_context, index, NULL, &frev, &crev, &data_offset); + + tv_info = (struct _ATOM_ANALOG_TV_INFO *)(mode_info->atom_context->bios + data_offset); + + switch (tv_info->ucTV_BootUpDefaultStandard) { + case ATOM_TV_NTSC: + tv_std = TV_STD_NTSC; + DRM_INFO("Default TV standard: NTSC\n"); + break; + case ATOM_TV_NTSCJ: + tv_std = TV_STD_NTSC_J; + DRM_INFO("Default TV standard: NTSC-J\n"); + break; + case ATOM_TV_PAL: + tv_std = TV_STD_PAL; + DRM_INFO("Default TV standard: PAL\n"); + break; + case ATOM_TV_PALM: + tv_std = TV_STD_PAL_M; + DRM_INFO("Default TV standard: PAL-M\n"); + break; + case ATOM_TV_PALN: + tv_std = TV_STD_PAL_N; + DRM_INFO("Default TV standard: PAL-N\n"); + break; + case ATOM_TV_PALCN: + tv_std = TV_STD_PAL_CN; + DRM_INFO("Default TV standard: PAL-CN\n"); + break; + case ATOM_TV_PAL60: + tv_std = TV_STD_PAL_60; + DRM_INFO("Default TV standard: PAL-60\n"); + break; + case ATOM_TV_SECAM: + tv_std = TV_STD_SECAM; + DRM_INFO("Default TV standard: SECAM\n"); + break; + default: + tv_std = TV_STD_NTSC; + DRM_INFO("Unknown TV standard; defaulting to NTSC\n"); + break; + } + return tv_std; +} + struct radeon_encoder_tv_dac * radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder) { @@ -1109,6 +1392,7 @@ dac = dac_info->ucDAC2_NTSC_DAC_Adjustment; tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); + tv_dac->tv_std = radeon_atombios_get_tv_info(rdev); } return tv_dac; } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r100.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r100.c @@ -65,6 +65,96 @@ * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ +/* hpd for digital panel detect/disconnect */ +bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) +{ + bool connected = false; + + switch (hpd) { + case RADEON_HPD_1: + if (RREG32(RADEON_FP_GEN_CNTL) & RADEON_FP_DETECT_SENSE) + connected = true; + break; + case RADEON_HPD_2: + if (RREG32(RADEON_FP2_GEN_CNTL) & RADEON_FP2_DETECT_SENSE) + connected = true; + break; + default: + break; + } + return connected; +} + +void r100_hpd_set_polarity(struct radeon_device *rdev, + enum radeon_hpd_id hpd) +{ + u32 tmp; + bool connected = r100_hpd_sense(rdev, hpd); + + switch (hpd) { + case RADEON_HPD_1: + tmp = RREG32(RADEON_FP_GEN_CNTL); + if (connected) + tmp &= ~RADEON_FP_DETECT_INT_POL; + else + tmp |= RADEON_FP_DETECT_INT_POL; + WREG32(RADEON_FP_GEN_CNTL, tmp); + break; + case RADEON_HPD_2: + tmp = RREG32(RADEON_FP2_GEN_CNTL); + if (connected) + tmp &= ~RADEON_FP2_DETECT_INT_POL; + else + tmp |= RADEON_FP2_DETECT_INT_POL; + WREG32(RADEON_FP2_GEN_CNTL, tmp); + break; + default: + break; + } +} + +void r100_hpd_init(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + struct drm_connector *connector; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + rdev->irq.hpd[0] = true; + break; + case RADEON_HPD_2: + rdev->irq.hpd[1] = true; + break; + default: + break; + } + } + if (rdev->irq.installed) + r100_irq_set(rdev); +} + +void r100_hpd_fini(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + struct drm_connector *connector; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + switch (radeon_connector->hpd.hpd) { + case RADEON_HPD_1: + rdev->irq.hpd[0] = false; + break; + case RADEON_HPD_2: + rdev->irq.hpd[1] = false; + break; + default: + break; + } + } +} + /* * PCI GART */ @@ -94,6 +184,15 @@ return radeon_gart_table_ram_alloc(rdev); } +/* required on r1xx, r2xx, r300, r(v)350, r420/r481, rs400/rs480 */ +void r100_enable_bm(struct radeon_device *rdev) +{ + uint32_t tmp; + /* Enable bus mastering */ + tmp = RREG32(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS; + WREG32(RADEON_BUS_CNTL, tmp); +} + int r100_pci_gart_enable(struct radeon_device *rdev) { uint32_t tmp; @@ -105,9 +204,6 @@ WREG32(RADEON_AIC_LO_ADDR, rdev->mc.gtt_location); tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1; WREG32(RADEON_AIC_HI_ADDR, tmp); - /* Enable bus mastering */ - tmp = RREG32(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS; - WREG32(RADEON_BUS_CNTL, tmp); /* set PCI GART page-table base address */ WREG32(RADEON_AIC_PT_BASE, rdev->gart.table_addr); tmp = RREG32(RADEON_AIC_CNTL) | RADEON_PCIGART_TRANSLATE_EN; @@ -148,6 +244,11 @@ { uint32_t tmp = 0; + if (!rdev->irq.installed) { + WARN(1, "Can't enable IRQ/MSI because no handler is installed.\n"); + WREG32(R_000040_GEN_INT_CNTL, 0); + return -EINVAL; + } if (rdev->irq.sw_int) { tmp |= RADEON_SW_INT_ENABLE; } @@ -157,6 +258,12 @@ if (rdev->irq.crtc_vblank_int[1]) { tmp |= RADEON_CRTC2_VBLANK_MASK; } + if (rdev->irq.hpd[0]) { + tmp |= RADEON_FP_DETECT_MASK; + } + if (rdev->irq.hpd[1]) { + tmp |= RADEON_FP2_DETECT_MASK; + } WREG32(RADEON_GEN_INT_CNTL, tmp); return 0; } @@ -175,8 +282,9 @@ static inline uint32_t r100_irq_ack(struct radeon_device *rdev) { uint32_t irqs = RREG32(RADEON_GEN_INT_STATUS); - uint32_t irq_mask = RADEON_SW_INT_TEST | RADEON_CRTC_VBLANK_STAT | - RADEON_CRTC2_VBLANK_STAT; + uint32_t irq_mask = RADEON_SW_INT_TEST | + RADEON_CRTC_VBLANK_STAT | RADEON_CRTC2_VBLANK_STAT | + RADEON_FP_DETECT_STAT | RADEON_FP2_DETECT_STAT; if (irqs) { WREG32(RADEON_GEN_INT_STATUS, irqs); @@ -187,6 +295,7 @@ int r100_irq_process(struct radeon_device *rdev) { uint32_t status, msi_rearm; + bool queue_hotplug = false; status = r100_irq_ack(rdev); if (!status) { @@ -207,8 +316,18 @@ if (status & RADEON_CRTC2_VBLANK_STAT) { drm_handle_vblank(rdev->ddev, 1); } + if (status & RADEON_FP_DETECT_STAT) { + queue_hotplug = true; + DRM_DEBUG("HPD1\n"); + } + if (status & RADEON_FP2_DETECT_STAT) { + queue_hotplug = true; + DRM_DEBUG("HPD2\n"); + } status = r100_irq_ack(rdev); } + if (queue_hotplug) + queue_work(rdev->wq, &rdev->hotplug_work); if (rdev->msi_enabled) { switch (rdev->family) { case CHIP_RS400: @@ -235,14 +354,25 @@ return RREG32(RADEON_CRTC2_CRNT_FRAME); } +/* Who ever call radeon_fence_emit should call ring_lock and ask + * for enough space (today caller are ib schedule and buffer move) */ void r100_fence_ring_emit(struct radeon_device *rdev, struct radeon_fence *fence) { - /* Who ever call radeon_fence_emit should call ring_lock and ask - * for enough space (today caller are ib schedule and buffer move) */ + /* We have to make sure that caches are flushed before + * CPU might read something from VRAM. */ + radeon_ring_write(rdev, PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0)); + radeon_ring_write(rdev, RADEON_RB3D_DC_FLUSH_ALL); + radeon_ring_write(rdev, PACKET0(RADEON_RB3D_ZCACHE_CTLSTAT, 0)); + radeon_ring_write(rdev, RADEON_RB3D_ZC_FLUSH_ALL); /* Wait until IDLE & CLEAN */ radeon_ring_write(rdev, PACKET0(0x1720, 0)); radeon_ring_write(rdev, (1 << 16) | (1 << 17)); + radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); + radeon_ring_write(rdev, rdev->config.r100.hdp_cntl | + RADEON_HDP_READ_BUFFER_INVALIDATE); + radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); + radeon_ring_write(rdev, rdev->config.r100.hdp_cntl); /* Emit fence sequence & fire IRQ */ radeon_ring_write(rdev, PACKET0(rdev->fence_drv.scratch_reg, 0)); radeon_ring_write(rdev, fence->seq); @@ -255,24 +385,27 @@ int r; if (rdev->wb.wb_obj == NULL) { - r = radeon_object_create(rdev, NULL, RADEON_GPU_PAGE_SIZE, - true, - RADEON_GEM_DOMAIN_GTT, - false, &rdev->wb.wb_obj); + r = radeon_bo_create(rdev, NULL, RADEON_GPU_PAGE_SIZE, true, + RADEON_GEM_DOMAIN_GTT, + &rdev->wb.wb_obj); if (r) { - DRM_ERROR("radeon: failed to create WB buffer (%d).\n", r); + dev_err(rdev->dev, "(%d) create WB buffer failed\n", r); return r; } - r = radeon_object_pin(rdev->wb.wb_obj, - RADEON_GEM_DOMAIN_GTT, - &rdev->wb.gpu_addr); + r = radeon_bo_reserve(rdev->wb.wb_obj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rdev->wb.wb_obj, RADEON_GEM_DOMAIN_GTT, + &rdev->wb.gpu_addr); if (r) { - DRM_ERROR("radeon: failed to pin WB buffer (%d).\n", r); + dev_err(rdev->dev, "(%d) pin WB buffer failed\n", r); + radeon_bo_unreserve(rdev->wb.wb_obj); return r; } - r = radeon_object_kmap(rdev->wb.wb_obj, (void **)&rdev->wb.wb); + r = radeon_bo_kmap(rdev->wb.wb_obj, (void **)&rdev->wb.wb); + radeon_bo_unreserve(rdev->wb.wb_obj); if (r) { - DRM_ERROR("radeon: failed to map WB buffer (%d).\n", r); + dev_err(rdev->dev, "(%d) map WB buffer failed\n", r); return r; } } @@ -290,11 +423,19 @@ void r100_wb_fini(struct radeon_device *rdev) { + int r; + r100_wb_disable(rdev); if (rdev->wb.wb_obj) { - radeon_object_kunmap(rdev->wb.wb_obj); - radeon_object_unpin(rdev->wb.wb_obj); - radeon_object_unref(&rdev->wb.wb_obj); + r = radeon_bo_reserve(rdev->wb.wb_obj, false); + if (unlikely(r != 0)) { + dev_err(rdev->dev, "(%d) can't finish WB\n", r); + return; + } + radeon_bo_kunmap(rdev->wb.wb_obj); + radeon_bo_unpin(rdev->wb.wb_obj); + radeon_bo_unreserve(rdev->wb.wb_obj); + radeon_bo_unref(&rdev->wb.wb_obj); rdev->wb.wb = NULL; rdev->wb.wb_obj = NULL; } @@ -1250,7 +1391,6 @@ case RADEON_TXFORMAT_ARGB4444: case RADEON_TXFORMAT_VYUY422: case RADEON_TXFORMAT_YVYU422: - case RADEON_TXFORMAT_DXT1: case RADEON_TXFORMAT_SHADOW16: case RADEON_TXFORMAT_LDUDV655: case RADEON_TXFORMAT_DUDV88: @@ -1258,12 +1398,19 @@ break; case RADEON_TXFORMAT_ARGB8888: case RADEON_TXFORMAT_RGBA8888: - case RADEON_TXFORMAT_DXT23: - case RADEON_TXFORMAT_DXT45: case RADEON_TXFORMAT_SHADOW32: case RADEON_TXFORMAT_LDUDUV8888: track->textures[i].cpp = 4; break; + case RADEON_TXFORMAT_DXT1: + track->textures[i].cpp = 1; + track->textures[i].compress_format = R100_TRACK_COMP_DXT1; + break; + case RADEON_TXFORMAT_DXT23: + case RADEON_TXFORMAT_DXT45: + track->textures[i].cpp = 1; + track->textures[i].compress_format = R100_TRACK_COMP_DXT35; + break; } track->textures[i].cube_info[4].width = 1 << ((idx_value >> 16) & 0xf); track->textures[i].cube_info[4].height = 1 << ((idx_value >> 20) & 0xf); @@ -1288,17 +1435,17 @@ int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p, struct radeon_cs_packet *pkt, - struct radeon_object *robj) + struct radeon_bo *robj) { unsigned idx; u32 value; idx = pkt->idx + 1; value = radeon_get_ib_value(p, idx + 2); - if ((value + 1) > radeon_object_size(robj)) { + if ((value + 1) > radeon_bo_size(robj)) { DRM_ERROR("[drm] Buffer too small for PACKET3 INDX_BUFFER " "(need %u have %lu) !\n", value + 1, - radeon_object_size(robj)); + radeon_bo_size(robj)); return -EINVAL; } return 0; @@ -1363,6 +1510,7 @@ DRM_ERROR("PRIM_WALK must be 3 for IMMD draw\n"); return -EINVAL; } + track->vtx_size = r100_get_vtx_size(radeon_get_ib_value(p, idx + 0)); track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1); track->immd_dwords = pkt->count - 1; r = r100_cs_track_check(p->rdev, track); @@ -1650,6 +1798,17 @@ return 0; } +void r100_set_common_regs(struct radeon_device *rdev) +{ + /* set these so they don't interfere with anything */ + WREG32(RADEON_OV0_SCALE_CNTL, 0); + WREG32(RADEON_SUBPIC_CNTL, 0); + WREG32(RADEON_VIPH_CONTROL, 0); + WREG32(RADEON_I2C_CNTL_1, 0); + WREG32(RADEON_DVI_I2C_CNTL_1, 0); + WREG32(RADEON_CAP0_TRIG_CNTL, 0); + WREG32(RADEON_CAP1_TRIG_CNTL, 0); +} /* * VRAM info @@ -2588,13 +2747,14 @@ DRM_ERROR("coordinate type %d\n", t->tex_coord_type); DRM_ERROR("width round to power of 2 %d\n", t->roundup_w); DRM_ERROR("height round to power of 2 %d\n", t->roundup_h); + DRM_ERROR("compress format %d\n", t->compress_format); } static int r100_cs_track_cube(struct radeon_device *rdev, struct r100_cs_track *track, unsigned idx) { unsigned face, w, h; - struct radeon_object *cube_robj; + struct radeon_bo *cube_robj; unsigned long size; for (face = 0; face < 5; face++) { @@ -2607,9 +2767,9 @@ size += track->textures[idx].cube_info[face].offset; - if (size > radeon_object_size(cube_robj)) { + if (size > radeon_bo_size(cube_robj)) { DRM_ERROR("Cube texture offset greater than object size %lu %lu\n", - size, radeon_object_size(cube_robj)); + size, radeon_bo_size(cube_robj)); r100_cs_track_texture_print(&track->textures[idx]); return -1; } @@ -2617,10 +2777,40 @@ return 0; } +static int r100_track_compress_size(int compress_format, int w, int h) +{ + int block_width, block_height, block_bytes; + int wblocks, hblocks; + int min_wblocks; + int sz; + + block_width = 4; + block_height = 4; + + switch (compress_format) { + case R100_TRACK_COMP_DXT1: + block_bytes = 8; + min_wblocks = 4; + break; + default: + case R100_TRACK_COMP_DXT35: + block_bytes = 16; + min_wblocks = 2; + break; + } + + hblocks = (h + block_height - 1) / block_height; + wblocks = (w + block_width - 1) / block_width; + if (wblocks < min_wblocks) + wblocks = min_wblocks; + sz = wblocks * hblocks * block_bytes; + return sz; +} + static int r100_cs_track_texture_check(struct radeon_device *rdev, struct r100_cs_track *track) { - struct radeon_object *robj; + struct radeon_bo *robj; unsigned long size; unsigned u, i, w, h; int ret; @@ -2654,9 +2844,15 @@ h = h / (1 << i); if (track->textures[u].roundup_h) h = roundup_pow_of_two(h); - size += w * h; + if (track->textures[u].compress_format) { + + size += r100_track_compress_size(track->textures[u].compress_format, w, h); + /* compressed textures are block based */ + } else + size += w * h; } size *= track->textures[u].cpp; + switch (track->textures[u].tex_coord_type) { case 0: break; @@ -2676,9 +2872,9 @@ "%u\n", track->textures[u].tex_coord_type, u); return -EINVAL; } - if (size > radeon_object_size(robj)) { + if (size > radeon_bo_size(robj)) { DRM_ERROR("Texture of unit %u needs %lu bytes but is " - "%lu\n", u, size, radeon_object_size(robj)); + "%lu\n", u, size, radeon_bo_size(robj)); r100_cs_track_texture_print(&track->textures[u]); return -EINVAL; } @@ -2695,15 +2891,19 @@ for (i = 0; i < track->num_cb; i++) { if (track->cb[i].robj == NULL) { + if (!(track->fastfill || track->color_channel_mask || + track->blend_read_enable)) { + continue; + } DRM_ERROR("[drm] No buffer for color buffer %d !\n", i); return -EINVAL; } size = track->cb[i].pitch * track->cb[i].cpp * track->maxy; size += track->cb[i].offset; - if (size > radeon_object_size(track->cb[i].robj)) { + if (size > radeon_bo_size(track->cb[i].robj)) { DRM_ERROR("[drm] Buffer too small for color buffer %d " "(need %lu have %lu) !\n", i, size, - radeon_object_size(track->cb[i].robj)); + radeon_bo_size(track->cb[i].robj)); DRM_ERROR("[drm] color buffer %d (%u %u %u %u)\n", i, track->cb[i].pitch, track->cb[i].cpp, track->cb[i].offset, track->maxy); @@ -2717,10 +2917,10 @@ } size = track->zb.pitch * track->zb.cpp * track->maxy; size += track->zb.offset; - if (size > radeon_object_size(track->zb.robj)) { + if (size > radeon_bo_size(track->zb.robj)) { DRM_ERROR("[drm] Buffer too small for z buffer " "(need %lu have %lu) !\n", size, - radeon_object_size(track->zb.robj)); + radeon_bo_size(track->zb.robj)); DRM_ERROR("[drm] zbuffer (%u %u %u %u)\n", track->zb.pitch, track->zb.cpp, track->zb.offset, track->maxy); @@ -2738,11 +2938,12 @@ "bound\n", prim_walk, i); return -EINVAL; } - if (size > radeon_object_size(track->arrays[i].robj)) { - DRM_ERROR("(PW %u) Vertex array %u need %lu dwords " - "have %lu dwords\n", prim_walk, i, - size >> 2, - radeon_object_size(track->arrays[i].robj) >> 2); + if (size > radeon_bo_size(track->arrays[i].robj)) { + dev_err(rdev->dev, "(PW %u) Vertex array %u " + "need %lu dwords have %lu dwords\n", + prim_walk, i, size >> 2, + radeon_bo_size(track->arrays[i].robj) + >> 2); DRM_ERROR("Max indices %u\n", track->max_indx); return -EINVAL; } @@ -2756,10 +2957,12 @@ "bound\n", prim_walk, i); return -EINVAL; } - if (size > radeon_object_size(track->arrays[i].robj)) { - DRM_ERROR("(PW %u) Vertex array %u need %lu dwords " - "have %lu dwords\n", prim_walk, i, size >> 2, - radeon_object_size(track->arrays[i].robj) >> 2); + if (size > radeon_bo_size(track->arrays[i].robj)) { + dev_err(rdev->dev, "(PW %u) Vertex array %u " + "need %lu dwords have %lu dwords\n", + prim_walk, i, size >> 2, + radeon_bo_size(track->arrays[i].robj) + >> 2); return -EINVAL; } } @@ -2821,6 +3024,7 @@ track->arrays[i].esize = 0x7F; } for (i = 0; i < track->num_texture; i++) { + track->textures[i].compress_format = R100_TRACK_COMP_NONE; track->textures[i].pitch = 16536; track->textures[i].width = 16536; track->textures[i].height = 16536; @@ -3101,6 +3305,9 @@ { int r; + /* set common regs */ + r100_set_common_regs(rdev); + /* program mc */ r100_mc_program(rdev); /* Resume clock */ r100_clock_startup(rdev); @@ -3108,14 +3315,15 @@ r100_gpu_init(rdev); /* Initialize GART (initialize after TTM so we can allocate * memory through TTM but finalize after TTM) */ + r100_enable_bm(rdev); if (rdev->flags & RADEON_IS_PCI) { r = r100_pci_gart_enable(rdev); if (r) return r; } /* Enable IRQ */ - rdev->irq.sw_int = true; r100_irq_set(rdev); + rdev->config.r100.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -3150,6 +3358,8 @@ radeon_combios_asic_init(rdev->ddev); /* Resume clock after posting */ r100_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return r100_startup(rdev); } @@ -3165,16 +3375,16 @@ void r100_fini(struct radeon_device *rdev) { - r100_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); radeon_gem_fini(rdev); if (rdev->flags & RADEON_IS_PCI) r100_pci_gart_fini(rdev); + radeon_agp_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -3195,9 +3405,7 @@ if (rdev->flags & RADEON_IS_AGP) { r = radeon_agp_init(rdev); if (r) { - printk(KERN_WARNING "[drm] Disabling AGP\n"); - rdev->flags &= ~RADEON_IS_AGP; - rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; + radeon_agp_disable(rdev); } else { rdev->mc.gtt_location = rdev->mc.agp_base; } @@ -3242,14 +3450,14 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - radeon_combios_asic_init(rdev->ddev); - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; /* Set asic errata */ r100_errata(rdev); /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); + /* Initialize power management */ + radeon_pm_init(rdev); /* Get vram informations */ r100_vram_info(rdev); /* Initialize memory controller (also test AGP) */ @@ -3264,7 +3472,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; if (rdev->flags & RADEON_IS_PCI) { @@ -3278,13 +3486,12 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - r100_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); + radeon_irq_kms_fini(rdev); if (rdev->flags & RADEON_IS_PCI) r100_pci_gart_fini(rdev); - radeon_irq_kms_fini(rdev); rdev->accel_working = false; } return 0; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r300_reg.h +++ linux-2.6.32/drivers/gpu/drm/radeon/r300_reg.h @@ -900,6 +900,7 @@ # define R300_TX_FORMAT_FL_I32 0x1B # define R300_TX_FORMAT_FL_I32A32 0x1C # define R300_TX_FORMAT_FL_R32G32B32A32 0x1D +# define R300_TX_FORMAT_ATI2N 0x1F /* alpha modes, convenience mostly */ /* if you have alpha, pick constant appropriate to the number of channels (1 for I8, 2 for I8A8, 4 for R8G8B8A8, etc */ --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r520.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r520.c @@ -185,8 +185,8 @@ return r; } /* Enable IRQ */ - rdev->irq.sw_int = true; rs600_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -221,6 +221,8 @@ atom_asic_init(rdev->mode_info.atom_context); /* Resume clock after posting */ rv515_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return r520_startup(rdev); } @@ -254,6 +256,9 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; + if (!radeon_card_posted(rdev) && rdev->bios) { DRM_INFO("GPU not posted. posting now...\n"); atom_asic_init(rdev->mode_info.atom_context); @@ -277,7 +282,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; r = rv370_pcie_gart_init(rdev); @@ -289,13 +294,12 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - rv515_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); + radeon_irq_kms_fini(rdev); rv370_pcie_gart_fini(rdev); radeon_agp_fini(rdev); - radeon_irq_kms_fini(rdev); rdev->accel_working = false; } return 0; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_state.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_state.c @@ -1950,7 +1950,7 @@ * Note that refcount can be at most 2, since during a free refcount=3 * might mean we have to allocate a new surface which might not always * be available. - * For example : we allocate three contigous surfaces ABC. If B is + * For example : we allocate three contiguous surfaces ABC. If B is * freed, we suddenly need two surfaces to store A and C, which might * not always be available. */ --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_object.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_object.h @@ -28,19 +28,146 @@ #ifndef __RADEON_OBJECT_H__ #define __RADEON_OBJECT_H__ -#include -#include -#include -#include +#include +#include "radeon.h" -/* - * TTM. +/** + * radeon_mem_type_to_domain - return domain corresponding to mem_type + * @mem_type: ttm memory type + * + * Returns corresponding domain of the ttm mem_type */ -struct radeon_mman { - struct ttm_bo_global_ref bo_global_ref; - struct ttm_global_reference mem_global_ref; - bool mem_global_referenced; - struct ttm_bo_device bdev; -}; +static inline unsigned radeon_mem_type_to_domain(u32 mem_type) +{ + switch (mem_type) { + case TTM_PL_VRAM: + return RADEON_GEM_DOMAIN_VRAM; + case TTM_PL_TT: + return RADEON_GEM_DOMAIN_GTT; + case TTM_PL_SYSTEM: + return RADEON_GEM_DOMAIN_CPU; + default: + break; + } + return 0; +} +/** + * radeon_bo_reserve - reserve bo + * @bo: bo structure + * @no_wait: don't sleep while trying to reserve (return -EBUSY) + * + * Returns: + * -EBUSY: buffer is busy and @no_wait is true + * -ERESTARTSYS: A wait for the buffer to become unreserved was interrupted by + * a signal. Release all buffer reservations and return to user-space. + */ +static inline int radeon_bo_reserve(struct radeon_bo *bo, bool no_wait) +{ + int r; + + r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0); + if (unlikely(r != 0)) { + if (r != -ERESTARTSYS) + dev_err(bo->rdev->dev, "%p reserve failed\n", bo); + return r; + } + return 0; +} + +static inline void radeon_bo_unreserve(struct radeon_bo *bo) +{ + ttm_bo_unreserve(&bo->tbo); +} + +/** + * radeon_bo_gpu_offset - return GPU offset of bo + * @bo: radeon object for which we query the offset + * + * Returns current GPU offset of the object. + * + * Note: object should either be pinned or reserved when calling this + * function, it might be usefull to add check for this for debugging. + */ +static inline u64 radeon_bo_gpu_offset(struct radeon_bo *bo) +{ + return bo->tbo.offset; +} + +static inline unsigned long radeon_bo_size(struct radeon_bo *bo) +{ + return bo->tbo.num_pages << PAGE_SHIFT; +} + +static inline bool radeon_bo_is_reserved(struct radeon_bo *bo) +{ + return !!atomic_read(&bo->tbo.reserved); +} + +/** + * radeon_bo_mmap_offset - return mmap offset of bo + * @bo: radeon object for which we query the offset + * + * Returns mmap offset of the object. + * + * Note: addr_space_offset is constant after ttm bo init thus isn't protected + * by any lock. + */ +static inline u64 radeon_bo_mmap_offset(struct radeon_bo *bo) +{ + return bo->tbo.addr_space_offset; +} + +static inline int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type, + bool no_wait) +{ + int r; + + r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0); + if (unlikely(r != 0)) { + if (r != -ERESTARTSYS) + dev_err(bo->rdev->dev, "%p reserve failed for wait\n", bo); + return r; + } + spin_lock(&bo->tbo.lock); + if (mem_type) + *mem_type = bo->tbo.mem.mem_type; + if (bo->tbo.sync_obj) + r = ttm_bo_wait(&bo->tbo, true, true, no_wait); + spin_unlock(&bo->tbo.lock); + ttm_bo_unreserve(&bo->tbo); + return r; +} + +extern int radeon_bo_create(struct radeon_device *rdev, + struct drm_gem_object *gobj, unsigned long size, + bool kernel, u32 domain, + struct radeon_bo **bo_ptr); +extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr); +extern void radeon_bo_kunmap(struct radeon_bo *bo); +extern void radeon_bo_unref(struct radeon_bo **bo); +extern int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr); +extern int radeon_bo_unpin(struct radeon_bo *bo); +extern int radeon_bo_evict_vram(struct radeon_device *rdev); +extern void radeon_bo_force_delete(struct radeon_device *rdev); +extern int radeon_bo_init(struct radeon_device *rdev); +extern void radeon_bo_fini(struct radeon_device *rdev); +extern void radeon_bo_list_add_object(struct radeon_bo_list *lobj, + struct list_head *head); +extern int radeon_bo_list_reserve(struct list_head *head); +extern void radeon_bo_list_unreserve(struct list_head *head); +extern int radeon_bo_list_validate(struct list_head *head); +extern void radeon_bo_list_fence(struct list_head *head, void *fence); +extern int radeon_bo_fbdev_mmap(struct radeon_bo *bo, + struct vm_area_struct *vma); +extern int radeon_bo_set_tiling_flags(struct radeon_bo *bo, + u32 tiling_flags, u32 pitch); +extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo, + u32 *tiling_flags, u32 *pitch); +extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, + bool force_drop); +extern void radeon_bo_move_notify(struct ttm_buffer_object *bo, + struct ttm_mem_reg *mem); +extern void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo); +extern int radeon_bo_get_surface_reg(struct radeon_bo *bo); #endif --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r300_cmdbuf.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r300_cmdbuf.c @@ -990,7 +990,7 @@ int sz; int addr; int type; - int clamp; + int isclamp; int stride; RING_LOCALS; @@ -999,10 +999,10 @@ addr = ((header.r500fp.adrhi_flags & 1) << 8) | header.r500fp.adrlo; type = !!(header.r500fp.adrhi_flags & R500FP_CONSTANT_TYPE); - clamp = !!(header.r500fp.adrhi_flags & R500FP_CONSTANT_CLAMP); + isclamp = !!(header.r500fp.adrhi_flags & R500FP_CONSTANT_CLAMP); addr |= (type << 16); - addr |= (clamp << 17); + addr |= (isclamp << 17); stride = type ? 4 : 6; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600_audio.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r600_audio.c @@ -0,0 +1,266 @@ +/* + * Copyright 2008 Advanced Micro Devices, Inc. + * Copyright 2008 Red Hat Inc. + * Copyright 2009 Christian König. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Christian König + */ +#include "drmP.h" +#include "radeon.h" +#include "radeon_reg.h" +#include "atom.h" + +#define AUDIO_TIMER_INTERVALL 100 /* 1/10 sekund should be enough */ + +/* + * check if the chipset is supported + */ +static int r600_audio_chipset_supported(struct radeon_device *rdev) +{ + return (rdev->family >= CHIP_R600 && rdev->family < CHIP_RV710) + || rdev->family == CHIP_RS600 + || rdev->family == CHIP_RS690 + || rdev->family == CHIP_RS740; +} + +/* + * current number of channels + */ +static int r600_audio_channels(struct radeon_device *rdev) +{ + return (RREG32(R600_AUDIO_RATE_BPS_CHANNEL) & 0x7) + 1; +} + +/* + * current bits per sample + */ +static int r600_audio_bits_per_sample(struct radeon_device *rdev) +{ + uint32_t value = (RREG32(R600_AUDIO_RATE_BPS_CHANNEL) & 0xF0) >> 4; + switch (value) { + case 0x0: return 8; + case 0x1: return 16; + case 0x2: return 20; + case 0x3: return 24; + case 0x4: return 32; + } + + DRM_ERROR("Unknown bits per sample 0x%x using 16 instead.\n", (int)value); + + return 16; +} + +/* + * current sampling rate in HZ + */ +static int r600_audio_rate(struct radeon_device *rdev) +{ + uint32_t value = RREG32(R600_AUDIO_RATE_BPS_CHANNEL); + uint32_t result; + + if (value & 0x4000) + result = 44100; + else + result = 48000; + + result *= ((value >> 11) & 0x7) + 1; + result /= ((value >> 8) & 0x7) + 1; + + return result; +} + +/* + * iec 60958 status bits + */ +static uint8_t r600_audio_status_bits(struct radeon_device *rdev) +{ + return RREG32(R600_AUDIO_STATUS_BITS) & 0xff; +} + +/* + * iec 60958 category code + */ +static uint8_t r600_audio_category_code(struct radeon_device *rdev) +{ + return (RREG32(R600_AUDIO_STATUS_BITS) >> 8) & 0xff; +} + +/* + * update all hdmi interfaces with current audio parameters + */ +static void r600_audio_update_hdmi(unsigned long param) +{ + struct radeon_device *rdev = (struct radeon_device *)param; + struct drm_device *dev = rdev->ddev; + + int channels = r600_audio_channels(rdev); + int rate = r600_audio_rate(rdev); + int bps = r600_audio_bits_per_sample(rdev); + uint8_t status_bits = r600_audio_status_bits(rdev); + uint8_t category_code = r600_audio_category_code(rdev); + + struct drm_encoder *encoder; + int changes = 0; + + changes |= channels != rdev->audio_channels; + changes |= rate != rdev->audio_rate; + changes |= bps != rdev->audio_bits_per_sample; + changes |= status_bits != rdev->audio_status_bits; + changes |= category_code != rdev->audio_category_code; + + if (changes) { + rdev->audio_channels = channels; + rdev->audio_rate = rate; + rdev->audio_bits_per_sample = bps; + rdev->audio_status_bits = status_bits; + rdev->audio_category_code = category_code; + } + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + if (changes || r600_hdmi_buffer_status_changed(encoder)) + r600_hdmi_update_audio_settings( + encoder, channels, + rate, bps, status_bits, + category_code); + } + + mod_timer(&rdev->audio_timer, + jiffies + msecs_to_jiffies(AUDIO_TIMER_INTERVALL)); +} + +/* + * initialize the audio vars and register the update timer + */ +int r600_audio_init(struct radeon_device *rdev) +{ + if (!r600_audio_chipset_supported(rdev)) + return 0; + + DRM_INFO("%s audio support", radeon_audio ? "Enabling" : "Disabling"); + WREG32_P(R600_AUDIO_ENABLE, radeon_audio ? 0x81000000 : 0x0, ~0x81000000); + + rdev->audio_channels = -1; + rdev->audio_rate = -1; + rdev->audio_bits_per_sample = -1; + rdev->audio_status_bits = 0; + rdev->audio_category_code = 0; + + setup_timer( + &rdev->audio_timer, + r600_audio_update_hdmi, + (unsigned long)rdev); + + mod_timer(&rdev->audio_timer, jiffies + 1); + + return 0; +} + +/* + * determin how the encoders and audio interface is wired together + */ +int r600_audio_tmds_index(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct drm_encoder *other; + + switch (radeon_encoder->encoder_id) { + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: + return 0; + + case ENCODER_OBJECT_ID_INTERNAL_LVTM1: + /* special case check if an TMDS1 is present */ + list_for_each_entry(other, &dev->mode_config.encoder_list, head) { + if (to_radeon_encoder(other)->encoder_id == + ENCODER_OBJECT_ID_INTERNAL_TMDS1) + return 1; + } + return 0; + + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: + return 1; + + default: + DRM_ERROR("Unsupported encoder type 0x%02X\n", + radeon_encoder->encoder_id); + return -1; + } +} + +/* + * atach the audio codec to the clock source of the encoder + */ +void r600_audio_set_clock(struct drm_encoder *encoder, int clock) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + int base_rate = 48000; + + switch (radeon_encoder->encoder_id) { + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: + case ENCODER_OBJECT_ID_INTERNAL_LVTM1: + WREG32_P(R600_AUDIO_TIMING, 0, ~0x301); + break; + + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: + case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: + WREG32_P(R600_AUDIO_TIMING, 0x100, ~0x301); + break; + + default: + DRM_ERROR("Unsupported encoder type 0x%02X\n", + radeon_encoder->encoder_id); + return; + } + + switch (r600_audio_tmds_index(encoder)) { + case 0: + WREG32(R600_AUDIO_PLL1_MUL, base_rate*50); + WREG32(R600_AUDIO_PLL1_DIV, clock*100); + WREG32(R600_AUDIO_CLK_SRCSEL, 0); + break; + + case 1: + WREG32(R600_AUDIO_PLL2_MUL, base_rate*50); + WREG32(R600_AUDIO_PLL2_DIV, clock*100); + WREG32(R600_AUDIO_CLK_SRCSEL, 1); + break; + } +} + +/* + * release the audio timer + * TODO: How to do this correctly on SMP systems? + */ +void r600_audio_fini(struct radeon_device *rdev) +{ + if (!r600_audio_chipset_supported(rdev)) + return; + + del_timer(&rdev->audio_timer); + WREG32_P(R600_AUDIO_ENABLE, 0x0, ~0x81000000); +} --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600_cs.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r600_cs.c @@ -36,6 +36,10 @@ typedef int (*next_reloc_t)(struct radeon_cs_parser*, struct radeon_cs_reloc**); static next_reloc_t r600_cs_packet_next_reloc = &r600_cs_packet_next_reloc_mm; +struct r600_cs_track { + u32 cb_color0_base_last; +}; + /** * r600_cs_packet_parse() - parse cp packet and point ib index to next packet * @parser: parser structure holding parsing context. @@ -170,13 +174,35 @@ idx, relocs_chunk->length_dw); return -EINVAL; } - *cs_reloc = &p->relocs[0]; + *cs_reloc = p->relocs; (*cs_reloc)->lobj.gpu_offset = (u64)relocs_chunk->kdata[idx + 3] << 32; (*cs_reloc)->lobj.gpu_offset |= relocs_chunk->kdata[idx + 0]; return 0; } /** + * r600_cs_packet_next_is_pkt3_nop() - test if next packet is packet3 nop for reloc + * @parser: parser structure holding parsing context. + * + * Check next packet is relocation packet3, do bo validation and compute + * GPU offset using the provided start. + **/ +static inline int r600_cs_packet_next_is_pkt3_nop(struct radeon_cs_parser *p) +{ + struct radeon_cs_packet p3reloc; + int r; + + r = r600_cs_packet_parse(p, &p3reloc, p->idx); + if (r) { + return 0; + } + if (p3reloc.type != PACKET_TYPE3 || p3reloc.opcode != PACKET3_NOP) { + return 0; + } + return 1; +} + +/** * r600_cs_packet_next_vline() - parse userspace VLINE packet * @parser: parser structure holding parsing context. * @@ -337,6 +363,7 @@ struct radeon_cs_packet *pkt) { struct radeon_cs_reloc *reloc; + struct r600_cs_track *track; volatile u32 *ib; unsigned idx; unsigned i; @@ -344,6 +371,7 @@ int r; u32 idx_value; + track = (struct r600_cs_track *)p->track; ib = p->ib->ptr; idx = pkt->idx + 1; idx_value = radeon_get_ib_value(p, idx); @@ -503,9 +531,60 @@ for (i = 0; i < pkt->count; i++) { reg = start_reg + (4 * i); switch (reg) { + /* This register were added late, there is userspace + * which does provide relocation for those but set + * 0 offset. In order to avoid breaking old userspace + * we detect this and set address to point to last + * CB_COLOR0_BASE, note that if userspace doesn't set + * CB_COLOR0_BASE before this register we will report + * error. Old userspace always set CB_COLOR0_BASE + * before any of this. + */ + case R_0280E0_CB_COLOR0_FRAG: + case R_0280E4_CB_COLOR1_FRAG: + case R_0280E8_CB_COLOR2_FRAG: + case R_0280EC_CB_COLOR3_FRAG: + case R_0280F0_CB_COLOR4_FRAG: + case R_0280F4_CB_COLOR5_FRAG: + case R_0280F8_CB_COLOR6_FRAG: + case R_0280FC_CB_COLOR7_FRAG: + case R_0280C0_CB_COLOR0_TILE: + case R_0280C4_CB_COLOR1_TILE: + case R_0280C8_CB_COLOR2_TILE: + case R_0280CC_CB_COLOR3_TILE: + case R_0280D0_CB_COLOR4_TILE: + case R_0280D4_CB_COLOR5_TILE: + case R_0280D8_CB_COLOR6_TILE: + case R_0280DC_CB_COLOR7_TILE: + if (!r600_cs_packet_next_is_pkt3_nop(p)) { + if (!track->cb_color0_base_last) { + dev_err(p->dev, "Broken old userspace ? no cb_color0_base supplied before trying to write 0x%08X\n", reg); + return -EINVAL; + } + ib[idx+1+i] = track->cb_color0_base_last; + printk_once(KERN_WARNING "radeon: You have old & broken userspace " + "please consider updating mesa & xf86-video-ati\n"); + } else { + r = r600_cs_packet_next_reloc(p, &reloc); + if (r) { + dev_err(p->dev, "bad SET_CONTEXT_REG 0x%04X\n", reg); + return -EINVAL; + } + ib[idx+1+i] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff); + } + break; case DB_DEPTH_BASE: case DB_HTILE_DATA_BASE: case CB_COLOR0_BASE: + r = r600_cs_packet_next_reloc(p, &reloc); + if (r) { + DRM_ERROR("bad SET_CONTEXT_REG " + "0x%04X\n", reg); + return -EINVAL; + } + ib[idx+1+i] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff); + track->cb_color0_base_last = ib[idx+1+i]; + break; case CB_COLOR1_BASE: case CB_COLOR2_BASE: case CB_COLOR3_BASE: @@ -678,8 +757,11 @@ int r600_cs_parse(struct radeon_cs_parser *p) { struct radeon_cs_packet pkt; + struct r600_cs_track *track; int r; + track = kzalloc(sizeof(*track), GFP_KERNEL); + p->track = track; do { r = r600_cs_packet_parse(p, &pkt, p->idx); if (r) { @@ -717,7 +799,7 @@ if (p->chunk_relocs_idx == -1) { return 0; } - p->relocs = kcalloc(1, sizeof(struct radeon_cs_reloc), GFP_KERNEL); + p->relocs = kzalloc(sizeof(struct radeon_cs_reloc), GFP_KERNEL); if (p->relocs == NULL) { return -ENOMEM; } @@ -757,6 +839,7 @@ /* initialize parser */ memset(&parser, 0, sizeof(struct radeon_cs_parser)); parser.filp = filp; + parser.dev = &dev->pdev->dev; parser.rdev = NULL; parser.family = family; parser.ib = &fake_ib; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/Kconfig +++ linux-2.6.32/drivers/gpu/drm/radeon/Kconfig @@ -1,10 +1,14 @@ config DRM_RADEON_KMS - bool "Enable modesetting on radeon by default" + bool "Enable modesetting on radeon by default - NEW DRIVER" depends on DRM_RADEON help - Choose this option if you want kernel modesetting enabled by default, - and you have a new enough userspace to support this. Running old - userspaces with this enabled will cause pain. + Choose this option if you want kernel modesetting enabled by default. + + This is a completely new driver. It's only part of the existing drm + for compatibility reasons. It requires an entirely different graphics + stack above it and works very differently from the old drm stack. + i.e. don't enable this unless you know what you are doing it may + cause issues or bugs compared to the previous userspace driver stack. When kernel modesetting is enabled the IOCTL of radeon/drm driver are considered as invalid and an error message is printed --- linux-2.6.32.orig/drivers/gpu/drm/radeon/atom.h +++ linux-2.6.32/drivers/gpu/drm/radeon/atom.h @@ -91,6 +91,7 @@ #define ATOM_WS_AND_MASK 0x45 #define ATOM_WS_FB_WINDOW 0x46 #define ATOM_WS_ATTRIBUTES 0x47 +#define ATOM_WS_REGPTR 0x48 #define ATOM_IIO_NOP 0 #define ATOM_IIO_START 1 @@ -120,6 +121,7 @@ struct atom_context { struct card_info *card; + struct mutex mutex; void *bios; uint32_t cmd_table, data_table; uint16_t *iio; @@ -132,6 +134,7 @@ uint8_t shift; int cs_equal, cs_above; int io_mode; + uint32_t *scratch; }; extern int atom_debug; @@ -142,6 +145,7 @@ void atom_destroy(struct atom_context *); void atom_parse_data_header(struct atom_context *ctx, int index, uint16_t *size, uint8_t *frev, uint8_t *crev, uint16_t *data_start); void atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t *frev, uint8_t *crev); +int atom_allocate_fb_scratch(struct atom_context *ctx); #include "atom-types.h" #include "atombios.h" #include "ObjectID.h" --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_irq.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_irq.c @@ -289,16 +289,16 @@ drm_radeon_irq_emit_t *emit = data; int result; - if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600) - return -EINVAL; - - LOCK_TEST_WITH_RETURN(dev, file_priv); - if (!dev_priv) { DRM_ERROR("called with no initialization\n"); return -EINVAL; } + if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600) + return -EINVAL; + + LOCK_TEST_WITH_RETURN(dev, file_priv); + result = radeon_emit_irq(dev); if (DRM_COPY_TO_USER(emit->irq_seq, &result, sizeof(int))) { --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_i2c.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_i2c.c @@ -59,35 +59,43 @@ } -void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state) +void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state) { - struct radeon_device *rdev = radeon_connector->base.dev->dev_private; + struct radeon_device *rdev = i2c->dev->dev_private; + struct radeon_i2c_bus_rec *rec = &i2c->rec; uint32_t temp; - struct radeon_i2c_bus_rec *rec = &radeon_connector->ddc_bus->rec; /* RV410 appears to have a bug where the hw i2c in reset * holds the i2c port in a bad state - switch hw i2c away before * doing DDC - do this for all r200s/r300s/r400s for safety sake */ - if ((rdev->family >= CHIP_R200) && !ASIC_IS_AVIVO(rdev)) { - if (rec->a_clk_reg == RADEON_GPIO_MONID) { - WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST | - R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1))); - } else { - WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST | - R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3))); + if (rec->hw_capable) { + if ((rdev->family >= CHIP_R200) && !ASIC_IS_AVIVO(rdev)) { + if (rec->a_clk_reg == RADEON_GPIO_MONID) { + WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST | + R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1))); + } else { + WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST | + R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3))); + } } } - if (lock_state) { - temp = RREG32(rec->a_clk_reg); - temp &= ~(rec->a_clk_mask); - WREG32(rec->a_clk_reg, temp); - - temp = RREG32(rec->a_data_reg); - temp &= ~(rec->a_data_mask); - WREG32(rec->a_data_reg, temp); - } + /* clear the output pin values */ + temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask; + WREG32(rec->a_clk_reg, temp); + + temp = RREG32(rec->a_data_reg) & ~rec->a_data_mask; + WREG32(rec->a_data_reg, temp); + + /* set the pins to input */ + temp = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask; + WREG32(rec->en_clk_reg, temp); + + temp = RREG32(rec->en_data_reg) & ~rec->en_data_mask; + WREG32(rec->en_data_reg, temp); + + /* mask the gpio pins for software use */ temp = RREG32(rec->mask_clk_reg); if (lock_state) temp |= rec->mask_clk_mask; @@ -112,8 +120,9 @@ struct radeon_i2c_bus_rec *rec = &i2c->rec; uint32_t val; - val = RREG32(rec->get_clk_reg); - val &= rec->get_clk_mask; + /* read the value off the pin */ + val = RREG32(rec->y_clk_reg); + val &= rec->y_clk_mask; return (val != 0); } @@ -126,8 +135,10 @@ struct radeon_i2c_bus_rec *rec = &i2c->rec; uint32_t val; - val = RREG32(rec->get_data_reg); - val &= rec->get_data_mask; + /* read the value off the pin */ + val = RREG32(rec->y_data_reg); + val &= rec->y_data_mask; + return (val != 0); } @@ -138,9 +149,10 @@ struct radeon_i2c_bus_rec *rec = &i2c->rec; uint32_t val; - val = RREG32(rec->put_clk_reg) & (uint32_t)~(rec->put_clk_mask); - val |= clock ? 0 : rec->put_clk_mask; - WREG32(rec->put_clk_reg, val); + /* set pin direction */ + val = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask; + val |= clock ? 0 : rec->en_clk_mask; + WREG32(rec->en_clk_reg, val); } static void set_data(void *i2c_priv, int data) @@ -150,14 +162,15 @@ struct radeon_i2c_bus_rec *rec = &i2c->rec; uint32_t val; - val = RREG32(rec->put_data_reg) & (uint32_t)~(rec->put_data_mask); - val |= data ? 0 : rec->put_data_mask; - WREG32(rec->put_data_reg, val); + /* set pin direction */ + val = RREG32(rec->en_data_reg) & ~rec->en_data_mask; + val |= data ? 0 : rec->en_data_mask; + WREG32(rec->en_data_reg, val); } struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev, - struct radeon_i2c_bus_rec *rec, - const char *name) + struct radeon_i2c_bus_rec *rec, + const char *name) { struct radeon_i2c_chan *i2c; int ret; @@ -167,20 +180,19 @@ return NULL; i2c->adapter.owner = THIS_MODULE; - i2c->adapter.algo_data = &i2c->algo; i2c->dev = dev; - i2c->algo.setsda = set_data; - i2c->algo.setscl = set_clock; - i2c->algo.getsda = get_data; - i2c->algo.getscl = get_clock; - i2c->algo.udelay = 20; + i2c_set_adapdata(&i2c->adapter, i2c); + i2c->adapter.algo_data = &i2c->algo.bit; + i2c->algo.bit.setsda = set_data; + i2c->algo.bit.setscl = set_clock; + i2c->algo.bit.getsda = get_data; + i2c->algo.bit.getscl = get_clock; + i2c->algo.bit.udelay = 20; /* vesa says 2.2 ms is enough, 1 jiffy doesn't seem to always * make this, 2 jiffies is a lot more reliable */ - i2c->algo.timeout = 2; - i2c->algo.data = i2c; + i2c->algo.bit.timeout = 2; + i2c->algo.bit.data = i2c; i2c->rec = *rec; - i2c_set_adapdata(&i2c->adapter, i2c); - ret = i2c_bit_add_bus(&i2c->adapter); if (ret) { DRM_INFO("Failed to register i2c %s\n", name); @@ -194,6 +206,38 @@ } +struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev, + struct radeon_i2c_bus_rec *rec, + const char *name) +{ + struct radeon_i2c_chan *i2c; + int ret; + + i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL); + if (i2c == NULL) + return NULL; + + i2c->rec = *rec; + i2c->adapter.owner = THIS_MODULE; + i2c->dev = dev; + i2c_set_adapdata(&i2c->adapter, i2c); + i2c->adapter.algo_data = &i2c->algo.dp; + i2c->algo.dp.aux_ch = radeon_dp_i2c_aux_ch; + i2c->algo.dp.address = 0; + ret = i2c_dp_aux_add_bus(&i2c->adapter); + if (ret) { + DRM_INFO("Failed to register i2c %s\n", name); + goto out_free; + } + + return i2c; +out_free: + kfree(i2c); + return NULL; + +} + + void radeon_i2c_destroy(struct radeon_i2c_chan *i2c) { if (!i2c) @@ -207,3 +251,59 @@ { return NULL; } + +void radeon_i2c_sw_get_byte(struct radeon_i2c_chan *i2c_bus, + u8 slave_addr, + u8 addr, + u8 *val) +{ + u8 out_buf[2]; + u8 in_buf[2]; + struct i2c_msg msgs[] = { + { + .addr = slave_addr, + .flags = 0, + .len = 1, + .buf = out_buf, + }, + { + .addr = slave_addr, + .flags = I2C_M_RD, + .len = 1, + .buf = in_buf, + } + }; + + out_buf[0] = addr; + out_buf[1] = 0; + + if (i2c_transfer(&i2c_bus->adapter, msgs, 2) == 2) { + *val = in_buf[0]; + DRM_DEBUG("val = 0x%02x\n", *val); + } else { + DRM_ERROR("i2c 0x%02x 0x%02x read failed\n", + addr, *val); + } +} + +void radeon_i2c_sw_put_byte(struct radeon_i2c_chan *i2c_bus, + u8 slave_addr, + u8 addr, + u8 val) +{ + uint8_t out_buf[2]; + struct i2c_msg msg = { + .addr = slave_addr, + .flags = 0, + .len = 2, + .buf = out_buf, + }; + + out_buf[0] = addr; + out_buf[1] = val; + + if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1) + DRM_ERROR("i2c 0x%02x 0x%02x write failed\n", + addr, val); +} + --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_clocks.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_clocks.c @@ -44,6 +44,10 @@ ref_div = RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) & RADEON_M_SPLL_REF_DIV_MASK; + + if (ref_div == 0) + return 0; + sclk = fb_div / ref_div; post_div = RREG32_PLL(RADEON_SCLK_CNTL) & RADEON_SCLK_SRC_SEL_MASK; @@ -52,13 +56,13 @@ else if (post_div == 3) sclk >>= 2; else if (post_div == 4) - sclk >>= 4; + sclk >>= 3; return sclk; } /* 10 khz */ -static uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev) +uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev) { struct radeon_pll *mpll = &rdev->clock.mpll; uint32_t fb_div, ref_div, post_div, mclk; @@ -70,6 +74,10 @@ ref_div = RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) & RADEON_M_SPLL_REF_DIV_MASK; + + if (ref_div == 0) + return 0; + mclk = fb_div / ref_div; post_div = RREG32_PLL(RADEON_MCLK_CNTL) & 0x7; @@ -78,7 +86,7 @@ else if (post_div == 3) mclk >>= 2; else if (post_div == 4) - mclk >>= 4; + mclk >>= 3; return mclk; } @@ -98,8 +106,19 @@ ret = radeon_combios_get_clock_info(dev); if (ret) { - if (p1pll->reference_div < 2) - p1pll->reference_div = 12; + if (p1pll->reference_div < 2) { + if (!ASIC_IS_AVIVO(rdev)) { + u32 tmp = RREG32_PLL(RADEON_PPLL_REF_DIV); + if (ASIC_IS_R300(rdev)) + p1pll->reference_div = + (tmp & R300_PPLL_REF_DIV_ACC_MASK) >> R300_PPLL_REF_DIV_ACC_SHIFT; + else + p1pll->reference_div = tmp & RADEON_PPLL_REF_DIV_MASK; + if (p1pll->reference_div < 2) + p1pll->reference_div = 12; + } else + p1pll->reference_div = 12; + } if (p2pll->reference_div < 2) p2pll->reference_div = 12; if (rdev->family < CHIP_RS600) { --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_drv.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_drv.c @@ -86,6 +86,8 @@ int radeon_testing = 0; int radeon_connector_table = 0; int radeon_tv = 1; +int radeon_new_pll = -1; +int radeon_audio = 1; MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); module_param_named(no_wb, radeon_no_wb, int, 0444); @@ -120,6 +122,12 @@ MODULE_PARM_DESC(tv, "TV enable (0 = disable)"); module_param_named(tv, radeon_tv, int, 0444); +MODULE_PARM_DESC(new_pll, "Select new PLL code"); +module_param_named(new_pll, radeon_new_pll, int, 0444); + +MODULE_PARM_DESC(audio, "Audio enable (0 = disable)"); +module_param_named(audio, radeon_audio, int, 0444); + static int radeon_suspend(struct drm_device *dev, pm_message_t state) { drm_radeon_private_t *dev_priv = dev->dev_private; @@ -188,7 +196,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, @@ -276,7 +284,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = radeon_mmap, .poll = drm_poll, .fasync = drm_fasync, @@ -316,6 +324,18 @@ radeon_modeset = 0; } #endif + /* Check for known bad devices by default. */ + if (radeon_modeset == -1) { + static struct pci_device_id radeon_badmodeset[] = { + { PCI_DEVICE(0x1002, 0x515e) }, + { PCI_DEVICE(0x1002, 0x515f) }, + { }, + }; + if (pci_dev_present(radeon_badmodeset)) { + DRM_INFO("radeon disabling kernel modesetting for known bad device.\n"); + radeon_modeset = 0; + } + } /* if enabled by default */ if (radeon_modeset == -1) { #ifdef CONFIG_DRM_RADEON_KMS --- linux-2.6.32.orig/drivers/gpu/drm/radeon/ObjectID.h +++ linux-2.6.32/drivers/gpu/drm/radeon/ObjectID.h @@ -1,5 +1,5 @@ /* -* Copyright 2006-2007 Advanced Micro Devices, Inc. +* Copyright 2006-2007 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -41,14 +41,14 @@ /****************************************************/ /* Encoder Object ID Definition */ /****************************************************/ -#define ENCODER_OBJECT_ID_NONE 0x00 +#define ENCODER_OBJECT_ID_NONE 0x00 /* Radeon Class Display Hardware */ #define ENCODER_OBJECT_ID_INTERNAL_LVDS 0x01 #define ENCODER_OBJECT_ID_INTERNAL_TMDS1 0x02 #define ENCODER_OBJECT_ID_INTERNAL_TMDS2 0x03 #define ENCODER_OBJECT_ID_INTERNAL_DAC1 0x04 -#define ENCODER_OBJECT_ID_INTERNAL_DAC2 0x05 /* TV/CV DAC */ +#define ENCODER_OBJECT_ID_INTERNAL_DAC2 0x05 /* TV/CV DAC */ #define ENCODER_OBJECT_ID_INTERNAL_SDVOA 0x06 #define ENCODER_OBJECT_ID_INTERNAL_SDVOB 0x07 @@ -56,11 +56,11 @@ #define ENCODER_OBJECT_ID_SI170B 0x08 #define ENCODER_OBJECT_ID_CH7303 0x09 #define ENCODER_OBJECT_ID_CH7301 0x0A -#define ENCODER_OBJECT_ID_INTERNAL_DVO1 0x0B /* This belongs to Radeon Class Display Hardware */ +#define ENCODER_OBJECT_ID_INTERNAL_DVO1 0x0B /* This belongs to Radeon Class Display Hardware */ #define ENCODER_OBJECT_ID_EXTERNAL_SDVOA 0x0C #define ENCODER_OBJECT_ID_EXTERNAL_SDVOB 0x0D #define ENCODER_OBJECT_ID_TITFP513 0x0E -#define ENCODER_OBJECT_ID_INTERNAL_LVTM1 0x0F /* not used for Radeon */ +#define ENCODER_OBJECT_ID_INTERNAL_LVTM1 0x0F /* not used for Radeon */ #define ENCODER_OBJECT_ID_VT1623 0x10 #define ENCODER_OBJECT_ID_HDMI_SI1930 0x11 #define ENCODER_OBJECT_ID_HDMI_INTERNAL 0x12 @@ -68,9 +68,9 @@ #define ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1 0x13 #define ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1 0x14 #define ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1 0x15 -#define ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2 0x16 /* Shared with CV/TV and CRT */ -#define ENCODER_OBJECT_ID_SI178 0X17 /* External TMDS (dual link, no HDCP.) */ -#define ENCODER_OBJECT_ID_MVPU_FPGA 0x18 /* MVPU FPGA chip */ +#define ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2 0x16 /* Shared with CV/TV and CRT */ +#define ENCODER_OBJECT_ID_SI178 0X17 /* External TMDS (dual link, no HDCP.) */ +#define ENCODER_OBJECT_ID_MVPU_FPGA 0x18 /* MVPU FPGA chip */ #define ENCODER_OBJECT_ID_INTERNAL_DDI 0x19 #define ENCODER_OBJECT_ID_VT1625 0x1A #define ENCODER_OBJECT_ID_HDMI_SI1932 0x1B @@ -86,7 +86,7 @@ /****************************************************/ /* Connector Object ID Definition */ /****************************************************/ -#define CONNECTOR_OBJECT_ID_NONE 0x00 +#define CONNECTOR_OBJECT_ID_NONE 0x00 #define CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I 0x01 #define CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I 0x02 #define CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D 0x03 @@ -96,7 +96,7 @@ #define CONNECTOR_OBJECT_ID_SVIDEO 0x07 #define CONNECTOR_OBJECT_ID_YPbPr 0x08 #define CONNECTOR_OBJECT_ID_D_CONNECTOR 0x09 -#define CONNECTOR_OBJECT_ID_9PIN_DIN 0x0A /* Supports both CV & TV */ +#define CONNECTOR_OBJECT_ID_9PIN_DIN 0x0A /* Supports both CV & TV */ #define CONNECTOR_OBJECT_ID_SCART 0x0B #define CONNECTOR_OBJECT_ID_HDMI_TYPE_A 0x0C #define CONNECTOR_OBJECT_ID_HDMI_TYPE_B 0x0D @@ -106,6 +106,8 @@ #define CONNECTOR_OBJECT_ID_CROSSFIRE 0x11 #define CONNECTOR_OBJECT_ID_HARDCODE_DVI 0x12 #define CONNECTOR_OBJECT_ID_DISPLAYPORT 0x13 +#define CONNECTOR_OBJECT_ID_eDP 0x14 +#define CONNECTOR_OBJECT_ID_MXM 0x15 /* deleted */ @@ -116,6 +118,14 @@ #define ROUTER_OBJECT_ID_I2C_EXTENDER_CNTL 0x01 /****************************************************/ +/* Generic Object ID Definition */ +/****************************************************/ +#define GENERIC_OBJECT_ID_NONE 0x00 +#define GENERIC_OBJECT_ID_GLSYNC 0x01 +#define GENERIC_OBJECT_ID_PX2_NON_DRIVABLE 0x02 +#define GENERIC_OBJECT_ID_MXM_OPM 0x03 + +/****************************************************/ /* Graphics Object ENUM ID Definition */ /****************************************************/ #define GRAPH_OBJECT_ENUM_ID1 0x01 @@ -124,6 +134,7 @@ #define GRAPH_OBJECT_ENUM_ID4 0x04 #define GRAPH_OBJECT_ENUM_ID5 0x05 #define GRAPH_OBJECT_ENUM_ID6 0x06 +#define GRAPH_OBJECT_ENUM_ID7 0x07 /****************************************************/ /* Graphics Object ID Bit definition */ @@ -133,35 +144,35 @@ #define RESERVED1_ID_MASK 0x0800 #define OBJECT_TYPE_MASK 0x7000 #define RESERVED2_ID_MASK 0x8000 - + #define OBJECT_ID_SHIFT 0x00 #define ENUM_ID_SHIFT 0x08 #define OBJECT_TYPE_SHIFT 0x0C + /****************************************************/ /* Graphics Object family definition */ /****************************************************/ -#define CONSTRUCTOBJECTFAMILYID(GRAPHICS_OBJECT_TYPE, GRAPHICS_OBJECT_ID) \ - (GRAPHICS_OBJECT_TYPE << OBJECT_TYPE_SHIFT | \ - GRAPHICS_OBJECT_ID << OBJECT_ID_SHIFT) +#define CONSTRUCTOBJECTFAMILYID(GRAPHICS_OBJECT_TYPE, GRAPHICS_OBJECT_ID) (GRAPHICS_OBJECT_TYPE << OBJECT_TYPE_SHIFT | \ + GRAPHICS_OBJECT_ID << OBJECT_ID_SHIFT) /****************************************************/ /* GPU Object ID definition - Shared with BIOS */ /****************************************************/ -#define GPU_ENUM_ID1 (GRAPH_OBJECT_TYPE_GPU << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT) +#define GPU_ENUM_ID1 ( GRAPH_OBJECT_TYPE_GPU << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT) /****************************************************/ /* Encoder Object ID definition - Shared with BIOS */ /****************************************************/ /* -#define ENCODER_INTERNAL_LVDS_ENUM_ID1 0x2101 +#define ENCODER_INTERNAL_LVDS_ENUM_ID1 0x2101 #define ENCODER_INTERNAL_TMDS1_ENUM_ID1 0x2102 #define ENCODER_INTERNAL_TMDS2_ENUM_ID1 0x2103 #define ENCODER_INTERNAL_DAC1_ENUM_ID1 0x2104 #define ENCODER_INTERNAL_DAC2_ENUM_ID1 0x2105 #define ENCODER_INTERNAL_SDVOA_ENUM_ID1 0x2106 #define ENCODER_INTERNAL_SDVOB_ENUM_ID1 0x2107 -#define ENCODER_SIL170B_ENUM_ID1 0x2108 +#define ENCODER_SIL170B_ENUM_ID1 0x2108 #define ENCODER_CH7303_ENUM_ID1 0x2109 #define ENCODER_CH7301_ENUM_ID1 0x210A #define ENCODER_INTERNAL_DVO1_ENUM_ID1 0x210B @@ -175,8 +186,8 @@ #define ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID1 0x2113 #define ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1 0x2114 #define ENCODER_INTERNAL_KLDSCP_DAC1_ENUM_ID1 0x2115 -#define ENCODER_INTERNAL_KLDSCP_DAC2_ENUM_ID1 0x2116 -#define ENCODER_SI178_ENUM_ID1 0x2117 +#define ENCODER_INTERNAL_KLDSCP_DAC2_ENUM_ID1 0x2116 +#define ENCODER_SI178_ENUM_ID1 0x2117 #define ENCODER_MVPU_FPGA_ENUM_ID1 0x2118 #define ENCODER_INTERNAL_DDI_ENUM_ID1 0x2119 #define ENCODER_VT1625_ENUM_ID1 0x211A @@ -185,205 +196,169 @@ #define ENCODER_DP_DP501_ENUM_ID1 0x211D #define ENCODER_INTERNAL_UNIPHY_ENUM_ID1 0x211E */ -#define ENCODER_INTERNAL_LVDS_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_LVDS << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_TMDS1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_TMDS1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_TMDS2_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_TMDS2 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_DAC1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_DAC1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_DAC2_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_DAC2 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_SDVOA_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_SDVOA << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_SDVOA_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_SDVOA << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_SDVOB_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_SDVOB << OBJECT_ID_SHIFT) - -#define ENCODER_SIL170B_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_SI170B << OBJECT_ID_SHIFT) - -#define ENCODER_CH7303_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_CH7303 << OBJECT_ID_SHIFT) - -#define ENCODER_CH7301_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_CH7301 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_DVO1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_DVO1 << OBJECT_ID_SHIFT) - -#define ENCODER_EXTERNAL_SDVOA_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_EXTERNAL_SDVOA << OBJECT_ID_SHIFT) - -#define ENCODER_EXTERNAL_SDVOA_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_EXTERNAL_SDVOA << OBJECT_ID_SHIFT) - -#define ENCODER_EXTERNAL_SDVOB_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_EXTERNAL_SDVOB << OBJECT_ID_SHIFT) - -#define ENCODER_TITFP513_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_TITFP513 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_LVTM1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_LVTM1 << OBJECT_ID_SHIFT) - -#define ENCODER_VT1623_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_VT1623 << OBJECT_ID_SHIFT) - -#define ENCODER_HDMI_SI1930_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_HDMI_SI1930 << OBJECT_ID_SHIFT) - -#define ENCODER_HDMI_INTERNAL_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_HDMI_INTERNAL << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_KLDSCP_DAC1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_KLDSCP_DAC2_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2 << OBJECT_ID_SHIFT) /* Shared with CV/TV and CRT */ - -#define ENCODER_SI178_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_SI178 << OBJECT_ID_SHIFT) - -#define ENCODER_MVPU_FPGA_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_MVPU_FPGA << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_DDI_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_DDI << OBJECT_ID_SHIFT) - -#define ENCODER_VT1625_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_VT1625 << OBJECT_ID_SHIFT) - -#define ENCODER_HDMI_SI1932_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_HDMI_SI1932 << OBJECT_ID_SHIFT) - -#define ENCODER_DP_DP501_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_DP_DP501 << OBJECT_ID_SHIFT) - -#define ENCODER_DP_AN9801_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_DP_AN9801 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_UNIPHY_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_UNIPHY_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_KLDSCP_LVTMA_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_UNIPHY1_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_UNIPHY1_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_UNIPHY2_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT) - -#define ENCODER_INTERNAL_UNIPHY2_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT) - -#define ENCODER_GENERAL_EXTERNAL_DVO_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ENCODER_OBJECT_ID_GENERAL_EXTERNAL_DVO << OBJECT_ID_SHIFT) +#define ENCODER_INTERNAL_LVDS_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_LVDS << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_TMDS1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_TMDS1 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_TMDS2_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_TMDS2 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_DAC1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_DAC1 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_DAC2_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_DAC2 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_SDVOA_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_SDVOA << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_SDVOA_ENUM_ID2 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_SDVOA << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_SDVOB_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_SDVOB << OBJECT_ID_SHIFT) + +#define ENCODER_SIL170B_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_SI170B << OBJECT_ID_SHIFT) + +#define ENCODER_CH7303_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_CH7303 << OBJECT_ID_SHIFT) + +#define ENCODER_CH7301_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_CH7301 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_DVO1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_DVO1 << OBJECT_ID_SHIFT) + +#define ENCODER_EXTERNAL_SDVOA_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_EXTERNAL_SDVOA << OBJECT_ID_SHIFT) + +#define ENCODER_EXTERNAL_SDVOA_ENUM_ID2 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_EXTERNAL_SDVOA << OBJECT_ID_SHIFT) + + +#define ENCODER_EXTERNAL_SDVOB_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_EXTERNAL_SDVOB << OBJECT_ID_SHIFT) + + +#define ENCODER_TITFP513_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_TITFP513 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_LVTM1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_LVTM1 << OBJECT_ID_SHIFT) + +#define ENCODER_VT1623_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_VT1623 << OBJECT_ID_SHIFT) + +#define ENCODER_HDMI_SI1930_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_HDMI_SI1930 << OBJECT_ID_SHIFT) + +#define ENCODER_HDMI_INTERNAL_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_HDMI_INTERNAL << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1 << OBJECT_ID_SHIFT) + + +#define ENCODER_INTERNAL_KLDSCP_TMDS1_ENUM_ID2 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1 << OBJECT_ID_SHIFT) + + +#define ENCODER_INTERNAL_KLDSCP_DVO1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_KLDSCP_DAC1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_KLDSCP_DAC2_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2 << OBJECT_ID_SHIFT) // Shared with CV/TV and CRT + +#define ENCODER_SI178_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_SI178 << OBJECT_ID_SHIFT) + +#define ENCODER_MVPU_FPGA_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_MVPU_FPGA << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_DDI_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_DDI << OBJECT_ID_SHIFT) + +#define ENCODER_VT1625_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_VT1625 << OBJECT_ID_SHIFT) + +#define ENCODER_HDMI_SI1932_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_HDMI_SI1932 << OBJECT_ID_SHIFT) + +#define ENCODER_DP_DP501_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_DP_DP501 << OBJECT_ID_SHIFT) + +#define ENCODER_DP_AN9801_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_DP_AN9801 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_UNIPHY_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_UNIPHY_ENUM_ID2 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_KLDSCP_LVTMA_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_UNIPHY1_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_UNIPHY1_ENUM_ID2 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_UNIPHY2_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT) + +#define ENCODER_INTERNAL_UNIPHY2_ENUM_ID2 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT) + +#define ENCODER_GENERAL_EXTERNAL_DVO_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ENCODER_OBJECT_ID_GENERAL_EXTERNAL_DVO << OBJECT_ID_SHIFT) /****************************************************/ /* Connector Object ID definition - Shared with BIOS */ @@ -406,167 +381,253 @@ #define CONNECTOR_7PIN_DIN_ENUM_ID1 0x310F #define CONNECTOR_PCIE_CONNECTOR_ENUM_ID1 0x3110 */ -#define CONNECTOR_LVDS_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_LVDS << OBJECT_ID_SHIFT) - -#define CONNECTOR_SINGLE_LINK_DVI_I_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I << OBJECT_ID_SHIFT) - -#define CONNECTOR_SINGLE_LINK_DVI_I_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I << OBJECT_ID_SHIFT) - -#define CONNECTOR_DUAL_LINK_DVI_I_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I << OBJECT_ID_SHIFT) - -#define CONNECTOR_DUAL_LINK_DVI_I_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I << OBJECT_ID_SHIFT) - -#define CONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT) - -#define CONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT) - -#define CONNECTOR_DUAL_LINK_DVI_D_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT) - -#define CONNECTOR_VGA_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_VGA << OBJECT_ID_SHIFT) - -#define CONNECTOR_VGA_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_VGA << OBJECT_ID_SHIFT) - -#define CONNECTOR_COMPOSITE_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_COMPOSITE << OBJECT_ID_SHIFT) - -#define CONNECTOR_SVIDEO_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_SVIDEO << OBJECT_ID_SHIFT) - -#define CONNECTOR_YPbPr_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_YPbPr << OBJECT_ID_SHIFT) - -#define CONNECTOR_D_CONNECTOR_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_D_CONNECTOR << OBJECT_ID_SHIFT) - -#define CONNECTOR_9PIN_DIN_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_9PIN_DIN << OBJECT_ID_SHIFT) - -#define CONNECTOR_SCART_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_SCART << OBJECT_ID_SHIFT) - -#define CONNECTOR_HDMI_TYPE_A_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT) - -#define CONNECTOR_HDMI_TYPE_B_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_HDMI_TYPE_B << OBJECT_ID_SHIFT) - -#define CONNECTOR_7PIN_DIN_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_7PIN_DIN << OBJECT_ID_SHIFT) - -#define CONNECTOR_PCIE_CONNECTOR_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_PCIE_CONNECTOR << OBJECT_ID_SHIFT) - -#define CONNECTOR_PCIE_CONNECTOR_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_PCIE_CONNECTOR << OBJECT_ID_SHIFT) - -#define CONNECTOR_CROSSFIRE_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_CROSSFIRE << OBJECT_ID_SHIFT) - -#define CONNECTOR_CROSSFIRE_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_CROSSFIRE << OBJECT_ID_SHIFT) - -#define CONNECTOR_HARDCODE_DVI_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_HARDCODE_DVI << OBJECT_ID_SHIFT) - -#define CONNECTOR_HARDCODE_DVI_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_HARDCODE_DVI << OBJECT_ID_SHIFT) - -#define CONNECTOR_DISPLAYPORT_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) - -#define CONNECTOR_DISPLAYPORT_ENUM_ID2 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) - -#define CONNECTOR_DISPLAYPORT_ENUM_ID3 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) - -#define CONNECTOR_DISPLAYPORT_ENUM_ID4 \ - (GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\ - CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) +#define CONNECTOR_LVDS_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_LVDS << OBJECT_ID_SHIFT) + +#define CONNECTOR_LVDS_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_LVDS << OBJECT_ID_SHIFT) + +#define CONNECTOR_eDP_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_eDP << OBJECT_ID_SHIFT) + +#define CONNECTOR_eDP_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_eDP << OBJECT_ID_SHIFT) + +#define CONNECTOR_SINGLE_LINK_DVI_I_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I << OBJECT_ID_SHIFT) + +#define CONNECTOR_SINGLE_LINK_DVI_I_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I << OBJECT_ID_SHIFT) + +#define CONNECTOR_DUAL_LINK_DVI_I_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I << OBJECT_ID_SHIFT) + +#define CONNECTOR_DUAL_LINK_DVI_I_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I << OBJECT_ID_SHIFT) + +#define CONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT) + +#define CONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT) + +#define CONNECTOR_DUAL_LINK_DVI_D_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT) + +#define CONNECTOR_DUAL_LINK_DVI_D_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT) + +#define CONNECTOR_DUAL_LINK_DVI_D_ENUM_ID3 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT) + +#define CONNECTOR_VGA_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_VGA << OBJECT_ID_SHIFT) + +#define CONNECTOR_VGA_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_VGA << OBJECT_ID_SHIFT) + +#define CONNECTOR_COMPOSITE_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_COMPOSITE << OBJECT_ID_SHIFT) + +#define CONNECTOR_COMPOSITE_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_COMPOSITE << OBJECT_ID_SHIFT) + +#define CONNECTOR_SVIDEO_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SVIDEO << OBJECT_ID_SHIFT) + +#define CONNECTOR_SVIDEO_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SVIDEO << OBJECT_ID_SHIFT) + +#define CONNECTOR_YPbPr_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_YPbPr << OBJECT_ID_SHIFT) + +#define CONNECTOR_YPbPr_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_YPbPr << OBJECT_ID_SHIFT) + +#define CONNECTOR_D_CONNECTOR_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_D_CONNECTOR << OBJECT_ID_SHIFT) + +#define CONNECTOR_D_CONNECTOR_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_D_CONNECTOR << OBJECT_ID_SHIFT) + +#define CONNECTOR_9PIN_DIN_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_9PIN_DIN << OBJECT_ID_SHIFT) + +#define CONNECTOR_9PIN_DIN_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_9PIN_DIN << OBJECT_ID_SHIFT) + +#define CONNECTOR_SCART_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SCART << OBJECT_ID_SHIFT) + +#define CONNECTOR_SCART_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_SCART << OBJECT_ID_SHIFT) + +#define CONNECTOR_HDMI_TYPE_A_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT) + +#define CONNECTOR_HDMI_TYPE_A_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT) + +#define CONNECTOR_HDMI_TYPE_A_ENUM_ID3 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT) + +#define CONNECTOR_HDMI_TYPE_B_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HDMI_TYPE_B << OBJECT_ID_SHIFT) + +#define CONNECTOR_HDMI_TYPE_B_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HDMI_TYPE_B << OBJECT_ID_SHIFT) + +#define CONNECTOR_7PIN_DIN_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_7PIN_DIN << OBJECT_ID_SHIFT) +#define CONNECTOR_7PIN_DIN_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_7PIN_DIN << OBJECT_ID_SHIFT) + +#define CONNECTOR_PCIE_CONNECTOR_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_PCIE_CONNECTOR << OBJECT_ID_SHIFT) + +#define CONNECTOR_PCIE_CONNECTOR_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_PCIE_CONNECTOR << OBJECT_ID_SHIFT) + +#define CONNECTOR_CROSSFIRE_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_CROSSFIRE << OBJECT_ID_SHIFT) + +#define CONNECTOR_CROSSFIRE_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_CROSSFIRE << OBJECT_ID_SHIFT) + + +#define CONNECTOR_HARDCODE_DVI_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HARDCODE_DVI << OBJECT_ID_SHIFT) + +#define CONNECTOR_HARDCODE_DVI_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_HARDCODE_DVI << OBJECT_ID_SHIFT) + +#define CONNECTOR_DISPLAYPORT_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) + +#define CONNECTOR_DISPLAYPORT_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) + +#define CONNECTOR_DISPLAYPORT_ENUM_ID3 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) + +#define CONNECTOR_DISPLAYPORT_ENUM_ID4 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) + +#define CONNECTOR_DISPLAYPORT_ENUM_ID5 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID5 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) + +#define CONNECTOR_DISPLAYPORT_ENUM_ID6 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID6 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT) + +#define CONNECTOR_MXM_ENUM_ID1 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_DP_A + +#define CONNECTOR_MXM_ENUM_ID2 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_DP_B + +#define CONNECTOR_MXM_ENUM_ID3 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_DP_C + +#define CONNECTOR_MXM_ENUM_ID4 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_DP_D + +#define CONNECTOR_MXM_ENUM_ID5 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID5 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_LVDS_TXxx + +#define CONNECTOR_MXM_ENUM_ID6 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID6 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_LVDS_UXxx + +#define CONNECTOR_MXM_ENUM_ID7 ( GRAPH_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID7 << ENUM_ID_SHIFT |\ + CONNECTOR_OBJECT_ID_MXM << OBJECT_ID_SHIFT) //Mapping to MXM_DAC /****************************************************/ /* Router Object ID definition - Shared with BIOS */ /****************************************************/ -#define ROUTER_I2C_EXTENDER_CNTL_ENUM_ID1 \ - (GRAPH_OBJECT_TYPE_ROUTER << OBJECT_TYPE_SHIFT |\ - GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ - ROUTER_OBJECT_ID_I2C_EXTENDER_CNTL << OBJECT_ID_SHIFT) +#define ROUTER_I2C_EXTENDER_CNTL_ENUM_ID1 ( GRAPH_OBJECT_TYPE_ROUTER << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + ROUTER_OBJECT_ID_I2C_EXTENDER_CNTL << OBJECT_ID_SHIFT) /* deleted */ /****************************************************/ +/* Generic Object ID definition - Shared with BIOS */ +/****************************************************/ +#define GENERICOBJECT_GLSYNC_ENUM_ID1 (GRAPH_OBJECT_TYPE_GENERIC << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + GENERIC_OBJECT_ID_GLSYNC << OBJECT_ID_SHIFT) + +#define GENERICOBJECT_PX2_NON_DRIVABLE_ID1 (GRAPH_OBJECT_TYPE_GENERIC << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + GENERIC_OBJECT_ID_PX2_NON_DRIVABLE<< OBJECT_ID_SHIFT) + +#define GENERICOBJECT_PX2_NON_DRIVABLE_ID2 (GRAPH_OBJECT_TYPE_GENERIC << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ + GENERIC_OBJECT_ID_PX2_NON_DRIVABLE<< OBJECT_ID_SHIFT) + +#define GENERICOBJECT_MXM_OPM_ENUM_ID1 (GRAPH_OBJECT_TYPE_GENERIC << OBJECT_TYPE_SHIFT |\ + GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ + GENERIC_OBJECT_ID_MXM_OPM << OBJECT_ID_SHIFT) + +/****************************************************/ /* Object Cap definition - Shared with BIOS */ /****************************************************/ #define GRAPHICS_OBJECT_CAP_I2C 0x00000001L #define GRAPHICS_OBJECT_CAP_TABLE_ID 0x00000002L + #define GRAPHICS_OBJECT_I2CCOMMAND_TABLE_ID 0x01 #define GRAPHICS_OBJECT_HOTPLUGDETECTIONINTERUPT_TABLE_ID 0x02 #define GRAPHICS_OBJECT_ENCODER_OUTPUT_PROTECTION_TABLE_ID 0x03 @@ -575,4 +636,8 @@ #pragma pack() #endif -#endif /*GRAPHICTYPE */ +#endif /*GRAPHICTYPE */ + + + + --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600_cp.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r600_cp.c @@ -1428,9 +1428,12 @@ gb_tiling_config |= R600_BANK_SWAPS(1); - backend_map = r700_get_tile_pipe_to_backend_map(dev_priv->r600_max_tile_pipes, - dev_priv->r600_max_backends, - (0xff << dev_priv->r600_max_backends) & 0xff); + if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV740) + backend_map = 0x28; + else + backend_map = r700_get_tile_pipe_to_backend_map(dev_priv->r600_max_tile_pipes, + dev_priv->r600_max_backends, + (0xff << dev_priv->r600_max_backends) & 0xff); gb_tiling_config |= R600_BACKEND_MAP(backend_map); cc_gc_shader_pipe_config = --- linux-2.6.32.orig/drivers/gpu/drm/radeon/rs600d.h +++ linux-2.6.32/drivers/gpu/drm/radeon/rs600d.h @@ -30,27 +30,12 @@ /* Registers */ #define R_000040_GEN_INT_CNTL 0x000040 -#define S_000040_DISPLAY_INT_STATUS(x) (((x) & 0x1) << 0) -#define G_000040_DISPLAY_INT_STATUS(x) (((x) >> 0) & 0x1) -#define C_000040_DISPLAY_INT_STATUS 0xFFFFFFFE -#define S_000040_DMA_VIPH0_INT_EN(x) (((x) & 0x1) << 12) -#define G_000040_DMA_VIPH0_INT_EN(x) (((x) >> 12) & 0x1) -#define C_000040_DMA_VIPH0_INT_EN 0xFFFFEFFF -#define S_000040_CRTC2_VSYNC(x) (((x) & 0x1) << 6) -#define G_000040_CRTC2_VSYNC(x) (((x) >> 6) & 0x1) -#define C_000040_CRTC2_VSYNC 0xFFFFFFBF -#define S_000040_SNAPSHOT2(x) (((x) & 0x1) << 7) -#define G_000040_SNAPSHOT2(x) (((x) >> 7) & 0x1) -#define C_000040_SNAPSHOT2 0xFFFFFF7F -#define S_000040_CRTC2_VBLANK(x) (((x) & 0x1) << 9) -#define G_000040_CRTC2_VBLANK(x) (((x) >> 9) & 0x1) -#define C_000040_CRTC2_VBLANK 0xFFFFFDFF -#define S_000040_FP2_DETECT(x) (((x) & 0x1) << 10) -#define G_000040_FP2_DETECT(x) (((x) >> 10) & 0x1) -#define C_000040_FP2_DETECT 0xFFFFFBFF -#define S_000040_VSYNC_DIFF_OVER_LIMIT(x) (((x) & 0x1) << 11) -#define G_000040_VSYNC_DIFF_OVER_LIMIT(x) (((x) >> 11) & 0x1) -#define C_000040_VSYNC_DIFF_OVER_LIMIT 0xFFFFF7FF +#define S_000040_SCRATCH_INT_MASK(x) (((x) & 0x1) << 18) +#define G_000040_SCRATCH_INT_MASK(x) (((x) >> 18) & 0x1) +#define C_000040_SCRATCH_INT_MASK 0xFFFBFFFF +#define S_000040_GUI_IDLE_MASK(x) (((x) & 0x1) << 19) +#define G_000040_GUI_IDLE_MASK(x) (((x) >> 19) & 0x1) +#define C_000040_GUI_IDLE_MASK 0xFFF7FFFF #define S_000040_DMA_VIPH1_INT_EN(x) (((x) & 0x1) << 13) #define G_000040_DMA_VIPH1_INT_EN(x) (((x) >> 13) & 0x1) #define C_000040_DMA_VIPH1_INT_EN 0xFFFFDFFF @@ -370,7 +355,90 @@ #define S_007EDC_LB_D2_VBLANK_INTERRUPT(x) (((x) & 0x1) << 5) #define G_007EDC_LB_D2_VBLANK_INTERRUPT(x) (((x) >> 5) & 0x1) #define C_007EDC_LB_D2_VBLANK_INTERRUPT 0xFFFFFFDF - +#define S_007EDC_DACA_AUTODETECT_INTERRUPT(x) (((x) & 0x1) << 16) +#define G_007EDC_DACA_AUTODETECT_INTERRUPT(x) (((x) >> 16) & 0x1) +#define C_007EDC_DACA_AUTODETECT_INTERRUPT 0xFFFEFFFF +#define S_007EDC_DACB_AUTODETECT_INTERRUPT(x) (((x) & 0x1) << 17) +#define G_007EDC_DACB_AUTODETECT_INTERRUPT(x) (((x) >> 17) & 0x1) +#define C_007EDC_DACB_AUTODETECT_INTERRUPT 0xFFFDFFFF +#define S_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(x) (((x) & 0x1) << 18) +#define G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(x) (((x) >> 18) & 0x1) +#define C_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT 0xFFFBFFFF +#define S_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT(x) (((x) & 0x1) << 19) +#define G_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT(x) (((x) >> 19) & 0x1) +#define C_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT 0xFFF7FFFF +#define R_007828_DACA_AUTODETECT_CONTROL 0x007828 +#define S_007828_DACA_AUTODETECT_MODE(x) (((x) & 0x3) << 0) +#define G_007828_DACA_AUTODETECT_MODE(x) (((x) >> 0) & 0x3) +#define C_007828_DACA_AUTODETECT_MODE 0xFFFFFFFC +#define S_007828_DACA_AUTODETECT_FRAME_TIME_COUNTER(x) (((x) & 0xff) << 8) +#define G_007828_DACA_AUTODETECT_FRAME_TIME_COUNTER(x) (((x) >> 8) & 0xff) +#define C_007828_DACA_AUTODETECT_FRAME_TIME_COUNTER 0xFFFF00FF +#define S_007828_DACA_AUTODETECT_CHECK_MASK(x) (((x) & 0x3) << 16) +#define G_007828_DACA_AUTODETECT_CHECK_MASK(x) (((x) >> 16) & 0x3) +#define C_007828_DACA_AUTODETECT_CHECK_MASK 0xFFFCFFFF +#define R_007838_DACA_AUTODETECT_INT_CONTROL 0x007838 +#define S_007838_DACA_AUTODETECT_ACK(x) (((x) & 0x1) << 0) +#define C_007838_DACA_DACA_AUTODETECT_ACK 0xFFFFFFFE +#define S_007838_DACA_AUTODETECT_INT_ENABLE(x) (((x) & 0x1) << 16) +#define G_007838_DACA_AUTODETECT_INT_ENABLE(x) (((x) >> 16) & 0x1) +#define C_007838_DACA_AUTODETECT_INT_ENABLE 0xFFFCFFFF +#define R_007A28_DACB_AUTODETECT_CONTROL 0x007A28 +#define S_007A28_DACB_AUTODETECT_MODE(x) (((x) & 0x3) << 0) +#define G_007A28_DACB_AUTODETECT_MODE(x) (((x) >> 0) & 0x3) +#define C_007A28_DACB_AUTODETECT_MODE 0xFFFFFFFC +#define S_007A28_DACB_AUTODETECT_FRAME_TIME_COUNTER(x) (((x) & 0xff) << 8) +#define G_007A28_DACB_AUTODETECT_FRAME_TIME_COUNTER(x) (((x) >> 8) & 0xff) +#define C_007A28_DACB_AUTODETECT_FRAME_TIME_COUNTER 0xFFFF00FF +#define S_007A28_DACB_AUTODETECT_CHECK_MASK(x) (((x) & 0x3) << 16) +#define G_007A28_DACB_AUTODETECT_CHECK_MASK(x) (((x) >> 16) & 0x3) +#define C_007A28_DACB_AUTODETECT_CHECK_MASK 0xFFFCFFFF +#define R_007A38_DACB_AUTODETECT_INT_CONTROL 0x007A38 +#define S_007A38_DACB_AUTODETECT_ACK(x) (((x) & 0x1) << 0) +#define C_007A38_DACB_DACA_AUTODETECT_ACK 0xFFFFFFFE +#define S_007A38_DACB_AUTODETECT_INT_ENABLE(x) (((x) & 0x1) << 16) +#define G_007A38_DACB_AUTODETECT_INT_ENABLE(x) (((x) >> 16) & 0x1) +#define C_007A38_DACB_AUTODETECT_INT_ENABLE 0xFFFCFFFF +#define R_007D00_DC_HOT_PLUG_DETECT1_CONTROL 0x007D00 +#define S_007D00_DC_HOT_PLUG_DETECT1_EN(x) (((x) & 0x1) << 0) +#define G_007D00_DC_HOT_PLUG_DETECT1_EN(x) (((x) >> 0) & 0x1) +#define C_007D00_DC_HOT_PLUG_DETECT1_EN 0xFFFFFFFE +#define R_007D04_DC_HOT_PLUG_DETECT1_INT_STATUS 0x007D04 +#define S_007D04_DC_HOT_PLUG_DETECT1_INT_STATUS(x) (((x) & 0x1) << 0) +#define G_007D04_DC_HOT_PLUG_DETECT1_INT_STATUS(x) (((x) >> 0) & 0x1) +#define C_007D04_DC_HOT_PLUG_DETECT1_INT_STATUS 0xFFFFFFFE +#define S_007D04_DC_HOT_PLUG_DETECT1_SENSE(x) (((x) & 0x1) << 1) +#define G_007D04_DC_HOT_PLUG_DETECT1_SENSE(x) (((x) >> 1) & 0x1) +#define C_007D04_DC_HOT_PLUG_DETECT1_SENSE 0xFFFFFFFD +#define R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL 0x007D08 +#define S_007D08_DC_HOT_PLUG_DETECT1_INT_ACK(x) (((x) & 0x1) << 0) +#define C_007D08_DC_HOT_PLUG_DETECT1_INT_ACK 0xFFFFFFFE +#define S_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY(x) (((x) & 0x1) << 8) +#define G_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY(x) (((x) >> 8) & 0x1) +#define C_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY 0xFFFFFEFF +#define S_007D08_DC_HOT_PLUG_DETECT1_INT_EN(x) (((x) & 0x1) << 16) +#define G_007D08_DC_HOT_PLUG_DETECT1_INT_EN(x) (((x) >> 16) & 0x1) +#define C_007D08_DC_HOT_PLUG_DETECT1_INT_EN 0xFFFEFFFF +#define R_007D10_DC_HOT_PLUG_DETECT2_CONTROL 0x007D10 +#define S_007D10_DC_HOT_PLUG_DETECT2_EN(x) (((x) & 0x1) << 0) +#define G_007D10_DC_HOT_PLUG_DETECT2_EN(x) (((x) >> 0) & 0x1) +#define C_007D10_DC_HOT_PLUG_DETECT2_EN 0xFFFFFFFE +#define R_007D14_DC_HOT_PLUG_DETECT2_INT_STATUS 0x007D14 +#define S_007D14_DC_HOT_PLUG_DETECT2_INT_STATUS(x) (((x) & 0x1) << 0) +#define G_007D14_DC_HOT_PLUG_DETECT2_INT_STATUS(x) (((x) >> 0) & 0x1) +#define C_007D14_DC_HOT_PLUG_DETECT2_INT_STATUS 0xFFFFFFFE +#define S_007D14_DC_HOT_PLUG_DETECT2_SENSE(x) (((x) & 0x1) << 1) +#define G_007D14_DC_HOT_PLUG_DETECT2_SENSE(x) (((x) >> 1) & 0x1) +#define C_007D14_DC_HOT_PLUG_DETECT2_SENSE 0xFFFFFFFD +#define R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL 0x007D18 +#define S_007D18_DC_HOT_PLUG_DETECT2_INT_ACK(x) (((x) & 0x1) << 0) +#define C_007D18_DC_HOT_PLUG_DETECT2_INT_ACK 0xFFFFFFFE +#define S_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY(x) (((x) & 0x1) << 8) +#define G_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY(x) (((x) >> 8) & 0x1) +#define C_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY 0xFFFFFEFF +#define S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x) & 0x1) << 16) +#define G_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x) >> 16) & 0x1) +#define C_007D18_DC_HOT_PLUG_DETECT2_INT_EN 0xFFFEFFFF /* MC registers */ #define R_000000_MC_STATUS 0x000000 --- linux-2.6.32.orig/drivers/gpu/drm/radeon/atom.c +++ linux-2.6.32/drivers/gpu/drm/radeon/atom.c @@ -24,6 +24,7 @@ #include #include +#include #define ATOM_DEBUG @@ -58,6 +59,7 @@ } atom_exec_context; int atom_debug = 0; +static void atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params); void atom_execute_table(struct atom_context *ctx, int index, uint32_t * params); static uint32_t atom_arg_mask[8] = @@ -211,7 +213,9 @@ case ATOM_ARG_PS: idx = U8(*ptr); (*ptr)++; - val = le32_to_cpu(ctx->ps[idx]); + /* get_unaligned_le32 avoids unaligned accesses from atombios + * tables, noticed on a DEC Alpha. */ + val = get_unaligned_le32((u32 *)&ctx->ps[idx]); if (print) DEBUG("PS[0x%02X,0x%04X]", idx, val); break; @@ -245,6 +249,9 @@ case ATOM_WS_ATTRIBUTES: val = gctx->io_attr; break; + case ATOM_WS_REGPTR: + val = gctx->reg_block; + break; default: val = ctx->ws[idx]; } @@ -263,10 +270,10 @@ case ATOM_ARG_FB: idx = U8(*ptr); (*ptr)++; + val = gctx->scratch[((gctx->fb_base + idx) / 4)]; if (print) DEBUG("FB[0x%02X]", idx); - printk(KERN_INFO "FB access is not implemented.\n"); - return 0; + break; case ATOM_ARG_IMM: switch (align) { case ATOM_SRC_DWORD: @@ -384,6 +391,32 @@ return atom_get_src_int(ctx, attr, ptr, NULL, 1); } +static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *ptr) +{ + uint32_t val = 0xCDCDCDCD; + + switch (align) { + case ATOM_SRC_DWORD: + val = U32(*ptr); + (*ptr) += 4; + break; + case ATOM_SRC_WORD0: + case ATOM_SRC_WORD8: + case ATOM_SRC_WORD16: + val = U16(*ptr); + (*ptr) += 2; + break; + case ATOM_SRC_BYTE0: + case ATOM_SRC_BYTE8: + case ATOM_SRC_BYTE16: + case ATOM_SRC_BYTE24: + val = U8(*ptr); + (*ptr)++; + break; + } + return val; +} + static uint32_t atom_get_dst(atom_exec_context *ctx, int arg, uint8_t attr, int *ptr, uint32_t *saved, int print) { @@ -481,6 +514,9 @@ case ATOM_WS_ATTRIBUTES: gctx->io_attr = val; break; + case ATOM_WS_REGPTR: + gctx->reg_block = val; + break; default: ctx->ws[idx] = val; } @@ -488,9 +524,9 @@ case ATOM_ARG_FB: idx = U8(*ptr); (*ptr)++; + gctx->scratch[((gctx->fb_base + idx) / 4)] = val; DEBUG("FB[0x%02X]", idx); - printk(KERN_INFO "FB access is not implemented.\n"); - return; + break; case ATOM_ARG_PLL: idx = U8(*ptr); (*ptr)++; @@ -573,7 +609,7 @@ else SDEBUG(" table: %d\n", idx); if (U16(ctx->ctx->cmd_table + 4 + 2 * idx)) - atom_execute_table(ctx->ctx, idx, ctx->ps + ctx->ps_shift); + atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift); } static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg) @@ -607,7 +643,7 @@ uint8_t count = U8((*ptr)++); SDEBUG(" count: %d\n", count); if (arg == ATOM_UNIT_MICROSEC) - schedule_timeout_uninterruptible(usecs_to_jiffies(count)); + udelay(count); else schedule_timeout_uninterruptible(msecs_to_jiffies(count)); } @@ -676,7 +712,7 @@ SDEBUG(" dst: "); dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); SDEBUG(" src1: "); - src1 = atom_get_src(ctx, attr, ptr); + src1 = atom_get_src_direct(ctx, ((attr >> 3) & 7), ptr); SDEBUG(" src2: "); src2 = atom_get_src(ctx, attr, ptr); dst &= src1; @@ -808,7 +844,7 @@ SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block); } -static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg) +static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg) { uint8_t attr = U8((*ptr)++), shift; uint32_t saved, dst; @@ -817,14 +853,14 @@ attr |= atom_def_dst[attr >> 3] << 6; SDEBUG(" dst: "); dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); - shift = U8((*ptr)++); + shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr); SDEBUG(" shift: %d\n", shift); dst <<= shift; SDEBUG(" dst: "); atom_put_dst(ctx, arg, attr, &dptr, dst, saved); } -static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg) +static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg) { uint8_t attr = U8((*ptr)++), shift; uint32_t saved, dst; @@ -833,13 +869,51 @@ attr |= atom_def_dst[attr >> 3] << 6; SDEBUG(" dst: "); dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); - shift = U8((*ptr)++); + shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr); SDEBUG(" shift: %d\n", shift); dst >>= shift; SDEBUG(" dst: "); atom_put_dst(ctx, arg, attr, &dptr, dst, saved); } +static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg) +{ + uint8_t attr = U8((*ptr)++), shift; + uint32_t saved, dst; + int dptr = *ptr; + uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; + SDEBUG(" dst: "); + dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); + /* op needs to full dst value */ + dst = saved; + shift = atom_get_src(ctx, attr, ptr); + SDEBUG(" shift: %d\n", shift); + dst <<= shift; + dst &= atom_arg_mask[dst_align]; + dst >>= atom_arg_shift[dst_align]; + SDEBUG(" dst: "); + atom_put_dst(ctx, arg, attr, &dptr, dst, saved); +} + +static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg) +{ + uint8_t attr = U8((*ptr)++), shift; + uint32_t saved, dst; + int dptr = *ptr; + uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; + SDEBUG(" dst: "); + dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); + /* op needs to full dst value */ + dst = saved; + shift = atom_get_src(ctx, attr, ptr); + SDEBUG(" shift: %d\n", shift); + dst >>= shift; + dst &= atom_arg_mask[dst_align]; + dst >>= atom_arg_shift[dst_align]; + SDEBUG(" dst: "); + atom_put_dst(ctx, arg, attr, &dptr, dst, saved); +} + static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg) { uint8_t attr = U8((*ptr)++); @@ -936,18 +1010,18 @@ atom_op_or, ATOM_ARG_FB}, { atom_op_or, ATOM_ARG_PLL}, { atom_op_or, ATOM_ARG_MC}, { - atom_op_shl, ATOM_ARG_REG}, { - atom_op_shl, ATOM_ARG_PS}, { - atom_op_shl, ATOM_ARG_WS}, { - atom_op_shl, ATOM_ARG_FB}, { - atom_op_shl, ATOM_ARG_PLL}, { - atom_op_shl, ATOM_ARG_MC}, { - atom_op_shr, ATOM_ARG_REG}, { - atom_op_shr, ATOM_ARG_PS}, { - atom_op_shr, ATOM_ARG_WS}, { - atom_op_shr, ATOM_ARG_FB}, { - atom_op_shr, ATOM_ARG_PLL}, { - atom_op_shr, ATOM_ARG_MC}, { + atom_op_shift_left, ATOM_ARG_REG}, { + atom_op_shift_left, ATOM_ARG_PS}, { + atom_op_shift_left, ATOM_ARG_WS}, { + atom_op_shift_left, ATOM_ARG_FB}, { + atom_op_shift_left, ATOM_ARG_PLL}, { + atom_op_shift_left, ATOM_ARG_MC}, { + atom_op_shift_right, ATOM_ARG_REG}, { + atom_op_shift_right, ATOM_ARG_PS}, { + atom_op_shift_right, ATOM_ARG_WS}, { + atom_op_shift_right, ATOM_ARG_FB}, { + atom_op_shift_right, ATOM_ARG_PLL}, { + atom_op_shift_right, ATOM_ARG_MC}, { atom_op_mul, ATOM_ARG_REG}, { atom_op_mul, ATOM_ARG_PS}, { atom_op_mul, ATOM_ARG_WS}, { @@ -1040,7 +1114,7 @@ atom_op_shr, ATOM_ARG_MC}, { atom_op_debug, 0},}; -void atom_execute_table(struct atom_context *ctx, int index, uint32_t * params) +static void atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params) { int base = CU16(ctx->cmd_table + 4 + 2 * index); int len, ws, ps, ptr; @@ -1057,8 +1131,6 @@ SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps); - /* reset reg block */ - ctx->reg_block = 0; ectx.ctx = ctx; ectx.ps_shift = ps / 4; ectx.start = base; @@ -1092,6 +1164,19 @@ kfree(ectx.ws); } +void atom_execute_table(struct atom_context *ctx, int index, uint32_t * params) +{ + mutex_lock(&ctx->mutex); + /* reset reg block */ + ctx->reg_block = 0; + /* reset fb window */ + ctx->fb_base = 0; + /* reset io mode */ + ctx->io_mode = ATOM_IO_MM; + atom_execute_table_locked(ctx, index, params); + mutex_unlock(&ctx->mutex); +} + static int atom_iio_len[] = { 1, 2, 3, 3, 3, 3, 4, 4, 4, 3 }; static void atom_index_iio(struct atom_context *ctx, int base) @@ -1214,3 +1299,28 @@ *crev = CU8(idx + 3); return; } + +int atom_allocate_fb_scratch(struct atom_context *ctx) +{ + int index = GetIndexIntoMasterTable(DATA, VRAM_UsageByFirmware); + uint16_t data_offset; + int usage_bytes; + struct _ATOM_VRAM_USAGE_BY_FIRMWARE *firmware_usage; + + atom_parse_data_header(ctx, index, NULL, NULL, NULL, &data_offset); + + firmware_usage = (struct _ATOM_VRAM_USAGE_BY_FIRMWARE *)(ctx->bios + data_offset); + + DRM_DEBUG("atom firmware requested %08x %dkb\n", + firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware, + firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb); + + usage_bytes = firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb * 1024; + if (usage_bytes == 0) + usage_bytes = 20 * 1024; + /* allocate some scratch memory */ + ctx->scratch = kzalloc(usage_bytes, GFP_KERNEL); + if (!ctx->scratch) + return -ENOMEM; + return 0; +} --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_display.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_display.c @@ -234,7 +234,7 @@ "INTERNAL_UNIPHY2", }; -static const char *connector_names[13] = { +static const char *connector_names[15] = { "Unknown", "VGA", "DVI-I", @@ -248,6 +248,18 @@ "DisplayPort", "HDMI-A", "HDMI-B", + "TV", + "eDP", +}; + +static const char *hpd_names[7] = { + "NONE", + "HPD1", + "HPD2", + "HPD3", + "HPD4", + "HPD5", + "HPD6", }; static void radeon_print_display_setup(struct drm_device *dev) @@ -264,16 +276,27 @@ radeon_connector = to_radeon_connector(connector); DRM_INFO("Connector %d:\n", i); DRM_INFO(" %s\n", connector_names[connector->connector_type]); - if (radeon_connector->ddc_bus) + if (radeon_connector->hpd.hpd != RADEON_HPD_NONE) + DRM_INFO(" %s\n", hpd_names[radeon_connector->hpd.hpd]); + if (radeon_connector->ddc_bus) { DRM_INFO(" DDC: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", radeon_connector->ddc_bus->rec.mask_clk_reg, radeon_connector->ddc_bus->rec.mask_data_reg, radeon_connector->ddc_bus->rec.a_clk_reg, radeon_connector->ddc_bus->rec.a_data_reg, - radeon_connector->ddc_bus->rec.put_clk_reg, - radeon_connector->ddc_bus->rec.put_data_reg, - radeon_connector->ddc_bus->rec.get_clk_reg, - radeon_connector->ddc_bus->rec.get_data_reg); + radeon_connector->ddc_bus->rec.en_clk_reg, + radeon_connector->ddc_bus->rec.en_data_reg, + radeon_connector->ddc_bus->rec.y_clk_reg, + radeon_connector->ddc_bus->rec.y_data_reg); + } else { + if (connector->connector_type == DRM_MODE_CONNECTOR_VGA || + connector->connector_type == DRM_MODE_CONNECTOR_DVII || + connector->connector_type == DRM_MODE_CONNECTOR_DVID || + connector->connector_type == DRM_MODE_CONNECTOR_DVIA || + connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || + connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) + DRM_INFO(" DDC: no ddc bus - possible BIOS bug - please report to xorg-driver-ati@lists.x.org\n"); + } DRM_INFO(" Encoders:\n"); list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { radeon_encoder = to_radeon_encoder(encoder); @@ -317,13 +340,17 @@ ret = radeon_get_atom_connector_info_from_object_table(dev); else ret = radeon_get_atom_connector_info_from_supported_devices_table(dev); - } else + } else { ret = radeon_get_legacy_connector_info_from_bios(dev); + if (ret == false) + ret = radeon_get_legacy_connector_info_from_table(dev); + } } else { if (!ASIC_IS_AVIVO(rdev)) ret = radeon_get_legacy_connector_info_from_table(dev); } if (ret) { + radeon_setup_encoder_clones(dev); radeon_print_display_setup(dev); list_for_each_entry(drm_connector, &dev->mode_config.connector_list, head) radeon_ddc_dump(drm_connector); @@ -336,12 +363,19 @@ { int ret = 0; + if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || + (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) { + struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; + if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || + dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && dig->dp_i2c_bus) + radeon_connector->edid = drm_get_edid(&radeon_connector->base, &dig->dp_i2c_bus->adapter); + } if (!radeon_connector->ddc_bus) return -1; if (!radeon_connector->edid) { - radeon_i2c_do_lock(radeon_connector, 1); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); - radeon_i2c_do_lock(radeon_connector, 0); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); } if (radeon_connector->edid) { @@ -361,9 +395,9 @@ if (!radeon_connector->ddc_bus) return -1; - radeon_i2c_do_lock(radeon_connector, 1); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); edid = drm_get_edid(connector, &radeon_connector->ddc_bus->adapter); - radeon_i2c_do_lock(radeon_connector, 0); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); if (edid) { kfree(edid); } @@ -380,17 +414,18 @@ return n; } -void radeon_compute_pll(struct radeon_pll *pll, - uint64_t freq, - uint32_t *dot_clock_p, - uint32_t *fb_div_p, - uint32_t *frac_fb_div_p, - uint32_t *ref_div_p, - uint32_t *post_div_p, - int flags) +static void radeon_compute_pll_legacy(struct radeon_pll *pll, + uint64_t freq, + uint32_t *dot_clock_p, + uint32_t *fb_div_p, + uint32_t *frac_fb_div_p, + uint32_t *ref_div_p, + uint32_t *post_div_p) { uint32_t min_ref_div = pll->min_ref_div; uint32_t max_ref_div = pll->max_ref_div; + uint32_t min_post_div = pll->min_post_div; + uint32_t max_post_div = pll->max_post_div; uint32_t min_fractional_feed_div = 0; uint32_t max_fractional_feed_div = 0; uint32_t best_vco = pll->best_vco; @@ -406,7 +441,7 @@ DRM_DEBUG("PLL freq %llu %u %u\n", freq, pll->min_ref_div, pll->max_ref_div); freq = freq * 1000; - if (flags & RADEON_PLL_USE_REF_DIV) + if (pll->flags & RADEON_PLL_USE_REF_DIV) min_ref_div = max_ref_div = pll->reference_div; else { while (min_ref_div < max_ref_div-1) { @@ -421,19 +456,22 @@ } } - if (flags & RADEON_PLL_USE_FRAC_FB_DIV) { + if (pll->flags & RADEON_PLL_USE_POST_DIV) + min_post_div = max_post_div = pll->post_div; + + if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) { min_fractional_feed_div = pll->min_frac_feedback_div; max_fractional_feed_div = pll->max_frac_feedback_div; } - for (post_div = pll->min_post_div; post_div <= pll->max_post_div; ++post_div) { + for (post_div = min_post_div; post_div <= max_post_div; ++post_div) { uint32_t ref_div; - if ((flags & RADEON_PLL_NO_ODD_POST_DIV) && (post_div & 1)) + if ((pll->flags & RADEON_PLL_NO_ODD_POST_DIV) && (post_div & 1)) continue; /* legacy radeons only have a few post_divs */ - if (flags & RADEON_PLL_LEGACY) { + if (pll->flags & RADEON_PLL_LEGACY) { if ((post_div == 5) || (post_div == 7) || (post_div == 9) || @@ -480,7 +518,7 @@ tmp += (uint64_t)pll->reference_freq * 1000 * frac_feedback_div; current_freq = radeon_div(tmp, ref_div * post_div); - if (flags & RADEON_PLL_PREFER_CLOSEST_LOWER) { + if (pll->flags & RADEON_PLL_PREFER_CLOSEST_LOWER) { error = freq - current_freq; error = error < 0 ? 0xffffffff : error; } else @@ -507,12 +545,12 @@ best_freq = current_freq; best_error = error; best_vco_diff = vco_diff; - } else if (((flags & RADEON_PLL_PREFER_LOW_REF_DIV) && (ref_div < best_ref_div)) || - ((flags & RADEON_PLL_PREFER_HIGH_REF_DIV) && (ref_div > best_ref_div)) || - ((flags & RADEON_PLL_PREFER_LOW_FB_DIV) && (feedback_div < best_feedback_div)) || - ((flags & RADEON_PLL_PREFER_HIGH_FB_DIV) && (feedback_div > best_feedback_div)) || - ((flags & RADEON_PLL_PREFER_LOW_POST_DIV) && (post_div < best_post_div)) || - ((flags & RADEON_PLL_PREFER_HIGH_POST_DIV) && (post_div > best_post_div))) { + } else if (((pll->flags & RADEON_PLL_PREFER_LOW_REF_DIV) && (ref_div < best_ref_div)) || + ((pll->flags & RADEON_PLL_PREFER_HIGH_REF_DIV) && (ref_div > best_ref_div)) || + ((pll->flags & RADEON_PLL_PREFER_LOW_FB_DIV) && (feedback_div < best_feedback_div)) || + ((pll->flags & RADEON_PLL_PREFER_HIGH_FB_DIV) && (feedback_div > best_feedback_div)) || + ((pll->flags & RADEON_PLL_PREFER_LOW_POST_DIV) && (post_div < best_post_div)) || + ((pll->flags & RADEON_PLL_PREFER_HIGH_POST_DIV) && (post_div > best_post_div))) { best_post_div = post_div; best_ref_div = ref_div; best_feedback_div = feedback_div; @@ -542,6 +580,196 @@ *post_div_p = best_post_div; } +static bool +calc_fb_div(struct radeon_pll *pll, + uint32_t freq, + uint32_t post_div, + uint32_t ref_div, + uint32_t *fb_div, + uint32_t *fb_div_frac) +{ + fixed20_12 feedback_divider, a, b; + u32 vco_freq; + + vco_freq = freq * post_div; + /* feedback_divider = vco_freq * ref_div / pll->reference_freq; */ + a.full = rfixed_const(pll->reference_freq); + feedback_divider.full = rfixed_const(vco_freq); + feedback_divider.full = rfixed_div(feedback_divider, a); + a.full = rfixed_const(ref_div); + feedback_divider.full = rfixed_mul(feedback_divider, a); + + if (pll->flags & RADEON_PLL_USE_FRAC_FB_DIV) { + /* feedback_divider = floor((feedback_divider * 10.0) + 0.5) * 0.1; */ + a.full = rfixed_const(10); + feedback_divider.full = rfixed_mul(feedback_divider, a); + feedback_divider.full += rfixed_const_half(0); + feedback_divider.full = rfixed_floor(feedback_divider); + feedback_divider.full = rfixed_div(feedback_divider, a); + + /* *fb_div = floor(feedback_divider); */ + a.full = rfixed_floor(feedback_divider); + *fb_div = rfixed_trunc(a); + /* *fb_div_frac = fmod(feedback_divider, 1.0) * 10.0; */ + a.full = rfixed_const(10); + b.full = rfixed_mul(feedback_divider, a); + + feedback_divider.full = rfixed_floor(feedback_divider); + feedback_divider.full = rfixed_mul(feedback_divider, a); + feedback_divider.full = b.full - feedback_divider.full; + *fb_div_frac = rfixed_trunc(feedback_divider); + } else { + /* *fb_div = floor(feedback_divider + 0.5); */ + feedback_divider.full += rfixed_const_half(0); + feedback_divider.full = rfixed_floor(feedback_divider); + + *fb_div = rfixed_trunc(feedback_divider); + *fb_div_frac = 0; + } + + if (((*fb_div) < pll->min_feedback_div) || ((*fb_div) > pll->max_feedback_div)) + return false; + else + return true; +} + +static bool +calc_fb_ref_div(struct radeon_pll *pll, + uint32_t freq, + uint32_t post_div, + uint32_t *fb_div, + uint32_t *fb_div_frac, + uint32_t *ref_div) +{ + fixed20_12 ffreq, max_error, error, pll_out, a; + u32 vco; + + ffreq.full = rfixed_const(freq); + /* max_error = ffreq * 0.0025; */ + a.full = rfixed_const(400); + max_error.full = rfixed_div(ffreq, a); + + for ((*ref_div) = pll->min_ref_div; (*ref_div) < pll->max_ref_div; ++(*ref_div)) { + if (calc_fb_div(pll, freq, post_div, (*ref_div), fb_div, fb_div_frac)) { + vco = pll->reference_freq * (((*fb_div) * 10) + (*fb_div_frac)); + vco = vco / ((*ref_div) * 10); + + if ((vco < pll->pll_out_min) || (vco > pll->pll_out_max)) + continue; + + /* pll_out = vco / post_div; */ + a.full = rfixed_const(post_div); + pll_out.full = rfixed_const(vco); + pll_out.full = rfixed_div(pll_out, a); + + if (pll_out.full >= ffreq.full) { + error.full = pll_out.full - ffreq.full; + if (error.full <= max_error.full) + return true; + } + } + } + return false; +} + +static void radeon_compute_pll_new(struct radeon_pll *pll, + uint64_t freq, + uint32_t *dot_clock_p, + uint32_t *fb_div_p, + uint32_t *frac_fb_div_p, + uint32_t *ref_div_p, + uint32_t *post_div_p) +{ + u32 fb_div = 0, fb_div_frac = 0, post_div = 0, ref_div = 0; + u32 best_freq = 0, vco_frequency; + + /* freq = freq / 10; */ + do_div(freq, 10); + + if (pll->flags & RADEON_PLL_USE_POST_DIV) { + post_div = pll->post_div; + if ((post_div < pll->min_post_div) || (post_div > pll->max_post_div)) + goto done; + + vco_frequency = freq * post_div; + if ((vco_frequency < pll->pll_out_min) || (vco_frequency > pll->pll_out_max)) + goto done; + + if (pll->flags & RADEON_PLL_USE_REF_DIV) { + ref_div = pll->reference_div; + if ((ref_div < pll->min_ref_div) || (ref_div > pll->max_ref_div)) + goto done; + if (!calc_fb_div(pll, freq, post_div, ref_div, &fb_div, &fb_div_frac)) + goto done; + } + } else { + for (post_div = pll->max_post_div; post_div >= pll->min_post_div; --post_div) { + if (pll->flags & RADEON_PLL_LEGACY) { + if ((post_div == 5) || + (post_div == 7) || + (post_div == 9) || + (post_div == 10) || + (post_div == 11)) + continue; + } + + if ((pll->flags & RADEON_PLL_NO_ODD_POST_DIV) && (post_div & 1)) + continue; + + vco_frequency = freq * post_div; + if ((vco_frequency < pll->pll_out_min) || (vco_frequency > pll->pll_out_max)) + continue; + if (pll->flags & RADEON_PLL_USE_REF_DIV) { + ref_div = pll->reference_div; + if ((ref_div < pll->min_ref_div) || (ref_div > pll->max_ref_div)) + goto done; + if (calc_fb_div(pll, freq, post_div, ref_div, &fb_div, &fb_div_frac)) + break; + } else { + if (calc_fb_ref_div(pll, freq, post_div, &fb_div, &fb_div_frac, &ref_div)) + break; + } + } + } + + best_freq = pll->reference_freq * 10 * fb_div; + best_freq += pll->reference_freq * fb_div_frac; + best_freq = best_freq / (ref_div * post_div); + +done: + if (best_freq == 0) + DRM_ERROR("Couldn't find valid PLL dividers\n"); + + *dot_clock_p = best_freq / 10; + *fb_div_p = fb_div; + *frac_fb_div_p = fb_div_frac; + *ref_div_p = ref_div; + *post_div_p = post_div; + + DRM_DEBUG("%u %d.%d, %d, %d\n", *dot_clock_p, *fb_div_p, *frac_fb_div_p, *ref_div_p, *post_div_p); +} + +void radeon_compute_pll(struct radeon_pll *pll, + uint64_t freq, + uint32_t *dot_clock_p, + uint32_t *fb_div_p, + uint32_t *frac_fb_div_p, + uint32_t *ref_div_p, + uint32_t *post_div_p) +{ + switch (pll->algo) { + case PLL_ALGO_NEW: + radeon_compute_pll_new(pll, freq, dot_clock_p, fb_div_p, + frac_fb_div_p, ref_div_p, post_div_p); + break; + case PLL_ALGO_LEGACY: + default: + radeon_compute_pll_legacy(pll, freq, dot_clock_p, fb_div_p, + frac_fb_div_p, ref_div_p, post_div_p); + break; + } +} + static void radeon_user_framebuffer_destroy(struct drm_framebuffer *fb) { struct radeon_framebuffer *radeon_fb = to_radeon_framebuffer(fb); @@ -551,7 +779,6 @@ radeonfb_remove(dev, fb); if (radeon_fb->obj) { - radeon_gem_object_unpin(radeon_fb->obj); mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(radeon_fb->obj); mutex_unlock(&dev->struct_mutex); @@ -599,7 +826,11 @@ struct drm_gem_object *obj; obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle); - + if (obj == NULL) { + dev_err(&dev->pdev->dev, "No GEM object associated to handle 0x%08X, " + "can't create framebuffer\n", mode_cmd->handle); + return NULL; + } return radeon_framebuffer_create(dev, mode_cmd, obj); } @@ -629,7 +860,7 @@ { TV_STD_SECAM, "secam" }, }; -int radeon_modeset_create_props(struct radeon_device *rdev) +static int radeon_modeset_create_props(struct radeon_device *rdev) { int i, sz; @@ -642,7 +873,7 @@ return -ENOMEM; rdev->mode_info.coherent_mode_property->values[0] = 0; - rdev->mode_info.coherent_mode_property->values[0] = 1; + rdev->mode_info.coherent_mode_property->values[1] = 1; } if (!ASIC_IS_AVIVO(rdev)) { @@ -666,7 +897,7 @@ if (!rdev->mode_info.load_detect_property) return -ENOMEM; rdev->mode_info.load_detect_property->values[0] = 0; - rdev->mode_info.load_detect_property->values[0] = 1; + rdev->mode_info.load_detect_property->values[1] = 1; drm_mode_create_scaling_mode_property(rdev->ddev); @@ -723,6 +954,8 @@ if (!ret) { return ret; } + /* initialize hpd */ + radeon_hpd_init(rdev); drm_helper_initial_config(rdev->ddev); return 0; } @@ -730,6 +963,7 @@ void radeon_modeset_fini(struct radeon_device *rdev) { if (rdev->mode_info.mode_config_initialized) { + radeon_hpd_fini(rdev); drm_mode_config_cleanup(rdev->ddev); rdev->mode_info.mode_config_initialized = false; } @@ -750,9 +984,17 @@ if (encoder->crtc != crtc) continue; if (first) { - radeon_crtc->rmx_type = radeon_encoder->rmx_type; + /* set scaling */ + if (radeon_encoder->rmx_type == RMX_OFF) + radeon_crtc->rmx_type = RMX_OFF; + else if (mode->hdisplay < radeon_encoder->native_mode.hdisplay || + mode->vdisplay < radeon_encoder->native_mode.vdisplay) + radeon_crtc->rmx_type = radeon_encoder->rmx_type; + else + radeon_crtc->rmx_type = RMX_OFF; + /* copy native mode */ memcpy(&radeon_crtc->native_mode, - &radeon_encoder->native_mode, + &radeon_encoder->native_mode, sizeof(struct drm_display_mode)); first = false; } else { --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600d.h +++ linux-2.6.32/drivers/gpu/drm/radeon/r600d.h @@ -456,7 +456,215 @@ #define WAIT_2D_IDLECLEAN_bit (1 << 16) #define WAIT_3D_IDLECLEAN_bit (1 << 17) +#define IH_RB_CNTL 0x3e00 +# define IH_RB_ENABLE (1 << 0) +# define IH_IB_SIZE(x) ((x) << 1) /* log2 */ +# define IH_RB_FULL_DRAIN_ENABLE (1 << 6) +# define IH_WPTR_WRITEBACK_ENABLE (1 << 8) +# define IH_WPTR_WRITEBACK_TIMER(x) ((x) << 9) /* log2 */ +# define IH_WPTR_OVERFLOW_ENABLE (1 << 16) +# define IH_WPTR_OVERFLOW_CLEAR (1 << 31) +#define IH_RB_BASE 0x3e04 +#define IH_RB_RPTR 0x3e08 +#define IH_RB_WPTR 0x3e0c +# define RB_OVERFLOW (1 << 0) +# define WPTR_OFFSET_MASK 0x3fffc +#define IH_RB_WPTR_ADDR_HI 0x3e10 +#define IH_RB_WPTR_ADDR_LO 0x3e14 +#define IH_CNTL 0x3e18 +# define ENABLE_INTR (1 << 0) +# define IH_MC_SWAP(x) ((x) << 2) +# define IH_MC_SWAP_NONE 0 +# define IH_MC_SWAP_16BIT 1 +# define IH_MC_SWAP_32BIT 2 +# define IH_MC_SWAP_64BIT 3 +# define RPTR_REARM (1 << 4) +# define MC_WRREQ_CREDIT(x) ((x) << 15) +# define MC_WR_CLEAN_CNT(x) ((x) << 20) +#define RLC_CNTL 0x3f00 +# define RLC_ENABLE (1 << 0) +#define RLC_HB_BASE 0x3f10 +#define RLC_HB_CNTL 0x3f0c +#define RLC_HB_RPTR 0x3f20 +#define RLC_HB_WPTR 0x3f1c +#define RLC_HB_WPTR_LSB_ADDR 0x3f14 +#define RLC_HB_WPTR_MSB_ADDR 0x3f18 +#define RLC_MC_CNTL 0x3f44 +#define RLC_UCODE_CNTL 0x3f48 +#define RLC_UCODE_ADDR 0x3f2c +#define RLC_UCODE_DATA 0x3f30 + +#define SRBM_SOFT_RESET 0xe60 +# define SOFT_RESET_RLC (1 << 13) + +#define CP_INT_CNTL 0xc124 +# define CNTX_BUSY_INT_ENABLE (1 << 19) +# define CNTX_EMPTY_INT_ENABLE (1 << 20) +# define SCRATCH_INT_ENABLE (1 << 25) +# define TIME_STAMP_INT_ENABLE (1 << 26) +# define IB2_INT_ENABLE (1 << 29) +# define IB1_INT_ENABLE (1 << 30) +# define RB_INT_ENABLE (1 << 31) +#define CP_INT_STATUS 0xc128 +# define SCRATCH_INT_STAT (1 << 25) +# define TIME_STAMP_INT_STAT (1 << 26) +# define IB2_INT_STAT (1 << 29) +# define IB1_INT_STAT (1 << 30) +# define RB_INT_STAT (1 << 31) + +#define GRBM_INT_CNTL 0x8060 +# define RDERR_INT_ENABLE (1 << 0) +# define WAIT_COUNT_TIMEOUT_INT_ENABLE (1 << 1) +# define GUI_IDLE_INT_ENABLE (1 << 19) + +#define INTERRUPT_CNTL 0x5468 +# define IH_DUMMY_RD_OVERRIDE (1 << 0) +# define IH_DUMMY_RD_EN (1 << 1) +# define IH_REQ_NONSNOOP_EN (1 << 3) +# define GEN_IH_INT_EN (1 << 8) +#define INTERRUPT_CNTL2 0x546c + +#define D1MODE_VBLANK_STATUS 0x6534 +#define D2MODE_VBLANK_STATUS 0x6d34 +# define DxMODE_VBLANK_OCCURRED (1 << 0) +# define DxMODE_VBLANK_ACK (1 << 4) +# define DxMODE_VBLANK_STAT (1 << 12) +# define DxMODE_VBLANK_INTERRUPT (1 << 16) +# define DxMODE_VBLANK_INTERRUPT_TYPE (1 << 17) +#define D1MODE_VLINE_STATUS 0x653c +#define D2MODE_VLINE_STATUS 0x6d3c +# define DxMODE_VLINE_OCCURRED (1 << 0) +# define DxMODE_VLINE_ACK (1 << 4) +# define DxMODE_VLINE_STAT (1 << 12) +# define DxMODE_VLINE_INTERRUPT (1 << 16) +# define DxMODE_VLINE_INTERRUPT_TYPE (1 << 17) +#define DxMODE_INT_MASK 0x6540 +# define D1MODE_VBLANK_INT_MASK (1 << 0) +# define D1MODE_VLINE_INT_MASK (1 << 4) +# define D2MODE_VBLANK_INT_MASK (1 << 8) +# define D2MODE_VLINE_INT_MASK (1 << 12) +#define DCE3_DISP_INTERRUPT_STATUS 0x7ddc +# define DC_HPD1_INTERRUPT (1 << 18) +# define DC_HPD2_INTERRUPT (1 << 19) +#define DISP_INTERRUPT_STATUS 0x7edc +# define LB_D1_VLINE_INTERRUPT (1 << 2) +# define LB_D2_VLINE_INTERRUPT (1 << 3) +# define LB_D1_VBLANK_INTERRUPT (1 << 4) +# define LB_D2_VBLANK_INTERRUPT (1 << 5) +# define DACA_AUTODETECT_INTERRUPT (1 << 16) +# define DACB_AUTODETECT_INTERRUPT (1 << 17) +# define DC_HOT_PLUG_DETECT1_INTERRUPT (1 << 18) +# define DC_HOT_PLUG_DETECT2_INTERRUPT (1 << 19) +# define DC_I2C_SW_DONE_INTERRUPT (1 << 20) +# define DC_I2C_HW_DONE_INTERRUPT (1 << 21) +#define DISP_INTERRUPT_STATUS_CONTINUE 0x7ee8 +#define DCE3_DISP_INTERRUPT_STATUS_CONTINUE 0x7de8 +# define DC_HPD4_INTERRUPT (1 << 14) +# define DC_HPD4_RX_INTERRUPT (1 << 15) +# define DC_HPD3_INTERRUPT (1 << 28) +# define DC_HPD1_RX_INTERRUPT (1 << 29) +# define DC_HPD2_RX_INTERRUPT (1 << 30) +#define DCE3_DISP_INTERRUPT_STATUS_CONTINUE2 0x7dec +# define DC_HPD3_RX_INTERRUPT (1 << 0) +# define DIGA_DP_VID_STREAM_DISABLE_INTERRUPT (1 << 1) +# define DIGA_DP_STEER_FIFO_OVERFLOW_INTERRUPT (1 << 2) +# define DIGB_DP_VID_STREAM_DISABLE_INTERRUPT (1 << 3) +# define DIGB_DP_STEER_FIFO_OVERFLOW_INTERRUPT (1 << 4) +# define AUX1_SW_DONE_INTERRUPT (1 << 5) +# define AUX1_LS_DONE_INTERRUPT (1 << 6) +# define AUX2_SW_DONE_INTERRUPT (1 << 7) +# define AUX2_LS_DONE_INTERRUPT (1 << 8) +# define AUX3_SW_DONE_INTERRUPT (1 << 9) +# define AUX3_LS_DONE_INTERRUPT (1 << 10) +# define AUX4_SW_DONE_INTERRUPT (1 << 11) +# define AUX4_LS_DONE_INTERRUPT (1 << 12) +# define DIGA_DP_FAST_TRAINING_COMPLETE_INTERRUPT (1 << 13) +# define DIGB_DP_FAST_TRAINING_COMPLETE_INTERRUPT (1 << 14) +/* DCE 3.2 */ +# define AUX5_SW_DONE_INTERRUPT (1 << 15) +# define AUX5_LS_DONE_INTERRUPT (1 << 16) +# define AUX6_SW_DONE_INTERRUPT (1 << 17) +# define AUX6_LS_DONE_INTERRUPT (1 << 18) +# define DC_HPD5_INTERRUPT (1 << 19) +# define DC_HPD5_RX_INTERRUPT (1 << 20) +# define DC_HPD6_INTERRUPT (1 << 21) +# define DC_HPD6_RX_INTERRUPT (1 << 22) + +#define DACA_AUTO_DETECT_CONTROL 0x7828 +#define DACB_AUTO_DETECT_CONTROL 0x7a28 +#define DCE3_DACA_AUTO_DETECT_CONTROL 0x7028 +#define DCE3_DACB_AUTO_DETECT_CONTROL 0x7128 +# define DACx_AUTODETECT_MODE(x) ((x) << 0) +# define DACx_AUTODETECT_MODE_NONE 0 +# define DACx_AUTODETECT_MODE_CONNECT 1 +# define DACx_AUTODETECT_MODE_DISCONNECT 2 +# define DACx_AUTODETECT_FRAME_TIME_COUNTER(x) ((x) << 8) +/* bit 18 = R/C, 17 = G/Y, 16 = B/Comp */ +# define DACx_AUTODETECT_CHECK_MASK(x) ((x) << 16) + +#define DCE3_DACA_AUTODETECT_INT_CONTROL 0x7038 +#define DCE3_DACB_AUTODETECT_INT_CONTROL 0x7138 +#define DACA_AUTODETECT_INT_CONTROL 0x7838 +#define DACB_AUTODETECT_INT_CONTROL 0x7a38 +# define DACx_AUTODETECT_ACK (1 << 0) +# define DACx_AUTODETECT_INT_ENABLE (1 << 16) + +#define DC_HOT_PLUG_DETECT1_CONTROL 0x7d00 +#define DC_HOT_PLUG_DETECT2_CONTROL 0x7d10 +#define DC_HOT_PLUG_DETECT3_CONTROL 0x7d24 +# define DC_HOT_PLUG_DETECTx_EN (1 << 0) + +#define DC_HOT_PLUG_DETECT1_INT_STATUS 0x7d04 +#define DC_HOT_PLUG_DETECT2_INT_STATUS 0x7d14 +#define DC_HOT_PLUG_DETECT3_INT_STATUS 0x7d28 +# define DC_HOT_PLUG_DETECTx_INT_STATUS (1 << 0) +# define DC_HOT_PLUG_DETECTx_SENSE (1 << 1) + +/* DCE 3.0 */ +#define DC_HPD1_INT_STATUS 0x7d00 +#define DC_HPD2_INT_STATUS 0x7d0c +#define DC_HPD3_INT_STATUS 0x7d18 +#define DC_HPD4_INT_STATUS 0x7d24 +/* DCE 3.2 */ +#define DC_HPD5_INT_STATUS 0x7dc0 +#define DC_HPD6_INT_STATUS 0x7df4 +# define DC_HPDx_INT_STATUS (1 << 0) +# define DC_HPDx_SENSE (1 << 1) +# define DC_HPDx_RX_INT_STATUS (1 << 8) + +#define DC_HOT_PLUG_DETECT1_INT_CONTROL 0x7d08 +#define DC_HOT_PLUG_DETECT2_INT_CONTROL 0x7d18 +#define DC_HOT_PLUG_DETECT3_INT_CONTROL 0x7d2c +# define DC_HOT_PLUG_DETECTx_INT_ACK (1 << 0) +# define DC_HOT_PLUG_DETECTx_INT_POLARITY (1 << 8) +# define DC_HOT_PLUG_DETECTx_INT_EN (1 << 16) +/* DCE 3.0 */ +#define DC_HPD1_INT_CONTROL 0x7d04 +#define DC_HPD2_INT_CONTROL 0x7d10 +#define DC_HPD3_INT_CONTROL 0x7d1c +#define DC_HPD4_INT_CONTROL 0x7d28 +/* DCE 3.2 */ +#define DC_HPD5_INT_CONTROL 0x7dc4 +#define DC_HPD6_INT_CONTROL 0x7df8 +# define DC_HPDx_INT_ACK (1 << 0) +# define DC_HPDx_INT_POLARITY (1 << 8) +# define DC_HPDx_INT_EN (1 << 16) +# define DC_HPDx_RX_INT_ACK (1 << 20) +# define DC_HPDx_RX_INT_EN (1 << 24) + +/* DCE 3.0 */ +#define DC_HPD1_CONTROL 0x7d08 +#define DC_HPD2_CONTROL 0x7d14 +#define DC_HPD3_CONTROL 0x7d20 +#define DC_HPD4_CONTROL 0x7d2c +/* DCE 3.2 */ +#define DC_HPD5_CONTROL 0x7dc8 +#define DC_HPD6_CONTROL 0x7dfc +# define DC_HPDx_CONNECTION_TIMER(x) ((x) << 0) +# define DC_HPDx_RX_INT_TIMER(x) ((x) << 16) +/* DCE 3.2 */ +# define DC_HPDx_EN (1 << 28) /* * PM4 @@ -500,7 +708,6 @@ #define PACKET3_WAIT_REG_MEM 0x3C #define PACKET3_MEM_WRITE 0x3D #define PACKET3_INDIRECT_BUFFER 0x32 -#define PACKET3_CP_INTERRUPT 0x40 #define PACKET3_SURFACE_SYNC 0x43 # define PACKET3_CB0_DEST_BASE_ENA (1 << 6) # define PACKET3_TC_ACTION_ENA (1 << 23) @@ -674,4 +881,30 @@ #define S_000E60_SOFT_RESET_TSC(x) (((x) & 1) << 16) #define S_000E60_SOFT_RESET_VMC(x) (((x) & 1) << 17) +#define R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL 0x5480 + +#define R_0280E0_CB_COLOR0_FRAG 0x0280E0 +#define S_0280E0_BASE_256B(x) (((x) & 0xFFFFFFFF) << 0) +#define G_0280E0_BASE_256B(x) (((x) >> 0) & 0xFFFFFFFF) +#define C_0280E0_BASE_256B 0x00000000 +#define R_0280E4_CB_COLOR1_FRAG 0x0280E4 +#define R_0280E8_CB_COLOR2_FRAG 0x0280E8 +#define R_0280EC_CB_COLOR3_FRAG 0x0280EC +#define R_0280F0_CB_COLOR4_FRAG 0x0280F0 +#define R_0280F4_CB_COLOR5_FRAG 0x0280F4 +#define R_0280F8_CB_COLOR6_FRAG 0x0280F8 +#define R_0280FC_CB_COLOR7_FRAG 0x0280FC +#define R_0280C0_CB_COLOR0_TILE 0x0280C0 +#define S_0280C0_BASE_256B(x) (((x) & 0xFFFFFFFF) << 0) +#define G_0280C0_BASE_256B(x) (((x) >> 0) & 0xFFFFFFFF) +#define C_0280C0_BASE_256B 0x00000000 +#define R_0280C4_CB_COLOR1_TILE 0x0280C4 +#define R_0280C8_CB_COLOR2_TILE 0x0280C8 +#define R_0280CC_CB_COLOR3_TILE 0x0280CC +#define R_0280D0_CB_COLOR4_TILE 0x0280D0 +#define R_0280D4_CB_COLOR5_TILE 0x0280D4 +#define R_0280D8_CB_COLOR6_TILE 0x0280D8 +#define R_0280DC_CB_COLOR7_TILE 0x0280DC + + #endif --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_legacy_crtc.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_legacy_crtc.c @@ -30,9 +30,20 @@ #include "radeon.h" #include "atom.h" +static void radeon_overscan_setup(struct drm_crtc *crtc, + struct drm_display_mode *mode) +{ + struct drm_device *dev = crtc->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); + + WREG32(RADEON_OVR_CLR + radeon_crtc->crtc_offset, 0); + WREG32(RADEON_OVR_WID_LEFT_RIGHT + radeon_crtc->crtc_offset, 0); + WREG32(RADEON_OVR_WID_TOP_BOTTOM + radeon_crtc->crtc_offset, 0); +} + static void radeon_legacy_rmx_mode_set(struct drm_crtc *crtc, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) + struct drm_display_mode *mode) { struct drm_device *dev = crtc->dev; struct radeon_device *rdev = dev->dev_private; @@ -292,8 +303,7 @@ uint32_t mask; if (radeon_crtc->crtc_id) - mask = (RADEON_CRTC2_EN | - RADEON_CRTC2_DISP_DIS | + mask = (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS | RADEON_CRTC2_HSYNC_DIS | RADEON_CRTC2_DISP_REQ_EN_B); @@ -305,7 +315,7 @@ switch (mode) { case DRM_MODE_DPMS_ON: if (radeon_crtc->crtc_id) - WREG32_P(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_EN, ~mask); + WREG32_P(RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_EN, ~(RADEON_CRTC2_EN | mask)); else { WREG32_P(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_EN, ~(RADEON_CRTC_EN | RADEON_CRTC_DISP_REQ_EN_B)); @@ -319,7 +329,7 @@ case DRM_MODE_DPMS_OFF: drm_vblank_pre_modeset(dev, radeon_crtc->crtc_id); if (radeon_crtc->crtc_id) - WREG32_P(RADEON_CRTC2_GEN_CNTL, mask, ~mask); + WREG32_P(RADEON_CRTC2_GEN_CNTL, mask, ~(RADEON_CRTC2_EN | mask)); else { WREG32_P(RADEON_CRTC_GEN_CNTL, RADEON_CRTC_DISP_REQ_EN_B, ~(RADEON_CRTC_EN | RADEON_CRTC_DISP_REQ_EN_B)); @@ -329,69 +339,6 @@ } } -/* properly set crtc bpp when using atombios */ -void radeon_legacy_atom_set_surface(struct drm_crtc *crtc) -{ - struct drm_device *dev = crtc->dev; - struct radeon_device *rdev = dev->dev_private; - struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); - int format; - uint32_t crtc_gen_cntl; - uint32_t disp_merge_cntl; - uint32_t crtc_pitch; - - switch (crtc->fb->bits_per_pixel) { - case 8: - format = 2; - break; - case 15: /* 555 */ - format = 3; - break; - case 16: /* 565 */ - format = 4; - break; - case 24: /* RGB */ - format = 5; - break; - case 32: /* xRGB */ - format = 6; - break; - default: - return; - } - - crtc_pitch = ((((crtc->fb->pitch / (crtc->fb->bits_per_pixel / 8)) * crtc->fb->bits_per_pixel) + - ((crtc->fb->bits_per_pixel * 8) - 1)) / - (crtc->fb->bits_per_pixel * 8)); - crtc_pitch |= crtc_pitch << 16; - - WREG32(RADEON_CRTC_PITCH + radeon_crtc->crtc_offset, crtc_pitch); - - switch (radeon_crtc->crtc_id) { - case 0: - disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL); - disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN; - WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl); - - crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL) & 0xfffff0ff; - crtc_gen_cntl |= (format << 8); - crtc_gen_cntl |= RADEON_CRTC_EXT_DISP_EN; - WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl); - break; - case 1: - disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL); - disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN; - WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl); - - crtc_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL) & 0xfffff0ff; - crtc_gen_cntl |= (format << 8); - WREG32(RADEON_CRTC2_GEN_CNTL, crtc_gen_cntl); - WREG32(RADEON_FP_H2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_H_SYNC_STRT_WID)); - WREG32(RADEON_FP_V2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_V_SYNC_STRT_WID)); - break; - } -} - int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb) { @@ -400,14 +347,21 @@ struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); struct radeon_framebuffer *radeon_fb; struct drm_gem_object *obj; + struct radeon_bo *rbo; uint64_t base; uint32_t crtc_offset, crtc_offset_cntl, crtc_tile_x0_y0 = 0; uint32_t crtc_pitch, pitch_pixels; uint32_t tiling_flags; int format; uint32_t gen_cntl_reg, gen_cntl_val; + int r; DRM_DEBUG("\n"); + /* no fb bound */ + if (!crtc->fb) { + DRM_DEBUG("No FB bound\n"); + return 0; + } radeon_fb = to_radeon_framebuffer(crtc->fb); @@ -431,10 +385,22 @@ return false; } + /* Pin framebuffer & get tilling informations */ obj = radeon_fb->obj; - if (radeon_gem_object_pin(obj, RADEON_GEM_DOMAIN_VRAM, &base)) { + rbo = obj->driver_private; + r = radeon_bo_reserve(rbo, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &base); + if (unlikely(r != 0)) { + radeon_bo_unreserve(rbo); return -EINVAL; } + radeon_bo_get_tiling_flags(rbo, &tiling_flags, NULL); + radeon_bo_unreserve(rbo); + if (tiling_flags & RADEON_TILING_MICRO) + DRM_ERROR("trying to scanout microtiled buffer\n"); + /* if scanout was in GTT this really wouldn't work */ /* crtc offset is from display base addr not FB location */ radeon_crtc->legacy_display_base_addr = rdev->mc.vram_location; @@ -449,10 +415,6 @@ (crtc->fb->bits_per_pixel * 8)); crtc_pitch |= crtc_pitch << 16; - radeon_object_get_tiling_flags(obj->driver_private, - &tiling_flags, NULL); - if (tiling_flags & RADEON_TILING_MICRO) - DRM_ERROR("trying to scanout microtiled buffer\n"); if (tiling_flags & RADEON_TILING_MACRO) { if (ASIC_IS_R300(rdev)) @@ -530,7 +492,12 @@ if (old_fb && old_fb != crtc->fb) { radeon_fb = to_radeon_framebuffer(old_fb); - radeon_gem_object_unpin(radeon_fb->obj); + rbo = radeon_fb->obj->driver_private; + r = radeon_bo_reserve(rbo, false); + if (unlikely(r != 0)) + return r; + radeon_bo_unpin(rbo); + radeon_bo_unreserve(rbo); } /* Bytes per pixel may have changed */ @@ -642,12 +609,8 @@ uint32_t crtc2_gen_cntl; uint32_t disp2_merge_cntl; - /* check to see if TV DAC is enabled for another crtc and keep it enabled */ - if (RREG32(RADEON_CRTC2_GEN_CNTL) & RADEON_CRTC2_CRT2_ON) - crtc2_gen_cntl = RADEON_CRTC2_CRT2_ON; - else - crtc2_gen_cntl = 0; - + /* if TV DAC is enabled for another crtc and keep it enabled */ + crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL) & 0x00718080; crtc2_gen_cntl |= ((format << 8) | RADEON_CRTC2_VSYNC_DIS | RADEON_CRTC2_HSYNC_DIS @@ -676,7 +639,8 @@ uint32_t crtc_ext_cntl; uint32_t disp_merge_cntl; - crtc_gen_cntl = (RADEON_CRTC_EXT_DISP_EN + crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL) & 0x00718000; + crtc_gen_cntl |= (RADEON_CRTC_EXT_DISP_EN | (format << 8) | RADEON_CRTC_DISP_REQ_EN_B | ((mode->flags & DRM_MODE_FLAG_DBLSCAN) @@ -728,7 +692,6 @@ uint32_t post_divider = 0; uint32_t freq = 0; uint8_t pll_gain; - int pll_flags = RADEON_PLL_LEGACY; bool use_bios_divs = false; /* PLL registers */ uint32_t pll_ref_div = 0; @@ -762,10 +725,16 @@ else pll = &rdev->clock.p1pll; + pll->flags = RADEON_PLL_LEGACY; + if (radeon_new_pll == 1) + pll->algo = PLL_ALGO_NEW; + else + pll->algo = PLL_ALGO_LEGACY; + if (mode->clock > 200000) /* range limits??? */ - pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; + pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; else - pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; + pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV; list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { if (encoder->crtc == crtc) { @@ -777,20 +746,22 @@ } if (encoder->encoder_type != DRM_MODE_ENCODER_DAC) - pll_flags |= RADEON_PLL_NO_ODD_POST_DIV; + pll->flags |= RADEON_PLL_NO_ODD_POST_DIV; if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS) { - struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); - struct radeon_encoder_lvds *lvds = (struct radeon_encoder_lvds *)radeon_encoder->enc_priv; - if (lvds) { - if (lvds->use_bios_dividers) { - pll_ref_div = lvds->panel_ref_divider; - pll_fb_post_div = (lvds->panel_fb_divider | - (lvds->panel_post_divider << 16)); - htotal_cntl = 0; - use_bios_divs = true; + if (!rdev->is_atom_bios) { + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct radeon_encoder_lvds *lvds = (struct radeon_encoder_lvds *)radeon_encoder->enc_priv; + if (lvds) { + if (lvds->use_bios_dividers) { + pll_ref_div = lvds->panel_ref_divider; + pll_fb_post_div = (lvds->panel_fb_divider | + (lvds->panel_post_divider << 16)); + htotal_cntl = 0; + use_bios_divs = true; + } } } - pll_flags |= RADEON_PLL_USE_REF_DIV; + pll->flags |= RADEON_PLL_USE_REF_DIV; } } } @@ -800,8 +771,7 @@ if (!use_bios_divs) { radeon_compute_pll(pll, mode->clock, &freq, &feedback_div, &frac_fb_div, - &reference_div, &post_divider, - pll_flags); + &reference_div, &post_divider); for (post_div = &post_divs[0]; post_div->divider; ++post_div) { if (post_div->divider == post_divider) @@ -1027,8 +997,9 @@ radeon_crtc_set_base(crtc, x, y, old_fb); radeon_set_crtc_timing(crtc, adjusted_mode); radeon_set_pll(crtc, adjusted_mode); + radeon_overscan_setup(crtc, adjusted_mode); if (radeon_crtc->crtc_id == 0) { - radeon_legacy_rmx_mode_set(crtc, mode, adjusted_mode); + radeon_legacy_rmx_mode_set(crtc, adjusted_mode); } else { if (radeon_crtc->rmx_type != RMX_OFF) { /* FIXME: only first crtc has rmx what should we @@ -1042,12 +1013,29 @@ static void radeon_crtc_prepare(struct drm_crtc *crtc) { - radeon_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); + struct drm_device *dev = crtc->dev; + struct drm_crtc *crtci; + + /* + * The hardware wedges sometimes if you reconfigure one CRTC + * whilst another is running (see fdo bug #24611). + */ + list_for_each_entry(crtci, &dev->mode_config.crtc_list, head) + radeon_crtc_dpms(crtci, DRM_MODE_DPMS_OFF); } static void radeon_crtc_commit(struct drm_crtc *crtc) { - radeon_crtc_dpms(crtc, DRM_MODE_DPMS_ON); + struct drm_device *dev = crtc->dev; + struct drm_crtc *crtci; + + /* + * Reenable the CRTCs that should be running. + */ + list_for_each_entry(crtci, &dev->mode_config.crtc_list, head) { + if (crtci->enabled) + radeon_crtc_dpms(crtci, DRM_MODE_DPMS_ON); + } } static const struct drm_crtc_helper_funcs legacy_helper_funcs = { --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_legacy_tv.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_legacy_tv.c @@ -57,6 +57,10 @@ #define NTSC_TV_PLL_N_14 693 #define NTSC_TV_PLL_P_14 7 +#define PAL_TV_PLL_M_14 19 +#define PAL_TV_PLL_N_14 353 +#define PAL_TV_PLL_P_14 5 + #define VERT_LEAD_IN_LINES 2 #define FRAC_BITS 0xe #define FRAC_MASK 0x3fff @@ -77,7 +81,7 @@ unsigned pix_to_tv; }; -static const uint16_t hor_timing_NTSC[] = { +static const uint16_t hor_timing_NTSC[MAX_H_CODE_TIMING_LEN] = { 0x0007, 0x003f, 0x0263, @@ -98,7 +102,7 @@ 0 }; -static const uint16_t vert_timing_NTSC[] = { +static const uint16_t vert_timing_NTSC[MAX_V_CODE_TIMING_LEN] = { 0x2001, 0x200d, 0x1006, @@ -115,7 +119,7 @@ 0 }; -static const uint16_t hor_timing_PAL[] = { +static const uint16_t hor_timing_PAL[MAX_H_CODE_TIMING_LEN] = { 0x0007, 0x0058, 0x027c, @@ -136,7 +140,7 @@ 0 }; -static const uint16_t vert_timing_PAL[] = { +static const uint16_t vert_timing_PAL[MAX_V_CODE_TIMING_LEN] = { 0x2001, 0x200c, 0x1005, @@ -205,9 +209,24 @@ 630627, /* defRestart */ 347, /* crtcPLL_N */ 14, /* crtcPLL_M */ - 8, /* crtcPLL_postDiv */ + 8, /* crtcPLL_postDiv */ 1022, /* pixToTV */ }, + { /* PAL timing for 14 Mhz ref clk */ + 800, /* horResolution */ + 600, /* verResolution */ + TV_STD_PAL, /* standard */ + 1131, /* horTotal */ + 742, /* verTotal */ + 813, /* horStart */ + 840, /* horSyncStart */ + 633, /* verSyncStart */ + 708369, /* defRestart */ + 211, /* crtcPLL_N */ + 9, /* crtcPLL_M */ + 8, /* crtcPLL_postDiv */ + 759, /* pixToTV */ + }, }; #define N_AVAILABLE_MODES ARRAY_SIZE(available_tv_modes) @@ -242,7 +261,7 @@ if (pll->reference_freq == 2700) const_ptr = &available_tv_modes[1]; else - const_ptr = &available_tv_modes[1]; /* FIX ME */ + const_ptr = &available_tv_modes[3]; } return const_ptr; } @@ -623,9 +642,9 @@ } flicker_removal = (tmp + 500) / 1000; - if (flicker_removal < 3) - flicker_removal = 3; - for (i = 0; i < 6; ++i) { + if (flicker_removal < 2) + flicker_removal = 2; + for (i = 0; i < ARRAY_SIZE(SLOPE_limit); ++i) { if (flicker_removal == SLOPE_limit[i]) break; } @@ -685,9 +704,9 @@ n = PAL_TV_PLL_N_27; p = PAL_TV_PLL_P_27; } else { - m = PAL_TV_PLL_M_27; - n = PAL_TV_PLL_N_27; - p = PAL_TV_PLL_P_27; + m = PAL_TV_PLL_M_14; + n = PAL_TV_PLL_N_14; + p = PAL_TV_PLL_P_14; } } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/mkregtable.c +++ linux-2.6.32/drivers/gpu/drm/radeon/mkregtable.c @@ -661,8 +661,10 @@ fseek(file, 0, SEEK_SET); /* get header */ - if (fgets(buf, 1024, file) == NULL) + if (fgets(buf, 1024, file) == NULL) { + fclose(file); return -1; + } /* first line will contain the last register * and gpu name */ --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_test.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_test.c @@ -30,8 +30,8 @@ /* Test BO GTT->VRAM and VRAM->GTT GPU copies across the whole GTT aperture */ void radeon_test_moves(struct radeon_device *rdev) { - struct radeon_object *vram_obj = NULL; - struct radeon_object **gtt_obj = NULL; + struct radeon_bo *vram_obj = NULL; + struct radeon_bo **gtt_obj = NULL; struct radeon_fence *fence = NULL; uint64_t gtt_addr, vram_addr; unsigned i, n, size; @@ -42,8 +42,8 @@ /* Number of tests = * (Total GTT - IB pool - writeback page - ring buffer) / test size */ - n = (rdev->mc.gtt_size - RADEON_IB_POOL_SIZE*64*1024 - RADEON_GPU_PAGE_SIZE - - rdev->cp.ring_size) / size; + n = ((u32)(rdev->mc.gtt_size - RADEON_IB_POOL_SIZE*64*1024 - RADEON_GPU_PAGE_SIZE - + rdev->cp.ring_size)) / size; gtt_obj = kzalloc(n * sizeof(*gtt_obj), GFP_KERNEL); if (!gtt_obj) { @@ -52,38 +52,42 @@ goto out_cleanup; } - r = radeon_object_create(rdev, NULL, size, true, RADEON_GEM_DOMAIN_VRAM, - false, &vram_obj); + r = radeon_bo_create(rdev, NULL, size, true, RADEON_GEM_DOMAIN_VRAM, + &vram_obj); if (r) { DRM_ERROR("Failed to create VRAM object\n"); goto out_cleanup; } - - r = radeon_object_pin(vram_obj, RADEON_GEM_DOMAIN_VRAM, &vram_addr); + r = radeon_bo_reserve(vram_obj, false); + if (unlikely(r != 0)) + goto out_cleanup; + r = radeon_bo_pin(vram_obj, RADEON_GEM_DOMAIN_VRAM, &vram_addr); if (r) { DRM_ERROR("Failed to pin VRAM object\n"); goto out_cleanup; } - for (i = 0; i < n; i++) { void *gtt_map, *vram_map; void **gtt_start, **gtt_end; void **vram_start, **vram_end; - r = radeon_object_create(rdev, NULL, size, true, - RADEON_GEM_DOMAIN_GTT, false, gtt_obj + i); + r = radeon_bo_create(rdev, NULL, size, true, + RADEON_GEM_DOMAIN_GTT, gtt_obj + i); if (r) { DRM_ERROR("Failed to create GTT object %d\n", i); goto out_cleanup; } - r = radeon_object_pin(gtt_obj[i], RADEON_GEM_DOMAIN_GTT, >t_addr); + r = radeon_bo_reserve(gtt_obj[i], false); + if (unlikely(r != 0)) + goto out_cleanup; + r = radeon_bo_pin(gtt_obj[i], RADEON_GEM_DOMAIN_GTT, >t_addr); if (r) { DRM_ERROR("Failed to pin GTT object %d\n", i); goto out_cleanup; } - r = radeon_object_kmap(gtt_obj[i], >t_map); + r = radeon_bo_kmap(gtt_obj[i], >t_map); if (r) { DRM_ERROR("Failed to map GTT object %d\n", i); goto out_cleanup; @@ -94,7 +98,7 @@ gtt_start++) *gtt_start = gtt_start; - radeon_object_kunmap(gtt_obj[i]); + radeon_bo_kunmap(gtt_obj[i]); r = radeon_fence_create(rdev, &fence); if (r) { @@ -116,7 +120,7 @@ radeon_fence_unref(&fence); - r = radeon_object_kmap(vram_obj, &vram_map); + r = radeon_bo_kmap(vram_obj, &vram_map); if (r) { DRM_ERROR("Failed to map VRAM object after copy %d\n", i); goto out_cleanup; @@ -131,13 +135,13 @@ "expected 0x%p (GTT map 0x%p-0x%p)\n", i, *vram_start, gtt_start, gtt_map, gtt_end); - radeon_object_kunmap(vram_obj); + radeon_bo_kunmap(vram_obj); goto out_cleanup; } *vram_start = vram_start; } - radeon_object_kunmap(vram_obj); + radeon_bo_kunmap(vram_obj); r = radeon_fence_create(rdev, &fence); if (r) { @@ -159,7 +163,7 @@ radeon_fence_unref(&fence); - r = radeon_object_kmap(gtt_obj[i], >t_map); + r = radeon_bo_kmap(gtt_obj[i], >t_map); if (r) { DRM_ERROR("Failed to map GTT object after copy %d\n", i); goto out_cleanup; @@ -174,12 +178,12 @@ "expected 0x%p (VRAM map 0x%p-0x%p)\n", i, *gtt_start, vram_start, vram_map, vram_end); - radeon_object_kunmap(gtt_obj[i]); + radeon_bo_kunmap(gtt_obj[i]); goto out_cleanup; } } - radeon_object_kunmap(gtt_obj[i]); + radeon_bo_kunmap(gtt_obj[i]); DRM_INFO("Tested GTT->VRAM and VRAM->GTT copy for GTT offset 0x%llx\n", gtt_addr - rdev->mc.gtt_location); @@ -187,14 +191,20 @@ out_cleanup: if (vram_obj) { - radeon_object_unpin(vram_obj); - radeon_object_unref(&vram_obj); + if (radeon_bo_is_reserved(vram_obj)) { + radeon_bo_unpin(vram_obj); + radeon_bo_unreserve(vram_obj); + } + radeon_bo_unref(&vram_obj); } if (gtt_obj) { for (i = 0; i < n; i++) { if (gtt_obj[i]) { - radeon_object_unpin(gtt_obj[i]); - radeon_object_unref(>t_obj[i]); + if (radeon_bo_is_reserved(gtt_obj[i])) { + radeon_bo_unpin(gtt_obj[i]); + radeon_bo_unreserve(gtt_obj[i]); + } + radeon_bo_unref(>t_obj[i]); } } kfree(gtt_obj); @@ -206,4 +216,3 @@ printk(KERN_WARNING "Error while testing BO move.\n"); } } - --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_object.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_object.c @@ -34,100 +34,66 @@ #include "radeon_drm.h" #include "radeon.h" -struct radeon_object { - struct ttm_buffer_object tobj; - struct list_head list; - struct radeon_device *rdev; - struct drm_gem_object *gobj; - struct ttm_bo_kmap_obj kmap; - unsigned pin_count; - uint64_t gpu_addr; - void *kptr; - bool is_iomem; - uint32_t tiling_flags; - uint32_t pitch; - int surface_reg; -}; int radeon_ttm_init(struct radeon_device *rdev); void radeon_ttm_fini(struct radeon_device *rdev); +static void radeon_bo_clear_surface_reg(struct radeon_bo *bo); /* * To exclude mutual BO access we rely on bo_reserve exclusion, as all * function are calling it. */ -static int radeon_object_reserve(struct radeon_object *robj, bool interruptible) +static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo) { - return ttm_bo_reserve(&robj->tobj, interruptible, false, false, 0); -} + struct radeon_bo *bo; -static void radeon_object_unreserve(struct radeon_object *robj) -{ - ttm_bo_unreserve(&robj->tobj); + bo = container_of(tbo, struct radeon_bo, tbo); + mutex_lock(&bo->rdev->gem.mutex); + list_del_init(&bo->list); + mutex_unlock(&bo->rdev->gem.mutex); + radeon_bo_clear_surface_reg(bo); + kfree(bo); } -static void radeon_ttm_object_object_destroy(struct ttm_buffer_object *tobj) +bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo) { - struct radeon_object *robj; - - robj = container_of(tobj, struct radeon_object, tobj); - list_del_init(&robj->list); - radeon_object_clear_surface_reg(robj); - kfree(robj); + if (bo->destroy == &radeon_ttm_bo_destroy) + return true; + return false; } -static inline void radeon_object_gpu_addr(struct radeon_object *robj) +void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) { - /* Default gpu address */ - robj->gpu_addr = 0xFFFFFFFFFFFFFFFFULL; - if (robj->tobj.mem.mm_node == NULL) { - return; - } - robj->gpu_addr = ((u64)robj->tobj.mem.mm_node->start) << PAGE_SHIFT; - switch (robj->tobj.mem.mem_type) { - case TTM_PL_VRAM: - robj->gpu_addr += (u64)robj->rdev->mc.vram_location; - break; - case TTM_PL_TT: - robj->gpu_addr += (u64)robj->rdev->mc.gtt_location; - break; - default: - DRM_ERROR("Unknown placement %d\n", robj->tobj.mem.mem_type); - robj->gpu_addr = 0xFFFFFFFFFFFFFFFFULL; - return; - } -} + u32 c = 0, b = 0; -static inline uint32_t radeon_object_flags_from_domain(uint32_t domain) -{ - uint32_t flags = 0; - if (domain & RADEON_GEM_DOMAIN_VRAM) { - flags |= TTM_PL_FLAG_VRAM | TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED; - } - if (domain & RADEON_GEM_DOMAIN_GTT) { - flags |= TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING; - } - if (domain & RADEON_GEM_DOMAIN_CPU) { - flags |= TTM_PL_FLAG_SYSTEM | TTM_PL_MASK_CACHING; + rbo->placement.fpfn = 0; + rbo->placement.lpfn = 0; + rbo->placement.placement = rbo->placements; + rbo->placement.busy_placement = rbo->busy_placements; + if (domain & RADEON_GEM_DOMAIN_VRAM) + rbo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | + TTM_PL_FLAG_VRAM; + /* add busy placement to TTM if VRAM is only option */ + if (domain == RADEON_GEM_DOMAIN_VRAM) { + rbo->busy_placements[b++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT; } - if (!flags) { - flags |= TTM_PL_FLAG_SYSTEM | TTM_PL_MASK_CACHING; - } - return flags; + if (domain & RADEON_GEM_DOMAIN_GTT) + rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT; + if (domain & RADEON_GEM_DOMAIN_CPU) + rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; + if (!c) + rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; + rbo->placement.num_placement = c; + rbo->placement.num_busy_placement = b; } -int radeon_object_create(struct radeon_device *rdev, - struct drm_gem_object *gobj, - unsigned long size, - bool kernel, - uint32_t domain, - bool interruptible, - struct radeon_object **robj_ptr) +int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj, + unsigned long size, bool kernel, u32 domain, + struct radeon_bo **bo_ptr) { - struct radeon_object *robj; + struct radeon_bo *bo; enum ttm_bo_type type; - uint32_t flags; int r; if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) { @@ -138,238 +104,161 @@ } else { type = ttm_bo_type_device; } - *robj_ptr = NULL; - robj = kzalloc(sizeof(struct radeon_object), GFP_KERNEL); - if (robj == NULL) { + *bo_ptr = NULL; + bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL); + if (bo == NULL) return -ENOMEM; - } - robj->rdev = rdev; - robj->gobj = gobj; - robj->surface_reg = -1; - INIT_LIST_HEAD(&robj->list); - - flags = radeon_object_flags_from_domain(domain); - r = ttm_buffer_object_init(&rdev->mman.bdev, &robj->tobj, size, type, flags, - 0, 0, false, NULL, size, - &radeon_ttm_object_object_destroy); + bo->rdev = rdev; + bo->gobj = gobj; + bo->surface_reg = -1; + INIT_LIST_HEAD(&bo->list); + + radeon_ttm_placement_from_domain(bo, domain); + /* Kernel allocation are uninterruptible */ + r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type, + &bo->placement, 0, 0, !kernel, NULL, size, + &radeon_ttm_bo_destroy); if (unlikely(r != 0)) { - /* ttm call radeon_ttm_object_object_destroy if error happen */ - DRM_ERROR("Failed to allocate TTM object (%ld, 0x%08X, %u)\n", - size, flags, 0); + if (r != -ERESTARTSYS) + dev_err(rdev->dev, + "object_init failed for (%lu, 0x%08X)\n", + size, domain); return r; } - *robj_ptr = robj; + *bo_ptr = bo; if (gobj) { - list_add_tail(&robj->list, &rdev->gem.objects); + mutex_lock(&bo->rdev->gem.mutex); + list_add_tail(&bo->list, &rdev->gem.objects); + mutex_unlock(&bo->rdev->gem.mutex); } return 0; } -int radeon_object_kmap(struct radeon_object *robj, void **ptr) +int radeon_bo_kmap(struct radeon_bo *bo, void **ptr) { + bool is_iomem; int r; - spin_lock(&robj->tobj.lock); - if (robj->kptr) { + if (bo->kptr) { if (ptr) { - *ptr = robj->kptr; + *ptr = bo->kptr; } - spin_unlock(&robj->tobj.lock); return 0; } - spin_unlock(&robj->tobj.lock); - r = ttm_bo_kmap(&robj->tobj, 0, robj->tobj.num_pages, &robj->kmap); + r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap); if (r) { return r; } - spin_lock(&robj->tobj.lock); - robj->kptr = ttm_kmap_obj_virtual(&robj->kmap, &robj->is_iomem); - spin_unlock(&robj->tobj.lock); + bo->kptr = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem); if (ptr) { - *ptr = robj->kptr; + *ptr = bo->kptr; } - radeon_object_check_tiling(robj, 0, 0); + radeon_bo_check_tiling(bo, 0, 0); return 0; } -void radeon_object_kunmap(struct radeon_object *robj) +void radeon_bo_kunmap(struct radeon_bo *bo) { - spin_lock(&robj->tobj.lock); - if (robj->kptr == NULL) { - spin_unlock(&robj->tobj.lock); + if (bo->kptr == NULL) return; - } - robj->kptr = NULL; - spin_unlock(&robj->tobj.lock); - radeon_object_check_tiling(robj, 0, 0); - ttm_bo_kunmap(&robj->kmap); + bo->kptr = NULL; + radeon_bo_check_tiling(bo, 0, 0); + ttm_bo_kunmap(&bo->kmap); } -void radeon_object_unref(struct radeon_object **robj) +void radeon_bo_unref(struct radeon_bo **bo) { - struct ttm_buffer_object *tobj; + struct ttm_buffer_object *tbo; - if ((*robj) == NULL) { + if ((*bo) == NULL) return; - } - tobj = &((*robj)->tobj); - ttm_bo_unref(&tobj); - if (tobj == NULL) { - *robj = NULL; - } + tbo = &((*bo)->tbo); + ttm_bo_unref(&tbo); + if (tbo == NULL) + *bo = NULL; } -int radeon_object_mmap(struct radeon_object *robj, uint64_t *offset) +int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr) { - *offset = robj->tobj.addr_space_offset; - return 0; -} - -int radeon_object_pin(struct radeon_object *robj, uint32_t domain, - uint64_t *gpu_addr) -{ - uint32_t flags; - uint32_t tmp; - int r; + int r, i; - flags = radeon_object_flags_from_domain(domain); - spin_lock(&robj->tobj.lock); - if (robj->pin_count) { - robj->pin_count++; - if (gpu_addr != NULL) { - *gpu_addr = robj->gpu_addr; - } - spin_unlock(&robj->tobj.lock); + radeon_ttm_placement_from_domain(bo, domain); + if (bo->pin_count) { + bo->pin_count++; + if (gpu_addr) + *gpu_addr = radeon_bo_gpu_offset(bo); return 0; } - spin_unlock(&robj->tobj.lock); - r = radeon_object_reserve(robj, false); - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to reserve object for pinning it.\n"); - return r; - } - tmp = robj->tobj.mem.placement; - ttm_flag_masked(&tmp, flags, TTM_PL_MASK_MEM); - robj->tobj.proposed_placement = tmp | TTM_PL_FLAG_NO_EVICT | TTM_PL_MASK_CACHING; - r = ttm_buffer_object_validate(&robj->tobj, - robj->tobj.proposed_placement, - false, false); - radeon_object_gpu_addr(robj); - if (gpu_addr != NULL) { - *gpu_addr = robj->gpu_addr; - } - robj->pin_count = 1; - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to pin object.\n"); + radeon_ttm_placement_from_domain(bo, domain); + for (i = 0; i < bo->placement.num_placement; i++) + bo->placements[i] |= TTM_PL_FLAG_NO_EVICT; + r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); + if (likely(r == 0)) { + bo->pin_count = 1; + if (gpu_addr != NULL) + *gpu_addr = radeon_bo_gpu_offset(bo); } - radeon_object_unreserve(robj); + if (unlikely(r != 0)) + dev_err(bo->rdev->dev, "%p pin failed\n", bo); return r; } -void radeon_object_unpin(struct radeon_object *robj) -{ - uint32_t flags; - int r; - - spin_lock(&robj->tobj.lock); - if (!robj->pin_count) { - spin_unlock(&robj->tobj.lock); - printk(KERN_WARNING "Unpin not necessary for %p !\n", robj); - return; - } - robj->pin_count--; - if (robj->pin_count) { - spin_unlock(&robj->tobj.lock); - return; - } - spin_unlock(&robj->tobj.lock); - r = radeon_object_reserve(robj, false); - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to reserve object for unpinning it.\n"); - return; - } - flags = robj->tobj.mem.placement; - robj->tobj.proposed_placement = flags & ~TTM_PL_FLAG_NO_EVICT; - r = ttm_buffer_object_validate(&robj->tobj, - robj->tobj.proposed_placement, - false, false); - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to unpin buffer.\n"); - } - radeon_object_unreserve(robj); -} - -int radeon_object_wait(struct radeon_object *robj) +int radeon_bo_unpin(struct radeon_bo *bo) { - int r = 0; + int r, i; - /* FIXME: should use block reservation instead */ - r = radeon_object_reserve(robj, true); - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to reserve object for waiting.\n"); - return r; - } - spin_lock(&robj->tobj.lock); - if (robj->tobj.sync_obj) { - r = ttm_bo_wait(&robj->tobj, true, true, false); - } - spin_unlock(&robj->tobj.lock); - radeon_object_unreserve(robj); - return r; -} - -int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement) -{ - int r = 0; - - r = radeon_object_reserve(robj, true); - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to reserve object for waiting.\n"); - return r; - } - spin_lock(&robj->tobj.lock); - *cur_placement = robj->tobj.mem.mem_type; - if (robj->tobj.sync_obj) { - r = ttm_bo_wait(&robj->tobj, true, true, true); + if (!bo->pin_count) { + dev_warn(bo->rdev->dev, "%p unpin not necessary\n", bo); + return 0; } - spin_unlock(&robj->tobj.lock); - radeon_object_unreserve(robj); + bo->pin_count--; + if (bo->pin_count) + return 0; + for (i = 0; i < bo->placement.num_placement; i++) + bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT; + r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); + if (unlikely(r != 0)) + dev_err(bo->rdev->dev, "%p validate failed for unpin\n", bo); return r; } -int radeon_object_evict_vram(struct radeon_device *rdev) +int radeon_bo_evict_vram(struct radeon_device *rdev) { - if (rdev->flags & RADEON_IS_IGP) { - /* Useless to evict on IGP chips */ - return 0; + /* late 2.6.33 fix IGP hibernate - we need pm ops to do this correct */ + if (0 && (rdev->flags & RADEON_IS_IGP)) { + if (rdev->mc.igp_sideport_enabled == false) + /* Useless to evict on IGP chips */ + return 0; } return ttm_bo_evict_mm(&rdev->mman.bdev, TTM_PL_VRAM); } -void radeon_object_force_delete(struct radeon_device *rdev) +void radeon_bo_force_delete(struct radeon_device *rdev) { - struct radeon_object *robj, *n; + struct radeon_bo *bo, *n; struct drm_gem_object *gobj; if (list_empty(&rdev->gem.objects)) { return; } - DRM_ERROR("Userspace still has active objects !\n"); - list_for_each_entry_safe(robj, n, &rdev->gem.objects, list) { + dev_err(rdev->dev, "Userspace still has active objects !\n"); + list_for_each_entry_safe(bo, n, &rdev->gem.objects, list) { mutex_lock(&rdev->ddev->struct_mutex); - gobj = robj->gobj; - DRM_ERROR("Force free for (%p,%p,%lu,%lu)\n", - gobj, robj, (unsigned long)gobj->size, - *((unsigned long *)&gobj->refcount)); - list_del_init(&robj->list); - radeon_object_unref(&robj); + gobj = bo->gobj; + dev_err(rdev->dev, "%p %p %lu %lu force free\n", + gobj, bo, (unsigned long)gobj->size, + *((unsigned long *)&gobj->refcount)); + mutex_lock(&bo->rdev->gem.mutex); + list_del_init(&bo->list); + mutex_unlock(&bo->rdev->gem.mutex); + radeon_bo_unref(&bo); gobj->driver_private = NULL; drm_gem_object_unreference(gobj); mutex_unlock(&rdev->ddev->struct_mutex); } } -int radeon_object_init(struct radeon_device *rdev) +int radeon_bo_init(struct radeon_device *rdev) { /* Add an MTRR for the VRAM */ rdev->mc.vram_mtrr = mtrr_add(rdev->mc.aper_base, rdev->mc.aper_size, @@ -382,13 +271,13 @@ return radeon_ttm_init(rdev); } -void radeon_object_fini(struct radeon_device *rdev) +void radeon_bo_fini(struct radeon_device *rdev) { radeon_ttm_fini(rdev); } -void radeon_object_list_add_object(struct radeon_object_list *lobj, - struct list_head *head) +void radeon_bo_list_add_object(struct radeon_bo_list *lobj, + struct list_head *head) { if (lobj->wdomain) { list_add(&lobj->list, head); @@ -397,125 +286,102 @@ } } -int radeon_object_list_reserve(struct list_head *head) +int radeon_bo_list_reserve(struct list_head *head) { - struct radeon_object_list *lobj; + struct radeon_bo_list *lobj; int r; list_for_each_entry(lobj, head, list){ - if (!lobj->robj->pin_count) { - r = radeon_object_reserve(lobj->robj, true); - if (unlikely(r != 0)) { - DRM_ERROR("radeon: failed to reserve object.\n"); - return r; - } - } else { - } + r = radeon_bo_reserve(lobj->bo, false); + if (unlikely(r != 0)) + return r; } return 0; } -void radeon_object_list_unreserve(struct list_head *head) +void radeon_bo_list_unreserve(struct list_head *head) { - struct radeon_object_list *lobj; + struct radeon_bo_list *lobj; list_for_each_entry(lobj, head, list) { - if (!lobj->robj->pin_count) { - radeon_object_unreserve(lobj->robj); - } + /* only unreserve object we successfully reserved */ + if (radeon_bo_is_reserved(lobj->bo)) + radeon_bo_unreserve(lobj->bo); } } -int radeon_object_list_validate(struct list_head *head, void *fence) +int radeon_bo_list_validate(struct list_head *head) { - struct radeon_object_list *lobj; - struct radeon_object *robj; - struct radeon_fence *old_fence = NULL; + struct radeon_bo_list *lobj; + struct radeon_bo *bo; int r; - r = radeon_object_list_reserve(head); + r = radeon_bo_list_reserve(head); if (unlikely(r != 0)) { - radeon_object_list_unreserve(head); return r; } list_for_each_entry(lobj, head, list) { - robj = lobj->robj; - if (!robj->pin_count) { + bo = lobj->bo; + if (!bo->pin_count) { if (lobj->wdomain) { - robj->tobj.proposed_placement = - radeon_object_flags_from_domain(lobj->wdomain); + radeon_ttm_placement_from_domain(bo, + lobj->wdomain); } else { - robj->tobj.proposed_placement = - radeon_object_flags_from_domain(lobj->rdomain); + radeon_ttm_placement_from_domain(bo, + lobj->rdomain); } - r = ttm_buffer_object_validate(&robj->tobj, - robj->tobj.proposed_placement, - true, false); - if (unlikely(r)) { - DRM_ERROR("radeon: failed to validate.\n"); + r = ttm_bo_validate(&bo->tbo, &bo->placement, + true, false); + if (unlikely(r)) return r; - } - radeon_object_gpu_addr(robj); - } - lobj->gpu_offset = robj->gpu_addr; - lobj->tiling_flags = robj->tiling_flags; - if (fence) { - old_fence = (struct radeon_fence *)robj->tobj.sync_obj; - robj->tobj.sync_obj = radeon_fence_ref(fence); - robj->tobj.sync_obj_arg = NULL; - } - if (old_fence) { - radeon_fence_unref(&old_fence); } + lobj->gpu_offset = radeon_bo_gpu_offset(bo); + lobj->tiling_flags = bo->tiling_flags; } return 0; } -void radeon_object_list_unvalidate(struct list_head *head) +void radeon_bo_list_fence(struct list_head *head, void *fence) { - struct radeon_object_list *lobj; + struct radeon_bo_list *lobj; + struct radeon_bo *bo; struct radeon_fence *old_fence = NULL; list_for_each_entry(lobj, head, list) { - old_fence = (struct radeon_fence *)lobj->robj->tobj.sync_obj; - lobj->robj->tobj.sync_obj = NULL; + bo = lobj->bo; + spin_lock(&bo->tbo.lock); + old_fence = (struct radeon_fence *)bo->tbo.sync_obj; + bo->tbo.sync_obj = radeon_fence_ref(fence); + bo->tbo.sync_obj_arg = NULL; + spin_unlock(&bo->tbo.lock); if (old_fence) { radeon_fence_unref(&old_fence); } } - radeon_object_list_unreserve(head); } -void radeon_object_list_clean(struct list_head *head) -{ - radeon_object_list_unreserve(head); -} - -int radeon_object_fbdev_mmap(struct radeon_object *robj, +int radeon_bo_fbdev_mmap(struct radeon_bo *bo, struct vm_area_struct *vma) { - return ttm_fbdev_mmap(vma, &robj->tobj); -} - -unsigned long radeon_object_size(struct radeon_object *robj) -{ - return robj->tobj.num_pages << PAGE_SHIFT; + return ttm_fbdev_mmap(vma, &bo->tbo); } -int radeon_object_get_surface_reg(struct radeon_object *robj) +int radeon_bo_get_surface_reg(struct radeon_bo *bo) { - struct radeon_device *rdev = robj->rdev; + struct radeon_device *rdev = bo->rdev; struct radeon_surface_reg *reg; - struct radeon_object *old_object; + struct radeon_bo *old_object; int steal; int i; - if (!robj->tiling_flags) + BUG_ON(!atomic_read(&bo->tbo.reserved)); + + if (!bo->tiling_flags) return 0; - if (robj->surface_reg >= 0) { - reg = &rdev->surface_regs[robj->surface_reg]; - i = robj->surface_reg; + if (bo->surface_reg >= 0) { + reg = &rdev->surface_regs[bo->surface_reg]; + i = bo->surface_reg; goto out; } @@ -523,10 +389,10 @@ for (i = 0; i < RADEON_GEM_MAX_SURFACES; i++) { reg = &rdev->surface_regs[i]; - if (!reg->robj) + if (!reg->bo) break; - old_object = reg->robj; + old_object = reg->bo; if (old_object->pin_count == 0) steal = i; } @@ -537,91 +403,107 @@ return -ENOMEM; /* find someone with a surface reg and nuke their BO */ reg = &rdev->surface_regs[steal]; - old_object = reg->robj; + old_object = reg->bo; /* blow away the mapping */ DRM_DEBUG("stealing surface reg %d from %p\n", steal, old_object); - ttm_bo_unmap_virtual(&old_object->tobj); + ttm_bo_unmap_virtual(&old_object->tbo); old_object->surface_reg = -1; i = steal; } - robj->surface_reg = i; - reg->robj = robj; + bo->surface_reg = i; + reg->bo = bo; out: - radeon_set_surface_reg(rdev, i, robj->tiling_flags, robj->pitch, - robj->tobj.mem.mm_node->start << PAGE_SHIFT, - robj->tobj.num_pages << PAGE_SHIFT); + radeon_set_surface_reg(rdev, i, bo->tiling_flags, bo->pitch, + bo->tbo.mem.mm_node->start << PAGE_SHIFT, + bo->tbo.num_pages << PAGE_SHIFT); return 0; } -void radeon_object_clear_surface_reg(struct radeon_object *robj) +static void radeon_bo_clear_surface_reg(struct radeon_bo *bo) { - struct radeon_device *rdev = robj->rdev; + struct radeon_device *rdev = bo->rdev; struct radeon_surface_reg *reg; - if (robj->surface_reg == -1) + if (bo->surface_reg == -1) return; - reg = &rdev->surface_regs[robj->surface_reg]; - radeon_clear_surface_reg(rdev, robj->surface_reg); + reg = &rdev->surface_regs[bo->surface_reg]; + radeon_clear_surface_reg(rdev, bo->surface_reg); - reg->robj = NULL; - robj->surface_reg = -1; + reg->bo = NULL; + bo->surface_reg = -1; } -void radeon_object_set_tiling_flags(struct radeon_object *robj, - uint32_t tiling_flags, uint32_t pitch) +int radeon_bo_set_tiling_flags(struct radeon_bo *bo, + uint32_t tiling_flags, uint32_t pitch) { - robj->tiling_flags = tiling_flags; - robj->pitch = pitch; + int r; + + r = radeon_bo_reserve(bo, false); + if (unlikely(r != 0)) + return r; + bo->tiling_flags = tiling_flags; + bo->pitch = pitch; + radeon_bo_unreserve(bo); + return 0; } -void radeon_object_get_tiling_flags(struct radeon_object *robj, - uint32_t *tiling_flags, - uint32_t *pitch) +void radeon_bo_get_tiling_flags(struct radeon_bo *bo, + uint32_t *tiling_flags, + uint32_t *pitch) { + BUG_ON(!atomic_read(&bo->tbo.reserved)); if (tiling_flags) - *tiling_flags = robj->tiling_flags; + *tiling_flags = bo->tiling_flags; if (pitch) - *pitch = robj->pitch; + *pitch = bo->pitch; } -int radeon_object_check_tiling(struct radeon_object *robj, bool has_moved, - bool force_drop) +int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, + bool force_drop) { - if (!(robj->tiling_flags & RADEON_TILING_SURFACE)) + BUG_ON(!atomic_read(&bo->tbo.reserved)); + + if (!(bo->tiling_flags & RADEON_TILING_SURFACE)) return 0; if (force_drop) { - radeon_object_clear_surface_reg(robj); + radeon_bo_clear_surface_reg(bo); return 0; } - if (robj->tobj.mem.mem_type != TTM_PL_VRAM) { + if (bo->tbo.mem.mem_type != TTM_PL_VRAM) { if (!has_moved) return 0; - if (robj->surface_reg >= 0) - radeon_object_clear_surface_reg(robj); + if (bo->surface_reg >= 0) + radeon_bo_clear_surface_reg(bo); return 0; } - if ((robj->surface_reg >= 0) && !has_moved) + if ((bo->surface_reg >= 0) && !has_moved) return 0; - return radeon_object_get_surface_reg(robj); + return radeon_bo_get_surface_reg(bo); } void radeon_bo_move_notify(struct ttm_buffer_object *bo, - struct ttm_mem_reg *mem) + struct ttm_mem_reg *mem) { - struct radeon_object *robj = container_of(bo, struct radeon_object, tobj); - radeon_object_check_tiling(robj, 0, 1); + struct radeon_bo *rbo; + if (!radeon_ttm_bo_is_radeon_bo(bo)) + return; + rbo = container_of(bo, struct radeon_bo, tbo); + radeon_bo_check_tiling(rbo, 0, 1); } void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo) { - struct radeon_object *robj = container_of(bo, struct radeon_object, tobj); - radeon_object_check_tiling(robj, 0, 0); + struct radeon_bo *rbo; + if (!radeon_ttm_bo_is_radeon_bo(bo)) + return; + rbo = container_of(bo, struct radeon_bo, tbo); + radeon_bo_check_tiling(rbo, 0, 0); } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_pm.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_pm.c @@ -27,7 +27,7 @@ int radeon_pm_init(struct radeon_device *rdev) { if (radeon_debugfs_pm_init(rdev)) { - DRM_ERROR("Failed to register debugfs file for CP !\n"); + DRM_ERROR("Failed to register debugfs file for PM!\n"); } return 0; @@ -44,8 +44,11 @@ struct drm_device *dev = node->minor->dev; struct radeon_device *rdev = dev->dev_private; - seq_printf(m, "engine clock: %u0 Hz\n", radeon_get_engine_clock(rdev)); - seq_printf(m, "memory clock: %u0 Hz\n", radeon_get_memory_clock(rdev)); + seq_printf(m, "default engine clock: %u0 kHz\n", rdev->clock.default_sclk); + seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev)); + seq_printf(m, "default memory clock: %u0 kHz\n", rdev->clock.default_mclk); + if (rdev->asic->get_memory_clock) + seq_printf(m, "current memory clock: %u0 kHz\n", radeon_get_memory_clock(rdev)); return 0; } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_device.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_device.c @@ -44,10 +44,11 @@ if (rdev->family < CHIP_R600) { int i; - for (i = 0; i < 8; i++) { - WREG32(RADEON_SURFACE0_INFO + - i * (RADEON_SURFACE1_INFO - RADEON_SURFACE0_INFO), - 0); + for (i = 0; i < RADEON_GEM_MAX_SURFACES; i++) { + if (rdev->surface_regs[i].bo) + radeon_bo_get_surface_reg(rdev->surface_regs[i].bo); + else + radeon_clear_surface_reg(rdev, i); } /* enable surfaces */ WREG32(RADEON_SURFACE_CNTL, 0); @@ -208,6 +209,24 @@ } +bool radeon_boot_test_post_card(struct radeon_device *rdev) +{ + if (radeon_card_posted(rdev)) + return true; + + if (rdev->bios) { + DRM_INFO("GPU not posted. posting now...\n"); + if (rdev->is_atom_bios) + atom_asic_init(rdev->mode_info.atom_context); + else + radeon_combios_asic_init(rdev->ddev); + return true; + } else { + dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n"); + return false; + } +} + int radeon_dummy_page_init(struct radeon_device *rdev) { rdev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO); @@ -372,6 +391,12 @@ /* FIXME: not supported yet */ return -EINVAL; } + + if (rdev->flags & RADEON_IS_IGP) { + rdev->asic->get_memory_clock = NULL; + rdev->asic->set_memory_clock = NULL; + } + return 0; } @@ -462,13 +487,18 @@ atom_card_info->pll_write = cail_pll_write; rdev->mode_info.atom_context = atom_parse(atom_card_info, rdev->bios); + mutex_init(&rdev->mode_info.atom_context->mutex); radeon_atom_initialize_bios_scratch_regs(rdev->ddev); + atom_allocate_fb_scratch(rdev->mode_info.atom_context); return 0; } void radeon_atombios_fini(struct radeon_device *rdev) { - kfree(rdev->mode_info.atom_context); + if (rdev->mode_info.atom_context) { + kfree(rdev->mode_info.atom_context->scratch); + kfree(rdev->mode_info.atom_context); + } kfree(rdev->mode_info.atom_card_info); } @@ -514,11 +544,75 @@ rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush; rdev->asic->gart_set_page = &r100_pci_gart_set_page; } + rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; +} + +void radeon_check_arguments(struct radeon_device *rdev) +{ + /* vramlimit must be a power of two */ + switch (radeon_vram_limit) { + case 0: + case 4: + case 8: + case 16: + case 32: + case 64: + case 128: + case 256: + case 512: + case 1024: + case 2048: + case 4096: + break; + default: + dev_warn(rdev->dev, "vram limit (%d) must be a power of 2\n", + radeon_vram_limit); + radeon_vram_limit = 0; + break; + } + radeon_vram_limit = radeon_vram_limit << 20; + /* gtt size must be power of two and greater or equal to 32M */ + switch (radeon_gart_size) { + case 4: + case 8: + case 16: + dev_warn(rdev->dev, "gart size (%d) too small forcing to 512M\n", + radeon_gart_size); + radeon_gart_size = 512; + break; + case 32: + case 64: + case 128: + case 256: + case 512: + case 1024: + case 2048: + case 4096: + break; + default: + dev_warn(rdev->dev, "gart size (%d) must be a power of 2\n", + radeon_gart_size); + radeon_gart_size = 512; + break; + } + rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; + /* AGP mode can only be -1, 1, 2, 4, 8 */ + switch (radeon_agpmode) { + case -1: + case 0: + case 1: + case 2: + case 4: + case 8: + break; + default: + dev_warn(rdev->dev, "invalid AGP mode %d (valid mode: " + "-1, 0, 1, 2, 4, 8)\n", radeon_agpmode); + radeon_agpmode = 0; + break; + } } -/* - * Radeon device. - */ int radeon_device_init(struct radeon_device *rdev, struct drm_device *ddev, struct pci_dev *pdev, @@ -544,16 +638,32 @@ mutex_init(&rdev->cs_mutex); mutex_init(&rdev->ib_pool.mutex); mutex_init(&rdev->cp.mutex); + if (rdev->family >= CHIP_R600) + spin_lock_init(&rdev->ih.lock); + mutex_init(&rdev->gem.mutex); rwlock_init(&rdev->fence_drv.lock); INIT_LIST_HEAD(&rdev->gem.objects); + /* setup workqueue */ + rdev->wq = create_workqueue("radeon"); + if (rdev->wq == NULL) + return -ENOMEM; + /* Set asic functions */ r = radeon_asic_init(rdev); - if (r) { + if (r) return r; + radeon_check_arguments(rdev); + + /* all of the newer IGP chips have an internal gart + * However some rs4xx report as AGP, so remove that here. + */ + if ((rdev->family >= CHIP_RS400) && + (rdev->flags & RADEON_IS_IGP)) { + rdev->flags &= ~RADEON_IS_AGP; } - if (radeon_agpmode == -1) { + if (rdev->flags & RADEON_IS_AGP && radeon_agpmode == -1) { radeon_agp_disable(rdev); } @@ -620,6 +730,7 @@ DRM_INFO("radeon: finishing device.\n"); rdev->shutdown = true; radeon_fini(rdev); + destroy_workqueue(rdev->wq); vga_client_register(rdev->pdev, NULL, NULL, NULL); iounmap(rdev->rmmio); rdev->rmmio = NULL; @@ -631,38 +742,46 @@ */ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) { - struct radeon_device *rdev = dev->dev_private; + struct radeon_device *rdev; struct drm_crtc *crtc; + int r; - if (dev == NULL || rdev == NULL) { + if (dev == NULL || dev->dev_private == NULL) { return -ENODEV; } if (state.event == PM_EVENT_PRETHAW) { return 0; } + rdev = dev->dev_private; + /* unpin the front buffers */ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { struct radeon_framebuffer *rfb = to_radeon_framebuffer(crtc->fb); - struct radeon_object *robj; + struct radeon_bo *robj; if (rfb == NULL || rfb->obj == NULL) { continue; } robj = rfb->obj->driver_private; - if (robj != rdev->fbdev_robj) { - radeon_object_unpin(robj); + if (robj != rdev->fbdev_rbo) { + r = radeon_bo_reserve(robj, false); + if (unlikely(r == 0)) { + radeon_bo_unpin(robj); + radeon_bo_unreserve(robj); + } } } /* evict vram memory */ - radeon_object_evict_vram(rdev); + radeon_bo_evict_vram(rdev); /* wait for gpu to finish processing current batch */ radeon_fence_wait_last(rdev); radeon_save_bios_scratch_regs(rdev); radeon_suspend(rdev); + radeon_hpd_fini(rdev); /* evict remaining vram memory */ - radeon_object_evict_vram(rdev); + radeon_bo_evict_vram(rdev); pci_save_state(dev->pdev); if (state.event == PM_EVENT_SUSPEND) { @@ -695,6 +814,8 @@ fb_set_suspend(rdev->fbdev_info, 0); release_console_sem(); + /* reset hpd state */ + radeon_hpd_init(rdev); /* blat the mode back in */ drm_helper_resume_force_mode(dev); return 0; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/rs400.c +++ linux-2.6.32/drivers/gpu/drm/radeon/rs400.c @@ -223,15 +223,31 @@ return 0; } +int rs400_mc_wait_for_idle(struct radeon_device *rdev) +{ + unsigned i; + uint32_t tmp; + + for (i = 0; i < rdev->usec_timeout; i++) { + /* read MC_STATUS */ + tmp = RREG32(0x0150); + if (tmp & (1 << 2)) { + return 0; + } + DRM_UDELAY(1); + } + return -1; +} + void rs400_gpu_init(struct radeon_device *rdev) { /* FIXME: HDP same place on rs400 ? */ r100_hdp_reset(rdev); /* FIXME: is this correct ? */ r420_pipes_init(rdev); - if (r300_mc_wait_for_idle(rdev)) { - printk(KERN_WARNING "Failed to wait MC idle while " - "programming pipes. Bad things might happen.\n"); + if (rs400_mc_wait_for_idle(rdev)) { + printk(KERN_WARNING "rs400: Failed to wait MC idle while " + "programming pipes. Bad things might happen. %08x\n", RREG32(0x150)); } } @@ -352,10 +368,11 @@ u32 tmp; /* Setup GPU memory space */ - tmp = G_00015C_MC_FB_START(RREG32(R_00015C_NB_TOM)); + tmp = RREG32(R_00015C_NB_TOM); rdev->mc.vram_location = G_00015C_MC_FB_START(tmp) << 16; rdev->mc.gtt_location = 0xFFFFFFFFUL; r = radeon_mc_setup(rdev); + rdev->mc.igp_sideport_enabled = radeon_combios_sideport_present(rdev); if (r) return r; return 0; @@ -369,8 +386,8 @@ r100_mc_stop(rdev, &save); /* Wait for mc idle */ - if (r300_mc_wait_for_idle(rdev)) - dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n"); + if (rs400_mc_wait_for_idle(rdev)) + dev_warn(rdev->dev, "rs400: Wait MC idle timeout before updating MC.\n"); WREG32(R_000148_MC_FB_LOCATION, S_000148_MC_FB_START(rdev->mc.vram_start >> 16) | S_000148_MC_FB_TOP(rdev->mc.vram_end >> 16)); @@ -387,14 +404,15 @@ r300_clock_startup(rdev); /* Initialize GPU configuration (# pipes, ...) */ rs400_gpu_init(rdev); + r100_enable_bm(rdev); /* Initialize GART (initialize after TTM so we can allocate * memory through TTM but finalize after TTM) */ r = rs400_gart_enable(rdev); if (r) return r; /* Enable IRQ */ - rdev->irq.sw_int = true; r100_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -430,6 +448,8 @@ radeon_combios_asic_init(rdev->ddev); /* Resume clock after posting */ r300_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return rs400_startup(rdev); } @@ -444,7 +464,6 @@ void rs400_fini(struct radeon_device *rdev) { - rs400_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); @@ -452,7 +471,7 @@ rs400_gart_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -490,12 +509,13 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - radeon_combios_asic_init(rdev->ddev); - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; + /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); + /* Initialize power management */ + radeon_pm_init(rdev); /* Get vram informations */ rs400_vram_info(rdev); /* Initialize memory controller (also test AGP) */ @@ -510,7 +530,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; r = rs400_gart_init(rdev); @@ -522,7 +542,6 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - rs400_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/rv770.c +++ linux-2.6.32/drivers/gpu/drm/radeon/rv770.c @@ -92,7 +92,7 @@ void rv770_pcie_gart_disable(struct radeon_device *rdev) { u32 tmp; - int i; + int i, r; /* Disable all tables */ for (i = 0; i < 7; i++) @@ -113,8 +113,12 @@ WREG32(MC_VM_MB_L1_TLB2_CNTL, tmp); WREG32(MC_VM_MB_L1_TLB3_CNTL, tmp); if (rdev->gart.table.vram.robj) { - radeon_object_kunmap(rdev->gart.table.vram.robj); - radeon_object_unpin(rdev->gart.table.vram.robj); + r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rdev->gart.table.vram.robj); + radeon_bo_unpin(rdev->gart.table.vram.robj); + radeon_bo_unreserve(rdev->gart.table.vram.robj); + } } } @@ -545,9 +549,12 @@ gb_tiling_config |= BANK_SWAPS(1); - backend_map = r700_get_tile_pipe_to_backend_map(rdev->config.rv770.max_tile_pipes, - rdev->config.rv770.max_backends, - (0xff << rdev->config.rv770.max_backends) & 0xff); + if (rdev->family == CHIP_RV740) + backend_map = 0x28; + else + backend_map = r700_get_tile_pipe_to_backend_map(rdev->config.rv770.max_tile_pipes, + rdev->config.rv770.max_backends, + (0xff << rdev->config.rv770.max_backends) & 0xff); gb_tiling_config |= BACKEND_MAP(backend_map); cc_gc_shader_pipe_config = @@ -775,7 +782,6 @@ fixed20_12 a; u32 tmp; int chansize, numchan; - int r; /* Get VRAM informations */ rdev->mc.vram_is_ddr = true; @@ -818,9 +824,6 @@ rdev->mc.real_vram_size = rdev->mc.aper_size; if (rdev->flags & RADEON_IS_AGP) { - r = radeon_agp_init(rdev); - if (r) - return r; /* gtt_size is setup by radeon_agp_init */ rdev->mc.gtt_location = rdev->mc.agp_base; tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size; @@ -829,11 +832,11 @@ * AGP so that GPU can catch out of VRAM/AGP access */ if (rdev->mc.gtt_location > rdev->mc.mc_vram_size) { - /* Enought place before */ + /* Enough place before */ rdev->mc.vram_location = rdev->mc.gtt_location - rdev->mc.mc_vram_size; } else if (tmp > rdev->mc.mc_vram_size) { - /* Enought place after */ + /* Enough place after */ rdev->mc.vram_location = rdev->mc.gtt_location + rdev->mc.gtt_size; } else { @@ -870,6 +873,14 @@ { int r; + if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { + r = r600_init_microcode(rdev); + if (r) { + DRM_ERROR("Failed to load firmware!\n"); + return r; + } + } + rv770_mc_program(rdev); if (rdev->flags & RADEON_IS_AGP) { rv770_agp_enable(rdev); @@ -879,13 +890,33 @@ return r; } rv770_gpu_init(rdev); - - r = radeon_object_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, - &rdev->r600_blit.shader_gpu_addr); + r = r600_blit_init(rdev); + if (r) { + r600_blit_fini(rdev); + rdev->asic->copy = NULL; + dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); + } + /* pin copy shader into vram */ + if (rdev->r600_blit.shader_obj) { + r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM, + &rdev->r600_blit.shader_gpu_addr); + radeon_bo_unreserve(rdev->r600_blit.shader_obj); + if (r) { + DRM_ERROR("failed to pin blit object %d\n", r); + return r; + } + } + /* Enable IRQ */ + r = r600_irq_init(rdev); if (r) { - DRM_ERROR("failed to pin blit object %d\n", r); + DRM_ERROR("radeon: IH init failed (%d).\n", r); + radeon_irq_kms_fini(rdev); return r; } + r600_irq_set(rdev); r = radeon_ring_init(rdev, rdev->cp.ring_size); if (r) @@ -934,13 +965,22 @@ int rv770_suspend(struct radeon_device *rdev) { + int r; + /* FIXME: we should wait for ring to be empty */ r700_cp_stop(rdev); rdev->cp.ready = false; + r600_irq_suspend(rdev); r600_wb_disable(rdev); rv770_pcie_gart_disable(rdev); /* unpin shaders bo */ - radeon_object_unpin(rdev->r600_blit.shader_obj); + if (rdev->r600_blit.shader_obj) { + r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false); + if (likely(r == 0)) { + radeon_bo_unpin(rdev->r600_blit.shader_obj); + radeon_bo_unreserve(rdev->r600_blit.shader_obj); + } + } return 0; } @@ -975,7 +1015,11 @@ if (r) return r; /* Post card if necessary */ - if (!r600_card_posted(rdev) && rdev->bios) { + if (!r600_card_posted(rdev)) { + if (!rdev->bios) { + dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n"); + return -EINVAL; + } DRM_INFO("GPU not posted. posting now...\n"); atom_asic_init(rdev->mode_info.atom_context); } @@ -994,53 +1038,55 @@ r = radeon_fence_driver_init(rdev); if (r) return r; + if (rdev->flags & RADEON_IS_AGP) { + r = radeon_agp_init(rdev); + if (r) + radeon_agp_disable(rdev); + } r = rv770_mc_init(rdev); if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; + + r = radeon_irq_kms_init(rdev); + if (r) + return r; + rdev->cp.ring_obj = NULL; r600_ring_init(rdev, 1024 * 1024); - if (!rdev->me_fw || !rdev->pfp_fw) { - r = r600_cp_init_microcode(rdev); - if (r) { - DRM_ERROR("Failed to load firmware!\n"); - return r; - } - } + rdev->ih.ring_obj = NULL; + r600_ih_ring_init(rdev, 64 * 1024); r = r600_pcie_gart_init(rdev); if (r) return r; rdev->accel_working = true; - r = r600_blit_init(rdev); - if (r) { - DRM_ERROR("radeon: failled blitter (%d).\n", r); - rdev->accel_working = false; - } - r = rv770_startup(rdev); if (r) { - rv770_suspend(rdev); + dev_err(rdev->dev, "disabling GPU acceleration\n"); + r600_cp_fini(rdev); r600_wb_fini(rdev); - radeon_ring_fini(rdev); + r600_irq_fini(rdev); + radeon_irq_kms_fini(rdev); rv770_pcie_gart_fini(rdev); rdev->accel_working = false; } if (rdev->accel_working) { r = radeon_ib_pool_init(rdev); if (r) { - DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); - rdev->accel_working = false; - } - r = r600_ib_test(rdev); - if (r) { - DRM_ERROR("radeon: failled testing IB (%d).\n", r); + dev_err(rdev->dev, "IB initialization failed (%d).\n", r); rdev->accel_working = false; + } else { + r = r600_ib_test(rdev); + if (r) { + dev_err(rdev->dev, "IB test failed (%d).\n", r); + rdev->accel_working = false; + } } } return 0; @@ -1048,18 +1094,17 @@ void rv770_fini(struct radeon_device *rdev) { - rv770_suspend(rdev); - r600_blit_fini(rdev); - radeon_ring_fini(rdev); + r600_cp_fini(rdev); r600_wb_fini(rdev); + r600_irq_fini(rdev); + radeon_irq_kms_fini(rdev); rv770_pcie_gart_fini(rdev); radeon_gem_fini(rdev); radeon_fence_driver_fini(rdev); radeon_clocks_fini(rdev); - if (rdev->flags & RADEON_IS_AGP) - radeon_agp_fini(rdev); - radeon_object_fini(rdev); + radeon_agp_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_combios.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_combios.c @@ -50,7 +50,8 @@ uint32_t supported_device, int connector_type, struct radeon_i2c_bus_rec *i2c_bus, - uint16_t connector_object_id); + uint16_t connector_object_id, + struct radeon_hpd *hpd); /* from radeon_legacy_encoder.c */ extern void @@ -442,38 +443,70 @@ } -struct radeon_i2c_bus_rec combios_setup_i2c_bus(int ddc_line) +static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rdev, + int ddc_line) { struct radeon_i2c_bus_rec i2c; - i2c.mask_clk_mask = RADEON_GPIO_EN_1; - i2c.mask_data_mask = RADEON_GPIO_EN_0; - i2c.a_clk_mask = RADEON_GPIO_A_1; - i2c.a_data_mask = RADEON_GPIO_A_0; - i2c.put_clk_mask = RADEON_GPIO_EN_1; - i2c.put_data_mask = RADEON_GPIO_EN_0; - i2c.get_clk_mask = RADEON_GPIO_Y_1; - i2c.get_data_mask = RADEON_GPIO_Y_0; - if ((ddc_line == RADEON_LCD_GPIO_MASK) || - (ddc_line == RADEON_MDGPIO_EN_REG)) { - i2c.mask_clk_reg = ddc_line; - i2c.mask_data_reg = ddc_line; - i2c.a_clk_reg = ddc_line; - i2c.a_data_reg = ddc_line; - i2c.put_clk_reg = ddc_line; - i2c.put_data_reg = ddc_line; - i2c.get_clk_reg = ddc_line + 4; - i2c.get_data_reg = ddc_line + 4; + if (ddc_line == RADEON_GPIOPAD_MASK) { + i2c.mask_clk_reg = RADEON_GPIOPAD_MASK; + i2c.mask_data_reg = RADEON_GPIOPAD_MASK; + i2c.a_clk_reg = RADEON_GPIOPAD_A; + i2c.a_data_reg = RADEON_GPIOPAD_A; + i2c.en_clk_reg = RADEON_GPIOPAD_EN; + i2c.en_data_reg = RADEON_GPIOPAD_EN; + i2c.y_clk_reg = RADEON_GPIOPAD_Y; + i2c.y_data_reg = RADEON_GPIOPAD_Y; + } else if (ddc_line == RADEON_MDGPIO_MASK) { + i2c.mask_clk_reg = RADEON_MDGPIO_MASK; + i2c.mask_data_reg = RADEON_MDGPIO_MASK; + i2c.a_clk_reg = RADEON_MDGPIO_A; + i2c.a_data_reg = RADEON_MDGPIO_A; + i2c.en_clk_reg = RADEON_MDGPIO_EN; + i2c.en_data_reg = RADEON_MDGPIO_EN; + i2c.y_clk_reg = RADEON_MDGPIO_Y; + i2c.y_data_reg = RADEON_MDGPIO_Y; } else { + i2c.mask_clk_mask = RADEON_GPIO_EN_1; + i2c.mask_data_mask = RADEON_GPIO_EN_0; + i2c.a_clk_mask = RADEON_GPIO_A_1; + i2c.a_data_mask = RADEON_GPIO_A_0; + i2c.en_clk_mask = RADEON_GPIO_EN_1; + i2c.en_data_mask = RADEON_GPIO_EN_0; + i2c.y_clk_mask = RADEON_GPIO_Y_1; + i2c.y_data_mask = RADEON_GPIO_Y_0; + i2c.mask_clk_reg = ddc_line; i2c.mask_data_reg = ddc_line; i2c.a_clk_reg = ddc_line; i2c.a_data_reg = ddc_line; - i2c.put_clk_reg = ddc_line; - i2c.put_data_reg = ddc_line; - i2c.get_clk_reg = ddc_line; - i2c.get_data_reg = ddc_line; + i2c.en_clk_reg = ddc_line; + i2c.en_data_reg = ddc_line; + i2c.y_clk_reg = ddc_line; + i2c.y_data_reg = ddc_line; + } + + if (rdev->family < CHIP_R200) + i2c.hw_capable = false; + else { + switch (ddc_line) { + case RADEON_GPIO_VGA_DDC: + case RADEON_GPIO_DVI_DDC: + i2c.hw_capable = true; + break; + case RADEON_GPIO_MONID: + /* hw i2c on RADEON_GPIO_MONID doesn't seem to work + * reliably on some pre-r4xx hardware; not sure why. + */ + i2c.hw_capable = false; + break; + default: + i2c.hw_capable = false; + break; + } } + i2c.mm_i2c = false; + i2c.i2c_id = 0; if (ddc_line) i2c.valid = true; @@ -495,7 +528,7 @@ uint16_t sclk, mclk; if (rdev->bios == NULL) - return NULL; + return false; pll_info = combios_get_table_offset(dev, COMBIOS_PLL_INFO_TABLE); if (pll_info) { @@ -562,6 +595,48 @@ return false; } +bool radeon_combios_sideport_present(struct radeon_device *rdev) +{ + struct drm_device *dev = rdev->ddev; + u16 igp_info; + + igp_info = combios_get_table_offset(dev, COMBIOS_INTEGRATED_SYSTEM_INFO_TABLE); + + if (igp_info) { + if (RBIOS16(igp_info + 0x4)) + return true; + } + return false; +} + +static const uint32_t default_primarydac_adj[CHIP_LAST] = { + 0x00000808, /* r100 */ + 0x00000808, /* rv100 */ + 0x00000808, /* rs100 */ + 0x00000808, /* rv200 */ + 0x00000808, /* rs200 */ + 0x00000808, /* r200 */ + 0x00000808, /* rv250 */ + 0x00000000, /* rs300 */ + 0x00000808, /* rv280 */ + 0x00000808, /* r300 */ + 0x00000808, /* r350 */ + 0x00000808, /* rv350 */ + 0x00000808, /* rv380 */ + 0x00000808, /* r420 */ + 0x00000808, /* r423 */ + 0x00000808, /* rv410 */ + 0x00000000, /* rs400 */ + 0x00000000, /* rs480 */ +}; + +static void radeon_legacy_get_primary_dac_info_from_table(struct radeon_device *rdev, + struct radeon_encoder_primary_dac *p_dac) +{ + p_dac->ps2_pdac_adj = default_primarydac_adj[rdev->family]; + return; +} + struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct radeon_encoder *encoder) @@ -571,20 +646,20 @@ uint16_t dac_info; uint8_t rev, bg, dac; struct radeon_encoder_primary_dac *p_dac = NULL; + int found = 0; - if (rdev->bios == NULL) + p_dac = kzalloc(sizeof(struct radeon_encoder_primary_dac), + GFP_KERNEL); + + if (!p_dac) return NULL; + if (rdev->bios == NULL) + goto out; + /* check CRT table */ dac_info = combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE); if (dac_info) { - p_dac = - kzalloc(sizeof(struct radeon_encoder_primary_dac), - GFP_KERNEL); - - if (!p_dac) - return NULL; - rev = RBIOS8(dac_info) & 0x3; if (rev < 2) { bg = RBIOS8(dac_info + 0x2) & 0xf; @@ -595,20 +670,28 @@ dac = RBIOS8(dac_info + 0x3) & 0xf; p_dac->ps2_pdac_adj = (bg << 8) | (dac); } - + /* if the values are all zeros, use the table */ + if (p_dac->ps2_pdac_adj) + found = 1; } +out: + if (!found) /* fallback to defaults */ + radeon_legacy_get_primary_dac_info_from_table(rdev, p_dac); + return p_dac; } -static enum radeon_tv_std -radeon_combios_get_tv_info(struct radeon_encoder *encoder) +enum radeon_tv_std +radeon_combios_get_tv_info(struct radeon_device *rdev) { - struct drm_device *dev = encoder->base.dev; - struct radeon_device *rdev = dev->dev_private; + struct drm_device *dev = rdev->ddev; uint16_t tv_info; enum radeon_tv_std tv_std = TV_STD_NTSC; + if (rdev->bios == NULL) + return tv_std; + tv_info = combios_get_table_offset(dev, COMBIOS_TV_INFO_TABLE); if (tv_info) { if (RBIOS8(tv_info + 6) == 'T') { @@ -731,7 +814,9 @@ bg = RBIOS8(dac_info + 0x10) & 0xf; dac = RBIOS8(dac_info + 0x11) & 0xf; tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); - found = 1; + /* if the values are all zeros, use the table */ + if (tv_dac->ps2_tvdac_adj) + found = 1; } else if (rev > 1) { bg = RBIOS8(dac_info + 0xc) & 0xf; dac = (RBIOS8(dac_info + 0xc) >> 4) & 0xf; @@ -744,9 +829,11 @@ bg = RBIOS8(dac_info + 0xe) & 0xf; dac = (RBIOS8(dac_info + 0xe) >> 4) & 0xf; tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); - found = 1; + /* if the values are all zeros, use the table */ + if (tv_dac->ps2_tvdac_adj) + found = 1; } - tv_dac->tv_std = radeon_combios_get_tv_info(encoder); + tv_dac->tv_std = radeon_combios_get_tv_info(rdev); } if (!found) { /* then check CRT table */ @@ -761,7 +848,9 @@ (bg << 16) | (dac << 20); tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj; tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj; - found = 1; + /* if the values are all zeros, use the table */ + if (tv_dac->ps2_tvdac_adj) + found = 1; } else { bg = RBIOS8(dac_info + 0x4) & 0xf; dac = RBIOS8(dac_info + 0x5) & 0xf; @@ -769,7 +858,9 @@ (bg << 16) | (dac << 20); tv_dac->pal_tvdac_adj = tv_dac->ps2_tvdac_adj; tv_dac->ntsc_tvdac_adj = tv_dac->ps2_tvdac_adj; - found = 1; + /* if the values are all zeros, use the table */ + if (tv_dac->ps2_tvdac_adj) + found = 1; } } else { DRM_INFO("No TV DAC info found in BIOS\n"); @@ -890,8 +981,7 @@ lvds->native_mode.vdisplay); lvds->panel_vcc_delay = RBIOS16(lcd_info + 0x2c); - if (lvds->panel_vcc_delay > 2000 || lvds->panel_vcc_delay < 0) - lvds->panel_vcc_delay = 2000; + lvds->panel_vcc_delay = min_t(u16, lvds->panel_vcc_delay, 2000); lvds->panel_pwr_delay = RBIOS8(lcd_info + 0x24); lvds->panel_digon_delay = RBIOS16(lcd_info + 0x38) & 0xf; @@ -993,8 +1083,8 @@ {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}}, /* CHIP_R420 */ {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}}, /* CHIP_R423 */ {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}}, /* CHIP_RV410 */ - {{15000, 0xb0155}, {0xffffffff, 0xb01cb}, {0, 0}, {0, 0}}, /* CHIP_RS400 */ - {{15000, 0xb0155}, {0xffffffff, 0xb01cb}, {0, 0}, {0, 0}}, /* CHIP_RS480 */ + { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, /* CHIP_RS400 */ + { {0, 0}, {0, 0}, {0, 0}, {0, 0} }, /* CHIP_RS480 */ }; bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder, @@ -1028,7 +1118,6 @@ tmds_info = combios_get_table_offset(dev, COMBIOS_DFP_INFO_TABLE); if (tmds_info) { - ver = RBIOS8(tmds_info); DRM_INFO("DFP table revision: %d\n", ver); if (ver == 3) { @@ -1063,51 +1152,139 @@ tmds->tmds_pll[i].value); } } - } else + } else { DRM_INFO("No TMDS info found in BIOS\n"); + return false; + } return true; } -struct radeon_encoder_int_tmds *radeon_combios_get_tmds_info(struct radeon_encoder *encoder) +bool radeon_legacy_get_ext_tmds_info_from_table(struct radeon_encoder *encoder, + struct radeon_encoder_ext_tmds *tmds) { - struct radeon_encoder_int_tmds *tmds = NULL; - bool ret; - - tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL); + struct drm_device *dev = encoder->base.dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_i2c_bus_rec i2c_bus; - if (!tmds) - return NULL; + /* default for macs */ + i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID); + tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO"); - ret = radeon_legacy_get_tmds_info_from_combios(encoder, tmds); - if (ret == false) - radeon_legacy_get_tmds_info_from_table(encoder, tmds); + /* XXX some macs have duallink chips */ + switch (rdev->mode_info.connector_table) { + case CT_POWERBOOK_EXTERNAL: + case CT_MINI_EXTERNAL: + default: + tmds->dvo_chip = DVO_SIL164; + tmds->slave_addr = 0x70 >> 1; /* 7 bit addressing */ + break; + } - return tmds; + return true; } -void radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder) +bool radeon_legacy_get_ext_tmds_info_from_combios(struct radeon_encoder *encoder, + struct radeon_encoder_ext_tmds *tmds) { struct drm_device *dev = encoder->base.dev; struct radeon_device *rdev = dev->dev_private; - uint16_t ext_tmds_info; - uint8_t ver; + uint16_t offset; + uint8_t ver, id, blocks, clk, data; + int i; + enum radeon_combios_ddc gpio; + struct radeon_i2c_bus_rec i2c_bus; if (rdev->bios == NULL) - return; + return false; - ext_tmds_info = - combios_get_table_offset(dev, COMBIOS_EXT_TMDS_INFO_TABLE); - if (ext_tmds_info) { - ver = RBIOS8(ext_tmds_info); - DRM_INFO("External TMDS Table revision: %d\n", ver); - // TODO + tmds->i2c_bus = NULL; + if (rdev->flags & RADEON_IS_IGP) { + offset = combios_get_table_offset(dev, COMBIOS_I2C_INFO_TABLE); + if (offset) { + ver = RBIOS8(offset); + DRM_INFO("GPIO Table revision: %d\n", ver); + blocks = RBIOS8(offset + 2); + for (i = 0; i < blocks; i++) { + id = RBIOS8(offset + 3 + (i * 5) + 0); + if (id == 136) { + clk = RBIOS8(offset + 3 + (i * 5) + 3); + data = RBIOS8(offset + 3 + (i * 5) + 4); + i2c_bus.valid = true; + i2c_bus.mask_clk_mask = (1 << clk); + i2c_bus.mask_data_mask = (1 << data); + i2c_bus.a_clk_mask = (1 << clk); + i2c_bus.a_data_mask = (1 << data); + i2c_bus.en_clk_mask = (1 << clk); + i2c_bus.en_data_mask = (1 << data); + i2c_bus.y_clk_mask = (1 << clk); + i2c_bus.y_data_mask = (1 << data); + i2c_bus.mask_clk_reg = RADEON_GPIOPAD_MASK; + i2c_bus.mask_data_reg = RADEON_GPIOPAD_MASK; + i2c_bus.a_clk_reg = RADEON_GPIOPAD_A; + i2c_bus.a_data_reg = RADEON_GPIOPAD_A; + i2c_bus.en_clk_reg = RADEON_GPIOPAD_EN; + i2c_bus.en_data_reg = RADEON_GPIOPAD_EN; + i2c_bus.y_clk_reg = RADEON_GPIOPAD_Y; + i2c_bus.y_data_reg = RADEON_GPIOPAD_Y; + tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO"); + tmds->dvo_chip = DVO_SIL164; + tmds->slave_addr = 0x70 >> 1; /* 7 bit addressing */ + break; + } + } + } + } else { + offset = combios_get_table_offset(dev, COMBIOS_EXT_TMDS_INFO_TABLE); + if (offset) { + ver = RBIOS8(offset); + DRM_INFO("External TMDS Table revision: %d\n", ver); + tmds->slave_addr = RBIOS8(offset + 4 + 2); + tmds->slave_addr >>= 1; /* 7 bit addressing */ + gpio = RBIOS8(offset + 4 + 3); + switch (gpio) { + case DDC_MONID: + i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID); + tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO"); + break; + case DDC_DVI: + i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO"); + break; + case DDC_VGA: + i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO"); + break; + case DDC_CRT2: + /* R3xx+ chips don't have GPIO_CRT2_DDC gpio pad */ + if (rdev->family >= CHIP_R300) + i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID); + else + i2c_bus = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC); + tmds->i2c_bus = radeon_i2c_create(dev, &i2c_bus, "DVO"); + break; + case DDC_LCD: /* MM i2c */ + DRM_ERROR("MM i2c requires hw i2c engine\n"); + break; + default: + DRM_ERROR("Unsupported gpio %d\n", gpio); + break; + } + } + } + + if (!tmds->i2c_bus) { + DRM_INFO("No valid Ext TMDS info found in BIOS\n"); + return false; } + + return true; } bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev) { struct radeon_device *rdev = dev->dev_private; struct radeon_i2c_bus_rec ddc_i2c; + struct radeon_hpd hpd; rdev->mode_info.connector_table = radeon_connector_table; if (rdev->mode_info.connector_table == CT_NONE) { @@ -1168,7 +1345,8 @@ /* these are the most common settings */ if (rdev->flags & RADEON_SINGLE_CRTC) { /* VGA - primary dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT1_SUPPORT, @@ -1178,10 +1356,12 @@ ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); } else if (rdev->flags & RADEON_IS_MOBILITY) { /* LVDS */ - ddc_i2c = combios_setup_i2c_bus(RADEON_LCD_GPIO_MASK); + ddc_i2c = combios_setup_i2c_bus(rdev, 0); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_LCD1_SUPPORT, @@ -1191,10 +1371,12 @@ ATOM_DEVICE_LCD1_SUPPORT, DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, - CONNECTOR_OBJECT_ID_LVDS); + CONNECTOR_OBJECT_ID_LVDS, + &hpd); /* VGA - primary dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT1_SUPPORT, @@ -1204,10 +1386,12 @@ ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); } else { /* DVI-I - tv dac, int tmds */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_1; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_DFP1_SUPPORT, @@ -1223,10 +1407,12 @@ ATOM_DEVICE_CRT2_SUPPORT, DRM_MODE_CONNECTOR_DVII, &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I, + &hpd); /* VGA - primary dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT1_SUPPORT, @@ -1236,11 +1422,14 @@ ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); } if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) { /* TV - tv dac */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1250,14 +1439,16 @@ ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); } break; case CT_IBOOK: DRM_INFO("Connector Table: %d (ibook)\n", rdev->mode_info.connector_table); /* LVDS */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_LCD1_SUPPORT, @@ -1265,9 +1456,11 @@ ATOM_DEVICE_LCD1_SUPPORT); radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, - CONNECTOR_OBJECT_ID_LVDS); + CONNECTOR_OBJECT_ID_LVDS, + &hpd); /* VGA - TV DAC */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT2_SUPPORT, @@ -1275,8 +1468,11 @@ ATOM_DEVICE_CRT2_SUPPORT); radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1285,13 +1481,15 @@ radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_POWERBOOK_EXTERNAL: DRM_INFO("Connector Table: %d (powerbook external tmds)\n", rdev->mode_info.connector_table); /* LVDS */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_LCD1_SUPPORT, @@ -1299,9 +1497,11 @@ ATOM_DEVICE_LCD1_SUPPORT); radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, - CONNECTOR_OBJECT_ID_LVDS); + CONNECTOR_OBJECT_ID_LVDS, + &hpd); /* DVI-I - primary dac, ext tmds */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_2; /* ??? */ radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_DFP2_SUPPORT, @@ -1317,8 +1517,11 @@ ATOM_DEVICE_DFP2_SUPPORT | ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_DVII, &ddc_i2c, - CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I); + CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1327,13 +1530,15 @@ radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_POWERBOOK_INTERNAL: DRM_INFO("Connector Table: %d (powerbook internal tmds)\n", rdev->mode_info.connector_table); /* LVDS */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_LCD1_SUPPORT, @@ -1341,9 +1546,11 @@ ATOM_DEVICE_LCD1_SUPPORT); radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, - CONNECTOR_OBJECT_ID_LVDS); + CONNECTOR_OBJECT_ID_LVDS, + &hpd); /* DVI-I - primary dac, int tmds */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_1; /* ??? */ radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_DFP1_SUPPORT, @@ -1358,8 +1565,11 @@ ATOM_DEVICE_DFP1_SUPPORT | ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_DVII, &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1368,13 +1578,15 @@ radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_POWERBOOK_VGA: DRM_INFO("Connector Table: %d (powerbook vga)\n", rdev->mode_info.connector_table); /* LVDS */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_LCD1_SUPPORT, @@ -1382,9 +1594,11 @@ ATOM_DEVICE_LCD1_SUPPORT); radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT, DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, - CONNECTOR_OBJECT_ID_LVDS); + CONNECTOR_OBJECT_ID_LVDS, + &hpd); /* VGA - primary dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT1_SUPPORT, @@ -1392,8 +1606,11 @@ ATOM_DEVICE_CRT1_SUPPORT); radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1402,13 +1619,15 @@ radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_MINI_EXTERNAL: DRM_INFO("Connector Table: %d (mini external tmds)\n", rdev->mode_info.connector_table); /* DVI-I - tv dac, ext tmds */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC); + hpd.hpd = RADEON_HPD_2; /* ??? */ radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_DFP2_SUPPORT, @@ -1424,8 +1643,11 @@ ATOM_DEVICE_DFP2_SUPPORT | ATOM_DEVICE_CRT2_SUPPORT, DRM_MODE_CONNECTOR_DVII, &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1434,13 +1656,15 @@ radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_MINI_INTERNAL: DRM_INFO("Connector Table: %d (mini internal tmds)\n", rdev->mode_info.connector_table); /* DVI-I - tv dac, int tmds */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC); + hpd.hpd = RADEON_HPD_1; /* ??? */ radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_DFP1_SUPPORT, @@ -1455,8 +1679,11 @@ ATOM_DEVICE_DFP1_SUPPORT | ATOM_DEVICE_CRT2_SUPPORT, DRM_MODE_CONNECTOR_DVII, &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1465,13 +1692,15 @@ radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_IMAC_G5_ISIGHT: DRM_INFO("Connector Table: %d (imac g5 isight)\n", rdev->mode_info.connector_table); /* DVI-D - int tmds */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_MONID); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID); + hpd.hpd = RADEON_HPD_1; /* ??? */ radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_DFP1_SUPPORT, @@ -1479,9 +1708,11 @@ ATOM_DEVICE_DFP1_SUPPORT); radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_DFP1_SUPPORT, DRM_MODE_CONNECTOR_DVID, &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D, + &hpd); /* VGA - tv dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT2_SUPPORT, @@ -1489,8 +1720,11 @@ ATOM_DEVICE_CRT2_SUPPORT); radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1499,13 +1733,15 @@ radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; case CT_EMAC: DRM_INFO("Connector Table: %d (emac)\n", rdev->mode_info.connector_table); /* VGA - primary dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT1_SUPPORT, @@ -1513,9 +1749,11 @@ ATOM_DEVICE_CRT1_SUPPORT); radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); /* VGA - tv dac */ - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_CRT2_SUPPORT, @@ -1523,8 +1761,11 @@ ATOM_DEVICE_CRT2_SUPPORT); radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); /* TV - TV DAC */ + ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id(dev, ATOM_DEVICE_TV1_SUPPORT, @@ -1533,7 +1774,8 @@ radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; default: DRM_INFO("Connector table: %d (invalid)\n", @@ -1550,7 +1792,8 @@ int bios_index, enum radeon_combios_connector *legacy_connector, - struct radeon_i2c_bus_rec *ddc_i2c) + struct radeon_i2c_bus_rec *ddc_i2c, + struct radeon_hpd *hpd) { struct radeon_device *rdev = dev->dev_private; @@ -1558,29 +1801,26 @@ if ((rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) && ddc_i2c->mask_clk_reg == RADEON_GPIO_CRT2_DDC) - *ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_MONID); + *ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID); else if ((rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) && ddc_i2c->mask_clk_reg == RADEON_GPIO_MONID) { - ddc_i2c->valid = true; + *ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIOPAD_MASK); ddc_i2c->mask_clk_mask = (0x20 << 8); ddc_i2c->mask_data_mask = 0x80; ddc_i2c->a_clk_mask = (0x20 << 8); ddc_i2c->a_data_mask = 0x80; - ddc_i2c->put_clk_mask = (0x20 << 8); - ddc_i2c->put_data_mask = 0x80; - ddc_i2c->get_clk_mask = (0x20 << 8); - ddc_i2c->get_data_mask = 0x80; - ddc_i2c->mask_clk_reg = RADEON_GPIOPAD_MASK; - ddc_i2c->mask_data_reg = RADEON_GPIOPAD_MASK; - ddc_i2c->a_clk_reg = RADEON_GPIOPAD_A; - ddc_i2c->a_data_reg = RADEON_GPIOPAD_A; - ddc_i2c->put_clk_reg = RADEON_GPIOPAD_EN; - ddc_i2c->put_data_reg = RADEON_GPIOPAD_EN; - ddc_i2c->get_clk_reg = RADEON_LCD_GPIO_Y_REG; - ddc_i2c->get_data_reg = RADEON_LCD_GPIO_Y_REG; + ddc_i2c->en_clk_mask = (0x20 << 8); + ddc_i2c->en_data_mask = 0x80; + ddc_i2c->y_clk_mask = (0x20 << 8); + ddc_i2c->y_data_mask = 0x80; } + /* R3xx+ chips don't have GPIO_CRT2_DDC gpio pad */ + if ((rdev->family >= CHIP_R300) && + ddc_i2c->mask_clk_reg == RADEON_GPIO_CRT2_DDC) + *ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + /* Certain IBM chipset RN50s have a BIOS reporting two VGAs, one with VGA DDC and one with CRT2 DDC. - kill the CRT2 DDC one */ if (dev->pdev->device == 0x515e && @@ -1624,6 +1864,12 @@ dev->pdev->subsystem_device == 0x280a) return false; + /* MSI S270 has non-existent TV port */ + if (dev->pdev->device == 0x5955 && + dev->pdev->subsystem_vendor == 0x1462 && + dev->pdev->subsystem_device == 0x0131) + return false; + return true; } @@ -1671,6 +1917,7 @@ enum radeon_combios_connector connector; int i = 0; struct radeon_i2c_bus_rec ddc_i2c; + struct radeon_hpd hpd; if (rdev->bios == NULL) return false; @@ -1691,26 +1938,40 @@ switch (ddc_type) { case DDC_MONID: ddc_i2c = - combios_setup_i2c_bus(RADEON_GPIO_MONID); + combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID); break; case DDC_DVI: ddc_i2c = - combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); break; case DDC_VGA: ddc_i2c = - combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); break; case DDC_CRT2: ddc_i2c = - combios_setup_i2c_bus(RADEON_GPIO_CRT2_DDC); + combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC); break; default: break; } + switch (connector) { + case CONNECTOR_PROPRIETARY_LEGACY: + case CONNECTOR_DVI_I_LEGACY: + case CONNECTOR_DVI_D_LEGACY: + if ((tmp >> 4) & 0x1) + hpd.hpd = RADEON_HPD_2; + else + hpd.hpd = RADEON_HPD_1; + break; + default: + hpd.hpd = RADEON_HPD_NONE; + break; + } + if (!radeon_apply_legacy_quirks(dev, i, &connector, - &ddc_i2c)) + &ddc_i2c, &hpd)) continue; switch (connector) { @@ -1727,7 +1988,8 @@ legacy_connector_convert [connector], &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D, + &hpd); break; case CONNECTOR_CRT_LEGACY: if (tmp & 0x1) { @@ -1753,7 +2015,8 @@ legacy_connector_convert [connector], &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); break; case CONNECTOR_DVI_I_LEGACY: devices = 0; @@ -1799,7 +2062,8 @@ legacy_connector_convert [connector], &ddc_i2c, - connector_object_id); + connector_object_id, + &hpd); break; case CONNECTOR_DVI_D_LEGACY: if ((tmp >> 4) & 0x1) { @@ -1817,7 +2081,8 @@ legacy_connector_convert [connector], &ddc_i2c, - connector_object_id); + connector_object_id, + &hpd); break; case CONNECTOR_CTV_LEGACY: case CONNECTOR_STV_LEGACY: @@ -1832,7 +2097,8 @@ legacy_connector_convert [connector], &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); break; default: DRM_ERROR("Unknown connector type: %d\n", @@ -1858,14 +2124,16 @@ 0), ATOM_DEVICE_DFP1_SUPPORT); - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_DVI_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT | ATOM_DEVICE_DFP1_SUPPORT, DRM_MODE_CONNECTOR_DVII, &ddc_i2c, - CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I); + CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I, + &hpd); } else { uint16_t crt_info = combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE); @@ -1876,13 +2144,15 @@ ATOM_DEVICE_CRT1_SUPPORT, 1), ATOM_DEVICE_CRT1_SUPPORT); - ddc_i2c = combios_setup_i2c_bus(RADEON_GPIO_VGA_DDC); + ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC); + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT, DRM_MODE_CONNECTOR_VGA, &ddc_i2c, - CONNECTOR_OBJECT_ID_VGA); + CONNECTOR_OBJECT_ID_VGA, + &hpd); } else { DRM_DEBUG("No connector info found\n"); return false; @@ -1910,27 +2180,27 @@ case DDC_MONID: ddc_i2c = combios_setup_i2c_bus - (RADEON_GPIO_MONID); + (rdev, RADEON_GPIO_MONID); break; case DDC_DVI: ddc_i2c = combios_setup_i2c_bus - (RADEON_GPIO_DVI_DDC); + (rdev, RADEON_GPIO_DVI_DDC); break; case DDC_VGA: ddc_i2c = combios_setup_i2c_bus - (RADEON_GPIO_VGA_DDC); + (rdev, RADEON_GPIO_VGA_DDC); break; case DDC_CRT2: ddc_i2c = combios_setup_i2c_bus - (RADEON_GPIO_CRT2_DDC); + (rdev, RADEON_GPIO_CRT2_DDC); break; case DDC_LCD: ddc_i2c = combios_setup_i2c_bus - (RADEON_LCD_GPIO_MASK); + (rdev, RADEON_GPIOPAD_MASK); ddc_i2c.mask_clk_mask = RBIOS32(lcd_ddc_info + 3); ddc_i2c.mask_data_mask = @@ -1939,19 +2209,19 @@ RBIOS32(lcd_ddc_info + 3); ddc_i2c.a_data_mask = RBIOS32(lcd_ddc_info + 7); - ddc_i2c.put_clk_mask = + ddc_i2c.en_clk_mask = RBIOS32(lcd_ddc_info + 3); - ddc_i2c.put_data_mask = + ddc_i2c.en_data_mask = RBIOS32(lcd_ddc_info + 7); - ddc_i2c.get_clk_mask = + ddc_i2c.y_clk_mask = RBIOS32(lcd_ddc_info + 3); - ddc_i2c.get_data_mask = + ddc_i2c.y_data_mask = RBIOS32(lcd_ddc_info + 7); break; case DDC_GPIO: ddc_i2c = combios_setup_i2c_bus - (RADEON_MDGPIO_EN_REG); + (rdev, RADEON_MDGPIO_MASK); ddc_i2c.mask_clk_mask = RBIOS32(lcd_ddc_info + 3); ddc_i2c.mask_data_mask = @@ -1960,13 +2230,13 @@ RBIOS32(lcd_ddc_info + 3); ddc_i2c.a_data_mask = RBIOS32(lcd_ddc_info + 7); - ddc_i2c.put_clk_mask = + ddc_i2c.en_clk_mask = RBIOS32(lcd_ddc_info + 3); - ddc_i2c.put_data_mask = + ddc_i2c.en_data_mask = RBIOS32(lcd_ddc_info + 7); - ddc_i2c.get_clk_mask = + ddc_i2c.y_clk_mask = RBIOS32(lcd_ddc_info + 3); - ddc_i2c.get_data_mask = + ddc_i2c.y_data_mask = RBIOS32(lcd_ddc_info + 7); break; default: @@ -1977,12 +2247,14 @@ } else ddc_i2c.valid = false; + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_connector(dev, 5, ATOM_DEVICE_LCD1_SUPPORT, DRM_MODE_CONNECTOR_LVDS, &ddc_i2c, - CONNECTOR_OBJECT_ID_LVDS); + CONNECTOR_OBJECT_ID_LVDS, + &hpd); } } @@ -1993,6 +2265,7 @@ if (tv_info) { if (RBIOS8(tv_info + 6) == 'T') { if (radeon_apply_legacy_tv_quirks(dev)) { + hpd.hpd = RADEON_HPD_NONE; radeon_add_legacy_encoder(dev, radeon_get_encoder_id (dev, @@ -2003,7 +2276,8 @@ ATOM_DEVICE_TV1_SUPPORT, DRM_MODE_CONNECTOR_SVIDEO, &ddc_i2c, - CONNECTOR_OBJECT_ID_SVIDEO); + CONNECTOR_OBJECT_ID_SVIDEO, + &hpd); } } } @@ -2014,6 +2288,193 @@ return true; } +void radeon_external_tmds_setup(struct drm_encoder *encoder) +{ + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + struct radeon_encoder_ext_tmds *tmds = radeon_encoder->enc_priv; + + if (!tmds) + return; + + switch (tmds->dvo_chip) { + case DVO_SIL164: + /* sil 164 */ + radeon_i2c_do_lock(tmds->i2c_bus, 1); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + tmds->slave_addr, + 0x08, 0x30); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + tmds->slave_addr, + 0x09, 0x00); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + tmds->slave_addr, + 0x0a, 0x90); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + tmds->slave_addr, + 0x0c, 0x89); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + tmds->slave_addr, + 0x08, 0x3b); + radeon_i2c_do_lock(tmds->i2c_bus, 0); + break; + case DVO_SIL1178: + /* sil 1178 - untested */ + /* + * 0x0f, 0x44 + * 0x0f, 0x4c + * 0x0e, 0x01 + * 0x0a, 0x80 + * 0x09, 0x30 + * 0x0c, 0xc9 + * 0x0d, 0x70 + * 0x08, 0x32 + * 0x08, 0x33 + */ + break; + default: + break; + } + +} + +bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder) +{ + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + uint16_t offset; + uint8_t blocks, slave_addr, rev; + uint32_t index, id; + uint32_t reg, val, and_mask, or_mask; + struct radeon_encoder_ext_tmds *tmds = radeon_encoder->enc_priv; + + if (rdev->bios == NULL) + return false; + + if (!tmds) + return false; + + if (rdev->flags & RADEON_IS_IGP) { + offset = combios_get_table_offset(dev, COMBIOS_TMDS_POWER_ON_TABLE); + rev = RBIOS8(offset); + if (offset) { + rev = RBIOS8(offset); + if (rev > 1) { + blocks = RBIOS8(offset + 3); + index = offset + 4; + while (blocks > 0) { + id = RBIOS16(index); + index += 2; + switch (id >> 13) { + case 0: + reg = (id & 0x1fff) * 4; + val = RBIOS32(index); + index += 4; + WREG32(reg, val); + break; + case 2: + reg = (id & 0x1fff) * 4; + and_mask = RBIOS32(index); + index += 4; + or_mask = RBIOS32(index); + index += 4; + val = RREG32(reg); + val = (val & and_mask) | or_mask; + WREG32(reg, val); + break; + case 3: + val = RBIOS16(index); + index += 2; + udelay(val); + break; + case 4: + val = RBIOS16(index); + index += 2; + udelay(val * 1000); + break; + case 6: + slave_addr = id & 0xff; + slave_addr >>= 1; /* 7 bit addressing */ + index++; + reg = RBIOS8(index); + index++; + val = RBIOS8(index); + index++; + radeon_i2c_do_lock(tmds->i2c_bus, 1); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + slave_addr, + reg, val); + radeon_i2c_do_lock(tmds->i2c_bus, 0); + break; + default: + DRM_ERROR("Unknown id %d\n", id >> 13); + break; + } + blocks--; + } + return true; + } + } + } else { + offset = combios_get_table_offset(dev, COMBIOS_EXT_TMDS_INFO_TABLE); + if (offset) { + index = offset + 10; + id = RBIOS16(index); + while (id != 0xffff) { + index += 2; + switch (id >> 13) { + case 0: + reg = (id & 0x1fff) * 4; + val = RBIOS32(index); + WREG32(reg, val); + break; + case 2: + reg = (id & 0x1fff) * 4; + and_mask = RBIOS32(index); + index += 4; + or_mask = RBIOS32(index); + index += 4; + val = RREG32(reg); + val = (val & and_mask) | or_mask; + WREG32(reg, val); + break; + case 4: + val = RBIOS16(index); + index += 2; + udelay(val); + break; + case 5: + reg = id & 0x1fff; + and_mask = RBIOS32(index); + index += 4; + or_mask = RBIOS32(index); + index += 4; + val = RREG32_PLL(reg); + val = (val & and_mask) | or_mask; + WREG32_PLL(reg, val); + break; + case 6: + reg = id & 0x1fff; + val = RBIOS8(index); + index += 1; + radeon_i2c_do_lock(tmds->i2c_bus, 1); + radeon_i2c_sw_put_byte(tmds->i2c_bus, + tmds->slave_addr, + reg, val); + radeon_i2c_do_lock(tmds->i2c_bus, 0); + break; + default: + DRM_ERROR("Unknown id %d\n", id >> 13); + break; + } + id = RBIOS16(index); + } + return true; + } + } + return false; +} + static void combios_parse_mmio_table(struct drm_device *dev, uint16_t offset) { struct radeon_device *rdev = dev->dev_private; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/atombios_crtc.c +++ linux-2.6.32/drivers/gpu/drm/radeon/atombios_crtc.c @@ -241,6 +241,7 @@ { struct drm_device *dev = crtc->dev; struct radeon_device *rdev = dev->dev_private; + struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); switch (mode) { case DRM_MODE_DPMS_ON: @@ -248,20 +249,19 @@ if (ASIC_IS_DCE3(rdev)) atombios_enable_crtc_memreq(crtc, 1); atombios_blank_crtc(crtc, 0); + drm_vblank_post_modeset(dev, radeon_crtc->crtc_id); + radeon_crtc_load_lut(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: + drm_vblank_pre_modeset(dev, radeon_crtc->crtc_id); atombios_blank_crtc(crtc, 1); if (ASIC_IS_DCE3(rdev)) atombios_enable_crtc_memreq(crtc, 0); atombios_enable_crtc(crtc, 0); break; } - - if (mode != DRM_MODE_DPMS_OFF) { - radeon_crtc_load_lut(crtc); - } } static void @@ -307,7 +307,6 @@ args.susModeMiscInfo.usAccess = cpu_to_le16(misc); args.ucCRTC = radeon_crtc->crtc_id; - printk("executing set crtc dtd timing\n"); atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); } @@ -347,7 +346,6 @@ args.susModeMiscInfo.usAccess = cpu_to_le16(misc); args.ucCRTC = radeon_crtc->crtc_id; - printk("executing set crtc timing\n"); atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); } @@ -409,60 +407,75 @@ } } -void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode) +union adjust_pixel_clock { + ADJUST_DISPLAY_PLL_PS_ALLOCATION v1; +}; + +static u32 atombios_adjust_pll(struct drm_crtc *crtc, + struct drm_display_mode *mode, + struct radeon_pll *pll) { - struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); struct drm_device *dev = crtc->dev; struct radeon_device *rdev = dev->dev_private; struct drm_encoder *encoder = NULL; struct radeon_encoder *radeon_encoder = NULL; - uint8_t frev, crev; - int index; - SET_PIXEL_CLOCK_PS_ALLOCATION args; - PIXEL_CLOCK_PARAMETERS *spc1_ptr; - PIXEL_CLOCK_PARAMETERS_V2 *spc2_ptr; - PIXEL_CLOCK_PARAMETERS_V3 *spc3_ptr; - uint32_t pll_clock = mode->clock; - uint32_t adjusted_clock; - uint32_t ref_div = 0, fb_div = 0, frac_fb_div = 0, post_div = 0; - struct radeon_pll *pll; - int pll_flags = 0; + u32 adjusted_clock = mode->clock; - memset(&args, 0, sizeof(args)); + /* reset the pll flags */ + pll->flags = 0; + + /* select the PLL algo */ + if (ASIC_IS_AVIVO(rdev)) { + if (radeon_new_pll == 0) + pll->algo = PLL_ALGO_LEGACY; + else + pll->algo = PLL_ALGO_NEW; + } else { + if (radeon_new_pll == 1) + pll->algo = PLL_ALGO_NEW; + else + pll->algo = PLL_ALGO_LEGACY; + } if (ASIC_IS_AVIVO(rdev)) { if ((rdev->family == CHIP_RS600) || (rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) - pll_flags |= (RADEON_PLL_USE_FRAC_FB_DIV | - RADEON_PLL_PREFER_CLOSEST_LOWER); + pll->flags |= (RADEON_PLL_USE_FRAC_FB_DIV | + RADEON_PLL_PREFER_CLOSEST_LOWER); if (ASIC_IS_DCE32(rdev) && mode->clock > 200000) /* range limits??? */ - pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; + pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; else - pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; + pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV; } else { - pll_flags |= RADEON_PLL_LEGACY; + pll->flags |= RADEON_PLL_LEGACY; if (mode->clock > 200000) /* range limits??? */ - pll_flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; + pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; else - pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; + pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV; } list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { if (encoder->crtc == crtc) { - if (!ASIC_IS_AVIVO(rdev)) { - if (encoder->encoder_type != - DRM_MODE_ENCODER_DAC) - pll_flags |= RADEON_PLL_NO_ODD_POST_DIV; - if (!ASIC_IS_AVIVO(rdev) - && (encoder->encoder_type == - DRM_MODE_ENCODER_LVDS)) - pll_flags |= RADEON_PLL_USE_REF_DIV; - } radeon_encoder = to_radeon_encoder(encoder); + if (ASIC_IS_AVIVO(rdev)) { + /* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */ + if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1) + adjusted_clock = mode->clock * 2; + /* LVDS PLL quirks */ + if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS) { + struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; + pll->algo = dig->pll_algo; + } + } else { + if (encoder->encoder_type != DRM_MODE_ENCODER_DAC) + pll->flags |= RADEON_PLL_NO_ODD_POST_DIV; + if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS) + pll->flags |= RADEON_PLL_USE_REF_DIV; + } break; } } @@ -472,36 +485,91 @@ * special hw requirements. */ if (ASIC_IS_DCE3(rdev)) { - ADJUST_DISPLAY_PLL_PS_ALLOCATION adjust_pll_args; + union adjust_pixel_clock args; + struct radeon_encoder_atom_dig *dig; + u8 frev, crev; + int index; + + if (!radeon_encoder->enc_priv) + return adjusted_clock; + dig = radeon_encoder->enc_priv; - if (!encoder) - return; + index = GetIndexIntoMasterTable(COMMAND, AdjustDisplayPll); + atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, + &crev); - memset(&adjust_pll_args, 0, sizeof(adjust_pll_args)); - adjust_pll_args.usPixelClock = cpu_to_le16(mode->clock / 10); - adjust_pll_args.ucTransmitterID = radeon_encoder->encoder_id; - adjust_pll_args.ucEncodeMode = atombios_get_encoder_mode(encoder); + memset(&args, 0, sizeof(args)); - index = GetIndexIntoMasterTable(COMMAND, AdjustDisplayPll); - atom_execute_table(rdev->mode_info.atom_context, - index, (uint32_t *)&adjust_pll_args); - adjusted_clock = le16_to_cpu(adjust_pll_args.usPixelClock) * 10; - } else { - /* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */ - if (ASIC_IS_AVIVO(rdev) && - (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1)) - adjusted_clock = mode->clock * 2; - else - adjusted_clock = mode->clock; + switch (frev) { + case 1: + switch (crev) { + case 1: + case 2: + args.v1.usPixelClock = cpu_to_le16(mode->clock / 10); + args.v1.ucTransmitterID = radeon_encoder->encoder_id; + args.v1.ucEncodeMode = atombios_get_encoder_mode(encoder); + + atom_execute_table(rdev->mode_info.atom_context, + index, (uint32_t *)&args); + adjusted_clock = le16_to_cpu(args.v1.usPixelClock) * 10; + break; + default: + DRM_ERROR("Unknown table version %d %d\n", frev, crev); + return adjusted_clock; + } + break; + default: + DRM_ERROR("Unknown table version %d %d\n", frev, crev); + return adjusted_clock; + } + } + return adjusted_clock; +} + +union set_pixel_clock { + SET_PIXEL_CLOCK_PS_ALLOCATION base; + PIXEL_CLOCK_PARAMETERS v1; + PIXEL_CLOCK_PARAMETERS_V2 v2; + PIXEL_CLOCK_PARAMETERS_V3 v3; +}; + +void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode) +{ + struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); + struct drm_device *dev = crtc->dev; + struct radeon_device *rdev = dev->dev_private; + struct drm_encoder *encoder = NULL; + struct radeon_encoder *radeon_encoder = NULL; + u8 frev, crev; + int index; + union set_pixel_clock args; + u32 pll_clock = mode->clock; + u32 ref_div = 0, fb_div = 0, frac_fb_div = 0, post_div = 0; + struct radeon_pll *pll; + u32 adjusted_clock; + + memset(&args, 0, sizeof(args)); + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + if (encoder->crtc == crtc) { + radeon_encoder = to_radeon_encoder(encoder); + break; + } } + if (!radeon_encoder) + return; + if (radeon_crtc->crtc_id == 0) pll = &rdev->clock.p1pll; else pll = &rdev->clock.p2pll; + /* adjust pixel clock as needed */ + adjusted_clock = atombios_adjust_pll(crtc, mode, pll); + radeon_compute_pll(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, - &ref_div, &post_div, pll_flags); + &ref_div, &post_div); index = GetIndexIntoMasterTable(COMMAND, SetPixelClock); atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, @@ -511,45 +579,38 @@ case 1: switch (crev) { case 1: - spc1_ptr = (PIXEL_CLOCK_PARAMETERS *) & args.sPCLKInput; - spc1_ptr->usPixelClock = cpu_to_le16(mode->clock / 10); - spc1_ptr->usRefDiv = cpu_to_le16(ref_div); - spc1_ptr->usFbDiv = cpu_to_le16(fb_div); - spc1_ptr->ucFracFbDiv = frac_fb_div; - spc1_ptr->ucPostDiv = post_div; - spc1_ptr->ucPpll = + args.v1.usPixelClock = cpu_to_le16(mode->clock / 10); + args.v1.usRefDiv = cpu_to_le16(ref_div); + args.v1.usFbDiv = cpu_to_le16(fb_div); + args.v1.ucFracFbDiv = frac_fb_div; + args.v1.ucPostDiv = post_div; + args.v1.ucPpll = radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; - spc1_ptr->ucCRTC = radeon_crtc->crtc_id; - spc1_ptr->ucRefDivSrc = 1; + args.v1.ucCRTC = radeon_crtc->crtc_id; + args.v1.ucRefDivSrc = 1; break; case 2: - spc2_ptr = - (PIXEL_CLOCK_PARAMETERS_V2 *) & args.sPCLKInput; - spc2_ptr->usPixelClock = cpu_to_le16(mode->clock / 10); - spc2_ptr->usRefDiv = cpu_to_le16(ref_div); - spc2_ptr->usFbDiv = cpu_to_le16(fb_div); - spc2_ptr->ucFracFbDiv = frac_fb_div; - spc2_ptr->ucPostDiv = post_div; - spc2_ptr->ucPpll = + args.v2.usPixelClock = cpu_to_le16(mode->clock / 10); + args.v2.usRefDiv = cpu_to_le16(ref_div); + args.v2.usFbDiv = cpu_to_le16(fb_div); + args.v2.ucFracFbDiv = frac_fb_div; + args.v2.ucPostDiv = post_div; + args.v2.ucPpll = radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; - spc2_ptr->ucCRTC = radeon_crtc->crtc_id; - spc2_ptr->ucRefDivSrc = 1; + args.v2.ucCRTC = radeon_crtc->crtc_id; + args.v2.ucRefDivSrc = 1; break; case 3: - if (!encoder) - return; - spc3_ptr = - (PIXEL_CLOCK_PARAMETERS_V3 *) & args.sPCLKInput; - spc3_ptr->usPixelClock = cpu_to_le16(mode->clock / 10); - spc3_ptr->usRefDiv = cpu_to_le16(ref_div); - spc3_ptr->usFbDiv = cpu_to_le16(fb_div); - spc3_ptr->ucFracFbDiv = frac_fb_div; - spc3_ptr->ucPostDiv = post_div; - spc3_ptr->ucPpll = + args.v3.usPixelClock = cpu_to_le16(mode->clock / 10); + args.v3.usRefDiv = cpu_to_le16(ref_div); + args.v3.usFbDiv = cpu_to_le16(fb_div); + args.v3.ucFracFbDiv = frac_fb_div; + args.v3.ucPostDiv = post_div; + args.v3.ucPpll = radeon_crtc->crtc_id ? ATOM_PPLL2 : ATOM_PPLL1; - spc3_ptr->ucMiscInfo = (radeon_crtc->crtc_id << 2); - spc3_ptr->ucTransmitterId = radeon_encoder->encoder_id; - spc3_ptr->ucEncoderMode = + args.v3.ucMiscInfo = (radeon_crtc->crtc_id << 2); + args.v3.ucTransmitterId = radeon_encoder->encoder_id; + args.v3.ucEncoderMode = atombios_get_encoder_mode(encoder); break; default: @@ -562,33 +623,43 @@ return; } - printk("executing set pll\n"); atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); } -int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, - struct drm_framebuffer *old_fb) +static int avivo_crtc_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb) { struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); struct drm_device *dev = crtc->dev; struct radeon_device *rdev = dev->dev_private; struct radeon_framebuffer *radeon_fb; struct drm_gem_object *obj; - struct drm_radeon_gem_object *obj_priv; + struct radeon_bo *rbo; uint64_t fb_location; uint32_t fb_format, fb_pitch_pixels, tiling_flags; + int r; - if (!crtc->fb) - return -EINVAL; + /* no fb bound */ + if (!crtc->fb) { + DRM_DEBUG("No FB bound\n"); + return 0; + } radeon_fb = to_radeon_framebuffer(crtc->fb); + /* Pin framebuffer & get tilling informations */ obj = radeon_fb->obj; - obj_priv = obj->driver_private; - - if (radeon_gem_object_pin(obj, RADEON_GEM_DOMAIN_VRAM, &fb_location)) { + rbo = obj->driver_private; + r = radeon_bo_reserve(rbo, false); + if (unlikely(r != 0)) + return r; + r = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &fb_location); + if (unlikely(r != 0)) { + radeon_bo_unreserve(rbo); return -EINVAL; } + radeon_bo_get_tiling_flags(rbo, &tiling_flags, NULL); + radeon_bo_unreserve(rbo); switch (crtc->fb->bits_per_pixel) { case 8: @@ -618,8 +689,6 @@ return -EINVAL; } - radeon_object_get_tiling_flags(obj->driver_private, - &tiling_flags, NULL); if (tiling_flags & RADEON_TILING_MACRO) fb_format |= AVIVO_D1GRPH_MACRO_ADDRESS_MODE; @@ -674,7 +743,12 @@ if (old_fb && old_fb != crtc->fb) { radeon_fb = to_radeon_framebuffer(old_fb); - radeon_gem_object_unpin(radeon_fb->obj); + rbo = radeon_fb->obj->driver_private; + r = radeon_bo_reserve(rbo, false); + if (unlikely(r != 0)) + return r; + radeon_bo_unpin(rbo); + radeon_bo_unreserve(rbo); } /* Bytes per pixel may have changed */ @@ -683,6 +757,42 @@ return 0; } +int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb) +{ + struct drm_device *dev = crtc->dev; + struct radeon_device *rdev = dev->dev_private; + + if (ASIC_IS_AVIVO(rdev)) + return avivo_crtc_set_base(crtc, x, y, old_fb); + else + return radeon_crtc_set_base(crtc, x, y, old_fb); +} + +/* properly set additional regs when using atombios */ +static void radeon_legacy_atom_fixup(struct drm_crtc *crtc) +{ + struct drm_device *dev = crtc->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); + u32 disp_merge_cntl; + + switch (radeon_crtc->crtc_id) { + case 0: + disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL); + disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN; + WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl); + break; + case 1: + disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL); + disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN; + WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl); + WREG32(RADEON_FP_H2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_H_SYNC_STRT_WID)); + WREG32(RADEON_FP_V2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_V_SYNC_STRT_WID)); + break; + } +} + int atombios_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode, @@ -704,8 +814,8 @@ else { if (radeon_crtc->crtc_id == 0) atombios_set_crtc_dtd_timing(crtc, adjusted_mode); - radeon_crtc_set_base(crtc, x, y, old_fb); - radeon_legacy_atom_set_surface(crtc); + atombios_crtc_set_base(crtc, x, y, old_fb); + radeon_legacy_atom_fixup(crtc); } atombios_overscan_setup(crtc, mode, adjusted_mode); atombios_scaler_setup(crtc); @@ -723,8 +833,8 @@ static void atombios_crtc_prepare(struct drm_crtc *crtc) { - atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); atombios_lock_crtc(crtc, 1); + atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); } static void atombios_crtc_commit(struct drm_crtc *crtc) --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_connectors.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_connectors.c @@ -40,6 +40,28 @@ struct drm_encoder *encoder, bool connected); +void radeon_connector_hotplug(struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct radeon_device *rdev = dev->dev_private; + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + + if (radeon_connector->hpd.hpd != RADEON_HPD_NONE) + radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); + + if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || + (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { + if ((radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) || + (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_eDP)) { + if (radeon_dp_needs_link_train(radeon_connector)) { + if (connector->encoder) + dp_link_train(connector->encoder, connector); + } + } + } + +} + static void radeon_property_change_mode(struct drm_encoder *encoder) { struct drm_crtc *crtc = encoder->crtc; @@ -140,12 +162,14 @@ { struct drm_device *dev = connector->dev; struct drm_connector *conflict; + struct radeon_connector *radeon_conflict; int i; list_for_each_entry(conflict, &dev->mode_config.connector_list, head) { if (conflict == connector) continue; + radeon_conflict = to_radeon_connector(conflict); for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { if (conflict->encoder_ids[i] == 0) break; @@ -155,6 +179,9 @@ if (conflict->status != connector_status_connected) continue; + if (radeon_conflict->use_digital) + continue; + if (priority == true) { DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict)); DRM_INFO("in favor of %s\n", drm_get_connector_name(connector)); @@ -188,6 +215,18 @@ drm_mode_set_name(mode); DRM_DEBUG("Adding native panel mode %s\n", mode->name); + } else if (native_mode->hdisplay != 0 && + native_mode->vdisplay != 0) { + /* mac laptops without an edid */ + /* Note that this is not necessarily the exact panel mode, + * but an approximation based on the cvt formula. For these + * systems we should ideally read the mode info out of the + * registers or add a mode table, but this works and is much + * simpler. + */ + mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false); + mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; + DRM_DEBUG("Adding cvt approximation of native panel mode %s\n", mode->name); } return mode; } @@ -281,7 +320,7 @@ radeon_encoder = to_radeon_encoder(encoder); if (!radeon_encoder->enc_priv) return 0; - if (rdev->is_atom_bios) { + if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) { struct radeon_encoder_atom_dac *dac_int; dac_int = radeon_encoder->enc_priv; dac_int->tv_std = val; @@ -445,10 +484,10 @@ ret = connector_status_connected; else { if (radeon_connector->ddc_bus) { - radeon_i2c_do_lock(radeon_connector, 1); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); - radeon_i2c_do_lock(radeon_connector, 0); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); if (radeon_connector->edid) ret = connector_status_connected; } @@ -546,24 +585,26 @@ struct radeon_connector *radeon_connector = to_radeon_connector(connector); struct drm_encoder *encoder; struct drm_encoder_helper_funcs *encoder_funcs; - bool dret; + bool dret = false; enum drm_connector_status ret = connector_status_disconnected; encoder = radeon_best_single_encoder(connector); if (!encoder) ret = connector_status_disconnected; - radeon_i2c_do_lock(radeon_connector, 1); - dret = radeon_ddc_probe(radeon_connector); - radeon_i2c_do_lock(radeon_connector, 0); + if (radeon_connector->ddc_bus) { + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); + dret = radeon_ddc_probe(radeon_connector); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); + } if (dret) { if (radeon_connector->edid) { kfree(radeon_connector->edid); radeon_connector->edid = NULL; } - radeon_i2c_do_lock(radeon_connector, 1); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); - radeon_i2c_do_lock(radeon_connector, 0); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); if (!radeon_connector->edid) { DRM_ERROR("%s: probed a monitor but no|invalid EDID\n", @@ -583,7 +624,7 @@ ret = connector_status_connected; } } else { - if (radeon_connector->dac_load_detect) { + if (radeon_connector->dac_load_detect && encoder) { encoder_funcs = encoder->helper_private; ret = encoder_funcs->detect(encoder, connector); } @@ -706,19 +747,21 @@ struct drm_mode_object *obj; int i; enum drm_connector_status ret = connector_status_disconnected; - bool dret; + bool dret = false; - radeon_i2c_do_lock(radeon_connector, 1); - dret = radeon_ddc_probe(radeon_connector); - radeon_i2c_do_lock(radeon_connector, 0); + if (radeon_connector->ddc_bus) { + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); + dret = radeon_ddc_probe(radeon_connector); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); + } if (dret) { if (radeon_connector->edid) { kfree(radeon_connector->edid); radeon_connector->edid = NULL; } - radeon_i2c_do_lock(radeon_connector, 1); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); - radeon_i2c_do_lock(radeon_connector, 0); + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); if (!radeon_connector->edid) { DRM_ERROR("%s: probed a monitor but no|invalid EDID\n", @@ -735,6 +778,39 @@ ret = connector_status_disconnected; } else ret = connector_status_connected; + + /* multiple connectors on the same encoder with the same ddc line + * This tends to be HDMI and DVI on the same encoder with the + * same ddc line. If the edid says HDMI, consider the HDMI port + * connected and the DVI port disconnected. If the edid doesn't + * say HDMI, vice versa. + */ + if (radeon_connector->shared_ddc && (ret == connector_status_connected)) { + struct drm_device *dev = connector->dev; + struct drm_connector *list_connector; + struct radeon_connector *list_radeon_connector; + list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) { + if (connector == list_connector) + continue; + list_radeon_connector = to_radeon_connector(list_connector); + if (radeon_connector->devices == list_radeon_connector->devices) { + if (drm_detect_hdmi_monitor(radeon_connector->edid)) { + if (connector->connector_type == DRM_MODE_CONNECTOR_DVID) { + kfree(radeon_connector->edid); + radeon_connector->edid = NULL; + ret = connector_status_disconnected; + } + } else { + if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA) || + (connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)) { + kfree(radeon_connector->edid); + radeon_connector->edid = NULL; + ret = connector_status_disconnected; + } + } + } + } + } } } @@ -833,10 +909,18 @@ static int radeon_dvi_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) { + struct drm_device *dev = connector->dev; + struct radeon_device *rdev = dev->dev_private; struct radeon_connector *radeon_connector = to_radeon_connector(connector); /* XXX check mode bandwidth */ + /* clocks over 135 MHz have heat issues with DVI on RV100 */ + if (radeon_connector->use_digital && + (rdev->family == CHIP_RV100) && + (mode->clock > 135000)) + return MODE_CLOCK_HIGH; + if (radeon_connector->use_digital && (mode->clock > 165000)) { if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) || (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) || @@ -863,6 +947,93 @@ .force = radeon_dvi_force, }; +static void radeon_dp_connector_destroy(struct drm_connector *connector) +{ + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; + + if (radeon_connector->ddc_bus) + radeon_i2c_destroy(radeon_connector->ddc_bus); + if (radeon_connector->edid) + kfree(radeon_connector->edid); + if (radeon_dig_connector->dp_i2c_bus) + radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus); + kfree(radeon_connector->con_priv); + drm_sysfs_connector_remove(connector); + drm_connector_cleanup(connector); + kfree(connector); +} + +static int radeon_dp_get_modes(struct drm_connector *connector) +{ + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + int ret; + + ret = radeon_ddc_get_modes(radeon_connector); + return ret; +} + +static enum drm_connector_status radeon_dp_detect(struct drm_connector *connector) +{ + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + enum drm_connector_status ret = connector_status_disconnected; + struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; + u8 sink_type; + + if (radeon_connector->edid) { + kfree(radeon_connector->edid); + radeon_connector->edid = NULL; + } + + sink_type = radeon_dp_getsinktype(radeon_connector); + if ((sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || + (sink_type == CONNECTOR_OBJECT_ID_eDP)) { + if (radeon_dp_getdpcd(radeon_connector)) { + radeon_dig_connector->dp_sink_type = sink_type; + ret = connector_status_connected; + } + } else { + radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); + if (radeon_ddc_probe(radeon_connector)) { + radeon_dig_connector->dp_sink_type = sink_type; + ret = connector_status_connected; + } + radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); + } + + return ret; +} + +static int radeon_dp_mode_valid(struct drm_connector *connector, + struct drm_display_mode *mode) +{ + struct radeon_connector *radeon_connector = to_radeon_connector(connector); + struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; + + /* XXX check mode bandwidth */ + + if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || + (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) + return radeon_dp_mode_valid_helper(radeon_connector, mode); + else + return MODE_OK; +} + +struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = { + .get_modes = radeon_dp_get_modes, + .mode_valid = radeon_dp_mode_valid, + .best_encoder = radeon_dvi_encoder, +}; + +struct drm_connector_funcs radeon_dp_connector_funcs = { + .dpms = drm_helper_connector_dpms, + .detect = radeon_dp_detect, + .fill_modes = drm_helper_probe_single_connector_modes, + .set_property = radeon_connector_set_property, + .destroy = radeon_dp_connector_destroy, + .force = radeon_dvi_force, +}; + void radeon_add_atom_connector(struct drm_device *dev, uint32_t connector_id, @@ -871,7 +1042,8 @@ struct radeon_i2c_bus_rec *i2c_bus, bool linkb, uint32_t igp_lane_info, - uint16_t connector_object_id) + uint16_t connector_object_id, + struct radeon_hpd *hpd) { struct radeon_device *rdev = dev->dev_private; struct drm_connector *connector; @@ -893,8 +1065,7 @@ return; } if (radeon_connector->ddc_bus && i2c_bus->valid) { - if (memcmp(&radeon_connector->ddc_bus->rec, i2c_bus, - sizeof(struct radeon_i2c_bus_rec)) == 0) { + if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) { radeon_connector->shared_ddc = true; shared_ddc = true; } @@ -911,6 +1082,7 @@ radeon_connector->devices = supported_device; radeon_connector->shared_ddc = shared_ddc; radeon_connector->connector_object_id = connector_object_id; + radeon_connector->hpd = *hpd; switch (connector_type) { case DRM_MODE_CONNECTOR_VGA: drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); @@ -963,10 +1135,12 @@ drm_connector_attach_property(&radeon_connector->base, rdev->mode_info.coherent_mode_property, 1); - radeon_connector->dac_load_detect = true; - drm_connector_attach_property(&radeon_connector->base, - rdev->mode_info.load_detect_property, - 1); + if (connector_type == DRM_MODE_CONNECTOR_DVII) { + radeon_connector->dac_load_detect = true; + drm_connector_attach_property(&radeon_connector->base, + rdev->mode_info.load_detect_property, + 1); + } break; case DRM_MODE_CONNECTOR_HDMIA: case DRM_MODE_CONNECTOR_HDMIB: @@ -991,22 +1165,36 @@ subpixel_order = SubPixelHorizontalRGB; break; case DRM_MODE_CONNECTOR_DisplayPort: + case DRM_MODE_CONNECTOR_eDP: radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); if (!radeon_dig_connector) goto failed; radeon_dig_connector->linkb = linkb; radeon_dig_connector->igp_lane_info = igp_lane_info; radeon_connector->con_priv = radeon_dig_connector; - drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); - ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); + drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); + ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); if (ret) goto failed; if (i2c_bus->valid) { - radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP"); + /* add DP i2c bus */ + if (connector_type == DRM_MODE_CONNECTOR_eDP) + radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); + else + radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); + if (!radeon_dig_connector->dp_i2c_bus) + goto failed; + if (connector_type == DRM_MODE_CONNECTOR_eDP) + radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "eDP"); + else + radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP"); if (!radeon_connector->ddc_bus) goto failed; } subpixel_order = SubPixelHorizontalRGB; + drm_connector_attach_property(&radeon_connector->base, + rdev->mode_info.coherent_mode_property, + 1); break; case DRM_MODE_CONNECTOR_SVIDEO: case DRM_MODE_CONNECTOR_Composite: @@ -1020,6 +1208,9 @@ drm_connector_attach_property(&radeon_connector->base, rdev->mode_info.load_detect_property, 1); + drm_connector_attach_property(&radeon_connector->base, + rdev->mode_info.tv_std_property, + radeon_atombios_get_tv_info(rdev)); } break; case DRM_MODE_CONNECTOR_LVDS: @@ -1038,7 +1229,6 @@ if (!radeon_connector->ddc_bus) goto failed; } - drm_mode_create_scaling_mode_property(dev); drm_connector_attach_property(&radeon_connector->base, dev->mode_config.scaling_mode_property, DRM_MODE_SCALE_FULLSCREEN); @@ -1063,7 +1253,8 @@ uint32_t supported_device, int connector_type, struct radeon_i2c_bus_rec *i2c_bus, - uint16_t connector_object_id) + uint16_t connector_object_id, + struct radeon_hpd *hpd) { struct radeon_device *rdev = dev->dev_private; struct drm_connector *connector; @@ -1093,6 +1284,7 @@ radeon_connector->connector_id = connector_id; radeon_connector->devices = supported_device; radeon_connector->connector_object_id = connector_object_id; + radeon_connector->hpd = *hpd; switch (connector_type) { case DRM_MODE_CONNECTOR_VGA: drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); @@ -1159,7 +1351,10 @@ radeon_connector->dac_load_detect = false; drm_connector_attach_property(&radeon_connector->base, rdev->mode_info.load_detect_property, - 1); + radeon_connector->dac_load_detect); + drm_connector_attach_property(&radeon_connector->base, + rdev->mode_info.tv_std_property, + radeon_combios_get_tv_info(rdev)); } break; case DRM_MODE_CONNECTOR_LVDS: --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_cp.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_cp.c @@ -417,8 +417,9 @@ return -EBUSY; } -static void radeon_init_pipes(drm_radeon_private_t *dev_priv) +static void radeon_init_pipes(struct drm_device *dev) { + drm_radeon_private_t *dev_priv = dev->dev_private; uint32_t gb_tile_config, gb_pipe_sel = 0; if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) { @@ -436,11 +437,12 @@ dev_priv->num_gb_pipes = ((gb_pipe_sel >> 12) & 0x3) + 1; } else { /* R3xx */ - if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300) || + if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300 && + dev->pdev->device != 0x4144) || ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R350)) { dev_priv->num_gb_pipes = 2; } else { - /* R3Vxx */ + /* RV3xx/R300 AD */ dev_priv->num_gb_pipes = 1; } } @@ -736,7 +738,7 @@ /* setup the raster pipes */ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R300) - radeon_init_pipes(dev_priv); + radeon_init_pipes(dev); /* Reset the CP ring */ radeon_do_cp_reset(dev_priv); @@ -1941,8 +1943,8 @@ for (t = 0; t < dev_priv->usec_timeout; t++) { u32 done_age = GET_SCRATCH(dev_priv, 1); DRM_DEBUG("done_age = %d\n", done_age); - for (i = start; i < dma->buf_count; i++) { - buf = dma->buflist[i]; + for (i = 0; i < dma->buf_count; i++) { + buf = dma->buflist[start]; buf_priv = buf->dev_private; if (buf->file_priv == NULL || (buf->pending && buf_priv->age <= @@ -1951,7 +1953,8 @@ buf->pending = 0; return buf; } - start = 0; + if (++start >= dma->buf_count) + start = 0; } if (t) { @@ -1960,46 +1963,8 @@ } } - DRM_DEBUG("returning NULL!\n"); - return NULL; -} - -#if 0 -struct drm_buf *radeon_freelist_get(struct drm_device * dev) -{ - struct drm_device_dma *dma = dev->dma; - drm_radeon_private_t *dev_priv = dev->dev_private; - drm_radeon_buf_priv_t *buf_priv; - struct drm_buf *buf; - int i, t; - int start; - u32 done_age; - - done_age = radeon_read_ring_rptr(dev_priv, RADEON_SCRATCHOFF(1)); - if (++dev_priv->last_buf >= dma->buf_count) - dev_priv->last_buf = 0; - - start = dev_priv->last_buf; - dev_priv->stats.freelist_loops++; - - for (t = 0; t < 2; t++) { - for (i = start; i < dma->buf_count; i++) { - buf = dma->buflist[i]; - buf_priv = buf->dev_private; - if (buf->file_priv == 0 || (buf->pending && - buf_priv->age <= - done_age)) { - dev_priv->stats.requested_bufs++; - buf->pending = 0; - return buf; - } - } - start = 0; - } - return NULL; } -#endif void radeon_freelist_reset(struct drm_device * dev) { @@ -2182,6 +2147,7 @@ &master_priv->sarea); if (ret) { DRM_ERROR("SAREA setup failed\n"); + kfree(master_priv); return ret; } master_priv->sarea_priv = master_priv->sarea->handle + sizeof(struct drm_sarea); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_irq_kms.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_irq_kms.c @@ -39,11 +39,32 @@ return radeon_irq_process(rdev); } +/* + * Handle hotplug events outside the interrupt handler proper. + */ +static void radeon_hotplug_work_func(struct work_struct *work) +{ + struct radeon_device *rdev = container_of(work, struct radeon_device, + hotplug_work); + struct drm_device *dev = rdev->ddev; + struct drm_mode_config *mode_config = &dev->mode_config; + struct drm_connector *connector; + + if (mode_config->num_connector) { + list_for_each_entry(connector, &mode_config->connector_list, head) + radeon_connector_hotplug(connector); + } + /* Just fire off a uevent and let userspace tell us what to do */ + drm_sysfs_hotplug_event(dev); +} + void radeon_driver_irq_preinstall_kms(struct drm_device *dev) { struct radeon_device *rdev = dev->dev_private; unsigned i; + INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); + /* Disable *all* interrupts */ rdev->irq.sw_int = false; for (i = 0; i < 2; i++) { @@ -76,6 +97,7 @@ rdev->irq.sw_int = false; for (i = 0; i < 2; i++) { rdev->irq.crtc_vblank_int[i] = false; + rdev->irq.hpd[i] = false; } radeon_irq_set(rdev); } @@ -87,30 +109,69 @@ if (rdev->flags & RADEON_SINGLE_CRTC) num_crtc = 1; - + spin_lock_init(&rdev->irq.sw_lock); r = drm_vblank_init(rdev->ddev, num_crtc); if (r) { return r; } /* enable msi */ rdev->msi_enabled = 0; - if (rdev->family >= CHIP_RV380) { + /* MSIs don't seem to work on my rs780; + * not sure about rs880 or other rs780s. + * Needs more investigation. + */ + if ((rdev->family >= CHIP_RV380) && + (rdev->family != CHIP_RS780) && + (rdev->family != CHIP_RS880)) { int ret = pci_enable_msi(rdev->pdev); - if (!ret) + if (!ret) { rdev->msi_enabled = 1; + DRM_INFO("radeon: using MSI.\n"); + } } - drm_irq_install(rdev->ddev); rdev->irq.installed = true; + r = drm_irq_install(rdev->ddev); + if (r) { + rdev->irq.installed = false; + return r; + } DRM_INFO("radeon: irq initialized.\n"); return 0; } void radeon_irq_kms_fini(struct radeon_device *rdev) { + drm_vblank_cleanup(rdev->ddev); if (rdev->irq.installed) { - rdev->irq.installed = false; drm_irq_uninstall(rdev->ddev); + rdev->irq.installed = false; if (rdev->msi_enabled) pci_disable_msi(rdev->pdev); } } + +void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev) +{ + unsigned long irqflags; + + spin_lock_irqsave(&rdev->irq.sw_lock, irqflags); + if (rdev->ddev->irq_enabled && (++rdev->irq.sw_refcount == 1)) { + rdev->irq.sw_int = true; + radeon_irq_set(rdev); + } + spin_unlock_irqrestore(&rdev->irq.sw_lock, irqflags); +} + +void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev) +{ + unsigned long irqflags; + + spin_lock_irqsave(&rdev->irq.sw_lock, irqflags); + BUG_ON(rdev->ddev->irq_enabled && rdev->irq.sw_refcount <= 0); + if (rdev->ddev->irq_enabled && (--rdev->irq.sw_refcount == 0)) { + rdev->irq.sw_int = false; + radeon_irq_set(rdev); + } + spin_unlock_irqrestore(&rdev->irq.sw_lock, irqflags); +} + --- linux-2.6.32.orig/drivers/gpu/drm/radeon/Makefile +++ linux-2.6.32/drivers/gpu/drm/radeon/Makefile @@ -24,6 +24,9 @@ $(obj)/r300_reg_safe.h: $(src)/reg_srcs/r300 $(obj)/mkregtable $(call if_changed,mkregtable) +$(obj)/r420_reg_safe.h: $(src)/reg_srcs/r420 $(obj)/mkregtable + $(call if_changed,mkregtable) + $(obj)/rs600_reg_safe.h: $(src)/reg_srcs/rs600 $(obj)/mkregtable $(call if_changed,mkregtable) @@ -35,6 +38,8 @@ $(obj)/r300.o: $(obj)/r300_reg_safe.h +$(obj)/r420.o: $(obj)/r420_reg_safe.h + $(obj)/rs600.o: $(obj)/rs600_reg_safe.h radeon-y := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o \ @@ -49,7 +54,7 @@ radeon_cs.o radeon_bios.o radeon_benchmark.o r100.o r300.o r420.o \ rs400.o rs600.o rs690.o rv515.o r520.o r600.o rv770.o radeon_test.o \ r200.o radeon_legacy_tv.o r600_cs.o r600_blit.o r600_blit_shaders.o \ - r600_blit_kms.o radeon_pm.o + r600_blit_kms.o radeon_pm.o atombios_dp.o r600_audio.o r600_hdmi.o radeon-$(CONFIG_COMPAT) += radeon_ioc32.o --- linux-2.6.32.orig/drivers/gpu/drm/radeon/rv515.c +++ linux-2.6.32/drivers/gpu/drm/radeon/rv515.c @@ -478,8 +478,8 @@ return r; } /* Enable IRQ */ - rdev->irq.sw_int = true; rs600_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { @@ -514,6 +514,8 @@ atom_asic_init(rdev->mode_info.atom_context); /* Resume clock after posting */ rv515_clock_startup(rdev); + /* Initialize surface registers */ + radeon_surface_init(rdev); return rv515_startup(rdev); } @@ -535,16 +537,15 @@ void rv515_fini(struct radeon_device *rdev) { - rv515_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); radeon_gem_fini(rdev); - rv370_pcie_gart_fini(rdev); + rv370_pcie_gart_fini(rdev); radeon_agp_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); radeon_atombios_fini(rdev); kfree(rdev->bios); rdev->bios = NULL; @@ -580,10 +581,8 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - atom_asic_init(rdev->mode_info.atom_context); - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); /* Initialize power management */ @@ -603,7 +602,7 @@ if (r) return r; /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) return r; r = rv370_pcie_gart_init(rdev); @@ -615,13 +614,12 @@ if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - rv515_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); + radeon_irq_kms_fini(rdev); rv370_pcie_gart_fini(rdev); radeon_agp_fini(rdev); - radeon_irq_kms_fini(rdev); rdev->accel_working = false; } return 0; @@ -892,8 +890,9 @@ b.full = rfixed_const(mode->crtc_hdisplay); c.full = rfixed_const(256); - a.full = rfixed_mul(wm->num_line_pair, b); - request_fifo_depth.full = rfixed_div(a, c); + a.full = rfixed_div(b, c); + request_fifo_depth.full = rfixed_mul(a, wm->num_line_pair); + request_fifo_depth.full = rfixed_ceil(request_fifo_depth); if (a.full < rfixed_const(4)) { wm->lb_request_fifo_depth = 4; } else { @@ -995,15 +994,17 @@ a.full = rfixed_const(16); wm->priority_mark_max.full = rfixed_const(crtc->base.mode.crtc_hdisplay); wm->priority_mark_max.full = rfixed_div(wm->priority_mark_max, a); + wm->priority_mark_max.full = rfixed_ceil(wm->priority_mark_max); /* Determine estimated width */ estimated_width.full = tolerable_latency.full - wm->worst_case_latency.full; estimated_width.full = rfixed_div(estimated_width, consumption_time); if (rfixed_trunc(estimated_width) > crtc->base.mode.crtc_hdisplay) { - wm->priority_mark.full = rfixed_const(10); + wm->priority_mark.full = wm->priority_mark_max.full; } else { a.full = rfixed_const(16); wm->priority_mark.full = rfixed_div(estimated_width, a); + wm->priority_mark.full = rfixed_ceil(wm->priority_mark); wm->priority_mark.full = wm->priority_mark_max.full - wm->priority_mark.full; } } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r600_reg.h +++ linux-2.6.32/drivers/gpu/drm/radeon/r600_reg.h @@ -110,5 +110,79 @@ #define R600_BIOS_6_SCRATCH 0x173c #define R600_BIOS_7_SCRATCH 0x1740 +/* Audio, these regs were reverse enginered, + * so the chance is high that the naming is wrong + * R6xx+ ??? */ + +/* Audio clocks */ +#define R600_AUDIO_PLL1_MUL 0x0514 +#define R600_AUDIO_PLL1_DIV 0x0518 +#define R600_AUDIO_PLL2_MUL 0x0524 +#define R600_AUDIO_PLL2_DIV 0x0528 +#define R600_AUDIO_CLK_SRCSEL 0x0534 + +/* Audio general */ +#define R600_AUDIO_ENABLE 0x7300 +#define R600_AUDIO_TIMING 0x7344 + +/* Audio params */ +#define R600_AUDIO_VENDOR_ID 0x7380 +#define R600_AUDIO_REVISION_ID 0x7384 +#define R600_AUDIO_ROOT_NODE_COUNT 0x7388 +#define R600_AUDIO_NID1_NODE_COUNT 0x738c +#define R600_AUDIO_NID1_TYPE 0x7390 +#define R600_AUDIO_SUPPORTED_SIZE_RATE 0x7394 +#define R600_AUDIO_SUPPORTED_CODEC 0x7398 +#define R600_AUDIO_SUPPORTED_POWER_STATES 0x739c +#define R600_AUDIO_NID2_CAPS 0x73a0 +#define R600_AUDIO_NID3_CAPS 0x73a4 +#define R600_AUDIO_NID3_PIN_CAPS 0x73a8 + +/* Audio conn list */ +#define R600_AUDIO_CONN_LIST_LEN 0x73ac +#define R600_AUDIO_CONN_LIST 0x73b0 + +/* Audio verbs */ +#define R600_AUDIO_RATE_BPS_CHANNEL 0x73c0 +#define R600_AUDIO_PLAYING 0x73c4 +#define R600_AUDIO_IMPLEMENTATION_ID 0x73c8 +#define R600_AUDIO_CONFIG_DEFAULT 0x73cc +#define R600_AUDIO_PIN_SENSE 0x73d0 +#define R600_AUDIO_PIN_WIDGET_CNTL 0x73d4 +#define R600_AUDIO_STATUS_BITS 0x73d8 + +/* HDMI base register addresses */ +#define R600_HDMI_TMDS1 0x7400 +#define R600_HDMI_TMDS2 0x7700 +#define R600_HDMI_DIG 0x7800 + +/* HDMI registers */ +#define R600_HDMI_ENABLE 0x00 +#define R600_HDMI_STATUS 0x04 +#define R600_HDMI_CNTL 0x08 +#define R600_HDMI_UNKNOWN_0 0x0C +#define R600_HDMI_AUDIOCNTL 0x10 +#define R600_HDMI_VIDEOCNTL 0x14 +#define R600_HDMI_VERSION 0x18 +#define R600_HDMI_UNKNOWN_1 0x28 +#define R600_HDMI_VIDEOINFOFRAME_0 0x54 +#define R600_HDMI_VIDEOINFOFRAME_1 0x58 +#define R600_HDMI_VIDEOINFOFRAME_2 0x5c +#define R600_HDMI_VIDEOINFOFRAME_3 0x60 +#define R600_HDMI_32kHz_CTS 0xac +#define R600_HDMI_32kHz_N 0xb0 +#define R600_HDMI_44_1kHz_CTS 0xb4 +#define R600_HDMI_44_1kHz_N 0xb8 +#define R600_HDMI_48kHz_CTS 0xbc +#define R600_HDMI_48kHz_N 0xc0 +#define R600_HDMI_AUDIOINFOFRAME_0 0xcc +#define R600_HDMI_AUDIOINFOFRAME_1 0xd0 +#define R600_HDMI_IEC60958_1 0xd4 +#define R600_HDMI_IEC60958_2 0xd8 +#define R600_HDMI_UNKNOWN_2 0xdc +#define R600_HDMI_AUDIO_DEBUG_0 0xe0 +#define R600_HDMI_AUDIO_DEBUG_1 0xe4 +#define R600_HDMI_AUDIO_DEBUG_2 0xe8 +#define R600_HDMI_AUDIO_DEBUG_3 0xec #endif --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_fb.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_fb.c @@ -59,7 +59,7 @@ }; /** - * Curretly it is assumed that the old framebuffer is reused. + * Currently it is assumed that the old framebuffer is reused. * * LOCKING * caller should hold the mode config lock. @@ -140,7 +140,7 @@ struct radeon_framebuffer *rfb; struct drm_mode_fb_cmd mode_cmd; struct drm_gem_object *gobj = NULL; - struct radeon_object *robj = NULL; + struct radeon_bo *rbo = NULL; struct device *device = &rdev->pdev->dev; int size, aligned_size, ret; u64 fb_gpuaddr; @@ -168,14 +168,14 @@ ret = radeon_gem_object_create(rdev, aligned_size, 0, RADEON_GEM_DOMAIN_VRAM, false, ttm_bo_type_kernel, - false, &gobj); + &gobj); if (ret) { printk(KERN_ERR "failed to allocate framebuffer (%d %d)\n", surface_width, surface_height); ret = -ENOMEM; goto out; } - robj = gobj->driver_private; + rbo = gobj->driver_private; if (fb_tiled) tiling_flags = RADEON_TILING_MACRO; @@ -192,8 +192,13 @@ } #endif - if (tiling_flags) - radeon_object_set_tiling_flags(robj, tiling_flags | RADEON_TILING_SURFACE, mode_cmd.pitch); + if (tiling_flags) { + ret = radeon_bo_set_tiling_flags(rbo, + tiling_flags | RADEON_TILING_SURFACE, + mode_cmd.pitch); + if (ret) + dev_err(rdev->dev, "FB failed to set tiling flags\n"); + } mutex_lock(&rdev->ddev->struct_mutex); fb = radeon_framebuffer_create(rdev->ddev, &mode_cmd, gobj); if (fb == NULL) { @@ -201,10 +206,19 @@ ret = -ENOMEM; goto out_unref; } - ret = radeon_object_pin(robj, RADEON_GEM_DOMAIN_VRAM, &fb_gpuaddr); + ret = radeon_bo_reserve(rbo, false); + if (unlikely(ret != 0)) + goto out_unref; + ret = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &fb_gpuaddr); + if (ret) { + radeon_bo_unreserve(rbo); + goto out_unref; + } + if (fb_tiled) + radeon_bo_check_tiling(rbo, 0, 0); + ret = radeon_bo_kmap(rbo, &fbptr); + radeon_bo_unreserve(rbo); if (ret) { - printk(KERN_ERR "failed to pin framebuffer\n"); - ret = -ENOMEM; goto out_unref; } @@ -213,7 +227,7 @@ *fb_p = fb; rfb = to_radeon_framebuffer(fb); rdev->fbdev_rfb = rfb; - rdev->fbdev_robj = robj; + rdev->fbdev_rbo = rbo; info = framebuffer_alloc(sizeof(struct radeon_fb_device), device); if (info == NULL) { @@ -234,15 +248,7 @@ if (ret) goto out_unref; - if (fb_tiled) - radeon_object_check_tiling(robj, 0, 0); - - ret = radeon_object_kmap(robj, &fbptr); - if (ret) { - goto out_unref; - } - - memset_io(fbptr, 0, aligned_size); + memset_io(fbptr, 0x0, aligned_size); strcpy(info->fix.id, "radeondrmfb"); @@ -288,8 +294,12 @@ return 0; out_unref: - if (robj) { - radeon_object_kunmap(robj); + if (rbo) { + ret = radeon_bo_reserve(rbo, false); + if (likely(ret == 0)) { + radeon_bo_kunmap(rbo); + radeon_bo_unreserve(rbo); + } } if (fb && ret) { list_del(&fb->filp_head); @@ -321,14 +331,22 @@ int radeonfb_probe(struct drm_device *dev) { - return drm_fb_helper_single_fb_probe(dev, 32, &radeonfb_create); + struct radeon_device *rdev = dev->dev_private; + int bpp_sel = 32; + + /* select 8 bpp console on RN50 or 16MB cards */ + if (ASIC_IS_RN50(rdev) || rdev->mc.real_vram_size <= (32*1024*1024)) + bpp_sel = 8; + + return drm_fb_helper_single_fb_probe(dev, bpp_sel, &radeonfb_create); } int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb) { struct fb_info *info; struct radeon_framebuffer *rfb = to_radeon_framebuffer(fb); - struct radeon_object *robj; + struct radeon_bo *rbo; + int r; if (!fb) { return -EINVAL; @@ -336,10 +354,14 @@ info = fb->fbdev; if (info) { struct radeon_fb_device *rfbdev = info->par; - robj = rfb->obj->driver_private; + rbo = rfb->obj->driver_private; unregister_framebuffer(info); - radeon_object_kunmap(robj); - radeon_object_unpin(robj); + r = radeon_bo_reserve(rbo, false); + if (likely(r == 0)) { + radeon_bo_kunmap(rbo); + radeon_bo_unpin(rbo); + radeon_bo_unreserve(rbo); + } drm_fb_helper_free(&rfbdev->helper); framebuffer_release(info); } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/atombios.h +++ linux-2.6.32/drivers/gpu/drm/radeon/atombios.h @@ -1141,7 +1141,7 @@ /* ucTableFormatRevision=1,ucTableContentRevision=2 */ typedef struct _LVDS_ENCODER_CONTROL_PARAMETERS_V2 { USHORT usPixelClock; /* in 10KHz; for bios convenient */ - UCHAR ucMisc; /* see PANEL_ENCODER_MISC_xx defintions below */ + UCHAR ucMisc; /* see PANEL_ENCODER_MISC_xx definitions below */ UCHAR ucAction; /* 0: turn off encoder */ /* 1: setup and turn on encoder */ UCHAR ucTruncate; /* bit0=0: Disable truncate */ @@ -1424,7 +1424,7 @@ /* Structures used in FirmwareInfoTable */ /****************************************************************************/ -/* usBIOSCapability Defintion: */ +/* usBIOSCapability Definition: */ /* Bit 0 = 0: Bios image is not Posted, =1:Bios image is Posted; */ /* Bit 1 = 0: Dual CRTC is not supported, =1: Dual CRTC is supported; */ /* Bit 2 = 0: Extended Desktop is not supported, =1: Extended Desktop is supported; */ @@ -2386,7 +2386,7 @@ } ATOM_ANALOG_TV_INFO_V1_2; /**************************************************************************/ -/* VRAM usage and their defintions */ +/* VRAM usage and their definitions */ /* One chunk of VRAM used by Bios are for HWICON surfaces,EDID data. */ /* Current Mode timing and Dail Timing and/or STD timing data EACH device. They can be broken down as below. */ @@ -2680,7 +2680,7 @@ typedef struct _ATOM_HPD_INT_RECORD { ATOM_COMMON_RECORD_HEADER sheader; UCHAR ucHPDIntGPIOID; /* Corresponding block in GPIO_PIN_INFO table gives the pin info */ - UCHAR ucPluggged_PinState; + UCHAR ucPlugged_PinState; } ATOM_HPD_INT_RECORD; typedef struct _ATOM_OUTPUT_PROTECTION_RECORD { @@ -3046,7 +3046,7 @@ #define ATOM_S0_SYSTEM_POWER_STATE_VALUE_DC 2 #define ATOM_S0_SYSTEM_POWER_STATE_VALUE_LITEAC 3 -/* Byte aligned defintion for BIOS usage */ +/* Byte aligned definition for BIOS usage */ #define ATOM_S0_CRT1_MONOb0 0x01 #define ATOM_S0_CRT1_COLORb0 0x02 #define ATOM_S0_CRT1_MASKb0 (ATOM_S0_CRT1_MONOb0+ATOM_S0_CRT1_COLORb0) @@ -3131,7 +3131,7 @@ #define ATOM_S2_DISPLAY_ROTATION_DEGREE_SHIFT 30 #define ATOM_S2_DISPLAY_ROTATION_ANGLE_MASK 0xC0000000L -/* Byte aligned defintion for BIOS usage */ +/* Byte aligned definition for BIOS usage */ #define ATOM_S2_TV1_STANDARD_MASKb0 0x0F #define ATOM_S2_CURRENT_BL_LEVEL_MASKb1 0xFF #define ATOM_S2_CRT1_DPMS_STATEb2 0x01 @@ -3190,7 +3190,7 @@ #define ATOM_S3_ALLOW_FAST_PWR_SWITCH 0x40000000L #define ATOM_S3_RQST_GPU_USE_MIN_PWR 0x80000000L -/* Byte aligned defintion for BIOS usage */ +/* Byte aligned definition for BIOS usage */ #define ATOM_S3_CRT1_ACTIVEb0 0x01 #define ATOM_S3_LCD1_ACTIVEb0 0x02 #define ATOM_S3_TV1_ACTIVEb0 0x04 @@ -3230,7 +3230,7 @@ #define ATOM_S4_LCD1_REFRESH_MASK 0x0000FF00L #define ATOM_S4_LCD1_REFRESH_SHIFT 8 -/* Byte aligned defintion for BIOS usage */ +/* Byte aligned definition for BIOS usage */ #define ATOM_S4_LCD1_PANEL_ID_MASKb0 0x0FF #define ATOM_S4_LCD1_REFRESH_MASKb1 ATOM_S4_LCD1_PANEL_ID_MASKb0 #define ATOM_S4_VRAM_INFO_MASKb2 ATOM_S4_LCD1_PANEL_ID_MASKb0 @@ -3310,7 +3310,7 @@ #define ATOM_S6_VRI_BRIGHTNESS_CHANGE 0x40000000L #define ATOM_S6_CONFIG_DISPLAY_CHANGE_MASK 0x80000000L -/* Byte aligned defintion for BIOS usage */ +/* Byte aligned definition for BIOS usage */ #define ATOM_S6_DEVICE_CHANGEb0 0x01 #define ATOM_S6_SCALER_CHANGEb0 0x02 #define ATOM_S6_LID_CHANGEb0 0x04 @@ -4690,6 +4690,205 @@ ATOM_POWERMODE_INFO_V3 asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK]; } ATOM_POWERPLAY_INFO_V3; +/* New PPlib */ +/**************************************************************************/ +typedef struct _ATOM_PPLIB_THERMALCONTROLLER + +{ + UCHAR ucType; // one of ATOM_PP_THERMALCONTROLLER_* + UCHAR ucI2cLine; // as interpreted by DAL I2C + UCHAR ucI2cAddress; + UCHAR ucFanParameters; // Fan Control Parameters. + UCHAR ucFanMinRPM; // Fan Minimum RPM (hundreds) -- for display purposes only. + UCHAR ucFanMaxRPM; // Fan Maximum RPM (hundreds) -- for display purposes only. + UCHAR ucReserved; // ---- + UCHAR ucFlags; // to be defined +} ATOM_PPLIB_THERMALCONTROLLER; + +#define ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK 0x0f +#define ATOM_PP_FANPARAMETERS_NOFAN 0x80 // No fan is connected to this controller. + +#define ATOM_PP_THERMALCONTROLLER_NONE 0 +#define ATOM_PP_THERMALCONTROLLER_LM63 1 // Not used by PPLib +#define ATOM_PP_THERMALCONTROLLER_ADM1032 2 // Not used by PPLib +#define ATOM_PP_THERMALCONTROLLER_ADM1030 3 // Not used by PPLib +#define ATOM_PP_THERMALCONTROLLER_MUA6649 4 // Not used by PPLib +#define ATOM_PP_THERMALCONTROLLER_LM64 5 +#define ATOM_PP_THERMALCONTROLLER_F75375 6 // Not used by PPLib +#define ATOM_PP_THERMALCONTROLLER_RV6xx 7 +#define ATOM_PP_THERMALCONTROLLER_RV770 8 +#define ATOM_PP_THERMALCONTROLLER_ADT7473 9 + +typedef struct _ATOM_PPLIB_STATE +{ + UCHAR ucNonClockStateIndex; + UCHAR ucClockStateIndices[1]; // variable-sized +} ATOM_PPLIB_STATE; + +//// ATOM_PPLIB_POWERPLAYTABLE::ulPlatformCaps +#define ATOM_PP_PLATFORM_CAP_BACKBIAS 1 +#define ATOM_PP_PLATFORM_CAP_POWERPLAY 2 +#define ATOM_PP_PLATFORM_CAP_SBIOSPOWERSOURCE 4 +#define ATOM_PP_PLATFORM_CAP_ASPM_L0s 8 +#define ATOM_PP_PLATFORM_CAP_ASPM_L1 16 +#define ATOM_PP_PLATFORM_CAP_HARDWAREDC 32 +#define ATOM_PP_PLATFORM_CAP_GEMINIPRIMARY 64 +#define ATOM_PP_PLATFORM_CAP_STEPVDDC 128 +#define ATOM_PP_PLATFORM_CAP_VOLTAGECONTROL 256 +#define ATOM_PP_PLATFORM_CAP_SIDEPORTCONTROL 512 +#define ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1 1024 +#define ATOM_PP_PLATFORM_CAP_HTLINKCONTROL 2048 + +typedef struct _ATOM_PPLIB_POWERPLAYTABLE +{ + ATOM_COMMON_TABLE_HEADER sHeader; + + UCHAR ucDataRevision; + + UCHAR ucNumStates; + UCHAR ucStateEntrySize; + UCHAR ucClockInfoSize; + UCHAR ucNonClockSize; + + // offset from start of this table to array of ucNumStates ATOM_PPLIB_STATE structures + USHORT usStateArrayOffset; + + // offset from start of this table to array of ASIC-specific structures, + // currently ATOM_PPLIB_CLOCK_INFO. + USHORT usClockInfoArrayOffset; + + // offset from start of this table to array of ATOM_PPLIB_NONCLOCK_INFO + USHORT usNonClockInfoArrayOffset; + + USHORT usBackbiasTime; // in microseconds + USHORT usVoltageTime; // in microseconds + USHORT usTableSize; //the size of this structure, or the extended structure + + ULONG ulPlatformCaps; // See ATOM_PPLIB_CAPS_* + + ATOM_PPLIB_THERMALCONTROLLER sThermalController; + + USHORT usBootClockInfoOffset; + USHORT usBootNonClockInfoOffset; + +} ATOM_PPLIB_POWERPLAYTABLE; + +//// ATOM_PPLIB_NONCLOCK_INFO::usClassification +#define ATOM_PPLIB_CLASSIFICATION_UI_MASK 0x0007 +#define ATOM_PPLIB_CLASSIFICATION_UI_SHIFT 0 +#define ATOM_PPLIB_CLASSIFICATION_UI_NONE 0 +#define ATOM_PPLIB_CLASSIFICATION_UI_BATTERY 1 +#define ATOM_PPLIB_CLASSIFICATION_UI_BALANCED 3 +#define ATOM_PPLIB_CLASSIFICATION_UI_PERFORMANCE 5 +// 2, 4, 6, 7 are reserved + +#define ATOM_PPLIB_CLASSIFICATION_BOOT 0x0008 +#define ATOM_PPLIB_CLASSIFICATION_THERMAL 0x0010 +#define ATOM_PPLIB_CLASSIFICATION_LIMITEDPOWERSOURCE 0x0020 +#define ATOM_PPLIB_CLASSIFICATION_REST 0x0040 +#define ATOM_PPLIB_CLASSIFICATION_FORCED 0x0080 +#define ATOM_PPLIB_CLASSIFICATION_3DPERFORMANCE 0x0100 +#define ATOM_PPLIB_CLASSIFICATION_OVERDRIVETEMPLATE 0x0200 +#define ATOM_PPLIB_CLASSIFICATION_UVDSTATE 0x0400 +#define ATOM_PPLIB_CLASSIFICATION_3DLOW 0x0800 +#define ATOM_PPLIB_CLASSIFICATION_ACPI 0x1000 +// remaining 3 bits are reserved + +//// ATOM_PPLIB_NONCLOCK_INFO::ulCapsAndSettings +#define ATOM_PPLIB_SINGLE_DISPLAY_ONLY 0x00000001 +#define ATOM_PPLIB_SUPPORTS_VIDEO_PLAYBACK 0x00000002 + +// 0 is 2.5Gb/s, 1 is 5Gb/s +#define ATOM_PPLIB_PCIE_LINK_SPEED_MASK 0x00000004 +#define ATOM_PPLIB_PCIE_LINK_SPEED_SHIFT 2 + +// lanes - 1: 1, 2, 4, 8, 12, 16 permitted by PCIE spec +#define ATOM_PPLIB_PCIE_LINK_WIDTH_MASK 0x000000F8 +#define ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT 3 + +// lookup into reduced refresh-rate table +#define ATOM_PPLIB_LIMITED_REFRESHRATE_VALUE_MASK 0x00000F00 +#define ATOM_PPLIB_LIMITED_REFRESHRATE_VALUE_SHIFT 8 + +#define ATOM_PPLIB_LIMITED_REFRESHRATE_UNLIMITED 0 +#define ATOM_PPLIB_LIMITED_REFRESHRATE_50HZ 1 +// 2-15 TBD as needed. + +#define ATOM_PPLIB_SOFTWARE_DISABLE_LOADBALANCING 0x00001000 +#define ATOM_PPLIB_SOFTWARE_ENABLE_SLEEP_FOR_TIMESTAMPS 0x00002000 +#define ATOM_PPLIB_ENABLE_VARIBRIGHT 0x00008000 + +#define ATOM_PPLIB_DISALLOW_ON_DC 0x00004000 + +// Contained in an array starting at the offset +// in ATOM_PPLIB_POWERPLAYTABLE::usNonClockInfoArrayOffset. +// referenced from ATOM_PPLIB_STATE_INFO::ucNonClockStateIndex +typedef struct _ATOM_PPLIB_NONCLOCK_INFO +{ + USHORT usClassification; + UCHAR ucMinTemperature; + UCHAR ucMaxTemperature; + ULONG ulCapsAndSettings; + UCHAR ucRequiredPower; + UCHAR ucUnused1[3]; +} ATOM_PPLIB_NONCLOCK_INFO; + +// Contained in an array starting at the offset +// in ATOM_PPLIB_POWERPLAYTABLE::usClockInfoArrayOffset. +// referenced from ATOM_PPLIB_STATE::ucClockStateIndices +typedef struct _ATOM_PPLIB_R600_CLOCK_INFO +{ + USHORT usEngineClockLow; + UCHAR ucEngineClockHigh; + + USHORT usMemoryClockLow; + UCHAR ucMemoryClockHigh; + + USHORT usVDDC; + USHORT usUnused1; + USHORT usUnused2; + + ULONG ulFlags; // ATOM_PPLIB_R600_FLAGS_* + +} ATOM_PPLIB_R600_CLOCK_INFO; + +// ulFlags in ATOM_PPLIB_R600_CLOCK_INFO +#define ATOM_PPLIB_R600_FLAGS_PCIEGEN2 1 +#define ATOM_PPLIB_R600_FLAGS_UVDSAFE 2 +#define ATOM_PPLIB_R600_FLAGS_BACKBIASENABLE 4 +#define ATOM_PPLIB_R600_FLAGS_MEMORY_ODT_OFF 8 +#define ATOM_PPLIB_R600_FLAGS_MEMORY_DLL_OFF 16 + +typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO + +{ + USHORT usLowEngineClockLow; // Low Engine clock in MHz (the same way as on the R600). + UCHAR ucLowEngineClockHigh; + USHORT usHighEngineClockLow; // High Engine clock in MHz. + UCHAR ucHighEngineClockHigh; + USHORT usMemoryClockLow; // For now one of the ATOM_PPLIB_RS780_SPMCLK_XXXX constants. + UCHAR ucMemoryClockHigh; // Currentyl unused. + UCHAR ucPadding; // For proper alignment and size. + USHORT usVDDC; // For the 780, use: None, Low, High, Variable + UCHAR ucMaxHTLinkWidth; // From SBIOS - {2, 4, 8, 16} + UCHAR ucMinHTLinkWidth; // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could be bigger as display BW requriement. + USHORT usHTLinkFreq; // See definition ATOM_PPLIB_RS780_HTLINKFREQ_xxx or in MHz(>=200). + ULONG ulFlags; +} ATOM_PPLIB_RS780_CLOCK_INFO; + +#define ATOM_PPLIB_RS780_VOLTAGE_NONE 0 +#define ATOM_PPLIB_RS780_VOLTAGE_LOW 1 +#define ATOM_PPLIB_RS780_VOLTAGE_HIGH 2 +#define ATOM_PPLIB_RS780_VOLTAGE_VARIABLE 3 + +#define ATOM_PPLIB_RS780_SPMCLK_NONE 0 // We cannot change the side port memory clock, leave it as it is. +#define ATOM_PPLIB_RS780_SPMCLK_LOW 1 +#define ATOM_PPLIB_RS780_SPMCLK_HIGH 2 + +#define ATOM_PPLIB_RS780_HTLINKFREQ_NONE 0 +#define ATOM_PPLIB_RS780_HTLINKFREQ_LOW 1 +#define ATOM_PPLIB_RS780_HTLINKFREQ_HIGH 2 + /**************************************************************************/ /* Following definitions are for compatiblity issue in different SW components. */ --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_kms.c +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_kms.c @@ -30,10 +30,19 @@ #include "radeon.h" #include "radeon_drm.h" +int radeon_driver_unload_kms(struct drm_device *dev) +{ + struct radeon_device *rdev = dev->dev_private; + + if (rdev == NULL) + return 0; + radeon_modeset_fini(rdev); + radeon_device_fini(rdev); + kfree(rdev); + dev->dev_private = NULL; + return 0; +} -/* - * Driver load/unload - */ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags) { struct radeon_device *rdev; @@ -62,31 +71,20 @@ */ r = radeon_device_init(rdev, dev, dev->pdev, flags); if (r) { - DRM_ERROR("Fatal error while trying to initialize radeon.\n"); - return r; + dev_err(&dev->pdev->dev, "Fatal error during GPU init\n"); + goto out; } /* Again modeset_init should fail only on fatal error * otherwise it should provide enough functionalities * for shadowfb to run */ r = radeon_modeset_init(rdev); - if (r) { - return r; - } - return 0; -} - -int radeon_driver_unload_kms(struct drm_device *dev) -{ - struct radeon_device *rdev = dev->dev_private; - - if (rdev == NULL) - return 0; - radeon_modeset_fini(rdev); - radeon_device_fini(rdev); - kfree(rdev); - dev->dev_private = NULL; - return 0; + if (r) + dev_err(&dev->pdev->dev, "Fatal error during modeset init\n"); +out: + if (r) + radeon_driver_unload_kms(dev); + return r; } --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r200.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r200.c @@ -371,13 +371,16 @@ case 5: case 6: case 7: + /* 1D/2D */ track->textures[i].tex_coord_type = 0; break; case 1: - track->textures[i].tex_coord_type = 1; + /* CUBE */ + track->textures[i].tex_coord_type = 2; break; case 2: - track->textures[i].tex_coord_type = 2; + /* 3D */ + track->textures[i].tex_coord_type = 1; break; } break; @@ -401,7 +404,6 @@ case R200_TXFORMAT_Y8: track->textures[i].cpp = 1; break; - case R200_TXFORMAT_DXT1: case R200_TXFORMAT_AI88: case R200_TXFORMAT_ARGB1555: case R200_TXFORMAT_RGB565: @@ -418,9 +420,16 @@ case R200_TXFORMAT_ABGR8888: case R200_TXFORMAT_BGR111110: case R200_TXFORMAT_LDVDU8888: + track->textures[i].cpp = 4; + break; + case R200_TXFORMAT_DXT1: + track->textures[i].cpp = 1; + track->textures[i].compress_format = R100_TRACK_COMP_DXT1; + break; case R200_TXFORMAT_DXT23: case R200_TXFORMAT_DXT45: - track->textures[i].cpp = 4; + track->textures[i].cpp = 1; + track->textures[i].compress_format = R100_TRACK_COMP_DXT1; break; } track->textures[i].cube_info[4].width = 1 << ((idx_value >> 16) & 0xf); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_fixed.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_fixed.h @@ -38,6 +38,23 @@ #define fixed_init_half(A) { .full = rfixed_const_half((A)) } #define rfixed_trunc(A) ((A).full >> 12) +static inline u32 rfixed_floor(fixed20_12 A) +{ + u32 non_frac = rfixed_trunc(A); + + return rfixed_const(non_frac); +} + +static inline u32 rfixed_ceil(fixed20_12 A) +{ + u32 non_frac = rfixed_trunc(A); + + if (A.full > rfixed_const(non_frac)) + return rfixed_const(non_frac + 1); + else + return rfixed_const(non_frac); +} + static inline u32 rfixed_div(fixed20_12 A, fixed20_12 B) { u64 tmp = ((u64)A.full << 13); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_asic.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_asic.h @@ -33,6 +33,7 @@ */ uint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev); void radeon_legacy_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock); +uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev); void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); uint32_t radeon_atom_get_engine_clock(struct radeon_device *rdev); @@ -76,6 +77,11 @@ void r100_bandwidth_update(struct radeon_device *rdev); void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib); int r100_ring_test(struct radeon_device *rdev); +void r100_hpd_init(struct radeon_device *rdev); +void r100_hpd_fini(struct radeon_device *rdev); +bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd); +void r100_hpd_set_polarity(struct radeon_device *rdev, + enum radeon_hpd_id hpd); static struct radeon_asic r100_asic = { .init = &r100_init, @@ -100,13 +106,18 @@ .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, - .get_memory_clock = NULL, + .get_memory_clock = &radeon_legacy_get_memory_clock, .set_memory_clock = NULL, .set_pcie_lanes = NULL, .set_clock_gating = &radeon_legacy_set_clock_gating, .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &r100_bandwidth_update, + .hpd_init = &r100_hpd_init, + .hpd_fini = &r100_hpd_fini, + .hpd_sense = &r100_hpd_sense, + .hpd_set_polarity = &r100_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; @@ -155,13 +166,18 @@ .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, - .get_memory_clock = NULL, + .get_memory_clock = &radeon_legacy_get_memory_clock, .set_memory_clock = NULL, .set_pcie_lanes = &rv370_set_pcie_lanes, .set_clock_gating = &radeon_legacy_set_clock_gating, .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &r100_bandwidth_update, + .hpd_init = &r100_hpd_init, + .hpd_fini = &r100_hpd_fini, + .hpd_sense = &r100_hpd_sense, + .hpd_set_polarity = &r100_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; /* @@ -201,6 +217,11 @@ .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &r100_bandwidth_update, + .hpd_init = &r100_hpd_init, + .hpd_fini = &r100_hpd_fini, + .hpd_sense = &r100_hpd_sense, + .hpd_set_polarity = &r100_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; @@ -238,13 +259,18 @@ .copy = &r100_copy_blit, .get_engine_clock = &radeon_legacy_get_engine_clock, .set_engine_clock = &radeon_legacy_set_engine_clock, - .get_memory_clock = NULL, + .get_memory_clock = &radeon_legacy_get_memory_clock, .set_memory_clock = NULL, .set_pcie_lanes = NULL, .set_clock_gating = &radeon_legacy_set_clock_gating, .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &r100_bandwidth_update, + .hpd_init = &r100_hpd_init, + .hpd_fini = &r100_hpd_fini, + .hpd_sense = &r100_hpd_sense, + .hpd_set_polarity = &r100_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; @@ -263,6 +289,12 @@ uint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg); void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); void rs600_bandwidth_update(struct radeon_device *rdev); +void rs600_hpd_init(struct radeon_device *rdev); +void rs600_hpd_fini(struct radeon_device *rdev); +bool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd); +void rs600_hpd_set_polarity(struct radeon_device *rdev, + enum radeon_hpd_id hpd); + static struct radeon_asic rs600_asic = { .init = &rs600_init, .fini = &rs600_fini, @@ -290,7 +322,14 @@ .set_memory_clock = &radeon_atom_set_memory_clock, .set_pcie_lanes = NULL, .set_clock_gating = &radeon_atom_set_clock_gating, + .set_surface_reg = r100_set_surface_reg, + .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &rs600_bandwidth_update, + .hpd_init = &rs600_hpd_init, + .hpd_fini = &rs600_hpd_fini, + .hpd_sense = &rs600_hpd_sense, + .hpd_set_polarity = &rs600_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; @@ -334,6 +373,11 @@ .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &rs690_bandwidth_update, + .hpd_init = &rs600_hpd_init, + .hpd_fini = &rs600_hpd_fini, + .hpd_sense = &rs600_hpd_sense, + .hpd_set_polarity = &rs600_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; @@ -381,6 +425,11 @@ .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &rv515_bandwidth_update, + .hpd_init = &rs600_hpd_init, + .hpd_fini = &rs600_hpd_fini, + .hpd_sense = &rs600_hpd_sense, + .hpd_set_polarity = &rs600_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; @@ -419,6 +468,11 @@ .set_surface_reg = r100_set_surface_reg, .clear_surface_reg = r100_clear_surface_reg, .bandwidth_update = &rv515_bandwidth_update, + .hpd_init = &rs600_hpd_init, + .hpd_fini = &rs600_hpd_fini, + .hpd_sense = &rs600_hpd_sense, + .hpd_set_polarity = &rs600_hpd_set_polarity, + .ioctl_wait_idle = NULL, }; /* @@ -455,6 +509,12 @@ int r600_copy_blit(struct radeon_device *rdev, uint64_t src_offset, uint64_t dst_offset, unsigned num_pages, struct radeon_fence *fence); +void r600_hpd_init(struct radeon_device *rdev); +void r600_hpd_fini(struct radeon_device *rdev); +bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd); +void r600_hpd_set_polarity(struct radeon_device *rdev, + enum radeon_hpd_id hpd); +extern void r600_ioctl_wait_idle(struct radeon_device *rdev, struct radeon_bo *bo); static struct radeon_asic r600_asic = { .init = &r600_init, @@ -470,6 +530,7 @@ .ring_ib_execute = &r600_ring_ib_execute, .irq_set = &r600_irq_set, .irq_process = &r600_irq_process, + .get_vblank_counter = &rs600_get_vblank_counter, .fence_ring_emit = &r600_fence_ring_emit, .cs_parse = &r600_cs_parse, .copy_blit = &r600_copy_blit, @@ -484,6 +545,11 @@ .set_surface_reg = r600_set_surface_reg, .clear_surface_reg = r600_clear_surface_reg, .bandwidth_update = &rv515_bandwidth_update, + .hpd_init = &r600_hpd_init, + .hpd_fini = &r600_hpd_fini, + .hpd_sense = &r600_hpd_sense, + .hpd_set_polarity = &r600_hpd_set_polarity, + .ioctl_wait_idle = r600_ioctl_wait_idle, }; /* @@ -509,6 +575,7 @@ .ring_ib_execute = &r600_ring_ib_execute, .irq_set = &r600_irq_set, .irq_process = &r600_irq_process, + .get_vblank_counter = &rs600_get_vblank_counter, .fence_ring_emit = &r600_fence_ring_emit, .cs_parse = &r600_cs_parse, .copy_blit = &r600_copy_blit, @@ -523,6 +590,11 @@ .set_surface_reg = r600_set_surface_reg, .clear_surface_reg = r600_clear_surface_reg, .bandwidth_update = &rv515_bandwidth_update, + .hpd_init = &r600_hpd_init, + .hpd_fini = &r600_hpd_fini, + .hpd_sense = &r600_hpd_sense, + .hpd_set_polarity = &r600_hpd_set_polarity, + .ioctl_wait_idle = r600_ioctl_wait_idle, }; #endif --- linux-2.6.32.orig/drivers/gpu/drm/radeon/radeon_mode.h +++ linux-2.6.32/drivers/gpu/drm/radeon/radeon_mode.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -45,32 +46,6 @@ #define to_radeon_encoder(x) container_of(x, struct radeon_encoder, base) #define to_radeon_framebuffer(x) container_of(x, struct radeon_framebuffer, base) -enum radeon_connector_type { - CONNECTOR_NONE, - CONNECTOR_VGA, - CONNECTOR_DVI_I, - CONNECTOR_DVI_D, - CONNECTOR_DVI_A, - CONNECTOR_STV, - CONNECTOR_CTV, - CONNECTOR_LVDS, - CONNECTOR_DIGITAL, - CONNECTOR_SCART, - CONNECTOR_HDMI_TYPE_A, - CONNECTOR_HDMI_TYPE_B, - CONNECTOR_0XC, - CONNECTOR_0XD, - CONNECTOR_DIN, - CONNECTOR_DISPLAY_PORT, - CONNECTOR_UNSUPPORTED -}; - -enum radeon_dvi_type { - DVI_AUTO, - DVI_DIGITAL, - DVI_ANALOG -}; - enum radeon_rmx_type { RMX_OFF, RMX_FULL, @@ -87,26 +62,48 @@ TV_STD_SCART_PAL, TV_STD_SECAM, TV_STD_PAL_CN, + TV_STD_PAL_N, }; +/* radeon gpio-based i2c + * 1. "mask" reg and bits + * grabs the gpio pins for software use + * 0=not held 1=held + * 2. "a" reg and bits + * output pin value + * 0=low 1=high + * 3. "en" reg and bits + * sets the pin direction + * 0=input 1=output + * 4. "y" reg and bits + * input pin value + * 0=low 1=high + */ struct radeon_i2c_bus_rec { bool valid; + /* id used by atom */ + uint8_t i2c_id; + /* can be used with hw i2c engine */ + bool hw_capable; + /* uses multi-media i2c engine */ + bool mm_i2c; + /* regs and bits */ uint32_t mask_clk_reg; uint32_t mask_data_reg; uint32_t a_clk_reg; uint32_t a_data_reg; - uint32_t put_clk_reg; - uint32_t put_data_reg; - uint32_t get_clk_reg; - uint32_t get_data_reg; + uint32_t en_clk_reg; + uint32_t en_data_reg; + uint32_t y_clk_reg; + uint32_t y_data_reg; uint32_t mask_clk_mask; uint32_t mask_data_mask; - uint32_t put_clk_mask; - uint32_t put_data_mask; - uint32_t get_clk_mask; - uint32_t get_data_mask; uint32_t a_clk_mask; uint32_t a_data_mask; + uint32_t en_clk_mask; + uint32_t en_data_mask; + uint32_t y_clk_mask; + uint32_t y_data_mask; }; struct radeon_tmds_pll { @@ -116,6 +113,7 @@ #define RADEON_MAX_BIOS_CONNECTOR 16 +/* pll flags */ #define RADEON_PLL_USE_BIOS_DIVS (1 << 0) #define RADEON_PLL_NO_ODD_POST_DIV (1 << 1) #define RADEON_PLL_USE_REF_DIV (1 << 2) @@ -128,16 +126,30 @@ #define RADEON_PLL_PREFER_HIGH_POST_DIV (1 << 9) #define RADEON_PLL_USE_FRAC_FB_DIV (1 << 10) #define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11) +#define RADEON_PLL_USE_POST_DIV (1 << 12) + +/* pll algo */ +enum radeon_pll_algo { + PLL_ALGO_LEGACY, + PLL_ALGO_NEW +}; struct radeon_pll { - uint16_t reference_freq; - uint16_t reference_div; + /* reference frequency */ + uint32_t reference_freq; + + /* fixed dividers */ + uint32_t reference_div; + uint32_t post_div; + + /* pll in/out limits */ uint32_t pll_in_min; uint32_t pll_in_max; uint32_t pll_out_min; uint32_t pll_out_max; - uint16_t xclk; + uint32_t best_vco; + /* divider limits */ uint32_t min_ref_div; uint32_t max_ref_div; uint32_t min_post_div; @@ -146,13 +158,23 @@ uint32_t max_feedback_div; uint32_t min_frac_feedback_div; uint32_t max_frac_feedback_div; - uint32_t best_vco; + + /* flags for the current clock */ + uint32_t flags; + + /* pll id */ + uint32_t id; + /* pll algo */ + enum radeon_pll_algo algo; }; struct radeon_i2c_chan { - struct drm_device *dev; struct i2c_adapter adapter; - struct i2c_algo_bit_data algo; + struct drm_device *dev; + union { + struct i2c_algo_dp_aux_data dp; + struct i2c_algo_bit_data bit; + } algo; struct radeon_i2c_bus_rec rec; }; @@ -170,6 +192,11 @@ CT_EMAC, }; +enum radeon_dvo_chip { + DVO_SIL164, + DVO_SIL1178, +}; + struct radeon_mode_info { struct atom_context *atom_context; struct card_info *atom_card_info; @@ -261,6 +288,13 @@ struct radeon_tmds_pll tmds_pll[4]; }; +struct radeon_encoder_ext_tmds { + /* tmds over dvo */ + struct radeon_i2c_chan *i2c_bus; + uint8_t slave_addr; + enum radeon_dvo_chip dvo_chip; +}; + /* spread spectrum */ struct radeon_atom_ss { uint16_t percentage; @@ -274,10 +308,11 @@ struct radeon_encoder_atom_dig { /* atom dig */ bool coherent_mode; - int dig_block; + int dig_encoder; /* -1 disabled, 0 DIGA, 1 DIGB */ /* atom lvds */ uint32_t lvds_misc; uint16_t panel_pwr_delay; + enum radeon_pll_algo pll_algo; struct radeon_atom_ss *ss; /* panel mode */ struct drm_display_mode native_mode; @@ -297,11 +332,43 @@ enum radeon_rmx_type rmx_type; struct drm_display_mode native_mode; void *enc_priv; + int hdmi_offset; + int hdmi_audio_workaround; + int hdmi_buffer_status; }; struct radeon_connector_atom_dig { uint32_t igp_lane_info; bool linkb; + /* displayport */ + struct radeon_i2c_chan *dp_i2c_bus; + u8 dpcd[8]; + u8 dp_sink_type; + int dp_clock; + int dp_lane_count; +}; + +struct radeon_gpio_rec { + bool valid; + u8 id; + u32 reg; + u32 mask; +}; + +enum radeon_hpd_id { + RADEON_HPD_NONE = 0, + RADEON_HPD_1, + RADEON_HPD_2, + RADEON_HPD_3, + RADEON_HPD_4, + RADEON_HPD_5, + RADEON_HPD_6, +}; + +struct radeon_hpd { + enum radeon_hpd_id hpd; + u8 plugged_state; + struct radeon_gpio_rec gpio; }; struct radeon_connector { @@ -318,6 +385,7 @@ void *con_priv; bool dac_load_detect; uint16_t connector_object_id; + struct radeon_hpd hpd; }; struct radeon_framebuffer { @@ -325,10 +393,42 @@ struct drm_gem_object *obj; }; +extern enum radeon_tv_std +radeon_combios_get_tv_info(struct radeon_device *rdev); +extern enum radeon_tv_std +radeon_atombios_get_tv_info(struct radeon_device *rdev); + +extern void radeon_connector_hotplug(struct drm_connector *connector); +extern bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector); +extern int radeon_dp_mode_valid_helper(struct radeon_connector *radeon_connector, + struct drm_display_mode *mode); +extern void radeon_dp_set_link_config(struct drm_connector *connector, + struct drm_display_mode *mode); +extern void dp_link_train(struct drm_encoder *encoder, + struct drm_connector *connector); +extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector); +extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); +extern void atombios_dig_transmitter_setup(struct drm_encoder *encoder, + int action, uint8_t lane_num, + uint8_t lane_set); +extern int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, + uint8_t write_byte, uint8_t *read_byte); + +extern struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev, + struct radeon_i2c_bus_rec *rec, + const char *name); extern struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev, struct radeon_i2c_bus_rec *rec, const char *name); extern void radeon_i2c_destroy(struct radeon_i2c_chan *i2c); +extern void radeon_i2c_sw_get_byte(struct radeon_i2c_chan *i2c_bus, + u8 slave_addr, + u8 addr, + u8 *val); +extern void radeon_i2c_sw_put_byte(struct radeon_i2c_chan *i2c, + u8 slave_addr, + u8 addr, + u8 val); extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector); extern int radeon_ddc_get_modes(struct radeon_connector *radeon_connector); @@ -340,8 +440,9 @@ uint32_t *fb_div_p, uint32_t *frac_fb_div_p, uint32_t *ref_div_p, - uint32_t *post_div_p, - int flags); + uint32_t *post_div_p); + +extern void radeon_setup_encoder_clones(struct drm_device *dev); struct drm_encoder *radeon_encoder_legacy_lvds_add(struct drm_device *dev, int bios_index); struct drm_encoder *radeon_encoder_legacy_primary_dac_add(struct drm_device *dev, int bios_index, int with_tv); @@ -349,6 +450,7 @@ struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, int bios_index); struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index); extern void atombios_external_tmds_setup(struct drm_encoder *encoder, int action); +extern void atombios_digital_setup(struct drm_encoder *encoder, int action); extern int atombios_get_encoder_mode(struct drm_encoder *encoder); extern void radeon_encoder_set_active_device(struct drm_encoder *encoder); @@ -364,7 +466,6 @@ extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb); -extern void radeon_legacy_atom_set_surface(struct drm_crtc *crtc); extern int radeon_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, @@ -378,12 +479,16 @@ extern bool radeon_combios_get_clock_info(struct drm_device *dev); extern struct radeon_encoder_atom_dig * radeon_atombios_get_lvds_info(struct radeon_encoder *encoder); -bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder, - struct radeon_encoder_int_tmds *tmds); -bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder, - struct radeon_encoder_int_tmds *tmds); -bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder, - struct radeon_encoder_int_tmds *tmds); +extern bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder, + struct radeon_encoder_int_tmds *tmds); +extern bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder, + struct radeon_encoder_int_tmds *tmds); +extern bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder, + struct radeon_encoder_int_tmds *tmds); +extern bool radeon_legacy_get_ext_tmds_info_from_combios(struct radeon_encoder *encoder, + struct radeon_encoder_ext_tmds *tmds); +extern bool radeon_legacy_get_ext_tmds_info_from_table(struct radeon_encoder *encoder, + struct radeon_encoder_ext_tmds *tmds); extern struct radeon_encoder_primary_dac * radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder); extern struct radeon_encoder_tv_dac * @@ -395,6 +500,8 @@ radeon_combios_get_tv_dac_info(struct radeon_encoder *encoder); extern struct radeon_encoder_primary_dac * radeon_combios_get_primary_dac_info(struct radeon_encoder *encoder); +extern bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder); +extern void radeon_external_tmds_setup(struct drm_encoder *encoder); extern void radeon_combios_output_lock(struct drm_encoder *encoder, bool lock); extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device *dev); extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock); @@ -426,16 +533,13 @@ struct radeon_crtc *radeon_crtc); void radeon_legacy_init_crtc(struct drm_device *dev, struct radeon_crtc *radeon_crtc); -void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state); +extern void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state); void radeon_get_clock_info(struct drm_device *dev); extern bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev); extern bool radeon_get_atom_connector_info_from_supported_devices_table(struct drm_device *dev); -void radeon_rmx_mode_fixup(struct drm_encoder *encoder, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode); void radeon_enc_destroy(struct drm_encoder *encoder); void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj); void radeon_combios_asic_init(struct drm_device *dev); --- linux-2.6.32.orig/drivers/gpu/drm/radeon/r420.c +++ linux-2.6.32/drivers/gpu/drm/radeon/r420.c @@ -30,7 +30,15 @@ #include "radeon_reg.h" #include "radeon.h" #include "atom.h" +#include "r100d.h" #include "r420d.h" +#include "r420_reg_safe.h" + +static void r420_set_reg_safe(struct radeon_device *rdev) +{ + rdev->config.r300.reg_safe_bm = r420_reg_safe_bm; + rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(r420_reg_safe_bm); +} int r420_mc_init(struct radeon_device *rdev) { @@ -42,9 +50,7 @@ if (rdev->flags & RADEON_IS_AGP) { r = radeon_agp_init(rdev); if (r) { - printk(KERN_WARNING "[drm] Disabling AGP\n"); - rdev->flags &= ~RADEON_IS_AGP; - rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; + radeon_agp_disable(rdev); } else { rdev->mc.gtt_location = rdev->mc.agp_base; } @@ -165,10 +171,41 @@ WREG32_PLL(R_00000D_SCLK_CNTL, sclk_cntl); } +static void r420_cp_errata_init(struct radeon_device *rdev) +{ + /* RV410 and R420 can lock up if CP DMA to host memory happens + * while the 2D engine is busy. + * + * The proper workaround is to queue a RESYNC at the beginning + * of the CP init, apparently. + */ + radeon_scratch_get(rdev, &rdev->config.r300.resync_scratch); + radeon_ring_lock(rdev, 8); + radeon_ring_write(rdev, PACKET0(R300_CP_RESYNC_ADDR, 1)); + radeon_ring_write(rdev, rdev->config.r300.resync_scratch); + radeon_ring_write(rdev, 0xDEADBEEF); + radeon_ring_unlock_commit(rdev); +} + +static void r420_cp_errata_fini(struct radeon_device *rdev) +{ + /* Catch the RESYNC we dispatched all the way back, + * at the very beginning of the CP init. + */ + radeon_ring_lock(rdev, 8); + radeon_ring_write(rdev, PACKET0(R300_RB3D_DSTCACHE_CTLSTAT, 0)); + radeon_ring_write(rdev, R300_RB3D_DC_FINISH); + radeon_ring_unlock_commit(rdev); + radeon_scratch_free(rdev, rdev->config.r300.resync_scratch); +} + static int r420_startup(struct radeon_device *rdev) { int r; + /* set common regs */ + r100_set_common_regs(rdev); + /* program mc */ r300_mc_program(rdev); /* Resume clock */ r420_clock_resume(rdev); @@ -186,14 +223,15 @@ } r420_pipes_init(rdev); /* Enable IRQ */ - rdev->irq.sw_int = true; r100_irq_set(rdev); + rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ r = r100_cp_init(rdev, 1024 * 1024); if (r) { dev_err(rdev->dev, "failled initializing CP (%d).\n", r); return r; } + r420_cp_errata_init(rdev); r = r100_wb_init(rdev); if (r) { dev_err(rdev->dev, "failled initializing WB (%d).\n", r); @@ -229,12 +267,14 @@ } /* Resume clock after posting */ r420_clock_resume(rdev); - + /* Initialize surface registers */ + radeon_surface_init(rdev); return r420_startup(rdev); } int r420_suspend(struct radeon_device *rdev) { + r420_cp_errata_fini(rdev); r100_cp_disable(rdev); r100_wb_disable(rdev); r100_irq_disable(rdev); @@ -258,7 +298,7 @@ radeon_agp_fini(rdev); radeon_irq_kms_fini(rdev); radeon_fence_driver_fini(rdev); - radeon_object_fini(rdev); + radeon_bo_fini(rdev); if (rdev->is_atom_bios) { radeon_atombios_fini(rdev); } else { @@ -301,14 +341,9 @@ RREG32(R_0007C0_CP_STAT)); } /* check if cards are posted or not */ - if (!radeon_card_posted(rdev) && rdev->bios) { - DRM_INFO("GPU not posted. posting now...\n"); - if (rdev->is_atom_bios) { - atom_asic_init(rdev->mode_info.atom_context); - } else { - radeon_combios_asic_init(rdev->ddev); - } - } + if (radeon_boot_test_post_card(rdev) == false) + return -EINVAL; + /* Initialize clocks */ radeon_get_clock_info(rdev->ddev); /* Initialize power management */ @@ -331,10 +366,13 @@ return r; } /* Memory manager */ - r = radeon_object_init(rdev); + r = radeon_bo_init(rdev); if (r) { return r; } + if (rdev->family == CHIP_R420) + r100_enable_bm(rdev); + if (rdev->flags & RADEON_IS_PCIE) { r = rv370_pcie_gart_init(rdev); if (r) @@ -345,22 +383,21 @@ if (r) return r; } - r300_set_reg_safe(rdev); + r420_set_reg_safe(rdev); rdev->accel_working = true; r = r420_startup(rdev); if (r) { /* Somethings want wront with the accel init stop accel */ dev_err(rdev->dev, "Disabling GPU acceleration\n"); - r420_suspend(rdev); r100_cp_fini(rdev); r100_wb_fini(rdev); r100_ib_fini(rdev); + radeon_irq_kms_fini(rdev); if (rdev->flags & RADEON_IS_PCIE) rv370_pcie_gart_fini(rdev); if (rdev->flags & RADEON_IS_PCI) r100_pci_gart_fini(rdev); radeon_agp_fini(rdev); - radeon_irq_kms_fini(rdev); rdev->accel_working = false; } return 0; --- linux-2.6.32.orig/drivers/gpu/drm/radeon/reg_srcs/rs600 +++ linux-2.6.32/drivers/gpu/drm/radeon/reg_srcs/rs600 @@ -153,7 +153,7 @@ 0x42A4 SU_POLY_OFFSET_FRONT_SCALE 0x42A8 SU_POLY_OFFSET_FRONT_OFFSET 0x42AC SU_POLY_OFFSET_BACK_SCALE -0x42B0 SU_POLY_OFFSET_BACK_OFFSET +0x42B0 SU_POLY_OFFSET_BACK_OFFSET 0x42B4 SU_POLY_OFFSET_ENABLE 0x42B8 SU_CULL_MODE 0x42C0 SU_DEPTH_SCALE @@ -291,6 +291,8 @@ 0x46AC US_OUT_FMT_2 0x46B0 US_OUT_FMT_3 0x46B4 US_W_FMT +0x46B8 US_CODE_BANK +0x46BC US_CODE_EXT 0x46C0 US_ALU_RGB_ADDR_0 0x46C4 US_ALU_RGB_ADDR_1 0x46C8 US_ALU_RGB_ADDR_2 @@ -547,6 +549,70 @@ 0x4AB4 US_ALU_ALPHA_INST_61 0x4AB8 US_ALU_ALPHA_INST_62 0x4ABC US_ALU_ALPHA_INST_63 +0x4AC0 US_ALU_EXT_ADDR_0 +0x4AC4 US_ALU_EXT_ADDR_1 +0x4AC8 US_ALU_EXT_ADDR_2 +0x4ACC US_ALU_EXT_ADDR_3 +0x4AD0 US_ALU_EXT_ADDR_4 +0x4AD4 US_ALU_EXT_ADDR_5 +0x4AD8 US_ALU_EXT_ADDR_6 +0x4ADC US_ALU_EXT_ADDR_7 +0x4AE0 US_ALU_EXT_ADDR_8 +0x4AE4 US_ALU_EXT_ADDR_9 +0x4AE8 US_ALU_EXT_ADDR_10 +0x4AEC US_ALU_EXT_ADDR_11 +0x4AF0 US_ALU_EXT_ADDR_12 +0x4AF4 US_ALU_EXT_ADDR_13 +0x4AF8 US_ALU_EXT_ADDR_14 +0x4AFC US_ALU_EXT_ADDR_15 +0x4B00 US_ALU_EXT_ADDR_16 +0x4B04 US_ALU_EXT_ADDR_17 +0x4B08 US_ALU_EXT_ADDR_18 +0x4B0C US_ALU_EXT_ADDR_19 +0x4B10 US_ALU_EXT_ADDR_20 +0x4B14 US_ALU_EXT_ADDR_21 +0x4B18 US_ALU_EXT_ADDR_22 +0x4B1C US_ALU_EXT_ADDR_23 +0x4B20 US_ALU_EXT_ADDR_24 +0x4B24 US_ALU_EXT_ADDR_25 +0x4B28 US_ALU_EXT_ADDR_26 +0x4B2C US_ALU_EXT_ADDR_27 +0x4B30 US_ALU_EXT_ADDR_28 +0x4B34 US_ALU_EXT_ADDR_29 +0x4B38 US_ALU_EXT_ADDR_30 +0x4B3C US_ALU_EXT_ADDR_31 +0x4B40 US_ALU_EXT_ADDR_32 +0x4B44 US_ALU_EXT_ADDR_33 +0x4B48 US_ALU_EXT_ADDR_34 +0x4B4C US_ALU_EXT_ADDR_35 +0x4B50 US_ALU_EXT_ADDR_36 +0x4B54 US_ALU_EXT_ADDR_37 +0x4B58 US_ALU_EXT_ADDR_38 +0x4B5C US_ALU_EXT_ADDR_39 +0x4B60 US_ALU_EXT_ADDR_40 +0x4B64 US_ALU_EXT_ADDR_41 +0x4B68 US_ALU_EXT_ADDR_42 +0x4B6C US_ALU_EXT_ADDR_43 +0x4B70 US_ALU_EXT_ADDR_44 +0x4B74 US_ALU_EXT_ADDR_45 +0x4B78 US_ALU_EXT_ADDR_46 +0x4B7C US_ALU_EXT_ADDR_47 +0x4B80 US_ALU_EXT_ADDR_48 +0x4B84 US_ALU_EXT_ADDR_49 +0x4B88 US_ALU_EXT_ADDR_50 +0x4B8C US_ALU_EXT_ADDR_51 +0x4B90 US_ALU_EXT_ADDR_52 +0x4B94 US_ALU_EXT_ADDR_53 +0x4B98 US_ALU_EXT_ADDR_54 +0x4B9C US_ALU_EXT_ADDR_55 +0x4BA0 US_ALU_EXT_ADDR_56 +0x4BA4 US_ALU_EXT_ADDR_57 +0x4BA8 US_ALU_EXT_ADDR_58 +0x4BAC US_ALU_EXT_ADDR_59 +0x4BB0 US_ALU_EXT_ADDR_60 +0x4BB4 US_ALU_EXT_ADDR_61 +0x4BB8 US_ALU_EXT_ADDR_62 +0x4BBC US_ALU_EXT_ADDR_63 0x4BC0 FG_FOG_BLEND 0x4BC4 FG_FOG_FACTOR 0x4BC8 FG_FOG_COLOR_R --- linux-2.6.32.orig/drivers/gpu/drm/radeon/reg_srcs/r420 +++ linux-2.6.32/drivers/gpu/drm/radeon/reg_srcs/r420 @@ -0,0 +1,795 @@ +r420 0x4f60 +0x1434 SRC_Y_X +0x1438 DST_Y_X +0x143C DST_HEIGHT_WIDTH +0x146C DP_GUI_MASTER_CNTL +0x1474 BRUSH_Y_X +0x1478 DP_BRUSH_BKGD_CLR +0x147C DP_BRUSH_FRGD_CLR +0x1480 BRUSH_DATA0 +0x1484 BRUSH_DATA1 +0x1598 DST_WIDTH_HEIGHT +0x15C0 CLR_CMP_CNTL +0x15C4 CLR_CMP_CLR_SRC +0x15C8 CLR_CMP_CLR_DST +0x15CC CLR_CMP_MSK +0x15D8 DP_SRC_FRGD_CLR +0x15DC DP_SRC_BKGD_CLR +0x1600 DST_LINE_START +0x1604 DST_LINE_END +0x1608 DST_LINE_PATCOUNT +0x16C0 DP_CNTL +0x16CC DP_WRITE_MSK +0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR +0x16E8 DEFAULT_SC_BOTTOM_RIGHT +0x16EC SC_TOP_LEFT +0x16F0 SC_BOTTOM_RIGHT +0x16F4 SRC_SC_BOTTOM_RIGHT +0x1714 DSTCACHE_CTLSTAT +0x1720 WAIT_UNTIL +0x172C RBBM_GUICNTL +0x1D98 VAP_VPORT_XSCALE +0x1D9C VAP_VPORT_XOFFSET +0x1DA0 VAP_VPORT_YSCALE +0x1DA4 VAP_VPORT_YOFFSET +0x1DA8 VAP_VPORT_ZSCALE +0x1DAC VAP_VPORT_ZOFFSET +0x2080 VAP_CNTL +0x2090 VAP_OUT_VTX_FMT_0 +0x2094 VAP_OUT_VTX_FMT_1 +0x20B0 VAP_VTE_CNTL +0x2138 VAP_VF_MIN_VTX_INDX +0x2140 VAP_CNTL_STATUS +0x2150 VAP_PROG_STREAM_CNTL_0 +0x2154 VAP_PROG_STREAM_CNTL_1 +0x2158 VAP_PROG_STREAM_CNTL_2 +0x215C VAP_PROG_STREAM_CNTL_3 +0x2160 VAP_PROG_STREAM_CNTL_4 +0x2164 VAP_PROG_STREAM_CNTL_5 +0x2168 VAP_PROG_STREAM_CNTL_6 +0x216C VAP_PROG_STREAM_CNTL_7 +0x2180 VAP_VTX_STATE_CNTL +0x2184 VAP_VSM_VTX_ASSM +0x2188 VAP_VTX_STATE_IND_REG_0 +0x218C VAP_VTX_STATE_IND_REG_1 +0x2190 VAP_VTX_STATE_IND_REG_2 +0x2194 VAP_VTX_STATE_IND_REG_3 +0x2198 VAP_VTX_STATE_IND_REG_4 +0x219C VAP_VTX_STATE_IND_REG_5 +0x21A0 VAP_VTX_STATE_IND_REG_6 +0x21A4 VAP_VTX_STATE_IND_REG_7 +0x21A8 VAP_VTX_STATE_IND_REG_8 +0x21AC VAP_VTX_STATE_IND_REG_9 +0x21B0 VAP_VTX_STATE_IND_REG_10 +0x21B4 VAP_VTX_STATE_IND_REG_11 +0x21B8 VAP_VTX_STATE_IND_REG_12 +0x21BC VAP_VTX_STATE_IND_REG_13 +0x21C0 VAP_VTX_STATE_IND_REG_14 +0x21C4 VAP_VTX_STATE_IND_REG_15 +0x21DC VAP_PSC_SGN_NORM_CNTL +0x21E0 VAP_PROG_STREAM_CNTL_EXT_0 +0x21E4 VAP_PROG_STREAM_CNTL_EXT_1 +0x21E8 VAP_PROG_STREAM_CNTL_EXT_2 +0x21EC VAP_PROG_STREAM_CNTL_EXT_3 +0x21F0 VAP_PROG_STREAM_CNTL_EXT_4 +0x21F4 VAP_PROG_STREAM_CNTL_EXT_5 +0x21F8 VAP_PROG_STREAM_CNTL_EXT_6 +0x21FC VAP_PROG_STREAM_CNTL_EXT_7 +0x2200 VAP_PVS_VECTOR_INDX_REG +0x2204 VAP_PVS_VECTOR_DATA_REG +0x2208 VAP_PVS_VECTOR_DATA_REG_128 +0x221C VAP_CLIP_CNTL +0x2220 VAP_GB_VERT_CLIP_ADJ +0x2224 VAP_GB_VERT_DISC_ADJ +0x2228 VAP_GB_HORZ_CLIP_ADJ +0x222C VAP_GB_HORZ_DISC_ADJ +0x2230 VAP_PVS_FLOW_CNTL_ADDRS_0 +0x2234 VAP_PVS_FLOW_CNTL_ADDRS_1 +0x2238 VAP_PVS_FLOW_CNTL_ADDRS_2 +0x223C VAP_PVS_FLOW_CNTL_ADDRS_3 +0x2240 VAP_PVS_FLOW_CNTL_ADDRS_4 +0x2244 VAP_PVS_FLOW_CNTL_ADDRS_5 +0x2248 VAP_PVS_FLOW_CNTL_ADDRS_6 +0x224C VAP_PVS_FLOW_CNTL_ADDRS_7 +0x2250 VAP_PVS_FLOW_CNTL_ADDRS_8 +0x2254 VAP_PVS_FLOW_CNTL_ADDRS_9 +0x2258 VAP_PVS_FLOW_CNTL_ADDRS_10 +0x225C VAP_PVS_FLOW_CNTL_ADDRS_11 +0x2260 VAP_PVS_FLOW_CNTL_ADDRS_12 +0x2264 VAP_PVS_FLOW_CNTL_ADDRS_13 +0x2268 VAP_PVS_FLOW_CNTL_ADDRS_14 +0x226C VAP_PVS_FLOW_CNTL_ADDRS_15 +0x2284 VAP_PVS_STATE_FLUSH_REG +0x2288 VAP_PVS_VTX_TIMEOUT_REG +0x2290 VAP_PVS_FLOW_CNTL_LOOP_INDEX_0 +0x2294 VAP_PVS_FLOW_CNTL_LOOP_INDEX_1 +0x2298 VAP_PVS_FLOW_CNTL_LOOP_INDEX_2 +0x229C VAP_PVS_FLOW_CNTL_LOOP_INDEX_3 +0x22A0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_4 +0x22A4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_5 +0x22A8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_6 +0x22AC VAP_PVS_FLOW_CNTL_LOOP_INDEX_7 +0x22B0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_8 +0x22B4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_9 +0x22B8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_10 +0x22BC VAP_PVS_FLOW_CNTL_LOOP_INDEX_11 +0x22C0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_12 +0x22C4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_13 +0x22C8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_14 +0x22CC VAP_PVS_FLOW_CNTL_LOOP_INDEX_15 +0x22D0 VAP_PVS_CODE_CNTL_0 +0x22D4 VAP_PVS_CONST_CNTL +0x22D8 VAP_PVS_CODE_CNTL_1 +0x22DC VAP_PVS_FLOW_CNTL_OPC +0x342C RB2D_DSTCACHE_CTLSTAT +0x4000 GB_VAP_RASTER_VTX_FMT_0 +0x4004 GB_VAP_RASTER_VTX_FMT_1 +0x4008 GB_ENABLE +0x401C GB_SELECT +0x4020 GB_AA_CONFIG +0x4024 GB_FIFO_SIZE +0x4100 TX_INVALTAGS +0x4200 GA_POINT_S0 +0x4204 GA_POINT_T0 +0x4208 GA_POINT_S1 +0x420C GA_POINT_T1 +0x4214 GA_TRIANGLE_STIPPLE +0x421C GA_POINT_SIZE +0x4230 GA_POINT_MINMAX +0x4234 GA_LINE_CNTL +0x4238 GA_LINE_STIPPLE_CONFIG +0x4260 GA_LINE_STIPPLE_VALUE +0x4264 GA_LINE_S0 +0x4268 GA_LINE_S1 +0x4278 GA_COLOR_CONTROL +0x427C GA_SOLID_RG +0x4280 GA_SOLID_BA +0x4288 GA_POLY_MODE +0x428C GA_ROUND_MODE +0x4290 GA_OFFSET +0x4294 GA_FOG_SCALE +0x4298 GA_FOG_OFFSET +0x42A0 SU_TEX_WRAP +0x42A4 SU_POLY_OFFSET_FRONT_SCALE +0x42A8 SU_POLY_OFFSET_FRONT_OFFSET +0x42AC SU_POLY_OFFSET_BACK_SCALE +0x42B0 SU_POLY_OFFSET_BACK_OFFSET +0x42B4 SU_POLY_OFFSET_ENABLE +0x42B8 SU_CULL_MODE +0x42C0 SU_DEPTH_SCALE +0x42C4 SU_DEPTH_OFFSET +0x42C8 SU_REG_DEST +0x4300 RS_COUNT +0x4304 RS_INST_COUNT +0x4310 RS_IP_0 +0x4314 RS_IP_1 +0x4318 RS_IP_2 +0x431C RS_IP_3 +0x4320 RS_IP_4 +0x4324 RS_IP_5 +0x4328 RS_IP_6 +0x432C RS_IP_7 +0x4330 RS_INST_0 +0x4334 RS_INST_1 +0x4338 RS_INST_2 +0x433C RS_INST_3 +0x4340 RS_INST_4 +0x4344 RS_INST_5 +0x4348 RS_INST_6 +0x434C RS_INST_7 +0x4350 RS_INST_8 +0x4354 RS_INST_9 +0x4358 RS_INST_10 +0x435C RS_INST_11 +0x4360 RS_INST_12 +0x4364 RS_INST_13 +0x4368 RS_INST_14 +0x436C RS_INST_15 +0x43A4 SC_HYPERZ_EN +0x43A8 SC_EDGERULE +0x43B0 SC_CLIP_0_A +0x43B4 SC_CLIP_0_B +0x43B8 SC_CLIP_1_A +0x43BC SC_CLIP_1_B +0x43C0 SC_CLIP_2_A +0x43C4 SC_CLIP_2_B +0x43C8 SC_CLIP_3_A +0x43CC SC_CLIP_3_B +0x43D0 SC_CLIP_RULE +0x43E0 SC_SCISSOR0 +0x43E8 SC_SCREENDOOR +0x4440 TX_FILTER1_0 +0x4444 TX_FILTER1_1 +0x4448 TX_FILTER1_2 +0x444C TX_FILTER1_3 +0x4450 TX_FILTER1_4 +0x4454 TX_FILTER1_5 +0x4458 TX_FILTER1_6 +0x445C TX_FILTER1_7 +0x4460 TX_FILTER1_8 +0x4464 TX_FILTER1_9 +0x4468 TX_FILTER1_10 +0x446C TX_FILTER1_11 +0x4470 TX_FILTER1_12 +0x4474 TX_FILTER1_13 +0x4478 TX_FILTER1_14 +0x447C TX_FILTER1_15 +0x4580 TX_CHROMA_KEY_0 +0x4584 TX_CHROMA_KEY_1 +0x4588 TX_CHROMA_KEY_2 +0x458C TX_CHROMA_KEY_3 +0x4590 TX_CHROMA_KEY_4 +0x4594 TX_CHROMA_KEY_5 +0x4598 TX_CHROMA_KEY_6 +0x459C TX_CHROMA_KEY_7 +0x45A0 TX_CHROMA_KEY_8 +0x45A4 TX_CHROMA_KEY_9 +0x45A8 TX_CHROMA_KEY_10 +0x45AC TX_CHROMA_KEY_11 +0x45B0 TX_CHROMA_KEY_12 +0x45B4 TX_CHROMA_KEY_13 +0x45B8 TX_CHROMA_KEY_14 +0x45BC TX_CHROMA_KEY_15 +0x45C0 TX_BORDER_COLOR_0 +0x45C4 TX_BORDER_COLOR_1 +0x45C8 TX_BORDER_COLOR_2 +0x45CC TX_BORDER_COLOR_3 +0x45D0 TX_BORDER_COLOR_4 +0x45D4 TX_BORDER_COLOR_5 +0x45D8 TX_BORDER_COLOR_6 +0x45DC TX_BORDER_COLOR_7 +0x45E0 TX_BORDER_COLOR_8 +0x45E4 TX_BORDER_COLOR_9 +0x45E8 TX_BORDER_COLOR_10 +0x45EC TX_BORDER_COLOR_11 +0x45F0 TX_BORDER_COLOR_12 +0x45F4 TX_BORDER_COLOR_13 +0x45F8 TX_BORDER_COLOR_14 +0x45FC TX_BORDER_COLOR_15 +0x4600 US_CONFIG +0x4604 US_PIXSIZE +0x4608 US_CODE_OFFSET +0x460C US_RESET +0x4610 US_CODE_ADDR_0 +0x4614 US_CODE_ADDR_1 +0x4618 US_CODE_ADDR_2 +0x461C US_CODE_ADDR_3 +0x4620 US_TEX_INST_0 +0x4624 US_TEX_INST_1 +0x4628 US_TEX_INST_2 +0x462C US_TEX_INST_3 +0x4630 US_TEX_INST_4 +0x4634 US_TEX_INST_5 +0x4638 US_TEX_INST_6 +0x463C US_TEX_INST_7 +0x4640 US_TEX_INST_8 +0x4644 US_TEX_INST_9 +0x4648 US_TEX_INST_10 +0x464C US_TEX_INST_11 +0x4650 US_TEX_INST_12 +0x4654 US_TEX_INST_13 +0x4658 US_TEX_INST_14 +0x465C US_TEX_INST_15 +0x4660 US_TEX_INST_16 +0x4664 US_TEX_INST_17 +0x4668 US_TEX_INST_18 +0x466C US_TEX_INST_19 +0x4670 US_TEX_INST_20 +0x4674 US_TEX_INST_21 +0x4678 US_TEX_INST_22 +0x467C US_TEX_INST_23 +0x4680 US_TEX_INST_24 +0x4684 US_TEX_INST_25 +0x4688 US_TEX_INST_26 +0x468C US_TEX_INST_27 +0x4690 US_TEX_INST_28 +0x4694 US_TEX_INST_29 +0x4698 US_TEX_INST_30 +0x469C US_TEX_INST_31 +0x46A4 US_OUT_FMT_0 +0x46A8 US_OUT_FMT_1 +0x46AC US_OUT_FMT_2 +0x46B0 US_OUT_FMT_3 +0x46B4 US_W_FMT +0x46B8 US_CODE_BANK +0x46BC US_CODE_EXT +0x46C0 US_ALU_RGB_ADDR_0 +0x46C4 US_ALU_RGB_ADDR_1 +0x46C8 US_ALU_RGB_ADDR_2 +0x46CC US_ALU_RGB_ADDR_3 +0x46D0 US_ALU_RGB_ADDR_4 +0x46D4 US_ALU_RGB_ADDR_5 +0x46D8 US_ALU_RGB_ADDR_6 +0x46DC US_ALU_RGB_ADDR_7 +0x46E0 US_ALU_RGB_ADDR_8 +0x46E4 US_ALU_RGB_ADDR_9 +0x46E8 US_ALU_RGB_ADDR_10 +0x46EC US_ALU_RGB_ADDR_11 +0x46F0 US_ALU_RGB_ADDR_12 +0x46F4 US_ALU_RGB_ADDR_13 +0x46F8 US_ALU_RGB_ADDR_14 +0x46FC US_ALU_RGB_ADDR_15 +0x4700 US_ALU_RGB_ADDR_16 +0x4704 US_ALU_RGB_ADDR_17 +0x4708 US_ALU_RGB_ADDR_18 +0x470C US_ALU_RGB_ADDR_19 +0x4710 US_ALU_RGB_ADDR_20 +0x4714 US_ALU_RGB_ADDR_21 +0x4718 US_ALU_RGB_ADDR_22 +0x471C US_ALU_RGB_ADDR_23 +0x4720 US_ALU_RGB_ADDR_24 +0x4724 US_ALU_RGB_ADDR_25 +0x4728 US_ALU_RGB_ADDR_26 +0x472C US_ALU_RGB_ADDR_27 +0x4730 US_ALU_RGB_ADDR_28 +0x4734 US_ALU_RGB_ADDR_29 +0x4738 US_ALU_RGB_ADDR_30 +0x473C US_ALU_RGB_ADDR_31 +0x4740 US_ALU_RGB_ADDR_32 +0x4744 US_ALU_RGB_ADDR_33 +0x4748 US_ALU_RGB_ADDR_34 +0x474C US_ALU_RGB_ADDR_35 +0x4750 US_ALU_RGB_ADDR_36 +0x4754 US_ALU_RGB_ADDR_37 +0x4758 US_ALU_RGB_ADDR_38 +0x475C US_ALU_RGB_ADDR_39 +0x4760 US_ALU_RGB_ADDR_40 +0x4764 US_ALU_RGB_ADDR_41 +0x4768 US_ALU_RGB_ADDR_42 +0x476C US_ALU_RGB_ADDR_43 +0x4770 US_ALU_RGB_ADDR_44 +0x4774 US_ALU_RGB_ADDR_45 +0x4778 US_ALU_RGB_ADDR_46 +0x477C US_ALU_RGB_ADDR_47 +0x4780 US_ALU_RGB_ADDR_48 +0x4784 US_ALU_RGB_ADDR_49 +0x4788 US_ALU_RGB_ADDR_50 +0x478C US_ALU_RGB_ADDR_51 +0x4790 US_ALU_RGB_ADDR_52 +0x4794 US_ALU_RGB_ADDR_53 +0x4798 US_ALU_RGB_ADDR_54 +0x479C US_ALU_RGB_ADDR_55 +0x47A0 US_ALU_RGB_ADDR_56 +0x47A4 US_ALU_RGB_ADDR_57 +0x47A8 US_ALU_RGB_ADDR_58 +0x47AC US_ALU_RGB_ADDR_59 +0x47B0 US_ALU_RGB_ADDR_60 +0x47B4 US_ALU_RGB_ADDR_61 +0x47B8 US_ALU_RGB_ADDR_62 +0x47BC US_ALU_RGB_ADDR_63 +0x47C0 US_ALU_ALPHA_ADDR_0 +0x47C4 US_ALU_ALPHA_ADDR_1 +0x47C8 US_ALU_ALPHA_ADDR_2 +0x47CC US_ALU_ALPHA_ADDR_3 +0x47D0 US_ALU_ALPHA_ADDR_4 +0x47D4 US_ALU_ALPHA_ADDR_5 +0x47D8 US_ALU_ALPHA_ADDR_6 +0x47DC US_ALU_ALPHA_ADDR_7 +0x47E0 US_ALU_ALPHA_ADDR_8 +0x47E4 US_ALU_ALPHA_ADDR_9 +0x47E8 US_ALU_ALPHA_ADDR_10 +0x47EC US_ALU_ALPHA_ADDR_11 +0x47F0 US_ALU_ALPHA_ADDR_12 +0x47F4 US_ALU_ALPHA_ADDR_13 +0x47F8 US_ALU_ALPHA_ADDR_14 +0x47FC US_ALU_ALPHA_ADDR_15 +0x4800 US_ALU_ALPHA_ADDR_16 +0x4804 US_ALU_ALPHA_ADDR_17 +0x4808 US_ALU_ALPHA_ADDR_18 +0x480C US_ALU_ALPHA_ADDR_19 +0x4810 US_ALU_ALPHA_ADDR_20 +0x4814 US_ALU_ALPHA_ADDR_21 +0x4818 US_ALU_ALPHA_ADDR_22 +0x481C US_ALU_ALPHA_ADDR_23 +0x4820 US_ALU_ALPHA_ADDR_24 +0x4824 US_ALU_ALPHA_ADDR_25 +0x4828 US_ALU_ALPHA_ADDR_26 +0x482C US_ALU_ALPHA_ADDR_27 +0x4830 US_ALU_ALPHA_ADDR_28 +0x4834 US_ALU_ALPHA_ADDR_29 +0x4838 US_ALU_ALPHA_ADDR_30 +0x483C US_ALU_ALPHA_ADDR_31 +0x4840 US_ALU_ALPHA_ADDR_32 +0x4844 US_ALU_ALPHA_ADDR_33 +0x4848 US_ALU_ALPHA_ADDR_34 +0x484C US_ALU_ALPHA_ADDR_35 +0x4850 US_ALU_ALPHA_ADDR_36 +0x4854 US_ALU_ALPHA_ADDR_37 +0x4858 US_ALU_ALPHA_ADDR_38 +0x485C US_ALU_ALPHA_ADDR_39 +0x4860 US_ALU_ALPHA_ADDR_40 +0x4864 US_ALU_ALPHA_ADDR_41 +0x4868 US_ALU_ALPHA_ADDR_42 +0x486C US_ALU_ALPHA_ADDR_43 +0x4870 US_ALU_ALPHA_ADDR_44 +0x4874 US_ALU_ALPHA_ADDR_45 +0x4878 US_ALU_ALPHA_ADDR_46 +0x487C US_ALU_ALPHA_ADDR_47 +0x4880 US_ALU_ALPHA_ADDR_48 +0x4884 US_ALU_ALPHA_ADDR_49 +0x4888 US_ALU_ALPHA_ADDR_50 +0x488C US_ALU_ALPHA_ADDR_51 +0x4890 US_ALU_ALPHA_ADDR_52 +0x4894 US_ALU_ALPHA_ADDR_53 +0x4898 US_ALU_ALPHA_ADDR_54 +0x489C US_ALU_ALPHA_ADDR_55 +0x48A0 US_ALU_ALPHA_ADDR_56 +0x48A4 US_ALU_ALPHA_ADDR_57 +0x48A8 US_ALU_ALPHA_ADDR_58 +0x48AC US_ALU_ALPHA_ADDR_59 +0x48B0 US_ALU_ALPHA_ADDR_60 +0x48B4 US_ALU_ALPHA_ADDR_61 +0x48B8 US_ALU_ALPHA_ADDR_62 +0x48BC US_ALU_ALPHA_ADDR_63 +0x48C0 US_ALU_RGB_INST_0 +0x48C4 US_ALU_RGB_INST_1 +0x48C8 US_ALU_RGB_INST_2 +0x48CC US_ALU_RGB_INST_3 +0x48D0 US_ALU_RGB_INST_4 +0x48D4 US_ALU_RGB_INST_5 +0x48D8 US_ALU_RGB_INST_6 +0x48DC US_ALU_RGB_INST_7 +0x48E0 US_ALU_RGB_INST_8 +0x48E4 US_ALU_RGB_INST_9 +0x48E8 US_ALU_RGB_INST_10 +0x48EC US_ALU_RGB_INST_11 +0x48F0 US_ALU_RGB_INST_12 +0x48F4 US_ALU_RGB_INST_13 +0x48F8 US_ALU_RGB_INST_14 +0x48FC US_ALU_RGB_INST_15 +0x4900 US_ALU_RGB_INST_16 +0x4904 US_ALU_RGB_INST_17 +0x4908 US_ALU_RGB_INST_18 +0x490C US_ALU_RGB_INST_19 +0x4910 US_ALU_RGB_INST_20 +0x4914 US_ALU_RGB_INST_21 +0x4918 US_ALU_RGB_INST_22 +0x491C US_ALU_RGB_INST_23 +0x4920 US_ALU_RGB_INST_24 +0x4924 US_ALU_RGB_INST_25 +0x4928 US_ALU_RGB_INST_26 +0x492C US_ALU_RGB_INST_27 +0x4930 US_ALU_RGB_INST_28 +0x4934 US_ALU_RGB_INST_29 +0x4938 US_ALU_RGB_INST_30 +0x493C US_ALU_RGB_INST_31 +0x4940 US_ALU_RGB_INST_32 +0x4944 US_ALU_RGB_INST_33 +0x4948 US_ALU_RGB_INST_34 +0x494C US_ALU_RGB_INST_35 +0x4950 US_ALU_RGB_INST_36 +0x4954 US_ALU_RGB_INST_37 +0x4958 US_ALU_RGB_INST_38 +0x495C US_ALU_RGB_INST_39 +0x4960 US_ALU_RGB_INST_40 +0x4964 US_ALU_RGB_INST_41 +0x4968 US_ALU_RGB_INST_42 +0x496C US_ALU_RGB_INST_43 +0x4970 US_ALU_RGB_INST_44 +0x4974 US_ALU_RGB_INST_45 +0x4978 US_ALU_RGB_INST_46 +0x497C US_ALU_RGB_INST_47 +0x4980 US_ALU_RGB_INST_48 +0x4984 US_ALU_RGB_INST_49 +0x4988 US_ALU_RGB_INST_50 +0x498C US_ALU_RGB_INST_51 +0x4990 US_ALU_RGB_INST_52 +0x4994 US_ALU_RGB_INST_53 +0x4998 US_ALU_RGB_INST_54 +0x499C US_ALU_RGB_INST_55 +0x49A0 US_ALU_RGB_INST_56 +0x49A4 US_ALU_RGB_INST_57 +0x49A8 US_ALU_RGB_INST_58 +0x49AC US_ALU_RGB_INST_59 +0x49B0 US_ALU_RGB_INST_60 +0x49B4 US_ALU_RGB_INST_61 +0x49B8 US_ALU_RGB_INST_62 +0x49BC US_ALU_RGB_INST_63 +0x49C0 US_ALU_ALPHA_INST_0 +0x49C4 US_ALU_ALPHA_INST_1 +0x49C8 US_ALU_ALPHA_INST_2 +0x49CC US_ALU_ALPHA_INST_3 +0x49D0 US_ALU_ALPHA_INST_4 +0x49D4 US_ALU_ALPHA_INST_5 +0x49D8 US_ALU_ALPHA_INST_6 +0x49DC US_ALU_ALPHA_INST_7 +0x49E0 US_ALU_ALPHA_INST_8 +0x49E4 US_ALU_ALPHA_INST_9 +0x49E8 US_ALU_ALPHA_INST_10 +0x49EC US_ALU_ALPHA_INST_11 +0x49F0 US_ALU_ALPHA_INST_12 +0x49F4 US_ALU_ALPHA_INST_13 +0x49F8 US_ALU_ALPHA_INST_14 +0x49FC US_ALU_ALPHA_INST_15 +0x4A00 US_ALU_ALPHA_INST_16 +0x4A04 US_ALU_ALPHA_INST_17 +0x4A08 US_ALU_ALPHA_INST_18 +0x4A0C US_ALU_ALPHA_INST_19 +0x4A10 US_ALU_ALPHA_INST_20 +0x4A14 US_ALU_ALPHA_INST_21 +0x4A18 US_ALU_ALPHA_INST_22 +0x4A1C US_ALU_ALPHA_INST_23 +0x4A20 US_ALU_ALPHA_INST_24 +0x4A24 US_ALU_ALPHA_INST_25 +0x4A28 US_ALU_ALPHA_INST_26 +0x4A2C US_ALU_ALPHA_INST_27 +0x4A30 US_ALU_ALPHA_INST_28 +0x4A34 US_ALU_ALPHA_INST_29 +0x4A38 US_ALU_ALPHA_INST_30 +0x4A3C US_ALU_ALPHA_INST_31 +0x4A40 US_ALU_ALPHA_INST_32 +0x4A44 US_ALU_ALPHA_INST_33 +0x4A48 US_ALU_ALPHA_INST_34 +0x4A4C US_ALU_ALPHA_INST_35 +0x4A50 US_ALU_ALPHA_INST_36 +0x4A54 US_ALU_ALPHA_INST_37 +0x4A58 US_ALU_ALPHA_INST_38 +0x4A5C US_ALU_ALPHA_INST_39 +0x4A60 US_ALU_ALPHA_INST_40 +0x4A64 US_ALU_ALPHA_INST_41 +0x4A68 US_ALU_ALPHA_INST_42 +0x4A6C US_ALU_ALPHA_INST_43 +0x4A70 US_ALU_ALPHA_INST_44 +0x4A74 US_ALU_ALPHA_INST_45 +0x4A78 US_ALU_ALPHA_INST_46 +0x4A7C US_ALU_ALPHA_INST_47 +0x4A80 US_ALU_ALPHA_INST_48 +0x4A84 US_ALU_ALPHA_INST_49 +0x4A88 US_ALU_ALPHA_INST_50 +0x4A8C US_ALU_ALPHA_INST_51 +0x4A90 US_ALU_ALPHA_INST_52 +0x4A94 US_ALU_ALPHA_INST_53 +0x4A98 US_ALU_ALPHA_INST_54 +0x4A9C US_ALU_ALPHA_INST_55 +0x4AA0 US_ALU_ALPHA_INST_56 +0x4AA4 US_ALU_ALPHA_INST_57 +0x4AA8 US_ALU_ALPHA_INST_58 +0x4AAC US_ALU_ALPHA_INST_59 +0x4AB0 US_ALU_ALPHA_INST_60 +0x4AB4 US_ALU_ALPHA_INST_61 +0x4AB8 US_ALU_ALPHA_INST_62 +0x4ABC US_ALU_ALPHA_INST_63 +0x4AC0 US_ALU_EXT_ADDR_0 +0x4AC4 US_ALU_EXT_ADDR_1 +0x4AC8 US_ALU_EXT_ADDR_2 +0x4ACC US_ALU_EXT_ADDR_3 +0x4AD0 US_ALU_EXT_ADDR_4 +0x4AD4 US_ALU_EXT_ADDR_5 +0x4AD8 US_ALU_EXT_ADDR_6 +0x4ADC US_ALU_EXT_ADDR_7 +0x4AE0 US_ALU_EXT_ADDR_8 +0x4AE4 US_ALU_EXT_ADDR_9 +0x4AE8 US_ALU_EXT_ADDR_10 +0x4AEC US_ALU_EXT_ADDR_11 +0x4AF0 US_ALU_EXT_ADDR_12 +0x4AF4 US_ALU_EXT_ADDR_13 +0x4AF8 US_ALU_EXT_ADDR_14 +0x4AFC US_ALU_EXT_ADDR_15 +0x4B00 US_ALU_EXT_ADDR_16 +0x4B04 US_ALU_EXT_ADDR_17 +0x4B08 US_ALU_EXT_ADDR_18 +0x4B0C US_ALU_EXT_ADDR_19 +0x4B10 US_ALU_EXT_ADDR_20 +0x4B14 US_ALU_EXT_ADDR_21 +0x4B18 US_ALU_EXT_ADDR_22 +0x4B1C US_ALU_EXT_ADDR_23 +0x4B20 US_ALU_EXT_ADDR_24 +0x4B24 US_ALU_EXT_ADDR_25 +0x4B28 US_ALU_EXT_ADDR_26 +0x4B2C US_ALU_EXT_ADDR_27 +0x4B30 US_ALU_EXT_ADDR_28 +0x4B34 US_ALU_EXT_ADDR_29 +0x4B38 US_ALU_EXT_ADDR_30 +0x4B3C US_ALU_EXT_ADDR_31 +0x4B40 US_ALU_EXT_ADDR_32 +0x4B44 US_ALU_EXT_ADDR_33 +0x4B48 US_ALU_EXT_ADDR_34 +0x4B4C US_ALU_EXT_ADDR_35 +0x4B50 US_ALU_EXT_ADDR_36 +0x4B54 US_ALU_EXT_ADDR_37 +0x4B58 US_ALU_EXT_ADDR_38 +0x4B5C US_ALU_EXT_ADDR_39 +0x4B60 US_ALU_EXT_ADDR_40 +0x4B64 US_ALU_EXT_ADDR_41 +0x4B68 US_ALU_EXT_ADDR_42 +0x4B6C US_ALU_EXT_ADDR_43 +0x4B70 US_ALU_EXT_ADDR_44 +0x4B74 US_ALU_EXT_ADDR_45 +0x4B78 US_ALU_EXT_ADDR_46 +0x4B7C US_ALU_EXT_ADDR_47 +0x4B80 US_ALU_EXT_ADDR_48 +0x4B84 US_ALU_EXT_ADDR_49 +0x4B88 US_ALU_EXT_ADDR_50 +0x4B8C US_ALU_EXT_ADDR_51 +0x4B90 US_ALU_EXT_ADDR_52 +0x4B94 US_ALU_EXT_ADDR_53 +0x4B98 US_ALU_EXT_ADDR_54 +0x4B9C US_ALU_EXT_ADDR_55 +0x4BA0 US_ALU_EXT_ADDR_56 +0x4BA4 US_ALU_EXT_ADDR_57 +0x4BA8 US_ALU_EXT_ADDR_58 +0x4BAC US_ALU_EXT_ADDR_59 +0x4BB0 US_ALU_EXT_ADDR_60 +0x4BB4 US_ALU_EXT_ADDR_61 +0x4BB8 US_ALU_EXT_ADDR_62 +0x4BBC US_ALU_EXT_ADDR_63 +0x4BC0 FG_FOG_BLEND +0x4BC4 FG_FOG_FACTOR +0x4BC8 FG_FOG_COLOR_R +0x4BCC FG_FOG_COLOR_G +0x4BD0 FG_FOG_COLOR_B +0x4BD4 FG_ALPHA_FUNC +0x4BD8 FG_DEPTH_SRC +0x4C00 US_ALU_CONST_R_0 +0x4C04 US_ALU_CONST_G_0 +0x4C08 US_ALU_CONST_B_0 +0x4C0C US_ALU_CONST_A_0 +0x4C10 US_ALU_CONST_R_1 +0x4C14 US_ALU_CONST_G_1 +0x4C18 US_ALU_CONST_B_1 +0x4C1C US_ALU_CONST_A_1 +0x4C20 US_ALU_CONST_R_2 +0x4C24 US_ALU_CONST_G_2 +0x4C28 US_ALU_CONST_B_2 +0x4C2C US_ALU_CONST_A_2 +0x4C30 US_ALU_CONST_R_3 +0x4C34 US_ALU_CONST_G_3 +0x4C38 US_ALU_CONST_B_3 +0x4C3C US_ALU_CONST_A_3 +0x4C40 US_ALU_CONST_R_4 +0x4C44 US_ALU_CONST_G_4 +0x4C48 US_ALU_CONST_B_4 +0x4C4C US_ALU_CONST_A_4 +0x4C50 US_ALU_CONST_R_5 +0x4C54 US_ALU_CONST_G_5 +0x4C58 US_ALU_CONST_B_5 +0x4C5C US_ALU_CONST_A_5 +0x4C60 US_ALU_CONST_R_6 +0x4C64 US_ALU_CONST_G_6 +0x4C68 US_ALU_CONST_B_6 +0x4C6C US_ALU_CONST_A_6 +0x4C70 US_ALU_CONST_R_7 +0x4C74 US_ALU_CONST_G_7 +0x4C78 US_ALU_CONST_B_7 +0x4C7C US_ALU_CONST_A_7 +0x4C80 US_ALU_CONST_R_8 +0x4C84 US_ALU_CONST_G_8 +0x4C88 US_ALU_CONST_B_8 +0x4C8C US_ALU_CONST_A_8 +0x4C90 US_ALU_CONST_R_9 +0x4C94 US_ALU_CONST_G_9 +0x4C98 US_ALU_CONST_B_9 +0x4C9C US_ALU_CONST_A_9 +0x4CA0 US_ALU_CONST_R_10 +0x4CA4 US_ALU_CONST_G_10 +0x4CA8 US_ALU_CONST_B_10 +0x4CAC US_ALU_CONST_A_10 +0x4CB0 US_ALU_CONST_R_11 +0x4CB4 US_ALU_CONST_G_11 +0x4CB8 US_ALU_CONST_B_11 +0x4CBC US_ALU_CONST_A_11 +0x4CC0 US_ALU_CONST_R_12 +0x4CC4 US_ALU_CONST_G_12 +0x4CC8 US_ALU_CONST_B_12 +0x4CCC US_ALU_CONST_A_12 +0x4CD0 US_ALU_CONST_R_13 +0x4CD4 US_ALU_CONST_G_13 +0x4CD8 US_ALU_CONST_B_13 +0x4CDC US_ALU_CONST_A_13 +0x4CE0 US_ALU_CONST_R_14 +0x4CE4 US_ALU_CONST_G_14 +0x4CE8 US_ALU_CONST_B_14 +0x4CEC US_ALU_CONST_A_14 +0x4CF0 US_ALU_CONST_R_15 +0x4CF4 US_ALU_CONST_G_15 +0x4CF8 US_ALU_CONST_B_15 +0x4CFC US_ALU_CONST_A_15 +0x4D00 US_ALU_CONST_R_16 +0x4D04 US_ALU_CONST_G_16 +0x4D08 US_ALU_CONST_B_16 +0x4D0C US_ALU_CONST_A_16 +0x4D10 US_ALU_CONST_R_17 +0x4D14 US_ALU_CONST_G_17 +0x4D18 US_ALU_CONST_B_17 +0x4D1C US_ALU_CONST_A_17 +0x4D20 US_ALU_CONST_R_18 +0x4D24 US_ALU_CONST_G_18 +0x4D28 US_ALU_CONST_B_18 +0x4D2C US_ALU_CONST_A_18 +0x4D30 US_ALU_CONST_R_19 +0x4D34 US_ALU_CONST_G_19 +0x4D38 US_ALU_CONST_B_19 +0x4D3C US_ALU_CONST_A_19 +0x4D40 US_ALU_CONST_R_20 +0x4D44 US_ALU_CONST_G_20 +0x4D48 US_ALU_CONST_B_20 +0x4D4C US_ALU_CONST_A_20 +0x4D50 US_ALU_CONST_R_21 +0x4D54 US_ALU_CONST_G_21 +0x4D58 US_ALU_CONST_B_21 +0x4D5C US_ALU_CONST_A_21 +0x4D60 US_ALU_CONST_R_22 +0x4D64 US_ALU_CONST_G_22 +0x4D68 US_ALU_CONST_B_22 +0x4D6C US_ALU_CONST_A_22 +0x4D70 US_ALU_CONST_R_23 +0x4D74 US_ALU_CONST_G_23 +0x4D78 US_ALU_CONST_B_23 +0x4D7C US_ALU_CONST_A_23 +0x4D80 US_ALU_CONST_R_24 +0x4D84 US_ALU_CONST_G_24 +0x4D88 US_ALU_CONST_B_24 +0x4D8C US_ALU_CONST_A_24 +0x4D90 US_ALU_CONST_R_25 +0x4D94 US_ALU_CONST_G_25 +0x4D98 US_ALU_CONST_B_25 +0x4D9C US_ALU_CONST_A_25 +0x4DA0 US_ALU_CONST_R_26 +0x4DA4 US_ALU_CONST_G_26 +0x4DA8 US_ALU_CONST_B_26 +0x4DAC US_ALU_CONST_A_26 +0x4DB0 US_ALU_CONST_R_27 +0x4DB4 US_ALU_CONST_G_27 +0x4DB8 US_ALU_CONST_B_27 +0x4DBC US_ALU_CONST_A_27 +0x4DC0 US_ALU_CONST_R_28 +0x4DC4 US_ALU_CONST_G_28 +0x4DC8 US_ALU_CONST_B_28 +0x4DCC US_ALU_CONST_A_28 +0x4DD0 US_ALU_CONST_R_29 +0x4DD4 US_ALU_CONST_G_29 +0x4DD8 US_ALU_CONST_B_29 +0x4DDC US_ALU_CONST_A_29 +0x4DE0 US_ALU_CONST_R_30 +0x4DE4 US_ALU_CONST_G_30 +0x4DE8 US_ALU_CONST_B_30 +0x4DEC US_ALU_CONST_A_30 +0x4DF0 US_ALU_CONST_R_31 +0x4DF4 US_ALU_CONST_G_31 +0x4DF8 US_ALU_CONST_B_31 +0x4DFC US_ALU_CONST_A_31 +0x4E04 RB3D_BLENDCNTL_R3 +0x4E08 RB3D_ABLENDCNTL_R3 +0x4E0C RB3D_COLOR_CHANNEL_MASK +0x4E10 RB3D_CONSTANT_COLOR +0x4E14 RB3D_COLOR_CLEAR_VALUE +0x4E18 RB3D_ROPCNTL_R3 +0x4E1C RB3D_CLRCMP_FLIPE_R3 +0x4E20 RB3D_CLRCMP_CLR_R3 +0x4E24 RB3D_CLRCMP_MSK_R3 +0x4E48 RB3D_DEBUG_CTL +0x4E4C RB3D_DSTCACHE_CTLSTAT_R3 +0x4E50 RB3D_DITHER_CTL +0x4E54 RB3D_CMASK_OFFSET0 +0x4E58 RB3D_CMASK_OFFSET1 +0x4E5C RB3D_CMASK_OFFSET2 +0x4E60 RB3D_CMASK_OFFSET3 +0x4E64 RB3D_CMASK_PITCH0 +0x4E68 RB3D_CMASK_PITCH1 +0x4E6C RB3D_CMASK_PITCH2 +0x4E70 RB3D_CMASK_PITCH3 +0x4E74 RB3D_CMASK_WRINDEX +0x4E78 RB3D_CMASK_DWORD +0x4E7C RB3D_CMASK_RDINDEX +0x4E80 RB3D_AARESOLVE_OFFSET +0x4E84 RB3D_AARESOLVE_PITCH +0x4E88 RB3D_AARESOLVE_CTL +0x4EA0 RB3D_DISCARD_SRC_PIXEL_LTE_THRESHOLD +0x4EA4 RB3D_DISCARD_SRC_PIXEL_GTE_THRESHOLD +0x4F04 ZB_ZSTENCILCNTL +0x4F08 ZB_STENCILREFMASK +0x4F14 ZB_ZTOP +0x4F18 ZB_ZCACHE_CTLSTAT +0x4F1C ZB_BW_CNTL +0x4F28 ZB_DEPTHCLEARVALUE +0x4F30 ZB_ZMASK_OFFSET +0x4F34 ZB_ZMASK_PITCH +0x4F38 ZB_ZMASK_WRINDEX +0x4F3C ZB_ZMASK_DWORD +0x4F40 ZB_ZMASK_RDINDEX +0x4F44 ZB_HIZ_OFFSET +0x4F48 ZB_HIZ_WRINDEX +0x4F4C ZB_HIZ_DWORD +0x4F50 ZB_HIZ_RDINDEX +0x4F54 ZB_HIZ_PITCH +0x4F58 ZB_ZPASS_DATA --- linux-2.6.32.orig/drivers/gpu/drm/radeon/reg_srcs/r200 +++ linux-2.6.32/drivers/gpu/drm/radeon/reg_srcs/r200 @@ -91,6 +91,8 @@ 0x22b8 SE_TCL_TEX_CYL_WRAP_CTL 0x22c0 SE_TCL_UCP_VERT_BLEND_CNTL 0x22c4 SE_TCL_POINT_SPRITE_CNTL +0x22d0 SE_PVS_CNTL +0x22d4 SE_PVS_CONST_CNTL 0x2648 RE_POINTSIZE 0x26c0 RE_TOP_LEFT 0x26c4 RE_MISC --- linux-2.6.32.orig/drivers/gpu/drm/radeon/reg_srcs/rv515 +++ linux-2.6.32/drivers/gpu/drm/radeon/reg_srcs/rv515 @@ -161,7 +161,12 @@ 0x401C GB_SELECT 0x4020 GB_AA_CONFIG 0x4024 GB_FIFO_SIZE +0x4028 GB_Z_PEQ_CONFIG 0x4100 TX_INVALTAGS +0x4114 SU_TEX_WRAP_PS3 +0x4118 PS3_ENABLE +0x411c PS3_VTX_FMT +0x4120 PS3_TEX_SOURCE 0x4200 GA_POINT_S0 0x4204 GA_POINT_T0 0x4208 GA_POINT_S1 @@ -171,6 +176,7 @@ 0x4230 GA_POINT_MINMAX 0x4234 GA_LINE_CNTL 0x4238 GA_LINE_STIPPLE_CONFIG +0x4258 GA_COLOR_CONTROL_PS3 0x4260 GA_LINE_STIPPLE_VALUE 0x4264 GA_LINE_S0 0x4268 GA_LINE_S1 --- linux-2.6.32.orig/drivers/gpu/drm/savage/savage_drv.c +++ linux-2.6.32/drivers/gpu/drm/savage/savage_drv.c @@ -50,7 +50,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/tdfx/tdfx_drv.c +++ linux-2.6.32/drivers/gpu/drm/tdfx/tdfx_drv.c @@ -48,7 +48,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_display.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_display.c @@ -32,7 +32,7 @@ #include "intel_drv.h" #include "i915_drm.h" #include "i915_drv.h" -#include "intel_dp.h" +#include "drm_dp_helper.h" #include "drm_crtc_helper.h" @@ -70,8 +70,6 @@ intel_p2_t p2; bool (* find_pll)(const intel_limit_t *, struct drm_crtc *, int, int, intel_clock_t *); - bool (* find_reduced_pll)(const intel_limit_t *, struct drm_crtc *, - int, int, intel_clock_t *); }; #define I8XX_DOT_MIN 25000 @@ -102,32 +100,32 @@ #define I9XX_DOT_MAX 400000 #define I9XX_VCO_MIN 1400000 #define I9XX_VCO_MAX 2800000 -#define IGD_VCO_MIN 1700000 -#define IGD_VCO_MAX 3500000 +#define PINEVIEW_VCO_MIN 1700000 +#define PINEVIEW_VCO_MAX 3500000 #define I9XX_N_MIN 1 #define I9XX_N_MAX 6 -/* IGD's Ncounter is a ring counter */ -#define IGD_N_MIN 3 -#define IGD_N_MAX 6 +/* Pineview's Ncounter is a ring counter */ +#define PINEVIEW_N_MIN 3 +#define PINEVIEW_N_MAX 6 #define I9XX_M_MIN 70 #define I9XX_M_MAX 120 -#define IGD_M_MIN 2 -#define IGD_M_MAX 256 +#define PINEVIEW_M_MIN 2 +#define PINEVIEW_M_MAX 256 #define I9XX_M1_MIN 10 #define I9XX_M1_MAX 22 #define I9XX_M2_MIN 5 #define I9XX_M2_MAX 9 -/* IGD M1 is reserved, and must be 0 */ -#define IGD_M1_MIN 0 -#define IGD_M1_MAX 0 -#define IGD_M2_MIN 0 -#define IGD_M2_MAX 254 +/* Pineview M1 is reserved, and must be 0 */ +#define PINEVIEW_M1_MIN 0 +#define PINEVIEW_M1_MAX 0 +#define PINEVIEW_M2_MIN 0 +#define PINEVIEW_M2_MAX 254 #define I9XX_P_SDVO_DAC_MIN 5 #define I9XX_P_SDVO_DAC_MAX 80 #define I9XX_P_LVDS_MIN 7 #define I9XX_P_LVDS_MAX 98 -#define IGD_P_LVDS_MIN 7 -#define IGD_P_LVDS_MAX 112 +#define PINEVIEW_P_LVDS_MIN 7 +#define PINEVIEW_P_LVDS_MAX 112 #define I9XX_P1_MIN 1 #define I9XX_P1_MAX 8 #define I9XX_P2_SDVO_DAC_SLOW 10 @@ -234,53 +232,108 @@ #define G4X_P2_DISPLAY_PORT_FAST 10 #define G4X_P2_DISPLAY_PORT_LIMIT 0 -/* IGDNG */ +/* Ironlake / Sandybridge */ /* as we calculate clock using (register_value + 2) for N/M1/M2, so here the range value for them is (actual_value-2). */ -#define IGDNG_DOT_MIN 25000 -#define IGDNG_DOT_MAX 350000 -#define IGDNG_VCO_MIN 1760000 -#define IGDNG_VCO_MAX 3510000 -#define IGDNG_N_MIN 1 -#define IGDNG_N_MAX 5 -#define IGDNG_M_MIN 79 -#define IGDNG_M_MAX 118 -#define IGDNG_M1_MIN 12 -#define IGDNG_M1_MAX 23 -#define IGDNG_M2_MIN 5 -#define IGDNG_M2_MAX 9 -#define IGDNG_P_SDVO_DAC_MIN 5 -#define IGDNG_P_SDVO_DAC_MAX 80 -#define IGDNG_P_LVDS_MIN 28 -#define IGDNG_P_LVDS_MAX 112 -#define IGDNG_P1_MIN 1 -#define IGDNG_P1_MAX 8 -#define IGDNG_P2_SDVO_DAC_SLOW 10 -#define IGDNG_P2_SDVO_DAC_FAST 5 -#define IGDNG_P2_LVDS_SLOW 14 /* single channel */ -#define IGDNG_P2_LVDS_FAST 7 /* double channel */ -#define IGDNG_P2_DOT_LIMIT 225000 /* 225Mhz */ +#define IRONLAKE_DOT_MIN 25000 +#define IRONLAKE_DOT_MAX 350000 +#define IRONLAKE_VCO_MIN 1760000 +#define IRONLAKE_VCO_MAX 3510000 +#define IRONLAKE_M1_MIN 12 +#define IRONLAKE_M1_MAX 22 +#define IRONLAKE_M2_MIN 5 +#define IRONLAKE_M2_MAX 9 +#define IRONLAKE_P2_DOT_LIMIT 225000 /* 225Mhz */ + +/* We have parameter ranges for different type of outputs. */ + +/* DAC & HDMI Refclk 120Mhz */ +#define IRONLAKE_DAC_N_MIN 1 +#define IRONLAKE_DAC_N_MAX 5 +#define IRONLAKE_DAC_M_MIN 79 +#define IRONLAKE_DAC_M_MAX 127 +#define IRONLAKE_DAC_P_MIN 5 +#define IRONLAKE_DAC_P_MAX 80 +#define IRONLAKE_DAC_P1_MIN 1 +#define IRONLAKE_DAC_P1_MAX 8 +#define IRONLAKE_DAC_P2_SLOW 10 +#define IRONLAKE_DAC_P2_FAST 5 + +/* LVDS single-channel 120Mhz refclk */ +#define IRONLAKE_LVDS_S_N_MIN 1 +#define IRONLAKE_LVDS_S_N_MAX 3 +#define IRONLAKE_LVDS_S_M_MIN 79 +#define IRONLAKE_LVDS_S_M_MAX 118 +#define IRONLAKE_LVDS_S_P_MIN 28 +#define IRONLAKE_LVDS_S_P_MAX 112 +#define IRONLAKE_LVDS_S_P1_MIN 2 +#define IRONLAKE_LVDS_S_P1_MAX 8 +#define IRONLAKE_LVDS_S_P2_SLOW 14 +#define IRONLAKE_LVDS_S_P2_FAST 14 + +/* LVDS dual-channel 120Mhz refclk */ +#define IRONLAKE_LVDS_D_N_MIN 1 +#define IRONLAKE_LVDS_D_N_MAX 3 +#define IRONLAKE_LVDS_D_M_MIN 79 +#define IRONLAKE_LVDS_D_M_MAX 127 +#define IRONLAKE_LVDS_D_P_MIN 14 +#define IRONLAKE_LVDS_D_P_MAX 56 +#define IRONLAKE_LVDS_D_P1_MIN 2 +#define IRONLAKE_LVDS_D_P1_MAX 8 +#define IRONLAKE_LVDS_D_P2_SLOW 7 +#define IRONLAKE_LVDS_D_P2_FAST 7 + +/* LVDS single-channel 100Mhz refclk */ +#define IRONLAKE_LVDS_S_SSC_N_MIN 1 +#define IRONLAKE_LVDS_S_SSC_N_MAX 2 +#define IRONLAKE_LVDS_S_SSC_M_MIN 79 +#define IRONLAKE_LVDS_S_SSC_M_MAX 126 +#define IRONLAKE_LVDS_S_SSC_P_MIN 28 +#define IRONLAKE_LVDS_S_SSC_P_MAX 112 +#define IRONLAKE_LVDS_S_SSC_P1_MIN 2 +#define IRONLAKE_LVDS_S_SSC_P1_MAX 8 +#define IRONLAKE_LVDS_S_SSC_P2_SLOW 14 +#define IRONLAKE_LVDS_S_SSC_P2_FAST 14 + +/* LVDS dual-channel 100Mhz refclk */ +#define IRONLAKE_LVDS_D_SSC_N_MIN 1 +#define IRONLAKE_LVDS_D_SSC_N_MAX 3 +#define IRONLAKE_LVDS_D_SSC_M_MIN 79 +#define IRONLAKE_LVDS_D_SSC_M_MAX 126 +#define IRONLAKE_LVDS_D_SSC_P_MIN 14 +#define IRONLAKE_LVDS_D_SSC_P_MAX 42 +#define IRONLAKE_LVDS_D_SSC_P1_MIN 2 +#define IRONLAKE_LVDS_D_SSC_P1_MAX 6 +#define IRONLAKE_LVDS_D_SSC_P2_SLOW 7 +#define IRONLAKE_LVDS_D_SSC_P2_FAST 7 + +/* DisplayPort */ +#define IRONLAKE_DP_N_MIN 1 +#define IRONLAKE_DP_N_MAX 2 +#define IRONLAKE_DP_M_MIN 81 +#define IRONLAKE_DP_M_MAX 90 +#define IRONLAKE_DP_P_MIN 10 +#define IRONLAKE_DP_P_MAX 20 +#define IRONLAKE_DP_P2_FAST 10 +#define IRONLAKE_DP_P2_SLOW 10 +#define IRONLAKE_DP_P2_LIMIT 0 +#define IRONLAKE_DP_P1_MIN 1 +#define IRONLAKE_DP_P1_MAX 2 static bool intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, int target, int refclk, intel_clock_t *best_clock); static bool -intel_find_best_reduced_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, - int target, int refclk, intel_clock_t *best_clock); -static bool intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, int target, int refclk, intel_clock_t *best_clock); -static bool -intel_igdng_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, - int target, int refclk, intel_clock_t *best_clock); static bool intel_find_pll_g4x_dp(const intel_limit_t *, struct drm_crtc *crtc, int target, int refclk, intel_clock_t *best_clock); static bool -intel_find_pll_igdng_dp(const intel_limit_t *, struct drm_crtc *crtc, - int target, int refclk, intel_clock_t *best_clock); +intel_find_pll_ironlake_dp(const intel_limit_t *, struct drm_crtc *crtc, + int target, int refclk, intel_clock_t *best_clock); static const intel_limit_t intel_limits_i8xx_dvo = { .dot = { .min = I8XX_DOT_MIN, .max = I8XX_DOT_MAX }, @@ -294,7 +347,6 @@ .p2 = { .dot_limit = I8XX_P2_SLOW_LIMIT, .p2_slow = I8XX_P2_SLOW, .p2_fast = I8XX_P2_FAST }, .find_pll = intel_find_best_PLL, - .find_reduced_pll = intel_find_best_reduced_PLL, }; static const intel_limit_t intel_limits_i8xx_lvds = { @@ -309,7 +361,6 @@ .p2 = { .dot_limit = I8XX_P2_SLOW_LIMIT, .p2_slow = I8XX_P2_LVDS_SLOW, .p2_fast = I8XX_P2_LVDS_FAST }, .find_pll = intel_find_best_PLL, - .find_reduced_pll = intel_find_best_reduced_PLL, }; static const intel_limit_t intel_limits_i9xx_sdvo = { @@ -324,7 +375,6 @@ .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT, .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST }, .find_pll = intel_find_best_PLL, - .find_reduced_pll = intel_find_best_reduced_PLL, }; static const intel_limit_t intel_limits_i9xx_lvds = { @@ -342,7 +392,6 @@ .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT, .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_FAST }, .find_pll = intel_find_best_PLL, - .find_reduced_pll = intel_find_best_reduced_PLL, }; /* below parameter and function is for G4X Chipset Family*/ @@ -360,7 +409,6 @@ .p2_fast = G4X_P2_SDVO_FAST }, .find_pll = intel_g4x_find_best_PLL, - .find_reduced_pll = intel_g4x_find_best_PLL, }; static const intel_limit_t intel_limits_g4x_hdmi = { @@ -377,7 +425,6 @@ .p2_fast = G4X_P2_HDMI_DAC_FAST }, .find_pll = intel_g4x_find_best_PLL, - .find_reduced_pll = intel_g4x_find_best_PLL, }; static const intel_limit_t intel_limits_g4x_single_channel_lvds = { @@ -402,7 +449,6 @@ .p2_fast = G4X_P2_SINGLE_CHANNEL_LVDS_FAST }, .find_pll = intel_g4x_find_best_PLL, - .find_reduced_pll = intel_g4x_find_best_PLL, }; static const intel_limit_t intel_limits_g4x_dual_channel_lvds = { @@ -427,7 +473,6 @@ .p2_fast = G4X_P2_DUAL_CHANNEL_LVDS_FAST }, .find_pll = intel_g4x_find_best_PLL, - .find_reduced_pll = intel_g4x_find_best_PLL, }; static const intel_limit_t intel_limits_g4x_display_port = { @@ -453,74 +498,162 @@ .find_pll = intel_find_pll_g4x_dp, }; -static const intel_limit_t intel_limits_igd_sdvo = { +static const intel_limit_t intel_limits_pineview_sdvo = { .dot = { .min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX}, - .vco = { .min = IGD_VCO_MIN, .max = IGD_VCO_MAX }, - .n = { .min = IGD_N_MIN, .max = IGD_N_MAX }, - .m = { .min = IGD_M_MIN, .max = IGD_M_MAX }, - .m1 = { .min = IGD_M1_MIN, .max = IGD_M1_MAX }, - .m2 = { .min = IGD_M2_MIN, .max = IGD_M2_MAX }, + .vco = { .min = PINEVIEW_VCO_MIN, .max = PINEVIEW_VCO_MAX }, + .n = { .min = PINEVIEW_N_MIN, .max = PINEVIEW_N_MAX }, + .m = { .min = PINEVIEW_M_MIN, .max = PINEVIEW_M_MAX }, + .m1 = { .min = PINEVIEW_M1_MIN, .max = PINEVIEW_M1_MAX }, + .m2 = { .min = PINEVIEW_M2_MIN, .max = PINEVIEW_M2_MAX }, .p = { .min = I9XX_P_SDVO_DAC_MIN, .max = I9XX_P_SDVO_DAC_MAX }, .p1 = { .min = I9XX_P1_MIN, .max = I9XX_P1_MAX }, .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT, .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST }, .find_pll = intel_find_best_PLL, - .find_reduced_pll = intel_find_best_reduced_PLL, }; -static const intel_limit_t intel_limits_igd_lvds = { +static const intel_limit_t intel_limits_pineview_lvds = { .dot = { .min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX }, - .vco = { .min = IGD_VCO_MIN, .max = IGD_VCO_MAX }, - .n = { .min = IGD_N_MIN, .max = IGD_N_MAX }, - .m = { .min = IGD_M_MIN, .max = IGD_M_MAX }, - .m1 = { .min = IGD_M1_MIN, .max = IGD_M1_MAX }, - .m2 = { .min = IGD_M2_MIN, .max = IGD_M2_MAX }, - .p = { .min = IGD_P_LVDS_MIN, .max = IGD_P_LVDS_MAX }, + .vco = { .min = PINEVIEW_VCO_MIN, .max = PINEVIEW_VCO_MAX }, + .n = { .min = PINEVIEW_N_MIN, .max = PINEVIEW_N_MAX }, + .m = { .min = PINEVIEW_M_MIN, .max = PINEVIEW_M_MAX }, + .m1 = { .min = PINEVIEW_M1_MIN, .max = PINEVIEW_M1_MAX }, + .m2 = { .min = PINEVIEW_M2_MIN, .max = PINEVIEW_M2_MAX }, + .p = { .min = PINEVIEW_P_LVDS_MIN, .max = PINEVIEW_P_LVDS_MAX }, .p1 = { .min = I9XX_P1_MIN, .max = I9XX_P1_MAX }, - /* IGD only supports single-channel mode. */ + /* Pineview only supports single-channel mode. */ .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT, .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_SLOW }, .find_pll = intel_find_best_PLL, - .find_reduced_pll = intel_find_best_reduced_PLL, }; -static const intel_limit_t intel_limits_igdng_sdvo = { - .dot = { .min = IGDNG_DOT_MIN, .max = IGDNG_DOT_MAX }, - .vco = { .min = IGDNG_VCO_MIN, .max = IGDNG_VCO_MAX }, - .n = { .min = IGDNG_N_MIN, .max = IGDNG_N_MAX }, - .m = { .min = IGDNG_M_MIN, .max = IGDNG_M_MAX }, - .m1 = { .min = IGDNG_M1_MIN, .max = IGDNG_M1_MAX }, - .m2 = { .min = IGDNG_M2_MIN, .max = IGDNG_M2_MAX }, - .p = { .min = IGDNG_P_SDVO_DAC_MIN, .max = IGDNG_P_SDVO_DAC_MAX }, - .p1 = { .min = IGDNG_P1_MIN, .max = IGDNG_P1_MAX }, - .p2 = { .dot_limit = IGDNG_P2_DOT_LIMIT, - .p2_slow = IGDNG_P2_SDVO_DAC_SLOW, - .p2_fast = IGDNG_P2_SDVO_DAC_FAST }, - .find_pll = intel_igdng_find_best_PLL, +static const intel_limit_t intel_limits_ironlake_dac = { + .dot = { .min = IRONLAKE_DOT_MIN, .max = IRONLAKE_DOT_MAX }, + .vco = { .min = IRONLAKE_VCO_MIN, .max = IRONLAKE_VCO_MAX }, + .n = { .min = IRONLAKE_DAC_N_MIN, .max = IRONLAKE_DAC_N_MAX }, + .m = { .min = IRONLAKE_DAC_M_MIN, .max = IRONLAKE_DAC_M_MAX }, + .m1 = { .min = IRONLAKE_M1_MIN, .max = IRONLAKE_M1_MAX }, + .m2 = { .min = IRONLAKE_M2_MIN, .max = IRONLAKE_M2_MAX }, + .p = { .min = IRONLAKE_DAC_P_MIN, .max = IRONLAKE_DAC_P_MAX }, + .p1 = { .min = IRONLAKE_DAC_P1_MIN, .max = IRONLAKE_DAC_P1_MAX }, + .p2 = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, + .p2_slow = IRONLAKE_DAC_P2_SLOW, + .p2_fast = IRONLAKE_DAC_P2_FAST }, + .find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_single_lvds = { + .dot = { .min = IRONLAKE_DOT_MIN, .max = IRONLAKE_DOT_MAX }, + .vco = { .min = IRONLAKE_VCO_MIN, .max = IRONLAKE_VCO_MAX }, + .n = { .min = IRONLAKE_LVDS_S_N_MIN, .max = IRONLAKE_LVDS_S_N_MAX }, + .m = { .min = IRONLAKE_LVDS_S_M_MIN, .max = IRONLAKE_LVDS_S_M_MAX }, + .m1 = { .min = IRONLAKE_M1_MIN, .max = IRONLAKE_M1_MAX }, + .m2 = { .min = IRONLAKE_M2_MIN, .max = IRONLAKE_M2_MAX }, + .p = { .min = IRONLAKE_LVDS_S_P_MIN, .max = IRONLAKE_LVDS_S_P_MAX }, + .p1 = { .min = IRONLAKE_LVDS_S_P1_MIN, .max = IRONLAKE_LVDS_S_P1_MAX }, + .p2 = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, + .p2_slow = IRONLAKE_LVDS_S_P2_SLOW, + .p2_fast = IRONLAKE_LVDS_S_P2_FAST }, + .find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_dual_lvds = { + .dot = { .min = IRONLAKE_DOT_MIN, .max = IRONLAKE_DOT_MAX }, + .vco = { .min = IRONLAKE_VCO_MIN, .max = IRONLAKE_VCO_MAX }, + .n = { .min = IRONLAKE_LVDS_D_N_MIN, .max = IRONLAKE_LVDS_D_N_MAX }, + .m = { .min = IRONLAKE_LVDS_D_M_MIN, .max = IRONLAKE_LVDS_D_M_MAX }, + .m1 = { .min = IRONLAKE_M1_MIN, .max = IRONLAKE_M1_MAX }, + .m2 = { .min = IRONLAKE_M2_MIN, .max = IRONLAKE_M2_MAX }, + .p = { .min = IRONLAKE_LVDS_D_P_MIN, .max = IRONLAKE_LVDS_D_P_MAX }, + .p1 = { .min = IRONLAKE_LVDS_D_P1_MIN, .max = IRONLAKE_LVDS_D_P1_MAX }, + .p2 = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, + .p2_slow = IRONLAKE_LVDS_D_P2_SLOW, + .p2_fast = IRONLAKE_LVDS_D_P2_FAST }, + .find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_single_lvds_100m = { + .dot = { .min = IRONLAKE_DOT_MIN, .max = IRONLAKE_DOT_MAX }, + .vco = { .min = IRONLAKE_VCO_MIN, .max = IRONLAKE_VCO_MAX }, + .n = { .min = IRONLAKE_LVDS_S_SSC_N_MIN, .max = IRONLAKE_LVDS_S_SSC_N_MAX }, + .m = { .min = IRONLAKE_LVDS_S_SSC_M_MIN, .max = IRONLAKE_LVDS_S_SSC_M_MAX }, + .m1 = { .min = IRONLAKE_M1_MIN, .max = IRONLAKE_M1_MAX }, + .m2 = { .min = IRONLAKE_M2_MIN, .max = IRONLAKE_M2_MAX }, + .p = { .min = IRONLAKE_LVDS_S_SSC_P_MIN, .max = IRONLAKE_LVDS_S_SSC_P_MAX }, + .p1 = { .min = IRONLAKE_LVDS_S_SSC_P1_MIN,.max = IRONLAKE_LVDS_S_SSC_P1_MAX }, + .p2 = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, + .p2_slow = IRONLAKE_LVDS_S_SSC_P2_SLOW, + .p2_fast = IRONLAKE_LVDS_S_SSC_P2_FAST }, + .find_pll = intel_g4x_find_best_PLL, +}; + +static const intel_limit_t intel_limits_ironlake_dual_lvds_100m = { + .dot = { .min = IRONLAKE_DOT_MIN, .max = IRONLAKE_DOT_MAX }, + .vco = { .min = IRONLAKE_VCO_MIN, .max = IRONLAKE_VCO_MAX }, + .n = { .min = IRONLAKE_LVDS_D_SSC_N_MIN, .max = IRONLAKE_LVDS_D_SSC_N_MAX }, + .m = { .min = IRONLAKE_LVDS_D_SSC_M_MIN, .max = IRONLAKE_LVDS_D_SSC_M_MAX }, + .m1 = { .min = IRONLAKE_M1_MIN, .max = IRONLAKE_M1_MAX }, + .m2 = { .min = IRONLAKE_M2_MIN, .max = IRONLAKE_M2_MAX }, + .p = { .min = IRONLAKE_LVDS_D_SSC_P_MIN, .max = IRONLAKE_LVDS_D_SSC_P_MAX }, + .p1 = { .min = IRONLAKE_LVDS_D_SSC_P1_MIN,.max = IRONLAKE_LVDS_D_SSC_P1_MAX }, + .p2 = { .dot_limit = IRONLAKE_P2_DOT_LIMIT, + .p2_slow = IRONLAKE_LVDS_D_SSC_P2_SLOW, + .p2_fast = IRONLAKE_LVDS_D_SSC_P2_FAST }, + .find_pll = intel_g4x_find_best_PLL, }; -static const intel_limit_t intel_limits_igdng_lvds = { - .dot = { .min = IGDNG_DOT_MIN, .max = IGDNG_DOT_MAX }, - .vco = { .min = IGDNG_VCO_MIN, .max = IGDNG_VCO_MAX }, - .n = { .min = IGDNG_N_MIN, .max = IGDNG_N_MAX }, - .m = { .min = IGDNG_M_MIN, .max = IGDNG_M_MAX }, - .m1 = { .min = IGDNG_M1_MIN, .max = IGDNG_M1_MAX }, - .m2 = { .min = IGDNG_M2_MIN, .max = IGDNG_M2_MAX }, - .p = { .min = IGDNG_P_LVDS_MIN, .max = IGDNG_P_LVDS_MAX }, - .p1 = { .min = IGDNG_P1_MIN, .max = IGDNG_P1_MAX }, - .p2 = { .dot_limit = IGDNG_P2_DOT_LIMIT, - .p2_slow = IGDNG_P2_LVDS_SLOW, - .p2_fast = IGDNG_P2_LVDS_FAST }, - .find_pll = intel_igdng_find_best_PLL, +static const intel_limit_t intel_limits_ironlake_display_port = { + .dot = { .min = IRONLAKE_DOT_MIN, + .max = IRONLAKE_DOT_MAX }, + .vco = { .min = IRONLAKE_VCO_MIN, + .max = IRONLAKE_VCO_MAX}, + .n = { .min = IRONLAKE_DP_N_MIN, + .max = IRONLAKE_DP_N_MAX }, + .m = { .min = IRONLAKE_DP_M_MIN, + .max = IRONLAKE_DP_M_MAX }, + .m1 = { .min = IRONLAKE_M1_MIN, + .max = IRONLAKE_M1_MAX }, + .m2 = { .min = IRONLAKE_M2_MIN, + .max = IRONLAKE_M2_MAX }, + .p = { .min = IRONLAKE_DP_P_MIN, + .max = IRONLAKE_DP_P_MAX }, + .p1 = { .min = IRONLAKE_DP_P1_MIN, + .max = IRONLAKE_DP_P1_MAX}, + .p2 = { .dot_limit = IRONLAKE_DP_P2_LIMIT, + .p2_slow = IRONLAKE_DP_P2_SLOW, + .p2_fast = IRONLAKE_DP_P2_FAST }, + .find_pll = intel_find_pll_ironlake_dp, }; -static const intel_limit_t *intel_igdng_limit(struct drm_crtc *crtc) +static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc) { + struct drm_device *dev = crtc->dev; + struct drm_i915_private *dev_priv = dev->dev_private; const intel_limit_t *limit; - if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) - limit = &intel_limits_igdng_lvds; + int refclk = 120; + + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { + if (dev_priv->lvds_use_ssc && dev_priv->lvds_ssc_freq == 100) + refclk = 100; + + if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == + LVDS_CLKB_POWER_UP) { + /* LVDS dual channel */ + if (refclk == 100) + limit = &intel_limits_ironlake_dual_lvds_100m; + else + limit = &intel_limits_ironlake_dual_lvds; + } else { + if (refclk == 100) + limit = &intel_limits_ironlake_single_lvds_100m; + else + limit = &intel_limits_ironlake_single_lvds; + } + } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) || + HAS_eDP) + limit = &intel_limits_ironlake_display_port; else - limit = &intel_limits_igdng_sdvo; + limit = &intel_limits_ironlake_dac; return limit; } @@ -557,20 +690,20 @@ struct drm_device *dev = crtc->dev; const intel_limit_t *limit; - if (IS_IGDNG(dev)) - limit = intel_igdng_limit(crtc); + if (HAS_PCH_SPLIT(dev)) + limit = intel_ironlake_limit(crtc); else if (IS_G4X(dev)) { limit = intel_g4x_limit(crtc); - } else if (IS_I9XX(dev) && !IS_IGD(dev)) { + } else if (IS_I9XX(dev) && !IS_PINEVIEW(dev)) { if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) limit = &intel_limits_i9xx_lvds; else limit = &intel_limits_i9xx_sdvo; - } else if (IS_IGD(dev)) { + } else if (IS_PINEVIEW(dev)) { if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) - limit = &intel_limits_igd_lvds; + limit = &intel_limits_pineview_lvds; else - limit = &intel_limits_igd_sdvo; + limit = &intel_limits_pineview_sdvo; } else { if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) limit = &intel_limits_i8xx_lvds; @@ -580,8 +713,8 @@ return limit; } -/* m1 is reserved as 0 in IGD, n is a ring counter */ -static void igd_clock(int refclk, intel_clock_t *clock) +/* m1 is reserved as 0 in Pineview, n is a ring counter */ +static void pineview_clock(int refclk, intel_clock_t *clock) { clock->m = clock->m2 + 2; clock->p = clock->p1 * clock->p2; @@ -591,8 +724,8 @@ static void intel_clock(struct drm_device *dev, int refclk, intel_clock_t *clock) { - if (IS_IGD(dev)) { - igd_clock(refclk, clock); + if (IS_PINEVIEW(dev)) { + pineview_clock(refclk, clock); return; } clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2); @@ -657,7 +790,7 @@ INTELPllInvalid ("m2 out of range\n"); if (clock->m1 < limit->m1.min || limit->m1.max < clock->m1) INTELPllInvalid ("m1 out of range\n"); - if (clock->m1 <= clock->m2 && !IS_IGD(dev)) + if (clock->m1 <= clock->m2 && !IS_PINEVIEW(dev)) INTELPllInvalid ("m1 <= m2\n"); if (clock->m < limit->m.min || limit->m.max < clock->m) INTELPllInvalid ("m out of range\n"); @@ -706,16 +839,17 @@ memset (best_clock, 0, sizeof (*best_clock)); - for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) { - for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; - clock.m1++) { - for (clock.m2 = limit->m2.min; - clock.m2 <= limit->m2.max; clock.m2++) { - /* m1 is always 0 in IGD */ - if (clock.m2 >= clock.m1 && !IS_IGD(dev)) - break; - for (clock.n = limit->n.min; - clock.n <= limit->n.max; clock.n++) { + for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; + clock.m1++) { + for (clock.m2 = limit->m2.min; + clock.m2 <= limit->m2.max; clock.m2++) { + /* m1 is always 0 in Pineview */ + if (clock.m2 >= clock.m1 && !IS_PINEVIEW(dev)) + break; + for (clock.n = limit->n.min; + clock.n <= limit->n.max; clock.n++) { + for (clock.p1 = limit->p1.min; + clock.p1 <= limit->p1.max; clock.p1++) { int this_err; intel_clock(dev, refclk, &clock); @@ -736,46 +870,6 @@ return (err != target); } - -static bool -intel_find_best_reduced_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, - int target, int refclk, intel_clock_t *best_clock) - -{ - struct drm_device *dev = crtc->dev; - intel_clock_t clock; - int err = target; - bool found = false; - - memcpy(&clock, best_clock, sizeof(intel_clock_t)); - - for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) { - for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max; clock.m2++) { - /* m1 is always 0 in IGD */ - if (clock.m2 >= clock.m1 && !IS_IGD(dev)) - break; - for (clock.n = limit->n.min; clock.n <= limit->n.max; - clock.n++) { - int this_err; - - intel_clock(dev, refclk, &clock); - - if (!intel_PLL_is_valid(crtc, &clock)) - continue; - - this_err = abs(clock.dot - target); - if (this_err < err) { - *best_clock = clock; - err = this_err; - found = true; - } - } - } - } - - return found; -} - static bool intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, int target, int refclk, intel_clock_t *best_clock) @@ -790,7 +884,13 @@ found = false; if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { - if ((I915_READ(LVDS) & LVDS_CLKB_POWER_MASK) == + int lvds_reg; + + if (IS_IRONLAKE(dev)) + lvds_reg = PCH_LVDS; + else + lvds_reg = LVDS; + if ((I915_READ(lvds_reg) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP) clock.p2 = limit->p2.p2_fast; else @@ -833,11 +933,16 @@ } static bool -intel_find_pll_igdng_dp(const intel_limit_t *limit, struct drm_crtc *crtc, - int target, int refclk, intel_clock_t *best_clock) +intel_find_pll_ironlake_dp(const intel_limit_t *limit, struct drm_crtc *crtc, + int target, int refclk, intel_clock_t *best_clock) { struct drm_device *dev = crtc->dev; intel_clock_t clock; + + /* return directly when it is eDP */ + if (HAS_eDP) + return true; + if (target < 200000) { clock.n = 1; clock.p1 = 2; @@ -856,68 +961,6 @@ return true; } -static bool -intel_igdng_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc, - int target, int refclk, intel_clock_t *best_clock) -{ - struct drm_device *dev = crtc->dev; - struct drm_i915_private *dev_priv = dev->dev_private; - intel_clock_t clock; - int err_most = 47; - int err_min = 10000; - - /* eDP has only 2 clock choice, no n/m/p setting */ - if (HAS_eDP) - return true; - - if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) - return intel_find_pll_igdng_dp(limit, crtc, target, - refclk, best_clock); - - if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { - if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == - LVDS_CLKB_POWER_UP) - clock.p2 = limit->p2.p2_fast; - else - clock.p2 = limit->p2.p2_slow; - } else { - if (target < limit->p2.dot_limit) - clock.p2 = limit->p2.p2_slow; - else - clock.p2 = limit->p2.p2_fast; - } - - memset(best_clock, 0, sizeof(*best_clock)); - for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) { - /* based on hardware requriment prefer smaller n to precision */ - for (clock.n = limit->n.min; clock.n <= limit->n.max; clock.n++) { - /* based on hardware requirment prefere larger m1,m2 */ - for (clock.m1 = limit->m1.max; - clock.m1 >= limit->m1.min; clock.m1--) { - for (clock.m2 = limit->m2.max; - clock.m2 >= limit->m2.min; clock.m2--) { - int this_err; - - intel_clock(dev, refclk, &clock); - if (!intel_PLL_is_valid(crtc, &clock)) - continue; - this_err = abs((10000 - (target*10000/clock.dot))); - if (this_err < err_most) { - *best_clock = clock; - /* found on first matching */ - goto out; - } else if (this_err < err_min) { - *best_clock = clock; - err_min = this_err; - } - } - } - } - } -out: - return true; -} - /* DisplayPort has only two frequencies, 162MHz and 270MHz */ static bool intel_find_pll_g4x_dp(const intel_limit_t *limit, struct drm_crtc *crtc, @@ -949,7 +992,7 @@ intel_wait_for_vblank(struct drm_device *dev) { /* Wait for 20ms, i.e. one cycle at 50hz. */ - mdelay(20); + msleep(20); } /* Parameters have changed, update FBC info */ @@ -988,13 +1031,15 @@ /* enable it... */ fbc_ctl = FBC_CTL_EN | FBC_CTL_PERIODIC; + if (IS_I945GM(dev)) + fbc_ctl |= FBC_C3_IDLE; /* 945 needs special SR handling */ fbc_ctl |= (dev_priv->cfb_pitch & 0xff) << FBC_CTL_STRIDE_SHIFT; fbc_ctl |= (interval & 0x2fff) << FBC_CTL_INTERVAL_SHIFT; if (obj_priv->tiling_mode != I915_TILING_NONE) fbc_ctl |= dev_priv->cfb_fence; I915_WRITE(FBC_CONTROL, fbc_ctl); - DRM_DEBUG("enabled FBC, pitch %ld, yoff %d, plane %d, ", + DRM_DEBUG_KMS("enabled FBC, pitch %ld, yoff %d, plane %d, ", dev_priv->cfb_pitch, crtc->y, dev_priv->cfb_plane); } @@ -1017,7 +1062,7 @@ intel_wait_for_vblank(dev); - DRM_DEBUG("disabled FBC\n"); + DRM_DEBUG_KMS("disabled FBC\n"); } static bool i8xx_fbc_enabled(struct drm_crtc *crtc) @@ -1062,7 +1107,7 @@ /* enable it... */ I915_WRITE(DPFC_CONTROL, I915_READ(DPFC_CONTROL) | DPFC_CTL_EN); - DRM_DEBUG("enabled fbc on plane %d\n", intel_crtc->plane); + DRM_DEBUG_KMS("enabled fbc on plane %d\n", intel_crtc->plane); } void g4x_disable_fbc(struct drm_device *dev) @@ -1076,7 +1121,7 @@ I915_WRITE(DPFC_CONTROL, dpfc_ctl); intel_wait_for_vblank(dev); - DRM_DEBUG("disabled FBC\n"); + DRM_DEBUG_KMS("disabled FBC\n"); } static bool g4x_fbc_enabled(struct drm_crtc *crtc) @@ -1141,25 +1186,27 @@ * - going to an unsupported config (interlace, pixel multiply, etc.) */ if (intel_fb->obj->size > dev_priv->cfb_size) { - DRM_DEBUG("framebuffer too large, disabling compression\n"); + DRM_DEBUG_KMS("framebuffer too large, disabling " + "compression\n"); goto out_disable; } if ((mode->flags & DRM_MODE_FLAG_INTERLACE) || (mode->flags & DRM_MODE_FLAG_DBLSCAN)) { - DRM_DEBUG("mode incompatible with compression, disabling\n"); + DRM_DEBUG_KMS("mode incompatible with compression, " + "disabling\n"); goto out_disable; } if ((mode->hdisplay > 2048) || (mode->vdisplay > 1536)) { - DRM_DEBUG("mode too large for compression, disabling\n"); + DRM_DEBUG_KMS("mode too large for compression, disabling\n"); goto out_disable; } if ((IS_I915GM(dev) || IS_I945GM(dev)) && plane != 0) { - DRM_DEBUG("plane not 0, disabling compression\n"); + DRM_DEBUG_KMS("plane not 0, disabling compression\n"); goto out_disable; } if (obj_priv->tiling_mode != I915_TILING_X) { - DRM_DEBUG("framebuffer not tiled, disabling compression\n"); + DRM_DEBUG_KMS("framebuffer not tiled, disabling compression\n"); goto out_disable; } @@ -1181,13 +1228,57 @@ return; out_disable: - DRM_DEBUG("unsupported config, disabling FBC\n"); + DRM_DEBUG_KMS("unsupported config, disabling FBC\n"); /* Multiple disables should be harmless */ if (dev_priv->display.fbc_enabled(crtc)) dev_priv->display.disable_fbc(dev); } static int +intel_pin_and_fence_fb_obj(struct drm_device *dev, struct drm_gem_object *obj) +{ + struct drm_i915_gem_object *obj_priv = obj->driver_private; + u32 alignment; + int ret; + + switch (obj_priv->tiling_mode) { + case I915_TILING_NONE: + alignment = 64 * 1024; + break; + case I915_TILING_X: + /* pin() will align the object as required by fence */ + alignment = 0; + break; + case I915_TILING_Y: + /* FIXME: Is this true? */ + DRM_ERROR("Y tiled not allowed for scan out buffers\n"); + return -EINVAL; + default: + BUG(); + } + + ret = i915_gem_object_pin(obj, alignment); + if (ret != 0) + return ret; + + /* Install a fence for tiled scan-out. Pre-i965 always needs a + * fence, whereas 965+ only requires a fence if using + * framebuffer compression. For simplicity, we always install + * a fence as the cost is not that onerous. + */ + if (obj_priv->fence_reg == I915_FENCE_REG_NONE && + obj_priv->tiling_mode != I915_TILING_NONE) { + ret = i915_gem_object_get_fence_reg(obj); + if (ret != 0) { + i915_gem_object_unpin(obj); + return ret; + } + } + + return 0; +} + +static int intel_pipe_set_base(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb) { @@ -1206,12 +1297,12 @@ int dspstride = (plane == 0) ? DSPASTRIDE : DSPBSTRIDE; int dsptileoff = (plane == 0 ? DSPATILEOFF : DSPBTILEOFF); int dspcntr_reg = (plane == 0) ? DSPACNTR : DSPBCNTR; - u32 dspcntr, alignment; + u32 dspcntr; int ret; /* no fb bound */ if (!crtc->fb) { - DRM_DEBUG("No FB bound\n"); + DRM_DEBUG_KMS("No FB bound\n"); return 0; } @@ -1228,50 +1319,20 @@ obj = intel_fb->obj; obj_priv = obj->driver_private; - switch (obj_priv->tiling_mode) { - case I915_TILING_NONE: - alignment = 64 * 1024; - break; - case I915_TILING_X: - /* pin() will align the object as required by fence */ - alignment = 0; - break; - case I915_TILING_Y: - /* FIXME: Is this true? */ - DRM_ERROR("Y tiled not allowed for scan out buffers\n"); - return -EINVAL; - default: - BUG(); - } - mutex_lock(&dev->struct_mutex); - ret = i915_gem_object_pin(obj, alignment); + ret = intel_pin_and_fence_fb_obj(dev, obj); if (ret != 0) { mutex_unlock(&dev->struct_mutex); return ret; } - ret = i915_gem_object_set_to_gtt_domain(obj, 1); + ret = i915_gem_object_set_to_display_plane(obj); if (ret != 0) { i915_gem_object_unpin(obj); mutex_unlock(&dev->struct_mutex); return ret; } - /* Install a fence for tiled scan-out. Pre-i965 always needs a fence, - * whereas 965+ only requires a fence if using framebuffer compression. - * For simplicity, we always install a fence as the cost is not that onerous. - */ - if (obj_priv->fence_reg == I915_FENCE_REG_NONE && - obj_priv->tiling_mode != I915_TILING_NONE) { - ret = i915_gem_object_get_fence_reg(obj); - if (ret != 0) { - i915_gem_object_unpin(obj); - mutex_unlock(&dev->struct_mutex); - return ret; - } - } - dspcntr = I915_READ(dspcntr_reg); /* Mask out pixel format bits in case we change it */ dspcntr &= ~DISPPLANE_PIXFORMAT_MASK; @@ -1287,7 +1348,10 @@ break; case 24: case 32: - dspcntr |= DISPPLANE_32BPP_NO_ALPHA; + if (crtc->fb->depth == 30) + dspcntr |= DISPPLANE_32BPP_30BIT_NO_ALPHA; + else + dspcntr |= DISPPLANE_32BPP_NO_ALPHA; break; default: DRM_ERROR("Unknown color depth\n"); @@ -1302,7 +1366,7 @@ dspcntr &= ~DISPPLANE_TILED; } - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) /* must disable */ dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE; @@ -1311,7 +1375,7 @@ Start = obj_priv->gtt_offset; Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8); - DRM_DEBUG("Writing base %08lX %08lX %d %d\n", Start, Offset, x, y); + DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d\n", Start, Offset, x, y); I915_WRITE(dspstride, crtc->fb->pitch); if (IS_I965G(dev)) { I915_WRITE(dspbase, Offset); @@ -1363,7 +1427,7 @@ u8 sr1; u32 vga_reg; - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) vga_reg = CPU_VGACNTRL; else vga_reg = VGACNTRL; @@ -1379,19 +1443,19 @@ I915_WRITE(vga_reg, VGA_DISP_DISABLE); } -static void igdng_disable_pll_edp (struct drm_crtc *crtc) +static void ironlake_disable_pll_edp (struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; u32 dpa_ctl; - DRM_DEBUG("\n"); + DRM_DEBUG_KMS("\n"); dpa_ctl = I915_READ(DP_A); dpa_ctl &= ~DP_PLL_ENABLE; I915_WRITE(DP_A, dpa_ctl); } -static void igdng_enable_pll_edp (struct drm_crtc *crtc) +static void ironlake_enable_pll_edp (struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; @@ -1404,13 +1468,13 @@ } -static void igdng_set_pll_edp (struct drm_crtc *crtc, int clock) +static void ironlake_set_pll_edp (struct drm_crtc *crtc, int clock) { struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; u32 dpa_ctl; - DRM_DEBUG("eDP PLL enable for clock %d\n", clock); + DRM_DEBUG_KMS("eDP PLL enable for clock %d\n", clock); dpa_ctl = I915_READ(DP_A); dpa_ctl &= ~DP_PLL_FREQ_MASK; @@ -1440,7 +1504,7 @@ udelay(500); } -static void igdng_crtc_dpms(struct drm_crtc *crtc, int mode) +static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode) { struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; @@ -1473,6 +1537,10 @@ int trans_vsync_reg = (pipe == 0) ? TRANS_VSYNC_A : TRANS_VSYNC_B; u32 temp; int tries = 5, j, n; + u32 pipe_bpc; + + temp = I915_READ(pipeconf_reg); + pipe_bpc = temp & PIPE_BPC_MASK; /* XXX: When our outputs are all unaware of DPMS modes other than off * and on, we should map those modes to DRM_MODE_DPMS_OFF in the CRTC. @@ -1481,10 +1549,19 @@ case DRM_MODE_DPMS_ON: case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: - DRM_DEBUG("crtc %d dpms on\n", pipe); + DRM_DEBUG_KMS("crtc %d dpms on\n", pipe); + + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { + temp = I915_READ(PCH_LVDS); + if ((temp & LVDS_PORT_EN) == 0) { + I915_WRITE(PCH_LVDS, temp | LVDS_PORT_EN); + POSTING_READ(PCH_LVDS); + } + } + if (HAS_eDP) { /* enable eDP PLL */ - igdng_enable_pll_edp(crtc); + ironlake_enable_pll_edp(crtc); } else { /* enable PCH DPLL */ temp = I915_READ(pch_dpll_reg); @@ -1495,13 +1572,19 @@ /* enable PCH FDI RX PLL, wait warmup plus DMI latency */ temp = I915_READ(fdi_rx_reg); + /* + * make the BPC in FDI Rx be consistent with that in + * pipeconf reg. + */ + temp &= ~(0x7 << 16); + temp |= (pipe_bpc << 11); I915_WRITE(fdi_rx_reg, temp | FDI_RX_PLL_ENABLE | FDI_SEL_PCDCLK | FDI_DP_PORT_WIDTH_X4); /* default 4 lanes */ I915_READ(fdi_rx_reg); udelay(200); - /* Enable CPU FDI TX PLL, always on for IGDNG */ + /* Enable CPU FDI TX PLL, always on for Ironlake */ temp = I915_READ(fdi_tx_reg); if ((temp & FDI_TX_PLL_ENABLE) == 0) { I915_WRITE(fdi_tx_reg, temp | FDI_TX_PLL_ENABLE); @@ -1568,12 +1651,13 @@ udelay(150); temp = I915_READ(fdi_rx_iir_reg); - DRM_DEBUG("FDI_RX_IIR 0x%x\n", temp); + DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); if ((temp & FDI_RX_BIT_LOCK) == 0) { for (j = 0; j < tries; j++) { temp = I915_READ(fdi_rx_iir_reg); - DRM_DEBUG("FDI_RX_IIR 0x%x\n", temp); + DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", + temp); if (temp & FDI_RX_BIT_LOCK) break; udelay(200); @@ -1582,11 +1666,11 @@ I915_WRITE(fdi_rx_iir_reg, temp | FDI_RX_BIT_LOCK); else - DRM_DEBUG("train 1 fail\n"); + DRM_DEBUG_KMS("train 1 fail\n"); } else { I915_WRITE(fdi_rx_iir_reg, temp | FDI_RX_BIT_LOCK); - DRM_DEBUG("train 1 ok 2!\n"); + DRM_DEBUG_KMS("train 1 ok 2!\n"); } temp = I915_READ(fdi_tx_reg); temp &= ~FDI_LINK_TRAIN_NONE; @@ -1601,12 +1685,13 @@ udelay(150); temp = I915_READ(fdi_rx_iir_reg); - DRM_DEBUG("FDI_RX_IIR 0x%x\n", temp); + DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp); if ((temp & FDI_RX_SYMBOL_LOCK) == 0) { for (j = 0; j < tries; j++) { temp = I915_READ(fdi_rx_iir_reg); - DRM_DEBUG("FDI_RX_IIR 0x%x\n", temp); + DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", + temp); if (temp & FDI_RX_SYMBOL_LOCK) break; udelay(200); @@ -1614,15 +1699,15 @@ if (j != tries) { I915_WRITE(fdi_rx_iir_reg, temp | FDI_RX_SYMBOL_LOCK); - DRM_DEBUG("train 2 ok 1!\n"); + DRM_DEBUG_KMS("train 2 ok 1!\n"); } else - DRM_DEBUG("train 2 fail\n"); + DRM_DEBUG_KMS("train 2 fail\n"); } else { I915_WRITE(fdi_rx_iir_reg, temp | FDI_RX_SYMBOL_LOCK); - DRM_DEBUG("train 2 ok 2!\n"); + DRM_DEBUG_KMS("train 2 ok 2!\n"); } - DRM_DEBUG("train done\n"); + DRM_DEBUG_KMS("train done\n"); /* set transcoder timing */ I915_WRITE(trans_htot_reg, I915_READ(cpu_htot_reg)); @@ -1635,6 +1720,12 @@ /* enable PCH transcoder */ temp = I915_READ(transconf_reg); + /* + * make the BPC in transcoder be consistent with + * that in pipeconf reg. + */ + temp &= ~PIPE_BPC_MASK; + temp |= pipe_bpc; I915_WRITE(transconf_reg, temp | TRANS_ENABLE); I915_READ(transconf_reg); @@ -1664,10 +1755,9 @@ break; case DRM_MODE_DPMS_OFF: - DRM_DEBUG("crtc %d dpms off\n", pipe); - - i915_disable_vga(dev); + DRM_DEBUG_KMS("crtc %d dpms off\n", pipe); + drm_vblank_off(dev, pipe); /* Disable display plane */ temp = I915_READ(dspcntr_reg); if ((temp & DISPLAY_PLANE_ENABLE) != 0) { @@ -1677,6 +1767,8 @@ I915_READ(dspbase_reg); } + i915_disable_vga(dev); + /* disable cpu pipe, disable after all planes disabled */ temp = I915_READ(pipeconf_reg); if ((temp & PIPEACONF_ENABLE) != 0) { @@ -1690,16 +1782,23 @@ udelay(500); continue; } else { - DRM_DEBUG("pipe %d off delay\n", pipe); + DRM_DEBUG_KMS("pipe %d off delay\n", + pipe); break; } } } else - DRM_DEBUG("crtc %d is disabled\n", pipe); + DRM_DEBUG_KMS("crtc %d is disabled\n", pipe); - if (HAS_eDP) { - igdng_disable_pll_edp(crtc); + udelay(100); + + /* Disable PF */ + temp = I915_READ(pf_ctl_reg); + if ((temp & PF_ENABLE) != 0) { + I915_WRITE(pf_ctl_reg, temp & ~PF_ENABLE); + I915_READ(pf_ctl_reg); } + I915_WRITE(pf_win_size, 0); /* disable CPU FDI tx and PCH FDI rx */ temp = I915_READ(fdi_tx_reg); @@ -1707,6 +1806,9 @@ I915_READ(fdi_tx_reg); temp = I915_READ(fdi_rx_reg); + /* BPC in FDI rx is consistent with that in pipeconf */ + temp &= ~(0x07 << 16); + temp |= (pipe_bpc << 11); I915_WRITE(fdi_rx_reg, temp & ~FDI_RX_ENABLE); I915_READ(fdi_rx_reg); @@ -1725,6 +1827,13 @@ udelay(100); + if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) { + temp = I915_READ(PCH_LVDS); + I915_WRITE(PCH_LVDS, temp & ~LVDS_PORT_EN); + I915_READ(PCH_LVDS); + udelay(100); + } + /* disable PCH transcoder */ temp = I915_READ(transconf_reg); if ((temp & TRANS_ENABLE) != 0) { @@ -1738,11 +1847,19 @@ udelay(500); continue; } else { - DRM_DEBUG("transcoder %d off delay\n", pipe); + DRM_DEBUG_KMS("transcoder %d off " + "delay\n", pipe); break; } } } + temp = I915_READ(transconf_reg); + /* BPC in transcoder is consistent with that in pipeconf */ + temp &= ~PIPE_BPC_MASK; + temp |= pipe_bpc; + I915_WRITE(transconf_reg, temp); + I915_READ(transconf_reg); + udelay(100); /* disable PCH DPLL */ temp = I915_READ(pch_dpll_reg); @@ -1751,14 +1868,20 @@ I915_READ(pch_dpll_reg); } - temp = I915_READ(fdi_rx_reg); - if ((temp & FDI_RX_PLL_ENABLE) != 0) { - temp &= ~FDI_SEL_PCDCLK; - temp &= ~FDI_RX_PLL_ENABLE; - I915_WRITE(fdi_rx_reg, temp); - I915_READ(fdi_rx_reg); + if (HAS_eDP) { + ironlake_disable_pll_edp(crtc); } + temp = I915_READ(fdi_rx_reg); + temp &= ~FDI_SEL_PCDCLK; + I915_WRITE(fdi_rx_reg, temp); + I915_READ(fdi_rx_reg); + + temp = I915_READ(fdi_rx_reg); + temp &= ~FDI_RX_PLL_ENABLE; + I915_WRITE(fdi_rx_reg, temp); + I915_READ(fdi_rx_reg); + /* Disable CPU FDI TX PLL */ temp = I915_READ(fdi_tx_reg); if ((temp & FDI_TX_PLL_ENABLE) != 0) { @@ -1767,20 +1890,43 @@ udelay(100); } - /* Disable PF */ - temp = I915_READ(pf_ctl_reg); - if ((temp & PF_ENABLE) != 0) { - I915_WRITE(pf_ctl_reg, temp & ~PF_ENABLE); - I915_READ(pf_ctl_reg); - } - I915_WRITE(pf_win_size, 0); - /* Wait for the clocks to turn off. */ - udelay(150); + udelay(100); break; } } +static void intel_crtc_dpms_overlay(struct intel_crtc *intel_crtc, bool enable) +{ + struct intel_overlay *overlay; + int ret; + + if (!enable && intel_crtc->overlay) { + overlay = intel_crtc->overlay; + mutex_lock(&overlay->dev->struct_mutex); + for (;;) { + ret = intel_overlay_switch_off(overlay); + if (ret == 0) + break; + + ret = intel_overlay_recover_from_interrupt(overlay, 0); + if (ret != 0) { + /* overlay doesn't react anymore. Usually + * results in a black screen and an unkillable + * X server. */ + BUG(); + overlay->hw_wedged = HW_WEDGED; + break; + } + } + mutex_unlock(&overlay->dev->struct_mutex); + } + /* Let userspace switch the overlay on again. In most cases userspace + * has to recompute where to put it anyway. */ + + return; +} + static void i9xx_crtc_dpms(struct drm_crtc *crtc, int mode) { struct drm_device *dev = crtc->dev; @@ -1839,12 +1985,14 @@ intel_update_fbc(crtc, &crtc->mode); /* Give the overlay scaler a chance to enable if it's on this pipe */ - //intel_crtc_dpms_video(crtc, true); TODO + intel_crtc_dpms_overlay(intel_crtc, true); break; case DRM_MODE_DPMS_OFF: intel_update_watermarks(dev); + /* Give the overlay scaler a chance to disable if it's on this pipe */ - //intel_crtc_dpms_video(crtc, FALSE); TODO + intel_crtc_dpms_overlay(intel_crtc, false); + drm_vblank_off(dev, pipe); if (dev_priv->cfb_plane == plane && dev_priv->display.disable_fbc) @@ -1963,7 +2111,7 @@ struct drm_display_mode *adjusted_mode) { struct drm_device *dev = crtc->dev; - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { /* FDI link clock is fixed at 2.7G */ if (mode->clock * 3 > 27000 * 4) return MODE_CLOCK_HIGH; @@ -2039,7 +2187,7 @@ * Return the pipe currently connected to the panel fitter, * or -1 if the panel fitter is not present or not in use */ -static int intel_panel_fitter_pipe (struct drm_device *dev) +int intel_panel_fitter_pipe (struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; u32 pfit_control; @@ -2083,9 +2231,8 @@ #define LINK_N 0x80000 static void -igdng_compute_m_n(int bits_per_pixel, int nlanes, - int pixel_clock, int link_clock, - struct fdi_m_n *m_n) +ironlake_compute_m_n(int bits_per_pixel, int nlanes, int pixel_clock, + int link_clock, struct fdi_m_n *m_n) { u64 temp; @@ -2113,34 +2260,34 @@ unsigned long cacheline_size; }; -/* IGD has different values for various configs */ -static struct intel_watermark_params igd_display_wm = { - IGD_DISPLAY_FIFO, - IGD_MAX_WM, - IGD_DFT_WM, - IGD_GUARD_WM, - IGD_FIFO_LINE_SIZE +/* Pineview has different values for various configs */ +static struct intel_watermark_params pineview_display_wm = { + PINEVIEW_DISPLAY_FIFO, + PINEVIEW_MAX_WM, + PINEVIEW_DFT_WM, + PINEVIEW_GUARD_WM, + PINEVIEW_FIFO_LINE_SIZE }; -static struct intel_watermark_params igd_display_hplloff_wm = { - IGD_DISPLAY_FIFO, - IGD_MAX_WM, - IGD_DFT_HPLLOFF_WM, - IGD_GUARD_WM, - IGD_FIFO_LINE_SIZE +static struct intel_watermark_params pineview_display_hplloff_wm = { + PINEVIEW_DISPLAY_FIFO, + PINEVIEW_MAX_WM, + PINEVIEW_DFT_HPLLOFF_WM, + PINEVIEW_GUARD_WM, + PINEVIEW_FIFO_LINE_SIZE }; -static struct intel_watermark_params igd_cursor_wm = { - IGD_CURSOR_FIFO, - IGD_CURSOR_MAX_WM, - IGD_CURSOR_DFT_WM, - IGD_CURSOR_GUARD_WM, - IGD_FIFO_LINE_SIZE, +static struct intel_watermark_params pineview_cursor_wm = { + PINEVIEW_CURSOR_FIFO, + PINEVIEW_CURSOR_MAX_WM, + PINEVIEW_CURSOR_DFT_WM, + PINEVIEW_CURSOR_GUARD_WM, + PINEVIEW_FIFO_LINE_SIZE, }; -static struct intel_watermark_params igd_cursor_hplloff_wm = { - IGD_CURSOR_FIFO, - IGD_CURSOR_MAX_WM, - IGD_CURSOR_DFT_WM, - IGD_CURSOR_GUARD_WM, - IGD_FIFO_LINE_SIZE +static struct intel_watermark_params pineview_cursor_hplloff_wm = { + PINEVIEW_CURSOR_FIFO, + PINEVIEW_CURSOR_MAX_WM, + PINEVIEW_CURSOR_DFT_WM, + PINEVIEW_CURSOR_GUARD_WM, + PINEVIEW_FIFO_LINE_SIZE }; static struct intel_watermark_params g4x_wm_info = { G4X_FIFO_SIZE, @@ -2213,11 +2360,11 @@ 1000; entries_required /= wm->cacheline_size; - DRM_DEBUG("FIFO entries required for mode: %d\n", entries_required); + DRM_DEBUG_KMS("FIFO entries required for mode: %d\n", entries_required); wm_size = wm->fifo_size - (entries_required + wm->guard_size); - DRM_DEBUG("FIFO watermark level: %d\n", wm_size); + DRM_DEBUG_KMS("FIFO watermark level: %d\n", wm_size); /* Don't promote wm_size to unsigned... */ if (wm_size > (long)wm->max_wm) @@ -2279,50 +2426,50 @@ return latency; } - DRM_DEBUG("Unknown FSB/MEM found, disable CxSR\n"); + DRM_DEBUG_KMS("Unknown FSB/MEM found, disable CxSR\n"); return NULL; } -static void igd_disable_cxsr(struct drm_device *dev) +static void pineview_disable_cxsr(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; u32 reg; /* deactivate cxsr */ reg = I915_READ(DSPFW3); - reg &= ~(IGD_SELF_REFRESH_EN); + reg &= ~(PINEVIEW_SELF_REFRESH_EN); I915_WRITE(DSPFW3, reg); DRM_INFO("Big FIFO is disabled\n"); } -static void igd_enable_cxsr(struct drm_device *dev, unsigned long clock, - int pixel_size) +static void pineview_enable_cxsr(struct drm_device *dev, unsigned long clock, + int pixel_size) { struct drm_i915_private *dev_priv = dev->dev_private; u32 reg; unsigned long wm; struct cxsr_latency *latency; - latency = intel_get_cxsr_latency(IS_IGDG(dev), dev_priv->fsb_freq, + latency = intel_get_cxsr_latency(IS_PINEVIEW_G(dev), dev_priv->fsb_freq, dev_priv->mem_freq); if (!latency) { - DRM_DEBUG("Unknown FSB/MEM found, disable CxSR\n"); - igd_disable_cxsr(dev); + DRM_DEBUG_KMS("Unknown FSB/MEM found, disable CxSR\n"); + pineview_disable_cxsr(dev); return; } /* Display SR */ - wm = intel_calculate_wm(clock, &igd_display_wm, pixel_size, + wm = intel_calculate_wm(clock, &pineview_display_wm, pixel_size, latency->display_sr); reg = I915_READ(DSPFW1); reg &= 0x7fffff; reg |= wm << 23; I915_WRITE(DSPFW1, reg); - DRM_DEBUG("DSPFW1 register is %x\n", reg); + DRM_DEBUG_KMS("DSPFW1 register is %x\n", reg); /* cursor SR */ - wm = intel_calculate_wm(clock, &igd_cursor_wm, pixel_size, + wm = intel_calculate_wm(clock, &pineview_cursor_wm, pixel_size, latency->cursor_sr); reg = I915_READ(DSPFW3); reg &= ~(0x3f << 24); @@ -2330,7 +2477,7 @@ I915_WRITE(DSPFW3, reg); /* Display HPLL off SR */ - wm = intel_calculate_wm(clock, &igd_display_hplloff_wm, + wm = intel_calculate_wm(clock, &pineview_display_hplloff_wm, latency->display_hpll_disable, I915_FIFO_LINE_SIZE); reg = I915_READ(DSPFW3); reg &= 0xfffffe00; @@ -2338,17 +2485,17 @@ I915_WRITE(DSPFW3, reg); /* cursor HPLL off SR */ - wm = intel_calculate_wm(clock, &igd_cursor_hplloff_wm, pixel_size, + wm = intel_calculate_wm(clock, &pineview_cursor_hplloff_wm, pixel_size, latency->cursor_hpll_disable); reg = I915_READ(DSPFW3); reg &= ~(0x3f << 16); reg |= (wm & 0x3f) << 16; I915_WRITE(DSPFW3, reg); - DRM_DEBUG("DSPFW3 register is %x\n", reg); + DRM_DEBUG_KMS("DSPFW3 register is %x\n", reg); /* activate cxsr */ reg = I915_READ(DSPFW3); - reg |= IGD_SELF_REFRESH_EN; + reg |= PINEVIEW_SELF_REFRESH_EN; I915_WRITE(DSPFW3, reg); DRM_INFO("Big FIFO is enabled\n"); @@ -2370,7 +2517,7 @@ * A value of 5us seems to be a good balance; safe for very low end * platforms but not overly aggressive on lower latency configs. */ -const static int latency_ns = 5000; +static const int latency_ns = 5000; static int i9xx_get_fifo_size(struct drm_device *dev, int plane) { @@ -2384,8 +2531,8 @@ size = ((dsparb >> DSPARB_CSTART_SHIFT) & 0x7f) - (dsparb & 0x7f); - DRM_DEBUG("FIFO size - (0x%08x) %s: %d\n", dsparb, plane ? "B" : "A", - size); + DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb, + plane ? "B" : "A", size); return size; } @@ -2403,8 +2550,8 @@ (dsparb & 0x1ff); size >>= 1; /* Convert to cachelines */ - DRM_DEBUG("FIFO size - (0x%08x) %s: %d\n", dsparb, plane ? "B" : "A", - size); + DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb, + plane ? "B" : "A", size); return size; } @@ -2418,7 +2565,8 @@ size = dsparb & 0x7f; size >>= 2; /* Convert to cachelines */ - DRM_DEBUG("FIFO size - (0x%08x) %s: %d\n", dsparb, plane ? "B" : "A", + DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb, + plane ? "B" : "A", size); return size; @@ -2433,8 +2581,8 @@ size = dsparb & 0x7f; size >>= 1; /* Convert to cachelines */ - DRM_DEBUG("FIFO size - (0x%08x) %s: %d\n", dsparb, plane ? "B" : "A", - size); + DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb, + plane ? "B" : "A", size); return size; } @@ -2480,7 +2628,7 @@ /* Calc sr entries for one plane configs */ if (sr_hdisplay && (!planea_clock || !planeb_clock)) { /* self-refresh has much higher latency */ - const static int sr_latency_ns = 12000; + static const int sr_latency_ns = 12000; sr_clock = planea_clock ? planea_clock : planeb_clock; line_time_us = ((sr_hdisplay * 1000) / sr_clock); @@ -2491,6 +2639,10 @@ sr_entries = roundup(sr_entries / cacheline_size, 1); DRM_DEBUG("self-refresh entries: %d\n", sr_entries); I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); + } else { + /* Turn off self refresh if both pipes are enabled */ + I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) + & ~FW_BLC_SELF_EN); } DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, SR %d\n", @@ -2509,15 +2661,43 @@ (cursor_sr << DSPFW_CURSOR_SR_SHIFT)); } -static void i965_update_wm(struct drm_device *dev, int unused, int unused2, - int unused3, int unused4) +static void i965_update_wm(struct drm_device *dev, int planea_clock, + int planeb_clock, int sr_hdisplay, int pixel_size) { struct drm_i915_private *dev_priv = dev->dev_private; + unsigned long line_time_us; + int sr_clock, sr_entries, srwm = 1; + + /* Calc sr entries for one plane configs */ + if (sr_hdisplay && (!planea_clock || !planeb_clock)) { + /* self-refresh has much higher latency */ + static const int sr_latency_ns = 12000; + + sr_clock = planea_clock ? planea_clock : planeb_clock; + line_time_us = ((sr_hdisplay * 1000) / sr_clock); + + /* Use ns/us then divide to preserve precision */ + sr_entries = (((sr_latency_ns / line_time_us) + 1) * + pixel_size * sr_hdisplay) / 1000; + sr_entries = roundup(sr_entries / I915_FIFO_LINE_SIZE, 1); + DRM_DEBUG("self-refresh entries: %d\n", sr_entries); + srwm = I945_FIFO_SIZE - sr_entries; + if (srwm < 0) + srwm = 1; + srwm &= 0x3f; + I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); + } else { + /* Turn off self refresh if both pipes are enabled */ + I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) + & ~FW_BLC_SELF_EN); + } - DRM_DEBUG("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR 8\n"); + DRM_DEBUG_KMS("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR %d\n", + srwm); /* 965 has limitations... */ - I915_WRITE(DSPFW1, (8 << 16) | (8 << 8) | (8 << 0)); + I915_WRITE(DSPFW1, (srwm << DSPFW_SR_SHIFT) | (8 << 16) | (8 << 8) | + (8 << 0)); I915_WRITE(DSPFW2, (8 << 8) | (8 << 0)); } @@ -2553,7 +2733,7 @@ pixel_size, latency_ns); planeb_wm = intel_calculate_wm(planeb_clock, &planeb_params, pixel_size, latency_ns); - DRM_DEBUG("FIFO watermarks - A: %d, B: %d\n", planea_wm, planeb_wm); + DRM_DEBUG_KMS("FIFO watermarks - A: %d, B: %d\n", planea_wm, planeb_wm); /* * Overlay gets an aggressive default since video jitter is bad. @@ -2564,7 +2744,7 @@ if (HAS_FW_BLC(dev) && sr_hdisplay && (!planea_clock || !planeb_clock)) { /* self-refresh has much higher latency */ - const static int sr_latency_ns = 6000; + static const int sr_latency_ns = 6000; sr_clock = planea_clock ? planea_clock : planeb_clock; line_time_us = ((sr_hdisplay * 1000) / sr_clock); @@ -2573,14 +2753,18 @@ sr_entries = (((sr_latency_ns / line_time_us) + 1) * pixel_size * sr_hdisplay) / 1000; sr_entries = roundup(sr_entries / cacheline_size, 1); - DRM_DEBUG("self-refresh entries: %d\n", sr_entries); + DRM_DEBUG_KMS("self-refresh entries: %d\n", sr_entries); srwm = total_size - sr_entries; if (srwm < 0) srwm = 1; I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f)); + } else { + /* Turn off self refresh if both pipes are enabled */ + I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) + & ~FW_BLC_SELF_EN); } - DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n", + DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n", planea_wm, planeb_wm, cwm, srwm); fwater_lo = ((planeb_wm & 0x3f) << 16) | (planea_wm & 0x3f); @@ -2607,7 +2791,7 @@ pixel_size, latency_ns); fwater_lo |= (3<<8) | planea_wm; - DRM_DEBUG("Setting FIFO watermarks - A: %d\n", planea_wm); + DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d\n", planea_wm); I915_WRITE(FW_BLC, fwater_lo); } @@ -2661,11 +2845,11 @@ if (crtc->enabled) { enabled++; if (intel_crtc->plane == 0) { - DRM_DEBUG("plane A (pipe %d) clock: %d\n", + DRM_DEBUG_KMS("plane A (pipe %d) clock: %d\n", intel_crtc->pipe, crtc->mode.clock); planea_clock = crtc->mode.clock; } else { - DRM_DEBUG("plane B (pipe %d) clock: %d\n", + DRM_DEBUG_KMS("plane B (pipe %d) clock: %d\n", intel_crtc->pipe, crtc->mode.clock); planeb_clock = crtc->mode.clock; } @@ -2682,10 +2866,10 @@ return; /* Single plane configs can enable self refresh */ - if (enabled == 1 && IS_IGD(dev)) - igd_enable_cxsr(dev, sr_clock, pixel_size); - else if (IS_IGD(dev)) - igd_disable_cxsr(dev); + if (enabled == 1 && IS_PINEVIEW(dev)) + pineview_enable_cxsr(dev, sr_clock, pixel_size); + else if (IS_PINEVIEW(dev)) + pineview_disable_cxsr(dev); dev_priv->display.update_wm(dev, planea_clock, planeb_clock, sr_hdisplay, pixel_size); @@ -2779,10 +2963,11 @@ if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) { refclk = dev_priv->lvds_ssc_freq * 1000; - DRM_DEBUG("using SSC reference clock of %d MHz\n", refclk / 1000); + DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n", + refclk / 1000); } else if (IS_I9XX(dev)) { refclk = 96000; - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) refclk = 120000; /* 120Mhz refclk */ } else { refclk = 48000; @@ -2802,14 +2987,23 @@ return -EINVAL; } - if (limit->find_reduced_pll && dev_priv->lvds_downclock_avail) { - memcpy(&reduced_clock, &clock, sizeof(intel_clock_t)); - has_reduced_clock = limit->find_reduced_pll(limit, crtc, - (adjusted_mode->clock*3/4), + if (is_lvds && dev_priv->lvds_downclock_avail) { + has_reduced_clock = limit->find_pll(limit, crtc, + dev_priv->lvds_downclock, refclk, &reduced_clock); + if (has_reduced_clock && (clock.p != reduced_clock.p)) { + /* + * If the different P is found, it means that we can't + * switch the display clock by using the FP0/FP1. + * In such case we will disable the LVDS downclock + * feature. + */ + DRM_DEBUG_KMS("Different P is found for " + "LVDS clock/downclock\n"); + has_reduced_clock = 0; + } } - /* SDVO TV has fixed PLL values depend on its clock range, this mirrors vbios setting. */ if (is_sdvo && is_tv) { @@ -2831,7 +3025,7 @@ } /* FDI link */ - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { int lane, link_bw, bpp; /* eDP doesn't require FDI link, so just set DP M/N according to current link config */ @@ -2854,6 +3048,33 @@ /* determine panel color depth */ temp = I915_READ(pipeconf_reg); + temp &= ~PIPE_BPC_MASK; + if (is_lvds) { + int lvds_reg = I915_READ(PCH_LVDS); + /* the BPC will be 6 if it is 18-bit LVDS panel */ + if ((lvds_reg & LVDS_A3_POWER_MASK) == LVDS_A3_POWER_UP) + temp |= PIPE_8BPC; + else + temp |= PIPE_6BPC; + } else if (is_edp) { + switch (dev_priv->edp_bpp/3) { + case 8: + temp |= PIPE_8BPC; + break; + case 10: + temp |= PIPE_10BPC; + break; + case 6: + temp |= PIPE_6BPC; + break; + case 12: + temp |= PIPE_12BPC; + break; + } + } else + temp |= PIPE_8BPC; + I915_WRITE(pipeconf_reg, temp); + I915_READ(pipeconf_reg); switch (temp & PIPE_BPC_MASK) { case PIPE_8BPC: @@ -2873,8 +3094,7 @@ bpp = 24; } - igdng_compute_m_n(bpp, lane, target_clock, - link_bw, &m_n); + ironlake_compute_m_n(bpp, lane, target_clock, link_bw, &m_n); } /* Ironlake: try to setup display ref clock before DPLL @@ -2882,7 +3102,7 @@ * PCH B stepping, previous chipset stepping should be * ignoring this setting. */ - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { temp = I915_READ(PCH_DREF_CONTROL); /* Always enable nonspread source */ temp &= ~DREF_NONSPREAD_SOURCE_MASK; @@ -2917,7 +3137,7 @@ } } - if (IS_IGD(dev)) { + if (IS_PINEVIEW(dev)) { fp = (1 << clock.n) << 16 | clock.m1 << 8 | clock.m2; if (has_reduced_clock) fp2 = (1 << reduced_clock.n) << 16 | @@ -2929,7 +3149,7 @@ reduced_clock.m2; } - if (!IS_IGDNG(dev)) + if (!HAS_PCH_SPLIT(dev)) dpll = DPLL_VGA_MODE_DIS; if (IS_I9XX(dev)) { @@ -2942,19 +3162,19 @@ sdvo_pixel_multiply = adjusted_mode->clock / mode->clock; if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) dpll |= (sdvo_pixel_multiply - 1) << SDVO_MULTIPLIER_SHIFT_HIRES; - else if (IS_IGDNG(dev)) + else if (HAS_PCH_SPLIT(dev)) dpll |= (sdvo_pixel_multiply - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT; } if (is_dp) dpll |= DPLL_DVO_HIGH_SPEED; /* compute bitmask from p1 value */ - if (IS_IGD(dev)) - dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_IGD; + if (IS_PINEVIEW(dev)) + dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW; else { dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; /* also FPA1 */ - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; if (IS_G4X(dev) && has_reduced_clock) dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; @@ -2973,7 +3193,7 @@ dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; break; } - if (IS_I965G(dev) && !IS_IGDNG(dev)) + if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); } else { if (is_lvds) { @@ -3005,9 +3225,9 @@ /* Set up the display plane register */ dspcntr = DISPPLANE_GAMMA_ENABLE; - /* IGDNG's plane is forced to pipe, bit 24 is to + /* Ironlake's plane is forced to pipe, bit 24 is to enable color space conversion */ - if (!IS_IGDNG(dev)) { + if (!HAS_PCH_SPLIT(dev)) { if (pipe == 0) dspcntr &= ~DISPPLANE_SEL_PIPE_MASK; else @@ -3034,20 +3254,20 @@ /* Disable the panel fitter if it was on our pipe */ - if (!IS_IGDNG(dev) && intel_panel_fitter_pipe(dev) == pipe) + if (!HAS_PCH_SPLIT(dev) && intel_panel_fitter_pipe(dev) == pipe) I915_WRITE(PFIT_CONTROL, 0); - DRM_DEBUG("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B'); + DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B'); drm_mode_debug_printmodeline(mode); - /* assign to IGDNG registers */ - if (IS_IGDNG(dev)) { + /* assign to Ironlake registers */ + if (HAS_PCH_SPLIT(dev)) { fp_reg = pch_fp_reg; dpll_reg = pch_dpll_reg; } if (is_edp) { - igdng_disable_pll_edp(crtc); + ironlake_disable_pll_edp(crtc); } else if ((dpll & DPLL_VCO_ENABLE)) { I915_WRITE(fp_reg, fp); I915_WRITE(dpll_reg, dpll & ~DPLL_VCO_ENABLE); @@ -3062,7 +3282,7 @@ if (is_lvds) { u32 lvds; - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) lvds_reg = PCH_LVDS; lvds = I915_READ(lvds_reg); @@ -3081,7 +3301,20 @@ * appropriately here, but we need to look more thoroughly into how * panels behave in the two modes. */ - + /* set the dithering flag */ + if (IS_I965G(dev)) { + if (dev_priv->lvds_dither) { + if (IS_IRONLAKE(dev)) + pipeconf |= PIPE_ENABLE_DITHER; + else + lvds |= LVDS_ENABLE_DITHER; + } else { + if (IS_IRONLAKE(dev)) + pipeconf &= ~PIPE_ENABLE_DITHER; + else + lvds &= ~LVDS_ENABLE_DITHER; + } + } I915_WRITE(lvds_reg, lvds); I915_READ(lvds_reg); } @@ -3095,7 +3328,7 @@ /* Wait for the clocks to stabilize. */ udelay(150); - if (IS_I965G(dev) && !IS_IGDNG(dev)) { + if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { if (is_sdvo) { sdvo_pixel_multiply = adjusted_mode->clock / mode->clock; I915_WRITE(dpll_md_reg, (0 << DPLL_MD_UDI_DIVIDER_SHIFT) | @@ -3115,14 +3348,14 @@ I915_WRITE(fp_reg + 4, fp2); intel_crtc->lowfreq_avail = true; if (HAS_PIPE_CXSR(dev)) { - DRM_DEBUG("enabling CxSR downclocking\n"); + DRM_DEBUG_KMS("enabling CxSR downclocking\n"); pipeconf |= PIPECONF_CXSR_DOWNCLOCK; } } else { I915_WRITE(fp_reg + 4, fp); intel_crtc->lowfreq_avail = false; if (HAS_PIPE_CXSR(dev)) { - DRM_DEBUG("disabling CxSR downclocking\n"); + DRM_DEBUG_KMS("disabling CxSR downclocking\n"); pipeconf &= ~PIPECONF_CXSR_DOWNCLOCK; } } @@ -3142,21 +3375,21 @@ /* pipesrc and dspsize control the size that is scaled from, which should * always be the user's requested size. */ - if (!IS_IGDNG(dev)) { + if (!HAS_PCH_SPLIT(dev)) { I915_WRITE(dspsize_reg, ((mode->vdisplay - 1) << 16) | (mode->hdisplay - 1)); I915_WRITE(dsppos_reg, 0); } I915_WRITE(pipesrc_reg, ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1)); - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { I915_WRITE(data_m1_reg, TU_SIZE(m_n.tu) | m_n.gmch_m); I915_WRITE(data_n1_reg, TU_SIZE(m_n.tu) | m_n.gmch_n); I915_WRITE(link_m1_reg, m_n.link_m); I915_WRITE(link_n1_reg, m_n.link_n); if (is_edp) { - igdng_set_pll_edp(crtc, adjusted_mode->clock); + ironlake_set_pll_edp(crtc, adjusted_mode->clock); } else { /* enable FDI RX PLL too */ temp = I915_READ(fdi_rx_reg); @@ -3170,7 +3403,7 @@ intel_wait_for_vblank(dev); - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { /* enable address swizzle for tiling buffer */ temp = I915_READ(DISP_ARB_CTL); I915_WRITE(DISP_ARB_CTL, temp | DISP_TILE_SURFACE_SWIZZLING); @@ -3204,8 +3437,8 @@ if (!crtc->enabled) return; - /* use legacy palette for IGDNG */ - if (IS_IGDNG(dev)) + /* use legacy palette for Ironlake */ + if (HAS_PCH_SPLIT(dev)) palreg = (intel_crtc->pipe == 0) ? LGC_PALETTE_A : LGC_PALETTE_B; @@ -3234,11 +3467,11 @@ size_t addr; int ret; - DRM_DEBUG("\n"); + DRM_DEBUG_KMS("\n"); /* if we want to turn off the cursor ignore width and height */ if (!handle) { - DRM_DEBUG("cursor off\n"); + DRM_DEBUG_KMS("cursor off\n"); if (IS_MOBILE(dev) || IS_I9XX(dev)) { temp &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE); temp |= CURSOR_MODE_DISABLE; @@ -3271,7 +3504,7 @@ /* we only need to pin inside GTT if cursor is non-phy */ mutex_lock(&dev->struct_mutex); - if (!dev_priv->cursor_needs_physical) { + if (!dev_priv->info->cursor_needs_physical) { ret = i915_gem_object_pin(bo, PAGE_SIZE); if (ret) { DRM_ERROR("failed to pin cursor bo\n"); @@ -3306,7 +3539,7 @@ I915_WRITE(base, addr); if (intel_crtc->cursor_bo) { - if (dev_priv->cursor_needs_physical) { + if (dev_priv->info->cursor_needs_physical) { if (intel_crtc->cursor_bo != bo) i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo); } else @@ -3509,7 +3742,6 @@ void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_mode) { struct drm_encoder *encoder = &intel_output->enc; - struct drm_device *dev = encoder->dev; struct drm_crtc *crtc = encoder->crtc; struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; @@ -3519,7 +3751,6 @@ intel_output->base.encoder = NULL; intel_output->load_detect_temp = false; crtc->enabled = drm_helper_crtc_in_use(crtc); - drm_helper_disable_unused_functions(dev); } /* Switch crtc and output back off if necessary */ @@ -3546,18 +3777,18 @@ fp = I915_READ((pipe == 0) ? FPA1 : FPB1); clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT; - if (IS_IGD(dev)) { - clock.n = ffs((fp & FP_N_IGD_DIV_MASK) >> FP_N_DIV_SHIFT) - 1; - clock.m2 = (fp & FP_M2_IGD_DIV_MASK) >> FP_M2_DIV_SHIFT; + if (IS_PINEVIEW(dev)) { + clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1; + clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT; } else { clock.n = (fp & FP_N_DIV_MASK) >> FP_N_DIV_SHIFT; clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT; } if (IS_I9XX(dev)) { - if (IS_IGD(dev)) - clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_IGD) >> - DPLL_FPA01_P1_POST_DIV_SHIFT_IGD); + if (IS_PINEVIEW(dev)) + clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >> + DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW); else clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK) >> DPLL_FPA01_P1_POST_DIV_SHIFT); @@ -3572,7 +3803,7 @@ 7 : 14; break; default: - DRM_DEBUG("Unknown DPLL mode %08x in programmed " + DRM_DEBUG_KMS("Unknown DPLL mode %08x in programmed " "mode\n", (int)(dpll & DPLL_MODE_MASK)); return 0; } @@ -3658,132 +3889,13 @@ struct drm_device *dev = (struct drm_device *)arg; drm_i915_private_t *dev_priv = dev->dev_private; - DRM_DEBUG("idle timer fired, downclocking\n"); + DRM_DEBUG_DRIVER("idle timer fired, downclocking\n"); dev_priv->busy = false; queue_work(dev_priv->wq, &dev_priv->idle_work); } -void intel_increase_renderclock(struct drm_device *dev, bool schedule) -{ - drm_i915_private_t *dev_priv = dev->dev_private; - - if (IS_IGDNG(dev)) - return; - - if (!dev_priv->render_reclock_avail) { - DRM_DEBUG("not reclocking render clock\n"); - return; - } - - /* Restore render clock frequency to original value */ - if (IS_G4X(dev) || IS_I9XX(dev)) - pci_write_config_word(dev->pdev, GCFGC, dev_priv->orig_clock); - else if (IS_I85X(dev)) - pci_write_config_word(dev->pdev, HPLLCC, dev_priv->orig_clock); - DRM_DEBUG("increasing render clock frequency\n"); - - /* Schedule downclock */ - if (schedule) - mod_timer(&dev_priv->idle_timer, jiffies + - msecs_to_jiffies(GPU_IDLE_TIMEOUT)); -} - -void intel_decrease_renderclock(struct drm_device *dev) -{ - drm_i915_private_t *dev_priv = dev->dev_private; - - if (IS_IGDNG(dev)) - return; - - if (!dev_priv->render_reclock_avail) { - DRM_DEBUG("not reclocking render clock\n"); - return; - } - - if (IS_G4X(dev)) { - u16 gcfgc; - - /* Adjust render clock... */ - pci_read_config_word(dev->pdev, GCFGC, &gcfgc); - - /* Down to minimum... */ - gcfgc &= ~GM45_GC_RENDER_CLOCK_MASK; - gcfgc |= GM45_GC_RENDER_CLOCK_266_MHZ; - - pci_write_config_word(dev->pdev, GCFGC, gcfgc); - } else if (IS_I965G(dev)) { - u16 gcfgc; - - /* Adjust render clock... */ - pci_read_config_word(dev->pdev, GCFGC, &gcfgc); - - /* Down to minimum... */ - gcfgc &= ~I965_GC_RENDER_CLOCK_MASK; - gcfgc |= I965_GC_RENDER_CLOCK_267_MHZ; - - pci_write_config_word(dev->pdev, GCFGC, gcfgc); - } else if (IS_I945G(dev) || IS_I945GM(dev)) { - u16 gcfgc; - - /* Adjust render clock... */ - pci_read_config_word(dev->pdev, GCFGC, &gcfgc); - - /* Down to minimum... */ - gcfgc &= ~I945_GC_RENDER_CLOCK_MASK; - gcfgc |= I945_GC_RENDER_CLOCK_166_MHZ; - - pci_write_config_word(dev->pdev, GCFGC, gcfgc); - } else if (IS_I915G(dev)) { - u16 gcfgc; - - /* Adjust render clock... */ - pci_read_config_word(dev->pdev, GCFGC, &gcfgc); - - /* Down to minimum... */ - gcfgc &= ~I915_GC_RENDER_CLOCK_MASK; - gcfgc |= I915_GC_RENDER_CLOCK_166_MHZ; - - pci_write_config_word(dev->pdev, GCFGC, gcfgc); - } else if (IS_I85X(dev)) { - u16 hpllcc; - - /* Adjust render clock... */ - pci_read_config_word(dev->pdev, HPLLCC, &hpllcc); - - /* Up to maximum... */ - hpllcc &= ~GC_CLOCK_CONTROL_MASK; - hpllcc |= GC_CLOCK_133_200; - - pci_write_config_word(dev->pdev, HPLLCC, hpllcc); - } - DRM_DEBUG("decreasing render clock frequency\n"); -} - -/* Note that no increase function is needed for this - increase_renderclock() - * will also rewrite these bits - */ -void intel_decrease_displayclock(struct drm_device *dev) -{ - if (IS_IGDNG(dev)) - return; - - if (IS_I945G(dev) || IS_I945GM(dev) || IS_I915G(dev) || - IS_I915GM(dev)) { - u16 gcfgc; - - /* Adjust render clock... */ - pci_read_config_word(dev->pdev, GCFGC, &gcfgc); - - /* Down to minimum... */ - gcfgc &= ~0xf0; - gcfgc |= 0x80; - - pci_write_config_word(dev->pdev, GCFGC, gcfgc); - } -} - #define CRTC_IDLE_TIMEOUT 1000 /* ms */ static void intel_crtc_idle_timer(unsigned long arg) @@ -3792,7 +3904,7 @@ struct drm_crtc *crtc = &intel_crtc->base; drm_i915_private_t *dev_priv = crtc->dev->dev_private; - DRM_DEBUG("idle timer fired, downclocking\n"); + DRM_DEBUG_DRIVER("idle timer fired, downclocking\n"); intel_crtc->busy = false; @@ -3808,14 +3920,14 @@ int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; int dpll = I915_READ(dpll_reg); - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) return; if (!dev_priv->lvds_downclock_avail) return; if (!HAS_PIPE_CXSR(dev) && (dpll & DISPLAY_RATE_SELECT_FPA1)) { - DRM_DEBUG("upclocking LVDS\n"); + DRM_DEBUG_DRIVER("upclocking LVDS\n"); /* Unlock panel regs */ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16)); @@ -3826,7 +3938,7 @@ intel_wait_for_vblank(dev); dpll = I915_READ(dpll_reg); if (dpll & DISPLAY_RATE_SELECT_FPA1) - DRM_DEBUG("failed to upclock LVDS!\n"); + DRM_DEBUG_DRIVER("failed to upclock LVDS!\n"); /* ...and lock them again */ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3); @@ -3847,7 +3959,7 @@ int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B; int dpll = I915_READ(dpll_reg); - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) return; if (!dev_priv->lvds_downclock_avail) @@ -3858,7 +3970,7 @@ * the manual case. */ if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) { - DRM_DEBUG("downclocking LVDS\n"); + DRM_DEBUG_DRIVER("downclocking LVDS\n"); /* Unlock panel regs */ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16)); @@ -3869,7 +3981,7 @@ intel_wait_for_vblank(dev); dpll = I915_READ(dpll_reg); if (!(dpll & DISPLAY_RATE_SELECT_FPA1)) - DRM_DEBUG("failed to downclock LVDS!\n"); + DRM_DEBUG_DRIVER("failed to downclock LVDS!\n"); /* ...and lock them again */ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3); @@ -3897,12 +4009,6 @@ mutex_lock(&dev->struct_mutex); - /* GPU isn't processing, downclock it. */ - if (!dev_priv->busy) { - intel_decrease_renderclock(dev); - intel_decrease_displayclock(dev); - } - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { /* Skip inactive CRTCs */ if (!crtc->fb) @@ -3936,8 +4042,11 @@ if (!drm_core_check_feature(dev, DRIVER_MODESET)) return; - dev_priv->busy = true; - intel_increase_renderclock(dev, true); + if (!dev_priv->busy) + dev_priv->busy = true; + else + mod_timer(&dev_priv->idle_timer, jiffies + + msecs_to_jiffies(GPU_IDLE_TIMEOUT)); list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { if (!crtc->fb) @@ -3967,6 +4076,180 @@ kfree(intel_crtc); } +struct intel_unpin_work { + struct work_struct work; + struct drm_device *dev; + struct drm_gem_object *old_fb_obj; + struct drm_gem_object *pending_flip_obj; + struct drm_pending_vblank_event *event; + int pending; +}; + +static void intel_unpin_work_fn(struct work_struct *__work) +{ + struct intel_unpin_work *work = + container_of(__work, struct intel_unpin_work, work); + + mutex_lock(&work->dev->struct_mutex); + i915_gem_object_unpin(work->old_fb_obj); + drm_gem_object_unreference(work->pending_flip_obj); + drm_gem_object_unreference(work->old_fb_obj); + mutex_unlock(&work->dev->struct_mutex); + kfree(work); +} + +void intel_finish_page_flip(struct drm_device *dev, int pipe) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_unpin_work *work; + struct drm_i915_gem_object *obj_priv; + struct drm_pending_vblank_event *e; + struct timeval now; + unsigned long flags; + + /* Ignore early vblank irqs */ + if (intel_crtc == NULL) + return; + + spin_lock_irqsave(&dev->event_lock, flags); + work = intel_crtc->unpin_work; + if (work == NULL || !work->pending) { + if (work && !work->pending) { + obj_priv = work->pending_flip_obj->driver_private; + DRM_DEBUG_DRIVER("flip finish: %p (%d) not pending?\n", + obj_priv, + atomic_read(&obj_priv->pending_flip)); + } + spin_unlock_irqrestore(&dev->event_lock, flags); + return; + } + + intel_crtc->unpin_work = NULL; + drm_vblank_put(dev, intel_crtc->pipe); + + if (work->event) { + e = work->event; + do_gettimeofday(&now); + e->event.sequence = drm_vblank_count(dev, intel_crtc->pipe); + e->event.tv_sec = now.tv_sec; + e->event.tv_usec = now.tv_usec; + list_add_tail(&e->base.link, + &e->base.file_priv->event_list); + wake_up_interruptible(&e->base.file_priv->event_wait); + } + + spin_unlock_irqrestore(&dev->event_lock, flags); + + obj_priv = work->pending_flip_obj->driver_private; + + /* Initial scanout buffer will have a 0 pending flip count */ + if ((atomic_read(&obj_priv->pending_flip) == 0) || + atomic_dec_and_test(&obj_priv->pending_flip)) + DRM_WAKEUP(&dev_priv->pending_flip_queue); + schedule_work(&work->work); +} + +void intel_prepare_page_flip(struct drm_device *dev, int plane) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + struct intel_crtc *intel_crtc = + to_intel_crtc(dev_priv->plane_to_crtc_mapping[plane]); + unsigned long flags; + + spin_lock_irqsave(&dev->event_lock, flags); + if (intel_crtc->unpin_work) { + intel_crtc->unpin_work->pending = 1; + } else { + DRM_DEBUG_DRIVER("preparing flip with no unpin work?\n"); + } + spin_unlock_irqrestore(&dev->event_lock, flags); +} + +static int intel_crtc_page_flip(struct drm_crtc *crtc, + struct drm_framebuffer *fb, + struct drm_pending_vblank_event *event) +{ + struct drm_device *dev = crtc->dev; + struct drm_i915_private *dev_priv = dev->dev_private; + struct intel_framebuffer *intel_fb; + struct drm_i915_gem_object *obj_priv; + struct drm_gem_object *obj; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_unpin_work *work; + unsigned long flags; + int pipesrc_reg = (intel_crtc->pipe == 0) ? PIPEASRC : PIPEBSRC; + int ret, pipesrc; + RING_LOCALS; + + work = kzalloc(sizeof *work, GFP_KERNEL); + if (work == NULL) + return -ENOMEM; + + mutex_lock(&dev->struct_mutex); + + work->event = event; + work->dev = crtc->dev; + intel_fb = to_intel_framebuffer(crtc->fb); + work->old_fb_obj = intel_fb->obj; + INIT_WORK(&work->work, intel_unpin_work_fn); + + /* We borrow the event spin lock for protecting unpin_work */ + spin_lock_irqsave(&dev->event_lock, flags); + if (intel_crtc->unpin_work) { + DRM_DEBUG_DRIVER("flip queue: crtc already busy\n"); + spin_unlock_irqrestore(&dev->event_lock, flags); + kfree(work); + mutex_unlock(&dev->struct_mutex); + return -EBUSY; + } + intel_crtc->unpin_work = work; + spin_unlock_irqrestore(&dev->event_lock, flags); + + intel_fb = to_intel_framebuffer(fb); + obj = intel_fb->obj; + + ret = intel_pin_and_fence_fb_obj(dev, obj); + if (ret != 0) { + DRM_DEBUG_DRIVER("flip queue: %p pin & fence failed\n", + obj->driver_private); + kfree(work); + intel_crtc->unpin_work = NULL; + mutex_unlock(&dev->struct_mutex); + return ret; + } + + /* Reference the objects for the scheduled work. */ + drm_gem_object_reference(work->old_fb_obj); + drm_gem_object_reference(obj); + + crtc->fb = fb; + i915_gem_object_flush_write_domain(obj); + drm_vblank_get(dev, intel_crtc->pipe); + obj_priv = obj->driver_private; + atomic_inc(&obj_priv->pending_flip); + work->pending_flip_obj = obj; + + BEGIN_LP_RING(4); + OUT_RING(MI_DISPLAY_FLIP | + MI_DISPLAY_FLIP_PLANE(intel_crtc->plane)); + OUT_RING(fb->pitch); + if (IS_I965G(dev)) { + OUT_RING(obj_priv->gtt_offset | obj_priv->tiling_mode); + pipesrc = I915_READ(pipesrc_reg); + OUT_RING(pipesrc & 0x0fff0fff); + } else { + OUT_RING(obj_priv->gtt_offset); + OUT_RING(MI_NOOP); + } + ADVANCE_LP_RING(); + + mutex_unlock(&dev->struct_mutex); + + return 0; +} + static const struct drm_crtc_helper_funcs intel_helper_funcs = { .dpms = intel_crtc_dpms, .mode_fixup = intel_crtc_mode_fixup, @@ -3983,11 +4266,13 @@ .gamma_set = intel_crtc_gamma_set, .set_config = drm_crtc_helper_set_config, .destroy = intel_crtc_destroy, + .page_flip = intel_crtc_page_flip, }; static void intel_crtc_init(struct drm_device *dev, int pipe) { + drm_i915_private_t *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc; int i; @@ -4010,10 +4295,15 @@ intel_crtc->pipe = pipe; intel_crtc->plane = pipe; if (IS_MOBILE(dev) && (IS_I9XX(dev) && !IS_I965G(dev))) { - DRM_DEBUG("swapping pipes & planes for FBC\n"); + DRM_DEBUG_KMS("swapping pipes & planes for FBC\n"); intel_crtc->plane = ((pipe == 0) ? 1 : 0); } + BUG_ON(pipe >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) || + dev_priv->plane_to_crtc_mapping[intel_crtc->plane] != NULL); + dev_priv->plane_to_crtc_mapping[intel_crtc->plane] = &intel_crtc->base; + dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base; + intel_crtc->cursor_addr = 0; intel_crtc->dpms_mode = DRM_MODE_DPMS_OFF; drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs); @@ -4090,7 +4380,7 @@ if (IS_MOBILE(dev) && !IS_I830(dev)) intel_lvds_init(dev); - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { int found; if (IS_MOBILE(dev) && (I915_READ(DP_A) & DP_DETECTED)) @@ -4118,37 +4408,51 @@ if (I915_READ(PCH_DP_D) & DP_DETECTED) intel_dp_init(dev, PCH_DP_D); - } else if (IS_I9XX(dev)) { + } else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) { bool found = false; if (I915_READ(SDVOB) & SDVO_DETECTED) { + DRM_DEBUG_KMS("probing SDVOB\n"); found = intel_sdvo_init(dev, SDVOB); - if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) + if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) { + DRM_DEBUG_KMS("probing HDMI on SDVOB\n"); intel_hdmi_init(dev, SDVOB); + } - if (!found && SUPPORTS_INTEGRATED_DP(dev)) + if (!found && SUPPORTS_INTEGRATED_DP(dev)) { + DRM_DEBUG_KMS("probing DP_B\n"); intel_dp_init(dev, DP_B); + } } /* Before G4X SDVOC doesn't have its own detect register */ - if (I915_READ(SDVOB) & SDVO_DETECTED) + if (I915_READ(SDVOB) & SDVO_DETECTED) { + DRM_DEBUG_KMS("probing SDVOC\n"); found = intel_sdvo_init(dev, SDVOC); + } if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) { - if (SUPPORTS_INTEGRATED_HDMI(dev)) + if (SUPPORTS_INTEGRATED_HDMI(dev)) { + DRM_DEBUG_KMS("probing HDMI on SDVOC\n"); intel_hdmi_init(dev, SDVOC); - if (SUPPORTS_INTEGRATED_DP(dev)) + } + if (SUPPORTS_INTEGRATED_DP(dev)) { + DRM_DEBUG_KMS("probing DP_C\n"); intel_dp_init(dev, DP_C); + } } - if (SUPPORTS_INTEGRATED_DP(dev) && (I915_READ(DP_D) & DP_DETECTED)) + if (SUPPORTS_INTEGRATED_DP(dev) && + (I915_READ(DP_D) & DP_DETECTED)) { + DRM_DEBUG_KMS("probing DP_D\n"); intel_dp_init(dev, DP_D); - } else + } + } else if (IS_GEN2(dev)) intel_dvo_init(dev); - if (IS_I9XX(dev) && IS_MOBILE(dev) && !IS_IGDNG(dev)) + if (SUPPORTS_TV(dev)) intel_tv_init(dev); list_for_each_entry(connector, &dev->mode_config.connector_list, head) { @@ -4249,6 +4553,42 @@ .fb_changed = intelfb_probe, }; +static struct drm_gem_object * +intel_alloc_power_context(struct drm_device *dev) +{ + struct drm_gem_object *pwrctx; + int ret; + + pwrctx = drm_gem_object_alloc(dev, 4096); + if (!pwrctx) { + DRM_DEBUG("failed to alloc power context, RC6 disabled\n"); + return NULL; + } + + mutex_lock(&dev->struct_mutex); + ret = i915_gem_object_pin(pwrctx, 4096); + if (ret) { + DRM_ERROR("failed to pin power context: %d\n", ret); + goto err_unref; + } + + ret = i915_gem_object_set_to_gtt_domain(pwrctx, 1); + if (ret) { + DRM_ERROR("failed to set-domain on power context: %d\n", ret); + goto err_unpin; + } + mutex_unlock(&dev->struct_mutex); + + return pwrctx; + +err_unpin: + i915_gem_object_unpin(pwrctx); +err_unref: + drm_gem_object_unreference(pwrctx); + mutex_unlock(&dev->struct_mutex); + return NULL; +} + void intel_init_clock_gating(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; @@ -4257,7 +4597,7 @@ * Disable clock gating reported to work incorrectly according to the * specs, but enable as much else as we can. */ - if (IS_IGDNG(dev)) { + if (HAS_PCH_SPLIT(dev)) { return; } else if (IS_G4X(dev)) { uint32_t dspclk_gate; @@ -4291,11 +4631,37 @@ dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING | DSTATE_DOT_CLOCK_GATING; I915_WRITE(D_STATE, dstate); - } else if (IS_I855(dev) || IS_I865G(dev)) { + } else if (IS_I85X(dev) || IS_I865G(dev)) { I915_WRITE(RENCLK_GATE_D1, SV_CLOCK_GATE_DISABLE); } else if (IS_I830(dev)) { I915_WRITE(DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE); } + + /* + * GPU can automatically power down the render unit if given a page + * to save state. + */ + if (I915_HAS_RC6(dev) && drm_core_check_feature(dev, DRIVER_MODESET)) { + struct drm_i915_gem_object *obj_priv = NULL; + + if (dev_priv->pwrctx) { + obj_priv = dev_priv->pwrctx->driver_private; + } else { + struct drm_gem_object *pwrctx; + + pwrctx = intel_alloc_power_context(dev); + if (pwrctx) { + dev_priv->pwrctx = pwrctx; + obj_priv = pwrctx->driver_private; + } + } + + if (obj_priv) { + I915_WRITE(PWRCTXA, obj_priv->gtt_offset | PWRCTX_EN); + I915_WRITE(MCHBAR_RENDER_STANDBY, + I915_READ(MCHBAR_RENDER_STANDBY) & ~RCX_SW_EXIT); + } + } } /* Set up chip specific display functions */ @@ -4304,8 +4670,8 @@ struct drm_i915_private *dev_priv = dev->dev_private; /* We always want a DPMS function */ - if (IS_IGDNG(dev)) - dev_priv->display.dpms = igdng_crtc_dpms; + if (HAS_PCH_SPLIT(dev)) + dev_priv->display.dpms = ironlake_crtc_dpms; else dev_priv->display.dpms = i9xx_crtc_dpms; @@ -4315,7 +4681,7 @@ dev_priv->display.fbc_enabled = g4x_fbc_enabled; dev_priv->display.enable_fbc = g4x_enable_fbc; dev_priv->display.disable_fbc = g4x_disable_fbc; - } else if (IS_I965GM(dev) || IS_I945GM(dev) || IS_I915GM(dev)) { + } else if (IS_I965GM(dev)) { dev_priv->display.fbc_enabled = i8xx_fbc_enabled; dev_priv->display.enable_fbc = i8xx_enable_fbc; dev_priv->display.disable_fbc = i8xx_disable_fbc; @@ -4324,13 +4690,13 @@ } /* Returns the core display clock speed */ - if (IS_I945G(dev)) + if (IS_I945G(dev) || (IS_G33(dev) && ! IS_PINEVIEW_M(dev))) dev_priv->display.get_display_clock_speed = i945_get_display_clock_speed; else if (IS_I915G(dev)) dev_priv->display.get_display_clock_speed = i915_get_display_clock_speed; - else if (IS_I945GM(dev) || IS_845G(dev) || IS_IGDGM(dev)) + else if (IS_I945GM(dev) || IS_845G(dev) || IS_PINEVIEW_M(dev)) dev_priv->display.get_display_clock_speed = i9xx_misc_get_display_clock_speed; else if (IS_I915GM(dev)) @@ -4339,7 +4705,7 @@ else if (IS_I865G(dev)) dev_priv->display.get_display_clock_speed = i865_get_display_clock_speed; - else if (IS_I855(dev)) + else if (IS_I85X(dev)) dev_priv->display.get_display_clock_speed = i855_get_display_clock_speed; else /* 852, 830 */ @@ -4347,7 +4713,7 @@ i830_get_display_clock_speed; /* For FIFO watermark updates */ - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) dev_priv->display.update_wm = NULL; else if (IS_G4X(dev)) dev_priv->display.update_wm = g4x_update_wm; @@ -4403,7 +4769,7 @@ num_pipe = 2; else num_pipe = 1; - DRM_DEBUG("%d display pipe%s available.\n", + DRM_DEBUG_KMS("%d display pipe%s available.\n", num_pipe, num_pipe > 1 ? "s" : ""); if (IS_I85X(dev)) @@ -4422,6 +4788,15 @@ INIT_WORK(&dev_priv->idle_work, intel_idle_update); setup_timer(&dev_priv->idle_timer, intel_gpu_idle_timer, (unsigned long)dev); + + intel_setup_overlay(dev); + + if (IS_PINEVIEW(dev) && !intel_get_cxsr_latency(IS_PINEVIEW_G(dev), + dev_priv->fsb_freq, + dev_priv->mem_freq)) + DRM_INFO("failed to find known CxSR latency " + "(found fsb freq %d, mem freq %d), disabling CxSR\n", + dev_priv->fsb_freq, dev_priv->mem_freq); } void intel_modeset_cleanup(struct drm_device *dev) @@ -4442,14 +4817,23 @@ del_timer_sync(&intel_crtc->idle_timer); } - intel_increase_renderclock(dev, false); del_timer_sync(&dev_priv->idle_timer); - mutex_unlock(&dev->struct_mutex); - if (dev_priv->display.disable_fbc) dev_priv->display.disable_fbc(dev); + if (dev_priv->pwrctx) { + struct drm_i915_gem_object *obj_priv; + + obj_priv = dev_priv->pwrctx->driver_private; + I915_WRITE(PWRCTXA, obj_priv->gtt_offset &~ PWRCTX_EN); + I915_READ(PWRCTXA); + i915_gem_object_unpin(dev_priv->pwrctx); + drm_gem_object_unreference(dev_priv->pwrctx); + } + + mutex_unlock(&dev->struct_mutex); + drm_mode_config_cleanup(dev); } --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_bios.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_bios.c @@ -33,6 +33,8 @@ #define SLAVE_ADDR1 0x70 #define SLAVE_ADDR2 0x72 +static int panel_type; + static void * find_section(struct bdb_header *bdb, int section_id) { @@ -114,6 +116,8 @@ struct lvds_dvo_timing *dvo_timing; struct drm_display_mode *panel_fixed_mode; int lfp_data_size, dvo_timing_offset; + int i, temp_downclock; + struct drm_display_mode *temp_mode; /* Defaults if we can't find VBT info */ dev_priv->lvds_dither = 0; @@ -126,6 +130,7 @@ dev_priv->lvds_dither = lvds_options->pixel_dither; if (lvds_options->panel_type == 0xff) return; + panel_type = lvds_options->panel_type; lvds_lfp_data = find_section(bdb, BDB_LVDS_LFP_DATA); if (!lvds_lfp_data) @@ -159,9 +164,50 @@ dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode; - DRM_DEBUG("Found panel mode in BIOS VBT tables:\n"); + DRM_DEBUG_KMS("Found panel mode in BIOS VBT tables:\n"); drm_mode_debug_printmodeline(panel_fixed_mode); + temp_mode = kzalloc(sizeof(*temp_mode), GFP_KERNEL); + temp_downclock = panel_fixed_mode->clock; + /* + * enumerate the LVDS panel timing info entry in VBT to check whether + * the LVDS downclock is found. + */ + for (i = 0; i < 16; i++) { + entry = (struct bdb_lvds_lfp_data_entry *) + ((uint8_t *)lvds_lfp_data->data + (lfp_data_size * i)); + dvo_timing = (struct lvds_dvo_timing *) + ((unsigned char *)entry + dvo_timing_offset); + + fill_detail_timing_data(temp_mode, dvo_timing); + + if (temp_mode->hdisplay == panel_fixed_mode->hdisplay && + temp_mode->hsync_start == panel_fixed_mode->hsync_start && + temp_mode->hsync_end == panel_fixed_mode->hsync_end && + temp_mode->htotal == panel_fixed_mode->htotal && + temp_mode->vdisplay == panel_fixed_mode->vdisplay && + temp_mode->vsync_start == panel_fixed_mode->vsync_start && + temp_mode->vsync_end == panel_fixed_mode->vsync_end && + temp_mode->vtotal == panel_fixed_mode->vtotal && + temp_mode->clock < temp_downclock) { + /* + * downclock is already found. But we expect + * to find the lower downclock. + */ + temp_downclock = temp_mode->clock; + } + /* clear it to zero */ + memset(temp_mode, 0, sizeof(*temp_mode)); + } + kfree(temp_mode); + if (temp_downclock < panel_fixed_mode->clock && + i915_lvds_downclock) { + dev_priv->lvds_downclock_avail = 1; + dev_priv->lvds_downclock = temp_downclock; + DRM_DEBUG_KMS("LVDS downclock is found in VBT. ", + "Normal Clock %dKHz, downclock %dKHz\n", + temp_downclock, panel_fixed_mode->clock); + } return; } @@ -201,6 +247,7 @@ parse_general_features(struct drm_i915_private *dev_priv, struct bdb_header *bdb) { + struct drm_device *dev = dev_priv->dev; struct bdb_general_features *general; /* Set sensible defaults in case we can't find the general block */ @@ -217,7 +264,7 @@ if (IS_I85X(dev_priv->dev)) dev_priv->lvds_ssc_freq = general->ssc_freq ? 66 : 48; - else if (IS_IGDNG(dev_priv->dev)) + else if (IS_IRONLAKE(dev_priv->dev) || IS_GEN6(dev)) dev_priv->lvds_ssc_freq = general->ssc_freq ? 100 : 120; else @@ -241,22 +288,18 @@ GPIOF, }; - /* Set sensible defaults in case we can't find the general block - or it is the wrong chipset */ - dev_priv->crt_ddc_bus = -1; - general = find_section(bdb, BDB_GENERAL_DEFINITIONS); if (general) { u16 block_size = get_blocksize(general); if (block_size >= sizeof(*general)) { int bus_pin = general->crt_ddc_gmbus_pin; - DRM_DEBUG("crt_ddc_bus_pin: %d\n", bus_pin); + DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin); if ((bus_pin >= 1) && (bus_pin <= 6)) { dev_priv->crt_ddc_bus = crt_bus_map_table[bus_pin-1]; } } else { - DRM_DEBUG("BDB_GD too small (%d). Invalid.\n", + DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n", block_size); } } @@ -274,7 +317,7 @@ p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); if (!p_defs) { - DRM_DEBUG("No general definition block is found\n"); + DRM_DEBUG_KMS("No general definition block is found\n"); return; } /* judge whether the size of child device meets the requirements. @@ -284,7 +327,7 @@ */ if (p_defs->child_dev_size != sizeof(*p_child)) { /* different child dev size . Ignore it */ - DRM_DEBUG("different child size is found. Invalid.\n"); + DRM_DEBUG_KMS("different child size is found. Invalid.\n"); return; } /* get the block size of general definitions */ @@ -310,11 +353,11 @@ if (p_child->dvo_port != DEVICE_PORT_DVOB && p_child->dvo_port != DEVICE_PORT_DVOC) { /* skip the incorrect SDVO port */ - DRM_DEBUG("Incorrect SDVO port. Skip it \n"); + DRM_DEBUG_KMS("Incorrect SDVO port. Skip it \n"); continue; } - DRM_DEBUG("the SDVO device with slave addr %2x is found on " - "%s port\n", + DRM_DEBUG_KMS("the SDVO device with slave addr %2x is found on" + " %s port\n", p_child->slave_addr, (p_child->dvo_port == DEVICE_PORT_DVOB) ? "SDVOB" : "SDVOC"); @@ -325,21 +368,21 @@ p_mapping->dvo_wiring = p_child->dvo_wiring; p_mapping->initialized = 1; } else { - DRM_DEBUG("Maybe one SDVO port is shared by " + DRM_DEBUG_KMS("Maybe one SDVO port is shared by " "two SDVO device.\n"); } if (p_child->slave2_addr) { /* Maybe this is a SDVO device with multiple inputs */ /* And the mapping info is not added */ - DRM_DEBUG("there exists the slave2_addr. Maybe this " - "is a SDVO device with multiple inputs.\n"); + DRM_DEBUG_KMS("there exists the slave2_addr. Maybe this" + " is a SDVO device with multiple inputs.\n"); } count++; } if (!count) { /* No SDVO device info is found */ - DRM_DEBUG("No SDVO device info is found in VBT\n"); + DRM_DEBUG_KMS("No SDVO device info is found in VBT\n"); } return; } @@ -366,6 +409,98 @@ dev_priv->render_reclock_avail = true; } +static void +parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb) +{ + struct bdb_edp *edp; + + edp = find_section(bdb, BDB_EDP); + if (!edp) { + if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp_support) { + DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported,\ + assume 18bpp panel color depth.\n"); + dev_priv->edp_bpp = 18; + } + return; + } + + switch ((edp->color_depth >> (panel_type * 2)) & 3) { + case EDP_18BPP: + dev_priv->edp_bpp = 18; + break; + case EDP_24BPP: + dev_priv->edp_bpp = 24; + break; + case EDP_30BPP: + dev_priv->edp_bpp = 30; + break; + } +} + +static void +parse_device_mapping(struct drm_i915_private *dev_priv, + struct bdb_header *bdb) +{ + struct bdb_general_definitions *p_defs; + struct child_device_config *p_child, *child_dev_ptr; + int i, child_device_num, count; + u16 block_size; + + p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS); + if (!p_defs) { + DRM_DEBUG_KMS("No general definition block is found\n"); + return; + } + /* judge whether the size of child device meets the requirements. + * If the child device size obtained from general definition block + * is different with sizeof(struct child_device_config), skip the + * parsing of sdvo device info + */ + if (p_defs->child_dev_size != sizeof(*p_child)) { + /* different child dev size . Ignore it */ + DRM_DEBUG_KMS("different child size is found. Invalid.\n"); + return; + } + /* get the block size of general definitions */ + block_size = get_blocksize(p_defs); + /* get the number of child device */ + child_device_num = (block_size - sizeof(*p_defs)) / + sizeof(*p_child); + count = 0; + /* get the number of child device that is present */ + for (i = 0; i < child_device_num; i++) { + p_child = &(p_defs->devices[i]); + if (!p_child->device_type) { + /* skip the device block if device type is invalid */ + continue; + } + count++; + } + if (!count) { + DRM_DEBUG_KMS("no child dev is parsed from VBT \n"); + return; + } + dev_priv->child_dev = kzalloc(sizeof(*p_child) * count, GFP_KERNEL); + if (!dev_priv->child_dev) { + DRM_DEBUG_KMS("No memory space for child device\n"); + return; + } + + dev_priv->child_dev_num = count; + count = 0; + for (i = 0; i < child_device_num; i++) { + p_child = &(p_defs->devices[i]); + if (!p_child->device_type) { + /* skip the device block if device type is invalid */ + continue; + } + child_dev_ptr = dev_priv->child_dev + count; + count++; + memcpy((void *)child_dev_ptr, (void *)p_child, + sizeof(*p_child)); + } + return; +} /** * intel_init_bios - initialize VBIOS settings & find VBT * @dev: DRM device @@ -417,7 +552,9 @@ parse_lfp_panel_data(dev_priv, bdb); parse_sdvo_panel_data(dev_priv, bdb); parse_sdvo_device_mapping(dev_priv, bdb); + parse_device_mapping(dev_priv, bdb); parse_driver_features(dev_priv, bdb); + parse_edp(dev_priv, bdb); pci_unmap_rom(pdev, bios); --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_gem.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_gem.c @@ -277,7 +277,7 @@ mutex_lock(&dev->struct_mutex); - ret = i915_gem_object_get_pages(obj); + ret = i915_gem_object_get_pages(obj, 0); if (ret != 0) goto fail_unlock; @@ -321,40 +321,24 @@ return ret; } -static inline gfp_t -i915_gem_object_get_page_gfp_mask (struct drm_gem_object *obj) -{ - return mapping_gfp_mask(obj->filp->f_path.dentry->d_inode->i_mapping); -} - -static inline void -i915_gem_object_set_page_gfp_mask (struct drm_gem_object *obj, gfp_t gfp) -{ - mapping_set_gfp_mask(obj->filp->f_path.dentry->d_inode->i_mapping, gfp); -} - static int i915_gem_object_get_pages_or_evict(struct drm_gem_object *obj) { int ret; - ret = i915_gem_object_get_pages(obj); + ret = i915_gem_object_get_pages(obj, __GFP_NORETRY | __GFP_NOWARN); /* If we've insufficient memory to map in the pages, attempt * to make some space by throwing out some old buffers. */ if (ret == -ENOMEM) { struct drm_device *dev = obj->dev; - gfp_t gfp; ret = i915_gem_evict_something(dev, obj->size); if (ret) return ret; - gfp = i915_gem_object_get_page_gfp_mask(obj); - i915_gem_object_set_page_gfp_mask(obj, gfp & ~__GFP_NORETRY); - ret = i915_gem_object_get_pages(obj); - i915_gem_object_set_page_gfp_mask (obj, gfp); + ret = i915_gem_object_get_pages(obj, 0); } return ret; @@ -790,7 +774,7 @@ mutex_lock(&dev->struct_mutex); - ret = i915_gem_object_get_pages(obj); + ret = i915_gem_object_get_pages(obj, 0); if (ret != 0) goto fail_unlock; @@ -1288,6 +1272,7 @@ list->hash.key = list->file_offset_node->start; if (drm_ht_insert_item(&mm->offset_hash, &list->hash)) { DRM_ERROR("failed to add to map hash\n"); + ret = -ENOMEM; goto out_free_mm; } @@ -1309,7 +1294,7 @@ * i915_gem_release_mmap - remove physical page mappings * @obj: obj in question * - * Preserve the reservation of the mmaping with the DRM core code, but + * Preserve the reservation of the mmapping with the DRM core code, but * relinquish ownership of the pages back to the system. * * It is vital that we remove the page mapping if we have mapped a tiled @@ -1485,9 +1470,6 @@ obj_priv->dirty = 0; for (i = 0; i < page_count; i++) { - if (obj_priv->pages[i] == NULL) - break; - if (obj_priv->dirty) set_page_dirty(obj_priv->pages[i]); @@ -1567,6 +1549,8 @@ else list_move_tail(&obj_priv->list, &dev_priv->mm.inactive_list); + BUG_ON(!list_empty(&obj_priv->gpu_write_list)); + obj_priv->last_rendering_seqno = 0; if (obj_priv->active) { obj_priv->active = 0; @@ -1575,6 +1559,13 @@ i915_verify_inactive(dev, __FILE__, __LINE__); } +#define PIPE_CONTROL_FLUSH(addr) \ + OUT_RING(GFX_OP_PIPE_CONTROL | PIPE_CONTROL_QW_WRITE | \ + PIPE_CONTROL_DEPTH_STALL); \ + OUT_RING(addr | PIPE_CONTROL_GLOBAL_GTT); \ + OUT_RING(0); \ + OUT_RING(0); \ + /** * Creates a new sequence number, emitting a write of it to the status page * plus an interrupt, which will trigger i915_user_interrupt_handler. @@ -1583,7 +1574,7 @@ * * Returned sequence numbers are nonzero on success. */ -static uint32_t +uint32_t i915_add_request(struct drm_device *dev, struct drm_file *file_priv, uint32_t flush_domains) { @@ -1609,15 +1600,49 @@ if (dev_priv->mm.next_gem_seqno == 0) dev_priv->mm.next_gem_seqno++; - BEGIN_LP_RING(4); - OUT_RING(MI_STORE_DWORD_INDEX); - OUT_RING(I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); - OUT_RING(seqno); + if (HAS_PIPE_CONTROL(dev)) { + u32 scratch_addr = dev_priv->seqno_gfx_addr + 128; - OUT_RING(MI_USER_INTERRUPT); - ADVANCE_LP_RING(); + /* + * Workaround qword write incoherence by flushing the + * PIPE_NOTIFY buffers out to memory before requesting + * an interrupt. + */ + BEGIN_LP_RING(32); + OUT_RING(GFX_OP_PIPE_CONTROL | PIPE_CONTROL_QW_WRITE | + PIPE_CONTROL_WC_FLUSH | PIPE_CONTROL_TC_FLUSH); + OUT_RING(dev_priv->seqno_gfx_addr | PIPE_CONTROL_GLOBAL_GTT); + OUT_RING(seqno); + OUT_RING(0); + PIPE_CONTROL_FLUSH(scratch_addr); + scratch_addr += 128; /* write to separate cachelines */ + PIPE_CONTROL_FLUSH(scratch_addr); + scratch_addr += 128; + PIPE_CONTROL_FLUSH(scratch_addr); + scratch_addr += 128; + PIPE_CONTROL_FLUSH(scratch_addr); + scratch_addr += 128; + PIPE_CONTROL_FLUSH(scratch_addr); + scratch_addr += 128; + PIPE_CONTROL_FLUSH(scratch_addr); + OUT_RING(GFX_OP_PIPE_CONTROL | PIPE_CONTROL_QW_WRITE | + PIPE_CONTROL_WC_FLUSH | PIPE_CONTROL_TC_FLUSH | + PIPE_CONTROL_NOTIFY); + OUT_RING(dev_priv->seqno_gfx_addr | PIPE_CONTROL_GLOBAL_GTT); + OUT_RING(seqno); + OUT_RING(0); + ADVANCE_LP_RING(); + } else { + BEGIN_LP_RING(4); + OUT_RING(MI_STORE_DWORD_INDEX); + OUT_RING(I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT); + OUT_RING(seqno); - DRM_DEBUG("%d\n", seqno); + OUT_RING(MI_USER_INTERRUPT); + ADVANCE_LP_RING(); + } + + DRM_DEBUG_DRIVER("%d\n", seqno); request->seqno = seqno; request->emitted_jiffies = jiffies; @@ -1637,7 +1662,8 @@ struct drm_i915_gem_object *obj_priv, *next; list_for_each_entry_safe(obj_priv, next, - &dev_priv->mm.flushing_list, list) { + &dev_priv->mm.gpu_write_list, + gpu_write_list) { struct drm_gem_object *obj = obj_priv->obj; if ((obj->write_domain & flush_domains) == @@ -1645,6 +1671,7 @@ uint32_t old_write_domain = obj->write_domain; obj->write_domain = 0; + list_del_init(&obj_priv->gpu_write_list); i915_gem_object_move_to_active(obj, seqno); trace_i915_gem_object_change_domain(obj, @@ -1758,7 +1785,10 @@ { drm_i915_private_t *dev_priv = dev->dev_private; - return READ_HWSP(dev_priv, I915_GEM_HWS_INDEX); + if (HAS_PIPE_CONTROL(dev)) + return ((volatile u32 *)(dev_priv->seqno_page))[0]; + else + return READ_HWSP(dev_priv, I915_GEM_HWS_INDEX); } /** @@ -1820,12 +1850,8 @@ mutex_unlock(&dev->struct_mutex); } -/** - * Waits for a sequence number to be signaled, and cleans up the - * request and object lists appropriately for that event. - */ -static int -i915_wait_request(struct drm_device *dev, uint32_t seqno) +int +i915_do_wait_request(struct drm_device *dev, uint32_t seqno, int interruptible) { drm_i915_private_t *dev_priv = dev->dev_private; u32 ier; @@ -1837,7 +1863,7 @@ return -EIO; if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) { - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) ier = I915_READ(DEIER) | I915_READ(GTIER); else ier = I915_READ(IER); @@ -1852,10 +1878,15 @@ dev_priv->mm.waiting_gem_seqno = seqno; i915_user_irq_get(dev); - ret = wait_event_interruptible(dev_priv->irq_queue, - i915_seqno_passed(i915_get_gem_seqno(dev), - seqno) || - atomic_read(&dev_priv->mm.wedged)); + if (interruptible) + ret = wait_event_interruptible(dev_priv->irq_queue, + i915_seqno_passed(i915_get_gem_seqno(dev), seqno) || + atomic_read(&dev_priv->mm.wedged)); + else + wait_event(dev_priv->irq_queue, + i915_seqno_passed(i915_get_gem_seqno(dev), seqno) || + atomic_read(&dev_priv->mm.wedged)); + i915_user_irq_put(dev); dev_priv->mm.waiting_gem_seqno = 0; @@ -1879,6 +1910,16 @@ return ret; } +/** + * Waits for a sequence number to be signaled, and cleans up the + * request and object lists appropriately for that event. + */ +static int +i915_wait_request(struct drm_device *dev, uint32_t seqno) +{ + return i915_do_wait_request(dev, seqno, 1); +} + static void i915_gem_flush(struct drm_device *dev, uint32_t invalidate_domains, @@ -1947,7 +1988,7 @@ #endif BEGIN_LP_RING(2); OUT_RING(cmd); - OUT_RING(0); /* noop */ + OUT_RING(MI_NOOP); ADVANCE_LP_RING(); } } @@ -2009,9 +2050,6 @@ /* blow away mappings if mapped through GTT */ i915_gem_release_mmap(obj); - if (obj_priv->fence_reg != I915_FENCE_REG_NONE) - i915_gem_clear_fence_reg(obj); - /* Move the object to the CPU domain to ensure that * any possible CPU writes while it's not in the GTT * are flushed when we go to remap it. This will @@ -2027,6 +2065,10 @@ BUG_ON(obj_priv->active); + /* release the fence reg _after_ flushing */ + if (obj_priv->fence_reg != I915_FENCE_REG_NONE) + i915_gem_clear_fence_reg(obj); + if (obj_priv->agp_mem != NULL) { drm_unbind_agp(obj_priv->agp_mem); drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE); @@ -2087,8 +2129,8 @@ i915_gem_evict_everything(struct drm_device *dev) { drm_i915_private_t *dev_priv = dev->dev_private; - uint32_t seqno; int ret; + uint32_t seqno; bool lists_empty; spin_lock(&dev_priv->mm.active_list_lock); @@ -2110,6 +2152,8 @@ if (ret) return ret; + BUG_ON(!list_empty(&dev_priv->mm.flushing_list)); + ret = i915_gem_evict_from_inactive_list(dev); if (ret) return ret; @@ -2217,14 +2261,14 @@ } int -i915_gem_object_get_pages(struct drm_gem_object *obj) +i915_gem_object_get_pages(struct drm_gem_object *obj, + gfp_t gfpmask) { struct drm_i915_gem_object *obj_priv = obj->driver_private; int page_count, i; struct address_space *mapping; struct inode *inode; struct page *page; - int ret; if (obj_priv->pages_refcount++ != 0) return 0; @@ -2243,12 +2287,13 @@ inode = obj->filp->f_path.dentry->d_inode; mapping = inode->i_mapping; for (i = 0; i < page_count; i++) { - page = read_mapping_page(mapping, i, NULL); - if (IS_ERR(page)) { - ret = PTR_ERR(page); - i915_gem_object_put_pages(obj); - return ret; - } + page = read_cache_page_gfp(mapping, i, + mapping_gfp_mask (mapping) | + __GFP_COLD | + gfpmask); + if (IS_ERR(page)) + goto err_pages; + obj_priv->pages[i] = page; } @@ -2256,6 +2301,15 @@ i915_gem_object_do_bit_17_swizzle(obj); return 0; + +err_pages: + while (i--) + page_cache_release(obj_priv->pages[i]); + + drm_free_large(obj_priv->pages); + obj_priv->pages = NULL; + obj_priv->pages_refcount--; + return PTR_ERR(page); } static void i965_write_fence_reg(struct drm_i915_fence_reg *reg) @@ -2306,6 +2360,12 @@ pitch_val = obj_priv->stride / tile_width; pitch_val = ffs(pitch_val) - 1; + if (obj_priv->tiling_mode == I915_TILING_Y && + HAS_128_BYTE_Y_TILING(dev)) + WARN_ON(pitch_val > I830_FENCE_MAX_PITCH_VAL); + else + WARN_ON(pitch_val > I915_FENCE_MAX_PITCH_VAL); + val = obj_priv->gtt_offset; if (obj_priv->tiling_mode == I915_TILING_Y) val |= 1 << I830_FENCE_TILING_Y_SHIFT; @@ -2566,12 +2626,9 @@ drm_i915_private_t *dev_priv = dev->dev_private; struct drm_i915_gem_object *obj_priv = obj->driver_private; struct drm_mm_node *free_space; - bool retry_alloc = false; + gfp_t gfpmask = __GFP_NORETRY | __GFP_NOWARN; int ret; - if (dev_priv->mm.suspended) - return -EBUSY; - if (obj_priv->madv != I915_MADV_WILLNEED) { DRM_ERROR("Attempting to bind a purgeable object\n"); return -EINVAL; @@ -2613,15 +2670,7 @@ DRM_INFO("Binding object of size %zd at 0x%08x\n", obj->size, obj_priv->gtt_offset); #endif - if (retry_alloc) { - i915_gem_object_set_page_gfp_mask (obj, - i915_gem_object_get_page_gfp_mask (obj) & ~__GFP_NORETRY); - } - ret = i915_gem_object_get_pages(obj); - if (retry_alloc) { - i915_gem_object_set_page_gfp_mask (obj, - i915_gem_object_get_page_gfp_mask (obj) | __GFP_NORETRY); - } + ret = i915_gem_object_get_pages(obj, gfpmask); if (ret) { drm_mm_put_block(obj_priv->gtt_space); obj_priv->gtt_space = NULL; @@ -2631,9 +2680,9 @@ ret = i915_gem_evict_something(dev, obj->size); if (ret) { /* now try to shrink everyone else */ - if (! retry_alloc) { - retry_alloc = true; - goto search_free; + if (gfpmask) { + gfpmask = 0; + goto search_free; } return ret; @@ -2711,7 +2760,7 @@ old_write_domain = obj->write_domain; i915_gem_flush(dev, 0, obj->write_domain); seqno = i915_add_request(dev, NULL, obj->write_domain); - obj->write_domain = 0; + BUG_ON(obj->write_domain); i915_gem_object_move_to_active(obj, seqno); trace_i915_gem_object_change_domain(obj, @@ -2760,6 +2809,22 @@ old_write_domain); } +void +i915_gem_object_flush_write_domain(struct drm_gem_object *obj) +{ + switch (obj->write_domain) { + case I915_GEM_DOMAIN_GTT: + i915_gem_object_flush_gtt_write_domain(obj); + break; + case I915_GEM_DOMAIN_CPU: + i915_gem_object_flush_cpu_write_domain(obj); + break; + default: + i915_gem_object_flush_gpu_write_domain(obj); + break; + } +} + /** * Moves a single object to the GTT read, and possibly write domain. * @@ -2811,6 +2876,57 @@ return 0; } +/* + * Prepare buffer for display plane. Use uninterruptible for possible flush + * wait, as in modesetting process we're not supposed to be interrupted. + */ +int +i915_gem_object_set_to_display_plane(struct drm_gem_object *obj) +{ + struct drm_device *dev = obj->dev; + struct drm_i915_gem_object *obj_priv = obj->driver_private; + uint32_t old_write_domain, old_read_domains; + int ret; + + /* Not valid to be called on unbound objects. */ + if (obj_priv->gtt_space == NULL) + return -EINVAL; + + i915_gem_object_flush_gpu_write_domain(obj); + + /* Wait on any GPU rendering and flushing to occur. */ + if (obj_priv->active) { +#if WATCH_BUF + DRM_INFO("%s: object %p wait for seqno %08x\n", + __func__, obj, obj_priv->last_rendering_seqno); +#endif + ret = i915_do_wait_request(dev, obj_priv->last_rendering_seqno, 0); + if (ret != 0) + return ret; + } + + old_write_domain = obj->write_domain; + old_read_domains = obj->read_domains; + + obj->read_domains &= I915_GEM_DOMAIN_GTT; + + i915_gem_object_flush_cpu_write_domain(obj); + + /* It should now be out of any other write domains, and we can update + * the domain values for our changes. + */ + BUG_ON((obj->write_domain & ~I915_GEM_DOMAIN_GTT) != 0); + obj->read_domains |= I915_GEM_DOMAIN_GTT; + obj->write_domain = I915_GEM_DOMAIN_GTT; + obj_priv->dirty = 1; + + trace_i915_gem_object_change_domain(obj, + old_read_domains, + old_write_domain); + + return 0; +} + /** * Moves a single object to the CPU read, and possibly write domain. * @@ -3170,7 +3286,7 @@ static int i915_gem_object_pin_and_relocate(struct drm_gem_object *obj, struct drm_file *file_priv, - struct drm_i915_gem_exec_object *entry, + struct drm_i915_gem_exec_object2 *entry, struct drm_i915_gem_relocation_entry *relocs) { struct drm_device *dev = obj->dev; @@ -3178,12 +3294,35 @@ struct drm_i915_gem_object *obj_priv = obj->driver_private; int i, ret; void __iomem *reloc_page; + bool need_fence; + + need_fence = entry->flags & EXEC_OBJECT_NEEDS_FENCE && + obj_priv->tiling_mode != I915_TILING_NONE; + + /* Check fence reg constraints and rebind if necessary */ + if (need_fence && !i915_obj_fenceable(dev, obj)) + i915_gem_object_unbind(obj); /* Choose the GTT offset for our buffer and put it there. */ ret = i915_gem_object_pin(obj, (uint32_t) entry->alignment); if (ret) return ret; + /* + * Pre-965 chips need a fence register set up in order to + * properly handle blits to/from tiled surfaces. + */ + if (need_fence) { + ret = i915_gem_object_get_fence_reg(obj); + if (ret != 0) { + if (ret != -EBUSY && ret != -ERESTARTSYS) + DRM_ERROR("Failure to install fence: %d\n", + ret); + i915_gem_object_unpin(obj); + return ret; + } + } + entry->offset = obj_priv->gtt_offset; /* Apply the relocations, using the GTT aperture to avoid cache @@ -3345,7 +3484,7 @@ */ static int i915_dispatch_gem_execbuffer(struct drm_device *dev, - struct drm_i915_gem_execbuffer *exec, + struct drm_i915_gem_execbuffer2 *exec, struct drm_clip_rect *cliprects, uint64_t exec_offset) { @@ -3435,7 +3574,7 @@ } static int -i915_gem_get_relocs_from_user(struct drm_i915_gem_exec_object *exec_list, +i915_gem_get_relocs_from_user(struct drm_i915_gem_exec_object2 *exec_list, uint32_t buffer_count, struct drm_i915_gem_relocation_entry **relocs) { @@ -3450,8 +3589,10 @@ } *relocs = drm_calloc_large(reloc_count, sizeof(**relocs)); - if (*relocs == NULL) + if (*relocs == NULL) { + DRM_ERROR("failed to alloc relocs, count %d\n", reloc_count); return -ENOMEM; + } for (i = 0; i < buffer_count; i++) { struct drm_i915_gem_relocation_entry __user *user_relocs; @@ -3475,13 +3616,16 @@ } static int -i915_gem_put_relocs_to_user(struct drm_i915_gem_exec_object *exec_list, +i915_gem_put_relocs_to_user(struct drm_i915_gem_exec_object2 *exec_list, uint32_t buffer_count, struct drm_i915_gem_relocation_entry *relocs) { uint32_t reloc_count = 0, i; int ret = 0; + if (relocs == NULL) + return 0; + for (i = 0; i < buffer_count; i++) { struct drm_i915_gem_relocation_entry __user *user_relocs; int unwritten; @@ -3508,7 +3652,7 @@ } static int -i915_gem_check_execbuffer (struct drm_i915_gem_execbuffer *exec, +i915_gem_check_execbuffer (struct drm_i915_gem_execbuffer2 *exec, uint64_t exec_offset) { uint32_t exec_start, exec_len; @@ -3525,22 +3669,57 @@ return 0; } +static int +i915_gem_wait_for_pending_flip(struct drm_device *dev, + struct drm_gem_object **object_list, + int count) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + struct drm_i915_gem_object *obj_priv; + DEFINE_WAIT(wait); + int i, ret = 0; + + for (;;) { + prepare_to_wait(&dev_priv->pending_flip_queue, + &wait, TASK_INTERRUPTIBLE); + for (i = 0; i < count; i++) { + obj_priv = object_list[i]->driver_private; + if (atomic_read(&obj_priv->pending_flip) > 0) + break; + } + if (i == count) + break; + + if (!signal_pending(current)) { + mutex_unlock(&dev->struct_mutex); + schedule(); + mutex_lock(&dev->struct_mutex); + continue; + } + ret = -ERESTARTSYS; + break; + } + finish_wait(&dev_priv->pending_flip_queue, &wait); + + return ret; +} + int -i915_gem_execbuffer(struct drm_device *dev, void *data, - struct drm_file *file_priv) +i915_gem_do_execbuffer(struct drm_device *dev, void *data, + struct drm_file *file_priv, + struct drm_i915_gem_execbuffer2 *args, + struct drm_i915_gem_exec_object2 *exec_list) { drm_i915_private_t *dev_priv = dev->dev_private; - struct drm_i915_gem_execbuffer *args = data; - struct drm_i915_gem_exec_object *exec_list = NULL; struct drm_gem_object **object_list = NULL; struct drm_gem_object *batch_obj; struct drm_i915_gem_object *obj_priv; struct drm_clip_rect *cliprects = NULL; - struct drm_i915_gem_relocation_entry *relocs; - int ret, ret2, i, pinned = 0; + struct drm_i915_gem_relocation_entry *relocs = NULL; + int ret = 0, ret2, i, pinned = 0; uint64_t exec_offset; uint32_t seqno, flush_domains, reloc_index; - int pin_tries; + int pin_tries, flips; #if WATCH_EXEC DRM_INFO("buffers_ptr %d buffer_count %d len %08x\n", @@ -3551,31 +3730,21 @@ DRM_ERROR("execbuf with %d buffers\n", args->buffer_count); return -EINVAL; } - /* Copy in the exec list from userland */ - exec_list = drm_calloc_large(sizeof(*exec_list), args->buffer_count); - object_list = drm_calloc_large(sizeof(*object_list), args->buffer_count); - if (exec_list == NULL || object_list == NULL) { - DRM_ERROR("Failed to allocate exec or object list " - "for %d buffers\n", + object_list = drm_malloc_ab(sizeof(*object_list), args->buffer_count); + if (object_list == NULL) { + DRM_ERROR("Failed to allocate object list for %d buffers\n", args->buffer_count); ret = -ENOMEM; goto pre_mutex_err; } - ret = copy_from_user(exec_list, - (struct drm_i915_relocation_entry __user *) - (uintptr_t) args->buffers_ptr, - sizeof(*exec_list) * args->buffer_count); - if (ret != 0) { - DRM_ERROR("copy %d exec entries failed %d\n", - args->buffer_count, ret); - goto pre_mutex_err; - } if (args->num_cliprects != 0) { cliprects = kcalloc(args->num_cliprects, sizeof(*cliprects), GFP_KERNEL); - if (cliprects == NULL) + if (cliprects == NULL) { + ret = -ENOMEM; goto pre_mutex_err; + } ret = copy_from_user(cliprects, (struct drm_clip_rect __user *) @@ -3598,26 +3767,27 @@ i915_verify_inactive(dev, __FILE__, __LINE__); if (atomic_read(&dev_priv->mm.wedged)) { - DRM_ERROR("Execbuf while wedged\n"); mutex_unlock(&dev->struct_mutex); ret = -EIO; goto pre_mutex_err; } if (dev_priv->mm.suspended) { - DRM_ERROR("Execbuf while VT-switched.\n"); mutex_unlock(&dev->struct_mutex); ret = -EBUSY; goto pre_mutex_err; } /* Look up object handles */ + flips = 0; for (i = 0; i < args->buffer_count; i++) { object_list[i] = drm_gem_object_lookup(dev, file_priv, exec_list[i].handle); if (object_list[i] == NULL) { DRM_ERROR("Invalid object handle %d at index %d\n", exec_list[i].handle, i); + /* prevent error path from reading uninitialized data */ + args->buffer_count = i + 1; ret = -EBADF; goto err; } @@ -3626,10 +3796,20 @@ if (obj_priv->in_execbuffer) { DRM_ERROR("Object %p appears more than once in object list\n", object_list[i]); + /* prevent error path from reading uninitialized data */ + args->buffer_count = i + 1; ret = -EBADF; goto err; } obj_priv->in_execbuffer = true; + flips += atomic_read(&obj_priv->pending_flip); + } + + if (flips > 0) { + ret = i915_gem_wait_for_pending_flip(dev, object_list, + args->buffer_count); + if (ret) + goto err; } /* Pin and relocate */ @@ -3731,16 +3911,23 @@ i915_gem_flush(dev, dev->invalidate_domains, dev->flush_domains); - if (dev->flush_domains) + if (dev->flush_domains & I915_GEM_GPU_DOMAINS) (void)i915_add_request(dev, file_priv, dev->flush_domains); } for (i = 0; i < args->buffer_count; i++) { struct drm_gem_object *obj = object_list[i]; + struct drm_i915_gem_object *obj_priv = obj->driver_private; uint32_t old_write_domain = obj->write_domain; obj->write_domain = obj->pending_write_domain; + if (obj->write_domain) + list_move_tail(&obj_priv->gpu_write_list, + &dev_priv->mm.gpu_write_list); + else + list_del_init(&obj_priv->gpu_write_list); + trace_i915_gem_object_change_domain(obj, obj->read_domains, old_write_domain); @@ -3814,8 +4001,101 @@ mutex_unlock(&dev->struct_mutex); +pre_mutex_err: + /* Copy the updated relocations out regardless of current error + * state. Failure to update the relocs would mean that the next + * time userland calls execbuf, it would do so with presumed offset + * state that didn't match the actual object state. + */ + ret2 = i915_gem_put_relocs_to_user(exec_list, args->buffer_count, + relocs); + if (ret2 != 0) { + DRM_ERROR("Failed to copy relocations back out: %d\n", ret2); + + if (ret == 0) + ret = ret2; + } + + drm_free_large(object_list); + kfree(cliprects); + + return ret; +} + +/* + * Legacy execbuffer just creates an exec2 list from the original exec object + * list array and passes it to the real function. + */ +int +i915_gem_execbuffer(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_i915_gem_execbuffer *args = data; + struct drm_i915_gem_execbuffer2 exec2; + struct drm_i915_gem_exec_object *exec_list = NULL; + struct drm_i915_gem_exec_object2 *exec2_list = NULL; + int ret, i; + +#if WATCH_EXEC + DRM_INFO("buffers_ptr %d buffer_count %d len %08x\n", + (int) args->buffers_ptr, args->buffer_count, args->batch_len); +#endif + + if (args->buffer_count < 1) { + DRM_ERROR("execbuf with %d buffers\n", args->buffer_count); + return -EINVAL; + } + + /* Copy in the exec list from userland */ + exec_list = drm_malloc_ab(sizeof(*exec_list), args->buffer_count); + exec2_list = drm_malloc_ab(sizeof(*exec2_list), args->buffer_count); + if (exec_list == NULL || exec2_list == NULL) { + DRM_ERROR("Failed to allocate exec list for %d buffers\n", + args->buffer_count); + drm_free_large(exec_list); + drm_free_large(exec2_list); + return -ENOMEM; + } + ret = copy_from_user(exec_list, + (struct drm_i915_relocation_entry __user *) + (uintptr_t) args->buffers_ptr, + sizeof(*exec_list) * args->buffer_count); + if (ret != 0) { + DRM_ERROR("copy %d exec entries failed %d\n", + args->buffer_count, ret); + drm_free_large(exec_list); + drm_free_large(exec2_list); + return -EFAULT; + } + + for (i = 0; i < args->buffer_count; i++) { + exec2_list[i].handle = exec_list[i].handle; + exec2_list[i].relocation_count = exec_list[i].relocation_count; + exec2_list[i].relocs_ptr = exec_list[i].relocs_ptr; + exec2_list[i].alignment = exec_list[i].alignment; + exec2_list[i].offset = exec_list[i].offset; + if (!IS_I965G(dev)) + exec2_list[i].flags = EXEC_OBJECT_NEEDS_FENCE; + else + exec2_list[i].flags = 0; + } + + exec2.buffers_ptr = args->buffers_ptr; + exec2.buffer_count = args->buffer_count; + exec2.batch_start_offset = args->batch_start_offset; + exec2.batch_len = args->batch_len; + exec2.DR1 = args->DR1; + exec2.DR4 = args->DR4; + exec2.num_cliprects = args->num_cliprects; + exec2.cliprects_ptr = args->cliprects_ptr; + exec2.flags = 0; + + ret = i915_gem_do_execbuffer(dev, data, file_priv, &exec2, exec2_list); if (!ret) { /* Copy the new buffer offsets back to the user's exec list. */ + for (i = 0; i < args->buffer_count; i++) + exec_list[i].offset = exec2_list[i].offset; + /* ... and back out to userspace */ ret = copy_to_user((struct drm_i915_relocation_entry __user *) (uintptr_t) args->buffers_ptr, exec_list, @@ -3828,25 +4108,62 @@ } } - /* Copy the updated relocations out regardless of current error - * state. Failure to update the relocs would mean that the next - * time userland calls execbuf, it would do so with presumed offset - * state that didn't match the actual object state. - */ - ret2 = i915_gem_put_relocs_to_user(exec_list, args->buffer_count, - relocs); - if (ret2 != 0) { - DRM_ERROR("Failed to copy relocations back out: %d\n", ret2); + drm_free_large(exec_list); + drm_free_large(exec2_list); + return ret; +} - if (ret == 0) - ret = ret2; +int +i915_gem_execbuffer2(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_i915_gem_execbuffer2 *args = data; + struct drm_i915_gem_exec_object2 *exec2_list = NULL; + int ret; + +#if WATCH_EXEC + DRM_INFO("buffers_ptr %d buffer_count %d len %08x\n", + (int) args->buffers_ptr, args->buffer_count, args->batch_len); +#endif + + if (args->buffer_count < 1) { + DRM_ERROR("execbuf2 with %d buffers\n", args->buffer_count); + return -EINVAL; } -pre_mutex_err: - drm_free_large(object_list); - drm_free_large(exec_list); - kfree(cliprects); + exec2_list = drm_malloc_ab(sizeof(*exec2_list), args->buffer_count); + if (exec2_list == NULL) { + DRM_ERROR("Failed to allocate exec list for %d buffers\n", + args->buffer_count); + return -ENOMEM; + } + ret = copy_from_user(exec2_list, + (struct drm_i915_relocation_entry __user *) + (uintptr_t) args->buffers_ptr, + sizeof(*exec2_list) * args->buffer_count); + if (ret != 0) { + DRM_ERROR("copy %d exec entries failed %d\n", + args->buffer_count, ret); + drm_free_large(exec2_list); + return -EFAULT; + } + ret = i915_gem_do_execbuffer(dev, data, file_priv, args, exec2_list); + if (!ret) { + /* Copy the new buffer offsets back to the user's exec list. */ + ret = copy_to_user((struct drm_i915_relocation_entry __user *) + (uintptr_t) args->buffers_ptr, + exec2_list, + sizeof(*exec2_list) * args->buffer_count); + if (ret) { + ret = -EFAULT; + DRM_ERROR("failed to copy %d exec entries " + "back to user (%d)\n", + args->buffer_count, ret); + } + } + + drm_free_large(exec2_list); return ret; } @@ -3863,19 +4180,7 @@ if (ret) return ret; } - /* - * Pre-965 chips need a fence register set up in order to - * properly handle tiled surfaces. - */ - if (!IS_I965G(dev) && obj_priv->tiling_mode != I915_TILING_NONE) { - ret = i915_gem_object_get_fence_reg(obj); - if (ret != 0) { - if (ret != -EBUSY && ret != -ERESTARTSYS) - DRM_ERROR("Failure to install fence: %d\n", - ret); - return ret; - } - } + obj_priv->pin_count++; /* If the object is not active and not pending a flush, @@ -4133,6 +4438,7 @@ obj_priv->obj = obj; obj_priv->fence_reg = I915_FENCE_REG_NONE; INIT_LIST_HEAD(&obj_priv->list); + INIT_LIST_HEAD(&obj_priv->gpu_write_list); INIT_LIST_HEAD(&obj_priv->fence_list); obj_priv->madv = I915_MADV_WILLNEED; @@ -4314,6 +4620,49 @@ return 0; } +/* + * 965+ support PIPE_CONTROL commands, which provide finer grained control + * over cache flushing. + */ +static int +i915_gem_init_pipe_control(struct drm_device *dev) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + struct drm_gem_object *obj; + struct drm_i915_gem_object *obj_priv; + int ret; + + obj = drm_gem_object_alloc(dev, 4096); + if (obj == NULL) { + DRM_ERROR("Failed to allocate seqno page\n"); + ret = -ENOMEM; + goto err; + } + obj_priv = obj->driver_private; + obj_priv->agp_type = AGP_USER_CACHED_MEMORY; + + ret = i915_gem_object_pin(obj, 4096); + if (ret) + goto err_unref; + + dev_priv->seqno_gfx_addr = obj_priv->gtt_offset; + dev_priv->seqno_page = kmap(obj_priv->pages[0]); + if (dev_priv->seqno_page == NULL) + goto err_unpin; + + dev_priv->seqno_obj = obj; + memset(dev_priv->seqno_page, 0, PAGE_SIZE); + + return 0; + +err_unpin: + i915_gem_object_unpin(obj); +err_unref: + drm_gem_object_unreference(obj); +err: + return ret; +} + static int i915_gem_init_hws(struct drm_device *dev) { @@ -4331,7 +4680,8 @@ obj = drm_gem_object_alloc(dev, 4096); if (obj == NULL) { DRM_ERROR("Failed to allocate status page\n"); - return -ENOMEM; + ret = -ENOMEM; + goto err; } obj_priv = obj->driver_private; obj_priv->agp_type = AGP_USER_CACHED_MEMORY; @@ -4339,7 +4689,7 @@ ret = i915_gem_object_pin(obj, 4096); if (ret != 0) { drm_gem_object_unreference(obj); - return ret; + goto err_unref; } dev_priv->status_gfx_addr = obj_priv->gtt_offset; @@ -4348,17 +4698,47 @@ if (dev_priv->hw_status_page == NULL) { DRM_ERROR("Failed to map status page.\n"); memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map)); - i915_gem_object_unpin(obj); - drm_gem_object_unreference(obj); - return -EINVAL; + ret = -EINVAL; + goto err_unpin; } + + if (HAS_PIPE_CONTROL(dev)) { + ret = i915_gem_init_pipe_control(dev); + if (ret) + goto err_unpin; + } + dev_priv->hws_obj = obj; memset(dev_priv->hw_status_page, 0, PAGE_SIZE); I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr); I915_READ(HWS_PGA); /* posting read */ - DRM_DEBUG("hws offset: 0x%08x\n", dev_priv->status_gfx_addr); + DRM_DEBUG_DRIVER("hws offset: 0x%08x\n", dev_priv->status_gfx_addr); return 0; + +err_unpin: + i915_gem_object_unpin(obj); +err_unref: + drm_gem_object_unreference(obj); +err: + return 0; +} + +static void +i915_gem_cleanup_pipe_control(struct drm_device *dev) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + struct drm_gem_object *obj; + struct drm_i915_gem_object *obj_priv; + + obj = dev_priv->seqno_obj; + obj_priv = obj->driver_private; + kunmap(obj_priv->pages[0]); + i915_gem_object_unpin(obj); + drm_gem_object_unreference(obj); + dev_priv->seqno_obj = NULL; + + dev_priv->seqno_page = NULL; } static void @@ -4382,6 +4762,9 @@ memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map)); dev_priv->hw_status_page = NULL; + if (HAS_PIPE_CONTROL(dev)) + i915_gem_cleanup_pipe_control(dev); + /* Write high address into HWS_PGA when disabling. */ I915_WRITE(HWS_PGA, 0x1ffff000); } @@ -4584,6 +4967,7 @@ spin_lock_init(&dev_priv->mm.active_list_lock); INIT_LIST_HEAD(&dev_priv->mm.active_list); INIT_LIST_HEAD(&dev_priv->mm.flushing_list); + INIT_LIST_HEAD(&dev_priv->mm.gpu_write_list); INIT_LIST_HEAD(&dev_priv->mm.inactive_list); INIT_LIST_HEAD(&dev_priv->mm.request_list); INIT_LIST_HEAD(&dev_priv->mm.fence_list); @@ -4614,8 +4998,8 @@ for (i = 0; i < 8; i++) I915_WRITE(FENCE_REG_945_8 + (i * 4), 0); } - i915_gem_detect_bit_6_swizzle(dev); + init_waitqueue_head(&dev_priv->pending_flip_queue); } /* @@ -4638,7 +5022,7 @@ phys_obj->id = id; - phys_obj->handle = drm_pci_alloc(dev, size, 0, 0xffffffff); + phys_obj->handle = drm_pci_alloc(dev, size, 0); if (!phys_obj->handle) { ret = -ENOMEM; goto kfree_obj; @@ -4696,7 +5080,7 @@ if (!obj_priv->phys_obj) return; - ret = i915_gem_object_get_pages(obj); + ret = i915_gem_object_get_pages(obj, 0); if (ret) goto out; @@ -4754,7 +5138,7 @@ obj_priv->phys_obj = dev_priv->mm.phys_objs[id - 1]; obj_priv->phys_obj->cur_obj = obj; - ret = i915_gem_object_get_pages(obj); + ret = i915_gem_object_get_pages(obj, 0); if (ret) { DRM_ERROR("failed to get page list\n"); goto out; @@ -4790,7 +5174,7 @@ user_data = (char __user *) (uintptr_t) args->data_ptr; obj_addr = obj_priv->phys_obj->handle->vaddr + args->offset; - DRM_DEBUG("obj_addr %p, %lld\n", obj_addr, args->size); + DRM_DEBUG_DRIVER("obj_addr %p, %lld\n", obj_addr, args->size); ret = copy_from_user(obj_addr, user_data, args->size); if (ret) return -EFAULT; --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_irq.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_irq.c @@ -43,10 +43,13 @@ * we leave them always unmasked in IMR and then control enabling them through * PIPESTAT alone. */ -#define I915_INTERRUPT_ENABLE_FIX (I915_ASLE_INTERRUPT | \ - I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | \ - I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | \ - I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT) +#define I915_INTERRUPT_ENABLE_FIX \ + (I915_ASLE_INTERRUPT | \ + I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | \ + I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | \ + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | \ + I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | \ + I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT) /** Interrupts that we mask and unmask at runtime. */ #define I915_INTERRUPT_ENABLE_VAR (I915_USER_INTERRUPT) @@ -61,7 +64,7 @@ DRM_I915_VBLANK_PIPE_B) void -igdng_enable_graphics_irq(drm_i915_private_t *dev_priv, u32 mask) +ironlake_enable_graphics_irq(drm_i915_private_t *dev_priv, u32 mask) { if ((dev_priv->gt_irq_mask_reg & mask) != 0) { dev_priv->gt_irq_mask_reg &= ~mask; @@ -71,7 +74,7 @@ } static inline void -igdng_disable_graphics_irq(drm_i915_private_t *dev_priv, u32 mask) +ironlake_disable_graphics_irq(drm_i915_private_t *dev_priv, u32 mask) { if ((dev_priv->gt_irq_mask_reg & mask) != mask) { dev_priv->gt_irq_mask_reg |= mask; @@ -82,7 +85,7 @@ /* For display hotplug interrupt */ void -igdng_enable_display_irq(drm_i915_private_t *dev_priv, u32 mask) +ironlake_enable_display_irq(drm_i915_private_t *dev_priv, u32 mask) { if ((dev_priv->irq_mask_reg & mask) != 0) { dev_priv->irq_mask_reg &= ~mask; @@ -92,7 +95,7 @@ } static inline void -igdng_disable_display_irq(drm_i915_private_t *dev_priv, u32 mask) +ironlake_disable_display_irq(drm_i915_private_t *dev_priv, u32 mask) { if ((dev_priv->irq_mask_reg & mask) != mask) { dev_priv->irq_mask_reg |= mask; @@ -157,6 +160,20 @@ } /** + * intel_enable_asle - enable ASLE interrupt for OpRegion + */ +void intel_enable_asle (struct drm_device *dev) +{ + drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; + + if (IS_IRONLAKE(dev)) + ironlake_enable_display_irq(dev_priv, DE_GSE); + else + i915_enable_pipestat(dev_priv, 1, + I915_LEGACY_BLC_EVENT_ENABLE); +} + +/** * i915_pipe_enabled - check if a pipe is enabled * @dev: DRM device * @pipe: pipe to check @@ -191,7 +208,8 @@ low_frame = pipe ? PIPEBFRAMEPIXEL : PIPEAFRAMEPIXEL; if (!i915_pipe_enabled(dev, pipe)) { - DRM_DEBUG("trying to get vblank count for disabled pipe %d\n", pipe); + DRM_DEBUG_DRIVER("trying to get vblank count for disabled " + "pipe %d\n", pipe); return 0; } @@ -220,7 +238,8 @@ int reg = pipe ? PIPEB_FRMCOUNT_GM45 : PIPEA_FRMCOUNT_GM45; if (!i915_pipe_enabled(dev, pipe)) { - DRM_DEBUG("trying to get vblank count for disabled pipe %d\n", pipe); + DRM_DEBUG_DRIVER("trying to get vblank count for disabled " + "pipe %d\n", pipe); return 0; } @@ -250,12 +269,11 @@ drm_sysfs_hotplug_event(dev); } -irqreturn_t igdng_irq_handler(struct drm_device *dev) +irqreturn_t ironlake_irq_handler(struct drm_device *dev) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; int ret = IRQ_NONE; - u32 de_iir, gt_iir, de_ier; - u32 new_de_iir, new_gt_iir; + u32 de_iir, gt_iir, de_ier, pch_iir; struct drm_i915_master_private *master_priv; /* disable master interrupt before clearing iir */ @@ -265,36 +283,60 @@ de_iir = I915_READ(DEIIR); gt_iir = I915_READ(GTIIR); + pch_iir = I915_READ(SDEIIR); - for (;;) { - if (de_iir == 0 && gt_iir == 0) - break; + if (de_iir == 0 && gt_iir == 0 && pch_iir == 0) + goto done; - ret = IRQ_HANDLED; + ret = IRQ_HANDLED; - I915_WRITE(DEIIR, de_iir); - new_de_iir = I915_READ(DEIIR); - I915_WRITE(GTIIR, gt_iir); - new_gt_iir = I915_READ(GTIIR); + if (dev->primary->master) { + master_priv = dev->primary->master->driver_priv; + if (master_priv->sarea_priv) + master_priv->sarea_priv->last_dispatch = + READ_BREADCRUMB(dev_priv); + } - if (dev->primary->master) { - master_priv = dev->primary->master->driver_priv; - if (master_priv->sarea_priv) - master_priv->sarea_priv->last_dispatch = - READ_BREADCRUMB(dev_priv); - } + if (gt_iir & GT_PIPE_NOTIFY) { + u32 seqno = i915_get_gem_seqno(dev); + dev_priv->mm.irq_gem_seqno = seqno; + trace_i915_gem_request_complete(dev, seqno); + DRM_WAKEUP(&dev_priv->irq_queue); + dev_priv->hangcheck_count = 0; + mod_timer(&dev_priv->hangcheck_timer, jiffies + DRM_I915_HANGCHECK_PERIOD); + } - if (gt_iir & GT_USER_INTERRUPT) { - u32 seqno = i915_get_gem_seqno(dev); - dev_priv->mm.irq_gem_seqno = seqno; - trace_i915_gem_request_complete(dev, seqno); - DRM_WAKEUP(&dev_priv->irq_queue); - } + if (de_iir & DE_GSE) + ironlake_opregion_gse_intr(dev); + + if (de_iir & DE_PLANEA_FLIP_DONE) { + intel_prepare_page_flip(dev, 0); + intel_finish_page_flip(dev, 0); + } - de_iir = new_de_iir; - gt_iir = new_gt_iir; + if (de_iir & DE_PLANEB_FLIP_DONE) { + intel_prepare_page_flip(dev, 1); + intel_finish_page_flip(dev, 1); } + if (de_iir & DE_PIPEA_VBLANK) + drm_handle_vblank(dev, 0); + + if (de_iir & DE_PIPEB_VBLANK) + drm_handle_vblank(dev, 1); + + /* check event from PCH */ + if ((de_iir & DE_PCH_EVENT) && + (pch_iir & SDE_HOTPLUG_MASK)) { + queue_work(dev_priv->wq, &dev_priv->hotplug_work); + } + + /* should clear PCH hotplug event before clear CPU irq */ + I915_WRITE(SDEIIR, pch_iir); + I915_WRITE(GTIIR, gt_iir); + I915_WRITE(DEIIR, de_iir); + +done: I915_WRITE(DEIER, de_ier); (void)I915_READ(DEIER); @@ -317,19 +359,19 @@ char *reset_event[] = { "RESET=1", NULL }; char *reset_done_event[] = { "ERROR=0", NULL }; - DRM_DEBUG("generating error event\n"); + DRM_DEBUG_DRIVER("generating error event\n"); kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event); if (atomic_read(&dev_priv->mm.wedged)) { if (IS_I965G(dev)) { - DRM_DEBUG("resetting chip\n"); + DRM_DEBUG_DRIVER("resetting chip\n"); kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event); if (!i965_reset(dev, GDRST_RENDER)) { atomic_set(&dev_priv->mm.wedged, 0); kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event); } } else { - printk("reboot required\n"); + DRM_DEBUG_DRIVER("reboot required\n"); } } } @@ -355,7 +397,7 @@ error = kmalloc(sizeof(*error), GFP_ATOMIC); if (!error) { - DRM_DEBUG("out ot memory, not capturing error state\n"); + DRM_DEBUG_DRIVER("out ot memory, not capturing error state\n"); goto out; } @@ -512,7 +554,6 @@ /* * Wakeup waiting processes so they don't hang */ - printk("i915: Waking up sleeping processes\n"); DRM_WAKEUP(&dev_priv->irq_queue); } @@ -535,8 +576,8 @@ atomic_inc(&dev_priv->irq_received); - if (IS_IGDNG(dev)) - return igdng_irq_handler(dev); + if (HAS_PCH_SPLIT(dev)) + return ironlake_irq_handler(dev); iir = I915_READ(IIR); @@ -568,14 +609,14 @@ */ if (pipea_stats & 0x8000ffff) { if (pipea_stats & PIPE_FIFO_UNDERRUN_STATUS) - DRM_DEBUG("pipe a underrun\n"); + DRM_DEBUG_DRIVER("pipe a underrun\n"); I915_WRITE(PIPEASTAT, pipea_stats); irq_received = 1; } if (pipeb_stats & 0x8000ffff) { if (pipeb_stats & PIPE_FIFO_UNDERRUN_STATUS) - DRM_DEBUG("pipe b underrun\n"); + DRM_DEBUG_DRIVER("pipe b underrun\n"); I915_WRITE(PIPEBSTAT, pipeb_stats); irq_received = 1; } @@ -591,7 +632,7 @@ (iir & I915_DISPLAY_PORT_INTERRUPT)) { u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT); - DRM_DEBUG("hotplug event received, stat 0x%08x\n", + DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n", hotplug_status); if (hotplug_status & dev_priv->hotplug_supported_mask) queue_work(dev_priv->wq, @@ -599,27 +640,6 @@ I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status); I915_READ(PORT_HOTPLUG_STAT); - - /* EOS interrupts occurs */ - if (IS_IGD(dev) && - (hotplug_status & CRT_EOS_INT_STATUS)) { - u32 temp; - - DRM_DEBUG("EOS interrupt occurs\n"); - /* status is already cleared */ - temp = I915_READ(ADPA); - temp &= ~ADPA_DAC_ENABLE; - I915_WRITE(ADPA, temp); - - temp = I915_READ(PORT_HOTPLUG_EN); - temp &= ~CRT_EOS_INT_EN; - I915_WRITE(PORT_HOTPLUG_EN, temp); - - temp = I915_READ(PORT_HOTPLUG_STAT); - if (temp & CRT_EOS_INT_STATUS) - I915_WRITE(PORT_HOTPLUG_STAT, - CRT_EOS_INT_STATUS); - } } I915_WRITE(IIR, iir); @@ -641,14 +661,22 @@ mod_timer(&dev_priv->hangcheck_timer, jiffies + DRM_I915_HANGCHECK_PERIOD); } + if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT) + intel_prepare_page_flip(dev, 0); + + if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT) + intel_prepare_page_flip(dev, 1); + if (pipea_stats & vblank_status) { vblank++; drm_handle_vblank(dev, 0); + intel_finish_page_flip(dev, 0); } if (pipeb_stats & vblank_status) { vblank++; drm_handle_vblank(dev, 1); + intel_finish_page_flip(dev, 1); } if ((pipeb_stats & I915_LEGACY_BLC_EVENT_STATUS) || @@ -684,7 +712,7 @@ i915_kernel_lost_context(dev); - DRM_DEBUG("\n"); + DRM_DEBUG_DRIVER("\n"); dev_priv->counter++; if (dev_priv->counter > 0x7FFFFFFFUL) @@ -709,8 +737,8 @@ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); if (dev->irq_enabled && (++dev_priv->user_irq_refcount == 1)) { - if (IS_IGDNG(dev)) - igdng_enable_graphics_irq(dev_priv, GT_USER_INTERRUPT); + if (HAS_PCH_SPLIT(dev)) + ironlake_enable_graphics_irq(dev_priv, GT_PIPE_NOTIFY); else i915_enable_irq(dev_priv, I915_USER_INTERRUPT); } @@ -725,8 +753,8 @@ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); BUG_ON(dev->irq_enabled && dev_priv->user_irq_refcount <= 0); if (dev->irq_enabled && (--dev_priv->user_irq_refcount == 0)) { - if (IS_IGDNG(dev)) - igdng_disable_graphics_irq(dev_priv, GT_USER_INTERRUPT); + if (HAS_PCH_SPLIT(dev)) + ironlake_disable_graphics_irq(dev_priv, GT_PIPE_NOTIFY); else i915_disable_irq(dev_priv, I915_USER_INTERRUPT); } @@ -749,7 +777,7 @@ struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv; int ret = 0; - DRM_DEBUG("irq_nr=%d breadcrumb=%d\n", irq_nr, + DRM_DEBUG_DRIVER("irq_nr=%d breadcrumb=%d\n", irq_nr, READ_BREADCRUMB(dev_priv)); if (READ_BREADCRUMB(dev_priv) >= irq_nr) { @@ -832,11 +860,11 @@ if (!(pipeconf & PIPEACONF_ENABLE)) return -EINVAL; - if (IS_IGDNG(dev)) - return 0; - spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); - if (IS_I965G(dev)) + if (HAS_PCH_SPLIT(dev)) + ironlake_enable_display_irq(dev_priv, (pipe == 0) ? + DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); + else if (IS_I965G(dev)) i915_enable_pipestat(dev_priv, pipe, PIPE_START_VBLANK_INTERRUPT_ENABLE); else @@ -854,13 +882,14 @@ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; unsigned long irqflags; - if (IS_IGDNG(dev)) - return; - spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); - i915_disable_pipestat(dev_priv, pipe, - PIPE_VBLANK_INTERRUPT_ENABLE | - PIPE_START_VBLANK_INTERRUPT_ENABLE); + if (HAS_PCH_SPLIT(dev)) + ironlake_disable_display_irq(dev_priv, (pipe == 0) ? + DE_PIPEA_VBLANK: DE_PIPEB_VBLANK); + else + i915_disable_pipestat(dev_priv, pipe, + PIPE_VBLANK_INTERRUPT_ENABLE | + PIPE_START_VBLANK_INTERRUPT_ENABLE); spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags); } @@ -868,7 +897,7 @@ { struct drm_i915_private *dev_priv = dev->dev_private; - if (!IS_IGDNG(dev)) + if (!HAS_PCH_SPLIT(dev)) opregion_enable_asle(dev); dev_priv->irq_enabled = 1; } @@ -976,7 +1005,7 @@ /* drm_dma.h hooks */ -static void igdng_irq_preinstall(struct drm_device *dev) +static void ironlake_irq_preinstall(struct drm_device *dev) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; @@ -992,17 +1021,25 @@ I915_WRITE(GTIMR, 0xffffffff); I915_WRITE(GTIER, 0x0); (void) I915_READ(GTIER); + + /* south display irq */ + I915_WRITE(SDEIMR, 0xffffffff); + I915_WRITE(SDEIER, 0x0); + (void) I915_READ(SDEIER); } -static int igdng_irq_postinstall(struct drm_device *dev) +static int ironlake_irq_postinstall(struct drm_device *dev) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; /* enable kind of interrupts always enabled */ - u32 display_mask = DE_MASTER_IRQ_CONTROL /*| DE_PCH_EVENT */; - u32 render_mask = GT_USER_INTERRUPT; + u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT | + DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE; + u32 render_mask = GT_PIPE_NOTIFY; + u32 hotplug_mask = SDE_CRT_HOTPLUG | SDE_PORTB_HOTPLUG | + SDE_PORTC_HOTPLUG | SDE_PORTD_HOTPLUG; dev_priv->irq_mask_reg = ~display_mask; - dev_priv->de_irq_enable_reg = display_mask; + dev_priv->de_irq_enable_reg = display_mask | DE_PIPEA_VBLANK | DE_PIPEB_VBLANK; /* should always can generate irq */ I915_WRITE(DEIIR, I915_READ(DEIIR)); @@ -1019,6 +1056,14 @@ I915_WRITE(GTIER, dev_priv->gt_irq_enable_reg); (void) I915_READ(GTIER); + dev_priv->pch_irq_mask_reg = ~hotplug_mask; + dev_priv->pch_irq_enable_reg = hotplug_mask; + + I915_WRITE(SDEIIR, I915_READ(SDEIIR)); + I915_WRITE(SDEIMR, dev_priv->pch_irq_mask_reg); + I915_WRITE(SDEIER, dev_priv->pch_irq_enable_reg); + (void) I915_READ(SDEIER); + return 0; } @@ -1031,8 +1076,8 @@ INIT_WORK(&dev_priv->hotplug_work, i915_hotplug_work_func); INIT_WORK(&dev_priv->error_work, i915_error_work_func); - if (IS_IGDNG(dev)) { - igdng_irq_preinstall(dev); + if (HAS_PCH_SPLIT(dev)) { + ironlake_irq_preinstall(dev); return; } @@ -1049,6 +1094,10 @@ (void) I915_READ(IER); } +/* + * Must be called after intel_modeset_init or hotplug interrupts won't be + * enabled correctly. + */ int i915_driver_irq_postinstall(struct drm_device *dev) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; @@ -1059,8 +1108,8 @@ dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; - if (IS_IGDNG(dev)) - return igdng_irq_postinstall(dev); + if (HAS_PCH_SPLIT(dev)) + return ironlake_irq_postinstall(dev); /* Unmask the interrupts that we always want on. */ dev_priv->irq_mask_reg = ~I915_INTERRUPT_ENABLE_FIX; @@ -1071,19 +1120,23 @@ if (I915_HAS_HOTPLUG(dev)) { u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN); - /* Leave other bits alone */ - hotplug_en |= HOTPLUG_EN_MASK; + /* Note HDMI and DP share bits */ + if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS) + hotplug_en |= HDMIB_HOTPLUG_INT_EN; + if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS) + hotplug_en |= HDMIC_HOTPLUG_INT_EN; + if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS) + hotplug_en |= HDMID_HOTPLUG_INT_EN; + if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS) + hotplug_en |= SDVOC_HOTPLUG_INT_EN; + if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS) + hotplug_en |= SDVOB_HOTPLUG_INT_EN; + if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) + hotplug_en |= CRT_HOTPLUG_INT_EN; + /* Ignore TV since it's buggy */ + I915_WRITE(PORT_HOTPLUG_EN, hotplug_en); - dev_priv->hotplug_supported_mask = CRT_HOTPLUG_INT_STATUS | - TV_HOTPLUG_INT_STATUS | SDVOC_HOTPLUG_INT_STATUS | - SDVOB_HOTPLUG_INT_STATUS; - if (IS_G4X(dev)) { - dev_priv->hotplug_supported_mask |= - HDMIB_HOTPLUG_INT_STATUS | - HDMIC_HOTPLUG_INT_STATUS | - HDMID_HOTPLUG_INT_STATUS; - } /* Enable in IER... */ enable_mask |= I915_DISPLAY_PORT_INTERRUPT; /* and unmask in IMR */ @@ -1120,7 +1173,7 @@ return 0; } -static void igdng_irq_uninstall(struct drm_device *dev) +static void ironlake_irq_uninstall(struct drm_device *dev) { drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; I915_WRITE(HWSTAM, 0xffffffff); @@ -1143,8 +1196,8 @@ dev_priv->vblank_pipe = 0; - if (IS_IGDNG(dev)) { - igdng_irq_uninstall(dev); + if (HAS_PCH_SPLIT(dev)) { + ironlake_irq_uninstall(dev); return; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_debugfs.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_debugfs.c @@ -27,6 +27,7 @@ */ #include +#include #include "drmP.h" #include "drm.h" #include "i915_drm.h" @@ -96,13 +97,14 @@ { struct drm_gem_object *obj = obj_priv->obj; - seq_printf(m, " %p: %s %8zd %08x %08x %d %s", + seq_printf(m, " %p: %s %8zd %08x %08x %d%s%s", obj, get_pin_flag(obj_priv), obj->size, obj->read_domains, obj->write_domain, obj_priv->last_rendering_seqno, - obj_priv->dirty ? "dirty" : ""); + obj_priv->dirty ? " dirty" : "", + obj_priv->madv == I915_MADV_DONTNEED ? " purgeable" : ""); if (obj->name) seq_printf(m, " (name: %d)", obj->name); @@ -160,7 +162,7 @@ struct drm_device *dev = node->minor->dev; drm_i915_private_t *dev_priv = dev->dev_private; - if (!IS_IGDNG(dev)) { + if (!HAS_PCH_SPLIT(dev)) { seq_printf(m, "Interrupt enable: %08x\n", I915_READ(IER)); seq_printf(m, "Interrupt identity: %08x\n", @@ -270,7 +272,7 @@ mem = kmap_atomic(pages[page], KM_USER0); for (i = 0; i < PAGE_SIZE; i += 4) seq_printf(m, "%08x : %08x\n", i, mem[i / 4]); - kunmap_atomic(pages[page], KM_USER0); + kunmap_atomic(mem, KM_USER0); } } @@ -288,7 +290,7 @@ list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) { obj = obj_priv->obj; if (obj->read_domains & I915_GEM_DOMAIN_COMMAND) { - ret = i915_gem_object_get_pages(obj); + ret = i915_gem_object_get_pages(obj, 0); if (ret) { DRM_ERROR("Failed to get pages: %d\n", ret); spin_unlock(&dev_priv->mm.active_list_lock); @@ -384,37 +386,111 @@ return 0; } -static int i915_registers_info(struct seq_file *m, void *data) { - struct drm_info_node *node = (struct drm_info_node *) m->private; - struct drm_device *dev = node->minor->dev; +static int +i915_wedged_open(struct inode *inode, + struct file *filp) +{ + filp->private_data = inode->i_private; + return 0; +} + +static ssize_t +i915_wedged_read(struct file *filp, + char __user *ubuf, + size_t max, + loff_t *ppos) +{ + struct drm_device *dev = filp->private_data; + drm_i915_private_t *dev_priv = dev->dev_private; + char buf[80]; + int len; + + len = snprintf(buf, sizeof (buf), + "wedged : %d\n", + atomic_read(&dev_priv->mm.wedged)); + + return simple_read_from_buffer(ubuf, max, ppos, buf, len); +} + +static ssize_t +i915_wedged_write(struct file *filp, + const char __user *ubuf, + size_t cnt, + loff_t *ppos) +{ + struct drm_device *dev = filp->private_data; drm_i915_private_t *dev_priv = dev->dev_private; - uint32_t reg; + char buf[20]; + int val = 1; + + if (cnt > 0) { + if (cnt > sizeof (buf) - 1) + return -EINVAL; + + if (copy_from_user(buf, ubuf, cnt)) + return -EFAULT; + buf[cnt] = 0; + + val = simple_strtoul(buf, NULL, 0); + } + + DRM_INFO("Manually setting wedged to %d\n", val); -#define DUMP_RANGE(start, end) \ - for (reg=start; reg < end; reg += 4) \ - seq_printf(m, "%08x\t%08x\n", reg, I915_READ(reg)); - - DUMP_RANGE(0x00000, 0x00fff); /* VGA registers */ - DUMP_RANGE(0x02000, 0x02fff); /* instruction, memory, interrupt control registers */ - DUMP_RANGE(0x03000, 0x031ff); /* FENCE and PPGTT control registers */ - DUMP_RANGE(0x03200, 0x03fff); /* frame buffer compression registers */ - DUMP_RANGE(0x05000, 0x05fff); /* I/O control registers */ - DUMP_RANGE(0x06000, 0x06fff); /* clock control registers */ - DUMP_RANGE(0x07000, 0x07fff); /* 3D internal debug registers */ - DUMP_RANGE(0x07400, 0x088ff); /* GPE debug registers */ - DUMP_RANGE(0x0a000, 0x0afff); /* display palette registers */ - DUMP_RANGE(0x10000, 0x13fff); /* MMIO MCHBAR */ - DUMP_RANGE(0x30000, 0x3ffff); /* overlay registers */ - DUMP_RANGE(0x60000, 0x6ffff); /* display engine pipeline registers */ - DUMP_RANGE(0x70000, 0x72fff); /* display and cursor registers */ - DUMP_RANGE(0x73000, 0x73fff); /* performance counters */ + atomic_set(&dev_priv->mm.wedged, val); + if (val) { + DRM_WAKEUP(&dev_priv->irq_queue); + queue_work(dev_priv->wq, &dev_priv->error_work); + } + + return cnt; +} + +static const struct file_operations i915_wedged_fops = { + .owner = THIS_MODULE, + .open = i915_wedged_open, + .read = i915_wedged_read, + .write = i915_wedged_write, +}; + +/* As the drm_debugfs_init() routines are called before dev->dev_private is + * allocated we need to hook into the minor for release. */ +static int +drm_add_fake_info_node(struct drm_minor *minor, + struct dentry *ent, + const void *key) +{ + struct drm_info_node *node; + + node = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); + if (node == NULL) { + debugfs_remove(ent); + return -ENOMEM; + } + + node->minor = minor; + node->dent = ent; + node->info_ent = (void *) key; + list_add(&node->list, &minor->debugfs_nodes.list); return 0; } +static int i915_wedged_create(struct dentry *root, struct drm_minor *minor) +{ + struct drm_device *dev = minor->dev; + struct dentry *ent; + + ent = debugfs_create_file("i915_wedged", + S_IRUGO | S_IWUSR, + root, dev, + &i915_wedged_fops); + if (IS_ERR(ent)) + return PTR_ERR(ent); + + return drm_add_fake_info_node(minor, ent, &i915_wedged_fops); +} static struct drm_info_list i915_debugfs_list[] = { - {"i915_regs", i915_registers_info, 0}, {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST}, @@ -432,6 +508,12 @@ int i915_debugfs_init(struct drm_minor *minor) { + int ret; + + ret = i915_wedged_create(minor->debugfs_root, minor); + if (ret) + return ret; + return drm_debugfs_create_files(i915_debugfs_list, I915_DEBUGFS_ENTRIES, minor->debugfs_root, minor); @@ -441,7 +523,8 @@ { drm_debugfs_remove_files(i915_debugfs_list, I915_DEBUGFS_ENTRIES, minor); + drm_debugfs_remove_files((struct drm_info_list *) &i915_wedged_fops, + 1, minor); } #endif /* CONFIG_DEBUG_FS */ - --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_drv.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_drv.c @@ -33,7 +33,6 @@ #include "i915_drm.h" #include "i915_drv.h" -#include "drm_pciids.h" #include #include "drm_crtc_helper.h" @@ -46,36 +45,150 @@ unsigned int i915_powersave = 1; module_param_named(powersave, i915_powersave, int, 0400); +unsigned int i915_lvds_downclock = 0; +module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400); + static struct drm_driver driver; +extern int intel_agp_enabled; + +#define INTEL_VGA_DEVICE(id, info) { \ + .class = PCI_CLASS_DISPLAY_VGA << 8, \ + .class_mask = 0xffff00, \ + .vendor = 0x8086, \ + .device = id, \ + .subvendor = PCI_ANY_ID, \ + .subdevice = PCI_ANY_ID, \ + .driver_data = (unsigned long) info } + +const static struct intel_device_info intel_i830_info = { + .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1, +}; + +const static struct intel_device_info intel_845g_info = { + .is_i8xx = 1, +}; + +const static struct intel_device_info intel_i85x_info = { + .is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1, +}; + +const static struct intel_device_info intel_i865g_info = { + .is_i8xx = 1, +}; + +const static struct intel_device_info intel_i915g_info = { + .is_i915g = 1, .is_i9xx = 1, .cursor_needs_physical = 1, +}; +const static struct intel_device_info intel_i915gm_info = { + .is_i9xx = 1, .is_mobile = 1, + .cursor_needs_physical = 1, +}; +const static struct intel_device_info intel_i945g_info = { + .is_i9xx = 1, .has_hotplug = 1, .cursor_needs_physical = 1, +}; +const static struct intel_device_info intel_i945gm_info = { + .is_i945gm = 1, .is_i9xx = 1, .is_mobile = 1, + .has_hotplug = 1, .cursor_needs_physical = 1, +}; + +const static struct intel_device_info intel_i965g_info = { + .is_i965g = 1, .is_i9xx = 1, .has_hotplug = 1, +}; + +const static struct intel_device_info intel_i965gm_info = { + .is_i965g = 1, .is_mobile = 1, .is_i965gm = 1, .is_i9xx = 1, + .is_mobile = 1, .has_fbc = 1, .has_rc6 = 1, + .has_hotplug = 1, +}; + +const static struct intel_device_info intel_g33_info = { + .is_g33 = 1, .is_i9xx = 1, .need_gfx_hws = 1, + .has_hotplug = 1, +}; -static struct pci_device_id pciidlist[] = { - i915_PCI_IDS +const static struct intel_device_info intel_g45_info = { + .is_i965g = 1, .is_g4x = 1, .is_i9xx = 1, .need_gfx_hws = 1, + .has_pipe_cxsr = 1, + .has_hotplug = 1, +}; + +const static struct intel_device_info intel_gm45_info = { + .is_i965g = 1, .is_mobile = 1, .is_g4x = 1, .is_i9xx = 1, + .is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1, .has_rc6 = 1, + .has_pipe_cxsr = 1, + .has_hotplug = 1, +}; + +const static struct intel_device_info intel_pineview_info = { + .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_i9xx = 1, + .need_gfx_hws = 1, + .has_hotplug = 1, +}; + +const static struct intel_device_info intel_ironlake_d_info = { + .is_ironlake = 1, .is_i965g = 1, .is_i9xx = 1, .need_gfx_hws = 1, + .has_pipe_cxsr = 1, + .has_hotplug = 1, +}; + +const static struct intel_device_info intel_ironlake_m_info = { + .is_ironlake = 1, .is_mobile = 1, .is_i965g = 1, .is_i9xx = 1, + .need_gfx_hws = 1, .has_rc6 = 1, + .has_hotplug = 1, +}; + +const static struct pci_device_id pciidlist[] = { + INTEL_VGA_DEVICE(0x3577, &intel_i830_info), + INTEL_VGA_DEVICE(0x2562, &intel_845g_info), + INTEL_VGA_DEVICE(0x3582, &intel_i85x_info), + INTEL_VGA_DEVICE(0x35e8, &intel_i85x_info), + INTEL_VGA_DEVICE(0x2572, &intel_i865g_info), + INTEL_VGA_DEVICE(0x2582, &intel_i915g_info), + INTEL_VGA_DEVICE(0x258a, &intel_i915g_info), + INTEL_VGA_DEVICE(0x2592, &intel_i915gm_info), + INTEL_VGA_DEVICE(0x2772, &intel_i945g_info), + INTEL_VGA_DEVICE(0x27a2, &intel_i945gm_info), + INTEL_VGA_DEVICE(0x27ae, &intel_i945gm_info), + INTEL_VGA_DEVICE(0x2972, &intel_i965g_info), + INTEL_VGA_DEVICE(0x2982, &intel_i965g_info), + INTEL_VGA_DEVICE(0x2992, &intel_i965g_info), + INTEL_VGA_DEVICE(0x29a2, &intel_i965g_info), + INTEL_VGA_DEVICE(0x29b2, &intel_g33_info), + INTEL_VGA_DEVICE(0x29c2, &intel_g33_info), + INTEL_VGA_DEVICE(0x29d2, &intel_g33_info), + INTEL_VGA_DEVICE(0x2a02, &intel_i965gm_info), + INTEL_VGA_DEVICE(0x2a12, &intel_i965gm_info), + INTEL_VGA_DEVICE(0x2a42, &intel_gm45_info), + INTEL_VGA_DEVICE(0x2e02, &intel_g45_info), + INTEL_VGA_DEVICE(0x2e12, &intel_g45_info), + INTEL_VGA_DEVICE(0x2e22, &intel_g45_info), + INTEL_VGA_DEVICE(0x2e32, &intel_g45_info), + INTEL_VGA_DEVICE(0x2e42, &intel_g45_info), + INTEL_VGA_DEVICE(0xa001, &intel_pineview_info), + INTEL_VGA_DEVICE(0xa011, &intel_pineview_info), + INTEL_VGA_DEVICE(0x0042, &intel_ironlake_d_info), + INTEL_VGA_DEVICE(0x0046, &intel_ironlake_m_info), + {0, 0, 0} }; #if defined(CONFIG_DRM_I915_KMS) MODULE_DEVICE_TABLE(pci, pciidlist); #endif -static int i915_suspend(struct drm_device *dev, pm_message_t state) +static int i915_drm_freeze(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; - if (!dev || !dev_priv) { - DRM_ERROR("dev: %p, dev_priv: %p\n", dev, dev_priv); - DRM_ERROR("DRM not initialized, aborting suspend.\n"); - return -ENODEV; - } - - if (state.event == PM_EVENT_PRETHAW) - return 0; - pci_save_state(dev->pdev); /* If KMS is active, we do the leavevt stuff here */ if (drm_core_check_feature(dev, DRIVER_MODESET)) { - if (i915_gem_idle(dev)) + int error = i915_gem_idle(dev); + if (error) { dev_err(&dev->pdev->dev, - "GEM idle failed, resume may fail\n"); + "GEM idle failed, resume might fail\n"); + return error; + } drm_irq_uninstall(dev); } @@ -83,26 +196,42 @@ intel_opregion_free(dev, 1); + /* Modeset on resume, not lid events */ + dev_priv->modeset_on_lid = 0; + + return 0; +} + +static int i915_suspend(struct drm_device *dev, pm_message_t state) +{ + int error; + + if (!dev || !dev->dev_private) { + DRM_ERROR("dev: %p\n", dev); + DRM_ERROR("DRM not initialized, aborting suspend.\n"); + return -ENODEV; + } + + if (state.event == PM_EVENT_PRETHAW) + return 0; + + error = i915_drm_freeze(dev); + if (error) + return error; + if (state.event == PM_EVENT_SUSPEND) { /* Shut down the device */ pci_disable_device(dev->pdev); pci_set_power_state(dev->pdev, PCI_D3hot); } - /* Modeset on resume, not lid events */ - dev_priv->modeset_on_lid = 0; - return 0; } -static int i915_resume(struct drm_device *dev) +static int i915_drm_thaw(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; - int ret = 0; - - if (pci_enable_device(dev->pdev)) - return -1; - pci_set_master(dev->pdev); + int error = 0; i915_restore_state(dev); @@ -113,21 +242,28 @@ mutex_lock(&dev->struct_mutex); dev_priv->mm.suspended = 0; - ret = i915_gem_init_ringbuffer(dev); - if (ret != 0) - ret = -1; + error = i915_gem_init_ringbuffer(dev); mutex_unlock(&dev->struct_mutex); drm_irq_install(dev); - } - if (drm_core_check_feature(dev, DRIVER_MODESET)) { + /* Resume the modeset for every activated CRTC */ drm_helper_resume_force_mode(dev); } dev_priv->modeset_on_lid = 0; - return ret; + return error; +} + +static int i915_resume(struct drm_device *dev) +{ + if (pci_enable_device(dev->pdev)) + return -EIO; + + pci_set_master(dev->pdev); + + return i915_drm_thaw(dev); } /** @@ -268,22 +404,73 @@ drm_put_dev(dev); } -static int -i915_pci_suspend(struct pci_dev *pdev, pm_message_t state) +static int i915_pm_suspend(struct device *dev) { - struct drm_device *dev = pci_get_drvdata(pdev); + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *drm_dev = pci_get_drvdata(pdev); + int error; + + if (!drm_dev || !drm_dev->dev_private) { + dev_err(dev, "DRM not initialized, aborting suspend.\n"); + return -ENODEV; + } + + error = i915_drm_freeze(drm_dev); + if (error) + return error; + + pci_disable_device(pdev); + pci_set_power_state(pdev, PCI_D3hot); + + return 0; +} + +static int i915_pm_resume(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *drm_dev = pci_get_drvdata(pdev); - return i915_suspend(dev, state); + return i915_resume(drm_dev); } -static int -i915_pci_resume(struct pci_dev *pdev) +static int i915_pm_freeze(struct device *dev) { - struct drm_device *dev = pci_get_drvdata(pdev); + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *drm_dev = pci_get_drvdata(pdev); + + if (!drm_dev || !drm_dev->dev_private) { + dev_err(dev, "DRM not initialized, aborting suspend.\n"); + return -ENODEV; + } - return i915_resume(dev); + return i915_drm_freeze(drm_dev); } +static int i915_pm_thaw(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *drm_dev = pci_get_drvdata(pdev); + + return i915_drm_thaw(drm_dev); +} + +static int i915_pm_poweroff(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *drm_dev = pci_get_drvdata(pdev); + + return i915_drm_freeze(drm_dev); +} + +const struct dev_pm_ops i915_pm_ops = { + .suspend = i915_pm_suspend, + .resume = i915_pm_resume, + .freeze = i915_pm_freeze, + .thaw = i915_pm_thaw, + .poweroff = i915_pm_poweroff, + .restore = i915_pm_resume, +}; + static struct vm_operations_struct i915_gem_vm_ops = { .fault = i915_gem_fault, .open = drm_gem_vm_open, @@ -303,8 +490,11 @@ .lastclose = i915_driver_lastclose, .preclose = i915_driver_preclose, .postclose = i915_driver_postclose, + + /* Used in place of i915_pm_ops for non-DRIVER_MODESET */ .suspend = i915_suspend, .resume = i915_resume, + .device_is_agp = i915_driver_device_is_agp, .enable_vblank = i915_enable_vblank, .disable_vblank = i915_disable_vblank, @@ -329,10 +519,11 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_gem_mmap, .poll = drm_poll, .fasync = drm_fasync, + .read = drm_read, #ifdef CONFIG_COMPAT .compat_ioctl = i915_compat_ioctl, #endif @@ -343,10 +534,7 @@ .id_table = pciidlist, .probe = i915_pci_probe, .remove = i915_pci_remove, -#ifdef CONFIG_PM - .resume = i915_pci_resume, - .suspend = i915_pci_suspend, -#endif + .driver.pm = &i915_pm_ops, }, .name = DRIVER_NAME, @@ -359,6 +547,11 @@ static int __init i915_init(void) { + if (!intel_agp_enabled) { + DRM_ERROR("drm/i915 can't work without intel_agp module!\n"); + return -ENODEV; + } + driver.num_ioctls = i915_max_ioctl; i915_gem_shrinker_init(); @@ -372,6 +565,22 @@ * Allow optional vga_text_mode_force boot option to override * the default behavior. */ + /* + * If the user has not specified modesetting the check for known + * bad devices and disable them. + */ + if (i915_modeset == -1) { + static struct pci_device_id i915_badmodeset[] = { + INTEL_VGA_DEVICE(0x3577, 0), + INTEL_VGA_DEVICE(0x2562, 0), + INTEL_VGA_DEVICE(0x3582, 0), + { }, + }; + if (pci_dev_present(i915_badmodeset)) { + DRM_INFO("i915 disabling kernel modesetting for known bad device.\n"); + i915_modeset = 0; + } + } #if defined(CONFIG_DRM_I915_KMS) if (i915_modeset != 0) driver.driver_features |= DRIVER_MODESET; --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_gem_tiling.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_gem_tiling.c @@ -121,7 +121,7 @@ 0, pcibios_align_resource, dev_priv->bridge_dev); if (ret) { - DRM_DEBUG("failed bus alloc: %d\n", ret); + DRM_DEBUG_DRIVER("failed bus alloc: %d\n", ret); dev_priv->mch_res.start = 0; goto out; } @@ -209,8 +209,8 @@ uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN; bool need_disable; - if (IS_IGDNG(dev)) { - /* On IGDNG whatever DRAM config, GPU always do + if (IS_IRONLAKE(dev) || IS_GEN6(dev)) { + /* On Ironlake whatever DRAM config, GPU always do * same swizzling setup. */ swizzle_x = I915_BIT_6_SWIZZLE_9_10; @@ -304,35 +304,39 @@ /** - * Returns the size of the fence for a tiled object of the given size. + * Returns whether an object is currently fenceable. If not, it may need + * to be unbound and have its pitch adjusted. */ -static int -i915_get_fence_size(struct drm_device *dev, int size) +bool +i915_obj_fenceable(struct drm_device *dev, struct drm_gem_object *obj) { - int i; - int start; + struct drm_i915_gem_object *obj_priv = obj->driver_private; if (IS_I965G(dev)) { /* The 965 can have fences at any page boundary. */ - return ALIGN(size, 4096); + if (obj->size & 4095) + return false; + return true; + } else if (IS_I9XX(dev)) { + if (obj_priv->gtt_offset & ~I915_FENCE_START_MASK) + return false; } else { - /* Align the size to a power of two greater than the smallest - * fence size. - */ - if (IS_I9XX(dev)) - start = 1024 * 1024; - else - start = 512 * 1024; + if (obj_priv->gtt_offset & ~I830_FENCE_START_MASK) + return false; + } - for (i = start; i < size; i <<= 1) - ; + /* Power of two sized... */ + if (obj->size & (obj->size - 1)) + return false; - return i; - } + /* Objects must be size aligned as well */ + if (obj_priv->gtt_offset & (obj->size - 1)) + return false; + return true; } /* Check pitch constriants for all chips & tiling formats */ -static bool +bool i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode) { int tile_width; @@ -353,21 +357,17 @@ * reg, so dont bother to check the size */ if (stride / 128 > I965_FENCE_MAX_PITCH_VAL) return false; - } else if (IS_I9XX(dev)) { - uint32_t pitch_val = ffs(stride / tile_width) - 1; - - /* XXX: For Y tiling, FENCE_MAX_PITCH_VAL is actually 6 (8KB) - * instead of 4 (2KB) on 945s. - */ - if (pitch_val > I915_FENCE_MAX_PITCH_VAL || - size > (I830_FENCE_MAX_SIZE_VAL << 20)) + } else if (IS_GEN3(dev) || IS_GEN2(dev)) { + if (stride > 8192) return false; - } else { - uint32_t pitch_val = ffs(stride / tile_width) - 1; - if (pitch_val > I830_FENCE_MAX_PITCH_VAL || - size > (I830_FENCE_MAX_SIZE_VAL << 19)) - return false; + if (IS_GEN3(dev)) { + if (size > I830_FENCE_MAX_SIZE_VAL << 20) + return false; + } else { + if (size > I830_FENCE_MAX_SIZE_VAL << 19) + return false; + } } /* 965+ just needs multiples of tile width */ @@ -384,12 +384,6 @@ if (stride & (stride - 1)) return false; - /* We don't 0handle the aperture area covered by the fence being bigger - * than the object size. - */ - if (i915_get_fence_size(dev, size) != size) - return false; - return true; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/dvo_ch7017.c +++ linux-2.6.32/drivers/gpu/drm/i915/dvo_ch7017.c @@ -249,7 +249,8 @@ if (val != CH7017_DEVICE_ID_VALUE && val != CH7018_DEVICE_ID_VALUE && val != CH7019_DEVICE_ID_VALUE) { - DRM_DEBUG("ch701x not detected, got %d: from %s Slave %d.\n", + DRM_DEBUG_KMS("ch701x not detected, got %d: from %s " + "Slave %d.\n", val, i2cbus->adapter.name,dvo->slave_addr); goto fail; } @@ -284,7 +285,7 @@ uint8_t horizontal_active_pixel_output, vertical_active_line_output; uint8_t active_input_line_output; - DRM_DEBUG("Registers before mode setting\n"); + DRM_DEBUG_KMS("Registers before mode setting\n"); ch7017_dump_regs(dvo); /* LVDS PLL settings from page 75 of 7017-7017ds.pdf*/ @@ -346,7 +347,7 @@ /* Turn the LVDS back on with new settings. */ ch7017_write(dvo, CH7017_LVDS_POWER_DOWN, lvds_power_down); - DRM_DEBUG("Registers after mode setting\n"); + DRM_DEBUG_KMS("Registers after mode setting\n"); ch7017_dump_regs(dvo); } @@ -386,7 +387,7 @@ #define DUMP(reg) \ do { \ ch7017_read(dvo, reg, &val); \ - DRM_DEBUG(#reg ": %02x\n", val); \ + DRM_DEBUG_KMS(#reg ": %02x\n", val); \ } while (0) DUMP(CH7017_HORIZONTAL_ACTIVE_PIXEL_INPUT); --- linux-2.6.32.orig/drivers/gpu/drm/i915/dvo_tfp410.c +++ linux-2.6.32/drivers/gpu/drm/i915/dvo_tfp410.c @@ -130,7 +130,7 @@ }; if (!tfp->quiet) { - DRM_DEBUG("Unable to read register 0x%02x from %s:%02x.\n", + DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } return false; @@ -156,7 +156,7 @@ return true; if (!tfp->quiet) { - DRM_DEBUG("Unable to write register 0x%02x to %s:%d.\n", + DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } @@ -191,13 +191,15 @@ tfp->quiet = true; if ((id = tfp410_getid(dvo, TFP410_VID_LO)) != TFP410_VID) { - DRM_DEBUG("tfp410 not detected got VID %X: from %s Slave %d.\n", + DRM_DEBUG_KMS("tfp410 not detected got VID %X: from %s " + "Slave %d.\n", id, adapter->name, dvo->slave_addr); goto out; } if ((id = tfp410_getid(dvo, TFP410_DID_LO)) != TFP410_DID) { - DRM_DEBUG("tfp410 not detected got DID %X: from %s Slave %d.\n", + DRM_DEBUG_KMS("tfp410 not detected got DID %X: from %s " + "Slave %d.\n", id, adapter->name, dvo->slave_addr); goto out; } @@ -262,33 +264,33 @@ uint8_t val, val2; tfp410_readb(dvo, TFP410_REV, &val); - DRM_DEBUG("TFP410_REV: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_REV: 0x%02X\n", val); tfp410_readb(dvo, TFP410_CTL_1, &val); - DRM_DEBUG("TFP410_CTL1: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_CTL1: 0x%02X\n", val); tfp410_readb(dvo, TFP410_CTL_2, &val); - DRM_DEBUG("TFP410_CTL2: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_CTL2: 0x%02X\n", val); tfp410_readb(dvo, TFP410_CTL_3, &val); - DRM_DEBUG("TFP410_CTL3: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_CTL3: 0x%02X\n", val); tfp410_readb(dvo, TFP410_USERCFG, &val); - DRM_DEBUG("TFP410_USERCFG: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_USERCFG: 0x%02X\n", val); tfp410_readb(dvo, TFP410_DE_DLY, &val); - DRM_DEBUG("TFP410_DE_DLY: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_DE_DLY: 0x%02X\n", val); tfp410_readb(dvo, TFP410_DE_CTL, &val); - DRM_DEBUG("TFP410_DE_CTL: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_DE_CTL: 0x%02X\n", val); tfp410_readb(dvo, TFP410_DE_TOP, &val); - DRM_DEBUG("TFP410_DE_TOP: 0x%02X\n", val); + DRM_LOG_KMS("TFP410_DE_TOP: 0x%02X\n", val); tfp410_readb(dvo, TFP410_DE_CNT_LO, &val); tfp410_readb(dvo, TFP410_DE_CNT_HI, &val2); - DRM_DEBUG("TFP410_DE_CNT: 0x%02X%02X\n", val2, val); + DRM_LOG_KMS("TFP410_DE_CNT: 0x%02X%02X\n", val2, val); tfp410_readb(dvo, TFP410_DE_LIN_LO, &val); tfp410_readb(dvo, TFP410_DE_LIN_HI, &val2); - DRM_DEBUG("TFP410_DE_LIN: 0x%02X%02X\n", val2, val); + DRM_LOG_KMS("TFP410_DE_LIN: 0x%02X%02X\n", val2, val); tfp410_readb(dvo, TFP410_H_RES_LO, &val); tfp410_readb(dvo, TFP410_H_RES_HI, &val2); - DRM_DEBUG("TFP410_H_RES: 0x%02X%02X\n", val2, val); + DRM_LOG_KMS("TFP410_H_RES: 0x%02X%02X\n", val2, val); tfp410_readb(dvo, TFP410_V_RES_LO, &val); tfp410_readb(dvo, TFP410_V_RES_HI, &val2); - DRM_DEBUG("TFP410_V_RES: 0x%02X%02X\n", val2, val); + DRM_LOG_KMS("TFP410_V_RES: 0x%02X%02X\n", val2, val); } static void tfp410_save(struct intel_dvo_device *dvo) --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_tv.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_tv.c @@ -1213,20 +1213,17 @@ tv_ctl |= TV_TRILEVEL_SYNC; if (tv_mode->pal_burst) tv_ctl |= TV_PAL_BURST; + scctl1 = 0; - /* dda1 implies valid video levels */ - if (tv_mode->dda1_inc) { + if (tv_mode->dda1_inc) scctl1 |= TV_SC_DDA1_EN; - } - if (tv_mode->dda2_inc) scctl1 |= TV_SC_DDA2_EN; - if (tv_mode->dda3_inc) scctl1 |= TV_SC_DDA3_EN; - scctl1 |= tv_mode->sc_reset; - scctl1 |= video_levels->burst << TV_BURST_LEVEL_SHIFT; + if (video_levels) + scctl1 |= video_levels->burst << TV_BURST_LEVEL_SHIFT; scctl1 |= tv_mode->dda1_inc << TV_SCDDA1_INC_SHIFT; scctl2 = tv_mode->dda2_size << TV_SCDDA2_SIZE_SHIFT | @@ -1416,16 +1413,16 @@ * 0 0 0 Component */ if ((tv_dac & TVDAC_SENSE_MASK) == (TVDAC_B_SENSE | TVDAC_C_SENSE)) { - DRM_DEBUG("Detected Composite TV connection\n"); + DRM_DEBUG_KMS("Detected Composite TV connection\n"); type = DRM_MODE_CONNECTOR_Composite; } else if ((tv_dac & (TVDAC_A_SENSE|TVDAC_B_SENSE)) == TVDAC_A_SENSE) { - DRM_DEBUG("Detected S-Video TV connection\n"); + DRM_DEBUG_KMS("Detected S-Video TV connection\n"); type = DRM_MODE_CONNECTOR_SVIDEO; } else if ((tv_dac & TVDAC_SENSE_MASK) == 0) { - DRM_DEBUG("Detected Component TV connection\n"); + DRM_DEBUG_KMS("Detected Component TV connection\n"); type = DRM_MODE_CONNECTOR_Component; } else { - DRM_DEBUG("No TV connection detected\n"); + DRM_DEBUG_KMS("No TV connection detected\n"); type = -1; } @@ -1702,6 +1699,41 @@ .destroy = intel_tv_enc_destroy, }; +/* + * Enumerate the child dev array parsed from VBT to check whether + * the integrated TV is present. + * If it is present, return 1. + * If it is not present, return false. + * If no child dev is parsed from VBT, it assumes that the TV is present. + */ +static int tv_is_present_in_vbt(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + struct child_device_config *p_child; + int i, ret; + + if (!dev_priv->child_dev_num) + return 1; + + ret = 0; + for (i = 0; i < dev_priv->child_dev_num; i++) { + p_child = dev_priv->child_dev + i; + /* + * If the device type is not TV, continue. + */ + if (p_child->device_type != DEVICE_TYPE_INT_TV && + p_child->device_type != DEVICE_TYPE_TV) + continue; + /* Only when the addin_offset is non-zero, it is regarded + * as present. + */ + if (p_child->addin_offset) { + ret = 1; + break; + } + } + return ret; +} void intel_tv_init(struct drm_device *dev) @@ -1717,6 +1749,10 @@ if ((I915_READ(TV_CTL) & TV_FUSE_STATE_MASK) == TV_FUSE_STATE_DISABLED) return; + if (!tv_is_present_in_vbt(dev)) { + DRM_DEBUG_KMS("Integrated TV is not present.\n"); + return; + } /* Even if we have an encoder we may not have a connector */ if (!dev_priv->int_tv_support) return; --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_dma.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_dma.c @@ -123,7 +123,7 @@ drm_i915_private_t *dev_priv = dev->dev_private; /* Program Hardware Status Page */ dev_priv->status_page_dmah = - drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff); + drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE); if (!dev_priv->status_page_dmah) { DRM_ERROR("Can not allocate hardware status page\n"); @@ -134,6 +134,10 @@ memset(dev_priv->hw_status_page, 0, PAGE_SIZE); + if (IS_I965G(dev)) + dev_priv->dma_status_page |= (dev_priv->dma_status_page >> 28) & + 0xf0; + I915_WRITE(HWS_PGA, dev_priv->dma_status_page); DRM_DEBUG_DRIVER("Enabled hardware status page\n"); return 0; @@ -731,8 +735,10 @@ if (cmdbuf->num_cliprects) { cliprects = kcalloc(cmdbuf->num_cliprects, sizeof(struct drm_clip_rect), GFP_KERNEL); - if (cliprects == NULL) + if (cliprects == NULL) { + ret = -ENOMEM; goto fail_batch_free; + } ret = copy_from_user(cliprects, cmdbuf->cliprects, cmdbuf->num_cliprects * @@ -807,9 +813,19 @@ case I915_PARAM_NUM_FENCES_AVAIL: value = dev_priv->num_fence_regs - dev_priv->fence_reg_start; break; + case I915_PARAM_HAS_OVERLAY: + value = dev_priv->overlay ? 1 : 0; + break; + case I915_PARAM_HAS_PAGEFLIPPING: + value = 1; + break; + case I915_PARAM_HAS_EXECBUF2: + /* depends on GEM */ + value = dev_priv->has_gem; + break; default: DRM_DEBUG_DRIVER("Unknown parameter %d\n", - param->param); + param->param); return -EINVAL; } @@ -962,15 +978,21 @@ * Some of the preallocated space is taken by the GTT * and popup. GTT is 1K per MB of aperture size, and popup is 4K. */ - if (IS_G4X(dev) || IS_IGD(dev) || IS_IGDNG(dev)) + if (IS_G4X(dev) || IS_PINEVIEW(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) overhead = 4096; else overhead = (*aperture_size / 1024) + 4096; switch (tmp & INTEL_GMCH_GMS_MASK) { case INTEL_855_GMCH_GMS_DISABLED: - DRM_ERROR("video memory is disabled\n"); - return -1; + /* XXX: This is what my A1 silicon has. */ + if (IS_GEN6(dev)) { + stolen = 64 * 1024 * 1024; + } else { + DRM_ERROR("video memory is disabled\n"); + return -1; + } + break; case INTEL_855_GMCH_GMS_STOLEN_1M: stolen = 1 * 1024 * 1024; break; @@ -1048,7 +1070,7 @@ int gtt_offset, gtt_size; if (IS_I965G(dev)) { - if (IS_G4X(dev) || IS_IGDNG(dev)) { + if (IS_G4X(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) { gtt_offset = 2*1024*1024; gtt_size = 2*1024*1024; } else { @@ -1070,7 +1092,7 @@ entry = *(volatile u32 *)(gtt + (gtt_addr / 1024)); - DRM_DEBUG("GTT addr: 0x%08lx, PTE: 0x%08lx\n", gtt_addr, entry); + DRM_DEBUG_DRIVER("GTT addr: 0x%08lx, PTE: 0x%08lx\n", gtt_addr, entry); /* Mask out these reserved bits on this hardware. */ if (!IS_I9XX(dev) || IS_I915G(dev) || IS_I915GM(dev) || @@ -1096,7 +1118,7 @@ phys =(entry & PTE_ADDRESS_MASK) | ((uint64_t)(entry & PTE_ADDRESS_MASK_HIGH) << (32 - 4)); - DRM_DEBUG("GTT addr: 0x%08lx, phys addr: 0x%08lx\n", gtt_addr, phys); + DRM_DEBUG_DRIVER("GTT addr: 0x%08lx, phys addr: 0x%08lx\n", gtt_addr, phys); return phys; } @@ -1111,7 +1133,8 @@ { struct drm_i915_private *dev_priv = dev->dev_private; struct drm_mm_node *compressed_fb, *compressed_llb; - unsigned long cfb_base, ll_base; + unsigned long cfb_base; + unsigned long ll_base = 0; /* Leave 1M for line length buffer & misc. */ compressed_fb = drm_mm_search_free(&dev_priv->vram, size, 4096, 0); @@ -1194,14 +1217,6 @@ dev->mode_config.fb_base = drm_get_resource_start(dev, fb_bar) & 0xff000000; - if (IS_MOBILE(dev) || IS_I9XX(dev)) - dev_priv->cursor_needs_physical = true; - else - dev_priv->cursor_needs_physical = false; - - if (IS_I965G(dev) || IS_G33(dev)) - dev_priv->cursor_needs_physical = false; - /* Basic memrange allocator for stolen space (aka vram) */ drm_mm_init(&dev_priv->vram, 0, prealloc_size); DRM_INFO("set up %ldM of stolen space\n", prealloc_size / (1024*1024)); @@ -1251,6 +1266,8 @@ if (ret) goto destroy_ringbuffer; + intel_modeset_init(dev); + ret = drm_irq_install(dev); if (ret) goto destroy_ringbuffer; @@ -1265,8 +1282,6 @@ I915_WRITE(INSTPM, (1 << 5) | (1 << 21)); - intel_modeset_init(dev); - drm_helper_initial_config(dev); return 0; @@ -1306,7 +1321,7 @@ drm_i915_private_t *dev_priv = dev->dev_private; u32 tmp; - if (!IS_IGD(dev)) + if (!IS_PINEVIEW(dev)) return; tmp = I915_READ(CLKCFG); @@ -1354,7 +1369,7 @@ { struct drm_i915_private *dev_priv = dev->dev_private; resource_size_t base, size; - int ret = 0, mmio_bar = IS_I9XX(dev) ? 0 : 1; + int ret = 0, mmio_bar; uint32_t agp_size, prealloc_size, prealloc_start; /* i915 has 4 more counters */ @@ -1370,8 +1385,10 @@ dev->dev_private = (void *)dev_priv; dev_priv->dev = dev; + dev_priv->info = (struct intel_device_info *) flags; /* Add register map (needed for suspend/resume) */ + mmio_bar = IS_I9XX(dev) ? 0 : 1; base = drm_get_resource_start(dev, mmio_bar); size = drm_get_resource_len(dev, mmio_bar); @@ -1413,7 +1430,7 @@ if (ret) goto out_iomapfree; - dev_priv->wq = create_workqueue("i915"); + dev_priv->wq = create_singlethread_workqueue("i915"); if (dev_priv->wq == NULL) { DRM_ERROR("Failed to create our workqueue.\n"); ret = -ENOMEM; @@ -1434,7 +1451,7 @@ dev->driver->get_vblank_counter = i915_get_vblank_counter; dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ - if (IS_G4X(dev) || IS_IGDNG(dev)) { + if (IS_G4X(dev) || IS_IRONLAKE(dev) || IS_GEN6(dev)) { dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */ dev->driver->get_vblank_counter = gm45_get_vblank_counter; } @@ -1489,9 +1506,7 @@ } /* Must be done after probing outputs */ - /* FIXME: verify on IGDNG */ - if (!IS_IGDNG(dev)) - intel_opregion_init(dev, 0); + intel_opregion_init(dev, 0); setup_timer(&dev_priv->hangcheck_timer, i915_hangcheck_elapsed, (unsigned long) dev); @@ -1525,6 +1540,15 @@ } if (drm_core_check_feature(dev, DRIVER_MODESET)) { + /* + * free the memory space allocated for the child device + * config parsed from VBT + */ + if (dev_priv->child_dev && dev_priv->child_dev_num) { + kfree(dev_priv->child_dev); + dev_priv->child_dev = NULL; + dev_priv->child_dev_num = 0; + } drm_irq_uninstall(dev); vga_client_register(dev->pdev, NULL, NULL, NULL); } @@ -1535,8 +1559,7 @@ if (dev_priv->regs != NULL) iounmap(dev_priv->regs); - if (!IS_IGDNG(dev)) - intel_opregion_free(dev, 0); + intel_opregion_free(dev, 0); if (drm_core_check_feature(dev, DRIVER_MODESET)) { intel_modeset_cleanup(dev); @@ -1548,6 +1571,8 @@ mutex_unlock(&dev->struct_mutex); drm_mm_takedown(&dev_priv->vram); i915_gem_lastclose(dev); + + intel_cleanup_overlay(dev); } pci_dev_put(dev_priv->bridge_dev); @@ -1638,6 +1663,7 @@ DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), DRM_IOCTL_DEF(DRM_I915_GEM_INIT, i915_gem_init_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER, i915_gem_execbuffer, DRM_AUTH), + DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER2, i915_gem_execbuffer2, DRM_AUTH), DRM_IOCTL_DEF(DRM_I915_GEM_PIN, i915_gem_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY), DRM_IOCTL_DEF(DRM_I915_GEM_UNPIN, i915_gem_unpin_ioctl, DRM_AUTH|DRM_ROOT_ONLY), DRM_IOCTL_DEF(DRM_I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_AUTH), @@ -1656,6 +1682,8 @@ DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, 0), DRM_IOCTL_DEF(DRM_I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, 0), DRM_IOCTL_DEF(DRM_I915_GEM_MADVISE, i915_gem_madvise_ioctl, 0), + DRM_IOCTL_DEF(DRM_I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MASTER|DRM_CONTROL_ALLOW), + DRM_IOCTL_DEF(DRM_I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM_CONTROL_ALLOW), }; int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls); --- linux-2.6.32.orig/drivers/gpu/drm/i915/dvo_ivch.c +++ linux-2.6.32/drivers/gpu/drm/i915/dvo_ivch.c @@ -202,7 +202,8 @@ }; if (!priv->quiet) { - DRM_DEBUG("Unable to read register 0x%02x from %s:%02x.\n", + DRM_DEBUG_KMS("Unable to read register 0x%02x from " + "%s:%02x.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } return false; @@ -230,7 +231,7 @@ return true; if (!priv->quiet) { - DRM_DEBUG("Unable to write register 0x%02x to %s:%d.\n", + DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } @@ -261,7 +262,7 @@ * the address it's responding on. */ if ((temp & VR00_BASE_ADDRESS_MASK) != dvo->slave_addr) { - DRM_DEBUG("ivch detect failed due to address mismatch " + DRM_DEBUG_KMS("ivch detect failed due to address mismatch " "(%d vs %d)\n", (temp & VR00_BASE_ADDRESS_MASK), dvo->slave_addr); goto out; @@ -367,41 +368,41 @@ uint16_t val; ivch_read(dvo, VR00, &val); - DRM_DEBUG("VR00: 0x%04x\n", val); + DRM_LOG_KMS("VR00: 0x%04x\n", val); ivch_read(dvo, VR01, &val); - DRM_DEBUG("VR01: 0x%04x\n", val); + DRM_LOG_KMS("VR01: 0x%04x\n", val); ivch_read(dvo, VR30, &val); - DRM_DEBUG("VR30: 0x%04x\n", val); + DRM_LOG_KMS("VR30: 0x%04x\n", val); ivch_read(dvo, VR40, &val); - DRM_DEBUG("VR40: 0x%04x\n", val); + DRM_LOG_KMS("VR40: 0x%04x\n", val); /* GPIO registers */ ivch_read(dvo, VR80, &val); - DRM_DEBUG("VR80: 0x%04x\n", val); + DRM_LOG_KMS("VR80: 0x%04x\n", val); ivch_read(dvo, VR81, &val); - DRM_DEBUG("VR81: 0x%04x\n", val); + DRM_LOG_KMS("VR81: 0x%04x\n", val); ivch_read(dvo, VR82, &val); - DRM_DEBUG("VR82: 0x%04x\n", val); + DRM_LOG_KMS("VR82: 0x%04x\n", val); ivch_read(dvo, VR83, &val); - DRM_DEBUG("VR83: 0x%04x\n", val); + DRM_LOG_KMS("VR83: 0x%04x\n", val); ivch_read(dvo, VR84, &val); - DRM_DEBUG("VR84: 0x%04x\n", val); + DRM_LOG_KMS("VR84: 0x%04x\n", val); ivch_read(dvo, VR85, &val); - DRM_DEBUG("VR85: 0x%04x\n", val); + DRM_LOG_KMS("VR85: 0x%04x\n", val); ivch_read(dvo, VR86, &val); - DRM_DEBUG("VR86: 0x%04x\n", val); + DRM_LOG_KMS("VR86: 0x%04x\n", val); ivch_read(dvo, VR87, &val); - DRM_DEBUG("VR87: 0x%04x\n", val); + DRM_LOG_KMS("VR87: 0x%04x\n", val); ivch_read(dvo, VR88, &val); - DRM_DEBUG("VR88: 0x%04x\n", val); + DRM_LOG_KMS("VR88: 0x%04x\n", val); /* Scratch register 0 - AIM Panel type */ ivch_read(dvo, VR8E, &val); - DRM_DEBUG("VR8E: 0x%04x\n", val); + DRM_LOG_KMS("VR8E: 0x%04x\n", val); /* Scratch register 1 - Status register */ ivch_read(dvo, VR8F, &val); - DRM_DEBUG("VR8F: 0x%04x\n", val); + DRM_LOG_KMS("VR8F: 0x%04x\n", val); } static void ivch_save(struct intel_dvo_device *dvo) --- linux-2.6.32.orig/drivers/gpu/drm/i915/dvo_ch7xxx.c +++ linux-2.6.32/drivers/gpu/drm/i915/dvo_ch7xxx.c @@ -152,7 +152,7 @@ }; if (!ch7xxx->quiet) { - DRM_DEBUG("Unable to read register 0x%02x from %s:%02x.\n", + DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } return false; @@ -179,7 +179,7 @@ return true; if (!ch7xxx->quiet) { - DRM_DEBUG("Unable to write register 0x%02x to %s:%d.\n", + DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } @@ -207,7 +207,8 @@ name = ch7xxx_get_id(vendor); if (!name) { - DRM_DEBUG("ch7xxx not detected; got 0x%02x from %s slave %d.\n", + DRM_DEBUG_KMS("ch7xxx not detected; got 0x%02x from %s " + "slave %d.\n", vendor, adapter->name, dvo->slave_addr); goto out; } @@ -217,13 +218,14 @@ goto out; if (device != CH7xxx_DID) { - DRM_DEBUG("ch7xxx not detected; got 0x%02x from %s slave %d.\n", + DRM_DEBUG_KMS("ch7xxx not detected; got 0x%02x from %s " + "slave %d.\n", vendor, adapter->name, dvo->slave_addr); goto out; } ch7xxx->quiet = false; - DRM_DEBUG("Detected %s chipset, vendor/device ID 0x%02x/0x%02x\n", + DRM_DEBUG_KMS("Detected %s chipset, vendor/device ID 0x%02x/0x%02x\n", name, vendor, device); return true; out: @@ -315,8 +317,8 @@ for (i = 0; i < CH7xxx_NUM_REGS; i++) { if ((i % 8) == 0 ) - DRM_DEBUG("\n %02X: ", i); - DRM_DEBUG("%02X ", ch7xxx->mode_reg.regs[i]); + DRM_LOG_KMS("\n %02X: ", i); + DRM_LOG_KMS("%02X ", ch7xxx->mode_reg.regs[i]); } } --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_fb.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_fb.c @@ -70,7 +70,7 @@ /** - * Curretly it is assumed that the old framebuffer is reused. + * Currently it is assumed that the old framebuffer is reused. * * LOCKING * caller should hold the mode config lock. @@ -148,7 +148,7 @@ mutex_lock(&dev->struct_mutex); - ret = i915_gem_object_pin(fbo, PAGE_SIZE); + ret = i915_gem_object_pin(fbo, 64*1024); if (ret) { DRM_ERROR("failed to pin fb: %d\n", ret); goto out_unref; @@ -230,8 +230,9 @@ par->intel_fb = intel_fb; /* To allow resizeing without swapping buffers */ - DRM_DEBUG("allocated %dx%d fb: 0x%08x, bo %p\n", intel_fb->base.width, - intel_fb->base.height, obj_priv->gtt_offset, fbo); + DRM_DEBUG_KMS("allocated %dx%d fb: 0x%08x, bo %p\n", + intel_fb->base.width, intel_fb->base.height, + obj_priv->gtt_offset, fbo); mutex_unlock(&dev->struct_mutex); return 0; @@ -249,7 +250,7 @@ { int ret; - DRM_DEBUG("\n"); + DRM_DEBUG_KMS("\n"); ret = drm_fb_helper_single_fb_probe(dev, 32, intelfb_create); return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_dp.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_dp.c @@ -33,7 +33,8 @@ #include "intel_drv.h" #include "i915_drm.h" #include "i915_drv.h" -#include "intel_dp.h" +#include "drm_dp_helper.h" + #define DP_LINK_STATUS_SIZE 6 #define DP_LINK_CHECK_TIMEOUT (10 * 1000) @@ -124,9 +125,15 @@ /* I think this is a fiction */ static int -intel_dp_link_required(int pixel_clock) +intel_dp_link_required(struct drm_device *dev, + struct intel_output *intel_output, int pixel_clock) { - return pixel_clock * 3; + struct drm_i915_private *dev_priv = dev->dev_private; + + if (IS_eDP(intel_output)) + return (pixel_clock * dev_priv->edp_bpp) / 8; + else + return pixel_clock * 3; } static int @@ -137,7 +144,8 @@ int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_output)); int max_lanes = intel_dp_max_lane_count(intel_output); - if (intel_dp_link_required(mode->clock) > max_link_clock * max_lanes) + if (intel_dp_link_required(connector->dev, intel_output, mode->clock) + > max_link_clock * max_lanes) return MODE_CLOCK_HIGH; if (mode->clock < 10000) @@ -223,8 +231,8 @@ */ if (IS_eDP(intel_output)) aux_clock_divider = 225; /* eDP input clock at 450Mhz */ - else if (IS_IGDNG(dev)) - aux_clock_divider = 62; /* IGDNG: input clock fixed at 125Mhz */ + else if (IS_IRONLAKE(dev)) + aux_clock_divider = 62; /* IRL input clock fixed at 125Mhz */ else aux_clock_divider = intel_hrawclk(dev) / 2; @@ -282,7 +290,7 @@ /* Timeouts occur when the device isn't connected, so they're * "normal" -- don't fill the kernel log with these */ if (status & DP_AUX_CH_CTL_TIME_OUT_ERROR) { - DRM_DEBUG("dp_aux_ch timeout status 0x%08x\n", status); + DRM_DEBUG_KMS("dp_aux_ch timeout status 0x%08x\n", status); return -ETIMEDOUT; } @@ -382,17 +390,77 @@ } static int -intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, - uint8_t *send, int send_bytes, - uint8_t *recv, int recv_bytes) +intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, + uint8_t write_byte, uint8_t *read_byte) { + struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; struct intel_dp_priv *dp_priv = container_of(adapter, struct intel_dp_priv, adapter); struct intel_output *intel_output = dp_priv->intel_output; + uint16_t address = algo_data->address; + uint8_t msg[5]; + uint8_t reply[2]; + int msg_bytes; + int reply_bytes; + int ret; - return intel_dp_aux_ch(intel_output, - send, send_bytes, recv, recv_bytes); + /* Set up the command byte */ + if (mode & MODE_I2C_READ) + msg[0] = AUX_I2C_READ << 4; + else + msg[0] = AUX_I2C_WRITE << 4; + + if (!(mode & MODE_I2C_STOP)) + msg[0] |= AUX_I2C_MOT << 4; + + msg[1] = address >> 8; + msg[2] = address; + + switch (mode) { + case MODE_I2C_WRITE: + msg[3] = 0; + msg[4] = write_byte; + msg_bytes = 5; + reply_bytes = 1; + break; + case MODE_I2C_READ: + msg[3] = 0; + msg_bytes = 4; + reply_bytes = 2; + break; + default: + msg_bytes = 3; + reply_bytes = 1; + break; + } + + for (;;) { + ret = intel_dp_aux_ch(intel_output, + msg, msg_bytes, + reply, reply_bytes); + if (ret < 0) { + DRM_DEBUG_KMS("aux_ch failed %d\n", ret); + return ret; + } + switch (reply[0] & AUX_I2C_REPLY_MASK) { + case AUX_I2C_REPLY_ACK: + if (mode == MODE_I2C_READ) { + *read_byte = reply[1]; + } + return reply_bytes - 1; + case AUX_I2C_REPLY_NACK: + DRM_DEBUG_KMS("aux_ch nack\n"); + return -EREMOTEIO; + case AUX_I2C_REPLY_DEFER: + DRM_DEBUG_KMS("aux_ch defer\n"); + udelay(100); + break; + default: + DRM_ERROR("aux_ch invalid reply 0x%02x\n", reply[0]); + return -EREMOTEIO; + } + } } static int @@ -431,11 +499,13 @@ for (clock = 0; clock <= max_clock; clock++) { int link_avail = intel_dp_link_clock(bws[clock]) * lane_count; - if (intel_dp_link_required(mode->clock) <= link_avail) { + if (intel_dp_link_required(encoder->dev, intel_output, mode->clock) + <= link_avail) { dp_priv->link_bw = bws[clock]; dp_priv->lane_count = lane_count; adjusted_mode->clock = intel_dp_link_clock(dp_priv->link_bw); - DRM_DEBUG("Display port link bw %02x lane count %d clock %d\n", + DRM_DEBUG_KMS("Display port link bw %02x lane " + "count %d clock %d\n", dp_priv->link_bw, dp_priv->lane_count, adjusted_mode->clock); return true; @@ -514,7 +584,7 @@ intel_dp_compute_m_n(3, lane_count, mode->clock, adjusted_mode->clock, &m_n); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { if (intel_crtc->pipe == 0) { I915_WRITE(TRANSA_DATA_M1, ((m_n.tu - 1) << PIPE_GMCH_DATA_M_TU_SIZE_SHIFT) | @@ -606,23 +676,23 @@ } } -static void igdng_edp_backlight_on (struct drm_device *dev) +static void ironlake_edp_backlight_on (struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; u32 pp; - DRM_DEBUG("\n"); + DRM_DEBUG_KMS("\n"); pp = I915_READ(PCH_PP_CONTROL); pp |= EDP_BLC_ENABLE; I915_WRITE(PCH_PP_CONTROL, pp); } -static void igdng_edp_backlight_off (struct drm_device *dev) +static void ironlake_edp_backlight_off (struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; u32 pp; - DRM_DEBUG("\n"); + DRM_DEBUG_KMS("\n"); pp = I915_READ(PCH_PP_CONTROL); pp &= ~EDP_BLC_ENABLE; I915_WRITE(PCH_PP_CONTROL, pp); @@ -641,13 +711,13 @@ if (dp_reg & DP_PORT_EN) { intel_dp_link_down(intel_output, dp_priv->DP); if (IS_eDP(intel_output)) - igdng_edp_backlight_off(dev); + ironlake_edp_backlight_off(dev); } } else { if (!(dp_reg & DP_PORT_EN)) { intel_dp_link_train(intel_output, dp_priv->DP, dp_priv->link_configuration); if (IS_eDP(intel_output)) - igdng_edp_backlight_on(dev); + ironlake_edp_backlight_on(dev); } } dp_priv->dpms_mode = mode; @@ -1010,7 +1080,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; struct intel_dp_priv *dp_priv = intel_output->dev_priv; - DRM_DEBUG("\n"); + DRM_DEBUG_KMS("\n"); if (IS_eDP(intel_output)) { DP &= ~DP_PLL_ENABLE; @@ -1071,7 +1141,7 @@ } static enum drm_connector_status -igdng_dp_detect(struct drm_connector *connector) +ironlake_dp_detect(struct drm_connector *connector) { struct intel_output *intel_output = to_intel_output(connector); struct intel_dp_priv *dp_priv = intel_output->dev_priv; @@ -1106,8 +1176,8 @@ dp_priv->has_audio = false; - if (IS_IGDNG(dev)) - return igdng_dp_detect(connector); + if (IS_IRONLAKE(dev)) + return ironlake_dp_detect(connector); temp = I915_READ(PORT_HOTPLUG_EN); @@ -1254,18 +1324,17 @@ else intel_output->type = INTEL_OUTPUT_DISPLAYPORT; - if (output_reg == DP_B) + if (output_reg == DP_B || output_reg == PCH_DP_B) intel_output->clone_mask = (1 << INTEL_DP_B_CLONE_BIT); - else if (output_reg == DP_C) + else if (output_reg == DP_C || output_reg == PCH_DP_C) intel_output->clone_mask = (1 << INTEL_DP_C_CLONE_BIT); - else if (output_reg == DP_D) + else if (output_reg == DP_D || output_reg == PCH_DP_D) intel_output->clone_mask = (1 << INTEL_DP_D_CLONE_BIT); - if (IS_eDP(intel_output)) { - intel_output->crtc_mask = (1 << 1); + if (IS_eDP(intel_output)) intel_output->clone_mask = (1 << INTEL_EDP_CLONE_BIT); - } else - intel_output->crtc_mask = (1 << 0) | (1 << 1); + + intel_output->crtc_mask = (1 << 0) | (1 << 1); connector->interlace_allowed = true; connector->doublescan_allowed = 0; @@ -1290,14 +1359,20 @@ break; case DP_B: case PCH_DP_B: + dev_priv->hotplug_supported_mask |= + HDMIB_HOTPLUG_INT_STATUS; name = "DPDDC-B"; break; case DP_C: case PCH_DP_C: + dev_priv->hotplug_supported_mask |= + HDMIC_HOTPLUG_INT_STATUS; name = "DPDDC-C"; break; case DP_D: case PCH_DP_D: + dev_priv->hotplug_supported_mask |= + HDMID_HOTPLUG_INT_STATUS; name = "DPDDC-D"; break; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_suspend.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_suspend.c @@ -27,14 +27,14 @@ #include "drmP.h" #include "drm.h" #include "i915_drm.h" -#include "i915_drv.h" +#include "intel_drv.h" static bool i915_pipe_enabled(struct drm_device *dev, enum pipe pipe) { struct drm_i915_private *dev_priv = dev->dev_private; u32 dpll_reg; - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dpll_reg = (pipe == PIPE_A) ? PCH_DPLL_A: PCH_DPLL_B; } else { dpll_reg = (pipe == PIPE_A) ? DPLL_A: DPLL_B; @@ -53,7 +53,7 @@ if (!i915_pipe_enabled(dev, pipe)) return; - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) reg = (pipe == PIPE_A) ? LGC_PALETTE_A : LGC_PALETTE_B; if (pipe == PIPE_A) @@ -75,7 +75,7 @@ if (!i915_pipe_enabled(dev, pipe)) return; - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) reg = (pipe == PIPE_A) ? LGC_PALETTE_A : LGC_PALETTE_B; if (pipe == PIPE_A) @@ -239,7 +239,7 @@ if (drm_core_check_feature(dev, DRIVER_MODESET)) return; - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->savePCH_DREF_CONTROL = I915_READ(PCH_DREF_CONTROL); dev_priv->saveDISP_ARB_CTL = I915_READ(DISP_ARB_CTL); } @@ -247,7 +247,7 @@ /* Pipe & plane A info */ dev_priv->savePIPEACONF = I915_READ(PIPEACONF); dev_priv->savePIPEASRC = I915_READ(PIPEASRC); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->saveFPA0 = I915_READ(PCH_FPA0); dev_priv->saveFPA1 = I915_READ(PCH_FPA1); dev_priv->saveDPLL_A = I915_READ(PCH_DPLL_A); @@ -256,7 +256,7 @@ dev_priv->saveFPA1 = I915_READ(FPA1); dev_priv->saveDPLL_A = I915_READ(DPLL_A); } - if (IS_I965G(dev) && !IS_IGDNG(dev)) + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) dev_priv->saveDPLL_A_MD = I915_READ(DPLL_A_MD); dev_priv->saveHTOTAL_A = I915_READ(HTOTAL_A); dev_priv->saveHBLANK_A = I915_READ(HBLANK_A); @@ -264,10 +264,10 @@ dev_priv->saveVTOTAL_A = I915_READ(VTOTAL_A); dev_priv->saveVBLANK_A = I915_READ(VBLANK_A); dev_priv->saveVSYNC_A = I915_READ(VSYNC_A); - if (!IS_IGDNG(dev)) + if (!IS_IRONLAKE(dev)) dev_priv->saveBCLRPAT_A = I915_READ(BCLRPAT_A); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->savePIPEA_DATA_M1 = I915_READ(PIPEA_DATA_M1); dev_priv->savePIPEA_DATA_N1 = I915_READ(PIPEA_DATA_N1); dev_priv->savePIPEA_LINK_M1 = I915_READ(PIPEA_LINK_M1); @@ -304,7 +304,7 @@ /* Pipe & plane B info */ dev_priv->savePIPEBCONF = I915_READ(PIPEBCONF); dev_priv->savePIPEBSRC = I915_READ(PIPEBSRC); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->saveFPB0 = I915_READ(PCH_FPB0); dev_priv->saveFPB1 = I915_READ(PCH_FPB1); dev_priv->saveDPLL_B = I915_READ(PCH_DPLL_B); @@ -313,7 +313,7 @@ dev_priv->saveFPB1 = I915_READ(FPB1); dev_priv->saveDPLL_B = I915_READ(DPLL_B); } - if (IS_I965G(dev) && !IS_IGDNG(dev)) + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) dev_priv->saveDPLL_B_MD = I915_READ(DPLL_B_MD); dev_priv->saveHTOTAL_B = I915_READ(HTOTAL_B); dev_priv->saveHBLANK_B = I915_READ(HBLANK_B); @@ -321,10 +321,10 @@ dev_priv->saveVTOTAL_B = I915_READ(VTOTAL_B); dev_priv->saveVBLANK_B = I915_READ(VBLANK_B); dev_priv->saveVSYNC_B = I915_READ(VSYNC_B); - if (!IS_IGDNG(dev)) + if (!IS_IRONLAKE(dev)) dev_priv->saveBCLRPAT_B = I915_READ(BCLRPAT_B); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->savePIPEB_DATA_M1 = I915_READ(PIPEB_DATA_M1); dev_priv->savePIPEB_DATA_N1 = I915_READ(PIPEB_DATA_N1); dev_priv->savePIPEB_LINK_M1 = I915_READ(PIPEB_LINK_M1); @@ -369,7 +369,7 @@ if (drm_core_check_feature(dev, DRIVER_MODESET)) return; - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dpll_a_reg = PCH_DPLL_A; dpll_b_reg = PCH_DPLL_B; fpa0_reg = PCH_FPA0; @@ -385,7 +385,7 @@ fpb1_reg = FPB1; } - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(PCH_DREF_CONTROL, dev_priv->savePCH_DREF_CONTROL); I915_WRITE(DISP_ARB_CTL, dev_priv->saveDISP_ARB_CTL); } @@ -402,7 +402,7 @@ /* Actually enable it */ I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A); DRM_UDELAY(150); - if (IS_I965G(dev) && !IS_IGDNG(dev)) + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) I915_WRITE(DPLL_A_MD, dev_priv->saveDPLL_A_MD); DRM_UDELAY(150); @@ -413,10 +413,10 @@ I915_WRITE(VTOTAL_A, dev_priv->saveVTOTAL_A); I915_WRITE(VBLANK_A, dev_priv->saveVBLANK_A); I915_WRITE(VSYNC_A, dev_priv->saveVSYNC_A); - if (!IS_IGDNG(dev)) + if (!IS_IRONLAKE(dev)) I915_WRITE(BCLRPAT_A, dev_priv->saveBCLRPAT_A); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(PIPEA_DATA_M1, dev_priv->savePIPEA_DATA_M1); I915_WRITE(PIPEA_DATA_N1, dev_priv->savePIPEA_DATA_N1); I915_WRITE(PIPEA_LINK_M1, dev_priv->savePIPEA_LINK_M1); @@ -467,7 +467,7 @@ /* Actually enable it */ I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B); DRM_UDELAY(150); - if (IS_I965G(dev) && !IS_IGDNG(dev)) + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) I915_WRITE(DPLL_B_MD, dev_priv->saveDPLL_B_MD); DRM_UDELAY(150); @@ -478,10 +478,10 @@ I915_WRITE(VTOTAL_B, dev_priv->saveVTOTAL_B); I915_WRITE(VBLANK_B, dev_priv->saveVBLANK_B); I915_WRITE(VSYNC_B, dev_priv->saveVSYNC_B); - if (!IS_IGDNG(dev)) + if (!IS_IRONLAKE(dev)) I915_WRITE(BCLRPAT_B, dev_priv->saveBCLRPAT_B); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(PIPEB_DATA_M1, dev_priv->savePIPEB_DATA_M1); I915_WRITE(PIPEB_DATA_N1, dev_priv->savePIPEB_DATA_N1); I915_WRITE(PIPEB_LINK_M1, dev_priv->savePIPEB_LINK_M1); @@ -546,14 +546,14 @@ dev_priv->saveCURSIZE = I915_READ(CURSIZE); /* CRT state */ - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->saveADPA = I915_READ(PCH_ADPA); } else { dev_priv->saveADPA = I915_READ(ADPA); } /* LVDS state */ - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->savePP_CONTROL = I915_READ(PCH_PP_CONTROL); dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_PCH_CTL1); dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_PCH_CTL2); @@ -571,10 +571,10 @@ dev_priv->saveLVDS = I915_READ(LVDS); } - if (!IS_I830(dev) && !IS_845G(dev) && !IS_IGDNG(dev)) + if (!IS_I830(dev) && !IS_845G(dev) && !IS_IRONLAKE(dev)) dev_priv->savePFIT_CONTROL = I915_READ(PFIT_CONTROL); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS); dev_priv->savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS); dev_priv->savePP_DIVISOR = I915_READ(PCH_PP_DIVISOR); @@ -614,7 +614,7 @@ dev_priv->saveVGA0 = I915_READ(VGA0); dev_priv->saveVGA1 = I915_READ(VGA1); dev_priv->saveVGA_PD = I915_READ(VGA_PD); - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) dev_priv->saveVGACNTRL = I915_READ(CPU_VGACNTRL); else dev_priv->saveVGACNTRL = I915_READ(VGACNTRL); @@ -656,24 +656,24 @@ I915_WRITE(CURSIZE, dev_priv->saveCURSIZE); /* CRT state */ - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) I915_WRITE(PCH_ADPA, dev_priv->saveADPA); else I915_WRITE(ADPA, dev_priv->saveADPA); /* LVDS state */ - if (IS_I965G(dev) && !IS_IGDNG(dev)) + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) I915_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(PCH_LVDS, dev_priv->saveLVDS); } else if (IS_MOBILE(dev) && !IS_I830(dev)) I915_WRITE(LVDS, dev_priv->saveLVDS); - if (!IS_I830(dev) && !IS_845G(dev) && !IS_IGDNG(dev)) + if (!IS_I830(dev) && !IS_845G(dev) && !IS_IRONLAKE(dev)) I915_WRITE(PFIT_CONTROL, dev_priv->savePFIT_CONTROL); - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->saveBLC_PWM_CTL); I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->saveBLC_PWM_CTL2); I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL); @@ -713,7 +713,7 @@ } /* VGA state */ - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) I915_WRITE(CPU_VGACNTRL, dev_priv->saveVGACNTRL); else I915_WRITE(VGACNTRL, dev_priv->saveVGACNTRL); @@ -732,17 +732,13 @@ pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); - /* Render Standby */ - if (IS_I965G(dev) && IS_MOBILE(dev)) - dev_priv->saveRENDERSTANDBY = I915_READ(MCHBAR_RENDER_STANDBY); - /* Hardware status page */ dev_priv->saveHWS = I915_READ(HWS_PGA); i915_save_display(dev); /* Interrupt state */ - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { dev_priv->saveDEIER = I915_READ(DEIER); dev_priv->saveDEIMR = I915_READ(DEIMR); dev_priv->saveGTIER = I915_READ(GTIER); @@ -754,10 +750,6 @@ dev_priv->saveIMR = I915_READ(IMR); } - /* Clock gating state */ - dev_priv->saveD_STATE = I915_READ(D_STATE); - dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D); /* Not sure about this */ - /* Cache mode state */ dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0); @@ -795,10 +787,6 @@ pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB); - /* Render Standby */ - if (IS_I965G(dev) && IS_MOBILE(dev)) - I915_WRITE(MCHBAR_RENDER_STANDBY, dev_priv->saveRENDERSTANDBY); - /* Hardware status page */ I915_WRITE(HWS_PGA, dev_priv->saveHWS); @@ -817,7 +805,7 @@ i915_restore_display(dev); /* Interrupt state */ - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(DEIER, dev_priv->saveDEIER); I915_WRITE(DEIMR, dev_priv->saveDEIMR); I915_WRITE(GTIER, dev_priv->saveGTIER); @@ -830,8 +818,7 @@ } /* Clock gating state */ - I915_WRITE (D_STATE, dev_priv->saveD_STATE); - I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D); + intel_init_clock_gating(dev); /* Cache mode state */ I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000); @@ -846,6 +833,9 @@ for (i = 0; i < 3; i++) I915_WRITE(SWF30 + (i << 2), dev_priv->saveSWF2[i]); + /* I2C state */ + intel_i2c_reset_gmbus(dev); + return 0; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_lvds.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_lvds.c @@ -56,7 +56,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; u32 blc_pwm_ctl, reg; - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) reg = BLC_PWM_CPU_CTL; else reg = BLC_PWM_CTL; @@ -74,7 +74,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; u32 reg; - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) reg = BLC_PWM_PCH_CTL2; else reg = BLC_PWM_CTL; @@ -91,7 +91,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; u32 pp_status, ctl_reg, status_reg; - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { ctl_reg = PCH_PP_CONTROL; status_reg = PCH_PP_STATUS; } else { @@ -137,7 +137,7 @@ u32 pp_on_reg, pp_off_reg, pp_ctl_reg, pp_div_reg; u32 pwm_ctl_reg; - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { pp_on_reg = PCH_PP_ON_DELAYS; pp_off_reg = PCH_PP_OFF_DELAYS; pp_ctl_reg = PCH_PP_CONTROL; @@ -174,7 +174,7 @@ u32 pp_on_reg, pp_off_reg, pp_ctl_reg, pp_div_reg; u32 pwm_ctl_reg; - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { pp_on_reg = PCH_PP_ON_DELAYS; pp_off_reg = PCH_PP_OFF_DELAYS; pp_ctl_reg = PCH_PP_CONTROL; @@ -297,7 +297,7 @@ } /* full screen scale for now */ - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) goto out; /* 965+ wants fuzzy fitting */ @@ -327,7 +327,7 @@ * to register description and PRM. * Change the value here to see the borders for debugging */ - if (!IS_IGDNG(dev)) { + if (!IS_IRONLAKE(dev)) { I915_WRITE(BCLRPAT_A, 0); I915_WRITE(BCLRPAT_B, 0); } @@ -548,7 +548,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; u32 reg; - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) reg = BLC_PWM_CPU_CTL; else reg = BLC_PWM_CTL; @@ -587,7 +587,7 @@ * settings. */ - if (IS_IGDNG(dev)) + if (IS_IRONLAKE(dev)) return; /* @@ -599,18 +599,6 @@ I915_WRITE(PFIT_CONTROL, lvds_priv->pfit_control); } -/* Some lid devices report incorrect lid status, assume they're connected */ -static const struct dmi_system_id bad_lid_status[] = { - { - .ident = "Aspire One", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Acer"), - DMI_MATCH(DMI_PRODUCT_NAME, "Aspire one"), - }, - }, - { } -}; - /** * Detect the LVDS connection. * @@ -620,10 +608,14 @@ */ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector) { + struct drm_device *dev = connector->dev; enum drm_connector_status status = connector_status_connected; - if (!acpi_lid_open() && !dmi_check_system(bad_lid_status)) - status = connector_status_disconnected; + /* ACPI lid methods were generally unreliable in this generation, so + * don't even bother. + */ + if (IS_GEN2(dev) || IS_GEN3(dev)) + return connector_status_connected; return status; } @@ -679,7 +671,14 @@ struct drm_i915_private *dev_priv = container_of(nb, struct drm_i915_private, lid_notifier); struct drm_device *dev = dev_priv->dev; + struct drm_connector *connector = dev_priv->int_lvds_connector; + /* + * check and update the status of LVDS connector after receiving + * the LID nofication event. + */ + if (connector) + connector->status = connector->funcs->detect(connector); if (!acpi_lid_open()) { dev_priv->modeset_on_lid = 1; return NOTIFY_OK; @@ -850,68 +849,113 @@ DMI_MATCH(DMI_PRODUCT_VERSION, "AO00001JW"), }, }, + { + .callback = intel_no_lvds_dmi_callback, + .ident = "Clientron U800", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Clientron"), + DMI_MATCH(DMI_PRODUCT_NAME, "U800"), + }, + }, { } /* terminating entry */ }; -#ifdef CONFIG_ACPI -/* - * check_lid_device -- check whether @handle is an ACPI LID device. - * @handle: ACPI device handle - * @level : depth in the ACPI namespace tree - * @context: the number of LID device when we find the device - * @rv: a return value to fill if desired (Not use) +/** + * intel_find_lvds_downclock - find the reduced downclock for LVDS in EDID + * @dev: drm device + * @connector: LVDS connector + * + * Find the reduced downclock for LVDS in EDID. */ -static acpi_status -check_lid_device(acpi_handle handle, u32 level, void *context, - void **return_value) +static void intel_find_lvds_downclock(struct drm_device *dev, + struct drm_connector *connector) { - struct acpi_device *acpi_dev; - int *lid_present = context; - - acpi_dev = NULL; - /* Get the acpi device for device handle */ - if (acpi_bus_get_device(handle, &acpi_dev) || !acpi_dev) { - /* If there is no ACPI device for handle, return */ - return AE_OK; - } + struct drm_i915_private *dev_priv = dev->dev_private; + struct drm_display_mode *scan, *panel_fixed_mode; + int temp_downclock; - if (!strncmp(acpi_device_hid(acpi_dev), "PNP0C0D", 7)) - *lid_present = 1; + panel_fixed_mode = dev_priv->panel_fixed_mode; + temp_downclock = panel_fixed_mode->clock; - return AE_OK; + mutex_lock(&dev->mode_config.mutex); + list_for_each_entry(scan, &connector->probed_modes, head) { + /* + * If one mode has the same resolution with the fixed_panel + * mode while they have the different refresh rate, it means + * that the reduced downclock is found for the LVDS. In such + * case we can set the different FPx0/1 to dynamically select + * between low and high frequency. + */ + if (scan->hdisplay == panel_fixed_mode->hdisplay && + scan->hsync_start == panel_fixed_mode->hsync_start && + scan->hsync_end == panel_fixed_mode->hsync_end && + scan->htotal == panel_fixed_mode->htotal && + scan->vdisplay == panel_fixed_mode->vdisplay && + scan->vsync_start == panel_fixed_mode->vsync_start && + scan->vsync_end == panel_fixed_mode->vsync_end && + scan->vtotal == panel_fixed_mode->vtotal) { + if (scan->clock < temp_downclock) { + /* + * The downclock is already found. But we + * expect to find the lower downclock. + */ + temp_downclock = scan->clock; + } + } + } + mutex_unlock(&dev->mode_config.mutex); + if (temp_downclock < panel_fixed_mode->clock && + i915_lvds_downclock) { + /* We found the downclock for LVDS. */ + dev_priv->lvds_downclock_avail = 1; + dev_priv->lvds_downclock = temp_downclock; + DRM_DEBUG_KMS("LVDS downclock is found in EDID. " + "Normal clock %dKhz, downclock %dKhz\n", + panel_fixed_mode->clock, temp_downclock); + } + return; } -/** - * check whether there exists the ACPI LID device by enumerating the ACPI - * device tree. +/* + * Enumerate the child dev array parsed from VBT to check whether + * the LVDS is present. + * If it is present, return 1. + * If it is not present, return false. + * If no child dev is parsed from VBT, it assumes that the LVDS is present. + * Note: The addin_offset should also be checked for LVDS panel. + * Only when it is non-zero, it is assumed that it is present. */ -static int intel_lid_present(void) +static int lvds_is_present_in_vbt(struct drm_device *dev) { - int lid_present = 0; + struct drm_i915_private *dev_priv = dev->dev_private; + struct child_device_config *p_child; + int i, ret; - if (acpi_disabled) { - /* If ACPI is disabled, there is no ACPI device tree to - * check, so assume the LID device would have been present. - */ + if (!dev_priv->child_dev_num) return 1; - } - acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, - check_lid_device, &lid_present, NULL); + ret = 0; + for (i = 0; i < dev_priv->child_dev_num; i++) { + p_child = dev_priv->child_dev + i; + /* + * If the device type is not LFP, continue. + * If the device type is 0x22, it is also regarded as LFP. + */ + if (p_child->device_type != DEVICE_TYPE_INT_LFP && + p_child->device_type != DEVICE_TYPE_LFP) + continue; - return lid_present; -} -#else -static int intel_lid_present(void) -{ - /* In the absence of ACPI built in, assume that the LID device would - * have been present. - */ - return 1; + /* The addin_offset should be checked. Only when it is + * non-zero, it is regarded as present. + */ + if (p_child->addin_offset) { + ret = 1; + break; + } + } + return ret; } -#endif /** * intel_lvds_init - setup LVDS connectors on this device @@ -936,21 +980,16 @@ if (dmi_check_system(intel_no_lvds)) return; - /* Assume that any device without an ACPI LID device also doesn't - * have an integrated LVDS. We would be better off parsing the BIOS - * to get a reliable indicator, but that code isn't written yet. - * - * In the case of all-in-one desktops using LVDS that we've seen, - * they're using SDVO LVDS. - */ - if (!intel_lid_present()) + if (!lvds_is_present_in_vbt(dev)) { + DRM_DEBUG_KMS("LVDS is not present in VBT\n"); return; + } - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0) return; if (dev_priv->edp_support) { - DRM_DEBUG("disable LVDS for eDP support\n"); + DRM_DEBUG_KMS("disable LVDS for eDP support\n"); return; } gpio = PCH_GPIOC; @@ -1023,6 +1062,7 @@ dev_priv->panel_fixed_mode = drm_mode_duplicate(dev, scan); mutex_unlock(&dev->mode_config.mutex); + intel_find_lvds_downclock(dev, connector); goto out; } mutex_unlock(&dev->mode_config.mutex); @@ -1047,8 +1087,8 @@ * correct mode. */ - /* IGDNG: FIXME if still fail, not try pipe mode now */ - if (IS_IGDNG(dev)) + /* Ironlake: FIXME if still fail, not try pipe mode now */ + if (IS_IRONLAKE(dev)) goto failed; lvds = I915_READ(LVDS); @@ -1069,7 +1109,7 @@ goto failed; out: - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { u32 pwm; /* make sure PWM is enabled */ pwm = I915_READ(BLC_PWM_CPU_CTL2); @@ -1082,9 +1122,11 @@ } dev_priv->lid_notifier.notifier_call = intel_lid_notify; if (acpi_lid_notifier_register(&dev_priv->lid_notifier)) { - DRM_DEBUG("lid notifier registration failed\n"); + DRM_DEBUG_KMS("lid notifier registration failed\n"); dev_priv->lid_notifier.notifier_call = NULL; } + /* keep the LVDS connector */ + dev_priv->int_lvds_connector = connector; drm_sysfs_connector_add(connector); return; @@ -1093,5 +1135,6 @@ if (intel_output->ddc_bus) intel_i2c_destroy(intel_output->ddc_bus); drm_connector_cleanup(connector); + drm_encoder_cleanup(encoder); kfree(intel_output); } --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_drv.h +++ linux-2.6.32/drivers/gpu/drm/i915/i915_drv.h @@ -170,9 +170,33 @@ /* clock gating init */ }; +struct intel_overlay; + +struct intel_device_info { + u8 is_mobile : 1; + u8 is_i8xx : 1; + u8 is_i915g : 1; + u8 is_i9xx : 1; + u8 is_i945gm : 1; + u8 is_i965g : 1; + u8 is_i965gm : 1; + u8 is_g33 : 1; + u8 need_gfx_hws : 1; + u8 is_g4x : 1; + u8 is_pineview : 1; + u8 is_ironlake : 1; + u8 has_fbc : 1; + u8 has_rc6 : 1; + u8 has_pipe_cxsr : 1; + u8 has_hotplug : 1; + u8 cursor_needs_physical : 1; +}; + typedef struct drm_i915_private { struct drm_device *dev; + const struct intel_device_info *info; + int has_gem; void __iomem *regs; @@ -182,11 +206,15 @@ drm_dma_handle_t *status_page_dmah; void *hw_status_page; + void *seqno_page; dma_addr_t dma_status_page; uint32_t counter; unsigned int status_gfx_addr; + unsigned int seqno_gfx_addr; drm_local_map_t hws_map; struct drm_gem_object *hws_obj; + struct drm_gem_object *seqno_obj; + struct drm_gem_object *pwrctx; struct resource mch_res; @@ -206,11 +234,13 @@ /** Cached value of IMR to avoid reads in updating the bitfield */ u32 irq_mask_reg; u32 pipestat[2]; - /** splitted irq regs for graphics and display engine on IGDNG, + /** splitted irq regs for graphics and display engine on Ironlake, irq_mask_reg is still used for display irq. */ u32 gt_irq_mask_reg; u32 gt_irq_enable_reg; u32 de_irq_enable_reg; + u32 pch_irq_mask_reg; + u32 pch_irq_enable_reg; u32 hotplug_supported_mask; struct work_struct hotplug_work; @@ -227,8 +257,6 @@ int hangcheck_count; uint32_t last_acthd; - bool cursor_needs_physical; - struct drm_mm vram; unsigned long cfb_size; @@ -240,6 +268,9 @@ struct intel_opregion opregion; + /* overlay */ + struct intel_overlay *overlay; + /* LVDS info */ int backlight_duty_cycle; /* restore backlight to this value */ bool panel_wants_dither; @@ -255,10 +286,11 @@ unsigned int lvds_use_ssc:1; unsigned int edp_support:1; int lvds_ssc_freq; + int edp_bpp; struct notifier_block lid_notifier; - int crt_ddc_bus; /* -1 = unknown, else GPIO to use for CRT DDC */ + int crt_ddc_bus; /* 0 = unknown, else GPIO to use for CRT DDC */ struct drm_i915_fence_reg fence_regs[16]; /* assume 965 */ int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ int num_fence_regs; /* 8 on pre-965, 16 otherwise */ @@ -279,7 +311,6 @@ u32 saveDSPACNTR; u32 saveDSPBCNTR; u32 saveDSPARB; - u32 saveRENDERSTANDBY; u32 saveHWS; u32 savePIPEACONF; u32 savePIPEBCONF; @@ -374,8 +405,6 @@ u32 saveFDI_RXA_IMR; u32 saveFDI_RXB_IMR; u32 saveCACHE_MODE_0; - u32 saveD_STATE; - u32 saveDSPCLK_GATE_D; u32 saveMI_ARB_STATE; u32 saveSWF0[16]; u32 saveSWF1[16]; @@ -467,6 +496,15 @@ struct list_head flushing_list; /** + * List of objects currently pending a GPU write flush. + * + * All elements on this list will belong to either the + * active_list or flushing_list, last_rendering_seqno can + * be used to differentiate between the two elements. + */ + struct list_head gpu_write_list; + + /** * LRU list of objects which are not in the ringbuffer and * are ready to unbind, but are still in the GTT. * @@ -539,13 +577,22 @@ /* indicate whether the LVDS_BORDER should be enabled or not */ unsigned int lvds_border_bits; + struct drm_crtc *plane_to_crtc_mapping[2]; + struct drm_crtc *pipe_to_crtc_mapping[2]; + wait_queue_head_t pending_flip_queue; + /* Reclocking support */ bool render_reclock_avail; bool lvds_downclock_avail; + /* indicates the reduced downclock for LVDS*/ + int lvds_downclock; struct work_struct idle_work; struct timer_list idle_timer; bool busy; u16 orig_clock; + int child_dev_num; + struct child_device_config *child_dev; + struct drm_connector *int_lvds_connector; } drm_i915_private_t; /** driver private structure attached to each drm_gem_object */ @@ -557,6 +604,8 @@ /** This object's place on the active/flushing/inactive lists */ struct list_head list; + /** This object's place on GPU write list */ + struct list_head gpu_write_list; /** This object's place on the fenced object LRU */ struct list_head fence_list; @@ -638,6 +687,13 @@ * Advice: are the backing pages purgeable? */ int madv; + + /** + * Number of crtcs where this object is currently the fb, but + * will be page flipped away on the next vblank. When it + * reaches 0, dev_priv->pending_flip_queue will be woken up. + */ + atomic_t pending_flip; }; /** @@ -681,6 +737,7 @@ extern int i915_max_ioctl; extern unsigned int i915_fbpercrtc; extern unsigned int i915_powersave; +extern unsigned int i915_lvds_downclock; extern void i915_save_display(struct drm_device *dev); extern void i915_restore_display(struct drm_device *dev); @@ -738,6 +795,8 @@ void i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask); +void intel_enable_asle (struct drm_device *dev); + /* i915_mem.c */ extern int i915_mem_alloc(struct drm_device *dev, void *data, @@ -770,6 +829,8 @@ struct drm_file *file_priv); int i915_gem_execbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv); +int i915_gem_execbuffer2(struct drm_device *dev, void *data, + struct drm_file *file_priv); int i915_gem_pin_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); int i915_gem_unpin_ioctl(struct drm_device *dev, void *data, @@ -813,17 +874,22 @@ int i915_gem_do_init(struct drm_device *dev, unsigned long start, unsigned long end); int i915_gem_idle(struct drm_device *dev); +uint32_t i915_add_request(struct drm_device *dev, struct drm_file *file_priv, + uint32_t flush_domains); +int i915_do_wait_request(struct drm_device *dev, uint32_t seqno, int interruptible); int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf); int i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj, int write); +int i915_gem_object_set_to_display_plane(struct drm_gem_object *obj); int i915_gem_attach_phys_object(struct drm_device *dev, struct drm_gem_object *obj, int id); void i915_gem_detach_phys_object(struct drm_device *dev, struct drm_gem_object *obj); void i915_gem_free_all_phys_object(struct drm_device *dev); -int i915_gem_object_get_pages(struct drm_gem_object *obj); +int i915_gem_object_get_pages(struct drm_gem_object *obj, gfp_t gfpmask); void i915_gem_object_put_pages(struct drm_gem_object *obj); void i915_gem_release(struct drm_device * dev, struct drm_file *file_priv); +void i915_gem_object_flush_write_domain(struct drm_gem_object *obj); void i915_gem_shrinker_init(void); void i915_gem_shrinker_exit(void); @@ -832,6 +898,9 @@ void i915_gem_detect_bit_6_swizzle(struct drm_device *dev); void i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj); void i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj); +bool i915_tiling_ok(struct drm_device *dev, int stride, int size, + int tiling_mode); +bool i915_obj_fenceable(struct drm_device *dev, struct drm_gem_object *obj); /* i915_gem_debug.c */ void i915_gem_dump_object(struct drm_gem_object *obj, int len, @@ -863,11 +932,13 @@ extern int intel_opregion_init(struct drm_device *dev, int resume); extern void intel_opregion_free(struct drm_device *dev, int suspend); extern void opregion_asle_intr(struct drm_device *dev); +extern void ironlake_opregion_gse_intr(struct drm_device *dev); extern void opregion_enable_asle(struct drm_device *dev); #else static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; } static inline void intel_opregion_free(struct drm_device *dev, int suspend) { return; } static inline void opregion_asle_intr(struct drm_device *dev) { return; } +static inline void ironlake_opregion_gse_intr(struct drm_device *dev) { return; } static inline void opregion_enable_asle(struct drm_device *dev) { return; } #endif @@ -952,85 +1023,77 @@ extern int i915_wrap_ring(struct drm_device * dev); extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller); -#define IS_I830(dev) ((dev)->pci_device == 0x3577) -#define IS_845G(dev) ((dev)->pci_device == 0x2562) -#define IS_I85X(dev) ((dev)->pci_device == 0x3582) -#define IS_I855(dev) ((dev)->pci_device == 0x3582) -#define IS_I865G(dev) ((dev)->pci_device == 0x2572) - -#define IS_I915G(dev) ((dev)->pci_device == 0x2582 || (dev)->pci_device == 0x258a) -#define IS_I915GM(dev) ((dev)->pci_device == 0x2592) -#define IS_I945G(dev) ((dev)->pci_device == 0x2772) -#define IS_I945GM(dev) ((dev)->pci_device == 0x27A2 ||\ - (dev)->pci_device == 0x27AE) -#define IS_I965G(dev) ((dev)->pci_device == 0x2972 || \ - (dev)->pci_device == 0x2982 || \ - (dev)->pci_device == 0x2992 || \ - (dev)->pci_device == 0x29A2 || \ - (dev)->pci_device == 0x2A02 || \ - (dev)->pci_device == 0x2A12 || \ - (dev)->pci_device == 0x2A42 || \ - (dev)->pci_device == 0x2E02 || \ - (dev)->pci_device == 0x2E12 || \ - (dev)->pci_device == 0x2E22 || \ - (dev)->pci_device == 0x2E32 || \ - (dev)->pci_device == 0x2E42 || \ - (dev)->pci_device == 0x0042 || \ - (dev)->pci_device == 0x0046) - -#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02 || \ - (dev)->pci_device == 0x2A12) - -#define IS_GM45(dev) ((dev)->pci_device == 0x2A42) - -#define IS_G4X(dev) ((dev)->pci_device == 0x2E02 || \ - (dev)->pci_device == 0x2E12 || \ - (dev)->pci_device == 0x2E22 || \ - (dev)->pci_device == 0x2E32 || \ - (dev)->pci_device == 0x2E42 || \ - IS_GM45(dev)) - -#define IS_IGDG(dev) ((dev)->pci_device == 0xa001) -#define IS_IGDGM(dev) ((dev)->pci_device == 0xa011) -#define IS_IGD(dev) (IS_IGDG(dev) || IS_IGDGM(dev)) - -#define IS_G33(dev) ((dev)->pci_device == 0x29C2 || \ - (dev)->pci_device == 0x29B2 || \ - (dev)->pci_device == 0x29D2 || \ - (IS_IGD(dev))) - -#define IS_IGDNG_D(dev) ((dev)->pci_device == 0x0042) -#define IS_IGDNG_M(dev) ((dev)->pci_device == 0x0046) -#define IS_IGDNG(dev) (IS_IGDNG_D(dev) || IS_IGDNG_M(dev)) - -#define IS_I9XX(dev) (IS_I915G(dev) || IS_I915GM(dev) || IS_I945G(dev) || \ - IS_I945GM(dev) || IS_I965G(dev) || IS_G33(dev) || \ - IS_IGDNG(dev)) - -#define IS_MOBILE(dev) (IS_I830(dev) || IS_I85X(dev) || IS_I915GM(dev) || \ - IS_I945GM(dev) || IS_I965GM(dev) || IS_GM45(dev) || \ - IS_IGD(dev) || IS_IGDNG_M(dev)) +#define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info) + +#define IS_I830(dev) ((dev)->pci_device == 0x3577) +#define IS_845G(dev) ((dev)->pci_device == 0x2562) +#define IS_I85X(dev) ((dev)->pci_device == 0x3582) +#define IS_I865G(dev) ((dev)->pci_device == 0x2572) +#define IS_GEN2(dev) (INTEL_INFO(dev)->is_i8xx) +#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g) +#define IS_I915GM(dev) ((dev)->pci_device == 0x2592) +#define IS_I945G(dev) ((dev)->pci_device == 0x2772) +#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm) +#define IS_I965G(dev) (INTEL_INFO(dev)->is_i965g) +#define IS_I965GM(dev) (INTEL_INFO(dev)->is_i965gm) +#define IS_GM45(dev) ((dev)->pci_device == 0x2A42) +#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x) +#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001) +#define IS_PINEVIEW_M(dev) ((dev)->pci_device == 0xa011) +#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview) +#define IS_G33(dev) (INTEL_INFO(dev)->is_g33) +#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042) +#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046) +#define IS_IRONLAKE(dev) (INTEL_INFO(dev)->is_ironlake) +#define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx) +#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile) + +#define IS_GEN3(dev) (IS_I915G(dev) || \ + IS_I915GM(dev) || \ + IS_I945G(dev) || \ + IS_I945GM(dev) || \ + IS_G33(dev) || \ + IS_PINEVIEW(dev)) +#define IS_GEN4(dev) ((dev)->pci_device == 0x2972 || \ + (dev)->pci_device == 0x2982 || \ + (dev)->pci_device == 0x2992 || \ + (dev)->pci_device == 0x29A2 || \ + (dev)->pci_device == 0x2A02 || \ + (dev)->pci_device == 0x2A12 || \ + (dev)->pci_device == 0x2E02 || \ + (dev)->pci_device == 0x2E12 || \ + (dev)->pci_device == 0x2E22 || \ + (dev)->pci_device == 0x2E32 || \ + (dev)->pci_device == 0x2A42 || \ + (dev)->pci_device == 0x2E42) + +#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws) + +#define IS_GEN6(dev) ((dev)->pci_device == 0x0102) -#define I915_NEED_GFX_HWS(dev) (IS_G33(dev) || IS_GM45(dev) || IS_G4X(dev) || \ - IS_IGDNG(dev)) /* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte * rows, which changed the alignment requirements and fence programming. */ #define HAS_128_BYTE_Y_TILING(dev) (IS_I9XX(dev) && !(IS_I915G(dev) || \ IS_I915GM(dev))) -#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_IGDNG(dev)) -#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_IGDNG(dev)) -#define SUPPORTS_EDP(dev) (IS_IGDNG_M(dev)) -#define I915_HAS_HOTPLUG(dev) (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev) || IS_I965G(dev)) +#define SUPPORTS_DIGITAL_OUTPUTS(dev) (IS_I9XX(dev) && !IS_PINEVIEW(dev)) +#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) +#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) +#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev)) +#define SUPPORTS_TV(dev) (IS_I9XX(dev) && IS_MOBILE(dev) && \ + !IS_IRONLAKE(dev) && !IS_PINEVIEW(dev)) +#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug) /* dsparb controlled by hw only */ -#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IGDNG(dev)) +#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev)) -#define HAS_FW_BLC(dev) (IS_I9XX(dev) || IS_G4X(dev) || IS_IGDNG(dev)) -#define HAS_PIPE_CXSR(dev) (IS_G4X(dev) || IS_IGDNG(dev)) -#define I915_HAS_FBC(dev) (IS_MOBILE(dev) && \ - (IS_I9XX(dev) || IS_GM45(dev)) && \ - !IS_IGD(dev) && \ - !IS_IGDNG(dev)) +#define HAS_FW_BLC(dev) (IS_I9XX(dev) || IS_G4X(dev) || IS_IRONLAKE(dev)) +#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr) +#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc) +#define I915_HAS_RC6(dev) (INTEL_INFO(dev)->has_rc6) + +#define HAS_PCH_SPLIT(dev) (IS_IRONLAKE(dev) || \ + IS_GEN6(dev)) +#define HAS_PIPE_CONTROL(dev) (IS_IRONLAKE(dev) || IS_GEN6(dev)) #define PRIMARY_RINGBUFFER_SIZE (128*1024) --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_ioc32.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_ioc32.c @@ -66,8 +66,7 @@ &batchbuffer->cliprects)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_I915_BATCHBUFFER, + return drm_ioctl(file, DRM_IOCTL_I915_BATCHBUFFER, (unsigned long)batchbuffer); } @@ -102,8 +101,8 @@ &cmdbuffer->cliprects)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_I915_CMDBUFFER, (unsigned long)cmdbuffer); + return drm_ioctl(file, DRM_IOCTL_I915_CMDBUFFER, + (unsigned long)cmdbuffer); } typedef struct drm_i915_irq_emit32 { @@ -125,8 +124,8 @@ &request->irq_seq)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_I915_IRQ_EMIT, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_I915_IRQ_EMIT, + (unsigned long)request); } typedef struct drm_i915_getparam32 { int param; @@ -149,8 +148,8 @@ &request->value)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_I915_GETPARAM, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_I915_GETPARAM, + (unsigned long)request); } typedef struct drm_i915_mem_alloc32 { @@ -178,8 +177,8 @@ &request->region_offset)) return -EFAULT; - return drm_ioctl(file->f_path.dentry->d_inode, file, - DRM_IOCTL_I915_ALLOC, (unsigned long)request); + return drm_ioctl(file, DRM_IOCTL_I915_ALLOC, + (unsigned long)request); } drm_ioctl_compat_t *i915_compat_ioctls[] = { @@ -211,12 +210,10 @@ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(i915_compat_ioctls)) fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; - lock_kernel(); /* XXX for now */ if (fn != NULL) ret = (*fn) (filp, cmd, arg); else - ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); - unlock_kernel(); + ret = drm_ioctl(filp, cmd, arg); return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_bios.h +++ linux-2.6.32/drivers/gpu/drm/i915/intel_bios.h @@ -98,6 +98,7 @@ #define BDB_SDVO_LVDS_PNP_IDS 24 #define BDB_SDVO_LVDS_POWER_SEQ 25 #define BDB_TV_OPTIONS 26 +#define BDB_EDP 27 #define BDB_LVDS_OPTIONS 40 #define BDB_LVDS_LFP_DATA_PTRS 41 #define BDB_LVDS_LFP_DATA 42 @@ -426,6 +427,45 @@ u8 custom_vbt_version; } __attribute__((packed)); +#define EDP_18BPP 0 +#define EDP_24BPP 1 +#define EDP_30BPP 2 +#define EDP_RATE_1_62 0 +#define EDP_RATE_2_7 1 +#define EDP_LANE_1 0 +#define EDP_LANE_2 1 +#define EDP_LANE_4 3 +#define EDP_PREEMPHASIS_NONE 0 +#define EDP_PREEMPHASIS_3_5dB 1 +#define EDP_PREEMPHASIS_6dB 2 +#define EDP_PREEMPHASIS_9_5dB 3 +#define EDP_VSWING_0_4V 0 +#define EDP_VSWING_0_6V 1 +#define EDP_VSWING_0_8V 2 +#define EDP_VSWING_1_2V 3 + +struct edp_power_seq { + u16 t3; + u16 t7; + u16 t9; + u16 t10; + u16 t12; +} __attribute__ ((packed)); + +struct edp_link_params { + u8 rate:4; + u8 lanes:4; + u8 preemphasis:4; + u8 vswing:4; +} __attribute__ ((packed)); + +struct bdb_edp { + struct edp_power_seq power_seqs[16]; + u32 color_depth; + u32 sdrrs_msa_timing_delay; + struct edp_link_params link_params[16]; +} __attribute__ ((packed)); + bool intel_init_bios(struct drm_device *dev); /* @@ -549,4 +589,21 @@ #define SWF14_APM_STANDBY 0x1 #define SWF14_APM_RESTORE 0x0 +/* Add the device class for LFP, TV, HDMI */ +#define DEVICE_TYPE_INT_LFP 0x1022 +#define DEVICE_TYPE_INT_TV 0x1009 +#define DEVICE_TYPE_HDMI 0x60D2 +#define DEVICE_TYPE_DP 0x68C6 +#define DEVICE_TYPE_eDP 0x78C6 + +/* define the DVO port for HDMI output type */ +#define DVO_B 1 +#define DVO_C 2 +#define DVO_D 3 + +/* define the PORT for DP output type */ +#define PORT_IDPB 7 +#define PORT_IDPC 8 +#define PORT_IDPD 9 + #endif /* _I830_BIOS_H_ */ --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_reg.h +++ linux-2.6.32/drivers/gpu/drm/i915/i915_reg.h @@ -140,6 +140,7 @@ #define MI_NOOP MI_INSTR(0, 0) #define MI_USER_INTERRUPT MI_INSTR(0x02, 0) #define MI_WAIT_FOR_EVENT MI_INSTR(0x03, 0) +#define MI_WAIT_FOR_OVERLAY_FLIP (1<<16) #define MI_WAIT_FOR_PLANE_B_FLIP (1<<6) #define MI_WAIT_FOR_PLANE_A_FLIP (1<<2) #define MI_WAIT_FOR_PLANE_A_SCANLINES (1<<1) @@ -151,7 +152,13 @@ #define MI_END_SCENE (1 << 4) /* flush binner and incr scene count */ #define MI_BATCH_BUFFER_END MI_INSTR(0x0a, 0) #define MI_REPORT_HEAD MI_INSTR(0x07, 0) +#define MI_OVERLAY_FLIP MI_INSTR(0x11,0) +#define MI_OVERLAY_CONTINUE (0x0<<21) +#define MI_OVERLAY_ON (0x1<<21) +#define MI_OVERLAY_OFF (0x2<<21) #define MI_LOAD_SCAN_LINES_INCL MI_INSTR(0x12, 0) +#define MI_DISPLAY_FLIP MI_INSTR(0x14, 2) +#define MI_DISPLAY_FLIP_PLANE(n) ((n) << 20) #define MI_STORE_DWORD_IMM MI_INSTR(0x20, 1) #define MI_MEM_VIRTUAL (1 << 22) /* 965+ only */ #define MI_STORE_DWORD_INDEX MI_INSTR(0x21, 1) @@ -203,6 +210,16 @@ #define ASYNC_FLIP (1<<22) #define DISPLAY_PLANE_A (0<<20) #define DISPLAY_PLANE_B (1<<20) +#define GFX_OP_PIPE_CONTROL ((0x3<<29)|(0x3<<27)|(0x2<<24)|2) +#define PIPE_CONTROL_QW_WRITE (1<<14) +#define PIPE_CONTROL_DEPTH_STALL (1<<13) +#define PIPE_CONTROL_WC_FLUSH (1<<12) +#define PIPE_CONTROL_IS_FLUSH (1<<11) /* MBZ on Ironlake */ +#define PIPE_CONTROL_TC_FLUSH (1<<10) /* GM45+ only */ +#define PIPE_CONTROL_ISP_DIS (1<<9) +#define PIPE_CONTROL_NOTIFY (1<<8) +#define PIPE_CONTROL_GLOBAL_GTT (1<<2) /* in addr dword */ +#define PIPE_CONTROL_STALL_EN (1<<1) /* in addr word, Ironlake+ only */ /* * Fence registers @@ -214,7 +231,7 @@ #define I830_FENCE_SIZE_BITS(size) ((ffs((size) >> 19) - 1) << 8) #define I830_FENCE_PITCH_SHIFT 4 #define I830_FENCE_REG_VALID (1<<0) -#define I915_FENCE_MAX_PITCH_VAL 0x10 +#define I915_FENCE_MAX_PITCH_VAL 4 #define I830_FENCE_MAX_PITCH_VAL 6 #define I830_FENCE_MAX_SIZE_VAL (1<<8) @@ -260,6 +277,8 @@ #define HWS_PGA 0x02080 #define HWS_ADDRESS_MASK 0xfffff000 #define HWS_START_ADDRESS_SHIFT 4 +#define PWRCTXA 0x2088 /* 965GM+ only */ +#define PWRCTX_EN (1<<0) #define IPEIR 0x02088 #define IPEHR 0x0208c #define INSTDONE 0x02090 @@ -329,6 +348,7 @@ #define FBC_CTL_PERIODIC (1<<30) #define FBC_CTL_INTERVAL_SHIFT (16) #define FBC_CTL_UNCOMPRESSIBLE (1<<14) +#define FBC_C3_IDLE (1<<13) #define FBC_CTL_STRIDE_SHIFT (5) #define FBC_CTL_FENCENO (1<<0) #define FBC_COMMAND 0x0320c @@ -405,6 +425,13 @@ # define GPIO_DATA_VAL_IN (1 << 12) # define GPIO_DATA_PULLUP_DISABLE (1 << 13) +#define GMBUS0 0x5100 +#define GMBUS1 0x5104 +#define GMBUS2 0x5108 +#define GMBUS3 0x510c +#define GMBUS4 0x5110 +#define GMBUS5 0x5120 + /* * Clock control & power management */ @@ -435,7 +462,7 @@ #define DPLLB_LVDS_P2_CLOCK_DIV_7 (1 << 24) /* i915 */ #define DPLL_P2_CLOCK_DIV_MASK 0x03000000 /* i915 */ #define DPLL_FPA01_P1_POST_DIV_MASK 0x00ff0000 /* i915 */ -#define DPLL_FPA01_P1_POST_DIV_MASK_IGD 0x00ff8000 /* IGD */ +#define DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW 0x00ff8000 /* Pineview */ #define I915_FIFO_UNDERRUN_STATUS (1UL<<31) #define I915_CRC_ERROR_ENABLE (1UL<<29) @@ -512,7 +539,7 @@ */ #define DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS 0x003f0000 #define DPLL_FPA01_P1_POST_DIV_SHIFT 16 -#define DPLL_FPA01_P1_POST_DIV_SHIFT_IGD 15 +#define DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW 15 /* i830, required in DVO non-gang */ #define PLL_P2_DIVIDE_BY_4 (1 << 23) #define PLL_P1_DIVIDE_BY_TWO (1 << 21) /* i830 */ @@ -522,7 +549,7 @@ #define PLLB_REF_INPUT_SPREADSPECTRUMIN (3 << 13) #define PLL_REF_INPUT_MASK (3 << 13) #define PLL_LOAD_PULSE_PHASE_SHIFT 9 -/* IGDNG */ +/* Ironlake */ # define PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT 9 # define PLL_REF_SDVO_HDMI_MULTIPLIER_MASK (7 << 9) # define PLL_REF_SDVO_HDMI_MULTIPLIER(x) (((x)-1) << 9) @@ -586,12 +613,12 @@ #define FPB0 0x06048 #define FPB1 0x0604c #define FP_N_DIV_MASK 0x003f0000 -#define FP_N_IGD_DIV_MASK 0x00ff0000 +#define FP_N_PINEVIEW_DIV_MASK 0x00ff0000 #define FP_N_DIV_SHIFT 16 #define FP_M1_DIV_MASK 0x00003f00 #define FP_M1_DIV_SHIFT 8 #define FP_M2_DIV_MASK 0x0000003f -#define FP_M2_IGD_DIV_MASK 0x000000ff +#define FP_M2_PINEVIEW_DIV_MASK 0x000000ff #define FP_M2_DIV_SHIFT 0 #define DPLL_TEST 0x606c #define DPLLB_TEST_SDVO_DIV_1 (0 << 22) @@ -769,7 +796,8 @@ /** GM965 GM45 render standby register */ #define MCHBAR_RENDER_STANDBY 0x111B8 - +#define RCX_SW_EXIT (1<<23) +#define RSX_STATUS_MASK 0x00700000 #define PEG_BAND_GAP_DATA 0x14d68 /* @@ -844,7 +872,6 @@ #define SDVOB_HOTPLUG_INT_EN (1 << 26) #define SDVOC_HOTPLUG_INT_EN (1 << 25) #define TV_HOTPLUG_INT_EN (1 << 18) -#define CRT_EOS_INT_EN (1 << 10) #define CRT_HOTPLUG_INT_EN (1 << 9) #define CRT_HOTPLUG_FORCE_DETECT (1 << 3) #define CRT_HOTPLUG_ACTIVATION_PERIOD_32 (0 << 8) @@ -863,14 +890,6 @@ #define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2) #define CRT_HOTPLUG_MASK (0x3fc) /* Bits 9-2 */ #define CRT_FORCE_HOTPLUG_MASK 0xfffffe1f -#define HOTPLUG_EN_MASK (HDMIB_HOTPLUG_INT_EN | \ - HDMIC_HOTPLUG_INT_EN | \ - HDMID_HOTPLUG_INT_EN | \ - SDVOB_HOTPLUG_INT_EN | \ - SDVOC_HOTPLUG_INT_EN | \ - TV_HOTPLUG_INT_EN | \ - CRT_HOTPLUG_INT_EN) - #define PORT_HOTPLUG_STAT 0x61114 #define HDMIB_HOTPLUG_INT_STATUS (1 << 29) @@ -879,7 +898,6 @@ #define DPC_HOTPLUG_INT_STATUS (1 << 28) #define HDMID_HOTPLUG_INT_STATUS (1 << 27) #define DPD_HOTPLUG_INT_STATUS (1 << 27) -#define CRT_EOS_INT_STATUS (1 << 12) #define CRT_HOTPLUG_INT_STATUS (1 << 11) #define TV_HOTPLUG_INT_STATUS (1 << 10) #define CRT_HOTPLUG_MONITOR_MASK (3 << 8) @@ -968,6 +986,8 @@ #define LVDS_PORT_EN (1 << 31) /* Selects pipe B for LVDS data. Must be set on pre-965. */ #define LVDS_PIPEB_SELECT (1 << 30) +/* LVDS dithering flag on 965/g4x platform */ +#define LVDS_ENABLE_DITHER (1 << 25) /* Enable border for unscaled (or aspect-scaled) display */ #define LVDS_BORDER_ENABLE (1 << 15) /* @@ -1620,7 +1640,7 @@ #define DP_CLOCK_OUTPUT_ENABLE (1 << 13) #define DP_SCRAMBLING_DISABLE (1 << 12) -#define DP_SCRAMBLING_DISABLE_IGDNG (1 << 7) +#define DP_SCRAMBLING_DISABLE_IRONLAKE (1 << 7) /** limit RGB values to avoid confusing TVs */ #define DP_COLOR_RANGE_16_235 (1 << 8) @@ -1737,6 +1757,8 @@ /* Display & cursor control */ +/* dithering flag on Ironlake */ +#define PIPE_ENABLE_DITHER (1 << 4) /* Pipe A */ #define PIPEADSL 0x70000 #define PIPEACONF 0x70008 @@ -1804,11 +1826,11 @@ #define DSPFW_PLANEB_SHIFT 8 #define DSPFW2 0x70038 #define DSPFW_CURSORA_MASK 0x00003f00 -#define DSPFW_CURSORA_SHIFT 16 +#define DSPFW_CURSORA_SHIFT 8 #define DSPFW3 0x7003c #define DSPFW_HPLL_SR_EN (1<<31) #define DSPFW_CURSOR_SR_SHIFT 24 -#define IGD_SELF_REFRESH_EN (1<<30) +#define PINEVIEW_SELF_REFRESH_EN (1<<30) /* FIFO watermark sizes etc */ #define G4X_FIFO_LINE_SIZE 64 @@ -1824,16 +1846,16 @@ #define G4X_MAX_WM 0x3f #define I915_MAX_WM 0x3f -#define IGD_DISPLAY_FIFO 512 /* in 64byte unit */ -#define IGD_FIFO_LINE_SIZE 64 -#define IGD_MAX_WM 0x1ff -#define IGD_DFT_WM 0x3f -#define IGD_DFT_HPLLOFF_WM 0 -#define IGD_GUARD_WM 10 -#define IGD_CURSOR_FIFO 64 -#define IGD_CURSOR_MAX_WM 0x3f -#define IGD_CURSOR_DFT_WM 0 -#define IGD_CURSOR_GUARD_WM 5 +#define PINEVIEW_DISPLAY_FIFO 512 /* in 64byte unit */ +#define PINEVIEW_FIFO_LINE_SIZE 64 +#define PINEVIEW_MAX_WM 0x1ff +#define PINEVIEW_DFT_WM 0x3f +#define PINEVIEW_DFT_HPLLOFF_WM 0 +#define PINEVIEW_GUARD_WM 10 +#define PINEVIEW_CURSOR_FIFO 64 +#define PINEVIEW_CURSOR_MAX_WM 0x3f +#define PINEVIEW_CURSOR_DFT_WM 0 +#define PINEVIEW_CURSOR_GUARD_WM 5 /* * The two pipe frame counter registers are not synchronized, so @@ -1907,6 +1929,7 @@ #define DISPPLANE_16BPP (0x5<<26) #define DISPPLANE_32BPP_NO_ALPHA (0x6<<26) #define DISPPLANE_32BPP (0x7<<26) +#define DISPPLANE_32BPP_30BIT_NO_ALPHA (0xa<<26) #define DISPPLANE_STEREO_ENABLE (1<<25) #define DISPPLANE_STEREO_DISABLE 0 #define DISPPLANE_SEL_PIPE_MASK (1<<24) @@ -1918,7 +1941,7 @@ #define DISPPLANE_NO_LINE_DOUBLE 0 #define DISPPLANE_STEREO_POLARITY_FIRST 0 #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18) -#define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* IGDNG */ +#define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* Ironlake */ #define DISPPLANE_TILED (1<<10) #define DSPAADDR 0x70184 #define DSPASTRIDE 0x70188 @@ -1971,7 +1994,7 @@ # define VGA_2X_MODE (1 << 30) # define VGA_PIPE_B_SELECT (1 << 29) -/* IGDNG */ +/* Ironlake */ #define CPU_VGACNTRL 0x41000 @@ -2098,6 +2121,7 @@ #define DEIER 0x4400c /* GT interrupt */ +#define GT_PIPE_NOTIFY (1 << 4) #define GT_SYNC_STATUS (1 << 2) #define GT_USER_INTERRUPT (1 << 0) @@ -2117,6 +2141,7 @@ #define SDE_PORTC_HOTPLUG (1 << 9) #define SDE_PORTB_HOTPLUG (1 << 8) #define SDE_SDVOB_HOTPLUG (1 << 6) +#define SDE_HOTPLUG_MASK (0xf << 8) #define SDEISR 0xc4000 #define SDEIMR 0xc4004 @@ -2157,6 +2182,13 @@ #define PCH_GPIOE 0xc5020 #define PCH_GPIOF 0xc5024 +#define PCH_GMBUS0 0xc5100 +#define PCH_GMBUS1 0xc5104 +#define PCH_GMBUS2 0xc5108 +#define PCH_GMBUS3 0xc510c +#define PCH_GMBUS4 0xc5110 +#define PCH_GMBUS5 0xc5120 + #define PCH_DPLL_A 0xc6014 #define PCH_DPLL_B 0xc6018 @@ -2292,7 +2324,7 @@ #define FDI_DP_PORT_WIDTH_X3 (2<<19) #define FDI_DP_PORT_WIDTH_X4 (3<<19) #define FDI_TX_ENHANCE_FRAME_ENABLE (1<<18) -/* IGDNG: hardwired to 1 */ +/* Ironlake: hardwired to 1 */ #define FDI_TX_PLL_ENABLE (1<<14) /* both Tx and Rx */ #define FDI_SCRAMBLING_ENABLE (0<<7) --- linux-2.6.32.orig/drivers/gpu/drm/i915/i915_opregion.c +++ linux-2.6.32/drivers/gpu/drm/i915/i915_opregion.c @@ -118,6 +118,10 @@ #define ASLE_BACKLIGHT_FAIL (2<<12) #define ASLE_PFIT_FAIL (2<<14) #define ASLE_PWM_FREQ_FAIL (2<<16) +#define ASLE_ALS_ILLUM_FAILED (1<<10) +#define ASLE_BACKLIGHT_FAILED (1<<12) +#define ASLE_PFIT_FAILED (1<<14) +#define ASLE_PWM_FREQ_FAILED (1<<16) /* ASLE backlight brightness to set */ #define ASLE_BCLP_VALID (1<<31) @@ -163,7 +167,7 @@ if (IS_I965G(dev) && (blc_pwm_ctl2 & BLM_COMBINATION_MODE)) pci_write_config_dword(dev->pdev, PCI_LBPC, bclp); else { - if (IS_IGD(dev)) { + if (IS_PINEVIEW(dev)) { blc_pwm_ctl &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1); max_backlight = (blc_pwm_ctl & BACKLIGHT_MODULATION_FREQ_MASK) >> BACKLIGHT_MODULATION_FREQ_SHIFT; @@ -224,7 +228,7 @@ asle_req = asle->aslc & ASLE_REQ_MSK; if (!asle_req) { - DRM_DEBUG("non asle set request??\n"); + DRM_DEBUG_DRIVER("non asle set request??\n"); return; } @@ -243,6 +247,73 @@ asle->aslc = asle_stat; } +static u32 asle_set_backlight_ironlake(struct drm_device *dev, u32 bclp) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + struct opregion_asle *asle = dev_priv->opregion.asle; + u32 cpu_pwm_ctl, pch_pwm_ctl2; + u32 max_backlight, level; + + if (!(bclp & ASLE_BCLP_VALID)) + return ASLE_BACKLIGHT_FAILED; + + bclp &= ASLE_BCLP_MSK; + if (bclp < 0 || bclp > 255) + return ASLE_BACKLIGHT_FAILED; + + cpu_pwm_ctl = I915_READ(BLC_PWM_CPU_CTL); + pch_pwm_ctl2 = I915_READ(BLC_PWM_PCH_CTL2); + /* get the max PWM frequency */ + max_backlight = (pch_pwm_ctl2 >> 16) & BACKLIGHT_DUTY_CYCLE_MASK; + /* calculate the expected PMW frequency */ + level = (bclp * max_backlight) / 255; + /* reserve the high 16 bits */ + cpu_pwm_ctl &= ~(BACKLIGHT_DUTY_CYCLE_MASK); + /* write the updated PWM frequency */ + I915_WRITE(BLC_PWM_CPU_CTL, cpu_pwm_ctl | level); + + asle->cblv = (bclp*0x64)/0xff | ASLE_CBLV_VALID; + + return 0; +} + +void ironlake_opregion_gse_intr(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + struct opregion_asle *asle = dev_priv->opregion.asle; + u32 asle_stat = 0; + u32 asle_req; + + if (!asle) + return; + + asle_req = asle->aslc & ASLE_REQ_MSK; + + if (!asle_req) { + DRM_DEBUG_DRIVER("non asle set request??\n"); + return; + } + + if (asle_req & ASLE_SET_ALS_ILLUM) { + DRM_DEBUG_DRIVER("Illum is not supported\n"); + asle_stat |= ASLE_ALS_ILLUM_FAILED; + } + + if (asle_req & ASLE_SET_BACKLIGHT) + asle_stat |= asle_set_backlight_ironlake(dev, asle->bclp); + + if (asle_req & ASLE_SET_PFIT) { + DRM_DEBUG_DRIVER("Pfit is not supported\n"); + asle_stat |= ASLE_PFIT_FAILED; + } + + if (asle_req & ASLE_SET_PWM_FREQ) { + DRM_DEBUG_DRIVER("PWM freq is not supported\n"); + asle_stat |= ASLE_PWM_FREQ_FAILED; + } + + asle->aslc = asle_stat; +} #define ASLE_ALS_EN (1<<0) #define ASLE_BLC_EN (1<<1) #define ASLE_PFIT_EN (1<<2) @@ -258,8 +329,7 @@ unsigned long irqflags; spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); - i915_enable_pipestat(dev_priv, 1, - I915_LEGACY_BLC_EVENT_ENABLE); + intel_enable_asle(dev); spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags); } @@ -361,9 +431,9 @@ int err = 0; pci_read_config_dword(dev->pdev, PCI_ASLS, &asls); - DRM_DEBUG("graphic opregion physical addr: 0x%x\n", asls); + DRM_DEBUG_DRIVER("graphic opregion physical addr: 0x%x\n", asls); if (asls == 0) { - DRM_DEBUG("ACPI OpRegion not supported!\n"); + DRM_DEBUG_DRIVER("ACPI OpRegion not supported!\n"); return -ENOTSUPP; } @@ -373,30 +443,30 @@ opregion->header = base; if (memcmp(opregion->header->signature, OPREGION_SIGNATURE, 16)) { - DRM_DEBUG("opregion signature mismatch\n"); + DRM_DEBUG_DRIVER("opregion signature mismatch\n"); err = -EINVAL; goto err_out; } mboxes = opregion->header->mboxes; if (mboxes & MBOX_ACPI) { - DRM_DEBUG("Public ACPI methods supported\n"); + DRM_DEBUG_DRIVER("Public ACPI methods supported\n"); opregion->acpi = base + OPREGION_ACPI_OFFSET; if (drm_core_check_feature(dev, DRIVER_MODESET)) intel_didl_outputs(dev); } else { - DRM_DEBUG("Public ACPI methods not supported\n"); + DRM_DEBUG_DRIVER("Public ACPI methods not supported\n"); err = -ENOTSUPP; goto err_out; } opregion->enabled = 1; if (mboxes & MBOX_SWSCI) { - DRM_DEBUG("SWSCI supported\n"); + DRM_DEBUG_DRIVER("SWSCI supported\n"); opregion->swsci = base + OPREGION_SWSCI_OFFSET; } if (mboxes & MBOX_ASLE) { - DRM_DEBUG("ASLE supported\n"); + DRM_DEBUG_DRIVER("ASLE supported\n"); opregion->asle = base + OPREGION_ASLE_OFFSET; opregion_enable_asle(dev); } --- linux-2.6.32.orig/drivers/gpu/drm/i915/dvo_sil164.c +++ linux-2.6.32/drivers/gpu/drm/i915/dvo_sil164.c @@ -105,7 +105,7 @@ }; if (!sil->quiet) { - DRM_DEBUG("Unable to read register 0x%02x from %s:%02x.\n", + DRM_DEBUG_KMS("Unable to read register 0x%02x from %s:%02x.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } return false; @@ -131,7 +131,7 @@ return true; if (!sil->quiet) { - DRM_DEBUG("Unable to write register 0x%02x to %s:%d.\n", + DRM_DEBUG_KMS("Unable to write register 0x%02x to %s:%d.\n", addr, i2cbus->adapter.name, dvo->slave_addr); } @@ -158,7 +158,7 @@ goto out; if (ch != (SIL164_VID & 0xff)) { - DRM_DEBUG("sil164 not detected got %d: from %s Slave %d.\n", + DRM_DEBUG_KMS("sil164 not detected got %d: from %s Slave %d.\n", ch, adapter->name, dvo->slave_addr); goto out; } @@ -167,13 +167,13 @@ goto out; if (ch != (SIL164_DID & 0xff)) { - DRM_DEBUG("sil164 not detected got %d: from %s Slave %d.\n", + DRM_DEBUG_KMS("sil164 not detected got %d: from %s Slave %d.\n", ch, adapter->name, dvo->slave_addr); goto out; } sil->quiet = false; - DRM_DEBUG("init sil164 dvo controller successfully!\n"); + DRM_DEBUG_KMS("init sil164 dvo controller successfully!\n"); return true; out: @@ -241,15 +241,15 @@ uint8_t val; sil164_readb(dvo, SIL164_FREQ_LO, &val); - DRM_DEBUG("SIL164_FREQ_LO: 0x%02x\n", val); + DRM_LOG_KMS("SIL164_FREQ_LO: 0x%02x\n", val); sil164_readb(dvo, SIL164_FREQ_HI, &val); - DRM_DEBUG("SIL164_FREQ_HI: 0x%02x\n", val); + DRM_LOG_KMS("SIL164_FREQ_HI: 0x%02x\n", val); sil164_readb(dvo, SIL164_REG8, &val); - DRM_DEBUG("SIL164_REG8: 0x%02x\n", val); + DRM_LOG_KMS("SIL164_REG8: 0x%02x\n", val); sil164_readb(dvo, SIL164_REG9, &val); - DRM_DEBUG("SIL164_REG9: 0x%02x\n", val); + DRM_LOG_KMS("SIL164_REG9: 0x%02x\n", val); sil164_readb(dvo, SIL164_REGC, &val); - DRM_DEBUG("SIL164_REGC: 0x%02x\n", val); + DRM_LOG_KMS("SIL164_REGC: 0x%02x\n", val); } static void sil164_save(struct intel_dvo_device *dvo) --- linux-2.6.32.orig/drivers/gpu/drm/i915/Makefile +++ linux-2.6.32/drivers/gpu/drm/i915/Makefile @@ -15,7 +15,6 @@ intel_lvds.o \ intel_bios.o \ intel_dp.o \ - intel_dp_i2c.o \ intel_hdmi.o \ intel_sdvo.o \ intel_modes.o \ @@ -23,6 +22,7 @@ intel_fb.o \ intel_tv.o \ intel_dvo.o \ + intel_overlay.o \ dvo_ch7xxx.o \ dvo_ch7017.o \ dvo_ivch.o \ --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_drv.h +++ linux-2.6.32/drivers/gpu/drm/i915/intel_drv.h @@ -110,6 +110,32 @@ int clone_mask; }; +struct intel_crtc; +struct intel_overlay { + struct drm_device *dev; + struct intel_crtc *crtc; + struct drm_i915_gem_object *vid_bo; + struct drm_i915_gem_object *old_vid_bo; + int active; + int pfit_active; + u32 pfit_vscale_ratio; /* shifted-point number, (1<<12) == 1.0 */ + u32 color_key; + u32 brightness, contrast, saturation; + u32 old_xscale, old_yscale; + /* register access */ + u32 flip_addr; + struct drm_i915_gem_object *reg_bo; + void *virt_addr; + /* flip handling */ + uint32_t last_flip_req; + int hw_wedged; +#define HW_WEDGED 1 +#define NEEDS_WAIT_FOR_FLIP 2 +#define RELEASE_OLD_VID 3 +#define SWITCH_OFF_STAGE_1 4 +#define SWITCH_OFF_STAGE_2 5 +}; + struct intel_crtc { struct drm_crtc base; enum pipe pipe; @@ -121,6 +147,8 @@ bool busy; /* is scanout buffer being updated frequently? */ struct timer_list idle_timer; bool lowfreq_avail; + struct intel_overlay *overlay; + struct intel_unpin_work *unpin_work; }; #define to_intel_crtc(x) container_of(x, struct intel_crtc, base) @@ -134,6 +162,8 @@ int intel_ddc_get_modes(struct intel_output *intel_output); extern bool intel_ddc_probe(struct intel_output *intel_output); void intel_i2c_quirk_set(struct drm_device *dev, bool enable); +void intel_i2c_reset_gmbus(struct drm_device *dev); + extern void intel_crt_init(struct drm_device *dev); extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg); extern bool intel_sdvo_init(struct drm_device *dev, int output_device); @@ -148,6 +178,7 @@ extern void intel_edp_link_config (struct intel_output *, int *, int *); +extern int intel_panel_fitter_pipe (struct drm_device *dev); extern void intel_crtc_load_lut(struct drm_crtc *crtc); extern void intel_encoder_prepare (struct drm_encoder *encoder); extern void intel_encoder_commit (struct drm_encoder *encoder); @@ -177,10 +208,23 @@ u16 blue, int regno); extern void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue, int regno); +extern void intel_init_clock_gating(struct drm_device *dev); extern int intel_framebuffer_create(struct drm_device *dev, struct drm_mode_fb_cmd *mode_cmd, struct drm_framebuffer **fb, struct drm_gem_object *obj); +extern void intel_prepare_page_flip(struct drm_device *dev, int plane); +extern void intel_finish_page_flip(struct drm_device *dev, int pipe); + +extern void intel_setup_overlay(struct drm_device *dev); +extern void intel_cleanup_overlay(struct drm_device *dev); +extern int intel_overlay_switch_off(struct intel_overlay *overlay); +extern int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay, + int interruptible); +extern int intel_overlay_put_image(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int intel_overlay_attrs(struct drm_device *dev, void *data, + struct drm_file *file_priv); #endif /* __INTEL_DRV_H__ */ --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_sdvo.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_sdvo.c @@ -35,8 +35,7 @@ #include "i915_drm.h" #include "i915_drv.h" #include "intel_sdvo_regs.h" - -#undef SDVO_DEBUG +#include static char *tv_format_names[] = { "NTSC_M" , "NTSC_J" , "NTSC_443", @@ -356,7 +355,6 @@ #define SDVO_NAME(dev_priv) ((dev_priv)->output_device == SDVOB ? "SDVOB" : "SDVOC") #define SDVO_PRIV(output) ((struct intel_sdvo_priv *) (output)->dev_priv) -#ifdef SDVO_DEBUG static void intel_sdvo_debug_write(struct intel_output *intel_output, u8 cmd, void *args, int args_len) { @@ -379,9 +377,6 @@ DRM_LOG_KMS("(%02X)", cmd); DRM_LOG_KMS("\n"); } -#else -#define intel_sdvo_debug_write(o, c, a, l) -#endif static void intel_sdvo_write_cmd(struct intel_output *intel_output, u8 cmd, void *args, int args_len) @@ -398,7 +393,6 @@ intel_sdvo_write_byte(intel_output, SDVO_I2C_OPCODE, cmd); } -#ifdef SDVO_DEBUG static const char *cmd_status_names[] = { "Power on", "Success", @@ -427,9 +421,6 @@ DRM_LOG_KMS("(??? %d)", status); DRM_LOG_KMS("\n"); } -#else -#define intel_sdvo_debug_response(o, r, l, s) -#endif static u8 intel_sdvo_read_response(struct intel_output *intel_output, void *response, int response_len) @@ -472,14 +463,63 @@ } /** - * Don't check status code from this as it switches the bus back to the - * SDVO chips which defeats the purpose of doing a bus switch in the first - * place. + * Try to read the response after issuie the DDC switch command. But it + * is noted that we must do the action of reading response and issuing DDC + * switch command in one I2C transaction. Otherwise when we try to start + * another I2C transaction after issuing the DDC bus switch, it will be + * switched to the internal SDVO register. */ static void intel_sdvo_set_control_bus_switch(struct intel_output *intel_output, u8 target) { - intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_CONTROL_BUS_SWITCH, &target, 1); + struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv; + u8 out_buf[2], cmd_buf[2], ret_value[2], ret; + struct i2c_msg msgs[] = { + { + .addr = sdvo_priv->slave_addr >> 1, + .flags = 0, + .len = 2, + .buf = out_buf, + }, + /* the following two are to read the response */ + { + .addr = sdvo_priv->slave_addr >> 1, + .flags = 0, + .len = 1, + .buf = cmd_buf, + }, + { + .addr = sdvo_priv->slave_addr >> 1, + .flags = I2C_M_RD, + .len = 1, + .buf = ret_value, + }, + }; + + intel_sdvo_debug_write(intel_output, SDVO_CMD_SET_CONTROL_BUS_SWITCH, + &target, 1); + /* write the DDC switch command argument */ + intel_sdvo_write_byte(intel_output, SDVO_I2C_ARG_0, target); + + out_buf[0] = SDVO_I2C_OPCODE; + out_buf[1] = SDVO_CMD_SET_CONTROL_BUS_SWITCH; + cmd_buf[0] = SDVO_I2C_CMD_STATUS; + cmd_buf[1] = 0; + ret_value[0] = 0; + ret_value[1] = 0; + + ret = i2c_transfer(intel_output->i2c_bus, msgs, 3); + if (ret != 3) { + /* failure in I2C transfer */ + DRM_DEBUG_KMS("I2c transfer returned %d\n", ret); + return; + } + if (ret_value[0] != SDVO_CMD_STATUS_SUCCESS) { + DRM_DEBUG_KMS("DDC switch command returns response %d\n", + ret_value[0]); + return; + } + return; } static bool intel_sdvo_set_target_input(struct intel_output *intel_output, bool target_0, bool target_1) @@ -1589,6 +1629,32 @@ edid = drm_get_edid(&intel_output->base, intel_output->ddc_bus); + /* This is only applied to SDVO cards with multiple outputs */ + if (edid == NULL && intel_sdvo_multifunc_encoder(intel_output)) { + uint8_t saved_ddc, temp_ddc; + saved_ddc = sdvo_priv->ddc_bus; + temp_ddc = sdvo_priv->ddc_bus >> 1; + /* + * Don't use the 1 as the argument of DDC bus switch to get + * the EDID. It is used for SDVO SPD ROM. + */ + while(temp_ddc > 1) { + sdvo_priv->ddc_bus = temp_ddc; + edid = drm_get_edid(&intel_output->base, + intel_output->ddc_bus); + if (edid) { + /* + * When we can get the EDID, maybe it is the + * correct DDC bus. Update it. + */ + sdvo_priv->ddc_bus = temp_ddc; + break; + } + temp_ddc >>= 1; + } + if (edid == NULL) + sdvo_priv->ddc_bus = saved_ddc; + } /* when there is no edid and no monitor is connected with VGA * port, try to use the CRT ddc to read the EDID for DVI-connector */ @@ -1627,6 +1693,10 @@ intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_ATTACHED_DISPLAYS, NULL, 0); + if (sdvo_priv->is_tv) { + /* add 30ms delay when the output type is SDVO-TV */ + mdelay(30); + } status = intel_sdvo_read_response(intel_output, &response, 2); DRM_DEBUG_KMS("SDVO response %d %d\n", response & 0xff, response >> 8); @@ -2214,6 +2284,25 @@ return 0x72; } +static int intel_sdvo_bad_tv_callback(const struct dmi_system_id *id) +{ + DRM_DEBUG_KMS("Ignoring bad SDVO TV connector for %s\n", id->ident); + return 1; +} + +static struct dmi_system_id intel_sdvo_bad_tv[] = { + { + .callback = intel_sdvo_bad_tv_callback, + .ident = "IntelG45/ICH10R/DME1737", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "IBM CORPORATION"), + DMI_MATCH(DMI_PRODUCT_NAME, "4800784"), + }, + }, + + { } /* terminating entry */ +}; + static bool intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags) { @@ -2254,7 +2343,8 @@ (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | (1 << INTEL_ANALOG_CLONE_BIT); } - } else if (flags & SDVO_OUTPUT_SVID0) { + } else if ((flags & SDVO_OUTPUT_SVID0) && + !dmi_check_system(intel_sdvo_bad_tv)) { sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0; encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; @@ -2276,6 +2366,14 @@ connector->connector_type = DRM_MODE_CONNECTOR_VGA; intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | (1 << INTEL_ANALOG_CLONE_BIT); + } else if (flags & SDVO_OUTPUT_CVBS0) { + + sdvo_priv->controlled_output = SDVO_OUTPUT_CVBS0; + encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; + connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; + sdvo_priv->is_tv = true; + intel_output->needs_tv_clock = true; + intel_output->clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; } else if (flags & SDVO_OUTPUT_LVDS0) { sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS0; @@ -2668,6 +2766,7 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device) { + struct drm_i915_private *dev_priv = dev->dev_private; struct drm_connector *connector; struct intel_output *intel_output; struct intel_sdvo_priv *sdvo_priv; @@ -2714,10 +2813,12 @@ intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOB DDC BUS"); sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA, "SDVOB/VGA DDC BUS"); + dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS; } else { intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOC DDC BUS"); sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA, "SDVOC/VGA DDC BUS"); + dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS; } if (intel_output->ddc_bus == NULL) @@ -2726,7 +2827,7 @@ /* Wrap with our custom algo which switches to DDC mode */ intel_output->ddc_bus->algo = &intel_sdvo_i2c_bit_algo; - /* In defaut case sdvo lvds is false */ + /* In default case sdvo lvds is false */ intel_sdvo_get_capabilities(intel_output, &sdvo_priv->caps); if (intel_sdvo_output_setup(intel_output, --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_i2c.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_i2c.c @@ -39,7 +39,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; /* When using bit bashing for I2C, this bit needs to be set to 1 */ - if (!IS_IGD(dev)) + if (!IS_PINEVIEW(dev)) return; if (enable) I915_WRITE(DSPCLK_GATE_D, @@ -118,6 +118,23 @@ udelay(I2C_RISEFALL_TIME); /* wait for the line to change state */ } +/* Clears the GMBUS setup. Our driver doesn't make use of the GMBUS I2C + * engine, but if the BIOS leaves it enabled, then that can break our use + * of the bit-banging I2C interfaces. This is notably the case with the + * Mac Mini in EFI mode. + */ +void +intel_i2c_reset_gmbus(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + + if (IS_IRONLAKE(dev)) { + I915_WRITE(PCH_GMBUS0, 0); + } else { + I915_WRITE(GMBUS0, 0); + } +} + /** * intel_i2c_create - instantiate an Intel i2c bus using the specified GPIO reg * @dev: DRM device @@ -168,6 +185,8 @@ if(i2c_bit_add_bus(&chan->adapter)) goto out_free; + intel_i2c_reset_gmbus(dev); + /* JJJ: raise SCL and SDA? */ intel_i2c_quirk_set(dev, true); set_data(chan, 1); --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_hdmi.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_hdmi.c @@ -82,7 +82,7 @@ /* HW workaround, need to toggle enable bit off and on for 12bpc, but * we do this anyway which shows more stable in testing. */ - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(hdmi_priv->sdvox_reg, temp & ~SDVO_ENABLE); POSTING_READ(hdmi_priv->sdvox_reg); } @@ -99,7 +99,7 @@ /* HW workaround, need to write this twice for issue that may result * in first write getting masked. */ - if (IS_IGDNG(dev)) { + if (IS_IRONLAKE(dev)) { I915_WRITE(hdmi_priv->sdvox_reg, temp); POSTING_READ(hdmi_priv->sdvox_reg); } @@ -225,7 +225,6 @@ .destroy = intel_hdmi_enc_destroy, }; - void intel_hdmi_init(struct drm_device *dev, int sdvox_reg) { struct drm_i915_private *dev_priv = dev->dev_private; @@ -254,21 +253,26 @@ if (sdvox_reg == SDVOB) { intel_output->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT); intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "HDMIB"); + dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; } else if (sdvox_reg == SDVOC) { intel_output->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT); intel_output->ddc_bus = intel_i2c_create(dev, GPIOD, "HDMIC"); + dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; } else if (sdvox_reg == HDMIB) { intel_output->clone_mask = (1 << INTEL_HDMID_CLONE_BIT); intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOE, "HDMIB"); + dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; } else if (sdvox_reg == HDMIC) { intel_output->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT); intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOD, "HDMIC"); + dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; } else if (sdvox_reg == HDMID) { intel_output->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT); intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOF, "HDMID"); + dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; } if (!intel_output->ddc_bus) goto err_connector; --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_crt.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_crt.c @@ -39,7 +39,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; u32 temp, reg; - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) reg = PCH_ADPA; else reg = ADPA; @@ -64,34 +64,6 @@ } I915_WRITE(reg, temp); - - if (IS_IGD(dev)) { - if (mode == DRM_MODE_DPMS_OFF) { - /* turn off DAC */ - temp = I915_READ(PORT_HOTPLUG_EN); - temp &= ~CRT_EOS_INT_EN; - I915_WRITE(PORT_HOTPLUG_EN, temp); - - temp = I915_READ(PORT_HOTPLUG_STAT); - if (temp & CRT_EOS_INT_STATUS) - I915_WRITE(PORT_HOTPLUG_STAT, - CRT_EOS_INT_STATUS); - } else { - /* turn on DAC. EOS interrupt must be enabled after DAC - * is enabled, so it sounds not good to enable it in - * i915_driver_irq_postinstall() - * wait 12.5ms after DAC is enabled - */ - msleep(13); - temp = I915_READ(PORT_HOTPLUG_STAT); - if (temp & CRT_EOS_INT_STATUS) - I915_WRITE(PORT_HOTPLUG_STAT, - CRT_EOS_INT_STATUS); - temp = I915_READ(PORT_HOTPLUG_EN); - temp |= CRT_EOS_INT_EN; - I915_WRITE(PORT_HOTPLUG_EN, temp); - } - } } static int intel_crt_mode_valid(struct drm_connector *connector, @@ -141,7 +113,7 @@ else dpll_md_reg = DPLL_B_MD; - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) adpa_reg = PCH_ADPA; else adpa_reg = ADPA; @@ -150,7 +122,7 @@ * Disable separate mode multiplier used when cloning SDVO to CRT * XXX this needs to be adjusted when we really are cloning */ - if (IS_I965G(dev) && !IS_IGDNG(dev)) { + if (IS_I965G(dev) && !HAS_PCH_SPLIT(dev)) { dpll_md = I915_READ(dpll_md_reg); I915_WRITE(dpll_md_reg, dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK); @@ -164,18 +136,18 @@ if (intel_crtc->pipe == 0) { adpa |= ADPA_PIPE_A_SELECT; - if (!IS_IGDNG(dev)) + if (!HAS_PCH_SPLIT(dev)) I915_WRITE(BCLRPAT_A, 0); } else { adpa |= ADPA_PIPE_B_SELECT; - if (!IS_IGDNG(dev)) + if (!HAS_PCH_SPLIT(dev)) I915_WRITE(BCLRPAT_B, 0); } I915_WRITE(adpa_reg, adpa); } -static bool intel_igdng_crt_detect_hotplug(struct drm_connector *connector) +static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct drm_i915_private *dev_priv = dev->dev_private; @@ -185,6 +157,9 @@ adpa = I915_READ(PCH_ADPA); adpa &= ~ADPA_CRT_HOTPLUG_MASK; + /* disable HPD first */ + I915_WRITE(PCH_ADPA, adpa); + (void)I915_READ(PCH_ADPA); adpa |= (ADPA_CRT_HOTPLUG_PERIOD_128 | ADPA_CRT_HOTPLUG_WARMUP_10MS | @@ -194,7 +169,7 @@ ADPA_CRT_HOTPLUG_ENABLE | ADPA_CRT_HOTPLUG_FORCE_TRIGGER); - DRM_DEBUG("pch crt adpa 0x%x", adpa); + DRM_DEBUG_KMS("pch crt adpa 0x%x", adpa); I915_WRITE(PCH_ADPA, adpa); while ((I915_READ(PCH_ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) != 0) @@ -227,8 +202,8 @@ u32 hotplug_en; int i, tries = 0; - if (IS_IGDNG(dev)) - return intel_igdng_crt_detect_hotplug(connector); + if (HAS_PCH_SPLIT(dev)) + return intel_ironlake_crt_detect_hotplug(connector); /* * On 4 series desktop, CRT detect sequence need to be done twice @@ -549,12 +524,12 @@ &intel_output->enc); /* Set up the DDC bus. */ - if (IS_IGDNG(dev)) + if (HAS_PCH_SPLIT(dev)) i2c_reg = PCH_GPIOA; else { i2c_reg = GPIOA; /* Use VBT information for CRT DDC if available */ - if (dev_priv->crt_ddc_bus != -1) + if (dev_priv->crt_ddc_bus != 0) i2c_reg = dev_priv->crt_ddc_bus; } intel_output->ddc_bus = intel_i2c_create(dev, i2c_reg, "CRTDDC_A"); @@ -576,4 +551,6 @@ drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); drm_sysfs_connector_add(connector); + + dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS; } --- linux-2.6.32.orig/drivers/gpu/drm/i915/intel_overlay.c +++ linux-2.6.32/drivers/gpu/drm/i915/intel_overlay.c @@ -0,0 +1,1421 @@ +/* + * Copyright © 2009 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Authors: + * Daniel Vetter + * + * Derived from Xorg ddx, xf86-video-intel, src/i830_video.c + */ +#include "drmP.h" +#include "drm.h" +#include "i915_drm.h" +#include "i915_drv.h" +#include "i915_reg.h" +#include "intel_drv.h" + +/* Limits for overlay size. According to intel doc, the real limits are: + * Y width: 4095, UV width (planar): 2047, Y height: 2047, + * UV width (planar): * 1023. But the xorg thinks 2048 for height and width. Use + * the mininum of both. */ +#define IMAGE_MAX_WIDTH 2048 +#define IMAGE_MAX_HEIGHT 2046 /* 2 * 1023 */ +/* on 830 and 845 these large limits result in the card hanging */ +#define IMAGE_MAX_WIDTH_LEGACY 1024 +#define IMAGE_MAX_HEIGHT_LEGACY 1088 + +/* overlay register definitions */ +/* OCMD register */ +#define OCMD_TILED_SURFACE (0x1<<19) +#define OCMD_MIRROR_MASK (0x3<<17) +#define OCMD_MIRROR_MODE (0x3<<17) +#define OCMD_MIRROR_HORIZONTAL (0x1<<17) +#define OCMD_MIRROR_VERTICAL (0x2<<17) +#define OCMD_MIRROR_BOTH (0x3<<17) +#define OCMD_BYTEORDER_MASK (0x3<<14) /* zero for YUYV or FOURCC YUY2 */ +#define OCMD_UV_SWAP (0x1<<14) /* YVYU */ +#define OCMD_Y_SWAP (0x2<<14) /* UYVY or FOURCC UYVY */ +#define OCMD_Y_AND_UV_SWAP (0x3<<14) /* VYUY */ +#define OCMD_SOURCE_FORMAT_MASK (0xf<<10) +#define OCMD_RGB_888 (0x1<<10) /* not in i965 Intel docs */ +#define OCMD_RGB_555 (0x2<<10) /* not in i965 Intel docs */ +#define OCMD_RGB_565 (0x3<<10) /* not in i965 Intel docs */ +#define OCMD_YUV_422_PACKED (0x8<<10) +#define OCMD_YUV_411_PACKED (0x9<<10) /* not in i965 Intel docs */ +#define OCMD_YUV_420_PLANAR (0xc<<10) +#define OCMD_YUV_422_PLANAR (0xd<<10) +#define OCMD_YUV_410_PLANAR (0xe<<10) /* also 411 */ +#define OCMD_TVSYNCFLIP_PARITY (0x1<<9) +#define OCMD_TVSYNCFLIP_ENABLE (0x1<<7) +#define OCMD_BUF_TYPE_MASK (Ox1<<5) +#define OCMD_BUF_TYPE_FRAME (0x0<<5) +#define OCMD_BUF_TYPE_FIELD (0x1<<5) +#define OCMD_TEST_MODE (0x1<<4) +#define OCMD_BUFFER_SELECT (0x3<<2) +#define OCMD_BUFFER0 (0x0<<2) +#define OCMD_BUFFER1 (0x1<<2) +#define OCMD_FIELD_SELECT (0x1<<2) +#define OCMD_FIELD0 (0x0<<1) +#define OCMD_FIELD1 (0x1<<1) +#define OCMD_ENABLE (0x1<<0) + +/* OCONFIG register */ +#define OCONF_PIPE_MASK (0x1<<18) +#define OCONF_PIPE_A (0x0<<18) +#define OCONF_PIPE_B (0x1<<18) +#define OCONF_GAMMA2_ENABLE (0x1<<16) +#define OCONF_CSC_MODE_BT601 (0x0<<5) +#define OCONF_CSC_MODE_BT709 (0x1<<5) +#define OCONF_CSC_BYPASS (0x1<<4) +#define OCONF_CC_OUT_8BIT (0x1<<3) +#define OCONF_TEST_MODE (0x1<<2) +#define OCONF_THREE_LINE_BUFFER (0x1<<0) +#define OCONF_TWO_LINE_BUFFER (0x0<<0) + +/* DCLRKM (dst-key) register */ +#define DST_KEY_ENABLE (0x1<<31) +#define CLK_RGB24_MASK 0x0 +#define CLK_RGB16_MASK 0x070307 +#define CLK_RGB15_MASK 0x070707 +#define CLK_RGB8I_MASK 0xffffff + +#define RGB16_TO_COLORKEY(c) \ + (((c & 0xF800) << 8) | ((c & 0x07E0) << 5) | ((c & 0x001F) << 3)) +#define RGB15_TO_COLORKEY(c) \ + (((c & 0x7c00) << 9) | ((c & 0x03E0) << 6) | ((c & 0x001F) << 3)) + +/* overlay flip addr flag */ +#define OFC_UPDATE 0x1 + +/* polyphase filter coefficients */ +#define N_HORIZ_Y_TAPS 5 +#define N_VERT_Y_TAPS 3 +#define N_HORIZ_UV_TAPS 3 +#define N_VERT_UV_TAPS 3 +#define N_PHASES 17 +#define MAX_TAPS 5 + +/* memory bufferd overlay registers */ +struct overlay_registers { + u32 OBUF_0Y; + u32 OBUF_1Y; + u32 OBUF_0U; + u32 OBUF_0V; + u32 OBUF_1U; + u32 OBUF_1V; + u32 OSTRIDE; + u32 YRGB_VPH; + u32 UV_VPH; + u32 HORZ_PH; + u32 INIT_PHS; + u32 DWINPOS; + u32 DWINSZ; + u32 SWIDTH; + u32 SWIDTHSW; + u32 SHEIGHT; + u32 YRGBSCALE; + u32 UVSCALE; + u32 OCLRC0; + u32 OCLRC1; + u32 DCLRKV; + u32 DCLRKM; + u32 SCLRKVH; + u32 SCLRKVL; + u32 SCLRKEN; + u32 OCONFIG; + u32 OCMD; + u32 RESERVED1; /* 0x6C */ + u32 OSTART_0Y; + u32 OSTART_1Y; + u32 OSTART_0U; + u32 OSTART_0V; + u32 OSTART_1U; + u32 OSTART_1V; + u32 OTILEOFF_0Y; + u32 OTILEOFF_1Y; + u32 OTILEOFF_0U; + u32 OTILEOFF_0V; + u32 OTILEOFF_1U; + u32 OTILEOFF_1V; + u32 FASTHSCALE; /* 0xA0 */ + u32 UVSCALEV; /* 0xA4 */ + u32 RESERVEDC[(0x200 - 0xA8) / 4]; /* 0xA8 - 0x1FC */ + u16 Y_VCOEFS[N_VERT_Y_TAPS * N_PHASES]; /* 0x200 */ + u16 RESERVEDD[0x100 / 2 - N_VERT_Y_TAPS * N_PHASES]; + u16 Y_HCOEFS[N_HORIZ_Y_TAPS * N_PHASES]; /* 0x300 */ + u16 RESERVEDE[0x200 / 2 - N_HORIZ_Y_TAPS * N_PHASES]; + u16 UV_VCOEFS[N_VERT_UV_TAPS * N_PHASES]; /* 0x500 */ + u16 RESERVEDF[0x100 / 2 - N_VERT_UV_TAPS * N_PHASES]; + u16 UV_HCOEFS[N_HORIZ_UV_TAPS * N_PHASES]; /* 0x600 */ + u16 RESERVEDG[0x100 / 2 - N_HORIZ_UV_TAPS * N_PHASES]; +}; + +/* overlay flip addr flag */ +#define OFC_UPDATE 0x1 + +#define OVERLAY_NONPHYSICAL(dev) (IS_G33(dev) || IS_I965G(dev)) +#define OVERLAY_EXISTS(dev) (!IS_G4X(dev) && !IS_IRONLAKE(dev) && !IS_GEN6(dev)) + + +static struct overlay_registers *intel_overlay_map_regs_atomic(struct intel_overlay *overlay) +{ + drm_i915_private_t *dev_priv = overlay->dev->dev_private; + struct overlay_registers *regs; + + /* no recursive mappings */ + BUG_ON(overlay->virt_addr); + + if (OVERLAY_NONPHYSICAL(overlay->dev)) { + regs = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping, + overlay->reg_bo->gtt_offset); + + if (!regs) { + DRM_ERROR("failed to map overlay regs in GTT\n"); + return NULL; + } + } else + regs = overlay->reg_bo->phys_obj->handle->vaddr; + + return overlay->virt_addr = regs; +} + +static void intel_overlay_unmap_regs_atomic(struct intel_overlay *overlay) +{ + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + + if (OVERLAY_NONPHYSICAL(overlay->dev)) + io_mapping_unmap_atomic(overlay->virt_addr); + + overlay->virt_addr = NULL; + + I915_READ(OVADD); /* flush wc cashes */ + + return; +} + +/* overlay needs to be disable in OCMD reg */ +static int intel_overlay_on(struct intel_overlay *overlay) +{ + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + int ret; + RING_LOCALS; + + BUG_ON(overlay->active); + + overlay->active = 1; + overlay->hw_wedged = NEEDS_WAIT_FOR_FLIP; + + BEGIN_LP_RING(6); + OUT_RING(MI_FLUSH); + OUT_RING(MI_NOOP); + OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_ON); + OUT_RING(overlay->flip_addr | OFC_UPDATE); + OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); + OUT_RING(MI_NOOP); + ADVANCE_LP_RING(); + + overlay->last_flip_req = i915_add_request(dev, NULL, 0); + if (overlay->last_flip_req == 0) + return -ENOMEM; + + ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); + if (ret != 0) + return ret; + + overlay->hw_wedged = 0; + overlay->last_flip_req = 0; + return 0; +} + +/* overlay needs to be enabled in OCMD reg */ +static void intel_overlay_continue(struct intel_overlay *overlay, + bool load_polyphase_filter) +{ + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + u32 flip_addr = overlay->flip_addr; + u32 tmp; + RING_LOCALS; + + BUG_ON(!overlay->active); + + if (load_polyphase_filter) + flip_addr |= OFC_UPDATE; + + /* check for underruns */ + tmp = I915_READ(DOVSTA); + if (tmp & (1 << 17)) + DRM_DEBUG("overlay underrun, DOVSTA: %x\n", tmp); + + BEGIN_LP_RING(4); + OUT_RING(MI_FLUSH); + OUT_RING(MI_NOOP); + OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE); + OUT_RING(flip_addr); + ADVANCE_LP_RING(); + + overlay->last_flip_req = i915_add_request(dev, NULL, 0); +} + +static int intel_overlay_wait_flip(struct intel_overlay *overlay) +{ + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + int ret; + u32 tmp; + RING_LOCALS; + + if (overlay->last_flip_req != 0) { + ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); + if (ret == 0) { + overlay->last_flip_req = 0; + + tmp = I915_READ(ISR); + + if (!(tmp & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) + return 0; + } + } + + /* synchronous slowpath */ + overlay->hw_wedged = RELEASE_OLD_VID; + + BEGIN_LP_RING(2); + OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); + OUT_RING(MI_NOOP); + ADVANCE_LP_RING(); + + overlay->last_flip_req = i915_add_request(dev, NULL, 0); + if (overlay->last_flip_req == 0) + return -ENOMEM; + + ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); + if (ret != 0) + return ret; + + overlay->hw_wedged = 0; + overlay->last_flip_req = 0; + return 0; +} + +/* overlay needs to be disabled in OCMD reg */ +static int intel_overlay_off(struct intel_overlay *overlay) +{ + u32 flip_addr = overlay->flip_addr; + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + int ret; + RING_LOCALS; + + BUG_ON(!overlay->active); + + /* According to intel docs the overlay hw may hang (when switching + * off) without loading the filter coeffs. It is however unclear whether + * this applies to the disabling of the overlay or to the switching off + * of the hw. Do it in both cases */ + flip_addr |= OFC_UPDATE; + + /* wait for overlay to go idle */ + overlay->hw_wedged = SWITCH_OFF_STAGE_1; + + BEGIN_LP_RING(6); + OUT_RING(MI_FLUSH); + OUT_RING(MI_NOOP); + OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE); + OUT_RING(flip_addr); + OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); + OUT_RING(MI_NOOP); + ADVANCE_LP_RING(); + + overlay->last_flip_req = i915_add_request(dev, NULL, 0); + if (overlay->last_flip_req == 0) + return -ENOMEM; + + ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); + if (ret != 0) + return ret; + + /* turn overlay off */ + overlay->hw_wedged = SWITCH_OFF_STAGE_2; + + BEGIN_LP_RING(6); + OUT_RING(MI_FLUSH); + OUT_RING(MI_NOOP); + OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF); + OUT_RING(flip_addr); + OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); + OUT_RING(MI_NOOP); + ADVANCE_LP_RING(); + + overlay->last_flip_req = i915_add_request(dev, NULL, 0); + if (overlay->last_flip_req == 0) + return -ENOMEM; + + ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); + if (ret != 0) + return ret; + + overlay->hw_wedged = 0; + overlay->last_flip_req = 0; + return ret; +} + +static void intel_overlay_off_tail(struct intel_overlay *overlay) +{ + struct drm_gem_object *obj; + + /* never have the overlay hw on without showing a frame */ + BUG_ON(!overlay->vid_bo); + obj = overlay->vid_bo->obj; + + i915_gem_object_unpin(obj); + drm_gem_object_unreference(obj); + overlay->vid_bo = NULL; + + overlay->crtc->overlay = NULL; + overlay->crtc = NULL; + overlay->active = 0; +} + +/* recover from an interruption due to a signal + * We have to be careful not to repeat work forever an make forward progess. */ +int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay, + int interruptible) +{ + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + struct drm_gem_object *obj; + u32 flip_addr; + int ret; + RING_LOCALS; + + if (overlay->hw_wedged == HW_WEDGED) + return -EIO; + + if (overlay->last_flip_req == 0) { + overlay->last_flip_req = i915_add_request(dev, NULL, 0); + if (overlay->last_flip_req == 0) + return -ENOMEM; + } + + ret = i915_do_wait_request(dev, overlay->last_flip_req, interruptible); + if (ret != 0) + return ret; + + switch (overlay->hw_wedged) { + case RELEASE_OLD_VID: + obj = overlay->old_vid_bo->obj; + i915_gem_object_unpin(obj); + drm_gem_object_unreference(obj); + overlay->old_vid_bo = NULL; + break; + case SWITCH_OFF_STAGE_1: + flip_addr = overlay->flip_addr; + flip_addr |= OFC_UPDATE; + + overlay->hw_wedged = SWITCH_OFF_STAGE_2; + + BEGIN_LP_RING(6); + OUT_RING(MI_FLUSH); + OUT_RING(MI_NOOP); + OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF); + OUT_RING(flip_addr); + OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP); + OUT_RING(MI_NOOP); + ADVANCE_LP_RING(); + + overlay->last_flip_req = i915_add_request(dev, NULL, 0); + if (overlay->last_flip_req == 0) + return -ENOMEM; + + ret = i915_do_wait_request(dev, overlay->last_flip_req, + interruptible); + if (ret != 0) + return ret; + + case SWITCH_OFF_STAGE_2: + intel_overlay_off_tail(overlay); + break; + default: + BUG_ON(overlay->hw_wedged != NEEDS_WAIT_FOR_FLIP); + } + + overlay->hw_wedged = 0; + overlay->last_flip_req = 0; + return 0; +} + +/* Wait for pending overlay flip and release old frame. + * Needs to be called before the overlay register are changed + * via intel_overlay_(un)map_regs_atomic */ +static int intel_overlay_release_old_vid(struct intel_overlay *overlay) +{ + int ret; + struct drm_gem_object *obj; + + /* only wait if there is actually an old frame to release to + * guarantee forward progress */ + if (!overlay->old_vid_bo) + return 0; + + ret = intel_overlay_wait_flip(overlay); + if (ret != 0) + return ret; + + obj = overlay->old_vid_bo->obj; + i915_gem_object_unpin(obj); + drm_gem_object_unreference(obj); + overlay->old_vid_bo = NULL; + + return 0; +} + +struct put_image_params { + int format; + short dst_x; + short dst_y; + short dst_w; + short dst_h; + short src_w; + short src_scan_h; + short src_scan_w; + short src_h; + short stride_Y; + short stride_UV; + int offset_Y; + int offset_U; + int offset_V; +}; + +static int packed_depth_bytes(u32 format) +{ + switch (format & I915_OVERLAY_DEPTH_MASK) { + case I915_OVERLAY_YUV422: + return 4; + case I915_OVERLAY_YUV411: + /* return 6; not implemented */ + default: + return -EINVAL; + } +} + +static int packed_width_bytes(u32 format, short width) +{ + switch (format & I915_OVERLAY_DEPTH_MASK) { + case I915_OVERLAY_YUV422: + return width << 1; + default: + return -EINVAL; + } +} + +static int uv_hsubsampling(u32 format) +{ + switch (format & I915_OVERLAY_DEPTH_MASK) { + case I915_OVERLAY_YUV422: + case I915_OVERLAY_YUV420: + return 2; + case I915_OVERLAY_YUV411: + case I915_OVERLAY_YUV410: + return 4; + default: + return -EINVAL; + } +} + +static int uv_vsubsampling(u32 format) +{ + switch (format & I915_OVERLAY_DEPTH_MASK) { + case I915_OVERLAY_YUV420: + case I915_OVERLAY_YUV410: + return 2; + case I915_OVERLAY_YUV422: + case I915_OVERLAY_YUV411: + return 1; + default: + return -EINVAL; + } +} + +static u32 calc_swidthsw(struct drm_device *dev, u32 offset, u32 width) +{ + u32 mask, shift, ret; + if (IS_I9XX(dev)) { + mask = 0x3f; + shift = 6; + } else { + mask = 0x1f; + shift = 5; + } + ret = ((offset + width + mask) >> shift) - (offset >> shift); + if (IS_I9XX(dev)) + ret <<= 1; + ret -=1; + return ret << 2; +} + +static const u16 y_static_hcoeffs[N_HORIZ_Y_TAPS * N_PHASES] = { + 0x3000, 0xb4a0, 0x1930, 0x1920, 0xb4a0, + 0x3000, 0xb500, 0x19d0, 0x1880, 0xb440, + 0x3000, 0xb540, 0x1a88, 0x2f80, 0xb3e0, + 0x3000, 0xb580, 0x1b30, 0x2e20, 0xb380, + 0x3000, 0xb5c0, 0x1bd8, 0x2cc0, 0xb320, + 0x3020, 0xb5e0, 0x1c60, 0x2b80, 0xb2c0, + 0x3020, 0xb5e0, 0x1cf8, 0x2a20, 0xb260, + 0x3020, 0xb5e0, 0x1d80, 0x28e0, 0xb200, + 0x3020, 0xb5c0, 0x1e08, 0x3f40, 0xb1c0, + 0x3020, 0xb580, 0x1e78, 0x3ce0, 0xb160, + 0x3040, 0xb520, 0x1ed8, 0x3aa0, 0xb120, + 0x3040, 0xb4a0, 0x1f30, 0x3880, 0xb0e0, + 0x3040, 0xb400, 0x1f78, 0x3680, 0xb0a0, + 0x3020, 0xb340, 0x1fb8, 0x34a0, 0xb060, + 0x3020, 0xb240, 0x1fe0, 0x32e0, 0xb040, + 0x3020, 0xb140, 0x1ff8, 0x3160, 0xb020, + 0xb000, 0x3000, 0x0800, 0x3000, 0xb000}; +static const u16 uv_static_hcoeffs[N_HORIZ_UV_TAPS * N_PHASES] = { + 0x3000, 0x1800, 0x1800, 0xb000, 0x18d0, 0x2e60, + 0xb000, 0x1990, 0x2ce0, 0xb020, 0x1a68, 0x2b40, + 0xb040, 0x1b20, 0x29e0, 0xb060, 0x1bd8, 0x2880, + 0xb080, 0x1c88, 0x3e60, 0xb0a0, 0x1d28, 0x3c00, + 0xb0c0, 0x1db8, 0x39e0, 0xb0e0, 0x1e40, 0x37e0, + 0xb100, 0x1eb8, 0x3620, 0xb100, 0x1f18, 0x34a0, + 0xb100, 0x1f68, 0x3360, 0xb0e0, 0x1fa8, 0x3240, + 0xb0c0, 0x1fe0, 0x3140, 0xb060, 0x1ff0, 0x30a0, + 0x3000, 0x0800, 0x3000}; + +static void update_polyphase_filter(struct overlay_registers *regs) +{ + memcpy(regs->Y_HCOEFS, y_static_hcoeffs, sizeof(y_static_hcoeffs)); + memcpy(regs->UV_HCOEFS, uv_static_hcoeffs, sizeof(uv_static_hcoeffs)); +} + +static bool update_scaling_factors(struct intel_overlay *overlay, + struct overlay_registers *regs, + struct put_image_params *params) +{ + /* fixed point with a 12 bit shift */ + u32 xscale, yscale, xscale_UV, yscale_UV; +#define FP_SHIFT 12 +#define FRACT_MASK 0xfff + bool scale_changed = false; + int uv_hscale = uv_hsubsampling(params->format); + int uv_vscale = uv_vsubsampling(params->format); + + if (params->dst_w > 1) + xscale = ((params->src_scan_w - 1) << FP_SHIFT) + /(params->dst_w); + else + xscale = 1 << FP_SHIFT; + + if (params->dst_h > 1) + yscale = ((params->src_scan_h - 1) << FP_SHIFT) + /(params->dst_h); + else + yscale = 1 << FP_SHIFT; + + /*if (params->format & I915_OVERLAY_YUV_PLANAR) {*/ + xscale_UV = xscale/uv_hscale; + yscale_UV = yscale/uv_vscale; + /* make the Y scale to UV scale ratio an exact multiply */ + xscale = xscale_UV * uv_hscale; + yscale = yscale_UV * uv_vscale; + /*} else { + xscale_UV = 0; + yscale_UV = 0; + }*/ + + if (xscale != overlay->old_xscale || yscale != overlay->old_yscale) + scale_changed = true; + overlay->old_xscale = xscale; + overlay->old_yscale = yscale; + + regs->YRGBSCALE = ((yscale & FRACT_MASK) << 20) + | ((xscale >> FP_SHIFT) << 16) + | ((xscale & FRACT_MASK) << 3); + regs->UVSCALE = ((yscale_UV & FRACT_MASK) << 20) + | ((xscale_UV >> FP_SHIFT) << 16) + | ((xscale_UV & FRACT_MASK) << 3); + regs->UVSCALEV = ((yscale >> FP_SHIFT) << 16) + | ((yscale_UV >> FP_SHIFT) << 0); + + if (scale_changed) + update_polyphase_filter(regs); + + return scale_changed; +} + +static void update_colorkey(struct intel_overlay *overlay, + struct overlay_registers *regs) +{ + u32 key = overlay->color_key; + switch (overlay->crtc->base.fb->bits_per_pixel) { + case 8: + regs->DCLRKV = 0; + regs->DCLRKM = CLK_RGB8I_MASK | DST_KEY_ENABLE; + case 16: + if (overlay->crtc->base.fb->depth == 15) { + regs->DCLRKV = RGB15_TO_COLORKEY(key); + regs->DCLRKM = CLK_RGB15_MASK | DST_KEY_ENABLE; + } else { + regs->DCLRKV = RGB16_TO_COLORKEY(key); + regs->DCLRKM = CLK_RGB16_MASK | DST_KEY_ENABLE; + } + case 24: + case 32: + regs->DCLRKV = key; + regs->DCLRKM = CLK_RGB24_MASK | DST_KEY_ENABLE; + } +} + +static u32 overlay_cmd_reg(struct put_image_params *params) +{ + u32 cmd = OCMD_ENABLE | OCMD_BUF_TYPE_FRAME | OCMD_BUFFER0; + + if (params->format & I915_OVERLAY_YUV_PLANAR) { + switch (params->format & I915_OVERLAY_DEPTH_MASK) { + case I915_OVERLAY_YUV422: + cmd |= OCMD_YUV_422_PLANAR; + break; + case I915_OVERLAY_YUV420: + cmd |= OCMD_YUV_420_PLANAR; + break; + case I915_OVERLAY_YUV411: + case I915_OVERLAY_YUV410: + cmd |= OCMD_YUV_410_PLANAR; + break; + } + } else { /* YUV packed */ + switch (params->format & I915_OVERLAY_DEPTH_MASK) { + case I915_OVERLAY_YUV422: + cmd |= OCMD_YUV_422_PACKED; + break; + case I915_OVERLAY_YUV411: + cmd |= OCMD_YUV_411_PACKED; + break; + } + + switch (params->format & I915_OVERLAY_SWAP_MASK) { + case I915_OVERLAY_NO_SWAP: + break; + case I915_OVERLAY_UV_SWAP: + cmd |= OCMD_UV_SWAP; + break; + case I915_OVERLAY_Y_SWAP: + cmd |= OCMD_Y_SWAP; + break; + case I915_OVERLAY_Y_AND_UV_SWAP: + cmd |= OCMD_Y_AND_UV_SWAP; + break; + } + } + + return cmd; +} + +int intel_overlay_do_put_image(struct intel_overlay *overlay, + struct drm_gem_object *new_bo, + struct put_image_params *params) +{ + int ret, tmp_width; + struct overlay_registers *regs; + bool scale_changed = false; + struct drm_i915_gem_object *bo_priv = new_bo->driver_private; + struct drm_device *dev = overlay->dev; + + BUG_ON(!mutex_is_locked(&dev->struct_mutex)); + BUG_ON(!mutex_is_locked(&dev->mode_config.mutex)); + BUG_ON(!overlay); + + ret = intel_overlay_release_old_vid(overlay); + if (ret != 0) + return ret; + + ret = i915_gem_object_pin(new_bo, PAGE_SIZE); + if (ret != 0) + return ret; + + ret = i915_gem_object_set_to_gtt_domain(new_bo, 0); + if (ret != 0) + goto out_unpin; + + if (!overlay->active) { + regs = intel_overlay_map_regs_atomic(overlay); + if (!regs) { + ret = -ENOMEM; + goto out_unpin; + } + regs->OCONFIG = OCONF_CC_OUT_8BIT; + if (IS_I965GM(overlay->dev)) + regs->OCONFIG |= OCONF_CSC_MODE_BT709; + regs->OCONFIG |= overlay->crtc->pipe == 0 ? + OCONF_PIPE_A : OCONF_PIPE_B; + intel_overlay_unmap_regs_atomic(overlay); + + ret = intel_overlay_on(overlay); + if (ret != 0) + goto out_unpin; + } + + regs = intel_overlay_map_regs_atomic(overlay); + if (!regs) { + ret = -ENOMEM; + goto out_unpin; + } + + regs->DWINPOS = (params->dst_y << 16) | params->dst_x; + regs->DWINSZ = (params->dst_h << 16) | params->dst_w; + + if (params->format & I915_OVERLAY_YUV_PACKED) + tmp_width = packed_width_bytes(params->format, params->src_w); + else + tmp_width = params->src_w; + + regs->SWIDTH = params->src_w; + regs->SWIDTHSW = calc_swidthsw(overlay->dev, + params->offset_Y, tmp_width); + regs->SHEIGHT = params->src_h; + regs->OBUF_0Y = bo_priv->gtt_offset + params-> offset_Y; + regs->OSTRIDE = params->stride_Y; + + if (params->format & I915_OVERLAY_YUV_PLANAR) { + int uv_hscale = uv_hsubsampling(params->format); + int uv_vscale = uv_vsubsampling(params->format); + u32 tmp_U, tmp_V; + regs->SWIDTH |= (params->src_w/uv_hscale) << 16; + tmp_U = calc_swidthsw(overlay->dev, params->offset_U, + params->src_w/uv_hscale); + tmp_V = calc_swidthsw(overlay->dev, params->offset_V, + params->src_w/uv_hscale); + regs->SWIDTHSW |= max_t(u32, tmp_U, tmp_V) << 16; + regs->SHEIGHT |= (params->src_h/uv_vscale) << 16; + regs->OBUF_0U = bo_priv->gtt_offset + params->offset_U; + regs->OBUF_0V = bo_priv->gtt_offset + params->offset_V; + regs->OSTRIDE |= params->stride_UV << 16; + } + + scale_changed = update_scaling_factors(overlay, regs, params); + + update_colorkey(overlay, regs); + + regs->OCMD = overlay_cmd_reg(params); + + intel_overlay_unmap_regs_atomic(overlay); + + intel_overlay_continue(overlay, scale_changed); + + overlay->old_vid_bo = overlay->vid_bo; + overlay->vid_bo = new_bo->driver_private; + + return 0; + +out_unpin: + i915_gem_object_unpin(new_bo); + return ret; +} + +int intel_overlay_switch_off(struct intel_overlay *overlay) +{ + int ret; + struct overlay_registers *regs; + struct drm_device *dev = overlay->dev; + + BUG_ON(!mutex_is_locked(&dev->struct_mutex)); + BUG_ON(!mutex_is_locked(&dev->mode_config.mutex)); + + if (overlay->hw_wedged) { + ret = intel_overlay_recover_from_interrupt(overlay, 1); + if (ret != 0) + return ret; + } + + if (!overlay->active) + return 0; + + ret = intel_overlay_release_old_vid(overlay); + if (ret != 0) + return ret; + + regs = intel_overlay_map_regs_atomic(overlay); + regs->OCMD = 0; + intel_overlay_unmap_regs_atomic(overlay); + + ret = intel_overlay_off(overlay); + if (ret != 0) + return ret; + + intel_overlay_off_tail(overlay); + + return 0; +} + +static int check_overlay_possible_on_crtc(struct intel_overlay *overlay, + struct intel_crtc *crtc) +{ + drm_i915_private_t *dev_priv = overlay->dev->dev_private; + u32 pipeconf; + int pipeconf_reg = (crtc->pipe == 0) ? PIPEACONF : PIPEBCONF; + + if (!crtc->base.enabled || crtc->dpms_mode != DRM_MODE_DPMS_ON) + return -EINVAL; + + pipeconf = I915_READ(pipeconf_reg); + + /* can't use the overlay with double wide pipe */ + if (!IS_I965G(overlay->dev) && pipeconf & PIPEACONF_DOUBLE_WIDE) + return -EINVAL; + + return 0; +} + +static void update_pfit_vscale_ratio(struct intel_overlay *overlay) +{ + struct drm_device *dev = overlay->dev; + drm_i915_private_t *dev_priv = dev->dev_private; + u32 ratio; + u32 pfit_control = I915_READ(PFIT_CONTROL); + + /* XXX: This is not the same logic as in the xorg driver, but more in + * line with the intel documentation for the i965 */ + if (!IS_I965G(dev) && (pfit_control & VERT_AUTO_SCALE)) { + ratio = I915_READ(PFIT_AUTO_RATIOS) >> PFIT_VERT_SCALE_SHIFT; + } else { /* on i965 use the PGM reg to read out the autoscaler values */ + ratio = I915_READ(PFIT_PGM_RATIOS); + if (IS_I965G(dev)) + ratio >>= PFIT_VERT_SCALE_SHIFT_965; + else + ratio >>= PFIT_VERT_SCALE_SHIFT; + } + + overlay->pfit_vscale_ratio = ratio; +} + +static int check_overlay_dst(struct intel_overlay *overlay, + struct drm_intel_overlay_put_image *rec) +{ + struct drm_display_mode *mode = &overlay->crtc->base.mode; + + if ((rec->dst_x < mode->crtc_hdisplay) + && (rec->dst_x + rec->dst_width + <= mode->crtc_hdisplay) + && (rec->dst_y < mode->crtc_vdisplay) + && (rec->dst_y + rec->dst_height + <= mode->crtc_vdisplay)) + return 0; + else + return -EINVAL; +} + +static int check_overlay_scaling(struct put_image_params *rec) +{ + u32 tmp; + + /* downscaling limit is 8.0 */ + tmp = ((rec->src_scan_h << 16) / rec->dst_h) >> 16; + if (tmp > 7) + return -EINVAL; + tmp = ((rec->src_scan_w << 16) / rec->dst_w) >> 16; + if (tmp > 7) + return -EINVAL; + + return 0; +} + +static int check_overlay_src(struct drm_device *dev, + struct drm_intel_overlay_put_image *rec, + struct drm_gem_object *new_bo) +{ + u32 stride_mask; + int depth; + int uv_hscale = uv_hsubsampling(rec->flags); + int uv_vscale = uv_vsubsampling(rec->flags); + size_t tmp; + + /* check src dimensions */ + if (IS_845G(dev) || IS_I830(dev)) { + if (rec->src_height > IMAGE_MAX_HEIGHT_LEGACY + || rec->src_width > IMAGE_MAX_WIDTH_LEGACY) + return -EINVAL; + } else { + if (rec->src_height > IMAGE_MAX_HEIGHT + || rec->src_width > IMAGE_MAX_WIDTH) + return -EINVAL; + } + /* better safe than sorry, use 4 as the maximal subsampling ratio */ + if (rec->src_height < N_VERT_Y_TAPS*4 + || rec->src_width < N_HORIZ_Y_TAPS*4) + return -EINVAL; + + /* check alingment constrains */ + switch (rec->flags & I915_OVERLAY_TYPE_MASK) { + case I915_OVERLAY_RGB: + /* not implemented */ + return -EINVAL; + case I915_OVERLAY_YUV_PACKED: + depth = packed_depth_bytes(rec->flags); + if (uv_vscale != 1) + return -EINVAL; + if (depth < 0) + return depth; + /* ignore UV planes */ + rec->stride_UV = 0; + rec->offset_U = 0; + rec->offset_V = 0; + /* check pixel alignment */ + if (rec->offset_Y % depth) + return -EINVAL; + break; + case I915_OVERLAY_YUV_PLANAR: + if (uv_vscale < 0 || uv_hscale < 0) + return -EINVAL; + /* no offset restrictions for planar formats */ + break; + default: + return -EINVAL; + } + + if (rec->src_width % uv_hscale) + return -EINVAL; + + /* stride checking */ + stride_mask = 63; + + if (rec->stride_Y & stride_mask || rec->stride_UV & stride_mask) + return -EINVAL; + if (IS_I965G(dev) && rec->stride_Y < 512) + return -EINVAL; + + tmp = (rec->flags & I915_OVERLAY_TYPE_MASK) == I915_OVERLAY_YUV_PLANAR ? + 4 : 8; + if (rec->stride_Y > tmp*1024 || rec->stride_UV > 2*1024) + return -EINVAL; + + /* check buffer dimensions */ + switch (rec->flags & I915_OVERLAY_TYPE_MASK) { + case I915_OVERLAY_RGB: + case I915_OVERLAY_YUV_PACKED: + /* always 4 Y values per depth pixels */ + if (packed_width_bytes(rec->flags, rec->src_width) + > rec->stride_Y) + return -EINVAL; + + tmp = rec->stride_Y*rec->src_height; + if (rec->offset_Y + tmp > new_bo->size) + return -EINVAL; + break; + case I915_OVERLAY_YUV_PLANAR: + if (rec->src_width > rec->stride_Y) + return -EINVAL; + if (rec->src_width/uv_hscale > rec->stride_UV) + return -EINVAL; + + tmp = rec->stride_Y*rec->src_height; + if (rec->offset_Y + tmp > new_bo->size) + return -EINVAL; + tmp = rec->stride_UV*rec->src_height; + tmp /= uv_vscale; + if (rec->offset_U + tmp > new_bo->size + || rec->offset_V + tmp > new_bo->size) + return -EINVAL; + break; + } + + return 0; +} + +int intel_overlay_put_image(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_intel_overlay_put_image *put_image_rec = data; + drm_i915_private_t *dev_priv = dev->dev_private; + struct intel_overlay *overlay; + struct drm_mode_object *drmmode_obj; + struct intel_crtc *crtc; + struct drm_gem_object *new_bo; + struct put_image_params *params; + int ret; + + if (!dev_priv) { + DRM_ERROR("called with no initialization\n"); + return -EINVAL; + } + + overlay = dev_priv->overlay; + if (!overlay) { + DRM_DEBUG("userspace bug: no overlay\n"); + return -ENODEV; + } + + if (!(put_image_rec->flags & I915_OVERLAY_ENABLE)) { + mutex_lock(&dev->mode_config.mutex); + mutex_lock(&dev->struct_mutex); + + ret = intel_overlay_switch_off(overlay); + + mutex_unlock(&dev->struct_mutex); + mutex_unlock(&dev->mode_config.mutex); + + return ret; + } + + params = kmalloc(sizeof(struct put_image_params), GFP_KERNEL); + if (!params) + return -ENOMEM; + + drmmode_obj = drm_mode_object_find(dev, put_image_rec->crtc_id, + DRM_MODE_OBJECT_CRTC); + if (!drmmode_obj) { + ret = -ENOENT; + goto out_free; + } + crtc = to_intel_crtc(obj_to_crtc(drmmode_obj)); + + new_bo = drm_gem_object_lookup(dev, file_priv, + put_image_rec->bo_handle); + if (!new_bo) { + ret = -ENOENT; + goto out_free; + } + + mutex_lock(&dev->mode_config.mutex); + mutex_lock(&dev->struct_mutex); + + if (overlay->hw_wedged) { + ret = intel_overlay_recover_from_interrupt(overlay, 1); + if (ret != 0) + goto out_unlock; + } + + if (overlay->crtc != crtc) { + struct drm_display_mode *mode = &crtc->base.mode; + ret = intel_overlay_switch_off(overlay); + if (ret != 0) + goto out_unlock; + + ret = check_overlay_possible_on_crtc(overlay, crtc); + if (ret != 0) + goto out_unlock; + + overlay->crtc = crtc; + crtc->overlay = overlay; + + if (intel_panel_fitter_pipe(dev) == crtc->pipe + /* and line to wide, i.e. one-line-mode */ + && mode->hdisplay > 1024) { + overlay->pfit_active = 1; + update_pfit_vscale_ratio(overlay); + } else + overlay->pfit_active = 0; + } + + ret = check_overlay_dst(overlay, put_image_rec); + if (ret != 0) + goto out_unlock; + + if (overlay->pfit_active) { + params->dst_y = ((((u32)put_image_rec->dst_y) << 12) / + overlay->pfit_vscale_ratio); + /* shifting right rounds downwards, so add 1 */ + params->dst_h = ((((u32)put_image_rec->dst_height) << 12) / + overlay->pfit_vscale_ratio) + 1; + } else { + params->dst_y = put_image_rec->dst_y; + params->dst_h = put_image_rec->dst_height; + } + params->dst_x = put_image_rec->dst_x; + params->dst_w = put_image_rec->dst_width; + + params->src_w = put_image_rec->src_width; + params->src_h = put_image_rec->src_height; + params->src_scan_w = put_image_rec->src_scan_width; + params->src_scan_h = put_image_rec->src_scan_height; + if (params->src_scan_h > params->src_h + || params->src_scan_w > params->src_w) { + ret = -EINVAL; + goto out_unlock; + } + + ret = check_overlay_src(dev, put_image_rec, new_bo); + if (ret != 0) + goto out_unlock; + params->format = put_image_rec->flags & ~I915_OVERLAY_FLAGS_MASK; + params->stride_Y = put_image_rec->stride_Y; + params->stride_UV = put_image_rec->stride_UV; + params->offset_Y = put_image_rec->offset_Y; + params->offset_U = put_image_rec->offset_U; + params->offset_V = put_image_rec->offset_V; + + /* Check scaling after src size to prevent a divide-by-zero. */ + ret = check_overlay_scaling(params); + if (ret != 0) + goto out_unlock; + + ret = intel_overlay_do_put_image(overlay, new_bo, params); + if (ret != 0) + goto out_unlock; + + mutex_unlock(&dev->struct_mutex); + mutex_unlock(&dev->mode_config.mutex); + + kfree(params); + + return 0; + +out_unlock: + mutex_unlock(&dev->struct_mutex); + mutex_unlock(&dev->mode_config.mutex); + drm_gem_object_unreference(new_bo); +out_free: + kfree(params); + + return ret; +} + +static void update_reg_attrs(struct intel_overlay *overlay, + struct overlay_registers *regs) +{ + regs->OCLRC0 = (overlay->contrast << 18) | (overlay->brightness & 0xff); + regs->OCLRC1 = overlay->saturation; +} + +static bool check_gamma_bounds(u32 gamma1, u32 gamma2) +{ + int i; + + if (gamma1 & 0xff000000 || gamma2 & 0xff000000) + return false; + + for (i = 0; i < 3; i++) { + if (((gamma1 >> i * 8) & 0xff) >= ((gamma2 >> i*8) & 0xff)) + return false; + } + + return true; +} + +static bool check_gamma5_errata(u32 gamma5) +{ + int i; + + for (i = 0; i < 3; i++) { + if (((gamma5 >> i*8) & 0xff) == 0x80) + return false; + } + + return true; +} + +static int check_gamma(struct drm_intel_overlay_attrs *attrs) +{ + if (!check_gamma_bounds(0, attrs->gamma0) + || !check_gamma_bounds(attrs->gamma0, attrs->gamma1) + || !check_gamma_bounds(attrs->gamma1, attrs->gamma2) + || !check_gamma_bounds(attrs->gamma2, attrs->gamma3) + || !check_gamma_bounds(attrs->gamma3, attrs->gamma4) + || !check_gamma_bounds(attrs->gamma4, attrs->gamma5) + || !check_gamma_bounds(attrs->gamma5, 0x00ffffff)) + return -EINVAL; + if (!check_gamma5_errata(attrs->gamma5)) + return -EINVAL; + return 0; +} + +int intel_overlay_attrs(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_intel_overlay_attrs *attrs = data; + drm_i915_private_t *dev_priv = dev->dev_private; + struct intel_overlay *overlay; + struct overlay_registers *regs; + int ret; + + if (!dev_priv) { + DRM_ERROR("called with no initialization\n"); + return -EINVAL; + } + + overlay = dev_priv->overlay; + if (!overlay) { + DRM_DEBUG("userspace bug: no overlay\n"); + return -ENODEV; + } + + mutex_lock(&dev->mode_config.mutex); + mutex_lock(&dev->struct_mutex); + + if (!(attrs->flags & I915_OVERLAY_UPDATE_ATTRS)) { + attrs->color_key = overlay->color_key; + attrs->brightness = overlay->brightness; + attrs->contrast = overlay->contrast; + attrs->saturation = overlay->saturation; + + if (IS_I9XX(dev)) { + attrs->gamma0 = I915_READ(OGAMC0); + attrs->gamma1 = I915_READ(OGAMC1); + attrs->gamma2 = I915_READ(OGAMC2); + attrs->gamma3 = I915_READ(OGAMC3); + attrs->gamma4 = I915_READ(OGAMC4); + attrs->gamma5 = I915_READ(OGAMC5); + } + ret = 0; + } else { + overlay->color_key = attrs->color_key; + if (attrs->brightness >= -128 && attrs->brightness <= 127) { + overlay->brightness = attrs->brightness; + } else { + ret = -EINVAL; + goto out_unlock; + } + if (attrs->contrast <= 255) { + overlay->contrast = attrs->contrast; + } else { + ret = -EINVAL; + goto out_unlock; + } + if (attrs->saturation <= 1023) { + overlay->saturation = attrs->saturation; + } else { + ret = -EINVAL; + goto out_unlock; + } + + regs = intel_overlay_map_regs_atomic(overlay); + if (!regs) { + ret = -ENOMEM; + goto out_unlock; + } + + update_reg_attrs(overlay, regs); + + intel_overlay_unmap_regs_atomic(overlay); + + if (attrs->flags & I915_OVERLAY_UPDATE_GAMMA) { + if (!IS_I9XX(dev)) { + ret = -EINVAL; + goto out_unlock; + } + + if (overlay->active) { + ret = -EBUSY; + goto out_unlock; + } + + ret = check_gamma(attrs); + if (ret != 0) + goto out_unlock; + + I915_WRITE(OGAMC0, attrs->gamma0); + I915_WRITE(OGAMC1, attrs->gamma1); + I915_WRITE(OGAMC2, attrs->gamma2); + I915_WRITE(OGAMC3, attrs->gamma3); + I915_WRITE(OGAMC4, attrs->gamma4); + I915_WRITE(OGAMC5, attrs->gamma5); + } + ret = 0; + } + +out_unlock: + mutex_unlock(&dev->struct_mutex); + mutex_unlock(&dev->mode_config.mutex); + + return ret; +} + +void intel_setup_overlay(struct drm_device *dev) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + struct intel_overlay *overlay; + struct drm_gem_object *reg_bo; + struct overlay_registers *regs; + int ret; + + if (!OVERLAY_EXISTS(dev)) + return; + + overlay = kzalloc(sizeof(struct intel_overlay), GFP_KERNEL); + if (!overlay) + return; + overlay->dev = dev; + + reg_bo = drm_gem_object_alloc(dev, PAGE_SIZE); + if (!reg_bo) + goto out_free; + overlay->reg_bo = reg_bo->driver_private; + + if (OVERLAY_NONPHYSICAL(dev)) { + ret = i915_gem_object_pin(reg_bo, PAGE_SIZE); + if (ret) { + DRM_ERROR("failed to pin overlay register bo\n"); + goto out_free_bo; + } + overlay->flip_addr = overlay->reg_bo->gtt_offset; + } else { + ret = i915_gem_attach_phys_object(dev, reg_bo, + I915_GEM_PHYS_OVERLAY_REGS); + if (ret) { + DRM_ERROR("failed to attach phys overlay regs\n"); + goto out_free_bo; + } + overlay->flip_addr = overlay->reg_bo->phys_obj->handle->busaddr; + } + + /* init all values */ + overlay->color_key = 0x0101fe; + overlay->brightness = -19; + overlay->contrast = 75; + overlay->saturation = 146; + + regs = intel_overlay_map_regs_atomic(overlay); + if (!regs) + goto out_free_bo; + + memset(regs, 0, sizeof(struct overlay_registers)); + update_polyphase_filter(regs); + + update_reg_attrs(overlay, regs); + + intel_overlay_unmap_regs_atomic(overlay); + + dev_priv->overlay = overlay; + DRM_INFO("initialized overlay support\n"); + return; + +out_free_bo: + drm_gem_object_unreference(reg_bo); +out_free: + kfree(overlay); + return; +} + +void intel_cleanup_overlay(struct drm_device *dev) +{ + drm_i915_private_t *dev_priv = dev->dev_private; + + if (dev_priv->overlay) { + /* The bo's should be free'd by the generic code already. + * Furthermore modesetting teardown happens beforehand so the + * hardware should be off already */ + BUG_ON(dev_priv->overlay->active); + + kfree(dev_priv->overlay); + } +} --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_bo.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_bo.c @@ -27,6 +27,14 @@ /* * Authors: Thomas Hellstrom */ +/* Notes: + * + * We store bo pointer in drm_mm_node struct so we know which bo own a + * specific node. There is no protection on the pointer, thus to make + * sure things don't go berserk you have to access this pointer while + * holding the global lru lock and make sure anytime you free a node you + * reset the pointer to NULL. + */ #include "ttm/ttm_module.h" #include "ttm/ttm_bo_driver.h" @@ -51,6 +59,59 @@ .mode = S_IRUGO }; +static inline int ttm_mem_type_from_flags(uint32_t flags, uint32_t *mem_type) +{ + int i; + + for (i = 0; i <= TTM_PL_PRIV5; i++) + if (flags & (1 << i)) { + *mem_type = i; + return 0; + } + return -EINVAL; +} + +static void ttm_mem_type_debug(struct ttm_bo_device *bdev, int mem_type) +{ + struct ttm_mem_type_manager *man = &bdev->man[mem_type]; + + printk(KERN_ERR TTM_PFX " has_type: %d\n", man->has_type); + printk(KERN_ERR TTM_PFX " use_type: %d\n", man->use_type); + printk(KERN_ERR TTM_PFX " flags: 0x%08X\n", man->flags); + printk(KERN_ERR TTM_PFX " gpu_offset: 0x%08lX\n", man->gpu_offset); + printk(KERN_ERR TTM_PFX " io_offset: 0x%08lX\n", man->io_offset); + printk(KERN_ERR TTM_PFX " io_size: %ld\n", man->io_size); + printk(KERN_ERR TTM_PFX " size: %llu\n", man->size); + printk(KERN_ERR TTM_PFX " available_caching: 0x%08X\n", + man->available_caching); + printk(KERN_ERR TTM_PFX " default_caching: 0x%08X\n", + man->default_caching); + if (mem_type != TTM_PL_SYSTEM) { + spin_lock(&bdev->glob->lru_lock); + drm_mm_debug_table(&man->manager, TTM_PFX); + spin_unlock(&bdev->glob->lru_lock); + } +} + +static void ttm_bo_mem_space_debug(struct ttm_buffer_object *bo, + struct ttm_placement *placement) +{ + int i, ret, mem_type; + + printk(KERN_ERR TTM_PFX "No space for %p (%lu pages, %luK, %luM)\n", + bo, bo->mem.num_pages, bo->mem.size >> 10, + bo->mem.size >> 20); + for (i = 0; i < placement->num_placement; i++) { + ret = ttm_mem_type_from_flags(placement->placement[i], + &mem_type); + if (ret) + return; + printk(KERN_ERR TTM_PFX " placement[%d]=0x%08X (%d)\n", + i, placement->placement[i], mem_type); + ttm_mem_type_debug(bo->bdev, mem_type); + } +} + static ssize_t ttm_bo_global_show(struct kobject *kobj, struct attribute *attr, char *buffer) @@ -117,12 +178,13 @@ ret = wait_event_interruptible(bo->event_queue, atomic_read(&bo->reserved) == 0); if (unlikely(ret != 0)) - return -ERESTART; + return ret; } else { wait_event(bo->event_queue, atomic_read(&bo->reserved) == 0); } return 0; } +EXPORT_SYMBOL(ttm_bo_wait_unreserved); static void ttm_bo_add_to_lru(struct ttm_buffer_object *bo) { @@ -247,7 +309,6 @@ /* * Call bo->mutex locked. */ - static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc) { struct ttm_bo_device *bdev = bo->bdev; @@ -275,9 +336,10 @@ bo->ttm = ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT, page_flags | TTM_PAGE_FLAG_USER, glob->dummy_read_page); - if (unlikely(bo->ttm == NULL)) + if (unlikely(bo->ttm == NULL)) { ret = -ENOMEM; - break; + break; + } ret = ttm_tt_set_user(bo->ttm, current, bo->buffer_start, bo->num_pages); @@ -328,14 +390,8 @@ } if (bo->mem.mem_type == TTM_PL_SYSTEM) { - - struct ttm_mem_reg *old_mem = &bo->mem; - uint32_t save_flags = old_mem->placement; - - *old_mem = *mem; + bo->mem = *mem; mem->mm_node = NULL; - ttm_flag_masked(&save_flags, mem->placement, - TTM_PL_MASK_MEMTYPE); goto moved; } @@ -370,7 +426,8 @@ bdev->man[bo->mem.mem_type].gpu_offset; bo->cur_placement = bo->mem.placement; spin_unlock(&bo->lock); - } + } else + bo->offset = 0; return 0; @@ -408,6 +465,8 @@ spin_unlock(&bo->lock); spin_lock(&glob->lru_lock); + put_count = ttm_bo_del_from_lru(bo); + ret = ttm_bo_reserve_locked(bo, false, false, false, 0); BUG_ON(ret); if (bo->ttm) @@ -415,19 +474,19 @@ if (!list_empty(&bo->ddestroy)) { list_del_init(&bo->ddestroy); - kref_put(&bo->list_kref, ttm_bo_ref_bug); + ++put_count; } if (bo->mem.mm_node) { + bo->mem.mm_node->private = NULL; drm_mm_put_block(bo->mem.mm_node); bo->mem.mm_node = NULL; } - put_count = ttm_bo_del_from_lru(bo); spin_unlock(&glob->lru_lock); atomic_set(&bo->reserved, 0); while (put_count--) - kref_put(&bo->list_kref, ttm_bo_release_list); + kref_put(&bo->list_kref, ttm_bo_ref_bug); return 0; } @@ -465,52 +524,44 @@ static int ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all) { struct ttm_bo_global *glob = bdev->glob; - struct ttm_buffer_object *entry, *nentry; - struct list_head *list, *next; - int ret; + struct ttm_buffer_object *entry = NULL; + int ret = 0; spin_lock(&glob->lru_lock); - list_for_each_safe(list, next, &bdev->ddestroy) { - entry = list_entry(list, struct ttm_buffer_object, ddestroy); - nentry = NULL; - - /* - * Protect the next list entry from destruction while we - * unlock the lru_lock. - */ + if (list_empty(&bdev->ddestroy)) + goto out_unlock; - if (next != &bdev->ddestroy) { - nentry = list_entry(next, struct ttm_buffer_object, - ddestroy); + entry = list_first_entry(&bdev->ddestroy, + struct ttm_buffer_object, ddestroy); + kref_get(&entry->list_kref); + + for (;;) { + struct ttm_buffer_object *nentry = NULL; + + if (entry->ddestroy.next != &bdev->ddestroy) { + nentry = list_first_entry(&entry->ddestroy, + struct ttm_buffer_object, ddestroy); kref_get(&nentry->list_kref); } - kref_get(&entry->list_kref); spin_unlock(&glob->lru_lock); ret = ttm_bo_cleanup_refs(entry, remove_all); kref_put(&entry->list_kref, ttm_bo_release_list); + entry = nentry; - spin_lock(&glob->lru_lock); - if (nentry) { - bool next_onlist = !list_empty(next); - spin_unlock(&glob->lru_lock); - kref_put(&nentry->list_kref, ttm_bo_release_list); - spin_lock(&glob->lru_lock); - /* - * Someone might have raced us and removed the - * next entry from the list. We don't bother restarting - * list traversal. - */ + if (ret || !entry) + goto out; - if (!next_onlist) - break; - } - if (ret) + spin_lock(&glob->lru_lock); + if (list_empty(&entry->ddestroy)) break; } - ret = !list_empty(&bdev->ddestroy); - spin_unlock(&glob->lru_lock); +out_unlock: + spin_unlock(&glob->lru_lock); +out: + if (entry) + kref_put(&entry->list_kref, ttm_bo_release_list); return ret; } @@ -554,24 +605,21 @@ } EXPORT_SYMBOL(ttm_bo_unref); -static int ttm_bo_evict(struct ttm_buffer_object *bo, unsigned mem_type, - bool interruptible, bool no_wait) +static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible, + bool no_wait) { - int ret = 0; struct ttm_bo_device *bdev = bo->bdev; struct ttm_bo_global *glob = bo->glob; struct ttm_mem_reg evict_mem; - uint32_t proposed_placement; - - if (bo->mem.mem_type != mem_type) - goto out; + struct ttm_placement placement; + int ret = 0; spin_lock(&bo->lock); ret = ttm_bo_wait(bo, false, interruptible, no_wait); spin_unlock(&bo->lock); if (unlikely(ret != 0)) { - if (ret != -ERESTART) { + if (ret != -ERESTARTSYS) { printk(KERN_ERR TTM_PFX "Failed to expire sync object before " "buffer eviction.\n"); @@ -584,116 +632,165 @@ evict_mem = bo->mem; evict_mem.mm_node = NULL; - proposed_placement = bdev->driver->evict_flags(bo); - - ret = ttm_bo_mem_space(bo, proposed_placement, - &evict_mem, interruptible, no_wait); - if (unlikely(ret != 0 && ret != -ERESTART)) - ret = ttm_bo_mem_space(bo, TTM_PL_FLAG_SYSTEM, - &evict_mem, interruptible, no_wait); - + placement.fpfn = 0; + placement.lpfn = 0; + placement.num_placement = 0; + placement.num_busy_placement = 0; + bdev->driver->evict_flags(bo, &placement); + ret = ttm_bo_mem_space(bo, &placement, &evict_mem, interruptible, + no_wait); if (ret) { - if (ret != -ERESTART) + if (ret != -ERESTARTSYS) { printk(KERN_ERR TTM_PFX "Failed to find memory space for " "buffer 0x%p eviction.\n", bo); + ttm_bo_mem_space_debug(bo, &placement); + } goto out; } ret = ttm_bo_handle_move_mem(bo, &evict_mem, true, interruptible, no_wait); if (ret) { - if (ret != -ERESTART) + if (ret != -ERESTARTSYS) printk(KERN_ERR TTM_PFX "Buffer eviction failed\n"); + spin_lock(&glob->lru_lock); + if (evict_mem.mm_node) { + evict_mem.mm_node->private = NULL; + drm_mm_put_block(evict_mem.mm_node); + evict_mem.mm_node = NULL; + } + spin_unlock(&glob->lru_lock); goto out; } - - spin_lock(&glob->lru_lock); - if (evict_mem.mm_node) { - drm_mm_put_block(evict_mem.mm_node); - evict_mem.mm_node = NULL; - } - spin_unlock(&glob->lru_lock); bo->evicted = true; out: return ret; } -/** - * Repeatedly evict memory from the LRU for @mem_type until we create enough - * space, or we've evicted everything and there isn't enough space. - */ -static int ttm_bo_mem_force_space(struct ttm_bo_device *bdev, - struct ttm_mem_reg *mem, - uint32_t mem_type, - bool interruptible, bool no_wait) +static int ttm_mem_evict_first(struct ttm_bo_device *bdev, + uint32_t mem_type, + bool interruptible, bool no_wait) { struct ttm_bo_global *glob = bdev->glob; - struct drm_mm_node *node; - struct ttm_buffer_object *entry; struct ttm_mem_type_manager *man = &bdev->man[mem_type]; - struct list_head *lru; - unsigned long num_pages = mem->num_pages; - int put_count = 0; - int ret; - -retry_pre_get: - ret = drm_mm_pre_get(&man->manager); - if (unlikely(ret != 0)) - return ret; + struct ttm_buffer_object *bo; + int ret, put_count = 0; +retry: spin_lock(&glob->lru_lock); - do { - node = drm_mm_search_free(&man->manager, num_pages, - mem->page_alignment, 1); - if (node) - break; + if (list_empty(&man->lru)) { + spin_unlock(&glob->lru_lock); + return -EBUSY; + } - lru = &man->lru; - if (list_empty(lru)) - break; + bo = list_first_entry(&man->lru, struct ttm_buffer_object, lru); + kref_get(&bo->list_kref); - entry = list_first_entry(lru, struct ttm_buffer_object, lru); - kref_get(&entry->list_kref); + ret = ttm_bo_reserve_locked(bo, false, true, false, 0); - ret = - ttm_bo_reserve_locked(entry, interruptible, no_wait, - false, 0); + if (unlikely(ret == -EBUSY)) { + spin_unlock(&glob->lru_lock); + if (likely(!no_wait)) + ret = ttm_bo_wait_unreserved(bo, interruptible); - if (likely(ret == 0)) - put_count = ttm_bo_del_from_lru(entry); + kref_put(&bo->list_kref, ttm_bo_release_list); - spin_unlock(&glob->lru_lock); + /** + * We *need* to retry after releasing the lru lock. + */ if (unlikely(ret != 0)) return ret; + goto retry; + } - while (put_count--) - kref_put(&entry->list_kref, ttm_bo_ref_bug); + put_count = ttm_bo_del_from_lru(bo); + spin_unlock(&glob->lru_lock); - ret = ttm_bo_evict(entry, mem_type, interruptible, no_wait); + BUG_ON(ret != 0); - ttm_bo_unreserve(entry); + while (put_count--) + kref_put(&bo->list_kref, ttm_bo_ref_bug); - kref_put(&entry->list_kref, ttm_bo_release_list); - if (ret) + ret = ttm_bo_evict(bo, interruptible, no_wait); + ttm_bo_unreserve(bo); + + kref_put(&bo->list_kref, ttm_bo_release_list); + return ret; +} + +static int ttm_bo_man_get_node(struct ttm_buffer_object *bo, + struct ttm_mem_type_manager *man, + struct ttm_placement *placement, + struct ttm_mem_reg *mem, + struct drm_mm_node **node) +{ + struct ttm_bo_global *glob = bo->glob; + unsigned long lpfn; + int ret; + + lpfn = placement->lpfn; + if (!lpfn) + lpfn = man->size; + *node = NULL; + do { + ret = drm_mm_pre_get(&man->manager); + if (unlikely(ret)) return ret; spin_lock(&glob->lru_lock); - } while (1); - - if (!node) { + *node = drm_mm_search_free_in_range(&man->manager, + mem->num_pages, mem->page_alignment, + placement->fpfn, lpfn, 1); + if (unlikely(*node == NULL)) { + spin_unlock(&glob->lru_lock); + return 0; + } + *node = drm_mm_get_block_atomic_range(*node, mem->num_pages, + mem->page_alignment, + placement->fpfn, + lpfn); spin_unlock(&glob->lru_lock); - return -ENOMEM; - } + } while (*node == NULL); + return 0; +} - node = drm_mm_get_block_atomic(node, num_pages, mem->page_alignment); - if (unlikely(!node)) { - spin_unlock(&glob->lru_lock); - goto retry_pre_get; - } +/** + * Repeatedly evict memory from the LRU for @mem_type until we create enough + * space, or we've evicted everything and there isn't enough space. + */ +static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo, + uint32_t mem_type, + struct ttm_placement *placement, + struct ttm_mem_reg *mem, + bool interruptible, bool no_wait) +{ + struct ttm_bo_device *bdev = bo->bdev; + struct ttm_bo_global *glob = bdev->glob; + struct ttm_mem_type_manager *man = &bdev->man[mem_type]; + struct drm_mm_node *node; + int ret; - spin_unlock(&glob->lru_lock); + do { + ret = ttm_bo_man_get_node(bo, man, placement, mem, &node); + if (unlikely(ret != 0)) + return ret; + if (node) + break; + spin_lock(&glob->lru_lock); + if (list_empty(&man->lru)) { + spin_unlock(&glob->lru_lock); + break; + } + spin_unlock(&glob->lru_lock); + ret = ttm_mem_evict_first(bdev, mem_type, interruptible, + no_wait); + if (unlikely(ret != 0)) + return ret; + } while (1); + if (node == NULL) + return -ENOMEM; mem->mm_node = node; mem->mem_type = mem_type; return 0; @@ -724,7 +821,6 @@ return result; } - static bool ttm_bo_mt_compatible(struct ttm_mem_type_manager *man, bool disallow_fixed, uint32_t mem_type, @@ -757,66 +853,55 @@ * space. */ int ttm_bo_mem_space(struct ttm_buffer_object *bo, - uint32_t proposed_placement, - struct ttm_mem_reg *mem, - bool interruptible, bool no_wait) + struct ttm_placement *placement, + struct ttm_mem_reg *mem, + bool interruptible, bool no_wait) { struct ttm_bo_device *bdev = bo->bdev; - struct ttm_bo_global *glob = bo->glob; struct ttm_mem_type_manager *man; - - uint32_t num_prios = bdev->driver->num_mem_type_prio; - const uint32_t *prios = bdev->driver->mem_type_prio; - uint32_t i; uint32_t mem_type = TTM_PL_SYSTEM; uint32_t cur_flags = 0; bool type_found = false; bool type_ok = false; - bool has_eagain = false; + bool has_erestartsys = false; struct drm_mm_node *node = NULL; - int ret; + int i, ret; mem->mm_node = NULL; - for (i = 0; i < num_prios; ++i) { - mem_type = prios[i]; + for (i = 0; i < placement->num_placement; ++i) { + ret = ttm_mem_type_from_flags(placement->placement[i], + &mem_type); + if (ret) + return ret; man = &bdev->man[mem_type]; type_ok = ttm_bo_mt_compatible(man, - bo->type == ttm_bo_type_user, - mem_type, proposed_placement, - &cur_flags); + bo->type == ttm_bo_type_user, + mem_type, + placement->placement[i], + &cur_flags); if (!type_ok) continue; cur_flags = ttm_bo_select_caching(man, bo->mem.placement, cur_flags); + /* + * Use the access and other non-mapping-related flag bits from + * the memory placement flags to the current flags + */ + ttm_flag_masked(&cur_flags, placement->placement[i], + ~TTM_PL_MASK_MEMTYPE); if (mem_type == TTM_PL_SYSTEM) break; if (man->has_type && man->use_type) { type_found = true; - do { - ret = drm_mm_pre_get(&man->manager); - if (unlikely(ret)) - return ret; - - spin_lock(&glob->lru_lock); - node = drm_mm_search_free(&man->manager, - mem->num_pages, - mem->page_alignment, - 1); - if (unlikely(!node)) { - spin_unlock(&glob->lru_lock); - break; - } - node = drm_mm_get_block_atomic(node, - mem->num_pages, - mem-> - page_alignment); - spin_unlock(&glob->lru_lock); - } while (!node); + ret = ttm_bo_man_get_node(bo, man, placement, mem, + &node); + if (unlikely(ret)) + return ret; } if (node) break; @@ -826,67 +911,74 @@ mem->mm_node = node; mem->mem_type = mem_type; mem->placement = cur_flags; + if (node) + node->private = bo; return 0; } if (!type_found) return -EINVAL; - num_prios = bdev->driver->num_mem_busy_prio; - prios = bdev->driver->mem_busy_prio; - - for (i = 0; i < num_prios; ++i) { - mem_type = prios[i]; + for (i = 0; i < placement->num_busy_placement; ++i) { + ret = ttm_mem_type_from_flags(placement->busy_placement[i], + &mem_type); + if (ret) + return ret; man = &bdev->man[mem_type]; - if (!man->has_type) continue; - if (!ttm_bo_mt_compatible(man, - bo->type == ttm_bo_type_user, - mem_type, - proposed_placement, &cur_flags)) + bo->type == ttm_bo_type_user, + mem_type, + placement->busy_placement[i], + &cur_flags)) continue; cur_flags = ttm_bo_select_caching(man, bo->mem.placement, cur_flags); + /* + * Use the access and other non-mapping-related flag bits from + * the memory placement flags to the current flags + */ + ttm_flag_masked(&cur_flags, placement->busy_placement[i], + ~TTM_PL_MASK_MEMTYPE); - ret = ttm_bo_mem_force_space(bdev, mem, mem_type, - interruptible, no_wait); - if (ret == 0 && mem->mm_node) { + if (mem_type == TTM_PL_SYSTEM) { + mem->mem_type = mem_type; mem->placement = cur_flags; + mem->mm_node = NULL; return 0; } - if (ret == -ERESTART) - has_eagain = true; + ret = ttm_bo_mem_force_space(bo, mem_type, placement, mem, + interruptible, no_wait); + if (ret == 0 && mem->mm_node) { + mem->placement = cur_flags; + mem->mm_node->private = bo; + return 0; + } + if (ret == -ERESTARTSYS) + has_erestartsys = true; } - - ret = (has_eagain) ? -ERESTART : -ENOMEM; + ret = (has_erestartsys) ? -ERESTARTSYS : -ENOMEM; return ret; } EXPORT_SYMBOL(ttm_bo_mem_space); int ttm_bo_wait_cpu(struct ttm_buffer_object *bo, bool no_wait) { - int ret = 0; - if ((atomic_read(&bo->cpu_writers) > 0) && no_wait) return -EBUSY; - ret = wait_event_interruptible(bo->event_queue, - atomic_read(&bo->cpu_writers) == 0); - - if (ret == -ERESTARTSYS) - ret = -ERESTART; - - return ret; + return wait_event_interruptible(bo->event_queue, + atomic_read(&bo->cpu_writers) == 0); } +EXPORT_SYMBOL(ttm_bo_wait_cpu); int ttm_bo_move_buffer(struct ttm_buffer_object *bo, - uint32_t proposed_placement, - bool interruptible, bool no_wait) + struct ttm_placement *placement, + bool interruptible, bool no_wait) { struct ttm_bo_global *glob = bo->glob; int ret = 0; @@ -899,147 +991,138 @@ * Have the driver move function wait for idle when necessary, * instead of doing it here. */ - spin_lock(&bo->lock); ret = ttm_bo_wait(bo, false, interruptible, no_wait); spin_unlock(&bo->lock); - if (ret) return ret; - mem.num_pages = bo->num_pages; mem.size = mem.num_pages << PAGE_SHIFT; mem.page_alignment = bo->mem.page_alignment; - /* * Determine where to move the buffer. */ - - ret = ttm_bo_mem_space(bo, proposed_placement, &mem, - interruptible, no_wait); + ret = ttm_bo_mem_space(bo, placement, &mem, interruptible, no_wait); if (ret) goto out_unlock; - ret = ttm_bo_handle_move_mem(bo, &mem, false, interruptible, no_wait); - out_unlock: if (ret && mem.mm_node) { spin_lock(&glob->lru_lock); + mem.mm_node->private = NULL; drm_mm_put_block(mem.mm_node); spin_unlock(&glob->lru_lock); } return ret; } -static int ttm_bo_mem_compat(uint32_t proposed_placement, +static int ttm_bo_mem_compat(struct ttm_placement *placement, struct ttm_mem_reg *mem) { - if ((proposed_placement & mem->placement & TTM_PL_MASK_MEM) == 0) - return 0; - if ((proposed_placement & mem->placement & TTM_PL_MASK_CACHING) == 0) - return 0; + int i; + struct drm_mm_node *node = mem->mm_node; - return 1; + if (node && placement->lpfn != 0 && + (node->start < placement->fpfn || + node->start + node->size > placement->lpfn)) + return -1; + + for (i = 0; i < placement->num_placement; i++) { + if ((placement->placement[i] & mem->placement & + TTM_PL_MASK_CACHING) && + (placement->placement[i] & mem->placement & + TTM_PL_MASK_MEM)) + return i; + } + return -1; } -int ttm_buffer_object_validate(struct ttm_buffer_object *bo, - uint32_t proposed_placement, - bool interruptible, bool no_wait) +int ttm_bo_validate(struct ttm_buffer_object *bo, + struct ttm_placement *placement, + bool interruptible, bool no_wait) { int ret; BUG_ON(!atomic_read(&bo->reserved)); - bo->proposed_placement = proposed_placement; - - TTM_DEBUG("Proposed placement 0x%08lx, Old flags 0x%08lx\n", - (unsigned long)proposed_placement, - (unsigned long)bo->mem.placement); - + /* Check that range is valid */ + if (placement->lpfn || placement->fpfn) + if (placement->fpfn > placement->lpfn || + (placement->lpfn - placement->fpfn) < bo->num_pages) + return -EINVAL; /* * Check whether we need to move buffer. */ - - if (!ttm_bo_mem_compat(bo->proposed_placement, &bo->mem)) { - ret = ttm_bo_move_buffer(bo, bo->proposed_placement, - interruptible, no_wait); - if (ret) { - if (ret != -ERESTART) - printk(KERN_ERR TTM_PFX - "Failed moving buffer. " - "Proposed placement 0x%08x\n", - bo->proposed_placement); - if (ret == -ENOMEM) - printk(KERN_ERR TTM_PFX - "Out of aperture space or " - "DRM memory quota.\n"); + ret = ttm_bo_mem_compat(placement, &bo->mem); + if (ret < 0) { + ret = ttm_bo_move_buffer(bo, placement, interruptible, no_wait); + if (ret) return ret; - } + } else { + /* + * Use the access and other non-mapping-related flag bits from + * the compatible memory placement flags to the active flags + */ + ttm_flag_masked(&bo->mem.placement, placement->placement[ret], + ~TTM_PL_MASK_MEMTYPE); } - /* * We might need to add a TTM. */ - if (bo->mem.mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { ret = ttm_bo_add_ttm(bo, true); if (ret) return ret; } - /* - * Validation has succeeded, move the access and other - * non-mapping-related flag bits from the proposed flags to - * the active flags - */ - - ttm_flag_masked(&bo->mem.placement, bo->proposed_placement, - ~TTM_PL_MASK_MEMTYPE); - return 0; } -EXPORT_SYMBOL(ttm_buffer_object_validate); +EXPORT_SYMBOL(ttm_bo_validate); -int -ttm_bo_check_placement(struct ttm_buffer_object *bo, - uint32_t set_flags, uint32_t clr_flags) +int ttm_bo_check_placement(struct ttm_buffer_object *bo, + struct ttm_placement *placement) { - uint32_t new_mask = set_flags | clr_flags; - - if ((bo->type == ttm_bo_type_user) && - (clr_flags & TTM_PL_FLAG_CACHED)) { - printk(KERN_ERR TTM_PFX - "User buffers require cache-coherent memory.\n"); - return -EINVAL; - } + int i; - if (!capable(CAP_SYS_ADMIN)) { - if (new_mask & TTM_PL_FLAG_NO_EVICT) { - printk(KERN_ERR TTM_PFX "Need to be root to modify" - " NO_EVICT status.\n"); + if (placement->fpfn || placement->lpfn) { + if (bo->mem.num_pages > (placement->lpfn - placement->fpfn)) { + printk(KERN_ERR TTM_PFX "Page number range to small " + "Need %lu pages, range is [%u, %u]\n", + bo->mem.num_pages, placement->fpfn, + placement->lpfn); return -EINVAL; } - - if ((clr_flags & bo->mem.placement & TTM_PL_MASK_MEMTYPE) && - (bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) { - printk(KERN_ERR TTM_PFX - "Incompatible memory specification" - " for NO_EVICT buffer.\n"); - return -EINVAL; + } + for (i = 0; i < placement->num_placement; i++) { + if (!capable(CAP_SYS_ADMIN)) { + if (placement->placement[i] & TTM_PL_FLAG_NO_EVICT) { + printk(KERN_ERR TTM_PFX "Need to be root to " + "modify NO_EVICT status.\n"); + return -EINVAL; + } + } + } + for (i = 0; i < placement->num_busy_placement; i++) { + if (!capable(CAP_SYS_ADMIN)) { + if (placement->busy_placement[i] & TTM_PL_FLAG_NO_EVICT) { + printk(KERN_ERR TTM_PFX "Need to be root to " + "modify NO_EVICT status.\n"); + return -EINVAL; + } } } return 0; } -int ttm_buffer_object_init(struct ttm_bo_device *bdev, - struct ttm_buffer_object *bo, - unsigned long size, - enum ttm_bo_type type, - uint32_t flags, - uint32_t page_alignment, - unsigned long buffer_start, - bool interruptible, - struct file *persistant_swap_storage, - size_t acc_size, - void (*destroy) (struct ttm_buffer_object *)) +int ttm_bo_init(struct ttm_bo_device *bdev, + struct ttm_buffer_object *bo, + unsigned long size, + enum ttm_bo_type type, + struct ttm_placement *placement, + uint32_t page_alignment, + unsigned long buffer_start, + bool interruptible, + struct file *persistant_swap_storage, + size_t acc_size, + void (*destroy) (struct ttm_buffer_object *)) { int ret = 0; unsigned long num_pages; @@ -1065,6 +1148,7 @@ bo->glob = bdev->glob; bo->type = type; bo->num_pages = num_pages; + bo->mem.size = num_pages << PAGE_SHIFT; bo->mem.mem_type = TTM_PL_SYSTEM; bo->mem.num_pages = bo->num_pages; bo->mem.mm_node = NULL; @@ -1077,29 +1161,21 @@ bo->acc_size = acc_size; atomic_inc(&bo->glob->bo_count); - ret = ttm_bo_check_placement(bo, flags, 0ULL); + ret = ttm_bo_check_placement(bo, placement); if (unlikely(ret != 0)) goto out_err; /* - * If no caching attributes are set, accept any form of caching. - */ - - if ((flags & TTM_PL_MASK_CACHING) == 0) - flags |= TTM_PL_MASK_CACHING; - - /* * For ttm_bo_type_device buffers, allocate * address space from the device. */ - if (bo->type == ttm_bo_type_device) { ret = ttm_bo_setup_vm(bo); if (ret) goto out_err; } - ret = ttm_buffer_object_validate(bo, flags, interruptible, false); + ret = ttm_bo_validate(bo, placement, interruptible, false); if (ret) goto out_err; @@ -1112,7 +1188,7 @@ return ret; } -EXPORT_SYMBOL(ttm_buffer_object_init); +EXPORT_SYMBOL(ttm_bo_init); static inline size_t ttm_bo_size(struct ttm_bo_global *glob, unsigned long num_pages) @@ -1123,19 +1199,19 @@ return glob->ttm_bo_size + 2 * page_array_size; } -int ttm_buffer_object_create(struct ttm_bo_device *bdev, - unsigned long size, - enum ttm_bo_type type, - uint32_t flags, - uint32_t page_alignment, - unsigned long buffer_start, - bool interruptible, - struct file *persistant_swap_storage, - struct ttm_buffer_object **p_bo) +int ttm_bo_create(struct ttm_bo_device *bdev, + unsigned long size, + enum ttm_bo_type type, + struct ttm_placement *placement, + uint32_t page_alignment, + unsigned long buffer_start, + bool interruptible, + struct file *persistant_swap_storage, + struct ttm_buffer_object **p_bo) { struct ttm_buffer_object *bo; - int ret; struct ttm_mem_global *mem_glob = bdev->glob->mem_glob; + int ret; size_t acc_size = ttm_bo_size(bdev->glob, (size + PAGE_SIZE - 1) >> PAGE_SHIFT); @@ -1150,76 +1226,41 @@ return -ENOMEM; } - ret = ttm_buffer_object_init(bdev, bo, size, type, flags, - page_alignment, buffer_start, - interruptible, - persistant_swap_storage, acc_size, NULL); + ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, + buffer_start, interruptible, + persistant_swap_storage, acc_size, NULL); if (likely(ret == 0)) *p_bo = bo; return ret; } -static int ttm_bo_leave_list(struct ttm_buffer_object *bo, - uint32_t mem_type, bool allow_errors) -{ - int ret; - - spin_lock(&bo->lock); - ret = ttm_bo_wait(bo, false, false, false); - spin_unlock(&bo->lock); - - if (ret && allow_errors) - goto out; - - if (bo->mem.mem_type == mem_type) - ret = ttm_bo_evict(bo, mem_type, false, false); - - if (ret) { - if (allow_errors) { - goto out; - } else { - ret = 0; - printk(KERN_ERR TTM_PFX "Cleanup eviction failed\n"); - } - } - -out: - return ret; -} - static int ttm_bo_force_list_clean(struct ttm_bo_device *bdev, - struct list_head *head, - unsigned mem_type, bool allow_errors) + unsigned mem_type, bool allow_errors) { + struct ttm_mem_type_manager *man = &bdev->man[mem_type]; struct ttm_bo_global *glob = bdev->glob; - struct ttm_buffer_object *entry; int ret; - int put_count; /* * Can't use standard list traversal since we're unlocking. */ spin_lock(&glob->lru_lock); - - while (!list_empty(head)) { - entry = list_first_entry(head, struct ttm_buffer_object, lru); - kref_get(&entry->list_kref); - ret = ttm_bo_reserve_locked(entry, false, false, false, 0); - put_count = ttm_bo_del_from_lru(entry); + while (!list_empty(&man->lru)) { spin_unlock(&glob->lru_lock); - while (put_count--) - kref_put(&entry->list_kref, ttm_bo_ref_bug); - BUG_ON(ret); - ret = ttm_bo_leave_list(entry, mem_type, allow_errors); - ttm_bo_unreserve(entry); - kref_put(&entry->list_kref, ttm_bo_release_list); + ret = ttm_mem_evict_first(bdev, mem_type, false, false); + if (ret) { + if (allow_errors) { + return ret; + } else { + printk(KERN_ERR TTM_PFX + "Cleanup eviction failed\n"); + } + } spin_lock(&glob->lru_lock); } - spin_unlock(&glob->lru_lock); - return 0; } @@ -1246,7 +1287,7 @@ ret = 0; if (mem_type > 0) { - ttm_bo_force_list_clean(bdev, &man->lru, mem_type, false); + ttm_bo_force_list_clean(bdev, mem_type, false); spin_lock(&glob->lru_lock); if (drm_mm_clean(&man->manager)) @@ -1279,12 +1320,12 @@ return 0; } - return ttm_bo_force_list_clean(bdev, &man->lru, mem_type, true); + return ttm_bo_force_list_clean(bdev, mem_type, true); } EXPORT_SYMBOL(ttm_bo_evict_mm); int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type, - unsigned long p_offset, unsigned long p_size) + unsigned long p_size) { int ret = -EINVAL; struct ttm_mem_type_manager *man; @@ -1314,7 +1355,7 @@ type); return ret; } - ret = drm_mm_init(&man->manager, p_offset, p_size); + ret = drm_mm_init(&man->manager, 0, p_size); if (ret) return ret; } @@ -1463,7 +1504,7 @@ * Initialize the system memory buffer type. * Other types need to be driver / IOCTL initialized. */ - ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0, 0); + ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0); if (unlikely(ret != 0)) goto out_no_sys; @@ -1693,7 +1734,7 @@ ret = wait_event_interruptible (bo->event_queue, atomic_read(&bo->reserved) == 0); if (unlikely(ret != 0)) - return -ERESTART; + return ret; } else { wait_event(bo->event_queue, atomic_read(&bo->reserved) == 0); @@ -1722,12 +1763,14 @@ ttm_bo_unreserve(bo); return ret; } +EXPORT_SYMBOL(ttm_bo_synccpu_write_grab); void ttm_bo_synccpu_write_release(struct ttm_buffer_object *bo) { if (atomic_dec_and_test(&bo->cpu_writers)) wake_up_all(&bo->event_queue); } +EXPORT_SYMBOL(ttm_bo_synccpu_write_release); /** * A buffer object shrink method that tries to swap out the first @@ -1808,6 +1851,9 @@ * anyone tries to access a ttm page. */ + if (bo->bdev->driver->swap_notify) + bo->bdev->driver->swap_notify(bo); + ret = ttm_tt_swapout(bo->ttm, bo->persistant_swap_storage); out: @@ -1828,3 +1874,4 @@ while (ttm_bo_swapout(&bdev->glob->shrink) == 0) ; } +EXPORT_SYMBOL(ttm_bo_swapout_all); --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_tt.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_tt.c @@ -192,26 +192,38 @@ ttm->state = tt_unbound; return 0; } +EXPORT_SYMBOL(ttm_tt_populate); #ifdef CONFIG_X86 static inline int ttm_tt_set_page_caching(struct page *p, - enum ttm_caching_state c_state) + enum ttm_caching_state c_old, + enum ttm_caching_state c_new) { + int ret = 0; + if (PageHighMem(p)) return 0; - switch (c_state) { - case tt_cached: - return set_pages_wb(p, 1); - case tt_wc: - return set_memory_wc((unsigned long) page_address(p), 1); - default: - return set_pages_uc(p, 1); + if (c_old != tt_cached) { + /* p isn't in the default caching state, set it to + * writeback first to free its current memtype. */ + + ret = set_pages_wb(p, 1); + if (ret) + return ret; } + + if (c_new == tt_wc) + ret = set_memory_wc((unsigned long) page_address(p), 1); + else if (c_new == tt_uncached) + ret = set_pages_uc(p, 1); + + return ret; } #else /* CONFIG_X86 */ static inline int ttm_tt_set_page_caching(struct page *p, - enum ttm_caching_state c_state) + enum ttm_caching_state c_old, + enum ttm_caching_state c_new) { return 0; } @@ -244,7 +256,9 @@ for (i = 0; i < ttm->num_pages; ++i) { cur_page = ttm->pages[i]; if (likely(cur_page != NULL)) { - ret = ttm_tt_set_page_caching(cur_page, c_state); + ret = ttm_tt_set_page_caching(cur_page, + ttm->caching_state, + c_state); if (unlikely(ret != 0)) goto out_err; } @@ -258,7 +272,7 @@ for (j = 0; j < i; ++j) { cur_page = ttm->pages[j]; if (likely(cur_page != NULL)) { - (void)ttm_tt_set_page_caching(cur_page, + (void)ttm_tt_set_page_caching(cur_page, c_state, ttm->caching_state); } } @@ -466,7 +480,7 @@ void *from_virtual; void *to_virtual; int i; - int ret; + int ret = -ENOMEM; if (ttm->page_flags & TTM_PAGE_FLAG_USER) { ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start, @@ -485,8 +499,10 @@ for (i = 0; i < ttm->num_pages; ++i) { from_page = read_mapping_page(swap_space, i, NULL); - if (IS_ERR(from_page)) + if (IS_ERR(from_page)) { + ret = PTR_ERR(from_page); goto out_err; + } to_page = __ttm_tt_get_page(ttm, i); if (unlikely(to_page == NULL)) goto out_err; @@ -509,7 +525,7 @@ return 0; out_err: ttm_tt_free_alloced_pages(ttm); - return -ENOMEM; + return ret; } int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) @@ -521,6 +537,7 @@ void *from_virtual; void *to_virtual; int i; + int ret = -ENOMEM; BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated); BUG_ON(ttm->caching_state != tt_cached); @@ -543,7 +560,7 @@ 0); if (unlikely(IS_ERR(swap_storage))) { printk(KERN_ERR "Failed allocating swap storage.\n"); - return -ENOMEM; + return PTR_ERR(swap_storage); } } else swap_storage = persistant_swap_storage; @@ -555,9 +572,10 @@ if (unlikely(from_page == NULL)) continue; to_page = read_mapping_page(swap_space, i, NULL); - if (unlikely(to_page == NULL)) + if (unlikely(IS_ERR(to_page))) { + ret = PTR_ERR(to_page); goto out_err; - + } preempt_disable(); from_virtual = kmap_atomic(from_page, KM_USER0); to_virtual = kmap_atomic(to_page, KM_USER1); @@ -581,5 +599,5 @@ if (!persistant_swap_storage) fput(swap_storage); - return -ENOMEM; + return ret; } --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_bo_vm.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_bo_vm.c @@ -114,7 +114,7 @@ ret = ttm_bo_wait(bo, false, true, false); spin_unlock(&bo->lock); if (unlikely(ret != 0)) { - retval = (ret != -ERESTART) ? + retval = (ret != -ERESTARTSYS) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE; goto out_unlock; } @@ -320,7 +320,7 @@ return -EFAULT; driver = bo->bdev->driver; - if (unlikely(driver->verify_access)) { + if (unlikely(!driver->verify_access)) { ret = -EPERM; goto out_unref; } @@ -349,9 +349,6 @@ switch (ret) { case 0: break; - case -ERESTART: - ret = -EINTR; - goto out_unref; case -EBUSY: ret = -EAGAIN; goto out_unref; @@ -421,8 +418,6 @@ switch (ret) { case 0: break; - case -ERESTART: - return -EINTR; case -EBUSY: return -EAGAIN; default: --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_memory.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_memory.c @@ -274,16 +274,17 @@ static int ttm_mem_init_highmem_zone(struct ttm_mem_global *glob, const struct sysinfo *si) { - struct ttm_mem_zone *zone = kzalloc(sizeof(*zone), GFP_KERNEL); + struct ttm_mem_zone *zone; uint64_t mem; int ret; - if (unlikely(!zone)) - return -ENOMEM; - if (si->totalhigh == 0) return 0; + zone = kzalloc(sizeof(*zone), GFP_KERNEL); + if (unlikely(!zone)) + return -ENOMEM; + mem = si->totalram; mem *= si->mem_unit; @@ -322,8 +323,10 @@ * No special dma32 zone needed. */ - if (mem <= ((uint64_t) 1ULL << 32)) + if (mem <= ((uint64_t) 1ULL << 32)) { + kfree(zone); return 0; + } /* * Limit max dma32 memory to 4GB for now @@ -460,6 +463,7 @@ { return ttm_mem_global_free_zone(glob, NULL, amount); } +EXPORT_SYMBOL(ttm_mem_global_free); static int ttm_mem_global_reserve(struct ttm_mem_global *glob, struct ttm_mem_zone *single_zone, @@ -533,6 +537,7 @@ return ttm_mem_global_alloc_zone(glob, NULL, memory, no_wait, interruptible); } +EXPORT_SYMBOL(ttm_mem_global_alloc); int ttm_mem_global_alloc_page(struct ttm_mem_global *glob, struct page *page, @@ -588,3 +593,4 @@ } return 0; } +EXPORT_SYMBOL(ttm_round_pot); --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_bo_util.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -53,7 +53,6 @@ { struct ttm_tt *ttm = bo->ttm; struct ttm_mem_reg *old_mem = &bo->mem; - uint32_t save_flags = old_mem->placement; int ret; if (old_mem->mem_type != TTM_PL_SYSTEM) { @@ -62,7 +61,6 @@ ttm_flag_masked(&old_mem->placement, TTM_PL_FLAG_SYSTEM, TTM_PL_MASK_MEM); old_mem->mem_type = TTM_PL_SYSTEM; - save_flags = old_mem->placement; } ret = ttm_tt_set_placement_caching(ttm, new_mem->placement); @@ -77,7 +75,7 @@ *old_mem = *new_mem; new_mem->mm_node = NULL; - ttm_flag_masked(&save_flags, new_mem->placement, TTM_PL_MASK_MEMTYPE); + return 0; } EXPORT_SYMBOL(ttm_bo_move_ttm); @@ -219,7 +217,6 @@ void *old_iomap; void *new_iomap; int ret; - uint32_t save_flags = old_mem->placement; unsigned long i; unsigned long page; unsigned long add = 0; @@ -270,7 +267,6 @@ *old_mem = *new_mem; new_mem->mm_node = NULL; - ttm_flag_masked(&save_flags, new_mem->placement, TTM_PL_MASK_MEMTYPE); if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) && (ttm != NULL)) { ttm_tt_unbind(ttm); @@ -369,6 +365,7 @@ #endif return tmp; } +EXPORT_SYMBOL(ttm_io_prot); static int ttm_bo_ioremap(struct ttm_buffer_object *bo, unsigned long bus_base, @@ -427,7 +424,7 @@ /* * We need to use vmap to get the desired page protection - * or to make the buffer object look contigous. + * or to make the buffer object look contiguous. */ prot = (mem->placement & TTM_PL_FLAG_CACHED) ? PAGE_KERNEL : @@ -536,7 +533,6 @@ struct ttm_mem_type_manager *man = &bdev->man[new_mem->mem_type]; struct ttm_mem_reg *old_mem = &bo->mem; int ret; - uint32_t save_flags = old_mem->placement; struct ttm_buffer_object *ghost_obj; void *tmp_obj = NULL; @@ -597,7 +593,7 @@ *old_mem = *new_mem; new_mem->mm_node = NULL; - ttm_flag_masked(&save_flags, new_mem->placement, TTM_PL_MASK_MEMTYPE); + return 0; } EXPORT_SYMBOL(ttm_bo_move_accel_cleanup); --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_execbuf_util.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_execbuf_util.c @@ -0,0 +1,117 @@ +/************************************************************************** + * + * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "ttm/ttm_execbuf_util.h" +#include "ttm/ttm_bo_driver.h" +#include "ttm/ttm_placement.h" +#include +#include +#include + +void ttm_eu_backoff_reservation(struct list_head *list) +{ + struct ttm_validate_buffer *entry; + + list_for_each_entry(entry, list, head) { + struct ttm_buffer_object *bo = entry->bo; + if (!entry->reserved) + continue; + + entry->reserved = false; + ttm_bo_unreserve(bo); + } +} +EXPORT_SYMBOL(ttm_eu_backoff_reservation); + +/* + * Reserve buffers for validation. + * + * If a buffer in the list is marked for CPU access, we back off and + * wait for that buffer to become free for GPU access. + * + * If a buffer is reserved for another validation, the validator with + * the highest validation sequence backs off and waits for that buffer + * to become unreserved. This prevents deadlocks when validating multiple + * buffers in different orders. + */ + +int ttm_eu_reserve_buffers(struct list_head *list, uint32_t val_seq) +{ + struct ttm_validate_buffer *entry; + int ret; + +retry: + list_for_each_entry(entry, list, head) { + struct ttm_buffer_object *bo = entry->bo; + + entry->reserved = false; + ret = ttm_bo_reserve(bo, true, false, true, val_seq); + if (ret != 0) { + ttm_eu_backoff_reservation(list); + if (ret == -EAGAIN) { + ret = ttm_bo_wait_unreserved(bo, true); + if (unlikely(ret != 0)) + return ret; + goto retry; + } else + return ret; + } + + entry->reserved = true; + if (unlikely(atomic_read(&bo->cpu_writers) > 0)) { + ttm_eu_backoff_reservation(list); + ret = ttm_bo_wait_cpu(bo, false); + if (ret) + return ret; + goto retry; + } + } + return 0; +} +EXPORT_SYMBOL(ttm_eu_reserve_buffers); + +void ttm_eu_fence_buffer_objects(struct list_head *list, void *sync_obj) +{ + struct ttm_validate_buffer *entry; + + list_for_each_entry(entry, list, head) { + struct ttm_buffer_object *bo = entry->bo; + struct ttm_bo_driver *driver = bo->bdev->driver; + void *old_sync_obj; + + spin_lock(&bo->lock); + old_sync_obj = bo->sync_obj; + bo->sync_obj = driver->sync_obj_ref(sync_obj); + bo->sync_obj_arg = entry->new_sync_obj_arg; + spin_unlock(&bo->lock); + ttm_bo_unreserve(bo); + entry->reserved = false; + if (old_sync_obj) + driver->sync_obj_unref(&old_sync_obj); + } +} +EXPORT_SYMBOL(ttm_eu_fence_buffer_objects); --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_object.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_object.c @@ -0,0 +1,452 @@ +/************************************************************************** + * + * Copyright (c) 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ +/* + * Authors: Thomas Hellstrom + */ +/** @file ttm_ref_object.c + * + * Base- and reference object implementation for the various + * ttm objects. Implements reference counting, minimal security checks + * and release on file close. + */ + +/** + * struct ttm_object_file + * + * @tdev: Pointer to the ttm_object_device. + * + * @lock: Lock that protects the ref_list list and the + * ref_hash hash tables. + * + * @ref_list: List of ttm_ref_objects to be destroyed at + * file release. + * + * @ref_hash: Hash tables of ref objects, one per ttm_ref_type, + * for fast lookup of ref objects given a base object. + */ + +#include "ttm/ttm_object.h" +#include "ttm/ttm_module.h" +#include +#include +#include +#include +#include + +struct ttm_object_file { + struct ttm_object_device *tdev; + rwlock_t lock; + struct list_head ref_list; + struct drm_open_hash ref_hash[TTM_REF_NUM]; + struct kref refcount; +}; + +/** + * struct ttm_object_device + * + * @object_lock: lock that protects the object_hash hash table. + * + * @object_hash: hash table for fast lookup of object global names. + * + * @object_count: Per device object count. + * + * This is the per-device data structure needed for ttm object management. + */ + +struct ttm_object_device { + rwlock_t object_lock; + struct drm_open_hash object_hash; + atomic_t object_count; + struct ttm_mem_global *mem_glob; +}; + +/** + * struct ttm_ref_object + * + * @hash: Hash entry for the per-file object reference hash. + * + * @head: List entry for the per-file list of ref-objects. + * + * @kref: Ref count. + * + * @obj: Base object this ref object is referencing. + * + * @ref_type: Type of ref object. + * + * This is similar to an idr object, but it also has a hash table entry + * that allows lookup with a pointer to the referenced object as a key. In + * that way, one can easily detect whether a base object is referenced by + * a particular ttm_object_file. It also carries a ref count to avoid creating + * multiple ref objects if a ttm_object_file references the same base + * object more than once. + */ + +struct ttm_ref_object { + struct drm_hash_item hash; + struct list_head head; + struct kref kref; + enum ttm_ref_type ref_type; + struct ttm_base_object *obj; + struct ttm_object_file *tfile; +}; + +static inline struct ttm_object_file * +ttm_object_file_ref(struct ttm_object_file *tfile) +{ + kref_get(&tfile->refcount); + return tfile; +} + +static void ttm_object_file_destroy(struct kref *kref) +{ + struct ttm_object_file *tfile = + container_of(kref, struct ttm_object_file, refcount); + + kfree(tfile); +} + + +static inline void ttm_object_file_unref(struct ttm_object_file **p_tfile) +{ + struct ttm_object_file *tfile = *p_tfile; + + *p_tfile = NULL; + kref_put(&tfile->refcount, ttm_object_file_destroy); +} + + +int ttm_base_object_init(struct ttm_object_file *tfile, + struct ttm_base_object *base, + bool shareable, + enum ttm_object_type object_type, + void (*refcount_release) (struct ttm_base_object **), + void (*ref_obj_release) (struct ttm_base_object *, + enum ttm_ref_type ref_type)) +{ + struct ttm_object_device *tdev = tfile->tdev; + int ret; + + base->shareable = shareable; + base->tfile = ttm_object_file_ref(tfile); + base->refcount_release = refcount_release; + base->ref_obj_release = ref_obj_release; + base->object_type = object_type; + write_lock(&tdev->object_lock); + kref_init(&base->refcount); + ret = drm_ht_just_insert_please(&tdev->object_hash, + &base->hash, + (unsigned long)base, 31, 0, 0); + write_unlock(&tdev->object_lock); + if (unlikely(ret != 0)) + goto out_err0; + + ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL); + if (unlikely(ret != 0)) + goto out_err1; + + ttm_base_object_unref(&base); + + return 0; +out_err1: + (void)drm_ht_remove_item(&tdev->object_hash, &base->hash); +out_err0: + return ret; +} +EXPORT_SYMBOL(ttm_base_object_init); + +static void ttm_release_base(struct kref *kref) +{ + struct ttm_base_object *base = + container_of(kref, struct ttm_base_object, refcount); + struct ttm_object_device *tdev = base->tfile->tdev; + + (void)drm_ht_remove_item(&tdev->object_hash, &base->hash); + write_unlock(&tdev->object_lock); + if (base->refcount_release) { + ttm_object_file_unref(&base->tfile); + base->refcount_release(&base); + } + write_lock(&tdev->object_lock); +} + +void ttm_base_object_unref(struct ttm_base_object **p_base) +{ + struct ttm_base_object *base = *p_base; + struct ttm_object_device *tdev = base->tfile->tdev; + + *p_base = NULL; + + /* + * Need to take the lock here to avoid racing with + * users trying to look up the object. + */ + + write_lock(&tdev->object_lock); + (void)kref_put(&base->refcount, &ttm_release_base); + write_unlock(&tdev->object_lock); +} +EXPORT_SYMBOL(ttm_base_object_unref); + +struct ttm_base_object *ttm_base_object_lookup(struct ttm_object_file *tfile, + uint32_t key) +{ + struct ttm_object_device *tdev = tfile->tdev; + struct ttm_base_object *base; + struct drm_hash_item *hash; + int ret; + + read_lock(&tdev->object_lock); + ret = drm_ht_find_item(&tdev->object_hash, key, &hash); + + if (likely(ret == 0)) { + base = drm_hash_entry(hash, struct ttm_base_object, hash); + kref_get(&base->refcount); + } + read_unlock(&tdev->object_lock); + + if (unlikely(ret != 0)) + return NULL; + + if (tfile != base->tfile && !base->shareable) { + printk(KERN_ERR TTM_PFX + "Attempted access of non-shareable object.\n"); + ttm_base_object_unref(&base); + return NULL; + } + + return base; +} +EXPORT_SYMBOL(ttm_base_object_lookup); + +int ttm_ref_object_add(struct ttm_object_file *tfile, + struct ttm_base_object *base, + enum ttm_ref_type ref_type, bool *existed) +{ + struct drm_open_hash *ht = &tfile->ref_hash[ref_type]; + struct ttm_ref_object *ref; + struct drm_hash_item *hash; + struct ttm_mem_global *mem_glob = tfile->tdev->mem_glob; + int ret = -EINVAL; + + if (existed != NULL) + *existed = true; + + while (ret == -EINVAL) { + read_lock(&tfile->lock); + ret = drm_ht_find_item(ht, base->hash.key, &hash); + + if (ret == 0) { + ref = drm_hash_entry(hash, struct ttm_ref_object, hash); + kref_get(&ref->kref); + read_unlock(&tfile->lock); + break; + } + + read_unlock(&tfile->lock); + ret = ttm_mem_global_alloc(mem_glob, sizeof(*ref), + false, false); + if (unlikely(ret != 0)) + return ret; + ref = kmalloc(sizeof(*ref), GFP_KERNEL); + if (unlikely(ref == NULL)) { + ttm_mem_global_free(mem_glob, sizeof(*ref)); + return -ENOMEM; + } + + ref->hash.key = base->hash.key; + ref->obj = base; + ref->tfile = tfile; + ref->ref_type = ref_type; + kref_init(&ref->kref); + + write_lock(&tfile->lock); + ret = drm_ht_insert_item(ht, &ref->hash); + + if (likely(ret == 0)) { + list_add_tail(&ref->head, &tfile->ref_list); + kref_get(&base->refcount); + write_unlock(&tfile->lock); + if (existed != NULL) + *existed = false; + break; + } + + write_unlock(&tfile->lock); + BUG_ON(ret != -EINVAL); + + ttm_mem_global_free(mem_glob, sizeof(*ref)); + kfree(ref); + } + + return ret; +} +EXPORT_SYMBOL(ttm_ref_object_add); + +static void ttm_ref_object_release(struct kref *kref) +{ + struct ttm_ref_object *ref = + container_of(kref, struct ttm_ref_object, kref); + struct ttm_base_object *base = ref->obj; + struct ttm_object_file *tfile = ref->tfile; + struct drm_open_hash *ht; + struct ttm_mem_global *mem_glob = tfile->tdev->mem_glob; + + ht = &tfile->ref_hash[ref->ref_type]; + (void)drm_ht_remove_item(ht, &ref->hash); + list_del(&ref->head); + write_unlock(&tfile->lock); + + if (ref->ref_type != TTM_REF_USAGE && base->ref_obj_release) + base->ref_obj_release(base, ref->ref_type); + + ttm_base_object_unref(&ref->obj); + ttm_mem_global_free(mem_glob, sizeof(*ref)); + kfree(ref); + write_lock(&tfile->lock); +} + +int ttm_ref_object_base_unref(struct ttm_object_file *tfile, + unsigned long key, enum ttm_ref_type ref_type) +{ + struct drm_open_hash *ht = &tfile->ref_hash[ref_type]; + struct ttm_ref_object *ref; + struct drm_hash_item *hash; + int ret; + + write_lock(&tfile->lock); + ret = drm_ht_find_item(ht, key, &hash); + if (unlikely(ret != 0)) { + write_unlock(&tfile->lock); + return -EINVAL; + } + ref = drm_hash_entry(hash, struct ttm_ref_object, hash); + kref_put(&ref->kref, ttm_ref_object_release); + write_unlock(&tfile->lock); + return 0; +} +EXPORT_SYMBOL(ttm_ref_object_base_unref); + +void ttm_object_file_release(struct ttm_object_file **p_tfile) +{ + struct ttm_ref_object *ref; + struct list_head *list; + unsigned int i; + struct ttm_object_file *tfile = *p_tfile; + + *p_tfile = NULL; + write_lock(&tfile->lock); + + /* + * Since we release the lock within the loop, we have to + * restart it from the beginning each time. + */ + + while (!list_empty(&tfile->ref_list)) { + list = tfile->ref_list.next; + ref = list_entry(list, struct ttm_ref_object, head); + ttm_ref_object_release(&ref->kref); + } + + for (i = 0; i < TTM_REF_NUM; ++i) + drm_ht_remove(&tfile->ref_hash[i]); + + write_unlock(&tfile->lock); + ttm_object_file_unref(&tfile); +} +EXPORT_SYMBOL(ttm_object_file_release); + +struct ttm_object_file *ttm_object_file_init(struct ttm_object_device *tdev, + unsigned int hash_order) +{ + struct ttm_object_file *tfile = kmalloc(sizeof(*tfile), GFP_KERNEL); + unsigned int i; + unsigned int j = 0; + int ret; + + if (unlikely(tfile == NULL)) + return NULL; + + rwlock_init(&tfile->lock); + tfile->tdev = tdev; + kref_init(&tfile->refcount); + INIT_LIST_HEAD(&tfile->ref_list); + + for (i = 0; i < TTM_REF_NUM; ++i) { + ret = drm_ht_create(&tfile->ref_hash[i], hash_order); + if (ret) { + j = i; + goto out_err; + } + } + + return tfile; +out_err: + for (i = 0; i < j; ++i) + drm_ht_remove(&tfile->ref_hash[i]); + + kfree(tfile); + + return NULL; +} +EXPORT_SYMBOL(ttm_object_file_init); + +struct ttm_object_device *ttm_object_device_init(struct ttm_mem_global + *mem_glob, + unsigned int hash_order) +{ + struct ttm_object_device *tdev = kmalloc(sizeof(*tdev), GFP_KERNEL); + int ret; + + if (unlikely(tdev == NULL)) + return NULL; + + tdev->mem_glob = mem_glob; + rwlock_init(&tdev->object_lock); + atomic_set(&tdev->object_count, 0); + ret = drm_ht_create(&tdev->object_hash, hash_order); + + if (likely(ret == 0)) + return tdev; + + kfree(tdev); + return NULL; +} +EXPORT_SYMBOL(ttm_object_device_init); + +void ttm_object_device_release(struct ttm_object_device **p_tdev) +{ + struct ttm_object_device *tdev = *p_tdev; + + *p_tdev = NULL; + + write_lock(&tdev->object_lock); + drm_ht_remove(&tdev->object_hash); + write_unlock(&tdev->object_lock); + + kfree(tdev); +} +EXPORT_SYMBOL(ttm_object_device_release); --- linux-2.6.32.orig/drivers/gpu/drm/ttm/Makefile +++ linux-2.6.32/drivers/gpu/drm/ttm/Makefile @@ -3,6 +3,7 @@ ccflags-y := -Iinclude/drm ttm-y := ttm_agp_backend.o ttm_memory.o ttm_tt.o ttm_bo.o \ - ttm_bo_util.o ttm_bo_vm.o ttm_module.o ttm_global.o + ttm_bo_util.o ttm_bo_vm.o ttm_module.o ttm_global.o \ + ttm_object.o ttm_lock.o ttm_execbuf_util.o obj-$(CONFIG_DRM_TTM) += ttm.o --- linux-2.6.32.orig/drivers/gpu/drm/ttm/ttm_lock.c +++ linux-2.6.32/drivers/gpu/drm/ttm/ttm_lock.c @@ -0,0 +1,313 @@ +/************************************************************************** + * + * Copyright (c) 2007-2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ +/* + * Authors: Thomas Hellstrom + */ + +#include "ttm/ttm_lock.h" +#include "ttm/ttm_module.h" +#include +#include +#include +#include +#include + +#define TTM_WRITE_LOCK_PENDING (1 << 0) +#define TTM_VT_LOCK_PENDING (1 << 1) +#define TTM_SUSPEND_LOCK_PENDING (1 << 2) +#define TTM_VT_LOCK (1 << 3) +#define TTM_SUSPEND_LOCK (1 << 4) + +void ttm_lock_init(struct ttm_lock *lock) +{ + spin_lock_init(&lock->lock); + init_waitqueue_head(&lock->queue); + lock->rw = 0; + lock->flags = 0; + lock->kill_takers = false; + lock->signal = SIGKILL; +} +EXPORT_SYMBOL(ttm_lock_init); + +void ttm_read_unlock(struct ttm_lock *lock) +{ + spin_lock(&lock->lock); + if (--lock->rw == 0) + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); +} +EXPORT_SYMBOL(ttm_read_unlock); + +static bool __ttm_read_lock(struct ttm_lock *lock) +{ + bool locked = false; + + spin_lock(&lock->lock); + if (unlikely(lock->kill_takers)) { + send_sig(lock->signal, current, 0); + spin_unlock(&lock->lock); + return false; + } + if (lock->rw >= 0 && lock->flags == 0) { + ++lock->rw; + locked = true; + } + spin_unlock(&lock->lock); + return locked; +} + +int ttm_read_lock(struct ttm_lock *lock, bool interruptible) +{ + int ret = 0; + + if (interruptible) + ret = wait_event_interruptible(lock->queue, + __ttm_read_lock(lock)); + else + wait_event(lock->queue, __ttm_read_lock(lock)); + return ret; +} +EXPORT_SYMBOL(ttm_read_lock); + +static bool __ttm_read_trylock(struct ttm_lock *lock, bool *locked) +{ + bool block = true; + + *locked = false; + + spin_lock(&lock->lock); + if (unlikely(lock->kill_takers)) { + send_sig(lock->signal, current, 0); + spin_unlock(&lock->lock); + return false; + } + if (lock->rw >= 0 && lock->flags == 0) { + ++lock->rw; + block = false; + *locked = true; + } else if (lock->flags == 0) { + block = false; + } + spin_unlock(&lock->lock); + + return !block; +} + +int ttm_read_trylock(struct ttm_lock *lock, bool interruptible) +{ + int ret = 0; + bool locked; + + if (interruptible) + ret = wait_event_interruptible + (lock->queue, __ttm_read_trylock(lock, &locked)); + else + wait_event(lock->queue, __ttm_read_trylock(lock, &locked)); + + if (unlikely(ret != 0)) { + BUG_ON(locked); + return ret; + } + + return (locked) ? 0 : -EBUSY; +} + +void ttm_write_unlock(struct ttm_lock *lock) +{ + spin_lock(&lock->lock); + lock->rw = 0; + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); +} +EXPORT_SYMBOL(ttm_write_unlock); + +static bool __ttm_write_lock(struct ttm_lock *lock) +{ + bool locked = false; + + spin_lock(&lock->lock); + if (unlikely(lock->kill_takers)) { + send_sig(lock->signal, current, 0); + spin_unlock(&lock->lock); + return false; + } + if (lock->rw == 0 && ((lock->flags & ~TTM_WRITE_LOCK_PENDING) == 0)) { + lock->rw = -1; + lock->flags &= ~TTM_WRITE_LOCK_PENDING; + locked = true; + } else { + lock->flags |= TTM_WRITE_LOCK_PENDING; + } + spin_unlock(&lock->lock); + return locked; +} + +int ttm_write_lock(struct ttm_lock *lock, bool interruptible) +{ + int ret = 0; + + if (interruptible) { + ret = wait_event_interruptible(lock->queue, + __ttm_write_lock(lock)); + if (unlikely(ret != 0)) { + spin_lock(&lock->lock); + lock->flags &= ~TTM_WRITE_LOCK_PENDING; + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); + } + } else + wait_event(lock->queue, __ttm_read_lock(lock)); + + return ret; +} +EXPORT_SYMBOL(ttm_write_lock); + +void ttm_write_lock_downgrade(struct ttm_lock *lock) +{ + spin_lock(&lock->lock); + lock->rw = 1; + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); +} + +static int __ttm_vt_unlock(struct ttm_lock *lock) +{ + int ret = 0; + + spin_lock(&lock->lock); + if (unlikely(!(lock->flags & TTM_VT_LOCK))) + ret = -EINVAL; + lock->flags &= ~TTM_VT_LOCK; + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); + printk(KERN_INFO TTM_PFX "vt unlock.\n"); + + return ret; +} + +static void ttm_vt_lock_remove(struct ttm_base_object **p_base) +{ + struct ttm_base_object *base = *p_base; + struct ttm_lock *lock = container_of(base, struct ttm_lock, base); + int ret; + + *p_base = NULL; + ret = __ttm_vt_unlock(lock); + BUG_ON(ret != 0); +} + +static bool __ttm_vt_lock(struct ttm_lock *lock) +{ + bool locked = false; + + spin_lock(&lock->lock); + if (lock->rw == 0) { + lock->flags &= ~TTM_VT_LOCK_PENDING; + lock->flags |= TTM_VT_LOCK; + locked = true; + } else { + lock->flags |= TTM_VT_LOCK_PENDING; + } + spin_unlock(&lock->lock); + return locked; +} + +int ttm_vt_lock(struct ttm_lock *lock, + bool interruptible, + struct ttm_object_file *tfile) +{ + int ret = 0; + + if (interruptible) { + ret = wait_event_interruptible(lock->queue, + __ttm_vt_lock(lock)); + if (unlikely(ret != 0)) { + spin_lock(&lock->lock); + lock->flags &= ~TTM_VT_LOCK_PENDING; + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); + return ret; + } + } else + wait_event(lock->queue, __ttm_vt_lock(lock)); + + /* + * Add a base-object, the destructor of which will + * make sure the lock is released if the client dies + * while holding it. + */ + + ret = ttm_base_object_init(tfile, &lock->base, false, + ttm_lock_type, &ttm_vt_lock_remove, NULL); + if (ret) + (void)__ttm_vt_unlock(lock); + else { + lock->vt_holder = tfile; + printk(KERN_INFO TTM_PFX "vt lock.\n"); + } + + return ret; +} +EXPORT_SYMBOL(ttm_vt_lock); + +int ttm_vt_unlock(struct ttm_lock *lock) +{ + return ttm_ref_object_base_unref(lock->vt_holder, + lock->base.hash.key, TTM_REF_USAGE); +} +EXPORT_SYMBOL(ttm_vt_unlock); + +void ttm_suspend_unlock(struct ttm_lock *lock) +{ + spin_lock(&lock->lock); + lock->flags &= ~TTM_SUSPEND_LOCK; + wake_up_all(&lock->queue); + spin_unlock(&lock->lock); +} +EXPORT_SYMBOL(ttm_suspend_unlock); + +static bool __ttm_suspend_lock(struct ttm_lock *lock) +{ + bool locked = false; + + spin_lock(&lock->lock); + if (lock->rw == 0) { + lock->flags &= ~TTM_SUSPEND_LOCK_PENDING; + lock->flags |= TTM_SUSPEND_LOCK; + locked = true; + } else { + lock->flags |= TTM_SUSPEND_LOCK_PENDING; + } + spin_unlock(&lock->lock); + return locked; +} + +void ttm_suspend_lock(struct ttm_lock *lock) +{ + wait_event(lock->queue, __ttm_suspend_lock(lock)); +} +EXPORT_SYMBOL(ttm_suspend_lock); --- linux-2.6.32.orig/drivers/gpu/drm/i830/i830_drv.c +++ linux-2.6.32/drivers/gpu/drm/i830/i830_drv.c @@ -70,7 +70,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/i830/i830_dma.c +++ linux-2.6.32/drivers/gpu/drm/i830/i830_dma.c @@ -117,7 +117,7 @@ static const struct file_operations i830_buffer_fops = { .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = i830_mmap_buffers, .fasync = drm_fasync, }; --- linux-2.6.32.orig/drivers/gpu/drm/sis/sis_drv.c +++ linux-2.6.32/drivers/gpu/drm/sis/sis_drv.c @@ -80,7 +80,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/drm/via/via_drv.c +++ linux-2.6.32/drivers/gpu/drm/via/via_drv.c @@ -58,7 +58,7 @@ .owner = THIS_MODULE, .open = drm_open, .release = drm_release, - .ioctl = drm_ioctl, + .unlocked_ioctl = drm_ioctl, .mmap = drm_mmap, .poll = drm_poll, .fasync = drm_fasync, --- linux-2.6.32.orig/drivers/gpu/vga/vgaarb.c +++ linux-2.6.32/drivers/gpu/vga/vgaarb.c @@ -954,6 +954,7 @@ } } else if (strncmp(curr_pos, "target ", 7) == 0) { + struct pci_bus *pbus; unsigned int domain, bus, devfn; struct vga_device *vgadev; @@ -961,7 +962,7 @@ remaining -= 7; pr_devel("client 0x%p called 'target'\n", priv); /* if target is default */ - if (!strncmp(buf, "default", 7)) + if (!strncmp(curr_pos, "default", 7)) pdev = pci_dev_get(vga_default_device()); else { if (!vga_pci_str_to_vars(curr_pos, remaining, @@ -969,18 +970,31 @@ ret_val = -EPROTO; goto done; } + pr_devel("vgaarb: %s ==> %x:%x:%x.%x\n", curr_pos, + domain, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); - pdev = pci_get_bus_and_slot(bus, devfn); + pbus = pci_find_bus(domain, bus); + pr_devel("vgaarb: pbus %p\n", pbus); + if (pbus == NULL) { + pr_err("vgaarb: invalid PCI domain and/or bus address %x:%x\n", + domain, bus); + ret_val = -ENODEV; + goto done; + } + pdev = pci_get_slot(pbus, devfn); + pr_devel("vgaarb: pdev %p\n", pdev); if (!pdev) { - pr_info("vgaarb: invalid PCI address!\n"); + pr_err("vgaarb: invalid PCI address %x:%x\n", + bus, devfn); ret_val = -ENODEV; goto done; } } vgadev = vgadev_find(pdev); + pr_devel("vgaarb: vgadev %p\n", vgadev); if (vgadev == NULL) { - pr_info("vgaarb: this pci device is not a vga device\n"); + pr_err("vgaarb: this pci device is not a vga device\n"); pci_dev_put(pdev); ret_val = -ENODEV; goto done; @@ -998,7 +1012,8 @@ } } if (i == MAX_USER_CARDS) { - pr_err("vgaarb: maximum user cards number reached!\n"); + pr_err("vgaarb: maximum user cards (%d) number reached!\n", + MAX_USER_CARDS); pci_dev_put(pdev); /* XXX: which value to return? */ ret_val = -ENOMEM; --- linux-2.6.32.orig/drivers/gpio/wm831x-gpio.c +++ linux-2.6.32/drivers/gpio/wm831x-gpio.c @@ -61,23 +61,31 @@ return 0; } -static int wm831x_gpio_direction_out(struct gpio_chip *chip, - unsigned offset, int value) +static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) { struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); struct wm831x *wm831x = wm831x_gpio->wm831x; - return wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset, - WM831X_GPN_DIR | WM831X_GPN_TRI, 0); + wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset, + value << offset); } -static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) +static int wm831x_gpio_direction_out(struct gpio_chip *chip, + unsigned offset, int value) { struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); struct wm831x *wm831x = wm831x_gpio->wm831x; + int ret; - wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset, - value << offset); + ret = wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset, + WM831X_GPN_DIR | WM831X_GPN_TRI, 0); + if (ret < 0) + return ret; + + /* Can only set GPIO state once it's in output mode */ + wm831x_gpio_set(chip, offset, value); + + return 0; } #ifdef CONFIG_DEBUG_FS --- linux-2.6.32.orig/drivers/pcmcia/cardbus.c +++ linux-2.6.32/drivers/pcmcia/cardbus.c @@ -214,7 +214,7 @@ unsigned int max, pass; s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0)); -// pcibios_fixup_bus(bus); + pci_fixup_cardbus(bus); max = bus->secondary; for (pass = 0; pass < 2; pass++) --- linux-2.6.32.orig/drivers/xen/events.c +++ linux-2.6.32/drivers/xen/events.c @@ -474,6 +474,9 @@ bind_evtchn_to_cpu(evtchn, 0); evtchn_to_irq[evtchn] = -1; + } + + if (irq_info[irq].type != IRQT_UNBOUND) { irq_info[irq] = mk_unbound_info(); dynamic_irq_cleanup(irq); --- linux-2.6.32.orig/drivers/xen/balloon.c +++ linux-2.6.32/drivers/xen/balloon.c @@ -66,8 +66,6 @@ /* We aim for 'current allocation' == 'target allocation'. */ unsigned long current_pages; unsigned long target_pages; - /* We may hit the hard limit in Xen. If we do then we remember it. */ - unsigned long hard_limit; /* * Drivers may alter the memory reservation independently, but they * must inform the balloon driver so we avoid hitting the hard limit. @@ -136,6 +134,8 @@ list_add(&page->lru, &ballooned_pages); balloon_stats.balloon_low++; } + + totalram_pages--; } /* balloon_retrieve: rescue a page from the balloon, if it is not empty. */ @@ -156,6 +156,8 @@ else balloon_stats.balloon_low--; + totalram_pages++; + return page; } @@ -181,7 +183,7 @@ static unsigned long current_target(void) { - unsigned long target = min(balloon_stats.target_pages, balloon_stats.hard_limit); + unsigned long target = balloon_stats.target_pages; target = min(target, balloon_stats.current_pages + @@ -217,23 +219,10 @@ set_xen_guest_handle(reservation.extent_start, frame_list); reservation.nr_extents = nr_pages; rc = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation); - if (rc < nr_pages) { - if (rc > 0) { - int ret; - - /* We hit the Xen hard limit: reprobe. */ - reservation.nr_extents = rc; - ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, - &reservation); - BUG_ON(ret != rc); - } - if (rc >= 0) - balloon_stats.hard_limit = (balloon_stats.current_pages + rc - - balloon_stats.driver_pages); + if (rc < 0) goto out; - } - for (i = 0; i < nr_pages; i++) { + for (i = 0; i < rc; i++) { page = balloon_retrieve(); BUG_ON(page == NULL); @@ -259,13 +248,12 @@ __free_page(page); } - balloon_stats.current_pages += nr_pages; - totalram_pages = balloon_stats.current_pages; + balloon_stats.current_pages += rc; out: spin_unlock_irqrestore(&balloon_lock, flags); - return 0; + return rc < 0 ? rc : rc != nr_pages; } static int decrease_reservation(unsigned long nr_pages) @@ -323,7 +311,6 @@ BUG_ON(ret != nr_pages); balloon_stats.current_pages -= nr_pages; - totalram_pages = balloon_stats.current_pages; spin_unlock_irqrestore(&balloon_lock, flags); @@ -367,7 +354,6 @@ static void balloon_set_new_target(unsigned long target) { /* No need for lock. Not read-modify-write updates. */ - balloon_stats.hard_limit = ~0UL; balloon_stats.target_pages = target; schedule_work(&balloon_worker); } @@ -422,12 +408,10 @@ pr_info("xen_balloon: Initialising balloon driver.\n"); balloon_stats.current_pages = min(xen_start_info->nr_pages, max_pfn); - totalram_pages = balloon_stats.current_pages; balloon_stats.target_pages = balloon_stats.current_pages; balloon_stats.balloon_low = 0; balloon_stats.balloon_high = 0; balloon_stats.driver_pages = 0UL; - balloon_stats.hard_limit = ~0UL; init_timer(&balloon_timer); balloon_timer.data = 0; @@ -472,9 +456,6 @@ BALLOON_SHOW(current_kb, "%lu\n", PAGES2KB(balloon_stats.current_pages)); BALLOON_SHOW(low_kb, "%lu\n", PAGES2KB(balloon_stats.balloon_low)); BALLOON_SHOW(high_kb, "%lu\n", PAGES2KB(balloon_stats.balloon_high)); -BALLOON_SHOW(hard_limit_kb, - (balloon_stats.hard_limit!=~0UL) ? "%lu\n" : "???\n", - (balloon_stats.hard_limit!=~0UL) ? PAGES2KB(balloon_stats.hard_limit) : 0); BALLOON_SHOW(driver_kb, "%lu\n", PAGES2KB(balloon_stats.driver_pages)); static ssize_t show_target_kb(struct sys_device *dev, struct sysdev_attribute *attr, @@ -544,7 +525,6 @@ &attr_current_kb.attr, &attr_low_kb.attr, &attr_high_kb.attr, - &attr_hard_limit_kb.attr, &attr_driver_kb.attr, NULL }; --- linux-2.6.32.orig/drivers/xen/manage.c +++ linux-2.6.32/drivers/xen/manage.c @@ -43,7 +43,6 @@ if (err) { printk(KERN_ERR "xen_suspend: sysdev_suspend failed: %d\n", err); - dpm_resume_noirq(PMSG_RESUME); return err; } @@ -69,7 +68,6 @@ } sysdev_resume(); - dpm_resume_noirq(PMSG_RESUME); return 0; } @@ -81,6 +79,12 @@ shutting_down = SHUTDOWN_SUSPEND; + err = stop_machine_create(); + if (err) { + printk(KERN_ERR "xen suspend: failed to setup stop_machine %d\n", err); + goto out; + } + #ifdef CONFIG_PREEMPT /* If the kernel is preemptible, we need to freeze all the processes to prevent them from being in the middle of a pagetable update @@ -88,14 +92,14 @@ err = freeze_processes(); if (err) { printk(KERN_ERR "xen suspend: freeze failed %d\n", err); - return; + goto out_destroy_sm; } #endif err = dpm_suspend_start(PMSG_SUSPEND); if (err) { printk(KERN_ERR "xen suspend: dpm_suspend_start %d\n", err); - goto out; + goto out_thaw; } printk(KERN_DEBUG "suspending xenstore...\n"); @@ -104,32 +108,39 @@ err = dpm_suspend_noirq(PMSG_SUSPEND); if (err) { printk(KERN_ERR "dpm_suspend_noirq failed: %d\n", err); - goto resume_devices; + goto out_resume; } err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); + + dpm_resume_noirq(PMSG_RESUME); + if (err) { printk(KERN_ERR "failed to start xen_suspend: %d\n", err); - goto out; + cancelled = 1; } +out_resume: if (!cancelled) { xen_arch_resume(); xs_resume(); } else xs_suspend_cancel(); - dpm_resume_noirq(PMSG_RESUME); - -resume_devices: dpm_resume_end(PMSG_RESUME); /* Make sure timer events get retriggered on all CPUs */ clock_was_set(); -out: + +out_thaw: #ifdef CONFIG_PREEMPT thaw_processes(); + +out_destroy_sm: #endif + stop_machine_destroy(); + +out: shutting_down = SHUTDOWN_INVALID; } #endif /* CONFIG_PM_SLEEP */ --- linux-2.6.32.orig/drivers/xen/xenbus/xenbus_probe.c +++ linux-2.6.32/drivers/xen/xenbus/xenbus_probe.c @@ -454,21 +454,21 @@ { return sprintf(buf, "%s\n", to_xenbus_device(dev)->nodename); } -DEVICE_ATTR(nodename, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_nodename, NULL); +static DEVICE_ATTR(nodename, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_nodename, NULL); static ssize_t xendev_show_devtype(struct device *dev, struct device_attribute *attr, char *buf) { return sprintf(buf, "%s\n", to_xenbus_device(dev)->devicetype); } -DEVICE_ATTR(devtype, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_devtype, NULL); +static DEVICE_ATTR(devtype, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_devtype, NULL); static ssize_t xendev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf) { return sprintf(buf, "xen:%s\n", to_xenbus_device(dev)->devicetype); } -DEVICE_ATTR(modalias, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_modalias, NULL); +static DEVICE_ATTR(modalias, S_IRUSR | S_IRGRP | S_IROTH, xendev_show_modalias, NULL); int xenbus_probe_node(struct xen_bus_type *bus, const char *type, @@ -843,7 +843,7 @@ MODULE_LICENSE("GPL"); -static int is_disconnected_device(struct device *dev, void *data) +static int is_device_connecting(struct device *dev, void *data) { struct xenbus_device *xendev = to_xenbus_device(dev); struct device_driver *drv = data; @@ -861,14 +861,15 @@ return 0; xendrv = to_xenbus_driver(dev->driver); - return (xendev->state != XenbusStateConnected || - (xendrv->is_ready && !xendrv->is_ready(xendev))); + return (xendev->state < XenbusStateConnected || + (xendev->state == XenbusStateConnected && + xendrv->is_ready && !xendrv->is_ready(xendev))); } -static int exists_disconnected_device(struct device_driver *drv) +static int exists_connecting_device(struct device_driver *drv) { return bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, - is_disconnected_device); + is_device_connecting); } static int print_device_status(struct device *dev, void *data) @@ -884,10 +885,13 @@ /* Information only: is this too noisy? */ printk(KERN_INFO "XENBUS: Device with no driver: %s\n", xendev->nodename); - } else if (xendev->state != XenbusStateConnected) { + } else if (xendev->state < XenbusStateConnected) { + enum xenbus_state rstate = XenbusStateUnknown; + if (xendev->otherend) + rstate = xenbus_read_driver_state(xendev->otherend); printk(KERN_WARNING "XENBUS: Timeout connecting " - "to device: %s (state %d)\n", - xendev->nodename, xendev->state); + "to device: %s (local state %d, remote state %d)\n", + xendev->nodename, xendev->state, rstate); } return 0; @@ -897,7 +901,7 @@ static int ready_to_wait_for_devices; /* - * On a 10 second timeout, wait for all devices currently configured. We need + * On a 5-minute timeout, wait for all devices currently configured. We need * to do this to guarantee that the filesystems and / or network devices * needed for boot are available, before we can allow the boot to proceed. * @@ -912,18 +916,30 @@ */ static void wait_for_devices(struct xenbus_driver *xendrv) { - unsigned long timeout = jiffies + 10*HZ; + unsigned long start = jiffies; struct device_driver *drv = xendrv ? &xendrv->driver : NULL; + unsigned int seconds_waited = 0; if (!ready_to_wait_for_devices || !xen_domain()) return; - while (exists_disconnected_device(drv)) { - if (time_after(jiffies, timeout)) - break; + while (exists_connecting_device(drv)) { + if (time_after(jiffies, start + (seconds_waited+5)*HZ)) { + if (!seconds_waited) + printk(KERN_WARNING "XENBUS: Waiting for " + "devices to initialise: "); + seconds_waited += 5; + printk("%us...", 300 - seconds_waited); + if (seconds_waited == 300) + break; + } + schedule_timeout_interruptible(HZ/10); } + if (seconds_waited) + printk("\n"); + bus_for_each_dev(&xenbus_frontend.bus, NULL, drv, print_device_status); } --- linux-2.6.32.orig/drivers/crypto/padlock-sha.c +++ linux-2.6.32/drivers/crypto/padlock-sha.c @@ -57,6 +57,23 @@ return crypto_shash_update(&dctx->fallback, data, length); } +static int padlock_sha_export(struct shash_desc *desc, void *out) +{ + struct padlock_sha_desc *dctx = shash_desc_ctx(desc); + + return crypto_shash_export(&dctx->fallback, out); +} + +static int padlock_sha_import(struct shash_desc *desc, const void *in) +{ + struct padlock_sha_desc *dctx = shash_desc_ctx(desc); + struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm); + + dctx->fallback.tfm = ctx->fallback; + dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP; + return crypto_shash_import(&dctx->fallback, in); +} + static inline void padlock_output_block(uint32_t *src, uint32_t *dst, size_t count) { @@ -235,7 +252,10 @@ .update = padlock_sha_update, .finup = padlock_sha1_finup, .final = padlock_sha1_final, + .export = padlock_sha_export, + .import = padlock_sha_import, .descsize = sizeof(struct padlock_sha_desc), + .statesize = sizeof(struct sha1_state), .base = { .cra_name = "sha1", .cra_driver_name = "sha1-padlock", @@ -256,7 +276,10 @@ .update = padlock_sha_update, .finup = padlock_sha256_finup, .final = padlock_sha256_final, + .export = padlock_sha_export, + .import = padlock_sha_import, .descsize = sizeof(struct padlock_sha_desc), + .statesize = sizeof(struct sha256_state), .base = { .cra_name = "sha256", .cra_driver_name = "sha256-padlock", --- linux-2.6.32.orig/drivers/connector/connector.c +++ linux-2.6.32/drivers/connector/connector.c @@ -36,17 +36,6 @@ MODULE_AUTHOR("Evgeniy Polyakov "); MODULE_DESCRIPTION("Generic userspace <-> kernelspace connector."); -static u32 cn_idx = CN_IDX_CONNECTOR; -static u32 cn_val = CN_VAL_CONNECTOR; - -module_param(cn_idx, uint, 0); -module_param(cn_val, uint, 0); -MODULE_PARM_DESC(cn_idx, "Connector's main device idx."); -MODULE_PARM_DESC(cn_val, "Connector's main device val."); - -static DEFINE_MUTEX(notify_lock); -static LIST_HEAD(notify_list); - static struct cn_dev cdev; static int cn_already_initialized; @@ -210,54 +199,6 @@ } /* - * Notification routing. - * - * Gets id and checks if there are notification request for it's idx - * and val. If there are such requests notify the listeners with the - * given notify event. - * - */ -static void cn_notify(struct cb_id *id, u32 notify_event) -{ - struct cn_ctl_entry *ent; - - mutex_lock(¬ify_lock); - list_for_each_entry(ent, ¬ify_list, notify_entry) { - int i; - struct cn_notify_req *req; - struct cn_ctl_msg *ctl = ent->msg; - int idx_found, val_found; - - idx_found = val_found = 0; - - req = (struct cn_notify_req *)ctl->data; - for (i = 0; i < ctl->idx_notify_num; ++i, ++req) { - if (id->idx >= req->first && - id->idx < req->first + req->range) { - idx_found = 1; - break; - } - } - - for (i = 0; i < ctl->val_notify_num; ++i, ++req) { - if (id->val >= req->first && - id->val < req->first + req->range) { - val_found = 1; - break; - } - } - - if (idx_found && val_found) { - struct cn_msg m = { .ack = notify_event, }; - - memcpy(&m.id, id, sizeof(m.id)); - cn_netlink_send(&m, ctl->group, GFP_KERNEL); - } - } - mutex_unlock(¬ify_lock); -} - -/* * Callback add routing - adds callback with given ID and name. * If there is registered callback with the same ID it will not be added. * @@ -276,8 +217,6 @@ if (err) return err; - cn_notify(id, 0); - return 0; } EXPORT_SYMBOL_GPL(cn_add_callback); @@ -295,111 +234,9 @@ struct cn_dev *dev = &cdev; cn_queue_del_callback(dev->cbdev, id); - cn_notify(id, 1); } EXPORT_SYMBOL_GPL(cn_del_callback); -/* - * Checks two connector's control messages to be the same. - * Returns 1 if they are the same or if the first one is corrupted. - */ -static int cn_ctl_msg_equals(struct cn_ctl_msg *m1, struct cn_ctl_msg *m2) -{ - int i; - struct cn_notify_req *req1, *req2; - - if (m1->idx_notify_num != m2->idx_notify_num) - return 0; - - if (m1->val_notify_num != m2->val_notify_num) - return 0; - - if (m1->len != m2->len) - return 0; - - if ((m1->idx_notify_num + m1->val_notify_num) * sizeof(*req1) != - m1->len) - return 1; - - req1 = (struct cn_notify_req *)m1->data; - req2 = (struct cn_notify_req *)m2->data; - - for (i = 0; i < m1->idx_notify_num; ++i) { - if (req1->first != req2->first || req1->range != req2->range) - return 0; - req1++; - req2++; - } - - for (i = 0; i < m1->val_notify_num; ++i) { - if (req1->first != req2->first || req1->range != req2->range) - return 0; - req1++; - req2++; - } - - return 1; -} - -/* - * Main connector device's callback. - * - * Used for notification of a request's processing. - */ -static void cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp) -{ - struct cn_ctl_msg *ctl; - struct cn_ctl_entry *ent; - u32 size; - - if (msg->len < sizeof(*ctl)) - return; - - ctl = (struct cn_ctl_msg *)msg->data; - - size = (sizeof(*ctl) + ((ctl->idx_notify_num + - ctl->val_notify_num) * - sizeof(struct cn_notify_req))); - - if (msg->len != size) - return; - - if (ctl->len + sizeof(*ctl) != msg->len) - return; - - /* - * Remove notification. - */ - if (ctl->group == 0) { - struct cn_ctl_entry *n; - - mutex_lock(¬ify_lock); - list_for_each_entry_safe(ent, n, ¬ify_list, notify_entry) { - if (cn_ctl_msg_equals(ent->msg, ctl)) { - list_del(&ent->notify_entry); - kfree(ent); - } - } - mutex_unlock(¬ify_lock); - - return; - } - - size += sizeof(*ent); - - ent = kzalloc(size, GFP_KERNEL); - if (!ent) - return; - - ent->msg = (struct cn_ctl_msg *)(ent + 1); - - memcpy(ent->msg, ctl, size - sizeof(*ent)); - - mutex_lock(¬ify_lock); - list_add(&ent->notify_entry, ¬ify_list); - mutex_unlock(¬ify_lock); -} - static int cn_proc_show(struct seq_file *m, void *v) { struct cn_queue_dev *dev = cdev.cbdev; @@ -437,11 +274,8 @@ static int __devinit cn_init(void) { struct cn_dev *dev = &cdev; - int err; dev->input = cn_rx_skb; - dev->id.idx = cn_idx; - dev->id.val = cn_val; dev->nls = netlink_kernel_create(&init_net, NETLINK_CONNECTOR, CN_NETLINK_USERS + 0xf, @@ -457,14 +291,6 @@ cn_already_initialized = 1; - err = cn_add_callback(&dev->id, "connector", &cn_callback); - if (err) { - cn_already_initialized = 0; - cn_queue_free_dev(dev->cbdev); - netlink_kernel_release(dev->nls); - return -EINVAL; - } - proc_net_fops_create(&init_net, "connector", S_IRUGO, &cn_file_ops); return 0; @@ -478,7 +304,6 @@ proc_net_remove(&init_net, "connector"); - cn_del_callback(&dev->id); cn_queue_free_dev(dev->cbdev); netlink_kernel_release(dev->nls); } --- linux-2.6.32.orig/drivers/regulator/wm8350-regulator.c +++ linux-2.6.32/drivers/regulator/wm8350-regulator.c @@ -1504,7 +1504,8 @@ led->isink_init.consumer_supplies = &led->isink_consumer; led->isink_init.constraints.min_uA = 0; led->isink_init.constraints.max_uA = pdata->max_uA; - led->isink_init.constraints.valid_ops_mask = REGULATOR_CHANGE_CURRENT; + led->isink_init.constraints.valid_ops_mask + = REGULATOR_CHANGE_CURRENT | REGULATOR_CHANGE_STATUS; led->isink_init.constraints.valid_modes_mask = REGULATOR_MODE_NORMAL; ret = wm8350_register_regulator(wm8350, isink, &led->isink_init); if (ret != 0) { @@ -1517,6 +1518,7 @@ led->dcdc_init.num_consumer_supplies = 1; led->dcdc_init.consumer_supplies = &led->dcdc_consumer; led->dcdc_init.constraints.valid_modes_mask = REGULATOR_MODE_NORMAL; + led->dcdc_init.constraints.valid_ops_mask = REGULATOR_CHANGE_STATUS; ret = wm8350_register_regulator(wm8350, dcdc, &led->dcdc_init); if (ret != 0) { platform_device_put(pdev); --- linux-2.6.32.orig/drivers/regulator/core.c +++ linux-2.6.32/drivers/regulator/core.c @@ -640,7 +640,7 @@ static void print_constraints(struct regulator_dev *rdev) { struct regulation_constraints *constraints = rdev->constraints; - char buf[80]; + char buf[80] = ""; int count; if (rdev->desc->type == REGULATOR_VOLTAGE) { --- linux-2.6.32.orig/drivers/hwmon/sht15.c +++ linux-2.6.32/drivers/hwmon/sht15.c @@ -302,13 +302,13 @@ **/ static inline int sht15_calc_temp(struct sht15_data *data) { - int d1 = 0; + int d1 = temppoints[0].d1; int i; - for (i = 1; i < ARRAY_SIZE(temppoints) - 1; i++) + for (i = ARRAY_SIZE(temppoints) - 1; i > 0; i--) /* Find pointer to interpolate */ if (data->supply_uV > temppoints[i - 1].vdd) { - d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd) + d1 = (data->supply_uV - temppoints[i - 1].vdd) * (temppoints[i].d1 - temppoints[i - 1].d1) / (temppoints[i].vdd - temppoints[i - 1].vdd) + temppoints[i - 1].d1; @@ -332,12 +332,12 @@ const int c1 = -4; const int c2 = 40500; /* x 10 ^ -6 */ - const int c3 = 2800; /* x10 ^ -9 */ + const int c3 = -2800; /* x10 ^ -9 */ RHlinear = c1*1000 + c2 * data->val_humid/1000 + (data->val_humid * data->val_humid * c3)/1000000; - return (temp - 25000) * (10000 + 800 * data->val_humid) + return (temp - 25000) * (10000 + 80 * data->val_humid) / 1000000 + RHlinear; } @@ -541,7 +541,12 @@ /* If a regulator is available, query what the supply voltage actually is!*/ data->reg = regulator_get(data->dev, "vcc"); if (!IS_ERR(data->reg)) { - data->supply_uV = regulator_get_voltage(data->reg); + int voltage; + + voltage = regulator_get_voltage(data->reg); + if (voltage) + data->supply_uV = voltage; + regulator_enable(data->reg); /* setup a notifier block to update this if another device * causes the voltage to change */ --- linux-2.6.32.orig/drivers/hwmon/lis3lv02d.h +++ linux-2.6.32/drivers/hwmon/lis3lv02d.h @@ -103,6 +103,7 @@ CTRL1_DF1 = 0x20, CTRL1_PD0 = 0x40, CTRL1_PD1 = 0x80, + CTRL1_DR = 0x80, /* Data rate on 8 bits */ }; enum lis3lv02d_ctrl2 { CTRL2_DAS = 0x01, --- linux-2.6.32.orig/drivers/hwmon/lm78.c +++ linux-2.6.32/drivers/hwmon/lm78.c @@ -870,17 +870,16 @@ static int __init lm78_isa_found(unsigned short address) { int val, save, found = 0; + int port; - /* We have to request the region in two parts because some - boards declare base+4 to base+7 as a PNP device */ - if (!request_region(address, 4, "lm78")) { - pr_debug("lm78: Failed to request low part of region\n"); - return 0; - } - if (!request_region(address + 4, 4, "lm78")) { - pr_debug("lm78: Failed to request high part of region\n"); - release_region(address, 4); - return 0; + /* Some boards declare base+0 to base+7 as a PNP device, some base+4 + * to base+7 and some base+5 to base+6. So we better request each port + * individually for the probing phase. */ + for (port = address; port < address + LM78_EXTENT; port++) { + if (!request_region(port, 1, "lm78")) { + pr_debug("lm78: Failed to request port 0x%x\n", port); + goto release; + } } #define REALLY_SLOW_IO @@ -944,8 +943,8 @@ val & 0x80 ? "LM79" : "LM78", (int)address); release: - release_region(address + 4, 4); - release_region(address, 4); + for (port--; port >= address; port--) + release_region(port, 1); return found; } --- linux-2.6.32.orig/drivers/hwmon/fschmd.c +++ linux-2.6.32/drivers/hwmon/fschmd.c @@ -767,6 +767,7 @@ static int watchdog_open(struct inode *inode, struct file *filp) { struct fschmd_data *pos, *data = NULL; + int watchdog_is_open; /* We get called from drivers/char/misc.c with misc_mtx hold, and we call misc_register() from fschmd_probe() with watchdog_data_mutex @@ -781,10 +782,12 @@ } } /* Note we can never not have found data, so we don't check for this */ - kref_get(&data->kref); + watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open); + if (!watchdog_is_open) + kref_get(&data->kref); mutex_unlock(&watchdog_data_mutex); - if (test_and_set_bit(0, &data->watchdog_is_open)) + if (watchdog_is_open) return -EBUSY; /* Start the watchdog */ --- linux-2.6.32.orig/drivers/hwmon/tmp421.c +++ linux-2.6.32/drivers/hwmon/tmp421.c @@ -62,9 +62,9 @@ #define TMP423_DEVICE_ID 0x23 static const struct i2c_device_id tmp421_id[] = { - { "tmp421", tmp421 }, - { "tmp422", tmp422 }, - { "tmp423", tmp423 }, + { "tmp421", 2 }, + { "tmp422", 3 }, + { "tmp423", 4 }, { } }; MODULE_DEVICE_TABLE(i2c, tmp421_id); @@ -74,21 +74,23 @@ struct mutex update_lock; char valid; unsigned long last_updated; - int kind; + int channels; u8 config; s16 temp[4]; }; static int temp_from_s16(s16 reg) { - int temp = reg; + /* Mask out status bits */ + int temp = reg & ~0xf; return (temp * 1000 + 128) / 256; } static int temp_from_u16(u16 reg) { - int temp = reg; + /* Mask out status bits */ + int temp = reg & ~0xf; /* Add offset for extended temperature range. */ temp -= 64 * 256; @@ -108,7 +110,7 @@ data->config = i2c_smbus_read_byte_data(client, TMP421_CONFIG_REG_1); - for (i = 0; i <= data->kind; i++) { + for (i = 0; i < data->channels; i++) { data->temp[i] = i2c_smbus_read_byte_data(client, TMP421_TEMP_MSB[i]) << 8; data->temp[i] |= i2c_smbus_read_byte_data(client, @@ -167,7 +169,7 @@ devattr = container_of(a, struct device_attribute, attr); index = to_sensor_dev_attr(devattr)->index; - if (data->kind > index) + if (index < data->channels) return a->mode; return 0; @@ -275,7 +277,7 @@ i2c_set_clientdata(client, data); mutex_init(&data->update_lock); - data->kind = id->driver_data; + data->channels = id->driver_data; err = tmp421_init_client(client); if (err) --- linux-2.6.32.orig/drivers/hwmon/adt7462.c +++ linux-2.6.32/drivers/hwmon/adt7462.c @@ -97,7 +97,7 @@ #define ADT7462_PIN24_SHIFT 6 #define ADT7462_PIN26_VOLT_INPUT 0x08 #define ADT7462_PIN25_VOLT_INPUT 0x20 -#define ADT7462_PIN28_SHIFT 6 /* cfg3 */ +#define ADT7462_PIN28_SHIFT 4 /* cfg3 */ #define ADT7462_PIN28_VOLT 0x5 #define ADT7462_REG_ALARM1 0xB8 @@ -182,7 +182,7 @@ * * Some, but not all, of these voltages have low/high limits. */ -#define ADT7462_VOLT_COUNT 12 +#define ADT7462_VOLT_COUNT 13 #define ADT7462_VENDOR 0x41 #define ADT7462_DEVICE 0x62 --- linux-2.6.32.orig/drivers/hwmon/Kconfig +++ linux-2.6.32/drivers/hwmon/Kconfig @@ -374,7 +374,7 @@ config SENSORS_CORETEMP tristate "Intel Core/Core2/Atom temperature sensor" - depends on X86 && EXPERIMENTAL + depends on X86 && PCI && EXPERIMENTAL help If you say yes here you get support for the temperature sensor inside your CPU. Most of the family 6 CPUs --- linux-2.6.32.orig/drivers/hwmon/lis3lv02d.c +++ linux-2.6.32/drivers/hwmon/lis3lv02d.c @@ -127,12 +127,14 @@ /* * Common configuration - * BDU: LSB and MSB values are not updated until both have been read. - * So the value read will always be correct. + * BDU: (12 bits sensors only) LSB and MSB values are not updated until + * both have been read. So the value read will always be correct. */ - lis3->read(lis3, CTRL_REG2, ®); - reg |= CTRL2_BDU; - lis3->write(lis3, CTRL_REG2, reg); + if (lis3->whoami == LIS_DOUBLE_ID) { + lis3->read(lis3, CTRL_REG2, ®); + reg |= CTRL2_BDU; + lis3->write(lis3, CTRL_REG2, reg); + } } EXPORT_SYMBOL_GPL(lis3lv02d_poweron); @@ -361,7 +363,8 @@ } /* conversion btw sampling rate and the register values */ -static int lis3lv02dl_df_val[4] = {40, 160, 640, 2560}; +static int lis3_12_rates[4] = {40, 160, 640, 2560}; +static int lis3_8_rates[2] = {100, 400}; static ssize_t lis3lv02d_rate_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -369,8 +372,13 @@ int val; lis3_dev.read(&lis3_dev, CTRL_REG1, &ctrl); - val = (ctrl & (CTRL1_DF0 | CTRL1_DF1)) >> 4; - return sprintf(buf, "%d\n", lis3lv02dl_df_val[val]); + + if (lis3_dev.whoami == LIS_DOUBLE_ID) + val = lis3_12_rates[(ctrl & (CTRL1_DF0 | CTRL1_DF1)) >> 4]; + else + val = lis3_8_rates[(ctrl & CTRL1_DR) >> 7]; + + return sprintf(buf, "%d\n", val); } static DEVICE_ATTR(position, S_IRUGO, lis3lv02d_position_show, NULL); --- linux-2.6.32.orig/drivers/hwmon/w83781d.c +++ linux-2.6.32/drivers/hwmon/w83781d.c @@ -1818,17 +1818,17 @@ w83781d_isa_found(unsigned short address) { int val, save, found = 0; + int port; - /* We have to request the region in two parts because some - boards declare base+4 to base+7 as a PNP device */ - if (!request_region(address, 4, "w83781d")) { - pr_debug("w83781d: Failed to request low part of region\n"); - return 0; - } - if (!request_region(address + 4, 4, "w83781d")) { - pr_debug("w83781d: Failed to request high part of region\n"); - release_region(address, 4); - return 0; + /* Some boards declare base+0 to base+7 as a PNP device, some base+4 + * to base+7 and some base+5 to base+6. So we better request each port + * individually for the probing phase. */ + for (port = address; port < address + W83781D_EXTENT; port++) { + if (!request_region(port, 1, "w83781d")) { + pr_debug("w83781d: Failed to request port 0x%x\n", + port); + goto release; + } } #define REALLY_SLOW_IO @@ -1902,8 +1902,8 @@ val == 0x30 ? "W83782D" : "W83781D", (int)address); release: - release_region(address + 4, 4); - release_region(address, 4); + for (port--; port >= address; port--) + release_region(port, 1); return found; } --- linux-2.6.32.orig/drivers/hwmon/hp_accel.c +++ linux-2.6.32/drivers/hwmon/hp_accel.c @@ -324,8 +324,8 @@ lis3lv02d_joystick_disable(); lis3lv02d_poweroff(&lis3_dev); - flush_work(&hpled_led.work); led_classdev_unregister(&hpled_led.led_classdev); + flush_work(&hpled_led.work); return lis3lv02d_remove_fs(&lis3_dev); } --- linux-2.6.32.orig/drivers/hwmon/coretemp.c +++ linux-2.6.32/drivers/hwmon/coretemp.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -161,6 +162,7 @@ int usemsr_ee = 1; int err; u32 eax, edx; + struct pci_dev *host_bridge; /* Early chips have no MSR for TjMax */ @@ -168,11 +170,21 @@ usemsr_ee = 0; } - /* Atoms seems to have TjMax at 90C */ + /* Atom CPUs */ if (c->x86_model == 0x1c) { usemsr_ee = 0; - tjmax = 90000; + + host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0)); + + if (host_bridge && host_bridge->vendor == PCI_VENDOR_ID_INTEL + && (host_bridge->device == 0xa000 /* NM10 based nettop */ + || host_bridge->device == 0xa010)) /* NM10 based netbook */ + tjmax = 100000; + else + tjmax = 90000; + + pci_dev_put(host_bridge); } if ((c->x86_model > 0xe) && (usemsr_ee)) { @@ -216,7 +228,7 @@ if (err) { dev_warn(dev, "Unable to access MSR 0xEE, for Tjmax, left" - " at default"); + " at default\n"); } else if (eax & 0x40000000) { tjmax = tjmax_ee; } --- linux-2.6.32.orig/drivers/hwmon/ams/ams-i2c.c +++ linux-2.6.32/drivers/hwmon/ams/ams-i2c.c @@ -238,6 +238,8 @@ static int ams_i2c_remove(struct i2c_client *client) { if (ams_info.has_device) { + ams_sensor_detach(); + /* Disable interrupts */ ams_i2c_set_irq(AMS_IRQ_ALL, 0); --- linux-2.6.32.orig/drivers/hwmon/ams/ams-core.c +++ linux-2.6.32/drivers/hwmon/ams/ams-core.c @@ -213,7 +213,7 @@ return -ENODEV; } -void ams_exit(void) +void ams_sensor_detach(void) { /* Remove input device */ ams_input_exit(); @@ -221,9 +221,6 @@ /* Remove attributes */ device_remove_file(&ams_info.of_dev->dev, &dev_attr_current); - /* Shut down implementation */ - ams_info.exit(); - /* Flush interrupt worker * * We do this after ams_info.exit(), because an interrupt might @@ -239,6 +236,12 @@ pmf_unregister_irq_client(&ams_freefall_client); } +static void __exit ams_exit(void) +{ + /* Shut down implementation */ + ams_info.exit(); +} + MODULE_AUTHOR("Stelian Pop, Michael Hanselmann"); MODULE_DESCRIPTION("Apple Motion Sensor driver"); MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/drivers/hwmon/ams/ams-pmu.c +++ linux-2.6.32/drivers/hwmon/ams/ams-pmu.c @@ -133,6 +133,8 @@ static void ams_pmu_exit(void) { + ams_sensor_detach(); + /* Disable interrupts */ ams_pmu_set_irq(AMS_IRQ_ALL, 0); --- linux-2.6.32.orig/drivers/hwmon/ams/ams.h +++ linux-2.6.32/drivers/hwmon/ams/ams.h @@ -61,6 +61,7 @@ extern void ams_sensors(s8 *x, s8 *y, s8 *z); extern int ams_sensor_attach(void); +extern void ams_sensor_detach(void); extern int ams_pmu_init(struct device_node *np); extern int ams_i2c_init(struct device_node *np); --- linux-2.6.32.orig/drivers/misc/enclosure.c +++ linux-2.6.32/drivers/misc/enclosure.c @@ -391,6 +391,7 @@ [ENCLOSURE_STATUS_NOT_INSTALLED] = "not installed", [ENCLOSURE_STATUS_UNKNOWN] = "unknown", [ENCLOSURE_STATUS_UNAVAILABLE] = "unavailable", + [ENCLOSURE_STATUS_MAX] = NULL, }; static const char *const enclosure_type [] = { --- linux-2.6.32.orig/drivers/hid/hid-3m-pct.c +++ linux-2.6.32/drivers/hid/hid-3m-pct.c @@ -0,0 +1,290 @@ +/* + * HID driver for 3M PCT multitouch panels + * + * Copyright (c) 2009 Stephane Chatty + * + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include +#include + +MODULE_AUTHOR("Stephane Chatty "); +MODULE_DESCRIPTION("3M PCT multitouch panels"); +MODULE_LICENSE("GPL"); + +#include "hid-ids.h" + +struct mmm_finger { + __s32 x, y; + __u8 rank; + bool touch, valid; +}; + +struct mmm_data { + struct mmm_finger f[10]; + __u8 curid, num; + bool touch, valid; +}; + +static int mmm_input_mapping(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + switch (usage->hid & HID_USAGE_PAGE) { + + case HID_UP_BUTTON: + return -1; + + case HID_UP_GENDESK: + switch (usage->hid) { + case HID_GD_X: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_X); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_X, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + case HID_GD_Y: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_Y); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_Y, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + } + return 0; + + case HID_UP_DIGITIZER: + switch (usage->hid) { + /* we do not want to map these: no input-oriented meaning */ + case 0x14: + case 0x23: + case HID_DG_INPUTMODE: + case HID_DG_DEVICEINDEX: + case HID_DG_CONTACTCOUNT: + case HID_DG_CONTACTMAX: + case HID_DG_INRANGE: + case HID_DG_CONFIDENCE: + return -1; + case HID_DG_TIPSWITCH: + /* touchscreen emulation */ + hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); + return 1; + case HID_DG_CONTACTID: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_TRACKING_ID); + return 1; + } + /* let hid-input decide for the others */ + return 0; + + case 0xff000000: + /* we do not want to map these: no input-oriented meaning */ + return -1; + } + + return 0; +} + +static int mmm_input_mapped(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + if (usage->type == EV_KEY || usage->type == EV_ABS) + clear_bit(usage->code, *bit); + + return 0; +} + +/* + * this function is called when a whole packet has been received and processed, + * so that it can decide what to send to the input layer. + */ +static void mmm_filter_event(struct mmm_data *md, struct input_dev *input) +{ + struct mmm_finger *oldest = 0; + bool pressed = false, released = false; + int i; + + /* + * we need to iterate on all fingers to decide if we have a press + * or a release event in our touchscreen emulation. + */ + for (i = 0; i < 10; ++i) { + struct mmm_finger *f = &md->f[i]; + if (!f->valid) { + /* this finger is just placeholder data, ignore */ + } else if (f->touch) { + /* this finger is on the screen */ + input_event(input, EV_ABS, ABS_MT_TRACKING_ID, i); + input_event(input, EV_ABS, ABS_MT_POSITION_X, f->x); + input_event(input, EV_ABS, ABS_MT_POSITION_Y, f->y); + input_mt_sync(input); + /* + * touchscreen emulation: maintain the age rank + * of this finger, decide if we have a press + */ + if (f->rank == 0) { + f->rank = ++(md->num); + if (f->rank == 1) + pressed = true; + } + if (f->rank == 1) + oldest = f; + } else { + /* this finger took off the screen */ + /* touchscreen emulation: maintain age rank of others */ + int j; + + for (j = 0; j < 10; ++j) { + struct mmm_finger *g = &md->f[j]; + if (g->rank > f->rank) { + g->rank--; + if (g->rank == 1) + oldest = g; + } + } + f->rank = 0; + --(md->num); + if (md->num == 0) + released = true; + } + f->valid = 0; + } + + /* touchscreen emulation */ + if (oldest) { + if (pressed) + input_event(input, EV_KEY, BTN_TOUCH, 1); + input_event(input, EV_ABS, ABS_X, oldest->x); + input_event(input, EV_ABS, ABS_Y, oldest->y); + } else if (released) { + input_event(input, EV_KEY, BTN_TOUCH, 0); + } +} + +/* + * this function is called upon all reports + * so that we can accumulate contact point information, + * and call input_mt_sync after each point. + */ +static int mmm_event(struct hid_device *hid, struct hid_field *field, + struct hid_usage *usage, __s32 value) +{ + struct mmm_data *md = hid_get_drvdata(hid); + /* + * strangely, this function can be called before + * field->hidinput is initialized! + */ + if (hid->claimed & HID_CLAIMED_INPUT) { + struct input_dev *input = field->hidinput->input; + switch (usage->hid) { + case HID_DG_TIPSWITCH: + md->touch = value; + break; + case HID_DG_CONFIDENCE: + md->valid = value; + break; + case HID_DG_CONTACTID: + if (md->valid) { + md->curid = value; + md->f[value].touch = md->touch; + md->f[value].valid = 1; + } + break; + case HID_GD_X: + if (md->valid) + md->f[md->curid].x = value; + break; + case HID_GD_Y: + if (md->valid) + md->f[md->curid].y = value; + break; + case HID_DG_CONTACTCOUNT: + mmm_filter_event(md, input); + break; + } + } + + /* we have handled the hidinput part, now remains hiddev */ + if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event) + hid->hiddev_hid_event(hid, field, usage, value); + + return 1; +} + +static int mmm_probe(struct hid_device *hdev, const struct hid_device_id *id) +{ + int ret; + struct mmm_data *md; + + md = kzalloc(sizeof(struct mmm_data), GFP_KERNEL); + if (!md) { + dev_err(&hdev->dev, "cannot allocate 3M data\n"); + return -ENOMEM; + } + hid_set_drvdata(hdev, md); + + ret = hid_parse(hdev); + if (!ret) + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + + if (ret) + kfree(md); + return ret; +} + +static void mmm_remove(struct hid_device *hdev) +{ + hid_hw_stop(hdev); + kfree(hid_get_drvdata(hdev)); + hid_set_drvdata(hdev, NULL); +} + +static const struct hid_device_id mmm_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M1968) }, + { } +}; +MODULE_DEVICE_TABLE(hid, mmm_devices); + +static const struct hid_usage_id mmm_grabbed_usages[] = { + { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID }, + { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1} +}; + +static struct hid_driver mmm_driver = { + .name = "3m-pct", + .id_table = mmm_devices, + .probe = mmm_probe, + .remove = mmm_remove, + .input_mapping = mmm_input_mapping, + .input_mapped = mmm_input_mapped, + .usage_table = mmm_grabbed_usages, + .event = mmm_event, +}; + +static int __init mmm_init(void) +{ + return hid_register_driver(&mmm_driver); +} + +static void __exit mmm_exit(void) +{ + hid_unregister_driver(&mmm_driver); +} + +module_init(mmm_init); +module_exit(mmm_exit); +MODULE_LICENSE("GPL"); + --- linux-2.6.32.orig/drivers/hid/hid-ntrig.c +++ linux-2.6.32/drivers/hid/hid-ntrig.c @@ -1,8 +1,8 @@ /* * HID driver for N-Trig touchscreens * - * Copyright (c) 2008 Rafi Rubin - * Copyright (c) 2009 Stephane Chatty + * Copyright (c) 2008-2010 Rafi Rubin + * Copyright (c) 2009-2010 Stephane Chatty * */ @@ -15,21 +15,27 @@ #include #include +#include +#include "usbhid/usbhid.h" #include #include "hid-ids.h" #define NTRIG_DUPLICATE_USAGES 0x001 -#define nt_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \ - EV_KEY, (c)) - struct ntrig_data { - __s32 x, y, id, w, h; - char reading_a_point, found_contact_id; - char pen_active; - char finger_active; - char inverted; + /* Incoming raw values for a single contact */ + __u16 x, y, w, h; + __u16 id; + + bool tipswitch; + bool confidence; + bool first_contact_touch; + + bool reading_mt; + + __u8 mt_footer[4]; + __u8 mt_foot_count; }; /* @@ -42,8 +48,11 @@ struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { - switch (usage->hid & HID_USAGE_PAGE) { + /* No special mappings needed for the pen and single touch */ + if (field->physical) + return 0; + switch (usage->hid & HID_USAGE_PAGE) { case HID_UP_GENDESK: switch (usage->hid) { case HID_GD_X: @@ -66,18 +75,12 @@ case HID_UP_DIGITIZER: switch (usage->hid) { /* we do not want to map these for now */ - case HID_DG_CONTACTID: /* value is useless */ + case HID_DG_CONTACTID: /* Not trustworthy, squelch for now */ case HID_DG_INPUTMODE: case HID_DG_DEVICEINDEX: - case HID_DG_CONTACTCOUNT: case HID_DG_CONTACTMAX: return -1; - /* original mapping by Rafi Rubin */ - case HID_DG_CONFIDENCE: - nt_map_key_clear(BTN_TOOL_DOUBLETAP); - return 1; - /* width/height mapped on TouchMajor/TouchMinor/Orientation */ case HID_DG_WIDTH: hid_map_usage(hi, usage, bit, max, @@ -104,6 +107,10 @@ struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { + /* No special mappings needed for the pen and single touch */ + if (field->physical) + return 0; + if (usage->type == EV_KEY || usage->type == EV_REL || usage->type == EV_ABS) clear_bit(usage->code, *bit); @@ -123,31 +130,34 @@ struct input_dev *input = field->hidinput->input; struct ntrig_data *nd = hid_get_drvdata(hid); + /* No special handling needed for the pen */ + if (field->application == HID_DG_PEN) + return 0; + if (hid->claimed & HID_CLAIMED_INPUT) { switch (usage->hid) { - - case HID_DG_INRANGE: - if (field->application & 0x3) - nd->pen_active = (value != 0); - else - nd->finger_active = (value != 0); - return 0; - - case HID_DG_INVERT: - nd->inverted = value; - return 0; - + case 0xff000001: + /* Tag indicating the start of a multitouch group */ + nd->reading_mt = 1; + nd->first_contact_touch = 0; + break; + case HID_DG_TIPSWITCH: + nd->tipswitch = value; + /* Prevent emission of touch until validated */ + return 1; + case HID_DG_CONFIDENCE: + nd->confidence = value; + break; case HID_GD_X: nd->x = value; - nd->reading_a_point = 1; + /* Clear the contact footer */ + nd->mt_foot_count = 0; break; case HID_GD_Y: nd->y = value; break; case HID_DG_CONTACTID: nd->id = value; - /* we receive this only when in multitouch mode */ - nd->found_contact_id = 1; break; case HID_DG_WIDTH: nd->w = value; @@ -159,33 +169,17 @@ * report received in a finger event. We want * to emit a normal (X, Y) position */ - if (!nd->found_contact_id) { - if (nd->pen_active && nd->finger_active) { - input_report_key(input, BTN_TOOL_DOUBLETAP, 0); - input_report_key(input, BTN_TOOL_DOUBLETAP, 1); - } - input_event(input, EV_ABS, ABS_X, nd->x); - input_event(input, EV_ABS, ABS_Y, nd->y); - } - break; - case HID_DG_TIPPRESSURE: - /* - * when in single touch mode, this is the last - * report received in a pen event. We want - * to emit a normal (X, Y) position - */ - if (! nd->found_contact_id) { - if (nd->pen_active && nd->finger_active) { - input_report_key(input, - nd->inverted ? BTN_TOOL_RUBBER : BTN_TOOL_PEN - , 0); - input_report_key(input, - nd->inverted ? BTN_TOOL_RUBBER : BTN_TOOL_PEN - , 1); - } + if (!nd->reading_mt) { + /* + * TipSwitch indicates the presence of a + * finger in single touch mode. + */ + input_report_key(input, BTN_TOUCH, + nd->tipswitch); + input_report_key(input, BTN_TOOL_DOUBLETAP, + nd->tipswitch); input_event(input, EV_ABS, ABS_X, nd->x); input_event(input, EV_ABS, ABS_Y, nd->y); - input_event(input, EV_ABS, ABS_PRESSURE, value); } break; case 0xff000002: @@ -195,10 +189,40 @@ * this usage tells if the contact point is real * or a placeholder */ - if (!nd->reading_a_point || value != 1) + + /* Shouldn't get more than 4 footer packets, so skip */ + if (nd->mt_foot_count >= 4) break; + + nd->mt_footer[nd->mt_foot_count++] = value; + + /* if the footer isn't complete break */ + if (nd->mt_foot_count != 4) + break; + + /* Pen activity signal, trigger end of touch. */ + if (nd->mt_footer[2]) { + nd->confidence = 0; + break; + } + + /* If the contact was invalid */ + if (!(nd->confidence && nd->mt_footer[0]) + || nd->w <= 250 + || nd->h <= 190) { + nd->confidence = 0; + break; + } + /* emit a normal (X, Y) for the first point only */ if (nd->id == 0) { + /* + * TipSwitch is superfluous in multitouch + * mode. The footer events tell us + * if there is a finger on the screen or + * not. + */ + nd->first_contact_touch = nd->confidence; input_event(input, EV_ABS, ABS_X, nd->x); input_event(input, EV_ABS, ABS_Y, nd->y); } @@ -220,8 +244,21 @@ ABS_MT_TOUCH_MINOR, nd->w); } input_mt_sync(field->hidinput->input); - nd->reading_a_point = 0; - nd->found_contact_id = 0; + break; + + case HID_DG_CONTACTCOUNT: /* End of a multitouch group */ + if (!nd->reading_mt) + break; + + nd->reading_mt = 0; + + if (nd->first_contact_touch) { + input_report_key(input, BTN_TOOL_DOUBLETAP, 1); + input_report_key(input, BTN_TOUCH, 1); + } else { + input_report_key(input, BTN_TOOL_DOUBLETAP, 0); + input_report_key(input, BTN_TOUCH, 0); + } break; default: @@ -231,8 +268,8 @@ } /* we have handled the hidinput part, now remains hiddev */ - if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event) - hid->hiddev_hid_event(hid, field, usage, value); + if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_hid_event) + hid->hiddev_hid_event(hid, field, usage, value); return 1; } @@ -241,23 +278,75 @@ { int ret; struct ntrig_data *nd; + struct hid_input *hidinput; + struct input_dev *input; + struct hid_report *report; + + if (id->driver_data) + hdev->quirks |= HID_QUIRK_MULTI_INPUT; nd = kmalloc(sizeof(struct ntrig_data), GFP_KERNEL); if (!nd) { dev_err(&hdev->dev, "cannot allocate N-Trig data\n"); return -ENOMEM; } - nd->reading_a_point = 0; - nd->found_contact_id = 0; + + nd->reading_mt = 0; hid_set_drvdata(hdev, nd); ret = hid_parse(hdev); - if (!ret) - ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + if (ret) { + dev_err(&hdev->dev, "parse failed\n"); + goto err_free; + } + + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_FF); + if (ret) { + dev_err(&hdev->dev, "hw start failed\n"); + goto err_free; + } - if (ret) - kfree (nd); + list_for_each_entry(hidinput, &hdev->inputs, list) { + if (hidinput->report->maxfield < 1) + continue; + + input = hidinput->input; + switch (hidinput->report->field[0]->application) { + case HID_DG_PEN: + input->name = "N-Trig Pen"; + break; + case HID_DG_TOUCHSCREEN: + /* These keys are redundant for fingers, clear them + * to prevent incorrect identification */ + __clear_bit(BTN_TOOL_PEN, input->keybit); + __clear_bit(BTN_TOOL_FINGER, input->keybit); + __clear_bit(BTN_0, input->keybit); + __set_bit(BTN_TOOL_DOUBLETAP, input->keybit); + /* + * The physical touchscreen (single touch) + * input has a value for physical, whereas + * the multitouch only has logical input + * fields. + */ + input->name = + (hidinput->report->field[0] + ->physical) ? + "N-Trig Touchscreen" : + "N-Trig MultiTouch"; + break; + } + } + + /* This is needed for devices with more recent firmware versions */ + report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0x0a]; + if (report) + usbhid_submit_report(hdev, report, USB_DIR_OUT); + + + return 0; +err_free: + kfree(nd); return ret; } @@ -276,7 +365,7 @@ static const struct hid_usage_id ntrig_grabbed_usages[] = { { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID }, - { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1} + { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1 } }; static struct hid_driver ntrig_driver = { --- linux-2.6.32.orig/drivers/hid/hid-ortek.c +++ linux-2.6.32/drivers/hid/hid-ortek.c @@ -0,0 +1,56 @@ +/* + * HID driver for Ortek WKB-2000 (wireless keyboard + mouse trackpad). + * Fixes LogicalMaximum error in USB report description, see + * http://bugzilla.kernel.org/show_bug.cgi?id=14787 + * + * Copyright (c) 2010 Johnathon Harris + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include + +#include "hid-ids.h" + +static void ortek_report_fixup(struct hid_device *hdev, __u8 *rdesc, + unsigned int rsize) +{ + if (rsize >= 56 && rdesc[54] == 0x25 && rdesc[55] == 0x01) { + dev_info(&hdev->dev, "Fixing up Ortek WKB-2000 " + "report descriptor.\n"); + rdesc[55] = 0x92; + } +} + +static const struct hid_device_id ortek_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, + { } +}; +MODULE_DEVICE_TABLE(hid, ortek_devices); + +static struct hid_driver ortek_driver = { + .name = "ortek", + .id_table = ortek_devices, + .report_fixup = ortek_report_fixup +}; + +static int __init ortek_init(void) +{ + return hid_register_driver(&ortek_driver); +} + +static void __exit ortek_exit(void) +{ + hid_unregister_driver(&ortek_driver); +} + +module_init(ortek_init); +module_exit(ortek_exit); +MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/drivers/hid/hid-input.c +++ linux-2.6.32/drivers/hid/hid-input.c @@ -193,12 +193,17 @@ break; case HID_UP_BUTTON: - code = ((usage->hid - 1) & 0xf); + code = ((usage->hid - 1) & HID_USAGE); switch (field->application) { case HID_GD_MOUSE: case HID_GD_POINTER: code += 0x110; break; - case HID_GD_JOYSTICK: code += 0x120; break; + case HID_GD_JOYSTICK: + if (code <= 0xf) + code += BTN_JOYSTICK; + else + code += BTN_TRIGGER_HAPPY; + break; case HID_GD_GAMEPAD: code += 0x130; break; default: switch (field->physical) { --- linux-2.6.32.orig/drivers/hid/hid-core.c +++ linux-2.6.32/drivers/hid/hid-core.c @@ -1250,6 +1250,7 @@ /* a list of devices for which there is a specialized driver on HID bus */ static const struct hid_device_id hid_blacklist[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M1968) }, { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) }, @@ -1287,6 +1288,9 @@ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, @@ -1333,10 +1337,14 @@ { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) }, { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) }, { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) }, + { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) }, + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) }, { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, USB_DEVICE_ID_MTP) }, { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, @@ -1539,8 +1547,9 @@ { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) }, { HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) }, { HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) }, - { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_LCM)}, - { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_LCM2)}, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT)}, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)}, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)}, { HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) }, { HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) }, { HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) }, @@ -1655,8 +1664,6 @@ { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) }, { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) }, { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY1) }, - { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY2) }, { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) }, { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) }, { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) }, --- linux-2.6.32.orig/drivers/hid/Kconfig +++ linux-2.6.32/drivers/hid/Kconfig @@ -55,6 +55,12 @@ menu "Special HID drivers" depends on HID +config HID_3M_PCT + tristate "3M PCT" + depends on USB_HID + ---help--- + Support for 3M PCT touch screens. + config HID_A4TECH tristate "A4 tech" if EMBEDDED depends on USB_HID @@ -190,6 +196,12 @@ ---help--- Support for Microsoft devices that are not fully compliant with HID standard. +config HID_MOSART + tristate "MosArt" + depends on USB_HID + ---help--- + Support for MosArt dual-touch panels. + config HID_MONTEREY tristate "Monterey" if EMBEDDED depends on USB_HID @@ -204,6 +216,13 @@ ---help--- Support for N-Trig touch screen. +config HID_ORTEK + tristate "Ortek" if EMBEDDED + depends on USB_HID + default !EMBEDDED + ---help--- + Support for Ortek WKB-2000 wireless keyboard + mouse trackpad. + config HID_PANTHERLORD tristate "Pantherlord support" if EMBEDDED depends on USB_HID @@ -227,6 +246,12 @@ ---help--- Support for Petalynx Maxter remote control. +config HID_QUANTA + tristate "Quanta Optical Touch" + depends on USB_HID + ---help--- + Support for Quanta Optical Touch dual-touch panels. + config HID_SAMSUNG tristate "Samsung" if EMBEDDED depends on USB_HID @@ -241,6 +266,12 @@ ---help--- Support for Sony PS3 controller. +config HID_STANTUM + tristate "Stantum" + depends on USB_HID + ---help--- + Support for Stantum multitouch panel. + config HID_SUNPLUS tristate "Sunplus" if EMBEDDED depends on USB_HID --- linux-2.6.32.orig/drivers/hid/hid-apple.c +++ linux-2.6.32/drivers/hid/hid-apple.c @@ -431,6 +431,13 @@ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), + .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), + .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN | + APPLE_ISO_KEYBOARD }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS), + .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY), .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY), --- linux-2.6.32.orig/drivers/hid/hid-mosart.c +++ linux-2.6.32/drivers/hid/hid-mosart.c @@ -0,0 +1,273 @@ +/* + * HID driver for the multitouch panel on the ASUS EeePC T91MT + * + * Copyright (c) 2009-2010 Stephane Chatty + * Copyright (c) 2010 Teemu Tuominen + * + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include +#include +#include "usbhid/usbhid.h" + +MODULE_AUTHOR("Stephane Chatty "); +MODULE_DESCRIPTION("MosArt dual-touch panel"); +MODULE_LICENSE("GPL"); + +#include "hid-ids.h" + +struct mosart_data { + __u16 x, y; + __u8 id; + bool valid; /* valid finger data, or just placeholder? */ + bool first; /* is this the first finger in this frame? */ + bool activity_now; /* at least one active finger in this frame? */ + bool activity; /* at least one active finger previously? */ +}; + +static int mosart_input_mapping(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + switch (usage->hid & HID_USAGE_PAGE) { + + case HID_UP_GENDESK: + switch (usage->hid) { + case HID_GD_X: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_X); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_X, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + case HID_GD_Y: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_Y); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_Y, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + } + return 0; + + case HID_UP_DIGITIZER: + switch (usage->hid) { + case HID_DG_CONFIDENCE: + case HID_DG_TIPSWITCH: + case HID_DG_INPUTMODE: + case HID_DG_DEVICEINDEX: + case HID_DG_CONTACTCOUNT: + case HID_DG_CONTACTMAX: + case HID_DG_TIPPRESSURE: + case HID_DG_WIDTH: + case HID_DG_HEIGHT: + return -1; + case HID_DG_INRANGE: + /* touchscreen emulation */ + hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); + return 1; + + case HID_DG_CONTACTID: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_TRACKING_ID); + return 1; + + } + return 0; + + case 0xff000000: + /* ignore HID features */ + return -1; + } + + return 0; +} + +static int mosart_input_mapped(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + if (usage->type == EV_KEY || usage->type == EV_ABS) + clear_bit(usage->code, *bit); + + return 0; +} + +/* + * this function is called when a whole finger has been parsed, + * so that it can decide what to send to the input layer. + */ +static void mosart_filter_event(struct mosart_data *td, struct input_dev *input) +{ + td->first = !td->first; /* touchscreen emulation */ + + if (!td->valid) { + /* + * touchscreen emulation: if no finger in this frame is valid + * and there previously was finger activity, this is a release + */ + if (!td->first && !td->activity_now && td->activity) { + input_event(input, EV_KEY, BTN_TOUCH, 0); + td->activity = false; + } + return; + } + + input_event(input, EV_ABS, ABS_MT_TRACKING_ID, td->id); + input_event(input, EV_ABS, ABS_MT_POSITION_X, td->x); + input_event(input, EV_ABS, ABS_MT_POSITION_Y, td->y); + + input_mt_sync(input); + td->valid = false; + + /* touchscreen emulation: if first active finger in this frame... */ + if (!td->activity_now) { + /* if there was no previous activity, emit touch event */ + if (!td->activity) { + input_event(input, EV_KEY, BTN_TOUCH, 1); + td->activity = true; + } + td->activity_now = true; + /* and in any case this is our preferred finger */ + input_event(input, EV_ABS, ABS_X, td->x); + input_event(input, EV_ABS, ABS_Y, td->y); + } +} + + +static int mosart_event(struct hid_device *hid, struct hid_field *field, + struct hid_usage *usage, __s32 value) +{ + struct mosart_data *td = hid_get_drvdata(hid); + + if (hid->claimed & HID_CLAIMED_INPUT) { + struct input_dev *input = field->hidinput->input; + switch (usage->hid) { + case HID_DG_INRANGE: + td->valid = !!value; + break; + case HID_GD_X: + td->x = value; + break; + case HID_GD_Y: + td->y = value; + mosart_filter_event(td, input); + break; + case HID_DG_CONTACTID: + td->id = value; + break; + case HID_DG_CONTACTCOUNT: + /* touch emulation: this is the last field in a frame */ + td->first = false; + td->activity_now = false; + break; + case HID_DG_CONFIDENCE: + case HID_DG_TIPSWITCH: + /* avoid interference from generic hidinput handling */ + break; + + default: + /* fallback to the generic hidinput handling */ + return 0; + } + } + + /* we have handled the hidinput part, now remains hiddev */ + if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event) + hid->hiddev_hid_event(hid, field, usage, value); + + return 1; +} + +static int mosart_probe(struct hid_device *hdev, const struct hid_device_id *id) +{ + int ret; + struct mosart_data *td; + + + td = kmalloc(sizeof(struct mosart_data), GFP_KERNEL); + if (!td) { + dev_err(&hdev->dev, "cannot allocate MosArt data\n"); + return -ENOMEM; + } + td->valid = false; + td->activity = false; + td->activity_now = false; + td->first = false; + hid_set_drvdata(hdev, td); + + /* currently, it's better to have one evdev device only */ +#if 0 + hdev->quirks |= HID_QUIRK_MULTI_INPUT; +#endif + + ret = hid_parse(hdev); + if (ret == 0) + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + + if (ret == 0) { + struct hid_report_enum *re = hdev->report_enum + + HID_FEATURE_REPORT; + struct hid_report *r = re->report_id_hash[7]; + + r->field[0]->value[0] = 0x02; + usbhid_submit_report(hdev, r, USB_DIR_OUT); + } else + kfree(td); + + return ret; +} + +static void mosart_remove(struct hid_device *hdev) +{ + hid_hw_stop(hdev); + kfree(hid_get_drvdata(hdev)); + hid_set_drvdata(hdev, NULL); +} + +static const struct hid_device_id mosart_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT) }, + { } +}; +MODULE_DEVICE_TABLE(hid, mosart_devices); + +static const struct hid_usage_id mosart_grabbed_usages[] = { + { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID }, + { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1} +}; + +static struct hid_driver mosart_driver = { + .name = "mosart", + .id_table = mosart_devices, + .probe = mosart_probe, + .remove = mosart_remove, + .input_mapping = mosart_input_mapping, + .input_mapped = mosart_input_mapped, + .usage_table = mosart_grabbed_usages, + .event = mosart_event, +}; + +static int __init mosart_init(void) +{ + return hid_register_driver(&mosart_driver); +} + +static void __exit mosart_exit(void) +{ + hid_unregister_driver(&mosart_driver); +} + +module_init(mosart_init); +module_exit(mosart_exit); + --- linux-2.6.32.orig/drivers/hid/hid-gyration.c +++ linux-2.6.32/drivers/hid/hid-gyration.c @@ -53,10 +53,13 @@ static int gyration_event(struct hid_device *hdev, struct hid_field *field, struct hid_usage *usage, __s32 value) { - struct input_dev *input = field->hidinput->input; + + if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput) + return 0; if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK && (usage->hid & 0xff) == 0x82) { + struct input_dev *input = field->hidinput->input; input_event(input, usage->type, usage->code, 1); input_sync(input); input_event(input, usage->type, usage->code, 0); --- linux-2.6.32.orig/drivers/hid/hid-quanta.c +++ linux-2.6.32/drivers/hid/hid-quanta.c @@ -0,0 +1,260 @@ +/* + * HID driver for Quanta Optical Touch dual-touch panels + * + * Copyright (c) 2009-2010 Stephane Chatty + * + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include + +MODULE_AUTHOR("Stephane Chatty "); +MODULE_DESCRIPTION("Quanta dual-touch panel"); +MODULE_LICENSE("GPL"); + +#include "hid-ids.h" + +struct quanta_data { + __u16 x, y; + __u8 id; + bool valid; /* valid finger data, or just placeholder? */ + bool first; /* is this the first finger in this frame? */ + bool activity_now; /* at least one active finger in this frame? */ + bool activity; /* at least one active finger previously? */ +}; + +static int quanta_input_mapping(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + switch (usage->hid & HID_USAGE_PAGE) { + + case HID_UP_GENDESK: + switch (usage->hid) { + case HID_GD_X: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_X); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_X, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + case HID_GD_Y: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_Y); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_Y, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + } + return 0; + + case HID_UP_DIGITIZER: + switch (usage->hid) { + case HID_DG_CONFIDENCE: + case HID_DG_TIPSWITCH: + case HID_DG_INPUTMODE: + case HID_DG_DEVICEINDEX: + case HID_DG_CONTACTCOUNT: + case HID_DG_CONTACTMAX: + case HID_DG_TIPPRESSURE: + case HID_DG_WIDTH: + case HID_DG_HEIGHT: + return -1; + case HID_DG_INRANGE: + /* touchscreen emulation */ + hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); + return 1; + case HID_DG_CONTACTID: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_TRACKING_ID); + return 1; + } + return 0; + + case 0xff000000: + /* ignore vendor-specific features */ + return -1; + } + + return 0; +} + +static int quanta_input_mapped(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + if (usage->type == EV_KEY || usage->type == EV_ABS) + clear_bit(usage->code, *bit); + + return 0; +} + +/* + * this function is called when a whole finger has been parsed, + * so that it can decide what to send to the input layer. + */ +static void quanta_filter_event(struct quanta_data *td, struct input_dev *input) +{ + + td->first = !td->first; /* touchscreen emulation */ + + if (!td->valid) { + /* + * touchscreen emulation: if no finger in this frame is valid + * and there previously was finger activity, this is a release + */ + if (!td->first && !td->activity_now && td->activity) { + input_event(input, EV_KEY, BTN_TOUCH, 0); + td->activity = false; + } + return; + } + + input_event(input, EV_ABS, ABS_MT_TRACKING_ID, td->id); + input_event(input, EV_ABS, ABS_MT_POSITION_X, td->x); + input_event(input, EV_ABS, ABS_MT_POSITION_Y, td->y); + + input_mt_sync(input); + td->valid = false; + + /* touchscreen emulation: if first active finger in this frame... */ + if (!td->activity_now) { + /* if there was no previous activity, emit touch event */ + if (!td->activity) { + input_event(input, EV_KEY, BTN_TOUCH, 1); + td->activity = true; + } + td->activity_now = true; + /* and in any case this is our preferred finger */ + input_event(input, EV_ABS, ABS_X, td->x); + input_event(input, EV_ABS, ABS_Y, td->y); + } +} + + +static int quanta_event(struct hid_device *hid, struct hid_field *field, + struct hid_usage *usage, __s32 value) +{ + struct quanta_data *td = hid_get_drvdata(hid); + + if (hid->claimed & HID_CLAIMED_INPUT) { + struct input_dev *input = field->hidinput->input; + + switch (usage->hid) { + case HID_DG_INRANGE: + td->valid = !!value; + break; + case HID_GD_X: + td->x = value; + break; + case HID_GD_Y: + td->y = value; + quanta_filter_event(td, input); + break; + case HID_DG_CONTACTID: + td->id = value; + break; + case HID_DG_CONTACTCOUNT: + /* touch emulation: this is the last field in a frame */ + td->first = false; + td->activity_now = false; + break; + case HID_DG_CONFIDENCE: + case HID_DG_TIPSWITCH: + /* avoid interference from generic hidinput handling */ + break; + + default: + /* fallback to the generic hidinput handling */ + return 0; + } + } + + /* we have handled the hidinput part, now remains hiddev */ + if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event) + hid->hiddev_hid_event(hid, field, usage, value); + + return 1; +} + +static int quanta_probe(struct hid_device *hdev, const struct hid_device_id *id) +{ + int ret; + struct quanta_data *td; + + td = kmalloc(sizeof(struct quanta_data), GFP_KERNEL); + if (!td) { + dev_err(&hdev->dev, "cannot allocate Quanta Touch data\n"); + return -ENOMEM; + } + td->valid = false; + td->activity = false; + td->activity_now = false; + td->first = false; + hid_set_drvdata(hdev, td); + + ret = hid_parse(hdev); + if (!ret) + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + + if (ret) + kfree(td); + + return ret; +} + +static void quanta_remove(struct hid_device *hdev) +{ + hid_hw_stop(hdev); + kfree(hid_get_drvdata(hdev)); + hid_set_drvdata(hdev, NULL); +} + +static const struct hid_device_id quanta_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, + USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) }, + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, + USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) }, + { } +}; +MODULE_DEVICE_TABLE(hid, quanta_devices); + +static const struct hid_usage_id quanta_grabbed_usages[] = { + { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID }, + { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1} +}; + +static struct hid_driver quanta_driver = { + .name = "quanta-touch", + .id_table = quanta_devices, + .probe = quanta_probe, + .remove = quanta_remove, + .input_mapping = quanta_input_mapping, + .input_mapped = quanta_input_mapped, + .usage_table = quanta_grabbed_usages, + .event = quanta_event, +}; + +static int __init quanta_init(void) +{ + return hid_register_driver(&quanta_driver); +} + +static void __exit quanta_exit(void) +{ + hid_unregister_driver(&quanta_driver); +} + +module_init(quanta_init); +module_exit(quanta_exit); + --- linux-2.6.32.orig/drivers/hid/Makefile +++ linux-2.6.32/drivers/hid/Makefile @@ -19,6 +19,7 @@ hid-logitech-objs += hid-lg2ff.o endif +obj-$(CONFIG_HID_3M_PCT) += hid-3m-pct.o obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o obj-$(CONFIG_HID_APPLE) += hid-apple.o obj-$(CONFIG_HID_BELKIN) += hid-belkin.o @@ -32,13 +33,17 @@ obj-$(CONFIG_HID_KYE) += hid-kye.o obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o obj-$(CONFIG_HID_MICROSOFT) += hid-microsoft.o +obj-$(CONFIG_HID_ORTEK) += hid-ortek.o obj-$(CONFIG_HID_MONTEREY) += hid-monterey.o +obj-$(CONFIG_HID_MOSART) += hid-mosart.o obj-$(CONFIG_HID_NTRIG) += hid-ntrig.o +obj-$(CONFIG_HID_QUANTA) += hid-quanta.o obj-$(CONFIG_HID_PANTHERLORD) += hid-pl.o obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o obj-$(CONFIG_HID_SONY) += hid-sony.o +obj-$(CONFIG_HID_STANTUM) += hid-stantum.o obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o obj-$(CONFIG_HID_THRUSTMASTER) += hid-tmff.o --- linux-2.6.32.orig/drivers/hid/hid-stantum.c +++ linux-2.6.32/drivers/hid/hid-stantum.c @@ -0,0 +1,283 @@ +/* + * HID driver for Stantum multitouch panels + * + * Copyright (c) 2009 Stephane Chatty + * + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include + +MODULE_AUTHOR("Stephane Chatty "); +MODULE_DESCRIPTION("Stantum HID multitouch panels"); +MODULE_LICENSE("GPL"); + +#include "hid-ids.h" + +struct stantum_data { + __s32 x, y, z, w, h; /* x, y, pressure, width, height */ + __u16 id; /* touch id */ + bool valid; /* valid finger data, or just placeholder? */ + bool first; /* first finger in the HID packet? */ + bool activity; /* at least one active finger so far? */ +}; + +static int stantum_input_mapping(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + switch (usage->hid & HID_USAGE_PAGE) { + + case HID_UP_GENDESK: + switch (usage->hid) { + case HID_GD_X: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_X); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_X, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + case HID_GD_Y: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_POSITION_Y); + /* touchscreen emulation */ + input_set_abs_params(hi->input, ABS_Y, + field->logical_minimum, + field->logical_maximum, 0, 0); + return 1; + } + return 0; + + case HID_UP_DIGITIZER: + switch (usage->hid) { + case HID_DG_INRANGE: + case HID_DG_CONFIDENCE: + case HID_DG_INPUTMODE: + case HID_DG_DEVICEINDEX: + case HID_DG_CONTACTCOUNT: + case HID_DG_CONTACTMAX: + return -1; + + case HID_DG_TIPSWITCH: + /* touchscreen emulation */ + hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); + return 1; + + case HID_DG_WIDTH: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_TOUCH_MAJOR); + return 1; + case HID_DG_HEIGHT: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_TOUCH_MINOR); + input_set_abs_params(hi->input, ABS_MT_ORIENTATION, + 1, 1, 0, 0); + return 1; + case HID_DG_TIPPRESSURE: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_PRESSURE); + return 1; + + case HID_DG_CONTACTID: + hid_map_usage(hi, usage, bit, max, + EV_ABS, ABS_MT_TRACKING_ID); + return 1; + + } + return 0; + + case 0xff000000: + /* no input-oriented meaning */ + return -1; + } + + return 0; +} + +static int stantum_input_mapped(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + if (usage->type == EV_KEY || usage->type == EV_ABS) + clear_bit(usage->code, *bit); + + return 0; +} + +/* + * this function is called when a whole finger has been parsed, + * so that it can decide what to send to the input layer. + */ +static void stantum_filter_event(struct stantum_data *sd, + struct input_dev *input) +{ + bool wide; + + if (!sd->valid) { + /* + * touchscreen emulation: if the first finger is not valid and + * there previously was finger activity, this is a release + */ + if (sd->first && sd->activity) { + input_event(input, EV_KEY, BTN_TOUCH, 0); + sd->activity = false; + } + return; + } + + input_event(input, EV_ABS, ABS_MT_TRACKING_ID, sd->id); + input_event(input, EV_ABS, ABS_MT_POSITION_X, sd->x); + input_event(input, EV_ABS, ABS_MT_POSITION_Y, sd->y); + + wide = (sd->w > sd->h); + input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide); + input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, wide ? sd->w : sd->h); + input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, wide ? sd->h : sd->w); + + input_event(input, EV_ABS, ABS_MT_PRESSURE, sd->z); + + input_mt_sync(input); + sd->valid = false; + + /* touchscreen emulation */ + if (sd->first) { + if (!sd->activity) { + input_event(input, EV_KEY, BTN_TOUCH, 1); + sd->activity = true; + } + input_event(input, EV_ABS, ABS_X, sd->x); + input_event(input, EV_ABS, ABS_Y, sd->y); + } + sd->first = false; +} + + +static int stantum_event(struct hid_device *hid, struct hid_field *field, + struct hid_usage *usage, __s32 value) +{ + struct stantum_data *sd = hid_get_drvdata(hid); + + if (hid->claimed & HID_CLAIMED_INPUT) { + struct input_dev *input = field->hidinput->input; + + switch (usage->hid) { + case HID_DG_INRANGE: + /* this is the last field in a finger */ + stantum_filter_event(sd, input); + break; + case HID_DG_WIDTH: + sd->w = value; + break; + case HID_DG_HEIGHT: + sd->h = value; + break; + case HID_GD_X: + sd->x = value; + break; + case HID_GD_Y: + sd->y = value; + break; + case HID_DG_TIPPRESSURE: + sd->z = value; + break; + case HID_DG_CONTACTID: + sd->id = value; + break; + case HID_DG_CONFIDENCE: + sd->valid = !!value; + break; + case 0xff000002: + /* this comes only before the first finger */ + sd->first = true; + break; + + default: + /* ignore the others */ + return 1; + } + } + + /* we have handled the hidinput part, now remains hiddev */ + if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event) + hid->hiddev_hid_event(hid, field, usage, value); + + return 1; +} + +static int stantum_probe(struct hid_device *hdev, + const struct hid_device_id *id) +{ + int ret; + struct stantum_data *sd; + + sd = kmalloc(sizeof(struct stantum_data), GFP_KERNEL); + if (!sd) { + dev_err(&hdev->dev, "cannot allocate Stantum data\n"); + return -ENOMEM; + } + sd->valid = false; + sd->first = false; + sd->activity = false; + hid_set_drvdata(hdev, sd); + + ret = hid_parse(hdev); + if (!ret) + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + + if (ret) + kfree(sd); + + return ret; +} + +static void stantum_remove(struct hid_device *hdev) +{ + hid_hw_stop(hdev); + kfree(hid_get_drvdata(hdev)); + hid_set_drvdata(hdev, NULL); +} + +static const struct hid_device_id stantum_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, USB_DEVICE_ID_MTP) }, + { } +}; +MODULE_DEVICE_TABLE(hid, stantum_devices); + +static const struct hid_usage_id stantum_grabbed_usages[] = { + { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID }, + { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1} +}; + +static struct hid_driver stantum_driver = { + .name = "stantum", + .id_table = stantum_devices, + .probe = stantum_probe, + .remove = stantum_remove, + .input_mapping = stantum_input_mapping, + .input_mapped = stantum_input_mapped, + .usage_table = stantum_grabbed_usages, + .event = stantum_event, +}; + +static int __init stantum_init(void) +{ + return hid_register_driver(&stantum_driver); +} + +static void __exit stantum_exit(void) +{ + hid_unregister_driver(&stantum_driver); +} + +module_init(stantum_init); +module_exit(stantum_exit); + --- linux-2.6.32.orig/drivers/hid/hid-ids.h +++ linux-2.6.32/drivers/hid/hid-ids.h @@ -18,6 +18,9 @@ #ifndef HID_IDS_H_FILE #define HID_IDS_H_FILE +#define USB_VENDOR_ID_3M 0x0596 +#define USB_DEVICE_ID_3M1968 0x0500 + #define USB_VENDOR_ID_A4TECH 0x09da #define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006 #define USB_DEVICE_ID_A4TECH_X5_005D 0x000a @@ -88,14 +91,20 @@ #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236 #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237 #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238 +#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239 +#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a +#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b #define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241 #define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242 -#define USB_VENDOR_ID_ASUS 0x0b05 -#define USB_DEVICE_ID_ASUS_LCM 0x1726 -#define USB_DEVICE_ID_ASUS_LCM2 0x175b +#define USB_VENDOR_ID_ASUS 0x0486 +#define USB_DEVICE_ID_ASUS_T91MT 0x0185 + +#define USB_VENDOR_ID_ASUSTEK 0x0b05 +#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726 +#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b #define USB_VENDOR_ID_ATEN 0x0557 #define USB_DEVICE_ID_ATEN_UC100KM 0x2004 @@ -346,12 +355,18 @@ #define USB_VENDOR_ID_NEC 0x073e #define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301 +#define USB_VENDOR_ID_NEXTWINDOW 0x1926 +#define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003 + #define USB_VENDOR_ID_NTRIG 0x1b96 #define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN 0x0001 #define USB_VENDOR_ID_ONTRAK 0x0a07 #define USB_DEVICE_ID_ONTRAK_ADU100 0x0064 +#define USB_VENDOR_ID_ORTEK 0x05a4 +#define USB_DEVICE_ID_ORTEK_WKB2000 0x2000 + #define USB_VENDOR_ID_PANJIT 0x134c #define USB_VENDOR_ID_PANTHERLORD 0x0810 @@ -372,6 +387,10 @@ #define USB_VENDOR_ID_SAITEK 0x06a3 #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 +#define USB_VENDOR_ID_QUANTA 0x0408 +#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH 0x3000 +#define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001 + #define USB_VENDOR_ID_SAMSUNG 0x0419 #define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001 @@ -383,16 +402,15 @@ #define USB_DEVICE_ID_SOUNDGRAPH_IMON_FIRST 0x0034 #define USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST 0x0046 +#define USB_VENDOR_ID_STANTUM 0x1f87 +#define USB_DEVICE_ID_MTP 0x0002 + #define USB_VENDOR_ID_SUN 0x0430 #define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab #define USB_VENDOR_ID_SUNPLUS 0x04fc #define USB_DEVICE_ID_SUNPLUS_WDESKTOP 0x05d8 -#define USB_VENDOR_ID_TENX 0x1130 -#define USB_DEVICE_ID_TENX_IBUDDY1 0x0001 -#define USB_DEVICE_ID_TENX_IBUDDY2 0x0002 - #define USB_VENDOR_ID_THRUSTMASTER 0x044f #define USB_VENDOR_ID_TOPMAX 0x0663 --- linux-2.6.32.orig/drivers/hid/usbhid/hid-quirks.c +++ linux-2.6.32/drivers/hid/usbhid/hid-quirks.c @@ -37,6 +37,7 @@ { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, { USB_VENDOR_ID_NATSU, USB_DEVICE_ID_NATSU_GAMEPAD, HID_QUIRK_BADPAD }, { USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD, HID_QUIRK_BADPAD }, + { USB_VENDOR_ID_NEXTWINDOW, USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN, HID_QUIRK_MULTI_INPUT}, { USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD }, { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD }, @@ -280,7 +281,7 @@ if (idVendor == USB_VENDOR_ID_NCR && idProduct >= USB_DEVICE_ID_NCR_FIRST && idProduct <= USB_DEVICE_ID_NCR_LAST) - return HID_QUIRK_NOGET; + return HID_QUIRK_NO_INIT_REPORTS; down_read(&dquirks_rwsem); bl_entry = usbhid_exists_dquirk(idVendor, idProduct); --- linux-2.6.32.orig/drivers/hid/usbhid/hid-core.c +++ linux-2.6.32/drivers/hid/usbhid/hid-core.c @@ -318,6 +318,7 @@ err_hid("usb_submit_urb(out) failed"); return -1; } + usbhid->last_out = jiffies; } else { /* * queue work to wake up the device. @@ -379,6 +380,7 @@ err_hid("usb_submit_urb(ctrl) failed"); return -1; } + usbhid->last_ctrl = jiffies; } else { /* * queue work to wake up the device. @@ -514,9 +516,20 @@ usbhid->out[usbhid->outhead].report = report; usbhid->outhead = head; - if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) + if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) { if (hid_submit_out(hid)) clear_bit(HID_OUT_RUNNING, &usbhid->iofl); + } else { + /* + * the queue is known to run + * but an earlier request may be stuck + * we may need to time out + * no race because this is called under + * spinlock + */ + if (time_after(jiffies, usbhid->last_out + HZ * 5)) + usb_unlink_urb(usbhid->urbout); + } return; } @@ -537,9 +550,20 @@ usbhid->ctrl[usbhid->ctrlhead].dir = dir; usbhid->ctrlhead = head; - if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) + if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) { if (hid_submit_ctrl(hid)) clear_bit(HID_CTRL_RUNNING, &usbhid->iofl); + } else { + /* + * the queue is known to run + * but an earlier request may be stuck + * we may need to time out + * no race because this is called under + * spinlock + */ + if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) + usb_unlink_urb(usbhid->urbctrl); + } } void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir) @@ -998,7 +1022,8 @@ usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma; usbhid->urbctrl->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP); - usbhid_init_reports(hid); + if (!(hid->quirks & HID_QUIRK_NO_INIT_REPORTS)) + usbhid_init_reports(hid); set_bit(HID_STARTED, &usbhid->iofl); --- linux-2.6.32.orig/drivers/hid/usbhid/usbhid.h +++ linux-2.6.32/drivers/hid/usbhid/usbhid.h @@ -80,12 +80,14 @@ unsigned char ctrlhead, ctrltail; /* Control fifo head & tail */ char *ctrlbuf; /* Control buffer */ dma_addr_t ctrlbuf_dma; /* Control buffer dma */ + unsigned long last_ctrl; /* record of last output for timeouts */ struct urb *urbout; /* Output URB */ struct hid_output_fifo out[HID_CONTROL_FIFO_SIZE]; /* Output pipe fifo */ unsigned char outhead, outtail; /* Output pipe fifo head & tail */ char *outbuf; /* Output buffer */ dma_addr_t outbuf_dma; /* Output buffer dma */ + unsigned long last_out; /* record of last output for timeouts */ spinlock_t lock; /* fifo spinlock */ unsigned long iofl; /* I/O flags (CTRL_RUNNING, OUT_RUNNING) */ --- linux-2.6.32.orig/drivers/mfd/wm8350-core.c +++ linux-2.6.32/drivers/mfd/wm8350-core.c @@ -134,8 +134,7 @@ wm8350->reg_cache[WM8350_SECURITY] == WM8350_UNLOCK_KEY) return 0; - if ((reg == WM8350_GPIO_CONFIGURATION_I_O) || - (reg >= WM8350_GPIO_FUNCTION_SELECT_1 && + if ((reg >= WM8350_GPIO_FUNCTION_SELECT_1 && reg <= WM8350_GPIO_FUNCTION_SELECT_4) || (reg >= WM8350_BATTERY_CHARGER_CONTROL_1 && reg <= WM8350_BATTERY_CHARGER_CONTROL_3)) --- linux-2.6.32.orig/kernel/sched_fair.c +++ linux-2.6.32/kernel/sched_fair.c @@ -35,12 +35,14 @@ * run vmstat and monitor the context-switches (cs) field) */ unsigned int sysctl_sched_latency = 5000000ULL; +unsigned int normalized_sysctl_sched_latency = 5000000ULL; /* * Minimal preemption granularity for CPU-bound tasks: * (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds) */ unsigned int sysctl_sched_min_granularity = 1000000ULL; +unsigned int normalized_sysctl_sched_min_granularity = 1000000ULL; /* * is kept at sysctl_sched_latency / sysctl_sched_min_granularity @@ -70,6 +72,7 @@ * have immediate wakeup/sleep latencies. */ unsigned int sysctl_sched_wakeup_granularity = 1000000UL; +unsigned int normalized_sysctl_sched_wakeup_granularity = 1000000UL; const_debug unsigned int sysctl_sched_migration_cost = 500000UL; @@ -1374,6 +1377,9 @@ rcu_read_lock(); for_each_domain(cpu, tmp) { + if (!(tmp->flags & SD_LOAD_BALANCE)) + continue; + /* * If power savings logic is enabled for a domain, see if we * are not overloaded, if so, don't balance wider. @@ -1398,11 +1404,38 @@ want_sd = 0; } - if (want_affine && (tmp->flags & SD_WAKE_AFFINE) && - cpumask_test_cpu(prev_cpu, sched_domain_span(tmp))) { + if (want_affine && (tmp->flags & SD_WAKE_AFFINE)) { + int candidate = -1, i; + + if (cpumask_test_cpu(prev_cpu, sched_domain_span(tmp))) + candidate = cpu; + + /* + * Check for an idle shared cache. + */ + if (tmp->flags & SD_PREFER_SIBLING) { + if (candidate == cpu) { + if (!cpu_rq(prev_cpu)->cfs.nr_running) + candidate = prev_cpu; + } + + if (candidate == -1 || candidate == cpu) { + for_each_cpu(i, sched_domain_span(tmp)) { + if (!cpumask_test_cpu(i, &p->cpus_allowed)) + continue; + if (!cpu_rq(i)->cfs.nr_running) { + candidate = i; + break; + } + } + } + } - affine_sd = tmp; - want_affine = 0; + if (candidate >= 0) { + affine_sd = tmp; + want_affine = 0; + cpu = candidate; + } } if (!want_sd && !want_affine) @@ -1850,6 +1883,17 @@ return 0; } + +static void rq_online_fair(struct rq *rq) +{ + update_sysctl(); +} + +static void rq_offline_fair(struct rq *rq) +{ + update_sysctl(); +} + #endif /* CONFIG_SMP */ /* @@ -1997,6 +2041,8 @@ .load_balance = load_balance_fair, .move_one_task = move_one_task_fair, + .rq_online = rq_online_fair, + .rq_offline = rq_offline_fair, #endif .set_curr_task = set_curr_task_fair, --- linux-2.6.32.orig/kernel/sysctl.c +++ linux-2.6.32/kernel/sysctl.c @@ -1345,6 +1345,7 @@ .strategy = &sysctl_jiffies, }, #endif +#ifdef CONFIG_MMU { .ctl_name = CTL_UNNUMBERED, .procname = "mmap_min_addr", @@ -1353,6 +1354,7 @@ .mode = 0644, .proc_handler = &mmap_min_addr_handler, }, +#endif #ifdef CONFIG_NUMA { .ctl_name = CTL_UNNUMBERED, @@ -1605,7 +1607,8 @@ .data = &show_unhandled_signals, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &zero, }, #endif { .ctl_name = 0 } --- linux-2.6.32.orig/kernel/acct.c +++ linux-2.6.32/kernel/acct.c @@ -536,7 +536,8 @@ do_div(elapsed, AHZ); ac.ac_btime = get_seconds() - elapsed; /* we really need to bite the bullet and change layout */ - current_uid_gid(&ac.ac_uid, &ac.ac_gid); + ac.ac_uid = orig_cred->uid; + ac.ac_gid = orig_cred->gid; #if ACCT_VERSION==2 ac.ac_ahz = AHZ; #endif --- linux-2.6.32.orig/kernel/signal.c +++ linux-2.6.32/kernel/signal.c @@ -939,7 +939,8 @@ for (i = 0; i < 16; i++) { unsigned char insn; - __get_user(insn, (unsigned char *)(regs->ip + i)); + if (get_user(insn, (unsigned char *)(regs->ip + i))) + break; printk("%02x ", insn); } } --- linux-2.6.32.orig/kernel/sysctl_check.c +++ linux-2.6.32/kernel/sysctl_check.c @@ -220,6 +220,7 @@ { NET_IPV4_CONF_PROMOTE_SECONDARIES, "promote_secondaries" }, { NET_IPV4_CONF_ARP_ACCEPT, "arp_accept" }, { NET_IPV4_CONF_ARP_NOTIFY, "arp_notify" }, + { NET_IPV4_CONF_SRC_VMARK, "src_valid_mark" }, {} }; --- linux-2.6.32.orig/kernel/cgroup.c +++ linux-2.6.32/kernel/cgroup.c @@ -2468,7 +2468,6 @@ /* make sure l doesn't vanish out from under us */ down_write(&l->mutex); mutex_unlock(&cgrp->pidlist_mutex); - l->use_count++; return l; } } --- linux-2.6.32.orig/kernel/cpuset.c +++ linux-2.6.32/kernel/cpuset.c @@ -873,7 +873,7 @@ if (retval < 0) return retval; - if (!cpumask_subset(trialcs->cpus_allowed, cpu_online_mask)) + if (!cpumask_subset(trialcs->cpus_allowed, cpu_active_mask)) return -EINVAL; } retval = validate_change(cs, trialcs); @@ -921,9 +921,6 @@ * call to guarantee_online_mems(), as we know no one is changing * our task's cpuset. * - * Hold callback_mutex around the two modifications of our tasks - * mems_allowed to synchronize with cpuset_mems_allowed(). - * * While the mm_struct we are migrating is typically from some * other task, the task_struct mems_allowed that we are hacking * is for our current task, which must allocate new pages for that @@ -1392,11 +1389,10 @@ if (cs == &top_cpuset) { cpumask_copy(cpus_attach, cpu_possible_mask); - to = node_possible_map; } else { guarantee_online_cpus(cs, cpus_attach); - guarantee_online_mems(cs, &to); } + guarantee_online_mems(cs, &to); /* do per-task migration stuff possibly for each in the threadgroup */ cpuset_attach_task(tsk, &to, cs); @@ -2011,7 +2007,7 @@ } /* Continue past cpusets with all cpus, mems online */ - if (cpumask_subset(cp->cpus_allowed, cpu_online_mask) && + if (cpumask_subset(cp->cpus_allowed, cpu_active_mask) && nodes_subset(cp->mems_allowed, node_states[N_HIGH_MEMORY])) continue; @@ -2020,7 +2016,7 @@ /* Remove offline cpus and mems from this cpuset. */ mutex_lock(&callback_mutex); cpumask_and(cp->cpus_allowed, cp->cpus_allowed, - cpu_online_mask); + cpu_active_mask); nodes_and(cp->mems_allowed, cp->mems_allowed, node_states[N_HIGH_MEMORY]); mutex_unlock(&callback_mutex); @@ -2058,8 +2054,10 @@ switch (phase) { case CPU_ONLINE: case CPU_ONLINE_FROZEN: - case CPU_DEAD: - case CPU_DEAD_FROZEN: + case CPU_DOWN_PREPARE: + case CPU_DOWN_PREPARE_FROZEN: + case CPU_DOWN_FAILED: + case CPU_DOWN_FAILED_FROZEN: break; default: @@ -2068,7 +2066,7 @@ cgroup_lock(); mutex_lock(&callback_mutex); - cpumask_copy(top_cpuset.cpus_allowed, cpu_online_mask); + cpumask_copy(top_cpuset.cpus_allowed, cpu_active_mask); mutex_unlock(&callback_mutex); scan_for_empty_cpusets(&top_cpuset); ndoms = generate_sched_domains(&doms, &attr); @@ -2089,15 +2087,23 @@ static int cpuset_track_online_nodes(struct notifier_block *self, unsigned long action, void *arg) { + nodemask_t oldmems; + cgroup_lock(); switch (action) { case MEM_ONLINE: - case MEM_OFFLINE: + oldmems = top_cpuset.mems_allowed; mutex_lock(&callback_mutex); top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; mutex_unlock(&callback_mutex); - if (action == MEM_OFFLINE) - scan_for_empty_cpusets(&top_cpuset); + update_tasks_nodemask(&top_cpuset, &oldmems, NULL); + break; + case MEM_OFFLINE: + /* + * needn't update top_cpuset.mems_allowed explicitly because + * scan_for_empty_cpusets() will update it. + */ + scan_for_empty_cpusets(&top_cpuset); break; default: break; @@ -2115,7 +2121,7 @@ void __init cpuset_init_smp(void) { - cpumask_copy(top_cpuset.cpus_allowed, cpu_online_mask); + cpumask_copy(top_cpuset.cpus_allowed, cpu_active_mask); top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; hotcpu_notifier(cpuset_track_online_cpus, 0); --- linux-2.6.32.orig/kernel/module.c +++ linux-2.6.32/kernel/module.c @@ -1030,11 +1030,23 @@ } #ifdef CONFIG_MODVERSIONS +/* If the arch applies (non-zero) relocations to kernel kcrctab, unapply it. */ +static unsigned long maybe_relocated(unsigned long crc, + const struct module *crc_owner) +{ +#ifdef ARCH_RELOCATES_KCRCTAB + if (crc_owner == NULL) + return crc - (unsigned long)reloc_start; +#endif + return crc; +} + static int check_version(Elf_Shdr *sechdrs, unsigned int versindex, const char *symname, struct module *mod, - const unsigned long *crc) + const unsigned long *crc, + const struct module *crc_owner) { unsigned int i, num_versions; struct modversion_info *versions; @@ -1055,10 +1067,10 @@ if (strcmp(versions[i].name, symname) != 0) continue; - if (versions[i].crc == *crc) + if (versions[i].crc == maybe_relocated(*crc, crc_owner)) return 1; DEBUGP("Found checksum %lX vs module %lX\n", - *crc, versions[i].crc); + maybe_relocated(*crc, crc_owner), versions[i].crc); goto bad_version; } @@ -1081,7 +1093,8 @@ if (!find_symbol(MODULE_SYMBOL_PREFIX "module_layout", NULL, &crc, true, false)) BUG(); - return check_version(sechdrs, versindex, "module_layout", mod, crc); + return check_version(sechdrs, versindex, "module_layout", mod, crc, + NULL); } /* First part is kernel version, which we ignore if module has crcs. */ @@ -1099,7 +1112,8 @@ unsigned int versindex, const char *symname, struct module *mod, - const unsigned long *crc) + const unsigned long *crc, + const struct module *crc_owner) { return 1; } @@ -1134,8 +1148,8 @@ /* use_module can fail due to OOM, or module initialization or unloading */ if (sym) { - if (!check_version(sechdrs, versindex, name, mod, crc) || - !use_module(mod, owner)) + if (!check_version(sechdrs, versindex, name, mod, crc, owner) + || !use_module(mod, owner)) sym = NULL; } return sym; @@ -1146,6 +1160,12 @@ * J. Corbet */ #if defined(CONFIG_KALLSYMS) && defined(CONFIG_SYSFS) + +static inline bool sect_empty(const Elf_Shdr *sect) +{ + return !(sect->sh_flags & SHF_ALLOC) || sect->sh_size == 0; +} + struct module_sect_attr { struct module_attribute mattr; @@ -1187,8 +1207,7 @@ /* Count loaded sections and allocate structures */ for (i = 0; i < nsect; i++) - if (sechdrs[i].sh_flags & SHF_ALLOC - && sechdrs[i].sh_size) + if (!sect_empty(&sechdrs[i])) nloaded++; size[0] = ALIGN(sizeof(*sect_attrs) + nloaded * sizeof(sect_attrs->attrs[0]), @@ -1206,9 +1225,7 @@ sattr = §_attrs->attrs[0]; gattr = §_attrs->grp.attrs[0]; for (i = 0; i < nsect; i++) { - if (! (sechdrs[i].sh_flags & SHF_ALLOC)) - continue; - if (!sechdrs[i].sh_size) + if (sect_empty(&sechdrs[i])) continue; sattr->address = sechdrs[i].sh_addr; sattr->name = kstrdup(secstrings + sechdrs[i].sh_name, @@ -1292,7 +1309,7 @@ /* Count notes sections and allocate structures. */ notes = 0; for (i = 0; i < nsect; i++) - if ((sechdrs[i].sh_flags & SHF_ALLOC) && + if (!sect_empty(&sechdrs[i]) && (sechdrs[i].sh_type == SHT_NOTE)) ++notes; @@ -1308,7 +1325,7 @@ notes_attrs->notes = notes; nattr = ¬es_attrs->attrs[0]; for (loaded = i = 0; i < nsect; ++i) { - if (!(sechdrs[i].sh_flags & SHF_ALLOC)) + if (sect_empty(&sechdrs[i])) continue; if (sechdrs[i].sh_type == SHT_NOTE) { nattr->attr.name = mod->sect_attrs->attrs[loaded].name; --- linux-2.6.32.orig/kernel/audit_tree.c +++ linux-2.6.32/kernel/audit_tree.c @@ -277,7 +277,7 @@ owner->root = NULL; } - for (i = j = 0; i < size; i++, j++) { + for (i = j = 0; j <= size; i++, j++) { struct audit_tree *s; if (&chunk->owners[j] == p) { list_del_init(&p->list); @@ -290,7 +290,7 @@ if (!s) /* result of earlier fallback */ continue; get_tree(s); - list_replace_init(&chunk->owners[i].list, &new->owners[j].list); + list_replace_init(&chunk->owners[j].list, &new->owners[i].list); } list_replace_rcu(&chunk->hash, &new->hash); @@ -373,15 +373,17 @@ for (n = 0; n < old->count; n++) { if (old->owners[n].owner == tree) { spin_unlock(&hash_lock); - put_inotify_watch(watch); + put_inotify_watch(&old->watch); return 0; } } spin_unlock(&hash_lock); chunk = alloc_chunk(old->count + 1); - if (!chunk) + if (!chunk) { + put_inotify_watch(&old->watch); return -ENOMEM; + } mutex_lock(&inode->inotify_mutex); if (inotify_clone_watch(&old->watch, &chunk->watch) < 0) { @@ -425,7 +427,8 @@ spin_unlock(&hash_lock); inotify_evict_watch(&old->watch); mutex_unlock(&inode->inotify_mutex); - put_inotify_watch(&old->watch); + put_inotify_watch(&old->watch); /* pair to inotify_find_watch */ + put_inotify_watch(&old->watch); /* and kill it */ return 0; } --- linux-2.6.32.orig/kernel/fork.c +++ linux-2.6.32/kernel/fork.c @@ -1123,8 +1123,6 @@ p->bts = NULL; - p->stack_start = stack_start; - /* Perform scheduler related setup. Assign this task to a CPU. */ sched_fork(p, clone_flags); --- linux-2.6.32.orig/kernel/perf_event.c +++ linux-2.6.32/kernel/perf_event.c @@ -1359,6 +1359,9 @@ if (event->state != PERF_EVENT_STATE_ACTIVE) continue; + if (event->cpu != -1 && event->cpu != smp_processor_id()) + continue; + hwc = &event->hw; interrupts = hwc->interrupts; @@ -1583,7 +1586,7 @@ if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN)) return ERR_PTR(-EACCES); - if (cpu < 0 || cpu > num_possible_cpus()) + if (cpu < 0 || cpu >= nr_cpumask_bits) return ERR_PTR(-EINVAL); /* @@ -2174,6 +2177,7 @@ perf_mmap_free_page((unsigned long)data->user_page); for (i = 0; i < data->nr_pages; i++) perf_mmap_free_page((unsigned long)data->data_pages[i]); + kfree(data); } #else @@ -2214,6 +2218,7 @@ perf_mmap_unmark_page(base + (i * PAGE_SIZE)); vfree(base); + kfree(data); } static void perf_mmap_data_free(struct perf_mmap_data *data) @@ -2319,7 +2324,6 @@ data = container_of(rcu_head, struct perf_mmap_data, rcu_head); perf_mmap_data_free(data); - kfree(data); } static void perf_mmap_data_release(struct perf_event *event) @@ -3225,6 +3229,12 @@ static int perf_event_task_match(struct perf_event *event) { + if (event->state != PERF_EVENT_STATE_ACTIVE) + return 0; + + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + if (event->attr.comm || event->attr.mmap || event->attr.task) return 1; @@ -3254,13 +3264,13 @@ cpuctx = &get_cpu_var(perf_cpu_context); perf_event_task_ctx(&cpuctx->ctx, task_event); - put_cpu_var(perf_cpu_context); rcu_read_lock(); if (!ctx) ctx = rcu_dereference(task_event->task->perf_event_ctxp); if (ctx) perf_event_task_ctx(ctx, task_event); + put_cpu_var(perf_cpu_context); rcu_read_unlock(); } @@ -3337,6 +3347,12 @@ static int perf_event_comm_match(struct perf_event *event) { + if (event->state != PERF_EVENT_STATE_ACTIVE) + return 0; + + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + if (event->attr.comm) return 1; @@ -3377,7 +3393,6 @@ cpuctx = &get_cpu_var(perf_cpu_context); perf_event_comm_ctx(&cpuctx->ctx, comm_event); - put_cpu_var(perf_cpu_context); rcu_read_lock(); /* @@ -3387,6 +3402,7 @@ ctx = rcu_dereference(current->perf_event_ctxp); if (ctx) perf_event_comm_ctx(ctx, comm_event); + put_cpu_var(perf_cpu_context); rcu_read_unlock(); } @@ -3461,6 +3477,12 @@ static int perf_event_mmap_match(struct perf_event *event, struct perf_mmap_event *mmap_event) { + if (event->state != PERF_EVENT_STATE_ACTIVE) + return 0; + + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + if (event->attr.mmap) return 1; @@ -3538,7 +3560,6 @@ cpuctx = &get_cpu_var(perf_cpu_context); perf_event_mmap_ctx(&cpuctx->ctx, mmap_event); - put_cpu_var(perf_cpu_context); rcu_read_lock(); /* @@ -3548,6 +3569,7 @@ ctx = rcu_dereference(current->perf_event_ctxp); if (ctx) perf_event_mmap_ctx(ctx, mmap_event); + put_cpu_var(perf_cpu_context); rcu_read_unlock(); kfree(buf); @@ -3810,6 +3832,9 @@ enum perf_type_id type, u32 event_id, struct pt_regs *regs) { + if (event->cpu != -1 && event->cpu != smp_processor_id()) + return 0; + if (!perf_swevent_is_counting(event)) return 0; @@ -3949,6 +3974,7 @@ event->pmu->read(event); data.addr = 0; + data.period = event->hw.last_period; regs = get_irq_regs(); /* * In case we exclude kernel IPs or are somehow not in interrupt @@ -4583,7 +4609,7 @@ err_free_put_context: if (err < 0) - kfree(event); + free_event(event); err_put_context: if (err < 0) @@ -4955,12 +4981,22 @@ return ret; } +static void __init perf_event_init_all_cpus(void) +{ + int cpu; + struct perf_cpu_context *cpuctx; + + for_each_possible_cpu(cpu) { + cpuctx = &per_cpu(perf_cpu_context, cpu); + __perf_event_init_context(&cpuctx->ctx, NULL); + } +} + static void __cpuinit perf_event_init_cpu(int cpu) { struct perf_cpu_context *cpuctx; cpuctx = &per_cpu(perf_cpu_context, cpu); - __perf_event_init_context(&cpuctx->ctx, NULL); spin_lock(&perf_resource_lock); cpuctx->max_pertask = perf_max_events - perf_reserved_percpu; @@ -5031,6 +5067,7 @@ void __init perf_event_init(void) { + perf_event_init_all_cpus(); perf_cpu_notify(&perf_cpu_nb, (unsigned long)CPU_UP_PREPARE, (void *)(long)smp_processor_id()); perf_cpu_notify(&perf_cpu_nb, (unsigned long)CPU_ONLINE, --- linux-2.6.32.orig/kernel/profile.c +++ linux-2.6.32/kernel/profile.c @@ -127,8 +127,10 @@ return 0; prof_buffer = vmalloc(buffer_bytes); - if (prof_buffer) + if (prof_buffer) { + memset(prof_buffer, 0, buffer_bytes); return 0; + } free_cpumask_var(prof_cpu_mask); return -ENOMEM; --- linux-2.6.32.orig/kernel/hrtimer.c +++ linux-2.6.32/kernel/hrtimer.c @@ -557,7 +557,7 @@ static int hrtimer_reprogram(struct hrtimer *timer, struct hrtimer_clock_base *base) { - ktime_t *expires_next = &__get_cpu_var(hrtimer_bases).expires_next; + struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); ktime_t expires = ktime_sub(hrtimer_get_expires(timer), base->offset); int res; @@ -582,7 +582,16 @@ if (expires.tv64 < 0) return -ETIME; - if (expires.tv64 >= expires_next->tv64) + if (expires.tv64 >= cpu_base->expires_next.tv64) + return 0; + + /* + * If a hang was detected in the last timer interrupt then we + * do not schedule a timer which is earlier than the expiry + * which we enforced in the hang detection. We want the system + * to make progress. + */ + if (cpu_base->hang_detected) return 0; /* @@ -590,7 +599,7 @@ */ res = tick_program_event(expires, 0); if (!IS_ERR_VALUE(res)) - *expires_next = expires; + cpu_base->expires_next = expires; return res; } @@ -1217,29 +1226,6 @@ #ifdef CONFIG_HIGH_RES_TIMERS -static int force_clock_reprogram; - -/* - * After 5 iteration's attempts, we consider that hrtimer_interrupt() - * is hanging, which could happen with something that slows the interrupt - * such as the tracing. Then we force the clock reprogramming for each future - * hrtimer interrupts to avoid infinite loops and use the min_delta_ns - * threshold that we will overwrite. - * The next tick event will be scheduled to 3 times we currently spend on - * hrtimer_interrupt(). This gives a good compromise, the cpus will spend - * 1/4 of their time to process the hrtimer interrupts. This is enough to - * let it running without serious starvation. - */ - -static inline void -hrtimer_interrupt_hanging(struct clock_event_device *dev, - ktime_t try_time) -{ - force_clock_reprogram = 1; - dev->min_delta_ns = (unsigned long)try_time.tv64 * 3; - printk(KERN_WARNING "hrtimer: interrupt too slow, " - "forcing clock min delta to %lu ns\n", dev->min_delta_ns); -} /* * High resolution timer interrupt * Called with interrupts disabled @@ -1248,21 +1234,15 @@ { struct hrtimer_cpu_base *cpu_base = &__get_cpu_var(hrtimer_bases); struct hrtimer_clock_base *base; - ktime_t expires_next, now; - int nr_retries = 0; - int i; + ktime_t expires_next, now, entry_time, delta; + int i, retries = 0; BUG_ON(!cpu_base->hres_active); cpu_base->nr_events++; dev->next_event.tv64 = KTIME_MAX; - retry: - /* 5 retries is enough to notice a hang */ - if (!(++nr_retries % 5)) - hrtimer_interrupt_hanging(dev, ktime_sub(ktime_get(), now)); - - now = ktime_get(); - + entry_time = now = ktime_get(); +retry: expires_next.tv64 = KTIME_MAX; spin_lock(&cpu_base->lock); @@ -1324,10 +1304,48 @@ spin_unlock(&cpu_base->lock); /* Reprogramming necessary ? */ - if (expires_next.tv64 != KTIME_MAX) { - if (tick_program_event(expires_next, force_clock_reprogram)) - goto retry; + if (expires_next.tv64 == KTIME_MAX || + !tick_program_event(expires_next, 0)) { + cpu_base->hang_detected = 0; + return; } + + /* + * The next timer was already expired due to: + * - tracing + * - long lasting callbacks + * - being scheduled away when running in a VM + * + * We need to prevent that we loop forever in the hrtimer + * interrupt routine. We give it 3 attempts to avoid + * overreacting on some spurious event. + */ + now = ktime_get(); + cpu_base->nr_retries++; + if (++retries < 3) + goto retry; + /* + * Give the system a chance to do something else than looping + * here. We stored the entry time, so we know exactly how long + * we spent here. We schedule the next event this amount of + * time away. + */ + cpu_base->nr_hangs++; + cpu_base->hang_detected = 1; + delta = ktime_sub(now, entry_time); + if (delta.tv64 > cpu_base->max_hang_time.tv64) + cpu_base->max_hang_time = delta; + /* + * Limit it to a sensible value as we enforce a longer + * delay. Give the CPU at least 100ms to catch up. + */ + if (delta.tv64 > 100 * NSEC_PER_MSEC) + expires_next = ktime_add_ns(now, 100 * NSEC_PER_MSEC); + else + expires_next = ktime_add(now, delta); + tick_program_event(expires_next, 1); + printk_once(KERN_WARNING "hrtimer: interrupt took %llu ns\n", + ktime_to_ns(delta)); } /* --- linux-2.6.32.orig/kernel/sched_clock.c +++ linux-2.6.32/kernel/sched_clock.c @@ -236,6 +236,18 @@ } EXPORT_SYMBOL_GPL(sched_clock_idle_wakeup_event); +unsigned long long cpu_clock(int cpu) +{ + unsigned long long clock; + unsigned long flags; + + local_irq_save(flags); + clock = sched_clock_cpu(cpu); + local_irq_restore(flags); + + return clock; +} + #else /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ void sched_clock_init(void) @@ -251,17 +263,12 @@ return sched_clock(); } -#endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ unsigned long long cpu_clock(int cpu) { - unsigned long long clock; - unsigned long flags; + return sched_clock_cpu(cpu); +} - local_irq_save(flags); - clock = sched_clock_cpu(cpu); - local_irq_restore(flags); +#endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */ - return clock; -} EXPORT_SYMBOL_GPL(cpu_clock); --- linux-2.6.32.orig/kernel/futex.c +++ linux-2.6.32/kernel/futex.c @@ -203,8 +203,6 @@ * @uaddr: virtual address of the futex * @fshared: 0 for a PROCESS_PRIVATE futex, 1 for PROCESS_SHARED * @key: address where result is stored. - * @rw: mapping needs to be read/write (values: VERIFY_READ, - * VERIFY_WRITE) * * Returns a negative error code or 0 * The key words are stored in *key on success. @@ -216,7 +214,7 @@ * lock_page() might sleep, the caller should not hold a spinlock. */ static int -get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw) +get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key) { unsigned long address = (unsigned long)uaddr; struct mm_struct *mm = current->mm; @@ -239,7 +237,7 @@ * but access_ok() should be faster than find_vma() */ if (!fshared) { - if (unlikely(!access_ok(rw, uaddr, sizeof(u32)))) + if (unlikely(!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))) return -EFAULT; key->private.mm = mm; key->private.address = address; @@ -248,7 +246,7 @@ } again: - err = get_user_pages_fast(address, 1, rw == VERIFY_WRITE, &page); + err = get_user_pages_fast(address, 1, 1, &page); if (err < 0) return err; @@ -304,8 +302,14 @@ */ static int fault_in_user_writeable(u32 __user *uaddr) { - int ret = get_user_pages(current, current->mm, (unsigned long)uaddr, - 1, 1, 0, NULL, NULL); + struct mm_struct *mm = current->mm; + int ret; + + down_read(&mm->mmap_sem); + ret = get_user_pages(current, mm, (unsigned long)uaddr, + 1, 1, 0, NULL, NULL); + up_read(&mm->mmap_sem); + return ret < 0 ? ret : 0; } @@ -526,8 +530,25 @@ return -EINVAL; WARN_ON(!atomic_read(&pi_state->refcount)); - WARN_ON(pid && pi_state->owner && - pi_state->owner->pid != pid); + + /* + * When pi_state->owner is NULL then the owner died + * and another waiter is on the fly. pi_state->owner + * is fixed up by the task which acquires + * pi_state->rt_mutex. + * + * We do not check for pid == 0 which can happen when + * the owner died and robust_list_exit() cleared the + * TID. + */ + if (pid && pi_state->owner) { + /* + * Bail out if user space manipulated the + * futex value. + */ + if (pid != task_pid_vnr(pi_state->owner)) + return -EINVAL; + } atomic_inc(&pi_state->refcount); *ps = pi_state; @@ -754,6 +775,13 @@ if (!pi_state) return -EINVAL; + /* + * If current does not own the pi_state then the futex is + * inconsistent and user space fiddled with the futex value. + */ + if (pi_state->owner != current) + return -EINVAL; + spin_lock(&pi_state->pi_mutex.wait_lock); new_owner = rt_mutex_next_owner(&pi_state->pi_mutex); @@ -861,7 +889,7 @@ if (!bitset) return -EINVAL; - ret = get_futex_key(uaddr, fshared, &key, VERIFY_READ); + ret = get_futex_key(uaddr, fshared, &key); if (unlikely(ret != 0)) goto out; @@ -907,10 +935,10 @@ int ret, op_ret; retry: - ret = get_futex_key(uaddr1, fshared, &key1, VERIFY_READ); + ret = get_futex_key(uaddr1, fshared, &key1); if (unlikely(ret != 0)) goto out; - ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE); + ret = get_futex_key(uaddr2, fshared, &key2); if (unlikely(ret != 0)) goto out_put_key1; @@ -1169,11 +1197,10 @@ pi_state = NULL; } - ret = get_futex_key(uaddr1, fshared, &key1, VERIFY_READ); + ret = get_futex_key(uaddr1, fshared, &key1); if (unlikely(ret != 0)) goto out; - ret = get_futex_key(uaddr2, fshared, &key2, - requeue_pi ? VERIFY_WRITE : VERIFY_READ); + ret = get_futex_key(uaddr2, fshared, &key2); if (unlikely(ret != 0)) goto out_put_key1; @@ -1732,7 +1759,7 @@ */ retry: q->key = FUTEX_KEY_INIT; - ret = get_futex_key(uaddr, fshared, &q->key, VERIFY_READ); + ret = get_futex_key(uaddr, fshared, &q->key); if (unlikely(ret != 0)) return ret; @@ -1898,7 +1925,7 @@ q.requeue_pi_key = NULL; retry: q.key = FUTEX_KEY_INIT; - ret = get_futex_key(uaddr, fshared, &q.key, VERIFY_WRITE); + ret = get_futex_key(uaddr, fshared, &q.key); if (unlikely(ret != 0)) goto out; @@ -1968,7 +1995,7 @@ /* Unqueue and drop the lock */ unqueue_me_pi(&q); - goto out; + goto out_put_key; out_unlock_put_key: queue_unlock(&q, hb); @@ -2017,7 +2044,7 @@ if ((uval & FUTEX_TID_MASK) != task_pid_vnr(current)) return -EPERM; - ret = get_futex_key(uaddr, fshared, &key, VERIFY_WRITE); + ret = get_futex_key(uaddr, fshared, &key); if (unlikely(ret != 0)) goto out; @@ -2209,7 +2236,7 @@ rt_waiter.task = NULL; key2 = FUTEX_KEY_INIT; - ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE); + ret = get_futex_key(uaddr2, fshared, &key2); if (unlikely(ret != 0)) goto out; --- linux-2.6.32.orig/kernel/rcutree.c +++ linux-2.6.32/kernel/rcutree.c @@ -176,9 +176,29 @@ return &rsp->node[0]; } +/* + * Record the specified "completed" value, which is later used to validate + * dynticks counter manipulations and CPU-offline checks. Specify + * "rsp->completed - 1" to unconditionally invalidate any future dynticks + * manipulations and CPU-offline checks. Such invalidation is useful at + * the beginning of a grace period. + */ +static void dyntick_record_completed(struct rcu_state *rsp, long comp) +{ + rsp->dynticks_completed = comp; +} + #ifdef CONFIG_SMP /* + * Recall the previously recorded value of the completion for dynticks. + */ +static long dyntick_recall_completed(struct rcu_state *rsp) +{ + return rsp->dynticks_completed; +} + +/* * If the specified CPU is offline, tell the caller that it is in * a quiescent state. Otherwise, whack it with a reschedule IPI. * Grace periods can end up waiting on an offline CPU when that @@ -335,28 +355,9 @@ set_need_resched(); } -/* - * Record the specified "completed" value, which is later used to validate - * dynticks counter manipulations. Specify "rsp->completed - 1" to - * unconditionally invalidate any future dynticks manipulations (which is - * useful at the beginning of a grace period). - */ -static void dyntick_record_completed(struct rcu_state *rsp, long comp) -{ - rsp->dynticks_completed = comp; -} - #ifdef CONFIG_SMP /* - * Recall the previously recorded value of the completion for dynticks. - */ -static long dyntick_recall_completed(struct rcu_state *rsp) -{ - return rsp->dynticks_completed; -} - -/* * Snapshot the specified CPU's dynticks counter so that we can later * credit them with an implicit quiescent state. Return 1 if this CPU * is in dynticks idle mode, which is an extended quiescent state. @@ -419,24 +420,8 @@ #else /* #ifdef CONFIG_NO_HZ */ -static void dyntick_record_completed(struct rcu_state *rsp, long comp) -{ -} - #ifdef CONFIG_SMP -/* - * If there are no dynticks, then the only way that a CPU can passively - * be in a quiescent state is to be offline. Unlike dynticks idle, which - * is a point in time during the prior (already finished) grace period, - * an offline CPU is always in a quiescent state, and thus can be - * unconditionally applied. So just return the current value of completed. - */ -static long dyntick_recall_completed(struct rcu_state *rsp) -{ - return rsp->completed; -} - static int dyntick_save_progress_counter(struct rcu_data *rdp) { return 0; @@ -553,13 +538,33 @@ /* * Update CPU-local rcu_data state to record the newly noticed grace period. * This is used both when we started the grace period and when we notice - * that someone else started the grace period. - */ + * that someone else started the grace period. The caller must hold the + * ->lock of the leaf rcu_node structure corresponding to the current CPU, + * and must have irqs disabled. + */ +static void __note_new_gpnum(struct rcu_state *rsp, struct rcu_node *rnp, struct rcu_data *rdp) +{ + if (rdp->gpnum != rnp->gpnum) { + rdp->qs_pending = 1; + rdp->passed_quiesc = 0; + rdp->gpnum = rnp->gpnum; + } +} + static void note_new_gpnum(struct rcu_state *rsp, struct rcu_data *rdp) { - rdp->qs_pending = 1; - rdp->passed_quiesc = 0; - rdp->gpnum = rsp->gpnum; + unsigned long flags; + struct rcu_node *rnp; + + local_irq_save(flags); + rnp = rdp->mynode; + if (rdp->gpnum == ACCESS_ONCE(rnp->gpnum) || /* outside lock. */ + !spin_trylock(&rnp->lock)) { /* irqs already off, retry later. */ + local_irq_restore(flags); + return; + } + __note_new_gpnum(rsp, rnp, rdp); + spin_unlock_irqrestore(&rnp->lock, flags); } /* @@ -583,6 +588,79 @@ } /* + * Advance this CPU's callbacks, but only if the current grace period + * has ended. This may be called only from the CPU to whom the rdp + * belongs. In addition, the corresponding leaf rcu_node structure's + * ->lock must be held by the caller, with irqs disabled. + */ +static void +__rcu_process_gp_end(struct rcu_state *rsp, struct rcu_node *rnp, struct rcu_data *rdp) +{ + /* Did another grace period end? */ + if (rdp->completed != rnp->completed) { + + /* Advance callbacks. No harm if list empty. */ + rdp->nxttail[RCU_DONE_TAIL] = rdp->nxttail[RCU_WAIT_TAIL]; + rdp->nxttail[RCU_WAIT_TAIL] = rdp->nxttail[RCU_NEXT_READY_TAIL]; + rdp->nxttail[RCU_NEXT_READY_TAIL] = rdp->nxttail[RCU_NEXT_TAIL]; + + /* Remember that we saw this grace-period completion. */ + rdp->completed = rnp->completed; + } +} + +/* + * Advance this CPU's callbacks, but only if the current grace period + * has ended. This may be called only from the CPU to whom the rdp + * belongs. + */ +static void +rcu_process_gp_end(struct rcu_state *rsp, struct rcu_data *rdp) +{ + unsigned long flags; + struct rcu_node *rnp; + + local_irq_save(flags); + rnp = rdp->mynode; + if (rdp->completed == ACCESS_ONCE(rnp->completed) || /* outside lock. */ + !spin_trylock(&rnp->lock)) { /* irqs already off, retry later. */ + local_irq_restore(flags); + return; + } + __rcu_process_gp_end(rsp, rnp, rdp); + spin_unlock_irqrestore(&rnp->lock, flags); +} + +/* + * Do per-CPU grace-period initialization for running CPU. The caller + * must hold the lock of the leaf rcu_node structure corresponding to + * this CPU. + */ +static void +rcu_start_gp_per_cpu(struct rcu_state *rsp, struct rcu_node *rnp, struct rcu_data *rdp) +{ + /* Prior grace period ended, so advance callbacks for current CPU. */ + __rcu_process_gp_end(rsp, rnp, rdp); + + /* + * Because this CPU just now started the new grace period, we know + * that all of its callbacks will be covered by this upcoming grace + * period, even the ones that were registered arbitrarily recently. + * Therefore, advance all outstanding callbacks to RCU_WAIT_TAIL. + * + * Other CPUs cannot be sure exactly when the grace period started. + * Therefore, their recently registered callbacks must pass through + * an additional RCU_NEXT_READY stage, so that they will be handled + * by the next RCU grace period. + */ + rdp->nxttail[RCU_NEXT_READY_TAIL] = rdp->nxttail[RCU_NEXT_TAIL]; + rdp->nxttail[RCU_WAIT_TAIL] = rdp->nxttail[RCU_NEXT_TAIL]; + + /* Set state so that this CPU will detect the next quiescent state. */ + __note_new_gpnum(rsp, rnp, rdp); +} + +/* * Start a new RCU grace period if warranted, re-initializing the hierarchy * in preparation for detecting the next grace period. The caller must hold * the root node's ->lock, which is released before return. Hard irqs must @@ -607,28 +685,15 @@ rsp->jiffies_force_qs = jiffies + RCU_JIFFIES_TILL_FORCE_QS; record_gp_stall_check_time(rsp); dyntick_record_completed(rsp, rsp->completed - 1); - note_new_gpnum(rsp, rdp); - - /* - * Because this CPU just now started the new grace period, we know - * that all of its callbacks will be covered by this upcoming grace - * period, even the ones that were registered arbitrarily recently. - * Therefore, advance all outstanding callbacks to RCU_WAIT_TAIL. - * - * Other CPUs cannot be sure exactly when the grace period started. - * Therefore, their recently registered callbacks must pass through - * an additional RCU_NEXT_READY stage, so that they will be handled - * by the next RCU grace period. - */ - rdp->nxttail[RCU_NEXT_READY_TAIL] = rdp->nxttail[RCU_NEXT_TAIL]; - rdp->nxttail[RCU_WAIT_TAIL] = rdp->nxttail[RCU_NEXT_TAIL]; /* Special-case the common single-level case. */ if (NUM_RCU_NODES == 1) { rcu_preempt_check_blocked_tasks(rnp); rnp->qsmask = rnp->qsmaskinit; rnp->gpnum = rsp->gpnum; + rnp->completed = rsp->completed; rsp->signaled = RCU_SIGNAL_INIT; /* force_quiescent_state OK. */ + rcu_start_gp_per_cpu(rsp, rnp, rdp); spin_unlock_irqrestore(&rnp->lock, flags); return; } @@ -661,6 +726,9 @@ rcu_preempt_check_blocked_tasks(rnp); rnp->qsmask = rnp->qsmaskinit; rnp->gpnum = rsp->gpnum; + rnp->completed = rsp->completed; + if (rnp == rdp->mynode) + rcu_start_gp_per_cpu(rsp, rnp, rdp); spin_unlock(&rnp->lock); /* irqs remain disabled. */ } @@ -672,34 +740,6 @@ } /* - * Advance this CPU's callbacks, but only if the current grace period - * has ended. This may be called only from the CPU to whom the rdp - * belongs. - */ -static void -rcu_process_gp_end(struct rcu_state *rsp, struct rcu_data *rdp) -{ - long completed_snap; - unsigned long flags; - - local_irq_save(flags); - completed_snap = ACCESS_ONCE(rsp->completed); /* outside of lock. */ - - /* Did another grace period end? */ - if (rdp->completed != completed_snap) { - - /* Advance callbacks. No harm if list empty. */ - rdp->nxttail[RCU_DONE_TAIL] = rdp->nxttail[RCU_WAIT_TAIL]; - rdp->nxttail[RCU_WAIT_TAIL] = rdp->nxttail[RCU_NEXT_READY_TAIL]; - rdp->nxttail[RCU_NEXT_READY_TAIL] = rdp->nxttail[RCU_NEXT_TAIL]; - - /* Remember that we saw this grace-period completion. */ - rdp->completed = completed_snap; - } - local_irq_restore(flags); -} - -/* * Clean up after the prior grace period and let rcu_start_gp() start up * the next grace period if one is needed. Note that the caller must * hold rnp->lock, as required by rcu_start_gp(), which will release it. @@ -710,7 +750,6 @@ WARN_ON_ONCE(!rcu_gp_in_progress(rsp)); rsp->completed = rsp->gpnum; rsp->signaled = RCU_GP_IDLE; - rcu_process_gp_end(rsp, rsp->rda[smp_processor_id()]); rcu_start_gp(rsp, flags); /* releases root node's rnp->lock. */ } @@ -1144,6 +1183,7 @@ long lastcomp; struct rcu_node *rnp = rcu_get_root(rsp); u8 signaled; + u8 forcenow; if (!rcu_gp_in_progress(rsp)) return; /* No grace period in progress, nothing to force. */ @@ -1180,16 +1220,23 @@ if (rcu_process_dyntick(rsp, lastcomp, dyntick_save_progress_counter)) goto unlock_ret; + /* fall into next case. */ + + case RCU_SAVE_COMPLETED: /* Update state, record completion counter. */ + forcenow = 0; spin_lock(&rnp->lock); if (lastcomp == rsp->completed && - rsp->signaled == RCU_SAVE_DYNTICK) { + rsp->signaled == signaled) { rsp->signaled = RCU_FORCE_QS; dyntick_record_completed(rsp, lastcomp); + forcenow = signaled == RCU_SAVE_COMPLETED; } spin_unlock(&rnp->lock); - break; + if (!forcenow) + break; + /* fall into next case. */ case RCU_FORCE_QS: @@ -1544,21 +1591,16 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp, int preemptable) { unsigned long flags; - long lastcomp; unsigned long mask; struct rcu_data *rdp = rsp->rda[cpu]; struct rcu_node *rnp = rcu_get_root(rsp); /* Set up local state, ensuring consistent view of global state. */ spin_lock_irqsave(&rnp->lock, flags); - lastcomp = rsp->completed; - rdp->completed = lastcomp; - rdp->gpnum = lastcomp; rdp->passed_quiesc = 0; /* We could be racing with new GP, */ rdp->qs_pending = 1; /* so set up to respond to current GP. */ rdp->beenonline = 1; /* We have now been online. */ rdp->preemptable = preemptable; - rdp->passed_quiesc_completed = lastcomp - 1; rdp->qlen_last_fqs_check = 0; rdp->n_force_qs_snap = rsp->n_force_qs; rdp->blimit = blimit; @@ -1580,6 +1622,11 @@ spin_lock(&rnp->lock); /* irqs already disabled. */ rnp->qsmaskinit |= mask; mask = rnp->grpmask; + if (rnp == rdp->mynode) { + rdp->gpnum = rnp->completed; /* if GP in progress... */ + rdp->completed = rnp->completed; + rdp->passed_quiesc_completed = rnp->completed - 1; + } spin_unlock(&rnp->lock); /* irqs already disabled. */ rnp = rnp->parent; } while (rnp != NULL && !(rnp->qsmaskinit & mask)); --- linux-2.6.32.orig/kernel/rcutree_plugin.h +++ linux-2.6.32/kernel/rcutree_plugin.h @@ -33,7 +33,7 @@ /* * Tell them what RCU they are running. */ -static inline void rcu_bootup_announce(void) +static void rcu_bootup_announce(void) { printk(KERN_INFO "Experimental preemptable hierarchical RCU implementation.\n"); @@ -481,7 +481,7 @@ /* * Tell them what RCU they are running. */ -static inline void rcu_bootup_announce(void) +static void rcu_bootup_announce(void) { printk(KERN_INFO "Hierarchical RCU implementation.\n"); } --- linux-2.6.32.orig/kernel/softlockup.c +++ linux-2.6.32/kernel/softlockup.c @@ -140,11 +140,11 @@ * Wake up the high-prio watchdog task twice per * threshold timespan. */ - if (now > touch_timestamp + softlockup_thresh/2) + if (time_after(now - softlockup_thresh/2, touch_timestamp)) wake_up_process(per_cpu(watchdog_task, this_cpu)); /* Warn about unreasonable delays: */ - if (now <= (touch_timestamp + softlockup_thresh)) + if (time_before_eq(now - softlockup_thresh, touch_timestamp)) return; per_cpu(print_timestamp, this_cpu) = touch_timestamp; --- linux-2.6.32.orig/kernel/cpu.c +++ linux-2.6.32/kernel/cpu.c @@ -212,6 +212,8 @@ err = __raw_notifier_call_chain(&cpu_chain, CPU_DOWN_PREPARE | mod, hcpu, -1, &nr_calls); if (err == NOTIFY_BAD) { + set_cpu_active(cpu, true); + nr_calls--; __raw_notifier_call_chain(&cpu_chain, CPU_DOWN_FAILED | mod, hcpu, nr_calls, NULL); @@ -223,11 +225,11 @@ /* Ensure that we are not runnable on dying cpu */ cpumask_copy(old_allowed, ¤t->cpus_allowed); - set_cpus_allowed_ptr(current, - cpumask_of(cpumask_any_but(cpu_online_mask, cpu))); + set_cpus_allowed_ptr(current, cpu_active_mask); err = __stop_machine(take_cpu_down, &tcd_param, cpumask_of(cpu)); if (err) { + set_cpu_active(cpu, true); /* CPU didn't die: tell everyone. Can't complain. */ if (raw_notifier_call_chain(&cpu_chain, CPU_DOWN_FAILED | mod, hcpu) == NOTIFY_BAD) @@ -292,9 +294,6 @@ err = _cpu_down(cpu, 0); - if (cpu_online(cpu)) - set_cpu_active(cpu, true); - out: cpu_maps_update_done(); stop_machine_destroy(); @@ -387,15 +386,23 @@ * with the userspace trying to use the CPU hotplug at the same time */ cpumask_clear(frozen_cpus); + + for_each_online_cpu(cpu) { + if (cpu == first_cpu) + continue; + set_cpu_active(cpu, false); + } + + synchronize_sched(); + printk("Disabling non-boot CPUs ...\n"); for_each_online_cpu(cpu) { if (cpu == first_cpu) continue; error = _cpu_down(cpu, 1); - if (!error) { + if (!error) cpumask_set_cpu(cpu, frozen_cpus); - printk("CPU%d is down\n", cpu); - } else { + else { printk(KERN_ERR "Error taking CPU%d down: %d\n", cpu, error); break; --- linux-2.6.32.orig/kernel/cred.c +++ linux-2.6.32/kernel/cred.c @@ -224,7 +224,7 @@ #ifdef CONFIG_KEYS new->tgcred = kzalloc(sizeof(*new->tgcred), GFP_KERNEL); if (!new->tgcred) { - kfree(new); + kmem_cache_free(cred_jar, new); return NULL; } atomic_set(&new->tgcred->usage, 1); @@ -786,8 +786,6 @@ { if (cred->magic != CRED_MAGIC) return true; - if (atomic_read(&cred->usage) < atomic_read(&cred->subscribers)) - return true; #ifdef CONFIG_SECURITY_SELINUX if (selinux_is_enabled()) { if ((unsigned long) cred->security < PAGE_SIZE) --- linux-2.6.32.orig/kernel/sched.c +++ linux-2.6.32/kernel/sched.c @@ -591,6 +591,8 @@ u64 rt_avg; u64 age_stamp; + u64 idle_stamp; + u64 avg_idle; #endif /* calc_load related fields */ @@ -814,6 +816,7 @@ * default: 0.25ms */ unsigned int sysctl_sched_shares_ratelimit = 250000; +unsigned int normalized_sysctl_sched_shares_ratelimit = 250000; /* * Inject some fuzzyness into changing the per-cpu group shares @@ -1810,6 +1813,7 @@ #endif static void calc_load_account_active(struct rq *this_rq); +static void update_sysctl(void); #include "sched_stats.h" #include "sched_idletask.c" @@ -2034,6 +2038,9 @@ { s64 delta; + if (p->sched_class != &fair_sched_class) + return 0; + /* * Buddy candidates are cache hot: */ @@ -2042,9 +2049,6 @@ &p->se == cfs_rq_of(&p->se)->last)) return 1; - if (p->sched_class != &fair_sched_class) - return 0; - if (sysctl_sched_migration_cost == -1) return 1; if (sysctl_sched_migration_cost == 0) @@ -2112,12 +2116,10 @@ /* * If the task is not on a runqueue (and not running), then - * it is sufficient to simply update the task's cpu field. + * the next wake-up will properly place the task. */ - if (!p->se.on_rq && !task_running(rq, p)) { - set_task_cpu(p, dest_cpu); + if (!p->se.on_rq && !task_running(rq, p)) return 0; - } init_completion(&req->done); req->task = p; @@ -2440,6 +2442,17 @@ #ifdef CONFIG_SMP if (p->sched_class->task_wake_up) p->sched_class->task_wake_up(rq, p); + + if (unlikely(rq->idle_stamp)) { + u64 delta = rq->clock - rq->idle_stamp; + u64 max = 2*sysctl_sched_migration_cost; + + if (delta > max) + rq->avg_idle = max; + else + update_avg(&rq->avg_idle, delta); + rq->idle_stamp = 0; + } #endif out: task_rq_unlock(rq, &flags); @@ -2951,6 +2964,7 @@ /* Variables and functions for calc_load */ static atomic_long_t calc_load_tasks; +static atomic_long_t calc_load_tasks_deferred; static unsigned long calc_load_update; unsigned long avenrun[3]; EXPORT_SYMBOL(avenrun); @@ -3005,7 +3019,7 @@ */ static void calc_load_account_active(struct rq *this_rq) { - long nr_active, delta; + long nr_active, delta, deferred; nr_active = this_rq->nr_running; nr_active += (long) this_rq->nr_uninterruptible; @@ -3013,6 +3027,25 @@ if (nr_active != this_rq->calc_load_active) { delta = nr_active - this_rq->calc_load_active; this_rq->calc_load_active = nr_active; + + /* + * Update calc_load_tasks only once per cpu in 10 tick update + * window. + */ + if (unlikely(time_before(jiffies, this_rq->calc_load_update) && + time_after_eq(jiffies, calc_load_update))) { + if (delta) + atomic_long_add(delta, + &calc_load_tasks_deferred); + return; + } + + if (atomic_long_read(&calc_load_tasks_deferred)) { + deferred = atomic_long_xchg(&calc_load_tasks_deferred, + 0); + delta += deferred; + } + atomic_long_add(delta, &calc_load_tasks); } } @@ -3056,8 +3089,8 @@ } if (time_after_eq(jiffies, this_rq->calc_load_update)) { - this_rq->calc_load_update += LOAD_FREQ; calc_load_account_active(this_rq); + this_rq->calc_load_update += LOAD_FREQ; } } @@ -3164,10 +3197,6 @@ deactivate_task(src_rq, p, 0); set_task_cpu(p, this_cpu); activate_task(this_rq, p, 0); - /* - * Note that idle threads have a prio of MAX_PRIO, for this test - * to be always true for them. - */ check_preempt_curr(this_rq, p, 0); } @@ -3391,6 +3420,7 @@ unsigned long max_load; unsigned long busiest_load_per_task; unsigned long busiest_nr_running; + unsigned long busiest_group_capacity; int group_imb; /* Is there imbalance in this sd */ #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT) @@ -3710,8 +3740,7 @@ unsigned long load, max_cpu_load, min_cpu_load; int i; unsigned int balance_cpu = -1, first_idle_cpu = 0; - unsigned long sum_avg_load_per_task; - unsigned long avg_load_per_task; + unsigned long avg_load_per_task = 0; if (local_group) { balance_cpu = group_first_cpu(group); @@ -3720,7 +3749,6 @@ } /* Tally up the load of all CPUs in the group */ - sum_avg_load_per_task = avg_load_per_task = 0; max_cpu_load = 0; min_cpu_load = ~0UL; @@ -3750,7 +3778,6 @@ sgs->sum_nr_running += rq->nr_running; sgs->sum_weighted_load += weighted_cpuload(i); - sum_avg_load_per_task += cpu_avg_load_per_task(i); } /* @@ -3768,7 +3795,6 @@ /* Adjust by relative CPU power of the group */ sgs->avg_load = (sgs->group_load * SCHED_LOAD_SCALE) / group->cpu_power; - /* * Consider the group unbalanced when the imbalance is larger * than the average weight of two tasks. @@ -3778,8 +3804,8 @@ * normalized nr_running number somewhere that negates * the hierarchy? */ - avg_load_per_task = (sum_avg_load_per_task * SCHED_LOAD_SCALE) / - group->cpu_power; + if (sgs->sum_nr_running) + avg_load_per_task = sgs->sum_weighted_load / sgs->sum_nr_running; if ((max_cpu_load - min_cpu_load) > 2*avg_load_per_task) sgs->group_imb = 1; @@ -3848,6 +3874,7 @@ sds->max_load = sgs.avg_load; sds->busiest = group; sds->busiest_nr_running = sgs.sum_nr_running; + sds->busiest_group_capacity = sgs.group_capacity; sds->busiest_load_per_task = sgs.sum_weighted_load; sds->group_imb = sgs.group_imb; } @@ -3870,6 +3897,7 @@ { unsigned long tmp, pwr_now = 0, pwr_move = 0; unsigned int imbn = 2; + unsigned long scaled_busy_load_per_task; if (sds->this_nr_running) { sds->this_load_per_task /= sds->this_nr_running; @@ -3880,8 +3908,12 @@ sds->this_load_per_task = cpu_avg_load_per_task(this_cpu); - if (sds->max_load - sds->this_load + sds->busiest_load_per_task >= - sds->busiest_load_per_task * imbn) { + scaled_busy_load_per_task = sds->busiest_load_per_task + * SCHED_LOAD_SCALE; + scaled_busy_load_per_task /= sds->busiest->cpu_power; + + if (sds->max_load - sds->this_load + scaled_busy_load_per_task >= + (scaled_busy_load_per_task * imbn)) { *imbalance = sds->busiest_load_per_task; return; } @@ -3932,7 +3964,14 @@ static inline void calculate_imbalance(struct sd_lb_stats *sds, int this_cpu, unsigned long *imbalance) { - unsigned long max_pull; + unsigned long max_pull, load_above_capacity = ~0UL; + + sds->busiest_load_per_task /= sds->busiest_nr_running; + if (sds->group_imb) { + sds->busiest_load_per_task = + min(sds->busiest_load_per_task, sds->avg_load); + } + /* * In the presence of smp nice balancing, certain scenarios can have * max load less than avg load(as we skip the groups at or below @@ -3943,9 +3982,29 @@ return fix_small_imbalance(sds, this_cpu, imbalance); } - /* Don't want to pull so many tasks that a group would go idle */ - max_pull = min(sds->max_load - sds->avg_load, - sds->max_load - sds->busiest_load_per_task); + if (!sds->group_imb) { + /* + * Don't want to pull so many tasks that a group would go idle. + */ + load_above_capacity = (sds->busiest_nr_running - + sds->busiest_group_capacity); + + load_above_capacity *= (SCHED_LOAD_SCALE * SCHED_LOAD_SCALE); + + load_above_capacity /= sds->busiest->cpu_power; + } + + /* + * We're trying to get all the cpus to the average_load, so we don't + * want to push ourselves above the average load, nor do we wish to + * reduce the max loaded cpu below the average load. At the same time, + * we also don't want to reduce the group load below the group capacity + * (so that we can implement power-savings policies etc). Thus we look + * for the minimum possible imbalance. + * Be careful of negative numbers as they'll appear as very large values + * with unsigned longs. + */ + max_pull = min(sds->max_load - sds->avg_load, load_above_capacity); /* How much load to actually move to equalise the imbalance */ *imbalance = min(max_pull * sds->busiest->cpu_power, @@ -4013,7 +4072,6 @@ * 4) This group is more busy than the avg busieness at this * sched_domain. * 5) The imbalance is within the specified limit. - * 6) Any rebalance would lead to ping-pong */ if (balance && !(*balance)) goto ret; @@ -4032,25 +4090,6 @@ if (100 * sds.max_load <= sd->imbalance_pct * sds.this_load) goto out_balanced; - sds.busiest_load_per_task /= sds.busiest_nr_running; - if (sds.group_imb) - sds.busiest_load_per_task = - min(sds.busiest_load_per_task, sds.avg_load); - - /* - * We're trying to get all the cpus to the average_load, so we don't - * want to push ourselves above the average load, nor do we wish to - * reduce the max loaded cpu below the average load, as either of these - * actions would just result in more rebalancing later, and ping-pong - * tasks around. Thus we look for the minimum possible imbalance. - * Negative imbalances (*we* are more loaded than anyone else) will - * be counted as no imbalance for these purposes -- we can't fix that - * by pulling tasks to us. Be careful of negative numbers as they'll - * appear as very large values with unsigned longs. - */ - if (sds.max_load <= sds.busiest_load_per_task) - goto out_balanced; - /* Looks like there is an imbalance. Compute it */ calculate_imbalance(&sds, this_cpu, imbalance); return sds.busiest; @@ -4087,12 +4126,23 @@ continue; rq = cpu_rq(i); - wl = weighted_cpuload(i) * SCHED_LOAD_SCALE; - wl /= power; + wl = weighted_cpuload(i); + /* + * When comparing with imbalance, use weighted_cpuload() + * which is not scaled with the cpu power. + */ if (capacity && rq->nr_running == 1 && wl > imbalance) continue; + /* + * For the load comparisons with the other cpu's, consider + * the weighted_cpuload() scaled with the cpu power, so that + * the load can be moved away from the cpu that is potentially + * running at a lower capacity. + */ + wl = (wl * SCHED_LOAD_SCALE) / power; + if (wl > max_load) { max_load = wl; busiest = rq; @@ -4126,7 +4176,7 @@ unsigned long flags; struct cpumask *cpus = __get_cpu_var(load_balance_tmpmask); - cpumask_setall(cpus); + cpumask_copy(cpus, cpu_active_mask); /* * When power savings policy is enabled for the parent domain, idle @@ -4289,7 +4339,7 @@ int all_pinned = 0; struct cpumask *cpus = __get_cpu_var(load_balance_tmpmask); - cpumask_setall(cpus); + cpumask_copy(cpus, cpu_active_mask); /* * When power savings policy is enabled for the parent domain, idle @@ -4429,6 +4479,11 @@ int pulled_task = 0; unsigned long next_balance = jiffies + HZ; + this_rq->idle_stamp = this_rq->clock; + + if (this_rq->avg_idle < sysctl_sched_migration_cost) + return; + for_each_domain(this_cpu, sd) { unsigned long interval; @@ -4443,8 +4498,10 @@ interval = msecs_to_jiffies(sd->balance_interval); if (time_after(next_balance, sd->last_balance + interval)) next_balance = sd->last_balance + interval; - if (pulled_task) + if (pulled_task) { + this_rq->idle_stamp = 0; break; + } } if (pulled_task || time_after(jiffies, this_rq->next_balance)) { /* @@ -4679,7 +4736,7 @@ cpumask_set_cpu(cpu, nohz.cpu_mask); /* time for ilb owner also to sleep */ - if (cpumask_weight(nohz.cpu_mask) == num_online_cpus()) { + if (cpumask_weight(nohz.cpu_mask) == num_active_cpus()) { if (atomic_read(&nohz.load_balancer) == cpu) atomic_set(&nohz.load_balancer, -1); return 0; @@ -5312,6 +5369,8 @@ { struct pt_regs *regs = get_irq_regs(); + tracing_off(); + printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n", prev->comm, prev->pid, preempt_count()); @@ -5980,7 +6039,7 @@ unsigned long flags; int oldprio, on_rq, running; struct rq *rq; - const struct sched_class *prev_class = p->sched_class; + const struct sched_class *prev_class; BUG_ON(prio < 0 || prio > MAX_PRIO); @@ -5988,6 +6047,7 @@ update_rq_clock(rq); oldprio = p->prio; + prev_class = p->sched_class; on_rq = p->se.on_rq; running = task_current(rq, p); if (on_rq) @@ -6215,7 +6275,7 @@ { int retval, oldprio, oldpolicy = -1, on_rq, running; unsigned long flags; - const struct sched_class *prev_class = p->sched_class; + const struct sched_class *prev_class; struct rq *rq; int reset_on_fork; @@ -6329,6 +6389,7 @@ p->sched_reset_on_fork = reset_on_fork; oldprio = p->prio; + prev_class = p->sched_class; __setscheduler(rq, p, policy, param->sched_priority); if (running) @@ -6628,7 +6689,9 @@ int ret; cpumask_var_t mask; - if (len < cpumask_size()) + if ((len * BITS_PER_BYTE) < nr_cpu_ids) + return -EINVAL; + if (len & (sizeof(unsigned long)-1)) return -EINVAL; if (!alloc_cpumask_var(&mask, GFP_KERNEL)) @@ -6636,10 +6699,12 @@ ret = sched_getaffinity(pid, mask); if (ret == 0) { - if (copy_to_user(user_mask_ptr, mask, cpumask_size())) + size_t retlen = min_t(size_t, len, cpumask_size()); + + if (copy_to_user(user_mask_ptr, mask, retlen)) ret = -EFAULT; else - ret = cpumask_size(); + ret = retlen; } free_cpumask_var(mask); @@ -6962,7 +7027,6 @@ __sched_fork(idle); idle->se.exec_start = sched_clock(); - idle->prio = idle->normal_prio = MAX_PRIO; cpumask_copy(&idle->cpus_allowed, cpumask_of(cpu)); __set_task_cpu(idle, cpu); @@ -7003,22 +7067,23 @@ * * This idea comes from the SD scheduler of Con Kolivas: */ -static inline void sched_init_granularity(void) +static void update_sysctl(void) { - unsigned int factor = 1 + ilog2(num_online_cpus()); - const unsigned long limit = 200000000; - - sysctl_sched_min_granularity *= factor; - if (sysctl_sched_min_granularity > limit) - sysctl_sched_min_granularity = limit; - - sysctl_sched_latency *= factor; - if (sysctl_sched_latency > limit) - sysctl_sched_latency = limit; + unsigned int cpus = min(num_online_cpus(), 8U); + unsigned int factor = 1 + ilog2(cpus); - sysctl_sched_wakeup_granularity *= factor; +#define SET_SYSCTL(name) \ + (sysctl_##name = (factor) * normalized_sysctl_##name) + SET_SYSCTL(sched_min_granularity); + SET_SYSCTL(sched_latency); + SET_SYSCTL(sched_wakeup_granularity); + SET_SYSCTL(sched_shares_ratelimit); +#undef SET_SYSCTL +} - sysctl_sched_shares_ratelimit *= factor; +static inline void sched_init_granularity(void) +{ + update_sysctl(); } #ifdef CONFIG_SMP @@ -7055,7 +7120,7 @@ int ret = 0; rq = task_rq_lock(p, &flags); - if (!cpumask_intersects(new_mask, cpu_online_mask)) { + if (!cpumask_intersects(new_mask, cpu_active_mask)) { ret = -EINVAL; goto out; } @@ -7077,7 +7142,7 @@ if (cpumask_test_cpu(task_cpu(p), new_mask)) goto out; - if (migrate_task(p, cpumask_any_and(cpu_online_mask, new_mask), &req)) { + if (migrate_task(p, cpumask_any_and(cpu_active_mask, new_mask), &req)) { /* Need help from migration thread: drop lock and wait. */ struct task_struct *mt = rq->migration_thread; @@ -7122,6 +7187,9 @@ /* Already moved. */ if (task_cpu(p) != src_cpu) goto done; + /* Waking up, don't get in the way of try_to_wake_up(). */ + if (p->state == TASK_WAKING) + goto fail; /* Affinity changed (again). */ if (!cpumask_test_cpu(dest_cpu, &p->cpus_allowed)) goto fail; @@ -7231,19 +7299,19 @@ again: /* Look for allowed, online CPU in same node. */ - for_each_cpu_and(dest_cpu, nodemask, cpu_online_mask) + for_each_cpu_and(dest_cpu, nodemask, cpu_active_mask) if (cpumask_test_cpu(dest_cpu, &p->cpus_allowed)) goto move; /* Any allowed, online CPU? */ - dest_cpu = cpumask_any_and(&p->cpus_allowed, cpu_online_mask); + dest_cpu = cpumask_any_and(&p->cpus_allowed, cpu_active_mask); if (dest_cpu < nr_cpu_ids) goto move; /* No more Mr. Nice Guy. */ if (dest_cpu >= nr_cpu_ids) { cpuset_cpus_allowed_locked(p, &p->cpus_allowed); - dest_cpu = cpumask_any_and(cpu_online_mask, &p->cpus_allowed); + dest_cpu = cpumask_any_and(cpu_active_mask, &p->cpus_allowed); /* * Don't tell them about moving exiting tasks or @@ -7272,7 +7340,7 @@ */ static void migrate_nr_uninterruptible(struct rq *rq_src) { - struct rq *rq_dest = cpu_rq(cpumask_any(cpu_online_mask)); + struct rq *rq_dest = cpu_rq(cpumask_any(cpu_active_mask)); unsigned long flags; local_irq_save(flags); @@ -7526,7 +7594,7 @@ static struct ctl_table_header *sd_sysctl_header; static void register_sched_domain_sysctl(void) { - int i, cpu_num = num_online_cpus(); + int i, cpu_num = num_possible_cpus(); struct ctl_table *entry = sd_alloc_ctl_entry(cpu_num + 1); char buf[32]; @@ -7536,7 +7604,7 @@ if (entry == NULL) return; - for_each_online_cpu(i) { + for_each_possible_cpu(i) { snprintf(buf, 32, "cpu%d", i); entry->procname = kstrdup(buf, GFP_KERNEL); entry->mode = 0555; @@ -7666,7 +7734,6 @@ spin_lock_irq(&rq->lock); update_rq_clock(rq); deactivate_task(rq, rq->idle, 0); - rq->idle->static_prio = MAX_PRIO; __setscheduler(rq, rq->idle, SCHED_NORMAL, 0); rq->idle->sched_class = &idle_sched_class; migrate_dead_tasks(cpu); @@ -7905,6 +7972,8 @@ static void free_rootdomain(struct root_domain *rd) { + synchronize_sched(); + cpupri_cleanup(&rd->cpupri); free_cpumask_var(rd->rto_mask); @@ -8045,6 +8114,7 @@ /* Setup the mask of cpus configured for isolated domains */ static int __init isolated_cpu_setup(char *str) { + alloc_bootmem_cpumask_var(&cpu_isolated_map); cpulist_parse(str, cpu_isolated_map); return 1; } @@ -9022,7 +9092,7 @@ if (doms_new == NULL) { ndoms_cur = 0; doms_new = fallback_doms; - cpumask_andnot(&doms_new[0], cpu_online_mask, cpu_isolated_map); + cpumask_andnot(&doms_new[0], cpu_active_mask, cpu_isolated_map); WARN_ON_ONCE(dattr_new); } @@ -9153,8 +9223,10 @@ switch (action) { case CPU_ONLINE: case CPU_ONLINE_FROZEN: - case CPU_DEAD: - case CPU_DEAD_FROZEN: + case CPU_DOWN_PREPARE: + case CPU_DOWN_PREPARE_FROZEN: + case CPU_DOWN_FAILED: + case CPU_DOWN_FAILED_FROZEN: partition_sched_domains(1, NULL, NULL); return NOTIFY_OK; @@ -9201,7 +9273,7 @@ #endif get_online_cpus(); mutex_lock(&sched_domains_mutex); - arch_init_sched_domains(cpu_online_mask); + arch_init_sched_domains(cpu_active_mask); cpumask_andnot(non_isolated_cpus, cpu_possible_mask, cpu_isolated_map); if (cpumask_empty(non_isolated_cpus)) cpumask_set_cpu(smp_processor_id(), non_isolated_cpus); @@ -9522,6 +9594,8 @@ rq->cpu = i; rq->online = 0; rq->migration_thread = NULL; + rq->idle_stamp = 0; + rq->avg_idle = 2*sysctl_sched_migration_cost; INIT_LIST_HEAD(&rq->migration_queue); rq_attach_root(rq, &def_root_domain); #endif @@ -9571,7 +9645,9 @@ zalloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT); alloc_cpumask_var(&nohz.ilb_grp_nohz_mask, GFP_NOWAIT); #endif - zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT); + /* May be allocated at isolcpus cmdline parse time */ + if (cpu_isolated_map == NULL) + zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT); #endif /* SMP */ perf_event_init(); --- linux-2.6.32.orig/kernel/sched_debug.c +++ linux-2.6.32/kernel/sched_debug.c @@ -285,12 +285,16 @@ #ifdef CONFIG_SCHEDSTATS #define P(n) SEQ_printf(m, " .%-30s: %d\n", #n, rq->n); +#define P64(n) SEQ_printf(m, " .%-30s: %Ld\n", #n, rq->n); P(yld_count); P(sched_switch); P(sched_count); P(sched_goidle); +#ifdef CONFIG_SMP + P64(avg_idle); +#endif P(ttwu_count); P(ttwu_local); --- linux-2.6.32.orig/kernel/printk.c +++ linux-2.6.32/kernel/printk.c @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -271,14 +272,14 @@ * 9 -- Return number of unread characters in the log buffer * 10 -- Return size of the log buffer */ -int do_syslog(int type, char __user *buf, int len) +int do_syslog(int type, char __user *buf, int len, bool from_file) { unsigned i, j, limit, count; int do_clear = 0; char c; int error = 0; - error = security_syslog(type); + error = security_syslog(type, from_file); if (error) return error; @@ -415,7 +416,7 @@ SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) { - return do_syslog(type, buf, len); + return do_syslog(type, buf, len, SYSLOG_FROM_CALL); } /* --- linux-2.6.32.orig/kernel/kthread.c +++ linux-2.6.32/kernel/kthread.c @@ -196,7 +196,7 @@ set_task_comm(tsk, "kthreadd"); ignore_signals(tsk); set_cpus_allowed_ptr(tsk, cpu_all_mask); - set_mems_allowed(node_possible_map); + set_mems_allowed(node_states[N_HIGH_MEMORY]); current->flags |= PF_NOFREEZE | PF_FREEZER_NOSIG; --- linux-2.6.32.orig/kernel/cgroup_freezer.c +++ linux-2.6.32/kernel/cgroup_freezer.c @@ -47,17 +47,20 @@ struct freezer, css); } -int cgroup_frozen(struct task_struct *task) +int cgroup_freezing_or_frozen(struct task_struct *task) { struct freezer *freezer; enum freezer_state state; task_lock(task); freezer = task_freezer(task); - state = freezer->state; + if (!freezer->css.cgroup->parent) + state = CGROUP_THAWED; /* root cgroup can't be frozen */ + else + state = freezer->state; task_unlock(task); - return state == CGROUP_FROZEN; + return (state == CGROUP_FREEZING) || (state == CGROUP_FROZEN); } /* --- linux-2.6.32.orig/kernel/rcutree.h +++ linux-2.6.32/kernel/rcutree.h @@ -84,6 +84,9 @@ long gpnum; /* Current grace period for this node. */ /* This will either be equal to or one */ /* behind the root rcu_node's gpnum. */ + long completed; /* Last grace period completed for this node. */ + /* This will either be equal to or one */ + /* behind the root rcu_node's gpnum. */ unsigned long qsmask; /* CPUs or groups that need to switch in */ /* order for current grace period to proceed.*/ /* In leaf rcu_node, each bit corresponds to */ @@ -204,11 +207,12 @@ #define RCU_GP_IDLE 0 /* No grace period in progress. */ #define RCU_GP_INIT 1 /* Grace period being initialized. */ #define RCU_SAVE_DYNTICK 2 /* Need to scan dyntick state. */ -#define RCU_FORCE_QS 3 /* Need to force quiescent state. */ +#define RCU_SAVE_COMPLETED 3 /* Need to save rsp->completed. */ +#define RCU_FORCE_QS 4 /* Need to force quiescent state. */ #ifdef CONFIG_NO_HZ #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK #else /* #ifdef CONFIG_NO_HZ */ -#define RCU_SIGNAL_INIT RCU_FORCE_QS +#define RCU_SIGNAL_INIT RCU_SAVE_COMPLETED #endif /* #else #ifdef CONFIG_NO_HZ */ #define RCU_JIFFIES_TILL_FORCE_QS 3 /* for rsp->jiffies_force_qs */ @@ -274,9 +278,8 @@ unsigned long jiffies_stall; /* Time at which to check */ /* for CPU stalls. */ #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ -#ifdef CONFIG_NO_HZ long dynticks_completed; /* Value of completed @ snap. */ -#endif /* #ifdef CONFIG_NO_HZ */ + /* Protected by fqslock. */ }; #ifdef RCU_TREE_NONCORE @@ -298,7 +301,7 @@ #else /* #ifdef RCU_TREE_NONCORE */ /* Forward declarations for rcutree_plugin.h */ -static inline void rcu_bootup_announce(void); +static void rcu_bootup_announce(void); long rcu_batches_completed(void); static void rcu_preempt_note_context_switch(int cpu); static int rcu_preempted_readers(struct rcu_node *rnp); --- linux-2.6.32.orig/kernel/time/timekeeping.c +++ linux-2.6.32/kernel/time/timekeeping.c @@ -488,6 +488,17 @@ } /** + * timekeeping_max_deferment - Returns max time the clocksource can be deferred + * + * Caller must observe xtime_lock via read_seqbegin/read_seqretry to + * ensure that the clocksource does not change! + */ +u64 timekeeping_max_deferment(void) +{ + return timekeeper.clock->max_idle_ns; +} + +/** * read_persistent_clock - Return time from the persistent clock. * * Weak dummy function for arches that do not yet support it. @@ -834,6 +845,7 @@ set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec); } +EXPORT_SYMBOL_GPL(getboottime); /** * monotonic_to_bootbased - Convert the monotonic time to boot based. @@ -843,6 +855,7 @@ { *ts = timespec_add_safe(*ts, total_sleep_time); } +EXPORT_SYMBOL_GPL(monotonic_to_bootbased); unsigned long get_seconds(void) { --- linux-2.6.32.orig/kernel/time/tick-sched.c +++ linux-2.6.32/kernel/time/tick-sched.c @@ -216,6 +216,7 @@ struct tick_sched *ts; ktime_t last_update, expires, now; struct clock_event_device *dev = __get_cpu_var(tick_cpu_device).evtdev; + u64 time_delta; int cpu; local_irq_save(flags); @@ -275,6 +276,17 @@ seq = read_seqbegin(&xtime_lock); last_update = last_jiffies_update; last_jiffies = jiffies; + + /* + * On SMP we really should only care for the CPU which + * has the do_timer duty assigned. All other CPUs can + * sleep as long as they want. + */ + if (cpu == tick_do_timer_cpu || + tick_do_timer_cpu == TICK_DO_TIMER_NONE) + time_delta = timekeeping_max_deferment(); + else + time_delta = KTIME_MAX; } while (read_seqretry(&xtime_lock, seq)); /* Get the next timer wheel timer */ @@ -294,11 +306,26 @@ if ((long)delta_jiffies >= 1) { /* - * calculate the expiry time for the next timer wheel - * timer - */ - expires = ktime_add_ns(last_update, tick_period.tv64 * - delta_jiffies); + * calculate the expiry time for the next timer wheel + * timer. delta_jiffies >= NEXT_TIMER_MAX_DELTA signals + * that there is no timer pending or at least extremely + * far into the future (12 days for HZ=1000). In this + * case we set the expiry to the end of time. + */ + if (likely(delta_jiffies < NEXT_TIMER_MAX_DELTA)) { + /* + * Calculate the time delta for the next timer event. + * If the time delta exceeds the maximum time delta + * permitted by the current clocksource then adjust + * the time delta accordingly to ensure the + * clocksource does not wrap. + */ + time_delta = min_t(u64, time_delta, + tick_period.tv64 * delta_jiffies); + expires = ktime_add_ns(last_update, time_delta); + } else { + expires.tv64 = KTIME_MAX; + } /* * If this cpu is the one which updates jiffies, then @@ -342,22 +369,19 @@ ts->idle_sleeps++; + /* Mark expires */ + ts->idle_expires = expires; + /* - * delta_jiffies >= NEXT_TIMER_MAX_DELTA signals that - * there is no timer pending or at least extremly far - * into the future (12 days for HZ=1000). In this case - * we simply stop the tick timer: + * If the expiration time == KTIME_MAX, then + * in this case we simply stop the tick timer. */ - if (unlikely(delta_jiffies >= NEXT_TIMER_MAX_DELTA)) { - ts->idle_expires.tv64 = KTIME_MAX; + if (unlikely(expires.tv64 == KTIME_MAX)) { if (ts->nohz_mode == NOHZ_MODE_HIGHRES) hrtimer_cancel(&ts->sched_timer); goto out; } - /* Mark expiries */ - ts->idle_expires = expires; - if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { hrtimer_start(&ts->sched_timer, expires, HRTIMER_MODE_ABS_PINNED); --- linux-2.6.32.orig/kernel/time/clockevents.c +++ linux-2.6.32/kernel/time/clockevents.c @@ -20,6 +20,8 @@ #include #include +#include "tick-internal.h" + /* The registered clock event devices */ static LIST_HEAD(clockevent_devices); static LIST_HEAD(clockevents_released); @@ -237,8 +239,9 @@ */ void clockevents_notify(unsigned long reason, void *arg) { - struct list_head *node, *tmp; + struct clock_event_device *dev, *tmp; unsigned long flags; + int cpu; spin_lock_irqsave(&clockevents_lock, flags); clockevents_do_notify(reason, arg); @@ -249,8 +252,20 @@ * Unregister the clock event devices which were * released from the users in the notify chain. */ - list_for_each_safe(node, tmp, &clockevents_released) - list_del(node); + list_for_each_entry_safe(dev, tmp, &clockevents_released, list) + list_del(&dev->list); + /* + * Now check whether the CPU has left unused per cpu devices + */ + cpu = *((int *)arg); + list_for_each_entry_safe(dev, tmp, &clockevent_devices, list) { + if (cpumask_test_cpu(cpu, dev->cpumask) && + cpumask_weight(dev->cpumask) == 1 && + !tick_is_broadcast_device(dev)) { + BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED); + list_del(&dev->list); + } + } break; default: break; --- linux-2.6.32.orig/kernel/time/clocksource.c +++ linux-2.6.32/kernel/time/clocksource.c @@ -413,6 +413,47 @@ clocksource_resume_watchdog(); } +/** + * clocksource_max_deferment - Returns max time the clocksource can be deferred + * @cs: Pointer to clocksource + * + */ +static u64 clocksource_max_deferment(struct clocksource *cs) +{ + u64 max_nsecs, max_cycles; + + /* + * Calculate the maximum number of cycles that we can pass to the + * cyc2ns function without overflowing a 64-bit signed result. The + * maximum number of cycles is equal to ULLONG_MAX/cs->mult which + * is equivalent to the below. + * max_cycles < (2^63)/cs->mult + * max_cycles < 2^(log2((2^63)/cs->mult)) + * max_cycles < 2^(log2(2^63) - log2(cs->mult)) + * max_cycles < 2^(63 - log2(cs->mult)) + * max_cycles < 1 << (63 - log2(cs->mult)) + * Please note that we add 1 to the result of the log2 to account for + * any rounding errors, ensure the above inequality is satisfied and + * no overflow will occur. + */ + max_cycles = 1ULL << (63 - (ilog2(cs->mult) + 1)); + + /* + * The actual maximum number of cycles we can defer the clocksource is + * determined by the minimum of max_cycles and cs->mask. + */ + max_cycles = min_t(u64, max_cycles, (u64) cs->mask); + max_nsecs = clocksource_cyc2ns(max_cycles, cs->mult, cs->shift); + + /* + * To ensure that the clocksource does not wrap whilst we are idle, + * limit the time the clocksource can be deferred by 12.5%. Please + * note a margin of 12.5% is used because this can be computed with + * a shift, versus say 10% which would require division. + */ + return max_nsecs - (max_nsecs >> 5); +} + #ifdef CONFIG_GENERIC_TIME /** @@ -474,6 +515,10 @@ */ static int __init clocksource_done_booting(void) { + mutex_lock(&clocksource_mutex); + curr_clocksource = clocksource_default_clock(); + mutex_unlock(&clocksource_mutex); + finished_booting = 1; /* @@ -511,6 +556,9 @@ */ int clocksource_register(struct clocksource *cs) { + /* calculate max idle time permitted for this clocksource */ + cs->max_idle_ns = clocksource_max_deferment(cs); + mutex_lock(&clocksource_mutex); clocksource_enqueue(cs); clocksource_select(); --- linux-2.6.32.orig/kernel/time/timer_list.c +++ linux-2.6.32/kernel/time/timer_list.c @@ -150,6 +150,9 @@ P_ns(expires_next); P(hres_active); P(nr_events); + P(nr_retries); + P(nr_hangs); + P_ns(max_hang_time); #endif #undef P #undef P_ns @@ -252,7 +255,7 @@ u64 now = ktime_to_ns(ktime_get()); int cpu; - SEQ_printf(m, "Timer List Version: v0.4\n"); + SEQ_printf(m, "Timer List Version: v0.5\n"); SEQ_printf(m, "HRTIMER_MAX_CLOCK_BASES: %d\n", HRTIMER_MAX_CLOCK_BASES); SEQ_printf(m, "now at %Ld nsecs\n", (unsigned long long)now); --- linux-2.6.32.orig/kernel/irq/chip.c +++ linux-2.6.32/kernel/irq/chip.c @@ -18,11 +18,7 @@ #include "internals.h" -/** - * dynamic_irq_init - initialize a dynamically allocated irq - * @irq: irq number to initialize - */ -void dynamic_irq_init(unsigned int irq) +static void dynamic_irq_init_x(unsigned int irq, bool keep_chip_data) { struct irq_desc *desc; unsigned long flags; @@ -41,7 +37,8 @@ desc->depth = 1; desc->msi_desc = NULL; desc->handler_data = NULL; - desc->chip_data = NULL; + if (!keep_chip_data) + desc->chip_data = NULL; desc->action = NULL; desc->irq_count = 0; desc->irqs_unhandled = 0; @@ -55,10 +52,26 @@ } /** - * dynamic_irq_cleanup - cleanup a dynamically allocated irq + * dynamic_irq_init - initialize a dynamically allocated irq * @irq: irq number to initialize */ -void dynamic_irq_cleanup(unsigned int irq) +void dynamic_irq_init(unsigned int irq) +{ + dynamic_irq_init_x(irq, false); +} + +/** + * dynamic_irq_init_keep_chip_data - initialize a dynamically allocated irq + * @irq: irq number to initialize + * + * does not set irq_to_desc(irq)->chip_data to NULL + */ +void dynamic_irq_init_keep_chip_data(unsigned int irq) +{ + dynamic_irq_init_x(irq, true); +} + +static void dynamic_irq_cleanup_x(unsigned int irq, bool keep_chip_data) { struct irq_desc *desc = irq_to_desc(irq); unsigned long flags; @@ -77,7 +90,8 @@ } desc->msi_desc = NULL; desc->handler_data = NULL; - desc->chip_data = NULL; + if (!keep_chip_data) + desc->chip_data = NULL; desc->handle_irq = handle_bad_irq; desc->chip = &no_irq_chip; desc->name = NULL; @@ -85,6 +99,26 @@ spin_unlock_irqrestore(&desc->lock, flags); } +/** + * dynamic_irq_cleanup - cleanup a dynamically allocated irq + * @irq: irq number to initialize + */ +void dynamic_irq_cleanup(unsigned int irq) +{ + dynamic_irq_cleanup_x(irq, false); +} + +/** + * dynamic_irq_cleanup_keep_chip_data - cleanup a dynamically allocated irq + * @irq: irq number to initialize + * + * does not set irq_to_desc(irq)->chip_data to NULL + */ +void dynamic_irq_cleanup_keep_chip_data(unsigned int irq) +{ + dynamic_irq_cleanup_x(irq, true); +} + /** * set_irq_chip - set the irq chip for an irq --- linux-2.6.32.orig/kernel/irq/manage.c +++ linux-2.6.32/kernel/irq/manage.c @@ -735,6 +735,16 @@ if (new->flags & IRQF_ONESHOT) desc->status |= IRQ_ONESHOT; + /* + * Force MSI interrupts to run with interrupts + * disabled. The multi vector cards can cause stack + * overflows due to nested interrupts when enough of + * them are directed to a core and fire at the same + * time. + */ + if (desc->msi_desc) + new->flags |= IRQF_DISABLED; + if (!(desc->status & IRQ_NOAUTOEN)) { desc->depth = 0; desc->status &= ~IRQ_DISABLED; --- linux-2.6.32.orig/kernel/power/snapshot.c +++ linux-2.6.32/kernel/power/snapshot.c @@ -1181,7 +1181,7 @@ memory_bm_position_reset(©_bm); - while (to_free_normal > 0 && to_free_highmem > 0) { + while (to_free_normal > 0 || to_free_highmem > 0) { unsigned long pfn = memory_bm_next_pfn(©_bm); struct page *page = pfn_to_page(pfn); --- linux-2.6.32.orig/kernel/power/Kconfig +++ linux-2.6.32/kernel/power/Kconfig @@ -119,6 +119,21 @@ config HIBERNATION_NVS bool +config PM_DISABLE_CONSOLE + bool "Disable Power Management messing with the active console" + depends on PM + default n + ---help--- + By default, PM will take over the active console (generally, this means + switching to the console when suspending from X). This can at times cause + problems, especially if userspace suspend scripts try to do things with + the console before or after suspending (e.g. calling vbestate). + + To work around this, enable this option so that PM will not handle the + console. + + If unsure, say N. + config HIBERNATION bool "Hibernation (aka 'suspend to disk')" depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE --- linux-2.6.32.orig/kernel/power/process.c +++ linux-2.6.32/kernel/power/process.c @@ -139,7 +139,7 @@ if (nosig_only && should_send_signal(p)) continue; - if (cgroup_frozen(p)) + if (cgroup_freezing_or_frozen(p)) continue; thaw_process(p); --- linux-2.6.32.orig/kernel/power/console.c +++ linux-2.6.32/kernel/power/console.c @@ -17,20 +17,24 @@ int pm_prepare_console(void) { +#ifndef CONFIG_PM_DISABLE_CONSOLE orig_fgconsole = vt_move_to_console(SUSPEND_CONSOLE, 1); if (orig_fgconsole < 0) return 1; orig_kmsg = kmsg_redirect; kmsg_redirect = SUSPEND_CONSOLE; +#endif return 0; } void pm_restore_console(void) { +#ifndef CONFIG_PM_DISABLE_CONSOLE if (orig_fgconsole >= 0) { vt_move_to_console(orig_fgconsole, 0); kmsg_redirect = orig_kmsg; } +#endif } #endif --- linux-2.6.32.orig/kernel/trace/ftrace.c +++ linux-2.6.32/kernel/trace/ftrace.c @@ -3258,6 +3258,7 @@ { /* Make sure we do not use the parent ret_stack */ t->ret_stack = NULL; + t->curr_ret_stack = -1; if (ftrace_graph_active) { struct ftrace_ret_stack *ret_stack; @@ -3267,7 +3268,6 @@ GFP_KERNEL); if (!ret_stack) return; - t->curr_ret_stack = -1; atomic_set(&t->tracing_graph_pause, 0); atomic_set(&t->trace_overrun, 0); t->ftrace_timestamp = 0; --- linux-2.6.32.orig/kernel/trace/trace.h +++ linux-2.6.32/kernel/trace/trace.h @@ -746,7 +746,8 @@ #undef FTRACE_ENTRY #define FTRACE_ENTRY(call, struct_name, id, tstruct, print) \ - extern struct ftrace_event_call event_##call; + extern struct ftrace_event_call \ + __attribute__((__aligned__(4))) event_##call; #undef FTRACE_ENTRY_DUP #define FTRACE_ENTRY_DUP(call, struct_name, id, tstruct, print) \ FTRACE_ENTRY(call, struct_name, id, PARAMS(tstruct), PARAMS(print)) --- linux-2.6.32.orig/kernel/trace/ring_buffer.c +++ linux-2.6.32/kernel/trace/ring_buffer.c @@ -2237,12 +2237,12 @@ if (ring_buffer_flags != RB_BUFFERS_ON) return NULL; - if (atomic_read(&buffer->record_disabled)) - return NULL; - /* If we are tracing schedule, we don't want to recurse */ resched = ftrace_preempt_disable(); + if (atomic_read(&buffer->record_disabled)) + goto out_nocheck; + if (trace_recursive_lock()) goto out_nocheck; @@ -2474,11 +2474,11 @@ if (ring_buffer_flags != RB_BUFFERS_ON) return -EBUSY; - if (atomic_read(&buffer->record_disabled)) - return -EBUSY; - resched = ftrace_preempt_disable(); + if (atomic_read(&buffer->record_disabled)) + goto out; + cpu = raw_smp_processor_id(); if (!cpumask_test_cpu(cpu, buffer->cpumask)) --- linux-2.6.32.orig/kernel/trace/trace.c +++ linux-2.6.32/kernel/trace/trace.c @@ -748,10 +748,10 @@ mutex_unlock(&trace_types_lock); } -static void __tracing_reset(struct trace_array *tr, int cpu) +static void __tracing_reset(struct ring_buffer *buffer, int cpu) { ftrace_disable_cpu(); - ring_buffer_reset_cpu(tr->buffer, cpu); + ring_buffer_reset_cpu(buffer, cpu); ftrace_enable_cpu(); } @@ -763,7 +763,7 @@ /* Make sure all commits have finished */ synchronize_sched(); - __tracing_reset(tr, cpu); + __tracing_reset(buffer, cpu); ring_buffer_record_enable(buffer); } @@ -781,7 +781,7 @@ tr->time_start = ftrace_now(tr->cpu); for_each_online_cpu(cpu) - __tracing_reset(tr, cpu); + __tracing_reset(buffer, cpu); ring_buffer_record_enable(buffer); } @@ -858,6 +858,8 @@ goto out; } + /* Prevent the buffers from switching */ + __raw_spin_lock(&ftrace_max_lock); buffer = global_trace.buffer; if (buffer) @@ -867,6 +869,8 @@ if (buffer) ring_buffer_record_enable(buffer); + __raw_spin_unlock(&ftrace_max_lock); + ftrace_start(); out: spin_unlock_irqrestore(&tracing_start_lock, flags); @@ -888,6 +892,9 @@ if (trace_stop_count++) goto out; + /* Prevent the buffers from switching */ + __raw_spin_lock(&ftrace_max_lock); + buffer = global_trace.buffer; if (buffer) ring_buffer_record_disable(buffer); @@ -896,6 +903,8 @@ if (buffer) ring_buffer_record_disable(buffer); + __raw_spin_unlock(&ftrace_max_lock); + out: spin_unlock_irqrestore(&tracing_start_lock, flags); } @@ -1162,6 +1171,13 @@ if (!(trace_flags & TRACE_ITER_USERSTACKTRACE)) return; + /* + * NMIs can not handle page faults, even with fix ups. + * The save user stack can (and often does) fault. + */ + if (unlikely(in_nmi())) + return; + event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK, sizeof(*entry), flags, pc); if (!event) --- linux-2.6.32.orig/block/blk-timeout.c +++ linux-2.6.32/block/blk-timeout.c @@ -109,6 +109,7 @@ struct request_queue *q = (struct request_queue *) data; unsigned long flags, next = 0; struct request *rq, *tmp; + int next_set = 0; spin_lock_irqsave(q->queue_lock, flags); @@ -122,16 +123,13 @@ if (blk_mark_rq_complete(rq)) continue; blk_rq_timed_out(rq); - } else if (!next || time_after(next, rq->deadline)) + } else if (!next_set || time_after(next, rq->deadline)) { next = rq->deadline; + next_set = 1; + } } - /* - * next can never be 0 here with the list non-empty, since we always - * bump ->deadline to 1 so we can detect if the timer was ever added - * or not. See comment in blk_add_timer() - */ - if (next) + if (next_set) mod_timer(&q->timeout, round_jiffies_up(next)); spin_unlock_irqrestore(q->queue_lock, flags); --- linux-2.6.32.orig/block/blk-settings.c +++ linux-2.6.32/block/blk-settings.c @@ -8,6 +8,7 @@ #include #include /* for max_pfn/max_low_pfn */ #include +#include #include "blk.h" @@ -490,18 +491,31 @@ /** * blk_stack_limits - adjust queue_limits for stacked devices - * @t: the stacking driver limits (top) - * @b: the underlying queue limits (bottom) + * @t: the stacking driver limits (top device) + * @b: the underlying queue limits (bottom, component device) * @offset: offset to beginning of data within component device * * Description: - * Merges two queue_limit structs. Returns 0 if alignment didn't - * change. Returns -1 if adding the bottom device caused - * misalignment. + * This function is used by stacking drivers like MD and DM to ensure + * that all component devices have compatible block sizes and + * alignments. The stacking driver must provide a queue_limits + * struct (top) and then iteratively call the stacking function for + * all component (bottom) devices. The stacking function will + * attempt to combine the values and ensure proper alignment. + * + * Returns 0 if the top and bottom queue_limits are compatible. The + * top device's block sizes and alignment offsets may be adjusted to + * ensure alignment with the bottom device. If no compatible sizes + * and alignments exist, -1 is returned and the resulting top + * queue_limits will have the misaligned flag set to indicate that + * the alignment_offset is undefined. */ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t offset) { + sector_t alignment; + unsigned int top, bottom, ret = 0; + t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); t->bounce_pfn = min_not_zero(t->bounce_pfn, b->bounce_pfn); @@ -518,6 +532,26 @@ t->max_segment_size = min_not_zero(t->max_segment_size, b->max_segment_size); + t->misaligned |= b->misaligned; + + alignment = queue_limit_alignment_offset(b, offset); + + /* Bottom device has different alignment. Check that it is + * compatible with the current top alignment. + */ + if (t->alignment_offset != alignment) { + + top = max(t->physical_block_size, t->io_min) + + t->alignment_offset; + bottom = max(b->physical_block_size, b->io_min) + alignment; + + /* Verify that top and bottom intervals line up */ + if (max(top, bottom) & (min(top, bottom) - 1)) { + t->misaligned = 1; + ret = -1; + } + } + t->logical_block_size = max(t->logical_block_size, b->logical_block_size); @@ -525,41 +559,72 @@ b->physical_block_size); t->io_min = max(t->io_min, b->io_min); + t->io_opt = lcm(t->io_opt, b->io_opt); + t->no_cluster |= b->no_cluster; - /* Bottom device offset aligned? */ - if (offset && - (offset & (b->physical_block_size - 1)) != b->alignment_offset) { + /* Physical block size a multiple of the logical block size? */ + if (t->physical_block_size & (t->logical_block_size - 1)) { + t->physical_block_size = t->logical_block_size; t->misaligned = 1; - return -1; + ret = -1; } - /* If top has no alignment offset, inherit from bottom */ - if (!t->alignment_offset) - t->alignment_offset = - b->alignment_offset & (b->physical_block_size - 1); + /* Minimum I/O a multiple of the physical block size? */ + if (t->io_min & (t->physical_block_size - 1)) { + t->io_min = t->physical_block_size; + t->misaligned = 1; + ret = -1; + } - /* Top device aligned on logical block boundary? */ + /* Optimal I/O a multiple of the physical block size? */ + if (t->io_opt & (t->physical_block_size - 1)) { + t->io_opt = 0; + t->misaligned = 1; + ret = -1; + } + + /* Find lowest common alignment_offset */ + t->alignment_offset = lcm(t->alignment_offset, alignment) + & (max(t->physical_block_size, t->io_min) - 1); + + /* Verify that new alignment_offset is on a logical block boundary */ if (t->alignment_offset & (t->logical_block_size - 1)) { t->misaligned = 1; - return -1; + ret = -1; } - /* Find lcm() of optimal I/O size */ - if (t->io_opt && b->io_opt) - t->io_opt = (t->io_opt * b->io_opt) / gcd(t->io_opt, b->io_opt); - else if (b->io_opt) - t->io_opt = b->io_opt; - - /* Verify that optimal I/O size is a multiple of io_min */ - if (t->io_min && t->io_opt % t->io_min) - return -1; + /* Discard */ + t->max_discard_sectors = min_not_zero(t->max_discard_sectors, + b->max_discard_sectors); - return 0; + return ret; } EXPORT_SYMBOL(blk_stack_limits); /** + * bdev_stack_limits - adjust queue limits for stacked drivers + * @t: the stacking driver limits (top device) + * @bdev: the component block_device (bottom) + * @start: first data sector within component device + * + * Description: + * Merges queue limits for a top device and a block_device. Returns + * 0 if alignment didn't change. Returns -1 if adding the bottom + * device caused misalignment. + */ +int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev, + sector_t start) +{ + struct request_queue *bq = bdev_get_queue(bdev); + + start += get_start_sect(bdev); + + return blk_stack_limits(t, &bq->limits, start << 9); +} +EXPORT_SYMBOL(bdev_stack_limits); + +/** * disk_stack_limits - adjust queue limits for stacked drivers * @disk: MD/DM gendisk (top) * @bdev: the underlying block device (bottom) --- linux-2.6.32.orig/include/Kbuild +++ linux-2.6.32/include/Kbuild @@ -9,4 +9,3 @@ header-y += video/ header-y += drm/ header-y += xen/ -header-y += scsi/ --- linux-2.6.32.orig/include/linux/pci_ids.h +++ linux-2.6.32/include/linux/pci_ids.h @@ -1262,6 +1262,7 @@ #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 +#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA 0x0D85 #define PCI_VENDOR_ID_IMS 0x10e0 #define PCI_DEVICE_ID_IMS_TT128 0x9128 @@ -2290,6 +2291,20 @@ #define PCI_DEVICE_ID_MPC8536 0x0051 #define PCI_DEVICE_ID_P2020E 0x0070 #define PCI_DEVICE_ID_P2020 0x0071 +#define PCI_DEVICE_ID_P2010E 0x0078 +#define PCI_DEVICE_ID_P2010 0x0079 +#define PCI_DEVICE_ID_P1020E 0x0100 +#define PCI_DEVICE_ID_P1020 0x0101 +#define PCI_DEVICE_ID_P1011E 0x0108 +#define PCI_DEVICE_ID_P1011 0x0109 +#define PCI_DEVICE_ID_P1022E 0x0110 +#define PCI_DEVICE_ID_P1022 0x0111 +#define PCI_DEVICE_ID_P1013E 0x0118 +#define PCI_DEVICE_ID_P1013 0x0119 +#define PCI_DEVICE_ID_P4080E 0x0400 +#define PCI_DEVICE_ID_P4080 0x0401 +#define PCI_DEVICE_ID_P4040E 0x0408 +#define PCI_DEVICE_ID_P4040 0x0409 #define PCI_DEVICE_ID_MPC8641 0x7010 #define PCI_DEVICE_ID_MPC8641D 0x7011 #define PCI_DEVICE_ID_MPC8610 0x7018 @@ -2398,6 +2413,9 @@ #define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 +#define PCI_DEVICE_ID_INTEL_CPT_SMBUS 0x1c22 +#define PCI_DEVICE_ID_INTEL_CPT_LPC1 0x1c42 +#define PCI_DEVICE_ID_INTEL_CPT_LPC2 0x1c43 #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 #define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 #define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 --- linux-2.6.32.orig/include/linux/swap.h +++ linux-2.6.32/include/linux/swap.h @@ -177,6 +177,7 @@ unsigned int max; unsigned int inuse_pages; unsigned int old_block_size; + void (*notify_swap_entry_free_fn) (unsigned long); }; struct swap_list_t { @@ -323,6 +324,7 @@ extern int reuse_swap_page(struct page *); extern int try_to_free_swap(struct page *); struct backing_dev_info; +extern void set_notify_swap_entry_free(unsigned, void (*) (unsigned long)); /* linux/mm/thrash.c */ extern struct mm_struct *swap_token_mm; --- linux-2.6.32.orig/include/linux/security.h +++ linux-2.6.32/include/linux/security.h @@ -76,7 +76,7 @@ extern int cap_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp); extern int cap_task_setioprio(struct task_struct *p, int ioprio); extern int cap_task_setnice(struct task_struct *p, int nice); -extern int cap_syslog(int type); +extern int cap_syslog(int type, bool from_file); extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); struct msghdr; @@ -95,8 +95,13 @@ extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); extern int cap_netlink_recv(struct sk_buff *skb, int cap); +#ifdef CONFIG_MMU extern unsigned long mmap_min_addr; extern unsigned long dac_mmap_min_addr; +#else +#define dac_mmap_min_addr 0UL +#endif + /* * Values used in the task_security_ops calls */ @@ -121,6 +126,7 @@ #define LSM_UNSAFE_PTRACE 2 #define LSM_UNSAFE_PTRACE_CAP 4 +#ifdef CONFIG_MMU /* * If a hint addr is less than mmap_min_addr change hint to be as * low as possible but still greater than mmap_min_addr @@ -135,6 +141,7 @@ } extern int mmap_min_addr_handler(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); +#endif #ifdef CONFIG_SECURITY @@ -447,6 +454,22 @@ * @new_dir contains the path structure for parent of the new link. * @new_dentry contains the dentry structure of the new link. * Return 0 if permission is granted. + * @path_chmod: + * Check for permission to change DAC's permission of a file or directory. + * @dentry contains the dentry structure. + * @mnt contains the vfsmnt structure. + * @mode contains DAC's mode. + * Return 0 if permission is granted. + * @path_chown: + * Check for permission to change owner/group of a file or directory. + * @path contains the path structure. + * @uid contains new owner's ID. + * @gid contains new group's ID. + * Return 0 if permission is granted. + * @path_chroot: + * Check for permission to change root directory. + * @path contains the path structure. + * Return 0 if permission is granted. * @inode_readlink: * Check the permission to read the symbolic link. * @dentry contains the dentry structure for the file link. @@ -1324,6 +1347,7 @@ * logging to the console. * See the syslog(2) manual page for an explanation of the @type values. * @type contains the type of action. + * @from_file indicates the context of action (if it came from /proc). * Return 0 if permission is granted. * @settime: * Check permission to change the system time. @@ -1438,7 +1462,7 @@ int (*sysctl) (struct ctl_table *table, int op); int (*quotactl) (int cmds, int type, int id, struct super_block *sb); int (*quota_on) (struct dentry *dentry); - int (*syslog) (int type); + int (*syslog) (int type, bool from_file); int (*settime) (struct timespec *ts, struct timezone *tz); int (*vm_enough_memory) (struct mm_struct *mm, long pages); @@ -1488,6 +1512,10 @@ struct dentry *new_dentry); int (*path_rename) (struct path *old_dir, struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry); + int (*path_chmod) (struct dentry *dentry, struct vfsmount *mnt, + mode_t mode); + int (*path_chown) (struct path *path, uid_t uid, gid_t gid); + int (*path_chroot) (struct path *path); #endif int (*inode_alloc_security) (struct inode *inode); @@ -1733,7 +1761,7 @@ int security_sysctl(struct ctl_table *table, int op); int security_quotactl(int cmds, int type, int id, struct super_block *sb); int security_quota_on(struct dentry *dentry); -int security_syslog(int type); +int security_syslog(int type, bool from_file); int security_settime(struct timespec *ts, struct timezone *tz); int security_vm_enough_memory(long pages); int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); @@ -1979,9 +2007,9 @@ return 0; } -static inline int security_syslog(int type) +static inline int security_syslog(int type, bool from_file) { - return cap_syslog(type); + return cap_syslog(type, from_file); } static inline int security_settime(struct timespec *ts, struct timezone *tz) @@ -2952,6 +2980,10 @@ struct dentry *new_dentry); int security_path_rename(struct path *old_dir, struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry); +int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + mode_t mode); +int security_path_chown(struct path *path, uid_t uid, gid_t gid); +int security_path_chroot(struct path *path); #else /* CONFIG_SECURITY_PATH */ static inline int security_path_unlink(struct path *dir, struct dentry *dentry) { @@ -3001,6 +3033,23 @@ { return 0; } + +static inline int security_path_chmod(struct dentry *dentry, + struct vfsmount *mnt, + mode_t mode) +{ + return 0; +} + +static inline int security_path_chown(struct path *path, uid_t uid, gid_t gid) +{ + return 0; +} + +static inline int security_path_chroot(struct path *path) +{ + return 0; +} #endif /* CONFIG_SECURITY_PATH */ #ifdef CONFIG_KEYS --- linux-2.6.32.orig/include/linux/connector.h +++ linux-2.6.32/include/linux/connector.h @@ -24,9 +24,6 @@ #include -#define CN_IDX_CONNECTOR 0xffffffff -#define CN_VAL_CONNECTOR 0xffffffff - /* * Process Events connector unique ids -- used for message routing */ @@ -73,30 +70,6 @@ __u8 data[0]; }; -/* - * Notify structure - requests notification about - * registering/unregistering idx/val in range [first, first+range]. - */ -struct cn_notify_req { - __u32 first; - __u32 range; -}; - -/* - * Main notification control message - * *_notify_num - number of appropriate cn_notify_req structures after - * this struct. - * group - notification receiver's idx. - * len - total length of the attached data. - */ -struct cn_ctl_msg { - __u32 idx_notify_num; - __u32 val_notify_num; - __u32 group; - __u32 len; - __u8 data[0]; -}; - #ifdef __KERNEL__ #include @@ -149,11 +122,6 @@ u32 seq, group; }; -struct cn_ctl_entry { - struct list_head notify_entry; - struct cn_ctl_msg *msg; -}; - struct cn_dev { struct cb_id id; --- linux-2.6.32.orig/include/linux/writeback.h +++ linux-2.6.32/include/linux/writeback.h @@ -69,6 +69,7 @@ struct bdi_writeback; int inode_wait(void *); void writeback_inodes_sb(struct super_block *); +int writeback_inodes_sb_if_idle(struct super_block *); void sync_inodes_sb(struct super_block *); void writeback_inodes_wbc(struct writeback_control *wbc); long wb_do_writeback(struct bdi_writeback *wb, int force_wait); --- linux-2.6.32.orig/include/linux/audit.h +++ linux-2.6.32/include/linux/audit.h @@ -33,7 +33,7 @@ * 1200 - 1299 messages internal to the audit daemon * 1300 - 1399 audit event messages * 1400 - 1499 SE Linux use - * 1500 - 1599 kernel LSPP events + * 1500 - 1599 AppArmor use * 1600 - 1699 kernel crypto events * 1700 - 1799 kernel anomaly records * 1800 - 1899 kernel integrity events @@ -122,6 +122,14 @@ #define AUDIT_MAC_UNLBL_STCADD 1416 /* NetLabel: add a static label */ #define AUDIT_MAC_UNLBL_STCDEL 1417 /* NetLabel: del a static label */ +#define AUDIT_APPARMOR_AUDIT 1501 /* AppArmor audited grants */ +#define AUDIT_APPARMOR_ALLOWED 1502 /* Allowed Access for learning */ +#define AUDIT_APPARMOR_DENIED 1503 +#define AUDIT_APPARMOR_HINT 1504 /* Process Tracking information */ +#define AUDIT_APPARMOR_STATUS 1505 /* Changes in config */ +#define AUDIT_APPARMOR_ERROR 1506 /* Internal AppArmor Errors */ +#define AUDIT_APPARMOR_KILL 1507 /* AppArmor killing processes */ + #define AUDIT_FIRST_KERN_ANOM_MSG 1700 #define AUDIT_LAST_KERN_ANOM_MSG 1799 #define AUDIT_ANOM_PROMISCUOUS 1700 /* Device changed promiscuous mode */ --- linux-2.6.32.orig/include/linux/hrtimer.h +++ linux-2.6.32/include/linux/hrtimer.h @@ -162,10 +162,11 @@ * @expires_next: absolute time of the next event which was scheduled * via clock_set_next_event() * @hres_active: State of high resolution mode - * @check_clocks: Indictator, when set evaluate time source and clock - * event devices whether high resolution mode can be - * activated. - * @nr_events: Total number of timer interrupt events + * @hang_detected: The last hrtimer interrupt detected a hang + * @nr_events: Total number of hrtimer interrupt events + * @nr_retries: Total number of hrtimer interrupt retries + * @nr_hangs: Total number of hrtimer interrupt hangs + * @max_hang_time: Maximum time spent in hrtimer_interrupt */ struct hrtimer_cpu_base { spinlock_t lock; @@ -173,7 +174,11 @@ #ifdef CONFIG_HIGH_RES_TIMERS ktime_t expires_next; int hres_active; + int hang_detected; unsigned long nr_events; + unsigned long nr_retries; + unsigned long nr_hangs; + ktime_t max_hang_time; #endif }; @@ -446,7 +451,7 @@ static inline void timer_stats_account_hrtimer(struct hrtimer *timer) { - if (likely(!timer->start_site)) + if (likely(!timer_stats_active)) return; timer_stats_update_stats(timer, timer->start_pid, timer->start_site, timer->function, timer->start_comm, 0); @@ -457,8 +462,6 @@ static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer) { - if (likely(!timer_stats_active)) - return; __timer_stats_hrtimer_set_start_info(timer, __builtin_return_address(0)); } --- linux-2.6.32.orig/include/linux/init.h +++ linux-2.6.32/include/linux/init.h @@ -186,6 +186,7 @@ #define core_initcall(fn) __define_initcall("1",fn,1) #define core_initcall_sync(fn) __define_initcall("1s",fn,1s) +#define earlyrootfs_initcall(fn) __define_initcall("earlyrootfs",fn,rootfs) #define postcore_initcall(fn) __define_initcall("2",fn,2) #define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s) #define arch_initcall(fn) __define_initcall("3",fn,3) @@ -213,6 +214,8 @@ static initcall_t __initcall_##fn \ __used __section(.security_initcall.init) = fn +extern struct list_head populate_rootfs_domain; + struct obs_kernel_param { const char *str; int (*setup_func)(char *); --- linux-2.6.32.orig/include/linux/quota.h +++ linux-2.6.32/include/linux/quota.h @@ -313,8 +313,9 @@ int (*claim_space) (struct inode *, qsize_t); /* release rsved quota for delayed alloc */ void (*release_rsv) (struct inode *, qsize_t); - /* get reserved quota for delayed alloc */ - qsize_t (*get_reserved_space) (struct inode *); + /* get reserved quota for delayed alloc, value returned is managed by + * quota code only */ + qsize_t *(*get_reserved_space) (struct inode *); }; /* Operations handling requests from userspace */ --- linux-2.6.32.orig/include/linux/ata.h +++ linux-2.6.32/include/linux/ata.h @@ -1000,8 +1000,8 @@ static inline int lba_28_ok(u64 block, u32 n_block) { - /* check the ending block number */ - return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256); + /* check the ending block number: must be LESS THAN 0x0fffffff */ + return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256); } static inline int lba_48_ok(u64 block, u32 n_block) --- linux-2.6.32.orig/include/linux/libata.h +++ linux-2.6.32/include/linux/libata.h @@ -354,6 +354,9 @@ /* max tries if error condition is still set after ->error_handler */ ATA_EH_MAX_TRIES = 5, + /* sometimes resuming a link requires several retries */ + ATA_LINK_RESUME_TRIES = 5, + /* how hard are we gonna try to probe/recover devices */ ATA_PROBE_MAX_TRIES = 3, ATA_EH_DEV_TRIES = 3, --- linux-2.6.32.orig/include/linux/mm_types.h +++ linux-2.6.32/include/linux/mm_types.h @@ -206,6 +206,9 @@ unsigned long (*get_unmapped_area) (struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags); + unsigned long (*get_unmapped_exec_area) (struct file *filp, + unsigned long addr, unsigned long len, + unsigned long pgoff, unsigned long flags); void (*unmap_area) (struct mm_struct *mm, unsigned long addr); unsigned long mmap_base; /* base of mmap area */ unsigned long task_size; /* size of task vm space */ --- linux-2.6.32.orig/include/linux/hid.h +++ linux-2.6.32/include/linux/hid.h @@ -312,6 +312,7 @@ #define HID_QUIRK_MULTI_INPUT 0x00000040 #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 +#define HID_QUIRK_NO_INIT_REPORTS 0x20000000 /* * This is the global environment of the parser. This information is --- linux-2.6.32.orig/include/linux/namei.h +++ linux-2.6.32/include/linux/namei.h @@ -75,6 +75,9 @@ extern struct file *nameidata_to_filp(struct nameidata *nd, int flags); extern void release_open_intent(struct nameidata *); +extern struct dentry *lookup_hash(struct nameidata *nd); +extern int __lookup_one_len(const char *name, struct qstr *this, + struct dentry *base, int len); extern struct dentry *lookup_one_len(const char *, struct dentry *, int); extern struct dentry *lookup_one_noperm(const char *, struct dentry *); --- linux-2.6.32.orig/include/linux/kvm.h +++ linux-2.6.32/include/linux/kvm.h @@ -116,6 +116,11 @@ __u64 cr8; __u64 apic_base; +#ifdef __KVM_S390 + /* the processor status word for s390 */ + __u64 psw_mask; /* psw upper half */ + __u64 psw_addr; /* psw lower half */ +#endif union { /* KVM_EXIT_UNKNOWN */ struct { @@ -167,8 +172,6 @@ /* KVM_EXIT_S390_SIEIC */ struct { __u8 icptcode; - __u64 mask; /* psw upper half */ - __u64 addr; /* psw lower half */ __u16 ipa; __u32 ipb; } s390_sieic; @@ -436,6 +439,7 @@ #endif #define KVM_CAP_IOEVENTFD 36 #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 +#define KVM_CAP_ADJUST_CLOCK 39 #ifdef KVM_CAP_IRQ_ROUTING @@ -474,6 +478,7 @@ }; #endif +#define KVM_CAP_S390_PSW 42 #ifdef KVM_CAP_MCE /* x86 MCE */ @@ -497,6 +502,12 @@ __u8 pad[20]; }; +struct kvm_clock_data { + __u64 clock; + __u32 flags; + __u32 pad[9]; +}; + /* * ioctls for VM fds */ @@ -546,6 +557,8 @@ #define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config) #define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78) #define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd) +#define KVM_SET_CLOCK _IOW(KVMIO, 0x7b, struct kvm_clock_data) +#define KVM_GET_CLOCK _IOR(KVMIO, 0x7c, struct kvm_clock_data) /* * ioctls for vcpu fds --- linux-2.6.32.orig/include/linux/jbd2.h +++ linux-2.6.32/include/linux/jbd2.h @@ -653,6 +653,7 @@ * waiting for it to finish. */ unsigned int t_synchronous_commit:1; + unsigned int t_flushed_data_blocks:1; /* * For use by the filesystem to store fs-specific data --- linux-2.6.32.orig/include/linux/syscalls.h +++ linux-2.6.32/include/linux/syscalls.h @@ -153,7 +153,8 @@ #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) #define SYSCALL_TRACE_ENTER_EVENT(sname) \ - static struct ftrace_event_call event_enter_##sname; \ + static struct ftrace_event_call \ + __attribute__((__aligned__(4))) event_enter_##sname; \ struct trace_event enter_syscall_print_##sname = { \ .trace = print_syscall_enter, \ }; \ @@ -189,7 +190,8 @@ } #define SYSCALL_TRACE_EXIT_EVENT(sname) \ - static struct ftrace_event_call event_exit_##sname; \ + static struct ftrace_event_call \ + __attribute__((__aligned__(4))) event_exit_##sname; \ struct trace_event exit_syscall_print_##sname = { \ .trace = print_syscall_exit, \ }; \ @@ -879,4 +881,8 @@ asmlinkage long sys_perf_event_open( struct perf_event_attr __user *attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags); + +asmlinkage long sys_mmap_pgoff(unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long pgoff); #endif --- linux-2.6.32.orig/include/linux/enclosure.h +++ linux-2.6.32/include/linux/enclosure.h @@ -42,6 +42,8 @@ ENCLOSURE_STATUS_NOT_INSTALLED, ENCLOSURE_STATUS_UNKNOWN, ENCLOSURE_STATUS_UNAVAILABLE, + /* last element for counting purposes */ + ENCLOSURE_STATUS_MAX }; /* SFF-8485 activity light settings */ --- linux-2.6.32.orig/include/linux/irq.h +++ linux-2.6.32/include/linux/irq.h @@ -400,7 +400,9 @@ /* Dynamic irq helper functions */ extern void dynamic_irq_init(unsigned int irq); +void dynamic_irq_init_keep_chip_data(unsigned int irq); extern void dynamic_irq_cleanup(unsigned int irq); +void dynamic_irq_cleanup_keep_chip_data(unsigned int irq); /* Set/get chip/data for an IRQ: */ extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); --- linux-2.6.32.orig/include/linux/sysctl.h +++ linux-2.6.32/include/linux/sysctl.h @@ -490,6 +490,7 @@ NET_IPV4_CONF_PROMOTE_SECONDARIES=20, NET_IPV4_CONF_ARP_ACCEPT=21, NET_IPV4_CONF_ARP_NOTIFY=22, + NET_IPV4_CONF_SRC_VMARK=24, __NET_IPV4_CONF_MAX }; --- linux-2.6.32.orig/include/linux/nfs_fs_sb.h +++ linux-2.6.32/include/linux/nfs_fs_sb.h @@ -176,6 +176,7 @@ #define NFS_CAP_ATIME (1U << 11) #define NFS_CAP_CTIME (1U << 12) #define NFS_CAP_MTIME (1U << 13) +#define NFS_CAP_POSIX_LOCK (1U << 14) /* maximum number of slots to use */ --- linux-2.6.32.orig/include/linux/binfmts.h +++ linux-2.6.32/include/linux/binfmts.h @@ -101,6 +101,7 @@ extern int __must_check remove_arg_zero(struct linux_binprm *); extern int search_binary_handler(struct linux_binprm *,struct pt_regs *); extern int flush_old_exec(struct linux_binprm * bprm); +extern void setup_new_exec(struct linux_binprm * bprm); extern int suid_dumpable; #define SUID_DUMP_DISABLE 0 /* No setuid dumping */ --- linux-2.6.32.orig/include/linux/perf_event.h +++ linux-2.6.32/include/linux/perf_event.h @@ -219,7 +219,7 @@ #define PERF_EVENT_IOC_DISABLE _IO ('$', 1) #define PERF_EVENT_IOC_REFRESH _IO ('$', 2) #define PERF_EVENT_IOC_RESET _IO ('$', 3) -#define PERF_EVENT_IOC_PERIOD _IOW('$', 4, u64) +#define PERF_EVENT_IOC_PERIOD _IOW('$', 4, __u64) #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) enum perf_event_ioc_flags { --- linux-2.6.32.orig/include/linux/vmalloc.h +++ linux-2.6.32/include/linux/vmalloc.h @@ -115,9 +115,11 @@ extern struct vm_struct *vmlist; extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); +#ifndef CONFIG_HAVE_LEGACY_PER_CPU_AREA struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, const size_t *sizes, int nr_vms, size_t align, gfp_t gfp_mask); +#endif void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); --- linux-2.6.32.orig/include/linux/kvm_host.h +++ linux-2.6.32/include/linux/kvm_host.h @@ -53,7 +53,7 @@ */ struct kvm_io_bus { int dev_count; -#define NR_IOBUS_DEVS 6 +#define NR_IOBUS_DEVS 200 struct kvm_io_device *devs[NR_IOBUS_DEVS]; }; @@ -116,6 +116,11 @@ int user_alloc; }; +static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot) +{ + return ALIGN(memslot->npages, BITS_PER_LONG) / 8; +} + struct kvm_kernel_irq_routing_entry { u32 gsi; u32 type; @@ -266,6 +271,7 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn); void kvm_vcpu_block(struct kvm_vcpu *vcpu); +void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); void kvm_resched(struct kvm_vcpu *vcpu); void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); --- linux-2.6.32.orig/include/linux/list_sort.h +++ linux-2.6.32/include/linux/list_sort.h @@ -0,0 +1,11 @@ +#ifndef _LINUX_LIST_SORT_H +#define _LINUX_LIST_SORT_H + +#include + +struct list_head; + +void list_sort(void *priv, struct list_head *head, + int (*cmp)(void *priv, struct list_head *a, + struct list_head *b)); +#endif --- linux-2.6.32.orig/include/linux/cpumask.h +++ linux-2.6.32/include/linux/cpumask.h @@ -84,6 +84,7 @@ #define num_online_cpus() cpumask_weight(cpu_online_mask) #define num_possible_cpus() cpumask_weight(cpu_possible_mask) #define num_present_cpus() cpumask_weight(cpu_present_mask) +#define num_active_cpus() cpumask_weight(cpu_active_mask) #define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask) #define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask) #define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask) @@ -92,6 +93,7 @@ #define num_online_cpus() 1 #define num_possible_cpus() 1 #define num_present_cpus() 1 +#define num_active_cpus() 1 #define cpu_online(cpu) ((cpu) == 0) #define cpu_possible(cpu) ((cpu) == 0) #define cpu_present(cpu) ((cpu) == 0) --- linux-2.6.32.orig/include/linux/poison.h +++ linux-2.6.32/include/linux/poison.h @@ -2,13 +2,25 @@ #define _LINUX_POISON_H /********** include/linux/list.h **********/ + +/* + * Architectures might want to move the poison pointer offset + * into some well-recognized area such as 0xdead000000000000, + * that is also not mappable by user-space exploits: + */ +#ifdef CONFIG_ILLEGAL_POINTER_VALUE +# define POISON_POINTER_DELTA _AC(CONFIG_ILLEGAL_POINTER_VALUE, UL) +#else +# define POISON_POINTER_DELTA 0 +#endif + /* * These are non-NULL pointers that will result in page faults * under normal circumstances, used to verify that nobody uses * non-initialized list entries. */ -#define LIST_POISON1 ((void *) 0x00100100) -#define LIST_POISON2 ((void *) 0x00200200) +#define LIST_POISON1 ((void *) 0x00100100 + POISON_POINTER_DELTA) +#define LIST_POISON2 ((void *) 0x00200200 + POISON_POINTER_DELTA) /********** include/linux/timer.h **********/ /* @@ -36,6 +48,15 @@ #define POISON_FREE 0x6b /* for use-after-free poisoning */ #define POISON_END 0xa5 /* end-byte of poisoning */ +/********** mm/hugetlb.c **********/ +/* + * Private mappings of hugetlb pages use this poisoned value for + * page->mapping. The core VM should not be doing anything with this mapping + * but futex requires the existence of some page->mapping value even though it + * is unused if PAGE_MAPPING_ANON is set. + */ +#define HUGETLB_POISON ((void *)(0x00300300 + POISON_POINTER_DELTA + PAGE_MAPPING_ANON)) + /********** arch/$ARCH/mm/init.c **********/ #define POISON_FREE_INITMEM 0xcc --- linux-2.6.32.orig/include/linux/pci.h +++ linux-2.6.32/include/linux/pci.h @@ -564,6 +564,9 @@ resource_size_t); void pcibios_update_irq(struct pci_dev *, int irq); +/* Weak but can be overriden by arch */ +void pci_fixup_cardbus(struct pci_bus *); + /* Generic PCI functions used internally */ extern struct pci_bus *pci_find_bus(int domain, int busnr); @@ -942,6 +945,11 @@ } #endif /* CONFIG_PCI_DOMAINS */ +/* some architectures require additional setup to direct VGA traffic */ +typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode, + unsigned int command_bits, bool change_bridge); +extern void pci_register_set_vga_state(arch_set_vga_state_t func); + #else /* CONFIG_PCI is not enabled */ /* --- linux-2.6.32.orig/include/linux/ethtool.h +++ linux-2.6.32/include/linux/ethtool.h @@ -502,6 +502,7 @@ int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); int (*flash_device)(struct net_device *, struct ethtool_flash *); + int (*reset)(struct net_device *, u32 *); }; #endif /* __KERNEL__ */ @@ -559,6 +560,7 @@ #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ +#define ETHTOOL_RESET 0x00000034 /* Reset hardware */ /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET @@ -689,4 +691,34 @@ #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL +/* Reset flags */ +/* The reset() operation must clear the flags for the components which + * were actually reset. On successful return, the flags indicate the + * components which were not reset, either because they do not exist + * in the hardware or because they cannot be reset independently. The + * driver must never reset any components that were not requested. + */ +enum ethtool_reset_flags { + /* These flags represent components dedicated to the interface + * the command is addressed to. Shift any flag left by + * ETH_RESET_SHARED_SHIFT to reset a shared component of the + * same type. + */ + ETH_RESET_MGMT = 1 << 0, /* Management processor */ + ETH_RESET_IRQ = 1 << 1, /* Interrupt requester */ + ETH_RESET_DMA = 1 << 2, /* DMA engine */ + ETH_RESET_FILTER = 1 << 3, /* Filtering/flow direction */ + ETH_RESET_OFFLOAD = 1 << 4, /* Protocol offload */ + ETH_RESET_MAC = 1 << 5, /* Media access controller */ + ETH_RESET_PHY = 1 << 6, /* Transceiver/PHY */ + ETH_RESET_RAM = 1 << 7, /* RAM shared between + * multiple components */ + + ETH_RESET_DEDICATED = 0x0000ffff, /* All components dedicated to + * this interface */ + ETH_RESET_ALL = 0xffffffff, /* All components used by this + * interface, even if shared */ +}; +#define ETH_RESET_SHARED_SHIFT 16 + #endif /* _LINUX_ETHTOOL_H */ --- linux-2.6.32.orig/include/linux/inetdevice.h +++ linux-2.6.32/include/linux/inetdevice.h @@ -83,6 +83,7 @@ #define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) #define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING) #define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER) +#define IN_DEV_SRC_VMARK(in_dev) IN_DEV_ORCONF((in_dev), SRC_VMARK) #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ ACCEPT_SOURCE_ROUTE) #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) --- linux-2.6.32.orig/include/linux/freezer.h +++ linux-2.6.32/include/linux/freezer.h @@ -64,9 +64,12 @@ extern void cancel_freezing(struct task_struct *p); #ifdef CONFIG_CGROUP_FREEZER -extern int cgroup_frozen(struct task_struct *task); +extern int cgroup_freezing_or_frozen(struct task_struct *task); #else /* !CONFIG_CGROUP_FREEZER */ -static inline int cgroup_frozen(struct task_struct *task) { return 0; } +static inline int cgroup_freezing_or_frozen(struct task_struct *task) +{ + return 0; +} #endif /* !CONFIG_CGROUP_FREEZER */ /* --- linux-2.6.32.orig/include/linux/acpi.h +++ linux-2.6.32/include/linux/acpi.h @@ -251,8 +251,16 @@ void __init acpi_no_s4_hw_signature(void); void __init acpi_old_suspend_ordering(void); void __init acpi_s4_no_nvs(void); +void __init acpi_set_sci_en_on_resume(void); #endif /* CONFIG_PM_SLEEP */ +struct acpi_osc_context { + char *uuid_str; /* uuid string */ + int rev; + struct acpi_buffer cap; /* arg2/arg3 */ + struct acpi_buffer ret; /* free by caller if success */ +}; + #define OSC_QUERY_TYPE 0 #define OSC_SUPPORT_TYPE 1 #define OSC_CONTROL_TYPE 2 @@ -265,6 +273,15 @@ #define OSC_INVALID_REVISION_ERROR 8 #define OSC_CAPABILITIES_MASK_ERROR 16 +acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); + +/* platform-wide _OSC bits */ +#define OSC_SB_PAD_SUPPORT 1 +#define OSC_SB_PPC_OST_SUPPORT 2 +#define OSC_SB_PR3_SUPPORT 4 +#define OSC_SB_CPUHP_OST_SUPPORT 8 +#define OSC_SB_APEI_SUPPORT 16 + /* _OSC DW1 Definition (OS Support Fields) */ #define OSC_EXT_PCI_CONFIG_SUPPORT 1 #define OSC_ACTIVE_STATE_PWR_SUPPORT 2 --- linux-2.6.32.orig/include/linux/splice.h +++ linux-2.6.32/include/linux/splice.h @@ -82,4 +82,10 @@ extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *, splice_direct_actor *); +extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags); +extern long do_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); + #endif --- linux-2.6.32.orig/include/linux/syslog.h +++ linux-2.6.32/include/linux/syslog.h @@ -0,0 +1,29 @@ +/* Syslog internals + * + * Copyright 2010 Canonical, Ltd. + * Author: Kees Cook + * + * 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; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef _LINUX_SYSLOG_H +#define _LINUX_SYSLOG_H + +#define SYSLOG_FROM_CALL 0 +#define SYSLOG_FROM_FILE 1 + +int do_syslog(int type, char __user *buf, int count, bool from_file); + +#endif /* _LINUX_SYSLOG_H */ --- linux-2.6.32.orig/include/linux/resource.h +++ linux-2.6.32/include/linux/resource.h @@ -3,8 +3,6 @@ #include -struct task_struct; - /* * Resource control/accounting header file for linux */ @@ -55,8 +53,11 @@ /* * Limit the stack by to some sane default: root can always * increase this limit if needed.. 8MB seems reasonable. + * + * (2MB more to cover randomization effects.) */ -#define _STK_LIM (8*1024*1024) +#define _STK_LIM (10*1024*1024) +#define EXEC_STACK_BIAS (2*1024*1024) /* * GPG2 wants 64kB of mlocked memory, to make sure pass phrases @@ -70,6 +71,12 @@ */ #include +#ifdef __KERNEL__ + +struct task_struct; + int getrusage(struct task_struct *p, int who, struct rusage __user *ru); +#endif /* __KERNEL__ */ + #endif --- linux-2.6.32.orig/include/linux/module.h +++ linux-2.6.32/include/linux/module.h @@ -724,4 +724,13 @@ static inline void module_bug_cleanup(struct module *mod) {} #endif /* CONFIG_GENERIC_BUG */ +/* + * Establish a symbolic link between 2 modules so that depmod + * and modprobe do the heavy lifting of loading the modules in the + * correct dependency order. + */ +#define MODULE_EXPORT(mod_name) int sym_link_##mod_name; EXPORT_SYMBOL(sym_link_##mod_name); +#define MODULE_IMPORT(mod_name) extern int sym_link_##mod_name; int func_sym_link_##mod_name(void) {sym_link_##mod_name=1;}; EXPORT_SYMBOL(func_sym_link_##mod_name); + + #endif /* _LINUX_MODULE_H */ --- linux-2.6.32.orig/include/linux/lcm.h +++ linux-2.6.32/include/linux/lcm.h @@ -0,0 +1,8 @@ +#ifndef _LCM_H +#define _LCM_H + +#include + +unsigned long lcm(unsigned long a, unsigned long b) __attribute_const__; + +#endif /* _LCM_H */ --- linux-2.6.32.orig/include/linux/if_vlan.h +++ linux-2.6.32/include/linux/if_vlan.h @@ -115,10 +115,12 @@ extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, u16 vlan_tci, int polling); extern int vlan_hwaccel_do_receive(struct sk_buff *skb); -extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, - unsigned int vlan_tci, struct sk_buff *skb); -extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, - unsigned int vlan_tci); +extern gro_result_t +vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci, struct sk_buff *skb); +extern gro_result_t +vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci); #else static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) @@ -145,17 +147,18 @@ return 0; } -static inline int vlan_gro_receive(struct napi_struct *napi, - struct vlan_group *grp, - unsigned int vlan_tci, struct sk_buff *skb) +static inline gro_result_t +vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci, struct sk_buff *skb) { - return NET_RX_DROP; + return GRO_DROP; } -static inline int vlan_gro_frags(struct napi_struct *napi, - struct vlan_group *grp, unsigned int vlan_tci) +static inline gro_result_t +vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci) { - return NET_RX_DROP; + return GRO_DROP; } #endif --- linux-2.6.32.orig/include/linux/netdevice.h +++ linux-2.6.32/include/linux/netdevice.h @@ -348,13 +348,14 @@ NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ }; -enum { +enum gro_result { GRO_MERGED, GRO_MERGED_FREE, GRO_HELD, GRO_NORMAL, GRO_DROP, }; +typedef enum gro_result gro_result_t; extern void __napi_schedule(struct napi_struct *n); @@ -1467,18 +1468,19 @@ #define HAVE_NETIF_RECEIVE_SKB 1 extern int netif_receive_skb(struct sk_buff *skb); extern void napi_gro_flush(struct napi_struct *napi); -extern int dev_gro_receive(struct napi_struct *napi, +extern gro_result_t dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb); -extern int napi_skb_finish(int ret, struct sk_buff *skb); -extern int napi_gro_receive(struct napi_struct *napi, +extern gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb); +extern gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb); extern void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb); extern struct sk_buff * napi_get_frags(struct napi_struct *napi); -extern int napi_frags_finish(struct napi_struct *napi, - struct sk_buff *skb, int ret); +extern gro_result_t napi_frags_finish(struct napi_struct *napi, + struct sk_buff *skb, + gro_result_t ret); extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); -extern int napi_gro_frags(struct napi_struct *napi); +extern gro_result_t napi_gro_frags(struct napi_struct *napi); static inline void napi_free_frags(struct napi_struct *napi) { --- linux-2.6.32.orig/include/linux/input.h +++ linux-2.6.32/include/linux/input.h @@ -595,6 +595,48 @@ #define KEY_NUMERIC_STAR 0x20a #define KEY_NUMERIC_POUND 0x20b +#define BTN_TRIGGER_HAPPY 0x2c0 +#define BTN_TRIGGER_HAPPY1 0x2c0 +#define BTN_TRIGGER_HAPPY2 0x2c1 +#define BTN_TRIGGER_HAPPY3 0x2c2 +#define BTN_TRIGGER_HAPPY4 0x2c3 +#define BTN_TRIGGER_HAPPY5 0x2c4 +#define BTN_TRIGGER_HAPPY6 0x2c5 +#define BTN_TRIGGER_HAPPY7 0x2c6 +#define BTN_TRIGGER_HAPPY8 0x2c7 +#define BTN_TRIGGER_HAPPY9 0x2c8 +#define BTN_TRIGGER_HAPPY10 0x2c9 +#define BTN_TRIGGER_HAPPY11 0x2ca +#define BTN_TRIGGER_HAPPY12 0x2cb +#define BTN_TRIGGER_HAPPY13 0x2cc +#define BTN_TRIGGER_HAPPY14 0x2cd +#define BTN_TRIGGER_HAPPY15 0x2ce +#define BTN_TRIGGER_HAPPY16 0x2cf +#define BTN_TRIGGER_HAPPY17 0x2d0 +#define BTN_TRIGGER_HAPPY18 0x2d1 +#define BTN_TRIGGER_HAPPY19 0x2d2 +#define BTN_TRIGGER_HAPPY20 0x2d3 +#define BTN_TRIGGER_HAPPY21 0x2d4 +#define BTN_TRIGGER_HAPPY22 0x2d5 +#define BTN_TRIGGER_HAPPY23 0x2d6 +#define BTN_TRIGGER_HAPPY24 0x2d7 +#define BTN_TRIGGER_HAPPY25 0x2d8 +#define BTN_TRIGGER_HAPPY26 0x2d9 +#define BTN_TRIGGER_HAPPY27 0x2da +#define BTN_TRIGGER_HAPPY28 0x2db +#define BTN_TRIGGER_HAPPY29 0x2dc +#define BTN_TRIGGER_HAPPY30 0x2dd +#define BTN_TRIGGER_HAPPY31 0x2de +#define BTN_TRIGGER_HAPPY32 0x2df +#define BTN_TRIGGER_HAPPY33 0x2e0 +#define BTN_TRIGGER_HAPPY34 0x2e1 +#define BTN_TRIGGER_HAPPY35 0x2e2 +#define BTN_TRIGGER_HAPPY36 0x2e3 +#define BTN_TRIGGER_HAPPY37 0x2e4 +#define BTN_TRIGGER_HAPPY38 0x2e5 +#define BTN_TRIGGER_HAPPY39 0x2e6 +#define BTN_TRIGGER_HAPPY40 0x2e7 + /* We avoid low common keys in module aliases so they don't get huge. */ #define KEY_MIN_INTERESTING KEY_MUTE #define KEY_MAX 0x2ff @@ -658,6 +700,7 @@ #define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */ #define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */ #define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */ +#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */ #define ABS_MAX 0x3f #define ABS_CNT (ABS_MAX+1) @@ -1118,6 +1161,7 @@ int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle *grab; + struct input_handle *filter; spinlock_t event_lock; struct mutex mutex; @@ -1218,6 +1262,7 @@ void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); + bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); @@ -1295,6 +1340,9 @@ int input_grab_device(struct input_handle *); void input_release_device(struct input_handle *); +int input_filter_device(struct input_handle *); +void input_unfilter_device(struct input_handle *); + int input_open_device(struct input_handle *); void input_close_device(struct input_handle *); --- linux-2.6.32.orig/include/linux/tty.h +++ linux-2.6.32/include/linux/tty.h @@ -68,6 +68,17 @@ unsigned long data[0]; }; +/* + * We default to dicing tty buffer allocations to this many characters + * in order to avoid multiple page allocations. We know the size of + * tty_buffer itself but it must also be taken into account that the + * the buffer is 256 byte aligned. See tty_buffer_find for the allocation + * logic this must match + */ + +#define TTY_BUFFER_PAGE (((PAGE_SIZE - sizeof(struct tty_buffer)) / 2) & ~0xFF) + + struct tty_bufhead { struct delayed_work work; spinlock_t lock; --- linux-2.6.32.orig/include/linux/fs.h +++ linux-2.6.32/include/linux/fs.h @@ -87,6 +87,9 @@ */ #define FMODE_NOCMTIME ((__force fmode_t)2048) +/* Expect random access pattern */ +#define FMODE_RANDOM ((__force fmode_t)4096) + /* * The below are the various read and write types that we support. Some of * them include behavioral modifiers that send information down to the @@ -1970,6 +1973,7 @@ return 0; } #endif +extern void sync_filesystems(int wait); extern int sync_filesystem(struct super_block *); extern const struct file_operations def_blk_fops; extern const struct file_operations def_chr_fops; @@ -2222,6 +2226,7 @@ /* fs/block_dev.c */ extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, unsigned long nr_segs, loff_t pos); +extern int block_fsync(struct file *filp, struct dentry *dentry, int datasync); /* fs/splice.c */ extern ssize_t generic_file_splice_read(struct file *, loff_t *, @@ -2314,6 +2319,7 @@ extern int generic_readlink(struct dentry *, char __user *, int); extern void generic_fillattr(struct inode *, struct kstat *); extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); +void __inode_add_bytes(struct inode *inode, loff_t bytes); void inode_add_bytes(struct inode *inode, loff_t bytes); void inode_sub_bytes(struct inode *inode, loff_t bytes); loff_t inode_get_bytes(struct inode *inode); --- linux-2.6.32.orig/include/linux/blkdev.h +++ linux-2.6.32/include/linux/blkdev.h @@ -942,6 +942,8 @@ extern void blk_set_default_limits(struct queue_limits *lim); extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t offset); +extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev, + sector_t offset); extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, sector_t offset); extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); @@ -1114,11 +1116,18 @@ return q->limits.alignment_offset; } +static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t offset) +{ + unsigned int granularity = max(lim->physical_block_size, lim->io_min); + + offset &= granularity - 1; + return (granularity + lim->alignment_offset - offset) & (granularity - 1); +} + static inline int queue_sector_alignment_offset(struct request_queue *q, sector_t sector) { - return ((sector << 9) - q->limits.alignment_offset) - & (q->limits.io_min - 1); + return queue_limit_alignment_offset(&q->limits, sector << 9); } static inline int bdev_alignment_offset(struct block_device *bdev) --- linux-2.6.32.orig/include/linux/pagemap.h +++ linux-2.6.32/include/linux/pagemap.h @@ -253,6 +253,8 @@ extern struct page * read_cache_page(struct address_space *mapping, pgoff_t index, filler_t *filler, void *data); +extern struct page * read_cache_page_gfp(struct address_space *mapping, + pgoff_t index, gfp_t gfp_mask); extern int read_cache_pages(struct address_space *mapping, struct list_head *pages, filler_t *filler, void *data); --- linux-2.6.32.orig/include/linux/mm.h +++ linux-2.6.32/include/linux/mm.h @@ -1129,7 +1129,15 @@ unsigned long addr, unsigned long len, unsigned long flags, struct page **pages); -extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); +extern unsigned long get_unmapped_area_prot(struct file *, unsigned long, + unsigned long, unsigned long, unsigned long, int); + +static inline unsigned long get_unmapped_area(struct file *file, + unsigned long addr, unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + return get_unmapped_area_prot(file, addr, len, pgoff, flags, 0); +} extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, --- linux-2.6.32.orig/include/linux/quotaops.h +++ linux-2.6.32/include/linux/quotaops.h @@ -26,6 +26,10 @@ sb->s_qcop->quota_sync(sb, type); } +void inode_add_rsv_space(struct inode *inode, qsize_t number); +void inode_claim_rsv_space(struct inode *inode, qsize_t number); +void inode_sub_rsv_space(struct inode *inode, qsize_t number); + int dquot_initialize(struct inode *inode, int type); int dquot_drop(struct inode *inode); struct dquot *dqget(struct super_block *sb, unsigned int id, int type); @@ -42,7 +46,6 @@ int dquot_reserve_space(struct inode *inode, qsize_t number, int prealloc); int dquot_claim_space(struct inode *inode, qsize_t number); void dquot_release_reserved_space(struct inode *inode, qsize_t number); -qsize_t dquot_get_reserved_space(struct inode *inode); int dquot_free_space(struct inode *inode, qsize_t number); int dquot_free_inode(const struct inode *inode, qsize_t number); @@ -199,6 +202,8 @@ if (inode->i_sb->dq_op->reserve_space(inode, nr, 0) == NO_QUOTA) return 1; } + else + inode_add_rsv_space(inode, nr); return 0; } @@ -221,7 +226,7 @@ if (inode->i_sb->dq_op->claim_space(inode, nr) == NO_QUOTA) return 1; } else - inode_add_bytes(inode, nr); + inode_claim_rsv_space(inode, nr); mark_inode_dirty(inode); return 0; @@ -235,6 +240,8 @@ { if (sb_any_quota_active(inode->i_sb)) inode->i_sb->dq_op->release_rsv(inode, nr); + else + inode_sub_rsv_space(inode, nr); } static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr) --- linux-2.6.32.orig/include/linux/time.h +++ linux-2.6.32/include/linux/time.h @@ -148,6 +148,7 @@ extern struct timespec timespec_trunc(struct timespec t, unsigned gran); extern int timekeeping_valid_for_hres(void); +extern u64 timekeeping_max_deferment(void); extern void update_wall_time(void); extern void update_xtime_cache(u64 nsec); extern void timekeeping_leap_insert(int leapsecond); --- linux-2.6.32.orig/include/linux/usb_usual.h +++ linux-2.6.32/include/linux/usb_usual.h @@ -56,7 +56,9 @@ US_FLAG(SANE_SENSE, 0x00008000) \ /* Sane Sense (> 18 bytes) */ \ US_FLAG(CAPACITY_OK, 0x00010000) \ - /* READ CAPACITY response is correct */ + /* READ CAPACITY response is correct */ \ + US_FLAG(BAD_SENSE, 0x00020000) \ + /* Bad Sense (never more than 18 bytes) */ #define US_FLAG(name, value) US_FL_##name = value , enum { US_DO_ALL_FLAGS }; --- linux-2.6.32.orig/include/linux/sched.h +++ linux-2.6.32/include/linux/sched.h @@ -379,6 +379,9 @@ arch_get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); extern unsigned long +arch_get_unmapped_exec_area(struct file *, unsigned long, unsigned long, + unsigned long, unsigned long); +extern unsigned long arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags); @@ -864,7 +867,10 @@ if (sched_smt_power_savings) return SD_POWERSAVINGS_BALANCE; - return SD_PREFER_SIBLING; + if (!sched_mc_power_savings) + return SD_PREFER_SIBLING; + + return 0; } static inline int sd_balance_for_package_power(void) @@ -1354,7 +1360,7 @@ char comm[TASK_COMM_LEN]; /* executable name excluding path - access with [gs]et_task_comm (which lock it with task_lock()) - - initialized normally by flush_old_exec */ + - initialized normally by setup_new_exec */ /* file system info */ int link_count, total_link_count; #ifdef CONFIG_SYSVIPC @@ -1538,7 +1544,6 @@ /* bitmask of trace recursion */ unsigned long trace_recursion; #endif /* CONFIG_TRACING */ - unsigned long stack_start; }; /* Future-safe accessor for struct task_struct's cpus_allowed. */ @@ -2086,11 +2091,18 @@ return info <= SEND_SIG_FORCED; } -/* True if we are on the alternate signal stack. */ - +/* + * True if we are on the alternate signal stack. + */ static inline int on_sig_stack(unsigned long sp) { - return (sp - current->sas_ss_sp < current->sas_ss_size); +#ifdef CONFIG_STACK_GROWSUP + return sp >= current->sas_ss_sp && + sp - current->sas_ss_sp < current->sas_ss_size; +#else + return sp > current->sas_ss_sp && + sp - current->sas_ss_sp <= current->sas_ss_size; +#endif } static inline int sas_ss_flags(unsigned long sp) @@ -2576,6 +2588,28 @@ #define TASK_STATE_TO_CHAR_STR "RSDTtZX" +static inline unsigned long task_rlimit(const struct task_struct *tsk, + unsigned int limit) +{ + return ACCESS_ONCE(tsk->signal->rlim[limit].rlim_cur); +} + +static inline unsigned long task_rlimit_max(const struct task_struct *tsk, + unsigned int limit) +{ + return ACCESS_ONCE(tsk->signal->rlim[limit].rlim_max); +} + +static inline unsigned long rlimit(unsigned int limit) +{ + return task_rlimit(current, limit); +} + +static inline unsigned long rlimit_max(unsigned int limit) +{ + return task_rlimit_max(current, limit); +} + #endif /* __KERNEL__ */ #endif --- linux-2.6.32.orig/include/linux/if_tunnel.h +++ linux-2.6.32/include/linux/if_tunnel.h @@ -2,6 +2,7 @@ #define _IF_TUNNEL_H_ #include +#include #ifdef __KERNEL__ #include --- linux-2.6.32.orig/include/linux/clocksource.h +++ linux-2.6.32/include/linux/clocksource.h @@ -151,6 +151,7 @@ * subtraction of non 64 bit counters * @mult: cycle to nanosecond multiplier * @shift: cycle to nanosecond divisor (power of two) + * @max_idle_ns: max idle time permitted by the clocksource (nsecs) * @flags: flags describing special properties * @vread: vsyscall based read * @resume: resume function for the clocksource, if necessary @@ -168,6 +169,7 @@ cycle_t mask; u32 mult; u32 shift; + u64 max_idle_ns; unsigned long flags; cycle_t (*vread)(void); void (*resume)(void); --- linux-2.6.32.orig/include/linux/decompress/mm.h +++ linux-2.6.32/include/linux/decompress/mm.h @@ -14,11 +14,21 @@ /* Code active when included from pre-boot environment: */ +/* + * Some architectures want to ensure there is no local data in their + * pre-boot environment, so that data can arbitarily relocated (via + * GOT references). This is achieved by defining STATIC_RW_DATA to + * be null. + */ +#ifndef STATIC_RW_DATA +#define STATIC_RW_DATA static +#endif + /* A trivial malloc implementation, adapted from * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 */ -static unsigned long malloc_ptr; -static int malloc_count; +STATIC_RW_DATA unsigned long malloc_ptr; +STATIC_RW_DATA int malloc_count; static void *malloc(int size) { --- linux-2.6.32.orig/include/linux/netfilter/Kbuild +++ linux-2.6.32/include/linux/netfilter/Kbuild @@ -38,6 +38,8 @@ header-y += xt_pkttype.h header-y += xt_quota.h header-y += xt_rateest.h +header-y += xt_policy.h +header-y += xt_quota.h header-y += xt_realm.h header-y += xt_recent.h header-y += xt_sctp.h --- linux-2.6.32.orig/include/linux/netfilter/xt_recent.h +++ linux-2.6.32/include/linux/netfilter/xt_recent.h @@ -9,6 +9,7 @@ XT_RECENT_UPDATE = 1 << 2, XT_RECENT_REMOVE = 1 << 3, XT_RECENT_TTL = 1 << 4, + XT_RECENT_REAP = 1 << 5, XT_RECENT_SOURCE = 0, XT_RECENT_DEST = 1, @@ -16,6 +17,9 @@ XT_RECENT_NAME_LEN = 200, }; +/* Only allowed with --rcheck and --update */ +#define XT_RECENT_MODIFIERS (XT_RECENT_TTL|XT_RECENT_REAP) + struct xt_recent_mtinfo { __u32 seconds; __u32 hit_count; --- linux-2.6.32.orig/include/linux/mfd/wm8350/pmic.h +++ linux-2.6.32/include/linux/mfd/wm8350/pmic.h @@ -666,20 +666,20 @@ #define WM8350_ISINK_FLASH_DUR_64MS (1 << 8) #define WM8350_ISINK_FLASH_DUR_96MS (2 << 8) #define WM8350_ISINK_FLASH_DUR_1024MS (3 << 8) -#define WM8350_ISINK_FLASH_ON_INSTANT (0 << 4) -#define WM8350_ISINK_FLASH_ON_0_25S (1 << 4) -#define WM8350_ISINK_FLASH_ON_0_50S (2 << 4) -#define WM8350_ISINK_FLASH_ON_1_00S (3 << 4) -#define WM8350_ISINK_FLASH_ON_1_95S (1 << 4) -#define WM8350_ISINK_FLASH_ON_3_91S (2 << 4) -#define WM8350_ISINK_FLASH_ON_7_80S (3 << 4) -#define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 0) -#define WM8350_ISINK_FLASH_OFF_0_25S (1 << 0) -#define WM8350_ISINK_FLASH_OFF_0_50S (2 << 0) -#define WM8350_ISINK_FLASH_OFF_1_00S (3 << 0) -#define WM8350_ISINK_FLASH_OFF_1_95S (1 << 0) -#define WM8350_ISINK_FLASH_OFF_3_91S (2 << 0) -#define WM8350_ISINK_FLASH_OFF_7_80S (3 << 0) +#define WM8350_ISINK_FLASH_ON_INSTANT (0 << 0) +#define WM8350_ISINK_FLASH_ON_0_25S (1 << 0) +#define WM8350_ISINK_FLASH_ON_0_50S (2 << 0) +#define WM8350_ISINK_FLASH_ON_1_00S (3 << 0) +#define WM8350_ISINK_FLASH_ON_1_95S (1 << 0) +#define WM8350_ISINK_FLASH_ON_3_91S (2 << 0) +#define WM8350_ISINK_FLASH_ON_7_80S (3 << 0) +#define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 4) +#define WM8350_ISINK_FLASH_OFF_0_25S (1 << 4) +#define WM8350_ISINK_FLASH_OFF_0_50S (2 << 4) +#define WM8350_ISINK_FLASH_OFF_1_00S (3 << 4) +#define WM8350_ISINK_FLASH_OFF_1_95S (1 << 4) +#define WM8350_ISINK_FLASH_OFF_3_91S (2 << 4) +#define WM8350_ISINK_FLASH_OFF_7_80S (3 << 4) /* * Regulator Interrupts. --- linux-2.6.32.orig/include/acpi/platform/aclinux.h +++ linux-2.6.32/include/acpi/platform/aclinux.h @@ -152,7 +152,7 @@ #include #define ACPI_PREEMPTION_POINT() \ do { \ - if (!in_atomic_preempt_off()) \ + if (!in_atomic_preempt_off() && !irqs_disabled()) \ cond_resched(); \ } while (0) --- linux-2.6.32.orig/include/drm/radeon_drm.h +++ linux-2.6.32/include/drm/radeon_drm.h @@ -33,7 +33,7 @@ #ifndef __RADEON_DRM_H__ #define __RADEON_DRM_H__ -#include +#include "drm.h" /* WARNING: If you change any of these defines, make sure to change the * defines in the X server file (radeon_sarea.h) --- linux-2.6.32.orig/include/drm/i915_drm.h +++ linux-2.6.32/include/drm/i915_drm.h @@ -27,11 +27,11 @@ #ifndef _I915_DRM_H_ #define _I915_DRM_H_ +#include "drm.h" + /* Please note that modifications to all structs defined here are * subject to backwards-compatibility constraints. */ -#include -#include "drm.h" /* Each region is a minimum of 16k, and there are at most 255 of them. */ @@ -186,6 +186,9 @@ #define DRM_I915_GEM_MMAP_GTT 0x24 #define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25 #define DRM_I915_GEM_MADVISE 0x26 +#define DRM_I915_OVERLAY_PUT_IMAGE 0x27 +#define DRM_I915_OVERLAY_ATTRS 0x28 +#define DRM_I915_GEM_EXECBUFFER2 0x29 #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) @@ -205,6 +208,7 @@ #define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t) #define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init) #define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer) +#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2) #define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin) #define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin) #define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy) @@ -221,8 +225,10 @@ #define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) #define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) #define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) -#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_intel_get_pipe_from_crtc_id) +#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) #define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) +#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_IOCTL_I915_OVERLAY_ATTRS, struct drm_intel_overlay_put_image) +#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) /* Allow drivers to submit batchbuffers directly to hardware, relying * on the security mechanisms provided by hardware. @@ -266,6 +272,9 @@ #define I915_PARAM_CHIPSET_ID 4 #define I915_PARAM_HAS_GEM 5 #define I915_PARAM_NUM_FENCES_AVAIL 6 +#define I915_PARAM_HAS_OVERLAY 7 +#define I915_PARAM_HAS_PAGEFLIPPING 8 +#define I915_PARAM_HAS_EXECBUF2 9 typedef struct drm_i915_getparam { int param; @@ -561,6 +570,57 @@ __u64 cliprects_ptr; }; +struct drm_i915_gem_exec_object2 { + /** + * User's handle for a buffer to be bound into the GTT for this + * operation. + */ + __u32 handle; + + /** Number of relocations to be performed on this buffer */ + __u32 relocation_count; + /** + * Pointer to array of struct drm_i915_gem_relocation_entry containing + * the relocations to be performed in this buffer. + */ + __u64 relocs_ptr; + + /** Required alignment in graphics aperture */ + __u64 alignment; + + /** + * Returned value of the updated offset of the object, for future + * presumed_offset writes. + */ + __u64 offset; + +#define EXEC_OBJECT_NEEDS_FENCE (1<<0) + __u64 flags; + __u64 rsvd1; + __u64 rsvd2; +}; + +struct drm_i915_gem_execbuffer2 { + /** + * List of gem_exec_object2 structs + */ + __u64 buffers_ptr; + __u32 buffer_count; + + /** Offset in the batchbuffer to start execution from. */ + __u32 batch_start_offset; + /** Bytes used in batchbuffer from batch_start_offset */ + __u32 batch_len; + __u32 DR1; + __u32 DR4; + __u32 num_cliprects; + /** This is a struct drm_clip_rect *cliprects */ + __u64 cliprects_ptr; + __u64 flags; /* currently unused */ + __u64 rsvd1; + __u64 rsvd2; +}; + struct drm_i915_gem_pin { /** Handle of the buffer to be pinned. */ __u32 handle; @@ -686,4 +746,70 @@ __u32 retained; }; +/* flags */ +#define I915_OVERLAY_TYPE_MASK 0xff +#define I915_OVERLAY_YUV_PLANAR 0x01 +#define I915_OVERLAY_YUV_PACKED 0x02 +#define I915_OVERLAY_RGB 0x03 + +#define I915_OVERLAY_DEPTH_MASK 0xff00 +#define I915_OVERLAY_RGB24 0x1000 +#define I915_OVERLAY_RGB16 0x2000 +#define I915_OVERLAY_RGB15 0x3000 +#define I915_OVERLAY_YUV422 0x0100 +#define I915_OVERLAY_YUV411 0x0200 +#define I915_OVERLAY_YUV420 0x0300 +#define I915_OVERLAY_YUV410 0x0400 + +#define I915_OVERLAY_SWAP_MASK 0xff0000 +#define I915_OVERLAY_NO_SWAP 0x000000 +#define I915_OVERLAY_UV_SWAP 0x010000 +#define I915_OVERLAY_Y_SWAP 0x020000 +#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000 + +#define I915_OVERLAY_FLAGS_MASK 0xff000000 +#define I915_OVERLAY_ENABLE 0x01000000 + +struct drm_intel_overlay_put_image { + /* various flags and src format description */ + __u32 flags; + /* source picture description */ + __u32 bo_handle; + /* stride values and offsets are in bytes, buffer relative */ + __u16 stride_Y; /* stride for packed formats */ + __u16 stride_UV; + __u32 offset_Y; /* offset for packet formats */ + __u32 offset_U; + __u32 offset_V; + /* in pixels */ + __u16 src_width; + __u16 src_height; + /* to compensate the scaling factors for partially covered surfaces */ + __u16 src_scan_width; + __u16 src_scan_height; + /* output crtc description */ + __u32 crtc_id; + __u16 dst_x; + __u16 dst_y; + __u16 dst_width; + __u16 dst_height; +}; + +/* flags */ +#define I915_OVERLAY_UPDATE_ATTRS (1<<0) +#define I915_OVERLAY_UPDATE_GAMMA (1<<1) +struct drm_intel_overlay_attrs { + __u32 flags; + __u32 color_key; + __s32 brightness; + __u32 contrast; + __u32 saturation; + __u32 gamma0; + __u32 gamma1; + __u32 gamma2; + __u32 gamma3; + __u32 gamma4; + __u32 gamma5; +}; + #endif /* _I915_DRM_H_ */ --- linux-2.6.32.orig/include/drm/drm_crtc.h +++ linux-2.6.32/include/drm/drm_crtc.h @@ -123,7 +123,7 @@ int type; /* Proposed mode values */ - int clock; + int clock; /* in kHz */ int hdisplay; int hsync_start; int hsync_end; @@ -164,8 +164,8 @@ int *private; int private_flags; - int vrefresh; - float hsync; + int vrefresh; /* in Hz */ + int hsync; /* in kHz */ }; enum drm_connector_status { @@ -242,6 +242,21 @@ int (*create_handle)(struct drm_framebuffer *fb, struct drm_file *file_priv, unsigned int *handle); + /** + * Optinal callback for the dirty fb ioctl. + * + * Userspace can notify the driver via this callback + * that a area of the framebuffer has changed and should + * be flushed to the display hardware. + * + * See documentation in drm_mode.h for the struct + * drm_mode_fb_dirty_cmd for more information as all + * the semantics and arguments have a one to one mapping + * on this function. + */ + int (*dirty)(struct drm_framebuffer *framebuffer, unsigned flags, + unsigned color, struct drm_clip_rect *clips, + unsigned num_clips); }; struct drm_framebuffer { @@ -256,7 +271,7 @@ unsigned int depth; int bits_per_pixel; int flags; - void *fbdev; + struct fb_info *fbdev; u32 pseudo_palette[17]; struct list_head filp_head; /* if you are using the helper */ @@ -290,6 +305,7 @@ struct drm_crtc; struct drm_connector; struct drm_encoder; +struct drm_pending_vblank_event; /** * drm_crtc_funcs - control CRTCs for a given device @@ -333,6 +349,19 @@ void (*destroy)(struct drm_crtc *crtc); int (*set_config)(struct drm_mode_set *set); + + /* + * Flip to the given framebuffer. This implements the page + * flip ioctl descibed in drm_mode.h, specifically, the + * implementation must return immediately and block all + * rendering to the current fb until the flip has completed. + * If userspace set the event flag in the ioctl, the event + * argument will point to an event to send back when the flip + * completes, otherwise it will be NULL. + */ + int (*page_flip)(struct drm_crtc *crtc, + struct drm_framebuffer *fb, + struct drm_pending_vblank_event *event); }; /** @@ -596,6 +625,7 @@ /* Optional properties */ struct drm_property *scaling_mode_property; struct drm_property *dithering_mode_property; + struct drm_property *dirty_info_property; }; #define obj_to_crtc(x) container_of(x, struct drm_crtc, base) @@ -667,6 +697,7 @@ extern void drm_mode_prune_invalid(struct drm_device *dev, struct list_head *mode_list, bool verbose); extern void drm_mode_sort(struct list_head *mode_list); +extern int drm_mode_hsync(struct drm_display_mode *mode); extern int drm_mode_vrefresh(struct drm_display_mode *mode); extern void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags); @@ -703,6 +734,7 @@ char *formats[]); extern int drm_mode_create_scaling_mode_property(struct drm_device *dev); extern int drm_mode_create_dithering_property(struct drm_device *dev); +extern int drm_mode_create_dirty_info_property(struct drm_device *dev); extern char *drm_get_encoder_name(struct drm_encoder *encoder); extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, @@ -711,7 +743,8 @@ struct drm_encoder *encoder); extern bool drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc, int gamma_size); -extern void *drm_mode_object_find(struct drm_device *dev, uint32_t id, uint32_t type); +extern struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, + uint32_t id, uint32_t type); /* IOCTLs */ extern int drm_mode_getresources(struct drm_device *dev, void *data, struct drm_file *file_priv); @@ -730,6 +763,8 @@ void *data, struct drm_file *file_priv); extern int drm_mode_getfb(struct drm_device *dev, void *data, struct drm_file *file_priv); +extern int drm_mode_dirtyfb_ioctl(struct drm_device *dev, + void *data, struct drm_file *file_priv); extern int drm_mode_addmode_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); extern int drm_mode_rmmode_ioctl(struct drm_device *dev, @@ -756,6 +791,8 @@ extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); extern bool drm_detect_hdmi_monitor(struct edid *edid); +extern int drm_mode_page_flip_ioctl(struct drm_device *dev, + void *data, struct drm_file *file_priv); extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay, int vdisplay, int vrefresh, bool reduced, bool interlaced, bool margins); --- linux-2.6.32.orig/include/drm/nouveau_drm.h +++ linux-2.6.32/include/drm/nouveau_drm.h @@ -0,0 +1,221 @@ +/* + * Copyright 2005 Stephane Marchesin. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __NOUVEAU_DRM_H__ +#define __NOUVEAU_DRM_H__ + +#define NOUVEAU_DRM_HEADER_PATCHLEVEL 15 + +struct drm_nouveau_channel_alloc { + uint32_t fb_ctxdma_handle; + uint32_t tt_ctxdma_handle; + + int channel; + + /* Notifier memory */ + uint32_t notifier_handle; + + /* DRM-enforced subchannel assignments */ + struct { + uint32_t handle; + uint32_t grclass; + } subchan[8]; + uint32_t nr_subchan; +}; + +struct drm_nouveau_channel_free { + int channel; +}; + +struct drm_nouveau_grobj_alloc { + int channel; + uint32_t handle; + int class; +}; + +struct drm_nouveau_notifierobj_alloc { + uint32_t channel; + uint32_t handle; + uint32_t size; + uint32_t offset; +}; + +struct drm_nouveau_gpuobj_free { + int channel; + uint32_t handle; +}; + +/* FIXME : maybe unify {GET,SET}PARAMs */ +#define NOUVEAU_GETPARAM_PCI_VENDOR 3 +#define NOUVEAU_GETPARAM_PCI_DEVICE 4 +#define NOUVEAU_GETPARAM_BUS_TYPE 5 +#define NOUVEAU_GETPARAM_FB_PHYSICAL 6 +#define NOUVEAU_GETPARAM_AGP_PHYSICAL 7 +#define NOUVEAU_GETPARAM_FB_SIZE 8 +#define NOUVEAU_GETPARAM_AGP_SIZE 9 +#define NOUVEAU_GETPARAM_PCI_PHYSICAL 10 +#define NOUVEAU_GETPARAM_CHIPSET_ID 11 +#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12 +#define NOUVEAU_GETPARAM_GRAPH_UNITS 13 +struct drm_nouveau_getparam { + uint64_t param; + uint64_t value; +}; + +struct drm_nouveau_setparam { + uint64_t param; + uint64_t value; +}; + +#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0) +#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1) +#define NOUVEAU_GEM_DOMAIN_GART (1 << 2) +#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3) + +struct drm_nouveau_gem_info { + uint32_t handle; + uint32_t domain; + uint64_t size; + uint64_t offset; + uint64_t map_handle; + uint32_t tile_mode; + uint32_t tile_flags; +}; + +struct drm_nouveau_gem_new { + struct drm_nouveau_gem_info info; + uint32_t channel_hint; + uint32_t align; +}; + +struct drm_nouveau_gem_pushbuf_bo { + uint64_t user_priv; + uint32_t handle; + uint32_t read_domains; + uint32_t write_domains; + uint32_t valid_domains; + uint32_t presumed_ok; + uint32_t presumed_domain; + uint64_t presumed_offset; +}; + +#define NOUVEAU_GEM_RELOC_LOW (1 << 0) +#define NOUVEAU_GEM_RELOC_HIGH (1 << 1) +#define NOUVEAU_GEM_RELOC_OR (1 << 2) +struct drm_nouveau_gem_pushbuf_reloc { + uint32_t bo_index; + uint32_t reloc_index; + uint32_t flags; + uint32_t data; + uint32_t vor; + uint32_t tor; +}; + +#define NOUVEAU_GEM_MAX_BUFFERS 1024 +#define NOUVEAU_GEM_MAX_RELOCS 1024 + +struct drm_nouveau_gem_pushbuf { + uint32_t channel; + uint32_t nr_dwords; + uint32_t nr_buffers; + uint32_t nr_relocs; + uint64_t dwords; + uint64_t buffers; + uint64_t relocs; +}; + +struct drm_nouveau_gem_pushbuf_call { + uint32_t channel; + uint32_t handle; + uint32_t offset; + uint32_t nr_buffers; + uint32_t nr_relocs; + uint32_t nr_dwords; + uint64_t buffers; + uint64_t relocs; + uint32_t suffix0; + uint32_t suffix1; + /* below only accessed for CALL2 */ + uint64_t vram_available; + uint64_t gart_available; +}; + +struct drm_nouveau_gem_pin { + uint32_t handle; + uint32_t domain; + uint64_t offset; +}; + +struct drm_nouveau_gem_unpin { + uint32_t handle; +}; + +#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001 +#define NOUVEAU_GEM_CPU_PREP_NOBLOCK 0x00000002 +#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004 +struct drm_nouveau_gem_cpu_prep { + uint32_t handle; + uint32_t flags; +}; + +struct drm_nouveau_gem_cpu_fini { + uint32_t handle; +}; + +struct drm_nouveau_gem_tile { + uint32_t handle; + uint32_t offset; + uint32_t size; + uint32_t tile_mode; + uint32_t tile_flags; +}; + +enum nouveau_bus_type { + NV_AGP = 0, + NV_PCI = 1, + NV_PCIE = 2, +}; + +struct drm_nouveau_sarea { +}; + +#define DRM_NOUVEAU_CARD_INIT 0x00 +#define DRM_NOUVEAU_GETPARAM 0x01 +#define DRM_NOUVEAU_SETPARAM 0x02 +#define DRM_NOUVEAU_CHANNEL_ALLOC 0x03 +#define DRM_NOUVEAU_CHANNEL_FREE 0x04 +#define DRM_NOUVEAU_GROBJ_ALLOC 0x05 +#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x06 +#define DRM_NOUVEAU_GPUOBJ_FREE 0x07 +#define DRM_NOUVEAU_GEM_NEW 0x40 +#define DRM_NOUVEAU_GEM_PUSHBUF 0x41 +#define DRM_NOUVEAU_GEM_PUSHBUF_CALL 0x42 +#define DRM_NOUVEAU_GEM_PIN 0x43 /* !KMS only */ +#define DRM_NOUVEAU_GEM_UNPIN 0x44 /* !KMS only */ +#define DRM_NOUVEAU_GEM_CPU_PREP 0x45 +#define DRM_NOUVEAU_GEM_CPU_FINI 0x46 +#define DRM_NOUVEAU_GEM_INFO 0x47 +#define DRM_NOUVEAU_GEM_PUSHBUF_CALL2 0x48 + +#endif /* __NOUVEAU_DRM_H__ */ --- linux-2.6.32.orig/include/drm/drm.h +++ linux-2.6.32/include/drm/drm.h @@ -36,17 +36,27 @@ #ifndef _DRM_H_ #define _DRM_H_ +#if defined(__linux__) + #include -#include /* For _IO* macros */ -#define DRM_IOCTL_NR(n) _IOC_NR(n) -#define DRM_IOC_VOID _IOC_NONE -#define DRM_IOC_READ _IOC_READ -#define DRM_IOC_WRITE _IOC_WRITE -#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE -#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size) +#include +typedef unsigned int drm_handle_t; + +#else /* One of the BSDs */ -#define DRM_MAJOR 226 -#define DRM_MAX_MINOR 15 +#include +#include +typedef int8_t __s8; +typedef uint8_t __u8; +typedef int16_t __s16; +typedef uint16_t __u16; +typedef int32_t __s32; +typedef uint32_t __u32; +typedef int64_t __s64; +typedef uint64_t __u64; +typedef unsigned long drm_handle_t; + +#endif #define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */ #define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */ @@ -59,7 +69,6 @@ #define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT) #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT)) -typedef unsigned int drm_handle_t; typedef unsigned int drm_context_t; typedef unsigned int drm_drawable_t; typedef unsigned int drm_magic_t; @@ -454,6 +463,7 @@ enum drm_vblank_seq_type { _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */ _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */ + _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */ _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */ _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */ _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */ @@ -461,8 +471,8 @@ }; #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE) -#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \ - _DRM_VBLANK_NEXTONMISS) +#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \ + _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS) struct drm_wait_vblank_request { enum drm_vblank_seq_type type; @@ -686,6 +696,8 @@ #define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) #define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) #define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int) +#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip) +#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd) /** * Device specific ioctls should only be in their respective headers @@ -698,6 +710,35 @@ #define DRM_COMMAND_BASE 0x40 #define DRM_COMMAND_END 0xA0 +/** + * Header for events written back to userspace on the drm fd. The + * type defines the type of event, the length specifies the total + * length of the event (including the header), and user_data is + * typically a 64 bit value passed with the ioctl that triggered the + * event. A read on the drm fd will always only return complete + * events, that is, if for example the read buffer is 100 bytes, and + * there are two 64 byte events pending, only one will be returned. + * + * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and + * up are chipset specific. + */ +struct drm_event { + __u32 type; + __u32 length; +}; + +#define DRM_EVENT_VBLANK 0x01 +#define DRM_EVENT_FLIP_COMPLETE 0x02 + +struct drm_event_vblank { + struct drm_event base; + __u64 user_data; + __u32 tv_sec; + __u32 tv_usec; + __u32 sequence; + __u32 reserved; +}; + /* typedef area */ #ifndef __KERNEL__ typedef struct drm_clip_rect drm_clip_rect_t; --- linux-2.6.32.orig/include/drm/Kbuild +++ linux-2.6.32/include/drm/Kbuild @@ -7,4 +7,6 @@ unifdef-y += radeon_drm.h unifdef-y += sis_drm.h unifdef-y += savage_drm.h +unifdef-y += vmwgfx_drm.h unifdef-y += via_drm.h +unifdef-y += nouveau_drm.h --- linux-2.6.32.orig/include/drm/via_drm.h +++ linux-2.6.32/include/drm/via_drm.h @@ -24,7 +24,7 @@ #ifndef _VIA_DRM_H_ #define _VIA_DRM_H_ -#include +#include "drm.h" /* WARNING: These defines must be the same as what the Xserver uses. * if you change them, you must change the defines in the Xserver. --- linux-2.6.32.orig/include/drm/vmwgfx_drm.h +++ linux-2.6.32/include/drm/vmwgfx_drm.h @@ -0,0 +1,588 @@ +/************************************************************************** + * + * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#ifndef __VMWGFX_DRM_H__ +#define __VMWGFX_DRM_H__ + +#define DRM_VMW_MAX_SURFACE_FACES 6 +#define DRM_VMW_MAX_MIP_LEVELS 24 + +#define DRM_VMW_EXT_NAME_LEN 128 + +#define DRM_VMW_GET_PARAM 0 +#define DRM_VMW_ALLOC_DMABUF 1 +#define DRM_VMW_UNREF_DMABUF 2 +#define DRM_VMW_CURSOR_BYPASS 3 +/* guarded by DRM_VMW_PARAM_NUM_STREAMS != 0*/ +#define DRM_VMW_CONTROL_STREAM 4 +#define DRM_VMW_CLAIM_STREAM 5 +#define DRM_VMW_UNREF_STREAM 6 +/* guarded by DRM_VMW_PARAM_3D == 1 */ +#define DRM_VMW_CREATE_CONTEXT 7 +#define DRM_VMW_UNREF_CONTEXT 8 +#define DRM_VMW_CREATE_SURFACE 9 +#define DRM_VMW_UNREF_SURFACE 10 +#define DRM_VMW_REF_SURFACE 11 +#define DRM_VMW_EXECBUF 12 +#define DRM_VMW_FIFO_DEBUG 13 +#define DRM_VMW_FENCE_WAIT 14 + + +/*************************************************************************/ +/** + * DRM_VMW_GET_PARAM - get device information. + * + * DRM_VMW_PARAM_FIFO_OFFSET: + * Offset to use to map the first page of the FIFO read-only. + * The fifo is mapped using the mmap() system call on the drm device. + * + * DRM_VMW_PARAM_OVERLAY_IOCTL: + * Does the driver support the overlay ioctl. + */ + +#define DRM_VMW_PARAM_NUM_STREAMS 0 +#define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 +#define DRM_VMW_PARAM_3D 2 +#define DRM_VMW_PARAM_FIFO_OFFSET 3 +#define DRM_VMW_PARAM_HW_CAPS 4 +#define DRM_VMW_PARAM_FIFO_CAPS 5 + +/** + * struct drm_vmw_getparam_arg + * + * @value: Returned value. //Out + * @param: Parameter to query. //In. + * + * Argument to the DRM_VMW_GET_PARAM Ioctl. + */ + +struct drm_vmw_getparam_arg { + uint64_t value; + uint32_t param; + uint32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_EXTENSION - Query device extensions. + */ + +/** + * struct drm_vmw_extension_rep + * + * @exists: The queried extension exists. + * @driver_ioctl_offset: Ioctl number of the first ioctl in the extension. + * @driver_sarea_offset: Offset to any space in the DRI SAREA + * used by the extension. + * @major: Major version number of the extension. + * @minor: Minor version number of the extension. + * @pl: Patch level version number of the extension. + * + * Output argument to the DRM_VMW_EXTENSION Ioctl. + */ + +struct drm_vmw_extension_rep { + int32_t exists; + uint32_t driver_ioctl_offset; + uint32_t driver_sarea_offset; + uint32_t major; + uint32_t minor; + uint32_t pl; + uint32_t pad64; +}; + +/** + * union drm_vmw_extension_arg + * + * @extension - Ascii name of the extension to be queried. //In + * @rep - Reply as defined above. //Out + * + * Argument to the DRM_VMW_EXTENSION Ioctl. + */ + +union drm_vmw_extension_arg { + char extension[DRM_VMW_EXT_NAME_LEN]; + struct drm_vmw_extension_rep rep; +}; + +/*************************************************************************/ +/** + * DRM_VMW_CREATE_CONTEXT - Create a host context. + * + * Allocates a device unique context id, and queues a create context command + * for the host. Does not wait for host completion. + */ + +/** + * struct drm_vmw_context_arg + * + * @cid: Device unique context ID. + * + * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. + * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. + */ + +struct drm_vmw_context_arg { + int32_t cid; + uint32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_UNREF_CONTEXT - Create a host context. + * + * Frees a global context id, and queues a destroy host command for the host. + * Does not wait for host completion. The context ID can be used directly + * in the command stream and shows up as the same context ID on the host. + */ + +/*************************************************************************/ +/** + * DRM_VMW_CREATE_SURFACE - Create a host suface. + * + * Allocates a device unique surface id, and queues a create surface command + * for the host. Does not wait for host completion. The surface ID can be + * used directly in the command stream and shows up as the same surface + * ID on the host. + */ + +/** + * struct drm_wmv_surface_create_req + * + * @flags: Surface flags as understood by the host. + * @format: Surface format as understood by the host. + * @mip_levels: Number of mip levels for each face. + * An unused face should have 0 encoded. + * @size_addr: Address of a user-space array of sruct drm_vmw_size + * cast to an uint64_t for 32-64 bit compatibility. + * The size of the array should equal the total number of mipmap levels. + * @shareable: Boolean whether other clients (as identified by file descriptors) + * may reference this surface. + * @scanout: Boolean whether the surface is intended to be used as a + * scanout. + * + * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. + * Output data from the DRM_VMW_REF_SURFACE Ioctl. + */ + +struct drm_vmw_surface_create_req { + uint32_t flags; + uint32_t format; + uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES]; + uint64_t size_addr; + int32_t shareable; + int32_t scanout; +}; + +/** + * struct drm_wmv_surface_arg + * + * @sid: Surface id of created surface or surface to destroy or reference. + * + * Output data from the DRM_VMW_CREATE_SURFACE Ioctl. + * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. + * Input argument to the DRM_VMW_REF_SURFACE Ioctl. + */ + +struct drm_vmw_surface_arg { + int32_t sid; + uint32_t pad64; +}; + +/** + * struct drm_vmw_size ioctl. + * + * @width - mip level width + * @height - mip level height + * @depth - mip level depth + * + * Description of a mip level. + * Input data to the DRM_WMW_CREATE_SURFACE Ioctl. + */ + +struct drm_vmw_size { + uint32_t width; + uint32_t height; + uint32_t depth; + uint32_t pad64; +}; + +/** + * union drm_vmw_surface_create_arg + * + * @rep: Output data as described above. + * @req: Input data as described above. + * + * Argument to the DRM_VMW_CREATE_SURFACE Ioctl. + */ + +union drm_vmw_surface_create_arg { + struct drm_vmw_surface_arg rep; + struct drm_vmw_surface_create_req req; +}; + +/*************************************************************************/ +/** + * DRM_VMW_REF_SURFACE - Reference a host surface. + * + * Puts a reference on a host surface with a give sid, as previously + * returned by the DRM_VMW_CREATE_SURFACE ioctl. + * A reference will make sure the surface isn't destroyed while we hold + * it and will allow the calling client to use the surface ID in the command + * stream. + * + * On successful return, the Ioctl returns the surface information given + * in the DRM_VMW_CREATE_SURFACE ioctl. + */ + +/** + * union drm_vmw_surface_reference_arg + * + * @rep: Output data as described above. + * @req: Input data as described above. + * + * Argument to the DRM_VMW_REF_SURFACE Ioctl. + */ + +union drm_vmw_surface_reference_arg { + struct drm_vmw_surface_create_req rep; + struct drm_vmw_surface_arg req; +}; + +/*************************************************************************/ +/** + * DRM_VMW_UNREF_SURFACE - Unreference a host surface. + * + * Clear a reference previously put on a host surface. + * When all references are gone, including the one implicitly placed + * on creation, + * a destroy surface command will be queued for the host. + * Does not wait for completion. + */ + +/*************************************************************************/ +/** + * DRM_VMW_EXECBUF + * + * Submit a command buffer for execution on the host, and return a + * fence sequence that when signaled, indicates that the command buffer has + * executed. + */ + +/** + * struct drm_vmw_execbuf_arg + * + * @commands: User-space address of a command buffer cast to an uint64_t. + * @command-size: Size in bytes of the command buffer. + * @throttle-us: Sleep until software is less than @throttle_us + * microseconds ahead of hardware. The driver may round this value + * to the nearest kernel tick. + * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an + * uint64_t. + * @version: Allows expanding the execbuf ioctl parameters without breaking + * backwards compatibility, since user-space will always tell the kernel + * which version it uses. + * @flags: Execbuf flags. None currently. + * + * Argument to the DRM_VMW_EXECBUF Ioctl. + */ + +#define DRM_VMW_EXECBUF_VERSION 0 + +struct drm_vmw_execbuf_arg { + uint64_t commands; + uint32_t command_size; + uint32_t throttle_us; + uint64_t fence_rep; + uint32_t version; + uint32_t flags; +}; + +/** + * struct drm_vmw_fence_rep + * + * @fence_seq: Fence sequence associated with a command submission. + * @error: This member should've been set to -EFAULT on submission. + * The following actions should be take on completion: + * error == -EFAULT: Fence communication failed. The host is synchronized. + * Use the last fence id read from the FIFO fence register. + * error != 0 && error != -EFAULT: + * Fence submission failed. The host is synchronized. Use the fence_seq member. + * error == 0: All is OK, The host may not be synchronized. + * Use the fence_seq member. + * + * Input / Output data to the DRM_VMW_EXECBUF Ioctl. + */ + +struct drm_vmw_fence_rep { + uint64_t fence_seq; + int32_t error; + uint32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_ALLOC_DMABUF + * + * Allocate a DMA buffer that is visible also to the host. + * NOTE: The buffer is + * identified by a handle and an offset, which are private to the guest, but + * useable in the command stream. The guest kernel may translate these + * and patch up the command stream accordingly. In the future, the offset may + * be zero at all times, or it may disappear from the interface before it is + * fixed. + * + * The DMA buffer may stay user-space mapped in the guest at all times, + * and is thus suitable for sub-allocation. + * + * DMA buffers are mapped using the mmap() syscall on the drm device. + */ + +/** + * struct drm_vmw_alloc_dmabuf_req + * + * @size: Required minimum size of the buffer. + * + * Input data to the DRM_VMW_ALLOC_DMABUF Ioctl. + */ + +struct drm_vmw_alloc_dmabuf_req { + uint32_t size; + uint32_t pad64; +}; + +/** + * struct drm_vmw_dmabuf_rep + * + * @map_handle: Offset to use in the mmap() call used to map the buffer. + * @handle: Handle unique to this buffer. Used for unreferencing. + * @cur_gmr_id: GMR id to use in the command stream when this buffer is + * referenced. See not above. + * @cur_gmr_offset: Offset to use in the command stream when this buffer is + * referenced. See note above. + * + * Output data from the DRM_VMW_ALLOC_DMABUF Ioctl. + */ + +struct drm_vmw_dmabuf_rep { + uint64_t map_handle; + uint32_t handle; + uint32_t cur_gmr_id; + uint32_t cur_gmr_offset; + uint32_t pad64; +}; + +/** + * union drm_vmw_dmabuf_arg + * + * @req: Input data as described above. + * @rep: Output data as described above. + * + * Argument to the DRM_VMW_ALLOC_DMABUF Ioctl. + */ + +union drm_vmw_alloc_dmabuf_arg { + struct drm_vmw_alloc_dmabuf_req req; + struct drm_vmw_dmabuf_rep rep; +}; + +/*************************************************************************/ +/** + * DRM_VMW_UNREF_DMABUF - Free a DMA buffer. + * + */ + +/** + * struct drm_vmw_unref_dmabuf_arg + * + * @handle: Handle indicating what buffer to free. Obtained from the + * DRM_VMW_ALLOC_DMABUF Ioctl. + * + * Argument to the DRM_VMW_UNREF_DMABUF Ioctl. + */ + +struct drm_vmw_unref_dmabuf_arg { + uint32_t handle; + uint32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_FIFO_DEBUG - Get last FIFO submission. + * + * This IOCTL copies the last FIFO submission directly out of the FIFO buffer. + */ + +/** + * struct drm_vmw_fifo_debug_arg + * + * @debug_buffer: User space address of a debug_buffer cast to an uint64_t //In + * @debug_buffer_size: Size in bytes of debug buffer //In + * @used_size: Number of bytes copied to the buffer // Out + * @did_not_fit: Boolean indicating that the fifo contents did not fit. //Out + * + * Argument to the DRM_VMW_FIFO_DEBUG Ioctl. + */ + +struct drm_vmw_fifo_debug_arg { + uint64_t debug_buffer; + uint32_t debug_buffer_size; + uint32_t used_size; + int32_t did_not_fit; + uint32_t pad64; +}; + +struct drm_vmw_fence_wait_arg { + uint64_t sequence; + uint64_t kernel_cookie; + int32_t cookie_valid; + int32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_CONTROL_STREAM - Control overlays, aka streams. + * + * This IOCTL controls the overlay units of the svga device. + * The SVGA overlay units does not work like regular hardware units in + * that they do not automaticaly read back the contents of the given dma + * buffer. But instead only read back for each call to this ioctl, and + * at any point between this call being made and a following call that + * either changes the buffer or disables the stream. + */ + +/** + * struct drm_vmw_rect + * + * Defines a rectangle. Used in the overlay ioctl to define + * source and destination rectangle. + */ + +struct drm_vmw_rect { + int32_t x; + int32_t y; + uint32_t w; + uint32_t h; +}; + +/** + * struct drm_vmw_control_stream_arg + * + * @stream_id: Stearm to control + * @enabled: If false all following arguments are ignored. + * @handle: Handle to buffer for getting data from. + * @format: Format of the overlay as understood by the host. + * @width: Width of the overlay. + * @height: Height of the overlay. + * @size: Size of the overlay in bytes. + * @pitch: Array of pitches, the two last are only used for YUV12 formats. + * @offset: Offset from start of dma buffer to overlay. + * @src: Source rect, must be within the defined area above. + * @dst: Destination rect, x and y may be negative. + * + * Argument to the DRM_VMW_CONTROL_STREAM Ioctl. + */ + +struct drm_vmw_control_stream_arg { + uint32_t stream_id; + uint32_t enabled; + + uint32_t flags; + uint32_t color_key; + + uint32_t handle; + uint32_t offset; + int32_t format; + uint32_t size; + uint32_t width; + uint32_t height; + uint32_t pitch[3]; + + uint32_t pad64; + struct drm_vmw_rect src; + struct drm_vmw_rect dst; +}; + +/*************************************************************************/ +/** + * DRM_VMW_CURSOR_BYPASS - Give extra information about cursor bypass. + * + */ + +#define DRM_VMW_CURSOR_BYPASS_ALL (1 << 0) +#define DRM_VMW_CURSOR_BYPASS_FLAGS (1) + +/** + * struct drm_vmw_cursor_bypass_arg + * + * @flags: Flags. + * @crtc_id: Crtc id, only used if DMR_CURSOR_BYPASS_ALL isn't passed. + * @xpos: X position of cursor. + * @ypos: Y position of cursor. + * @xhot: X hotspot. + * @yhot: Y hotspot. + * + * Argument to the DRM_VMW_CURSOR_BYPASS Ioctl. + */ + +struct drm_vmw_cursor_bypass_arg { + uint32_t flags; + uint32_t crtc_id; + int32_t xpos; + int32_t ypos; + int32_t xhot; + int32_t yhot; +}; + +/*************************************************************************/ +/** + * DRM_VMW_CLAIM_STREAM - Claim a single stream. + */ + +/** + * struct drm_vmw_context_arg + * + * @stream_id: Device unique context ID. + * + * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. + * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. + */ + +struct drm_vmw_stream_arg { + uint32_t stream_id; + uint32_t pad64; +}; + +/*************************************************************************/ +/** + * DRM_VMW_UNREF_STREAM - Unclaim a stream. + * + * Return a single stream that was claimed by this process. Also makes + * sure that the stream has been stopped. + */ + +#endif --- linux-2.6.32.orig/include/drm/drm_os_linux.h +++ linux-2.6.32/include/drm/drm_os_linux.h @@ -123,5 +123,5 @@ remove_wait_queue(&(queue), &entry); \ } while (0) -#define DRM_WAKEUP( queue ) wake_up_interruptible( queue ) +#define DRM_WAKEUP( queue ) wake_up( queue ) #define DRM_INIT_WAITQUEUE( queue ) init_waitqueue_head( queue ) --- linux-2.6.32.orig/include/drm/drm_pciids.h +++ linux-2.6.32/include/drm/drm_pciids.h @@ -6,6 +6,7 @@ {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x3155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ {0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP}, \ @@ -375,6 +376,7 @@ {0x1002, 0x9712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9713, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9714, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9715, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0, 0, 0} #define r128_PCI_IDS \ --- linux-2.6.32.orig/include/drm/mga_drm.h +++ linux-2.6.32/include/drm/mga_drm.h @@ -35,7 +35,7 @@ #ifndef __MGA_DRM_H__ #define __MGA_DRM_H__ -#include +#include "drm.h" /* WARNING: If you change any of these defines, make sure to change the * defines in the Xserver file (mga_sarea.h) --- linux-2.6.32.orig/include/drm/drm_mm.h +++ linux-2.6.32/include/drm/drm_mm.h @@ -66,6 +66,13 @@ unsigned long size, unsigned alignment, int atomic); +extern struct drm_mm_node *drm_mm_get_block_range_generic( + struct drm_mm_node *node, + unsigned long size, + unsigned alignment, + unsigned long start, + unsigned long end, + int atomic); static inline struct drm_mm_node *drm_mm_get_block(struct drm_mm_node *parent, unsigned long size, unsigned alignment) @@ -78,11 +85,38 @@ { return drm_mm_get_block_generic(parent, size, alignment, 1); } +static inline struct drm_mm_node *drm_mm_get_block_range( + struct drm_mm_node *parent, + unsigned long size, + unsigned alignment, + unsigned long start, + unsigned long end) +{ + return drm_mm_get_block_range_generic(parent, size, alignment, + start, end, 0); +} +static inline struct drm_mm_node *drm_mm_get_block_atomic_range( + struct drm_mm_node *parent, + unsigned long size, + unsigned alignment, + unsigned long start, + unsigned long end) +{ + return drm_mm_get_block_range_generic(parent, size, alignment, + start, end, 1); +} extern void drm_mm_put_block(struct drm_mm_node *cur); extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, unsigned long size, unsigned alignment, int best_match); +extern struct drm_mm_node *drm_mm_search_free_in_range( + const struct drm_mm *mm, + unsigned long size, + unsigned alignment, + unsigned long start, + unsigned long end, + int best_match); extern int drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size); extern void drm_mm_takedown(struct drm_mm *mm); @@ -99,6 +133,7 @@ return block->mm; } +extern void drm_mm_debug_table(struct drm_mm *mm, const char *prefix); #ifdef CONFIG_DEBUG_FS int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm); #endif --- linux-2.6.32.orig/include/drm/drmP.h +++ linux-2.6.32/include/drm/drmP.h @@ -245,16 +245,6 @@ #endif -#define DRM_PROC_LIMIT (PAGE_SIZE-80) - -#define DRM_PROC_PRINT(fmt, arg...) \ - len += sprintf(&buf[len], fmt , ##arg); \ - if (len > DRM_PROC_LIMIT) { *eof = 1; return len - offset; } - -#define DRM_PROC_PRINT_RET(ret, fmt, arg...) \ - len += sprintf(&buf[len], fmt , ##arg); \ - if (len > DRM_PROC_LIMIT) { ret; *eof = 1; return len - offset; } - /*@}*/ /***********************************************************************/ @@ -265,19 +255,8 @@ #define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1)) #define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x)) -#define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist) #define DRM_IF_VERSION(maj, min) (maj << 16 | min) -/** - * Get the private SAREA mapping. - * - * \param _dev DRM device. - * \param _ctx context number. - * \param _map output mapping. - */ -#define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do { \ - (_map) = (_dev)->context_sareas[_ctx]; \ -} while(0) /** * Test that the hardware lock is held by the caller, returning otherwise. @@ -297,18 +276,6 @@ } while (0) /** - * Copy and IOCTL return string to user space - */ -#define DRM_COPY( name, value ) \ - len = strlen( value ); \ - if ( len > name##_len ) len = name##_len; \ - name##_len = strlen( value ); \ - if ( len && name ) { \ - if ( copy_to_user( name, value, len ) ) \ - return -EFAULT; \ - } - -/** * Ioctl function type. * * \param inode device inode. @@ -322,10 +289,14 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, unsigned long arg); +#define DRM_IOCTL_NR(n) _IOC_NR(n) +#define DRM_MAJOR 226 + #define DRM_AUTH 0x1 #define DRM_MASTER 0x2 #define DRM_ROOT_ONLY 0x4 #define DRM_CONTROL_ALLOW 0x8 +#define DRM_UNLOCKED 0x10 struct drm_ioctl_desc { unsigned int cmd; @@ -426,6 +397,14 @@ struct drm_freelist freelist; }; +/* Event queued up for userspace to read */ +struct drm_pending_event { + struct drm_event *event; + struct list_head link; + struct drm_file *file_priv; + void (*destroy)(struct drm_pending_event *event); +}; + /** File private data */ struct drm_file { int authenticated; @@ -449,6 +428,10 @@ struct drm_master *master; /* master this node is currently associated with N.B. not always minor->master */ struct list_head fbs; + + wait_queue_head_t event_wait; + struct list_head event_list; + int event_space; }; /** Wait queue */ @@ -795,6 +778,15 @@ /* Master routines */ int (*master_create)(struct drm_device *dev, struct drm_master *master); void (*master_destroy)(struct drm_device *dev, struct drm_master *master); + /** + * master_set is called whenever the minor master is set. + * master_drop is called whenever the minor master is dropped. + */ + + int (*master_set)(struct drm_device *dev, struct drm_file *file_priv, + bool from_open); + void (*master_drop)(struct drm_device *dev, struct drm_file *file_priv, + bool from_release); int (*proc_init)(struct drm_minor *minor); void (*proc_cleanup)(struct drm_minor *minor); @@ -900,6 +892,12 @@ struct drm_mode_group mode_group; }; +struct drm_pending_vblank_event { + struct drm_pending_event base; + int pipe; + struct drm_event_vblank event; +}; + /** * DRM device structure. This structure represent a complete card that * may contain multiple heads. @@ -999,6 +997,12 @@ u32 max_vblank_count; /**< size of vblank counter register */ + /** + * List of events + */ + struct list_head vblank_event_list; + spinlock_t event_lock; + /*@} */ cycles_t ctx_start; cycles_t lck_start; @@ -1125,8 +1129,8 @@ /* Driver support (drm_drv.h) */ extern int drm_init(struct drm_driver *driver); extern void drm_exit(struct drm_driver *driver); -extern int drm_ioctl(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg); +extern long drm_ioctl(struct file *filp, + unsigned int cmd, unsigned long arg); extern long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); extern int drm_lastclose(struct drm_device *dev); @@ -1135,6 +1139,8 @@ extern int drm_open(struct inode *inode, struct file *filp); extern int drm_stub_open(struct inode *inode, struct file *filp); extern int drm_fasync(int fd, struct file *filp, int on); +extern ssize_t drm_read(struct file *filp, char __user *buffer, + size_t count, loff_t *offset); extern int drm_release(struct inode *inode, struct file *filp); /* Mapping support (drm_vm.h) */ @@ -1295,6 +1301,7 @@ extern void drm_handle_vblank(struct drm_device *dev, int crtc); extern int drm_vblank_get(struct drm_device *dev, int crtc); extern void drm_vblank_put(struct drm_device *dev, int crtc); +extern void drm_vblank_off(struct drm_device *dev, int crtc); extern void drm_vblank_cleanup(struct drm_device *dev); /* Modesetting support */ extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); @@ -1401,7 +1408,7 @@ struct drm_ati_pcigart_info * gart_info); extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, - size_t align, dma_addr_t maxaddr); + size_t align); extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); @@ -1519,14 +1526,27 @@ static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) { + if (size != 0 && nmemb > ULONG_MAX / size) + return NULL; + if (size * nmemb <= PAGE_SIZE) return kcalloc(nmemb, size, GFP_KERNEL); + return __vmalloc(size * nmemb, + GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL); +} + +/* Modeled after cairo's malloc_ab, it's like calloc but without the zeroing. */ +static __inline__ void *drm_malloc_ab(size_t nmemb, size_t size) +{ if (size != 0 && nmemb > ULONG_MAX / size) return NULL; + if (size * nmemb <= PAGE_SIZE) + return kmalloc(nmemb * size, GFP_KERNEL); + return __vmalloc(size * nmemb, - GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL); + GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL); } static __inline void drm_free_large(void *ptr) --- linux-2.6.32.orig/include/drm/drm_edid.h +++ linux-2.6.32/include/drm/drm_edid.h @@ -106,6 +106,10 @@ u8 wpindex2[3]; } __attribute__((packed)); +struct cvt_timing { + u8 code[3]; +} __attribute__((packed)); + struct detailed_non_pixel { u8 pad1; u8 type; /* ff=serial, fe=string, fd=monitor range, fc=monitor name @@ -117,9 +121,13 @@ struct detailed_data_monitor_range range; struct detailed_data_wpindex color; struct std_timing timings[5]; + struct cvt_timing cvt[4]; } data; } __attribute__((packed)); +#define EDID_DETAIL_EST_TIMINGS 0xf7 +#define EDID_DETAIL_CVT_3BYTE 0xf8 +#define EDID_DETAIL_COLOR_MGMT_DATA 0xf9 #define EDID_DETAIL_STD_MODES 0xfa #define EDID_DETAIL_MONITOR_CPDATA 0xfb #define EDID_DETAIL_MONITOR_NAME 0xfc --- linux-2.6.32.orig/include/drm/drm_mode.h +++ linux-2.6.32/include/drm/drm_mode.h @@ -27,9 +27,6 @@ #ifndef _DRM_MODE_H #define _DRM_MODE_H -#include -#include - #define DRM_DISPLAY_INFO_LEN 32 #define DRM_CONNECTOR_NAME_LEN 32 #define DRM_DISPLAY_MODE_LEN 32 @@ -78,12 +75,17 @@ #define DRM_MODE_DITHERING_OFF 0 #define DRM_MODE_DITHERING_ON 1 +/* Dirty info options */ +#define DRM_MODE_DIRTY_OFF 0 +#define DRM_MODE_DIRTY_ON 1 +#define DRM_MODE_DIRTY_ANNOTATE 2 + struct drm_mode_modeinfo { __u32 clock; __u16 hdisplay, hsync_start, hsync_end, htotal, hskew; __u16 vdisplay, vsync_start, vsync_end, vtotal, vscan; - __u32 vrefresh; /* vertical refresh * 1000 */ + __u32 vrefresh; __u32 flags; __u32 type; @@ -158,6 +160,7 @@ #define DRM_MODE_CONNECTOR_HDMIA 11 #define DRM_MODE_CONNECTOR_HDMIB 12 #define DRM_MODE_CONNECTOR_TV 13 +#define DRM_MODE_CONNECTOR_eDP 14 struct drm_mode_get_connector { @@ -225,6 +228,45 @@ __u32 handle; }; +#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 +#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02 +#define DRM_MODE_FB_DIRTY_FLAGS 0x03 + +/* + * Mark a region of a framebuffer as dirty. + * + * Some hardware does not automatically update display contents + * as a hardware or software draw to a framebuffer. This ioctl + * allows userspace to tell the kernel and the hardware what + * regions of the framebuffer have changed. + * + * The kernel or hardware is free to update more then just the + * region specified by the clip rects. The kernel or hardware + * may also delay and/or coalesce several calls to dirty into a + * single update. + * + * Userspace may annotate the updates, the annotates are a + * promise made by the caller that the change is either a copy + * of pixels or a fill of a single color in the region specified. + * + * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then + * the number of updated regions are half of num_clips given, + * where the clip rects are paired in src and dst. The width and + * height of each one of the pairs must match. + * + * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller + * promises that the region specified of the clip rects is filled + * completely with a single color as given in the color argument. + */ + +struct drm_mode_fb_dirty_cmd { + __u32 fb_id; + __u32 flags; + __u32 color; + __u32 num_clips; + __u64 clips_ptr; +}; + struct drm_mode_mode_cmd { __u32 connector_id; struct drm_mode_modeinfo mode; @@ -268,4 +310,37 @@ __u64 blue; }; +#define DRM_MODE_PAGE_FLIP_EVENT 0x01 +#define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT + +/* + * Request a page flip on the specified crtc. + * + * This ioctl will ask KMS to schedule a page flip for the specified + * crtc. Once any pending rendering targeting the specified fb (as of + * ioctl time) has completed, the crtc will be reprogrammed to display + * that fb after the next vertical refresh. The ioctl returns + * immediately, but subsequent rendering to the current fb will block + * in the execbuffer ioctl until the page flip happens. If a page + * flip is already pending as the ioctl is called, EBUSY will be + * returned. + * + * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will + * request that drm sends back a vblank event (see drm.h: struct + * drm_event_vblank) when the page flip is done. The user_data field + * passed in with this ioctl will be returned as the user_data field + * in the vblank event struct. + * + * The reserved field must be zero until we figure out something + * clever to use it for. + */ + +struct drm_mode_crtc_page_flip { + __u32 crtc_id; + __u32 fb_id; + __u32 flags; + __u32 reserved; + __u64 user_data; +}; + #endif --- linux-2.6.32.orig/include/drm/drm_dp_helper.h +++ linux-2.6.32/include/drm/drm_dp_helper.h @@ -0,0 +1,180 @@ +/* + * Copyright © 2008 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _DRM_DP_HELPER_H_ +#define _DRM_DP_HELPER_H_ + +/* From the VESA DisplayPort spec */ + +#define AUX_NATIVE_WRITE 0x8 +#define AUX_NATIVE_READ 0x9 +#define AUX_I2C_WRITE 0x0 +#define AUX_I2C_READ 0x1 +#define AUX_I2C_STATUS 0x2 +#define AUX_I2C_MOT 0x4 + +#define AUX_NATIVE_REPLY_ACK (0x0 << 4) +#define AUX_NATIVE_REPLY_NACK (0x1 << 4) +#define AUX_NATIVE_REPLY_DEFER (0x2 << 4) +#define AUX_NATIVE_REPLY_MASK (0x3 << 4) + +#define AUX_I2C_REPLY_ACK (0x0 << 6) +#define AUX_I2C_REPLY_NACK (0x1 << 6) +#define AUX_I2C_REPLY_DEFER (0x2 << 6) +#define AUX_I2C_REPLY_MASK (0x3 << 6) + +/* AUX CH addresses */ +/* DPCD */ +#define DP_DPCD_REV 0x000 + +#define DP_MAX_LINK_RATE 0x001 + +#define DP_MAX_LANE_COUNT 0x002 +# define DP_MAX_LANE_COUNT_MASK 0x1f +# define DP_ENHANCED_FRAME_CAP (1 << 7) + +#define DP_MAX_DOWNSPREAD 0x003 +# define DP_NO_AUX_HANDSHAKE_LINK_TRAINING (1 << 6) + +#define DP_NORP 0x004 + +#define DP_DOWNSTREAMPORT_PRESENT 0x005 +# define DP_DWN_STRM_PORT_PRESENT (1 << 0) +# define DP_DWN_STRM_PORT_TYPE_MASK 0x06 +/* 00b = DisplayPort */ +/* 01b = Analog */ +/* 10b = TMDS or HDMI */ +/* 11b = Other */ +# define DP_FORMAT_CONVERSION (1 << 3) + +#define DP_MAIN_LINK_CHANNEL_CODING 0x006 + +/* link configuration */ +#define DP_LINK_BW_SET 0x100 +# define DP_LINK_BW_1_62 0x06 +# define DP_LINK_BW_2_7 0x0a + +#define DP_LANE_COUNT_SET 0x101 +# define DP_LANE_COUNT_MASK 0x0f +# define DP_LANE_COUNT_ENHANCED_FRAME_EN (1 << 7) + +#define DP_TRAINING_PATTERN_SET 0x102 +# define DP_TRAINING_PATTERN_DISABLE 0 +# define DP_TRAINING_PATTERN_1 1 +# define DP_TRAINING_PATTERN_2 2 +# define DP_TRAINING_PATTERN_MASK 0x3 + +# define DP_LINK_QUAL_PATTERN_DISABLE (0 << 2) +# define DP_LINK_QUAL_PATTERN_D10_2 (1 << 2) +# define DP_LINK_QUAL_PATTERN_ERROR_RATE (2 << 2) +# define DP_LINK_QUAL_PATTERN_PRBS7 (3 << 2) +# define DP_LINK_QUAL_PATTERN_MASK (3 << 2) + +# define DP_RECOVERED_CLOCK_OUT_EN (1 << 4) +# define DP_LINK_SCRAMBLING_DISABLE (1 << 5) + +# define DP_SYMBOL_ERROR_COUNT_BOTH (0 << 6) +# define DP_SYMBOL_ERROR_COUNT_DISPARITY (1 << 6) +# define DP_SYMBOL_ERROR_COUNT_SYMBOL (2 << 6) +# define DP_SYMBOL_ERROR_COUNT_MASK (3 << 6) + +#define DP_TRAINING_LANE0_SET 0x103 +#define DP_TRAINING_LANE1_SET 0x104 +#define DP_TRAINING_LANE2_SET 0x105 +#define DP_TRAINING_LANE3_SET 0x106 + +# define DP_TRAIN_VOLTAGE_SWING_MASK 0x3 +# define DP_TRAIN_VOLTAGE_SWING_SHIFT 0 +# define DP_TRAIN_MAX_SWING_REACHED (1 << 2) +# define DP_TRAIN_VOLTAGE_SWING_400 (0 << 0) +# define DP_TRAIN_VOLTAGE_SWING_600 (1 << 0) +# define DP_TRAIN_VOLTAGE_SWING_800 (2 << 0) +# define DP_TRAIN_VOLTAGE_SWING_1200 (3 << 0) + +# define DP_TRAIN_PRE_EMPHASIS_MASK (3 << 3) +# define DP_TRAIN_PRE_EMPHASIS_0 (0 << 3) +# define DP_TRAIN_PRE_EMPHASIS_3_5 (1 << 3) +# define DP_TRAIN_PRE_EMPHASIS_6 (2 << 3) +# define DP_TRAIN_PRE_EMPHASIS_9_5 (3 << 3) + +# define DP_TRAIN_PRE_EMPHASIS_SHIFT 3 +# define DP_TRAIN_MAX_PRE_EMPHASIS_REACHED (1 << 5) + +#define DP_DOWNSPREAD_CTRL 0x107 +# define DP_SPREAD_AMP_0_5 (1 << 4) + +#define DP_MAIN_LINK_CHANNEL_CODING_SET 0x108 +# define DP_SET_ANSI_8B10B (1 << 0) + +#define DP_LANE0_1_STATUS 0x202 +#define DP_LANE2_3_STATUS 0x203 +# define DP_LANE_CR_DONE (1 << 0) +# define DP_LANE_CHANNEL_EQ_DONE (1 << 1) +# define DP_LANE_SYMBOL_LOCKED (1 << 2) + +#define DP_CHANNEL_EQ_BITS (DP_LANE_CR_DONE | \ + DP_LANE_CHANNEL_EQ_DONE | \ + DP_LANE_SYMBOL_LOCKED) + +#define DP_LANE_ALIGN_STATUS_UPDATED 0x204 + +#define DP_INTERLANE_ALIGN_DONE (1 << 0) +#define DP_DOWNSTREAM_PORT_STATUS_CHANGED (1 << 6) +#define DP_LINK_STATUS_UPDATED (1 << 7) + +#define DP_SINK_STATUS 0x205 + +#define DP_RECEIVE_PORT_0_STATUS (1 << 0) +#define DP_RECEIVE_PORT_1_STATUS (1 << 1) + +#define DP_ADJUST_REQUEST_LANE0_1 0x206 +#define DP_ADJUST_REQUEST_LANE2_3 0x207 +# define DP_ADJUST_VOLTAGE_SWING_LANE0_MASK 0x03 +# define DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT 0 +# define DP_ADJUST_PRE_EMPHASIS_LANE0_MASK 0x0c +# define DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT 2 +# define DP_ADJUST_VOLTAGE_SWING_LANE1_MASK 0x30 +# define DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT 4 +# define DP_ADJUST_PRE_EMPHASIS_LANE1_MASK 0xc0 +# define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT 6 + +#define DP_SET_POWER 0x600 +# define DP_SET_POWER_D0 0x1 +# define DP_SET_POWER_D3 0x2 + +#define MODE_I2C_START 1 +#define MODE_I2C_WRITE 2 +#define MODE_I2C_READ 4 +#define MODE_I2C_STOP 8 + +struct i2c_algo_dp_aux_data { + bool running; + u16 address; + int (*aux_ch) (struct i2c_adapter *adapter, + int mode, uint8_t write_byte, + uint8_t *read_byte); +}; + +int +i2c_dp_aux_add_bus(struct i2c_adapter *adapter); + +#endif /* _DRM_DP_HELPER_H_ */ --- linux-2.6.32.orig/include/drm/i2c/ch7006.h +++ linux-2.6.32/include/drm/i2c/ch7006.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2009 Francisco Jerez. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef __DRM_I2C_CH7006_H__ +#define __DRM_I2C_CH7006_H__ + +/** + * struct ch7006_encoder_params + * + * Describes how the ch7006 is wired up with the GPU. It should be + * used as the @params parameter of its @set_config method. + * + * See "http://www.chrontel.com/pdf/7006.pdf" for their precise + * meaning. + */ +struct ch7006_encoder_params { + enum { + CH7006_FORMAT_RGB16 = 0, + CH7006_FORMAT_YCrCb24m16, + CH7006_FORMAT_RGB24m16, + CH7006_FORMAT_RGB15, + CH7006_FORMAT_RGB24m12C, + CH7006_FORMAT_RGB24m12I, + CH7006_FORMAT_RGB24m8, + CH7006_FORMAT_RGB16m8, + CH7006_FORMAT_RGB15m8, + CH7006_FORMAT_YCrCb24m8, + } input_format; + + enum { + CH7006_CLOCK_SLAVE = 0, + CH7006_CLOCK_MASTER, + } clock_mode; + + enum { + CH7006_CLOCK_EDGE_NEG = 0, + CH7006_CLOCK_EDGE_POS, + } clock_edge; + + int xcm, pcm; + + enum { + CH7006_SYNC_SLAVE = 0, + CH7006_SYNC_MASTER, + } sync_direction; + + enum { + CH7006_SYNC_SEPARATED = 0, + CH7006_SYNC_EMBEDDED, + } sync_encoding; + + enum { + CH7006_POUT_1_8V = 0, + CH7006_POUT_3_3V, + } pout_level; + + enum { + CH7006_ACTIVE_HSYNC = 0, + CH7006_ACTIVE_DSTART, + } active_detect; +}; + +#endif --- linux-2.6.32.orig/include/drm/ttm/ttm_object.h +++ linux-2.6.32/include/drm/ttm/ttm_object.h @@ -0,0 +1,271 @@ +/************************************************************************** + * + * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ +/* + * Authors: Thomas Hellstrom + */ +/** @file ttm_object.h + * + * Base- and reference object implementation for the various + * ttm objects. Implements reference counting, minimal security checks + * and release on file close. + */ + +#ifndef _TTM_OBJECT_H_ +#define _TTM_OBJECT_H_ + +#include +#include "drm_hashtab.h" +#include +#include + +/** + * enum ttm_ref_type + * + * Describes what type of reference a ref object holds. + * + * TTM_REF_USAGE is a simple refcount on a base object. + * + * TTM_REF_SYNCCPU_READ is a SYNCCPU_READ reference on a + * buffer object. + * + * TTM_REF_SYNCCPU_WRITE is a SYNCCPU_WRITE reference on a + * buffer object. + * + */ + +enum ttm_ref_type { + TTM_REF_USAGE, + TTM_REF_SYNCCPU_READ, + TTM_REF_SYNCCPU_WRITE, + TTM_REF_NUM +}; + +/** + * enum ttm_object_type + * + * One entry per ttm object type. + * Device-specific types should use the + * ttm_driver_typex types. + */ + +enum ttm_object_type { + ttm_fence_type, + ttm_buffer_type, + ttm_lock_type, + ttm_driver_type0 = 256, + ttm_driver_type1, + ttm_driver_type2, + ttm_driver_type3, + ttm_driver_type4, + ttm_driver_type5 +}; + +struct ttm_object_file; +struct ttm_object_device; + +/** + * struct ttm_base_object + * + * @hash: hash entry for the per-device object hash. + * @type: derived type this object is base class for. + * @shareable: Other ttm_object_files can access this object. + * + * @tfile: Pointer to ttm_object_file of the creator. + * NULL if the object was not created by a user request. + * (kernel object). + * + * @refcount: Number of references to this object, not + * including the hash entry. A reference to a base object can + * only be held by a ref object. + * + * @refcount_release: A function to be called when there are + * no more references to this object. This function should + * destroy the object (or make sure destruction eventually happens), + * and when it is called, the object has + * already been taken out of the per-device hash. The parameter + * "base" should be set to NULL by the function. + * + * @ref_obj_release: A function to be called when a reference object + * with another ttm_ref_type than TTM_REF_USAGE is deleted. + * this function may, for example, release a lock held by a user-space + * process. + * + * This struct is intended to be used as a base struct for objects that + * are visible to user-space. It provides a global name, race-safe + * access and refcounting, minimal access contol and hooks for unref actions. + */ + +struct ttm_base_object { + struct drm_hash_item hash; + enum ttm_object_type object_type; + bool shareable; + struct ttm_object_file *tfile; + struct kref refcount; + void (*refcount_release) (struct ttm_base_object **base); + void (*ref_obj_release) (struct ttm_base_object *base, + enum ttm_ref_type ref_type); +}; + +/** + * ttm_base_object_init + * + * @tfile: Pointer to a struct ttm_object_file. + * @base: The struct ttm_base_object to initialize. + * @shareable: This object is shareable with other applcations. + * (different @tfile pointers.) + * @type: The object type. + * @refcount_release: See the struct ttm_base_object description. + * @ref_obj_release: See the struct ttm_base_object description. + * + * Initializes a struct ttm_base_object. + */ + +extern int ttm_base_object_init(struct ttm_object_file *tfile, + struct ttm_base_object *base, + bool shareable, + enum ttm_object_type type, + void (*refcount_release) (struct ttm_base_object + **), + void (*ref_obj_release) (struct ttm_base_object + *, + enum ttm_ref_type + ref_type)); + +/** + * ttm_base_object_lookup + * + * @tfile: Pointer to a struct ttm_object_file. + * @key: Hash key + * + * Looks up a struct ttm_base_object with the key @key. + * Also verifies that the object is visible to the application, by + * comparing the @tfile argument and checking the object shareable flag. + */ + +extern struct ttm_base_object *ttm_base_object_lookup(struct ttm_object_file + *tfile, uint32_t key); + +/** + * ttm_base_object_unref + * + * @p_base: Pointer to a pointer referncing a struct ttm_base_object. + * + * Decrements the base object refcount and clears the pointer pointed to by + * p_base. + */ + +extern void ttm_base_object_unref(struct ttm_base_object **p_base); + +/** + * ttm_ref_object_add. + * + * @tfile: A struct ttm_object_file representing the application owning the + * ref_object. + * @base: The base object to reference. + * @ref_type: The type of reference. + * @existed: Upon completion, indicates that an identical reference object + * already existed, and the refcount was upped on that object instead. + * + * Adding a ref object to a base object is basically like referencing the + * base object, but a user-space application holds the reference. When the + * file corresponding to @tfile is closed, all its reference objects are + * deleted. A reference object can have different types depending on what + * it's intended for. It can be refcounting to prevent object destruction, + * When user-space takes a lock, it can add a ref object to that lock to + * make sure the lock is released if the application dies. A ref object + * will hold a single reference on a base object. + */ +extern int ttm_ref_object_add(struct ttm_object_file *tfile, + struct ttm_base_object *base, + enum ttm_ref_type ref_type, bool *existed); +/** + * ttm_ref_object_base_unref + * + * @key: Key representing the base object. + * @ref_type: Ref type of the ref object to be dereferenced. + * + * Unreference a ref object with type @ref_type + * on the base object identified by @key. If there are no duplicate + * references, the ref object will be destroyed and the base object + * will be unreferenced. + */ +extern int ttm_ref_object_base_unref(struct ttm_object_file *tfile, + unsigned long key, + enum ttm_ref_type ref_type); + +/** + * ttm_object_file_init - initialize a struct ttm_object file + * + * @tdev: A struct ttm_object device this file is initialized on. + * @hash_order: Order of the hash table used to hold the reference objects. + * + * This is typically called by the file_ops::open function. + */ + +extern struct ttm_object_file *ttm_object_file_init(struct ttm_object_device + *tdev, + unsigned int hash_order); + +/** + * ttm_object_file_release - release data held by a ttm_object_file + * + * @p_tfile: Pointer to pointer to the ttm_object_file object to release. + * *p_tfile will be set to NULL by this function. + * + * Releases all data associated by a ttm_object_file. + * Typically called from file_ops::release. The caller must + * ensure that there are no concurrent users of tfile. + */ + +extern void ttm_object_file_release(struct ttm_object_file **p_tfile); + +/** + * ttm_object device init - initialize a struct ttm_object_device + * + * @hash_order: Order of hash table used to hash the base objects. + * + * This function is typically called on device initialization to prepare + * data structures needed for ttm base and ref objects. + */ + +extern struct ttm_object_device *ttm_object_device_init + (struct ttm_mem_global *mem_glob, unsigned int hash_order); + +/** + * ttm_object_device_release - release data held by a ttm_object_device + * + * @p_tdev: Pointer to pointer to the ttm_object_device object to release. + * *p_tdev will be set to NULL by this function. + * + * Releases all data associated by a ttm_object_device. + * Typically called from driver::unload before the destruction of the + * device private data structure. + */ + +extern void ttm_object_device_release(struct ttm_object_device **p_tdev); + +#endif --- linux-2.6.32.orig/include/drm/ttm/ttm_execbuf_util.h +++ linux-2.6.32/include/drm/ttm/ttm_execbuf_util.h @@ -0,0 +1,107 @@ +/************************************************************************** + * + * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ +/* + * Authors: Thomas Hellstrom + */ + +#ifndef _TTM_EXECBUF_UTIL_H_ +#define _TTM_EXECBUF_UTIL_H_ + +#include "ttm/ttm_bo_api.h" +#include + +/** + * struct ttm_validate_buffer + * + * @head: list head for thread-private list. + * @bo: refcounted buffer object pointer. + * @new_sync_obj_arg: New sync_obj_arg for @bo, to be used once + * adding a new sync object. + * @reservied: Indicates whether @bo has been reserved for validation. + */ + +struct ttm_validate_buffer { + struct list_head head; + struct ttm_buffer_object *bo; + void *new_sync_obj_arg; + bool reserved; +}; + +/** + * function ttm_eu_backoff_reservation + * + * @list: thread private list of ttm_validate_buffer structs. + * + * Undoes all buffer validation reservations for bos pointed to by + * the list entries. + */ + +extern void ttm_eu_backoff_reservation(struct list_head *list); + +/** + * function ttm_eu_reserve_buffers + * + * @list: thread private list of ttm_validate_buffer structs. + * @val_seq: A unique sequence number. + * + * Tries to reserve bos pointed to by the list entries for validation. + * If the function returns 0, all buffers are marked as "unfenced", + * taken off the lru lists and are not synced for write CPU usage. + * + * If the function detects a deadlock due to multiple threads trying to + * reserve the same buffers in reverse order, all threads except one will + * back off and retry. This function may sleep while waiting for + * CPU write reservations to be cleared, and for other threads to + * unreserve their buffers. + * + * This function may return -ERESTART or -EAGAIN if the calling process + * receives a signal while waiting. In that case, no buffers on the list + * will be reserved upon return. + * + * Buffers reserved by this function should be unreserved by + * a call to either ttm_eu_backoff_reservation() or + * ttm_eu_fence_buffer_objects() when command submission is complete or + * has failed. + */ + +extern int ttm_eu_reserve_buffers(struct list_head *list, uint32_t val_seq); + +/** + * function ttm_eu_fence_buffer_objects. + * + * @list: thread private list of ttm_validate_buffer structs. + * @sync_obj: The new sync object for the buffers. + * + * This function should be called when command submission is complete, and + * it will add a new sync object to bos pointed to by entries on @list. + * It also unreserves all buffers, putting them on lru lists. + * + */ + +extern void ttm_eu_fence_buffer_objects(struct list_head *list, void *sync_obj); + +#endif --- linux-2.6.32.orig/include/drm/ttm/ttm_bo_driver.h +++ linux-2.6.32/include/drm/ttm/ttm_bo_driver.h @@ -242,12 +242,6 @@ /** * struct ttm_bo_driver * - * @mem_type_prio: Priority array of memory types to place a buffer object in - * if it fits without evicting buffers from any of these memory types. - * @mem_busy_prio: Priority array of memory types to place a buffer object in - * if it needs to evict buffers to make room. - * @num_mem_type_prio: Number of elements in the @mem_type_prio array. - * @num_mem_busy_prio: Number of elements in the @num_mem_busy_prio array. * @create_ttm_backend_entry: Callback to create a struct ttm_backend. * @invalidate_caches: Callback to invalidate read caches when a buffer object * has been evicted. @@ -265,11 +259,6 @@ */ struct ttm_bo_driver { - const uint32_t *mem_type_prio; - const uint32_t *mem_busy_prio; - uint32_t num_mem_type_prio; - uint32_t num_mem_busy_prio; - /** * struct ttm_bo_driver member create_ttm_backend_entry * @@ -306,7 +295,8 @@ * finished, they'll end up in bo->mem.flags */ - uint32_t(*evict_flags) (struct ttm_buffer_object *bo); + void(*evict_flags) (struct ttm_buffer_object *bo, + struct ttm_placement *placement); /** * struct ttm_bo_driver member move: * @@ -363,6 +353,11 @@ /* notify the driver we are taking a fault on this BO * and have reserved it */ void (*fault_reserve_notify)(struct ttm_buffer_object *bo); + + /** + * notify the driver that we're about to swap out this bo + */ + void (*swap_notify) (struct ttm_buffer_object *bo); }; /** @@ -545,6 +540,15 @@ extern int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem); /** + * ttm_tt_populate: + * + * @ttm: The struct ttm_tt to contain the backing pages. + * + * Add backing pages to all of @ttm + */ +extern int ttm_tt_populate(struct ttm_tt *ttm); + +/** * ttm_ttm_destroy: * * @ttm: The struct ttm_tt. @@ -639,12 +643,12 @@ * -EBUSY: No space available (only if no_wait == 1). * -ENOMEM: Could not allocate memory for the buffer object, either due to * fragmentation or concurrent allocators. - * -ERESTART: An interruptible sleep was interrupted by a signal. + * -ERESTARTSYS: An interruptible sleep was interrupted by a signal. */ extern int ttm_bo_mem_space(struct ttm_buffer_object *bo, - uint32_t proposed_placement, - struct ttm_mem_reg *mem, - bool interruptible, bool no_wait); + struct ttm_placement *placement, + struct ttm_mem_reg *mem, + bool interruptible, bool no_wait); /** * ttm_bo_wait_for_cpu * @@ -654,7 +658,7 @@ * Wait until a buffer object is no longer sync'ed for CPU access. * Returns: * -EBUSY: Buffer object was sync'ed for CPU access. (only if no_wait == 1). - * -ERESTART: An interruptible sleep was interrupted by a signal. + * -ERESTARTSYS: An interruptible sleep was interrupted by a signal. */ extern int ttm_bo_wait_cpu(struct ttm_buffer_object *bo, bool no_wait); @@ -758,7 +762,7 @@ * -EAGAIN: The reservation may cause a deadlock. * Release all buffer reservations, wait for @bo to become unreserved and * try again. (only if use_sequence == 1). - * -ERESTART: A wait for the buffer to become unreserved was interrupted by + * -ERESTARTSYS: A wait for the buffer to become unreserved was interrupted by * a signal. Release all buffer reservations and return to user-space. */ extern int ttm_bo_reserve(struct ttm_buffer_object *bo, @@ -799,7 +803,7 @@ * * Returns: * -EBUSY: If no_wait == 1 and the buffer is already reserved. - * -ERESTART: If interruptible == 1 and the process received a signal + * -ERESTARTSYS: If interruptible == 1 and the process received a signal * while sleeping. */ extern int ttm_bo_block_reservation(struct ttm_buffer_object *bo, --- linux-2.6.32.orig/include/drm/ttm/ttm_memory.h +++ linux-2.6.32/include/drm/ttm/ttm_memory.h @@ -33,6 +33,7 @@ #include #include #include +#include /** * struct ttm_mem_shrink - callback to shrink TTM memory usage. --- linux-2.6.32.orig/include/drm/ttm/ttm_bo_api.h +++ linux-2.6.32/include/drm/ttm/ttm_bo_api.h @@ -44,6 +44,29 @@ struct drm_mm_node; + +/** + * struct ttm_placement + * + * @fpfn: first valid page frame number to put the object + * @lpfn: last valid page frame number to put the object + * @num_placement: number of prefered placements + * @placement: prefered placements + * @num_busy_placement: number of prefered placements when need to evict buffer + * @busy_placement: prefered placements when need to evict buffer + * + * Structure indicating the placement you request for an object. + */ +struct ttm_placement { + unsigned fpfn; + unsigned lpfn; + unsigned num_placement; + const uint32_t *placement; + unsigned num_busy_placement; + const uint32_t *busy_placement; +}; + + /** * struct ttm_mem_reg * @@ -109,10 +132,6 @@ * the object is destroyed. * @event_queue: Queue for processes waiting on buffer object status change. * @lock: spinlock protecting mostly synchronization members. - * @proposed_placement: Proposed placement for the buffer. Changed only by the - * creator prior to validation as opposed to bo->mem.proposed_flags which is - * changed by the implementation prior to a buffer move if it wants to outsmart - * the buffer creator / user. This latter happens, for example, at eviction. * @mem: structure describing current placement. * @persistant_swap_storage: Usually the swap storage is deleted for buffers * pinned in physical memory. If this behaviour is not desired, this member @@ -177,7 +196,6 @@ * Members protected by the bo::reserved lock. */ - uint32_t proposed_placement; struct ttm_mem_reg mem; struct file *persistant_swap_storage; struct ttm_tt *ttm; @@ -285,29 +303,30 @@ * Note: It might be necessary to block validations before the * wait by reserving the buffer. * Returns -EBUSY if no_wait is true and the buffer is busy. - * Returns -ERESTART if interrupted by a signal. + * Returns -ERESTARTSYS if interrupted by a signal. */ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy, bool interruptible, bool no_wait); /** - * ttm_buffer_object_validate + * ttm_bo_validate * * @bo: The buffer object. - * @proposed_placement: Proposed_placement for the buffer object. + * @placement: Proposed placement for the buffer object. * @interruptible: Sleep interruptible if sleeping. * @no_wait: Return immediately if the buffer is busy. * * Changes placement and caching policy of the buffer object - * according to bo::proposed_flags. + * according proposed placement. * Returns - * -EINVAL on invalid proposed_flags. + * -EINVAL on invalid proposed placement. * -ENOMEM on out-of-memory condition. * -EBUSY if no_wait is true and buffer busy. - * -ERESTART if interrupted by a signal. + * -ERESTARTSYS if interrupted by a signal. */ -extern int ttm_buffer_object_validate(struct ttm_buffer_object *bo, - uint32_t proposed_placement, - bool interruptible, bool no_wait); +extern int ttm_bo_validate(struct ttm_buffer_object *bo, + struct ttm_placement *placement, + bool interruptible, bool no_wait); + /** * ttm_bo_unref * @@ -328,7 +347,7 @@ * waiting for buffer idle. This lock is recursive. * Returns * -EBUSY if the buffer is busy and no_wait is true. - * -ERESTART if interrupted by a signal. + * -ERESTARTSYS if interrupted by a signal. */ extern int @@ -343,7 +362,7 @@ extern void ttm_bo_synccpu_write_release(struct ttm_buffer_object *bo); /** - * ttm_buffer_object_init + * ttm_bo_init * * @bdev: Pointer to a ttm_bo_device struct. * @bo: Pointer to a ttm_buffer_object to be initialized. @@ -371,20 +390,20 @@ * Returns * -ENOMEM: Out of memory. * -EINVAL: Invalid placement flags. - * -ERESTART: Interrupted by signal while sleeping waiting for resources. + * -ERESTARTSYS: Interrupted by signal while sleeping waiting for resources. */ -extern int ttm_buffer_object_init(struct ttm_bo_device *bdev, - struct ttm_buffer_object *bo, - unsigned long size, - enum ttm_bo_type type, - uint32_t flags, - uint32_t page_alignment, - unsigned long buffer_start, - bool interrubtible, - struct file *persistant_swap_storage, - size_t acc_size, - void (*destroy) (struct ttm_buffer_object *)); +extern int ttm_bo_init(struct ttm_bo_device *bdev, + struct ttm_buffer_object *bo, + unsigned long size, + enum ttm_bo_type type, + struct ttm_placement *placement, + uint32_t page_alignment, + unsigned long buffer_start, + bool interrubtible, + struct file *persistant_swap_storage, + size_t acc_size, + void (*destroy) (struct ttm_buffer_object *)); /** * ttm_bo_synccpu_object_init * @@ -405,47 +424,43 @@ * GEM user interface. * @p_bo: On successful completion *p_bo points to the created object. * - * This function allocates a ttm_buffer_object, and then calls - * ttm_buffer_object_init on that object. - * The destroy function is set to kfree(). + * This function allocates a ttm_buffer_object, and then calls ttm_bo_init + * on that object. The destroy function is set to kfree(). * Returns * -ENOMEM: Out of memory. * -EINVAL: Invalid placement flags. - * -ERESTART: Interrupted by signal while waiting for resources. + * -ERESTARTSYS: Interrupted by signal while waiting for resources. */ -extern int ttm_buffer_object_create(struct ttm_bo_device *bdev, - unsigned long size, - enum ttm_bo_type type, - uint32_t flags, - uint32_t page_alignment, - unsigned long buffer_start, - bool interruptible, - struct file *persistant_swap_storage, - struct ttm_buffer_object **p_bo); +extern int ttm_bo_create(struct ttm_bo_device *bdev, + unsigned long size, + enum ttm_bo_type type, + struct ttm_placement *placement, + uint32_t page_alignment, + unsigned long buffer_start, + bool interruptible, + struct file *persistant_swap_storage, + struct ttm_buffer_object **p_bo); /** * ttm_bo_check_placement * - * @bo: the buffer object. - * @set_flags: placement flags to set. - * @clr_flags: placement flags to clear. + * @bo: the buffer object. + * @placement: placements * * Performs minimal validity checking on an intended change of * placement flags. * Returns * -EINVAL: Intended change is invalid or not allowed. */ - extern int ttm_bo_check_placement(struct ttm_buffer_object *bo, - uint32_t set_flags, uint32_t clr_flags); + struct ttm_placement *placement); /** * ttm_bo_init_mm * * @bdev: Pointer to a ttm_bo_device struct. * @mem_type: The memory type. - * @p_offset: offset for managed area in pages. * @p_size: size managed area in pages. * * Initialize a manager for a given memory type. @@ -458,7 +473,7 @@ */ extern int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type, - unsigned long p_offset, unsigned long p_size); + unsigned long p_size); /** * ttm_bo_clean_mm * @@ -503,7 +518,7 @@ * * Returns: * -EINVAL: Invalid or uninitialized memory type. - * -ERESTART: The call was interrupted by a signal while waiting to + * -ERESTARTSYS: The call was interrupted by a signal while waiting to * evict a buffer. */ @@ -606,7 +621,7 @@ * be called from the fops::read and fops::write method. * Returns: * See man (2) write, man(2) read. In particular, - * the function may return -EINTR if + * the function may return -ERESTARTSYS if * interrupted by a signal. */ --- linux-2.6.32.orig/include/drm/ttm/ttm_lock.h +++ linux-2.6.32/include/drm/ttm/ttm_lock.h @@ -0,0 +1,247 @@ +/************************************************************************** + * + * Copyright (c) 2007-2009 VMware, Inc., Palo Alto, CA., USA + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ +/* + * Authors: Thomas Hellstrom + */ + +/** @file ttm_lock.h + * This file implements a simple replacement for the buffer manager use + * of the DRM heavyweight hardware lock. + * The lock is a read-write lock. Taking it in read mode and write mode + * is relatively fast, and intended for in-kernel use only. + * + * The vt mode is used only when there is a need to block all + * user-space processes from validating buffers. + * It's allowed to leave kernel space with the vt lock held. + * If a user-space process dies while having the vt-lock, + * it will be released during the file descriptor release. The vt lock + * excludes write lock and read lock. + * + * The suspend mode is used to lock out all TTM users when preparing for + * and executing suspend operations. + * + */ + +#ifndef _TTM_LOCK_H_ +#define _TTM_LOCK_H_ + +#include "ttm/ttm_object.h" +#include +#include + +/** + * struct ttm_lock + * + * @base: ttm base object used solely to release the lock if the client + * holding the lock dies. + * @queue: Queue for processes waiting for lock change-of-status. + * @lock: Spinlock protecting some lock members. + * @rw: Read-write lock counter. Protected by @lock. + * @flags: Lock state. Protected by @lock. + * @kill_takers: Boolean whether to kill takers of the lock. + * @signal: Signal to send when kill_takers is true. + */ + +struct ttm_lock { + struct ttm_base_object base; + wait_queue_head_t queue; + spinlock_t lock; + int32_t rw; + uint32_t flags; + bool kill_takers; + int signal; + struct ttm_object_file *vt_holder; +}; + + +/** + * ttm_lock_init + * + * @lock: Pointer to a struct ttm_lock + * Initializes the lock. + */ +extern void ttm_lock_init(struct ttm_lock *lock); + +/** + * ttm_read_unlock + * + * @lock: Pointer to a struct ttm_lock + * + * Releases a read lock. + */ +extern void ttm_read_unlock(struct ttm_lock *lock); + +/** + * ttm_read_lock + * + * @lock: Pointer to a struct ttm_lock + * @interruptible: Interruptible sleeping while waiting for a lock. + * + * Takes the lock in read mode. + * Returns: + * -ERESTARTSYS If interrupted by a signal and interruptible is true. + */ +extern int ttm_read_lock(struct ttm_lock *lock, bool interruptible); + +/** + * ttm_read_trylock + * + * @lock: Pointer to a struct ttm_lock + * @interruptible: Interruptible sleeping while waiting for a lock. + * + * Tries to take the lock in read mode. If the lock is already held + * in write mode, the function will return -EBUSY. If the lock is held + * in vt or suspend mode, the function will sleep until these modes + * are unlocked. + * + * Returns: + * -EBUSY The lock was already held in write mode. + * -ERESTARTSYS If interrupted by a signal and interruptible is true. + */ +extern int ttm_read_trylock(struct ttm_lock *lock, bool interruptible); + +/** + * ttm_write_unlock + * + * @lock: Pointer to a struct ttm_lock + * + * Releases a write lock. + */ +extern void ttm_write_unlock(struct ttm_lock *lock); + +/** + * ttm_write_lock + * + * @lock: Pointer to a struct ttm_lock + * @interruptible: Interruptible sleeping while waiting for a lock. + * + * Takes the lock in write mode. + * Returns: + * -ERESTARTSYS If interrupted by a signal and interruptible is true. + */ +extern int ttm_write_lock(struct ttm_lock *lock, bool interruptible); + +/** + * ttm_lock_downgrade + * + * @lock: Pointer to a struct ttm_lock + * + * Downgrades a write lock to a read lock. + */ +extern void ttm_lock_downgrade(struct ttm_lock *lock); + +/** + * ttm_suspend_lock + * + * @lock: Pointer to a struct ttm_lock + * + * Takes the lock in suspend mode. Excludes read and write mode. + */ +extern void ttm_suspend_lock(struct ttm_lock *lock); + +/** + * ttm_suspend_unlock + * + * @lock: Pointer to a struct ttm_lock + * + * Releases a suspend lock + */ +extern void ttm_suspend_unlock(struct ttm_lock *lock); + +/** + * ttm_vt_lock + * + * @lock: Pointer to a struct ttm_lock + * @interruptible: Interruptible sleeping while waiting for a lock. + * @tfile: Pointer to a struct ttm_object_file to register the lock with. + * + * Takes the lock in vt mode. + * Returns: + * -ERESTARTSYS If interrupted by a signal and interruptible is true. + * -ENOMEM: Out of memory when locking. + */ +extern int ttm_vt_lock(struct ttm_lock *lock, bool interruptible, + struct ttm_object_file *tfile); + +/** + * ttm_vt_unlock + * + * @lock: Pointer to a struct ttm_lock + * + * Releases a vt lock. + * Returns: + * -EINVAL If the lock was not held. + */ +extern int ttm_vt_unlock(struct ttm_lock *lock); + +/** + * ttm_write_unlock + * + * @lock: Pointer to a struct ttm_lock + * + * Releases a write lock. + */ +extern void ttm_write_unlock(struct ttm_lock *lock); + +/** + * ttm_write_lock + * + * @lock: Pointer to a struct ttm_lock + * @interruptible: Interruptible sleeping while waiting for a lock. + * + * Takes the lock in write mode. + * Returns: + * -ERESTARTSYS If interrupted by a signal and interruptible is true. + */ +extern int ttm_write_lock(struct ttm_lock *lock, bool interruptible); + +/** + * ttm_lock_set_kill + * + * @lock: Pointer to a struct ttm_lock + * @val: Boolean whether to kill processes taking the lock. + * @signal: Signal to send to the process taking the lock. + * + * The kill-when-taking-lock functionality is used to kill processes that keep + * on using the TTM functionality when its resources has been taken down, for + * example when the X server exits. A typical sequence would look like this: + * - X server takes lock in write mode. + * - ttm_lock_set_kill() is called with @val set to true. + * - As part of X server exit, TTM resources are taken down. + * - X server releases the lock on file release. + * - Another dri client wants to render, takes the lock and is killed. + * + */ +static inline void ttm_lock_set_kill(struct ttm_lock *lock, bool val, + int signal) +{ + lock->kill_takers = val; + if (val) + lock->signal = signal; +} + +#endif --- linux-2.6.32.orig/include/scsi/scsi_bsg_fc.h +++ linux-2.6.32/include/scsi/scsi_bsg_fc.h @@ -292,7 +292,7 @@ struct fc_bsg_rport_els r_els; struct fc_bsg_rport_ct r_ct; } rqst_data; -}; +} __attribute__((packed)); /* response (request sense data) structure of the sg_io_v4 */ --- linux-2.6.32.orig/include/scsi/osd_protocol.h +++ linux-2.6.32/include/scsi/osd_protocol.h @@ -17,6 +17,7 @@ #define __OSD_PROTOCOL_H__ #include +#include #include #include --- linux-2.6.32.orig/include/scsi/scsi_host.h +++ linux-2.6.32/include/scsi/scsi_host.h @@ -677,6 +677,12 @@ void *shost_data; /* + * Points to the physical bus device we'd use to do DMA + * Needed just in case we have virtual hosts. + */ + struct device *dma_dev; + + /* * We should ensure that this is aligned, both for better performance * and also because some compilers (m68k) don't automatically force * alignment to a long boundary. @@ -720,7 +726,9 @@ extern void scsi_flush_work(struct Scsi_Host *); extern struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *, int); -extern int __must_check scsi_add_host(struct Scsi_Host *, struct device *); +extern int __must_check scsi_add_host_with_dma(struct Scsi_Host *, + struct device *, + struct device *); extern void scsi_scan_host(struct Scsi_Host *); extern void scsi_rescan_device(struct device *); extern void scsi_remove_host(struct Scsi_Host *); @@ -731,6 +739,12 @@ extern u64 scsi_calculate_bounce_limit(struct Scsi_Host *); +static inline int __must_check scsi_add_host(struct Scsi_Host *host, + struct device *dev) +{ + return scsi_add_host_with_dma(host, dev, dev); +} + static inline struct device *scsi_get_device(struct Scsi_Host *shost) { return shost->shost_gendev.parent; --- linux-2.6.32.orig/include/scsi/fc_frame.h +++ linux-2.6.32/include/scsi/fc_frame.h @@ -37,6 +37,9 @@ #define FC_FRAME_HEADROOM 32 /* headroom for VLAN + FCoE headers */ #define FC_FRAME_TAILROOM 8 /* trailer space for FCoE */ +/* Max number of skb frags allowed, reserving one for fcoe_crc_eof page */ +#define FC_FRAME_SG_LEN (MAX_SKB_FRAGS - 1) + #define fp_skb(fp) (&((fp)->skb)) #define fr_hdr(fp) ((fp)->skb.data) #define fr_len(fp) ((fp)->skb.len) --- linux-2.6.32.orig/include/scsi/libfc.h +++ linux-2.6.32/include/scsi/libfc.h @@ -145,6 +145,7 @@ RPORT_ST_LOGO, /* port logout sent */ RPORT_ST_ADISC, /* Discover Address sent */ RPORT_ST_DELETE, /* port being deleted */ + RPORT_ST_RESTART, /* remote port being deleted and will restart */ }; /** --- linux-2.6.32.orig/include/net/netrom.h +++ linux-2.6.32/include/net/netrom.h @@ -132,6 +132,8 @@ static __inline__ void nr_neigh_put(struct nr_neigh *nr_neigh) { if (atomic_dec_and_test(&nr_neigh->refcount)) { + if (nr_neigh->ax25) + ax25_cb_put(nr_neigh->ax25); kfree(nr_neigh->digipeat); kfree(nr_neigh); } --- linux-2.6.32.orig/include/net/ip.h +++ linux-2.6.32/include/net/ip.h @@ -342,6 +342,7 @@ IP_DEFRAG_CALL_RA_CHAIN, IP_DEFRAG_CONNTRACK_IN, IP_DEFRAG_CONNTRACK_OUT, + IP_DEFRAG_CONNTRACK_BRIDGE_IN, IP_DEFRAG_VS_IN, IP_DEFRAG_VS_OUT, IP_DEFRAG_VS_FWD --- linux-2.6.32.orig/include/net/mac80211.h +++ linux-2.6.32/include/net/mac80211.h @@ -908,6 +908,9 @@ * @IEEE80211_HW_BEACON_FILTER: * Hardware supports dropping of irrelevant beacon frames to * avoid waking up cpu. + * @IEEE80211_HW_REPORTS_TX_ACK_STATUS: + * Hardware can provide ack status reports of Tx frames to + * the stack. */ enum ieee80211_hw_flags { IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, @@ -924,6 +927,7 @@ IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, IEEE80211_HW_MFP_CAPABLE = 1<<13, IEEE80211_HW_BEACON_FILTER = 1<<14, + IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<15, }; /** --- linux-2.6.32.orig/include/net/ipv6.h +++ linux-2.6.32/include/net/ipv6.h @@ -354,8 +354,16 @@ struct inet_frag_queue; +enum ip6_defrag_users { + IP6_DEFRAG_LOCAL_DELIVER, + IP6_DEFRAG_CONNTRACK_IN, + IP6_DEFRAG_CONNTRACK_OUT, + IP6_DEFRAG_CONNTRACK_BRIDGE_IN, +}; + struct ip6_create_arg { __be32 id; + u32 user; struct in6_addr *src; struct in6_addr *dst; }; --- linux-2.6.32.orig/include/net/tcp.h +++ linux-2.6.32/include/net/tcp.h @@ -1263,14 +1263,20 @@ * TCP connection after "boundary" unsucessful, exponentially backed-off * retransmissions with an initial RTO of TCP_RTO_MIN. */ -static inline bool retransmits_timed_out(const struct sock *sk, +static inline bool retransmits_timed_out(struct sock *sk, unsigned int boundary) { unsigned int timeout, linear_backoff_thresh; + unsigned int start_ts; if (!inet_csk(sk)->icsk_retransmits) return false; + if (unlikely(!tcp_sk(sk)->retrans_stamp)) + start_ts = TCP_SKB_CB(tcp_write_queue_head(sk))->when; + else + start_ts = tcp_sk(sk)->retrans_stamp; + linear_backoff_thresh = ilog2(TCP_RTO_MAX/TCP_RTO_MIN); if (boundary <= linear_backoff_thresh) @@ -1279,7 +1285,7 @@ timeout = ((2 << linear_backoff_thresh) - 1) * TCP_RTO_MIN + (boundary - linear_backoff_thresh) * TCP_RTO_MAX; - return (tcp_time_stamp - tcp_sk(sk)->retrans_stamp) >= timeout; + return (tcp_time_stamp - start_ts) >= timeout; } static inline struct sk_buff *tcp_send_head(struct sock *sk) --- linux-2.6.32.orig/include/net/sctp/structs.h +++ linux-2.6.32/include/net/sctp/structs.h @@ -772,6 +772,7 @@ struct iovec *data); void sctp_chunk_free(struct sctp_chunk *); void *sctp_addto_chunk(struct sctp_chunk *, int len, const void *data); +void *sctp_addto_chunk_fixed(struct sctp_chunk *, int len, const void *data); struct sctp_chunk *sctp_chunkify(struct sk_buff *, const struct sctp_association *, struct sock *); --- linux-2.6.32.orig/include/net/netns/conntrack.h +++ linux-2.6.32/include/net/netns/conntrack.h @@ -11,6 +11,8 @@ struct netns_ct { atomic_t count; unsigned int expect_count; + unsigned int htable_size; + struct kmem_cache *nf_conntrack_cachep; struct hlist_nulls_head *hash; struct hlist_head *expect_hash; struct hlist_nulls_head unconfirmed; @@ -28,5 +30,6 @@ #endif int hash_vmalloc; int expect_vmalloc; + char *slabname; }; #endif --- linux-2.6.32.orig/include/net/netns/ipv4.h +++ linux-2.6.32/include/net/netns/ipv4.h @@ -40,6 +40,7 @@ struct xt_table *iptable_security; struct xt_table *nat_table; struct hlist_head *nat_bysource; + unsigned int nat_htable_size; int nat_vmalloced; #endif --- linux-2.6.32.orig/include/net/netfilter/ipv6/nf_conntrack_ipv6.h +++ linux-2.6.32/include/net/netfilter/ipv6/nf_conntrack_ipv6.h @@ -9,7 +9,7 @@ extern int nf_ct_frag6_init(void); extern void nf_ct_frag6_cleanup(void); -extern struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb); +extern struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb, u32 user); extern void nf_ct_frag6_output(unsigned int hooknum, struct sk_buff *skb, struct net_device *in, struct net_device *out, --- linux-2.6.32.orig/include/asm-generic/dma-mapping-common.h +++ linux-2.6.32/include/asm-generic/dma-mapping-common.h @@ -131,7 +131,7 @@ debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir); } else - dma_sync_single_for_cpu(dev, addr, size, dir); + dma_sync_single_for_cpu(dev, addr + offset, size, dir); } static inline void dma_sync_single_range_for_device(struct device *dev, @@ -148,7 +148,7 @@ debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir); } else - dma_sync_single_for_device(dev, addr, size, dir); + dma_sync_single_for_device(dev, addr + offset, size, dir); } static inline void --- linux-2.6.32.orig/include/asm-generic/vmlinux.lds.h +++ linux-2.6.32/include/asm-generic/vmlinux.lds.h @@ -585,6 +585,7 @@ *(.initcall0s.init) \ *(.initcall1.init) \ *(.initcall1s.init) \ + *(.initcallearlyrootfs.init) \ *(.initcall2.init) \ *(.initcall2s.init) \ *(.initcall3.init) \ --- linux-2.6.32.orig/include/trace/ftrace.h +++ linux-2.6.32/include/trace/ftrace.h @@ -43,7 +43,8 @@ tstruct \ char __data[0]; \ }; \ - static struct ftrace_event_call event_##name + static struct ftrace_event_call \ + __attribute__((__aligned__(4))) event_##name #undef __cpparg #define __cpparg(arg...) arg @@ -159,7 +160,7 @@ #undef __get_str #undef TP_printk -#define TP_printk(fmt, args...) "%s, %s\n", #fmt, __stringify(args) +#define TP_printk(fmt, args...) "\"%s\", %s\n", fmt, __stringify(args) #undef TP_fast_assign #define TP_fast_assign(args...) args --- linux-2.6.32.orig/include/trace/events/fs.h +++ linux-2.6.32/include/trace/events/fs.h @@ -0,0 +1,53 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM fs + +#if !defined(_TRACE_FS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_FS_H + +#include +#include + +TRACE_EVENT(do_sys_open, + + TP_PROTO(char *filename, int flags, int mode), + + TP_ARGS(filename, flags, mode), + + TP_STRUCT__entry( + __string( filename, filename ) + __field( int, flags ) + __field( int, mode ) + ), + + TP_fast_assign( + __assign_str(filename, filename); + __entry->flags = flags; + __entry->mode = mode; + ), + + TP_printk("\"%s\" %x %o", + __get_str(filename), __entry->flags, __entry->mode) +); + +TRACE_EVENT(open_exec, + + TP_PROTO(char *filename), + + TP_ARGS(filename), + + TP_STRUCT__entry( + __string( filename, filename ) + ), + + TP_fast_assign( + __assign_str(filename, filename); + ), + + TP_printk("\"%s\"", + __get_str(filename)) +); + +#endif /* _TRACE_FS_H */ + +/* This part must be outside protection */ +#include --- linux-2.6.32.orig/include/trace/events/vfs.h +++ linux-2.6.32/include/trace/events/vfs.h @@ -0,0 +1,53 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM vfs + +#if !defined(_TRACE_VFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_VFS_H + +/* + * Tracepoint for dirtying an inode: + */ +TRACE_EVENT(dirty_inode, + + TP_PROTO(struct inode *inode, struct task_struct *task), + + TP_ARGS(inode, task), + + TP_STRUCT__entry( + __array( char, comm, TASK_COMM_LEN ) + __field( pid_t, pid ) + __array( char, dev, 16 ) + __array( char, file, 32 ) + ), + + TP_fast_assign( + if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { + struct dentry *dentry; + const char *name = "?"; + + dentry = d_find_alias(inode); + if (dentry) { + spin_lock(&dentry->d_lock); + name = (const char *) dentry->d_name.name; + } + + memcpy(__entry->comm, task->comm, TASK_COMM_LEN); + __entry->pid = task->pid; + strlcpy(__entry->file, name, 32); + strlcpy(__entry->dev, inode->i_sb->s_id, 16); + + if (dentry) { + spin_unlock(&dentry->d_lock); + dput(dentry); + } + } + ), + + TP_printk("task=%i (%s) file=%s dev=%s", + __entry->pid, __entry->comm, __entry->file, __entry->dev) +); + +#endif /* _TRACE_VFS_H */ + +/* This part must be outside protection */ +#include --- linux-2.6.32.orig/include/crypto/cryptd.h +++ linux-2.6.32/include/crypto/cryptd.h @@ -39,6 +39,7 @@ struct cryptd_ahash *cryptd_alloc_ahash(const char *alg_name, u32 type, u32 mask); struct crypto_shash *cryptd_ahash_child(struct cryptd_ahash *tfm); +struct shash_desc *cryptd_shash_desc(struct ahash_request *req); void cryptd_free_ahash(struct cryptd_ahash *tfm); #endif --- linux-2.6.32.orig/tools/perf/builtin-timechart.c +++ linux-2.6.32/tools/perf/builtin-timechart.c @@ -275,7 +275,7 @@ static int process_comm_event(event_t *event) { - pid_set_comm(event->comm.pid, event->comm.comm); + pid_set_comm(event->comm.tid, event->comm.comm); return 0; } static int --- linux-2.6.32.orig/tools/perf/Makefile +++ linux-2.6.32/tools/perf/Makefile @@ -218,7 +218,10 @@ # runtime figures out where they are based on the path to the executable. # This can help installing the suite in a relocatable way. +# Make the path relative to DESTDIR, not to prefix +ifndef DESTDIR prefix = $(HOME) +endif bindir_relative = bin bindir = $(prefix)/$(bindir_relative) mandir = share/man @@ -235,7 +238,6 @@ ETC_PERFCONFIG = etc/perfconfig endif lib = lib -# DESTDIR= export prefix bindir sharedir sysconfdir --- linux-2.6.32.orig/tools/perf/Documentation/Makefile +++ linux-2.6.32/tools/perf/Documentation/Makefile @@ -24,7 +24,10 @@ DOC_MAN5=$(patsubst %.txt,%.5,$(MAN5_TXT)) DOC_MAN7=$(patsubst %.txt,%.7,$(MAN7_TXT)) +# Make the path relative to DESTDIR, not prefix +ifndef DESTDIR prefix?=$(HOME) +endif bindir?=$(prefix)/bin htmldir?=$(prefix)/share/doc/perf-doc pdfdir?=$(prefix)/share/doc/perf-doc @@ -32,7 +35,6 @@ man1dir=$(mandir)/man1 man5dir=$(mandir)/man5 man7dir=$(mandir)/man7 -# DESTDIR= ASCIIDOC=asciidoc ASCIIDOC_EXTRA = --unsafe --- linux-2.6.32.orig/lib/flex_array.c +++ linux-2.6.32/lib/flex_array.c @@ -99,7 +99,7 @@ ret->element_size = element_size; ret->total_nr_elements = total; if (elements_fit_in_base(ret) && !(flags & __GFP_ZERO)) - memset(ret->parts[0], FLEX_ARRAY_FREE, + memset(&ret->parts[0], FLEX_ARRAY_FREE, FLEX_ARRAY_BASE_BYTES_LEFT); return ret; } --- linux-2.6.32.orig/lib/lcm.c +++ linux-2.6.32/lib/lcm.c @@ -0,0 +1,15 @@ +#include +#include +#include + +/* Lowest common multiple */ +unsigned long lcm(unsigned long a, unsigned long b) +{ + if (a && b) + return (a * b) / gcd(a, b); + else if (b) + return b; + + return a; +} +EXPORT_SYMBOL_GPL(lcm); --- linux-2.6.32.orig/lib/rational.c +++ linux-2.6.32/lib/rational.c @@ -7,6 +7,7 @@ */ #include +#include /* * calculate best rational approximation for a given fraction --- linux-2.6.32.orig/lib/idr.c +++ linux-2.6.32/lib/idr.c @@ -156,10 +156,12 @@ id = (id | ((1 << (IDR_BITS * l)) - 1)) + 1; /* if already at the top layer, we need to grow */ - if (!(p = pa[l])) { + if (id >= 1 << (idp->layers * IDR_BITS)) { *starting_id = id; return IDR_NEED_TO_GROW; } + p = pa[l]; + BUG_ON(!p); /* If we need to go up one layer, continue the * loop; otherwise, restart from the top. --- linux-2.6.32.orig/lib/dma-debug.c +++ linux-2.6.32/lib/dma-debug.c @@ -670,12 +670,13 @@ return count; } -static int dma_debug_device_change(struct notifier_block *nb, - unsigned long action, void *data) +static int dma_debug_device_change(struct notifier_block *nb, unsigned long action, void *data) { struct device *dev = data; int count; + if (global_disable) + return 0; switch (action) { case BUS_NOTIFY_UNBOUND_DRIVER: @@ -697,6 +698,9 @@ { struct notifier_block *nb; + if (global_disable) + return; + nb = kzalloc(sizeof(struct notifier_block), GFP_KERNEL); if (nb == NULL) { pr_err("dma_debug_add_bus: out of memory\n"); @@ -909,6 +913,9 @@ ref->size); } + if (entry->direction == DMA_BIDIRECTIONAL) + goto out; + if (ref->direction != entry->direction) { err_printk(dev, entry, "DMA-API: device driver syncs " "DMA memory with different direction " @@ -919,9 +926,6 @@ dir2name[ref->direction]); } - if (entry->direction == DMA_BIDIRECTIONAL) - goto out; - if (to_cpu && !(entry->direction == DMA_FROM_DEVICE) && !(ref->direction == DMA_TO_DEVICE)) err_printk(dev, entry, "DMA-API: device driver syncs " @@ -944,7 +948,6 @@ out: put_hash_bucket(bucket, &flags); - } void debug_dma_map_page(struct device *dev, struct page *page, size_t offset, --- linux-2.6.32.orig/lib/list_sort.c +++ linux-2.6.32/lib/list_sort.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include + +/** + * list_sort - sort a list. + * @priv: private data, passed to @cmp + * @head: the list to sort + * @cmp: the elements comparison function + * + * This function has been implemented by Mark J Roberts . It + * implements "merge sort" which has O(nlog(n)) complexity. The list is sorted + * in ascending order. + * + * The comparison function @cmp is supposed to return a negative value if @a is + * less than @b, and a positive value if @a is greater than @b. If @a and @b + * are equivalent, then it does not matter what this function returns. + */ +void list_sort(void *priv, struct list_head *head, + int (*cmp)(void *priv, struct list_head *a, + struct list_head *b)) +{ + struct list_head *p, *q, *e, *list, *tail, *oldhead; + int insize, nmerges, psize, qsize, i; + + if (list_empty(head)) + return; + + list = head->next; + list_del(head); + insize = 1; + for (;;) { + p = oldhead = list; + list = tail = NULL; + nmerges = 0; + + while (p) { + nmerges++; + q = p; + psize = 0; + for (i = 0; i < insize; i++) { + psize++; + q = q->next == oldhead ? NULL : q->next; + if (!q) + break; + } + + qsize = insize; + while (psize > 0 || (qsize > 0 && q)) { + if (!psize) { + e = q; + q = q->next; + qsize--; + if (q == oldhead) + q = NULL; + } else if (!qsize || !q) { + e = p; + p = p->next; + psize--; + if (p == oldhead) + p = NULL; + } else if (cmp(priv, p, q) <= 0) { + e = p; + p = p->next; + psize--; + if (p == oldhead) + p = NULL; + } else { + e = q; + q = q->next; + qsize--; + if (q == oldhead) + q = NULL; + } + if (tail) + tail->next = e; + else + list = e; + e->prev = tail; + tail = e; + } + p = q; + } + + tail->next = list; + list->prev = tail; + + if (nmerges <= 1) + break; + + insize *= 2; + } + + head->next = list; + head->prev = list->prev; + list->prev->next = head; + list->prev = head; +} + +EXPORT_SYMBOL(list_sort); --- linux-2.6.32.orig/lib/Makefile +++ linux-2.6.32/lib/Makefile @@ -21,7 +21,7 @@ obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \ - string_helpers.o gcd.o + string_helpers.o gcd.o list_sort.o lcm.o ifeq ($(CONFIG_DEBUG_KOBJECT),y) CFLAGS_kobject.o += -DDEBUG --- linux-2.6.32.orig/arch/Kconfig +++ linux-2.6.32/arch/Kconfig @@ -6,8 +6,6 @@ tristate "OProfile system profiling (EXPERIMENTAL)" depends on PROFILING depends on HAVE_OPROFILE - depends on TRACING_SUPPORT - select TRACING select RING_BUFFER select RING_BUFFER_ALLOW_SWAP help --- linux-2.6.32.orig/arch/mn10300/kernel/entry.S +++ linux-2.6.32/arch/mn10300/kernel/entry.S @@ -578,7 +578,7 @@ .long sys_ni_syscall /* reserved for streams2 */ .long sys_vfork /* 190 */ .long sys_getrlimit - .long sys_mmap2 + .long sys_mmap_pgoff .long sys_truncate64 .long sys_ftruncate64 .long sys_stat64 /* 195 */ --- linux-2.6.32.orig/arch/mn10300/kernel/sys_mn10300.c +++ linux-2.6.32/arch/mn10300/kernel/sys_mn10300.c @@ -23,47 +23,13 @@ #include -#define MIN_MAP_ADDR PAGE_SIZE /* minimum fixed mmap address */ - -/* - * memory mapping syscall - */ -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - struct file *file = NULL; - long error = -EINVAL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - if (flags & MAP_FIXED && addr < MIN_MAP_ADDR) - goto out; - - error = -EBADF; - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - asmlinkage long old_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long offset) { if (offset & ~PAGE_MASK) return -EINVAL; - return sys_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); + return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); } struct sel_arg_struct { --- linux-2.6.32.orig/arch/mn10300/include/asm/mman.h +++ linux-2.6.32/arch/mn10300/include/asm/mman.h @@ -1 +1,6 @@ #include + +#define MIN_MAP_ADDR PAGE_SIZE /* minimum fixed mmap address */ + +#define arch_mmap_check(addr, len, flags) \ + (((flags) & MAP_FIXED && (addr) < MIN_MAP_ADDR) ? -EINVAL : 0) --- linux-2.6.32.orig/arch/s390/kernel/compat_linux.c +++ linux-2.6.32/arch/s390/kernel/compat_linux.c @@ -683,38 +683,6 @@ u32 offset; }; -/* common code for old and new mmaps */ -static inline long do_mmap2( - unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - struct file * file = NULL; - unsigned long error = -EBADF; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - if (!IS_ERR((void *) error) && error + len >= 0x80000000ULL) { - /* Result is out of bounds. */ - do_munmap(current->mm, addr, len); - error = -ENOMEM; - } - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - - asmlinkage unsigned long old32_mmap(struct mmap_arg_struct_emu31 __user *arg) { @@ -728,7 +696,8 @@ if (a.offset & ~PAGE_MASK) goto out; - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, + a.offset >> PAGE_SHIFT); out: return error; } @@ -741,7 +710,7 @@ if (copy_from_user(&a, arg, sizeof(a))) goto out; - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); out: return error; } --- linux-2.6.32.orig/arch/s390/kernel/sys_s390.c +++ linux-2.6.32/arch/s390/kernel/sys_s390.c @@ -32,32 +32,6 @@ #include #include "entry.h" -/* common code for old and new mmaps */ -static inline long do_mmap2( - unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - long error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - /* * Perform the select(nd, in, out, ex, tv) and mmap() system * calls. Linux for S/390 isn't able to handle more than 5 @@ -81,7 +55,7 @@ if (copy_from_user(&a, arg, sizeof(a))) goto out; - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); out: return error; } @@ -98,7 +72,7 @@ if (a.offset & ~PAGE_MASK) goto out; - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); out: return error; } --- linux-2.6.32.orig/arch/s390/kernel/entry.S +++ linux-2.6.32/arch/s390/kernel/entry.S @@ -571,6 +571,7 @@ mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID oi __TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP TRACE_IRQS_ON + lm %r2,%r6,SP_R2(%r15) # load svc arguments stosm __SF_EMPTY(%r15),0x03 # reenable interrupts b BASED(sysc_do_svc) --- linux-2.6.32.orig/arch/s390/kernel/entry64.S +++ linux-2.6.32/arch/s390/kernel/entry64.S @@ -549,6 +549,7 @@ mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP TRACE_IRQS_ON + lmg %r2,%r6,SP_R2(%r15) # load svc arguments stosm __SF_EMPTY(%r15),0x03 # reenable interrupts j sysc_do_svc --- linux-2.6.32.orig/arch/s390/kernel/head64.S +++ linux-2.6.32/arch/s390/kernel/head64.S @@ -83,6 +83,8 @@ slr %r0,%r0 # set cpuid to zero sigp %r1,%r0,0x12 # switch to esame mode sam64 # switch to 64 bit mode + llgfr %r13,%r13 # clear high-order half of base reg + lmh %r0,%r15,.Lzero64-.LPG1(%r13) # clear high-order half lctlg %c0,%c15,.Lctl-.LPG1(%r13) # load control registers lg %r12,.Lparmaddr-.LPG1(%r13) # pointer to parameter area # move IPL device to lowcore @@ -127,6 +129,7 @@ .L4malign:.quad 0xffffffffffc00000 .Lscan2g:.quad 0x80000000 + 0x20000 - 8 # 2GB + 128K - 8 .Lnop: .long 0x07000700 +.Lzero64:.fill 16,4,0x0 #ifdef CONFIG_ZFCPDUMP .Lcurrent_cpu: .long 0x0 --- linux-2.6.32.orig/arch/s390/kernel/ptrace.c +++ linux-2.6.32/arch/s390/kernel/ptrace.c @@ -632,7 +632,7 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs) { - long ret; + long ret = 0; /* Do the secure computing check first. */ secure_computing(regs->gprs[2]); @@ -641,7 +641,6 @@ * The sysc_tracesys code in entry.S stored the system * call number to gprs[2]. */ - ret = regs->gprs[2]; if (test_thread_flag(TIF_SYSCALL_TRACE) && (tracehook_report_syscall_entry(regs) || regs->gprs[2] >= NR_syscalls)) { @@ -663,7 +662,7 @@ regs->gprs[2], regs->orig_gpr2, regs->gprs[3], regs->gprs[4], regs->gprs[5]); - return ret; + return ret ?: regs->gprs[2]; } asmlinkage void do_syscall_trace_exit(struct pt_regs *regs) --- linux-2.6.32.orig/arch/s390/include/asm/kvm.h +++ linux-2.6.32/arch/s390/include/asm/kvm.h @@ -1,6 +1,5 @@ #ifndef __LINUX_KVM_S390_H #define __LINUX_KVM_S390_H - /* * asm-s390/kvm.h - KVM s390 specific structures and definitions * @@ -15,6 +14,8 @@ */ #include +#define __KVM_S390 + /* for KVM_GET_REGS and KVM_SET_REGS */ struct kvm_regs { /* general purpose regs for s390 */ --- linux-2.6.32.orig/arch/s390/kvm/sigp.c +++ linux-2.6.32/arch/s390/kvm/sigp.c @@ -188,9 +188,9 @@ /* make sure that the new value is valid memory */ address = address & 0x7fffe000u; - if ((copy_from_guest(vcpu, &tmp, - (u64) (address + vcpu->arch.sie_block->gmsor) , 1)) || - (copy_from_guest(vcpu, &tmp, (u64) (address + + if ((copy_from_user(&tmp, (void __user *) + (address + vcpu->arch.sie_block->gmsor) , 1)) || + (copy_from_user(&tmp, (void __user *)(address + vcpu->arch.sie_block->gmsor + PAGE_SIZE), 1))) { *reg |= SIGP_STAT_INVALID_PARAMETER; return 1; /* invalid parameter */ --- linux-2.6.32.orig/arch/s390/kvm/intercept.c +++ linux-2.6.32/arch/s390/kvm/intercept.c @@ -213,7 +213,7 @@ return rc2; } -static const intercept_handler_t intercept_funcs[0x48 >> 2] = { +static const intercept_handler_t intercept_funcs[] = { [0x00 >> 2] = handle_noop, [0x04 >> 2] = handle_instruction, [0x08 >> 2] = handle_prog, @@ -230,7 +230,7 @@ intercept_handler_t func; u8 code = vcpu->arch.sie_block->icptcode; - if (code & 3 || code > 0x48) + if (code & 3 || (code >> 2) >= ARRAY_SIZE(intercept_funcs)) return -ENOTSUPP; func = intercept_funcs[code >> 2]; if (func) --- linux-2.6.32.orig/arch/s390/kvm/kvm-s390.c +++ linux-2.6.32/arch/s390/kvm/kvm-s390.c @@ -116,10 +116,16 @@ int kvm_dev_ioctl_check_extension(long ext) { + int r; + switch (ext) { + case KVM_CAP_S390_PSW: + r = 1; + break; default: - return 0; + r = 0; } + return r; } /* Section: vm related */ @@ -419,8 +425,10 @@ vcpu_load(vcpu); if (atomic_read(&vcpu->arch.sie_block->cpuflags) & CPUSTAT_RUNNING) rc = -EBUSY; - else - vcpu->arch.sie_block->gpsw = psw; + else { + vcpu->run->psw_mask = psw.mask; + vcpu->run->psw_addr = psw.addr; + } vcpu_put(vcpu); return rc; } @@ -508,9 +516,6 @@ switch (kvm_run->exit_reason) { case KVM_EXIT_S390_SIEIC: - vcpu->arch.sie_block->gpsw.mask = kvm_run->s390_sieic.mask; - vcpu->arch.sie_block->gpsw.addr = kvm_run->s390_sieic.addr; - break; case KVM_EXIT_UNKNOWN: case KVM_EXIT_INTR: case KVM_EXIT_S390_RESET: @@ -519,6 +524,9 @@ BUG(); } + vcpu->arch.sie_block->gpsw.mask = kvm_run->psw_mask; + vcpu->arch.sie_block->gpsw.addr = kvm_run->psw_addr; + might_fault(); do { @@ -538,8 +546,6 @@ /* intercept cannot be handled in-kernel, prepare kvm-run */ kvm_run->exit_reason = KVM_EXIT_S390_SIEIC; kvm_run->s390_sieic.icptcode = vcpu->arch.sie_block->icptcode; - kvm_run->s390_sieic.mask = vcpu->arch.sie_block->gpsw.mask; - kvm_run->s390_sieic.addr = vcpu->arch.sie_block->gpsw.addr; kvm_run->s390_sieic.ipa = vcpu->arch.sie_block->ipa; kvm_run->s390_sieic.ipb = vcpu->arch.sie_block->ipb; rc = 0; @@ -551,6 +557,9 @@ rc = 0; } + kvm_run->psw_mask = vcpu->arch.sie_block->gpsw.mask; + kvm_run->psw_addr = vcpu->arch.sie_block->gpsw.addr; + if (vcpu->sigset_active) sigprocmask(SIG_SETMASK, &sigsaved, NULL); --- linux-2.6.32.orig/arch/m32r/kernel/sys_m32r.c +++ linux-2.6.32/arch/m32r/kernel/sys_m32r.c @@ -76,30 +76,6 @@ return oldval; } -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file *file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - /* * sys_ipc() is the de-multiplexer for the SysV IPC calls.. * --- linux-2.6.32.orig/arch/m32r/kernel/syscall_table.S +++ linux-2.6.32/arch/m32r/kernel/syscall_table.S @@ -191,7 +191,7 @@ .long sys_ni_syscall /* streams2 */ .long sys_vfork /* 190 */ .long sys_getrlimit - .long sys_mmap2 + .long sys_mmap_pgoff .long sys_truncate64 .long sys_ftruncate64 .long sys_stat64 /* 195 */ --- linux-2.6.32.orig/arch/mips/kernel/syscall.c +++ linux-2.6.32/arch/mips/kernel/syscall.c @@ -93,7 +93,8 @@ * We do not accept a shared mapping if it would violate * cache aliasing constraints. */ - if ((flags & MAP_SHARED) && (addr & shm_align_mask)) + if ((flags & MAP_SHARED) && + ((addr - (pgoff << PAGE_SHIFT)) & shm_align_mask)) return -EINVAL; return addr; } @@ -129,31 +130,6 @@ } } -/* common code for old and new mmaps */ -static inline unsigned long -do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flags, unsigned long fd, unsigned long pgoff) -{ - unsigned long error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, unsigned long, prot, unsigned long, flags, unsigned long, fd, off_t, offset) @@ -164,7 +140,7 @@ if (offset & ~PAGE_MASK) goto out; - result = do_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); + result = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); out: return result; @@ -177,7 +153,7 @@ if (pgoff & (~PAGE_MASK >> 12)) return -EINVAL; - return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); } save_static_function(sys_fork); --- linux-2.6.32.orig/arch/mips/kernel/linux32.c +++ linux-2.6.32/arch/mips/kernel/linux32.c @@ -67,28 +67,13 @@ unsigned long, prot, unsigned long, flags, unsigned long, fd, unsigned long, pgoff) { - struct file * file = NULL; unsigned long error; error = -EINVAL; if (pgoff & (~PAGE_MASK >> 12)) goto out; - pgoff >>= PAGE_SHIFT-12; - - if (!(flags & MAP_ANONYMOUS)) { - error = -EBADF; - file = fget(fd); - if (!file) - goto out; - } - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); - + error = sys_mmap_pgoff(addr, len, prot, flags, fd, + pgoff >> (PAGE_SHIFT-12)); out: return error; } --- linux-2.6.32.orig/arch/mips/include/asm/mach-sibyte/war.h +++ linux-2.6.32/arch/mips/include/asm/mach-sibyte/war.h @@ -16,7 +16,11 @@ #if defined(CONFIG_SB1_PASS_1_WORKAROUNDS) || \ defined(CONFIG_SB1_PASS_2_WORKAROUNDS) -#define BCM1250_M3_WAR 1 +#ifndef __ASSEMBLY__ +extern int sb1250_m3_workaround_needed(void); +#endif + +#define BCM1250_M3_WAR sb1250_m3_workaround_needed() #define SIBYTE_1956_WAR 1 #else --- linux-2.6.32.orig/arch/mips/mm/tlbex.c +++ linux-2.6.32/arch/mips/mm/tlbex.c @@ -73,9 +73,6 @@ enum label_id { label_second_part = 1, label_leave, -#ifdef MODULE_START - label_module_alloc, -#endif label_vmalloc, label_vmalloc_done, label_tlbw_hazard, @@ -92,9 +89,6 @@ UASM_L_LA(_second_part) UASM_L_LA(_leave) -#ifdef MODULE_START -UASM_L_LA(_module_alloc) -#endif UASM_L_LA(_vmalloc) UASM_L_LA(_vmalloc_done) UASM_L_LA(_tlbw_hazard) @@ -802,8 +796,6 @@ } else { #if defined(CONFIG_HUGETLB_PAGE) const enum label_id ls = label_tlb_huge_update; -#elif defined(MODULE_START) - const enum label_id ls = label_module_alloc; #else const enum label_id ls = label_vmalloc; #endif --- linux-2.6.32.orig/arch/mips/sibyte/sb1250/setup.c +++ linux-2.6.32/arch/mips/sibyte/sb1250/setup.c @@ -87,6 +87,21 @@ return ret; } +int sb1250_m3_workaround_needed(void) +{ + switch (soc_type) { + case K_SYS_SOC_TYPE_BCM1250: + case K_SYS_SOC_TYPE_BCM1250_ALT: + case K_SYS_SOC_TYPE_BCM1250_ALT2: + case K_SYS_SOC_TYPE_BCM1125: + case K_SYS_SOC_TYPE_BCM1125H: + return soc_pass < K_SYS_REVISION_BCM1250_C0; + + default: + return 0; + } +} + static int __init setup_bcm112x(void) { int ret = 0; --- linux-2.6.32.orig/arch/avr32/kernel/sys_avr32.c +++ linux-2.6.32/arch/avr32/kernel/sys_avr32.c @@ -5,39 +5,8 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include -#include -#include -#include #include -#include -#include -#include - -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, off_t offset) -{ - int error = -EBADF; - struct file *file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - return error; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, offset); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); - return error; -} - int kernel_execve(const char *file, char **argv, char **envp) { register long scno asm("r8") = __NR_execve; --- linux-2.6.32.orig/arch/avr32/kernel/syscall-stubs.S +++ linux-2.6.32/arch/avr32/kernel/syscall-stubs.S @@ -61,7 +61,7 @@ __sys_mmap2: pushm lr st.w --sp, ARG6 - call sys_mmap2 + call sys_mmap_pgoff sub sp, -4 popm pc --- linux-2.6.32.orig/arch/avr32/include/asm/syscalls.h +++ linux-2.6.32/arch/avr32/include/asm/syscalls.h @@ -29,10 +29,6 @@ struct pt_regs *); asmlinkage int sys_rt_sigreturn(struct pt_regs *); -/* kernel/sys_avr32.c */ -asmlinkage long sys_mmap2(unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long, off_t); - /* mm/cache.c */ asmlinkage int sys_cacheflush(int, void __user *, size_t); --- linux-2.6.32.orig/arch/frv/kernel/sys_frv.c +++ linux-2.6.32/arch/frv/kernel/sys_frv.c @@ -31,9 +31,6 @@ unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) { - int error = -EBADF; - struct file * file = NULL; - /* As with sparc32, make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE we have.... */ @@ -41,69 +38,10 @@ trying to map something we can't */ if (pgoff & ((1 << (PAGE_SHIFT - 12)) - 1)) return -EINVAL; - pgoff >>= PAGE_SHIFT - 12; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - -#if 0 /* DAVIDM - do we want this */ -struct mmap_arg_struct64 { - __u32 addr; - __u32 len; - __u32 prot; - __u32 flags; - __u64 offset; /* 64 bits */ - __u32 fd; -}; - -asmlinkage long sys_mmap64(struct mmap_arg_struct64 *arg) -{ - int error = -EFAULT; - struct file * file = NULL; - struct mmap_arg_struct64 a; - unsigned long pgoff; - - if (copy_from_user(&a, arg, sizeof(a))) - return -EFAULT; - - if ((long)a.offset & ~PAGE_MASK) - return -EINVAL; - - pgoff = a.offset >> PAGE_SHIFT; - if ((a.offset >> PAGE_SHIFT) != pgoff) - return -EINVAL; - - if (!(a.flags & MAP_ANONYMOUS)) { - error = -EBADF; - file = fget(a.fd); - if (!file) - goto out; - } - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, a.addr, a.len, a.prot, a.flags, pgoff); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); -out: - return error; + return sys_mmap_pgoff(addr, len, prot, flags, fd, + pgoff >> (PAGE_SHIFT - 12)); } -#endif /* * sys_ipc() is the de-multiplexer for the SysV IPC calls.. --- linux-2.6.32.orig/arch/frv/include/asm/page.h +++ linux-2.6.32/arch/frv/include/asm/page.h @@ -63,12 +63,10 @@ #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) -#ifdef CONFIG_MMU #define VM_DATA_DEFAULT_FLAGS \ (VM_READ | VM_WRITE | \ ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) -#endif #endif /* __ASSEMBLY__ */ --- linux-2.6.32.orig/arch/arm/Kconfig +++ linux-2.6.32/arch/arm/Kconfig @@ -1508,6 +1508,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "fs/Kconfig" source "arch/arm/Kconfig.debug" --- linux-2.6.32.orig/arch/arm/mach-pxa/em-x270.c +++ linux-2.6.32/arch/arm/mach-pxa/em-x270.c @@ -497,16 +497,15 @@ goto err_free_vbus_gpio; /* USB Hub power-on and reset */ - gpio_direction_output(usb_hub_reset, 0); + gpio_direction_output(usb_hub_reset, 1); + gpio_direction_output(GPIO9_USB_VBUS_EN, 0); regulator_enable(em_x270_usb_ldo); - gpio_set_value(usb_hub_reset, 1); gpio_set_value(usb_hub_reset, 0); + gpio_set_value(usb_hub_reset, 1); regulator_disable(em_x270_usb_ldo); regulator_enable(em_x270_usb_ldo); - gpio_set_value(usb_hub_reset, 1); - - /* enable VBUS */ - gpio_direction_output(GPIO9_USB_VBUS_EN, 1); + gpio_set_value(usb_hub_reset, 0); + gpio_set_value(GPIO9_USB_VBUS_EN, 1); return 0; --- linux-2.6.32.orig/arch/arm/mach-pxa/include/mach/colibri.h +++ linux-2.6.32/arch/arm/mach-pxa/include/mach/colibri.h @@ -2,6 +2,7 @@ #define _COLIBRI_H_ #include +#include /* * common settings for all modules --- linux-2.6.32.orig/arch/arm/kernel/entry-common.S +++ linux-2.6.32/arch/arm/kernel/entry-common.S @@ -416,12 +416,12 @@ tst r5, #PGOFF_MASK moveq r5, r5, lsr #PAGE_SHIFT - 12 streq r5, [sp, #4] - beq do_mmap2 + beq sys_mmap_pgoff mov r0, #-EINVAL mov pc, lr #else str r5, [sp, #4] - b do_mmap2 + b sys_mmap_pgoff #endif ENDPROC(sys_mmap2) --- linux-2.6.32.orig/arch/arm/kernel/sys_arm.c +++ linux-2.6.32/arch/arm/kernel/sys_arm.c @@ -28,41 +28,6 @@ #include #include -extern unsigned long do_mremap(unsigned long addr, unsigned long old_len, - unsigned long new_len, unsigned long flags, - unsigned long new_addr); - -/* common code for old and new mmaps */ -inline long do_mmap2( - unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EINVAL; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - if (flags & MAP_FIXED && addr < FIRST_USER_ADDRESS) - goto out; - - error = -EBADF; - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - struct mmap_arg_struct { unsigned long addr; unsigned long len; @@ -84,29 +49,11 @@ if (a.offset & ~PAGE_MASK) goto out; - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); out: return error; } -asmlinkage unsigned long -sys_arm_mremap(unsigned long addr, unsigned long old_len, - unsigned long new_len, unsigned long flags, - unsigned long new_addr) -{ - unsigned long ret = -EINVAL; - - if (flags & MREMAP_FIXED && new_addr < FIRST_USER_ADDRESS) - goto out; - - down_write(¤t->mm->mmap_sem); - ret = do_mremap(addr, old_len, new_len, flags, new_addr); - up_write(¤t->mm->mmap_sem); - -out: - return ret; -} - /* * Perform the select(nd, in, out, ex, tv) and mmap() system * calls. --- linux-2.6.32.orig/arch/arm/kernel/calls.S +++ linux-2.6.32/arch/arm/kernel/calls.S @@ -172,7 +172,7 @@ /* 160 */ CALL(sys_sched_get_priority_min) CALL(sys_sched_rr_get_interval) CALL(sys_nanosleep) - CALL(sys_arm_mremap) + CALL(sys_mremap) CALL(sys_setresuid16) /* 165 */ CALL(sys_getresuid16) CALL(sys_ni_syscall) /* vm86 */ --- linux-2.6.32.orig/arch/arm/boot/compressed/vmlinux.lds.in +++ linux-2.6.32/arch/arm/boot/compressed/vmlinux.lds.in @@ -36,6 +36,9 @@ _etext = .; + /* Assume size of decompressed image is 4x the compressed image */ + _image_size = (_etext - _text) * 4; + _got_start = .; .got : { *(.got) } _got_end = .; --- linux-2.6.32.orig/arch/arm/boot/compressed/head.S +++ linux-2.6.32/arch/arm/boot/compressed/head.S @@ -162,9 +162,9 @@ .text adr r0, LC0 - ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, ip, sp} ) - THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, ip} ) - THUMB( ldr sp, [r0, #28] ) + ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp}) + THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} ) + THUMB( ldr sp, [r0, #32] ) subs r0, r0, r1 @ calculate the delta offset @ if delta is zero, we are @@ -174,12 +174,13 @@ /* * We're running at a different address. We need to fix * up various pointers: - * r5 - zImage base address - * r6 - GOT start + * r5 - zImage base address (_start) + * r6 - size of decompressed image + * r11 - GOT start * ip - GOT end */ add r5, r5, r0 - add r6, r6, r0 + add r11, r11, r0 add ip, ip, r0 #ifndef CONFIG_ZBOOT_ROM @@ -197,10 +198,10 @@ /* * Relocate all entries in the GOT table. */ -1: ldr r1, [r6, #0] @ relocate entries in the GOT +1: ldr r1, [r11, #0] @ relocate entries in the GOT add r1, r1, r0 @ table. This fixes up the - str r1, [r6], #4 @ C references. - cmp r6, ip + str r1, [r11], #4 @ C references. + cmp r11, ip blo 1b #else @@ -208,12 +209,12 @@ * Relocate entries in the GOT table. We only relocate * the entries that are outside the (relocated) BSS region. */ -1: ldr r1, [r6, #0] @ relocate entries in the GOT +1: ldr r1, [r11, #0] @ relocate entries in the GOT cmp r1, r2 @ entry < bss_start || cmphs r3, r1 @ _end < entry addlo r1, r1, r0 @ table. This fixes up the - str r1, [r6], #4 @ C references. - cmp r6, ip + str r1, [r11], #4 @ C references. + cmp r11, ip blo 1b #endif @@ -239,6 +240,7 @@ * Check to see if we will overwrite ourselves. * r4 = final kernel address * r5 = start of this image + * r6 = size of decompressed image * r2 = end of malloc space (and therefore this image) * We basically want: * r4 >= r2 -> OK @@ -246,8 +248,7 @@ */ cmp r4, r2 bhs wont_overwrite - sub r3, sp, r5 @ > compressed kernel size - add r0, r4, r3, lsl #2 @ allow for 4x expansion + add r0, r4, r6 cmp r0, r5 bls wont_overwrite @@ -263,7 +264,6 @@ * r1-r3 = unused * r4 = kernel execution address * r5 = decompressed kernel start - * r6 = processor ID * r7 = architecture ID * r8 = atags pointer * r9-r12,r14 = corrupted @@ -304,7 +304,8 @@ .word _end @ r3 .word zreladdr @ r4 .word _start @ r5 - .word _got_start @ r6 + .word _image_size @ r6 + .word _got_start @ r11 .word _got_end @ ip .word user_stack+4096 @ sp LC1: .word reloc_end - reloc_start @@ -328,7 +329,6 @@ * * On entry, * r4 = kernel execution address - * r6 = processor ID * r7 = architecture number * r8 = atags pointer * r9 = run-time address of "start" (???) @@ -534,7 +534,6 @@ * r1-r3 = unused * r4 = kernel execution address * r5 = decompressed kernel start - * r6 = processor ID * r7 = architecture ID * r8 = atags pointer * r9-r12,r14 = corrupted @@ -573,19 +572,19 @@ * r1 = corrupted * r2 = corrupted * r3 = block offset - * r6 = corrupted + * r9 = corrupted * r12 = corrupted */ call_cache_fn: adr r12, proc_types #ifdef CONFIG_CPU_CP15 - mrc p15, 0, r6, c0, c0 @ get processor ID + mrc p15, 0, r9, c0, c0 @ get processor ID #else - ldr r6, =CONFIG_PROCESSOR_ID + ldr r9, =CONFIG_PROCESSOR_ID #endif 1: ldr r1, [r12, #0] @ get value ldr r2, [r12, #4] @ get mask - eor r1, r1, r6 @ (real ^ match) + eor r1, r1, r9 @ (real ^ match) tst r1, r2 @ & mask ARM( addeq pc, r12, r3 ) @ call cache function THUMB( addeq r12, r3 ) @@ -764,8 +763,7 @@ * Turn off the Cache and MMU. ARMv3 does not support * reading the control register, but ARMv4 does. * - * On entry, r6 = processor ID - * On exit, r0, r1, r2, r3, r12 corrupted + * On exit, r0, r1, r2, r3, r9, r12 corrupted * This routine must preserve: r4, r6, r7 */ .align 5 @@ -838,10 +836,8 @@ /* * Clean and flush the cache to maintain consistency. * - * On entry, - * r6 = processor ID * On exit, - * r1, r2, r3, r11, r12 corrupted + * r1, r2, r3, r9, r11, r12 corrupted * This routine must preserve: * r0, r4, r5, r6, r7 */ @@ -953,7 +949,7 @@ mov r2, #64*1024 @ default: 32K dcache size (*2) mov r11, #32 @ default: 32 byte line size mrc p15, 0, r3, c0, c0, 1 @ read cache type - teq r3, r6 @ cache ID register present? + teq r3, r9 @ cache ID register present? beq no_cache_id mov r1, r3, lsr #18 and r1, r1, #7 --- linux-2.6.32.orig/arch/arm/include/asm/mman.h +++ linux-2.6.32/arch/arm/include/asm/mman.h @@ -1 +1,4 @@ #include + +#define arch_mmap_check(addr, len, flags) \ + (((flags) & MAP_FIXED && (addr) < FIRST_USER_ADDRESS) ? -EINVAL : 0) --- linux-2.6.32.orig/arch/arm/mach-versatile/Kconfig +++ linux-2.6.32/arch/arm/mach-versatile/Kconfig @@ -3,14 +3,14 @@ config ARCH_VERSATILE_PB bool "Support Versatile/PB platform" - select CPU_ARM926T + select CPU_V7 default y help Include support for the ARM(R) Versatile/PB platform. config MACH_VERSATILE_AB bool "Support Versatile/AB platform" - select CPU_ARM926T + select CPU_V7 help Include support for the ARM(R) Versatile/AP platform. --- linux-2.6.32.orig/arch/arm/mm/mmap.c +++ linux-2.6.32/arch/arm/mm/mmap.c @@ -54,7 +54,8 @@ * We enforce the MAP_FIXED case. */ if (flags & MAP_FIXED) { - if (aliasing && flags & MAP_SHARED && addr & (SHMLBA - 1)) + if (aliasing && flags & MAP_SHARED && + (addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1)) return -EINVAL; return addr; } --- linux-2.6.32.orig/arch/arm/mach-davinci/dm646x.c +++ linux-2.6.32/arch/arm/mach-davinci/dm646x.c @@ -789,7 +789,14 @@ .part_no = 0xb770, .manufacturer = 0x017, .cpu_id = DAVINCI_CPU_ID_DM6467, - .name = "dm6467", + .name = "dm6467_rev1.x", + }, + { + .variant = 0x1, + .part_no = 0xb770, + .manufacturer = 0x017, + .cpu_id = DAVINCI_CPU_ID_DM6467, + .name = "dm6467_rev3.x", }, }; --- linux-2.6.32.orig/arch/ia64/kernel/sys_ia64.c +++ linux-2.6.32/arch/ia64/kernel/sys_ia64.c @@ -100,51 +100,7 @@ asmlinkage unsigned long ia64_brk (unsigned long brk) { - unsigned long rlim, retval, newbrk, oldbrk; - struct mm_struct *mm = current->mm; - - /* - * Most of this replicates the code in sys_brk() except for an additional safety - * check and the clearing of r8. However, we can't call sys_brk() because we need - * to acquire the mmap_sem before we can do the test... - */ - down_write(&mm->mmap_sem); - - if (brk < mm->end_code) - goto out; - newbrk = PAGE_ALIGN(brk); - oldbrk = PAGE_ALIGN(mm->brk); - if (oldbrk == newbrk) - goto set_brk; - - /* Always allow shrinking brk. */ - if (brk <= mm->brk) { - if (!do_munmap(mm, newbrk, oldbrk-newbrk)) - goto set_brk; - goto out; - } - - /* Check against unimplemented/unmapped addresses: */ - if ((newbrk - oldbrk) > RGN_MAP_LIMIT || REGION_OFFSET(newbrk) > RGN_MAP_LIMIT) - goto out; - - /* Check against rlimit.. */ - rlim = current->signal->rlim[RLIMIT_DATA].rlim_cur; - if (rlim < RLIM_INFINITY && brk - mm->start_data > rlim) - goto out; - - /* Check against existing mmap mappings. */ - if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE)) - goto out; - - /* Ok, looks good - let it rip. */ - if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk) - goto out; -set_brk: - mm->brk = brk; -out: - retval = mm->brk; - up_write(&mm->mmap_sem); + unsigned long retval = sys_brk(brk); force_successful_syscall_return(); return retval; } @@ -185,39 +141,6 @@ return 0; } -static inline unsigned long -do_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, unsigned long pgoff) -{ - struct file *file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - return -EBADF; - - if (!file->f_op || !file->f_op->mmap) { - addr = -ENODEV; - goto out; - } - } - - /* Careful about overflows.. */ - len = PAGE_ALIGN(len); - if (!len || len > TASK_SIZE) { - addr = -EINVAL; - goto out; - } - - down_write(¤t->mm->mmap_sem); - addr = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - -out: if (file) - fput(file); - return addr; -} - /* * mmap2() is like mmap() except that the offset is expressed in units * of PAGE_SIZE (instead of bytes). This allows to mmap2() (pieces @@ -226,7 +149,7 @@ asmlinkage unsigned long sys_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, long pgoff) { - addr = do_mmap2(addr, len, prot, flags, fd, pgoff); + addr = sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); if (!IS_ERR((void *) addr)) force_successful_syscall_return(); return addr; @@ -238,7 +161,7 @@ if (offset_in_page(off) != 0) return -EINVAL; - addr = do_mmap2(addr, len, prot, flags, fd, off >> PAGE_SHIFT); + addr = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); if (!IS_ERR((void *) addr)) force_successful_syscall_return(); return addr; --- linux-2.6.32.orig/arch/ia64/include/asm/io.h +++ linux-2.6.32/arch/ia64/include/asm/io.h @@ -424,6 +424,8 @@ extern void __iomem * ioremap(unsigned long offset, unsigned long size); extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size); extern void iounmap (volatile void __iomem *addr); +extern void __iomem * early_ioremap (unsigned long phys_addr, unsigned long size); +extern void early_iounmap (volatile void __iomem *addr, unsigned long size); /* * String version of IO memory access ops: --- linux-2.6.32.orig/arch/ia64/include/asm/acpi.h +++ linux-2.6.32/arch/ia64/include/asm/acpi.h @@ -94,6 +94,7 @@ #define acpi_noirq 0 /* ACPI always enabled on IA64 */ #define acpi_pci_disabled 0 /* ACPI PCI always enabled on IA64 */ #define acpi_strict 1 /* no ACPI spec workarounds on IA64 */ +#define acpi_ht 0 /* no HT-only mode on IA64 */ #endif #define acpi_processor_cstate_check(x) (x) /* no idle limits on IA64 :) */ static inline void disable_acpi(void) { } --- linux-2.6.32.orig/arch/ia64/mm/ioremap.c +++ linux-2.6.32/arch/ia64/mm/ioremap.c @@ -22,6 +22,12 @@ } void __iomem * +early_ioremap (unsigned long phys_addr, unsigned long size) +{ + return __ioremap(phys_addr); +} + +void __iomem * ioremap (unsigned long phys_addr, unsigned long size) { void __iomem *addr; @@ -102,6 +108,11 @@ EXPORT_SYMBOL(ioremap_nocache); void +early_iounmap (volatile void __iomem *addr, unsigned long size) +{ +} + +void iounmap (volatile void __iomem *addr) { if (REGION_NUMBER(addr) == RGN_GATE) --- linux-2.6.32.orig/arch/ia64/kvm/kvm-ia64.c +++ linux-2.6.32/arch/ia64/kvm/kvm-ia64.c @@ -1797,7 +1797,8 @@ { struct kvm_memory_slot *memslot; int r, i; - long n, base; + long base; + unsigned long n; unsigned long *dirty_bitmap = (unsigned long *)(kvm->arch.vm_base + offsetof(struct kvm_vm_data, kvm_mem_dirty_log)); @@ -1810,7 +1811,7 @@ if (!memslot->dirty_bitmap) goto out; - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8; + n = kvm_dirty_bitmap_bytes(memslot); base = memslot->base_gfn / BITS_PER_LONG; for (i = 0; i < n/sizeof(long); ++i) { @@ -1826,7 +1827,7 @@ struct kvm_dirty_log *log) { int r; - int n; + unsigned long n; struct kvm_memory_slot *memslot; int is_dirty = 0; @@ -1844,7 +1845,7 @@ if (is_dirty) { kvm_flush_remote_tlbs(kvm); memslot = &kvm->memslots[log->slot]; - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8; + n = kvm_dirty_bitmap_bytes(memslot); memset(memslot->dirty_bitmap, 0, n); } r = 0; --- linux-2.6.32.orig/arch/ia64/ia32/sys_ia32.c +++ linux-2.6.32/arch/ia64/ia32/sys_ia32.c @@ -858,6 +858,9 @@ prot = get_prot32(prot); + if (flags & MAP_HUGETLB) + return -ENOMEM; + #if PAGE_SHIFT > IA32_PAGE_SHIFT mutex_lock(&ia32_mmap_mutex); { --- linux-2.6.32.orig/arch/sparc/Makefile +++ linux-2.6.32/arch/sparc/Makefile @@ -27,6 +27,7 @@ LDFLAGS := -m elf32_sparc CHECKFLAGS += -D__sparc__ export BITS := 32 +UTS_MACHINE := sparc #KBUILD_CFLAGS += -g -pipe -fcall-used-g5 -fcall-used-g7 KBUILD_CFLAGS += -m32 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7 @@ -46,6 +47,7 @@ LDFLAGS := -m elf64_sparc export BITS := 64 +UTS_MACHINE := sparc64 KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow \ -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare \ --- linux-2.6.32.orig/arch/sparc/kernel/signal_64.c +++ linux-2.6.32/arch/sparc/kernel/signal_64.c @@ -353,7 +353,7 @@ /* Checks if the fp is valid */ static int invalid_frame_pointer(void __user *fp, int fplen) { - if (((unsigned long) fp) & 7) + if (((unsigned long) fp) & 15) return 1; return 0; } @@ -396,15 +396,17 @@ sp = current->sas_ss_sp + current->sas_ss_size; } + sp -= framesize; + /* Always align the stack frame. This handles two cases. First, * sigaltstack need not be mindful of platform specific stack * alignment. Second, if we took this signal because the stack * is not aligned properly, we'd like to take the signal cleanly * and report that. */ - sp &= ~7UL; + sp &= ~15UL; - return (void __user *)(sp - framesize); + return (void __user *) sp; } static inline void --- linux-2.6.32.orig/arch/sparc/kernel/process_64.c +++ linux-2.6.32/arch/sparc/kernel/process_64.c @@ -365,14 +365,6 @@ struct thread_info *t = current_thread_info(); struct mm_struct *mm; - if (test_ti_thread_flag(t, TIF_ABI_PENDING)) { - clear_ti_thread_flag(t, TIF_ABI_PENDING); - if (test_ti_thread_flag(t, TIF_32BIT)) - clear_ti_thread_flag(t, TIF_32BIT); - else - set_ti_thread_flag(t, TIF_32BIT); - } - mm = t->task->mm; if (mm) tsb_context_switch(mm); @@ -406,11 +398,11 @@ } else __get_user(fp, &(((struct reg_window32 __user *)psp)->ins[6])); - /* Now 8-byte align the stack as this is mandatory in the - * Sparc ABI due to how register windows work. This hides - * the restriction from thread libraries etc. -DaveM + /* Now align the stack as this is mandatory in the Sparc ABI + * due to how register windows work. This hides the + * restriction from thread libraries etc. */ - csp &= ~7UL; + csp &= ~15UL; distance = fp - psp; rval = (csp - distance); --- linux-2.6.32.orig/arch/sparc/kernel/systbls_64.S +++ linux-2.6.32/arch/sparc/kernel/systbls_64.S @@ -21,7 +21,7 @@ /*0*/ .word sys_restart_syscall, sys32_exit, sys_fork, sys_read, sys_write /*5*/ .word sys32_open, sys_close, sys32_wait4, sys32_creat, sys_link /*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys32_mknod -/*15*/ .word sys_chmod, sys_lchown16, sys_sparc_brk, sys32_perfctr, sys32_lseek +/*15*/ .word sys_chmod, sys_lchown16, sys_brk, sys32_perfctr, sys32_lseek /*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16 /*25*/ .word sys32_vmsplice, compat_sys_ptrace, sys_alarm, sys32_sigaltstack, sys_pause /*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice @@ -96,7 +96,7 @@ /*0*/ .word sys_restart_syscall, sparc_exit, sys_fork, sys_read, sys_write /*5*/ .word sys_open, sys_close, sys_wait4, sys_creat, sys_link /*10*/ .word sys_unlink, sys_nis_syscall, sys_chdir, sys_chown, sys_mknod -/*15*/ .word sys_chmod, sys_lchown, sys_sparc_brk, sys_perfctr, sys_lseek +/*15*/ .word sys_chmod, sys_lchown, sys_brk, sys_perfctr, sys_lseek /*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid, sys_getuid /*25*/ .word sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall /*30*/ .word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice --- linux-2.6.32.orig/arch/sparc/kernel/ldc.c +++ linux-2.6.32/arch/sparc/kernel/ldc.c @@ -1242,13 +1242,13 @@ snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name); err = request_irq(lp->cfg.rx_irq, ldc_rx, - IRQF_SAMPLE_RANDOM | IRQF_DISABLED | IRQF_SHARED, + IRQF_SAMPLE_RANDOM | IRQF_DISABLED, lp->rx_irq_name, lp); if (err) return err; err = request_irq(lp->cfg.tx_irq, ldc_tx, - IRQF_SAMPLE_RANDOM | IRQF_DISABLED | IRQF_SHARED, + IRQF_SAMPLE_RANDOM | IRQF_DISABLED, lp->tx_irq_name, lp); if (err) { free_irq(lp->cfg.rx_irq, lp); --- linux-2.6.32.orig/arch/sparc/kernel/perf_event.c +++ linux-2.6.32/arch/sparc/kernel/perf_event.c @@ -986,6 +986,17 @@ data.addr = 0; cpuc = &__get_cpu_var(cpu_hw_events); + + /* If the PMU has the TOE IRQ enable bits, we need to do a + * dummy write to the %pcr to clear the overflow bits and thus + * the interrupt. + * + * Do this before we peek at the counters to determine + * overflow so we don't lose any events. + */ + if (sparc_pmu->irq_bit) + pcr_ops->write(cpuc->pcr); + for (idx = 0; idx < MAX_HWEVENTS; idx++) { struct perf_event *event = cpuc->events[idx]; struct hw_perf_event *hwc; --- linux-2.6.32.orig/arch/sparc/kernel/process_32.c +++ linux-2.6.32/arch/sparc/kernel/process_32.c @@ -526,7 +526,7 @@ * Set some valid stack frames to give to the child. */ childstack = (struct sparc_stackf __user *) - (sp & ~0x7UL); + (sp & ~0xfUL); parentstack = (struct sparc_stackf __user *) regs->u_regs[UREG_FP]; --- linux-2.6.32.orig/arch/sparc/kernel/signal_32.c +++ linux-2.6.32/arch/sparc/kernel/signal_32.c @@ -267,15 +267,17 @@ sp = current->sas_ss_sp + current->sas_ss_size; } + sp -= framesize; + /* Always align the stack frame. This handles two cases. First, * sigaltstack need not be mindful of platform specific stack * alignment. Second, if we took this signal because the stack * is not aligned properly, we'd like to take the signal cleanly * and report that. */ - sp &= ~7UL; + sp &= ~15UL; - return (void __user *)(sp - framesize); + return (void __user *) sp; } static inline int --- linux-2.6.32.orig/arch/sparc/kernel/systbls_32.S +++ linux-2.6.32/arch/sparc/kernel/systbls_32.S @@ -19,7 +19,7 @@ /*0*/ .long sys_restart_syscall, sys_exit, sys_fork, sys_read, sys_write /*5*/ .long sys_open, sys_close, sys_wait4, sys_creat, sys_link /*10*/ .long sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys_mknod -/*15*/ .long sys_chmod, sys_lchown16, sparc_brk, sys_nis_syscall, sys_lseek +/*15*/ .long sys_chmod, sys_lchown16, sys_brk, sys_nis_syscall, sys_lseek /*20*/ .long sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16 /*25*/ .long sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause /*30*/ .long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice @@ -67,7 +67,7 @@ /*235*/ .long sys_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall /*240*/ .long sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler /*245*/ .long sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep -/*250*/ .long sparc_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl +/*250*/ .long sys_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl /*255*/ .long sys_sync_file_range, sys_clock_settime, sys_clock_gettime, sys_clock_getres, sys_clock_nanosleep /*260*/ .long sys_sched_getaffinity, sys_sched_setaffinity, sys_timer_settime, sys_timer_gettime, sys_timer_getoverrun /*265*/ .long sys_timer_delete, sys_timer_create, sys_nis_syscall, sys_io_setup, sys_io_destroy --- linux-2.6.32.orig/arch/sparc/kernel/central.c +++ linux-2.6.32/arch/sparc/kernel/central.c @@ -99,7 +99,7 @@ p->leds_resource.start = (unsigned long) (p->clock_regs + CLOCK_CTRL); - p->leds_resource.end = p->leds_resource.end; + p->leds_resource.end = p->leds_resource.start; p->leds_resource.name = "leds"; p->leds_pdev.name = "sunfire-clockboard-leds"; @@ -194,7 +194,7 @@ if (!p->central) { p->leds_resource.start = (unsigned long) (p->pregs + FHC_PREGS_CTRL); - p->leds_resource.end = p->leds_resource.end; + p->leds_resource.end = p->leds_resource.start; p->leds_resource.name = "leds"; p->leds_pdev.name = "sunfire-fhc-leds"; --- linux-2.6.32.orig/arch/sparc/kernel/tsb.S +++ linux-2.6.32/arch/sparc/kernel/tsb.S @@ -191,10 +191,12 @@ tsb_itlb_load: /* Executable bit must be set. */ -661: andcc %g5, _PAGE_EXEC_4U, %g0 - .section .sun4v_1insn_patch, "ax" +661: sethi %hi(_PAGE_EXEC_4U), %g4 + andcc %g5, %g4, %g0 + .section .sun4v_2insn_patch, "ax" .word 661b andcc %g5, _PAGE_EXEC_4V, %g0 + nop .previous be,pn %xcc, tsb_do_fault --- linux-2.6.32.orig/arch/sparc/kernel/systbls.h +++ linux-2.6.32/arch/sparc/kernel/systbls.h @@ -9,7 +9,6 @@ struct new_utsname; extern asmlinkage unsigned long sys_getpagesize(void); -extern asmlinkage unsigned long sparc_brk(unsigned long brk); extern asmlinkage long sparc_pipe(struct pt_regs *regs); extern asmlinkage long sys_ipc(unsigned int call, int first, unsigned long second, --- linux-2.6.32.orig/arch/sparc/kernel/of_device_64.c +++ linux-2.6.32/arch/sparc/kernel/of_device_64.c @@ -104,9 +104,19 @@ int i; /* Check address type match */ - if ((addr[0] ^ range[0]) & 0x03000000) - return -EINVAL; + if (!((addr[0] ^ range[0]) & 0x03000000)) + goto type_match; + + /* Special exception, we can map a 64-bit address into + * a 32-bit range. + */ + if ((addr[0] & 0x03000000) == 0x03000000 && + (range[0] & 0x03000000) == 0x02000000) + goto type_match; + + return -EINVAL; +type_match: if (of_out_of_range(addr + 1, range + 1, range + na + pna, na - 1, ns)) return -EINVAL; --- linux-2.6.32.orig/arch/sparc/kernel/sys_sparc_32.c +++ linux-2.6.32/arch/sparc/kernel/sys_sparc_32.c @@ -45,7 +45,8 @@ /* We do not accept a shared mapping if it would violate * cache aliasing constraints. */ - if ((flags & MAP_SHARED) && (addr & (SHMLBA - 1))) + if ((flags & MAP_SHARED) && + ((addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))) return -EINVAL; return addr; } @@ -79,15 +80,6 @@ } } -asmlinkage unsigned long sparc_brk(unsigned long brk) -{ - if(ARCH_SUN4C) { - if ((brk & 0xe0000000) != (current->mm->brk & 0xe0000000)) - return current->mm->brk; - } - return sys_brk(brk); -} - /* * sys_pipe() is the normal C calling standard for creating * a pipe. It's not the way unix traditionally does this, though. @@ -234,31 +226,6 @@ } /* Linux version of mmap */ -static unsigned long do_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, unsigned long fd, - unsigned long pgoff) -{ - struct file * file = NULL; - unsigned long retval = -EBADF; - - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - len = PAGE_ALIGN(len); - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - down_write(¤t->mm->mmap_sem); - retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return retval; -} asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, @@ -266,14 +233,16 @@ { /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE we have. */ - return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT - 12)); + return sys_mmap_pgoff(addr, len, prot, flags, fd, + pgoff >> (PAGE_SHIFT - 12)); } asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long off) { - return do_mmap2(addr, len, prot, flags, fd, off >> PAGE_SHIFT); + /* no alignment check? */ + return sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); } long sparc_remap_file_pages(unsigned long start, unsigned long size, @@ -287,27 +256,6 @@ (pgoff >> (PAGE_SHIFT - 12)), flags); } -extern unsigned long do_mremap(unsigned long addr, - unsigned long old_len, unsigned long new_len, - unsigned long flags, unsigned long new_addr); - -asmlinkage unsigned long sparc_mremap(unsigned long addr, - unsigned long old_len, unsigned long new_len, - unsigned long flags, unsigned long new_addr) -{ - unsigned long ret = -EINVAL; - - if (unlikely(sparc_mmap_check(addr, old_len))) - goto out; - if (unlikely(sparc_mmap_check(new_addr, new_len))) - goto out; - down_write(¤t->mm->mmap_sem); - ret = do_mremap(addr, old_len, new_len, flags, new_addr); - up_write(¤t->mm->mmap_sem); -out: - return ret; -} - /* we come to here via sys_nis_syscall so it can setup the regs argument */ asmlinkage unsigned long c_sys_nis_syscall (struct pt_regs *regs) --- linux-2.6.32.orig/arch/sparc/kernel/sys_sparc_64.c +++ linux-2.6.32/arch/sparc/kernel/sys_sparc_64.c @@ -317,10 +317,14 @@ unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, unsigned long len, unsigned long pgoff, unsigned long flags) { unsigned long align_goal, addr = -ENOMEM; + unsigned long (*get_area)(struct file *, unsigned long, + unsigned long, unsigned long, unsigned long); + + get_area = current->mm->get_unmapped_area; if (flags & MAP_FIXED) { /* Ok, don't mess with it. */ - return get_unmapped_area(NULL, orig_addr, len, pgoff, flags); + return get_area(NULL, orig_addr, len, pgoff, flags); } flags &= ~MAP_SHARED; @@ -333,7 +337,7 @@ align_goal = (64UL * 1024); do { - addr = get_unmapped_area(NULL, orig_addr, len + (align_goal - PAGE_SIZE), pgoff, flags); + addr = get_area(NULL, orig_addr, len + (align_goal - PAGE_SIZE), pgoff, flags); if (!(addr & ~PAGE_MASK)) { addr = (addr + (align_goal - 1UL)) & ~(align_goal - 1UL); break; @@ -351,7 +355,7 @@ * be obtained. */ if (addr & ~PAGE_MASK) - addr = get_unmapped_area(NULL, orig_addr, len, pgoff, flags); + addr = get_area(NULL, orig_addr, len, pgoff, flags); return addr; } @@ -399,18 +403,6 @@ } } -SYSCALL_DEFINE1(sparc_brk, unsigned long, brk) -{ - /* People could try to be nasty and use ta 0x6d in 32bit programs */ - if (test_thread_flag(TIF_32BIT) && brk >= STACK_TOP32) - return current->mm->brk; - - if (unlikely(straddles_64bit_va_hole(current->mm->brk, brk))) - return current->mm->brk; - - return sys_brk(brk); -} - /* * sys_pipe() is the normal C calling standard for creating * a pipe. It's not the way unix traditionally does this, though. @@ -568,23 +560,13 @@ unsigned long, prot, unsigned long, flags, unsigned long, fd, unsigned long, off) { - struct file * file = NULL; - unsigned long retval = -EBADF; - - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - len = PAGE_ALIGN(len); + unsigned long retval = -EINVAL; - down_write(¤t->mm->mmap_sem); - retval = do_mmap(file, addr, len, prot, flags, off); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); + if ((off + PAGE_ALIGN(len)) < off) + goto out; + if (off & ~PAGE_MASK) + goto out; + retval = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); out: return retval; } @@ -614,12 +596,6 @@ if (test_thread_flag(TIF_32BIT)) goto out; - if (unlikely(new_len >= VA_EXCLUDE_START)) - goto out; - if (unlikely(sparc_mmap_check(addr, old_len))) - goto out; - if (unlikely(sparc_mmap_check(new_addr, new_len))) - goto out; down_write(¤t->mm->mmap_sem); ret = do_mremap(addr, old_len, new_len, flags, new_addr); --- linux-2.6.32.orig/arch/sparc/kernel/nmi.c +++ linux-2.6.32/arch/sparc/kernel/nmi.c @@ -96,7 +96,6 @@ int cpu = smp_processor_id(); clear_softint(1 << irq); - pcr_ops->write(PCR_PIC_PRIV); local_cpu_data().__nmi_count++; @@ -105,6 +104,8 @@ if (notify_die(DIE_NMI, "nmi", regs, 0, pt_regs_trap_type(regs), SIGINT) == NOTIFY_STOP) touched = 1; + else + pcr_ops->write(PCR_PIC_PRIV); sum = kstat_irqs_cpu(0, cpu); if (__get_cpu_var(nmi_touch)) { --- linux-2.6.32.orig/arch/sparc/kernel/signal32.c +++ linux-2.6.32/arch/sparc/kernel/signal32.c @@ -120,8 +120,8 @@ }; /* Align macros */ -#define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 7) & (~7))) -#define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 7) & (~7))) +#define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 15) & (~15))) +#define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 15) & (~15))) int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) { @@ -420,15 +420,17 @@ sp = current->sas_ss_sp + current->sas_ss_size; } + sp -= framesize; + /* Always align the stack frame. This handles two cases. First, * sigaltstack need not be mindful of platform specific stack * alignment. Second, if we took this signal because the stack * is not aligned properly, we'd like to take the signal cleanly * and report that. */ - sp &= ~7UL; + sp &= ~15UL; - return (void __user *)(sp - framesize); + return (void __user *) sp; } static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) --- linux-2.6.32.orig/arch/sparc/include/asm/page_32.h +++ linux-2.6.32/arch/sparc/include/asm/page_32.h @@ -143,7 +143,7 @@ #define phys_to_virt __va #define ARCH_PFN_OFFSET (pfn_base) -#define virt_to_page(kaddr) (mem_map + ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT))) +#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) #define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr)) #define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) --- linux-2.6.32.orig/arch/sparc/include/asm/elf_64.h +++ linux-2.6.32/arch/sparc/include/asm/elf_64.h @@ -196,17 +196,10 @@ #define ELF_PLATFORM (NULL) #define SET_PERSONALITY(ex) \ -do { unsigned long new_flags = current_thread_info()->flags; \ - new_flags &= _TIF_32BIT; \ - if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ - new_flags |= _TIF_32BIT; \ +do { if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ + set_thread_flag(TIF_32BIT); \ else \ - new_flags &= ~_TIF_32BIT; \ - if ((current_thread_info()->flags & _TIF_32BIT) \ - != new_flags) \ - set_thread_flag(TIF_ABI_PENDING); \ - else \ - clear_thread_flag(TIF_ABI_PENDING); \ + clear_thread_flag(TIF_32BIT); \ /* flush_thread will update pgd cache */ \ if (personality(current->personality) != PER_LINUX32) \ set_personality(PER_LINUX | \ --- linux-2.6.32.orig/arch/sparc/include/asm/stat.h +++ linux-2.6.32/arch/sparc/include/asm/stat.h @@ -53,8 +53,8 @@ ino_t st_ino; mode_t st_mode; short st_nlink; - uid_t st_uid; - gid_t st_gid; + uid16_t st_uid; + gid16_t st_gid; unsigned short st_rdev; off_t st_size; time_t st_atime; --- linux-2.6.32.orig/arch/sparc/include/asm/io_32.h +++ linux-2.6.32/arch/sparc/include/asm/io_32.h @@ -8,7 +8,7 @@ #include /* IO address mapping routines need this */ #include -#define page_to_phys(page) (((page) - mem_map) << PAGE_SHIFT) +#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) static inline u32 flip_dword (u32 l) { --- linux-2.6.32.orig/arch/sparc/include/asm/thread_info_64.h +++ linux-2.6.32/arch/sparc/include/asm/thread_info_64.h @@ -227,12 +227,11 @@ /* flag bit 8 is available */ #define TIF_SECCOMP 9 /* secure computing */ #define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */ -/* flag bit 11 is available */ /* NOTE: Thread flags >= 12 should be ones we have no interest * in using in assembly, else we can't use the mask as * an immediate value in instructions such as andcc. */ -#define TIF_ABI_PENDING 12 +/* flag bit 12 is available */ #define TIF_MEMDIE 13 #define TIF_POLLING_NRFLAG 14 #define TIF_FREEZE 15 /* is freezing for suspend */ @@ -246,7 +245,6 @@ #define _TIF_32BIT (1<mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); - out: - return error; -} - long old_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long offset) @@ -70,7 +46,7 @@ if (offset & ~PAGE_MASK) goto out; - err = sys_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); + err = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); out: return err; } --- linux-2.6.32.orig/arch/um/sys-i386/shared/sysdep/syscalls.h +++ linux-2.6.32/arch/um/sys-i386/shared/sysdep/syscalls.h @@ -20,7 +20,3 @@ #define EXECUTE_SYSCALL(syscall, regs) \ ((long (*)(struct syscall_args)) \ (*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs)) - -extern long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff); --- linux-2.6.32.orig/arch/x86/Kconfig.cpu +++ linux-2.6.32/arch/x86/Kconfig.cpu @@ -323,7 +323,7 @@ config X86_XADD def_bool y - depends on X86_32 && !M386 + depends on X86_64 || !M386 config X86_PPRO_FENCE bool "PentiumPro memory ordering errata workaround" @@ -400,7 +400,7 @@ config X86_CMPXCHG64 def_bool y - depends on !M386 && !M486 + depends on X86_PAE || X86_64 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MATOM # this should be set for all -march=.. options where the compiler # generates cmov. --- linux-2.6.32.orig/arch/x86/Kconfig +++ linux-2.6.32/arch/x86/Kconfig @@ -370,6 +370,12 @@ # Following is an alphabetically sorted list of 32 bit extended platforms # Please maintain the alphabetic order if and when there are additions +config X86_LPIA + bool "LPIA-compatible" + depends on X86_32 && X86_PC + help + Choose this option if your computer is an LPIA platform. + config X86_ELAN bool "AMD Elan" depends on X86_32 @@ -622,7 +628,7 @@ bool "GART IOMMU support" if EMBEDDED default y select SWIOTLB - depends on X86_64 && PCI + depends on X86_64 && PCI && K8_NB ---help--- Support for full DMA access of devices with 32bit memory access only on systems with more than 3GB. This is usually needed for USB, @@ -827,6 +833,14 @@ Additional support for intel specific MCE features such as the thermal monitor. +config X86_MCE_XEON75XX + tristate "Intel Xeon 7500 series corrected memory error driver" + depends on X86_MCE_INTEL && PCI + ---help--- + Add support for a Intel Xeon 7500 series specific memory error driver. + This allows to report the DIMM and physical address on a corrected + memory error machine check event. + config X86_MCE_AMD def_bool y prompt "AMD MCE features" @@ -984,12 +998,6 @@ with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to /dev/cpu/31/cpuid. -config X86_CPU_DEBUG - tristate "/sys/kernel/debug/x86/cpu/* - CPU Debug support" - ---help--- - If you select this option, this will provide various x86 CPUs - information through debugfs. - choice prompt "High Memory Support" default HIGHMEM4G if !X86_NUMAQ @@ -1242,6 +1250,11 @@ def_bool X86_64 depends on MEMORY_HOTPLUG +config ILLEGAL_POINTER_VALUE + hex + default 0 if X86_32 + default 0xdead000000000000 if X86_64 + source "mm/Kconfig" config HIGHPTE @@ -2028,7 +2041,7 @@ config K8_NB def_bool y - depends on AGP_AMD64 || (X86_64 && (GART_IOMMU || (PCI && NUMA))) + depends on CPU_SUP_AMD && PCI source "drivers/pcmcia/Kconfig" @@ -2079,6 +2092,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "drivers/firmware/Kconfig" source "fs/Kconfig" --- linux-2.6.32.orig/arch/x86/Makefile_32.cpu +++ linux-2.6.32/arch/x86/Makefile_32.cpu @@ -46,6 +46,13 @@ # cpu entries cflags-$(CONFIG_X86_GENERIC) += $(call tune,generic,$(call tune,i686)) +# Work around the pentium-mmx code generator madness of gcc4.4.x which +# does stack alignment by generating horrible code _before_ the mcount +# prologue (push %ebp, mov %esp, %ebp) which breaks the function graph +# tracer assumptions. For i686, generic, core2 this is set by the +# compiler anyway +cflags-$(CONFIG_FUNCTION_GRAPH_TRACER) += $(call cc-option,-maccumulate-outgoing-args) + # Bug fix for binutils: this option is required in order to keep # binutils from generating NOPL instructions against our will. ifneq ($(CONFIG_X86_P6_NOP),y) --- linux-2.6.32.orig/arch/x86/kernel/process_64.c +++ linux-2.6.32/arch/x86/kernel/process_64.c @@ -295,11 +295,10 @@ set_tsk_thread_flag(p, TIF_FORK); - p->thread.fs = me->thread.fs; - p->thread.gs = me->thread.gs; - savesegment(gs, p->thread.gsindex); + p->thread.gs = p->thread.gsindex ? 0 : me->thread.gs; savesegment(fs, p->thread.fsindex); + p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs; savesegment(es, p->thread.es); savesegment(ds, p->thread.ds); @@ -540,6 +539,18 @@ return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); } +void set_personality_ia32(void) +{ + /* inherit personality from parent */ + + /* Make sure to be in 32bit mode */ + set_thread_flag(TIF_IA32); + current->personality |= force_personality32; + + /* Prepare the first "return" to user space */ + current_thread_info()->status |= TS_COMPAT; +} + unsigned long get_wchan(struct task_struct *p) { unsigned long stack; --- linux-2.6.32.orig/arch/x86/kernel/quirks.c +++ linux-2.6.32/arch/x86/kernel/quirks.c @@ -491,6 +491,19 @@ break; } } + +/* + * HPET MSI on some boards (ATI SB700/SB800) has side effect on + * floppy DMA. Disable HPET MSI on such platforms. + */ +static void force_disable_hpet_msi(struct pci_dev *unused) +{ + hpet_msi_disable = 1; +} + +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, + force_disable_hpet_msi); + #endif #if defined(CONFIG_PCI) && defined(CONFIG_NUMA) --- linux-2.6.32.orig/arch/x86/kernel/pci-gart_64.c +++ linux-2.6.32/arch/x86/kernel/pci-gart_64.c @@ -553,6 +553,9 @@ enable_gart_translation(dev, __pa(agp_gatt_table)); } + + /* Flush the GART-TLB to remove stale entries */ + k8_flush_garts(); } /* @@ -717,7 +720,7 @@ unsigned long scratch; long i; - if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0) + if (num_k8_northbridges == 0) return; #ifndef CONFIG_AGP_AMD64 @@ -856,7 +859,7 @@ #endif if (isdigit(*p) && get_option(&p, &arg)) iommu_size = arg; - if (!strncmp(p, "fullflush", 8)) + if (!strncmp(p, "fullflush", 9)) iommu_fullflush = 1; if (!strncmp(p, "nofullflush", 11)) iommu_fullflush = 0; --- linux-2.6.32.orig/arch/x86/kernel/tlb_uv.c +++ linux-2.6.32/arch/x86/kernel/tlb_uv.c @@ -817,10 +817,8 @@ */ apicid = blade_to_first_apicid(blade); pa = uv_read_global_mmr64(pnode, UVH_BAU_DATA_CONFIG); - if ((pa & 0xff) != UV_BAU_MESSAGE) { - uv_write_global_mmr64(pnode, UVH_BAU_DATA_CONFIG, + uv_write_global_mmr64(pnode, UVH_BAU_DATA_CONFIG, ((apicid << 32) | UV_BAU_MESSAGE)); - } return 0; } --- linux-2.6.32.orig/arch/x86/kernel/aperture_64.c +++ linux-2.6.32/arch/x86/kernel/aperture_64.c @@ -389,6 +389,7 @@ for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { int bus; int dev_base, dev_limit; + u32 ctl; bus = bus_dev_ranges[i].bus; dev_base = bus_dev_ranges[i].dev_base; @@ -401,7 +402,19 @@ iommu_detected = 1; gart_iommu_aperture = 1; - aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7; + ctl = read_pci_config(bus, slot, 3, + AMD64_GARTAPERTURECTL); + + /* + * Before we do anything else disable the GART. It may + * still be enabled if we boot into a crash-kernel here. + * Reconfiguring the GART while it is enabled could have + * unknown side-effects. + */ + ctl &= ~GARTEN; + write_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL, ctl); + + aper_order = (ctl >> 1) & 7; aper_size = (32 * 1024 * 1024) << aper_order; aper_base = read_pci_config(bus, slot, 3, AMD64_GARTAPERTUREBASE) & 0x7fff; aper_base <<= 25; --- linux-2.6.32.orig/arch/x86/kernel/mpparse.c +++ linux-2.6.32/arch/x86/kernel/mpparse.c @@ -359,13 +359,6 @@ x86_init.mpparse.mpc_record(1); } -#ifdef CONFIG_X86_BIGSMP - generic_bigsmp_probe(); -#endif - - if (apic->setup_apic_routing) - apic->setup_apic_routing(); - if (!num_processors) printk(KERN_ERR "MPTABLE: no processors registered!\n"); return num_processors; --- linux-2.6.32.orig/arch/x86/kernel/hpet.c +++ linux-2.6.32/arch/x86/kernel/hpet.c @@ -33,6 +33,8 @@ * HPET address is set in acpi/boot.c, when an ACPI entry exists */ unsigned long hpet_address; +u8 hpet_msi_disable; + #ifdef CONFIG_PCI_MSI static unsigned long hpet_num_timers; #endif @@ -383,11 +385,28 @@ hpet_writel(cnt, HPET_Tn_CMP(timer)); /* - * We need to read back the CMP register to make sure that - * what we wrote hit the chip before we compare it to the - * counter. + * We need to read back the CMP register on certain HPET + * implementations (ATI chipsets) which seem to delay the + * transfer of the compare register into the internal compare + * logic. With small deltas this might actually be too late as + * the counter could already be higher than the compare value + * at that point and we would wait for the next hpet interrupt + * forever. We found out that reading the CMP register back + * forces the transfer so we can rely on the comparison with + * the counter register below. If the read back from the + * compare register does not match the value we programmed + * then we might have a real hardware problem. We can not do + * much about it here, but at least alert the user/admin with + * a prominent warning. + * An erratum on some chipsets (ICH9,..), results in comparator read + * immediately following a write returning old value. Workaround + * for this is to read this value second time, when first + * read returns old value. */ - WARN_ON_ONCE((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt); + if (unlikely((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt)) { + WARN_ONCE((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt, + KERN_WARNING "hpet: compare register read back failed.\n"); + } return (s32)((u32)hpet_readl(HPET_COUNTER) - cnt) >= 0 ? -ETIME : 0; } @@ -584,6 +603,9 @@ unsigned int num_timers_used = 0; int i; + if (hpet_msi_disable) + return; + id = hpet_readl(HPET_ID); num_timers = ((id & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT); @@ -911,6 +933,9 @@ hpet_reserve_platform_timers(hpet_readl(HPET_ID)); hpet_print_config(); + if (hpet_msi_disable) + return 0; + for_each_online_cpu(cpu) { hpet_cpuhp_notify(NULL, CPU_ONLINE, (void *)(long)cpu); } --- linux-2.6.32.orig/arch/x86/kernel/paravirt.c +++ linux-2.6.32/arch/x86/kernel/paravirt.c @@ -345,6 +345,9 @@ .read_tscp = native_read_tscp, .load_tr_desc = native_load_tr_desc, .set_ldt = native_set_ldt, +#ifdef CONFIG_X86_32 + .load_user_cs_desc = native_load_user_cs_desc, +#endif /*CONFIG_X86_32*/ .load_gdt = native_load_gdt, .load_idt = native_load_idt, .store_gdt = native_store_gdt, --- linux-2.6.32.orig/arch/x86/kernel/pci-dma.c +++ linux-2.6.32/arch/x86/kernel/pci-dma.c @@ -214,7 +214,7 @@ if (!strncmp(p, "allowdac", 8)) forbid_dac = 0; if (!strncmp(p, "nodac", 5)) - forbid_dac = -1; + forbid_dac = 1; if (!strncmp(p, "usedac", 6)) { forbid_dac = -1; return 1; --- linux-2.6.32.orig/arch/x86/kernel/process_32.c +++ linux-2.6.32/arch/x86/kernel/process_32.c @@ -296,6 +296,8 @@ void start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) { + int cpu; + set_user_gs(regs, 0); regs->fs = 0; set_fs(USER_DS); @@ -305,6 +307,11 @@ regs->cs = __USER_CS; regs->ip = new_ip; regs->sp = new_sp; + + cpu = get_cpu(); + load_user_cs_desc(cpu, current->mm); + put_cpu(); + /* * Free the old FP and other extended state */ @@ -359,6 +366,8 @@ preload_fpu = tsk_used_math(next_p) && next_p->fpu_counter > 5; __unlazy_fpu(prev_p); + if (next_p->mm) + load_user_cs_desc(cpu, next_p->mm); /* we're going to use this soon, after a few expensive things */ if (preload_fpu) @@ -497,3 +506,40 @@ return 0; } +static void modify_cs(struct mm_struct *mm, unsigned long limit) +{ + mm->context.exec_limit = limit; + set_user_cs(&mm->context.user_cs, limit); + if (mm == current->mm) { + int cpu; + + cpu = get_cpu(); + load_user_cs_desc(cpu, mm); + put_cpu(); + } +} + +void arch_add_exec_range(struct mm_struct *mm, unsigned long limit) +{ + if (limit > mm->context.exec_limit) + modify_cs(mm, limit); +} + +void arch_remove_exec_range(struct mm_struct *mm, unsigned long old_end) +{ + struct vm_area_struct *vma; + unsigned long limit = PAGE_SIZE; + + if (old_end == mm->context.exec_limit) { + for (vma = mm->mmap; vma; vma = vma->vm_next) + if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit)) + limit = vma->vm_end; + modify_cs(mm, limit); + } +} + +void arch_flush_exec_range(struct mm_struct *mm) +{ + mm->context.exec_limit = 0; + set_user_cs(&mm->context.user_cs, 0); +} --- linux-2.6.32.orig/arch/x86/kernel/msr.c +++ linux-2.6.32/arch/x86/kernel/msr.c @@ -251,7 +251,7 @@ int i, err = 0; i = 0; - if (register_chrdev(MSR_MAJOR, "cpu/msr", &msr_fops)) { + if (__register_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr", &msr_fops)) { printk(KERN_ERR "msr: unable to get major %d for msr\n", MSR_MAJOR); err = -EBUSY; @@ -279,7 +279,7 @@ msr_device_destroy(i); class_destroy(msr_class); out_chrdev: - unregister_chrdev(MSR_MAJOR, "cpu/msr"); + __unregister_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr"); out: return err; } @@ -290,7 +290,7 @@ for_each_online_cpu(cpu) msr_device_destroy(cpu); class_destroy(msr_class); - unregister_chrdev(MSR_MAJOR, "cpu/msr"); + __unregister_chrdev(MSR_MAJOR, 0, NR_CPUS, "cpu/msr"); unregister_hotcpu_notifier(&msr_class_cpu_notifier); } --- linux-2.6.32.orig/arch/x86/kernel/syscall_table_32.S +++ linux-2.6.32/arch/x86/kernel/syscall_table_32.S @@ -191,7 +191,7 @@ .long sys_ni_syscall /* reserved for streams2 */ .long ptregs_vfork /* 190 */ .long sys_getrlimit - .long sys_mmap2 + .long sys_mmap_pgoff .long sys_truncate64 .long sys_ftruncate64 .long sys_stat64 /* 195 */ --- linux-2.6.32.orig/arch/x86/kernel/pci-calgary_64.c +++ linux-2.6.32/arch/x86/kernel/pci-calgary_64.c @@ -318,13 +318,15 @@ pdev = to_pci_dev(dev); + /* search up the device tree for an iommu */ pbus = pdev->bus; - - /* is the device behind a bridge? Look for the root bus */ - while (pbus->parent) + do { + tbl = pci_iommu(pbus); + if (tbl && tbl->it_busno == pbus->number) + break; + tbl = NULL; pbus = pbus->parent; - - tbl = pci_iommu(pbus); + } while (pbus); BUG_ON(tbl && (tbl->it_busno != pbus->number)); --- linux-2.6.32.orig/arch/x86/kernel/smpboot.c +++ linux-2.6.32/arch/x86/kernel/smpboot.c @@ -1066,9 +1066,7 @@ set_cpu_sibling_map(0); enable_IR_x2apic(); -#ifdef CONFIG_X86_64 default_setup_apic_routing(); -#endif if (smp_sanity_check(max_cpus) < 0) { printk(KERN_INFO "SMP disabled\n"); --- linux-2.6.32.orig/arch/x86/kernel/sys_x86_64.c +++ linux-2.6.32/arch/x86/kernel/sys_x86_64.c @@ -23,26 +23,11 @@ unsigned long, fd, unsigned long, off) { long error; - struct file *file; - error = -EINVAL; if (off & ~PAGE_MASK) goto out; - error = -EBADF; - file = NULL; - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, off >> PAGE_SHIFT); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); + error = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); out: return error; } --- linux-2.6.32.orig/arch/x86/kernel/process.c +++ linux-2.6.32/arch/x86/kernel/process.c @@ -91,18 +91,6 @@ { struct task_struct *tsk = current; -#ifdef CONFIG_X86_64 - if (test_tsk_thread_flag(tsk, TIF_ABI_PENDING)) { - clear_tsk_thread_flag(tsk, TIF_ABI_PENDING); - if (test_tsk_thread_flag(tsk, TIF_IA32)) { - clear_tsk_thread_flag(tsk, TIF_IA32); - } else { - set_tsk_thread_flag(tsk, TIF_IA32); - current_thread_info()->status |= TS_COMPAT; - } - } -#endif - clear_tsk_thread_flag(tsk, TIF_DEBUG); tsk->thread.debugreg0 = 0; @@ -451,21 +439,39 @@ } /* - * Check for AMD CPUs, which have potentially C1E support + * Check for AMD CPUs, where APIC timer interrupt does not wake up CPU from C1e. + * For more information see + * - Erratum #400 for NPT family 0xf and family 0x10 CPUs + * - Erratum #365 for family 0x11 (not affected because C1e not in use) */ static int __cpuinit check_c1e_idle(const struct cpuinfo_x86 *c) { + u64 val; if (c->x86_vendor != X86_VENDOR_AMD) - return 0; - - if (c->x86 < 0x0F) - return 0; + goto no_c1e_idle; /* Family 0x0f models < rev F do not have C1E */ - if (c->x86 == 0x0f && c->x86_model < 0x40) - return 0; + if (c->x86 == 0x0F && c->x86_model >= 0x40) + return 1; - return 1; + if (c->x86 == 0x10) { + /* + * check OSVW bit for CPUs that are not affected + * by erratum #400 + */ + if (cpu_has(c, X86_FEATURE_OSVW)) { + rdmsrl(MSR_AMD64_OSVW_ID_LENGTH, val); + if (val >= 2) { + rdmsrl(MSR_AMD64_OSVW_STATUS, val); + if (!(val & BIT(1))) + goto no_c1e_idle; + } + } + return 1; + } + +no_c1e_idle: + return 0; } static cpumask_var_t c1e_mask; @@ -607,6 +613,16 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) { unsigned long range_end = mm->brk + 0x02000000; - return randomize_range(mm->brk, range_end, 0) ? : mm->brk; + unsigned long bump = 0; +#ifdef CONFIG_X86_32 + /* in the case of NX emulation, shove the brk segment way out of the + way of the exec randomization area, since it can collide with + future allocations if not. */ + if ( (mm->get_unmapped_exec_area == arch_get_unmapped_exec_area) && + (mm->brk < 0x08000000) ) { + bump = (TASK_SIZE/6); + } +#endif + return bump + (randomize_range(mm->brk, range_end, 0) ? : mm->brk); } --- linux-2.6.32.orig/arch/x86/kernel/sys_i386_32.c +++ linux-2.6.32/arch/x86/kernel/sys_i386_32.c @@ -24,31 +24,6 @@ #include -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file *file = NULL; - struct mm_struct *mm = current->mm; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(&mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(&mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - /* * Perform the select(nd, in, out, ex, tv) and mmap() system * calls. Linux/i386 didn't use to be able to handle more than @@ -77,7 +52,7 @@ if (a.offset & ~PAGE_MASK) goto out; - err = sys_mmap2(a.addr, a.len, a.prot, a.flags, + err = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); out: return err; --- linux-2.6.32.orig/arch/x86/kernel/k8.c +++ linux-2.6.32/arch/x86/kernel/k8.c @@ -121,3 +121,17 @@ } EXPORT_SYMBOL_GPL(k8_flush_garts); +static __init int init_k8_nbs(void) +{ + int err = 0; + + err = cache_k8_northbridges(); + + if (err < 0) + printk(KERN_NOTICE "K8 NB: Cannot enumerate AMD northbridges.\n"); + + return err; +} + +/* This has to go after the PCI subsystem */ +fs_initcall(init_k8_nbs); --- linux-2.6.32.orig/arch/x86/kernel/cpuid.c +++ linux-2.6.32/arch/x86/kernel/cpuid.c @@ -192,7 +192,8 @@ int i, err = 0; i = 0; - if (register_chrdev(CPUID_MAJOR, "cpu/cpuid", &cpuid_fops)) { + if (__register_chrdev(CPUID_MAJOR, 0, NR_CPUS, + "cpu/cpuid", &cpuid_fops)) { printk(KERN_ERR "cpuid: unable to get major %d for cpuid\n", CPUID_MAJOR); err = -EBUSY; @@ -221,7 +222,7 @@ } class_destroy(cpuid_class); out_chrdev: - unregister_chrdev(CPUID_MAJOR, "cpu/cpuid"); + __unregister_chrdev(CPUID_MAJOR, 0, NR_CPUS, "cpu/cpuid"); out: return err; } @@ -233,7 +234,7 @@ for_each_online_cpu(cpu) cpuid_device_destroy(cpu); class_destroy(cpuid_class); - unregister_chrdev(CPUID_MAJOR, "cpu/cpuid"); + __unregister_chrdev(CPUID_MAJOR, 0, NR_CPUS, "cpu/cpuid"); unregister_hotcpu_notifier(&cpuid_class_cpu_notifier); } --- linux-2.6.32.orig/arch/x86/kernel/amd_iommu.c +++ linux-2.6.32/arch/x86/kernel/amd_iommu.c @@ -540,7 +540,7 @@ static void flush_devices_by_domain(struct protection_domain *domain) { struct amd_iommu *iommu; - int i; + unsigned long i; for (i = 0; i <= amd_iommu_last_bdf; ++i) { if ((domain == NULL && amd_iommu_pd_table[i] == NULL) || @@ -1230,9 +1230,10 @@ /* * If we run in passthrough mode the device must be assigned to the - * passthrough domain if it is detached from any other domain + * passthrough domain if it is detached from any other domain. + * Make sure we can deassign from the pt_domain itself. */ - if (iommu_pass_through) { + if (iommu_pass_through && domain != pt_domain) { struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; __attach_device(iommu, pt_domain, devid); } @@ -2047,10 +2048,10 @@ struct pci_dev *dev = NULL; struct dma_ops_domain *dma_dom; struct amd_iommu *iommu; - u16 devid; + u16 devid, __devid; while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { - devid = calc_devid(dev->bus->number, dev->devfn); + __devid = devid = calc_devid(dev->bus->number, dev->devfn); if (devid > amd_iommu_last_bdf) continue; devid = amd_iommu_alias_table[devid]; @@ -2065,6 +2066,10 @@ init_unity_mappings_for_device(dma_dom, devid); dma_dom->target_dev = devid; + attach_device(iommu, &dma_dom->domain, devid); + if (__devid != devid) + attach_device(iommu, &dma_dom->domain, __devid); + list_add_tail(&dma_dom->list, &iommu_pd_list); } } @@ -2079,6 +2084,11 @@ .dma_supported = amd_iommu_dma_supported, }; +void __init amd_iommu_init_api(void) +{ + register_iommu(&amd_iommu_ops); +} + /* * The function which clues the AMD IOMMU driver into dma_ops. */ @@ -2120,8 +2130,6 @@ /* Make the driver finally visible to the drivers */ dma_ops = &amd_iommu_dma_ops; - register_iommu(&amd_iommu_ops); - bus_register_notifier(&pci_bus_type, &device_nb); amd_iommu_stats_init(); @@ -2231,9 +2239,7 @@ free_pagetable(domain); - domain_id_free(domain->id); - - kfree(domain); + protection_domain_free(domain); dom->priv = NULL; } --- linux-2.6.32.orig/arch/x86/kernel/reboot.c +++ linux-2.6.32/arch/x86/kernel/reboot.c @@ -203,6 +203,15 @@ DMI_MATCH(DMI_BOARD_NAME, "0T656F"), }, }, + { /* Handle problems with rebooting on Dell OptiPlex 760 with 0G919G*/ + .callback = set_bios_reboot, + .ident = "Dell OptiPlex 760", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 760"), + DMI_MATCH(DMI_BOARD_NAME, "0G919G"), + }, + }, { /* Handle problems with rebooting on Dell 2400's */ .callback = set_bios_reboot, .ident = "Dell PowerEdge 2400", @@ -259,6 +268,14 @@ DMI_MATCH(DMI_PRODUCT_NAME, "SBC-FITPC2"), }, }, + { /* Handle problems with rebooting on ASUS P4S800 */ + .callback = set_bios_reboot, + .ident = "ASUS P4S800", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), + DMI_MATCH(DMI_BOARD_NAME, "P4S800"), + }, + }, { } }; @@ -444,6 +461,14 @@ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini3,1"), }, }, + { /* Handle problems with rebooting on the iMac9,1. */ + .callback = set_pci_reboot, + .ident = "Apple iMac9,1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"), + }, + }, { } }; --- linux-2.6.32.orig/arch/x86/kernel/e820.c +++ linux-2.6.32/arch/x86/kernel/e820.c @@ -79,7 +79,7 @@ * Note: this function only works correct if the e820 table is sorted and * not-overlapping, which is the case */ -int __init e820_all_mapped(u64 start, u64 end, unsigned type) +int e820_all_mapped(u64 start, u64 end, unsigned type) { int i; @@ -106,6 +106,7 @@ } return 0; } +EXPORT_SYMBOL_GPL(e820_all_mapped); /* * Add a memory region to the kernel e820 map. --- linux-2.6.32.orig/arch/x86/kernel/setup.c +++ linux-2.6.32/arch/x86/kernel/setup.c @@ -109,6 +109,7 @@ #ifdef CONFIG_X86_64 #include #endif +#include /* * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. @@ -666,19 +667,27 @@ DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix/MSC"), }, }, - { /* - * AMI BIOS with low memory corruption was found on Intel DG45ID board. - * It hase different DMI_BIOS_VENDOR = "Intel Corp.", for now we will + * AMI BIOS with low memory corruption was found on Intel DG45ID and + * DG45FC boards. + * It has a different DMI_BIOS_VENDOR = "Intel Corp.", for now we will * match only DMI_BOARD_NAME and see if there is more bad products * with this vendor. */ + { .callback = dmi_low_memory_corruption, .ident = "AMI BIOS", .matches = { DMI_MATCH(DMI_BOARD_NAME, "DG45ID"), }, }, + { + .callback = dmi_low_memory_corruption, + .ident = "AMI BIOS", + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "DG45FC"), + }, + }, #endif {} }; @@ -1031,6 +1040,8 @@ #endif #endif x86_init.oem.banner(); + + mcheck_intel_therm_init(); } #ifdef CONFIG_X86_32 --- linux-2.6.32.orig/arch/x86/kernel/crash.c +++ linux-2.6.32/arch/x86/kernel/crash.c @@ -27,7 +27,6 @@ #include #include #include -#include #if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC) @@ -104,10 +103,5 @@ #ifdef CONFIG_HPET_TIMER hpet_disable(); #endif - -#ifdef CONFIG_X86_64 - pci_iommu_shutdown(); -#endif - crash_save_cpu(regs, safe_smp_processor_id()); } --- linux-2.6.32.orig/arch/x86/kernel/amd_iommu_init.c +++ linux-2.6.32/arch/x86/kernel/amd_iommu_init.c @@ -136,6 +136,11 @@ system */ /* + * Set to true if ACPI table parsing and hardware intialization went properly + */ +static bool amd_iommu_initialized; + +/* * Pointer to the device table which is shared by all AMD IOMMUs * it is indexed by the PCI device id or the HT unit id and contains * information about the domain the device belongs to as well as the @@ -913,6 +918,8 @@ } WARN_ON(p != end); + amd_iommu_initialized = true; + return 0; } @@ -925,7 +932,7 @@ * ****************************************************************************/ -static int __init iommu_setup_msi(struct amd_iommu *iommu) +static int iommu_setup_msi(struct amd_iommu *iommu) { int r; @@ -1263,6 +1270,9 @@ if (acpi_table_parse("IVRS", init_iommu_all) != 0) goto free; + if (!amd_iommu_initialized) + goto free; + if (acpi_table_parse("IVRS", init_memory_definitions) != 0) goto free; @@ -1274,14 +1284,17 @@ if (ret) goto free; + enable_iommus(); + if (iommu_pass_through) ret = amd_iommu_init_passthrough(); else ret = amd_iommu_init_dma_ops(); + if (ret) goto free; - enable_iommus(); + amd_iommu_init_api(); if (iommu_pass_through) goto out; @@ -1301,6 +1314,8 @@ return ret; free: + disable_iommus(); + free_pages((unsigned long)amd_iommu_pd_alloc_bitmap, get_order(MAX_DOMAIN_ID/8)); --- linux-2.6.32.orig/arch/x86/kernel/ptrace.c +++ linux-2.6.32/arch/x86/kernel/ptrace.c @@ -408,14 +408,14 @@ { if (kbuf) { unsigned long *k = kbuf; - while (count > 0) { + while (count >= sizeof(*k)) { *k++ = getreg(target, pos); count -= sizeof(*k); pos += sizeof(*k); } } else { unsigned long __user *u = ubuf; - while (count > 0) { + while (count >= sizeof(*u)) { if (__put_user(getreg(target, pos), u++)) return -EFAULT; count -= sizeof(*u); @@ -434,14 +434,14 @@ int ret = 0; if (kbuf) { const unsigned long *k = kbuf; - while (count > 0 && !ret) { + while (count >= sizeof(*k) && !ret) { ret = putreg(target, pos, *k++); count -= sizeof(*k); pos += sizeof(*k); } } else { const unsigned long __user *u = ubuf; - while (count > 0 && !ret) { + while (count >= sizeof(*u) && !ret) { unsigned long word; ret = __get_user(word, u++); if (ret) @@ -1219,14 +1219,14 @@ { if (kbuf) { compat_ulong_t *k = kbuf; - while (count > 0) { + while (count >= sizeof(*k)) { getreg32(target, pos, k++); count -= sizeof(*k); pos += sizeof(*k); } } else { compat_ulong_t __user *u = ubuf; - while (count > 0) { + while (count >= sizeof(*u)) { compat_ulong_t word; getreg32(target, pos, &word); if (__put_user(word, u++)) @@ -1247,14 +1247,14 @@ int ret = 0; if (kbuf) { const compat_ulong_t *k = kbuf; - while (count > 0 && !ret) { + while (count >= sizeof(*k) && !ret) { ret = putreg32(target, pos, *k++); count -= sizeof(*k); pos += sizeof(*k); } } else { const compat_ulong_t __user *u = ubuf; - while (count > 0 && !ret) { + while (count >= sizeof(*u) && !ret) { compat_ulong_t word; ret = __get_user(word, u++); if (ret) --- linux-2.6.32.orig/arch/x86/kernel/traps.c +++ linux-2.6.32/arch/x86/kernel/traps.c @@ -115,6 +115,67 @@ if (!user_mode_vm(regs)) die(str, regs, err); } + +static inline int +__compare_user_cs_desc(const struct desc_struct *desc1, + const struct desc_struct *desc2) +{ + return ((desc1->limit0 != desc2->limit0) || + (desc1->limit != desc2->limit) || + (desc1->base0 != desc2->base0) || + (desc1->base1 != desc2->base1) || + (desc1->base2 != desc2->base2)); +} + +/* + * lazy-check for CS validity on exec-shield binaries: + * + * the original non-exec stack patch was written by + * Solar Designer . Thanks! + */ +static int +check_lazy_exec_limit(int cpu, struct pt_regs *regs, long error_code) +{ + struct desc_struct *desc1, *desc2; + struct vm_area_struct *vma; + unsigned long limit; + + if (current->mm == NULL) + return 0; + + limit = -1UL; + if (current->mm->context.exec_limit != -1UL) { + limit = PAGE_SIZE; + spin_lock(¤t->mm->page_table_lock); + for (vma = current->mm->mmap; vma; vma = vma->vm_next) + if ((vma->vm_flags & VM_EXEC) && (vma->vm_end > limit)) + limit = vma->vm_end; + vma = get_gate_vma(current); + if (vma && (vma->vm_flags & VM_EXEC) && (vma->vm_end > limit)) + limit = vma->vm_end; + spin_unlock(¤t->mm->page_table_lock); + if (limit >= TASK_SIZE) + limit = -1UL; + current->mm->context.exec_limit = limit; + } + set_user_cs(¤t->mm->context.user_cs, limit); + + desc1 = ¤t->mm->context.user_cs; + desc2 = get_cpu_gdt_table(cpu) + GDT_ENTRY_DEFAULT_USER_CS; + + if (__compare_user_cs_desc(desc1, desc2)) { + /* + * The CS was not in sync - reload it and retry the + * instruction. If the instruction still faults then + * we won't hit this branch next time around. + */ + load_user_cs_desc(cpu, current->mm); + + return 1; + } + + return 0; +} #endif static void __kprobes @@ -273,6 +334,20 @@ if (!user_mode(regs)) goto gp_in_kernel; +#ifdef CONFIG_X86_32 +{ + int cpu; + int ok; + + cpu = get_cpu(); + ok = check_lazy_exec_limit(cpu, regs, error_code); + put_cpu(); + + if (ok) + return; +} +#endif + tsk->thread.error_code = error_code; tsk->thread.trap_no = 13; @@ -881,11 +956,29 @@ } #ifdef CONFIG_X86_32 +/* + * The fixup code for errors in iret jumps to here (iret_exc). It loses + * the original trap number and erorr code. The bogus trap 32 and error + * code 0 are what the vanilla kernel delivers via: + * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1) + * + * NOTE: Because of the final "1" in the macro we need to enable interrupts. + * + * In case of a general protection fault in the iret instruction, we + * need to check for a lazy CS update for exec-shield. + */ dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code) { siginfo_t info; + int ok; + int cpu; local_irq_enable(); + cpu = get_cpu(); + ok = check_lazy_exec_limit(cpu, regs, error_code); + put_cpu(); + if (ok) return; + info.si_signo = SIGILL; info.si_errno = 0; info.si_code = ILL_BADSTK; --- linux-2.6.32.orig/arch/x86/kernel/tsc.c +++ linux-2.6.32/arch/x86/kernel/tsc.c @@ -763,6 +763,7 @@ { if (!tsc_unstable) { tsc_unstable = 1; + sched_clock_stable = 0; printk(KERN_INFO "Marking TSC unstable due to %s\n", reason); /* Change only the rating, when not registered */ if (clocksource_tsc.mult) --- linux-2.6.32.orig/arch/x86/kernel/acpi/cstate.c +++ linux-2.6.32/arch/x86/kernel/acpi/cstate.c @@ -48,7 +48,7 @@ * P4, Core and beyond CPUs */ if (c->x86_vendor == X86_VENDOR_INTEL && - (c->x86 > 0xf || (c->x86 == 6 && c->x86_model >= 14))) + (c->x86 > 0xf || (c->x86 == 6 && c->x86_model >= 0x0f))) flags->bm_control = 0; } EXPORT_SYMBOL(acpi_processor_power_init_bm_check); --- linux-2.6.32.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6.32/arch/x86/kernel/acpi/boot.c @@ -446,6 +446,12 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) { *irq = gsi; + +#ifdef CONFIG_X86_IO_APIC + if (acpi_irq_model == ACPI_IRQ_MODEL_IOAPIC) + setup_IO_APIC_irq_extra(gsi); +#endif + return 0; } @@ -473,7 +479,8 @@ plat_gsi = mp_register_gsi(dev, gsi, trigger, polarity); } #endif - acpi_gsi_to_irq(plat_gsi, &irq); + irq = plat_gsi; + return irq; } @@ -1184,9 +1191,6 @@ if (!error) { acpi_lapic = 1; -#ifdef CONFIG_X86_BIGSMP - generic_bigsmp_probe(); -#endif /* * Parse MADT IO-APIC entries */ @@ -1196,8 +1200,6 @@ acpi_ioapic = 1; smp_found_config = 1; - if (apic->setup_apic_routing) - apic->setup_apic_routing(); } } if (error == -EINVAL) { @@ -1348,14 +1350,6 @@ }, { .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."), --- linux-2.6.32.orig/arch/x86/kernel/acpi/sleep.c +++ linux-2.6.32/arch/x86/kernel/acpi/sleep.c @@ -162,6 +162,8 @@ #endif if (strncmp(str, "old_ordering", 12) == 0) acpi_old_suspend_ordering(); + if (strncmp(str, "sci_force_enable", 16) == 0) + acpi_set_sci_en_on_resume(); str = strchr(str, ','); if (str != NULL) str += strspn(str, ", \t"); --- linux-2.6.32.orig/arch/x86/kernel/apic/probe_64.c +++ linux-2.6.32/arch/x86/kernel/apic/probe_64.c @@ -67,17 +67,8 @@ } #endif - if (apic == &apic_flat) { - switch (boot_cpu_data.x86_vendor) { - case X86_VENDOR_INTEL: - if (num_processors > 8) - apic = &apic_physflat; - break; - case X86_VENDOR_AMD: - if (max_physical_apicid >= 8) - apic = &apic_physflat; - } - } + if (apic == &apic_flat && num_possible_cpus() > 8) + apic = &apic_physflat; printk(KERN_INFO "Setting APIC routing to %s\n", apic->name); --- linux-2.6.32.orig/arch/x86/kernel/apic/io_apic.c +++ linux-2.6.32/arch/x86/kernel/apic/io_apic.c @@ -1550,6 +1550,56 @@ } /* + * for the gsit that is not in first ioapic + * but could not use acpi_register_gsi() + * like some special sci in IBM x3330 + */ +void setup_IO_APIC_irq_extra(u32 gsi) +{ + int apic_id = 0, pin, idx, irq; + int node = cpu_to_node(boot_cpu_id); + struct irq_desc *desc; + struct irq_cfg *cfg; + + /* + * Convert 'gsi' to 'ioapic.pin'. + */ + apic_id = mp_find_ioapic(gsi); + if (apic_id < 0) + return; + + pin = mp_find_ioapic_pin(apic_id, gsi); + idx = find_irq_entry(apic_id, pin, mp_INT); + if (idx == -1) + return; + + irq = pin_2_irq(idx, apic_id, pin); +#ifdef CONFIG_SPARSE_IRQ + desc = irq_to_desc(irq); + if (desc) + return; +#endif + desc = irq_to_desc_alloc_node(irq, node); + if (!desc) { + printk(KERN_INFO "can not get irq_desc for %d\n", irq); + return; + } + + cfg = desc->chip_data; + add_pin_to_irq_node(cfg, node, apic_id, pin); + + if (test_bit(pin, mp_ioapic_routing[apic_id].pin_programmed)) { + pr_debug("Pin %d-%d already programmed\n", + mp_ioapics[apic_id].apicid, pin); + return; + } + set_bit(pin, mp_ioapic_routing[apic_id].pin_programmed); + + setup_IO_APIC_irq(apic_id, pin, irq, desc, + irq_trigger(idx), irq_polarity(idx)); +} + +/* * Set up the timer pin, possibly with the 8259A-master behind. */ static void __init setup_timer_IRQ0_pin(unsigned int apic_id, unsigned int pin, @@ -3157,6 +3207,7 @@ continue; desc_new = move_irq_desc(desc_new, node); + cfg_new = desc_new->chip_data; if (__assign_irq_vector(new, cfg_new, apic->target_cpus()) == 0) irq = new; @@ -3164,12 +3215,9 @@ } spin_unlock_irqrestore(&vector_lock, flags); - if (irq > 0) { - dynamic_irq_init(irq); - /* restore it, in case dynamic_irq_init clear it */ - if (desc_new) - desc_new->chip_data = cfg_new; - } + if (irq > 0) + dynamic_irq_init_keep_chip_data(irq); + return irq; } @@ -3192,17 +3240,12 @@ { unsigned long flags; struct irq_cfg *cfg; - struct irq_desc *desc; - /* store it, in case dynamic_irq_cleanup clear it */ - desc = irq_to_desc(irq); - cfg = desc->chip_data; - dynamic_irq_cleanup(irq); - /* connect back irq_cfg */ - desc->chip_data = cfg; + dynamic_irq_cleanup_keep_chip_data(irq); free_irte(irq); spin_lock_irqsave(&vector_lock, flags); + cfg = irq_to_desc(irq)->chip_data; __clear_irq_vector(irq, cfg); spin_unlock_irqrestore(&vector_lock, flags); } --- linux-2.6.32.orig/arch/x86/kernel/apic/apic.c +++ linux-2.6.32/arch/x86/kernel/apic/apic.c @@ -246,7 +246,7 @@ */ static void native_apic_write_dummy(u32 reg, u32 v) { - WARN_ON_ONCE((cpu_has_apic || !disable_apic)); + WARN_ON_ONCE(cpu_has_apic && !disable_apic); } static u32 native_apic_read_dummy(u32 reg) @@ -1664,8 +1664,8 @@ } #endif +#ifndef CONFIG_SMP enable_IR_x2apic(); -#ifdef CONFIG_X86_64 default_setup_apic_routing(); #endif @@ -1915,18 +1915,6 @@ if (apicid > max_physical_apicid) max_physical_apicid = apicid; -#ifdef CONFIG_X86_32 - switch (boot_cpu_data.x86_vendor) { - case X86_VENDOR_INTEL: - if (num_processors > 8) - def_to_bigsmp = 1; - break; - case X86_VENDOR_AMD: - if (max_physical_apicid >= 8) - def_to_bigsmp = 1; - } -#endif - #if defined(CONFIG_SMP) || defined(CONFIG_X86_64) early_per_cpu(x86_cpu_to_apicid, cpu) = apicid; early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid; --- linux-2.6.32.orig/arch/x86/kernel/apic/probe_32.c +++ linux-2.6.32/arch/x86/kernel/apic/probe_32.c @@ -54,6 +54,31 @@ void default_setup_apic_routing(void) { + int version = apic_version[boot_cpu_physical_apicid]; + + if (num_possible_cpus() > 8) { + switch (boot_cpu_data.x86_vendor) { + case X86_VENDOR_INTEL: + if (!APIC_XAPIC(version)) { + def_to_bigsmp = 0; + break; + } + /* If P4 and above fall through */ + case X86_VENDOR_AMD: + def_to_bigsmp = 1; + } + } + +#ifdef CONFIG_X86_BIGSMP + generic_bigsmp_probe(); +#endif + + if (apic->setup_apic_routing) + apic->setup_apic_routing(); +} + +void setup_apic_flat_routing(void) +{ #ifdef CONFIG_X86_IO_APIC printk(KERN_INFO "Enabling APIC mode: Flat. Using %d I/O APICs\n", @@ -103,7 +128,7 @@ .init_apic_ldr = default_init_apic_ldr, .ioapic_phys_id_map = default_ioapic_phys_id_map, - .setup_apic_routing = default_setup_apic_routing, + .setup_apic_routing = setup_apic_flat_routing, .multi_timer_check = NULL, .apicid_to_node = default_apicid_to_node, .cpu_to_logical_apicid = default_cpu_to_logical_apicid, --- linux-2.6.32.orig/arch/x86/kernel/apic/x2apic_uv_x.c +++ linux-2.6.32/arch/x86/kernel/apic/x2apic_uv_x.c @@ -364,13 +364,13 @@ enum map_type {map_wb, map_uc}; -static __init void map_high(char *id, unsigned long base, int shift, - int max_pnode, enum map_type map_type) +static __init void map_high(char *id, unsigned long base, int pshift, + int bshift, int max_pnode, enum map_type map_type) { unsigned long bytes, paddr; - paddr = base << shift; - bytes = (1UL << shift) * (max_pnode + 1); + paddr = base << pshift; + bytes = (1UL << bshift) * (max_pnode + 1); printk(KERN_INFO "UV: Map %s_HI 0x%lx - 0x%lx\n", id, paddr, paddr + bytes); if (map_type == map_uc) @@ -386,7 +386,7 @@ gru.v = uv_read_local_mmr(UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR); if (gru.s.enable) - map_high("GRU", gru.s.base, shift, max_pnode, map_wb); + map_high("GRU", gru.s.base, shift, shift, max_pnode, map_wb); } static __init void map_mmr_high(int max_pnode) @@ -396,7 +396,7 @@ mmr.v = uv_read_local_mmr(UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR); if (mmr.s.enable) - map_high("MMR", mmr.s.base, shift, max_pnode, map_uc); + map_high("MMR", mmr.s.base, shift, shift, max_pnode, map_uc); } static __init void map_mmioh_high(int max_pnode) @@ -406,7 +406,8 @@ mmioh.v = uv_read_local_mmr(UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR); if (mmioh.s.enable) - map_high("MMIOH", mmioh.s.base, shift, max_pnode, map_uc); + map_high("MMIOH", mmioh.s.base, shift, mmioh.s.m_io, + max_pnode, map_uc); } static __init void uv_rtc_init(void) @@ -607,8 +608,10 @@ uv_rtc_init(); for_each_present_cpu(cpu) { + int apicid = per_cpu(x86_cpu_to_apicid, cpu); + nid = cpu_to_node(cpu); - pnode = uv_apicid_to_pnode(per_cpu(x86_cpu_to_apicid, cpu)); + pnode = uv_apicid_to_pnode(apicid); blade = boot_pnode_to_blade(pnode); lcpu = uv_blade_info[blade].nr_possible_cpus; uv_blade_info[blade].nr_possible_cpus++; @@ -629,15 +632,13 @@ uv_cpu_hub_info(cpu)->gnode_extra = gnode_extra; uv_cpu_hub_info(cpu)->global_mmr_base = mmr_base; uv_cpu_hub_info(cpu)->coherency_domain_number = sn_coherency_id; - uv_cpu_hub_info(cpu)->scir.offset = SCIR_LOCAL_MMR_BASE + lcpu; + uv_cpu_hub_info(cpu)->scir.offset = uv_scir_offset(apicid); uv_node_to_blade[nid] = blade; uv_cpu_to_blade[cpu] = blade; max_pnode = max(pnode, max_pnode); - printk(KERN_DEBUG "UV: cpu %d, apicid 0x%x, pnode %d, nid %d, " - "lcpu %d, blade %d\n", - cpu, per_cpu(x86_cpu_to_apicid, cpu), pnode, nid, - lcpu, blade); + printk(KERN_DEBUG "UV: cpu %d, apicid 0x%x, pnode %d, nid %d, lcpu %d, blade %d\n", + cpu, apicid, pnode, nid, lcpu, blade); } /* Add blade/pnode info for nodes without cpus */ --- linux-2.6.32.orig/arch/x86/kernel/apic/apic_flat_64.c +++ linux-2.6.32/arch/x86/kernel/apic/apic_flat_64.c @@ -240,6 +240,11 @@ printk(KERN_DEBUG "system APIC only can use physical flat"); return 1; } + + if (!strncmp(oem_id, "IBM", 3) && !strncmp(oem_table_id, "EXA", 3)) { + printk(KERN_DEBUG "IBM Summit detected, will use apic physical"); + return 1; + } #endif return 0; --- linux-2.6.32.orig/arch/x86/kernel/cpu/intel.c +++ linux-2.6.32/arch/x86/kernel/cpu/intel.c @@ -47,6 +47,27 @@ (c->x86 == 0x6 && c->x86_model >= 0x0e)) set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); + /* + * Atom erratum AAE44/AAF40/AAG38/AAH41: + * + * A race condition between speculative fetches and invalidating + * a large page. This is worked around in microcode, but we + * need the microcode to have already been loaded... so if it is + * not, recommend a BIOS update and disable large pages. + */ + if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2) { + u32 ucode, junk; + + wrmsr(MSR_IA32_UCODE_REV, 0, 0); + sync_core(); + rdmsr(MSR_IA32_UCODE_REV, junk, ucode); + + if (ucode < 0x20e) { + printk(KERN_WARNING "Atom PSE erratum detected, BIOS microcode update recommended\n"); + clear_cpu_cap(c, X86_FEATURE_PSE); + } + } + #ifdef CONFIG_X86_64 set_cpu_cap(c, X86_FEATURE_SYSENTER32); #else @@ -70,8 +91,8 @@ if (c->x86_power & (1 << 8)) { set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC); - set_cpu_cap(c, X86_FEATURE_TSC_RELIABLE); - sched_clock_stable = 1; + if (!check_tsc_unstable()) + sched_clock_stable = 1; } /* --- linux-2.6.32.orig/arch/x86/kernel/cpu/perf_event.c +++ linux-2.6.32/arch/x86/kernel/cpu/perf_event.c @@ -190,6 +190,97 @@ [PERF_COUNT_HW_CACHE_OP_MAX] [PERF_COUNT_HW_CACHE_RESULT_MAX]; +static const u64 westmere_hw_cache_event_ids + [PERF_COUNT_HW_CACHE_MAX] + [PERF_COUNT_HW_CACHE_OP_MAX] + [PERF_COUNT_HW_CACHE_RESULT_MAX] = +{ + [ C(L1D) ] = { + [ C(OP_READ) ] = { + [ C(RESULT_ACCESS) ] = 0x010b, /* MEM_INST_RETIRED.LOADS */ + [ C(RESULT_MISS) ] = 0x0151, /* L1D.REPL */ + }, + [ C(OP_WRITE) ] = { + [ C(RESULT_ACCESS) ] = 0x020b, /* MEM_INST_RETURED.STORES */ + [ C(RESULT_MISS) ] = 0x0251, /* L1D.M_REPL */ + }, + [ C(OP_PREFETCH) ] = { + [ C(RESULT_ACCESS) ] = 0x014e, /* L1D_PREFETCH.REQUESTS */ + [ C(RESULT_MISS) ] = 0x024e, /* L1D_PREFETCH.MISS */ + }, + }, + [ C(L1I ) ] = { + [ C(OP_READ) ] = { + [ C(RESULT_ACCESS) ] = 0x0380, /* L1I.READS */ + [ C(RESULT_MISS) ] = 0x0280, /* L1I.MISSES */ + }, + [ C(OP_WRITE) ] = { + [ C(RESULT_ACCESS) ] = -1, + [ C(RESULT_MISS) ] = -1, + }, + [ C(OP_PREFETCH) ] = { + [ C(RESULT_ACCESS) ] = 0x0, + [ C(RESULT_MISS) ] = 0x0, + }, + }, + [ C(LL ) ] = { + [ C(OP_READ) ] = { + [ C(RESULT_ACCESS) ] = 0x0324, /* L2_RQSTS.LOADS */ + [ C(RESULT_MISS) ] = 0x0224, /* L2_RQSTS.LD_MISS */ + }, + [ C(OP_WRITE) ] = { + [ C(RESULT_ACCESS) ] = 0x0c24, /* L2_RQSTS.RFOS */ + [ C(RESULT_MISS) ] = 0x0824, /* L2_RQSTS.RFO_MISS */ + }, + [ C(OP_PREFETCH) ] = { + [ C(RESULT_ACCESS) ] = 0x4f2e, /* LLC Reference */ + [ C(RESULT_MISS) ] = 0x412e, /* LLC Misses */ + }, + }, + [ C(DTLB) ] = { + [ C(OP_READ) ] = { + [ C(RESULT_ACCESS) ] = 0x010b, /* MEM_INST_RETIRED.LOADS */ + [ C(RESULT_MISS) ] = 0x0108, /* DTLB_LOAD_MISSES.ANY */ + }, + [ C(OP_WRITE) ] = { + [ C(RESULT_ACCESS) ] = 0x020b, /* MEM_INST_RETURED.STORES */ + [ C(RESULT_MISS) ] = 0x010c, /* MEM_STORE_RETIRED.DTLB_MISS */ + }, + [ C(OP_PREFETCH) ] = { + [ C(RESULT_ACCESS) ] = 0x0, + [ C(RESULT_MISS) ] = 0x0, + }, + }, + [ C(ITLB) ] = { + [ C(OP_READ) ] = { + [ C(RESULT_ACCESS) ] = 0x01c0, /* INST_RETIRED.ANY_P */ + [ C(RESULT_MISS) ] = 0x0185, /* ITLB_MISSES.ANY */ + }, + [ C(OP_WRITE) ] = { + [ C(RESULT_ACCESS) ] = -1, + [ C(RESULT_MISS) ] = -1, + }, + [ C(OP_PREFETCH) ] = { + [ C(RESULT_ACCESS) ] = -1, + [ C(RESULT_MISS) ] = -1, + }, + }, + [ C(BPU ) ] = { + [ C(OP_READ) ] = { + [ C(RESULT_ACCESS) ] = 0x00c4, /* BR_INST_RETIRED.ALL_BRANCHES */ + [ C(RESULT_MISS) ] = 0x03e8, /* BPU_CLEARS.ANY */ + }, + [ C(OP_WRITE) ] = { + [ C(RESULT_ACCESS) ] = -1, + [ C(RESULT_MISS) ] = -1, + }, + [ C(OP_PREFETCH) ] = { + [ C(RESULT_ACCESS) ] = -1, + [ C(RESULT_MISS) ] = -1, + }, + }, +}; + static const u64 nehalem_hw_cache_event_ids [PERF_COUNT_HW_CACHE_MAX] [PERF_COUNT_HW_CACHE_OP_MAX] @@ -1999,6 +2090,7 @@ * Install the hw-cache-events table: */ switch (boot_cpu_data.x86_model) { + case 15: /* original 65 nm celeron/pentium/core2/xeon, "Merom"/"Conroe" */ case 22: /* single-core 65 nm celeron/core2solo "Merom-L"/"Conroe-L" */ case 23: /* current 45 nm celeron/core2/xeon "Penryn"/"Wolfdale" */ @@ -2009,7 +2101,9 @@ pr_cont("Core2 events, "); break; default: - case 26: + case 26: /* 45 nm nehalem, "Bloomfield" */ + case 30: /* 45 nm nehalem, "Lynnfield" */ + case 46: /* 45 nm nehalem-ex, "Beckton" */ memcpy(hw_cache_event_ids, nehalem_hw_cache_event_ids, sizeof(hw_cache_event_ids)); @@ -2021,6 +2115,14 @@ pr_cont("Atom events, "); break; + + case 37: /* 32 nm nehalem, "Clarkdale" */ + case 44: /* 32 nm nehalem, "Gulftown" */ + memcpy(hw_cache_event_ids, westmere_hw_cache_event_ids, + sizeof(hw_cache_event_ids)); + + pr_cont("Westmere events, "); + break; } return 0; } --- linux-2.6.32.orig/arch/x86/kernel/cpu/perfctr-watchdog.c +++ linux-2.6.32/arch/x86/kernel/cpu/perfctr-watchdog.c @@ -712,7 +712,7 @@ switch (boot_cpu_data.x86_vendor) { case X86_VENDOR_AMD: if (boot_cpu_data.x86 != 6 && boot_cpu_data.x86 != 15 && - boot_cpu_data.x86 != 16) + boot_cpu_data.x86 != 16 && boot_cpu_data.x86 != 17) return; wd_ops = &k7_wd_ops; break; --- linux-2.6.32.orig/arch/x86/kernel/cpu/intel_cacheinfo.c +++ linux-2.6.32/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -18,6 +18,7 @@ #include #include #include +#include #define LVL_1_INST 1 #define LVL_1_DATA 2 @@ -94,7 +95,7 @@ { 0xd1, LVL_3, 1024 }, /* 4-way set assoc, 64 byte line size */ { 0xd2, LVL_3, 2048 }, /* 4-way set assoc, 64 byte line size */ { 0xd6, LVL_3, 1024 }, /* 8-way set assoc, 64 byte line size */ - { 0xd7, LVL_3, 2038 }, /* 8-way set assoc, 64 byte line size */ + { 0xd7, LVL_3, 2048 }, /* 8-way set assoc, 64 byte line size */ { 0xd8, LVL_3, 4096 }, /* 12-way set assoc, 64 byte line size */ { 0xdc, LVL_3, 2048 }, /* 12-way set assoc, 64 byte line size */ { 0xdd, LVL_3, 4096 }, /* 12-way set assoc, 64 byte line size */ @@ -102,6 +103,9 @@ { 0xe2, LVL_3, 2048 }, /* 16-way set assoc, 64 byte line size */ { 0xe3, LVL_3, 4096 }, /* 16-way set assoc, 64 byte line size */ { 0xe4, LVL_3, 8192 }, /* 16-way set assoc, 64 byte line size */ + { 0xea, LVL_3, 12288 }, /* 24-way set assoc, 64 byte line size */ + { 0xeb, LVL_3, 18432 }, /* 24-way set assoc, 64 byte line size */ + { 0xec, LVL_3, 24576 }, /* 24-way set assoc, 64 byte line size */ { 0x00, 0, 0} }; @@ -147,7 +151,8 @@ union _cpuid4_leaf_ebx ebx; union _cpuid4_leaf_ecx ecx; unsigned long size; - unsigned long can_disable; + bool can_disable; + unsigned int l3_indices; DECLARE_BITMAP(shared_cpu_map, NR_CPUS); }; @@ -157,7 +162,8 @@ union _cpuid4_leaf_ebx ebx; union _cpuid4_leaf_ecx ecx; unsigned long size; - unsigned long can_disable; + bool can_disable; + unsigned int l3_indices; }; unsigned short num_cache_leaves; @@ -287,6 +293,36 @@ (ebx->split.ways_of_associativity + 1) - 1; } +struct _cache_attr { + struct attribute attr; + ssize_t (*show)(struct _cpuid4_info *, char *); + ssize_t (*store)(struct _cpuid4_info *, const char *, size_t count); +}; + +#ifdef CONFIG_CPU_SUP_AMD +static unsigned int __cpuinit amd_calc_l3_indices(void) +{ + /* + * We're called over smp_call_function_single() and therefore + * are on the correct cpu. + */ + int cpu = smp_processor_id(); + int node = cpu_to_node(cpu); + struct pci_dev *dev = node_to_k8_nb_misc(node); + unsigned int sc0, sc1, sc2, sc3; + u32 val = 0; + + pci_read_config_dword(dev, 0x1C4, &val); + + /* calculate subcache sizes */ + sc0 = !(val & BIT(0)); + sc1 = !(val & BIT(4)); + sc2 = !(val & BIT(8)) + !(val & BIT(9)); + sc3 = !(val & BIT(12)) + !(val & BIT(13)); + + return (max(max(max(sc0, sc1), sc2), sc3) << 10) - 1; +} + static void __cpuinit amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf) { @@ -296,13 +332,108 @@ if (boot_cpu_data.x86 == 0x11) return; - /* see erratum #382 */ - if ((boot_cpu_data.x86 == 0x10) && (boot_cpu_data.x86_model < 0x8)) + /* see errata #382 and #388 */ + if ((boot_cpu_data.x86 == 0x10) && + ((boot_cpu_data.x86_model < 0x8) || + (boot_cpu_data.x86_mask < 0x1))) return; - this_leaf->can_disable = 1; + /* not in virtualized environments */ + if (num_k8_northbridges == 0) + return; + + this_leaf->can_disable = true; + this_leaf->l3_indices = amd_calc_l3_indices(); +} + +static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf, + unsigned int index) +{ + int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map)); + int node = amd_get_nb_id(cpu); + struct pci_dev *dev = node_to_k8_nb_misc(node); + unsigned int reg = 0; + + if (!this_leaf->can_disable) + return -EINVAL; + + if (!dev) + return -EINVAL; + + pci_read_config_dword(dev, 0x1BC + index * 4, ®); + return sprintf(buf, "0x%08x\n", reg); +} + +#define SHOW_CACHE_DISABLE(index) \ +static ssize_t \ +show_cache_disable_##index(struct _cpuid4_info *this_leaf, char *buf) \ +{ \ + return show_cache_disable(this_leaf, buf, index); \ +} +SHOW_CACHE_DISABLE(0) +SHOW_CACHE_DISABLE(1) + +static ssize_t store_cache_disable(struct _cpuid4_info *this_leaf, + const char *buf, size_t count, unsigned int index) +{ + int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map)); + int node = amd_get_nb_id(cpu); + struct pci_dev *dev = node_to_k8_nb_misc(node); + unsigned long val = 0; + +#define SUBCACHE_MASK (3UL << 20) +#define SUBCACHE_INDEX 0xfff + + if (!this_leaf->can_disable) + return -EINVAL; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + if (!dev) + return -EINVAL; + + if (strict_strtoul(buf, 10, &val) < 0) + return -EINVAL; + + /* do not allow writes outside of allowed bits */ + if ((val & ~(SUBCACHE_MASK | SUBCACHE_INDEX)) || + ((val & SUBCACHE_INDEX) > this_leaf->l3_indices)) + return -EINVAL; + + val |= BIT(30); + pci_write_config_dword(dev, 0x1BC + index * 4, val); + /* + * We need to WBINVD on a core on the node containing the L3 cache which + * indices we disable therefore a simple wbinvd() is not sufficient. + */ + wbinvd_on_cpu(cpu); + pci_write_config_dword(dev, 0x1BC + index * 4, val | BIT(31)); + return count; } +#define STORE_CACHE_DISABLE(index) \ +static ssize_t \ +store_cache_disable_##index(struct _cpuid4_info *this_leaf, \ + const char *buf, size_t count) \ +{ \ + return store_cache_disable(this_leaf, buf, count, index); \ +} +STORE_CACHE_DISABLE(0) +STORE_CACHE_DISABLE(1) + +static struct _cache_attr cache_disable_0 = __ATTR(cache_disable_0, 0644, + show_cache_disable_0, store_cache_disable_0); +static struct _cache_attr cache_disable_1 = __ATTR(cache_disable_1, 0644, + show_cache_disable_1, store_cache_disable_1); + +#else /* CONFIG_CPU_SUP_AMD */ +static void __cpuinit +amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf) +{ +}; +#endif /* CONFIG_CPU_SUP_AMD */ + static int __cpuinit cpuid4_cache_lookup_regs(int index, struct _cpuid4_info_regs *this_leaf) @@ -520,18 +651,19 @@ { struct _cpuid4_info *this_leaf, *sibling_leaf; unsigned long num_threads_sharing; - int index_msb, i; + int index_msb, i, sibling; struct cpuinfo_x86 *c = &cpu_data(cpu); if ((index == 3) && (c->x86_vendor == X86_VENDOR_AMD)) { - struct cpuinfo_x86 *d; - for_each_online_cpu(i) { + for_each_cpu(i, c->llc_shared_map) { if (!per_cpu(cpuid4_info, i)) continue; - d = &cpu_data(i); this_leaf = CPUID4_INFO_IDX(i, index); - cpumask_copy(to_cpumask(this_leaf->shared_cpu_map), - d->llc_shared_map); + for_each_cpu(sibling, c->llc_shared_map) { + if (!cpu_online(sibling)) + continue; + set_bit(sibling, this_leaf->shared_cpu_map); + } } return; } @@ -723,82 +855,6 @@ #define to_object(k) container_of(k, struct _index_kobject, kobj) #define to_attr(a) container_of(a, struct _cache_attr, attr) -static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf, - unsigned int index) -{ - int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map)); - int node = cpu_to_node(cpu); - struct pci_dev *dev = node_to_k8_nb_misc(node); - unsigned int reg = 0; - - if (!this_leaf->can_disable) - return -EINVAL; - - if (!dev) - return -EINVAL; - - pci_read_config_dword(dev, 0x1BC + index * 4, ®); - return sprintf(buf, "%x\n", reg); -} - -#define SHOW_CACHE_DISABLE(index) \ -static ssize_t \ -show_cache_disable_##index(struct _cpuid4_info *this_leaf, char *buf) \ -{ \ - return show_cache_disable(this_leaf, buf, index); \ -} -SHOW_CACHE_DISABLE(0) -SHOW_CACHE_DISABLE(1) - -static ssize_t store_cache_disable(struct _cpuid4_info *this_leaf, - const char *buf, size_t count, unsigned int index) -{ - int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map)); - int node = cpu_to_node(cpu); - struct pci_dev *dev = node_to_k8_nb_misc(node); - unsigned long val = 0; - unsigned int scrubber = 0; - - if (!this_leaf->can_disable) - return -EINVAL; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (!dev) - return -EINVAL; - - if (strict_strtoul(buf, 10, &val) < 0) - return -EINVAL; - - val |= 0xc0000000; - - pci_read_config_dword(dev, 0x58, &scrubber); - scrubber &= ~0x1f000000; - pci_write_config_dword(dev, 0x58, scrubber); - - pci_write_config_dword(dev, 0x1BC + index * 4, val & ~0x40000000); - wbinvd(); - pci_write_config_dword(dev, 0x1BC + index * 4, val); - return count; -} - -#define STORE_CACHE_DISABLE(index) \ -static ssize_t \ -store_cache_disable_##index(struct _cpuid4_info *this_leaf, \ - const char *buf, size_t count) \ -{ \ - return store_cache_disable(this_leaf, buf, count, index); \ -} -STORE_CACHE_DISABLE(0) -STORE_CACHE_DISABLE(1) - -struct _cache_attr { - struct attribute attr; - ssize_t (*show)(struct _cpuid4_info *, char *); - ssize_t (*store)(struct _cpuid4_info *, const char *, size_t count); -}; - #define define_one_ro(_name) \ static struct _cache_attr _name = \ __ATTR(_name, 0444, show_##_name, NULL) @@ -813,23 +869,28 @@ define_one_ro(shared_cpu_map); define_one_ro(shared_cpu_list); -static struct _cache_attr cache_disable_0 = __ATTR(cache_disable_0, 0644, - show_cache_disable_0, store_cache_disable_0); -static struct _cache_attr cache_disable_1 = __ATTR(cache_disable_1, 0644, - show_cache_disable_1, store_cache_disable_1); +#define DEFAULT_SYSFS_CACHE_ATTRS \ + &type.attr, \ + &level.attr, \ + &coherency_line_size.attr, \ + &physical_line_partition.attr, \ + &ways_of_associativity.attr, \ + &number_of_sets.attr, \ + &size.attr, \ + &shared_cpu_map.attr, \ + &shared_cpu_list.attr static struct attribute *default_attrs[] = { - &type.attr, - &level.attr, - &coherency_line_size.attr, - &physical_line_partition.attr, - &ways_of_associativity.attr, - &number_of_sets.attr, - &size.attr, - &shared_cpu_map.attr, - &shared_cpu_list.attr, + DEFAULT_SYSFS_CACHE_ATTRS, + NULL +}; + +static struct attribute *default_l3_attrs[] = { + DEFAULT_SYSFS_CACHE_ATTRS, +#ifdef CONFIG_CPU_SUP_AMD &cache_disable_0.attr, &cache_disable_1.attr, +#endif NULL }; @@ -920,6 +981,7 @@ unsigned int cpu = sys_dev->id; unsigned long i, j; struct _index_kobject *this_object; + struct _cpuid4_info *this_leaf; int retval; retval = cpuid4_cache_sysfs_init(cpu); @@ -938,6 +1000,14 @@ this_object = INDEX_KOBJECT_PTR(cpu, i); this_object->cpu = cpu; this_object->index = i; + + this_leaf = CPUID4_INFO_IDX(cpu, i); + + if (this_leaf->can_disable) + ktype_cache.default_attrs = default_l3_attrs; + else + ktype_cache.default_attrs = default_attrs; + retval = kobject_init_and_add(&(this_object->kobj), &ktype_cache, per_cpu(cache_kobject, cpu), --- linux-2.6.32.orig/arch/x86/kernel/cpu/bugs.c +++ linux-2.6.32/arch/x86/kernel/cpu/bugs.c @@ -151,6 +151,20 @@ #endif } +static void __init check_atom(void) +{ + + /* + * Disable 4MB page tables to work around Intel errata AAE44 for + * Atom. We cannot guarantee stopping undefined processor behaviour + * when two pageing structure translations differ with respect to + * page frame sizes. Hence, for Atoms we disable the PSE. + */ + if (boot_cpu_data.x86_model == 0x1c) { + clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); + printk(KERN_INFO "Disabling 4MB page tables to avoid TLB bug\n"); + } +} void __init check_bugs(void) { @@ -163,6 +177,7 @@ check_fpu(); check_hlt(); check_popad(); + check_atom(); init_utsname()->machine[1] = '0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86); alternative_instructions(); --- linux-2.6.32.orig/arch/x86/kernel/cpu/Makefile +++ linux-2.6.32/arch/x86/kernel/cpu/Makefile @@ -18,8 +18,6 @@ obj-$(CONFIG_X86_32) += bugs.o cmpxchg.o obj-$(CONFIG_X86_64) += bugs_64.o -obj-$(CONFIG_X86_CPU_DEBUG) += cpu_debug.o - obj-$(CONFIG_CPU_SUP_INTEL) += intel.o obj-$(CONFIG_CPU_SUP_AMD) += amd.o obj-$(CONFIG_CPU_SUP_CYRIX_32) += cyrix.o --- linux-2.6.32.orig/arch/x86/kernel/cpu/amd.c +++ linux-2.6.32/arch/x86/kernel/cpu/amd.c @@ -254,59 +254,36 @@ /* * Fixup core topology information for AMD multi-node processors. - * Assumption 1: Number of cores in each internal node is the same. - * Assumption 2: Mixed systems with both single-node and dual-node - * processors are not supported. + * Assumption: Number of cores in each internal node is the same. */ #ifdef CONFIG_X86_HT static void __cpuinit amd_fixup_dcm(struct cpuinfo_x86 *c) { -#ifdef CONFIG_PCI - u32 t, cpn; - u8 n, n_id; + unsigned long long value; + u32 nodes, cores_per_node; int cpu = smp_processor_id(); + if (!cpu_has(c, X86_FEATURE_NODEID_MSR)) + return; + /* fixup topology information only once for a core */ if (cpu_has(c, X86_FEATURE_AMD_DCM)) return; - /* check for multi-node processor on boot cpu */ - t = read_pci_config(0, 24, 3, 0xe8); - if (!(t & (1 << 29))) + rdmsrl(MSR_FAM10H_NODE_ID, value); + + nodes = ((value >> 3) & 7) + 1; + if (nodes == 1) return; set_cpu_cap(c, X86_FEATURE_AMD_DCM); + cores_per_node = c->x86_max_cores / nodes; - /* cores per node: each internal node has half the number of cores */ - cpn = c->x86_max_cores >> 1; + /* store NodeID, use llc_shared_map to store sibling info */ + per_cpu(cpu_llc_id, cpu) = value & 7; - /* even-numbered NB_id of this dual-node processor */ - n = c->phys_proc_id << 1; - - /* - * determine internal node id and assign cores fifty-fifty to - * each node of the dual-node processor - */ - t = read_pci_config(0, 24 + n, 3, 0xe8); - n = (t>>30) & 0x3; - if (n == 0) { - if (c->cpu_core_id < cpn) - n_id = 0; - else - n_id = 1; - } else { - if (c->cpu_core_id < cpn) - n_id = 1; - else - n_id = 0; - } - - /* compute entire NodeID, use llc_shared_map to store sibling info */ - per_cpu(cpu_llc_id, cpu) = (c->phys_proc_id << 1) + n_id; - - /* fixup core id to be in range from 0 to cpn */ - c->cpu_core_id = c->cpu_core_id % cpn; -#endif + /* fixup core id to be in range from 0 to (cores_per_node - 1) */ + c->cpu_core_id = c->cpu_core_id % cores_per_node; } #endif --- linux-2.6.32.orig/arch/x86/kernel/cpu/common.c +++ linux-2.6.32/arch/x86/kernel/cpu/common.c @@ -798,6 +798,19 @@ /* Filter out anything that depends on CPUID levels we don't have */ filter_cpuid_features(c, true); +#ifdef CONFIG_X86_32 + /* + * emulation of NX with segment limits unfortunately means + * we have to disable the fast system calls, due to the way that + * sysexit clears the segment limits on return. + * If we have NX, then we don't need to do this. + */ +#ifdef CONFIG_X86_PAE + if (!test_cpu_cap(c, X86_FEATURE_NX)) +#endif + clear_cpu_cap(c, X86_FEATURE_SEP); +#endif /*CONFIG_X86_32*/ + /* If the model name is still unset, do table lookup. */ if (!c->x86_model_id[0]) { const char *p; --- linux-2.6.32.orig/arch/x86/kernel/cpu/mcheck/therm_throt.c +++ linux-2.6.32/arch/x86/kernel/cpu/mcheck/therm_throt.c @@ -49,6 +49,8 @@ static atomic_t therm_throt_en = ATOMIC_INIT(0); +static u32 lvtthmr_init __read_mostly; + #ifdef CONFIG_SYSFS #define define_therm_throt_sysdev_one_ro(_name) \ static SYSDEV_ATTR(_name, 0444, therm_throt_sysdev_show_##_name, NULL) @@ -254,14 +256,27 @@ ack_APIC_irq(); } +void __init mcheck_intel_therm_init(void) +{ + /* + * This function is only called on boot CPU. Save the init thermal + * LVT value on BSP and use that value to restore APs' thermal LVT + * entry BIOS programmed later + */ + if (cpu_has(&boot_cpu_data, X86_FEATURE_ACPI) && + cpu_has(&boot_cpu_data, X86_FEATURE_ACC)) + lvtthmr_init = apic_read(APIC_LVTTHMR); +} + void intel_init_thermal(struct cpuinfo_x86 *c) { unsigned int cpu = smp_processor_id(); int tm2 = 0; u32 l, h; - /* Thermal monitoring depends on ACPI and clock modulation*/ - if (!cpu_has(c, X86_FEATURE_ACPI) || !cpu_has(c, X86_FEATURE_ACC)) + /* Thermal monitoring depends on APIC, ACPI and clock modulation */ + if (!cpu_has_apic || !cpu_has(c, X86_FEATURE_ACPI) || + !cpu_has(c, X86_FEATURE_ACC)) return; /* @@ -270,7 +285,20 @@ * since it might be delivered via SMI already: */ rdmsr(MSR_IA32_MISC_ENABLE, l, h); - h = apic_read(APIC_LVTTHMR); + + /* + * The initial value of thermal LVT entries on all APs always reads + * 0x10000 because APs are woken up by BSP issuing INIT-SIPI-SIPI + * sequence to them and LVT registers are reset to 0s except for + * the mask bits which are set to 1s when APs receive INIT IPI. + * Always restore the value that BIOS has programmed on AP based on + * BSP's info we saved since BIOS is always setting the same value + * for all threads/cores + */ + apic_write(APIC_LVTTHMR, lvtthmr_init); + + h = lvtthmr_init; + if ((l & MSR_IA32_MISC_ENABLE_TM1) && (h & APIC_DM_SMI)) { printk(KERN_DEBUG "CPU%d: Thermal monitoring handled by SMI\n", cpu); --- linux-2.6.32.orig/arch/x86/kernel/cpu/mcheck/mce-internal.h +++ linux-2.6.32/arch/x86/kernel/cpu/mcheck/mce-internal.h @@ -28,3 +28,4 @@ extern struct mce_bank *mce_banks; +extern void (*mce_cpu_specific_poll)(struct mce *); --- linux-2.6.32.orig/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c +++ linux-2.6.32/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c @@ -0,0 +1,427 @@ +/* + * Xeon 7500 series specific machine check support code. + * Copyright 2009, 2010 Intel Corporation + * Author: Andi Kleen + * + * 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. + * + * Implement Xeon 7500 series specific code to retrieve the physical address + * and DIMM information for corrected memory errors. + * + * Interface: mce->aux0/aux1 is mapped to a struct pfa_dimm with pad + * redefined to DIMM valid bits. Consumers check CPUID and bank and + * then interpret aux0/aux1 + */ + +/* #define DEBUG 1 */ /* disable for production */ +#define pr_fmt(x) "MCE: " x + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mce-internal.h" + +#define PFA_SIG "$PFA" +#define PFA_SIG_LEN 4 + +/* DIMM description */ +struct aux_pfa_dimm { + u8 fbd_channel_id; + u8 ddr_channel_id; + u8 ddr_dimm_id; + u8 ddr_rank_id; + u8 ddr_dimm_bank_id; + u8 ddr_dimm_row_id; + u8 ddr_dimm_column_id; + u8 valid; +} __attribute__((packed)); + +struct pfa_dimm { + u8 fbd_channel_id; + u8 ddr_channel_id; + u8 ddr_dimm_id; + u8 ddr_rank_id; + u8 ddr_dimm_bank_id; + u32 ddr_dimm_row_id; + u32 ddr_dimm_column_id; +} __attribute__((packed)); + +/* Memory translation table in memory. */ +struct pfa_table { + u8 sig[PFA_SIG_LEN]; /* Signature: '$PFA' */ + u16 len; /* total length */ + u16 revision; /* 0x11 */ + u8 checksum; /* 8bit sum to zero */ + u8 db_value; /* mailbox port command value */ + u8 db_port; /* mailbox port */ + /* end of header; end of checksum */ + u8 command; /* input command */ + u32 valid; /* valid input/output bits */ + u16 status; /* output status */ + u8 socket_id; /* input socket id*/ + u8 bank_id; /* input MCE bank id */ + u32 pad1; + u64 mbox_address; + u64 physical_addr; /* physical address */ + struct pfa_dimm dimm[2]; + /* + * topology information follows: not used for now. + */ +} __attribute__((packed)); + +/* DIMM valid bits in valid: DIMM0: 8..12; DIMM1 16..20 */ +#define DIMM_VALID_BITS(val, num) (((val) >> (4 + (num) * 8)) & DIMM_VALID_ALL) +#define DIMM_SET_VALID(val, num) ((val) << (4 + (num) * 8)) + +enum { + MCE_BANK_MBOX0 = 8, + MCE_BANK_MBOX1 = 9, + + PFA_REVISION = 0x11, /* v1.1 */ + + /* Status bits for valid field */ + PFA_VALID_MA = (1 << 0), + PFA_VALID_SOCKETID = (1 << 1), + PFA_VALID_BANKID = (1 << 2), + PFA_VALID_PA = (1 << 3), + + /* DIMM valid bits in valid */ + /* use with DIMM_VALID_BITS/DIMM_SET_VALID for pfa->valid */ + DIMM_VALID_FBD_CHAN = (1 << 0), + DIMM_VALID_DDR_CHAN = (1 << 1), + DIMM_VALID_DDR_DIMM = (1 << 2), + DIMM_VALID_DDR_RANK = (1 << 3), + DIMM_VALID_DIMM_BANK = (1 << 4), + DIMM_VALID_DIMM_ROW = (1 << 5), + DIMM_VALID_DIMM_COLUMN = (1 << 6), + DIMM_VALID_ALL = 0x7f, + + PFA_DIMM_VALID_MASK = DIMM_SET_VALID(DIMM_VALID_ALL, 0) + | DIMM_SET_VALID(DIMM_VALID_ALL, 1), + + /* Values for status field */ + PFA_STATUS_SUCCESS = 0, + PFA_STATUS_SOCKET_INVALID = (1 << 1), + PFA_STATUS_MBOX_INVALID = (1 << 2), + PFA_STATUS_MA_INVALID = (1 << 3), + PFA_STATUS_PA_INVALID = (1 << 4), + + /* Values for command field */ + PFA_CMD_GET_MEM_CORR_ERR_PA = 0, + PFA_CMD_PA_TO_DIMM_ADDR = 1, + PFA_CMD_DIMM_TO_PA = 2, + PFA_CMD_GET_TOPOLOGY = 3, + + /* PCI device IDs and the base register */ + ICH_PFA_CFG = 0x8c, /* SCRATCH4 */ + PCI_DEVICE_ID_BXB_ICH_LEGACY0 = 0x3422, +}; + +static struct pfa_table *pfa_table __read_mostly; +static int memerr_max_conv_rate __read_mostly = 100; +static int memerr_min_interval __read_mostly = 500; +static int pfa_lost; /* for diagnosis */ + +enum { + RATE_LIMIT_PERIOD = USEC_PER_SEC, /* in us; period of rate limit */ +}; + +module_param(memerr_max_conv_rate, int, 0644); +MODULE_PARM_DESC(memerr_max_conv_rate, + "Maximum number of memory error conversions each second; 0 to disable"); +module_param(memerr_min_interval, int, 0644); +MODULE_PARM_DESC(memerr_min_interval, + "Minimum time delta between two memory conversions; in us; default 500"); + +static int notest; +static int nocsum; +module_param(notest, int, 0); +module_param(nocsum, int, 0); + +static u64 encode_dimm(struct pfa_dimm *d, u8 valid) +{ + union { + struct aux_pfa_dimm d; + u64 v; + } p; + + BUILD_BUG_ON(sizeof(struct aux_pfa_dimm) != sizeof(u64)); + p.d.fbd_channel_id = d->fbd_channel_id; + p.d.ddr_channel_id = d->ddr_channel_id; + p.d.ddr_dimm_id = d->ddr_dimm_id; + p.d.ddr_rank_id = d->ddr_rank_id; + p.d.ddr_dimm_bank_id = d->ddr_dimm_bank_id; + p.d.ddr_dimm_row_id = d->ddr_dimm_row_id; + if (p.d.ddr_dimm_row_id != d->ddr_dimm_row_id) /* truncated? */ + valid &= ~DIMM_VALID_DIMM_ROW; + p.d.ddr_dimm_column_id = d->ddr_dimm_column_id; + if (p.d.ddr_dimm_column_id != d->ddr_dimm_column_id) + valid &= ~DIMM_VALID_DIMM_COLUMN; + p.d.valid = valid; + pr_debug("PFA fbd_ch %u ddr_ch %u dimm %u rank %u bank %u valid %x\n", + d->fbd_channel_id, + d->ddr_channel_id, + d->ddr_dimm_id, + d->ddr_rank_id, + d->ddr_dimm_bank_id, + valid); + return p.v; +} + +static u8 csum(u8 *table, u16 len) +{ + u8 sum = 0; + int i; + for (i = 0; i < len; i++) + sum += *table++; + return sum; +} + +/* + * Execute a command through the mailbox interface. + */ +static int +pfa_command(unsigned bank, unsigned socketid, unsigned command, unsigned valid) +{ + pfa_table->bank_id = bank; + pfa_table->socket_id = socketid; + pfa_table->valid = valid | PFA_VALID_SOCKETID; + pfa_table->command = command; + + outb(pfa_table->db_value, pfa_table->db_port); + + mb(); /* Reread fields after they got changed */ + + if (pfa_table->status != PFA_STATUS_SUCCESS) { + pr_debug("Memory PFA command %d failed: socket:%d bank:%d status:%x\n", + command, socketid, bank, pfa_table->status); + return -pfa_table->status; + } + return 0; +} + +/* + * Retrieve physical address and DIMMs. + */ +static int translate_memory_error(struct mce *m) +{ + struct pfa_table *pfa = pfa_table; + u64 status; + int ret; + u32 valid; + int cpu = smp_processor_id(); + + /* Make sure our structures match the specification */ + BUILD_BUG_ON(offsetof(struct pfa_table, physical_addr) != 0x20); + BUILD_BUG_ON(offsetof(struct pfa_table, status) != 0x10); + BUILD_BUG_ON(offsetof(struct pfa_table, physical_addr) != 0x20); + BUILD_BUG_ON(offsetof(struct pfa_table, dimm[1].ddr_dimm_column_id) != + 0x3e); + + /* Ask for PA/DIMMs of last error */ + if (pfa_command(m->bank, m->socketid, + PFA_CMD_GET_MEM_CORR_ERR_PA, PFA_VALID_BANKID) < 0) + return -1; + + /* + * Recheck machine check bank. If the overflow bit was set + * there was a race. Don't use the information in this case. + */ + rdmsrl(MSR_IA32_MCx_STATUS(m->bank), status); + if (status & MCI_STATUS_OVER) { + pr_debug("%d: overflow race on bank %d\n", cpu, m->bank); + return -1; + } + + ret = -1; + valid = pfa->valid; + if (valid & PFA_VALID_PA) { + m->status |= MCI_STATUS_ADDRV; + m->addr = pfa_table->physical_addr; + pr_debug("%d: got physical address %llx valid %x\n", + cpu, m->addr, valid); + ret = 0; + } + + /* When DIMM information was supplied pass it out */ + if (valid & PFA_DIMM_VALID_MASK) { + m->aux0 = encode_dimm(&pfa->dimm[0], DIMM_VALID_BITS(valid, 0)); + m->aux1 = encode_dimm(&pfa->dimm[1], DIMM_VALID_BITS(valid, 1)); + ret = 0; + } + + return ret; +} + +/* + * Xeon 75xx specific mce poll method to retrieve the physical address + * and DIMM information. + */ +static void xeon75xx_mce_poll(struct mce *m) +{ + static DEFINE_SPINLOCK(convert_lock); /* Protect table and static */ + static unsigned long cperm; + static ktime_t last, last_int; + unsigned long flags; + ktime_t now; + s64 delta; + + /* Memory error? */ + if (m->bank != MCE_BANK_MBOX0 && m->bank != MCE_BANK_MBOX1) + return; + if (m->status & MCI_STATUS_OVER) + return; + if (memerr_max_conv_rate == 0) + return; + + spin_lock_irqsave(&convert_lock, flags); + /* + * Rate limit conversions. The conversion takes some time, + * but it's not good to use all the CPU time during a error + * flood. + * Enforce maximum number per second and minimum interval. + * The ktime call should use TSC on this machine and be fast. + */ + now = ktime_get(); + delta = ktime_us_delta(now, last); + if (delta >= RATE_LIMIT_PERIOD) { + cperm = 0; + last = now; + } + if (ktime_us_delta(now, last_int) >= memerr_min_interval && + ++cperm <= memerr_max_conv_rate) { + if (translate_memory_error(m) < 0) { + /* On error stop converting for the next second */ + cperm = memerr_max_conv_rate; + pr_debug("PFA translation failed\n"); + } + } else + pfa_lost++; + last_int = now; + spin_unlock_irqrestore(&convert_lock, flags); +} + +static struct pci_device_id bxb_mce_pciids[] = { + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_BXB_ICH_LEGACY0) }, + {} +}; + +static int __init xeon75xx_mce_init(void) +{ + u32 addr = 0; + struct pci_dev *dev; + + if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL || + boot_cpu_data.x86 != 6 || + boot_cpu_data.x86_model != 0x2e) + return -ENODEV; + + /* + * Get table address from register in IOH. + * This just looks up the device, because we don't want to "own" it. + */ + dev = NULL; + while ((dev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, dev)) + != NULL) { + if (!pci_match_id(bxb_mce_pciids, dev)) + continue; + pci_read_config_dword(dev, ICH_PFA_CFG, &addr); + if (addr) + break; + } + pci_dev_put(dev); + if (!addr) + return -ENODEV; + + if (!e820_all_mapped(addr, addr + PAGE_SIZE, E820_RESERVED)) { + pr_info("PFA table at %x not e820 reserved\n", addr); + return -ENODEV; + } + + pfa_table = (__force struct pfa_table *)ioremap_cache(addr, PAGE_SIZE); + if (!pfa_table) { + pr_err("Cannot map PFA table at %x\n", addr); + return -EIO; + } + + if (memcmp(&pfa_table->sig, PFA_SIG, PFA_SIG_LEN) || + pfa_table->len < sizeof(struct pfa_table) || + /* assume newer versions are compatible */ + pfa_table->revision < PFA_REVISION) { + pr_info("PFA table at %x invalid\n", addr); + goto error_unmap; + } + + if (!nocsum && csum((u8 *)pfa_table, + offsetof(struct pfa_table, command))) { + pr_info("PFA table at %x length %u has invalid checksum\n", + addr, pfa_table->len); + goto error_unmap; + } + + /* Not strictly needed today */ + if (pfa_table->len > PAGE_SIZE) { + unsigned len = roundup(pfa_table->len, PAGE_SIZE); + iounmap(pfa_table); + pfa_table = (__force void *)ioremap_cache(addr, len); + if (!pfa_table) { + pr_err("Cannot remap %u bytes PFA table at %x\n", + len, addr); + return -EIO; + } + } + + if (!notest) { + int status = pfa_command(0, 0, PFA_CMD_GET_TOPOLOGY, 0); + if (status < 0) { + pr_err("Test of PFA table failed: %x\n", -status); + goto error_unmap; + } + } + + pr_info("Found Xeon75xx PFA memory error translation table at %x\n", + addr); + mb(); + mce_cpu_specific_poll = xeon75xx_mce_poll; + return 0; + +error_unmap: + iounmap(pfa_table); + return -ENODEV; +} + +MODULE_DEVICE_TABLE(pci, bxb_mce_pciids); +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Andi Kleen"); +MODULE_DESCRIPTION("Intel Xeon 75xx specific DIMM error reporting"); + +#ifdef CONFIG_MODULE +static void __exit xeon75xx_mce_exit(void) +{ + mce_cpu_specific_poll = NULL; + wmb(); + /* Wait for all machine checks to finish before really unloading */ + synchronize_rcu(); + iounmap(pfa_table); +} + +module_init(xeon75xx_mce_init); +module_exit(xeon75xx_mce_exit); +#else +/* When built-in run as soon as the PCI subsystem is up */ +fs_initcall(xeon75xx_mce_init); +#endif --- linux-2.6.32.orig/arch/x86/kernel/cpu/mcheck/mce.c +++ linux-2.6.32/arch/x86/kernel/cpu/mcheck/mce.c @@ -91,6 +91,9 @@ pr_emerg("Run the message through 'mcelog --ascii' to decode.\n"); } +void (*mce_cpu_specific_poll)(struct mce *); +EXPORT_SYMBOL_GPL(mce_cpu_specific_poll); + /* * CPU/chipset specific EDAC code can register a callback here to print * MCE errors in a human-readable form: @@ -350,6 +353,11 @@ wrmsrl(msr, v); } +static int under_injection(void) +{ + return __get_cpu_var(injectm).finished; +} + /* * Simple lockless ring to communicate PFNs from the exception handler with the * process context work function. This is vastly simplified because there's @@ -553,6 +561,10 @@ if (!(flags & MCP_TIMESTAMP)) m.tsc = 0; + + if (mce_cpu_specific_poll && !under_injection() && !mce_dont_log_ce) + mce_cpu_specific_poll(&m); + /* * Don't get the IP here because it's unlikely to * have anything to do with the actual error location. @@ -1374,13 +1386,14 @@ struct timer_list *t = &__get_cpu_var(mce_timer); int *n = &__get_cpu_var(mce_next_interval); + setup_timer(t, mcheck_timer, smp_processor_id()); + if (mce_ignore_ce) return; *n = check_interval * HZ; if (!*n) return; - setup_timer(t, mcheck_timer, smp_processor_id()); t->expires = round_jiffies(jiffies + *n); add_timer_on(t, smp_processor_id()); } @@ -1991,9 +2004,11 @@ break; case CPU_DOWN_FAILED: case CPU_DOWN_FAILED_FROZEN: - t->expires = round_jiffies(jiffies + + if (!mce_ignore_ce && check_interval) { + t->expires = round_jiffies(jiffies + __get_cpu_var(mce_next_interval)); - add_timer_on(t, cpu); + add_timer_on(t, cpu); + } smp_call_function_single(cpu, mce_reenable_cpu, &action, 1); break; case CPU_POST_DEAD: --- linux-2.6.32.orig/arch/x86/kernel/cpu/mcheck/Makefile +++ linux-2.6.32/arch/x86/kernel/cpu/mcheck/Makefile @@ -2,6 +2,7 @@ obj-$(CONFIG_X86_ANCIENT_MCE) += winchip.o p5.o obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o +obj-$(CONFIG_X86_MCE_XEON75XX) += mce-xeon75xx.o obj-$(CONFIG_X86_MCE_AMD) += mce_amd.o obj-$(CONFIG_X86_MCE_THRESHOLD) += threshold.o obj-$(CONFIG_X86_MCE_INJECT) += mce-inject.o --- linux-2.6.32.orig/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ linux-2.6.32/arch/x86/kernel/cpu/cpufreq/powernow-k8.c @@ -929,7 +929,8 @@ powernow_table[i].index = index; /* Frequency may be rounded for these */ - if (boot_cpu_data.x86 == 0x10 || boot_cpu_data.x86 == 0x11) { + if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10) + || boot_cpu_data.x86 == 0x11) { powernow_table[i].frequency = freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7); } else @@ -1351,6 +1352,7 @@ kfree(data->powernow_table); kfree(data); + per_cpu(powernow_data, pol->cpu) = NULL; return 0; } @@ -1370,7 +1372,7 @@ int err; if (!data) - return -EINVAL; + return 0; smp_call_function_single(cpu, query_values_on_cpu, &err, true); if (err) --- linux-2.6.32.orig/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c +++ linux-2.6.32/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c @@ -45,6 +45,7 @@ CPU_DOTHAN_A1, CPU_DOTHAN_A2, CPU_DOTHAN_B0, + CPU_DOTHAN_C0, CPU_MP4HT_D0, CPU_MP4HT_E0, }; @@ -54,6 +55,7 @@ [CPU_DOTHAN_A1] = { 6, 13, 1 }, [CPU_DOTHAN_A2] = { 6, 13, 2 }, [CPU_DOTHAN_B0] = { 6, 13, 6 }, + [CPU_DOTHAN_C0] = { 6, 13, 8 }, [CPU_MP4HT_D0] = {15, 3, 4 }, [CPU_MP4HT_E0] = {15, 4, 1 }, }; @@ -196,6 +198,88 @@ }; #undef OP + +#define OPEX(mhz, base, mva, mvb, mvc, mvd) \ +{ \ + .frequency = (mhz) * 1000, \ + .index = (((mhz)/(base)) << 8) | ((mva - 700) / 16) \ +} + +/* Intel Pentium M processor 730 / 1.60 GHz (Sonoma) */ +static struct cpufreq_frequency_table sonoma_1596[] = +{ + OPEX( 798, 133, 988, 988, 988, 988), + OPEX(1064, 133, 1116, 1111, 1084, 1079), + OPEX(1330, 133, 1244, 1233, 1180, 1169), + OPEX(1596, 133, 1356, 1356, 1260, 1260), + { .frequency = CPUFREQ_TABLE_END } +}; + +/* Intel Pentium M processor 740 / 1.73 GHz (Sonoma) */ +static struct cpufreq_frequency_table sonoma_1729[] = +{ + OPEX( 798, 133, 988, 988, 988, 988), + OPEX(1064, 133, 1100, 1093, 1068, 1066), + OPEX(1330, 133, 1212, 1198, 1148, 1143), + OPEX(1729, 133, 1356, 1356, 1260, 1260), + { .frequency = CPUFREQ_TABLE_END } +}; + +/* Intel Pentium M processor 750 / 1.86 GHz (Sonoma) */ +static struct cpufreq_frequency_table sonoma_1862[] = +{ + OPEX( 798, 133, 988, 988, 988, 988), + OPEX(1064, 133, 1084, 1080, 1068, 1056), + OPEX(1330, 133, 1180, 1172, 1132, 1124), + OPEX(1596, 133, 1276, 1264, 1196, 1192), + OPEX(1862, 133, 1356, 1356, 1260, 1260), + { .frequency = CPUFREQ_TABLE_END } +}; + +/* Intel Pentium M processor 760 / 2.00 GHz (Sonoma) */ +static struct cpufreq_frequency_table sonoma_1995[] = +{ + OPEX( 798, 133, 988, 988, 988, 988), + OPEX(1064, 133, 1084, 1070, 1052, 1048), + OPEX(1330, 133, 1164, 1152, 1116, 1109), + OPEX(1596, 133, 1244, 1233, 1180, 1169), + OPEX(1995, 133, 1356, 1356, 1260, 1260), + { .frequency = CPUFREQ_TABLE_END } +}; +/* Intel Pentium M processor 770 / 2.13 GHz (Sonoma) */ +static struct cpufreq_frequency_table sonoma_2128[] = +{ + OPEX( 798, 133, 988, 988, 988, 988), + OPEX(1064, 133, 1068, 1065, 1052, 1042), + OPEX(1330, 133, 1148, 1142, 1100, 1097), + OPEX(1596, 133, 1228, 1218, 1164, 1151), + OPEX(1862, 133, 1308, 1295, 1212, 1206), + OPEX(2128, 133, 1372, 1372, 1260, 1260), + { .frequency = CPUFREQ_TABLE_END } +}; + +/* Intel Pentium M processor 780 / 2.26 GHz (Sonoma) */ +static struct cpufreq_frequency_table sonoma_2261[] = +{ + OPEX( 798, 133, 988, 988, 988, 988), + OPEX(1064, 133, 1068, 1064, 1052, 1037), + OPEX(1330, 133, 1148, 1139, 1100, 1087), + OPEX(1596, 133, 1228, 1215, 1148, 1136), + OPEX(1862, 133, 1292, 1291, 1196, 1186), + OPEX(2261, 133, 1404, 1404, 1260, 1260), + { .frequency = CPUFREQ_TABLE_END } +}; + +#undef OPEX + +#define SONOMA(cpuid, max, base, name) \ +{ .cpu_id = cpuid, \ + .model_name = "Intel(R) Pentium(R) M processor " name "GHz", \ + .max_freq = (max)*1000, \ + .op_points = sonoma_##max, \ +} + + #define _BANIAS(cpuid, max, name) \ { .cpu_id = cpuid, \ .model_name = "Intel(R) Pentium(R) M processor " name "MHz", \ @@ -218,6 +302,15 @@ BANIAS(1600), BANIAS(1700), + /* Builtin tables for Dothan C0 CPUs, a.k.a Sonoma */ + SONOMA(&cpu_ids[CPU_DOTHAN_C0], 1596, 133, "1.60"), + SONOMA(&cpu_ids[CPU_DOTHAN_C0], 1729, 133, "1.73"), + SONOMA(&cpu_ids[CPU_DOTHAN_C0], 1862, 133, "1.86"), + SONOMA(&cpu_ids[CPU_DOTHAN_C0], 1995, 133, "2.00"), + SONOMA(&cpu_ids[CPU_DOTHAN_C0], 2128, 133, "2.13"), + SONOMA(&cpu_ids[CPU_DOTHAN_C0], 2261, 133, "2.26"), + + /* NULL model_name is a wildcard */ { &cpu_ids[CPU_DOTHAN_A1], NULL, 0, NULL }, { &cpu_ids[CPU_DOTHAN_A2], NULL, 0, NULL }, --- linux-2.6.32.orig/arch/x86/include/asm/elf.h +++ linux-2.6.32/arch/x86/include/asm/elf.h @@ -197,14 +197,8 @@ set_fs(USER_DS); \ } while (0) -#define COMPAT_SET_PERSONALITY(ex) \ -do { \ - if (test_thread_flag(TIF_IA32)) \ - clear_thread_flag(TIF_ABI_PENDING); \ - else \ - set_thread_flag(TIF_ABI_PENDING); \ - current->personality |= force_personality32; \ -} while (0) +void set_personality_ia32(void); +#define COMPAT_SET_PERSONALITY(ex) set_personality_ia32() #define COMPAT_ELF_PLATFORM ("i686") --- linux-2.6.32.orig/arch/x86/include/asm/mce.h +++ linux-2.6.32/arch/x86/include/asm/mce.h @@ -67,6 +67,8 @@ __u32 socketid; /* CPU socket ID */ __u32 apicid; /* CPU initial apic ID */ __u64 mcgcap; /* MCGCAP MSR: machine check capabilities of CPU */ + __u64 aux0; /* model specific */ + __u64 aux1; /* model specific */ }; /* @@ -214,5 +216,11 @@ void mce_log_therm_throt_event(__u64 status); +#ifdef CONFIG_X86_THERMAL_VECTOR +extern void mcheck_intel_therm_init(void); +#else +static inline void mcheck_intel_therm_init(void) { } +#endif + #endif /* __KERNEL__ */ #endif /* _ASM_X86_MCE_H */ --- linux-2.6.32.orig/arch/x86/include/asm/rwsem.h +++ linux-2.6.32/arch/x86/include/asm/rwsem.h @@ -41,6 +41,7 @@ #include #include #include +#include struct rwsem_waiter; @@ -55,17 +56,28 @@ /* * the semaphore definition + * + * The bias values and the counter type limits the number of + * potential readers/writers to 32767 for 32 bits and 2147483647 + * for 64 bits. */ -#define RWSEM_UNLOCKED_VALUE 0x00000000 -#define RWSEM_ACTIVE_BIAS 0x00000001 -#define RWSEM_ACTIVE_MASK 0x0000ffff -#define RWSEM_WAITING_BIAS (-0x00010000) +#ifdef CONFIG_X86_64 +# define RWSEM_ACTIVE_MASK 0xffffffffL +#else +# define RWSEM_ACTIVE_MASK 0x0000ffffL +#endif + +#define RWSEM_UNLOCKED_VALUE 0x00000000L +#define RWSEM_ACTIVE_BIAS 0x00000001L +#define RWSEM_WAITING_BIAS (-RWSEM_ACTIVE_MASK-1) #define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) +typedef signed long rwsem_count_t; + struct rw_semaphore { - signed long count; + rwsem_count_t count; spinlock_t wait_lock; struct list_head wait_list; #ifdef CONFIG_DEBUG_LOCK_ALLOC @@ -105,7 +117,7 @@ static inline void __down_read(struct rw_semaphore *sem) { asm volatile("# beginning down_read\n\t" - LOCK_PREFIX " incl (%%eax)\n\t" + LOCK_PREFIX _ASM_INC "(%1)\n\t" /* adds 0x00000001, returns the old value */ " jns 1f\n" " call call_rwsem_down_read_failed\n" @@ -121,14 +133,14 @@ */ static inline int __down_read_trylock(struct rw_semaphore *sem) { - __s32 result, tmp; + rwsem_count_t result, tmp; asm volatile("# beginning __down_read_trylock\n\t" - " movl %0,%1\n\t" + " mov %0,%1\n\t" "1:\n\t" - " movl %1,%2\n\t" - " addl %3,%2\n\t" + " mov %1,%2\n\t" + " add %3,%2\n\t" " jle 2f\n\t" - LOCK_PREFIX " cmpxchgl %2,%0\n\t" + LOCK_PREFIX " cmpxchg %2,%0\n\t" " jnz 1b\n\t" "2:\n\t" "# ending __down_read_trylock\n\t" @@ -143,13 +155,13 @@ */ static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) { - int tmp; + rwsem_count_t tmp; tmp = RWSEM_ACTIVE_WRITE_BIAS; asm volatile("# beginning down_write\n\t" - LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" + LOCK_PREFIX " xadd %1,(%2)\n\t" /* subtract 0x0000ffff, returns the old value */ - " testl %%edx,%%edx\n\t" + " test %1,%1\n\t" /* was the count 0 before? */ " jz 1f\n" " call call_rwsem_down_write_failed\n" @@ -170,9 +182,9 @@ */ static inline int __down_write_trylock(struct rw_semaphore *sem) { - signed long ret = cmpxchg(&sem->count, - RWSEM_UNLOCKED_VALUE, - RWSEM_ACTIVE_WRITE_BIAS); + rwsem_count_t ret = cmpxchg(&sem->count, + RWSEM_UNLOCKED_VALUE, + RWSEM_ACTIVE_WRITE_BIAS); if (ret == RWSEM_UNLOCKED_VALUE) return 1; return 0; @@ -183,9 +195,9 @@ */ static inline void __up_read(struct rw_semaphore *sem) { - __s32 tmp = -RWSEM_ACTIVE_READ_BIAS; + rwsem_count_t tmp = -RWSEM_ACTIVE_READ_BIAS; asm volatile("# beginning __up_read\n\t" - LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" + LOCK_PREFIX " xadd %1,(%2)\n\t" /* subtracts 1, returns the old value */ " jns 1f\n\t" " call call_rwsem_wake\n" @@ -201,18 +213,18 @@ */ static inline void __up_write(struct rw_semaphore *sem) { + rwsem_count_t tmp; asm volatile("# beginning __up_write\n\t" - " movl %2,%%edx\n\t" - LOCK_PREFIX " xaddl %%edx,(%%eax)\n\t" + LOCK_PREFIX " xadd %1,(%2)\n\t" /* tries to transition 0xffff0001 -> 0x00000000 */ " jz 1f\n" " call call_rwsem_wake\n" "1:\n\t" "# ending __up_write\n" - : "+m" (sem->count) - : "a" (sem), "i" (-RWSEM_ACTIVE_WRITE_BIAS) - : "memory", "cc", "edx"); + : "+m" (sem->count), "=d" (tmp) + : "a" (sem), "1" (-RWSEM_ACTIVE_WRITE_BIAS) + : "memory", "cc"); } /* @@ -221,33 +233,38 @@ static inline void __downgrade_write(struct rw_semaphore *sem) { asm volatile("# beginning __downgrade_write\n\t" - LOCK_PREFIX " addl %2,(%%eax)\n\t" - /* transitions 0xZZZZ0001 -> 0xYYYY0001 */ + LOCK_PREFIX _ASM_ADD "%2,(%1)\n\t" + /* + * transitions 0xZZZZ0001 -> 0xYYYY0001 (i386) + * 0xZZZZZZZZ00000001 -> 0xYYYYYYYY00000001 (x86_64) + */ " jns 1f\n\t" " call call_rwsem_downgrade_wake\n" "1:\n\t" "# ending __downgrade_write\n" : "+m" (sem->count) - : "a" (sem), "i" (-RWSEM_WAITING_BIAS) + : "a" (sem), "er" (-RWSEM_WAITING_BIAS) : "memory", "cc"); } /* * implement atomic add functionality */ -static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem) +static inline void rwsem_atomic_add(rwsem_count_t delta, + struct rw_semaphore *sem) { - asm volatile(LOCK_PREFIX "addl %1,%0" + asm volatile(LOCK_PREFIX _ASM_ADD "%1,%0" : "+m" (sem->count) - : "ir" (delta)); + : "er" (delta)); } /* * implement exchange and add functionality */ -static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem) +static inline rwsem_count_t rwsem_atomic_update(rwsem_count_t delta, + struct rw_semaphore *sem) { - int tmp = delta; + rwsem_count_t tmp = delta; asm volatile(LOCK_PREFIX "xadd %0,%1" : "+r" (tmp), "+m" (sem->count) --- linux-2.6.32.orig/arch/x86/include/asm/smp.h +++ linux-2.6.32/arch/x86/include/asm/smp.h @@ -135,6 +135,8 @@ void native_cpu_die(unsigned int cpu); void native_play_dead(void); void play_dead_common(void); +void wbinvd_on_cpu(int cpu); +int wbinvd_on_all_cpus(void); void native_send_call_func_ipi(const struct cpumask *mask); void native_send_call_func_single_ipi(int cpu); @@ -147,6 +149,13 @@ { return cpumask_weight(cpu_callout_mask); } +#else /* !CONFIG_SMP */ +#define wbinvd_on_cpu(cpu) wbinvd() +static inline int wbinvd_on_all_cpus(void) +{ + wbinvd(); + return 0; +} #endif /* CONFIG_SMP */ extern unsigned disabled_cpus __cpuinitdata; --- linux-2.6.32.orig/arch/x86/include/asm/desc.h +++ linux-2.6.32/arch/x86/include/asm/desc.h @@ -5,6 +5,7 @@ #include #include #include +#include static inline void fill_ldt(struct desc_struct *desc, const struct user_desc *info) @@ -93,6 +94,9 @@ #define load_TLS(t, cpu) native_load_tls(t, cpu) #define set_ldt native_set_ldt +#ifdef CONFIG_X86_32 +#define load_user_cs_desc native_load_user_cs_desc +#endif /*CONFIG_X86_32*/ #define write_ldt_entry(dt, entry, desc) \ native_write_ldt_entry(dt, entry, desc) @@ -392,4 +396,25 @@ _set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS); } +#ifdef CONFIG_X86_32 +static inline void set_user_cs(struct desc_struct *desc, unsigned long limit) +{ + limit = (limit - 1) / PAGE_SIZE; + desc->a = limit & 0xffff; + desc->b = (limit & 0xf0000) | 0x00c0fb00; +} + +static inline void native_load_user_cs_desc(int cpu, struct mm_struct *mm) +{ + get_cpu_gdt_table(cpu)[GDT_ENTRY_DEFAULT_USER_CS] = (mm)->context.user_cs; +} + +#define arch_add_exec_range arch_add_exec_range +#define arch_remove_exec_range arch_remove_exec_range +#define arch_flush_exec_range arch_flush_exec_range +extern void arch_add_exec_range(struct mm_struct *mm, unsigned long limit); +extern void arch_remove_exec_range(struct mm_struct *mm, unsigned long limit); +extern void arch_flush_exec_range(struct mm_struct *mm); +#endif /* CONFIG_X86_32 */ + #endif /* _ASM_X86_DESC_H */ --- linux-2.6.32.orig/arch/x86/include/asm/syscalls.h +++ linux-2.6.32/arch/x86/include/asm/syscalls.h @@ -55,8 +55,6 @@ struct oldold_utsname; struct old_utsname; -asmlinkage long sys_mmap2(unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long, unsigned long); asmlinkage int old_mmap(struct mmap_arg_struct __user *); asmlinkage int old_select(struct sel_arg_struct __user *); asmlinkage int sys_ipc(uint, int, int, int, void __user *, long); --- linux-2.6.32.orig/arch/x86/include/asm/mmu.h +++ linux-2.6.32/arch/x86/include/asm/mmu.h @@ -7,12 +7,19 @@ /* * The x86 doesn't have a mmu context, but * we put the segment information here. + * + * exec_limit is used to track the range PROT_EXEC + * mappings span. */ typedef struct { void *ldt; int size; struct mutex lock; void *vdso; +#ifdef CONFIG_X86_32 + struct desc_struct user_cs; + unsigned long exec_limit; +#endif } mm_context_t; #ifdef CONFIG_SMP --- linux-2.6.32.orig/arch/x86/include/asm/fixmap.h +++ linux-2.6.32/arch/x86/include/asm/fixmap.h @@ -82,6 +82,9 @@ #endif FIX_DBGP_BASE, FIX_EARLYCON_MEM_BASE, +#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT + FIX_OHCI1394_BASE, +#endif #ifdef CONFIG_X86_LOCAL_APIC FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ #endif @@ -126,9 +129,6 @@ FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 - (__end_of_permanent_fixed_addresses & 255), FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_SLOTS - 1, -#ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT - FIX_OHCI1394_BASE, -#endif #ifdef CONFIG_X86_32 FIX_WP_TEST, #endif --- linux-2.6.32.orig/arch/x86/include/asm/sys_ia32.h +++ linux-2.6.32/arch/x86/include/asm/sys_ia32.h @@ -62,9 +62,6 @@ asmlinkage long sys32_personality(unsigned long); asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); -asmlinkage long sys32_mmap2(unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long, unsigned long); - struct oldold_utsname; struct old_utsname; asmlinkage long sys32_olduname(struct oldold_utsname __user *); --- linux-2.6.32.orig/arch/x86/include/asm/kvm_host.h +++ linux-2.6.32/arch/x86/include/asm/kvm_host.h @@ -256,7 +256,8 @@ void (*new_cr3)(struct kvm_vcpu *vcpu); int (*page_fault)(struct kvm_vcpu *vcpu, gva_t gva, u32 err); void (*free)(struct kvm_vcpu *vcpu); - gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t gva); + gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t gva, u32 access, + u32 *error); void (*prefetch_page)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *page); int (*sync_page)(struct kvm_vcpu *vcpu, @@ -412,6 +413,7 @@ unsigned long irq_sources_bitmap; unsigned long irq_states[KVM_IOAPIC_NUM_PINS]; u64 vm_init_tsc; + s64 kvmclock_offset; }; struct kvm_vm_stat { @@ -600,8 +602,7 @@ unsigned long value); void kvm_get_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg); -int kvm_load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, - int type_bits, int seg); +int kvm_load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, int seg); int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason); @@ -644,6 +645,10 @@ int kvm_mmu_load(struct kvm_vcpu *vcpu); void kvm_mmu_unload(struct kvm_vcpu *vcpu); void kvm_mmu_sync_roots(struct kvm_vcpu *vcpu); +gpa_t kvm_mmu_gva_to_gpa_read(struct kvm_vcpu *vcpu, gva_t gva, u32 *error); +gpa_t kvm_mmu_gva_to_gpa_fetch(struct kvm_vcpu *vcpu, gva_t gva, u32 *error); +gpa_t kvm_mmu_gva_to_gpa_write(struct kvm_vcpu *vcpu, gva_t gva, u32 *error); +gpa_t kvm_mmu_gva_to_gpa_system(struct kvm_vcpu *vcpu, gva_t gva, u32 *error); int kvm_emulate_hypercall(struct kvm_vcpu *vcpu); @@ -657,6 +662,7 @@ int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3); int complete_pio(struct kvm_vcpu *vcpu); +bool kvm_check_iopl(struct kvm_vcpu *vcpu); struct kvm_memory_slot *gfn_to_memslot_unaliased(struct kvm *kvm, gfn_t gfn); --- linux-2.6.32.orig/arch/x86/include/asm/kvm_emulate.h +++ linux-2.6.32/arch/x86/include/asm/kvm_emulate.h @@ -54,13 +54,23 @@ struct x86_emulate_ops { /* * read_std: Read bytes of standard (non-emulated/special) memory. - * Used for instruction fetch, stack operations, and others. + * Used for descriptor reading. * @addr: [IN ] Linear address from which to read. * @val: [OUT] Value read from memory, zero-extended to 'u_long'. * @bytes: [IN ] Number of bytes to read from memory. */ int (*read_std)(unsigned long addr, void *val, - unsigned int bytes, struct kvm_vcpu *vcpu); + unsigned int bytes, struct kvm_vcpu *vcpu, u32 *error); + + /* + * fetch: Read bytes of standard (non-emulated/special) memory. + * Used for instruction fetch. + * @addr: [IN ] Linear address from which to read. + * @val: [OUT] Value read from memory, zero-extended to 'u_long'. + * @bytes: [IN ] Number of bytes to read from memory. + */ + int (*fetch)(unsigned long addr, void *val, + unsigned int bytes, struct kvm_vcpu *vcpu, u32 *error); /* * read_emulated: Read bytes from emulated/special memory area. @@ -129,7 +139,7 @@ u8 seg_override; unsigned int d; unsigned long regs[NR_VCPU_REGS]; - unsigned long eip; + unsigned long eip, eip_orig; /* modrm */ u8 modrm; u8 modrm_mod; @@ -168,6 +178,7 @@ /* Execution mode, passed to the emulator. */ #define X86EMUL_MODE_REAL 0 /* Real mode. */ +#define X86EMUL_MODE_VM86 1 /* Virtual 8086 mode. */ #define X86EMUL_MODE_PROT16 2 /* 16-bit protected mode. */ #define X86EMUL_MODE_PROT32 4 /* 32-bit protected mode. */ #define X86EMUL_MODE_PROT64 8 /* 64-bit (long) mode. */ --- linux-2.6.32.orig/arch/x86/include/asm/paravirt_types.h +++ linux-2.6.32/arch/x86/include/asm/paravirt_types.h @@ -118,6 +118,9 @@ void (*store_gdt)(struct desc_ptr *); void (*store_idt)(struct desc_ptr *); void (*set_ldt)(const void *desc, unsigned entries); +#ifdef CONFIG_X86_32 + void (*load_user_cs_desc)(int cpu, struct mm_struct *mm); +#endif /*CONFIG_X86_32*/ unsigned long (*store_tr)(void); void (*load_tls)(struct thread_struct *t, unsigned int cpu); #ifdef CONFIG_X86_64 --- linux-2.6.32.orig/arch/x86/include/asm/paravirt.h +++ linux-2.6.32/arch/x86/include/asm/paravirt.h @@ -289,6 +289,12 @@ { PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries); } +#ifdef CONFIG_X86_32 +static inline void load_user_cs_desc(unsigned int cpu, struct mm_struct *mm) +{ + PVOP_VCALL2(pv_cpu_ops.load_user_cs_desc, cpu, mm); +} +#endif /*CONFIG_X86_32*/ static inline void store_gdt(struct desc_ptr *dtr) { PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr); --- linux-2.6.32.orig/arch/x86/include/asm/k8.h +++ linux-2.6.32/arch/x86/include/asm/k8.h @@ -13,11 +13,16 @@ extern int k8_scan_nodes(unsigned long start, unsigned long end); #ifdef CONFIG_K8_NB +extern int num_k8_northbridges; + static inline struct pci_dev *node_to_k8_nb_misc(int node) { return (node < num_k8_northbridges) ? k8_northbridges[node] : NULL; } + #else +#define num_k8_northbridges 0 + static inline struct pci_dev *node_to_k8_nb_misc(int node) { return NULL; --- linux-2.6.32.orig/arch/x86/include/asm/dma-mapping.h +++ linux-2.6.32/arch/x86/include/asm/dma-mapping.h @@ -151,8 +151,6 @@ { struct dma_map_ops *ops = get_dma_ops(dev); - WARN_ON(irqs_disabled()); /* for portability */ - if (dma_release_from_coherent(dev, get_order(size), vaddr)) return; --- linux-2.6.32.orig/arch/x86/include/asm/hpet.h +++ linux-2.6.32/arch/x86/include/asm/hpet.h @@ -66,6 +66,7 @@ extern unsigned long hpet_address; extern unsigned long force_hpet_address; extern int hpet_force_user; +extern u8 hpet_msi_disable; extern int is_hpet_enabled(void); extern int hpet_enable(void); extern void hpet_disable(void); --- linux-2.6.32.orig/arch/x86/include/asm/io_apic.h +++ linux-2.6.32/arch/x86/include/asm/io_apic.h @@ -160,6 +160,7 @@ struct io_apic_irq_attr; extern int io_apic_set_pci_routing(struct device *dev, int irq, struct io_apic_irq_attr *irq_attr); +void setup_IO_APIC_irq_extra(u32 gsi); extern int (*ioapic_renumber_irq)(int ioapic, int irq); extern void ioapic_init_mappings(void); extern void ioapic_insert_resources(void); --- linux-2.6.32.orig/arch/x86/include/asm/cpufeature.h +++ linux-2.6.32/arch/x86/include/asm/cpufeature.h @@ -153,6 +153,7 @@ #define X86_FEATURE_SSE5 (6*32+11) /* SSE-5 */ #define X86_FEATURE_SKINIT (6*32+12) /* SKINIT/STGI instructions */ #define X86_FEATURE_WDT (6*32+13) /* Watchdog timer */ +#define X86_FEATURE_NODEID_MSR (6*32+19) /* NodeId MSR */ /* * Auxiliary flags: Linux defined - For features scattered in various @@ -248,6 +249,7 @@ #define cpu_has_x2apic boot_cpu_has(X86_FEATURE_X2APIC) #define cpu_has_xsave boot_cpu_has(X86_FEATURE_XSAVE) #define cpu_has_hypervisor boot_cpu_has(X86_FEATURE_HYPERVISOR) +#define cpu_has_pclmulqdq boot_cpu_has(X86_FEATURE_PCLMULQDQ) #if defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_64) # define cpu_has_invlpg 1 --- linux-2.6.32.orig/arch/x86/include/asm/vmx.h +++ linux-2.6.32/arch/x86/include/asm/vmx.h @@ -56,6 +56,7 @@ #define SECONDARY_EXEC_ENABLE_VPID 0x00000020 #define SECONDARY_EXEC_WBINVD_EXITING 0x00000040 #define SECONDARY_EXEC_UNRESTRICTED_GUEST 0x00000080 +#define SECONDARY_EXEC_PAUSE_LOOP_EXITING 0x00000400 #define PIN_BASED_EXT_INTR_MASK 0x00000001 @@ -144,6 +145,8 @@ VM_ENTRY_INSTRUCTION_LEN = 0x0000401a, TPR_THRESHOLD = 0x0000401c, SECONDARY_VM_EXEC_CONTROL = 0x0000401e, + PLE_GAP = 0x00004020, + PLE_WINDOW = 0x00004022, VM_INSTRUCTION_ERROR = 0x00004400, VM_EXIT_REASON = 0x00004402, VM_EXIT_INTR_INFO = 0x00004404, @@ -248,6 +251,7 @@ #define EXIT_REASON_MSR_READ 31 #define EXIT_REASON_MSR_WRITE 32 #define EXIT_REASON_MWAIT_INSTRUCTION 36 +#define EXIT_REASON_PAUSE_INSTRUCTION 40 #define EXIT_REASON_MCE_DURING_VMENTRY 41 #define EXIT_REASON_TPR_BELOW_THRESHOLD 43 #define EXIT_REASON_APIC_ACCESS 44 --- linux-2.6.32.orig/arch/x86/include/asm/amd_iommu.h +++ linux-2.6.32/arch/x86/include/asm/amd_iommu.h @@ -32,6 +32,7 @@ extern void amd_iommu_flush_all_devices(void); extern void amd_iommu_shutdown(void); extern void amd_iommu_apply_erratum_63(u16 devid); +extern void amd_iommu_init_api(void); #else static inline int amd_iommu_init(void) { return -ENODEV; } static inline void amd_iommu_detect(void) { } --- linux-2.6.32.orig/arch/x86/include/asm/msr.h +++ linux-2.6.32/arch/x86/include/asm/msr.h @@ -27,6 +27,18 @@ }; }; +struct msr_info { + u32 msr_no; + struct msr reg; + struct msr *msrs; + int err; +}; + +struct msr_regs_info { + u32 *regs; + int err; +}; + static inline unsigned long long native_read_tscp(unsigned int *aux) { unsigned long low, high; @@ -244,11 +256,14 @@ #define write_rdtscp_aux(val) wrmsr(0xc0000103, (val), 0) +struct msr *msrs_alloc(void); +void msrs_free(struct msr *msrs); + #ifdef CONFIG_SMP int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); -void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs); -void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs); +void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs); +void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs); int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]); --- linux-2.6.32.orig/arch/x86/include/asm/msr-index.h +++ linux-2.6.32/arch/x86/include/asm/msr-index.h @@ -104,6 +104,8 @@ #define MSR_AMD64_PATCH_LEVEL 0x0000008b #define MSR_AMD64_NB_CFG 0xc001001f #define MSR_AMD64_PATCH_LOADER 0xc0010020 +#define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140 +#define MSR_AMD64_OSVW_STATUS 0xc0010141 #define MSR_AMD64_IBSFETCHCTL 0xc0011030 #define MSR_AMD64_IBSFETCHLINAD 0xc0011031 #define MSR_AMD64_IBSFETCHPHYSAD 0xc0011032 @@ -123,6 +125,7 @@ #define FAM10H_MMIO_CONF_BUSRANGE_SHIFT 2 #define FAM10H_MMIO_CONF_BASE_MASK 0xfffffff #define FAM10H_MMIO_CONF_BASE_SHIFT 20 +#define MSR_FAM10H_NODE_ID 0xc001100c /* K8 MSRs */ #define MSR_K8_TOP_MEM1 0xc001001a --- linux-2.6.32.orig/arch/x86/include/asm/processor.h +++ linux-2.6.32/arch/x86/include/asm/processor.h @@ -180,7 +180,7 @@ unsigned int *ecx, unsigned int *edx) { /* ecx is often an input as well as an output. */ - asm("cpuid" + asm volatile("cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), --- linux-2.6.32.orig/arch/x86/include/asm/pgalloc.h +++ linux-2.6.32/arch/x86/include/asm/pgalloc.h @@ -23,6 +23,11 @@ #endif /* + * Flags to use when allocating a user page table page. + */ +extern gfp_t __userpte_alloc_gfp; + +/* * Allocate and free page tables. */ extern pgd_t *pgd_alloc(struct mm_struct *); --- linux-2.6.32.orig/arch/x86/include/asm/irq_vectors.h +++ linux-2.6.32/arch/x86/include/asm/irq_vectors.h @@ -113,7 +113,7 @@ */ #define LOCAL_PENDING_VECTOR 0xec -#define UV_BAU_MESSAGE 0xec +#define UV_BAU_MESSAGE 0xea /* * Self IPI vector for machine checks --- linux-2.6.32.orig/arch/x86/include/asm/thread_info.h +++ linux-2.6.32/arch/x86/include/asm/thread_info.h @@ -86,7 +86,6 @@ #define TIF_NOTSC 16 /* TSC is not accessible in userland */ #define TIF_IA32 17 /* 32bit process */ #define TIF_FORK 18 /* ret_from_fork */ -#define TIF_ABI_PENDING 19 #define TIF_MEMDIE 20 #define TIF_DEBUG 21 /* uses debug registers */ #define TIF_IO_BITMAP 22 /* uses I/O bitmap */ @@ -110,7 +109,6 @@ #define _TIF_NOTSC (1 << TIF_NOTSC) #define _TIF_IA32 (1 << TIF_IA32) #define _TIF_FORK (1 << TIF_FORK) -#define _TIF_ABI_PENDING (1 << TIF_ABI_PENDING) #define _TIF_DEBUG (1 << TIF_DEBUG) #define _TIF_IO_BITMAP (1 << TIF_IO_BITMAP) #define _TIF_FREEZE (1 << TIF_FREEZE) --- linux-2.6.32.orig/arch/x86/include/asm/uv/uv_hub.h +++ linux-2.6.32/arch/x86/include/asm/uv/uv_hub.h @@ -31,20 +31,20 @@ * contiguous (although various IO spaces may punch holes in * it).. * - * N - Number of bits in the node portion of a socket physical - * address. + * N - Number of bits in the node portion of a socket physical + * address. * - * NASID - network ID of a router, Mbrick or Cbrick. Nasid values of - * routers always have low bit of 1, C/MBricks have low bit - * equal to 0. Most addressing macros that target UV hub chips - * right shift the NASID by 1 to exclude the always-zero bit. - * NASIDs contain up to 15 bits. + * NASID - network ID of a router, Mbrick or Cbrick. Nasid values of + * routers always have low bit of 1, C/MBricks have low bit + * equal to 0. Most addressing macros that target UV hub chips + * right shift the NASID by 1 to exclude the always-zero bit. + * NASIDs contain up to 15 bits. * * GNODE - NASID right shifted by 1 bit. Most mmrs contain gnodes instead * of nasids. * - * PNODE - the low N bits of the GNODE. The PNODE is the most useful variant - * of the nasid for socket usage. + * PNODE - the low N bits of the GNODE. The PNODE is the most useful variant + * of the nasid for socket usage. * * * NumaLink Global Physical Address Format: @@ -71,12 +71,12 @@ * * * APICID format - * NOTE!!!!!! This is the current format of the APICID. However, code - * should assume that this will change in the future. Use functions - * in this file for all APICID bit manipulations and conversion. + * NOTE!!!!!! This is the current format of the APICID. However, code + * should assume that this will change in the future. Use functions + * in this file for all APICID bit manipulations and conversion. * - * 1111110000000000 - * 5432109876543210 + * 1111110000000000 + * 5432109876543210 * pppppppppplc0cch * sssssssssss * @@ -89,9 +89,9 @@ * Note: Processor only supports 12 bits in the APICID register. The ACPI * tables hold all 16 bits. Software needs to be aware of this. * - * Unless otherwise specified, all references to APICID refer to - * the FULL value contained in ACPI tables, not the subset in the - * processor APICID register. + * Unless otherwise specified, all references to APICID refer to + * the FULL value contained in ACPI tables, not the subset in the + * processor APICID register. */ @@ -151,16 +151,16 @@ }; DECLARE_PER_CPU(struct uv_hub_info_s, __uv_hub_info); -#define uv_hub_info (&__get_cpu_var(__uv_hub_info)) +#define uv_hub_info (&__get_cpu_var(__uv_hub_info)) #define uv_cpu_hub_info(cpu) (&per_cpu(__uv_hub_info, cpu)) /* * Local & Global MMR space macros. - * Note: macros are intended to be used ONLY by inline functions - * in this file - not by other kernel code. - * n - NASID (full 15-bit global nasid) - * g - GNODE (full 15-bit global nasid, right shifted 1) - * p - PNODE (local part of nsids, right shifted 1) + * Note: macros are intended to be used ONLY by inline functions + * in this file - not by other kernel code. + * n - NASID (full 15-bit global nasid) + * g - GNODE (full 15-bit global nasid, right shifted 1) + * p - PNODE (local part of nsids, right shifted 1) */ #define UV_NASID_TO_PNODE(n) (((n) >> 1) & uv_hub_info->pnode_mask) #define UV_PNODE_TO_GNODE(p) ((p) |uv_hub_info->gnode_extra) @@ -213,8 +213,8 @@ /* * Macros for converting between kernel virtual addresses, socket local physical * addresses, and UV global physical addresses. - * Note: use the standard __pa() & __va() macros for converting - * between socket virtual and socket physical addresses. + * Note: use the standard __pa() & __va() macros for converting + * between socket virtual and socket physical addresses. */ /* socket phys RAM --> UV global physical address */ @@ -265,21 +265,18 @@ * Access global MMRs using the low memory MMR32 space. This region supports * faster MMR access but not all MMRs are accessible in this space. */ -static inline unsigned long *uv_global_mmr32_address(int pnode, - unsigned long offset) +static inline unsigned long *uv_global_mmr32_address(int pnode, unsigned long offset) { return __va(UV_GLOBAL_MMR32_BASE | UV_GLOBAL_MMR32_PNODE_BITS(pnode) | offset); } -static inline void uv_write_global_mmr32(int pnode, unsigned long offset, - unsigned long val) +static inline void uv_write_global_mmr32(int pnode, unsigned long offset, unsigned long val) { writeq(val, uv_global_mmr32_address(pnode, offset)); } -static inline unsigned long uv_read_global_mmr32(int pnode, - unsigned long offset) +static inline unsigned long uv_read_global_mmr32(int pnode, unsigned long offset) { return readq(uv_global_mmr32_address(pnode, offset)); } @@ -288,25 +285,32 @@ * Access Global MMR space using the MMR space located at the top of physical * memory. */ -static inline unsigned long *uv_global_mmr64_address(int pnode, - unsigned long offset) +static inline unsigned long *uv_global_mmr64_address(int pnode, unsigned long offset) { return __va(UV_GLOBAL_MMR64_BASE | UV_GLOBAL_MMR64_PNODE_BITS(pnode) | offset); } -static inline void uv_write_global_mmr64(int pnode, unsigned long offset, - unsigned long val) +static inline void uv_write_global_mmr64(int pnode, unsigned long offset, unsigned long val) { writeq(val, uv_global_mmr64_address(pnode, offset)); } -static inline unsigned long uv_read_global_mmr64(int pnode, - unsigned long offset) +static inline unsigned long uv_read_global_mmr64(int pnode, unsigned long offset) { return readq(uv_global_mmr64_address(pnode, offset)); } +static inline void uv_write_global_mmr8(int pnode, unsigned long offset, unsigned char val) +{ + writeb(val, uv_global_mmr64_address(pnode, offset)); +} + +static inline unsigned char uv_read_global_mmr8(int pnode, unsigned long offset) +{ + return readb(uv_global_mmr64_address(pnode, offset)); +} + /* * Access hub local MMRs. Faster than using global space but only local MMRs * are accessible. @@ -426,11 +430,17 @@ } } +static inline unsigned long uv_scir_offset(int apicid) +{ + return SCIR_LOCAL_MMR_BASE | (apicid & 0x3f); +} + static inline void uv_set_cpu_scir_bits(int cpu, unsigned char value) { if (uv_cpu_hub_info(cpu)->scir.state != value) { + uv_write_global_mmr8(uv_cpu_to_pnode(cpu), + uv_cpu_hub_info(cpu)->scir.offset, value); uv_cpu_hub_info(cpu)->scir.state = value; - uv_write_local_mmr8(uv_cpu_hub_info(cpu)->scir.offset, value); } } --- linux-2.6.32.orig/arch/x86/lib/rwsem_64.S +++ linux-2.6.32/arch/x86/lib/rwsem_64.S @@ -0,0 +1,81 @@ +/* + * x86-64 rwsem wrappers + * + * This interfaces the inline asm code to the slow-path + * C routines. We need to save the call-clobbered regs + * that the asm does not mark as clobbered, and move the + * argument from %rax to %rdi. + * + * NOTE! We don't need to save %rax, because the functions + * will always return the semaphore pointer in %rax (which + * is also the input argument to these helpers) + * + * The following can clobber %rdx because the asm clobbers it: + * call_rwsem_down_write_failed + * call_rwsem_wake + * but %rdi, %rsi, %rcx, %r8-r11 always need saving. + */ + +#include +#include +#include +#include +#include + +#define save_common_regs \ + pushq %rdi; \ + pushq %rsi; \ + pushq %rcx; \ + pushq %r8; \ + pushq %r9; \ + pushq %r10; \ + pushq %r11 + +#define restore_common_regs \ + popq %r11; \ + popq %r10; \ + popq %r9; \ + popq %r8; \ + popq %rcx; \ + popq %rsi; \ + popq %rdi + +/* Fix up special calling conventions */ +ENTRY(call_rwsem_down_read_failed) + save_common_regs + pushq %rdx + movq %rax,%rdi + call rwsem_down_read_failed + popq %rdx + restore_common_regs + ret + ENDPROC(call_rwsem_down_read_failed) + +ENTRY(call_rwsem_down_write_failed) + save_common_regs + movq %rax,%rdi + call rwsem_down_write_failed + restore_common_regs + ret + ENDPROC(call_rwsem_down_write_failed) + +ENTRY(call_rwsem_wake) + decw %dx /* do nothing if still outstanding active readers */ + jnz 1f + save_common_regs + movq %rax,%rdi + call rwsem_wake + restore_common_regs +1: ret + ENDPROC(call_rwsem_wake) + +/* Fix up special calling conventions */ +ENTRY(call_rwsem_downgrade_wake) + save_common_regs + pushq %rdx + movq %rax,%rdi + call rwsem_downgrade_wake + popq %rdx + restore_common_regs + ret + ENDPROC(call_rwsem_downgrade_wake) --- linux-2.6.32.orig/arch/x86/lib/msr.c +++ linux-2.6.32/arch/x86/lib/msr.c @@ -1,226 +1,23 @@ #include #include -#include #include -struct msr_info { - u32 msr_no; - struct msr reg; - struct msr *msrs; - int off; - int err; -}; - -static void __rdmsr_on_cpu(void *info) -{ - struct msr_info *rv = info; - struct msr *reg; - int this_cpu = raw_smp_processor_id(); - - if (rv->msrs) - reg = &rv->msrs[this_cpu - rv->off]; - else - reg = &rv->reg; - - rdmsr(rv->msr_no, reg->l, reg->h); -} - -static void __wrmsr_on_cpu(void *info) -{ - struct msr_info *rv = info; - struct msr *reg; - int this_cpu = raw_smp_processor_id(); - - if (rv->msrs) - reg = &rv->msrs[this_cpu - rv->off]; - else - reg = &rv->reg; - - wrmsr(rv->msr_no, reg->l, reg->h); -} - -int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) -{ - int err; - struct msr_info rv; - - memset(&rv, 0, sizeof(rv)); - - rv.msr_no = msr_no; - err = smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 1); - *l = rv.reg.l; - *h = rv.reg.h; - - return err; -} -EXPORT_SYMBOL(rdmsr_on_cpu); - -int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) -{ - int err; - struct msr_info rv; - - memset(&rv, 0, sizeof(rv)); - - rv.msr_no = msr_no; - rv.reg.l = l; - rv.reg.h = h; - err = smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 1); - - return err; -} -EXPORT_SYMBOL(wrmsr_on_cpu); - -/* rdmsr on a bunch of CPUs - * - * @mask: which CPUs - * @msr_no: which MSR - * @msrs: array of MSR values - * - */ -void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs) -{ - struct msr_info rv; - int this_cpu; - - memset(&rv, 0, sizeof(rv)); - - rv.off = cpumask_first(mask); - rv.msrs = msrs; - rv.msr_no = msr_no; - - this_cpu = get_cpu(); - - if (cpumask_test_cpu(this_cpu, mask)) - __rdmsr_on_cpu(&rv); - - smp_call_function_many(mask, __rdmsr_on_cpu, &rv, 1); - put_cpu(); -} -EXPORT_SYMBOL(rdmsr_on_cpus); - -/* - * wrmsr on a bunch of CPUs - * - * @mask: which CPUs - * @msr_no: which MSR - * @msrs: array of MSR values - * - */ -void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs) -{ - struct msr_info rv; - int this_cpu; - - memset(&rv, 0, sizeof(rv)); - - rv.off = cpumask_first(mask); - rv.msrs = msrs; - rv.msr_no = msr_no; - - this_cpu = get_cpu(); - - if (cpumask_test_cpu(this_cpu, mask)) - __wrmsr_on_cpu(&rv); - - smp_call_function_many(mask, __wrmsr_on_cpu, &rv, 1); - put_cpu(); -} -EXPORT_SYMBOL(wrmsr_on_cpus); - -/* These "safe" variants are slower and should be used when the target MSR - may not actually exist. */ -static void __rdmsr_safe_on_cpu(void *info) -{ - struct msr_info *rv = info; - - rv->err = rdmsr_safe(rv->msr_no, &rv->reg.l, &rv->reg.h); -} - -static void __wrmsr_safe_on_cpu(void *info) -{ - struct msr_info *rv = info; - - rv->err = wrmsr_safe(rv->msr_no, rv->reg.l, rv->reg.h); -} - -int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) +struct msr *msrs_alloc(void) { - int err; - struct msr_info rv; + struct msr *msrs = NULL; - memset(&rv, 0, sizeof(rv)); + msrs = alloc_percpu(struct msr); + if (!msrs) { + pr_warning("%s: error allocating msrs\n", __func__); + return NULL; + } - rv.msr_no = msr_no; - err = smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 1); - *l = rv.reg.l; - *h = rv.reg.h; - - return err ? err : rv.err; + return msrs; } -EXPORT_SYMBOL(rdmsr_safe_on_cpu); +EXPORT_SYMBOL(msrs_alloc); -int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) +void msrs_free(struct msr *msrs) { - int err; - struct msr_info rv; - - memset(&rv, 0, sizeof(rv)); - - rv.msr_no = msr_no; - rv.reg.l = l; - rv.reg.h = h; - err = smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 1); - - return err ? err : rv.err; -} -EXPORT_SYMBOL(wrmsr_safe_on_cpu); - -/* - * These variants are significantly slower, but allows control over - * the entire 32-bit GPR set. - */ -struct msr_regs_info { - u32 *regs; - int err; -}; - -static void __rdmsr_safe_regs_on_cpu(void *info) -{ - struct msr_regs_info *rv = info; - - rv->err = rdmsr_safe_regs(rv->regs); -} - -static void __wrmsr_safe_regs_on_cpu(void *info) -{ - struct msr_regs_info *rv = info; - - rv->err = wrmsr_safe_regs(rv->regs); -} - -int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) -{ - int err; - struct msr_regs_info rv; - - rv.regs = regs; - rv.err = -EIO; - err = smp_call_function_single(cpu, __rdmsr_safe_regs_on_cpu, &rv, 1); - - return err ? err : rv.err; -} -EXPORT_SYMBOL(rdmsr_safe_regs_on_cpu); - -int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) -{ - int err; - struct msr_regs_info rv; - - rv.regs = regs; - rv.err = -EIO; - err = smp_call_function_single(cpu, __wrmsr_safe_regs_on_cpu, &rv, 1); - - return err ? err : rv.err; + free_percpu(msrs); } -EXPORT_SYMBOL(wrmsr_safe_regs_on_cpu); +EXPORT_SYMBOL(msrs_free); --- linux-2.6.32.orig/arch/x86/lib/msr-smp.c +++ linux-2.6.32/arch/x86/lib/msr-smp.c @@ -0,0 +1,204 @@ +#include +#include +#include +#include + +static void __rdmsr_on_cpu(void *info) +{ + struct msr_info *rv = info; + struct msr *reg; + int this_cpu = raw_smp_processor_id(); + + if (rv->msrs) + reg = per_cpu_ptr(rv->msrs, this_cpu); + else + reg = &rv->reg; + + rdmsr(rv->msr_no, reg->l, reg->h); +} + +static void __wrmsr_on_cpu(void *info) +{ + struct msr_info *rv = info; + struct msr *reg; + int this_cpu = raw_smp_processor_id(); + + if (rv->msrs) + reg = per_cpu_ptr(rv->msrs, this_cpu); + else + reg = &rv->reg; + + wrmsr(rv->msr_no, reg->l, reg->h); +} + +int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) +{ + int err; + struct msr_info rv; + + memset(&rv, 0, sizeof(rv)); + + rv.msr_no = msr_no; + err = smp_call_function_single(cpu, __rdmsr_on_cpu, &rv, 1); + *l = rv.reg.l; + *h = rv.reg.h; + + return err; +} +EXPORT_SYMBOL(rdmsr_on_cpu); + +int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) +{ + int err; + struct msr_info rv; + + memset(&rv, 0, sizeof(rv)); + + rv.msr_no = msr_no; + rv.reg.l = l; + rv.reg.h = h; + err = smp_call_function_single(cpu, __wrmsr_on_cpu, &rv, 1); + + return err; +} +EXPORT_SYMBOL(wrmsr_on_cpu); + +static void __rwmsr_on_cpus(const struct cpumask *mask, u32 msr_no, + struct msr *msrs, + void (*msr_func) (void *info)) +{ + struct msr_info rv; + int this_cpu; + + memset(&rv, 0, sizeof(rv)); + + rv.msrs = msrs; + rv.msr_no = msr_no; + + this_cpu = get_cpu(); + + if (cpumask_test_cpu(this_cpu, mask)) + msr_func(&rv); + + smp_call_function_many(mask, msr_func, &rv, 1); + put_cpu(); +} + +/* rdmsr on a bunch of CPUs + * + * @mask: which CPUs + * @msr_no: which MSR + * @msrs: array of MSR values + * + */ +void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs) +{ + __rwmsr_on_cpus(mask, msr_no, msrs, __rdmsr_on_cpu); +} +EXPORT_SYMBOL(rdmsr_on_cpus); + +/* + * wrmsr on a bunch of CPUs + * + * @mask: which CPUs + * @msr_no: which MSR + * @msrs: array of MSR values + * + */ +void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs) +{ + __rwmsr_on_cpus(mask, msr_no, msrs, __wrmsr_on_cpu); +} +EXPORT_SYMBOL(wrmsr_on_cpus); + +/* These "safe" variants are slower and should be used when the target MSR + may not actually exist. */ +static void __rdmsr_safe_on_cpu(void *info) +{ + struct msr_info *rv = info; + + rv->err = rdmsr_safe(rv->msr_no, &rv->reg.l, &rv->reg.h); +} + +static void __wrmsr_safe_on_cpu(void *info) +{ + struct msr_info *rv = info; + + rv->err = wrmsr_safe(rv->msr_no, rv->reg.l, rv->reg.h); +} + +int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) +{ + int err; + struct msr_info rv; + + memset(&rv, 0, sizeof(rv)); + + rv.msr_no = msr_no; + err = smp_call_function_single(cpu, __rdmsr_safe_on_cpu, &rv, 1); + *l = rv.reg.l; + *h = rv.reg.h; + + return err ? err : rv.err; +} +EXPORT_SYMBOL(rdmsr_safe_on_cpu); + +int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) +{ + int err; + struct msr_info rv; + + memset(&rv, 0, sizeof(rv)); + + rv.msr_no = msr_no; + rv.reg.l = l; + rv.reg.h = h; + err = smp_call_function_single(cpu, __wrmsr_safe_on_cpu, &rv, 1); + + return err ? err : rv.err; +} +EXPORT_SYMBOL(wrmsr_safe_on_cpu); + +/* + * These variants are significantly slower, but allows control over + * the entire 32-bit GPR set. + */ +static void __rdmsr_safe_regs_on_cpu(void *info) +{ + struct msr_regs_info *rv = info; + + rv->err = rdmsr_safe_regs(rv->regs); +} + +static void __wrmsr_safe_regs_on_cpu(void *info) +{ + struct msr_regs_info *rv = info; + + rv->err = wrmsr_safe_regs(rv->regs); +} + +int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) +{ + int err; + struct msr_regs_info rv; + + rv.regs = regs; + rv.err = -EIO; + err = smp_call_function_single(cpu, __rdmsr_safe_regs_on_cpu, &rv, 1); + + return err ? err : rv.err; +} +EXPORT_SYMBOL(rdmsr_safe_regs_on_cpu); + +int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) +{ + int err; + struct msr_regs_info rv; + + rv.regs = regs; + rv.err = -EIO; + err = smp_call_function_single(cpu, __wrmsr_safe_regs_on_cpu, &rv, 1); + + return err ? err : rv.err; +} +EXPORT_SYMBOL(wrmsr_safe_regs_on_cpu); --- linux-2.6.32.orig/arch/x86/lib/cache-smp.c +++ linux-2.6.32/arch/x86/lib/cache-smp.c @@ -0,0 +1,19 @@ +#include +#include + +static void __wbinvd(void *dummy) +{ + wbinvd(); +} + +void wbinvd_on_cpu(int cpu) +{ + smp_call_function_single(cpu, __wbinvd, NULL, 1); +} +EXPORT_SYMBOL(wbinvd_on_cpu); + +int wbinvd_on_all_cpus(void) +{ + return on_each_cpu(__wbinvd, NULL, 1); +} +EXPORT_SYMBOL(wbinvd_on_all_cpus); --- linux-2.6.32.orig/arch/x86/lib/Makefile +++ linux-2.6.32/arch/x86/lib/Makefile @@ -2,14 +2,14 @@ # Makefile for x86 specific library files. # -obj-$(CONFIG_SMP) := msr.o +obj-$(CONFIG_SMP) += msr-smp.o cache-smp.o lib-y := delay.o lib-y += thunk_$(BITS).o lib-y += usercopy_$(BITS).o getuser.o putuser.o lib-y += memcpy_$(BITS).o -obj-y += msr-reg.o msr-reg-export.o +obj-y += msr.o msr-reg.o msr-reg-export.o ifeq ($(CONFIG_X86_32),y) obj-y += atomic64_32.o @@ -26,4 +26,5 @@ lib-y += thunk_64.o clear_page_64.o copy_page_64.o lib-y += memmove_64.o memset_64.o lib-y += copy_user_64.o rwlock_64.o copy_user_nocache_64.o + lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem_64.o endif --- linux-2.6.32.orig/arch/x86/pci/irq.c +++ linux-2.6.32/arch/x86/pci/irq.c @@ -590,6 +590,8 @@ case PCI_DEVICE_ID_INTEL_ICH10_1: case PCI_DEVICE_ID_INTEL_ICH10_2: case PCI_DEVICE_ID_INTEL_ICH10_3: + case PCI_DEVICE_ID_INTEL_CPT_LPC1: + case PCI_DEVICE_ID_INTEL_CPT_LPC2: r->name = "PIIX/ICH"; r->get = pirq_piix_get; r->set = pirq_piix_set; --- linux-2.6.32.orig/arch/x86/pci/i386.c +++ linux-2.6.32/arch/x86/pci/i386.c @@ -282,6 +282,15 @@ return -EINVAL; prot = pgprot_val(vma->vm_page_prot); + + /* + * Return error if pat is not enabled and write_combine is requested. + * Caller can followup with UC MINUS request and add a WC mtrr if there + * is a free mtrr slot. + */ + if (!pat_enabled && write_combine) + return -EINVAL; + if (pat_enabled && write_combine) prot |= _PAGE_CACHE_WC; else if (pat_enabled || boot_cpu_data.x86 > 3) --- linux-2.6.32.orig/arch/x86/oprofile/op_model_amd.c +++ linux-2.6.32/arch/x86/oprofile/op_model_amd.c @@ -76,19 +76,6 @@ #ifdef CONFIG_OPROFILE_EVENT_MULTIPLEX -static void op_mux_fill_in_addresses(struct op_msrs * const msrs) -{ - int i; - - for (i = 0; i < NUM_VIRT_COUNTERS; i++) { - int hw_counter = op_x86_virt_to_phys(i); - if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i)) - msrs->multiplex[i].addr = MSR_K7_PERFCTR0 + hw_counter; - else - msrs->multiplex[i].addr = 0; - } -} - static void op_mux_switch_ctrl(struct op_x86_model_spec const *model, struct op_msrs const * const msrs) { @@ -98,7 +85,7 @@ /* enable active counters */ for (i = 0; i < NUM_COUNTERS; ++i) { int virt = op_x86_phys_to_virt(i); - if (!counter_config[virt].enabled) + if (!reset_value[virt]) continue; rdmsrl(msrs->controls[i].addr, val); val &= model->reserved; @@ -107,10 +94,6 @@ } } -#else - -static inline void op_mux_fill_in_addresses(struct op_msrs * const msrs) { } - #endif /* functions for op_amd_spec */ @@ -122,18 +105,12 @@ for (i = 0; i < NUM_COUNTERS; i++) { if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i)) msrs->counters[i].addr = MSR_K7_PERFCTR0 + i; - else - msrs->counters[i].addr = 0; } for (i = 0; i < NUM_CONTROLS; i++) { if (reserve_evntsel_nmi(MSR_K7_EVNTSEL0 + i)) msrs->controls[i].addr = MSR_K7_EVNTSEL0 + i; - else - msrs->controls[i].addr = 0; } - - op_mux_fill_in_addresses(msrs); } static void op_amd_setup_ctrs(struct op_x86_model_spec const *model, @@ -144,7 +121,8 @@ /* setup reset_value */ for (i = 0; i < NUM_VIRT_COUNTERS; ++i) { - if (counter_config[i].enabled) + if (counter_config[i].enabled + && msrs->counters[op_x86_virt_to_phys(i)].addr) reset_value[i] = counter_config[i].count; else reset_value[i] = 0; @@ -169,9 +147,7 @@ /* enable active counters */ for (i = 0; i < NUM_COUNTERS; ++i) { int virt = op_x86_phys_to_virt(i); - if (!counter_config[virt].enabled) - continue; - if (!msrs->counters[i].addr) + if (!reset_value[virt]) continue; /* setup counter registers */ @@ -405,16 +381,6 @@ return 1; } -#ifdef CONFIG_NUMA - /* Sanity check */ - /* Works only for 64bit with proper numa implementation. */ - if (nodes != num_possible_nodes()) { - printk(KERN_DEBUG "Failed to setup CPU node(s) for IBS, " - "found: %d, expected %d", - nodes, num_possible_nodes()); - return 1; - } -#endif return 0; } --- linux-2.6.32.orig/arch/x86/oprofile/nmi_int.c +++ linux-2.6.32/arch/x86/oprofile/nmi_int.c @@ -159,7 +159,7 @@ for_each_possible_cpu(i) { per_cpu(cpu_msrs, i).multiplex = - kmalloc(multiplex_size, GFP_KERNEL); + kzalloc(multiplex_size, GFP_KERNEL); if (!per_cpu(cpu_msrs, i).multiplex) return 0; } @@ -179,7 +179,6 @@ if (counter_config[i].enabled) { multiplex[i].saved = -(u64)counter_config[i].count; } else { - multiplex[i].addr = 0; multiplex[i].saved = 0; } } @@ -189,25 +188,27 @@ static void nmi_cpu_save_mpx_registers(struct op_msrs *msrs) { + struct op_msr *counters = msrs->counters; struct op_msr *multiplex = msrs->multiplex; int i; for (i = 0; i < model->num_counters; ++i) { int virt = op_x86_phys_to_virt(i); - if (multiplex[virt].addr) - rdmsrl(multiplex[virt].addr, multiplex[virt].saved); + if (counters[i].addr) + rdmsrl(counters[i].addr, multiplex[virt].saved); } } static void nmi_cpu_restore_mpx_registers(struct op_msrs *msrs) { + struct op_msr *counters = msrs->counters; struct op_msr *multiplex = msrs->multiplex; int i; for (i = 0; i < model->num_counters; ++i) { int virt = op_x86_phys_to_virt(i); - if (multiplex[virt].addr) - wrmsrl(multiplex[virt].addr, multiplex[virt].saved); + if (counters[i].addr) + wrmsrl(counters[i].addr, multiplex[virt].saved); } } @@ -222,7 +223,7 @@ /* move to next set */ si += model->num_counters; - if ((si > model->num_virt_counters) || (counter_config[si].count == 0)) + if ((si >= model->num_virt_counters) || (counter_config[si].count == 0)) per_cpu(switch_index, cpu) = 0; else per_cpu(switch_index, cpu) = si; @@ -303,11 +304,11 @@ int i; for_each_possible_cpu(i) { - per_cpu(cpu_msrs, i).counters = kmalloc(counters_size, + per_cpu(cpu_msrs, i).counters = kzalloc(counters_size, GFP_KERNEL); if (!per_cpu(cpu_msrs, i).counters) return 0; - per_cpu(cpu_msrs, i).controls = kmalloc(controls_size, + per_cpu(cpu_msrs, i).controls = kzalloc(controls_size, GFP_KERNEL); if (!per_cpu(cpu_msrs, i).controls) return 0; @@ -598,6 +599,7 @@ case 15: case 23: *cpu_type = "i386/core_2"; break; + case 0x2e: case 26: spec = &op_arch_perfmon_spec; *cpu_type = "i386/core_i7"; --- linux-2.6.32.orig/arch/x86/oprofile/op_model_ppro.c +++ linux-2.6.32/arch/x86/oprofile/op_model_ppro.c @@ -37,15 +37,11 @@ for (i = 0; i < num_counters; i++) { if (reserve_perfctr_nmi(MSR_P6_PERFCTR0 + i)) msrs->counters[i].addr = MSR_P6_PERFCTR0 + i; - else - msrs->counters[i].addr = 0; } for (i = 0; i < num_counters; i++) { if (reserve_evntsel_nmi(MSR_P6_EVNTSEL0 + i)) msrs->controls[i].addr = MSR_P6_EVNTSEL0 + i; - else - msrs->controls[i].addr = 0; } } @@ -57,7 +53,7 @@ int i; if (!reset_value) { - reset_value = kmalloc(sizeof(reset_value[0]) * num_counters, + reset_value = kzalloc(sizeof(reset_value[0]) * num_counters, GFP_ATOMIC); if (!reset_value) return; --- linux-2.6.32.orig/arch/x86/oprofile/op_model_p4.c +++ linux-2.6.32/arch/x86/oprofile/op_model_p4.c @@ -394,12 +394,6 @@ setup_num_counters(); stag = get_stagger(); - /* initialize some registers */ - for (i = 0; i < num_counters; ++i) - msrs->counters[i].addr = 0; - for (i = 0; i < num_controls; ++i) - msrs->controls[i].addr = 0; - /* the counter & cccr registers we pay attention to */ for (i = 0; i < num_counters; ++i) { addr = p4_counters[VIRT_CTR(stag, i)].counter_address; --- linux-2.6.32.orig/arch/x86/mm/srat_64.c +++ linux-2.6.32/arch/x86/mm/srat_64.c @@ -229,9 +229,11 @@ printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n"); } - if (changed) + if (changed) { + node_set(node, cpu_nodes_parsed); printk(KERN_INFO "SRAT: hot plug zone found %Lx - %Lx\n", nd->start, nd->end); + } } /* Callback for parsing of the Proximity Domain <-> Memory Area mappings */ --- linux-2.6.32.orig/arch/x86/mm/tlb.c +++ linux-2.6.32/arch/x86/mm/tlb.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -130,6 +131,10 @@ union smp_flush_state *f; cpu = smp_processor_id(); +#ifdef CONFIG_X86_32 + if (current->active_mm) + load_user_cs_desc(cpu, current->active_mm); +#endif /* * orig_rax contains the negated interrupt vector. * Use that to determine where the sender put the data. --- linux-2.6.32.orig/arch/x86/mm/mmap.c +++ linux-2.6.32/arch/x86/mm/mmap.c @@ -131,6 +131,11 @@ } else { mm->mmap_base = mmap_base(); mm->get_unmapped_area = arch_get_unmapped_area_topdown; +#ifdef CONFIG_X86_32 + if (!nx_enabled && !(current->personality & READ_IMPLIES_EXEC) + && mmap_is_ia32()) + mm->get_unmapped_exec_area = arch_get_unmapped_exec_area; +#endif mm->unmap_area = arch_unmap_area_topdown; } } --- linux-2.6.32.orig/arch/x86/mm/pgtable.c +++ linux-2.6.32/arch/x86/mm/pgtable.c @@ -6,6 +6,14 @@ #define PGALLOC_GFP GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO +#ifdef CONFIG_HIGHPTE +#define PGALLOC_USER_GFP __GFP_HIGHMEM +#else +#define PGALLOC_USER_GFP 0 +#endif + +gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP; + pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) { return (pte_t *)__get_free_page(PGALLOC_GFP); @@ -15,16 +23,29 @@ { struct page *pte; -#ifdef CONFIG_HIGHPTE - pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0); -#else - pte = alloc_pages(PGALLOC_GFP, 0); -#endif + pte = alloc_pages(__userpte_alloc_gfp, 0); if (pte) pgtable_page_ctor(pte); return pte; } +static int __init setup_userpte(char *arg) +{ + if (!arg) + return -EINVAL; + + /* + * "userpte=nohigh" disables allocation of user pagetables in + * high memory. + */ + if (strcmp(arg, "nohigh") == 0) + __userpte_alloc_gfp &= ~__GFP_HIGHMEM; + else + return -EINVAL; + return 0; +} +early_param("userpte", setup_userpte); + void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) { pgtable_page_dtor(pte); --- linux-2.6.32.orig/arch/x86/mm/init.c +++ linux-2.6.32/arch/x86/mm/init.c @@ -149,6 +149,14 @@ set_nx(); if (nx_enabled) printk(KERN_INFO "NX (Execute Disable) protection: active\n"); + else +#ifdef CONFIG_X86_32 + printk(KERN_INFO "Using x86 segment limits to approximate " + "NX protection\n"); +#else + printk(KERN_WARNING "Warning: NX (Execute Disable) protection " + "missing in CPU or disabled in BIOS!\n"); +#endif /* Enable PSE if available */ if (cpu_has_pse) --- linux-2.6.32.orig/arch/x86/mm/setup_nx.c +++ linux-2.6.32/arch/x86/mm/setup_nx.c @@ -53,6 +53,7 @@ #else void set_nx(void) { + nx_enabled = _PAGE_NX && ((__supported_pte_mask & _PAGE_NX) == _PAGE_NX); } #endif --- linux-2.6.32.orig/arch/x86/power/hibernate_asm_32.S +++ linux-2.6.32/arch/x86/power/hibernate_asm_32.S @@ -27,10 +27,17 @@ ret ENTRY(restore_image) + movl mmu_cr4_features, %ecx movl resume_pg_dir, %eax subl $__PAGE_OFFSET, %eax movl %eax, %cr3 + jecxz 1f # cr4 Pentium and higher, skip if zero + andl $~(X86_CR4_PGE), %ecx + movl %ecx, %cr4; # turn off PGE + movl %cr3, %eax; # flush TLB + movl %eax, %cr3 +1: movl restore_pblist, %edx .p2align 4,,7 @@ -54,16 +61,8 @@ movl $swapper_pg_dir, %eax subl $__PAGE_OFFSET, %eax movl %eax, %cr3 - /* Flush TLB, including "global" things (vmalloc) */ movl mmu_cr4_features, %ecx jecxz 1f # cr4 Pentium and higher, skip if zero - movl %ecx, %edx - andl $~(X86_CR4_PGE), %edx - movl %edx, %cr4; # turn off PGE -1: - movl %cr3, %eax; # flush TLB - movl %eax, %cr3 - jecxz 1f # cr4 Pentium and higher, skip if zero movl %ecx, %cr4; # turn PGE back on 1: --- linux-2.6.32.orig/arch/x86/xen/mmu.c +++ linux-2.6.32/arch/x86/xen/mmu.c @@ -185,7 +185,7 @@ } /* Build the parallel p2m_top_mfn structures */ -static void __init xen_build_mfn_list_list(void) +void xen_build_mfn_list_list(void) { unsigned pfn, idx; @@ -1432,14 +1432,15 @@ { pgprot_t prot = PAGE_KERNEL; + /* + * We disable highmem allocations for page tables so we should never + * see any calls to kmap_atomic_pte on a highmem page. + */ + BUG_ON(PageHighMem(page)); + if (PagePinned(page)) prot = PAGE_KERNEL_RO; - if (0 && PageHighMem(page)) - printk("mapping highpte %lx type %d prot %s\n", - page_to_pfn(page), type, - (unsigned long)pgprot_val(prot) & _PAGE_RW ? "WRITE" : "READ"); - return kmap_atomic_prot(page, type, prot); } #endif --- linux-2.6.32.orig/arch/x86/xen/xen-ops.h +++ linux-2.6.32/arch/x86/xen/xen-ops.h @@ -25,6 +25,7 @@ void xen_setup_mfn_list_list(void); void xen_setup_shared_info(void); +void xen_build_mfn_list_list(void); void xen_setup_machphys_mapping(void); pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn); void xen_ident_map_ISA(void); @@ -41,6 +42,7 @@ void xen_init_irq_ops(void); void xen_setup_timer(int cpu); +void xen_setup_runstate_info(int cpu); void xen_teardown_timer(int cpu); cycle_t xen_clocksource_read(void); void xen_setup_cpu_clockevents(void); --- linux-2.6.32.orig/arch/x86/xen/suspend.c +++ linux-2.6.32/arch/x86/xen/suspend.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -27,6 +28,8 @@ void xen_post_suspend(int suspend_cancelled) { + xen_build_mfn_list_list(); + xen_setup_shared_info(); if (suspend_cancelled) { @@ -44,7 +47,19 @@ } +static void xen_vcpu_notify_restore(void *data) +{ + unsigned long reason = (unsigned long)data; + + /* Boot processor notified via generic timekeeping_resume() */ + if ( smp_processor_id() == 0) + return; + + clockevents_notify(reason, NULL); +} + void xen_arch_resume(void) { - /* nothing */ + smp_call_function(xen_vcpu_notify_restore, + (void *)CLOCK_EVT_NOTIFY_RESUME, 1); } --- linux-2.6.32.orig/arch/x86/xen/smp.c +++ linux-2.6.32/arch/x86/xen/smp.c @@ -295,6 +295,7 @@ (unsigned long)task_stack_page(idle) - KERNEL_STACK_OFFSET + THREAD_SIZE; #endif + xen_setup_runstate_info(cpu); xen_setup_timer(cpu); xen_init_lock_cpu(cpu); --- linux-2.6.32.orig/arch/x86/xen/enlighten.c +++ linux-2.6.32/arch/x86/xen/enlighten.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -138,24 +139,23 @@ */ void xen_vcpu_restore(void) { - if (have_vcpu_info_placement) { - int cpu; + int cpu; - for_each_online_cpu(cpu) { - bool other_cpu = (cpu != smp_processor_id()); + for_each_online_cpu(cpu) { + bool other_cpu = (cpu != smp_processor_id()); - if (other_cpu && - HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL)) - BUG(); + if (other_cpu && + HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL)) + BUG(); - xen_vcpu_setup(cpu); + xen_setup_runstate_info(cpu); - if (other_cpu && - HYPERVISOR_vcpu_op(VCPUOP_up, cpu, NULL)) - BUG(); - } + if (have_vcpu_info_placement) + xen_vcpu_setup(cpu); - BUG_ON(!have_vcpu_info_placement); + if (other_cpu && + HYPERVISOR_vcpu_op(VCPUOP_up, cpu, NULL)) + BUG(); } } @@ -332,6 +332,24 @@ xen_mc_issue(PARAVIRT_LAZY_CPU); } +#ifdef CONFIG_X86_32 +static void xen_load_user_cs_desc(int cpu, struct mm_struct *mm) +{ + void *gdt; + xmaddr_t mgdt; + u64 descriptor; + struct desc_struct user_cs; + + gdt = &get_cpu_gdt_table(cpu)[GDT_ENTRY_DEFAULT_USER_CS]; + mgdt = virt_to_machine(gdt); + + user_cs = mm->context.user_cs; + descriptor = (u64) user_cs.a | ((u64) user_cs.b) << 32; + + HYPERVISOR_update_descriptor(mgdt.maddr, descriptor); +} +#endif /*CONFIG_X86_32*/ + static void xen_load_gdt(const struct desc_ptr *dtr) { unsigned long va = dtr->address; @@ -958,6 +976,9 @@ .load_tr_desc = paravirt_nop, .set_ldt = xen_set_ldt, +#ifdef CONFIG_X86_32 + .load_user_cs_desc = xen_load_user_cs_desc, +#endif /*CONFIG_X86_32*/ .load_gdt = xen_load_gdt, .load_idt = xen_load_idt, .load_tls = xen_load_tls, @@ -1093,6 +1114,12 @@ __supported_pte_mask |= _PAGE_IOMAP; + /* + * Prevent page tables from being allocated in highmem, even + * if CONFIG_HIGHPTE is enabled. + */ + __userpte_alloc_gfp &= ~__GFP_HIGHMEM; + #ifdef CONFIG_X86_64 /* Work out if we support NX */ check_efer(); @@ -1182,6 +1209,8 @@ xen_raw_console_write("about to get started...\n"); + xen_setup_runstate_info(0); + /* Start the world */ #ifdef CONFIG_X86_32 i386_start_kernel(); --- linux-2.6.32.orig/arch/x86/xen/time.c +++ linux-2.6.32/arch/x86/xen/time.c @@ -100,7 +100,7 @@ return per_cpu(runstate, vcpu).state == RUNSTATE_runnable; } -static void setup_runstate_info(int cpu) +void xen_setup_runstate_info(int cpu) { struct vcpu_register_runstate_memory_area area; @@ -434,7 +434,7 @@ name = ""; irq = bind_virq_to_irqhandler(VIRQ_TIMER, cpu, xen_timer_interrupt, - IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING, + IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING|IRQF_TIMER, name, NULL); evt = &per_cpu(xen_clock_events, cpu); @@ -442,8 +442,6 @@ evt->cpumask = cpumask_of(cpu); evt->irq = irq; - - setup_runstate_info(cpu); } void xen_teardown_timer(int cpu) @@ -494,6 +492,7 @@ setup_force_cpu_cap(X86_FEATURE_TSC); + xen_setup_runstate_info(cpu); xen_setup_timer(cpu); xen_setup_cpu_clockevents(); } --- linux-2.6.32.orig/arch/x86/xen/xen-asm_64.S +++ linux-2.6.32/arch/x86/xen/xen-asm_64.S @@ -96,7 +96,7 @@ pushq $__USER32_CS pushq %rcx - pushq $VGCF_in_syscall + pushq $0 1: jmp hypercall_iret ENDPATCH(xen_sysret32) RELOC(xen_sysret32, 1b+1) @@ -151,7 +151,7 @@ ENTRY(xen_sysenter_target) lea 16(%rsp), %rsp /* strip %rcx, %r11 */ mov $-ENOSYS, %rax - pushq $VGCF_in_syscall + pushq $0 jmp hypercall_iret ENDPROC(xen_syscall32_target) ENDPROC(xen_sysenter_target) --- linux-2.6.32.orig/arch/x86/crypto/ghash-clmulni-intel_asm.S +++ linux-2.6.32/arch/x86/crypto/ghash-clmulni-intel_asm.S @@ -0,0 +1,157 @@ +/* + * Accelerated GHASH implementation with Intel PCLMULQDQ-NI + * instructions. This file contains accelerated part of ghash + * implementation. More information about PCLMULQDQ can be found at: + * + * http://software.intel.com/en-us/articles/carry-less-multiplication-and-its-usage-for-computing-the-gcm-mode/ + * + * Copyright (c) 2009 Intel Corp. + * Author: Huang Ying + * Vinodh Gopal + * Erdinc Ozturk + * Deniz Karakoyunlu + * + * 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 + +.align 16 +.Lbswap_mask: + .octa 0x000102030405060708090a0b0c0d0e0f +.Lpoly: + .octa 0xc2000000000000000000000000000001 +.Ltwo_one: + .octa 0x00000001000000000000000000000001 + +#define DATA %xmm0 +#define SHASH %xmm1 +#define T1 %xmm2 +#define T2 %xmm3 +#define T3 %xmm4 +#define BSWAP %xmm5 +#define IN1 %xmm6 + +.text + +/* + * __clmul_gf128mul_ble: internal ABI + * input: + * DATA: operand1 + * SHASH: operand2, hash_key << 1 mod poly + * output: + * DATA: operand1 * operand2 mod poly + * changed: + * T1 + * T2 + * T3 + */ +__clmul_gf128mul_ble: + movaps DATA, T1 + pshufd $0b01001110, DATA, T2 + pshufd $0b01001110, SHASH, T3 + pxor DATA, T2 + pxor SHASH, T3 + + # pclmulqdq $0x00, SHASH, DATA # DATA = a0 * b0 + .byte 0x66, 0x0f, 0x3a, 0x44, 0xc1, 0x00 + # pclmulqdq $0x11, SHASH, T1 # T1 = a1 * b1 + .byte 0x66, 0x0f, 0x3a, 0x44, 0xd1, 0x11 + # pclmulqdq $0x00, T3, T2 # T2 = (a1 + a0) * (b1 + b0) + .byte 0x66, 0x0f, 0x3a, 0x44, 0xdc, 0x00 + pxor DATA, T2 + pxor T1, T2 # T2 = a0 * b1 + a1 * b0 + + movaps T2, T3 + pslldq $8, T3 + psrldq $8, T2 + pxor T3, DATA + pxor T2, T1 # is result of + # carry-less multiplication + + # first phase of the reduction + movaps DATA, T3 + psllq $1, T3 + pxor DATA, T3 + psllq $5, T3 + pxor DATA, T3 + psllq $57, T3 + movaps T3, T2 + pslldq $8, T2 + psrldq $8, T3 + pxor T2, DATA + pxor T3, T1 + + # second phase of the reduction + movaps DATA, T2 + psrlq $5, T2 + pxor DATA, T2 + psrlq $1, T2 + pxor DATA, T2 + psrlq $1, T2 + pxor T2, T1 + pxor T1, DATA + ret + +/* void clmul_ghash_mul(char *dst, const be128 *shash) */ +ENTRY(clmul_ghash_mul) + movups (%rdi), DATA + movups (%rsi), SHASH + movaps .Lbswap_mask, BSWAP + pshufb BSWAP, DATA + call __clmul_gf128mul_ble + pshufb BSWAP, DATA + movups DATA, (%rdi) + ret + +/* + * void clmul_ghash_update(char *dst, const char *src, unsigned int srclen, + * const be128 *shash); + */ +ENTRY(clmul_ghash_update) + cmp $16, %rdx + jb .Lupdate_just_ret # check length + movaps .Lbswap_mask, BSWAP + movups (%rdi), DATA + movups (%rcx), SHASH + pshufb BSWAP, DATA +.align 4 +.Lupdate_loop: + movups (%rsi), IN1 + pshufb BSWAP, IN1 + pxor IN1, DATA + call __clmul_gf128mul_ble + sub $16, %rdx + add $16, %rsi + cmp $16, %rdx + jge .Lupdate_loop + pshufb BSWAP, DATA + movups DATA, (%rdi) +.Lupdate_just_ret: + ret + +/* + * void clmul_ghash_setkey(be128 *shash, const u8 *key); + * + * Calculate hash_key << 1 mod poly + */ +ENTRY(clmul_ghash_setkey) + movaps .Lbswap_mask, BSWAP + movups (%rsi), %xmm0 + pshufb BSWAP, %xmm0 + movaps %xmm0, %xmm1 + psllq $1, %xmm0 + psrlq $63, %xmm1 + movaps %xmm1, %xmm2 + pslldq $8, %xmm1 + psrldq $8, %xmm2 + por %xmm1, %xmm0 + # reduction + pshufd $0b00100100, %xmm2, %xmm1 + pcmpeqd .Ltwo_one, %xmm1 + pand .Lpoly, %xmm1 + pxor %xmm1, %xmm0 + movups %xmm0, (%rdi) + ret --- linux-2.6.32.orig/arch/x86/crypto/ghash-clmulni-intel_glue.c +++ linux-2.6.32/arch/x86/crypto/ghash-clmulni-intel_glue.c @@ -0,0 +1,333 @@ +/* + * Accelerated GHASH implementation with Intel PCLMULQDQ-NI + * instructions. This file contains glue code. + * + * Copyright (c) 2009 Intel Corp. + * Author: Huang Ying + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GHASH_BLOCK_SIZE 16 +#define GHASH_DIGEST_SIZE 16 + +void clmul_ghash_mul(char *dst, const be128 *shash); + +void clmul_ghash_update(char *dst, const char *src, unsigned int srclen, + const be128 *shash); + +void clmul_ghash_setkey(be128 *shash, const u8 *key); + +struct ghash_async_ctx { + struct cryptd_ahash *cryptd_tfm; +}; + +struct ghash_ctx { + be128 shash; +}; + +struct ghash_desc_ctx { + u8 buffer[GHASH_BLOCK_SIZE]; + u32 bytes; +}; + +static int ghash_init(struct shash_desc *desc) +{ + struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); + + memset(dctx, 0, sizeof(*dctx)); + + return 0; +} + +static int ghash_setkey(struct crypto_shash *tfm, + const u8 *key, unsigned int keylen) +{ + struct ghash_ctx *ctx = crypto_shash_ctx(tfm); + + if (keylen != GHASH_BLOCK_SIZE) { + crypto_shash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN); + return -EINVAL; + } + + clmul_ghash_setkey(&ctx->shash, key); + + return 0; +} + +static int ghash_update(struct shash_desc *desc, + const u8 *src, unsigned int srclen) +{ + struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); + struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); + u8 *dst = dctx->buffer; + + kernel_fpu_begin(); + if (dctx->bytes) { + int n = min(srclen, dctx->bytes); + u8 *pos = dst + (GHASH_BLOCK_SIZE - dctx->bytes); + + dctx->bytes -= n; + srclen -= n; + + while (n--) + *pos++ ^= *src++; + + if (!dctx->bytes) + clmul_ghash_mul(dst, &ctx->shash); + } + + clmul_ghash_update(dst, src, srclen, &ctx->shash); + kernel_fpu_end(); + + if (srclen & 0xf) { + src += srclen - (srclen & 0xf); + srclen &= 0xf; + dctx->bytes = GHASH_BLOCK_SIZE - srclen; + while (srclen--) + *dst++ ^= *src++; + } + + return 0; +} + +static void ghash_flush(struct ghash_ctx *ctx, struct ghash_desc_ctx *dctx) +{ + u8 *dst = dctx->buffer; + + if (dctx->bytes) { + u8 *tmp = dst + (GHASH_BLOCK_SIZE - dctx->bytes); + + while (dctx->bytes--) + *tmp++ ^= 0; + + kernel_fpu_begin(); + clmul_ghash_mul(dst, &ctx->shash); + kernel_fpu_end(); + } + + dctx->bytes = 0; +} + +static int ghash_final(struct shash_desc *desc, u8 *dst) +{ + struct ghash_desc_ctx *dctx = shash_desc_ctx(desc); + struct ghash_ctx *ctx = crypto_shash_ctx(desc->tfm); + u8 *buf = dctx->buffer; + + ghash_flush(ctx, dctx); + memcpy(dst, buf, GHASH_BLOCK_SIZE); + + return 0; +} + +static struct shash_alg ghash_alg = { + .digestsize = GHASH_DIGEST_SIZE, + .init = ghash_init, + .update = ghash_update, + .final = ghash_final, + .setkey = ghash_setkey, + .descsize = sizeof(struct ghash_desc_ctx), + .base = { + .cra_name = "__ghash", + .cra_driver_name = "__ghash-pclmulqdqni", + .cra_priority = 0, + .cra_flags = CRYPTO_ALG_TYPE_SHASH, + .cra_blocksize = GHASH_BLOCK_SIZE, + .cra_ctxsize = sizeof(struct ghash_ctx), + .cra_module = THIS_MODULE, + .cra_list = LIST_HEAD_INIT(ghash_alg.base.cra_list), + }, +}; + +static int ghash_async_init(struct ahash_request *req) +{ + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm); + struct ahash_request *cryptd_req = ahash_request_ctx(req); + struct cryptd_ahash *cryptd_tfm = ctx->cryptd_tfm; + + if (irq_fpu_usable()) { + memcpy(cryptd_req, req, sizeof(*req)); + ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base); + return crypto_ahash_init(cryptd_req); + } else { + struct shash_desc *desc = cryptd_shash_desc(cryptd_req); + struct crypto_shash *child = cryptd_ahash_child(cryptd_tfm); + + desc->tfm = child; + desc->flags = req->base.flags; + return crypto_shash_init(desc); + } +} + +static int ghash_async_update(struct ahash_request *req) +{ + struct ahash_request *cryptd_req = ahash_request_ctx(req); + + if (irq_fpu_usable()) { + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm); + struct cryptd_ahash *cryptd_tfm = ctx->cryptd_tfm; + + memcpy(cryptd_req, req, sizeof(*req)); + ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base); + return crypto_ahash_update(cryptd_req); + } else { + struct shash_desc *desc = cryptd_shash_desc(cryptd_req); + return shash_ahash_update(req, desc); + } +} + +static int ghash_async_final(struct ahash_request *req) +{ + struct ahash_request *cryptd_req = ahash_request_ctx(req); + + if (irq_fpu_usable()) { + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm); + struct cryptd_ahash *cryptd_tfm = ctx->cryptd_tfm; + + memcpy(cryptd_req, req, sizeof(*req)); + ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base); + return crypto_ahash_final(cryptd_req); + } else { + struct shash_desc *desc = cryptd_shash_desc(cryptd_req); + return crypto_shash_final(desc, req->result); + } +} + +static int ghash_async_digest(struct ahash_request *req) +{ + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); + struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm); + struct ahash_request *cryptd_req = ahash_request_ctx(req); + struct cryptd_ahash *cryptd_tfm = ctx->cryptd_tfm; + + if (irq_fpu_usable()) { + memcpy(cryptd_req, req, sizeof(*req)); + ahash_request_set_tfm(cryptd_req, &cryptd_tfm->base); + return crypto_ahash_digest(cryptd_req); + } else { + struct shash_desc *desc = cryptd_shash_desc(cryptd_req); + struct crypto_shash *child = cryptd_ahash_child(cryptd_tfm); + + desc->tfm = child; + desc->flags = req->base.flags; + return shash_ahash_digest(req, desc); + } +} + +static int ghash_async_setkey(struct crypto_ahash *tfm, const u8 *key, + unsigned int keylen) +{ + struct ghash_async_ctx *ctx = crypto_ahash_ctx(tfm); + struct crypto_ahash *child = &ctx->cryptd_tfm->base; + int err; + + crypto_ahash_clear_flags(child, CRYPTO_TFM_REQ_MASK); + crypto_ahash_set_flags(child, crypto_ahash_get_flags(tfm) + & CRYPTO_TFM_REQ_MASK); + err = crypto_ahash_setkey(child, key, keylen); + crypto_ahash_set_flags(tfm, crypto_ahash_get_flags(child) + & CRYPTO_TFM_RES_MASK); + + return 0; +} + +static int ghash_async_init_tfm(struct crypto_tfm *tfm) +{ + struct cryptd_ahash *cryptd_tfm; + struct ghash_async_ctx *ctx = crypto_tfm_ctx(tfm); + + cryptd_tfm = cryptd_alloc_ahash("__ghash-pclmulqdqni", 0, 0); + if (IS_ERR(cryptd_tfm)) + return PTR_ERR(cryptd_tfm); + ctx->cryptd_tfm = cryptd_tfm; + crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm), + sizeof(struct ahash_request) + + crypto_ahash_reqsize(&cryptd_tfm->base)); + + return 0; +} + +static void ghash_async_exit_tfm(struct crypto_tfm *tfm) +{ + struct ghash_async_ctx *ctx = crypto_tfm_ctx(tfm); + + cryptd_free_ahash(ctx->cryptd_tfm); +} + +static struct ahash_alg ghash_async_alg = { + .init = ghash_async_init, + .update = ghash_async_update, + .final = ghash_async_final, + .setkey = ghash_async_setkey, + .digest = ghash_async_digest, + .halg = { + .digestsize = GHASH_DIGEST_SIZE, + .base = { + .cra_name = "ghash", + .cra_driver_name = "ghash-clmulni", + .cra_priority = 400, + .cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_ASYNC, + .cra_blocksize = GHASH_BLOCK_SIZE, + .cra_type = &crypto_ahash_type, + .cra_module = THIS_MODULE, + .cra_list = LIST_HEAD_INIT(ghash_async_alg.halg.base.cra_list), + .cra_init = ghash_async_init_tfm, + .cra_exit = ghash_async_exit_tfm, + }, + }, +}; + +static int __init ghash_pclmulqdqni_mod_init(void) +{ + int err; + + if (!cpu_has_pclmulqdq) { + printk(KERN_INFO "Intel PCLMULQDQ-NI instructions are not" + " detected.\n"); + return -ENODEV; + } + + err = crypto_register_shash(&ghash_alg); + if (err) + goto err_out; + err = crypto_register_ahash(&ghash_async_alg); + if (err) + goto err_shash; + + return 0; + +err_shash: + crypto_unregister_shash(&ghash_alg); +err_out: + return err; +} + +static void __exit ghash_pclmulqdqni_mod_exit(void) +{ + crypto_unregister_ahash(&ghash_async_alg); + crypto_unregister_shash(&ghash_alg); +} + +module_init(ghash_pclmulqdqni_mod_init); +module_exit(ghash_pclmulqdqni_mod_exit); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("GHASH Message Digest Algorithm, " + "acclerated by PCLMULQDQ-NI"); +MODULE_ALIAS("ghash"); --- linux-2.6.32.orig/arch/x86/crypto/Makefile +++ linux-2.6.32/arch/x86/crypto/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o obj-$(CONFIG_CRYPTO_SALSA20_X86_64) += salsa20-x86_64.o obj-$(CONFIG_CRYPTO_AES_NI_INTEL) += aesni-intel.o +obj-$(CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL) += ghash-clmulni-intel.o obj-$(CONFIG_CRYPTO_CRC32C_INTEL) += crc32c-intel.o @@ -24,3 +25,5 @@ salsa20-x86_64-y := salsa20-x86_64-asm_64.o salsa20_glue.o aesni-intel-y := aesni-intel_asm.o aesni-intel_glue.o + +ghash-clmulni-intel-y := ghash-clmulni-intel_asm.o ghash-clmulni-intel_glue.o --- linux-2.6.32.orig/arch/x86/kvm/x86.c +++ linux-2.6.32/arch/x86/kvm/x86.c @@ -297,21 +297,16 @@ void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) { if (cr0 & CR0_RESERVED_BITS) { - printk(KERN_DEBUG "set_cr0: 0x%lx #GP, reserved bits 0x%lx\n", - cr0, vcpu->arch.cr0); kvm_inject_gp(vcpu, 0); return; } if ((cr0 & X86_CR0_NW) && !(cr0 & X86_CR0_CD)) { - printk(KERN_DEBUG "set_cr0: #GP, CD == 0 && NW == 1\n"); kvm_inject_gp(vcpu, 0); return; } if ((cr0 & X86_CR0_PG) && !(cr0 & X86_CR0_PE)) { - printk(KERN_DEBUG "set_cr0: #GP, set PG flag " - "and a clear PE flag\n"); kvm_inject_gp(vcpu, 0); return; } @@ -322,15 +317,11 @@ int cs_db, cs_l; if (!is_pae(vcpu)) { - printk(KERN_DEBUG "set_cr0: #GP, start paging " - "in long mode while PAE is disabled\n"); kvm_inject_gp(vcpu, 0); return; } kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l); if (cs_l) { - printk(KERN_DEBUG "set_cr0: #GP, start paging " - "in long mode while CS.L == 1\n"); kvm_inject_gp(vcpu, 0); return; @@ -338,8 +329,6 @@ } else #endif if (is_pae(vcpu) && !load_pdptrs(vcpu, vcpu->arch.cr3)) { - printk(KERN_DEBUG "set_cr0: #GP, pdptrs " - "reserved bits\n"); kvm_inject_gp(vcpu, 0); return; } @@ -366,28 +355,23 @@ unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE; if (cr4 & CR4_RESERVED_BITS) { - printk(KERN_DEBUG "set_cr4: #GP, reserved bits\n"); kvm_inject_gp(vcpu, 0); return; } if (is_long_mode(vcpu)) { if (!(cr4 & X86_CR4_PAE)) { - printk(KERN_DEBUG "set_cr4: #GP, clearing PAE while " - "in long mode\n"); kvm_inject_gp(vcpu, 0); return; } } else if (is_paging(vcpu) && (cr4 & X86_CR4_PAE) && ((cr4 ^ old_cr4) & pdptr_bits) && !load_pdptrs(vcpu, vcpu->arch.cr3)) { - printk(KERN_DEBUG "set_cr4: #GP, pdptrs reserved bits\n"); kvm_inject_gp(vcpu, 0); return; } if (cr4 & X86_CR4_VMXE) { - printk(KERN_DEBUG "set_cr4: #GP, setting VMXE\n"); kvm_inject_gp(vcpu, 0); return; } @@ -408,21 +392,16 @@ if (is_long_mode(vcpu)) { if (cr3 & CR3_L_MODE_RESERVED_BITS) { - printk(KERN_DEBUG "set_cr3: #GP, reserved bits\n"); kvm_inject_gp(vcpu, 0); return; } } else { if (is_pae(vcpu)) { if (cr3 & CR3_PAE_RESERVED_BITS) { - printk(KERN_DEBUG - "set_cr3: #GP, reserved bits\n"); kvm_inject_gp(vcpu, 0); return; } if (is_paging(vcpu) && !load_pdptrs(vcpu, cr3)) { - printk(KERN_DEBUG "set_cr3: #GP, pdptrs " - "reserved bits\n"); kvm_inject_gp(vcpu, 0); return; } @@ -454,7 +433,6 @@ void kvm_set_cr8(struct kvm_vcpu *vcpu, unsigned long cr8) { if (cr8 & CR8_RESERVED_BITS) { - printk(KERN_DEBUG "set_cr8: #GP, reserved bits 0x%lx\n", cr8); kvm_inject_gp(vcpu, 0); return; } @@ -484,16 +462,19 @@ * and KVM_SET_MSRS, and KVM_GET_MSR_INDEX_LIST. * * This list is modified at module load time to reflect the - * capabilities of the host cpu. + * capabilities of the host cpu. This capabilities test skips MSRs that are + * kvm-specific. Those are put in the beginning of the list. */ + +#define KVM_SAVE_MSRS_BEGIN 2 static u32 msrs_to_save[] = { + MSR_KVM_SYSTEM_TIME, MSR_KVM_WALL_CLOCK, MSR_IA32_SYSENTER_CS, MSR_IA32_SYSENTER_ESP, MSR_IA32_SYSENTER_EIP, MSR_K6_STAR, #ifdef CONFIG_X86_64 MSR_CSTAR, MSR_KERNEL_GS_BASE, MSR_SYSCALL_MASK, MSR_LSTAR, #endif - MSR_IA32_TSC, MSR_KVM_SYSTEM_TIME, MSR_KVM_WALL_CLOCK, - MSR_IA32_PERF_STATUS, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA + MSR_IA32_TSC, MSR_IA32_PERF_STATUS, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA }; static unsigned num_msrs_to_save; @@ -505,15 +486,12 @@ static void set_efer(struct kvm_vcpu *vcpu, u64 efer) { if (efer & efer_reserved_bits) { - printk(KERN_DEBUG "set_efer: 0x%llx #GP, reserved bits\n", - efer); kvm_inject_gp(vcpu, 0); return; } if (is_paging(vcpu) && (vcpu->arch.shadow_efer & EFER_LME) != (efer & EFER_LME)) { - printk(KERN_DEBUG "set_efer: #GP, change LME while paging\n"); kvm_inject_gp(vcpu, 0); return; } @@ -523,7 +501,6 @@ feat = kvm_find_cpuid_entry(vcpu, 0x80000001, 0); if (!feat || !(feat->edx & bit(X86_FEATURE_FXSR_OPT))) { - printk(KERN_DEBUG "set_efer: #GP, enable FFXSR w/o CPUID capability\n"); kvm_inject_gp(vcpu, 0); return; } @@ -534,7 +511,6 @@ feat = kvm_find_cpuid_entry(vcpu, 0x80000001, 0); if (!feat || !(feat->ecx & bit(X86_FEATURE_SVM))) { - printk(KERN_DEBUG "set_efer: #GP, enable SVM w/o SVM\n"); kvm_inject_gp(vcpu, 0); return; } @@ -580,7 +556,7 @@ { static int version; struct pvclock_wall_clock wc; - struct timespec now, sys, boot; + struct timespec boot; if (!wall_clock) return; @@ -595,9 +571,7 @@ * wall clock specified here. guest system time equals host * system time for us, thus we must fill in host boot time here. */ - now = current_kernel_time(); - ktime_get_ts(&sys); - boot = ns_to_timespec(timespec_to_ns(&now) - timespec_to_ns(&sys)); + getboottime(&boot); wc.sec = boot.tv_sec; wc.nsec = boot.tv_nsec; @@ -672,12 +646,14 @@ local_irq_save(flags); kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp); ktime_get_ts(&ts); + monotonic_to_bootbased(&ts); local_irq_restore(flags); /* With all the info we got, fill in the values */ vcpu->hv_clock.system_time = ts.tv_nsec + - (NSEC_PER_SEC * (u64)ts.tv_sec); + (NSEC_PER_SEC * (u64)ts.tv_sec) + v->kvm->arch.kvmclock_offset; + /* * The interface expects us to write an even number signaling that the * update is finished. Since the guest won't see the intermediate @@ -823,9 +799,13 @@ if (msr >= MSR_IA32_MC0_CTL && msr < MSR_IA32_MC0_CTL + 4 * bank_num) { u32 offset = msr - MSR_IA32_MC0_CTL; - /* only 0 or all 1s can be written to IA32_MCi_CTL */ + /* only 0 or all 1s can be written to IA32_MCi_CTL + * some Linux kernels though clear bit 10 in bank 4 to + * workaround a BIOS/GART TBL issue on AMD K8s, ignore + * this to avoid an uncatched #GP in the guest + */ if ((offset & 0x3) == 0 && - data != 0 && data != ~(u64)0) + data != 0 && (data | (1 << 10)) != ~(u64)0) return -1; vcpu->arch.mce_banks[offset] = data; break; @@ -1224,6 +1204,7 @@ case KVM_CAP_PIT2: case KVM_CAP_PIT_STATE2: case KVM_CAP_SET_IDENTITY_MAP_ADDR: + case KVM_CAP_ADJUST_CLOCK: r = 1; break; case KVM_CAP_COALESCED_MMIO: @@ -1238,8 +1219,8 @@ case KVM_CAP_NR_MEMSLOTS: r = KVM_MEMORY_SLOTS; break; - case KVM_CAP_PV_MMU: - r = !tdp_enabled; + case KVM_CAP_PV_MMU: /* obsolete */ + r = 0; break; case KVM_CAP_IOMMU: r = iommu_found(); @@ -2152,7 +2133,7 @@ struct kvm_dirty_log *log) { int r; - int n; + unsigned long n; struct kvm_memory_slot *memslot; int is_dirty = 0; @@ -2168,7 +2149,7 @@ kvm_mmu_slot_remove_write_access(kvm, log->slot); spin_unlock(&kvm->mmu_lock); memslot = &kvm->memslots[log->slot]; - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8; + n = kvm_dirty_bitmap_bytes(memslot); memset(memslot->dirty_bitmap, 0, n); } r = 0; @@ -2421,6 +2402,44 @@ r = 0; break; } + case KVM_SET_CLOCK: { + struct timespec now; + struct kvm_clock_data user_ns; + u64 now_ns; + s64 delta; + + r = -EFAULT; + if (copy_from_user(&user_ns, argp, sizeof(user_ns))) + goto out; + + r = -EINVAL; + if (user_ns.flags) + goto out; + + r = 0; + ktime_get_ts(&now); + now_ns = timespec_to_ns(&now); + delta = user_ns.clock - now_ns; + kvm->arch.kvmclock_offset = delta; + break; + } + case KVM_GET_CLOCK: { + struct timespec now; + struct kvm_clock_data user_ns; + u64 now_ns; + + ktime_get_ts(&now); + now_ns = timespec_to_ns(&now); + user_ns.clock = kvm->arch.kvmclock_offset + now_ns; + user_ns.flags = 0; + + r = -EFAULT; + if (copy_to_user(argp, &user_ns, sizeof(user_ns))) + goto out; + r = 0; + break; + } + default: ; } @@ -2433,7 +2452,8 @@ u32 dummy[2]; unsigned i, j; - for (i = j = 0; i < ARRAY_SIZE(msrs_to_save); i++) { + /* skip the first msrs in the list. KVM-specific */ + for (i = j = KVM_SAVE_MSRS_BEGIN; i < ARRAY_SIZE(msrs_to_save); i++) { if (rdmsr_safe(msrs_to_save[i], &dummy[0], &dummy[1]) < 0) continue; if (j < i) @@ -2462,14 +2482,41 @@ return kvm_io_bus_read(&vcpu->kvm->mmio_bus, addr, len, v); } -static int kvm_read_guest_virt(gva_t addr, void *val, unsigned int bytes, - struct kvm_vcpu *vcpu) +gpa_t kvm_mmu_gva_to_gpa_read(struct kvm_vcpu *vcpu, gva_t gva, u32 *error) +{ + u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0; + return vcpu->arch.mmu.gva_to_gpa(vcpu, gva, access, error); +} + + gpa_t kvm_mmu_gva_to_gpa_fetch(struct kvm_vcpu *vcpu, gva_t gva, u32 *error) +{ + u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0; + access |= PFERR_FETCH_MASK; + return vcpu->arch.mmu.gva_to_gpa(vcpu, gva, access, error); +} + +gpa_t kvm_mmu_gva_to_gpa_write(struct kvm_vcpu *vcpu, gva_t gva, u32 *error) +{ + u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0; + access |= PFERR_WRITE_MASK; + return vcpu->arch.mmu.gva_to_gpa(vcpu, gva, access, error); +} + +/* uses this to access any guest's mapped memory without checking CPL */ +gpa_t kvm_mmu_gva_to_gpa_system(struct kvm_vcpu *vcpu, gva_t gva, u32 *error) +{ + return vcpu->arch.mmu.gva_to_gpa(vcpu, gva, 0, error); +} + +static int kvm_read_guest_virt_helper(gva_t addr, void *val, unsigned int bytes, + struct kvm_vcpu *vcpu, u32 access, + u32 *error) { void *data = val; int r = X86EMUL_CONTINUE; while (bytes) { - gpa_t gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, addr); + gpa_t gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, addr, access, error); unsigned offset = addr & (PAGE_SIZE-1); unsigned toread = min(bytes, (unsigned)PAGE_SIZE - offset); int ret; @@ -2492,14 +2539,37 @@ return r; } +/* used for instruction fetching */ +static int kvm_fetch_guest_virt(gva_t addr, void *val, unsigned int bytes, + struct kvm_vcpu *vcpu, u32 *error) +{ + u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0; + return kvm_read_guest_virt_helper(addr, val, bytes, vcpu, + access | PFERR_FETCH_MASK, error); +} + +static int kvm_read_guest_virt(gva_t addr, void *val, unsigned int bytes, + struct kvm_vcpu *vcpu, u32 *error) +{ + u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0; + return kvm_read_guest_virt_helper(addr, val, bytes, vcpu, access, + error); +} + +static int kvm_read_guest_virt_system(gva_t addr, void *val, unsigned int bytes, + struct kvm_vcpu *vcpu, u32 *error) +{ + return kvm_read_guest_virt_helper(addr, val, bytes, vcpu, 0, error); +} + static int kvm_write_guest_virt(gva_t addr, void *val, unsigned int bytes, - struct kvm_vcpu *vcpu) + struct kvm_vcpu *vcpu, u32 *error) { void *data = val; int r = X86EMUL_CONTINUE; while (bytes) { - gpa_t gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, addr); + gpa_t gpa = kvm_mmu_gva_to_gpa_write(vcpu, addr, error); unsigned offset = addr & (PAGE_SIZE-1); unsigned towrite = min(bytes, (unsigned)PAGE_SIZE - offset); int ret; @@ -2529,6 +2599,7 @@ struct kvm_vcpu *vcpu) { gpa_t gpa; + u32 error_code; if (vcpu->mmio_read_completed) { memcpy(val, vcpu->mmio_data, bytes); @@ -2538,17 +2609,20 @@ return X86EMUL_CONTINUE; } - gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, addr); + gpa = kvm_mmu_gva_to_gpa_read(vcpu, addr, &error_code); + + if (gpa == UNMAPPED_GVA) { + kvm_inject_page_fault(vcpu, addr, error_code); + return X86EMUL_PROPAGATE_FAULT; + } /* For APIC access vmexit */ if ((gpa & PAGE_MASK) == APIC_DEFAULT_PHYS_BASE) goto mmio; - if (kvm_read_guest_virt(addr, val, bytes, vcpu) + if (kvm_read_guest_virt(addr, val, bytes, vcpu, NULL) == X86EMUL_CONTINUE) return X86EMUL_CONTINUE; - if (gpa == UNMAPPED_GVA) - return X86EMUL_PROPAGATE_FAULT; mmio: /* @@ -2587,11 +2661,12 @@ struct kvm_vcpu *vcpu) { gpa_t gpa; + u32 error_code; - gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, addr); + gpa = kvm_mmu_gva_to_gpa_write(vcpu, addr, &error_code); if (gpa == UNMAPPED_GVA) { - kvm_inject_page_fault(vcpu, addr, 2); + kvm_inject_page_fault(vcpu, addr, error_code); return X86EMUL_PROPAGATE_FAULT; } @@ -2655,7 +2730,7 @@ char *kaddr; u64 val; - gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, addr); + gpa = kvm_mmu_gva_to_gpa_write(vcpu, addr, NULL); if (gpa == UNMAPPED_GVA || (gpa & PAGE_MASK) == APIC_DEFAULT_PHYS_BASE) @@ -2734,7 +2809,7 @@ rip_linear = rip + get_segment_base(vcpu, VCPU_SREG_CS); - kvm_read_guest_virt(rip_linear, (void *)opcodes, 4, vcpu); + kvm_read_guest_virt(rip_linear, (void *)opcodes, 4, vcpu, NULL); printk(KERN_ERR "emulation failed (%s) rip %lx %02x %02x %02x %02x\n", context, rip, opcodes[0], opcodes[1], opcodes[2], opcodes[3]); @@ -2742,7 +2817,8 @@ EXPORT_SYMBOL_GPL(kvm_report_emulation_failure); static struct x86_emulate_ops emulate_ops = { - .read_std = kvm_read_guest_virt, + .read_std = kvm_read_guest_virt_system, + .fetch = kvm_fetch_guest_virt, .read_emulated = emulator_read_emulated, .write_emulated = emulator_write_emulated, .cmpxchg_emulated = emulator_cmpxchg_emulated, @@ -2785,8 +2861,9 @@ vcpu->arch.emulate_ctxt.vcpu = vcpu; vcpu->arch.emulate_ctxt.eflags = kvm_x86_ops->get_rflags(vcpu); vcpu->arch.emulate_ctxt.mode = + (!(vcpu->arch.cr0 & X86_CR0_PE)) ? X86EMUL_MODE_REAL : (vcpu->arch.emulate_ctxt.eflags & X86_EFLAGS_VM) - ? X86EMUL_MODE_REAL : cs_l + ? X86EMUL_MODE_VM86 : cs_l ? X86EMUL_MODE_PROT64 : cs_db ? X86EMUL_MODE_PROT32 : X86EMUL_MODE_PROT16; @@ -2878,12 +2955,17 @@ gva_t q = vcpu->arch.pio.guest_gva; unsigned bytes; int ret; + u32 error_code; bytes = vcpu->arch.pio.size * vcpu->arch.pio.cur_count; if (vcpu->arch.pio.in) - ret = kvm_write_guest_virt(q, p, bytes, vcpu); + ret = kvm_write_guest_virt(q, p, bytes, vcpu, &error_code); else - ret = kvm_read_guest_virt(q, p, bytes, vcpu); + ret = kvm_read_guest_virt(q, p, bytes, vcpu, &error_code); + + if (ret == X86EMUL_PROPAGATE_FAULT) + kvm_inject_page_fault(vcpu, q, error_code); + return ret; } @@ -2904,7 +2986,7 @@ if (io->in) { r = pio_copy_data(vcpu); if (r) - return r; + goto out; } delta = 1; @@ -2931,7 +3013,7 @@ kvm_register_write(vcpu, VCPU_REGS_RSI, val); } } - +out: io->count -= io->cur_count; io->cur_count = 0; @@ -2974,6 +3056,8 @@ { unsigned long val; + trace_kvm_pio(!in, port, size, 1); + vcpu->run->exit_reason = KVM_EXIT_IO; vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT; vcpu->run->io.size = vcpu->arch.pio.size = size; @@ -2985,9 +3069,6 @@ vcpu->arch.pio.down = 0; vcpu->arch.pio.rep = 0; - trace_kvm_pio(vcpu->run->io.direction == KVM_EXIT_IO_OUT, port, - size, 1); - val = kvm_register_read(vcpu, VCPU_REGS_RAX); memcpy(vcpu->arch.pio_data, &val, 4); @@ -3006,6 +3087,8 @@ unsigned now, in_page; int ret = 0; + trace_kvm_pio(!in, port, size, count); + vcpu->run->exit_reason = KVM_EXIT_IO; vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT; vcpu->run->io.size = vcpu->arch.pio.size = size; @@ -3017,9 +3100,6 @@ vcpu->arch.pio.down = down; vcpu->arch.pio.rep = rep; - trace_kvm_pio(vcpu->run->io.direction == KVM_EXIT_IO_OUT, port, - size, count); - if (!count) { kvm_x86_ops->skip_emulated_instruction(vcpu); return 1; @@ -3051,10 +3131,8 @@ if (!vcpu->arch.pio.in) { /* string PIO write */ ret = pio_copy_data(vcpu); - if (ret == X86EMUL_PROPAGATE_FAULT) { - kvm_inject_gp(vcpu, 0); + if (ret == X86EMUL_PROPAGATE_FAULT) return 1; - } if (ret == 0 && !pio_string_write(vcpu)) { complete_pio(vcpu); if (vcpu->arch.pio.count == 0) @@ -4034,7 +4112,9 @@ kvm_queue_exception_e(vcpu, GP_VECTOR, selector & 0xfffc); return 1; } - return kvm_read_guest_virt(dtable.base + index*8, seg_desc, sizeof(*seg_desc), vcpu); + return kvm_read_guest_virt_system(dtable.base + index*8, + seg_desc, sizeof(*seg_desc), + vcpu, NULL); } /* allowed just for 8 bytes segments */ @@ -4048,15 +4128,23 @@ if (dtable.limit < index * 8 + 7) return 1; - return kvm_write_guest_virt(dtable.base + index*8, seg_desc, sizeof(*seg_desc), vcpu); + return kvm_write_guest_virt(dtable.base + index*8, seg_desc, sizeof(*seg_desc), vcpu, NULL); } -static gpa_t get_tss_base_addr(struct kvm_vcpu *vcpu, +static gpa_t get_tss_base_addr_write(struct kvm_vcpu *vcpu, + struct desc_struct *seg_desc) +{ + u32 base_addr = get_desc_base(seg_desc); + + return kvm_mmu_gva_to_gpa_write(vcpu, base_addr, NULL); +} + +static gpa_t get_tss_base_addr_read(struct kvm_vcpu *vcpu, struct desc_struct *seg_desc) { u32 base_addr = get_desc_base(seg_desc); - return vcpu->arch.mmu.gva_to_gpa(vcpu, base_addr); + return kvm_mmu_gva_to_gpa_read(vcpu, base_addr, NULL); } static u16 get_segment_selector(struct kvm_vcpu *vcpu, int seg) @@ -4067,18 +4155,6 @@ return kvm_seg.selector; } -static int load_segment_descriptor_to_kvm_desct(struct kvm_vcpu *vcpu, - u16 selector, - struct kvm_segment *kvm_seg) -{ - struct desc_struct seg_desc; - - if (load_guest_segment_descriptor(vcpu, selector, &seg_desc)) - return 1; - seg_desct_to_kvm_desct(&seg_desc, selector, kvm_seg); - return 0; -} - static int kvm_load_realmode_segment(struct kvm_vcpu *vcpu, u16 selector, int seg) { struct kvm_segment segvar = { @@ -4096,7 +4172,7 @@ .unusable = 0, }; kvm_x86_ops->set_segment(vcpu, &segvar, seg); - return 0; + return X86EMUL_CONTINUE; } static int is_vm86_segment(struct kvm_vcpu *vcpu, int seg) @@ -4106,24 +4182,113 @@ (kvm_x86_ops->get_rflags(vcpu) & X86_EFLAGS_VM); } -int kvm_load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, - int type_bits, int seg) +int kvm_load_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector, int seg) { struct kvm_segment kvm_seg; + struct desc_struct seg_desc; + u8 dpl, rpl, cpl; + unsigned err_vec = GP_VECTOR; + u32 err_code = 0; + bool null_selector = !(selector & ~0x3); /* 0000-0003 are null */ + int ret; if (is_vm86_segment(vcpu, seg) || !(vcpu->arch.cr0 & X86_CR0_PE)) return kvm_load_realmode_segment(vcpu, selector, seg); - if (load_segment_descriptor_to_kvm_desct(vcpu, selector, &kvm_seg)) - return 1; - kvm_seg.type |= type_bits; - if (seg != VCPU_SREG_SS && seg != VCPU_SREG_CS && - seg != VCPU_SREG_LDTR) - if (!kvm_seg.s) - kvm_seg.unusable = 1; + /* NULL selector is not valid for TR, CS and SS */ + if ((seg == VCPU_SREG_CS || seg == VCPU_SREG_SS || seg == VCPU_SREG_TR) + && null_selector) + goto exception; + + /* TR should be in GDT only */ + if (seg == VCPU_SREG_TR && (selector & (1 << 2))) + goto exception; + + ret = load_guest_segment_descriptor(vcpu, selector, &seg_desc); + if (ret) + return ret; + + seg_desct_to_kvm_desct(&seg_desc, selector, &kvm_seg); + + if (null_selector) { /* for NULL selector skip all following checks */ + kvm_seg.unusable = 1; + goto load; + } + + err_code = selector & 0xfffc; + err_vec = GP_VECTOR; + + /* can't load system descriptor into segment selecor */ + if (seg <= VCPU_SREG_GS && !kvm_seg.s) + goto exception; + + if (!kvm_seg.present) { + err_vec = (seg == VCPU_SREG_SS) ? SS_VECTOR : NP_VECTOR; + goto exception; + } + + rpl = selector & 3; + dpl = kvm_seg.dpl; + cpl = kvm_x86_ops->get_cpl(vcpu); + + switch (seg) { + case VCPU_SREG_SS: + /* + * segment is not a writable data segment or segment + * selector's RPL != CPL or segment selector's RPL != CPL + */ + if (rpl != cpl || (kvm_seg.type & 0xa) != 0x2 || dpl != cpl) + goto exception; + break; + case VCPU_SREG_CS: + if (!(kvm_seg.type & 8)) + goto exception; + + if (kvm_seg.type & 4) { + /* conforming */ + if (dpl > cpl) + goto exception; + } else { + /* nonconforming */ + if (rpl > cpl || dpl != cpl) + goto exception; + } + /* CS(RPL) <- CPL */ + selector = (selector & 0xfffc) | cpl; + break; + case VCPU_SREG_TR: + if (kvm_seg.s || (kvm_seg.type != 1 && kvm_seg.type != 9)) + goto exception; + break; + case VCPU_SREG_LDTR: + if (kvm_seg.s || kvm_seg.type != 2) + goto exception; + break; + default: /* DS, ES, FS, or GS */ + /* + * segment is not a data or readable code segment or + * ((segment is a data or nonconforming code segment) + * and (both RPL and CPL > DPL)) + */ + if ((kvm_seg.type & 0xa) == 0x8 || + (((kvm_seg.type & 0xc) != 0xc) && (rpl > dpl && cpl > dpl))) + goto exception; + break; + } + + if (!kvm_seg.unusable && kvm_seg.s) { + /* mark segment as accessed */ + kvm_seg.type |= 1; + seg_desc.type |= 1; + save_guest_segment_descriptor(vcpu, selector, &seg_desc); + } +load: kvm_set_segment(vcpu, &kvm_seg, seg); - return 0; + return X86EMUL_CONTINUE; +exception: + kvm_queue_exception_e(vcpu, err_vec, err_code); + return X86EMUL_PROPAGATE_FAULT; } static void save_state_to_tss32(struct kvm_vcpu *vcpu, @@ -4149,6 +4314,14 @@ tss->ldt_selector = get_segment_selector(vcpu, VCPU_SREG_LDTR); } +static void kvm_load_segment_selector(struct kvm_vcpu *vcpu, u16 sel, int seg) +{ + struct kvm_segment kvm_seg; + kvm_get_segment(vcpu, &kvm_seg, seg); + kvm_seg.selector = sel; + kvm_set_segment(vcpu, &kvm_seg, seg); +} + static int load_state_from_tss32(struct kvm_vcpu *vcpu, struct tss_segment_32 *tss) { @@ -4166,25 +4339,41 @@ kvm_register_write(vcpu, VCPU_REGS_RSI, tss->esi); kvm_register_write(vcpu, VCPU_REGS_RDI, tss->edi); - if (kvm_load_segment_descriptor(vcpu, tss->ldt_selector, 0, VCPU_SREG_LDTR)) + /* + * SDM says that segment selectors are loaded before segment + * descriptors + */ + kvm_load_segment_selector(vcpu, tss->ldt_selector, VCPU_SREG_LDTR); + kvm_load_segment_selector(vcpu, tss->es, VCPU_SREG_ES); + kvm_load_segment_selector(vcpu, tss->cs, VCPU_SREG_CS); + kvm_load_segment_selector(vcpu, tss->ss, VCPU_SREG_SS); + kvm_load_segment_selector(vcpu, tss->ds, VCPU_SREG_DS); + kvm_load_segment_selector(vcpu, tss->fs, VCPU_SREG_FS); + kvm_load_segment_selector(vcpu, tss->gs, VCPU_SREG_GS); + + /* + * Now load segment descriptors. If fault happenes at this stage + * it is handled in a context of new task + */ + if (kvm_load_segment_descriptor(vcpu, tss->ldt_selector, VCPU_SREG_LDTR)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->es, 1, VCPU_SREG_ES)) + if (kvm_load_segment_descriptor(vcpu, tss->es, VCPU_SREG_ES)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->cs, 9, VCPU_SREG_CS)) + if (kvm_load_segment_descriptor(vcpu, tss->cs, VCPU_SREG_CS)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->ss, 1, VCPU_SREG_SS)) + if (kvm_load_segment_descriptor(vcpu, tss->ss, VCPU_SREG_SS)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->ds, 1, VCPU_SREG_DS)) + if (kvm_load_segment_descriptor(vcpu, tss->ds, VCPU_SREG_DS)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->fs, 1, VCPU_SREG_FS)) + if (kvm_load_segment_descriptor(vcpu, tss->fs, VCPU_SREG_FS)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->gs, 1, VCPU_SREG_GS)) + if (kvm_load_segment_descriptor(vcpu, tss->gs, VCPU_SREG_GS)) return 1; return 0; } @@ -4225,19 +4414,33 @@ kvm_register_write(vcpu, VCPU_REGS_RSI, tss->si); kvm_register_write(vcpu, VCPU_REGS_RDI, tss->di); - if (kvm_load_segment_descriptor(vcpu, tss->ldt, 0, VCPU_SREG_LDTR)) + /* + * SDM says that segment selectors are loaded before segment + * descriptors + */ + kvm_load_segment_selector(vcpu, tss->ldt, VCPU_SREG_LDTR); + kvm_load_segment_selector(vcpu, tss->es, VCPU_SREG_ES); + kvm_load_segment_selector(vcpu, tss->cs, VCPU_SREG_CS); + kvm_load_segment_selector(vcpu, tss->ss, VCPU_SREG_SS); + kvm_load_segment_selector(vcpu, tss->ds, VCPU_SREG_DS); + + /* + * Now load segment descriptors. If fault happenes at this stage + * it is handled in a context of new task + */ + if (kvm_load_segment_descriptor(vcpu, tss->ldt, VCPU_SREG_LDTR)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->es, 1, VCPU_SREG_ES)) + if (kvm_load_segment_descriptor(vcpu, tss->es, VCPU_SREG_ES)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->cs, 9, VCPU_SREG_CS)) + if (kvm_load_segment_descriptor(vcpu, tss->cs, VCPU_SREG_CS)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->ss, 1, VCPU_SREG_SS)) + if (kvm_load_segment_descriptor(vcpu, tss->ss, VCPU_SREG_SS)) return 1; - if (kvm_load_segment_descriptor(vcpu, tss->ds, 1, VCPU_SREG_DS)) + if (kvm_load_segment_descriptor(vcpu, tss->ds, VCPU_SREG_DS)) return 1; return 0; } @@ -4259,7 +4462,7 @@ sizeof tss_segment_16)) goto out; - if (kvm_read_guest(vcpu->kvm, get_tss_base_addr(vcpu, nseg_desc), + if (kvm_read_guest(vcpu->kvm, get_tss_base_addr_read(vcpu, nseg_desc), &tss_segment_16, sizeof tss_segment_16)) goto out; @@ -4267,7 +4470,7 @@ tss_segment_16.prev_task_link = old_tss_sel; if (kvm_write_guest(vcpu->kvm, - get_tss_base_addr(vcpu, nseg_desc), + get_tss_base_addr_write(vcpu, nseg_desc), &tss_segment_16.prev_task_link, sizeof tss_segment_16.prev_task_link)) goto out; @@ -4298,7 +4501,7 @@ sizeof tss_segment_32)) goto out; - if (kvm_read_guest(vcpu->kvm, get_tss_base_addr(vcpu, nseg_desc), + if (kvm_read_guest(vcpu->kvm, get_tss_base_addr_read(vcpu, nseg_desc), &tss_segment_32, sizeof tss_segment_32)) goto out; @@ -4306,7 +4509,7 @@ tss_segment_32.prev_task_link = old_tss_sel; if (kvm_write_guest(vcpu->kvm, - get_tss_base_addr(vcpu, nseg_desc), + get_tss_base_addr_write(vcpu, nseg_desc), &tss_segment_32.prev_task_link, sizeof tss_segment_32.prev_task_link)) goto out; @@ -4328,8 +4531,9 @@ int ret = 0; u32 old_tss_base = get_segment_base(vcpu, VCPU_SREG_TR); u16 old_tss_sel = get_segment_selector(vcpu, VCPU_SREG_TR); + u32 desc_limit; - old_tss_base = vcpu->arch.mmu.gva_to_gpa(vcpu, old_tss_base); + old_tss_base = kvm_mmu_gva_to_gpa_write(vcpu, old_tss_base, NULL); /* FIXME: Handle errors. Failure to read either TSS or their * descriptors should generate a pagefault. @@ -4350,7 +4554,10 @@ } } - if (!nseg_desc.p || get_desc_limit(&nseg_desc) < 0x67) { + desc_limit = get_desc_limit(&nseg_desc); + if (!nseg_desc.p || + ((desc_limit < 0x67 && (nseg_desc.type & 8)) || + desc_limit < 0x2b)) { kvm_queue_exception_e(vcpu, TS_VECTOR, tss_selector & 0xfffc); return 1; } @@ -4538,7 +4745,7 @@ vcpu_load(vcpu); down_read(&vcpu->kvm->slots_lock); - gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, vaddr); + gpa = kvm_mmu_gva_to_gpa_system(vcpu, vaddr, NULL); up_read(&vcpu->kvm->slots_lock); tr->physical_address = gpa; tr->valid = gpa != UNMAPPED_GVA; @@ -4762,12 +4969,13 @@ GFP_KERNEL); if (!vcpu->arch.mce_banks) { r = -ENOMEM; - goto fail_mmu_destroy; + goto fail_free_lapic; } vcpu->arch.mcg_cap = KVM_MAX_MCE_BANKS; return 0; - +fail_free_lapic: + kvm_free_lapic(vcpu); fail_mmu_destroy: kvm_mmu_destroy(vcpu); fail_free_pio_data: @@ -4778,6 +4986,7 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) { + kfree(vcpu->arch.mce_banks); kvm_free_lapic(vcpu); down_read(&vcpu->kvm->slots_lock); kvm_mmu_destroy(vcpu); --- linux-2.6.32.orig/arch/x86/kvm/i8254.c +++ linux-2.6.32/arch/x86/kvm/i8254.c @@ -465,6 +465,9 @@ return -EOPNOTSUPP; addr &= KVM_PIT_CHANNEL_MASK; + if (addr == 3) + return 0; + s = &pit_state->channels[addr]; mutex_lock(&pit_state->lock); --- linux-2.6.32.orig/arch/x86/kvm/mmu.c +++ linux-2.6.32/arch/x86/kvm/mmu.c @@ -136,12 +136,6 @@ #define PT64_PERM_MASK (PT_PRESENT_MASK | PT_WRITABLE_MASK | PT_USER_MASK \ | PT64_NX_MASK) -#define PFERR_PRESENT_MASK (1U << 0) -#define PFERR_WRITE_MASK (1U << 1) -#define PFERR_USER_MASK (1U << 2) -#define PFERR_RSVD_MASK (1U << 3) -#define PFERR_FETCH_MASK (1U << 4) - #define PT_PDPE_LEVEL 3 #define PT_DIRECTORY_LEVEL 2 #define PT_PAGE_TABLE_LEVEL 1 @@ -477,7 +471,7 @@ addr = gfn_to_hva(kvm, gfn); if (kvm_is_error_hva(addr)) - return page_size; + return PT_PAGE_TABLE_LEVEL; down_read(¤t->mm->mmap_sem); vma = find_vma(current->mm, addr); @@ -515,11 +509,9 @@ if (host_level == PT_PAGE_TABLE_LEVEL) return host_level; - for (level = PT_DIRECTORY_LEVEL; level <= host_level; ++level) { - + for (level = PT_DIRECTORY_LEVEL; level <= host_level; ++level) if (has_wrprotected_page(vcpu->kvm, large_gfn, level)) break; - } return level - 1; } @@ -1504,8 +1496,8 @@ for_each_sp(pages, sp, parents, i) { kvm_mmu_zap_page(kvm, sp); mmu_pages_clear_parents(&parents); + zapped++; } - zapped += pages.nr; kvm_mmu_pages_init(parent, &parents, &pages); } @@ -1556,14 +1548,16 @@ */ if (used_pages > kvm_nr_mmu_pages) { - while (used_pages > kvm_nr_mmu_pages) { + while (used_pages > kvm_nr_mmu_pages && + !list_empty(&kvm->arch.active_mmu_pages)) { struct kvm_mmu_page *page; page = container_of(kvm->arch.active_mmu_pages.prev, struct kvm_mmu_page, link); - kvm_mmu_zap_page(kvm, page); + used_pages -= kvm_mmu_zap_page(kvm, page); used_pages--; } + kvm_nr_mmu_pages = used_pages; kvm->arch.n_free_mmu_pages = 0; } else @@ -1610,7 +1604,8 @@ && !sp->role.invalid) { pgprintk("%s: zap %lx %x\n", __func__, gfn, sp->role.word); - kvm_mmu_zap_page(kvm, sp); + if (kvm_mmu_zap_page(kvm, sp)) + nn = bucket->first; } } } @@ -1641,7 +1636,7 @@ { struct page *page; - gpa_t gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, gva); + gpa_t gpa = kvm_mmu_gva_to_gpa_read(vcpu, gva, NULL); if (gpa == UNMAPPED_GVA) return NULL; @@ -2164,8 +2159,11 @@ spin_unlock(&vcpu->kvm->mmu_lock); } -static gpa_t nonpaging_gva_to_gpa(struct kvm_vcpu *vcpu, gva_t vaddr) +static gpa_t nonpaging_gva_to_gpa(struct kvm_vcpu *vcpu, gva_t vaddr, + u32 access, u32 *error) { + if (error) + *error = 0; return vaddr; } @@ -2749,7 +2747,7 @@ if (tdp_enabled) return 0; - gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, gva); + gpa = kvm_mmu_gva_to_gpa_read(vcpu, gva, NULL); spin_lock(&vcpu->kvm->mmu_lock); r = kvm_mmu_unprotect_page(vcpu->kvm, gpa >> PAGE_SHIFT); @@ -3247,7 +3245,7 @@ if (is_shadow_present_pte(ent) && !is_last_spte(ent, level)) audit_mappings_page(vcpu, ent, va, level - 1); else { - gpa_t gpa = vcpu->arch.mmu.gva_to_gpa(vcpu, va); + gpa_t gpa = kvm_mmu_gva_to_gpa_read(vcpu, va, NULL); gfn_t gfn = gpa >> PAGE_SHIFT; pfn_t pfn = gfn_to_pfn(vcpu->kvm, gfn); hpa_t hpa = (hpa_t)pfn << PAGE_SHIFT; --- linux-2.6.32.orig/arch/x86/kvm/mmu.h +++ linux-2.6.32/arch/x86/kvm/mmu.h @@ -37,6 +37,12 @@ #define PT32_ROOT_LEVEL 2 #define PT32E_ROOT_LEVEL 3 +#define PFERR_PRESENT_MASK (1U << 0) +#define PFERR_WRITE_MASK (1U << 1) +#define PFERR_USER_MASK (1U << 2) +#define PFERR_RSVD_MASK (1U << 3) +#define PFERR_FETCH_MASK (1U << 4) + int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]); static inline void kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu) --- linux-2.6.32.orig/arch/x86/kvm/lapic.c +++ linux-2.6.32/arch/x86/kvm/lapic.c @@ -374,6 +374,12 @@ if (unlikely(!apic_enabled(apic))) break; + if (trig_mode) { + apic_debug("level trig mode for vector %d", vector); + apic_set_vector(vector, apic->regs + APIC_TMR); + } else + apic_clear_vector(vector, apic->regs + APIC_TMR); + result = !apic_test_and_set_irr(vector, apic); trace_kvm_apic_accept_irq(vcpu->vcpu_id, delivery_mode, trig_mode, vector, !result); @@ -384,11 +390,6 @@ break; } - if (trig_mode) { - apic_debug("level trig mode for vector %d", vector); - apic_set_vector(vector, apic->regs + APIC_TMR); - } else - apic_clear_vector(vector, apic->regs + APIC_TMR); kvm_vcpu_kick(vcpu); break; @@ -1156,6 +1157,7 @@ hrtimer_cancel(&apic->lapic_timer.timer); update_divide_count(apic); start_apic_timer(apic); + apic->irr_pending = true; } void __kvm_migrate_apic_timer(struct kvm_vcpu *vcpu) --- linux-2.6.32.orig/arch/x86/kvm/paging_tmpl.h +++ linux-2.6.32/arch/x86/kvm/paging_tmpl.h @@ -150,7 +150,9 @@ walker->table_gfn[walker->level - 1] = table_gfn; walker->pte_gpa[walker->level - 1] = pte_gpa; - kvm_read_guest(vcpu->kvm, pte_gpa, &pte, sizeof(pte)); + if (kvm_read_guest(vcpu->kvm, pte_gpa, &pte, sizeof(pte))) + goto not_present; + trace_kvm_mmu_paging_element(pte, walker->level); if (!is_present_gpte(pte)) @@ -455,8 +457,6 @@ static void FNAME(invlpg)(struct kvm_vcpu *vcpu, gva_t gva) { struct kvm_shadow_walk_iterator iterator; - pt_element_t gpte; - gpa_t pte_gpa = -1; int level; u64 *sptep; int need_flush = 0; @@ -471,10 +471,6 @@ if (level == PT_PAGE_TABLE_LEVEL || ((level == PT_DIRECTORY_LEVEL && is_large_pte(*sptep))) || ((level == PT_PDPE_LEVEL && is_large_pte(*sptep)))) { - struct kvm_mmu_page *sp = page_header(__pa(sptep)); - - pte_gpa = (sp->gfn << PAGE_SHIFT); - pte_gpa += (sptep - sp->spt) * sizeof(pt_element_t); if (is_shadow_present_pte(*sptep)) { rmap_remove(vcpu->kvm, sptep); @@ -493,32 +489,25 @@ if (need_flush) kvm_flush_remote_tlbs(vcpu->kvm); spin_unlock(&vcpu->kvm->mmu_lock); - - if (pte_gpa == -1) - return; - if (kvm_read_guest_atomic(vcpu->kvm, pte_gpa, &gpte, - sizeof(pt_element_t))) - return; - if (is_present_gpte(gpte) && (gpte & PT_ACCESSED_MASK)) { - if (mmu_topup_memory_caches(vcpu)) - return; - kvm_mmu_pte_write(vcpu, pte_gpa, (const u8 *)&gpte, - sizeof(pt_element_t), 0); - } } -static gpa_t FNAME(gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t vaddr) +static gpa_t FNAME(gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t vaddr, u32 access, + u32 *error) { struct guest_walker walker; gpa_t gpa = UNMAPPED_GVA; int r; - r = FNAME(walk_addr)(&walker, vcpu, vaddr, 0, 0, 0); + r = FNAME(walk_addr)(&walker, vcpu, vaddr, + !!(access & PFERR_WRITE_MASK), + !!(access & PFERR_USER_MASK), + !!(access & PFERR_FETCH_MASK)); if (r) { gpa = gfn_to_gpa(walker.gfn); gpa |= vaddr & ~PAGE_MASK; - } + } else if (error) + *error = walker.error_code; return gpa; } --- linux-2.6.32.orig/arch/x86/kvm/svm.c +++ linux-2.6.32/arch/x86/kvm/svm.c @@ -625,11 +625,12 @@ save->rip = 0x0000fff0; svm->vcpu.arch.regs[VCPU_REGS_RIP] = save->rip; - /* - * cr0 val on cpu init should be 0x60000010, we enable cpu - * cache by default. the orderly way is to enable cache in bios. + /* This is the guest-visible cr0 value. + * svm_set_cr0() sets PG and WP and clears NW and CD on save->cr0. */ - save->cr0 = 0x00000010 | X86_CR0_PG | X86_CR0_WP; + svm->vcpu.arch.cr0 = X86_CR0_NW | X86_CR0_CD | X86_CR0_ET; + kvm_set_cr0(&svm->vcpu, svm->vcpu.arch.cr0); + save->cr4 = X86_CR4_PAE; /* rdx = ?? */ @@ -693,29 +694,28 @@ if (err) goto free_svm; + err = -ENOMEM; page = alloc_page(GFP_KERNEL); - if (!page) { - err = -ENOMEM; + if (!page) goto uninit; - } - err = -ENOMEM; msrpm_pages = alloc_pages(GFP_KERNEL, MSRPM_ALLOC_ORDER); if (!msrpm_pages) - goto uninit; + goto free_page1; nested_msrpm_pages = alloc_pages(GFP_KERNEL, MSRPM_ALLOC_ORDER); if (!nested_msrpm_pages) - goto uninit; - - svm->msrpm = page_address(msrpm_pages); - svm_vcpu_init_msrpm(svm->msrpm); + goto free_page2; hsave_page = alloc_page(GFP_KERNEL); if (!hsave_page) - goto uninit; + goto free_page3; + svm->nested.hsave = page_address(hsave_page); + svm->msrpm = page_address(msrpm_pages); + svm_vcpu_init_msrpm(svm->msrpm); + svm->nested.msrpm = page_address(nested_msrpm_pages); svm->vmcb = page_address(page); @@ -732,6 +732,12 @@ return &svm->vcpu; +free_page3: + __free_pages(nested_msrpm_pages, MSRPM_ALLOC_ORDER); +free_page2: + __free_pages(msrpm_pages, MSRPM_ALLOC_ORDER); +free_page1: + __free_page(page); uninit: kvm_vcpu_uninit(&svm->vcpu); free_svm: --- linux-2.6.32.orig/arch/x86/kvm/vmx.c +++ linux-2.6.32/arch/x86/kvm/vmx.c @@ -61,6 +61,27 @@ static int __read_mostly emulate_invalid_guest_state = 0; module_param(emulate_invalid_guest_state, bool, S_IRUGO); +/* + * These 2 parameters are used to config the controls for Pause-Loop Exiting: + * ple_gap: upper bound on the amount of time between two successive + * executions of PAUSE in a loop. Also indicate if ple enabled. + * According to test, this time is usually small than 41 cycles. + * ple_window: upper bound on the amount of time a guest is allowed to execute + * in a PAUSE loop. Tests indicate that most spinlocks are held for + * less than 2^12 cycles + * Time is measured based on a counter that runs at the same rate as the TSC, + * refer SDM volume 3b section 21.6.13 & 22.1.3. + */ +#define KVM_VMX_DEFAULT_PLE_GAP 41 +#define KVM_VMX_DEFAULT_PLE_WINDOW 4096 +static int ple_gap = KVM_VMX_DEFAULT_PLE_GAP; +module_param(ple_gap, int, S_IRUGO); + +static int ple_window = KVM_VMX_DEFAULT_PLE_WINDOW; +module_param(ple_window, int, S_IRUGO); + +#define RMODE_GUEST_OWNED_EFLAGS_BITS (~(X86_EFLAGS_IOPL | X86_EFLAGS_VM)) + struct vmcs { u32 revision_id; u32 abort; @@ -92,7 +113,7 @@ } host_state; struct { int vm86_active; - u8 save_iopl; + ulong save_rflags; struct kvm_save_segment { u16 selector; unsigned long base; @@ -320,6 +341,12 @@ SECONDARY_EXEC_UNRESTRICTED_GUEST; } +static inline int cpu_has_vmx_ple(void) +{ + return vmcs_config.cpu_based_2nd_exec_ctrl & + SECONDARY_EXEC_PAUSE_LOOP_EXITING; +} + static inline int vm_need_virtualize_apic_accesses(struct kvm *kvm) { return flexpriority_enabled && @@ -783,18 +810,23 @@ static unsigned long vmx_get_rflags(struct kvm_vcpu *vcpu) { - unsigned long rflags; + unsigned long rflags, save_rflags; rflags = vmcs_readl(GUEST_RFLAGS); - if (to_vmx(vcpu)->rmode.vm86_active) - rflags &= ~(unsigned long)(X86_EFLAGS_IOPL | X86_EFLAGS_VM); + if (to_vmx(vcpu)->rmode.vm86_active) { + rflags &= RMODE_GUEST_OWNED_EFLAGS_BITS; + save_rflags = to_vmx(vcpu)->rmode.save_rflags; + rflags |= save_rflags & ~RMODE_GUEST_OWNED_EFLAGS_BITS; + } return rflags; } static void vmx_set_rflags(struct kvm_vcpu *vcpu, unsigned long rflags) { - if (to_vmx(vcpu)->rmode.vm86_active) + if (to_vmx(vcpu)->rmode.vm86_active) { + to_vmx(vcpu)->rmode.save_rflags = rflags; rflags |= X86_EFLAGS_IOPL | X86_EFLAGS_VM; + } vmcs_writel(GUEST_RFLAGS, rflags); } @@ -1250,7 +1282,8 @@ SECONDARY_EXEC_WBINVD_EXITING | SECONDARY_EXEC_ENABLE_VPID | SECONDARY_EXEC_ENABLE_EPT | - SECONDARY_EXEC_UNRESTRICTED_GUEST; + SECONDARY_EXEC_UNRESTRICTED_GUEST | + SECONDARY_EXEC_PAUSE_LOOP_EXITING; if (adjust_vmx_controls(min2, opt2, MSR_IA32_VMX_PROCBASED_CTLS2, &_cpu_based_2nd_exec_control) < 0) @@ -1394,6 +1427,9 @@ if (enable_ept && !cpu_has_vmx_ept_2m_page()) kvm_disable_largepages(); + if (!cpu_has_vmx_ple()) + ple_gap = 0; + return alloc_kvm_area(); } @@ -1431,8 +1467,8 @@ vmcs_write32(GUEST_TR_AR_BYTES, vmx->rmode.tr.ar); flags = vmcs_readl(GUEST_RFLAGS); - flags &= ~(X86_EFLAGS_IOPL | X86_EFLAGS_VM); - flags |= (vmx->rmode.save_iopl << IOPL_SHIFT); + flags &= RMODE_GUEST_OWNED_EFLAGS_BITS; + flags |= vmx->rmode.save_rflags & ~RMODE_GUEST_OWNED_EFLAGS_BITS; vmcs_writel(GUEST_RFLAGS, flags); vmcs_writel(GUEST_CR4, (vmcs_readl(GUEST_CR4) & ~X86_CR4_VME) | @@ -1501,8 +1537,7 @@ vmcs_write32(GUEST_TR_AR_BYTES, 0x008b); flags = vmcs_readl(GUEST_RFLAGS); - vmx->rmode.save_iopl - = (flags & X86_EFLAGS_IOPL) >> IOPL_SHIFT; + vmx->rmode.save_rflags = flags; flags |= X86_EFLAGS_IOPL | X86_EFLAGS_VM; @@ -2302,13 +2337,22 @@ ~SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; if (vmx->vpid == 0) exec_control &= ~SECONDARY_EXEC_ENABLE_VPID; - if (!enable_ept) + if (!enable_ept) { exec_control &= ~SECONDARY_EXEC_ENABLE_EPT; + enable_unrestricted_guest = 0; + } if (!enable_unrestricted_guest) exec_control &= ~SECONDARY_EXEC_UNRESTRICTED_GUEST; + if (!ple_gap) + exec_control &= ~SECONDARY_EXEC_PAUSE_LOOP_EXITING; vmcs_write32(SECONDARY_VM_EXEC_CONTROL, exec_control); } + if (ple_gap) { + vmcs_write32(PLE_GAP, ple_gap); + vmcs_write32(PLE_WINDOW, ple_window); + } + vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, !!bypass_guest_pf); vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, !!bypass_guest_pf); vmcs_write32(CR3_TARGET_COUNT, 0); /* 22.2.1 */ @@ -2510,7 +2554,7 @@ if (vmx->vpid != 0) vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->vpid); - vmx->vcpu.arch.cr0 = 0x60000010; + vmx->vcpu.arch.cr0 = X86_CR0_NW | X86_CR0_CD | X86_CR0_ET; vmx_set_cr0(&vmx->vcpu, vmx->vcpu.arch.cr0); /* enter rmode */ vmx_set_cr4(&vmx->vcpu, 0); vmx_set_efer(&vmx->vcpu, 0); @@ -2674,6 +2718,12 @@ kvm_queue_exception(vcpu, vec); return 1; case BP_VECTOR: + /* + * Update instruction length as we may reinject the exception + * from user space while in guest debugging mode. + */ + to_vmx(vcpu)->vcpu.arch.event_exit_inst_len = + vmcs_read32(VM_EXIT_INSTRUCTION_LEN); if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) return 0; /* fall through */ @@ -2790,6 +2840,13 @@ kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7); /* fall through */ case BP_VECTOR: + /* + * Update instruction length as we may reinject #BP from + * user space while in guest debugging mode. Reading it for + * #DB as well causes no harm, it is not used in that case. + */ + vmx->vcpu.arch.event_exit_inst_len = + vmcs_read32(VM_EXIT_INSTRUCTION_LEN); kvm_run->exit_reason = KVM_EXIT_DEBUG; kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + rip; kvm_run->debug.arch.exception = ex_no; @@ -3358,6 +3415,18 @@ } /* + * Indicate a busy-waiting vcpu in spinlock. We do not enable the PAUSE + * exiting, so only get here on cpu with PAUSE-Loop-Exiting. + */ +static int handle_pause(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) +{ + skip_emulated_instruction(vcpu); + kvm_vcpu_on_spin(vcpu); + + return 1; +} + +/* * The exit handlers return 1 if the exit was handled fully and guest execution * may resume. Otherwise they set the kvm_run parameter to indicate what needs * to be done to userspace and return 0. @@ -3394,6 +3463,7 @@ [EXIT_REASON_MCE_DURING_VMENTRY] = handle_machine_check, [EXIT_REASON_EPT_VIOLATION] = handle_ept_violation, [EXIT_REASON_EPT_MISCONFIG] = handle_ept_misconfig, + [EXIT_REASON_PAUSE_INSTRUCTION] = handle_pause, }; static const int kvm_vmx_max_exit_handlers = --- linux-2.6.32.orig/arch/x86/kvm/emulate.c +++ linux-2.6.32/arch/x86/kvm/emulate.c @@ -75,6 +75,7 @@ #define Group (1<<14) /* Bits 3:5 of modrm byte extend opcode */ #define GroupDual (1<<15) /* Alternate decoding of mod == 3 */ #define GroupMask 0xff /* Group number stored in bits 0:7 */ +#define Priv (1<<27) /* instruction generates #GP if current CPL != 0 */ /* Source 2 operand type */ #define Src2None (0<<29) #define Src2CL (1<<29) @@ -86,6 +87,7 @@ enum { Group1_80, Group1_81, Group1_82, Group1_83, Group1A, Group3_Byte, Group3, Group4, Group5, Group7, + Group8, Group9, }; static u32 opcode_table[256] = { @@ -203,7 +205,7 @@ SrcNone | ByteOp | ImplicitOps, SrcNone | ImplicitOps, /* 0xF0 - 0xF7 */ 0, 0, 0, 0, - ImplicitOps, ImplicitOps, Group | Group3_Byte, Group | Group3, + ImplicitOps | Priv, ImplicitOps, Group | Group3_Byte, Group | Group3, /* 0xF8 - 0xFF */ ImplicitOps, 0, ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, Group | Group4, Group | Group5, @@ -211,16 +213,20 @@ static u32 twobyte_table[256] = { /* 0x00 - 0x0F */ - 0, Group | GroupDual | Group7, 0, 0, 0, ImplicitOps, ImplicitOps, 0, - ImplicitOps, ImplicitOps, 0, 0, 0, ImplicitOps | ModRM, 0, 0, + 0, Group | GroupDual | Group7, 0, 0, + 0, ImplicitOps, ImplicitOps | Priv, 0, + ImplicitOps | Priv, ImplicitOps | Priv, 0, 0, + 0, ImplicitOps | ModRM, 0, 0, /* 0x10 - 0x1F */ 0, 0, 0, 0, 0, 0, 0, 0, ImplicitOps | ModRM, 0, 0, 0, 0, 0, 0, 0, /* 0x20 - 0x2F */ - ModRM | ImplicitOps, ModRM, ModRM | ImplicitOps, ModRM, 0, 0, 0, 0, + ModRM | ImplicitOps | Priv, ModRM | Priv, + ModRM | ImplicitOps | Priv, ModRM | Priv, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 - 0x3F */ - ImplicitOps, 0, ImplicitOps, 0, - ImplicitOps, ImplicitOps, 0, 0, + ImplicitOps | Priv, 0, ImplicitOps | Priv, 0, + ImplicitOps, ImplicitOps | Priv, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 - 0x47 */ DstReg | SrcMem | ModRM | Mov, DstReg | SrcMem | ModRM | Mov, @@ -258,11 +264,12 @@ 0, 0, ByteOp | DstReg | SrcMem | ModRM | Mov, DstReg | SrcMem16 | ModRM | Mov, /* 0xB8 - 0xBF */ - 0, 0, DstMem | SrcImmByte | ModRM, DstMem | SrcReg | ModRM | BitOp, + 0, 0, Group | Group8, DstMem | SrcReg | ModRM | BitOp, 0, 0, ByteOp | DstReg | SrcMem | ModRM | Mov, DstReg | SrcMem16 | ModRM | Mov, /* 0xC0 - 0xCF */ - 0, 0, 0, DstMem | SrcReg | ModRM | Mov, 0, 0, 0, ImplicitOps | ModRM, + 0, 0, 0, DstMem | SrcReg | ModRM | Mov, + 0, 0, 0, Group | GroupDual | Group9, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 - 0xDF */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -311,24 +318,39 @@ SrcMem | ModRM | Stack, 0, SrcMem | ModRM | Stack, 0, SrcMem | ModRM | Stack, 0, [Group7*8] = - 0, 0, ModRM | SrcMem, ModRM | SrcMem, + 0, 0, ModRM | SrcMem | Priv, ModRM | SrcMem | Priv, SrcNone | ModRM | DstMem | Mov, 0, - SrcMem16 | ModRM | Mov, SrcMem | ModRM | ByteOp, + SrcMem16 | ModRM | Mov | Priv, SrcMem | ModRM | ByteOp | Priv, + [Group8*8] = + 0, 0, 0, 0, + DstMem | SrcImmByte | ModRM, DstMem | SrcImmByte | ModRM, + DstMem | SrcImmByte | ModRM, DstMem | SrcImmByte | ModRM, + [Group9*8] = + 0, ImplicitOps | ModRM, 0, 0, 0, 0, 0, 0, }; static u32 group2_table[] = { [Group7*8] = - SrcNone | ModRM, 0, 0, SrcNone | ModRM, + SrcNone | ModRM | Priv, 0, 0, SrcNone | ModRM, SrcNone | ModRM | DstMem | Mov, 0, SrcMem16 | ModRM | Mov, 0, + [Group9*8] = + 0, 0, 0, 0, 0, 0, 0, 0, }; /* EFLAGS bit definitions. */ +#define EFLG_ID (1<<21) +#define EFLG_VIP (1<<20) +#define EFLG_VIF (1<<19) +#define EFLG_AC (1<<18) #define EFLG_VM (1<<17) #define EFLG_RF (1<<16) +#define EFLG_IOPL (3<<12) +#define EFLG_NT (1<<14) #define EFLG_OF (1<<11) #define EFLG_DF (1<<10) #define EFLG_IF (1<<9) +#define EFLG_TF (1<<8) #define EFLG_SF (1<<7) #define EFLG_ZF (1<<6) #define EFLG_AF (1<<4) @@ -597,7 +619,7 @@ if (linear < fc->start || linear >= fc->end) { size = min(15UL, PAGE_SIZE - offset_in_page(linear)); - rc = ops->read_std(linear, fc->data, size, ctxt->vcpu); + rc = ops->fetch(linear, fc->data, size, ctxt->vcpu, NULL); if (rc) return rc; fc->start = linear; @@ -613,6 +635,9 @@ { int rc = 0; + /* x86 instructions are limited to 15 bytes. */ + if (eip + size - ctxt->decode.eip_orig > 15) + return X86EMUL_UNHANDLEABLE; eip += ctxt->cs_base; while (size--) { rc = do_fetch_insn_byte(ctxt, ops, eip++, dest++); @@ -649,11 +674,11 @@ op_bytes = 3; *address = 0; rc = ops->read_std((unsigned long)ptr, (unsigned long *)size, 2, - ctxt->vcpu); + ctxt->vcpu, NULL); if (rc) return rc; rc = ops->read_std((unsigned long)ptr + 2, address, op_bytes, - ctxt->vcpu); + ctxt->vcpu, NULL); return rc; } @@ -871,12 +896,13 @@ /* Shadow copy of register state. Committed on successful emulation. */ memset(c, 0, sizeof(struct decode_cache)); - c->eip = kvm_rip_read(ctxt->vcpu); + c->eip = c->eip_orig = kvm_rip_read(ctxt->vcpu); ctxt->cs_base = seg_base(ctxt, VCPU_SREG_CS); memcpy(c->regs, ctxt->vcpu->arch.regs, sizeof c->regs); switch (mode) { case X86EMUL_MODE_REAL: + case X86EMUL_MODE_VM86: case X86EMUL_MODE_PROT16: def_op_bytes = def_ad_bytes = 2; break; @@ -1186,6 +1212,49 @@ return rc; } +static int emulate_popf(struct x86_emulate_ctxt *ctxt, + struct x86_emulate_ops *ops, + void *dest, int len) +{ + int rc; + unsigned long val, change_mask; + int iopl = (ctxt->eflags & X86_EFLAGS_IOPL) >> IOPL_SHIFT; + int cpl = kvm_x86_ops->get_cpl(ctxt->vcpu); + + rc = emulate_pop(ctxt, ops, &val, len); + if (rc != X86EMUL_CONTINUE) + return rc; + + change_mask = EFLG_CF | EFLG_PF | EFLG_AF | EFLG_ZF | EFLG_SF | EFLG_OF + | EFLG_TF | EFLG_DF | EFLG_NT | EFLG_RF | EFLG_AC | EFLG_ID; + + switch(ctxt->mode) { + case X86EMUL_MODE_PROT64: + case X86EMUL_MODE_PROT32: + case X86EMUL_MODE_PROT16: + if (cpl == 0) + change_mask |= EFLG_IOPL; + if (cpl <= iopl) + change_mask |= EFLG_IF; + break; + case X86EMUL_MODE_VM86: + if (iopl < 3) { + kvm_inject_gp(ctxt->vcpu, 0); + return X86EMUL_PROPAGATE_FAULT; + } + change_mask |= EFLG_IF; + break; + default: /* real mode */ + change_mask |= (EFLG_IOPL | EFLG_IF); + break; + } + + *(unsigned long *)dest = + (ctxt->eflags & ~change_mask) | (val & change_mask); + + return rc; +} + static inline int emulate_grp1a(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) { @@ -1327,7 +1396,7 @@ rc = emulate_pop(ctxt, ops, &cs, c->op_bytes); if (rc) return rc; - rc = kvm_load_segment_descriptor(ctxt->vcpu, (u16)cs, 1, VCPU_SREG_CS); + rc = kvm_load_segment_descriptor(ctxt->vcpu, (u16)cs, VCPU_SREG_CS); return rc; } @@ -1435,7 +1504,7 @@ /* syscall is not available in real mode */ if (c->lock_prefix || ctxt->mode == X86EMUL_MODE_REAL - || !(ctxt->vcpu->arch.cr0 & X86_CR0_PE)) + || ctxt->mode == X86EMUL_MODE_VM86) return -1; setup_syscalls_segments(ctxt, &cs, &ss); @@ -1487,9 +1556,8 @@ if (c->lock_prefix) return -1; - /* inject #GP if in real mode or paging is disabled */ - if (ctxt->mode == X86EMUL_MODE_REAL || - !(ctxt->vcpu->arch.cr0 & X86_CR0_PE)) { + /* inject #GP if in real mode */ + if (ctxt->mode == X86EMUL_MODE_REAL) { kvm_inject_gp(ctxt->vcpu, 0); return -1; } @@ -1553,15 +1621,9 @@ if (c->lock_prefix) return -1; - /* inject #GP if in real mode or paging is disabled */ - if (ctxt->mode == X86EMUL_MODE_REAL - || !(ctxt->vcpu->arch.cr0 & X86_CR0_PE)) { - kvm_inject_gp(ctxt->vcpu, 0); - return -1; - } - - /* sysexit must be called from CPL 0 */ - if (kvm_x86_ops->get_cpl(ctxt->vcpu) != 0) { + /* inject #GP if in real mode or Virtual 8086 mode */ + if (ctxt->mode == X86EMUL_MODE_REAL || + ctxt->mode == X86EMUL_MODE_VM86) { kvm_inject_gp(ctxt->vcpu, 0); return -1; } @@ -1608,6 +1670,57 @@ return 0; } +static bool emulator_bad_iopl(struct x86_emulate_ctxt *ctxt) +{ + int iopl; + if (ctxt->mode == X86EMUL_MODE_REAL) + return false; + if (ctxt->mode == X86EMUL_MODE_VM86) + return true; + iopl = (ctxt->eflags & X86_EFLAGS_IOPL) >> IOPL_SHIFT; + return kvm_x86_ops->get_cpl(ctxt->vcpu) > iopl; +} + +static bool emulator_io_port_access_allowed(struct x86_emulate_ctxt *ctxt, + struct x86_emulate_ops *ops, + u16 port, u16 len) +{ + struct kvm_segment tr_seg; + int r; + u16 io_bitmap_ptr; + u8 perm, bit_idx = port & 0x7; + unsigned mask = (1 << len) - 1; + + kvm_get_segment(ctxt->vcpu, &tr_seg, VCPU_SREG_TR); + if (tr_seg.unusable) + return false; + if (tr_seg.limit < 103) + return false; + r = ops->read_std(tr_seg.base + 102, &io_bitmap_ptr, 2, ctxt->vcpu, + NULL); + if (r != X86EMUL_CONTINUE) + return false; + if (io_bitmap_ptr + port/8 > tr_seg.limit) + return false; + r = ops->read_std(tr_seg.base + io_bitmap_ptr + port/8, &perm, 1, + ctxt->vcpu, NULL); + if (r != X86EMUL_CONTINUE) + return false; + if ((perm >> bit_idx) & mask) + return false; + return true; +} + +static bool emulator_io_permited(struct x86_emulate_ctxt *ctxt, + struct x86_emulate_ops *ops, + u16 port, u16 len) +{ + if (emulator_bad_iopl(ctxt)) + if (!emulator_io_port_access_allowed(ctxt, ops, port, len)) + return false; + return true; +} + int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) { @@ -1629,6 +1742,12 @@ memcpy(c->regs, ctxt->vcpu->arch.regs, sizeof c->regs); saved_eip = c->eip; + /* Privileged instruction can be executed only in CPL=0 */ + if ((c->d & Priv) && kvm_x86_ops->get_cpl(ctxt->vcpu)) { + kvm_inject_gp(ctxt->vcpu, 0); + goto done; + } + if (((c->d & ModRM) && (c->modrm_mod != 3)) || (c->d & MemAbs)) memop = c->modrm_ea; @@ -1761,7 +1880,12 @@ break; case 0x6c: /* insb */ case 0x6d: /* insw/insd */ - if (kvm_emulate_pio_string(ctxt->vcpu, NULL, + if (!emulator_io_permited(ctxt, ops, c->regs[VCPU_REGS_RDX], + (c->d & ByteOp) ? 1 : c->op_bytes)) { + kvm_inject_gp(ctxt->vcpu, 0); + goto done; + } + if (kvm_emulate_pio_string(ctxt->vcpu, NULL, 1, (c->d & ByteOp) ? 1 : c->op_bytes, c->rep_prefix ? @@ -1777,6 +1901,11 @@ return 0; case 0x6e: /* outsb */ case 0x6f: /* outsw/outsd */ + if (!emulator_io_permited(ctxt, ops, c->regs[VCPU_REGS_RDX], + (c->d & ByteOp) ? 1 : c->op_bytes)) { + kvm_inject_gp(ctxt->vcpu, 0); + goto done; + } if (kvm_emulate_pio_string(ctxt->vcpu, NULL, 0, (c->d & ByteOp) ? 1 : c->op_bytes, @@ -1863,25 +1992,19 @@ break; case 0x8e: { /* mov seg, r/m16 */ uint16_t sel; - int type_bits; - int err; sel = c->src.val; - if (c->modrm_reg == VCPU_SREG_SS) - toggle_interruptibility(ctxt, X86_SHADOW_INT_MOV_SS); - if (c->modrm_reg <= 5) { - type_bits = (c->modrm_reg == 1) ? 9 : 1; - err = kvm_load_segment_descriptor(ctxt->vcpu, sel, - type_bits, c->modrm_reg); - } else { - printk(KERN_INFO "Invalid segreg in modrm byte 0x%02x\n", - c->modrm); - goto cannot_emulate; + if (c->modrm_reg == VCPU_SREG_CS || + c->modrm_reg > VCPU_SREG_GS) { + kvm_queue_exception(ctxt->vcpu, UD_VECTOR); + goto done; } - if (err < 0) - goto cannot_emulate; + if (c->modrm_reg == VCPU_SREG_SS) + toggle_interruptibility(ctxt, X86_SHADOW_INT_MOV_SS); + + rc = kvm_load_segment_descriptor(ctxt->vcpu, sel, c->modrm_reg); c->dst.type = OP_NONE; /* Disable writeback. */ break; @@ -1910,7 +2033,10 @@ c->dst.type = OP_REG; c->dst.ptr = (unsigned long *) &ctxt->eflags; c->dst.bytes = c->op_bytes; - goto pop_instruction; + rc = emulate_popf(ctxt, ops, &c->dst.val, c->op_bytes); + if (rc != X86EMUL_CONTINUE) + goto done; + break; case 0xa0 ... 0xa1: /* mov */ c->dst.ptr = (unsigned long *)&c->regs[VCPU_REGS_RAX]; c->dst.val = c->src.val; @@ -2048,11 +2174,9 @@ case 0xe9: /* jmp rel */ goto jmp; case 0xea: /* jmp far */ - if (kvm_load_segment_descriptor(ctxt->vcpu, c->src2.val, 9, - VCPU_SREG_CS) < 0) { - DPRINTF("jmp far: Failed to load CS descriptor\n"); - goto cannot_emulate; - } + if (kvm_load_segment_descriptor(ctxt->vcpu, c->src2.val, + VCPU_SREG_CS)) + goto done; c->eip = c->src.val; break; @@ -2070,7 +2194,13 @@ case 0xef: /* out (e/r)ax,dx */ port = c->regs[VCPU_REGS_RDX]; io_dir_in = 0; - do_io: if (kvm_emulate_pio(ctxt->vcpu, NULL, io_dir_in, + do_io: + if (!emulator_io_permited(ctxt, ops, port, + (c->d & ByteOp) ? 1 : c->op_bytes)) { + kvm_inject_gp(ctxt->vcpu, 0); + goto done; + } + if (kvm_emulate_pio(ctxt->vcpu, NULL, io_dir_in, (c->d & ByteOp) ? 1 : c->op_bytes, port) != 0) { c->eip = saved_eip; @@ -2095,13 +2225,21 @@ c->dst.type = OP_NONE; /* Disable writeback. */ break; case 0xfa: /* cli */ - ctxt->eflags &= ~X86_EFLAGS_IF; - c->dst.type = OP_NONE; /* Disable writeback. */ + if (emulator_bad_iopl(ctxt)) + kvm_inject_gp(ctxt->vcpu, 0); + else { + ctxt->eflags &= ~X86_EFLAGS_IF; + c->dst.type = OP_NONE; /* Disable writeback. */ + } break; case 0xfb: /* sti */ - toggle_interruptibility(ctxt, X86_SHADOW_INT_STI); - ctxt->eflags |= X86_EFLAGS_IF; - c->dst.type = OP_NONE; /* Disable writeback. */ + if (emulator_bad_iopl(ctxt)) + kvm_inject_gp(ctxt->vcpu, 0); + else { + toggle_interruptibility(ctxt, X86_SHADOW_INT_STI); + ctxt->eflags |= X86_EFLAGS_IF; + c->dst.type = OP_NONE; /* Disable writeback. */ + } break; case 0xfc: /* cld */ ctxt->eflags &= ~EFLG_DF; --- linux-2.6.32.orig/arch/x86/vdso/vdso32-setup.c +++ linux-2.6.32/arch/x86/vdso/vdso32-setup.c @@ -331,7 +331,7 @@ if (compat) addr = VDSO_HIGH_BASE; else { - addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0); + addr = get_unmapped_area_prot(NULL, 0, PAGE_SIZE, 0, 0, 1); if (IS_ERR_VALUE(addr)) { ret = addr; goto up_fail; --- linux-2.6.32.orig/arch/x86/ia32/ia32entry.S +++ linux-2.6.32/arch/x86/ia32/ia32entry.S @@ -696,7 +696,7 @@ .quad quiet_ni_syscall /* streams2 */ .quad stub32_vfork /* 190 */ .quad compat_sys_getrlimit - .quad sys32_mmap2 + .quad sys_mmap_pgoff .quad sys32_truncate64 .quad sys32_ftruncate64 .quad sys32_stat64 /* 195 */ --- linux-2.6.32.orig/arch/x86/ia32/sys_ia32.c +++ linux-2.6.32/arch/x86/ia32/sys_ia32.c @@ -155,9 +155,6 @@ asmlinkage long sys32_mmap(struct mmap_arg_struct __user *arg) { struct mmap_arg_struct a; - struct file *file = NULL; - unsigned long retval; - struct mm_struct *mm ; if (copy_from_user(&a, arg, sizeof(a))) return -EFAULT; @@ -165,22 +162,8 @@ if (a.offset & ~PAGE_MASK) return -EINVAL; - if (!(a.flags & MAP_ANONYMOUS)) { - file = fget(a.fd); - if (!file) - return -EBADF; - } - - mm = current->mm; - down_write(&mm->mmap_sem); - retval = do_mmap_pgoff(file, a.addr, a.len, a.prot, a.flags, + return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset>>PAGE_SHIFT); - if (file) - fput(file); - - up_write(&mm->mmap_sem); - - return retval; } asmlinkage long sys32_mprotect(unsigned long start, size_t len, @@ -539,30 +522,6 @@ return ret; } -asmlinkage long sys32_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - struct mm_struct *mm = current->mm; - unsigned long error; - struct file *file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - return -EBADF; - } - - down_write(&mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(&mm->mmap_sem); - - if (file) - fput(file); - return error; -} - asmlinkage long sys32_olduname(struct oldold_utsname __user *name) { char *arch = "x86_64"; --- linux-2.6.32.orig/arch/x86/ia32/ia32_aout.c +++ linux-2.6.32/arch/x86/ia32/ia32_aout.c @@ -308,14 +308,15 @@ if (retval) return retval; - regs->cs = __USER32_CS; - regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 = - regs->r13 = regs->r14 = regs->r15 = 0; - /* OK, This is the point of no return */ set_personality(PER_LINUX); set_thread_flag(TIF_IA32); - clear_thread_flag(TIF_ABI_PENDING); + + setup_new_exec(bprm); + + regs->cs = __USER32_CS; + regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 = + regs->r13 = regs->r14 = regs->r15 = 0; current->mm->end_code = ex.a_text + (current->mm->start_code = N_TXTADDR(ex)); @@ -326,7 +327,6 @@ current->mm->free_area_cache = TASK_UNMAPPED_BASE; current->mm->cached_hole_size = 0; - current->mm->mmap = NULL; install_exec_creds(bprm); current->flags &= ~PF_FORKNOEXEC; --- linux-2.6.32.orig/arch/m68k/kernel/sys_m68k.c +++ linux-2.6.32/arch/m68k/kernel/sys_m68k.c @@ -29,37 +29,16 @@ #include #include -/* common code for old and new mmaps */ -static inline long do_mmap2( - unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) { - return do_mmap2(addr, len, prot, flags, fd, pgoff); + /* + * This is wrong for sun3 - there PAGE_SIZE is 8Kb, + * so we need to shift the argument down by 1; m68k mmap64(3) + * (in libc) expects the last argument of mmap2 in 4Kb units. + */ + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); } /* @@ -90,57 +69,11 @@ if (a.offset & ~PAGE_MASK) goto out; - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); -out: - return error; -} - -#if 0 -struct mmap_arg_struct64 { - __u32 addr; - __u32 len; - __u32 prot; - __u32 flags; - __u64 offset; /* 64 bits */ - __u32 fd; -}; - -asmlinkage long sys_mmap64(struct mmap_arg_struct64 *arg) -{ - int error = -EFAULT; - struct file * file = NULL; - struct mmap_arg_struct64 a; - unsigned long pgoff; - - if (copy_from_user(&a, arg, sizeof(a))) - return -EFAULT; - - if ((long)a.offset & ~PAGE_MASK) - return -EINVAL; - - pgoff = a.offset >> PAGE_SHIFT; - if ((a.offset >> PAGE_SHIFT) != pgoff) - return -EINVAL; - - if (!(a.flags & MAP_ANONYMOUS)) { - error = -EBADF; - file = fget(a.fd); - if (!file) - goto out; - } - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, a.addr, a.len, a.prot, a.flags, pgoff); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, + a.offset >> PAGE_SHIFT); out: return error; } -#endif struct sel_arg_struct { unsigned long n; --- linux-2.6.32.orig/arch/microblaze/kernel/syscall_table.S +++ linux-2.6.32/arch/microblaze/kernel/syscall_table.S @@ -196,7 +196,7 @@ .long sys_ni_syscall /* reserved for streams2 */ .long sys_vfork /* 190 */ .long sys_getrlimit - .long sys_mmap2 /* mmap2 */ + .long sys_mmap_pgoff /* mmap2 */ .long sys_truncate64 .long sys_ftruncate64 .long sys_stat64 /* 195 */ --- linux-2.6.32.orig/arch/microblaze/kernel/sys_microblaze.c +++ linux-2.6.32/arch/microblaze/kernel/sys_microblaze.c @@ -62,46 +62,14 @@ return error; } -asmlinkage long -sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - struct file *file = NULL; - int ret = -EBADF; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) { - printk(KERN_INFO "no fd in mmap\r\n"); - goto out; - } - } - - down_write(¤t->mm->mmap_sem); - ret = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); -out: - return ret; -} - asmlinkage long sys_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, off_t pgoff) { - int err = -EINVAL; - - if (pgoff & ~PAGE_MASK) { - printk(KERN_INFO "no pagemask in mmap\r\n"); - goto out; - } + if (pgoff & ~PAGE_MASK) + return -EINVAL; - err = sys_mmap2(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT); -out: - return err; + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT); } /* --- linux-2.6.32.orig/arch/alpha/kernel/osf_sys.c +++ linux-2.6.32/arch/alpha/kernel/osf_sys.c @@ -178,25 +178,18 @@ unsigned long, prot, unsigned long, flags, unsigned long, fd, unsigned long, off) { - struct file *file = NULL; - unsigned long ret = -EBADF; + unsigned long ret = -EINVAL; #if 0 if (flags & (_MAP_HASSEMAPHORE | _MAP_INHERIT | _MAP_UNALIGNED)) printk("%s: unimplemented OSF mmap flags %04lx\n", current->comm, flags); #endif - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - down_write(¤t->mm->mmap_sem); - ret = do_mmap(file, addr, len, prot, flags, off); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); + if ((off + PAGE_ALIGN(len)) < off) + goto out; + if (off & ~PAGE_MASK) + goto out; + ret = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); out: return ret; } --- linux-2.6.32.orig/arch/h8300/kernel/sys_h8300.c +++ linux-2.6.32/arch/h8300/kernel/sys_h8300.c @@ -26,39 +26,6 @@ #include #include -/* common code for old and new mmaps */ -static inline long do_mmap2( - unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - return do_mmap2(addr, len, prot, flags, fd, pgoff); -} - /* * Perform the select(nd, in, out, ex, tv) and mmap() system * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to @@ -87,58 +54,12 @@ if (a.offset & ~PAGE_MASK) goto out; - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, + a.offset >> PAGE_SHIFT); out: return error; } -#if 0 /* DAVIDM - do we want this */ -struct mmap_arg_struct64 { - __u32 addr; - __u32 len; - __u32 prot; - __u32 flags; - __u64 offset; /* 64 bits */ - __u32 fd; -}; - -asmlinkage long sys_mmap64(struct mmap_arg_struct64 *arg) -{ - int error = -EFAULT; - struct file * file = NULL; - struct mmap_arg_struct64 a; - unsigned long pgoff; - - if (copy_from_user(&a, arg, sizeof(a))) - return -EFAULT; - - if ((long)a.offset & ~PAGE_MASK) - return -EINVAL; - - pgoff = a.offset >> PAGE_SHIFT; - if ((a.offset >> PAGE_SHIFT) != pgoff) - return -EINVAL; - - if (!(a.flags & MAP_ANONYMOUS)) { - error = -EBADF; - file = fget(a.fd); - if (!file) - goto out; - } - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, a.addr, a.len, a.prot, a.flags, pgoff); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); -out: - return error; -} -#endif - struct sel_arg_struct { unsigned long n; fd_set *inp, *outp, *exp; --- linux-2.6.32.orig/arch/h8300/kernel/syscalls.S +++ linux-2.6.32/arch/h8300/kernel/syscalls.S @@ -206,7 +206,7 @@ .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ .long SYMBOL_NAME(sys_vfork) /* 190 */ .long SYMBOL_NAME(sys_getrlimit) - .long SYMBOL_NAME(sys_mmap2) + .long SYMBOL_NAME(sys_mmap_pgoff) .long SYMBOL_NAME(sys_truncate64) .long SYMBOL_NAME(sys_ftruncate64) .long SYMBOL_NAME(sys_stat64) /* 195 */ --- linux-2.6.32.orig/arch/xtensa/kernel/syscall.c +++ linux-2.6.32/arch/xtensa/kernel/syscall.c @@ -57,31 +57,6 @@ return error; } - -asmlinkage long xtensa_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - asmlinkage long xtensa_shmat(int shmid, char __user *shmaddr, int shmflg) { unsigned long ret; --- linux-2.6.32.orig/arch/xtensa/include/asm/unistd.h +++ linux-2.6.32/arch/xtensa/include/asm/unistd.h @@ -189,7 +189,7 @@ /* File Map / Shared Memory Operations */ #define __NR_mmap2 80 -__SYSCALL( 80, xtensa_mmap2, 6) +__SYSCALL( 80, sys_mmap_pgoff, 6) #define __NR_munmap 81 __SYSCALL( 81, sys_munmap, 2) #define __NR_mprotect 82 --- linux-2.6.32.orig/arch/xtensa/include/asm/syscall.h +++ linux-2.6.32/arch/xtensa/include/asm/syscall.h @@ -13,8 +13,6 @@ asmlinkage long xtensa_execve(char*, char**, char**, struct pt_regs*); asmlinkage long xtensa_clone(unsigned long, unsigned long, struct pt_regs*); asmlinkage long xtensa_pipe(int __user *); -asmlinkage long xtensa_mmap2(unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long, unsigned long); asmlinkage long xtensa_ptrace(long, long, long, long); asmlinkage long xtensa_sigreturn(struct pt_regs*); asmlinkage long xtensa_rt_sigreturn(struct pt_regs*); --- linux-2.6.32.orig/arch/score/kernel/sys_score.c +++ linux-2.6.32/arch/score/kernel/sys_score.c @@ -36,34 +36,16 @@ sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) { - int error = -EBADF; - struct file *file = NULL; - - if (pgoff & (~PAGE_MASK >> 12)) - return -EINVAL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - return error; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); - - return error; + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); } asmlinkage long sys_mmap(unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flags, unsigned long fd, off_t pgoff) + unsigned long flags, unsigned long fd, off_t offset) { - return sys_mmap2(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT); + if (unlikely(offset & ~PAGE_MASK)) + return -EINVAL; + return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); } asmlinkage long --- linux-2.6.32.orig/arch/parisc/kernel/sys_parisc.c +++ linux-2.6.32/arch/parisc/kernel/sys_parisc.c @@ -110,37 +110,14 @@ return addr; } -static unsigned long do_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, unsigned long fd, - unsigned long pgoff) -{ - struct file * file = NULL; - unsigned long error = -EBADF; - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file != NULL) - fput(file); -out: - return error; -} - asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) { /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE we have. */ - return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT - 12)); + return sys_mmap_pgoff(addr, len, prot, flags, fd, + pgoff >> (PAGE_SHIFT - 12)); } asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, @@ -148,7 +125,8 @@ unsigned long offset) { if (!(offset & ~PAGE_MASK)) { - return do_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); + return sys_mmap_pgoff(addr, len, prot, flags, fd, + offset >> PAGE_SHIFT); } else { return -EINVAL; } --- linux-2.6.32.orig/arch/blackfin/mach-common/entry.S +++ linux-2.6.32/arch/blackfin/mach-common/entry.S @@ -1422,7 +1422,7 @@ .long _sys_ni_syscall /* streams2 */ .long _sys_vfork /* 190 */ .long _sys_getrlimit - .long _sys_mmap2 + .long _sys_mmap_pgoff .long _sys_truncate64 .long _sys_ftruncate64 .long _sys_stat64 /* 195 */ --- linux-2.6.32.orig/arch/blackfin/kernel/sys_bfin.c +++ linux-2.6.32/arch/blackfin/kernel/sys_bfin.c @@ -22,39 +22,6 @@ #include #include -/* common code for old and new mmaps */ -static inline long -do_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file *file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); - out: - return error; -} - -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - return do_mmap2(addr, len, prot, flags, fd, pgoff); -} - asmlinkage void *sys_sram_alloc(size_t size, unsigned long flags) { return sram_alloc_with_lsl(size, flags); --- linux-2.6.32.orig/arch/blackfin/include/asm/page.h +++ linux-2.6.32/arch/blackfin/include/asm/page.h @@ -10,4 +10,9 @@ #include #define MAP_NR(addr) (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT) +#define VM_DATA_DEFAULT_FLAGS \ + (VM_READ | VM_WRITE | \ + ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \ + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) + #endif --- linux-2.6.32.orig/arch/cris/kernel/sys_cris.c +++ linux-2.6.32/arch/cris/kernel/sys_cris.c @@ -26,31 +26,6 @@ #include #include -/* common code for old and new mmaps */ -static inline long -do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flags, unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - asmlinkage unsigned long old_mmap(unsigned long __user *args) { unsigned long buffer[6]; @@ -63,7 +38,7 @@ if (buffer[5] & ~PAGE_MASK) /* verify that offset is on page boundary */ goto out; - err = do_mmap2(buffer[0], buffer[1], buffer[2], buffer[3], + err = sys_mmap_pgoff(buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5] >> PAGE_SHIFT); out: return err; @@ -73,7 +48,8 @@ sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) { - return do_mmap2(addr, len, prot, flags, fd, pgoff); + /* bug(?): 8Kb pages here */ + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); } /* --- linux-2.6.32.orig/arch/m68knommu/kernel/sys_m68k.c +++ linux-2.6.32/arch/m68knommu/kernel/sys_m68k.c @@ -27,39 +27,6 @@ #include #include -/* common code for old and new mmaps */ -static inline long do_mmap2( - unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file * file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - -asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - return do_mmap2(addr, len, prot, flags, fd, pgoff); -} - /* * Perform the select(nd, in, out, ex, tv) and mmap() system * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to @@ -88,9 +55,8 @@ if (a.offset & ~PAGE_MASK) goto out; - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, + a.offset >> PAGE_SHIFT); out: return error; } --- linux-2.6.32.orig/arch/m68knommu/kernel/syscalltable.S +++ linux-2.6.32/arch/m68knommu/kernel/syscalltable.S @@ -210,7 +210,7 @@ .long sys_ni_syscall /* streams2 */ .long sys_vfork /* 190 */ .long sys_getrlimit - .long sys_mmap2 + .long sys_mmap_pgoff .long sys_truncate64 .long sys_ftruncate64 .long sys_stat64 /* 195 */ --- linux-2.6.32.orig/arch/sh/kernel/process_64.c +++ linux-2.6.32/arch/sh/kernel/process_64.c @@ -367,7 +367,7 @@ void flush_thread(void) { - /* Called by fs/exec.c (flush_old_exec) to remove traces of a + /* Called by fs/exec.c (setup_new_exec) to remove traces of a * previously running executable. */ #ifdef CONFIG_SH_FPU if (last_task_used_math == current) { --- linux-2.6.32.orig/arch/sh/kernel/smp.c +++ linux-2.6.32/arch/sh/kernel/smp.c @@ -69,6 +69,7 @@ unsigned int cpu; struct mm_struct *mm = &init_mm; + enable_mmu(); atomic_inc(&mm->mm_count); atomic_inc(&mm->mm_users); current->active_mm = mm; --- linux-2.6.32.orig/arch/sh/kernel/sys_sh.c +++ linux-2.6.32/arch/sh/kernel/sys_sh.c @@ -28,37 +28,13 @@ #include #include -static inline long -do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flags, int fd, unsigned long pgoff) -{ - int error = -EBADF; - struct file *file = NULL; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) - goto out; - } - - down_write(¤t->mm->mmap_sem); - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - - if (file) - fput(file); -out: - return error; -} - asmlinkage int old_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, int fd, unsigned long off) { if (off & ~PAGE_MASK) return -EINVAL; - return do_mmap2(addr, len, prot, flags, fd, off>>PAGE_SHIFT); + return sys_mmap_pgoff(addr, len, prot, flags, fd, off>>PAGE_SHIFT); } asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, @@ -74,7 +50,7 @@ pgoff >>= PAGE_SHIFT - 12; - return do_mmap2(addr, len, prot, flags, fd, pgoff); + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); } /* --- linux-2.6.32.orig/arch/sh/boot/compressed/misc.c +++ linux-2.6.32/arch/sh/boot/compressed/misc.c @@ -132,7 +132,7 @@ output_addr = (CONFIG_MEMORY_START + 0x2000); #else output_addr = PHYSADDR((unsigned long)&_text+PAGE_SIZE); -#ifdef CONFIG_29BIT +#if defined(CONFIG_29BIT) || defined(CONFIG_PMB_FIXED) output_addr |= P2SEG; #endif #endif --- linux-2.6.32.orig/arch/sh/include/asm/elf.h +++ linux-2.6.32/arch/sh/include/asm/elf.h @@ -212,7 +212,9 @@ #define VSYSCALL_AUX_ENT \ if (vdso_enabled) \ - NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); + NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); \ + else \ + NEW_AUX_ENT(AT_IGNORE, 0); #else #define VSYSCALL_AUX_ENT #endif /* CONFIG_VSYSCALL */ @@ -220,7 +222,7 @@ #ifdef CONFIG_SH_FPU #define FPU_AUX_ENT NEW_AUX_ENT(AT_FPUCW, FPSCR_INIT) #else -#define FPU_AUX_ENT +#define FPU_AUX_ENT NEW_AUX_ENT(AT_IGNORE, 0) #endif extern int l1i_cache_shape, l1d_cache_shape, l2_cache_shape; --- linux-2.6.32.orig/arch/sh/include/asm/pgtable_32.h +++ linux-2.6.32/arch/sh/include/asm/pgtable_32.h @@ -344,7 +344,8 @@ #define pte_special(pte) ((pte).pte_low & _PAGE_SPECIAL) #ifdef CONFIG_X2TLB -#define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE) +#define pte_write(pte) \ + ((pte).pte_high & (_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE)) #else #define pte_write(pte) ((pte).pte_low & _PAGE_RW) #endif @@ -358,7 +359,7 @@ * individually toggled (and user permissions are entirely decoupled from * kernel permissions), we attempt to couple them a bit more sanely here. */ -PTE_BIT_FUNC(high, wrprotect, &= ~_PAGE_EXT_USER_WRITE); +PTE_BIT_FUNC(high, wrprotect, &= ~(_PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE)); PTE_BIT_FUNC(high, mkwrite, |= _PAGE_EXT_USER_WRITE | _PAGE_EXT_KERN_WRITE); PTE_BIT_FUNC(high, mkhuge, |= _PAGE_SZHUGE); #else --- linux-2.6.32.orig/arch/sh/mm/mmap.c +++ linux-2.6.32/arch/sh/mm/mmap.c @@ -54,7 +54,8 @@ /* We do not accept a shared mapping if it would violate * cache aliasing constraints. */ - if ((flags & MAP_SHARED) && (addr & shm_align_mask)) + if ((flags & MAP_SHARED) && + ((addr - (pgoff << PAGE_SHIFT)) & shm_align_mask)) return -EINVAL; return addr; } --- linux-2.6.32.orig/arch/powerpc/Kconfig +++ linux-2.6.32/arch/powerpc/Kconfig @@ -935,6 +935,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "fs/Kconfig" source "arch/powerpc/sysdev/qe_lib/Kconfig" --- linux-2.6.32.orig/arch/powerpc/kernel/syscalls.c +++ linux-2.6.32/arch/powerpc/kernel/syscalls.c @@ -140,7 +140,6 @@ unsigned long prot, unsigned long flags, unsigned long fd, unsigned long off, int shift) { - struct file * file = NULL; unsigned long ret = -EINVAL; if (!arch_validate_prot(prot)) @@ -151,20 +150,8 @@ goto out; off >>= shift; } - - ret = -EBADF; - if (!(flags & MAP_ANONYMOUS)) { - if (!(file = fget(fd))) - goto out; - } - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - down_write(¤t->mm->mmap_sem); - ret = do_mmap_pgoff(file, addr, len, prot, flags, off); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); + ret = sys_mmap_pgoff(addr, len, prot, flags, fd, off); out: return ret; } --- linux-2.6.32.orig/arch/powerpc/kernel/vmlinux.lds.S +++ linux-2.6.32/arch/powerpc/kernel/vmlinux.lds.S @@ -38,6 +38,9 @@ #endif SECTIONS { + . = 0; + reloc_start = .; + . = KERNELBASE; /* --- linux-2.6.32.orig/arch/powerpc/kernel/asm-offsets.c +++ linux-2.6.32/arch/powerpc/kernel/asm-offsets.c @@ -133,7 +133,6 @@ DEFINE(PACAKMSR, offsetof(struct paca_struct, kernel_msr)); DEFINE(PACASOFTIRQEN, offsetof(struct paca_struct, soft_enabled)); DEFINE(PACAHARDIRQEN, offsetof(struct paca_struct, hard_enabled)); - DEFINE(PACAPERFPEND, offsetof(struct paca_struct, perf_event_pending)); DEFINE(PACACONTEXTID, offsetof(struct paca_struct, context.id)); #ifdef CONFIG_PPC_MM_SLICES DEFINE(PACALOWSLICESPSIZE, offsetof(struct paca_struct, --- linux-2.6.32.orig/arch/powerpc/kernel/vector.S +++ linux-2.6.32/arch/powerpc/kernel/vector.S @@ -58,7 +58,7 @@ * all 1's */ mfspr r4,SPRN_VRSAVE - cmpdi 0,r4,0 + cmpwi 0,r4,0 bne+ 1f li r4,-1 mtspr SPRN_VRSAVE,r4 --- linux-2.6.32.orig/arch/powerpc/kernel/pci-common.c +++ linux-2.6.32/arch/powerpc/kernel/pci-common.c @@ -1107,6 +1107,12 @@ list_for_each_entry(dev, &bus->devices, bus_list) { struct dev_archdata *sd = &dev->dev.archdata; + /* Cardbus can call us to add new devices to a bus, so ignore + * those who are already fully discovered + */ + if (dev->is_added) + continue; + /* Setup OF node pointer in archdata */ sd->of_node = pci_device_to_OF_node(dev); @@ -1147,6 +1153,13 @@ } EXPORT_SYMBOL(pcibios_fixup_bus); +void __devinit pci_fixup_cardbus(struct pci_bus *bus) +{ + /* Now fixup devices on that bus */ + pcibios_setup_bus_devices(bus); +} + + static int skip_isa_ioresource_align(struct pci_dev *dev) { if ((ppc_pci_flags & PPC_PCI_CAN_SKIP_ISA_ALIGN) && --- linux-2.6.32.orig/arch/powerpc/kernel/process.c +++ linux-2.6.32/arch/powerpc/kernel/process.c @@ -554,18 +554,6 @@ void flush_thread(void) { -#ifdef CONFIG_PPC64 - struct thread_info *t = current_thread_info(); - - if (test_ti_thread_flag(t, TIF_ABI_PENDING)) { - clear_ti_thread_flag(t, TIF_ABI_PENDING); - if (test_ti_thread_flag(t, TIF_32BIT)) - clear_ti_thread_flag(t, TIF_32BIT); - else - set_ti_thread_flag(t, TIF_32BIT); - } -#endif - discard_lazy_cpu_state(); if (current->thread.dabr) { --- linux-2.6.32.orig/arch/powerpc/kernel/time.c +++ linux-2.6.32/arch/powerpc/kernel/time.c @@ -530,25 +530,60 @@ } #endif /* CONFIG_PPC_ISERIES */ -#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_PPC32) -DEFINE_PER_CPU(u8, perf_event_pending); +#ifdef CONFIG_PERF_EVENTS -void set_perf_event_pending(void) +/* + * 64-bit uses a byte in the PACA, 32-bit uses a per-cpu variable... + */ +#ifdef CONFIG_PPC64 +static inline unsigned long test_perf_event_pending(void) { - get_cpu_var(perf_event_pending) = 1; - set_dec(1); - put_cpu_var(perf_event_pending); + unsigned long x; + + asm volatile("lbz %0,%1(13)" + : "=r" (x) + : "i" (offsetof(struct paca_struct, perf_event_pending))); + return x; } +static inline void set_perf_event_pending_flag(void) +{ + asm volatile("stb %0,%1(13)" : : + "r" (1), + "i" (offsetof(struct paca_struct, perf_event_pending))); +} + +static inline void clear_perf_event_pending(void) +{ + asm volatile("stb %0,%1(13)" : : + "r" (0), + "i" (offsetof(struct paca_struct, perf_event_pending))); +} + +#else /* 32-bit */ + +DEFINE_PER_CPU(u8, perf_event_pending); + +#define set_perf_event_pending_flag() __get_cpu_var(perf_event_pending) = 1 #define test_perf_event_pending() __get_cpu_var(perf_event_pending) #define clear_perf_event_pending() __get_cpu_var(perf_event_pending) = 0 -#else /* CONFIG_PERF_EVENTS && CONFIG_PPC32 */ +#endif /* 32 vs 64 bit */ + +void set_perf_event_pending(void) +{ + preempt_disable(); + set_perf_event_pending_flag(); + set_dec(1); + preempt_enable(); +} + +#else /* CONFIG_PERF_EVENTS */ #define test_perf_event_pending() 0 #define clear_perf_event_pending() -#endif /* CONFIG_PERF_EVENTS && CONFIG_PPC32 */ +#endif /* CONFIG_PERF_EVENTS */ /* * For iSeries shared processors, we have to let the hypervisor @@ -576,10 +611,6 @@ set_dec(DECREMENTER_MAX); #ifdef CONFIG_PPC32 - if (test_perf_event_pending()) { - clear_perf_event_pending(); - perf_event_do_pending(); - } if (atomic_read(&ppc_n_lost_interrupts) != 0) do_IRQ(regs); #endif @@ -597,6 +628,11 @@ calculate_steal_time(); + if (test_perf_event_pending()) { + clear_perf_event_pending(); + perf_event_do_pending(); + } + #ifdef CONFIG_PPC_ISERIES if (firmware_has_feature(FW_FEATURE_ISERIES)) get_lppaca()->int_dword.fields.decr_int = 0; --- linux-2.6.32.orig/arch/powerpc/kernel/irq.c +++ linux-2.6.32/arch/powerpc/kernel/irq.c @@ -53,7 +53,6 @@ #include #include #include -#include #include #include @@ -138,11 +137,6 @@ } #endif /* CONFIG_PPC_STD_MMU_64 */ - if (test_perf_event_pending()) { - clear_perf_event_pending(); - perf_event_do_pending(); - } - /* * if (get_paca()->hard_enabled) return; * But again we need to take care that gcc gets hard_enabled directly --- linux-2.6.32.orig/arch/powerpc/kernel/align.c +++ linux-2.6.32/arch/powerpc/kernel/align.c @@ -642,10 +642,14 @@ */ static int emulate_vsx(unsigned char __user *addr, unsigned int reg, unsigned int areg, struct pt_regs *regs, - unsigned int flags, unsigned int length) + unsigned int flags, unsigned int length, + unsigned int elsize) { char *ptr; + unsigned long *lptr; int ret = 0; + int sw = 0; + int i, j; flush_vsx_to_thread(current); @@ -654,19 +658,35 @@ else ptr = (char *) ¤t->thread.vr[reg - 32]; - if (flags & ST) - ret = __copy_to_user(addr, ptr, length); - else { - if (flags & SPLT){ - ret = __copy_from_user(ptr, addr, length); - ptr += length; + lptr = (unsigned long *) ptr; + + if (flags & SW) + sw = elsize-1; + + for (j = 0; j < length; j += elsize) { + for (i = 0; i < elsize; ++i) { + if (flags & ST) + ret |= __put_user(ptr[i^sw], addr + i); + else + ret |= __get_user(ptr[i^sw], addr + i); } - ret |= __copy_from_user(ptr, addr, length); + ptr += elsize; + addr += elsize; } - if (flags & U) - regs->gpr[areg] = regs->dar; - if (ret) + + if (!ret) { + if (flags & U) + regs->gpr[areg] = regs->dar; + + /* Splat load copies the same data to top and bottom 8 bytes */ + if (flags & SPLT) + lptr[1] = lptr[0]; + /* For 8 byte loads, zero the top 8 bytes */ + else if (!(flags & ST) && (8 == length)) + lptr[1] = 0; + } else return -EFAULT; + return 1; } #endif @@ -767,16 +787,25 @@ #ifdef CONFIG_VSX if ((instruction & 0xfc00003e) == 0x7c000018) { - /* Additional register addressing bit (64 VSX vs 32 FPR/GPR */ + unsigned int elsize; + + /* Additional register addressing bit (64 VSX vs 32 FPR/GPR) */ reg |= (instruction & 0x1) << 5; /* Simple inline decoder instead of a table */ + /* VSX has only 8 and 16 byte memory accesses */ + nb = 8; if (instruction & 0x200) nb = 16; - else if (instruction & 0x080) - nb = 8; - else - nb = 4; + + /* Vector stores in little-endian mode swap individual + elements, so process them separately */ + elsize = 4; + if (instruction & 0x80) + elsize = 8; + flags = 0; + if (regs->msr & MSR_LE) + flags |= SW; if (instruction & 0x100) flags |= ST; if (instruction & 0x040) @@ -787,7 +816,7 @@ nb = 8; } PPC_WARN_EMULATED(vsx); - return emulate_vsx(addr, reg, areg, regs, flags, nb); + return emulate_vsx(addr, reg, areg, regs, flags, nb, elsize); } #endif /* A size of 0 indicates an instruction we don't support, with --- linux-2.6.32.orig/arch/powerpc/kernel/entry_64.S +++ linux-2.6.32/arch/powerpc/kernel/entry_64.S @@ -556,15 +556,6 @@ 2: TRACE_AND_RESTORE_IRQ(r5); -#ifdef CONFIG_PERF_EVENTS - /* check paca->perf_event_pending if we're enabling ints */ - lbz r3,PACAPERFPEND(r13) - and. r3,r3,r5 - beq 27f - bl .perf_event_do_pending -27: -#endif /* CONFIG_PERF_EVENTS */ - /* extract EE bit and use it to restore paca->hard_enabled */ ld r3,_MSR(r1) rldicl r4,r3,49,63 /* r0 = (r3 >> 15) & 1 */ --- linux-2.6.32.orig/arch/powerpc/include/asm/elf.h +++ linux-2.6.32/arch/powerpc/include/asm/elf.h @@ -236,14 +236,10 @@ #ifdef __powerpc64__ # define SET_PERSONALITY(ex) \ do { \ - unsigned long new_flags = 0; \ if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ - new_flags = _TIF_32BIT; \ - if ((current_thread_info()->flags & _TIF_32BIT) \ - != new_flags) \ - set_thread_flag(TIF_ABI_PENDING); \ + set_thread_flag(TIF_32BIT); \ else \ - clear_thread_flag(TIF_ABI_PENDING); \ + clear_thread_flag(TIF_32BIT); \ if (personality(current->personality) != PER_LINUX32) \ set_personality(PER_LINUX | \ (current->personality & (~PER_MASK))); \ --- linux-2.6.32.orig/arch/powerpc/include/asm/hw_irq.h +++ linux-2.6.32/arch/powerpc/include/asm/hw_irq.h @@ -135,43 +135,5 @@ */ struct irq_chip; -#ifdef CONFIG_PERF_EVENTS - -#ifdef CONFIG_PPC64 -static inline unsigned long test_perf_event_pending(void) -{ - unsigned long x; - - asm volatile("lbz %0,%1(13)" - : "=r" (x) - : "i" (offsetof(struct paca_struct, perf_event_pending))); - return x; -} - -static inline void set_perf_event_pending(void) -{ - asm volatile("stb %0,%1(13)" : : - "r" (1), - "i" (offsetof(struct paca_struct, perf_event_pending))); -} - -static inline void clear_perf_event_pending(void) -{ - asm volatile("stb %0,%1(13)" : : - "r" (0), - "i" (offsetof(struct paca_struct, perf_event_pending))); -} -#endif /* CONFIG_PPC64 */ - -#else /* CONFIG_PERF_EVENTS */ - -static inline unsigned long test_perf_event_pending(void) -{ - return 0; -} - -static inline void clear_perf_event_pending(void) {} -#endif /* CONFIG_PERF_EVENTS */ - #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_HW_IRQ_H */ --- linux-2.6.32.orig/arch/powerpc/include/asm/module.h +++ linux-2.6.32/arch/powerpc/include/asm/module.h @@ -87,5 +87,10 @@ void sort_ex_table(struct exception_table_entry *start, struct exception_table_entry *finish); +#ifdef CONFIG_MODVERSIONS +#define ARCH_RELOCATES_KCRCTAB + +extern const unsigned long reloc_start[]; +#endif #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_MODULE_H */ --- linux-2.6.32.orig/arch/powerpc/include/asm/thread_info.h +++ linux-2.6.32/arch/powerpc/include/asm/thread_info.h @@ -111,7 +111,6 @@ #define TIF_NOTIFY_RESUME 13 /* callback before returning to user */ #define TIF_FREEZE 14 /* Freezing for suspend */ #define TIF_RUNLATCH 15 /* Is the runlatch enabled? */ -#define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */ /* as above, but as bit values */ #define _TIF_SYSCALL_TRACE (1<wait, irqfd_wakeup); init_poll_funcptr(&irqfd->pt, irqfd_ptable_queue_proc); + spin_lock_irq(&kvm->irqfds.lock); + + ret = 0; + list_for_each_entry(tmp, &kvm->irqfds.items, list) { + if (irqfd->eventfd != tmp->eventfd) + continue; + /* This fd is used for another irq already. */ + ret = -EBUSY; + spin_unlock_irq(&kvm->irqfds.lock); + goto fail; + } + events = file->f_op->poll(file, &irqfd->pt); - spin_lock_irq(&kvm->irqfds.lock); list_add_tail(&irqfd->list, &kvm->irqfds.items); spin_unlock_irq(&kvm->irqfds.lock); --- linux-2.6.32.orig/virt/kvm/kvm_main.c +++ linux-2.6.32/virt/kvm/kvm_main.c @@ -1226,7 +1226,7 @@ /* Allocate page dirty bitmap if needed */ if ((new.flags & KVM_MEM_LOG_DIRTY_PAGES) && !new.dirty_bitmap) { - unsigned dirty_bytes = ALIGN(npages, BITS_PER_LONG) / 8; + unsigned long dirty_bytes = kvm_dirty_bitmap_bytes(&new); new.dirty_bitmap = vmalloc(dirty_bytes); if (!new.dirty_bitmap) @@ -1309,7 +1309,7 @@ { struct kvm_memory_slot *memslot; int r, i; - int n; + unsigned long n; unsigned long any = 0; r = -EINVAL; @@ -1321,7 +1321,7 @@ if (!memslot->dirty_bitmap) goto out; - n = ALIGN(memslot->npages, BITS_PER_LONG) / 8; + n = kvm_dirty_bitmap_bytes(memslot); for (i = 0; !any && i < n/sizeof(long); ++i) any = memslot->dirty_bitmap[i]; @@ -1663,10 +1663,13 @@ memslot = gfn_to_memslot_unaliased(kvm, gfn); if (memslot && memslot->dirty_bitmap) { unsigned long rel_gfn = gfn - memslot->base_gfn; + unsigned long *p = memslot->dirty_bitmap + + rel_gfn / BITS_PER_LONG; + int offset = rel_gfn % BITS_PER_LONG; /* avoid RMW */ - if (!test_bit(rel_gfn, memslot->dirty_bitmap)) - set_bit(rel_gfn, memslot->dirty_bitmap); + if (!test_bit(offset, p)) + set_bit(offset, p); } } @@ -1705,6 +1708,21 @@ } EXPORT_SYMBOL_GPL(kvm_resched); +void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu) +{ + ktime_t expires; + DEFINE_WAIT(wait); + + prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE); + + /* Sleep for 100 us, and hope lock-holder got scheduled */ + expires = ktime_add_ns(ktime_get(), 100000UL); + schedule_hrtimeout(&expires, HRTIMER_MODE_ABS); + + finish_wait(&vcpu->wq, &wait); +} +EXPORT_SYMBOL_GPL(kvm_vcpu_on_spin); + static int kvm_vcpu_fault(struct vm_area_struct *vma, struct vm_fault *vmf) { struct kvm_vcpu *vcpu = vma->vm_file->private_data; --- linux-2.6.32.orig/virt/kvm/irq_comm.c +++ linux-2.6.32/virt/kvm/irq_comm.c @@ -205,16 +205,17 @@ int irq_source_id; mutex_lock(&kvm->irq_lock); - irq_source_id = find_first_zero_bit(bitmap, - sizeof(kvm->arch.irq_sources_bitmap)); + irq_source_id = find_first_zero_bit(bitmap, BITS_PER_LONG); - if (irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) { + if (irq_source_id >= BITS_PER_LONG) { printk(KERN_WARNING "kvm: exhaust allocatable IRQ sources!\n"); - return -EFAULT; + irq_source_id = -EFAULT; + goto unlock; } ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID); set_bit(irq_source_id, bitmap); +unlock: mutex_unlock(&kvm->irq_lock); return irq_source_id; @@ -228,13 +229,17 @@ mutex_lock(&kvm->irq_lock); if (irq_source_id < 0 || - irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) { + irq_source_id >= BITS_PER_LONG) { printk(KERN_ERR "kvm: IRQ source ID out of range!\n"); - return; + goto unlock; } + clear_bit(irq_source_id, &kvm->arch.irq_sources_bitmap); + if (!irqchip_in_kernel(kvm)) + goto unlock; + for (i = 0; i < KVM_IOAPIC_NUM_PINS; i++) clear_bit(irq_source_id, &kvm->arch.irq_states[i]); - clear_bit(irq_source_id, &kvm->arch.irq_sources_bitmap); +unlock: mutex_unlock(&kvm->irq_lock); } --- linux-2.6.32.orig/scripts/Kbuild.include +++ linux-2.6.32/scripts/Kbuild.include @@ -149,6 +149,12 @@ # $(Q)$(MAKE) $(build)=dir build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj +### +# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.modbuiltin obj= +# Usage: +# $(Q)$(MAKE) $(modbuiltin)=dir +modbuiltin := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.modbuiltin obj + # Prefix -I with $(srctree) if it is not an absolute path. # skip if -I has no parameter addtree = $(if $(patsubst -I%,%,$(1)), \ --- linux-2.6.32.orig/scripts/Makefile.modbuiltin +++ linux-2.6.32/scripts/Makefile.modbuiltin @@ -0,0 +1,55 @@ +# ========================================================================== +# Generating modules.builtin +# ========================================================================== + +src := $(obj) + +PHONY := __modbuiltin +__modbuiltin: + +-include include/config/auto.conf +# tristate.conf sets tristate variables to uppercase 'Y' or 'M' +# That way, we get the list of built-in modules in obj-Y +-include include/config/tristate.conf + +include scripts/Kbuild.include + +# The filename Kbuild has precedence over Makefile +kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) +kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) +include $(kbuild-file) + +include scripts/Makefile.lib +__subdir-Y := $(patsubst %/,%,$(filter %/, $(obj-Y))) +subdir-Y += $(__subdir-Y) +subdir-ym := $(sort $(subdir-y) $(subdir-Y) $(subdir-m)) +subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) +obj-Y := $(addprefix $(obj)/,$(obj-Y)) + +modbuiltin-subdirs := $(patsubst %,%/modules.builtin, $(subdir-ym)) +modbuiltin-mods := $(filter %.ko, $(obj-Y:.o=.ko)) +modbuiltin-target := $(obj)/modules.builtin + +__modbuiltin: $(modbuiltin-target) $(subdir-ym) + @: + +$(modbuiltin-target): $(subdir-ym) FORCE + $(Q)(for m in $(modbuiltin-mods); do echo kernel/$$m; done; \ + cat /dev/null $(modbuiltin-subdirs)) > $@ + +PHONY += FORCE + +FORCE: + +# Descending +# --------------------------------------------------------------------------- + +PHONY += $(subdir-ym) +$(subdir-ym): + $(Q)$(MAKE) $(modbuiltin)=$@ + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) --- linux-2.6.32.orig/scripts/kconfig/confdata.c +++ linux-2.6.32/scripts/kconfig/confdata.c @@ -677,7 +677,7 @@ struct symbol *sym; const char *str; const char *name; - FILE *out, *out_h; + FILE *out, *tristate, *out_h; time_t now; int i, l; @@ -692,9 +692,16 @@ if (!out) return 1; + tristate = fopen(".tmpconfig_tristate", "w"); + if (!tristate) { + fclose(out); + return 1; + } + out_h = fopen(".tmpconfig.h", "w"); if (!out_h) { fclose(out); + fclose(tristate); return 1; } @@ -707,6 +714,9 @@ "# %s" "#\n", sym_get_string_value(sym), ctime(&now)); + fprintf(tristate, "#\n" + "# Automatically generated - do not edit\n" + "\n"); fprintf(out_h, "/*\n" " * Automatically generated C config: don't edit\n" " * Linux kernel version: %s\n" @@ -727,10 +737,14 @@ break; case mod: fprintf(out, "CONFIG_%s=m\n", sym->name); + fprintf(tristate, "CONFIG_%s=M\n", sym->name); fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name); break; case yes: fprintf(out, "CONFIG_%s=y\n", sym->name); + if (sym->type == S_TRISTATE) + fprintf(tristate, "CONFIG_%s=Y\n", + sym->name); fprintf(out_h, "#define CONFIG_%s 1\n", sym->name); break; } @@ -772,6 +786,7 @@ } } fclose(out); + fclose(tristate); fclose(out_h); name = getenv("KCONFIG_AUTOHEADER"); @@ -779,6 +794,11 @@ name = "include/linux/autoconf.h"; if (rename(".tmpconfig.h", name)) return 1; + name = getenv("KCONFIG_TRISTATE"); + if (!name) + name = "include/config/tristate.conf"; + if (rename(".tmpconfig_tristate", name)) + return 1; name = conf_get_autoconfig_name(); /* * This must be the last step, kbuild has a dependency on auto.conf --- linux-2.6.32.orig/init/version.c +++ linux-2.6.32/init/version.c @@ -39,7 +39,11 @@ /* FIXED STRINGS! Don't touch! */ const char linux_banner[] = "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" - LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; + LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION +#ifdef CONFIG_VERSION_SIGNATURE + " (" CONFIG_VERSION_SIGNATURE ")" +#endif + "\n"; const char linux_proc_banner[] = "%s version %s" --- linux-2.6.32.orig/init/initramfs.c +++ linux-2.6.32/init/initramfs.c @@ -8,6 +8,7 @@ #include #include #include +#include static __initdata char *message; static void __init error(char *x) @@ -455,7 +456,8 @@ compress_name); message = msg_buf; } - } + } else + error("junk in compressed archive"); if (state != Reset) error("junk in compressed archive"); this_header = saved_offset + my_inptr; @@ -565,7 +567,9 @@ } #endif -static int __init populate_rootfs(void) +LIST_HEAD(populate_rootfs_domain); + +static void __init async_populate_rootfs(void) { char *err = unpack_to_rootfs(__initramfs_start, __initramfs_end - __initramfs_start); @@ -579,7 +583,7 @@ initrd_end - initrd_start); if (!err) { free_initrd(); - return 0; + return; } else { clean_rootfs(); unpack_to_rootfs(__initramfs_start, @@ -603,6 +607,25 @@ free_initrd(); #endif } - return 0; + return; +} + +static int __initdata rootfs_populated; + +static int __init populate_rootfs_early(void) +{ + if (num_online_cpus() > 1) { + rootfs_populated = 1; + async_schedule_domain(async_populate_rootfs, NULL, + &populate_rootfs_domain); + } } +static int __init populate_rootfs(void) +{ + if (!rootfs_populated) + async_schedule_domain(async_populate_rootfs, NULL, + &populate_rootfs_domain); +} + +earlyrootfs_initcall(populate_rootfs_early); rootfs_initcall(populate_rootfs); --- linux-2.6.32.orig/init/Kconfig +++ linux-2.6.32/init/Kconfig @@ -166,6 +166,15 @@ endchoice +config VERSION_SIGNATURE + string "Arbitrary version signature" + help + This string will be created in a file, /proc/version_signature. It + is useful in determining arbitrary data about your kernel. For instance, + if you have several kernels of the same version, but need to keep track + of a revision of the same kernel, but not affect it's ability to load + compatible modules, this is the easiest way to do that. + config SWAP bool "Support for paging of anonymous memory (swap)" depends on MMU && BLOCK --- linux-2.6.32.orig/init/calibrate.c +++ linux-2.6.32/init/calibrate.c @@ -123,23 +123,26 @@ { unsigned long ticks, loopbit; int lps_precision = LPS_PREC; + static bool printed; if (preset_lpj) { loops_per_jiffy = preset_lpj; - printk(KERN_INFO - "Calibrating delay loop (skipped) preset value.. "); - } else if ((smp_processor_id() == 0) && lpj_fine) { + if (!printed) + pr_info("Calibrating delay loop (skipped) " + "preset value.. "); + } else if ((!printed) && lpj_fine) { loops_per_jiffy = lpj_fine; - printk(KERN_INFO - "Calibrating delay loop (skipped), " + pr_info("Calibrating delay loop (skipped), " "value calculated using timer frequency.. "); } else if ((loops_per_jiffy = calibrate_delay_direct()) != 0) { - printk(KERN_INFO - "Calibrating delay using timer specific routine.. "); + if (!printed) + pr_info("Calibrating delay using timer " + "specific routine.. "); } else { loops_per_jiffy = (1<<12); - printk(KERN_INFO "Calibrating delay loop... "); + if (!printed) + pr_info("Calibrating delay loop... "); while ((loops_per_jiffy <<= 1) != 0) { /* wait for "start of" clock tick */ ticks = jiffies; @@ -170,7 +173,10 @@ loops_per_jiffy &= ~loopbit; } } - printk(KERN_CONT "%lu.%02lu BogoMIPS (lpj=%lu)\n", + if (!printed) + pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n", loops_per_jiffy/(500000/HZ), (loops_per_jiffy/(5000/HZ)) % 100, loops_per_jiffy); + + printed = true; } --- linux-2.6.32.orig/init/main.c +++ linux-2.6.32/init/main.c @@ -234,7 +234,7 @@ static int __init quiet_kernel(char *str) { - console_loglevel = 4; + console_loglevel = 2; return 0; } @@ -369,12 +369,6 @@ { unsigned int cpu; - /* - * Set up the current CPU as possible to migrate to. - * The other ones will be done by cpu_up/cpu_down() - */ - set_cpu_active(smp_processor_id(), true); - /* FIXME: This should be done in userspace --RR */ for_each_present_cpu(cpu) { if (num_online_cpus() >= setup_max_cpus) @@ -486,6 +480,7 @@ int cpu = smp_processor_id(); /* Mark the boot cpu "present", "online" etc for SMP and UP case */ set_cpu_online(cpu, true); + set_cpu_active(cpu, true); set_cpu_present(cpu, true); set_cpu_possible(cpu, true); } @@ -851,7 +846,7 @@ /* * init can allocate pages on any node */ - set_mems_allowed(node_possible_map); + set_mems_allowed(node_states[N_HIGH_MEMORY]); /* * init can run on any cpu. */ @@ -879,6 +874,12 @@ do_basic_setup(); /* + * We need to ensure that the filesystem is ready by this point, wait for + * async_populate_rootfs to complete. + */ + async_synchronize_full_domain(&populate_rootfs_domain); + + /* * check if there is an early userspace init. If yes, let it do all * the work */ --- linux-2.6.32.orig/mm/mempolicy.c +++ linux-2.6.32/mm/mempolicy.c @@ -2122,8 +2122,8 @@ char *rest = nodelist; while (isdigit(*rest)) rest++; - if (!*rest) - err = 0; + if (*rest) + goto out; } break; case MPOL_INTERLEAVE: @@ -2132,7 +2132,6 @@ */ if (!nodelist) nodes = node_states[N_HIGH_MEMORY]; - err = 0; break; case MPOL_LOCAL: /* @@ -2142,11 +2141,19 @@ goto out; mode = MPOL_PREFERRED; break; - - /* - * case MPOL_BIND: mpol_new() enforces non-empty nodemask. - * case MPOL_DEFAULT: mpol_new() enforces empty nodemask, ignores flags. - */ + case MPOL_DEFAULT: + /* + * Insist on a empty nodelist + */ + if (!nodelist) + err = 0; + goto out; + case MPOL_BIND: + /* + * Insist on a nodelist + */ + if (!nodelist) + goto out; } mode_flags = 0; @@ -2160,13 +2167,14 @@ else if (!strcmp(flags, "relative")) mode_flags |= MPOL_F_RELATIVE_NODES; else - err = 1; + goto out; } new = mpol_new(mode, mode_flags, &nodes); if (IS_ERR(new)) - err = 1; - else { + goto out; + + { int ret; NODEMASK_SCRATCH(scratch); if (scratch) { @@ -2177,13 +2185,15 @@ ret = -ENOMEM; NODEMASK_SCRATCH_FREE(scratch); if (ret) { - err = 1; mpol_put(new); - } else if (no_context) { - /* save for contextualization */ - new->w.user_nodemask = nodes; + goto out; } } + err = 0; + if (no_context) { + /* save for contextualization */ + new->w.user_nodemask = nodes; + } out: /* Restore string for error message */ --- linux-2.6.32.orig/mm/page_alloc.c +++ linux-2.6.32/mm/page_alloc.c @@ -559,8 +559,9 @@ page = list_entry(list->prev, struct page, lru); /* must delete as __free_one_page list manipulates */ list_del(&page->lru); - __free_one_page(page, zone, 0, migratetype); - trace_mm_page_pcpu_drain(page, 0, migratetype); + /* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */ + __free_one_page(page, zone, 0, page_private(page)); + trace_mm_page_pcpu_drain(page, 0, page_private(page)); } while (--count && --batch_free && !list_empty(list)); } spin_unlock(&zone->lock); @@ -1225,10 +1226,10 @@ } spin_lock_irqsave(&zone->lock, flags); page = __rmqueue(zone, order, migratetype); - __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order)); spin_unlock(&zone->lock); if (!page) goto failed; + __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order)); } __count_zone_vm_events(PGALLOC, zone, 1 << order); --- linux-2.6.32.orig/mm/readahead.c +++ linux-2.6.32/mm/readahead.c @@ -501,6 +501,12 @@ if (!ra->ra_pages) return; + /* be dumb */ + if (filp && (filp->f_mode & FMODE_RANDOM)) { + force_page_cache_readahead(mapping, filp, offset, req_size); + return; + } + /* do read-ahead */ ondemand_readahead(mapping, ra, filp, false, offset, req_size); } @@ -547,5 +553,17 @@ /* do read-ahead */ ondemand_readahead(mapping, ra, filp, true, offset, req_size); + +#ifdef CONFIG_BLOCK + /* + * Normally the current page is !uptodate and lock_page() will be + * immediately called to implicitly unplug the device. However this + * is not always true for RAID conifgurations, where data arrives + * not strictly in their submission order. In this case we need to + * explicitly kick off the IO. + */ + if (PageUptodate(page)) + blk_run_backing_dev(mapping->backing_dev_info, NULL); +#endif } EXPORT_SYMBOL_GPL(page_cache_async_readahead); --- linux-2.6.32.orig/mm/vmscan.c +++ linux-2.6.32/mm/vmscan.c @@ -1464,20 +1464,26 @@ return low; } +static int inactive_list_is_low(struct zone *zone, struct scan_control *sc, + int file) +{ + if (file) + return inactive_file_is_low(zone, sc); + else + return inactive_anon_is_low(zone, sc); +} + static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, struct zone *zone, struct scan_control *sc, int priority) { int file = is_file_lru(lru); - if (lru == LRU_ACTIVE_FILE && inactive_file_is_low(zone, sc)) { - shrink_active_list(nr_to_scan, zone, sc, priority, file); + if (is_active_lru(lru)) { + if (inactive_list_is_low(zone, sc, file)) + shrink_active_list(nr_to_scan, zone, sc, priority, file); return 0; } - if (lru == LRU_ACTIVE_ANON && inactive_anon_is_low(zone, sc)) { - shrink_active_list(nr_to_scan, zone, sc, priority, file); - return 0; - } return shrink_inactive_list(nr_to_scan, zone, sc, priority, file); } --- linux-2.6.32.orig/mm/truncate.c +++ linux-2.6.32/mm/truncate.c @@ -516,22 +516,20 @@ */ void truncate_pagecache(struct inode *inode, loff_t old, loff_t new) { - if (new < old) { - struct address_space *mapping = inode->i_mapping; + struct address_space *mapping = inode->i_mapping; - /* - * unmap_mapping_range is called twice, first simply for - * efficiency so that truncate_inode_pages does fewer - * single-page unmaps. However after this first call, and - * before truncate_inode_pages finishes, it is possible for - * private pages to be COWed, which remain after - * truncate_inode_pages finishes, hence the second - * unmap_mapping_range call must be made for correctness. - */ - unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); - truncate_inode_pages(mapping, new); - unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); - } + /* + * unmap_mapping_range is called twice, first simply for + * efficiency so that truncate_inode_pages does fewer + * single-page unmaps. However after this first call, and + * before truncate_inode_pages finishes, it is possible for + * private pages to be COWed, which remain after + * truncate_inode_pages finishes, hence the second + * unmap_mapping_range call must be made for correctness. + */ + unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); + truncate_inode_pages(mapping, new); + unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); } EXPORT_SYMBOL(truncate_pagecache); --- linux-2.6.32.orig/mm/vmalloc.c +++ linux-2.6.32/mm/vmalloc.c @@ -509,6 +509,9 @@ static atomic_t vmap_lazy_nr = ATOMIC_INIT(0); +/* for per-CPU blocks */ +static void purge_fragmented_blocks_allcpus(void); + /* * Purges all lazily-freed vmap areas. * @@ -539,6 +542,9 @@ } else spin_lock(&purge_lock); + if (sync) + purge_fragmented_blocks_allcpus(); + rcu_read_lock(); list_for_each_entry_rcu(va, &vmap_area_list, list) { if (va->flags & VM_LAZY_FREE) { @@ -555,10 +561,8 @@ } rcu_read_unlock(); - if (nr) { - BUG_ON(nr > atomic_read(&vmap_lazy_nr)); + if (nr) atomic_sub(nr, &vmap_lazy_nr); - } if (nr || force_flush) flush_tlb_kernel_range(*start, *end); @@ -669,8 +673,6 @@ struct vmap_block_queue { spinlock_t lock; struct list_head free; - struct list_head dirty; - unsigned int nr_dirty; }; struct vmap_block { @@ -680,10 +682,9 @@ unsigned long free, dirty; DECLARE_BITMAP(alloc_map, VMAP_BBMAP_BITS); DECLARE_BITMAP(dirty_map, VMAP_BBMAP_BITS); - union { - struct list_head free_list; - struct rcu_head rcu_head; - }; + struct list_head free_list; + struct rcu_head rcu_head; + struct list_head purge; }; /* Queue of free and dirty vmap blocks, for allocation and flushing purposes */ @@ -759,7 +760,7 @@ vbq = &get_cpu_var(vmap_block_queue); vb->vbq = vbq; spin_lock(&vbq->lock); - list_add(&vb->free_list, &vbq->free); + list_add_rcu(&vb->free_list, &vbq->free); spin_unlock(&vbq->lock); put_cpu_var(vmap_cpu_blocks); @@ -778,8 +779,6 @@ struct vmap_block *tmp; unsigned long vb_idx; - BUG_ON(!list_empty(&vb->free_list)); - vb_idx = addr_to_vb_idx(vb->va->va_start); spin_lock(&vmap_block_tree_lock); tmp = radix_tree_delete(&vmap_block_tree, vb_idx); @@ -790,12 +789,61 @@ call_rcu(&vb->rcu_head, rcu_free_vb); } +static void purge_fragmented_blocks(int cpu) +{ + LIST_HEAD(purge); + struct vmap_block *vb; + struct vmap_block *n_vb; + struct vmap_block_queue *vbq = &per_cpu(vmap_block_queue, cpu); + + rcu_read_lock(); + list_for_each_entry_rcu(vb, &vbq->free, free_list) { + + if (!(vb->free + vb->dirty == VMAP_BBMAP_BITS && vb->dirty != VMAP_BBMAP_BITS)) + continue; + + spin_lock(&vb->lock); + if (vb->free + vb->dirty == VMAP_BBMAP_BITS && vb->dirty != VMAP_BBMAP_BITS) { + vb->free = 0; /* prevent further allocs after releasing lock */ + vb->dirty = VMAP_BBMAP_BITS; /* prevent purging it again */ + bitmap_fill(vb->alloc_map, VMAP_BBMAP_BITS); + bitmap_fill(vb->dirty_map, VMAP_BBMAP_BITS); + spin_lock(&vbq->lock); + list_del_rcu(&vb->free_list); + spin_unlock(&vbq->lock); + spin_unlock(&vb->lock); + list_add_tail(&vb->purge, &purge); + } else + spin_unlock(&vb->lock); + } + rcu_read_unlock(); + + list_for_each_entry_safe(vb, n_vb, &purge, purge) { + list_del(&vb->purge); + free_vmap_block(vb); + } +} + +static void purge_fragmented_blocks_thiscpu(void) +{ + purge_fragmented_blocks(smp_processor_id()); +} + +static void purge_fragmented_blocks_allcpus(void) +{ + int cpu; + + for_each_possible_cpu(cpu) + purge_fragmented_blocks(cpu); +} + static void *vb_alloc(unsigned long size, gfp_t gfp_mask) { struct vmap_block_queue *vbq; struct vmap_block *vb; unsigned long addr = 0; unsigned int order; + int purge = 0; BUG_ON(size & ~PAGE_MASK); BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC); @@ -808,24 +856,37 @@ int i; spin_lock(&vb->lock); + if (vb->free < 1UL << order) + goto next; i = bitmap_find_free_region(vb->alloc_map, VMAP_BBMAP_BITS, order); - if (i >= 0) { - addr = vb->va->va_start + (i << PAGE_SHIFT); - BUG_ON(addr_to_vb_idx(addr) != - addr_to_vb_idx(vb->va->va_start)); - vb->free -= 1UL << order; - if (vb->free == 0) { - spin_lock(&vbq->lock); - list_del_init(&vb->free_list); - spin_unlock(&vbq->lock); + if (i < 0) { + if (vb->free + vb->dirty == VMAP_BBMAP_BITS) { + /* fragmented and no outstanding allocations */ + BUG_ON(vb->dirty != VMAP_BBMAP_BITS); + purge = 1; } - spin_unlock(&vb->lock); - break; + goto next; + } + addr = vb->va->va_start + (i << PAGE_SHIFT); + BUG_ON(addr_to_vb_idx(addr) != + addr_to_vb_idx(vb->va->va_start)); + vb->free -= 1UL << order; + if (vb->free == 0) { + spin_lock(&vbq->lock); + list_del_rcu(&vb->free_list); + spin_unlock(&vbq->lock); } spin_unlock(&vb->lock); + break; +next: + spin_unlock(&vb->lock); } + + if (purge) + purge_fragmented_blocks_thiscpu(); + put_cpu_var(vmap_cpu_blocks); rcu_read_unlock(); @@ -862,11 +923,11 @@ BUG_ON(!vb); spin_lock(&vb->lock); - bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order); + BUG_ON(bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order)); vb->dirty += 1UL << order; if (vb->dirty == VMAP_BBMAP_BITS) { - BUG_ON(vb->free || !list_empty(&vb->free_list)); + BUG_ON(vb->free); spin_unlock(&vb->lock); free_vmap_block(vb); } else @@ -1035,8 +1096,6 @@ vbq = &per_cpu(vmap_block_queue, i); spin_lock_init(&vbq->lock); INIT_LIST_HEAD(&vbq->free); - INIT_LIST_HEAD(&vbq->dirty); - vbq->nr_dirty = 0; } /* Import existing vmlist entries. */ @@ -1993,6 +2052,7 @@ } EXPORT_SYMBOL_GPL(free_vm_area); +#ifndef CONFIG_HAVE_LEGACY_PER_CPU_AREA static struct vmap_area *node_to_va(struct rb_node *n) { return n ? rb_entry(n, struct vmap_area, rb_node) : NULL; @@ -2257,6 +2317,7 @@ kfree(vms); return NULL; } +#endif /** * pcpu_free_vm_areas - free vmalloc areas for percpu allocator --- linux-2.6.32.orig/mm/pagewalk.c +++ linux-2.6.32/mm/pagewalk.c @@ -1,6 +1,7 @@ #include #include #include +#include static int walk_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end, struct mm_walk *walk) @@ -107,6 +108,7 @@ pgd_t *pgd; unsigned long next; int err = 0; + struct vm_area_struct *vma; if (addr >= end) return err; @@ -117,11 +119,22 @@ pgd = pgd_offset(walk->mm, addr); do { next = pgd_addr_end(addr, end); + + /* skip hugetlb vma to avoid hugepage PMD being cleared + * in pmd_none_or_clear_bad(). */ + vma = find_vma(walk->mm, addr); + if (vma && is_vm_hugetlb_page(vma)) { + if (vma->vm_end < next) + next = vma->vm_end; + continue; + } + if (pgd_none_or_clear_bad(pgd)) { if (walk->pte_hole) err = walk->pte_hole(addr, next, walk); if (err) break; + pgd++; continue; } if (walk->pgd_entry) @@ -131,7 +144,8 @@ err = walk_pud_range(pgd, addr, next, walk); if (err) break; - } while (pgd++, addr = next, addr != end); + pgd++; + } while (addr = next, addr != end); return err; } --- linux-2.6.32.orig/mm/filemap.c +++ linux-2.6.32/mm/filemap.c @@ -1655,14 +1655,15 @@ static struct page *__read_cache_page(struct address_space *mapping, pgoff_t index, int (*filler)(void *,struct page*), - void *data) + void *data, + gfp_t gfp) { struct page *page; int err; repeat: page = find_get_page(mapping, index); if (!page) { - page = page_cache_alloc_cold(mapping); + page = __page_cache_alloc(gfp | __GFP_COLD); if (!page) return ERR_PTR(-ENOMEM); err = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL); @@ -1682,31 +1683,18 @@ return page; } -/** - * read_cache_page_async - read into page cache, fill it if needed - * @mapping: the page's address_space - * @index: the page index - * @filler: function to perform the read - * @data: destination for read data - * - * Same as read_cache_page, but don't wait for page to become unlocked - * after submitting it to the filler. - * - * Read into the page cache. If a page already exists, and PageUptodate() is - * not set, try to fill the page but don't wait for it to become unlocked. - * - * If the page does not get brought uptodate, return -EIO. - */ -struct page *read_cache_page_async(struct address_space *mapping, +static struct page *do_read_cache_page(struct address_space *mapping, pgoff_t index, int (*filler)(void *,struct page*), - void *data) + void *data, + gfp_t gfp) + { struct page *page; int err; retry: - page = __read_cache_page(mapping, index, filler, data); + page = __read_cache_page(mapping, index, filler, data, gfp); if (IS_ERR(page)) return page; if (PageUptodate(page)) @@ -1731,8 +1719,67 @@ mark_page_accessed(page); return page; } + +/** + * read_cache_page_async - read into page cache, fill it if needed + * @mapping: the page's address_space + * @index: the page index + * @filler: function to perform the read + * @data: destination for read data + * + * Same as read_cache_page, but don't wait for page to become unlocked + * after submitting it to the filler. + * + * Read into the page cache. If a page already exists, and PageUptodate() is + * not set, try to fill the page but don't wait for it to become unlocked. + * + * If the page does not get brought uptodate, return -EIO. + */ +struct page *read_cache_page_async(struct address_space *mapping, + pgoff_t index, + int (*filler)(void *,struct page*), + void *data) +{ + return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping)); +} EXPORT_SYMBOL(read_cache_page_async); +static struct page *wait_on_page_read(struct page *page) +{ + if (!IS_ERR(page)) { + wait_on_page_locked(page); + if (!PageUptodate(page)) { + page_cache_release(page); + page = ERR_PTR(-EIO); + } + } + return page; +} + +/** + * read_cache_page_gfp - read into page cache, using specified page allocation flags. + * @mapping: the page's address_space + * @index: the page index + * @gfp: the page allocator flags to use if allocating + * + * This is the same as "read_mapping_page(mapping, index, NULL)", but with + * any new page allocations done using the specified allocation flags. Note + * that the Radix tree operations will still use GFP_KERNEL, so you can't + * expect to do this atomically or anything like that - but you can pass in + * other page requirements. + * + * If the page does not get brought uptodate, return -EIO. + */ +struct page *read_cache_page_gfp(struct address_space *mapping, + pgoff_t index, + gfp_t gfp) +{ + filler_t *filler = (filler_t *)mapping->a_ops->readpage; + + return wait_on_page_read(do_read_cache_page(mapping, index, filler, NULL, gfp)); +} +EXPORT_SYMBOL(read_cache_page_gfp); + /** * read_cache_page - read into page cache, fill it if needed * @mapping: the page's address_space @@ -1750,18 +1797,7 @@ int (*filler)(void *,struct page*), void *data) { - struct page *page; - - page = read_cache_page_async(mapping, index, filler, data); - if (IS_ERR(page)) - goto out; - wait_on_page_locked(page); - if (!PageUptodate(page)) { - page_cache_release(page); - page = ERR_PTR(-EIO); - } - out: - return page; + return wait_on_page_read(read_cache_page_async(mapping, index, filler, data)); } EXPORT_SYMBOL(read_cache_page); @@ -2217,6 +2253,9 @@ if (unlikely(status)) break; + if (mapping_writably_mapped(mapping)) + flush_dcache_page(page); + pagefault_disable(); copied = iov_iter_copy_from_user_atomic(page, i, offset, bytes); pagefault_enable(); --- linux-2.6.32.orig/mm/util.c +++ linux-2.6.32/mm/util.c @@ -4,6 +4,10 @@ #include #include #include +#include +#include +#include +#include #include #define CREATE_TRACE_POINTS @@ -268,6 +272,46 @@ } EXPORT_SYMBOL_GPL(get_user_pages_fast); +SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, + unsigned long, prot, unsigned long, flags, + unsigned long, fd, unsigned long, pgoff) +{ + struct file * file = NULL; + unsigned long retval = -EBADF; + + if (!(flags & MAP_ANONYMOUS)) { + if (unlikely(flags & MAP_HUGETLB)) + return -EINVAL; + file = fget(fd); + if (!file) + goto out; + } else if (flags & MAP_HUGETLB) { + struct user_struct *user = NULL; + /* + * VM_NORESERVE is used because the reservations will be + * taken when vm_ops->mmap() is called + * A dummy user value is used because we are not locking + * memory so no accounting is necessary + */ + len = ALIGN(len, huge_page_size(&default_hstate)); + file = hugetlb_file_setup(HUGETLB_ANON_FILE, len, VM_NORESERVE, + &user, HUGETLB_ANONHUGE_INODE); + if (IS_ERR(file)) + return PTR_ERR(file); + } + + flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); + + down_write(¤t->mm->mmap_sem); + retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); + up_write(¤t->mm->mmap_sem); + + if (file) + fput(file); +out: + return retval; +} + /* Tracepoints definitions. */ EXPORT_TRACEPOINT_SYMBOL(kmalloc); EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc); --- linux-2.6.32.orig/mm/internal.h +++ linux-2.6.32/mm/internal.h @@ -107,9 +107,10 @@ } /* - * must be called with vma's mmap_sem held for read, and page locked. + * must be called with vma's mmap_sem held for read or write, and page locked. */ extern void mlock_vma_page(struct page *page); +extern void munlock_vma_page(struct page *page); /* * Clear the page's PageMlocked(). This can be useful in a situation where --- linux-2.6.32.orig/mm/fadvise.c +++ linux-2.6.32/mm/fadvise.c @@ -77,12 +77,20 @@ switch (advice) { case POSIX_FADV_NORMAL: file->f_ra.ra_pages = bdi->ra_pages; + spin_lock(&file->f_lock); + file->f_mode &= ~FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_RANDOM: - file->f_ra.ra_pages = 0; + spin_lock(&file->f_lock); + file->f_mode |= FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_SEQUENTIAL: file->f_ra.ra_pages = bdi->ra_pages * 2; + spin_lock(&file->f_lock); + file->f_mode &= ~FMODE_RANDOM; + spin_unlock(&file->f_lock); break; case POSIX_FADV_WILLNEED: if (!mapping->a_ops->readpage) { --- linux-2.6.32.orig/mm/mprotect.c +++ linux-2.6.32/mm/mprotect.c @@ -26,9 +26,14 @@ #include #include #include +#include #include #include +#ifndef arch_remove_exec_range +#define arch_remove_exec_range(mm, limit) do { ; } while (0) +#endif + #ifndef pgprot_modify static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) { @@ -139,7 +144,7 @@ struct mm_struct *mm = vma->vm_mm; unsigned long oldflags = vma->vm_flags; long nrpages = (end - start) >> PAGE_SHIFT; - unsigned long charged = 0; + unsigned long charged = 0, old_end = vma->vm_end; pgoff_t pgoff; int error; int dirty_accountable = 0; @@ -204,6 +209,9 @@ dirty_accountable = 1; } + if (oldflags & VM_EXEC) + arch_remove_exec_range(current->mm, old_end); + mmu_notifier_invalidate_range_start(mm, start, end); if (is_vm_hugetlb_page(vma)) hugetlb_change_protection(vma, start, end, vma->vm_page_prot); --- linux-2.6.32.orig/mm/mmap.c +++ linux-2.6.32/mm/mmap.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -45,6 +46,18 @@ #define arch_rebalance_pgtables(addr, len) (addr) #endif +/* No sane architecture will #define these to anything else */ +#ifndef arch_add_exec_range +#define arch_add_exec_range(mm, limit) do { ; } while (0) +#endif +#ifndef arch_flush_exec_range +#define arch_flush_exec_range(mm) do { ; } while (0) +#endif +#ifndef arch_remove_exec_range +#define arch_remove_exec_range(mm, limit) do { ; } while (0) +#endif + + static void unmap_region(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *prev, unsigned long start, unsigned long end); @@ -389,6 +402,8 @@ __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *prev, struct rb_node *rb_parent) { + if (vma->vm_flags & VM_EXEC) + arch_add_exec_range(mm, vma->vm_end); if (prev) { vma->vm_next = prev->vm_next; prev->vm_next = vma; @@ -491,6 +506,8 @@ rb_erase(&vma->vm_rb, &mm->mm_rb); if (mm->mmap_cache == vma) mm->mmap_cache = prev; + if (vma->vm_flags & VM_EXEC) + arch_remove_exec_range(mm, vma->vm_end); } /* @@ -798,6 +815,8 @@ } else /* cases 2, 5, 7 */ vma_adjust(prev, prev->vm_start, end, prev->vm_pgoff, NULL); + if (prev->vm_flags & VM_EXEC) + arch_add_exec_range(mm, prev->vm_end); return prev; } @@ -932,13 +951,9 @@ if (!(flags & MAP_FIXED)) addr = round_hint_to_min(addr); - error = arch_mmap_check(addr, len, flags); - if (error) - return error; - /* Careful about overflows.. */ len = PAGE_ALIGN(len); - if (!len || len > TASK_SIZE) + if (!len) return -ENOMEM; /* offset overflow? */ @@ -949,28 +964,11 @@ if (mm->map_count > sysctl_max_map_count) return -ENOMEM; - if (flags & MAP_HUGETLB) { - struct user_struct *user = NULL; - if (file) - return -EINVAL; - - /* - * VM_NORESERVE is used because the reservations will be - * taken when vm_ops->mmap() is called - * A dummy user value is used because we are not locking - * memory so no accounting is necessary - */ - len = ALIGN(len, huge_page_size(&default_hstate)); - file = hugetlb_file_setup(HUGETLB_ANON_FILE, len, VM_NORESERVE, - &user, HUGETLB_ANONHUGE_INODE); - if (IS_ERR(file)) - return PTR_ERR(file); - } - /* Obtain the address to map to. we verify (or select) it and ensure * that it represents a valid section of the address space. */ - addr = get_unmapped_area(file, addr, len, pgoff, flags); + addr = get_unmapped_area_prot(file, addr, len, pgoff, flags, + prot & PROT_EXEC); if (addr & ~PAGE_MASK) return addr; @@ -1453,13 +1451,23 @@ } unsigned long -get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, - unsigned long pgoff, unsigned long flags) +get_unmapped_area_prot(struct file *file, unsigned long addr, unsigned long len, + unsigned long pgoff, unsigned long flags, int exec) { unsigned long (*get_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); + unsigned long error = arch_mmap_check(addr, len, flags); + if (error) + return error; - get_area = current->mm->get_unmapped_area; + /* Careful about overflows.. */ + if (len > TASK_SIZE) + return -ENOMEM; + + if (exec && current->mm->get_unmapped_exec_area) + get_area = current->mm->get_unmapped_exec_area; + else + get_area = current->mm->get_unmapped_area; if (file && file->f_op && file->f_op->get_unmapped_area) get_area = file->f_op->get_unmapped_area; addr = get_area(file, addr, len, pgoff, flags); @@ -1473,8 +1481,81 @@ return arch_rebalance_pgtables(addr, len); } +EXPORT_SYMBOL(get_unmapped_area_prot); + +#define SHLIB_BASE 0x00110000 + +unsigned long +arch_get_unmapped_exec_area(struct file *filp, unsigned long addr0, + unsigned long len0, unsigned long pgoff, unsigned long flags) +{ + unsigned long addr = addr0, len = len0; + struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; + unsigned long tmp; + + if (len > TASK_SIZE) + return -ENOMEM; + + if (flags & MAP_FIXED) + return addr; + + if (!addr) { + addr = SHLIB_BASE; + if ((current->flags & PF_RANDOMIZE) && randomize_va_space) + addr = randomize_range(addr, 0x01000000, len); + } + + if (addr) { + addr = PAGE_ALIGN(addr); + vma = find_vma(mm, addr); + if (TASK_SIZE - len >= addr && + (!vma || addr + len <= vma->vm_start)) + return addr; + } + + addr = SHLIB_BASE; + for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { + /* At this point: (!vma || addr < vma->vm_end). */ + if (TASK_SIZE - len < addr) + return -ENOMEM; + + if (!vma || addr + len <= vma->vm_start) { + /* + * Must not let a PROT_EXEC mapping get into the + * brk area: + */ + if (addr + len > mm->brk) + goto failed; + + /* + * Up until the brk area we randomize addresses + * as much as possible: + */ + if ((current->flags & PF_RANDOMIZE) && + randomize_va_space && + addr >= 0x01000000) { + tmp = randomize_range(0x01000000, + PAGE_ALIGN(max(mm->start_brk, + (unsigned long)0x08000000)), len); + vma = find_vma(mm, tmp); + if (TASK_SIZE - len >= tmp && + (!vma || tmp + len <= vma->vm_start)) + return tmp; + } + /* + * Ok, randomization didnt work out - return + * the result of the linear search: + */ + return addr; + } + addr = vma->vm_end; + } + +failed: + return current->mm->get_unmapped_area(filp, addr0, len0, pgoff, flags); +} -EXPORT_SYMBOL(get_unmapped_area); /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) @@ -1549,6 +1630,14 @@ return prev ? prev->vm_next : vma; } +static int over_stack_limit(unsigned long sz) +{ + if (sz < EXEC_STACK_BIAS) + return 0; + return (sz - EXEC_STACK_BIAS) > + current->signal->rlim[RLIMIT_STACK].rlim_cur; +} + /* * Verify that the stack growth is acceptable and * update accounting. This is shared with both the @@ -1565,7 +1654,7 @@ return -ENOMEM; /* Stack limit test */ - if (size > rlim[RLIMIT_STACK].rlim_cur) + if (over_stack_limit(size)) return -ENOMEM; /* mlock limit tests */ @@ -1875,10 +1964,14 @@ if (new->vm_ops && new->vm_ops->open) new->vm_ops->open(new); - if (new_below) + if (new_below) { + unsigned long old_end = vma->vm_end; + vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff + ((addr - new->vm_start) >> PAGE_SHIFT), new); - else + if (vma->vm_flags & VM_EXEC) + arch_remove_exec_range(mm, old_end); + } else vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); return 0; @@ -2003,20 +2096,14 @@ if (!len) return addr; - if ((addr + len) > TASK_SIZE || (addr + len) < addr) - return -EINVAL; - - if (is_hugepage_only_range(mm, addr, len)) - return -EINVAL; - error = security_file_mmap(NULL, 0, 0, 0, addr, 1); if (error) return error; flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags; - error = arch_mmap_check(addr, len, flags); - if (error) + error = get_unmapped_area(NULL, addr, len, 0, MAP_FIXED); + if (error & ~PAGE_MASK) return error; /* @@ -2128,6 +2215,7 @@ free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0); tlb_finish_mmu(tlb, 0, end); + arch_flush_exec_range(mm); /* * Walk the list again, actually closing and freeing it, --- linux-2.6.32.orig/mm/mlock.c +++ linux-2.6.32/mm/mlock.c @@ -99,14 +99,14 @@ * not get another chance to clear PageMlocked. If we successfully * isolate the page and try_to_munlock() detects other VM_LOCKED vmas * mapping the page, it will restore the PageMlocked state, unless the page - * is mapped in a non-linear vma. So, we go ahead and SetPageMlocked(), + * is mapped in a non-linear vma. So, we go ahead and ClearPageMlocked(), * perhaps redundantly. * If we lose the isolation race, and the page is mapped by other VM_LOCKED * vmas, we'll detect this in vmscan--via try_to_munlock() or try_to_unmap() * either of which will restore the PageMlocked state by calling * mlock_vma_page() above, if it can grab the vma's mmap sem. */ -static void munlock_vma_page(struct page *page) +void munlock_vma_page(struct page *page) { BUG_ON(!PageLocked(page)); --- linux-2.6.32.orig/mm/mremap.c +++ linux-2.6.32/mm/mremap.c @@ -261,6 +261,137 @@ return new_addr; } +static struct vm_area_struct *vma_to_resize(unsigned long addr, + unsigned long old_len, unsigned long new_len, unsigned long *p) +{ + struct mm_struct *mm = current->mm; + struct vm_area_struct *vma = find_vma(mm, addr); + + if (!vma || vma->vm_start > addr) + goto Efault; + + if (is_vm_hugetlb_page(vma)) + goto Einval; + + /* We can't remap across vm area boundaries */ + if (old_len > vma->vm_end - addr) + goto Efault; + + if (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP)) { + if (new_len > old_len) + goto Efault; + } + + if (vma->vm_flags & VM_LOCKED) { + unsigned long locked, lock_limit; + locked = mm->locked_vm << PAGE_SHIFT; + lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur; + locked += new_len - old_len; + if (locked > lock_limit && !capable(CAP_IPC_LOCK)) + goto Eagain; + } + + if (!may_expand_vm(mm, (new_len - old_len) >> PAGE_SHIFT)) + goto Enomem; + + if (vma->vm_flags & VM_ACCOUNT) { + unsigned long charged = (new_len - old_len) >> PAGE_SHIFT; + if (security_vm_enough_memory(charged)) + goto Efault; + *p = charged; + } + + return vma; + +Efault: /* very odd choice for most of the cases, but... */ + return ERR_PTR(-EFAULT); +Einval: + return ERR_PTR(-EINVAL); +Enomem: + return ERR_PTR(-ENOMEM); +Eagain: + return ERR_PTR(-EAGAIN); +} + +static unsigned long mremap_to(unsigned long addr, + unsigned long old_len, unsigned long new_addr, + unsigned long new_len) +{ + struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; + unsigned long ret = -EINVAL; + unsigned long charged = 0; + unsigned long map_flags; + + if (new_addr & ~PAGE_MASK) + goto out; + + if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len) + goto out; + + /* Check if the location we're moving into overlaps the + * old location at all, and fail if it does. + */ + if ((new_addr <= addr) && (new_addr+new_len) > addr) + goto out; + + if ((addr <= new_addr) && (addr+old_len) > new_addr) + goto out; + + ret = security_file_mmap(NULL, 0, 0, 0, new_addr, 1); + if (ret) + goto out; + + ret = do_munmap(mm, new_addr, new_len); + if (ret) + goto out; + + if (old_len >= new_len) { + ret = do_munmap(mm, addr+new_len, old_len - new_len); + if (ret && old_len != new_len) + goto out; + old_len = new_len; + } + + vma = vma_to_resize(addr, old_len, new_len, &charged); + if (IS_ERR(vma)) { + ret = PTR_ERR(vma); + goto out; + } + + map_flags = MAP_FIXED; + if (vma->vm_flags & VM_MAYSHARE) + map_flags |= MAP_SHARED; + + ret = get_unmapped_area(vma->vm_file, new_addr, new_len, vma->vm_pgoff + + ((addr - vma->vm_start) >> PAGE_SHIFT), + map_flags); + if (ret & ~PAGE_MASK) + goto out1; + + ret = move_vma(vma, addr, old_len, new_len, new_addr); + if (!(ret & ~PAGE_MASK)) + goto out; +out1: + vm_unacct_memory(charged); + +out: + return ret; +} + +static int vma_expandable(struct vm_area_struct *vma, unsigned long delta) +{ + unsigned long end = vma->vm_end + delta; + if (end < vma->vm_end) /* overflow */ + return 0; + if (vma->vm_next && vma->vm_next->vm_start < end) /* intersection */ + return 0; + if (get_unmapped_area(NULL, vma->vm_start, end - vma->vm_start, + 0, MAP_FIXED) & ~PAGE_MASK) + return 0; + return 1; +} + /* * Expand (or shrink) an existing mapping, potentially moving it at the * same time (controlled by the MREMAP_MAYMOVE flag and available VM space) @@ -294,32 +425,10 @@ if (!new_len) goto out; - /* new_addr is only valid if MREMAP_FIXED is specified */ if (flags & MREMAP_FIXED) { - if (new_addr & ~PAGE_MASK) - goto out; - if (!(flags & MREMAP_MAYMOVE)) - goto out; - - if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len) - goto out; - - /* Check if the location we're moving into overlaps the - * old location at all, and fail if it does. - */ - if ((new_addr <= addr) && (new_addr+new_len) > addr) - goto out; - - if ((addr <= new_addr) && (addr+old_len) > new_addr) - goto out; - - ret = security_file_mmap(NULL, 0, 0, 0, new_addr, 1); - if (ret) - goto out; - - ret = do_munmap(mm, new_addr, new_len); - if (ret) - goto out; + if (flags & MREMAP_MAYMOVE) + ret = mremap_to(addr, old_len, new_addr, new_len); + goto out; } /* @@ -332,60 +441,23 @@ if (ret && old_len != new_len) goto out; ret = addr; - if (!(flags & MREMAP_FIXED) || (new_addr == addr)) - goto out; - old_len = new_len; + goto out; } /* - * Ok, we need to grow.. or relocate. + * Ok, we need to grow.. */ - ret = -EFAULT; - vma = find_vma(mm, addr); - if (!vma || vma->vm_start > addr) + vma = vma_to_resize(addr, old_len, new_len, &charged); + if (IS_ERR(vma)) { + ret = PTR_ERR(vma); goto out; - if (is_vm_hugetlb_page(vma)) { - ret = -EINVAL; - goto out; - } - /* We can't remap across vm area boundaries */ - if (old_len > vma->vm_end - addr) - goto out; - if (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP)) { - if (new_len > old_len) - goto out; - } - if (vma->vm_flags & VM_LOCKED) { - unsigned long locked, lock_limit; - locked = mm->locked_vm << PAGE_SHIFT; - lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur; - locked += new_len - old_len; - ret = -EAGAIN; - if (locked > lock_limit && !capable(CAP_IPC_LOCK)) - goto out; - } - if (!may_expand_vm(mm, (new_len - old_len) >> PAGE_SHIFT)) { - ret = -ENOMEM; - goto out; - } - - if (vma->vm_flags & VM_ACCOUNT) { - charged = (new_len - old_len) >> PAGE_SHIFT; - if (security_vm_enough_memory(charged)) - goto out_nc; } /* old_len exactly to the end of the area.. - * And we're not relocating the area. */ - if (old_len == vma->vm_end - addr && - !((flags & MREMAP_FIXED) && (addr != new_addr)) && - (old_len != new_len || !(flags & MREMAP_MAYMOVE))) { - unsigned long max_addr = TASK_SIZE; - if (vma->vm_next) - max_addr = vma->vm_next->vm_start; + if (old_len == vma->vm_end - addr) { /* can we just expand the current mapping? */ - if (max_addr - addr >= new_len) { + if (vma_expandable(vma, new_len - old_len)) { int pages = (new_len - old_len) >> PAGE_SHIFT; vma_adjust(vma, vma->vm_start, @@ -409,28 +481,27 @@ */ ret = -ENOMEM; if (flags & MREMAP_MAYMOVE) { - if (!(flags & MREMAP_FIXED)) { - unsigned long map_flags = 0; - if (vma->vm_flags & VM_MAYSHARE) - map_flags |= MAP_SHARED; - - new_addr = get_unmapped_area(vma->vm_file, 0, new_len, - vma->vm_pgoff, map_flags); - if (new_addr & ~PAGE_MASK) { - ret = new_addr; - goto out; - } - - ret = security_file_mmap(NULL, 0, 0, 0, new_addr, 1); - if (ret) - goto out; + unsigned long map_flags = 0; + if (vma->vm_flags & VM_MAYSHARE) + map_flags |= MAP_SHARED; + + new_addr = get_unmapped_area_prot(vma->vm_file, 0, new_len, + vma->vm_pgoff + + ((addr - vma->vm_start) >> PAGE_SHIFT), + map_flags, vma->vm_flags & VM_EXEC); + if (new_addr & ~PAGE_MASK) { + ret = new_addr; + goto out; } + + ret = security_file_mmap(NULL, 0, 0, 0, new_addr, 1); + if (ret) + goto out; ret = move_vma(vma, addr, old_len, new_len, new_addr); } out: if (ret & ~PAGE_MASK) vm_unacct_memory(charged); -out_nc: return ret; } --- linux-2.6.32.orig/mm/slab.c +++ linux-2.6.32/mm/slab.c @@ -971,13 +971,11 @@ if (limit > 1) limit = 12; - ac_ptr = kmalloc_node(memsize, gfp, node); + ac_ptr = kzalloc_node(memsize, gfp, node); if (ac_ptr) { for_each_node(i) { - if (i == node || !node_online(i)) { - ac_ptr[i] = NULL; + if (i == node || !node_online(i)) continue; - } ac_ptr[i] = alloc_arraycache(node, limit, 0xbaadf00d, gfp); if (!ac_ptr[i]) { for (i--; i >= 0; i--) --- linux-2.6.32.orig/mm/Kconfig +++ linux-2.6.32/mm/Kconfig @@ -227,6 +227,7 @@ config DEFAULT_MMAP_MIN_ADDR int "Low address space to protect from user allocation" + depends on MMU default 4096 help This is the portion of low virtual memory which should be protected --- linux-2.6.32.orig/mm/migrate.c +++ linux-2.6.32/mm/migrate.c @@ -953,6 +953,9 @@ goto out_pm; err = -ENODEV; + if (node < 0 || node >= MAX_NUMNODES) + goto out_pm; + if (!node_state(node, N_HIGH_MEMORY)) goto out_pm; --- linux-2.6.32.orig/mm/mincore.c +++ linux-2.6.32/mm/mincore.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -72,6 +73,42 @@ if (!vma || addr < vma->vm_start) return -ENOMEM; +#ifdef CONFIG_HUGETLB_PAGE + if (is_vm_hugetlb_page(vma)) { + struct hstate *h; + unsigned long nr_huge; + unsigned char present; + + i = 0; + nr = min(pages, (vma->vm_end - addr) >> PAGE_SHIFT); + h = hstate_vma(vma); + nr_huge = ((addr + pages * PAGE_SIZE - 1) >> huge_page_shift(h)) + - (addr >> huge_page_shift(h)) + 1; + nr_huge = min(nr_huge, + (vma->vm_end - addr) >> huge_page_shift(h)); + while (1) { + /* hugepage always in RAM for now, + * but generally it needs to be check */ + ptep = huge_pte_offset(current->mm, + addr & huge_page_mask(h)); + present = !!(ptep && + !huge_pte_none(huge_ptep_get(ptep))); + while (1) { + vec[i++] = present; + addr += PAGE_SIZE; + /* reach buffer limit */ + if (i == nr) + return nr; + /* check hugepage border */ + if (!((addr & ~huge_page_mask(h)) + >> PAGE_SHIFT)) + break; + } + } + return nr; + } +#endif + /* * Calculate how many pages there are left in the last level of the * PTE array for our address. --- linux-2.6.32.orig/mm/memory.c +++ linux-2.6.32/mm/memory.c @@ -2514,7 +2514,7 @@ ret = VM_FAULT_HWPOISON; } else { print_bad_pte(vma, address, orig_pte, NULL); - ret = VM_FAULT_OOM; + ret = VM_FAULT_SIGBUS; } goto out; } @@ -2910,7 +2910,7 @@ * Page table corrupted: show pte and kill process. */ print_bad_pte(vma, address, orig_pte, NULL); - return VM_FAULT_OOM; + return VM_FAULT_SIGBUS; } pgoff = pte_to_pgoff(orig_pte); --- linux-2.6.32.orig/mm/memcontrol.c +++ linux-2.6.32/mm/memcontrol.c @@ -758,7 +758,13 @@ task_unlock(task); if (!curr) return 0; - if (curr->use_hierarchy) + /* + * We should check use_hierarchy of "mem" not "curr". Because checking + * use_hierarchy of "curr" here make this function true if hierarchy is + * enabled in "curr" and "curr" is a child of "mem" in *cgroup* + * hierarchy(even if use_hierarchy is disabled in "mem"). + */ + if (mem->use_hierarchy) ret = css_is_ancestor(&curr->css, &mem->css); else ret = (curr == mem); @@ -2002,12 +2008,12 @@ } unlock_page_cgroup(pc); + *ptr = mem; if (mem) { - ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, &mem, false, + ret = __mem_cgroup_try_charge(NULL, GFP_KERNEL, ptr, false, page); css_put(&mem->css); } - *ptr = mem; return ret; } @@ -2375,7 +2381,7 @@ if (free_all) goto try_to_free; move_account: - while (mem->res.usage > 0) { + do { ret = -EBUSY; if (cgroup_task_count(cgrp) || !list_empty(&cgrp->children)) goto out; @@ -2402,8 +2408,8 @@ if (ret == -ENOMEM) goto try_to_free; cond_resched(); - } - ret = 0; + /* "ret" should also be checked to ensure all lists are empty. */ + } while (mem->res.usage > 0 || ret); out: css_put(&mem->css); return ret; @@ -2436,10 +2442,7 @@ } lru_add_drain(); /* try move_account...there may be some *locked* pages. */ - if (mem->res.usage) - goto move_account; - ret = 0; - goto out; + goto move_account; } int mem_cgroup_force_empty_write(struct cgroup *cont, unsigned int event) @@ -2541,6 +2544,7 @@ val += idx_val; mem_cgroup_get_recursive_idx_stat(mem, MEM_CGROUP_STAT_SWAPOUT, &idx_val); + val += idx_val; val <<= PAGE_SHIFT; } else val = res_counter_read_u64(&mem->memsw, name); --- linux-2.6.32.orig/mm/oom_kill.c +++ linux-2.6.32/mm/oom_kill.c @@ -404,7 +404,7 @@ cpuset_print_task_mems_allowed(current); task_unlock(current); dump_stack(); - mem_cgroup_print_oom_info(mem, current); + mem_cgroup_print_oom_info(mem, p); show_mem(); if (sysctl_oom_dump_tasks) dump_tasks(mem); @@ -426,6 +426,8 @@ list_for_each_entry(c, &p->children, sibling) { if (c->mm == p->mm) continue; + if (mem && !task_in_mem_cgroup(c, mem)) + continue; if (!oom_kill_task(c)) return 0; } --- linux-2.6.32.orig/mm/hugetlb.c +++ linux-2.6.32/mm/hugetlb.c @@ -545,6 +545,7 @@ mapping = (struct address_space *) page_private(page); set_page_private(page, 0); + page->mapping = NULL; BUG_ON(page_count(page)); INIT_LIST_HEAD(&page->lru); @@ -1007,7 +1008,7 @@ page = alloc_buddy_huge_page(h, vma, addr); if (!page) { hugetlb_put_quota(inode->i_mapping, chg); - return ERR_PTR(-VM_FAULT_OOM); + return ERR_PTR(-VM_FAULT_SIGBUS); } } @@ -2095,8 +2096,10 @@ spin_lock(&inode->i_lock); inode->i_blocks += blocks_per_huge_page(h); spin_unlock(&inode->i_lock); - } else + } else { lock_page(page); + page->mapping = HUGETLB_POISON; + } } /* --- linux-2.6.32.orig/mm/swapfile.c +++ linux-2.6.32/mm/swapfile.c @@ -586,8 +586,12 @@ nr_swap_pages++; p->inuse_pages--; } - if (!swap_count(count)) + if (!swap_count(count)) { mem_cgroup_uncharge_swap(ent); + if (p->notify_swap_entry_free_fn) + p->notify_swap_entry_free_fn(offset); + } + return count; } @@ -2167,6 +2171,23 @@ } /* + * Sets callback for event when swap_map[offset] == 0 + * i.e. page at this swap offset is not longer used. + * + * type: identifies swap file + * fn: callback function + */ +void set_notify_swap_entry_free(unsigned type, void (*fn) (unsigned long)) +{ + struct swap_info_struct *sis; + sis = get_swap_info_struct(type); + BUG_ON(!sis); + sis->notify_swap_entry_free_fn = fn; + return; +} +EXPORT_SYMBOL(set_notify_swap_entry_free); + +/* * swap_lock prevents swap_map being freed. Don't grab an extra * reference on the swaphandle, it doesn't matter if it becomes unused. */ --- linux-2.6.32.orig/mm/ksm.c +++ linux-2.6.32/mm/ksm.c @@ -34,6 +34,7 @@ #include #include +#include "internal.h" /* * A few notes about the KSM scanning process, @@ -767,15 +768,14 @@ * ptes are necessarily already write-protected. But in either * case, we need to lock and check page_count is not raised. */ - if (write_protect_page(vma, oldpage, &orig_pte)) { - unlock_page(oldpage); - goto out_putpage; - } - unlock_page(oldpage); - - if (pages_identical(oldpage, newpage)) + if (write_protect_page(vma, oldpage, &orig_pte) == 0 && + pages_identical(oldpage, newpage)) err = replace_page(vma, oldpage, newpage, orig_pte); + if ((vma->vm_flags & VM_LOCKED) && !err) + munlock_vma_page(oldpage); + + unlock_page(oldpage); out_putpage: put_page(oldpage); put_page(newpage); --- linux-2.6.32.orig/ubuntu/Kconfig +++ linux-2.6.32/ubuntu/Kconfig @@ -0,0 +1,14 @@ +menu "Ubuntu Supplied Third-Party Device Drivers" + +source "ubuntu/aufs/Kconfig" +source "ubuntu/compcache/Kconfig" +source "ubuntu/dm-raid4-5/Kconfig" +source "ubuntu/fsam7400/Kconfig" +source "ubuntu/iscsitarget/Kconfig" +source "ubuntu/lirc/Kconfig" +source "ubuntu/ndiswrapper/Kconfig" +source "ubuntu/omnibook/Kconfig" +source "ubuntu/rtl8192se/Kconfig" +source "ubuntu/rfkill/Kconfig" + +endmenu --- linux-2.6.32.orig/ubuntu/Makefile +++ linux-2.6.32/ubuntu/Makefile @@ -0,0 +1,17 @@ +# +# Makefile for the Linux kernel ubuntu supplied third-party device drivers. +# + +obj-$(CONFIG_AUFS_FS) += aufs/ +obj-$(CONFIG_BLK_DEV_COMPCACHE) += compcache/ +obj-$(CONFIG_DM_RAID45) += dm-raid4-5/ +obj-$(CONFIG_FSAM7400) += fsam7400/ +obj-$(CONFIG_SCSI_ISCSITARGET) += iscsitarget/ +obj-$(CONFIG_LIRC_DEV) += lirc/ +obj-$(CONFIG_NDISWRAPPER) += ndiswrapper/ +obj-$(CONFIG_OMNIBOOK) += omnibook/ +obj-$(CONFIG_RTL8192SE) += rtl8192se/ +obj-m += rfkill/ + +# This is a stupid trick to get kbuild to create ubuntu/built-in.o +obj- += foo.o --- linux-2.6.32.orig/ubuntu/aufs/vdir.c +++ linux-2.6.32/ubuntu/aufs/vdir.c @@ -0,0 +1,884 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * virtual or vertical directory + */ + +#include +#include "aufs.h" + +static unsigned int calc_size(int nlen) +{ + return ALIGN(sizeof(struct au_vdir_de) + nlen, sizeof(ino_t)); +} + +static int set_deblk_end(union au_vdir_deblk_p *p, + union au_vdir_deblk_p *deblk_end) +{ + if (calc_size(0) <= deblk_end->deblk - p->deblk) { + p->de->de_str.len = 0; + /* smp_mb(); */ + return 0; + } + return -1; /* error */ +} + +/* returns true or false */ +static int is_deblk_end(union au_vdir_deblk_p *p, + union au_vdir_deblk_p *deblk_end) +{ + if (calc_size(0) <= deblk_end->deblk - p->deblk) + return !p->de->de_str.len; + return 1; +} + +static unsigned char *last_deblk(struct au_vdir *vdir) +{ + return vdir->vd_deblk[vdir->vd_nblk - 1]; +} + +/* ---------------------------------------------------------------------- */ + +/* estimate the apropriate size for name hash table */ +unsigned int au_rdhash_est(loff_t sz) +{ + unsigned int n; + + n = UINT_MAX; + sz >>= 10; + if (sz < n) + n = sz; + if (sz < AUFS_RDHASH_DEF) + n = AUFS_RDHASH_DEF; + /* pr_info("n %u\n", n); */ + return n; +} + +/* + * the allocated memory has to be freed by + * au_nhash_wh_free() or au_nhash_de_free(). + */ +int au_nhash_alloc(struct au_nhash *nhash, unsigned int num_hash, gfp_t gfp) +{ + struct hlist_head *head; + unsigned int u; + + head = kmalloc(sizeof(*nhash->nh_head) * num_hash, gfp); + if (head) { + nhash->nh_num = num_hash; + nhash->nh_head = head; + for (u = 0; u < num_hash; u++) + INIT_HLIST_HEAD(head++); + return 0; /* success */ + } + + return -ENOMEM; +} + +static void nhash_count(struct hlist_head *head) +{ +#if 0 + unsigned long n; + struct hlist_node *pos; + + n = 0; + hlist_for_each(pos, head) + n++; + pr_info("%lu\n", n); +#endif +} + +static void au_nhash_wh_do_free(struct hlist_head *head) +{ + struct au_vdir_wh *tpos; + struct hlist_node *pos, *node; + + hlist_for_each_entry_safe(tpos, pos, node, head, wh_hash) { + /* hlist_del(pos); */ + kfree(tpos); + } +} + +static void au_nhash_de_do_free(struct hlist_head *head) +{ + struct au_vdir_dehstr *tpos; + struct hlist_node *pos, *node; + + hlist_for_each_entry_safe(tpos, pos, node, head, hash) { + /* hlist_del(pos); */ + au_cache_free_dehstr(tpos); + } +} + +static void au_nhash_do_free(struct au_nhash *nhash, + void (*free)(struct hlist_head *head)) +{ + unsigned int n; + struct hlist_head *head; + + n = nhash->nh_num; + if (!n) + return; + + head = nhash->nh_head; + while (n-- > 0) { + nhash_count(head); + free(head++); + } + kfree(nhash->nh_head); +} + +void au_nhash_wh_free(struct au_nhash *whlist) +{ + au_nhash_do_free(whlist, au_nhash_wh_do_free); +} + +static void au_nhash_de_free(struct au_nhash *delist) +{ + au_nhash_do_free(delist, au_nhash_de_do_free); +} + +/* ---------------------------------------------------------------------- */ + +int au_nhash_test_longer_wh(struct au_nhash *whlist, aufs_bindex_t btgt, + int limit) +{ + int num; + unsigned int u, n; + struct hlist_head *head; + struct au_vdir_wh *tpos; + struct hlist_node *pos; + + num = 0; + n = whlist->nh_num; + head = whlist->nh_head; + for (u = 0; u < n; u++, head++) + hlist_for_each_entry(tpos, pos, head, wh_hash) + if (tpos->wh_bindex == btgt && ++num > limit) + return 1; + return 0; +} + +static struct hlist_head *au_name_hash(struct au_nhash *nhash, + unsigned char *name, + unsigned int len) +{ + unsigned int v; + /* const unsigned int magic_bit = 12; */ + + AuDebugOn(!nhash->nh_num || !nhash->nh_head); + + v = 0; + while (len--) + v += *name++; + /* v = hash_long(v, magic_bit); */ + v %= nhash->nh_num; + return nhash->nh_head + v; +} + +static int au_nhash_test_name(struct au_vdir_destr *str, const char *name, + int nlen) +{ + return str->len == nlen && !memcmp(str->name, name, nlen); +} + +/* returns found or not */ +int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen) +{ + struct hlist_head *head; + struct au_vdir_wh *tpos; + struct hlist_node *pos; + struct au_vdir_destr *str; + + head = au_name_hash(whlist, name, nlen); + hlist_for_each_entry(tpos, pos, head, wh_hash) { + str = &tpos->wh_str; + AuDbg("%.*s\n", str->len, str->name); + if (au_nhash_test_name(str, name, nlen)) + return 1; + } + return 0; +} + +/* returns found(true) or not */ +static int test_known(struct au_nhash *delist, char *name, int nlen) +{ + struct hlist_head *head; + struct au_vdir_dehstr *tpos; + struct hlist_node *pos; + struct au_vdir_destr *str; + + head = au_name_hash(delist, name, nlen); + hlist_for_each_entry(tpos, pos, head, hash) { + str = tpos->str; + AuDbg("%.*s\n", str->len, str->name); + if (au_nhash_test_name(str, name, nlen)) + return 1; + } + return 0; +} + +static void au_shwh_init_wh(struct au_vdir_wh *wh, ino_t ino, + unsigned char d_type) +{ +#ifdef CONFIG_AUFS_SHWH + wh->wh_ino = ino; + wh->wh_type = d_type; +#endif +} + +/* ---------------------------------------------------------------------- */ + +int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino, + unsigned int d_type, aufs_bindex_t bindex, + unsigned char shwh) +{ + int err; + struct au_vdir_destr *str; + struct au_vdir_wh *wh; + + AuDbg("%.*s\n", nlen, name); + AuDebugOn(!whlist->nh_num || !whlist->nh_head); + + err = -ENOMEM; + wh = kmalloc(sizeof(*wh) + nlen, GFP_NOFS); + if (unlikely(!wh)) + goto out; + + err = 0; + wh->wh_bindex = bindex; + if (shwh) + au_shwh_init_wh(wh, ino, d_type); + str = &wh->wh_str; + str->len = nlen; + memcpy(str->name, name, nlen); + hlist_add_head(&wh->wh_hash, au_name_hash(whlist, name, nlen)); + /* smp_mb(); */ + + out: + return err; +} + +static int append_deblk(struct au_vdir *vdir) +{ + int err; + unsigned long ul; + const unsigned int deblk_sz = vdir->vd_deblk_sz; + union au_vdir_deblk_p p, deblk_end; + unsigned char **o; + + err = -ENOMEM; + o = krealloc(vdir->vd_deblk, sizeof(*o) * (vdir->vd_nblk + 1), + GFP_NOFS); + if (unlikely(!o)) + goto out; + + vdir->vd_deblk = o; + p.deblk = kmalloc(deblk_sz, GFP_NOFS); + if (p.deblk) { + ul = vdir->vd_nblk++; + vdir->vd_deblk[ul] = p.deblk; + vdir->vd_last.ul = ul; + vdir->vd_last.p.deblk = p.deblk; + deblk_end.deblk = p.deblk + deblk_sz; + err = set_deblk_end(&p, &deblk_end); + } + + out: + return err; +} + +static int append_de(struct au_vdir *vdir, char *name, int nlen, ino_t ino, + unsigned int d_type, struct au_nhash *delist) +{ + int err; + unsigned int sz; + const unsigned int deblk_sz = vdir->vd_deblk_sz; + union au_vdir_deblk_p p, *room, deblk_end; + struct au_vdir_dehstr *dehstr; + + p.deblk = last_deblk(vdir); + deblk_end.deblk = p.deblk + deblk_sz; + room = &vdir->vd_last.p; + AuDebugOn(room->deblk < p.deblk || deblk_end.deblk <= room->deblk + || !is_deblk_end(room, &deblk_end)); + + sz = calc_size(nlen); + if (unlikely(sz > deblk_end.deblk - room->deblk)) { + err = append_deblk(vdir); + if (unlikely(err)) + goto out; + + p.deblk = last_deblk(vdir); + deblk_end.deblk = p.deblk + deblk_sz; + /* smp_mb(); */ + AuDebugOn(room->deblk != p.deblk); + } + + err = -ENOMEM; + dehstr = au_cache_alloc_dehstr(); + if (unlikely(!dehstr)) + goto out; + + dehstr->str = &room->de->de_str; + hlist_add_head(&dehstr->hash, au_name_hash(delist, name, nlen)); + room->de->de_ino = ino; + room->de->de_type = d_type; + room->de->de_str.len = nlen; + memcpy(room->de->de_str.name, name, nlen); + + err = 0; + room->deblk += sz; + if (unlikely(set_deblk_end(room, &deblk_end))) + err = append_deblk(vdir); + /* smp_mb(); */ + + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_vdir_free(struct au_vdir *vdir) +{ + unsigned char **deblk; + + deblk = vdir->vd_deblk; + while (vdir->vd_nblk--) + kfree(*deblk++); + kfree(vdir->vd_deblk); + au_cache_free_vdir(vdir); +} + +static struct au_vdir *alloc_vdir(struct file *file) +{ + struct au_vdir *vdir; + struct super_block *sb; + int err; + + sb = file->f_dentry->d_sb; + SiMustAnyLock(sb); + + err = -ENOMEM; + vdir = au_cache_alloc_vdir(); + if (unlikely(!vdir)) + goto out; + + vdir->vd_deblk = kzalloc(sizeof(*vdir->vd_deblk), GFP_NOFS); + if (unlikely(!vdir->vd_deblk)) + goto out_free; + + vdir->vd_deblk_sz = au_sbi(sb)->si_rdblk; + if (!vdir->vd_deblk_sz) { + /* estimate the apropriate size for deblk */ + vdir->vd_deblk_sz = au_dir_size(file, /*dentry*/NULL); + /* pr_info("vd_deblk_sz %u\n", vdir->vd_deblk_sz); */ + } + vdir->vd_nblk = 0; + vdir->vd_version = 0; + vdir->vd_jiffy = 0; + err = append_deblk(vdir); + if (!err) + return vdir; /* success */ + + kfree(vdir->vd_deblk); + + out_free: + au_cache_free_vdir(vdir); + out: + vdir = ERR_PTR(err); + return vdir; +} + +static int reinit_vdir(struct au_vdir *vdir) +{ + int err; + union au_vdir_deblk_p p, deblk_end; + + while (vdir->vd_nblk > 1) { + kfree(vdir->vd_deblk[vdir->vd_nblk - 1]); + /* vdir->vd_deblk[vdir->vd_nblk - 1] = NULL; */ + vdir->vd_nblk--; + } + p.deblk = vdir->vd_deblk[0]; + deblk_end.deblk = p.deblk + vdir->vd_deblk_sz; + err = set_deblk_end(&p, &deblk_end); + /* keep vd_dblk_sz */ + vdir->vd_last.ul = 0; + vdir->vd_last.p.deblk = vdir->vd_deblk[0]; + vdir->vd_version = 0; + vdir->vd_jiffy = 0; + /* smp_mb(); */ + return err; +} + +/* ---------------------------------------------------------------------- */ + +#define AuFillVdir_CALLED 1 +#define AuFillVdir_WHABLE (1 << 1) +#define AuFillVdir_SHWH (1 << 2) +#define au_ftest_fillvdir(flags, name) ((flags) & AuFillVdir_##name) +#define au_fset_fillvdir(flags, name) { (flags) |= AuFillVdir_##name; } +#define au_fclr_fillvdir(flags, name) { (flags) &= ~AuFillVdir_##name; } + +#ifndef CONFIG_AUFS_SHWH +#undef AuFillVdir_SHWH +#define AuFillVdir_SHWH 0 +#endif + +struct fillvdir_arg { + struct file *file; + struct au_vdir *vdir; + struct au_nhash delist; + struct au_nhash whlist; + aufs_bindex_t bindex; + unsigned int flags; + int err; +}; + +static int fillvdir(void *__arg, const char *__name, int nlen, + loff_t offset __maybe_unused, u64 h_ino, + unsigned int d_type) +{ + struct fillvdir_arg *arg = __arg; + char *name = (void *)__name; + struct super_block *sb; + ino_t ino; + const unsigned char shwh = !!au_ftest_fillvdir(arg->flags, SHWH); + + arg->err = 0; + sb = arg->file->f_dentry->d_sb; + au_fset_fillvdir(arg->flags, CALLED); + /* smp_mb(); */ + if (nlen <= AUFS_WH_PFX_LEN + || memcmp(name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { + if (test_known(&arg->delist, name, nlen) + || au_nhash_test_known_wh(&arg->whlist, name, nlen)) + goto out; /* already exists or whiteouted */ + + sb = arg->file->f_dentry->d_sb; + arg->err = au_ino(sb, arg->bindex, h_ino, d_type, &ino); + if (!arg->err) { + if (unlikely(nlen > AUFS_MAX_NAMELEN)) + d_type = DT_UNKNOWN; + arg->err = append_de(arg->vdir, name, nlen, ino, + d_type, &arg->delist); + } + } else if (au_ftest_fillvdir(arg->flags, WHABLE)) { + name += AUFS_WH_PFX_LEN; + nlen -= AUFS_WH_PFX_LEN; + if (au_nhash_test_known_wh(&arg->whlist, name, nlen)) + goto out; /* already whiteouted */ + + if (shwh) + arg->err = au_wh_ino(sb, arg->bindex, h_ino, d_type, + &ino); + if (!arg->err) { + if (nlen <= AUFS_MAX_NAMELEN + AUFS_WH_PFX_LEN) + d_type = DT_UNKNOWN; + arg->err = au_nhash_append_wh + (&arg->whlist, name, nlen, ino, d_type, + arg->bindex, shwh); + } + } + + out: + if (!arg->err) + arg->vdir->vd_jiffy = jiffies; + /* smp_mb(); */ + AuTraceErr(arg->err); + return arg->err; +} + +static int au_handle_shwh(struct super_block *sb, struct au_vdir *vdir, + struct au_nhash *whlist, struct au_nhash *delist) +{ +#ifdef CONFIG_AUFS_SHWH + int err; + unsigned int nh, u; + struct hlist_head *head; + struct au_vdir_wh *tpos; + struct hlist_node *pos, *n; + char *p, *o; + struct au_vdir_destr *destr; + + AuDebugOn(!au_opt_test(au_mntflags(sb), SHWH)); + + err = -ENOMEM; + o = p = __getname(); + if (unlikely(!p)) + goto out; + + err = 0; + nh = whlist->nh_num; + memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); + p += AUFS_WH_PFX_LEN; + for (u = 0; u < nh; u++) { + head = whlist->nh_head + u; + hlist_for_each_entry_safe(tpos, pos, n, head, wh_hash) { + destr = &tpos->wh_str; + memcpy(p, destr->name, destr->len); + err = append_de(vdir, o, destr->len + AUFS_WH_PFX_LEN, + tpos->wh_ino, tpos->wh_type, delist); + if (unlikely(err)) + break; + } + } + + __putname(o); + + out: + AuTraceErr(err); + return err; +#else + return 0; +#endif +} + +static int au_do_read_vdir(struct fillvdir_arg *arg) +{ + int err; + unsigned int rdhash; + loff_t offset; + aufs_bindex_t bend, bindex, bstart; + unsigned char shwh; + struct file *hf, *file; + struct super_block *sb; + + file = arg->file; + sb = file->f_dentry->d_sb; + SiMustAnyLock(sb); + + rdhash = au_sbi(sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(file, /*dentry*/NULL)); + err = au_nhash_alloc(&arg->delist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_nhash_alloc(&arg->whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out_delist; + + err = 0; + arg->flags = 0; + shwh = 0; + if (au_opt_test(au_mntflags(sb), SHWH)) { + shwh = 1; + au_fset_fillvdir(arg->flags, SHWH); + } + bstart = au_fbstart(file); + bend = au_fbend(file); + for (bindex = bstart; !err && bindex <= bend; bindex++) { + hf = au_h_fptr(file, bindex); + if (!hf) + continue; + + offset = vfsub_llseek(hf, 0, SEEK_SET); + err = offset; + if (unlikely(offset)) + break; + + arg->bindex = bindex; + au_fclr_fillvdir(arg->flags, WHABLE); + if (shwh + || (bindex != bend + && au_br_whable(au_sbr_perm(sb, bindex)))) + au_fset_fillvdir(arg->flags, WHABLE); + do { + arg->err = 0; + au_fclr_fillvdir(arg->flags, CALLED); + /* smp_mb(); */ + err = vfsub_readdir(hf, fillvdir, arg); + if (err >= 0) + err = arg->err; + } while (!err && au_ftest_fillvdir(arg->flags, CALLED)); + } + + if (!err && shwh) + err = au_handle_shwh(sb, arg->vdir, &arg->whlist, &arg->delist); + + au_nhash_wh_free(&arg->whlist); + + out_delist: + au_nhash_de_free(&arg->delist); + out: + return err; +} + +static int read_vdir(struct file *file, int may_read) +{ + int err; + unsigned long expire; + unsigned char do_read; + struct fillvdir_arg arg; + struct inode *inode; + struct au_vdir *vdir, *allocated; + + err = 0; + inode = file->f_dentry->d_inode; + IMustLock(inode); + SiMustAnyLock(inode->i_sb); + + allocated = NULL; + do_read = 0; + expire = au_sbi(inode->i_sb)->si_rdcache; + vdir = au_ivdir(inode); + if (!vdir) { + do_read = 1; + vdir = alloc_vdir(file); + err = PTR_ERR(vdir); + if (IS_ERR(vdir)) + goto out; + err = 0; + allocated = vdir; + } else if (may_read + && (inode->i_version != vdir->vd_version + || time_after(jiffies, vdir->vd_jiffy + expire))) { + do_read = 1; + err = reinit_vdir(vdir); + if (unlikely(err)) + goto out; + } + + if (!do_read) + return 0; /* success */ + + arg.file = file; + arg.vdir = vdir; + err = au_do_read_vdir(&arg); + if (!err) { + /* file->f_pos = 0; */ + vdir->vd_version = inode->i_version; + vdir->vd_last.ul = 0; + vdir->vd_last.p.deblk = vdir->vd_deblk[0]; + if (allocated) + au_set_ivdir(inode, allocated); + } else if (allocated) + au_vdir_free(allocated); + + out: + return err; +} + +static int copy_vdir(struct au_vdir *tgt, struct au_vdir *src) +{ + int err, rerr; + unsigned long ul, n; + const unsigned int deblk_sz = src->vd_deblk_sz; + + AuDebugOn(tgt->vd_nblk != 1); + + err = -ENOMEM; + if (tgt->vd_nblk < src->vd_nblk) { + unsigned char **p; + + p = krealloc(tgt->vd_deblk, sizeof(*p) * src->vd_nblk, + GFP_NOFS); + if (unlikely(!p)) + goto out; + tgt->vd_deblk = p; + } + + if (tgt->vd_deblk_sz != deblk_sz) { + unsigned char *p; + + tgt->vd_deblk_sz = deblk_sz; + p = krealloc(tgt->vd_deblk[0], deblk_sz, GFP_NOFS); + if (unlikely(!p)) + goto out; + tgt->vd_deblk[0] = p; + } + memcpy(tgt->vd_deblk[0], src->vd_deblk[0], deblk_sz); + tgt->vd_version = src->vd_version; + tgt->vd_jiffy = src->vd_jiffy; + + n = src->vd_nblk; + for (ul = 1; ul < n; ul++) { + tgt->vd_deblk[ul] = kmemdup(src->vd_deblk[ul], deblk_sz, + GFP_NOFS); + if (unlikely(!tgt->vd_deblk[ul])) + goto out; + tgt->vd_nblk++; + } + tgt->vd_nblk = n; + tgt->vd_last.ul = tgt->vd_last.ul; + tgt->vd_last.p.deblk = tgt->vd_deblk[tgt->vd_last.ul]; + tgt->vd_last.p.deblk += src->vd_last.p.deblk + - src->vd_deblk[src->vd_last.ul]; + /* smp_mb(); */ + return 0; /* success */ + + out: + rerr = reinit_vdir(tgt); + BUG_ON(rerr); + return err; +} + +int au_vdir_init(struct file *file) +{ + int err; + struct inode *inode; + struct au_vdir *vdir_cache, *allocated; + + err = read_vdir(file, !file->f_pos); + if (unlikely(err)) + goto out; + + allocated = NULL; + vdir_cache = au_fvdir_cache(file); + if (!vdir_cache) { + vdir_cache = alloc_vdir(file); + err = PTR_ERR(vdir_cache); + if (IS_ERR(vdir_cache)) + goto out; + allocated = vdir_cache; + } else if (!file->f_pos && vdir_cache->vd_version != file->f_version) { + err = reinit_vdir(vdir_cache); + if (unlikely(err)) + goto out; + } else + return 0; /* success */ + + inode = file->f_dentry->d_inode; + err = copy_vdir(vdir_cache, au_ivdir(inode)); + if (!err) { + file->f_version = inode->i_version; + if (allocated) + au_set_fvdir_cache(file, allocated); + } else if (allocated) + au_vdir_free(allocated); + + out: + return err; +} + +static loff_t calc_offset(struct au_vdir *vdir) +{ + loff_t offset; + union au_vdir_deblk_p p; + + p.deblk = vdir->vd_deblk[vdir->vd_last.ul]; + offset = vdir->vd_last.p.deblk - p.deblk; + offset += vdir->vd_deblk_sz * vdir->vd_last.ul; + return offset; +} + +/* returns true or false */ +static int seek_vdir(struct file *file) +{ + int valid; + unsigned int deblk_sz; + unsigned long ul, n; + loff_t offset; + union au_vdir_deblk_p p, deblk_end; + struct au_vdir *vdir_cache; + + valid = 1; + vdir_cache = au_fvdir_cache(file); + offset = calc_offset(vdir_cache); + AuDbg("offset %lld\n", offset); + if (file->f_pos == offset) + goto out; + + vdir_cache->vd_last.ul = 0; + vdir_cache->vd_last.p.deblk = vdir_cache->vd_deblk[0]; + if (!file->f_pos) + goto out; + + valid = 0; + deblk_sz = vdir_cache->vd_deblk_sz; + ul = div64_u64(file->f_pos, deblk_sz); + AuDbg("ul %lu\n", ul); + if (ul >= vdir_cache->vd_nblk) + goto out; + + n = vdir_cache->vd_nblk; + for (; ul < n; ul++) { + p.deblk = vdir_cache->vd_deblk[ul]; + deblk_end.deblk = p.deblk + deblk_sz; + offset = ul; + offset *= deblk_sz; + while (!is_deblk_end(&p, &deblk_end) && offset < file->f_pos) { + unsigned int l; + + l = calc_size(p.de->de_str.len); + offset += l; + p.deblk += l; + } + if (!is_deblk_end(&p, &deblk_end)) { + valid = 1; + vdir_cache->vd_last.ul = ul; + vdir_cache->vd_last.p = p; + break; + } + } + + out: + /* smp_mb(); */ + AuTraceErr(!valid); + return valid; +} + +int au_vdir_fill_de(struct file *file, void *dirent, filldir_t filldir) +{ + int err; + unsigned int l, deblk_sz; + union au_vdir_deblk_p deblk_end; + struct au_vdir *vdir_cache; + struct au_vdir_de *de; + + vdir_cache = au_fvdir_cache(file); + if (!seek_vdir(file)) + return 0; + + deblk_sz = vdir_cache->vd_deblk_sz; + while (1) { + deblk_end.deblk = vdir_cache->vd_deblk[vdir_cache->vd_last.ul]; + deblk_end.deblk += deblk_sz; + while (!is_deblk_end(&vdir_cache->vd_last.p, &deblk_end)) { + de = vdir_cache->vd_last.p.de; + AuDbg("%.*s, off%lld, i%lu, dt%d\n", + de->de_str.len, de->de_str.name, file->f_pos, + (unsigned long)de->de_ino, de->de_type); + err = filldir(dirent, de->de_str.name, de->de_str.len, + file->f_pos, de->de_ino, de->de_type); + if (unlikely(err)) { + AuTraceErr(err); + /* todo: ignore the error caused by udba? */ + /* return err; */ + return 0; + } + + l = calc_size(de->de_str.len); + vdir_cache->vd_last.p.deblk += l; + file->f_pos += l; + } + if (vdir_cache->vd_last.ul < vdir_cache->vd_nblk - 1) { + vdir_cache->vd_last.ul++; + vdir_cache->vd_last.p.deblk + = vdir_cache->vd_deblk[vdir_cache->vd_last.ul]; + file->f_pos = deblk_sz * vdir_cache->vd_last.ul; + continue; + } + break; + } + + /* smp_mb(); */ + return 0; +} --- linux-2.6.32.orig/ubuntu/aufs/magic.mk +++ linux-2.6.32/ubuntu/aufs/magic.mk @@ -0,0 +1,48 @@ + +# defined in ${srctree}/fs/fuse/inode.c +# tristate +ifdef CONFIG_FUSE_FS +ccflags-y += -DFUSE_SUPER_MAGIC=0x65735546 +endif + +# defined in ${srctree}/fs/ocfs2/ocfs2_fs.h +# tristate +ifdef CONFIG_OCFS2_FS +ccflags-y += -DOCFS2_SUPER_MAGIC=0x7461636f +endif + +# defined in ${srctree}/fs/ocfs2/dlm/userdlm.h +# tristate +ifdef CONFIG_OCFS2_FS_O2CB +ccflags-y += -DDLMFS_MAGIC=0x76a9f425 +endif + +# defined in ${srctree}/fs/cifs/cifsfs.c +# tristate +ifdef CONFIG_CIFS_FS +ccflags-y += -DCIFS_MAGIC_NUMBER=0xFF534D42 +endif + +# defined in ${srctree}/fs/xfs/xfs_sb.h +# tristate +ifdef CONFIG_XFS_FS +ccflags-y += -DXFS_SB_MAGIC=0x58465342 +endif + +# defined in ${srctree}/fs/configfs/mount.c +# tristate +ifdef CONFIG_CONFIGFS_FS +ccflags-y += -DCONFIGFS_MAGIC=0x62656570 +endif + +# defined in ${srctree}/fs/9p/v9fs.h +# tristate +ifdef CONFIG_9P_FS +ccflags-y += -DV9FS_MAGIC=0x01021997 +endif + +# defined in ${srctree}/fs/ubifs/ubifs.h +# tristate +ifdef CONFIG_UBIFS_FS +ccflags-y += -DUBIFS_SUPER_MAGIC=0x24051905 +endif --- linux-2.6.32.orig/ubuntu/aufs/super.h +++ linux-2.6.32/ubuntu/aufs/super.h @@ -0,0 +1,384 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * super_block operations + */ + +#ifndef __AUFS_SUPER_H__ +#define __AUFS_SUPER_H__ + +#ifdef __KERNEL__ + +#include +#include +#include "rwsem.h" +#include "spl.h" +#include "wkq.h" + +typedef ssize_t (*au_readf_t)(struct file *, char __user *, size_t, loff_t *); +typedef ssize_t (*au_writef_t)(struct file *, const char __user *, size_t, + loff_t *); + +/* policies to select one among multiple writable branches */ +struct au_wbr_copyup_operations { + int (*copyup)(struct dentry *dentry); +}; + +struct au_wbr_create_operations { + int (*create)(struct dentry *dentry, int isdir); + int (*init)(struct super_block *sb); + int (*fin)(struct super_block *sb); +}; + +struct au_wbr_mfs { + struct mutex mfs_lock; /* protect this structure */ + unsigned long mfs_jiffy; + unsigned long mfs_expire; + aufs_bindex_t mfs_bindex; + + unsigned long long mfsrr_bytes; + unsigned long long mfsrr_watermark; +}; + +struct au_branch; +struct au_sbinfo { + /* nowait tasks in the system-wide workqueue */ + struct au_nowait_tasks si_nowait; + + struct au_rwsem si_rwsem; + + /* branch management */ + unsigned int si_generation; + + /* see above flags */ + unsigned char au_si_status; + + aufs_bindex_t si_bend; + aufs_bindex_t si_last_br_id; + struct au_branch **si_branch; + + /* policy to select a writable branch */ + unsigned char si_wbr_copyup; + unsigned char si_wbr_create; + struct au_wbr_copyup_operations *si_wbr_copyup_ops; + struct au_wbr_create_operations *si_wbr_create_ops; + + /* round robin */ + atomic_t si_wbr_rr_next; + + /* most free space */ + struct au_wbr_mfs si_wbr_mfs; + + /* mount flags */ + /* include/asm-ia64/siginfo.h defines a macro named si_flags */ + unsigned int si_mntflags; + + /* external inode number (bitmap and translation table) */ + au_readf_t si_xread; + au_writef_t si_xwrite; + struct file *si_xib; + struct mutex si_xib_mtx; /* protect xib members */ + unsigned long *si_xib_buf; + unsigned long si_xib_last_pindex; + int si_xib_next_bit; + aufs_bindex_t si_xino_brid; + /* reserved for future use */ + /* unsigned long long si_xib_limit; */ /* Max xib file size */ + +#ifdef CONFIG_AUFS_EXPORT + /* i_generation */ + struct file *si_xigen; + atomic_t si_xigen_next; +#endif + + /* vdir parameters */ + unsigned long si_rdcache; /* max cache time in HZ */ + unsigned int si_rdblk; /* deblk size */ + unsigned int si_rdhash; /* hash size */ + + /* + * If the number of whiteouts are larger than si_dirwh, leave all of + * them after au_whtmp_ren to reduce the cost of rmdir(2). + * future fsck.aufs or kernel thread will remove them later. + * Otherwise, remove all whiteouts and the dir in rmdir(2). + */ + unsigned int si_dirwh; + + /* + * rename(2) a directory with all children. + */ + /* reserved for future use */ + /* int si_rendir; */ + + /* pseudo_link list */ + struct au_splhead si_plink; + wait_queue_head_t si_plink_wq; + + /* + * sysfs and lifetime management. + * this is not a small structure and it may be a waste of memory in case + * of sysfs is disabled, particulary when many aufs-es are mounted. + * but using sysfs is majority. + */ + struct kobject si_kobj; +#ifdef CONFIG_DEBUG_FS + struct dentry *si_dbgaufs, *si_dbgaufs_xib; +#ifdef CONFIG_AUFS_EXPORT + struct dentry *si_dbgaufs_xigen; +#endif +#endif + + /* dirty, necessary for unmounting, sysfs and sysrq */ + struct super_block *si_sb; +}; + +/* sbinfo status flags */ +/* + * set true when refresh_dirs() failed at remount time. + * then try refreshing dirs at access time again. + * if it is false, refreshing dirs at access time is unnecesary + */ +#define AuSi_FAILED_REFRESH_DIRS 1 +#define AuSi_MAINTAIN_PLINK (1 << 1) /* ioctl */ +static inline unsigned char au_do_ftest_si(struct au_sbinfo *sbi, + unsigned int flag) +{ + AuRwMustAnyLock(&sbi->si_rwsem); + return sbi->au_si_status & flag; +} +#define au_ftest_si(sbinfo, name) au_do_ftest_si(sbinfo, AuSi_##name) +#define au_fset_si(sbinfo, name) do { \ + AuRwMustWriteLock(&(sbinfo)->si_rwsem); \ + (sbinfo)->au_si_status |= AuSi_##name; \ +} while (0) +#define au_fclr_si(sbinfo, name) do { \ + AuRwMustWriteLock(&(sbinfo)->si_rwsem); \ + (sbinfo)->au_si_status &= ~AuSi_##name; \ +} while (0) + +/* ---------------------------------------------------------------------- */ + +/* policy to select one among writable branches */ +#define AuWbrCopyup(sbinfo, ...) \ + ((sbinfo)->si_wbr_copyup_ops->copyup(__VA_ARGS__)) +#define AuWbrCreate(sbinfo, ...) \ + ((sbinfo)->si_wbr_create_ops->create(__VA_ARGS__)) + +/* flags for si_read_lock()/aufs_read_lock()/di_read_lock() */ +#define AuLock_DW 1 /* write-lock dentry */ +#define AuLock_IR (1 << 1) /* read-lock inode */ +#define AuLock_IW (1 << 2) /* write-lock inode */ +#define AuLock_FLUSH (1 << 3) /* wait for 'nowait' tasks */ +#define AuLock_DIR (1 << 4) /* target is a dir */ +#define au_ftest_lock(flags, name) ((flags) & AuLock_##name) +#define au_fset_lock(flags, name) { (flags) |= AuLock_##name; } +#define au_fclr_lock(flags, name) { (flags) &= ~AuLock_##name; } + +/* ---------------------------------------------------------------------- */ + +/* super.c */ +extern struct file_system_type aufs_fs_type; +struct inode *au_iget_locked(struct super_block *sb, ino_t ino); + +/* sbinfo.c */ +void au_si_free(struct kobject *kobj); +int au_si_alloc(struct super_block *sb); +int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr); + +unsigned int au_sigen_inc(struct super_block *sb); +aufs_bindex_t au_new_br_id(struct super_block *sb); + +void aufs_read_lock(struct dentry *dentry, int flags); +void aufs_read_unlock(struct dentry *dentry, int flags); +void aufs_write_lock(struct dentry *dentry); +void aufs_write_unlock(struct dentry *dentry); +void aufs_read_and_write_lock2(struct dentry *d1, struct dentry *d2, int isdir); +void aufs_read_and_write_unlock2(struct dentry *d1, struct dentry *d2); + +/* wbr_policy.c */ +extern struct au_wbr_copyup_operations au_wbr_copyup_ops[]; +extern struct au_wbr_create_operations au_wbr_create_ops[]; +int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst); + +/* ---------------------------------------------------------------------- */ + +static inline struct au_sbinfo *au_sbi(struct super_block *sb) +{ + return sb->s_fs_info; +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_EXPORT +void au_export_init(struct super_block *sb); + +static inline int au_test_nfsd(struct task_struct *tsk) +{ + return !tsk->mm && !strcmp(tsk->comm, "nfsd"); +} + +int au_xigen_inc(struct inode *inode); +int au_xigen_new(struct inode *inode); +int au_xigen_set(struct super_block *sb, struct file *base); +void au_xigen_clr(struct super_block *sb); + +static inline int au_busy_or_stale(void) +{ + if (!au_test_nfsd(current)) + return -EBUSY; + return -ESTALE; +} +#else +static inline void au_export_init(struct super_block *sb) +{ + /* nothing */ +} + +static inline int au_test_nfsd(struct task_struct *tsk) +{ + return 0; +} + +static inline int au_xigen_inc(struct inode *inode) +{ + return 0; +} + +static inline int au_xigen_new(struct inode *inode) +{ + return 0; +} + +static inline int au_xigen_set(struct super_block *sb, struct file *base) +{ + return 0; +} + +static inline void au_xigen_clr(struct super_block *sb) +{ + /* empty */ +} + +static inline int au_busy_or_stale(void) +{ + return -EBUSY; +} +#endif /* CONFIG_AUFS_EXPORT */ + +/* ---------------------------------------------------------------------- */ + +static inline void dbgaufs_si_null(struct au_sbinfo *sbinfo) +{ + /* + * This function is a dynamic '__init' fucntion actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ +#ifdef CONFIG_DEBUG_FS + sbinfo->si_dbgaufs = NULL; + sbinfo->si_dbgaufs_xib = NULL; +#ifdef CONFIG_AUFS_EXPORT + sbinfo->si_dbgaufs_xigen = NULL; +#endif +#endif +} + +/* ---------------------------------------------------------------------- */ + +/* lock superblock. mainly for entry point functions */ +/* + * si_noflush_read_lock, si_noflush_write_lock, + * si_read_unlock, si_write_unlock, si_downgrade_lock + */ +AuSimpleLockRwsemFuncs(si_noflush, struct super_block *sb, + &au_sbi(sb)->si_rwsem); +AuSimpleUnlockRwsemFuncs(si, struct super_block *sb, &au_sbi(sb)->si_rwsem); + +#define SiMustNoWaiters(sb) AuRwMustNoWaiters(&au_sbi(sb)->si_rwsem) +#define SiMustAnyLock(sb) AuRwMustAnyLock(&au_sbi(sb)->si_rwsem) +#define SiMustWriteLock(sb) AuRwMustWriteLock(&au_sbi(sb)->si_rwsem) + +static inline void si_read_lock(struct super_block *sb, int flags) +{ + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + si_noflush_read_lock(sb); +} + +static inline void si_write_lock(struct super_block *sb) +{ + au_nwt_flush(&au_sbi(sb)->si_nowait); + si_noflush_write_lock(sb); +} + +static inline int si_read_trylock(struct super_block *sb, int flags) +{ + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + return si_noflush_read_trylock(sb); +} + +static inline int si_write_trylock(struct super_block *sb, int flags) +{ + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + return si_noflush_write_trylock(sb); +} + +/* ---------------------------------------------------------------------- */ + +static inline aufs_bindex_t au_sbend(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_bend; +} + +static inline unsigned int au_mntflags(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_mntflags; +} + +static inline unsigned int au_sigen(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_generation; +} + +static inline struct au_branch *au_sbr(struct super_block *sb, + aufs_bindex_t bindex) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_branch[0 + bindex]; +} + +static inline void au_xino_brid_set(struct super_block *sb, aufs_bindex_t brid) +{ + SiMustWriteLock(sb); + au_sbi(sb)->si_xino_brid = brid; +} + +static inline aufs_bindex_t au_xino_brid(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_xino_brid; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_SUPER_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/plink.c +++ linux-2.6.32/ubuntu/aufs/plink.c @@ -0,0 +1,396 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * pseudo-link + */ + +#include "aufs.h" + +/* + * during a user process maintains the pseudo-links, + * prohibit adding a new plink and branch manipulation. + */ +void au_plink_block_maintain(struct super_block *sb) +{ + struct au_sbinfo *sbi = au_sbi(sb); + + SiMustAnyLock(sb); + + /* gave up wake_up_bit() */ + wait_event(sbi->si_plink_wq, !au_ftest_si(sbi, MAINTAIN_PLINK)); +} + +/* ---------------------------------------------------------------------- */ + +struct pseudo_link { + struct list_head list; + struct inode *inode; +}; + +#ifdef CONFIG_AUFS_DEBUG +void au_plink_list(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + + plink_list = &sbinfo->si_plink.head; + spin_lock(&sbinfo->si_plink.spin); + list_for_each_entry(plink, plink_list, list) + AuDbg("%lu\n", plink->inode->i_ino); + spin_unlock(&sbinfo->si_plink.spin); +} +#endif + +/* is the inode pseudo-linked? */ +int au_plink_test(struct inode *inode) +{ + int found; + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink; + + sbinfo = au_sbi(inode->i_sb); + AuRwMustAnyLock(&sbinfo->si_rwsem); + AuDebugOn(!au_opt_test(au_mntflags(inode->i_sb), PLINK)); + + found = 0; + plink_list = &sbinfo->si_plink.head; + spin_lock(&sbinfo->si_plink.spin); + list_for_each_entry(plink, plink_list, list) + if (plink->inode == inode) { + found = 1; + break; + } + spin_unlock(&sbinfo->si_plink.spin); + return found; +} + +/* ---------------------------------------------------------------------- */ + +/* + * generate a name for plink. + * the file will be stored under AUFS_WH_PLINKDIR. + */ +/* 20 is max digits length of ulong 64 */ +#define PLINK_NAME_LEN ((20 + 1) * 2) + +static int plink_name(char *name, int len, struct inode *inode, + aufs_bindex_t bindex) +{ + int rlen; + struct inode *h_inode; + + h_inode = au_h_iptr(inode, bindex); + rlen = snprintf(name, len, "%lu.%lu", inode->i_ino, h_inode->i_ino); + return rlen; +} + +/* lookup the plink-ed @inode under the branch at @bindex */ +struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex) +{ + struct dentry *h_dentry, *h_parent; + struct au_branch *br; + struct inode *h_dir; + char a[PLINK_NAME_LEN]; + struct qstr tgtname = { + .name = a + }; + + br = au_sbr(inode->i_sb, bindex); + h_parent = br->br_wbr->wbr_plink; + h_dir = h_parent->d_inode; + tgtname.len = plink_name(a, sizeof(a), inode, bindex); + + /* always superio. */ + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_CHILD2); + h_dentry = au_sio_lkup_one(&tgtname, h_parent, br); + mutex_unlock(&h_dir->i_mutex); + return h_dentry; +} + +/* create a pseudo-link */ +static int do_whplink(struct qstr *tgt, struct dentry *h_parent, + struct dentry *h_dentry, struct au_branch *br) +{ + int err; + struct path h_path = { + .mnt = br->br_mnt + }; + struct inode *h_dir; + + h_dir = h_parent->d_inode; + again: + h_path.dentry = au_lkup_one(tgt, h_parent, br, /*nd*/NULL); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) + goto out; + + err = 0; + /* wh.plink dir is not monitored */ + if (h_path.dentry->d_inode + && h_path.dentry->d_inode != h_dentry->d_inode) { + err = vfsub_unlink(h_dir, &h_path, /*force*/0); + dput(h_path.dentry); + h_path.dentry = NULL; + if (!err) + goto again; + } + if (!err && !h_path.dentry->d_inode) + err = vfsub_link(h_dentry, h_dir, &h_path); + dput(h_path.dentry); + + out: + return err; +} + +struct do_whplink_args { + int *errp; + struct qstr *tgt; + struct dentry *h_parent; + struct dentry *h_dentry; + struct au_branch *br; +}; + +static void call_do_whplink(void *args) +{ + struct do_whplink_args *a = args; + *a->errp = do_whplink(a->tgt, a->h_parent, a->h_dentry, a->br); +} + +static int whplink(struct dentry *h_dentry, struct inode *inode, + aufs_bindex_t bindex, struct au_branch *br) +{ + int err, wkq_err; + struct au_wbr *wbr; + struct dentry *h_parent; + struct inode *h_dir; + char a[PLINK_NAME_LEN]; + struct qstr tgtname = { + .name = a + }; + + wbr = au_sbr(inode->i_sb, bindex)->br_wbr; + h_parent = wbr->wbr_plink; + h_dir = h_parent->d_inode; + tgtname.len = plink_name(a, sizeof(a), inode, bindex); + + /* always superio. */ + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_CHILD2); + if (!au_test_wkq(current)) { + struct do_whplink_args args = { + .errp = &err, + .tgt = &tgtname, + .h_parent = h_parent, + .h_dentry = h_dentry, + .br = br + }; + wkq_err = au_wkq_wait(call_do_whplink, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } else + err = do_whplink(&tgtname, h_parent, h_dentry, br); + mutex_unlock(&h_dir->i_mutex); + + return err; +} + +/* free a single plink */ +static void do_put_plink(struct pseudo_link *plink, int do_del) +{ + iput(plink->inode); + if (do_del) + list_del(&plink->list); + kfree(plink); +} + +/* + * create a new pseudo-link for @h_dentry on @bindex. + * the linked inode is held in aufs @inode. + */ +void au_plink_append(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_dentry) +{ + struct super_block *sb; + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink; + int found, err, cnt; + + sb = inode->i_sb; + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + + err = 0; + cnt = 0; + found = 0; + plink_list = &sbinfo->si_plink.head; + spin_lock(&sbinfo->si_plink.spin); + list_for_each_entry(plink, plink_list, list) { + cnt++; + if (plink->inode == inode) { + found = 1; + break; + } + } + if (found) { + spin_unlock(&sbinfo->si_plink.spin); + return; + } + + plink = NULL; + if (!found) { + plink = kmalloc(sizeof(*plink), GFP_ATOMIC); + if (plink) { + plink->inode = au_igrab(inode); + list_add(&plink->list, plink_list); + cnt++; + } else + err = -ENOMEM; + } + spin_unlock(&sbinfo->si_plink.spin); + + if (!err) { + au_plink_block_maintain(sb); + err = whplink(h_dentry, inode, bindex, au_sbr(sb, bindex)); + } + + if (unlikely(cnt > AUFS_PLINK_WARN)) + AuWarn1("unexpectedly many pseudo links, %d\n", cnt); + if (unlikely(err)) { + pr_warning("err %d, damaged pseudo link.\n", err); + if (!found && plink) + do_put_plink(plink, /*do_del*/1); + } +} + +/* free all plinks */ +void au_plink_put(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink, *tmp; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + + plink_list = &sbinfo->si_plink.head; + /* no spin_lock since sbinfo is write-locked */ + list_for_each_entry_safe(plink, tmp, plink_list, list) + do_put_plink(plink, 0); + INIT_LIST_HEAD(plink_list); +} + +/* free the plinks on a branch specified by @br_id */ +void au_plink_half_refresh(struct super_block *sb, aufs_bindex_t br_id) +{ + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink, *tmp; + struct inode *inode; + aufs_bindex_t bstart, bend, bindex; + unsigned char do_put; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + + plink_list = &sbinfo->si_plink.head; + /* no spin_lock since sbinfo is write-locked */ + list_for_each_entry_safe(plink, tmp, plink_list, list) { + do_put = 0; + inode = au_igrab(plink->inode); + ii_write_lock_child(inode); + bstart = au_ibstart(inode); + bend = au_ibend(inode); + if (bstart >= 0) { + for (bindex = bstart; bindex <= bend; bindex++) { + if (!au_h_iptr(inode, bindex) + || au_ii_br_id(inode, bindex) != br_id) + continue; + au_set_h_iptr(inode, bindex, NULL, 0); + do_put = 1; + break; + } + } else + do_put_plink(plink, 1); + + if (do_put) { + for (bindex = bstart; bindex <= bend; bindex++) + if (au_h_iptr(inode, bindex)) { + do_put = 0; + break; + } + if (do_put) + do_put_plink(plink, 1); + } + ii_write_unlock(inode); + iput(inode); + } +} + +/* ---------------------------------------------------------------------- */ + +long au_plink_ioctl(struct file *file, unsigned int cmd) +{ + long err; + struct super_block *sb; + struct au_sbinfo *sbinfo; + + err = -EACCES; + if (!capable(CAP_SYS_ADMIN)) + goto out; + + err = 0; + sb = file->f_dentry->d_sb; + sbinfo = au_sbi(sb); + switch (cmd) { + case AUFS_CTL_PLINK_MAINT: + /* + * pseudo-link maintenance mode, + * cleared by aufs_release_dir() + */ + si_write_lock(sb); + if (!au_ftest_si(sbinfo, MAINTAIN_PLINK)) { + au_fset_si(sbinfo, MAINTAIN_PLINK); + au_fi(file)->fi_maintain_plink = 1; + } else + err = -EBUSY; + si_write_unlock(sb); + break; + case AUFS_CTL_PLINK_CLEAN: + aufs_write_lock(sb->s_root); + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_put(sb); + aufs_write_unlock(sb->s_root); + break; + default: + err = -EINVAL; + } + out: + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/branch.c +++ linux-2.6.32/ubuntu/aufs/branch.c @@ -0,0 +1,988 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * branch management + */ + +#include +#include +#include "aufs.h" + +/* + * free a single branch + */ +static void au_br_do_free(struct au_branch *br) +{ + int i; + struct au_wbr *wbr; + + if (br->br_xino.xi_file) + fput(br->br_xino.xi_file); + mutex_destroy(&br->br_xino.xi_nondir_mtx); + + AuDebugOn(atomic_read(&br->br_count)); + + wbr = br->br_wbr; + if (wbr) { + for (i = 0; i < AuBrWh_Last; i++) + dput(wbr->wbr_wh[i]); + AuDebugOn(atomic_read(&wbr->wbr_wh_running)); + AuRwDestroy(&wbr->wbr_wh_rwsem); + } + + /* some filesystems acquire extra lock */ + /* lockdep_off(); */ + mntput(br->br_mnt); + /* lockdep_on(); */ + + kfree(wbr); + kfree(br); +} + +/* + * frees all branches + */ +void au_br_free(struct au_sbinfo *sbinfo) +{ + aufs_bindex_t bmax; + struct au_branch **br; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + bmax = sbinfo->si_bend + 1; + br = sbinfo->si_branch; + while (bmax--) + au_br_do_free(*br++); +} + +/* + * find the index of a branch which is specified by @br_id. + */ +int au_br_index(struct super_block *sb, aufs_bindex_t br_id) +{ + aufs_bindex_t bindex, bend; + + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; bindex++) + if (au_sbr_id(sb, bindex) == br_id) + return bindex; + return -1; +} + +/* ---------------------------------------------------------------------- */ + +/* + * add a branch + */ + +static int test_overlap(struct super_block *sb, struct dentry *h_d1, + struct dentry *h_d2) +{ + if (unlikely(h_d1 == h_d2)) + return 1; + return !!au_test_subdir(h_d1, h_d2) + || !!au_test_subdir(h_d2, h_d1) + || au_test_loopback_overlap(sb, h_d1, h_d2) + || au_test_loopback_overlap(sb, h_d2, h_d1); +} + +/* + * returns a newly allocated branch. @new_nbranch is a number of branches + * after adding a branch. + */ +static struct au_branch *au_br_alloc(struct super_block *sb, int new_nbranch, + int perm) +{ + struct au_branch *add_branch; + struct dentry *root; + + root = sb->s_root; + add_branch = kmalloc(sizeof(*add_branch), GFP_NOFS); + if (unlikely(!add_branch)) + goto out; + + add_branch->br_wbr = NULL; + if (au_br_writable(perm)) { + /* may be freed separately at changing the branch permission */ + add_branch->br_wbr = kmalloc(sizeof(*add_branch->br_wbr), + GFP_NOFS); + if (unlikely(!add_branch->br_wbr)) + goto out_br; + } + + if (unlikely(au_sbr_realloc(au_sbi(sb), new_nbranch) + || au_di_realloc(au_di(root), new_nbranch) + || au_ii_realloc(au_ii(root->d_inode), new_nbranch))) + goto out_wbr; + return add_branch; /* success */ + + out_wbr: + kfree(add_branch->br_wbr); + out_br: + kfree(add_branch); + out: + return ERR_PTR(-ENOMEM); +} + +/* + * test if the branch permission is legal or not. + */ +static int test_br(struct inode *inode, int brperm, char *path) +{ + int err; + + err = 0; + if (unlikely(au_br_writable(brperm) && IS_RDONLY(inode))) { + pr_err("write permission for readonly mount or inode, %s\n", + path); + err = -EINVAL; + } + + return err; +} + +/* + * returns: + * 0: success, the caller will add it + * plus: success, it is already unified, the caller should ignore it + * minus: error + */ +static int test_add(struct super_block *sb, struct au_opt_add *add, int remount) +{ + int err; + aufs_bindex_t bend, bindex; + struct dentry *root; + struct inode *inode, *h_inode; + + root = sb->s_root; + bend = au_sbend(sb); + if (unlikely(bend >= 0 + && au_find_dbindex(root, add->path.dentry) >= 0)) { + err = 1; + if (!remount) { + err = -EINVAL; + pr_err("%s duplicated\n", add->pathname); + } + goto out; + } + + err = -ENOSPC; /* -E2BIG; */ + if (unlikely(AUFS_BRANCH_MAX <= add->bindex + || AUFS_BRANCH_MAX - 1 <= bend)) { + pr_err("number of branches exceeded %s\n", add->pathname); + goto out; + } + + err = -EDOM; + if (unlikely(add->bindex < 0 || bend + 1 < add->bindex)) { + pr_err("bad index %d\n", add->bindex); + goto out; + } + + inode = add->path.dentry->d_inode; + err = -ENOENT; + if (unlikely(!inode->i_nlink)) { + pr_err("no existence %s\n", add->pathname); + goto out; + } + + err = -EINVAL; + if (unlikely(inode->i_sb == sb)) { + pr_err("%s must be outside\n", add->pathname); + goto out; + } + + if (unlikely(au_test_fs_unsuppoted(inode->i_sb))) { + pr_err("unsupported filesystem, %s (%s)\n", + add->pathname, au_sbtype(inode->i_sb)); + goto out; + } + + err = test_br(add->path.dentry->d_inode, add->perm, add->pathname); + if (unlikely(err)) + goto out; + + if (bend < 0) + return 0; /* success */ + + err = -EINVAL; + for (bindex = 0; bindex <= bend; bindex++) + if (unlikely(test_overlap(sb, add->path.dentry, + au_h_dptr(root, bindex)))) { + pr_err("%s is overlapped\n", add->pathname); + goto out; + } + + err = 0; + if (au_opt_test(au_mntflags(sb), WARN_PERM)) { + h_inode = au_h_dptr(root, 0)->d_inode; + if ((h_inode->i_mode & S_IALLUGO) != (inode->i_mode & S_IALLUGO) + || h_inode->i_uid != inode->i_uid + || h_inode->i_gid != inode->i_gid) + pr_warning("uid/gid/perm %s %u/%u/0%o, %u/%u/0%o\n", + add->pathname, + inode->i_uid, inode->i_gid, + (inode->i_mode & S_IALLUGO), + h_inode->i_uid, h_inode->i_gid, + (h_inode->i_mode & S_IALLUGO)); + } + + out: + return err; +} + +/* + * initialize or clean the whiteouts for an adding branch + */ +static int au_br_init_wh(struct super_block *sb, struct au_branch *br, + int new_perm, struct dentry *h_root) +{ + int err, old_perm; + aufs_bindex_t bindex; + struct mutex *h_mtx; + struct au_wbr *wbr; + struct au_hinode *hdir; + + wbr = br->br_wbr; + old_perm = br->br_perm; + br->br_perm = new_perm; + hdir = NULL; + h_mtx = NULL; + bindex = au_br_index(sb, br->br_id); + if (0 <= bindex) { + hdir = au_hi(sb->s_root->d_inode, bindex); + au_hin_imtx_lock_nested(hdir, AuLsc_I_PARENT); + } else { + h_mtx = &h_root->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_PARENT); + } + if (!wbr) + err = au_wh_init(h_root, br, sb); + else { + wbr_wh_write_lock(wbr); + err = au_wh_init(h_root, br, sb); + wbr_wh_write_unlock(wbr); + } + if (hdir) + au_hin_imtx_unlock(hdir); + else + mutex_unlock(h_mtx); + br->br_perm = old_perm; + + if (!err && wbr && !au_br_writable(new_perm)) { + kfree(wbr); + br->br_wbr = NULL; + } + + return err; +} + +static int au_wbr_init(struct au_branch *br, struct super_block *sb, + int perm, struct path *path) +{ + int err; + struct kstatfs kst; + struct au_wbr *wbr; + struct dentry *h_dentry; + + wbr = br->br_wbr; + au_rw_init(&wbr->wbr_wh_rwsem); + memset(wbr->wbr_wh, 0, sizeof(wbr->wbr_wh)); + atomic_set(&wbr->wbr_wh_running, 0); + wbr->wbr_bytes = 0; + + /* + * a limit for rmdir/rename a dir + * cf. AUFS_MAX_NAMELEN in include/linux/aufs_type.h + */ + h_dentry = path->dentry; + err = vfs_statfs(h_dentry, &kst); + if (unlikely(err)) + goto out; + err = -EINVAL; + if (kst.f_namelen >= NAME_MAX) + err = au_br_init_wh(sb, br, perm, h_dentry); + else + pr_err("%.*s(%s), unsupported namelen %ld\n", + AuDLNPair(h_dentry), au_sbtype(h_dentry->d_sb), + kst.f_namelen); + + out: + return err; +} + +/* intialize a new branch */ +static int au_br_init(struct au_branch *br, struct super_block *sb, + struct au_opt_add *add) +{ + int err; + + err = 0; + memset(&br->br_xino, 0, sizeof(br->br_xino)); + mutex_init(&br->br_xino.xi_nondir_mtx); + br->br_perm = add->perm; + br->br_mnt = add->path.mnt; /* set first, mntget() later */ + atomic_set(&br->br_count, 0); + br->br_xino_upper = AUFS_XINO_TRUNC_INIT; + atomic_set(&br->br_xino_running, 0); + br->br_id = au_new_br_id(sb); + + if (au_br_writable(add->perm)) { + err = au_wbr_init(br, sb, add->perm, &add->path); + if (unlikely(err)) + goto out; + } + + if (au_opt_test(au_mntflags(sb), XINO)) { + err = au_xino_br(sb, br, add->path.dentry->d_inode->i_ino, + au_sbr(sb, 0)->br_xino.xi_file, /*do_test*/1); + if (unlikely(err)) { + AuDebugOn(br->br_xino.xi_file); + goto out; + } + } + + sysaufs_br_init(br); + mntget(add->path.mnt); + + out: + return err; +} + +static void au_br_do_add_brp(struct au_sbinfo *sbinfo, aufs_bindex_t bindex, + struct au_branch *br, aufs_bindex_t bend, + aufs_bindex_t amount) +{ + struct au_branch **brp; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + brp = sbinfo->si_branch + bindex; + memmove(brp + 1, brp, sizeof(*brp) * amount); + *brp = br; + sbinfo->si_bend++; + if (unlikely(bend < 0)) + sbinfo->si_bend = 0; +} + +static void au_br_do_add_hdp(struct au_dinfo *dinfo, aufs_bindex_t bindex, + aufs_bindex_t bend, aufs_bindex_t amount) +{ + struct au_hdentry *hdp; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + hdp = dinfo->di_hdentry + bindex; + memmove(hdp + 1, hdp, sizeof(*hdp) * amount); + au_h_dentry_init(hdp); + dinfo->di_bend++; + if (unlikely(bend < 0)) + dinfo->di_bstart = 0; +} + +static void au_br_do_add_hip(struct au_iinfo *iinfo, aufs_bindex_t bindex, + aufs_bindex_t bend, aufs_bindex_t amount) +{ + struct au_hinode *hip; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + hip = iinfo->ii_hinode + bindex; + memmove(hip + 1, hip, sizeof(*hip) * amount); + hip->hi_inode = NULL; + au_hin_init(hip, NULL); + iinfo->ii_bend++; + if (unlikely(bend < 0)) + iinfo->ii_bstart = 0; +} + +static void au_br_do_add(struct super_block *sb, struct dentry *h_dentry, + struct au_branch *br, aufs_bindex_t bindex) +{ + struct dentry *root; + struct inode *root_inode; + aufs_bindex_t bend, amount; + + root = sb->s_root; + root_inode = root->d_inode; + au_plink_block_maintain(sb); + bend = au_sbend(sb); + amount = bend + 1 - bindex; + au_br_do_add_brp(au_sbi(sb), bindex, br, bend, amount); + au_br_do_add_hdp(au_di(root), bindex, bend, amount); + au_br_do_add_hip(au_ii(root_inode), bindex, bend, amount); + au_set_h_dptr(root, bindex, dget(h_dentry)); + au_set_h_iptr(root_inode, bindex, au_igrab(h_dentry->d_inode), + /*flags*/0); +} + +int au_br_add(struct super_block *sb, struct au_opt_add *add, int remount) +{ + int err; + aufs_bindex_t bend, add_bindex; + struct dentry *root, *h_dentry; + struct inode *root_inode; + struct au_branch *add_branch; + + root = sb->s_root; + root_inode = root->d_inode; + IMustLock(root_inode); + err = test_add(sb, add, remount); + if (unlikely(err < 0)) + goto out; + if (err) { + err = 0; + goto out; /* success */ + } + + bend = au_sbend(sb); + add_branch = au_br_alloc(sb, bend + 2, add->perm); + err = PTR_ERR(add_branch); + if (IS_ERR(add_branch)) + goto out; + + err = au_br_init(add_branch, sb, add); + if (unlikely(err)) { + au_br_do_free(add_branch); + goto out; + } + + add_bindex = add->bindex; + h_dentry = add->path.dentry; + if (!remount) + au_br_do_add(sb, h_dentry, add_branch, add_bindex); + else { + sysaufs_brs_del(sb, add_bindex); + au_br_do_add(sb, h_dentry, add_branch, add_bindex); + sysaufs_brs_add(sb, add_bindex); + } + + if (!add_bindex) { + au_cpup_attr_all(root_inode, /*force*/1); + sb->s_maxbytes = h_dentry->d_sb->s_maxbytes; + } else + au_add_nlink(root_inode, h_dentry->d_inode); + + /* + * this test/set prevents aufs from handling unnecesary inotify events + * of xino files, in a case of re-adding a writable branch which was + * once detached from aufs. + */ + if (au_xino_brid(sb) < 0 + && au_br_writable(add_branch->br_perm) + && !au_test_fs_bad_xino(h_dentry->d_sb) + && add_branch->br_xino.xi_file + && add_branch->br_xino.xi_file->f_dentry->d_parent == h_dentry) + au_xino_brid_set(sb, add_branch->br_id); + + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * delete a branch + */ + +/* to show the line number, do not make it inlined function */ +#define AuVerbose(do_info, fmt, ...) do { \ + if (do_info) \ + pr_info(fmt, ##__VA_ARGS__); \ +} while (0) + +/* + * test if the branch is deletable or not. + */ +static int test_dentry_busy(struct dentry *root, aufs_bindex_t bindex, + unsigned int sigen) +{ + int err, i, j, ndentry; + aufs_bindex_t bstart, bend; + unsigned char verbose; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry *d; + struct inode *inode; + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages(&dpages, root, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + verbose = !!au_opt_test(au_mntflags(root->d_sb), VERBOSE); + for (i = 0; !err && i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + ndentry = dpage->ndentry; + for (j = 0; !err && j < ndentry; j++) { + d = dpage->dentries[j]; + AuDebugOn(!atomic_read(&d->d_count)); + inode = d->d_inode; + if (au_digen(d) == sigen && au_iigen(inode) == sigen) + di_read_lock_child(d, AuLock_IR); + else { + di_write_lock_child(d); + err = au_reval_dpath(d, sigen); + if (!err) + di_downgrade_lock(d, AuLock_IR); + else { + di_write_unlock(d); + break; + } + } + + bstart = au_dbstart(d); + bend = au_dbend(d); + if (bstart <= bindex + && bindex <= bend + && au_h_dptr(d, bindex) + && (!S_ISDIR(inode->i_mode) || bstart == bend)) { + err = -EBUSY; + AuVerbose(verbose, "busy %.*s\n", AuDLNPair(d)); + } + di_read_unlock(d, AuLock_IR); + } + } + + out_dpages: + au_dpages_free(&dpages); + out: + return err; +} + +static int test_inode_busy(struct super_block *sb, aufs_bindex_t bindex, + unsigned int sigen) +{ + int err; + struct inode *i; + aufs_bindex_t bstart, bend; + unsigned char verbose; + + err = 0; + verbose = !!au_opt_test(au_mntflags(sb), VERBOSE); + list_for_each_entry(i, &sb->s_inodes, i_sb_list) { + AuDebugOn(!atomic_read(&i->i_count)); + if (!list_empty(&i->i_dentry)) + continue; + + if (au_iigen(i) == sigen) + ii_read_lock_child(i); + else { + ii_write_lock_child(i); + err = au_refresh_hinode_self(i, /*do_attr*/1); + if (!err) + ii_downgrade_lock(i); + else { + ii_write_unlock(i); + break; + } + } + + bstart = au_ibstart(i); + bend = au_ibend(i); + if (bstart <= bindex + && bindex <= bend + && au_h_iptr(i, bindex) + && (!S_ISDIR(i->i_mode) || bstart == bend)) { + err = -EBUSY; + AuVerbose(verbose, "busy i%lu\n", i->i_ino); + ii_read_unlock(i); + break; + } + ii_read_unlock(i); + } + + return err; +} + +static int test_children_busy(struct dentry *root, aufs_bindex_t bindex) +{ + int err; + unsigned int sigen; + + sigen = au_sigen(root->d_sb); + DiMustNoWaiters(root); + IiMustNoWaiters(root->d_inode); + di_write_unlock(root); + err = test_dentry_busy(root, bindex, sigen); + if (!err) + err = test_inode_busy(root->d_sb, bindex, sigen); + di_write_lock_child(root); /* aufs_write_lock() calls ..._child() */ + + return err; +} + +static void au_br_do_del_brp(struct au_sbinfo *sbinfo, + const aufs_bindex_t bindex, + const aufs_bindex_t bend) +{ + struct au_branch **brp, **p; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + brp = sbinfo->si_branch + bindex; + if (bindex < bend) + memmove(brp, brp + 1, sizeof(*brp) * (bend - bindex)); + sbinfo->si_branch[0 + bend] = NULL; + sbinfo->si_bend--; + + p = krealloc(sbinfo->si_branch, sizeof(*p) * bend, GFP_NOFS); + if (p) + sbinfo->si_branch = p; +} + +static void au_br_do_del_hdp(struct au_dinfo *dinfo, const aufs_bindex_t bindex, + const aufs_bindex_t bend) +{ + struct au_hdentry *hdp, *p; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + hdp = dinfo->di_hdentry + bindex; + if (bindex < bend) + memmove(hdp, hdp + 1, sizeof(*hdp) * (bend - bindex)); + dinfo->di_hdentry[0 + bend].hd_dentry = NULL; + dinfo->di_bend--; + + p = krealloc(dinfo->di_hdentry, sizeof(*p) * bend, GFP_NOFS); + if (p) + dinfo->di_hdentry = p; +} + +static void au_br_do_del_hip(struct au_iinfo *iinfo, const aufs_bindex_t bindex, + const aufs_bindex_t bend) +{ + struct au_hinode *hip, *p; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + hip = iinfo->ii_hinode + bindex; + if (bindex < bend) + memmove(hip, hip + 1, sizeof(*hip) * (bend - bindex)); + iinfo->ii_hinode[0 + bend].hi_inode = NULL; + au_hin_init(iinfo->ii_hinode + bend, NULL); + iinfo->ii_bend--; + + p = krealloc(iinfo->ii_hinode, sizeof(*p) * bend, GFP_NOFS); + if (p) + iinfo->ii_hinode = p; +} + +static void au_br_do_del(struct super_block *sb, aufs_bindex_t bindex, + struct au_branch *br) +{ + aufs_bindex_t bend; + struct au_sbinfo *sbinfo; + struct dentry *root; + struct inode *inode; + + SiMustWriteLock(sb); + + root = sb->s_root; + inode = root->d_inode; + au_plink_block_maintain(sb); + sbinfo = au_sbi(sb); + bend = sbinfo->si_bend; + + dput(au_h_dptr(root, bindex)); + au_hiput(au_hi(inode, bindex)); + au_br_do_free(br); + + au_br_do_del_brp(sbinfo, bindex, bend); + au_br_do_del_hdp(au_di(root), bindex, bend); + au_br_do_del_hip(au_ii(inode), bindex, bend); +} + +int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount) +{ + int err, rerr, i; + unsigned int mnt_flags; + aufs_bindex_t bindex, bend, br_id; + unsigned char do_wh, verbose; + struct au_branch *br; + struct au_wbr *wbr; + + err = 0; + bindex = au_find_dbindex(sb->s_root, del->h_path.dentry); + if (bindex < 0) { + if (remount) + goto out; /* success */ + err = -ENOENT; + pr_err("%s no such branch\n", del->pathname); + goto out; + } + AuDbg("bindex b%d\n", bindex); + + err = -EBUSY; + mnt_flags = au_mntflags(sb); + verbose = !!au_opt_test(mnt_flags, VERBOSE); + bend = au_sbend(sb); + if (unlikely(!bend)) { + AuVerbose(verbose, "no more branches left\n"); + goto out; + } + br = au_sbr(sb, bindex); + i = atomic_read(&br->br_count); + if (unlikely(i)) { + AuVerbose(verbose, "%d file(s) opened\n", i); + goto out; + } + + wbr = br->br_wbr; + do_wh = wbr && (wbr->wbr_whbase || wbr->wbr_plink || wbr->wbr_orph); + if (do_wh) { + /* instead of WbrWhMustWriteLock(wbr) */ + SiMustWriteLock(sb); + for (i = 0; i < AuBrWh_Last; i++) { + dput(wbr->wbr_wh[i]); + wbr->wbr_wh[i] = NULL; + } + } + + err = test_children_busy(sb->s_root, bindex); + if (unlikely(err)) { + if (do_wh) + goto out_wh; + goto out; + } + + err = 0; + br_id = br->br_id; + if (!remount) + au_br_do_del(sb, bindex, br); + else { + sysaufs_brs_del(sb, bindex); + au_br_do_del(sb, bindex, br); + sysaufs_brs_add(sb, bindex); + } + + if (!bindex) { + au_cpup_attr_all(sb->s_root->d_inode, /*force*/1); + sb->s_maxbytes = au_sbr_sb(sb, 0)->s_maxbytes; + } else + au_sub_nlink(sb->s_root->d_inode, del->h_path.dentry->d_inode); + if (au_opt_test(mnt_flags, PLINK)) + au_plink_half_refresh(sb, br_id); + + if (au_xino_brid(sb) == br->br_id) + au_xino_brid_set(sb, -1); + goto out; /* success */ + + out_wh: + /* revert */ + rerr = au_br_init_wh(sb, br, br->br_perm, del->h_path.dentry); + if (rerr) + pr_warning("failed re-creating base whiteout, %s. (%d)\n", + del->pathname, rerr); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * change a branch permission + */ + +static void au_warn_ima(void) +{ +#ifdef CONFIG_IMA + /* since it doesn't support mark_files_ro() */ + pr_warning("RW -> RO makes IMA to produce wrong message"); +#endif +} + +static int do_need_sigen_inc(int a, int b) +{ + return au_br_whable(a) && !au_br_whable(b); +} + +static int need_sigen_inc(int old, int new) +{ + return do_need_sigen_inc(old, new) + || do_need_sigen_inc(new, old); +} + +static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex) +{ + int err; + unsigned long n, ul, bytes, files; + aufs_bindex_t bstart; + struct file *file, *hf, **a; + const int step_bytes = 1024, /* memory allocation unit */ + step_files = step_bytes / sizeof(*a); + + err = -ENOMEM; + n = 0; + bytes = step_bytes; + files = step_files; + a = kmalloc(bytes, GFP_NOFS); + if (unlikely(!a)) + goto out; + + /* no need file_list_lock() since sbinfo is locked? defered? */ + list_for_each_entry(file, &sb->s_files, f_u.fu_list) { + if (special_file(file->f_dentry->d_inode->i_mode)) + continue; + + AuDbg("%.*s\n", AuDLNPair(file->f_dentry)); + fi_read_lock(file); + if (unlikely(au_test_mmapped(file))) { + err = -EBUSY; + FiMustNoWaiters(file); + fi_read_unlock(file); + goto out_free; + } + + bstart = au_fbstart(file); + if (!S_ISREG(file->f_dentry->d_inode->i_mode) + || !(file->f_mode & FMODE_WRITE) + || bstart != bindex) { + FiMustNoWaiters(file); + fi_read_unlock(file); + continue; + } + + hf = au_h_fptr(file, bstart); + FiMustNoWaiters(file); + fi_read_unlock(file); + + if (n < files) + a[n++] = hf; + else { + void *p; + + err = -ENOMEM; + bytes += step_bytes; + files += step_files; + p = krealloc(a, bytes, GFP_NOFS); + if (p) { + a = p; + a[n++] = hf; + } else + goto out_free; + } + } + + err = 0; + if (n) + au_warn_ima(); + for (ul = 0; ul < n; ul++) { + /* todo: already flushed? */ + /* cf. fs/super.c:mark_files_ro() */ + hf = a[ul]; + hf->f_mode &= ~FMODE_WRITE; + if (!file_check_writeable(hf)) { + file_release_write(hf); + mnt_drop_write(hf->f_vfsmnt); + } + } + + out_free: + kfree(a); + out: + return err; +} + +int au_br_mod(struct super_block *sb, struct au_opt_mod *mod, int remount, + int *do_update) +{ + int err, rerr; + aufs_bindex_t bindex; + struct path path; + struct dentry *root; + struct au_branch *br; + + root = sb->s_root; + au_plink_block_maintain(sb); + bindex = au_find_dbindex(root, mod->h_root); + if (bindex < 0) { + if (remount) + return 0; /* success */ + err = -ENOENT; + pr_err("%s no such branch\n", mod->path); + goto out; + } + AuDbg("bindex b%d\n", bindex); + + err = test_br(mod->h_root->d_inode, mod->perm, mod->path); + if (unlikely(err)) + goto out; + + br = au_sbr(sb, bindex); + if (br->br_perm == mod->perm) + return 0; /* success */ + + if (au_br_writable(br->br_perm)) { + /* remove whiteout base */ + err = au_br_init_wh(sb, br, mod->perm, mod->h_root); + if (unlikely(err)) + goto out; + + if (!au_br_writable(mod->perm)) { + /* rw --> ro, file might be mmapped */ + DiMustNoWaiters(root); + IiMustNoWaiters(root->d_inode); + di_write_unlock(root); + err = au_br_mod_files_ro(sb, bindex); + /* aufs_write_lock() calls ..._child() */ + di_write_lock_child(root); + + if (unlikely(err)) { + rerr = -ENOMEM; + br->br_wbr = kmalloc(sizeof(*br->br_wbr), + GFP_NOFS); + if (br->br_wbr) { + path.mnt = br->br_mnt; + path.dentry = mod->h_root; + rerr = au_wbr_init(br, sb, br->br_perm, + &path); + } + if (unlikely(rerr)) { + AuIOErr("nested error %d (%d)\n", + rerr, err); + br->br_perm = mod->perm; + } + } + } + } else if (au_br_writable(mod->perm)) { + /* ro --> rw */ + err = -ENOMEM; + br->br_wbr = kmalloc(sizeof(*br->br_wbr), GFP_NOFS); + if (br->br_wbr) { + path.mnt = br->br_mnt; + path.dentry = mod->h_root; + err = au_wbr_init(br, sb, mod->perm, &path); + if (unlikely(err)) { + kfree(br->br_wbr); + br->br_wbr = NULL; + } + } + } + + if (!err) { + *do_update |= need_sigen_inc(br->br_perm, mod->perm); + br->br_perm = mod->perm; + } + + out: + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/super.c +++ linux-2.6.32/ubuntu/aufs/super.c @@ -0,0 +1,876 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * mount and super_block operations + */ + +#include +#include +#include +#include +#include "aufs.h" + +/* + * super_operations + */ +static struct inode *aufs_alloc_inode(struct super_block *sb __maybe_unused) +{ + struct au_icntnr *c; + + c = au_cache_alloc_icntnr(); + if (c) { + inode_init_once(&c->vfs_inode); + c->vfs_inode.i_version = 1; /* sigen(sb); */ + c->iinfo.ii_hinode = NULL; + return &c->vfs_inode; + } + return NULL; +} + +static void aufs_destroy_inode(struct inode *inode) +{ + au_iinfo_fin(inode); + au_cache_free_icntnr(container_of(inode, struct au_icntnr, vfs_inode)); +} + +struct inode *au_iget_locked(struct super_block *sb, ino_t ino) +{ + struct inode *inode; + int err; + + inode = iget_locked(sb, ino); + if (unlikely(!inode)) { + inode = ERR_PTR(-ENOMEM); + goto out; + } + if (!(inode->i_state & I_NEW)) + goto out; + + err = au_xigen_new(inode); + if (!err) + err = au_iinfo_init(inode); + if (!err) + inode->i_version++; + else { + iget_failed(inode); + inode = ERR_PTR(err); + } + + out: + /* never return NULL */ + AuDebugOn(!inode); + AuTraceErrPtr(inode); + return inode; +} + +/* lock free root dinfo */ +static int au_show_brs(struct seq_file *seq, struct super_block *sb) +{ + int err; + aufs_bindex_t bindex, bend; + struct path path; + struct au_hdentry *hd; + struct au_branch *br; + + err = 0; + bend = au_sbend(sb); + hd = au_di(sb->s_root)->di_hdentry; + for (bindex = 0; !err && bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + path.mnt = br->br_mnt; + path.dentry = hd[bindex].hd_dentry; + err = au_seq_path(seq, &path); + if (err > 0) + err = seq_printf(seq, "=%s", + au_optstr_br_perm(br->br_perm)); + if (!err && bindex != bend) + err = seq_putc(seq, ':'); + } + + return err; +} + +static void au_show_wbr_create(struct seq_file *m, int v, + struct au_sbinfo *sbinfo) +{ + const char *pat; + + AuRwMustAnyLock(&sbinfo->si_rwsem); + + seq_printf(m, ",create="); + pat = au_optstr_wbr_create(v); + switch (v) { + case AuWbrCreate_TDP: + case AuWbrCreate_RR: + case AuWbrCreate_MFS: + case AuWbrCreate_PMFS: + seq_printf(m, pat); + break; + case AuWbrCreate_MFSV: + seq_printf(m, /*pat*/"mfs:%lu", + sbinfo->si_wbr_mfs.mfs_expire / HZ); + break; + case AuWbrCreate_PMFSV: + seq_printf(m, /*pat*/"pmfs:%lu", + sbinfo->si_wbr_mfs.mfs_expire / HZ); + break; + case AuWbrCreate_MFSRR: + seq_printf(m, /*pat*/"mfsrr:%llu", + sbinfo->si_wbr_mfs.mfsrr_watermark); + break; + case AuWbrCreate_MFSRRV: + seq_printf(m, /*pat*/"mfsrr:%llu:%lu", + sbinfo->si_wbr_mfs.mfsrr_watermark, + sbinfo->si_wbr_mfs.mfs_expire / HZ); + break; + } +} + +static int au_show_xino(struct seq_file *seq, struct vfsmount *mnt) +{ +#ifdef CONFIG_SYSFS + return 0; +#else + int err; + const int len = sizeof(AUFS_XINO_FNAME) - 1; + aufs_bindex_t bindex, brid; + struct super_block *sb; + struct qstr *name; + struct file *f; + struct dentry *d, *h_root; + + AuRwMustAnyLock(&sbinfo->si_rwsem); + + err = 0; + sb = mnt->mnt_sb; + f = au_sbi(sb)->si_xib; + if (!f) + goto out; + + /* stop printing the default xino path on the first writable branch */ + h_root = NULL; + brid = au_xino_brid(sb); + if (brid >= 0) { + bindex = au_br_index(sb, brid); + h_root = au_di(sb->s_root)->di_hdentry[0 + bindex].hd_dentry; + } + d = f->f_dentry; + name = &d->d_name; + /* safe ->d_parent because the file is unlinked */ + if (d->d_parent == h_root + && name->len == len + && !memcmp(name->name, AUFS_XINO_FNAME, len)) + goto out; + + seq_puts(seq, ",xino="); + err = au_xino_path(seq, f); + + out: + return err; +#endif +} + +/* seq_file will re-call me in case of too long string */ +static int aufs_show_options(struct seq_file *m, struct vfsmount *mnt) +{ + int err, n; + unsigned int mnt_flags, v; + struct super_block *sb; + struct au_sbinfo *sbinfo; + +#define AuBool(name, str) do { \ + v = au_opt_test(mnt_flags, name); \ + if (v != au_opt_test(AuOpt_Def, name)) \ + seq_printf(m, ",%s" #str, v ? "" : "no"); \ +} while (0) + +#define AuStr(name, str) do { \ + v = mnt_flags & AuOptMask_##name; \ + if (v != (AuOpt_Def & AuOptMask_##name)) \ + seq_printf(m, "," #str "=%s", au_optstr_##str(v)); \ +} while (0) + +#define AuUInt(name, str, val) do { \ + if (val != AUFS_##name##_DEF) \ + seq_printf(m, "," #str "=%u", val); \ +} while (0) + + /* lock free root dinfo */ + sb = mnt->mnt_sb; + si_noflush_read_lock(sb); + sbinfo = au_sbi(sb); + seq_printf(m, ",si=%lx", sysaufs_si_id(sbinfo)); + + mnt_flags = au_mntflags(sb); + if (au_opt_test(mnt_flags, XINO)) { + err = au_show_xino(m, mnt); + if (unlikely(err)) + goto out; + } else + seq_puts(m, ",noxino"); + + AuBool(TRUNC_XINO, trunc_xino); + AuStr(UDBA, udba); + AuBool(SHWH, shwh); + AuBool(PLINK, plink); + /* AuBool(DIRPERM1, dirperm1); */ + /* AuBool(REFROF, refrof); */ + + v = sbinfo->si_wbr_create; + if (v != AuWbrCreate_Def) + au_show_wbr_create(m, v, sbinfo); + + v = sbinfo->si_wbr_copyup; + if (v != AuWbrCopyup_Def) + seq_printf(m, ",cpup=%s", au_optstr_wbr_copyup(v)); + + v = au_opt_test(mnt_flags, ALWAYS_DIROPQ); + if (v != au_opt_test(AuOpt_Def, ALWAYS_DIROPQ)) + seq_printf(m, ",diropq=%c", v ? 'a' : 'w'); + + AuUInt(DIRWH, dirwh, sbinfo->si_dirwh); + + n = sbinfo->si_rdcache / HZ; + AuUInt(RDCACHE, rdcache, n); + + AuUInt(RDBLK, rdblk, sbinfo->si_rdblk); + AuUInt(RDHASH, rdhash, sbinfo->si_rdhash); + + AuBool(SUM, sum); + /* AuBool(SUM_W, wsum); */ + AuBool(WARN_PERM, warn_perm); + AuBool(VERBOSE, verbose); + + out: + /* be sure to print "br:" last */ + if (!sysaufs_brs) { + seq_puts(m, ",br:"); + au_show_brs(m, sb); + } + si_read_unlock(sb); + return 0; + +#undef Deleted +#undef AuBool +#undef AuStr +} + +/* ---------------------------------------------------------------------- */ + +/* sum mode which returns the summation for statfs(2) */ + +static u64 au_add_till_max(u64 a, u64 b) +{ + u64 old; + + old = a; + a += b; + if (old < a) + return a; + return ULLONG_MAX; +} + +static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf) +{ + int err; + u64 blocks, bfree, bavail, files, ffree; + aufs_bindex_t bend, bindex, i; + unsigned char shared; + struct vfsmount *h_mnt; + struct super_block *h_sb; + + blocks = 0; + bfree = 0; + bavail = 0; + files = 0; + ffree = 0; + + err = 0; + bend = au_sbend(sb); + for (bindex = bend; bindex >= 0; bindex--) { + h_mnt = au_sbr_mnt(sb, bindex); + h_sb = h_mnt->mnt_sb; + shared = 0; + for (i = bindex + 1; !shared && i <= bend; i++) + shared = (au_sbr_sb(sb, i) == h_sb); + if (shared) + continue; + + /* sb->s_root for NFS is unreliable */ + err = vfs_statfs(h_mnt->mnt_root, buf); + if (unlikely(err)) + goto out; + + blocks = au_add_till_max(blocks, buf->f_blocks); + bfree = au_add_till_max(bfree, buf->f_bfree); + bavail = au_add_till_max(bavail, buf->f_bavail); + files = au_add_till_max(files, buf->f_files); + ffree = au_add_till_max(ffree, buf->f_ffree); + } + + buf->f_blocks = blocks; + buf->f_bfree = bfree; + buf->f_bavail = bavail; + buf->f_files = files; + buf->f_ffree = ffree; + + out: + return err; +} + +static int aufs_statfs(struct dentry *dentry, struct kstatfs *buf) +{ + int err; + struct super_block *sb; + + /* lock free root dinfo */ + sb = dentry->d_sb; + si_noflush_read_lock(sb); + if (!au_opt_test(au_mntflags(sb), SUM)) + /* sb->s_root for NFS is unreliable */ + err = vfs_statfs(au_sbr_mnt(sb, 0)->mnt_root, buf); + else + err = au_statfs_sum(sb, buf); + si_read_unlock(sb); + + if (!err) { + buf->f_type = AUFS_SUPER_MAGIC; + buf->f_namelen = AUFS_MAX_NAMELEN; + memset(&buf->f_fsid, 0, sizeof(buf->f_fsid)); + } + /* buf->f_bsize = buf->f_blocks = buf->f_bfree = buf->f_bavail = -1; */ + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* try flushing the lower fs at aufs remount/unmount time */ + +static void au_fsync_br(struct super_block *sb) +{ + aufs_bindex_t bend, bindex; + int brperm; + struct au_branch *br; + struct super_block *h_sb; + + bend = au_sbend(sb); + for (bindex = 0; bindex < bend; bindex++) { + br = au_sbr(sb, bindex); + brperm = br->br_perm; + if (brperm == AuBrPerm_RR || brperm == AuBrPerm_RRWH) + continue; + h_sb = br->br_mnt->mnt_sb; + if (bdev_read_only(h_sb->s_bdev)) + continue; + + /* lockdep_off(); */ + down_write(&h_sb->s_umount); + shrink_dcache_sb(h_sb); + sync_filesystem(h_sb); + up_write(&h_sb->s_umount); + /* lockdep_on(); */ + } +} + +/* + * this IS NOT for super_operations. + * I guess it will be reverted someday. + */ +static void aufs_umount_begin(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + sbinfo = au_sbi(sb); + if (!sbinfo) + return; + + si_write_lock(sb); + au_fsync_br(sb); + if (au_opt_test(au_mntflags(sb), PLINK)) + au_plink_put(sb); + if (sbinfo->si_wbr_create_ops->fin) + sbinfo->si_wbr_create_ops->fin(sb); + si_write_unlock(sb); +} + +/* final actions when unmounting a file system */ +static void aufs_put_super(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + sbinfo = au_sbi(sb); + if (!sbinfo) + return; + + aufs_umount_begin(sb); + dbgaufs_si_fin(sbinfo); + kobject_put(&sbinfo->si_kobj); +} + +/* ---------------------------------------------------------------------- */ + +/* + * refresh dentry and inode at remount time. + */ +static int do_refresh(struct dentry *dentry, mode_t type, + unsigned int dir_flags) +{ + int err; + struct dentry *parent; + + di_write_lock_child(dentry); + parent = dget_parent(dentry); + di_read_lock_parent(parent, AuLock_IR); + + /* returns the number of positive dentries */ + err = au_refresh_hdentry(dentry, type); + if (err >= 0) { + struct inode *inode = dentry->d_inode; + err = au_refresh_hinode(inode, dentry); + if (!err && type == S_IFDIR) + au_reset_hinotify(inode, dir_flags); + } + if (unlikely(err)) + pr_err("unrecoverable error %d, %.*s\n", + err, AuDLNPair(dentry)); + + di_read_unlock(parent, AuLock_IR); + dput(parent); + di_write_unlock(dentry); + + return err; +} + +static int test_dir(struct dentry *dentry, void *arg __maybe_unused) +{ + return S_ISDIR(dentry->d_inode->i_mode); +} + +/* gave up consolidating with refresh_nondir() */ +static int refresh_dir(struct dentry *root, unsigned int sigen) +{ + int err, i, j, ndentry, e; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries; + struct inode *inode; + const unsigned int flags = au_hi_flags(root->d_inode, /*isdir*/1); + + err = 0; + list_for_each_entry(inode, &root->d_sb->s_inodes, i_sb_list) + if (S_ISDIR(inode->i_mode) && au_iigen(inode) != sigen) { + ii_write_lock_child(inode); + e = au_refresh_hinode_self(inode, /*do_attr*/1); + ii_write_unlock(inode); + if (unlikely(e)) { + AuDbg("e %d, i%lu\n", e, inode->i_ino); + if (!err) + err = e; + /* go on even if err */ + } + } + + e = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(e)) { + if (!err) + err = e; + goto out; + } + e = au_dcsub_pages(&dpages, root, test_dir, NULL); + if (unlikely(e)) { + if (!err) + err = e; + goto out_dpages; + } + + for (i = 0; !e && i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + ndentry = dpage->ndentry; + for (j = 0; !e && j < ndentry; j++) { + struct dentry *d; + + d = dentries[j]; + au_dbg_verify_dir_parent(d, sigen); + if (au_digen(d) != sigen) { + e = do_refresh(d, S_IFDIR, flags); + if (unlikely(e && !err)) + err = e; + /* break on err */ + } + } + } + + out_dpages: + au_dpages_free(&dpages); + out: + return err; +} + +static int test_nondir(struct dentry *dentry, void *arg __maybe_unused) +{ + return !S_ISDIR(dentry->d_inode->i_mode); +} + +static int refresh_nondir(struct dentry *root, unsigned int sigen, + int do_dentry) +{ + int err, i, j, ndentry, e; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries; + struct inode *inode; + + err = 0; + list_for_each_entry(inode, &root->d_sb->s_inodes, i_sb_list) + if (!S_ISDIR(inode->i_mode) && au_iigen(inode) != sigen) { + ii_write_lock_child(inode); + e = au_refresh_hinode_self(inode, /*do_attr*/1); + ii_write_unlock(inode); + if (unlikely(e)) { + AuDbg("e %d, i%lu\n", e, inode->i_ino); + if (!err) + err = e; + /* go on even if err */ + } + } + + if (!do_dentry) + goto out; + + e = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(e)) { + if (!err) + err = e; + goto out; + } + e = au_dcsub_pages(&dpages, root, test_nondir, NULL); + if (unlikely(e)) { + if (!err) + err = e; + goto out_dpages; + } + + for (i = 0; i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + ndentry = dpage->ndentry; + for (j = 0; j < ndentry; j++) { + struct dentry *d; + + d = dentries[j]; + au_dbg_verify_nondir_parent(d, sigen); + inode = d->d_inode; + if (inode && au_digen(d) != sigen) { + e = do_refresh(d, inode->i_mode & S_IFMT, + /*dir_flags*/0); + if (unlikely(e && !err)) + err = e; + /* go on even err */ + } + } + } + + out_dpages: + au_dpages_free(&dpages); + out: + return err; +} + +static void au_remount_refresh(struct super_block *sb, unsigned int flags) +{ + int err; + unsigned int sigen; + struct au_sbinfo *sbinfo; + struct dentry *root; + struct inode *inode; + + au_sigen_inc(sb); + sigen = au_sigen(sb); + sbinfo = au_sbi(sb); + au_fclr_si(sbinfo, FAILED_REFRESH_DIRS); + + root = sb->s_root; + DiMustNoWaiters(root); + inode = root->d_inode; + IiMustNoWaiters(inode); + au_reset_hinotify(inode, au_hi_flags(inode, /*isdir*/1)); + di_write_unlock(root); + + err = refresh_dir(root, sigen); + if (unlikely(err)) { + au_fset_si(sbinfo, FAILED_REFRESH_DIRS); + pr_warning("Refreshing directories failed, ignored (%d)\n", + err); + } + + if (au_ftest_opts(flags, REFRESH_NONDIR)) { + err = refresh_nondir(root, sigen, !err); + if (unlikely(err)) + pr_warning("Refreshing non-directories failed, ignored" + "(%d)\n", err); + } + + /* aufs_write_lock() calls ..._child() */ + di_write_lock_child(root); + au_cpup_attr_all(root->d_inode, /*force*/1); +} + +/* stop extra interpretation of errno in mount(8), and strange error messages */ +static int cvt_err(int err) +{ + AuTraceErr(err); + + switch (err) { + case -ENOENT: + case -ENOTDIR: + case -EEXIST: + case -EIO: + err = -EINVAL; + } + return err; +} + +static int aufs_remount_fs(struct super_block *sb, int *flags, char *data) +{ + int err; + struct au_opts opts; + struct dentry *root; + struct inode *inode; + struct au_sbinfo *sbinfo; + + err = 0; + root = sb->s_root; + if (!data || !*data) { + aufs_write_lock(root); + err = au_opts_verify(sb, *flags, /*pending*/0); + if (!err) + au_fsync_br(sb); + aufs_write_unlock(root); + goto out; + } + + err = -ENOMEM; + memset(&opts, 0, sizeof(opts)); + opts.opt = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!opts.opt)) + goto out; + opts.max_opt = PAGE_SIZE / sizeof(*opts.opt); + opts.flags = AuOpts_REMOUNT; + opts.sb_flags = *flags; + + /* parse it before aufs lock */ + err = au_opts_parse(sb, data, &opts); + if (unlikely(err)) + goto out_opts; + + sbinfo = au_sbi(sb); + inode = root->d_inode; + mutex_lock(&inode->i_mutex); + aufs_write_lock(root); + au_fsync_br(sb); + + /* au_opts_remount() may return an error */ + err = au_opts_remount(sb, &opts); + au_opts_free(&opts); + + if (au_ftest_opts(opts.flags, REFRESH_DIR) + || au_ftest_opts(opts.flags, REFRESH_NONDIR)) + au_remount_refresh(sb, opts.flags); + + aufs_write_unlock(root); + mutex_unlock(&inode->i_mutex); + + out_opts: + free_page((unsigned long)opts.opt); + out: + err = cvt_err(err); + AuTraceErr(err); + return err; +} + +static const struct super_operations aufs_sop = { + .alloc_inode = aufs_alloc_inode, + .destroy_inode = aufs_destroy_inode, + .drop_inode = generic_delete_inode, + .show_options = aufs_show_options, + .statfs = aufs_statfs, + .put_super = aufs_put_super, + .remount_fs = aufs_remount_fs +}; + +/* ---------------------------------------------------------------------- */ + +static int alloc_root(struct super_block *sb) +{ + int err; + struct inode *inode; + struct dentry *root; + + err = -ENOMEM; + inode = au_iget_locked(sb, AUFS_ROOT_INO); + err = PTR_ERR(inode); + if (IS_ERR(inode)) + goto out; + + inode->i_op = &aufs_dir_iop; + inode->i_fop = &aufs_dir_fop; + inode->i_mode = S_IFDIR; + inode->i_nlink = 2; + unlock_new_inode(inode); + + root = d_alloc_root(inode); + if (unlikely(!root)) + goto out_iput; + err = PTR_ERR(root); + if (IS_ERR(root)) + goto out_iput; + + err = au_alloc_dinfo(root); + if (!err) { + sb->s_root = root; + return 0; /* success */ + } + dput(root); + goto out; /* do not iput */ + + out_iput: + iget_failed(inode); + iput(inode); + out: + return err; + +} + +static int aufs_fill_super(struct super_block *sb, void *raw_data, + int silent __maybe_unused) +{ + int err; + struct au_opts opts; + struct dentry *root; + struct inode *inode; + char *arg = raw_data; + + if (unlikely(!arg || !*arg)) { + err = -EINVAL; + pr_err("no arg\n"); + goto out; + } + + err = -ENOMEM; + memset(&opts, 0, sizeof(opts)); + opts.opt = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!opts.opt)) + goto out; + opts.max_opt = PAGE_SIZE / sizeof(*opts.opt); + opts.sb_flags = sb->s_flags; + + err = au_si_alloc(sb); + if (unlikely(err)) + goto out_opts; + + /* all timestamps always follow the ones on the branch */ + sb->s_flags |= MS_NOATIME | MS_NODIRATIME; + sb->s_op = &aufs_sop; + sb->s_magic = AUFS_SUPER_MAGIC; + sb->s_maxbytes = 0; + au_export_init(sb); + + err = alloc_root(sb); + if (unlikely(err)) { + si_write_unlock(sb); + goto out_info; + } + root = sb->s_root; + inode = root->d_inode; + + /* + * actually we can parse options regardless aufs lock here. + * but at remount time, parsing must be done before aufs lock. + * so we follow the same rule. + */ + ii_write_lock_parent(inode); + aufs_write_unlock(root); + err = au_opts_parse(sb, arg, &opts); + if (unlikely(err)) + goto out_root; + + /* lock vfs_inode first, then aufs. */ + mutex_lock(&inode->i_mutex); + inode->i_op = &aufs_dir_iop; + inode->i_fop = &aufs_dir_fop; + aufs_write_lock(root); + err = au_opts_mount(sb, &opts); + au_opts_free(&opts); + if (unlikely(err)) + goto out_unlock; + aufs_write_unlock(root); + mutex_unlock(&inode->i_mutex); + goto out_opts; /* success */ + + out_unlock: + aufs_write_unlock(root); + mutex_unlock(&inode->i_mutex); + out_root: + dput(root); + sb->s_root = NULL; + out_info: + kobject_put(&au_sbi(sb)->si_kobj); + sb->s_fs_info = NULL; + out_opts: + free_page((unsigned long)opts.opt); + out: + AuTraceErr(err); + err = cvt_err(err); + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_get_sb(struct file_system_type *fs_type, int flags, + const char *dev_name __maybe_unused, void *raw_data, + struct vfsmount *mnt) +{ + int err; + struct super_block *sb; + + /* all timestamps always follow the ones on the branch */ + /* mnt->mnt_flags |= MNT_NOATIME | MNT_NODIRATIME; */ + err = get_sb_nodev(fs_type, flags, raw_data, aufs_fill_super, mnt); + if (!err) { + sb = mnt->mnt_sb; + si_write_lock(sb); + sysaufs_brs_add(sb, 0); + si_write_unlock(sb); + } + return err; +} + +struct file_system_type aufs_fs_type = { + .name = AUFS_FSTYPE, + .fs_flags = + FS_RENAME_DOES_D_MOVE /* a race between rename and others */ + | FS_REVAL_DOT, /* for NFS branch and udba */ + .get_sb = aufs_get_sb, + .kill_sb = generic_shutdown_super, + /* no need to __module_get() and module_put(). */ + .owner = THIS_MODULE, +}; --- linux-2.6.32.orig/ubuntu/aufs/spl.h +++ linux-2.6.32/ubuntu/aufs/spl.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * simple list protected by a spinlock + */ + +#ifndef __AUFS_SPL_H__ +#define __AUFS_SPL_H__ + +#ifdef __KERNEL__ + +#include +#include + +struct au_splhead { + spinlock_t spin; + struct list_head head; +}; + +static inline void au_spl_init(struct au_splhead *spl) +{ + spin_lock_init(&spl->spin); + INIT_LIST_HEAD(&spl->head); +} + +static inline void au_spl_add(struct list_head *list, struct au_splhead *spl) +{ + spin_lock(&spl->spin); + list_add(list, &spl->head); + spin_unlock(&spl->spin); +} + +static inline void au_spl_del(struct list_head *list, struct au_splhead *spl) +{ + spin_lock(&spl->spin); + list_del(list); + spin_unlock(&spl->spin); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_SPL_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/vfsub.c +++ linux-2.6.32/ubuntu/aufs/vfsub.c @@ -0,0 +1,753 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sub-routines for VFS + */ + +#include +#include +#include +#include +#include +#include "aufs.h" + +int vfsub_update_h_iattr(struct path *h_path, int *did) +{ + int err; + struct kstat st; + struct super_block *h_sb; + + /* for remote fs, leave work for its getattr or d_revalidate */ + /* for bad i_attr fs, handle them in aufs_getattr() */ + /* still some fs may acquire i_mutex. we need to skip them */ + err = 0; + if (!did) + did = &err; + h_sb = h_path->dentry->d_sb; + *did = (!au_test_fs_remote(h_sb) && au_test_fs_refresh_iattr(h_sb)); + if (*did) + err = vfs_getattr(h_path->mnt, h_path->dentry, &st); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct file *vfsub_dentry_open(struct path *path, int flags, + const struct cred *cred) +{ + struct file *file; + + file = dentry_open(path->dentry, path->mnt, flags, cred); + if (IS_ERR(file)) + return file; + /* as NFSD does, just call ima_..._get() simply after dentry_open */ + ima_counts_get(file); + return file; +} + +struct file *vfsub_filp_open(const char *path, int oflags, int mode) +{ + struct file *file; + + /* lockdep_off(); */ + file = filp_open(path, oflags, mode); + /* lockdep_on(); */ + if (IS_ERR(file)) + goto out; + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + + out: + return file; +} + +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path) +{ + int err; + + /* lockdep_off(); */ + err = kern_path(name, flags, path); + /* lockdep_on(); */ + if (!err && path->dentry->d_inode) + vfsub_update_h_iattr(path, /*did*/NULL); /*ignore*/ + return err; +} + +struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent, + int len) +{ + struct path path = { + .mnt = NULL + }; + + /* VFS checks it too, but by WARN_ON_ONCE() */ + IMustLock(parent->d_inode); + + path.dentry = lookup_one_len(name, parent, len); + if (IS_ERR(path.dentry)) + goto out; + if (path.dentry->d_inode) + vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/ + + out: + AuTraceErrPtr(path.dentry); + return path.dentry; +} + +struct dentry *vfsub_lookup_hash(struct nameidata *nd) +{ + struct path path = { + .mnt = nd->path.mnt + }; + + IMustLock(nd->path.dentry->d_inode); + + path.dentry = lookup_hash(nd); + if (!IS_ERR(path.dentry) && path.dentry->d_inode) + vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/ + + AuTraceErrPtr(path.dentry); + return path.dentry; +} + +/* ---------------------------------------------------------------------- */ + +struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2) +{ + struct dentry *d; + + lockdep_off(); + d = lock_rename(d1, d2); + lockdep_on(); + au_hin_suspend(hdir1); + if (hdir1 != hdir2) + au_hin_suspend(hdir2); + + return d; +} + +void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2) +{ + au_hin_resume(hdir1); + if (hdir1 != hdir2) + au_hin_resume(hdir2); + lockdep_off(); + unlock_rename(d1, d2); + lockdep_on(); +} + +/* ---------------------------------------------------------------------- */ + +int vfsub_create(struct inode *dir, struct path *path, int mode) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_mknod(path, path->dentry, mode, 0); + path->dentry = d; + if (unlikely(err)) + goto out; + + if (au_test_fs_null_nd(dir->i_sb)) + err = vfs_create(dir, path->dentry, mode, NULL); + else { + struct nameidata h_nd; + + memset(&h_nd, 0, sizeof(h_nd)); + h_nd.flags = LOOKUP_CREATE; + h_nd.intent.open.flags = O_CREAT + | vfsub_fmode_to_uint(FMODE_READ); + h_nd.intent.open.create_mode = mode; + h_nd.path.dentry = path->dentry->d_parent; + h_nd.path.mnt = path->mnt; + path_get(&h_nd.path); + err = vfs_create(dir, path->dentry, mode, &h_nd); + path_put(&h_nd.path); + } + + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + + out: + return err; +} + +int vfsub_symlink(struct inode *dir, struct path *path, const char *symname) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_symlink(path, path->dentry, symname); + path->dentry = d; + if (unlikely(err)) + goto out; + + err = vfs_symlink(dir, path->dentry, symname); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + + out: + return err; +} + +int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_mknod(path, path->dentry, mode, dev); + path->dentry = d; + if (unlikely(err)) + goto out; + + err = vfs_mknod(dir, path->dentry, mode, dev); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + + out: + return err; +} + +static int au_test_nlink(struct inode *inode) +{ + const unsigned int link_max = UINT_MAX >> 1; /* rough margin */ + + if (!au_test_fs_no_limit_nlink(inode->i_sb) + || inode->i_nlink < link_max) + return 0; + return -EMLINK; +} + +int vfsub_link(struct dentry *src_dentry, struct inode *dir, struct path *path) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + err = au_test_nlink(src_dentry->d_inode); + if (unlikely(err)) + return err; + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_link(src_dentry, path, path->dentry); + path->dentry = d; + if (unlikely(err)) + goto out; + + /* lockdep_off(); */ + err = vfs_link(src_dentry, dir, path->dentry); + /* lockdep_on(); */ + if (!err) { + struct path tmp = *path; + int did; + + /* fuse has different memory inode for the same inumber */ + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + tmp.dentry = src_dentry; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + + out: + return err; +} + +int vfsub_rename(struct inode *src_dir, struct dentry *src_dentry, + struct inode *dir, struct path *path) +{ + int err; + struct path tmp = { + .mnt = path->mnt + }; + struct dentry *d; + + IMustLock(dir); + IMustLock(src_dir); + + d = path->dentry; + path->dentry = d->d_parent; + tmp.dentry = src_dentry->d_parent; + err = security_path_rename(&tmp, src_dentry, path, path->dentry); + path->dentry = d; + if (unlikely(err)) + goto out; + + /* lockdep_off(); */ + err = vfs_rename(src_dir, src_dentry, dir, path->dentry); + /* lockdep_on(); */ + if (!err) { + int did; + + tmp.dentry = d->d_parent; + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = src_dentry; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + tmp.dentry = src_dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + + out: + return err; +} + +int vfsub_mkdir(struct inode *dir, struct path *path, int mode) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_mkdir(path, path->dentry, mode); + path->dentry = d; + if (unlikely(err)) + goto out; + + err = vfs_mkdir(dir, path->dentry, mode); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + + out: + return err; +} + +int vfsub_rmdir(struct inode *dir, struct path *path) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_rmdir(path, path->dentry); + path->dentry = d; + if (unlikely(err)) + goto out; + + /* lockdep_off(); */ + err = vfs_rmdir(dir, path->dentry); + /* lockdep_on(); */ + if (!err) { + struct path tmp = { + .dentry = path->dentry->d_parent, + .mnt = path->mnt + }; + + vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/ + } + + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +ssize_t vfsub_read_u(struct file *file, char __user *ubuf, size_t count, + loff_t *ppos) +{ + ssize_t err; + + err = vfs_read(file, ubuf, count, ppos); + if (err >= 0) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +/* todo: kernel_read()? */ +ssize_t vfsub_read_k(struct file *file, void *kbuf, size_t count, + loff_t *ppos) +{ + ssize_t err; + mm_segment_t oldfs; + + oldfs = get_fs(); + set_fs(KERNEL_DS); + err = vfsub_read_u(file, (char __user *)kbuf, count, ppos); + set_fs(oldfs); + return err; +} + +ssize_t vfsub_write_u(struct file *file, const char __user *ubuf, size_t count, + loff_t *ppos) +{ + ssize_t err; + + /* lockdep_off(); */ + err = vfs_write(file, ubuf, count, ppos); + /* lockdep_on(); */ + if (err >= 0) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +ssize_t vfsub_write_k(struct file *file, void *kbuf, size_t count, loff_t *ppos) +{ + ssize_t err; + mm_segment_t oldfs; + + oldfs = get_fs(); + set_fs(KERNEL_DS); + err = vfsub_write_u(file, (const char __user *)kbuf, count, ppos); + set_fs(oldfs); + return err; +} + +int vfsub_readdir(struct file *file, filldir_t filldir, void *arg) +{ + int err; + + /* lockdep_off(); */ + err = vfs_readdir(file, filldir, arg); + /* lockdep_on(); */ + if (err >= 0) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +long vfsub_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + long err; + + /* lockdep_off(); */ + err = do_splice_to(in, ppos, pipe, len, flags); + /* lockdep_on(); */ + if (err >= 0) + vfsub_update_h_iattr(&in->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags) +{ + long err; + + /* lockdep_off(); */ + err = do_splice_from(pipe, out, ppos, len, flags); + /* lockdep_on(); */ + if (err >= 0) + vfsub_update_h_iattr(&out->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +/* cf. open.c:do_sys_truncate() and do_sys_ftruncate() */ +int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr, + struct file *h_file) +{ + int err; + struct inode *h_inode; + + h_inode = h_path->dentry->d_inode; + if (!h_file) { + err = mnt_want_write(h_path->mnt); + if (err) + goto out; + err = inode_permission(h_inode, MAY_WRITE); + if (err) + goto out_mnt; + err = get_write_access(h_inode); + if (err) + goto out_mnt; + err = break_lease(h_inode, vfsub_fmode_to_uint(FMODE_WRITE)); + if (err) + goto out_inode; + } + + err = locks_verify_truncate(h_inode, h_file, length); + if (!err) + err = security_path_truncate(h_path, length, attr); + if (!err) { + /* lockdep_off(); */ + err = do_truncate(h_path->dentry, length, attr, h_file); + /* lockdep_on(); */ + } + + out_inode: + if (!h_file) + put_write_access(h_inode); + out_mnt: + if (!h_file) + mnt_drop_write(h_path->mnt); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct au_vfsub_mkdir_args { + int *errp; + struct inode *dir; + struct path *path; + int mode; +}; + +static void au_call_vfsub_mkdir(void *args) +{ + struct au_vfsub_mkdir_args *a = args; + *a->errp = vfsub_mkdir(a->dir, a->path, a->mode); +} + +int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode) +{ + int err, do_sio, wkq_err; + + do_sio = au_test_h_perm_sio(dir, MAY_EXEC | MAY_WRITE); + if (!do_sio) + err = vfsub_mkdir(dir, path, mode); + else { + struct au_vfsub_mkdir_args args = { + .errp = &err, + .dir = dir, + .path = path, + .mode = mode + }; + wkq_err = au_wkq_wait(au_call_vfsub_mkdir, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} + +struct au_vfsub_rmdir_args { + int *errp; + struct inode *dir; + struct path *path; +}; + +static void au_call_vfsub_rmdir(void *args) +{ + struct au_vfsub_rmdir_args *a = args; + *a->errp = vfsub_rmdir(a->dir, a->path); +} + +int vfsub_sio_rmdir(struct inode *dir, struct path *path) +{ + int err, do_sio, wkq_err; + + do_sio = au_test_h_perm_sio(dir, MAY_EXEC | MAY_WRITE); + if (!do_sio) + err = vfsub_rmdir(dir, path); + else { + struct au_vfsub_rmdir_args args = { + .errp = &err, + .dir = dir, + .path = path + }; + wkq_err = au_wkq_wait(au_call_vfsub_rmdir, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct notify_change_args { + int *errp; + struct path *path; + struct iattr *ia; +}; + +static void call_notify_change(void *args) +{ + struct notify_change_args *a = args; + struct inode *h_inode; + + h_inode = a->path->dentry->d_inode; + IMustLock(h_inode); + + *a->errp = -EPERM; + if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) { + /* lockdep_off(); */ + *a->errp = notify_change(a->path->dentry, a->ia); + /* lockdep_on(); */ + if (!*a->errp) + vfsub_update_h_iattr(a->path, /*did*/NULL); /*ignore*/ + } + AuTraceErr(*a->errp); +} + +int vfsub_notify_change(struct path *path, struct iattr *ia) +{ + int err; + struct notify_change_args args = { + .errp = &err, + .path = path, + .ia = ia + }; + + call_notify_change(&args); + + return err; +} + +int vfsub_sio_notify_change(struct path *path, struct iattr *ia) +{ + int err, wkq_err; + struct notify_change_args args = { + .errp = &err, + .path = path, + .ia = ia + }; + + wkq_err = au_wkq_wait(call_notify_change, &args); + if (unlikely(wkq_err)) + err = wkq_err; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct unlink_args { + int *errp; + struct inode *dir; + struct path *path; +}; + +static void call_unlink(void *args) +{ + struct unlink_args *a = args; + struct dentry *d = a->path->dentry; + struct inode *h_inode; + const int stop_sillyrename = (au_test_nfs(d->d_sb) + && atomic_read(&d->d_count) == 1); + + IMustLock(a->dir); + + a->path->dentry = d->d_parent; + *a->errp = security_path_unlink(a->path, d); + a->path->dentry = d; + if (unlikely(*a->errp)) + return; + + if (!stop_sillyrename) + dget(d); + h_inode = d->d_inode; + if (h_inode) + atomic_inc(&h_inode->i_count); + + /* lockdep_off(); */ + *a->errp = vfs_unlink(a->dir, d); + /* lockdep_on(); */ + if (!*a->errp) { + struct path tmp = { + .dentry = d->d_parent, + .mnt = a->path->mnt + }; + vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/ + } + + if (!stop_sillyrename) + dput(d); + if (h_inode) + iput(h_inode); + + AuTraceErr(*a->errp); +} + +/* + * @dir: must be locked. + * @dentry: target dentry. + */ +int vfsub_unlink(struct inode *dir, struct path *path, int force) +{ + int err; + struct unlink_args args = { + .errp = &err, + .dir = dir, + .path = path + }; + + if (!force) + call_unlink(&args); + else { + int wkq_err; + + wkq_err = au_wkq_wait(call_unlink, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/i_op_ren.c +++ linux-2.6.32/ubuntu/aufs/i_op_ren.c @@ -0,0 +1,961 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode operation (rename entry) + * todo: this is crazy monster + */ + +#include "aufs.h" + +enum { AuSRC, AuDST, AuSrcDst }; +enum { AuPARENT, AuCHILD, AuParentChild }; + +#define AuRen_ISDIR 1 +#define AuRen_ISSAMEDIR (1 << 1) +#define AuRen_WHSRC (1 << 2) +#define AuRen_WHDST (1 << 3) +#define AuRen_MNT_WRITE (1 << 4) +#define AuRen_DT_DSTDIR (1 << 5) +#define AuRen_DIROPQ (1 << 6) +#define AuRen_CPUP (1 << 7) +#define au_ftest_ren(flags, name) ((flags) & AuRen_##name) +#define au_fset_ren(flags, name) { (flags) |= AuRen_##name; } +#define au_fclr_ren(flags, name) { (flags) &= ~AuRen_##name; } + +struct au_ren_args { + struct { + struct dentry *dentry, *h_dentry, *parent, *h_parent, + *wh_dentry; + struct inode *dir, *inode; + struct au_hinode *hdir; + struct au_dtime dt[AuParentChild]; + aufs_bindex_t bstart; + } sd[AuSrcDst]; + +#define src_dentry sd[AuSRC].dentry +#define src_dir sd[AuSRC].dir +#define src_inode sd[AuSRC].inode +#define src_h_dentry sd[AuSRC].h_dentry +#define src_parent sd[AuSRC].parent +#define src_h_parent sd[AuSRC].h_parent +#define src_wh_dentry sd[AuSRC].wh_dentry +#define src_hdir sd[AuSRC].hdir +#define src_h_dir sd[AuSRC].hdir->hi_inode +#define src_dt sd[AuSRC].dt +#define src_bstart sd[AuSRC].bstart + +#define dst_dentry sd[AuDST].dentry +#define dst_dir sd[AuDST].dir +#define dst_inode sd[AuDST].inode +#define dst_h_dentry sd[AuDST].h_dentry +#define dst_parent sd[AuDST].parent +#define dst_h_parent sd[AuDST].h_parent +#define dst_wh_dentry sd[AuDST].wh_dentry +#define dst_hdir sd[AuDST].hdir +#define dst_h_dir sd[AuDST].hdir->hi_inode +#define dst_dt sd[AuDST].dt +#define dst_bstart sd[AuDST].bstart + + struct dentry *h_trap; + struct au_branch *br; + struct au_hinode *src_hinode; + struct path h_path; + struct au_nhash whlist; + aufs_bindex_t btgt; + + unsigned int flags; + + struct au_whtmp_rmdir *thargs; + struct dentry *h_dst; +}; + +/* ---------------------------------------------------------------------- */ + +/* + * functions for reverting. + * when an error happened in a single rename systemcall, we should revert + * everything as if nothing happend. + * we don't need to revert the copied-up/down the parent dir since they are + * harmless. + */ + +#define RevertFailure(fmt, ...) do { \ + AuIOErr("revert failure: " fmt " (%d, %d)\n", \ + ##__VA_ARGS__, err, rerr); \ + err = -EIO; \ +} while (0) + +static void au_ren_rev_diropq(int err, struct au_ren_args *a) +{ + int rerr; + + au_hin_imtx_lock_nested(a->src_hinode, AuLsc_I_CHILD); + rerr = au_diropq_remove(a->src_dentry, a->btgt); + au_hin_imtx_unlock(a->src_hinode); + if (rerr) + RevertFailure("remove diropq %.*s", AuDLNPair(a->src_dentry)); +} + + +static void au_ren_rev_rename(int err, struct au_ren_args *a) +{ + int rerr; + + a->h_path.dentry = au_lkup_one(&a->src_dentry->d_name, a->src_h_parent, + a->br, /*nd*/NULL); + rerr = PTR_ERR(a->h_path.dentry); + if (IS_ERR(a->h_path.dentry)) { + RevertFailure("au_lkup_one %.*s", AuDLNPair(a->src_dentry)); + return; + } + + rerr = vfsub_rename(a->dst_h_dir, + au_h_dptr(a->src_dentry, a->btgt), + a->src_h_dir, &a->h_path); + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + /* au_set_h_dptr(a->src_dentry, a->btgt, NULL); */ + if (rerr) + RevertFailure("rename %.*s", AuDLNPair(a->src_dentry)); +} + +static void au_ren_rev_cpup(int err, struct au_ren_args *a) +{ + int rerr; + + a->h_path.dentry = a->dst_h_dentry; + rerr = vfsub_unlink(a->dst_h_dir, &a->h_path, /*force*/0); + au_set_h_dptr(a->src_dentry, a->btgt, NULL); + au_set_dbstart(a->src_dentry, a->src_bstart); + if (rerr) + RevertFailure("unlink %.*s", AuDLNPair(a->dst_h_dentry)); +} + + +static void au_ren_rev_whtmp(int err, struct au_ren_args *a) +{ + int rerr; + + a->h_path.dentry = au_lkup_one(&a->dst_dentry->d_name, a->dst_h_parent, + a->br, /*nd*/NULL); + rerr = PTR_ERR(a->h_path.dentry); + if (IS_ERR(a->h_path.dentry)) { + RevertFailure("lookup %.*s", AuDLNPair(a->dst_dentry)); + return; + } + if (a->h_path.dentry->d_inode) { + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + return; + } + + rerr = vfsub_rename(a->dst_h_dir, a->h_dst, a->dst_h_dir, &a->h_path); + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + if (!rerr) { + au_set_h_dptr(a->dst_dentry, a->btgt, NULL); + au_set_h_dptr(a->dst_dentry, a->btgt, dget(a->h_dst)); + } else + RevertFailure("rename %.*s", AuDLNPair(a->h_dst)); +} + +static void au_ren_rev_whsrc(int err, struct au_ren_args *a) +{ + int rerr; + + a->h_path.dentry = a->src_wh_dentry; + rerr = au_wh_unlink_dentry(a->src_h_dir, &a->h_path, a->src_dentry); + if (rerr) + RevertFailure("unlink %.*s", AuDLNPair(a->src_wh_dentry)); +} + +static void au_ren_rev_drop(struct au_ren_args *a) +{ + struct dentry *d, *h_d; + int i; + aufs_bindex_t bend, bindex; + + for (i = 0; i < AuSrcDst; i++) { + d = a->sd[i].dentry; + d_drop(d); + bend = au_dbend(d); + for (bindex = au_dbstart(d); bindex <= bend; bindex++) { + h_d = au_h_dptr(d, bindex); + if (h_d) + d_drop(h_d); + } + } + + au_update_dbstart(a->dst_dentry); + if (a->thargs) + d_drop(a->h_dst); +} +#undef RevertFailure + +/* ---------------------------------------------------------------------- */ + +/* + * when we have to copyup the renaming entry, do it with the rename-target name + * in order to minimize the cost (the later actual rename is unnecessary). + * otherwise rename it on the target branch. + */ +static int au_ren_or_cpup(struct au_ren_args *a) +{ + int err; + struct dentry *d; + + d = a->src_dentry; + if (au_dbstart(d) == a->btgt) { + a->h_path.dentry = a->dst_h_dentry; + if (au_ftest_ren(a->flags, DIROPQ) + && au_dbdiropq(d) == a->btgt) + au_fclr_ren(a->flags, DIROPQ); + AuDebugOn(au_dbstart(d) != a->btgt); + err = vfsub_rename(a->src_h_dir, au_h_dptr(d, a->btgt), + a->dst_h_dir, &a->h_path); + } else { + struct mutex *h_mtx = &a->src_h_dentry->d_inode->i_mutex; + + au_fset_ren(a->flags, CPUP); + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + au_set_dbstart(d, a->btgt); + au_set_h_dptr(d, a->btgt, dget(a->dst_h_dentry)); + err = au_sio_cpup_single(d, a->btgt, a->src_bstart, -1, + !AuCpup_DTIME, a->dst_parent); + if (unlikely(err)) { + au_set_h_dptr(d, a->btgt, NULL); + au_set_dbstart(d, a->src_bstart); + } + mutex_unlock(h_mtx); + } + + return err; +} + +/* cf. aufs_rmdir() */ +static int au_ren_del_whtmp(struct au_ren_args *a) +{ + int err; + struct inode *dir; + + dir = a->dst_dir; + SiMustAnyLock(dir->i_sb); + if (!au_nhash_test_longer_wh(&a->whlist, a->btgt, + au_sbi(dir->i_sb)->si_dirwh) + || au_test_fs_remote(a->h_dst->d_sb)) { + err = au_whtmp_rmdir(dir, a->btgt, a->h_dst, &a->whlist); + if (unlikely(err)) + pr_warning("failed removing whtmp dir %.*s (%d), " + "ignored.\n", AuDLNPair(a->h_dst), err); + } else { + au_nhash_wh_free(&a->thargs->whlist); + a->thargs->whlist = a->whlist; + a->whlist.nh_num = 0; + au_whtmp_kick_rmdir(dir, a->btgt, a->h_dst, a->thargs); + dput(a->h_dst); + a->thargs = NULL; + } + + return 0; +} + +/* make it 'opaque' dir. */ +static int au_ren_diropq(struct au_ren_args *a) +{ + int err; + struct dentry *diropq; + + err = 0; + a->src_hinode = au_hi(a->src_inode, a->btgt); + au_hin_imtx_lock_nested(a->src_hinode, AuLsc_I_CHILD); + diropq = au_diropq_create(a->src_dentry, a->btgt); + au_hin_imtx_unlock(a->src_hinode); + if (IS_ERR(diropq)) + err = PTR_ERR(diropq); + dput(diropq); + + return err; +} + +static int do_rename(struct au_ren_args *a) +{ + int err; + struct dentry *d, *h_d; + + /* prepare workqueue args for asynchronous rmdir */ + h_d = a->dst_h_dentry; + if (au_ftest_ren(a->flags, ISDIR) && h_d->d_inode) { + err = -ENOMEM; + a->thargs = au_whtmp_rmdir_alloc(a->src_dentry->d_sb, GFP_NOFS); + if (unlikely(!a->thargs)) + goto out; + a->h_dst = dget(h_d); + } + + /* create whiteout for src_dentry */ + if (au_ftest_ren(a->flags, WHSRC)) { + a->src_wh_dentry + = au_wh_create(a->src_dentry, a->btgt, a->src_h_parent); + err = PTR_ERR(a->src_wh_dentry); + if (IS_ERR(a->src_wh_dentry)) + goto out_thargs; + } + + /* lookup whiteout for dentry */ + if (au_ftest_ren(a->flags, WHDST)) { + h_d = au_wh_lkup(a->dst_h_parent, &a->dst_dentry->d_name, + a->br); + err = PTR_ERR(h_d); + if (IS_ERR(h_d)) + goto out_whsrc; + if (!h_d->d_inode) + dput(h_d); + else + a->dst_wh_dentry = h_d; + } + + /* rename dentry to tmpwh */ + if (a->thargs) { + err = au_whtmp_ren(a->dst_h_dentry, a->br); + if (unlikely(err)) + goto out_whdst; + + d = a->dst_dentry; + au_set_h_dptr(d, a->btgt, NULL); + err = au_lkup_neg(d, a->btgt); + if (unlikely(err)) + goto out_whtmp; + a->dst_h_dentry = au_h_dptr(d, a->btgt); + } + + /* cpup src */ + if (a->dst_h_dentry->d_inode && a->src_bstart != a->btgt) { + struct mutex *h_mtx = &a->src_h_dentry->d_inode->i_mutex; + + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + err = au_sio_cpup_simple(a->src_dentry, a->btgt, -1, + !AuCpup_DTIME); + mutex_unlock(h_mtx); + if (unlikely(err)) + goto out_whtmp; + } + + /* rename by vfs_rename or cpup */ + d = a->dst_dentry; + if (au_ftest_ren(a->flags, ISDIR) + && (a->dst_wh_dentry + || au_dbdiropq(d) == a->btgt + /* hide the lower to keep xino */ + || a->btgt < au_dbend(d) + || au_opt_test(au_mntflags(d->d_sb), ALWAYS_DIROPQ))) + au_fset_ren(a->flags, DIROPQ); + err = au_ren_or_cpup(a); + if (unlikely(err)) + /* leave the copied-up one */ + goto out_whtmp; + + /* make dir opaque */ + if (au_ftest_ren(a->flags, DIROPQ)) { + err = au_ren_diropq(a); + if (unlikely(err)) + goto out_rename; + } + + /* update target timestamps */ + AuDebugOn(au_dbstart(a->src_dentry) != a->btgt); + a->h_path.dentry = au_h_dptr(a->src_dentry, a->btgt); + vfsub_update_h_iattr(&a->h_path, /*did*/NULL); /*ignore*/ + a->src_inode->i_ctime = a->h_path.dentry->d_inode->i_ctime; + + /* remove whiteout for dentry */ + if (a->dst_wh_dentry) { + a->h_path.dentry = a->dst_wh_dentry; + err = au_wh_unlink_dentry(a->dst_h_dir, &a->h_path, + a->dst_dentry); + if (unlikely(err)) + goto out_diropq; + } + + /* remove whtmp */ + if (a->thargs) + au_ren_del_whtmp(a); /* ignore this error */ + + err = 0; + goto out_success; + + out_diropq: + if (au_ftest_ren(a->flags, DIROPQ)) + au_ren_rev_diropq(err, a); + out_rename: + if (!au_ftest_ren(a->flags, CPUP)) + au_ren_rev_rename(err, a); + else + au_ren_rev_cpup(err, a); + out_whtmp: + if (a->thargs) + au_ren_rev_whtmp(err, a); + out_whdst: + dput(a->dst_wh_dentry); + a->dst_wh_dentry = NULL; + out_whsrc: + if (a->src_wh_dentry) + au_ren_rev_whsrc(err, a); + au_ren_rev_drop(a); + out_success: + dput(a->src_wh_dentry); + dput(a->dst_wh_dentry); + out_thargs: + if (a->thargs) { + dput(a->h_dst); + au_whtmp_rmdir_free(a->thargs); + a->thargs = NULL; + } + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * test if @dentry dir can be rename destination or not. + * success means, it is a logically empty dir. + */ +static int may_rename_dstdir(struct dentry *dentry, struct au_nhash *whlist) +{ + return au_test_empty(dentry, whlist); +} + +/* + * test if @dentry dir can be rename source or not. + * if it can, return 0 and @children is filled. + * success means, + * - it is a logically empty dir. + * - or, it exists on writable branch and has no children including whiteouts + * on the lower branch. + */ +static int may_rename_srcdir(struct dentry *dentry, aufs_bindex_t btgt) +{ + int err; + unsigned int rdhash; + aufs_bindex_t bstart; + + bstart = au_dbstart(dentry); + if (bstart != btgt) { + struct au_nhash whlist; + + SiMustAnyLock(dentry->d_sb); + rdhash = au_sbi(dentry->d_sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, + dentry)); + err = au_nhash_alloc(&whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_test_empty(dentry, &whlist); + au_nhash_wh_free(&whlist); + goto out; + } + + if (bstart == au_dbtaildir(dentry)) + return 0; /* success */ + + err = au_test_empty_lower(dentry); + + out: + if (err == -ENOTEMPTY) { + AuWarn1("renaming dir who has child(ren) on multiple branches," + " is not supported\n"); + err = -EXDEV; + } + return err; +} + +/* side effect: sets whlist and h_dentry */ +static int au_ren_may_dir(struct au_ren_args *a) +{ + int err; + unsigned int rdhash; + struct dentry *d; + + d = a->dst_dentry; + SiMustAnyLock(d->d_sb); + + err = 0; + if (au_ftest_ren(a->flags, ISDIR) && a->dst_inode) { + rdhash = au_sbi(d->d_sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, d)); + err = au_nhash_alloc(&a->whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + + au_set_dbstart(d, a->dst_bstart); + err = may_rename_dstdir(d, &a->whlist); + au_set_dbstart(d, a->btgt); + } + a->dst_h_dentry = au_h_dptr(d, au_dbstart(d)); + if (unlikely(err)) + goto out; + + d = a->src_dentry; + a->src_h_dentry = au_h_dptr(d, au_dbstart(d)); + if (au_ftest_ren(a->flags, ISDIR)) { + err = may_rename_srcdir(d, a->btgt); + if (unlikely(err)) { + au_nhash_wh_free(&a->whlist); + a->whlist.nh_num = 0; + } + } + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * simple tests for rename. + * following the checks in vfs, plus the parent-child relationship. + */ +static int au_may_ren(struct au_ren_args *a) +{ + int err, isdir; + struct inode *h_inode; + + if (a->src_bstart == a->btgt) { + err = au_may_del(a->src_dentry, a->btgt, a->src_h_parent, + au_ftest_ren(a->flags, ISDIR)); + if (unlikely(err)) + goto out; + err = -EINVAL; + if (unlikely(a->src_h_dentry == a->h_trap)) + goto out; + } + + err = 0; + if (a->dst_bstart != a->btgt) + goto out; + + err = -EIO; + h_inode = a->dst_h_dentry->d_inode; + isdir = !!au_ftest_ren(a->flags, ISDIR); + if (!a->dst_dentry->d_inode) { + if (unlikely(h_inode)) + goto out; + err = au_may_add(a->dst_dentry, a->btgt, a->dst_h_parent, + isdir); + } else { + if (unlikely(!h_inode || !h_inode->i_nlink)) + goto out; + err = au_may_del(a->dst_dentry, a->btgt, a->dst_h_parent, + isdir); + if (unlikely(err)) + goto out; + err = -ENOTEMPTY; + if (unlikely(a->dst_h_dentry == a->h_trap)) + goto out; + err = 0; + } + + out: + if (unlikely(err == -ENOENT || err == -EEXIST)) + err = -EIO; + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * locking order + * (VFS) + * - src_dir and dir by lock_rename() + * - inode if exitsts + * (aufs) + * - lock all + * + src_dentry and dentry by aufs_read_and_write_lock2() which calls, + * + si_read_lock + * + di_write_lock2_child() + * + di_write_lock_child() + * + ii_write_lock_child() + * + di_write_lock_child2() + * + ii_write_lock_child2() + * + src_parent and parent + * + di_write_lock_parent() + * + ii_write_lock_parent() + * + di_write_lock_parent2() + * + ii_write_lock_parent2() + * + lower src_dir and dir by vfsub_lock_rename() + * + verify the every relationships between child and parent. if any + * of them failed, unlock all and return -EBUSY. + */ +static void au_ren_unlock(struct au_ren_args *a) +{ + struct super_block *sb; + + sb = a->dst_dentry->d_sb; + if (au_ftest_ren(a->flags, MNT_WRITE)) + mnt_drop_write(a->br->br_mnt); + vfsub_unlock_rename(a->src_h_parent, a->src_hdir, + a->dst_h_parent, a->dst_hdir); +} + +static int au_ren_lock(struct au_ren_args *a) +{ + int err; + unsigned int udba; + + err = 0; + a->src_h_parent = au_h_dptr(a->src_parent, a->btgt); + a->src_hdir = au_hi(a->src_dir, a->btgt); + a->dst_h_parent = au_h_dptr(a->dst_parent, a->btgt); + a->dst_hdir = au_hi(a->dst_dir, a->btgt); + a->h_trap = vfsub_lock_rename(a->src_h_parent, a->src_hdir, + a->dst_h_parent, a->dst_hdir); + udba = au_opt_udba(a->src_dentry->d_sb); + if (unlikely(a->src_hdir->hi_inode != a->src_h_parent->d_inode + || a->dst_hdir->hi_inode != a->dst_h_parent->d_inode)) + err = au_busy_or_stale(); + if (!err && au_dbstart(a->src_dentry) == a->btgt) + err = au_h_verify(a->src_h_dentry, udba, + a->src_h_parent->d_inode, a->src_h_parent, + a->br); + if (!err && au_dbstart(a->dst_dentry) == a->btgt) + err = au_h_verify(a->dst_h_dentry, udba, + a->dst_h_parent->d_inode, a->dst_h_parent, + a->br); + if (!err) { + err = mnt_want_write(a->br->br_mnt); + if (unlikely(err)) + goto out_unlock; + au_fset_ren(a->flags, MNT_WRITE); + goto out; /* success */ + } + + err = au_busy_or_stale(); + + out_unlock: + au_ren_unlock(a); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void au_ren_refresh_dir(struct au_ren_args *a) +{ + struct inode *dir; + + dir = a->dst_dir; + dir->i_version++; + if (au_ftest_ren(a->flags, ISDIR)) { + /* is this updating defined in POSIX? */ + au_cpup_attr_timesizes(a->src_inode); + au_cpup_attr_nlink(dir, /*force*/1); + if (a->dst_inode) { + clear_nlink(a->dst_inode); + au_cpup_attr_timesizes(a->dst_inode); + } + } + if (au_ibstart(dir) == a->btgt) + au_cpup_attr_timesizes(dir); + + if (au_ftest_ren(a->flags, ISSAMEDIR)) + return; + + dir = a->src_dir; + dir->i_version++; + if (au_ftest_ren(a->flags, ISDIR)) + au_cpup_attr_nlink(dir, /*force*/1); + if (au_ibstart(dir) == a->btgt) + au_cpup_attr_timesizes(dir); +} + +static void au_ren_refresh(struct au_ren_args *a) +{ + aufs_bindex_t bend, bindex; + struct dentry *d, *h_d; + struct inode *i, *h_i; + struct super_block *sb; + + d = a->src_dentry; + au_set_dbwh(d, -1); + bend = au_dbend(d); + for (bindex = a->btgt + 1; bindex <= bend; bindex++) { + h_d = au_h_dptr(d, bindex); + if (h_d) + au_set_h_dptr(d, bindex, NULL); + } + au_set_dbend(d, a->btgt); + + sb = d->d_sb; + i = a->src_inode; + if (au_opt_test(au_mntflags(sb), PLINK) && au_plink_test(i)) + return; /* success */ + + bend = au_ibend(i); + for (bindex = a->btgt + 1; bindex <= bend; bindex++) { + h_i = au_h_iptr(i, bindex); + if (h_i) { + au_xino_write(sb, bindex, h_i->i_ino, /*ino*/0); + /* ignore this error */ + au_set_h_iptr(i, bindex, NULL, 0); + } + } + au_set_ibend(i, a->btgt); +} + +/* ---------------------------------------------------------------------- */ + +/* mainly for link(2) and rename(2) */ +int au_wbr(struct dentry *dentry, aufs_bindex_t btgt) +{ + aufs_bindex_t bdiropq, bwh; + struct dentry *parent; + struct au_branch *br; + + parent = dentry->d_parent; + IMustLock(parent->d_inode); /* dir is locked */ + + bdiropq = au_dbdiropq(parent); + bwh = au_dbwh(dentry); + br = au_sbr(dentry->d_sb, btgt); + if (au_br_rdonly(br) + || (0 <= bdiropq && bdiropq < btgt) + || (0 <= bwh && bwh < btgt)) + btgt = -1; + + AuDbg("btgt %d\n", btgt); + return btgt; +} + +/* sets src_bstart, dst_bstart and btgt */ +static int au_ren_wbr(struct au_ren_args *a) +{ + int err; + struct au_wr_dir_args wr_dir_args = { + /* .force_btgt = -1, */ + .flags = AuWrDir_ADD_ENTRY + }; + + a->src_bstart = au_dbstart(a->src_dentry); + a->dst_bstart = au_dbstart(a->dst_dentry); + if (au_ftest_ren(a->flags, ISDIR)) + au_fset_wrdir(wr_dir_args.flags, ISDIR); + wr_dir_args.force_btgt = a->src_bstart; + if (a->dst_inode && a->dst_bstart < a->src_bstart) + wr_dir_args.force_btgt = a->dst_bstart; + wr_dir_args.force_btgt = au_wbr(a->dst_dentry, wr_dir_args.force_btgt); + err = au_wr_dir(a->dst_dentry, a->src_dentry, &wr_dir_args); + a->btgt = err; + + return err; +} + +static void au_ren_dt(struct au_ren_args *a) +{ + a->h_path.dentry = a->src_h_parent; + au_dtime_store(a->src_dt + AuPARENT, a->src_parent, &a->h_path); + if (!au_ftest_ren(a->flags, ISSAMEDIR)) { + a->h_path.dentry = a->dst_h_parent; + au_dtime_store(a->dst_dt + AuPARENT, a->dst_parent, &a->h_path); + } + + au_fclr_ren(a->flags, DT_DSTDIR); + if (!au_ftest_ren(a->flags, ISDIR)) + return; + + a->h_path.dentry = a->src_h_dentry; + au_dtime_store(a->src_dt + AuCHILD, a->src_dentry, &a->h_path); + if (a->dst_h_dentry->d_inode) { + au_fset_ren(a->flags, DT_DSTDIR); + a->h_path.dentry = a->dst_h_dentry; + au_dtime_store(a->dst_dt + AuCHILD, a->dst_dentry, &a->h_path); + } +} + +static void au_ren_rev_dt(int err, struct au_ren_args *a) +{ + struct dentry *h_d; + struct mutex *h_mtx; + + au_dtime_revert(a->src_dt + AuPARENT); + if (!au_ftest_ren(a->flags, ISSAMEDIR)) + au_dtime_revert(a->dst_dt + AuPARENT); + + if (au_ftest_ren(a->flags, ISDIR) && err != -EIO) { + h_d = a->src_dt[AuCHILD].dt_h_path.dentry; + h_mtx = &h_d->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + au_dtime_revert(a->src_dt + AuCHILD); + mutex_unlock(h_mtx); + + if (au_ftest_ren(a->flags, DT_DSTDIR)) { + h_d = a->dst_dt[AuCHILD].dt_h_path.dentry; + h_mtx = &h_d->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + au_dtime_revert(a->dst_dt + AuCHILD); + mutex_unlock(h_mtx); + } + } +} + +/* ---------------------------------------------------------------------- */ + +int aufs_rename(struct inode *_src_dir, struct dentry *_src_dentry, + struct inode *_dst_dir, struct dentry *_dst_dentry) +{ + int err; + /* reduce stack space */ + struct au_ren_args *a; + + AuDbg("%.*s, %.*s\n", AuDLNPair(_src_dentry), AuDLNPair(_dst_dentry)); + IMustLock(_src_dir); + IMustLock(_dst_dir); + + err = -ENOMEM; + BUILD_BUG_ON(sizeof(*a) > PAGE_SIZE); + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + a->src_dir = _src_dir; + a->src_dentry = _src_dentry; + a->src_inode = a->src_dentry->d_inode; + a->src_parent = a->src_dentry->d_parent; /* dir inode is locked */ + a->dst_dir = _dst_dir; + a->dst_dentry = _dst_dentry; + a->dst_inode = a->dst_dentry->d_inode; + a->dst_parent = a->dst_dentry->d_parent; /* dir inode is locked */ + if (a->dst_inode) { + IMustLock(a->dst_inode); + au_igrab(a->dst_inode); + } + + err = -ENOTDIR; + if (S_ISDIR(a->src_inode->i_mode)) { + au_fset_ren(a->flags, ISDIR); + if (unlikely(a->dst_inode && !S_ISDIR(a->dst_inode->i_mode))) + goto out_free; + aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, + AuLock_DIR | AuLock_FLUSH); + } else + aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, + AuLock_FLUSH); + + au_fset_ren(a->flags, ISSAMEDIR); /* temporary */ + di_write_lock_parent(a->dst_parent); + + /* which branch we process */ + err = au_ren_wbr(a); + if (unlikely(err < 0)) + goto out_unlock; + a->br = au_sbr(a->dst_dentry->d_sb, a->btgt); + a->h_path.mnt = a->br->br_mnt; + + /* are they available to be renamed */ + err = au_ren_may_dir(a); + if (unlikely(err)) + goto out_children; + + /* prepare the writable parent dir on the same branch */ + if (a->dst_bstart == a->btgt) { + au_fset_ren(a->flags, WHDST); + } else { + err = au_cpup_dirs(a->dst_dentry, a->btgt); + if (unlikely(err)) + goto out_children; + } + + if (a->src_dir != a->dst_dir) { + /* + * this temporary unlock is safe, + * because both dir->i_mutex are locked. + */ + di_write_unlock(a->dst_parent); + di_write_lock_parent(a->src_parent); + err = au_wr_dir_need_wh(a->src_dentry, + au_ftest_ren(a->flags, ISDIR), + &a->btgt); + di_write_unlock(a->src_parent); + di_write_lock2_parent(a->src_parent, a->dst_parent, /*isdir*/1); + au_fclr_ren(a->flags, ISSAMEDIR); + } else + err = au_wr_dir_need_wh(a->src_dentry, + au_ftest_ren(a->flags, ISDIR), + &a->btgt); + if (unlikely(err < 0)) + goto out_children; + if (err) + au_fset_ren(a->flags, WHSRC); + + /* lock them all */ + err = au_ren_lock(a); + if (unlikely(err)) + goto out_children; + + if (!au_opt_test(au_mntflags(a->dst_dir->i_sb), UDBA_NONE)) + err = au_may_ren(a); + else if (unlikely(a->dst_dentry->d_name.len > AUFS_MAX_NAMELEN)) + err = -ENAMETOOLONG; + if (unlikely(err)) + goto out_hdir; + + /* store timestamps to be revertible */ + au_ren_dt(a); + + /* here we go */ + err = do_rename(a); + if (unlikely(err)) + goto out_dt; + + /* update dir attributes */ + au_ren_refresh_dir(a); + + /* dput/iput all lower dentries */ + au_ren_refresh(a); + + goto out_hdir; /* success */ + + out_dt: + au_ren_rev_dt(err, a); + out_hdir: + au_ren_unlock(a); + out_children: + au_nhash_wh_free(&a->whlist); + out_unlock: + if (unlikely(err && au_ftest_ren(a->flags, ISDIR))) { + au_update_dbstart(a->dst_dentry); + d_drop(a->dst_dentry); + } + if (!err) + d_move(a->src_dentry, a->dst_dentry); + if (au_ftest_ren(a->flags, ISSAMEDIR)) + di_write_unlock(a->dst_parent); + else + di_write_unlock2(a->src_parent, a->dst_parent); + aufs_read_and_write_unlock2(a->dst_dentry, a->src_dentry); + out_free: + iput(a->dst_inode); + if (a->thargs) + au_whtmp_rmdir_free(a->thargs); + kfree(a); + out: + AuTraceErr(err); + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/export.c +++ linux-2.6.32/ubuntu/aufs/export.c @@ -0,0 +1,746 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * export via nfs + */ + +#include +#include +#include +#include +#include +#include +#include "aufs.h" + +union conv { +#ifdef CONFIG_AUFS_INO_T_64 + __u32 a[2]; +#else + __u32 a[1]; +#endif + ino_t ino; +}; + +static ino_t decode_ino(__u32 *a) +{ + union conv u; + + BUILD_BUG_ON(sizeof(u.ino) != sizeof(u.a)); + u.a[0] = a[0]; +#ifdef CONFIG_AUFS_INO_T_64 + u.a[1] = a[1]; +#endif + return u.ino; +} + +static void encode_ino(__u32 *a, ino_t ino) +{ + union conv u; + + u.ino = ino; + a[0] = u.a[0]; +#ifdef CONFIG_AUFS_INO_T_64 + a[1] = u.a[1]; +#endif +} + +/* NFS file handle */ +enum { + Fh_br_id, + Fh_sigen, +#ifdef CONFIG_AUFS_INO_T_64 + /* support 64bit inode number */ + Fh_ino1, + Fh_ino2, + Fh_dir_ino1, + Fh_dir_ino2, +#else + Fh_ino1, + Fh_dir_ino1, +#endif + Fh_igen, + Fh_h_type, + Fh_tail, + + Fh_ino = Fh_ino1, + Fh_dir_ino = Fh_dir_ino1 +}; + +static int au_test_anon(struct dentry *dentry) +{ + return !!(dentry->d_flags & DCACHE_DISCONNECTED); +} + +/* ---------------------------------------------------------------------- */ +/* inode generation external table */ + +int au_xigen_inc(struct inode *inode) +{ + int err; + loff_t pos; + ssize_t sz; + __u32 igen; + struct super_block *sb; + struct au_sbinfo *sbinfo; + + err = 0; + sb = inode->i_sb; + sbinfo = au_sbi(sb); + /* + * temporary workaround for escaping from SiMustAnyLock() in + * au_mntflags(), since this function is called from au_iinfo_fin(). + */ + if (unlikely(!au_opt_test(sbinfo->si_mntflags, XINO))) + goto out; + + pos = inode->i_ino; + pos *= sizeof(igen); + igen = inode->i_generation + 1; + sz = xino_fwrite(sbinfo->si_xwrite, sbinfo->si_xigen, &igen, + sizeof(igen), &pos); + if (sz == sizeof(igen)) + goto out; /* success */ + + err = sz; + if (unlikely(sz >= 0)) { + err = -EIO; + AuIOErr("xigen error (%zd)\n", sz); + } + + out: + return err; +} + +int au_xigen_new(struct inode *inode) +{ + int err; + loff_t pos; + ssize_t sz; + struct super_block *sb; + struct au_sbinfo *sbinfo; + struct file *file; + + err = 0; + /* todo: dirty, at mount time */ + if (inode->i_ino == AUFS_ROOT_INO) + goto out; + sb = inode->i_sb; + SiMustAnyLock(sb); + if (unlikely(!au_opt_test(au_mntflags(sb), XINO))) + goto out; + + err = -EFBIG; + pos = inode->i_ino; + if (unlikely(au_loff_max / sizeof(inode->i_generation) - 1 < pos)) { + AuIOErr1("too large i%lld\n", pos); + goto out; + } + pos *= sizeof(inode->i_generation); + + err = 0; + sbinfo = au_sbi(sb); + file = sbinfo->si_xigen; + BUG_ON(!file); + + if (i_size_read(file->f_dentry->d_inode) + < pos + sizeof(inode->i_generation)) { + inode->i_generation = atomic_inc_return(&sbinfo->si_xigen_next); + sz = xino_fwrite(sbinfo->si_xwrite, file, &inode->i_generation, + sizeof(inode->i_generation), &pos); + } else + sz = xino_fread(sbinfo->si_xread, file, &inode->i_generation, + sizeof(inode->i_generation), &pos); + if (sz == sizeof(inode->i_generation)) + goto out; /* success */ + + err = sz; + if (unlikely(sz >= 0)) { + err = -EIO; + AuIOErr("xigen error (%zd)\n", sz); + } + + out: + return err; +} + +int au_xigen_set(struct super_block *sb, struct file *base) +{ + int err; + struct au_sbinfo *sbinfo; + struct file *file; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + file = au_xino_create2(base, sbinfo->si_xigen); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + err = 0; + if (sbinfo->si_xigen) + fput(sbinfo->si_xigen); + sbinfo->si_xigen = file; + + out: + return err; +} + +void au_xigen_clr(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + if (sbinfo->si_xigen) { + fput(sbinfo->si_xigen); + sbinfo->si_xigen = NULL; + } +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry *decode_by_ino(struct super_block *sb, ino_t ino, + ino_t dir_ino) +{ + struct dentry *dentry, *d; + struct inode *inode; + unsigned int sigen; + + dentry = NULL; + inode = ilookup(sb, ino); + if (!inode) + goto out; + + dentry = ERR_PTR(-ESTALE); + sigen = au_sigen(sb); + if (unlikely(is_bad_inode(inode) + || IS_DEADDIR(inode) + || sigen != au_iigen(inode))) + goto out_iput; + + dentry = NULL; + if (!dir_ino || S_ISDIR(inode->i_mode)) + dentry = d_find_alias(inode); + else { + spin_lock(&dcache_lock); + list_for_each_entry(d, &inode->i_dentry, d_alias) + if (!au_test_anon(d) + && d->d_parent->d_inode->i_ino == dir_ino) { + dentry = dget_locked(d); + break; + } + spin_unlock(&dcache_lock); + } + if (unlikely(dentry && sigen != au_digen(dentry))) { + dput(dentry); + dentry = ERR_PTR(-ESTALE); + } + + out_iput: + iput(inode); + out: + return dentry; +} + +/* ---------------------------------------------------------------------- */ + +/* todo: dirty? */ +/* if exportfs_decode_fh() passed vfsmount*, we could be happy */ +static struct vfsmount *au_mnt_get(struct super_block *sb) +{ + struct mnt_namespace *ns; + struct vfsmount *pos, *mnt; + + spin_lock(&vfsmount_lock); + /* no get/put ?? */ + AuDebugOn(!current->nsproxy); + ns = current->nsproxy->mnt_ns; + AuDebugOn(!ns); + mnt = NULL; + /* the order (reverse) will not be a problem */ + list_for_each_entry(pos, &ns->list, mnt_list) + if (pos->mnt_sb == sb) { + mnt = mntget(pos); + break; + } + spin_unlock(&vfsmount_lock); + AuDebugOn(!mnt); + + return mnt; +} + +struct au_nfsd_si_lock { + const unsigned int sigen; + const aufs_bindex_t br_id; + unsigned char force_lock; +}; + +static aufs_bindex_t si_nfsd_read_lock(struct super_block *sb, + struct au_nfsd_si_lock *nsi_lock) +{ + aufs_bindex_t bindex; + + si_read_lock(sb, AuLock_FLUSH); + + /* branch id may be wrapped around */ + bindex = au_br_index(sb, nsi_lock->br_id); + if (bindex >= 0 && nsi_lock->sigen + AUFS_BRANCH_MAX > au_sigen(sb)) + goto out; /* success */ + + if (!nsi_lock->force_lock) + si_read_unlock(sb); + bindex = -1; + + out: + return bindex; +} + +struct find_name_by_ino { + int called, found; + ino_t ino; + char *name; + int namelen; +}; + +static int +find_name_by_ino(void *arg, const char *name, int namelen, loff_t offset, + u64 ino, unsigned int d_type) +{ + struct find_name_by_ino *a = arg; + + a->called++; + if (a->ino != ino) + return 0; + + memcpy(a->name, name, namelen); + a->namelen = namelen; + a->found = 1; + return 1; +} + +static struct dentry *au_lkup_by_ino(struct path *path, ino_t ino, + struct au_nfsd_si_lock *nsi_lock) +{ + struct dentry *dentry, *parent; + struct file *file; + struct inode *dir; + struct find_name_by_ino arg; + int err; + + parent = path->dentry; + if (nsi_lock) + si_read_unlock(parent->d_sb); + path_get(path); + file = vfsub_dentry_open(path, au_dir_roflags, current_cred()); + dentry = (void *)file; + if (IS_ERR(file)) + goto out; + + dentry = ERR_PTR(-ENOMEM); + arg.name = __getname(); + if (unlikely(!arg.name)) + goto out_file; + arg.ino = ino; + arg.found = 0; + do { + arg.called = 0; + /* smp_mb(); */ + err = vfsub_readdir(file, find_name_by_ino, &arg); + } while (!err && !arg.found && arg.called); + dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_name; + dentry = ERR_PTR(-ENOENT); + if (!arg.found) + goto out_name; + + /* do not call au_lkup_one() */ + dir = parent->d_inode; + mutex_lock(&dir->i_mutex); + dentry = vfsub_lookup_one_len(arg.name, parent, arg.namelen); + mutex_unlock(&dir->i_mutex); + AuTraceErrPtr(dentry); + if (IS_ERR(dentry)) + goto out_name; + AuDebugOn(au_test_anon(dentry)); + if (unlikely(!dentry->d_inode)) { + dput(dentry); + dentry = ERR_PTR(-ENOENT); + } + + out_name: + __putname(arg.name); + out_file: + fput(file); + out: + if (unlikely(nsi_lock + && si_nfsd_read_lock(parent->d_sb, nsi_lock) < 0)) + if (!IS_ERR(dentry)) { + dput(dentry); + dentry = ERR_PTR(-ESTALE); + } + AuTraceErrPtr(dentry); + return dentry; +} + +static struct dentry *decode_by_dir_ino(struct super_block *sb, ino_t ino, + ino_t dir_ino, + struct au_nfsd_si_lock *nsi_lock) +{ + struct dentry *dentry; + struct path path; + + if (dir_ino != AUFS_ROOT_INO) { + path.dentry = decode_by_ino(sb, dir_ino, 0); + dentry = path.dentry; + if (!path.dentry || IS_ERR(path.dentry)) + goto out; + AuDebugOn(au_test_anon(path.dentry)); + } else + path.dentry = dget(sb->s_root); + + path.mnt = au_mnt_get(sb); + dentry = au_lkup_by_ino(&path, ino, nsi_lock); + path_put(&path); + + out: + AuTraceErrPtr(dentry); + return dentry; +} + +/* ---------------------------------------------------------------------- */ + +static int h_acceptable(void *expv, struct dentry *dentry) +{ + return 1; +} + +static char *au_build_path(struct dentry *h_parent, struct path *h_rootpath, + char *buf, int len, struct super_block *sb) +{ + char *p; + int n; + struct path path; + + p = d_path(h_rootpath, buf, len); + if (IS_ERR(p)) + goto out; + n = strlen(p); + + path.mnt = h_rootpath->mnt; + path.dentry = h_parent; + p = d_path(&path, buf, len); + if (IS_ERR(p)) + goto out; + if (n != 1) + p += n; + + path.mnt = au_mnt_get(sb); + path.dentry = sb->s_root; + p = d_path(&path, buf, len - strlen(p)); + mntput(path.mnt); + if (IS_ERR(p)) + goto out; + if (n != 1) + p[strlen(p)] = '/'; + + out: + AuTraceErrPtr(p); + return p; +} + +static +struct dentry *decode_by_path(struct super_block *sb, aufs_bindex_t bindex, + ino_t ino, __u32 *fh, int fh_len, + struct au_nfsd_si_lock *nsi_lock) +{ + struct dentry *dentry, *h_parent, *root; + struct super_block *h_sb; + char *pathname, *p; + struct vfsmount *h_mnt; + struct au_branch *br; + int err; + struct path path; + + br = au_sbr(sb, bindex); + /* au_br_get(br); */ + h_mnt = br->br_mnt; + h_sb = h_mnt->mnt_sb; + /* todo: call lower fh_to_dentry()? fh_to_parent()? */ + h_parent = exportfs_decode_fh(h_mnt, (void *)(fh + Fh_tail), + fh_len - Fh_tail, fh[Fh_h_type], + h_acceptable, /*context*/NULL); + dentry = h_parent; + if (unlikely(!h_parent || IS_ERR(h_parent))) { + AuWarn1("%s decode_fh failed, %ld\n", + au_sbtype(h_sb), PTR_ERR(h_parent)); + goto out; + } + dentry = NULL; + if (unlikely(au_test_anon(h_parent))) { + AuWarn1("%s decode_fh returned a disconnected dentry\n", + au_sbtype(h_sb)); + goto out_h_parent; + } + + dentry = ERR_PTR(-ENOMEM); + pathname = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!pathname)) + goto out_h_parent; + + root = sb->s_root; + path.mnt = h_mnt; + di_read_lock_parent(root, !AuLock_IR); + path.dentry = au_h_dptr(root, bindex); + di_read_unlock(root, !AuLock_IR); + p = au_build_path(h_parent, &path, pathname, PAGE_SIZE, sb); + dentry = (void *)p; + if (IS_ERR(p)) + goto out_pathname; + + si_read_unlock(sb); + err = vfsub_kern_path(p, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path); + dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_relock; + + dentry = ERR_PTR(-ENOENT); + AuDebugOn(au_test_anon(path.dentry)); + if (unlikely(!path.dentry->d_inode)) + goto out_path; + + if (ino != path.dentry->d_inode->i_ino) + dentry = au_lkup_by_ino(&path, ino, /*nsi_lock*/NULL); + else + dentry = dget(path.dentry); + + out_path: + path_put(&path); + out_relock: + if (unlikely(si_nfsd_read_lock(sb, nsi_lock) < 0)) + if (!IS_ERR(dentry)) { + dput(dentry); + dentry = ERR_PTR(-ESTALE); + } + out_pathname: + free_page((unsigned long)pathname); + out_h_parent: + dput(h_parent); + out: + /* au_br_put(br); */ + AuTraceErrPtr(dentry); + return dentry; +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry * +aufs_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, + int fh_type) +{ + struct dentry *dentry; + __u32 *fh = fid->raw; + ino_t ino, dir_ino; + aufs_bindex_t bindex; + struct au_nfsd_si_lock nsi_lock = { + .sigen = fh[Fh_sigen], + .br_id = fh[Fh_br_id], + .force_lock = 0 + }; + + AuDebugOn(fh_len < Fh_tail); + + dentry = ERR_PTR(-ESTALE); + /* branch id may be wrapped around */ + bindex = si_nfsd_read_lock(sb, &nsi_lock); + if (unlikely(bindex < 0)) + goto out; + nsi_lock.force_lock = 1; + + /* is this inode still cached? */ + ino = decode_ino(fh + Fh_ino); + AuDebugOn(ino == AUFS_ROOT_INO); + dir_ino = decode_ino(fh + Fh_dir_ino); + dentry = decode_by_ino(sb, ino, dir_ino); + if (IS_ERR(dentry)) + goto out_unlock; + if (dentry) + goto accept; + + /* is the parent dir cached? */ + dentry = decode_by_dir_ino(sb, ino, dir_ino, &nsi_lock); + if (IS_ERR(dentry)) + goto out_unlock; + if (dentry) + goto accept; + + /* lookup path */ + dentry = decode_by_path(sb, bindex, ino, fh, fh_len, &nsi_lock); + if (IS_ERR(dentry)) + goto out_unlock; + if (unlikely(!dentry)) + /* todo?: make it ESTALE */ + goto out_unlock; + + accept: + if (dentry->d_inode->i_generation == fh[Fh_igen]) + goto out_unlock; /* success */ + + dput(dentry); + dentry = ERR_PTR(-ESTALE); + out_unlock: + si_read_unlock(sb); + out: + AuTraceErrPtr(dentry); + return dentry; +} + +#if 0 /* reserved for future use */ +/* support subtreecheck option */ +static struct dentry *aufs_fh_to_parent(struct super_block *sb, struct fid *fid, + int fh_len, int fh_type) +{ + struct dentry *parent; + __u32 *fh = fid->raw; + ino_t dir_ino; + + dir_ino = decode_ino(fh + Fh_dir_ino); + parent = decode_by_ino(sb, dir_ino, 0); + if (IS_ERR(parent)) + goto out; + if (!parent) + parent = decode_by_path(sb, au_br_index(sb, fh[Fh_br_id]), + dir_ino, fh, fh_len); + + out: + AuTraceErrPtr(parent); + return parent; +} +#endif + +/* ---------------------------------------------------------------------- */ + +static int aufs_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len, + int connectable) +{ + int err; + aufs_bindex_t bindex, bend; + struct super_block *sb, *h_sb; + struct inode *inode; + struct dentry *parent, *h_parent; + struct au_branch *br; + + AuDebugOn(au_test_anon(dentry)); + + parent = NULL; + err = -ENOSPC; + if (unlikely(*max_len <= Fh_tail)) { + AuWarn1("NFSv2 client (max_len %d)?\n", *max_len); + goto out; + } + + err = FILEID_ROOT; + if (IS_ROOT(dentry)) { + AuDebugOn(dentry->d_inode->i_ino != AUFS_ROOT_INO); + goto out; + } + + err = -EIO; + h_parent = NULL; + sb = dentry->d_sb; + aufs_read_lock(dentry, AuLock_FLUSH | AuLock_IR); + parent = dget_parent(dentry); + di_read_lock_parent(parent, !AuLock_IR); + inode = dentry->d_inode; + AuDebugOn(!inode); +#ifdef CONFIG_AUFS_DEBUG + if (unlikely(!au_opt_test(au_mntflags(sb), XINO))) + AuWarn1("NFS-exporting requires xino\n"); +#endif + + bend = au_dbtaildir(parent); + for (bindex = au_dbstart(parent); bindex <= bend; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (h_parent) { + dget(h_parent); + break; + } + } + if (unlikely(!h_parent)) + goto out_unlock; + + err = -EPERM; + br = au_sbr(sb, bindex); + h_sb = br->br_mnt->mnt_sb; + if (unlikely(!h_sb->s_export_op)) { + AuErr1("%s branch is not exportable\n", au_sbtype(h_sb)); + goto out_dput; + } + + fh[Fh_br_id] = br->br_id; + fh[Fh_sigen] = au_sigen(sb); + encode_ino(fh + Fh_ino, inode->i_ino); + encode_ino(fh + Fh_dir_ino, parent->d_inode->i_ino); + fh[Fh_igen] = inode->i_generation; + + *max_len -= Fh_tail; + fh[Fh_h_type] = exportfs_encode_fh(h_parent, (void *)(fh + Fh_tail), + max_len, + /*connectable or subtreecheck*/0); + err = fh[Fh_h_type]; + *max_len += Fh_tail; + /* todo: macros? */ + if (err != 255) + err = 99; + else + AuWarn1("%s encode_fh failed\n", au_sbtype(h_sb)); + + out_dput: + dput(h_parent); + out_unlock: + di_read_unlock(parent, !AuLock_IR); + dput(parent); + aufs_read_unlock(dentry, AuLock_IR); + out: + if (unlikely(err < 0)) + err = 255; + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct export_operations aufs_export_op = { + .fh_to_dentry = aufs_fh_to_dentry, + /* .fh_to_parent = aufs_fh_to_parent, */ + .encode_fh = aufs_encode_fh +}; + +void au_export_init(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + __u32 u; + + sb->s_export_op = &aufs_export_op; + sbinfo = au_sbi(sb); + sbinfo->si_xigen = NULL; + get_random_bytes(&u, sizeof(u)); + BUILD_BUG_ON(sizeof(u) != sizeof(int)); + atomic_set(&sbinfo->si_xigen_next, u); +} --- linux-2.6.32.orig/ubuntu/aufs/rwsem.h +++ linux-2.6.32/ubuntu/aufs/rwsem.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * simple read-write semaphore wrappers + */ + +#ifndef __AUFS_RWSEM_H__ +#define __AUFS_RWSEM_H__ + +#ifdef __KERNEL__ + +#include + +struct au_rwsem { + struct rw_semaphore rwsem; +#ifdef CONFIG_AUFS_DEBUG + /* just for debugging, not almighty counter */ + atomic_t rcnt, wcnt; +#endif +}; + +#ifdef CONFIG_AUFS_DEBUG +#define AuDbgCntInit(rw) do { \ + atomic_set(&(rw)->rcnt, 0); \ + atomic_set(&(rw)->wcnt, 0); \ + smp_mb(); /* atomic set */ \ +} while (0) + +#define AuDbgRcntInc(rw) atomic_inc_return(&(rw)->rcnt) +#define AuDbgRcntDec(rw) WARN_ON(atomic_dec_return(&(rw)->rcnt) < 0) +#define AuDbgWcntInc(rw) WARN_ON(atomic_inc_return(&(rw)->wcnt) > 1) +#define AuDbgWcntDec(rw) WARN_ON(atomic_dec_return(&(rw)->wcnt) < 0) +#else +#define AuDbgCntInit(rw) do {} while (0) +#define AuDbgRcntInc(rw) do {} while (0) +#define AuDbgRcntDec(rw) do {} while (0) +#define AuDbgWcntInc(rw) do {} while (0) +#define AuDbgWcntDec(rw) do {} while (0) +#endif /* CONFIG_AUFS_DEBUG */ + +/* to debug easier, do not make them inlined functions */ +#define AuRwMustNoWaiters(rw) AuDebugOn(!list_empty(&(rw)->rwsem.wait_list)) +/* rwsem_is_locked() is unusable */ +#define AuRwMustReadLock(rw) AuDebugOn(atomic_read(&(rw)->rcnt) <= 0) +#define AuRwMustWriteLock(rw) AuDebugOn(atomic_read(&(rw)->wcnt) <= 0) +#define AuRwMustAnyLock(rw) AuDebugOn(atomic_read(&(rw)->rcnt) <= 0 \ + && atomic_read(&(rw)->wcnt) <= 0) +#define AuRwDestroy(rw) AuDebugOn(atomic_read(&(rw)->rcnt) \ + || atomic_read(&(rw)->wcnt)) + +static inline void au_rw_init(struct au_rwsem *rw) +{ + AuDbgCntInit(rw); + init_rwsem(&rw->rwsem); +} + +static inline void au_rw_init_wlock(struct au_rwsem *rw) +{ + au_rw_init(rw); + down_write(&rw->rwsem); + AuDbgWcntInc(rw); +} + +static inline void au_rw_init_wlock_nested(struct au_rwsem *rw, + unsigned int lsc) +{ + au_rw_init(rw); + down_write_nested(&rw->rwsem, lsc); + AuDbgWcntInc(rw); +} + +static inline void au_rw_read_lock(struct au_rwsem *rw) +{ + down_read(&rw->rwsem); + AuDbgRcntInc(rw); +} + +static inline void au_rw_read_lock_nested(struct au_rwsem *rw, unsigned int lsc) +{ + down_read_nested(&rw->rwsem, lsc); + AuDbgRcntInc(rw); +} + +static inline void au_rw_read_unlock(struct au_rwsem *rw) +{ + AuRwMustReadLock(rw); + AuDbgRcntDec(rw); + up_read(&rw->rwsem); +} + +static inline void au_rw_dgrade_lock(struct au_rwsem *rw) +{ + AuRwMustWriteLock(rw); + AuDbgRcntInc(rw); + AuDbgWcntDec(rw); + downgrade_write(&rw->rwsem); +} + +static inline void au_rw_write_lock(struct au_rwsem *rw) +{ + down_write(&rw->rwsem); + AuDbgWcntInc(rw); +} + +static inline void au_rw_write_lock_nested(struct au_rwsem *rw, + unsigned int lsc) +{ + down_write_nested(&rw->rwsem, lsc); + AuDbgWcntInc(rw); +} + +static inline void au_rw_write_unlock(struct au_rwsem *rw) +{ + AuRwMustWriteLock(rw); + AuDbgWcntDec(rw); + up_write(&rw->rwsem); +} + +/* why is not _nested version defined */ +static inline int au_rw_read_trylock(struct au_rwsem *rw) +{ + int ret = down_read_trylock(&rw->rwsem); + if (ret) + AuDbgRcntInc(rw); + return ret; +} + +static inline int au_rw_write_trylock(struct au_rwsem *rw) +{ + int ret = down_write_trylock(&rw->rwsem); + if (ret) + AuDbgWcntInc(rw); + return ret; +} + +#undef AuDbgCntInit +#undef AuDbgRcntInc +#undef AuDbgRcntDec +#undef AuDbgWcntInc +#undef AuDbgWcntDec + +#define AuSimpleLockRwsemFuncs(prefix, param, rwsem) \ +static inline void prefix##_read_lock(param) \ +{ au_rw_read_lock(rwsem); } \ +static inline void prefix##_write_lock(param) \ +{ au_rw_write_lock(rwsem); } \ +static inline int prefix##_read_trylock(param) \ +{ return au_rw_read_trylock(rwsem); } \ +static inline int prefix##_write_trylock(param) \ +{ return au_rw_write_trylock(rwsem); } +/* why is not _nested version defined */ +/* static inline void prefix##_read_trylock_nested(param, lsc) +{ au_rw_read_trylock_nested(rwsem, lsc)); } +static inline void prefix##_write_trylock_nestd(param, lsc) +{ au_rw_write_trylock_nested(rwsem, lsc); } */ + +#define AuSimpleUnlockRwsemFuncs(prefix, param, rwsem) \ +static inline void prefix##_read_unlock(param) \ +{ au_rw_read_unlock(rwsem); } \ +static inline void prefix##_write_unlock(param) \ +{ au_rw_write_unlock(rwsem); } \ +static inline void prefix##_downgrade_lock(param) \ +{ au_rw_dgrade_lock(rwsem); } + +#define AuSimpleRwsemFuncs(prefix, param, rwsem) \ + AuSimpleLockRwsemFuncs(prefix, param, rwsem) \ + AuSimpleUnlockRwsemFuncs(prefix, param, rwsem) + +#endif /* __KERNEL__ */ +#endif /* __AUFS_RWSEM_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/i_op.c +++ linux-2.6.32/ubuntu/aufs/i_op.c @@ -0,0 +1,886 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode operations (except add/del/rename) + */ + +#include +#include +#include +#include +#include +#include +#include "aufs.h" + +static int h_permission(struct inode *h_inode, int mask, + struct vfsmount *h_mnt, int brperm) +{ + int err; + const unsigned char write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); + + err = -EACCES; + if ((write_mask && IS_IMMUTABLE(h_inode)) + || ((mask & MAY_EXEC) + && S_ISREG(h_inode->i_mode) + && ((h_mnt->mnt_flags & MNT_NOEXEC) + || !(h_inode->i_mode & S_IXUGO)))) + goto out; + + /* + * - skip the lower fs test in the case of write to ro branch. + * - nfs dir permission write check is optimized, but a policy for + * link/rename requires a real check. + */ + if ((write_mask && !au_br_writable(brperm)) + || (au_test_nfs(h_inode->i_sb) && S_ISDIR(h_inode->i_mode) + && write_mask && !(mask & MAY_READ)) + || !h_inode->i_op->permission) { + /* AuLabel(generic_permission); */ + err = generic_permission(h_inode, mask, NULL); + } else { + /* AuLabel(h_inode->permission); */ + err = h_inode->i_op->permission(h_inode, mask); + AuTraceErr(err); + } + + if (!err) + err = devcgroup_inode_permission(h_inode, mask); + if (!err) + err = security_inode_permission + (h_inode, mask & (MAY_READ | MAY_WRITE | MAY_EXEC + | MAY_APPEND)); + +#if 0 + if (!err) { + /* todo: do we need to call ima_path_check()? */ + struct path h_path = { + .dentry = + .mnt = h_mnt + }; + err = ima_path_check(&h_path, + mask & (MAY_READ | MAY_WRITE | MAY_EXEC), + IMA_COUNT_LEAVE); + } +#endif + + out: + return err; +} + +static int aufs_permission(struct inode *inode, int mask) +{ + int err; + aufs_bindex_t bindex, bend; + const unsigned char isdir = !!S_ISDIR(inode->i_mode); + const unsigned char write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); + struct inode *h_inode; + struct super_block *sb; + struct au_branch *br; + + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH); + ii_read_lock_child(inode); + + if (!isdir || write_mask) { + err = au_busy_or_stale(); + h_inode = au_h_iptr(inode, au_ibstart(inode)); + if (unlikely(!h_inode + || (h_inode->i_mode & S_IFMT) + != (inode->i_mode & S_IFMT))) + goto out; + + err = 0; + bindex = au_ibstart(inode); + br = au_sbr(sb, bindex); + err = h_permission(h_inode, mask, br->br_mnt, br->br_perm); + if (write_mask && !err) { + /* test whether the upper writable branch exists */ + err = -EROFS; + for (; bindex >= 0; bindex--) + if (!au_br_rdonly(au_sbr(sb, bindex))) { + err = 0; + break; + } + } + goto out; + } + + /* non-write to dir */ + err = 0; + bend = au_ibend(inode); + for (bindex = au_ibstart(inode); !err && bindex <= bend; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (h_inode) { + err = au_busy_or_stale(); + if (unlikely(!S_ISDIR(h_inode->i_mode))) + break; + + br = au_sbr(sb, bindex); + err = h_permission(h_inode, mask, br->br_mnt, + br->br_perm); + } + } + + out: + ii_read_unlock(inode); + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry *aufs_lookup(struct inode *dir, struct dentry *dentry, + struct nameidata *nd) +{ + struct dentry *ret, *parent; + struct inode *inode, *h_inode; + struct mutex *mtx; + struct super_block *sb; + int err, npositive; + aufs_bindex_t bstart; + + IMustLock(dir); + + sb = dir->i_sb; + si_read_lock(sb, AuLock_FLUSH); + ret = ERR_PTR(-ENAMETOOLONG); + if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + goto out; + err = au_alloc_dinfo(dentry); + ret = ERR_PTR(err); + if (unlikely(err)) + goto out; + + parent = dentry->d_parent; /* dir inode is locked */ + di_read_lock_parent(parent, AuLock_IR); + npositive = au_lkup_dentry(dentry, au_dbstart(parent), /*type*/0, nd); + di_read_unlock(parent, AuLock_IR); + err = npositive; + ret = ERR_PTR(err); + if (unlikely(err < 0)) + goto out_unlock; + + inode = NULL; + if (npositive) { + bstart = au_dbstart(dentry); + h_inode = au_h_dptr(dentry, bstart)->d_inode; + if (!S_ISDIR(h_inode->i_mode)) { + /* + * stop 'race'-ing between hardlinks under different + * parents. + */ + mtx = &au_sbr(sb, bstart)->br_xino.xi_nondir_mtx; + mutex_lock(mtx); + inode = au_new_inode(dentry, /*must_new*/0); + mutex_unlock(mtx); + } else + inode = au_new_inode(dentry, /*must_new*/0); + ret = (void *)inode; + } + if (IS_ERR(inode)) + goto out_unlock; + + ret = d_splice_alias(inode, dentry); + if (unlikely(IS_ERR(ret) && inode)) + ii_write_unlock(inode); + + out_unlock: + di_write_unlock(dentry); + out: + si_read_unlock(sb); + return ret; +} + +/* ---------------------------------------------------------------------- */ + +static int au_wr_dir_cpup(struct dentry *dentry, struct dentry *parent, + const unsigned char add_entry, aufs_bindex_t bcpup, + aufs_bindex_t bstart) +{ + int err; + struct dentry *h_parent; + struct inode *h_dir; + + if (add_entry) { + au_update_dbstart(dentry); + IMustLock(parent->d_inode); + } else + di_write_lock_parent(parent); + + err = 0; + if (!au_h_dptr(parent, bcpup)) { + if (bstart < bcpup) + err = au_cpdown_dirs(dentry, bcpup); + else + err = au_cpup_dirs(dentry, bcpup); + } + if (!err && add_entry) { + h_parent = au_h_dptr(parent, bcpup); + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + err = au_lkup_neg(dentry, bcpup); + /* todo: no unlock here */ + mutex_unlock(&h_dir->i_mutex); + if (bstart < bcpup && au_dbstart(dentry) < 0) { + au_set_dbstart(dentry, 0); + au_update_dbrange(dentry, /*do_put_zero*/0); + } + } + + if (!add_entry) + di_write_unlock(parent); + if (!err) + err = bcpup; /* success */ + + return err; +} + +/* + * decide the branch and the parent dir where we will create a new entry. + * returns new bindex or an error. + * copyup the parent dir if needed. + */ +int au_wr_dir(struct dentry *dentry, struct dentry *src_dentry, + struct au_wr_dir_args *args) +{ + int err; + aufs_bindex_t bcpup, bstart, src_bstart; + const unsigned char add_entry = !!au_ftest_wrdir(args->flags, + ADD_ENTRY); + struct super_block *sb; + struct dentry *parent; + struct au_sbinfo *sbinfo; + + sb = dentry->d_sb; + sbinfo = au_sbi(sb); + parent = dget_parent(dentry); + bstart = au_dbstart(dentry); + bcpup = bstart; + if (args->force_btgt < 0) { + if (src_dentry) { + src_bstart = au_dbstart(src_dentry); + if (src_bstart < bstart) + bcpup = src_bstart; + } else if (add_entry) { + err = AuWbrCreate(sbinfo, dentry, + au_ftest_wrdir(args->flags, ISDIR)); + bcpup = err; + } + + if (bcpup < 0 || au_test_ro(sb, bcpup, dentry->d_inode)) { + if (add_entry) + err = AuWbrCopyup(sbinfo, dentry); + else { + if (!IS_ROOT(dentry)) { + di_read_lock_parent(parent, !AuLock_IR); + err = AuWbrCopyup(sbinfo, dentry); + di_read_unlock(parent, !AuLock_IR); + } else + err = AuWbrCopyup(sbinfo, dentry); + } + bcpup = err; + if (unlikely(err < 0)) + goto out; + } + } else { + bcpup = args->force_btgt; + AuDebugOn(au_test_ro(sb, bcpup, dentry->d_inode)); + } + AuDbg("bstart %d, bcpup %d\n", bstart, bcpup); + if (bstart < bcpup) + au_update_dbrange(dentry, /*do_put_zero*/1); + + err = bcpup; + if (bcpup == bstart) + goto out; /* success */ + + /* copyup the new parent into the branch we process */ + err = au_wr_dir_cpup(dentry, parent, add_entry, bcpup, bstart); + + out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct dentry *au_pinned_h_parent(struct au_pin *pin) +{ + if (pin && pin->parent) + return au_h_dptr(pin->parent, pin->bindex); + return NULL; +} + +void au_unpin(struct au_pin *p) +{ + if (au_ftest_pin(p->flags, MNT_WRITE)) + mnt_drop_write(p->h_mnt); + if (!p->hdir) + return; + + au_hin_imtx_unlock(p->hdir); + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_unlock(p->parent, AuLock_IR); + iput(p->hdir->hi_inode); + dput(p->parent); + p->parent = NULL; + p->hdir = NULL; + p->h_mnt = NULL; +} + +int au_do_pin(struct au_pin *p) +{ + int err; + struct super_block *sb; + struct dentry *h_dentry, *h_parent; + struct au_branch *br; + struct inode *h_dir; + + err = 0; + sb = p->dentry->d_sb; + br = au_sbr(sb, p->bindex); + if (IS_ROOT(p->dentry)) { + if (au_ftest_pin(p->flags, MNT_WRITE)) { + p->h_mnt = br->br_mnt; + err = mnt_want_write(p->h_mnt); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_err; + } + } + goto out; + } + + h_dentry = NULL; + if (p->bindex <= au_dbend(p->dentry)) + h_dentry = au_h_dptr(p->dentry, p->bindex); + + p->parent = dget_parent(p->dentry); + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_lock(p->parent, AuLock_IR, p->lsc_di); + + h_dir = NULL; + h_parent = au_h_dptr(p->parent, p->bindex); + p->hdir = au_hi(p->parent->d_inode, p->bindex); + if (p->hdir) + h_dir = p->hdir->hi_inode; + + /* udba case */ + if (unlikely(!p->hdir || !h_dir)) { + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_unlock(p->parent, AuLock_IR); + dput(p->parent); + p->parent = NULL; + goto out_err; + } + + au_igrab(h_dir); + au_hin_imtx_lock_nested(p->hdir, p->lsc_hi); + + if (unlikely(p->hdir->hi_inode != h_parent->d_inode)) { + err = -EBUSY; + goto out_unpin; + } + if (h_dentry) { + err = au_h_verify(h_dentry, p->udba, h_dir, h_parent, br); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_unpin; + } + } + + if (au_ftest_pin(p->flags, MNT_WRITE)) { + p->h_mnt = br->br_mnt; + err = mnt_want_write(p->h_mnt); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_unpin; + } + } + goto out; /* success */ + + out_unpin: + au_unpin(p); + out_err: + pr_err("err %d\n", err); + err = au_busy_or_stale(); + out: + return err; +} + +void au_pin_init(struct au_pin *p, struct dentry *dentry, + aufs_bindex_t bindex, int lsc_di, int lsc_hi, + unsigned int udba, unsigned char flags) +{ + p->dentry = dentry; + p->udba = udba; + p->lsc_di = lsc_di; + p->lsc_hi = lsc_hi; + p->flags = flags; + p->bindex = bindex; + + p->parent = NULL; + p->hdir = NULL; + p->h_mnt = NULL; +} + +int au_pin(struct au_pin *pin, struct dentry *dentry, aufs_bindex_t bindex, + unsigned int udba, unsigned char flags) +{ + au_pin_init(pin, dentry, bindex, AuLsc_DI_PARENT, AuLsc_I_PARENT2, + udba, flags); + return au_do_pin(pin); +} + +/* ---------------------------------------------------------------------- */ + +#define AuIcpup_DID_CPUP 1 +#define au_ftest_icpup(flags, name) ((flags) & AuIcpup_##name) +#define au_fset_icpup(flags, name) { (flags) |= AuIcpup_##name; } +#define au_fclr_icpup(flags, name) { (flags) &= ~AuIcpup_##name; } + +struct au_icpup_args { + unsigned char flags; + unsigned char pin_flags; + aufs_bindex_t btgt; + struct au_pin pin; + struct path h_path; + struct inode *h_inode; +}; + +static int au_lock_and_icpup(struct dentry *dentry, struct iattr *ia, + struct au_icpup_args *a) +{ + int err; + unsigned int udba; + loff_t sz; + aufs_bindex_t bstart; + struct dentry *hi_wh, *parent; + struct inode *inode; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = 0 + }; + + di_write_lock_child(dentry); + bstart = au_dbstart(dentry); + inode = dentry->d_inode; + if (S_ISDIR(inode->i_mode)) + au_fset_wrdir(wr_dir_args.flags, ISDIR); + /* plink or hi_wh() case */ + if (bstart != au_ibstart(inode)) + wr_dir_args.force_btgt = au_ibstart(inode); + err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); + if (unlikely(err < 0)) + goto out_dentry; + a->btgt = err; + if (err != bstart) + au_fset_icpup(a->flags, DID_CPUP); + + err = 0; + a->pin_flags = AuPin_MNT_WRITE; + parent = NULL; + if (!IS_ROOT(dentry)) { + au_fset_pin(a->pin_flags, DI_LOCKED); + parent = dget_parent(dentry); + di_write_lock_parent(parent); + } + + udba = au_opt_udba(dentry->d_sb); + if (d_unhashed(dentry) || (ia->ia_valid & ATTR_FILE)) + udba = AuOpt_UDBA_NONE; + err = au_pin(&a->pin, dentry, a->btgt, udba, a->pin_flags); + if (unlikely(err)) { + if (parent) { + di_write_unlock(parent); + dput(parent); + } + goto out_dentry; + } + a->h_path.dentry = au_h_dptr(dentry, bstart); + a->h_inode = a->h_path.dentry->d_inode; + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + sz = -1; + if ((ia->ia_valid & ATTR_SIZE) && ia->ia_size < i_size_read(a->h_inode)) + sz = ia->ia_size; + + hi_wh = NULL; + if (au_ftest_icpup(a->flags, DID_CPUP) && d_unhashed(dentry)) { + hi_wh = au_hi_wh(inode, a->btgt); + if (!hi_wh) { + err = au_sio_cpup_wh(dentry, a->btgt, sz, /*file*/NULL); + if (unlikely(err)) + goto out_unlock; + hi_wh = au_hi_wh(inode, a->btgt); + /* todo: revalidate hi_wh? */ + } + } + + if (parent) { + au_pin_set_parent_lflag(&a->pin, /*lflag*/0); + di_downgrade_lock(parent, AuLock_IR); + dput(parent); + } + if (!au_ftest_icpup(a->flags, DID_CPUP)) + goto out; /* success */ + + if (!d_unhashed(dentry)) { + err = au_sio_cpup_simple(dentry, a->btgt, sz, AuCpup_DTIME); + if (!err) + a->h_path.dentry = au_h_dptr(dentry, a->btgt); + } else if (!hi_wh) + a->h_path.dentry = au_h_dptr(dentry, a->btgt); + else + a->h_path.dentry = hi_wh; /* do not dget here */ + + out_unlock: + mutex_unlock(&a->h_inode->i_mutex); + a->h_inode = a->h_path.dentry->d_inode; + if (!err) { + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + goto out; /* success */ + } + + au_unpin(&a->pin); + + out_dentry: + di_write_unlock(dentry); + out: + return err; +} + +static int aufs_setattr(struct dentry *dentry, struct iattr *ia) +{ + int err; + struct inode *inode; + struct super_block *sb; + struct file *file; + struct au_icpup_args *a; + + err = -ENOMEM; + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + inode = dentry->d_inode; + IMustLock(inode); + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + + file = NULL; + if (ia->ia_valid & ATTR_FILE) { + /* currently ftruncate(2) only */ + file = ia->ia_file; + fi_write_lock(file); + ia->ia_file = au_h_fptr(file, au_fbstart(file)); + } + + if (ia->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) + ia->ia_valid &= ~ATTR_MODE; + + err = au_lock_and_icpup(dentry, ia, a); + if (unlikely(err < 0)) + goto out_si; + if (au_ftest_icpup(a->flags, DID_CPUP)) { + ia->ia_file = NULL; + ia->ia_valid &= ~ATTR_FILE; + } + + a->h_path.mnt = au_sbr_mnt(sb, a->btgt); + if (ia->ia_valid & ATTR_SIZE) { + struct file *f; + + if (ia->ia_size < i_size_read(inode)) { + /* unmap only */ + err = vmtruncate(inode, ia->ia_size); + if (unlikely(err)) + goto out_unlock; + } + + f = NULL; + if (ia->ia_valid & ATTR_FILE) + f = ia->ia_file; + mutex_unlock(&a->h_inode->i_mutex); + err = vfsub_trunc(&a->h_path, ia->ia_size, ia->ia_valid, f); + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + } else + err = vfsub_notify_change(&a->h_path, ia); + if (!err) + au_cpup_attr_changeable(inode); + + out_unlock: + mutex_unlock(&a->h_inode->i_mutex); + au_unpin(&a->pin); + di_write_unlock(dentry); + out_si: + if (file) { + fi_write_unlock(file); + ia->ia_file = file; + ia->ia_valid |= ATTR_FILE; + } + si_read_unlock(sb); + kfree(a); + out: + return err; +} + +static int au_getattr_lock_reval(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct inode *inode; + struct dentry *parent; + + err = 0; + inode = dentry->d_inode; + di_write_lock_child(dentry); + if (au_digen(dentry) != sigen || au_iigen(inode) != sigen) { + parent = dget_parent(dentry); + di_read_lock_parent(parent, AuLock_IR); + /* returns a number of positive dentries */ + err = au_refresh_hdentry(dentry, inode->i_mode & S_IFMT); + if (err >= 0) + err = au_refresh_hinode(inode, dentry); + di_read_unlock(parent, AuLock_IR); + dput(parent); + } + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + di_read_unlock(dentry, AuLock_IR); + + AuTraceErr(err); + return err; +} + +static void au_refresh_iattr(struct inode *inode, struct kstat *st, + unsigned int nlink) +{ + inode->i_mode = st->mode; + inode->i_uid = st->uid; + inode->i_gid = st->gid; + inode->i_atime = st->atime; + inode->i_mtime = st->mtime; + inode->i_ctime = st->ctime; + + au_cpup_attr_nlink(inode, /*force*/0); + if (S_ISDIR(inode->i_mode)) { + inode->i_nlink -= nlink; + inode->i_nlink += st->nlink; + } + + spin_lock(&inode->i_lock); + inode->i_blocks = st->blocks; + i_size_write(inode, st->size); + spin_unlock(&inode->i_lock); +} + +static int aufs_getattr(struct vfsmount *mnt __maybe_unused, + struct dentry *dentry, struct kstat *st) +{ + int err; + unsigned int mnt_flags; + aufs_bindex_t bindex; + unsigned char udba_none, positive; + struct super_block *sb, *h_sb; + struct inode *inode; + struct vfsmount *h_mnt; + struct dentry *h_dentry; + + err = 0; + sb = dentry->d_sb; + inode = dentry->d_inode; + si_read_lock(sb, AuLock_FLUSH); + mnt_flags = au_mntflags(sb); + udba_none = !!au_opt_test(mnt_flags, UDBA_NONE); + + /* support fstat(2) */ + if (!d_unhashed(dentry) && !udba_none) { + unsigned int sigen = au_sigen(sb); + if (au_digen(dentry) == sigen && au_iigen(inode) == sigen) + di_read_lock_child(dentry, AuLock_IR); + else { + AuDebugOn(IS_ROOT(dentry)); + err = au_getattr_lock_reval(dentry, sigen); + if (unlikely(err)) + goto out; + } + } else + di_read_lock_child(dentry, AuLock_IR); + + bindex = au_ibstart(inode); + h_mnt = au_sbr_mnt(sb, bindex); + h_sb = h_mnt->mnt_sb; + if (!au_test_fs_bad_iattr(h_sb) && udba_none) + goto out_fill; /* success */ + + h_dentry = NULL; + if (au_dbstart(dentry) == bindex) + h_dentry = dget(au_h_dptr(dentry, bindex)); + else if (au_opt_test(mnt_flags, PLINK) && au_plink_test(inode)) { + h_dentry = au_plink_lkup(inode, bindex); + if (IS_ERR(h_dentry)) + goto out_fill; /* pretending success */ + } + /* illegally overlapped or something */ + if (unlikely(!h_dentry)) + goto out_fill; /* pretending success */ + + positive = !!h_dentry->d_inode; + if (positive) + err = vfs_getattr(h_mnt, h_dentry, st); + dput(h_dentry); + if (!err) { + if (positive) + au_refresh_iattr(inode, st, h_dentry->d_inode->i_nlink); + goto out_fill; /* success */ + } + goto out_unlock; + + out_fill: + generic_fillattr(inode, st); + out_unlock: + di_read_unlock(dentry, AuLock_IR); + out: + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int h_readlink(struct dentry *dentry, int bindex, char __user *buf, + int bufsiz) +{ + int err; + struct super_block *sb; + struct dentry *h_dentry; + + err = -EINVAL; + h_dentry = au_h_dptr(dentry, bindex); + if (unlikely(/* !h_dentry + || !h_dentry->d_inode + || !h_dentry->d_inode->i_op + || */ !h_dentry->d_inode->i_op->readlink)) + goto out; + + err = security_inode_readlink(h_dentry); + if (unlikely(err)) + goto out; + + sb = dentry->d_sb; + if (!au_test_ro(sb, bindex, dentry->d_inode)) { + vfsub_touch_atime(au_sbr_mnt(sb, bindex), h_dentry); + fsstack_copy_attr_atime(dentry->d_inode, h_dentry->d_inode); + } + err = h_dentry->d_inode->i_op->readlink(h_dentry, buf, bufsiz); + + out: + return err; +} + +static int aufs_readlink(struct dentry *dentry, char __user *buf, int bufsiz) +{ + int err; + + aufs_read_lock(dentry, AuLock_IR); + err = h_readlink(dentry, au_dbstart(dentry), buf, bufsiz); + aufs_read_unlock(dentry, AuLock_IR); + + return err; +} + +static void *aufs_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + int err; + char *buf; + mm_segment_t old_fs; + + err = -ENOMEM; + buf = __getname(); + if (unlikely(!buf)) + goto out; + + aufs_read_lock(dentry, AuLock_IR); + old_fs = get_fs(); + set_fs(KERNEL_DS); + err = h_readlink(dentry, au_dbstart(dentry), (char __user *)buf, + PATH_MAX); + set_fs(old_fs); + aufs_read_unlock(dentry, AuLock_IR); + + if (err >= 0) { + buf[err] = 0; + /* will be freed by put_link */ + nd_set_link(nd, buf); + return NULL; /* success */ + } + __putname(buf); + + out: + path_put(&nd->path); + AuTraceErr(err); + return ERR_PTR(err); +} + +static void aufs_put_link(struct dentry *dentry __maybe_unused, + struct nameidata *nd, void *cookie __maybe_unused) +{ + __putname(nd_get_link(nd)); +} + +/* ---------------------------------------------------------------------- */ + +static void aufs_truncate_range(struct inode *inode __maybe_unused, + loff_t start __maybe_unused, + loff_t end __maybe_unused) +{ + AuUnsupport(); +} + +/* ---------------------------------------------------------------------- */ + +struct inode_operations aufs_symlink_iop = { + .permission = aufs_permission, + .setattr = aufs_setattr, + .getattr = aufs_getattr, + .readlink = aufs_readlink, + .follow_link = aufs_follow_link, + .put_link = aufs_put_link +}; + +struct inode_operations aufs_dir_iop = { + .create = aufs_create, + .lookup = aufs_lookup, + .link = aufs_link, + .unlink = aufs_unlink, + .symlink = aufs_symlink, + .mkdir = aufs_mkdir, + .rmdir = aufs_rmdir, + .mknod = aufs_mknod, + .rename = aufs_rename, + + .permission = aufs_permission, + .setattr = aufs_setattr, + .getattr = aufs_getattr +}; + +struct inode_operations aufs_iop = { + .permission = aufs_permission, + .setattr = aufs_setattr, + .getattr = aufs_getattr, + .truncate_range = aufs_truncate_range +}; --- linux-2.6.32.orig/ubuntu/aufs/wbr_policy.c +++ linux-2.6.32/ubuntu/aufs/wbr_policy.c @@ -0,0 +1,641 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * policies for selecting one among multiple writable branches + */ + +#include +#include "aufs.h" + +/* subset of cpup_attr() */ +static noinline_for_stack +int au_cpdown_attr(struct path *h_path, struct dentry *h_src) +{ + int err, sbits; + struct iattr ia; + struct inode *h_isrc; + + h_isrc = h_src->d_inode; + ia.ia_valid = ATTR_FORCE | ATTR_MODE | ATTR_UID | ATTR_GID; + ia.ia_mode = h_isrc->i_mode; + ia.ia_uid = h_isrc->i_uid; + ia.ia_gid = h_isrc->i_gid; + sbits = !!(ia.ia_mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(h_path->dentry->d_inode, h_isrc); + err = vfsub_sio_notify_change(h_path, &ia); + + /* is this nfs only? */ + if (!err && sbits && au_test_nfs(h_path->dentry->d_sb)) { + ia.ia_valid = ATTR_FORCE | ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; + err = vfsub_sio_notify_change(h_path, &ia); + } + + return err; +} + +#define AuCpdown_PARENT_OPQ 1 +#define AuCpdown_WHED (1 << 1) +#define AuCpdown_MADE_DIR (1 << 2) +#define AuCpdown_DIROPQ (1 << 3) +#define au_ftest_cpdown(flags, name) ((flags) & AuCpdown_##name) +#define au_fset_cpdown(flags, name) { (flags) |= AuCpdown_##name; } +#define au_fclr_cpdown(flags, name) { (flags) &= ~AuCpdown_##name; } + +struct au_cpdown_dir_args { + struct dentry *parent; + unsigned int flags; +}; + +static int au_cpdown_dir_opq(struct dentry *dentry, aufs_bindex_t bdst, + struct au_cpdown_dir_args *a) +{ + int err; + struct dentry *opq_dentry; + + opq_dentry = au_diropq_create(dentry, bdst); + err = PTR_ERR(opq_dentry); + if (IS_ERR(opq_dentry)) + goto out; + dput(opq_dentry); + au_fset_cpdown(a->flags, DIROPQ); + + out: + return err; +} + +static int au_cpdown_dir_wh(struct dentry *dentry, struct dentry *h_parent, + struct inode *dir, aufs_bindex_t bdst) +{ + int err; + struct path h_path; + struct au_branch *br; + + br = au_sbr(dentry->d_sb, bdst); + h_path.dentry = au_wh_lkup(h_parent, &dentry->d_name, br); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) + goto out; + + err = 0; + if (h_path.dentry->d_inode) { + h_path.mnt = br->br_mnt; + err = au_wh_unlink_dentry(au_h_iptr(dir, bdst), &h_path, + dentry); + } + dput(h_path.dentry); + + out: + return err; +} + +static int au_cpdown_dir(struct dentry *dentry, aufs_bindex_t bdst, + struct dentry *h_parent, void *arg) +{ + int err, rerr; + aufs_bindex_t bend, bopq, bstart; + unsigned char parent_opq; + struct path h_path; + struct dentry *parent; + struct inode *h_dir, *h_inode, *inode, *dir; + struct au_cpdown_dir_args *args = arg; + + bstart = au_dbstart(dentry); + /* dentry is di-locked */ + parent = dget_parent(dentry); + dir = parent->d_inode; + h_dir = h_parent->d_inode; + AuDebugOn(h_dir != au_h_iptr(dir, bdst)); + IMustLock(h_dir); + + err = au_lkup_neg(dentry, bdst); + if (unlikely(err < 0)) + goto out; + h_path.dentry = au_h_dptr(dentry, bdst); + h_path.mnt = au_sbr_mnt(dentry->d_sb, bdst); + err = vfsub_sio_mkdir(au_h_iptr(dir, bdst), &h_path, + S_IRWXU | S_IRUGO | S_IXUGO); + if (unlikely(err)) + goto out_put; + au_fset_cpdown(args->flags, MADE_DIR); + + bend = au_dbend(dentry); + bopq = au_dbdiropq(dentry); + au_fclr_cpdown(args->flags, WHED); + au_fclr_cpdown(args->flags, DIROPQ); + if (au_dbwh(dentry) == bdst) + au_fset_cpdown(args->flags, WHED); + if (!au_ftest_cpdown(args->flags, PARENT_OPQ) && bopq <= bdst) + au_fset_cpdown(args->flags, PARENT_OPQ); + parent_opq = (au_ftest_cpdown(args->flags, PARENT_OPQ) + && args->parent == dentry); + h_inode = h_path.dentry->d_inode; + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + if (au_ftest_cpdown(args->flags, WHED)) { + err = au_cpdown_dir_opq(dentry, bdst, args); + if (unlikely(err)) { + mutex_unlock(&h_inode->i_mutex); + goto out_dir; + } + } + + err = au_cpdown_attr(&h_path, au_h_dptr(dentry, bstart)); + mutex_unlock(&h_inode->i_mutex); + if (unlikely(err)) + goto out_opq; + + if (au_ftest_cpdown(args->flags, WHED)) { + err = au_cpdown_dir_wh(dentry, h_parent, dir, bdst); + if (unlikely(err)) + goto out_opq; + } + + inode = dentry->d_inode; + if (au_ibend(inode) < bdst) + au_set_ibend(inode, bdst); + au_set_h_iptr(inode, bdst, au_igrab(h_inode), + au_hi_flags(inode, /*isdir*/1)); + goto out; /* success */ + + /* revert */ + out_opq: + if (au_ftest_cpdown(args->flags, DIROPQ)) { + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + rerr = au_diropq_remove(dentry, bdst); + mutex_unlock(&h_inode->i_mutex); + if (unlikely(rerr)) { + AuIOErr("failed removing diropq for %.*s b%d (%d)\n", + AuDLNPair(dentry), bdst, rerr); + err = -EIO; + goto out; + } + } + out_dir: + if (au_ftest_cpdown(args->flags, MADE_DIR)) { + rerr = vfsub_sio_rmdir(au_h_iptr(dir, bdst), &h_path); + if (unlikely(rerr)) { + AuIOErr("failed removing %.*s b%d (%d)\n", + AuDLNPair(dentry), bdst, rerr); + err = -EIO; + } + } + out_put: + au_set_h_dptr(dentry, bdst, NULL); + if (au_dbend(dentry) == bdst) + au_update_dbend(dentry); + out: + dput(parent); + return err; +} + +int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + int err; + struct au_cpdown_dir_args args = { + .parent = dget_parent(dentry), + .flags = 0 + }; + + err = au_cp_dirs(dentry, bdst, au_cpdown_dir, &args); + dput(args.parent); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* policies for create */ + +static int au_wbr_bu(struct super_block *sb, aufs_bindex_t bindex) +{ + for (; bindex >= 0; bindex--) + if (!au_br_rdonly(au_sbr(sb, bindex))) + return bindex; + return -EROFS; +} + +/* top down parent */ +static int au_wbr_create_tdp(struct dentry *dentry, int isdir __maybe_unused) +{ + int err; + aufs_bindex_t bstart, bindex; + struct super_block *sb; + struct dentry *parent, *h_parent; + + sb = dentry->d_sb; + bstart = au_dbstart(dentry); + err = bstart; + if (!au_br_rdonly(au_sbr(sb, bstart))) + goto out; + + err = -EROFS; + parent = dget_parent(dentry); + for (bindex = au_dbstart(parent); bindex < bstart; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !h_parent->d_inode) + continue; + + if (!au_br_rdonly(au_sbr(sb, bindex))) { + err = bindex; + break; + } + } + dput(parent); + + /* bottom up here */ + if (unlikely(err < 0)) + err = au_wbr_bu(sb, bstart - 1); + + out: + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* an exception for the policy other than tdp */ +static int au_wbr_create_exp(struct dentry *dentry) +{ + int err; + aufs_bindex_t bwh, bdiropq; + struct dentry *parent; + + err = -1; + bwh = au_dbwh(dentry); + parent = dget_parent(dentry); + bdiropq = au_dbdiropq(parent); + if (bwh >= 0) { + if (bdiropq >= 0) + err = min(bdiropq, bwh); + else + err = bwh; + AuDbg("%d\n", err); + } else if (bdiropq >= 0) { + err = bdiropq; + AuDbg("%d\n", err); + } + dput(parent); + + if (err >= 0 && au_br_rdonly(au_sbr(dentry->d_sb, err))) + err = -1; + + AuDbg("%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* round robin */ +static int au_wbr_create_init_rr(struct super_block *sb) +{ + int err; + + err = au_wbr_bu(sb, au_sbend(sb)); + atomic_set(&au_sbi(sb)->si_wbr_rr_next, -err); /* less important */ + /* smp_mb(); */ + + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_create_rr(struct dentry *dentry, int isdir) +{ + int err, nbr; + unsigned int u; + aufs_bindex_t bindex, bend; + struct super_block *sb; + atomic_t *next; + + err = au_wbr_create_exp(dentry); + if (err >= 0) + goto out; + + sb = dentry->d_sb; + next = &au_sbi(sb)->si_wbr_rr_next; + bend = au_sbend(sb); + nbr = bend + 1; + for (bindex = 0; bindex <= bend; bindex++) { + if (!isdir) { + err = atomic_dec_return(next) + 1; + /* modulo for 0 is meaningless */ + if (unlikely(!err)) + err = atomic_dec_return(next) + 1; + } else + err = atomic_read(next); + AuDbg("%d\n", err); + u = err; + err = u % nbr; + AuDbg("%d\n", err); + if (!au_br_rdonly(au_sbr(sb, err))) + break; + err = -EROFS; + } + + out: + AuDbg("%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* most free space */ +static void au_mfs(struct dentry *dentry) +{ + struct super_block *sb; + struct au_branch *br; + struct au_wbr_mfs *mfs; + aufs_bindex_t bindex, bend; + int err; + unsigned long long b, bavail; + /* reduce the stack usage */ + struct kstatfs *st; + + st = kmalloc(sizeof(*st), GFP_NOFS); + if (unlikely(!st)) { + AuWarn1("failed updating mfs(%d), ignored\n", -ENOMEM); + return; + } + + bavail = 0; + sb = dentry->d_sb; + mfs = &au_sbi(sb)->si_wbr_mfs; + MtxMustLock(&mfs->mfs_lock); + mfs->mfs_bindex = -EROFS; + mfs->mfsrr_bytes = 0; + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_rdonly(br)) + continue; + + /* sb->s_root for NFS is unreliable */ + err = vfs_statfs(br->br_mnt->mnt_root, st); + if (unlikely(err)) { + AuWarn1("failed statfs, b%d, %d\n", bindex, err); + continue; + } + + /* when the available size is equal, select the lower one */ + BUILD_BUG_ON(sizeof(b) < sizeof(st->f_bavail) + || sizeof(b) < sizeof(st->f_bsize)); + b = st->f_bavail * st->f_bsize; + br->br_wbr->wbr_bytes = b; + if (b >= bavail) { + bavail = b; + mfs->mfs_bindex = bindex; + mfs->mfs_jiffy = jiffies; + } + } + + mfs->mfsrr_bytes = bavail; + AuDbg("b%d\n", mfs->mfs_bindex); + kfree(st); +} + +static int au_wbr_create_mfs(struct dentry *dentry, int isdir __maybe_unused) +{ + int err; + struct super_block *sb; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_exp(dentry); + if (err >= 0) + goto out; + + sb = dentry->d_sb; + mfs = &au_sbi(sb)->si_wbr_mfs; + mutex_lock(&mfs->mfs_lock); + if (time_after(jiffies, mfs->mfs_jiffy + mfs->mfs_expire) + || mfs->mfs_bindex < 0 + || au_br_rdonly(au_sbr(sb, mfs->mfs_bindex))) + au_mfs(dentry); + mutex_unlock(&mfs->mfs_lock); + err = mfs->mfs_bindex; + + out: + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_create_init_mfs(struct super_block *sb) +{ + struct au_wbr_mfs *mfs; + + mfs = &au_sbi(sb)->si_wbr_mfs; + mutex_init(&mfs->mfs_lock); + mfs->mfs_jiffy = 0; + mfs->mfs_bindex = -EROFS; + + return 0; +} + +static int au_wbr_create_fin_mfs(struct super_block *sb __maybe_unused) +{ + mutex_destroy(&au_sbi(sb)->si_wbr_mfs.mfs_lock); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +/* most free space and then round robin */ +static int au_wbr_create_mfsrr(struct dentry *dentry, int isdir) +{ + int err; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_mfs(dentry, isdir); + if (err >= 0) { + mfs = &au_sbi(dentry->d_sb)->si_wbr_mfs; + mutex_lock(&mfs->mfs_lock); + if (mfs->mfsrr_bytes < mfs->mfsrr_watermark) + err = au_wbr_create_rr(dentry, isdir); + mutex_unlock(&mfs->mfs_lock); + } + + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_create_init_mfsrr(struct super_block *sb) +{ + int err; + + au_wbr_create_init_mfs(sb); /* ignore */ + err = au_wbr_create_init_rr(sb); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* top down parent and most free space */ +static int au_wbr_create_pmfs(struct dentry *dentry, int isdir) +{ + int err, e2; + unsigned long long b; + aufs_bindex_t bindex, bstart, bend; + struct super_block *sb; + struct dentry *parent, *h_parent; + struct au_branch *br; + + err = au_wbr_create_tdp(dentry, isdir); + if (unlikely(err < 0)) + goto out; + parent = dget_parent(dentry); + bstart = au_dbstart(parent); + bend = au_dbtaildir(parent); + if (bstart == bend) + goto out_parent; /* success */ + + e2 = au_wbr_create_mfs(dentry, isdir); + if (e2 < 0) + goto out_parent; /* success */ + + /* when the available size is equal, select upper one */ + sb = dentry->d_sb; + br = au_sbr(sb, err); + b = br->br_wbr->wbr_bytes; + AuDbg("b%d, %llu\n", err, b); + + for (bindex = bstart; bindex <= bend; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !h_parent->d_inode) + continue; + + br = au_sbr(sb, bindex); + if (!au_br_rdonly(br) && br->br_wbr->wbr_bytes > b) { + b = br->br_wbr->wbr_bytes; + err = bindex; + AuDbg("b%d, %llu\n", err, b); + } + } + + out_parent: + dput(parent); + out: + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* policies for copyup */ + +/* top down parent */ +static int au_wbr_copyup_tdp(struct dentry *dentry) +{ + return au_wbr_create_tdp(dentry, /*isdir, anything is ok*/0); +} + +/* bottom up parent */ +static int au_wbr_copyup_bup(struct dentry *dentry) +{ + int err; + aufs_bindex_t bindex, bstart; + struct dentry *parent, *h_parent; + struct super_block *sb; + + err = -EROFS; + sb = dentry->d_sb; + parent = dget_parent(dentry); + bstart = au_dbstart(parent); + for (bindex = au_dbstart(dentry); bindex >= bstart; bindex--) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !h_parent->d_inode) + continue; + + if (!au_br_rdonly(au_sbr(sb, bindex))) { + err = bindex; + break; + } + } + dput(parent); + + /* bottom up here */ + if (unlikely(err < 0)) + err = au_wbr_bu(sb, bstart - 1); + + AuDbg("b%d\n", err); + return err; +} + +/* bottom up */ +static int au_wbr_copyup_bu(struct dentry *dentry) +{ + int err; + + err = au_wbr_bu(dentry->d_sb, au_dbstart(dentry)); + + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct au_wbr_copyup_operations au_wbr_copyup_ops[] = { + [AuWbrCopyup_TDP] = { + .copyup = au_wbr_copyup_tdp + }, + [AuWbrCopyup_BUP] = { + .copyup = au_wbr_copyup_bup + }, + [AuWbrCopyup_BU] = { + .copyup = au_wbr_copyup_bu + } +}; + +struct au_wbr_create_operations au_wbr_create_ops[] = { + [AuWbrCreate_TDP] = { + .create = au_wbr_create_tdp + }, + [AuWbrCreate_RR] = { + .create = au_wbr_create_rr, + .init = au_wbr_create_init_rr + }, + [AuWbrCreate_MFS] = { + .create = au_wbr_create_mfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_MFSV] = { + .create = au_wbr_create_mfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_MFSRR] = { + .create = au_wbr_create_mfsrr, + .init = au_wbr_create_init_mfsrr, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_MFSRRV] = { + .create = au_wbr_create_mfsrr, + .init = au_wbr_create_init_mfsrr, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_PMFS] = { + .create = au_wbr_create_pmfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_PMFSV] = { + .create = au_wbr_create_pmfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + } +}; --- linux-2.6.32.orig/ubuntu/aufs/i_op_add.c +++ linux-2.6.32/ubuntu/aufs/i_op_add.c @@ -0,0 +1,658 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode operations (add entry) + */ + +#include "aufs.h" + +/* + * final procedure of adding a new entry, except link(2). + * remove whiteout, instantiate, copyup the parent dir's times and size + * and update version. + * if it failed, re-create the removed whiteout. + */ +static int epilog(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct dentry *dentry) +{ + int err, rerr; + aufs_bindex_t bwh; + struct path h_path; + struct inode *inode, *h_dir; + struct dentry *wh; + + bwh = -1; + if (wh_dentry) { + h_dir = wh_dentry->d_parent->d_inode; /* dir inode is locked */ + IMustLock(h_dir); + AuDebugOn(au_h_iptr(dir, bindex) != h_dir); + bwh = au_dbwh(dentry); + h_path.dentry = wh_dentry; + h_path.mnt = au_sbr_mnt(dir->i_sb, bindex); + err = au_wh_unlink_dentry(au_h_iptr(dir, bindex), &h_path, + dentry); + if (unlikely(err)) + goto out; + } + + inode = au_new_inode(dentry, /*must_new*/1); + if (!IS_ERR(inode)) { + d_instantiate(dentry, inode); + dir = dentry->d_parent->d_inode; /* dir inode is locked */ + IMustLock(dir); + if (au_ibstart(dir) == au_dbstart(dentry)) + au_cpup_attr_timesizes(dir); + dir->i_version++; + return 0; /* success */ + } + + err = PTR_ERR(inode); + if (!wh_dentry) + goto out; + + /* revert */ + /* dir inode is locked */ + wh = au_wh_create(dentry, bwh, wh_dentry->d_parent); + rerr = PTR_ERR(wh); + if (IS_ERR(wh)) { + AuIOErr("%.*s reverting whiteout failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + } else + dput(wh); + + out: + return err; +} + +/* + * simple tests for the adding inode operations. + * following the checks in vfs, plus the parent-child relationship. + */ +int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir) +{ + int err; + umode_t h_mode; + struct dentry *h_dentry; + struct inode *h_inode; + + err = -ENAMETOOLONG; + if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + goto out; + + h_dentry = au_h_dptr(dentry, bindex); + h_inode = h_dentry->d_inode; + if (!dentry->d_inode) { + err = -EEXIST; + if (unlikely(h_inode)) + goto out; + } else { + /* rename(2) case */ + err = -EIO; + if (unlikely(!h_inode || !h_inode->i_nlink)) + goto out; + + h_mode = h_inode->i_mode; + if (!isdir) { + err = -EISDIR; + if (unlikely(S_ISDIR(h_mode))) + goto out; + } else if (unlikely(!S_ISDIR(h_mode))) { + err = -ENOTDIR; + goto out; + } + } + + err = -EIO; + /* expected parent dir is locked */ + if (unlikely(h_parent != h_dentry->d_parent)) + goto out; + err = 0; + + out: + AuTraceErr(err); + return err; +} + +/* + * initial procedure of adding a new entry. + * prepare writable branch and the parent dir, lock it, + * and lookup whiteout for the new entry. + */ +static struct dentry* +lock_hdir_lkup_wh(struct dentry *dentry, struct au_dtime *dt, + struct dentry *src_dentry, struct au_pin *pin, + struct au_wr_dir_args *wr_dir_args) +{ + struct dentry *wh_dentry, *h_parent; + struct super_block *sb; + struct au_branch *br; + int err; + unsigned int udba; + aufs_bindex_t bcpup; + + AuDbg("%.*s\n", AuDLNPair(dentry)); + + err = au_wr_dir(dentry, src_dentry, wr_dir_args); + bcpup = err; + wh_dentry = ERR_PTR(err); + if (unlikely(err < 0)) + goto out; + + sb = dentry->d_sb; + udba = au_opt_udba(sb); + err = au_pin(pin, dentry, bcpup, udba, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out; + + h_parent = au_pinned_h_parent(pin); + if (udba != AuOpt_UDBA_NONE + && au_dbstart(dentry) == bcpup) + err = au_may_add(dentry, bcpup, h_parent, + au_ftest_wrdir(wr_dir_args->flags, ISDIR)); + else if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + err = -ENAMETOOLONG; + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_unpin; + + br = au_sbr(sb, bcpup); + if (dt) { + struct path tmp = { + .dentry = h_parent, + .mnt = br->br_mnt + }; + au_dtime_store(dt, au_pinned_parent(pin), &tmp); + } + + wh_dentry = NULL; + if (bcpup != au_dbwh(dentry)) + goto out; /* success */ + + wh_dentry = au_wh_lkup(h_parent, &dentry->d_name, br); + + out_unpin: + if (IS_ERR(wh_dentry)) + au_unpin(pin); + out: + return wh_dentry; +} + +/* ---------------------------------------------------------------------- */ + +enum { Mknod, Symlink, Creat }; +struct simple_arg { + int type; + union { + struct { + int mode; + struct nameidata *nd; + } c; + struct { + const char *symname; + } s; + struct { + int mode; + dev_t dev; + } m; + } u; +}; + +static int add_simple(struct inode *dir, struct dentry *dentry, + struct simple_arg *arg) +{ + int err; + aufs_bindex_t bstart; + unsigned char created; + struct au_dtime dt; + struct au_pin pin; + struct path h_path; + struct dentry *wh_dentry, *parent; + struct inode *h_dir; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = AuWrDir_ADD_ENTRY + }; + + AuDbg("%.*s\n", AuDLNPair(dentry)); + IMustLock(dir); + + parent = dentry->d_parent; /* dir inode is locked */ + aufs_read_lock(dentry, AuLock_DW); + di_write_lock_parent(parent); + wh_dentry = lock_hdir_lkup_wh(dentry, &dt, /*src_dentry*/NULL, &pin, + &wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out; + + bstart = au_dbstart(dentry); + h_path.dentry = au_h_dptr(dentry, bstart); + h_path.mnt = au_sbr_mnt(dentry->d_sb, bstart); + h_dir = au_pinned_h_dir(&pin); + switch (arg->type) { + case Creat: + err = vfsub_create(h_dir, &h_path, arg->u.c.mode); + break; + case Symlink: + err = vfsub_symlink(h_dir, &h_path, arg->u.s.symname); + break; + case Mknod: + err = vfsub_mknod(h_dir, &h_path, arg->u.m.mode, arg->u.m.dev); + break; + default: + BUG(); + } + created = !err; + if (!err) + err = epilog(dir, bstart, wh_dentry, dentry); + + /* revert */ + if (unlikely(created && err && h_path.dentry->d_inode)) { + int rerr; + rerr = vfsub_unlink(h_dir, &h_path, /*force*/0); + if (rerr) { + AuIOErr("%.*s revert failure(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + } + au_dtime_revert(&dt); + d_drop(dentry); + } + + au_unpin(&pin); + dput(wh_dentry); + + out: + if (unlikely(err)) { + au_update_dbstart(dentry); + d_drop(dentry); + } + di_write_unlock(parent); + aufs_read_unlock(dentry, AuLock_DW); + return err; +} + +int aufs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) +{ + struct simple_arg arg = { + .type = Mknod, + .u.m = { + .mode = mode, + .dev = dev + } + }; + return add_simple(dir, dentry, &arg); +} + +int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) +{ + struct simple_arg arg = { + .type = Symlink, + .u.s.symname = symname + }; + return add_simple(dir, dentry, &arg); +} + +int aufs_create(struct inode *dir, struct dentry *dentry, int mode, + struct nameidata *nd) +{ + struct simple_arg arg = { + .type = Creat, + .u.c = { + .mode = mode, + .nd = nd + } + }; + return add_simple(dir, dentry, &arg); +} + +/* ---------------------------------------------------------------------- */ + +struct au_link_args { + aufs_bindex_t bdst, bsrc; + struct au_pin pin; + struct path h_path; + struct dentry *src_parent, *parent; +}; + +static int au_cpup_before_link(struct dentry *src_dentry, + struct au_link_args *a) +{ + int err; + struct dentry *h_src_dentry; + struct mutex *h_mtx; + + di_read_lock_parent(a->src_parent, AuLock_IR); + err = au_test_and_cpup_dirs(src_dentry, a->bdst); + if (unlikely(err)) + goto out; + + h_src_dentry = au_h_dptr(src_dentry, a->bsrc); + h_mtx = &h_src_dentry->d_inode->i_mutex; + err = au_pin(&a->pin, src_dentry, a->bdst, + au_opt_udba(src_dentry->d_sb), + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + err = au_sio_cpup_simple(src_dentry, a->bdst, -1, + AuCpup_DTIME /* | AuCpup_KEEPLINO */); + mutex_unlock(h_mtx); + au_unpin(&a->pin); + + out: + di_read_unlock(a->src_parent, AuLock_IR); + return err; +} + +static int au_cpup_or_link(struct dentry *src_dentry, struct au_link_args *a) +{ + int err; + unsigned char plink; + struct inode *h_inode, *inode; + struct dentry *h_src_dentry; + struct super_block *sb; + + plink = 0; + h_inode = NULL; + sb = src_dentry->d_sb; + inode = src_dentry->d_inode; + if (au_ibstart(inode) <= a->bdst) + h_inode = au_h_iptr(inode, a->bdst); + if (!h_inode || !h_inode->i_nlink) { + /* copyup src_dentry as the name of dentry. */ + au_set_dbstart(src_dentry, a->bdst); + au_set_h_dptr(src_dentry, a->bdst, dget(a->h_path.dentry)); + h_inode = au_h_dptr(src_dentry, a->bsrc)->d_inode; + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + err = au_sio_cpup_single(src_dentry, a->bdst, a->bsrc, -1, + AuCpup_KEEPLINO, a->parent); + mutex_unlock(&h_inode->i_mutex); + au_set_h_dptr(src_dentry, a->bdst, NULL); + au_set_dbstart(src_dentry, a->bsrc); + } else { + /* the inode of src_dentry already exists on a.bdst branch */ + h_src_dentry = d_find_alias(h_inode); + if (!h_src_dentry && au_plink_test(inode)) { + plink = 1; + h_src_dentry = au_plink_lkup(inode, a->bdst); + err = PTR_ERR(h_src_dentry); + if (IS_ERR(h_src_dentry)) + goto out; + + if (unlikely(!h_src_dentry->d_inode)) { + dput(h_src_dentry); + h_src_dentry = NULL; + } + + } + if (h_src_dentry) { + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), + &a->h_path); + dput(h_src_dentry); + } else { + AuIOErr("no dentry found for hi%lu on b%d\n", + h_inode->i_ino, a->bdst); + err = -EIO; + } + } + + if (!err && !plink) + au_plink_append(inode, a->bdst, a->h_path.dentry); + +out: + return err; +} + +int aufs_link(struct dentry *src_dentry, struct inode *dir, + struct dentry *dentry) +{ + int err, rerr; + struct au_dtime dt; + struct au_link_args *a; + struct dentry *wh_dentry, *h_src_dentry; + struct inode *inode; + struct super_block *sb; + struct au_wr_dir_args wr_dir_args = { + /* .force_btgt = -1, */ + .flags = AuWrDir_ADD_ENTRY + }; + + IMustLock(dir); + inode = src_dentry->d_inode; + IMustLock(inode); + + err = -ENOENT; + if (unlikely(!inode->i_nlink)) + goto out; + + err = -ENOMEM; + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + a->parent = dentry->d_parent; /* dir inode is locked */ + aufs_read_and_write_lock2(dentry, src_dentry, /*AuLock_FLUSH*/0); + a->src_parent = dget_parent(src_dentry); + wr_dir_args.force_btgt = au_dbstart(src_dentry); + + di_write_lock_parent(a->parent); + wr_dir_args.force_btgt = au_wbr(dentry, wr_dir_args.force_btgt); + wh_dentry = lock_hdir_lkup_wh(dentry, &dt, src_dentry, &a->pin, + &wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_unlock; + + err = 0; + sb = dentry->d_sb; + a->bdst = au_dbstart(dentry); + a->h_path.dentry = au_h_dptr(dentry, a->bdst); + a->h_path.mnt = au_sbr_mnt(sb, a->bdst); + a->bsrc = au_dbstart(src_dentry); + if (au_opt_test(au_mntflags(sb), PLINK)) { + if (a->bdst < a->bsrc + /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) + err = au_cpup_or_link(src_dentry, a); + else { + h_src_dentry = au_h_dptr(src_dentry, a->bdst); + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), + &a->h_path); + } + } else { + /* + * copyup src_dentry to the branch we process, + * and then link(2) to it. + */ + if (a->bdst < a->bsrc + /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) { + au_unpin(&a->pin); + di_write_unlock(a->parent); + err = au_cpup_before_link(src_dentry, a); + di_write_lock_parent(a->parent); + if (!err) + err = au_pin(&a->pin, dentry, a->bdst, + au_opt_udba(sb), + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_wh; + } + if (!err) { + h_src_dentry = au_h_dptr(src_dentry, a->bdst); + err = -ENOENT; + if (h_src_dentry && h_src_dentry->d_inode) + err = vfsub_link(h_src_dentry, + au_pinned_h_dir(&a->pin), + &a->h_path); + } + } + if (unlikely(err)) + goto out_unpin; + + if (wh_dentry) { + a->h_path.dentry = wh_dentry; + err = au_wh_unlink_dentry(au_pinned_h_dir(&a->pin), &a->h_path, + dentry); + if (unlikely(err)) + goto out_revert; + } + + dir->i_version++; + if (au_ibstart(dir) == au_dbstart(dentry)) + au_cpup_attr_timesizes(dir); + inc_nlink(inode); + inode->i_ctime = dir->i_ctime; + if (!d_unhashed(a->h_path.dentry)) + d_instantiate(dentry, au_igrab(inode)); + else + /* some filesystem calls d_drop() */ + d_drop(dentry); + goto out_unpin; /* success */ + + out_revert: + rerr = vfsub_unlink(au_pinned_h_dir(&a->pin), &a->h_path, /*force*/0); + if (!rerr) + goto out_dt; + AuIOErr("%.*s reverting failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + out_dt: + d_drop(dentry); + au_dtime_revert(&dt); + out_unpin: + au_unpin(&a->pin); + out_wh: + dput(wh_dentry); + out_unlock: + if (unlikely(err)) { + au_update_dbstart(dentry); + d_drop(dentry); + } + di_write_unlock(a->parent); + dput(a->src_parent); + aufs_read_and_write_unlock2(dentry, src_dentry); + kfree(a); + out: + return err; +} + +int aufs_mkdir(struct inode *dir, struct dentry *dentry, int mode) +{ + int err, rerr; + aufs_bindex_t bindex; + unsigned char diropq; + struct path h_path; + struct dentry *wh_dentry, *parent, *opq_dentry; + struct mutex *h_mtx; + struct super_block *sb; + struct { + struct au_pin pin; + struct au_dtime dt; + } *a; /* reduce the stack usage */ + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = AuWrDir_ADD_ENTRY | AuWrDir_ISDIR + }; + + IMustLock(dir); + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + aufs_read_lock(dentry, AuLock_DW); + parent = dentry->d_parent; /* dir inode is locked */ + di_write_lock_parent(parent); + wh_dentry = lock_hdir_lkup_wh(dentry, &a->dt, /*src_dentry*/NULL, + &a->pin, &wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_free; + + sb = dentry->d_sb; + bindex = au_dbstart(dentry); + h_path.dentry = au_h_dptr(dentry, bindex); + h_path.mnt = au_sbr_mnt(sb, bindex); + err = vfsub_mkdir(au_pinned_h_dir(&a->pin), &h_path, mode); + if (unlikely(err)) + goto out_unlock; + + /* make the dir opaque */ + diropq = 0; + h_mtx = &h_path.dentry->d_inode->i_mutex; + if (wh_dentry + || au_opt_test(au_mntflags(sb), ALWAYS_DIROPQ)) { + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + opq_dentry = au_diropq_create(dentry, bindex); + mutex_unlock(h_mtx); + err = PTR_ERR(opq_dentry); + if (IS_ERR(opq_dentry)) + goto out_dir; + dput(opq_dentry); + diropq = 1; + } + + err = epilog(dir, bindex, wh_dentry, dentry); + if (!err) { + inc_nlink(dir); + goto out_unlock; /* success */ + } + + /* revert */ + if (diropq) { + AuLabel(revert opq); + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + rerr = au_diropq_remove(dentry, bindex); + mutex_unlock(h_mtx); + if (rerr) { + AuIOErr("%.*s reverting diropq failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + } + } + + out_dir: + AuLabel(revert dir); + rerr = vfsub_rmdir(au_pinned_h_dir(&a->pin), &h_path); + if (rerr) { + AuIOErr("%.*s reverting dir failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + } + d_drop(dentry); + au_dtime_revert(&a->dt); + out_unlock: + au_unpin(&a->pin); + dput(wh_dentry); + out_free: + if (unlikely(err)) { + au_update_dbstart(dentry); + d_drop(dentry); + } + di_write_unlock(parent); + aufs_read_unlock(dentry, AuLock_DW); + kfree(a); + out: + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/sysaufs.c +++ linux-2.6.32/ubuntu/aufs/sysaufs.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sysfs interface and lifetime management + * they are necessary regardless sysfs is disabled. + */ + +#include +#include +#include +#include "aufs.h" + +unsigned long sysaufs_si_mask; +struct kset *sysaufs_ket; + +#define AuSiAttr(_name) { \ + .attr = { .name = __stringify(_name), .mode = 0444 }, \ + .show = sysaufs_si_##_name, \ +} + +static struct sysaufs_si_attr sysaufs_si_attr_xi_path = AuSiAttr(xi_path); +struct attribute *sysaufs_si_attrs[] = { + &sysaufs_si_attr_xi_path.attr, + NULL, +}; + +static struct sysfs_ops au_sbi_ops = { + .show = sysaufs_si_show +}; + +static struct kobj_type au_sbi_ktype = { + .release = au_si_free, + .sysfs_ops = &au_sbi_ops, + .default_attrs = sysaufs_si_attrs +}; + +/* ---------------------------------------------------------------------- */ + +int sysaufs_si_init(struct au_sbinfo *sbinfo) +{ + int err; + + sbinfo->si_kobj.kset = sysaufs_ket; + /* cf. sysaufs_name() */ + err = kobject_init_and_add + (&sbinfo->si_kobj, &au_sbi_ktype, /*&sysaufs_ket->kobj*/NULL, + SysaufsSiNamePrefix "%lx", sysaufs_si_id(sbinfo)); + + dbgaufs_si_null(sbinfo); + if (!err) { + err = dbgaufs_si_init(sbinfo); + if (unlikely(err)) + kobject_put(&sbinfo->si_kobj); + } + return err; +} + +void sysaufs_fin(void) +{ + dbgaufs_fin(); + sysfs_remove_group(&sysaufs_ket->kobj, sysaufs_attr_group); + kset_unregister(sysaufs_ket); +} + +int __init sysaufs_init(void) +{ + int err; + + do { + get_random_bytes(&sysaufs_si_mask, sizeof(sysaufs_si_mask)); + } while (!sysaufs_si_mask); + + sysaufs_ket = kset_create_and_add(AUFS_NAME, NULL, fs_kobj); + err = PTR_ERR(sysaufs_ket); + if (IS_ERR(sysaufs_ket)) + goto out; + err = sysfs_create_group(&sysaufs_ket->kobj, sysaufs_attr_group); + if (unlikely(err)) { + kset_unregister(sysaufs_ket); + goto out; + } + + err = dbgaufs_init(); + if (unlikely(err)) + sysaufs_fin(); + out: + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/finfo.c +++ linux-2.6.32/ubuntu/aufs/finfo.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * file private data + */ + +#include +#include "aufs.h" + +void au_hfput(struct au_hfile *hf, struct file *file) +{ + if (file->f_flags & vfsub_fmode_to_uint(FMODE_EXEC)) + allow_write_access(hf->hf_file); + fput(hf->hf_file); + hf->hf_file = NULL; + atomic_dec_return(&hf->hf_br->br_count); + hf->hf_br = NULL; +} + +void au_set_h_fptr(struct file *file, aufs_bindex_t bindex, struct file *val) +{ + struct au_finfo *finfo = au_fi(file); + struct au_hfile *hf; + + hf = finfo->fi_hfile + bindex; + if (hf->hf_file) + au_hfput(hf, file); + if (val) { + hf->hf_file = val; + hf->hf_br = au_sbr(file->f_dentry->d_sb, bindex); + } +} + +void au_update_figen(struct file *file) +{ + atomic_set(&au_fi(file)->fi_generation, au_digen(file->f_dentry)); + /* smp_mb(); */ /* atomic_set */ +} + +/* ---------------------------------------------------------------------- */ + +void au_finfo_fin(struct file *file) +{ + struct au_finfo *finfo; + aufs_bindex_t bindex, bend; + + fi_write_lock(file); + bend = au_fbend(file); + bindex = au_fbstart(file); + if (bindex >= 0) + /* + * calls fput() instead of filp_close(), + * since no dnotify or lock for the lower file. + */ + for (; bindex <= bend; bindex++) + au_set_h_fptr(file, bindex, NULL); + + finfo = au_fi(file); + au_dbg_verify_hf(finfo); + kfree(finfo->fi_hfile); + fi_write_unlock(file); + AuRwDestroy(&finfo->fi_rwsem); + au_cache_free_finfo(finfo); +} + +int au_finfo_init(struct file *file) +{ + struct au_finfo *finfo; + struct dentry *dentry; + + dentry = file->f_dentry; + finfo = au_cache_alloc_finfo(); + if (unlikely(!finfo)) + goto out; + + finfo->fi_hfile = kcalloc(au_sbend(dentry->d_sb) + 1, + sizeof(*finfo->fi_hfile), GFP_NOFS); + if (unlikely(!finfo->fi_hfile)) + goto out_finfo; + + au_rw_init_wlock(&finfo->fi_rwsem); + finfo->fi_bstart = -1; + finfo->fi_bend = -1; + atomic_set(&finfo->fi_generation, au_digen(dentry)); + /* smp_mb(); */ /* atomic_set */ + + file->private_data = finfo; + return 0; /* success */ + + out_finfo: + au_cache_free_finfo(finfo); + out: + return -ENOMEM; +} + +int au_fi_realloc(struct au_finfo *finfo, int nbr) +{ + int err, sz; + struct au_hfile *hfp; + + err = -ENOMEM; + sz = sizeof(*hfp) * (finfo->fi_bend + 1); + if (!sz) + sz = sizeof(*hfp); + hfp = au_kzrealloc(finfo->fi_hfile, sz, sizeof(*hfp) * nbr, GFP_NOFS); + if (hfp) { + finfo->fi_hfile = hfp; + err = 0; + } + + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/loop.c +++ linux-2.6.32/ubuntu/aufs/loop.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * support for loopback block device as a branch + */ + +#include +#include "aufs.h" + +/* + * test if two lower dentries have overlapping branches. + */ +int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_d1, + struct dentry *h_d2) +{ + struct inode *h_inode; + struct loop_device *l; + + h_inode = h_d1->d_inode; + if (MAJOR(h_inode->i_sb->s_dev) != LOOP_MAJOR) + return 0; + + l = h_inode->i_sb->s_bdev->bd_disk->private_data; + h_d1 = l->lo_backing_file->f_dentry; + /* h_d1 can be local NFS. in this case aufs cannot detect the loop */ + if (unlikely(h_d1->d_sb == sb)) + return 1; + return !!au_test_subdir(h_d1, h_d2); +} + +/* true if a kernel thread named 'loop[0-9].*' accesses a file */ +int au_test_loopback_kthread(void) +{ + const char c = current->comm[4]; + + return current->mm == NULL + && '0' <= c && c <= '9' + && strncmp(current->comm, "loop", 4) == 0; +} --- linux-2.6.32.orig/ubuntu/aufs/opts.c +++ linux-2.6.32/ubuntu/aufs/opts.c @@ -0,0 +1,1549 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * mount options/flags + */ + +#include +#include +#include /* a distribution requires */ +#include +#include "aufs.h" + +/* ---------------------------------------------------------------------- */ + +enum { + Opt_br, + Opt_add, Opt_del, Opt_mod, Opt_reorder, Opt_append, Opt_prepend, + Opt_idel, Opt_imod, Opt_ireorder, + Opt_dirwh, Opt_rdcache, Opt_rdblk, Opt_rdhash, Opt_rendir, + Opt_rdblk_def, Opt_rdhash_def, + Opt_xino, Opt_zxino, Opt_noxino, + Opt_trunc_xino, Opt_trunc_xino_v, Opt_notrunc_xino, + Opt_trunc_xino_path, Opt_itrunc_xino, + Opt_trunc_xib, Opt_notrunc_xib, + Opt_shwh, Opt_noshwh, + Opt_plink, Opt_noplink, Opt_list_plink, + Opt_udba, + /* Opt_lock, Opt_unlock, */ + Opt_cmd, Opt_cmd_args, + Opt_diropq_a, Opt_diropq_w, + Opt_warn_perm, Opt_nowarn_perm, + Opt_wbr_copyup, Opt_wbr_create, + Opt_refrof, Opt_norefrof, + Opt_verbose, Opt_noverbose, + Opt_sum, Opt_nosum, Opt_wsum, + Opt_tail, Opt_ignore, Opt_ignore_silent, Opt_err +}; + +static match_table_t options = { + {Opt_br, "br=%s"}, + {Opt_br, "br:%s"}, + + {Opt_add, "add=%d:%s"}, + {Opt_add, "add:%d:%s"}, + {Opt_add, "ins=%d:%s"}, + {Opt_add, "ins:%d:%s"}, + {Opt_append, "append=%s"}, + {Opt_append, "append:%s"}, + {Opt_prepend, "prepend=%s"}, + {Opt_prepend, "prepend:%s"}, + + {Opt_del, "del=%s"}, + {Opt_del, "del:%s"}, + /* {Opt_idel, "idel:%d"}, */ + {Opt_mod, "mod=%s"}, + {Opt_mod, "mod:%s"}, + /* {Opt_imod, "imod:%d:%s"}, */ + + {Opt_dirwh, "dirwh=%d"}, + + {Opt_xino, "xino=%s"}, + {Opt_noxino, "noxino"}, + {Opt_trunc_xino, "trunc_xino"}, + {Opt_trunc_xino_v, "trunc_xino_v=%d:%d"}, + {Opt_notrunc_xino, "notrunc_xino"}, + {Opt_trunc_xino_path, "trunc_xino=%s"}, + {Opt_itrunc_xino, "itrunc_xino=%d"}, + /* {Opt_zxino, "zxino=%s"}, */ + {Opt_trunc_xib, "trunc_xib"}, + {Opt_notrunc_xib, "notrunc_xib"}, + + {Opt_plink, "plink"}, + {Opt_noplink, "noplink"}, +#ifdef CONFIG_AUFS_DEBUG + {Opt_list_plink, "list_plink"}, +#endif + + {Opt_udba, "udba=%s"}, + + {Opt_diropq_a, "diropq=always"}, + {Opt_diropq_a, "diropq=a"}, + {Opt_diropq_w, "diropq=whiteouted"}, + {Opt_diropq_w, "diropq=w"}, + + {Opt_warn_perm, "warn_perm"}, + {Opt_nowarn_perm, "nowarn_perm"}, + + /* keep them temporary */ + {Opt_ignore_silent, "coo=%s"}, + {Opt_ignore_silent, "nodlgt"}, + {Opt_ignore_silent, "nodirperm1"}, + {Opt_ignore_silent, "clean_plink"}, + +#ifdef CONFIG_AUFS_SHWH + {Opt_shwh, "shwh"}, +#endif + {Opt_noshwh, "noshwh"}, + + {Opt_rendir, "rendir=%d"}, + + {Opt_refrof, "refrof"}, + {Opt_norefrof, "norefrof"}, + + {Opt_verbose, "verbose"}, + {Opt_verbose, "v"}, + {Opt_noverbose, "noverbose"}, + {Opt_noverbose, "quiet"}, + {Opt_noverbose, "q"}, + {Opt_noverbose, "silent"}, + + {Opt_sum, "sum"}, + {Opt_nosum, "nosum"}, + {Opt_wsum, "wsum"}, + + {Opt_rdcache, "rdcache=%d"}, + {Opt_rdblk, "rdblk=%d"}, + {Opt_rdblk_def, "rdblk=def"}, + {Opt_rdhash, "rdhash=%d"}, + {Opt_rdhash_def, "rdhash=def"}, + + {Opt_wbr_create, "create=%s"}, + {Opt_wbr_create, "create_policy=%s"}, + {Opt_wbr_copyup, "cpup=%s"}, + {Opt_wbr_copyup, "copyup=%s"}, + {Opt_wbr_copyup, "copyup_policy=%s"}, + + /* internal use for the scripts */ + {Opt_ignore_silent, "si=%s"}, + + {Opt_br, "dirs=%s"}, + {Opt_ignore, "debug=%d"}, + {Opt_ignore, "delete=whiteout"}, + {Opt_ignore, "delete=all"}, + {Opt_ignore, "imap=%s"}, + + /* temporary workaround, due to old mount(8)? */ + {Opt_ignore_silent, "relatime"}, + + {Opt_err, NULL} +}; + +/* ---------------------------------------------------------------------- */ + +static const char *au_parser_pattern(int val, struct match_token *token) +{ + while (token->pattern) { + if (token->token == val) + return token->pattern; + token++; + } + BUG(); + return "??"; +} + +/* ---------------------------------------------------------------------- */ + +static match_table_t brperms = { + {AuBrPerm_RO, AUFS_BRPERM_RO}, + {AuBrPerm_RR, AUFS_BRPERM_RR}, + {AuBrPerm_RW, AUFS_BRPERM_RW}, + + {AuBrPerm_ROWH, AUFS_BRPERM_ROWH}, + {AuBrPerm_RRWH, AUFS_BRPERM_RRWH}, + {AuBrPerm_RWNoLinkWH, AUFS_BRPERM_RWNLWH}, + + {AuBrPerm_ROWH, "nfsro"}, + {AuBrPerm_RO, NULL} +}; + +static int noinline_for_stack br_perm_val(char *perm) +{ + int val; + substring_t args[MAX_OPT_ARGS]; + + val = match_token(perm, brperms, args); + return val; +} + +const char *au_optstr_br_perm(int brperm) +{ + return au_parser_pattern(brperm, (void *)brperms); +} + +/* ---------------------------------------------------------------------- */ + +static match_table_t udbalevel = { + {AuOpt_UDBA_REVAL, "reval"}, + {AuOpt_UDBA_NONE, "none"}, +#ifdef CONFIG_AUFS_HINOTIFY + {AuOpt_UDBA_HINOTIFY, "inotify"}, +#endif + {-1, NULL} +}; + +static int noinline_for_stack udba_val(char *str) +{ + substring_t args[MAX_OPT_ARGS]; + + return match_token(str, udbalevel, args); +} + +const char *au_optstr_udba(int udba) +{ + return au_parser_pattern(udba, (void *)udbalevel); +} + +/* ---------------------------------------------------------------------- */ + +static match_table_t au_wbr_create_policy = { + {AuWbrCreate_TDP, "tdp"}, + {AuWbrCreate_TDP, "top-down-parent"}, + {AuWbrCreate_RR, "rr"}, + {AuWbrCreate_RR, "round-robin"}, + {AuWbrCreate_MFS, "mfs"}, + {AuWbrCreate_MFS, "most-free-space"}, + {AuWbrCreate_MFSV, "mfs:%d"}, + {AuWbrCreate_MFSV, "most-free-space:%d"}, + + {AuWbrCreate_MFSRR, "mfsrr:%d"}, + {AuWbrCreate_MFSRRV, "mfsrr:%d:%d"}, + {AuWbrCreate_PMFS, "pmfs"}, + {AuWbrCreate_PMFSV, "pmfs:%d"}, + + {-1, NULL} +}; + +/* + * cf. linux/lib/parser.c and cmdline.c + * gave up calling memparse() since it uses simple_strtoull() instead of + * strict_...(). + */ +static int noinline_for_stack +au_match_ull(substring_t *s, unsigned long long *result) +{ + int err; + unsigned int len; + char a[32]; + + err = -ERANGE; + len = s->to - s->from; + if (len + 1 <= sizeof(a)) { + memcpy(a, s->from, len); + a[len] = '\0'; + err = strict_strtoull(a, 0, result); + } + return err; +} + +static int au_wbr_mfs_wmark(substring_t *arg, char *str, + struct au_opt_wbr_create *create) +{ + int err; + unsigned long long ull; + + err = 0; + if (!au_match_ull(arg, &ull)) + create->mfsrr_watermark = ull; + else { + pr_err("bad integer in %s\n", str); + err = -EINVAL; + } + + return err; +} + +static int au_wbr_mfs_sec(substring_t *arg, char *str, + struct au_opt_wbr_create *create) +{ + int n, err; + + err = 0; + if (!match_int(arg, &n) && 0 <= n) + create->mfs_second = n; + else { + pr_err("bad integer in %s\n", str); + err = -EINVAL; + } + + return err; +} + +static int noinline_for_stack +au_wbr_create_val(char *str, struct au_opt_wbr_create *create) +{ + int err, e; + substring_t args[MAX_OPT_ARGS]; + + err = match_token(str, au_wbr_create_policy, args); + create->wbr_create = err; + switch (err) { + case AuWbrCreate_MFSRRV: + e = au_wbr_mfs_wmark(&args[0], str, create); + if (!e) + e = au_wbr_mfs_sec(&args[1], str, create); + if (unlikely(e)) + err = e; + break; + case AuWbrCreate_MFSRR: + e = au_wbr_mfs_wmark(&args[0], str, create); + if (unlikely(e)) { + err = e; + break; + } + /*FALLTHROUGH*/ + case AuWbrCreate_MFS: + case AuWbrCreate_PMFS: + create->mfs_second = AUFS_MFS_SECOND_DEF; + break; + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFSV: + e = au_wbr_mfs_sec(&args[0], str, create); + if (unlikely(e)) + err = e; + break; + } + + return err; +} + +const char *au_optstr_wbr_create(int wbr_create) +{ + return au_parser_pattern(wbr_create, (void *)au_wbr_create_policy); +} + +static match_table_t au_wbr_copyup_policy = { + {AuWbrCopyup_TDP, "tdp"}, + {AuWbrCopyup_TDP, "top-down-parent"}, + {AuWbrCopyup_BUP, "bup"}, + {AuWbrCopyup_BUP, "bottom-up-parent"}, + {AuWbrCopyup_BU, "bu"}, + {AuWbrCopyup_BU, "bottom-up"}, + {-1, NULL} +}; + +static int noinline_for_stack au_wbr_copyup_val(char *str) +{ + substring_t args[MAX_OPT_ARGS]; + + return match_token(str, au_wbr_copyup_policy, args); +} + +const char *au_optstr_wbr_copyup(int wbr_copyup) +{ + return au_parser_pattern(wbr_copyup, (void *)au_wbr_copyup_policy); +} + +/* ---------------------------------------------------------------------- */ + +static const int lkup_dirflags = LOOKUP_FOLLOW | LOOKUP_DIRECTORY; + +static void dump_opts(struct au_opts *opts) +{ +#ifdef CONFIG_AUFS_DEBUG + /* reduce stack space */ + union { + struct au_opt_add *add; + struct au_opt_del *del; + struct au_opt_mod *mod; + struct au_opt_xino *xino; + struct au_opt_xino_itrunc *xino_itrunc; + struct au_opt_wbr_create *create; + } u; + struct au_opt *opt; + + opt = opts->opt; + while (opt->type != Opt_tail) { + switch (opt->type) { + case Opt_add: + u.add = &opt->add; + AuDbg("add {b%d, %s, 0x%x, %p}\n", + u.add->bindex, u.add->pathname, u.add->perm, + u.add->path.dentry); + break; + case Opt_del: + case Opt_idel: + u.del = &opt->del; + AuDbg("del {%s, %p}\n", + u.del->pathname, u.del->h_path.dentry); + break; + case Opt_mod: + case Opt_imod: + u.mod = &opt->mod; + AuDbg("mod {%s, 0x%x, %p}\n", + u.mod->path, u.mod->perm, u.mod->h_root); + break; + case Opt_append: + u.add = &opt->add; + AuDbg("append {b%d, %s, 0x%x, %p}\n", + u.add->bindex, u.add->pathname, u.add->perm, + u.add->path.dentry); + break; + case Opt_prepend: + u.add = &opt->add; + AuDbg("prepend {b%d, %s, 0x%x, %p}\n", + u.add->bindex, u.add->pathname, u.add->perm, + u.add->path.dentry); + break; + case Opt_dirwh: + AuDbg("dirwh %d\n", opt->dirwh); + break; + case Opt_rdcache: + AuDbg("rdcache %d\n", opt->rdcache); + break; + case Opt_rdblk: + AuDbg("rdblk %u\n", opt->rdblk); + break; + case Opt_rdblk_def: + AuDbg("rdblk_def\n"); + break; + case Opt_rdhash: + AuDbg("rdhash %u\n", opt->rdhash); + break; + case Opt_rdhash_def: + AuDbg("rdhash_def\n"); + break; + case Opt_xino: + u.xino = &opt->xino; + AuDbg("xino {%s %.*s}\n", + u.xino->path, + AuDLNPair(u.xino->file->f_dentry)); + break; + case Opt_trunc_xino: + AuLabel(trunc_xino); + break; + case Opt_notrunc_xino: + AuLabel(notrunc_xino); + break; + case Opt_trunc_xino_path: + case Opt_itrunc_xino: + u.xino_itrunc = &opt->xino_itrunc; + AuDbg("trunc_xino %d\n", u.xino_itrunc->bindex); + break; + + case Opt_noxino: + AuLabel(noxino); + break; + case Opt_trunc_xib: + AuLabel(trunc_xib); + break; + case Opt_notrunc_xib: + AuLabel(notrunc_xib); + break; + case Opt_shwh: + AuLabel(shwh); + break; + case Opt_noshwh: + AuLabel(noshwh); + break; + case Opt_plink: + AuLabel(plink); + break; + case Opt_noplink: + AuLabel(noplink); + break; + case Opt_list_plink: + AuLabel(list_plink); + break; + case Opt_udba: + AuDbg("udba %d, %s\n", + opt->udba, au_optstr_udba(opt->udba)); + break; + case Opt_diropq_a: + AuLabel(diropq_a); + break; + case Opt_diropq_w: + AuLabel(diropq_w); + break; + case Opt_warn_perm: + AuLabel(warn_perm); + break; + case Opt_nowarn_perm: + AuLabel(nowarn_perm); + break; + case Opt_refrof: + AuLabel(refrof); + break; + case Opt_norefrof: + AuLabel(norefrof); + break; + case Opt_verbose: + AuLabel(verbose); + break; + case Opt_noverbose: + AuLabel(noverbose); + break; + case Opt_sum: + AuLabel(sum); + break; + case Opt_nosum: + AuLabel(nosum); + break; + case Opt_wsum: + AuLabel(wsum); + break; + case Opt_wbr_create: + u.create = &opt->wbr_create; + AuDbg("create %d, %s\n", u.create->wbr_create, + au_optstr_wbr_create(u.create->wbr_create)); + switch (u.create->wbr_create) { + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFSV: + AuDbg("%d sec\n", u.create->mfs_second); + break; + case AuWbrCreate_MFSRR: + AuDbg("%llu watermark\n", + u.create->mfsrr_watermark); + break; + case AuWbrCreate_MFSRRV: + AuDbg("%llu watermark, %d sec\n", + u.create->mfsrr_watermark, + u.create->mfs_second); + break; + } + break; + case Opt_wbr_copyup: + AuDbg("copyup %d, %s\n", opt->wbr_copyup, + au_optstr_wbr_copyup(opt->wbr_copyup)); + break; + default: + BUG(); + } + opt++; + } +#endif +} + +void au_opts_free(struct au_opts *opts) +{ + struct au_opt *opt; + + opt = opts->opt; + while (opt->type != Opt_tail) { + switch (opt->type) { + case Opt_add: + case Opt_append: + case Opt_prepend: + path_put(&opt->add.path); + break; + case Opt_del: + case Opt_idel: + path_put(&opt->del.h_path); + break; + case Opt_mod: + case Opt_imod: + dput(opt->mod.h_root); + break; + case Opt_xino: + fput(opt->xino.file); + break; + } + opt++; + } +} + +static int opt_add(struct au_opt *opt, char *opt_str, unsigned long sb_flags, + aufs_bindex_t bindex) +{ + int err; + struct au_opt_add *add = &opt->add; + char *p; + + add->bindex = bindex; + add->perm = AuBrPerm_Last; + add->pathname = opt_str; + p = strchr(opt_str, '='); + if (p) { + *p++ = 0; + if (*p) + add->perm = br_perm_val(p); + } + + err = vfsub_kern_path(add->pathname, lkup_dirflags, &add->path); + if (!err) { + if (!p) { + add->perm = AuBrPerm_RO; + if (au_test_fs_rr(add->path.dentry->d_sb)) + add->perm = AuBrPerm_RR; + else if (!bindex && !(sb_flags & MS_RDONLY)) + add->perm = AuBrPerm_RW; + } + opt->type = Opt_add; + goto out; + } + pr_err("lookup failed %s (%d)\n", add->pathname, err); + err = -EINVAL; + + out: + return err; +} + +static int au_opts_parse_del(struct au_opt_del *del, substring_t args[]) +{ + int err; + + del->pathname = args[0].from; + AuDbg("del path %s\n", del->pathname); + + err = vfsub_kern_path(del->pathname, lkup_dirflags, &del->h_path); + if (unlikely(err)) + pr_err("lookup failed %s (%d)\n", del->pathname, err); + + return err; +} + +#if 0 /* reserved for future use */ +static int au_opts_parse_idel(struct super_block *sb, aufs_bindex_t bindex, + struct au_opt_del *del, substring_t args[]) +{ + int err; + struct dentry *root; + + err = -EINVAL; + root = sb->s_root; + aufs_read_lock(root, AuLock_FLUSH); + if (bindex < 0 || au_sbend(sb) < bindex) { + pr_err("out of bounds, %d\n", bindex); + goto out; + } + + err = 0; + del->h_path.dentry = dget(au_h_dptr(root, bindex)); + del->h_path.mnt = mntget(au_sbr_mnt(sb, bindex)); + + out: + aufs_read_unlock(root, !AuLock_IR); + return err; +} +#endif + +static int noinline_for_stack +au_opts_parse_mod(struct au_opt_mod *mod, substring_t args[]) +{ + int err; + struct path path; + char *p; + + err = -EINVAL; + mod->path = args[0].from; + p = strchr(mod->path, '='); + if (unlikely(!p)) { + pr_err("no permssion %s\n", args[0].from); + goto out; + } + + *p++ = 0; + err = vfsub_kern_path(mod->path, lkup_dirflags, &path); + if (unlikely(err)) { + pr_err("lookup failed %s (%d)\n", mod->path, err); + goto out; + } + + mod->perm = br_perm_val(p); + AuDbg("mod path %s, perm 0x%x, %s\n", mod->path, mod->perm, p); + mod->h_root = dget(path.dentry); + path_put(&path); + + out: + return err; +} + +#if 0 /* reserved for future use */ +static int au_opts_parse_imod(struct super_block *sb, aufs_bindex_t bindex, + struct au_opt_mod *mod, substring_t args[]) +{ + int err; + struct dentry *root; + + err = -EINVAL; + root = sb->s_root; + aufs_read_lock(root, AuLock_FLUSH); + if (bindex < 0 || au_sbend(sb) < bindex) { + pr_err("out of bounds, %d\n", bindex); + goto out; + } + + err = 0; + mod->perm = br_perm_val(args[1].from); + AuDbg("mod path %s, perm 0x%x, %s\n", + mod->path, mod->perm, args[1].from); + mod->h_root = dget(au_h_dptr(root, bindex)); + + out: + aufs_read_unlock(root, !AuLock_IR); + return err; +} +#endif + +static int au_opts_parse_xino(struct super_block *sb, struct au_opt_xino *xino, + substring_t args[]) +{ + int err; + struct file *file; + + file = au_xino_create(sb, args[0].from, /*silent*/0); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + + err = -EINVAL; + if (unlikely(file->f_dentry->d_sb == sb)) { + fput(file); + pr_err("%s must be outside\n", args[0].from); + goto out; + } + + err = 0; + xino->file = file; + xino->path = args[0].from; + + out: + return err; +} + +static int noinline_for_stack +au_opts_parse_xino_itrunc_path(struct super_block *sb, + struct au_opt_xino_itrunc *xino_itrunc, + substring_t args[]) +{ + int err; + aufs_bindex_t bend, bindex; + struct path path; + struct dentry *root; + + err = vfsub_kern_path(args[0].from, lkup_dirflags, &path); + if (unlikely(err)) { + pr_err("lookup failed %s (%d)\n", args[0].from, err); + goto out; + } + + xino_itrunc->bindex = -1; + root = sb->s_root; + aufs_read_lock(root, AuLock_FLUSH); + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; bindex++) { + if (au_h_dptr(root, bindex) == path.dentry) { + xino_itrunc->bindex = bindex; + break; + } + } + aufs_read_unlock(root, !AuLock_IR); + path_put(&path); + + if (unlikely(xino_itrunc->bindex < 0)) { + pr_err("no such branch %s\n", args[0].from); + err = -EINVAL; + } + + out: + return err; +} + +/* called without aufs lock */ +int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts) +{ + int err, n, token; + aufs_bindex_t bindex; + unsigned char skipped; + struct dentry *root; + struct au_opt *opt, *opt_tail; + char *opt_str; + /* reduce the stack space */ + union { + struct au_opt_xino_itrunc *xino_itrunc; + struct au_opt_wbr_create *create; + } u; + struct { + substring_t args[MAX_OPT_ARGS]; + } *a; + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + root = sb->s_root; + err = 0; + bindex = 0; + opt = opts->opt; + opt_tail = opt + opts->max_opt - 1; + opt->type = Opt_tail; + while (!err && (opt_str = strsep(&str, ",")) && *opt_str) { + err = -EINVAL; + skipped = 0; + token = match_token(opt_str, options, a->args); + switch (token) { + case Opt_br: + err = 0; + while (!err && (opt_str = strsep(&a->args[0].from, ":")) + && *opt_str) { + err = opt_add(opt, opt_str, opts->sb_flags, + bindex++); + if (unlikely(!err && ++opt > opt_tail)) { + err = -E2BIG; + break; + } + opt->type = Opt_tail; + skipped = 1; + } + break; + case Opt_add: + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + bindex = n; + err = opt_add(opt, a->args[1].from, opts->sb_flags, + bindex); + if (!err) + opt->type = token; + break; + case Opt_append: + err = opt_add(opt, a->args[0].from, opts->sb_flags, + /*dummy bindex*/1); + if (!err) + opt->type = token; + break; + case Opt_prepend: + err = opt_add(opt, a->args[0].from, opts->sb_flags, + /*bindex*/0); + if (!err) + opt->type = token; + break; + case Opt_del: + err = au_opts_parse_del(&opt->del, a->args); + if (!err) + opt->type = token; + break; +#if 0 /* reserved for future use */ + case Opt_idel: + del->pathname = "(indexed)"; + if (unlikely(match_int(&args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + err = au_opts_parse_idel(sb, n, &opt->del, a->args); + if (!err) + opt->type = token; + break; +#endif + case Opt_mod: + err = au_opts_parse_mod(&opt->mod, a->args); + if (!err) + opt->type = token; + break; +#ifdef IMOD /* reserved for future use */ + case Opt_imod: + u.mod->path = "(indexed)"; + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + err = au_opts_parse_imod(sb, n, &opt->mod, a->args); + if (!err) + opt->type = token; + break; +#endif + case Opt_xino: + err = au_opts_parse_xino(sb, &opt->xino, a->args); + if (!err) + opt->type = token; + break; + + case Opt_trunc_xino_path: + err = au_opts_parse_xino_itrunc_path + (sb, &opt->xino_itrunc, a->args); + if (!err) + opt->type = token; + break; + + case Opt_itrunc_xino: + u.xino_itrunc = &opt->xino_itrunc; + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + u.xino_itrunc->bindex = n; + aufs_read_lock(root, AuLock_FLUSH); + if (n < 0 || au_sbend(sb) < n) { + pr_err("out of bounds, %d\n", n); + aufs_read_unlock(root, !AuLock_IR); + break; + } + aufs_read_unlock(root, !AuLock_IR); + err = 0; + opt->type = token; + break; + + case Opt_dirwh: + if (unlikely(match_int(&a->args[0], &opt->dirwh))) + break; + err = 0; + opt->type = token; + break; + + case Opt_rdcache: + if (unlikely(match_int(&a->args[0], &opt->rdcache))) + break; + err = 0; + opt->type = token; + break; + case Opt_rdblk: + if (unlikely(match_int(&a->args[0], &n) + || n < 0 + || n > KMALLOC_MAX_SIZE)) { + pr_err("bad integer in %s\n", opt_str); + break; + } + if (unlikely(n && n < NAME_MAX)) { + pr_err("rdblk must be larger than %d\n", + NAME_MAX); + break; + } + opt->rdblk = n; + err = 0; + opt->type = token; + break; + case Opt_rdhash: + if (unlikely(match_int(&a->args[0], &n) + || n < 0 + || n * sizeof(struct hlist_head) + > KMALLOC_MAX_SIZE)) { + pr_err("bad integer in %s\n", opt_str); + break; + } + opt->rdhash = n; + err = 0; + opt->type = token; + break; + + case Opt_trunc_xino: + case Opt_notrunc_xino: + case Opt_noxino: + case Opt_trunc_xib: + case Opt_notrunc_xib: + case Opt_shwh: + case Opt_noshwh: + case Opt_plink: + case Opt_noplink: + case Opt_list_plink: + case Opt_diropq_a: + case Opt_diropq_w: + case Opt_warn_perm: + case Opt_nowarn_perm: + case Opt_refrof: + case Opt_norefrof: + case Opt_verbose: + case Opt_noverbose: + case Opt_sum: + case Opt_nosum: + case Opt_wsum: + case Opt_rdblk_def: + case Opt_rdhash_def: + err = 0; + opt->type = token; + break; + + case Opt_udba: + opt->udba = udba_val(a->args[0].from); + if (opt->udba >= 0) { + err = 0; + opt->type = token; + } else + pr_err("wrong value, %s\n", opt_str); + break; + + case Opt_wbr_create: + u.create = &opt->wbr_create; + u.create->wbr_create + = au_wbr_create_val(a->args[0].from, u.create); + if (u.create->wbr_create >= 0) { + err = 0; + opt->type = token; + } else + pr_err("wrong value, %s\n", opt_str); + break; + case Opt_wbr_copyup: + opt->wbr_copyup = au_wbr_copyup_val(a->args[0].from); + if (opt->wbr_copyup >= 0) { + err = 0; + opt->type = token; + } else + pr_err("wrong value, %s\n", opt_str); + break; + + case Opt_ignore: + pr_warning("ignored %s\n", opt_str); + /*FALLTHROUGH*/ + case Opt_ignore_silent: + skipped = 1; + err = 0; + break; + case Opt_err: + pr_err("unknown option %s\n", opt_str); + break; + } + + if (!err && !skipped) { + if (unlikely(++opt > opt_tail)) { + err = -E2BIG; + opt--; + opt->type = Opt_tail; + break; + } + opt->type = Opt_tail; + } + } + + kfree(a); + dump_opts(opts); + if (unlikely(err)) + au_opts_free(opts); + + out: + return err; +} + +static int au_opt_wbr_create(struct super_block *sb, + struct au_opt_wbr_create *create) +{ + int err; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 1; /* handled */ + sbinfo = au_sbi(sb); + if (sbinfo->si_wbr_create_ops->fin) { + err = sbinfo->si_wbr_create_ops->fin(sb); + if (!err) + err = 1; + } + + sbinfo->si_wbr_create = create->wbr_create; + sbinfo->si_wbr_create_ops = au_wbr_create_ops + create->wbr_create; + switch (create->wbr_create) { + case AuWbrCreate_MFSRRV: + case AuWbrCreate_MFSRR: + sbinfo->si_wbr_mfs.mfsrr_watermark = create->mfsrr_watermark; + /*FALLTHROUGH*/ + case AuWbrCreate_MFS: + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFS: + case AuWbrCreate_PMFSV: + sbinfo->si_wbr_mfs.mfs_expire = create->mfs_second * HZ; + break; + } + + if (sbinfo->si_wbr_create_ops->init) + sbinfo->si_wbr_create_ops->init(sb); /* ignore */ + + return err; +} + +/* + * returns, + * plus: processed without an error + * zero: unprocessed + */ +static int au_opt_simple(struct super_block *sb, struct au_opt *opt, + struct au_opts *opts) +{ + int err; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 1; /* handled */ + sbinfo = au_sbi(sb); + switch (opt->type) { + case Opt_udba: + sbinfo->si_mntflags &= ~AuOptMask_UDBA; + sbinfo->si_mntflags |= opt->udba; + opts->given_udba |= opt->udba; + break; + + case Opt_plink: + au_opt_set(sbinfo->si_mntflags, PLINK); + break; + case Opt_noplink: + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_put(sb); + au_opt_clr(sbinfo->si_mntflags, PLINK); + break; + case Opt_list_plink: + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_list(sb); + break; + + case Opt_diropq_a: + au_opt_set(sbinfo->si_mntflags, ALWAYS_DIROPQ); + break; + case Opt_diropq_w: + au_opt_clr(sbinfo->si_mntflags, ALWAYS_DIROPQ); + break; + + case Opt_warn_perm: + au_opt_set(sbinfo->si_mntflags, WARN_PERM); + break; + case Opt_nowarn_perm: + au_opt_clr(sbinfo->si_mntflags, WARN_PERM); + break; + + case Opt_refrof: + au_opt_set(sbinfo->si_mntflags, REFROF); + break; + case Opt_norefrof: + au_opt_clr(sbinfo->si_mntflags, REFROF); + break; + + case Opt_verbose: + au_opt_set(sbinfo->si_mntflags, VERBOSE); + break; + case Opt_noverbose: + au_opt_clr(sbinfo->si_mntflags, VERBOSE); + break; + + case Opt_sum: + au_opt_set(sbinfo->si_mntflags, SUM); + break; + case Opt_wsum: + au_opt_clr(sbinfo->si_mntflags, SUM); + au_opt_set(sbinfo->si_mntflags, SUM_W); + case Opt_nosum: + au_opt_clr(sbinfo->si_mntflags, SUM); + au_opt_clr(sbinfo->si_mntflags, SUM_W); + break; + + case Opt_wbr_create: + err = au_opt_wbr_create(sb, &opt->wbr_create); + break; + case Opt_wbr_copyup: + sbinfo->si_wbr_copyup = opt->wbr_copyup; + sbinfo->si_wbr_copyup_ops = au_wbr_copyup_ops + opt->wbr_copyup; + break; + + case Opt_dirwh: + sbinfo->si_dirwh = opt->dirwh; + break; + + case Opt_rdcache: + sbinfo->si_rdcache = opt->rdcache * HZ; + break; + case Opt_rdblk: + sbinfo->si_rdblk = opt->rdblk; + break; + case Opt_rdblk_def: + sbinfo->si_rdblk = AUFS_RDBLK_DEF; + break; + case Opt_rdhash: + sbinfo->si_rdhash = opt->rdhash; + break; + case Opt_rdhash_def: + sbinfo->si_rdhash = AUFS_RDHASH_DEF; + break; + + case Opt_shwh: + au_opt_set(sbinfo->si_mntflags, SHWH); + break; + case Opt_noshwh: + au_opt_clr(sbinfo->si_mntflags, SHWH); + break; + + case Opt_trunc_xino: + au_opt_set(sbinfo->si_mntflags, TRUNC_XINO); + break; + case Opt_notrunc_xino: + au_opt_clr(sbinfo->si_mntflags, TRUNC_XINO); + break; + + case Opt_trunc_xino_path: + case Opt_itrunc_xino: + err = au_xino_trunc(sb, opt->xino_itrunc.bindex); + if (!err) + err = 1; + break; + + case Opt_trunc_xib: + au_fset_opts(opts->flags, TRUNC_XIB); + break; + case Opt_notrunc_xib: + au_fclr_opts(opts->flags, TRUNC_XIB); + break; + + default: + err = 0; + break; + } + + return err; +} + +/* + * returns tri-state. + * plus: processed without an error + * zero: unprocessed + * minus: error + */ +static int au_opt_br(struct super_block *sb, struct au_opt *opt, + struct au_opts *opts) +{ + int err, do_refresh; + + err = 0; + switch (opt->type) { + case Opt_append: + opt->add.bindex = au_sbend(sb) + 1; + if (opt->add.bindex < 0) + opt->add.bindex = 0; + goto add; + case Opt_prepend: + opt->add.bindex = 0; + add: + case Opt_add: + err = au_br_add(sb, &opt->add, + au_ftest_opts(opts->flags, REMOUNT)); + if (!err) { + err = 1; + au_fset_opts(opts->flags, REFRESH_DIR); + if (au_br_whable(opt->add.perm)) + au_fset_opts(opts->flags, REFRESH_NONDIR); + } + break; + + case Opt_del: + case Opt_idel: + err = au_br_del(sb, &opt->del, + au_ftest_opts(opts->flags, REMOUNT)); + if (!err) { + err = 1; + au_fset_opts(opts->flags, TRUNC_XIB); + au_fset_opts(opts->flags, REFRESH_DIR); + au_fset_opts(opts->flags, REFRESH_NONDIR); + } + break; + + case Opt_mod: + case Opt_imod: + err = au_br_mod(sb, &opt->mod, + au_ftest_opts(opts->flags, REMOUNT), + &do_refresh); + if (!err) { + err = 1; + if (do_refresh) { + au_fset_opts(opts->flags, REFRESH_DIR); + au_fset_opts(opts->flags, REFRESH_NONDIR); + } + } + break; + } + + return err; +} + +static int au_opt_xino(struct super_block *sb, struct au_opt *opt, + struct au_opt_xino **opt_xino, + struct au_opts *opts) +{ + int err; + aufs_bindex_t bend, bindex; + struct dentry *root, *parent, *h_root; + + err = 0; + switch (opt->type) { + case Opt_xino: + err = au_xino_set(sb, &opt->xino, + !!au_ftest_opts(opts->flags, REMOUNT)); + if (unlikely(err)) + break; + + *opt_xino = &opt->xino; + au_xino_brid_set(sb, -1); + + /* safe d_parent access */ + parent = opt->xino.file->f_dentry->d_parent; + root = sb->s_root; + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; bindex++) { + h_root = au_h_dptr(root, bindex); + if (h_root == parent) { + au_xino_brid_set(sb, au_sbr_id(sb, bindex)); + break; + } + } + break; + + case Opt_noxino: + au_xino_clr(sb); + au_xino_brid_set(sb, -1); + *opt_xino = (void *)-1; + break; + } + + return err; +} + +int au_opts_verify(struct super_block *sb, unsigned long sb_flags, + unsigned int pending) +{ + int err; + aufs_bindex_t bindex, bend; + unsigned char do_plink, skip, do_free; + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *root; + struct inode *dir, *h_dir; + struct au_sbinfo *sbinfo; + struct au_hinode *hdir; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!(sbinfo->si_mntflags & AuOptMask_UDBA)); + + if (!(sb_flags & MS_RDONLY)) { + if (unlikely(!au_br_writable(au_sbr_perm(sb, 0)))) + pr_warning("first branch should be rw\n"); + if (unlikely(au_opt_test(sbinfo->si_mntflags, SHWH))) + pr_warning("shwh should be used with ro\n"); + } + + if (au_opt_test((sbinfo->si_mntflags | pending), UDBA_HINOTIFY) + && !au_opt_test(sbinfo->si_mntflags, XINO)) + pr_warning("udba=inotify requires xino\n"); + + err = 0; + root = sb->s_root; + dir = sb->s_root->d_inode; + do_plink = !!au_opt_test(sbinfo->si_mntflags, PLINK); + bend = au_sbend(sb); + for (bindex = 0; !err && bindex <= bend; bindex++) { + skip = 0; + h_dir = au_h_iptr(dir, bindex); + br = au_sbr(sb, bindex); + do_free = 0; + + wbr = br->br_wbr; + if (wbr) + wbr_wh_read_lock(wbr); + + switch (br->br_perm) { + case AuBrPerm_RO: + case AuBrPerm_ROWH: + case AuBrPerm_RR: + case AuBrPerm_RRWH: + do_free = !!wbr; + skip = (!wbr + || (!wbr->wbr_whbase + && !wbr->wbr_plink + && !wbr->wbr_orph)); + break; + + case AuBrPerm_RWNoLinkWH: + /* skip = (!br->br_whbase && !br->br_orph); */ + skip = (!wbr || !wbr->wbr_whbase); + if (skip && wbr) { + if (do_plink) + skip = !!wbr->wbr_plink; + else + skip = !wbr->wbr_plink; + } + break; + + case AuBrPerm_RW: + /* skip = (br->br_whbase && br->br_ohph); */ + skip = (wbr && wbr->wbr_whbase); + if (skip) { + if (do_plink) + skip = !!wbr->wbr_plink; + else + skip = !wbr->wbr_plink; + } + break; + + default: + BUG(); + } + if (wbr) + wbr_wh_read_unlock(wbr); + + if (skip) + continue; + + hdir = au_hi(dir, bindex); + au_hin_imtx_lock_nested(hdir, AuLsc_I_PARENT); + if (wbr) + wbr_wh_write_lock(wbr); + err = au_wh_init(au_h_dptr(root, bindex), br, sb); + if (wbr) + wbr_wh_write_unlock(wbr); + au_hin_imtx_unlock(hdir); + + if (!err && do_free) { + kfree(wbr); + br->br_wbr = NULL; + } + } + + return err; +} + +int au_opts_mount(struct super_block *sb, struct au_opts *opts) +{ + int err; + unsigned int tmp; + aufs_bindex_t bend; + struct au_opt *opt; + struct au_opt_xino *opt_xino, xino; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 0; + opt_xino = NULL; + opt = opts->opt; + while (err >= 0 && opt->type != Opt_tail) + err = au_opt_simple(sb, opt++, opts); + if (err > 0) + err = 0; + else if (unlikely(err < 0)) + goto out; + + /* disable xino and udba temporary */ + sbinfo = au_sbi(sb); + tmp = sbinfo->si_mntflags; + au_opt_clr(sbinfo->si_mntflags, XINO); + au_opt_set_udba(sbinfo->si_mntflags, UDBA_REVAL); + + opt = opts->opt; + while (err >= 0 && opt->type != Opt_tail) + err = au_opt_br(sb, opt++, opts); + if (err > 0) + err = 0; + else if (unlikely(err < 0)) + goto out; + + bend = au_sbend(sb); + if (unlikely(bend < 0)) { + err = -EINVAL; + pr_err("no branches\n"); + goto out; + } + + if (au_opt_test(tmp, XINO)) + au_opt_set(sbinfo->si_mntflags, XINO); + opt = opts->opt; + while (!err && opt->type != Opt_tail) + err = au_opt_xino(sb, opt++, &opt_xino, opts); + if (unlikely(err)) + goto out; + + err = au_opts_verify(sb, sb->s_flags, tmp); + if (unlikely(err)) + goto out; + + /* restore xino */ + if (au_opt_test(tmp, XINO) && !opt_xino) { + xino.file = au_xino_def(sb); + err = PTR_ERR(xino.file); + if (IS_ERR(xino.file)) + goto out; + + err = au_xino_set(sb, &xino, /*remount*/0); + fput(xino.file); + if (unlikely(err)) + goto out; + } + + /* restore udba */ + sbinfo->si_mntflags &= ~AuOptMask_UDBA; + sbinfo->si_mntflags |= (tmp & AuOptMask_UDBA); + if (au_opt_test(tmp, UDBA_HINOTIFY)) { + struct inode *dir = sb->s_root->d_inode; + au_reset_hinotify(dir, + au_hi_flags(dir, /*isdir*/1) & ~AuHi_XINO); + } + + out: + return err; +} + +int au_opts_remount(struct super_block *sb, struct au_opts *opts) +{ + int err, rerr; + struct inode *dir; + struct au_opt_xino *opt_xino; + struct au_opt *opt; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + dir = sb->s_root->d_inode; + sbinfo = au_sbi(sb); + err = 0; + opt_xino = NULL; + opt = opts->opt; + while (err >= 0 && opt->type != Opt_tail) { + err = au_opt_simple(sb, opt, opts); + if (!err) + err = au_opt_br(sb, opt, opts); + if (!err) + err = au_opt_xino(sb, opt, &opt_xino, opts); + opt++; + } + if (err > 0) + err = 0; + AuTraceErr(err); + /* go on even err */ + + rerr = au_opts_verify(sb, opts->sb_flags, /*pending*/0); + if (unlikely(rerr && !err)) + err = rerr; + + if (au_ftest_opts(opts->flags, TRUNC_XIB)) { + rerr = au_xib_trunc(sb); + if (unlikely(rerr && !err)) + err = rerr; + } + + /* will be handled by the caller */ + if (!au_ftest_opts(opts->flags, REFRESH_DIR) + && (opts->given_udba || au_opt_test(sbinfo->si_mntflags, XINO))) + au_fset_opts(opts->flags, REFRESH_DIR); + + AuDbg("status 0x%x\n", opts->flags); + return err; +} + +/* ---------------------------------------------------------------------- */ + +unsigned int au_opt_udba(struct super_block *sb) +{ + return au_mntflags(sb) & AuOptMask_UDBA; +} --- linux-2.6.32.orig/ubuntu/aufs/dbgaufs.h +++ linux-2.6.32/ubuntu/aufs/dbgaufs.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * debugfs interface + */ + +#ifndef __DBGAUFS_H__ +#define __DBGAUFS_H__ + +#ifdef __KERNEL__ + +#include +#include + +struct super_block; +struct au_sbinfo; + +#ifdef CONFIG_DEBUG_FS +/* dbgaufs.c */ +void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex); +void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex); +void dbgaufs_si_fin(struct au_sbinfo *sbinfo); +int dbgaufs_si_init(struct au_sbinfo *sbinfo); +void dbgaufs_fin(void); +int __init dbgaufs_init(void); + +#else + +static inline +void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + /* empty */ +} + +static inline +void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + /* empty */ +} + +static inline +void dbgaufs_si_fin(struct au_sbinfo *sbinfo) +{ + /* empty */ +} + +static inline +int dbgaufs_si_init(struct au_sbinfo *sbinfo) +{ + return 0; +} + +#define dbgaufs_fin() do {} while (0) + +static inline +int __init dbgaufs_init(void) +{ + return 0; +} +#endif /* CONFIG_DEBUG_FS */ + +#endif /* __KERNEL__ */ +#endif /* __DBGAUFS_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/module.c +++ linux-2.6.32/ubuntu/aufs/module.c @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * module global variables and operations + */ + +#include +#include +#include "aufs.h" + +void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp) +{ + if (new_sz <= nused) + return p; + + p = krealloc(p, new_sz, gfp); + if (p) + memset(p + nused, 0, new_sz - nused); + return p; +} + +/* ---------------------------------------------------------------------- */ + +/* + * aufs caches + */ +struct kmem_cache *au_cachep[AuCache_Last]; +static int __init au_cache_init(void) +{ + au_cachep[AuCache_DINFO] = AuCache(au_dinfo); + if (au_cachep[AuCache_DINFO]) + au_cachep[AuCache_ICNTNR] = AuCache(au_icntnr); + if (au_cachep[AuCache_ICNTNR]) + au_cachep[AuCache_FINFO] = AuCache(au_finfo); + if (au_cachep[AuCache_FINFO]) + au_cachep[AuCache_VDIR] = AuCache(au_vdir); + if (au_cachep[AuCache_VDIR]) + au_cachep[AuCache_DEHSTR] = AuCache(au_vdir_dehstr); + if (au_cachep[AuCache_DEHSTR]) + return 0; + + return -ENOMEM; +} + +static void au_cache_fin(void) +{ + int i; + for (i = 0; i < AuCache_Last; i++) + if (au_cachep[i]) { + kmem_cache_destroy(au_cachep[i]); + au_cachep[i] = NULL; + } +} + +/* ---------------------------------------------------------------------- */ + +int au_dir_roflags; + +/* + * functions for module interface. + */ +MODULE_LICENSE("GPL"); +/* MODULE_LICENSE("GPL v2"); */ +MODULE_AUTHOR("Junjiro R. Okajima "); +MODULE_DESCRIPTION(AUFS_NAME + " -- Advanced multi layered unification filesystem"); +MODULE_VERSION(AUFS_VERSION); + +/* it should be 'byte', but param_set_byte() prints it by "%c" */ +short aufs_nwkq = AUFS_NWKQ_DEF; +MODULE_PARM_DESC(nwkq, "the number of workqueue thread, " AUFS_WKQ_NAME); +module_param_named(nwkq, aufs_nwkq, short, S_IRUGO); + +/* this module parameter has no meaning when SYSFS is disabled */ +int sysaufs_brs = 1; +MODULE_PARM_DESC(brs, "use /fs/aufs/si_*/brN"); +module_param_named(brs, sysaufs_brs, int, S_IRUGO); + +/* ---------------------------------------------------------------------- */ + +static char au_esc_chars[0x20 + 3]; /* 0x01-0x20, backslash, del, and NULL */ + +int au_seq_path(struct seq_file *seq, struct path *path) +{ + return seq_path(seq, path, au_esc_chars); +} + +/* ---------------------------------------------------------------------- */ + +static int __init aufs_init(void) +{ + int err, i; + char *p; + + p = au_esc_chars; + for (i = 1; i <= ' '; i++) + *p++ = i; + *p++ = '\\'; + *p++ = '\x7f'; + *p = 0; + + au_dir_roflags = au_file_roflags(O_DIRECTORY | O_LARGEFILE); + + sysaufs_brs_init(); + au_debug_init(); + + err = -EINVAL; + if (unlikely(aufs_nwkq <= 0)) + goto out; + + err = sysaufs_init(); + if (unlikely(err)) + goto out; + err = au_wkq_init(); + if (unlikely(err)) + goto out_sysaufs; + err = au_hinotify_init(); + if (unlikely(err)) + goto out_wkq; + err = au_sysrq_init(); + if (unlikely(err)) + goto out_hin; + err = au_cache_init(); + if (unlikely(err)) + goto out_sysrq; + err = register_filesystem(&aufs_fs_type); + if (unlikely(err)) + goto out_cache; + /* since we define pr_fmt, call printk directly */ + printk(KERN_INFO AUFS_NAME " " AUFS_VERSION "\n"); + goto out; /* success */ + + out_cache: + au_cache_fin(); + out_sysrq: + au_sysrq_fin(); + out_hin: + au_hinotify_fin(); + out_wkq: + au_wkq_fin(); + out_sysaufs: + sysaufs_fin(); + out: + return err; +} + +static void __exit aufs_exit(void) +{ + unregister_filesystem(&aufs_fs_type); + au_cache_fin(); + au_sysrq_fin(); + au_hinotify_fin(); + au_wkq_fin(); + sysaufs_fin(); +} + +module_init(aufs_init); +module_exit(aufs_exit); --- linux-2.6.32.orig/ubuntu/aufs/conf.mk +++ linux-2.6.32/ubuntu/aufs/conf.mk @@ -0,0 +1,31 @@ + +AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS} + +define AuConf +ifdef ${1} +AuConfStr += ${1}=${${1}} +endif +endef + +$(foreach i, BRANCH_MAX_127 BRANCH_MAX_511 BRANCH_MAX_1023 BRANCH_MAX_32767 \ + HINOTIFY \ + EXPORT INO_T_64 \ + RDU \ + SHWH \ + BR_RAMFS \ + BR_FUSE POLL \ + BDEV_LOOP \ + DEBUG MAGIC_SYSRQ, \ + $(eval $(call AuConf,CONFIG_AUFS_${i}))) + +AuConfName = ${obj}/conf.str +${AuConfName}.tmp: FORCE + @echo ${AuConfStr} | tr ' ' '\n' | sed -e 's/^/"/' -e 's/$$/\\n"/' > $@ +${AuConfName}: ${AuConfName}.tmp + @diff -q $< $@ > /dev/null 2>&1 || { \ + echo ' GEN ' $@; \ + cp -p $< $@; \ + } +FORCE: +clean-files += ${AuConfName} ${AuConfName}.tmp +${obj}/sysfs.o: ${AuConfName} --- linux-2.6.32.orig/ubuntu/aufs/xino.c +++ linux-2.6.32/ubuntu/aufs/xino.c @@ -0,0 +1,1204 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * external inode number translation table and bitmap + */ + +#include +#include +#include +#include "aufs.h" + +ssize_t xino_fread(au_readf_t func, struct file *file, void *buf, size_t size, + loff_t *pos) +{ + ssize_t err; + mm_segment_t oldfs; + + oldfs = get_fs(); + set_fs(KERNEL_DS); + do { + /* todo: signal_pending? */ + err = func(file, (char __user *)buf, size, pos); + } while (err == -EAGAIN || err == -EINTR); + set_fs(oldfs); + +#if 0 /* reserved for future use */ + if (err > 0) + fsnotify_access(file->f_dentry); +#endif + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static ssize_t do_xino_fwrite(au_writef_t func, struct file *file, void *buf, + size_t size, loff_t *pos) +{ + ssize_t err; + mm_segment_t oldfs; + + oldfs = get_fs(); + set_fs(KERNEL_DS); + /* lockdep_off(); */ + do { + /* todo: signal_pending? */ + err = func(file, (const char __user *)buf, size, pos); + } while (err == -EAGAIN || err == -EINTR); + /* lockdep_on(); */ + set_fs(oldfs); + +#if 0 /* reserved for future use */ + if (err > 0) + fsnotify_modify(file->f_dentry); +#endif + + return err; +} + +struct do_xino_fwrite_args { + ssize_t *errp; + au_writef_t func; + struct file *file; + void *buf; + size_t size; + loff_t *pos; +}; + +static void call_do_xino_fwrite(void *args) +{ + struct do_xino_fwrite_args *a = args; + *a->errp = do_xino_fwrite(a->func, a->file, a->buf, a->size, a->pos); +} + +ssize_t xino_fwrite(au_writef_t func, struct file *file, void *buf, size_t size, + loff_t *pos) +{ + ssize_t err; + + /* todo: signal block and no wkq? */ + /* todo: new credential scheme */ + /* + * it breaks RLIMIT_FSIZE and normal user's limit, + * users should care about quota and real 'filesystem full.' + */ + if (!au_test_wkq(current)) { + int wkq_err; + struct do_xino_fwrite_args args = { + .errp = &err, + .func = func, + .file = file, + .buf = buf, + .size = size, + .pos = pos + }; + + wkq_err = au_wkq_wait(call_do_xino_fwrite, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } else + err = do_xino_fwrite(func, file, buf, size, pos); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * create a new xinofile at the same place/path as @base_file. + */ +struct file *au_xino_create2(struct file *base_file, struct file *copy_src) +{ + struct file *file; + struct dentry *base, *dentry, *parent; + struct inode *dir; + struct qstr *name; + int err; + struct path path; + + base = base_file->f_dentry; + parent = base->d_parent; /* dir inode is locked */ + dir = parent->d_inode; + IMustLock(dir); + + file = ERR_PTR(-EINVAL); + name = &base->d_name; + dentry = vfsub_lookup_one_len(name->name, parent, name->len); + if (IS_ERR(dentry)) { + file = (void *)dentry; + pr_err("%.*s lookup err %ld\n", + AuLNPair(name), PTR_ERR(dentry)); + goto out; + } + + /* no need to mnt_want_write() since we call dentry_open() later */ + err = vfs_create(dir, dentry, S_IRUGO | S_IWUGO, NULL); + if (unlikely(err)) { + file = ERR_PTR(err); + pr_err("%.*s create err %d\n", AuLNPair(name), err); + goto out_dput; + } + + path.dentry = dentry; + path.mnt = base_file->f_vfsmnt; + path_get(&path); + file = vfsub_dentry_open(&path, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE, + current_cred()); + if (IS_ERR(file)) { + pr_err("%.*s open err %ld\n", AuLNPair(name), PTR_ERR(file)); + goto out_dput; + } + + err = vfsub_unlink(dir, &file->f_path, /*force*/0); + if (unlikely(err)) { + pr_err("%.*s unlink err %d\n", AuLNPair(name), err); + goto out_fput; + } + + if (copy_src) { + /* no one can touch copy_src xino */ + err = au_copy_file(file, copy_src, + i_size_read(copy_src->f_dentry->d_inode)); + if (unlikely(err)) { + pr_err("%.*s copy err %d\n", AuLNPair(name), err); + goto out_fput; + } + } + goto out_dput; /* success */ + + out_fput: + fput(file); + file = ERR_PTR(err); + out_dput: + dput(dentry); + out: + return file; +} + +struct au_xino_lock_dir { + struct au_hinode *hdir; + struct dentry *parent; + struct mutex *mtx; +}; + +static void au_xino_lock_dir(struct super_block *sb, struct file *xino, + struct au_xino_lock_dir *ldir) +{ + aufs_bindex_t brid, bindex; + + ldir->hdir = NULL; + bindex = -1; + brid = au_xino_brid(sb); + if (brid >= 0) + bindex = au_br_index(sb, brid); + if (bindex >= 0) { + ldir->hdir = au_hi(sb->s_root->d_inode, bindex); + au_hin_imtx_lock_nested(ldir->hdir, AuLsc_I_PARENT); + } else { + ldir->parent = dget_parent(xino->f_dentry); + ldir->mtx = &ldir->parent->d_inode->i_mutex; + mutex_lock_nested(ldir->mtx, AuLsc_I_PARENT); + } +} + +static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir) +{ + if (ldir->hdir) + au_hin_imtx_unlock(ldir->hdir); + else { + mutex_unlock(ldir->mtx); + dput(ldir->parent); + } +} + +/* ---------------------------------------------------------------------- */ + +/* trucate xino files asynchronously */ + +int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex) +{ + int err; + aufs_bindex_t bi, bend; + struct au_branch *br; + struct file *new_xino, *file; + struct super_block *h_sb; + struct au_xino_lock_dir ldir; + + err = -EINVAL; + bend = au_sbend(sb); + if (unlikely(bindex < 0 || bend < bindex)) + goto out; + br = au_sbr(sb, bindex); + file = br->br_xino.xi_file; + if (!file) + goto out; + + au_xino_lock_dir(sb, file, &ldir); + /* mnt_want_write() is unnecessary here */ + new_xino = au_xino_create2(file, file); + au_xino_unlock_dir(&ldir); + err = PTR_ERR(new_xino); + if (IS_ERR(new_xino)) + goto out; + err = 0; + fput(file); + br->br_xino.xi_file = new_xino; + + h_sb = br->br_mnt->mnt_sb; + for (bi = 0; bi <= bend; bi++) { + if (unlikely(bi == bindex)) + continue; + br = au_sbr(sb, bi); + if (br->br_mnt->mnt_sb != h_sb) + continue; + + fput(br->br_xino.xi_file); + br->br_xino.xi_file = new_xino; + get_file(new_xino); + } + + out: + return err; +} + +struct xino_do_trunc_args { + struct super_block *sb; + struct au_branch *br; +}; + +static void xino_do_trunc(void *_args) +{ + struct xino_do_trunc_args *args = _args; + struct super_block *sb; + struct au_branch *br; + struct inode *dir; + int err; + aufs_bindex_t bindex; + + err = 0; + sb = args->sb; + dir = sb->s_root->d_inode; + br = args->br; + + si_noflush_write_lock(sb); + ii_read_lock_parent(dir); + bindex = au_br_index(sb, br->br_id); + err = au_xino_trunc(sb, bindex); + if (!err + && br->br_xino.xi_file->f_dentry->d_inode->i_blocks + >= br->br_xino_upper) + br->br_xino_upper += AUFS_XINO_TRUNC_STEP; + + ii_read_unlock(dir); + if (unlikely(err)) + pr_warning("err b%d, (%d)\n", bindex, err); + atomic_dec(&br->br_xino_running); + atomic_dec(&br->br_count); + au_nwt_done(&au_sbi(sb)->si_nowait); + si_write_unlock(sb); + kfree(args); +} + +static void xino_try_trunc(struct super_block *sb, struct au_branch *br) +{ + struct xino_do_trunc_args *args; + int wkq_err; + + if (br->br_xino.xi_file->f_dentry->d_inode->i_blocks + < br->br_xino_upper) + return; + + if (atomic_inc_return(&br->br_xino_running) > 1) + goto out; + + /* lock and kfree() will be called in trunc_xino() */ + args = kmalloc(sizeof(*args), GFP_NOFS); + if (unlikely(!args)) { + AuErr1("no memory\n"); + goto out_args; + } + + atomic_inc_return(&br->br_count); + args->sb = sb; + args->br = br; + wkq_err = au_wkq_nowait(xino_do_trunc, args, sb); + if (!wkq_err) + return; /* success */ + + pr_err("wkq %d\n", wkq_err); + atomic_dec_return(&br->br_count); + + out_args: + kfree(args); + out: + atomic_dec_return(&br->br_xino_running); +} + +/* ---------------------------------------------------------------------- */ + +static int au_xino_do_write(au_writef_t write, struct file *file, + ino_t h_ino, ino_t ino) +{ + loff_t pos; + ssize_t sz; + + pos = h_ino; + if (unlikely(au_loff_max / sizeof(ino) - 1 < pos)) { + AuIOErr1("too large hi%lu\n", (unsigned long)h_ino); + return -EFBIG; + } + pos *= sizeof(ino); + sz = xino_fwrite(write, file, &ino, sizeof(ino), &pos); + if (sz == sizeof(ino)) + return 0; /* success */ + + AuIOErr("write failed (%zd)\n", sz); + return -EIO; +} + +/* + * write @ino to the xinofile for the specified branch{@sb, @bindex} + * at the position of @h_ino. + * even if @ino is zero, it is written to the xinofile and means no entry. + * if the size of the xino file on a specific filesystem exceeds the watermark, + * try truncating it. + */ +int au_xino_write(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t ino) +{ + int err; + unsigned int mnt_flags; + struct au_branch *br; + + BUILD_BUG_ON(sizeof(long long) != sizeof(au_loff_max) + || ((loff_t)-1) > 0); + SiMustAnyLock(sb); + + mnt_flags = au_mntflags(sb); + if (!au_opt_test(mnt_flags, XINO)) + return 0; + + br = au_sbr(sb, bindex); + err = au_xino_do_write(au_sbi(sb)->si_xwrite, br->br_xino.xi_file, + h_ino, ino); + if (!err) { + if (au_opt_test(mnt_flags, TRUNC_XINO) + && au_test_fs_trunc_xino(br->br_mnt->mnt_sb)) + xino_try_trunc(sb, br); + return 0; /* success */ + } + + AuIOErr("write failed (%d)\n", err); + return -EIO; +} + +/* ---------------------------------------------------------------------- */ + +/* aufs inode number bitmap */ + +static const int page_bits = (int)PAGE_SIZE * BITS_PER_BYTE; +static ino_t xib_calc_ino(unsigned long pindex, int bit) +{ + ino_t ino; + + AuDebugOn(bit < 0 || page_bits <= bit); + ino = AUFS_FIRST_INO + pindex * page_bits + bit; + return ino; +} + +static void xib_calc_bit(ino_t ino, unsigned long *pindex, int *bit) +{ + AuDebugOn(ino < AUFS_FIRST_INO); + ino -= AUFS_FIRST_INO; + *pindex = ino / page_bits; + *bit = ino % page_bits; +} + +static int xib_pindex(struct super_block *sb, unsigned long pindex) +{ + int err; + loff_t pos; + ssize_t sz; + struct au_sbinfo *sbinfo; + struct file *xib; + unsigned long *p; + + sbinfo = au_sbi(sb); + MtxMustLock(&sbinfo->si_xib_mtx); + AuDebugOn(pindex > ULONG_MAX / PAGE_SIZE + || !au_opt_test(sbinfo->si_mntflags, XINO)); + + if (pindex == sbinfo->si_xib_last_pindex) + return 0; + + xib = sbinfo->si_xib; + p = sbinfo->si_xib_buf; + pos = sbinfo->si_xib_last_pindex; + pos *= PAGE_SIZE; + sz = xino_fwrite(sbinfo->si_xwrite, xib, p, PAGE_SIZE, &pos); + if (unlikely(sz != PAGE_SIZE)) + goto out; + + pos = pindex; + pos *= PAGE_SIZE; + if (i_size_read(xib->f_dentry->d_inode) >= pos + PAGE_SIZE) + sz = xino_fread(sbinfo->si_xread, xib, p, PAGE_SIZE, &pos); + else { + memset(p, 0, PAGE_SIZE); + sz = xino_fwrite(sbinfo->si_xwrite, xib, p, PAGE_SIZE, &pos); + } + if (sz == PAGE_SIZE) { + sbinfo->si_xib_last_pindex = pindex; + return 0; /* success */ + } + + out: + AuIOErr1("write failed (%zd)\n", sz); + err = sz; + if (sz >= 0) + err = -EIO; + return err; +} + +/* ---------------------------------------------------------------------- */ + +int au_xino_write0(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t ino) +{ + int err, bit; + unsigned long pindex; + struct au_sbinfo *sbinfo; + + if (!au_opt_test(au_mntflags(sb), XINO)) + return 0; + + err = 0; + if (ino) { + sbinfo = au_sbi(sb); + xib_calc_bit(ino, &pindex, &bit); + AuDebugOn(page_bits <= bit); + mutex_lock(&sbinfo->si_xib_mtx); + err = xib_pindex(sb, pindex); + if (!err) { + clear_bit(bit, sbinfo->si_xib_buf); + sbinfo->si_xib_next_bit = bit; + } + mutex_unlock(&sbinfo->si_xib_mtx); + } + + if (!err) + err = au_xino_write(sb, bindex, h_ino, 0); + return err; +} + +/* get an unused inode number from bitmap */ +ino_t au_xino_new_ino(struct super_block *sb) +{ + ino_t ino; + unsigned long *p, pindex, ul, pend; + struct au_sbinfo *sbinfo; + struct file *file; + int free_bit, err; + + if (!au_opt_test(au_mntflags(sb), XINO)) + return iunique(sb, AUFS_FIRST_INO); + + sbinfo = au_sbi(sb); + mutex_lock(&sbinfo->si_xib_mtx); + p = sbinfo->si_xib_buf; + free_bit = sbinfo->si_xib_next_bit; + if (free_bit < page_bits && !test_bit(free_bit, p)) + goto out; /* success */ + free_bit = find_first_zero_bit(p, page_bits); + if (free_bit < page_bits) + goto out; /* success */ + + pindex = sbinfo->si_xib_last_pindex; + for (ul = pindex - 1; ul < ULONG_MAX; ul--) { + err = xib_pindex(sb, ul); + if (unlikely(err)) + goto out_err; + free_bit = find_first_zero_bit(p, page_bits); + if (free_bit < page_bits) + goto out; /* success */ + } + + file = sbinfo->si_xib; + pend = i_size_read(file->f_dentry->d_inode) / PAGE_SIZE; + for (ul = pindex + 1; ul <= pend; ul++) { + err = xib_pindex(sb, ul); + if (unlikely(err)) + goto out_err; + free_bit = find_first_zero_bit(p, page_bits); + if (free_bit < page_bits) + goto out; /* success */ + } + BUG(); + + out: + set_bit(free_bit, p); + sbinfo->si_xib_next_bit++; + pindex = sbinfo->si_xib_last_pindex; + mutex_unlock(&sbinfo->si_xib_mtx); + ino = xib_calc_ino(pindex, free_bit); + AuDbg("i%lu\n", (unsigned long)ino); + return ino; + out_err: + mutex_unlock(&sbinfo->si_xib_mtx); + AuDbg("i0\n"); + return 0; +} + +/* + * read @ino from xinofile for the specified branch{@sb, @bindex} + * at the position of @h_ino. + * if @ino does not exist and @do_new is true, get new one. + */ +int au_xino_read(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t *ino) +{ + int err; + ssize_t sz; + loff_t pos; + struct file *file; + struct au_sbinfo *sbinfo; + + *ino = 0; + if (!au_opt_test(au_mntflags(sb), XINO)) + return 0; /* no xino */ + + err = 0; + sbinfo = au_sbi(sb); + pos = h_ino; + if (unlikely(au_loff_max / sizeof(*ino) - 1 < pos)) { + AuIOErr1("too large hi%lu\n", (unsigned long)h_ino); + return -EFBIG; + } + pos *= sizeof(*ino); + + file = au_sbr(sb, bindex)->br_xino.xi_file; + if (i_size_read(file->f_dentry->d_inode) < pos + sizeof(*ino)) + return 0; /* no ino */ + + sz = xino_fread(sbinfo->si_xread, file, ino, sizeof(*ino), &pos); + if (sz == sizeof(*ino)) + return 0; /* success */ + + err = sz; + if (unlikely(sz >= 0)) { + err = -EIO; + AuIOErr("xino read error (%zd)\n", sz); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* create and set a new xino file */ + +struct file *au_xino_create(struct super_block *sb, char *fname, int silent) +{ + struct file *file; + struct dentry *h_parent, *d; + struct inode *h_dir; + int err; + + /* + * at mount-time, and the xino file is the default path, + * hinotify is disabled so we have no inotify events to ignore. + * when a user specified the xino, we cannot get au_hdir to be ignored. + */ + file = vfsub_filp_open(fname, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE, + S_IRUGO | S_IWUGO); + if (IS_ERR(file)) { + if (!silent) + pr_err("open %s(%ld)\n", fname, PTR_ERR(file)); + return file; + } + + /* keep file count */ + h_parent = dget_parent(file->f_dentry); + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + /* mnt_want_write() is unnecessary here */ + err = vfsub_unlink(h_dir, &file->f_path, /*force*/0); + mutex_unlock(&h_dir->i_mutex); + dput(h_parent); + if (unlikely(err)) { + if (!silent) + pr_err("unlink %s(%d)\n", fname, err); + goto out; + } + + err = -EINVAL; + d = file->f_dentry; + if (unlikely(sb == d->d_sb)) { + if (!silent) + pr_err("%s must be outside\n", fname); + goto out; + } + if (unlikely(au_test_fs_bad_xino(d->d_sb))) { + if (!silent) + pr_err("xino doesn't support %s(%s)\n", + fname, au_sbtype(d->d_sb)); + goto out; + } + return file; /* success */ + + out: + fput(file); + file = ERR_PTR(err); + return file; +} + +/* + * find another branch who is on the same filesystem of the specified + * branch{@btgt}. search until @bend. + */ +static int is_sb_shared(struct super_block *sb, aufs_bindex_t btgt, + aufs_bindex_t bend) +{ + aufs_bindex_t bindex; + struct super_block *tgt_sb = au_sbr_sb(sb, btgt); + + for (bindex = 0; bindex < btgt; bindex++) + if (unlikely(tgt_sb == au_sbr_sb(sb, bindex))) + return bindex; + for (bindex++; bindex <= bend; bindex++) + if (unlikely(tgt_sb == au_sbr_sb(sb, bindex))) + return bindex; + return -1; +} + +/* ---------------------------------------------------------------------- */ + +/* + * initialize the xinofile for the specified branch @br + * at the place/path where @base_file indicates. + * test whether another branch is on the same filesystem or not, + * if @do_test is true. + */ +int au_xino_br(struct super_block *sb, struct au_branch *br, ino_t h_ino, + struct file *base_file, int do_test) +{ + int err; + ino_t ino; + aufs_bindex_t bend, bindex; + struct au_branch *shared_br, *b; + struct file *file; + struct super_block *tgt_sb; + + shared_br = NULL; + bend = au_sbend(sb); + if (do_test) { + tgt_sb = br->br_mnt->mnt_sb; + for (bindex = 0; bindex <= bend; bindex++) { + b = au_sbr(sb, bindex); + if (tgt_sb == b->br_mnt->mnt_sb) { + shared_br = b; + break; + } + } + } + + if (!shared_br || !shared_br->br_xino.xi_file) { + struct au_xino_lock_dir ldir; + + au_xino_lock_dir(sb, base_file, &ldir); + /* mnt_want_write() is unnecessary here */ + file = au_xino_create2(base_file, NULL); + au_xino_unlock_dir(&ldir); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + br->br_xino.xi_file = file; + } else { + br->br_xino.xi_file = shared_br->br_xino.xi_file; + get_file(br->br_xino.xi_file); + } + + ino = AUFS_ROOT_INO; + err = au_xino_do_write(au_sbi(sb)->si_xwrite, br->br_xino.xi_file, + h_ino, ino); + if (!err) + return 0; /* success */ + + + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* trucate a xino bitmap file */ + +/* todo: slow */ +static int do_xib_restore(struct super_block *sb, struct file *file, void *page) +{ + int err, bit; + ssize_t sz; + unsigned long pindex; + loff_t pos, pend; + struct au_sbinfo *sbinfo; + au_readf_t func; + ino_t *ino; + unsigned long *p; + + err = 0; + sbinfo = au_sbi(sb); + MtxMustLock(&sbinfo->si_xib_mtx); + p = sbinfo->si_xib_buf; + func = sbinfo->si_xread; + pend = i_size_read(file->f_dentry->d_inode); + pos = 0; + while (pos < pend) { + sz = xino_fread(func, file, page, PAGE_SIZE, &pos); + err = sz; + if (unlikely(sz <= 0)) + goto out; + + err = 0; + for (ino = page; sz > 0; ino++, sz -= sizeof(ino)) { + if (unlikely(*ino < AUFS_FIRST_INO)) + continue; + + xib_calc_bit(*ino, &pindex, &bit); + AuDebugOn(page_bits <= bit); + err = xib_pindex(sb, pindex); + if (!err) + set_bit(bit, p); + else + goto out; + } + } + + out: + return err; +} + +static int xib_restore(struct super_block *sb) +{ + int err; + aufs_bindex_t bindex, bend; + void *page; + + err = -ENOMEM; + page = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!page)) + goto out; + + err = 0; + bend = au_sbend(sb); + for (bindex = 0; !err && bindex <= bend; bindex++) + if (!bindex || is_sb_shared(sb, bindex, bindex - 1) < 0) + err = do_xib_restore + (sb, au_sbr(sb, bindex)->br_xino.xi_file, page); + else + AuDbg("b%d\n", bindex); + free_page((unsigned long)page); + + out: + return err; +} + +int au_xib_trunc(struct super_block *sb) +{ + int err; + ssize_t sz; + loff_t pos; + struct au_xino_lock_dir ldir; + struct au_sbinfo *sbinfo; + unsigned long *p; + struct file *file; + + SiMustWriteLock(sb); + + err = 0; + sbinfo = au_sbi(sb); + if (!au_opt_test(sbinfo->si_mntflags, XINO)) + goto out; + + file = sbinfo->si_xib; + if (i_size_read(file->f_dentry->d_inode) <= PAGE_SIZE) + goto out; + + au_xino_lock_dir(sb, file, &ldir); + /* mnt_want_write() is unnecessary here */ + file = au_xino_create2(sbinfo->si_xib, NULL); + au_xino_unlock_dir(&ldir); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + fput(sbinfo->si_xib); + sbinfo->si_xib = file; + + p = sbinfo->si_xib_buf; + memset(p, 0, PAGE_SIZE); + pos = 0; + sz = xino_fwrite(sbinfo->si_xwrite, sbinfo->si_xib, p, PAGE_SIZE, &pos); + if (unlikely(sz != PAGE_SIZE)) { + err = sz; + AuIOErr("err %d\n", err); + if (sz >= 0) + err = -EIO; + goto out; + } + + mutex_lock(&sbinfo->si_xib_mtx); + /* mnt_want_write() is unnecessary here */ + err = xib_restore(sb); + mutex_unlock(&sbinfo->si_xib_mtx); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * xino mount option handlers + */ +static au_readf_t find_readf(struct file *h_file) +{ + const struct file_operations *fop = h_file->f_op; + + if (fop) { + if (fop->read) + return fop->read; + if (fop->aio_read) + return do_sync_read; + } + return ERR_PTR(-ENOSYS); +} + +static au_writef_t find_writef(struct file *h_file) +{ + const struct file_operations *fop = h_file->f_op; + + if (fop) { + if (fop->write) + return fop->write; + if (fop->aio_write) + return do_sync_write; + } + return ERR_PTR(-ENOSYS); +} + +/* xino bitmap */ +static void xino_clear_xib(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + sbinfo->si_xread = NULL; + sbinfo->si_xwrite = NULL; + if (sbinfo->si_xib) + fput(sbinfo->si_xib); + sbinfo->si_xib = NULL; + free_page((unsigned long)sbinfo->si_xib_buf); + sbinfo->si_xib_buf = NULL; +} + +static int au_xino_set_xib(struct super_block *sb, struct file *base) +{ + int err; + loff_t pos; + struct au_sbinfo *sbinfo; + struct file *file; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + file = au_xino_create2(base, sbinfo->si_xib); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + if (sbinfo->si_xib) + fput(sbinfo->si_xib); + sbinfo->si_xib = file; + sbinfo->si_xread = find_readf(file); + sbinfo->si_xwrite = find_writef(file); + + err = -ENOMEM; + if (!sbinfo->si_xib_buf) + sbinfo->si_xib_buf = (void *)get_zeroed_page(GFP_NOFS); + if (unlikely(!sbinfo->si_xib_buf)) + goto out_unset; + + sbinfo->si_xib_last_pindex = 0; + sbinfo->si_xib_next_bit = 0; + if (i_size_read(file->f_dentry->d_inode) < PAGE_SIZE) { + pos = 0; + err = xino_fwrite(sbinfo->si_xwrite, file, sbinfo->si_xib_buf, + PAGE_SIZE, &pos); + if (unlikely(err != PAGE_SIZE)) + goto out_free; + } + err = 0; + goto out; /* success */ + + out_free: + free_page((unsigned long)sbinfo->si_xib_buf); + sbinfo->si_xib_buf = NULL; + if (err >= 0) + err = -EIO; + out_unset: + fput(sbinfo->si_xib); + sbinfo->si_xib = NULL; + sbinfo->si_xread = NULL; + sbinfo->si_xwrite = NULL; + out: + return err; +} + +/* xino for each branch */ +static void xino_clear_br(struct super_block *sb) +{ + aufs_bindex_t bindex, bend; + struct au_branch *br; + + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + if (!br || !br->br_xino.xi_file) + continue; + + fput(br->br_xino.xi_file); + br->br_xino.xi_file = NULL; + } +} + +static int au_xino_set_br(struct super_block *sb, struct file *base) +{ + int err; + ino_t ino; + aufs_bindex_t bindex, bend, bshared; + struct { + struct file *old, *new; + } *fpair, *p; + struct au_branch *br; + struct inode *inode; + au_writef_t writef; + + SiMustWriteLock(sb); + + err = -ENOMEM; + bend = au_sbend(sb); + fpair = kcalloc(bend + 1, sizeof(*fpair), GFP_NOFS); + if (unlikely(!fpair)) + goto out; + + inode = sb->s_root->d_inode; + ino = AUFS_ROOT_INO; + writef = au_sbi(sb)->si_xwrite; + for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) { + br = au_sbr(sb, bindex); + bshared = is_sb_shared(sb, bindex, bindex - 1); + if (bshared >= 0) { + /* shared xino */ + *p = fpair[bshared]; + get_file(p->new); + } + + if (!p->new) { + /* new xino */ + p->old = br->br_xino.xi_file; + p->new = au_xino_create2(base, br->br_xino.xi_file); + err = PTR_ERR(p->new); + if (IS_ERR(p->new)) { + p->new = NULL; + goto out_pair; + } + } + + err = au_xino_do_write(writef, p->new, + au_h_iptr(inode, bindex)->i_ino, ino); + if (unlikely(err)) + goto out_pair; + } + + for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) { + br = au_sbr(sb, bindex); + if (br->br_xino.xi_file) + fput(br->br_xino.xi_file); + get_file(p->new); + br->br_xino.xi_file = p->new; + } + + out_pair: + for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) + if (p->new) + fput(p->new); + else + break; + kfree(fpair); + out: + return err; +} + +void au_xino_clr(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + au_xigen_clr(sb); + xino_clear_xib(sb); + xino_clear_br(sb); + sbinfo = au_sbi(sb); + /* lvalue, do not call au_mntflags() */ + au_opt_clr(sbinfo->si_mntflags, XINO); +} + +int au_xino_set(struct super_block *sb, struct au_opt_xino *xino, int remount) +{ + int err, skip; + struct dentry *parent, *cur_parent; + struct qstr *dname, *cur_name; + struct file *cur_xino; + struct inode *dir; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 0; + sbinfo = au_sbi(sb); + parent = dget_parent(xino->file->f_dentry); + if (remount) { + skip = 0; + dname = &xino->file->f_dentry->d_name; + cur_xino = sbinfo->si_xib; + if (cur_xino) { + cur_parent = dget_parent(cur_xino->f_dentry); + cur_name = &cur_xino->f_dentry->d_name; + skip = (cur_parent == parent + && dname->len == cur_name->len + && !memcmp(dname->name, cur_name->name, + dname->len)); + dput(cur_parent); + } + if (skip) + goto out; + } + + au_opt_set(sbinfo->si_mntflags, XINO); + dir = parent->d_inode; + mutex_lock_nested(&dir->i_mutex, AuLsc_I_PARENT); + /* mnt_want_write() is unnecessary here */ + err = au_xino_set_xib(sb, xino->file); + if (!err) + err = au_xigen_set(sb, xino->file); + if (!err) + err = au_xino_set_br(sb, xino->file); + mutex_unlock(&dir->i_mutex); + if (!err) + goto out; /* success */ + + /* reset all */ + AuIOErr("failed creating xino(%d).\n", err); + + out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * create a xinofile at the default place/path. + */ +struct file *au_xino_def(struct super_block *sb) +{ + struct file *file; + char *page, *p; + struct au_branch *br; + struct super_block *h_sb; + struct path path; + aufs_bindex_t bend, bindex, bwr; + + br = NULL; + bend = au_sbend(sb); + bwr = -1; + for (bindex = 0; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_writable(br->br_perm) + && !au_test_fs_bad_xino(br->br_mnt->mnt_sb)) { + bwr = bindex; + break; + } + } + + if (bwr >= 0) { + file = ERR_PTR(-ENOMEM); + page = __getname(); + if (unlikely(!page)) + goto out; + path.mnt = br->br_mnt; + path.dentry = au_h_dptr(sb->s_root, bwr); + p = d_path(&path, page, PATH_MAX - sizeof(AUFS_XINO_FNAME)); + file = (void *)p; + if (!IS_ERR(p)) { + strcat(p, "/" AUFS_XINO_FNAME); + AuDbg("%s\n", p); + file = au_xino_create(sb, p, /*silent*/0); + if (!IS_ERR(file)) + au_xino_brid_set(sb, br->br_id); + } + __putname(page); + } else { + file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0); + if (IS_ERR(file)) + goto out; + h_sb = file->f_dentry->d_sb; + if (unlikely(au_test_fs_bad_xino(h_sb))) { + pr_err("xino doesn't support %s(%s)\n", + AUFS_XINO_DEFPATH, au_sbtype(h_sb)); + fput(file); + file = ERR_PTR(-EINVAL); + } + if (!IS_ERR(file)) + au_xino_brid_set(sb, -1); + } + + out: + return file; +} + +/* ---------------------------------------------------------------------- */ + +int au_xino_path(struct seq_file *seq, struct file *file) +{ + int err; + + err = au_seq_path(seq, &file->f_path); + if (unlikely(err < 0)) + goto out; + + err = 0; +#define Deleted "\\040(deleted)" + seq->count -= sizeof(Deleted) - 1; + AuDebugOn(memcmp(seq->buf + seq->count, Deleted, + sizeof(Deleted) - 1)); +#undef Deleted + + out: + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/iinfo.c +++ linux-2.6.32/ubuntu/aufs/iinfo.c @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode private data + */ + +#include "aufs.h" + +struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex) +{ + struct inode *h_inode; + + IiMustAnyLock(inode); + + h_inode = au_ii(inode)->ii_hinode[0 + bindex].hi_inode; + AuDebugOn(h_inode && atomic_read(&h_inode->i_count) <= 0); + return h_inode; +} + +/* todo: hard/soft set? */ +void au_set_ibstart(struct inode *inode, aufs_bindex_t bindex) +{ + struct au_iinfo *iinfo = au_ii(inode); + struct inode *h_inode; + + IiMustWriteLock(inode); + + iinfo->ii_bstart = bindex; + h_inode = iinfo->ii_hinode[bindex + 0].hi_inode; + if (h_inode) + au_cpup_igen(inode, h_inode); +} + +void au_hiput(struct au_hinode *hinode) +{ + au_hin_free(hinode); + dput(hinode->hi_whdentry); + iput(hinode->hi_inode); +} + +unsigned int au_hi_flags(struct inode *inode, int isdir) +{ + unsigned int flags; + const unsigned int mnt_flags = au_mntflags(inode->i_sb); + + flags = 0; + if (au_opt_test(mnt_flags, XINO)) + au_fset_hi(flags, XINO); + if (isdir && au_opt_test(mnt_flags, UDBA_HINOTIFY)) + au_fset_hi(flags, HINOTIFY); + return flags; +} + +void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex, + struct inode *h_inode, unsigned int flags) +{ + struct au_hinode *hinode; + struct inode *hi; + struct au_iinfo *iinfo = au_ii(inode); + + IiMustWriteLock(inode); + + hinode = iinfo->ii_hinode + bindex; + hi = hinode->hi_inode; + AuDebugOn(h_inode && atomic_read(&h_inode->i_count) <= 0); + AuDebugOn(h_inode && hi); + + if (hi) + au_hiput(hinode); + hinode->hi_inode = h_inode; + if (h_inode) { + int err; + struct super_block *sb = inode->i_sb; + struct au_branch *br; + + if (bindex == iinfo->ii_bstart) + au_cpup_igen(inode, h_inode); + br = au_sbr(sb, bindex); + hinode->hi_id = br->br_id; + if (au_ftest_hi(flags, XINO)) { + err = au_xino_write(sb, bindex, h_inode->i_ino, + inode->i_ino); + if (unlikely(err)) + AuIOErr1("failed au_xino_write() %d\n", err); + } + + if (au_ftest_hi(flags, HINOTIFY) + && au_br_hinotifyable(br->br_perm)) { + err = au_hin_alloc(hinode, inode, h_inode); + if (unlikely(err)) + AuIOErr1("au_hin_alloc() %d\n", err); + } + } +} + +void au_set_hi_wh(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_wh) +{ + struct au_hinode *hinode; + + IiMustWriteLock(inode); + + hinode = au_ii(inode)->ii_hinode + bindex; + AuDebugOn(hinode->hi_whdentry); + hinode->hi_whdentry = h_wh; +} + +void au_update_iigen(struct inode *inode) +{ + atomic_set(&au_ii(inode)->ii_generation, au_sigen(inode->i_sb)); + /* smp_mb(); */ /* atomic_set */ +} + +/* it may be called at remount time, too */ +void au_update_brange(struct inode *inode, int do_put_zero) +{ + struct au_iinfo *iinfo; + + iinfo = au_ii(inode); + if (!iinfo || iinfo->ii_bstart < 0) + return; + + IiMustWriteLock(inode); + + if (do_put_zero) { + aufs_bindex_t bindex; + + for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; + bindex++) { + struct inode *h_i; + + h_i = iinfo->ii_hinode[0 + bindex].hi_inode; + if (h_i && !h_i->i_nlink) + au_set_h_iptr(inode, bindex, NULL, 0); + } + } + + iinfo->ii_bstart = -1; + while (++iinfo->ii_bstart <= iinfo->ii_bend) + if (iinfo->ii_hinode[0 + iinfo->ii_bstart].hi_inode) + break; + if (iinfo->ii_bstart > iinfo->ii_bend) { + iinfo->ii_bstart = -1; + iinfo->ii_bend = -1; + return; + } + + iinfo->ii_bend++; + while (0 <= --iinfo->ii_bend) + if (iinfo->ii_hinode[0 + iinfo->ii_bend].hi_inode) + break; + AuDebugOn(iinfo->ii_bstart > iinfo->ii_bend || iinfo->ii_bend < 0); +} + +/* ---------------------------------------------------------------------- */ + +int au_iinfo_init(struct inode *inode) +{ + struct au_iinfo *iinfo; + struct super_block *sb; + int nbr, i; + + sb = inode->i_sb; + iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); + nbr = au_sbend(sb) + 1; + if (unlikely(nbr <= 0)) + nbr = 1; + iinfo->ii_hinode = kcalloc(nbr, sizeof(*iinfo->ii_hinode), GFP_NOFS); + if (iinfo->ii_hinode) { + for (i = 0; i < nbr; i++) + iinfo->ii_hinode[i].hi_id = -1; + + atomic_set(&iinfo->ii_generation, au_sigen(sb)); + /* smp_mb(); */ /* atomic_set */ + au_rw_init(&iinfo->ii_rwsem); + iinfo->ii_bstart = -1; + iinfo->ii_bend = -1; + iinfo->ii_vdir = NULL; + return 0; + } + return -ENOMEM; +} + +int au_ii_realloc(struct au_iinfo *iinfo, int nbr) +{ + int err, sz; + struct au_hinode *hip; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + err = -ENOMEM; + sz = sizeof(*hip) * (iinfo->ii_bend + 1); + if (!sz) + sz = sizeof(*hip); + hip = au_kzrealloc(iinfo->ii_hinode, sz, sizeof(*hip) * nbr, GFP_NOFS); + if (hip) { + iinfo->ii_hinode = hip; + err = 0; + } + + return err; +} + +static int au_iinfo_write0(struct super_block *sb, struct au_hinode *hinode, + ino_t ino) +{ + int err; + aufs_bindex_t bindex; + unsigned char locked; + + err = 0; + locked = !!si_noflush_read_trylock(sb); + bindex = au_br_index(sb, hinode->hi_id); + if (bindex >= 0) + err = au_xino_write0(sb, bindex, hinode->hi_inode->i_ino, ino); + /* error action? */ + if (locked) + si_read_unlock(sb); + return err; +} + +void au_iinfo_fin(struct inode *inode) +{ + ino_t ino; + aufs_bindex_t bend; + unsigned char unlinked = !inode->i_nlink; + struct au_iinfo *iinfo; + struct au_hinode *hi; + struct super_block *sb; + + if (unlinked) { + int err = au_xigen_inc(inode); + if (unlikely(err)) + AuWarn1("failed resetting i_generation, %d\n", err); + } + + iinfo = au_ii(inode); + /* bad_inode case */ + if (!iinfo) + return; + + if (iinfo->ii_vdir) + au_vdir_free(iinfo->ii_vdir); + + if (iinfo->ii_bstart >= 0) { + sb = inode->i_sb; + ino = 0; + if (unlinked) + ino = inode->i_ino; + hi = iinfo->ii_hinode + iinfo->ii_bstart; + bend = iinfo->ii_bend; + while (iinfo->ii_bstart++ <= bend) { + if (hi->hi_inode) { + if (unlinked || !hi->hi_inode->i_nlink) { + au_iinfo_write0(sb, hi, ino); + /* ignore this error */ + ino = 0; + } + au_hiput(hi); + } + hi++; + } + } + + kfree(iinfo->ii_hinode); + AuRwDestroy(&iinfo->ii_rwsem); +} --- linux-2.6.32.orig/ubuntu/aufs/sbinfo.c +++ linux-2.6.32/ubuntu/aufs/sbinfo.c @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * superblock private data + */ + +#include "aufs.h" + +/* + * they are necessary regardless sysfs is disabled. + */ +void au_si_free(struct kobject *kobj) +{ + struct au_sbinfo *sbinfo; + struct super_block *sb; + + sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); + AuDebugOn(!list_empty(&sbinfo->si_plink.head)); + + sb = sbinfo->si_sb; + si_write_lock(sb); + au_xino_clr(sb); + au_br_free(sbinfo); + kfree(sbinfo->si_branch); + mutex_destroy(&sbinfo->si_xib_mtx); + si_write_unlock(sb); + AuRwDestroy(&sbinfo->si_rwsem); + + kfree(sbinfo); +} + +int au_si_alloc(struct super_block *sb) +{ + int err; + struct au_sbinfo *sbinfo; + + err = -ENOMEM; + sbinfo = kmalloc(sizeof(*sbinfo), GFP_NOFS); + if (unlikely(!sbinfo)) + goto out; + + /* will be reallocated separately */ + sbinfo->si_branch = kzalloc(sizeof(*sbinfo->si_branch), GFP_NOFS); + if (unlikely(!sbinfo->si_branch)) + goto out_sbinfo; + + memset(&sbinfo->si_kobj, 0, sizeof(sbinfo->si_kobj)); + err = sysaufs_si_init(sbinfo); + if (unlikely(err)) + goto out_br; + + au_nwt_init(&sbinfo->si_nowait); + au_rw_init_wlock(&sbinfo->si_rwsem); + sbinfo->si_generation = 0; + sbinfo->au_si_status = 0; + sbinfo->si_bend = -1; + sbinfo->si_last_br_id = 0; + + sbinfo->si_wbr_copyup = AuWbrCopyup_Def; + sbinfo->si_wbr_create = AuWbrCreate_Def; + sbinfo->si_wbr_copyup_ops = au_wbr_copyup_ops + AuWbrCopyup_Def; + sbinfo->si_wbr_create_ops = au_wbr_create_ops + AuWbrCreate_Def; + + sbinfo->si_mntflags = AuOpt_Def; + + sbinfo->si_xread = NULL; + sbinfo->si_xwrite = NULL; + sbinfo->si_xib = NULL; + mutex_init(&sbinfo->si_xib_mtx); + sbinfo->si_xib_buf = NULL; + sbinfo->si_xino_brid = -1; + /* leave si_xib_last_pindex and si_xib_next_bit */ + + sbinfo->si_rdcache = AUFS_RDCACHE_DEF * HZ; + sbinfo->si_rdblk = AUFS_RDBLK_DEF; + sbinfo->si_rdhash = AUFS_RDHASH_DEF; + sbinfo->si_dirwh = AUFS_DIRWH_DEF; + + au_spl_init(&sbinfo->si_plink); + init_waitqueue_head(&sbinfo->si_plink_wq); + + /* leave other members for sysaufs and si_mnt. */ + sbinfo->si_sb = sb; + sb->s_fs_info = sbinfo; + au_debug_sbinfo_init(sbinfo); + return 0; /* success */ + + out_br: + kfree(sbinfo->si_branch); + out_sbinfo: + kfree(sbinfo); + out: + return err; +} + +int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr) +{ + int err, sz; + struct au_branch **brp; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + err = -ENOMEM; + sz = sizeof(*brp) * (sbinfo->si_bend + 1); + if (unlikely(!sz)) + sz = sizeof(*brp); + brp = au_kzrealloc(sbinfo->si_branch, sz, sizeof(*brp) * nbr, GFP_NOFS); + if (brp) { + sbinfo->si_branch = brp; + err = 0; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +unsigned int au_sigen_inc(struct super_block *sb) +{ + unsigned int gen; + + SiMustWriteLock(sb); + + gen = ++au_sbi(sb)->si_generation; + au_update_digen(sb->s_root); + au_update_iigen(sb->s_root->d_inode); + sb->s_root->d_inode->i_version++; + return gen; +} + +aufs_bindex_t au_new_br_id(struct super_block *sb) +{ + aufs_bindex_t br_id; + int i; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + for (i = 0; i <= AUFS_BRANCH_MAX; i++) { + br_id = ++sbinfo->si_last_br_id; + if (br_id && au_br_index(sb, br_id) < 0) + return br_id; + } + + return -1; +} + +/* ---------------------------------------------------------------------- */ + +/* dentry and super_block lock. call at entry point */ +void aufs_read_lock(struct dentry *dentry, int flags) +{ + si_read_lock(dentry->d_sb, flags); + if (au_ftest_lock(flags, DW)) + di_write_lock_child(dentry); + else + di_read_lock_child(dentry, flags); +} + +void aufs_read_unlock(struct dentry *dentry, int flags) +{ + if (au_ftest_lock(flags, DW)) + di_write_unlock(dentry); + else + di_read_unlock(dentry, flags); + si_read_unlock(dentry->d_sb); +} + +void aufs_write_lock(struct dentry *dentry) +{ + si_write_lock(dentry->d_sb); + di_write_lock_child(dentry); +} + +void aufs_write_unlock(struct dentry *dentry) +{ + di_write_unlock(dentry); + si_write_unlock(dentry->d_sb); +} + +void aufs_read_and_write_lock2(struct dentry *d1, struct dentry *d2, int flags) +{ + si_read_lock(d1->d_sb, flags); + di_write_lock2_child(d1, d2, au_ftest_lock(flags, DIR)); +} + +void aufs_read_and_write_unlock2(struct dentry *d1, struct dentry *d2) +{ + di_write_unlock2(d1, d2); + si_read_unlock(d1->d_sb); +} --- linux-2.6.32.orig/ubuntu/aufs/wkq.c +++ linux-2.6.32/ubuntu/aufs/wkq.c @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * workqueue for asynchronous/super-io operations + * todo: try new dredential scheme + */ + +#include +#include "aufs.h" + +/* internal workqueue named AUFS_WKQ_NAME */ +static struct au_wkq { + struct workqueue_struct *q; + + /* balancing */ + atomic_t busy; +} *au_wkq; + +struct au_wkinfo { + struct work_struct wk; + struct super_block *sb; + + unsigned int flags; /* see wkq.h */ + + au_wkq_func_t func; + void *args; + + atomic_t *busyp; + struct completion *comp; +}; + +/* ---------------------------------------------------------------------- */ + +static int enqueue(struct au_wkq *wkq, struct au_wkinfo *wkinfo) +{ + wkinfo->busyp = &wkq->busy; + if (au_ftest_wkq(wkinfo->flags, WAIT)) + return !queue_work(wkq->q, &wkinfo->wk); + else + return !schedule_work(&wkinfo->wk); +} + +static void do_wkq(struct au_wkinfo *wkinfo) +{ + unsigned int idle, n; + int i, idle_idx; + + while (1) { + if (au_ftest_wkq(wkinfo->flags, WAIT)) { + idle_idx = 0; + idle = UINT_MAX; + for (i = 0; i < aufs_nwkq; i++) { + n = atomic_inc_return(&au_wkq[i].busy); + if (n == 1 && !enqueue(au_wkq + i, wkinfo)) + return; /* success */ + + if (n < idle) { + idle_idx = i; + idle = n; + } + atomic_dec(&au_wkq[i].busy); + } + } else + idle_idx = aufs_nwkq; + + atomic_inc(&au_wkq[idle_idx].busy); + if (!enqueue(au_wkq + idle_idx, wkinfo)) + return; /* success */ + + /* impossible? */ + AuWarn1("failed to queue_work()\n"); + yield(); + } +} + +static void wkq_func(struct work_struct *wk) +{ + struct au_wkinfo *wkinfo = container_of(wk, struct au_wkinfo, wk); + + wkinfo->func(wkinfo->args); + atomic_dec_return(wkinfo->busyp); + if (au_ftest_wkq(wkinfo->flags, WAIT)) + complete(wkinfo->comp); + else { + kobject_put(&au_sbi(wkinfo->sb)->si_kobj); + module_put(THIS_MODULE); + kfree(wkinfo); + } +} + +/* + * Since struct completion is large, try allocating it dynamically. + */ +#if defined(CONFIG_4KSTACKS) || defined(AuTest4KSTACKS) +#define AuWkqCompDeclare(name) struct completion *comp = NULL + +static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp) +{ + *comp = kmalloc(sizeof(**comp), GFP_NOFS); + if (*comp) { + init_completion(*comp); + wkinfo->comp = *comp; + return 0; + } + return -ENOMEM; +} + +static void au_wkq_comp_free(struct completion *comp) +{ + kfree(comp); +} + +#else + +/* no braces */ +#define AuWkqCompDeclare(name) \ + DECLARE_COMPLETION_ONSTACK(_ ## name); \ + struct completion *comp = &_ ## name + +static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp) +{ + wkinfo->comp = *comp; + return 0; +} + +static void au_wkq_comp_free(struct completion *comp __maybe_unused) +{ + /* empty */ +} +#endif /* 4KSTACKS */ + +static void au_wkq_run(struct au_wkinfo *wkinfo) +{ + au_dbg_verify_kthread(); + INIT_WORK(&wkinfo->wk, wkq_func); + do_wkq(wkinfo); +} + +int au_wkq_wait(au_wkq_func_t func, void *args) +{ + int err; + AuWkqCompDeclare(comp); + struct au_wkinfo wkinfo = { + .flags = AuWkq_WAIT, + .func = func, + .args = args + }; + + err = au_wkq_comp_alloc(&wkinfo, &comp); + if (!err) { + au_wkq_run(&wkinfo); + /* no timeout, no interrupt */ + wait_for_completion(wkinfo.comp); + au_wkq_comp_free(comp); + } + + return err; + +} + +int au_wkq_nowait(au_wkq_func_t func, void *args, struct super_block *sb) +{ + int err; + struct au_wkinfo *wkinfo; + + atomic_inc(&au_sbi(sb)->si_nowait.nw_len); + + /* + * wkq_func() must free this wkinfo. + * it highly depends upon the implementation of workqueue. + */ + err = 0; + wkinfo = kmalloc(sizeof(*wkinfo), GFP_NOFS); + if (wkinfo) { + wkinfo->sb = sb; + wkinfo->flags = !AuWkq_WAIT; + wkinfo->func = func; + wkinfo->args = args; + wkinfo->comp = NULL; + kobject_get(&au_sbi(sb)->si_kobj); + __module_get(THIS_MODULE); + + au_wkq_run(wkinfo); + } else { + err = -ENOMEM; + atomic_dec(&au_sbi(sb)->si_nowait.nw_len); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_nwt_init(struct au_nowait_tasks *nwt) +{ + atomic_set(&nwt->nw_len, 0); + /* smp_mb();*/ /* atomic_set */ + init_waitqueue_head(&nwt->nw_wq); +} + +void au_wkq_fin(void) +{ + int i; + + for (i = 0; i < aufs_nwkq; i++) + if (au_wkq[i].q && !IS_ERR(au_wkq[i].q)) + destroy_workqueue(au_wkq[i].q); + kfree(au_wkq); +} + +int __init au_wkq_init(void) +{ + int err, i; + struct au_wkq *nowaitq; + + /* '+1' is for accounting of nowait queue */ + err = -ENOMEM; + au_wkq = kcalloc(aufs_nwkq + 1, sizeof(*au_wkq), GFP_NOFS); + if (unlikely(!au_wkq)) + goto out; + + err = 0; + for (i = 0; i < aufs_nwkq; i++) { + au_wkq[i].q = create_singlethread_workqueue(AUFS_WKQ_NAME); + if (au_wkq[i].q && !IS_ERR(au_wkq[i].q)) { + atomic_set(&au_wkq[i].busy, 0); + continue; + } + + err = PTR_ERR(au_wkq[i].q); + au_wkq_fin(); + goto out; + } + + /* nowait accounting */ + nowaitq = au_wkq + aufs_nwkq; + atomic_set(&nowaitq->busy, 0); + nowaitq->q = NULL; + /* smp_mb(); */ /* atomic_set */ + + out: + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/inode.c +++ linux-2.6.32/ubuntu/aufs/inode.c @@ -0,0 +1,414 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode functions + */ + +#include "aufs.h" + +struct inode *au_igrab(struct inode *inode) +{ + if (inode) { + AuDebugOn(!atomic_read(&inode->i_count)); + atomic_inc_return(&inode->i_count); + } + return inode; +} + +static void au_refresh_hinode_attr(struct inode *inode, int do_version) +{ + au_cpup_attr_all(inode, /*force*/0); + au_update_iigen(inode); + if (do_version) + inode->i_version++; +} + +int au_refresh_hinode_self(struct inode *inode, int do_attr) +{ + int err; + aufs_bindex_t bindex, new_bindex; + unsigned char update; + struct inode *first; + struct au_hinode *p, *q, tmp; + struct super_block *sb; + struct au_iinfo *iinfo; + + IiMustWriteLock(inode); + + update = 0; + sb = inode->i_sb; + iinfo = au_ii(inode); + err = au_ii_realloc(iinfo, au_sbend(sb) + 1); + if (unlikely(err)) + goto out; + + p = iinfo->ii_hinode + iinfo->ii_bstart; + first = p->hi_inode; + err = 0; + for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; + bindex++, p++) { + if (!p->hi_inode) + continue; + + new_bindex = au_br_index(sb, p->hi_id); + if (new_bindex == bindex) + continue; + + if (new_bindex < 0) { + update++; + au_hiput(p); + p->hi_inode = NULL; + continue; + } + + if (new_bindex < iinfo->ii_bstart) + iinfo->ii_bstart = new_bindex; + if (iinfo->ii_bend < new_bindex) + iinfo->ii_bend = new_bindex; + /* swap two lower inode, and loop again */ + q = iinfo->ii_hinode + new_bindex; + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hi_inode) { + bindex--; + p--; + } + } + au_update_brange(inode, /*do_put_zero*/0); + if (do_attr) + au_refresh_hinode_attr(inode, update && S_ISDIR(inode->i_mode)); + + out: + return err; +} + +int au_refresh_hinode(struct inode *inode, struct dentry *dentry) +{ + int err, update; + unsigned int flags; + aufs_bindex_t bindex, bend; + unsigned char isdir; + struct inode *first; + struct au_hinode *p; + struct au_iinfo *iinfo; + + err = au_refresh_hinode_self(inode, /*do_attr*/0); + if (unlikely(err)) + goto out; + + update = 0; + iinfo = au_ii(inode); + p = iinfo->ii_hinode + iinfo->ii_bstart; + first = p->hi_inode; + isdir = S_ISDIR(inode->i_mode); + flags = au_hi_flags(inode, isdir); + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) { + struct inode *h_i; + struct dentry *h_d; + + h_d = au_h_dptr(dentry, bindex); + if (!h_d || !h_d->d_inode) + continue; + + if (iinfo->ii_bstart <= bindex && bindex <= iinfo->ii_bend) { + h_i = au_h_iptr(inode, bindex); + if (h_i) { + if (h_i == h_d->d_inode) + continue; + err = -EIO; + break; + } + } + if (bindex < iinfo->ii_bstart) + iinfo->ii_bstart = bindex; + if (iinfo->ii_bend < bindex) + iinfo->ii_bend = bindex; + au_set_h_iptr(inode, bindex, au_igrab(h_d->d_inode), flags); + update = 1; + } + au_update_brange(inode, /*do_put_zero*/0); + + if (unlikely(err)) + goto out; + + au_refresh_hinode_attr(inode, update && isdir); + + out: + AuTraceErr(err); + return err; +} + +static int set_inode(struct inode *inode, struct dentry *dentry) +{ + int err; + unsigned int flags; + umode_t mode; + aufs_bindex_t bindex, bstart, btail; + unsigned char isdir; + struct dentry *h_dentry; + struct inode *h_inode; + struct au_iinfo *iinfo; + + IiMustWriteLock(inode); + + err = 0; + isdir = 0; + bstart = au_dbstart(dentry); + h_inode = au_h_dptr(dentry, bstart)->d_inode; + mode = h_inode->i_mode; + switch (mode & S_IFMT) { + case S_IFREG: + btail = au_dbtail(dentry); + inode->i_op = &aufs_iop; + inode->i_fop = &aufs_file_fop; + inode->i_mapping->a_ops = &aufs_aop; + break; + case S_IFDIR: + isdir = 1; + btail = au_dbtaildir(dentry); + inode->i_op = &aufs_dir_iop; + inode->i_fop = &aufs_dir_fop; + break; + case S_IFLNK: + btail = au_dbtail(dentry); + inode->i_op = &aufs_symlink_iop; + break; + case S_IFBLK: + case S_IFCHR: + case S_IFIFO: + case S_IFSOCK: + btail = au_dbtail(dentry); + inode->i_op = &aufs_iop; + init_special_inode(inode, mode, h_inode->i_rdev); + break; + default: + AuIOErr("Unknown file type 0%o\n", mode); + err = -EIO; + goto out; + } + + /* do not set inotify for whiteouted dirs (SHWH mode) */ + flags = au_hi_flags(inode, isdir); + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH) + && au_ftest_hi(flags, HINOTIFY) + && dentry->d_name.len > AUFS_WH_PFX_LEN + && !memcmp(dentry->d_name.name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) + au_fclr_hi(flags, HINOTIFY); + iinfo = au_ii(inode); + iinfo->ii_bstart = bstart; + iinfo->ii_bend = btail; + for (bindex = bstart; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) + au_set_h_iptr(inode, bindex, + au_igrab(h_dentry->d_inode), flags); + } + au_cpup_attr_all(inode, /*force*/1); + + out: + return err; +} + +/* successful returns with iinfo write_locked */ +static int reval_inode(struct inode *inode, struct dentry *dentry, int *matched) +{ + int err; + aufs_bindex_t bindex, bend; + struct inode *h_inode, *h_dinode; + + *matched = 0; + + /* + * before this function, if aufs got any iinfo lock, it must be only + * one, the parent dir. + * it can happen by UDBA and the obsoleted inode number. + */ + err = -EIO; + if (unlikely(inode->i_ino == parent_ino(dentry))) + goto out; + + err = 0; + ii_write_lock_new_child(inode); + h_dinode = au_h_dptr(dentry, au_dbstart(dentry))->d_inode; + bend = au_ibend(inode); + for (bindex = au_ibstart(inode); bindex <= bend; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (h_inode && h_inode == h_dinode) { + *matched = 1; + err = 0; + if (au_iigen(inode) != au_digen(dentry)) + err = au_refresh_hinode(inode, dentry); + break; + } + } + + if (unlikely(err)) + ii_write_unlock(inode); + out: + return err; +} + +int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + unsigned int d_type, ino_t *ino) +{ + int err; + struct mutex *mtx; + const int isdir = (d_type == DT_DIR); + + /* prevent hardlinks from race condition */ + mtx = NULL; + if (!isdir) { + mtx = &au_sbr(sb, bindex)->br_xino.xi_nondir_mtx; + mutex_lock(mtx); + } + err = au_xino_read(sb, bindex, h_ino, ino); + if (unlikely(err)) + goto out; + + if (!*ino) { + err = -EIO; + *ino = au_xino_new_ino(sb); + if (unlikely(!*ino)) + goto out; + err = au_xino_write(sb, bindex, h_ino, *ino); + if (unlikely(err)) + goto out; + } + + out: + if (!isdir) + mutex_unlock(mtx); + return err; +} + +/* successful returns with iinfo write_locked */ +/* todo: return with unlocked? */ +struct inode *au_new_inode(struct dentry *dentry, int must_new) +{ + struct inode *inode; + struct dentry *h_dentry; + struct super_block *sb; + ino_t h_ino, ino; + int err, match; + aufs_bindex_t bstart; + + sb = dentry->d_sb; + bstart = au_dbstart(dentry); + h_dentry = au_h_dptr(dentry, bstart); + h_ino = h_dentry->d_inode->i_ino; + err = au_xino_read(sb, bstart, h_ino, &ino); + inode = ERR_PTR(err); + if (unlikely(err)) + goto out; + new_ino: + if (!ino) { + ino = au_xino_new_ino(sb); + if (unlikely(!ino)) { + inode = ERR_PTR(-EIO); + goto out; + } + } + + AuDbg("i%lu\n", (unsigned long)ino); + inode = au_iget_locked(sb, ino); + err = PTR_ERR(inode); + if (IS_ERR(inode)) + goto out; + + AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW)); + if (inode->i_state & I_NEW) { + ii_write_lock_new_child(inode); + err = set_inode(inode, dentry); + unlock_new_inode(inode); + if (!err) + goto out; /* success */ + + iget_failed(inode); + ii_write_unlock(inode); + goto out_iput; + } else if (!must_new) { + err = reval_inode(inode, dentry, &match); + if (!err) + goto out; /* success */ + else if (match) + goto out_iput; + } + + if (unlikely(au_test_fs_unique_ino(h_dentry->d_inode))) + AuWarn1("Warning: Un-notified UDBA or repeatedly renamed dir," + " b%d, %s, %.*s, hi%lu, i%lu.\n", + bstart, au_sbtype(h_dentry->d_sb), AuDLNPair(dentry), + (unsigned long)h_ino, (unsigned long)ino); + ino = 0; + err = au_xino_write(sb, bstart, h_ino, /*ino*/0); + if (!err) { + iput(inode); + goto new_ino; + } + + out_iput: + iput(inode); + inode = ERR_PTR(err); + out: + return inode; +} + +/* ---------------------------------------------------------------------- */ + +int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, + struct inode *inode) +{ + int err; + + err = au_br_rdonly(au_sbr(sb, bindex)); + + /* pseudo-link after flushed may happen out of bounds */ + if (!err + && inode + && au_ibstart(inode) <= bindex + && bindex <= au_ibend(inode)) { + /* + * permission check is unnecessary since vfsub routine + * will be called later + */ + struct inode *hi = au_h_iptr(inode, bindex); + if (hi) + err = IS_IMMUTABLE(hi) ? -EROFS : 0; + } + + return err; +} + +int au_test_h_perm(struct inode *h_inode, int mask) +{ + if (!current_fsuid()) + return 0; + return inode_permission(h_inode, mask); +} + +int au_test_h_perm_sio(struct inode *h_inode, int mask) +{ + if (au_test_nfs(h_inode->i_sb) + && (mask & MAY_WRITE) + && S_ISDIR(h_inode->i_mode)) + mask |= MAY_READ; /* force permission check */ + return au_test_h_perm(h_inode, mask); +} --- linux-2.6.32.orig/ubuntu/aufs/Kconfig +++ linux-2.6.32/ubuntu/aufs/Kconfig @@ -0,0 +1,140 @@ +config AUFS_FS + tristate "Aufs (Advanced multi layered unification filesystem) support" + depends on EXPERIMENTAL + help + Aufs is a stackable unification filesystem such as Unionfs, + which unifies several directories and provides a merged single + directory. + In the early days, aufs was entirely re-designed and + re-implemented Unionfs Version 1.x series. Introducing many + original ideas, approaches and improvements, it becomes totally + different from Unionfs while keeping the basic features. + +if AUFS_FS +choice + prompt "Maximum number of branches" + default AUFS_BRANCH_MAX_127 + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_127 + bool "127" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_511 + bool "511" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_1023 + bool "1023" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_32767 + bool "32767" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +endchoice + +config AUFS_HINOTIFY + bool "Use inotify to detect actions on a branch" + depends on INOTIFY + help + If you want to modify files on branches directly, eg. bypassing aufs, + and want aufs to detect the changes of them fully, then enable this + option and use 'udba=inotify' mount option. + It will have a negative impact to the performance. + See detail in aufs.5. + +config AUFS_EXPORT + bool "NFS-exportable aufs" + depends on (AUFS_FS = y && EXPORTFS = y) || (AUFS_FS = m && EXPORTFS) + help + If you want to export your mounted aufs via NFS, then enable this + option. There are several requirements for this configuration. + See detail in aufs.5. + +config AUFS_INO_T_64 + bool + depends on AUFS_EXPORT + depends on 64BIT && !(ALPHA || S390) + default y + help + Automatic configuration for internal use. + /* typedef unsigned long/int __kernel_ino_t */ + /* alpha and s390x are int */ + +config AUFS_RDU + bool "Readdir in userspace" + help + If you have millions of files under a single aufs directory, and + meet the out of memory, then enable this option and set + environment variables for your readdir(3). + See detail in aufs.5. + +config AUFS_SHWH + bool "Show whiteouts" + help + If you want to make the whiteouts in aufs visible, then enable + this option and specify 'shwh' mount option. Although it may + sounds like philosophy or something, but in technically it + simply shows the name of whiteout with keeping its behaviour. + +config AUFS_BR_RAMFS + bool "Ramfs (initramfs/rootfs) as an aufs branch" + help + If you want to use ramfs as an aufs branch fs, then enable this + option. Generally tmpfs is recommended. + Aufs prohibited them to be a branch fs by default, because + initramfs becomes unusable after switch_root or something + generally. If you sets initramfs as an aufs branch and boot your + system by switch_root, you will meet a problem easily since the + files in initramfs may be inaccessible. + Unless you are going to use ramfs as an aufs branch fs without + switch_root or something, leave it N. + +config AUFS_BR_FUSE + bool "Fuse fs as an aufs branch" + depends on FUSE_FS + select AUFS_POLL + help + If you want to use fuse-based userspace filesystem as an aufs + branch fs, then enable this option. + It implements the internal poll(2) operation which is + implemented by fuse only (curretnly). + +config AUFS_POLL + bool + help + Automatic configuration for internal use. + +config AUFS_BDEV_LOOP + bool + depends on BLK_DEV_LOOP + default y + help + Automatic configuration for internal use. + Convert =[ym] into =y. + +config AUFS_DEBUG + bool "Debug aufs" + help + Enable this to compile aufs internal debug code. + It will have a negative impact to the performance. + +config AUFS_MAGIC_SYSRQ + bool + depends on AUFS_DEBUG && MAGIC_SYSRQ + default y + help + Automatic configuration for internal use. + When aufs supports Magic SysRq, enabled automatically. +endif --- linux-2.6.32.orig/ubuntu/aufs/opts.h +++ linux-2.6.32/ubuntu/aufs/opts.h @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * mount options/flags + */ + +#ifndef __AUFS_OPTS_H__ +#define __AUFS_OPTS_H__ + +#ifdef __KERNEL__ + +#include +#include + +struct file; +struct super_block; + +/* ---------------------------------------------------------------------- */ + +/* mount flags */ +#define AuOpt_XINO 1 /* external inode number bitmap + and translation table */ +#define AuOpt_TRUNC_XINO (1 << 1) /* truncate xino files */ +#define AuOpt_UDBA_NONE (1 << 2) /* users direct branch access */ +#define AuOpt_UDBA_REVAL (1 << 3) +#define AuOpt_UDBA_HINOTIFY (1 << 4) +#define AuOpt_SHWH (1 << 5) /* show whiteout */ +#define AuOpt_PLINK (1 << 6) /* pseudo-link */ +#define AuOpt_DIRPERM1 (1 << 7) /* unimplemented */ +#define AuOpt_REFROF (1 << 8) /* unimplemented */ +#define AuOpt_ALWAYS_DIROPQ (1 << 9) /* policy to creating diropq */ +#define AuOpt_SUM (1 << 10) /* summation for statfs(2) */ +#define AuOpt_SUM_W (1 << 11) /* unimplemented */ +#define AuOpt_WARN_PERM (1 << 12) /* warn when add-branch */ +#define AuOpt_VERBOSE (1 << 13) /* busy inode when del-branch */ + +#ifndef CONFIG_AUFS_HINOTIFY +#undef AuOpt_UDBA_HINOTIFY +#define AuOpt_UDBA_HINOTIFY 0 +#endif +#ifndef CONFIG_AUFS_SHWH +#undef AuOpt_SHWH +#define AuOpt_SHWH 0 +#endif + +#define AuOpt_Def (AuOpt_XINO \ + | AuOpt_UDBA_REVAL \ + | AuOpt_PLINK \ + /* | AuOpt_DIRPERM1 */ \ + | AuOpt_WARN_PERM) +#define AuOptMask_UDBA (AuOpt_UDBA_NONE \ + | AuOpt_UDBA_REVAL \ + | AuOpt_UDBA_HINOTIFY) + +#define au_opt_test(flags, name) (flags & AuOpt_##name) +#define au_opt_set(flags, name) do { \ + BUILD_BUG_ON(AuOpt_##name & AuOptMask_UDBA); \ + ((flags) |= AuOpt_##name); \ +} while (0) +#define au_opt_set_udba(flags, name) do { \ + (flags) &= ~AuOptMask_UDBA; \ + ((flags) |= AuOpt_##name); \ +} while (0) +#define au_opt_clr(flags, name) { ((flags) &= ~AuOpt_##name); } + +/* ---------------------------------------------------------------------- */ + +/* policies to select one among multiple writable branches */ +enum { + AuWbrCreate_TDP, /* top down parent */ + AuWbrCreate_RR, /* round robin */ + AuWbrCreate_MFS, /* most free space */ + AuWbrCreate_MFSV, /* mfs with seconds */ + AuWbrCreate_MFSRR, /* mfs then rr */ + AuWbrCreate_MFSRRV, /* mfs then rr with seconds */ + AuWbrCreate_PMFS, /* parent and mfs */ + AuWbrCreate_PMFSV, /* parent and mfs with seconds */ + + AuWbrCreate_Def = AuWbrCreate_TDP +}; + +enum { + AuWbrCopyup_TDP, /* top down parent */ + AuWbrCopyup_BUP, /* bottom up parent */ + AuWbrCopyup_BU, /* bottom up */ + + AuWbrCopyup_Def = AuWbrCopyup_TDP +}; + +/* ---------------------------------------------------------------------- */ + +struct au_opt_add { + aufs_bindex_t bindex; + char *pathname; + int perm; + struct path path; +}; + +struct au_opt_del { + char *pathname; + struct path h_path; +}; + +struct au_opt_mod { + char *path; + int perm; + struct dentry *h_root; +}; + +struct au_opt_xino { + char *path; + struct file *file; +}; + +struct au_opt_xino_itrunc { + aufs_bindex_t bindex; +}; + +struct au_opt_wbr_create { + int wbr_create; + int mfs_second; + unsigned long long mfsrr_watermark; +}; + +struct au_opt { + int type; + union { + struct au_opt_xino xino; + struct au_opt_xino_itrunc xino_itrunc; + struct au_opt_add add; + struct au_opt_del del; + struct au_opt_mod mod; + int dirwh; + int rdcache; + unsigned int rdblk; + unsigned int rdhash; + int udba; + struct au_opt_wbr_create wbr_create; + int wbr_copyup; + }; +}; + +/* opts flags */ +#define AuOpts_REMOUNT 1 +#define AuOpts_REFRESH_DIR (1 << 1) +#define AuOpts_REFRESH_NONDIR (1 << 2) +#define AuOpts_TRUNC_XIB (1 << 3) +#define au_ftest_opts(flags, name) ((flags) & AuOpts_##name) +#define au_fset_opts(flags, name) { (flags) |= AuOpts_##name; } +#define au_fclr_opts(flags, name) { (flags) &= ~AuOpts_##name; } + +struct au_opts { + struct au_opt *opt; + int max_opt; + + unsigned int given_udba; + unsigned int flags; + unsigned long sb_flags; +}; + +/* ---------------------------------------------------------------------- */ + +const char *au_optstr_br_perm(int brperm); +const char *au_optstr_udba(int udba); +const char *au_optstr_wbr_copyup(int wbr_copyup); +const char *au_optstr_wbr_create(int wbr_create); + +void au_opts_free(struct au_opts *opts); +int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts); +int au_opts_verify(struct super_block *sb, unsigned long sb_flags, + unsigned int pending); +int au_opts_mount(struct super_block *sb, struct au_opts *opts); +int au_opts_remount(struct super_block *sb, struct au_opts *opts); + +unsigned int au_opt_udba(struct super_block *sb); + +/* ---------------------------------------------------------------------- */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_OPTS_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/aufs.h +++ linux-2.6.32/ubuntu/aufs/aufs.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * all header files + */ + +#ifndef __AUFS_H__ +#define __AUFS_H__ + +#ifdef __KERNEL__ + +#include "debug.h" + +#include "branch.h" +#include "cpup.h" +#include "dcsub.h" +#include "dbgaufs.h" +#include "dentry.h" +#include "dir.h" +#include "file.h" +#include "fstype.h" +#include "inode.h" +#include "loop.h" +#include "module.h" +#include "opts.h" +#include "rwsem.h" +#include "spl.h" +#include "super.h" +#include "sysaufs.h" +#include "vfsub.h" +#include "whout.h" +#include "wkq.h" + +#endif /* __KERNEL__ */ +#endif /* __AUFS_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/dinfo.c +++ linux-2.6.32/ubuntu/aufs/dinfo.c @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * dentry private data + */ + +#include "aufs.h" + +int au_alloc_dinfo(struct dentry *dentry) +{ + struct au_dinfo *dinfo; + struct super_block *sb; + int nbr; + + dinfo = au_cache_alloc_dinfo(); + if (unlikely(!dinfo)) + goto out; + + sb = dentry->d_sb; + nbr = au_sbend(sb) + 1; + if (nbr <= 0) + nbr = 1; + dinfo->di_hdentry = kcalloc(nbr, sizeof(*dinfo->di_hdentry), GFP_NOFS); + if (unlikely(!dinfo->di_hdentry)) + goto out_dinfo; + + atomic_set(&dinfo->di_generation, au_sigen(sb)); + /* smp_mb(); */ /* atomic_set */ + au_rw_init_wlock_nested(&dinfo->di_rwsem, AuLsc_DI_CHILD); + dinfo->di_bstart = -1; + dinfo->di_bend = -1; + dinfo->di_bwh = -1; + dinfo->di_bdiropq = -1; + + dentry->d_fsdata = dinfo; + dentry->d_op = &aufs_dop; + return 0; /* success */ + + out_dinfo: + au_cache_free_dinfo(dinfo); + out: + return -ENOMEM; +} + +int au_di_realloc(struct au_dinfo *dinfo, int nbr) +{ + int err, sz; + struct au_hdentry *hdp; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + err = -ENOMEM; + sz = sizeof(*hdp) * (dinfo->di_bend + 1); + if (!sz) + sz = sizeof(*hdp); + hdp = au_kzrealloc(dinfo->di_hdentry, sz, sizeof(*hdp) * nbr, GFP_NOFS); + if (hdp) { + dinfo->di_hdentry = hdp; + err = 0; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void do_ii_write_lock(struct inode *inode, unsigned int lsc) +{ + switch (lsc) { + case AuLsc_DI_CHILD: + ii_write_lock_child(inode); + break; + case AuLsc_DI_CHILD2: + ii_write_lock_child2(inode); + break; + case AuLsc_DI_CHILD3: + ii_write_lock_child3(inode); + break; + case AuLsc_DI_PARENT: + ii_write_lock_parent(inode); + break; + case AuLsc_DI_PARENT2: + ii_write_lock_parent2(inode); + break; + case AuLsc_DI_PARENT3: + ii_write_lock_parent3(inode); + break; + default: + BUG(); + } +} + +static void do_ii_read_lock(struct inode *inode, unsigned int lsc) +{ + switch (lsc) { + case AuLsc_DI_CHILD: + ii_read_lock_child(inode); + break; + case AuLsc_DI_CHILD2: + ii_read_lock_child2(inode); + break; + case AuLsc_DI_CHILD3: + ii_read_lock_child3(inode); + break; + case AuLsc_DI_PARENT: + ii_read_lock_parent(inode); + break; + case AuLsc_DI_PARENT2: + ii_read_lock_parent2(inode); + break; + case AuLsc_DI_PARENT3: + ii_read_lock_parent3(inode); + break; + default: + BUG(); + } +} + +void di_read_lock(struct dentry *d, int flags, unsigned int lsc) +{ + au_rw_read_lock_nested(&au_di(d)->di_rwsem, lsc); + if (d->d_inode) { + if (au_ftest_lock(flags, IW)) + do_ii_write_lock(d->d_inode, lsc); + else if (au_ftest_lock(flags, IR)) + do_ii_read_lock(d->d_inode, lsc); + } +} + +void di_read_unlock(struct dentry *d, int flags) +{ + if (d->d_inode) { + if (au_ftest_lock(flags, IW)) + ii_write_unlock(d->d_inode); + else if (au_ftest_lock(flags, IR)) + ii_read_unlock(d->d_inode); + } + au_rw_read_unlock(&au_di(d)->di_rwsem); +} + +void di_downgrade_lock(struct dentry *d, int flags) +{ + if (d->d_inode && au_ftest_lock(flags, IR)) + ii_downgrade_lock(d->d_inode); + au_rw_dgrade_lock(&au_di(d)->di_rwsem); +} + +void di_write_lock(struct dentry *d, unsigned int lsc) +{ + au_rw_write_lock_nested(&au_di(d)->di_rwsem, lsc); + if (d->d_inode) + do_ii_write_lock(d->d_inode, lsc); +} + +void di_write_unlock(struct dentry *d) +{ + if (d->d_inode) + ii_write_unlock(d->d_inode); + au_rw_write_unlock(&au_di(d)->di_rwsem); +} + +void di_write_lock2_child(struct dentry *d1, struct dentry *d2, int isdir) +{ + AuDebugOn(d1 == d2 + || d1->d_inode == d2->d_inode + || d1->d_sb != d2->d_sb); + + if (isdir && au_test_subdir(d1, d2)) { + di_write_lock_child(d1); + di_write_lock_child2(d2); + } else { + /* there should be no races */ + di_write_lock_child(d2); + di_write_lock_child2(d1); + } +} + +void di_write_lock2_parent(struct dentry *d1, struct dentry *d2, int isdir) +{ + AuDebugOn(d1 == d2 + || d1->d_inode == d2->d_inode + || d1->d_sb != d2->d_sb); + + if (isdir && au_test_subdir(d1, d2)) { + di_write_lock_parent(d1); + di_write_lock_parent2(d2); + } else { + /* there should be no races */ + di_write_lock_parent(d2); + di_write_lock_parent2(d1); + } +} + +void di_write_unlock2(struct dentry *d1, struct dentry *d2) +{ + di_write_unlock(d1); + if (d1->d_inode == d2->d_inode) + au_rw_write_unlock(&au_di(d2)->di_rwsem); + else + di_write_unlock(d2); +} + +/* ---------------------------------------------------------------------- */ + +struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex) +{ + struct dentry *d; + + DiMustAnyLock(dentry); + + if (au_dbstart(dentry) < 0 || bindex < au_dbstart(dentry)) + return NULL; + AuDebugOn(bindex < 0); + d = au_di(dentry)->di_hdentry[0 + bindex].hd_dentry; + AuDebugOn(d && (atomic_read(&d->d_count) <= 0)); + return d; +} + +aufs_bindex_t au_dbtail(struct dentry *dentry) +{ + aufs_bindex_t bend, bwh; + + bend = au_dbend(dentry); + if (0 <= bend) { + bwh = au_dbwh(dentry); + if (!bwh) + return bwh; + if (0 < bwh && bwh < bend) + return bwh - 1; + } + return bend; +} + +aufs_bindex_t au_dbtaildir(struct dentry *dentry) +{ + aufs_bindex_t bend, bopq; + + bend = au_dbtail(dentry); + if (0 <= bend) { + bopq = au_dbdiropq(dentry); + if (0 <= bopq && bopq < bend) + bend = bopq; + } + return bend; +} + +/* ---------------------------------------------------------------------- */ + +void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_dentry) +{ + struct au_hdentry *hd = au_di(dentry)->di_hdentry + bindex; + + DiMustWriteLock(dentry); + + if (hd->hd_dentry) + au_hdput(hd); + hd->hd_dentry = h_dentry; +} + +void au_update_digen(struct dentry *dentry) +{ + atomic_set(&au_di(dentry)->di_generation, au_sigen(dentry->d_sb)); + /* smp_mb(); */ /* atomic_set */ +} + +void au_update_dbrange(struct dentry *dentry, int do_put_zero) +{ + struct au_dinfo *dinfo; + struct dentry *h_d; + + DiMustWriteLock(dentry); + + dinfo = au_di(dentry); + if (!dinfo || dinfo->di_bstart < 0) + return; + + if (do_put_zero) { + aufs_bindex_t bindex, bend; + + bend = dinfo->di_bend; + for (bindex = dinfo->di_bstart; bindex <= bend; bindex++) { + h_d = dinfo->di_hdentry[0 + bindex].hd_dentry; + if (h_d && !h_d->d_inode) + au_set_h_dptr(dentry, bindex, NULL); + } + } + + dinfo->di_bstart = -1; + while (++dinfo->di_bstart <= dinfo->di_bend) + if (dinfo->di_hdentry[0 + dinfo->di_bstart].hd_dentry) + break; + if (dinfo->di_bstart > dinfo->di_bend) { + dinfo->di_bstart = -1; + dinfo->di_bend = -1; + return; + } + + dinfo->di_bend++; + while (0 <= --dinfo->di_bend) + if (dinfo->di_hdentry[0 + dinfo->di_bend].hd_dentry) + break; + AuDebugOn(dinfo->di_bstart > dinfo->di_bend || dinfo->di_bend < 0); +} + +void au_update_dbstart(struct dentry *dentry) +{ + aufs_bindex_t bindex, bend; + struct dentry *h_dentry; + + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + if (h_dentry->d_inode) { + au_set_dbstart(dentry, bindex); + return; + } + au_set_h_dptr(dentry, bindex, NULL); + } +} + +void au_update_dbend(struct dentry *dentry) +{ + aufs_bindex_t bindex, bstart; + struct dentry *h_dentry; + + bstart = au_dbstart(dentry); + for (bindex = au_dbend(dentry); bindex <= bstart; bindex--) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + if (h_dentry->d_inode) { + au_set_dbend(dentry, bindex); + return; + } + au_set_h_dptr(dentry, bindex, NULL); + } +} + +int au_find_dbindex(struct dentry *dentry, struct dentry *h_dentry) +{ + aufs_bindex_t bindex, bend; + + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) + if (au_h_dptr(dentry, bindex) == h_dentry) + return bindex; + return -1; +} --- linux-2.6.32.orig/ubuntu/aufs/whout.c +++ linux-2.6.32/ubuntu/aufs/whout.c @@ -0,0 +1,1055 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * whiteout for logical deletion and opaque directory + */ + +#include +#include "aufs.h" + +#define WH_MASK S_IRUGO + +/* + * If a directory contains this file, then it is opaque. We start with the + * .wh. flag so that it is blocked by lookup. + */ +static struct qstr diropq_name = { + .name = AUFS_WH_DIROPQ, + .len = sizeof(AUFS_WH_DIROPQ) - 1 +}; + +/* + * generate whiteout name, which is NOT terminated by NULL. + * @name: original d_name.name + * @len: original d_name.len + * @wh: whiteout qstr + * returns zero when succeeds, otherwise error. + * succeeded value as wh->name should be freed by kfree(). + */ +int au_wh_name_alloc(struct qstr *wh, const struct qstr *name) +{ + char *p; + + if (unlikely(name->len > PATH_MAX - AUFS_WH_PFX_LEN)) + return -ENAMETOOLONG; + + wh->len = name->len + AUFS_WH_PFX_LEN; + p = kmalloc(wh->len, GFP_NOFS); + wh->name = p; + if (p) { + memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); + memcpy(p + AUFS_WH_PFX_LEN, name->name, name->len); + /* smp_mb(); */ + return 0; + } + return -ENOMEM; +} + +/* ---------------------------------------------------------------------- */ + +/* + * test if the @wh_name exists under @h_parent. + * @try_sio specifies the necessary of super-io. + */ +int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, + struct au_branch *br, int try_sio) +{ + int err; + struct dentry *wh_dentry; + struct inode *h_dir; + + h_dir = h_parent->d_inode; + if (!try_sio) + wh_dentry = au_lkup_one(wh_name, h_parent, br, /*nd*/NULL); + else + wh_dentry = au_sio_lkup_one(wh_name, h_parent, br); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out; + + err = 0; + if (!wh_dentry->d_inode) + goto out_wh; /* success */ + + err = 1; + if (S_ISREG(wh_dentry->d_inode->i_mode)) + goto out_wh; /* success */ + + err = -EIO; + AuIOErr("%.*s Invalid whiteout entry type 0%o.\n", + AuDLNPair(wh_dentry), wh_dentry->d_inode->i_mode); + + out_wh: + dput(wh_dentry); + out: + return err; +} + +/* + * test if the @h_dentry sets opaque or not. + */ +int au_diropq_test(struct dentry *h_dentry, struct au_branch *br) +{ + int err; + struct inode *h_dir; + + h_dir = h_dentry->d_inode; + err = au_wh_test(h_dentry, &diropq_name, br, + au_test_h_perm_sio(h_dir, MAY_EXEC)); + return err; +} + +/* + * returns a negative dentry whose name is unique and temporary. + */ +struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br, + struct qstr *prefix) +{ + struct dentry *dentry; + int i; + char defname[NAME_MAX - AUFS_MAX_NAMELEN + DNAME_INLINE_LEN_MIN + 1], + *name, *p; + static unsigned short cnt; + struct qstr qs; + + BUILD_BUG_ON(sizeof(cnt) * 2 > AUFS_WH_TMP_LEN); + + name = defname; + qs.len = sizeof(defname) - DNAME_INLINE_LEN_MIN + prefix->len - 1; + if (unlikely(prefix->len > DNAME_INLINE_LEN_MIN)) { + dentry = ERR_PTR(-ENAMETOOLONG); + if (unlikely(qs.len > NAME_MAX)) + goto out; + dentry = ERR_PTR(-ENOMEM); + name = kmalloc(qs.len + 1, GFP_NOFS); + if (unlikely(!name)) + goto out; + } + + /* doubly whiteout-ed */ + memcpy(name, AUFS_WH_PFX AUFS_WH_PFX, AUFS_WH_PFX_LEN * 2); + p = name + AUFS_WH_PFX_LEN * 2; + memcpy(p, prefix->name, prefix->len); + p += prefix->len; + *p++ = '.'; + AuDebugOn(name + qs.len + 1 - p <= AUFS_WH_TMP_LEN); + + qs.name = name; + for (i = 0; i < 3; i++) { + sprintf(p, "%.*d", AUFS_WH_TMP_LEN, cnt++); + dentry = au_sio_lkup_one(&qs, h_parent, br); + if (IS_ERR(dentry) || !dentry->d_inode) + goto out_name; + dput(dentry); + } + /* pr_warning("could not get random name\n"); */ + dentry = ERR_PTR(-EEXIST); + AuDbg("%.*s\n", AuLNPair(&qs)); + BUG(); + + out_name: + if (name != defname) + kfree(name); + out: + AuTraceErrPtr(dentry); + return dentry; +} + +/* + * rename the @h_dentry on @br to the whiteouted temporary name. + */ +int au_whtmp_ren(struct dentry *h_dentry, struct au_branch *br) +{ + int err; + struct path h_path = { + .mnt = br->br_mnt + }; + struct inode *h_dir; + struct dentry *h_parent; + + h_parent = h_dentry->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + + h_path.dentry = au_whtmp_lkup(h_parent, br, &h_dentry->d_name); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) + goto out; + + /* under the same dir, no need to lock_rename() */ + err = vfsub_rename(h_dir, h_dentry, h_dir, &h_path); + AuTraceErr(err); + dput(h_path.dentry); + + out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ +/* + * functions for removing a whiteout + */ + +static int do_unlink_wh(struct inode *h_dir, struct path *h_path) +{ + int force; + + /* + * forces superio when the dir has a sticky bit. + * this may be a violation of unix fs semantics. + */ + force = (h_dir->i_mode & S_ISVTX) + && h_path->dentry->d_inode->i_uid != current_fsuid(); + return vfsub_unlink(h_dir, h_path, force); +} + +int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, + struct dentry *dentry) +{ + int err; + + err = do_unlink_wh(h_dir, h_path); + if (!err && dentry) + au_set_dbwh(dentry, -1); + + return err; +} + +static int unlink_wh_name(struct dentry *h_parent, struct qstr *wh, + struct au_branch *br) +{ + int err; + struct path h_path = { + .mnt = br->br_mnt + }; + + err = 0; + h_path.dentry = au_lkup_one(wh, h_parent, br, /*nd*/NULL); + if (IS_ERR(h_path.dentry)) + err = PTR_ERR(h_path.dentry); + else { + if (h_path.dentry->d_inode + && S_ISREG(h_path.dentry->d_inode->i_mode)) + err = do_unlink_wh(h_parent->d_inode, &h_path); + dput(h_path.dentry); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ +/* + * initialize/clean whiteout for a branch + */ + +static void au_wh_clean(struct inode *h_dir, struct path *whpath, + const int isdir) +{ + int err; + + if (!whpath->dentry->d_inode) + return; + + err = mnt_want_write(whpath->mnt); + if (!err) { + if (isdir) + err = vfsub_rmdir(h_dir, whpath); + else + err = vfsub_unlink(h_dir, whpath, /*force*/0); + mnt_drop_write(whpath->mnt); + } + if (unlikely(err)) + pr_warning("failed removing %.*s (%d), ignored.\n", + AuDLNPair(whpath->dentry), err); +} + +static int test_linkable(struct dentry *h_root) +{ + struct inode *h_dir = h_root->d_inode; + + if (h_dir->i_op->link) + return 0; + + pr_err("%.*s (%s) doesn't support link(2), use noplink and rw+nolwh\n", + AuDLNPair(h_root), au_sbtype(h_root->d_sb)); + return -ENOSYS; +} + +/* todo: should this mkdir be done in /sbin/mount.aufs helper? */ +static int au_whdir(struct inode *h_dir, struct path *path) +{ + int err; + + err = -EEXIST; + if (!path->dentry->d_inode) { + int mode = S_IRWXU; + + if (au_test_nfs(path->dentry->d_sb)) + mode |= S_IXUGO; + err = mnt_want_write(path->mnt); + if (!err) { + err = vfsub_mkdir(h_dir, path, mode); + mnt_drop_write(path->mnt); + } + } else if (S_ISDIR(path->dentry->d_inode->i_mode)) + err = 0; + else + pr_err("unknown %.*s exists\n", AuDLNPair(path->dentry)); + + return err; +} + +struct au_wh_base { + const struct qstr *name; + struct dentry *dentry; +}; + +static void au_wh_init_ro(struct inode *h_dir, struct au_wh_base base[], + struct path *h_path) +{ + h_path->dentry = base[AuBrWh_BASE].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/0); + h_path->dentry = base[AuBrWh_PLINK].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/1); + h_path->dentry = base[AuBrWh_ORPH].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/1); +} + +/* + * returns tri-state, + * minus: error, caller should print the mesage + * zero: succuess + * plus: error, caller should NOT print the mesage + */ +static int au_wh_init_rw_nolink(struct dentry *h_root, struct au_wbr *wbr, + int do_plink, struct au_wh_base base[], + struct path *h_path) +{ + int err; + struct inode *h_dir; + + h_dir = h_root->d_inode; + h_path->dentry = base[AuBrWh_BASE].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/0); + h_path->dentry = base[AuBrWh_PLINK].dentry; + if (do_plink) { + err = test_linkable(h_root); + if (unlikely(err)) { + err = 1; + goto out; + } + + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_plink = dget(base[AuBrWh_PLINK].dentry); + } else + au_wh_clean(h_dir, h_path, /*isdir*/1); + h_path->dentry = base[AuBrWh_ORPH].dentry; + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_orph = dget(base[AuBrWh_ORPH].dentry); + + out: + return err; +} + +/* + * for the moment, aufs supports the branch filesystem which does not support + * link(2). testing on FAT which does not support i_op->setattr() fully either, + * copyup failed. finally, such filesystem will not be used as the writable + * branch. + * + * returns tri-state, see above. + */ +static int au_wh_init_rw(struct dentry *h_root, struct au_wbr *wbr, + int do_plink, struct au_wh_base base[], + struct path *h_path) +{ + int err; + struct inode *h_dir; + + WbrWhMustWriteLock(wbr); + + err = test_linkable(h_root); + if (unlikely(err)) { + err = 1; + goto out; + } + + /* + * todo: should this create be done in /sbin/mount.aufs helper? + */ + err = -EEXIST; + h_dir = h_root->d_inode; + if (!base[AuBrWh_BASE].dentry->d_inode) { + err = mnt_want_write(h_path->mnt); + if (!err) { + h_path->dentry = base[AuBrWh_BASE].dentry; + err = vfsub_create(h_dir, h_path, WH_MASK); + mnt_drop_write(h_path->mnt); + } + } else if (S_ISREG(base[AuBrWh_BASE].dentry->d_inode->i_mode)) + err = 0; + else + pr_err("unknown %.*s/%.*s exists\n", + AuDLNPair(h_root), AuDLNPair(base[AuBrWh_BASE].dentry)); + if (unlikely(err)) + goto out; + + h_path->dentry = base[AuBrWh_PLINK].dentry; + if (do_plink) { + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_plink = dget(base[AuBrWh_PLINK].dentry); + } else + au_wh_clean(h_dir, h_path, /*isdir*/1); + wbr->wbr_whbase = dget(base[AuBrWh_BASE].dentry); + + h_path->dentry = base[AuBrWh_ORPH].dentry; + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_orph = dget(base[AuBrWh_ORPH].dentry); + + out: + return err; +} + +/* + * initialize the whiteout base file/dir for @br. + */ +int au_wh_init(struct dentry *h_root, struct au_branch *br, + struct super_block *sb) +{ + int err, i; + const unsigned char do_plink + = !!au_opt_test(au_mntflags(sb), PLINK); + struct path path = { + .mnt = br->br_mnt + }; + struct inode *h_dir; + struct au_wbr *wbr = br->br_wbr; + static const struct qstr base_name[] = { + [AuBrWh_BASE] = { + .name = AUFS_BASE_NAME, + .len = sizeof(AUFS_BASE_NAME) - 1 + }, + [AuBrWh_PLINK] = { + .name = AUFS_PLINKDIR_NAME, + .len = sizeof(AUFS_PLINKDIR_NAME) - 1 + }, + [AuBrWh_ORPH] = { + .name = AUFS_ORPHDIR_NAME, + .len = sizeof(AUFS_ORPHDIR_NAME) - 1 + } + }; + struct au_wh_base base[] = { + [AuBrWh_BASE] = { + .name = base_name + AuBrWh_BASE, + .dentry = NULL + }, + [AuBrWh_PLINK] = { + .name = base_name + AuBrWh_PLINK, + .dentry = NULL + }, + [AuBrWh_ORPH] = { + .name = base_name + AuBrWh_ORPH, + .dentry = NULL + } + }; + + if (wbr) + WbrWhMustWriteLock(wbr); + + h_dir = h_root->d_inode; + for (i = 0; i < AuBrWh_Last; i++) { + /* doubly whiteouted */ + struct dentry *d; + + d = au_wh_lkup(h_root, (void *)base[i].name, br); + err = PTR_ERR(d); + if (IS_ERR(d)) + goto out; + + base[i].dentry = d; + AuDebugOn(wbr + && wbr->wbr_wh[i] + && wbr->wbr_wh[i] != base[i].dentry); + } + + if (wbr) + for (i = 0; i < AuBrWh_Last; i++) { + dput(wbr->wbr_wh[i]); + wbr->wbr_wh[i] = NULL; + } + + err = 0; + + switch (br->br_perm) { + case AuBrPerm_RO: + case AuBrPerm_ROWH: + case AuBrPerm_RR: + case AuBrPerm_RRWH: + au_wh_init_ro(h_dir, base, &path); + break; + + case AuBrPerm_RWNoLinkWH: + err = au_wh_init_rw_nolink(h_root, wbr, do_plink, base, &path); + if (err > 0) + goto out; + else if (err) + goto out_err; + break; + + case AuBrPerm_RW: + err = au_wh_init_rw(h_root, wbr, do_plink, base, &path); + if (err > 0) + goto out; + else if (err) + goto out_err; + break; + + default: + BUG(); + } + goto out; /* success */ + + out_err: + pr_err("an error(%d) on the writable branch %.*s(%s)\n", + err, AuDLNPair(h_root), au_sbtype(h_root->d_sb)); + out: + for (i = 0; i < AuBrWh_Last; i++) + dput(base[i].dentry); + return err; +} + +/* ---------------------------------------------------------------------- */ +/* + * whiteouts are all hard-linked usually. + * when its link count reaches a ceiling, we create a new whiteout base + * asynchronously. + */ + +struct reinit_br_wh { + struct super_block *sb; + struct au_branch *br; +}; + +static void reinit_br_wh(void *arg) +{ + int err; + aufs_bindex_t bindex; + struct path h_path; + struct reinit_br_wh *a = arg; + struct au_wbr *wbr; + struct inode *dir; + struct dentry *h_root; + struct au_hinode *hdir; + + err = 0; + wbr = a->br->br_wbr; + /* big aufs lock */ + si_noflush_write_lock(a->sb); + if (!au_br_writable(a->br->br_perm)) + goto out; + bindex = au_br_index(a->sb, a->br->br_id); + if (unlikely(bindex < 0)) + goto out; + + di_read_lock_parent(a->sb->s_root, AuLock_IR); + dir = a->sb->s_root->d_inode; + hdir = au_hi(dir, bindex); + h_root = au_h_dptr(a->sb->s_root, bindex); + + au_hin_imtx_lock_nested(hdir, AuLsc_I_PARENT); + wbr_wh_write_lock(wbr); + err = au_h_verify(wbr->wbr_whbase, au_opt_udba(a->sb), hdir->hi_inode, + h_root, a->br); + if (!err) { + err = mnt_want_write(a->br->br_mnt); + if (!err) { + h_path.dentry = wbr->wbr_whbase; + h_path.mnt = a->br->br_mnt; + err = vfsub_unlink(hdir->hi_inode, &h_path, /*force*/0); + mnt_drop_write(a->br->br_mnt); + } + } else { + pr_warning("%.*s is moved, ignored\n", + AuDLNPair(wbr->wbr_whbase)); + err = 0; + } + dput(wbr->wbr_whbase); + wbr->wbr_whbase = NULL; + if (!err) + err = au_wh_init(h_root, a->br, a->sb); + wbr_wh_write_unlock(wbr); + au_hin_imtx_unlock(hdir); + di_read_unlock(a->sb->s_root, AuLock_IR); + + out: + if (wbr) + atomic_dec(&wbr->wbr_wh_running); + atomic_dec(&a->br->br_count); + au_nwt_done(&au_sbi(a->sb)->si_nowait); + si_write_unlock(a->sb); + kfree(arg); + if (unlikely(err)) + AuIOErr("err %d\n", err); +} + +static void kick_reinit_br_wh(struct super_block *sb, struct au_branch *br) +{ + int do_dec, wkq_err; + struct reinit_br_wh *arg; + + do_dec = 1; + if (atomic_inc_return(&br->br_wbr->wbr_wh_running) != 1) + goto out; + + /* ignore ENOMEM */ + arg = kmalloc(sizeof(*arg), GFP_NOFS); + if (arg) { + /* + * dec(wh_running), kfree(arg) and dec(br_count) + * in reinit function + */ + arg->sb = sb; + arg->br = br; + atomic_inc(&br->br_count); + wkq_err = au_wkq_nowait(reinit_br_wh, arg, sb); + if (unlikely(wkq_err)) { + atomic_dec(&br->br_wbr->wbr_wh_running); + atomic_dec(&br->br_count); + kfree(arg); + } + do_dec = 0; + } + + out: + if (do_dec) + atomic_dec(&br->br_wbr->wbr_wh_running); +} + +/* ---------------------------------------------------------------------- */ + +/* + * create the whiteout @wh. + */ +static int link_or_create_wh(struct super_block *sb, aufs_bindex_t bindex, + struct dentry *wh) +{ + int err; + struct path h_path = { + .dentry = wh + }; + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *h_parent; + struct inode *h_dir; + + h_parent = wh->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + + br = au_sbr(sb, bindex); + h_path.mnt = br->br_mnt; + wbr = br->br_wbr; + wbr_wh_read_lock(wbr); + if (wbr->wbr_whbase) { + err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path); + if (!err || err != -EMLINK) + goto out; + + /* link count full. re-initialize br_whbase. */ + kick_reinit_br_wh(sb, br); + } + + /* return this error in this context */ + err = vfsub_create(h_dir, &h_path, WH_MASK); + + out: + wbr_wh_read_unlock(wbr); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * create or remove the diropq. + */ +static struct dentry *do_diropq(struct dentry *dentry, aufs_bindex_t bindex, + unsigned int flags) +{ + struct dentry *opq_dentry, *h_dentry; + struct super_block *sb; + struct au_branch *br; + int err; + + sb = dentry->d_sb; + br = au_sbr(sb, bindex); + h_dentry = au_h_dptr(dentry, bindex); + opq_dentry = au_lkup_one(&diropq_name, h_dentry, br, /*nd*/NULL); + if (IS_ERR(opq_dentry)) + goto out; + + if (au_ftest_diropq(flags, CREATE)) { + err = link_or_create_wh(sb, bindex, opq_dentry); + if (!err) { + au_set_dbdiropq(dentry, bindex); + goto out; /* success */ + } + } else { + struct path tmp = { + .dentry = opq_dentry, + .mnt = br->br_mnt + }; + err = do_unlink_wh(au_h_iptr(dentry->d_inode, bindex), &tmp); + if (!err) + au_set_dbdiropq(dentry, -1); + } + dput(opq_dentry); + opq_dentry = ERR_PTR(err); + + out: + return opq_dentry; +} + +struct do_diropq_args { + struct dentry **errp; + struct dentry *dentry; + aufs_bindex_t bindex; + unsigned int flags; +}; + +static void call_do_diropq(void *args) +{ + struct do_diropq_args *a = args; + *a->errp = do_diropq(a->dentry, a->bindex, a->flags); +} + +struct dentry *au_diropq_sio(struct dentry *dentry, aufs_bindex_t bindex, + unsigned int flags) +{ + struct dentry *diropq, *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (!au_test_h_perm_sio(h_dentry->d_inode, MAY_EXEC | MAY_WRITE)) + diropq = do_diropq(dentry, bindex, flags); + else { + int wkq_err; + struct do_diropq_args args = { + .errp = &diropq, + .dentry = dentry, + .bindex = bindex, + .flags = flags + }; + + wkq_err = au_wkq_wait(call_do_diropq, &args); + if (unlikely(wkq_err)) + diropq = ERR_PTR(wkq_err); + } + + return diropq; +} + +/* ---------------------------------------------------------------------- */ + +/* + * lookup whiteout dentry. + * @h_parent: lower parent dentry which must exist and be locked + * @base_name: name of dentry which will be whiteouted + * returns dentry for whiteout. + */ +struct dentry *au_wh_lkup(struct dentry *h_parent, struct qstr *base_name, + struct au_branch *br) +{ + int err; + struct qstr wh_name; + struct dentry *wh_dentry; + + err = au_wh_name_alloc(&wh_name, base_name); + wh_dentry = ERR_PTR(err); + if (!err) { + wh_dentry = au_lkup_one(&wh_name, h_parent, br, /*nd*/NULL); + kfree(wh_name.name); + } + return wh_dentry; +} + +/* + * link/create a whiteout for @dentry on @bindex. + */ +struct dentry *au_wh_create(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent) +{ + struct dentry *wh_dentry; + struct super_block *sb; + int err; + + sb = dentry->d_sb; + wh_dentry = au_wh_lkup(h_parent, &dentry->d_name, au_sbr(sb, bindex)); + if (!IS_ERR(wh_dentry) && !wh_dentry->d_inode) { + err = link_or_create_wh(sb, bindex, wh_dentry); + if (!err) + au_set_dbwh(dentry, bindex); + else { + dput(wh_dentry); + wh_dentry = ERR_PTR(err); + } + } + + return wh_dentry; +} + +/* ---------------------------------------------------------------------- */ + +/* Delete all whiteouts in this directory on branch bindex. */ +static int del_wh_children(struct dentry *h_dentry, struct au_nhash *whlist, + aufs_bindex_t bindex, struct au_branch *br) +{ + int err; + unsigned long ul, n; + struct qstr wh_name; + char *p; + struct hlist_head *head; + struct au_vdir_wh *tpos; + struct hlist_node *pos; + struct au_vdir_destr *str; + + err = -ENOMEM; + p = __getname(); + wh_name.name = p; + if (unlikely(!wh_name.name)) + goto out; + + err = 0; + memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); + p += AUFS_WH_PFX_LEN; + n = whlist->nh_num; + head = whlist->nh_head; + for (ul = 0; !err && ul < n; ul++, head++) { + hlist_for_each_entry(tpos, pos, head, wh_hash) { + if (tpos->wh_bindex != bindex) + continue; + + str = &tpos->wh_str; + if (str->len + AUFS_WH_PFX_LEN <= PATH_MAX) { + memcpy(p, str->name, str->len); + wh_name.len = AUFS_WH_PFX_LEN + str->len; + err = unlink_wh_name(h_dentry, &wh_name, br); + if (!err) + continue; + break; + } + AuIOErr("whiteout name too long %.*s\n", + str->len, str->name); + err = -EIO; + break; + } + } + __putname(wh_name.name); + + out: + return err; +} + +struct del_wh_children_args { + int *errp; + struct dentry *h_dentry; + struct au_nhash *whlist; + aufs_bindex_t bindex; + struct au_branch *br; +}; + +static void call_del_wh_children(void *args) +{ + struct del_wh_children_args *a = args; + *a->errp = del_wh_children(a->h_dentry, a->whlist, a->bindex, a->br); +} + +/* ---------------------------------------------------------------------- */ + +struct au_whtmp_rmdir *au_whtmp_rmdir_alloc(struct super_block *sb, gfp_t gfp) +{ + struct au_whtmp_rmdir *whtmp; + int err; + unsigned int rdhash; + + SiMustAnyLock(sb); + + whtmp = kmalloc(sizeof(*whtmp), gfp); + if (unlikely(!whtmp)) { + whtmp = ERR_PTR(-ENOMEM); + goto out; + } + + whtmp->dir = NULL; + whtmp->wh_dentry = NULL; + /* no estimation for dir size */ + rdhash = au_sbi(sb)->si_rdhash; + if (!rdhash) + rdhash = AUFS_RDHASH_DEF; + err = au_nhash_alloc(&whtmp->whlist, rdhash, gfp); + if (unlikely(err)) { + kfree(whtmp); + whtmp = ERR_PTR(err); + } + + out: + return whtmp; +} + +void au_whtmp_rmdir_free(struct au_whtmp_rmdir *whtmp) +{ + dput(whtmp->wh_dentry); + iput(whtmp->dir); + au_nhash_wh_free(&whtmp->whlist); + kfree(whtmp); +} + +/* + * rmdir the whiteouted temporary named dir @h_dentry. + * @whlist: whiteouted children. + */ +int au_whtmp_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_nhash *whlist) +{ + int err; + struct path h_tmp; + struct inode *wh_inode, *h_dir; + struct au_branch *br; + + h_dir = wh_dentry->d_parent->d_inode; /* dir inode is locked */ + IMustLock(h_dir); + + br = au_sbr(dir->i_sb, bindex); + wh_inode = wh_dentry->d_inode; + mutex_lock_nested(&wh_inode->i_mutex, AuLsc_I_CHILD); + + /* + * someone else might change some whiteouts while we were sleeping. + * it means this whlist may have an obsoleted entry. + */ + if (!au_test_h_perm_sio(wh_inode, MAY_EXEC | MAY_WRITE)) + err = del_wh_children(wh_dentry, whlist, bindex, br); + else { + int wkq_err; + struct del_wh_children_args args = { + .errp = &err, + .h_dentry = wh_dentry, + .whlist = whlist, + .bindex = bindex, + .br = br + }; + + wkq_err = au_wkq_wait(call_del_wh_children, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + mutex_unlock(&wh_inode->i_mutex); + + if (!err) { + h_tmp.dentry = wh_dentry; + h_tmp.mnt = br->br_mnt; + err = vfsub_rmdir(h_dir, &h_tmp); + /* d_drop(h_dentry); */ + } + + if (!err) { + if (au_ibstart(dir) == bindex) { + au_cpup_attr_timesizes(dir); + drop_nlink(dir); + } + return 0; /* success */ + } + + pr_warning("failed removing %.*s(%d), ignored\n", + AuDLNPair(wh_dentry), err); + return err; +} + +static void call_rmdir_whtmp(void *args) +{ + int err; + struct au_whtmp_rmdir *a = args; + struct super_block *sb; + struct dentry *h_parent; + struct inode *h_dir; + struct au_branch *br; + struct au_hinode *hdir; + + /* rmdir by nfsd may cause deadlock with this i_mutex */ + /* mutex_lock(&a->dir->i_mutex); */ + sb = a->dir->i_sb; + si_noflush_read_lock(sb); + err = au_test_ro(sb, a->bindex, NULL); + if (unlikely(err)) + goto out; + + err = -EIO; + br = au_sbr(sb, a->bindex); + ii_write_lock_parent(a->dir); + h_parent = dget_parent(a->wh_dentry); + h_dir = h_parent->d_inode; + hdir = au_hi(a->dir, a->bindex); + au_hin_imtx_lock_nested(hdir, AuLsc_I_PARENT); + err = au_h_verify(a->wh_dentry, au_opt_udba(sb), h_dir, h_parent, br); + if (!err) { + err = mnt_want_write(br->br_mnt); + if (!err) { + err = au_whtmp_rmdir(a->dir, a->bindex, a->wh_dentry, + &a->whlist); + mnt_drop_write(br->br_mnt); + } + } + au_hin_imtx_unlock(hdir); + dput(h_parent); + ii_write_unlock(a->dir); + + out: + /* mutex_unlock(&a->dir->i_mutex); */ + au_nwt_done(&au_sbi(sb)->si_nowait); + si_read_unlock(sb); + au_whtmp_rmdir_free(a); + if (unlikely(err)) + AuIOErr("err %d\n", err); +} + +void au_whtmp_kick_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_whtmp_rmdir *args) +{ + int wkq_err; + + IMustLock(dir); + + /* all post-process will be done in do_rmdir_whtmp(). */ + args->dir = au_igrab(dir); + args->bindex = bindex; + args->wh_dentry = dget(wh_dentry); + wkq_err = au_wkq_nowait(call_rmdir_whtmp, args, dir->i_sb); + if (unlikely(wkq_err)) { + pr_warning("rmdir error %.*s (%d), ignored\n", + AuDLNPair(wh_dentry), wkq_err); + au_whtmp_rmdir_free(args); + } +} --- linux-2.6.32.orig/ubuntu/aufs/i_op_del.c +++ linux-2.6.32/ubuntu/aufs/i_op_del.c @@ -0,0 +1,470 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode operations (del entry) + */ + +#include "aufs.h" + +/* + * decide if a new whiteout for @dentry is necessary or not. + * when it is necessary, prepare the parent dir for the upper branch whose + * branch index is @bcpup for creation. the actual creation of the whiteout will + * be done by caller. + * return value: + * 0: wh is unnecessary + * plus: wh is necessary + * minus: error + */ +int au_wr_dir_need_wh(struct dentry *dentry, int isdir, aufs_bindex_t *bcpup) +{ + int need_wh, err; + aufs_bindex_t bstart; + struct super_block *sb; + + sb = dentry->d_sb; + bstart = au_dbstart(dentry); + if (*bcpup < 0) { + *bcpup = bstart; + if (au_test_ro(sb, bstart, dentry->d_inode)) { + err = AuWbrCopyup(au_sbi(sb), dentry); + *bcpup = err; + if (unlikely(err < 0)) + goto out; + } + } else + AuDebugOn(bstart < *bcpup + || au_test_ro(sb, *bcpup, dentry->d_inode)); + AuDbg("bcpup %d, bstart %d\n", *bcpup, bstart); + + if (*bcpup != bstart) { + err = au_cpup_dirs(dentry, *bcpup); + if (unlikely(err)) + goto out; + need_wh = 1; + } else { + aufs_bindex_t old_bend, new_bend, bdiropq = -1; + + old_bend = au_dbend(dentry); + if (isdir) { + bdiropq = au_dbdiropq(dentry); + au_set_dbdiropq(dentry, -1); + } + need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0, + /*nd*/NULL); + err = need_wh; + if (isdir) + au_set_dbdiropq(dentry, bdiropq); + if (unlikely(err < 0)) + goto out; + new_bend = au_dbend(dentry); + if (!need_wh && old_bend != new_bend) { + au_set_h_dptr(dentry, new_bend, NULL); + au_set_dbend(dentry, old_bend); + } + } + AuDbg("need_wh %d\n", need_wh); + err = need_wh; + + out: + return err; +} + +/* + * simple tests for the del-entry operations. + * following the checks in vfs, plus the parent-child relationship. + */ +int au_may_del(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir) +{ + int err; + umode_t h_mode; + struct dentry *h_dentry, *h_latest; + struct inode *h_inode; + + h_dentry = au_h_dptr(dentry, bindex); + h_inode = h_dentry->d_inode; + if (dentry->d_inode) { + err = -ENOENT; + if (unlikely(!h_inode || !h_inode->i_nlink)) + goto out; + + h_mode = h_inode->i_mode; + if (!isdir) { + err = -EISDIR; + if (unlikely(S_ISDIR(h_mode))) + goto out; + } else if (unlikely(!S_ISDIR(h_mode))) { + err = -ENOTDIR; + goto out; + } + } else { + /* rename(2) case */ + err = -EIO; + if (unlikely(h_inode)) + goto out; + } + + err = -ENOENT; + /* expected parent dir is locked */ + if (unlikely(h_parent != h_dentry->d_parent)) + goto out; + err = 0; + + /* + * rmdir a dir may break the consistency on some filesystem. + * let's try heavy test. + */ + err = -EACCES; + if (unlikely(au_test_h_perm(h_parent->d_inode, MAY_EXEC | MAY_WRITE))) + goto out; + + h_latest = au_sio_lkup_one(&dentry->d_name, h_parent, + au_sbr(dentry->d_sb, bindex)); + err = -EIO; + if (IS_ERR(h_latest)) + goto out; + if (h_latest == h_dentry) + err = 0; + dput(h_latest); + + out: + return err; +} + +/* + * decide the branch where we operate for @dentry. the branch index will be set + * @rbcpup. after diciding it, 'pin' it and store the timestamps of the parent + * dir for reverting. + * when a new whiteout is necessary, create it. + */ +static struct dentry* +lock_hdir_create_wh(struct dentry *dentry, int isdir, aufs_bindex_t *rbcpup, + struct au_dtime *dt, struct au_pin *pin) +{ + struct dentry *wh_dentry; + struct super_block *sb; + struct path h_path; + int err, need_wh; + unsigned int udba; + aufs_bindex_t bcpup; + + need_wh = au_wr_dir_need_wh(dentry, isdir, rbcpup); + wh_dentry = ERR_PTR(need_wh); + if (unlikely(need_wh < 0)) + goto out; + + sb = dentry->d_sb; + udba = au_opt_udba(sb); + bcpup = *rbcpup; + err = au_pin(pin, dentry, bcpup, udba, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out; + + h_path.dentry = au_pinned_h_parent(pin); + if (udba != AuOpt_UDBA_NONE + && au_dbstart(dentry) == bcpup) { + err = au_may_del(dentry, bcpup, h_path.dentry, isdir); + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_unpin; + } + + h_path.mnt = au_sbr_mnt(sb, bcpup); + au_dtime_store(dt, au_pinned_parent(pin), &h_path); + wh_dentry = NULL; + if (!need_wh) + goto out; /* success, no need to create whiteout */ + + wh_dentry = au_wh_create(dentry, bcpup, h_path.dentry); + if (!IS_ERR(wh_dentry)) + goto out; /* success */ + /* returns with the parent is locked and wh_dentry is dget-ed */ + + out_unpin: + au_unpin(pin); + out: + return wh_dentry; +} + +/* + * when removing a dir, rename it to a unique temporary whiteout-ed name first + * in order to be revertible and save time for removing many child whiteouts + * under the dir. + * returns 1 when there are too many child whiteout and caller should remove + * them asynchronously. returns 0 when the number of children is enough small to + * remove now or the branch fs is a remote fs. + * otherwise return an error. + */ +static int renwh_and_rmdir(struct dentry *dentry, aufs_bindex_t bindex, + struct au_nhash *whlist, struct inode *dir) +{ + int rmdir_later, err, dirwh; + struct dentry *h_dentry; + struct super_block *sb; + + sb = dentry->d_sb; + SiMustAnyLock(sb); + h_dentry = au_h_dptr(dentry, bindex); + err = au_whtmp_ren(h_dentry, au_sbr(sb, bindex)); + if (unlikely(err)) + goto out; + + /* stop monitoring */ + au_hin_free(au_hi(dentry->d_inode, bindex)); + + if (!au_test_fs_remote(h_dentry->d_sb)) { + dirwh = au_sbi(sb)->si_dirwh; + rmdir_later = (dirwh <= 1); + if (!rmdir_later) + rmdir_later = au_nhash_test_longer_wh(whlist, bindex, + dirwh); + if (rmdir_later) + return rmdir_later; + } + + err = au_whtmp_rmdir(dir, bindex, h_dentry, whlist); + if (unlikely(err)) { + AuIOErr("rmdir %.*s, b%d failed, %d. ignored\n", + AuDLNPair(h_dentry), bindex, err); + err = 0; + } + + out: + AuTraceErr(err); + return err; +} + +/* + * final procedure for deleting a entry. + * maintain dentry and iattr. + */ +static void epilog(struct inode *dir, struct dentry *dentry, + aufs_bindex_t bindex) +{ + struct inode *inode; + + inode = dentry->d_inode; + d_drop(dentry); + inode->i_ctime = dir->i_ctime; + + if (atomic_read(&dentry->d_count) == 1) { + au_set_h_dptr(dentry, au_dbstart(dentry), NULL); + au_update_dbstart(dentry); + } + if (au_ibstart(dir) == bindex) + au_cpup_attr_timesizes(dir); + dir->i_version++; +} + +/* + * when an error happened, remove the created whiteout and revert everything. + */ +static int do_revert(int err, struct inode *dir, aufs_bindex_t bwh, + struct dentry *wh_dentry, struct dentry *dentry, + struct au_dtime *dt) +{ + int rerr; + struct path h_path = { + .dentry = wh_dentry, + .mnt = au_sbr_mnt(dir->i_sb, bwh) + }; + + rerr = au_wh_unlink_dentry(au_h_iptr(dir, bwh), &h_path, dentry); + if (!rerr) { + au_set_dbwh(dentry, bwh); + au_dtime_revert(dt); + return 0; + } + + AuIOErr("%.*s reverting whiteout failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + return -EIO; +} + +/* ---------------------------------------------------------------------- */ + +int aufs_unlink(struct inode *dir, struct dentry *dentry) +{ + int err; + aufs_bindex_t bwh, bindex, bstart; + struct au_dtime dt; + struct au_pin pin; + struct path h_path; + struct inode *inode, *h_dir; + struct dentry *parent, *wh_dentry; + + IMustLock(dir); + inode = dentry->d_inode; + if (unlikely(!inode)) + return -ENOENT; /* possible? */ + IMustLock(inode); + + aufs_read_lock(dentry, AuLock_DW); + parent = dentry->d_parent; /* dir inode is locked */ + di_write_lock_parent(parent); + + bstart = au_dbstart(dentry); + bwh = au_dbwh(dentry); + bindex = -1; + wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/0, &bindex, &dt, &pin); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out; + + h_path.mnt = au_sbr_mnt(dentry->d_sb, bstart); + h_path.dentry = au_h_dptr(dentry, bstart); + dget(h_path.dentry); + if (bindex == bstart) { + h_dir = au_pinned_h_dir(&pin); + err = vfsub_unlink(h_dir, &h_path, /*force*/0); + } else { + /* dir inode is locked */ + h_dir = wh_dentry->d_parent->d_inode; + IMustLock(h_dir); + err = 0; + } + + if (!err) { + drop_nlink(inode); + epilog(dir, dentry, bindex); + + /* update target timestamps */ + if (bindex == bstart) { + vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ + inode->i_ctime = h_path.dentry->d_inode->i_ctime; + } else + /* todo: this timestamp may be reverted later */ + inode->i_ctime = h_dir->i_ctime; + goto out_unlock; /* success */ + } + + /* revert */ + if (wh_dentry) { + int rerr; + + rerr = do_revert(err, dir, bwh, wh_dentry, dentry, &dt); + if (rerr) + err = rerr; + } + + out_unlock: + au_unpin(&pin); + dput(wh_dentry); + dput(h_path.dentry); + out: + di_write_unlock(parent); + aufs_read_unlock(dentry, AuLock_DW); + return err; +} + +int aufs_rmdir(struct inode *dir, struct dentry *dentry) +{ + int err, rmdir_later; + aufs_bindex_t bwh, bindex, bstart; + struct au_dtime dt; + struct au_pin pin; + struct inode *inode; + struct dentry *parent, *wh_dentry, *h_dentry; + struct au_whtmp_rmdir *args; + + IMustLock(dir); + inode = dentry->d_inode; + err = -ENOENT; /* possible? */ + if (unlikely(!inode)) + goto out; + IMustLock(inode); + + aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH); + err = -ENOMEM; + args = au_whtmp_rmdir_alloc(dir->i_sb, GFP_NOFS); + if (unlikely(!args)) + goto out_unlock; + + parent = dentry->d_parent; /* dir inode is locked */ + di_write_lock_parent(parent); + err = au_test_empty(dentry, &args->whlist); + if (unlikely(err)) + goto out_args; + + bstart = au_dbstart(dentry); + bwh = au_dbwh(dentry); + bindex = -1; + wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/1, &bindex, &dt, &pin); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_args; + + h_dentry = au_h_dptr(dentry, bstart); + dget(h_dentry); + rmdir_later = 0; + if (bindex == bstart) { + err = renwh_and_rmdir(dentry, bstart, &args->whlist, dir); + if (err > 0) { + rmdir_later = err; + err = 0; + } + } else { + /* stop monitoring */ + au_hin_free(au_hi(inode, bstart)); + + /* dir inode is locked */ + IMustLock(wh_dentry->d_parent->d_inode); + err = 0; + } + + if (!err) { + clear_nlink(inode); + au_set_dbdiropq(dentry, -1); + epilog(dir, dentry, bindex); + + if (rmdir_later) { + au_whtmp_kick_rmdir(dir, bstart, h_dentry, args); + args = NULL; + } + + goto out_unpin; /* success */ + } + + /* revert */ + AuLabel(revert); + if (wh_dentry) { + int rerr; + + rerr = do_revert(err, dir, bwh, wh_dentry, dentry, &dt); + if (rerr) + err = rerr; + } + + out_unpin: + au_unpin(&pin); + dput(wh_dentry); + dput(h_dentry); + out_args: + di_write_unlock(parent); + if (args) + au_whtmp_rmdir_free(args); + out_unlock: + aufs_read_unlock(dentry, AuLock_DW); + out: + AuTraceErr(err); + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/sysrq.c +++ linux-2.6.32/ubuntu/aufs/sysrq.c @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * magic sysrq hanlder + */ + +#include +#include +#include +/* #include */ +#include "aufs.h" + +/* ---------------------------------------------------------------------- */ + +static void sysrq_sb(struct super_block *sb) +{ + char *plevel; + struct au_sbinfo *sbinfo; + struct file *file; + + plevel = au_plevel; + au_plevel = KERN_WARNING; + au_debug(1); + + sbinfo = au_sbi(sb); + /* since we define pr_fmt, call printk directly */ + printk(KERN_WARNING "si=%lx\n", sysaufs_si_id(sbinfo)); + printk(KERN_WARNING AUFS_NAME ": superblock\n"); + au_dpri_sb(sb); + printk(KERN_WARNING AUFS_NAME ": root dentry\n"); + au_dpri_dentry(sb->s_root); + printk(KERN_WARNING AUFS_NAME ": root inode\n"); + au_dpri_inode(sb->s_root->d_inode); +#if 0 + struct inode *i; + printk(KERN_WARNING AUFS_NAME ": isolated inode\n"); + list_for_each_entry(i, &sb->s_inodes, i_sb_list) + if (list_empty(&i->i_dentry)) + au_dpri_inode(i); +#endif + printk(KERN_WARNING AUFS_NAME ": files\n"); + list_for_each_entry(file, &sb->s_files, f_u.fu_list) + if (!special_file(file->f_dentry->d_inode->i_mode)) + au_dpri_file(file); + + au_plevel = plevel; + au_debug(0); +} + +/* ---------------------------------------------------------------------- */ + +/* module parameter */ +static char *aufs_sysrq_key = "a"; +module_param_named(sysrq, aufs_sysrq_key, charp, S_IRUGO); +MODULE_PARM_DESC(sysrq, "MagicSysRq key for " AUFS_NAME); + +static void au_sysrq(int key __maybe_unused, + struct tty_struct *tty __maybe_unused) +{ + struct kobject *kobj; + struct au_sbinfo *sbinfo; + + /* spin_lock(&sysaufs_ket->list_lock); */ + list_for_each_entry(kobj, &sysaufs_ket->list, entry) { + sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); + sysrq_sb(sbinfo->si_sb); + } + /* spin_unlock(&sysaufs_ket->list_lock); */ +} + +static struct sysrq_key_op au_sysrq_op = { + .handler = au_sysrq, + .help_msg = "Aufs", + .action_msg = "Aufs", + .enable_mask = SYSRQ_ENABLE_DUMP +}; + +/* ---------------------------------------------------------------------- */ + +int __init au_sysrq_init(void) +{ + int err; + char key; + + err = -1; + key = *aufs_sysrq_key; + if ('a' <= key && key <= 'z') + err = register_sysrq_key(key, &au_sysrq_op); + if (unlikely(err)) + pr_err("err %d, sysrq=%c\n", err, key); + return err; +} + +void au_sysrq_fin(void) +{ + int err; + err = unregister_sysrq_key(*aufs_sysrq_key, &au_sysrq_op); + if (unlikely(err)) + pr_err("err %d (ignored)\n", err); +} --- linux-2.6.32.orig/ubuntu/aufs/hinotify.c +++ linux-2.6.32/ubuntu/aufs/hinotify.c @@ -0,0 +1,755 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inotify for the lower directories + */ + +#include "aufs.h" + +static const __u32 AuHinMask = (IN_MOVE | IN_DELETE | IN_CREATE); +static struct inotify_handle *au_hin_handle; + +AuCacheFuncs(hinotify, HINOTIFY); + +int au_hin_alloc(struct au_hinode *hinode, struct inode *inode, + struct inode *h_inode) +{ + int err; + struct au_hinotify *hin; + s32 wd; + + err = -ENOMEM; + hin = au_cache_alloc_hinotify(); + if (hin) { + AuDebugOn(hinode->hi_notify); + hinode->hi_notify = hin; + hin->hin_aufs_inode = inode; + + inotify_init_watch(&hin->hin_watch); + wd = inotify_add_watch(au_hin_handle, &hin->hin_watch, h_inode, + AuHinMask); + if (wd >= 0) + return 0; /* success */ + + err = wd; + put_inotify_watch(&hin->hin_watch); + au_cache_free_hinotify(hin); + hinode->hi_notify = NULL; + } + + return err; +} + +void au_hin_free(struct au_hinode *hinode) +{ + int err; + struct au_hinotify *hin; + + hin = hinode->hi_notify; + if (hin) { + err = 0; + if (atomic_read(&hin->hin_watch.count)) + err = inotify_rm_watch(au_hin_handle, &hin->hin_watch); + if (unlikely(err)) + /* it means the watch is already removed */ + pr_warning("failed inotify_rm_watch() %d\n", err); + au_cache_free_hinotify(hin); + hinode->hi_notify = NULL; + } +} + +/* ---------------------------------------------------------------------- */ + +void au_hin_ctl(struct au_hinode *hinode, int do_set) +{ + struct inode *h_inode; + struct inotify_watch *watch; + + if (!hinode->hi_notify) + return; + + h_inode = hinode->hi_inode; + IMustLock(h_inode); + + /* todo: try inotify_find_update_watch()? */ + watch = &hinode->hi_notify->hin_watch; + mutex_lock(&h_inode->inotify_mutex); + /* mutex_lock(&watch->ih->mutex); */ + if (do_set) { + AuDebugOn(watch->mask & AuHinMask); + watch->mask |= AuHinMask; + } else { + AuDebugOn(!(watch->mask & AuHinMask)); + watch->mask &= ~AuHinMask; + } + /* mutex_unlock(&watch->ih->mutex); */ + mutex_unlock(&h_inode->inotify_mutex); +} + +void au_reset_hinotify(struct inode *inode, unsigned int flags) +{ + aufs_bindex_t bindex, bend; + struct inode *hi; + struct dentry *iwhdentry; + + bend = au_ibend(inode); + for (bindex = au_ibstart(inode); bindex <= bend; bindex++) { + hi = au_h_iptr(inode, bindex); + if (!hi) + continue; + + /* mutex_lock_nested(&hi->i_mutex, AuLsc_I_CHILD); */ + iwhdentry = au_hi_wh(inode, bindex); + if (iwhdentry) + dget(iwhdentry); + au_igrab(hi); + au_set_h_iptr(inode, bindex, NULL, 0); + au_set_h_iptr(inode, bindex, au_igrab(hi), + flags & ~AuHi_XINO); + iput(hi); + dput(iwhdentry); + /* mutex_unlock(&hi->i_mutex); */ + } +} + +/* ---------------------------------------------------------------------- */ + +static int hin_xino(struct inode *inode, struct inode *h_inode) +{ + int err; + aufs_bindex_t bindex, bend, bfound, bstart; + struct inode *h_i; + + err = 0; + if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { + pr_warning("branch root dir was changed\n"); + goto out; + } + + bfound = -1; + bend = au_ibend(inode); + bstart = au_ibstart(inode); +#if 0 /* reserved for future use */ + if (bindex == bend) { + /* keep this ino in rename case */ + goto out; + } +#endif + for (bindex = bstart; bindex <= bend; bindex++) { + if (au_h_iptr(inode, bindex) == h_inode) { + bfound = bindex; + break; + } + } + if (bfound < 0) + goto out; + + for (bindex = bstart; bindex <= bend; bindex++) { + h_i = au_h_iptr(inode, bindex); + if (!h_i) + continue; + + err = au_xino_write(inode->i_sb, bindex, h_i->i_ino, /*ino*/0); + /* ignore this error */ + /* bad action? */ + } + + /* children inode number will be broken */ + + out: + AuTraceErr(err); + return err; +} + +static int hin_gen_tree(struct dentry *dentry) +{ + int err, i, j, ndentry; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries; + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages(&dpages, dentry, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + for (i = 0; i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + ndentry = dpage->ndentry; + for (j = 0; j < ndentry; j++) { + struct dentry *d; + + d = dentries[j]; + if (IS_ROOT(d)) + continue; + + d_drop(d); + au_digen_dec(d); + if (d->d_inode) + /* todo: reset children xino? + cached children only? */ + au_iigen_dec(d->d_inode); + } + } + + out_dpages: + au_dpages_free(&dpages); + + /* discard children */ + dentry_unhash(dentry); + dput(dentry); + out: + return err; +} + +/* + * return 0 if processed. + */ +static int hin_gen_by_inode(char *name, unsigned int nlen, struct inode *inode, + const unsigned int isdir) +{ + int err; + struct dentry *d; + struct qstr *dname; + + err = 1; + if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { + pr_warning("branch root dir was changed\n"); + err = 0; + goto out; + } + + if (!isdir) { + AuDebugOn(!name); + au_iigen_dec(inode); + spin_lock(&dcache_lock); + list_for_each_entry(d, &inode->i_dentry, d_alias) { + dname = &d->d_name; + if (dname->len != nlen + && memcmp(dname->name, name, nlen)) + continue; + err = 0; + spin_lock(&d->d_lock); + __d_drop(d); + au_digen_dec(d); + spin_unlock(&d->d_lock); + break; + } + spin_unlock(&dcache_lock); + } else { + au_fset_si(au_sbi(inode->i_sb), FAILED_REFRESH_DIRS); + d = d_find_alias(inode); + if (!d) { + au_iigen_dec(inode); + goto out; + } + + dname = &d->d_name; + if (dname->len == nlen && !memcmp(dname->name, name, nlen)) + err = hin_gen_tree(d); + dput(d); + } + + out: + AuTraceErr(err); + return err; +} + +static int hin_gen_by_name(struct dentry *dentry, const unsigned int isdir) +{ + int err; + struct inode *inode; + + inode = dentry->d_inode; + if (IS_ROOT(dentry) + /* || (inode && inode->i_ino == AUFS_ROOT_INO) */ + ) { + pr_warning("branch root dir was changed\n"); + return 0; + } + + err = 0; + if (!isdir) { + d_drop(dentry); + au_digen_dec(dentry); + if (inode) + au_iigen_dec(inode); + } else { + au_fset_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIRS); + if (inode) + err = hin_gen_tree(dentry); + } + + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* hinotify job flags */ +#define AuHinJob_XINO0 1 +#define AuHinJob_GEN (1 << 1) +#define AuHinJob_DIRENT (1 << 2) +#define AuHinJob_ISDIR (1 << 3) +#define AuHinJob_TRYXINO0 (1 << 4) +#define AuHinJob_MNTPNT (1 << 5) +#define au_ftest_hinjob(flags, name) ((flags) & AuHinJob_##name) +#define au_fset_hinjob(flags, name) { (flags) |= AuHinJob_##name; } +#define au_fclr_hinjob(flags, name) { (flags) &= ~AuHinJob_##name; } + +struct hin_job_args { + unsigned int flags; + struct inode *inode, *h_inode, *dir, *h_dir; + struct dentry *dentry; + char *h_name; + int h_nlen; +}; + +static int hin_job(struct hin_job_args *a) +{ + const unsigned int isdir = au_ftest_hinjob(a->flags, ISDIR); + + /* reset xino */ + if (au_ftest_hinjob(a->flags, XINO0) && a->inode) + hin_xino(a->inode, a->h_inode); /* ignore this error */ + + if (au_ftest_hinjob(a->flags, TRYXINO0) + && a->inode + && a->h_inode) { + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + if (!a->h_inode->i_nlink) + hin_xino(a->inode, a->h_inode); /* ignore this error */ + mutex_unlock(&a->h_inode->i_mutex); + } + + /* make the generation obsolete */ + if (au_ftest_hinjob(a->flags, GEN)) { + int err = -1; + if (a->inode) + err = hin_gen_by_inode(a->h_name, a->h_nlen, a->inode, + isdir); + if (err && a->dentry) + hin_gen_by_name(a->dentry, isdir); + /* ignore this error */ + } + + /* make dir entries obsolete */ + if (au_ftest_hinjob(a->flags, DIRENT) && a->inode) { + struct au_vdir *vdir; + + vdir = au_ivdir(a->inode); + if (vdir) + vdir->vd_jiffy = 0; + /* IMustLock(a->inode); */ + /* a->inode->i_version++; */ + } + + /* can do nothing but warn */ + if (au_ftest_hinjob(a->flags, MNTPNT) + && a->dentry + && d_mountpoint(a->dentry)) + pr_warning("mount-point %.*s is removed or renamed\n", + AuDLNPair(a->dentry)); + + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static char *in_name(u32 mask) +{ +#ifdef CONFIG_AUFS_DEBUG +#define test_ret(flag) if (mask & flag) \ + return #flag; + test_ret(IN_ACCESS); + test_ret(IN_MODIFY); + test_ret(IN_ATTRIB); + test_ret(IN_CLOSE_WRITE); + test_ret(IN_CLOSE_NOWRITE); + test_ret(IN_OPEN); + test_ret(IN_MOVED_FROM); + test_ret(IN_MOVED_TO); + test_ret(IN_CREATE); + test_ret(IN_DELETE); + test_ret(IN_DELETE_SELF); + test_ret(IN_MOVE_SELF); + test_ret(IN_UNMOUNT); + test_ret(IN_Q_OVERFLOW); + test_ret(IN_IGNORED); + return ""; +#undef test_ret +#else + return "??"; +#endif +} + +static struct dentry *lookup_wlock_by_name(char *name, unsigned int nlen, + struct inode *dir) +{ + struct dentry *dentry, *d, *parent; + struct qstr *dname; + + parent = d_find_alias(dir); + if (!parent) + return NULL; + + dentry = NULL; + spin_lock(&dcache_lock); + list_for_each_entry(d, &parent->d_subdirs, d_u.d_child) { + /* AuDbg("%.*s\n", AuDLNPair(d)); */ + dname = &d->d_name; + if (dname->len != nlen || memcmp(dname->name, name, nlen)) + continue; + if (!atomic_read(&d->d_count) || !d->d_fsdata) { + spin_lock(&d->d_lock); + __d_drop(d); + spin_unlock(&d->d_lock); + continue; + } + + dentry = dget(d); + break; + } + spin_unlock(&dcache_lock); + dput(parent); + + if (dentry) + di_write_lock_child(dentry); + + return dentry; +} + +static struct inode *lookup_wlock_by_ino(struct super_block *sb, + aufs_bindex_t bindex, ino_t h_ino) +{ + struct inode *inode; + ino_t ino; + int err; + + inode = NULL; + err = au_xino_read(sb, bindex, h_ino, &ino); + if (!err && ino) + inode = ilookup(sb, ino); + if (!inode) + goto out; + + if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { + pr_warning("wrong root branch\n"); + iput(inode); + inode = NULL; + goto out; + } + + ii_write_lock_child(inode); + + out: + return inode; +} + +enum { CHILD, PARENT }; +struct postproc_args { + struct inode *h_dir, *dir, *h_child_inode; + u32 mask; + unsigned int flags[2]; + unsigned int h_child_nlen; + char h_child_name[]; +}; + +static void postproc(void *_args) +{ + struct postproc_args *a = _args; + struct super_block *sb; + aufs_bindex_t bindex, bend, bfound; + unsigned char xino, try_iput; + int err; + struct inode *inode; + ino_t h_ino; + struct hin_job_args args; + struct dentry *dentry; + struct au_sbinfo *sbinfo; + + AuDebugOn(!_args); + AuDebugOn(!a->h_dir); + AuDebugOn(!a->dir); + AuDebugOn(!a->mask); + AuDbg("mask 0x%x %s, i%lu, hi%lu, hci%lu\n", + a->mask, in_name(a->mask), a->dir->i_ino, a->h_dir->i_ino, + a->h_child_inode ? a->h_child_inode->i_ino : 0); + + inode = NULL; + dentry = NULL; + /* + * do not lock a->dir->i_mutex here + * because of d_revalidate() may cause a deadlock. + */ + sb = a->dir->i_sb; + AuDebugOn(!sb); + sbinfo = au_sbi(sb); + AuDebugOn(!sbinfo); + /* big aufs lock */ + si_noflush_write_lock(sb); + + ii_read_lock_parent(a->dir); + bfound = -1; + bend = au_ibend(a->dir); + for (bindex = au_ibstart(a->dir); bindex <= bend; bindex++) + if (au_h_iptr(a->dir, bindex) == a->h_dir) { + bfound = bindex; + break; + } + ii_read_unlock(a->dir); + if (unlikely(bfound < 0)) + goto out; + + xino = !!au_opt_test(au_mntflags(sb), XINO); + h_ino = 0; + if (a->h_child_inode) + h_ino = a->h_child_inode->i_ino; + + if (a->h_child_nlen + && (au_ftest_hinjob(a->flags[CHILD], GEN) + || au_ftest_hinjob(a->flags[CHILD], MNTPNT))) + dentry = lookup_wlock_by_name(a->h_child_name, a->h_child_nlen, + a->dir); + try_iput = 0; + if (dentry) + inode = dentry->d_inode; + if (xino && !inode && h_ino + && (au_ftest_hinjob(a->flags[CHILD], XINO0) + || au_ftest_hinjob(a->flags[CHILD], TRYXINO0) + || au_ftest_hinjob(a->flags[CHILD], GEN))) { + inode = lookup_wlock_by_ino(sb, bfound, h_ino); + try_iput = 1; + } + + args.flags = a->flags[CHILD]; + args.dentry = dentry; + args.inode = inode; + args.h_inode = a->h_child_inode; + args.dir = a->dir; + args.h_dir = a->h_dir; + args.h_name = a->h_child_name; + args.h_nlen = a->h_child_nlen; + err = hin_job(&args); + if (dentry) { + if (dentry->d_fsdata) + di_write_unlock(dentry); + dput(dentry); + } + if (inode && try_iput) { + ii_write_unlock(inode); + iput(inode); + } + + ii_write_lock_parent(a->dir); + args.flags = a->flags[PARENT]; + args.dentry = NULL; + args.inode = a->dir; + args.h_inode = a->h_dir; + args.dir = NULL; + args.h_dir = NULL; + args.h_name = NULL; + args.h_nlen = 0; + err = hin_job(&args); + ii_write_unlock(a->dir); + + out: + au_nwt_done(&sbinfo->si_nowait); + si_write_unlock(sb); + + iput(a->h_child_inode); + iput(a->h_dir); + iput(a->dir); + kfree(a); +} + +/* ---------------------------------------------------------------------- */ + +static void aufs_inotify(struct inotify_watch *watch, u32 wd __maybe_unused, + u32 mask, u32 cookie __maybe_unused, + const char *h_child_name, struct inode *h_child_inode) +{ + struct au_hinotify *hinotify; + struct postproc_args *args; + int len, wkq_err; + unsigned char isdir, isroot, wh; + char *p; + struct inode *dir; + unsigned int flags[2]; + + /* if IN_UNMOUNT happens, there must be another bug */ + AuDebugOn(mask & IN_UNMOUNT); + if (mask & (IN_IGNORED | IN_UNMOUNT)) { + put_inotify_watch(watch); + return; + } +#ifdef AuDbgHinotify + au_debug(1); + if (1 || !h_child_name || strcmp(h_child_name, AUFS_XINO_FNAME)) { + AuDbg("i%lu, wd %d, mask 0x%x %s, cookie 0x%x, hcname %s," + " hi%lu\n", + watch->inode->i_ino, wd, mask, in_name(mask), cookie, + h_child_name ? h_child_name : "", + h_child_inode ? h_child_inode->i_ino : 0); + WARN_ON(1); + } + au_debug(0); +#endif + + hinotify = container_of(watch, struct au_hinotify, hin_watch); + AuDebugOn(!hinotify || !hinotify->hin_aufs_inode); + dir = igrab(hinotify->hin_aufs_inode); + if (!dir) + return; + + isroot = (dir->i_ino == AUFS_ROOT_INO); + len = 0; + wh = 0; + if (h_child_name) { + len = strlen(h_child_name); + if (!memcmp(h_child_name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { + h_child_name += AUFS_WH_PFX_LEN; + len -= AUFS_WH_PFX_LEN; + wh = 1; + } + } + + isdir = 0; + if (h_child_inode) + isdir = !!S_ISDIR(h_child_inode->i_mode); + flags[PARENT] = AuHinJob_ISDIR; + flags[CHILD] = 0; + if (isdir) + flags[CHILD] = AuHinJob_ISDIR; + switch (mask & IN_ALL_EVENTS) { + case IN_MOVED_FROM: + case IN_MOVED_TO: + AuDebugOn(!h_child_name || !h_child_inode); + au_fset_hinjob(flags[CHILD], GEN); + au_fset_hinjob(flags[CHILD], XINO0); + au_fset_hinjob(flags[CHILD], MNTPNT); + au_fset_hinjob(flags[PARENT], DIRENT); + break; + + case IN_CREATE: + AuDebugOn(!h_child_name || !h_child_inode); + au_fset_hinjob(flags[PARENT], DIRENT); + au_fset_hinjob(flags[CHILD], GEN); + break; + + case IN_DELETE: + /* + * aufs never be able to get this child inode. + * revalidation should be in d_revalidate() + * by checking i_nlink, i_generation or d_unhashed(). + */ + AuDebugOn(!h_child_name); + au_fset_hinjob(flags[PARENT], DIRENT); + au_fset_hinjob(flags[CHILD], GEN); + au_fset_hinjob(flags[CHILD], TRYXINO0); + au_fset_hinjob(flags[CHILD], MNTPNT); + break; + + default: + AuDebugOn(1); + } + + if (wh) + h_child_inode = NULL; + + /* iput() and kfree() will be called in postproc() */ + /* + * inotify_mutex is already acquired and kmalloc/prune_icache may lock + * iprune_mutex. strange. + */ + /* lockdep_off(); */ + args = kmalloc(sizeof(*args) + len + 1, GFP_NOFS); + /* lockdep_on(); */ + if (unlikely(!args)) { + AuErr1("no memory\n"); + iput(dir); + return; + } + args->flags[PARENT] = flags[PARENT]; + args->flags[CHILD] = flags[CHILD]; + args->mask = mask; + args->dir = dir; + args->h_dir = igrab(watch->inode); + if (h_child_inode) + h_child_inode = igrab(h_child_inode); /* can be NULL */ + args->h_child_inode = h_child_inode; + args->h_child_nlen = len; + if (len) { + p = (void *)args; + p += sizeof(*args); + memcpy(p, h_child_name, len + 1); + } + + /* lockdep_off(); */ + wkq_err = au_wkq_nowait(postproc, args, dir->i_sb); + /* lockdep_on(); */ + if (unlikely(wkq_err)) + pr_err("wkq %d\n", wkq_err); +} + +static void aufs_inotify_destroy(struct inotify_watch *watch __maybe_unused) +{ + return; +} + +static struct inotify_operations aufs_inotify_ops = { + .handle_event = aufs_inotify, + .destroy_watch = aufs_inotify_destroy +}; + +/* ---------------------------------------------------------------------- */ + +static void au_hin_destroy_cache(void) +{ + kmem_cache_destroy(au_cachep[AuCache_HINOTIFY]); + au_cachep[AuCache_HINOTIFY] = NULL; +} + +int __init au_hinotify_init(void) +{ + int err; + + err = -ENOMEM; + au_cachep[AuCache_HINOTIFY] = AuCache(au_hinotify); + if (au_cachep[AuCache_HINOTIFY]) { + err = 0; + au_hin_handle = inotify_init(&aufs_inotify_ops); + if (IS_ERR(au_hin_handle)) { + err = PTR_ERR(au_hin_handle); + au_hin_destroy_cache(); + } + } + AuTraceErr(err); + return err; +} + +void au_hinotify_fin(void) +{ + inotify_destroy(au_hin_handle); + if (au_cachep[AuCache_HINOTIFY]) + au_hin_destroy_cache(); +} --- linux-2.6.32.orig/ubuntu/aufs/dir.h +++ linux-2.6.32/ubuntu/aufs/dir.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * directory operations + */ + +#ifndef __AUFS_DIR_H__ +#define __AUFS_DIR_H__ + +#ifdef __KERNEL__ + +#include +#include + +/* ---------------------------------------------------------------------- */ + +/* need to be faster and smaller */ + +struct au_nhash { + unsigned int nh_num; + struct hlist_head *nh_head; +}; + +struct au_vdir_destr { + unsigned char len; + unsigned char name[0]; +} __packed; + +struct au_vdir_dehstr { + struct hlist_node hash; + struct au_vdir_destr *str; +}; + +struct au_vdir_de { + ino_t de_ino; + unsigned char de_type; + /* caution: packed */ + struct au_vdir_destr de_str; +} __packed; + +struct au_vdir_wh { + struct hlist_node wh_hash; +#ifdef CONFIG_AUFS_SHWH + ino_t wh_ino; + aufs_bindex_t wh_bindex; + unsigned char wh_type; +#else + aufs_bindex_t wh_bindex; +#endif + /* caution: packed */ + struct au_vdir_destr wh_str; +} __packed; + +union au_vdir_deblk_p { + unsigned char *deblk; + struct au_vdir_de *de; +}; + +struct au_vdir { + unsigned char **vd_deblk; + unsigned long vd_nblk; + struct { + unsigned long ul; + union au_vdir_deblk_p p; + } vd_last; + + unsigned long vd_version; + unsigned int vd_deblk_sz; + unsigned long vd_jiffy; +}; + +/* ---------------------------------------------------------------------- */ + +/* dir.c */ +extern const struct file_operations aufs_dir_fop; +void au_add_nlink(struct inode *dir, struct inode *h_dir); +void au_sub_nlink(struct inode *dir, struct inode *h_dir); +loff_t au_dir_size(struct file *file, struct dentry *dentry); +int au_test_empty_lower(struct dentry *dentry); +int au_test_empty(struct dentry *dentry, struct au_nhash *whlist); + +/* vdir.c */ +unsigned int au_rdhash_est(loff_t sz); +int au_nhash_alloc(struct au_nhash *nhash, unsigned int num_hash, gfp_t gfp); +void au_nhash_wh_free(struct au_nhash *whlist); +int au_nhash_test_longer_wh(struct au_nhash *whlist, aufs_bindex_t btgt, + int limit); +int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen); +int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino, + unsigned int d_type, aufs_bindex_t bindex, + unsigned char shwh); +void au_vdir_free(struct au_vdir *vdir); +int au_vdir_init(struct file *file); +int au_vdir_fill_de(struct file *file, void *dirent, filldir_t filldir); + +/* ioctl.c */ +long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg); + +#ifdef CONFIG_AUFS_RDU +/* rdu.c */ +long au_rdu_ioctl(struct file *file, unsigned int cmd, unsigned long arg); +#else +static inline long au_rdu_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + return -EINVAL; +} +#endif + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIR_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/sysaufs.h +++ linux-2.6.32/ubuntu/aufs/sysaufs.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sysfs interface and mount lifetime management + */ + +#ifndef __SYSAUFS_H__ +#define __SYSAUFS_H__ + +#ifdef __KERNEL__ + +#include +#include +#include "module.h" + +struct super_block; +struct au_sbinfo; + +struct sysaufs_si_attr { + struct attribute attr; + int (*show)(struct seq_file *seq, struct super_block *sb); +}; + +/* ---------------------------------------------------------------------- */ + +/* sysaufs.c */ +extern unsigned long sysaufs_si_mask; +extern struct kset *sysaufs_ket; +extern struct attribute *sysaufs_si_attrs[]; +int sysaufs_si_init(struct au_sbinfo *sbinfo); +int __init sysaufs_init(void); +void sysaufs_fin(void); + +/* ---------------------------------------------------------------------- */ + +/* some people doesn't like to show a pointer in kernel */ +static inline unsigned long sysaufs_si_id(struct au_sbinfo *sbinfo) +{ + return sysaufs_si_mask ^ (unsigned long)sbinfo; +} + +#define SysaufsSiNamePrefix "si_" +#define SysaufsSiNameLen (sizeof(SysaufsSiNamePrefix) + 16) +static inline void sysaufs_name(struct au_sbinfo *sbinfo, char *name) +{ + snprintf(name, SysaufsSiNameLen, SysaufsSiNamePrefix "%lx", + sysaufs_si_id(sbinfo)); +} + +struct au_branch; +#ifdef CONFIG_SYSFS +/* sysfs.c */ +extern struct attribute_group *sysaufs_attr_group; + +int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb); +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf); + +void sysaufs_br_init(struct au_branch *br); +void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex); +void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex); + +#define sysaufs_brs_init() do {} while (0) + +#else +#define sysaufs_attr_group NULL + +static inline +int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb) +{ + return 0; +} + +static inline +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf) +{ + return 0; +} + +static inline void sysaufs_br_init(struct au_branch *br) +{ + /* empty */ +} + +static inline void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + /* nothing */ +} + +static inline void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + /* nothing */ +} + +static inline void sysaufs_brs_init(void) +{ + sysaufs_brs = 0; +} + +#endif /* CONFIG_SYSFS */ + +#endif /* __KERNEL__ */ +#endif /* __SYSAUFS_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/file.h +++ linux-2.6.32/ubuntu/aufs/file.h @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * file operations + */ + +#ifndef __AUFS_FILE_H__ +#define __AUFS_FILE_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include "rwsem.h" + +struct au_branch; +struct au_hfile { + struct file *hf_file; + struct au_branch *hf_br; +}; + +struct au_vdir; +struct au_finfo { + atomic_t fi_generation; + + struct au_rwsem fi_rwsem; + struct au_hfile *fi_hfile; + aufs_bindex_t fi_bstart, fi_bend; + + union { + /* non-dir only */ + struct { + struct vm_operations_struct *fi_h_vm_ops; + struct vm_operations_struct *fi_vm_ops; + struct mutex fi_vm_mtx; + }; + + /* dir only */ + struct { + struct au_vdir *fi_vdir_cache; + int fi_maintain_plink; + }; + }; +}; + +/* ---------------------------------------------------------------------- */ + +/* file.c */ +extern struct address_space_operations aufs_aop; +unsigned int au_file_roflags(unsigned int flags); +struct file *au_h_open(struct dentry *dentry, aufs_bindex_t bindex, int flags, + struct file *file); +int au_do_open(struct file *file, int (*open)(struct file *file, int flags)); +int au_reopen_nondir(struct file *file); +struct au_pin; +int au_ready_to_write(struct file *file, loff_t len, struct au_pin *pin); +int au_reval_and_lock_fdi(struct file *file, int (*reopen)(struct file *file), + int wlock); + +/* poll.c */ +#ifdef CONFIG_AUFS_POLL +unsigned int aufs_poll(struct file *file, poll_table *wait); +#endif + +/* f_op.c */ +extern const struct file_operations aufs_file_fop; +int aufs_flush(struct file *file, fl_owner_t id); + +/* finfo.c */ +void au_hfput(struct au_hfile *hf, struct file *file); +void au_set_h_fptr(struct file *file, aufs_bindex_t bindex, + struct file *h_file); + +void au_update_figen(struct file *file); + +void au_finfo_fin(struct file *file); +int au_finfo_init(struct file *file); +int au_fi_realloc(struct au_finfo *finfo, int nbr); + +/* ioctl.c */ +long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg); + +/* ---------------------------------------------------------------------- */ + +static inline struct au_finfo *au_fi(struct file *file) +{ + return file->private_data; +} + +/* ---------------------------------------------------------------------- */ + +/* + * fi_read_lock, fi_write_lock, + * fi_read_unlock, fi_write_unlock, fi_downgrade_lock + */ +AuSimpleRwsemFuncs(fi, struct file *f, &au_fi(f)->fi_rwsem); + +#define FiMustNoWaiters(f) AuRwMustNoWaiters(&au_fi(f)->fi_rwsem) +#define FiMustAnyLock(f) AuRwMustAnyLock(&au_fi(f)->fi_rwsem) +#define FiMustWriteLock(f) AuRwMustWriteLock(&au_fi(f)->fi_rwsem) + +/* ---------------------------------------------------------------------- */ + +/* todo: hard/soft set? */ +static inline aufs_bindex_t au_fbstart(struct file *file) +{ + FiMustAnyLock(file); + return au_fi(file)->fi_bstart; +} + +static inline aufs_bindex_t au_fbend(struct file *file) +{ + FiMustAnyLock(file); + return au_fi(file)->fi_bend; +} + +static inline struct au_vdir *au_fvdir_cache(struct file *file) +{ + FiMustAnyLock(file); + return au_fi(file)->fi_vdir_cache; +} + +static inline void au_set_fbstart(struct file *file, aufs_bindex_t bindex) +{ + FiMustWriteLock(file); + au_fi(file)->fi_bstart = bindex; +} + +static inline void au_set_fbend(struct file *file, aufs_bindex_t bindex) +{ + FiMustWriteLock(file); + au_fi(file)->fi_bend = bindex; +} + +static inline void au_set_fvdir_cache(struct file *file, + struct au_vdir *vdir_cache) +{ + FiMustWriteLock(file); + au_fi(file)->fi_vdir_cache = vdir_cache; +} + +static inline struct file *au_h_fptr(struct file *file, aufs_bindex_t bindex) +{ + FiMustAnyLock(file); + return au_fi(file)->fi_hfile[0 + bindex].hf_file; +} + +/* todo: memory barrier? */ +static inline unsigned int au_figen(struct file *f) +{ + return atomic_read(&au_fi(f)->fi_generation); +} + +static inline int au_test_mmapped(struct file *f) +{ + /* FiMustAnyLock(f); */ + return !!(au_fi(f)->fi_h_vm_ops); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/branch.h +++ linux-2.6.32/ubuntu/aufs/branch.h @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * branch filesystems and xino for them + */ + +#ifndef __AUFS_BRANCH_H__ +#define __AUFS_BRANCH_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include "rwsem.h" +#include "super.h" + +/* ---------------------------------------------------------------------- */ + +/* a xino file */ +struct au_xino_file { + struct file *xi_file; + struct mutex xi_nondir_mtx; + + /* todo: make xino files an array to support huge inode number */ + +#ifdef CONFIG_DEBUG_FS + struct dentry *xi_dbgaufs; +#endif +}; + +/* members for writable branch only */ +enum {AuBrWh_BASE, AuBrWh_PLINK, AuBrWh_ORPH, AuBrWh_Last}; +struct au_wbr { + struct au_rwsem wbr_wh_rwsem; + struct dentry *wbr_wh[AuBrWh_Last]; + atomic_t wbr_wh_running; +#define wbr_whbase wbr_wh[AuBrWh_BASE] /* whiteout base */ +#define wbr_plink wbr_wh[AuBrWh_PLINK] /* pseudo-link dir */ +#define wbr_orph wbr_wh[AuBrWh_ORPH] /* dir for orphans */ + + /* mfs mode */ + unsigned long long wbr_bytes; +}; + +/* protected by superblock rwsem */ +struct au_branch { + struct au_xino_file br_xino; + + aufs_bindex_t br_id; + + int br_perm; + struct vfsmount *br_mnt; + atomic_t br_count; + + struct au_wbr *br_wbr; + + /* xino truncation */ + blkcnt_t br_xino_upper; /* watermark in blocks */ + atomic_t br_xino_running; + +#ifdef CONFIG_SYSFS + /* an entry under sysfs per mount-point */ + char br_name[8]; + struct attribute br_attr; +#endif +}; + +/* ---------------------------------------------------------------------- */ + +/* branch permission and attribute */ +enum { + AuBrPerm_RW, /* writable, linkable wh */ + AuBrPerm_RO, /* readonly, no wh */ + AuBrPerm_RR, /* natively readonly, no wh */ + + AuBrPerm_RWNoLinkWH, /* un-linkable whiteouts */ + + AuBrPerm_ROWH, /* whiteout-able */ + AuBrPerm_RRWH, /* whiteout-able */ + + AuBrPerm_Last +}; + +static inline int au_br_writable(int brperm) +{ + return brperm == AuBrPerm_RW || brperm == AuBrPerm_RWNoLinkWH; +} + +static inline int au_br_whable(int brperm) +{ + return brperm == AuBrPerm_RW + || brperm == AuBrPerm_ROWH + || brperm == AuBrPerm_RRWH; +} + +static inline int au_br_rdonly(struct au_branch *br) +{ + return ((br->br_mnt->mnt_sb->s_flags & MS_RDONLY) + || !au_br_writable(br->br_perm)) + ? -EROFS : 0; +} + +static inline int au_br_hinotifyable(int brperm __maybe_unused) +{ +#ifdef CONFIG_AUFS_HINOTIFY + return brperm != AuBrPerm_RR && brperm != AuBrPerm_RRWH; +#else + return 0; +#endif +} + +/* ---------------------------------------------------------------------- */ + +/* branch.c */ +struct au_sbinfo; +void au_br_free(struct au_sbinfo *sinfo); +int au_br_index(struct super_block *sb, aufs_bindex_t br_id); +struct au_opt_add; +int au_br_add(struct super_block *sb, struct au_opt_add *add, int remount); +struct au_opt_del; +int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount); +struct au_opt_mod; +int au_br_mod(struct super_block *sb, struct au_opt_mod *mod, int remount, + int *do_update); + +/* xino.c */ +static const loff_t au_loff_max = LLONG_MAX; + +int au_xib_trunc(struct super_block *sb); +ssize_t xino_fread(au_readf_t func, struct file *file, void *buf, size_t size, + loff_t *pos); +ssize_t xino_fwrite(au_writef_t func, struct file *file, void *buf, size_t size, + loff_t *pos); +struct file *au_xino_create2(struct file *base_file, struct file *copy_src); +struct file *au_xino_create(struct super_block *sb, char *fname, int silent); +ino_t au_xino_new_ino(struct super_block *sb); +int au_xino_write0(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t ino); +int au_xino_write(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t ino); +int au_xino_read(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t *ino); +int au_xino_br(struct super_block *sb, struct au_branch *br, ino_t hino, + struct file *base_file, int do_test); +int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex); + +struct au_opt_xino; +int au_xino_set(struct super_block *sb, struct au_opt_xino *xino, int remount); +void au_xino_clr(struct super_block *sb); +struct file *au_xino_def(struct super_block *sb); +int au_xino_path(struct seq_file *seq, struct file *file); + +/* ---------------------------------------------------------------------- */ + +/* Superblock to branch */ +static inline +aufs_bindex_t au_sbr_id(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr(sb, bindex)->br_id; +} + +static inline +struct vfsmount *au_sbr_mnt(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr(sb, bindex)->br_mnt; +} + +static inline +struct super_block *au_sbr_sb(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr_mnt(sb, bindex)->mnt_sb; +} + +static inline void au_sbr_put(struct super_block *sb, aufs_bindex_t bindex) +{ + atomic_dec_return(&au_sbr(sb, bindex)->br_count); +} + +static inline int au_sbr_perm(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr(sb, bindex)->br_perm; +} + +static inline int au_sbr_whable(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_br_whable(au_sbr_perm(sb, bindex)); +} + +/* ---------------------------------------------------------------------- */ + +/* + * wbr_wh_read_lock, wbr_wh_write_lock + * wbr_wh_read_unlock, wbr_wh_write_unlock, wbr_wh_downgrade_lock + */ +AuSimpleRwsemFuncs(wbr_wh, struct au_wbr *wbr, &wbr->wbr_wh_rwsem); + +#define WbrWhMustNoWaiters(wbr) AuRwMustNoWaiters(&wbr->wbr_wh_rwsem) +#define WbrWhMustAnyLock(wbr) AuRwMustAnyLock(&wbr->wbr_wh_rwsem) +#define WbrWhMustWriteLock(wbr) AuRwMustWriteLock(&wbr->wbr_wh_rwsem) + +#endif /* __KERNEL__ */ +#endif /* __AUFS_BRANCH_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/cpup.c +++ linux-2.6.32/ubuntu/aufs/cpup.c @@ -0,0 +1,1048 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * copy-up functions, see wbr_policy.c for copy-down + */ + +#include +#include +#include +#include +#include "aufs.h" + +void au_cpup_attr_flags(struct inode *dst, struct inode *src) +{ + const unsigned int mask = S_DEAD | S_SWAPFILE | S_PRIVATE + | S_NOATIME | S_NOCMTIME; + + dst->i_flags |= src->i_flags & ~mask; + if (au_test_fs_notime(dst->i_sb)) + dst->i_flags |= S_NOATIME | S_NOCMTIME; +} + +void au_cpup_attr_timesizes(struct inode *inode) +{ + struct inode *h_inode; + + h_inode = au_h_iptr(inode, au_ibstart(inode)); + fsstack_copy_attr_times(inode, h_inode); + vfsub_copy_inode_size(inode, h_inode); +} + +void au_cpup_attr_nlink(struct inode *inode, int force) +{ + struct inode *h_inode; + struct super_block *sb; + aufs_bindex_t bindex, bend; + + sb = inode->i_sb; + bindex = au_ibstart(inode); + h_inode = au_h_iptr(inode, bindex); + if (!force + && !S_ISDIR(h_inode->i_mode) + && au_opt_test(au_mntflags(sb), PLINK) + && au_plink_test(inode)) + return; + + inode->i_nlink = h_inode->i_nlink; + + /* + * fewer nlink makes find(1) noisy, but larger nlink doesn't. + * it may includes whplink directory. + */ + if (S_ISDIR(h_inode->i_mode)) { + bend = au_ibend(inode); + for (bindex++; bindex <= bend; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (h_inode) + au_add_nlink(inode, h_inode); + } + } +} + +void au_cpup_attr_changeable(struct inode *inode) +{ + struct inode *h_inode; + + h_inode = au_h_iptr(inode, au_ibstart(inode)); + inode->i_mode = h_inode->i_mode; + inode->i_uid = h_inode->i_uid; + inode->i_gid = h_inode->i_gid; + au_cpup_attr_timesizes(inode); + au_cpup_attr_flags(inode, h_inode); +} + +void au_cpup_igen(struct inode *inode, struct inode *h_inode) +{ + struct au_iinfo *iinfo = au_ii(inode); + + IiMustWriteLock(inode); + + iinfo->ii_higen = h_inode->i_generation; + iinfo->ii_hsb1 = h_inode->i_sb; +} + +void au_cpup_attr_all(struct inode *inode, int force) +{ + struct inode *h_inode; + + h_inode = au_h_iptr(inode, au_ibstart(inode)); + au_cpup_attr_changeable(inode); + if (inode->i_nlink > 0) + au_cpup_attr_nlink(inode, force); + inode->i_rdev = h_inode->i_rdev; + inode->i_blkbits = h_inode->i_blkbits; + au_cpup_igen(inode, h_inode); +} + +/* ---------------------------------------------------------------------- */ + +/* Note: dt_dentry and dt_h_dentry are not dget/dput-ed */ + +/* keep the timestamps of the parent dir when cpup */ +void au_dtime_store(struct au_dtime *dt, struct dentry *dentry, + struct path *h_path) +{ + struct inode *h_inode; + + dt->dt_dentry = dentry; + dt->dt_h_path = *h_path; + h_inode = h_path->dentry->d_inode; + dt->dt_atime = h_inode->i_atime; + dt->dt_mtime = h_inode->i_mtime; + /* smp_mb(); */ +} + +void au_dtime_revert(struct au_dtime *dt) +{ + struct iattr attr; + int err; + + attr.ia_atime = dt->dt_atime; + attr.ia_mtime = dt->dt_mtime; + attr.ia_valid = ATTR_FORCE | ATTR_MTIME | ATTR_MTIME_SET + | ATTR_ATIME | ATTR_ATIME_SET; + + err = vfsub_notify_change(&dt->dt_h_path, &attr); + if (unlikely(err)) + pr_warning("restoring timestamps failed(%d). ignored\n", err); +} + +/* ---------------------------------------------------------------------- */ + +static noinline_for_stack +int cpup_iattr(struct dentry *dst, aufs_bindex_t bindex, struct dentry *h_src) +{ + int err, sbits; + struct iattr ia; + struct path h_path; + struct inode *h_isrc, *h_idst; + + h_path.dentry = au_h_dptr(dst, bindex); + h_idst = h_path.dentry->d_inode; + h_path.mnt = au_sbr_mnt(dst->d_sb, bindex); + h_isrc = h_src->d_inode; + ia.ia_valid = ATTR_FORCE | ATTR_UID | ATTR_GID + | ATTR_ATIME | ATTR_MTIME + | ATTR_ATIME_SET | ATTR_MTIME_SET; + ia.ia_uid = h_isrc->i_uid; + ia.ia_gid = h_isrc->i_gid; + ia.ia_atime = h_isrc->i_atime; + ia.ia_mtime = h_isrc->i_mtime; + if (h_idst->i_mode != h_isrc->i_mode + && !S_ISLNK(h_idst->i_mode)) { + ia.ia_valid |= ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; + } + sbits = !!(h_isrc->i_mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(h_idst, h_isrc); + err = vfsub_notify_change(&h_path, &ia); + + /* is this nfs only? */ + if (!err && sbits && au_test_nfs(h_path.dentry->d_sb)) { + ia.ia_valid = ATTR_FORCE | ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; + err = vfsub_notify_change(&h_path, &ia); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_copy_file(struct file *dst, struct file *src, loff_t len, + char *buf, unsigned long blksize) +{ + int err; + size_t sz, rbytes, wbytes; + unsigned char all_zero; + char *p, *zp; + struct mutex *h_mtx; + /* reduce stack usage */ + struct iattr *ia; + + zp = page_address(ZERO_PAGE(0)); + if (unlikely(!zp)) + return -ENOMEM; /* possible? */ + + err = 0; + all_zero = 0; + while (len) { + AuDbg("len %lld\n", len); + sz = blksize; + if (len < blksize) + sz = len; + + rbytes = 0; + /* todo: signal_pending? */ + while (!rbytes || err == -EAGAIN || err == -EINTR) { + rbytes = vfsub_read_k(src, buf, sz, &src->f_pos); + err = rbytes; + } + if (unlikely(err < 0)) + break; + + all_zero = 0; + if (len >= rbytes && rbytes == blksize) + all_zero = !memcmp(buf, zp, rbytes); + if (!all_zero) { + wbytes = rbytes; + p = buf; + while (wbytes) { + size_t b; + + b = vfsub_write_k(dst, p, wbytes, &dst->f_pos); + err = b; + /* todo: signal_pending? */ + if (unlikely(err == -EAGAIN || err == -EINTR)) + continue; + if (unlikely(err < 0)) + break; + wbytes -= b; + p += b; + } + } else { + loff_t res; + + AuLabel(hole); + res = vfsub_llseek(dst, rbytes, SEEK_CUR); + err = res; + if (unlikely(res < 0)) + break; + } + len -= rbytes; + err = 0; + } + + /* the last block may be a hole */ + if (!err && all_zero) { + AuLabel(last hole); + + err = 1; + if (au_test_nfs(dst->f_dentry->d_sb)) { + /* nfs requires this step to make last hole */ + /* is this only nfs? */ + do { + /* todo: signal_pending? */ + err = vfsub_write_k(dst, "\0", 1, &dst->f_pos); + } while (err == -EAGAIN || err == -EINTR); + if (err == 1) + dst->f_pos--; + } + + if (err == 1) { + ia = (void *)buf; + ia->ia_size = dst->f_pos; + ia->ia_valid = ATTR_SIZE | ATTR_FILE; + ia->ia_file = dst; + h_mtx = &dst->f_dentry->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD2); + err = vfsub_notify_change(&dst->f_path, ia); + mutex_unlock(h_mtx); + } + } + + return err; +} + +int au_copy_file(struct file *dst, struct file *src, loff_t len) +{ + int err; + unsigned long blksize; + unsigned char do_kfree; + char *buf; + + err = -ENOMEM; + blksize = dst->f_dentry->d_sb->s_blocksize; + if (!blksize || PAGE_SIZE < blksize) + blksize = PAGE_SIZE; + AuDbg("blksize %lu\n", blksize); + do_kfree = (blksize != PAGE_SIZE && blksize >= sizeof(struct iattr *)); + if (do_kfree) + buf = kmalloc(blksize, GFP_NOFS); + else + buf = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!buf)) + goto out; + + if (len > (1 << 22)) + AuDbg("copying a large file %lld\n", (long long)len); + + src->f_pos = 0; + dst->f_pos = 0; + err = au_do_copy_file(dst, src, len, buf, blksize); + if (do_kfree) + kfree(buf); + else + free_page((unsigned long)buf); + + out: + return err; +} + +/* + * to support a sparse file which is opened with O_APPEND, + * we need to close the file. + */ +static int au_cp_regular(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len) +{ + int err, i; + enum { SRC, DST }; + struct { + aufs_bindex_t bindex; + unsigned int flags; + struct dentry *dentry; + struct file *file; + void *label, *label_file; + } *f, file[] = { + { + .bindex = bsrc, + .flags = O_RDONLY | O_NOATIME | O_LARGEFILE, + .file = NULL, + .label = &&out, + .label_file = &&out_src + }, + { + .bindex = bdst, + .flags = O_WRONLY | O_NOATIME | O_LARGEFILE, + .file = NULL, + .label = &&out_src, + .label_file = &&out_dst + } + }; + struct super_block *sb; + + /* bsrc branch can be ro/rw. */ + sb = dentry->d_sb; + f = file; + for (i = 0; i < 2; i++, f++) { + f->dentry = au_h_dptr(dentry, f->bindex); + f->file = au_h_open(dentry, f->bindex, f->flags, /*file*/NULL); + err = PTR_ERR(f->file); + if (IS_ERR(f->file)) + goto *f->label; + err = -EINVAL; + if (unlikely(!f->file->f_op)) + goto *f->label_file; + } + + /* try stopping to update while we copyup */ + IMustLock(file[SRC].dentry->d_inode); + err = au_copy_file(file[DST].file, file[SRC].file, len); + + out_dst: + fput(file[DST].file); + au_sbr_put(sb, file[DST].bindex); + out_src: + fput(file[SRC].file); + au_sbr_put(sb, file[SRC].bindex); + out: + return err; +} + +static int au_do_cpup_regular(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, + struct inode *h_dir, struct path *h_path) +{ + int err, rerr; + loff_t l; + + err = 0; + l = i_size_read(au_h_iptr(dentry->d_inode, bsrc)); + if (len == -1 || l < len) + len = l; + if (len) + err = au_cp_regular(dentry, bdst, bsrc, len); + if (!err) + goto out; /* success */ + + rerr = vfsub_unlink(h_dir, h_path, /*force*/0); + if (rerr) { + AuIOErr("failed unlinking cpup-ed %.*s(%d, %d)\n", + AuDLNPair(h_path->dentry), err, rerr); + err = -EIO; + } + + out: + return err; +} + +static int au_do_cpup_symlink(struct path *h_path, struct dentry *h_src, + struct inode *h_dir) +{ + int err, symlen; + mm_segment_t old_fs; + char *sym; + + err = -ENOSYS; + if (unlikely(!h_src->d_inode->i_op->readlink)) + goto out; + + err = -ENOMEM; + sym = __getname(); + if (unlikely(!sym)) + goto out; + + old_fs = get_fs(); + set_fs(KERNEL_DS); + symlen = h_src->d_inode->i_op->readlink(h_src, (char __user *)sym, + PATH_MAX); + err = symlen; + set_fs(old_fs); + + if (symlen > 0) { + sym[symlen] = 0; + err = vfsub_symlink(h_dir, h_path, sym); + } + __putname(sym); + + out: + return err; +} + +/* return with the lower dst inode is locked */ +static noinline_for_stack +int cpup_entry(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent) +{ + int err; + umode_t mode; + unsigned int mnt_flags; + unsigned char isdir; + const unsigned char do_dt = !!au_ftest_cpup(flags, DTIME); + struct au_dtime dt; + struct path h_path; + struct dentry *h_src, *h_dst, *h_parent; + struct inode *h_inode, *h_dir; + struct super_block *sb; + + /* bsrc branch can be ro/rw. */ + h_src = au_h_dptr(dentry, bsrc); + h_inode = h_src->d_inode; + AuDebugOn(h_inode != au_h_iptr(dentry->d_inode, bsrc)); + + /* try stopping to be referenced while we are creating */ + h_dst = au_h_dptr(dentry, bdst); + h_parent = h_dst->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + AuDebugOn(h_parent != h_dst->d_parent); + + sb = dentry->d_sb; + h_path.mnt = au_sbr_mnt(sb, bdst); + if (do_dt) { + h_path.dentry = h_parent; + au_dtime_store(&dt, dst_parent, &h_path); + } + h_path.dentry = h_dst; + + isdir = 0; + mode = h_inode->i_mode; + switch (mode & S_IFMT) { + case S_IFREG: + /* try stopping to update while we are referencing */ + IMustLock(h_inode); + err = vfsub_create(h_dir, &h_path, mode | S_IWUSR); + if (!err) + err = au_do_cpup_regular + (dentry, bdst, bsrc, len, + au_h_iptr(dst_parent->d_inode, bdst), &h_path); + break; + case S_IFDIR: + isdir = 1; + err = vfsub_mkdir(h_dir, &h_path, mode); + if (!err) { + /* + * strange behaviour from the users view, + * particularry setattr case + */ + if (au_ibstart(dst_parent->d_inode) == bdst) + au_cpup_attr_nlink(dst_parent->d_inode, + /*force*/1); + au_cpup_attr_nlink(dentry->d_inode, /*force*/1); + } + break; + case S_IFLNK: + err = au_do_cpup_symlink(&h_path, h_src, h_dir); + break; + case S_IFCHR: + case S_IFBLK: + AuDebugOn(!capable(CAP_MKNOD)); + /*FALLTHROUGH*/ + case S_IFIFO: + case S_IFSOCK: + err = vfsub_mknod(h_dir, &h_path, mode, h_inode->i_rdev); + break; + default: + AuIOErr("Unknown inode type 0%o\n", mode); + err = -EIO; + } + + mnt_flags = au_mntflags(sb); + if (!au_opt_test(mnt_flags, UDBA_NONE) + && !isdir + && au_opt_test(mnt_flags, XINO) + && h_inode->i_nlink == 1 + /* todo: unnecessary? */ + /* && dentry->d_inode->i_nlink == 1 */ + && bdst < bsrc + && !au_ftest_cpup(flags, KEEPLINO)) + au_xino_write(sb, bsrc, h_inode->i_ino, /*ino*/0); + /* ignore this error */ + + if (do_dt) + au_dtime_revert(&dt); + return err; +} + +/* + * copyup the @dentry from @bsrc to @bdst. + * the caller must set the both of lower dentries. + * @len is for truncating when it is -1 copyup the entire file. + * in link/rename cases, @dst_parent may be different from the real one. + */ +static int au_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent) +{ + int err, rerr; + aufs_bindex_t old_ibstart; + unsigned char isdir, plink; + struct au_dtime dt; + struct path h_path; + struct dentry *h_src, *h_dst, *h_parent; + struct inode *dst_inode, *h_dir, *inode; + struct super_block *sb; + + AuDebugOn(bsrc <= bdst); + + sb = dentry->d_sb; + h_path.mnt = au_sbr_mnt(sb, bdst); + h_dst = au_h_dptr(dentry, bdst); + h_parent = h_dst->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + + h_src = au_h_dptr(dentry, bsrc); + inode = dentry->d_inode; + + if (!dst_parent) + dst_parent = dget_parent(dentry); + else + dget(dst_parent); + + plink = !!au_opt_test(au_mntflags(sb), PLINK); + dst_inode = au_h_iptr(inode, bdst); + if (dst_inode) { + if (unlikely(!plink)) { + err = -EIO; + AuIOErr("i%lu exists on a upper branch " + "but plink is disabled\n", inode->i_ino); + goto out; + } + + if (dst_inode->i_nlink) { + const int do_dt = au_ftest_cpup(flags, DTIME); + + h_src = au_plink_lkup(inode, bdst); + err = PTR_ERR(h_src); + if (IS_ERR(h_src)) + goto out; + if (unlikely(!h_src->d_inode)) { + err = -EIO; + AuIOErr("i%lu exists on a upper branch " + "but plink is broken\n", inode->i_ino); + dput(h_src); + goto out; + } + + if (do_dt) { + h_path.dentry = h_parent; + au_dtime_store(&dt, dst_parent, &h_path); + } + h_path.dentry = h_dst; + err = vfsub_link(h_src, h_dir, &h_path); + if (do_dt) + au_dtime_revert(&dt); + dput(h_src); + goto out; + } else + /* todo: cpup_wh_file? */ + /* udba work */ + au_update_brange(inode, 1); + } + + old_ibstart = au_ibstart(inode); + err = cpup_entry(dentry, bdst, bsrc, len, flags, dst_parent); + if (unlikely(err)) + goto out; + dst_inode = h_dst->d_inode; + mutex_lock_nested(&dst_inode->i_mutex, AuLsc_I_CHILD2); + + err = cpup_iattr(dentry, bdst, h_src); + isdir = S_ISDIR(dst_inode->i_mode); + if (!err) { + if (bdst < old_ibstart) + au_set_ibstart(inode, bdst); + au_set_h_iptr(inode, bdst, au_igrab(dst_inode), + au_hi_flags(inode, isdir)); + mutex_unlock(&dst_inode->i_mutex); + if (!isdir + && h_src->d_inode->i_nlink > 1 + && plink) + au_plink_append(inode, bdst, h_dst); + goto out; /* success */ + } + + /* revert */ + h_path.dentry = h_parent; + mutex_unlock(&dst_inode->i_mutex); + au_dtime_store(&dt, dst_parent, &h_path); + h_path.dentry = h_dst; + if (!isdir) + rerr = vfsub_unlink(h_dir, &h_path, /*force*/0); + else + rerr = vfsub_rmdir(h_dir, &h_path); + au_dtime_revert(&dt); + if (rerr) { + AuIOErr("failed removing broken entry(%d, %d)\n", err, rerr); + err = -EIO; + } + + out: + dput(dst_parent); + return err; +} + +struct au_cpup_single_args { + int *errp; + struct dentry *dentry; + aufs_bindex_t bdst, bsrc; + loff_t len; + unsigned int flags; + struct dentry *dst_parent; +}; + +static void au_call_cpup_single(void *args) +{ + struct au_cpup_single_args *a = args; + *a->errp = au_cpup_single(a->dentry, a->bdst, a->bsrc, a->len, + a->flags, a->dst_parent); +} + +int au_sio_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent) +{ + int err, wkq_err; + umode_t mode; + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bsrc); + mode = h_dentry->d_inode->i_mode & S_IFMT; + if ((mode != S_IFCHR && mode != S_IFBLK) + || capable(CAP_MKNOD)) + err = au_cpup_single(dentry, bdst, bsrc, len, flags, + dst_parent); + else { + struct au_cpup_single_args args = { + .errp = &err, + .dentry = dentry, + .bdst = bdst, + .bsrc = bsrc, + .len = len, + .flags = flags, + .dst_parent = dst_parent + }; + wkq_err = au_wkq_wait(au_call_cpup_single, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} + +/* + * copyup the @dentry from the first active lower branch to @bdst, + * using au_cpup_single(). + */ +static int au_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + unsigned int flags) +{ + int err; + aufs_bindex_t bsrc, bend; + + bend = au_dbend(dentry); + for (bsrc = bdst + 1; bsrc <= bend; bsrc++) + if (au_h_dptr(dentry, bsrc)) + break; + + err = au_lkup_neg(dentry, bdst); + if (!err) { + err = au_cpup_single(dentry, bdst, bsrc, len, flags, NULL); + if (!err) + return 0; /* success */ + + /* revert */ + au_set_h_dptr(dentry, bdst, NULL); + au_set_dbstart(dentry, bsrc); + } + + return err; +} + +struct au_cpup_simple_args { + int *errp; + struct dentry *dentry; + aufs_bindex_t bdst; + loff_t len; + unsigned int flags; +}; + +static void au_call_cpup_simple(void *args) +{ + struct au_cpup_simple_args *a = args; + *a->errp = au_cpup_simple(a->dentry, a->bdst, a->len, a->flags); +} + +int au_sio_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + unsigned int flags) +{ + int err, wkq_err; + unsigned char do_sio; + struct dentry *parent; + struct inode *h_dir; + + parent = dget_parent(dentry); + h_dir = au_h_iptr(parent->d_inode, bdst); + do_sio = !!au_test_h_perm_sio(h_dir, MAY_EXEC | MAY_WRITE); + if (!do_sio) { + /* + * testing CAP_MKNOD is for generic fs, + * but CAP_FSETID is for xfs only, currently. + */ + umode_t mode = dentry->d_inode->i_mode; + do_sio = (((mode & (S_IFCHR | S_IFBLK)) + && !capable(CAP_MKNOD)) + || ((mode & (S_ISUID | S_ISGID)) + && !capable(CAP_FSETID))); + } + if (!do_sio) + err = au_cpup_simple(dentry, bdst, len, flags); + else { + struct au_cpup_simple_args args = { + .errp = &err, + .dentry = dentry, + .bdst = bdst, + .len = len, + .flags = flags + }; + wkq_err = au_wkq_wait(au_call_cpup_simple, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * copyup the deleted file for writing. + */ +static int au_do_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, + struct dentry *wh_dentry, struct file *file, + loff_t len) +{ + int err; + aufs_bindex_t bstart; + struct au_dinfo *dinfo; + struct dentry *h_d_dst, *h_d_start; + + dinfo = au_di(dentry); + AuRwMustWriteLock(&dinfo->di_rwsem); + + bstart = dinfo->di_bstart; + h_d_dst = dinfo->di_hdentry[0 + bdst].hd_dentry; + dinfo->di_bstart = bdst; + dinfo->di_hdentry[0 + bdst].hd_dentry = wh_dentry; + h_d_start = dinfo->di_hdentry[0 + bstart].hd_dentry; + if (file) + dinfo->di_hdentry[0 + bstart].hd_dentry + = au_h_fptr(file, au_fbstart(file))->f_dentry; + err = au_cpup_single(dentry, bdst, bstart, len, !AuCpup_DTIME, + /*h_parent*/NULL); + if (!err && file) { + err = au_reopen_nondir(file); + dinfo->di_hdentry[0 + bstart].hd_dentry = h_d_start; + } + dinfo->di_hdentry[0 + bdst].hd_dentry = h_d_dst; + dinfo->di_bstart = bstart; + + return err; +} + +static int au_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + struct file *file) +{ + int err; + struct au_dtime dt; + struct dentry *parent, *h_parent, *wh_dentry; + struct au_branch *br; + struct path h_path; + + br = au_sbr(dentry->d_sb, bdst); + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bdst); + wh_dentry = au_whtmp_lkup(h_parent, br, &dentry->d_name); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out; + + h_path.dentry = h_parent; + h_path.mnt = br->br_mnt; + au_dtime_store(&dt, parent, &h_path); + err = au_do_cpup_wh(dentry, bdst, wh_dentry, file, len); + if (unlikely(err)) + goto out_wh; + + dget(wh_dentry); + h_path.dentry = wh_dentry; + err = vfsub_unlink(h_parent->d_inode, &h_path, /*force*/0); + if (unlikely(err)) { + AuIOErr("failed remove copied-up tmp file %.*s(%d)\n", + AuDLNPair(wh_dentry), err); + err = -EIO; + } + au_dtime_revert(&dt); + au_set_hi_wh(dentry->d_inode, bdst, wh_dentry); + + out_wh: + dput(wh_dentry); + out: + dput(parent); + return err; +} + +struct au_cpup_wh_args { + int *errp; + struct dentry *dentry; + aufs_bindex_t bdst; + loff_t len; + struct file *file; +}; + +static void au_call_cpup_wh(void *args) +{ + struct au_cpup_wh_args *a = args; + *a->errp = au_cpup_wh(a->dentry, a->bdst, a->len, a->file); +} + +int au_sio_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + struct file *file) +{ + int err, wkq_err; + struct dentry *parent, *h_orph, *h_parent, *h_dentry; + struct inode *dir, *h_dir, *h_tmpdir, *h_inode; + struct au_wbr *wbr; + + parent = dget_parent(dentry); + dir = parent->d_inode; + h_orph = NULL; + h_parent = NULL; + h_dir = au_igrab(au_h_iptr(dir, bdst)); + h_tmpdir = h_dir; + if (!h_dir->i_nlink) { + wbr = au_sbr(dentry->d_sb, bdst)->br_wbr; + h_orph = wbr->wbr_orph; + + h_parent = dget(au_h_dptr(parent, bdst)); + au_set_h_dptr(parent, bdst, NULL); + au_set_h_dptr(parent, bdst, dget(h_orph)); + h_tmpdir = h_orph->d_inode; + au_set_h_iptr(dir, bdst, NULL, 0); + au_set_h_iptr(dir, bdst, au_igrab(h_tmpdir), /*flags*/0); + + /* this temporary unlock is safe */ + if (file) + h_dentry = au_h_fptr(file, au_fbstart(file))->f_dentry; + else + h_dentry = au_h_dptr(dentry, au_dbstart(dentry)); + h_inode = h_dentry->d_inode; + IMustLock(h_inode); + mutex_unlock(&h_inode->i_mutex); + mutex_lock_nested(&h_tmpdir->i_mutex, AuLsc_I_PARENT3); + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + } + + if (!au_test_h_perm_sio(h_tmpdir, MAY_EXEC | MAY_WRITE)) + err = au_cpup_wh(dentry, bdst, len, file); + else { + struct au_cpup_wh_args args = { + .errp = &err, + .dentry = dentry, + .bdst = bdst, + .len = len, + .file = file + }; + wkq_err = au_wkq_wait(au_call_cpup_wh, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + if (h_orph) { + mutex_unlock(&h_tmpdir->i_mutex); + au_set_h_iptr(dir, bdst, NULL, 0); + au_set_h_iptr(dir, bdst, au_igrab(h_dir), /*flags*/0); + au_set_h_dptr(parent, bdst, NULL); + au_set_h_dptr(parent, bdst, h_parent); + } + iput(h_dir); + dput(parent); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * generic routine for both of copy-up and copy-down. + */ +/* cf. revalidate function in file.c */ +int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, + int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, + struct dentry *h_parent, void *arg), + void *arg) +{ + int err; + struct au_pin pin; + struct dentry *d, *parent, *h_parent, *real_parent; + + err = 0; + parent = dget_parent(dentry); + if (IS_ROOT(parent)) + goto out; + + au_pin_init(&pin, dentry, bdst, AuLsc_DI_PARENT2, AuLsc_I_PARENT2, + au_opt_udba(dentry->d_sb), AuPin_MNT_WRITE); + + /* do not use au_dpage */ + real_parent = parent; + while (1) { + dput(parent); + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bdst); + if (h_parent) + goto out; /* success */ + + /* find top dir which is necessary to cpup */ + do { + d = parent; + dput(parent); + parent = dget_parent(d); + di_read_lock_parent3(parent, !AuLock_IR); + h_parent = au_h_dptr(parent, bdst); + di_read_unlock(parent, !AuLock_IR); + } while (!h_parent); + + if (d != real_parent) + di_write_lock_child3(d); + + /* somebody else might create while we were sleeping */ + if (!au_h_dptr(d, bdst) || !au_h_dptr(d, bdst)->d_inode) { + if (au_h_dptr(d, bdst)) + au_update_dbstart(d); + + au_pin_set_dentry(&pin, d); + err = au_do_pin(&pin); + if (!err) { + err = cp(d, bdst, h_parent, arg); + au_unpin(&pin); + } + } + + if (d != real_parent) + di_write_unlock(d); + if (unlikely(err)) + break; + } + + out: + dput(parent); + return err; +} + +static int au_cpup_dir(struct dentry *dentry, aufs_bindex_t bdst, + struct dentry *h_parent __maybe_unused , + void *arg __maybe_unused) +{ + return au_sio_cpup_simple(dentry, bdst, -1, AuCpup_DTIME); +} + +int au_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + return au_cp_dirs(dentry, bdst, au_cpup_dir, NULL); +} + +int au_test_and_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + int err; + struct dentry *parent; + struct inode *dir; + + parent = dget_parent(dentry); + dir = parent->d_inode; + err = 0; + if (au_h_iptr(dir, bdst)) + goto out; + + di_read_unlock(parent, AuLock_IR); + di_write_lock_parent(parent); + /* someone else might change our inode while we were sleeping */ + if (!au_h_iptr(dir, bdst)) + err = au_cpup_dirs(dentry, bdst); + di_downgrade_lock(parent, AuLock_IR); + + out: + dput(parent); + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/wkq.h +++ linux-2.6.32/ubuntu/aufs/wkq.h @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * workqueue for asynchronous/super-io operations + * todo: try new credentials management scheme + */ + +#ifndef __AUFS_WKQ_H__ +#define __AUFS_WKQ_H__ + +#ifdef __KERNEL__ + +#include +#include +#include + +struct super_block; + +/* ---------------------------------------------------------------------- */ + +/* + * in the next operation, wait for the 'nowait' tasks in system-wide workqueue + */ +struct au_nowait_tasks { + atomic_t nw_len; + wait_queue_head_t nw_wq; +}; + +/* ---------------------------------------------------------------------- */ + +typedef void (*au_wkq_func_t)(void *args); + +/* wkq flags */ +#define AuWkq_WAIT 1 +#define au_ftest_wkq(flags, name) ((flags) & AuWkq_##name) +#define au_fset_wkq(flags, name) { (flags) |= AuWkq_##name; } +#define au_fclr_wkq(flags, name) { (flags) &= ~AuWkq_##name; } + +/* wkq.c */ +int au_wkq_wait(au_wkq_func_t func, void *args); +int au_wkq_nowait(au_wkq_func_t func, void *args, struct super_block *sb); +void au_nwt_init(struct au_nowait_tasks *nwt); +int __init au_wkq_init(void); +void au_wkq_fin(void); + +/* ---------------------------------------------------------------------- */ + +static inline int au_test_wkq(struct task_struct *tsk) +{ + return !tsk->mm && !strcmp(tsk->comm, AUFS_WKQ_NAME); +} + +static inline void au_nwt_done(struct au_nowait_tasks *nwt) +{ + if (!atomic_dec_return(&nwt->nw_len)) + wake_up_all(&nwt->nw_wq); +} + +static inline int au_nwt_flush(struct au_nowait_tasks *nwt) +{ + wait_event(nwt->nw_wq, !atomic_read(&nwt->nw_len)); + return 0; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_WKQ_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/vfsub.h +++ linux-2.6.32/ubuntu/aufs/vfsub.h @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sub-routines for VFS + */ + +#ifndef __AUFS_VFSUB_H__ +#define __AUFS_VFSUB_H__ + +#ifdef __KERNEL__ + +#include +#include + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for lower inode */ +/* default MAX_LOCKDEP_SUBCLASSES(8) is not enough */ +/* reduce? gave up. */ +enum { + AuLsc_I_Begin = I_MUTEX_QUOTA, /* 4 */ + AuLsc_I_PARENT, /* lower inode, parent first */ + AuLsc_I_PARENT2, /* copyup dirs */ + AuLsc_I_PARENT3, /* copyup wh */ + AuLsc_I_CHILD, + AuLsc_I_CHILD2, + AuLsc_I_End +}; + +/* to debug easier, do not make them inlined functions */ +#define MtxMustLock(mtx) AuDebugOn(!mutex_is_locked(mtx)) +#define IMustLock(i) MtxMustLock(&(i)->i_mutex) + +/* ---------------------------------------------------------------------- */ + +static inline void vfsub_copy_inode_size(struct inode *inode, + struct inode *h_inode) +{ + spin_lock(&inode->i_lock); + fsstack_copy_inode_size(inode, h_inode); + spin_unlock(&inode->i_lock); +} + +int vfsub_update_h_iattr(struct path *h_path, int *did); +struct file *vfsub_filp_open(const char *path, int oflags, int mode); +struct file *vfsub_dentry_open(struct path *path, int flags, + const struct cred *cred); +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path); +struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent, + int len); +struct dentry *vfsub_lookup_hash(struct nameidata *nd); + +/* ---------------------------------------------------------------------- */ + +struct au_hinode; +struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2); +void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2); + +int vfsub_create(struct inode *dir, struct path *path, int mode); +int vfsub_symlink(struct inode *dir, struct path *path, + const char *symname); +int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev); +int vfsub_link(struct dentry *src_dentry, struct inode *dir, + struct path *path); +int vfsub_rename(struct inode *src_hdir, struct dentry *src_dentry, + struct inode *hdir, struct path *path); +int vfsub_mkdir(struct inode *dir, struct path *path, int mode); +int vfsub_rmdir(struct inode *dir, struct path *path); + +int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode); +int vfsub_sio_rmdir(struct inode *dir, struct path *path); +int vfsub_sio_notify_change(struct path *path, struct iattr *ia); +int vfsub_notify_change(struct path *path, struct iattr *ia); +int vfsub_unlink(struct inode *dir, struct path *path, int force); + +/* ---------------------------------------------------------------------- */ + +ssize_t vfsub_read_u(struct file *file, char __user *ubuf, size_t count, + loff_t *ppos); +ssize_t vfsub_read_k(struct file *file, void *kbuf, size_t count, + loff_t *ppos); +ssize_t vfsub_write_u(struct file *file, const char __user *ubuf, size_t count, + loff_t *ppos); +ssize_t vfsub_write_k(struct file *file, void *kbuf, size_t count, + loff_t *ppos); +int vfsub_readdir(struct file *file, filldir_t filldir, void *arg); + +long vfsub_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); +long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags); +int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr, + struct file *h_file); + +static inline void vfsub_file_accessed(struct file *h_file) +{ + file_accessed(h_file); + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); /*ignore*/ +} + +static inline void vfsub_touch_atime(struct vfsmount *h_mnt, + struct dentry *h_dentry) +{ + struct path h_path = { + .dentry = h_dentry, + .mnt = h_mnt + }; + touch_atime(h_mnt, h_dentry); + vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ +} + +/* ---------------------------------------------------------------------- */ + +static inline loff_t vfsub_llseek(struct file *file, loff_t offset, int origin) +{ + loff_t err; + + /* lockdep_off(); */ + err = vfs_llseek(file, offset, origin); + /* lockdep_on(); */ + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* dirty workaround for strict type of fmode_t */ +union vfsub_fmu { + fmode_t fm; + unsigned int ui; +}; + +static inline unsigned int vfsub_fmode_to_uint(fmode_t fm) +{ + union vfsub_fmu u = { + .fm = fm + }; + + BUILD_BUG_ON(sizeof(u.fm) != sizeof(u.ui)); + + return u.ui; +} + +static inline fmode_t vfsub_uint_to_fmode(unsigned int ui) +{ + union vfsub_fmu u = { + .ui = ui + }; + + return u.fm; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_VFSUB_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/inode.h +++ linux-2.6.32/ubuntu/aufs/inode.h @@ -0,0 +1,497 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * inode operations + */ + +#ifndef __AUFS_INODE_H__ +#define __AUFS_INODE_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include "rwsem.h" + +struct vfsmount; + +struct au_hinotify { +#ifdef CONFIG_AUFS_HINOTIFY + struct inotify_watch hin_watch; + struct inode *hin_aufs_inode; /* no get/put */ +#endif +}; + +struct au_hinode { + struct inode *hi_inode; + aufs_bindex_t hi_id; +#ifdef CONFIG_AUFS_HINOTIFY + struct au_hinotify *hi_notify; +#endif + + /* reference to the copied-up whiteout with get/put */ + struct dentry *hi_whdentry; +}; + +struct au_vdir; +struct au_iinfo { + atomic_t ii_generation; + struct super_block *ii_hsb1; /* no get/put */ + + struct au_rwsem ii_rwsem; + aufs_bindex_t ii_bstart, ii_bend; + __u32 ii_higen; + struct au_hinode *ii_hinode; + struct au_vdir *ii_vdir; +}; + +struct au_icntnr { + struct au_iinfo iinfo; + struct inode vfs_inode; +}; + +/* au_pin flags */ +#define AuPin_DI_LOCKED 1 +#define AuPin_MNT_WRITE (1 << 1) +#define au_ftest_pin(flags, name) ((flags) & AuPin_##name) +#define au_fset_pin(flags, name) { (flags) |= AuPin_##name; } +#define au_fclr_pin(flags, name) { (flags) &= ~AuPin_##name; } + +struct au_pin { + /* input */ + struct dentry *dentry; + unsigned int udba; + unsigned char lsc_di, lsc_hi, flags; + aufs_bindex_t bindex; + + /* output */ + struct dentry *parent; + struct au_hinode *hdir; + struct vfsmount *h_mnt; +}; + +/* ---------------------------------------------------------------------- */ + +static inline struct au_iinfo *au_ii(struct inode *inode) +{ + struct au_iinfo *iinfo; + + iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); + if (iinfo->ii_hinode) + return iinfo; + return NULL; /* debugging bad_inode case */ +} + +/* ---------------------------------------------------------------------- */ + +/* inode.c */ +struct inode *au_igrab(struct inode *inode); +int au_refresh_hinode_self(struct inode *inode, int do_attr); +int au_refresh_hinode(struct inode *inode, struct dentry *dentry); +int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + unsigned int d_type, ino_t *ino); +struct inode *au_new_inode(struct dentry *dentry, int must_new); +int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, + struct inode *inode); +int au_test_h_perm(struct inode *h_inode, int mask); +int au_test_h_perm_sio(struct inode *h_inode, int mask); + +static inline int au_wh_ino(struct super_block *sb, aufs_bindex_t bindex, + ino_t h_ino, unsigned int d_type, ino_t *ino) +{ +#ifdef CONFIG_AUFS_SHWH + return au_ino(sb, bindex, h_ino, d_type, ino); +#else + return 0; +#endif +} + +/* i_op.c */ +extern struct inode_operations aufs_iop, aufs_symlink_iop, aufs_dir_iop; + +/* au_wr_dir flags */ +#define AuWrDir_ADD_ENTRY 1 +#define AuWrDir_ISDIR (1 << 1) +#define au_ftest_wrdir(flags, name) ((flags) & AuWrDir_##name) +#define au_fset_wrdir(flags, name) { (flags) |= AuWrDir_##name; } +#define au_fclr_wrdir(flags, name) { (flags) &= ~AuWrDir_##name; } + +struct au_wr_dir_args { + aufs_bindex_t force_btgt; + unsigned char flags; +}; +int au_wr_dir(struct dentry *dentry, struct dentry *src_dentry, + struct au_wr_dir_args *args); + +struct dentry *au_pinned_h_parent(struct au_pin *pin); +void au_pin_init(struct au_pin *pin, struct dentry *dentry, + aufs_bindex_t bindex, int lsc_di, int lsc_hi, + unsigned int udba, unsigned char flags); +int au_pin(struct au_pin *pin, struct dentry *dentry, aufs_bindex_t bindex, + unsigned int udba, unsigned char flags) __must_check; +int au_do_pin(struct au_pin *pin) __must_check; +void au_unpin(struct au_pin *pin); + +/* i_op_add.c */ +int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir); +int aufs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev); +int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname); +int aufs_create(struct inode *dir, struct dentry *dentry, int mode, + struct nameidata *nd); +int aufs_link(struct dentry *src_dentry, struct inode *dir, + struct dentry *dentry); +int aufs_mkdir(struct inode *dir, struct dentry *dentry, int mode); + +/* i_op_del.c */ +int au_wr_dir_need_wh(struct dentry *dentry, int isdir, aufs_bindex_t *bcpup); +int au_may_del(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir); +int aufs_unlink(struct inode *dir, struct dentry *dentry); +int aufs_rmdir(struct inode *dir, struct dentry *dentry); + +/* i_op_ren.c */ +int au_wbr(struct dentry *dentry, aufs_bindex_t btgt); +int aufs_rename(struct inode *src_dir, struct dentry *src_dentry, + struct inode *dir, struct dentry *dentry); + +/* iinfo.c */ +struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex); +void au_hiput(struct au_hinode *hinode); +void au_set_ibstart(struct inode *inode, aufs_bindex_t bindex); +void au_set_hi_wh(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_wh); +unsigned int au_hi_flags(struct inode *inode, int isdir); + +/* hinode flags */ +#define AuHi_XINO 1 +#define AuHi_HINOTIFY (1 << 1) +#define au_ftest_hi(flags, name) ((flags) & AuHi_##name) +#define au_fset_hi(flags, name) { (flags) |= AuHi_##name; } +#define au_fclr_hi(flags, name) { (flags) &= ~AuHi_##name; } + +#ifndef CONFIG_AUFS_HINOTIFY +#undef AuHi_HINOTIFY +#define AuHi_HINOTIFY 0 +#endif + +void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex, + struct inode *h_inode, unsigned int flags); + +void au_update_iigen(struct inode *inode); +void au_update_brange(struct inode *inode, int do_put_zero); + +int au_iinfo_init(struct inode *inode); +void au_iinfo_fin(struct inode *inode); +int au_ii_realloc(struct au_iinfo *iinfo, int nbr); + +/* plink.c */ +void au_plink_block_maintain(struct super_block *sb); +#ifdef CONFIG_AUFS_DEBUG +void au_plink_list(struct super_block *sb); +#else +static inline void au_plink_list(struct super_block *sb) +{ + /* nothing */ +} +#endif +int au_plink_test(struct inode *inode); +struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex); +void au_plink_append(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_dentry); +void au_plink_put(struct super_block *sb); +void au_plink_half_refresh(struct super_block *sb, aufs_bindex_t br_id); +long au_plink_ioctl(struct file *file, unsigned int cmd); + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for iinfo */ +enum { + AuLsc_II_CHILD, /* child first */ + AuLsc_II_CHILD2, /* rename(2), link(2), and cpup at hinotify */ + AuLsc_II_CHILD3, /* copyup dirs */ + AuLsc_II_PARENT, /* see AuLsc_I_PARENT in vfsub.h */ + AuLsc_II_PARENT2, + AuLsc_II_PARENT3, /* copyup dirs */ + AuLsc_II_NEW_CHILD +}; + +/* + * ii_read_lock_child, ii_write_lock_child, + * ii_read_lock_child2, ii_write_lock_child2, + * ii_read_lock_child3, ii_write_lock_child3, + * ii_read_lock_parent, ii_write_lock_parent, + * ii_read_lock_parent2, ii_write_lock_parent2, + * ii_read_lock_parent3, ii_write_lock_parent3, + * ii_read_lock_new_child, ii_write_lock_new_child, + */ +#define AuReadLockFunc(name, lsc) \ +static inline void ii_read_lock_##name(struct inode *i) \ +{ \ + au_rw_read_lock_nested(&au_ii(i)->ii_rwsem, AuLsc_II_##lsc); \ +} + +#define AuWriteLockFunc(name, lsc) \ +static inline void ii_write_lock_##name(struct inode *i) \ +{ \ + au_rw_write_lock_nested(&au_ii(i)->ii_rwsem, AuLsc_II_##lsc); \ +} + +#define AuRWLockFuncs(name, lsc) \ + AuReadLockFunc(name, lsc) \ + AuWriteLockFunc(name, lsc) + +AuRWLockFuncs(child, CHILD); +AuRWLockFuncs(child2, CHILD2); +AuRWLockFuncs(child3, CHILD3); +AuRWLockFuncs(parent, PARENT); +AuRWLockFuncs(parent2, PARENT2); +AuRWLockFuncs(parent3, PARENT3); +AuRWLockFuncs(new_child, NEW_CHILD); + +#undef AuReadLockFunc +#undef AuWriteLockFunc +#undef AuRWLockFuncs + +/* + * ii_read_unlock, ii_write_unlock, ii_downgrade_lock + */ +AuSimpleUnlockRwsemFuncs(ii, struct inode *i, &au_ii(i)->ii_rwsem); + +#define IiMustNoWaiters(i) AuRwMustNoWaiters(&au_ii(i)->ii_rwsem) +#define IiMustAnyLock(i) AuRwMustAnyLock(&au_ii(i)->ii_rwsem) +#define IiMustWriteLock(i) AuRwMustWriteLock(&au_ii(i)->ii_rwsem) + +/* ---------------------------------------------------------------------- */ + +static inline unsigned int au_iigen(struct inode *inode) +{ + return atomic_read(&au_ii(inode)->ii_generation); +} + +/* tiny test for inode number */ +/* tmpfs generation is too rough */ +static inline int au_test_higen(struct inode *inode, struct inode *h_inode) +{ + struct au_iinfo *iinfo; + + iinfo = au_ii(inode); + AuRwMustAnyLock(&iinfo->ii_rwsem); + return !(iinfo->ii_hsb1 == h_inode->i_sb + && iinfo->ii_higen == h_inode->i_generation); +} + +/* ---------------------------------------------------------------------- */ + +static inline aufs_bindex_t au_ii_br_id(struct inode *inode, + aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_hinode[0 + bindex].hi_id; +} + +static inline aufs_bindex_t au_ibstart(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_bstart; +} + +static inline aufs_bindex_t au_ibend(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_bend; +} + +static inline struct au_vdir *au_ivdir(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_vdir; +} + +static inline struct dentry *au_hi_wh(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_hinode[0 + bindex].hi_whdentry; +} + +static inline void au_set_ibend(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_bend = bindex; +} + +static inline void au_set_ivdir(struct inode *inode, struct au_vdir *vdir) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_vdir = vdir; +} + +static inline struct au_hinode *au_hi(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_hinode + bindex; +} + +/* ---------------------------------------------------------------------- */ + +static inline struct dentry *au_pinned_parent(struct au_pin *pin) +{ + if (pin) + return pin->parent; + return NULL; +} + +static inline struct inode *au_pinned_h_dir(struct au_pin *pin) +{ + if (pin && pin->hdir) + return pin->hdir->hi_inode; + return NULL; +} + +static inline struct au_hinode *au_pinned_hdir(struct au_pin *pin) +{ + if (pin) + return pin->hdir; + return NULL; +} + +static inline void au_pin_set_dentry(struct au_pin *pin, struct dentry *dentry) +{ + if (pin) + pin->dentry = dentry; +} + +static inline void au_pin_set_parent_lflag(struct au_pin *pin, + unsigned char lflag) +{ + if (pin) { + /* dirty macros require brackets */ + if (lflag) { + au_fset_pin(pin->flags, DI_LOCKED); + } else { + au_fclr_pin(pin->flags, DI_LOCKED); + } + } +} + +static inline void au_pin_set_parent(struct au_pin *pin, struct dentry *parent) +{ + if (pin) { + dput(pin->parent); + pin->parent = dget(parent); + } +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_HINOTIFY +/* hinotify.c */ +int au_hin_alloc(struct au_hinode *hinode, struct inode *inode, + struct inode *h_inode); +void au_hin_free(struct au_hinode *hinode); +void au_hin_ctl(struct au_hinode *hinode, int do_set); +void au_reset_hinotify(struct inode *inode, unsigned int flags); + +int __init au_hinotify_init(void); +void au_hinotify_fin(void); + +static inline +void au_hin_init(struct au_hinode *hinode, struct au_hinotify *val) +{ + hinode->hi_notify = val; +} + +static inline void au_iigen_dec(struct inode *inode) +{ + atomic_dec_return(&au_ii(inode)->ii_generation); +} + +#else +static inline +int au_hin_alloc(struct au_hinode *hinode __maybe_unused, + struct inode *inode __maybe_unused, + struct inode *h_inode __maybe_unused) +{ + return -EOPNOTSUPP; +} + +static inline void au_hin_free(struct au_hinode *hinode __maybe_unused) +{ + /* nothing */ +} + +static inline void au_hin_ctl(struct au_hinode *hinode __maybe_unused, + int do_set __maybe_unused) +{ + /* nothing */ +} + +static inline void au_reset_hinotify(struct inode *inode __maybe_unused, + unsigned int flags __maybe_unused) +{ + /* nothing */ +} + +static inline int au_hinotify_init(void) +{ + return 0; +} + +#define au_hinotify_fin() do {} while (0) + +static inline +void au_hin_init(struct au_hinode *hinode __maybe_unused, + struct au_hinotify *val __maybe_unused) +{ + /* empty */ +} +#endif /* CONFIG_AUFS_HINOTIFY */ + +static inline void au_hin_suspend(struct au_hinode *hdir) +{ + au_hin_ctl(hdir, /*do_set*/0); +} + +static inline void au_hin_resume(struct au_hinode *hdir) +{ + au_hin_ctl(hdir, /*do_set*/1); +} + +static inline void au_hin_imtx_lock(struct au_hinode *hdir) +{ + mutex_lock(&hdir->hi_inode->i_mutex); + au_hin_suspend(hdir); +} + +static inline void au_hin_imtx_lock_nested(struct au_hinode *hdir, + unsigned int sc __maybe_unused) +{ + mutex_lock_nested(&hdir->hi_inode->i_mutex, sc); + au_hin_suspend(hdir); +} + +static inline void au_hin_imtx_unlock(struct au_hinode *hdir) +{ + au_hin_resume(hdir); + mutex_unlock(&hdir->hi_inode->i_mutex); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_INODE_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/dentry.c +++ linux-2.6.32/ubuntu/aufs/dentry.c @@ -0,0 +1,880 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * lookup and dentry operations + */ + +#include +#include "aufs.h" + +static void au_h_nd(struct nameidata *h_nd, struct nameidata *nd) +{ + if (nd) { + *h_nd = *nd; + + /* + * gave up supporting LOOKUP_CREATE/OPEN for lower fs, + * due to whiteout and branch permission. + */ + h_nd->flags &= ~(/*LOOKUP_PARENT |*/ LOOKUP_OPEN | LOOKUP_CREATE + | LOOKUP_FOLLOW); + /* unnecessary? */ + h_nd->intent.open.file = NULL; + } else + memset(h_nd, 0, sizeof(*h_nd)); +} + +struct au_lkup_one_args { + struct dentry **errp; + struct qstr *name; + struct dentry *h_parent; + struct au_branch *br; + struct nameidata *nd; +}; + +struct dentry *au_lkup_one(struct qstr *name, struct dentry *h_parent, + struct au_branch *br, struct nameidata *nd) +{ + struct dentry *h_dentry; + int err; + struct nameidata h_nd; + + if (au_test_fs_null_nd(h_parent->d_sb)) + return vfsub_lookup_one_len(name->name, h_parent, name->len); + + au_h_nd(&h_nd, nd); + h_nd.path.dentry = h_parent; + h_nd.path.mnt = br->br_mnt; + + err = __lookup_one_len(name->name, &h_nd.last, NULL, name->len); + h_dentry = ERR_PTR(err); + if (!err) { + path_get(&h_nd.path); + h_dentry = vfsub_lookup_hash(&h_nd); + path_put(&h_nd.path); + } + + AuTraceErrPtr(h_dentry); + return h_dentry; +} + +static void au_call_lkup_one(void *args) +{ + struct au_lkup_one_args *a = args; + *a->errp = au_lkup_one(a->name, a->h_parent, a->br, a->nd); +} + +#define AuLkup_ALLOW_NEG 1 +#define au_ftest_lkup(flags, name) ((flags) & AuLkup_##name) +#define au_fset_lkup(flags, name) { (flags) |= AuLkup_##name; } +#define au_fclr_lkup(flags, name) { (flags) &= ~AuLkup_##name; } + +struct au_do_lookup_args { + unsigned int flags; + mode_t type; + struct nameidata *nd; +}; + +/* + * returns positive/negative dentry, NULL or an error. + * NULL means whiteout-ed or not-found. + */ +static struct dentry* +au_do_lookup(struct dentry *h_parent, struct dentry *dentry, + aufs_bindex_t bindex, struct qstr *wh_name, + struct au_do_lookup_args *args) +{ + struct dentry *h_dentry; + struct inode *h_inode, *inode; + struct qstr *name; + struct au_branch *br; + int wh_found, opq; + unsigned char wh_able; + const unsigned char allow_neg = !!au_ftest_lkup(args->flags, ALLOW_NEG); + + name = &dentry->d_name; + wh_found = 0; + br = au_sbr(dentry->d_sb, bindex); + wh_able = !!au_br_whable(br->br_perm); + if (wh_able) + wh_found = au_wh_test(h_parent, wh_name, br, /*try_sio*/0); + h_dentry = ERR_PTR(wh_found); + if (!wh_found) + goto real_lookup; + if (unlikely(wh_found < 0)) + goto out; + + /* We found a whiteout */ + /* au_set_dbend(dentry, bindex); */ + au_set_dbwh(dentry, bindex); + if (!allow_neg) + return NULL; /* success */ + + real_lookup: + h_dentry = au_lkup_one(name, h_parent, br, args->nd); + if (IS_ERR(h_dentry)) + goto out; + + h_inode = h_dentry->d_inode; + if (!h_inode) { + if (!allow_neg) + goto out_neg; + } else if (wh_found + || (args->type && args->type != (h_inode->i_mode & S_IFMT))) + goto out_neg; + + if (au_dbend(dentry) <= bindex) + au_set_dbend(dentry, bindex); + if (au_dbstart(dentry) < 0 || bindex < au_dbstart(dentry)) + au_set_dbstart(dentry, bindex); + au_set_h_dptr(dentry, bindex, h_dentry); + + inode = dentry->d_inode; + if (!h_inode || !S_ISDIR(h_inode->i_mode) || !wh_able + || (inode && !S_ISDIR(inode->i_mode))) + goto out; /* success */ + + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + opq = au_diropq_test(h_dentry, br); + mutex_unlock(&h_inode->i_mutex); + if (opq > 0) + au_set_dbdiropq(dentry, bindex); + else if (unlikely(opq < 0)) { + au_set_h_dptr(dentry, bindex, NULL); + h_dentry = ERR_PTR(opq); + } + goto out; + + out_neg: + dput(h_dentry); + h_dentry = NULL; + out: + return h_dentry; +} + +static int au_test_shwh(struct super_block *sb, const struct qstr *name) +{ + if (unlikely(!au_opt_test(au_mntflags(sb), SHWH) + && !strncmp(name->name, AUFS_WH_PFX, AUFS_WH_PFX_LEN))) + return -EPERM; + return 0; +} + +/* + * returns the number of lower positive dentries, + * otherwise an error. + * can be called at unlinking with @type is zero. + */ +int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type, + struct nameidata *nd) +{ + int npositive, err; + aufs_bindex_t bindex, btail, bdiropq; + unsigned char isdir; + struct qstr whname; + struct au_do_lookup_args args = { + .flags = 0, + .type = type, + .nd = nd + }; + const struct qstr *name = &dentry->d_name; + struct dentry *parent; + struct inode *inode; + + parent = dget_parent(dentry); + err = au_test_shwh(dentry->d_sb, name); + if (unlikely(err)) + goto out; + + err = au_wh_name_alloc(&whname, name); + if (unlikely(err)) + goto out; + + inode = dentry->d_inode; + isdir = !!(inode && S_ISDIR(inode->i_mode)); + if (!type) + au_fset_lkup(args.flags, ALLOW_NEG); + + npositive = 0; + btail = au_dbtaildir(parent); + for (bindex = bstart; bindex <= btail; bindex++) { + struct dentry *h_parent, *h_dentry; + struct inode *h_inode, *h_dir; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) { + if (h_dentry->d_inode) + npositive++; + if (type != S_IFDIR) + break; + continue; + } + h_parent = au_h_dptr(parent, bindex); + if (!h_parent) + continue; + h_dir = h_parent->d_inode; + if (!h_dir || !S_ISDIR(h_dir->i_mode)) + continue; + + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + h_dentry = au_do_lookup(h_parent, dentry, bindex, &whname, + &args); + mutex_unlock(&h_dir->i_mutex); + err = PTR_ERR(h_dentry); + if (IS_ERR(h_dentry)) + goto out_wh; + au_fclr_lkup(args.flags, ALLOW_NEG); + + if (au_dbwh(dentry) >= 0) + break; + if (!h_dentry) + continue; + h_inode = h_dentry->d_inode; + if (!h_inode) + continue; + npositive++; + if (!args.type) + args.type = h_inode->i_mode & S_IFMT; + if (args.type != S_IFDIR) + break; + else if (isdir) { + /* the type of lower may be different */ + bdiropq = au_dbdiropq(dentry); + if (bdiropq >= 0 && bdiropq <= bindex) + break; + } + } + + if (npositive) { + AuLabel(positive); + au_update_dbstart(dentry); + } + err = npositive; + if (unlikely(!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) + && au_dbstart(dentry) < 0)) + /* both of real entry and whiteout found */ + err = -EIO; + + out_wh: + kfree(whname.name); + out: + dput(parent); + return err; +} + +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent, + struct au_branch *br) +{ + struct dentry *dentry; + int wkq_err; + + if (!au_test_h_perm_sio(parent->d_inode, MAY_EXEC)) + dentry = au_lkup_one(name, parent, br, /*nd*/NULL); + else { + struct au_lkup_one_args args = { + .errp = &dentry, + .name = name, + .h_parent = parent, + .br = br, + .nd = NULL + }; + + wkq_err = au_wkq_wait(au_call_lkup_one, &args); + if (unlikely(wkq_err)) + dentry = ERR_PTR(wkq_err); + } + + return dentry; +} + +/* + * lookup @dentry on @bindex which should be negative. + */ +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex) +{ + int err; + struct dentry *parent, *h_parent, *h_dentry; + struct qstr *name; + + name = &dentry->d_name; + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bindex); + h_dentry = au_sio_lkup_one(name, h_parent, + au_sbr(dentry->d_sb, bindex)); + err = PTR_ERR(h_dentry); + if (IS_ERR(h_dentry)) + goto out; + if (unlikely(h_dentry->d_inode)) { + err = -EIO; + AuIOErr("b%d %.*s should be negative.\n", + bindex, AuDLNPair(h_dentry)); + dput(h_dentry); + goto out; + } + + if (bindex < au_dbstart(dentry)) + au_set_dbstart(dentry, bindex); + if (au_dbend(dentry) < bindex) + au_set_dbend(dentry, bindex); + au_set_h_dptr(dentry, bindex, h_dentry); + err = 0; + + out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* subset of struct inode */ +struct au_iattr { + unsigned long i_ino; + /* unsigned int i_nlink; */ + uid_t i_uid; + gid_t i_gid; + u64 i_version; +/* + loff_t i_size; + blkcnt_t i_blocks; +*/ + umode_t i_mode; +}; + +static void au_iattr_save(struct au_iattr *ia, struct inode *h_inode) +{ + ia->i_ino = h_inode->i_ino; + /* ia->i_nlink = h_inode->i_nlink; */ + ia->i_uid = h_inode->i_uid; + ia->i_gid = h_inode->i_gid; + ia->i_version = h_inode->i_version; +/* + ia->i_size = h_inode->i_size; + ia->i_blocks = h_inode->i_blocks; +*/ + ia->i_mode = (h_inode->i_mode & S_IFMT); +} + +static int au_iattr_test(struct au_iattr *ia, struct inode *h_inode) +{ + return ia->i_ino != h_inode->i_ino + /* || ia->i_nlink != h_inode->i_nlink */ + || ia->i_uid != h_inode->i_uid + || ia->i_gid != h_inode->i_gid + || ia->i_version != h_inode->i_version +/* + || ia->i_size != h_inode->i_size + || ia->i_blocks != h_inode->i_blocks +*/ + || ia->i_mode != (h_inode->i_mode & S_IFMT); +} + +static int au_h_verify_dentry(struct dentry *h_dentry, struct dentry *h_parent, + struct au_branch *br) +{ + int err; + struct au_iattr ia; + struct inode *h_inode; + struct dentry *h_d; + struct super_block *h_sb; + + err = 0; + memset(&ia, -1, sizeof(ia)); + h_sb = h_dentry->d_sb; + h_inode = h_dentry->d_inode; + if (h_inode) + au_iattr_save(&ia, h_inode); + else if (au_test_nfs(h_sb) || au_test_fuse(h_sb)) + /* nfs d_revalidate may return 0 for negative dentry */ + /* fuse d_revalidate always return 0 for negative dentry */ + goto out; + + /* main purpose is namei.c:cached_lookup() and d_revalidate */ + h_d = au_lkup_one(&h_dentry->d_name, h_parent, br, /*nd*/NULL); + err = PTR_ERR(h_d); + if (IS_ERR(h_d)) + goto out; + + err = 0; + if (unlikely(h_d != h_dentry + || h_d->d_inode != h_inode + || (h_inode && au_iattr_test(&ia, h_inode)))) + err = au_busy_or_stale(); + dput(h_d); + + out: + AuTraceErr(err); + return err; +} + +int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir, + struct dentry *h_parent, struct au_branch *br) +{ + int err; + + err = 0; + if (udba == AuOpt_UDBA_REVAL) { + IMustLock(h_dir); + err = (h_dentry->d_parent->d_inode != h_dir); + } else if (udba == AuOpt_UDBA_HINOTIFY) + err = au_h_verify_dentry(h_dentry, h_parent, br); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void au_do_refresh_hdentry(struct au_hdentry *p, struct au_dinfo *dinfo, + struct dentry *parent) +{ + struct dentry *h_d, *h_dp; + struct au_hdentry tmp, *q; + struct super_block *sb; + aufs_bindex_t new_bindex, bindex, bend, bwh, bdiropq; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + bend = dinfo->di_bend; + bwh = dinfo->di_bwh; + bdiropq = dinfo->di_bdiropq; + for (bindex = dinfo->di_bstart; bindex <= bend; bindex++, p++) { + h_d = p->hd_dentry; + if (!h_d) + continue; + + h_dp = dget_parent(h_d); + if (h_dp == au_h_dptr(parent, bindex)) { + dput(h_dp); + continue; + } + + new_bindex = au_find_dbindex(parent, h_dp); + dput(h_dp); + if (dinfo->di_bwh == bindex) + bwh = new_bindex; + if (dinfo->di_bdiropq == bindex) + bdiropq = new_bindex; + if (new_bindex < 0) { + au_hdput(p); + p->hd_dentry = NULL; + continue; + } + + /* swap two lower dentries, and loop again */ + q = dinfo->di_hdentry + new_bindex; + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hd_dentry) { + bindex--; + p--; + } + } + + sb = parent->d_sb; + dinfo->di_bwh = -1; + if (bwh >= 0 && bwh <= au_sbend(sb) && au_sbr_whable(sb, bwh)) + dinfo->di_bwh = bwh; + + dinfo->di_bdiropq = -1; + if (bdiropq >= 0 + && bdiropq <= au_sbend(sb) + && au_sbr_whable(sb, bdiropq)) + dinfo->di_bdiropq = bdiropq; + + bend = au_dbend(parent); + p = dinfo->di_hdentry; + for (bindex = 0; bindex <= bend; bindex++, p++) + if (p->hd_dentry) { + dinfo->di_bstart = bindex; + break; + } + + p = dinfo->di_hdentry + bend; + for (bindex = bend; bindex >= 0; bindex--, p--) + if (p->hd_dentry) { + dinfo->di_bend = bindex; + break; + } +} + +/* + * returns the number of found lower positive dentries, + * otherwise an error. + */ +int au_refresh_hdentry(struct dentry *dentry, mode_t type) +{ + int npositive, err; + unsigned int sigen; + aufs_bindex_t bstart; + struct au_dinfo *dinfo; + struct super_block *sb; + struct dentry *parent; + + DiMustWriteLock(dentry); + + sb = dentry->d_sb; + AuDebugOn(IS_ROOT(dentry)); + sigen = au_sigen(sb); + parent = dget_parent(dentry); + AuDebugOn(au_digen(parent) != sigen + || au_iigen(parent->d_inode) != sigen); + + dinfo = au_di(dentry); + err = au_di_realloc(dinfo, au_sbend(sb) + 1); + npositive = err; + if (unlikely(err)) + goto out; + au_do_refresh_hdentry(dinfo->di_hdentry + dinfo->di_bstart, dinfo, + parent); + + npositive = 0; + bstart = au_dbstart(parent); + if (type != S_IFDIR && dinfo->di_bstart == bstart) + goto out_dgen; /* success */ + + npositive = au_lkup_dentry(dentry, bstart, type, /*nd*/NULL); + if (npositive < 0) + goto out; + if (dinfo->di_bwh >= 0 && dinfo->di_bwh <= dinfo->di_bstart) + d_drop(dentry); + + out_dgen: + au_update_digen(dentry); + out: + dput(parent); + AuTraceErr(npositive); + return npositive; +} + +static noinline_for_stack +int au_do_h_d_reval(struct dentry *h_dentry, struct nameidata *nd, + struct dentry *dentry, aufs_bindex_t bindex) +{ + int err, valid; + int (*reval)(struct dentry *, struct nameidata *); + + err = 0; + reval = NULL; + if (h_dentry->d_op) + reval = h_dentry->d_op->d_revalidate; + if (!reval) + goto out; + + AuDbg("b%d\n", bindex); + if (au_test_fs_null_nd(h_dentry->d_sb)) + /* it may return tri-state */ + valid = reval(h_dentry, NULL); + else { + struct nameidata h_nd; + int locked; + struct dentry *parent; + + au_h_nd(&h_nd, nd); + parent = nd->path.dentry; + locked = (nd && nd->path.dentry != dentry); + if (locked) + di_read_lock_parent(parent, AuLock_IR); + BUG_ON(bindex > au_dbend(parent)); + h_nd.path.dentry = au_h_dptr(parent, bindex); + BUG_ON(!h_nd.path.dentry); + h_nd.path.mnt = au_sbr(parent->d_sb, bindex)->br_mnt; + path_get(&h_nd.path); + valid = reval(h_dentry, &h_nd); + path_put(&h_nd.path); + if (locked) + di_read_unlock(parent, AuLock_IR); + } + + if (unlikely(valid < 0)) + err = valid; + else if (!valid) + err = -EINVAL; + + out: + AuTraceErr(err); + return err; +} + +/* todo: remove this */ +static int h_d_revalidate(struct dentry *dentry, struct inode *inode, + struct nameidata *nd, int do_udba) +{ + int err; + umode_t mode, h_mode; + aufs_bindex_t bindex, btail, bstart, ibs, ibe; + unsigned char plus, unhashed, is_root, h_plus; + struct inode *first, *h_inode, *h_cached_inode; + struct dentry *h_dentry; + struct qstr *name, *h_name; + + err = 0; + plus = 0; + mode = 0; + first = NULL; + ibs = -1; + ibe = -1; + unhashed = !!d_unhashed(dentry); + is_root = !!IS_ROOT(dentry); + name = &dentry->d_name; + + /* + * Theoretically, REVAL test should be unnecessary in case of INOTIFY. + * But inotify doesn't fire some necessary events, + * IN_ATTRIB for atime/nlink/pageio + * IN_DELETE for NFS dentry + * Let's do REVAL test too. + */ + if (do_udba && inode) { + mode = (inode->i_mode & S_IFMT); + plus = (inode->i_nlink > 0); + first = au_h_iptr(inode, au_ibstart(inode)); + ibs = au_ibstart(inode); + ibe = au_ibend(inode); + } + + bstart = au_dbstart(dentry); + btail = bstart; + if (inode && S_ISDIR(inode->i_mode)) + btail = au_dbtaildir(dentry); + for (bindex = bstart; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + + AuDbg("b%d, %.*s\n", bindex, AuDLNPair(h_dentry)); + h_name = &h_dentry->d_name; + if (unlikely(do_udba + && !is_root + && (unhashed != !!d_unhashed(h_dentry) + || name->len != h_name->len + || memcmp(name->name, h_name->name, name->len)) + )) { + AuDbg("unhash 0x%x 0x%x, %.*s %.*s\n", + unhashed, d_unhashed(h_dentry), + AuDLNPair(dentry), AuDLNPair(h_dentry)); + goto err; + } + + err = au_do_h_d_reval(h_dentry, nd, dentry, bindex); + if (unlikely(err)) + /* do not goto err, to keep the errno */ + break; + + /* todo: plink too? */ + if (!do_udba) + continue; + + /* UDBA tests */ + h_inode = h_dentry->d_inode; + if (unlikely(!!inode != !!h_inode)) + goto err; + + h_plus = plus; + h_mode = mode; + h_cached_inode = h_inode; + if (h_inode) { + h_mode = (h_inode->i_mode & S_IFMT); + h_plus = (h_inode->i_nlink > 0); + } + if (inode && ibs <= bindex && bindex <= ibe) + h_cached_inode = au_h_iptr(inode, bindex); + + if (unlikely(plus != h_plus + || mode != h_mode + || h_cached_inode != h_inode)) + goto err; + continue; + + err: + err = -EINVAL; + break; + } + + return err; +} + +static int simple_reval_dpath(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct dentry *parent; + struct inode *inode; + + inode = dentry->d_inode; + if (au_digen(dentry) == sigen && au_iigen(inode) == sigen) + return 0; + + parent = dget_parent(dentry); + di_read_lock_parent(parent, AuLock_IR); + AuDebugOn(au_digen(parent) != sigen + || au_iigen(parent->d_inode) != sigen); + au_dbg_verify_gen(parent, sigen); + + /* returns a number of positive dentries */ + err = au_refresh_hdentry(dentry, inode->i_mode & S_IFMT); + if (err >= 0) + err = au_refresh_hinode(inode, dentry); + + di_read_unlock(parent, AuLock_IR); + dput(parent); + return err; +} + +int au_reval_dpath(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct dentry *d, *parent; + struct inode *inode; + + if (!au_ftest_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIRS)) + return simple_reval_dpath(dentry, sigen); + + /* slow loop, keep it simple and stupid */ + /* cf: au_cpup_dirs() */ + err = 0; + parent = NULL; + while (au_digen(dentry) != sigen + || au_iigen(dentry->d_inode) != sigen) { + d = dentry; + while (1) { + dput(parent); + parent = dget_parent(d); + if (au_digen(parent) == sigen + && au_iigen(parent->d_inode) == sigen) + break; + d = parent; + } + + inode = d->d_inode; + if (d != dentry) + di_write_lock_child(d); + + /* someone might update our dentry while we were sleeping */ + if (au_digen(d) != sigen || au_iigen(d->d_inode) != sigen) { + di_read_lock_parent(parent, AuLock_IR); + /* returns a number of positive dentries */ + err = au_refresh_hdentry(d, inode->i_mode & S_IFMT); + if (err >= 0) + err = au_refresh_hinode(inode, d); + di_read_unlock(parent, AuLock_IR); + } + + if (d != dentry) + di_write_unlock(d); + dput(parent); + if (unlikely(err)) + break; + } + + return err; +} + +/* + * if valid returns 1, otherwise 0. + */ +static int aufs_d_revalidate(struct dentry *dentry, struct nameidata *nd) +{ + int valid, err; + unsigned int sigen; + unsigned char do_udba; + struct super_block *sb; + struct inode *inode; + + err = -EINVAL; + sb = dentry->d_sb; + inode = dentry->d_inode; + aufs_read_lock(dentry, AuLock_FLUSH | AuLock_DW); + sigen = au_sigen(sb); + if (au_digen(dentry) != sigen) { + AuDebugOn(IS_ROOT(dentry)); + if (inode) + err = au_reval_dpath(dentry, sigen); + if (unlikely(err)) + goto out_dgrade; + AuDebugOn(au_digen(dentry) != sigen); + } + if (inode && au_iigen(inode) != sigen) { + AuDebugOn(IS_ROOT(dentry)); + err = au_refresh_hinode(inode, dentry); + if (unlikely(err)) + goto out_dgrade; + AuDebugOn(au_iigen(inode) != sigen); + } + di_downgrade_lock(dentry, AuLock_IR); + + AuDebugOn(au_digen(dentry) != sigen); + AuDebugOn(inode && au_iigen(inode) != sigen); + err = -EINVAL; + do_udba = !au_opt_test(au_mntflags(sb), UDBA_NONE); + if (do_udba && inode) { + aufs_bindex_t bstart = au_ibstart(inode); + + if (bstart >= 0 + && au_test_higen(inode, au_h_iptr(inode, bstart))) + goto out; + } + + err = h_d_revalidate(dentry, inode, nd, do_udba); + if (unlikely(!err && do_udba && au_dbstart(dentry) < 0)) + /* both of real entry and whiteout found */ + err = -EIO; + goto out; + + out_dgrade: + di_downgrade_lock(dentry, AuLock_IR); + out: + aufs_read_unlock(dentry, AuLock_IR); + AuTraceErr(err); + valid = !err; + if (!valid) + AuDbg("%.*s invalid\n", AuDLNPair(dentry)); + return valid; +} + +static void aufs_d_release(struct dentry *dentry) +{ + struct au_dinfo *dinfo; + aufs_bindex_t bend, bindex; + + dinfo = dentry->d_fsdata; + if (!dinfo) + return; + + /* dentry may not be revalidated */ + bindex = dinfo->di_bstart; + if (bindex >= 0) { + struct au_hdentry *p; + + bend = dinfo->di_bend; + p = dinfo->di_hdentry + bindex; + while (bindex++ <= bend) { + if (p->hd_dentry) + au_hdput(p); + p++; + } + } + kfree(dinfo->di_hdentry); + AuRwDestroy(&dinfo->di_rwsem); + au_cache_free_dinfo(dinfo); + au_hin_di_reinit(dentry); +} + +struct dentry_operations aufs_dop = { + .d_revalidate = aufs_d_revalidate, + .d_release = aufs_d_release +}; --- linux-2.6.32.orig/ubuntu/aufs/module.h +++ linux-2.6.32/ubuntu/aufs/module.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * module initialization and module-global + */ + +#ifndef __AUFS_MODULE_H__ +#define __AUFS_MODULE_H__ + +#ifdef __KERNEL__ + +#include + +struct path; +struct seq_file; + +/* module parameters */ +extern short aufs_nwkq; +extern int sysaufs_brs; + +/* ---------------------------------------------------------------------- */ + +extern int au_dir_roflags; + +void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp); +int au_seq_path(struct seq_file *seq, struct path *path); + +/* ---------------------------------------------------------------------- */ + +/* kmem cache */ +enum { + AuCache_DINFO, + AuCache_ICNTNR, + AuCache_FINFO, + AuCache_VDIR, + AuCache_DEHSTR, +#ifdef CONFIG_AUFS_HINOTIFY + AuCache_HINOTIFY, +#endif + AuCache_Last +}; + +#define AuCache(type) KMEM_CACHE(type, SLAB_RECLAIM_ACCOUNT) + +extern struct kmem_cache *au_cachep[]; + +#define AuCacheFuncs(name, index) \ +static inline void *au_cache_alloc_##name(void) \ +{ return kmem_cache_alloc(au_cachep[AuCache_##index], GFP_NOFS); } \ +static inline void au_cache_free_##name(void *p) \ +{ kmem_cache_free(au_cachep[AuCache_##index], p); } + +AuCacheFuncs(dinfo, DINFO); +AuCacheFuncs(icntnr, ICNTNR); +AuCacheFuncs(finfo, FINFO); +AuCacheFuncs(vdir, VDIR); +AuCacheFuncs(dehstr, DEHSTR); + +/* ---------------------------------------------------------------------- */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_MODULE_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/whout.h +++ linux-2.6.32/ubuntu/aufs/whout.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * whiteout for logical deletion and opaque directory + */ + +#ifndef __AUFS_WHOUT_H__ +#define __AUFS_WHOUT_H__ + +#ifdef __KERNEL__ + +#include +#include "dir.h" + +/* whout.c */ +int au_wh_name_alloc(struct qstr *wh, const struct qstr *name); +struct au_branch; +int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, + struct au_branch *br, int try_sio); +int au_diropq_test(struct dentry *h_dentry, struct au_branch *br); +struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br, + struct qstr *prefix); +int au_whtmp_ren(struct dentry *h_dentry, struct au_branch *br); +int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, + struct dentry *dentry); +int au_wh_init(struct dentry *h_parent, struct au_branch *br, + struct super_block *sb); + +/* diropq flags */ +#define AuDiropq_CREATE 1 +#define au_ftest_diropq(flags, name) ((flags) & AuDiropq_##name) +#define au_fset_diropq(flags, name) { (flags) |= AuDiropq_##name; } +#define au_fclr_diropq(flags, name) { (flags) &= ~AuDiropq_##name; } + +struct dentry *au_diropq_sio(struct dentry *dentry, aufs_bindex_t bindex, + unsigned int flags); +struct dentry *au_wh_lkup(struct dentry *h_parent, struct qstr *base_name, + struct au_branch *br); +struct dentry *au_wh_create(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent); + +/* real rmdir for the whiteout-ed dir */ +struct au_whtmp_rmdir { + struct inode *dir; + aufs_bindex_t bindex; + struct dentry *wh_dentry; + struct au_nhash whlist; +}; + +struct au_whtmp_rmdir *au_whtmp_rmdir_alloc(struct super_block *sb, gfp_t gfp); +void au_whtmp_rmdir_free(struct au_whtmp_rmdir *whtmp); +int au_whtmp_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_nhash *whlist); +void au_whtmp_kick_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_whtmp_rmdir *args); + +/* ---------------------------------------------------------------------- */ + +static inline struct dentry *au_diropq_create(struct dentry *dentry, + aufs_bindex_t bindex) +{ + return au_diropq_sio(dentry, bindex, AuDiropq_CREATE); +} + +static inline int au_diropq_remove(struct dentry *dentry, aufs_bindex_t bindex) +{ + return PTR_ERR(au_diropq_sio(dentry, bindex, !AuDiropq_CREATE)); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_WHOUT_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/dcsub.c +++ linux-2.6.32/ubuntu/aufs/dcsub.c @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sub-routines for dentry cache + */ + +#include "aufs.h" + +static void au_dpage_free(struct au_dpage *dpage) +{ + int i; + struct dentry **p; + + p = dpage->dentries; + for (i = 0; i < dpage->ndentry; i++) + dput(*p++); + free_page((unsigned long)dpage->dentries); +} + +int au_dpages_init(struct au_dcsub_pages *dpages, gfp_t gfp) +{ + int err; + void *p; + + err = -ENOMEM; + dpages->dpages = kmalloc(sizeof(*dpages->dpages), gfp); + if (unlikely(!dpages->dpages)) + goto out; + + p = (void *)__get_free_page(gfp); + if (unlikely(!p)) + goto out_dpages; + + dpages->dpages[0].ndentry = 0; + dpages->dpages[0].dentries = p; + dpages->ndpage = 1; + return 0; /* success */ + + out_dpages: + kfree(dpages->dpages); + out: + return err; +} + +void au_dpages_free(struct au_dcsub_pages *dpages) +{ + int i; + struct au_dpage *p; + + p = dpages->dpages; + for (i = 0; i < dpages->ndpage; i++) + au_dpage_free(p++); + kfree(dpages->dpages); +} + +static int au_dpages_append(struct au_dcsub_pages *dpages, + struct dentry *dentry, gfp_t gfp) +{ + int err, sz; + struct au_dpage *dpage; + void *p; + + dpage = dpages->dpages + dpages->ndpage - 1; + sz = PAGE_SIZE / sizeof(dentry); + if (unlikely(dpage->ndentry >= sz)) { + AuLabel(new dpage); + err = -ENOMEM; + sz = dpages->ndpage * sizeof(*dpages->dpages); + p = au_kzrealloc(dpages->dpages, sz, + sz + sizeof(*dpages->dpages), gfp); + if (unlikely(!p)) + goto out; + + dpages->dpages = p; + dpage = dpages->dpages + dpages->ndpage; + p = (void *)__get_free_page(gfp); + if (unlikely(!p)) + goto out; + + dpage->ndentry = 0; + dpage->dentries = p; + dpages->ndpage++; + } + + dpage->dentries[dpage->ndentry++] = dget(dentry); + return 0; /* success */ + + out: + return err; +} + +int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, + au_dpages_test test, void *arg) +{ + int err; + struct dentry *this_parent = root; + struct list_head *next; + struct super_block *sb = root->d_sb; + + err = 0; + spin_lock(&dcache_lock); + repeat: + next = this_parent->d_subdirs.next; + resume: + if (this_parent->d_sb == sb + && !IS_ROOT(this_parent) + && atomic_read(&this_parent->d_count) + && this_parent->d_inode + && (!test || test(this_parent, arg))) { + err = au_dpages_append(dpages, this_parent, GFP_ATOMIC); + if (unlikely(err)) + goto out; + } + + while (next != &this_parent->d_subdirs) { + struct list_head *tmp = next; + struct dentry *dentry = list_entry(tmp, struct dentry, + d_u.d_child); + next = tmp->next; + if (/*d_unhashed(dentry) || */!dentry->d_inode) + continue; + if (!list_empty(&dentry->d_subdirs)) { + this_parent = dentry; + goto repeat; + } + if (dentry->d_sb == sb + && atomic_read(&dentry->d_count) + && (!test || test(dentry, arg))) { + err = au_dpages_append(dpages, dentry, GFP_ATOMIC); + if (unlikely(err)) + goto out; + } + } + + if (this_parent != root) { + next = this_parent->d_u.d_child.next; + this_parent = this_parent->d_parent; /* dcache_lock is locked */ + goto resume; + } + out: + spin_unlock(&dcache_lock); + return err; +} + +int au_dcsub_pages_rev(struct au_dcsub_pages *dpages, struct dentry *dentry, + int do_include, au_dpages_test test, void *arg) +{ + int err; + + err = 0; + spin_lock(&dcache_lock); + if (do_include && (!test || test(dentry, arg))) { + err = au_dpages_append(dpages, dentry, GFP_ATOMIC); + if (unlikely(err)) + goto out; + } + while (!IS_ROOT(dentry)) { + dentry = dentry->d_parent; /* dcache_lock is locked */ + if (!test || test(dentry, arg)) { + err = au_dpages_append(dpages, dentry, GFP_ATOMIC); + if (unlikely(err)) + break; + } + } + + out: + spin_unlock(&dcache_lock); + + return err; +} + +struct dentry *au_test_subdir(struct dentry *d1, struct dentry *d2) +{ + struct dentry *trap, **dentries; + int err, i, j; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + + trap = ERR_PTR(-ENOMEM); + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages_rev(&dpages, d1, /*do_include*/1, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + trap = d1; + for (i = 0; !err && i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + for (j = 0; !err && j < dpage->ndentry; j++) { + struct dentry *d; + + d = dentries[j]; + err = (d == d2); + if (!err) + trap = d; + } + } + if (!err) + trap = NULL; + + out_dpages: + au_dpages_free(&dpages); + out: + return trap; +} --- linux-2.6.32.orig/ubuntu/aufs/dentry.h +++ linux-2.6.32/ubuntu/aufs/dentry.h @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * lookup and dentry operations + */ + +#ifndef __AUFS_DENTRY_H__ +#define __AUFS_DENTRY_H__ + +#ifdef __KERNEL__ + +#include +#include +#include "rwsem.h" + +/* make a single member structure for future use */ +/* todo: remove this structure */ +struct au_hdentry { + struct dentry *hd_dentry; +}; + +struct au_dinfo { + atomic_t di_generation; + + struct au_rwsem di_rwsem; + aufs_bindex_t di_bstart, di_bend, di_bwh, di_bdiropq; + struct au_hdentry *di_hdentry; +}; + +/* ---------------------------------------------------------------------- */ + +/* dentry.c */ +extern struct dentry_operations aufs_dop; +struct au_branch; +struct dentry *au_lkup_one(struct qstr *name, struct dentry *h_parent, + struct au_branch *br, struct nameidata *nd); +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent, + struct au_branch *br); +int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir, + struct dentry *h_parent, struct au_branch *br); + +int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type, + struct nameidata *nd); +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex); +int au_refresh_hdentry(struct dentry *dentry, mode_t type); +int au_reval_dpath(struct dentry *dentry, unsigned int sigen); + +/* dinfo.c */ +int au_alloc_dinfo(struct dentry *dentry); +int au_di_realloc(struct au_dinfo *dinfo, int nbr); + +void di_read_lock(struct dentry *d, int flags, unsigned int lsc); +void di_read_unlock(struct dentry *d, int flags); +void di_downgrade_lock(struct dentry *d, int flags); +void di_write_lock(struct dentry *d, unsigned int lsc); +void di_write_unlock(struct dentry *d); +void di_write_lock2_child(struct dentry *d1, struct dentry *d2, int isdir); +void di_write_lock2_parent(struct dentry *d1, struct dentry *d2, int isdir); +void di_write_unlock2(struct dentry *d1, struct dentry *d2); + +struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex); +aufs_bindex_t au_dbtail(struct dentry *dentry); +aufs_bindex_t au_dbtaildir(struct dentry *dentry); + +void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_dentry); +void au_update_digen(struct dentry *dentry); +void au_update_dbrange(struct dentry *dentry, int do_put_zero); +void au_update_dbstart(struct dentry *dentry); +void au_update_dbend(struct dentry *dentry); +int au_find_dbindex(struct dentry *dentry, struct dentry *h_dentry); + +/* ---------------------------------------------------------------------- */ + +static inline struct au_dinfo *au_di(struct dentry *dentry) +{ + return dentry->d_fsdata; +} + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for dinfo */ +enum { + AuLsc_DI_CHILD, /* child first */ + AuLsc_DI_CHILD2, /* rename(2), link(2), and cpup at hinotify */ + AuLsc_DI_CHILD3, /* copyup dirs */ + AuLsc_DI_PARENT, + AuLsc_DI_PARENT2, + AuLsc_DI_PARENT3 +}; + +/* + * di_read_lock_child, di_write_lock_child, + * di_read_lock_child2, di_write_lock_child2, + * di_read_lock_child3, di_write_lock_child3, + * di_read_lock_parent, di_write_lock_parent, + * di_read_lock_parent2, di_write_lock_parent2, + * di_read_lock_parent3, di_write_lock_parent3, + */ +#define AuReadLockFunc(name, lsc) \ +static inline void di_read_lock_##name(struct dentry *d, int flags) \ +{ di_read_lock(d, flags, AuLsc_DI_##lsc); } + +#define AuWriteLockFunc(name, lsc) \ +static inline void di_write_lock_##name(struct dentry *d) \ +{ di_write_lock(d, AuLsc_DI_##lsc); } + +#define AuRWLockFuncs(name, lsc) \ + AuReadLockFunc(name, lsc) \ + AuWriteLockFunc(name, lsc) + +AuRWLockFuncs(child, CHILD); +AuRWLockFuncs(child2, CHILD2); +AuRWLockFuncs(child3, CHILD3); +AuRWLockFuncs(parent, PARENT); +AuRWLockFuncs(parent2, PARENT2); +AuRWLockFuncs(parent3, PARENT3); + +#undef AuReadLockFunc +#undef AuWriteLockFunc +#undef AuRWLockFuncs + +#define DiMustNoWaiters(d) AuRwMustNoWaiters(&au_di(d)->di_rwsem) +#define DiMustAnyLock(d) AuRwMustAnyLock(&au_di(d)->di_rwsem) +#define DiMustWriteLock(d) AuRwMustWriteLock(&au_di(d)->di_rwsem) + +/* ---------------------------------------------------------------------- */ + +/* todo: memory barrier? */ +static inline unsigned int au_digen(struct dentry *d) +{ + return atomic_read(&au_di(d)->di_generation); +} + +static inline void au_h_dentry_init(struct au_hdentry *hdentry) +{ + hdentry->hd_dentry = NULL; +} + +static inline void au_hdput(struct au_hdentry *hd) +{ + dput(hd->hd_dentry); +} + +static inline aufs_bindex_t au_dbstart(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bstart; +} + +static inline aufs_bindex_t au_dbend(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bend; +} + +static inline aufs_bindex_t au_dbwh(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bwh; +} + +static inline aufs_bindex_t au_dbdiropq(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bdiropq; +} + +/* todo: hard/soft set? */ +static inline void au_set_dbstart(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bstart = bindex; +} + +static inline void au_set_dbend(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bend = bindex; +} + +static inline void au_set_dbwh(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + /* dbwh can be outside of bstart - bend range */ + au_di(dentry)->di_bwh = bindex; +} + +static inline void au_set_dbdiropq(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bdiropq = bindex; +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_HINOTIFY +static inline void au_digen_dec(struct dentry *d) +{ + atomic_dec_return(&au_di(d)->di_generation); +} + +static inline void au_hin_di_reinit(struct dentry *dentry) +{ + dentry->d_fsdata = NULL; +} +#else +static inline void au_hin_di_reinit(struct dentry *dentry __maybe_unused) +{ + /* empty */ +} +#endif /* CONFIG_AUFS_HINOTIFY */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DENTRY_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/cpup.h +++ linux-2.6.32/ubuntu/aufs/cpup.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * copy-up/down functions + */ + +#ifndef __AUFS_CPUP_H__ +#define __AUFS_CPUP_H__ + +#ifdef __KERNEL__ + +#include +#include +#include + +struct inode; +struct file; + +void au_cpup_attr_flags(struct inode *dst, struct inode *src); +void au_cpup_attr_timesizes(struct inode *inode); +void au_cpup_attr_nlink(struct inode *inode, int force); +void au_cpup_attr_changeable(struct inode *inode); +void au_cpup_igen(struct inode *inode, struct inode *h_inode); +void au_cpup_attr_all(struct inode *inode, int force); + +/* ---------------------------------------------------------------------- */ + +/* cpup flags */ +#define AuCpup_DTIME 1 /* do dtime_store/revert */ +#define AuCpup_KEEPLINO (1 << 1) /* do not clear the lower xino, + for link(2) */ +#define au_ftest_cpup(flags, name) ((flags) & AuCpup_##name) +#define au_fset_cpup(flags, name) { (flags) |= AuCpup_##name; } +#define au_fclr_cpup(flags, name) { (flags) &= ~AuCpup_##name; } + +int au_copy_file(struct file *dst, struct file *src, loff_t len); +int au_sio_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent); +int au_sio_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + unsigned int flags); +int au_sio_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + struct file *file); + +int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, + int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, + struct dentry *h_parent, void *arg), + void *arg); +int au_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst); +int au_test_and_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst); + +/* ---------------------------------------------------------------------- */ + +/* keep timestamps when copyup */ +struct au_dtime { + struct dentry *dt_dentry; + struct path dt_h_path; + struct timespec dt_atime, dt_mtime; +}; +void au_dtime_store(struct au_dtime *dt, struct dentry *dentry, + struct path *h_path); +void au_dtime_revert(struct au_dtime *dt); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_CPUP_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/BOM +++ linux-2.6.32/ubuntu/aufs/BOM @@ -0,0 +1,12 @@ +Git Tree: http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git +Git Branch: aufs2 (86695db9a39ac200a441f8ff0ddd0bb24005238d) + +This standalone snapshot was built from the commit below in the main +aufs2-2.6.git tree (http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-2.6.git): + + commit 2a119c29c8bb5f9953d2866450e5fe13ea88520f + Author: J. R. Okajima + Date: Sat Dec 5 11:05:06 2009 +0900 + + aufs: tiny, a note about pathconf(3) wrapper + --- linux-2.6.32.orig/ubuntu/aufs/dir.c +++ linux-2.6.32/ubuntu/aufs/dir.c @@ -0,0 +1,593 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * directory operations + */ + +#include +#include +#include "aufs.h" + +void au_add_nlink(struct inode *dir, struct inode *h_dir) +{ + AuDebugOn(!S_ISDIR(dir->i_mode) || !S_ISDIR(h_dir->i_mode)); + + dir->i_nlink += h_dir->i_nlink - 2; + if (h_dir->i_nlink < 2) + dir->i_nlink += 2; +} + +void au_sub_nlink(struct inode *dir, struct inode *h_dir) +{ + AuDebugOn(!S_ISDIR(dir->i_mode) || !S_ISDIR(h_dir->i_mode)); + + dir->i_nlink -= h_dir->i_nlink - 2; + if (h_dir->i_nlink < 2) + dir->i_nlink -= 2; +} + +loff_t au_dir_size(struct file *file, struct dentry *dentry) +{ + loff_t sz; + aufs_bindex_t bindex, bend; + struct file *h_file; + struct dentry *h_dentry; + + sz = 0; + if (file) { + AuDebugOn(!file->f_dentry); + AuDebugOn(!file->f_dentry->d_inode); + AuDebugOn(!S_ISDIR(file->f_dentry->d_inode->i_mode)); + + bend = au_fbend(file); + for (bindex = au_fbstart(file); + bindex <= bend && sz < KMALLOC_MAX_SIZE; + bindex++) { + h_file = au_h_fptr(file, bindex); + if (h_file + && h_file->f_dentry + && h_file->f_dentry->d_inode) + sz += i_size_read(h_file->f_dentry->d_inode); + } + } else { + AuDebugOn(!dentry); + AuDebugOn(!dentry->d_inode); + AuDebugOn(!S_ISDIR(dentry->d_inode->i_mode)); + + bend = au_dbtaildir(dentry); + for (bindex = au_dbstart(dentry); + bindex <= bend && sz < KMALLOC_MAX_SIZE; + bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && h_dentry->d_inode) + sz += i_size_read(h_dentry->d_inode); + } + } + if (sz < KMALLOC_MAX_SIZE) + sz = roundup_pow_of_two(sz); + if (sz > KMALLOC_MAX_SIZE) + sz = KMALLOC_MAX_SIZE; + else if (sz < NAME_MAX) { + BUILD_BUG_ON(AUFS_RDBLK_DEF < NAME_MAX); + sz = AUFS_RDBLK_DEF; + } + return sz; +} + +/* ---------------------------------------------------------------------- */ + +static int reopen_dir(struct file *file) +{ + int err; + unsigned int flags; + aufs_bindex_t bindex, btail, bstart; + struct dentry *dentry, *h_dentry; + struct file *h_file; + + /* open all lower dirs */ + dentry = file->f_dentry; + bstart = au_dbstart(dentry); + for (bindex = au_fbstart(file); bindex < bstart; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbstart(file, bstart); + + btail = au_dbtaildir(dentry); + for (bindex = au_fbend(file); btail < bindex; bindex--) + au_set_h_fptr(file, bindex, NULL); + au_set_fbend(file, btail); + + spin_lock(&file->f_lock); + flags = file->f_flags; + spin_unlock(&file->f_lock); + for (bindex = bstart; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + h_file = au_h_fptr(file, bindex); + if (h_file) + continue; + + h_file = au_h_open(dentry, bindex, flags, file); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; /* close all? */ + au_set_h_fptr(file, bindex, h_file); + } + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + err = 0; + + out: + return err; +} + +static int do_open_dir(struct file *file, int flags) +{ + int err; + aufs_bindex_t bindex, btail; + struct dentry *dentry, *h_dentry; + struct file *h_file; + + FiMustWriteLock(file); + + err = 0; + dentry = file->f_dentry; + au_set_fvdir_cache(file, NULL); + au_fi(file)->fi_maintain_plink = 0; + file->f_version = dentry->d_inode->i_version; + bindex = au_dbstart(dentry); + au_set_fbstart(file, bindex); + btail = au_dbtaildir(dentry); + au_set_fbend(file, btail); + for (; !err && bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + + h_file = au_h_open(dentry, bindex, flags, file); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + break; + } + au_set_h_fptr(file, bindex, h_file); + } + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + if (!err) + return 0; /* success */ + + /* close all */ + for (bindex = au_fbstart(file); bindex <= btail; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbstart(file, -1); + au_set_fbend(file, -1); + return err; +} + +static int aufs_open_dir(struct inode *inode __maybe_unused, + struct file *file) +{ + return au_do_open(file, do_open_dir); +} + +static int aufs_release_dir(struct inode *inode __maybe_unused, + struct file *file) +{ + struct au_vdir *vdir_cache; + struct super_block *sb; + struct au_sbinfo *sbinfo; + + sb = file->f_dentry->d_sb; + si_noflush_read_lock(sb); + fi_write_lock(file); + vdir_cache = au_fvdir_cache(file); + if (vdir_cache) + au_vdir_free(vdir_cache); + if (au_fi(file)->fi_maintain_plink) { + sbinfo = au_sbi(sb); + /* clear the flag without write-lock */ + sbinfo->au_si_status &= ~AuSi_MAINTAIN_PLINK; + smp_mb(); + wake_up_all(&sbinfo->si_plink_wq); + } + fi_write_unlock(file); + au_finfo_fin(file); + si_read_unlock(sb); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_fsync_dir_no_file(struct dentry *dentry, int datasync) +{ + int err; + aufs_bindex_t bend, bindex; + struct inode *inode; + struct super_block *sb; + + err = 0; + sb = dentry->d_sb; + inode = dentry->d_inode; + IMustLock(inode); + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); !err && bindex <= bend; bindex++) { + struct path h_path; + struct inode *h_inode; + + if (au_test_ro(sb, bindex, inode)) + continue; + h_path.dentry = au_h_dptr(dentry, bindex); + if (!h_path.dentry) + continue; + h_inode = h_path.dentry->d_inode; + if (!h_inode) + continue; + + /* no mnt_want_write() */ + /* cf. fs/nsfd/vfs.c and fs/nfsd/nfs4recover.c */ + /* todo: inotiry fired? */ + h_path.mnt = au_sbr_mnt(sb, bindex); + mutex_lock(&h_inode->i_mutex); + err = filemap_fdatawrite(h_inode->i_mapping); + AuDebugOn(!h_inode->i_fop); + if (!err && h_inode->i_fop->fsync) + err = h_inode->i_fop->fsync(NULL, h_path.dentry, + datasync); + if (!err) + err = filemap_fdatawrite(h_inode->i_mapping); + if (!err) + vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ + mutex_unlock(&h_inode->i_mutex); + } + + return err; +} + +static int au_do_fsync_dir(struct file *file, int datasync) +{ + int err; + aufs_bindex_t bend, bindex; + struct file *h_file; + struct super_block *sb; + struct inode *inode; + struct mutex *h_mtx; + + err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1); + if (unlikely(err)) + goto out; + + sb = file->f_dentry->d_sb; + inode = file->f_dentry->d_inode; + bend = au_fbend(file); + for (bindex = au_fbstart(file); !err && bindex <= bend; bindex++) { + h_file = au_h_fptr(file, bindex); + if (!h_file || au_test_ro(sb, bindex, inode)) + continue; + + err = vfs_fsync(h_file, h_file->f_dentry, datasync); + if (!err) { + h_mtx = &h_file->f_dentry->d_inode->i_mutex; + mutex_lock(h_mtx); + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); + /*ignore*/ + mutex_unlock(h_mtx); + } + } + + out: + return err; +} + +/* + * @file may be NULL + */ +static int aufs_fsync_dir(struct file *file, struct dentry *dentry, + int datasync) +{ + int err; + struct super_block *sb; + + IMustLock(dentry->d_inode); + + err = 0; + sb = dentry->d_sb; + si_noflush_read_lock(sb); + if (file) + err = au_do_fsync_dir(file, datasync); + else { + di_write_lock_child(dentry); + err = au_do_fsync_dir_no_file(dentry, datasync); + } + au_cpup_attr_timesizes(dentry->d_inode); + di_write_unlock(dentry); + if (file) + fi_write_unlock(file); + + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_readdir(struct file *file, void *dirent, filldir_t filldir) +{ + int err; + struct dentry *dentry; + struct inode *inode; + struct super_block *sb; + + dentry = file->f_dentry; + inode = dentry->d_inode; + IMustLock(inode); + + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1); + if (unlikely(err)) + goto out; + err = au_vdir_init(file); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + + if (!au_test_nfsd(current)) { + err = au_vdir_fill_de(file, dirent, filldir); + fsstack_copy_attr_atime(inode, + au_h_iptr(inode, au_ibstart(inode))); + } else { + /* + * nfsd filldir may call lookup_one_len(), vfs_getattr(), + * encode_fh() and others. + */ + struct inode *h_inode = au_h_iptr(inode, au_ibstart(inode)); + + di_read_unlock(dentry, AuLock_IR); + si_read_unlock(sb); + /* lockdep_off(); */ + err = au_vdir_fill_de(file, dirent, filldir); + /* lockdep_on(); */ + fsstack_copy_attr_atime(inode, h_inode); + fi_write_unlock(file); + + AuTraceErr(err); + return err; + } + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +#define AuTestEmpty_WHONLY 1 +#define AuTestEmpty_CALLED (1 << 1) +#define AuTestEmpty_SHWH (1 << 2) +#define au_ftest_testempty(flags, name) ((flags) & AuTestEmpty_##name) +#define au_fset_testempty(flags, name) { (flags) |= AuTestEmpty_##name; } +#define au_fclr_testempty(flags, name) { (flags) &= ~AuTestEmpty_##name; } + +#ifndef CONFIG_AUFS_SHWH +#undef AuTestEmpty_SHWH +#define AuTestEmpty_SHWH 0 +#endif + +struct test_empty_arg { + struct au_nhash *whlist; + unsigned int flags; + int err; + aufs_bindex_t bindex; +}; + +static int test_empty_cb(void *__arg, const char *__name, int namelen, + loff_t offset __maybe_unused, u64 ino, + unsigned int d_type) +{ + struct test_empty_arg *arg = __arg; + char *name = (void *)__name; + + arg->err = 0; + au_fset_testempty(arg->flags, CALLED); + /* smp_mb(); */ + if (name[0] == '.' + && (namelen == 1 || (name[1] == '.' && namelen == 2))) + goto out; /* success */ + + if (namelen <= AUFS_WH_PFX_LEN + || memcmp(name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { + if (au_ftest_testempty(arg->flags, WHONLY) + && !au_nhash_test_known_wh(arg->whlist, name, namelen)) + arg->err = -ENOTEMPTY; + goto out; + } + + name += AUFS_WH_PFX_LEN; + namelen -= AUFS_WH_PFX_LEN; + if (!au_nhash_test_known_wh(arg->whlist, name, namelen)) + arg->err = au_nhash_append_wh + (arg->whlist, name, namelen, ino, d_type, arg->bindex, + au_ftest_testempty(arg->flags, SHWH)); + + out: + /* smp_mb(); */ + AuTraceErr(arg->err); + return arg->err; +} + +static int do_test_empty(struct dentry *dentry, struct test_empty_arg *arg) +{ + int err; + struct file *h_file; + + h_file = au_h_open(dentry, arg->bindex, + O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_LARGEFILE, + /*file*/NULL); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = 0; + if (!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) + && !h_file->f_dentry->d_inode->i_nlink) + goto out_put; + + do { + arg->err = 0; + au_fclr_testempty(arg->flags, CALLED); + /* smp_mb(); */ + err = vfsub_readdir(h_file, test_empty_cb, arg); + if (err >= 0) + err = arg->err; + } while (!err && au_ftest_testempty(arg->flags, CALLED)); + + out_put: + fput(h_file); + au_sbr_put(dentry->d_sb, arg->bindex); + out: + return err; +} + +struct do_test_empty_args { + int *errp; + struct dentry *dentry; + struct test_empty_arg *arg; +}; + +static void call_do_test_empty(void *args) +{ + struct do_test_empty_args *a = args; + *a->errp = do_test_empty(a->dentry, a->arg); +} + +static int sio_test_empty(struct dentry *dentry, struct test_empty_arg *arg) +{ + int err, wkq_err; + struct dentry *h_dentry; + struct inode *h_inode; + + h_dentry = au_h_dptr(dentry, arg->bindex); + h_inode = h_dentry->d_inode; + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + err = au_test_h_perm_sio(h_inode, MAY_EXEC | MAY_READ); + mutex_unlock(&h_inode->i_mutex); + if (!err) + err = do_test_empty(dentry, arg); + else { + struct do_test_empty_args args = { + .errp = &err, + .dentry = dentry, + .arg = arg + }; + unsigned int flags = arg->flags; + + wkq_err = au_wkq_wait(call_do_test_empty, &args); + if (unlikely(wkq_err)) + err = wkq_err; + arg->flags = flags; + } + + return err; +} + +int au_test_empty_lower(struct dentry *dentry) +{ + int err; + unsigned int rdhash; + aufs_bindex_t bindex, bstart, btail; + struct au_nhash whlist; + struct test_empty_arg arg; + + SiMustAnyLock(dentry->d_sb); + + rdhash = au_sbi(dentry->d_sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, dentry)); + err = au_nhash_alloc(&whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + + arg.flags = 0; + arg.whlist = &whlist; + bstart = au_dbstart(dentry); + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) + au_fset_testempty(arg.flags, SHWH); + arg.bindex = bstart; + err = do_test_empty(dentry, &arg); + if (unlikely(err)) + goto out_whlist; + + au_fset_testempty(arg.flags, WHONLY); + btail = au_dbtaildir(dentry); + for (bindex = bstart + 1; !err && bindex <= btail; bindex++) { + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && h_dentry->d_inode) { + arg.bindex = bindex; + err = do_test_empty(dentry, &arg); + } + } + + out_whlist: + au_nhash_wh_free(&whlist); + out: + return err; +} + +int au_test_empty(struct dentry *dentry, struct au_nhash *whlist) +{ + int err; + struct test_empty_arg arg; + aufs_bindex_t bindex, btail; + + err = 0; + arg.whlist = whlist; + arg.flags = AuTestEmpty_WHONLY; + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) + au_fset_testempty(arg.flags, SHWH); + btail = au_dbtaildir(dentry); + for (bindex = au_dbstart(dentry); !err && bindex <= btail; bindex++) { + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && h_dentry->d_inode) { + arg.bindex = bindex; + err = sio_test_empty(dentry, &arg); + } + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +const struct file_operations aufs_dir_fop = { + .read = generic_read_dir, + .readdir = aufs_readdir, + .unlocked_ioctl = aufs_ioctl_dir, + .open = aufs_open_dir, + .release = aufs_release_dir, + .flush = aufs_flush, + .fsync = aufs_fsync_dir +}; --- linux-2.6.32.orig/ubuntu/aufs/f_op.c +++ linux-2.6.32/ubuntu/aufs/f_op.c @@ -0,0 +1,828 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * file and vm operations + */ + +#include +#include +#include +#include +#include +#include +#include "aufs.h" + +/* common function to regular file and dir */ +int aufs_flush(struct file *file, fl_owner_t id) +{ + int err; + aufs_bindex_t bindex, bend; + struct dentry *dentry; + struct file *h_file; + + dentry = file->f_dentry; + si_noflush_read_lock(dentry->d_sb); + fi_read_lock(file); + di_read_lock_child(dentry, AuLock_IW); + + err = 0; + bend = au_fbend(file); + for (bindex = au_fbstart(file); !err && bindex <= bend; bindex++) { + h_file = au_h_fptr(file, bindex); + if (!h_file || !h_file->f_op || !h_file->f_op->flush) + continue; + + err = h_file->f_op->flush(h_file, id); + if (!err) + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); + /*ignore*/ + } + au_cpup_attr_timesizes(dentry->d_inode); + + di_read_unlock(dentry, AuLock_IW); + fi_read_unlock(file); + si_read_unlock(dentry->d_sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int do_open_nondir(struct file *file, int flags) +{ + int err; + aufs_bindex_t bindex; + struct file *h_file; + struct dentry *dentry; + struct au_finfo *finfo; + + FiMustWriteLock(file); + + err = 0; + dentry = file->f_dentry; + finfo = au_fi(file); + finfo->fi_h_vm_ops = NULL; + finfo->fi_vm_ops = NULL; + bindex = au_dbstart(dentry); + /* O_TRUNC is processed already */ + BUG_ON(au_test_ro(dentry->d_sb, bindex, dentry->d_inode) + && (flags & O_TRUNC)); + + h_file = au_h_open(dentry, bindex, flags, file); + if (IS_ERR(h_file)) + err = PTR_ERR(h_file); + else { + au_set_fbstart(file, bindex); + au_set_fbend(file, bindex); + au_set_h_fptr(file, bindex, h_file); + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + } + return err; +} + +static int aufs_open_nondir(struct inode *inode __maybe_unused, + struct file *file) +{ + return au_do_open(file, do_open_nondir); +} + +static int aufs_release_nondir(struct inode *inode __maybe_unused, + struct file *file) +{ + struct super_block *sb = file->f_dentry->d_sb; + + si_noflush_read_lock(sb); + kfree(au_fi(file)->fi_vm_ops); + au_finfo_fin(file); + si_read_unlock(sb); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static ssize_t aufs_read(struct file *file, char __user *buf, size_t count, + loff_t *ppos) +{ + ssize_t err; + struct dentry *dentry; + struct file *h_file; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + h_file = au_h_fptr(file, au_fbstart(file)); + err = vfsub_read_u(h_file, buf, count, ppos); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); + + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + out: + si_read_unlock(sb); + return err; +} + +static ssize_t aufs_write(struct file *file, const char __user *ubuf, + size_t count, loff_t *ppos) +{ + ssize_t err; + aufs_bindex_t bstart; + struct au_pin pin; + struct dentry *dentry; + struct inode *inode; + struct super_block *sb; + struct file *h_file; + char __user *buf = (char __user *)ubuf; + + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + mutex_lock(&inode->i_mutex); + si_read_lock(sb, AuLock_FLUSH); + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + + bstart = au_fbstart(file); + h_file = au_h_fptr(file, bstart); + au_unpin(&pin); + err = vfsub_write_u(h_file, buf, count, ppos); + au_cpup_attr_timesizes(inode); + inode->i_mode = h_file->f_dentry->d_inode->i_mode; + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + return err; +} + +static ssize_t aufs_aio_read(struct kiocb *kio, const struct iovec *iov, + unsigned long nv, loff_t pos) +{ + ssize_t err; + struct file *file, *h_file; + struct dentry *dentry; + struct super_block *sb; + + file = kio->ki_filp; + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + err = -ENOSYS; + h_file = au_h_fptr(file, au_fbstart(file)); + if (h_file->f_op && h_file->f_op->aio_read) { + err = security_file_permission(h_file, MAY_READ); + if (unlikely(err)) + goto out_unlock; + if (!is_sync_kiocb(kio)) { + get_file(h_file); + fput(file); + } + kio->ki_filp = h_file; + err = h_file->f_op->aio_read(kio, iov, nv, pos); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + fsstack_copy_attr_atime(dentry->d_inode, + h_file->f_dentry->d_inode); + } else + /* currently there is no such fs */ + WARN_ON_ONCE(h_file->f_op && h_file->f_op->read); + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + out: + si_read_unlock(sb); + return err; +} + +static ssize_t aufs_aio_write(struct kiocb *kio, const struct iovec *iov, + unsigned long nv, loff_t pos) +{ + ssize_t err; + aufs_bindex_t bstart; + struct au_pin pin; + struct dentry *dentry; + struct inode *inode; + struct super_block *sb; + struct file *file, *h_file; + + file = kio->ki_filp; + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + mutex_lock(&inode->i_mutex); + si_read_lock(sb, AuLock_FLUSH); + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + + err = -ENOSYS; + bstart = au_fbstart(file); + h_file = au_h_fptr(file, bstart); + au_unpin(&pin); + if (h_file->f_op && h_file->f_op->aio_write) { + err = security_file_permission(h_file, MAY_WRITE); + if (unlikely(err)) + goto out_unlock; + if (!is_sync_kiocb(kio)) { + get_file(h_file); + fput(file); + } + kio->ki_filp = h_file; + err = h_file->f_op->aio_write(kio, iov, nv, pos); + au_cpup_attr_timesizes(inode); + inode->i_mode = h_file->f_dentry->d_inode->i_mode; + } else + /* currently there is no such fs */ + WARN_ON_ONCE(h_file->f_op && h_file->f_op->write); + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + return err; +} + +static ssize_t aufs_splice_read(struct file *file, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + ssize_t err; + struct file *h_file; + struct dentry *dentry; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + err = -EINVAL; + h_file = au_h_fptr(file, au_fbstart(file)); + if (au_test_loopback_kthread()) { + file->f_mapping = h_file->f_mapping; + smp_mb(); /* unnecessary? */ + } + err = vfsub_splice_to(h_file, ppos, pipe, len, flags); + /* todo: necessasry? */ + /* file->f_ra = h_file->f_ra; */ + fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); + + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + + out: + si_read_unlock(sb); + return err; +} + +static ssize_t +aufs_splice_write(struct pipe_inode_info *pipe, struct file *file, loff_t *ppos, + size_t len, unsigned int flags) +{ + ssize_t err; + struct au_pin pin; + struct dentry *dentry; + struct inode *inode; + struct super_block *sb; + struct file *h_file; + + dentry = file->f_dentry; + inode = dentry->d_inode; + mutex_lock(&inode->i_mutex); + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + + h_file = au_h_fptr(file, au_fbstart(file)); + au_unpin(&pin); + err = vfsub_splice_from(pipe, h_file, ppos, len, flags); + au_cpup_attr_timesizes(inode); + inode->i_mode = h_file->f_dentry->d_inode->i_mode; + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct file *au_safe_file(struct vm_area_struct *vma) +{ + struct file *file; + + file = vma->vm_file; + if (file->private_data && au_test_aufs(file->f_dentry->d_sb)) + return file; + return NULL; +} + +static void au_reset_file(struct vm_area_struct *vma, struct file *file) +{ + vma->vm_file = file; + /* smp_mb(); */ /* flush vm_file */ +} + +static int aufs_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +{ + int err; + static DECLARE_WAIT_QUEUE_HEAD(wq); + struct file *file, *h_file; + struct au_finfo *finfo; + + /* todo: non-robr mode, user vm_file as it is? */ + wait_event(wq, (file = au_safe_file(vma))); + + /* do not revalidate, no si lock */ + finfo = au_fi(file); + h_file = finfo->fi_hfile[0 + finfo->fi_bstart].hf_file; + AuDebugOn(!h_file || !finfo->fi_h_vm_ops); + + mutex_lock(&finfo->fi_vm_mtx); + vma->vm_file = h_file; + err = finfo->fi_h_vm_ops->fault(vma, vmf); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + au_reset_file(vma, file); + mutex_unlock(&finfo->fi_vm_mtx); +#if 0 /* def CONFIG_SMP */ + /* wake_up_nr(&wq, online_cpu - 1); */ + wake_up_all(&wq); +#else + wake_up(&wq); +#endif + + return err; +} + +static int aufs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) +{ + int err; + static DECLARE_WAIT_QUEUE_HEAD(wq); + struct file *file, *h_file; + struct au_finfo *finfo; + + wait_event(wq, (file = au_safe_file(vma))); + + finfo = au_fi(file); + h_file = finfo->fi_hfile[0 + finfo->fi_bstart].hf_file; + AuDebugOn(!h_file || !finfo->fi_h_vm_ops); + + mutex_lock(&finfo->fi_vm_mtx); + vma->vm_file = h_file; + err = finfo->fi_h_vm_ops->page_mkwrite(vma, vmf); + au_reset_file(vma, file); + mutex_unlock(&finfo->fi_vm_mtx); + wake_up(&wq); + + return err; +} + +static void aufs_vm_close(struct vm_area_struct *vma) +{ + static DECLARE_WAIT_QUEUE_HEAD(wq); + struct file *file, *h_file; + struct au_finfo *finfo; + + wait_event(wq, (file = au_safe_file(vma))); + + finfo = au_fi(file); + h_file = finfo->fi_hfile[0 + finfo->fi_bstart].hf_file; + AuDebugOn(!h_file || !finfo->fi_h_vm_ops); + + mutex_lock(&finfo->fi_vm_mtx); + vma->vm_file = h_file; + finfo->fi_h_vm_ops->close(vma); + au_reset_file(vma, file); + mutex_unlock(&finfo->fi_vm_mtx); + wake_up(&wq); +} + +static struct vm_operations_struct aufs_vm_ops = { + /* .close and .page_mkwrite are not set by default */ + .fault = aufs_fault, +}; + +/* ---------------------------------------------------------------------- */ + +static unsigned long au_prot_conv(unsigned long flags) +{ + unsigned long prot; + + prot = 0; + if (flags & VM_READ) + prot |= PROT_READ; + if (flags & VM_WRITE) + prot |= PROT_WRITE; + if (flags & VM_EXEC) + prot |= PROT_EXEC; + return prot; +} + +static struct vm_operations_struct *au_vm_ops(struct file *h_file, + struct vm_area_struct *vma) +{ + struct vm_operations_struct *vm_ops; + int err; + + vm_ops = ERR_PTR(-ENODEV); + if (!h_file->f_op || !h_file->f_op->mmap) + goto out; + + err = ima_file_mmap(h_file, au_prot_conv(vma->vm_flags)); + vm_ops = ERR_PTR(err); + if (err) + goto out; + + err = h_file->f_op->mmap(h_file, vma); + vm_ops = ERR_PTR(err); + if (unlikely(err)) + goto out; + + /* oops, it became 'const' */ + vm_ops = (struct vm_operations_struct *)vma->vm_ops; + err = do_munmap(current->mm, vma->vm_start, + vma->vm_end - vma->vm_start); + if (unlikely(err)) { + AuIOErr("failed internal unmapping %.*s, %d\n", + AuDLNPair(h_file->f_dentry), err); + vm_ops = ERR_PTR(-EIO); + } + + out: + return vm_ops; +} + +static int au_custom_vm_ops(struct au_finfo *finfo, struct vm_area_struct *vma) +{ + int err; + struct vm_operations_struct *h_ops; + + AuRwMustAnyLock(&finfo->fi_rwsem); + + err = 0; + h_ops = finfo->fi_h_vm_ops; + AuDebugOn(!h_ops); + if ((!h_ops->page_mkwrite && !h_ops->close) + || finfo->fi_vm_ops) + goto out; + + err = -ENOMEM; + finfo->fi_vm_ops = kmemdup(&aufs_vm_ops, sizeof(aufs_vm_ops), GFP_NOFS); + if (unlikely(!finfo->fi_vm_ops)) + goto out; + + err = 0; + if (h_ops->page_mkwrite) + finfo->fi_vm_ops->page_mkwrite = aufs_page_mkwrite; + if (h_ops->close) + finfo->fi_vm_ops->close = aufs_vm_close; + + vma->vm_ops = finfo->fi_vm_ops; + + out: + return err; +} + +static int aufs_mmap(struct file *file, struct vm_area_struct *vma) +{ + int err; + unsigned char wlock, mmapped; + struct dentry *dentry; + struct super_block *sb; + struct file *h_file; + struct vm_operations_struct *vm_ops; + + dentry = file->f_dentry; + wlock = !!(file->f_mode & FMODE_WRITE) && (vma->vm_flags & VM_SHARED); + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + mmapped = !!au_test_mmapped(file); + if (wlock) { + struct au_pin pin; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + au_unpin(&pin); + } else + di_downgrade_lock(dentry, AuLock_IR); + + h_file = au_h_fptr(file, au_fbstart(file)); + if (!mmapped && au_test_fs_bad_mapping(h_file->f_dentry->d_sb)) { + /* + * by this assignment, f_mapping will differs from aufs inode + * i_mapping. + * if someone else mixes the use of f_dentry->d_inode and + * f_mapping->host, then a problem may arise. + */ + file->f_mapping = h_file->f_mapping; + } + + vm_ops = NULL; + if (!mmapped) { + vm_ops = au_vm_ops(h_file, vma); + err = PTR_ERR(vm_ops); + if (IS_ERR(vm_ops)) + goto out_unlock; + } + + /* + * unnecessary to handle MAP_DENYWRITE and deny_write_access()? + * currently MAP_DENYWRITE from userspace is ignored, but elf loader + * sets it. when FMODE_EXEC is set (by open_exec() or sys_uselib()), + * both of the aufs file and the lower file is deny_write_access()-ed. + * finally I hope we can skip handlling MAP_DENYWRITE here. + */ + err = generic_file_mmap(file, vma); + if (unlikely(err)) + goto out_unlock; + + vma->vm_ops = &aufs_vm_ops; + if (!mmapped) { + struct au_finfo *finfo = au_fi(file); + + finfo->fi_h_vm_ops = vm_ops; + mutex_init(&finfo->fi_vm_mtx); + } + + err = au_custom_vm_ops(au_fi(file), vma); + if (unlikely(err)) + goto out_unlock; + + vfsub_file_accessed(h_file); + fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_fsync_nondir(struct file *file, struct dentry *dentry, + int datasync) +{ + int err; + struct au_pin pin; + struct inode *inode; + struct file *h_file; + struct super_block *sb; + + inode = dentry->d_inode; + IMustLock(file->f_mapping->host); + if (inode != file->f_mapping->host) { + mutex_unlock(&file->f_mapping->host->i_mutex); + mutex_lock(&inode->i_mutex); + } + IMustLock(inode); + + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + + err = 0; /* -EBADF; */ /* posix? */ + if (unlikely(!(file->f_mode & FMODE_WRITE))) + goto out; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + au_unpin(&pin); + + err = -EINVAL; + h_file = au_h_fptr(file, au_fbstart(file)); + if (h_file->f_op && h_file->f_op->fsync) { + struct dentry *h_d; + struct mutex *h_mtx; + + /* + * no filemap_fdatawrite() since aufs file has no its own + * mapping, but dir. + */ + h_d = h_file->f_dentry; + h_mtx = &h_d->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + err = h_file->f_op->fsync(h_file, h_d, datasync); + if (!err) + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); + /*ignore*/ + au_cpup_attr_timesizes(inode); + mutex_unlock(h_mtx); + } + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + if (inode != file->f_mapping->host) { + mutex_unlock(&inode->i_mutex); + mutex_lock(&file->f_mapping->host->i_mutex); + } + return err; +} + +/* no one supports this operation, currently */ +#if 0 +static int aufs_aio_fsync_nondir(struct kiocb *kio, int datasync) +{ + int err; + struct au_pin pin; + struct dentry *dentry; + struct inode *inode; + struct file *file, *h_file; + struct super_block *sb; + + file = kio->ki_filp; + dentry = file->f_dentry; + inode = dentry->d_inode; + mutex_lock(&inode->i_mutex); + + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + + err = 0; /* -EBADF; */ /* posix? */ + if (unlikely(!(file->f_mode & FMODE_WRITE))) + goto out; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + au_unpin(&pin); + + err = -ENOSYS; + h_file = au_h_fptr(file, au_fbstart(file)); + if (h_file->f_op && h_file->f_op->aio_fsync) { + struct dentry *h_d; + struct mutex *h_mtx; + + h_d = h_file->f_dentry; + h_mtx = &h_d->d_inode->i_mutex; + if (!is_sync_kiocb(kio)) { + get_file(h_file); + fput(file); + } + kio->ki_filp = h_file; + err = h_file->f_op->aio_fsync(kio, datasync); + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + if (!err) + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); + /*ignore*/ + au_cpup_attr_timesizes(inode); + mutex_unlock(h_mtx); + } + + out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + return err; +} +#endif + +static int aufs_fasync(int fd, struct file *file, int flag) +{ + int err; + struct file *h_file; + struct dentry *dentry; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + h_file = au_h_fptr(file, au_fbstart(file)); + if (h_file->f_op && h_file->f_op->fasync) + err = h_file->f_op->fasync(fd, h_file, flag); + + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + + out: + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* no one supports this operation, currently */ +#if 0 +static ssize_t aufs_sendpage(struct file *file, struct page *page, int offset, + size_t len, loff_t *pos , int more) +{ +} +#endif + +/* ---------------------------------------------------------------------- */ + +const struct file_operations aufs_file_fop = { + /* + * while generic_file_llseek/_unlocked() don't use BKL, + * don't use it since it operates file->f_mapping->host. + * in aufs, it may be a real file and may confuse users by UDBA. + */ + /* .llseek = generic_file_llseek, */ + + .read = aufs_read, + .write = aufs_write, + .aio_read = aufs_aio_read, + .aio_write = aufs_aio_write, +#ifdef CONFIG_AUFS_POLL + .poll = aufs_poll, +#endif + .unlocked_ioctl = aufs_ioctl_nondir, + .mmap = aufs_mmap, + .open = aufs_open_nondir, + .flush = aufs_flush, + .release = aufs_release_nondir, + .fsync = aufs_fsync_nondir, + /* .aio_fsync = aufs_aio_fsync_nondir, */ + .fasync = aufs_fasync, + /* .sendpage = aufs_sendpage, */ + .splice_write = aufs_splice_write, + .splice_read = aufs_splice_read, +#if 0 + .aio_splice_write = aufs_aio_splice_write, + .aio_splice_read = aufs_aio_splice_read +#endif +}; --- linux-2.6.32.orig/ubuntu/aufs/loop.h +++ linux-2.6.32/ubuntu/aufs/loop.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * support for loopback mount as a branch + */ + +#ifndef __AUFS_LOOP_H__ +#define __AUFS_LOOP_H__ + +#ifdef __KERNEL__ + +struct dentry; +struct super_block; + +#ifdef CONFIG_AUFS_BDEV_LOOP +/* loop.c */ +int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_d1, + struct dentry *h_d2); +int au_test_loopback_kthread(void); +#else +static inline +int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_d1, + struct dentry *h_d2) +{ + return 0; +} + +static inline int au_test_loopback_kthread(void) +{ + return 0; +} +#endif /* BLK_DEV_LOOP */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_LOOP_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/file.c +++ linux-2.6.32/ubuntu/aufs/file.c @@ -0,0 +1,591 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * handling file/dir, and address_space operation + */ + +#include +#include +#include +#include +#include "aufs.h" + +/* drop flags for writing */ +unsigned int au_file_roflags(unsigned int flags) +{ + flags &= ~(O_WRONLY | O_RDWR | O_APPEND | O_CREAT | O_TRUNC); + flags |= O_RDONLY | O_NOATIME; + return flags; +} + +/* common functions to regular file and dir */ +struct file *au_h_open(struct dentry *dentry, aufs_bindex_t bindex, int flags, + struct file *file) +{ + struct file *h_file; + struct dentry *h_dentry; + struct inode *h_inode; + struct super_block *sb; + struct au_branch *br; + int err, exec_flag; + struct path h_path; + + /* a race condition can happen between open and unlink/rmdir */ + h_file = ERR_PTR(-ENOENT); + h_dentry = au_h_dptr(dentry, bindex); + if (au_test_nfsd(current) && !h_dentry) + goto out; + h_inode = h_dentry->d_inode; + if (au_test_nfsd(current) && !h_inode) + goto out; + if (unlikely((!d_unhashed(dentry) && d_unhashed(h_dentry)) + || !h_inode)) + goto out; + + sb = dentry->d_sb; + br = au_sbr(sb, bindex); + h_file = ERR_PTR(-EACCES); + exec_flag = flags & vfsub_fmode_to_uint(FMODE_EXEC); + if (exec_flag && (br->br_mnt->mnt_flags & MNT_NOEXEC)) + goto out; + + /* drop flags for writing */ + if (au_test_ro(sb, bindex, dentry->d_inode)) + flags = au_file_roflags(flags); + flags &= ~O_CREAT; + atomic_inc(&br->br_count); + h_path.dentry = h_dentry; + h_path.mnt = br->br_mnt; + path_get(&h_path); + h_file = vfsub_dentry_open(&h_path, flags, current_cred()); + if (IS_ERR(h_file)) + goto out_br; + + if (exec_flag) { + err = deny_write_access(h_file); + if (unlikely(err)) { + fput(h_file); + h_file = ERR_PTR(err); + goto out_br; + } + } + fsnotify_open(h_dentry); + goto out; /* success */ + + out_br: + atomic_dec(&br->br_count); + out: + return h_file; +} + +int au_do_open(struct file *file, int (*open)(struct file *file, int flags)) +{ + int err; + unsigned int flags; + struct dentry *dentry; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_finfo_init(file); + if (unlikely(err)) + goto out; + + di_read_lock_child(dentry, AuLock_IR); + spin_lock(&file->f_lock); + flags = file->f_flags; + spin_unlock(&file->f_lock); + err = open(file, flags); + di_read_unlock(dentry, AuLock_IR); + + fi_write_unlock(file); + if (unlikely(err)) + au_finfo_fin(file); + out: + si_read_unlock(sb); + return err; +} + +int au_reopen_nondir(struct file *file) +{ + int err; + unsigned int flags; + aufs_bindex_t bstart, bindex, bend; + struct dentry *dentry; + struct file *h_file, *h_file_tmp; + + dentry = file->f_dentry; + bstart = au_dbstart(dentry); + h_file_tmp = NULL; + if (au_fbstart(file) == bstart) { + h_file = au_h_fptr(file, bstart); + if (file->f_mode == h_file->f_mode) + return 0; /* success */ + h_file_tmp = h_file; + get_file(h_file_tmp); + au_set_h_fptr(file, bstart, NULL); + } + AuDebugOn(au_fbstart(file) < bstart + || au_fi(file)->fi_hfile[0 + bstart].hf_file); + + spin_lock(&file->f_lock); + flags = file->f_flags & ~O_TRUNC; + spin_unlock(&file->f_lock); + h_file = au_h_open(dentry, bstart, flags, file); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; /* todo: close all? */ + + err = 0; + au_set_fbstart(file, bstart); + au_set_h_fptr(file, bstart, h_file); + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + + /* close lower files */ + bend = au_fbend(file); + for (bindex = bstart + 1; bindex <= bend; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbend(file, bstart); + + out: + if (h_file_tmp) + fput(h_file_tmp); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_reopen_wh(struct file *file, aufs_bindex_t btgt, + struct dentry *hi_wh) +{ + int err; + aufs_bindex_t bstart; + struct au_dinfo *dinfo; + struct dentry *h_dentry; + + dinfo = au_di(file->f_dentry); + AuRwMustWriteLock(&dinfo->di_rwsem); + + bstart = dinfo->di_bstart; + dinfo->di_bstart = btgt; + h_dentry = dinfo->di_hdentry[0 + btgt].hd_dentry; + dinfo->di_hdentry[0 + btgt].hd_dentry = hi_wh; + err = au_reopen_nondir(file); + dinfo->di_hdentry[0 + btgt].hd_dentry = h_dentry; + dinfo->di_bstart = bstart; + + return err; +} + +static int au_ready_to_write_wh(struct file *file, loff_t len, + aufs_bindex_t bcpup) +{ + int err; + struct inode *inode; + struct dentry *dentry, *hi_wh; + struct super_block *sb; + + dentry = file->f_dentry; + inode = dentry->d_inode; + hi_wh = au_hi_wh(inode, bcpup); + if (!hi_wh) + err = au_sio_cpup_wh(dentry, bcpup, len, file); + else + /* already copied-up after unlink */ + err = au_reopen_wh(file, bcpup, hi_wh); + + sb = dentry->d_sb; + if (!err && inode->i_nlink > 1 && au_opt_test(au_mntflags(sb), PLINK)) + au_plink_append(inode, bcpup, au_h_dptr(dentry, bcpup)); + + return err; +} + +/* + * prepare the @file for writing. + */ +int au_ready_to_write(struct file *file, loff_t len, struct au_pin *pin) +{ + int err; + aufs_bindex_t bstart, bcpup; + struct dentry *dentry, *parent, *h_dentry; + struct inode *h_inode, *inode; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + bstart = au_fbstart(file); + inode = dentry->d_inode; + err = au_test_ro(sb, bstart, inode); + if (!err && (au_h_fptr(file, bstart)->f_mode & FMODE_WRITE)) { + err = au_pin(pin, dentry, bstart, AuOpt_UDBA_NONE, /*flags*/0); + goto out; + } + + /* need to cpup */ + parent = dget_parent(dentry); + di_write_lock_parent(parent); + err = AuWbrCopyup(au_sbi(sb), dentry); + bcpup = err; + if (unlikely(err < 0)) + goto out_dgrade; + err = 0; + + if (!au_h_dptr(parent, bcpup)) { + err = au_cpup_dirs(dentry, bcpup); + if (unlikely(err)) + goto out_dgrade; + } + + err = au_pin(pin, dentry, bcpup, AuOpt_UDBA_NONE, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_dgrade; + + h_dentry = au_h_fptr(file, bstart)->f_dentry; + h_inode = h_dentry->d_inode; + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + if (d_unhashed(dentry) /* || d_unhashed(h_dentry) */ + /* || !h_inode->i_nlink */) { + err = au_ready_to_write_wh(file, len, bcpup); + di_downgrade_lock(parent, AuLock_IR); + } else { + di_downgrade_lock(parent, AuLock_IR); + if (!au_h_dptr(dentry, bcpup)) + err = au_sio_cpup_simple(dentry, bcpup, len, + AuCpup_DTIME); + if (!err) + err = au_reopen_nondir(file); + } + mutex_unlock(&h_inode->i_mutex); + + if (!err) { + au_pin_set_parent_lflag(pin, /*lflag*/0); + goto out_dput; /* success */ + } + au_unpin(pin); + goto out_unlock; + + out_dgrade: + di_downgrade_lock(parent, AuLock_IR); + out_unlock: + di_read_unlock(parent, AuLock_IR); + out_dput: + dput(parent); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_file_refresh_by_inode(struct file *file, int *need_reopen) +{ + int err; + aufs_bindex_t bstart; + struct au_pin pin; + struct au_finfo *finfo; + struct dentry *dentry, *parent, *hi_wh; + struct inode *inode; + struct super_block *sb; + + FiMustWriteLock(file); + + err = 0; + finfo = au_fi(file); + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + bstart = au_ibstart(inode); + if (bstart == finfo->fi_bstart) + goto out; + + parent = dget_parent(dentry); + if (au_test_ro(sb, bstart, inode)) { + di_read_lock_parent(parent, !AuLock_IR); + err = AuWbrCopyup(au_sbi(sb), dentry); + bstart = err; + di_read_unlock(parent, !AuLock_IR); + if (unlikely(err < 0)) + goto out_parent; + err = 0; + } + + di_read_lock_parent(parent, AuLock_IR); + hi_wh = au_hi_wh(inode, bstart); + if (au_opt_test(au_mntflags(sb), PLINK) + && au_plink_test(inode) + && !d_unhashed(dentry)) { + err = au_test_and_cpup_dirs(dentry, bstart); + if (unlikely(err)) + goto out_unlock; + + /* always superio. */ + err = au_pin(&pin, dentry, bstart, AuOpt_UDBA_NONE, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (!err) + err = au_sio_cpup_simple(dentry, bstart, -1, + AuCpup_DTIME); + au_unpin(&pin); + } else if (hi_wh) { + /* already copied-up after unlink */ + err = au_reopen_wh(file, bstart, hi_wh); + *need_reopen = 0; + } + + out_unlock: + di_read_unlock(parent, AuLock_IR); + out_parent: + dput(parent); + out: + return err; +} + +static void au_do_refresh_file(struct file *file) +{ + aufs_bindex_t bindex, bend, new_bindex, brid; + struct au_hfile *p, tmp, *q; + struct au_finfo *finfo; + struct super_block *sb; + + FiMustWriteLock(file); + + sb = file->f_dentry->d_sb; + finfo = au_fi(file); + p = finfo->fi_hfile + finfo->fi_bstart; + brid = p->hf_br->br_id; + bend = finfo->fi_bend; + for (bindex = finfo->fi_bstart; bindex <= bend; bindex++, p++) { + if (!p->hf_file) + continue; + + new_bindex = au_br_index(sb, p->hf_br->br_id); + if (new_bindex == bindex) + continue; + if (new_bindex < 0) { + au_set_h_fptr(file, bindex, NULL); + continue; + } + + /* swap two lower inode, and loop again */ + q = finfo->fi_hfile + new_bindex; + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hf_file) { + bindex--; + p--; + } + } + + p = finfo->fi_hfile; + if (!au_test_mmapped(file) && !d_unhashed(file->f_dentry)) { + bend = au_sbend(sb); + for (finfo->fi_bstart = 0; finfo->fi_bstart <= bend; + finfo->fi_bstart++, p++) + if (p->hf_file) { + if (p->hf_file->f_dentry + && p->hf_file->f_dentry->d_inode) + break; + else + au_hfput(p, file); + } + } else { + bend = au_br_index(sb, brid); + for (finfo->fi_bstart = 0; finfo->fi_bstart < bend; + finfo->fi_bstart++, p++) + if (p->hf_file) + au_hfput(p, file); + bend = au_sbend(sb); + } + + p = finfo->fi_hfile + bend; + for (finfo->fi_bend = bend; finfo->fi_bend >= finfo->fi_bstart; + finfo->fi_bend--, p--) + if (p->hf_file) { + if (p->hf_file->f_dentry + && p->hf_file->f_dentry->d_inode) + break; + else + au_hfput(p, file); + } + AuDebugOn(finfo->fi_bend < finfo->fi_bstart); +} + +/* + * after branch manipulating, refresh the file. + */ +static int refresh_file(struct file *file, int (*reopen)(struct file *file)) +{ + int err, need_reopen; + struct dentry *dentry; + aufs_bindex_t bend, bindex; + + dentry = file->f_dentry; + err = au_fi_realloc(au_fi(file), au_sbend(dentry->d_sb) + 1); + if (unlikely(err)) + goto out; + au_do_refresh_file(file); + + err = 0; + need_reopen = 1; + if (!au_test_mmapped(file)) + err = au_file_refresh_by_inode(file, &need_reopen); + if (!err && need_reopen && !d_unhashed(dentry)) + err = reopen(file); + if (!err) { + au_update_figen(file); + return 0; /* success */ + } + + /* error, close all lower files */ + bend = au_fbend(file); + for (bindex = au_fbstart(file); bindex <= bend; bindex++) + au_set_h_fptr(file, bindex, NULL); + + out: + return err; +} + +/* common function to regular file and dir */ +int au_reval_and_lock_fdi(struct file *file, int (*reopen)(struct file *file), + int wlock) +{ + int err; + unsigned int sigen, figen; + aufs_bindex_t bstart; + unsigned char pseudo_link; + struct dentry *dentry; + + err = 0; + dentry = file->f_dentry; + sigen = au_sigen(dentry->d_sb); + fi_write_lock(file); + figen = au_figen(file); + di_write_lock_child(dentry); + bstart = au_dbstart(dentry); + pseudo_link = (bstart != au_ibstart(dentry->d_inode)); + if (sigen == figen && !pseudo_link && au_fbstart(file) == bstart) { + if (!wlock) { + di_downgrade_lock(dentry, AuLock_IR); + fi_downgrade_lock(file); + } + goto out; /* success */ + } + + AuDbg("sigen %d, figen %d\n", sigen, figen); + if (sigen != au_digen(dentry) + || sigen != au_iigen(dentry->d_inode)) { + err = au_reval_dpath(dentry, sigen); + if (unlikely(err < 0)) + goto out; + AuDebugOn(au_digen(dentry) != sigen + || au_iigen(dentry->d_inode) != sigen); + } + + err = refresh_file(file, reopen); + if (!err) { + if (!wlock) { + di_downgrade_lock(dentry, AuLock_IR); + fi_downgrade_lock(file); + } + } else { + di_write_unlock(dentry); + fi_write_unlock(file); + } + + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* cf. aufs_nopage() */ +/* for madvise(2) */ +static int aufs_readpage(struct file *file __maybe_unused, struct page *page) +{ + unlock_page(page); + return 0; +} + +/* they will never be called. */ +#ifdef CONFIG_AUFS_DEBUG +static int aufs_write_begin(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned flags, + struct page **pagep, void **fsdata) +{ AuUnsupport(); return 0; } +static int aufs_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) +{ AuUnsupport(); return 0; } +static int aufs_writepage(struct page *page, struct writeback_control *wbc) +{ AuUnsupport(); return 0; } +static void aufs_sync_page(struct page *page) +{ AuUnsupport(); } + +static int aufs_set_page_dirty(struct page *page) +{ AuUnsupport(); return 0; } +static void aufs_invalidatepage(struct page *page, unsigned long offset) +{ AuUnsupport(); } +static int aufs_releasepage(struct page *page, gfp_t gfp) +{ AuUnsupport(); return 0; } +static ssize_t aufs_direct_IO(int rw, struct kiocb *iocb, + const struct iovec *iov, loff_t offset, + unsigned long nr_segs) +{ AuUnsupport(); return 0; } +static int aufs_get_xip_mem(struct address_space *mapping, pgoff_t pgoff, + int create, void **kmem, unsigned long *pfn) +{ AuUnsupport(); return 0; } +static int aufs_migratepage(struct address_space *mapping, struct page *newpage, + struct page *page) +{ AuUnsupport(); return 0; } +static int aufs_launder_page(struct page *page) +{ AuUnsupport(); return 0; } +static int aufs_is_partially_uptodate(struct page *page, + read_descriptor_t *desc, + unsigned long from) +{ AuUnsupport(); return 0; } +static int aufs_error_remove_page(struct address_space *mapping, + struct page *page) +{ AuUnsupport(); return 0; } +#endif /* CONFIG_AUFS_DEBUG */ + +struct address_space_operations aufs_aop = { + .readpage = aufs_readpage, +#ifdef CONFIG_AUFS_DEBUG + .writepage = aufs_writepage, + .sync_page = aufs_sync_page, + /* no writepages, because of writepage */ + .set_page_dirty = aufs_set_page_dirty, + /* no readpages, because of readpage */ + .write_begin = aufs_write_begin, + .write_end = aufs_write_end, + /* no bmap, no block device */ + .invalidatepage = aufs_invalidatepage, + .releasepage = aufs_releasepage, + .direct_IO = aufs_direct_IO, /* todo */ + .get_xip_mem = aufs_get_xip_mem, /* todo */ + .migratepage = aufs_migratepage, + .launder_page = aufs_launder_page, + .is_partially_uptodate = aufs_is_partially_uptodate, + .error_remove_page = aufs_error_remove_page +#endif /* CONFIG_AUFS_DEBUG */ +}; --- linux-2.6.32.orig/ubuntu/aufs/rdu.c +++ linux-2.6.32/ubuntu/aufs/rdu.c @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * readdir in userspace. + */ + +#include +#include +#include +#include "aufs.h" + +/* bits for struct aufs_rdu.flags */ +#define AuRdu_CALLED 1 +#define AuRdu_CONT (1 << 1) +#define AuRdu_FULL (1 << 2) +#define au_ftest_rdu(flags, name) ((flags) & AuRdu_##name) +#define au_fset_rdu(flags, name) { (flags) |= AuRdu_##name; } +#define au_fclr_rdu(flags, name) { (flags) &= ~AuRdu_##name; } + +struct au_rdu_arg { + struct aufs_rdu *rdu; + union au_rdu_ent_ul ent; + unsigned long end; + + struct super_block *sb; + int err; +}; + +static int au_rdu_fill(void *__arg, const char *name, int nlen, + loff_t offset, u64 h_ino, unsigned int d_type) +{ + int err, len; + struct au_rdu_arg *arg = __arg; + struct aufs_rdu *rdu = arg->rdu; + struct au_rdu_ent ent; + + err = 0; + arg->err = 0; + au_fset_rdu(rdu->cookie.flags, CALLED); + len = au_rdu_len(nlen); + if (arg->ent.ul + len < arg->end) { + ent.ino = h_ino; + ent.bindex = rdu->cookie.bindex; + ent.type = d_type; + ent.nlen = nlen; + if (unlikely(nlen > AUFS_MAX_NAMELEN)) + ent.type = DT_UNKNOWN; + + err = -EFAULT; + if (copy_to_user(arg->ent.e, &ent, sizeof(ent))) + goto out; + if (copy_to_user(arg->ent.e->name, name, nlen)) + goto out; + /* the terminating NULL */ + if (__put_user(0, arg->ent.e->name + nlen)) + goto out; + err = 0; + /* AuDbg("%p, %.*s\n", arg->ent.p, nlen, name); */ + arg->ent.ul += len; + rdu->rent++; + } else { + err = -EFAULT; + au_fset_rdu(rdu->cookie.flags, FULL); + rdu->full = 1; + rdu->tail = arg->ent; + } + + out: + /* AuTraceErr(err); */ + return err; +} + +static int au_rdu_do(struct file *h_file, struct au_rdu_arg *arg) +{ + int err; + loff_t offset; + struct au_rdu_cookie *cookie = &arg->rdu->cookie; + + offset = vfsub_llseek(h_file, cookie->h_pos, SEEK_SET); + err = offset; + if (unlikely(offset != cookie->h_pos)) + goto out; + + err = 0; + do { + arg->err = 0; + au_fclr_rdu(cookie->flags, CALLED); + /* smp_mb(); */ + err = vfsub_readdir(h_file, au_rdu_fill, arg); + if (err >= 0) + err = arg->err; + } while (!err + && au_ftest_rdu(cookie->flags, CALLED) + && !au_ftest_rdu(cookie->flags, FULL)); + cookie->h_pos = h_file->f_pos; + + out: + AuTraceErr(err); + return err; +} + +static int au_rdu(struct file *file, struct aufs_rdu *rdu) +{ + int err; + aufs_bindex_t bend; + struct au_rdu_arg arg; + struct dentry *dentry; + struct inode *inode; + struct file *h_file; + struct au_rdu_cookie *cookie = &rdu->cookie; + + err = !access_ok(VERIFY_WRITE, rdu->ent.e, rdu->sz); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out; + } + rdu->rent = 0; + rdu->tail = rdu->ent; + rdu->full = 0; + arg.rdu = rdu; + arg.ent = rdu->ent; + arg.end = arg.ent.ul; + arg.end += rdu->sz; + + err = -ENOTDIR; + if (unlikely(!file->f_op || !file->f_op->readdir)) + goto out; + + err = security_file_permission(file, MAY_READ); + AuTraceErr(err); + if (unlikely(err)) + goto out; + + dentry = file->f_dentry; + inode = dentry->d_inode; +#if 1 + mutex_lock(&inode->i_mutex); +#else + err = mutex_lock_killable(&inode->i_mutex); + AuTraceErr(err); + if (unlikely(err)) + goto out; +#endif + err = -ENOENT; + if (unlikely(IS_DEADDIR(inode))) + goto out_mtx; + + arg.sb = inode->i_sb; + si_read_lock(arg.sb, AuLock_FLUSH); + fi_read_lock(file); + + err = -EAGAIN; + if (unlikely(au_ftest_rdu(cookie->flags, CONT) + && cookie->generation != au_figen(file))) + goto out_unlock; + + err = 0; + if (!rdu->blk) { + rdu->blk = au_sbi(arg.sb)->si_rdblk; + if (!rdu->blk) + rdu->blk = au_dir_size(file, /*dentry*/NULL); + } + bend = au_fbstart(file); + if (cookie->bindex < bend) + cookie->bindex = bend; + bend = au_fbend(file); + /* AuDbg("b%d, b%d\n", cookie->bindex, bend); */ + for (; !err && cookie->bindex <= bend; + cookie->bindex++, cookie->h_pos = 0) { + h_file = au_h_fptr(file, cookie->bindex); + if (!h_file) + continue; + + au_fclr_rdu(cookie->flags, FULL); + err = au_rdu_do(h_file, &arg); + AuTraceErr(err); + if (unlikely(au_ftest_rdu(cookie->flags, FULL) || err)) + break; + } + AuDbg("rent %llu\n", rdu->rent); + + if (!err && !au_ftest_rdu(cookie->flags, CONT)) { + rdu->shwh = !!au_opt_test(au_sbi(arg.sb)->si_mntflags, SHWH); + au_fset_rdu(cookie->flags, CONT); + cookie->generation = au_figen(file); + } + + ii_read_lock_child(inode); + fsstack_copy_attr_atime(inode, au_h_iptr(inode, au_ibstart(inode))); + ii_read_unlock(inode); + + out_unlock: + fi_read_unlock(file); + si_read_unlock(arg.sb); + out_mtx: + mutex_unlock(&inode->i_mutex); + out: + AuTraceErr(err); + return err; +} + +static int au_rdu_ino(struct file *file, struct aufs_rdu *rdu) +{ + int err; + ino_t ino; + unsigned long long nent; + union au_rdu_ent_ul *u; + struct au_rdu_ent ent; + struct super_block *sb; + + err = 0; + nent = rdu->nent; + u = &rdu->ent; + sb = file->f_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + while (nent-- > 0) { + err = !access_ok(VERIFY_WRITE, u->e, sizeof(ent)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + break; + } + + err = copy_from_user(&ent, u->e, sizeof(ent)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + break; + } + + /* AuDbg("b%d, i%llu\n", ent.bindex, ent.ino); */ + if (!ent.wh) + err = au_ino(sb, ent.bindex, ent.ino, ent.type, &ino); + else + err = au_wh_ino(sb, ent.bindex, ent.ino, ent.type, + &ino); + if (unlikely(err)) { + AuTraceErr(err); + break; + } + + err = __put_user(ino, &u->e->ino); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + break; + } + u->ul += au_rdu_len(ent.nlen); + } + si_read_unlock(sb); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_rdu_verify(struct aufs_rdu *rdu) +{ + AuDbg("rdu{%llu, %p, (%u, %u) | %u | %llu, %u, %u | " + "%llu, b%d, 0x%x, g%u}\n", + rdu->sz, rdu->ent.e, rdu->verify[0], rdu->verify[1], + rdu->blk, + rdu->rent, rdu->shwh, rdu->full, + rdu->cookie.h_pos, rdu->cookie.bindex, rdu->cookie.flags, + rdu->cookie.generation); + + if (rdu->verify[AufsCtlRduV_SZ] == sizeof(*rdu) + && rdu->verify[AufsCtlRduV_SZ_PTR] == sizeof(rdu)) + return 0; + + AuDbg("%u:%u, %u:%u\n", + rdu->verify[AufsCtlRduV_SZ], (unsigned int)sizeof(*rdu), + rdu->verify[AufsCtlRduV_SZ_PTR], (unsigned int)sizeof(rdu)); + return -EINVAL; +} + +long au_rdu_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err, e; + struct aufs_rdu rdu; + void __user *p = (void __user *)arg; + + err = copy_from_user(&rdu, p, sizeof(rdu)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out; + } + err = au_rdu_verify(&rdu); + if (unlikely(err)) + goto out; + + switch (cmd) { + case AUFS_CTL_RDU: + err = au_rdu(file, &rdu); + if (unlikely(err)) + break; + + e = copy_to_user(p, &rdu, sizeof(rdu)); + if (unlikely(e)) { + err = -EFAULT; + AuTraceErr(err); + } + break; + case AUFS_CTL_RDU_INO: + err = au_rdu_ino(file, &rdu); + break; + + default: + err = -EINVAL; + } + + out: + AuTraceErr(err); + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/sysfs.c +++ linux-2.6.32/ubuntu/aufs/sysfs.c @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sysfs interface + */ + +#include +#include +#include +#include +#include "aufs.h" + +#ifdef CONFIG_AUFS_FS_MODULE +/* this entry violates the "one line per file" policy of sysfs */ +static ssize_t config_show(struct kobject *kobj, struct kobj_attribute *attr, + char *buf) +{ + ssize_t err; + static char *conf = +/* this file is generated at compiling */ +#include "conf.str" + ; + + err = snprintf(buf, PAGE_SIZE, conf); + if (unlikely(err >= PAGE_SIZE)) + err = -EFBIG; + return err; +} + +static struct kobj_attribute au_config_attr = __ATTR_RO(config); +#endif + +static struct attribute *au_attr[] = { +#ifdef CONFIG_AUFS_FS_MODULE + &au_config_attr.attr, +#endif + NULL, /* need to NULL terminate the list of attributes */ +}; + +static struct attribute_group sysaufs_attr_group_body = { + .attrs = au_attr +}; + +struct attribute_group *sysaufs_attr_group = &sysaufs_attr_group_body; + +/* ---------------------------------------------------------------------- */ + +int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb) +{ + int err; + + SiMustAnyLock(sb); + + err = 0; + if (au_opt_test(au_mntflags(sb), XINO)) { + err = au_xino_path(seq, au_sbi(sb)->si_xib); + seq_putc(seq, '\n'); + } + return err; +} + +/* + * the lifetime of branch is independent from the entry under sysfs. + * sysfs handles the lifetime of the entry, and never call ->show() after it is + * unlinked. + */ +static int sysaufs_si_br(struct seq_file *seq, struct super_block *sb, + aufs_bindex_t bindex) +{ + struct path path; + struct dentry *root; + struct au_branch *br; + + AuDbg("b%d\n", bindex); + + root = sb->s_root; + di_read_lock_parent(root, !AuLock_IR); + br = au_sbr(sb, bindex); + path.mnt = br->br_mnt; + path.dentry = au_h_dptr(root, bindex); + au_seq_path(seq, &path); + di_read_unlock(root, !AuLock_IR); + seq_printf(seq, "=%s\n", au_optstr_br_perm(br->br_perm)); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static struct seq_file *au_seq(char *p, ssize_t len) +{ + struct seq_file *seq; + + seq = kzalloc(sizeof(*seq), GFP_NOFS); + if (seq) { + /* mutex_init(&seq.lock); */ + seq->buf = p; + seq->size = len; + return seq; /* success */ + } + + seq = ERR_PTR(-ENOMEM); + return seq; +} + +#define SysaufsBr_PREFIX "br" + +/* todo: file size may exceed PAGE_SIZE */ +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf) +{ + ssize_t err; + long l; + aufs_bindex_t bend; + struct au_sbinfo *sbinfo; + struct super_block *sb; + struct seq_file *seq; + char *name; + struct attribute **cattr; + + sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); + sb = sbinfo->si_sb; + + /* + * prevent a race condition between sysfs and aufs. + * for instance, sysfs_file_read() calls sysfs_get_active_two() which + * prohibits maintaining the sysfs entries. + * hew we acquire read lock after sysfs_get_active_two(). + * on the other hand, the remount process may maintain the sysfs/aufs + * entries after acquiring write lock. + * it can cause a deadlock. + * simply we gave up processing read here. + */ + err = -EBUSY; + if (unlikely(!si_noflush_read_trylock(sb))) + goto out; + + seq = au_seq(buf, PAGE_SIZE); + err = PTR_ERR(seq); + if (IS_ERR(seq)) + goto out_unlock; + + name = (void *)attr->name; + cattr = sysaufs_si_attrs; + while (*cattr) { + if (!strcmp(name, (*cattr)->name)) { + err = container_of(*cattr, struct sysaufs_si_attr, attr) + ->show(seq, sb); + goto out_seq; + } + cattr++; + } + + bend = au_sbend(sb); + if (!strncmp(name, SysaufsBr_PREFIX, sizeof(SysaufsBr_PREFIX) - 1)) { + name += sizeof(SysaufsBr_PREFIX) - 1; + err = strict_strtol(name, 10, &l); + if (!err) { + if (l <= bend) + err = sysaufs_si_br(seq, sb, (aufs_bindex_t)l); + else + err = -ENOENT; + } + goto out_seq; + } + BUG(); + + out_seq: + if (!err) { + err = seq->count; + /* sysfs limit */ + if (unlikely(err == PAGE_SIZE)) + err = -EFBIG; + } + kfree(seq); + out_unlock: + si_read_unlock(sb); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +void sysaufs_br_init(struct au_branch *br) +{ + br->br_attr.name = br->br_name; + br->br_attr.mode = S_IRUGO; + br->br_attr.owner = THIS_MODULE; +} + +void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + struct au_branch *br; + struct kobject *kobj; + aufs_bindex_t bend; + + dbgaufs_brs_del(sb, bindex); + + if (!sysaufs_brs) + return; + + kobj = &au_sbi(sb)->si_kobj; + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + sysfs_remove_file(kobj, &br->br_attr); + } +} + +void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + int err; + aufs_bindex_t bend; + struct kobject *kobj; + struct au_branch *br; + + dbgaufs_brs_add(sb, bindex); + + if (!sysaufs_brs) + return; + + kobj = &au_sbi(sb)->si_kobj; + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + snprintf(br->br_name, sizeof(br->br_name), SysaufsBr_PREFIX + "%d", bindex); + err = sysfs_create_file(kobj, &br->br_attr); + if (unlikely(err)) + pr_warning("failed %s under sysfs(%d)\n", + br->br_name, err); + } +} --- linux-2.6.32.orig/ubuntu/aufs/ioctl.c +++ linux-2.6.32/ubuntu/aufs/ioctl.c @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * ioctl + * plink-management and readdir in userspace. + * assist the pathconf(3) wrapper library. + */ + +#include +#include "aufs.h" + +static int au_wbr_fd(struct path *path) +{ + int err, fd, flags; + aufs_bindex_t wbi, bindex, bend; + struct file *h_file; + struct super_block *sb; + struct dentry *root; + struct au_branch *wbr; + + err = get_unused_fd(); + if (unlikely(err < 0)) + goto out; + fd = err; + + flags = O_RDONLY | O_DIRECTORY; + if (force_o_largefile()) + flags |= O_LARGEFILE; + + wbi = 0; + sb = path->dentry->d_sb; + root = sb->s_root; + aufs_read_lock(root, AuLock_IR); + wbr = au_sbr(sb, wbi); + if (!(path->mnt->mnt_flags & MNT_READONLY) + && !au_br_writable(wbr->br_perm)) { + bend = au_sbend(sb); + for (bindex = 1; bindex <= bend; bindex++) { + wbr = au_sbr(sb, bindex); + if (au_br_writable(wbr->br_perm)) { + wbi = bindex; + break; + } + } + wbr = au_sbr(sb, wbi); + } + AuDbg("wbi %d\n", wbi); + h_file = au_h_open(root, wbi, flags, NULL); + aufs_read_unlock(root, AuLock_IR); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out_fd; + + atomic_dec(&wbr->br_count); /* cf. au_h_open() */ + fd_install(fd, h_file); + err = fd; + goto out; /* success */ + + out_fd: + put_unused_fd(fd); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err; + + switch (cmd) { + case AUFS_CTL_PLINK_MAINT: + case AUFS_CTL_PLINK_CLEAN: + err = au_plink_ioctl(file, cmd); + break; + + case AUFS_CTL_RDU: + case AUFS_CTL_RDU_INO: + err = au_rdu_ioctl(file, cmd, arg); + break; + + case AUFS_CTL_WBR_FD: + err = au_wbr_fd(&file->f_path); + break; + + default: + err = -EINVAL; + } + + AuTraceErr(err); + return err; +} + +long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err; + + switch (cmd) { + case AUFS_CTL_WBR_FD: + err = au_wbr_fd(&file->f_path); + break; + + default: + err = -EINVAL; + } + + AuTraceErr(err); + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/fstype.h +++ linux-2.6.32/ubuntu/aufs/fstype.h @@ -0,0 +1,484 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * judging filesystem type + */ + +#ifndef __AUFS_FSTYPE_H__ +#define __AUFS_FSTYPE_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include + +static inline int au_test_aufs(struct super_block *sb) +{ + return sb->s_magic == AUFS_SUPER_MAGIC; +} + +static inline const char *au_sbtype(struct super_block *sb) +{ + return sb->s_type->name; +} + +static inline int au_test_iso9660(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_ROMFS_FS) || defined(CONFIG_ROMFS_FS_MODULE) + return sb->s_magic == ROMFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_romfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_ISO9660_FS) || defined(CONFIG_ISO9660_FS_MODULE) + return sb->s_magic == ISOFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_cramfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CRAMFS) || defined(CONFIG_CRAMFS_MODULE) + return sb->s_magic == CRAMFS_MAGIC; +#endif + return 0; +} + +static inline int au_test_nfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_NFS_FS) || defined(CONFIG_NFS_FS_MODULE) + return sb->s_magic == NFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_fuse(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_FUSE_FS) || defined(CONFIG_FUSE_FS_MODULE) + return sb->s_magic == FUSE_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_xfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_XFS_FS) || defined(CONFIG_XFS_FS_MODULE) + return sb->s_magic == XFS_SB_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_tmpfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_TMPFS + return sb->s_magic == TMPFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ecryptfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_ECRYPT_FS) || defined(CONFIG_ECRYPT_FS_MODULE) + return !strcmp(au_sbtype(sb), "ecryptfs"); +#else + return 0; +#endif +} + +static inline int au_test_smbfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_SMB_FS) || defined(CONFIG_SMB_FS_MODULE) + return sb->s_magic == SMB_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ocfs2(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_OCFS2_FS) || defined(CONFIG_OCFS2_FS_MODULE) + return sb->s_magic == OCFS2_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ocfs2_dlmfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_OCFS2_FS_O2CB) || defined(CONFIG_OCFS2_FS_O2CB_MODULE) + return sb->s_magic == DLMFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_coda(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CODA_FS) || defined(CONFIG_CODA_FS_MODULE) + return sb->s_magic == CODA_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_v9fs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_9P_FS) || defined(CONFIG_9P_FS_MODULE) + return sb->s_magic == V9FS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ext4(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_EXT4DEV_FS) || defined(CONFIG_EXT4DEV_FS_MODULE) + return sb->s_magic == EXT4_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_sysv(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_SYSV_FS) || defined(CONFIG_SYSV_FS_MODULE) + return !strcmp(au_sbtype(sb), "sysv"); +#else + return 0; +#endif +} + +static inline int au_test_ramfs(struct super_block *sb) +{ + return sb->s_magic == RAMFS_MAGIC; +} + +static inline int au_test_ubifs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_UBIFS_FS) || defined(CONFIG_UBIFS_FS_MODULE) + return sb->s_magic == UBIFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_procfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_PROC_FS + return sb->s_magic == PROC_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_sysfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_SYSFS + return sb->s_magic == SYSFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_configfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CONFIGFS_FS) || defined(CONFIG_CONFIGFS_FS_MODULE) + return sb->s_magic == CONFIGFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_minix(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_MINIX_FS) || defined(CONFIG_MINIX_FS_MODULE) + return sb->s_magic == MINIX3_SUPER_MAGIC + || sb->s_magic == MINIX2_SUPER_MAGIC + || sb->s_magic == MINIX2_SUPER_MAGIC2 + || sb->s_magic == MINIX_SUPER_MAGIC + || sb->s_magic == MINIX_SUPER_MAGIC2; +#else + return 0; +#endif +} + +static inline int au_test_cifs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CIFS_FS) || defined(CONFIGCIFS_FS_MODULE) + return sb->s_magic == CIFS_MAGIC_NUMBER; +#else + return 0; +#endif +} + +static inline int au_test_fat(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_FAT_FS) || defined(CONFIG_FAT_FS_MODULE) + return sb->s_magic == MSDOS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_msdos(struct super_block *sb) +{ + return au_test_fat(sb); +} + +static inline int au_test_vfat(struct super_block *sb) +{ + return au_test_fat(sb); +} + +static inline int au_test_securityfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_SECURITYFS + return sb->s_magic == SECURITYFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_squashfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_SQUASHFS) || defined(CONFIG_SQUASHFS_MODULE) + return sb->s_magic == SQUASHFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_btrfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE) + return sb->s_magic == BTRFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_xenfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_XENFS) || defined(CONFIG_XENFS_MODULE) + return sb->s_magic == XENFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_debugfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_DEBUG_FS + return sb->s_magic == DEBUGFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_nilfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_NILFS) || defined(CONFIG_NILFS_MODULE) + return sb->s_magic == NILFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +/* ---------------------------------------------------------------------- */ +/* + * they can't be an aufs branch. + */ +static inline int au_test_fs_unsuppoted(struct super_block *sb) +{ + return +#ifndef CONFIG_AUFS_BR_RAMFS + au_test_ramfs(sb) || +#endif + au_test_procfs(sb) + || au_test_sysfs(sb) + || au_test_configfs(sb) + || au_test_debugfs(sb) + || au_test_securityfs(sb) + || au_test_xenfs(sb) + || au_test_ecryptfs(sb) + /* || !strcmp(au_sbtype(sb), "unionfs") */ + || au_test_aufs(sb); /* will be supported in next version */ +} + +/* + * If the filesystem supports NFS-export, then it has to support NULL as + * a nameidata parameter for ->create(), ->lookup() and ->d_revalidate(). + * We can apply this principle when we handle a lower filesystem. + */ +static inline int au_test_fs_null_nd(struct super_block *sb) +{ + return !!sb->s_export_op; +} + +static inline int au_test_fs_remote(struct super_block *sb) +{ + return !au_test_tmpfs(sb) +#ifdef CONFIG_AUFS_BR_RAMFS + && !au_test_ramfs(sb) +#endif + && !(sb->s_type->fs_flags & FS_REQUIRES_DEV); +} + +/* ---------------------------------------------------------------------- */ + +/* + * Note: these functions (below) are created after reading ->getattr() in all + * filesystems under linux/fs. it means we have to do so in every update... + */ + +/* + * some filesystems require getattr to refresh the inode attributes before + * referencing. + * in most cases, we can rely on the inode attribute in NFS (or every remote fs) + * and leave the work for d_revalidate() + */ +static inline int au_test_fs_refresh_iattr(struct super_block *sb) +{ + return au_test_nfs(sb) + || au_test_fuse(sb) + /* || au_test_smbfs(sb) */ /* untested */ + /* || au_test_ocfs2(sb) */ /* untested */ + /* || au_test_btrfs(sb) */ /* untested */ + /* || au_test_coda(sb) */ /* untested */ + /* || au_test_v9fs(sb) */ /* untested */ + ; +} + +/* + * filesystems which don't maintain i_size or i_blocks. + */ +static inline int au_test_fs_bad_iattr_size(struct super_block *sb) +{ + return au_test_xfs(sb) + /* || au_test_ext4(sb) */ /* untested */ + /* || au_test_ocfs2(sb) */ /* untested */ + /* || au_test_ocfs2_dlmfs(sb) */ /* untested */ + /* || au_test_sysv(sb) */ /* untested */ + /* || au_test_ubifs(sb) */ /* untested */ + /* || au_test_minix(sb) */ /* untested */ + ; +} + +/* + * filesystems which don't store the correct value in some of their inode + * attributes. + */ +static inline int au_test_fs_bad_iattr(struct super_block *sb) +{ + return au_test_fs_bad_iattr_size(sb) + /* || au_test_cifs(sb) */ /* untested */ + || au_test_fat(sb) + || au_test_msdos(sb) + || au_test_vfat(sb); +} + +/* they don't check i_nlink in link(2) */ +static inline int au_test_fs_no_limit_nlink(struct super_block *sb) +{ + return au_test_tmpfs(sb) +#ifdef CONFIG_AUFS_BR_RAMFS + || au_test_ramfs(sb) +#endif + || au_test_ubifs(sb); +} + +/* + * filesystems which sets S_NOATIME and S_NOCMTIME. + */ +static inline int au_test_fs_notime(struct super_block *sb) +{ + return au_test_nfs(sb) + || au_test_fuse(sb) + || au_test_ubifs(sb) + /* || au_test_cifs(sb) */ /* untested */ + ; +} + +/* + * filesystems which requires replacing i_mapping. + */ +static inline int au_test_fs_bad_mapping(struct super_block *sb) +{ + return au_test_fuse(sb) + || au_test_ubifs(sb); +} + +/* temporary support for i#1 in cramfs */ +static inline int au_test_fs_unique_ino(struct inode *inode) +{ + if (au_test_cramfs(inode->i_sb)) + return inode->i_ino != 1; + return 1; +} + +/* ---------------------------------------------------------------------- */ + +/* + * the filesystem where the xino files placed must support i/o after unlink and + * maintain i_size and i_blocks. + */ +static inline int au_test_fs_bad_xino(struct super_block *sb) +{ + return au_test_fs_remote(sb) + || au_test_fs_bad_iattr_size(sb) +#ifdef CONFIG_AUFS_BR_RAMFS + || !(au_test_ramfs(sb) || au_test_fs_null_nd(sb)) +#else + || !au_test_fs_null_nd(sb) /* to keep xino code simple */ +#endif + /* don't want unnecessary work for xino */ + || au_test_aufs(sb) + || au_test_ecryptfs(sb) + || au_test_nilfs(sb); +} + +static inline int au_test_fs_trunc_xino(struct super_block *sb) +{ + return au_test_tmpfs(sb) + || au_test_ramfs(sb); +} + +/* + * test if the @sb is real-readonly. + */ +static inline int au_test_fs_rr(struct super_block *sb) +{ + return au_test_squashfs(sb) + || au_test_iso9660(sb) + || au_test_cramfs(sb) + || au_test_romfs(sb); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FSTYPE_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/dbgaufs.c +++ linux-2.6.32/ubuntu/aufs/dbgaufs.c @@ -0,0 +1,331 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * debugfs interface + */ + +#include +#include "aufs.h" + +#ifndef CONFIG_SYSFS +#error DEBUG_FS depends upon SYSFS +#endif + +static struct dentry *dbgaufs; +static const mode_t dbgaufs_mode = S_IRUSR | S_IRGRP | S_IROTH; + +/* 20 is max digits length of ulong 64 */ +struct dbgaufs_arg { + int n; + char a[20 * 4]; +}; + +/* + * common function for all XINO files + */ +static int dbgaufs_xi_release(struct inode *inode __maybe_unused, + struct file *file) +{ + kfree(file->private_data); + return 0; +} + +static int dbgaufs_xi_open(struct file *xf, struct file *file, int do_fcnt) +{ + int err; + struct kstat st; + struct dbgaufs_arg *p; + + err = -ENOMEM; + p = kmalloc(sizeof(*p), GFP_NOFS); + if (unlikely(!p)) + goto out; + + err = 0; + p->n = 0; + file->private_data = p; + if (!xf) + goto out; + + err = vfs_getattr(xf->f_vfsmnt, xf->f_dentry, &st); + if (!err) { + if (do_fcnt) + p->n = snprintf + (p->a, sizeof(p->a), "%ld, %llux%lu %lld\n", + (long)file_count(xf), st.blocks, st.blksize, + (long long)st.size); + else + p->n = snprintf(p->a, sizeof(p->a), "%llux%lu %lld\n", + st.blocks, st.blksize, + (long long)st.size); + AuDebugOn(p->n >= sizeof(p->a)); + } else { + p->n = snprintf(p->a, sizeof(p->a), "err %d\n", err); + err = 0; + } + + out: + return err; + +} + +static ssize_t dbgaufs_xi_read(struct file *file, char __user *buf, + size_t count, loff_t *ppos) +{ + struct dbgaufs_arg *p; + + p = file->private_data; + return simple_read_from_buffer(buf, count, ppos, p->a, p->n); +} + +/* ---------------------------------------------------------------------- */ + +static int dbgaufs_xib_open(struct inode *inode, struct file *file) +{ + int err; + struct au_sbinfo *sbinfo; + struct super_block *sb; + + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + err = dbgaufs_xi_open(sbinfo->si_xib, file, /*do_fcnt*/0); + si_read_unlock(sb); + return err; +} + +static const struct file_operations dbgaufs_xib_fop = { + .open = dbgaufs_xib_open, + .release = dbgaufs_xi_release, + .read = dbgaufs_xi_read +}; + +/* ---------------------------------------------------------------------- */ + +#define DbgaufsXi_PREFIX "xi" + +static int dbgaufs_xino_open(struct inode *inode, struct file *file) +{ + int err; + long l; + struct au_sbinfo *sbinfo; + struct super_block *sb; + struct file *xf; + struct qstr *name; + + err = -ENOENT; + xf = NULL; + name = &file->f_dentry->d_name; + if (unlikely(name->len < sizeof(DbgaufsXi_PREFIX) + || memcmp(name->name, DbgaufsXi_PREFIX, + sizeof(DbgaufsXi_PREFIX) - 1))) + goto out; + err = strict_strtol(name->name + sizeof(DbgaufsXi_PREFIX) - 1, 10, &l); + if (unlikely(err)) + goto out; + + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + if (l <= au_sbend(sb)) { + xf = au_sbr(sb, (aufs_bindex_t)l)->br_xino.xi_file; + err = dbgaufs_xi_open(xf, file, /*do_fcnt*/1); + } else + err = -ENOENT; + si_read_unlock(sb); + + out: + return err; +} + +static const struct file_operations dbgaufs_xino_fop = { + .open = dbgaufs_xino_open, + .release = dbgaufs_xi_release, + .read = dbgaufs_xi_read +}; + +void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + aufs_bindex_t bend; + struct au_branch *br; + struct au_xino_file *xi; + + if (!au_sbi(sb)->si_dbgaufs) + return; + + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + xi = &br->br_xino; + if (xi->xi_dbgaufs) { + debugfs_remove(xi->xi_dbgaufs); + xi->xi_dbgaufs = NULL; + } + } +} + +void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + struct au_sbinfo *sbinfo; + struct dentry *parent; + struct au_branch *br; + struct au_xino_file *xi; + aufs_bindex_t bend; + char name[sizeof(DbgaufsXi_PREFIX) + 5]; /* "xi" bindex NULL */ + + sbinfo = au_sbi(sb); + parent = sbinfo->si_dbgaufs; + if (!parent) + return; + + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + snprintf(name, sizeof(name), DbgaufsXi_PREFIX "%d", bindex); + br = au_sbr(sb, bindex); + xi = &br->br_xino; + AuDebugOn(xi->xi_dbgaufs); + xi->xi_dbgaufs = debugfs_create_file(name, dbgaufs_mode, parent, + sbinfo, &dbgaufs_xino_fop); + /* ignore an error */ + if (unlikely(!xi->xi_dbgaufs)) + AuWarn1("failed %s under debugfs\n", name); + } +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_EXPORT +static int dbgaufs_xigen_open(struct inode *inode, struct file *file) +{ + int err; + struct au_sbinfo *sbinfo; + struct super_block *sb; + + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + err = dbgaufs_xi_open(sbinfo->si_xigen, file, /*do_fcnt*/0); + si_read_unlock(sb); + return err; +} + +static const struct file_operations dbgaufs_xigen_fop = { + .open = dbgaufs_xigen_open, + .release = dbgaufs_xi_release, + .read = dbgaufs_xi_read +}; + +static int dbgaufs_xigen_init(struct au_sbinfo *sbinfo) +{ + int err; + + /* + * This function is a dynamic '__init' fucntion actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ + + err = -EIO; + sbinfo->si_dbgaufs_xigen = debugfs_create_file + ("xigen", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, + &dbgaufs_xigen_fop); + if (sbinfo->si_dbgaufs_xigen) + err = 0; + + return err; +} +#else +static int dbgaufs_xigen_init(struct au_sbinfo *sbinfo) +{ + return 0; +} +#endif /* CONFIG_AUFS_EXPORT */ + +/* ---------------------------------------------------------------------- */ + +void dbgaufs_si_fin(struct au_sbinfo *sbinfo) +{ + /* + * This function is a dynamic '__init' fucntion actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ + + debugfs_remove_recursive(sbinfo->si_dbgaufs); + sbinfo->si_dbgaufs = NULL; + kobject_put(&sbinfo->si_kobj); +} + +int dbgaufs_si_init(struct au_sbinfo *sbinfo) +{ + int err; + char name[SysaufsSiNameLen]; + + /* + * This function is a dynamic '__init' fucntion actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ + + err = -ENOENT; + if (!dbgaufs) { + AuErr1("/debug/aufs is uninitialized\n"); + goto out; + } + + err = -EIO; + sysaufs_name(sbinfo, name); + sbinfo->si_dbgaufs = debugfs_create_dir(name, dbgaufs); + if (unlikely(!sbinfo->si_dbgaufs)) + goto out; + kobject_get(&sbinfo->si_kobj); + + sbinfo->si_dbgaufs_xib = debugfs_create_file + ("xib", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, + &dbgaufs_xib_fop); + if (unlikely(!sbinfo->si_dbgaufs_xib)) + goto out_dir; + + err = dbgaufs_xigen_init(sbinfo); + if (!err) + goto out; /* success */ + + out_dir: + dbgaufs_si_fin(sbinfo); + out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +void dbgaufs_fin(void) +{ + debugfs_remove(dbgaufs); +} + +int __init dbgaufs_init(void) +{ + int err; + + err = -EIO; + dbgaufs = debugfs_create_dir(AUFS_NAME, NULL); + if (dbgaufs) + err = 0; + return err; +} --- linux-2.6.32.orig/ubuntu/aufs/debug.h +++ linux-2.6.32/ubuntu/aufs/debug.h @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * debug print functions + */ + +#ifndef __AUFS_DEBUG_H__ +#define __AUFS_DEBUG_H__ + +#ifdef __KERNEL__ + +#include +#include +/* #include */ +#include +/* #include */ +#include +/* #include */ +/* #include */ +#include +#include + +#include + +#ifdef CONFIG_AUFS_DEBUG +#define AuDebugOn(a) BUG_ON(a) + +/* module parameter */ +extern int aufs_debug; +static inline void au_debug(int n) +{ + aufs_debug = n; + smp_mb(); +} + +static inline int au_debug_test(void) +{ + return aufs_debug; +} +#else +#define AuDebugOn(a) do {} while (0) +#define au_debug() do {} while (0) +static inline int au_debug_test(void) +{ + return 0; +} +#endif /* CONFIG_AUFS_DEBUG */ + +/* ---------------------------------------------------------------------- */ + +/* debug print */ + +#define AuDbg(fmt, ...) do { \ + if (au_debug_test()) \ + pr_debug("DEBUG: " fmt, ##__VA_ARGS__); \ +} while (0) +#define AuLabel(l) AuDbg(#l "\n") +#define AuIOErr(fmt, ...) pr_err("I/O Error, " fmt, ##__VA_ARGS__) +#define AuWarn1(fmt, ...) do { \ + static unsigned char _c; \ + if (!_c++) \ + pr_warning(fmt, ##__VA_ARGS__); \ +} while (0) + +#define AuErr1(fmt, ...) do { \ + static unsigned char _c; \ + if (!_c++) \ + pr_err(fmt, ##__VA_ARGS__); \ +} while (0) + +#define AuIOErr1(fmt, ...) do { \ + static unsigned char _c; \ + if (!_c++) \ + AuIOErr(fmt, ##__VA_ARGS__); \ +} while (0) + +#define AuUnsupportMsg "This operation is not supported." \ + " Please report this application to aufs-users ML." +#define AuUnsupport(fmt, ...) do { \ + pr_err(AuUnsupportMsg "\n" fmt, ##__VA_ARGS__); \ + dump_stack(); \ +} while (0) + +#define AuTraceErr(e) do { \ + if (unlikely((e) < 0)) \ + AuDbg("err %d\n", (int)(e)); \ +} while (0) + +#define AuTraceErrPtr(p) do { \ + if (IS_ERR(p)) \ + AuDbg("err %ld\n", PTR_ERR(p)); \ +} while (0) + +/* dirty macros for debug print, use with "%.*s" and caution */ +#define AuLNPair(qstr) (qstr)->len, (qstr)->name +#define AuDLNPair(d) AuLNPair(&(d)->d_name) + +/* ---------------------------------------------------------------------- */ + +struct au_sbinfo; +struct au_finfo; +struct dentry; +#ifdef CONFIG_AUFS_DEBUG +extern char *au_plevel; +struct au_nhash; +void au_dpri_whlist(struct au_nhash *whlist); +struct au_vdir; +void au_dpri_vdir(struct au_vdir *vdir); +struct inode; +void au_dpri_inode(struct inode *inode); +void au_dpri_dentry(struct dentry *dentry); +struct file; +void au_dpri_file(struct file *filp); +struct super_block; +void au_dpri_sb(struct super_block *sb); + +void au_dbg_sleep_jiffy(int jiffy); +struct iattr; +void au_dbg_iattr(struct iattr *ia); + +void au_dbg_verify_dir_parent(struct dentry *dentry, unsigned int sigen); +void au_dbg_verify_nondir_parent(struct dentry *dentry, unsigned int sigen); +void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen); +void au_dbg_verify_hf(struct au_finfo *finfo); +void au_dbg_verify_kthread(void); + +int __init au_debug_init(void); +void au_debug_sbinfo_init(struct au_sbinfo *sbinfo); +#define AuDbgWhlist(w) do { \ + AuDbg(#w "\n"); \ + au_dpri_whlist(w); \ +} while (0) + +#define AuDbgVdir(v) do { \ + AuDbg(#v "\n"); \ + au_dpri_vdir(v); \ +} while (0) + +#define AuDbgInode(i) do { \ + AuDbg(#i "\n"); \ + au_dpri_inode(i); \ +} while (0) + +#define AuDbgDentry(d) do { \ + AuDbg(#d "\n"); \ + au_dpri_dentry(d); \ +} while (0) + +#define AuDbgFile(f) do { \ + AuDbg(#f "\n"); \ + au_dpri_file(f); \ +} while (0) + +#define AuDbgSb(sb) do { \ + AuDbg(#sb "\n"); \ + au_dpri_sb(sb); \ +} while (0) + +#define AuDbgSleep(sec) do { \ + AuDbg("sleep %d sec\n", sec); \ + ssleep(sec); \ +} while (0) + +#define AuDbgSleepJiffy(jiffy) do { \ + AuDbg("sleep %d jiffies\n", jiffy); \ + au_dbg_sleep_jiffy(jiffy); \ +} while (0) + +#define AuDbgIAttr(ia) do { \ + AuDbg("ia_valid 0x%x\n", (ia)->ia_valid); \ + au_dbg_iattr(ia); \ +} while (0) +#else +static inline void au_dbg_verify_dir_parent(struct dentry *dentry, + unsigned int sigen) +{ + /* empty */ +} +static inline void au_dbg_verify_nondir_parent(struct dentry *dentry, + unsigned int sigen) +{ + /* empty */ +} +static inline void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen) +{ + /* empty */ +} +static inline void au_dbg_verify_hf(struct au_finfo *finfo) +{ + /* empty */ +} +static inline void au_dbg_verify_kthread(void) +{ + /* empty */ +} + +static inline int au_debug_init(void) +{ + return 0; +} +static inline void au_debug_sbinfo_init(struct au_sbinfo *sbinfo) +{ + /* empty */ +} +#define AuDbgWhlist(w) do {} while (0) +#define AuDbgVdir(v) do {} while (0) +#define AuDbgInode(i) do {} while (0) +#define AuDbgDentry(d) do {} while (0) +#define AuDbgFile(f) do {} while (0) +#define AuDbgSb(sb) do {} while (0) +#define AuDbgSleep(sec) do {} while (0) +#define AuDbgSleepJiffy(jiffy) do {} while (0) +#define AuDbgIAttr(ia) do {} while (0) +#endif /* CONFIG_AUFS_DEBUG */ + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_MAGIC_SYSRQ +int __init au_sysrq_init(void); +void au_sysrq_fin(void); + +#ifdef CONFIG_HW_CONSOLE +#define au_dbg_blocked() do { \ + WARN_ON(1); \ + handle_sysrq('w', vc_cons[fg_console].d->vc_tty); \ +} while (0) +#else +#define au_dbg_blocked() do {} while (0) +#endif + +#else +static inline int au_sysrq_init(void) +{ + return 0; +} +#define au_sysrq_fin() do {} while (0) +#define au_dbg_blocked() do {} while (0) +#endif /* CONFIG_AUFS_MAGIC_SYSRQ */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DEBUG_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/Makefile +++ linux-2.6.32/ubuntu/aufs/Makefile @@ -0,0 +1,33 @@ + +include ${src}/magic.mk +ifeq (${CONFIG_AUFS_FS},m) +include ${src}/conf.mk +endif +-include ${src}/priv_def.mk + +# cf. include/linux/kernel.h +# enable pr_debug +ccflags-y += -DDEBUG +ccflags-y += -D'pr_fmt(fmt)="aufs %s:%d:%s[%d]: " fmt, \ + __func__, __LINE__, current->comm, current->pid' + +obj-$(CONFIG_AUFS_FS) += aufs.o +aufs-y := module.o sbinfo.o super.o branch.o xino.o sysaufs.o opts.o \ + wkq.o vfsub.o dcsub.o \ + cpup.o whout.o plink.o wbr_policy.o \ + dinfo.o dentry.o \ + finfo.o file.o f_op.o \ + dir.o vdir.o \ + iinfo.o inode.o i_op.o i_op_add.o i_op_del.o i_op_ren.o \ + ioctl.o + +# all are boolean +aufs-$(CONFIG_SYSFS) += sysfs.o +aufs-$(CONFIG_DEBUG_FS) += dbgaufs.o +aufs-$(CONFIG_AUFS_BDEV_LOOP) += loop.o +aufs-$(CONFIG_AUFS_HINOTIFY) += hinotify.o +aufs-$(CONFIG_AUFS_EXPORT) += export.o +aufs-$(CONFIG_AUFS_POLL) += poll.o +aufs-$(CONFIG_AUFS_RDU) += rdu.o +aufs-$(CONFIG_AUFS_DEBUG) += debug.o +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o --- linux-2.6.32.orig/ubuntu/aufs/poll.c +++ linux-2.6.32/ubuntu/aufs/poll.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * poll operation + * There is only one filesystem which implements ->poll operation, currently. + */ + +#include "aufs.h" + +unsigned int aufs_poll(struct file *file, poll_table *wait) +{ + unsigned int mask; + int err; + struct file *h_file; + struct dentry *dentry; + struct super_block *sb; + + /* We should pretend an error happened. */ + mask = POLLERR /* | POLLIN | POLLOUT */; + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + /* it is not an error if h_file has no operation */ + mask = DEFAULT_POLLMASK; + h_file = au_h_fptr(file, au_fbstart(file)); + if (h_file->f_op && h_file->f_op->poll) + mask = h_file->f_op->poll(h_file, wait); + + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + + out: + si_read_unlock(sb); + AuTraceErr((int)mask); + return mask; +} --- linux-2.6.32.orig/ubuntu/aufs/dcsub.h +++ linux-2.6.32/ubuntu/aufs/dcsub.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * sub-routines for dentry cache + */ + +#ifndef __AUFS_DCSUB_H__ +#define __AUFS_DCSUB_H__ + +#ifdef __KERNEL__ + +#include + +struct dentry; + +struct au_dpage { + int ndentry; + struct dentry **dentries; +}; + +struct au_dcsub_pages { + int ndpage; + struct au_dpage *dpages; +}; + +/* ---------------------------------------------------------------------- */ + +int au_dpages_init(struct au_dcsub_pages *dpages, gfp_t gfp); +void au_dpages_free(struct au_dcsub_pages *dpages); +typedef int (*au_dpages_test)(struct dentry *dentry, void *arg); +int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, + au_dpages_test test, void *arg); +int au_dcsub_pages_rev(struct au_dcsub_pages *dpages, struct dentry *dentry, + int do_include, au_dpages_test test, void *arg); +struct dentry *au_test_subdir(struct dentry *d1, struct dentry *d2); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DCSUB_H__ */ --- linux-2.6.32.orig/ubuntu/aufs/debug.c +++ linux-2.6.32/ubuntu/aufs/debug.c @@ -0,0 +1,431 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * debug print functions + */ + +#include +#include +#include "aufs.h" + +int aufs_debug; +MODULE_PARM_DESC(debug, "debug print"); +module_param_named(debug, aufs_debug, int, S_IRUGO | S_IWUSR | S_IWGRP); + +char *au_plevel = KERN_DEBUG; +#define dpri(fmt, ...) do { \ + if (au_debug_test()) \ + printk("%s" fmt, au_plevel, ##__VA_ARGS__); \ +} while (0) + +/* ---------------------------------------------------------------------- */ + +void au_dpri_whlist(struct au_nhash *whlist) +{ + unsigned long ul, n; + struct hlist_head *head; + struct au_vdir_wh *tpos; + struct hlist_node *pos; + + n = whlist->nh_num; + head = whlist->nh_head; + for (ul = 0; ul < n; ul++) { + hlist_for_each_entry(tpos, pos, head, wh_hash) + dpri("b%d, %.*s, %d\n", + tpos->wh_bindex, + tpos->wh_str.len, tpos->wh_str.name, + tpos->wh_str.len); + head++; + } +} + +void au_dpri_vdir(struct au_vdir *vdir) +{ + unsigned long ul; + union au_vdir_deblk_p p; + unsigned char *o; + + if (!vdir || IS_ERR(vdir)) { + dpri("err %ld\n", PTR_ERR(vdir)); + return; + } + + dpri("deblk %u, nblk %lu, deblk %p, last{%lu, %p}, ver %lu\n", + vdir->vd_deblk_sz, vdir->vd_nblk, vdir->vd_deblk, + vdir->vd_last.ul, vdir->vd_last.p.deblk, vdir->vd_version); + for (ul = 0; ul < vdir->vd_nblk; ul++) { + p.deblk = vdir->vd_deblk[ul]; + o = p.deblk; + dpri("[%lu]: %p\n", ul, o); + } +} + +static int do_pri_inode(aufs_bindex_t bindex, struct inode *inode, + struct dentry *wh) +{ + char *n = NULL; + int l = 0; + + if (!inode || IS_ERR(inode)) { + dpri("i%d: err %ld\n", bindex, PTR_ERR(inode)); + return -1; + } + + /* the type of i_blocks depends upon CONFIG_LSF */ + BUILD_BUG_ON(sizeof(inode->i_blocks) != sizeof(unsigned long) + && sizeof(inode->i_blocks) != sizeof(u64)); + if (wh) { + n = (void *)wh->d_name.name; + l = wh->d_name.len; + } + + dpri("i%d: i%lu, %s, cnt %d, nl %u, 0%o, sz %llu, blk %llu," + " ct %lld, np %lu, st 0x%lx, f 0x%x, g %x%s%.*s\n", + bindex, + inode->i_ino, inode->i_sb ? au_sbtype(inode->i_sb) : "??", + atomic_read(&inode->i_count), inode->i_nlink, inode->i_mode, + i_size_read(inode), (unsigned long long)inode->i_blocks, + (long long)timespec_to_ns(&inode->i_ctime) & 0x0ffff, + inode->i_mapping ? inode->i_mapping->nrpages : 0, + inode->i_state, inode->i_flags, inode->i_generation, + l ? ", wh " : "", l, n); + return 0; +} + +void au_dpri_inode(struct inode *inode) +{ + struct au_iinfo *iinfo; + aufs_bindex_t bindex; + int err; + + err = do_pri_inode(-1, inode, NULL); + if (err || !au_test_aufs(inode->i_sb)) + return; + + iinfo = au_ii(inode); + if (!iinfo) + return; + dpri("i-1: bstart %d, bend %d, gen %d\n", + iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode)); + if (iinfo->ii_bstart < 0) + return; + for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; bindex++) + do_pri_inode(bindex, iinfo->ii_hinode[0 + bindex].hi_inode, + iinfo->ii_hinode[0 + bindex].hi_whdentry); +} + +static int do_pri_dentry(aufs_bindex_t bindex, struct dentry *dentry) +{ + struct dentry *wh = NULL; + + if (!dentry || IS_ERR(dentry)) { + dpri("d%d: err %ld\n", bindex, PTR_ERR(dentry)); + return -1; + } + /* do not call dget_parent() here */ + dpri("d%d: %.*s?/%.*s, %s, cnt %d, flags 0x%x\n", + bindex, + AuDLNPair(dentry->d_parent), AuDLNPair(dentry), + dentry->d_sb ? au_sbtype(dentry->d_sb) : "??", + atomic_read(&dentry->d_count), dentry->d_flags); + if (bindex >= 0 && dentry->d_inode && au_test_aufs(dentry->d_sb)) { + struct au_iinfo *iinfo = au_ii(dentry->d_inode); + if (iinfo) + wh = iinfo->ii_hinode[0 + bindex].hi_whdentry; + } + do_pri_inode(bindex, dentry->d_inode, wh); + return 0; +} + +void au_dpri_dentry(struct dentry *dentry) +{ + struct au_dinfo *dinfo; + aufs_bindex_t bindex; + int err; + + err = do_pri_dentry(-1, dentry); + if (err || !au_test_aufs(dentry->d_sb)) + return; + + dinfo = au_di(dentry); + if (!dinfo) + return; + dpri("d-1: bstart %d, bend %d, bwh %d, bdiropq %d, gen %d\n", + dinfo->di_bstart, dinfo->di_bend, + dinfo->di_bwh, dinfo->di_bdiropq, au_digen(dentry)); + if (dinfo->di_bstart < 0) + return; + for (bindex = dinfo->di_bstart; bindex <= dinfo->di_bend; bindex++) + do_pri_dentry(bindex, dinfo->di_hdentry[0 + bindex].hd_dentry); +} + +static int do_pri_file(aufs_bindex_t bindex, struct file *file) +{ + char a[32]; + + if (!file || IS_ERR(file)) { + dpri("f%d: err %ld\n", bindex, PTR_ERR(file)); + return -1; + } + a[0] = 0; + if (bindex < 0 + && file->f_dentry + && au_test_aufs(file->f_dentry->d_sb) + && au_fi(file)) + snprintf(a, sizeof(a), ", mmapped %d", au_test_mmapped(file)); + dpri("f%d: mode 0x%x, flags 0%o, cnt %ld, pos %llu%s\n", + bindex, file->f_mode, file->f_flags, (long)file_count(file), + file->f_pos, a); + if (file->f_dentry) + do_pri_dentry(bindex, file->f_dentry); + return 0; +} + +void au_dpri_file(struct file *file) +{ + struct au_finfo *finfo; + aufs_bindex_t bindex; + int err; + + err = do_pri_file(-1, file); + if (err || !file->f_dentry || !au_test_aufs(file->f_dentry->d_sb)) + return; + + finfo = au_fi(file); + if (!finfo) + return; + if (finfo->fi_bstart < 0) + return; + for (bindex = finfo->fi_bstart; bindex <= finfo->fi_bend; bindex++) { + struct au_hfile *hf; + + hf = finfo->fi_hfile + bindex; + do_pri_file(bindex, hf ? hf->hf_file : NULL); + } +} + +static int do_pri_br(aufs_bindex_t bindex, struct au_branch *br) +{ + struct vfsmount *mnt; + struct super_block *sb; + + if (!br || IS_ERR(br)) + goto out; + mnt = br->br_mnt; + if (!mnt || IS_ERR(mnt)) + goto out; + sb = mnt->mnt_sb; + if (!sb || IS_ERR(sb)) + goto out; + + dpri("s%d: {perm 0x%x, cnt %d, wbr %p}, " + "%s, dev 0x%02x%02x, flags 0x%lx, cnt(BIAS) %d, active %d, " + "xino %d\n", + bindex, br->br_perm, atomic_read(&br->br_count), br->br_wbr, + au_sbtype(sb), MAJOR(sb->s_dev), MINOR(sb->s_dev), + sb->s_flags, sb->s_count - S_BIAS, + atomic_read(&sb->s_active), !!br->br_xino.xi_file); + return 0; + + out: + dpri("s%d: err %ld\n", bindex, PTR_ERR(br)); + return -1; +} + +void au_dpri_sb(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + aufs_bindex_t bindex; + int err; + /* to reuduce stack size */ + struct { + struct vfsmount mnt; + struct au_branch fake; + } *a; + + /* this function can be called from magic sysrq */ + a = kzalloc(sizeof(*a), GFP_ATOMIC); + if (unlikely(!a)) { + dpri("no memory\n"); + return; + } + + a->mnt.mnt_sb = sb; + a->fake.br_perm = 0; + a->fake.br_mnt = &a->mnt; + a->fake.br_xino.xi_file = NULL; + atomic_set(&a->fake.br_count, 0); + smp_mb(); /* atomic_set */ + err = do_pri_br(-1, &a->fake); + kfree(a); + dpri("dev 0x%x\n", sb->s_dev); + if (err || !au_test_aufs(sb)) + return; + + sbinfo = au_sbi(sb); + if (!sbinfo) + return; + dpri("nw %d, gen %u, kobj %d\n", + atomic_read(&sbinfo->si_nowait.nw_len), sbinfo->si_generation, + atomic_read(&sbinfo->si_kobj.kref.refcount)); + for (bindex = 0; bindex <= sbinfo->si_bend; bindex++) + do_pri_br(bindex, sbinfo->si_branch[0 + bindex]); +} + +/* ---------------------------------------------------------------------- */ + +void au_dbg_sleep_jiffy(int jiffy) +{ + while (jiffy) + jiffy = schedule_timeout_uninterruptible(jiffy); +} + +void au_dbg_iattr(struct iattr *ia) +{ +#define AuBit(name) if (ia->ia_valid & ATTR_ ## name) \ + dpri(#name "\n") + AuBit(MODE); + AuBit(UID); + AuBit(GID); + AuBit(SIZE); + AuBit(ATIME); + AuBit(MTIME); + AuBit(CTIME); + AuBit(ATIME_SET); + AuBit(MTIME_SET); + AuBit(FORCE); + AuBit(ATTR_FLAG); + AuBit(KILL_SUID); + AuBit(KILL_SGID); + AuBit(FILE); + AuBit(KILL_PRIV); + AuBit(OPEN); + AuBit(TIMES_SET); +#undef AuBit + dpri("ia_file %p\n", ia->ia_file); +} + +/* ---------------------------------------------------------------------- */ + +void au_dbg_verify_dir_parent(struct dentry *dentry, unsigned int sigen) +{ + struct dentry *parent; + + parent = dget_parent(dentry); + AuDebugOn(!S_ISDIR(dentry->d_inode->i_mode) + || IS_ROOT(dentry) + || au_digen(parent) != sigen); + dput(parent); +} + +void au_dbg_verify_nondir_parent(struct dentry *dentry, unsigned int sigen) +{ + struct dentry *parent; + + parent = dget_parent(dentry); + AuDebugOn(S_ISDIR(dentry->d_inode->i_mode) + || au_digen(parent) != sigen); + dput(parent); +} + +void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen) +{ + int err, i, j; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries; + + err = au_dpages_init(&dpages, GFP_NOFS); + AuDebugOn(err); + err = au_dcsub_pages_rev(&dpages, parent, /*do_include*/1, NULL, NULL); + AuDebugOn(err); + for (i = dpages.ndpage - 1; !err && i >= 0; i--) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + for (j = dpage->ndentry - 1; !err && j >= 0; j--) + AuDebugOn(au_digen(dentries[j]) != sigen); + } + au_dpages_free(&dpages); +} + +void au_dbg_verify_hf(struct au_finfo *finfo) +{ + struct au_hfile *hf; + aufs_bindex_t bend, bindex; + + if (finfo->fi_bstart >= 0) { + bend = finfo->fi_bend; + for (bindex = finfo->fi_bstart; bindex <= bend; bindex++) { + hf = finfo->fi_hfile + bindex; + AuDebugOn(hf->hf_file || hf->hf_br); + } + } +} + +void au_dbg_verify_kthread(void) +{ + if (au_test_wkq(current)) { + au_dbg_blocked(); + BUG(); + } +} + +/* ---------------------------------------------------------------------- */ + +void au_debug_sbinfo_init(struct au_sbinfo *sbinfo __maybe_unused) +{ +#ifdef AuForceNoPlink + au_opt_clr(sbinfo->si_mntflags, PLINK); +#endif +#ifdef AuForceNoXino + au_opt_clr(sbinfo->si_mntflags, XINO); +#endif +#ifdef AuForceNoRefrof + au_opt_clr(sbinfo->si_mntflags, REFROF); +#endif +#ifdef AuForceHinotify + au_opt_set_udba(sbinfo->si_mntflags, UDBA_HINOTIFY); +#endif +#ifdef AuForceRd0 + sbinfo->si_rdblk = 0; + sbinfo->si_rdhash = 0; +#endif +} + +int __init au_debug_init(void) +{ + aufs_bindex_t bindex; + struct au_vdir_destr destr; + + bindex = -1; + AuDebugOn(bindex >= 0); + + destr.len = -1; + AuDebugOn(destr.len < NAME_MAX); + +#ifdef CONFIG_4KSTACKS + pr_warning("CONFIG_4KSTACKS is defined.\n"); +#endif + +#ifdef AuForceNoBrs + sysaufs_brs = 0; +#endif + + return 0; +} --- linux-2.6.32.orig/ubuntu/lirc/lirc.h +++ linux-2.6.32/ubuntu/lirc/lirc.h @@ -0,0 +1,105 @@ +/* $Id: lirc.h,v 5.19 2009/08/29 07:52:41 lirc Exp $ */ + +#ifndef _LINUX_LIRC_H +#define _LINUX_LIRC_H + +#if defined(__linux__) +#include +#elif defined(_NetBSD_) +#include +#elif defined(_CYGWIN_) +#define __USE_LINUX_IOCTL_DEFS +#include +#endif + +#define PULSE_BIT 0x01000000 +#define PULSE_MASK 0x00FFFFFF + +typedef int lirc_t; + +/*** lirc compatible hardware features ***/ + +#define LIRC_MODE2SEND(x) (x) +#define LIRC_SEND2MODE(x) (x) +#define LIRC_MODE2REC(x) ((x) << 16) +#define LIRC_REC2MODE(x) ((x) >> 16) + +#define LIRC_MODE_RAW 0x00000001 +#define LIRC_MODE_PULSE 0x00000002 +#define LIRC_MODE_MODE2 0x00000004 +#define LIRC_MODE_CODE 0x00000008 +#define LIRC_MODE_LIRCCODE 0x00000010 +#define LIRC_MODE_STRING 0x00000020 + + +#define LIRC_CAN_SEND_RAW LIRC_MODE2SEND(LIRC_MODE_RAW) +#define LIRC_CAN_SEND_PULSE LIRC_MODE2SEND(LIRC_MODE_PULSE) +#define LIRC_CAN_SEND_MODE2 LIRC_MODE2SEND(LIRC_MODE_MODE2) +#define LIRC_CAN_SEND_CODE LIRC_MODE2SEND(LIRC_MODE_CODE) +#define LIRC_CAN_SEND_LIRCCODE LIRC_MODE2SEND(LIRC_MODE_LIRCCODE) +#define LIRC_CAN_SEND_STRING LIRC_MODE2SEND(LIRC_MODE_STRING) + +#define LIRC_CAN_SEND_MASK 0x0000003f + +#define LIRC_CAN_SET_SEND_CARRIER 0x00000100 +#define LIRC_CAN_SET_SEND_DUTY_CYCLE 0x00000200 +#define LIRC_CAN_SET_TRANSMITTER_MASK 0x00000400 + +#define LIRC_CAN_REC_RAW LIRC_MODE2REC(LIRC_MODE_RAW) +#define LIRC_CAN_REC_PULSE LIRC_MODE2REC(LIRC_MODE_PULSE) +#define LIRC_CAN_REC_MODE2 LIRC_MODE2REC(LIRC_MODE_MODE2) +#define LIRC_CAN_REC_CODE LIRC_MODE2REC(LIRC_MODE_CODE) +#define LIRC_CAN_REC_LIRCCODE LIRC_MODE2REC(LIRC_MODE_LIRCCODE) +#define LIRC_CAN_REC_STRING LIRC_MODE2REC(LIRC_MODE_STRING) + +#define LIRC_CAN_REC_MASK LIRC_MODE2REC(LIRC_CAN_SEND_MASK) + +#define LIRC_CAN_SET_REC_CARRIER (LIRC_CAN_SET_SEND_CARRIER << 16) +#define LIRC_CAN_SET_REC_DUTY_CYCLE (LIRC_CAN_SET_SEND_DUTY_CYCLE << 16) + +#define LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE 0x40000000 +#define LIRC_CAN_SET_REC_CARRIER_RANGE 0x80000000 +#define LIRC_CAN_GET_REC_RESOLUTION 0x20000000 + +#define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK) +#define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK) + +#define LIRC_CAN_NOTIFY_DECODE 0x01000000 + +/*** IOCTL commands for lirc driver ***/ + +#define LIRC_GET_FEATURES _IOR('i', 0x00000000, unsigned long) + +#define LIRC_GET_SEND_MODE _IOR('i', 0x00000001, unsigned long) +#define LIRC_GET_REC_MODE _IOR('i', 0x00000002, unsigned long) +#define LIRC_GET_SEND_CARRIER _IOR('i', 0x00000003, unsigned int) +#define LIRC_GET_REC_CARRIER _IOR('i', 0x00000004, unsigned int) +#define LIRC_GET_SEND_DUTY_CYCLE _IOR('i', 0x00000005, unsigned int) +#define LIRC_GET_REC_DUTY_CYCLE _IOR('i', 0x00000006, unsigned int) +#define LIRC_GET_REC_RESOLUTION _IOR('i', 0x00000007, unsigned int) + +/* code length in bits, currently only for LIRC_MODE_LIRCCODE */ +#define LIRC_GET_LENGTH _IOR('i', 0x0000000f, unsigned long) + +#define LIRC_SET_SEND_MODE _IOW('i', 0x00000011, unsigned long) +#define LIRC_SET_REC_MODE _IOW('i', 0x00000012, unsigned long) +/* Note: these can reset the according pulse_width */ +#define LIRC_SET_SEND_CARRIER _IOW('i', 0x00000013, unsigned int) +#define LIRC_SET_REC_CARRIER _IOW('i', 0x00000014, unsigned int) +#define LIRC_SET_SEND_DUTY_CYCLE _IOW('i', 0x00000015, unsigned int) +#define LIRC_SET_REC_DUTY_CYCLE _IOW('i', 0x00000016, unsigned int) +#define LIRC_SET_TRANSMITTER_MASK _IOW('i', 0x00000017, unsigned int) + +/* + * to set a range use + * LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE with the + * lower bound first and later + * LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper bound + */ + +#define LIRC_SET_REC_DUTY_CYCLE_RANGE _IOW('i', 0x0000001e, unsigned int) +#define LIRC_SET_REC_CARRIER_RANGE _IOW('i', 0x0000001f, unsigned int) + +#define LIRC_NOTIFY_DECODE _IO('i', 0x00000020) + +#endif --- linux-2.6.32.orig/ubuntu/lirc/Kconfig +++ linux-2.6.32/ubuntu/lirc/Kconfig @@ -0,0 +1,88 @@ +config LIRC_DEV + tristate "LIRC Device support" + default m + +config LIRC_ATIUSB + tristate "LIRC ATI RF Remote" + default m + depends on LIRC_DEV + +config LIRC_BT829 + tristate "LIRC BT829" + default m + depends on LIRC_DEV + +config LIRC_ENE0100 + tristate "LIRC ENE0100" + default m + depends on LIRC_DEV + +config LIRC_I2C + tristate "LIRC I2C interface remote" + default m + depends on LIRC_DEV + +config LIRC_IGORPLUGUSB + tristate "LIRC IGOR custom remote" + default m + depends on LIRC_DEV + +config LIRC_IMON + tristate "LIRC Imon remote or pad" + default m + depends on LIRC_DEV + +config LIRC_IT87 + tristate "LIRC IT87" + default m + depends on LIRC_DEV + +config LIRC_ITE8709 + tristate "LIRC ITE8709" + default m + depends on LIRC_DEV + +config LIRC_MCEUSB + tristate "LIRC Microsoft Media Center Remote" + default m + depends on LIRC_DEV + +config LIRC_PARALLEL + tristate "LIRC Parallel port custom remote" + default n + depends on LIRC_DEV + +config LIRC_SASEM + tristate "LIRC Sasem" + default m + depends on LIRC_DEV + +config LIRC_SERIAL + tristate "LIRC Serial port remote" + default m + depends on LIRC_DEV + +config LIRC_SIR + tristate "LIRC Laptop port IR (SIR))" + default m + depends on LIRC_DEV + +config LIRC_STREAMZAP + tristate "LIRC Streamzap remote" + default m + depends on LIRC_DEV + +config LIRC_TTUSBIR + tristate "LIRC TT USB IR device" + default m + depends on LIRC_DEV + +config LIRC_CONFIG_LIRC_WPC8769L + tristate "LIRC WPC8769L device" + default m + depends on LIRC_DEV + +config LIRC_GPIO + tristate "LIRC TV Card GPIO remote" + default n + depends on LIRC_DEV --- linux-2.6.32.orig/ubuntu/lirc/kcompat.h +++ linux-2.6.32/ubuntu/lirc/kcompat.h @@ -0,0 +1,402 @@ +/* $Id: kcompat.h,v 5.44 2009/03/22 08:45:47 lirc Exp $ */ + +#ifndef _KCOMPAT_H +#define _KCOMPAT_H + +#include + +#ifndef __func__ +#define __func__ __FUNCTION__ +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +#define LIRC_THIS_MODULE(x) x, +#else /* >= 2.6.16 */ +#define LIRC_THIS_MODULE(x) +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#define LIRC_HAVE_DEVFS +#define LIRC_HAVE_DEVFS_26 +#endif + +#define LIRC_HAVE_SYSFS + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13) + +typedef struct class_simple lirc_class_t; + +static inline lirc_class_t *class_create(struct module *owner, char *name) +{ + return class_simple_create(owner, name); +} + +static inline void class_destroy(lirc_class_t *cls) +{ + class_simple_destroy(cls); +} + +#define lirc_device_create(cs, parent, dev, drvdata, fmt, args...) \ + class_simple_device_add(cs, dev, parent, fmt, ## args) + +static inline void lirc_device_destroy(lirc_class_t *cls, dev_t devt) +{ + class_simple_device_remove(devt); +} + +#else /* >= 2.6.13 */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) + +#define lirc_device_create(cs, parent, dev, drvdata, fmt, args...) \ + class_device_create(cs, dev, parent, fmt, ## args) + +#else /* >= 2.6.15 */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26) + +#define lirc_device_create(cs, parent, dev, drvdata, fmt, args...) \ + class_device_create(cs, NULL, dev, parent, fmt, ## args) + +#else /* >= 2.6.26 */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) + +#define lirc_device_create(cs, parent, dev, drvdata, fmt, args...) \ + device_create(cs, parent, dev, fmt, ## args) + +#else /* >= 2.6.27 */ + +#define lirc_device_create device_create + +#endif /* >= 2.6.27 */ + +#endif /* >= 2.6.26 */ + +#define LIRC_DEVFS_PREFIX + +#endif /* >= 2.6.15 */ + +typedef struct class lirc_class_t; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26) + +#define lirc_device_destroy class_device_destroy + +#else + +#define lirc_device_destroy device_destroy + +#endif + +#endif /* >= 2.6.13 */ + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) +#define LIRC_HAVE_DEVFS +#define LIRC_HAVE_DEVFS_24 +#endif + +#ifndef LIRC_DEVFS_PREFIX +#define LIRC_DEVFS_PREFIX "usb/" +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) +#include +#include +static inline void del_timer_sync(struct timer_list *timerlist) +{ + start_bh_atomic(); + del_timer(timerlist); + end_bh_atomic(); +} +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +#ifdef daemonize +#undef daemonize +#endif +#define daemonize(name) do { \ + \ + lock_kernel(); \ + \ + exit_mm(current); \ + exit_files(current); \ + exit_fs(current); \ + current->session = 1; \ + current->pgrp = 1; \ + current->euid = 0; \ + current->tty = NULL; \ + sigfillset(¤t->blocked); \ + \ + strcpy(current->comm, name); \ + \ + unlock_kernel(); \ + \ +} while (0) + +/* Not sure when this was introduced, sometime during 2.5.X */ +#define MODULE_PARM_int(x) MODULE_PARM(x, "i") +#define MODULE_PARM_bool(x) MODULE_PARM(x, "i") +#define MODULE_PARM_long(x) MODULE_PARM(x, "l") +#define module_param(x, y, z) MODULE_PARM_##y(x) +#else +#include +#endif /* Linux < 2.6.0 */ + +/* DevFS header */ +#if defined(LIRC_HAVE_DEVFS) +#include +#endif + +#ifdef LIRC_HAVE_DEVFS_24 +#ifdef register_chrdev +#undef register_chrdev +#endif +#define register_chrdev devfs_register_chrdev +#ifdef unregister_chrdev +#undef unregister_chrdev +#endif +#define unregister_chrdev devfs_unregister_chrdev +#endif /* DEVFS 2.4 */ + +#ifndef LIRC_HAVE_SYSFS +#define class_destroy(x) do { } while (0) +#define class_create(x, y) NULL +#define lirc_device_destroy(x, y) do { } while (0) +#define lirc_device_create(x, y, z, xx, yy, zz) 0 +#define IS_ERR(x) 0 +typedef struct class_simple +{ + int notused; +} lirc_class_t; +#endif /* No SYSFS */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) +#define KERNEL_2_5 + +/* + * We still are using MOD_INC_USE_COUNT/MOD_DEC_USE_COUNT in the set_use_inc + * function of all modules for 2.4 kernel compatibility. + * + * For 2.6 kernels reference counting is done in lirc_dev by + * try_module_get()/module_put() because the old approach is racy. + * + */ +#ifdef MOD_INC_USE_COUNT +#undef MOD_INC_USE_COUNT +#endif +#define MOD_INC_USE_COUNT + +#ifdef MOD_DEC_USE_COUNT +#undef MOD_DEC_USE_COUNT +#endif +#define MOD_DEC_USE_COUNT + +#ifdef EXPORT_NO_SYMBOLS +#undef EXPORT_NO_SYMBOLS +#endif +#define EXPORT_NO_SYMBOLS + +#else /* Kernel < 2.5.0 */ + +static inline int try_module_get(struct module *module) +{ + return 1; +} + +static inline void module_put(struct module *module) +{ +} + +#endif /* Kernel >= 2.5.0 */ + +#ifndef MODULE_LICENSE +#define MODULE_LICENSE(x) +#endif + +#ifndef MODULE_PARM_DESC +#define MODULE_PARM_DESC(x, y) +#endif + +#ifndef MODULE_ALIAS_CHARDEV_MAJOR +#define MODULE_ALIAS_CHARDEV_MAJOR(x) +#endif + +#ifndef MODULE_DEVICE_TABLE +#define MODULE_DEVICE_TABLE(x, y) +#endif + +#include +#ifndef IRQ_RETVAL +typedef void irqreturn_t; +#define IRQ_NONE +#define IRQ_HANDLED +#define IRQ_RETVAL(x) +#endif + +#ifndef MOD_IN_USE +#ifdef CONFIG_MODULE_UNLOAD +#define MOD_IN_USE module_refcount(THIS_MODULE) +#else +#error "LIRC modules currently require" +#error " 'Loadable module support ---> Module unloading'" +#error "to be enabled in the kernel" +#endif +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#if !defined(local_irq_save) +#define local_irq_save(flags) do { save_flags(flags); cli(); } while (0) +#endif +#if !defined(local_irq_restore) +#define local_irq_restore(flags) do { restore_flags(flags); } while (0) +#endif +#endif + +#if KERNEL_VERSION(2, 4, 0) <= LINUX_VERSION_CODE +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 22) +#include +static inline char *pci_name(struct pci_dev *pdev) +{ + return pdev->slot_name; +} +#endif /* kernel < 2.4.22 */ +#endif /* kernel >= 2.4.0 */ + +/*************************** I2C specific *****************************/ +#include + +#ifndef I2C_CLIENT_END +#error "********************************************************" +#error " Sorry, this driver needs the new I2C stack. " +#error " You can get it at http://www2.lm-sensors.nu/~lm78/. " +#error "********************************************************" +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0) + +#undef i2c_get_clientdata +#define i2c_get_clientdata(client) ((client)->data) + + +#undef i2c_set_clientdata +#define i2c_set_clientdata(client_ptr, new_data) do { \ + (client_ptr)->data = new_data; \ +} while (0) + + +#endif + +/* removed in 2.6.14 */ +#ifndef I2C_ALGO_BIT +# define I2C_ALGO_BIT 0 +#endif + +/* removed in 2.6.16 */ +#ifndef I2C_DRIVERID_EXP3 +# define I2C_DRIVERID_EXP3 0xf003 +#endif + +/*************************** USB specific *****************************/ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 8) +static inline int usb_kill_urb(struct urb *urb) +{ + return usb_unlink_urb(urb); +} +#endif + +/* removed in 2.6.14 */ +#ifndef URB_ASYNC_UNLINK +#define URB_ASYNC_UNLINK 0 +#endif +#endif + +/*************************** bttv specific ****************************/ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) /* BTTV_* -> BTTV_BOARD_* */ +#define BTTV_BOARD_UNKNOWN BTTV_UNKNOWN +#define BTTV_BOARD_PXELVWPLTVPAK BTTV_PXELVWPLTVPAK +#define BTTV_BOARD_PXELVWPLTVPRO BTTV_PXELVWPLTVPRO +#define BTTV_BOARD_PV_BT878P_9B BTTV_PV_BT878P_9B +#define BTTV_BOARD_PV_BT878P_PLUS BTTV_PV_BT878P_PLUS +#define BTTV_BOARD_AVERMEDIA BTTV_AVERMEDIA +#define BTTV_BOARD_AVPHONE98 BTTV_AVPHONE98 +#define BTTV_BOARD_AVERMEDIA98 BTTV_AVERMEDIA98 +#define BTTV_BOARD_CHRONOS_VS2 BTTV_CHRONOS_VS2 +#define BTTV_BOARD_MIRO BTTV_MIRO +#define BTTV_BOARD_DYNALINK BTTV_DYNALINK +#define BTTV_BOARD_WINVIEW_601 BTTV_WINVIEW_601 +#ifdef BTTV_KWORLD +#define BTTV_BOARD_KWORLD BTTV_KWORLD +#endif +#define BTTV_BOARD_MAGICTVIEW061 BTTV_MAGICTVIEW061 +#define BTTV_BOARD_MAGICTVIEW063 BTTV_MAGICTVIEW063 +#define BTTV_BOARD_PHOEBE_TVMAS BTTV_PHOEBE_TVMAS +#ifdef BTTV_BESTBUY_EASYTV2 +#define BTTV_BOARD_BESTBUY_EASYTV BTTV_BESTBUY_EASYTV +#define BTTV_BOARD_BESTBUY_EASYTV2 BTTV_BESTBUY_EASYTV2 +#endif +#define BTTV_BOARD_FLYVIDEO BTTV_FLYVIDEO +#define BTTV_BOARD_FLYVIDEO_98 BTTV_FLYVIDEO_98 +#define BTTV_BOARD_TYPHOON_TVIEW BTTV_TYPHOON_TVIEW +#ifdef BTTV_FLYVIDEO_98FM +#define BTTV_BOARD_FLYVIDEO_98FM BTTV_FLYVIDEO_98FM +#endif +#define BTTV_BOARD_WINFAST2000 BTTV_WINFAST2000 +#ifdef BTTV_GVBCTV5PCI +#define BTTV_BOARD_GVBCTV5PCI BTTV_GVBCTV5PCI +#endif +#endif /* end BTTV_* -> BTTV_BOARD_* */ + + +/******************************* pm.h *********************************/ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11) +typedef u32 pm_message_t; +#endif /* kernel < 2.6.11 */ +#endif /* kernel >= 2.6.0 */ + +/*************************** interrupt.h ******************************/ +/* added in 2.6.18, old defines removed in 2.6.24 */ +#ifndef IRQF_DISABLED +#define IRQF_DISABLED SA_INTERRUPT +#endif +#ifndef IRQF_SHARED +#define IRQF_SHARED SA_SHIRQ +#endif + +/*************************** spinlock.h *******************************/ +/* added in 2.6.11 */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11) +#define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED +#endif + +/***************************** slab.h *********************************/ +/* added in 2.6.14 */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 14) +static inline void *kzalloc(size_t size, gfp_t flags) +{ + void *ret = kmalloc(size, flags); + if (ret) + memset(ret, 0, size); + return ret; +} +#endif + +/****************************** fs.h **********************************/ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +static inline unsigned iminor(struct inode *inode) +{ + return MINOR(inode->i_rdev); +} +#endif + +#endif /* _KCOMPAT_H */ --- linux-2.6.32.orig/ubuntu/lirc/Makefile +++ linux-2.6.32/ubuntu/lirc/Makefile @@ -0,0 +1,23 @@ +#include $(src)/../../.config + +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src) + +obj-$(CONFIG_LIRC_DEV) += lirc_dev/ +obj-$(CONFIG_LIRC_ATIUSB) += lirc_atiusb/ +obj-$(CONFIG_LIRC_BT829) += lirc_bt829/ +obj-$(CONFIG_LIRC_ENE0100) += lirc_ene0100/ +obj-$(CONFIG_LIRC_I2C) += lirc_i2c/ +obj-$(CONFIG_LIRC_IGORPLUGUSB) += lirc_igorplugusb/ +obj-$(CONFIG_LIRC_IMON) += lirc_imon/ +obj-$(CONFIG_LIRC_IT87) += lirc_it87/ +obj-$(CONFIG_LIRC_ITE8709) += lirc_ite8709/ +obj-$(CONFIG_LIRC_MCEUSB) += lirc_mceusb/ +obj-$(CONFIG_LIRC_PARALLEL) += lirc_parallel/ +obj-$(CONFIG_LIRC_SASEM) += lirc_sasem/ +obj-$(CONFIG_LIRC_SERIAL) += lirc_serial/ +obj-$(CONFIG_LIRC_SIR) += lirc_sir/ +obj-$(CONFIG_LIRC_STREAMZAP) += lirc_streamzap/ +obj-$(CONFIG_LIRC_TTUSBIR) += lirc_ttusbir/ +obj-$(CONFIG_LIRC_GPIO) += lirc_gpio/ +obj-$(CONFIG_LIRC_TTUSBIR) += lirc_ttusbir/ +obj-$(CONFIG_LIRC_WPC8769L) += lirc_wpc8769l/ --- linux-2.6.32.orig/ubuntu/lirc/lirc_atiusb/lirc_atiusb.c +++ linux-2.6.32/ubuntu/lirc/lirc_atiusb/lirc_atiusb.c @@ -0,0 +1,1452 @@ +/* + * lirc_atiusb - USB remote support for LIRC + * (currently only supports X10 USB remotes) + * (supports ATI Remote Wonder and ATI Remote Wonder II, too) + * + * Copyright (C) 2003-2004 Paul Miller + * + * This driver was derived from: + * Vladimir Dergachev 's 2002 + * "USB ATI Remote support" (input device) + * Adrian Dewhurst 's 2002 + * "USB StreamZap remote driver" (LIRC) + * Artur Lipowski 's 2002 + * "lirc_dev" and "lirc_gpio" LIRC modules + * Michael Wojciechowski + * initial xbox support + * Vassilis Virvilis 2006 + * reworked the patch for lirc submission + * + * $Id: lirc_atiusb.c,v 1.85 2009/03/11 00:21:46 jarodwilson Exp $ + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +#error "*******************************************************" +#error "Sorry, this driver needs kernel version 2.4.0 or higher" +#error "*******************************************************" +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#include +#include +#include +#include + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +#define DRIVER_VERSION "$Revision: 1.85 $" +#define DRIVER_AUTHOR "Paul Miller " +#define DRIVER_DESC "USB remote driver for LIRC" +#define DRIVER_NAME "lirc_atiusb" + +#define CODE_LENGTH (code_length[ir->remote_type]) +#define CODE_MIN_LENGTH (code_min_length[ir->remote_type]) +#define DECODE_LENGTH (decode_length[ir->remote_type]) + +#define RW2_MODENAV_KEYCODE 0x3F +#define RW2_NULL_MODE 0xFF +/* Fake (virtual) keycode indicating compass mouse usage */ +#define RW2_MOUSE_KEYCODE 0xFF +#define RW2_PRESSRELEASE_KEYCODE 0xFE + +#define RW2_PRESS_CODE 1 +#define RW2_HOLD_CODE 2 +#define RW2_RELEASE_CODE 0 + +/* module parameters */ +#ifdef CONFIG_USB_DEBUG +static int debug = 1; +#else +static int debug; +#endif +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG fmt, ## args); \ + } while (0) + +/* ATI, ATI2, XBOX */ +static const int code_length[] = {5, 3, 6}; +static const int code_min_length[] = {3, 3, 6}; +static const int decode_length[] = {5, 3, 1}; +/* + * USB_BUFF_LEN must be the maximum value of the code_length array. + * It is used for static arrays. + */ +#define USB_BUFF_LEN 6 + +static int mask = 0xFFFF; /* channel acceptance bit mask */ +static int unique; /* enable channel-specific codes */ +static int repeat = 10; /* repeat time in 1/100 sec */ +static int emit_updown; /* send separate press/release codes (rw2) */ +static int emit_modekeys; /* send keycodes for aux1-4, pc, mouse (rw2) */ +static unsigned long repeat_jiffies; /* repeat timeout */ +static int mdeadzone; /* mouse sensitivity >= 0 */ +static int mgradient = 375; /* 1000*gradient from cardinal direction */ + +/* get hi and low bytes of a 16-bits int */ +#define HI(a) ((unsigned char)((a) >> 8)) +#define LO(a) ((unsigned char)((a) & 0xff)) + +/* general constants */ +#define SEND_FLAG_IN_PROGRESS 1 +#define SEND_FLAG_COMPLETE 2 +#define FREE_ALL 0xFF + +/* endpoints */ +#define EP_KEYS 0 +#define EP_MOUSE 1 +#define EP_MOUSE_ADDR 0x81 +#define EP_KEYS_ADDR 0x82 + +#define VENDOR_ATI1 0x0bc7 +#define VENDOR_ATI2 0x0471 +#define VENDOR_MS1 0x040b +#define VENDOR_MS2 0x045e +#define VENDOR_MS3 0xFFFF + +static struct usb_device_id usb_remote_table[] = { + /* X10 USB Firecracker Interface */ + { USB_DEVICE(VENDOR_ATI1, 0x0002) }, + + /* X10 VGA Video Sender */ + { USB_DEVICE(VENDOR_ATI1, 0x0003) }, + + /* ATI Wireless Remote Receiver */ + { USB_DEVICE(VENDOR_ATI1, 0x0004) }, + + /* NVIDIA Wireless Remote Receiver */ + { USB_DEVICE(VENDOR_ATI1, 0x0005) }, + + /* ATI Wireless Remote Receiver */ + { USB_DEVICE(VENDOR_ATI1, 0x0006) }, + + /* X10 USB Wireless Transceivers */ + { USB_DEVICE(VENDOR_ATI1, 0x0007) }, + { USB_DEVICE(VENDOR_ATI1, 0x0008) }, + { USB_DEVICE(VENDOR_ATI1, 0x0009) }, + { USB_DEVICE(VENDOR_ATI1, 0x000A) }, + { USB_DEVICE(VENDOR_ATI1, 0x000B) }, + { USB_DEVICE(VENDOR_ATI1, 0x000C) }, + { USB_DEVICE(VENDOR_ATI1, 0x000D) }, + { USB_DEVICE(VENDOR_ATI1, 0x000E) }, + { USB_DEVICE(VENDOR_ATI1, 0x000F) }, + + /* ATI Remote Wonder 2: Input Device */ + { USB_DEVICE(VENDOR_ATI2, 0x0602) }, + + /* ATI Remote Wonder 2: Controller (???) */ + { USB_DEVICE(VENDOR_ATI2, 0x0603) }, + + /* Gamester Xbox DVD Movie Playback Kit IR */ + { USB_DEVICE(VENDOR_MS1, 0x6521) }, + + /* Microsoft Xbox DVD Movie Playback Kit IR */ + { USB_DEVICE(VENDOR_MS2, 0x0284) }, + + /* + * Some Chinese manufacturer -- conflicts with the joystick from the + * same manufacturer + */ + { USB_DEVICE(VENDOR_MS3, 0xFFFF) }, + + /* Terminating entry */ + { } +}; + + +/* init strings */ +#define USB_OUTLEN 7 + +static char init1[] = {0x01, 0x00, 0x20, 0x14}; +static char init2[] = {0x01, 0x00, 0x20, 0x14, 0x20, 0x20, 0x20}; + +struct in_endpt { + /* inner link in list of endpoints for the remote specified by ir */ + struct list_head iep_list_link; + struct atirf_dev *ir; + struct urb *urb; + struct usb_endpoint_descriptor *ep; + int type; + + /* buffers and dma */ + unsigned char *buf; + unsigned int len; +#ifdef KERNEL_2_5 + dma_addr_t dma; +#endif + + /* handle repeats */ + unsigned char old[USB_BUFF_LEN]; + unsigned long old_jiffies; +}; + +struct out_endpt { + struct atirf_dev *ir; + struct urb *urb; + struct usb_endpoint_descriptor *ep; + + /* buffers and dma */ + unsigned char *buf; +#ifdef KERNEL_2_5 + dma_addr_t dma; +#endif + + /* handle sending (init strings) */ + int send_flags; + wait_queue_head_t wait; +}; + + +/* data structure for each usb remote */ +struct atirf_dev { + /* inner link in list of all remotes managed by this module */ + struct list_head remote_list_link; + /* Number of usb interfaces associated with this device */ + int dev_refcount; + + /* usb */ + struct usb_device *usbdev; + /* Head link to list of all inbound endpoints in this remote */ + struct list_head iep_listhead; + struct out_endpt *out_init; + int devnum; + + /* remote type based on usb_device_id tables */ + enum { + ATI1_COMPATIBLE, + ATI2_COMPATIBLE, + XBOX_COMPATIBLE + } remote_type; + + /* rw2 current mode (mirrors the state of the remote) */ + int mode; + + /* lirc */ + struct lirc_driver *d; + int connected; + + /* locking */ + struct mutex lock; +}; + +/* list of all registered devices via the remote_list_link in atirf_dev */ +static struct list_head remote_list; + +/* + * Convenience macros to retrieve a pointer to the surrounding struct from + * the given list_head reference within, pointed at by link. + */ +#define get_iep_from_link(link) \ + list_entry((link), struct in_endpt, iep_list_link); +#define get_irctl_from_link(link) \ + list_entry((link), struct atirf_dev, remote_list_link); + +/* send packet - used to initialize remote */ +static void send_packet(struct out_endpt *oep, u16 cmd, unsigned char *data) +{ + struct atirf_dev *ir = oep->ir; + DECLARE_WAITQUEUE(wait, current); + int timeout = HZ; /* 1 second */ + unsigned char buf[USB_OUTLEN]; + + dprintk(DRIVER_NAME "[%d]: send called (%#x)\n", ir->devnum, cmd); + + mutex_lock(&ir->lock); + oep->urb->transfer_buffer_length = LO(cmd) + 1; + oep->urb->dev = oep->ir->usbdev; + oep->send_flags = SEND_FLAG_IN_PROGRESS; + + memcpy(buf+1, data, LO(cmd)); + buf[0] = HI(cmd); + memcpy(oep->buf, buf, LO(cmd)+1); + + set_current_state(TASK_INTERRUPTIBLE); + add_wait_queue(&oep->wait, &wait); + +#ifdef KERNEL_2_5 + if (usb_submit_urb(oep->urb, GFP_ATOMIC)) { +#else + if (usb_submit_urb(oep->urb)) { +#endif + set_current_state(TASK_RUNNING); + remove_wait_queue(&oep->wait, &wait); + mutex_unlock(&ir->lock); + return; + } + mutex_unlock(&ir->lock); + + while (timeout && (oep->urb->status == -EINPROGRESS) + && !(oep->send_flags & SEND_FLAG_COMPLETE)) { + timeout = schedule_timeout(timeout); + rmb(); + } + + dprintk(DRIVER_NAME "[%d]: send complete (%#x)\n", ir->devnum, cmd); + + set_current_state(TASK_RUNNING); + remove_wait_queue(&oep->wait, &wait); +#ifdef KERNEL_2_5 + oep->urb->transfer_flags |= URB_ASYNC_UNLINK; +#endif + usb_unlink_urb(oep->urb); +} + +static int unregister_from_lirc(struct atirf_dev *ir) +{ + struct lirc_driver *d = ir->d; + int devnum; + + devnum = ir->devnum; + dprintk(DRIVER_NAME "[%d]: unregister from lirc called\n", devnum); + + lirc_unregister_driver(d->minor); + + printk(DRIVER_NAME "[%d]: usb remote disconnected\n", devnum); + return 0; +} + + +static int set_use_inc(void *data) +{ + struct atirf_dev *ir = data; + struct list_head *pos, *n; + struct in_endpt *iep; + int rtn; + + if (!ir) { + printk(DRIVER_NAME "[?]: set_use_inc called with no context\n"); + return -EIO; + } + dprintk(DRIVER_NAME "[%d]: set use inc\n", ir->devnum); + + MOD_INC_USE_COUNT; + + mutex_lock(&ir->lock); + if (!ir->connected) { + if (!ir->usbdev) { + mutex_unlock(&ir->lock); + dprintk(DRIVER_NAME "[%d]: !ir->usbdev\n", ir->devnum); + return -ENOENT; + } + + /* Iterate through the inbound endpoints */ + list_for_each_safe(pos, n, &ir->iep_listhead) { + /* extract the current in_endpt */ + iep = get_iep_from_link(pos); + iep->urb->dev = ir->usbdev; + dprintk(DRIVER_NAME "[%d]: linking iep 0x%02x (%p)\n", + ir->devnum, iep->ep->bEndpointAddress, iep); +#ifdef KERNEL_2_5 + rtn = usb_submit_urb(iep->urb, GFP_ATOMIC); +#else + rtn = usb_submit_urb(iep->urb); +#endif + if (rtn) { + printk(DRIVER_NAME "[%d]: open result = %d " + "error submitting urb\n", + ir->devnum, rtn); + mutex_unlock(&ir->lock); + MOD_DEC_USE_COUNT; + return -EIO; + } + } + ir->connected = 1; + } + mutex_unlock(&ir->lock); + + return 0; +} + +static void set_use_dec(void *data) +{ + struct atirf_dev *ir = data; + struct list_head *pos, *n; + struct in_endpt *iep; + + if (!ir) { + printk(DRIVER_NAME "[?]: set_use_dec called with no context\n"); + return; + } + dprintk(DRIVER_NAME "[%d]: set use dec\n", ir->devnum); + + mutex_lock(&ir->lock); + if (ir->connected) { + /* Free inbound usb urbs */ + list_for_each_safe(pos, n, &ir->iep_listhead) { + iep = get_iep_from_link(pos); + dprintk(DRIVER_NAME "[%d]: unlinking iep 0x%02x (%p)\n", + ir->devnum, iep->ep->bEndpointAddress, iep); + usb_kill_urb(iep->urb); + } + ir->connected = 0; + } + mutex_unlock(&ir->lock); + MOD_DEC_USE_COUNT; +} + +static void print_data(struct in_endpt *iep, char *buf, int len) +{ + const int clen = code_length[iep->ir->remote_type]; + char codes[clen * 3 + 1]; + int i; + + if (len <= 0) + return; + + for (i = 0; i < len && i < clen; i++) + snprintf(codes+i*3, 4, "%02x ", buf[i] & 0xFF); + printk(DRIVER_NAME "[%d]: data received %s (ep=0x%x length=%d)\n", + iep->ir->devnum, codes, iep->ep->bEndpointAddress, len); +} + +static int code_check_ati1(struct in_endpt *iep, int len) +{ + struct atirf_dev *ir = iep->ir; + int i, chan; + + /* ATI RW1: some remotes emit both 4 and 5 byte length codes. */ + /* ATI RW2: emit 3 byte codes */ + if (len < CODE_MIN_LENGTH || len > CODE_LENGTH) + return -1; + + /* *** channel not tested with 4/5-byte Dutch remotes *** */ + chan = ((iep->buf[len-1]>>4) & 0x0F); + + /* strip channel code */ + if (!unique) { + iep->buf[len-1] &= 0x0F; + iep->buf[len-3] -= (chan<<4); + } + + if (!((1U<devnum, chan+1); + return -1; + } + dprintk(DRIVER_NAME "[%d]: accept channel %d\n", ir->devnum, chan+1); + + if (ir->remote_type == ATI1_COMPATIBLE) { + for (i = len; i < CODE_LENGTH; i++) + iep->buf[i] = 0; + /* check for repeats */ + if (memcmp(iep->old, iep->buf, len) == 0) { + if (iep->old_jiffies + repeat_jiffies > jiffies) + return -1; + } else + memcpy(iep->old, iep->buf, CODE_LENGTH); + iep->old_jiffies = jiffies; + } + + return 0; +} + +/* + * Since the ATI Remote Wonder II has quite a different structure from the + * prior version, this function was separated out to clarify the sanitization + * process. + * + * Here is a summary of the main differences: + * + * a. The rw2 has no sense of a transmission channel. But, it does have an + * auxiliary mode state, which is set by the mode buttons Aux1 through + * Aux4 and "PC". These map respectively to 0-4 in the first byte of the + * recv buffer. Any subsequent button press sends this mode number as its + * "channel code." Annoyingly enough, the mode setting buttons all send + * the same key code (0x3f), and can only be distinguished via their mode + * byte. + * + * Because of this, old-style "unique"-parameter-enabled channel squashing + * kills the functionality of the aux1-aux4 and PC buttons. However, to + * not do so would cause each remote key to send a different code depending + * on the active aux. Further complicating matters, using the mouse norb + * also sends an identical code as would pushing the active aux button. To + * handle this we need a separate parameter, like rw2modes, with the + * following values and meanings: + * + * 0: Don't squash any channel info + * 1: Only squash channel data for non-mode setting keys + * 2: Ignore aux keypresses, but don't squash channel + * 3: Ignore aux keypresses and squash channel data + * + * Option 1 may seem useless since the mouse sends the same code, but one + * need only ignore in userspace any press of a mode-setting code that only + * reaffirms the current mode. The 3rd party lirccd should be able to + * handle this easily enough, but lircd doesn't keep the state necessary + * for this. TODO We could work around this in the driver by emitting a + * single 02 (press) code for a mode key only if that mode is not currently + * active. + * + * Option 2 would be useful for those wanting super configurability, + * offering the ability to program 5 times the number actions based on the + * current mode. + * + * b. The rw2 has its own built in repeat handling; the keys endpoint + * encodes this in the second byte as 1 for press, 2 for hold, and 0 for + * release. This is generally much more responsive than lirc's built-in + * timeout handling. + * + * The problem is that the remote can send the release-receive pair + * (0,1) while one is still holding down the same button if the + * transmission is momentarily interrupted. (It seems that the receiver + * manages this count instead of the remote.) By default, this information + * is squashed to 2. + * + * In order to expose the built-in repeat code, set the emit_updown + * parameter as described below. + * + * c. The mouse norb is much more sensitive than on the rw1. It emulates + * a joystick-like controller with the second byte representing the x-axis + * and the third, the y-axis. Treated as signed integers, these axes range + * approximately as follows: + * + * x: (left) -46 ... 46 (right) (0xd2..0x2e) + * y: (up) -46 ... 46 (down) (0xd2..0x2e) + * + * NB these values do not correspond to the pressure with which the mouse + * norb is pushed in a given direction, but rather seems to indicate the + * duration for which a given direction is held. + * + * These are normalized to 8 cardinal directions for easy configuration via + * lircd.conf. The normalization can be fined tuned with the mdeadzone and + * mgradient parameters as described below. + * + * d. The interrupt rate of the mouse vs. the normal keys is different. + * + * mouse: ~27Hz (37ms between interrupts) + * keys: ~10Hz (100ms between interrupts) + * + * This means that the normal gap mechanism for lircd won't work as + * expected; is emit_updown>0 if you can get away with it. + */ +static int code_check_ati2(struct in_endpt *iep, int len) +{ + struct atirf_dev *ir = iep->ir; + int mode, i; + char *buf = iep->buf; + + if (len != CODE_LENGTH) { + dprintk(DRIVER_NAME + "[%d]: Huh? Abnormal length (%d) buffer received.\n", + ir->devnum, len); + return -1; + } + for (i = len; i < CODE_LENGTH; i++) + iep->buf[i] = 0; + + mode = buf[0]; + + /* Squash the mode indicator if unique wasn't set non-zero */ + if (!unique) + buf[0] = 0; + + if (iep->ep->bEndpointAddress == EP_KEYS_ADDR) { + /* ignore mouse nav indicator key and mode-set (aux) keys */ + if (buf[2] == RW2_MODENAV_KEYCODE) { + if (emit_modekeys >= 2) /* emit raw */ + buf[0] = mode; + else if (emit_modekeys == 1) { + /* translate */ + buf[0] = mode; + if (ir->mode != mode) { + buf[1] = 0x03; + ir->mode = mode; + return 0; + } + } else { + dprintk(DRIVER_NAME + "[%d]: ignore dummy code 0x%x " + "(ep=0x%x)\n", ir->devnum, + buf[2], iep->ep->bEndpointAddress); + return -1; + } + } + + if (buf[1] != 2) { + /* handle press/release codes */ + if (emit_updown == 0) /* ignore */ + return -1; + else if (emit_updown == 1) /* normalize keycode */ + buf[2] = RW2_PRESSRELEASE_KEYCODE; + /* else emit raw */ + } + + } else { + int x = (signed char)buf[1]; + int y = (signed char)buf[2]; + int code = 0x00; + int dir_ew, dir_ns; + + buf[2] = RW2_MOUSE_KEYCODE; + + /* sensitivity threshold (use L2norm^2) */ + if (mdeadzone > (x*x+y*y)) { + buf[1] = 0x00; + return 0; + } + +/* Nybble encoding: xy, 2 is -1 (S or W); 1 (N or E) */ +#define MOUSE_N 0x01 +#define MOUSE_NE 0x11 +#define MOUSE_E 0x10 +#define MOUSE_SE 0x12 +#define MOUSE_S 0x02 +#define MOUSE_SW 0x22 +#define MOUSE_W 0x20 +#define MOUSE_NW 0x21 + + /* cardinal leanings: positive x -> E, positive y -> S */ + dir_ew = (x > 0) ? MOUSE_E : MOUSE_W; + dir_ns = (y > 0) ? MOUSE_S : MOUSE_N; + + /* convert coordinates(angle) into compass direction */ + if (x == 0) + code = dir_ns; + else if (y == 0) + code = dir_ew; + else { + if (abs(1000*y/x) > mgradient) + code = dir_ns; + if (abs(1000*x/y) > mgradient) + code |= dir_ew; + } + + buf[1] = code; + dprintk(DRIVER_NAME "[%d]: mouse compass=0x%x %s%s (%d,%d)\n", + ir->devnum, code, + (code & MOUSE_S ? "S" : (code & MOUSE_N ? "N" : "")), + (code & MOUSE_E ? "E" : (code & MOUSE_W ? "W" : "")), + x, y); + } + + return 0; +} + +static int code_check_xbox(struct in_endpt *iep, int len) +{ + struct atirf_dev *ir = iep->ir; + const int clen = CODE_LENGTH; + + if (len != clen) { + dprintk(DRIVER_NAME ": We got %d instead of %d bytes from xbox " + "ir.. ?\n", len, clen); + return -1; + } + + /* check for repeats */ + if (memcmp(iep->old, iep->buf, len) == 0) { + if (iep->old_jiffies + repeat_jiffies > jiffies) + return -1; + } else { + /* + * the third byte of xbox ir packet seems to contain key info + * the last two bytes are.. some kind of clock? + */ + iep->buf[0] = iep->buf[2]; + memset(iep->buf + 1, 0, len - 1); + memcpy(iep->old, iep->buf, len); + } + iep->old_jiffies = jiffies; + + return 0; +} + +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_remote_recv(struct urb *urb, struct pt_regs *regs) +#else +static void usb_remote_recv(struct urb *urb) +#endif +{ + struct in_endpt *iep; + int len, result = -1; + + if (!urb) + return; + iep = urb->context; + if (!iep) { +#ifdef KERNEL_2_5 + urb->transfer_flags |= URB_ASYNC_UNLINK; +#endif + usb_unlink_urb(urb); + return; + } + if (!iep->ir->usbdev) + return; + + len = urb->actual_length; + if (debug) + print_data(iep, urb->transfer_buffer, len); + + switch (urb->status) { + + case 0: + switch (iep->ir->remote_type) { + case XBOX_COMPATIBLE: + result = code_check_xbox(iep, len); + break; + case ATI2_COMPATIBLE: + result = code_check_ati2(iep, len); + break; + case ATI1_COMPATIBLE: + default: + result = code_check_ati1(iep, len); + } + if (result < 0) + break; + lirc_buffer_write(iep->ir->d->rbuf, iep->buf); + wake_up(&iep->ir->d->rbuf->wait_poll); + break; + + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: +#ifdef KERNEL_2_5 + urb->transfer_flags |= URB_ASYNC_UNLINK; +#endif + usb_unlink_urb(urb); + return; + + case -EPIPE: + default: + break; + } + +#ifdef KERNEL_2_5 + usb_submit_urb(urb, GFP_ATOMIC); +#endif +} + +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_remote_send(struct urb *urb, struct pt_regs *regs) +#else +static void usb_remote_send(struct urb *urb) +#endif +{ + struct out_endpt *oep; + + if (!urb) + return; + oep = urb->context; + if (!oep) { +#ifdef KERNEL_2_5 + urb->transfer_flags |= URB_ASYNC_UNLINK; +#endif + usb_unlink_urb(urb); + return; + } + if (!oep->ir->usbdev) + return; + + dprintk(DRIVER_NAME "[%d]: usb out called\n", oep->ir->devnum); + + if (urb->status) + return; + + oep->send_flags |= SEND_FLAG_COMPLETE; + wmb(); + if (waitqueue_active(&oep->wait)) + wake_up(&oep->wait); +} + + +/* + * Initialization and removal + */ + +/* + * Free iep according to mem_failure which specifies a checkpoint into the + * initialization sequence for rollback recovery. + */ +static void free_in_endpt(struct in_endpt *iep, int mem_failure) +{ + struct atirf_dev *ir; + dprintk(DRIVER_NAME ": free_in_endpt(%p, %d)\n", iep, mem_failure); + if (!iep) + return; + + ir = iep->ir; + if (!ir) { + dprintk(DRIVER_NAME ": free_in_endpt: WARNING! null ir\n"); + return; + } + mutex_lock(&ir->lock); + switch (mem_failure) { + case FREE_ALL: + case 5: + list_del(&iep->iep_list_link); + dprintk(DRIVER_NAME "[%d]: free_in_endpt removing ep=0x%0x " + "from list\n", ir->devnum, iep->ep->bEndpointAddress); + case 4: + if (iep->urb) { +#ifdef KERNEL_2_5 + iep->urb->transfer_flags |= URB_ASYNC_UNLINK; +#endif + usb_unlink_urb(iep->urb); + usb_free_urb(iep->urb); + iep->urb = 0; + } else + dprintk(DRIVER_NAME "[%d]: free_in_endpt null urb!\n", + ir->devnum); + case 3: +#ifdef KERNEL_2_5 + usb_buffer_free(iep->ir->usbdev, iep->len, iep->buf, iep->dma); +#else + kfree(iep->buf); +#endif + iep->buf = 0; + case 2: + kfree(iep); + } + mutex_unlock(&ir->lock); +} + +/* + * Construct a new inbound endpoint for this remote, and add it to the list of + * in_epts in ir. + */ +static struct in_endpt *new_in_endpt(struct atirf_dev *ir, + struct usb_endpoint_descriptor *ep) +{ + struct usb_device *dev = ir->usbdev; + struct in_endpt *iep; + int pipe, maxp, len, addr; + int mem_failure; + + addr = ep->bEndpointAddress; + pipe = usb_rcvintpipe(dev, addr); + maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); + +/* len = (maxp > USB_BUFLEN) ? USB_BUFLEN : maxp; + * len -= (len % CODE_LENGTH); */ + len = CODE_LENGTH; + + dprintk(DRIVER_NAME "[%d]: acceptable inbound endpoint (0x%x) found " + "(maxp=%d len=%d)\n", ir->devnum, addr, maxp, len); + + mem_failure = 0; + iep = kzalloc(sizeof(*iep), GFP_KERNEL); + if (!iep) { + mem_failure = 1; + goto new_in_endpt_failure_check; + } + iep->ir = ir; + iep->ep = ep; + iep->len = len; + +#ifdef KERNEL_2_5 + iep->buf = usb_buffer_alloc(dev, len, GFP_ATOMIC, &iep->dma); +#else + iep->buf = kmalloc(len, GFP_KERNEL); +#endif + if (!iep->buf) { + mem_failure = 2; + goto new_in_endpt_failure_check; + } + +#ifdef KERNEL_2_5 + iep->urb = usb_alloc_urb(0, GFP_KERNEL); +#else + iep->urb = usb_alloc_urb(0); +#endif + if (!iep->urb) + mem_failure = 3; + +new_in_endpt_failure_check: + + if (mem_failure) { + free_in_endpt(iep, mem_failure); + printk(DRIVER_NAME "[%d]: ep=0x%x out of memory (code=%d)\n", + ir->devnum, addr, mem_failure); + return NULL; + } + list_add_tail(&iep->iep_list_link, &ir->iep_listhead); + dprintk(DRIVER_NAME "[%d]: adding ep=0x%0x to list\n", + ir->devnum, iep->ep->bEndpointAddress); + return iep; +} + +static void free_out_endpt(struct out_endpt *oep, int mem_failure) +{ + struct atirf_dev *ir; + dprintk(DRIVER_NAME ": free_out_endpt(%p, %d)\n", oep, mem_failure); + if (!oep) + return; + + wake_up_all(&oep->wait); + + ir = oep->ir; + if (!ir) { + dprintk(DRIVER_NAME ": free_out_endpt: WARNING! null ir\n"); + return; + } + mutex_lock(&ir->lock); + switch (mem_failure) { + case FREE_ALL: + case 4: + if (oep->urb) { +#ifdef KERNEL_2_5 + oep->urb->transfer_flags |= URB_ASYNC_UNLINK; +#endif + usb_unlink_urb(oep->urb); + usb_free_urb(oep->urb); + oep->urb = 0; + } else { + dprintk(DRIVER_NAME "[%d]: free_out_endpt: null urb!\n", + ir->devnum); + } + case 3: +#ifdef KERNEL_2_5 + usb_buffer_free(oep->ir->usbdev, USB_OUTLEN, + oep->buf, oep->dma); +#else + kfree(oep->buf); +#endif + oep->buf = 0; + case 2: + kfree(oep); + } + mutex_unlock(&ir->lock); +} + +static struct out_endpt *new_out_endpt(struct atirf_dev *ir, + struct usb_endpoint_descriptor *ep) +{ +#ifdef KERNEL_2_5 + struct usb_device *dev = ir->usbdev; +#endif + struct out_endpt *oep; + int mem_failure; + + dprintk(DRIVER_NAME "[%d]: acceptable outbound endpoint (0x%x) found\n", + ir->devnum, ep->bEndpointAddress); + + mem_failure = 0; + oep = kzalloc(sizeof(*oep), GFP_KERNEL); + if (!oep) + mem_failure = 1; + else { + oep->ir = ir; + oep->ep = ep; + init_waitqueue_head(&oep->wait); + +#ifdef KERNEL_2_5 + oep->buf = usb_buffer_alloc(dev, USB_OUTLEN, + GFP_ATOMIC, &oep->dma); +#else + oep->buf = kmalloc(USB_OUTLEN, GFP_KERNEL); +#endif + if (!oep->buf) + mem_failure = 2; + else { +#ifdef KERNEL_2_5 + oep->urb = usb_alloc_urb(0, GFP_KERNEL); +#else + oep->urb = usb_alloc_urb(0); +#endif + if (!oep->urb) + mem_failure = 3; + } + } + if (mem_failure) { + free_out_endpt(oep, mem_failure); + printk(DRIVER_NAME "[%d]: ep=0x%x out of memory (code=%d)\n", + ir->devnum, ep->bEndpointAddress, mem_failure); + return NULL; + } + return oep; +} + +static void free_irctl(struct atirf_dev *ir, int mem_failure) +{ + struct list_head *pos, *n; + struct in_endpt *in; + dprintk(DRIVER_NAME ": free_irctl(%p, %d)\n", ir, mem_failure); + + if (!ir) + return; + + list_for_each_safe(pos, n, &ir->iep_listhead) { + in = get_iep_from_link(pos); + free_in_endpt(in, FREE_ALL); + } + if (ir->out_init) { + free_out_endpt(ir->out_init, FREE_ALL); + ir->out_init = NULL; + } + + mutex_lock(&ir->lock); + switch (mem_failure) { + case FREE_ALL: + case 6: + if (!--ir->dev_refcount) { + list_del(&ir->remote_list_link); + dprintk(DRIVER_NAME "[%d]: free_irctl: removing " + "remote from list\n", ir->devnum); + } else { + dprintk(DRIVER_NAME "[%d]: free_irctl: refcount at %d," + "aborting free_irctl\n", + ir->devnum, ir->dev_refcount); + mutex_unlock(&ir->lock); + return; + } + case 5: + case 4: + case 3: + if (ir->d) { + switch (mem_failure) { + case 5: + lirc_buffer_free(ir->d->rbuf); + case 4: + kfree(ir->d->rbuf); + case 3: + kfree(ir->d); + } + } else + printk(DRIVER_NAME "[%d]: ir->d is a null pointer!\n", + ir->devnum); + case 2: + mutex_unlock(&ir->lock); + kfree(ir); + return; + } + mutex_unlock(&ir->lock); +} + +static struct atirf_dev *new_irctl(struct usb_interface *intf) +{ + struct usb_device *dev = interface_to_usbdev(intf); + struct atirf_dev *ir; + struct lirc_driver *driver; + int type, devnum, dclen; + int mem_failure; + + devnum = dev->devnum; + + switch (cpu_to_le16(dev->descriptor.idVendor)) { + case VENDOR_ATI1: + type = ATI1_COMPATIBLE; + break; + case VENDOR_ATI2: + type = ATI2_COMPATIBLE; + break; + case VENDOR_MS1: + case VENDOR_MS2: + case VENDOR_MS3: + type = XBOX_COMPATIBLE; + break; + default: + dprintk(DRIVER_NAME "[%d]: unknown type\n", devnum); + return NULL; + } + dprintk(DRIVER_NAME "[%d]: remote type = %d\n", devnum, type); + + mem_failure = 0; + ir = kzalloc(sizeof(*ir), GFP_KERNEL); + if (!ir) { + mem_failure = 1; + goto new_irctl_failure_check; + } + + /* + * at this stage we cannot use the macro [DE]CODE_LENGTH: ir + * is not yet setup + */ + dclen = decode_length[type]; + /* + * add this infrared remote struct to remote_list, keeping track + * of the number of drivers registered. + */ + dprintk(DRIVER_NAME "[%d]: adding remote to list\n", devnum); + list_add_tail(&ir->remote_list_link, &remote_list); + ir->dev_refcount = 1; + + driver = kzalloc(sizeof(*driver), GFP_KERNEL); + if (!driver) { + mem_failure = 2; + goto new_irctl_failure_check; + } + + ir->d = driver; + driver->rbuf = kmalloc(sizeof(*(driver->rbuf)), GFP_KERNEL); + if (!driver->rbuf) { + mem_failure = 3; + goto new_irctl_failure_check; + } + + if (lirc_buffer_init(driver->rbuf, dclen, 1)) { + mem_failure = 4; + goto new_irctl_failure_check; + } + + strcpy(driver->name, DRIVER_NAME " "); + driver->minor = -1; + driver->code_length = dclen * 8; + driver->features = LIRC_CAN_REC_LIRCCODE; + driver->data = ir; + driver->set_use_inc = &set_use_inc; + driver->set_use_dec = &set_use_dec; +#ifdef LIRC_HAVE_SYSFS + driver->dev = &intf->dev; +#endif + driver->owner = THIS_MODULE; + ir->usbdev = dev; + ir->remote_type = type; + ir->devnum = devnum; + ir->mode = RW2_NULL_MODE; + + mutex_init(&ir->lock); + INIT_LIST_HEAD(&ir->iep_listhead); + +new_irctl_failure_check: + + if (mem_failure) { + free_irctl(ir, mem_failure); + printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n", + devnum, mem_failure); + return NULL; + } + return ir; +} + + +/* + * Scan the global list of remotes to see if the device listed is one of them. + * If it is, the corresponding atirf_dev is returned, with its dev_refcount + * incremented. Otherwise, returns null. + */ +static struct atirf_dev *get_prior_reg_ir(struct usb_device *dev) +{ + struct list_head *pos; + struct atirf_dev *ir = NULL; + + dprintk(DRIVER_NAME "[%d]: scanning remote_list...\n", dev->devnum); + list_for_each(pos, &remote_list) { + ir = get_irctl_from_link(pos); + if (ir->usbdev != dev) { + dprintk(DRIVER_NAME "[%d]: device %d isn't it...", + dev->devnum, ir->devnum); + ir = NULL; + } else { + dprintk(DRIVER_NAME "[%d]: prior instance found.\n", + dev->devnum); + ir->dev_refcount++; + break; + } + } + return ir; +} + +/* + * If the USB interface has an out endpoint for control (eg, the first Remote + * Wonder) send the appropriate initialization packets. + */ +static void send_outbound_init(struct atirf_dev *ir) +{ + if (ir->out_init) { + struct out_endpt *oep = ir->out_init; + dprintk(DRIVER_NAME "[%d]: usb_remote_probe: initializing " + "outbound ep\n", ir->devnum); + usb_fill_int_urb(oep->urb, ir->usbdev, + usb_sndintpipe(ir->usbdev, oep->ep->bEndpointAddress), + oep->buf, USB_OUTLEN, usb_remote_send, + oep, oep->ep->bInterval); +#ifdef KERNEL_2_5 + oep->urb->transfer_dma = oep->dma; + oep->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; +#endif + + send_packet(oep, 0x8004, init1); + send_packet(oep, 0x8007, init2); + } +} + +/* Log driver and usb info */ +static void log_usb_dev_info(struct usb_device *dev) +{ + char buf[63], name[128] = ""; + + if (dev->descriptor.iManufacturer + && usb_string(dev, dev->descriptor.iManufacturer, + buf, sizeof(buf)) > 0) + strlcpy(name, buf, sizeof(name)); + if (dev->descriptor.iProduct + && usb_string(dev, dev->descriptor.iProduct, buf, sizeof(buf)) > 0) + snprintf(name + strlen(name), sizeof(name) - strlen(name), + " %s", buf); + printk(DRIVER_NAME "[%d]: %s on usb%d:%d\n", dev->devnum, name, + dev->bus->busnum, dev->devnum); +} + + +#ifdef KERNEL_2_5 +static int usb_remote_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + struct usb_device *dev = interface_to_usbdev(intf); + struct usb_host_interface *idesc; +#else +static void *usb_remote_probe(struct usb_device *dev, unsigned int ifnum, + const struct usb_device_id *id) +{ + struct usb_interface *intf = &dev->actconfig->interface[ifnum]; + struct usb_interface_descriptor *idesc; +#endif + struct usb_endpoint_descriptor *ep; + struct in_endpt *iep; + struct atirf_dev *ir; + int i, type; + + dprintk(DRIVER_NAME "[%d]: usb_remote_probe: dev:%p, intf:%p, id:%p)\n", + dev->devnum, dev, intf, id); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 5) + idesc = &intf->altsetting[intf->act_altsetting]; +#else + idesc = intf->cur_altsetting; +#endif + + /* Check if a usb remote has already been registered for this device */ + ir = get_prior_reg_ir(dev); + + if (!ir) { + ir = new_irctl(intf); + if (!ir) +#ifdef KERNEL_2_5 + return -ENOMEM; +#else + return NULL; +#endif + } + type = ir->remote_type; + + /* + * step through the endpoints to find first in and first out endpoint + * of type interrupt transfer + */ +#ifdef KERNEL_2_5 + for (i = 0; i < idesc->desc.bNumEndpoints; ++i) { + ep = &idesc->endpoint[i].desc; +#else + for (i = 0; i < idesc->bNumEndpoints; ++i) { + ep = &idesc->endpoint[i]; +#endif + dprintk(DRIVER_NAME "[%d]: processing endpoint %d\n", + dev->devnum, i); + if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == + USB_DIR_IN) && + ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == + USB_ENDPOINT_XFER_INT)) { + + iep = new_in_endpt(ir, ep); + if (iep) + { + usb_fill_int_urb(iep->urb, dev, + usb_rcvintpipe(dev, + iep->ep->bEndpointAddress), + iep->buf, iep->len, usb_remote_recv, + iep, iep->ep->bInterval); +#ifdef KERNEL_2_5 + iep->urb->transfer_dma = iep->dma; + iep->urb->transfer_flags |= + URB_NO_TRANSFER_DMA_MAP; +#endif + } + } + + if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == + USB_DIR_OUT) && + ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == + USB_ENDPOINT_XFER_INT) && + (ir->out_init == NULL)) + ir->out_init = new_out_endpt(ir, ep); + } + if (list_empty(&ir->iep_listhead)) { + printk(DRIVER_NAME "[%d]: inbound endpoint not found\n", + ir->devnum); + free_irctl(ir, FREE_ALL); +#ifdef KERNEL_2_5 + return -ENODEV; +#else + return NULL; +#endif + } + if (ir->dev_refcount == 1) { + ir->d->minor = lirc_register_driver(ir->d); + if (ir->d->minor < 0) { + free_irctl(ir, FREE_ALL); +#ifdef KERNEL_2_5 + return -ENODEV; +#else + return NULL; +#endif + } + + /* Note new driver registration in kernel logs */ + log_usb_dev_info(dev); + + /* outbound data (initialization) */ + send_outbound_init(ir); + } + +#ifdef KERNEL_2_5 + usb_set_intfdata(intf, ir); + return 0; +#else + return ir; +#endif +} + +#ifdef KERNEL_2_5 +static void usb_remote_disconnect(struct usb_interface *intf) +{ + /* struct usb_device *dev = interface_to_usbdev(intf); */ + struct atirf_dev *ir = usb_get_intfdata(intf); + usb_set_intfdata(intf, NULL); +#else +static void usb_remote_disconnect(struct usb_device *dev, void *ptr) +{ + struct atirf_dev *ir = ptr; +#endif + + dprintk(DRIVER_NAME ": disconnecting remote %d:\n", + (ir ? ir->devnum : -1)); + if (!ir || !ir->d) + return; + + if (ir->usbdev) { + /* Only unregister once */ + ir->usbdev = NULL; + unregister_from_lirc(ir); + } + + /* This also removes the current remote from remote_list */ + free_irctl(ir, FREE_ALL); +} + +static struct usb_driver usb_remote_driver = { + LIRC_THIS_MODULE(.owner = THIS_MODULE) + .name = DRIVER_NAME, + .probe = usb_remote_probe, + .disconnect = usb_remote_disconnect, + .id_table = usb_remote_table +}; + +static int __init usb_remote_init(void) +{ + int i; + + INIT_LIST_HEAD(&remote_list); + + printk(KERN_INFO "\n" DRIVER_NAME ": " DRIVER_DESC " " + DRIVER_VERSION "\n"); + printk(DRIVER_NAME ": " DRIVER_AUTHOR "\n"); + dprintk(DRIVER_NAME ": debug mode enabled: " + "$Id: lirc_atiusb.c,v 1.85 2009/03/11 00:21:46 jarodwilson Exp $\n"); + + repeat_jiffies = repeat*HZ/100; + + i = usb_register(&usb_remote_driver); + if (i) { + printk(DRIVER_NAME ": usb register failed, result = %d\n", i); + return -ENODEV; + } + + return 0; +} + +static void __exit usb_remote_exit(void) +{ + usb_deregister(&usb_remote_driver); +} + +module_init(usb_remote_init); +module_exit(usb_remote_exit); + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(usb, usb_remote_table); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Debug enabled or not (default: 0)"); + +module_param(mask, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(mask, "Set channel acceptance bit mask (default: 0xFFFF)"); + +module_param(unique, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(unique, "Enable channel-specific codes (default: 0)"); + +module_param(repeat, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(repeat, "Repeat timeout (1/100 sec) (default: 10)"); + +module_param(mdeadzone, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(mdeadzone, "rw2 mouse sensitivity threshold (default: 0)"); + +/* + * Enabling this will cause the built-in Remote Wonder II repeat coding to + * not be squashed. The second byte of the keys output will then be: + * + * 1 initial press (button down) + * 2 holding (button remains pressed) + * 0 release (button up) + * + * By default, the driver emits 2 for both 1 and 2, and emits nothing for 0. + * This is good for people having trouble getting their rw2 to send a good + * consistent signal to the receiver. + * + * However, if you have no troubles with the driver outputting up-down pairs + * at random points while you're still holding a button, then you can enable + * this parameter to get finer grain repeat control out of your remote: + * + * 1 Emit a single (per-channel) virtual code for all up/down events + * 2 Emit the actual rw2 output + * + * 1 is easier to write lircd configs for; 2 allows full control. + */ +module_param(emit_updown, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(emit_updown, "emit press/release codes (rw2): 0:don't " + "(default), 1:emit 2 codes only, 2:code for each button"); + +module_param(emit_modekeys, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(emit_modekeys, "emit keycodes for aux1-aux4, pc, and mouse " + "(rw2): 0:don't (default), 1:emit translated codes: one for " + "mode switch, one for same mode, 2:raw codes"); + +module_param(mgradient, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(mgradient, "rw2 mouse: 1000*gradient from E to NE (default: " + "500 => .5 => ~27 degrees)"); + +EXPORT_NO_SYMBOLS; --- linux-2.6.32.orig/ubuntu/lirc/lirc_atiusb/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_atiusb/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_ATIUSB) += lirc_atiusb.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_sir/lirc_sir.c +++ linux-2.6.32/ubuntu/lirc/lirc_sir/lirc_sir.c @@ -0,0 +1,1347 @@ +/* + * LIRC SIR driver, (C) 2000 Milan Pikula + * + * lirc_sir - Device driver for use with SIR (serial infra red) + * mode of IrDA on many notebooks. + * + * 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 + * + * + * 2000/09/16 Frank Przybylski : + * added timeout and relaxed pulse detection, removed gap bug + * + * 2000/12/15 Christoph Bartelmus : + * added support for Tekram Irmate 210 (sending does not work yet, + * kind of disappointing that nobody was able to implement that + * before), + * major clean-up + * + * 2001/02/27 Christoph Bartelmus : + * added support for StrongARM SA1100 embedded microprocessor + * parts cut'n'pasted from sa1100_ir.c (C) 2000 Russell King + */ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) +#error "**********************************************************" +#error " Sorry, this driver needs kernel version 2.2.18 or higher " +#error "**********************************************************" +#endif +#include + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +#include +#else +#include +#endif +#include +#include +#ifdef LIRC_ON_SA1100 +#include +#ifdef CONFIG_SA1100_COLLIE +#include +#include +#endif +#endif + +#include + +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" +#include "../kcompat.h" + +/* SECTION: Definitions */ + +/*** Tekram dongle ***/ +#ifdef LIRC_SIR_TEKRAM +/* stolen from kernel source */ +/* definitions for Tekram dongle */ +#define TEKRAM_115200 0x00 +#define TEKRAM_57600 0x01 +#define TEKRAM_38400 0x02 +#define TEKRAM_19200 0x03 +#define TEKRAM_9600 0x04 +#define TEKRAM_2400 0x08 + +#define TEKRAM_PW 0x10 /* Pulse select bit */ + +/* 10bit * 1s/115200bit in milliseconds = 87ms*/ +#define TIME_CONST (10000000ul/115200ul) + +#endif + +#ifdef LIRC_SIR_ACTISYS_ACT200L +static void init_act200(void); +#elif defined(LIRC_SIR_ACTISYS_ACT220L) +static void init_act220(void); +#endif + +/*** SA1100 ***/ +#ifdef LIRC_ON_SA1100 +struct sa1100_ser2_registers { + /* HSSP control register */ + unsigned char hscr0; + /* UART registers */ + unsigned char utcr0; + unsigned char utcr1; + unsigned char utcr2; + unsigned char utcr3; + unsigned char utcr4; + unsigned char utdr; + unsigned char utsr0; + unsigned char utsr1; +} sr; + +static int irq = IRQ_Ser2ICP; + +#define LIRC_ON_SA1100_TRANSMITTER_LATENCY 0 + +/* pulse/space ratio of 50/50 */ +static unsigned long pulse_width = (13-LIRC_ON_SA1100_TRANSMITTER_LATENCY); +/* 1000000/freq-pulse_width */ +static unsigned long space_width = (13-LIRC_ON_SA1100_TRANSMITTER_LATENCY); +static unsigned int freq = 38000; /* modulation frequency */ +static unsigned int duty_cycle = 50; /* duty cycle of 50% */ + +#endif + +#define RBUF_LEN 1024 +#define WBUF_LEN 1024 + +#define LIRC_DRIVER_NAME "lirc_sir" + +#define PULSE '[' + +#ifndef LIRC_SIR_TEKRAM +/* 9bit * 1s/115200bit in milli seconds = 78.125ms*/ +#define TIME_CONST (9000000ul/115200ul) +#endif + + +/* timeout for sequences in jiffies (=5/100s), must be longer than TIME_CONST */ +#define SIR_TIMEOUT (HZ*5/100) + +#ifndef LIRC_ON_SA1100 +#ifndef LIRC_IRQ +#define LIRC_IRQ 4 +#endif +#ifndef LIRC_PORT +/* for external dongles, default to com1 */ +#if defined(LIRC_SIR_ACTISYS_ACT200L) || \ + defined(LIRC_SIR_ACTISYS_ACT220L) || \ + defined(LIRC_SIR_TEKRAM) +#define LIRC_PORT 0x3f8 +#else +/* onboard sir ports are typically com3 */ +#define LIRC_PORT 0x3e8 +#endif +#endif + +static int io = LIRC_PORT; +static int irq = LIRC_IRQ; +static int threshold = 3; +#endif + +static DEFINE_SPINLOCK(timer_lock); +static struct timer_list timerlist; +/* time of last signal change detected */ +static struct timeval last_tv = {0, 0}; +/* time of last UART data ready interrupt */ +static struct timeval last_intr_tv = {0, 0}; +static int last_value; + +static DECLARE_WAIT_QUEUE_HEAD(lirc_read_queue); + +static DEFINE_SPINLOCK(hardware_lock); +static DEFINE_SPINLOCK(dev_lock); + +static lirc_t rx_buf[RBUF_LEN]; +static unsigned int rx_tail, rx_head; +static lirc_t tx_buf[WBUF_LEN]; + +static int debug; +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +/* SECTION: Prototypes */ + +/* Communication with user-space */ +static int lirc_open(struct inode *inode, struct file *file); +static int lirc_close(struct inode *inode, struct file *file); +static unsigned int lirc_poll(struct file *file, poll_table *wait); +static ssize_t lirc_read(struct file *file, char *buf, size_t count, + loff_t *ppos); +static ssize_t lirc_write(struct file *file, const char *buf, size_t n, + loff_t *pos); +static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd, + unsigned long arg); +static void add_read_queue(int flag, unsigned long val); +#ifdef MODULE +static int init_chrdev(void); +static void drop_chrdev(void); +#endif +/* Hardware */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static irqreturn_t sir_interrupt(int irq, void *dev_id, + struct pt_regs *regs); +#else +static irqreturn_t sir_interrupt(int irq, void *dev_id); +#endif +static void send_space(unsigned long len); +static void send_pulse(unsigned long len); +static int init_hardware(void); +static void drop_hardware(void); +/* Initialisation */ +static int init_port(void); +static void drop_port(void); + +#ifdef LIRC_ON_SA1100 +static void on(void) +{ + PPSR |= PPC_TXD2; +} + +static void off(void) +{ + PPSR &= ~PPC_TXD2; +} +#else +static unsigned int sinp(int offset) +{ + return inb(io + offset); +} + +static void soutp(int offset, int value) +{ + outb(value, io + offset); +} +#endif + +#ifndef MAX_UDELAY_MS +#define MAX_UDELAY_US 5000 +#else +#define MAX_UDELAY_US (MAX_UDELAY_MS*1000) +#endif + +static void safe_udelay(unsigned long usecs) +{ + while (usecs > MAX_UDELAY_US) { + udelay(MAX_UDELAY_US); + usecs -= MAX_UDELAY_US; + } + udelay(usecs); +} + +/* SECTION: Communication with user-space */ + +static int lirc_open(struct inode *inode, struct file *file) +{ + spin_lock(&dev_lock); + if (MOD_IN_USE) { + spin_unlock(&dev_lock); + return -EBUSY; + } + MOD_INC_USE_COUNT; + spin_unlock(&dev_lock); + return 0; +} + +static int lirc_close(struct inode *inode, struct file *file) +{ + MOD_DEC_USE_COUNT; + return 0; +} + +static unsigned int lirc_poll(struct file *file, poll_table *wait) +{ + poll_wait(file, &lirc_read_queue, wait); + if (rx_head != rx_tail) + return POLLIN | POLLRDNORM; + return 0; +} + +static ssize_t lirc_read(struct file *file, char *buf, size_t count, + loff_t *ppos) +{ + int n = 0; + int retval = 0; + DECLARE_WAITQUEUE(wait, current); + + if (count % sizeof(lirc_t)) + return -EINVAL; + + add_wait_queue(&lirc_read_queue, &wait); + set_current_state(TASK_INTERRUPTIBLE); + while (n < count) { + if (rx_head != rx_tail) { + if (copy_to_user((void *) buf + n, + (void *) (rx_buf + rx_head), + sizeof(lirc_t))) { + retval = -EFAULT; + break; + } + rx_head = (rx_head + 1) & (RBUF_LEN - 1); + n += sizeof(lirc_t); + } else { + if (file->f_flags & O_NONBLOCK) { + retval = -EAGAIN; + break; + } + if (signal_pending(current)) { + retval = -ERESTARTSYS; + break; + } + schedule(); + set_current_state(TASK_INTERRUPTIBLE); + } + } + remove_wait_queue(&lirc_read_queue, &wait); + set_current_state(TASK_RUNNING); + return n ? n : retval; +} +static ssize_t lirc_write(struct file *file, const char *buf, size_t n, + loff_t *pos) +{ + unsigned long flags; + int i; + + if (n % sizeof(lirc_t) || (n / sizeof(lirc_t)) > WBUF_LEN) + return -EINVAL; + if (copy_from_user(tx_buf, buf, n)) + return -EFAULT; + i = 0; + n /= sizeof(lirc_t); +#ifdef LIRC_ON_SA1100 + /* disable receiver */ + Ser2UTCR3 = 0; +#endif + local_irq_save(flags); + while (1) { + if (i >= n) + break; + if (tx_buf[i]) + send_pulse(tx_buf[i]); + i++; + if (i >= n) + break; + if (tx_buf[i]) + send_space(tx_buf[i]); + i++; + } + local_irq_restore(flags); +#ifdef LIRC_ON_SA1100 + off(); + udelay(1000); /* wait 1ms for IR diode to recover */ + Ser2UTCR3 = 0; + /* clear status register to prevent unwanted interrupts */ + Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); + /* enable receiver */ + Ser2UTCR3 = UTCR3_RXE|UTCR3_RIE; +#endif + return n; +} + +static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd, + unsigned long arg) +{ + int retval = 0; + unsigned long value = 0; +#ifdef LIRC_ON_SA1100 + unsigned int ivalue; + + if (cmd == LIRC_GET_FEATURES) + value = LIRC_CAN_SEND_PULSE | + LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SET_SEND_CARRIER | + LIRC_CAN_REC_MODE2; + else if (cmd == LIRC_GET_SEND_MODE) + value = LIRC_MODE_PULSE; + else if (cmd == LIRC_GET_REC_MODE) + value = LIRC_MODE_MODE2; +#else + if (cmd == LIRC_GET_FEATURES) + value = LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2; + else if (cmd == LIRC_GET_SEND_MODE) + value = LIRC_MODE_PULSE; + else if (cmd == LIRC_GET_REC_MODE) + value = LIRC_MODE_MODE2; +#endif + + switch (cmd) { + case LIRC_GET_FEATURES: + case LIRC_GET_SEND_MODE: + case LIRC_GET_REC_MODE: + retval = put_user(value, (unsigned long *) arg); + break; + + case LIRC_SET_SEND_MODE: + case LIRC_SET_REC_MODE: + retval = get_user(value, (unsigned long *) arg); + break; +#ifdef LIRC_ON_SA1100 + case LIRC_SET_SEND_DUTY_CYCLE: + retval = get_user(ivalue, (unsigned int *) arg); + if (retval) + return reetval; + if (ivalue <= 0 || ivalue > 100) + return -EINVAL; + /* (ivalue/100)*(1000000/freq) */ + duty_cycle = ivalue; + pulse_width = (unsigned long) duty_cycle*10000/freq; + space_width = (unsigned long) 1000000L/freq-pulse_width; + if (pulse_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) + pulse_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; + if (space_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) + space_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; + break; + case LIRC_SET_SEND_CARRIER: + retval = get_user(ivalue, (unsigned int *) arg); + if (retval) + return retval; + if (ivalue > 500000 || ivalue < 20000) + return -EINVAL; + freq = ivalue; + pulse_width = (unsigned long) duty_cycle*10000/freq; + space_width = (unsigned long) 1000000L/freq-pulse_width; + if (pulse_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) + pulse_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; + if (space_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY) + space_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY; + break; +#endif + default: + retval = -ENOIOCTLCMD; + + } + + if (retval) + return retval; + if (cmd == LIRC_SET_REC_MODE) { + if (value != LIRC_MODE_MODE2) + retval = -ENOSYS; + } else if (cmd == LIRC_SET_SEND_MODE) { + if (value != LIRC_MODE_PULSE) + retval = -ENOSYS; + } + + return retval; +} + +static void add_read_queue(int flag, unsigned long val) +{ + unsigned int new_rx_tail; + lirc_t newval; + + dprintk("add flag %d with val %lu\n", flag, val); + + newval = val & PULSE_MASK; + + /* + * statistically, pulses are ~TIME_CONST/2 too long. we could + * maybe make this more exact, but this is good enough + */ + if (flag) { + /* pulse */ + if (newval > TIME_CONST/2) + newval -= TIME_CONST/2; + else /* should not ever happen */ + newval = 1; + newval |= PULSE_BIT; + } else { + newval += TIME_CONST/2; + } + new_rx_tail = (rx_tail + 1) & (RBUF_LEN - 1); + if (new_rx_tail == rx_head) { + dprintk("Buffer overrun.\n"); + return; + } + rx_buf[rx_tail] = newval; + rx_tail = new_rx_tail; + wake_up_interruptible(&lirc_read_queue); +} + +static struct file_operations lirc_fops = { + .owner = THIS_MODULE, + .read = lirc_read, + .write = lirc_write, + .poll = lirc_poll, + .ioctl = lirc_ioctl, + .open = lirc_open, + .release = lirc_close, +}; + +static int set_use_inc(void *data) +{ + return 0; +} + +static void set_use_dec(void *data) +{ +} + +static struct lirc_driver driver = { + .name = LIRC_DRIVER_NAME, + .minor = -1, + .code_length = 1, + .sample_rate = 0, + .data = NULL, + .add_to_buf = NULL, +#ifndef LIRC_REMOVE_DURING_EXPORT + .get_queue = NULL, +#endif + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .fops = &lirc_fops, + .dev = NULL, + .owner = THIS_MODULE, +}; + + +#ifdef MODULE +static int init_chrdev(void) +{ + driver.minor = lirc_register_driver(&driver); + if (driver.minor < 0) { + printk(KERN_ERR LIRC_DRIVER_NAME ": init_chrdev() failed.\n"); + return -EIO; + } + return 0; +} + +static void drop_chrdev(void) +{ + lirc_unregister_driver(driver.minor); +} +#endif + +/* SECTION: Hardware */ +static long delta(struct timeval *tv1, struct timeval *tv2) +{ + unsigned long deltv; + + deltv = tv2->tv_sec - tv1->tv_sec; + if (deltv > 15) + deltv = 0xFFFFFF; + else + deltv = deltv*1000000 + + tv2->tv_usec - + tv1->tv_usec; + return deltv; +} + +static void sir_timeout(unsigned long data) +{ + /* + * if last received signal was a pulse, but receiving stopped + * within the 9 bit frame, we need to finish this pulse and + * simulate a signal change to from pulse to space. Otherwise + * upper layers will receive two sequences next time. + */ + + unsigned long flags; + unsigned long pulse_end; + + /* avoid interference with interrupt */ + spin_lock_irqsave(&timer_lock, flags); + if (last_value) { +#ifndef LIRC_ON_SA1100 + /* clear unread bits in UART and restart */ + outb(UART_FCR_CLEAR_RCVR, io + UART_FCR); +#endif + /* determine 'virtual' pulse end: */ + pulse_end = delta(&last_tv, &last_intr_tv); + dprintk("timeout add %d for %lu usec\n", last_value, pulse_end); + add_read_queue(last_value, pulse_end); + last_value = 0; + last_tv = last_intr_tv; + } + spin_unlock_irqrestore(&timer_lock, flags); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static irqreturn_t sir_interrupt(int irq, void *dev_id, + struct pt_regs *regs) +#else +static irqreturn_t sir_interrupt(int irq, void *dev_id) +#endif +{ + unsigned char data; + struct timeval curr_tv; + static unsigned long deltv; +#ifdef LIRC_ON_SA1100 + int status; + static int n; + + status = Ser2UTSR0; + /* + * Deal with any receive errors first. The bytes in error may be + * the only bytes in the receive FIFO, so we do this first. + */ + while (status & UTSR0_EIF) { + int bstat; + + if (debug) { + dprintk("EIF\n"); + bstat = Ser2UTSR1; + + if (bstat & UTSR1_FRE) + dprintk("frame error\n"); + if (bstat & UTSR1_ROR) + dprintk("receive fifo overrun\n"); + if (bstat & UTSR1_PRE) + dprintk("parity error\n"); + } + + bstat = Ser2UTDR; + n++; + status = Ser2UTSR0; + } + + if (status & (UTSR0_RFS | UTSR0_RID)) { + do_gettimeofday(&curr_tv); + deltv = delta(&last_tv, &curr_tv); + do { + data = Ser2UTDR; + dprintk("%d data: %u\n", n, (unsigned int) data); + n++; + } while (status & UTSR0_RID && /* do not empty fifo in order to + * get UTSR0_RID in any case */ + Ser2UTSR1 & UTSR1_RNE); /* data ready */ + + if (status&UTSR0_RID) { + add_read_queue(0 , deltv - n * TIME_CONST); /*space*/ + add_read_queue(1, n * TIME_CONST); /*pulse*/ + n = 0; + last_tv = curr_tv; + } + } + + if (status & UTSR0_TFS) + printk(KERN_ERR "transmit fifo not full, shouldn't happen\n"); + + /* We must clear certain bits. */ + status &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); + if (status) + Ser2UTSR0 = status; +#else + unsigned long deltintrtv; + unsigned long flags; + int iir, lsr; + + while ((iir = inb(io + UART_IIR) & UART_IIR_ID)) { + switch (iir&UART_IIR_ID) { /* FIXME toto treba preriedit */ + case UART_IIR_MSI: + (void) inb(io + UART_MSR); + break; + case UART_IIR_RLSI: + (void) inb(io + UART_LSR); + break; + case UART_IIR_THRI: +#if 0 + if (lsr & UART_LSR_THRE) /* FIFO is empty */ + outb(data, io + UART_TX) +#endif + break; + case UART_IIR_RDI: + /* avoid interference with timer */ + spin_lock_irqsave(&timer_lock, flags); + do { + del_timer(&timerlist); + data = inb(io + UART_RX); + do_gettimeofday(&curr_tv); + deltv = delta(&last_tv, &curr_tv); + deltintrtv = delta(&last_intr_tv, &curr_tv); + dprintk("t %lu, d %d\n", deltintrtv, (int)data); + /* + * if nothing came in last X cycles, + * it was gap + */ + if (deltintrtv > TIME_CONST * threshold) { + if (last_value) { + dprintk("GAP\n"); + /* simulate signal change */ + add_read_queue(last_value, + deltv - + deltintrtv); + last_value = 0; + last_tv.tv_sec = + last_intr_tv.tv_sec; + last_tv.tv_usec = + last_intr_tv.tv_usec; + deltv = deltintrtv; + } + } + data = 1; + if (data ^ last_value) { + /* + * deltintrtv > 2*TIME_CONST, remember? + * the other case is timeout + */ + add_read_queue(last_value, + deltv-TIME_CONST); + last_value = data; + last_tv = curr_tv; + if (last_tv.tv_usec >= TIME_CONST) { + last_tv.tv_usec -= TIME_CONST; + } else { + last_tv.tv_sec--; + last_tv.tv_usec += 1000000 - + TIME_CONST; + } + } + last_intr_tv = curr_tv; + if (data) { + /* + * start timer for end of + * sequence detection + */ + timerlist.expires = jiffies + + SIR_TIMEOUT; + add_timer(&timerlist); + } + + lsr = inb(io + UART_LSR); + } while (lsr & UART_LSR_DR); /* data ready */ + spin_unlock_irqrestore(&timer_lock, flags); + break; + default: + break; + } + } +#endif + return IRQ_RETVAL(IRQ_HANDLED); +} + +#ifdef LIRC_ON_SA1100 +static void send_pulse(unsigned long length) +{ + unsigned long k, delay; + int flag; + + if (length == 0) + return; + /* + * this won't give us the carrier frequency we really want + * due to integer arithmetic, but we can accept this inaccuracy + */ + + for (k = flag = 0; k < length; k += delay, flag = !flag) { + if (flag) { + off(); + delay = space_width; + } else { + on(); + delay = pulse_width; + } + safe_udelay(delay); + } + off(); +} + +static void send_space(unsigned long length) +{ + if (length == 0) + return; + off(); + safe_udelay(length); +} +#else +static void send_space(unsigned long len) +{ + safe_udelay(len); +} + +static void send_pulse(unsigned long len) +{ + long bytes_out = len / TIME_CONST; + long time_left; + + time_left = (long)len - (long)bytes_out * (long)TIME_CONST; + if (bytes_out == 0) { + bytes_out++; + time_left = 0; + } + while (bytes_out--) { + outb(PULSE, io + UART_TX); + /* FIXME treba seriozne cakanie z drivers/char/serial.c */ + while (!(inb(io + UART_LSR) & UART_LSR_THRE)) + ; + } +#if 0 + if (time_left > 0) + safe_udelay(time_left); +#endif +} +#endif + +#ifdef CONFIG_SA1100_COLLIE +static int sa1100_irda_set_power_collie(int state) +{ + if (state) { + /* + * 0 - off + * 1 - short range, lowest power + * 2 - medium range, medium power + * 3 - maximum range, high power + */ + ucb1200_set_io_direction(TC35143_GPIO_IR_ON, + TC35143_IODIR_OUTPUT); + ucb1200_set_io(TC35143_GPIO_IR_ON, TC35143_IODAT_LOW); + udelay(100); + } else { + /* OFF */ + ucb1200_set_io_direction(TC35143_GPIO_IR_ON, + TC35143_IODIR_OUTPUT); + ucb1200_set_io(TC35143_GPIO_IR_ON, TC35143_IODAT_HIGH); + } + return 0; +} +#endif + +static int init_hardware(void) +{ + unsigned long flags; + + spin_lock_irqsave(&hardware_lock, flags); + /* reset UART */ +#ifdef LIRC_ON_SA1100 +#ifdef CONFIG_SA1100_BITSY + if (machine_is_bitsy()) { + printk(KERN_INFO "Power on IR module\n"); + set_bitsy_egpio(EGPIO_BITSY_IR_ON); + } +#endif +#ifdef CONFIG_SA1100_COLLIE + sa1100_irda_set_power_collie(3); /* power on */ +#endif + sr.hscr0 = Ser2HSCR0; + + sr.utcr0 = Ser2UTCR0; + sr.utcr1 = Ser2UTCR1; + sr.utcr2 = Ser2UTCR2; + sr.utcr3 = Ser2UTCR3; + sr.utcr4 = Ser2UTCR4; + + sr.utdr = Ser2UTDR; + sr.utsr0 = Ser2UTSR0; + sr.utsr1 = Ser2UTSR1; + + /* configure GPIO */ + /* output */ + PPDR |= PPC_TXD2; + PSDR |= PPC_TXD2; + /* set output to 0 */ + off(); + + /* Enable HP-SIR modulation, and ensure that the port is disabled. */ + Ser2UTCR3 = 0; + Ser2HSCR0 = sr.hscr0 & (~HSCR0_HSSP); + + /* clear status register to prevent unwanted interrupts */ + Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); + + /* 7N1 */ + Ser2UTCR0 = UTCR0_1StpBit|UTCR0_7BitData; + /* 115200 */ + Ser2UTCR1 = 0; + Ser2UTCR2 = 1; + /* use HPSIR, 1.6 usec pulses */ + Ser2UTCR4 = UTCR4_HPSIR|UTCR4_Z1_6us; + + /* enable receiver, receive fifo interrupt */ + Ser2UTCR3 = UTCR3_RXE|UTCR3_RIE; + + /* clear status register to prevent unwanted interrupts */ + Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB); + +#elif defined(LIRC_SIR_TEKRAM) + /* disable FIFO */ + soutp(UART_FCR, + UART_FCR_CLEAR_RCVR| + UART_FCR_CLEAR_XMIT| + UART_FCR_TRIGGER_1); + + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + /* First of all, disable all interrupts */ + soutp(UART_IER, sinp(UART_IER) & + (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI))); + + /* Set DLAB 1. */ + soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB); + + /* Set divisor to 12 => 9600 Baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 12); + + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + /* power supply */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + safe_udelay(50*1000); + + /* -DTR low -> reset PIC */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2); + udelay(1*1000); + + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + udelay(100); + + + /* -RTS low -> send control byte */ + soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2); + udelay(7); + soutp(UART_TX, TEKRAM_115200|TEKRAM_PW); + + /* one byte takes ~1042 usec to transmit at 9600,8N1 */ + udelay(1500); + + /* back to normal operation */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + udelay(50); + + udelay(1500); + + /* read previous control byte */ + printk(KERN_INFO LIRC_DRIVER_NAME + ": 0x%02x\n", sinp(UART_RX)); + + /* Set DLAB 1. */ + soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB); + + /* Set divisor to 1 => 115200 Baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 1); + + /* Set DLAB 0, 8 Bit */ + soutp(UART_LCR, UART_LCR_WLEN8); + /* enable interrupts */ + soutp(UART_IER, sinp(UART_IER)|UART_IER_RDI); +#else + outb(0, io + UART_MCR); + outb(0, io + UART_IER); + /* init UART */ + /* set DLAB, speed = 115200 */ + outb(UART_LCR_DLAB | UART_LCR_WLEN7, io + UART_LCR); + outb(1, io + UART_DLL); outb(0, io + UART_DLM); + /* 7N1+start = 9 bits at 115200 ~ 3 bits at 44000 */ + outb(UART_LCR_WLEN7, io + UART_LCR); + /* FIFO operation */ + outb(UART_FCR_ENABLE_FIFO, io + UART_FCR); + /* interrupts */ + /* outb(UART_IER_RLSI|UART_IER_RDI|UART_IER_THRI, io + UART_IER); */ + outb(UART_IER_RDI, io + UART_IER); + /* turn on UART */ + outb(UART_MCR_DTR|UART_MCR_RTS|UART_MCR_OUT2, io + UART_MCR); +#ifdef LIRC_SIR_ACTISYS_ACT200L + init_act200(); +#elif defined(LIRC_SIR_ACTISYS_ACT220L) + init_act220(); +#endif +#endif + spin_unlock_irqrestore(&hardware_lock, flags); + return 0; +} + +static void drop_hardware(void) +{ + unsigned long flags; + + spin_lock_irqsave(&hardware_lock, flags); + +#ifdef LIRC_ON_SA1100 + Ser2UTCR3 = 0; + + Ser2UTCR0 = sr.utcr0; + Ser2UTCR1 = sr.utcr1; + Ser2UTCR2 = sr.utcr2; + Ser2UTCR4 = sr.utcr4; + Ser2UTCR3 = sr.utcr3; + + Ser2HSCR0 = sr.hscr0; +#ifdef CONFIG_SA1100_BITSY + if (machine_is_bitsy()) + clr_bitsy_egpio(EGPIO_BITSY_IR_ON); +#endif +#ifdef CONFIG_SA1100_COLLIE + sa1100_irda_set_power_collie(0); /* power off */ +#endif +#else + /* turn off interrupts */ + outb(0, io + UART_IER); +#endif + spin_unlock_irqrestore(&hardware_lock, flags); +} + +/* SECTION: Initialisation */ + +static int init_port(void) +{ + int retval; + + /* get I/O port access and IRQ line */ +#ifndef LIRC_ON_SA1100 + if (request_region(io, 8, LIRC_DRIVER_NAME) == NULL) { + printk(KERN_ERR LIRC_DRIVER_NAME + ": i/o port 0x%.4x already in use.\n", io); + return -EBUSY; + } +#endif + retval = request_irq(irq, sir_interrupt, IRQF_DISABLED, + LIRC_DRIVER_NAME, NULL); + if (retval < 0) { +# ifndef LIRC_ON_SA1100 + release_region(io, 8); +# endif + printk(KERN_ERR LIRC_DRIVER_NAME + ": IRQ %d already in use.\n", + irq); + return retval; + } +#ifndef LIRC_ON_SA1100 + printk(KERN_INFO LIRC_DRIVER_NAME + ": I/O port 0x%.4x, IRQ %d.\n", + io, irq); +#endif + + init_timer(&timerlist); + timerlist.function = sir_timeout; + timerlist.data = 0xabadcafe; + + return 0; +} + +static void drop_port(void) +{ + free_irq(irq, NULL); + del_timer_sync(&timerlist); +#ifndef LIRC_ON_SA1100 + release_region(io, 8); +#endif +} + +#ifdef LIRC_SIR_ACTISYS_ACT200L +/* Crystal/Cirrus CS8130 IR transceiver, used in Actisys Act200L dongle */ +/* some code borrowed from Linux IRDA driver */ + +/* Register 0: Control register #1 */ +#define ACT200L_REG0 0x00 +#define ACT200L_TXEN 0x01 /* Enable transmitter */ +#define ACT200L_RXEN 0x02 /* Enable receiver */ +#define ACT200L_ECHO 0x08 /* Echo control chars */ + +/* Register 1: Control register #2 */ +#define ACT200L_REG1 0x10 +#define ACT200L_LODB 0x01 /* Load new baud rate count value */ +#define ACT200L_WIDE 0x04 /* Expand the maximum allowable pulse */ + +/* Register 3: Transmit mode register #2 */ +#define ACT200L_REG3 0x30 +#define ACT200L_B0 0x01 /* DataBits, 0=6, 1=7, 2=8, 3=9(8P) */ +#define ACT200L_B1 0x02 /* DataBits, 0=6, 1=7, 2=8, 3=9(8P) */ +#define ACT200L_CHSY 0x04 /* StartBit Synced 0=bittime, 1=startbit */ + +/* Register 4: Output Power register */ +#define ACT200L_REG4 0x40 +#define ACT200L_OP0 0x01 /* Enable LED1C output */ +#define ACT200L_OP1 0x02 /* Enable LED2C output */ +#define ACT200L_BLKR 0x04 + +/* Register 5: Receive Mode register */ +#define ACT200L_REG5 0x50 +#define ACT200L_RWIDL 0x01 /* fixed 1.6us pulse mode */ + /*.. other various IRDA bit modes, and TV remote modes..*/ + +/* Register 6: Receive Sensitivity register #1 */ +#define ACT200L_REG6 0x60 +#define ACT200L_RS0 0x01 /* receive threshold bit 0 */ +#define ACT200L_RS1 0x02 /* receive threshold bit 1 */ + +/* Register 7: Receive Sensitivity register #2 */ +#define ACT200L_REG7 0x70 +#define ACT200L_ENPOS 0x04 /* Ignore the falling edge */ + +/* Register 8,9: Baud Rate Divider register #1,#2 */ +#define ACT200L_REG8 0x80 +#define ACT200L_REG9 0x90 + +#define ACT200L_2400 0x5f +#define ACT200L_9600 0x17 +#define ACT200L_19200 0x0b +#define ACT200L_38400 0x05 +#define ACT200L_57600 0x03 +#define ACT200L_115200 0x01 + +/* Register 13: Control register #3 */ +#define ACT200L_REG13 0xd0 +#define ACT200L_SHDW 0x01 /* Enable access to shadow registers */ + +/* Register 15: Status register */ +#define ACT200L_REG15 0xf0 + +/* Register 21: Control register #4 */ +#define ACT200L_REG21 0x50 +#define ACT200L_EXCK 0x02 /* Disable clock output driver */ +#define ACT200L_OSCL 0x04 /* oscillator in low power, medium accuracy mode */ + +static void init_act200(void) +{ + int i; + __u8 control[] = { + ACT200L_REG15, + ACT200L_REG13 | ACT200L_SHDW, + ACT200L_REG21 | ACT200L_EXCK | ACT200L_OSCL, + ACT200L_REG13, + ACT200L_REG7 | ACT200L_ENPOS, + ACT200L_REG6 | ACT200L_RS0 | ACT200L_RS1, + ACT200L_REG5 | ACT200L_RWIDL, + ACT200L_REG4 | ACT200L_OP0 | ACT200L_OP1 | ACT200L_BLKR, + ACT200L_REG3 | ACT200L_B0, + ACT200L_REG0 | ACT200L_TXEN | ACT200L_RXEN, + ACT200L_REG8 | (ACT200L_115200 & 0x0f), + ACT200L_REG9 | ((ACT200L_115200 >> 4) & 0x0f), + ACT200L_REG1 | ACT200L_LODB | ACT200L_WIDE + }; + + /* Set DLAB 1. */ + soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN8); + + /* Set divisor to 12 => 9600 Baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 12); + + /* Set DLAB 0. */ + soutp(UART_LCR, UART_LCR_WLEN8); + /* Set divisor to 12 => 9600 Baud */ + + /* power supply */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + for (i = 0; i < 50; i++) + safe_udelay(1000); + + /* Reset the dongle : set RTS low for 25 ms */ + soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2); + for (i = 0; i < 25; i++) + udelay(1000); + + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + udelay(100); + + /* Clear DTR and set RTS to enter command mode */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2); + udelay(7); + + /* send out the control register settings for 115K 7N1 SIR operation */ + for (i = 0; i < sizeof(control); i++) { + soutp(UART_TX, control[i]); + /* one byte takes ~1042 usec to transmit at 9600,8N1 */ + udelay(1500); + } + + /* back to normal operation */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + udelay(50); + + udelay(1500); + soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB); + + /* Set DLAB 1. */ + soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN7); + + /* Set divisor to 1 => 115200 Baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 1); + + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + /* Set DLAB 0, 7 Bit */ + soutp(UART_LCR, UART_LCR_WLEN7); + + /* enable interrupts */ + soutp(UART_IER, sinp(UART_IER)|UART_IER_RDI); +} +#endif + +#ifdef LIRC_SIR_ACTISYS_ACT220L +/* + * Derived from linux IrDA driver (net/irda/actisys.c) + * Drop me a mail for any kind of comment: maxx@spaceboyz.net + */ + +void init_act220(void) +{ + int i; + + /* DLAB 1 */ + soutp(UART_LCR, UART_LCR_DLAB|UART_LCR_WLEN7); + + /* 9600 baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 12); + + /* DLAB 0 */ + soutp(UART_LCR, UART_LCR_WLEN7); + + /* reset the dongle, set DTR low for 10us */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2); + udelay(10); + + /* back to normal (still 9600) */ + soutp(UART_MCR, UART_MCR_DTR|UART_MCR_RTS|UART_MCR_OUT2); + + /* + * send RTS pulses until we reach 115200 + * i hope this is really the same for act220l/act220l+ + */ + for (i = 0; i < 3; i++) { + udelay(10); + /* set RTS low for 10 us */ + soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2); + udelay(10); + /* set RTS high for 10 us */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2); + } + + /* back to normal operation */ + udelay(1500); /* better safe than sorry ;) */ + + /* Set DLAB 1. */ + soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN7); + + /* Set divisor to 1 => 115200 Baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 1); + + /* Set DLAB 0, 7 Bit */ + /* The dongle doesn't seem to have any problems with operation at 7N1 */ + soutp(UART_LCR, UART_LCR_WLEN7); + + /* enable interrupts */ + soutp(UART_IER, UART_IER_RDI); +} +#endif + +static int init_lirc_sir(void) +{ + int retval; + + init_waitqueue_head(&lirc_read_queue); + retval = init_port(); + if (retval < 0) + return retval; + init_hardware(); + printk(KERN_INFO LIRC_DRIVER_NAME + ": Installed.\n"); + return 0; +} + +#ifdef MODULE + +static int __init lirc_sir_init(void) +{ + int retval; + + retval = init_chrdev(); + if (retval < 0) + return retval; + retval = init_lirc_sir(); + if (retval) { + drop_chrdev(); + return retval; + } + return 0; +} + +static void __exit lirc_sir_exit(void) +{ + drop_hardware(); + drop_chrdev(); + drop_port(); + printk(KERN_INFO LIRC_DRIVER_NAME ": Uninstalled.\n"); +} + +module_init(lirc_sir_init); +module_exit(lirc_sir_exit); + +#ifdef LIRC_SIR_TEKRAM +MODULE_DESCRIPTION("Infrared receiver driver for Tekram Irmate 210"); +MODULE_AUTHOR("Christoph Bartelmus"); +#elif defined(LIRC_ON_SA1100) +MODULE_DESCRIPTION("LIRC driver for StrongARM SA1100 embedded microprocessor"); +MODULE_AUTHOR("Christoph Bartelmus"); +#elif defined(LIRC_SIR_ACTISYS_ACT200L) +MODULE_DESCRIPTION("LIRC driver for Actisys Act200L"); +MODULE_AUTHOR("Karl Bongers"); +#elif defined(LIRC_SIR_ACTISYS_ACT220L) +MODULE_DESCRIPTION("LIRC driver for Actisys Act220L(+)"); +MODULE_AUTHOR("Jan Roemisch"); +#else +MODULE_DESCRIPTION("Infrared receiver driver for SIR type serial ports"); +MODULE_AUTHOR("Milan Pikula"); +#endif +MODULE_LICENSE("GPL"); + +#ifdef LIRC_ON_SA1100 +module_param(irq, int, S_IRUGO); +MODULE_PARM_DESC(irq, "Interrupt (16)"); +#else +module_param(io, int, S_IRUGO); +MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)"); + +module_param(irq, int, S_IRUGO); +MODULE_PARM_DESC(irq, "Interrupt (4 or 3)"); + +module_param(threshold, int, S_IRUGO); +MODULE_PARM_DESC(threshold, "space detection threshold (3)"); +#endif + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +EXPORT_NO_SYMBOLS; + +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/lirc/lirc_sir/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_sir/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_SIR) += lirc_sir.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_parallel/lirc_parallel.h +++ linux-2.6.32/ubuntu/lirc/lirc_parallel/lirc_parallel.h @@ -0,0 +1,26 @@ +/* $Id: lirc_parallel.h,v 5.2 2007/01/25 04:32:05 lirc Exp $ */ + +#ifndef _LIRC_PARALLEL_H +#define _LIRC_PARALLEL_H + +#include + +#define LIRC_PORT_LEN 3 + +#define LIRC_LP_BASE 0 +#define LIRC_LP_STATUS 1 +#define LIRC_LP_CONTROL 2 + +#define LIRC_PORT_DATA LIRC_LP_BASE /* base */ +#define LIRC_PORT_TIMER LIRC_LP_STATUS /* status port */ +#define LIRC_PORT_TIMER_BIT LP_PBUSY /* busy signal */ +#define LIRC_PORT_SIGNAL LIRC_LP_STATUS /* status port */ +#define LIRC_PORT_SIGNAL_BIT LP_PACK /* ack signal */ +#define LIRC_PORT_IRQ LIRC_LP_CONTROL /* control port */ + +#define LIRC_SFH506_DELAY 0 /* delay t_phl in usecs */ + +#define LIRC_PARALLEL_MAX_TRANSMITTERS 8 +#define LIRC_PARALLEL_TRANSMITTER_MASK ((1< + * + * 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 + * + */ + +/*** Includes ***/ +#ifdef HAVE_CONFIG_H +# include +#endif +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) +#error "**********************************************************" +#error " Sorry, this driver needs kernel version 2.2.18 or higher " +#error "**********************************************************" +#endif + +#include +#ifdef CONFIG_SMP +#error "--- Sorry, this driver is not SMP safe. ---" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#include +#include +#include +#else +#include +#include +#include +#include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) +#include +#endif + +#include +#include + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +#include "lirc_parallel.h" + +#define LIRC_DRIVER_NAME "lirc_parallel" + +#ifndef LIRC_IRQ +#define LIRC_IRQ 7 +#endif +#ifndef LIRC_PORT +#define LIRC_PORT 0x378 +#endif +#ifndef LIRC_TIMER +#define LIRC_TIMER 65536 +#endif + +/*** Global Variables ***/ + +static int debug; +static int check_pselecd; + +unsigned int irq = LIRC_IRQ; +unsigned int io = LIRC_PORT; +#ifdef LIRC_TIMER +unsigned int timer; +unsigned int default_timer = LIRC_TIMER; +#endif + +#define WBUF_SIZE (256) +#define RBUF_SIZE (256) /* this must be a power of 2 larger than 1 */ + +static lirc_t wbuf[WBUF_SIZE]; +static lirc_t rbuf[RBUF_SIZE]; + +DECLARE_WAIT_QUEUE_HEAD(lirc_wait); + +unsigned int rptr; +unsigned int wptr; +unsigned int lost_irqs; +int is_open; + +struct parport *pport; +struct pardevice *ppdevice; +int is_claimed; + +unsigned int tx_mask = 1; + +/*** Internal Functions ***/ + +static unsigned int in(int offset) +{ + switch (offset) { + case LIRC_LP_BASE: + return parport_read_data(pport); + case LIRC_LP_STATUS: + return parport_read_status(pport); + case LIRC_LP_CONTROL: + return parport_read_control(pport); + } + return 0; /* make compiler happy */ +} + +static void out(int offset, int value) +{ + switch (offset) { + case LIRC_LP_BASE: + parport_write_data(pport, value); + break; + case LIRC_LP_CONTROL: + parport_write_control(pport, value); + break; + case LIRC_LP_STATUS: + printk(KERN_INFO "%s: attempt to write to status register\n", + LIRC_DRIVER_NAME); + break; + } +} + +static unsigned int lirc_get_timer(void) +{ + return in(LIRC_PORT_TIMER) & LIRC_PORT_TIMER_BIT; +} + +static unsigned int lirc_get_signal(void) +{ + return in(LIRC_PORT_SIGNAL) & LIRC_PORT_SIGNAL_BIT; +} + +static void lirc_on(void) +{ + out(LIRC_PORT_DATA, tx_mask); +} + +static void lirc_off(void) +{ + out(LIRC_PORT_DATA, 0); +} + +static unsigned int init_lirc_timer(void) +{ + struct timeval tv, now; + unsigned int level, newlevel, timeelapsed, newtimer; + int count = 0; + + do_gettimeofday(&tv); + tv.tv_sec++; /* wait max. 1 sec. */ + level = lirc_get_timer(); + do { + newlevel = lirc_get_timer(); + if (level == 0 && newlevel != 0) + count++; + level = newlevel; + do_gettimeofday(&now); + } while (count < 1000 && (now.tv_sec < tv.tv_sec + || (now.tv_sec == tv.tv_sec + && now.tv_usec < tv.tv_usec))); + + timeelapsed = ((now.tv_sec + 1 - tv.tv_sec)*1000000 + + (now.tv_usec - tv.tv_usec)); + if (count >= 1000 && timeelapsed > 0) { + if (default_timer == 0) { + /* autodetect timer */ + newtimer = (1000000*count)/timeelapsed; + printk(KERN_INFO "%s: %u Hz timer detected\n", + LIRC_DRIVER_NAME, newtimer); + return newtimer; + } else { + newtimer = (1000000*count)/timeelapsed; + if (abs(newtimer - default_timer) > default_timer/10) { + /* bad timer */ + printk(KERN_NOTICE "%s: bad timer: %u Hz\n", + LIRC_DRIVER_NAME, newtimer); + printk(KERN_NOTICE "%s: using default timer: " + "%u Hz\n", + LIRC_DRIVER_NAME, default_timer); + return default_timer; + } else { + printk(KERN_INFO "%s: %u Hz timer detected\n", + LIRC_DRIVER_NAME, newtimer); + return newtimer; /* use detected value */ + } + } + } else { + printk(KERN_NOTICE "%s: no timer detected\n", LIRC_DRIVER_NAME); + return 0; + } +} + +static int lirc_claim(void) +{ + if (parport_claim(ppdevice) != 0) { + printk(KERN_WARNING "%s: could not claim port\n", + LIRC_DRIVER_NAME); + printk(KERN_WARNING "%s: waiting for port becoming available" + "\n", LIRC_DRIVER_NAME); + if (parport_claim_or_block(ppdevice) < 0) { + printk(KERN_NOTICE "%s: could not claim port, giving" + " up\n", LIRC_DRIVER_NAME); + return 0; + } + } + out(LIRC_LP_CONTROL, LP_PSELECP|LP_PINITP); + is_claimed = 1; + return 1; +} + +/*** interrupt handler ***/ + +static void rbuf_write(lirc_t signal) +{ + unsigned int nwptr; + + nwptr = (wptr + 1) & (RBUF_SIZE - 1); + if (nwptr == rptr) { + /* no new signals will be accepted */ + lost_irqs++; + printk(KERN_NOTICE "%s: buffer overrun\n", LIRC_DRIVER_NAME); + return; + } + rbuf[wptr] = signal; + wptr = nwptr; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void irq_handler(int i, void *blah, struct pt_regs *regs) +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) +static void irq_handler(int i, void *blah) +#else +static void irq_handler(void *blah) +#endif +{ + struct timeval tv; + static struct timeval lasttv; + static int init; + long signal; + lirc_t data; + unsigned int level, newlevel; + unsigned int timeout; + + if (!MOD_IN_USE) + return; + + if (!is_claimed) + return; + +#if 0 + /* disable interrupt */ + disable_irq(irq); + out(LIRC_PORT_IRQ, in(LIRC_PORT_IRQ) & (~LP_PINTEN)); +#endif + if (check_pselecd && (in(1) & LP_PSELECD)) + return; + +#ifdef LIRC_TIMER + if (init) { + do_gettimeofday(&tv); + + signal = tv.tv_sec - lasttv.tv_sec; + if (signal > 15) + /* really long time */ + data = PULSE_MASK; + else + data = (lirc_t) (signal*1000000 + + tv.tv_usec - lasttv.tv_usec + + LIRC_SFH506_DELAY); + + rbuf_write(data); /* space */ + } else { + if (timer == 0) { + /* + * wake up; we'll lose this signal, but it will be + * garbage if the device is turned on anyway + */ + timer = init_lirc_timer(); + /* enable_irq(irq); */ + return; + } + init = 1; + } + + timeout = timer/10; /* timeout after 1/10 sec. */ + signal = 1; + level = lirc_get_timer(); + do { + newlevel = lirc_get_timer(); + if (level == 0 && newlevel != 0) + signal++; + level = newlevel; + + /* giving up */ + if (signal > timeout + || (check_pselecd && (in(1) & LP_PSELECD))) { + signal = 0; + printk(KERN_NOTICE "%s: timeout\n", LIRC_DRIVER_NAME); + break; + } + } while (lirc_get_signal()); + + if (signal != 0) { + /* adjust value to usecs */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) + unsigned long long helper; + + helper = ((unsigned long long) signal)*1000000; + do_div(helper, timer); + signal = (long) helper; +#else + signal = (long) ((((double) signal)*1000000)/timer); +#endif + + if (signal > LIRC_SFH506_DELAY) + data = signal - LIRC_SFH506_DELAY; + else + data = 1; + rbuf_write(PULSE_BIT|data); /* pulse */ + } + do_gettimeofday(&lasttv); +#else + /* add your code here */ +#endif + + wake_up_interruptible(&lirc_wait); + + /* enable interrupt */ + /* + enable_irq(irq); + out(LIRC_PORT_IRQ, in(LIRC_PORT_IRQ)|LP_PINTEN); + */ +} + +/*** file operations ***/ + +static loff_t lirc_lseek(struct file *filep, loff_t offset, int orig) +{ + return -ESPIPE; +} + +static ssize_t lirc_read(struct file *filep, char *buf, size_t n, loff_t *ppos) +{ + int result = 0; + int count = 0; + DECLARE_WAITQUEUE(wait, current); + + if (n % sizeof(lirc_t)) + return -EINVAL; + + add_wait_queue(&lirc_wait, &wait); + set_current_state(TASK_INTERRUPTIBLE); + while (count < n) { + if (rptr != wptr) { + if (copy_to_user(buf+count, (char *) &rbuf[rptr], + sizeof(lirc_t))) { + result = -EFAULT; + break; + } + rptr = (rptr + 1) & (RBUF_SIZE - 1); + count += sizeof(lirc_t); + } else { + if (filep->f_flags & O_NONBLOCK) { + result = -EAGAIN; + break; + } + if (signal_pending(current)) { + result = -ERESTARTSYS; + break; + } + schedule(); + set_current_state(TASK_INTERRUPTIBLE); + } + } + remove_wait_queue(&lirc_wait, &wait); + set_current_state(TASK_RUNNING); + return count ? count : result; +} + +static ssize_t lirc_write(struct file *filep, const char *buf, size_t n, + loff_t *ppos) +{ + int count; + unsigned int i; + unsigned int level, newlevel; + unsigned long flags; + lirc_t counttimer; + + if (!is_claimed) + return -EBUSY; + + if (n % sizeof(lirc_t)) + return -EINVAL; + + count = n / sizeof(lirc_t); + + if (count > WBUF_SIZE || count % 2 == 0) + return -EINVAL; + + if (copy_from_user(wbuf, buf, n)) + return -EFAULT; + +#ifdef LIRC_TIMER + if (timer == 0) { + /* try again if device is ready */ + timer = init_lirc_timer(); + if (timer == 0) + return -EIO; + } + + /* adjust values from usecs */ + for (i = 0; i < count; i++) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) + unsigned long long helper; + + helper = ((unsigned long long) wbuf[i])*timer; + do_div(helper, 1000000); + wbuf[i] = (lirc_t) helper; +#else + wbuf[i] = (lirc_t) (((double) wbuf[i])*timer/1000000); +#endif + } + + local_irq_save(flags); + i = 0; + while (i < count) { + level = lirc_get_timer(); + counttimer = 0; + lirc_on(); + do { + newlevel = lirc_get_timer(); + if (level == 0 && newlevel != 0) + counttimer++; + level = newlevel; + if (check_pselecd && (in(1) & LP_PSELECD)) { + lirc_off(); + local_irq_restore(flags); + return -EIO; + } + } while (counttimer < wbuf[i]); + i++; + + lirc_off(); + if (i == count) + break; + counttimer = 0; + do { + newlevel = lirc_get_timer(); + if (level == 0 && newlevel != 0) + counttimer++; + level = newlevel; + if (check_pselecd && (in(1) & LP_PSELECD)) { + local_irq_restore(flags); + return -EIO; + } + } while (counttimer < wbuf[i]); + i++; + } + local_irq_restore(flags); +#else + /* place code that handles write without external timer here */ +#endif + return n; +} + +static unsigned int lirc_poll(struct file *file, poll_table *wait) +{ + poll_wait(file, &lirc_wait, wait); + if (rptr != wptr) + return POLLIN | POLLRDNORM; + return 0; +} + +static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd, + unsigned long arg) +{ + int result; + unsigned long features = LIRC_CAN_SET_TRANSMITTER_MASK | + LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2; + unsigned long mode; + unsigned int ivalue; + + switch (cmd) { + case LIRC_GET_FEATURES: + result = put_user(features, (unsigned long *) arg); + if (result) + return result; + break; + case LIRC_GET_SEND_MODE: + result = put_user(LIRC_MODE_PULSE, (unsigned long *) arg); + if (result) + return result; + break; + case LIRC_GET_REC_MODE: + result = put_user(LIRC_MODE_MODE2, (unsigned long *) arg); + if (result) + return result; + break; + case LIRC_SET_SEND_MODE: + result = get_user(mode, (unsigned long *) arg); + if (result) + return result; + if (mode != LIRC_MODE_PULSE) + return -EINVAL; + break; + case LIRC_SET_REC_MODE: + result = get_user(mode, (unsigned long *) arg); + if (result) + return result; + if (mode != LIRC_MODE_MODE2) + return -ENOSYS; + break; + case LIRC_SET_TRANSMITTER_MASK: + result = get_user(ivalue, (unsigned int *) arg); + if (result) + return result; + if ((ivalue & LIRC_PARALLEL_TRANSMITTER_MASK) != ivalue) + return LIRC_PARALLEL_MAX_TRANSMITTERS; + tx_mask = ivalue; + break; + default: + return -ENOIOCTLCMD; + } + return 0; +} + +static int lirc_open(struct inode *node, struct file *filep) +{ + if (MOD_IN_USE || !lirc_claim()) + return -EBUSY; + + parport_enable_irq(pport); + + /* init read ptr */ + rptr = 0; + wptr = 0; + lost_irqs = 0; + + MOD_INC_USE_COUNT; + is_open = 1; + return 0; +} + +static int lirc_close(struct inode *node, struct file *filep) +{ + if (is_claimed) { + is_claimed = 0; + parport_release(ppdevice); + } + is_open = 0; + MOD_DEC_USE_COUNT; + return 0; +} + +static struct file_operations lirc_fops = { + .owner = THIS_MODULE, + .llseek = lirc_lseek, + .read = lirc_read, + .write = lirc_write, + .poll = lirc_poll, + .ioctl = lirc_ioctl, + .open = lirc_open, + .release = lirc_close +}; + +static int set_use_inc(void *data) +{ + return 0; +} + +static void set_use_dec(void *data) +{ +} + +static struct lirc_driver driver = { + .name = LIRC_DRIVER_NAME, + .minor = -1, + .code_length = 1, + .sample_rate = 0, + .data = NULL, + .add_to_buf = NULL, +#ifndef LIRC_REMOVE_DURING_EXPORT + .get_queue = NULL, +#endif + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .fops = &lirc_fops, + .dev = NULL, + .owner = THIS_MODULE, +}; + +#ifdef MODULE +static int pf(void *handle); +static void kf(void *handle); + +static struct timer_list poll_timer; +static void poll_state(unsigned long ignored); + +static void poll_state(unsigned long ignored) +{ + printk(KERN_NOTICE "%s: time\n", + LIRC_DRIVER_NAME); + del_timer(&poll_timer); + if (is_claimed) + return; + kf(NULL); + if (!is_claimed) { + printk(KERN_NOTICE "%s: could not claim port, giving up\n", + LIRC_DRIVER_NAME); + init_timer(&poll_timer); + poll_timer.expires = jiffies + HZ; + poll_timer.data = (unsigned long)current; + poll_timer.function = poll_state; + add_timer(&poll_timer); + } +} + +static int pf(void *handle) +{ + parport_disable_irq(pport); + is_claimed = 0; + return 0; +} + +static void kf(void *handle) +{ + if (!is_open) + return; + if (!lirc_claim()) + return; + parport_enable_irq(pport); + lirc_off(); + /* this is a bit annoying when you actually print...*/ + /* + printk(KERN_INFO "%s: reclaimed port\n", LIRC_DRIVER_NAME); + */ +} + +/*** module initialization and cleanup ***/ + +static int __init lirc_parallel_init(void) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 3) + pport = parport_find_base(io); +#else + pport = parport_enumerate(); + while (pport != NULL) { + if (pport->base == io) + break; + pport = pport->next; + } +#endif + if (pport == NULL) { + printk(KERN_NOTICE "%s: no port at %x found\n", + LIRC_DRIVER_NAME, io); + return -ENXIO; + } + ppdevice = parport_register_device(pport, LIRC_DRIVER_NAME, + pf, kf, irq_handler, 0, NULL); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 3) + parport_put_port(pport); +#endif + if (ppdevice == NULL) { + printk(KERN_NOTICE "%s: parport_register_device() failed\n", + LIRC_DRIVER_NAME); + return -ENXIO; + } + if (parport_claim(ppdevice) != 0) + goto skip_init; + is_claimed = 1; + out(LIRC_LP_CONTROL, LP_PSELECP|LP_PINITP); + +#ifdef LIRC_TIMER + if (debug) + out(LIRC_PORT_DATA, tx_mask); + + timer = init_lirc_timer(); + +#if 0 /* continue even if device is offline */ + if (timer == 0) { + is_claimed = 0; + parport_release(pport); + parport_unregister_device(ppdevice); + return -EIO; + } + +#endif + if (debug) + out(LIRC_PORT_DATA, 0); +#endif + + is_claimed = 0; + parport_release(ppdevice); + skip_init: + driver.minor = lirc_register_driver(&driver); + if (driver.minor < 0) { + printk(KERN_NOTICE "%s: register_chrdev() failed\n", + LIRC_DRIVER_NAME); + parport_unregister_device(ppdevice); + return -EIO; + } + printk(KERN_INFO "%s: installed using port 0x%04x irq %d\n", + LIRC_DRIVER_NAME, io, irq); + return 0; +} + +static void __exit lirc_parallel_exit(void) +{ + parport_unregister_device(ppdevice); + lirc_unregister_driver(driver.minor); +} + +module_init(lirc_parallel_init); +module_exit(lirc_parallel_exit); + +MODULE_DESCRIPTION("Infrared receiver driver for parallel ports."); +MODULE_AUTHOR("Christoph Bartelmus"); +MODULE_LICENSE("GPL"); + +module_param(io, int, S_IRUGO); +MODULE_PARM_DESC(io, "I/O address base (0x3bc, 0x378 or 0x278)"); + +module_param(irq, int, S_IRUGO); +MODULE_PARM_DESC(irq, "Interrupt (7 or 5)"); + +module_param(tx_mask, int, S_IRUGO); +MODULE_PARM_DESC(tx_maxk, "Transmitter mask (default: 0x01)"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +module_param(check_pselecd, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Check for printer (default: 0)"); +EXPORT_NO_SYMBOLS; +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/lirc/lirc_imon/lirc_imon.c +++ linux-2.6.32/ubuntu/lirc/lirc_imon/lirc_imon.c @@ -0,0 +1,2370 @@ +/* + * lirc_imon.c: LIRC/VFD/LCD driver for SoundGraph iMON IR/VFD/LCD + * including the iMON PAD model + * + * $Id: lirc_imon.c,v 1.111 2009/09/11 04:56:18 jarodwilson Exp $ + * + * Copyright(C) 2004 Venky Raju(dev@venky.ws) + * + * lirc_imon is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +#error "*** Sorry, this driver requires a 2.6 kernel" +#endif + +#include + +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#include +#include + +#include "../kcompat.h" +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" + + +#define MOD_AUTHOR "Venky Raju " +#define MOD_DESC "Driver for SoundGraph iMON MultiMedia IR/Display" +#define MOD_NAME "lirc_imon" +#define MOD_VERSION "0.6" + +#define DISPLAY_MINOR_BASE 144 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) +#define DEVFS_MODE (S_IFCHR | S_IRUSR | S_IWUSR | \ + S_IRGRP | S_IWGRP | S_IROTH) +#endif +#define DEVICE_NAME LIRC_DEVFS_PREFIX "lcd%d" + +#define BUF_CHUNK_SIZE 4 +#define BUF_SIZE 128 + +#define BIT_DURATION 250 /* each bit received is 250us */ + +#define IMON_CLOCK_ENABLE_PACKETS 2 + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_INFO MOD_NAME ": " fmt, ## args); \ + } while (0) + +/*** P R O T O T Y P E S ***/ + +/* USB Callback prototypes */ +static int imon_probe(struct usb_interface *interface, + const struct usb_device_id *id); +static void imon_disconnect(struct usb_interface *interface); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_rx_callback_intf0(struct urb *urb, struct pt_regs *regs); +static void usb_rx_callback_intf1(struct urb *urb, struct pt_regs *regs); +static void usb_tx_callback(struct urb *urb, struct pt_regs *regs); +#else +static void usb_rx_callback_intf0(struct urb *urb); +static void usb_rx_callback_intf1(struct urb *urb); +static void usb_tx_callback(struct urb *urb); +#endif + +/* suspend/resume support */ +static int imon_resume(struct usb_interface *intf); +static int imon_suspend(struct usb_interface *intf, pm_message_t message); + +/* Display file_operations function prototypes */ +static int display_open(struct inode *inode, struct file *file); +static int display_close(struct inode *inode, struct file *file); + +/* VFD write operation */ +static ssize_t vfd_write(struct file *file, const char *buf, + size_t n_bytes, loff_t *pos); + +/* LCD file_operations override function prototypes */ +static ssize_t lcd_write(struct file *file, const char *buf, + size_t n_bytes, loff_t *pos); + +/* LIRC driver function prototypes */ +static int ir_open(void *data); +static void ir_close(void *data); + +/* Driver init/exit prototypes */ +static int __init imon_init(void); +static void __exit imon_exit(void); + +/*** G L O B A L S ***/ + +struct imon_context { + struct usb_device *usbdev_intf0; + /* Newer devices have two interfaces */ + struct usb_device *usbdev_intf1; + int display_supported; /* not all controllers do */ + int display_isopen; /* display port has been opened */ + int ir_isopen; /* IR port open */ + int ir_isassociating; /* IR port open for association */ + int dev_present_intf0; /* USB device presence, interface 0 */ + int dev_present_intf1; /* USB device presence, interface 1 */ + struct mutex lock; /* to lock this object */ + wait_queue_head_t remove_ok; /* For unexpected USB disconnects */ + + int vfd_proto_6p; /* some VFD require a 6th packet */ + int ir_onboard_decode; /* IR signals decoded onboard */ + + struct lirc_driver *driver; + struct usb_endpoint_descriptor *rx_endpoint_intf0; + struct usb_endpoint_descriptor *rx_endpoint_intf1; + struct usb_endpoint_descriptor *tx_endpoint; + struct urb *rx_urb_intf0; + struct urb *rx_urb_intf1; + struct urb *tx_urb; + int tx_control; + unsigned char usb_rx_buf[8]; + unsigned char usb_tx_buf[8]; + + struct rx_data { + int count; /* length of 0 or 1 sequence */ + int prev_bit; /* logic level of sequence */ + int initial_space; /* initial space flag */ + } rx; + + struct tx_t { + unsigned char data_buf[35]; /* user data buffer */ + struct completion finished; /* wait for write to finish */ + atomic_t busy; /* write in progress */ + int status; /* status of tx completion */ + } tx; + + int ffdc_dev; /* is this the overused ffdc ID? */ + int ir_protocol; /* iMON or MCE (RC6) IR protocol? */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + struct input_dev *mouse; /* input device for iMON PAD remote */ + struct input_dev *touch; /* input device for touchscreen */ +#endif + int display_type; /* store the display type */ + int pad_mouse; /* toggle kbd(0)/mouse(1) mode */ + int touch_x; /* x coordinate on touchscreen */ + int touch_y; /* y coordinate on touchscreen */ + char name_mouse[128]; + char phys_mouse[64]; + char name_touch[128]; + char phys_touch[64]; + struct timer_list timer; +}; + +#define TOUCH_TIMEOUT (HZ/30) + +/* display file operations. Nb: lcd_write will be subbed in as needed later */ +static struct file_operations display_fops = { + .owner = THIS_MODULE, + .open = &display_open, + .write = &vfd_write, + .release = &display_close +}; + +enum { + IMON_DISPLAY_TYPE_AUTO = 0, + IMON_DISPLAY_TYPE_VFD = 1, + IMON_DISPLAY_TYPE_LCD = 2, + IMON_DISPLAY_TYPE_VGA = 3, + IMON_DISPLAY_TYPE_NONE = 4, +}; + +enum { + IMON_IR_PROTOCOL_IMON = 0, + IMON_IR_PROTOCOL_MCE = 1, + IMON_IR_PROTOCOL_IMON_NOPAD = 2, +}; +/* + * USB Device ID for iMON USB Control Boards + * + * The Windows drivers contain 6 different inf files, more or less one for + * each new device until the 0x0034-0x0046 devices, which all use the same + * driver. Some of the devices in the 34-46 range haven't been definitively + * identified yet. Early devices have either a TriGem Computer, Inc. or a + * Samsung vendor ID (0x0aa8 and 0x04e8 respectively), while all later + * devices use the SoundGraph vendor ID (0x15c2). + */ +static struct usb_device_id imon_usb_id_table[] = { + /* TriGem iMON (IR only) -- TG_iMON.inf */ + { USB_DEVICE(0x0aa8, 0x8001) }, + + /* SoundGraph iMON (IR only) -- sg_imon.inf */ + { USB_DEVICE(0x04e8, 0xff30) }, + + /* SoundGraph iMON VFD (IR & VFD) -- iMON_VFD.inf */ + { USB_DEVICE(0x0aa8, 0xffda) }, + + /* SoundGraph iMON SS (IR & VFD) -- iMON_SS.inf */ + { USB_DEVICE(0x15c2, 0xffda) }, + + /* + * Several devices with this same device ID, all use iMON_PAD.inf + * SoundGraph iMON PAD (IR & VFD) + * SoundGraph iMON PAD (IR & LCD) + * SoundGraph iMON Knob (IR only) + */ + /* SoundGraph iMON PAD (IR & VFD/LCD), iMON Knob */ + { USB_DEVICE(0x15c2, 0xffdc) }, + + /* + * Newer devices, all driven by the latest iMON Windows driver, full + * list of device IDs extracted via 'strings Setup/data1.hdr |grep 15c2' + * Need user input to fill in details on unknown devices. + */ + /* SoundGraph iMON OEM Touch LCD (IR & 7" VGA LCD) */ + { USB_DEVICE(0x15c2, 0x0034) }, + /* SoundGraph iMON OEM Touch LCD (IR & 4.3" VGA LCD) */ + { USB_DEVICE(0x15c2, 0x0035) }, + /* SoundGraph iMON OEM VFD (IR & VFD) */ + { USB_DEVICE(0x15c2, 0x0036) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x0037) }, + /* SoundGraph iMON OEM LCD (IR & LCD) */ + { USB_DEVICE(0x15c2, 0x0038) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x0039) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x003a) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x003b) }, + /* SoundGraph iMON OEM Inside (IR only) */ + { USB_DEVICE(0x15c2, 0x003c) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x003d) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x003e) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x003f) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x0040) }, + /* SoundGraph iMON MINI (IR only) */ + { USB_DEVICE(0x15c2, 0x0041) }, + /* Antec Veris Multimedia Station EZ External (IR only) */ + { USB_DEVICE(0x15c2, 0x0042) }, + /* Antec Veris Multimedia Station Basic Internal (IR only) */ + { USB_DEVICE(0x15c2, 0x0043) }, + /* Antec Veris Multimedia Station Elite (IR & VFD) */ + { USB_DEVICE(0x15c2, 0x0044) }, + /* Antec Veris Multimedia Station Premiere (IR & LCD) */ + { USB_DEVICE(0x15c2, 0x0045) }, + /* device specifics unknown */ + { USB_DEVICE(0x15c2, 0x0046) }, + {} +}; + +/* Some iMON VFD models requires a 6th packet for VFD writes */ +static struct usb_device_id vfd_proto_6p_list[] = { + { USB_DEVICE(0x15c2, 0xffda) }, + { USB_DEVICE(0x15c2, 0xffdc) }, + { USB_DEVICE(0x15c2, 0x0036) }, + { USB_DEVICE(0x15c2, 0x0044) }, + {} +}; + +/* newer iMON models use control endpoints */ +static struct usb_device_id ctl_ep_device_list[] = { + { USB_DEVICE(0x15c2, 0x0034) }, + { USB_DEVICE(0x15c2, 0x0035) }, + { USB_DEVICE(0x15c2, 0x0036) }, + { USB_DEVICE(0x15c2, 0x0037) }, + { USB_DEVICE(0x15c2, 0x0038) }, + { USB_DEVICE(0x15c2, 0x0039) }, + { USB_DEVICE(0x15c2, 0x003a) }, + { USB_DEVICE(0x15c2, 0x003b) }, + { USB_DEVICE(0x15c2, 0x003c) }, + { USB_DEVICE(0x15c2, 0x003d) }, + { USB_DEVICE(0x15c2, 0x003e) }, + { USB_DEVICE(0x15c2, 0x003f) }, + { USB_DEVICE(0x15c2, 0x0040) }, + { USB_DEVICE(0x15c2, 0x0041) }, + { USB_DEVICE(0x15c2, 0x0042) }, + { USB_DEVICE(0x15c2, 0x0043) }, + { USB_DEVICE(0x15c2, 0x0044) }, + { USB_DEVICE(0x15c2, 0x0045) }, + { USB_DEVICE(0x15c2, 0x0046) }, + {} +}; + +/* iMON LCD models use a different write op */ +static struct usb_device_id lcd_device_list[] = { + { USB_DEVICE(0x15c2, 0xffdc) }, + { USB_DEVICE(0x15c2, 0x0038) }, + { USB_DEVICE(0x15c2, 0x0045) }, + {} +}; + +/* iMON devices with front panel buttons or touchscreen need a larger buffer */ +static struct usb_device_id large_buffer_list[] = { + { USB_DEVICE(0x15c2, 0x0034) }, + { USB_DEVICE(0x15c2, 0x0035) }, + { USB_DEVICE(0x15c2, 0x0038) }, + { USB_DEVICE(0x15c2, 0x0045) }, +}; + +/* Newer iMON models decode the signal onboard */ +static struct usb_device_id ir_onboard_decode_list[] = { + { USB_DEVICE(0x15c2, 0xffdc) }, + { USB_DEVICE(0x15c2, 0x0034) }, + { USB_DEVICE(0x15c2, 0x0035) }, + { USB_DEVICE(0x15c2, 0x0036) }, + { USB_DEVICE(0x15c2, 0x0037) }, + { USB_DEVICE(0x15c2, 0x0038) }, + { USB_DEVICE(0x15c2, 0x0039) }, + { USB_DEVICE(0x15c2, 0x003a) }, + { USB_DEVICE(0x15c2, 0x003b) }, + { USB_DEVICE(0x15c2, 0x003c) }, + { USB_DEVICE(0x15c2, 0x003d) }, + { USB_DEVICE(0x15c2, 0x003e) }, + { USB_DEVICE(0x15c2, 0x003f) }, + { USB_DEVICE(0x15c2, 0x0040) }, + { USB_DEVICE(0x15c2, 0x0041) }, + { USB_DEVICE(0x15c2, 0x0042) }, + { USB_DEVICE(0x15c2, 0x0043) }, + { USB_DEVICE(0x15c2, 0x0044) }, + { USB_DEVICE(0x15c2, 0x0045) }, + { USB_DEVICE(0x15c2, 0x0046) }, + {} +}; + +/* Some iMON devices have no lcd/vfd, don't set one up */ +static struct usb_device_id ir_only_list[] = { + { USB_DEVICE(0x0aa8, 0x8001) }, + { USB_DEVICE(0x04e8, 0xff30) }, + /* the first imon lcd and the knob share this device id. :\ */ + /*{ USB_DEVICE(0x15c2, 0xffdc) },*/ + { USB_DEVICE(0x15c2, 0x003c) }, + { USB_DEVICE(0x15c2, 0x0041) }, + { USB_DEVICE(0x15c2, 0x0042) }, + { USB_DEVICE(0x15c2, 0x0043) }, + {} +}; + +/* iMON devices with VGA touchscreens */ +static struct usb_device_id imon_touchscreen_list[] = { + { USB_DEVICE(0x15c2, 0x0034) }, + { USB_DEVICE(0x15c2, 0x0035) }, + {} +}; + +/* USB Device data */ +static struct usb_driver imon_driver = { + LIRC_THIS_MODULE(.owner = THIS_MODULE) + .name = MOD_NAME, + .probe = imon_probe, + .disconnect = imon_disconnect, + .suspend = imon_suspend, + .resume = imon_resume, + .id_table = imon_usb_id_table, +}; + +static struct usb_class_driver imon_class = { + .name = DEVICE_NAME, + .fops = &display_fops, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) + .mode = DEVFS_MODE, +#endif + .minor_base = DISPLAY_MINOR_BASE, +}; + +/* to prevent races between open() and disconnect(), probing, etc */ +static DEFINE_MUTEX(driver_lock); + +static int debug; + +/* lcd, vfd, vga or none? should be auto-detected, but can be overridden... */ +static int display_type; + +/* IR protocol: native iMON, Windows MCE (RC-6), or iMON w/o PAD stabilize */ +static int ir_protocol; + +/* + * In certain use cases, mouse mode isn't really helpful, and could actually + * cause confusion, so allow disabling it when the IR device is open. + */ +static int nomouse; + +/* threshold at which a pad push registers as an arrow key in kbd mode */ +static int pad_thresh; + + +/*** M O D U L E C O D E ***/ + +MODULE_AUTHOR(MOD_AUTHOR); +MODULE_DESCRIPTION(MOD_DESC); +MODULE_VERSION(MOD_VERSION); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(usb, imon_usb_id_table); +module_param(debug, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes(default: no)"); +module_param(display_type, int, S_IRUGO); +MODULE_PARM_DESC(display_type, "Type of attached display. 0=autodetect, " + "1=vfd, 2=lcd, 3=vga, 4=none (default: autodetect)"); +module_param(ir_protocol, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(ir_protocol, "Which IR protocol to use. 0=native iMON, " + "1=Windows Media Center Ed. (RC-6), 2=iMON w/o PAD stabilize " + "(default: native iMON)"); +module_param(nomouse, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(nomouse, "Disable mouse input device mode when IR device is " + "open. 0=don't disable, 1=disable. (default: don't disable)"); +module_param(pad_thresh, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(pad_thresh, "Threshold at which a pad push registers as an " + "arrow key in kbd mode (default: 28)"); + +static void free_imon_context(struct imon_context *context) +{ + usb_free_urb(context->tx_urb); + usb_free_urb(context->rx_urb_intf0); + usb_free_urb(context->rx_urb_intf1); + lirc_buffer_free(context->driver->rbuf); + kfree(context->driver->rbuf); + kfree(context->driver); + kfree(context); + + dprintk("%s: iMON context freed\n", __func__); +} + +static void deregister_from_lirc(struct imon_context *context) +{ + int retval; + int minor = context->driver->minor; + + retval = lirc_unregister_driver(minor); + if (retval) + err("%s: unable to deregister from lirc(%d)", + __func__, retval); + else + printk(KERN_INFO MOD_NAME ": Deregistered iMON driver " + "(minor:%d)\n", minor); + +} + +/** + * Called when the Display device (e.g. /dev/lcd0) + * is opened by the application. + */ +static int display_open(struct inode *inode, struct file *file) +{ + struct usb_interface *interface; + struct imon_context *context = NULL; + int subminor; + int retval = 0; + + /* prevent races with disconnect */ + mutex_lock(&driver_lock); + + subminor = iminor(inode); + interface = usb_find_interface(&imon_driver, subminor); + if (!interface) { + err("%s: could not find interface for minor %d", + __func__, subminor); + retval = -ENODEV; + goto exit; + } + context = usb_get_intfdata(interface); + + if (!context) { + err("%s: no context found for minor %d", + __func__, subminor); + retval = -ENODEV; + goto exit; + } + + mutex_lock(&context->lock); + + if (!context->display_supported) { + err("%s: display not supported by device", __func__); + retval = -ENODEV; + } else if (context->display_isopen) { + err("%s: display port is already open", __func__); + retval = -EBUSY; + } else { + MOD_INC_USE_COUNT; + context->display_isopen = 1; + file->private_data = context; + printk(KERN_INFO "display port opened\n"); + } + + mutex_unlock(&context->lock); + +exit: + mutex_unlock(&driver_lock); + return retval; +} + +/** + * Called when the display device (e.g. /dev/lcd0) + * is closed by the application. + */ +static int display_close(struct inode *inode, struct file *file) +{ + struct imon_context *context = NULL; + int retval = 0; + + context = (struct imon_context *)file->private_data; + + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + mutex_lock(&context->lock); + + if (!context->display_supported) { + err("%s: display not supported by device", __func__); + retval = -ENODEV; + } else if (!context->display_isopen) { + err("%s: display is not open", __func__); + retval = -EIO; + } else { + context->display_isopen = 0; + MOD_DEC_USE_COUNT; + printk(KERN_INFO "display port closed\n"); + if (!context->dev_present_intf0 && !context->ir_isopen) { + /* + * Device disconnected before close and IR port is not + * open. If IR port is open, context will be deleted by + * ir_close. + */ + mutex_unlock(&context->lock); + free_imon_context(context); + return retval; + } + } + + mutex_unlock(&context->lock); + return retval; +} + +/** + * Sends a packet to the device + */ +static int send_packet(struct imon_context *context) +{ + unsigned int pipe; + int interval = 0; + int retval = 0; + struct usb_ctrlrequest *control_req = NULL; + + /* Check if we need to use control or interrupt urb */ + if (!context->tx_control) { + pipe = usb_sndintpipe(context->usbdev_intf0, + context->tx_endpoint->bEndpointAddress); + interval = context->tx_endpoint->bInterval; + + usb_fill_int_urb(context->tx_urb, context->usbdev_intf0, pipe, + context->usb_tx_buf, + sizeof(context->usb_tx_buf), + usb_tx_callback, context, interval); + + context->tx_urb->actual_length = 0; + } else { + /* fill request into kmalloc'ed space: */ + control_req = kmalloc(sizeof(struct usb_ctrlrequest), + GFP_KERNEL); + if (control_req == NULL) + return -ENOMEM; + + /* setup packet is '21 09 0200 0001 0008' */ + control_req->bRequestType = 0x21; + control_req->bRequest = 0x09; + control_req->wValue = cpu_to_le16(0x0200); + control_req->wIndex = cpu_to_le16(0x0001); + control_req->wLength = cpu_to_le16(0x0008); + + /* control pipe is endpoint 0x00 */ + pipe = usb_sndctrlpipe(context->usbdev_intf0, 0); + + /* build the control urb */ + usb_fill_control_urb(context->tx_urb, context->usbdev_intf0, pipe, + (unsigned char *)control_req, + context->usb_tx_buf, + sizeof(context->usb_tx_buf), + usb_tx_callback, context); + context->tx_urb->actual_length = 0; + } + + init_completion(&context->tx.finished); + atomic_set(&(context->tx.busy), 1); + + retval = usb_submit_urb(context->tx_urb, GFP_KERNEL); + if (retval) { + atomic_set(&(context->tx.busy), 0); + err("%s: error submitting urb(%d)", __func__, retval); + } else { + /* Wait for transmission to complete (or abort) */ + mutex_unlock(&context->lock); + retval = wait_for_completion_interruptible( + &context->tx.finished); + if (retval) + err("%s: task interrupted", __func__); + mutex_lock(&context->lock); + + retval = context->tx.status; + if (retval) + err("%s: packet tx failed (%d)", __func__, retval); + } + + kfree(control_req); + + return retval; +} + +/** + * Sends an associate packet to the iMON 2.4G. + * + * This might not be such a good idea, since it has an id collision with + * some versions of the "IR & VFD" combo. The only way to determine if it + * is an RF version is to look at the product description string. (Which + * we currently do not fetch). + */ +static int send_associate_24g(struct imon_context *context) +{ + int retval; + const unsigned char packet[8] = { 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20 }; + + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + if (!context->dev_present_intf0) { + err("%s: no iMON device present", __func__); + return -ENODEV; + } + + memcpy(context->usb_tx_buf, packet, sizeof(packet)); + retval = send_packet(context); + + return retval; +} + +/** + * Sends packets to setup and show clock on iMON display + * + * Arguments: year - last 2 digits of year, month - 1..12, + * day - 1..31, dow - day of the week (0-Sun...6-Sat), + * hour - 0..23, minute - 0..59, second - 0..59 + */ +static int send_set_imon_clock(struct imon_context *context, + unsigned int year, unsigned int month, + unsigned int day, unsigned int dow, + unsigned int hour, unsigned int minute, + unsigned int second) +{ + unsigned char clock_enable_pkt[IMON_CLOCK_ENABLE_PACKETS][8]; + int retval = 0; + int i; + + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + switch(context->display_type) { + case IMON_DISPLAY_TYPE_LCD: + clock_enable_pkt[0][0] = 0x80; + clock_enable_pkt[0][1] = year; + clock_enable_pkt[0][2] = month-1; + clock_enable_pkt[0][3] = day; + clock_enable_pkt[0][4] = hour; + clock_enable_pkt[0][5] = minute; + clock_enable_pkt[0][6] = second; + + clock_enable_pkt[1][0] = 0x80; + clock_enable_pkt[1][1] = 0; + clock_enable_pkt[1][2] = 0; + clock_enable_pkt[1][3] = 0; + clock_enable_pkt[1][4] = 0; + clock_enable_pkt[1][5] = 0; + clock_enable_pkt[1][6] = 0; + + if (context->ffdc_dev) { + clock_enable_pkt[0][7] = 0x50; + clock_enable_pkt[1][7] = 0x51; + } else { + clock_enable_pkt[0][7] = 0x88; + clock_enable_pkt[1][7] = 0x8a; + } + + break; + + case IMON_DISPLAY_TYPE_VFD: + clock_enable_pkt[0][0] = year; + clock_enable_pkt[0][1] = month-1; + clock_enable_pkt[0][2] = day; + clock_enable_pkt[0][3] = dow; + clock_enable_pkt[0][4] = hour; + clock_enable_pkt[0][5] = minute; + clock_enable_pkt[0][6] = second; + clock_enable_pkt[0][7] = 0x40; + + clock_enable_pkt[1][0] = 0; + clock_enable_pkt[1][1] = 0; + clock_enable_pkt[1][2] = 1; + clock_enable_pkt[1][3] = 0; + clock_enable_pkt[1][4] = 0; + clock_enable_pkt[1][5] = 0; + clock_enable_pkt[1][6] = 0; + clock_enable_pkt[1][7] = 0x42; + + break; + + default: + return -ENODEV; + } + + + for (i = 0; i < IMON_CLOCK_ENABLE_PACKETS; i++) { + memcpy(context->usb_tx_buf, clock_enable_pkt[i], 8); + retval = send_packet(context); + if (retval) { + err("%s: send_packet failed for packet %d", + __func__, i); + break; + } + } + + return retval; + +} + +/** + * These are the sysfs functions to handle the association on the iMON 2.4G LT. + */ +static ssize_t show_associate_remote(struct device *d, + struct device_attribute *attr, + char *buf) +{ + struct imon_context *context = dev_get_drvdata(d); + + if (!context) + return -ENODEV; + + mutex_lock(&context->lock); + if (context->ir_isassociating) { + strcpy(buf, "associating\n"); + } else if (context->ir_isopen) { + strcpy(buf, "open\n"); + } else { + strcpy(buf, "closed\n"); + } + printk(KERN_INFO "Visit http://www.lirc.org/html/imon-24g.html for " + "instructions on how to associate your iMON 2.4G DT/LT " + "remote\n"); + mutex_unlock(&context->lock); + return strlen(buf); +} + +static ssize_t store_associate_remote(struct device *d, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct imon_context *context; + + context = dev_get_drvdata(d); + + if (!context) + return -ENODEV; + + mutex_lock(&context->lock); + if (!context->ir_isopen) { + mutex_unlock(&context->lock); + return -EINVAL; + } + + if (context->ir_isopen) { + context->ir_isassociating = 1; + send_associate_24g(context); + } + mutex_unlock(&context->lock); + + return count; +} + +/** + * sysfs functions to control internal imon clock + */ +static ssize_t show_imon_clock(struct device *d, + struct device_attribute *attr, char *buf) +{ + struct imon_context *context = dev_get_drvdata(d); + size_t len; + + if (!context) + return -ENODEV; + + mutex_lock(&context->lock); + + if (!context->display_supported) { + len = snprintf(buf, PAGE_SIZE, "Not supported."); + } else { + len = snprintf(buf, PAGE_SIZE, + "To set the clock on your iMON display:\n" + "# date \"+%%y %%m %%d %%w %%H %%M %%S\" > imon_clock\n" + "%s", context->display_isopen ? + "\nNOTE: imon device must be closed\n" : ""); + } + + mutex_unlock(&context->lock); + + return len; +} + +static ssize_t store_imon_clock(struct device *d, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct imon_context *context = dev_get_drvdata(d); + ssize_t retval; + unsigned int year, month, day, dow, hour, minute, second; + + if (!context) + return -ENODEV; + + mutex_lock(&context->lock); + + if (!context->display_supported) { + retval = -ENODEV; + goto exit; + } else if (context->display_isopen) { + retval = -EBUSY; + goto exit; + } + + if (sscanf(buf, "%u %u %u %u %u %u %u", &year, &month, &day, &dow, + &hour, &minute, &second) != 7) { + retval = -EINVAL; + goto exit; + } + + if ((month < 1 || month > 12) || + (day < 1 || day > 31) || (dow > 6) || + (hour > 23) || (minute > 59) || (second > 59)) { + retval = -EINVAL; + goto exit; + } + + retval = send_set_imon_clock(context, year, month, day, dow, + hour, minute, second); + if (retval) + goto exit; + + retval = count; +exit: + mutex_unlock(&context->lock); + + return retval; +} + + +static DEVICE_ATTR(imon_clock, S_IWUSR | S_IRUGO, show_imon_clock, + store_imon_clock); + +static DEVICE_ATTR(associate_remote, S_IWUSR | S_IRUGO, show_associate_remote, + store_associate_remote); + +static struct attribute *imon_display_sysfs_entries[] = { + &dev_attr_imon_clock.attr, + NULL +}; + +static struct attribute_group imon_display_attribute_group = { + .attrs = imon_display_sysfs_entries +}; + +static struct attribute *imon_rf_sysfs_entries[] = { + &dev_attr_associate_remote.attr, + NULL +}; + +static struct attribute_group imon_rf_attribute_group = { + .attrs = imon_rf_sysfs_entries +}; + +/** + * Writes data to the VFD. The iMON VFD is 2x16 characters + * and requires data in 5 consecutive USB interrupt packets, + * each packet but the last carrying 7 bytes. + * + * I don't know if the VFD board supports features such as + * scrolling, clearing rows, blanking, etc. so at + * the caller must provide a full screen of data. If fewer + * than 32 bytes are provided spaces will be appended to + * generate a full screen. + */ +static ssize_t vfd_write(struct file *file, const char *buf, + size_t n_bytes, loff_t *pos) +{ + int i; + int offset; + int seq; + int retval = 0; + struct imon_context *context; + const unsigned char vfd_packet6[] = { + 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF }; + + context = (struct imon_context *)file->private_data; + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + mutex_lock(&context->lock); + + if (!context->dev_present_intf0) { + err("%s: no iMON device present", __func__); + retval = -ENODEV; + goto exit; + } + + if (n_bytes <= 0 || n_bytes > 32) { + err("%s: invalid payload size", __func__); + retval = -EINVAL; + goto exit; + } + + if (copy_from_user(context->tx.data_buf, buf, n_bytes)) { + retval = -EFAULT; + goto exit; + } + + /* Pad with spaces */ + for (i = n_bytes; i < 32; ++i) + context->tx.data_buf[i] = ' '; + + for (i = 32; i < 35; ++i) + context->tx.data_buf[i] = 0xFF; + + offset = 0; + seq = 0; + + do { + memcpy(context->usb_tx_buf, context->tx.data_buf + offset, 7); + context->usb_tx_buf[7] = (unsigned char) seq; + + retval = send_packet(context); + if (retval) { + err("%s: send packet failed for packet #%d", + __func__, seq/2); + goto exit; + } else { + seq += 2; + offset += 7; + } + + } while (offset < 35); + + if (context->vfd_proto_6p) { + /* Send packet #6 */ + memcpy(context->usb_tx_buf, &vfd_packet6, sizeof(vfd_packet6)); + context->usb_tx_buf[7] = (unsigned char) seq; + retval = send_packet(context); + if (retval) + err("%s: send packet failed for packet #%d", + __func__, seq/2); + } + +exit: + mutex_unlock(&context->lock); + + return (!retval) ? n_bytes : retval; +} + +/** + * Writes data to the LCD. The iMON OEM LCD screen excepts 8-byte + * packets. We accept data as 16 hexadecimal digits, followed by a + * newline (to make it easy to drive the device from a command-line + * -- even though the actual binary data is a bit complicated). + * + * The device itself is not a "traditional" text-mode display. It's + * actually a 16x96 pixel bitmap display. That means if you want to + * display text, you've got to have your own "font" and translate the + * text into bitmaps for display. This is really flexible (you can + * display whatever diacritics you need, and so on), but it's also + * a lot more complicated than most LCDs... + */ +static ssize_t lcd_write(struct file *file, const char *buf, + size_t n_bytes, loff_t *pos) +{ + int retval = 0; + struct imon_context *context; + + context = (struct imon_context *)file->private_data; + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + mutex_lock(&context->lock); + + if (!context->display_supported) { + err("%s: no iMON display present", __func__); + retval = -ENODEV; + goto exit; + } + + if (n_bytes != 8) { + err("%s: invalid payload size: %d (expecting 8)", + __func__, (int) n_bytes); + retval = -EINVAL; + goto exit; + } + + if (copy_from_user(context->usb_tx_buf, buf, 8)) { + retval = -EFAULT; + goto exit; + } + + retval = send_packet(context); + if (retval) { + err("%s: send packet failed!", __func__); + goto exit; + } else { + dprintk("%s: write %d bytes to LCD\n", __func__, (int) n_bytes); + } +exit: + mutex_unlock(&context->lock); + return (!retval) ? n_bytes : retval; +} + +/** + * Callback function for USB core API: transmit data + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_tx_callback(struct urb *urb, struct pt_regs *regs) +#else +static void usb_tx_callback(struct urb *urb) +#endif +{ + struct imon_context *context; + + if (!urb) + return; + context = (struct imon_context *)urb->context; + if (!context) + return; + + context->tx.status = urb->status; + + /* notify waiters that write has finished */ + atomic_set(&context->tx.busy, 0); + complete(&context->tx.finished); + + return; +} + +/** + * iMON IR receivers support two different signal sets -- those used by + * the iMON remotes, and those used by the Windows MCE remotes (which is + * really just RC-6), but only one or the other at a time, as the signals + * are decoded onboard the receiver. + */ +static void imon_set_ir_protocol(struct imon_context *context) +{ + int retval; + unsigned char ir_proto_packet[] = + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86 }; + + switch (ir_protocol) { + case IMON_IR_PROTOCOL_MCE: + /* MCE proto not supported on devices without tx control */ + if (!context->tx_control) { + printk(KERN_INFO "%s: MCE IR protocol not supported on " + "this device, using iMON protocol\n", __func__); + context->ir_protocol = IMON_IR_PROTOCOL_IMON; + return; + } + dprintk("Configuring IR receiver for MCE protocol\n"); + ir_proto_packet[0] = 0x01; + context->ir_protocol = IMON_IR_PROTOCOL_MCE; + break; + case IMON_IR_PROTOCOL_IMON: + dprintk("Configuring IR receiver for iMON protocol\n"); + /* ir_proto_packet[0] = 0x00; // already the default */ + context->ir_protocol = IMON_IR_PROTOCOL_IMON; + break; + case IMON_IR_PROTOCOL_IMON_NOPAD: + dprintk("Configuring IR receiver for iMON protocol without " + "PAD stabilize function enabled\n"); + /* ir_proto_packet[0] = 0x00; // already the default */ + context->ir_protocol = IMON_IR_PROTOCOL_IMON_NOPAD; + break; + default: + printk(KERN_INFO "%s: unknown IR protocol specified, will " + "just default to iMON protocol\n", __func__); + context->ir_protocol = IMON_IR_PROTOCOL_IMON; + break; + } + memcpy(context->usb_tx_buf, &ir_proto_packet, + sizeof(ir_proto_packet)); + retval = send_packet(context); + if (retval) + printk(KERN_INFO "%s: failed to set remote type\n", __func__); +} + + +/** + * Called by lirc_dev when the application opens /dev/lirc + */ +static int ir_open(void *data) +{ + int retval = 0; + struct imon_context *context; + + /* prevent races with disconnect */ + mutex_lock(&driver_lock); + + context = (struct imon_context *)data; + + /* initial IR protocol decode variables */ + context->rx.count = 0; + context->rx.initial_space = 1; + context->rx.prev_bit = 0; + + /* set new IR protocol if it has changed since init or last open */ + if (ir_protocol != context->ir_protocol) + imon_set_ir_protocol(context); + + context->ir_isopen = 1; + printk(KERN_INFO MOD_NAME ": IR port opened\n"); + + mutex_unlock(&driver_lock); + return retval; +} + +/** + * Called by lirc_dev when the application closes /dev/lirc + */ +static void ir_close(void *data) +{ + struct imon_context *context; + + context = (struct imon_context *)data; + if (!context) { + err("%s: no context for device", __func__); + return; + } + + mutex_lock(&context->lock); + + context->ir_isopen = 0; + context->ir_isassociating = 0; + MOD_DEC_USE_COUNT; + printk(KERN_INFO MOD_NAME ": IR port closed\n"); + + if (!context->dev_present_intf0) { + /* + * Device disconnected while IR port was still open. Driver + * was not deregistered at disconnect time, so do it now. + */ + deregister_from_lirc(context); + + if (!context->display_isopen) { + mutex_unlock(&context->lock); + free_imon_context(context); + return; + } + /* + * If display port is open, context will be deleted by + * display_close + */ + } + + mutex_unlock(&context->lock); + return; +} + +/** + * Convert bit count to time duration (in us) and submit + * the value to lirc_dev. + */ +static void submit_data(struct imon_context *context) +{ + unsigned char buf[4]; + int value = context->rx.count; + int i; + + dprintk("submitting data to LIRC\n"); + + value *= BIT_DURATION; + value &= PULSE_MASK; + if (context->rx.prev_bit) + value |= PULSE_BIT; + + for (i = 0; i < 4; ++i) + buf[i] = value>>(i*8); + + lirc_buffer_write(context->driver->rbuf, buf); + wake_up(&context->driver->rbuf->wait_poll); + return; +} + +static inline int tv2int(const struct timeval *a, const struct timeval *b) +{ + int usecs = 0; + int sec = 0; + + if (b->tv_usec > a->tv_usec) { + usecs = 1000000; + sec--; + } + + usecs += a->tv_usec - b->tv_usec; + + sec += a->tv_sec - b->tv_sec; + sec *= 1000; + usecs /= 1000; + sec += usecs; + + if (sec < 0) + sec = 1000; + + return sec; +} + +/** + * The directional pad behaves a bit differently, depending on whether this is + * one of the older ffdc devices or a newer device. Newer devices appear to + * have a higher resolution matrix for more precise mouse movement, but it + * makes things overly sensitive in keyboard mode, so we do some interesting + * contortions to make it less touchy. Older devices run through the same + * routine with shorter timeout and a smaller threshold. + */ +static int stabilize(int a, int b, u16 timeout, u16 threshold) +{ + struct timeval ct; + static struct timeval prev_time = {0, 0}; + static struct timeval hit_time = {0, 0}; + static int x, y, prev_result, hits; + int result = 0; + int msec, msec_hit; + + do_gettimeofday(&ct); + msec = tv2int(&ct, &prev_time); + msec_hit = tv2int(&ct, &hit_time); + + if (msec > 100) { + x = 0; + y = 0; + hits = 0; + } + + x += a; + y += b; + + prev_time = ct; + + if (abs(x) > threshold || abs(y) > threshold) { + if (abs(y) > abs(x)) + result = (y > 0) ? 0x7F : 0x80; + else + result = (x > 0) ? 0x7F00 : 0x8000; + + x = 0; + y = 0; + + if (result == prev_result) { + hits++; + + if (hits > 3) { + switch (result) { + case 0x7F: + y = 17 * threshold / 30; + break; + case 0x80: + y -= 17 * threshold / 30; + break; + case 0x7F00: + x = 17 * threshold / 30; + break; + case 0x8000: + x -= 17 * threshold / 30; + break; + } + } + + if (hits == 2 && msec_hit < timeout) { + result = 0; + hits = 1; + } + } else { + prev_result = result; + hits = 1; + hit_time = ct; + } + } + + return result; +} + +/** + * Process the incoming packet + */ +static void imon_incoming_packet(struct imon_context *context, + struct urb *urb, int intf) +{ + int len = urb->actual_length; + unsigned char *buf = urb->transfer_buffer; + char rel_x = 0x00, rel_y = 0x00; + int octet, bit; + unsigned char mask; + int i, chunk_num; + int ts_input = 0; + int dir = 0; + u16 timeout, threshold; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + int mouse_input; + int right_shift = 1; + struct input_dev *mouse = NULL; + struct input_dev *touch = NULL; + const unsigned char toggle_button1[] = { 0x29, 0x91, 0x15, 0xb7 }; + const unsigned char toggle_button2[] = { 0x29, 0x91, 0x35, 0xb7 }; + const unsigned char ch_up[] = { 0x28, 0x93, 0x95, 0xb7 }; + const unsigned char ch_down[] = { 0x28, 0x87, 0x95, 0xb7 }; +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + mouse = context->mouse; + if (context->display_type == IMON_DISPLAY_TYPE_VGA) + touch = context->touch; + + /* keyboard/mouse mode toggle button */ + if (memcmp(buf, toggle_button1, 4) == 0 || + memcmp(buf, toggle_button2, 4) == 0) { + if (!nomouse) { + context->pad_mouse = ~(context->pad_mouse) & 0x1; + dprintk("toggling to %s mode\n", + context->pad_mouse ? "mouse" : "keyboard"); + } else { + context->pad_mouse = 0; + dprintk("mouse mode was disabled by modparam\n"); + } + return; + } + + /* send touchscreen events through input subsystem if touchpad data */ + if (context->display_type == IMON_DISPLAY_TYPE_VGA && len == 8 && + buf[7] == 0x86) { + if (touch == NULL) { + printk(KERN_WARNING "%s: touchscreen input device is " + "NULL!\n", __func__); + return; + } + mod_timer(&context->timer, jiffies + TOUCH_TIMEOUT); + context->touch_x = (buf[0] << 4) | (buf[1] >> 4); + context->touch_y = 0xfff - ((buf[2] << 4) | (buf[1] & 0xf)); + input_report_abs(touch, ABS_X, context->touch_x); + input_report_abs(touch, ABS_Y, context->touch_y); + input_report_key(touch, BTN_TOUCH, 0x01); + input_sync(touch); + ts_input = 1; + + /* send mouse events through input subsystem in mouse mode */ + } else if (context->pad_mouse || !context->ir_isopen) { + /* newer iMON device PAD or mouse button */ + if (!context->ffdc_dev && (buf[0] & 0x01) && len == 5) { + mouse_input = 1; + rel_x = buf[2]; + rel_y = buf[3]; + right_shift = 1; + /* 0xffdc iMON PAD or mouse button input */ + } else if (context->ffdc_dev && (buf[0] & 0x40) && + !((buf[1] & 0x01) || ((buf[1] >> 2) & 0x01))) { + mouse_input = 1; + rel_x = (buf[1] & 0x08) | (buf[1] & 0x10) >> 2 | + (buf[1] & 0x20) >> 4 | (buf[1] & 0x40) >> 6; + if (buf[0] & 0x02) + rel_x |= ~0x0f; + rel_x = rel_x + rel_x / 2; + rel_y = (buf[2] & 0x08) | (buf[2] & 0x10) >> 2 | + (buf[2] & 0x20) >> 4 | (buf[2] & 0x40) >> 6; + if (buf[0] & 0x01) + rel_y |= ~0x0f; + rel_y = rel_y + rel_y / 2; + right_shift = 2; + /* some ffdc devices decode mouse buttons differently... */ + } else if (context->ffdc_dev && (buf[0] == 0x68)) { + mouse_input = 1; + right_shift = 2; + /* ch+/- buttons, which we use for an emulated scroll wheel */ + } else if (!memcmp(buf, ch_up, 4)) { + mouse_input = 1; + dir = 1; + } else if (!memcmp(buf, ch_down, 4)) { + mouse_input = 1; + dir = -1; + } else + mouse_input = 0; + + if (mouse_input) { + if (mouse == NULL) { + printk(KERN_WARNING "%s: mouse input device " + "is NULL!\n", __func__); + return; + } + dprintk("sending mouse data via input subsystem\n"); + + if (dir) { + input_report_rel(mouse, REL_WHEEL, dir); + } else if (rel_x || rel_y) { + input_report_rel(mouse, REL_X, rel_x); + input_report_rel(mouse, REL_Y, rel_y); + } else { + input_report_key(mouse, BTN_LEFT, buf[1] & 0x1); + input_report_key(mouse, BTN_RIGHT, + buf[1] >> right_shift & 0x1); + } + input_sync(mouse); + return; + } + } +#endif + + /* + * at this point, mouse and touchscreen input has been handled, so + * anything else goes to lirc -- bail out if no listening IR client + */ + if (!context->ir_isopen) + return; + + /* + * we need to add some special handling for + * the imon's IR mouse events + */ + if ((len == 5) && (buf[0] == 0x01) && (buf[4] == 0x00)) { + /* first, pad to 8 bytes so it conforms with everything else */ + buf[5] = buf[6] = buf[7] = 0; + len = 8; + timeout = 500; /* in msecs */ + /* (2*threshold) x (2*threshold) square */ + threshold = pad_thresh ? pad_thresh : 28; + rel_x = buf[2]; + rel_y = buf[3]; + + /* + * the imon directional pad functions more like a touchpad. + * Bytes 3 & 4 contain a position coordinate (x,y), with each + * component ranging from -14 to 14. Since this doesn't + * cooperate well with the way lirc works (it would appear to + * lirc as more than 100 different buttons) we need to map it + * to 4 discrete values. Also, when you get too close to + * diagonals, it has a tendancy to jump back and forth, so lets + * try to ignore when they get too close + */ + if (context->ir_protocol == IMON_IR_PROTOCOL_IMON) { + if ((buf[1] == 0) && ((rel_x != 0) || (rel_y != 0))) { + dir = stabilize((int)rel_x, (int)rel_y, + timeout, threshold); + if (!dir) + return; + buf[2] = dir & 0xFF; + buf[3] = (dir >> 8) & 0xFF; + } + } else { + if (abs(rel_y) > abs(rel_x)) { + buf[2] = (rel_y > 0) ? 0x7F : 0x80; + buf[3] = 0; + } else { + buf[2] = 0; + buf[3] = (rel_x > 0) ? 0x7F : 0x80; + } + } + + } else if ((len == 8) && (buf[0] & 0x40) && + !(buf[1] & 0x01 || buf[1] >> 2 & 0x01)) { + /* + * Handle on-board decoded pad events for e.g. older + * VFD/iMON-Pad (15c2:ffdc). The remote generates various codes + * from 0x68nnnnB7 to 0x6AnnnnB7, the left mouse button + * generates 0x688301b7 and the right one 0x688481b7. All other + * keys generate 0x2nnnnnnn. Length has been padded to 8 + * already, position coordinate is encoded in buf[1] and buf[2] + * with reversed endianess. Extract direction from buffer, + * rotate endianess, adjust sign and feed the values into + * stabilize(). The resulting codes will be 0x01008000, + * 0x01007F00, ..., so one can use the normal imon-pad config + * from the remotes dir. + */ + timeout = 10; /* in msecs */ + /* (2*threshold) x (2*threshold) square */ + threshold = pad_thresh ? pad_thresh : 15; + + /* buf[1] is x */ + rel_x = (buf[1] & 0x08) | (buf[1] & 0x10) >> 2 | + (buf[1] & 0x20) >> 4 | (buf[1] & 0x40) >> 6; + if(buf[0] & 0x02) + rel_x |= ~0x10+1; + /* buf[2] is y */ + rel_y = (buf[2] & 0x08) | (buf[2] & 0x10) >> 2 | + (buf[2] & 0x20) >> 4 | (buf[2] & 0x40) >> 6; + if(buf[0] & 0x01) + rel_y |= ~0x10+1; + + buf[0] = 0x01; + buf[1] = buf[4] = buf[5] = buf[6] = buf[7] = 0; + + if (context->ir_protocol == IMON_IR_PROTOCOL_IMON) { + dir = stabilize((int)rel_x, (int)rel_y, + timeout, threshold); + if (!dir) + return; + buf[2] = dir & 0xFF; + buf[3] = (dir >> 8) & 0xFF; + } else { + if (abs(rel_y) > abs(rel_x)) { + buf[2] = (rel_y > 0) ? 0x7F : 0x80; + buf[3] = 0; + } else { + buf[2] = 0; + buf[3] = (rel_x > 0) ? 0x7F : 0x80; + } + } + + } else if (ts_input) { + /* + * this is touchscreen input, which we need to down-sample + * to a 64 button matrix at the moment... + */ + buf[0] = buf[0] >> 5; + buf[1] = 0x00; + buf[2] = buf[2] >> 5; + buf[3] = 0x00; + buf[4] = 0x00; + buf[5] = 0x00; + buf[6] = 0x14; + buf[7] = 0xff; + } + + if (len != 8) { + printk(KERN_WARNING "imon %s: invalid incoming packet " + "size (len = %d, intf%d)\n", __func__, len, intf); + return; + } + + /* iMON 2.4G associate frame */ + if (buf[0] == 0x00 && + buf[2] == 0xFF && /* REFID */ + buf[3] == 0xFF && + buf[4] == 0xFF && + buf[5] == 0xFF && /* iMON 2.4G */ + ((buf[6] == 0x4E && buf[7] == 0xDF) || /* LT */ + (buf[6] == 0x5E && buf[7] == 0xDF))) { /* DT */ + printk(KERN_WARNING "%s: remote associated refid=%02X\n", + __func__, buf[1]); + context->ir_isassociating = 0; + } + + chunk_num = buf[7]; + + if (chunk_num == 0xFF && !ts_input) + return; /* filler frame, no data here */ + + if (buf[0] == 0xFF && + buf[1] == 0xFF && + buf[2] == 0xFF && + buf[3] == 0xFF && + buf[4] == 0xFF && + buf[5] == 0xFF && /* iMON 2.4G */ + ((buf[6] == 0x4E && buf[7] == 0xAF) || /* LT */ + (buf[6] == 0x5E && buf[7] == 0xAF))) /* DT */ + return; /* filler frame, no data here */ + + if (debug) { + if (context->ir_onboard_decode) + printk("intf%d decoded packet: ", intf); + else + printk("raw packet: "); + for (i = 0; i < len; ++i) + printk("%02x ", buf[i]); + printk("\n"); + } + + if (context->ir_onboard_decode) { + /* The signals have been decoded onboard the iMON controller */ + lirc_buffer_write(context->driver->rbuf, buf); + wake_up(&context->driver->rbuf->wait_poll); + return; + } + + /* + * Translate received data to pulse and space lengths. + * Received data is active low, i.e. pulses are 0 and + * spaces are 1. + * + * My original algorithm was essentially similar to + * Changwoo Ryu's with the exception that he switched + * the incoming bits to active high and also fed an + * initial space to LIRC at the start of a new sequence + * if the previous bit was a pulse. + * + * I've decided to adopt his algorithm. + */ + + if (chunk_num == 1 && context->rx.initial_space) { + /* LIRC requires a leading space */ + context->rx.prev_bit = 0; + context->rx.count = 4; + submit_data(context); + context->rx.count = 0; + } + + for (octet = 0; octet < 5; ++octet) { + mask = 0x80; + for (bit = 0; bit < 8; ++bit) { + int curr_bit = !(buf[octet] & mask); + if (curr_bit != context->rx.prev_bit) { + if (context->rx.count) { + submit_data(context); + context->rx.count = 0; + } + context->rx.prev_bit = curr_bit; + } + ++context->rx.count; + mask >>= 1; + } + } + + if (chunk_num == 10) { + if (context->rx.count) { + submit_data(context); + context->rx.count = 0; + } + context->rx.initial_space = context->rx.prev_bit; + } +} + +/** + * report touchscreen input + */ +static void imon_touch_display_timeout(unsigned long data) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + struct imon_context *context = (struct imon_context *)data; + struct input_dev *touch; + + if (!context->display_type == IMON_DISPLAY_TYPE_VGA) + return; + + touch = context->touch; + input_report_abs(touch, ABS_X, context->touch_x); + input_report_abs(touch, ABS_Y, context->touch_y); + input_report_key(touch, BTN_TOUCH, 0x00); + input_sync(touch); +#endif + + return; +} + +/** + * Callback function for USB core API: receive data + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_rx_callback_intf0(struct urb *urb, struct pt_regs *regs) +#else +static void usb_rx_callback_intf0(struct urb *urb) +#endif +{ + struct imon_context *context; + unsigned char *buf; + int len; + int intfnum = 0; + + if (!urb) + return; + + context = (struct imon_context *)urb->context; + if (!context) + return; + + buf = urb->transfer_buffer; + len = urb->actual_length; + + switch (urb->status) { + case -ENOENT: /* usbcore unlink successful! */ + return; + + case 0: + imon_incoming_packet(context, urb, intfnum); + break; + + default: + printk(KERN_WARNING "imon %s: status(%d): ignored\n", + __func__, urb->status); + break; + } + + usb_submit_urb(context->rx_urb_intf0, GFP_ATOMIC); + + return; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_rx_callback_intf1(struct urb *urb, struct pt_regs *regs) +#else +static void usb_rx_callback_intf1(struct urb *urb) +#endif +{ + struct imon_context *context; + unsigned char *buf; + int len; + int intfnum = 1; + + if (!urb) + return; + + context = (struct imon_context *)urb->context; + if (!context) + return; + + buf = urb->transfer_buffer; + len = urb->actual_length; + + switch (urb->status) { + case -ENOENT: /* usbcore unlink successful! */ + return; + + case 0: + imon_incoming_packet(context, urb, intfnum); + break; + + default: + printk(KERN_WARNING "imon %s: status(%d): ignored\n", + __func__, urb->status); + break; + } + + usb_submit_urb(context->rx_urb_intf1, GFP_ATOMIC); + + return; +} + +/** + * Callback function for USB core API: Probe + */ +static int imon_probe(struct usb_interface *interface, + const struct usb_device_id *id) +{ + struct usb_device *usbdev = NULL; + struct usb_host_interface *iface_desc = NULL; + struct usb_endpoint_descriptor *rx_endpoint = NULL; + struct usb_endpoint_descriptor *tx_endpoint = NULL; + struct urb *rx_urb = NULL; + struct urb *tx_urb = NULL; + struct lirc_driver *driver = NULL; + struct lirc_buffer *rbuf = NULL; + struct usb_interface *first_if; + int ifnum; + int lirc_minor = 0; + int num_endpts; + int retval = 0; + int display_ep_found = 0; + int ir_ep_found = 0; + int alloc_status = 0; + int vfd_proto_6p = 0; + int ir_onboard_decode = 0; + int buf_chunk_size = BUF_CHUNK_SIZE; + int code_length; + int tx_control = 0; + struct imon_context *context = NULL; + struct imon_context *first_if_context = NULL; + int i, sysfs_err; + int configured_display_type = IMON_DISPLAY_TYPE_VFD; + u16 vendor, product; + const unsigned char fp_packet[] = { 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x88 }; + + /* + * Try to auto-detect the type of display if the user hasn't set + * it by hand via the display_type modparam. Default is VFD. + */ + if (display_type == IMON_DISPLAY_TYPE_AUTO) { + if (usb_match_id(interface, lcd_device_list)) + configured_display_type = IMON_DISPLAY_TYPE_LCD; + else if (usb_match_id(interface, imon_touchscreen_list)) + configured_display_type = IMON_DISPLAY_TYPE_VGA; + else if (usb_match_id(interface, ir_only_list)) + configured_display_type = IMON_DISPLAY_TYPE_NONE; + else + configured_display_type = IMON_DISPLAY_TYPE_VFD; + } else { + configured_display_type = display_type; + dprintk("%s: overriding display type to %d via modparam\n", + __func__, display_type); + } + + /* + * If it's the LCD, as opposed to the VFD, we just need to replace + * the "write" file op. + */ + if (configured_display_type == IMON_DISPLAY_TYPE_LCD) + display_fops.write = &lcd_write; + + /* + * To get front panel buttons working properly for newer LCD devices, + * we really do need a larger buffer. + */ + if (usb_match_id(interface, large_buffer_list)) + buf_chunk_size = 2 * BUF_CHUNK_SIZE; + + code_length = buf_chunk_size * 8; + + usbdev = usb_get_dev(interface_to_usbdev(interface)); + iface_desc = interface->cur_altsetting; + num_endpts = iface_desc->desc.bNumEndpoints; + ifnum = iface_desc->desc.bInterfaceNumber; + vendor = le16_to_cpu(usbdev->descriptor.idVendor); + product = le16_to_cpu(usbdev->descriptor.idProduct); + + dprintk("%s: found iMON device (%04x:%04x, intf%d)\n", + __func__, vendor, product, ifnum); + + /* prevent races probing devices w/multiple interfaces */ + mutex_lock(&driver_lock); + + first_if = usb_ifnum_to_if(usbdev, 0); + first_if_context = (struct imon_context *)usb_get_intfdata(first_if); + + /* + * Scan the endpoint list and set: + * first input endpoint = IR endpoint + * first output endpoint = display endpoint + */ + for (i = 0; i < num_endpts && !(ir_ep_found && display_ep_found); ++i) { + struct usb_endpoint_descriptor *ep; + int ep_dir; + int ep_type; + ep = &iface_desc->endpoint[i].desc; + ep_dir = ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK; + ep_type = ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; + + if (!ir_ep_found && + ep_dir == USB_DIR_IN && + ep_type == USB_ENDPOINT_XFER_INT) { + + rx_endpoint = ep; + ir_ep_found = 1; + dprintk("%s: found IR endpoint\n", __func__); + + } else if (!display_ep_found && + ep_dir == USB_DIR_OUT && + ep_type == USB_ENDPOINT_XFER_INT) { + tx_endpoint = ep; + display_ep_found = 1; + dprintk("%s: found display endpoint\n", __func__); + } + } + + /* + * If we didn't find a display endpoint, this is probably one of the + * newer iMON devices that use control urb instead of interrupt + */ + if (!display_ep_found) { + if (usb_match_id(interface, ctl_ep_device_list)) { + tx_control = 1; + display_ep_found = 1; + dprintk("%s: device uses control endpoint, not " + "interface OUT endpoint\n", __func__); + } + } + + /* + * Some iMON receivers have no display. Unfortunately, it seems + * that SoundGraph recycles device IDs between devices both with + * and without... :\ + */ + if (configured_display_type == IMON_DISPLAY_TYPE_NONE) { + display_ep_found = 0; + dprintk("%s: device has no display\n", __func__); + } + + /* + * iMON Touch devices have a VGA touchscreen, but no "display", as + * that refers to e.g. /dev/lcd0 (a character device LCD or VFD). + */ + if (configured_display_type == IMON_DISPLAY_TYPE_VGA) { + display_ep_found = 0; + dprintk("%s: iMON Touch device found\n", __func__); + } + + /* Input endpoint is mandatory */ + if (!ir_ep_found) { + err("%s: no valid input (IR) endpoint found.", __func__); + retval = -ENODEV; + goto exit; + } else { + /* Determine if the IR signals are decoded onboard */ + if (usb_match_id(interface, ir_onboard_decode_list)) + ir_onboard_decode = 1; + + dprintk("%s: ir_onboard_decode: %d\n", + __func__, ir_onboard_decode); + } + + /* Determine if display requires 6 packets */ + if (display_ep_found) { + if (usb_match_id(interface, vfd_proto_6p_list)) + vfd_proto_6p = 1; + + dprintk("%s: vfd_proto_6p: %d\n", + __func__, vfd_proto_6p); + } + + if (ifnum == 0) { + context = kzalloc(sizeof(struct imon_context), GFP_KERNEL); + if (!context) { + err("%s: kzalloc failed for context", __func__); + alloc_status = 1; + goto alloc_status_switch; + } + driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); + if (!driver) { + err("%s: kzalloc failed for lirc_driver", __func__); + alloc_status = 2; + goto alloc_status_switch; + } + rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL); + if (!rbuf) { + err("%s: kmalloc failed for lirc_buffer", __func__); + alloc_status = 3; + goto alloc_status_switch; + } + if (lirc_buffer_init(rbuf, buf_chunk_size, BUF_SIZE)) { + err("%s: lirc_buffer_init failed", __func__); + alloc_status = 4; + goto alloc_status_switch; + } + rx_urb = usb_alloc_urb(0, GFP_KERNEL); + if (!rx_urb) { + err("%s: usb_alloc_urb failed for IR urb", __func__); + alloc_status = 5; + goto alloc_status_switch; + } + tx_urb = usb_alloc_urb(0, GFP_KERNEL); + if (!tx_urb) { + err("%s: usb_alloc_urb failed for display urb", + __func__); + alloc_status = 6; + goto alloc_status_switch; + } + + mutex_init(&context->lock); + context->vfd_proto_6p = vfd_proto_6p; + context->ir_onboard_decode = ir_onboard_decode; + + strcpy(driver->name, MOD_NAME); + driver->minor = -1; + driver->code_length = ir_onboard_decode ? + code_length : sizeof(int) * 8; + driver->sample_rate = 0; + driver->features = (ir_onboard_decode) ? + LIRC_CAN_REC_LIRCCODE : LIRC_CAN_REC_MODE2; + driver->data = context; + driver->rbuf = rbuf; + driver->set_use_inc = ir_open; + driver->set_use_dec = ir_close; +#ifdef LIRC_HAVE_SYSFS + driver->dev = &interface->dev; +#endif + driver->owner = THIS_MODULE; + + mutex_lock(&context->lock); + + context->driver = driver; + /* start out in keyboard mode */ + context->pad_mouse = 0; + + init_timer(&context->timer); + context->timer.data = (unsigned long)context; + context->timer.function = imon_touch_display_timeout; + + lirc_minor = lirc_register_driver(driver); + if (lirc_minor < 0) { + err("%s: lirc_register_driver failed", __func__); + alloc_status = 7; + goto alloc_status_switch; + } else + printk(KERN_INFO MOD_NAME ": Registered iMON driver " + "(lirc minor: %d)\n", lirc_minor); + + /* Needed while unregistering! */ + driver->minor = lirc_minor; + + } else { + /* this is the secondary interface on the device */ + if (first_if_context->driver) { + rx_urb = usb_alloc_urb(0, GFP_KERNEL); + if (!rx_urb) { + err("%s: usb_alloc_urb failed for IR urb", + __func__); + alloc_status = 5; + goto alloc_status_switch; + } + + context = first_if_context; + } + mutex_lock(&context->lock); + } + + if (ifnum == 0) { + context->usbdev_intf0 = usbdev; + context->dev_present_intf0 = 1; + context->rx_endpoint_intf0 = rx_endpoint; + context->rx_urb_intf0 = rx_urb; + + /* + * tx is used to send characters to lcd/vfd, associate RF + * remotes, set IR protocol, and maybe more... + */ + context->tx_endpoint = tx_endpoint; + context->tx_urb = tx_urb; + context->tx_control = tx_control; + + if (display_ep_found) + context->display_supported = 1; + + if (product == 0xffdc) + context->ffdc_dev = 1; + + context->display_type = configured_display_type; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + context->mouse = input_allocate_device(); + + snprintf(context->name_mouse, sizeof(context->name_mouse), + "iMON PAD IR Mouse (%04x:%04x)", + vendor, product); + context->mouse->name = context->name_mouse; + + usb_make_path(usbdev, context->phys_mouse, sizeof(context->phys_mouse)); + strlcat(context->phys_mouse, "/input0", sizeof(context->phys_mouse)); + context->mouse->phys = context->phys_mouse; + + context->mouse->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); + context->mouse->keybit[BIT_WORD(BTN_MOUSE)] = + BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT) | + BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_SIDE) | + BIT_MASK(BTN_EXTRA); + context->mouse->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | + BIT_MASK(REL_WHEEL); + + input_set_drvdata(context->mouse, context); + + usb_to_input_id(usbdev, &context->mouse->id); + context->mouse->dev.parent = &interface->dev; + retval = input_register_device(context->mouse); + if (retval) + printk(KERN_INFO "%s: pad mouse input device setup failed\n", + __func__); +#endif + + usb_fill_int_urb(context->rx_urb_intf0, context->usbdev_intf0, + usb_rcvintpipe(context->usbdev_intf0, + context->rx_endpoint_intf0->bEndpointAddress), + context->usb_rx_buf, sizeof(context->usb_rx_buf), + usb_rx_callback_intf0, context, + context->rx_endpoint_intf0->bInterval); + + retval = usb_submit_urb(context->rx_urb_intf0, GFP_KERNEL); + + if (retval) { + err("%s: usb_submit_urb failed for intf0 (%d)", + __func__, retval); + mutex_unlock(&context->lock); + goto exit; + } + + } else { + context->usbdev_intf1 = usbdev; + context->dev_present_intf1 = 1; + context->rx_endpoint_intf1 = rx_endpoint; + context->rx_urb_intf1 = rx_urb; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + if (context->display_type == IMON_DISPLAY_TYPE_VGA) { + context->touch = input_allocate_device(); + + snprintf(context->name_touch, sizeof(context->name_touch), + "iMON USB Touchscreen (%04x:%04x)", + vendor, product); + context->touch->name = context->name_touch; + + usb_make_path(usbdev, context->phys_touch, + sizeof(context->phys_touch)); + strlcat(context->phys_touch, "/input1", + sizeof(context->phys_touch)); + context->touch->phys = context->phys_touch; + + context->touch->evbit[0] = + BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + context->touch->keybit[BIT_WORD(BTN_TOUCH)] = + BIT_MASK(BTN_TOUCH); + input_set_abs_params(context->touch, ABS_X, + 0x00, 0xfff, 0, 0); + input_set_abs_params(context->touch, ABS_Y, + 0x00, 0xfff, 0, 0); + + input_set_drvdata(context->touch, context); + + usb_to_input_id(usbdev, &context->touch->id); + context->touch->dev.parent = &interface->dev; + retval = input_register_device(context->touch); + if (retval) + printk(KERN_INFO "%s: touchscreen input device setup failed\n", + __func__); + } else + context->touch = NULL; +#endif + + usb_fill_int_urb(context->rx_urb_intf1, context->usbdev_intf1, + usb_rcvintpipe(context->usbdev_intf1, + context->rx_endpoint_intf1->bEndpointAddress), + context->usb_rx_buf, sizeof(context->usb_rx_buf), + usb_rx_callback_intf1, context, + context->rx_endpoint_intf1->bInterval); + + retval = usb_submit_urb(context->rx_urb_intf1, GFP_KERNEL); + + if (retval) { + err("%s: usb_submit_urb failed for intf1 (%d)", + __func__, retval); + mutex_unlock(&context->lock); + goto exit; + } + } + + usb_set_intfdata(interface, context); + + /* RF products *also* use 0xffdc... sigh... */ + if (context->ffdc_dev) { + sysfs_err = sysfs_create_group(&interface->dev.kobj, + &imon_rf_attribute_group); + if (sysfs_err) + err("%s: Could not create RF sysfs entries(%d)", + __func__, sysfs_err); + } + + if (context->display_supported && ifnum == 0) { + dprintk("%s: Registering iMON display with sysfs\n", __func__); + + /* set up sysfs entry for built-in clock */ + sysfs_err = sysfs_create_group(&interface->dev.kobj, + &imon_display_attribute_group); + if (sysfs_err) + err("%s: Could not create display sysfs entries(%d)", + __func__, sysfs_err); + + if (usb_register_dev(interface, &imon_class)) { + /* Not a fatal error, so ignore */ + printk(KERN_INFO "%s: could not get a minor number for " + "display\n", __func__); + } + + /* Enable front-panel buttons and/or knobs */ + memcpy(context->usb_tx_buf, &fp_packet, sizeof(fp_packet)); + retval = send_packet(context); + /* Not fatal, but warn about it */ + if (retval) + printk(KERN_INFO "%s: failed to enable front-panel " + "buttons and/or knobs\n", __func__); + } + + /* set IR protocol/remote type */ + imon_set_ir_protocol(context); + + printk(KERN_INFO MOD_NAME ": iMON device (%04x:%04x, intf%d) on " + "usb<%d:%d> initialized\n", vendor, product, ifnum, + usbdev->bus->busnum, usbdev->devnum); + +alloc_status_switch: + mutex_unlock(&context->lock); + + switch (alloc_status) { + case 7: + usb_free_urb(tx_urb); + case 6: + usb_free_urb(rx_urb); + case 5: + if (rbuf) + lirc_buffer_free(rbuf); + case 4: + kfree(rbuf); + case 3: + kfree(driver); + case 2: + kfree(context); + context = NULL; + case 1: + retval = -ENOMEM; + break; + case 0: + retval = 0; + } + +exit: + mutex_unlock(&driver_lock); + + return retval; +} + +/** + * Callback function for USB core API: disconnect + */ +static void imon_disconnect(struct usb_interface *interface) +{ + struct imon_context *context; + int ifnum; + + /* prevent races with ir_open()/display_open() */ + mutex_lock(&driver_lock); + + context = usb_get_intfdata(interface); + ifnum = interface->cur_altsetting->desc.bInterfaceNumber; + + mutex_lock(&context->lock); + + /* + * sysfs_remove_group is safe to call even if sysfs_create_group + * hasn't been called + */ + sysfs_remove_group(&interface->dev.kobj, + &imon_display_attribute_group); + sysfs_remove_group(&interface->dev.kobj, + &imon_rf_attribute_group); + + usb_set_intfdata(interface, NULL); + + /* Abort ongoing write */ + if (atomic_read(&context->tx.busy)) { + usb_kill_urb(context->tx_urb); + complete_all(&context->tx.finished); + } + + if (ifnum == 0) { + context->dev_present_intf0 = 0; + usb_kill_urb(context->rx_urb_intf0); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + input_unregister_device(context->mouse); +#endif + if (context->display_supported) + usb_deregister_dev(interface, &imon_class); + } else { + context->dev_present_intf1 = 0; + usb_kill_urb(context->rx_urb_intf1); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + if (context->display_type == IMON_DISPLAY_TYPE_VGA) + input_unregister_device(context->touch); +#endif + } + + if (!context->ir_isopen && !context->dev_present_intf0 && + !context->dev_present_intf1) { + del_timer_sync(&context->timer); + deregister_from_lirc(context); + mutex_unlock(&context->lock); + if (!context->display_isopen) + free_imon_context(context); + } else + mutex_unlock(&context->lock); + + mutex_unlock(&driver_lock); + + printk(KERN_INFO "%s: iMON device (intf%d) disconnected\n", + __func__, ifnum); +} + +static int imon_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct imon_context *context = usb_get_intfdata(intf); + int ifnum = intf->cur_altsetting->desc.bInterfaceNumber; + + if (ifnum == 0) + usb_kill_urb(context->rx_urb_intf0); + else + usb_kill_urb(context->rx_urb_intf1); + + return 0; +} + +static int imon_resume(struct usb_interface *intf) +{ + int rc = 0; + struct imon_context *context = usb_get_intfdata(intf); + int ifnum = intf->cur_altsetting->desc.bInterfaceNumber; + + if (ifnum == 0) { + usb_fill_int_urb(context->rx_urb_intf0, context->usbdev_intf0, + usb_rcvintpipe(context->usbdev_intf0, + context->rx_endpoint_intf0->bEndpointAddress), + context->usb_rx_buf, sizeof(context->usb_rx_buf), + usb_rx_callback_intf0, context, + context->rx_endpoint_intf0->bInterval); + + rc = usb_submit_urb(context->rx_urb_intf0, GFP_ATOMIC); + + } else { + usb_fill_int_urb(context->rx_urb_intf1, context->usbdev_intf1, + usb_rcvintpipe(context->usbdev_intf1, + context->rx_endpoint_intf1->bEndpointAddress), + context->usb_rx_buf, sizeof(context->usb_rx_buf), + usb_rx_callback_intf1, context, + context->rx_endpoint_intf1->bInterval); + + rc = usb_submit_urb(context->rx_urb_intf1, GFP_ATOMIC); + } + + return rc; +} + +static int __init imon_init(void) +{ + int rc; + + printk(KERN_INFO MOD_NAME ": " MOD_DESC ", v" MOD_VERSION "\n"); + + rc = usb_register(&imon_driver); + if (rc) { + err("%s: usb register failed(%d)", __func__, rc); + return -ENODEV; + } + + return 0; +} + +static void __exit imon_exit(void) +{ + usb_deregister(&imon_driver); + printk(KERN_INFO MOD_NAME ": module removed. Goodbye!\n"); +} + +module_init(imon_init); +module_exit(imon_exit); --- linux-2.6.32.orig/ubuntu/lirc/lirc_imon/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_imon/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_IMON) += lirc_imon.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_ttusbir/lirc_ttusbir.c +++ linux-2.6.32/ubuntu/lirc/lirc_ttusbir/lirc_ttusbir.c @@ -0,0 +1,410 @@ +/* + * lirc_ttusbir.c + * + * lirc_ttusbir - LIRC device driver for the TechnoTrend USB IR Receiver + * + * Copyright (C) 2007 Stefan Macher + * + * This LIRC driver provides access to the TechnoTrend USB IR Receiver. + * The receiver delivers the IR signal as raw sampled true/false data in + * isochronous USB packets each of size 128 byte. + * Currently the driver reduces the sampling rate by factor of 8 as this + * is still more than enough to decode RC-5 - others should be analyzed. + * But the driver does not rely on RC-5 it should be able to decode every + * IR signal that is not too fast. + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +MODULE_DESCRIPTION("TechnoTrend USB IR device driver for LIRC"); +MODULE_AUTHOR("Stefan Macher (st_maker-lirc@yahoo.de)"); +MODULE_LICENSE("GPL"); + +/* #define DEBUG */ +#ifdef DEBUG +#define DPRINTK printk +#else +#define DPRINTK(_x_, a...) +#endif + +/* function declarations */ +static int probe(struct usb_interface *intf, const struct usb_device_id *id); +static void disconnect(struct usb_interface *intf); +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void urb_complete(struct urb *urb, struct pt_regs *pt_regs); +#else +static void urb_complete(struct urb *urb); +#endif +static int set_use_inc(void *data); +static void set_use_dec(void *data); + +static int num_urbs = 2; +module_param(num_urbs, int, S_IRUGO); +MODULE_PARM_DESC(num_urbs, + "Number of URBs in queue. Try to increase to 4 in case " + "of problems (default: 2; minimum: 2)"); + +/* table of devices that work with this driver */ +static struct usb_device_id device_id_table[] = { + /* TechnoTrend USB IR Receiver */ + { USB_DEVICE(0x0B48, 0x2003) }, + /* Terminating entry */ + { } +}; +MODULE_DEVICE_TABLE(usb, device_id_table); + +/* USB driver definition */ +static struct usb_driver usb_driver = { + .name = "TTUSBIR", + .id_table = &(device_id_table[0]), + .probe = probe, + .disconnect = disconnect, +}; + +/* USB device definition */ +struct ttusbir_device { + struct usb_driver *usb_driver; + struct usb_device *udev; + struct usb_interface *interf; + struct usb_class_driver class_driver; + unsigned int ifnum; /* Interface number to use */ + unsigned int alt_setting; /* alternate setting to use */ + unsigned int endpoint; /* Endpoint to use */ + struct urb **urb; /* num_urb URB pointers*/ + char **buffer; /* 128 byte buffer for each URB */ + struct lirc_buffer rbuf; /* Buffer towards LIRC */ + struct lirc_driver driver; + int minor; + int last_pulse; /* remembers if last received byte was pulse or space */ + int last_num; /* remembers how many last bytes appeared */ + int opened; +}; + +/*** LIRC specific functions ***/ +static int set_use_inc(void *data) +{ + int i, retval; + struct ttusbir_device *ttusbir = data; + + DPRINTK("Sending first URBs\n"); + /* @TODO Do I need to check if I am already opened */ + ttusbir->opened = 1; + + for (i = 0; i < num_urbs; i++) { + retval = usb_submit_urb(ttusbir->urb[i], GFP_KERNEL); + if (retval) { + err("%s: usb_submit_urb failed on urb %d", + __func__, i); + return retval; + } + } + return 0; +} + +static void set_use_dec(void *data) +{ + struct ttusbir_device *ttusbir = data; + + DPRINTK("Device closed\n"); + + ttusbir->opened = 0; +} + +/*** USB specific functions ***/ + +/* + * This mapping table is used to do a very simple filtering of the + * input signal. + * For a value with at least 4 bits set it returns 0xFF otherwise + * 0x00. For faster IR signals this can not be used. But for RC-5 we + * still have about 14 samples per pulse/space, i.e. we sample with 14 + * times higher frequency than the signal frequency + */ +const unsigned char map_table[] = +{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void urb_complete(struct urb *urb, struct pt_regs *pt_regs) +#else +static void urb_complete(struct urb *urb) +#endif +{ + struct ttusbir_device *ttusbir; + unsigned char *buf; + int i; + lirc_t l; + + ttusbir = urb->context; + + if (!ttusbir->opened) + return; + + buf = (unsigned char *)urb->transfer_buffer; + + for (i = 0; i < 128; i++) { + /* Here we do the filtering and some kind of down sampling */ + buf[i] = ~map_table[buf[i]]; + if (ttusbir->last_pulse == buf[i]) { + if (ttusbir->last_num < PULSE_MASK/63) + ttusbir->last_num++; + /* + * else we are in a idle period and do not need to + * increment any longer + */ + } else { + l = ttusbir->last_num * 62; /* about 62 = us/byte */ + if (ttusbir->last_pulse) /* pulse or space? */ + l |= PULSE_BIT; + if (!lirc_buffer_full(&ttusbir->rbuf)) { + lirc_buffer_write(&ttusbir->rbuf, (void *)&l); + wake_up_interruptible(&ttusbir->rbuf.wait_poll); + } + ttusbir->last_num = 0; + ttusbir->last_pulse = buf[i]; + } + } + usb_submit_urb(urb, GFP_ATOMIC); /* keep data rolling :-) */ +} + +/* + * Called whenever the USB subsystem thinks we could be the right driver + * to handle this device + */ +static int probe(struct usb_interface *intf, const struct usb_device_id *id) +{ + int alt_set, endp; + int found = 0; + int i, j; + int struct_size; + struct usb_host_interface *host_interf; + struct usb_interface_descriptor *interf_desc; + struct usb_host_endpoint *host_endpoint; + struct ttusbir_device *ttusbir; + + DPRINTK("Module ttusbir probe\n"); + + /* To reduce memory fragmentation we use only one allocation */ + struct_size = sizeof(struct ttusbir_device) + + (sizeof(struct urb *) * num_urbs) + + (sizeof(char *) * num_urbs) + + (num_urbs * 128); + ttusbir = kzalloc(struct_size, GFP_KERNEL); + if (!ttusbir) + return -ENOMEM; + + ttusbir->urb = (struct urb **)((char *)ttusbir + + sizeof(struct ttusbir_device)); + ttusbir->buffer = (char **)((char *)ttusbir->urb + + (sizeof(struct urb *) * num_urbs)); + for (i = 0; i < num_urbs; i++) + ttusbir->buffer[i] = (char *)ttusbir->buffer + + (sizeof(char *)*num_urbs) + (i * 128); + + ttusbir->usb_driver = &usb_driver; + ttusbir->alt_setting = -1; + /* @TODO check if error can be returned */ + ttusbir->udev = usb_get_dev(interface_to_usbdev(intf)); + ttusbir->interf = intf; + ttusbir->last_pulse = 0x00; + ttusbir->last_num = 0; + + /* + * Now look for interface setting we can handle + * We are searching for the alt setting where end point + * 0x82 has max packet size 16 + */ + for (alt_set = 0; alt_set < intf->num_altsetting && !found; alt_set++) { + host_interf = &intf->altsetting[alt_set]; + interf_desc = &host_interf->desc; + for (endp = 0; endp < interf_desc->bNumEndpoints; endp++) { + host_endpoint = &host_interf->endpoint[endp]; + if ((host_endpoint->desc.bEndpointAddress == 0x82) && + (host_endpoint->desc.wMaxPacketSize == 0x10)) { + ttusbir->alt_setting = alt_set; + ttusbir->endpoint = endp; + found = 1; + break; + } + } + } + if (ttusbir->alt_setting != -1) + DPRINTK("alt setting: %d\n", ttusbir->alt_setting); + else { + err("Could not find alternate setting\n"); + kfree(ttusbir); + return -EINVAL; + } + + /* OK lets setup this interface setting */ + usb_set_interface(ttusbir->udev, 0, ttusbir->alt_setting); + + /* Store device info in interface structure */ + usb_set_intfdata(intf, ttusbir); + + /* Register as a LIRC driver */ + if (lirc_buffer_init(&ttusbir->rbuf, sizeof(lirc_t), 256) < 0) { + err("Could not get memory for LIRC data buffer\n"); + usb_set_intfdata(intf, NULL); + kfree(ttusbir); + return -ENOMEM; + } + strcpy(ttusbir->driver.name, "TTUSBIR"); + ttusbir->driver.minor = -1; + ttusbir->driver.code_length = 1; + ttusbir->driver.sample_rate = 0; + ttusbir->driver.data = ttusbir; + ttusbir->driver.add_to_buf = NULL; +#ifndef LIRC_REMOVE_DURING_EXPORT + ttusbir->driver.get_queue = NULL; +#endif + ttusbir->driver.rbuf = &ttusbir->rbuf; + ttusbir->driver.set_use_inc = set_use_inc; + ttusbir->driver.set_use_dec = set_use_dec; + ttusbir->driver.fops = NULL; + ttusbir->driver.dev = &intf->dev; + ttusbir->driver.owner = THIS_MODULE; + ttusbir->driver.features = LIRC_CAN_REC_MODE2; + ttusbir->minor = lirc_register_driver(&ttusbir->driver); + if (ttusbir->minor < 0) { + err("Error registering as LIRC driver\n"); + usb_set_intfdata(intf, NULL); + lirc_buffer_free(&ttusbir->rbuf); + kfree(ttusbir); + return -EIO; + } + + /* Allocate and setup the URB that we will use to talk to the device */ + for (i = 0; i < num_urbs; i++) { + ttusbir->urb[i] = usb_alloc_urb(8, GFP_KERNEL); + if (!ttusbir->urb[i]) { + err("Could not allocate memory for the URB\n"); + for (j = i - 1; j >= 0; j--) + kfree(ttusbir->urb[j]); + lirc_buffer_free(&ttusbir->rbuf); + lirc_unregister_driver(ttusbir->minor); + kfree(ttusbir); + usb_set_intfdata(intf, NULL); + return -ENOMEM; + } + ttusbir->urb[i]->dev = ttusbir->udev; + ttusbir->urb[i]->context = ttusbir; + ttusbir->urb[i]->pipe = usb_rcvisocpipe(ttusbir->udev, + ttusbir->endpoint); + ttusbir->urb[i]->interval = 1; + ttusbir->urb[i]->transfer_flags = URB_ISO_ASAP; + ttusbir->urb[i]->transfer_buffer = &ttusbir->buffer[i][0]; + ttusbir->urb[i]->complete = urb_complete; + ttusbir->urb[i]->number_of_packets = 8; + ttusbir->urb[i]->transfer_buffer_length = 128; + for (j = 0; j < 8; j++) { + ttusbir->urb[i]->iso_frame_desc[j].offset = j*16; + ttusbir->urb[i]->iso_frame_desc[j].length = 16; + } + } + return 0; +} + +/** + * Called when the driver is unloaded or the device is unplugged + */ +static void disconnect(struct usb_interface *intf) +{ + int i; + struct ttusbir_device *ttusbir; + + DPRINTK("Module ttusbir disconnect\n"); + + ttusbir = (struct ttusbir_device *) usb_get_intfdata(intf); + usb_set_intfdata(intf, NULL); + lirc_unregister_driver(ttusbir->minor); + DPRINTK("unregistered\n"); + + for (i = 0; i < num_urbs; i++) { + usb_kill_urb(ttusbir->urb[i]); + usb_free_urb(ttusbir->urb[i]); + } + DPRINTK("URBs killed\n"); + lirc_buffer_free(&ttusbir->rbuf); + kfree(ttusbir); +} + +static int ttusbir_init_module(void) +{ + int result; + + DPRINTK(KERN_DEBUG "Module ttusbir init\n"); + + /* register this driver with the USB subsystem */ + result = usb_register(&usb_driver); + if (result) + err("usb_register failed. Error number %d", result); + return result; +} + +static void ttusbir_exit_module(void) +{ + printk(KERN_DEBUG "Module ttusbir exit\n"); + usb_deregister(&usb_driver); +} + +module_init(ttusbir_init_module); +module_exit(ttusbir_exit_module); --- linux-2.6.32.orig/ubuntu/lirc/lirc_ttusbir/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_ttusbir/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_TTUSBIR) += lirc_ttusbir.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_serial/lirc_serial.c +++ linux-2.6.32/ubuntu/lirc/lirc_serial/lirc_serial.c @@ -0,0 +1,1422 @@ +/* $Id: lirc_serial.c,v 5.104 2009/03/15 09:34:00 lirc Exp $ */ +/* + * lirc_serial.c + * + * lirc_serial - Device driver that records pulse- and pause-lengths + * (space-lengths) between DDCD event on a serial port. + * + * Copyright (C) 1996,97 Ralph Metzler + * Copyright (C) 1998 Trent Piepho + * Copyright (C) 1998 Ben Pfaff + * Copyright (C) 1999 Christoph Bartelmus + * Copyright (C) 2007 Andrei Tanas (suspend/resume support) + * 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 + * + */ + +/* + * Steve's changes to improve transmission fidelity: + * - for systems with the rdtsc instruction and the clock counter, a + * send_pule that times the pulses directly using the counter. + * This means that the LIRC_SERIAL_TRANSMITTER_LATENCY fudge is + * not needed. Measurement shows very stable waveform, even where + * PCI activity slows the access to the UART, which trips up other + * versions. + * - For other system, non-integer-microsecond pulse/space lengths, + * done using fixed point binary. So, much more accurate carrier + * frequency. + * - fine tuned transmitter latency, taking advantage of fractional + * microseconds in previous change + * - Fixed bug in the way transmitter latency was accounted for by + * tuning the pulse lengths down - the send_pulse routine ignored + * this overhead as it timed the overall pulse length - so the + * pulse frequency was right but overall pulse length was too + * long. Fixed by accounting for latency on each pulse/space + * iteration. + * + * Steve Davies July 2001 + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) +#error "**********************************************************" +#error " Sorry, this driver needs kernel version 2.2.18 or higher " +#error "**********************************************************" +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) +#include +#endif + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +#include +#else +#include +#endif +#include +#include + +#if defined(LIRC_SERIAL_NSLU2) +#include +/* From Intel IXP42X Developer's Manual (#252480-005): */ +/* ftp://download.intel.com/design/network/manuals/25248005.pdf */ +#define UART_IE_IXP42X_UUE 0x40 /* IXP42X UART Unit enable */ +#define UART_IE_IXP42X_RTOIE 0x10 /* IXP42X Receiver Data Timeout int.enable */ +#ifndef NSLU2_LED_GRN_GPIO +/* added in 2.6.22 */ +#define NSLU2_LED_GRN_GPIO NSLU2_LED_GRN +#endif +#endif + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +#if defined(LIRC_SERIAL_SOFTCARRIER) && !defined(LIRC_SERIAL_TRANSMITTER) +#warning "Software carrier only affects transmitting" +#endif + +#if defined(rdtscl) + +#define USE_RDTSC +#warning "Note: using rdtsc instruction" +#endif + +#ifdef LIRC_SERIAL_ANIMAX +#ifdef LIRC_SERIAL_TRANSMITTER +#warning "******************************************" +#warning " This receiver does not have a " +#warning " transmitter diode " +#warning "******************************************" +#endif +#endif + +#define LIRC_DRIVER_VERSION "$Revision: 5.104 $" +#define LIRC_DRIVER_NAME "lirc_serial" + +struct lirc_serial { + int signal_pin; + int signal_pin_change; + int on; + int off; + long (*send_pulse)(unsigned long length); + void (*send_space)(long length); + int features; +}; + +#define LIRC_HOMEBREW 0 +#define LIRC_IRDEO 1 +#define LIRC_IRDEO_REMOTE 2 +#define LIRC_ANIMAX 3 +#define LIRC_IGOR 4 +#define LIRC_NSLU2 5 + +#ifdef LIRC_SERIAL_IRDEO +static int type = LIRC_IRDEO; +#elif defined(LIRC_SERIAL_IRDEO_REMOTE) +static int type = LIRC_IRDEO_REMOTE; +#elif defined(LIRC_SERIAL_ANIMAX) +static int type = LIRC_ANIMAX; +#elif defined(LIRC_SERIAL_IGOR) +static int type = LIRC_IGOR; +#elif defined(LIRC_SERIAL_NSLU2) +static int type = LIRC_NSLU2; +#else +static int type = LIRC_HOMEBREW; +#endif + +/* Set defaults for NSLU2 */ +#if defined(LIRC_SERIAL_NSLU2) +#ifndef LIRC_IRQ +#define LIRC_IRQ IRQ_IXP4XX_UART2 +#endif +#ifndef LIRC_PORT +#define LIRC_PORT (IXP4XX_UART2_BASE_VIRT + REG_OFFSET) +#endif +#ifndef LIRC_IOMMAP +#define LIRC_IOMMAP IXP4XX_UART2_BASE_PHYS +#endif +#ifndef LIRC_IOSHIFT +#define LIRC_IOSHIFT 2 +#endif +#ifndef LIRC_ALLOW_MMAPPED_IO +#define LIRC_ALLOW_MMAPPED_IO +#endif +#endif + +#if defined(LIRC_ALLOW_MMAPPED_IO) +#ifndef LIRC_IOMMAP +#define LIRC_IOMMAP 0 +#endif +#ifndef LIRC_IOSHIFT +#define LIRC_IOSHIFT 0 +#endif +static int iommap = LIRC_IOMMAP; +static int ioshift = LIRC_IOSHIFT; +#endif + +#ifdef LIRC_SERIAL_SOFTCARRIER +static int softcarrier = 1; +#else +static int softcarrier; +#endif + +static int share_irq; +static int debug; + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +/* forward declarations */ +static long send_pulse_irdeo(unsigned long length); +static long send_pulse_homebrew(unsigned long length); +static void send_space_irdeo(long length); +static void send_space_homebrew(long length); + +static struct lirc_serial hardware[] = { + [LIRC_HOMEBREW] = { + .signal_pin = UART_MSR_DCD, + .signal_pin_change = UART_MSR_DDCD, + .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR), + .off = (UART_MCR_RTS | UART_MCR_OUT2), + .send_pulse = send_pulse_homebrew, + .send_space = send_space_homebrew, +#ifdef LIRC_SERIAL_TRANSMITTER + .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SET_SEND_CARRIER | + LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2) +#else + .features = LIRC_CAN_REC_MODE2 +#endif + }, + + [LIRC_IRDEO] = { + .signal_pin = UART_MSR_DSR, + .signal_pin_change = UART_MSR_DDSR, + .on = UART_MCR_OUT2, + .off = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2), + .send_pulse = send_pulse_irdeo, + .send_space = send_space_irdeo, + .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2) + }, + + [LIRC_IRDEO_REMOTE] = { + .signal_pin = UART_MSR_DSR, + .signal_pin_change = UART_MSR_DDSR, + .on = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2), + .off = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2), + .send_pulse = send_pulse_irdeo, + .send_space = send_space_irdeo, + .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2) + }, + + [LIRC_ANIMAX] = { + .signal_pin = UART_MSR_DCD, + .signal_pin_change = UART_MSR_DDCD, + .on = 0, + .off = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2), + .send_pulse = NULL, + .send_space = NULL, + .features = LIRC_CAN_REC_MODE2 + }, + + [LIRC_IGOR] = { + .signal_pin = UART_MSR_DSR, + .signal_pin_change = UART_MSR_DDSR, + .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR), + .off = (UART_MCR_RTS | UART_MCR_OUT2), + .send_pulse = send_pulse_homebrew, + .send_space = send_space_homebrew, +#ifdef LIRC_SERIAL_TRANSMITTER + .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SET_SEND_CARRIER | + LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2) +#else + .features = LIRC_CAN_REC_MODE2 +#endif + }, + +#if defined(LIRC_SERIAL_NSLU2) + /* + * Modified Linksys Network Storage Link USB 2.0 (NSLU2): + * We receive on CTS of the 2nd serial port (R142,LHS), we + * transmit with a IR diode between GPIO[1] (green status LED), + * and ground (Matthias Goebl ). + * See also http://www.nslu2-linux.org for this device + */ + [LIRC_NSLU2] = { + .signal_pin = UART_MSR_CTS, + .signal_pin_change = UART_MSR_DCTS, + .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR), + .off = (UART_MCR_RTS | UART_MCR_OUT2), + .send_pulse = send_pulse_homebrew, + .send_space = send_space_homebrew, +#ifdef LIRC_SERIAL_TRANSMITTER + .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE | + LIRC_CAN_SET_SEND_CARRIER | + LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2) +#else + .features = LIRC_CAN_REC_MODE2 +#endif + }, +#endif + +}; + +#define RS_ISR_PASS_LIMIT 256 + +/* + * A long pulse code from a remote might take up to 300 bytes. The + * daemon should read the bytes as soon as they are generated, so take + * the number of keys you think you can push before the daemon runs + * and multiply by 300. The driver will warn you if you overrun this + * buffer. If you have a slow computer or non-busmastering IDE disks, + * maybe you will need to increase this. + */ + +/* This MUST be a power of two! It has to be larger than 1 as well. */ + +#define RBUF_LEN 256 +#define WBUF_LEN 256 + +static int sense = -1; /* -1 = auto, 0 = active high, 1 = active low */ +static int txsense; /* 0 = active high, 1 = active low */ + +#ifndef LIRC_IRQ +#define LIRC_IRQ 4 +#endif +#ifndef LIRC_PORT +#define LIRC_PORT 0x3f8 +#endif + +static int io = LIRC_PORT; +static int irq = LIRC_IRQ; + +static struct timeval lasttv = {0, 0}; + +static struct lirc_buffer rbuf; + +static lirc_t wbuf[WBUF_LEN]; + +static unsigned int freq = 38000; +static unsigned int duty_cycle = 50; + +/* Initialized in init_timing_params() */ +static unsigned long period; +static unsigned long pulse_width; +static unsigned long space_width; + +#if defined(__i386__) +/* + * From: + * Linux I/O port programming mini-HOWTO + * Author: Riku Saikkonen + * v, 28 December 1997 + * + * [...] + * Actually, a port I/O instruction on most ports in the 0-0x3ff range + * takes almost exactly 1 microsecond, so if you're, for example, using + * the parallel port directly, just do additional inb()s from that port + * to delay. + * [...] + */ +/* transmitter latency 1.5625us 0x1.90 - this figure arrived at from + * comment above plus trimming to match actual measured frequency. + * This will be sensitive to cpu speed, though hopefully most of the 1.5us + * is spent in the uart access. Still - for reference test machine was a + * 1.13GHz Athlon system - Steve + */ + +/* + * changed from 400 to 450 as this works better on slower machines; + * faster machines will use the rdtsc code anyway + */ +#define LIRC_SERIAL_TRANSMITTER_LATENCY 450 + +#else + +/* does anybody have information on other platforms ? */ +/* 256 = 1<<8 */ +#define LIRC_SERIAL_TRANSMITTER_LATENCY 256 + +#endif /* __i386__ */ + +static unsigned int sinp(int offset) +{ +#if defined(LIRC_ALLOW_MMAPPED_IO) + if (iommap != 0) { + /* the register is memory-mapped */ + offset <<= ioshift; + return readb(io + offset); + } +#endif + return inb(io + offset); +} + +static void soutp(int offset, int value) +{ +#if defined(LIRC_ALLOW_MMAPPED_IO) + if (iommap != 0) { + /* the register is memory-mapped */ + offset <<= ioshift; + writeb(value, io + offset); + } +#endif + outb(value, io + offset); +} + +static void on(void) +{ +#if defined(LIRC_SERIAL_NSLU2) + /* + * On NSLU2, we put the transmit diode between the output of the green + * status LED and ground + */ + if (type == LIRC_NSLU2) { + gpio_line_set(NSLU2_LED_GRN_GPIO, IXP4XX_GPIO_LOW); + return; + } +#endif + if (txsense) + soutp(UART_MCR, hardware[type].off); + else + soutp(UART_MCR, hardware[type].on); +} + +static void off(void) +{ +#if defined(LIRC_SERIAL_NSLU2) + if (type == LIRC_NSLU2) { + gpio_line_set(NSLU2_LED_GRN_GPIO, IXP4XX_GPIO_HIGH); + return; + } +#endif + if (txsense) + soutp(UART_MCR, hardware[type].on); + else + soutp(UART_MCR, hardware[type].off); +} + +#ifndef MAX_UDELAY_MS +#define MAX_UDELAY_US 5000 +#else +#define MAX_UDELAY_US (MAX_UDELAY_MS*1000) +#endif + +static void safe_udelay(unsigned long usecs) +{ + while (usecs > MAX_UDELAY_US) { + udelay(MAX_UDELAY_US); + usecs -= MAX_UDELAY_US; + } + udelay(usecs); +} + +#ifdef USE_RDTSC +/* + * This is an overflow/precision juggle, complicated in that we can't + * do long long divide in the kernel + */ + +/* + * When we use the rdtsc instruction to measure clocks, we keep the + * pulse and space widths as clock cycles. As this is CPU speed + * dependent, the widths must be calculated in init_port and ioctl + * time + */ + +/* So send_pulse can quickly convert microseconds to clocks */ +static unsigned long conv_us_to_clocks; + +static int init_timing_params(unsigned int new_duty_cycle, + unsigned int new_freq) +{ + unsigned long long loops_per_sec, work; + + duty_cycle = new_duty_cycle; + freq = new_freq; + + loops_per_sec = current_cpu_data.loops_per_jiffy; + loops_per_sec *= HZ; + + /* How many clocks in a microsecond?, avoiding long long divide */ + work = loops_per_sec; + work *= 4295; /* 4295 = 2^32 / 1e6 */ + conv_us_to_clocks = (work >> 32); + + /* + * Carrier period in clocks, approach good up to 32GHz clock, + * gets carrier frequency within 8Hz + */ + period = loops_per_sec >> 3; + period /= (freq >> 3); + + /* Derive pulse and space from the period */ + pulse_width = period * duty_cycle / 100; + space_width = period - pulse_width; + dprintk("in init_timing_params, freq=%d, duty_cycle=%d, " + "clk/jiffy=%ld, pulse=%ld, space=%ld, " + "conv_us_to_clocks=%ld\n", + freq, duty_cycle, current_cpu_data.loops_per_jiffy, + pulse_width, space_width, conv_us_to_clocks); + return 0; +} +#else /* ! USE_RDTSC */ +static int init_timing_params(unsigned int new_duty_cycle, + unsigned int new_freq) +{ +/* + * period, pulse/space width are kept with 8 binary places - + * IE multiplied by 256. + */ + if (256 * 1000000L / new_freq * new_duty_cycle / 100 <= + LIRC_SERIAL_TRANSMITTER_LATENCY) + return -EINVAL; + if (256 * 1000000L / new_freq * (100 - new_duty_cycle) / 100 <= + LIRC_SERIAL_TRANSMITTER_LATENCY) + return -EINVAL; + duty_cycle = new_duty_cycle; + freq = new_freq; + period = 256 * 1000000L / freq; + pulse_width = period * duty_cycle / 100; + space_width = period - pulse_width; + dprintk("in init_timing_params, freq=%d pulse=%ld, " + "space=%ld\n", freq, pulse_width, space_width); + return 0; +} +#endif /* USE_RDTSC */ + + +/* return value: space length delta */ + +static long send_pulse_irdeo(unsigned long length) +{ + long rawbits, ret; + int i; + unsigned char output; + unsigned char chunk, shifted; + + /* how many bits have to be sent ? */ + rawbits = length * 1152 / 10000; + if (duty_cycle > 50) + chunk = 3; + else + chunk = 1; + for (i = 0, output = 0x7f; rawbits > 0; rawbits -= 3) { + shifted = chunk << (i * 3); + shifted >>= 1; + output &= (~shifted); + i++; + if (i == 3) { + soutp(UART_TX, output); + while (!(sinp(UART_LSR) & UART_LSR_THRE)) + ; + output = 0x7f; + i = 0; + } + } + if (i != 0) { + soutp(UART_TX, output); + while (!(sinp(UART_LSR) & UART_LSR_TEMT)) + ; + } + + if (i == 0) + ret = (-rawbits) * 10000 / 1152; + else + ret = (3 - i) * 3 *10000 / 1152 + (-rawbits) * 10000 / 1152; + + return ret; +} + +#ifdef USE_RDTSC +/* Version that uses Pentium rdtsc instruction to measure clocks */ + +/* + * This version does sub-microsecond timing using rdtsc instruction, + * and does away with the fudged LIRC_SERIAL_TRANSMITTER_LATENCY + * Implicitly i586 architecture... - Steve + */ + +static long send_pulse_homebrew_softcarrier(unsigned long length) +{ + int flag; + unsigned long target, start, now; + + /* Get going quick as we can */ + rdtscl(start); + on(); + /* Convert length from microseconds to clocks */ + length *= conv_us_to_clocks; + /* And loop till time is up - flipping at right intervals */ + now = start; + target = pulse_width; + flag = 1; + while ((now - start) < length) { + /* Delay till flip time */ + do { + rdtscl(now); + } while ((now - start) < target); + + /* flip */ + if (flag) { + rdtscl(now); + off(); + target += space_width; + } else { + rdtscl(now); on(); + target += pulse_width; + } + flag = !flag; + } + rdtscl(now); + return ((now - start) - length) / conv_us_to_clocks; +} +#else /* ! USE_RDTSC */ +/* Version using udelay() */ + +/* + * here we use fixed point arithmetic, with 8 + * fractional bits. that gets us within 0.1% or so of the right average + * frequency, albeit with some jitter in pulse length - Steve + */ + +/* To match 8 fractional bits used for pulse/space length */ + +static long send_pulse_homebrew_softcarrier(unsigned long length) +{ + int flag; + unsigned long actual, target, d; + length <<= 8; + + actual = 0; target = 0; flag = 0; + while (actual < length) { + if (flag) { + off(); + target += space_width; + } else { + on(); + target += pulse_width; + } + d = (target - actual - + LIRC_SERIAL_TRANSMITTER_LATENCY + 128) >> 8; + /* + * Note - we've checked in ioctl that the pulse/space + * widths are big enough so that d is > 0 + */ + udelay(d); + actual += (d << 8) + LIRC_SERIAL_TRANSMITTER_LATENCY; + flag = !flag; + } + return (actual-length) >> 8; +} +#endif /* USE_RDTSC */ + +static long send_pulse_homebrew(unsigned long length) +{ + if (length <= 0) + return 0; + + if (softcarrier) + return send_pulse_homebrew_softcarrier(length); + else { + on(); + safe_udelay(length); + return 0; + } +} + +static void send_space_irdeo(long length) +{ + if (length <= 0) + return; + + safe_udelay(length); +} + +static void send_space_homebrew(long length) +{ + off(); + if (length <= 0) + return; + safe_udelay(length); +} + +static void rbwrite(lirc_t l) +{ + if (lirc_buffer_full(&rbuf)) { + /* no new signals will be accepted */ + dprintk("Buffer overrun\n"); + return; + } + lirc_buffer_write(&rbuf, (void *)&l); +} + +static void frbwrite(lirc_t l) +{ + /* simple noise filter */ + static lirc_t pulse = 0L, space = 0L; + static unsigned int ptr; + + if (ptr > 0 && (l & PULSE_BIT)) { + pulse += l & PULSE_MASK; + if (pulse > 250) { + rbwrite(space); + rbwrite(pulse | PULSE_BIT); + ptr = 0; + pulse = 0; + } + return; + } + if (!(l & PULSE_BIT)) { + if (ptr == 0) { + if (l > 20000) { + space = l; + ptr++; + return; + } + } else { + if (l > 20000) { + space += pulse; + if (space > PULSE_MASK) + space = PULSE_MASK; + space += l; + if (space > PULSE_MASK) + space = PULSE_MASK; + pulse = 0; + return; + } + rbwrite(space); + rbwrite(pulse | PULSE_BIT); + ptr = 0; + pulse = 0; + } + } + rbwrite(l); +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) +static irqreturn_t irq_handler(int i, void *blah) +#else +static irqreturn_t irq_handler(int i, void *blah, struct pt_regs *regs) +#endif +{ + struct timeval tv; + int status, counter, dcd; + long deltv; + lirc_t data; + static int last_dcd = -1; + + if ((sinp(UART_IIR) & UART_IIR_NO_INT)) { + /* not our interrupt */ + return IRQ_RETVAL(IRQ_NONE); + } + + counter = 0; + do { + counter++; + status = sinp(UART_MSR); + if (counter > RS_ISR_PASS_LIMIT) { + printk(KERN_WARNING LIRC_DRIVER_NAME ": AIEEEE: " + "We're caught!\n"); + break; + } + if ((status & hardware[type].signal_pin_change) + && sense != -1) { + /* get current time */ + do_gettimeofday(&tv); + + /* New mode, written by Trent Piepho + . */ + + /* + * The old format was not very portable. + * We now use an int to pass pulses + * and spaces to user space. + * + * If PULSE_BIT is set a pulse has been + * received, otherwise a space has been + * received. The driver needs to know if your + * receiver is active high or active low, or + * the space/pulse sense could be + * inverted. The bits denoted by PULSE_MASK are + * the length in microseconds. Lengths greater + * than or equal to 16 seconds are clamped to + * PULSE_MASK. All other bits are unused. + * This is a much simpler interface for user + * programs, as well as eliminating "out of + * phase" errors with space/pulse + * autodetection. + */ + + /* calc time since last interrupt in microseconds */ + dcd = (status & hardware[type].signal_pin) ? 1 : 0; + + if (dcd == last_dcd) { + printk(KERN_WARNING LIRC_DRIVER_NAME + ": ignoring spike: %d %d %lx %lx %lx %lx\n", + dcd, sense, + tv.tv_sec, lasttv.tv_sec, + tv.tv_usec, lasttv.tv_usec); + continue; + } + + deltv = tv.tv_sec-lasttv.tv_sec; + if (tv.tv_sec < lasttv.tv_sec || + (tv.tv_sec == lasttv.tv_sec && + tv.tv_usec < lasttv.tv_usec)) { + printk(KERN_WARNING LIRC_DRIVER_NAME + ": AIEEEE: your clock just jumped " + "backwards\n"); + printk(KERN_WARNING LIRC_DRIVER_NAME + ": %d %d %lx %lx %lx %lx\n", + dcd, sense, + tv.tv_sec, lasttv.tv_sec, + tv.tv_usec, lasttv.tv_usec); + data = PULSE_MASK; + } else if (deltv > 15) { + data = PULSE_MASK; /* really long time */ + if (!(dcd^sense)) { + /* sanity check */ + printk(KERN_WARNING LIRC_DRIVER_NAME + ": AIEEEE: " + "%d %d %lx %lx %lx %lx\n", + dcd, sense, + tv.tv_sec, lasttv.tv_sec, + tv.tv_usec, lasttv.tv_usec); + /* + * detecting pulse while this + * MUST be a space! + */ + sense = sense ? 0 : 1; + } + } else + data = (lirc_t) (deltv*1000000 + + tv.tv_usec - + lasttv.tv_usec); + frbwrite(dcd^sense ? data : (data|PULSE_BIT)); + lasttv = tv; + last_dcd = dcd; + wake_up_interruptible(&rbuf.wait_poll); + } + } while (!(sinp(UART_IIR) & UART_IIR_NO_INT)); /* still pending ? */ + return IRQ_RETVAL(IRQ_HANDLED); +} + +static void hardware_init_port(void) +{ + unsigned long flags; + local_irq_save(flags); + + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + /* First of all, disable all interrupts */ + soutp(UART_IER, sinp(UART_IER) & + (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI))); + + /* Clear registers. */ + sinp(UART_LSR); + sinp(UART_RX); + sinp(UART_IIR); + sinp(UART_MSR); + +#if defined(LIRC_SERIAL_NSLU2) + if (type == LIRC_NSLU2) { + /* Setup NSLU2 UART */ + + /* Enable UART */ + soutp(UART_IER, sinp(UART_IER) | UART_IE_IXP42X_UUE); + /* Disable Receiver data Time out interrupt */ + soutp(UART_IER, sinp(UART_IER) & ~UART_IE_IXP42X_RTOIE); + /* set out2 = interrupt unmask; off() doesn't set MCR + on NSLU2 */ + soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2); + } +#endif + + /* Set line for power source */ + off(); + + /* Clear registers again to be sure. */ + sinp(UART_LSR); + sinp(UART_RX); + sinp(UART_IIR); + sinp(UART_MSR); + + switch (type) { + case LIRC_IRDEO: + case LIRC_IRDEO_REMOTE: + /* setup port to 7N1 @ 115200 Baud */ + /* 7N1+start = 9 bits at 115200 ~ 3 bits at 38kHz */ + + /* Set DLAB 1. */ + soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB); + /* Set divisor to 1 => 115200 Baud */ + soutp(UART_DLM, 0); + soutp(UART_DLL, 1); + /* Set DLAB 0 + 7N1 */ + soutp(UART_LCR, UART_LCR_WLEN7); + /* THR interrupt already disabled at this point */ + break; + default: + break; + } + + local_irq_restore(flags); +} + +static int init_port(void) +{ + int i, nlow, nhigh; + + /* Reserve io region. */ +#if defined(LIRC_ALLOW_MMAPPED_IO) + /* + * Future MMAP-Developers: Attention! + * For memory mapped I/O you *might* need to use ioremap() first, + * for the NSLU2 it's done in boot code. + */ + if (((iommap != 0) + && (request_mem_region(iommap, 8 << ioshift, + LIRC_DRIVER_NAME) == NULL)) + || ((iommap == 0) + && (request_region(io, 8, LIRC_DRIVER_NAME) == NULL))) { +#else + if (request_region(io, 8, LIRC_DRIVER_NAME) == NULL) { +#endif + printk(KERN_ERR LIRC_DRIVER_NAME + ": port %04x already in use\n", io); + printk(KERN_WARNING LIRC_DRIVER_NAME + ": use 'setserial /dev/ttySX uart none'\n"); + printk(KERN_WARNING LIRC_DRIVER_NAME + ": or compile the serial port driver as module and\n"); + printk(KERN_WARNING LIRC_DRIVER_NAME + ": make sure this module is loaded first\n"); + return -EBUSY; + } + + hardware_init_port(); + + /* Initialize pulse/space widths */ + init_timing_params(duty_cycle, freq); + + /* If pin is high, then this must be an active low receiver. */ + if (sense == -1) { + /* wait 1/2 sec for the power supply */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) + msleep(500); +#else + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ/2); +#endif + + /* + * probe 9 times every 0.04s, collect "votes" for + * active high/low + */ + nlow = 0; + nhigh = 0; + for (i = 0; i < 9; i++) { + if (sinp(UART_MSR) & hardware[type].signal_pin) + nlow++; + else + nhigh++; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) + msleep(40); +#else + schedule_timeout(HZ/25); +#endif + } + sense = (nlow >= nhigh ? 1 : 0); + printk(KERN_INFO LIRC_DRIVER_NAME ": auto-detected active " + "%s receiver\n", sense ? "low" : "high"); + } else + printk(KERN_INFO LIRC_DRIVER_NAME ": Manually using active " + "%s receiver\n", sense ? "low" : "high"); + + return 0; +} + +static int set_use_inc(void *data) +{ + int result; + unsigned long flags; + + /* Init read buffer. */ + if (lirc_buffer_init(&rbuf, sizeof(lirc_t), RBUF_LEN) < 0) + return -ENOMEM; + + /* initialize timestamp */ + do_gettimeofday(&lasttv); + + result = request_irq(irq, irq_handler, + IRQF_DISABLED | (share_irq ? IRQF_SHARED : 0), + LIRC_DRIVER_NAME, (void *)&hardware); + + switch (result) { + case -EBUSY: + printk(KERN_ERR LIRC_DRIVER_NAME ": IRQ %d busy\n", irq); + lirc_buffer_free(&rbuf); + return -EBUSY; + case -EINVAL: + printk(KERN_ERR LIRC_DRIVER_NAME + ": Bad irq number or handler\n"); + lirc_buffer_free(&rbuf); + return -EINVAL; + default: + dprintk("Interrupt %d, port %04x obtained\n", irq, io); + break; + }; + + local_irq_save(flags); + + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + soutp(UART_IER, sinp(UART_IER)|UART_IER_MSI); + + local_irq_restore(flags); + + MOD_INC_USE_COUNT; + return 0; +} + +static void set_use_dec(void *data) +{ unsigned long flags; + + local_irq_save(flags); + + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + /* First of all, disable all interrupts */ + soutp(UART_IER, sinp(UART_IER) & + (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI))); + local_irq_restore(flags); + + free_irq(irq, (void *)&hardware); + + dprintk("freed IRQ %d\n", irq); + lirc_buffer_free(&rbuf); + + MOD_DEC_USE_COUNT; +} + +static ssize_t lirc_write(struct file *file, const char *buf, + size_t n, loff_t *ppos) +{ + int i, count; + unsigned long flags; + long delta = 0; + + if (!(hardware[type].features&LIRC_CAN_SEND_PULSE)) + return -EBADF; + + if (n % sizeof(lirc_t)) + return -EINVAL; + count = n / sizeof(lirc_t); + if (count > WBUF_LEN || count % 2 == 0) + return -EINVAL; + if (copy_from_user(wbuf, buf, n)) + return -EFAULT; + local_irq_save(flags); + if (type == LIRC_IRDEO) { + /* DTR, RTS down */ + on(); + } + for (i = 0; i < count; i++) { + if (i%2) + hardware[type].send_space(wbuf[i]-delta); + else + delta = hardware[type].send_pulse(wbuf[i]); + } + off(); + local_irq_restore(flags); + return n; +} + +static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd, + unsigned long arg) +{ + int result; + unsigned long value; + unsigned int ivalue; + + switch (cmd) { + case LIRC_GET_SEND_MODE: + if (!(hardware[type].features&LIRC_CAN_SEND_MASK)) + return -ENOIOCTLCMD; + + result = put_user(LIRC_SEND2MODE + (hardware[type].features&LIRC_CAN_SEND_MASK), + (unsigned long *) arg); + if (result) + return result; + break; + + case LIRC_SET_SEND_MODE: + if (!(hardware[type].features&LIRC_CAN_SEND_MASK)) + return -ENOIOCTLCMD; + + result = get_user(value, (unsigned long *) arg); + if (result) + return result; + /* only LIRC_MODE_PULSE supported */ + if (value != LIRC_MODE_PULSE) + return -ENOSYS; + break; + + case LIRC_GET_LENGTH: + return -ENOSYS; + break; + + case LIRC_SET_SEND_DUTY_CYCLE: + dprintk("SET_SEND_DUTY_CYCLE\n"); + if (!(hardware[type].features&LIRC_CAN_SET_SEND_DUTY_CYCLE)) + return -ENOIOCTLCMD; + + result = get_user(ivalue, (unsigned int *) arg); + if (result) + return result; + if (ivalue <= 0 || ivalue > 100) + return -EINVAL; + return init_timing_params(ivalue, freq); + break; + + case LIRC_SET_SEND_CARRIER: + dprintk("SET_SEND_CARRIER\n"); + if (!(hardware[type].features&LIRC_CAN_SET_SEND_CARRIER)) + return -ENOIOCTLCMD; + + result = get_user(ivalue, (unsigned int *) arg); + if (result) + return result; + if (ivalue > 500000 || ivalue < 20000) + return -EINVAL; + return init_timing_params(duty_cycle, ivalue); + break; + + default: + return -ENOIOCTLCMD; + } + return 0; +} + +static struct file_operations lirc_fops = { + .owner = THIS_MODULE, + .write = lirc_write, + .ioctl = lirc_ioctl, +}; + +static struct lirc_driver driver = { + .name = LIRC_DRIVER_NAME, + .minor = -1, + .code_length = 1, + .sample_rate = 0, + .data = NULL, + .add_to_buf = NULL, +#ifndef LIRC_REMOVE_DURING_EXPORT + .get_queue = NULL, +#endif + .rbuf = &rbuf, + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .fops = &lirc_fops, + .dev = NULL, + .owner = THIS_MODULE, +}; + +#ifdef MODULE + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) +static struct platform_device *lirc_serial_dev; + +static int __devinit lirc_serial_probe(struct platform_device *dev) +{ + return 0; +} + +static int __devexit lirc_serial_remove(struct platform_device *dev) +{ + return 0; +} + +static int lirc_serial_suspend(struct platform_device *dev, + pm_message_t state) +{ + /* Set DLAB 0. */ + soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB)); + + /* Disable all interrupts */ + soutp(UART_IER, sinp(UART_IER) & + (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI))); + + /* Clear registers. */ + sinp(UART_LSR); + sinp(UART_RX); + sinp(UART_IIR); + sinp(UART_MSR); + + return 0; +} + +static int lirc_serial_resume(struct platform_device *dev) +{ + unsigned long flags; + + hardware_init_port(); + + local_irq_save(flags); + /* Enable Interrupt */ + do_gettimeofday(&lasttv); + soutp(UART_IER, sinp(UART_IER)|UART_IER_MSI); + off(); + + lirc_buffer_clear(&rbuf); + + local_irq_restore(flags); + + return 0; +} + +static struct platform_driver lirc_serial_driver = { + .probe = lirc_serial_probe, + .remove = __devexit_p(lirc_serial_remove), + .suspend = lirc_serial_suspend, + .resume = lirc_serial_resume, + .driver = { + .name = "lirc_serial", + .owner = THIS_MODULE, + }, +}; + +static int __init lirc_serial_init(void) +{ + int result; + + result = platform_driver_register(&lirc_serial_driver); + if (result) { + printk("lirc register returned %d\n", result); + return result; + } + + lirc_serial_dev = platform_device_alloc("lirc_serial", 0); + if (!lirc_serial_dev) { + result = -ENOMEM; + goto exit_driver_unregister; + } + + result = platform_device_add(lirc_serial_dev); + if (result) + goto exit_device_put; + + return 0; + +exit_device_put: + platform_device_put(lirc_serial_dev); +exit_driver_unregister: + platform_driver_unregister(&lirc_serial_driver); + return result; +} + +static void __exit lirc_serial_exit(void) +{ + platform_device_unregister(lirc_serial_dev); + platform_driver_unregister(&lirc_serial_driver); +} +#endif + +static int __init lirc_serial_init_module(void) +{ + int result; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + result = lirc_serial_init(); + if (result) + return result; +#endif + switch (type) { + case LIRC_HOMEBREW: + case LIRC_IRDEO: + case LIRC_IRDEO_REMOTE: + case LIRC_ANIMAX: + case LIRC_IGOR: +#if defined(LIRC_SERIAL_NSLU2) + case LIRC_NSLU2: +#endif + break; + default: + result = -EINVAL; + goto exit_serial_exit; + } + if (!softcarrier) { + switch (type) { + case LIRC_HOMEBREW: + case LIRC_IGOR: + case LIRC_NSLU2: + hardware[type].features &= + ~(LIRC_CAN_SET_SEND_DUTY_CYCLE| + LIRC_CAN_SET_SEND_CARRIER); + break; + } + } + + result = init_port(); + if (result < 0) + goto exit_serial_exit; + driver.features = hardware[type].features; + driver.minor = lirc_register_driver(&driver); + if (driver.minor < 0) { + printk(KERN_ERR LIRC_DRIVER_NAME + ": register_chrdev failed!\n"); + result = -EIO; + goto exit_release; + } + + printk(KERN_INFO + LIRC_DRIVER_NAME " " LIRC_DRIVER_VERSION " registered\n"); + dprintk("type = %d\n", type); + dprintk("IRQ = %d, port = %04x\n", irq, io); + dprintk("share_irq = %d\n", share_irq); +#ifdef LIRC_SERIAL_TRANSMITTER + dprintk("txsense = %d\n", txsense); +#endif + dprintk("softcarrier = %d\n", softcarrier); + + return 0; +exit_release: + release_region(io, 8); +exit_serial_exit: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + lirc_serial_exit(); +#endif + return result; +} + +static void __exit lirc_serial_exit_module(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + lirc_serial_exit(); +#endif +#if defined(LIRC_ALLOW_MMAPPED_IO) + if (iommap != 0) + release_mem_region(iommap, 8 << ioshift); + else + release_region(io, 8); +#else + release_region(io, 8); +#endif + lirc_unregister_driver(driver.minor); + dprintk("cleaned up module\n"); +} + + +module_init(lirc_serial_init_module); +module_exit(lirc_serial_exit_module); + +MODULE_DESCRIPTION("Infra-red receiver driver for serial ports."); +MODULE_AUTHOR("Ralph Metzler, Trent Piepho, Ben Pfaff, " + "Christoph Bartelmus, Andrei Tanas"); +MODULE_LICENSE("GPL"); + +module_param(type, int, S_IRUGO); +#if defined(LIRC_SERIAL_NSLU2) +MODULE_PARM_DESC(type, "Hardware type (0 = home-brew, 1 = IRdeo," + " 2 = IRdeo Remote, 3 = AnimaX, 4 = IgorPlug," + " 5 = NSLU2 RX:CTS2/TX:GreenLED)"); +#else +MODULE_PARM_DESC(type, "Hardware type (0 = home-brew, 1 = IRdeo," + " 2 = IRdeo Remote, 3 = AnimaX, 4 = IgorPlug)"); +#endif + +module_param(io, int, S_IRUGO); +MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)"); + +#if defined(LIRC_ALLOW_MMAPPED_IO) +/* some architectures (e.g. intel xscale) have memory mapped registers */ +module_param(iommap, bool, S_IRUGO); +MODULE_PARM_DESC(iommap, "physical base for memory mapped I/O" + " (0 = no memory mapped io)"); + +/* + * some architectures (e.g. intel xscale) align the 8bit serial registers + * on 32bit word boundaries. + * See linux-kernel/serial/8250.c serial_in()/out() + */ +module_param(ioshift, int, S_IRUGO); +MODULE_PARM_DESC(ioshift, "shift I/O register offset (0 = no shift)"); +#endif + +module_param(irq, int, S_IRUGO); +MODULE_PARM_DESC(irq, "Interrupt (4 or 3)"); + +module_param(share_irq, bool, S_IRUGO); +MODULE_PARM_DESC(share_irq, "Share interrupts (0 = off, 1 = on)"); + +module_param(sense, bool, S_IRUGO); +MODULE_PARM_DESC(sense, "Override autodetection of IR receiver circuit" + " (0 = active high, 1 = active low )"); + +#ifdef LIRC_SERIAL_TRANSMITTER +module_param(txsense, bool, S_IRUGO); +MODULE_PARM_DESC(txsense, "Sense of transmitter circuit" + " (0 = active high, 1 = active low )"); +#endif + +module_param(softcarrier, bool, S_IRUGO); +MODULE_PARM_DESC(softcarrier, "Software carrier (0 = off, 1 = on)"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +EXPORT_NO_SYMBOLS; + +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/lirc/lirc_serial/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_serial/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_it87/lirc_it87.c +++ linux-2.6.32/ubuntu/lirc/lirc_it87/lirc_it87.c @@ -0,0 +1,1012 @@ +/* + * LIRC driver for ITE IT8712/IT8705/IT8720 CIR port + * + * Copyright (C) 2001 Hans-Günter Lütke Uphues + * + * 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 + * + * ITE IT8705, IT8712(not tested) and IT8720 CIR-port support for lirc based + * via cut and paste from lirc_sir.c (C) 2000 Milan Pikula + * + * Attention: Sendmode only tested with debugging logs + * + * 2001/02/27 Christoph Bartelmus : + * reimplemented read function + * 2005/06/05 Andrew Calkin implemented support for Asus Digimatrix, + * based on work of the following member of the Outertrack Digimatrix + * Forum: Art103 + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +#include +#include +#include +#else +#include +#include +#include +#endif + +#include + +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" +#include "../kcompat.h" + +#include "lirc_it87.h" + +#ifdef LIRC_IT87_DIGIMATRIX +static int digimatrix = 1; +static int it87_freq = 36; /* kHz */ +static int irq = 9; +#else +static int digimatrix; +static int it87_freq = 38; /* kHz */ +static int irq = IT87_CIR_DEFAULT_IRQ; +#endif + +static unsigned long it87_bits_in_byte_out; +static unsigned long it87_send_counter; +static unsigned char it87_RXEN_mask = IT87_CIR_RCR_RXEN; + +#define RBUF_LEN 1024 +#define WBUF_LEN 1024 + +#define LIRC_DRIVER_NAME "lirc_it87" + +/* timeout for sequences in jiffies (=5/100s) */ +/* must be longer than TIME_CONST */ +#define IT87_TIMEOUT (HZ*5/100) + +/* module parameters */ +static int debug; +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +static int io = IT87_CIR_DEFAULT_IOBASE; +/* receiver demodulator default: off */ +static int it87_enable_demodulator; + +static int timer_enabled; +static DEFINE_SPINLOCK(timer_lock); +static struct timer_list timerlist; +/* time of last signal change detected */ +static struct timeval last_tv = {0, 0}; +/* time of last UART data ready interrupt */ +static struct timeval last_intr_tv = {0, 0}; +static int last_value; + +static DECLARE_WAIT_QUEUE_HEAD(lirc_read_queue); + +static DEFINE_SPINLOCK(hardware_lock); +static DEFINE_SPINLOCK(dev_lock); + +static lirc_t rx_buf[RBUF_LEN]; +unsigned int rx_tail, rx_head; +static lirc_t tx_buf[WBUF_LEN]; + +/* SECTION: Prototypes */ + +/* Communication with user-space */ +static int lirc_open(struct inode *inode, struct file *file); +static int lirc_close(struct inode *inode, struct file *file); +static unsigned int lirc_poll(struct file *file, poll_table *wait); +static ssize_t lirc_read(struct file *file, char *buf, + size_t count, loff_t *ppos); +static ssize_t lirc_write(struct file *file, const char *buf, + size_t n, loff_t *pos); +static int lirc_ioctl(struct inode *node, struct file *filep, + unsigned int cmd, unsigned long arg); +static void add_read_queue(int flag, unsigned long val); +static int init_chrdev(void); +static void drop_chrdev(void); + /* Hardware */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static irqreturn_t it87_interrupt(int irq, void *dev_id, + struct pt_regs *regs); +#else +static irqreturn_t it87_interrupt(int irq, void *dev_id); +#endif +static void send_space(unsigned long len); +static void send_pulse(unsigned long len); +static void init_send(void); +static void terminate_send(unsigned long len); +static int init_hardware(void); +static void drop_hardware(void); +/* Initialisation */ +static int init_port(void); +static void drop_port(void); + + +/* SECTION: Communication with user-space */ + +static int lirc_open(struct inode *inode, struct file *file) +{ + spin_lock(&dev_lock); + if (MOD_IN_USE) { + spin_unlock(&dev_lock); + return -EBUSY; + } + MOD_INC_USE_COUNT; + spin_unlock(&dev_lock); + return 0; +} + + +static int lirc_close(struct inode *inode, struct file *file) +{ + MOD_DEC_USE_COUNT; + return 0; +} + + +static unsigned int lirc_poll(struct file *file, poll_table *wait) +{ + poll_wait(file, &lirc_read_queue, wait); + if (rx_head != rx_tail) + return POLLIN | POLLRDNORM; + return 0; +} + + +static ssize_t lirc_read(struct file *file, char *buf, + size_t count, loff_t *ppos) +{ + int n = 0; + int retval = 0; + + while (n < count) { + if (file->f_flags & O_NONBLOCK && rx_head == rx_tail) { + retval = -EAGAIN; + break; + } + retval = wait_event_interruptible(lirc_read_queue, + rx_head != rx_tail); + if (retval) + break; + + if (copy_to_user((void *) buf + n, (void *) (rx_buf + rx_head), + sizeof(lirc_t))) { + retval = -EFAULT; + break; + } + rx_head = (rx_head + 1) & (RBUF_LEN - 1); + n += sizeof(lirc_t); + } + if (n) + return n; + return retval; +} + + +static ssize_t lirc_write(struct file *file, const char *buf, + size_t n, loff_t *pos) +{ + int i = 0; + + if (n % sizeof(lirc_t) || (n / sizeof(lirc_t)) > WBUF_LEN) + return -EINVAL; + if (copy_from_user(tx_buf, buf, n)) + return -EFAULT; + n /= sizeof(lirc_t); + init_send(); + while (1) { + if (i >= n) + break; + if (tx_buf[i]) + send_pulse(tx_buf[i]); + i++; + if (i >= n) + break; + if (tx_buf[i]) + send_space(tx_buf[i]); + i++; + } + terminate_send(tx_buf[i - 1]); + return n; +} + + +static int lirc_ioctl(struct inode *node, struct file *filep, + unsigned int cmd, unsigned long arg) +{ + int retval = 0; + unsigned long value = 0; + unsigned int ivalue; + unsigned long hw_flags; + + if (cmd == LIRC_GET_FEATURES) + value = LIRC_CAN_SEND_PULSE | + LIRC_CAN_SET_SEND_CARRIER | + LIRC_CAN_REC_MODE2; + else if (cmd == LIRC_GET_SEND_MODE) + value = LIRC_MODE_PULSE; + else if (cmd == LIRC_GET_REC_MODE) + value = LIRC_MODE_MODE2; + + switch (cmd) { + case LIRC_GET_FEATURES: + case LIRC_GET_SEND_MODE: + case LIRC_GET_REC_MODE: + retval = put_user(value, (unsigned long *) arg); + break; + + case LIRC_SET_SEND_MODE: + case LIRC_SET_REC_MODE: + retval = get_user(value, (unsigned long *) arg); + break; + + case LIRC_SET_SEND_CARRIER: + retval = get_user(ivalue, (unsigned int *) arg); + if (retval) + return retval; + ivalue /= 1000; + if (ivalue > IT87_CIR_FREQ_MAX || + ivalue < IT87_CIR_FREQ_MIN) + return -EINVAL; + + it87_freq = ivalue; + + spin_lock_irqsave(&hardware_lock, hw_flags); + outb(((inb(io + IT87_CIR_TCR2) & IT87_CIR_TCR2_TXMPW) | + (it87_freq - IT87_CIR_FREQ_MIN) << 3), + io + IT87_CIR_TCR2); + spin_unlock_irqrestore(&hardware_lock, hw_flags); + dprintk("demodulation frequency: %d kHz\n", it87_freq); + + break; + + default: + retval = -EINVAL; + } + + if (retval) + return retval; + + if (cmd == LIRC_SET_REC_MODE) { + if (value != LIRC_MODE_MODE2) + retval = -ENOSYS; + } else if (cmd == LIRC_SET_SEND_MODE) { + if (value != LIRC_MODE_PULSE) + retval = -ENOSYS; + } + return retval; +} + +static void add_read_queue(int flag, unsigned long val) +{ + unsigned int new_rx_tail; + lirc_t newval; + + dprintk("add flag %d with val %lu\n", flag, val); + + newval = val & PULSE_MASK; + + /* + * statistically, pulses are ~TIME_CONST/2 too long. we could + * maybe make this more exact, but this is good enough + */ + if (flag) { + /* pulse */ + if (newval > TIME_CONST / 2) + newval -= TIME_CONST / 2; + else /* should not ever happen */ + newval = 1; + newval |= PULSE_BIT; + } else + newval += TIME_CONST / 2; + new_rx_tail = (rx_tail + 1) & (RBUF_LEN - 1); + if (new_rx_tail == rx_head) { + dprintk("Buffer overrun.\n"); + return; + } + rx_buf[rx_tail] = newval; + rx_tail = new_rx_tail; + wake_up_interruptible(&lirc_read_queue); +} + + +static struct file_operations lirc_fops = { + .owner = THIS_MODULE, + .read = lirc_read, + .write = lirc_write, + .poll = lirc_poll, + .ioctl = lirc_ioctl, + .open = lirc_open, + .release = lirc_close, +}; + +static int set_use_inc(void *data) +{ + return 0; +} + +static void set_use_dec(void *data) +{ +} + +static struct lirc_driver driver = { + .name = LIRC_DRIVER_NAME, + .minor = -1, + .code_length = 1, + .sample_rate = 0, + .data = NULL, + .add_to_buf = NULL, +#ifndef LIRC_REMOVE_DURING_EXPORT + .get_queue = NULL, +#endif + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .fops = &lirc_fops, + .dev = NULL, + .owner = THIS_MODULE, +}; + + +static int init_chrdev(void) +{ + driver.minor = lirc_register_driver(&driver); + + if (driver.minor < 0) { + printk(KERN_ERR LIRC_DRIVER_NAME ": init_chrdev() failed.\n"); + return -EIO; + } + return 0; +} + + +static void drop_chrdev(void) +{ + lirc_unregister_driver(driver.minor); +} + + +/* SECTION: Hardware */ +static long delta(struct timeval *tv1, struct timeval *tv2) +{ + unsigned long deltv; + + deltv = tv2->tv_sec - tv1->tv_sec; + if (deltv > 15) + deltv = 0xFFFFFF; + else + deltv = deltv*1000000 + tv2->tv_usec - tv1->tv_usec; + return deltv; +} + +static void it87_timeout(unsigned long data) +{ + unsigned long flags; + + /* avoid interference with interrupt */ + spin_lock_irqsave(&timer_lock, flags); + + if (digimatrix) { + /* We have timed out. Disable the RX mechanism. */ + + outb((inb(io + IT87_CIR_RCR) & ~IT87_CIR_RCR_RXEN) | + IT87_CIR_RCR_RXACT, io + IT87_CIR_RCR); + if (it87_RXEN_mask) + outb(inb(io + IT87_CIR_RCR) | IT87_CIR_RCR_RXEN, + io + IT87_CIR_RCR); + dprintk(" TIMEOUT\n"); + timer_enabled = 0; + + /* fifo clear */ + outb(inb(io + IT87_CIR_TCR1) | IT87_CIR_TCR1_FIFOCLR, + io+IT87_CIR_TCR1); + + } else { + /* + * if last received signal was a pulse, but receiving stopped + * within the 9 bit frame, we need to finish this pulse and + * simulate a signal change to from pulse to space. Otherwise + * upper layers will receive two sequences next time. + */ + + if (last_value) { + unsigned long pulse_end; + + /* determine 'virtual' pulse end: */ + pulse_end = delta(&last_tv, &last_intr_tv); + dprintk("timeout add %d for %lu usec\n", + last_value, pulse_end); + add_read_queue(last_value, pulse_end); + last_value = 0; + last_tv = last_intr_tv; + } + } + spin_unlock_irqrestore(&timer_lock, flags); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static irqreturn_t it87_interrupt(int irq, void *dev_id, struct pt_regs *regs) +#else +static irqreturn_t it87_interrupt(int irq, void *dev_id) +#endif +{ + unsigned char data; + struct timeval curr_tv; + static unsigned long deltv; + unsigned long deltintrtv; + unsigned long flags, hw_flags; + int iir, lsr; + int fifo = 0; + static char lastbit; + char bit; + + /* Bit duration in microseconds */ + const unsigned long bit_duration = 1000000ul / + (115200 / IT87_CIR_BAUDRATE_DIVISOR); + + + iir = inb(io + IT87_CIR_IIR); + + switch (iir & IT87_CIR_IIR_IID) { + case 0x4: + case 0x6: + lsr = inb(io + IT87_CIR_RSR) & (IT87_CIR_RSR_RXFTO | + IT87_CIR_RSR_RXFBC); + fifo = lsr & IT87_CIR_RSR_RXFBC; + dprintk("iir: 0x%x fifo: 0x%x\n", iir, lsr); + + /* avoid interference with timer */ + spin_lock_irqsave(&timer_lock, flags); + spin_lock_irqsave(&hardware_lock, hw_flags); + if (digimatrix) { + static unsigned long acc_pulse; + static unsigned long acc_space; + + do { + data = inb(io + IT87_CIR_DR); + data = ~data; + fifo--; + if (data != 0x00) { + if (timer_enabled) + del_timer(&timerlist); + /* + * start timer for end of + * sequence detection + */ + timerlist.expires = jiffies + + IT87_TIMEOUT; + add_timer(&timerlist); + timer_enabled = 1; + } + /* Loop through */ + for (bit = 0; bit < 8; ++bit) { + if ((data >> bit) & 1) { + ++acc_pulse; + if (lastbit == 0) { + add_read_queue(0, + acc_space * + bit_duration); + acc_space = 0; + } + } else { + ++acc_space; + if (lastbit == 1) { + add_read_queue(1, + acc_pulse * + bit_duration); + acc_pulse = 0; + } + } + lastbit = (data >> bit) & 1; + } + + } while (fifo != 0); + } else { /* Normal Operation */ + do { + del_timer(&timerlist); + data = inb(io + IT87_CIR_DR); + + dprintk("data=%.2x\n", data); + do_gettimeofday(&curr_tv); + deltv = delta(&last_tv, &curr_tv); + deltintrtv = delta(&last_intr_tv, &curr_tv); + + dprintk("t %lu , d %d\n", + deltintrtv, (int)data); + + /* + * if nothing came in last 2 cycles, + * it was gap + */ + if (deltintrtv > TIME_CONST * 2) { + if (last_value) { + dprintk("GAP\n"); + + /* simulate signal change */ + add_read_queue(last_value, + deltv - + deltintrtv); + last_value = 0; + last_tv.tv_sec = + last_intr_tv.tv_sec; + last_tv.tv_usec = + last_intr_tv.tv_usec; + deltv = deltintrtv; + } + } + data = 1; + if (data ^ last_value) { + /* + * deltintrtv > 2*TIME_CONST, + * remember ? the other case is + * timeout + */ + add_read_queue(last_value, + deltv-TIME_CONST); + last_value = data; + last_tv = curr_tv; + if (last_tv.tv_usec >= TIME_CONST) + last_tv.tv_usec -= TIME_CONST; + else { + last_tv.tv_sec--; + last_tv.tv_usec += 1000000 - + TIME_CONST; + } + } + last_intr_tv = curr_tv; + if (data) { + /* + * start timer for end of + * sequence detection + */ + timerlist.expires = + jiffies + IT87_TIMEOUT; + add_timer(&timerlist); + } + outb((inb(io + IT87_CIR_RCR) & + ~IT87_CIR_RCR_RXEN) | + IT87_CIR_RCR_RXACT, + io + IT87_CIR_RCR); + if (it87_RXEN_mask) + outb(inb(io + IT87_CIR_RCR) | + IT87_CIR_RCR_RXEN, + io + IT87_CIR_RCR); + fifo--; + } while (fifo != 0); + } + spin_unlock_irqrestore(&hardware_lock, hw_flags); + spin_unlock_irqrestore(&timer_lock, flags); + + return IRQ_RETVAL(IRQ_HANDLED); + + default: + /* not our irq */ + dprintk("unknown IRQ (shouldn't happen) !!\n"); + return IRQ_RETVAL(IRQ_NONE); + } +} + + +static void send_it87(unsigned long len, unsigned long stime, + unsigned char send_byte, unsigned int count_bits) +{ + long count = len / stime; + long time_left = 0; + static unsigned char byte_out; + unsigned long hw_flags; + + dprintk("%s: len=%ld, sb=%d\n", __func__, len, send_byte); + + time_left = (long)len - (long)count * (long)stime; + count += ((2 * time_left) / stime); + while (count) { + long i = 0; + for (i = 0; i < count_bits; i++) { + byte_out = (byte_out << 1) | (send_byte & 1); + it87_bits_in_byte_out++; + } + if (it87_bits_in_byte_out == 8) { + dprintk("out=0x%x, tsr_txfbc: 0x%x\n", + byte_out, + inb(io + IT87_CIR_TSR) & + IT87_CIR_TSR_TXFBC); + + while ((inb(io + IT87_CIR_TSR) & + IT87_CIR_TSR_TXFBC) >= IT87_CIR_FIFO_SIZE) + ; + + spin_lock_irqsave(&hardware_lock, hw_flags); + outb(byte_out, io + IT87_CIR_DR); + spin_unlock_irqrestore(&hardware_lock, hw_flags); + + it87_bits_in_byte_out = 0; + it87_send_counter++; + byte_out = 0; + } + count--; + } +} + + +/*TODO: maybe exchange space and pulse because it8705 only modulates 0-bits */ + +static void send_space(unsigned long len) +{ + send_it87(len, TIME_CONST, IT87_CIR_SPACE, IT87_CIR_BAUDRATE_DIVISOR); +} + +static void send_pulse(unsigned long len) +{ + send_it87(len, TIME_CONST, IT87_CIR_PULSE, IT87_CIR_BAUDRATE_DIVISOR); +} + + +static void init_send() +{ + unsigned long flags; + + spin_lock_irqsave(&hardware_lock, flags); + /* RXEN=0: receiver disable */ + it87_RXEN_mask = 0; + outb(inb(io + IT87_CIR_RCR) & ~IT87_CIR_RCR_RXEN, + io + IT87_CIR_RCR); + spin_unlock_irqrestore(&hardware_lock, flags); + it87_bits_in_byte_out = 0; + it87_send_counter = 0; +} + + +static void terminate_send(unsigned long len) +{ + unsigned long flags; + unsigned long last = 0; + + last = it87_send_counter; + /* make sure all necessary data has been sent */ + while (last == it87_send_counter) + send_space(len); + /* wait until all data sent */ + while ((inb(io + IT87_CIR_TSR) & IT87_CIR_TSR_TXFBC) != 0) + ; + /* then re-enable receiver */ + spin_lock_irqsave(&hardware_lock, flags); + it87_RXEN_mask = IT87_CIR_RCR_RXEN; + outb(inb(io + IT87_CIR_RCR) | IT87_CIR_RCR_RXEN, + io + IT87_CIR_RCR); + spin_unlock_irqrestore(&hardware_lock, flags); +} + + +static int init_hardware(void) +{ + unsigned long flags; + unsigned char it87_rcr = 0; + + spin_lock_irqsave(&hardware_lock, flags); + /* init cir-port */ + /* enable r/w-access to Baudrate-Register */ + outb(IT87_CIR_IER_BR, io + IT87_CIR_IER); + outb(IT87_CIR_BAUDRATE_DIVISOR % 0x100, io+IT87_CIR_BDLR); + outb(IT87_CIR_BAUDRATE_DIVISOR / 0x100, io+IT87_CIR_BDHR); + /* Baudrate Register off, define IRQs: Input only */ + if (digimatrix) { + outb(IT87_CIR_IER_IEC | IT87_CIR_IER_RFOIE, io + IT87_CIR_IER); + /* RX: HCFS=0, RXDCR = 001b (33,75..38,25 kHz), RXEN=1 */ + } else { + outb(IT87_CIR_IER_IEC | IT87_CIR_IER_RDAIE, io + IT87_CIR_IER); + /* RX: HCFS=0, RXDCR = 001b (35,6..40,3 kHz), RXEN=1 */ + } + it87_rcr = (IT87_CIR_RCR_RXEN & it87_RXEN_mask) | 0x1; + if (it87_enable_demodulator) + it87_rcr |= IT87_CIR_RCR_RXEND; + outb(it87_rcr, io + IT87_CIR_RCR); + if (digimatrix) { + /* Set FIFO depth to 1 byte, and disable TX */ + outb(inb(io + IT87_CIR_TCR1) | 0x00, + io + IT87_CIR_TCR1); + + /* + * TX: it87_freq (36kHz), 'reserved' sensitivity + * setting (0x00) + */ + outb(((it87_freq - IT87_CIR_FREQ_MIN) << 3) | 0x00, + io + IT87_CIR_TCR2); + } else { + /* TX: 38kHz, 13,3us (pulse-width) */ + outb(((it87_freq - IT87_CIR_FREQ_MIN) << 3) | 0x06, + io + IT87_CIR_TCR2); + } + spin_unlock_irqrestore(&hardware_lock, flags); + return 0; +} + + +static void drop_hardware(void) +{ + unsigned long flags; + + spin_lock_irqsave(&hardware_lock, flags); + disable_irq(irq); + /* receiver disable */ + it87_RXEN_mask = 0; + outb(0x1, io + IT87_CIR_RCR); + /* turn off irqs */ + outb(0, io + IT87_CIR_IER); + /* fifo clear */ + outb(IT87_CIR_TCR1_FIFOCLR, io+IT87_CIR_TCR1); + /* reset */ + outb(IT87_CIR_IER_RESET, io+IT87_CIR_IER); + enable_irq(irq); + spin_unlock_irqrestore(&hardware_lock, flags); +} + + +static unsigned char it87_read(unsigned char port) +{ + outb(port, IT87_ADRPORT); + return inb(IT87_DATAPORT); +} + + +static void it87_write(unsigned char port, unsigned char data) +{ + outb(port, IT87_ADRPORT); + outb(data, IT87_DATAPORT); +} + + +/* SECTION: Initialisation */ + +static int init_port(void) +{ + unsigned long hw_flags; + int retval = 0; + + unsigned char init_bytes[4] = IT87_INIT; + unsigned char it87_chipid = 0; + unsigned char ldn = 0; + unsigned int it87_io = 0; + unsigned int it87_irq = 0; + + /* Enter MB PnP Mode */ + outb(init_bytes[0], IT87_ADRPORT); + outb(init_bytes[1], IT87_ADRPORT); + outb(init_bytes[2], IT87_ADRPORT); + outb(init_bytes[3], IT87_ADRPORT); + + /* 8712 or 8705 ? */ + it87_chipid = it87_read(IT87_CHIP_ID1); + if (it87_chipid != 0x87) { + retval = -ENXIO; + return retval; + } + it87_chipid = it87_read(IT87_CHIP_ID2); + if ((it87_chipid != 0x12) && + (it87_chipid != 0x05) && + (it87_chipid != 0x20)) { + printk(KERN_INFO LIRC_DRIVER_NAME + ": no IT8705/12/20 found, exiting..\n"); + retval = -ENXIO; + return retval; + } + printk(KERN_INFO LIRC_DRIVER_NAME + ": found IT87%.2x.\n", + it87_chipid); + + /* get I/O-Port and IRQ */ + if (it87_chipid == 0x12) + ldn = IT8712_CIR_LDN; + else + ldn = IT8705_CIR_LDN; + it87_write(IT87_LDN, ldn); + + it87_io = it87_read(IT87_CIR_BASE_MSB) * 256 + + it87_read(IT87_CIR_BASE_LSB); + if (it87_io == 0) { + if (io == 0) + io = IT87_CIR_DEFAULT_IOBASE; + printk(KERN_INFO LIRC_DRIVER_NAME + ": set default io 0x%x\n", + io); + it87_write(IT87_CIR_BASE_MSB, io / 0x100); + it87_write(IT87_CIR_BASE_LSB, io % 0x100); + } else + io = it87_io; + + it87_irq = it87_read(IT87_CIR_IRQ); + if (digimatrix || it87_irq == 0) { + if (irq == 0) + irq = IT87_CIR_DEFAULT_IRQ; + printk(KERN_INFO LIRC_DRIVER_NAME + ": set default irq 0x%x\n", + irq); + it87_write(IT87_CIR_IRQ, irq); + } else + irq = it87_irq; + + spin_lock_irqsave(&hardware_lock, hw_flags); + /* reset */ + outb(IT87_CIR_IER_RESET, io+IT87_CIR_IER); + /* fifo clear */ + outb(IT87_CIR_TCR1_FIFOCLR | + /* IT87_CIR_TCR1_ILE | */ + IT87_CIR_TCR1_TXRLE | + IT87_CIR_TCR1_TXENDF, io+IT87_CIR_TCR1); + spin_unlock_irqrestore(&hardware_lock, hw_flags); + + /* get I/O port access and IRQ line */ + if (request_region(io, 8, LIRC_DRIVER_NAME) == NULL) { + printk(KERN_ERR LIRC_DRIVER_NAME + ": i/o port 0x%.4x already in use.\n", io); + /* Leaving MB PnP Mode */ + it87_write(IT87_CFGCTRL, 0x2); + return -EBUSY; + } + + /* activate CIR-Device */ + it87_write(IT87_CIR_ACT, 0x1); + + /* Leaving MB PnP Mode */ + it87_write(IT87_CFGCTRL, 0x2); + + retval = request_irq(irq, it87_interrupt, 0 /*IRQF_DISABLED*/, + LIRC_DRIVER_NAME, NULL); + if (retval < 0) { + printk(KERN_ERR LIRC_DRIVER_NAME + ": IRQ %d already in use.\n", + irq); + release_region(io, 8); + return retval; + } + + printk(KERN_INFO LIRC_DRIVER_NAME + ": I/O port 0x%.4x, IRQ %d.\n", io, irq); + + init_timer(&timerlist); + timerlist.function = it87_timeout; + timerlist.data = 0xabadcafe; + + return 0; +} + + +static void drop_port(void) +{ +#if 0 + unsigned char init_bytes[4] = IT87_INIT; + + /* Enter MB PnP Mode */ + outb(init_bytes[0], IT87_ADRPORT); + outb(init_bytes[1], IT87_ADRPORT); + outb(init_bytes[2], IT87_ADRPORT); + outb(init_bytes[3], IT87_ADRPORT); + + /* deactivate CIR-Device */ + it87_write(IT87_CIR_ACT, 0x0); + + /* Leaving MB PnP Mode */ + it87_write(IT87_CFGCTRL, 0x2); +#endif + + del_timer_sync(&timerlist); + free_irq(irq, NULL); + release_region(io, 8); +} + + +static int init_lirc_it87(void) +{ + int retval; + + init_waitqueue_head(&lirc_read_queue); + retval = init_port(); + if (retval < 0) + return retval; + init_hardware(); + printk(KERN_INFO LIRC_DRIVER_NAME ": Installed.\n"); + return 0; +} + + +static int __init lirc_it87_init(void) +{ + int retval; + + retval = init_chrdev(); + if (retval < 0) + return retval; + retval = init_lirc_it87(); + if (retval) { + drop_chrdev(); + return retval; + } + return 0; +} + + +static void __exit lirc_it87_exit(void) +{ + drop_hardware(); + drop_chrdev(); + drop_port(); + printk(KERN_INFO LIRC_DRIVER_NAME ": Uninstalled.\n"); +} + +module_init(lirc_it87_init); +module_exit(lirc_it87_exit); + +MODULE_DESCRIPTION("LIRC driver for ITE IT8712/IT8705 CIR port"); +MODULE_AUTHOR("Hans-Günter Lütke Uphues"); +MODULE_LICENSE("GPL"); + +module_param(io, int, S_IRUGO); +MODULE_PARM_DESC(io, "I/O base address (default: 0x310)"); + +module_param(irq, int, S_IRUGO); +#ifdef LIRC_IT87_DIGIMATRIX +MODULE_PARM_DESC(irq, "Interrupt (1,3-12) (default: 9)"); +#else +MODULE_PARM_DESC(irq, "Interrupt (1,3-12) (default: 7)"); +#endif + +module_param(it87_enable_demodulator, bool, S_IRUGO); +MODULE_PARM_DESC(it87_enable_demodulator, + "Receiver demodulator enable/disable (1/0), default: 0"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +module_param(digimatrix, bool, S_IRUGO | S_IWUSR); +#ifdef LIRC_IT87_DIGIMATRIX +MODULE_PARM_DESC(digimatrix, + "Asus Digimatrix it87 compat. enable/disable (1/0), default: 1"); +#else +MODULE_PARM_DESC(digimatrix, + "Asus Digimatrix it87 compat. enable/disable (1/0), default: 0"); +#endif + + +module_param(it87_freq, int, S_IRUGO); +#ifdef LIRC_IT87_DIGIMATRIX +MODULE_PARM_DESC(it87_freq, + "Carrier demodulator frequency (kHz), (default: 36)"); +#else +MODULE_PARM_DESC(it87_freq, + "Carrier demodulator frequency (kHz), (default: 38)"); +#endif +EXPORT_NO_SYMBOLS; --- linux-2.6.32.orig/ubuntu/lirc/lirc_it87/lirc_it87.h +++ linux-2.6.32/ubuntu/lirc/lirc_it87/lirc_it87.h @@ -0,0 +1,116 @@ +/* lirc_it87.h */ +/* SECTION: Definitions */ + +/********************************* ITE IT87xx ************************/ + +/* based on the following documentation from ITE: + a) IT8712F Preliminary CIR Programming Guide V0.1 + b) IT8705F Simple LPC I/O Preliminary Specification V0.3 + c) IT8712F EC-LPC I/O Preliminary Specification V0.5 +*/ + +/* IT8712/05 Ports: */ +#define IT87_ADRPORT 0x2e +#define IT87_DATAPORT 0x2f +#define IT87_INIT {0x87, 0x01, 0x55, 0x55} + +/* alternate Ports: */ +/* +#define IT87_ADRPORT 0x4e +#define IT87_DATAPORT 0x4f +#define IT87_INIT {0x87, 0x01, 0x55, 0xaa} + */ + +/* IT8712/05 Registers */ +#define IT87_CFGCTRL 0x2 +#define IT87_LDN 0x7 +#define IT87_CHIP_ID1 0x20 +#define IT87_CHIP_ID2 0x21 +#define IT87_CFG_VERSION 0x22 +#define IT87_SWSUSPEND 0x23 + +#define IT8712_CIR_LDN 0xa +#define IT8705_CIR_LDN 0x7 + +/* CIR Configuration Registers: */ +#define IT87_CIR_ACT 0x30 +#define IT87_CIR_BASE_MSB 0x60 +#define IT87_CIR_BASE_LSB 0x61 +#define IT87_CIR_IRQ 0x70 +#define IT87_CIR_CONFIG 0xf0 + +/* List of IT87_CIR registers: offset to BaseAddr */ +#define IT87_CIR_DR 0 +#define IT87_CIR_IER 1 +#define IT87_CIR_RCR 2 +#define IT87_CIR_TCR1 3 +#define IT87_CIR_TCR2 4 +#define IT87_CIR_TSR 5 +#define IT87_CIR_RSR 6 +#define IT87_CIR_BDLR 5 +#define IT87_CIR_BDHR 6 +#define IT87_CIR_IIR 7 + +/* Bit Definition */ +/* IER: */ +#define IT87_CIR_IER_TM_EN 0x80 +#define IT87_CIR_IER_RESEVED 0x40 +#define IT87_CIR_IER_RESET 0x20 +#define IT87_CIR_IER_BR 0x10 +#define IT87_CIR_IER_IEC 0x8 +#define IT87_CIR_IER_RFOIE 0x4 +#define IT87_CIR_IER_RDAIE 0x2 +#define IT87_CIR_IER_TLDLIE 0x1 + +/* RCR: */ +#define IT87_CIR_RCR_RDWOS 0x80 +#define IT87_CIR_RCR_HCFS 0x40 +#define IT87_CIR_RCR_RXEN 0x20 +#define IT87_CIR_RCR_RXEND 0x10 +#define IT87_CIR_RCR_RXACT 0x8 +#define IT87_CIR_RCR_RXDCR 0x7 + +/* TCR1: */ +#define IT87_CIR_TCR1_FIFOCLR 0x80 +#define IT87_CIR_TCR1_ILE 0x40 +#define IT87_CIR_TCR1_FIFOTL 0x30 +#define IT87_CIR_TCR1_TXRLE 0x8 +#define IT87_CIR_TCR1_TXENDF 0x4 +#define IT87_CIR_TCR1_TXMPM 0x3 + +/* TCR2: */ +#define IT87_CIR_TCR2_CFQ 0xf8 +#define IT87_CIR_TCR2_TXMPW 0x7 + +/* TSR: */ +#define IT87_CIR_TSR_RESERVED 0xc0 +#define IT87_CIR_TSR_TXFBC 0x3f + +/* RSR: */ +#define IT87_CIR_RSR_RXFTO 0x80 +#define IT87_CIR_RSR_RESERVED 0x40 +#define IT87_CIR_RSR_RXFBC 0x3f + +/* IIR: */ +#define IT87_CIR_IIR_RESERVED 0xf8 +#define IT87_CIR_IIR_IID 0x6 +#define IT87_CIR_IIR_IIP 0x1 + +/* TM: */ +#define IT87_CIR_TM_IL_SEL 0x80 +#define IT87_CIR_TM_RESERVED 0x40 +#define IT87_CIR_TM_TM_REG 0x3f + +#define IT87_CIR_FIFO_SIZE 32 + +/* Baudratedivisor for IT87: power of 2: only 1,2,4 or 8) */ +#define IT87_CIR_BAUDRATE_DIVISOR 0x1 +#define IT87_CIR_DEFAULT_IOBASE 0x310 +#define IT87_CIR_DEFAULT_IRQ 0x7 +#define IT87_CIR_SPACE 0x00 +#define IT87_CIR_PULSE 0xff +#define IT87_CIR_FREQ_MIN 27 +#define IT87_CIR_FREQ_MAX 58 +#define TIME_CONST (IT87_CIR_BAUDRATE_DIVISOR * 8000000ul / 115200ul) + +/********************************* ITE IT87xx ************************/ --- linux-2.6.32.orig/ubuntu/lirc/lirc_it87/TODO +++ linux-2.6.32/ubuntu/lirc/lirc_it87/TODO @@ -0,0 +1,5 @@ +This is my todo-list for lirc_it87: + +1. enabling/using shared IRQ +2. init/drop IRQ-usage in lirc_open/lirc_close + --- linux-2.6.32.orig/ubuntu/lirc/lirc_it87/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_it87/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_IT87) += lirc_it87.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_it87/README +++ linux-2.6.32/ubuntu/lirc/lirc_it87/README @@ -0,0 +1,46 @@ +This is the README using the ITE IT8705 and IT8712 CIR port for LIRC. + +The IT8705 for example can be found on the ECS K7S5A. + +The driver supports receiving (MODE2) and sending (PULSE). It seems +sending 'LIRC_CAN_SEND_PULSE' isn't optimal for this type of hardware. +But because I don't know how to implement 'LIRC_CAN_SEND_CODE', I did +it this way. + +Attention: +Because of missing hardware, the following hasn't been tested: +a) receiving with demodulator enabled, +b) sending (debugging output looks good) and +c) using IT8712 + +Any help and/or additions etc. is welcome. + +lirc_it87 knows about the following module-parameters: +MODULE_DESCRIPTION("LIRC driver for ITE IT8712/IT8705 CIR port"); +MODULE_PARM(io, "i"); +MODULE_PARM_DESC(io, "I/O base address (default: 0x310)"); +MODULE_PARM(irq, "i"); +MODULE_PARM_DESC(irq, "Interrupt (1,3-12) (default: 7)"); +MODULE_PARM(it87_enable_demodulator, "i"); +MODULE_PARM_DESC(it87_enable_demodulator, "Receiver demodulator + enable/disable (1/0), default: 0"); + + +Usage: + +a) io and irq: + +If the driver finds the IT8705/12-CIR port initialized, io and irq of +the preinitialized hardware is used by the driver. If both values are +read 0x0 from the hardware, the default or given value is used. +Note: I experienced using irq=3. The driver initialized without any +problems, but no irqs are recognized by the system. I had to switch +back to default, irq 7. + +b) it87_enable_demodulator: + +The demodulator for the receiver can be switched off (default within +the driver). If you need the demodulator simple enable it by the +following way: it87_enable_demodulator=1. + +Hans-Günter Lütke Uphues --- linux-2.6.32.orig/ubuntu/lirc/lirc_gpio/lirc_gpio.c +++ linux-2.6.32/ubuntu/lirc/lirc_gpio/lirc_gpio.c @@ -0,0 +1,613 @@ +/* + * Remote control driver for the TV-card + * key codes are obtained from GPIO port + * + * (L) by Artur Lipowski + * patch for the AverMedia by Santiago Garcia Mantinan + * and Christoph Bartelmus + * patch for the BestBuy by Miguel Angel Alvarez + * patch for the Winfast TV2000 by Juan Toledo + * + * patch for the I-O Data GV-BCTV5/PCI by Jens C. Rasmussen + * + * + * 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 + * + * $Id: lirc_gpio.c,v 1.57 2009/02/14 19:35:52 lirc Exp $ + * + */ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 4) +#error "*******************************************************" +#error "Sorry, this driver needs kernel version 2.2.4 or higher" +#error "*******************************************************" +#endif + +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +#include +#endif +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +#include "../drivers/char/bttv.h" +#include "../drivers/char/bttvp.h" +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 17) +#include "../drivers/media/video/bttv.h" +#include "../drivers/media/video/bttvp.h" +#else +#include "../drivers/media/video/bt8xx/bttv.h" +#include "../drivers/media/video/bt8xx/bttvp.h" +#endif + +#if BTTV_VERSION_CODE < KERNEL_VERSION(0, 7, 45) +#error "*******************************************************" +#error " Sorry, this driver needs bttv version 0.7.45 or " +#error " higher. If you are using the bttv package, copy it to " +#error " the kernel " +#error "*******************************************************" +#endif + +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +/* insmod parameters */ +static int debug; +static int card; +static int minor = -1; +static int bttv_id = BTTV_BOARD_UNKNOWN; +static unsigned long gpio_mask; +static unsigned long gpio_enable; +static unsigned long gpio_lock_mask; +static unsigned long gpio_xor_mask; +static int soft_gap; +static int sample_rate = 10; + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG fmt, ## args); \ + } while (0) + +struct rcv_info { + int bttv_id; + int card_id; + unsigned long gpio_mask; + unsigned long gpio_enable; + unsigned long gpio_lock_mask; + unsigned long gpio_xor_mask; + int soft_gap; + int sample_rate; + unsigned char code_length; +}; + +static struct rcv_info rcv_infos[] = { + {BTTV_BOARD_UNKNOWN, + 0, 0, 0, 0, 0, 0, 1, 0}, + {BTTV_BOARD_PXELVWPLTVPAK, + 0, 0x00003e00, 0, 0x0010000, 0, 0, 15, 32}, + {BTTV_BOARD_PXELVWPLTVPRO, + 0, 0x00001f00, 0, 0x0008000, 0, 500, 12, 32}, + {BTTV_BOARD_PV_BT878P_9B, + 0, 0x00001f00, 0, 0x0008000, 0, 500, 12, 32}, + {BTTV_BOARD_PV_BT878P_PLUS, + 0, 0x00001f00, 0, 0x0008000, 0, 500, 12, 32}, +#ifdef BTTV_BOARD_PV_M4900 + {BTTV_BOARD_PV_M4900, + 0, 0x00001f00, 0, 0x0008000, 0, 500, 12, 32}, +#endif + {BTTV_BOARD_AVERMEDIA, + 0, 0x00f88000, 0, 0x0010000, 0x00010000, 0, 10, 32}, + + /* mapped to Capture98 */ + {BTTV_BOARD_AVPHONE98, + 0x00011461, 0x003b8000, 0x00004000, + 0x0800000, 0x00800000, 0, 10, 0}, + {BTTV_BOARD_AVERMEDIA98, + 0x00021461, 0x003b8000, 0x00004000, + 0x0800000, 0x00800000, 0, 10, 0}, + + /* mapped to Phone98 */ + {BTTV_BOARD_AVPHONE98, + 0x00031461, 0x00f88000, 0, 0x0010000, 0x00010000, 0, 10, 32}, + /* is this one correct? */ + {BTTV_BOARD_AVERMEDIA98, + 0x00041461, 0x00f88000, 0, 0x0010000, 0x00010000, 0, 10, 32}, + /* work-around for VDOMATE */ + {BTTV_BOARD_AVERMEDIA98, + 0x03001461, 0x00f88000, 0, 0x0010000, 0x00010000, 0, 10, 32}, + /* reported by Danijel Korzinek, AVerTV GOw/FM */ + {BTTV_BOARD_AVERMEDIA98, + 0x00000000, 0x00f88000, 0, 0x0010000, 0x00010000, 0, 10, 32}, + + {BTTV_BOARD_CHRONOS_VS2, + 0, 0x000000f8, 0, 0x0000100, 0, 0, 20, 0}, + /* CPH031 and CPH033 cards (?) */ + /* MIRO was just a work-around */ + {BTTV_BOARD_MIRO, + 0, 0x00001f00, 0, 0x0004000, 0, 0, 10, 32}, + {BTTV_BOARD_DYNALINK, + 0, 0x00001f00, 0, 0x0004000, 0, 0, 10, 32}, +#ifdef BTTV_BOARD_ASKEY_CPH03X + {BTTV_BOARD_ASKEY_CPH03X, + 0, 0x00001f00, 0, 0x0004000, 0, 0, 10, 32}, +#endif + {BTTV_BOARD_WINVIEW_601, + 0, 0x00001f00, 0, 0x0004000, 0, 0, 0, 32}, +#ifdef BTTV_BOARD_KWORLD + {BTTV_BOARD_KWORLD, + 0, 0x00007f00, 0, 0x0004000, 0, 0, 12, 32}, +#endif + /* just a guess */ + {BTTV_BOARD_MAGICTVIEW061, + 0, 0x0028e000, 0, 0x0020000, 0, 0, 20, 32}, + {BTTV_BOARD_MAGICTVIEW063, + 0, 0x0028e000, 0, 0x0020000, 0, 0, 20, 32}, + {BTTV_BOARD_PHOEBE_TVMAS, + 0, 0x0028e000, 0, 0x0020000, 0, 0, 20, 32}, +#ifdef BTTV_BOARD_BESTBUY_EASYTV2 + {BTTV_BOARD_BESTBUY_EASYTV, + 0, 0x00007F00, 0, 0x0004000, 0, 0, 10, 8}, + {BTTV_BOARD_BESTBUY_EASYTV2, + 0, 0x00007F00, 0, 0x0008000, 0, 0, 10, 8}, +#endif + /* lock_mask probably also 0x100, or maybe it is 0x0 for all others? */ + {BTTV_BOARD_FLYVIDEO, + 0, 0x000000f8, 0, 0, 0, 0, 0, 42}, + {BTTV_BOARD_FLYVIDEO_98, + 0, 0x000000f8, 0, 0x0000100, 0, 0, 0, 42}, + {BTTV_BOARD_TYPHOON_TVIEW, + 0, 0x000000f8, 0, 0x0000100, 0, 0, 0, 42}, +#ifdef BTTV_BOARD_FLYVIDEO_98FM + /* smorar@alfonzo.smuts.uct.ac.za */ + {BTTV_BOARD_FLYVIDEO_98FM, + 0, 0x000000f8, 0, 0x0000100, 0, 0, 0, 42}, +#endif + /* The Leadtek WinFast TV 2000 XP card (id 0x6606107d) uses an + * extra gpio bit compared to the original TV 2000 card (id + * 0x217d6606); as the bttv-0.7.100 driver does not + * distinguish between the two cards, we enable the extra bit + * based on the card id: */ + {BTTV_BOARD_WINFAST2000, + 0x6606107d, 0x000008f8, 0, 0x0000100, 0, 0, 0, 32}, + {BTTV_BOARD_WINFAST2000, + 0x6609107d, 0x000008f8, 0, 0x0000100, 0, 0, 0, 32}, + {BTTV_BOARD_WINFAST2000, + 0xff06107d, 0x000008f8, 0, 0x0000100, 0, 0, 0, 32}, + /* default: */ + {BTTV_BOARD_WINFAST2000, + 0, 0x000000f8, 0, 0x0000100, 0, 0, 0, 32}, +#ifdef BTTV_BOARD_GVBCTV5PCI + {BTTV_BOARD_GVBCTV5PCI, + 0, 0x00f0b000, 0, 0, 0, 0, 20, 8}, +#endif +}; + +static unsigned char code_length; +static unsigned char code_bytes = 1; + +#define MAX_BYTES 8 + +#define LOGHEAD "lirc_gpio (%d): " + +/* how many bits GPIO value can be shifted right before processing + * it is computed from the value of gpio_mask_parameter + */ +static unsigned char gpio_pre_shift; + +static int reverse(int data, int bits) +{ + int i; + int c; + + for (c = 0, i = 0; i < bits; i++) + c |= (((data & (1<>= gpio_pre_shift; + while (mask) { + if (mask & 1u) + codes[0] |= (gpio_val & 1u) << shift++; + mask >>= 1; + gpio_val >>= 1; + } + + dprintk(LOGHEAD "code is %lx\n", card, (unsigned long) codes[0]); + switch (bttv_id) { + case BTTV_BOARD_AVERMEDIA: + codes[2] = (codes[0]<<2)&0xff; + codes[3] = (~codes[2])&0xff; + codes[0] = 0x02; + codes[1] = 0xFD; + break; + case BTTV_BOARD_AVPHONE98: + codes[2] = ((codes[0]&(~0x1))<<2)&0xff; + codes[3] = (~codes[2])&0xff; + if (codes[0]&0x1) { + codes[0] = 0xc0; + codes[1] = 0x3f; + } else { + codes[0] = 0x40; + codes[1] = 0xbf; + } + break; + case BTTV_BOARD_AVERMEDIA98: + break; + case BTTV_BOARD_FLYVIDEO: + case BTTV_BOARD_FLYVIDEO_98: + case BTTV_BOARD_TYPHOON_TVIEW: +#ifdef BTTV_BOARD_FLYVIDEO_98FM + case BTTV_BOARD_FLYVIDEO_98FM: +#endif + codes[4] = codes[0]<<3; + codes[5] = ((~codes[4])&0xff); + + codes[0] = 0x00; + codes[1] = 0x1A; + codes[2] = 0x1F; + codes[3] = 0x2F; + break; + case BTTV_BOARD_MAGICTVIEW061: + case BTTV_BOARD_MAGICTVIEW063: + case BTTV_BOARD_PHOEBE_TVMAS: + codes[0] = (codes[0]&0x01) + | ((codes[0]&0x02)<<1) + | ((codes[0]&0x04)<<2) + | ((codes[0]&0x08)>>2) + | ((codes[0]&0x10)>>1); + /* FALLTHROUGH */ + case BTTV_BOARD_MIRO: + case BTTV_BOARD_DYNALINK: +#ifdef BTTV_BOARD_ASKEY_CPH03X + case BTTV_BOARD_ASKEY_CPH03X: +#endif + case BTTV_BOARD_PXELVWPLTVPAK: + case BTTV_BOARD_PXELVWPLTVPRO: + case BTTV_BOARD_PV_BT878P_9B: + case BTTV_BOARD_PV_BT878P_PLUS: +#ifdef BTTV_BOARD_PV_M4900 + case BTTV_BOARD_PV_M4900: +#endif +#ifdef BTTV_BOARD_KWORLD + case BTTV_BOARD_KWORLD: +#endif + codes[2] = reverse(codes[0], 8); + codes[3] = (~codes[2])&0xff; + codes[0] = 0x61; + codes[1] = 0xD6; + break; +#if 0 + /* derived from e-tech config file */ + /* 26 + 16 bits */ + /* won't apply it until it's confirmed with a fly98 */ + case BTTV_BOARD_FLYVIDEO_98: + case BTTV_BOARD_FLYVIDEO_98FM: + codes[4] = codes[0]<<3; + codes[5] = (~codes[4])&0xff; + + codes[0] = 0x00; + codes[1] = 0x1A; + codes[2] = 0x1F; + codes[3] = 0x2F; + break; +#endif + case BTTV_BOARD_WINFAST2000: + /* shift extra bit */ + codes[0] = (codes[0]&0x1f) | ((codes[0]&0x20) << 1); + case BTTV_BOARD_WINVIEW_601: + codes[2] = reverse(codes[0], 8); + codes[3] = (~codes[2])&0xff; + codes[0] = 0xC0; + codes[1] = 0x3F; + break; + default: + break; + } + + return 0; +} + +/* add_to_buf - copy a code to the buffer */ +static int add_to_buf(void *data, struct lirc_buffer *buf) +{ + static unsigned long next_time; + static unsigned char prev_codes[MAX_BYTES]; + unsigned long code = 0; + unsigned char cur_codes[MAX_BYTES]; + + if (bttv_read_gpio(card, &code)) { + dprintk(LOGHEAD "cannot read GPIO\n", card); + return -EIO; + } + + if (build_key(code, cur_codes)) + return -EFAULT; + + if (soft_gap) { + if (!memcmp(prev_codes, cur_codes, code_bytes) && + jiffies < next_time) + return -EAGAIN; + + next_time = jiffies + soft_gap; + } + memcpy(prev_codes, cur_codes, code_bytes); + + lirc_buffer_write(buf, cur_codes); + + return 0; +} + +static int set_use_inc(void *data) +{ + MOD_INC_USE_COUNT; + return 0; +} + +static void set_use_dec(void *data) +{ + MOD_DEC_USE_COUNT; +} + +static wait_queue_head_t *get_queue(void *data) +{ + return bttv_get_gpio_queue(card); +} + +static struct lirc_driver driver = { + .name = "lirc_gpio ", + .add_to_buf = add_to_buf, + .get_queue = get_queue, + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .dev = NULL, + .owner = THIS_MODULE, +}; + +/* + * + */ +static int gpio_remote_init(void) +{ + int ret; + unsigned int mask; + + /* "normalize" gpio_mask + * this means shift it right until first bit is set + */ + while (!(gpio_mask & 1u)) { + gpio_pre_shift++; + gpio_mask >>= 1; + } + + if (code_length) + driver.code_length = code_length; + else { + /* calculate scan code length in bits if needed */ + driver.code_length = 1; + mask = gpio_mask >> 1; + while (mask) { + if (mask & 1u) + driver.code_length++; + mask >>= 1; + } + } + + code_bytes = (driver.code_length/8) + (driver.code_length % 8 ? 1 : 0); + if (MAX_BYTES < code_bytes) { + printk(LOGHEAD "scan code too long (%d bytes)\n", + minor, code_bytes); + return -EBADRQC; + } + + if (gpio_enable) { + if (bttv_gpio_enable(card, gpio_enable, gpio_enable)) { + printk(LOGHEAD "gpio_enable failure\n", minor); + return -EIO; + } + } + + + /* translate ms to jiffies */ + soft_gap = (soft_gap*HZ) / 1000; + + driver.minor = minor; + driver.sample_rate = sample_rate; + + ret = lirc_register_driver(&driver); + + if (0 > ret) { + printk(LOGHEAD "device registration failed with %d\n", + minor, ret); + return ret; + } + + minor = ret; + printk(LOGHEAD "driver registered\n", minor); + + return 0; +} + +#ifdef MODULE +/* + * + */ +int init_module(void) +{ + int type, cardid, card_type; + + if (MAX_IRCTL_DEVICES < minor) { + printk(KERN_INFO "lirc_gpio: parameter minor (%d) " + "must be less than %d!\n", + minor, MAX_IRCTL_DEVICES - 1); + return -EBADRQC; + } + + /* if gpio_mask not zero then use module parameters + * instead of autodetecting TV card + */ + if (gpio_mask) { + if (sample_rate != 0 && + (2 > sample_rate || HZ < sample_rate)) { + printk(LOGHEAD "parameter sample_rate " + "must be between 2 and %d!\n", minor, HZ); + return -EBADRQC; + } + + if (sample_rate != 0 && soft_gap && + ((2000/sample_rate) > soft_gap || 1000 < soft_gap)) { + printk(LOGHEAD "parameter soft_gap " + "must be between %d and 1000!\n", + minor, 2000/sample_rate); + return -EBADRQC; + } + } else { + if (bttv_get_cardinfo(card, &type, &cardid) == -1) { + printk(LOGHEAD "could not get card type\n", minor); + return -EBADRQC; + } + printk(LOGHEAD "card type 0x%x, id 0x%x\n", minor, + type, cardid); + + if (type == BTTV_BOARD_UNKNOWN) { + printk(LOGHEAD "cannot detect TV card nr %d!\n", + minor, card); + return -EBADRQC; + } + for (card_type = 1; + card_type < sizeof(rcv_infos)/sizeof(struct rcv_info); + card_type++) { + if (rcv_infos[card_type].bttv_id == type && + (rcv_infos[card_type].card_id == 0 || + rcv_infos[card_type].card_id == cardid)) { + bttv_id = rcv_infos[card_type].bttv_id; + gpio_mask = rcv_infos[card_type].gpio_mask; + gpio_enable = rcv_infos[card_type].gpio_enable; + gpio_lock_mask = + rcv_infos[card_type].gpio_lock_mask; + gpio_xor_mask = + rcv_infos[card_type].gpio_xor_mask; + soft_gap = rcv_infos[card_type].soft_gap; + sample_rate = rcv_infos[card_type].sample_rate; + code_length = rcv_infos[card_type].code_length; + break; + } + } + if (type == BTTV_BOARD_AVPHONE98 && cardid == 0x00011461) + bttv_id = BTTV_BOARD_AVERMEDIA98; + + if (type == BTTV_BOARD_AVERMEDIA98 && cardid == 0x00041461) + bttv_id = BTTV_BOARD_AVPHONE98; + + if (type == BTTV_BOARD_AVERMEDIA98 && cardid == 0x03001461) + bttv_id = BTTV_BOARD_AVPHONE98; + + if (type == BTTV_BOARD_AVERMEDIA98 && cardid == 0x00000000) + bttv_id = BTTV_BOARD_AVPHONE98; + + if (card_type == sizeof(rcv_infos)/sizeof(struct rcv_info)) { + printk(LOGHEAD "TV card type 0x%x not supported!\n", + minor, type); + return -EBADRQC; + } + } + + return gpio_remote_init(); +} + +/* + * + */ +void cleanup_module(void) +{ + lirc_unregister_driver(minor); + + dprintk(LOGHEAD "module successfully unloaded\n", minor); +} + +/* Dont try to use it as a static version ! */ +MODULE_DESCRIPTION("Driver module for remote control (data " + "from bt848 GPIO port)"); +MODULE_AUTHOR("Artur Lipowski"); +MODULE_LICENSE("GPL"); + +module_param(minor, int, S_IRUGO); +MODULE_PARM_DESC(minor, "Preferred minor device number"); + +module_param(card, int, S_IRUGO); +MODULE_PARM_DESC(card, "TV card number to attach to"); + +module_param(gpio_mask, long, S_IRUGO); +MODULE_PARM_DESC(gpio_mask, "gpio_mask"); + +module_param(gpio_lock_mask, long, S_IRUGO); +MODULE_PARM_DESC(gpio_lock_mask, "gpio_lock_mask"); + +module_param(gpio_xor_mask, long, S_IRUGO); +MODULE_PARM_DESC(gpio_xor_mask, "gpio_xor_mask"); + +module_param(soft_gap, int, S_IRUGO); +MODULE_PARM_DESC(soft_gap, "Time between keypresses (in ms)"); + +module_param(sample_rate, int, S_IRUGO); +MODULE_PARM_DESC(sample_rate, "Sample rate (between 2 and HZ)"); + +module_param(bttv_id, int, S_IRUGO); +MODULE_PARM_DESC(bttv_id, "BTTV card type"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +EXPORT_NO_SYMBOLS; + +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/lirc/lirc_gpio/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_gpio/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_GPIO) += lirc_gpio.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_mceusb/lirc_mceusb.c +++ linux-2.6.32/ubuntu/lirc/lirc_mceusb/lirc_mceusb.c @@ -0,0 +1,1289 @@ +/* + * LIRC driver for Windows Media Center Edition USB Infrared Transceivers + * + * (C) by Martin A. Blatter + * + * Transmitter support and reception code cleanup. + * (C) by Daniel Melander + * + * Original lirc_mceusb driver for 1st-gen device: + * Copyright (c) 2003-2004 Dan Conti + * + * Original lirc_mceusb driver deprecated in favor of this driver, which + * supports the 1st-gen device now too. Transmitting on the 1st-gen device + * only functions on port #2 at the moment. + * + * Support for 1st-gen device added June 2009, + * by Jarod Wilson + * + * Initial transmission support for 1st-gen device added August 2009, + * by Patrick Calhoun + * + * Derived from ATI USB driver by Paul Miller and the original + * MCE USB driver by Dan Conti ((and now including chunks of the latter + * relevant to the 1st-gen device initialization) + * + * This driver will only work reliably with kernel version 2.6.10 + * or higher, probably because of differences in USB device enumeration + * in the kernel code. Device initialization fails most of the time + * with earlier kernel versions. + * + ********************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 5) +#error "*******************************************************" +#error "Sorry, this driver needs kernel version 2.6.5 or higher" +#error "*******************************************************" +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#include +#include +#include + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +#define DRIVER_VERSION "1.90" +#define DRIVER_AUTHOR "Daniel Melander , " \ + "Martin Blatter , " \ + "Dan Conti " +#define DRIVER_DESC "Windows Media Center Edition USB IR Transceiver " \ + "driver for LIRC" +#define DRIVER_NAME "lirc_mceusb" + +#define USB_BUFLEN 32 /* USB reception buffer length */ +#define LIRCBUF_SIZE 256 /* LIRC work buffer length */ + +/* MCE constants */ +#define MCE_CMDBUF_SIZE 384 /* MCE Command buffer length */ +#define MCE_TIME_UNIT 50 /* Approx 50us resolution */ +#define MCE_CODE_LENGTH 5 /* Normal length of packet (with header) */ +#define MCE_PACKET_SIZE 4 /* Normal length of packet (without header) */ +#define MCE_PACKET_HEADER 0x84 /* Actual header format is 0x80 + num_bytes */ +#define MCE_CONTROL_HEADER 0x9F /* MCE status header */ +#define MCE_TX_HEADER_LENGTH 3 /* # of bytes in the initializing tx header */ +#define MCE_MAX_CHANNELS 2 /* Two transmitters, hardware dependent? */ +#define MCE_DEFAULT_TX_MASK 0x03 /* Val opts: TX1=0x01, TX2=0x02, ALL=0x03 */ +#define MCE_PULSE_BIT 0x80 /* Pulse bit, MSB set == PULSE else SPACE */ +#define MCE_PULSE_MASK 0x7F /* Pulse mask */ +#define MCE_MAX_PULSE_LENGTH 0x7F /* Longest transmittable pulse symbol */ +#define MCE_PACKET_LENGTH_MASK 0x7F /* Pulse mask */ + + +/* module parameters */ +#ifdef CONFIG_USB_DEBUG +static int debug = 1; +#else +static int debug; +#endif +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG fmt, ## args); \ + } while (0) + +/* general constants */ +#define SEND_FLAG_IN_PROGRESS 1 +#define SEND_FLAG_COMPLETE 2 +#define RECV_FLAG_IN_PROGRESS 3 +#define RECV_FLAG_COMPLETE 4 + +#define MCEUSB_INBOUND 1 +#define MCEUSB_OUTBOUND 2 + +#define VENDOR_PHILIPS 0x0471 +#define VENDOR_SMK 0x0609 +#define VENDOR_TATUNG 0x1460 +#define VENDOR_GATEWAY 0x107b +#define VENDOR_SHUTTLE 0x1308 +#define VENDOR_SHUTTLE2 0x051c +#define VENDOR_MITSUMI 0x03ee +#define VENDOR_TOPSEED 0x1784 +#define VENDOR_RICAVISION 0x179d +#define VENDOR_ITRON 0x195d +#define VENDOR_FIC 0x1509 +#define VENDOR_LG 0x043e +#define VENDOR_MICROSOFT 0x045e +#define VENDOR_FORMOSA 0x147a +#define VENDOR_FINTEK 0x1934 +#define VENDOR_PINNACLE 0x2304 +#define VENDOR_ECS 0x1019 +#define VENDOR_WISTRON 0x0fb8 +#define VENDOR_COMPRO 0x185b +#define VENDOR_NORTHSTAR 0x04eb + +static struct usb_device_id mceusb_dev_table[] = { + /* Original Microsoft MCE IR Transceiver (often HP-branded) */ + { USB_DEVICE(VENDOR_MICROSOFT, 0x006d) }, + /* Philips Infrared Transceiver - Sahara branded */ + { USB_DEVICE(VENDOR_PHILIPS, 0x0608) }, + /* Philips Infrared Transceiver - HP branded */ + { USB_DEVICE(VENDOR_PHILIPS, 0x060c) }, + /* Philips SRM5100 */ + { USB_DEVICE(VENDOR_PHILIPS, 0x060d) }, + /* Philips Infrared Transceiver - Omaura */ + { USB_DEVICE(VENDOR_PHILIPS, 0x060f) }, + /* Philips Infrared Transceiver - Spinel plus */ + { USB_DEVICE(VENDOR_PHILIPS, 0x0613) }, + /* Philips eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_PHILIPS, 0x0815) }, + /* SMK/Toshiba G83C0004D410 */ + { USB_DEVICE(VENDOR_SMK, 0x031d) }, + /* SMK eHome Infrared Transceiver (Sony VAIO) */ + { USB_DEVICE(VENDOR_SMK, 0x0322) }, + /* bundled with Hauppauge PVR-150 */ + { USB_DEVICE(VENDOR_SMK, 0x0334) }, + /* Tatung eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_TATUNG, 0x9150) }, + /* Shuttle eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_SHUTTLE, 0xc001) }, + /* Shuttle eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_SHUTTLE2, 0xc001) }, + /* Gateway eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_GATEWAY, 0x3009) }, + /* Mitsumi */ + { USB_DEVICE(VENDOR_MITSUMI, 0x2501) }, + /* Topseed eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_TOPSEED, 0x0001) }, + /* Topseed HP eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_TOPSEED, 0x0006) }, + /* Topseed eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_TOPSEED, 0x0007) }, + /* Topseed eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_TOPSEED, 0x0008) }, + /* Topseed eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_TOPSEED, 0x000a) }, + /* Ricavision internal Infrared Transceiver */ + { USB_DEVICE(VENDOR_RICAVISION, 0x0010) }, + /* Itron ione Libra Q-11 */ + { USB_DEVICE(VENDOR_ITRON, 0x7002) }, + /* FIC eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_FIC, 0x9242) }, + /* LG eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_LG, 0x9803) }, + /* Microsoft MCE Infrared Transceiver */ + { USB_DEVICE(VENDOR_MICROSOFT, 0x00a0) }, + /* Formosa eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_FORMOSA, 0xe015) }, + /* Formosa21 / eHome Infrared Receiver */ + { USB_DEVICE(VENDOR_FORMOSA, 0xe016) }, + /* Formosa aim / Trust MCE Infrared Receiver */ + { USB_DEVICE(VENDOR_FORMOSA, 0xe017) }, + /* Formosa Industrial Computing / Beanbag Emulation Device */ + { USB_DEVICE(VENDOR_FORMOSA, 0xe018) }, + /* Formosa21 / eHome Infrared Receiver */ + { USB_DEVICE(VENDOR_FORMOSA, 0xe03a) }, + /* Formosa Industrial Computing AIM IR605/A */ + { USB_DEVICE(VENDOR_FORMOSA, 0xe03c) }, + /* Fintek eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_FINTEK, 0x0602) }, + /* Fintek eHome Infrared Transceiver (in the AOpen MP45) */ + { USB_DEVICE(VENDOR_FINTEK, 0x0702) }, + /* Pinnacle Remote Kit */ + { USB_DEVICE(VENDOR_PINNACLE, 0x0225) }, + /* Elitegroup Computer Systems IR */ + { USB_DEVICE(VENDOR_ECS, 0x0f38) }, + /* Wistron Corp. eHome Infrared Receiver */ + { USB_DEVICE(VENDOR_WISTRON, 0x0002) }, + /* Compro K100 */ + { USB_DEVICE(VENDOR_COMPRO, 0x3020) }, + /* Compro K100 v2 */ + { USB_DEVICE(VENDOR_COMPRO, 0x3082) }, + /* Northstar Systems eHome Infrared Transceiver */ + { USB_DEVICE(VENDOR_NORTHSTAR, 0xe004) }, + /* Terminating entry */ + { } +}; + +static struct usb_device_id pinnacle_list[] = { + { USB_DEVICE(VENDOR_PINNACLE, 0x0225) }, + {} +}; + +static struct usb_device_id microsoft_gen1_list[] = { + { USB_DEVICE(VENDOR_MICROSOFT, 0x006d) }, + {} +}; + +static struct usb_device_id transmitter_mask_list[] = { + { USB_DEVICE(VENDOR_SMK, 0x031d) }, + { USB_DEVICE(VENDOR_SMK, 0x0322) }, + { USB_DEVICE(VENDOR_SMK, 0x0334) }, + { USB_DEVICE(VENDOR_TOPSEED, 0x0001) }, + { USB_DEVICE(VENDOR_TOPSEED, 0x0006) }, + { USB_DEVICE(VENDOR_TOPSEED, 0x0007) }, + { USB_DEVICE(VENDOR_TOPSEED, 0x0008) }, + { USB_DEVICE(VENDOR_TOPSEED, 0x000a) }, + { USB_DEVICE(VENDOR_PINNACLE, 0x0225) }, + {} +}; + +/* data structure for each usb transceiver */ +struct mceusb_dev { + + /* usb */ + struct usb_device *usbdev; + struct urb *urb_in; + int devnum; + struct usb_endpoint_descriptor *usb_ep_in; + struct usb_endpoint_descriptor *usb_ep_out; + + /* buffers and dma */ + unsigned char *buf_in; + unsigned int len_in; + dma_addr_t dma_in; + dma_addr_t dma_out; + unsigned int overflow_len; + + /* lirc */ + struct lirc_driver *d; + lirc_t lircdata; + unsigned char is_pulse; + struct { + u32 connected:1; + u32 pinnacle:1; + u32 transmitter_mask_inverted:1; + u32 microsoft_gen1:1; + u32 reserved:28; + } flags; + + unsigned char transmitter_mask; + unsigned int carrier_freq; + + /* handle sending (init strings) */ + int send_flags; + wait_queue_head_t wait_out; + + struct mutex lock; +}; + +/* init strings */ +static char init1[] = {0x00, 0xff, 0xaa, 0xff, 0x0b}; +static char init2[] = {0xff, 0x18}; + +static char pin_init1[] = { 0x9f, 0x07}; +static char pin_init2[] = { 0x9f, 0x13}; +static char pin_init3[] = { 0x9f, 0x0d}; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11) +static unsigned long usecs_to_jiffies(const unsigned int u) +{ + if (u > jiffies_to_usecs(MAX_JIFFY_OFFSET)) + return MAX_JIFFY_OFFSET; +#if HZ <= USEC_PER_SEC && !(USEC_PER_SEC % HZ) + return (u + (USEC_PER_SEC / HZ) - 1) / (USEC_PER_SEC / HZ); +#elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC) + return u * (HZ / USEC_PER_SEC); +#else + return (u * HZ + USEC_PER_SEC - 1) / USEC_PER_SEC; +#endif +} +#endif +static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, int len) +{ + char codes[USB_BUFLEN * 3 + 1]; + int i; + + if (len <= 0) + return; + + if (ir->flags.microsoft_gen1 && len <= 2) + return; + + for (i = 0; i < len && i < USB_BUFLEN; i++) + snprintf(codes + i * 3, 4, "%02x ", buf[i] & 0xFF); + + printk(KERN_INFO "" DRIVER_NAME "[%d]: data received %s (length=%d)\n", + ir->devnum, codes, len); +} + +static void usb_async_callback(struct urb *urb, struct pt_regs *regs) +{ + struct mceusb_dev *ir; + int len; + + if (!urb) + return; + + ir = urb->context; + if (ir) { + len = urb->actual_length; + + dprintk(DRIVER_NAME + "[%d]: callback called (status=%d len=%d)\n", + ir->devnum, urb->status, len); + + if (debug) + mceusb_dev_printdata(ir, urb->transfer_buffer, len); + } + +} + +/* request incoming or send outgoing usb packet - used to initialize remote */ +static void request_packet_async(struct mceusb_dev *ir, + struct usb_endpoint_descriptor *ep, + unsigned char *data, int size, int urb_type) +{ + int res; + struct urb *async_urb; + unsigned char *async_buf; + + if (urb_type) { + async_urb = usb_alloc_urb(0, GFP_KERNEL); + if (unlikely(!async_urb)) + return; + + async_buf = kmalloc(size, GFP_KERNEL); + if (!async_buf) { + usb_free_urb(async_urb); + return; + } + + if (urb_type == MCEUSB_OUTBOUND) { + /* outbound data */ + usb_fill_int_urb(async_urb, ir->usbdev, + usb_sndintpipe(ir->usbdev, + ep->bEndpointAddress), + async_buf, size, + (usb_complete_t) usb_async_callback, + ir, ep->bInterval); + memcpy(async_buf, data, size); + } else { + /* inbound data */ + usb_fill_int_urb(async_urb, ir->usbdev, + usb_rcvintpipe(ir->usbdev, + ep->bEndpointAddress), + async_buf, size, + (usb_complete_t) usb_async_callback, + ir, ep->bInterval); + } + async_urb->transfer_flags = URB_ASYNC_UNLINK; + } else { + /* standard request */ + async_urb = ir->urb_in; + ir->send_flags = RECV_FLAG_IN_PROGRESS; + } + + dprintk(DRIVER_NAME "[%d]: receive request called (size=%#x)\n", + ir->devnum, size); + + async_urb->transfer_buffer_length = size; + async_urb->dev = ir->usbdev; + + res = usb_submit_urb(async_urb, GFP_ATOMIC); + if (res) { + dprintk(DRIVER_NAME "[%d]: receive request FAILED! (res=%d)\n", + ir->devnum, res); + return; + } + dprintk(DRIVER_NAME "[%d]: receive request complete (res=%d)\n", + ir->devnum, res); +} + +static int unregister_from_lirc(struct mceusb_dev *ir) +{ + struct lirc_driver *d = ir->d; + int devnum; + int rtn; + + devnum = ir->devnum; + dprintk(DRIVER_NAME "[%d]: unregister from lirc called\n", devnum); + + rtn = lirc_unregister_driver(d->minor); + if (rtn > 0) { + printk(DRIVER_NAME "[%d]: error in lirc_unregister minor: %d\n" + "Trying again...\n", devnum, d->minor); + if (rtn == -EBUSY) { + printk(DRIVER_NAME + "[%d]: device is opened, will unregister" + " on close\n", devnum); + return -EAGAIN; + } + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ); + + rtn = lirc_unregister_driver(d->minor); + if (rtn > 0) + printk(DRIVER_NAME "[%d]: lirc_unregister failed\n", + devnum); + } + + if (rtn) { + printk(DRIVER_NAME "[%d]: didn't free resources\n", devnum); + return -EAGAIN; + } + + printk(DRIVER_NAME "[%d]: usb remote disconnected\n", devnum); + + lirc_buffer_free(d->rbuf); + kfree(d->rbuf); + kfree(d); + kfree(ir); + return 0; +} + +static int mceusb_ir_open(void *data) +{ + struct mceusb_dev *ir = data; + + if (!ir) { + printk(DRIVER_NAME "[?]: %s called with no context\n", + __func__); + return -EIO; + } + dprintk(DRIVER_NAME "[%d]: mceusb IR device opened\n", ir->devnum); + + MOD_INC_USE_COUNT; + if (!ir->flags.connected) { + if (!ir->usbdev) + return -ENOENT; + ir->flags.connected = 1; + } + + return 0; +} + +static void mceusb_ir_close(void *data) +{ + struct mceusb_dev *ir = data; + + if (!ir) { + printk(DRIVER_NAME "[?]: %s called with no context\n", + __func__); + return; + } + dprintk(DRIVER_NAME "[%d]: mceusb IR device closed\n", ir->devnum); + + if (ir->flags.connected) { + mutex_lock(&ir->lock); + ir->flags.connected = 0; + mutex_unlock(&ir->lock); + } + MOD_DEC_USE_COUNT; +} + +static void send_packet_to_lirc(struct mceusb_dev *ir) +{ + if (ir->lircdata) { + lirc_buffer_write(ir->d->rbuf, + (unsigned char *) &ir->lircdata); + wake_up(&ir->d->rbuf->wait_poll); + ir->lircdata = 0; + } +} + +static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) +{ + int i, j; + int packet_len = 0; + int start_index = 0; + + /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ + if (ir->flags.microsoft_gen1) + start_index = 2; + + /* this should only trigger w/the 1st-gen mce receiver */ + for (i = start_index; i < (start_index + ir->overflow_len) && + i < buf_len; i++) { + /* rising/falling flank */ + if (ir->is_pulse != (ir->buf_in[i] & MCE_PULSE_BIT)) { + send_packet_to_lirc(ir); + ir->is_pulse = ir->buf_in[i] & MCE_PULSE_BIT; + } + + /* accumulate mce pulse/space values */ + ir->lircdata += (ir->buf_in[i] & MCE_PULSE_MASK) * + MCE_TIME_UNIT; + ir->lircdata |= (ir->is_pulse ? PULSE_BIT : 0); + } + start_index += ir->overflow_len; + ir->overflow_len = 0; + + for (i = start_index; i < buf_len; i++) { + /* decode mce packets of the form (84),AA,BB,CC,DD */ + if (ir->buf_in[i] >= 0x80 && ir->buf_in[i] <= 0x9e) { + /* data headers */ + /* decode packet data */ + packet_len = ir->buf_in[i] & MCE_PACKET_LENGTH_MASK; + ir->overflow_len = i + 1 + packet_len - buf_len; + for (j = 1; j <= packet_len && (i + j < buf_len); j++) { + /* rising/falling flank */ + if (ir->is_pulse != + (ir->buf_in[i + j] & MCE_PULSE_BIT)) { + send_packet_to_lirc(ir); + ir->is_pulse = + ir->buf_in[i + j] & + MCE_PULSE_BIT; + } + + /* accumulate mce pulse/space values */ + ir->lircdata += + (ir->buf_in[i + j] & MCE_PULSE_MASK) * + MCE_TIME_UNIT; + ir->lircdata |= (ir->is_pulse ? PULSE_BIT : 0); + } + + i += packet_len; + } else if (ir->buf_in[i] == MCE_CONTROL_HEADER) { + /* status header (0x9F) */ + /* + * A transmission containing one or more consecutive ir + * commands always ends with a GAP of 100ms followed by + * the sequence 0x9F 0x01 0x01 0x9F 0x15 0x00 0x00 0x80 + */ + +#if 0 + Uncomment this if the last 100ms "infinity"-space should be transmitted + to lirc directly instead of at the beginning of the next transmission. + Changes pulse/space order. + + if (++i < buf_len && ir->buf_in[i]==0x01) + send_packet_to_lirc(ir); + +#endif + + /* end decode loop */ + dprintk(DRIVER_NAME "[%d] %s: found control header\n", + ir->devnum, __func__); + ir->overflow_len = 0; + break; + } else { + dprintk(DRIVER_NAME "[%d] %s: stray packet?\n", + ir->devnum, __func__); + ir->overflow_len = 0; + } + } + + return; +} + +static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs) +{ + struct mceusb_dev *ir; + int buf_len; + + if (!urb) + return; + + ir = urb->context; + if (!ir) { + urb->transfer_flags |= URB_ASYNC_UNLINK; + usb_unlink_urb(urb); + return; + } + + buf_len = urb->actual_length; + + if (debug) + mceusb_dev_printdata(ir, urb->transfer_buffer, buf_len); + + if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { + ir->send_flags = SEND_FLAG_COMPLETE; + dprintk(DRIVER_NAME "[%d]: setup answer received %d bytes\n", + ir->devnum, buf_len); + } + + switch (urb->status) { + /* success */ + case 0: + mceusb_process_ir_data(ir, buf_len); + break; + + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + urb->transfer_flags |= URB_ASYNC_UNLINK; + usb_unlink_urb(urb); + return; + + case -EPIPE: + default: + break; + } + + usb_submit_urb(urb, GFP_ATOMIC); +} + + +static ssize_t mceusb_transmit_ir(struct file *file, const char *buf, + size_t n, loff_t *ppos) +{ + int i, count = 0, cmdcount = 0; + struct mceusb_dev *ir = NULL; + lirc_t wbuf[LIRCBUF_SIZE]; /* Workbuffer with values from lirc */ + unsigned char cmdbuf[MCE_CMDBUF_SIZE]; /* MCE command buffer */ + unsigned long signal_duration = 0; /* Singnal length in us */ + struct timeval start_time, end_time; + + do_gettimeofday(&start_time); + + /* Retrieve lirc_driver data for the device */ + ir = lirc_get_pdata(file); + if (!ir || !ir->usb_ep_out) + return -EFAULT; + + if (n % sizeof(lirc_t)) + return -EINVAL; + count = n / sizeof(lirc_t); + + /* Check if command is within limits */ + if (count > LIRCBUF_SIZE || count%2 == 0) + return -EINVAL; + if (copy_from_user(wbuf, buf, n)) + return -EFAULT; + + /* MCE tx init header */ + cmdbuf[cmdcount++] = MCE_CONTROL_HEADER; + cmdbuf[cmdcount++] = 0x08; + cmdbuf[cmdcount++] = ir->transmitter_mask; + + /* Generate mce packet data */ + for (i = 0; (i < count) && (cmdcount < MCE_CMDBUF_SIZE); i++) { + signal_duration += wbuf[i]; + wbuf[i] = wbuf[i] / MCE_TIME_UNIT; + + do { /* loop to support long pulses/spaces > 127*50us=6.35ms */ + + /* Insert mce packet header every 4th entry */ + if ((cmdcount < MCE_CMDBUF_SIZE) && + (cmdcount - MCE_TX_HEADER_LENGTH) % + MCE_CODE_LENGTH == 0) + cmdbuf[cmdcount++] = MCE_PACKET_HEADER; + + /* Insert mce packet data */ + if (cmdcount < MCE_CMDBUF_SIZE) + cmdbuf[cmdcount++] = + (wbuf[i] < MCE_PULSE_BIT ? + wbuf[i] : MCE_MAX_PULSE_LENGTH) | + (i & 1 ? 0x00 : MCE_PULSE_BIT); + else + return -EINVAL; + } while ((wbuf[i] > MCE_MAX_PULSE_LENGTH) && + (wbuf[i] -= MCE_MAX_PULSE_LENGTH)); + } + + /* Fix packet length in last header */ + cmdbuf[cmdcount - (cmdcount - MCE_TX_HEADER_LENGTH) % MCE_CODE_LENGTH] = + 0x80 + (cmdcount - MCE_TX_HEADER_LENGTH) % MCE_CODE_LENGTH - 1; + + /* Check if we have room for the empty packet at the end */ + if (cmdcount >= MCE_CMDBUF_SIZE) + return -EINVAL; + + /* All mce commands end with an empty packet (0x80) */ + cmdbuf[cmdcount++] = 0x80; + + /* Transmit the command to the mce device */ + request_packet_async(ir, ir->usb_ep_out, cmdbuf, + cmdcount, MCEUSB_OUTBOUND); + + /* + * The lircd gap calculation expects the write function to + * wait the time it takes for the ircommand to be sent before + * it returns. + */ + do_gettimeofday(&end_time); + signal_duration -= (end_time.tv_usec - start_time.tv_usec) + + (end_time.tv_sec - start_time.tv_sec) * 1000000; + + /* delay with the closest number of ticks */ + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(usecs_to_jiffies(signal_duration)); + + return n; +} + +static void set_transmitter_mask(struct mceusb_dev *ir, unsigned int mask) +{ + if (ir->flags.transmitter_mask_inverted) + /* + * The mask begins at 0x02 and has an inverted + * numbering scheme + */ + ir->transmitter_mask = + (mask != 0x03 ? mask ^ 0x03 : mask) << 1; + else + ir->transmitter_mask = mask; +} + + +/* Sets the send carrier frequency */ +static int set_send_carrier(struct mceusb_dev *ir, int carrier) +{ + int clk = 10000000; + int prescaler = 0, divisor = 0; + unsigned char cmdbuf[] = { 0x9F, 0x06, 0x01, 0x80 }; + + /* Carrier is changed */ + if (ir->carrier_freq != carrier) { + + if (carrier <= 0) { + ir->carrier_freq = carrier; + dprintk(DRIVER_NAME "[%d]: SET_CARRIER disabling " + "carrier modulation\n", ir->devnum); + request_packet_async(ir, ir->usb_ep_out, + cmdbuf, sizeof(cmdbuf), + MCEUSB_OUTBOUND); + return carrier; + } + + for (prescaler = 0; prescaler < 4; ++prescaler) { + divisor = (clk >> (2 * prescaler)) / carrier; + if (divisor <= 0xFF) { + ir->carrier_freq = carrier; + cmdbuf[2] = prescaler; + cmdbuf[3] = divisor; + dprintk(DRIVER_NAME "[%d]: SET_CARRIER " + "requesting %d Hz\n", + ir->devnum, carrier); + + /* Transmit new carrier to mce device */ + request_packet_async(ir, ir->usb_ep_out, + cmdbuf, sizeof(cmdbuf), + MCEUSB_OUTBOUND); + return carrier; + } + } + + return -EINVAL; + + } + + return carrier; +} + + +static int mceusb_lirc_ioctl(struct inode *node, struct file *filep, + unsigned int cmd, unsigned long arg) +{ + int result; + unsigned int ivalue; + unsigned long lvalue; + struct mceusb_dev *ir = NULL; + + /* Retrieve lirc_driver data for the device */ + ir = lirc_get_pdata(filep); + if (!ir || !ir->usb_ep_out) + return -EFAULT; + + + switch (cmd) { + case LIRC_SET_TRANSMITTER_MASK: + + result = get_user(ivalue, (unsigned int *) arg); + if (result) + return result; + switch (ivalue) { + case 0x01: /* Transmitter 1 => 0x04 */ + case 0x02: /* Transmitter 2 => 0x02 */ + case 0x03: /* Transmitter 1 & 2 => 0x06 */ + set_transmitter_mask(ir, ivalue); + break; + + default: /* Unsupported transmitter mask */ + return MCE_MAX_CHANNELS; + } + + dprintk(DRIVER_NAME ": SET_TRANSMITTERS mask=%d\n", ivalue); + break; + + case LIRC_GET_SEND_MODE: + + result = put_user(LIRC_SEND2MODE(LIRC_CAN_SEND_PULSE & + LIRC_CAN_SEND_MASK), + (unsigned long *) arg); + + if (result) + return result; + break; + + case LIRC_SET_SEND_MODE: + + result = get_user(lvalue, (unsigned long *) arg); + + if (result) + return result; + if (lvalue != (LIRC_MODE_PULSE&LIRC_CAN_SEND_MASK)) + return -EINVAL; + break; + + case LIRC_SET_SEND_CARRIER: + + result = get_user(ivalue, (unsigned int *) arg); + if (result) + return result; + + set_send_carrier(ir, ivalue); + break; + + default: + return -ENOIOCTLCMD; + } + + return 0; +} + +static struct file_operations lirc_fops = { + .owner = THIS_MODULE, + .write = mceusb_transmit_ir, + .ioctl = mceusb_lirc_ioctl, +}; + +static int mceusb_gen1_init(struct mceusb_dev *ir) +{ + int i, ret; + char junk[64], data[8]; + int partial = 0; + + /* + * Clear off the first few messages. These look like calibration + * or test data, I can't really tell. This also flushes in case + * we have random ir data queued up. + */ + for (i = 0; i < 40; i++) + usb_bulk_msg(ir->usbdev, + usb_rcvbulkpipe(ir->usbdev, + ir->usb_ep_in->bEndpointAddress), + junk, 64, &partial, HZ * 10); + + ir->is_pulse = 1; + + memset(data, 0, 8); + + /* Get Status */ + ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), + USB_REQ_GET_STATUS, USB_DIR_IN, + 0, 0, data, 2, HZ * 3); + + /* ret = usb_get_status( ir->usbdev, 0, 0, data ); */ + dprintk("%s - ret = %d status = 0x%x 0x%x\n", __func__, + ret, data[0], data[1]); + + /* + * This is a strange one. They issue a set address to the device + * on the receive control pipe and expect a certain value pair back + */ + memset(data, 0, 8); + + ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), + USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0, + data, 2, HZ * 3); + dprintk("%s - ret = %d, devnum = %d\n", + __func__, ret, ir->usbdev->devnum); + dprintk("%s - data[0] = %d, data[1] = %d\n", + __func__, data[0], data[1]); + + /* set feature */ + ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), + USB_REQ_SET_FEATURE, USB_TYPE_VENDOR, + 0xc04e, 0x0000, NULL, 0, HZ * 3); + + dprintk("%s - ret = %d\n", __func__, ret); + + /* strange: bRequest == 4 */ + ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), + 4, USB_TYPE_VENDOR, + 0x0808, 0x0000, NULL, 0, HZ * 3); + dprintk("%s - retB = %d\n", __func__, ret); + + /* strange: bRequest == 2 */ + ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), + 2, USB_TYPE_VENDOR, + 0x0000, 0x0100, NULL, 0, HZ * 3); + dprintk("%s - retC = %d\n", __func__, ret); + + return ret; + +}; + +static int mceusb_dev_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + struct usb_device *dev = interface_to_usbdev(intf); + struct usb_host_interface *idesc; + struct usb_endpoint_descriptor *ep = NULL; + struct usb_endpoint_descriptor *ep_in = NULL; + struct usb_endpoint_descriptor *ep_out = NULL; + struct usb_host_config *config; + struct mceusb_dev *ir = NULL; + struct lirc_driver *driver = NULL; + struct lirc_buffer *rbuf = NULL; + int devnum, pipe, maxp; + int minor = 0; + int i; + char buf[63], name[128] = ""; + int mem_failure = 0; + int is_pinnacle; + int is_microsoft_gen1; + + dprintk(DRIVER_NAME ": %s called\n", __func__); + + usb_reset_device(dev); + + config = dev->actconfig; + + idesc = intf->cur_altsetting; + + is_pinnacle = usb_match_id(intf, pinnacle_list) ? 1 : 0; + + is_microsoft_gen1 = usb_match_id(intf, microsoft_gen1_list) ? 1 : 0; + + /* step through the endpoints to find first bulk in and out endpoint */ + for (i = 0; i < idesc->desc.bNumEndpoints; ++i) { + ep = &idesc->endpoint[i].desc; + + if ((ep_in == NULL) + && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) + == USB_DIR_IN) + && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + == USB_ENDPOINT_XFER_BULK) + || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + == USB_ENDPOINT_XFER_INT))) { + + dprintk(DRIVER_NAME ": acceptable inbound endpoint " + "found\n"); + ep_in = ep; + ep_in->bmAttributes = USB_ENDPOINT_XFER_INT; + if (is_pinnacle) + /* + * setting seems to 1 seem to cause issues with + * Pinnacle timing out on transfer. + */ + ep_in->bInterval = ep->bInterval; + else + ep_in->bInterval = 1; + } + + if ((ep_out == NULL) + && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) + == USB_DIR_OUT) + && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + == USB_ENDPOINT_XFER_BULK) + || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + == USB_ENDPOINT_XFER_INT))) { + + dprintk(DRIVER_NAME ": acceptable outbound endpoint " + "found\n"); + ep_out = ep; + ep_out->bmAttributes = USB_ENDPOINT_XFER_INT; + if (is_pinnacle) + /* + * setting seems to 1 seem to cause issues with + * Pinnacle timing out on transfer. + */ + ep_out->bInterval = ep->bInterval; + else + ep_out->bInterval = 1; + } + } + if (ep_in == NULL || ep_out == NULL) { + dprintk(DRIVER_NAME ": inbound and/or " + "outbound endpoint not found\n"); + return -ENODEV; + } + + devnum = dev->devnum; + pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress); + maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); + + mem_failure = 0; + ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL); + if (!ir) { + mem_failure = 1; + goto mem_failure_switch; + } + + driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); + if (!driver) { + mem_failure = 2; + goto mem_failure_switch; + } + + rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL); + if (!rbuf) { + mem_failure = 3; + goto mem_failure_switch; + } + + if (lirc_buffer_init(rbuf, sizeof(lirc_t), LIRCBUF_SIZE)) { + mem_failure = 4; + goto mem_failure_switch; + } + + ir->buf_in = usb_buffer_alloc(dev, maxp, GFP_ATOMIC, &ir->dma_in); + if (!ir->buf_in) { + mem_failure = 5; + goto mem_failure_switch; + } + + ir->urb_in = usb_alloc_urb(0, GFP_KERNEL); + if (!ir->urb_in) { + mem_failure = 7; + goto mem_failure_switch; + } + + strcpy(driver->name, DRIVER_NAME " "); + driver->minor = -1; + driver->features = LIRC_CAN_SEND_PULSE | + LIRC_CAN_SET_TRANSMITTER_MASK | + LIRC_CAN_REC_MODE2 | + LIRC_CAN_SET_SEND_CARRIER; + driver->data = ir; + driver->rbuf = rbuf; + driver->set_use_inc = &mceusb_ir_open; + driver->set_use_dec = &mceusb_ir_close; + driver->code_length = sizeof(lirc_t) * 8; + driver->fops = &lirc_fops; + driver->dev = &intf->dev; + driver->owner = THIS_MODULE; + + mutex_init(&ir->lock); + init_waitqueue_head(&ir->wait_out); + + minor = lirc_register_driver(driver); + if (minor < 0) + mem_failure = 9; + +mem_failure_switch: + + switch (mem_failure) { + case 9: + usb_free_urb(ir->urb_in); + case 7: + usb_buffer_free(dev, maxp, ir->buf_in, ir->dma_in); + case 5: + lirc_buffer_free(rbuf); + case 4: + kfree(rbuf); + case 3: + kfree(driver); + case 2: + kfree(ir); + case 1: + printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n", + devnum, mem_failure); + return -ENOMEM; + } + + driver->minor = minor; + ir->d = driver; + ir->devnum = devnum; + ir->usbdev = dev; + ir->len_in = maxp; + ir->overflow_len = 0; + ir->flags.connected = 0; + ir->flags.pinnacle = is_pinnacle; + ir->flags.microsoft_gen1 = is_microsoft_gen1; + ir->flags.transmitter_mask_inverted = + usb_match_id(intf, transmitter_mask_list) ? 0 : 1; + + ir->lircdata = PULSE_MASK; + ir->is_pulse = 0; + + /* ir->flags.transmitter_mask_inverted must be set */ + set_transmitter_mask(ir, MCE_DEFAULT_TX_MASK); + /* Saving usb interface data for use by the transmitter routine */ + ir->usb_ep_in = ep_in; + ir->usb_ep_out = ep_out; + + if (dev->descriptor.iManufacturer + && usb_string(dev, dev->descriptor.iManufacturer, + buf, sizeof(buf)) > 0) + strlcpy(name, buf, sizeof(name)); + if (dev->descriptor.iProduct + && usb_string(dev, dev->descriptor.iProduct, + buf, sizeof(buf)) > 0) + snprintf(name + strlen(name), sizeof(name) - strlen(name), + " %s", buf); + printk(DRIVER_NAME "[%d]: %s on usb%d:%d\n", devnum, name, + dev->bus->busnum, devnum); + + /* inbound data */ + usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, + maxp, (usb_complete_t) mceusb_dev_recv, ir, ep_in->bInterval); + ir->urb_in->transfer_dma = ir->dma_in; + ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + + /* initialize device */ + if (ir->flags.pinnacle) { + int usbret; + + /* + * I have no idea why but this reset seems to be crucial to + * getting the device to do outbound IO correctly - without + * this the device seems to hang, ignoring all input - although + * IR signals are correctly sent from the device, no input is + * interpreted by the device and the host never does the + * completion routine + */ + + usbret = usb_reset_configuration(dev); + printk(DRIVER_NAME "[%d]: usb reset config ret %x\n", + devnum, usbret); + + /* + * its possible we really should wait for a return + * for each of these... + */ + request_packet_async(ir, ep_in, NULL, maxp, MCEUSB_INBOUND); + request_packet_async(ir, ep_out, pin_init1, sizeof(pin_init1), + MCEUSB_OUTBOUND); + request_packet_async(ir, ep_in, NULL, maxp, MCEUSB_INBOUND); + request_packet_async(ir, ep_out, pin_init2, sizeof(pin_init2), + MCEUSB_OUTBOUND); + request_packet_async(ir, ep_in, NULL, maxp, MCEUSB_INBOUND); + request_packet_async(ir, ep_out, pin_init3, sizeof(pin_init3), + MCEUSB_OUTBOUND); + } else if (ir->flags.microsoft_gen1) { + /* original ms mce device requires some additional setup */ + mceusb_gen1_init(ir); + } else { + + request_packet_async(ir, ep_in, NULL, maxp, MCEUSB_INBOUND); + request_packet_async(ir, ep_in, NULL, maxp, MCEUSB_INBOUND); + request_packet_async(ir, ep_out, init1, + sizeof(init1), MCEUSB_OUTBOUND); + request_packet_async(ir, ep_in, NULL, maxp, MCEUSB_INBOUND); + request_packet_async(ir, ep_out, init2, + sizeof(init2), MCEUSB_OUTBOUND); + } + + /* + * if we don't issue the correct number of receives (MCEUSB_INBOUND) + * for each outbound, then the first few ir pulses will be interpreted + * by the usb_async_callback routine - we should ensure we have the + * right amount OR less - as the meusb_dev_recv routine will handle + * the control packets OK - they start with 0x9f - but the async + * callback doesn't handle ir pulse packets + */ + request_packet_async(ir, ep_in, NULL, maxp, 0); + + usb_set_intfdata(intf, ir); + + return 0; +} + + +static void mceusb_dev_disconnect(struct usb_interface *intf) +{ + struct usb_device *dev = interface_to_usbdev(intf); + struct mceusb_dev *ir = usb_get_intfdata(intf); + + usb_set_intfdata(intf, NULL); + + if (!ir || !ir->d) + return; + + ir->usbdev = NULL; + wake_up_all(&ir->wait_out); + + mutex_lock(&ir->lock); + usb_kill_urb(ir->urb_in); + usb_free_urb(ir->urb_in); + usb_buffer_free(dev, ir->len_in, ir->buf_in, ir->dma_in); + mutex_unlock(&ir->lock); + + unregister_from_lirc(ir); +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int mceusb_dev_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct mceusb_dev *ir = usb_get_intfdata(intf); + printk(DRIVER_NAME "[%d]: suspend\n", ir->devnum); + usb_kill_urb(ir->urb_in); + return 0; +} + +static int mceusb_dev_resume(struct usb_interface *intf) +{ + struct mceusb_dev *ir = usb_get_intfdata(intf); + printk(DRIVER_NAME "[%d]: resume\n", ir->devnum); + if (usb_submit_urb(ir->urb_in, GFP_ATOMIC)) + return -EIO; + return 0; +} +#endif + +static struct usb_driver mceusb_dev_driver = { + LIRC_THIS_MODULE(.owner = THIS_MODULE) + .name = DRIVER_NAME, + .probe = mceusb_dev_probe, + .disconnect = mceusb_dev_disconnect, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + .suspend = mceusb_dev_suspend, + .resume = mceusb_dev_resume, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) + .reset_resume = mceusb_dev_resume, +#endif +#endif + .id_table = mceusb_dev_table +}; + +static int __init mceusb_dev_init(void) +{ + int i; + + printk(KERN_INFO DRIVER_NAME ": " DRIVER_DESC " " DRIVER_VERSION "\n"); + printk(KERN_INFO DRIVER_NAME ": " DRIVER_AUTHOR "\n"); + dprintk(DRIVER_NAME ": debug mode enabled\n"); + + i = usb_register(&mceusb_dev_driver); + if (i < 0) { + printk(DRIVER_NAME ": usb register failed, result = %d\n", i); + return -ENODEV; + } + + return 0; +} + +static void __exit mceusb_dev_exit(void) +{ + usb_deregister(&mceusb_dev_driver); +} + +module_init(mceusb_dev_init); +module_exit(mceusb_dev_exit); + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(usb, mceusb_dev_table); +/* this was originally lirc_mceusb2, lirc_mceusb and lirc_mceusb2 merged now */ +MODULE_ALIAS("lirc_mceusb2"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Debug enabled or not"); + +EXPORT_NO_SYMBOLS; --- linux-2.6.32.orig/ubuntu/lirc/lirc_mceusb/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_mceusb/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_MCEUSB) += lirc_mceusb.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_wpc8769l/lirc_wpc8769l.h +++ linux-2.6.32/ubuntu/lirc/lirc_wpc8769l/lirc_wpc8769l.h @@ -0,0 +1,186 @@ +/* $Id: lirc_wpc8769l.h,v 1.5 2009/06/15 15:11:39 jarodwilson Exp $ */ + +/**************************************************************************** + ** lirc_wpc8769l.h **************************************************** + **************************************************************************** + * + * lirc_wpc8769l - Device driver for the integrated CIR receiver found in + * Acer Aspire 6530G (and probably other models), based on + * the Winbond 8769L embedded controller. + * (Written using the lirc_serial driver as a guide). + * + * Copyright (C) 2008, 2009 Juan J. Garcia de Soria + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include + +/* Name of the ACPI resource used to autodetect the receiver. */ +#define WPC8769L_ACPI_HID "WEC1020" + +/* Number of microseconds for a whole byte of samples. */ +/* This is assuming 20 kHz bit sampling frequency. */ +#define WPC8769L_USECS_PER_BYTE 400 + +/* Number of microseconds for a bit sample. */ +#define WPC8769L_USECS_PER_BIT (WPC8769L_USECS_PER_BYTE >> 3) + +/* Number of bytes in each data burst. */ +#define WPC8769L_BYTES_PER_BURST 14 + +/* Number of 0xff bytes before reset. */ +#define WPC8769L_FF_BYTES_BEFORE_RESET 250 + +/* Microseconds timeout for last part of code. */ +#define WPC8769L_LAST_TIMEOUT_JIFFIES (HZ / 20) + +/* Microseconds timeout for last part of code. */ +#define WPC8769L_LAST_TIMEOUT_JIFFIES (HZ / 20) + +/* Size of I/O region 1. */ +#define WPC8769L_IO_REGION_1_SIZE 0x08 + +/* Size of I/O region 2. */ +#define WPC8769L_IO_REGION_2_SIZE 0x20 + +/* Size of a byte array for a complete burst, rounded + * up to an integral number of unsigned longs. */ +#define WPC8769L_BYTE_BUFFER_SIZE \ + (((WPC8769L_BYTES_PER_BURST + 1 + BITS_PER_LONG / 8 - 1) \ + / (BITS_PER_LONG / 8)) * (BITS_PER_LONG / 8)) + + + +/* WPC8769L register set definitions. Note that these are all wild guesses.*/ + +/* Registers for I/O range 1. */ +#define WPC8769L_SELECT_REG 0x03 + +/*------------*/ +#define WPC8769L_BANK_00 0x00 + +#define WPC8769L_DATA_REG 0x00 + +#define WPC8769L_INTERRUPT_REG 0x01 +#define WPC8769L_INTERRUPT_1_MASK 0x01 +#define WPC8769L_INTERRUPT_2_MASK 0x01 + +#define WPC8769L_DATA_STATUS_REG 0x02 +#define WPC8769L_DATA_READY_MASK 0x01 +#define WPC8769L_DATA_STATUS_MASK_1 0x02 +#define WPC8769L_DATA_STATUS_MASK_2 0xd0 + +#define WPC8769L_CONFIG_REG 0x04 +#define WPC8769L_CONFIG_OFF_MASK 0xe0 +#define WPC8769L_CONFIG_ON_MASK 0xc0 + +#define WPC8769L_DATA_ACK_REG 0x05 +#define WPC8769L_DATA_ACK_MASK 0x01 + +#define WPC8769L_TIMEOUT_RESET_REG 0x07 +#define WPC8769L_TIMEOUT_RESET_MASK 0x20 + +/*------------*/ +#define WPC8769L_BANK_E0 0xe0 + +#define WPC8769L_CONFIG6_REG 0x00 +#define WPC8769L_CONFIG6_MASK 0x4b + +#define WPC8769L_CONFIG7_REG 0x01 + +#define WPC8769L_HARDWARE_ENABLE1_REG 0x02 +#define WPC8769L_HARDWARE_ENABLE1_MASK 0x01 + +#define WPC8769L_CONFIG5_REG 0x04 +#define WPC8769L_CONFIG5_ON_MASK 0x30 + +#define WPC8769L_REMAINING_RX_DATA_REG 0x07 + +/*------------*/ +#define WPC8769L_BANK_E4 0xe4 + +#define WPC8769L_READ_ON_STARTUP_REG 0x00 + +/*------------*/ +#define WPC8769L_BANK_EC 0xec + +#define WPC8769L_CONFIG3_REG 0x04 +#define WPC8769L_CONFIG3_ON_MASK 0x01 +#define WPC8769L_CONFIG3_MASK_1 0x10 + +/*------------*/ +#define WPC8769L_BANK_F0 0xf0 + +#define WPC8769L_WAKEUP_STATUS_LEG_REG 0x02 +#define WPC8769L_WAKEUP_STATUS_LEG_MASK 0x04 +#define WPC8769L_WAKEUP_STATUS_LEG_MASK_A 0x02 +#define WPC8769L_WAKEUP_STATUS_LEG_MASK_B 0x08 + +/*------------*/ +#define WPC8769L_BANK_F4 0xf4 + +#define WPC8769L_CONFIG9_REG 0x01 + +#define WPC8769L_CONFIG4_REG 0x02 +#define WPC8769L_CONFIG4_AND_MASK 0x0f +#define WPC8769L_CONFIG4_ON_MASK 0x50 + +#define WPC8769L_CONFIG8_REG 0x04 + +#define WPC8769L_CONFIG2_REG 0x07 +#define WPC8769L_CONFIG2_OFF_MASK 0x20 +#define WPC8769L_CONFIG2_MASK_1 0x10 + + +/* Registers for I/O range 2. */ +#define WPC8769L_WAKEUP_ACK_REG 0x00 +#define WPC8769L_WAKEUP_ACK_MASK 0x10 + +#define WPC8769L_WAKEUP_ENABLE_REG 0x02 +#define WPC8769L_WAKEUP_ENABLE_MASK 0x10 + +#define WPC8769L_BANK2_CLOCK_REG 0x04 +#define WPC8769L_CLOCK_OFF_MASK 0x02 +#define WPC8769L_CLOCK_ON_MASK 0x01 + +#define WPC8769L_WAKEUP_CONFIG_REG 0x1a +#define WPC8769L_WAKEUP_CONFIG_PRE_MASK 0x80 +#define WPC8769L_MAX_INFO_BITS_BIAS 0x0e +#define WPC8769L_MAX_INFO_BITS_SHIFT 0x01 + +#define WPC8769L_WAKEUP_CONFIG3_REG 0x13 +#define WPC8769L_WAKEUP_CONFIG3_OFF_MASK 0x10 +#define WPC8769L_WAKEUP_CONFIG3_ON_MASK 0x21 +#define WPC8769L_WAKEUP_CONFIG3_A_SHIFT 0x01 +#define WPC8769L_WAKEUP_CONFIG3_A_MASK 0x03 +#define WPC8769L_WAKEUP_CONFIG3_B_SHIFT 0x03 +#define WPC8769L_WAKEUP_CONFIG3_B_MASK 0x01 + +#define WPC8769L_WAKEUP_STATUS_REG 0x14 +#define WPC8769L_WAKEUP_WOKE_UP_MASK 0x01 +#define WPC8769L_WAKEUP_CONFIGURING_MASK 0x17 + +#define WPC8769L_WAKEUP_CONFIG2_REG 0x15 +#define WPC8769L_WAKEUP_CONFIG2_AND_MASK 0xf9 +#define WPC8769L_WAKEUP_CONFIG2_OR_MASK 0x01 + +#define WPC8769L_WAKEUP_DATA_PTR_REG 0x18 +#define WPC8769L_WAKEUP_DATA_BITS 0x20 +#define WPC8769L_WAKEUP_DATA_BASE 0x10 +#define WPC8769L_WAKEUP_MASK_BASE 0x20 + +#define WPC8769L_WAKEUP_DATA_REG 0x19 + --- linux-2.6.32.orig/ubuntu/lirc/lirc_wpc8769l/lirc_wpc8769l.c +++ linux-2.6.32/ubuntu/lirc/lirc_wpc8769l/lirc_wpc8769l.c @@ -0,0 +1,1179 @@ +/* $Id: lirc_wpc8769l.c,v 1.8 2009/03/15 09:34:01 lirc Exp $ */ + +/**************************************************************************** + ** lirc_wpc8769l.c **************************************************** + **************************************************************************** + * + * lirc_wpc8769l - Device driver for the integrated CIR receiver found in + * Acer Aspire 6530G (and probably other models), based on + * the Winbond 8769L embedded controller. + * (Written using the lirc_serial driver as a guide). + * + * Copyright (C) 2008, 2009 Juan J. Garcia de Soria + * 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 + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) +#error "**********************************************************" +#error " Sorry, this driver needs kernel version 2.2.18 or higher " +#error "**********************************************************" +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +#include +#else +#include +#endif +#include + +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) +#include +#endif + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +#include "lirc_wpc8769l.h" + +/* Name of the lirc device. */ +#define LIRC_DRIVER_NAME "lirc_wpc8769l" + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +#define wprintk(fmt, args...) \ + do { \ + printk(KERN_WARN LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +#define eprintk(fmt, args...) \ + do { \ + printk(KERN_ERR LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +#define iprintk(fmt, args...) \ + do { \ + printk(KERN_INFO LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + +/* Number of driver->lirc-dev buffer elements. */ +#define RBUF_LEN 256 + +/* Number of 0xff bytes received in a row. */ +static unsigned int wpc8769l_ff_bytes_in_a_row; + +/* Hardware resource parameters. */ +static unsigned int baseport1; +static unsigned int baseport2; +static unsigned int irq; + +/* Debugging flag. */ +static int debug; + +/* If true, we skip ACPI autodetection and use the parameter-supplied I/O and + * IRQ. */ +static int skip_probe; + +/* Whether the device is open or not. */ +static int lirc_wpc8769l_is_open; + +/* Code disabled since it didn't seem to work with the test hardware. */ +/*#define LIRC_WPC8769L_WAKEUP*/ +#ifdef LIRC_WPC8769L_WAKEUP +/* These parameters are taken from the driver for MS Windows Vista. + * The specific values used for your hardware may be found at this registry + * key: + * + * HKEY_LOCAL_MACHINE/CurrentControlSet/Services/Winbond CIR/PowerKey + */ +static int protocol_select = 2; +static int max_info_bits = 24; +static unsigned int rc_wakeup_code = 0x7ffffbf3; +static unsigned int rc_wakeup_mask = 0xff000fff; +#endif + +/* Resource allocation pointers. */ +static struct resource *wpc8769l_portblock1_resource; +static struct resource *wpc8769l_portblock2_resource; + +/* Hardware related spinlock. */ +static DEFINE_SPINLOCK(wpc8769l_hw_spinlock); + +/* The buffer for ISR to bottom half data transfer. */ +static struct lirc_buffer rbuf; + +/* Bit-to-MODE2 coalescing helper variables. */ +static int last_was_pulse; +static lirc_t last_counter; + +/* Microseconds after a timeout-triggered pulse. */ +static s64 lastus; + +/* Microseconds when the timer was started. */ +static s64 timerstartus; + +/* Put another pulse/space to the queue, checking for overruns. */ +static void put_item(lirc_t data) +{ + if (lirc_buffer_full(&rbuf)) { + if (printk_ratelimit()) + eprintk("RX buffer overrun.\n"); + return; + } + lirc_buffer_write(&rbuf, (void *) &data); +} + +/* Put any accumulated pulse/space to userspace. */ +static void put_span(void) +{ + lirc_t data; + if (last_counter) { + /* Take the usecs length. */ + data = last_counter; + + /* Mark pulse or space. */ + if (last_was_pulse) + data |= PULSE_BIT; + + /* Put the span to the buffer. */ + put_item(data); + + /* Reset counter, in order to avoid emitting duplicate data. */ + last_counter = 0; + } +} + +/* Aggregate pulse time. */ +static void put_pulse_bit(lirc_t n) +{ + if (last_was_pulse) { + last_counter += n; + if (last_counter > PULSE_MASK) + last_counter = PULSE_MASK; + } else { + put_span(); + last_was_pulse = 1; + last_counter = n; + if (last_counter > PULSE_MASK) + last_counter = PULSE_MASK; + } +} + +/* Aggregate space time. */ +static void put_space_bit(lirc_t n) +{ + if (!last_was_pulse) { + last_counter += n; + if (last_counter > PULSE_MASK) + last_counter = PULSE_MASK; + } else { + put_span(); + last_was_pulse = 0; + last_counter = n; + if (last_counter > PULSE_MASK) + last_counter = PULSE_MASK; + } +} + +/* Timeout function for last pulse part. */ +static void wpc8769l_last_timeout(unsigned long l) +{ + struct timeval currenttv; + + unsigned long flags; + spin_lock_irqsave(&wpc8769l_hw_spinlock, flags); + + /* Mark the time at which we inserted the timeout span. */ + do_gettimeofday(¤ttv); + lastus = ((s64) currenttv.tv_sec) * 1000000ll + currenttv.tv_usec; + + /* Emit the timeout as a space. */ + put_space_bit(lastus - timerstartus); + + /* Signal the bottom half wait queue + * that there's data available. */ + wake_up_interruptible(&rbuf.wait_poll); + + spin_unlock_irqrestore(&wpc8769l_hw_spinlock, flags); +} + +/* Timer for end-of-code pulse timeout. */ +static struct timer_list last_span_timer = + TIMER_INITIALIZER(wpc8769l_last_timeout, 0, 0); + +/* Interrupt handler, doing the bit sample to mode2 conversion. + * Perhaps this work should be taken outside of the ISR... */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) +static irqreturn_t irq_handler(int irqno, void *blah) +#else +static irqreturn_t irq_handler(int irqno, void *blah, struct pt_regs *regs) +#endif +{ + unsigned int data; + int handled = 0; + int count, more; + struct timeval currenttv; + s64 currentus, span; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + unsigned char data_buf[WPC8769L_BYTE_BUFFER_SIZE]; + unsigned char *data_ptr; + unsigned long *ldata; + unsigned int next_one, next_zero, size; +#else + unsigned int mask; +#endif + + unsigned long flags; + spin_lock_irqsave(&wpc8769l_hw_spinlock, flags); + + /* Check whether there's any data available. */ + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + data = inb(baseport1 + WPC8769L_DATA_STATUS_REG); + + if (data & WPC8769L_DATA_READY_MASK) { + /* Get current timestamp. */ + do_gettimeofday(¤ttv); + currentus = ((s64) currenttv.tv_sec) * 1000000ll + + currenttv.tv_usec; + + /* If we had a timeout before we might need to fill + * in additional space time. */ + if (lastus) { + /* Calculate the difference, compensating + * the time for the data successfully + * received (estimated to be + * WPC8769L_BYTES_PER_BURST bytes). */ + span = currentus - lastus + - WPC8769L_BYTES_PER_BURST + * WPC8769L_USECS_PER_BYTE; + + /* Only insert positive spans. */ + if (span > 0) { + /* Emit the extended gap as a space. */ + put_space_bit(span); + } + + /* Mark that we had the last timeout into account. */ + lastus = 0; + } + + count = 0; + more = 1; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + data_ptr = data_buf; +#endif + do { + /* Read the next byte of data. */ + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + data = inb(baseport1 + WPC8769L_DATA_REG); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + *data_ptr++ = data; +#else + for (mask = 0x01 ; mask < 0x100; mask <<= 1) { + if (data & mask) + put_space_bit(WPC8769L_USECS_PER_BIT); + else + put_pulse_bit(WPC8769L_USECS_PER_BIT); + } +#endif + + /* Check for 0xff in a row. */ + if (data == 0xff) + wpc8769l_ff_bytes_in_a_row++; + else + wpc8769l_ff_bytes_in_a_row = 0; + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + data = inb(baseport1 + WPC8769L_DATA_ACK_REG); + if (data & WPC8769L_DATA_ACK_REG) { + outb(WPC8769L_BANK_E0, + baseport1 + WPC8769L_SELECT_REG); + data = inb(baseport1 + + WPC8769L_REMAINING_RX_DATA_REG); + if (!data) + more = 0; + } else + more = 0; + + count++; + } while (more && count < WPC8769L_BYTES_PER_BURST); + + if (wpc8769l_ff_bytes_in_a_row + >= WPC8769L_FF_BYTES_BEFORE_RESET) { + + /* Put in another 0xff byte. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + *data_ptr++ = 0xff; + count++; +#else + put_space_bit(8 * WPC8769L_USECS_PER_BIT); +#endif + + /* Reset the hardware in the case of too many + * 0xff bytes in a row. */ + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_TIMEOUT_RESET_MASK, + baseport1 + WPC8769L_TIMEOUT_RESET_REG); + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + /* Emit the data. */ + size = count << 3; + + ldata = (unsigned long *) data_buf; + next_one = generic_find_next_le_bit(ldata, size, 0); + + if (next_one > 0) + put_pulse_bit(next_one + * WPC8769L_USECS_PER_BIT); + + while (next_one < size) { + next_zero = generic_find_next_zero_le_bit(ldata, + size, next_one + 1); + + put_space_bit( + (next_zero - next_one) + * WPC8769L_USECS_PER_BIT); + + if (next_zero < size) { + next_one = generic_find_next_le_bit(ldata, + size, next_zero + 1); + + put_pulse_bit( + (next_one - next_zero) + * WPC8769L_USECS_PER_BIT); + } else { + next_one = size; + } + } +#endif + + /* Mark the IRQ as handled. */ + handled = 1; + + /* Signal the bottom half wait queue + * that there's data available. */ + wake_up_interruptible(&rbuf.wait_poll); + + /* Set up timeout handling. */ + mod_timer(&last_span_timer, + jiffies + WPC8769L_LAST_TIMEOUT_JIFFIES); + + /* Set up last timer us mark. */ + timerstartus = currentus; + } + + spin_unlock_irqrestore(&wpc8769l_hw_spinlock, flags); + return IRQ_RETVAL(handled); +} + +/* Prepare the hardware on module load. */ +static void wpc8769l_prepare_hardware(void) +{ + unsigned long flags; + spin_lock_irqsave(&wpc8769l_hw_spinlock, flags); + + /* I don't know why this needs reading. */ + outb(WPC8769L_BANK_E4, baseport1 + WPC8769L_SELECT_REG); + inb(baseport1 + WPC8769L_READ_ON_STARTUP_REG); + + spin_unlock_irqrestore(&wpc8769l_hw_spinlock, flags); +} + + +/* Wake up device from power down and check whether it was the + * device that woke us up. + */ +static int wpc8769l_power_up_and_check_if_we_woke_us_up(void) +{ + unsigned int data; + int res; + + unsigned long flags; + spin_lock_irqsave(&wpc8769l_hw_spinlock, flags); + + if (baseport2) { + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + res = inb(baseport2 + WPC8769L_WAKEUP_STATUS_REG) + & WPC8769L_WAKEUP_WOKE_UP_MASK; + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + outb(WPC8769L_WAKEUP_WOKE_UP_MASK, + baseport2 + WPC8769L_WAKEUP_STATUS_REG); + + outb(WPC8769L_WAKEUP_ACK_MASK, + baseport2 + WPC8769L_WAKEUP_ACK_REG); + } else { + outb(WPC8769L_BANK_F0, baseport1 + WPC8769L_SELECT_REG); + res = (inb(baseport1 + WPC8769L_WAKEUP_STATUS_LEG_REG) + & WPC8769L_WAKEUP_STATUS_LEG_MASK) ? 1 : 0; + } + + spin_unlock_irqrestore(&wpc8769l_hw_spinlock, flags); + + return res; +} + +/* Disable interrupts from device. */ +static void wpc8769l_disable_interrupts(void) +{ + unsigned long flags; + spin_lock_irqsave(&wpc8769l_hw_spinlock, flags); + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_INTERRUPT_REG) + & ~WPC8769L_INTERRUPT_1_MASK, + baseport1 + WPC8769L_INTERRUPT_REG); + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_INTERRUPT_REG) + & ~WPC8769L_INTERRUPT_1_MASK, + baseport1 + WPC8769L_INTERRUPT_REG); + + spin_unlock_irqrestore(&wpc8769l_hw_spinlock, flags); +} + +#ifdef LIRC_WPC8769L_WAKEUP +/* Expand value nibble for configuration of wake up parameters. + * This seems to manchester-encode a nibble into a byte. */ +static unsigned int wpc8769l_expand_value_nibble(unsigned int nibble) +{ + int i; + unsigned int tmp, tmp2, res; + + res = 0; + + for (i = 0; i < 4; i += 2) { + tmp = (nibble >> i) & 0x3; + switch (tmp) { + case 3: + tmp2 = 5; + break; + case 2: + tmp2 = 6; + break; + case 1: + tmp2 = 9; + break; + case 0: + tmp2 = 0x0a; + break; + default: + return 0; + break; + } + res |= ((tmp2 << i) << i); + } + + return res; +} + +/* Expand mask nibble for configuration of wake up parameters. */ +static unsigned int wpc8769l_expand_mask_nibble(unsigned int nibble) +{ + int i; + unsigned int tmp, tmp2, res; + + res = 0; + + for (i = 0; i < 4; i += 2) { + tmp = (nibble >> i) & 0x3; + switch (tmp) { + case 0: + tmp2 = 0; + break; + case 1: + tmp2 = 3; + break; + case 2: + tmp2 = 0x0c; + break; + case 3: + tmp2 = 0x0f; + break; + default: + return 0; + break; + } + res |= ((tmp2 << i) << i); + } + + return res; +} + +/* Configure wake up triggers for the hardware that supports it. + * THE CALLER MUST HAVE ACQUIRED wpc8769l_hw_spinlock BEFORE CALLING. + */ +static void wpc8769l_configure_wakeup_triggers(void) +{ + unsigned int x; + unsigned int data, data2; + + int i, j; + + x = inb(baseport2 + WPC8769L_WAKEUP_ENABLE_REG) + & WPC8769L_WAKEUP_ENABLE_MASK; + outb(inb(baseport2 + WPC8769L_WAKEUP_ENABLE_REG) + & ~WPC8769L_WAKEUP_ENABLE_MASK, + baseport2 + WPC8769L_WAKEUP_ENABLE_REG); + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + outb(WPC8769L_WAKEUP_CONFIGURING_MASK, + baseport2 + WPC8769L_WAKEUP_STATUS_REG); + outb(WPC8769L_WAKEUP_ACK_MASK, + baseport2 + WPC8769L_WAKEUP_ACK_REG); + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data = inb(baseport2 + WPC8769L_WAKEUP_CONFIG_REG); + data &= WPC8769L_WAKEUP_CONFIG_PRE_MASK; + data |= (max_info_bits + WPC8769L_MAX_INFO_BITS_BIAS) + << WPC8769L_MAX_INFO_BITS_SHIFT; + outb(data, baseport2 + WPC8769L_WAKEUP_CONFIG_REG); + + i = j = 0; + + /* Program values. */ + while (j < WPC8769L_WAKEUP_DATA_BITS) { + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + outb(i + WPC8769L_WAKEUP_DATA_BASE, + baseport2 + WPC8769L_WAKEUP_DATA_PTR_REG); + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data = (rc_wakeup_code >> j) & 0x0f; + data = wpc8769l_expand_value_nibble(data); + outb(data, baseport2 + WPC8769L_WAKEUP_DATA_REG); + + i++; + j += 4; + } + + /* Program masks. */ + while (j < WPC8769L_WAKEUP_DATA_BITS) { + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + outb(i + WPC8769L_WAKEUP_MASK_BASE, + baseport2 + WPC8769L_WAKEUP_DATA_PTR_REG); + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data = (rc_wakeup_mask >> j) & 0x0f; + data = wpc8769l_expand_mask_nibble(data); + outb(data, baseport2 + WPC8769L_WAKEUP_DATA_REG); + + i++; + j += 4; + } + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data2 = inb(baseport2 + WPC8769L_WAKEUP_CONFIG2_REG); + data2 &= WPC8769L_WAKEUP_CONFIG2_AND_MASK; + data2 |= WPC8769L_WAKEUP_CONFIG2_OR_MASK; + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + outb(data2, baseport2 + WPC8769L_WAKEUP_CONFIG2_REG); + + if (x != WPC8769L_WAKEUP_ENABLE_MASK) + outb(inb(baseport2 + WPC8769L_WAKEUP_ENABLE_REG) + | WPC8769L_WAKEUP_ENABLE_MASK, + baseport2 + WPC8769L_WAKEUP_ENABLE_REG); +} +#endif + +/* Enable interrupts from device. */ +static void wpc8769l_enable_interrupts(void) +{ + unsigned int data, data2, data_save; + + unsigned int a, b; + + unsigned long flags; + spin_lock_irqsave(&wpc8769l_hw_spinlock, flags); + + outb(WPC8769L_BANK_F0, baseport1 + WPC8769L_SELECT_REG); + data_save = inb(baseport1 + WPC8769L_WAKEUP_STATUS_LEG_REG); + + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(0, baseport1 + WPC8769L_HARDWARE_ENABLE1_REG); + + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_HARDWARE_ENABLE1_REG) + | WPC8769L_HARDWARE_ENABLE1_MASK, + baseport1 + WPC8769L_HARDWARE_ENABLE1_REG); + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(0, baseport1 + WPC8769L_CONFIG_REG); + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + data = inb(baseport1 + WPC8769L_CONFIG_REG); + data &= ~WPC8769L_CONFIG_OFF_MASK; + data |= WPC8769L_CONFIG_ON_MASK; + outb(data, baseport1 + WPC8769L_CONFIG_REG); + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_DATA_STATUS_MASK_1, baseport1 + WPC8769L_DATA_STATUS_REG); + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_DATA_STATUS_MASK_2, baseport1 + WPC8769L_DATA_STATUS_REG); + + outb(WPC8769L_BANK_F4, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_F4, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_CONFIG2_REG) + & ~WPC8769L_CONFIG2_OFF_MASK, + baseport1 + WPC8769L_CONFIG2_REG); + + outb(WPC8769L_BANK_EC, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_EC, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_CONFIG3_REG) + | WPC8769L_CONFIG3_ON_MASK, + baseport1 + WPC8769L_CONFIG3_REG); + + outb(WPC8769L_BANK_F4, baseport1 + WPC8769L_SELECT_REG); + data = inb(baseport1 + WPC8769L_CONFIG4_REG); + data &= WPC8769L_CONFIG4_AND_MASK; + data |= WPC8769L_CONFIG4_ON_MASK; + + outb(WPC8769L_BANK_F4, baseport1 + WPC8769L_SELECT_REG); + outb(data, baseport1 + WPC8769L_CONFIG4_REG); + + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_CONFIG5_REG) + | WPC8769L_CONFIG5_ON_MASK, + baseport1 + WPC8769L_CONFIG5_REG); + + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_CONFIG6_MASK, baseport1 + WPC8769L_CONFIG6_REG); + + outb(WPC8769L_BANK_E0, baseport1 + WPC8769L_SELECT_REG); + outb(0, baseport1 + WPC8769L_CONFIG7_REG); + + if (baseport2) { + /* + * This has to do with wake-up support, which is + * disabled when the second I/O range doesn't + * exist. + */ + /* -- internal subroutine -- */ + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data2 = inb(baseport2 + WPC8769L_WAKEUP_CONFIG3_REG); + a = (data2 >> WPC8769L_WAKEUP_CONFIG3_A_SHIFT) + & WPC8769L_WAKEUP_CONFIG3_A_MASK; + b = (data2 >> WPC8769L_WAKEUP_CONFIG3_B_SHIFT) + & WPC8769L_WAKEUP_CONFIG3_B_MASK; + + data = inb(baseport2 + WPC8769L_BANK2_CLOCK_REG); + data &= ~WPC8769L_CLOCK_OFF_MASK; + data |= WPC8769L_CLOCK_ON_MASK; + outb(data, baseport2 + WPC8769L_BANK2_CLOCK_REG); + + data2 &= ~WPC8769L_WAKEUP_CONFIG3_OFF_MASK; + data2 |= WPC8769L_WAKEUP_CONFIG3_ON_MASK; + outb(data2, baseport2 + WPC8769L_WAKEUP_CONFIG3_REG); + /* -- end internal subroutine -- */ + +#ifdef LIRC_WPC8769L_WAKEUP + /* Call for setting wake up filters */ + wpc8769l_configure_wakeup_triggers(); +#endif + } else { + /* No second port range. Take these defaults. */ + a = (data_save & WPC8769L_WAKEUP_STATUS_LEG_MASK_A) + ? 0 : 1; + b = (data_save & WPC8769L_WAKEUP_STATUS_LEG_MASK_B) + ? 1 : 0; + } + + outb(WPC8769L_BANK_EC, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_EC, baseport1 + WPC8769L_SELECT_REG); + + data = inb(baseport1 + WPC8769L_CONFIG3_REG); + data = (a == 1) + ? (data & ~WPC8769L_CONFIG3_MASK_1) + : (data | WPC8769L_CONFIG3_MASK_1); + outb(data, baseport1 + WPC8769L_CONFIG3_REG); + + outb(WPC8769L_BANK_F4, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_F4, baseport1 + WPC8769L_SELECT_REG); + + data = inb(baseport1 + WPC8769L_CONFIG2_REG); + data = (b == 0) + ? (data & ~WPC8769L_CONFIG2_MASK_1) + : (data | WPC8769L_CONFIG2_MASK_1); + outb(data, baseport1 + WPC8769L_CONFIG2_REG); + + outb(0, baseport1 + WPC8769L_CONFIG8_REG); + + outb(0, baseport1 + WPC8769L_CONFIG9_REG); + + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(WPC8769L_BANK_00, baseport1 + WPC8769L_SELECT_REG); + outb(inb(baseport1 + WPC8769L_INTERRUPT_REG) + | WPC8769L_INTERRUPT_1_MASK, + baseport1 + WPC8769L_INTERRUPT_REG); + + spin_unlock_irqrestore(&wpc8769l_hw_spinlock, flags); +} + +/* Called when the device is opened. */ +static int set_use_inc(void *data) +{ + int result; + + /* Reset pulse values. */ + last_was_pulse = 0; + last_counter = 0; + + /* Reset last timeout value. */ + lastus = 0; + + /* Init the read buffer. */ + if (lirc_buffer_init(&rbuf, sizeof(lirc_t), RBUF_LEN) < 0) + return -ENOMEM; + + /* Acquire the IRQ. */ + result = request_irq(irq, irq_handler, + IRQF_DISABLED | IRQF_SHARED, + LIRC_DRIVER_NAME, THIS_MODULE); + + switch (result) { + case -EBUSY: + eprintk("IRQ %d busy\n", irq); + lirc_buffer_free(&rbuf); + return -EBUSY; + case -EINVAL: + eprintk("Bad irq number or handler\n"); + lirc_buffer_free(&rbuf); + return -EINVAL; + default: + dprintk("IRQ %d obtained.\n", irq); + break; + }; + + /* Mark the device as open. */ + lirc_wpc8769l_is_open = 1; + + /* Enable hardware interrupts. */ + wpc8769l_enable_interrupts(); + + MOD_INC_USE_COUNT; + return 0; +} + +/* Called when the device is released. */ +static void set_use_dec(void *data) +{ + /* Mark the device as closed. */ + lirc_wpc8769l_is_open = 0; + + /* Cancel the timeout if pending. */ + del_timer_sync(&last_span_timer); + + /* Disable the hardware interrupts. */ + wpc8769l_disable_interrupts(); + + /* Free the IRQ. */ + free_irq(irq, THIS_MODULE); + dprintk("Freed IRQ %d\n", irq); + + /* Free the RX buffer. */ + lirc_buffer_free(&rbuf); + + MOD_DEC_USE_COUNT; +} + +static struct lirc_driver driver = { + .name = LIRC_DRIVER_NAME, + .minor = -1, + .code_length = 1, + .sample_rate = 0, + .data = NULL, + .add_to_buf = NULL, + .get_queue = NULL, + .rbuf = &rbuf, + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .fops = NULL, + .dev = NULL, + .owner = THIS_MODULE, +}; + +static acpi_status wec_parse_resources(struct acpi_resource *resource, + void *context) +{ + if (resource->type == ACPI_RESOURCE_TYPE_IO) { + /* Read the two I/O ranges. */ + if (!baseport1) + baseport1 = resource->data.io.minimum; + else if (!baseport2) + baseport2 = resource->data.io.minimum; + } else if (resource->type == ACPI_RESOURCE_TYPE_IRQ) { + /* Read the rx IRQ number. */ + if (!irq) + irq = resource->data.irq.interrupts[0]; + } + return AE_OK; +} + +static acpi_status wec_parse_device(acpi_handle handle, u32 level, + void *context, void **return_value) +{ + acpi_status status; + iprintk("Found %s device via ACPI.\n", WPC8769L_ACPI_HID); + + status = acpi_walk_resources(handle, METHOD_NAME__CRS, + wec_parse_resources, NULL); + if (ACPI_FAILURE(status)) + return status; + + return AE_OK; +} + +/* Find the device I/O ranges and IRQ number by searching for the + * CIR ACPI entry. */ +static int wpc8769l_acpi_detect(void) +{ + acpi_status status; + status = acpi_get_devices(WPC8769L_ACPI_HID, wec_parse_device, NULL, + NULL); + if (ACPI_FAILURE(status)) + return -ENOENT; + else + return 0; +} + +#ifdef MODULE +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) +static struct platform_device *lirc_wpc8769l_platform_dev; + +static int __devinit lirc_wpc8769l_probe(struct platform_device *dev) +{ + return 0; +} + +static int __devexit lirc_wpc8769l_remove(struct platform_device *dev) +{ + return 0; +} + +static int lirc_wpc8769l_suspend(struct platform_device *dev, + pm_message_t state) +{ + if (lirc_wpc8769l_is_open) + /* Disable all interrupts. */ + wpc8769l_disable_interrupts(); + return 0; +} + +static int lirc_wpc8769l_resume(struct platform_device *dev) +{ + if (lirc_wpc8769l_is_open) { + /* Check if we caused resuming; we still do nothing about it. */ + wpc8769l_power_up_and_check_if_we_woke_us_up(); + + /* Enable interrupts again. */ + wpc8769l_enable_interrupts(); + } + return 0; +} + +static struct platform_driver lirc_wpc8769l_platform_driver = { + .probe = lirc_wpc8769l_probe, + .remove = __devexit_p(lirc_wpc8769l_remove), + .suspend = lirc_wpc8769l_suspend, + .resume = lirc_wpc8769l_resume, + .driver = { + .name = LIRC_DRIVER_NAME, + .owner = THIS_MODULE, + }, +}; + +static int __init lirc_wpc8769l_platform_init(void) +{ + int result; + + result = platform_driver_register(&lirc_wpc8769l_platform_driver); + if (result) { + eprintk("Platform driver register returned %d.\n", result); + return result; + } + + lirc_wpc8769l_platform_dev = platform_device_alloc(LIRC_DRIVER_NAME, 0); + if (!lirc_wpc8769l_platform_dev) { + result = -ENOMEM; + goto exit_driver_unregister; + } + + result = platform_device_add(lirc_wpc8769l_platform_dev); + if (result) + goto exit_device_put; + + return 0; + +exit_device_put: + platform_device_put(lirc_wpc8769l_platform_dev); + +exit_driver_unregister: + platform_driver_unregister(&lirc_wpc8769l_platform_driver); + return result; +} + +static void __exit lirc_wpc8769l_platform_exit(void) +{ + platform_device_unregister(lirc_wpc8769l_platform_dev); + platform_driver_unregister(&lirc_wpc8769l_platform_driver); +} +#endif + +static int __init lirc_wpc8769l_module_init(void) +{ + int rc; + + /* If needed, read the resource information for the ACPI device + * description. */ + if (!skip_probe) { + rc = wpc8769l_acpi_detect(); + if (rc) { + eprintk("Error when looking for %s ACPI device.\n", + WPC8769L_ACPI_HID); + return rc; + } + } + + /* Check that we got some resource info to work with. */ + if (!baseport1 || !irq) { + rc = -ENODEV; + eprintk("Not all required resources found for %s device.\n", + LIRC_DRIVER_NAME); + return rc; + } + + dprintk("%s device found to use 0x%04x, 0x%04x I/O bases, IRQ #%d.\n", + LIRC_DRIVER_NAME, baseport1, baseport2, irq); + + /* Request the two I/O regions. */ + wpc8769l_portblock1_resource = request_region(baseport1, + WPC8769L_IO_REGION_1_SIZE, LIRC_DRIVER_NAME); + if (!wpc8769l_portblock1_resource) { + rc = -EBUSY; + eprintk("Could not allocate I/O range at 0x%04x", baseport1); + return rc; + } + if (baseport2) { + wpc8769l_portblock2_resource = request_region(baseport2, + WPC8769L_IO_REGION_2_SIZE, LIRC_DRIVER_NAME); + if (!wpc8769l_portblock2_resource) { + rc = -EBUSY; + printk(KERN_ERR "Could not allocate I/O range " + "at 0x%04x", + baseport2); + goto exit_release_region_1; + } + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + /* Register the platform driver and device. */ + rc = lirc_wpc8769l_platform_init(); + if (rc) + goto exit_release_region_2; +#endif + + /* Prepare the hardware. */ + wpc8769l_prepare_hardware(); + + /* Do load-time checks. */ + wpc8769l_power_up_and_check_if_we_woke_us_up(); + + /* Configure the driver hooks. */ + driver.features = LIRC_CAN_REC_MODE2; + driver.minor = lirc_register_driver(&driver); + if (driver.minor < 0) { + eprintk("lirc_register_driver failed!\n"); + rc = -EIO; + goto exit_platform_exit; + } + + iprintk("Driver loaded.\n"); + + return 0; /* Everything OK. */ + +exit_platform_exit: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + lirc_wpc8769l_platform_exit(); + +exit_release_region_2: +#endif + if (baseport2) + release_region(baseport2, WPC8769L_IO_REGION_2_SIZE); + +exit_release_region_1: + release_region(baseport1, WPC8769L_IO_REGION_1_SIZE); + + return rc; +} + +module_init(lirc_wpc8769l_module_init); + +static void __exit lirc_wpc8769l_module_exit(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) + /* Unregister the platform driver and device. */ + lirc_wpc8769l_platform_exit(); +#endif + + /* Unregister the LIRC driver. */ + lirc_unregister_driver(driver.minor); + + /* Release the second range. */ + if (baseport2) + release_region(baseport2, WPC8769L_IO_REGION_2_SIZE); + + /* Release the first range. */ + release_region(baseport1, WPC8769L_IO_REGION_1_SIZE); + + iprintk("Driver unloaded.\n"); +} + +module_exit(lirc_wpc8769l_module_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Juan J. Garcia de Soria"); +MODULE_DESCRIPTION("Driver for the integrated Winbond WPC8769L-based IR\ + receiver found in Acer laptops."); +MODULE_VERSION("0.0"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +module_param(baseport1, uint, S_IRUGO); +MODULE_PARM_DESC(baseport1, + "First I/O range base address (default: ACPI autodetect)."); + +module_param(baseport2, uint, S_IRUGO); +MODULE_PARM_DESC(baseport2, + "Second I/O range base address (default: ACPI autodetect)."); + +module_param(irq, uint, S_IRUGO); +MODULE_PARM_DESC(irq, "IRQ number (default: ACPI autodetect)."); + +module_param(skip_probe, bool, S_IRUGO); +MODULE_PARM_DESC(skip_probe, + "Skip ACPI-based device detection \ +(default: false for ACPI autodetect)."); + +#ifdef LIRC_WPC8769L_WAKEUP +module_param(protocol_select, int, S_IRUGO); +MODULE_PARM_DESC(protocol_select, + "Define the protocol for wake up functions (default: 2)."); + +module_param(max_info_bits, int, S_IRUGO); +MODULE_PARM_DESC(max_info_bits, + "Define the maximum info bits for wake up functions (default: 24)."); + +module_param(rc_wakeup_code, uint, S_IRUGO); +MODULE_PARM_DESC(rc_wakeup_code, + "Define the RC code value for wake up functions\ + (default: 0x7ffffbf3)."); + +module_param(rc_wakeup_mask, uint, S_IRUGO); +MODULE_PARM_DESC(rc_wakeup_mask, + "Define the RC code mask for wake up functions (default: 0xff000fff)."); +#endif + +EXPORT_NO_SYMBOLS; + +#endif /* MODULE */ + --- linux-2.6.32.orig/ubuntu/lirc/lirc_wpc8769l/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_wpc8769l/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_WPC8769l) += lirc_wpc8769l.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_ene0100/lirc_ene0100.c +++ linux-2.6.32/ubuntu/lirc/lirc_ene0100/lirc_ene0100.c @@ -0,0 +1,653 @@ +/* + * driver for ENE KB3926 B/C/D CIR (also known as ENE0100) + * + * Copyright (C) 2009 Maxim Levitsky + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#include +#include +#include +#include +#include +#include "lirc_ene0100.h" + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +#error "Sorry, this driver needs kernel version 2.6.16 or higher" +#else + +static int sample_period = 75; +static int enable_idle = 1; +static int enable_learning; + +static void ene_set_idle(struct ene_device *dev, int idle); +static void ene_set_inputs(struct ene_device *dev, int enable); + +/* read a hardware register */ +static u8 ene_hw_read_reg(struct ene_device *dev, u16 reg) +{ + outb(reg >> 8, dev->hw_io + ENE_ADDR_HI); + outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO); + return inb(dev->hw_io + ENE_IO); +} + +/* write a hardware register */ +static void ene_hw_write_reg(struct ene_device *dev, u16 reg, u8 value) +{ + outb(reg >> 8, dev->hw_io + ENE_ADDR_HI); + outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO); + outb(value, dev->hw_io + ENE_IO); +} + +/* change specific bits in hardware register */ +static void ene_hw_write_reg_mask(struct ene_device *dev, + u16 reg, u8 value, u8 mask) +{ + u8 regvalue; + + outb(reg >> 8, dev->hw_io + ENE_ADDR_HI); + outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO); + + regvalue = inb(dev->hw_io + ENE_IO) & ~mask; + regvalue |= (value & mask); + outb(regvalue, dev->hw_io + ENE_IO); +} + +/* read irq status and ack it */ +static int ene_hw_irq_status(struct ene_device *dev, int *buffer_pointer) +{ + u8 irq_status; + u8 fw_flags1, fw_flags2; + + fw_flags2 = ene_hw_read_reg(dev, ENE_FW2); + + if (buffer_pointer) + *buffer_pointer = 4 * (fw_flags2 & ENE_FW2_BUF_HIGH); + + if (dev->hw_revision < ENE_HW_C) { + irq_status = ene_hw_read_reg(dev, ENEB_IRQ_STATUS); + + if (!irq_status & ENEB_IRQ_STATUS_IR) + return 0; + ene_hw_write_reg(dev, ENEB_IRQ_STATUS, + irq_status & ~ENEB_IRQ_STATUS_IR); + + /* rev B support only recieving */ + return ENE_IRQ_RX; + } + + irq_status = ene_hw_read_reg(dev, ENEC_IRQ); + + if (!irq_status && ENEC_IRQ_STATUS) + return 0; + + /* original driver does that twice - a workaround ? */ + ene_hw_write_reg(dev, ENEC_IRQ, irq_status & ~ENEC_IRQ_STATUS); + ene_hw_write_reg(dev, ENEC_IRQ, irq_status & ~ENEC_IRQ_STATUS); + + /* clear unknown flag in F8F9 */ + if (fw_flags2 & ENE_FW2_IRQ_CLR) + ene_hw_write_reg(dev, ENE_FW2, fw_flags2 & ~ENE_FW2_IRQ_CLR); + + /* check if this is a TX interrupt */ + fw_flags1 = ene_hw_read_reg(dev, ENE_FW1); + + if (fw_flags1 & ENE_FW1_TXIRQ) { + ene_hw_write_reg(dev, ENE_FW1, fw_flags1 & ~ENE_FW1_TXIRQ); + return ENE_IRQ_TX; + } else + return ENE_IRQ_RX; +} + +static int ene_hw_detect(struct ene_device *dev) +{ + u8 chip_major, chip_minor; + u8 hw_revision, old_ver; + u8 tmp; + u8 fw_capabilities; + + tmp = ene_hw_read_reg(dev, ENE_HW_UNK); + ene_hw_write_reg(dev, ENE_HW_UNK, tmp & ~ENE_HW_UNK_CLR); + + chip_major = ene_hw_read_reg(dev, ENE_HW_VER_MAJOR); + chip_minor = ene_hw_read_reg(dev, ENE_HW_VER_MINOR); + + ene_hw_write_reg(dev, ENE_HW_UNK, tmp); + hw_revision = ene_hw_read_reg(dev, ENE_HW_VERSION); + old_ver = ene_hw_read_reg(dev, ENE_HW_VER_OLD); + + if (hw_revision == 0xFF) { + + ene_printk(KERN_WARNING, "device seems to be disabled\n"); + ene_printk(KERN_WARNING, + "send a mail to lirc-list@lists.sourceforge.net\n"); + ene_printk(KERN_WARNING, "please attach output of acpidump\n"); + + return -ENODEV; + } + + if (chip_major == 0x33) { + ene_printk(KERN_WARNING, "chips 0x33xx aren't supported yet\n"); + return -ENODEV; + } + + if (chip_major == 0x39 && chip_minor == 0x26 && hw_revision == 0xC0) { + dev->hw_revision = ENE_HW_C; + ene_printk(KERN_WARNING, + "KB3926C detected, driver support is not complete!\n"); + + } else if (old_ver == 0x24 && hw_revision == 0xC0) { + dev->hw_revision = ENE_HW_B; + ene_printk(KERN_NOTICE, "KB3926B detected\n"); + } else { + dev->hw_revision = ENE_HW_D; + ene_printk(KERN_WARNING, + "unknown ENE chip detected, assuming KB3926D\n"); + ene_printk(KERN_WARNING, "driver support incomplete"); + + } + + ene_printk(KERN_DEBUG, "chip is 0x%02x%02x - 0x%02x, 0x%02x\n", + chip_major, chip_minor, old_ver, hw_revision); + + + /* detect features hardware supports */ + + if (dev->hw_revision < ENE_HW_C) + return 0; + + fw_capabilities = ene_hw_read_reg(dev, ENE_FW2); + + dev->hw_gpio40_learning = fw_capabilities & ENE_FW2_GP40_AS_LEARN; + dev->hw_learning_and_tx_capable = fw_capabilities & ENE_FW2_LEARNING; + + dev->hw_fan_as_normal_input = dev->hw_learning_and_tx_capable && + fw_capabilities & ENE_FW2_FAN_AS_NRML_IN; + + ene_printk(KERN_NOTICE, "hardware features:\n"); + ene_printk(KERN_NOTICE, + "learning and tx %s, gpio40_learn %s, fan_in %s\n", + dev->hw_learning_and_tx_capable ? "on" : "off", + dev->hw_gpio40_learning ? "on" : "off", + dev->hw_fan_as_normal_input ? "on" : "off"); + + if (!dev->hw_learning_and_tx_capable && enable_learning) + enable_learning = 0; + + if (dev->hw_learning_and_tx_capable) { + ene_printk(KERN_WARNING, + "Device supports transmitting, but the driver doesn't\n"); + ene_printk(KERN_WARNING, + "due to lack of hardware to test against.\n"); + ene_printk(KERN_WARNING, + "Send a mail to: lirc-list@lists.sourceforge.net\n"); + } + return 0; +} + +/* hardware initialization */ +static int ene_hw_init(void *data) +{ + u8 reg_value; + struct ene_device *dev = (struct ene_device *)data; + dev->in_use = 1; + + if (dev->hw_revision < ENE_HW_C) { + ene_hw_write_reg(dev, ENEB_IRQ, dev->irq << 1); + ene_hw_write_reg(dev, ENEB_IRQ_UNK1, 0x01); + } else { + reg_value = ene_hw_read_reg(dev, ENEC_IRQ) & 0xF0; + reg_value |= ENEC_IRQ_UNK_EN; + reg_value &= ~ENEC_IRQ_STATUS; + reg_value |= (dev->irq & ENEC_IRQ_MASK); + ene_hw_write_reg(dev, ENEC_IRQ, reg_value); + ene_hw_write_reg(dev, ENE_TX_UNK1, 0x63); + } + + ene_hw_write_reg(dev, ENE_CIR_CONF2, 0x00); + ene_set_inputs(dev, enable_learning); + + /* set sampling period */ + ene_hw_write_reg(dev, ENE_CIR_SAMPLE_PERIOD, sample_period); + + /* ack any pending irqs - just in case */ + ene_hw_irq_status(dev, NULL); + + /* enter idle mode */ + ene_set_idle(dev, 1); + + /* enable firmware bits */ + ene_hw_write_reg_mask(dev, ENE_FW1, + ENE_FW1_ENABLE | ENE_FW1_IRQ, + ENE_FW1_ENABLE | ENE_FW1_IRQ); + /* clear stats */ + dev->sample = 0; + return 0; +} + +/* this enables gpio40 signal, used if connected to wide band input*/ +static void ene_enable_gpio40(struct ene_device *dev, int enable) +{ + ene_hw_write_reg_mask(dev, ENE_CIR_CONF1, enable ? + 0 : ENE_CIR_CONF2_GPIO40DIS, + ENE_CIR_CONF2_GPIO40DIS); +} + +/* this enables the classic sampler */ +static void ene_enable_normal_recieve(struct ene_device *dev, int enable) +{ + ene_hw_write_reg(dev, ENE_CIR_CONF1, enable ? ENE_CIR_CONF1_ADC_ON : 0); +} + +/* this enables recieve via fan input */ +static void ene_enable_fan_recieve(struct ene_device *dev, int enable) +{ + if (!enable) + ene_hw_write_reg(dev, ENE_FAN_AS_IN1, 0); + else { + ene_hw_write_reg(dev, ENE_FAN_AS_IN1, ENE_FAN_AS_IN1_EN); + ene_hw_write_reg(dev, ENE_FAN_AS_IN2, ENE_FAN_AS_IN2_EN); + } + dev->fan_input_inuse = enable; +} + +/* determine which input to use*/ +static void ene_set_inputs(struct ene_device *dev, int learning_enable) +{ + ene_enable_normal_recieve(dev, 1); + + /* old hardware doesn't support learning mode for sure */ + if (dev->hw_revision <= ENE_HW_B) + return; + + /* reciever not learning capable, still set gpio40 correctly */ + if (!dev->hw_learning_and_tx_capable) { + ene_enable_gpio40(dev, !dev->hw_gpio40_learning); + return; + } + + /* enable learning mode */ + if (learning_enable) { + ene_enable_gpio40(dev, dev->hw_gpio40_learning); + + /* fan input is not used for learning */ + if (dev->hw_fan_as_normal_input) + ene_enable_fan_recieve(dev, 0); + + /* disable learning mode */ + } else { + if (dev->hw_fan_as_normal_input) { + ene_enable_fan_recieve(dev, 1); + ene_enable_normal_recieve(dev, 0); + } else + ene_enable_gpio40(dev, !dev->hw_gpio40_learning); + } + + /* set few additional settings for this mode */ + ene_hw_write_reg_mask(dev, ENE_CIR_CONF1, learning_enable ? + ENE_CIR_CONF1_LEARN1 : 0, ENE_CIR_CONF1_LEARN1); + + ene_hw_write_reg_mask(dev, ENE_CIR_CONF2, learning_enable ? + ENE_CIR_CONF2_LEARN2 : 0, ENE_CIR_CONF2_LEARN2); +} + +/* deinitialization */ +static void ene_hw_deinit(void *data) +{ + struct ene_device *dev = (struct ene_device *)data; + + /* disable samplers */ + ene_enable_normal_recieve(dev, 0); + + if (dev->hw_fan_as_normal_input) + ene_enable_fan_recieve(dev, 0); + + /* disable hardware IRQ and firmware flag */ + ene_hw_write_reg_mask(dev, ENE_FW1, 0, ENE_FW1_ENABLE | ENE_FW1_IRQ); + + ene_set_idle(dev, 1); + dev->in_use = 0; +} + +/* sends current sample to userspace */ +static void send_sample(struct ene_device *dev) +{ + int value = abs(dev->sample) & PULSE_MASK; + + if (dev->sample > 0) + value |= PULSE_BIT; + + if (!lirc_buffer_full(dev->lirc_driver->rbuf)) { + lirc_buffer_write(dev->lirc_driver->rbuf, (void *)&value); + wake_up(&dev->lirc_driver->rbuf->wait_poll); + } + dev->sample = 0; +} + +/* this updates current sample */ +static void update_sample(struct ene_device *dev, int sample) +{ + if (!dev->sample) + dev->sample = sample; + else if (same_sign(dev->sample, sample)) + dev->sample += sample; + else { + send_sample(dev); + dev->sample = sample; + } +} + +/* enable or disable idle mode */ +static void ene_set_idle(struct ene_device *dev, int idle) +{ + struct timeval now; + int disable = idle && enable_idle && (dev->hw_revision < ENE_HW_C); + + ene_hw_write_reg_mask(dev, ENE_CIR_SAMPLE_PERIOD, + disable ? 0 : ENE_CIR_SAMPLE_OVERFLOW, + ENE_CIR_SAMPLE_OVERFLOW); + dev->idle = idle; + + /* remember when we have entered the idle mode */ + if (idle) { + do_gettimeofday(&dev->gap_start); + return; + } + + /* send the gap between keypresses now */ + do_gettimeofday(&now); + + if (now.tv_sec - dev->gap_start.tv_sec > 16) + dev->sample = space(PULSE_MASK); + else + dev->sample = dev->sample + + space(1000000ull * (now.tv_sec - dev->gap_start.tv_sec)) + + space(now.tv_usec - dev->gap_start.tv_usec); + + if (abs(dev->sample) > PULSE_MASK) + dev->sample = space(PULSE_MASK); + send_sample(dev); +} + +/* interrupt handler */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) +static irqreturn_t ene_hw_irq(int irq, void *data) +#else +static irqreturn_t ene_hw_irq(int irq, void *data, struct pt_regs *regs) +#endif +{ + u16 hw_value; + int i, hw_sample; + int space; + int buffer_pointer; + int irq_status; + + struct ene_device *dev = (struct ene_device *)data; + irq_status = ene_hw_irq_status(dev, &buffer_pointer); + + if (!irq_status) + return IRQ_NONE; + + /* TODO: only RX for now */ + if (irq_status == ENE_IRQ_TX) + return IRQ_HANDLED; + + for (i = 0; i < ENE_SAMPLES_SIZE; i++) { + + hw_value = ene_hw_read_reg(dev, + ENE_SAMPLE_BUFFER + buffer_pointer + i); + + if (dev->fan_input_inuse) { + /* read high part of the sample */ + hw_value |= ene_hw_read_reg(dev, + ENE_SAMPLE_BUFFER_FAN + buffer_pointer + i) << 8; + + /* test for _space_ bit */ + space = !(hw_value & ENE_FAN_SMPL_PULS_MSK); + + /* clear space bit, and other unused bits */ + hw_value &= ENE_FAN_VALUE_MASK; + hw_sample = hw_value * ENE_SAMPLE_PERIOD_FAN; + + } else { + space = hw_value & ENE_SAMPLE_SPC_MASK; + hw_value &= ENE_SAMPLE_VALUE_MASK; + hw_sample = hw_value * sample_period; + } + + /* no more data */ + if (!(hw_value)) + break; + + if (space) + hw_sample *= -1; + + /* overflow sample recieved, handle it */ + + if (!dev->fan_input_inuse && hw_value == ENE_SAMPLE_OVERFLOW) { + + if (dev->idle) + continue; + + if (dev->sample > 0 || abs(dev->sample) <= ENE_MAXGAP) + update_sample(dev, hw_sample); + else + ene_set_idle(dev, 1); + + continue; + } + + /* normal first sample recieved */ + if (!dev->fan_input_inuse && dev->idle) { + ene_set_idle(dev, 0); + + /* discard first recieved value, its random + since its the time signal was off before + first pulse if idle mode is enabled, HW + does that for us */ + + if (!enable_idle) + continue; + } + update_sample(dev, hw_sample); + send_sample(dev); + } + return IRQ_HANDLED; +} + +static int ene_probe(struct pnp_dev *pnp_dev, + const struct pnp_device_id *dev_id) +{ + struct ene_device *dev; + struct lirc_driver *lirc_driver; + int error = -ENOMEM; + + dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL); + + if (!dev) + goto err1; + + dev->pnp_dev = pnp_dev; + pnp_set_drvdata(pnp_dev, dev); + + + /* prepare lirc interface */ + error = -ENOMEM; + lirc_driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); + + if (!lirc_driver) + goto err2; + + dev->lirc_driver = lirc_driver; + + strcpy(lirc_driver->name, ENE_DRIVER_NAME); + lirc_driver->minor = -1; + lirc_driver->code_length = sizeof(int) * 8; + lirc_driver->features = LIRC_CAN_REC_MODE2; + lirc_driver->data = dev; + lirc_driver->set_use_inc = ene_hw_init; + lirc_driver->set_use_dec = ene_hw_deinit; + lirc_driver->dev = &pnp_dev->dev; + lirc_driver->owner = THIS_MODULE; + + lirc_driver->rbuf = kzalloc(sizeof(struct lirc_buffer), GFP_KERNEL); + + if (!lirc_driver->rbuf) + goto err3; + + if (lirc_buffer_init(lirc_driver->rbuf, sizeof(int), sizeof(int) * 256)) + goto err4; + + error = -ENODEV; + if (lirc_register_driver(lirc_driver)) + goto err5; + + /* validate resources */ + if (!pnp_port_valid(pnp_dev, 0) || pnp_port_len(pnp_dev, 0) < ENE_MAX_IO) + goto err6; + + if (!pnp_irq_valid(pnp_dev, 0)) + goto err6; + + dev->hw_io = pnp_port_start(pnp_dev, 0); + dev->irq = pnp_irq(pnp_dev, 0); + + /* claim the resources */ + error = -EBUSY; + if (!request_region(dev->hw_io, ENE_MAX_IO, ENE_DRIVER_NAME)) + goto err6; + + if (request_irq(dev->irq, ene_hw_irq, + IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) + goto err7; + + /* detect hardware version and features */ + error = ene_hw_detect(dev); + if (error) + goto err8; + + ene_printk(KERN_NOTICE, "driver has been succesfully loaded\n"); + return 0; + +err8: + free_irq(dev->irq, dev); +err7: + release_region(dev->hw_io, ENE_MAX_IO); +err6: + lirc_unregister_driver(lirc_driver->minor); +err5: + lirc_buffer_free(lirc_driver->rbuf); +err4: + kfree(lirc_driver->rbuf); +err3: + kfree(lirc_driver); +err2: + kfree(dev); +err1: + return error; +} + +static void ene_remove(struct pnp_dev *pnp_dev) +{ + struct ene_device *dev = pnp_get_drvdata(pnp_dev); + ene_hw_deinit(dev); + free_irq(dev->irq, dev); + release_region(dev->hw_io, ENE_MAX_IO); + lirc_unregister_driver(dev->lirc_driver->minor); + lirc_buffer_free(dev->lirc_driver->rbuf); + kfree(dev->lirc_driver); + kfree(dev); +} + +#ifdef CONFIG_PM + +/* TODO: make 'wake on IR' configurable and add .shutdown */ +/* currently impossible due to lack of kernel support */ + +static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state) +{ + struct ene_device *dev = pnp_get_drvdata(pnp_dev); + ene_hw_write_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, ENE_FW1_WAKE); + return 0; +} + +static int ene_resume(struct pnp_dev *pnp_dev) +{ + struct ene_device *dev = pnp_get_drvdata(pnp_dev); + if (dev->in_use) + ene_hw_init(dev); + + ene_hw_write_reg_mask(dev, ENE_FW1, 0, ENE_FW1_WAKE); + return 0; +} + +#endif + +static const struct pnp_device_id ene_ids[] = { + {.id = "ENE0100",}, + {}, +}; + +static struct pnp_driver ene_driver = { + .name = ENE_DRIVER_NAME, + .id_table = ene_ids, + .flags = PNP_DRIVER_RES_DO_NOT_CHANGE, + + .probe = ene_probe, + .remove = __devexit_p(ene_remove), + +#ifdef CONFIG_PM + .suspend = ene_suspend, + .resume = ene_resume, +#endif +}; + +static int __init ene_init(void) +{ + if (sample_period < 5) { + ene_printk(KERN_ERR, "sample period must be at\n"); + ene_printk(KERN_ERR, "least 5 us, (at least 30 recommended)\n"); + return -EINVAL; + } + return pnp_register_driver(&ene_driver); +} + +static void ene_exit(void) +{ + pnp_unregister_driver(&ene_driver); +} + +module_param(sample_period, int, S_IRUGO); +MODULE_PARM_DESC(sample_period, "Hardware sample period (75 us default)"); + +module_param(enable_idle, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(enable_idle, + "Enables turning off signal sampling after long inactivity time; " + "if disabled might help detecting input signal (default: enabled)"); + +module_param(enable_learning, bool, S_IRUGO); +MODULE_PARM_DESC(enable_learning, "Use wide band (learning) reciever"); + +MODULE_DEVICE_TABLE(pnp, ene_ids); +MODULE_DESCRIPTION + ("LIRC driver for KB3926B/KB3926C/KB3926D (aka ENE0100) CIR port"); +MODULE_AUTHOR("Maxim Levitsky"); +MODULE_LICENSE("GPL"); + +module_init(ene_init); +module_exit(ene_exit); +#endif --- linux-2.6.32.orig/ubuntu/lirc/lirc_ene0100/lirc_ene0100.h +++ linux-2.6.32/ubuntu/lirc/lirc_ene0100/lirc_ene0100.h @@ -0,0 +1,170 @@ +/* + * driver for ENE KB3926 B/C/D CIR (also known as ENE0100) + * + * Copyright (C) 2009 Maxim Levitsky + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#include "../kcompat.h" +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" + +/* hardware address */ +#define ENE_STATUS 0 /* hardware status - unused */ +#define ENE_ADDR_HI 1 /* hi byte of register address */ +#define ENE_ADDR_LO 2 /* low byte of register address */ +#define ENE_IO 3 /* read/write window */ +#define ENE_MAX_IO 4 + +/* 8 bytes of samples, divided in 2 halfs*/ +#define ENE_SAMPLE_BUFFER 0xF8F0 /* regular sample buffer */ +#define ENE_SAMPLE_SPC_MASK (1 << 7) /* sample is space */ +#define ENE_SAMPLE_VALUE_MASK 0x7F +#define ENE_SAMPLE_OVERFLOW 0x7F +#define ENE_SAMPLES_SIZE 4 + +/* fan input sample buffer */ +#define ENE_SAMPLE_BUFFER_FAN 0xF8FB /* this buffer holds high byte of */ + /* each sample of normal buffer */ + +#define ENE_FAN_SMPL_PULS_MSK 0x8000 /* this bit of combined sample */ + /* if set, says that sample is pulse */ +#define ENE_FAN_VALUE_MASK 0x0FFF /* mask for valid bits of the value */ + +/* first firmware register */ +#define ENE_FW1 0xF8F8 +#define ENE_FW1_ENABLE (1 << 0) /* enable fw processing */ +#define ENE_FW1_TXIRQ (1 << 1) /* TX interrupt pending */ +#define ENE_FW1_WAKE (1 << 6) /* enable wake from S3 */ +#define ENE_FW1_IRQ (1 << 7) /* enable interrupt */ + +/* second firmware register */ +#define ENE_FW2 0xF8F9 +#define ENE_FW2_BUF_HIGH (1 << 0) /* which half of the buffer to read */ +#define ENE_FW2_IRQ_CLR (1 << 2) /* clear this on IRQ */ +#define ENE_FW2_GP40_AS_LEARN (1 << 4) /* normal input is used as */ + /* learning input */ +#define ENE_FW2_FAN_AS_NRML_IN (1 << 6) /* fan is used as normal input */ +#define ENE_FW2_LEARNING (1 << 7) /* hardware supports learning and TX */ + +/* fan as input settings - only if learning capable */ +#define ENE_FAN_AS_IN1 0xFE30 /* fan init reg 1 */ +#define ENE_FAN_AS_IN1_EN 0xCD +#define ENE_FAN_AS_IN2 0xFE31 /* fan init reg 2 */ +#define ENE_FAN_AS_IN2_EN 0x03 +#define ENE_SAMPLE_PERIOD_FAN 61 /* fan input has fixed sample period */ + +/* IRQ registers block (for revision B) */ +#define ENEB_IRQ 0xFD09 /* IRQ number */ +#define ENEB_IRQ_UNK1 0xFD17 /* unknown setting = 1 */ +#define ENEB_IRQ_STATUS 0xFD80 /* irq status */ +#define ENEB_IRQ_STATUS_IR (1 << 5) /* IR irq */ + +/* IRQ registers block (for revision C,D) */ +#define ENEC_IRQ 0xFE9B /* new irq settings register */ +#define ENEC_IRQ_MASK 0x0F /* irq number mask */ +#define ENEC_IRQ_UNK_EN (1 << 4) /* always enabled */ +#define ENEC_IRQ_STATUS (1 << 5) /* irq status and ACK */ + +/* CIR block settings */ +#define ENE_CIR_CONF1 0xFEC0 +#define ENE_CIR_CONF1_ADC_ON 0x7 /* reciever on gpio40 enabled */ +#define ENE_CIR_CONF1_LEARN1 (1 << 3) /* enabled on learning mode */ +#define ENE_CIR_CONF1_TX_ON 0x30 /* enabled on transmit */ +#define ENE_CIR_CONF1_TX_CARR (1 << 7) /* send TX carrier or not */ + +#define ENE_CIR_CONF2 0xFEC1 /* unknown setting = 0 */ +#define ENE_CIR_CONF2_LEARN2 (1 << 4) /* set on enable learning */ +#define ENE_CIR_CONF2_GPIO40DIS (1 << 5) /* disable normal input via gpio40 */ + +#define ENE_CIR_SAMPLE_PERIOD 0xFEC8 /* sample period in us */ +#define ENE_CIR_SAMPLE_OVERFLOW (1 << 7) /* interrupt on overflows if set */ + + +/* transmitter - not implemented yet */ +/* KB3926C and higher */ +/* transmission is very similiar to recieving, a byte is written to */ +/* ENE_TX_INPUT, in same manner as it is read from sample buffer */ +/* sample period is fixed*/ + + +/* transmitter ports */ +#define ENE_TX_PORT1 0xFC01 /* this enables one or both */ +#define ENE_TX_PORT1_EN (1 << 5) /* TX ports */ +#define ENE_TX_PORT2 0xFC08 +#define ENE_TX_PORT2_EN (1 << 1) + +#define ENE_TX_INPUT 0xFEC9 /* next byte to transmit */ +#define ENE_TX_SPC_MASK (1 << 7) /* Transmitted sample is space */ +#define ENE_TX_UNK1 0xFECB /* set to 0x63 */ +#define ENE_TX_SMPL_PERIOD 50 /* transmit sample period */ + + +#define ENE_TX_CARRIER 0xFECE /* TX carrier * 2 (khz) */ +#define ENE_TX_CARRIER_UNKBIT 0x80 /* This bit set on transmit */ +#define ENE_TX_CARRIER_LOW 0xFECF /* TX carrier / 2 */ + +/* Hardware versions */ +#define ENE_HW_VERSION 0xFF00 /* hardware revision */ +#define ENE_HW_UNK 0xFF1D +#define ENE_HW_UNK_CLR (1 << 2) +#define ENE_HW_VER_MAJOR 0xFF1E /* chip version */ +#define ENE_HW_VER_MINOR 0xFF1F +#define ENE_HW_VER_OLD 0xFD00 + +#define same_sign(a, b) ((((a) > 0) && (b) > 0) || ((a) < 0 && (b) < 0)) + +#define ENE_DRIVER_NAME "enecir" +#define ENE_MAXGAP 250000 /* this is amount of time we wait + before turning the sampler, chosen + arbitry */ + +#define space(len) (-(len)) /* add a space */ + +/* software defines */ +#define ENE_IRQ_RX 1 +#define ENE_IRQ_TX 2 + +#define ENE_HW_B 1 /* 3926B */ +#define ENE_HW_C 2 /* 3926C */ +#define ENE_HW_D 3 /* 3926D */ + +#define ene_printk(level, text, ...) \ + printk(level ENE_DRIVER_NAME ": " text, ## __VA_ARGS__) + +struct ene_device { + struct pnp_dev *pnp_dev; + struct lirc_driver *lirc_driver; + + /* hw settings */ + unsigned long hw_io; + int irq; + + int hw_revision; /* hardware revision */ + int hw_learning_and_tx_capable; /* learning capable */ + int hw_gpio40_learning; /* gpio40 is learning */ + int hw_fan_as_normal_input; /* fan input is used as regular input */ + + /* device data */ + int idle; + int fan_input_inuse; + + int sample; + int in_use; + + struct timeval gap_start; +}; --- linux-2.6.32.orig/ubuntu/lirc/lirc_ene0100/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_ene0100/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_ENE0100) += lirc_ene0100.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_igorplugusb/lirc_igorplugusb.c +++ linux-2.6.32/ubuntu/lirc/lirc_igorplugusb/lirc_igorplugusb.c @@ -0,0 +1,637 @@ +/* + * lirc_igorplugusb - USB remote support for LIRC + * + * Supports the standard homebrew IgorPlugUSB receiver with Igor's firmware. + * See http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm + * + * The device can only record bursts of up to 36 pulses/spaces. + * Works fine with RC5. Longer commands lead to device buffer overrun. + * (Maybe a better firmware or a microcontroller with more ram can help?) + * + * Version 0.1 [beta status] + * + * Copyright (C) 2004 Jan M. Hochstein + * + * + * This driver was derived from: + * Paul Miller + * "lirc_atiusb" module + * Vladimir Dergachev 's 2002 + * "USB ATI Remote support" (input device) + * Adrian Dewhurst 's 2002 + * "USB StreamZap remote driver" (LIRC) + * Artur Lipowski 's 2002 + * "lirc_dev" and "lirc_gpio" LIRC modules + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +#error "*******************************************************" +#error "Sorry, this driver needs kernel version 2.4.0 or higher" +#error "*******************************************************" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../kcompat.h" +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" + +#if !defined(KERNEL_2_5) +#define USB_CTRL_GET_TIMEOUT 5 +#endif + +/* module identification */ +#define DRIVER_VERSION "0.2" +#define DRIVER_AUTHOR \ + "Jan M. Hochstein " +#define DRIVER_DESC "USB remote driver for LIRC" +#define DRIVER_NAME "lirc_igorplugusb" + +/* debugging support */ +#ifdef CONFIG_USB_DEBUG +static int debug = 1; +#else +static int debug; +#endif + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG DRIVER_NAME fmt, ## args); \ + } while (0) + +/* One mode2 pulse/space has 4 bytes. */ +#define CODE_LENGTH sizeof(lirc_t) + +/* Igor's firmware cannot record bursts longer than 36. */ +#define DEVICE_BUFLEN 36 + +/* + * Header at the beginning of the device's buffer: + * unsigned char data_length + * unsigned char data_start (!=0 means ring-buffer overrun) + * unsigned char counter (incremented by each burst) + */ +#define DEVICE_HEADERLEN 3 + +/* This is for the gap */ +#define ADDITIONAL_LIRC_BYTES 2 + +/* times to poll per second */ +#define SAMPLE_RATE 100 +static int sample_rate = SAMPLE_RATE; + + +/**** Igor's USB Request Codes */ + +#define SET_INFRABUFFER_EMPTY 1 +/** + * Params: none + * Answer: empty + */ + +#define GET_INFRACODE 2 +/** + * Params: + * wValue: offset to begin reading infra buffer + * + * Answer: infra data + */ + +#define SET_DATAPORT_DIRECTION 3 +/** + * Params: + * wValue: (byte) 1 bit for each data port pin (0=in, 1=out) + * + * Answer: empty + */ + +#define GET_DATAPORT_DIRECTION 4 +/** + * Params: none + * + * Answer: (byte) 1 bit for each data port pin (0=in, 1=out) + */ + +#define SET_OUT_DATAPORT 5 +/** + * Params: + * wValue: byte to write to output data port + * + * Answer: empty + */ + +#define GET_OUT_DATAPORT 6 +/** + * Params: none + * + * Answer: least significant 3 bits read from output data port + */ + +#define GET_IN_DATAPORT 7 +/** + * Params: none + * + * Answer: least significant 3 bits read from input data port + */ + +#define READ_EEPROM 8 +/** + * Params: + * wValue: offset to begin reading EEPROM + * + * Answer: EEPROM bytes + */ + +#define WRITE_EEPROM 9 +/** + * Params: + * wValue: offset to EEPROM byte + * wIndex: byte to write + * + * Answer: empty + */ + +#define SEND_RS232 10 +/** + * Params: + * wValue: byte to send + * + * Answer: empty + */ + +#define RECV_RS232 11 +/** + * Params: none + * + * Answer: byte received + */ + +#define SET_RS232_BAUD 12 +/** + * Params: + * wValue: byte to write to UART bit rate register (UBRR) + * + * Answer: empty + */ + +#define GET_RS232_BAUD 13 +/** + * Params: none + * + * Answer: byte read from UART bit rate register (UBRR) + */ + + +/* data structure for each usb remote */ +struct igorplug { + + /* usb */ + struct usb_device *usbdev; + struct urb *urb_in; + int devnum; + + unsigned char *buf_in; + unsigned int len_in; + int in_space; + struct timeval last_time; + +#if defined(KERNEL_2_5) + dma_addr_t dma_in; +#endif + + /* lirc */ + struct lirc_driver *d; + + /* handle sending (init strings) */ + int send_flags; +}; + +static int set_use_inc(void *data) +{ + struct igorplug *ir = data; + + if (!ir) { + printk(KERN_ERR DRIVER_NAME + "[?]: set_use_inc called with no context\n"); + return -EIO; + } + dprintk("[%d]: set use inc\n", ir->devnum); + + MOD_INC_USE_COUNT; + + if (!ir->usbdev) + return -ENODEV; + + return 0; +} + +static void set_use_dec(void *data) +{ + struct igorplug *ir = data; + + if (!ir) { + printk(KERN_ERR DRIVER_NAME + "[?]: set_use_dec called with no context\n"); + return; + } + dprintk("[%d]: set use dec\n", ir->devnum); + + MOD_DEC_USE_COUNT; +} + +static void send_fragment(struct igorplug *ir, struct lirc_buffer *buf, + int i, int max) +{ + /* MODE2: pulse/space (PULSE_BIT) in 1us units */ + while (i < max) { + /* 1 Igor-tick = 85.333333 us */ + lirc_t code = (unsigned int)ir->buf_in[i] * 85 + + (unsigned int)ir->buf_in[i] / 3; + ir->last_time.tv_usec += code; + if (ir->in_space) + code |= PULSE_BIT; + lirc_buffer_write_n(buf, (unsigned char *)&code, 1); + /* 1 chunk = CODE_LENGTH bytes */ + ir->in_space ^= 1; + ++i; + } +} + +/** + * Called in user context. + * return 0 if data was added to the buffer and + * -ENODATA if none was available. This should add some number of bits + * evenly divisible by code_length to the buffer + */ +static int usb_remote_poll(void *data, struct lirc_buffer *buf) +{ + int ret; + struct igorplug *ir = (struct igorplug *)data; + + if (!ir->usbdev) /* Has the device been removed? */ + return -ENODEV; + + memset(ir->buf_in, 0, ir->len_in); + + ret = usb_control_msg( + ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), + GET_INFRACODE, USB_TYPE_VENDOR|USB_DIR_IN, + 0/* offset */, /*unused*/0, + ir->buf_in, ir->len_in, + /*timeout*/HZ * USB_CTRL_GET_TIMEOUT); + if (ret > 0) { + lirc_t code, timediff; + struct timeval now; + + /* ACK packet has 1 byte --> ignore */ + if (ret < DEVICE_HEADERLEN) + return -ENODATA; + + dprintk(": Got %d bytes. Header: %02x %02x %02x\n", + ret, ir->buf_in[0], ir->buf_in[1], ir->buf_in[2]); + + do_gettimeofday(&now); + timediff = now.tv_sec - ir->last_time.tv_sec; + if (timediff + 1 > PULSE_MASK / 1000000) + timediff = PULSE_MASK; + else { + timediff *= 1000000; + timediff += now.tv_usec - ir->last_time.tv_usec; + } + ir->last_time.tv_sec = now.tv_sec; + ir->last_time.tv_usec = now.tv_usec; + + /* create leading gap */ + code = timediff; + lirc_buffer_write(buf, (unsigned char *)&code); + ir->in_space = 1; /* next comes a pulse */ + + if (ir->buf_in[2] == 0) + send_fragment(ir, buf, DEVICE_HEADERLEN, ret); + else { + printk(KERN_WARNING DRIVER_NAME + "[%d]: Device buffer overrun.\n", ir->devnum); + /* HHHNNNNNNNNNNNOOOOOOOO H = header + <---[2]---> N = newer + <---------ret--------> O = older */ + ir->buf_in[2] %= ret - DEVICE_HEADERLEN; /* sanitize */ + /* keep even-ness to not desync pulse/pause */ + send_fragment(ir, buf, DEVICE_HEADERLEN + + ir->buf_in[2] - (ir->buf_in[2] & 1), + ret); + send_fragment(ir, buf, DEVICE_HEADERLEN, + DEVICE_HEADERLEN + ir->buf_in[2]); + } + + ret = usb_control_msg( + ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), + SET_INFRABUFFER_EMPTY, USB_TYPE_VENDOR|USB_DIR_IN, + /*unused*/0, /*unused*/0, + /*dummy*/ir->buf_in, /*dummy*/ir->len_in, + /*timeout*/HZ * USB_CTRL_GET_TIMEOUT); + if (ret < 0) + printk(KERN_WARNING DRIVER_NAME + "[%d]: SET_INFRABUFFER_EMPTY: error %d\n", + ir->devnum, ret); + return 0; + } else + printk(KERN_WARNING DRIVER_NAME + "[%d]: GET_INFRACODE: error %d\n", + ir->devnum, ret); + + return -ENODATA; +} + + + +#if defined(KERNEL_2_5) +static int usb_remote_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + struct usb_device *dev = NULL; + struct usb_host_interface *idesc = NULL; + struct usb_host_endpoint *ep_ctl2; +#else +static void *usb_remote_probe(struct usb_device *dev, unsigned int ifnum, + const struct usb_device_id *id) +{ + struct usb_interface *intf; + struct usb_interface_descriptor *idesc; + struct usb_endpoint_descriptor *ep_ctl2; +#endif + struct igorplug *ir = NULL; + struct lirc_driver *driver = NULL; + int devnum, pipe, maxp; + int minor = 0; + char buf[63], name[128] = ""; + int mem_failure = 0; + int ret; + + dprintk(": usb probe called.\n"); + +#if defined(KERNEL_2_5) + dev = interface_to_usbdev(intf); + +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 5) + idesc = &intf->altsetting[intf->act_altsetting]; /* in 2.6.4 */ +# else + idesc = intf->cur_altsetting; /* in 2.6.6 */ +# endif + + if (idesc->desc.bNumEndpoints != 1) + return -ENODEV; + ep_ctl2 = idesc->endpoint; + if (((ep_ctl2->desc.bEndpointAddress & USB_ENDPOINT_DIR_MASK) + != USB_DIR_IN) + || (ep_ctl2->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + != USB_ENDPOINT_XFER_CONTROL) + return -ENODEV; + pipe = usb_rcvctrlpipe(dev, ep_ctl2->desc.bEndpointAddress); +#else + intf = &dev->actconfig->interface[ifnum]; + idesc = &intf->altsetting[intf->act_altsetting]; + if (idesc->bNumEndpoints != 1) + return NULL; + ep_ctl2 = idesc->endpoint; + if (((ep_ctl2->bEndpointAddress & USB_ENDPOINT_DIR_MASK) + != USB_DIR_IN) + || (ep_ctl2->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + != USB_ENDPOINT_XFER_CONTROL) + return NULL; + pipe = usb_rcvctrlpipe(dev, ep_ctl2->bEndpointAddress); +#endif + devnum = dev->devnum; + maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); + + dprintk(DRIVER_NAME "[%d]: bytes_in_key=%d maxp=%d\n", + devnum, CODE_LENGTH, maxp); + + + mem_failure = 0; + ir = kzalloc(sizeof(struct igorplug), GFP_KERNEL); + if (!ir) { + mem_failure = 1; + goto mem_failure_switch; + } + + driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); + if (!driver) { + mem_failure = 2; + goto mem_failure_switch; + } + +#if defined(KERNEL_2_5) + ir->buf_in = usb_buffer_alloc(dev, + DEVICE_BUFLEN+DEVICE_HEADERLEN, + GFP_ATOMIC, &ir->dma_in); +#else + ir->buf_in = kmalloc(DEVICE_BUFLEN+DEVICE_HEADERLEN, + GFP_KERNEL); +#endif + if (!ir->buf_in) { + mem_failure = 3; + goto mem_failure_switch; + } + + strcpy(driver->name, DRIVER_NAME " "); + driver->minor = -1; + driver->code_length = CODE_LENGTH * 8; /* in bits */ + driver->features = LIRC_CAN_REC_MODE2; + driver->data = ir; + driver->buffer_size = DEVICE_BUFLEN + ADDITIONAL_LIRC_BYTES; + driver->set_use_inc = &set_use_inc; + driver->set_use_dec = &set_use_dec; + driver->sample_rate = sample_rate; /* per second */ + driver->add_to_buf = &usb_remote_poll; +#ifdef LIRC_HAVE_SYSFS + driver->dev = &intf->dev; +#endif + driver->owner = THIS_MODULE; + + minor = lirc_register_driver(driver); + if (minor < 0) + mem_failure = 9; + +mem_failure_switch: + + switch (mem_failure) { + case 9: +#if defined(KERNEL_2_5) + usb_buffer_free(dev, DEVICE_BUFLEN+DEVICE_HEADERLEN, + ir->buf_in, ir->dma_in); +#else + kfree(ir->buf_in); +#endif + case 3: + kfree(driver); + case 2: + kfree(ir); + case 1: + printk(KERN_ERR DRIVER_NAME "[%d]: out of memory (code=%d)\n", + devnum, mem_failure); +#if defined(KERNEL_2_5) + return -ENOMEM; +#else + return NULL; +#endif + } + + driver->minor = minor; + ir->d = driver; + ir->devnum = devnum; + ir->usbdev = dev; + ir->len_in = DEVICE_BUFLEN+DEVICE_HEADERLEN; + ir->in_space = 1; /* First mode2 event is a space. */ + do_gettimeofday(&ir->last_time); + + if (dev->descriptor.iManufacturer + && usb_string(dev, dev->descriptor.iManufacturer, + buf, sizeof(buf)) > 0) + strlcpy(name, buf, sizeof(name)); + if (dev->descriptor.iProduct + && usb_string(dev, dev->descriptor.iProduct, buf, sizeof(buf)) > 0) + snprintf(name + strlen(name), sizeof(name) - strlen(name), + " %s", buf); + printk(KERN_INFO DRIVER_NAME "[%d]: %s on usb%d:%d\n", devnum, name, + dev->bus->busnum, devnum); + + /* clear device buffer */ + ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), + SET_INFRABUFFER_EMPTY, USB_TYPE_VENDOR|USB_DIR_IN, + /*unused*/0, /*unused*/0, + /*dummy*/ir->buf_in, /*dummy*/ir->len_in, + /*timeout*/HZ * USB_CTRL_GET_TIMEOUT); + if (ret < 0) + printk(KERN_WARNING DRIVER_NAME + "[%d]: SET_INFRABUFFER_EMPTY: error %d\n", + devnum, ret); + +#if defined(KERNEL_2_5) + usb_set_intfdata(intf, ir); + return 0; +#else + return ir; +#endif +} + + +#if defined(KERNEL_2_5) +static void usb_remote_disconnect(struct usb_interface *intf) +{ + struct usb_device *dev = interface_to_usbdev(intf); + struct igorplug *ir = usb_get_intfdata(intf); +#else +static void usb_remote_disconnect(struct usb_device *dev, void *ptr) +{ + struct igorplug *ir = ptr; +#endif + + if (!ir || !ir->d) + return; + + printk(KERN_INFO DRIVER_NAME + "[%d]: usb remote disconnected\n", ir->devnum); + + lirc_unregister_driver(ir->d->minor); + + lirc_buffer_free(ir->d->rbuf); + kfree(ir->d->rbuf); + kfree(ir->d); + + +#if defined(KERNEL_2_5) + usb_buffer_free(dev, ir->len_in, ir->buf_in, ir->dma_in); +#else + kfree(ir->buf_in); +#endif + + kfree(ir); +} + +static struct usb_device_id usb_remote_id_table [] = { + /* Igor Plug USB (Atmel's Manufact. ID) */ + { USB_DEVICE(0x03eb, 0x0002) }, + /* Fit PC2 Infrared Adapter */ + { USB_DEVICE(0x03eb, 0x21fe) }, + + /* Terminating entry */ + { } +}; + +static struct usb_driver usb_remote_driver = { + LIRC_THIS_MODULE(.owner = THIS_MODULE) + .name = DRIVER_NAME, + .probe = usb_remote_probe, + .disconnect = usb_remote_disconnect, + .id_table = usb_remote_id_table +}; + +static int __init usb_remote_init(void) +{ + int i; + + printk(KERN_INFO DRIVER_NAME ": " DRIVER_DESC " v" DRIVER_VERSION "\n"); + printk(KERN_INFO DRIVER_NAME ": " DRIVER_AUTHOR "\n"); + dprintk(": debug mode enabled\n"); + + i = usb_register(&usb_remote_driver); + if (i < 0) { + printk(KERN_ERR DRIVER_NAME + ": usb register failed, result = %d\n", i); + return -ENODEV; + } + + return 0; +} + +static void __exit usb_remote_exit(void) +{ + usb_deregister(&usb_remote_driver); +} + +module_init(usb_remote_init); +module_exit(usb_remote_exit); + +#if defined(KERNEL_2_5) +#include +MODULE_INFO(vermagic, VERMAGIC_STRING); +#endif + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(usb, usb_remote_id_table); + +module_param(sample_rate, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(sample_rate, "Sampling rate in Hz (default: 100)"); + +EXPORT_NO_SYMBOLS; --- linux-2.6.32.orig/ubuntu/lirc/lirc_igorplugusb/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_igorplugusb/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_IGORPLUGUSB) += lirc_igorplugusb.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_ite8709/lirc_ite8709.c +++ linux-2.6.32/ubuntu/lirc/lirc_ite8709/lirc_ite8709.c @@ -0,0 +1,552 @@ +/* + * LIRC driver for ITE8709 CIR port + * + * Copyright (C) 2008 Grégory Lardière + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +#include +#else +#include +#endif + +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" +#include "../kcompat.h" + +#define LIRC_DRIVER_NAME "lirc_ite8709" + +#define BUF_CHUNK_SIZE sizeof(lirc_t) +#define BUF_SIZE (128*BUF_CHUNK_SIZE) + +/* + * The ITE8709 device seems to be the combination of IT8512 superIO chip and + * a specific firmware running on the IT8512's embedded micro-controller. + * In addition of the embedded micro-controller, the IT8512 chip contains a + * CIR module and several other modules. A few modules are directly accessible + * by the host CPU, but most of them are only accessible by the + * micro-controller. The CIR module is only accessible by the micro-controller. + * The battery-backed SRAM module is accessible by the host CPU and the + * micro-controller. So one of the MC's firmware role is to act as a bridge + * between the host CPU and the CIR module. The firmware implements a kind of + * communication protocol using the SRAM module as a shared memory. The IT8512 + * specification is publicly available on ITE's web site, but the communication + * protocol is not, so it was reverse-engineered. + */ + +/* ITE8709 Registers addresses and values (reverse-engineered) */ +#define ITE8709_MODE 0x1a +#define ITE8709_REG_ADR 0x1b +#define ITE8709_REG_VAL 0x1c +#define ITE8709_IIR 0x1e /* Interrupt identification register */ +#define ITE8709_RFSR 0x1f /* Receiver FIFO status register */ +#define ITE8709_FIFO_START 0x20 + +#define ITE8709_MODE_READY 0X00 +#define ITE8709_MODE_WRITE 0X01 +#define ITE8709_MODE_READ 0X02 +#define ITE8709_IIR_RDAI 0x02 /* Receiver data available interrupt */ +#define ITE8709_IIR_RFOI 0x04 /* Receiver FIFO overrun interrupt */ +#define ITE8709_RFSR_MASK 0x3f /* FIFO byte count mask */ + +/* + * IT8512 CIR-module registers addresses and values + * (from IT8512 E/F specification v0.4.1) + */ +#define IT8512_REG_MSTCR 0x01 /* Master control register */ +#define IT8512_REG_IER 0x02 /* Interrupt enable register */ +#define IT8512_REG_CFR 0x04 /* Carrier frequency register */ +#define IT8512_REG_RCR 0x05 /* Receive control register */ +#define IT8512_REG_BDLR 0x08 /* Baud rate divisor low byte register */ +#define IT8512_REG_BDHR 0x09 /* Baud rate divisor high byte register */ + +#define IT8512_MSTCR_RESET 0x01 /* Reset registers to default value */ +#define IT8512_MSTCR_FIFOCLR 0x02 /* Clear FIFO */ +#define IT8512_MSTCR_FIFOTL_7 0x04 /* FIFO threshold level : 7 */ +#define IT8512_MSTCR_FIFOTL_25 0x0c /* FIFO threshold level : 25 */ +#define IT8512_IER_RDAIE 0x02 /* Enable data interrupt request */ +#define IT8512_IER_RFOIE 0x04 /* Enable FIFO overrun interrupt req */ +#define IT8512_IER_IEC 0x80 /* Enable interrupt request */ +#define IT8512_CFR_CF_36KHZ 0x09 /* Carrier freq : low speed, 36kHz */ +#define IT8512_RCR_RXDCR_1 0x01 /* Demodulation carrier range : 1 */ +#define IT8512_RCR_RXACT 0x08 /* Receiver active */ +#define IT8512_RCR_RXEN 0x80 /* Receiver enable */ +#define IT8512_BDR_6 6 /* Baud rate divisor : 6 */ + +/* Actual values used by this driver */ +#define CFG_FIFOTL IT8512_MSTCR_FIFOTL_25 +#define CFG_CR_FREQ IT8512_CFR_CF_36KHZ +#define CFG_DCR IT8512_RCR_RXDCR_1 +#define CFG_BDR IT8512_BDR_6 +#define CFG_TIMEOUT 100000 /* Rearm interrupt when a space is > 100 ms */ + +static int debug; + +struct ite8709_device { + int use_count; + int io; + int irq; + spinlock_t hardware_lock; + unsigned long long acc_pulse; + unsigned long long acc_space; + char lastbit; + struct timeval last_tv; + struct lirc_driver driver; + struct lirc_buffer buffer; + struct tasklet_struct tasklet; + char force_rearm; + char rearmed; + char device_busy; +}; + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \ + fmt, ## args); \ + } while (0) + + +static unsigned char ite8709_read(struct ite8709_device *dev, + unsigned char port) +{ + outb(port, dev->io); + return inb(dev->io+1); +} + +static void ite8709_write(struct ite8709_device *dev, unsigned char port, + unsigned char data) +{ + outb(port, dev->io); + outb(data, dev->io+1); +} + +static void ite8709_wait_device(struct ite8709_device *dev) +{ + int i = 0; + /* + * loop until device tells it's ready to continue + * iterations count is usually ~750 but can sometimes achieve 13000 + */ + for (i = 0; i < 15000; i++) { + udelay(2); + if (ite8709_read(dev, ITE8709_MODE) == ITE8709_MODE_READY) + break; + } +} + +static void ite8709_write_register(struct ite8709_device *dev, + unsigned char reg_adr, unsigned char reg_value) +{ + ite8709_wait_device(dev); + + ite8709_write(dev, ITE8709_REG_VAL, reg_value); + ite8709_write(dev, ITE8709_REG_ADR, reg_adr); + ite8709_write(dev, ITE8709_MODE, ITE8709_MODE_WRITE); +} + +static void ite8709_init_hardware(struct ite8709_device *dev) +{ + spin_lock_irq(&dev->hardware_lock); + dev->device_busy = 1; + spin_unlock_irq(&dev->hardware_lock); + + ite8709_write_register(dev, IT8512_REG_BDHR, (CFG_BDR >> 8) & 0xff); + ite8709_write_register(dev, IT8512_REG_BDLR, CFG_BDR & 0xff); + ite8709_write_register(dev, IT8512_REG_CFR, CFG_CR_FREQ); + ite8709_write_register(dev, IT8512_REG_IER, + IT8512_IER_IEC | IT8512_IER_RFOIE | IT8512_IER_RDAIE); + ite8709_write_register(dev, IT8512_REG_RCR, CFG_DCR); + ite8709_write_register(dev, IT8512_REG_MSTCR, + CFG_FIFOTL | IT8512_MSTCR_FIFOCLR); + ite8709_write_register(dev, IT8512_REG_RCR, + IT8512_RCR_RXEN | IT8512_RCR_RXACT | CFG_DCR); + + spin_lock_irq(&dev->hardware_lock); + dev->device_busy = 0; + spin_unlock_irq(&dev->hardware_lock); + + tasklet_enable(&dev->tasklet); +} + +static void ite8709_drop_hardware(struct ite8709_device *dev) +{ + tasklet_disable(&dev->tasklet); + + spin_lock_irq(&dev->hardware_lock); + dev->device_busy = 1; + spin_unlock_irq(&dev->hardware_lock); + + ite8709_write_register(dev, IT8512_REG_RCR, 0); + ite8709_write_register(dev, IT8512_REG_MSTCR, + IT8512_MSTCR_RESET | IT8512_MSTCR_FIFOCLR); + + spin_lock_irq(&dev->hardware_lock); + dev->device_busy = 0; + spin_unlock_irq(&dev->hardware_lock); +} + +static int ite8709_set_use_inc(void *data) +{ + struct ite8709_device *dev; + MOD_INC_USE_COUNT; + dev = data; + if (dev->use_count == 0) + ite8709_init_hardware(dev); + dev->use_count++; + return 0; +} + +static void ite8709_set_use_dec(void *data) +{ + struct ite8709_device *dev; + MOD_DEC_USE_COUNT; + dev = data; + dev->use_count--; + if (dev->use_count == 0) + ite8709_drop_hardware(dev); +} + +static void ite8709_add_read_queue(struct ite8709_device *dev, int flag, + unsigned long long val) +{ + lirc_t value; + + dprintk("add a %llu usec %s\n", val, flag ? "pulse" : "space"); + + value = (val > PULSE_MASK) ? PULSE_MASK : val; + if (flag) + value |= PULSE_BIT; + + if (!lirc_buffer_full(&dev->buffer)) { + lirc_buffer_write(&dev->buffer, (void *) &value); + wake_up(&dev->buffer.wait_poll); + } +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static irqreturn_t ite8709_interrupt(int irq, void *dev_id, + struct pt_regs *regs) +#else +static irqreturn_t ite8709_interrupt(int irq, void *dev_id) +#endif +{ + unsigned char data; + int iir, rfsr, i; + int fifo = 0; + char bit; + struct timeval curr_tv; + + /* Bit duration in microseconds */ + const unsigned long bit_duration = 1000000ul / (115200 / CFG_BDR); + + struct ite8709_device *dev; + dev = dev_id; + + /* + * If device is busy, we simply discard data because we are in one of + * these two cases : shutting down or rearming the device, so this + * doesn't really matter and this avoids waiting too long in IRQ ctx + */ + spin_lock(&dev->hardware_lock); + if (dev->device_busy) { + spin_unlock(&dev->hardware_lock); + return IRQ_RETVAL(IRQ_HANDLED); + } + + iir = ite8709_read(dev, ITE8709_IIR); + + switch (iir) { + case ITE8709_IIR_RFOI: + dprintk("fifo overrun, scheduling forced rearm just in case\n"); + dev->force_rearm = 1; + tasklet_schedule(&dev->tasklet); + spin_unlock(&dev->hardware_lock); + return IRQ_RETVAL(IRQ_HANDLED); + + case ITE8709_IIR_RDAI: + rfsr = ite8709_read(dev, ITE8709_RFSR); + fifo = rfsr & ITE8709_RFSR_MASK; + if (fifo > 32) + fifo = 32; + dprintk("iir: 0x%x rfsr: 0x%x fifo: %d\n", iir, rfsr, fifo); + + if (dev->rearmed) { + do_gettimeofday(&curr_tv); + dev->acc_space += 1000000ull + * (curr_tv.tv_sec - dev->last_tv.tv_sec) + + (curr_tv.tv_usec - dev->last_tv.tv_usec); + dev->rearmed = 0; + } + for (i = 0; i < fifo; i++) { + data = ite8709_read(dev, i+ITE8709_FIFO_START); + data = ~data; + /* Loop through */ + for (bit = 0; bit < 8; ++bit) { + if ((data >> bit) & 1) { + dev->acc_pulse += bit_duration; + if (dev->lastbit == 0) { + ite8709_add_read_queue(dev, 0, + dev->acc_space); + dev->acc_space = 0; + } + } else { + dev->acc_space += bit_duration; + if (dev->lastbit == 1) { + ite8709_add_read_queue(dev, 1, + dev->acc_pulse); + dev->acc_pulse = 0; + } + } + dev->lastbit = (data >> bit) & 1; + } + } + ite8709_write(dev, ITE8709_RFSR, 0); + + if (dev->acc_space > CFG_TIMEOUT) { + dprintk("scheduling rearm IRQ\n"); + do_gettimeofday(&dev->last_tv); + dev->force_rearm = 0; + tasklet_schedule(&dev->tasklet); + } + + spin_unlock(&dev->hardware_lock); + return IRQ_RETVAL(IRQ_HANDLED); + + default: + /* not our irq */ + dprintk("unknown IRQ (shouldn't happen) !!\n"); + spin_unlock(&dev->hardware_lock); + return IRQ_RETVAL(IRQ_NONE); + } +} + +static void ite8709_rearm_irq(unsigned long data) +{ + struct ite8709_device *dev; + unsigned long flags; + dev = (struct ite8709_device *) data; + + spin_lock_irqsave(&dev->hardware_lock, flags); + dev->device_busy = 1; + spin_unlock_irqrestore(&dev->hardware_lock, flags); + + if (dev->force_rearm || dev->acc_space > CFG_TIMEOUT) { + dprintk("rearming IRQ\n"); + ite8709_write_register(dev, IT8512_REG_RCR, + IT8512_RCR_RXACT | CFG_DCR); + ite8709_write_register(dev, IT8512_REG_MSTCR, + CFG_FIFOTL | IT8512_MSTCR_FIFOCLR); + ite8709_write_register(dev, IT8512_REG_RCR, + IT8512_RCR_RXEN | IT8512_RCR_RXACT | CFG_DCR); + if (!dev->force_rearm) + dev->rearmed = 1; + dev->force_rearm = 0; + } + + spin_lock_irqsave(&dev->hardware_lock, flags); + dev->device_busy = 0; + spin_unlock_irqrestore(&dev->hardware_lock, flags); +} + +static int ite8709_cleanup(struct ite8709_device *dev, int stage, int errno, + char *msg) +{ + if (msg != NULL) + printk(KERN_ERR LIRC_DRIVER_NAME ": %s\n", msg); + + switch (stage) { + case 6: + if (dev->use_count > 0) + ite8709_drop_hardware(dev); + case 5: + free_irq(dev->irq, dev); + case 4: + release_region(dev->io, 2); + case 3: + lirc_unregister_driver(dev->driver.minor); + case 2: + lirc_buffer_free(dev->driver.rbuf); + case 1: + kfree(dev); + case 0: + ; + } + + return errno; +} + +static int __devinit ite8709_pnp_probe(struct pnp_dev *dev, + const struct pnp_device_id *dev_id) +{ + struct lirc_driver *driver; + struct ite8709_device *ite8709_dev; + int ret; + + /* Check resources validity */ + if (!pnp_irq_valid(dev, 0)) + return ite8709_cleanup(NULL, 0, -ENODEV, "invalid IRQ"); + if (!pnp_port_valid(dev, 2)) + return ite8709_cleanup(NULL, 0, -ENODEV, "invalid IO port"); + + /* Allocate memory for device struct */ + ite8709_dev = kzalloc(sizeof(struct ite8709_device), GFP_KERNEL); + if (ite8709_dev == NULL) + return ite8709_cleanup(NULL, 0, -ENOMEM, "kzalloc failed"); + pnp_set_drvdata(dev, ite8709_dev); + + /* Initialize device struct */ + ite8709_dev->use_count = 0; + ite8709_dev->irq = pnp_irq(dev, 0); + ite8709_dev->io = pnp_port_start(dev, 2); + ite8709_dev->hardware_lock = __SPIN_LOCK_UNLOCKED( + ite8709_dev->hardware_lock); + ite8709_dev->acc_pulse = 0; + ite8709_dev->acc_space = 0; + ite8709_dev->lastbit = 0; + do_gettimeofday(&ite8709_dev->last_tv); + tasklet_init(&ite8709_dev->tasklet, ite8709_rearm_irq, + (long) ite8709_dev); + ite8709_dev->force_rearm = 0; + ite8709_dev->rearmed = 0; + ite8709_dev->device_busy = 0; + + /* Initialize driver struct */ + driver = &ite8709_dev->driver; + strcpy(driver->name, LIRC_DRIVER_NAME); + driver->minor = -1; + driver->code_length = sizeof(lirc_t) * 8; + driver->sample_rate = 0; + driver->features = LIRC_CAN_REC_MODE2; + driver->data = ite8709_dev; + driver->add_to_buf = NULL; +#ifndef LIRC_REMOVE_DURING_EXPORT + driver->get_queue = NULL; +#endif + driver->rbuf = &ite8709_dev->buffer; + driver->set_use_inc = ite8709_set_use_inc; + driver->set_use_dec = ite8709_set_use_dec; + driver->fops = NULL; + driver->dev = &dev->dev; + driver->owner = THIS_MODULE; + + /* Initialize LIRC buffer */ + if (lirc_buffer_init(driver->rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) + return ite8709_cleanup(ite8709_dev, 1, -ENOMEM, + "lirc_buffer_init() failed"); + + /* Register LIRC driver */ + ret = lirc_register_driver(driver); + if (ret < 0) + return ite8709_cleanup(ite8709_dev, 2, ret, + "lirc_register_driver() failed"); + + /* Reserve I/O port access */ + if (!request_region(ite8709_dev->io, 2, LIRC_DRIVER_NAME)) + return ite8709_cleanup(ite8709_dev, 3, -EBUSY, + "i/o port already in use"); + + /* Reserve IRQ line */ + ret = request_irq(ite8709_dev->irq, ite8709_interrupt, 0, + LIRC_DRIVER_NAME, ite8709_dev); + if (ret < 0) + return ite8709_cleanup(ite8709_dev, 4, ret, + "IRQ already in use"); + + /* Initialize hardware */ + ite8709_drop_hardware(ite8709_dev); /* Shutdown hw until first use */ + + printk(KERN_INFO LIRC_DRIVER_NAME ": device found : irq=%d io=0x%x\n", + ite8709_dev->irq, ite8709_dev->io); + + return 0; +} + +static void __devexit ite8709_pnp_remove(struct pnp_dev *dev) +{ + struct ite8709_device *ite8709_dev; + ite8709_dev = pnp_get_drvdata(dev); + + ite8709_cleanup(ite8709_dev, 6, 0, NULL); + + printk(KERN_INFO LIRC_DRIVER_NAME ": device removed\n"); +} + +#ifdef CONFIG_PM +static int ite8709_pnp_suspend(struct pnp_dev *dev, pm_message_t state) +{ + struct ite8709_device *ite8709_dev; + ite8709_dev = pnp_get_drvdata(dev); + + if (ite8709_dev->use_count > 0) + ite8709_drop_hardware(ite8709_dev); + + return 0; +} + +static int ite8709_pnp_resume(struct pnp_dev *dev) +{ + struct ite8709_device *ite8709_dev; + ite8709_dev = pnp_get_drvdata(dev); + + if (ite8709_dev->use_count > 0) + ite8709_init_hardware(ite8709_dev); + + return 0; +} +#else +#define ite8709_pnp_suspend NULL +#define ite8709_pnp_resume NULL +#endif + +static const struct pnp_device_id pnp_dev_table[] = { + {"ITE8709", 0}, + {} +}; + +MODULE_DEVICE_TABLE(pnp, pnp_dev_table); + +static struct pnp_driver ite8709_pnp_driver = { + .name = LIRC_DRIVER_NAME, + .probe = ite8709_pnp_probe, + .remove = __devexit_p(ite8709_pnp_remove), + .suspend = ite8709_pnp_suspend, + .resume = ite8709_pnp_resume, + .id_table = pnp_dev_table, +}; + +int init_module(void) +{ + return pnp_register_driver(&ite8709_pnp_driver); +} + +void cleanup_module(void) +{ + pnp_unregister_driver(&ite8709_pnp_driver); +} + +MODULE_DESCRIPTION("LIRC driver for ITE8709 CIR port"); +MODULE_AUTHOR("Grégory Lardière"); +MODULE_LICENSE("GPL"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); +EXPORT_NO_SYMBOLS; --- linux-2.6.32.orig/ubuntu/lirc/lirc_ite8709/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_ite8709/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_ITE8709) += lirc_ite8709.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_dev/lirc_dev.c +++ linux-2.6.32/ubuntu/lirc/lirc_dev/lirc_dev.c @@ -0,0 +1,1025 @@ +/* + * LIRC base driver + * + * (L) by Artur Lipowski + * + * 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 + * + * $Id: lirc_dev.c,v 1.96 2009/08/31 16:57:55 lirc Exp $ + * + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) +#error "**********************************************************" +#error " Sorry, this driver needs kernel version 2.2.18 or higher " +#error "**********************************************************" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#include +#else +#include +#include +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +#include +#endif +#define __KERNEL_SYSCALLS__ +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) +#include +#endif +#ifdef CONFIG_COMPAT +#include +#endif + +#include "../kcompat.h" + +/* SysFS header */ +#if defined(LIRC_HAVE_SYSFS) +#include +#endif + +#include "../lirc.h" +#include "lirc_dev.h" + +static int debug; +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG fmt, ## args); \ + } while (0) + +#define IRCTL_DEV_NAME "BaseRemoteCtl" +#define NOPLUG -1 +#define LOGHEAD "lirc_dev (%s[%d]): " + +struct irctl { + struct lirc_driver d; + int attached; + int open; + + struct mutex buffer_lock; + struct lirc_buffer *buf; + unsigned int chunk_size; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + int tpid; + struct completion *t_notify; + struct completion *t_notify2; + int shutdown; +#else + struct task_struct *task; +#endif + long jiffies_to_wait; + +#ifdef LIRC_HAVE_DEVFS_24 + devfs_handle_t devfs_handle; +#endif +}; + +static DEFINE_MUTEX(lirc_dev_lock); + +static struct irctl *irctls[MAX_IRCTL_DEVICES]; +static struct file_operations fops; + +/* Only used for sysfs but defined to void otherwise */ +static lirc_class_t *lirc_class; + +/* helper function + * initializes the irctl structure + */ +static void init_irctl(struct irctl *ir) +{ + mutex_init(&ir->buffer_lock); + ir->d.minor = NOPLUG; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + ir->tpid = -1; +#endif +} + +static void cleanup(struct irctl *ir) +{ + dprintk(LOGHEAD "cleaning up\n", ir->d.name, ir->d.minor); + + if (ir->buf != ir->d.rbuf) { + lirc_buffer_free(ir->buf); + kfree(ir->buf); + } + ir->buf = NULL; +} + +/* helper function + * reads key codes from driver and puts them into buffer + * returns 0 on success + */ +static int add_to_buf(struct irctl *ir) +{ + if (ir->d.add_to_buf) { + int res = -ENODATA; + int got_data = 0; + + /* + * service the device as long as it is returning + * data and we have space + */ + while ((res = ir->d.add_to_buf(ir->d.data, ir->buf)) == 0) { + got_data++; + } + + if (res == -ENODEV) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + ir->shutdown = 1; +#else + kthread_stop(ir->task); +#endif + + return got_data ? 0 : res; + } + + return 0; +} + +/* main function of the polling thread */ +static int lirc_thread(void *irctl) +{ + struct irctl *ir = irctl; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + /* + * This thread doesn't need any user-level access, so get rid + * of all our resources + */ + daemonize("lirc_dev"); + + if (ir->t_notify != NULL) + complete(ir->t_notify); + +#endif + dprintk(LOGHEAD "poll thread started\n", ir->d.name, ir->d.minor); + + do { + if (ir->open) { + if (ir->jiffies_to_wait) { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(ir->jiffies_to_wait); +#ifndef LIRC_REMOVE_DURING_EXPORT + } else { + interruptible_sleep_on( + ir->d.get_queue(ir->d.data)); +#endif + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + if (ir->shutdown) +#else + if (kthread_should_stop()) +#endif + break; + if (!add_to_buf(ir)) + wake_up_interruptible(&ir->buf->wait_poll); + } else { + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + } while (!ir->shutdown); + + if (ir->t_notify2 != NULL) + wait_for_completion(ir->t_notify2); + + ir->tpid = -1; + if (ir->t_notify != NULL) + complete(ir->t_notify); +#else + } while (!kthread_should_stop()); +#endif + + dprintk(LOGHEAD "poll thread ended\n", ir->d.name, ir->d.minor); + + return 0; +} + +int lirc_register_driver(struct lirc_driver *d) +{ + struct irctl *ir; + int minor; + int bytes_in_key; + unsigned int buffer_size; + int err; +#ifdef LIRC_HAVE_DEVFS_24 + char name[16]; +#endif + DECLARE_COMPLETION(tn); + + if (!d) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "driver pointer must be not NULL!\n"); + err = -EBADRQC; + goto out; + } + + if (MAX_IRCTL_DEVICES <= d->minor) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "\"minor\" must be between 0 and %d (%d)!\n", + MAX_IRCTL_DEVICES-1, d->minor); + err = -EBADRQC; + goto out; + } + + if (1 > d->code_length || (BUFLEN * 8) < d->code_length) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "code length in bits for minor (%d) " + "must be less than %d!\n", + d->minor, BUFLEN * 8); + err = -EBADRQC; + goto out; + } + + printk(KERN_INFO "lirc_dev: lirc_register_driver: sample_rate: %d\n", + d->sample_rate); + if (d->sample_rate) { + if (2 > d->sample_rate || HZ < d->sample_rate) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "sample_rate must be between 2 and %d!\n", HZ); + err = -EBADRQC; + goto out; + } + if (!d->add_to_buf) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "add_to_buf cannot be NULL when " + "sample_rate is set\n"); + err = -EBADRQC; + goto out; + } +#ifndef LIRC_REMOVE_DURING_EXPORT + } else if (!(d->fops && d->fops->read) && !d->get_queue && !d->rbuf) { +#else + } else if (!(d->fops && d->fops->read) && !d->rbuf) { +#endif + printk(KERN_ERR "lirc_dev: lirc_register_driver: " +#ifndef LIRC_REMOVE_DURING_EXPORT + "fops->read, get_queue and rbuf " +#else + "fops->read and rbuf " +#endif + "cannot all be NULL!\n"); + err = -EBADRQC; + goto out; +#ifndef LIRC_REMOVE_DURING_EXPORT + } else if (!d->get_queue && !d->rbuf) { +#else + } else if (!d->rbuf) { +#endif + if (!(d->fops && d->fops->read && d->fops->poll && + d->fops->ioctl)) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "neither read, poll nor ioctl can be NULL!\n"); + err = -EBADRQC; + goto out; + } + } + + mutex_lock(&lirc_dev_lock); + + minor = d->minor; + + if (minor < 0) { + /* find first free slot for driver */ + for (minor = 0; minor < MAX_IRCTL_DEVICES; minor++) + if (!irctls[minor]) + break; + if (MAX_IRCTL_DEVICES == minor) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "no free slots for drivers!\n"); + err = -ENOMEM; + goto out_lock; + } + } else if (irctls[minor]) { + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "minor (%d) just registered!\n", minor); + err = -EBUSY; + goto out_lock; + } + + ir = kzalloc(sizeof(struct irctl), GFP_KERNEL); + if (!ir) { + err = -ENOMEM; + goto out_lock; + } + init_irctl(ir); + irctls[minor] = ir; + + if (d->sample_rate) { + ir->jiffies_to_wait = HZ / d->sample_rate; + } else { + /* it means - wait for external event in task queue */ + ir->jiffies_to_wait = 0; + } + + /* some safety check 8-) */ + d->name[sizeof(d->name)-1] = '\0'; + + bytes_in_key = d->code_length/8 + (d->code_length%8 ? 1 : 0); + buffer_size = d->buffer_size ? d->buffer_size : BUFLEN / bytes_in_key; + + if (d->rbuf) { + ir->buf = d->rbuf; + } else { + ir->buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL); + if (!ir->buf) { + err = -ENOMEM; + goto out_lock; + } + err = lirc_buffer_init(ir->buf, bytes_in_key, buffer_size); + if (err) { + kfree(ir->buf); + goto out_lock; + } + } + ir->chunk_size = ir->buf->chunk_size; + + if (d->features == 0) + d->features = (d->code_length > 8) ? + LIRC_CAN_REC_LIRCCODE : LIRC_CAN_REC_CODE; + + ir->d = *d; + ir->d.minor = minor; + +#if defined(LIRC_HAVE_DEVFS_24) + sprintf(name, DEV_LIRC "/%d", ir->d.minor); + ir->devfs_handle = devfs_register(NULL, name, DEVFS_FL_DEFAULT, + IRCTL_DEV_MAJOR, ir->d.minor, + S_IFCHR | S_IRUSR | S_IWUSR, + &fops, NULL); +#elif defined(LIRC_HAVE_DEVFS_26) + devfs_mk_cdev(MKDEV(IRCTL_DEV_MAJOR, ir->d.minor), + S_IFCHR|S_IRUSR|S_IWUSR, + DEV_LIRC "/%u", ir->d.minor); +#endif + (void) lirc_device_create(lirc_class, ir->d.dev, + MKDEV(IRCTL_DEV_MAJOR, ir->d.minor), NULL, + "lirc%u", ir->d.minor); + +#ifndef LIRC_REMOVE_DURING_EXPORT + if (d->sample_rate || d->get_queue) { +#else + if (d->sample_rate) { +#endif + /* try to fire up polling thread */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + ir->t_notify = &tn; + ir->tpid = kernel_thread(lirc_thread, (void *)ir, 0); + if (ir->tpid < 0) { +#else + ir->task = kthread_run(lirc_thread, (void *)ir, "lirc_dev"); + if (IS_ERR(ir->task)) { +#endif + printk(KERN_ERR "lirc_dev: lirc_register_driver: " + "cannot run poll thread for minor = %d\n", + d->minor); + err = -ECHILD; + goto out_sysfs; + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + wait_for_completion(&tn); + ir->t_notify = NULL; +#endif + } + ir->attached = 1; + mutex_unlock(&lirc_dev_lock); + +/* + * Recent kernels should handle this autmatically by increasing/decreasing + * use count when a dependant module is loaded/unloaded. + */ +#ifndef KERNEL_2_5 + MOD_INC_USE_COUNT; +#endif + dprintk("lirc_dev: driver %s registered at minor number = %d\n", + ir->d.name, ir->d.minor); + d->minor = minor; + return minor; + +out_sysfs: + lirc_device_destroy(lirc_class, + MKDEV(IRCTL_DEV_MAJOR, ir->d.minor)); +#ifdef LIRC_HAVE_DEVFS_24 + devfs_unregister(ir->devfs_handle); +#endif +#ifdef LIRC_HAVE_DEVFS_26 + devfs_remove(DEV_LIRC "/%i", ir->d.minor); +#endif +out_lock: + mutex_unlock(&lirc_dev_lock); +out: + return err; +} +EXPORT_SYMBOL(lirc_register_driver); + +int lirc_unregister_driver(int minor) +{ + struct irctl *ir; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + DECLARE_COMPLETION(tn); + DECLARE_COMPLETION(tn2); +#endif + + if (minor < 0 || minor >= MAX_IRCTL_DEVICES) { + printk(KERN_ERR "lirc_dev: lirc_unregister_driver: " + "\"minor\" must be between 0 and %d!\n", + MAX_IRCTL_DEVICES-1); + return -EBADRQC; + } + + ir = irctls[minor]; + + mutex_lock(&lirc_dev_lock); + + if (ir->d.minor != minor) { + printk(KERN_ERR "lirc_dev: lirc_unregister_driver: " + "minor (%d) device not registered!", minor); + mutex_unlock(&lirc_dev_lock); + return -ENOENT; + } + + /* end up polling thread */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + if (ir->tpid >= 0) { + ir->t_notify = &tn; + ir->t_notify2 = &tn2; + ir->shutdown = 1; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) + { + struct task_struct *p; + + p = find_task_by_pid(ir->tpid); + wake_up_process(p); + } +#else + /* 2.2.x does not export wake_up_process() */ + wake_up_interruptible(ir->d.get_queue(ir->d.data)); +#endif + complete(&tn2); + wait_for_completion(&tn); + ir->t_notify = NULL; + ir->t_notify2 = NULL; + } +#else /* kernel >= 2.6.23 */ + if (ir->task) + kthread_stop(ir->task); +#endif + + dprintk("lirc_dev: driver %s unregistered from minor number = %d\n", + ir->d.name, ir->d.minor); + + ir->attached = 0; + if (ir->open) { + dprintk(LOGHEAD "releasing opened driver\n", + ir->d.name, ir->d.minor); + wake_up_interruptible(&ir->buf->wait_poll); + mutex_lock(&ir->buffer_lock); + ir->d.set_use_dec(ir->d.data); + module_put(ir->d.owner); + mutex_unlock(&ir->buffer_lock); + } else { + cleanup(ir); + irctls[minor] = NULL; + kfree(ir); + } + +#ifdef LIRC_HAVE_DEVFS_24 + devfs_unregister(ir->devfs_handle); +#endif +#ifdef LIRC_HAVE_DEVFS_26 + devfs_remove(DEV_LIRC "/%u", ir->d.minor); +#endif + lirc_device_destroy(lirc_class, + MKDEV(IRCTL_DEV_MAJOR, ir->d.minor)); + + mutex_unlock(&lirc_dev_lock); + +/* + * Recent kernels should handle this autmatically by increasing/decreasing + * use count when a dependant module is loaded/unloaded. + */ +#ifndef KERNEL_2_5 + MOD_DEC_USE_COUNT; +#endif + + return 0; +} +EXPORT_SYMBOL(lirc_unregister_driver); + +static int irctl_open(struct inode *inode, struct file *file) +{ + struct irctl *ir; + int retval; + + if (iminor(inode) >= MAX_IRCTL_DEVICES || !irctls[iminor(inode)]) { + dprintk("lirc_dev [%d]: open result = -ENODEV\n", + iminor(inode)); + return -ENODEV; + } + + ir = irctls[iminor(inode)]; + + dprintk(LOGHEAD "open called\n", ir->d.name, ir->d.minor); + + /* if the driver has an open function use it instead */ + if (ir->d.fops && ir->d.fops->open) + return ir->d.fops->open(inode, file); + + if (mutex_lock_interruptible(&lirc_dev_lock)) + return -ERESTARTSYS; + + if (ir->d.minor == NOPLUG) { + retval = -ENODEV; + goto error; + } + + if (ir->open) { + retval = -EBUSY; + goto error; + } + + if (try_module_get(ir->d.owner)) { + ++ir->open; + retval = ir->d.set_use_inc(ir->d.data); + + if (retval) { + module_put(ir->d.owner); + --ir->open; + } else { + lirc_buffer_clear(ir->buf); + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + if (ir->tpid >= 0) { + struct task_struct *p; + + p = find_task_by_pid(ir->tpid); + wake_up_process(p); + } +#else + if (ir->task) + wake_up_process(ir->task); +#endif + } + error: + if (ir) + dprintk(LOGHEAD "open result = %d\n", ir->d.name, ir->d.minor, + retval); + + mutex_unlock(&lirc_dev_lock); + + return retval; +} + +static int irctl_close(struct inode *inode, struct file *file) +{ + struct irctl *ir = irctls[iminor(inode)]; + + dprintk(LOGHEAD "close called\n", ir->d.name, ir->d.minor); + + /* if the driver has a close function use it instead */ + if (ir->d.fops && ir->d.fops->release) + return ir->d.fops->release(inode, file); + + if (mutex_lock_interruptible(&lirc_dev_lock)) + return -ERESTARTSYS; + + --ir->open; + if (ir->attached) { + ir->d.set_use_dec(ir->d.data); + module_put(ir->d.owner); + } else { + cleanup(ir); + irctls[ir->d.minor] = NULL; + kfree(ir); + } + + mutex_unlock(&lirc_dev_lock); + + return 0; +} + +static unsigned int irctl_poll(struct file *file, poll_table *wait) +{ + struct irctl *ir = irctls[iminor(file->f_dentry->d_inode)]; + unsigned int ret; + + dprintk(LOGHEAD "poll called\n", ir->d.name, ir->d.minor); + + /* if the driver has a poll function use it instead */ + if (ir->d.fops && ir->d.fops->poll) + return ir->d.fops->poll(file, wait); + + mutex_lock(&ir->buffer_lock); + if (!ir->attached) { + mutex_unlock(&ir->buffer_lock); + return POLLERR; + } + + poll_wait(file, &ir->buf->wait_poll, wait); + + dprintk(LOGHEAD "poll result = %s\n", + ir->d.name, ir->d.minor, + lirc_buffer_empty(ir->buf) ? "0" : "POLLIN|POLLRDNORM"); + + ret = lirc_buffer_empty(ir->buf) ? 0 : (POLLIN|POLLRDNORM); + + mutex_unlock(&ir->buffer_lock); + return ret; +} + +/* + * + */ +static int irctl_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + unsigned long mode; + int result; + struct irctl *ir = irctls[iminor(inode)]; + + dprintk(LOGHEAD "ioctl called (0x%x)\n", + ir->d.name, ir->d.minor, cmd); + + /* if the driver has a ioctl function use it instead */ + if (ir->d.fops && ir->d.fops->ioctl) { + result = ir->d.fops->ioctl(inode, file, cmd, arg); + if (result != -ENOIOCTLCMD) + return result; + } + + if (ir->d.minor == NOPLUG || !ir->attached) { + dprintk(LOGHEAD "ioctl result = -ENODEV\n", + ir->d.name, ir->d.minor); + return -ENODEV; + } + + /* The driver can't handle cmd */ + result = 0; + + switch (cmd) { + case LIRC_GET_FEATURES: + result = put_user(ir->d.features, (unsigned long *)arg); + break; + case LIRC_GET_REC_MODE: + if (!(ir->d.features & LIRC_CAN_REC_MASK)) + return -ENOSYS; + + result = put_user(LIRC_REC2MODE + (ir->d.features & LIRC_CAN_REC_MASK), + (unsigned long *)arg); + break; + case LIRC_SET_REC_MODE: + if (!(ir->d.features & LIRC_CAN_REC_MASK)) + return -ENOSYS; + + result = get_user(mode, (unsigned long *)arg); + if (!result && !(LIRC_MODE2REC(mode) & ir->d.features)) + result = -EINVAL; + /* + * FIXME: We should actually set the mode somehow but + * for now, lirc_serial doesn't support mode changing either + */ + break; + case LIRC_GET_LENGTH: + result = put_user(ir->d.code_length, (unsigned long *) arg); + break; + default: + result = -EINVAL; + } + + dprintk(LOGHEAD "ioctl result = %d\n", + ir->d.name, ir->d.minor, result); + + return result; +} + +#ifdef CONFIG_COMPAT +#define LIRC_GET_FEATURES_COMPAT32 _IOR('i', 0x00000000, __u32) + +#define LIRC_GET_SEND_MODE_COMPAT32 _IOR('i', 0x00000001, __u32) +#define LIRC_GET_REC_MODE_COMPAT32 _IOR('i', 0x00000002, __u32) + +#define LIRC_GET_LENGTH_COMPAT32 _IOR('i', 0x0000000f, __u32) + +#define LIRC_SET_SEND_MODE_COMPAT32 _IOW('i', 0x00000011, __u32) +#define LIRC_SET_REC_MODE_COMPAT32 _IOW('i', 0x00000012, __u32) + +static long irctl_compat_ioctl(struct file *file, + unsigned int cmd32, + unsigned long arg) +{ + mm_segment_t old_fs; + int ret; + unsigned long val; + unsigned int cmd; + + switch (cmd32) { + case LIRC_GET_FEATURES_COMPAT32: + case LIRC_GET_SEND_MODE_COMPAT32: + case LIRC_GET_REC_MODE_COMPAT32: + case LIRC_GET_LENGTH_COMPAT32: + case LIRC_SET_SEND_MODE_COMPAT32: + case LIRC_SET_REC_MODE_COMPAT32: + /* + * These commands expect (unsigned long *) arg + * but the 32-bit app supplied (__u32 *). + * Conversion is required. + */ + if (get_user(val, (__u32 *)compat_ptr(arg))) + return -EFAULT; + lock_kernel(); + /* + * tell irctl_ioctl that it's safe to use the pointer + * to val which is in kernel address space and not in + * user address space + */ + old_fs = get_fs(); + set_fs(KERNEL_DS); + + cmd = _IOC(_IOC_DIR(cmd32), _IOC_TYPE(cmd32), _IOC_NR(cmd32), + (_IOC_TYPECHECK(unsigned long))); + ret = irctl_ioctl(file->f_dentry->d_inode, file, + cmd, (unsigned long)(&val)); + + set_fs(old_fs); + unlock_kernel(); + switch (cmd) { + case LIRC_GET_FEATURES: + case LIRC_GET_SEND_MODE: + case LIRC_GET_REC_MODE: + case LIRC_GET_LENGTH: + if (!ret && put_user(val, (__u32 *)compat_ptr(arg))) + return -EFAULT; + break; + } + return ret; + + case LIRC_GET_SEND_CARRIER: + case LIRC_GET_REC_CARRIER: + case LIRC_GET_SEND_DUTY_CYCLE: + case LIRC_GET_REC_DUTY_CYCLE: + case LIRC_GET_REC_RESOLUTION: + case LIRC_SET_SEND_CARRIER: + case LIRC_SET_REC_CARRIER: + case LIRC_SET_SEND_DUTY_CYCLE: + case LIRC_SET_REC_DUTY_CYCLE: + case LIRC_SET_TRANSMITTER_MASK: + case LIRC_SET_REC_DUTY_CYCLE_RANGE: + case LIRC_SET_REC_CARRIER_RANGE: + /* + * These commands expect (unsigned int *)arg + * so no problems here. Just handle the locking. + */ + lock_kernel(); + cmd = cmd32; + ret = irctl_ioctl(file->f_dentry->d_inode, + file, cmd, arg); + unlock_kernel(); + return ret; + default: + /* unknown */ + printk(KERN_ERR "lirc_dev: %s(%s:%d): Unknown cmd %08x\n", + __func__, current->comm, current->pid, cmd32); + return -ENOIOCTLCMD; + } +} +#endif + +static ssize_t irctl_read(struct file *file, + char *buffer, + size_t length, + loff_t *ppos) +{ + struct irctl *ir = irctls[iminor(file->f_dentry->d_inode)]; + unsigned char buf[ir->chunk_size]; + int ret = 0, written = 0; + int unlock = 1; + DECLARE_WAITQUEUE(wait, current); + + dprintk(LOGHEAD "read called\n", ir->d.name, ir->d.minor); + + /* if the driver has a specific read function use it instead */ + if (ir->d.fops && ir->d.fops->read) + return ir->d.fops->read(file, buffer, length, ppos); + + if (mutex_lock_interruptible(&ir->buffer_lock)) + return -ERESTARTSYS; + if (!ir->attached) { + mutex_unlock(&ir->buffer_lock); + return -ENODEV; + } + + if (length % ir->buf->chunk_size) { + dprintk(LOGHEAD "read result = -EINVAL\n", + ir->d.name, ir->d.minor); + mutex_unlock(&ir->buffer_lock); + return -EINVAL; + } + + /* + * we add ourselves to the task queue before buffer check + * to avoid losing scan code (in case when queue is awaken somewhere + * between while condition checking and scheduling) + */ + add_wait_queue(&ir->buf->wait_poll, &wait); + set_current_state(TASK_INTERRUPTIBLE); + + /* + * while we didn't provide 'length' bytes, device is opened in blocking + * mode and 'copy_to_user' is happy, wait for data. + */ + while (written < length && ret == 0) { + if (lirc_buffer_empty(ir->buf)) { + /* According to the read(2) man page, 'written' can be + * returned as less than 'length', instead of blocking + * again, returning -EWOULDBLOCK, or returning + * -ERESTARTSYS */ + if (written) + break; + if (file->f_flags & O_NONBLOCK) { + ret = -EWOULDBLOCK; + break; + } + if (signal_pending(current)) { + ret = -ERESTARTSYS; + break; + } + + mutex_unlock(&ir->buffer_lock); + schedule(); + set_current_state(TASK_INTERRUPTIBLE); + + if (mutex_lock_interruptible(&ir->buffer_lock)) { + unlock = 0; + ret = -ERESTARTSYS; + break; + } + + if (!ir->attached) { + ret = -ENODEV; + break; + } + } else { + lirc_buffer_read(ir->buf, buf); + ret = copy_to_user((void *)buffer+written, buf, + ir->buf->chunk_size); + written += ir->buf->chunk_size; + } + } + + remove_wait_queue(&ir->buf->wait_poll, &wait); + set_current_state(TASK_RUNNING); + if(unlock) mutex_unlock(&ir->buffer_lock); + + dprintk(LOGHEAD "read result = %s (%d)\n", + ir->d.name, ir->d.minor, ret ? "-EFAULT" : "OK", ret); + + return ret ? ret : written; +} + + +void *lirc_get_pdata(struct file *file) +{ + void *data = NULL; + + if (file && file->f_dentry && file->f_dentry->d_inode && + file->f_dentry->d_inode->i_rdev) { + struct irctl *ir; + ir = irctls[iminor(file->f_dentry->d_inode)]; + data = ir->d.data; + } + + return data; +} +EXPORT_SYMBOL(lirc_get_pdata); + + +static ssize_t irctl_write(struct file *file, const char *buffer, + size_t length, loff_t *ppos) +{ + struct irctl *ir = irctls[iminor(file->f_dentry->d_inode)]; + + dprintk(LOGHEAD "write called\n", ir->d.name, ir->d.minor); + + /* if the driver has a specific read function use it instead */ + if (ir->d.fops && ir->d.fops->write) + return ir->d.fops->write(file, buffer, length, ppos); + + if (!ir->attached) + return -ENODEV; + + return -EINVAL; +} + + +static struct file_operations fops = { + .owner = THIS_MODULE, + .read = irctl_read, + .write = irctl_write, + .poll = irctl_poll, + .ioctl = irctl_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = irctl_compat_ioctl, +#endif + .open = irctl_open, + .release = irctl_close +}; + +/* For now don't try to use it as a static version ! */ +#ifdef MODULE + +static int __init lirc_dev_init(void) +{ + if (register_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME, &fops)) { + printk(KERN_ERR "lirc_dev: register_chrdev failed\n"); + goto out; + } + + lirc_class = class_create(THIS_MODULE, "lirc"); + if (IS_ERR(lirc_class)) { + printk(KERN_ERR "lirc_dev: class_create failed\n"); + goto out_unregister; + } + + printk(KERN_INFO "lirc_dev: IR Remote Control driver registered, " + "major %d \n", IRCTL_DEV_MAJOR); + + return 0; + +out_unregister: +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + if (unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME)) + printk(KERN_ERR "lirc_dev: unregister_chrdev failed!\n"); +#else + /* unregister_chrdev returns void now */ + unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME); +#endif +out: + return -1; +} + +static void __exit lirc_dev_exit(void) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23) + int ret; + + ret = unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME); + class_destroy(lirc_class); + + if (ret) + printk(KERN_ERR "lirc_dev: error in " + "module_unregister_chrdev: %d\n", ret); + else + dprintk("lirc_dev: module successfully unloaded\n"); +#else + /* unregister_chrdev returns void now */ + unregister_chrdev(IRCTL_DEV_MAJOR, IRCTL_DEV_NAME); + class_destroy(lirc_class); + dprintk("lirc_dev: module unloaded\n"); +#endif +} + +module_init(lirc_dev_init); +module_exit(lirc_dev_exit); + +MODULE_DESCRIPTION("LIRC base driver module"); +MODULE_AUTHOR("Artur Lipowski"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS_CHARDEV_MAJOR(IRCTL_DEV_MAJOR); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/lirc/lirc_dev/lirc_dev.h +++ linux-2.6.32/ubuntu/lirc/lirc_dev/lirc_dev.h @@ -0,0 +1,342 @@ +/* + * LIRC base driver + * + * (L) by Artur Lipowski + * This code is licensed under GNU GPL + * + * $Id: lirc_dev.h,v 1.37 2009/03/15 09:34:00 lirc Exp $ + * + */ + +#ifndef _LINUX_LIRC_DEV_H +#define _LINUX_LIRC_DEV_H + +#ifndef LIRC_REMOVE_DURING_EXPORT +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) +/* when was it really introduced? */ +#define LIRC_HAVE_KFIFO +#endif +#endif +#define MAX_IRCTL_DEVICES 4 +#define BUFLEN 16 + +#define mod(n, div) ((n) % (div)) + +#include +#include +#ifdef LIRC_HAVE_KFIFO +#include +#endif + +struct lirc_buffer { + wait_queue_head_t wait_poll; + spinlock_t lock; + unsigned int chunk_size; + unsigned int size; /* in chunks */ + /* Using chunks instead of bytes pretends to simplify boundary checking + * And should allow for some performance fine tunning later */ +#ifdef LIRC_HAVE_KFIFO + struct kfifo *fifo; +#else + unsigned int fill; /* in chunks */ + int head, tail; /* in chunks */ + unsigned char *data; +#endif +}; +#ifndef LIRC_HAVE_KFIFO +static inline void lirc_buffer_lock(struct lirc_buffer *buf, + unsigned long *flags) +{ + spin_lock_irqsave(&buf->lock, *flags); +} +static inline void lirc_buffer_unlock(struct lirc_buffer *buf, + unsigned long *flags) +{ + spin_unlock_irqrestore(&buf->lock, *flags); +} +static inline void _lirc_buffer_clear(struct lirc_buffer *buf) +{ + buf->head = 0; + buf->tail = 0; + buf->fill = 0; +} +#endif +static inline void lirc_buffer_clear(struct lirc_buffer *buf) +{ +#ifdef LIRC_HAVE_KFIFO + if (buf->fifo) + kfifo_reset(buf->fifo); +#else + unsigned long flags; + lirc_buffer_lock(buf, &flags); + _lirc_buffer_clear(buf); + lirc_buffer_unlock(buf, &flags); +#endif +} +static inline int lirc_buffer_init(struct lirc_buffer *buf, + unsigned int chunk_size, + unsigned int size) +{ + init_waitqueue_head(&buf->wait_poll); + spin_lock_init(&buf->lock); +#ifndef LIRC_HAVE_KFIFO + _lirc_buffer_clear(buf); +#endif + buf->chunk_size = chunk_size; + buf->size = size; +#ifdef LIRC_HAVE_KFIFO + buf->fifo = kfifo_alloc(size*chunk_size, GFP_KERNEL, &buf->lock); + if (!buf->fifo) + return -ENOMEM; +#else + buf->data = kmalloc(size*chunk_size, GFP_KERNEL); + if (buf->data == NULL) + return -ENOMEM; + memset(buf->data, 0, size*chunk_size); +#endif + return 0; +} +static inline void lirc_buffer_free(struct lirc_buffer *buf) +{ +#ifdef LIRC_HAVE_KFIFO + if (buf->fifo) + kfifo_free(buf->fifo); +#else + kfree(buf->data); + buf->data = NULL; + buf->head = 0; + buf->tail = 0; + buf->fill = 0; + buf->chunk_size = 0; + buf->size = 0; +#endif +} +#ifndef LIRC_HAVE_KFIFO +static inline int _lirc_buffer_full(struct lirc_buffer *buf) +{ + return (buf->fill >= buf->size); +} +#endif +static inline int lirc_buffer_full(struct lirc_buffer *buf) +{ +#ifdef LIRC_HAVE_KFIFO + return kfifo_len(buf->fifo) == buf->size * buf->chunk_size; +#else + unsigned long flags; + int ret; + lirc_buffer_lock(buf, &flags); + ret = _lirc_buffer_full(buf); + lirc_buffer_unlock(buf, &flags); + return ret; +#endif +} +#ifndef LIRC_HAVE_KFIFO +static inline int _lirc_buffer_empty(struct lirc_buffer *buf) +{ + return !(buf->fill); +} +#endif +static inline int lirc_buffer_empty(struct lirc_buffer *buf) +{ +#ifdef LIRC_HAVE_KFIFO + return !kfifo_len(buf->fifo); +#else + unsigned long flags; + int ret; + lirc_buffer_lock(buf, &flags); + ret = _lirc_buffer_empty(buf); + lirc_buffer_unlock(buf, &flags); + return ret; +#endif +} +#ifndef LIRC_HAVE_KFIFO +static inline int _lirc_buffer_available(struct lirc_buffer *buf) +{ + return (buf->size - buf->fill); +} +#endif +static inline int lirc_buffer_available(struct lirc_buffer *buf) +{ +#ifdef LIRC_HAVE_KFIFO + return buf->size - (kfifo_len(buf->fifo) / buf->chunk_size); +#else + unsigned long flags; + int ret; + lirc_buffer_lock(buf, &flags); + ret = _lirc_buffer_available(buf); + lirc_buffer_unlock(buf, &flags); + return ret; +#endif +} +#ifndef LIRC_HAVE_KFIFO +static inline void _lirc_buffer_read_1(struct lirc_buffer *buf, + unsigned char *dest) +{ + memcpy(dest, &buf->data[buf->head*buf->chunk_size], buf->chunk_size); + buf->head = mod(buf->head+1, buf->size); + buf->fill -= 1; +} +#endif +static inline void lirc_buffer_read(struct lirc_buffer *buf, + unsigned char *dest) +{ +#ifdef LIRC_HAVE_KFIFO + if (kfifo_len(buf->fifo) >= buf->chunk_size) + kfifo_get(buf->fifo, dest, buf->chunk_size); +#else + unsigned long flags; + lirc_buffer_lock(buf, &flags); + _lirc_buffer_read_1(buf, dest); + lirc_buffer_unlock(buf, &flags); +#endif +} +#ifndef LIRC_HAVE_KFIFO +static inline void _lirc_buffer_write_1(struct lirc_buffer *buf, + unsigned char *orig) +{ + memcpy(&buf->data[buf->tail*buf->chunk_size], orig, buf->chunk_size); + buf->tail = mod(buf->tail+1, buf->size); + buf->fill++; +} +#endif +static inline void lirc_buffer_write(struct lirc_buffer *buf, + unsigned char *orig) +{ +#ifdef LIRC_HAVE_KFIFO + kfifo_put(buf->fifo, orig, buf->chunk_size); +#else + unsigned long flags; + lirc_buffer_lock(buf, &flags); + _lirc_buffer_write_1(buf, orig); + lirc_buffer_unlock(buf, &flags); +#endif +} +#ifndef LIRC_HAVE_KFIFO +static inline void _lirc_buffer_write_n(struct lirc_buffer *buf, + unsigned char *orig, int count) +{ + int space1; + if (buf->head > buf->tail) + space1 = buf->head - buf->tail; + else + space1 = buf->size - buf->tail; + + if (count > space1) { + memcpy(&buf->data[buf->tail * buf->chunk_size], orig, + space1 * buf->chunk_size); + memcpy(&buf->data[0], orig + (space1 * buf->chunk_size), + (count - space1) * buf->chunk_size); + } else { + memcpy(&buf->data[buf->tail * buf->chunk_size], orig, + count * buf->chunk_size); + } + buf->tail = mod(buf->tail + count, buf->size); + buf->fill += count; +} +#endif +static inline void lirc_buffer_write_n(struct lirc_buffer *buf, + unsigned char *orig, int count) +{ +#ifdef LIRC_HAVE_KFIFO + kfifo_put(buf->fifo, orig, count * buf->chunk_size); +#else + unsigned long flags; + lirc_buffer_lock(buf, &flags); + _lirc_buffer_write_n(buf, orig, count); + lirc_buffer_unlock(buf, &flags); +#endif +} + +struct lirc_driver { + char name[40]; + int minor; + unsigned long code_length; + unsigned int buffer_size; /* in chunks holding one code each */ + int sample_rate; + unsigned long features; + void *data; + int (*add_to_buf) (void *data, struct lirc_buffer *buf); +#ifndef LIRC_REMOVE_DURING_EXPORT + wait_queue_head_t* (*get_queue) (void *data); +#endif + struct lirc_buffer *rbuf; + int (*set_use_inc) (void *data); + void (*set_use_dec) (void *data); + struct file_operations *fops; + struct device *dev; + struct module *owner; +}; +/* name: + * this string will be used for logs + * + * minor: + * indicates minor device (/dev/lirc) number for registered driver + * if caller fills it with negative value, then the first free minor + * number will be used (if available) + * + * code_length: + * length of the remote control key code expressed in bits + * + * sample_rate: + * sample_rate equal to 0 means that no polling will be performed and + * add_to_buf will be triggered by external events (through task queue + * returned by get_queue) + * + * data: + * it may point to any driver data and this pointer will be passed to + * all callback functions + * + * add_to_buf: + * add_to_buf will be called after specified period of the time or + * triggered by the external event, this behavior depends on value of + * the sample_rate this function will be called in user context. This + * routine should return 0 if data was added to the buffer and + * -ENODATA if none was available. This should add some number of bits + * evenly divisible by code_length to the buffer + * + * get_queue: + * this callback should return a pointer to the task queue which will + * be used for external event waiting + * + * rbuf: + * if not NULL, it will be used as a read buffer, you will have to + * write to the buffer by other means, like irq's (see also + * lirc_serial.c). + * + * set_use_inc: + * set_use_inc will be called after device is opened + * + * set_use_dec: + * set_use_dec will be called after device is closed + * + * fops: + * file_operations for drivers which don't fit the current driver model. + * + * Some ioctl's can be directly handled by lirc_dev if the driver's + * ioctl function is NULL or if it returns -ENOIOCTLCMD (see also + * lirc_serial.c). + * + * owner: + * the module owning this struct + * + */ + + +/* following functions can be called ONLY from user context + * + * returns negative value on error or minor number + * of the registered device if success + * contents of the structure pointed by d is copied + */ +extern int lirc_register_driver(struct lirc_driver *d); + +/* returns negative value on error or 0 if success +*/ +extern int lirc_unregister_driver(int minor); + +/* Returns the private data stored in the lirc_driver + * associated with the given device file pointer. + */ +void *lirc_get_pdata(struct file *file); + +#endif --- linux-2.6.32.orig/ubuntu/lirc/lirc_dev/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_dev/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_DEV) += lirc_dev.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_bt829/lirc_bt829.c +++ linux-2.6.32/ubuntu/lirc/lirc_bt829/lirc_bt829.c @@ -0,0 +1,399 @@ +/* + * Remote control driver for the TV-card based on bt829 + * + * by Leonid Froenchenko + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +#error "This driver needs kernel version 2.4.0 or higher" +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +static int poll_main(void); +static int atir_init_start(void); + +static void write_index(unsigned char index, unsigned int value); +static unsigned int read_index(unsigned char index); + +static void do_i2c_start(void); +static void do_i2c_stop(void); + +static void seems_wr_byte(unsigned char al); +static unsigned char seems_rd_byte(void); + +static unsigned int read_index(unsigned char al); +static void write_index(unsigned char ah, unsigned int edx); + +static void cycle_delay(int cycle); + +static void do_set_bits(unsigned char bl); +static unsigned char do_get_bits(void); + +#define DATA_PCI_OFF 0x7FFC00 +#define WAIT_CYCLE 20 + +#define DRIVER_NAME "lirc_bt829" + +static int debug; +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG DRIVER_NAME ": " fmt, ## args); \ + } while (0) + +static int atir_minor; +static unsigned long pci_addr_phys; +static unsigned char *pci_addr_lin; + +static struct lirc_driver atir_driver; + +static struct pci_dev *do_pci_probe(void) +{ + struct pci_dev *my_dev; +#ifndef KERNEL_2_5 + /* unnecessary with recent kernels */ + if (!pci_present()) + printk(KERN_ERR DRIVER_NAME ": no pci in this kernel\n"); +#endif + my_dev = pci_get_device(PCI_VENDOR_ID_ATI, + PCI_DEVICE_ID_ATI_264VT, NULL); + if (my_dev) { + printk(KERN_ERR DRIVER_NAME ": Using device: %s\n", + pci_name(my_dev)); + pci_addr_phys = 0; + if (my_dev->resource[0].flags & IORESOURCE_MEM) { + pci_addr_phys = my_dev->resource[0].start; + printk(KERN_INFO DRIVER_NAME ": memory at 0x%08X\n", + (unsigned int)pci_addr_phys); + } + if (pci_addr_phys == 0) { + printk(KERN_ERR DRIVER_NAME ": no memory resource ?\n"); + return NULL; + } + } else { + printk(KERN_ERR DRIVER_NAME ": pci_probe failed\n"); + return NULL; + } + return my_dev; +} + +static int atir_add_to_buf(void *data, struct lirc_buffer *buf) +{ + unsigned char key; + int status; + status = poll_main(); + key = (status >> 8) & 0xFF; + if (status & 0xFF) { + dprintk("reading key %02X\n", key); + lirc_buffer_write(buf, &key); + return 0; + } + return -ENODATA; +} + +static int atir_set_use_inc(void *data) +{ + MOD_INC_USE_COUNT; + dprintk("driver is opened\n"); + return 0; +} + +static void atir_set_use_dec(void *data) +{ + MOD_DEC_USE_COUNT; + dprintk("driver is closed\n"); +} + +int init_module(void) +{ + struct pci_dev *pdev; + + pdev = do_pci_probe(); + if (pdev == NULL) + return 1; + + if (!atir_init_start()) + return 1; + + strcpy(atir_driver.name, "ATIR"); + atir_driver.minor = -1; + atir_driver.code_length = 8; + atir_driver.sample_rate = 10; + atir_driver.data = 0; + atir_driver.add_to_buf = atir_add_to_buf; + atir_driver.set_use_inc = atir_set_use_inc; + atir_driver.set_use_dec = atir_set_use_dec; +#ifdef LIRC_HAVE_SYSFS + atir_driver.dev = &pdev->dev; +#endif + atir_driver.owner = THIS_MODULE; + + atir_minor = lirc_register_driver(&atir_driver); + if (atir_minor < 0) { + printk(KERN_ERR DRIVER_NAME ": failed to register driver!\n"); + return atir_minor; + } + dprintk("driver is registered on minor %d\n", atir_minor); + + return 0; +} + + +void cleanup_module(void) +{ + lirc_unregister_driver(atir_minor); +} + + +static int atir_init_start(void) +{ + pci_addr_lin = ioremap(pci_addr_phys + DATA_PCI_OFF, 0x400); + if (pci_addr_lin == 0) { + printk(KERN_INFO DRIVER_NAME ": pci mem must be mapped\n"); + return 0; + } + return 1; +} + +static void cycle_delay(int cycle) +{ + udelay(WAIT_CYCLE*cycle); +} + + +static int poll_main() +{ + unsigned char status_high, status_low; + + do_i2c_start(); + + seems_wr_byte(0xAA); + seems_wr_byte(0x01); + + do_i2c_start(); + + seems_wr_byte(0xAB); + + status_low = seems_rd_byte(); + status_high = seems_rd_byte(); + + do_i2c_stop(); + + return (status_high << 8) | status_low; +} + +static void do_i2c_start(void) +{ + do_set_bits(3); + cycle_delay(4); + + do_set_bits(1); + cycle_delay(7); + + do_set_bits(0); + cycle_delay(2); +} + +static void do_i2c_stop(void) +{ + unsigned char bits; + bits = do_get_bits() & 0xFD; + do_set_bits(bits); + cycle_delay(1); + + bits |= 1; + do_set_bits(bits); + cycle_delay(2); + + bits |= 2; + do_set_bits(bits); + bits = 3; + do_set_bits(bits); + cycle_delay(2); +} + +static void seems_wr_byte(unsigned char value) +{ + int i; + unsigned char reg; + + reg = do_get_bits(); + for (i = 0; i < 8; i++) { + if (value & 0x80) + reg |= 0x02; + else + reg &= 0xFD; + + do_set_bits(reg); + cycle_delay(1); + + reg |= 1; + do_set_bits(reg); + cycle_delay(1); + + reg &= 0xFE; + do_set_bits(reg); + cycle_delay(1); + value <<= 1; + } + cycle_delay(2); + + reg |= 2; + do_set_bits(reg); + + reg |= 1; + do_set_bits(reg); + + cycle_delay(1); + do_get_bits(); + + reg &= 0xFE; + do_set_bits(reg); + cycle_delay(3); +} + +static unsigned char seems_rd_byte(void) +{ + int i; + int rd_byte; + unsigned char bits_2, bits_1; + + bits_1 = do_get_bits() | 2; + do_set_bits(bits_1); + + rd_byte = 0; + for (i = 0; i < 8; i++) { + bits_1 &= 0xFE; + do_set_bits(bits_1); + cycle_delay(2); + + bits_1 |= 1; + do_set_bits(bits_1); + cycle_delay(1); + + bits_2 = do_get_bits(); + if (bits_2 & 2) + rd_byte |= 1; + + rd_byte <<= 1; + } + + bits_1 = 0; + if (bits_2 == 0) + bits_1 |= 2; + + do_set_bits(bits_1); + cycle_delay(2); + + bits_1 |= 1; + do_set_bits(bits_1); + cycle_delay(3); + + bits_1 &= 0xFE; + do_set_bits(bits_1); + cycle_delay(2); + + rd_byte >>= 1; + rd_byte &= 0xFF; + return rd_byte; +} + +static void do_set_bits(unsigned char new_bits) +{ + int reg_val; + reg_val = read_index(0x34); + if (new_bits & 2) { + reg_val &= 0xFFFFFFDF; + reg_val |= 1; + } else { + reg_val &= 0xFFFFFFFE; + reg_val |= 0x20; + } + reg_val |= 0x10; + write_index(0x34, reg_val); + + reg_val = read_index(0x31); + if (new_bits & 1) + reg_val |= 0x1000000; + else + reg_val &= 0xFEFFFFFF; + + reg_val |= 0x8000000; + write_index(0x31, reg_val); +} + +static unsigned char do_get_bits(void) +{ + unsigned char bits; + int reg_val; + + reg_val = read_index(0x34); + reg_val |= 0x10; + reg_val &= 0xFFFFFFDF; + write_index(0x34, reg_val); + + reg_val = read_index(0x34); + bits = 0; + if (reg_val & 8) + bits |= 2; + else + bits &= 0xFD; + + reg_val = read_index(0x31); + if (reg_val & 0x1000000) + bits |= 1; + else + bits &= 0xFE; + + return bits; +} + +static unsigned int read_index(unsigned char index) +{ + unsigned char *addr; + unsigned int value; + /* addr = pci_addr_lin + DATA_PCI_OFF + ((index & 0xFF) << 2); */ + addr = pci_addr_lin + ((index & 0xFF) << 2); + value = readl(addr); + return value; +} + +static void write_index(unsigned char index, unsigned int reg_val) +{ + unsigned char *addr; + addr = pci_addr_lin + ((index & 0xFF) << 2); + writel(reg_val, addr); +} + +MODULE_AUTHOR("Froenchenko Leonid"); +MODULE_DESCRIPTION("IR remote driver for bt829 based TV cards"); +MODULE_LICENSE("GPL"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Debug enabled or not"); +EXPORT_NO_SYMBOLS; --- linux-2.6.32.orig/ubuntu/lirc/lirc_bt829/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_bt829/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_ATIUSB) += lirc_bt829.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_streamzap/lirc_streamzap.c +++ linux-2.6.32/ubuntu/lirc/lirc_streamzap/lirc_streamzap.c @@ -0,0 +1,889 @@ +/* $Id: lirc_streamzap.c,v 1.48 2009/03/15 09:34:00 lirc Exp $ */ +/* + * Streamzap Remote Control driver + * + * Copyright (c) 2005 Christoph Bartelmus + * + * This driver was based on the work of Greg Wickham and Adrian + * Dewhurst. It was substantially rewritten to support correct signal + * gaps and now maintains a delay buffer, which is used to present + * consistent timing behaviour to user space applications. Without the + * delay buffer an ugly hack would be required in lircd, which can + * cause sluggish signal decoding in certain situations. + * + * This driver is based on the USB skeleton driver packaged with the + * kernel; copyright (C) 2001-2003 Greg Kroah-Hartman (greg@kroah.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 + */ + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +#error "*******************************************************" +#error "Sorry, this driver needs kernel version 2.4.0 or higher" +#error "*******************************************************" +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#include + +#include "../lirc.h" +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +#define DRIVER_VERSION "$Revision: 1.48 $" +#define DRIVER_NAME "lirc_streamzap" +#define DRIVER_DESC "Streamzap Remote Control driver" + +static int debug; + +#define USB_STREAMZAP_VENDOR_ID 0x0e9c +#define USB_STREAMZAP_PRODUCT_ID 0x0000 + +/* Use our own dbg macro */ +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG DRIVER_NAME "[%d]: " \ + fmt "\n", ## args); \ + } while (0) + +/* table of devices that work with this driver */ +static struct usb_device_id streamzap_table[] = { + /* Streamzap Remote Control */ + { USB_DEVICE(USB_STREAMZAP_VENDOR_ID, USB_STREAMZAP_PRODUCT_ID) }, + /* Terminating entry */ + { } +}; + +MODULE_DEVICE_TABLE(usb, streamzap_table); + +#define STREAMZAP_PULSE_MASK 0xf0 +#define STREAMZAP_SPACE_MASK 0x0f +#define STREAMZAP_RESOLUTION 256 + +/* number of samples buffered */ +#define STREAMZAP_BUFFER_SIZE 128 + +enum StreamzapDecoderState { + PulseSpace, + FullPulse, + FullSpace, + IgnorePulse +}; + +/* Structure to hold all of our device specific stuff + * + * some remarks regarding locking: + * theoretically this struct can be accessed from three threads: + * + * - from lirc_dev through set_use_inc/set_use_dec + * + * - from the USB layer throuh probe/disconnect/irq + * + * Careful placement of lirc_register_driver/lirc_unregister_driver + * calls will prevent conflicts. lirc_dev makes sure that + * set_use_inc/set_use_dec are not being executed and will not be + * called after lirc_unregister_driver returns. + * + * - by the timer callback + * + * The timer is only running when the device is connected and the + * LIRC device is open. Making sure the timer is deleted by + * set_use_dec will make conflicts impossible. + */ +struct usb_streamzap { + + /* usb */ + /* save off the usb device pointer */ + struct usb_device *udev; + /* the interface for this device */ + struct usb_interface *interface; + + /* buffer & dma */ + unsigned char *buf_in; + dma_addr_t dma_in; + unsigned int buf_in_len; + + struct usb_endpoint_descriptor *endpoint; + + /* IRQ */ + struct urb *urb_in; + + /* lirc */ + struct lirc_driver driver; + struct lirc_buffer delay_buf; + struct lirc_buffer lirc_buf; + + /* timer used to support delay buffering */ + struct timer_list delay_timer; + int timer_running; + spinlock_t timer_lock; + + /* tracks whether we are currently receiving some signal */ + int idle; + /* sum of signal lengths received since signal start */ + unsigned long sum; + /* start time of signal; necessary for gap tracking */ + struct timeval signal_last; + struct timeval signal_start; + enum StreamzapDecoderState decoder_state; + struct timer_list flush_timer; + int flush; + int in_use; +}; + + +/* local function prototypes */ +#ifdef KERNEL_2_5 +static int streamzap_probe(struct usb_interface *interface, + const struct usb_device_id *id); +static void streamzap_disconnect(struct usb_interface *interface); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_streamzap_irq(struct urb *urb, struct pt_regs *regs); +#else +static void usb_streamzap_irq(struct urb *urb); +#endif +#else +static void *streamzap_probe(struct usb_device *udev, unsigned int ifnum, + const struct usb_device_id *id); +static void streamzap_disconnect(struct usb_device *dev, void *ptr); +static void usb_streamzap_irq(struct urb *urb); +#endif +static int streamzap_use_inc(void *data); +static void streamzap_use_dec(void *data); +static int streamzap_ioctl(struct inode *node, struct file *filep, + unsigned int cmd, unsigned long arg); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int streamzap_suspend(struct usb_interface *intf, pm_message_t message); +static int streamzap_resume(struct usb_interface *intf); +#endif + +/* usb specific object needed to register this driver with the usb subsystem */ + +static struct usb_driver streamzap_driver = { + LIRC_THIS_MODULE(.owner = THIS_MODULE) + .name = DRIVER_NAME, + .probe = streamzap_probe, + .disconnect = streamzap_disconnect, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + .suspend = streamzap_suspend, + .resume = streamzap_resume, +#endif + .id_table = streamzap_table, +}; + +static void stop_timer(struct usb_streamzap *sz) +{ + unsigned long flags; + + spin_lock_irqsave(&sz->timer_lock, flags); + if (sz->timer_running) { + sz->timer_running = 0; + spin_unlock_irqrestore(&sz->timer_lock, flags); + del_timer_sync(&sz->delay_timer); + } else { + spin_unlock_irqrestore(&sz->timer_lock, flags); + } +} + +static void flush_timeout(unsigned long arg) +{ + struct usb_streamzap *sz = (struct usb_streamzap *) arg; + + /* finally start accepting data */ + sz->flush = 0; +} +static void delay_timeout(unsigned long arg) +{ + unsigned long flags; + /* deliver data every 10 ms */ + static unsigned long timer_inc = + (10000/(1000000/HZ)) == 0 ? 1 : (10000/(1000000/HZ)); + struct usb_streamzap *sz = (struct usb_streamzap *) arg; + lirc_t data; + + spin_lock_irqsave(&sz->timer_lock, flags); + + if (!lirc_buffer_empty(&sz->delay_buf) && + !lirc_buffer_full(&sz->lirc_buf)) { + lirc_buffer_read(&sz->delay_buf, (unsigned char *) &data); + lirc_buffer_write(&sz->lirc_buf, (unsigned char *) &data); + } + if (!lirc_buffer_empty(&sz->delay_buf)) { + while (lirc_buffer_available(&sz->delay_buf) < + STREAMZAP_BUFFER_SIZE/2 && + !lirc_buffer_full(&sz->lirc_buf)) { + lirc_buffer_read(&sz->delay_buf, + (unsigned char *) &data); + lirc_buffer_write(&sz->lirc_buf, + (unsigned char *) &data); + } + if (sz->timer_running) { + sz->delay_timer.expires = jiffies + timer_inc; + add_timer(&sz->delay_timer); + } + } else { + sz->timer_running = 0; + } + + if (!lirc_buffer_empty(&sz->lirc_buf)) + wake_up(&sz->lirc_buf.wait_poll); + + spin_unlock_irqrestore(&sz->timer_lock, flags); +} + +static void flush_delay_buffer(struct usb_streamzap *sz) +{ + lirc_t data; + int empty = 1; + + while (!lirc_buffer_empty(&sz->delay_buf)) { + empty = 0; + lirc_buffer_read(&sz->delay_buf, (unsigned char *) &data); + if (!lirc_buffer_full(&sz->lirc_buf)) { + lirc_buffer_write(&sz->lirc_buf, + (unsigned char *) &data); + } else { + dprintk("buffer overflow", sz->driver.minor); + } + } + if (!empty) + wake_up(&sz->lirc_buf.wait_poll); +} + +static void push(struct usb_streamzap *sz, unsigned char *data) +{ + unsigned long flags; + + spin_lock_irqsave(&sz->timer_lock, flags); + if (lirc_buffer_full(&sz->delay_buf)) { + lirc_t data; + + lirc_buffer_read(&sz->delay_buf, (unsigned char *) &data); + if (!lirc_buffer_full(&sz->lirc_buf)) { + lirc_buffer_write(&sz->lirc_buf, + (unsigned char *) &data); + } else { + dprintk("buffer overflow", sz->driver.minor); + } + } + + lirc_buffer_write(&sz->delay_buf, data); + + if (!sz->timer_running) { + sz->delay_timer.expires = jiffies + HZ/10; + add_timer(&sz->delay_timer); + sz->timer_running = 1; + } + + spin_unlock_irqrestore(&sz->timer_lock, flags); +} + +static void push_full_pulse(struct usb_streamzap *sz, + unsigned char value) +{ + lirc_t pulse; + + if (sz->idle) { + long deltv; + lirc_t tmp; + + sz->signal_last = sz->signal_start; + do_gettimeofday(&sz->signal_start); + + deltv = sz->signal_start.tv_sec-sz->signal_last.tv_sec; + if (deltv > 15) { + tmp = PULSE_MASK; /* really long time */ + } else { + tmp = (lirc_t) (deltv*1000000+ + sz->signal_start.tv_usec - + sz->signal_last.tv_usec); + tmp -= sz->sum; + } + dprintk("ls %u", sz->driver.minor, tmp); + push(sz, (char *)&tmp); + + sz->idle = 0; + sz->sum = 0; + } + + pulse = ((lirc_t) value)*STREAMZAP_RESOLUTION; + pulse += STREAMZAP_RESOLUTION/2; + sz->sum += pulse; + pulse |= PULSE_BIT; + + dprintk("p %u", sz->driver.minor, pulse&PULSE_MASK); + push(sz, (char *)&pulse); +} + +static void push_half_pulse(struct usb_streamzap *sz, + unsigned char value) +{ + push_full_pulse(sz, (value & STREAMZAP_PULSE_MASK)>>4); +} + +static void push_full_space(struct usb_streamzap *sz, + unsigned char value) +{ + lirc_t space; + + space = ((lirc_t) value)*STREAMZAP_RESOLUTION; + space += STREAMZAP_RESOLUTION/2; + sz->sum += space; + dprintk("s %u", sz->driver.minor, space); + push(sz, (char *)&space); +} + +static void push_half_space(struct usb_streamzap *sz, + unsigned char value) +{ + push_full_space(sz, value & STREAMZAP_SPACE_MASK); +} + +/** + * usb_streamzap_irq - IRQ handler + * + * This procedure is invoked on reception of data from + * the usb remote. + */ +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_streamzap_irq(struct urb *urb, struct pt_regs *regs) +#else +static void usb_streamzap_irq(struct urb *urb) +#endif +{ + struct usb_streamzap *sz; + int len; + unsigned int i = 0; + + if (!urb) + return; + + sz = urb->context; + len = urb->actual_length; + + switch (urb->status) { + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + /* + * this urb is terminated, clean up. + * sz might already be invalid at this point + */ + dprintk("urb status: %d", -1, urb->status); + return; + default: + break; + } + + dprintk("received %d", sz->driver.minor, urb->actual_length); + if (!sz->flush) { + for (i = 0; i < urb->actual_length; i++) { + dprintk("%d: %x", sz->driver.minor, + i, (unsigned char) sz->buf_in[i]); + switch (sz->decoder_state) { + case PulseSpace: + if ((sz->buf_in[i]&STREAMZAP_PULSE_MASK) == + STREAMZAP_PULSE_MASK) { + sz->decoder_state = FullPulse; + continue; + } else if ((sz->buf_in[i]&STREAMZAP_SPACE_MASK) + == STREAMZAP_SPACE_MASK) { + push_half_pulse(sz, sz->buf_in[i]); + sz->decoder_state = FullSpace; + continue; + } else { + push_half_pulse(sz, sz->buf_in[i]); + push_half_space(sz, sz->buf_in[i]); + } + break; + case FullPulse: + push_full_pulse(sz, sz->buf_in[i]); + sz->decoder_state = IgnorePulse; + break; + case FullSpace: + if (sz->buf_in[i] == 0xff) { + sz->idle = 1; + stop_timer(sz); + flush_delay_buffer(sz); + } else + push_full_space(sz, sz->buf_in[i]); + sz->decoder_state = PulseSpace; + break; + case IgnorePulse: + if ((sz->buf_in[i]&STREAMZAP_SPACE_MASK) == + STREAMZAP_SPACE_MASK) { + sz->decoder_state = FullSpace; + continue; + } + push_half_space(sz, sz->buf_in[i]); + sz->decoder_state = PulseSpace; + break; + } + } + } + +#ifdef KERNEL_2_5 + usb_submit_urb(urb, GFP_ATOMIC); +#endif + + return; +} + +static struct file_operations streamzap_fops = { + .owner = THIS_MODULE, + .ioctl = streamzap_ioctl, +}; + + +/** + * streamzap_probe + * + * Called by usb-core to associated with a candidate device + * On any failure the return value is the ERROR + * On success return 0 + */ +#ifdef KERNEL_2_5 +static int streamzap_probe(struct usb_interface *interface, + const struct usb_device_id *id) +{ + struct usb_device *udev = interface_to_usbdev(interface); + struct usb_host_interface *iface_host; +#else +static void *streamzap_probe(struct usb_device *udev, unsigned int ifnum, + const struct usb_device_id *id) +{ + struct usb_interface *interface = &udev->actconfig->interface[ifnum]; + struct usb_interface_descriptor *iface_host; +#endif + int retval = -ENOMEM; + struct usb_streamzap *sz = NULL; + char buf[63], name[128] = ""; + + /* Allocate space for device driver specific data */ + sz = kzalloc(sizeof(struct usb_streamzap), GFP_KERNEL); + if (sz == NULL) + goto error; + + sz->udev = udev; + sz->interface = interface; + + /* Check to ensure endpoint information matches requirements */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 5) + iface_host = &interface->altsetting[interface->act_altsetting]; +#else + iface_host = interface->cur_altsetting; +#endif + +#ifdef KERNEL_2_5 + if (iface_host->desc.bNumEndpoints != 1) { +#else + if (iface_host->bNumEndpoints != 1) { +#endif +#ifdef KERNEL_2_5 + err("%s: Unexpected desc.bNumEndpoints (%d)", __func__, + iface_host->desc.bNumEndpoints); +#else + err("%s: Unexpected desc.bNumEndpoints (%d)", __func__, + iface_host->bNumEndpoints); +#endif + retval = -ENODEV; + goto error; + } + +#ifdef KERNEL_2_5 + sz->endpoint = &(iface_host->endpoint[0].desc); +#else + sz->endpoint = &(iface_host->endpoint[0]); +#endif + if ((sz->endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) + != USB_DIR_IN) { + err("%s: endpoint doesn't match input device 02%02x", + __func__, sz->endpoint->bEndpointAddress); + retval = -ENODEV; + goto error; + } + + if ((sz->endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) + != USB_ENDPOINT_XFER_INT) { + err("%s: endpoint attributes don't match xfer 02%02x", + __func__, sz->endpoint->bmAttributes); + retval = -ENODEV; + goto error; + } + + if (sz->endpoint->wMaxPacketSize == 0) { + err("%s: endpoint message size==0? ", __func__); + retval = -ENODEV; + goto error; + } + + /* Allocate the USB buffer and IRQ URB */ + + sz->buf_in_len = sz->endpoint->wMaxPacketSize; +#ifdef KERNEL_2_5 + sz->buf_in = usb_buffer_alloc(sz->udev, sz->buf_in_len, + GFP_ATOMIC, &sz->dma_in); +#else + sz->buf_in = kmalloc(sz->buf_in_len, GFP_KERNEL); +#endif + if (sz->buf_in == NULL) + goto error; + +#ifdef KERNEL_2_5 + sz->urb_in = usb_alloc_urb(0, GFP_KERNEL); +#else + + sz->urb_in = usb_alloc_urb(0); +#endif + if (sz->urb_in == NULL) + goto error; + + /* Connect this device to the LIRC sub-system */ + + if (lirc_buffer_init(&sz->lirc_buf, sizeof(lirc_t), + STREAMZAP_BUFFER_SIZE)) + goto error; + + if (lirc_buffer_init(&sz->delay_buf, sizeof(lirc_t), + STREAMZAP_BUFFER_SIZE)) { + lirc_buffer_free(&sz->lirc_buf); + goto error; + } + + strcpy(sz->driver.name, DRIVER_NAME); + sz->driver.minor = -1; + sz->driver.sample_rate = 0; + sz->driver.code_length = sizeof(lirc_t) * 8; + sz->driver.features = LIRC_CAN_REC_MODE2 | LIRC_CAN_GET_REC_RESOLUTION; + sz->driver.data = sz; + sz->driver.rbuf = &sz->lirc_buf; + sz->driver.set_use_inc = &streamzap_use_inc; + sz->driver.set_use_dec = &streamzap_use_dec; + sz->driver.fops = &streamzap_fops; +#ifdef LIRC_HAVE_SYSFS + sz->driver.dev = &interface->dev; +#endif + sz->driver.owner = THIS_MODULE; + + sz->idle = 1; + sz->decoder_state = PulseSpace; + init_timer(&sz->delay_timer); + sz->delay_timer.function = delay_timeout; + sz->delay_timer.data = (unsigned long) sz; + sz->timer_running = 0; + spin_lock_init(&sz->timer_lock); + + init_timer(&sz->flush_timer); + sz->flush_timer.function = flush_timeout; + sz->flush_timer.data = (unsigned long) sz; + /* Complete final initialisations */ + + usb_fill_int_urb(sz->urb_in, udev, + usb_rcvintpipe(udev, sz->endpoint->bEndpointAddress), + sz->buf_in, sz->buf_in_len, usb_streamzap_irq, sz, + sz->endpoint->bInterval); +#ifdef KERNEL_2_5 + sz->urb_in->transfer_dma = sz->dma_in; + sz->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; +#endif + + if (udev->descriptor.iManufacturer + && usb_string(udev, udev->descriptor.iManufacturer, + buf, sizeof(buf)) > 0) + strlcpy(name, buf, sizeof(name)); + + if (udev->descriptor.iProduct + && usb_string(udev, udev->descriptor.iProduct, + buf, sizeof(buf)) > 0) + snprintf(name + strlen(name), sizeof(name) - strlen(name), + " %s", buf); + + printk(KERN_INFO DRIVER_NAME "[%d]: %s on usb%d:%d attached\n", + sz->driver.minor, name, + udev->bus->busnum, sz->udev->devnum); + +#ifdef KERNEL_2_5 + usb_set_intfdata(interface, sz); +#endif + + if (lirc_register_driver(&sz->driver) < 0) { + lirc_buffer_free(&sz->delay_buf); + lirc_buffer_free(&sz->lirc_buf); + goto error; + } + +#ifdef KERNEL_2_5 + return 0; +#else + return sz; +#endif + +error: + + /* + * Premise is that a 'goto error' can be invoked from inside the + * probe function and all necessary cleanup actions will be taken + * including freeing any necessary memory blocks + */ + + if (retval == -ENOMEM) + err("Out of memory"); + + if (sz) { + usb_free_urb(sz->urb_in); +#ifdef KERNEL_2_5 + usb_buffer_free(udev, sz->buf_in_len, sz->buf_in, sz->dma_in); +#else + if (sz->buf_in) { + kfree(sz->buf_in); + } +#endif + kfree(sz); + } + +#ifdef KERNEL_2_5 + return retval; +#else + return NULL; +#endif +} + +static int streamzap_use_inc(void *data) +{ + struct usb_streamzap *sz = data; + + if (!sz) { + dprintk("%s called with no context", -1, __func__); + return -EINVAL; + } + dprintk("set use inc", sz->driver.minor); + MOD_INC_USE_COUNT; + + lirc_buffer_clear(&sz->lirc_buf); + lirc_buffer_clear(&sz->delay_buf); + + sz->flush_timer.expires = jiffies + HZ; + sz->flush = 1; + add_timer(&sz->flush_timer); + + sz->urb_in->dev = sz->udev; +#ifdef KERNEL_2_5 + if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) { +#else + if (usb_submit_urb(sz->urb_in)) { +#endif + dprintk("open result = -EIO error submitting urb", + sz->driver.minor); + MOD_DEC_USE_COUNT; + return -EIO; + } + sz->in_use++; + + return 0; +} + +static void streamzap_use_dec(void *data) +{ + struct usb_streamzap *sz = data; + + if (!sz) { + dprintk("%s called with no context", -1, __func__); + return; + } + dprintk("set use dec", sz->driver.minor); + + if (sz->flush) { + sz->flush = 0; + del_timer_sync(&sz->flush_timer); + } + + usb_kill_urb(sz->urb_in); + + stop_timer(sz); + + MOD_DEC_USE_COUNT; + sz->in_use--; +} + +static int streamzap_ioctl(struct inode *node, struct file *filep, + unsigned int cmd, unsigned long arg) +{ + int result; + + switch (cmd) { + case LIRC_GET_REC_RESOLUTION: + result = put_user(STREAMZAP_RESOLUTION, (unsigned int *) arg); + if (result) + return result; + break; + default: + return -ENOIOCTLCMD; + } + return 0; +} + +/** + * streamzap_disconnect + * + * Called by the usb core when the device is removed from the system. + * + * This routine guarantees that the driver will not submit any more urbs + * by clearing dev->udev. It is also supposed to terminate any currently + * active urbs. Unfortunately, usb_bulk_msg(), used in streamzap_read(), + * does not provide any way to do this. + */ +#ifdef KERNEL_2_5 +static void streamzap_disconnect(struct usb_interface *interface) +#else +static void streamzap_disconnect(struct usb_device *dev, void *ptr) +#endif +{ + struct usb_streamzap *sz; + int errnum; + int minor; + +#ifdef KERNEL_2_5 + sz = usb_get_intfdata(interface); +#else + sz = ptr; +#endif + + /* unregister from the LIRC sub-system */ + + errnum = lirc_unregister_driver(sz->driver.minor); + if (errnum != 0) + dprintk("error in lirc_unregister: (returned %d)", + sz->driver.minor, errnum); + + lirc_buffer_free(&sz->delay_buf); + lirc_buffer_free(&sz->lirc_buf); + + /* unregister from the USB sub-system */ + + usb_free_urb(sz->urb_in); + +#ifdef KERNEL_2_5 + usb_buffer_free(sz->udev, sz->buf_in_len, sz->buf_in, sz->dma_in); +#else + kfree(sz->buf_in); +#endif + + minor = sz->driver.minor; + kfree(sz); + + printk(KERN_INFO DRIVER_NAME "[%d]: disconnected\n", minor); +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int streamzap_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct usb_streamzap *sz = usb_get_intfdata(intf); + + printk(KERN_INFO DRIVER_NAME "[%d]: suspend\n", sz->driver.minor); + if (sz->in_use) { + if (sz->flush) { + sz->flush = 0; + del_timer_sync(&sz->flush_timer); + } + + stop_timer(sz); + + usb_kill_urb(sz->urb_in); + } + return 0; +} + +static int streamzap_resume(struct usb_interface *intf) +{ + struct usb_streamzap *sz = usb_get_intfdata(intf); + + lirc_buffer_clear(&sz->lirc_buf); + lirc_buffer_clear(&sz->delay_buf); + + if (sz->in_use) { + sz->flush_timer.expires = jiffies + HZ; + sz->flush = 1; + add_timer(&sz->flush_timer); + + sz->urb_in->dev = sz->udev; +#ifdef KERNEL_2_5 + if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) { +#else + if (usb_submit_urb(sz->urb_in)) { +#endif + dprintk("open result = -EIO error submitting urb", + sz->driver.minor); + MOD_DEC_USE_COUNT; + return -EIO; + } + } + return 0; +} +#endif + +#ifdef MODULE +/** + * usb_streamzap_init + */ +static int __init usb_streamzap_init(void) +{ + int result; + + /* register this driver with the USB subsystem */ + result = usb_register(&streamzap_driver); + + if (result) { + err("usb_register failed. Error number %d", + result); + return result; + } + + printk(KERN_INFO DRIVER_NAME " " DRIVER_VERSION " registered\n"); + return 0; +} + +/** + * usb_streamzap_exit + */ +static void __exit usb_streamzap_exit(void) +{ + usb_deregister(&streamzap_driver); +} + + +module_init(usb_streamzap_init); +module_exit(usb_streamzap_exit); + +MODULE_AUTHOR("Christoph Bartelmus, Greg Wickham, Adrian Dewhurst"); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); +EXPORT_NO_SYMBOLS; +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/lirc/lirc_streamzap/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_streamzap/Makefile @@ -0,0 +1,2 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. +obj-$(CONFIG_LIRC_STREAMZAP) += lirc_streamzap.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_sasem/lirc_sasem.c +++ linux-2.6.32/ubuntu/lirc/lirc_sasem/lirc_sasem.c @@ -0,0 +1,1108 @@ +/* $Id: lirc_sasem.c,v 1.40 2009/02/28 10:27:10 lirc Exp $ */ +/* + * lirc_sasem.c - USB remote support for LIRC + * Version 0.5 + * + * Copyright (C) 2004-2005 Oliver Stabel + * Tim Davies + * + * This driver was derived from: + * Venky Raju + * "lirc_imon - "LIRC/VFD driver for Ahanix/Soundgraph IMON IR/VFD" + * Paul Miller 's 2003-2004 + * "lirc_atiusb - USB remote support for LIRC" + * Culver Consulting Services 's 2003 + * "Sasem OnAir VFD/IR USB driver" + * + * + * NOTE - The LCDproc iMon driver should work with this module. More info at + * http://www.frogstorm.info/sasem + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 22) +#error "*** Sorry, this driver requires kernel version 2.4.22 or higher" +#endif + +#include + +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +#include +#else +#include +#endif +#include + +#include "../kcompat.h" +#include "../lirc.h" +#include "../lirc_dev/lirc_dev.h" + + +#define MOD_AUTHOR "Oliver Stabel , " \ + "Tim Davies " +#define MOD_DESC "USB Driver for Sasem Remote Controller V1.1" +#define MOD_NAME "lirc_sasem" +#define MOD_VERSION "0.5" + +#define VFD_MINOR_BASE 144 /* Same as LCD */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) +#define DEVFS_MODE S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH +#endif +#define DEVFS_NAME LIRC_DEVFS_PREFIX "lcd%d" + +#define BUF_CHUNK_SIZE 8 +#define BUF_SIZE 128 + +#define IOCTL_LCD_CONTRAST 1 + +/*** P R O T O T Y P E S ***/ + +/* USB Callback prototypes */ +#ifdef KERNEL_2_5 +static int sasem_probe(struct usb_interface *interface, + const struct usb_device_id *id); +static void sasem_disconnect(struct usb_interface *interface); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_rx_callback(struct urb *urb, struct pt_regs *regs); +static void usb_tx_callback(struct urb *urb, struct pt_regs *regs); +#else +static void usb_rx_callback(struct urb *urb); +static void usb_tx_callback(struct urb *urb); +#endif +#else +static void *sasem_probe(struct usb_device *dev, unsigned int intf, + const struct usb_device_id *id); +static void sasem_disconnect(struct usb_device *dev, void *data); +static void usb_rx_callback(struct urb *urb); +static void usb_tx_callback(struct urb *urb); +#endif + +/* VFD file_operations function prototypes */ +static int vfd_open(struct inode *inode, struct file *file); +static int vfd_ioctl(struct inode *inode, struct file *file, + unsigned cmd, unsigned long arg); +static int vfd_close(struct inode *inode, struct file *file); +static ssize_t vfd_write(struct file *file, const char *buf, + size_t n_bytes, loff_t *pos); + +/* LIRC driver function prototypes */ +static int ir_open(void *data); +static void ir_close(void *data); + +/* Driver init/exit prototypes */ +static int __init sasem_init(void); +static void __exit sasem_exit(void); + +/*** G L O B A L S ***/ + +struct sasem_context { + + struct usb_device *dev; + int vfd_isopen; /* VFD port has been opened */ + unsigned int vfd_contrast; /* VFD contrast */ +#if !defined(KERNEL_2_5) + int subminor; /* index into minor_table */ + devfs_handle_t devfs; +#endif + int ir_isopen; /* IR port has been opened */ + int dev_present; /* USB device presence */ + struct mutex lock; /* to lock this object */ + wait_queue_head_t remove_ok; /* For unexpected USB disconnects */ + + struct lirc_driver *driver; + struct usb_endpoint_descriptor *rx_endpoint; + struct usb_endpoint_descriptor *tx_endpoint; + struct urb *rx_urb; + struct urb *tx_urb; + unsigned char usb_rx_buf[8]; + unsigned char usb_tx_buf[8]; + + struct tx_t { + unsigned char data_buf[32]; /* user data buffer */ + struct completion finished; /* wait for write to finish */ + atomic_t busy; /* write in progress */ + int status; /* status of tx completion */ + } tx; + + /* for dealing with repeat codes (wish there was a toggle bit!) */ + struct timeval presstime; + char lastcode[8]; + int codesaved; +}; + +/* VFD file operations */ +static struct file_operations vfd_fops = { + + .owner = THIS_MODULE, + .open = &vfd_open, + .write = &vfd_write, + .ioctl = &vfd_ioctl, + .release = &vfd_close +}; + +/* USB Device ID for Sasem USB Control Board */ +static struct usb_device_id sasem_usb_id_table [] = { + /* Sasem USB Control Board */ + { USB_DEVICE(0x11ba, 0x0101) }, + /* Terminating entry */ + {} +}; + +/* USB Device data */ +static struct usb_driver sasem_driver = { + LIRC_THIS_MODULE(.owner = THIS_MODULE) + .name = MOD_NAME, + .probe = sasem_probe, + .disconnect = sasem_disconnect, + .id_table = sasem_usb_id_table, +#if !defined(KERNEL_2_5) + .fops = &vfd_fops, + .minor = VFD_MINOR_BASE, +#endif +}; + +#ifdef KERNEL_2_5 +static struct usb_class_driver sasem_class = { + .name = DEVFS_NAME, + .fops = &vfd_fops, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) + .mode = DEVFS_MODE, +#endif + .minor_base = VFD_MINOR_BASE, +}; +#endif + +/* to prevent races between open() and disconnect() */ +static DEFINE_MUTEX(disconnect_lock); + +static int debug; + +#if !defined(KERNEL_2_5) + +#define MAX_DEVICES 4 /* In case there's more than one Sasem device */ +static struct sasem_context *minor_table [MAX_DEVICES]; + +/* the global usb devfs handle */ +extern devfs_handle_t usb_devfs_handle; + +#endif + +/*** M O D U L E C O D E ***/ + +MODULE_AUTHOR(MOD_AUTHOR); +MODULE_DESCRIPTION(MOD_DESC); +MODULE_LICENSE("GPL"); +module_param(debug, int, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes (default: no)"); + +static void delete_context(struct sasem_context *context) +{ + usb_free_urb(context->tx_urb); /* VFD */ + usb_free_urb(context->rx_urb); /* IR */ + lirc_buffer_free(context->driver->rbuf); + kfree(context->driver->rbuf); + kfree(context->driver); + kfree(context); + + if (debug) + printk(KERN_INFO "%s: context deleted\n", __func__); +} + +static void deregister_from_lirc(struct sasem_context *context) +{ + int retval; + int minor = context->driver->minor; + + retval = lirc_unregister_driver(minor); + if (retval) + err("%s: unable to deregister from lirc (%d)", + __func__, retval); + else + printk(KERN_INFO "Deregistered Sasem driver (minor:%d)\n", + minor); + +} + +/** + * Called when the VFD device (e.g. /dev/usb/lcd) + * is opened by the application. + */ +static int vfd_open(struct inode *inode, struct file *file) +{ +#ifdef KERNEL_2_5 + struct usb_interface *interface; +#endif + struct sasem_context *context = NULL; + int subminor; + int retval = 0; + + /* prevent races with disconnect */ + mutex_lock(&disconnect_lock); + +#ifdef KERNEL_2_5 + subminor = iminor(inode); + interface = usb_find_interface(&sasem_driver, subminor); + if (!interface) { + err("%s: could not find interface for minor %d", + __func__, subminor); + retval = -ENODEV; + goto exit; + } + context = usb_get_intfdata(interface); +#else + subminor = MINOR(inode->i_rdev) - VFD_MINOR_BASE; + if (subminor < 0 || subminor >= MAX_DEVICES) { + err("%s: no record of minor %d", __func__, subminor); + retval = -ENODEV; + goto exit; + } + context = minor_table [subminor]; +#endif + + if (!context) { + err("%s: no context found for minor %d", + __func__, subminor); + retval = -ENODEV; + goto exit; + } + + mutex_lock(&context->lock); + + if (context->vfd_isopen) { + err("%s: VFD port is already open", __func__); + retval = -EBUSY; + } else { + MOD_INC_USE_COUNT; + context->vfd_isopen = 1; + file->private_data = context; + printk(KERN_INFO "VFD port opened\n"); + } + + mutex_unlock(&context->lock); + +exit: + mutex_unlock(&disconnect_lock); + return retval; +} + +/** + * Called when the VFD device (e.g. /dev/usb/lcd) + * is closed by the application. + */ +static int vfd_ioctl(struct inode *inode, struct file *file, + unsigned cmd, unsigned long arg) +{ + struct sasem_context *context = NULL; + + context = (struct sasem_context *) file->private_data; + + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + mutex_lock(&context->lock); + + switch (cmd) { + case IOCTL_LCD_CONTRAST: + if (arg > 1000) + arg = 1000; + context->vfd_contrast = (unsigned int)arg; + break; + default: + printk(KERN_INFO "Unknown IOCTL command\n"); + mutex_unlock(&context->lock); + return -ENOIOCTLCMD; /* not supported */ + } + + mutex_unlock(&context->lock); + return 0; +} + +/** + * Called when the VFD device (e.g. /dev/usb/lcd) + * is closed by the application. + */ +static int vfd_close(struct inode *inode, struct file *file) +{ + struct sasem_context *context = NULL; + int retval = 0; + + context = (struct sasem_context *) file->private_data; + + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + mutex_lock(&context->lock); + + if (!context->vfd_isopen) { + err("%s: VFD is not open", __func__); + retval = -EIO; + } else { + context->vfd_isopen = 0; + MOD_DEC_USE_COUNT; + printk(KERN_INFO "VFD port closed\n"); + if (!context->dev_present && !context->ir_isopen) { + + /* Device disconnected before close and IR port is + * not open. If IR port is open, context will be + * deleted by ir_close. */ + mutex_unlock(&context->lock); + delete_context(context); + return retval; + } + } + + mutex_unlock(&context->lock); + return retval; +} + +/** + * Sends a packet to the VFD. + */ +static int send_packet(struct sasem_context *context) +{ + unsigned int pipe; + int interval = 0; + int retval = 0; + + pipe = usb_sndintpipe(context->dev, + context->tx_endpoint->bEndpointAddress); +#ifdef KERNEL_2_5 + interval = context->tx_endpoint->bInterval; +#endif /* Use 0 for 2.4 kernels */ + + usb_fill_int_urb(context->tx_urb, context->dev, pipe, + context->usb_tx_buf, sizeof(context->usb_tx_buf), + usb_tx_callback, context, interval); + + context->tx_urb->actual_length = 0; + + init_completion(&context->tx.finished); + atomic_set(&(context->tx.busy), 1); + +#ifdef KERNEL_2_5 + retval = usb_submit_urb(context->tx_urb, GFP_KERNEL); +#else + retval = usb_submit_urb(context->tx_urb); +#endif + if (retval) { + atomic_set(&(context->tx.busy), 0); + err("%s: error submitting urb (%d)", __func__, retval); + } else { + /* Wait for transmission to complete (or abort) */ + mutex_unlock(&context->lock); + wait_for_completion(&context->tx.finished); + mutex_lock(&context->lock); + + retval = context->tx.status; + if (retval) + err("%s: packet tx failed (%d)", __func__, retval); + } + + return retval; +} + +/** + * Writes data to the VFD. The Sasem VFD is 2x16 characters + * and requires data in 9 consecutive USB interrupt packets, + * each packet carrying 8 bytes. + */ +static ssize_t vfd_write(struct file *file, const char *buf, + size_t n_bytes, loff_t *pos) +{ + int i; + int retval = 0; + struct sasem_context *context; + + context = (struct sasem_context *) file->private_data; + if (!context) { + err("%s: no context for device", __func__); + return -ENODEV; + } + + mutex_lock(&context->lock); + + if (!context->dev_present) { + err("%s: no Sasem device present", __func__); + retval = -ENODEV; + goto exit; + } + + if (n_bytes <= 0 || n_bytes > 32) { + err("%s: invalid payload size", __func__); + retval = -EINVAL; + goto exit; + } + + retval = copy_from_user(context->tx.data_buf, buf, n_bytes); + if (retval < 0) + goto exit; + + /* Pad with spaces */ + for (i = n_bytes; i < 32; ++i) + context->tx.data_buf[i] = ' '; + + /* Nine 8 byte packets to be sent */ + /* NOTE: "\x07\x01\0\0\0\0\0\0" or "\x0c\0\0\0\0\0\0\0" + * will clear the VFD */ + for (i = 0; i < 9; i++) { + switch (i) { + case 0: + memcpy(context->usb_tx_buf, "\x07\0\0\0\0\0\0\0", 8); + context->usb_tx_buf[1] = (context->vfd_contrast) ? + (0x2B - (context->vfd_contrast - 1) / 250) + : 0x2B; + break; + case 1: + memcpy(context->usb_tx_buf, "\x09\x01\0\0\0\0\0\0", 8); + break; + case 2: + memcpy(context->usb_tx_buf, "\x0b\x01\0\0\0\0\0\0", 8); + break; + case 3: + memcpy(context->usb_tx_buf, context->tx.data_buf, 8); + break; + case 4: + memcpy(context->usb_tx_buf, + context->tx.data_buf + 8, 8); + break; + case 5: + memcpy(context->usb_tx_buf, "\x09\x01\0\0\0\0\0\0", 8); + break; + case 6: + memcpy(context->usb_tx_buf, "\x0b\x02\0\0\0\0\0\0", 8); + break; + case 7: + memcpy(context->usb_tx_buf, + context->tx.data_buf + 16, 8); + break; + case 8: + memcpy(context->usb_tx_buf, + context->tx.data_buf + 24, 8); + break; + } + retval = send_packet(context); + if (retval) { + + err("%s: send packet failed for packet #%d", + __func__, i); + goto exit; + } + } +exit: + + mutex_unlock(&context->lock); + + return (!retval) ? n_bytes : retval; +} + +/** + * Callback function for USB core API: transmit data + */ +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_tx_callback(struct urb *urb, struct pt_regs *regs) +#else +static void usb_tx_callback(struct urb *urb) +#endif +{ + struct sasem_context *context; + + if (!urb) + return; + context = (struct sasem_context *) urb->context; + if (!context) + return; + + context->tx.status = urb->status; + + /* notify waiters that write has finished */ + atomic_set(&context->tx.busy, 0); + complete(&context->tx.finished); + + return; +} + +/** + * Called by lirc_dev when the application opens /dev/lirc + */ +static int ir_open(void *data) +{ + int retval = 0; + struct sasem_context *context; + + /* prevent races with disconnect */ + mutex_lock(&disconnect_lock); + + context = (struct sasem_context *) data; + + mutex_lock(&context->lock); + + if (context->ir_isopen) { + err("%s: IR port is already open", __func__); + retval = -EBUSY; + goto exit; + } + + usb_fill_int_urb(context->rx_urb, context->dev, + usb_rcvintpipe(context->dev, + context->rx_endpoint->bEndpointAddress), + context->usb_rx_buf, sizeof(context->usb_rx_buf), + usb_rx_callback, context, context->rx_endpoint->bInterval); + +#ifdef KERNEL_2_5 + retval = usb_submit_urb(context->rx_urb, GFP_KERNEL); +#else + retval = usb_submit_urb(context->rx_urb); +#endif + + if (retval) + err("%s: usb_submit_urb failed for ir_open (%d)", + __func__, retval); + else { + MOD_INC_USE_COUNT; + context->ir_isopen = 1; + printk(KERN_INFO "IR port opened\n"); + } + +exit: + mutex_unlock(&context->lock); + + mutex_unlock(&disconnect_lock); + return 0; +} + +/** + * Called by lirc_dev when the application closes /dev/lirc + */ +static void ir_close(void *data) +{ + struct sasem_context *context; + + context = (struct sasem_context *)data; + if (!context) { + err("%s: no context for device", __func__); + return; + } + + mutex_lock(&context->lock); + + usb_kill_urb(context->rx_urb); + context->ir_isopen = 0; + MOD_DEC_USE_COUNT; + printk(KERN_INFO "IR port closed\n"); + + if (!context->dev_present) { + + /* + * Device disconnected while IR port was + * still open. Driver was not deregistered + * at disconnect time, so do it now. + */ + deregister_from_lirc(context); + + if (!context->vfd_isopen) { + + mutex_unlock(&context->lock); + delete_context(context); + return; + } + /* If VFD port is open, context will be deleted by vfd_close */ + } + + mutex_unlock(&context->lock); + return; +} + +/** + * Process the incoming packet + */ +static void incoming_packet(struct sasem_context *context, + struct urb *urb) +{ + int len = urb->actual_length; + unsigned char *buf = urb->transfer_buffer; + long ms; + struct timeval tv; + + if (len != 8) { + printk(KERN_WARNING "%s: invalid incoming packet size (%d)\n", + __func__, len); + return; + } + +#ifdef DEBUG + int i; + for (i = 0; i < 8; ++i) + printk(KERN_INFO "%02x ", buf [i]); + printk(KERN_INFO "\n"); +#endif + + /* + * Lirc could deal with the repeat code, but we really need to block it + * if it arrives too late. Otherwise we could repeat the wrong code. + */ + + /* get the time since the last button press */ + do_gettimeofday(&tv); + ms = (tv.tv_sec - context->presstime.tv_sec) * 1000 + + (tv.tv_usec - context->presstime.tv_usec) / 1000; + + if (memcmp(buf, "\x08\0\0\0\0\0\0\0", 8) == 0) { + /* + * the repeat code is being sent, so we copy + * the old code to LIRC + */ + + /* + * NOTE: Only if the last code was less than 250ms ago + * - no one should be able to push another (undetected) button + * in that time and then get a false repeat of the previous + * press but it is long enough for a genuine repeat + */ + if ((ms < 250) && (context->codesaved != 0)) { + memcpy(buf, &context->lastcode, 8); + context->presstime.tv_sec = tv.tv_sec; + context->presstime.tv_usec = tv.tv_usec; + } + } else { + /* save the current valid code for repeats */ + memcpy(&context->lastcode, buf, 8); + /* + * set flag to signal a valid code was save; + * just for safety reasons + */ + context->codesaved = 1; + context->presstime.tv_sec = tv.tv_sec; + context->presstime.tv_usec = tv.tv_usec; + } + + lirc_buffer_write(context->driver->rbuf, buf); + wake_up(&context->driver->rbuf->wait_poll); +} + +/** + * Callback function for USB core API: receive data + */ +#if defined(KERNEL_2_5) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +static void usb_rx_callback(struct urb *urb, struct pt_regs *regs) +#else +static void usb_rx_callback(struct urb *urb) +#endif +{ + struct sasem_context *context; + + if (!urb) + return; + context = (struct sasem_context *) urb->context; + if (!context) + return; + + switch (urb->status) { + + case -ENOENT: /* usbcore unlink successful! */ + return; + + case 0: + if (context->ir_isopen) + incoming_packet(context, urb); + break; + + default: + printk(KERN_WARNING "%s: status (%d): ignored\n", + __func__, urb->status); + break; + } + +#ifdef KERNEL_2_5 + usb_submit_urb(context->rx_urb, GFP_ATOMIC); +#endif + return; +} + + + +/** + * Callback function for USB core API: Probe + */ +#ifdef KERNEL_2_5 +static int sasem_probe(struct usb_interface *interface, + const struct usb_device_id *id) +#else +static void *sasem_probe(struct usb_device *dev, unsigned int intf, + const struct usb_device_id *id) +#endif +{ +#ifdef KERNEL_2_5 + struct usb_device *dev = NULL; + struct usb_host_interface *iface_desc = NULL; +#else + struct usb_interface *interface = NULL; + struct usb_interface_descriptor *iface_desc = NULL; + char name [10]; + int subminor = 0; +#endif + struct usb_endpoint_descriptor *rx_endpoint = NULL; + struct usb_endpoint_descriptor *tx_endpoint = NULL; + struct urb *rx_urb = NULL; + struct urb *tx_urb = NULL; + struct lirc_driver *driver = NULL; + struct lirc_buffer *rbuf = NULL; + int lirc_minor = 0; + int num_endpoints; + int retval = 0; + int vfd_ep_found; + int ir_ep_found; + int alloc_status; + struct sasem_context *context = NULL; + int i; + + printk(KERN_INFO "%s: found Sasem device\n", __func__); + +#if !defined(KERNEL_2_5) + for (subminor = 0; subminor < MAX_DEVICES; ++subminor) { + if (minor_table [subminor] == NULL) + break; + } + if (subminor == MAX_DEVICES) { + err("%s: allowed number of devices already present", + __func__); + retval = -ENOMEM; + goto exit; + } +#endif + +#ifdef KERNEL_2_5 + dev = usb_get_dev(interface_to_usbdev(interface)); + iface_desc = interface->cur_altsetting; + num_endpoints = iface_desc->desc.bNumEndpoints; +#else + interface = &dev->actconfig->interface [intf]; + iface_desc = &interface->altsetting [interface->act_altsetting]; + num_endpoints = iface_desc->bNumEndpoints; +#endif + + /* + * Scan the endpoint list and set: + * first input endpoint = IR endpoint + * first output endpoint = VFD endpoint + */ + + ir_ep_found = 0; + vfd_ep_found = 0; + + for (i = 0; i < num_endpoints && !(ir_ep_found && vfd_ep_found); ++i) { + + struct usb_endpoint_descriptor *ep; + int ep_dir; + int ep_type; +#ifdef KERNEL_2_5 + ep = &iface_desc->endpoint [i].desc; +#else + ep = &iface_desc->endpoint [i]; +#endif + ep_dir = ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK; + ep_type = ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; + + if (!ir_ep_found && + ep_dir == USB_DIR_IN && + ep_type == USB_ENDPOINT_XFER_INT) { + + rx_endpoint = ep; + ir_ep_found = 1; + if (debug) + printk(KERN_INFO "%s: found IR endpoint\n", + __func__); + + } else if (!vfd_ep_found && + ep_dir == USB_DIR_OUT && + ep_type == USB_ENDPOINT_XFER_INT) { + + tx_endpoint = ep; + vfd_ep_found = 1; + if (debug) + printk(KERN_INFO "%s: found VFD endpoint\n", + __func__); + } + } + + /* Input endpoint is mandatory */ + if (!ir_ep_found) { + + err("%s: no valid input (IR) endpoint found.", __func__); + retval = -ENODEV; + goto exit; + } + + if (!vfd_ep_found) + printk(KERN_INFO "%s: no valid output (VFD) endpoint found.\n", + __func__); + + + /* Allocate memory */ + alloc_status = 0; + + context = kzalloc(sizeof(struct sasem_context), GFP_KERNEL); + if (!context) { + err("%s: kzalloc failed for context", __func__); + alloc_status = 1; + goto alloc_status_switch; + } + driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); + if (!driver) { + err("%s: kzalloc failed for lirc_driver", __func__); + alloc_status = 2; + goto alloc_status_switch; + } + rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL); + if (!rbuf) { + err("%s: kmalloc failed for lirc_buffer", __func__); + alloc_status = 3; + goto alloc_status_switch; + } + if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) { + err("%s: lirc_buffer_init failed", __func__); + alloc_status = 4; + goto alloc_status_switch; + } +#ifdef KERNEL_2_5 + rx_urb = usb_alloc_urb(0, GFP_KERNEL); +#else + rx_urb = usb_alloc_urb(0); +#endif + if (!rx_urb) { + err("%s: usb_alloc_urb failed for IR urb", __func__); + alloc_status = 5; + goto alloc_status_switch; + } + if (vfd_ep_found) { +#ifdef KERNEL_2_5 + tx_urb = usb_alloc_urb(0, GFP_KERNEL); +#else + tx_urb = usb_alloc_urb(0); +#endif + if (!tx_urb) { + err("%s: usb_alloc_urb failed for VFD urb", __func__); + alloc_status = 6; + goto alloc_status_switch; + } + } + + mutex_init(&context->lock); + + strcpy(driver->name, MOD_NAME); + driver->minor = -1; + driver->code_length = 64; + driver->sample_rate = 0; + driver->features = LIRC_CAN_REC_LIRCCODE; + driver->data = context; + driver->rbuf = rbuf; + driver->set_use_inc = ir_open; + driver->set_use_dec = ir_close; +#ifdef LIRC_HAVE_SYSFS + driver->dev = &interface->dev; +#endif + driver->owner = THIS_MODULE; + + mutex_lock(&context->lock); + + lirc_minor = lirc_register_driver(driver); + if (lirc_minor < 0) { + err("%s: lirc_register_driver failed", __func__); + alloc_status = 7; + mutex_unlock(&context->lock); + } else + printk(KERN_INFO "%s: Registered Sasem driver (minor:%d)\n", + __func__, lirc_minor); + +alloc_status_switch: + + switch (alloc_status) { + + case 7: + if (vfd_ep_found) + usb_free_urb(tx_urb); + case 6: + usb_free_urb(rx_urb); + case 5: + lirc_buffer_free(rbuf); + case 4: + kfree(rbuf); + case 3: + kfree(driver); + case 2: + kfree(context); + context = NULL; + case 1: + retval = -ENOMEM; + goto exit; + } + + /* Needed while unregistering! */ + driver->minor = lirc_minor; + + context->dev = dev; + context->dev_present = 1; + context->rx_endpoint = rx_endpoint; + context->rx_urb = rx_urb; + if (vfd_ep_found) { + context->tx_endpoint = tx_endpoint; + context->tx_urb = tx_urb; + context->vfd_contrast = 1000; /* range 0 - 1000 */ + } + context->driver = driver; + +#ifdef KERNEL_2_5 + usb_set_intfdata(interface, context); +#else + minor_table [subminor] = context; + context->subminor = subminor; +#endif + + if (vfd_ep_found) { + +#ifdef KERNEL_2_5 + if (debug) + printk(KERN_INFO "Registering VFD with sysfs\n"); + if (usb_register_dev(interface, &sasem_class)) + /* Not a fatal error, so ignore */ + printk(KERN_INFO "%s: could not get a minor number " + "for VFD\n", __func__); +#else + if (debug) + printk(KERN_INFO "Registering VFD with devfs\n"); + sprintf(name, DEVFS_NAME, subminor); + context->devfs = devfs_register(usb_devfs_handle, name, + DEVFS_FL_DEFAULT, + USB_MAJOR, VFD_MINOR_BASE + subminor, + DEVFS_MODE, &vfd_fops, NULL); + if (!context->devfs) + /* not a fatal error so ignore */ + printk(KERN_INFO "%s: devfs register failed for VFD\n", + __func__); +#endif + } + + printk(KERN_INFO "%s: Sasem device on usb<%d:%d> initialized\n", + __func__, dev->bus->busnum, dev->devnum); + + mutex_unlock(&context->lock); +exit: +#ifdef KERNEL_2_5 + return retval; +#else + return (!retval) ? context : NULL; +#endif +} + +/** + * Callback function for USB core API: disonnect + */ +#ifdef KERNEL_2_5 +static void sasem_disconnect(struct usb_interface *interface) +#else +static void sasem_disconnect(struct usb_device *dev, void *data) +#endif +{ + struct sasem_context *context; + + /* prevent races with ir_open()/vfd_open() */ + mutex_lock(&disconnect_lock); + +#ifdef KERNEL_2_5 + context = usb_get_intfdata(interface); +#else + context = (struct sasem_context *)data; +#endif + mutex_lock(&context->lock); + + printk(KERN_INFO "%s: Sasem device disconnected\n", __func__); + +#ifdef KERNEL_2_5 + usb_set_intfdata(interface, NULL); +#else + minor_table [context->subminor] = NULL; +#endif + context->dev_present = 0; + + /* Stop reception */ + usb_kill_urb(context->rx_urb); + + /* Abort ongoing write */ + if (atomic_read(&context->tx.busy)) { + + usb_kill_urb(context->tx_urb); + wait_for_completion(&context->tx.finished); + } + + /* De-register from lirc_dev if IR port is not open */ + if (!context->ir_isopen) + deregister_from_lirc(context); + +#ifdef KERNEL_2_5 + usb_deregister_dev(interface, &sasem_class); +#else + if (context->devfs) + devfs_unregister(context->devfs); +#endif + + mutex_unlock(&context->lock); + + if (!context->ir_isopen && !context->vfd_isopen) + delete_context(context); + + mutex_unlock(&disconnect_lock); +} + +static int __init sasem_init(void) +{ + int rc; + + printk(KERN_INFO MOD_DESC ", v" MOD_VERSION "\n"); + printk(KERN_INFO MOD_AUTHOR "\n"); + + rc = usb_register(&sasem_driver); + if (rc < 0) { + err("%s: usb register failed (%d)", __func__, rc); + return -ENODEV; + } + return 0; +} + +static void __exit sasem_exit(void) +{ + usb_deregister(&sasem_driver); + printk(KERN_INFO "module removed. Goodbye!\n"); +} + + +module_init(sasem_init); +module_exit(sasem_exit); + +#if !defined(KERNEL_2_5) +EXPORT_NO_SYMBOLS; +#endif --- linux-2.6.32.orig/ubuntu/lirc/lirc_sasem/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_sasem/Makefile @@ -0,0 +1,2 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. +obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_i2c/Makefile +++ linux-2.6.32/ubuntu/lirc/lirc_i2c/Makefile @@ -0,0 +1,3 @@ +EXTRA_CFLAGS =-DIRCTL_DEV_MAJOR=61 -DLIRC_SERIAL_TRANSMITTER -DLIRC_SERIAL_SOFTCARRIER -I$(src)/.. + +obj-$(CONFIG_LIRC_I2C) += lirc_i2c.o --- linux-2.6.32.orig/ubuntu/lirc/lirc_i2c/lirc_i2c.c +++ linux-2.6.32/ubuntu/lirc/lirc_i2c/lirc_i2c.c @@ -0,0 +1,778 @@ +/* $Id: lirc_i2c.c,v 1.70 2009/08/30 16:59:53 jarodwilson Exp $ */ + +/* + * lirc_i2c.c + * + * i2c IR driver for the onboard IR port on many TV tuner cards, including: + * -Flavors of the Hauppauge PVR-150/250/350 + * -Hauppauge HVR-1300 + * -PixelView (BT878P+W/FM) + * -KNC ONE TV Station/Anubis Typhoon TView Tuner + * -Asus TV-Box and Creative/VisionTek BreakOut-Box + * -Leadtek Winfast PVR2000 + * + * Copyright (c) 2000 Gerd Knorr + * modified for PixelView (BT878P+W/FM) by + * Michal Kochanowicz + * Christoph Bartelmus + * modified for KNC ONE TV Station/Anubis Typhoon TView Tuner by + * Ulrich Mueller + * modified for Asus TV-Box and Creative/VisionTek BreakOut-Box by + * Stefan Jahn + * modified for inclusion into kernel sources by + * Jerome Brock + * modified for Leadtek Winfast PVR2000 by + * Thomas Reitmayr (treitmayr@yahoo.com) + * modified for Hauppauge HVR-1300 by + * Jan Frey (jfrey@gmx.de) + * + * parts are cut&pasted from the old lirc_haup.c driver + * + * 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 + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../kcompat.h" +#include "../lirc_dev/lirc_dev.h" + +struct IR { + struct lirc_driver l; + struct i2c_client c; + int nextkey; + unsigned char b[3]; + unsigned char bits; + unsigned char flag; +}; + +#define DEVICE_NAME "lirc_i2c" + +/* module parameters */ +static int debug; /* debug output */ +static int minor = -1; /* minor number */ + +#define dprintk(fmt, args...) \ + do { \ + if (debug) \ + printk(KERN_DEBUG DEVICE_NAME ": " fmt, \ + ## args); \ + } while (0) + +static int reverse(int data, int bits) +{ + int i; + int c; + + for (c = 0, i = 0; i < bits; i++) + c |= ((data & (1<c, keybuf, 1); + /* poll IR chip */ + if (i2c_master_recv(&ir->c, keybuf, sizeof(keybuf)) != sizeof(keybuf)) { + dprintk("read error\n"); + return -EIO; + } + + dprintk("key (0x%02x%02x%02x%02x)\n", + keybuf[0], keybuf[1], keybuf[2], keybuf[3]); + + /* key pressed ? */ + if (keybuf[2] == 0xff) + return -ENODATA; + + /* remove repeat bit */ + keybuf[2] &= 0x7f; + keybuf[3] |= 0x80; + + lirc_buffer_write(buf, keybuf); + return 0; +} + +static int add_to_buf_pcf8574(void *data, struct lirc_buffer *buf) +{ + struct IR *ir = data; + int rc; + unsigned char all, mask; + unsigned char key; + + /* compute all valid bits (key code + pressed/release flag) */ + all = ir->bits | ir->flag; + + /* save IR writable mask bits */ + mask = i2c_smbus_read_byte(&ir->c) & ~all; + + /* send bit mask */ + rc = i2c_smbus_write_byte(&ir->c, (0xff & all) | mask); + + /* receive scan code */ + rc = i2c_smbus_read_byte(&ir->c); + + if (rc == -1) { + dprintk("%s read error\n", ir->c.name); + return -EIO; + } + + /* drop duplicate polls */ + if (ir->b[0] == (rc & all)) + return -ENODATA; + + ir->b[0] = rc & all; + + dprintk("%s key 0x%02X %s\n", ir->c.name, rc & ir->bits, + (rc & ir->flag) ? "released" : "pressed"); + + /* ignore released buttons */ + if (rc & ir->flag) + return -ENODATA; + + /* set valid key code */ + key = rc & ir->bits; + lirc_buffer_write(buf, &key); + return 0; +} + +/* common for Hauppauge IR receivers */ +static int add_to_buf_haup_common(void *data, struct lirc_buffer *buf, + unsigned char *keybuf, int size, int offset) +{ + struct IR *ir = data; + __u16 code; + unsigned char codes[2]; + int ret; + + /* poll IR chip */ + ret = i2c_master_recv(&ir->c, keybuf, size); + if (ret == size) { + ir->b[0] = keybuf[offset]; + ir->b[1] = keybuf[offset+1]; + ir->b[2] = keybuf[offset+2]; + if (ir->b[0] != 0x00 && ir->b[1] != 0x00) + dprintk("key (0x%02x/0x%02x)\n", ir->b[0], ir->b[1]); + } else { + dprintk("read error (ret=%d)\n", ret); + /* keep last successful read buffer */ + } + + /* key pressed ? */ + if ((ir->b[0] & 0x80) == 0) + return -ENODATA; + + /* look what we have */ + code = (((__u16)ir->b[0]&0x7f)<<6) | (ir->b[1]>>2); + + codes[0] = (code >> 8) & 0xff; + codes[1] = code & 0xff; + + /* return it */ + dprintk("sending code 0x%02x%02x to lirc\n", codes[0], codes[1]); + lirc_buffer_write(buf, codes); + return 0; +} + +/* specific for the Hauppauge PVR150 IR receiver */ +static int add_to_buf_haup_pvr150(void *data, struct lirc_buffer *buf) +{ + unsigned char keybuf[6]; + /* fetch 6 bytes, first relevant is at offset 3 */ + return add_to_buf_haup_common(data, buf, keybuf, 6, 3); +} + +/* used for all Hauppauge IR receivers but the PVR150 */ +static int add_to_buf_haup(void *data, struct lirc_buffer *buf) +{ + unsigned char keybuf[3]; + /* fetch 3 bytes, first relevant is at offset 0 */ + return add_to_buf_haup_common(data, buf, keybuf, 3, 0); +} + + +static int add_to_buf_pvr2000(void *data, struct lirc_buffer *buf) +{ + struct IR *ir = data; + unsigned char key; + s32 flags; + s32 code; + + /* poll IR chip */ + flags = i2c_smbus_read_byte_data(&ir->c, 0x10); + if (-1 == flags) { + dprintk("read error\n"); + return -ENODATA; + } + /* key pressed ? */ + if (0 == (flags & 0x80)) + return -ENODATA; + + /* read actual key code */ + code = i2c_smbus_read_byte_data(&ir->c, 0x00); + if (-1 == code) { + dprintk("read error\n"); + return -ENODATA; + } + + key = code & 0xFF; + + dprintk("IR Key/Flags: (0x%02x/0x%02x)\n", key, flags & 0xFF); + + /* return it */ + lirc_buffer_write(buf, &key); + return 0; +} + +static int add_to_buf_pixelview(void *data, struct lirc_buffer *buf) +{ + struct IR *ir = data; + unsigned char key; + + /* poll IR chip */ + if (1 != i2c_master_recv(&ir->c, &key, 1)) { + dprintk("read error\n"); + return -1; + } + dprintk("key %02x\n", key); + + /* return it */ + lirc_buffer_write(buf, &key); + return 0; +} + +static int add_to_buf_pv951(void *data, struct lirc_buffer *buf) +{ + struct IR *ir = data; + unsigned char key; + unsigned char codes[4]; + + /* poll IR chip */ + if (1 != i2c_master_recv(&ir->c, &key, 1)) { + dprintk("read error\n"); + return -ENODATA; + } + /* ignore 0xaa */ + if (key == 0xaa) + return -ENODATA; + dprintk("key %02x\n", key); + + codes[0] = 0x61; + codes[1] = 0xD6; + codes[2] = reverse(key, 8); + codes[3] = (~codes[2])&0xff; + + lirc_buffer_write(buf, codes); + return 0; +} + +static int add_to_buf_knc1(void *data, struct lirc_buffer *buf) +{ + static unsigned char last_key = 0xFF; + struct IR *ir = data; + unsigned char key; + + /* poll IR chip */ + if (1 != i2c_master_recv(&ir->c, &key, 1)) { + dprintk("read error\n"); + return -ENODATA; + } + + /* + * it seems that 0xFE indicates that a button is still held + * down, while 0xFF indicates that no button is held + * down. 0xFE sequences are sometimes interrupted by 0xFF + */ + + dprintk("key %02x\n", key); + + if (key == 0xFF) + return -ENODATA; + + if (key == 0xFE) + key = last_key; + + last_key = key; + lirc_buffer_write(buf, &key); + + return 0; +} + +static int set_use_inc(void *data) +{ + struct IR *ir = data; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) + int ret; +#endif + + dprintk("%s called\n", __func__); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + i2c_use_client(&ir->c); +#else + /* lock bttv in memory while /dev/lirc is in use */ + ret = i2c_use_client(&ir->c); + if (ret != 0) + return ret; +#endif + + MOD_INC_USE_COUNT; + return 0; +} + +static void set_use_dec(void *data) +{ + struct IR *ir = data; + + dprintk("%s called\n", __func__); + + i2c_release_client(&ir->c); + MOD_DEC_USE_COUNT; +} + +static struct lirc_driver lirc_template = { + .name = "lirc_i2c", + .set_use_inc = set_use_inc, + .set_use_dec = set_use_dec, + .dev = NULL, + .owner = THIS_MODULE, +}; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) +static int ir_attach(struct i2c_adapter *adap, int addr, + unsigned short flags, int kind); +static int ir_probe(struct i2c_adapter *adap); +# else +static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id); +#endif +static int ir_remove(struct i2c_client *client); +static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg); + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 30) +static const struct i2c_device_id ir_receiver_id[] = { + /* Generic entry for any IR receiver */ + { "ir_video", 0 }, + /* IR device specific entries could be added here */ + { } +}; +#endif + +static struct i2c_driver driver = { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) + .name = "i2c ir driver", + .flags = I2C_DF_NOTIFY, +#else + .driver = { + .owner = THIS_MODULE, + .name = "i2c ir driver", + }, +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + .attach_adapter = ir_probe, + .detach_client = ir_remove, +#else + .probe = ir_probe, + .remove = ir_remove, + .id_table = ir_receiver_id, +#endif + .command = ir_command, +}; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) +static struct i2c_client client_template = { + .name = "unset", + .driver = &driver +}; +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) +static int ir_attach(struct i2c_adapter *adap, int addr, + unsigned short flags, int kind) +#else +static void pcf_probe(struct i2c_client *client, struct IR *ir) +{ + int ret1, ret2, ret3, ret4; + + ret1 = i2c_smbus_write_byte(client, 0xff); + ret2 = i2c_smbus_read_byte(client); + ret3 = i2c_smbus_write_byte(client, 0x00); + ret4 = i2c_smbus_read_byte(client); + + /* in the Asus TV-Box: bit 1-0 */ + if (((ret2 & 0x03) == 0x03) && ((ret4 & 0x03) == 0x00)) { + ir->bits = (unsigned char) ~0x07; + ir->flag = 0x04; + /* in the Creative/VisionTek BreakOut-Box: bit 7-6 */ + } else if (((ret2 & 0xc0) == 0xc0) && ((ret4 & 0xc0) == 0x00)) { + ir->bits = (unsigned char) ~0xe0; + ir->flag = 0x20; + } + + return; +} + +static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id) +#endif +{ + struct IR *ir; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + int err, retval; + + client_template.adapter = adap; + client_template.addr = addr; +#else + struct i2c_adapter *adap = client->adapter; + unsigned short addr = client->addr; + int retval; +#endif + + ir = kmalloc(sizeof(struct IR), GFP_KERNEL); + if (!ir) + return -ENOMEM; + memcpy(&ir->l, &lirc_template, sizeof(struct lirc_driver)); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + memcpy(&ir->c, &client_template, sizeof(struct i2c_client)); + + ir->c.adapter = adap; + ir->c.addr = addr; + i2c_set_clientdata(&ir->c, ir); +#else + memcpy(&ir->c, client, sizeof(struct i2c_client)); + + i2c_set_clientdata(client, ir); +#endif + ir->l.data = ir; + ir->l.minor = minor; + ir->l.sample_rate = 10; + ir->l.dev = &ir->c.dev; + ir->nextkey = -1; + + switch (addr) { + case 0x64: + strlcpy(ir->c.name, "Pixelview IR", I2C_NAME_SIZE); + ir->l.code_length = 8; + ir->l.add_to_buf = add_to_buf_pixelview; + break; + case 0x4b: + strlcpy(ir->c.name, "PV951 IR", I2C_NAME_SIZE); + ir->l.code_length = 32; + ir->l.add_to_buf = add_to_buf_pv951; + break; + case 0x71: +#ifdef I2C_HW_B_CX2341X + if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848) || + adap->id == (I2C_ALGO_BIT | I2C_HW_B_CX2341X)) { +#else + if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848)) { +#endif + /* + * The PVR150 IR receiver uses the same protocol as + * other Hauppauge cards, but the data flow is + * different, so we need to deal with it by its own. + */ + strlcpy(ir->c.name, "Hauppauge PVR150", I2C_NAME_SIZE); + } else /* I2C_HW_B_CX2388x */ + strlcpy(ir->c.name, "Hauppauge HVR1300", I2C_NAME_SIZE); + ir->l.code_length = 13; + ir->l.add_to_buf = add_to_buf_haup_pvr150; + break; + case 0x6b: + strlcpy(ir->c.name, "Adaptec IR", I2C_NAME_SIZE); + ir->l.code_length = 32; + ir->l.add_to_buf = add_to_buf_adap; + break; + case 0x18: + case 0x1a: +#ifdef I2C_HW_B_CX2341X + if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848) || + adap->id == (I2C_ALGO_BIT | I2C_HW_B_CX2341X)) { +#else + if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848)) { +#endif + strlcpy(ir->c.name, "Hauppauge IR", I2C_NAME_SIZE); + ir->l.code_length = 13; + ir->l.add_to_buf = add_to_buf_haup; + } else { /* I2C_HW_B_CX2388x */ + strlcpy(ir->c.name, "Leadtek IR", I2C_NAME_SIZE); + ir->l.code_length = 8; + ir->l.add_to_buf = add_to_buf_pvr2000; + } + break; + case 0x30: + strlcpy(ir->c.name, "KNC ONE IR", I2C_NAME_SIZE); + ir->l.code_length = 8; + ir->l.add_to_buf = add_to_buf_knc1; + break; + case 0x21: + case 0x23: +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + ir->bits = flags & 0xff; + ir->flag = (flags >> 8) & 0xff; +#else + pcf_probe(client, ir); +#endif + strlcpy(ir->c.name, "TV-Box IR", I2C_NAME_SIZE); + ir->l.code_length = 8; + ir->l.add_to_buf = add_to_buf_pcf8574; + break; + default: + /* shouldn't happen */ + printk("lirc_i2c: Huh? unknown i2c address (0x%02x)?\n", addr); + kfree(ir); + return -EINVAL; + } + printk(KERN_INFO "lirc_i2c: chip 0x%x found @ 0x%02x (%s)\n", + adap->id, addr, ir->c.name); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + /* register device */ + err = i2c_attach_client(&ir->c); + if (err) { + kfree(ir); + return err; + } +#endif + + retval = lirc_register_driver(&ir->l); + + if (retval < 0) { + printk(KERN_ERR "lirc_i2c: failed to register driver!\n"); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + i2c_detach_client(&ir->c); +#endif + kfree(ir); + return retval; + } + + ir->l.minor = retval; + + return 0; +} + +static int ir_remove(struct i2c_client *client) +{ + struct IR *ir = i2c_get_clientdata(client); + + /* unregister device */ + lirc_unregister_driver(ir->l.minor); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) + i2c_detach_client(&ir->c); +#endif + + /* free memory */ + kfree(ir); + return 0; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) +static int ir_probe(struct i2c_adapter *adap) +{ + /* + * The external IR receiver is at i2c address 0x34 (0x35 for + * reads). Future Hauppauge cards will have an internal + * receiver at 0x30 (0x31 for reads). In theory, both can be + * fitted, and Hauppauge suggest an external overrides an + * internal. + * + * That's why we probe 0x1a (~0x34) first. CB + * + * The i2c address for the Hauppauge PVR-150 card is 0xe2, + * so we need to probe 0x71 as well. + */ + + static const int probe[] = { + 0x1a, /* Hauppauge IR external */ + 0x18, /* Hauppauge IR internal */ + 0x71, /* Hauppauge IR (PVR150) */ + 0x4b, /* PV951 IR */ + 0x64, /* Pixelview IR */ + 0x30, /* KNC ONE IR */ + 0x6b, /* Adaptec IR */ + -1}; + +#ifdef I2C_HW_B_CX2388x + static const int probe_cx88[] = { + 0x18, /* Leadtek Winfast PVR2000 */ + 0x71, /* Hauppauge HVR-IR */ + -1}; +#endif + + struct i2c_client c; + char buf; + int i, rc; + + memset(&c, 0, sizeof(c)); +#ifdef I2C_HW_B_CX2341X + if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848) || + adap->id == (I2C_ALGO_BIT | I2C_HW_B_CX2341X)) { +#else + if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848)) { +#endif + c.adapter = adap; + for (i = 0; -1 != probe[i]; i++) { + c.addr = probe[i]; + rc = i2c_master_recv(&c, &buf, 1); + dprintk("probe 0x%02x @ %s: %s\n", + probe[i], adap->name, + (1 == rc) ? "yes" : "no"); + if (1 == rc) { + rc = ir_attach(adap, probe[i], 0, 0); + if (rc < 0) + goto attach_fail; + } + } + } + +#ifdef I2C_HW_B_CX2388x + /* Leadtek Winfast PVR2000 or Hauppauge HVR-1300 */ + else if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_CX2388x)) { + c.adapter = adap; + for (i = 0; -1 != probe_cx88[i]; i++) { + c.addr = probe_cx88[i]; + rc = i2c_master_recv(&c, &buf, 1); + dprintk("probe 0x%02x @ %s: %s\n", + c.addr, adap->name, + (1 == rc) ? "yes" : "no"); + if (1 == rc) { + rc = ir_attach(adap, c.addr, 0, 0); + if (rc < 0) + goto attach_fail; + } + } + } +#endif + + /* Asus TV-Box and Creative/VisionTek BreakOut-Box (PCF8574) */ + else if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_RIVA)) { + /* + * addresses to probe; + * leave 0x24 and 0x25 because SAA7113H possibly uses it + * 0x21 and 0x22 possibly used by SAA7108E + * Asus: 0x21 is a correct address (channel 1 of PCF8574) + * Creative: 0x23 is a correct address (channel 3 of PCF8574) + * VisionTek: 0x23 is a correct address (channel 3 of PCF8574) + */ + static const int pcf_probe[] = { 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, -1 }; + int ret1, ret2, ret3, ret4; + unsigned char bits = 0, flag = 0; + + c.adapter = adap; + for (i = 0; -1 != pcf_probe[i]; i++) { + c.addr = pcf_probe[i]; + ret1 = i2c_smbus_write_byte(&c, 0xff); + ret2 = i2c_smbus_read_byte(&c); + ret3 = i2c_smbus_write_byte(&c, 0x00); + ret4 = i2c_smbus_read_byte(&c); + + /* ensure that the writable bitmask works correctly */ + rc = 0; + if (ret1 != -1 && ret2 != -1 && + ret3 != -1 && ret4 != -1) { + /* in the Asus TV-Box: bit 1-0 */ + if (((ret2 & 0x03) == 0x03) && + ((ret4 & 0x03) == 0x00)) { + bits = (unsigned char) ~0x07; + flag = 0x04; + rc = 1; + } + /* in the Creative/VisionTek BreakOut-Box: bit 7-6 */ + if (((ret2 & 0xc0) == 0xc0) && + ((ret4 & 0xc0) == 0x00)) { + bits = (unsigned char) ~0xe0; + flag = 0x20; + rc = 1; + } + } + dprintk("probe 0x%02x @ %s: %s\n", + c.addr, adap->name, rc ? "yes" : "no"); + if (rc) { + rc = ir_attach(adap, pcf_probe[i], + bits | (flag << 8), 0); + if (rc < 0) + goto attach_fail; + } + } + } + + return 0; + +attach_fail: + printk(KERN_ERR "lirc_i2c: %s: ir_attach failed!\n", __func__); + return rc; + +} +#endif + +static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg) +{ + /* nothing */ + return 0; +} + +#ifdef MODULE + +static int __init lirc_i2c_init(void) +{ + request_module("bttv"); + request_module("rivatv"); + request_module("ivtv"); + request_module("cx8800"); + i2c_add_driver(&driver); + return 0; +} + +static void __exit lirc_i2c_exit(void) +{ + i2c_del_driver(&driver); +} + +MODULE_DESCRIPTION("Infrared receiver driver for Hauppauge and " + "Pixelview cards (i2c stack)"); +MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, " + "Ulrich Mueller, Stefan Jahn, Jerome Brock"); +MODULE_LICENSE("GPL"); + +module_param(minor, int, S_IRUGO); +MODULE_PARM_DESC(minor, "Preferred minor device number"); + +module_param(debug, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug, "Enable debugging messages"); + +module_init(lirc_i2c_init); +module_exit(lirc_i2c_exit); +EXPORT_NO_SYMBOLS; + +#endif /* MODULE */ --- linux-2.6.32.orig/ubuntu/include/README +++ linux-2.6.32/ubuntu/include/README @@ -0,0 +1,4 @@ +Only use this directory for things which need to share their headers with +other parts of the kernel or other modules in ubuntu/ + +Otherwise, keep them local to the module directory. --- linux-2.6.32.orig/ubuntu/include/linux/aufs_type.h +++ linux-2.6.32/ubuntu/include/linux/aufs_type.h @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * + * This program, aufs 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __AUFS_TYPE_H__ +#define __AUFS_TYPE_H__ + +#include +#include +#include + +#define AUFS_VERSION "2-standalone.tree-20091207" + +/* todo? move this to linux-2.6.19/include/magic.h */ +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_BRANCH_MAX_127 +typedef __s8 aufs_bindex_t; +#define AUFS_BRANCH_MAX 127 +#else +typedef __s16 aufs_bindex_t; +#ifdef CONFIG_AUFS_BRANCH_MAX_511 +#define AUFS_BRANCH_MAX 511 +#elif defined(CONFIG_AUFS_BRANCH_MAX_1023) +#define AUFS_BRANCH_MAX 1023 +#elif defined(CONFIG_AUFS_BRANCH_MAX_32767) +#define AUFS_BRANCH_MAX 32767 +#endif +#endif + +#ifdef __KERNEL__ +#ifndef AUFS_BRANCH_MAX +#error unknown CONFIG_AUFS_BRANCH_MAX value +#endif +#endif /* __KERNEL__ */ + +/* ---------------------------------------------------------------------- */ + +#define AUFS_NAME "aufs" +#define AUFS_FSTYPE AUFS_NAME + +#define AUFS_ROOT_INO 2 +#define AUFS_FIRST_INO 11 + +#define AUFS_WH_PFX ".wh." +#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1) +#define AUFS_WH_TMP_LEN 4 +/* a limit for rmdir/rename a dir */ +#define AUFS_MAX_NAMELEN (NAME_MAX \ + - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\ + - 1 /* dot */\ + - AUFS_WH_TMP_LEN) /* hex */ +#define AUFS_XINO_FNAME "." AUFS_NAME ".xino" +#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME +#define AUFS_XINO_TRUNC_INIT 64 /* blocks */ +#define AUFS_XINO_TRUNC_STEP 4 /* blocks */ +#define AUFS_DIRWH_DEF 3 +#define AUFS_RDCACHE_DEF 10 /* seconds */ +#define AUFS_RDBLK_DEF 512 /* bytes */ +#define AUFS_RDHASH_DEF 32 +#define AUFS_WKQ_NAME AUFS_NAME "d" +#define AUFS_NWKQ_DEF 4 +#define AUFS_MFS_SECOND_DEF 30 /* seconds */ +#define AUFS_PLINK_WARN 100 /* number of plinks */ + +#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */ +#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME + +#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME +#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk" +#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph" + +/* doubly whiteouted */ +#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME +#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME +#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME + +/* branch permission */ +#define AUFS_BRPERM_RW "rw" +#define AUFS_BRPERM_RO "ro" +#define AUFS_BRPERM_RR "rr" +#define AUFS_BRPERM_WH "wh" +#define AUFS_BRPERM_NLWH "nolwh" +#define AUFS_BRPERM_ROWH AUFS_BRPERM_RO "+" AUFS_BRPERM_WH +#define AUFS_BRPERM_RRWH AUFS_BRPERM_RR "+" AUFS_BRPERM_WH +#define AUFS_BRPERM_RWNLWH AUFS_BRPERM_RW "+" AUFS_BRPERM_NLWH + +/* ---------------------------------------------------------------------- */ + +/* ioctl */ +enum { + AuCtl_PLINK_MAINT, + AuCtl_PLINK_CLEAN, + + /* readdir in userspace */ + AuCtl_RDU, + AuCtl_RDU_INO, + + /* pathconf wrapper */ + AuCtl_WBR_FD +}; + +/* borrowed from linux/include/linux/kernel.h */ +#ifndef ALIGN +#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1) +#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask)) +#endif + +/* borrowed from linux/include/linux/compiler-gcc3.h */ +#ifndef __aligned +#define __aligned(x) __attribute__((aligned(x))) +#define __packed __attribute__((packed)) +#endif + +struct au_rdu_cookie { + __u64 h_pos; + __s16 bindex; + __u8 flags; + __u8 pad; + __u32 generation; +} __aligned(8); + +struct au_rdu_ent { + __u64 ino; + __s16 bindex; + __u8 type; + __u8 nlen; + __u8 wh; + char name[0]; +} __aligned(8); + +static inline int au_rdu_len(int nlen) +{ + /* include the terminating NULL */ + return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1, + sizeof(__u64)); +} + +union au_rdu_ent_ul { + struct au_rdu_ent __user *e; + unsigned long ul; +}; + +enum { + AufsCtlRduV_SZ, + AufsCtlRduV_SZ_PTR, + AufsCtlRduV_End +}; + +struct aufs_rdu { + /* input */ + union { + __u64 sz; /* AuCtl_RDU */ + __u64 nent; /* AuCtl_RDU_INO */ + }; + union au_rdu_ent_ul ent; + __u16 verify[AufsCtlRduV_End]; + + /* input/output */ + __u32 blk; + + /* output */ + union au_rdu_ent_ul tail; + /* number of entries which were added in a single call */ + __u64 rent; + __u8 full; + __u8 shwh; + + struct au_rdu_cookie cookie; +} __aligned(8); + +#define AuCtlType 'A' +#define AUFS_CTL_PLINK_MAINT _IO(AuCtlType, AuCtl_PLINK_MAINT) +#define AUFS_CTL_PLINK_CLEAN _IO(AuCtlType, AuCtl_PLINK_CLEAN) +#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu) +#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu) +#define AUFS_CTL_WBR_FD _IO(AuCtlType, AuCtl_WBR_FD) + +#endif /* __AUFS_TYPE_H__ */ --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-raid4-5.h +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-raid4-5.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2006 Red Hat GmbH + * + * Module Author: Heinz Mauelshagen (Mauelshagen@RedHat.com) + * + * This file is released under the GPL. + * + */ + +#ifndef _DM_RAID45_H +#define _DM_RAID45_H + +/* Factor out to dm.h! */ +#define STR_LEN(ptr, str) ptr, str, strlen(ptr) + +enum lock_type { RAID45_EX, RAID45_SHARED }; + +struct dmraid45_locking_type { + /* Request a lock on a stripe. */ + void* (*lock)(sector_t key, enum lock_type type); + + /* Release a lock on a stripe. */ + void (*unlock)(void *lock_handle); + +}; + +#endif --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-memcache.h +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-memcache.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * Device-mapper memory object handling: + * + * o allocate/free total_pages in a per client page pool. + * + * o allocate/free memory objects with chunks (1..n) of + * pages_per_chunk pages hanging off. + * + * This file is released under the GPL. + */ + +#ifndef _DM_MEM_CACHE_H +#define _DM_MEM_CACHE_H + +#define DM_MEM_CACHE_H_VERSION "0.1" + +#include "dm.h" +#include + +static inline struct page_list *pl_elem(struct page_list *pl, unsigned p) +{ + while (pl && p--) + pl = pl->next; + + return pl; +} + +struct dm_mem_cache_object { + struct page_list *pl; /* Dynamically allocated array */ + void *private; /* Caller context reference */ +}; + +struct dm_mem_cache_client; + +/* + * Create/destroy dm memory cache client resources. + * + * On creation, a number of @objects with @chunks of + * @pages_per_chunk pages will be allocated. + */ +struct dm_mem_cache_client * +dm_mem_cache_client_create(unsigned objects, unsigned chunks, + unsigned pages_per_chunk); +void dm_mem_cache_client_destroy(struct dm_mem_cache_client *client); + +/* + * Grow/shrink a dm memory cache client resources + * by @objetcs amount of objects. + */ +int dm_mem_cache_grow(struct dm_mem_cache_client *client, unsigned objects); +int dm_mem_cache_shrink(struct dm_mem_cache_client *client, unsigned objects); + +/* + * Allocate/free a memory object + * + * On allocation one object with an amount of chunks and + * an amount of pages per chunk will be returned on success. + */ +struct dm_mem_cache_object * +dm_mem_cache_alloc(struct dm_mem_cache_client *client); +void dm_mem_cache_free(struct dm_mem_cache_client *client, + struct dm_mem_cache_object *object); + +#endif --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-message.c +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-message.c @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2007,2008 Red Hat Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * General device-mapper message interface argument parser. + * + * This file is released under the GPL. + * + * device-mapper message parser. + * + */ + +#include "dm.h" +#include "dm-message.h" +#include + +#define DM_MSG_PREFIX "dm_message" + +/* Basename of a path. */ +static inline char * +basename(char *s) +{ + char *p = strrchr(s, '/'); + + return p ? p + 1 : s; +} + +/* Get an argument depending on type. */ +static void +message_arguments(struct dm_msg *msg, int argc, char **argv) +{ + + if (argc) { + int i; + struct dm_message_argument *args = msg->spec->args; + + for (i = 0; i < args->num_args; i++) { + int r; + unsigned long **ptr = args->ptr; + enum dm_message_argument_type type = args->types[i]; + + switch (type) { + case dm_msg_base_t: + ((char **) ptr)[i] = basename(argv[i]); + break; + + case dm_msg_str_t: + ((char **) ptr)[i] = argv[i]; + break; + + case dm_msg_int_t: + r = sscanf(argv[i], "%d", ((int **) ptr)[i]); + goto check; + + case dm_msg_uint_t: + r = sscanf(argv[i], "%u", + ((unsigned **) ptr)[i]); + goto check; + + case dm_msg_uint64_t: + r = sscanf(argv[i], "%llu", + ((unsigned long long **) ptr)[i]); + +check: + if (r != 1) { + set_bit(dm_msg_ret_undef, &msg->ret); + set_bit(dm_msg_ret_arg, &msg->ret); + } + } + } + } +} + +/* Parse message options. */ +static void +message_options_parse(struct dm_msg *msg, int argc, char **argv) +{ + int hit = 0; + unsigned long *action; + size_t l1 = strlen(*argv), l_hit = 0; + struct dm_message_option *o = msg->spec->options; + char **option, **option_end = o->options + o->num_options; + + for (option = o->options, action = o->actions; + option < option_end; option++, action++) { + size_t l2 = strlen(*option); + + if (!strnicmp(*argv, *option, min(l1, l2))) { + hit++; + l_hit = l2; + set_bit(*action, &msg->action); + } + } + + /* Assume error. */ + msg->ret = 0; + set_bit(dm_msg_ret_option, &msg->ret); + if (!hit || l1 > l_hit) + set_bit(dm_msg_ret_undef, &msg->ret); /* Undefined option. */ + else if (hit > 1) + set_bit(dm_msg_ret_ambiguous, &msg->ret); /* Ambiguous option.*/ + else { + clear_bit(dm_msg_ret_option, &msg->ret); /* Option OK. */ + message_arguments(msg, --argc, ++argv); + } +} + +static inline void +print_ret(const char *caller, unsigned long ret) +{ + struct { + unsigned long err; + const char *err_str; + } static err_msg[] = { + { dm_msg_ret_ambiguous, "message ambiguous" }, + { dm_msg_ret_inval, "message invalid" }, + { dm_msg_ret_undef, "message undefined" }, + { dm_msg_ret_arg, "message argument" }, + { dm_msg_ret_argcount, "message argument count" }, + { dm_msg_ret_option, "option" }, + }, *e = ARRAY_END(err_msg); + + while (e-- > err_msg) { + if (test_bit(e->err, &ret)) + DMERR("%s %s", caller, e->err_str); + } +} + +/* Parse a message action. */ +int +dm_message_parse(const char *caller, struct dm_msg *msg, void *context, + int argc, char **argv) +{ + int hit = 0; + size_t l1, l_hit = 0; + struct dm_msg_spec *s, *s_hit = NULL, + *s_end = msg->specs + msg->num_specs; + + if (argc < 2) + return -EINVAL; + + l1 = strlen(*argv); + for (s = msg->specs; s < s_end; s++) { + size_t l2 = strlen(s->cmd); + + if (!strnicmp(*argv, s->cmd, min(l1, l2))) { + hit++; + l_hit = l2; + s_hit = s; + } + } + + msg->ret = 0; + if (!hit || l1 > l_hit) /* No hit or message string too long. */ + set_bit(dm_msg_ret_undef, &msg->ret); + else if (hit > 1) /* Ambiguous message. */ + set_bit(dm_msg_ret_ambiguous, &msg->ret); + else if (argc - 2 != s_hit->args->num_args) { + set_bit(dm_msg_ret_undef, &msg->ret); + set_bit(dm_msg_ret_argcount, &msg->ret); + } + + if (msg->ret) + goto bad; + + msg->action = 0; + msg->spec = s_hit; + set_bit(s_hit->action, &msg->action); + message_options_parse(msg, --argc, ++argv); + + if (!msg->ret) + return msg->spec->f(msg, context); + +bad: + print_ret(caller, msg->ret); + return -EINVAL; +} +EXPORT_SYMBOL(dm_message_parse); + +MODULE_DESCRIPTION(DM_NAME " device-mapper target message parser"); +MODULE_AUTHOR("Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-memcache.c +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-memcache.c @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * Device-mapper memory object handling: + * + * o allocate/free total_pages in a per client page pool. + * + * o allocate/free memory objects with chunks (1..n) of + * pages_per_chunk pages hanging off. + * + * This file is released under the GPL. + */ + +#define DM_MEM_CACHE_VERSION "0.2" + +#include "dm.h" +#include "dm-memcache.h" +#include + +struct dm_mem_cache_client { + spinlock_t lock; + mempool_t *objs_pool; + struct page_list *free_list; + unsigned objects; + unsigned chunks; + unsigned pages_per_chunk; + unsigned free_pages; + unsigned total_pages; +}; + +/* + * Free pages and page_list elements of client. + */ +static void free_cache_pages(struct page_list *list) +{ + while (list) { + struct page_list *pl = list; + + list = pl->next; + BUG_ON(!pl->page); + __free_page(pl->page); + kfree(pl); + } +} + +/* + * Alloc number of pages and page_list elements as required by client. + */ +static struct page_list *alloc_cache_pages(unsigned pages) +{ + struct page_list *pl, *ret = NULL; + struct page *page; + + while (pages--) { + page = alloc_page(GFP_NOIO); + if (!page) + goto err; + + pl = kmalloc(sizeof(*pl), GFP_NOIO); + if (!pl) { + __free_page(page); + goto err; + } + + pl->page = page; + pl->next = ret; + ret = pl; + } + + return ret; + +err: + free_cache_pages(ret); + return NULL; +} + +/* + * Allocate page_list elements from the pool to chunks of the memory object. + */ +static void alloc_chunks(struct dm_mem_cache_client *cl, + struct dm_mem_cache_object *obj) +{ + unsigned chunks = cl->chunks; + unsigned long flags; + + local_irq_save(flags); + local_irq_disable(); + while (chunks--) { + unsigned p = cl->pages_per_chunk; + + obj[chunks].pl = NULL; + + while (p--) { + struct page_list *pl; + + /* Take next element from free list */ + spin_lock(&cl->lock); + pl = cl->free_list; + BUG_ON(!pl); + cl->free_list = pl->next; + spin_unlock(&cl->lock); + + pl->next = obj[chunks].pl; + obj[chunks].pl = pl; + } + } + + local_irq_restore(flags); +} + +/* + * Free page_list elements putting them back onto free list + */ +static void free_chunks(struct dm_mem_cache_client *cl, + struct dm_mem_cache_object *obj) +{ + unsigned chunks = cl->chunks; + unsigned long flags; + struct page_list *next, *pl; + + local_irq_save(flags); + local_irq_disable(); + while (chunks--) { + for (pl = obj[chunks].pl; pl; pl = next) { + next = pl->next; + + spin_lock(&cl->lock); + pl->next = cl->free_list; + cl->free_list = pl; + cl->free_pages++; + spin_unlock(&cl->lock); + } + } + + local_irq_restore(flags); +} + +/* + * Create/destroy dm memory cache client resources. + */ +struct dm_mem_cache_client * +dm_mem_cache_client_create(unsigned objects, unsigned chunks, + unsigned pages_per_chunk) +{ + unsigned total_pages = objects * chunks * pages_per_chunk; + struct dm_mem_cache_client *client; + + BUG_ON(!total_pages); + client = kzalloc(sizeof(*client), GFP_KERNEL); + if (!client) + return ERR_PTR(-ENOMEM); + + client->objs_pool = mempool_create_kmalloc_pool(objects, + chunks * sizeof(struct dm_mem_cache_object)); + if (!client->objs_pool) + goto err; + + client->free_list = alloc_cache_pages(total_pages); + if (!client->free_list) + goto err1; + + spin_lock_init(&client->lock); + client->objects = objects; + client->chunks = chunks; + client->pages_per_chunk = pages_per_chunk; + client->free_pages = client->total_pages = total_pages; + return client; + +err1: + mempool_destroy(client->objs_pool); +err: + kfree(client); + return ERR_PTR(-ENOMEM); +} +EXPORT_SYMBOL(dm_mem_cache_client_create); + +void dm_mem_cache_client_destroy(struct dm_mem_cache_client *cl) +{ + BUG_ON(cl->free_pages != cl->total_pages); + free_cache_pages(cl->free_list); + mempool_destroy(cl->objs_pool); + kfree(cl); +} +EXPORT_SYMBOL(dm_mem_cache_client_destroy); + +/* + * Grow a clients cache by an amount of pages. + * + * Don't call from interrupt context! + */ +int dm_mem_cache_grow(struct dm_mem_cache_client *cl, unsigned objects) +{ + unsigned pages = objects * cl->chunks * cl->pages_per_chunk; + struct page_list *pl, *last; + + BUG_ON(!pages); + pl = alloc_cache_pages(pages); + if (!pl) + return -ENOMEM; + + last = pl; + while (last->next) + last = last->next; + + spin_lock_irq(&cl->lock); + last->next = cl->free_list; + cl->free_list = pl; + cl->free_pages += pages; + cl->total_pages += pages; + cl->objects++; + spin_unlock_irq(&cl->lock); + + mempool_resize(cl->objs_pool, cl->objects, GFP_NOIO); + return 0; +} +EXPORT_SYMBOL(dm_mem_cache_grow); + +/* Shrink a clients cache by an amount of pages */ +int dm_mem_cache_shrink(struct dm_mem_cache_client *cl, unsigned objects) +{ + int r; + unsigned pages = objects * cl->chunks * cl->pages_per_chunk, p = pages; + unsigned long flags; + struct page_list *last = NULL, *pl, *pos; + + BUG_ON(!pages); + + spin_lock_irqsave(&cl->lock, flags); + pl = pos = cl->free_list; + while (p-- && pos->next) { + last = pos; + pos = pos->next; + } + + if (++p) + r = -ENOMEM; + else { + r = 0; + cl->free_list = pos; + cl->free_pages -= pages; + cl->total_pages -= pages; + cl->objects--; + last->next = NULL; + } + spin_unlock_irqrestore(&cl->lock, flags); + + if (!r) { + free_cache_pages(pl); + mempool_resize(cl->objs_pool, cl->objects, GFP_NOIO); + } + + return r; +} +EXPORT_SYMBOL(dm_mem_cache_shrink); + +/* + * Allocate/free a memory object + * + * Can be called from interrupt context + */ +struct dm_mem_cache_object *dm_mem_cache_alloc(struct dm_mem_cache_client *cl) +{ + int r = 0; + unsigned pages = cl->chunks * cl->pages_per_chunk; + unsigned long flags; + struct dm_mem_cache_object *obj; + + obj = mempool_alloc(cl->objs_pool, GFP_NOIO); + if (!obj) + return ERR_PTR(-ENOMEM); + + spin_lock_irqsave(&cl->lock, flags); + if (pages > cl->free_pages) + r = -ENOMEM; + else + cl->free_pages -= pages; + spin_unlock_irqrestore(&cl->lock, flags); + + if (r) { + mempool_free(obj, cl->objs_pool); + return ERR_PTR(r); + } + + alloc_chunks(cl, obj); + return obj; +} +EXPORT_SYMBOL(dm_mem_cache_alloc); + +void dm_mem_cache_free(struct dm_mem_cache_client *cl, + struct dm_mem_cache_object *obj) +{ + free_chunks(cl, obj); + mempool_free(obj, cl->objs_pool); +} +EXPORT_SYMBOL(dm_mem_cache_free); + +MODULE_DESCRIPTION(DM_NAME " dm memory cache"); +MODULE_AUTHOR("Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/ubuntu/dm-raid4-5/Kconfig +++ linux-2.6.32/ubuntu/dm-raid4-5/Kconfig @@ -0,0 +1,6 @@ +config DM_RAID45 + tristate "RAID 4/5 target (EXPERIMENTAL)" + depends on BLK_DEV_DM && XOR_BLOCKS && EXPERIMENTAL + default m + ---help--- + A target that supports RAID4 and RAID5 mappings. --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-message.h +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-message.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2007,2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * General device-mapper message interface argument parser. + * + * This file is released under the GPL. + * + */ + +#ifndef DM_MESSAGE_H +#define DM_MESSAGE_H + +/* Factor out to dm.h. */ +/* Reference to array end. */ +#define ARRAY_END(a) ((a) + ARRAY_SIZE(a)) + +/* Message return bits. */ +enum dm_message_return { + dm_msg_ret_ambiguous, /* Action ambiguous. */ + dm_msg_ret_inval, /* Action invalid. */ + dm_msg_ret_undef, /* Action undefined. */ + + dm_msg_ret_option, /* Option error. */ + dm_msg_ret_arg, /* Argument error. */ + dm_msg_ret_argcount, /* Argument count error. */ +}; + +/* Message argument type conversions. */ +enum dm_message_argument_type { + dm_msg_base_t, /* Basename string. */ + dm_msg_str_t, /* String. */ + dm_msg_int_t, /* Signed int. */ + dm_msg_uint_t, /* Unsigned int. */ + dm_msg_uint64_t, /* Unsigned int 64. */ +}; + +/* A message option. */ +struct dm_message_option { + unsigned num_options; + char **options; + unsigned long *actions; +}; + +/* Message arguments and types. */ +struct dm_message_argument { + unsigned num_args; + unsigned long **ptr; + enum dm_message_argument_type types[]; +}; + +/* Client message. */ +struct dm_msg { + unsigned long action; /* Identified action. */ + unsigned long ret; /* Return bits. */ + unsigned num_specs; /* # of sepcifications listed. */ + struct dm_msg_spec *specs; /* Specification list. */ + struct dm_msg_spec *spec; /* Specification selected. */ +}; + +/* Secification of the message. */ +struct dm_msg_spec { + const char *cmd; /* Name of the command (i.e. 'bandwidth'). */ + unsigned long action; + struct dm_message_option *options; + struct dm_message_argument *args; + unsigned long parm; /* Parameter to pass through to callback. */ + /* Function to process for action. */ + int (*f) (struct dm_msg *msg, void *context); +}; + +/* Parameter access macros. */ +#define DM_MSG_PARM(msg) ((msg)->spec->parm) + +#define DM_MSG_STR_ARGS(msg, idx) ((char *) *(msg)->spec->args->ptr[idx]) +#define DM_MSG_INT_ARGS(msg, idx) ((int) *(msg)->spec->args->ptr[idx]) +#define DM_MSG_UINT_ARGS(msg, idx) ((unsigned) DM_MSG_INT_ARG(msg, idx)) +#define DM_MSG_UINT64_ARGS(msg, idx) ((uint64_t) *(msg)->spec->args->ptr[idx]) + +#define DM_MSG_STR_ARG(msg) DM_MSG_STR_ARGS(msg, 0) +#define DM_MSG_INT_ARG(msg) DM_MSG_INT_ARGS(msg, 0) +#define DM_MSG_UINT_ARG(msg) DM_MSG_UINT_ARGS(msg, 0) +#define DM_MSG_UINT64_ARG(msg) DM_MSG_UINT64_ARGS(msg, 0) + + +/* Parse a message and its options and optionally call a function back. */ +int dm_message_parse(const char *caller, struct dm_msg *msg, void *context, + int argc, char **argv); + +#endif --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-raid4-5.c +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-raid4-5.c @@ -0,0 +1,4547 @@ +/*[A[A + * Copyright (C) 2005-2009 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * This file is released under the GPL. + * + * + * Linux 2.6 Device Mapper RAID4 and RAID5 target. + * + * Supports: + * o RAID4 with dedicated and selectable parity device + * o RAID5 with rotating parity (left+right, symmetric+asymmetric) + * o recovery of out of sync device for initial + * RAID set creation or after dead drive replacement + * o run time optimization of xor algorithm used to calculate parity + * + * + * Thanks to MD for: + * o the raid address calculation algorithm + * o the base of the biovec <-> page list copier. + * + * + * Uses region hash to keep track of how many writes are in flight to + * regions in order to use dirty log to keep state of regions to recover: + * + * o clean regions (those which are synchronized + * and don't have write io in flight) + * o dirty regions (those with write io in flight) + * + * + * On startup, any dirty regions are migrated to the + * 'nosync' state and are subject to recovery by the daemon. + * + * See raid_ctr() for table definition. + * + * FIXME: recovery bandwidth + */ + +static const char *version = "v0.2594b"; + +#include "dm.h" +#include "dm-memcache.h" +#include "dm-message.h" +#include "dm-raid45.h" + +#include +#include +#include + +#include +#include +#include +#include "dm-region-hash.h" + + +/* + * Configurable parameters + */ + +/* Minimum/maximum and default # of selectable stripes. */ +#define STRIPES_MIN 8 +#define STRIPES_MAX 16384 +#define STRIPES_DEFAULT 80 + +/* Maximum and default chunk size in sectors if not set in constructor. */ +#define CHUNK_SIZE_MIN 8 +#define CHUNK_SIZE_MAX 16384 +#define CHUNK_SIZE_DEFAULT 64 + +/* Default io size in sectors if not set in constructor. */ +#define IO_SIZE_MIN CHUNK_SIZE_MIN +#define IO_SIZE_DEFAULT IO_SIZE_MIN + +/* Recover io size default in sectors. */ +#define RECOVER_IO_SIZE_MIN 64 +#define RECOVER_IO_SIZE_DEFAULT 256 + +/* Default, minimum and maximum percentage of recover io bandwidth. */ +#define BANDWIDTH_DEFAULT 10 +#define BANDWIDTH_MIN 1 +#define BANDWIDTH_MAX 100 + +/* # of parallel recovered regions */ +#define RECOVERY_STRIPES_MIN 1 +#define RECOVERY_STRIPES_MAX 64 +#define RECOVERY_STRIPES_DEFAULT RECOVERY_STRIPES_MIN +/* + * END Configurable parameters + */ + +#define TARGET "dm-raid45" +#define DAEMON "kraid45d" +#define DM_MSG_PREFIX TARGET + +#define SECTORS_PER_PAGE (PAGE_SIZE >> SECTOR_SHIFT) + +/* Amount/size for __xor(). */ +#define XOR_SIZE PAGE_SIZE + +/* Check value in range. */ +#define range_ok(i, min, max) (i >= min && i <= max) + +/* Check argument is power of 2. */ +#define POWER_OF_2(a) (!(a & (a - 1))) + +/* Structure access macros. */ +/* Derive raid_set from stripe_cache pointer. */ +#define RS(x) container_of(x, struct raid_set, sc) + +/* Page reference. */ +#define PAGE(stripe, p) ((stripe)->obj[p].pl->page) + +/* Stripe chunk reference. */ +#define CHUNK(stripe, p) ((stripe)->chunk + p) + +/* Bio list reference. */ +#define BL(stripe, p, rw) (stripe->chunk[p].bl + rw) +#define BL_CHUNK(chunk, rw) (chunk->bl + rw) + +/* Page list reference. */ +#define PL(stripe, p) (stripe->obj[p].pl) +/* END: structure access macros. */ + +/* Factor out to dm-bio-list.h */ +static inline void bio_list_push(struct bio_list *bl, struct bio *bio) +{ + bio->bi_next = bl->head; + bl->head = bio; + + if (!bl->tail) + bl->tail = bio; +} + +/* Factor out to dm.h */ +#define TI_ERR_RET(str, ret) \ + do { ti->error = str; return ret; } while (0); +#define TI_ERR(str) TI_ERR_RET(str, -EINVAL) + +/* Macro to define access IO flags access inline functions. */ +#define BITOPS(name, what, var, flag) \ +static inline int TestClear ## name ## what(struct var *v) \ +{ return test_and_clear_bit(flag, &v->io.flags); } \ +static inline int TestSet ## name ## what(struct var *v) \ +{ return test_and_set_bit(flag, &v->io.flags); } \ +static inline void Clear ## name ## what(struct var *v) \ +{ clear_bit(flag, &v->io.flags); } \ +static inline void Set ## name ## what(struct var *v) \ +{ set_bit(flag, &v->io.flags); } \ +static inline int name ## what(struct var *v) \ +{ return test_bit(flag, &v->io.flags); } + +/*----------------------------------------------------------------- + * Stripe cache + * + * Cache for all reads and writes to raid sets (operational or degraded) + * + * We need to run all data to and from a RAID set through this cache, + * because parity chunks need to get calculated from data chunks + * or, in the degraded/resynchronization case, missing chunks need + * to be reconstructed using the other chunks of the stripe. + *---------------------------------------------------------------*/ +/* A chunk within a stripe (holds bios hanging off). */ +/* IO status flags for chunks of a stripe. */ +enum chunk_flags { + CHUNK_DIRTY, /* Pages of chunk dirty; need writing. */ + CHUNK_ERROR, /* IO error on any chunk page. */ + CHUNK_IO, /* Allow/prohibit IO on chunk pages. */ + CHUNK_LOCKED, /* Chunk pages locked during IO. */ + CHUNK_MUST_IO, /* Chunk must io. */ + CHUNK_UNLOCK, /* Enforce chunk unlock. */ + CHUNK_UPTODATE, /* Chunk pages are uptodate. */ +}; + +#if READ != 0 || WRITE != 1 +#error dm-raid45: READ/WRITE != 0/1 used as index!!! +#endif + +enum bl_type { + WRITE_QUEUED = WRITE + 1, + WRITE_MERGED, + NR_BL_TYPES, /* Must be last one! */ +}; +struct stripe_chunk { + atomic_t cnt; /* Reference count. */ + struct stripe *stripe; /* Backpointer to stripe for endio(). */ + /* Bio lists for reads, writes, and writes merged. */ + struct bio_list bl[NR_BL_TYPES]; + struct { + unsigned long flags; /* IO status flags. */ + } io; +}; + +/* Define chunk bit operations. */ +BITOPS(Chunk, Dirty, stripe_chunk, CHUNK_DIRTY) +BITOPS(Chunk, Error, stripe_chunk, CHUNK_ERROR) +BITOPS(Chunk, Io, stripe_chunk, CHUNK_IO) +BITOPS(Chunk, Locked, stripe_chunk, CHUNK_LOCKED) +BITOPS(Chunk, MustIo, stripe_chunk, CHUNK_MUST_IO) +BITOPS(Chunk, Unlock, stripe_chunk, CHUNK_UNLOCK) +BITOPS(Chunk, Uptodate, stripe_chunk, CHUNK_UPTODATE) + +/* + * Stripe linked list indexes. Keep order, because the stripe + * and the stripe cache rely on the first 3! + */ +enum list_types { + LIST_FLUSH, /* Stripes to flush for io. */ + LIST_ENDIO, /* Stripes to endio. */ + LIST_LRU, /* Least recently used stripes. */ + SC_NR_LISTS, /* # of lists in stripe cache. */ + LIST_HASH = SC_NR_LISTS, /* Hashed stripes. */ + LIST_RECOVER = LIST_HASH, /* For recovery type stripes only. */ + STRIPE_NR_LISTS,/* To size array in struct stripe. */ +}; + +/* Adressing region recovery. */ +struct recover_addr { + struct dm_region *reg; /* Actual region to recover. */ + sector_t pos; /* Position within region to recover. */ + sector_t end; /* End of region to recover. */ +}; + +/* A stripe: the io object to handle all reads and writes to a RAID set. */ +struct stripe { + atomic_t cnt; /* Reference count. */ + struct stripe_cache *sc; /* Backpointer to stripe cache. */ + + /* + * 4 linked lists: + * o io list to flush io + * o endio list + * o LRU list to put stripes w/o reference count on + * o stripe cache hash + */ + struct list_head lists[STRIPE_NR_LISTS]; + + sector_t key; /* Hash key. */ + region_t region; /* Region stripe is mapped to. */ + + struct { + unsigned long flags; /* Stripe state flags (see below). */ + + /* + * Pending ios in flight: + * + * used to control move of stripe to endio list + */ + atomic_t pending; + + /* Sectors to read and write for multi page stripe sets. */ + unsigned size; + } io; + + /* Address region recovery. */ + struct recover_addr *recover; + + /* Lock on stripe (Future: for clustering). */ + void *lock; + + struct { + unsigned short parity; /* Parity chunk index. */ + short recover; /* Recovery chunk index. */ + } idx; + + /* + * This stripe's memory cache object (dm-mem-cache); + * i.e. the io chunk pages. + */ + struct dm_mem_cache_object *obj; + + /* Array of stripe sets (dynamically allocated). */ + struct stripe_chunk chunk[0]; +}; + +/* States stripes can be in (flags field). */ +enum stripe_states { + STRIPE_ERROR, /* io error on stripe. */ + STRIPE_MERGED, /* Writes got merged to be written. */ + STRIPE_RBW, /* Read-before-write stripe. */ + STRIPE_RECONSTRUCT, /* Reconstruct of a missing chunk required. */ + STRIPE_RECONSTRUCTED, /* Reconstructed of a missing chunk. */ + STRIPE_RECOVER, /* Stripe used for RAID set recovery. */ +}; + +/* Define stripe bit operations. */ +BITOPS(Stripe, Error, stripe, STRIPE_ERROR) +BITOPS(Stripe, Merged, stripe, STRIPE_MERGED) +BITOPS(Stripe, RBW, stripe, STRIPE_RBW) +BITOPS(Stripe, Reconstruct, stripe, STRIPE_RECONSTRUCT) +BITOPS(Stripe, Reconstructed, stripe, STRIPE_RECONSTRUCTED) +BITOPS(Stripe, Recover, stripe, STRIPE_RECOVER) + +/* A stripe hash. */ +struct stripe_hash { + struct list_head *hash; + unsigned buckets; + unsigned mask; + unsigned prime; + unsigned shift; +}; + +enum sc_lock_types { + LOCK_ENDIO, /* Protect endio list. */ + LOCK_LRU, /* Protect LRU list. */ + NR_LOCKS, /* To size array in struct stripe_cache. */ +}; + +/* A stripe cache. */ +struct stripe_cache { + /* Stripe hash. */ + struct stripe_hash hash; + + spinlock_t locks[NR_LOCKS]; /* Locks to protect lists. */ + + /* Stripes with io to flush, stripes to endio and LRU lists. */ + struct list_head lists[SC_NR_LISTS]; + + /* Slab cache to allocate stripes from. */ + struct { + struct kmem_cache *cache; /* Cache itself. */ + char name[32]; /* Unique name. */ + } kc; + + struct dm_io_client *dm_io_client; /* dm-io client resource context. */ + + /* dm-mem-cache client resource context. */ + struct dm_mem_cache_client *mem_cache_client; + + int stripes_parm; /* # stripes parameter from constructor. */ + atomic_t stripes; /* actual # of stripes in cache. */ + atomic_t stripes_to_set; /* # of stripes to resize cache to. */ + atomic_t stripes_last; /* last # of stripes in cache. */ + atomic_t active_stripes; /* actual # of active stripes in cache. */ + + /* REMOVEME: */ + atomic_t active_stripes_max; /* actual # of active stripes in cache. */ +}; + +/* Flag specs for raid_dev */ ; +enum raid_dev_flags { + DEV_FAILED, /* Device failed. */ + DEV_IO_QUEUED, /* Io got queued to device. */ +}; + +/* The raid device in a set. */ +struct raid_dev { + struct dm_dev *dev; + sector_t start; /* Offset to map to. */ + struct { /* Using struct to be able to BITOPS(). */ + unsigned long flags; /* raid_dev_flags. */ + } io; +}; + +BITOPS(Dev, Failed, raid_dev, DEV_FAILED) +BITOPS(Dev, IoQueued, raid_dev, DEV_IO_QUEUED) + +/* Flags spec for raid_set. */ +enum raid_set_flags { + RS_CHECK_OVERWRITE, /* Check for chunk overwrites. */ + RS_DEAD, /* RAID set inoperational. */ + RS_DEGRADED, /* Io errors on RAID device. */ + RS_DEVEL_STATS, /* REMOVEME: display status information. */ + RS_RECOVER, /* Do recovery. */ + RS_RECOVERY_BANDWIDTH, /* Allow recovery bandwidth (delayed bios). */ + RS_SC_BUSY, /* Stripe cache busy -> send an event. */ + RS_SUSPEND, /* Suspend RAID set. */ +}; + +/* REMOVEME: devel stats counters. */ +enum stats_types { + S_BIOS_READ, + S_BIOS_ADDED_READ, + S_BIOS_ENDIO_READ, + S_BIOS_WRITE, + S_BIOS_ADDED_WRITE, + S_BIOS_ENDIO_WRITE, + S_CAN_MERGE, + S_CANT_MERGE, + S_CONGESTED, + S_DM_IO_READ, + S_DM_IO_WRITE, + S_BANDWIDTH, + S_BARRIER, + S_BIO_COPY_PL_NEXT, + S_DEGRADED, + S_DELAYED_BIOS, + S_FLUSHS, + S_HITS_1ST, + S_IOS_POST, + S_INSCACHE, + S_MAX_LOOKUP, + S_CHUNK_LOCKED, + S_NO_BANDWIDTH, + S_NOT_CONGESTED, + S_NO_RW, + S_NOSYNC, + S_OVERWRITE, + S_PROHIBITCHUNKIO, + S_RECONSTRUCT_EI, + S_RECONSTRUCT_DEV, + S_RECONSTRUCT_SET, + S_RECONSTRUCTED, + S_REQUEUE, + S_STRIPE_ERROR, + S_SUM_DELAYED_BIOS, + S_XORS, + S_NR_STATS, /* # of stats counters. Must be last! */ +}; + +/* Status type -> string mappings. */ +struct stats_map { + const enum stats_types type; + const char *str; +}; + +static struct stats_map stats_map[] = { + { S_BIOS_READ, "r=" }, + { S_BIOS_ADDED_READ, "/" }, + { S_BIOS_ENDIO_READ, "/" }, + { S_BIOS_WRITE, " w=" }, + { S_BIOS_ADDED_WRITE, "/" }, + { S_BIOS_ENDIO_WRITE, "/" }, + { S_DM_IO_READ, " rc=" }, + { S_DM_IO_WRITE, " wc=" }, + { S_BANDWIDTH, "\nbw=" }, + { S_NO_BANDWIDTH, " no_bw=" }, + { S_BARRIER, "\nbarrier=" }, + { S_BIO_COPY_PL_NEXT, "\nbio_cp_next=" }, + { S_CAN_MERGE, "\nmerge=" }, + { S_CANT_MERGE, "/no_merge=" }, + { S_CHUNK_LOCKED, "\nchunk_locked=" }, + { S_CONGESTED, "\ncgst=" }, + { S_NOT_CONGESTED, "/not_cgst=" }, + { S_DEGRADED, "\ndegraded=" }, + { S_DELAYED_BIOS, "\ndel_bios=" }, + { S_SUM_DELAYED_BIOS, "/sum_del_bios=" }, + { S_FLUSHS, "\nflushs=" }, + { S_HITS_1ST, "\nhits_1st=" }, + { S_IOS_POST, " ios_post=" }, + { S_INSCACHE, " inscache=" }, + { S_MAX_LOOKUP, " maxlookup=" }, + { S_NO_RW, "\nno_rw=" }, + { S_NOSYNC, " nosync=" }, + { S_OVERWRITE, " ovr=" }, + { S_PROHIBITCHUNKIO, " prhbt_io=" }, + { S_RECONSTRUCT_EI, "\nrec_ei=" }, + { S_RECONSTRUCT_DEV, " rec_dev=" }, + { S_RECONSTRUCT_SET, " rec_set=" }, + { S_RECONSTRUCTED, " rec=" }, + { S_REQUEUE, " requeue=" }, + { S_STRIPE_ERROR, " stripe_err=" }, + { S_XORS, " xors=" }, +}; + +/* + * A RAID set. + */ +#define dm_rh_client dm_region_hash +enum count_type { IO_WORK = 0, IO_RECOVER, IO_NR_COUNT }; +typedef void (*xor_function_t)(unsigned count, unsigned long **data); +struct raid_set { + struct dm_target *ti; /* Target pointer. */ + + struct { + unsigned long flags; /* State flags. */ + struct mutex in_lock; /* Protects central input list below. */ + struct bio_list in; /* Pending ios (central input list). */ + struct bio_list work; /* ios work set. */ + wait_queue_head_t suspendq; /* suspend synchronization. */ + atomic_t in_process; /* counter of queued bios (suspendq). */ + atomic_t in_process_max;/* counter of queued bios max. */ + + /* io work. */ + struct workqueue_struct *wq; + struct delayed_work dws_do_raid; /* For main worker. */ + struct work_struct ws_do_table_event; /* For event worker. */ + } io; + + /* Stripe locking abstraction. */ + struct dm_raid45_locking_type *locking; + + struct stripe_cache sc; /* Stripe cache for this set. */ + + /* Xor optimization. */ + struct { + struct xor_func *f; + unsigned chunks; + unsigned speed; + } xor; + + /* Recovery parameters. */ + struct recover { + struct dm_dirty_log *dl; /* Dirty log. */ + struct dm_rh_client *rh; /* Region hash. */ + + struct dm_io_client *dm_io_client; /* recovery dm-io client. */ + /* dm-mem-cache client resource context for recovery stripes. */ + struct dm_mem_cache_client *mem_cache_client; + + struct list_head stripes; /* List of recovery stripes. */ + + region_t nr_regions; + region_t nr_regions_to_recover; + region_t nr_regions_recovered; + unsigned long start_jiffies; + unsigned long end_jiffies; + + unsigned bandwidth; /* Recovery bandwidth [%]. */ + unsigned bandwidth_work; /* Recovery bandwidth [factor]. */ + unsigned bandwidth_parm; /* " constructor parm. */ + unsigned io_size; /* recovery io size <= region size. */ + unsigned io_size_parm; /* recovery io size ctr parameter. */ + unsigned recovery; /* Recovery allowed/prohibited. */ + unsigned recovery_stripes; /* # of parallel recovery stripes. */ + + /* recovery io throttling. */ + atomic_t io_count[IO_NR_COUNT]; /* counter recover/regular io.*/ + unsigned long last_jiffies; + } recover; + + /* RAID set parameters. */ + struct { + struct raid_type *raid_type; /* RAID type (eg, RAID4). */ + unsigned raid_parms; /* # variable raid parameters. */ + + unsigned chunk_size; /* Sectors per chunk. */ + unsigned chunk_size_parm; + unsigned chunk_shift; /* rsector chunk size shift. */ + + unsigned io_size; /* Sectors per io. */ + unsigned io_size_parm; + unsigned io_mask; /* Mask for bio_copy_page_list(). */ + unsigned io_inv_mask; /* Mask for raid_address(). */ + + sector_t sectors_per_dev; /* Sectors per device. */ + + atomic_t failed_devs; /* Amount of devices failed. */ + + /* Index of device to initialize. */ + int dev_to_init; + int dev_to_init_parm; + + /* Raid devices dynamically allocated. */ + unsigned raid_devs; /* # of RAID devices below. */ + unsigned data_devs; /* # of RAID data devices. */ + + int ei; /* index of failed RAID device. */ + + /* Index of dedicated parity device (i.e. RAID4). */ + int pi; + int pi_parm; /* constructor parm for status output. */ + } set; + + /* REMOVEME: devel stats counters. */ + atomic_t stats[S_NR_STATS]; + + /* Dynamically allocated temporary pointers for xor(). */ + unsigned long **data; + + /* Dynamically allocated RAID devices. Alignment? */ + struct raid_dev dev[0]; +}; + +/* Define RAID set bit operations. */ +BITOPS(RS, Bandwidth, raid_set, RS_RECOVERY_BANDWIDTH) +BITOPS(RS, CheckOverwrite, raid_set, RS_CHECK_OVERWRITE) +BITOPS(RS, Dead, raid_set, RS_DEAD) +BITOPS(RS, Degraded, raid_set, RS_DEGRADED) +BITOPS(RS, DevelStats, raid_set, RS_DEVEL_STATS) +BITOPS(RS, Recover, raid_set, RS_RECOVER) +BITOPS(RS, ScBusy, raid_set, RS_SC_BUSY) +BITOPS(RS, Suspend, raid_set, RS_SUSPEND) +#undef BITOPS + +/*----------------------------------------------------------------- + * Raid-4/5 set structures. + *---------------------------------------------------------------*/ +/* RAID level definitions. */ +enum raid_level { + raid4, + raid5, +}; + +/* Symmetric/Asymmetric, Left/Right parity rotating algorithms. */ +enum raid_algorithm { + none, + left_asym, + right_asym, + left_sym, + right_sym, +}; + +struct raid_type { + const char *name; /* RAID algorithm. */ + const char *descr; /* Descriptor text for logging. */ + const unsigned parity_devs; /* # of parity devices. */ + const unsigned minimal_devs; /* minimal # of devices in set. */ + const enum raid_level level; /* RAID level. */ + const enum raid_algorithm algorithm; /* RAID algorithm. */ +}; + +/* Supported raid types and properties. */ +static struct raid_type raid_types[] = { + {"raid4", "RAID4 (dedicated parity disk)", 1, 3, raid4, none}, + {"raid5_la", "RAID5 (left asymmetric)", 1, 3, raid5, left_asym}, + {"raid5_ra", "RAID5 (right asymmetric)", 1, 3, raid5, right_asym}, + {"raid5_ls", "RAID5 (left symmetric)", 1, 3, raid5, left_sym}, + {"raid5_rs", "RAID5 (right symmetric)", 1, 3, raid5, right_sym}, +}; + +/* Address as calculated by raid_address(). */ +struct raid_address { + sector_t key; /* Hash key (address of stripe % chunk_size). */ + unsigned di, pi; /* Data and parity disks index. */ +}; + +/* REMOVEME: reset statistics counters. */ +static void stats_reset(struct raid_set *rs) +{ + unsigned s = S_NR_STATS; + + while (s--) + atomic_set(rs->stats + s, 0); +} + +/*---------------------------------------------------------------- + * RAID set management routines. + *--------------------------------------------------------------*/ +/* + * Begin small helper functions. + */ +/* No need to be called from region hash indirectly at dm_rh_dec(). */ +static void wake_dummy(void *context) {} + +/* Return # of io reference. */ +static int io_ref(struct raid_set *rs) +{ + return atomic_read(&rs->io.in_process); +} + +/* Get an io reference. */ +static void io_get(struct raid_set *rs) +{ + int p = atomic_inc_return(&rs->io.in_process); + + if (p > atomic_read(&rs->io.in_process_max)) + atomic_set(&rs->io.in_process_max, p); /* REMOVEME: max. */ +} + +/* Put the io reference and conditionally wake io waiters. */ +static void io_put(struct raid_set *rs) +{ + /* Intel: rebuild data corrupter? */ + if (atomic_dec_and_test(&rs->io.in_process)) + wake_up(&rs->io.suspendq); + else + BUG_ON(io_ref(rs) < 0); +} + +/* Wait until all io has been processed. */ +static void wait_ios(struct raid_set *rs) +{ + wait_event(rs->io.suspendq, !io_ref(rs)); +} + +/* Queue (optionally delayed) io work. */ +static void wake_do_raid_delayed(struct raid_set *rs, unsigned long delay) +{ + queue_delayed_work(rs->io.wq, &rs->io.dws_do_raid, delay); +} + +/* Queue io work immediately (called from region hash too). */ +static void wake_do_raid(void *context) +{ + struct raid_set *rs = context; + + queue_work(rs->io.wq, &rs->io.dws_do_raid.work); +} + +/* Calculate device sector offset. */ +static sector_t _sector(struct raid_set *rs, struct bio *bio) +{ + sector_t sector = bio->bi_sector; + + sector_div(sector, rs->set.data_devs); + return sector; +} + +/* Return # of active stripes in stripe cache. */ +static int sc_active(struct stripe_cache *sc) +{ + return atomic_read(&sc->active_stripes); +} + +/* Stripe cache busy indicator. */ +static int sc_busy(struct raid_set *rs) +{ + return sc_active(&rs->sc) > + atomic_read(&rs->sc.stripes) - (STRIPES_MIN / 2); +} + +/* Set chunks states. */ +enum chunk_dirty_type { CLEAN, DIRTY, ERROR }; +static void chunk_set(struct stripe_chunk *chunk, enum chunk_dirty_type type) +{ + switch (type) { + case CLEAN: + ClearChunkDirty(chunk); + break; + case DIRTY: + SetChunkDirty(chunk); + break; + case ERROR: + SetChunkError(chunk); + SetStripeError(chunk->stripe); + return; + default: + BUG(); + } + + SetChunkUptodate(chunk); + SetChunkIo(chunk); + ClearChunkError(chunk); +} + +/* Return region state for a sector. */ +static int region_state(struct raid_set *rs, sector_t sector, + enum dm_rh_region_states state) +{ + struct dm_rh_client *rh = rs->recover.rh; + region_t region = dm_rh_sector_to_region(rh, sector); + + return !!(dm_rh_get_state(rh, region, 1) & state); +} + +/* + * Return true in case a chunk should be read/written + * + * Conditions to read/write: + * o chunk not uptodate + * o chunk dirty + * + * Conditios to avoid io: + * o io already ongoing on chunk + * o io explitely prohibited + */ +static int chunk_io(struct stripe_chunk *chunk) +{ + /* 2nd run optimization (flag set below on first run). */ + if (TestClearChunkMustIo(chunk)) + return 1; + + /* Avoid io if prohibited or a locked chunk. */ + if (!ChunkIo(chunk) || ChunkLocked(chunk)) + return 0; + + if (!ChunkUptodate(chunk) || ChunkDirty(chunk)) { + SetChunkMustIo(chunk); /* 2nd run optimization. */ + return 1; + } + + return 0; +} + +/* Call a function on each chunk needing io unless device failed. */ +static unsigned for_each_io_dev(struct stripe *stripe, + void (*f_io)(struct stripe *stripe, unsigned p)) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p, r = 0; + + for (p = 0; p < rs->set.raid_devs; p++) { + if (chunk_io(CHUNK(stripe, p)) && !DevFailed(rs->dev + p)) { + f_io(stripe, p); + r++; + } + } + + return r; +} + +/* + * Index of device to calculate parity on. + * + * Either the parity device index *or* the selected + * device to init after a spare replacement. + */ +static int dev_for_parity(struct stripe *stripe, int *sync) +{ + struct raid_set *rs = RS(stripe->sc); + int r = region_state(rs, stripe->key, DM_RH_NOSYNC | DM_RH_RECOVERING); + + *sync = !r; + + /* Reconstruct a particular device ?. */ + if (r && rs->set.dev_to_init > -1) + return rs->set.dev_to_init; + else if (rs->set.raid_type->level == raid4) + return rs->set.pi; + else if (!StripeRecover(stripe)) + return stripe->idx.parity; + else + return -1; +} + +/* RAID set congested function. */ +static int rs_congested(void *congested_data, int bdi_bits) +{ + int r; + unsigned p; + struct raid_set *rs = congested_data; + + if (sc_busy(rs) || RSSuspend(rs)) + r = 1; + else for (r = 0, p = rs->set.raid_devs; !r && p--; ) { + /* If any of our component devices are overloaded. */ + struct request_queue *q = bdev_get_queue(rs->dev[p].dev->bdev); + + r |= bdi_congested(&q->backing_dev_info, bdi_bits); + } + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (r ? S_CONGESTED : S_NOT_CONGESTED)); + return r; +} + +/* RAID device degrade check. */ +static void rs_check_degrade_dev(struct raid_set *rs, + struct stripe *stripe, unsigned p) +{ + if (TestSetDevFailed(rs->dev + p)) + return; + + /* Through an event in case of member device errors. */ + if (atomic_inc_return(&rs->set.failed_devs) > + rs->set.raid_type->parity_devs && + !TestSetRSDead(rs)) { + /* Display RAID set dead message once. */ + unsigned p; + char buf[BDEVNAME_SIZE]; + + DMERR("FATAL: too many devices failed -> RAID set broken"); + for (p = 0; p < rs->set.raid_devs; p++) { + if (DevFailed(rs->dev + p)) + DMERR("device /dev/%s failed", + bdevname(rs->dev[p].dev->bdev, buf)); + } + } + + /* Only log the first member error. */ + if (!TestSetRSDegraded(rs)) { + char buf[BDEVNAME_SIZE]; + + /* Store index for recovery. */ + rs->set.ei = p; + DMERR("CRITICAL: %sio error on device /dev/%s " + "in region=%llu; DEGRADING RAID set\n", + stripe ? "" : "FAKED ", + bdevname(rs->dev[p].dev->bdev, buf), + (unsigned long long) (stripe ? stripe->key : 0)); + DMERR("further device error messages suppressed"); + } + + schedule_work(&rs->io.ws_do_table_event); +} + +/* RAID set degrade check. */ +static void rs_check_degrade(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p = rs->set.raid_devs; + + while (p--) { + if (ChunkError(CHUNK(stripe, p))) + rs_check_degrade_dev(rs, stripe, p); + } +} + +/* Lookup a RAID device by name or by major:minor number. */ +static int raid_dev_lookup(struct raid_set *rs, struct raid_dev *dev_lookup) +{ + unsigned p; + struct raid_dev *dev; + + /* + * Must be an incremental loop, because the device array + * can have empty slots still on calls from raid_ctr() + */ + for (dev = rs->dev, p = 0; + dev->dev && p < rs->set.raid_devs; + dev++, p++) { + if (dev_lookup->dev->bdev->bd_dev == dev->dev->bdev->bd_dev) + return p; + } + + return -ENODEV; +} +/* + * End small helper functions. + */ + +/* + * Stripe hash functions + */ +/* Initialize/destroy stripe hash. */ +static int hash_init(struct stripe_hash *hash, unsigned stripes) +{ + unsigned buckets = 2, max_buckets = stripes >> 1; + static unsigned hash_primes[] = { + /* Table of primes for hash_fn/table size optimization. */ + 1, 2, 3, 7, 13, 27, 53, 97, 193, 389, 769, + 1543, 3079, 6151, 12289, 24593, 49157, 98317, + }; + + /* Calculate number of buckets (2^^n <= stripes / 2). */ + while (buckets < max_buckets) + buckets <<= 1; + + /* Allocate stripe hash buckets. */ + hash->hash = vmalloc(buckets * sizeof(*hash->hash)); + if (!hash->hash) + return -ENOMEM; + + hash->buckets = buckets; + hash->mask = buckets - 1; + hash->shift = ffs(buckets); + if (hash->shift > ARRAY_SIZE(hash_primes)) + hash->shift = ARRAY_SIZE(hash_primes) - 1; + + BUG_ON(hash->shift < 2); + hash->prime = hash_primes[hash->shift]; + + /* Initialize buckets. */ + while (buckets--) + INIT_LIST_HEAD(hash->hash + buckets); + return 0; +} + +static void hash_exit(struct stripe_hash *hash) +{ + if (hash->hash) { + vfree(hash->hash); + hash->hash = NULL; + } +} + +static unsigned hash_fn(struct stripe_hash *hash, sector_t key) +{ + return (unsigned) (((key * hash->prime) >> hash->shift) & hash->mask); +} + +static struct list_head *hash_bucket(struct stripe_hash *hash, sector_t key) +{ + return hash->hash + hash_fn(hash, key); +} + +/* Insert an entry into a hash. */ +static void stripe_insert(struct stripe_hash *hash, struct stripe *stripe) +{ + list_add(stripe->lists + LIST_HASH, hash_bucket(hash, stripe->key)); +} + +/* Lookup an entry in the stripe hash. */ +static struct stripe *stripe_lookup(struct stripe_cache *sc, sector_t key) +{ + unsigned look = 0; + struct stripe *stripe; + struct list_head *bucket = hash_bucket(&sc->hash, key); + + list_for_each_entry(stripe, bucket, lists[LIST_HASH]) { + look++; + + if (stripe->key == key) { + /* REMOVEME: statisics. */ + if (look > atomic_read(RS(sc)->stats + S_MAX_LOOKUP)) + atomic_set(RS(sc)->stats + S_MAX_LOOKUP, look); + return stripe; + } + } + + return NULL; +} + +/* Resize the stripe cache hash on size changes. */ +static int sc_hash_resize(struct stripe_cache *sc) +{ + /* Resize indicated ? */ + if (atomic_read(&sc->stripes) != atomic_read(&sc->stripes_last)) { + int r; + struct stripe_hash hash; + + r = hash_init(&hash, atomic_read(&sc->stripes)); + if (r) + return r; + + if (sc->hash.hash) { + unsigned b = sc->hash.buckets; + struct list_head *pos, *tmp; + + /* Walk old buckets and insert into new. */ + while (b--) { + list_for_each_safe(pos, tmp, sc->hash.hash + b) + stripe_insert(&hash, + list_entry(pos, struct stripe, + lists[LIST_HASH])); + } + + } + + hash_exit(&sc->hash); + memcpy(&sc->hash, &hash, sizeof(sc->hash)); + atomic_set(&sc->stripes_last, atomic_read(&sc->stripes)); + } + + return 0; +} +/* End hash stripe hash function. */ + +/* List add, delete, push and pop functions. */ +/* Add stripe to flush list. */ +#define DEL_LIST(lh) \ + if (!list_empty(lh)) \ + list_del_init(lh); + +/* Delete stripe from hash. */ +static void stripe_hash_del(struct stripe *stripe) +{ + DEL_LIST(stripe->lists + LIST_HASH); +} + +/* Return stripe reference count. */ +static inline int stripe_ref(struct stripe *stripe) +{ + return atomic_read(&stripe->cnt); +} + +static void stripe_flush_add(struct stripe *stripe) +{ + struct stripe_cache *sc = stripe->sc; + struct list_head *lh = stripe->lists + LIST_FLUSH; + + if (!StripeReconstruct(stripe) && list_empty(lh)) + list_add_tail(lh, sc->lists + LIST_FLUSH); +} + +/* + * Add stripe to LRU (inactive) list. + * + * Need lock, because of concurrent access from message interface. + */ +static void stripe_lru_add(struct stripe *stripe) +{ + if (!StripeRecover(stripe)) { + unsigned long flags; + struct list_head *lh = stripe->lists + LIST_LRU; + spinlock_t *lock = stripe->sc->locks + LOCK_LRU; + + spin_lock_irqsave(lock, flags); + if (list_empty(lh)) + list_add_tail(lh, stripe->sc->lists + LIST_LRU); + spin_unlock_irqrestore(lock, flags); + } +} + +#define POP_LIST(list) \ + do { \ + if (list_empty(sc->lists + (list))) \ + stripe = NULL; \ + else { \ + stripe = list_first_entry(sc->lists + (list), \ + struct stripe, \ + lists[(list)]); \ + list_del_init(stripe->lists + (list)); \ + } \ + } while (0); + +/* Pop an available stripe off the LRU list. */ +static struct stripe *stripe_lru_pop(struct stripe_cache *sc) +{ + struct stripe *stripe; + spinlock_t *lock = sc->locks + LOCK_LRU; + + spin_lock_irq(lock); + POP_LIST(LIST_LRU); + spin_unlock_irq(lock); + + return stripe; +} + +/* Pop an available stripe off the io list. */ +static struct stripe *stripe_io_pop(struct stripe_cache *sc) +{ + struct stripe *stripe; + + POP_LIST(LIST_FLUSH); + return stripe; +} + +/* Push a stripe safely onto the endio list to be handled by do_endios(). */ +static void stripe_endio_push(struct stripe *stripe) +{ + unsigned long flags; + struct stripe_cache *sc = stripe->sc; + struct list_head *stripe_list = stripe->lists + LIST_ENDIO, + *sc_list = sc->lists + LIST_ENDIO; + spinlock_t *lock = sc->locks + LOCK_ENDIO; + + /* This runs in parallel with do_endios(). */ + spin_lock_irqsave(lock, flags); + if (list_empty(stripe_list)) + list_add_tail(stripe_list, sc_list); + spin_unlock_irqrestore(lock, flags); + + wake_do_raid(RS(sc)); /* Wake myself. */ +} + +/* Pop a stripe off safely off the endio list. */ +static struct stripe *stripe_endio_pop(struct stripe_cache *sc) +{ + struct stripe *stripe; + spinlock_t *lock = sc->locks + LOCK_ENDIO; + + /* This runs in parallel with endio(). */ + spin_lock_irq(lock); + POP_LIST(LIST_ENDIO) + spin_unlock_irq(lock); + return stripe; +} +#undef POP_LIST + +/* + * Stripe cache locking functions + */ +/* Dummy lock function for single host RAID4+5. */ +static void *no_lock(sector_t key, enum dm_lock_type type) +{ + return &no_lock; +} + +/* Dummy unlock function for single host RAID4+5. */ +static void no_unlock(void *lock_handle) +{ +} + +/* No locking (for single host RAID 4+5). */ +static struct dm_raid45_locking_type locking_none = { + .lock = no_lock, + .unlock = no_unlock, +}; + +/* Lock a stripe (for clustering). */ +static int +stripe_lock(struct stripe *stripe, int rw, sector_t key) +{ + stripe->lock = RS(stripe->sc)->locking->lock(key, rw == READ ? DM_RAID45_SHARED : DM_RAID45_EX); + return stripe->lock ? 0 : -EPERM; +} + +/* Unlock a stripe (for clustering). */ +static void stripe_unlock(struct stripe *stripe) +{ + RS(stripe->sc)->locking->unlock(stripe->lock); + stripe->lock = NULL; +} + +/* Test io pending on stripe. */ +static int stripe_io_ref(struct stripe *stripe) +{ + return atomic_read(&stripe->io.pending); +} + +static void stripe_io_get(struct stripe *stripe) +{ + if (atomic_inc_return(&stripe->io.pending) == 1) + /* REMOVEME: statistics */ + atomic_inc(&stripe->sc->active_stripes); + else + BUG_ON(stripe_io_ref(stripe) < 0); +} + +static void stripe_io_put(struct stripe *stripe) +{ + if (atomic_dec_and_test(&stripe->io.pending)) { + if (unlikely(StripeRecover(stripe))) + /* Don't put recovery stripe on endio list. */ + wake_do_raid(RS(stripe->sc)); + else + /* Add regular stripe to endio list and wake daemon. */ + stripe_endio_push(stripe); + + /* REMOVEME: statistics */ + atomic_dec(&stripe->sc->active_stripes); + } else + BUG_ON(stripe_io_ref(stripe) < 0); +} + +/* Take stripe reference out. */ +static int stripe_get(struct stripe *stripe) +{ + int r; + struct list_head *lh = stripe->lists + LIST_LRU; + spinlock_t *lock = stripe->sc->locks + LOCK_LRU; + + /* Delete stripe from LRU (inactive) list if on. */ + spin_lock_irq(lock); + DEL_LIST(lh); + spin_unlock_irq(lock); + + BUG_ON(stripe_ref(stripe) < 0); + + /* Lock stripe on first reference */ + r = (atomic_inc_return(&stripe->cnt) == 1) ? + stripe_lock(stripe, WRITE, stripe->key) : 0; + + return r; +} +#undef DEL_LIST + +/* Return references on a chunk. */ +static int chunk_ref(struct stripe_chunk *chunk) +{ + return atomic_read(&chunk->cnt); +} + +/* Take out reference on a chunk. */ +static int chunk_get(struct stripe_chunk *chunk) +{ + return atomic_inc_return(&chunk->cnt); +} + +/* Drop reference on a chunk. */ +static void chunk_put(struct stripe_chunk *chunk) +{ + BUG_ON(atomic_dec_return(&chunk->cnt) < 0); +} + +/* + * Drop reference on a stripe. + * + * Move it to list of LRU stripes if zero. + */ +static void stripe_put(struct stripe *stripe) +{ + if (atomic_dec_and_test(&stripe->cnt)) { + BUG_ON(stripe_io_ref(stripe)); + stripe_unlock(stripe); + } else + BUG_ON(stripe_ref(stripe) < 0); +} + +/* Helper needed by for_each_io_dev(). */ +static void stripe_get_references(struct stripe *stripe, unsigned p) +{ + + /* + * Another one to reference the stripe in + * order to protect vs. LRU list moves. + */ + io_get(RS(stripe->sc)); /* Global io references. */ + stripe_get(stripe); + stripe_io_get(stripe); /* One for each chunk io. */ +} + +/* Helper for endio() to put all take references. */ +static void stripe_put_references(struct stripe *stripe) +{ + stripe_io_put(stripe); /* One for each chunk io. */ + stripe_put(stripe); + io_put(RS(stripe->sc)); +} + +/* + * Stripe cache functions. + */ +/* + * Invalidate all chunks (i.e. their pages) of a stripe. + * + * I only keep state for the whole chunk. + */ +static inline void stripe_chunk_invalidate(struct stripe_chunk *chunk) +{ + chunk->io.flags = 0; +} + +static void +stripe_chunks_invalidate(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) + stripe_chunk_invalidate(CHUNK(stripe, p)); +} + +/* Prepare stripe for (re)use. */ +static void stripe_invalidate(struct stripe *stripe) +{ + stripe->io.flags = 0; + stripe->idx.parity = stripe->idx.recover = -1; + stripe_chunks_invalidate(stripe); +} + +/* + * Allow io on all chunks of a stripe. + * If not set, IO will not occur; i.e. it's prohibited. + * + * Actual IO submission for allowed chunks depends + * on their !uptodate or dirty state. + */ +static void stripe_allow_io(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) + SetChunkIo(CHUNK(stripe, p)); +} + +/* Initialize a stripe. */ +static void stripe_init(struct stripe_cache *sc, struct stripe *stripe) +{ + unsigned i, p = RS(sc)->set.raid_devs; + + /* Work all io chunks. */ + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + + atomic_set(&chunk->cnt, 0); + chunk->stripe = stripe; + i = ARRAY_SIZE(chunk->bl); + while (i--) + bio_list_init(chunk->bl + i); + } + + stripe->sc = sc; + + + i = ARRAY_SIZE(stripe->lists); + while (i--) + INIT_LIST_HEAD(stripe->lists + i); + + stripe->io.size = RS(sc)->set.io_size; + atomic_set(&stripe->cnt, 0); + atomic_set(&stripe->io.pending, 0); + stripe_invalidate(stripe); +} + +/* Number of pages per chunk. */ +static inline unsigned chunk_pages(unsigned sectors) +{ + return dm_div_up(sectors, SECTORS_PER_PAGE); +} + +/* Number of pages per stripe. */ +static inline unsigned stripe_pages(struct raid_set *rs, unsigned io_size) +{ + return chunk_pages(io_size) * rs->set.raid_devs; +} + +/* Initialize part of page_list (recovery). */ +static void stripe_zero_pl_part(struct stripe *stripe, int p, + unsigned start, unsigned count) +{ + unsigned o = start / SECTORS_PER_PAGE, pages = chunk_pages(count); + /* Get offset into the page_list. */ + struct page_list *pl = pl_elem(PL(stripe, p), o); + + BUG_ON(!pl); + while (pl && pages--) { + BUG_ON(!pl->page); + memset(page_address(pl->page), 0, PAGE_SIZE); + pl = pl->next; + } +} + +/* Initialize parity chunk of stripe. */ +static void stripe_zero_chunk(struct stripe *stripe, int p) +{ + if (p > -1) + stripe_zero_pl_part(stripe, p, 0, stripe->io.size); +} + +/* Return dynamic stripe structure size. */ +static size_t stripe_size(struct raid_set *rs) +{ + return sizeof(struct stripe) + + rs->set.raid_devs * sizeof(struct stripe_chunk); +} + +/* Allocate a stripe and its memory object. */ +/* XXX adjust to cope with stripe cache and recovery stripe caches. */ +enum grow { SC_GROW, SC_KEEP }; +static struct stripe *stripe_alloc(struct stripe_cache *sc, + struct dm_mem_cache_client *mc, + enum grow grow) +{ + int r; + struct stripe *stripe; + + stripe = kmem_cache_zalloc(sc->kc.cache, GFP_KERNEL); + if (stripe) { + /* Grow the dm-mem-cache by one object. */ + if (grow == SC_GROW) { + r = dm_mem_cache_grow(mc, 1); + if (r) + goto err_free; + } + + stripe->obj = dm_mem_cache_alloc(mc); + if (!stripe->obj) + goto err_shrink; + + stripe_init(sc, stripe); + } + + return stripe; + +err_shrink: + if (grow == SC_GROW) + dm_mem_cache_shrink(mc, 1); +err_free: + kmem_cache_free(sc->kc.cache, stripe); + return NULL; +} + +/* + * Free a stripes memory object, shrink the + * memory cache and free the stripe itself. + */ +static void stripe_free(struct stripe *stripe, struct dm_mem_cache_client *mc) +{ + dm_mem_cache_free(mc, stripe->obj); + dm_mem_cache_shrink(mc, 1); + kmem_cache_free(stripe->sc->kc.cache, stripe); +} + +/* Free the recovery stripe. */ +static void stripe_recover_free(struct raid_set *rs) +{ + struct recover *rec = &rs->recover; + struct dm_mem_cache_client *mc; + + mc = rec->mem_cache_client; + rec->mem_cache_client = NULL; + if (mc) { + struct stripe *stripe; + + while (!list_empty(&rec->stripes)) { + stripe = list_first_entry(&rec->stripes, struct stripe, + lists[LIST_RECOVER]); + list_del(stripe->lists + LIST_RECOVER); + kfree(stripe->recover); + stripe_free(stripe, mc); + } + + dm_mem_cache_client_destroy(mc); + dm_io_client_destroy(rec->dm_io_client); + rec->dm_io_client = NULL; + } +} + +/* Grow stripe cache. */ +static int sc_grow(struct stripe_cache *sc, unsigned stripes, enum grow grow) +{ + int r = 0; + + /* Try to allocate this many (additional) stripes. */ + while (stripes--) { + struct stripe *stripe = + stripe_alloc(sc, sc->mem_cache_client, grow); + + if (likely(stripe)) { + stripe_lru_add(stripe); + atomic_inc(&sc->stripes); + } else { + r = -ENOMEM; + break; + } + } + + return r ? r : sc_hash_resize(sc); +} + +/* Shrink stripe cache. */ +static int sc_shrink(struct stripe_cache *sc, unsigned stripes) +{ + int r = 0; + + /* Try to get unused stripe from LRU list. */ + while (stripes--) { + struct stripe *stripe; + + stripe = stripe_lru_pop(sc); + if (stripe) { + /* An LRU stripe may never have ios pending! */ + BUG_ON(stripe_io_ref(stripe)); + BUG_ON(stripe_ref(stripe)); + atomic_dec(&sc->stripes); + /* Remove from hash if on before deletion. */ + stripe_hash_del(stripe); + stripe_free(stripe, sc->mem_cache_client); + } else { + r = -ENOENT; + break; + } + } + + /* Check if stats are still sane. */ + if (atomic_read(&sc->active_stripes_max) > + atomic_read(&sc->stripes)) + atomic_set(&sc->active_stripes_max, 0); + + if (r) + return r; + + return atomic_read(&sc->stripes) ? sc_hash_resize(sc) : 0; +} + +/* Create stripe cache and recovery. */ +static int sc_init(struct raid_set *rs, unsigned stripes) +{ + unsigned i, r, rstripes; + struct stripe_cache *sc = &rs->sc; + struct stripe *stripe; + struct recover *rec = &rs->recover; + struct mapped_device *md; + struct gendisk *disk; + + /* Initialize lists and locks. */ + i = ARRAY_SIZE(sc->lists); + while (i--) + INIT_LIST_HEAD(sc->lists + i); + + INIT_LIST_HEAD(&rec->stripes); + + /* Initialize endio and LRU list locks. */ + i = NR_LOCKS; + while (i--) + spin_lock_init(sc->locks + i); + + /* Initialize atomic variables. */ + atomic_set(&sc->stripes, 0); + atomic_set(&sc->stripes_to_set, 0); + atomic_set(&sc->active_stripes, 0); + atomic_set(&sc->active_stripes_max, 0); /* REMOVEME: statistics. */ + + /* + * We need a runtime unique # to suffix the kmem cache name + * because we'll have one for each active RAID set. + */ + md = dm_table_get_md(rs->ti->table); + disk = dm_disk(md); + sprintf(sc->kc.name, "%s-%d", TARGET, disk->first_minor); + dm_put(md); + sc->kc.cache = kmem_cache_create(sc->kc.name, stripe_size(rs), + 0, 0, NULL); + if (!sc->kc.cache) + return -ENOMEM; + + /* Create memory cache client context for RAID stripe cache. */ + sc->mem_cache_client = + dm_mem_cache_client_create(stripes, rs->set.raid_devs, + chunk_pages(rs->set.io_size)); + if (IS_ERR(sc->mem_cache_client)) + return PTR_ERR(sc->mem_cache_client); + + /* Create memory cache client context for RAID recovery stripe(s). */ + rstripes = rec->recovery_stripes; + rec->mem_cache_client = + dm_mem_cache_client_create(rstripes, rs->set.raid_devs, + chunk_pages(rec->io_size)); + if (IS_ERR(rec->mem_cache_client)) + return PTR_ERR(rec->mem_cache_client); + + /* Create dm-io client context for IO stripes. */ + sc->dm_io_client = + dm_io_client_create((stripes > 32 ? 32 : stripes) * + rs->set.raid_devs * + chunk_pages(rs->set.io_size)); + if (IS_ERR(sc->dm_io_client)) + return PTR_ERR(sc->dm_io_client); + + /* FIXME: intermingeled with stripe cache initialization. */ + /* Create dm-io client context for recovery stripes. */ + rec->dm_io_client = + dm_io_client_create(rstripes * rs->set.raid_devs * + chunk_pages(rec->io_size)); + if (IS_ERR(rec->dm_io_client)) + return PTR_ERR(rec->dm_io_client); + + /* Allocate stripes for set recovery. */ + while (rstripes--) { + stripe = stripe_alloc(sc, rec->mem_cache_client, SC_KEEP); + if (!stripe) + return -ENOMEM; + + stripe->recover = kzalloc(sizeof(*stripe->recover), GFP_KERNEL); + if (!stripe->recover) { + stripe_free(stripe, rec->mem_cache_client); + return -ENOMEM; + } + + SetStripeRecover(stripe); + stripe->io.size = rec->io_size; + list_add_tail(stripe->lists + LIST_RECOVER, &rec->stripes); + /* Don't add recovery stripes to LRU list! */ + } + + /* + * Allocate the stripe objetcs from the + * cache and add them to the LRU list. + */ + r = sc_grow(sc, stripes, SC_KEEP); + if (!r) + atomic_set(&sc->stripes_last, stripes); + + return r; +} + +/* Destroy the stripe cache. */ +static void sc_exit(struct stripe_cache *sc) +{ + struct raid_set *rs = RS(sc); + + if (sc->kc.cache) { + stripe_recover_free(rs); + BUG_ON(sc_shrink(sc, atomic_read(&sc->stripes))); + kmem_cache_destroy(sc->kc.cache); + sc->kc.cache = NULL; + + if (sc->mem_cache_client && !IS_ERR(sc->mem_cache_client)) + dm_mem_cache_client_destroy(sc->mem_cache_client); + + if (sc->dm_io_client && !IS_ERR(sc->dm_io_client)) + dm_io_client_destroy(sc->dm_io_client); + + hash_exit(&sc->hash); + } +} + +/* + * Calculate RAID address + * + * Delivers tuple with the index of the data disk holding the chunk + * in the set, the parity disks index and the start of the stripe + * within the address space of the set (used as the stripe cache hash key). + */ +/* thx MD. */ +static struct raid_address *raid_address(struct raid_set *rs, sector_t sector, + struct raid_address *addr) +{ + sector_t stripe, tmp; + + /* + * chunk_number = sector / chunk_size + * stripe_number = chunk_number / data_devs + * di = stripe % data_devs; + */ + stripe = sector >> rs->set.chunk_shift; + addr->di = sector_div(stripe, rs->set.data_devs); + + switch (rs->set.raid_type->level) { + case raid4: + addr->pi = rs->set.pi; + goto check_shift_di; + case raid5: + tmp = stripe; + addr->pi = sector_div(tmp, rs->set.raid_devs); + + switch (rs->set.raid_type->algorithm) { + case left_asym: /* Left asymmetric. */ + addr->pi = rs->set.data_devs - addr->pi; + case right_asym: /* Right asymmetric. */ +check_shift_di: + if (addr->di >= addr->pi) + addr->di++; + break; + case left_sym: /* Left symmetric. */ + addr->pi = rs->set.data_devs - addr->pi; + case right_sym: /* Right symmetric. */ + addr->di = (addr->pi + addr->di + 1) % + rs->set.raid_devs; + break; + case none: /* Ain't happen: RAID4 algorithm placeholder. */ + BUG(); + } + } + + /* + * Start offset of the stripes chunk on any single device of the RAID + * set, adjusted in case io size differs from chunk size. + */ + addr->key = (stripe << rs->set.chunk_shift) + + (sector & rs->set.io_inv_mask); + return addr; +} + +/* + * Copy data across between stripe pages and bio vectors. + * + * Pay attention to data alignment in stripe and bio pages. + */ +static void bio_copy_page_list(int rw, struct stripe *stripe, + struct page_list *pl, struct bio *bio) +{ + unsigned i, page_offset; + void *page_addr; + struct raid_set *rs = RS(stripe->sc); + struct bio_vec *bv; + + /* Get start page in page list for this sector. */ + i = (bio->bi_sector & rs->set.io_mask) / SECTORS_PER_PAGE; + pl = pl_elem(pl, i); + BUG_ON(!pl); + BUG_ON(!pl->page); + + page_addr = page_address(pl->page); + page_offset = to_bytes(bio->bi_sector & (SECTORS_PER_PAGE - 1)); + + /* Walk all segments and copy data across between bio_vecs and pages. */ + bio_for_each_segment(bv, bio, i) { + int len = bv->bv_len, size; + unsigned bio_offset = 0; + void *bio_addr = __bio_kmap_atomic(bio, i, KM_USER0); +redo: + size = (page_offset + len > PAGE_SIZE) ? + PAGE_SIZE - page_offset : len; + + if (rw == READ) + memcpy(bio_addr + bio_offset, + page_addr + page_offset, size); + else + memcpy(page_addr + page_offset, + bio_addr + bio_offset, size); + + page_offset += size; + if (page_offset == PAGE_SIZE) { + /* + * We reached the end of the chunk page -> + * need to refer to the next one to copy more data. + */ + len -= size; + if (len) { + /* Get next page. */ + pl = pl->next; + BUG_ON(!pl); + BUG_ON(!pl->page); + page_addr = page_address(pl->page); + page_offset = 0; + bio_offset += size; + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BIO_COPY_PL_NEXT); + goto redo; + } + } + + __bio_kunmap_atomic(bio_addr, KM_USER0); + } +} + +/* + * Xor optimization macros. + */ +/* Xor data pointer declaration and initialization macros. */ +#define DECLARE_2 unsigned long *d0 = data[0], *d1 = data[1] +#define DECLARE_3 DECLARE_2, *d2 = data[2] +#define DECLARE_4 DECLARE_3, *d3 = data[3] +#define DECLARE_5 DECLARE_4, *d4 = data[4] +#define DECLARE_6 DECLARE_5, *d5 = data[5] +#define DECLARE_7 DECLARE_6, *d6 = data[6] +#define DECLARE_8 DECLARE_7, *d7 = data[7] + +/* Xor unrole macros. */ +#define D2(n) d0[n] = d0[n] ^ d1[n] +#define D3(n) D2(n) ^ d2[n] +#define D4(n) D3(n) ^ d3[n] +#define D5(n) D4(n) ^ d4[n] +#define D6(n) D5(n) ^ d5[n] +#define D7(n) D6(n) ^ d6[n] +#define D8(n) D7(n) ^ d7[n] + +#define X_2(macro, offset) macro(offset); macro(offset + 1); +#define X_4(macro, offset) X_2(macro, offset); X_2(macro, offset + 2); +#define X_8(macro, offset) X_4(macro, offset); X_4(macro, offset + 4); +#define X_16(macro, offset) X_8(macro, offset); X_8(macro, offset + 8); +#define X_32(macro, offset) X_16(macro, offset); X_16(macro, offset + 16); +#define X_64(macro, offset) X_32(macro, offset); X_32(macro, offset + 32); + +/* Define a _xor_#chunks_#xors_per_run() function. */ +#define _XOR(chunks, xors_per_run) \ +static void _xor ## chunks ## _ ## xors_per_run(unsigned long **data) \ +{ \ + unsigned end = XOR_SIZE / sizeof(data[0]), i; \ + DECLARE_ ## chunks; \ +\ + for (i = 0; i < end; i += xors_per_run) { \ + X_ ## xors_per_run(D ## chunks, i); \ + } \ +} + +/* Define xor functions for 2 - 8 chunks and xors per run. */ +#define MAKE_XOR_PER_RUN(xors_per_run) \ + _XOR(2, xors_per_run); _XOR(3, xors_per_run); \ + _XOR(4, xors_per_run); _XOR(5, xors_per_run); \ + _XOR(6, xors_per_run); _XOR(7, xors_per_run); \ + _XOR(8, xors_per_run); + +MAKE_XOR_PER_RUN(8) /* Define _xor_*_8() functions. */ +MAKE_XOR_PER_RUN(16) /* Define _xor_*_16() functions. */ +MAKE_XOR_PER_RUN(32) /* Define _xor_*_32() functions. */ +MAKE_XOR_PER_RUN(64) /* Define _xor_*_64() functions. */ + +#define MAKE_XOR(xors_per_run) \ +struct { \ + void (*f)(unsigned long **); \ +} static xor_funcs ## xors_per_run[] = { \ + { NULL }, /* NULL pointers to optimize indexing in xor(). */ \ + { NULL }, \ + { _xor2_ ## xors_per_run }, \ + { _xor3_ ## xors_per_run }, \ + { _xor4_ ## xors_per_run }, \ + { _xor5_ ## xors_per_run }, \ + { _xor6_ ## xors_per_run }, \ + { _xor7_ ## xors_per_run }, \ + { _xor8_ ## xors_per_run }, \ +}; \ +\ +static void xor_ ## xors_per_run(unsigned n, unsigned long **data) \ +{ \ + /* Call respective function for amount of chunks. */ \ + xor_funcs ## xors_per_run[n].f(data); \ +} + +/* Define xor_8() - xor_64 functions. */ +MAKE_XOR(8) +MAKE_XOR(16) +MAKE_XOR(32) +MAKE_XOR(64) + +/* Maximum number of chunks, which can be xor'ed in one go. */ +#define XOR_CHUNKS_MAX (ARRAY_SIZE(xor_funcs8) - 1) + +static void xor_blocks_wrapper(unsigned n, unsigned long **data) +{ + BUG_ON(n < 2 || n > MAX_XOR_BLOCKS + 1); + xor_blocks(n - 1, XOR_SIZE, (void *) data[0], (void **) data + 1); +} + +struct xor_func { + xor_function_t f; + const char *name; +} static xor_funcs[] = { + { xor_8, "xor_8" }, + { xor_16, "xor_16" }, + { xor_32, "xor_32" }, + { xor_64, "xor_64" }, + { xor_blocks_wrapper, "xor_blocks" }, +}; + +/* + * Check, if chunk has to be xored in/out: + * + * o if writes are queued + * o if writes are merged + * o if stripe is to be reconstructed + * o if recovery stripe + */ +static inline int chunk_must_xor(struct stripe_chunk *chunk) +{ + if (ChunkUptodate(chunk)) { + BUG_ON(!bio_list_empty(BL_CHUNK(chunk, WRITE_QUEUED)) && + !bio_list_empty(BL_CHUNK(chunk, WRITE_MERGED))); + + if (!bio_list_empty(BL_CHUNK(chunk, WRITE_QUEUED)) || + !bio_list_empty(BL_CHUNK(chunk, WRITE_MERGED))) + return 1; + + if (StripeReconstruct(chunk->stripe) || + StripeRecover(chunk->stripe)) + return 1; + } + + return 0; +} + +/* + * Calculate crc. + * + * This indexes into the chunks of a stripe and their pages. + * + * All chunks will be xored into the indexed (@pi) + * chunk in maximum groups of xor.chunks. + * + */ +static void xor(struct stripe *stripe, unsigned pi, unsigned sector) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned max_chunks = rs->xor.chunks, n = 1, + o = sector / SECTORS_PER_PAGE, /* Offset into the page_list. */ + p = rs->set.raid_devs; + unsigned long **d = rs->data; + xor_function_t xor_f = rs->xor.f->f; + + BUG_ON(sector > stripe->io.size); + + /* Address of parity page to xor into. */ + d[0] = page_address(pl_elem(PL(stripe, pi), o)->page); + + while (p--) { + /* Preset pointers to data pages. */ + if (p != pi && chunk_must_xor(CHUNK(stripe, p))) + d[n++] = page_address(pl_elem(PL(stripe, p), o)->page); + + /* If max chunks -> xor. */ + if (n == max_chunks) { + xor_f(n, d); + n = 1; + } + } + + /* If chunks -> xor. */ + if (n > 1) + xor_f(n, d); +} + +/* Common xor loop through all stripe page lists. */ +static void common_xor(struct stripe *stripe, sector_t count, + unsigned off, unsigned pi) +{ + unsigned sector; + + BUG_ON(!count); + for (sector = off; sector < count; sector += SECTORS_PER_PAGE) + xor(stripe, pi, sector); + + /* Set parity page uptodate and clean. */ + chunk_set(CHUNK(stripe, pi), CLEAN); + atomic_inc(RS(stripe->sc)->stats + S_XORS); /* REMOVEME: statistics. */ +} + +/* + * Calculate parity sectors on intact stripes. + * + * Need to calculate raid address for recover stripe, because its + * chunk sizes differs and is typically larger than io chunk size. + */ +static void parity_xor(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned chunk_size = rs->set.chunk_size, io_size = stripe->io.size, + xor_size = chunk_size > io_size ? io_size : chunk_size; + sector_t off; + + /* This can be the recover stripe with a larger io size. */ + for (off = 0; off < io_size; off += xor_size) { + /* + * Recover stripe is likely bigger than regular io + * ones and has no precalculated parity disk index -> + * need to calculate RAID address. + */ + if (unlikely(StripeRecover(stripe))) { + struct raid_address addr; + + raid_address(rs, + (stripe->key + off) * rs->set.data_devs, + &addr); + stripe->idx.parity = addr.pi; + stripe_zero_pl_part(stripe, addr.pi, off, xor_size); + } + + common_xor(stripe, xor_size, off, stripe->idx.parity); + chunk_set(CHUNK(stripe, stripe->idx.parity), DIRTY); + } +} + +/* Reconstruct missing chunk. */ +static void stripe_reconstruct(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + int p = rs->set.raid_devs, pr = stripe->idx.recover; + + BUG_ON(pr < 0); + + /* Check if all but the chunk to be reconstructed are uptodate. */ + while (p--) + BUG_ON(p != pr && !ChunkUptodate(CHUNK(stripe, p))); + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (RSDegraded(rs) ? S_RECONSTRUCT_EI : + S_RECONSTRUCT_DEV)); + /* Zero chunk to be reconstructed. */ + stripe_zero_chunk(stripe, pr); + common_xor(stripe, stripe->io.size, 0, pr); + stripe->idx.recover = -1; +} + +/* + * Recovery io throttling + */ +/* Conditionally reset io counters. */ +static int recover_io_reset(struct raid_set *rs) +{ + unsigned long j = jiffies; + + /* Pay attention to jiffies overflows. */ + if (j > rs->recover.last_jiffies + HZ / 20 || + j < rs->recover.last_jiffies) { + atomic_set(rs->recover.io_count + IO_WORK, 0); + atomic_set(rs->recover.io_count + IO_RECOVER, 0); + rs->recover.last_jiffies = j; + return 1; + } + + return 0; +} + +/* Count ios. */ +static void recover_io_count(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + + recover_io_reset(rs); + atomic_inc(rs->recover.io_count + + (StripeRecover(stripe) ? IO_RECOVER : IO_WORK)); +} + +/* Try getting a stripe either from the hash or from the LRU list. */ +static struct stripe *stripe_find(struct raid_set *rs, + struct raid_address *addr) +{ + int r; + struct stripe_cache *sc = &rs->sc; + struct stripe *stripe; + + /* Try stripe from hash. */ + stripe = stripe_lookup(sc, addr->key); + if (stripe) { + r = stripe_get(stripe); + if (r) + goto get_lock_failed; + + atomic_inc(rs->stats + S_HITS_1ST); /* REMOVEME: statistics. */ + } else { + /* Not in hash -> try to get an LRU stripe. */ + stripe = stripe_lru_pop(sc); + if (stripe) { + /* + * An LRU stripe may not be referenced + * and may never have ios pending! + */ + BUG_ON(stripe_ref(stripe)); + BUG_ON(stripe_io_ref(stripe)); + + /* Remove from hash if on before reuse. */ + stripe_hash_del(stripe); + + /* Invalidate before reinserting with changed key. */ + stripe_invalidate(stripe); + + stripe->key = addr->key; + stripe->region = dm_rh_sector_to_region(rs->recover.rh, + addr->key); + stripe->idx.parity = addr->pi; + r = stripe_get(stripe); + if (r) + goto get_lock_failed; + + /* Insert stripe into the stripe hash. */ + stripe_insert(&sc->hash, stripe); + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_INSCACHE); + } + } + + return stripe; + +get_lock_failed: + stripe_put(stripe); + return NULL; +} + +/* + * Process end io + * + * I need to do it here because I can't in interrupt + */ +/* End io all bios on a bio list. */ +static void bio_list_endio(struct stripe *stripe, struct bio_list *bl, + int p, int error) +{ + struct raid_set *rs = RS(stripe->sc); + struct bio *bio; + struct page_list *pl = PL(stripe, p); + struct stripe_chunk *chunk = CHUNK(stripe, p); + + /* Update region counters. */ + while ((bio = bio_list_pop(bl))) { + if (bio_data_dir(bio) == WRITE) + /* Drop io pending count for any writes. */ + dm_rh_dec(rs->recover.rh, stripe->region); + else if (!error) + /* Copy data accross. */ + bio_copy_page_list(READ, stripe, pl, bio); + + bio_endio(bio, error); + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (bio_data_dir(bio) == READ ? + S_BIOS_ENDIO_READ : S_BIOS_ENDIO_WRITE)); + + chunk_put(chunk); + stripe_put(stripe); + io_put(rs); /* Wake any suspend waiters on last bio. */ + } +} + +/* + * End io all reads/writes on a stripe copying + * read data accross from stripe to bios and + * decrementing region counters for writes. + * + * Processing of ios depeding on state: + * o no chunk error -> endio ok + * o degraded: + * - chunk error and read -> ignore to be requeued + * - chunk error and write -> endio ok + * o dead (more than parity_devs failed) and chunk_error-> endio failed + */ +static void stripe_endio(int rw, struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p = rs->set.raid_devs; + int write = (rw != READ); + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct bio_list *bl; + + BUG_ON(ChunkLocked(chunk)); + + bl = BL_CHUNK(chunk, rw); + if (bio_list_empty(bl)) + continue; + + if (unlikely(ChunkError(chunk) || !ChunkUptodate(chunk))) { + /* RAID set dead. */ + if (unlikely(RSDead(rs))) + bio_list_endio(stripe, bl, p, -EIO); + /* RAID set degraded. */ + else if (write) + bio_list_endio(stripe, bl, p, 0); + } else { + BUG_ON(!RSDegraded(rs) && ChunkDirty(chunk)); + bio_list_endio(stripe, bl, p, 0); + } + } +} + +/* Fail all ios hanging off all bio lists of a stripe. */ +static void stripe_fail_io(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p = rs->set.raid_devs; + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + int i = ARRAY_SIZE(chunk->bl); + + /* Fail all bios on all bio lists of the stripe. */ + while (i--) { + struct bio_list *bl = chunk->bl + i; + + if (!bio_list_empty(bl)) + bio_list_endio(stripe, bl, p, -EIO); + } + } + + /* Put stripe on LRU list. */ + BUG_ON(stripe_io_ref(stripe)); + BUG_ON(stripe_ref(stripe)); +} + +/* Unlock all required chunks. */ +static void stripe_chunks_unlock(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + struct stripe_chunk *chunk; + + while (p--) { + chunk = CHUNK(stripe, p); + + if (TestClearChunkUnlock(chunk)) + ClearChunkLocked(chunk); + } +} + +/* + * Queue reads and writes to a stripe by hanging + * their bios off the stripesets read/write lists. + */ +static int stripe_queue_bio(struct raid_set *rs, struct bio *bio, + struct bio_list *reject) +{ + struct raid_address addr; + struct stripe *stripe; + + stripe = stripe_find(rs, raid_address(rs, bio->bi_sector, &addr)); + if (stripe) { + int r = 0, rw = bio_data_dir(bio); + + /* Distinguish reads and writes. */ + bio_list_add(BL(stripe, addr.di, rw), bio); + + if (rw == READ) + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BIOS_ADDED_READ); + else { + /* Inrement pending write count on region. */ + dm_rh_inc(rs->recover.rh, stripe->region); + r = 1; + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BIOS_ADDED_WRITE); + } + + /* + * Put on io (flush) list in case of + * initial bio queued to chunk. + */ + if (chunk_get(CHUNK(stripe, addr.di)) == 1) + stripe_flush_add(stripe); + + return r; + } + + /* Got no stripe from cache or failed to lock it -> reject bio. */ + bio_list_add(reject, bio); + atomic_inc(rs->stats + S_IOS_POST); /* REMOVEME: statistics. */ + return 0; +} + +/* + * Handle all stripes by handing them to the daemon, because we can't + * map their chunk pages to copy the data in interrupt context. + * + * We don't want to handle them here either, while interrupts are disabled. + */ + +/* Read/write endio function for dm-io (interrupt context). */ +static void endio(unsigned long error, void *context) +{ + struct stripe_chunk *chunk = context; + + if (unlikely(error)) { + chunk_set(chunk, ERROR); + /* REMOVEME: statistics. */ + atomic_inc(RS(chunk->stripe->sc)->stats + S_STRIPE_ERROR); + } else + chunk_set(chunk, CLEAN); + + /* + * For recovery stripes, I need to reset locked locked + * here, because those aren't processed in do_endios(). + */ + if (unlikely(StripeRecover(chunk->stripe))) + ClearChunkLocked(chunk); + else + SetChunkUnlock(chunk); + + /* Indirectly puts stripe on cache's endio list via stripe_io_put(). */ + stripe_put_references(chunk->stripe); +} + +/* Read/Write a chunk asynchronously. */ +static void stripe_chunk_rw(struct stripe *stripe, unsigned p) +{ + struct stripe_cache *sc = stripe->sc; + struct raid_set *rs = RS(sc); + struct dm_mem_cache_object *obj = stripe->obj + p; + struct page_list *pl = obj->pl; + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct raid_dev *dev = rs->dev + p; + struct dm_io_region io = { + .bdev = dev->dev->bdev, + .sector = stripe->key, + .count = stripe->io.size, + }; + struct dm_io_request control = { + .bi_rw = ChunkDirty(chunk) ? WRITE : READ, + .mem = { + .type = DM_IO_PAGE_LIST, + .ptr.pl = pl, + .offset = 0, + }, + .notify = { + .fn = endio, + .context = chunk, + }, + .client = StripeRecover(stripe) ? rs->recover.dm_io_client : + sc->dm_io_client, + }; + + BUG_ON(ChunkLocked(chunk)); + BUG_ON(!ChunkUptodate(chunk) && ChunkDirty(chunk)); + BUG_ON(ChunkUptodate(chunk) && !ChunkDirty(chunk)); + + /* + * Don't rw past end of device, which can happen, because + * typically sectors_per_dev isn't divisible by io_size. + */ + if (unlikely(io.sector + io.count > rs->set.sectors_per_dev)) + io.count = rs->set.sectors_per_dev - io.sector; + + BUG_ON(!io.count); + io.sector += dev->start; /* Add . */ + if (RSRecover(rs)) + recover_io_count(stripe); /* Recovery io accounting. */ + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (ChunkDirty(chunk) ? S_DM_IO_WRITE : + S_DM_IO_READ)); + SetChunkLocked(chunk); + SetDevIoQueued(dev); + BUG_ON(dm_io(&control, 1, &io, NULL)); +} + +/* + * Write dirty or read not uptodate page lists of a stripe. + */ +static int stripe_chunks_rw(struct stripe *stripe) +{ + int r; + struct raid_set *rs = RS(stripe->sc); + + /* + * Increment the pending count on the stripe + * first, so that we don't race in endio(). + * + * An inc (IO) is needed for any chunk unless !ChunkIo(chunk): + * + * o not uptodate + * o dirtied by writes merged + * o dirtied by parity calculations + */ + r = for_each_io_dev(stripe, stripe_get_references); + if (r) { + /* Io needed: chunks are either not uptodate or dirty. */ + int max; /* REMOVEME: */ + struct stripe_cache *sc = &rs->sc; + + /* Submit actual io. */ + for_each_io_dev(stripe, stripe_chunk_rw); + + /* REMOVEME: statistics */ + max = sc_active(sc); + if (atomic_read(&sc->active_stripes_max) < max) + atomic_set(&sc->active_stripes_max, max); + + atomic_inc(rs->stats + S_FLUSHS); + /* END REMOVEME: statistics */ + } + + return r; +} + +/* Merge in all writes hence dirtying respective chunks. */ +static void stripe_merge_writes(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct bio_list *write = BL_CHUNK(chunk, WRITE_QUEUED); + + if (!bio_list_empty(write)) { + struct bio *bio; + struct page_list *pl = stripe->obj[p].pl; + + /* + * We can play with the lists without holding a lock, + * because it is just us accessing them anyway. + */ + bio_list_for_each(bio, write) + bio_copy_page_list(WRITE, stripe, pl, bio); + + bio_list_merge(BL_CHUNK(chunk, WRITE_MERGED), write); + bio_list_init(write); + chunk_set(chunk, DIRTY); + } + } +} + +/* Queue all writes to get merged. */ +static int stripe_queue_writes(struct stripe *stripe) +{ + int r = 0; + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct bio_list *write = BL_CHUNK(chunk, WRITE); + + if (!bio_list_empty(write)) { + bio_list_merge(BL_CHUNK(chunk, WRITE_QUEUED), write); + bio_list_init(write); +SetChunkIo(chunk); + r = 1; + } + } + + return r; +} + + +/* Check, if a chunk gets completely overwritten. */ +static int stripe_check_chunk_overwrite(struct stripe *stripe, unsigned p) +{ + unsigned sectors = 0; + struct bio *bio; + struct bio_list *bl = BL(stripe, p, WRITE_QUEUED); + + bio_list_for_each(bio, bl) + sectors += bio_sectors(bio); + + BUG_ON(sectors > RS(stripe->sc)->set.io_size); + return sectors == RS(stripe->sc)->set.io_size; +} + +/* + * Avoid io on broken/reconstructed drive in order to + * reconstruct date on endio. + * + * (*1*) We set StripeReconstruct() in here, so that _do_endios() + * will trigger a reconstruct call before resetting it. + */ +static int stripe_chunk_set_io_flags(struct stripe *stripe, int pr) +{ + struct stripe_chunk *chunk = CHUNK(stripe, pr); + + /* + * Allow io on all chunks but the indexed one, + * because we're either degraded or prohibit it + * on the one for later reconstruction. + */ + /* Includes ClearChunkIo(), ClearChunkUptodate(). */ + stripe_chunk_invalidate(chunk); + stripe->idx.recover = pr; + SetStripeReconstruct(stripe); + + /* REMOVEME: statistics. */ + atomic_inc(RS(stripe->sc)->stats + S_PROHIBITCHUNKIO); + return -EPERM; +} + +/* Chunk locked/uptodate and device failed tests. */ +static struct stripe_chunk * +stripe_chunk_check(struct stripe *stripe, unsigned p, unsigned *chunks_uptodate) +{ + struct raid_set *rs = RS(stripe->sc); + struct stripe_chunk *chunk = CHUNK(stripe, p); + + /* Can't access active chunks. */ + if (ChunkLocked(chunk)) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_CHUNK_LOCKED); + return NULL; + } + + /* Can't access broken devive. */ + if (ChunkError(chunk) || DevFailed(rs->dev + p)) + return NULL; + + /* Can access uptodate chunks. */ + if (ChunkUptodate(chunk)) { + (*chunks_uptodate)++; + return NULL; + } + + return chunk; +} + +/* + * Degraded/reconstruction mode. + * + * Check stripe state to figure which chunks don't need IO. + * + * Returns 0 for fully operational, -EPERM for degraded/resynchronizing. + */ +static int stripe_check_reconstruct(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + + if (RSDead(rs)) { + ClearStripeReconstruct(stripe); + ClearStripeReconstructed(stripe); + stripe_allow_io(stripe); + return 0; + } + + /* Avoid further reconstruction setting, when already set. */ + if (StripeReconstruct(stripe)) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_RECONSTRUCT_SET); + return -EBUSY; + } + + /* Initially allow io on all chunks. */ + stripe_allow_io(stripe); + + /* Return if stripe is already reconstructed. */ + if (StripeReconstructed(stripe)) { + atomic_inc(rs->stats + S_RECONSTRUCTED); + return 0; + } + + /* + * Degraded/reconstruction mode (device failed) -> + * avoid io on the failed device. + */ + if (unlikely(RSDegraded(rs))) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_DEGRADED); + /* Allow IO on all devices but the dead one. */ + BUG_ON(rs->set.ei < 0); + return stripe_chunk_set_io_flags(stripe, rs->set.ei); + } else { + int sync, pi = dev_for_parity(stripe, &sync); + + /* + * Reconstruction mode (ie. a particular (replaced) device or + * some (rotating) parity chunk is being resynchronized) -> + * o make sure all needed chunks are read in + * o writes are allowed to go through + */ + if (!sync) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_NOSYNC); + /* Allow IO on all devs but the one to reconstruct. */ + return stripe_chunk_set_io_flags(stripe, pi); + } + } + + return 0; +} + +/* + * Check, if stripe is ready to merge writes. + * I.e. if all chunks present to allow to merge bios. + * + * We prohibit io on: + * + * o chunks without bios + * o chunks which get completely written over + */ +static int stripe_merge_possible(struct stripe *stripe, int nosync) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned chunks_overwrite = 0, chunks_prohibited = 0, + chunks_uptodate = 0, p = rs->set.raid_devs; + + /* Walk all chunks. */ + while (p--) { + struct stripe_chunk *chunk; + + /* Prohibit io on broken devices. */ + if (DevFailed(rs->dev + p)) { + chunk = CHUNK(stripe, p); + goto prohibit_io; + } + + /* We can't optimize any further if no chunk. */ + chunk = stripe_chunk_check(stripe, p, &chunks_uptodate); + if (!chunk || nosync) + continue; + + /* + * We have a chunk, which is not uptodate. + * + * If this is not parity and we don't have + * reads queued, we can optimize further. + */ + if (p != stripe->idx.parity && + bio_list_empty(BL_CHUNK(chunk, READ)) && + bio_list_empty(BL_CHUNK(chunk, WRITE_MERGED))) { + if (bio_list_empty(BL_CHUNK(chunk, WRITE_QUEUED))) + goto prohibit_io; + else if (RSCheckOverwrite(rs) && + stripe_check_chunk_overwrite(stripe, p)) + /* Completely overwritten chunk. */ + chunks_overwrite++; + } + + /* Allow io for chunks with bios and overwritten ones. */ + SetChunkIo(chunk); + continue; + +prohibit_io: + /* No io for broken devices or for chunks w/o bios. */ + ClearChunkIo(chunk); + chunks_prohibited++; + /* REMOVEME: statistics. */ + atomic_inc(RS(stripe->sc)->stats + S_PROHIBITCHUNKIO); + } + + /* All data chunks will get written over. */ + if (chunks_overwrite == rs->set.data_devs) + atomic_inc(rs->stats + S_OVERWRITE); /* REMOVEME: statistics.*/ + else if (chunks_uptodate + chunks_prohibited < rs->set.raid_devs) { + /* We don't have enough chunks to merge. */ + atomic_inc(rs->stats + S_CANT_MERGE); /* REMOVEME: statistics.*/ + return -EPERM; + } + + /* + * If we have all chunks up to date or overwrite them, we + * just zero the parity chunk and let stripe_rw() recreate it. + */ + if (chunks_uptodate == rs->set.raid_devs || + chunks_overwrite == rs->set.data_devs) { + stripe_zero_chunk(stripe, stripe->idx.parity); + BUG_ON(StripeReconstruct(stripe)); + SetStripeReconstruct(stripe); /* Enforce xor in caller. */ + } else { + /* + * With less chunks, we xor parity out. + * + * (*4*) We rely on !StripeReconstruct() in chunk_must_xor(), + * so that only chunks with queued or merged writes + * are being xored. + */ + parity_xor(stripe); + } + + /* + * We do have enough chunks to merge. + * All chunks are uptodate or get written over. + */ + atomic_inc(rs->stats + S_CAN_MERGE); /* REMOVEME: statistics. */ + return 0; +} + +/* + * Avoid reading chunks in case we're fully operational. + * + * We prohibit io on any chunks without bios but the parity chunk. + */ +static void stripe_avoid_reads(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned dummy = 0, p = rs->set.raid_devs; + + /* Walk all chunks. */ + while (p--) { + struct stripe_chunk *chunk = + stripe_chunk_check(stripe, p, &dummy); + + if (!chunk) + continue; + + /* If parity or any bios pending -> allow io. */ + if (chunk_ref(chunk) || p == stripe->idx.parity) + SetChunkIo(chunk); + else { + ClearChunkIo(chunk); + /* REMOVEME: statistics. */ + atomic_inc(RS(stripe->sc)->stats + S_PROHIBITCHUNKIO); + } + } +} + +/* + * Read/write a stripe. + * + * All stripe read/write activity goes through this function + * unless recovery, which has to call stripe_chunk_rw() directly. + * + * Make sure we don't try already merged stripes in order + * to avoid data corruption. + * + * Check the state of the RAID set and if degraded (or + * resynchronizing for reads), read in all other chunks but + * the one on the dead/resynchronizing device in order to be + * able to reconstruct the missing one in _do_endios(). + * + * Can be called on active stripes in order + * to dispatch new io on inactive chunks. + * + * States to cover: + * o stripe to read and/or write + * o stripe with error to reconstruct + */ +static void stripe_rw(struct stripe *stripe) +{ + int nosync, r; + struct raid_set *rs = RS(stripe->sc); + + /* + * Check, if a chunk needs to be reconstructed + * because of a degraded set or a region out of sync. + */ + nosync = stripe_check_reconstruct(stripe); + switch (nosync) { + case -EBUSY: + return; /* Wait for stripe reconstruction to finish. */ + case -EPERM: + goto io; + } + + /* + * If we don't have merged writes pending, we can schedule + * queued writes to be merged next without corrupting data. + */ + if (!StripeMerged(stripe)) { + r = stripe_queue_writes(stripe); + if (r) + /* Writes got queued -> flag RBW. */ + SetStripeRBW(stripe); + } + + /* + * Merge all writes hanging off uptodate/overwritten + * chunks of the stripe. + */ + if (StripeRBW(stripe)) { + r = stripe_merge_possible(stripe, nosync); + if (!r) { /* Merge possible. */ + struct stripe_chunk *chunk; + + /* + * I rely on valid parity in order + * to xor a fraction of chunks out + * of parity and back in. + */ + stripe_merge_writes(stripe); /* Merge writes in. */ + parity_xor(stripe); /* Update parity. */ + ClearStripeReconstruct(stripe); /* Reset xor enforce. */ + SetStripeMerged(stripe); /* Writes merged. */ + ClearStripeRBW(stripe); /* Disable RBW. */ + + /* + * REMOVEME: sanity check on parity chunk + * states after writes got merged. + */ + chunk = CHUNK(stripe, stripe->idx.parity); + BUG_ON(ChunkLocked(chunk)); + BUG_ON(!ChunkUptodate(chunk)); + BUG_ON(!ChunkDirty(chunk)); + BUG_ON(!ChunkIo(chunk)); + } + } else if (!nosync && !StripeMerged(stripe)) + /* Read avoidance if not degraded/resynchronizing/merged. */ + stripe_avoid_reads(stripe); + +io: + /* Now submit any reads/writes for non-uptodate or dirty chunks. */ + r = stripe_chunks_rw(stripe); + if (!r) { + /* + * No io submitted because of chunk io + * prohibited or locked chunks/failed devices + * -> push to end io list for processing. + */ + stripe_endio_push(stripe); + atomic_inc(rs->stats + S_NO_RW); /* REMOVEME: statistics. */ + } +} + +/* + * Recovery functions + */ +/* Read a stripe off a raid set for recovery. */ +static int stripe_recover_read(struct stripe *stripe, int pi) +{ + BUG_ON(stripe_io_ref(stripe)); + + /* Invalidate all chunks so that they get read in. */ + stripe_chunks_invalidate(stripe); + stripe_allow_io(stripe); /* Allow io on all recovery chunks. */ + + /* + * If we are reconstructing a perticular device, we can avoid + * reading the respective chunk in, because we're going to + * reconstruct it anyway. + * + * We can't do that for resynchronization of rotating parity, + * because the recovery stripe chunk size is typically larger + * than the sets chunk size. + */ + if (pi > -1) + ClearChunkIo(CHUNK(stripe, pi)); + + return stripe_chunks_rw(stripe); +} + +/* Write a stripe to a raid set for recovery. */ +static int stripe_recover_write(struct stripe *stripe, int pi) +{ + BUG_ON(stripe_io_ref(stripe)); + + /* + * If this is a reconstruct of a particular device, then + * reconstruct the respective chunk, else create parity chunk. + */ + if (pi > -1) { + stripe_zero_chunk(stripe, pi); + common_xor(stripe, stripe->io.size, 0, pi); + chunk_set(CHUNK(stripe, pi), DIRTY); + } else + parity_xor(stripe); + + return stripe_chunks_rw(stripe); +} + +/* Read/write a recovery stripe. */ +static int stripe_recover_rw(struct stripe *stripe) +{ + int r = 0, sync = 0; + + /* Read/write flip-flop. */ + if (TestClearStripeRBW(stripe)) { + SetStripeMerged(stripe); + stripe->key = stripe->recover->pos; + r = stripe_recover_read(stripe, dev_for_parity(stripe, &sync)); + BUG_ON(!r); + } else if (TestClearStripeMerged(stripe)) { + r = stripe_recover_write(stripe, dev_for_parity(stripe, &sync)); + BUG_ON(!r); + } + + BUG_ON(sync); + return r; +} + +/* Recover bandwidth available ?. */ +static int recover_bandwidth(struct raid_set *rs) +{ + int r, work; + + /* On reset or when bios delayed -> allow recovery. */ + r = recover_io_reset(rs); + if (r || RSBandwidth(rs)) + goto out; + + work = atomic_read(rs->recover.io_count + IO_WORK); + if (work) { + /* Pay attention to larger recover stripe size. */ + int recover = atomic_read(rs->recover.io_count + IO_RECOVER) * + rs->recover.io_size / rs->set.io_size; + + /* + * Don't use more than given bandwidth + * of the work io for recovery. + */ + if (recover > work / rs->recover.bandwidth_work) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_NO_BANDWIDTH); + return 0; + } + } + +out: + atomic_inc(rs->stats + S_BANDWIDTH); /* REMOVEME: statistics. */ + return 1; +} + +/* Try to get a region to recover. */ +static int stripe_recover_get_region(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + struct recover *rec = &rs->recover; + struct recover_addr *addr = stripe->recover; + struct dm_dirty_log *dl = rec->dl; + struct dm_rh_client *rh = rec->rh; + + BUG_ON(!dl); + BUG_ON(!rh); + + /* Return, that we have region first to finish it during suspension. */ + if (addr->reg) + return 1; + + if (RSSuspend(rs)) + return -EPERM; + + if (dl->type->get_sync_count(dl) >= rec->nr_regions) + return -ENOENT; + + /* If we don't have enough bandwidth, we don't proceed recovering. */ + if (!recover_bandwidth(rs)) + return -EAGAIN; + + /* Start quiescing a region. */ + dm_rh_recovery_prepare(rh); + addr->reg = dm_rh_recovery_start(rh); + if (!addr->reg) + return -EAGAIN; + + addr->pos = dm_rh_region_to_sector(rh, dm_rh_get_region_key(addr->reg)); + addr->end = addr->pos + dm_rh_get_region_size(rh); + + /* + * Take one global io reference out for the + * whole region, which is going to be released + * when the region is completely done with. + */ + io_get(rs); + return 0; +} + +/* Update region hash state. */ +enum recover_type { REC_FAILURE = 0, REC_SUCCESS = 1 }; +static void recover_rh_update(struct stripe *stripe, enum recover_type success) +{ + struct recover_addr *addr = stripe->recover; + struct raid_set *rs = RS(stripe->sc); + struct recover *rec = &rs->recover; + + if (!addr->reg) { + DMERR("%s- Called w/o region", __func__); + return; + } + + dm_rh_recovery_end(addr->reg, success); + if (success) + rec->nr_regions_recovered++; + + addr->reg = NULL; + + /* + * Completely done with this region -> + * release the 1st io reference. + */ + io_put(rs); +} + +/* Set start of recovery state. */ +static void set_start_recovery(struct raid_set *rs) +{ + /* Initialize recovery. */ + rs->recover.start_jiffies = jiffies; + rs->recover.end_jiffies = 0; +} + +/* Set end of recovery state. */ +static void set_end_recovery(struct raid_set *rs) +{ + ClearRSRecover(rs); + rs->set.dev_to_init = -1; + + /* Check for jiffies overrun. */ + rs->recover.end_jiffies = jiffies; + if (rs->recover.end_jiffies < rs->recover.start_jiffies) + rs->recover.end_jiffies = ~0; +} + +/* Handle recovery on one recovery stripe. */ +static int _do_recovery(struct stripe *stripe) +{ + int r; + struct raid_set *rs = RS(stripe->sc); + struct recover_addr *addr = stripe->recover; + + /* If recovery is active -> return. */ + if (stripe_io_ref(stripe)) + return 1; + + /* IO error is fatal for recovery -> stop it. */ + if (unlikely(StripeError(stripe))) + goto err; + + /* Recovery end required. */ + if (!RSRecover(rs)) + goto err; + + /* Get a region to recover. */ + r = stripe_recover_get_region(stripe); + switch (r) { + case 0: /* Got a new region: flag initial read before write. */ + SetStripeRBW(stripe); + case 1: /* Have a region in the works. */ + break; + case -EAGAIN: + /* No bandwidth/quiesced region yet, try later. */ + if (!io_ref(rs)) + wake_do_raid_delayed(rs, HZ / 4); + case -EPERM: + /* Suspend. */ + return 1; + case -ENOENT: /* No more regions to recover. */ + schedule_work(&rs->io.ws_do_table_event); + return 0; + default: + BUG(); + } + + /* Read/write a recover stripe. */ + r = stripe_recover_rw(stripe); + if (r) + /* IO initiated. */ + return 1; + + /* Read and write finished-> update recovery position within region. */ + addr->pos += stripe->io.size; + + /* If we're at end of region, update region hash. */ + if (addr->pos >= addr->end || + addr->pos >= rs->set.sectors_per_dev) + recover_rh_update(stripe, REC_SUCCESS); + else + /* Prepare to read next region segment. */ + SetStripeRBW(stripe); + + /* Schedule myself for another round... */ + wake_do_raid(rs); + return 1; + +err: + /* FIXME: rather try recovering other regions on error? */ + rs_check_degrade(stripe); + recover_rh_update(stripe, REC_FAILURE); + + /* Check state of partially recovered array. */ + if (RSDegraded(rs) && !RSDead(rs) && + rs->set.dev_to_init != -1 && + rs->set.ei != rs->set.dev_to_init) + /* Broken drive != drive to recover -> FATAL. */ + SetRSDead(rs); + + if (StripeError(stripe)) { + char buf[BDEVNAME_SIZE]; + + DMERR("stopping recovery due to " + "ERROR on /dev/%s, stripe at offset %llu", + bdevname(rs->dev[rs->set.ei].dev->bdev, buf), + (unsigned long long) stripe->key); + + } + + /* Make sure, that all quiesced regions get released. */ + while (addr->reg) { + dm_rh_recovery_end(addr->reg, -EIO); + addr->reg = dm_rh_recovery_start(rs->recover.rh); + } + + return 0; +} + +/* Called by main io daemon to recover regions. */ +static void do_recovery(struct raid_set *rs) +{ + if (RSRecover(rs)) { + int r = 0; + struct stripe *stripe; + + list_for_each_entry(stripe, &rs->recover.stripes, + lists[LIST_RECOVER]) + r += _do_recovery(stripe); + + if (!r) { + set_end_recovery(rs); + stripe_recover_free(rs); + } + } +} + +/* + * END recovery functions + */ + +/* End io process all stripes handed in by endio() callback. */ +static void _do_endios(struct raid_set *rs, struct stripe *stripe, + struct list_head *flush_list) +{ + /* First unlock all required chunks. */ + stripe_chunks_unlock(stripe); + + /* + * If an io error on a stripe occured, degrade the RAID set + * and try to endio as many bios as possible. If any bios can't + * be endio processed, requeue the stripe (stripe_ref() != 0). + */ + if (TestClearStripeError(stripe)) { + /* + * FIXME: if read, rewrite the failed chunk after reconstruction + * in order to trigger disk bad sector relocation. + */ + rs_check_degrade(stripe); /* Resets ChunkError(). */ + ClearStripeReconstruct(stripe); + ClearStripeReconstructed(stripe); + } + + /* Got to reconstruct a missing chunk. */ + if (StripeReconstruct(stripe)) { + /* + * (*2*) We use StripeReconstruct() to allow for + * all chunks to be xored into the reconstructed + * one (see chunk_must_xor()). + */ + stripe_reconstruct(stripe); + + /* + * (*3*) Now we reset StripeReconstruct() and flag + * StripeReconstructed() to show to stripe_rw(), + * that we have reconstructed a missing chunk. + */ + ClearStripeReconstruct(stripe); + SetStripeReconstructed(stripe); + + /* FIXME: reschedule to be written in case of read. */ + // if (!StripeRBW(stripe)) { + // chunk_set(CHUNK(stripe, pr), DIRTY); + // stripe_chunks_rw(stripe); + // } + } + + /* + * Now that we eventually got a complete stripe, we + * can process the rest of the end ios on reads. + */ + stripe_endio(READ, stripe); + + /* End io all merged writes. */ + if (TestClearStripeMerged(stripe)) + stripe_endio(WRITE_MERGED, stripe); + + /* If RAID set is dead -> fail any ios to dead drives. */ + if (RSDead(rs)) { + DMERR_LIMIT("RAID set dead: failing ios to dead devices"); + stripe_fail_io(stripe); + } + + /* + * We have stripe references still, + * beacuse of read befeore writes or IO errors -> + * got to put on flush list for processing. + */ + if (stripe_ref(stripe)) { + BUG_ON(!list_empty(stripe->lists + LIST_LRU)); + list_add_tail(stripe->lists + LIST_FLUSH, flush_list); + atomic_inc(rs->stats + S_REQUEUE); /* REMOVEME: statistics. */ + } else + stripe_lru_add(stripe); +} + +/* Pop any endio stripes off of the endio list and belabour them. */ +static void do_endios(struct raid_set *rs) +{ + struct stripe_cache *sc = &rs->sc; + struct stripe *stripe; + /* IO flush list for sorted requeued stripes. */ + struct list_head flush_list; + + INIT_LIST_HEAD(&flush_list); + + while ((stripe = stripe_endio_pop(sc))) { + /* Avoid endio on stripes with newly io'ed chunks. */ + if (!stripe_io_ref(stripe)) + _do_endios(rs, stripe, &flush_list); + } + + /* + * Insert any requeued stripes in the proper + * order at the beginning of the io (flush) list. + */ + list_splice(&flush_list, sc->lists + LIST_FLUSH); +} + +/* Flush any stripes on the io list. */ +static void do_flush(struct raid_set *rs) +{ + struct stripe *stripe; + + while ((stripe = stripe_io_pop(&rs->sc))) + stripe_rw(stripe); /* Read/write stripe. */ +} + +/* Stripe cache resizing. */ +static void do_sc_resize(struct raid_set *rs) +{ + unsigned set = atomic_read(&rs->sc.stripes_to_set); + + if (set) { + unsigned cur = atomic_read(&rs->sc.stripes); + int r = (set > cur) ? sc_grow(&rs->sc, set - cur, SC_GROW) : + sc_shrink(&rs->sc, cur - set); + + /* Flag end of resizeing if ok. */ + if (!r) + atomic_set(&rs->sc.stripes_to_set, 0); + } +} + +/* + * Process all ios + * + * We do different things with the io depending + * on the state of the region that it is in: + * + * o reads: hang off stripe cache or postpone if full + * + * o writes: + * + * CLEAN/DIRTY/NOSYNC: increment pending and hang io off stripe's stripe set. + * In case stripe cache is full or busy, postpone the io. + * + * RECOVERING: delay the io until recovery of the region completes. + * + */ +static void do_ios(struct raid_set *rs, struct bio_list *ios) +{ + int r; + unsigned flush = 0, delay = 0; + sector_t sector; + struct dm_rh_client *rh = rs->recover.rh; + struct bio *bio; + struct bio_list reject; + + bio_list_init(&reject); + + /* + * Classify each io: + * o delay writes to recovering regions (let reads go through) + * o queue io to all other regions + */ + while ((bio = bio_list_pop(ios))) { + /* + * In case we get a barrier bio, push it back onto + * the input queue unless all work queues are empty + * and the stripe cache is inactive. + */ + if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER))) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BARRIER); + if (delay || + !list_empty(rs->sc.lists + LIST_FLUSH) || + !bio_list_empty(&reject) || + sc_active(&rs->sc)) { + bio_list_push(ios, bio); + break; + } + } + + /* Check for recovering regions. */ + sector = _sector(rs, bio); + r = region_state(rs, sector, DM_RH_RECOVERING); + if (unlikely(r && bio_data_dir(bio) == WRITE)) { + delay++; + /* Wait writing to recovering regions. */ + dm_rh_delay_by_region(rh, bio, + dm_rh_sector_to_region(rh, + sector)); + /* REMOVEME: statistics.*/ + atomic_inc(rs->stats + S_DELAYED_BIOS); + atomic_inc(rs->stats + S_SUM_DELAYED_BIOS); + + /* Force bandwidth tests in recovery. */ + SetRSBandwidth(rs); + } else { + /* + * Process ios to non-recovering regions by queueing + * them to stripes (does dm_rh_inc()) for writes). + */ + flush += stripe_queue_bio(rs, bio, &reject); + } + } + + if (flush) { + /* FIXME: better error handling. */ + r = dm_rh_flush(rh); /* Writes got queued -> flush dirty log. */ + if (r) + DMERR_LIMIT("dirty log flush"); + } + + /* Merge any rejected bios back to the head of the input list. */ + bio_list_merge_head(ios, &reject); +} + +/* Unplug: let any queued io role on the sets devices. */ +static void do_unplug(struct raid_set *rs) +{ + struct raid_dev *dev = rs->dev + rs->set.raid_devs; + + while (dev-- > rs->dev) { + /* Only call any device unplug function, if io got queued. */ + if (TestClearDevIoQueued(dev)) + blk_unplug(bdev_get_queue(dev->dev->bdev)); + } +} + +/* Send an event in case we're getting too busy. */ +static void do_busy_event(struct raid_set *rs) +{ + if (sc_busy(rs)) { + if (!TestSetRSScBusy(rs)) + schedule_work(&rs->io.ws_do_table_event); + } + + ClearRSScBusy(rs); +} + +/* Throw an event. */ +static void do_table_event(struct work_struct *ws) +{ + struct raid_set *rs = container_of(ws, struct raid_set, + io.ws_do_table_event); + dm_table_event(rs->ti->table); +} + + +/*----------------------------------------------------------------- + * RAID daemon + *---------------------------------------------------------------*/ +/* + * o belabour all end ios + * o update the region hash states + * o optionally shrink the stripe cache + * o optionally do recovery + * o unplug any component raid devices with queued bios + * o grab the input queue + * o work an all requeued or new ios and perform stripe cache flushs + * o unplug any component raid devices with queued bios + * o check, if the stripe cache gets too busy and throw an event if so + */ +static void do_raid(struct work_struct *ws) +{ + struct raid_set *rs = container_of(ws, struct raid_set, + io.dws_do_raid.work); + struct bio_list *ios = &rs->io.work, *ios_in = &rs->io.in; + + /* + * We always need to end io, so that ios can get errored in + * case the set failed and the region counters get decremented + * before we update region hash states and go any further. + */ + do_endios(rs); + dm_rh_update_states(rs->recover.rh, 1); + + /* + * Now that we've end io'd, which may have put stripes on the LRU list + * to allow for shrinking, we resize the stripe cache if requested. + */ + do_sc_resize(rs); + + /* Try to recover regions. */ + do_recovery(rs); + do_unplug(rs); /* Unplug the sets device queues. */ + + /* Quickly grab all new ios queued and add them to the work list. */ + mutex_lock(&rs->io.in_lock); + bio_list_merge(ios, ios_in); + bio_list_init(ios_in); + mutex_unlock(&rs->io.in_lock); + + if (!bio_list_empty(ios)) + do_ios(rs, ios); /* Got ios to work into the cache. */ + + do_flush(rs); /* Flush any stripes on io list. */ + do_unplug(rs); /* Unplug the sets device queues. */ + do_busy_event(rs); /* Check if we got too busy. */ +} + +/* + * Callback for region hash to dispatch + * delayed bios queued to recovered regions + * (gets called via dm_rh_update_states()). + */ +static void dispatch_delayed_bios(void *context, struct bio_list *bl) +{ + struct raid_set *rs = context; + struct bio *bio; + + /* REMOVEME: statistics; decrement pending delayed bios counter. */ + bio_list_for_each(bio, bl) + atomic_dec(rs->stats + S_DELAYED_BIOS); + + /* Merge region hash private list to work list. */ + bio_list_merge_head(&rs->io.work, bl); + bio_list_init(bl); + ClearRSBandwidth(rs); +} + +/************************************************************* + * Constructor helpers + *************************************************************/ +/* Calculate MB/sec. */ +static unsigned mbpers(struct raid_set *rs, unsigned speed) +{ + return to_bytes(speed * rs->set.data_devs * + rs->recover.io_size * HZ >> 10) >> 10; +} + +/* + * Discover fastest xor algorithm and # of chunks combination. + */ +/* Calculate speed for algorithm and # of chunks. */ +static unsigned xor_speed(struct stripe *stripe) +{ + unsigned r = 0; + unsigned long j; + + /* Wait for next tick. */ + for (j = jiffies; j == jiffies; ) + ; + + /* Do xors for a full tick. */ + for (j = jiffies; j == jiffies; ) { + mb(); + common_xor(stripe, stripe->io.size, 0, 0); + mb(); + r++; + } + + return r; +} + +/* Optimize xor algorithm for this RAID set. */ +static unsigned xor_optimize(struct raid_set *rs) +{ + unsigned chunks_max = 2, p = rs->set.raid_devs, speed_max = 0; + struct xor_func *f = ARRAY_END(xor_funcs), *f_max = NULL; + struct stripe *stripe; + + BUG_ON(list_empty(&rs->recover.stripes)); + stripe = list_first_entry(&rs->recover.stripes, struct stripe, + lists[LIST_RECOVER]); + + /* Must set uptodate so that xor() will belabour chunks. */ + while (p--) + SetChunkUptodate(CHUNK(stripe, p)); + + /* Try all xor functions. */ + while (f-- > xor_funcs) { + unsigned speed; + + /* Set actual xor function for common_xor(). */ + rs->xor.f = f; + rs->xor.chunks = (f->f == xor_blocks_wrapper ? + (MAX_XOR_BLOCKS + 1) : XOR_CHUNKS_MAX) + 1; + + while (rs->xor.chunks-- > 2) { + speed = xor_speed(stripe); + if (speed > speed_max) { + speed_max = speed; + chunks_max = rs->xor.chunks; + f_max = f; + } + } + } + + /* Memorize optimum parameters. */ + rs->xor.f = f_max; + rs->xor.chunks = chunks_max; + return speed_max; +} + +/* + * Allocate a RAID context (a RAID set) + */ +/* Structure for variable RAID parameters. */ +struct variable_parms { + int bandwidth; + int bandwidth_parm; + int chunk_size; + int chunk_size_parm; + int io_size; + int io_size_parm; + int stripes; + int stripes_parm; + int recover_io_size; + int recover_io_size_parm; + int raid_parms; + int recovery; + int recovery_stripes; + int recovery_stripes_parm; +}; + +static struct raid_set * +context_alloc(struct raid_type *raid_type, struct variable_parms *p, + unsigned raid_devs, sector_t sectors_per_dev, + struct dm_target *ti, unsigned dl_parms, char **argv) +{ + int r; + size_t len; + sector_t region_size, ti_len; + struct raid_set *rs = NULL; + struct dm_dirty_log *dl; + struct recover *rec; + + /* + * Create the dirty log + * + * We need to change length for the dirty log constructor, + * because we want an amount of regions for all stripes derived + * from the single device size, so that we can keep region + * size = 2^^n independant of the number of devices + */ + ti_len = ti->len; + ti->len = sectors_per_dev; + dl = dm_dirty_log_create(argv[0], ti, dl_parms, argv + 2); + ti->len = ti_len; + if (!dl) + goto bad_dirty_log; + + /* Chunk size *must* be smaller than region size. */ + region_size = dl->type->get_region_size(dl); + if (p->chunk_size > region_size) + goto bad_chunk_size; + + /* Recover io size *must* be smaller than region size as well. */ + if (p->recover_io_size > region_size) + goto bad_recover_io_size; + + /* Size and allocate the RAID set structure. */ + len = sizeof(*rs->data) + sizeof(*rs->dev); + if (dm_array_too_big(sizeof(*rs), len, raid_devs)) + goto bad_array; + + len = sizeof(*rs) + raid_devs * len; + rs = kzalloc(len, GFP_KERNEL); + if (!rs) + goto bad_alloc; + + rec = &rs->recover; + atomic_set(&rs->io.in_process, 0); + atomic_set(&rs->io.in_process_max, 0); + rec->io_size = p->recover_io_size; + + /* Pointer to data array. */ + rs->data = (unsigned long **) + ((void *) rs->dev + raid_devs * sizeof(*rs->dev)); + rec->dl = dl; + rs->set.raid_devs = raid_devs; + rs->set.data_devs = raid_devs - raid_type->parity_devs; + rs->set.raid_type = raid_type; + + rs->set.raid_parms = p->raid_parms; + rs->set.chunk_size_parm = p->chunk_size_parm; + rs->set.io_size_parm = p->io_size_parm; + rs->sc.stripes_parm = p->stripes_parm; + rec->io_size_parm = p->recover_io_size_parm; + rec->bandwidth_parm = p->bandwidth_parm; + rec->recovery = p->recovery; + rec->recovery_stripes = p->recovery_stripes; + + /* + * Set chunk and io size and respective shifts + * (used to avoid divisions) + */ + rs->set.chunk_size = p->chunk_size; + rs->set.chunk_shift = ffs(p->chunk_size) - 1; + + rs->set.io_size = p->io_size; + rs->set.io_mask = p->io_size - 1; + /* Mask to adjust address key in case io_size != chunk_size. */ + rs->set.io_inv_mask = (p->chunk_size - 1) & ~rs->set.io_mask; + + rs->set.sectors_per_dev = sectors_per_dev; + + rs->set.ei = -1; /* Indicate no failed device. */ + atomic_set(&rs->set.failed_devs, 0); + + rs->ti = ti; + + atomic_set(rec->io_count + IO_WORK, 0); + atomic_set(rec->io_count + IO_RECOVER, 0); + + /* Initialize io lock and queues. */ + mutex_init(&rs->io.in_lock); + bio_list_init(&rs->io.in); + bio_list_init(&rs->io.work); + + init_waitqueue_head(&rs->io.suspendq); /* Suspend waiters (dm-io). */ + + rec->nr_regions = dm_sector_div_up(sectors_per_dev, region_size); + rec->rh = dm_region_hash_create(rs, dispatch_delayed_bios, + wake_dummy, wake_do_raid, 0, p->recovery_stripes, + dl, region_size, rec->nr_regions); + if (IS_ERR(rec->rh)) + goto bad_rh; + + /* Initialize stripe cache. */ + r = sc_init(rs, p->stripes); + if (r) + goto bad_sc; + + /* REMOVEME: statistics. */ + stats_reset(rs); + ClearRSDevelStats(rs); /* Disnable development status. */ + return rs; + +bad_dirty_log: + TI_ERR_RET("Error creating dirty log", ERR_PTR(-ENOMEM)); + +bad_chunk_size: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Chunk size larger than region size", ERR_PTR(-EINVAL)); + +bad_recover_io_size: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Recover stripe io size larger than region size", + ERR_PTR(-EINVAL)); + +bad_array: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Arry too big", ERR_PTR(-EINVAL)); + +bad_alloc: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Cannot allocate raid context", ERR_PTR(-ENOMEM)); + +bad_rh: + dm_dirty_log_destroy(dl); + ti->error = DM_MSG_PREFIX "Error creating dirty region hash"; + goto free_rs; + +bad_sc: + dm_region_hash_destroy(rec->rh); /* Destroys dirty log too. */ + sc_exit(&rs->sc); + ti->error = DM_MSG_PREFIX "Error creating stripe cache"; +free_rs: + kfree(rs); + return ERR_PTR(-ENOMEM); +} + +/* Free a RAID context (a RAID set). */ +static void context_free(struct raid_set *rs, unsigned p) +{ + while (p--) + dm_put_device(rs->ti, rs->dev[p].dev); + + sc_exit(&rs->sc); + dm_region_hash_destroy(rs->recover.rh); /* Destroys dirty log too. */ + kfree(rs); +} + +/* Create work queue and initialize delayed work. */ +static int rs_workqueue_init(struct raid_set *rs) +{ + struct dm_target *ti = rs->ti; + + rs->io.wq = create_singlethread_workqueue(DAEMON); + if (!rs->io.wq) + TI_ERR_RET("failed to create " DAEMON, -ENOMEM); + + INIT_DELAYED_WORK(&rs->io.dws_do_raid, do_raid); + INIT_WORK(&rs->io.ws_do_table_event, do_table_event); + return 0; +} + +/* Return pointer to raid_type structure for raid name. */ +static struct raid_type *get_raid_type(char *name) +{ + struct raid_type *r = ARRAY_END(raid_types); + + while (r-- > raid_types) { + if (!strcmp(r->name, name)) + return r; + } + + return NULL; +} + +/* FIXME: factor out to dm core. */ +static int multiple(sector_t a, sector_t b, sector_t *n) +{ + sector_t r = a; + + sector_div(r, b); + *n = r; + return a == r * b; +} + +/* Log RAID set information to kernel log. */ +static void rs_log(struct raid_set *rs, unsigned speed) +{ + unsigned p; + char buf[BDEVNAME_SIZE]; + + for (p = 0; p < rs->set.raid_devs; p++) + DMINFO("/dev/%s is raid disk %u%s", + bdevname(rs->dev[p].dev->bdev, buf), p, + (p == rs->set.pi) ? " (parity)" : ""); + + DMINFO("%d/%d/%d sectors chunk/io/recovery size, %u stripes\n" + "algorithm \"%s\", %u chunks with %uMB/s\n" + "%s set with net %u/%u devices", + rs->set.chunk_size, rs->set.io_size, rs->recover.io_size, + atomic_read(&rs->sc.stripes), + rs->xor.f->name, rs->xor.chunks, mbpers(rs, speed), + rs->set.raid_type->descr, rs->set.data_devs, rs->set.raid_devs); +} + +/* Get all devices and offsets. */ +static int dev_parms(struct raid_set *rs, char **argv, int *p) +{ + struct dm_target *ti = rs->ti; + + for (*p = 0; *p < rs->set.raid_devs; (*p)++, argv += 2) { + int r; + unsigned long long tmp; + struct raid_dev *dev = rs->dev + *p; + + /* Get offset and device. */ + if (sscanf(argv[1], "%llu", &tmp) != 1 || + tmp > rs->set.sectors_per_dev) + TI_ERR("Invalid RAID device offset parameter"); + + dev->start = tmp; + r = dm_get_device(ti, *argv, dev->start, + rs->set.sectors_per_dev, + dm_table_get_mode(ti->table), &dev->dev); + if (r) + TI_ERR_RET("RAID device lookup failure", r); + + r = raid_dev_lookup(rs, dev); + if (r != -ENODEV && r < *p) { + (*p)++; /* Ensure dm_put_device() on actual device. */ + TI_ERR_RET("Duplicate RAID device", -ENXIO); + } + } + + return 0; +} + +/* Set recovery bandwidth. */ +static void +recover_set_bandwidth(struct raid_set *rs, unsigned bandwidth) +{ + rs->recover.bandwidth = bandwidth; + rs->recover.bandwidth_work = 100 / bandwidth; +} + +/* Handle variable number of RAID parameters. */ +static int get_raid_variable_parms(struct dm_target *ti, char **argv, + struct variable_parms *vp) +{ + int p, value; + struct { + int action; /* -1: skip, 0: no pwer2 check, 1: power2 check */ + char *errmsg; + int min, max; + int *var, *var2, *var3; + } argctr[] = { + { 1, + "Invalid chunk size; must be -1 or 2^^n and <= 16384", + IO_SIZE_MIN, CHUNK_SIZE_MAX, + &vp->chunk_size_parm, &vp->chunk_size, &vp->io_size }, + { 0, + "Invalid number of stripes: must be -1 or >= 8 and <= 16384", + STRIPES_MIN, STRIPES_MAX, + &vp->stripes_parm, &vp->stripes, NULL }, + { 1, + "Invalid io size; must -1 or >= 8, 2^^n and less equal " + "min(BIO_MAX_SECTORS/2, chunk size)", + IO_SIZE_MIN, 0, /* Needs to be updated in loop below. */ + &vp->io_size_parm, &vp->io_size, NULL }, + { 1, + "Invalid recovery io size; must be -1 or " + "2^^n and less equal BIO_MAX_SECTORS/2", + RECOVER_IO_SIZE_MIN, BIO_MAX_SECTORS / 2, + &vp->recover_io_size_parm, &vp->recover_io_size, NULL }, + { 0, + "Invalid recovery bandwidth percentage; " + "must be -1 or > 0 and <= 100", + BANDWIDTH_MIN, BANDWIDTH_MAX, + &vp->bandwidth_parm, &vp->bandwidth, NULL }, + /* Handle sync argument seperately in loop. */ + { -1, + "Invalid recovery switch; must be \"sync\" or \"nosync\"" }, + { 0, + "Invalid number of recovery stripes;" + "must be -1, > 0 and <= 16384", + RECOVERY_STRIPES_MIN, RECOVERY_STRIPES_MAX, + &vp->recovery_stripes_parm, &vp->recovery_stripes, NULL }, + }, *varp; + + /* Fetch # of variable raid parameters. */ + if (sscanf(*(argv++), "%d", &vp->raid_parms) != 1 || + !range_ok(vp->raid_parms, 0, 7)) + TI_ERR("Bad variable raid parameters number"); + + /* Preset variable RAID parameters. */ + vp->chunk_size = CHUNK_SIZE_DEFAULT; + vp->io_size = IO_SIZE_DEFAULT; + vp->stripes = STRIPES_DEFAULT; + vp->recover_io_size = RECOVER_IO_SIZE_DEFAULT; + vp->bandwidth = BANDWIDTH_DEFAULT; + vp->recovery = 1; + vp->recovery_stripes = RECOVERY_STRIPES_DEFAULT; + + /* Walk the array of argument constraints for all given ones. */ + for (p = 0, varp = argctr; p < vp->raid_parms; p++, varp++) { + BUG_ON(varp >= ARRAY_END(argctr)); + + /* Special case for "[no]sync" string argument. */ + if (varp->action < 0) { + if (!strcmp(*argv, "sync")) + ; + else if (!strcmp(*argv, "nosync")) + vp->recovery = 0; + else + TI_ERR(varp->errmsg); + + argv++; + continue; + } + + /* + * Special case for io_size depending + * on previously set chunk size. + */ + if (p == 2) + varp->max = min(BIO_MAX_SECTORS / 2, vp->chunk_size); + + if (sscanf(*(argv++), "%d", &value) != 1 || + (value != -1 && + ((varp->action && !POWER_OF_2(value)) || + !range_ok(value, varp->min, varp->max)))) + TI_ERR(varp->errmsg); + + *varp->var = value; + if (value != -1) { + if (varp->var2) + *varp->var2 = value; + if (varp->var3) + *varp->var3 = value; + } + } + + return 0; +} + +/* Parse optional locking parameters. */ +static int get_raid_locking_parms(struct dm_target *ti, char **argv, + int *locking_parms, + struct dm_raid45_locking_type **locking_type) +{ + if (!strnicmp(argv[0], "locking", strlen(argv[0]))) { + char *lckstr = argv[1]; + size_t lcksz = strlen(lckstr); + + if (!strnicmp(lckstr, "none", lcksz)) { + *locking_type = &locking_none; + *locking_parms = 2; + } else if (!strnicmp(lckstr, "cluster", lcksz)) { + DMERR("locking type \"%s\" not yet implemented", + lckstr); + return -EINVAL; + } else { + DMERR("unknown locking type \"%s\"", lckstr); + return -EINVAL; + } + } + + *locking_parms = 0; + *locking_type = &locking_none; + return 0; +} + +/* Set backing device read ahead properties of RAID set. */ +static void rs_set_read_ahead(struct raid_set *rs, + unsigned sectors, unsigned stripes) +{ + unsigned ra_pages = dm_div_up(sectors, SECTORS_PER_PAGE); + struct mapped_device *md = dm_table_get_md(rs->ti->table); + struct backing_dev_info *bdi = &dm_disk(md)->queue->backing_dev_info; + + /* Set read-ahead for the RAID set and the component devices. */ + if (ra_pages) { + unsigned p = rs->set.raid_devs; + + bdi->ra_pages = stripes * ra_pages * rs->set.data_devs; + + while (p--) { + struct request_queue *q = + bdev_get_queue(rs->dev[p].dev->bdev); + + q->backing_dev_info.ra_pages = ra_pages; + } + } + + dm_put(md); +} + +/* Set congested function. */ +static void rs_set_congested_fn(struct raid_set *rs) +{ + struct mapped_device *md = dm_table_get_md(rs->ti->table); + struct backing_dev_info *bdi = &dm_disk(md)->queue->backing_dev_info; + + /* Set congested function and data. */ + bdi->congested_fn = rs_congested; + bdi->congested_data = rs; + dm_put(md); +} + +/* + * Construct a RAID4/5 mapping: + * + * log_type #log_params \ + * raid_type [#parity_dev] #raid_variable_params \ + * [locking "none"/"cluster"] + * #raid_devs #dev_to_initialize [ ]{3,} + * + * log_type = "core"/"disk", + * #log_params = 1-3 (1-2 for core dirty log type, 3 for disk dirty log only) + * log_params = [dirty_log_path] region_size [[no]sync]) + * + * raid_type = "raid4", "raid5_la", "raid5_ra", "raid5_ls", "raid5_rs" + * + * #parity_dev = N if raid_type = "raid4" + * o N = -1: pick default = last device + * o N >= 0 and < #raid_devs: parity device index + * + * #raid_variable_params = 0-7; raid_params (-1 = default): + * [chunk_size [#stripes [io_size [recover_io_size \ + * [%recovery_bandwidth [recovery_switch [#recovery_stripes]]]]]]] + * o chunk_size (unit to calculate drive addresses; must be 2^^n, > 8 + * and <= CHUNK_SIZE_MAX) + * o #stripes is number of stripes allocated to stripe cache + * (must be > 1 and < STRIPES_MAX) + * o io_size (io unit size per device in sectors; must be 2^^n and > 8) + * o recover_io_size (io unit size per device for recovery in sectors; + must be 2^^n, > SECTORS_PER_PAGE and <= region_size) + * o %recovery_bandwith is the maximum amount spend for recovery during + * application io (1-100%) + * o recovery switch = [sync|nosync] + * o #recovery_stripes is the number of recovery stripes used for + * parallel recovery of the RAID set + * If raid_variable_params = 0, defaults will be used. + * Any raid_variable_param can be set to -1 to apply a default + * + * #raid_devs = N (N >= 3) + * + * #dev_to_initialize = N + * -1: initialize parity on all devices + * >= 0 and < #raid_devs: initialize raid_path; used to force reconstruction + * of a failed devices content after replacement + * + * = device_path (eg, /dev/sdd1) + * = begin at offset on + * + */ +#define MIN_PARMS 13 +static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv) +{ + int dev_to_init, dl_parms, i, locking_parms, + parity_parm, pi = -1, r, raid_devs; + unsigned speed; + sector_t tmp, sectors_per_dev; + struct dm_raid45_locking_type *locking; + struct raid_set *rs; + struct raid_type *raid_type; + struct variable_parms parms; + + /* Ensure minimum number of parameters. */ + if (argc < MIN_PARMS) + TI_ERR("Not enough parameters"); + + /* Fetch # of dirty log parameters. */ + if (sscanf(argv[1], "%d", &dl_parms) != 1 || + !range_ok(dl_parms, 1, 4711)) /* ;-) */ + TI_ERR("Bad dirty log parameters number"); + + /* Check raid_type. */ + raid_type = get_raid_type(argv[dl_parms + 2]); + if (!raid_type) + TI_ERR("Bad raid type"); + + /* In case of RAID4, parity drive is selectable. */ + parity_parm = !!(raid_type->level == raid4); + + /* Handle variable number of RAID parameters. */ + r = get_raid_variable_parms(ti, argv + dl_parms + parity_parm + 3, + &parms); + if (r) + return r; + + /* Handle any locking parameters. */ + r = get_raid_locking_parms(ti, + argv + dl_parms + parity_parm + + parms.raid_parms + 4, + &locking_parms, &locking); + if (r) + return r; + + /* # of raid devices. */ + i = dl_parms + parity_parm + parms.raid_parms + locking_parms + 4; + if (sscanf(argv[i], "%d", &raid_devs) != 1 || + raid_devs < raid_type->minimal_devs) + TI_ERR("Invalid number of raid devices"); + + /* In case of RAID4, check parity drive index is in limits. */ + if (raid_type->level == raid4) { + /* Fetch index of parity device. */ + if (sscanf(argv[dl_parms + 3], "%d", &pi) != 1 || + (pi != -1 && !range_ok(pi, 0, raid_devs - 1))) + TI_ERR("Invalid RAID4 parity device index"); + } + + /* + * Index of device to initialize starts at 0 + * + * o -1 -> don't initialize a selected device; + * initialize parity conforming to algorithm + * o 0..raid_devs-1 -> initialize respective device + * (used for reconstruction of a replaced device) + */ + if (sscanf(argv[dl_parms + parity_parm + parms.raid_parms + + locking_parms + 5], "%d", &dev_to_init) != 1 || + !range_ok(dev_to_init, -1, raid_devs - 1)) + TI_ERR("Invalid number for raid device to initialize"); + + /* Check # of raid device arguments. */ + if (argc - dl_parms - parity_parm - parms.raid_parms - 6 != + 2 * raid_devs) + TI_ERR("Wrong number of raid device/offset arguments"); + + /* + * Check that the table length is devisable + * w/o rest by (raid_devs - parity_devs) + */ + if (!multiple(ti->len, raid_devs - raid_type->parity_devs, + §ors_per_dev)) + TI_ERR("Target length not divisible by number of data devices"); + + /* + * Check that the device size is + * devisable w/o rest by chunk size + */ + if (!multiple(sectors_per_dev, parms.chunk_size, &tmp)) + TI_ERR("Device length not divisible by chunk_size"); + + /**************************************************************** + * Now that we checked the constructor arguments -> + * let's allocate the RAID set + ****************************************************************/ + rs = context_alloc(raid_type, &parms, raid_devs, sectors_per_dev, + ti, dl_parms, argv); + if (IS_ERR(rs)) + return PTR_ERR(rs); + + + rs->set.dev_to_init = rs->set.dev_to_init_parm = dev_to_init; + rs->set.pi = rs->set.pi_parm = pi; + + /* Set RAID4 parity drive index. */ + if (raid_type->level == raid4) + rs->set.pi = (pi == -1) ? rs->set.data_devs : pi; + + recover_set_bandwidth(rs, parms.bandwidth); + + /* Use locking type to lock stripe access. */ + rs->locking = locking; + + /* Get the device/offset tupels. */ + argv += dl_parms + 6 + parity_parm + parms.raid_parms; + r = dev_parms(rs, argv, &i); + if (r) + goto err; + + /* Set backing device information (eg. read ahead). */ + rs_set_read_ahead(rs, 2 * rs->set.chunk_size, 4 /* stripes */); + rs_set_congested_fn(rs); /* Set congested function. */ + SetRSCheckOverwrite(rs); /* Allow chunk overwrite checks. */ + speed = xor_optimize(rs); /* Select best xor algorithm. */ + + /* Set for recovery of any nosync regions. */ + if (parms.recovery) + SetRSRecover(rs); + else { + /* + * Need to free recovery stripe(s) here in case + * of nosync, because xor_optimize uses one. + */ + set_start_recovery(rs); + set_end_recovery(rs); + stripe_recover_free(rs); + } + + /* + * Make sure that dm core only hands maximum io size + * length down and pays attention to io boundaries. + */ + ti->split_io = rs->set.io_size; + ti->private = rs; + + /* Initialize work queue to handle this RAID set's io. */ + r = rs_workqueue_init(rs); + if (r) + goto err; + + rs_log(rs, speed); /* Log information about RAID set. */ + return 0; + +err: + context_free(rs, i); + return r; +} + +/* + * Destruct a raid mapping + */ +static void raid_dtr(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + + destroy_workqueue(rs->io.wq); + context_free(rs, rs->set.raid_devs); +} + +/* Raid mapping function. */ +static int raid_map(struct dm_target *ti, struct bio *bio, + union map_info *map_context) +{ + /* I don't want to waste stripe cache capacity. */ + if (bio_rw(bio) == READA) + return -EIO; + else { + struct raid_set *rs = ti->private; + + /* + * Get io reference to be waiting for to drop + * to zero on device suspension/destruction. + */ + io_get(rs); + bio->bi_sector -= ti->begin; /* Remap sector. */ + + /* Queue io to RAID set. */ + mutex_lock(&rs->io.in_lock); + bio_list_add(&rs->io.in, bio); + mutex_unlock(&rs->io.in_lock); + + /* Wake daemon to process input list. */ + wake_do_raid(rs); + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (bio_data_dir(bio) == READ ? + S_BIOS_READ : S_BIOS_WRITE)); + return DM_MAPIO_SUBMITTED; /* Handle later. */ + } +} + +/* Device suspend. */ +static void raid_presuspend(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + struct dm_dirty_log *dl = rs->recover.dl; + + SetRSSuspend(rs); + + if (RSRecover(rs)) + dm_rh_stop_recovery(rs->recover.rh); + + cancel_delayed_work(&rs->io.dws_do_raid); + flush_workqueue(rs->io.wq); + wait_ios(rs); /* Wait for completion of all ios being processed. */ + + if (dl->type->presuspend && dl->type->presuspend(dl)) + /* FIXME: need better error handling. */ + DMWARN("log presuspend failed"); +} + +static void raid_postsuspend(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + struct dm_dirty_log *dl = rs->recover.dl; + + if (dl->type->postsuspend && dl->type->postsuspend(dl)) + /* FIXME: need better error handling. */ + DMWARN("log postsuspend failed"); + +} + +/* Device resume. */ +static void raid_resume(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + struct recover *rec = &rs->recover; + struct dm_dirty_log *dl = rec->dl; + + if (dl->type->resume && dl->type->resume(dl)) + /* Resume dirty log. */ + /* FIXME: need better error handling. */ + DMWARN("log resume failed"); + + rec->nr_regions_to_recover = + rec->nr_regions - dl->type->get_sync_count(dl); + + /* Restart any unfinished recovery. */ + if (RSRecover(rs)) { + set_start_recovery(rs); + dm_rh_start_recovery(rec->rh); + } + + ClearRSSuspend(rs); + wake_do_raid(rs); +} + +/* Return stripe cache size. */ +static unsigned sc_size(struct raid_set *rs) +{ + return to_sector(atomic_read(&rs->sc.stripes) * + (sizeof(struct stripe) + + (sizeof(struct stripe_chunk) + + (sizeof(struct page_list) + + to_bytes(rs->set.io_size) * + rs->set.raid_devs)) + + (rs->recover.end_jiffies ? + 0 : rs->recover.recovery_stripes * + to_bytes(rs->set.raid_devs * rs->recover.io_size)))); +} + +/* REMOVEME: status output for development. */ +static void raid_devel_stats(struct dm_target *ti, char *result, + unsigned *size, unsigned maxlen) +{ + unsigned sz = *size; + unsigned long j; + char buf[BDEVNAME_SIZE], *p; + struct stats_map *sm; + struct raid_set *rs = ti->private; + struct recover *rec = &rs->recover; + struct timespec ts; + + DMEMIT("%s %s %u\n", version, rs->xor.f->name, rs->xor.chunks); + DMEMIT("act_ios=%d ", io_ref(rs)); + DMEMIT("act_ios_max=%d\n", atomic_read(&rs->io.in_process_max)); + DMEMIT("act_stripes=%d ", sc_active(&rs->sc)); + DMEMIT("act_stripes_max=%d\n", + atomic_read(&rs->sc.active_stripes_max)); + + for (sm = stats_map; sm < ARRAY_END(stats_map); sm++) + DMEMIT("%s%d", sm->str, atomic_read(rs->stats + sm->type)); + + DMEMIT(" checkovr=%s\n", RSCheckOverwrite(rs) ? "on" : "off"); + DMEMIT("sc=%u/%u/%u/%u/%u/%u/%u\n", rs->set.chunk_size, + atomic_read(&rs->sc.stripes), rs->set.io_size, + rec->recovery_stripes, rec->io_size, rs->sc.hash.buckets, + sc_size(rs)); + + j = (rec->end_jiffies ? rec->end_jiffies : jiffies) - + rec->start_jiffies; + jiffies_to_timespec(j, &ts); + sprintf(buf, "%ld.%ld", ts.tv_sec, ts.tv_nsec); + p = strchr(buf, '.'); + p[3] = 0; + + DMEMIT("rg=%llu/%llu/%llu/%u %s\n", + (unsigned long long) rec->nr_regions_recovered, + (unsigned long long) rec->nr_regions_to_recover, + (unsigned long long) rec->nr_regions, rec->bandwidth, buf); + + *size = sz; +} + +static int raid_status(struct dm_target *ti, status_type_t type, + char *result, unsigned maxlen) +{ + unsigned p, sz = 0; + char buf[BDEVNAME_SIZE]; + struct raid_set *rs = ti->private; + int raid_parms[] = { + rs->set.chunk_size_parm, + rs->sc.stripes_parm, + rs->set.io_size_parm, + rs->recover.io_size_parm, + rs->recover.bandwidth_parm, + -2, + rs->recover.recovery_stripes, + }; + + switch (type) { + case STATUSTYPE_INFO: + /* REMOVEME: statistics. */ + if (RSDevelStats(rs)) + raid_devel_stats(ti, result, &sz, maxlen); + + DMEMIT("%u ", rs->set.raid_devs); + + for (p = 0; p < rs->set.raid_devs; p++) + DMEMIT("%s ", + format_dev_t(buf, rs->dev[p].dev->bdev->bd_dev)); + + DMEMIT("1 "); + for (p = 0; p < rs->set.raid_devs; p++) { + DMEMIT("%c", !DevFailed(rs->dev + p) ? 'A' : 'D'); + + if (p == rs->set.pi) + DMEMIT("p"); + + if (rs->set.dev_to_init == p) + DMEMIT("i"); + } + + break; + case STATUSTYPE_TABLE: + sz = rs->recover.dl->type->status(rs->recover.dl, type, + result, maxlen); + DMEMIT("%s %u ", rs->set.raid_type->name, + rs->set.raid_parms); + + for (p = 0; p < rs->set.raid_parms; p++) { + if (raid_parms[p] > -2) + DMEMIT("%d ", raid_parms[p]); + else + DMEMIT("%s ", rs->recover.recovery ? + "sync" : "nosync"); + } + + DMEMIT("%u %d ", rs->set.raid_devs, rs->set.dev_to_init); + + for (p = 0; p < rs->set.raid_devs; p++) + DMEMIT("%s %llu ", + format_dev_t(buf, rs->dev[p].dev->bdev->bd_dev), + (unsigned long long) rs->dev[p].start); + } + + return 0; +} + +/* + * Message interface + */ +enum raid_msg_actions { + act_bw, /* Recovery bandwidth switch. */ + act_dev, /* Device failure switch. */ + act_overwrite, /* Stripe overwrite check. */ + act_stats, /* Development statistics switch. */ + act_sc, /* Stripe cache switch. */ + + act_on, /* Set entity on. */ + act_off, /* Set entity off. */ + act_reset, /* Reset entity. */ + + act_set = act_on, /* Set # absolute. */ + act_grow = act_off, /* Grow # by an amount. */ + act_shrink = act_reset, /* Shrink # by an amount. */ +}; + +/* Turn a delta into an absolute value. */ +static int _absolute(unsigned long action, int act, int r) +{ + /* Make delta absolute. */ + if (test_bit(act_set, &action)) + ; + else if (test_bit(act_grow, &action)) + r += act; + else if (test_bit(act_shrink, &action)) + r = act - r; + else + r = -EINVAL; + + return r; +} + + /* Change recovery io bandwidth. */ +static int bandwidth_change(struct dm_msg *msg, void *context) +{ + struct raid_set *rs = context; + int act = rs->recover.bandwidth; + int bandwidth = DM_MSG_INT_ARG(msg); + + if (range_ok(bandwidth, BANDWIDTH_MIN, BANDWIDTH_MAX)) { + /* Make delta bandwidth absolute. */ + bandwidth = _absolute(msg->action, act, bandwidth); + + /* Check range. */ + if (range_ok(bandwidth, BANDWIDTH_MIN, BANDWIDTH_MAX)) { + recover_set_bandwidth(rs, bandwidth); + return 0; + } + } + + set_bit(dm_msg_ret_arg, &msg->ret); + set_bit(dm_msg_ret_inval, &msg->ret); + return -EINVAL; +} + +/* Set/reset development feature flags. */ +static int devel_flags(struct dm_msg *msg, void *context) +{ + struct raid_set *rs = context; + + if (test_bit(act_on, &msg->action)) + return test_and_set_bit(msg->spec->parm, + &rs->io.flags) ? -EPERM : 0; + else if (test_bit(act_off, &msg->action)) + return test_and_clear_bit(msg->spec->parm, + &rs->io.flags) ? 0 : -EPERM; + else if (test_bit(act_reset, &msg->action)) { + if (test_bit(act_stats, &msg->action)) { + stats_reset(rs); + goto on; + } else if (test_bit(act_overwrite, &msg->action)) { +on: + set_bit(msg->spec->parm, &rs->io.flags); + return 0; + } + } + + return -EINVAL; +} + +/* Resize the stripe cache. */ +static int sc_resize(struct dm_msg *msg, void *context) +{ + int act, stripes; + struct raid_set *rs = context; + + /* Deny permission in case the daemon is still resizing!. */ + if (atomic_read(&rs->sc.stripes_to_set)) + return -EPERM; + + stripes = DM_MSG_INT_ARG(msg); + if (stripes > 0) { + act = atomic_read(&rs->sc.stripes); + + /* Make delta stripes absolute. */ + stripes = _absolute(msg->action, act, stripes); + + /* + * Check range and that the # of stripes changes. + * We leave the resizing to the wroker. + */ + if (range_ok(stripes, STRIPES_MIN, STRIPES_MAX) && + stripes != atomic_read(&rs->sc.stripes)) { + atomic_set(&rs->sc.stripes_to_set, stripes); + wake_do_raid(rs); + return 0; + } + } + + set_bit(dm_msg_ret_arg, &msg->ret); + set_bit(dm_msg_ret_inval, &msg->ret); + return -EINVAL; +} + +/* Parse the RAID message action. */ +/* + * 'ba[ndwidth] {se[t],g[row],sh[rink]} #' # e.g 'ba se 50' + * "o[verwrite] {on,of[f],r[eset]}' # e.g. 'o of' + * 'sta[tistics] {on,of[f],r[eset]}' # e.g. 'stat of' + * 'str[ipecache] {se[t],g[row],sh[rink]} #' # e.g. 'stripe set 1024' + * + */ +static int raid_message(struct dm_target *ti, unsigned argc, char **argv) +{ + /* Variables to store the parsed parameters im. */ + static int i[2]; + static unsigned long *i_arg[] = { + (unsigned long *) i + 0, + (unsigned long *) i + 1, + }; + + /* Declare all message option strings. */ + static char *str_sgs[] = { "set", "grow", "shrink" }; + static char *str_oor[] = { "on", "off", "reset" }; + + /* Declare all actions. */ + static unsigned long act_sgs[] = { act_set, act_grow, act_shrink }; + static unsigned long act_oor[] = { act_on, act_off, act_reset }; + + /* Bandwidth option. */ + static struct dm_message_option bw_opt = { 3, str_sgs, act_sgs }; + static struct dm_message_argument bw_args = { + 1, i_arg, { dm_msg_int_t } + }; + + static struct dm_message_argument null_args = { + 0, NULL, { dm_msg_int_t } + }; + + /* Overwrite and statistics option. */ + static struct dm_message_option ovr_stats_opt = { 3, str_oor, act_oor }; + + /* Sripecache option. */ + static struct dm_message_option stripe_opt = { 3, str_sgs, act_sgs }; + + /* Declare messages. */ + static struct dm_msg_spec specs[] = { + { "bandwidth", act_bw, &bw_opt, &bw_args, + 0, bandwidth_change }, + { "overwrite", act_overwrite, &ovr_stats_opt, &null_args, + RS_CHECK_OVERWRITE, devel_flags }, + { "statistics", act_stats, &ovr_stats_opt, &null_args, + RS_DEVEL_STATS, devel_flags }, + { "stripecache", act_sc, &stripe_opt, &bw_args, + 0, sc_resize }, + }; + + /* The message for the parser. */ + struct dm_msg msg = { + .num_specs = ARRAY_SIZE(specs), + .specs = specs, + }; + + return dm_message_parse(TARGET, &msg, ti->private, argc, argv); +} +/* + * END message interface + */ + +static struct target_type raid_target = { + .name = "raid45", + .version = {1, 0, 0}, + .module = THIS_MODULE, + .ctr = raid_ctr, + .dtr = raid_dtr, + .map = raid_map, + .presuspend = raid_presuspend, + .postsuspend = raid_postsuspend, + .resume = raid_resume, + .status = raid_status, + .message = raid_message, +}; + +static void init_exit(const char *bad_msg, const char *good_msg, int r) +{ + if (r) + DMERR("Failed to %sregister target [%d]", bad_msg, r); + else + DMINFO("%s %s", good_msg, version); +} + +static int __init dm_raid_init(void) +{ + int r = dm_register_target(&raid_target); + + init_exit("", "initialized", r); + return r; +} + +static void __exit dm_raid_exit(void) +{ + dm_unregister_target(&raid_target); + init_exit("un", "exit", 0); +} + +/* Module hooks. */ +module_init(dm_raid_init); +module_exit(dm_raid_exit); + +MODULE_DESCRIPTION(DM_NAME " raid4/5 target"); +MODULE_AUTHOR("Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("dm-raid4"); +MODULE_ALIAS("dm-raid5"); --- linux-2.6.32.orig/ubuntu/dm-raid4-5/BOM +++ linux-2.6.32/ubuntu/dm-raid4-5/BOM @@ -0,0 +1,3 @@ +Downloaded from: http://people.redhat.com/~heinzm/sw/dm/dm-raid45/ +Current Version: 2009.04.24 (2.6.30-rc3) +Comments: All of the patches to dmraid1/dm-log, etc are upstream. --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-region-hash.c +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-region-hash.c @@ -0,0 +1,718 @@ +/* + * Copyright (C) 2003 Sistina Software Limited. + * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * + * This file is released under the GPL. + */ + +#include +#include "dm-region-hash.h" + +#include +#include +#include +#include + +#include "dm.h" + +#define DM_MSG_PREFIX "region hash" + +/*----------------------------------------------------------------- + * Region hash + * + * The mirror splits itself up into discrete regions. Each + * region can be in one of three states: clean, dirty, + * nosync. There is no need to put clean regions in the hash. + * + * In addition to being present in the hash table a region _may_ + * be present on one of three lists. + * + * clean_regions: Regions on this list have no io pending to + * them, they are in sync, we are no longer interested in them, + * they are dull. dm_rh_update_states() will remove them from the + * hash table. + * + * quiesced_regions: These regions have been spun down, ready + * for recovery. rh_recovery_start() will remove regions from + * this list and hand them to kmirrord, which will schedule the + * recovery io with kcopyd. + * + * recovered_regions: Regions that kcopyd has successfully + * recovered. dm_rh_update_states() will now schedule any delayed + * io, up the recovery_count, and remove the region from the + * hash. + * + * There are 2 locks: + * A rw spin lock 'hash_lock' protects just the hash table, + * this is never held in write mode from interrupt context, + * which I believe means that we only have to disable irqs when + * doing a write lock. + * + * An ordinary spin lock 'region_lock' that protects the three + * lists in the region_hash, with the 'state', 'list' and + * 'delayed_bios' fields of the regions. This is used from irq + * context, so all other uses will have to suspend local irqs. + *---------------------------------------------------------------*/ +struct dm_region_hash { + uint32_t region_size; + unsigned region_shift; + + /* holds persistent region state */ + struct dm_dirty_log *log; + + /* hash table */ + rwlock_t hash_lock; + mempool_t *region_pool; + unsigned mask; + unsigned nr_buckets; + unsigned prime; + unsigned shift; + struct list_head *buckets; + + unsigned max_recovery; /* Max # of regions to recover in parallel */ + + spinlock_t region_lock; + atomic_t recovery_in_flight; + struct semaphore recovery_count; + struct list_head clean_regions; + struct list_head quiesced_regions; + struct list_head recovered_regions; + struct list_head failed_recovered_regions; + + void *context; + sector_t target_begin; + + /* Callback function to schedule bios writes */ + void (*dispatch_bios)(void *context, struct bio_list *bios); + + /* Callback function to wakeup callers worker thread. */ + void (*wakeup_workers)(void *context); + + /* Callback function to wakeup callers recovery waiters. */ + void (*wakeup_all_recovery_waiters)(void *context); +}; + +struct dm_region { + struct dm_region_hash *rh; /* FIXME: can we get rid of this ? */ + region_t key; + int state; + + struct list_head hash_list; + struct list_head list; + + atomic_t pending; + struct bio_list delayed_bios; +}; + +/* + * Conversion fns + */ +region_t dm_rh_sector_to_region(struct dm_region_hash *rh, sector_t sector) +{ + return sector >> rh->region_shift; +} +// EXPORT_SYMBOL_GPL(dm_rh_sector_to_region); + +sector_t dm_rh_region_to_sector(struct dm_region_hash *rh, region_t region) +{ + return region << rh->region_shift; +} +// EXPORT_SYMBOL_GPL(dm_rh_region_to_sector); + +region_t dm_rh_bio_to_region(struct dm_region_hash *rh, struct bio *bio) +{ + return dm_rh_sector_to_region(rh, bio->bi_sector - rh->target_begin); +} +// EXPORT_SYMBOL_GPL(dm_rh_bio_to_region); + +void *dm_rh_region_context(struct dm_region *reg) +{ + return reg->rh->context; +} +// EXPORT_SYMBOL_GPL(dm_rh_region_context); + +region_t dm_rh_get_region_key(struct dm_region *reg) +{ + return reg->key; +} +// EXPORT_SYMBOL_GPL(dm_rh_get_region_key); + +sector_t dm_rh_get_region_size(struct dm_region_hash *rh) +{ + return rh->region_size; +} +// EXPORT_SYMBOL_GPL(dm_rh_get_region_size); + +/* + * FIXME: shall we pass in a structure instead of all these args to + * dm_region_hash_create()???? + */ +#define RH_HASH_MULT 2654435387U +#define RH_HASH_SHIFT 12 + +#define MIN_REGIONS 64 +struct dm_region_hash *dm_region_hash_create( + void *context, void (*dispatch_bios)(void *context, + struct bio_list *bios), + void (*wakeup_workers)(void *context), + void (*wakeup_all_recovery_waiters)(void *context), + sector_t target_begin, unsigned max_recovery, + struct dm_dirty_log *log, uint32_t region_size, + region_t nr_regions) +{ + struct dm_region_hash *rh; + unsigned nr_buckets, max_buckets; + size_t i; + + /* + * Calculate a suitable number of buckets for our hash + * table. + */ + max_buckets = nr_regions >> 6; + for (nr_buckets = 128u; nr_buckets < max_buckets; nr_buckets <<= 1) + ; + nr_buckets >>= 1; + + rh = kmalloc(sizeof(*rh), GFP_KERNEL); + if (!rh) { + DMERR("unable to allocate region hash memory"); + return ERR_PTR(-ENOMEM); + } + + rh->context = context; + rh->dispatch_bios = dispatch_bios; + rh->wakeup_workers = wakeup_workers; + rh->wakeup_all_recovery_waiters = wakeup_all_recovery_waiters; + rh->target_begin = target_begin; + rh->max_recovery = max_recovery; + rh->log = log; + rh->region_size = region_size; + rh->region_shift = ffs(region_size) - 1; + rwlock_init(&rh->hash_lock); + rh->mask = nr_buckets - 1; + rh->nr_buckets = nr_buckets; + + rh->shift = RH_HASH_SHIFT; + rh->prime = RH_HASH_MULT; + + rh->buckets = vmalloc(nr_buckets * sizeof(*rh->buckets)); + if (!rh->buckets) { + DMERR("unable to allocate region hash bucket memory"); + kfree(rh); + return ERR_PTR(-ENOMEM); + } + + for (i = 0; i < nr_buckets; i++) + INIT_LIST_HEAD(rh->buckets + i); + + spin_lock_init(&rh->region_lock); + sema_init(&rh->recovery_count, 0); + atomic_set(&rh->recovery_in_flight, 0); + INIT_LIST_HEAD(&rh->clean_regions); + INIT_LIST_HEAD(&rh->quiesced_regions); + INIT_LIST_HEAD(&rh->recovered_regions); + INIT_LIST_HEAD(&rh->failed_recovered_regions); + + rh->region_pool = mempool_create_kmalloc_pool(MIN_REGIONS, + sizeof(struct dm_region)); + if (!rh->region_pool) { + vfree(rh->buckets); + kfree(rh); + rh = ERR_PTR(-ENOMEM); + } + + return rh; +} +// EXPORT_SYMBOL_GPL(dm_region_hash_create); + +void dm_region_hash_destroy(struct dm_region_hash *rh) +{ + unsigned h; + struct dm_region *reg, *nreg; + + BUG_ON(!list_empty(&rh->quiesced_regions)); + for (h = 0; h < rh->nr_buckets; h++) { + list_for_each_entry_safe(reg, nreg, rh->buckets + h, + hash_list) { + BUG_ON(atomic_read(®->pending)); + mempool_free(reg, rh->region_pool); + } + } + + if (rh->log) + dm_dirty_log_destroy(rh->log); + + if (rh->region_pool) + mempool_destroy(rh->region_pool); + + vfree(rh->buckets); + kfree(rh); +} +// EXPORT_SYMBOL_GPL(dm_region_hash_destroy); + +struct dm_dirty_log *dm_rh_dirty_log(struct dm_region_hash *rh) +{ + return rh->log; +} +// EXPORT_SYMBOL_GPL(dm_rh_dirty_log); + +static unsigned rh_hash(struct dm_region_hash *rh, region_t region) +{ + return (unsigned) ((region * rh->prime) >> rh->shift) & rh->mask; +} + +static struct dm_region *__rh_lookup(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg; + struct list_head *bucket = rh->buckets + rh_hash(rh, region); + + list_for_each_entry(reg, bucket, hash_list) + if (reg->key == region) + return reg; + + return NULL; +} + +static void __rh_insert(struct dm_region_hash *rh, struct dm_region *reg) +{ + list_add(®->hash_list, rh->buckets + rh_hash(rh, reg->key)); +} + +static struct dm_region *__rh_alloc(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg, *nreg; + + nreg = mempool_alloc(rh->region_pool, GFP_ATOMIC); + if (unlikely(!nreg)) + nreg = kmalloc(sizeof(*nreg), GFP_NOIO | __GFP_NOFAIL); + + nreg->state = rh->log->type->in_sync(rh->log, region, 1) ? + DM_RH_CLEAN : DM_RH_NOSYNC; + nreg->rh = rh; + nreg->key = region; + INIT_LIST_HEAD(&nreg->list); + atomic_set(&nreg->pending, 0); + bio_list_init(&nreg->delayed_bios); + + write_lock_irq(&rh->hash_lock); + reg = __rh_lookup(rh, region); + if (reg) + /* We lost the race. */ + mempool_free(nreg, rh->region_pool); + else { + __rh_insert(rh, nreg); + if (nreg->state == DM_RH_CLEAN) { + spin_lock(&rh->region_lock); + list_add(&nreg->list, &rh->clean_regions); + spin_unlock(&rh->region_lock); + } + + reg = nreg; + } + write_unlock_irq(&rh->hash_lock); + + return reg; +} + +static struct dm_region *__rh_find(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg; + + reg = __rh_lookup(rh, region); + if (!reg) { + read_unlock(&rh->hash_lock); + reg = __rh_alloc(rh, region); + read_lock(&rh->hash_lock); + } + + return reg; +} + +int dm_rh_get_state(struct dm_region_hash *rh, region_t region, int may_block) +{ + int r; + struct dm_region *reg; + + read_lock(&rh->hash_lock); + reg = __rh_lookup(rh, region); + read_unlock(&rh->hash_lock); + + if (reg) + return reg->state; + + /* + * The region wasn't in the hash, so we fall back to the + * dirty log. + */ + r = rh->log->type->in_sync(rh->log, region, may_block); + + /* + * Any error from the dirty log (eg. -EWOULDBLOCK) gets + * taken as a DM_RH_NOSYNC + */ + return r == 1 ? DM_RH_CLEAN : DM_RH_NOSYNC; +} +// EXPORT_SYMBOL_GPL(dm_rh_get_state); + +static void complete_resync_work(struct dm_region *reg, int success) +{ + struct dm_region_hash *rh = reg->rh; + + rh->log->type->set_region_sync(rh->log, reg->key, success); + + /* + * Dispatch the bios before we call 'wake_up_all'. + * This is important because if we are suspending, + * we want to know that recovery is complete and + * the work queue is flushed. If we wake_up_all + * before we dispatch_bios (queue bios and call wake()), + * then we risk suspending before the work queue + * has been properly flushed. + */ + rh->dispatch_bios(rh->context, ®->delayed_bios); + if (atomic_dec_and_test(&rh->recovery_in_flight)) + rh->wakeup_all_recovery_waiters(rh->context); + up(&rh->recovery_count); +} + +/* dm_rh_mark_nosync + * @ms + * @bio + * @done + * @error + * + * The bio was written on some mirror(s) but failed on other mirror(s). + * We can successfully endio the bio but should avoid the region being + * marked clean by setting the state DM_RH_NOSYNC. + * + * This function is _not_ safe in interrupt context! + */ +void dm_rh_mark_nosync(struct dm_region_hash *rh, + struct bio *bio, unsigned done, int error) +{ + unsigned long flags; + struct dm_dirty_log *log = rh->log; + struct dm_region *reg; + region_t region = dm_rh_bio_to_region(rh, bio); + int recovering = 0; + + /* We must inform the log that the sync count has changed. */ + log->type->set_region_sync(log, region, 0); + + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + read_unlock(&rh->hash_lock); + + /* region hash entry should exist because write was in-flight */ + BUG_ON(!reg); + BUG_ON(!list_empty(®->list)); + + spin_lock_irqsave(&rh->region_lock, flags); + /* + * Possible cases: + * 1) DM_RH_DIRTY + * 2) DM_RH_NOSYNC: was dirty, other preceeding writes failed + * 3) DM_RH_RECOVERING: flushing pending writes + * Either case, the region should have not been connected to list. + */ + recovering = (reg->state == DM_RH_RECOVERING); + reg->state = DM_RH_NOSYNC; + BUG_ON(!list_empty(®->list)); + spin_unlock_irqrestore(&rh->region_lock, flags); + + bio_endio(bio, error); + if (recovering) + complete_resync_work(reg, 0); +} +// EXPORT_SYMBOL_GPL(dm_rh_mark_nosync); + +void dm_rh_update_states(struct dm_region_hash *rh, int errors_handled) +{ + struct dm_region *reg, *next; + + LIST_HEAD(clean); + LIST_HEAD(recovered); + LIST_HEAD(failed_recovered); + + /* + * Quickly grab the lists. + */ + write_lock_irq(&rh->hash_lock); + spin_lock(&rh->region_lock); + if (!list_empty(&rh->clean_regions)) { + list_splice_init(&rh->clean_regions, &clean); + + list_for_each_entry(reg, &clean, list) + list_del(®->hash_list); + } + + if (!list_empty(&rh->recovered_regions)) { + list_splice_init(&rh->recovered_regions, &recovered); + + list_for_each_entry(reg, &recovered, list) + list_del(®->hash_list); + } + + if (!list_empty(&rh->failed_recovered_regions)) { + list_splice_init(&rh->failed_recovered_regions, + &failed_recovered); + + list_for_each_entry(reg, &failed_recovered, list) + list_del(®->hash_list); + } + + spin_unlock(&rh->region_lock); + write_unlock_irq(&rh->hash_lock); + + /* + * All the regions on the recovered and clean lists have + * now been pulled out of the system, so no need to do + * any more locking. + */ + list_for_each_entry_safe(reg, next, &recovered, list) { + rh->log->type->clear_region(rh->log, reg->key); + complete_resync_work(reg, 1); + mempool_free(reg, rh->region_pool); + } + + list_for_each_entry_safe(reg, next, &failed_recovered, list) { + complete_resync_work(reg, errors_handled ? 0 : 1); + mempool_free(reg, rh->region_pool); + } + + list_for_each_entry_safe(reg, next, &clean, list) { + rh->log->type->clear_region(rh->log, reg->key); + mempool_free(reg, rh->region_pool); + } + + rh->log->type->flush(rh->log); +} +// EXPORT_SYMBOL_GPL(dm_rh_update_states); + +void dm_rh_inc(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg; + + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + + spin_lock_irq(&rh->region_lock); + atomic_inc(®->pending); + + if (reg->state == DM_RH_CLEAN) { + reg->state = DM_RH_DIRTY; + list_del_init(®->list); /* take off the clean list */ + spin_unlock_irq(&rh->region_lock); + + rh->log->type->mark_region(rh->log, reg->key); + } else + spin_unlock_irq(&rh->region_lock); + + + read_unlock(&rh->hash_lock); +} +// EXPORT_SYMBOL_GPL(dm_rh_inc); + +void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios) +{ + struct bio *bio; + + for (bio = bios->head; bio; bio = bio->bi_next) + dm_rh_inc(rh, dm_rh_bio_to_region(rh, bio)); +} +// EXPORT_SYMBOL_GPL(dm_rh_inc_pending); + +void dm_rh_dec(struct dm_region_hash *rh, region_t region) +{ + unsigned long flags; + struct dm_region *reg; + int should_wake = 0; + + read_lock(&rh->hash_lock); + reg = __rh_lookup(rh, region); + read_unlock(&rh->hash_lock); + + spin_lock_irqsave(&rh->region_lock, flags); + if (atomic_dec_and_test(®->pending)) { + /* + * There is no pending I/O for this region. + * We can move the region to corresponding list for next action. + * At this point, the region is not yet connected to any list. + * + * If the state is DM_RH_NOSYNC, the region should be kept off + * from clean list. + * The hash entry for DM_RH_NOSYNC will remain in memory + * until the region is recovered or the map is reloaded. + */ + + /* do nothing for DM_RH_NOSYNC */ + if (reg->state == DM_RH_RECOVERING) { + list_add_tail(®->list, &rh->quiesced_regions); + } else if (reg->state == DM_RH_DIRTY) { + reg->state = DM_RH_CLEAN; + list_add(®->list, &rh->clean_regions); + } + should_wake = 1; + } + spin_unlock_irqrestore(&rh->region_lock, flags); + + if (should_wake) + rh->wakeup_workers(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_dec); + +/* + * Starts quiescing a region in preparation for recovery. + */ +static int __rh_recovery_prepare(struct dm_region_hash *rh) +{ + int r; + region_t region; + struct dm_region *reg; + + /* + * Ask the dirty log what's next. + */ + r = rh->log->type->get_resync_work(rh->log, ®ion); + if (r <= 0) + return r; + + /* + * Get this region, and start it quiescing by setting the + * recovering flag. + */ + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + read_unlock(&rh->hash_lock); + + spin_lock_irq(&rh->region_lock); + reg->state = DM_RH_RECOVERING; + + /* Already quiesced ? */ + if (atomic_read(®->pending)) + list_del_init(®->list); + else + list_move(®->list, &rh->quiesced_regions); + + spin_unlock_irq(&rh->region_lock); + + return 1; +} + +void dm_rh_recovery_prepare(struct dm_region_hash *rh) +{ + /* Extra reference to avoid race with dm_rh_stop_recovery */ + atomic_inc(&rh->recovery_in_flight); + + while (!down_trylock(&rh->recovery_count)) { + atomic_inc(&rh->recovery_in_flight); + if (__rh_recovery_prepare(rh) <= 0) { + atomic_dec(&rh->recovery_in_flight); + up(&rh->recovery_count); + break; + } + } + + /* Drop the extra reference */ + if (atomic_dec_and_test(&rh->recovery_in_flight)) + rh->wakeup_all_recovery_waiters(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_prepare); + +/* + * Returns any quiesced regions. + */ +struct dm_region *dm_rh_recovery_start(struct dm_region_hash *rh) +{ + struct dm_region *reg = NULL; + + spin_lock_irq(&rh->region_lock); + if (!list_empty(&rh->quiesced_regions)) { + reg = list_entry(rh->quiesced_regions.next, + struct dm_region, list); + list_del_init(®->list); /* remove from the quiesced list */ + } + spin_unlock_irq(&rh->region_lock); + + return reg; +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_start); + +void dm_rh_recovery_end(struct dm_region *reg, int success) +{ + struct dm_region_hash *rh = reg->rh; + + spin_lock_irq(&rh->region_lock); + if (success) + list_add(®->list, ®->rh->recovered_regions); + else { + reg->state = DM_RH_NOSYNC; + list_add(®->list, ®->rh->failed_recovered_regions); + } + spin_unlock_irq(&rh->region_lock); + + rh->wakeup_workers(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_end); + +/* Return recovery in flight count. */ +int dm_rh_recovery_in_flight(struct dm_region_hash *rh) +{ + return atomic_read(&rh->recovery_in_flight); +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_in_flight); + +int dm_rh_flush(struct dm_region_hash *rh) +{ + return rh->log->type->flush(rh->log); +} +// EXPORT_SYMBOL_GPL(dm_rh_flush); + +void dm_rh_delay(struct dm_region_hash *rh, struct bio *bio) +{ + struct dm_region *reg; + + read_lock(&rh->hash_lock); + reg = __rh_find(rh, dm_rh_bio_to_region(rh, bio)); + bio_list_add(®->delayed_bios, bio); + read_unlock(&rh->hash_lock); +} +// EXPORT_SYMBOL_GPL(dm_rh_delay); + +void dm_rh_delay_by_region(struct dm_region_hash *rh, + struct bio *bio, region_t region) +{ + struct dm_region *reg; + + /* FIXME: locking. */ + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + bio_list_add(®->delayed_bios, bio); + read_unlock(&rh->hash_lock); +} +// EXPORT_SYMBOL_GPL(dm_rh_delay_by_region); + +void dm_rh_stop_recovery(struct dm_region_hash *rh) +{ + int i; + + /* wait for any recovering regions */ + for (i = 0; i < rh->max_recovery; i++) + down(&rh->recovery_count); +} +// EXPORT_SYMBOL_GPL(dm_rh_stop_recovery); + +void dm_rh_start_recovery(struct dm_region_hash *rh) +{ + int i; + + for (i = 0; i < rh->max_recovery; i++) + up(&rh->recovery_count); + + rh->wakeup_workers(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_start_recovery); + +MODULE_DESCRIPTION(DM_NAME " region hash"); +MODULE_AUTHOR("Joe Thornber/Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-raid45.h +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-raid45.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen (Mauelshagen@RedHat.com) + * + * Locking definitions for the device-mapper RAID45 target. + * + * This file is released under the GPL. + * + */ + +#ifndef _DM_RAID45_H +#define _DM_RAID45_H + +/* Factor out to dm.h! */ +#define STR_LEN(ptr, str) (ptr), (str), strlen((ptr)) + +enum dm_lock_type { DM_RAID45_EX, DM_RAID45_SHARED }; + +struct dm_raid45_locking_type { + /* Request a lock on a stripe. */ + void* (*lock)(sector_t key, enum dm_lock_type type); + + /* Release a lock on a stripe. */ + void (*unlock)(void *lock_handle); +}; + +#endif --- linux-2.6.32.orig/ubuntu/dm-raid4-5/Makefile +++ linux-2.6.32/ubuntu/dm-raid4-5/Makefile @@ -0,0 +1,4 @@ +EXTRA_CFLAGS += -I$(srctree)/drivers/md + +obj-$(CONFIG_DM_RAID45) := dm-raid45.o +dm-raid45-objs := dm-raid4-5.o dm-memcache.o dm-region-hash.o dm-message.o --- linux-2.6.32.orig/ubuntu/dm-raid4-5/dm-region-hash.h +++ linux-2.6.32/ubuntu/dm-raid4-5/dm-region-hash.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2003 Sistina Software Limited. + * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * + * Device-Mapper dirty region hash interface. + * + * This file is released under the GPL. + */ + +#ifndef DM_REGION_HASH_H +#define DM_REGION_HASH_H + +#include + +/*----------------------------------------------------------------- + * Region hash + *----------------------------------------------------------------*/ +struct dm_region_hash; +struct dm_region; + +/* + * States a region can have. + */ +enum dm_rh_region_states { + DM_RH_CLEAN = 0x01, /* No writes in flight. */ + DM_RH_DIRTY = 0x02, /* Writes in flight. */ + DM_RH_NOSYNC = 0x04, /* Out of sync. */ + DM_RH_RECOVERING = 0x08, /* Under resynchronization. */ +}; + +/* + * Region hash create/destroy. + */ +struct bio_list; +struct dm_region_hash *dm_region_hash_create( + void *context, void (*dispatch_bios)(void *context, + struct bio_list *bios), + void (*wakeup_workers)(void *context), + void (*wakeup_all_recovery_waiters)(void *context), + sector_t target_begin, unsigned max_recovery, + struct dm_dirty_log *log, uint32_t region_size, + region_t nr_regions); +void dm_region_hash_destroy(struct dm_region_hash *rh); + +struct dm_dirty_log *dm_rh_dirty_log(struct dm_region_hash *rh); + +/* + * Conversion functions. + */ +region_t dm_rh_bio_to_region(struct dm_region_hash *rh, struct bio *bio); +sector_t dm_rh_region_to_sector(struct dm_region_hash *rh, region_t region); +region_t dm_rh_sector_to_region(struct dm_region_hash *rh, sector_t sector); +void *dm_rh_region_context(struct dm_region *reg); + +/* + * Get region size and key (ie. number of the region). + */ +sector_t dm_rh_get_region_size(struct dm_region_hash *rh); +region_t dm_rh_get_region_key(struct dm_region *reg); + +/* + * Get/set/update region state (and dirty log). + * + */ +int dm_rh_get_state(struct dm_region_hash *rh, region_t region, int may_block); +void dm_rh_set_state(struct dm_region_hash *rh, region_t region, + enum dm_rh_region_states state, int may_block); + +/* Non-zero errors_handled leaves the state of the region NOSYNC */ +void dm_rh_update_states(struct dm_region_hash *rh, int errors_handled); + +/* Flush the region hash and dirty log. */ +int dm_rh_flush(struct dm_region_hash *rh); + +/* Inc/dec pending count on regions. */ +void dm_rh_inc(struct dm_region_hash *rh, region_t region); +void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios); +void dm_rh_dec(struct dm_region_hash *rh, region_t region); + +/* Delay bios on regions. */ +void dm_rh_delay(struct dm_region_hash *rh, struct bio *bio); +void dm_rh_delay_by_region(struct dm_region_hash *rh, struct bio *bio, + region_t region); + +void dm_rh_mark_nosync(struct dm_region_hash *rh, + struct bio *bio, unsigned done, int error); + +/* + * Region recovery control. + */ + +/* Prepare some regions for recovery by starting to quiesce them. */ +void dm_rh_recovery_prepare(struct dm_region_hash *rh); + +/* Try fetching a quiesced region for recovery. */ +struct dm_region *dm_rh_recovery_start(struct dm_region_hash *rh); + +/* Report recovery end on a region. */ +void dm_rh_recovery_end(struct dm_region *reg, int error); + +/* Returns number of regions with recovery work outstanding. */ +int dm_rh_recovery_in_flight(struct dm_region_hash *rh); + +/* Start/stop recovery. */ +void dm_rh_start_recovery(struct dm_region_hash *rh); +void dm_rh_stop_recovery(struct dm_region_hash *rh); + +#endif /* DM_REGION_HASH_H */ --- linux-2.6.32.orig/ubuntu/iscsitarget/param.c +++ linux-2.6.32/ubuntu/iscsitarget/param.c @@ -0,0 +1,205 @@ +/* + * (C) 2005 FUJITA Tomonori + * + * This code is licenced under the GPL. + */ + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "digest.h" + +struct target_type *target_type_array[] = { + &disk_ops, +}; + +#define CHECK_PARAM(info, iparam, word, min, max) \ +do { \ + if (!info->partial || (info->partial & 1 << key_##word)) \ + if (iparam[key_##word] < min || \ + iparam[key_##word] > max) { \ + eprintk("%s: %u is out of range (%u %u)\n", \ + #word, iparam[key_##word], min, max); \ + iparam[key_##word] = min; \ + } \ +} while (0) + +#define SET_PARAM(param, info, iparam, word) \ +({ \ + int changed = 0; \ + if (!info->partial || (info->partial & 1 << key_##word)) { \ + if (param->word != iparam[key_##word]) \ + changed = 1; \ + param->word = iparam[key_##word]; \ + } \ + changed; \ +}) + +#define GET_PARAM(param, info, iparam, word) \ +do { \ + iparam[key_##word] = param->word; \ +} while (0) + +static void sess_param_check(struct iscsi_param_info *info) +{ + u32 *iparam = info->session_param; + + CHECK_PARAM(info, iparam, max_connections, 1, 1); + CHECK_PARAM(info, iparam, max_recv_data_length, 512, + (u32) ((ISCSI_CONN_IOV_MAX - 1) * PAGE_CACHE_SIZE)); + CHECK_PARAM(info, iparam, max_xmit_data_length, 512, + (u32) ((ISCSI_CONN_IOV_MAX - 1) * PAGE_CACHE_SIZE)); + CHECK_PARAM(info, iparam, error_recovery_level, 0, 0); + CHECK_PARAM(info, iparam, data_pdu_inorder, 1, 1); + CHECK_PARAM(info, iparam, data_sequence_inorder, 1, 1); + + digest_alg_available(&iparam[key_header_digest]); + digest_alg_available(&iparam[key_data_digest]); + + CHECK_PARAM(info, iparam, ofmarker, 0, 0); + CHECK_PARAM(info, iparam, ifmarker, 0, 0); +} + +static void sess_param_set(struct iscsi_sess_param *param, struct iscsi_param_info *info) +{ + u32 *iparam = info->session_param; + + SET_PARAM(param, info, iparam, initial_r2t); + SET_PARAM(param, info, iparam, immediate_data); + SET_PARAM(param, info, iparam, max_connections); + SET_PARAM(param, info, iparam, max_recv_data_length); + SET_PARAM(param, info, iparam, max_xmit_data_length); + SET_PARAM(param, info, iparam, max_burst_length); + SET_PARAM(param, info, iparam, first_burst_length); + SET_PARAM(param, info, iparam, default_wait_time); + SET_PARAM(param, info, iparam, default_retain_time); + SET_PARAM(param, info, iparam, max_outstanding_r2t); + SET_PARAM(param, info, iparam, data_pdu_inorder); + SET_PARAM(param, info, iparam, data_sequence_inorder); + SET_PARAM(param, info, iparam, error_recovery_level); + SET_PARAM(param, info, iparam, header_digest); + SET_PARAM(param, info, iparam, data_digest); + SET_PARAM(param, info, iparam, ofmarker); + SET_PARAM(param, info, iparam, ifmarker); + SET_PARAM(param, info, iparam, ofmarkint); + SET_PARAM(param, info, iparam, ifmarkint); +} + +static void sess_param_get(struct iscsi_sess_param *param, struct iscsi_param_info *info) +{ + u32 *iparam = info->session_param; + + GET_PARAM(param, info, iparam, initial_r2t); + GET_PARAM(param, info, iparam, immediate_data); + GET_PARAM(param, info, iparam, max_connections); + GET_PARAM(param, info, iparam, max_recv_data_length); + GET_PARAM(param, info, iparam, max_xmit_data_length); + GET_PARAM(param, info, iparam, max_burst_length); + GET_PARAM(param, info, iparam, first_burst_length); + GET_PARAM(param, info, iparam, default_wait_time); + GET_PARAM(param, info, iparam, default_retain_time); + GET_PARAM(param, info, iparam, max_outstanding_r2t); + GET_PARAM(param, info, iparam, data_pdu_inorder); + GET_PARAM(param, info, iparam, data_sequence_inorder); + GET_PARAM(param, info, iparam, error_recovery_level); + GET_PARAM(param, info, iparam, header_digest); + GET_PARAM(param, info, iparam, data_digest); + GET_PARAM(param, info, iparam, ofmarker); + GET_PARAM(param, info, iparam, ifmarker); + GET_PARAM(param, info, iparam, ofmarkint); + GET_PARAM(param, info, iparam, ifmarkint); +} + +static void trgt_param_check(struct iscsi_param_info *info) +{ + u32 *iparam = info->target_param; + + CHECK_PARAM(info, iparam, wthreads, MIN_NR_WTHREADS, MAX_NR_WTHREADS); + CHECK_PARAM(info, iparam, target_type, 0, + (unsigned int) ARRAY_SIZE(target_type_array) - 1); + CHECK_PARAM(info, iparam, queued_cmnds, MIN_NR_QUEUED_CMNDS, + MAX_NR_QUEUED_CMNDS); + CHECK_PARAM(info, iparam, nop_interval, MIN_NOP_INTERVAL, + MAX_NOP_INTERVAL); + CHECK_PARAM(info, iparam, nop_timeout, MIN_NOP_TIMEOUT, + MAX_NOP_TIMEOUT); +} + +static void trgt_param_set(struct iscsi_target *target, struct iscsi_param_info *info) +{ + struct iscsi_trgt_param *param = &target->trgt_param; + u32 *iparam = info->target_param; + + if (!worker_thread_pool && + SET_PARAM(param, info, iparam, wthreads)) + wthread_start(target->wthread_info, + target->trgt_param.wthreads, target->tid); + SET_PARAM(param, info, iparam, target_type); + SET_PARAM(param, info, iparam, queued_cmnds); + SET_PARAM(param, info, iparam, nop_interval); + SET_PARAM(param, info, iparam, nop_timeout); +} + +static void trgt_param_get(struct iscsi_trgt_param *param, struct iscsi_param_info *info) +{ + u32 *iparam = info->target_param; + + GET_PARAM(param, info, iparam, wthreads); + GET_PARAM(param, info, iparam, target_type); + GET_PARAM(param, info, iparam, queued_cmnds); + GET_PARAM(param, info, iparam, nop_interval); + GET_PARAM(param, info, iparam, nop_timeout); +} + +static int trgt_param(struct iscsi_target *target, struct iscsi_param_info *info, int set) +{ + + if (set) { + trgt_param_check(info); + trgt_param_set(target, info); + } else + trgt_param_get(&target->trgt_param, info); + + return 0; +} + +static int sess_param(struct iscsi_target *target, struct iscsi_param_info *info, int set) +{ + struct iscsi_session *session = NULL; + struct iscsi_sess_param *param; + int err = -ENOENT; + + if (set) + sess_param_check(info); + + if (info->sid) { + if (!(session = session_lookup(target, info->sid))) + goto out; + param = &session->param; + } else { + param = &target->sess_param; + } + + if (set) { + sess_param_set(param, info); + show_param(param); + } else + sess_param_get(param, info); + + err = 0; +out: + return err; +} + +int iscsi_param_set(struct iscsi_target *target, struct iscsi_param_info *info, int set) +{ + int err; + + if (info->param_type == key_session) + err = sess_param(target, info, set); + else if (info->param_type == key_target) + err = trgt_param(target, info, set); + else + err = -EINVAL; + + return err; +} --- linux-2.6.32.orig/ubuntu/iscsitarget/nthread.c +++ linux-2.6.32/ubuntu/iscsitarget/nthread.c @@ -0,0 +1,788 @@ +/* + * Network thread. + * (C) 2004 - 2005 FUJITA Tomonori + * (C) 2008 Arne Redlich + * + * This code is licenced under the GPL. + */ + +#include +#include +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "digest.h" + +enum daemon_state_bit { + D_ACTIVE, + D_DATA_READY, +}; + +void __nthread_wakeup(struct network_thread_info *info) +{ + set_bit(D_DATA_READY, &info->flags); + wake_up_process(info->task); +} + +void nthread_wakeup(struct iscsi_target *target) +{ + struct network_thread_info *info = &target->nthread_info; + + spin_lock_bh(&info->nthread_lock); + __nthread_wakeup(info); + spin_unlock_bh(&info->nthread_lock); +} + +static inline void iscsi_conn_init_read(struct iscsi_conn *conn, void *data, size_t len) +{ + len = (len + 3) & -4; // XXX ??? + conn->read_iov[0].iov_base = data; + conn->read_iov[0].iov_len = len; + conn->read_msg.msg_iov = conn->read_iov; + conn->read_msg.msg_iovlen = 1; + conn->read_size = (len + 3) & -4; +} + +static void iscsi_conn_read_ahs(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd) +{ + cmnd->pdu.ahs = kmalloc(cmnd->pdu.ahssize, __GFP_NOFAIL|GFP_KERNEL); + assert(cmnd->pdu.ahs); + iscsi_conn_init_read(conn, cmnd->pdu.ahs, cmnd->pdu.ahssize); +} + +static struct iscsi_cmnd * iscsi_get_send_cmnd(struct iscsi_conn *conn) +{ + struct iscsi_cmnd *cmnd = NULL; + + spin_lock(&conn->list_lock); + if (!list_empty(&conn->write_list)) { + cmnd = list_entry(conn->write_list.next, struct iscsi_cmnd, list); + list_del_init(&cmnd->list); + } + spin_unlock(&conn->list_lock); + + return cmnd; +} + +static int is_data_available(struct iscsi_conn *conn) +{ + int avail, res; + mm_segment_t oldfs; + struct socket *sock = conn->sock; + + oldfs = get_fs(); + set_fs(get_ds()); + res = sock->ops->ioctl(sock, SIOCINQ, (unsigned long) &avail); + set_fs(oldfs); + return (res >= 0) ? avail : res; +} + +static void forward_iov(struct msghdr *msg, int len) +{ + while (msg->msg_iov->iov_len <= len) { + len -= msg->msg_iov->iov_len; + msg->msg_iov++; + msg->msg_iovlen--; + } + + msg->msg_iov->iov_base = (char *) msg->msg_iov->iov_base + len; + msg->msg_iov->iov_len -= len; +} + +static int do_recv(struct iscsi_conn *conn, int state) +{ + mm_segment_t oldfs; + struct msghdr msg; + struct iovec iov[ISCSI_CONN_IOV_MAX]; + int i, len, res; + + if (!test_bit(CONN_ACTIVE, &conn->state)) { + res = -EIO; + goto out; + } + + if (is_data_available(conn) <= 0) { + res = -EAGAIN; + goto out; + } + + msg.msg_iov = iov; + msg.msg_iovlen = min_t(size_t, conn->read_msg.msg_iovlen, ISCSI_CONN_IOV_MAX); + for (i = 0, len = 0; i < msg.msg_iovlen; i++) { + iov[i] = conn->read_msg.msg_iov[i]; + len += iov[i].iov_len; + } + + oldfs = get_fs(); + set_fs(get_ds()); + res = sock_recvmsg(conn->sock, &msg, len, MSG_DONTWAIT | MSG_NOSIGNAL); + set_fs(oldfs); + + if (res <= 0) { + switch (res) { + case -EAGAIN: + case -ERESTARTSYS: + break; + default: + eprintk("%d\n", res); + conn_close(conn); + break; + } + } else { + conn->read_size -= res; + if (conn->read_size) + forward_iov(&conn->read_msg, res); + else + conn->read_state = state; + } + +out: + dprintk(D_IOD, "%d\n", res); + + return res; +} + +enum rx_state { + RX_INIT_BHS, /* Must be zero. */ + RX_BHS, + + RX_INIT_AHS, + RX_AHS, + + RX_INIT_HDIGEST, + RX_HDIGEST, + RX_CHECK_HDIGEST, + + RX_INIT_DATA, + RX_DATA, + + RX_INIT_DDIGEST, + RX_DDIGEST, + RX_CHECK_DDIGEST, + + RX_END, +}; + +static void rx_ddigest(struct iscsi_conn *conn, int state) +{ + struct iscsi_cmnd *cmnd = conn->read_cmnd; + int res = digest_rx_data(cmnd); + + if (!res) + conn->read_state = state; + else + conn_close(conn); +} + +static void rx_hdigest(struct iscsi_conn *conn, int state) +{ + struct iscsi_cmnd *cmnd = conn->read_cmnd; + int res = digest_rx_header(cmnd); + + if (!res) + conn->read_state = state; + else + conn_close(conn); +} + +static struct iscsi_cmnd *create_cmnd(struct iscsi_conn *conn) +{ + struct iscsi_cmnd *cmnd; + + cmnd = cmnd_alloc(conn, 1); + iscsi_conn_init_read(cmnd->conn, &cmnd->pdu.bhs, sizeof(cmnd->pdu.bhs)); + conn->read_state = RX_BHS; + + return cmnd; +} + +static int recv(struct iscsi_conn *conn) +{ + struct iscsi_cmnd *cmnd = conn->read_cmnd; + int hdigest, ddigest, res = 1; + + if (!test_bit(CONN_ACTIVE, &conn->state)) + return -EIO; + + hdigest = conn->hdigest_type & DIGEST_NONE ? 0 : 1; + ddigest = conn->ddigest_type & DIGEST_NONE ? 0 : 1; + + switch (conn->read_state) { + case RX_INIT_BHS: + assert(!cmnd); + cmnd = conn->read_cmnd = create_cmnd(conn); + case RX_BHS: + res = do_recv(conn, RX_INIT_AHS); + if (res <= 0 || conn->read_state != RX_INIT_AHS) + break; + case RX_INIT_AHS: + iscsi_cmnd_get_length(&cmnd->pdu); + if (cmnd->pdu.ahssize) { + iscsi_conn_read_ahs(conn, cmnd); + conn->read_state = RX_AHS; + } else + conn->read_state = hdigest ? RX_INIT_HDIGEST : RX_INIT_DATA; + + if (conn->read_state != RX_AHS) + break; + case RX_AHS: + res = do_recv(conn, hdigest ? RX_INIT_HDIGEST : RX_INIT_DATA); + if (res <= 0 || conn->read_state != RX_INIT_HDIGEST) + break; + case RX_INIT_HDIGEST: + iscsi_conn_init_read(conn, &cmnd->hdigest, sizeof(u32)); + conn->read_state = RX_HDIGEST; + case RX_HDIGEST: + res = do_recv(conn, RX_CHECK_HDIGEST); + if (res <= 0 || conn->read_state != RX_CHECK_HDIGEST) + break; + case RX_CHECK_HDIGEST: + rx_hdigest(conn, RX_INIT_DATA); + if (conn->read_state != RX_INIT_DATA) + break; + case RX_INIT_DATA: + cmnd_rx_start(cmnd); + conn->read_state = cmnd->pdu.datasize ? RX_DATA : RX_END; + if (conn->read_state != RX_DATA) + break; + case RX_DATA: + res = do_recv(conn, ddigest ? RX_INIT_DDIGEST : RX_END); + if (res <= 0 || conn->read_state != RX_INIT_DDIGEST) + break; + case RX_INIT_DDIGEST: + iscsi_conn_init_read(conn, &cmnd->ddigest, sizeof(u32)); + conn->read_state = RX_DDIGEST; + case RX_DDIGEST: + res = do_recv(conn, RX_CHECK_DDIGEST); + if (res <= 0 || conn->read_state != RX_CHECK_DDIGEST) + break; + case RX_CHECK_DDIGEST: + rx_ddigest(conn, RX_END); + break; + default: + eprintk("%d %d %x\n", res, conn->read_state, cmnd_opcode(cmnd)); + assert(0); + } + + if (res <= 0) + return res; + + if (conn->read_state != RX_END) + return res; + + if (conn->read_size) { + eprintk("%d %x %d\n", res, cmnd_opcode(cmnd), conn->read_size); + assert(0); + } + + cmnd_rx_end(cmnd); + if (conn->read_size) { + eprintk("%x %d\n", cmnd_opcode(cmnd), conn->read_size); + conn->read_state = RX_DATA; + return 1; + } + + conn->read_cmnd = NULL; + conn->read_state = RX_INIT_BHS; + + return 0; +} + +/* + * @locking: grabs the target's nthread_lock to protect it from races with + * iet_write_space() + */ +static void set_conn_wspace_wait(struct iscsi_conn *conn) +{ + struct network_thread_info *info = &conn->session->target->nthread_info; + struct sock *sk = conn->sock->sk; + + spin_lock_bh(&info->nthread_lock); + + if (sk_stream_wspace(sk) < sk_stream_min_wspace(sk)) + set_bit(CONN_WSPACE_WAIT, &conn->state); + + spin_unlock_bh(&info->nthread_lock); +} + +/* This is taken from the Ardis code. */ +static int write_data(struct iscsi_conn *conn) +{ + mm_segment_t oldfs; + struct file *file; + struct socket *sock; + ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); + struct tio *tio; + struct iovec *iop; + int saved_size, size, sendsize; + int offset, idx; + int flags, res; + + file = conn->file; + saved_size = size = conn->write_size; + iop = conn->write_iop; + + if (iop) while (1) { + loff_t off = 0; + unsigned long count; + struct iovec *vec; + int rest; + + vec = iop; + for (count = 0; vec->iov_len; count++, vec++) + ; + oldfs = get_fs(); + set_fs(KERNEL_DS); + res = vfs_writev(file, (struct iovec __user *) iop, count, &off); + set_fs(oldfs); + dprintk(D_DATA, "%#Lx:%u: %d(%ld)\n", + (unsigned long long) conn->session->sid, conn->cid, + res, (long) iop->iov_len); + if (unlikely(res <= 0)) { + if (res == -EAGAIN || res == -EINTR) { + conn->write_iop = iop; + goto out_iov; + } + goto err; + } + + rest = res; + size -= res; + while (iop->iov_len <= rest && rest) { + rest -= iop->iov_len; + iop++; + } + iop->iov_base += rest; + iop->iov_len -= rest; + + if (!iop->iov_len) { + conn->write_iop = NULL; + if (size) + break; + goto out_iov; + } + } + + if (!(tio = conn->write_tcmnd)) { + eprintk("%s\n", "warning data missing!"); + return 0; + } + offset = conn->write_offset; + idx = offset >> PAGE_CACHE_SHIFT; + offset &= ~PAGE_CACHE_MASK; + + sock = conn->sock; + sendpage = sock->ops->sendpage ? : sock_no_sendpage; + flags = MSG_DONTWAIT; + + while (1) { + sendsize = PAGE_CACHE_SIZE - offset; + if (size <= sendsize) { + res = sendpage(sock, tio->pvec[idx], offset, size, flags); + dprintk(D_DATA, "%s %#Lx:%u: %d(%lu,%u,%u)\n", + sock->ops->sendpage ? "sendpage" : "writepage", + (unsigned long long ) conn->session->sid, conn->cid, + res, tio->pvec[idx]->index, offset, size); + if (unlikely(res <= 0)) { + if (res == -EAGAIN || res == -EINTR) { + goto out; + } + goto err; + } + if (res == size) { + conn->write_tcmnd = NULL; + conn->write_size = 0; + return saved_size; + } + offset += res; + size -= res; + continue; + } + + res = sendpage(sock, tio->pvec[idx], offset,sendsize, flags | MSG_MORE); + dprintk(D_DATA, "%s %#Lx:%u: %d(%lu,%u,%u)\n", + sock->ops->sendpage ? "sendpage" : "writepage", + (unsigned long long ) conn->session->sid, conn->cid, + res, tio->pvec[idx]->index, offset, sendsize); + if (unlikely(res <= 0)) { + if (res == -EAGAIN || res == -EINTR) { + goto out; + } + goto err; + } + if (res == sendsize) { + idx++; + offset = 0; + } else + offset += res; + size -= res; + } + out: + conn->write_offset = (idx << PAGE_CACHE_SHIFT) + offset; + out_iov: + conn->write_size = size; + if (res == -EAGAIN) { + set_conn_wspace_wait(conn); + if (saved_size == size) + return res; + } + + return saved_size - size; + + err: + eprintk("error %d at %#Lx:%u\n", res, + (unsigned long long) conn->session->sid, conn->cid); + return res; +} + +static void exit_tx(struct iscsi_conn *conn, int res) +{ + if (res > 0) + return; + + switch (res) { + case -EAGAIN: + case -ERESTARTSYS: + break; + default: + eprintk("%d %d %d\n", conn->write_size, conn->write_state, res); + conn_close(conn); + break; + } +} + +static int tx_ddigest(struct iscsi_cmnd *cmnd, int state) +{ + int res, rest = cmnd->conn->write_size; + struct msghdr msg = {.msg_flags = MSG_NOSIGNAL | MSG_DONTWAIT}; + struct kvec iov; + + iov.iov_base = (char *) (&cmnd->ddigest) + (sizeof(u32) - rest); + iov.iov_len = rest; + + res = kernel_sendmsg(cmnd->conn->sock, &msg, &iov, 1, rest); + + if (res > 0) { + cmnd->conn->write_size -= res; + if (!cmnd->conn->write_size) + cmnd->conn->write_state = state; + } else + exit_tx(cmnd->conn, res); + + return res; +} + +static void init_tx_hdigest(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + struct iovec *iop; + + if (conn->hdigest_type & DIGEST_NONE) + return; + + digest_tx_header(cmnd); + + for (iop = conn->write_iop; iop->iov_len; iop++) + ; + iop->iov_base = &(cmnd->hdigest); + iop->iov_len = sizeof(u32); + conn->write_size += sizeof(u32); + iop++; + iop->iov_len = 0; + + return; +} + +enum tx_state { + TX_INIT, /* Must be zero. */ + TX_BHS_DATA, + TX_INIT_DDIGEST, + TX_DDIGEST, + TX_END, +}; + +static int do_send(struct iscsi_conn *conn, int state) +{ + int res; + + res = write_data(conn); + + if (res > 0) { + if (!conn->write_size) + conn->write_state = state; + } else + exit_tx(conn, res); + + return res; +} + +static int send(struct iscsi_conn *conn) +{ + struct iscsi_cmnd *cmnd = conn->write_cmnd; + int ddigest, res = 0; + + ddigest = conn->ddigest_type != DIGEST_NONE ? 1 : 0; + + switch (conn->write_state) { + case TX_INIT: + assert(!cmnd); + cmnd = conn->write_cmnd = iscsi_get_send_cmnd(conn); + if (!cmnd) + return 0; + cmnd_tx_start(cmnd); + init_tx_hdigest(cmnd); + conn->write_state = TX_BHS_DATA; + case TX_BHS_DATA: + res = do_send(conn, ddigest && cmnd->pdu.datasize ? TX_INIT_DDIGEST : TX_END); + if (res <= 0 || conn->write_state != TX_INIT_DDIGEST) + break; + case TX_INIT_DDIGEST: + digest_tx_data(cmnd); + assert(!cmnd->conn->write_size); + cmnd->conn->write_size += sizeof(u32); + conn->write_state = TX_DDIGEST; + case TX_DDIGEST: + res = tx_ddigest(cmnd, TX_END); + break; + default: + eprintk("%d %d %x\n", res, conn->write_state, cmnd_opcode(cmnd)); + assert(0); + } + + if (res <= 0) + return res; + + if (conn->write_state != TX_END) + return res; + + if (conn->write_size) { + eprintk("%d %x %u\n", res, cmnd_opcode(cmnd), conn->write_size); + assert(!conn->write_size); + } + cmnd_tx_end(cmnd); + cmnd_release(cmnd, 0); + conn->write_cmnd = NULL; + conn->write_state = TX_INIT; + + return 0; +} + +static void conn_nop_timeout(unsigned long data) +{ + struct iscsi_conn *conn = (struct iscsi_conn *)data; + + if (test_bit(CONN_ACTIVE, &conn->state)) + set_bit(CONN_NEED_NOP_IN, &conn->state); + + dprintk(D_THREAD, "conn %llu:%hu, NOP timer %p\n", conn->session->sid, + conn->cid, &conn->nop_timer); + + nthread_wakeup(conn->session->target); +} + +static void conn_reset_nop_timer(struct iscsi_conn *conn) +{ + struct iscsi_target *target = conn->session->target; + + if (target->trgt_param.nop_interval) + mod_timer(&conn->nop_timer, + jiffies + HZ * target->trgt_param.nop_interval); +} + +static void conn_start_nop_timer(struct iscsi_conn *conn) +{ + struct iscsi_target *target = conn->session->target; + + if (!target->trgt_param.nop_interval || timer_pending(&conn->nop_timer)) + return; + + conn->nop_timer.data = (unsigned long)conn; + conn->nop_timer.function = conn_nop_timeout; + + dprintk(D_THREAD, "conn %llu:%hu, NOP timer %p\n", conn->session->sid, + conn->cid, &conn->nop_timer); + + mod_timer(&conn->nop_timer, + jiffies + HZ * target->trgt_param.nop_interval); +} + +static void process_io(struct iscsi_conn *conn) +{ + struct iscsi_target *target = conn->session->target; + int res, wakeup = 0; + + res = recv(conn); + + if (is_data_available(conn) > 0 || res > 0) { + conn_reset_nop_timer(conn); + wakeup = 1; + } + + if (!test_bit(CONN_ACTIVE, &conn->state)) { + wakeup = 1; + goto out; + } + + if (test_bit(CONN_WSPACE_WAIT, &conn->state)) + goto out; + + res = send(conn); + + if (!list_empty(&conn->write_list) || conn->write_cmnd) { + conn_reset_nop_timer(conn); + wakeup = 1; + } + +out: + if (wakeup) + nthread_wakeup(target); + else if (test_and_clear_bit(CONN_NEED_NOP_IN, &conn->state)) { + send_nop_in(conn); + nthread_wakeup(target); + } else + conn_start_nop_timer(conn); + + return; +} + +static void close_conn(struct iscsi_conn *conn) +{ + struct iscsi_session *session = conn->session; + struct iscsi_target *target = conn->session->target; + struct iscsi_cmnd *cmnd; + + if (target->trgt_param.nop_interval) + del_timer_sync(&conn->nop_timer); + + conn->sock->ops->shutdown(conn->sock, 2); + + write_lock_bh(&conn->sock->sk->sk_callback_lock); + conn->sock->sk->sk_state_change = target->nthread_info.old_state_change; + conn->sock->sk->sk_data_ready = target->nthread_info.old_data_ready; + conn->sock->sk->sk_write_space = target->nthread_info.old_write_space; + write_unlock_bh(&conn->sock->sk->sk_callback_lock); + + fput(conn->file); + conn->file = NULL; + conn->sock = NULL; + + while (atomic_read(&conn->nr_busy_cmnds)) + yield(); + + while (!list_empty(&conn->pdu_list)) { + cmnd = list_entry(conn->pdu_list.next, struct iscsi_cmnd, conn_list); + + list_del_init(&cmnd->list); + cmnd_release(cmnd, 1); + } + + if (atomic_read(&conn->nr_cmnds)) { + eprintk("%u\n", atomic_read(&conn->nr_cmnds)); + list_for_each_entry(cmnd, &conn->pdu_list, conn_list) + eprintk("%x %x\n", cmnd_opcode(cmnd), cmnd_itt(cmnd)); + assert(0); + } + + event_send(target->tid, session->sid, conn->cid, E_CONN_CLOSE, 0); + conn_free(conn); + + if (list_empty(&session->conn_list)) { + if (session->done) + complete(session->done); + else + session_del(target, session->sid); + } +} + +static int istd(void *arg) +{ + struct iscsi_target *target = arg; + struct network_thread_info *info = &target->nthread_info; + struct iscsi_conn *conn, *tmp; + + __set_current_state(TASK_RUNNING); + do { + spin_lock_bh(&info->nthread_lock); + __set_current_state(TASK_INTERRUPTIBLE); + + if (!test_bit(D_DATA_READY, &info->flags)) { + spin_unlock_bh(&info->nthread_lock); + schedule(); + spin_lock_bh(&info->nthread_lock); + } + __set_current_state(TASK_RUNNING); + clear_bit(D_DATA_READY, &info->flags); + spin_unlock_bh(&info->nthread_lock); + + target_lock(target, 0); + list_for_each_entry_safe(conn, tmp, &info->active_conns, poll_list) { + if (test_bit(CONN_ACTIVE, &conn->state)) + process_io(conn); + else + close_conn(conn); + } + target_unlock(target); + + } while (!kthread_should_stop()); + + return 0; +} + +int nthread_init(struct iscsi_target *target) +{ + struct network_thread_info *info = &target->nthread_info; + + info->flags = 0; + info->task = NULL; + + info->old_state_change = NULL; + info->old_data_ready = NULL; + info->old_write_space = NULL; + + INIT_LIST_HEAD(&info->active_conns); + + spin_lock_init(&info->nthread_lock); + + return 0; +} + +int nthread_start(struct iscsi_target *target) +{ + int err = 0; + struct network_thread_info *info = &target->nthread_info; + struct task_struct *task; + + if (info->task) { + eprintk("Target (%u) already runs\n", target->tid); + return -EALREADY; + } + + task = kthread_run(istd, target, "istd%d", target->tid); + + if (IS_ERR(task)) + err = PTR_ERR(task); + else + info->task = task; + + return err; +} + +int nthread_stop(struct iscsi_target *target) +{ + int err; + struct network_thread_info *info = &target->nthread_info; + + if (!info->task) + return -ESRCH; + + err = kthread_stop(info->task); + + if (err < 0 && err != -EINTR) + return err; + + info->task = NULL; + + return 0; +} --- linux-2.6.32.orig/ubuntu/iscsitarget/iotype.c +++ linux-2.6.32/ubuntu/iscsitarget/iotype.c @@ -0,0 +1,110 @@ +/* + * Manager for various I/O types. + * (C) 2004 - 2005 FUJITA Tomonori + * This code is licenced under the GPL. + */ + +#include "iscsi.h" +#include "iotype.h" +#include "iscsi_dbg.h" + +static LIST_HEAD(iotypes); +static rwlock_t iotypes_lock = RW_LOCK_UNLOCKED; + +static struct iotype *find_iotype(const char *name) +{ + struct iotype *iot = NULL; + + list_for_each_entry(iot, &iotypes, iot_list) { + if (strcmp(iot->name, name) == 0) + return iot; + } + return NULL; +} + +struct iotype *get_iotype(const char *name) +{ + struct iotype *iot; + + read_lock(&iotypes_lock); + iot = find_iotype(name); + read_unlock(&iotypes_lock); + + return iot; +} + +void put_iotype(struct iotype *iot) +{ + if (!iot) + return; + return; +} + +static int register_iotype(struct iotype *iot) +{ + int err = 0; + struct iotype *p; + + write_lock(&iotypes_lock); + + p = find_iotype(iot->name); + if (p) + err = -EBUSY; + else + list_add_tail(&iot->iot_list, &iotypes); + + write_unlock(&iotypes_lock); + + return err; +} + +static int unregister_iotype(struct iotype *iot) +{ + int err = 0; + struct iotype *p; + + write_lock(&iotypes_lock); + + p = find_iotype(iot->name); + if (p && p == iot) + list_del_init(&iot->iot_list); + else + err = -EINVAL; + + write_unlock(&iotypes_lock); + + + return err; +} + +struct iotype *iotype_array[] = { + &fileio, + &blockio, + &nullio, +}; + +int iotype_init(void) +{ + int i, err; + + for (i = 0; i < ARRAY_SIZE(iotype_array); i++) { + if (!(err = register_iotype(iotype_array[i]))) + iprintk("Registered io type %s\n", + iotype_array[i]->name); + else { + eprintk("Failed to register io type %s\n", + iotype_array[i]->name); + break; + } + } + + return err; +} + +void iotype_exit(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(iotype_array); i++) + unregister_iotype(iotype_array[i]); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/iscsi_hdr.h +++ linux-2.6.32/ubuntu/iscsitarget/iscsi_hdr.h @@ -0,0 +1,509 @@ +/* + * Copyright (C) 2002-2003 Ardis Technolgies + * + * Released under the terms of the GNU GPL v2.0. + */ + +#ifndef __ISCSI_HDR_H__ +#define __ISCSI_HDR_H__ + +#include +#include + +#define ISCSI_VERSION 0 + +#ifndef __packed +#define __packed __attribute__ ((packed)) +#endif + +struct iscsi_hdr { + u8 opcode; /* 0 */ + u8 flags; + u8 spec1[2]; +#if defined(__BIG_ENDIAN_BITFIELD) + struct { /* 4 */ + unsigned ahslength : 8; + unsigned datalength : 24; + } length; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + u32 length; /* 4 */ +#endif + u16 lun[4]; /* 8 */ + u32 itt; /* 16 */ + u32 ttt; /* 20 */ + u32 sn; /* 24 */ + u32 exp_sn; /* 28 */ + u32 max_sn; /* 32 */ + u32 spec3[3]; /* 36 */ +} __packed; /* 48 */ + +/* Opcode encoding bits */ +#define ISCSI_OP_RETRY 0x80 +#define ISCSI_OP_IMMEDIATE 0x40 +#define ISCSI_OPCODE_MASK 0x3F + +/* Client to Server Message Opcode values */ +#define ISCSI_OP_NOP_OUT 0x00 +#define ISCSI_OP_SCSI_CMD 0x01 +#define ISCSI_OP_SCSI_TASK_MGT_MSG 0x02 +#define ISCSI_OP_LOGIN_CMD 0x03 +#define ISCSI_OP_TEXT_CMD 0x04 +#define ISCSI_OP_SCSI_DATA_OUT 0x05 +#define ISCSI_OP_LOGOUT_CMD 0x06 +#define ISCSI_OP_SNACK_CMD 0x10 + +#define ISCSI_OP_VENDOR1_CMD 0x1c +#define ISCSI_OP_VENDOR2_CMD 0x1d +#define ISCSI_OP_VENDOR3_CMD 0x1e +#define ISCSI_OP_VENDOR4_CMD 0x1f + +/* Server to Client Message Opcode values */ +#define ISCSI_OP_NOP_IN 0x20 +#define ISCSI_OP_SCSI_RSP 0x21 +#define ISCSI_OP_SCSI_TASK_MGT_RSP 0x22 +#define ISCSI_OP_LOGIN_RSP 0x23 +#define ISCSI_OP_TEXT_RSP 0x24 +#define ISCSI_OP_SCSI_DATA_IN 0x25 +#define ISCSI_OP_LOGOUT_RSP 0x26 +#define ISCSI_OP_R2T 0x31 +#define ISCSI_OP_ASYNC_MSG 0x32 +#define ISCSI_OP_REJECT 0x3f + +struct iscsi_ahs_hdr { + u16 ahslength; + u8 ahstype; +} __packed; + +#define ISCSI_AHSTYPE_CDB 1 +#define ISCSI_AHSTYPE_RLENGTH 2 + +union iscsi_sid { + struct { + u8 isid[6]; /* Initiator Session ID */ + u16 tsih; /* Target Session ID */ + } id; + u64 id64; +} __packed; + +struct iscsi_scsi_cmd_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 itt; + u32 data_length; + u32 cmd_sn; + u32 exp_stat_sn; + u8 scb[16]; +} __packed; + +#define ISCSI_CMD_FINAL 0x80 +#define ISCSI_CMD_READ 0x40 +#define ISCSI_CMD_WRITE 0x20 +#define ISCSI_CMD_ATTR_MASK 0x07 +#define ISCSI_CMD_UNTAGGED 0x00 +#define ISCSI_CMD_SIMPLE 0x01 +#define ISCSI_CMD_ORDERED 0x02 +#define ISCSI_CMD_HEAD_OF_QUEUE 0x03 +#define ISCSI_CMD_ACA 0x04 + +struct iscsi_cdb_ahdr { + u16 ahslength; + u8 ahstype; + u8 reserved; + u8 cdb[0]; +} __packed; + +struct iscsi_rlength_ahdr { + u16 ahslength; + u8 ahstype; + u8 reserved; + u32 read_length; +} __packed; + +struct iscsi_scsi_rsp_hdr { + u8 opcode; + u8 flags; + u8 response; + u8 cmd_status; + u8 ahslength; + u8 datalength[3]; + u32 rsvd1[2]; + u32 itt; + u32 snack; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 exp_data_sn; + u32 bi_residual_count; + u32 residual_count; +} __packed; + +#define ISCSI_FLG_RESIDUAL_UNDERFLOW 0x02 +#define ISCSI_FLG_RESIDUAL_OVERFLOW 0x04 +#define ISCSI_FLG_BIRESIDUAL_UNDERFLOW 0x08 +#define ISCSI_FLG_BIRESIDUAL_OVERFLOW 0x10 + +#define ISCSI_RESPONSE_COMMAND_COMPLETED 0x00 +#define ISCSI_RESPONSE_TARGET_FAILURE 0x01 + +struct iscsi_sense_data { + u16 length; + u8 data[0]; +} __packed; + +struct iscsi_task_mgt_hdr { + u8 opcode; + u8 function; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 itt; + u32 rtt; + u32 cmd_sn; + u32 exp_stat_sn; + u32 ref_cmd_sn; + u32 exp_data_sn; + u32 rsvd2[2]; +} __packed; + +#define ISCSI_FUNCTION_MASK 0x7f + +#define ISCSI_FUNCTION_ABORT_TASK 1 +#define ISCSI_FUNCTION_ABORT_TASK_SET 2 +#define ISCSI_FUNCTION_CLEAR_ACA 3 +#define ISCSI_FUNCTION_CLEAR_TASK_SET 4 +#define ISCSI_FUNCTION_LOGICAL_UNIT_RESET 5 +#define ISCSI_FUNCTION_TARGET_WARM_RESET 6 +#define ISCSI_FUNCTION_TARGET_COLD_RESET 7 +#define ISCSI_FUNCTION_TASK_REASSIGN 8 + +struct iscsi_task_rsp_hdr { + u8 opcode; + u8 flags; + u8 response; + u8 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u32 rsvd3; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 rsvd4[3]; +} __packed; + +#define ISCSI_RESPONSE_FUNCTION_COMPLETE 0 +#define ISCSI_RESPONSE_UNKNOWN_TASK 1 +#define ISCSI_RESPONSE_UNKNOWN_LUN 2 +#define ISCSI_RESPONSE_TASK_ALLEGIANT 3 +#define ISCSI_RESPONSE_FAILOVER_UNSUPPORTED 4 +#define ISCSI_RESPONSE_FUNCTION_UNSUPPORTED 5 +#define ISCSI_RESPONSE_NO_AUTHORIZATION 6 +#define ISCSI_RESPONSE_FUNCTION_REJECTED 255 + +struct iscsi_data_out_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 itt; + u32 ttt; + u32 rsvd2; + u32 exp_stat_sn; + u32 rsvd3; + u32 data_sn; + u32 buffer_offset; + u32 rsvd4; +} __packed; + +struct iscsi_data_in_hdr { + u8 opcode; + u8 flags; + u8 rsvd1; + u8 cmd_status; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u32 ttt; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 data_sn; + u32 buffer_offset; + u32 residual_count; +} __packed; + +#define ISCSI_FLG_STATUS 0x01 + +struct iscsi_r2t_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 itt; + u32 ttt; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 r2t_sn; + u32 buffer_offset; + u32 data_length; +} __packed; + +struct iscsi_async_msg_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 ffffffff; + u32 rsvd2; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u8 async_event; + u8 async_vcode; + u16 param1; + u16 param2; + u16 param3; + u32 rsvd3; +} __packed; + +#define ISCSI_ASYNC_SCSI 0 +#define ISCSI_ASYNC_LOGOUT 1 +#define ISCSI_ASYNC_DROP_CONNECTION 2 +#define ISCSI_ASYNC_DROP_SESSION 3 +#define ISCSI_ASYNC_PARAM_REQUEST 4 +#define ISCSI_ASYNC_VENDOR 255 + +struct iscsi_text_req_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u32 ttt; + u32 cmd_sn; + u32 exp_stat_sn; + u32 rsvd3[4]; +} __packed; + +struct iscsi_text_rsp_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u32 ttt; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 rsvd3[3]; +} __packed; + +struct iscsi_login_req_hdr { + u8 opcode; + u8 flags; + u8 max_version; /* Max. version supported */ + u8 min_version; /* Min. version supported */ + u8 ahslength; + u8 datalength[3]; + union iscsi_sid sid; + u32 itt; /* Initiator Task Tag */ + u16 cid; /* Connection ID */ + u16 rsvd1; + u32 cmd_sn; + u32 exp_stat_sn; + u32 rsvd2[4]; +} __packed; + +struct iscsi_login_rsp_hdr { + u8 opcode; + u8 flags; + u8 max_version; /* Max. version supported */ + u8 active_version; /* Active version */ + u8 ahslength; + u8 datalength[3]; + union iscsi_sid sid; + u32 itt; /* Initiator Task Tag */ + u32 rsvd1; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u8 status_class; /* see Login RSP ststus classes below */ + u8 status_detail; /* see Login RSP Status details below */ + u8 rsvd2[10]; +} __packed; + +#define ISCSI_FLG_FINAL 0x80 +#define ISCSI_FLG_TRANSIT 0x80 +#define ISCSI_FLG_CSG_SECURITY 0x00 +#define ISCSI_FLG_CSG_LOGIN 0x04 +#define ISCSI_FLG_CSG_FULL_FEATURE 0x0c +#define ISCSI_FLG_CSG_MASK 0x0c +#define ISCSI_FLG_NSG_SECURITY 0x00 +#define ISCSI_FLG_NSG_LOGIN 0x01 +#define ISCSI_FLG_NSG_FULL_FEATURE 0x03 +#define ISCSI_FLG_NSG_MASK 0x03 + +/* Login Status response classes */ +#define ISCSI_STATUS_SUCCESS 0x00 +#define ISCSI_STATUS_REDIRECT 0x01 +#define ISCSI_STATUS_INITIATOR_ERR 0x02 +#define ISCSI_STATUS_TARGET_ERR 0x03 + +/* Login Status response detail codes */ +/* Class-0 (Success) */ +#define ISCSI_STATUS_ACCEPT 0x00 + +/* Class-1 (Redirection) */ +#define ISCSI_STATUS_TGT_MOVED_TEMP 0x01 +#define ISCSI_STATUS_TGT_MOVED_PERM 0x02 + +/* Class-2 (Initiator Error) */ +#define ISCSI_STATUS_INIT_ERR 0x00 +#define ISCSI_STATUS_AUTH_FAILED 0x01 +#define ISCSI_STATUS_TGT_FORBIDDEN 0x02 +#define ISCSI_STATUS_TGT_NOT_FOUND 0x03 +#define ISCSI_STATUS_TGT_REMOVED 0x04 +#define ISCSI_STATUS_NO_VERSION 0x05 +#define ISCSI_STATUS_TOO_MANY_CONN 0x06 +#define ISCSI_STATUS_MISSING_FIELDS 0x07 +#define ISCSI_STATUS_CONN_ADD_FAILED 0x08 +#define ISCSI_STATUS_INV_SESSION_TYPE 0x09 +#define ISCSI_STATUS_SESSION_NOT_FOUND 0x0a +#define ISCSI_STATUS_INV_REQ_TYPE 0x0b + +/* Class-3 (Target Error) */ +#define ISCSI_STATUS_TARGET_ERROR 0x00 +#define ISCSI_STATUS_SVC_UNAVAILABLE 0x01 +#define ISCSI_STATUS_NO_RESOURCES 0x02 + +struct iscsi_logout_req_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u16 cid; + u16 rsvd3; + u32 cmd_sn; + u32 exp_stat_sn; + u32 rsvd4[4]; +} __packed; + +struct iscsi_logout_rsp_hdr { + u8 opcode; + u8 flags; + u8 response; + u8 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u32 rsvd3; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 rsvd4; + u16 time2wait; + u16 time2retain; + u32 rsvd5; +} __packed; + +struct iscsi_snack_req_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 itt; + u32 ttt; + u32 rsvd3; + u32 exp_stat_sn; + u32 rsvd4[2]; + u32 beg_run; + u32 run_length; +} __packed; + +struct iscsi_reject_hdr { + u8 opcode; + u8 flags; + u8 reason; + u8 rsvd1; + u8 ahslength; + u8 datalength[3]; + u32 rsvd2[2]; + u32 ffffffff; + u32 rsvd3; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 data_sn; + u32 rsvd4[2]; +} __packed; + +#define ISCSI_REASON_NO_FULL_FEATURE_PHASE 0x01 +#define ISCSI_REASON_DATA_DIGEST_ERROR 0x02 +#define ISCSI_REASON_DATA_SNACK_REJECT 0x03 +#define ISCSI_REASON_PROTOCOL_ERROR 0x04 +#define ISCSI_REASON_UNSUPPORTED_COMMAND 0x05 +#define ISCSI_REASON_IMMEDIATE_COMMAND_REJECT 0x06 +#define ISCSI_REASON_TASK_IN_PROGRESS 0x07 +#define ISCSI_REASON_INVALID_SNACK 0x08 +#define ISCSI_REASON_NO_BOOKMARK 0x09 +#define ISCSI_REASON_BOOKMARK_REJECT 0x0a +#define ISCSI_REASON_NEGOTIATION_RESET 0x0b +#define ISCSI_REASON_WAITING_LOGOUT 0x0c + + +struct iscsi_nop_out_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 itt; + u32 ttt; + u32 cmd_sn; + u32 exp_stat_sn; + u32 rsvd2[4]; +} __packed; + +struct iscsi_nop_in_hdr { + u8 opcode; + u8 flags; + u16 rsvd1; + u8 ahslength; + u8 datalength[3]; + u16 lun[4]; + u32 itt; + u32 ttt; + u32 stat_sn; + u32 exp_cmd_sn; + u32 max_cmd_sn; + u32 rsvd2[3]; +} __packed; + +#define ISCSI_RESERVED_TAG (0xffffffffU) + +#endif /* __ISCSI_HDR_H__ */ --- linux-2.6.32.orig/ubuntu/iscsitarget/tio.c +++ linux-2.6.32/ubuntu/iscsitarget/tio.c @@ -0,0 +1,121 @@ +/* + * Target I/O. + * (C) 2005 FUJITA Tomonori + * This code is licenced under the GPL. + */ + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "iotype.h" + +static int tio_add_pages(struct tio *tio, int count) +{ + int i; + struct page *page; + + dprintk(D_GENERIC, "%p %d (%d)\n", tio, count, tio->pg_cnt); + + tio->pg_cnt = count; + + count *= sizeof(struct page *); + + do { + tio->pvec = kzalloc(count, GFP_KERNEL); + if (!tio->pvec) + yield(); + } while (!tio->pvec); + + for (i = 0; i < tio->pg_cnt; i++) { + do { + if (!(page = alloc_page(GFP_KERNEL))) + yield(); + } while (!page); + tio->pvec[i] = page; + } + return 0; +} + +static struct kmem_cache *tio_cache; + +struct tio *tio_alloc(int count) +{ + struct tio *tio; + + tio = kmem_cache_alloc(tio_cache, GFP_KERNEL | __GFP_NOFAIL); + + tio->pg_cnt = 0; + tio->idx = 0; + tio->offset = 0; + tio->size = 0; + tio->pvec = NULL; + + atomic_set(&tio->count, 1); + + if (count) + tio_add_pages(tio, count); + + return tio; +} + +static void tio_free(struct tio *tio) +{ + int i; + for (i = 0; i < tio->pg_cnt; i++) { + assert(tio->pvec[i]); + __free_page(tio->pvec[i]); + } + kfree(tio->pvec); + kmem_cache_free(tio_cache, tio); +} + +void tio_put(struct tio *tio) +{ + assert(atomic_read(&tio->count)); + if (atomic_dec_and_test(&tio->count)) + tio_free(tio); +} + +void tio_get(struct tio *tio) +{ + atomic_inc(&tio->count); +} + +void tio_set(struct tio *tio, u32 size, loff_t offset) +{ + tio->idx = offset >> PAGE_CACHE_SHIFT; + tio->offset = offset & ~PAGE_CACHE_MASK; + tio->size = size; +} + +int tio_read(struct iet_volume *lu, struct tio *tio) +{ + struct iotype *iot = lu->iotype; + assert(iot); + return iot->make_request ? iot->make_request(lu, tio, READ) : 0; +} + +int tio_write(struct iet_volume *lu, struct tio *tio) +{ + struct iotype *iot = lu->iotype; + assert(iot); + return iot->make_request ? iot->make_request(lu, tio, WRITE) : 0; +} + +int tio_sync(struct iet_volume *lu, struct tio *tio) +{ + struct iotype *iot = lu->iotype; + assert(iot); + return iot->sync ? iot->sync(lu, tio) : 0; +} + +int tio_init(void) +{ + tio_cache = KMEM_CACHE(tio, 0); + return tio_cache ? 0 : -ENOMEM; +} + +void tio_exit(void) +{ + if (tio_cache) + kmem_cache_destroy(tio_cache); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/event.c +++ linux-2.6.32/ubuntu/iscsitarget/event.c @@ -0,0 +1,96 @@ +/* + * Event notification code. + * (C) 2005 FUJITA Tomonori + * This code is licenced under the GPL. + * + * Some functions are based on audit code. + */ + +#include +#include "iet_u.h" +#include "iscsi_dbg.h" + +static struct sock *nl; +static u32 ietd_pid; + +static int event_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) +{ + u32 uid, pid, seq; + char *data; + + pid = NETLINK_CREDS(skb)->pid; + uid = NETLINK_CREDS(skb)->uid; + seq = nlh->nlmsg_seq; + data = NLMSG_DATA(nlh); + + ietd_pid = pid; + + return 0; +} + +static void event_recv_skb(struct sk_buff *skb) +{ + int err; + struct nlmsghdr *nlh; + u32 rlen; + + while (skb->len >= NLMSG_SPACE(0)) { + nlh = (struct nlmsghdr *)skb->data; + if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len) + break; + rlen = NLMSG_ALIGN(nlh->nlmsg_len); + if (rlen > skb->len) + rlen = skb->len; + if ((err = event_recv_msg(skb, nlh))) { + netlink_ack(skb, nlh, -err); + } else if (nlh->nlmsg_flags & NLM_F_ACK) + netlink_ack(skb, nlh, 0); + skb_pull(skb, rlen); + } +} + +static int notify(void *data, int len, int gfp_mask) +{ + struct sk_buff *skb; + struct nlmsghdr *nlh; + static u32 seq = 0; + + if (!(skb = alloc_skb(NLMSG_SPACE(len), gfp_mask))) + return -ENOMEM; + + nlh = __nlmsg_put(skb, ietd_pid, seq++, NLMSG_DONE, len - sizeof(*nlh), 0); + + memcpy(NLMSG_DATA(nlh), data, len); + + return netlink_unicast(nl, skb, ietd_pid, 0); +} + +int event_send(u32 tid, u64 sid, u32 cid, u32 state, int atomic) +{ + int err; + struct iet_event event; + + event.tid = tid; + event.sid = sid; + event.cid = cid; + event.state = state; + + err = notify(&event, NLMSG_SPACE(sizeof(struct iet_event)), 0); + + return err; +} + +int event_init(void) +{ + nl = netlink_kernel_create(&init_net, NETLINK_IET, 1, event_recv_skb, + NULL, THIS_MODULE); + if (!nl) + return -ENOMEM; + else + return 0; +} + +void event_exit(void) +{ + netlink_kernel_release(nl); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/target.c +++ linux-2.6.32/ubuntu/iscsitarget/target.c @@ -0,0 +1,357 @@ +/* + * Copyright (C) 2002-2003 Ardis Technolgies + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include "iscsi.h" +#include "digest.h" +#include "iscsi_dbg.h" + +#define MAX_NR_TARGETS (1UL << 30) + +static LIST_HEAD(target_list); +static DECLARE_MUTEX(target_list_sem); +static u32 next_target_id; +static u32 nr_targets; + +static struct iscsi_sess_param default_session_param = { + .initial_r2t = 1, + .immediate_data = 1, + .max_connections = 1, + .max_recv_data_length = 8192, + .max_xmit_data_length = 8192, + .max_burst_length = 262144, + .first_burst_length = 65536, + .default_wait_time = 2, + .default_retain_time = 20, + .max_outstanding_r2t = 1, + .data_pdu_inorder = 1, + .data_sequence_inorder = 1, + .error_recovery_level = 0, + .header_digest = DIGEST_NONE, + .data_digest = DIGEST_NONE, + .ofmarker = 0, + .ifmarker = 0, + .ofmarkint = 2048, + .ifmarkint = 2048, +}; + +static struct iscsi_trgt_param default_target_param = { + .wthreads = DEFAULT_NR_WTHREADS, + .target_type = 0, + .queued_cmnds = DEFAULT_NR_QUEUED_CMNDS, +}; + +inline int target_lock(struct iscsi_target *target, int interruptible) +{ + int err = 0; + + if (interruptible) + err = down_interruptible(&target->target_sem); + else + down(&target->target_sem); + + return err; +} + +inline void target_unlock(struct iscsi_target *target) +{ + up(&target->target_sem); +} + +static struct iscsi_target *__target_lookup_by_id(u32 id) +{ + struct iscsi_target *target; + + list_for_each_entry(target, &target_list, t_list) { + if (target->tid == id) + return target; + } + return NULL; +} + +static struct iscsi_target *__target_lookup_by_name(char *name) +{ + struct iscsi_target *target; + + list_for_each_entry(target, &target_list, t_list) { + if (!strcmp(target->name, name)) + return target; + } + return NULL; +} + +struct iscsi_target *target_lookup_by_id(u32 id) +{ + struct iscsi_target *target; + + down(&target_list_sem); + target = __target_lookup_by_id(id); + up(&target_list_sem); + + return target; +} + +static int target_thread_start(struct iscsi_target *target) +{ + int err; + + if ((err = nthread_start(target)) < 0) + return err; + + if (!worker_thread_pool) { + err = wthread_start(target->wthread_info, + target->trgt_param.wthreads, target->tid); + if (err) + nthread_stop(target); + } + + return err; +} + +static void target_thread_stop(struct iscsi_target *target) +{ + if (!worker_thread_pool) + wthread_stop(target->wthread_info); + + nthread_stop(target); +} + +static int iscsi_target_create(struct target_info *info, u32 tid) +{ + int err = -EINVAL, len; + char *name = info->name; + struct iscsi_target *target; + + dprintk(D_SETUP, "%u %s\n", tid, name); + + if (!(len = strlen(name))) { + eprintk("The length of the target name is zero %u\n", tid); + return err; + } + + if (!try_module_get(THIS_MODULE)) { + eprintk("Fail to get module %u\n", tid); + return err; + } + + target = kzalloc(sizeof(*target), GFP_KERNEL); + if (!target) { + err = -ENOMEM; + goto out; + } + + if (!worker_thread_pool) { + target->wthread_info = kmalloc(sizeof(struct worker_thread_info), GFP_KERNEL); + if (!target->wthread_info) { + err = -ENOMEM; + goto out; + } + } + + target->tid = info->tid = tid; + + memcpy(&target->sess_param, &default_session_param, sizeof(default_session_param)); + memcpy(&target->trgt_param, &default_target_param, sizeof(default_target_param)); + + strncpy(target->name, name, sizeof(target->name) - 1); + + init_MUTEX(&target->target_sem); + spin_lock_init(&target->session_list_lock); + + INIT_LIST_HEAD(&target->session_list); + INIT_LIST_HEAD(&target->volumes); + + atomic_set(&target->nr_volumes, 0); + + nthread_init(target); + + if (!worker_thread_pool) + wthread_init(target->wthread_info); + else + target->wthread_info = worker_thread_pool; + + + if ((err = target_thread_start(target)) < 0) { + target_thread_stop(target); + goto out; + } + + list_add(&target->t_list, &target_list); + + return 0; +out: + if (!worker_thread_pool) + kfree(target->wthread_info); + kfree(target); + module_put(THIS_MODULE); + + return err; +} + +int target_add(struct target_info *info) +{ + int err = -EEXIST; + u32 tid = info->tid; + + down(&target_list_sem); + + if (nr_targets > MAX_NR_TARGETS) { + err = -EBUSY; + goto out; + } + + if (__target_lookup_by_name(info->name)) + goto out; + + if (tid && __target_lookup_by_id(tid)) + goto out; + + if (!tid) { + do { + if (!++next_target_id) + ++next_target_id; + } while (__target_lookup_by_id(next_target_id)); + + tid = next_target_id; + } + + if (!(err = iscsi_target_create(info, tid))) + nr_targets++; +out: + up(&target_list_sem); + + return err; +} + +static void target_destroy(struct iscsi_target *target) +{ + dprintk(D_SETUP, "%u\n", target->tid); + + target_thread_stop(target); + + while (!list_empty(&target->volumes)) { + struct iet_volume *volume; + volume = list_entry(target->volumes.next, struct iet_volume, list); + volume->l_state = IDEV_DEL; + iscsi_volume_destroy(volume); + } + + if (!worker_thread_pool) + kfree(target->wthread_info); + kfree(target); + + module_put(THIS_MODULE); +} + +/* @locking: target_list_sem must be locked */ +int __target_del(struct iscsi_target *target) +{ + target_lock(target, 0); + + if (!list_empty(&target->session_list)) { + target_unlock(target); + return -EBUSY; + } + + list_del(&target->t_list); + nr_targets--; + + target_unlock(target); + target_destroy(target); + return 0; +} + +int target_del(u32 id) +{ + struct iscsi_target *target; + int err = down_interruptible(&target_list_sem); + if (err < 0) + return err; + + target = __target_lookup_by_id(id); + if (!target) { + err = -ENOENT; + goto out; + } + + err = __target_del(target); + out: + up(&target_list_sem); + return err; +} + +void target_del_all(void) +{ + DECLARE_COMPLETION_ONSTACK(done); + struct iscsi_target *target, *tmp; + + down(&target_list_sem); + + if (!list_empty(&target_list)) + iprintk("Removing all connections, sessions and targets\n"); + + list_for_each_entry_safe(target, tmp, &target_list, t_list) { + init_completion(&done); + target->done = &done; + session_del_all(target); + wait_for_completion(&done); + __target_del(target); + } + + next_target_id = 0; + + up(&target_list_sem); +} + +static void *iet_seq_start(struct seq_file *m, loff_t *pos) +{ + int err; + + /* are you sure this is to be interruptible? */ + err = down_interruptible(&target_list_sem); + if (err < 0) + return ERR_PTR(err); + + return seq_list_start(&target_list, *pos); +} + +static void *iet_seq_next(struct seq_file *m, void *v, loff_t *pos) +{ + return seq_list_next(v, &target_list, pos); +} + +static void iet_seq_stop(struct seq_file *m, void *v) +{ + up(&target_list_sem); +} + +static int iet_seq_show(struct seq_file *m, void *p) +{ + iet_show_info_t *func = (iet_show_info_t *)m->private; + struct iscsi_target *target = + list_entry(p, struct iscsi_target, t_list); + int err; + + /* relly, interruptible? I'd think target_lock(target, 0) + * would be more appropriate. --lge */ + err = target_lock(target, 1); + if (err < 0) + return err; + + seq_printf(m, "tid:%u name:%s\n", target->tid, target->name); + + func(m, target); + + target_unlock(target); + + return 0; +} + +struct seq_operations iet_seq_op = { + .start = iet_seq_start, + .next = iet_seq_next, + .stop = iet_seq_stop, + .show = iet_seq_show, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/iscsi.h +++ linux-2.6.32/ubuntu/iscsitarget/iscsi.h @@ -0,0 +1,520 @@ +/* + * Copyright (C) 2002-2003 Ardis Technolgies + * Copyright (C) 2008 Arne Redlich + * + * Released under the terms of the GNU GPL v2.0. + */ + +#ifndef __ISCSI_H__ +#define __ISCSI_H__ + +#include +#include +#include +#include +#include +#include +#include + +#include "iscsi_hdr.h" +#include "iet_u.h" + +#define IET_SENSE_BUF_SIZE 18 + +struct iscsi_sess_param { + int initial_r2t; + int immediate_data; + int max_connections; + int max_recv_data_length; + int max_xmit_data_length; + int max_burst_length; + int first_burst_length; + int default_wait_time; + int default_retain_time; + int max_outstanding_r2t; + int data_pdu_inorder; + int data_sequence_inorder; + int error_recovery_level; + int header_digest; + int data_digest; + int ofmarker; + int ifmarker; + int ofmarkint; + int ifmarkint; +}; + +struct iscsi_trgt_param { + int wthreads; + int target_type; + int queued_cmnds; + int nop_interval; + int nop_timeout; +}; + +struct tio { + u32 pg_cnt; + + pgoff_t idx; + u32 offset; + u32 size; + + struct page **pvec; + + atomic_t count; +}; + +struct network_thread_info { + struct task_struct *task; + unsigned long flags; + struct list_head active_conns; + + spinlock_t nthread_lock; + + void (*old_state_change)(struct sock *); + void (*old_data_ready)(struct sock *, int); + void (*old_write_space)(struct sock *); +}; + +struct worker_thread_info; + +struct worker_thread { + struct task_struct *w_task; + struct list_head w_list; + struct worker_thread_info *w_info; +}; + +struct worker_thread_info { + spinlock_t wthread_lock; + + u32 nr_running_wthreads; + + struct list_head wthread_list; + struct list_head work_queue; + + wait_queue_head_t wthread_sleep; +}; + +struct iscsi_cmnd; + +struct target_type { + int id; + int (*execute_cmnd) (struct iscsi_cmnd *); +}; + +enum iscsi_device_state { + IDEV_RUNNING, + IDEV_DEL, +}; + +struct iscsi_target { + struct list_head t_list; + u32 tid; + + char name[ISCSI_NAME_LEN]; + + struct iscsi_sess_param sess_param; + struct iscsi_trgt_param trgt_param; + + atomic_t nr_volumes; + struct list_head volumes; + struct list_head session_list; + + /* Prevents races between add/del session and adding UAs */ + spinlock_t session_list_lock; + + struct network_thread_info nthread_info; + /* Points either to own list or global pool */ + struct worker_thread_info * wthread_info; + + struct semaphore target_sem; + struct completion *done; +}; + +struct iscsi_queue { + spinlock_t queue_lock; + struct iscsi_cmnd *ordered_cmnd; + struct list_head wait_list; + int active_cnt; +}; + +struct iet_volume { + u32 lun; + + enum iscsi_device_state l_state; + atomic_t l_count; + + struct iscsi_target *target; + struct list_head list; + + struct iscsi_queue queue; + + u8 scsi_id[SCSI_ID_LEN]; + u8 scsi_sn[SCSI_SN_LEN]; + + u32 blk_shift; + u64 blk_cnt; + + u64 reserve_sid; + spinlock_t reserve_lock; + + unsigned long flags; + + struct iotype *iotype; + void *private; +}; + +enum lu_flags { + LU_READONLY, + LU_WCACHE, + LU_RCACHE, +}; + +#define LUReadonly(lu) test_bit(LU_READONLY, &(lu)->flags) +#define SetLUReadonly(lu) set_bit(LU_READONLY, &(lu)->flags) + +#define LUWCache(lu) test_bit(LU_WCACHE, &(lu)->flags) +#define SetLUWCache(lu) set_bit(LU_WCACHE, &(lu)->flags) +#define ClearLUWCache(lu) clear_bit(LU_WCACHE, &(lu)->flags) + +#define LURCache(lu) test_bit(LU_RCACHE, &(lu)->flags) +#define SetLURCache(lu) set_bit(LU_RCACHE, &(lu)->flags) +#define ClearLURCache(lu) clear_bit(LU_RCACHE, &(lu)->flags) + +#define IET_HASH_ORDER 8 +#define cmnd_hashfn(itt) hash_long((itt), IET_HASH_ORDER) + +#define UA_HASH_LEN 8 + +struct iscsi_session { + struct list_head list; + struct iscsi_target *target; + struct completion *done; + char *initiator; + u64 sid; + + u32 exp_cmd_sn; + u32 max_cmd_sn; + + struct iscsi_sess_param param; + u32 max_queued_cmnds; + + struct list_head conn_list; + + struct list_head pending_list; + + spinlock_t cmnd_hash_lock; + struct list_head cmnd_hash[1 << IET_HASH_ORDER]; + + spinlock_t ua_hash_lock; + struct list_head ua_hash[UA_HASH_LEN]; + + u32 next_ttt; +}; + +enum connection_state_bit { + CONN_ACTIVE, + CONN_CLOSING, + CONN_WSPACE_WAIT, + CONN_NEED_NOP_IN, +}; + +#define ISCSI_CONN_IOV_MAX (((256 << 10) >> PAGE_SHIFT) + 1) + +struct iscsi_conn { + struct list_head list; /* list entry in session list */ + struct iscsi_session *session; /* owning session */ + + u16 cid; + unsigned long state; + + u32 stat_sn; + u32 exp_stat_sn; + + int hdigest_type; + int ddigest_type; + + struct list_head poll_list; + + struct file *file; + struct socket *sock; + spinlock_t list_lock; + atomic_t nr_cmnds; + atomic_t nr_busy_cmnds; + struct list_head pdu_list; /* in/outcoming pdus */ + struct list_head write_list; /* list of data pdus to be sent */ + struct timer_list nop_timer; + + struct iscsi_cmnd *read_cmnd; + struct msghdr read_msg; + struct iovec read_iov[ISCSI_CONN_IOV_MAX]; + u32 read_size; + u32 read_overflow; + int read_state; + + struct iscsi_cmnd *write_cmnd; + struct iovec write_iov[ISCSI_CONN_IOV_MAX]; + struct iovec *write_iop; + struct tio *write_tcmnd; + u32 write_size; + u32 write_offset; + int write_state; + + struct hash_desc rx_hash; + struct hash_desc tx_hash; + struct scatterlist hash_sg[ISCSI_CONN_IOV_MAX]; +}; + +struct iscsi_pdu { + struct iscsi_hdr bhs; + void *ahs; + unsigned int ahssize; + unsigned int datasize; +}; + +typedef void (iet_show_info_t)(struct seq_file *seq, struct iscsi_target *target); + +struct iscsi_cmnd { + struct list_head list; + struct list_head conn_list; + unsigned long flags; + struct iscsi_conn *conn; + struct iet_volume *lun; + + struct iscsi_pdu pdu; + struct list_head pdu_list; + + struct list_head hash_list; + + struct tio *tio; + + u8 status; + + struct timer_list timer; + + u32 r2t_sn; + u32 r2t_length; + u32 is_unsolicited_data; + u32 target_task_tag; + u32 outstanding_r2t; + + u32 hdigest; + u32 ddigest; + + struct iscsi_cmnd *req; + + unsigned char sense_buf[IET_SENSE_BUF_SIZE]; +}; + +struct ua_entry { + struct list_head entry; + struct iscsi_session *session; /* only used for debugging ATM */ + u32 lun; + u8 asc; + u8 ascq; +}; + +#define ISCSI_OP_SCSI_REJECT ISCSI_OP_VENDOR1_CMD +#define ISCSI_OP_PDU_REJECT ISCSI_OP_VENDOR2_CMD +#define ISCSI_OP_DATA_REJECT ISCSI_OP_VENDOR3_CMD +#define ISCSI_OP_SCSI_ABORT ISCSI_OP_VENDOR4_CMD + +/* iscsi.c */ +extern unsigned long worker_thread_pool_size; +extern struct iscsi_cmnd *cmnd_alloc(struct iscsi_conn *, int); +extern void cmnd_rx_start(struct iscsi_cmnd *); +extern void cmnd_rx_end(struct iscsi_cmnd *); +extern void cmnd_tx_start(struct iscsi_cmnd *); +extern void cmnd_tx_end(struct iscsi_cmnd *); +extern void cmnd_release(struct iscsi_cmnd *, int); +extern void send_data_rsp(struct iscsi_cmnd *, void (*)(struct iscsi_cmnd *)); +extern void send_scsi_rsp(struct iscsi_cmnd *, void (*)(struct iscsi_cmnd *)); +extern void iscsi_cmnd_set_sense(struct iscsi_cmnd *, u8 sense_key, u8 asc, + u8 ascq); +extern void send_nop_in(struct iscsi_conn *); + +/* conn.c */ +extern struct iscsi_conn *conn_lookup(struct iscsi_session *, u16); +extern int conn_add(struct iscsi_session *, struct conn_info *); +extern int conn_del(struct iscsi_session *, struct conn_info *); +extern void conn_del_all(struct iscsi_session *); +extern int conn_free(struct iscsi_conn *); +extern void conn_close(struct iscsi_conn *); +extern void conn_info_show(struct seq_file *, struct iscsi_session *); + +/* nthread.c */ +extern int nthread_init(struct iscsi_target *); +extern int nthread_start(struct iscsi_target *); +extern int nthread_stop(struct iscsi_target *); +extern void __nthread_wakeup(struct network_thread_info *); +extern void nthread_wakeup(struct iscsi_target *); + +/* wthread.c */ +extern int wthread_init(struct worker_thread_info *info); +extern int wthread_start(struct worker_thread_info *info, int wthreads, u32 tid); +extern int wthread_stop(struct worker_thread_info *info); +extern void wthread_queue(struct iscsi_cmnd *); +extern struct target_type *target_type_array[]; +extern int wthread_module_init(void); +extern void wthread_module_exit(void); +extern struct worker_thread_info *worker_thread_pool; + +/* target.c */ +extern int target_lock(struct iscsi_target *, int); +extern void target_unlock(struct iscsi_target *); +struct iscsi_target *target_lookup_by_id(u32); +extern int target_add(struct target_info *); +extern int target_del(u32 id); +extern void target_del_all(void); +extern struct seq_operations iet_seq_op; + +/* config.c */ +extern int iet_procfs_init(void); +extern void iet_procfs_exit(void); +extern int iet_info_show(struct seq_file *, iet_show_info_t *); + +/* session.c */ +extern struct file_operations session_seq_fops; +extern struct iscsi_session *session_lookup(struct iscsi_target *, u64); +extern int session_add(struct iscsi_target *, struct session_info *); +extern int session_del(struct iscsi_target *, u64); +extern void session_del_all(struct iscsi_target *); + +/* volume.c */ +extern struct file_operations volume_seq_fops; +extern int volume_add(struct iscsi_target *, struct volume_info *); +extern int iscsi_volume_del(struct iscsi_target *, struct volume_info *); +extern void iscsi_volume_destroy(struct iet_volume *); +extern struct iet_volume *volume_lookup(struct iscsi_target *, u32); +extern struct iet_volume *volume_get(struct iscsi_target *, u32); +extern void volume_put(struct iet_volume *); +extern int volume_reserve(struct iet_volume *volume, u64 sid); +extern int volume_release(struct iet_volume *volume, u64 sid, int force); +extern int is_volume_reserved(struct iet_volume *volume, u64 sid); + +/* tio.c */ +extern int tio_init(void); +extern void tio_exit(void); +extern struct tio *tio_alloc(int); +extern void tio_get(struct tio *); +extern void tio_put(struct tio *); +extern void tio_set(struct tio *, u32, loff_t); +extern int tio_read(struct iet_volume *, struct tio *); +extern int tio_write(struct iet_volume *, struct tio *); +extern int tio_sync(struct iet_volume *, struct tio *); + +/* iotype.c */ +extern struct iotype *get_iotype(const char *name); +extern void put_iotype(struct iotype *iot); + +/* params.c */ +extern int iscsi_param_set(struct iscsi_target *, struct iscsi_param_info *, int); + +/* target_disk.c */ +extern struct target_type disk_ops; + +/* event.c */ +extern int event_send(u32, u64, u32, u32, int); +extern int event_init(void); +extern void event_exit(void); + +/* ua.c */ +int ua_init(void); +void ua_exit(void); +struct ua_entry * ua_get_first(struct iscsi_session *, u32 lun); +struct ua_entry * ua_get_match(struct iscsi_session *, u32 lun, u8 asc, + u8 ascq); +void ua_free(struct ua_entry *); +int ua_pending(struct iscsi_session *, u32 lun); +void ua_establish_for_session(struct iscsi_session *, u32 lun, u8 asc, + u8 ascq); +void ua_establish_for_other_sessions(struct iscsi_session *, u32 lun, u8 asc, + u8 ascq); +void ua_establish_for_all_sessions(struct iscsi_target *, u32 lun, u8 asc, + u8 ascq); + +#define get_pgcnt(size, offset) ((((size) + ((offset) & ~PAGE_CACHE_MASK)) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT) + +static inline void iscsi_cmnd_get_length(struct iscsi_pdu *pdu) +{ +#if defined(__BIG_ENDIAN) + pdu->ahssize = pdu->bhs.length.ahslength * 4; + pdu->datasize = pdu->bhs.length.datalength; +#elif defined(__LITTLE_ENDIAN) + pdu->ahssize = (pdu->bhs.length & 0xff) * 4; + pdu->datasize = be32_to_cpu(pdu->bhs.length & ~0xff); +#else +#error +#endif +} + +static inline void iscsi_cmnd_set_length(struct iscsi_pdu *pdu) +{ +#if defined(__BIG_ENDIAN) + pdu->bhs.length.ahslength = pdu->ahssize / 4; + pdu->bhs.length.datalength = pdu->datasize; +#elif defined(__LITTLE_ENDIAN) + pdu->bhs.length = cpu_to_be32(pdu->datasize) | (pdu->ahssize / 4); +#else +#error +#endif +} + +#define cmnd_hdr(cmnd) ((struct iscsi_scsi_cmd_hdr *) (&((cmnd)->pdu.bhs))) +#define cmnd_ttt(cmnd) cpu_to_be32((cmnd)->pdu.bhs.ttt) +#define cmnd_itt(cmnd) cpu_to_be32((cmnd)->pdu.bhs.itt) +#define cmnd_opcode(cmnd) ((cmnd)->pdu.bhs.opcode & ISCSI_OPCODE_MASK) +#define cmnd_scsicode(cmnd) cmnd_hdr(cmnd)->scb[0] + +#define SECTOR_SIZE_BITS 9 + +enum cmnd_flags { + CMND_hashed, + CMND_queued, + CMND_final, + CMND_waitio, + CMND_close, + CMND_lunit, + CMND_pending, + CMND_tmfabort, + CMND_rxstart, + CMND_timer_active, +}; + +#define set_cmnd_hashed(cmnd) set_bit(CMND_hashed, &(cmnd)->flags) +#define cmnd_hashed(cmnd) test_bit(CMND_hashed, &(cmnd)->flags) + +#define set_cmnd_queued(cmnd) set_bit(CMND_queued, &(cmnd)->flags) +#define cmnd_queued(cmnd) test_bit(CMND_queued, &(cmnd)->flags) + +#define set_cmnd_final(cmnd) set_bit(CMND_final, &(cmnd)->flags) +#define cmnd_final(cmnd) test_bit(CMND_final, &(cmnd)->flags) + +#define set_cmnd_waitio(cmnd) set_bit(CMND_waitio, &(cmnd)->flags) +#define cmnd_waitio(cmnd) test_bit(CMND_waitio, &(cmnd)->flags) + +#define set_cmnd_close(cmnd) set_bit(CMND_close, &(cmnd)->flags) +#define cmnd_close(cmnd) test_bit(CMND_close, &(cmnd)->flags) + +#define set_cmnd_lunit(cmnd) set_bit(CMND_lunit, &(cmnd)->flags) +#define cmnd_lunit(cmnd) test_bit(CMND_lunit, &(cmnd)->flags) + +#define set_cmnd_pending(cmnd) set_bit(CMND_pending, &(cmnd)->flags) +#define clear_cmnd_pending(cmnd) clear_bit(CMND_pending, &(cmnd)->flags) +#define cmnd_pending(cmnd) test_bit(CMND_pending, &(cmnd)->flags) + +#define set_cmnd_tmfabort(cmnd) set_bit(CMND_tmfabort, &(cmnd)->flags) +#define cmnd_tmfabort(cmnd) test_bit(CMND_tmfabort, &(cmnd)->flags) + +#define set_cmnd_rxstart(cmnd) set_bit(CMND_rxstart, &(cmnd)->flags) +#define cmnd_rxstart(cmnd) test_bit(CMND_rxstart, &(cmnd)->flags) + +#define set_cmnd_timer_active(cmnd) set_bit(CMND_timer_active, &(cmnd)->flags) +#define clear_cmnd_timer_active(cmnd) \ + clear_bit(CMND_timer_active, &(cmnd)->flags) +#define cmnd_timer_active(cmnd) test_bit(CMND_timer_active, &(cmnd)->flags) + +#define VENDOR_ID "IET" +#define PRODUCT_ID "VIRTUAL-DISK" +#define PRODUCT_REV "0" + +#endif /* __ISCSI_H__ */ --- linux-2.6.32.orig/ubuntu/iscsitarget/config.c +++ linux-2.6.32/ubuntu/iscsitarget/config.c @@ -0,0 +1,322 @@ +/* + * (C) 2004 - 2005 FUJITA Tomonori + * + * This code is licenced under the GPL. + */ + +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" + +struct proc_entries { + const char *name; + struct file_operations *fops; +}; + +static struct proc_entries iet_proc_entries[] = +{ + {"volume", &volume_seq_fops}, + {"session", &session_seq_fops}, +}; + +static struct proc_dir_entry *proc_iet_dir; + +void iet_procfs_exit(void) +{ + int i; + + if (!proc_iet_dir) + return; + + for (i = 0; i < ARRAY_SIZE(iet_proc_entries); i++) + remove_proc_entry(iet_proc_entries[i].name, proc_iet_dir); + + remove_proc_entry(proc_iet_dir->name, proc_iet_dir->parent); +} + +int iet_procfs_init(void) +{ + int i; + struct proc_dir_entry *ent; + + if (!(proc_iet_dir = proc_mkdir("iet", init_net.proc_net))) + goto err; + + for (i = 0; i < ARRAY_SIZE(iet_proc_entries); i++) { + ent = create_proc_entry(iet_proc_entries[i].name, 0, proc_iet_dir); + if (ent) + ent->proc_fops = iet_proc_entries[i].fops; + else + goto err; + } + + return 0; + +err: + if (proc_iet_dir) + iet_procfs_exit(); + + return -ENOMEM; +} + +static int get_conn_info(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct iscsi_session *session; + struct conn_info info; + struct iscsi_conn *conn; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + session = session_lookup(target, info.sid); + if (!session) + return -ENOENT; + conn = conn_lookup(session, info.cid); + + info.cid = conn->cid; + info.stat_sn = conn->stat_sn; + info.exp_stat_sn = conn->exp_stat_sn; + + if (copy_to_user((void *) ptr, &info, sizeof(info))) + return -EFAULT; + + return 0; +} + +static int add_conn(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct iscsi_session *session; + struct conn_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + if (!(session = session_lookup(target, info.sid))) + return -ENOENT; + + return conn_add(session, &info); +} + +static int del_conn(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct iscsi_session *session; + struct conn_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + if (!(session = session_lookup(target, info.sid))) + return -ENOENT; + + return conn_del(session, &info); +} + +static int get_session_info(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct iscsi_session *session; + struct session_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + session = session_lookup(target, info.sid); + + if (!session) + return -ENOENT; + + info.exp_cmd_sn = session->exp_cmd_sn; + info.max_cmd_sn = session->max_cmd_sn; + + if (copy_to_user((void *) ptr, &info, sizeof(info))) + return -EFAULT; + + return 0; +} + +static int add_session(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct session_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + return session_add(target, &info); +} + +static int del_session(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct session_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + return session_del(target, info.sid); +} + +static int add_volume(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct volume_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + return volume_add(target, &info); +} + +static int del_volume(struct iscsi_target *target, unsigned long ptr) +{ + int err; + struct volume_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + return iscsi_volume_del(target, &info); +} + +static int iscsi_param_config(struct iscsi_target *target, unsigned long ptr, int set) +{ + int err; + struct iscsi_param_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + goto out; + + if ((err = iscsi_param_set(target, &info, set)) < 0) + goto out; + + if (!set) + err = copy_to_user((void *) ptr, &info, sizeof(info)); + +out: + return err; +} + +static int add_target(unsigned long ptr) +{ + int err; + struct target_info info; + + if ((err = copy_from_user(&info, (void *) ptr, sizeof(info))) < 0) + return err; + + if (!(err = target_add(&info))) + err = copy_to_user((void *) ptr, &info, sizeof(info)); + + return err; +} + +static long ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct iscsi_target *target = NULL; + long err; + u32 id; + + if ((err = get_user(id, (u32 *) arg)) != 0) + goto done; + + if (cmd == DEL_TARGET) { + err = target_del(id); + goto done; + } + + target = target_lookup_by_id(id); + + if (cmd == ADD_TARGET) + if (target) { + err = -EEXIST; + eprintk("Target %u already exist!\n", id); + goto done; + } + + switch (cmd) { + case ADD_TARGET: + assert(!target); + err = add_target(arg); + goto done; + } + + if (!target) { + eprintk("can't find the target %u\n", id); + err = -EINVAL; + goto done; + } + + if ((err = target_lock(target, 1)) < 0) { + eprintk("interrupted %ld %d\n", err, cmd); + goto done; + } + + switch (cmd) { + case ADD_VOLUME: + err = add_volume(target, arg); + break; + + case DEL_VOLUME: + err = del_volume(target, arg); + break; + + case ADD_SESSION: + err = add_session(target, arg); + break; + + case DEL_SESSION: + err = del_session(target, arg); + break; + + case GET_SESSION_INFO: + err = get_session_info(target, arg); + break; + + case ISCSI_PARAM_SET: + err = iscsi_param_config(target, arg, 1); + break; + + case ISCSI_PARAM_GET: + err = iscsi_param_config(target, arg, 0); + break; + + case ADD_CONN: + err = add_conn(target, arg); + break; + + case DEL_CONN: + err = del_conn(target, arg); + break; + + case GET_CONN_INFO: + err = get_conn_info(target, arg); + break; + default: + eprintk("invalid ioctl cmd %x\n", cmd); + err = -EINVAL; + } + + if (target) + target_unlock(target); + +done: + return err; +} + +static int release(struct inode *i __attribute__((unused)), + struct file *f __attribute__((unused))) +{ + target_del_all(); + return 0; +} + +struct file_operations ctr_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = ioctl, + .compat_ioctl = ioctl, + .release = release +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/target_disk.c +++ linux-2.6.32/ubuntu/iscsitarget/target_disk.c @@ -0,0 +1,572 @@ +/* + * (C) 2004 - 2005 FUJITA Tomonori + * This code is licenced under the GPL. + * + * heavily based on code from kernel/iscsi.c: + * Copyright (C) 2002-2003 Ardis Technolgies , + * licensed under the terms of the GNU GPL v2.0, + */ + +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" + +static int insert_disconnect_pg(u8 *ptr) +{ + unsigned char disconnect_pg[] = {0x02, 0x0e, 0x80, 0x80, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + memcpy(ptr, disconnect_pg, sizeof(disconnect_pg)); + return sizeof(disconnect_pg); +} + +static int insert_caching_pg(u8 *ptr, int wcache, int rcache) +{ + unsigned char caching_pg[] = {0x08, 0x12, 0x10, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}; + + memcpy(ptr, caching_pg, sizeof(caching_pg)); + if (wcache) + ptr[2] |= 0x04; /* set WCE bit if we're caching writes */ + if (!rcache) + ptr[2] |= 0x01; /* Read Cache Disable */ + + return sizeof(caching_pg); +} + +static int insert_ctrl_m_pg(u8 *ptr) +{ + unsigned char ctrl_m_pg[] = {0x0a, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x4b}; + + memcpy(ptr, ctrl_m_pg, sizeof(ctrl_m_pg)); + return sizeof(ctrl_m_pg); +} + +static int insert_iec_m_pg(u8 *ptr) +{ + unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00}; + + memcpy(ptr, iec_m_pg, sizeof(iec_m_pg)); + return sizeof(iec_m_pg); +} + +static int insert_format_m_pg(u8 *ptr, u32 sector_size) +{ + unsigned char format_m_pg[] = {0x03, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00}; + + memcpy(ptr, format_m_pg, sizeof(format_m_pg)); + ptr[12] = (sector_size >> 8) & 0xff; + ptr[13] = sector_size & 0xff; + return sizeof(format_m_pg); +} + +static int insert_geo_m_pg(u8 *ptr, u64 sec) +{ + unsigned char geo_m_pg[] = {0x04, 0x16, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00}; + u32 ncyl; + u32 n; + + /* assume 0xff heads, 15krpm. */ + memcpy(ptr, geo_m_pg, sizeof(geo_m_pg)); + ncyl = sec >> 14; /* 256 * 64 */ + memcpy(&n, ptr+1, sizeof(u32)); + n = n | cpu_to_be32(ncyl); + memcpy(ptr+1, &n, sizeof(u32)); + return sizeof(geo_m_pg); +} + +static void build_mode_sense_response(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + struct tio *tio = cmnd->tio; + u8 *data, *scb = req->scb; + int len = 4, err = 0; + u8 pcode; + + /* changeable parameter mode pages are unsupported */ + if ((scb[2] & 0xc0) >> 6 == 0x1) + goto set_sense; + + pcode = req->scb[2] & 0x3f; + + assert(!tio); + tio = cmnd->tio = tio_alloc(1); + data = page_address(tio->pvec[0]); + assert(data); + clear_page(data); + + if (LUReadonly(cmnd->lun)) + data[2] = 0x80; + + if ((scb[1] & 0x8)) + data[3] = 0; + else { + data[3] = 8; + len += 8; + *(u32 *)(data + 4) = (cmnd->lun->blk_cnt >> 32) ? + cpu_to_be32(0xffffffff) : cpu_to_be32(cmnd->lun->blk_cnt); + *(u32 *)(data + 8) = cpu_to_be32(1 << cmnd->lun->blk_shift); + } + + switch (pcode) { + case 0x0: + break; + case 0x2: + len += insert_disconnect_pg(data + len); + break; + case 0x3: + len += insert_format_m_pg(data + len, 1 << cmnd->lun->blk_shift); + break; + case 0x4: + len += insert_geo_m_pg(data + len, cmnd->lun->blk_cnt); + break; + case 0x8: + len += insert_caching_pg(data + len, LUWCache(cmnd->lun), + LURCache(cmnd->lun)); + break; + case 0xa: + len += insert_ctrl_m_pg(data + len); + break; + case 0x1c: + len += insert_iec_m_pg(data + len); + break; + case 0x3f: + len += insert_disconnect_pg(data + len); + len += insert_format_m_pg(data + len, 1 << cmnd->lun->blk_shift); + len += insert_geo_m_pg(data + len, cmnd->lun->blk_cnt); + len += insert_caching_pg(data + len, LUWCache(cmnd->lun), + LURCache(cmnd->lun)); + len += insert_ctrl_m_pg(data + len); + len += insert_iec_m_pg(data + len); + break; + default: + err = -1; + } + + if (!err) { + data[0] = len - 1; + tio_set(tio, len, 0); + return; + } + + tio_put(tio); + cmnd->tio = NULL; + set_sense: + /* Invalid Field In CDB */ + iscsi_cmnd_set_sense(cmnd, ILLEGAL_REQUEST, 0x24, 0x0); +} + +static void build_inquiry_response(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + struct tio *tio = cmnd->tio; + u8 *data; + u8 *scb = req->scb; + int err = -1; + + /* + * - CmdDt and EVPD both set or EVPD and Page Code set: illegal + * - CmdDt set: not supported + */ + if ((scb[1] & 0x3) > 0x1 || (!(scb[1] & 0x3) && scb[2])) + goto set_sense; + + assert(!tio); + tio = cmnd->tio = tio_alloc(1); + data = page_address(tio->pvec[0]); + assert(data); + clear_page(data); + + if (!(scb[1] & 0x3)) { + data[2] = 4; + data[3] = 0x52; + data[4] = 59; + data[7] = 0x02; + memset(data + 8, 0x20, 28); + memcpy(data + 8, + VENDOR_ID, min_t(size_t, strlen(VENDOR_ID), 8)); + memcpy(data + 16, + PRODUCT_ID, min_t(size_t, strlen(PRODUCT_ID), 16)); + memcpy(data + 32, + PRODUCT_REV, min_t(size_t, strlen(PRODUCT_REV), 4)); + data[58] = 0x03; + data[59] = 0x20; + data[60] = 0x09; + data[61] = 0x60; + data[62] = 0x03; + data[63] = 0x00; + tio_set(tio, 64, 0); + err = 0; + } else if (scb[1] & 0x1) { + /* EVPD bit set */ + if (scb[2] == 0x0) { + data[1] = 0x0; + data[3] = 3; + data[4] = 0x0; + data[5] = 0x80; + data[6] = 0x83; + tio_set(tio, 7, 0); + err = 0; + } else if (scb[2] == 0x80) { + int len = (cmnd->lun && strlen(cmnd->lun->scsi_sn)) ? + SCSI_SN_LEN : 4; + + data[1] = 0x80; + data[3] = len; + memset(data + 4, 0x20, len); + tio_set(tio, len + 4, 0); + err = 0; + + if (len == SCSI_SN_LEN) { + char *p, *q; + + p = data + 4 + len - 1; + q = cmnd->lun->scsi_sn + len - 1; + + for (; len > 0; len--, q--) + if (isascii(*q) && isprint(*q)) + *(p--) = *q; + } + } else if (scb[2] == 0x83) { + u32 len = SCSI_ID_LEN * sizeof(u8); + + data[1] = 0x83; + data[3] = len + 4; + data[4] = 0x1; + data[5] = 0x1; + data[7] = len; + if (cmnd->lun) /* We need this ? */ + memcpy(data + 8, cmnd->lun->scsi_id, len); + tio_set(tio, len + 8, 0); + err = 0; + } + } + + if (!err) { + tio_set(tio, min_t(u8, tio->size, scb[4]), 0); + if (!cmnd->lun) + data[0] = TYPE_NO_LUN; + return; + } + + tio_put(tio); + cmnd->tio = NULL; + set_sense: + /* Invalid Field In CDB */ + iscsi_cmnd_set_sense(cmnd, ILLEGAL_REQUEST, 0x24, 0x0); +} + +static void build_report_luns_response(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + struct tio *tio = cmnd->tio; + u32 *data, size, len; + struct iet_volume *lun; + int rest, idx = 0; + + size = (u32)req->scb[6] << 24 | (u32)req->scb[7] << 16 | + (u32)req->scb[8] << 8 | (u32)req->scb[9]; + if (size < 16) { + /* Invalid Field In CDB */ + iscsi_cmnd_set_sense(cmnd, ILLEGAL_REQUEST, 0x24, 0x0); + return; + } + + len = atomic_read(&cmnd->conn->session->target->nr_volumes) * 8; + size = min(size & ~(8 - 1), len + 8); + + assert(!tio); + tio = cmnd->tio = tio_alloc(get_pgcnt(size, 0)); + tio_set(tio, size, 0); + + data = page_address(tio->pvec[idx]); + assert(data); + *data++ = cpu_to_be32(len); + *data++ = 0; + size -= 8; + rest = PAGE_CACHE_SIZE - 8; + list_for_each_entry(lun, &cmnd->conn->session->target->volumes, list) { + if (lun->l_state != IDEV_RUNNING) + continue; + + *data++ = cpu_to_be32((0x3ff & lun->lun) << 16 | + ((lun->lun > 0xff) ? (0x1 << 30) : 0)); + *data++ = 0; + if ((size -= 8) == 0) + break; + if ((rest -= 8) == 0) { + idx++; + data = page_address(tio->pvec[idx]); + rest = PAGE_CACHE_SIZE; + } + } +} + +static void build_read_capacity_response(struct iscsi_cmnd *cmnd) +{ + struct tio *tio = cmnd->tio; + u32 *data; + + assert(!tio); + tio = cmnd->tio = tio_alloc(1); + data = page_address(tio->pvec[0]); + assert(data); + clear_page(data); + + data[0] = (cmnd->lun->blk_cnt >> 32) ? + cpu_to_be32(0xffffffff) : cpu_to_be32(cmnd->lun->blk_cnt - 1); + data[1] = cpu_to_be32(1U << cmnd->lun->blk_shift); + + tio_set(tio, 8, 0); +} + +static void build_request_sense_response(struct iscsi_cmnd *cmnd) +{ + struct tio *tio = cmnd->tio; + u8 *data; + + assert(!tio); + tio = cmnd->tio = tio_alloc(1); + data = page_address(tio->pvec[0]); + assert(data); + memset(data, 0, 18); + data[0] = 0xf0; + data[1] = 0; + data[2] = NO_SENSE; + data[7] = 10; + tio_set(tio, 18, 0); +} + +static void build_service_action_in_response(struct iscsi_cmnd *cmnd) +{ + struct tio *tio = cmnd->tio; + u32 *data; + u64 *data64; + + assert(!tio); + + /* only READ_CAPACITY_16 service action is currently supported */ + if ((cmnd_hdr(cmnd)->scb[1] & 0x1F) != 0x10) { + /* Invalid Field In CDB */ + iscsi_cmnd_set_sense(cmnd, ILLEGAL_REQUEST, 0x24, 0x0); + return; + } + + tio = cmnd->tio = tio_alloc(1); + data = page_address(tio->pvec[0]); + assert(data); + clear_page(data); + data64 = (u64*) data; + data64[0] = cpu_to_be64(cmnd->lun->blk_cnt - 1); + data[2] = cpu_to_be32(1UL << cmnd->lun->blk_shift); + + tio_set(tio, 12, 0); +} + +static void build_read_response(struct iscsi_cmnd *cmnd) +{ + struct tio *tio = cmnd->tio; + + assert(tio); + assert(cmnd->lun); + + if (tio_read(cmnd->lun, tio)) + /* Medium Error/Unrecovered Read Error */ + iscsi_cmnd_set_sense(cmnd, MEDIUM_ERROR, 0x11, 0x0); +} + +static void build_write_response(struct iscsi_cmnd *cmnd) +{ + int err; + struct tio *tio = cmnd->tio; + + assert(tio); + assert(cmnd->lun); + + list_del_init(&cmnd->list); + err = tio_write(cmnd->lun, tio); + if (!err && !LUWCache(cmnd->lun)) + err = tio_sync(cmnd->lun, tio); + + if (err) + /* Medium Error/Write Fault */ + iscsi_cmnd_set_sense(cmnd, MEDIUM_ERROR, 0x03, 0x0); +} + +static void build_sync_cache_response(struct iscsi_cmnd *cmnd) +{ + assert(cmnd->lun); + if (tio_sync(cmnd->lun, NULL)) + /* Medium Error/Write Fault */ + iscsi_cmnd_set_sense(cmnd, MEDIUM_ERROR, 0x03, 0x0); +} + +static void build_generic_response(struct iscsi_cmnd *cmnd) +{ + return; +} + +static void build_reserve_response(struct iscsi_cmnd *cmnd) +{ + switch (volume_reserve(cmnd->lun, cmnd->conn->session->sid)) { + case -ENOENT: + /* Logical Unit Not Supported (?) */ + iscsi_cmnd_set_sense(cmnd, ILLEGAL_REQUEST, 0x25, 0x0); + break; + case -EBUSY: + cmnd->status = SAM_STAT_RESERVATION_CONFLICT; + break; + default: + break; + } +} + +static void build_release_response(struct iscsi_cmnd *cmnd) +{ + if (volume_release(cmnd->lun, + cmnd->conn->session->sid, 0)) + cmnd->status = SAM_STAT_RESERVATION_CONFLICT; +} + +static void build_reservation_conflict_response(struct iscsi_cmnd *cmnd) +{ + cmnd->status = SAM_STAT_RESERVATION_CONFLICT; +} + +static int disk_check_ua(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + struct ua_entry *ua; + + if (cmnd->lun && ua_pending(cmnd->conn->session, cmnd->lun->lun)) { + switch(req->scb[0]){ + case INQUIRY: + case REQUEST_SENSE: + break; + case REPORT_LUNS: + ua = ua_get_match(cmnd->conn->session, + cmnd->lun->lun, + /* reported luns data has changed */ + 0x3f, 0x0e); + ua_free(ua); + break; + default: + ua = ua_get_first(cmnd->conn->session, cmnd->lun->lun); + iscsi_cmnd_set_sense(cmnd, UNIT_ATTENTION, ua->asc, + ua->ascq); + ua_free(ua); + send_scsi_rsp(cmnd, build_generic_response); + return 1; + } + } + return 0; +} + +static int disk_check_reservation(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + + if (is_volume_reserved(cmnd->lun, + cmnd->conn->session->sid)) { + switch (req->scb[0]) { + case INQUIRY: + case RELEASE: + case REPORT_LUNS: + case REQUEST_SENSE: + case READ_CAPACITY: + /* allowed commands when reserved */ + break; + case SERVICE_ACTION_IN: + if ((cmnd_hdr(cmnd)->scb[1] & 0x1F) == 0x10) + break; + /* fall through */ + default: + /* return reservation conflict for all others */ + send_scsi_rsp(cmnd, + build_reservation_conflict_response); + return 1; + } + } + + return 0; +} + +static int disk_execute_cmnd(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + + req->opcode &= ISCSI_OPCODE_MASK; + + if (disk_check_ua(cmnd)) + return 0; + + if (disk_check_reservation(cmnd)) + return 0; + + switch (req->scb[0]) { + case INQUIRY: + send_data_rsp(cmnd, build_inquiry_response); + break; + case REPORT_LUNS: + send_data_rsp(cmnd, build_report_luns_response); + break; + case READ_CAPACITY: + send_data_rsp(cmnd, build_read_capacity_response); + break; + case MODE_SENSE: + send_data_rsp(cmnd, build_mode_sense_response); + break; + case REQUEST_SENSE: + send_data_rsp(cmnd, build_request_sense_response); + break; + case SERVICE_ACTION_IN: + send_data_rsp(cmnd, build_service_action_in_response); + break; + case READ_6: + case READ_10: + case READ_16: + send_data_rsp(cmnd, build_read_response); + break; + case WRITE_6: + case WRITE_10: + case WRITE_16: + case WRITE_VERIFY: + send_scsi_rsp(cmnd, build_write_response); + break; + case SYNCHRONIZE_CACHE: + send_scsi_rsp(cmnd, build_sync_cache_response); + break; + case RESERVE: + send_scsi_rsp(cmnd, build_reserve_response); + break; + case RELEASE: + send_scsi_rsp(cmnd, build_release_response); + break; + case START_STOP: + case TEST_UNIT_READY: + case VERIFY: + case VERIFY_16: + send_scsi_rsp(cmnd, build_generic_response); + break; + default: + eprintk("%s\n", "we should not come here!"); + break; + } + + return 0; +} + +struct target_type disk_ops = +{ + .id = 0, + .execute_cmnd = disk_execute_cmnd, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/conn.c +++ linux-2.6.32/ubuntu/iscsitarget/conn.c @@ -0,0 +1,253 @@ +/* + * Copyright (C) 2002-2003 Ardis Technolgies + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "digest.h" + +static void print_conn_state(char *p, size_t size, unsigned long state) +{ + if (test_bit(CONN_ACTIVE, &state)) + snprintf(p, size, "%s", "active"); + else if (test_bit(CONN_CLOSING, &state)) + snprintf(p, size, "%s", "closing"); + else + snprintf(p, size, "%s", "unknown"); +} + +static void print_digest_state(char *p, size_t size, unsigned long flags) +{ + if (DIGEST_NONE & flags) + snprintf(p, size, "%s", "none"); + else if (DIGEST_CRC32C & flags) + snprintf(p, size, "%s", "crc32c"); + else + snprintf(p, size, "%s", "unknown"); +} + +void conn_info_show(struct seq_file *seq, struct iscsi_session *session) +{ + struct iscsi_conn *conn; + struct sock *sk; + char buf[64]; + + list_for_each_entry(conn, &session->conn_list, list) { + sk = conn->sock->sk; + switch (sk->sk_family) { + case AF_INET: + snprintf(buf, sizeof(buf), + "%u.%u.%u.%u", NIPQUAD(inet_sk(sk)->daddr)); + break; + case AF_INET6: + snprintf(buf, sizeof(buf), "[%pI6]", + &inet6_sk(sk)->daddr); + break; + default: + break; + } + seq_printf(seq, "\t\tcid:%u ip:%s ", conn->cid, buf); + print_conn_state(buf, sizeof(buf), conn->state); + seq_printf(seq, "state:%s ", buf); + print_digest_state(buf, sizeof(buf), conn->hdigest_type); + seq_printf(seq, "hd:%s ", buf); + print_digest_state(buf, sizeof(buf), conn->ddigest_type); + seq_printf(seq, "dd:%s\n", buf); + } +} + +struct iscsi_conn *conn_lookup(struct iscsi_session *session, u16 cid) +{ + struct iscsi_conn *conn; + + list_for_each_entry(conn, &session->conn_list, list) { + if (conn->cid == cid) + return conn; + } + return NULL; +} + +static void iet_state_change(struct sock *sk) +{ + struct iscsi_conn *conn = sk->sk_user_data; + struct iscsi_target *target = conn->session->target; + + if (sk->sk_state != TCP_ESTABLISHED) + conn_close(conn); + else + nthread_wakeup(target); + + target->nthread_info.old_state_change(sk); +} + +static void iet_data_ready(struct sock *sk, int len) +{ + struct iscsi_conn *conn = sk->sk_user_data; + struct iscsi_target *target = conn->session->target; + + nthread_wakeup(target); + target->nthread_info.old_data_ready(sk, len); +} + +/* + * @locking: grabs the target's nthread_lock to protect it from races with + * set_conn_wspace_wait() + */ +static void iet_write_space(struct sock *sk) +{ + struct iscsi_conn *conn = sk->sk_user_data; + struct network_thread_info *info = &conn->session->target->nthread_info; + + spin_lock_bh(&info->nthread_lock); + + if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk) && + test_bit(CONN_WSPACE_WAIT, &conn->state)) { + clear_bit(CONN_WSPACE_WAIT, &conn->state); + __nthread_wakeup(info); + } + + spin_unlock_bh(&info->nthread_lock); + + info->old_write_space(sk); +} + +static void iet_socket_bind(struct iscsi_conn *conn) +{ + int opt = 1; + mm_segment_t oldfs; + struct iscsi_session *session = conn->session; + struct iscsi_target *target = session->target; + + dprintk(D_GENERIC, "%llu\n", (unsigned long long) session->sid); + + conn->sock = SOCKET_I(conn->file->f_dentry->d_inode); + conn->sock->sk->sk_user_data = conn; + + write_lock_bh(&conn->sock->sk->sk_callback_lock); + target->nthread_info.old_state_change = conn->sock->sk->sk_state_change; + conn->sock->sk->sk_state_change = iet_state_change; + + target->nthread_info.old_data_ready = conn->sock->sk->sk_data_ready; + conn->sock->sk->sk_data_ready = iet_data_ready; + + target->nthread_info.old_write_space = conn->sock->sk->sk_write_space; + conn->sock->sk->sk_write_space = iet_write_space; + write_unlock_bh(&conn->sock->sk->sk_callback_lock); + + oldfs = get_fs(); + set_fs(get_ds()); + conn->sock->ops->setsockopt(conn->sock, SOL_TCP, TCP_NODELAY, (void *)&opt, sizeof(opt)); + set_fs(oldfs); +} + +int conn_free(struct iscsi_conn *conn) +{ + dprintk(D_GENERIC, "%p %#Lx %u\n", conn->session, + (unsigned long long) conn->session->sid, conn->cid); + + assert(atomic_read(&conn->nr_cmnds) == 0); + assert(list_empty(&conn->pdu_list)); + assert(list_empty(&conn->write_list)); + + list_del(&conn->list); + list_del(&conn->poll_list); + + del_timer_sync(&conn->nop_timer); + digest_cleanup(conn); + kfree(conn); + + return 0; +} + +static int iet_conn_alloc(struct iscsi_session *session, struct conn_info *info) +{ + struct iscsi_conn *conn; + + dprintk(D_SETUP, "%#Lx:%u\n", (unsigned long long) session->sid, info->cid); + + conn = kzalloc(sizeof(*conn), GFP_KERNEL); + if (!conn) + return -ENOMEM; + + conn->session = session; + conn->cid = info->cid; + conn->stat_sn = info->stat_sn; + conn->exp_stat_sn = info->exp_stat_sn; + + conn->hdigest_type = info->header_digest; + conn->ddigest_type = info->data_digest; + if (digest_init(conn) < 0) { + kfree(conn); + return -ENOMEM; + } + + spin_lock_init(&conn->list_lock); + atomic_set(&conn->nr_cmnds, 0); + atomic_set(&conn->nr_busy_cmnds, 0); + INIT_LIST_HEAD(&conn->pdu_list); + INIT_LIST_HEAD(&conn->write_list); + INIT_LIST_HEAD(&conn->poll_list); + init_timer(&conn->nop_timer); + + list_add(&conn->list, &session->conn_list); + + set_bit(CONN_ACTIVE, &conn->state); + + conn->file = fget(info->fd); + iet_socket_bind(conn); + + list_add(&conn->poll_list, &session->target->nthread_info.active_conns); + + nthread_wakeup(conn->session->target); + + return 0; +} + +void conn_close(struct iscsi_conn *conn) +{ + if (test_and_clear_bit(CONN_ACTIVE, &conn->state)) + set_bit(CONN_CLOSING, &conn->state); + + nthread_wakeup(conn->session->target); +} + +int conn_add(struct iscsi_session *session, struct conn_info *info) +{ + struct iscsi_conn *conn; + int err = -EEXIST; + + conn = conn_lookup(session, info->cid); + if (conn) + return err; + + return iet_conn_alloc(session, info); +} + +int conn_del(struct iscsi_session *session, struct conn_info *info) +{ + struct iscsi_conn *conn; + int err = -EEXIST; + + conn = conn_lookup(session, info->cid); + if (!conn) + return err; + + conn_close(conn); + + return 0; +} + +/* target_lock() supposed to be held */ +void conn_del_all(struct iscsi_session *session) +{ + struct iscsi_conn *conn; + + list_for_each_entry(conn, &session->conn_list, list) + conn_close(conn); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/digest.c +++ linux-2.6.32/ubuntu/iscsitarget/digest.c @@ -0,0 +1,279 @@ +/* + * iSCSI digest handling. + * (C) 2004 - 2006 Xiranet Communications GmbH + * This code is licensed under the GPL. + */ + +#include + +#include "iscsi.h" +#include "digest.h" +#include "iscsi_dbg.h" + +void digest_alg_available(unsigned int *val) +{ + if (*val & DIGEST_CRC32C && + !crypto_has_alg("crc32c", 0, CRYPTO_ALG_ASYNC)) { + printk("CRC32C digest algorithm not available in kernel\n"); + *val |= ~DIGEST_CRC32C; + } +} + +/** + * initialize support for digest calculation. + * + * digest_init - + * @conn: ptr to connection to make use of digests + * + * @return: 0 on success, < 0 on error + */ +int digest_init(struct iscsi_conn *conn) +{ + int err = 0; + + if (!(conn->hdigest_type & DIGEST_ALL)) + conn->hdigest_type = DIGEST_NONE; + + if (!(conn->ddigest_type & DIGEST_ALL)) + conn->ddigest_type = DIGEST_NONE; + + if (conn->hdigest_type & DIGEST_CRC32C || + conn->ddigest_type & DIGEST_CRC32C) { + conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0, + CRYPTO_ALG_ASYNC); + conn->rx_hash.flags = 0; + if (IS_ERR(conn->rx_hash.tfm)) { + conn->rx_hash.tfm = NULL; + err = -ENOMEM; + goto out; + } + + conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0, + CRYPTO_ALG_ASYNC); + conn->tx_hash.flags = 0; + if (IS_ERR(conn->tx_hash.tfm)) { + conn->tx_hash.tfm = NULL; + err = -ENOMEM; + goto out; + } + } + +out: + if (err) + digest_cleanup(conn); + + return err; +} + +/** + * free resources used for digest calculation. + * + * digest_cleanup - + * @conn: ptr to connection that made use of digests + */ +void digest_cleanup(struct iscsi_conn *conn) +{ + if (conn->tx_hash.tfm) + crypto_free_hash(conn->tx_hash.tfm); + if (conn->rx_hash.tfm) + crypto_free_hash(conn->rx_hash.tfm); +} + +/** + * debug handling of header digest errors: + * simulates a digest error after n PDUs / every n-th PDU of type + * HDIGEST_ERR_CORRUPT_PDU_TYPE. + */ +static inline void __dbg_simulate_header_digest_error(struct iscsi_cmnd *cmnd) +{ +#define HDIGEST_ERR_AFTER_N_CMNDS 1000 +#define HDIGEST_ERR_ONLY_ONCE 1 +#define HDIGEST_ERR_CORRUPT_PDU_TYPE ISCSI_OP_SCSI_CMD +#define HDIGEST_ERR_CORRUPT_PDU_WITH_DATA_ONLY 0 + + static int num_cmnds = 0; + static int num_errs = 0; + + if (cmnd_opcode(cmnd) == HDIGEST_ERR_CORRUPT_PDU_TYPE) { + if (HDIGEST_ERR_CORRUPT_PDU_WITH_DATA_ONLY) { + if (cmnd->pdu.datasize) + num_cmnds++; + } else + num_cmnds++; + } + + if ((num_cmnds == HDIGEST_ERR_AFTER_N_CMNDS) + && (!(HDIGEST_ERR_ONLY_ONCE && num_errs))) { + printk("*** Faking header digest error ***\n"); + printk("\tcmnd: 0x%x, itt 0x%x, sn 0x%x\n", + cmnd_opcode(cmnd), + be32_to_cpu(cmnd->pdu.bhs.itt), + be32_to_cpu(cmnd->pdu.bhs.sn)); + cmnd->hdigest = ~cmnd->hdigest; + /* make things even worse by manipulating header fields */ + cmnd->pdu.datasize += 8; + num_errs++; + num_cmnds = 0; + } + return; +} + +/** + * debug handling of data digest errors: + * simulates a digest error after n PDUs / every n-th PDU of type + * DDIGEST_ERR_CORRUPT_PDU_TYPE. + */ +static inline void __dbg_simulate_data_digest_error(struct iscsi_cmnd *cmnd) +{ +#define DDIGEST_ERR_AFTER_N_CMNDS 50 +#define DDIGEST_ERR_ONLY_ONCE 1 +#define DDIGEST_ERR_CORRUPT_PDU_TYPE ISCSI_OP_SCSI_DATA_OUT +#define DDIGEST_ERR_CORRUPT_UNSOL_DATA_ONLY 0 + + static int num_cmnds = 0; + static int num_errs = 0; + + if ((cmnd->pdu.datasize) + && (cmnd_opcode(cmnd) == DDIGEST_ERR_CORRUPT_PDU_TYPE)) { + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_SCSI_DATA_OUT: + if ((DDIGEST_ERR_CORRUPT_UNSOL_DATA_ONLY) + && (cmnd->pdu.bhs.ttt != ISCSI_RESERVED_TAG)) + break; + default: + num_cmnds++; + } + } + + if ((num_cmnds == DDIGEST_ERR_AFTER_N_CMNDS) + && (!(DDIGEST_ERR_ONLY_ONCE && num_errs)) + && (cmnd->pdu.datasize) + && (!cmnd->conn->read_overflow)) { + printk("*** Faking data digest error: ***"); + printk("\tcmnd 0x%x, itt 0x%x, sn 0x%x\n", + cmnd_opcode(cmnd), + be32_to_cpu(cmnd->pdu.bhs.itt), + be32_to_cpu(cmnd->pdu.bhs.sn)); + cmnd->ddigest = ~cmnd->ddigest; + num_errs++; + num_cmnds = 0; + } +} + +static void digest_header(struct hash_desc *hash, struct iscsi_pdu *pdu, + u8 *crc) +{ + struct scatterlist sg[2]; + unsigned int nbytes = sizeof(struct iscsi_hdr); + + sg_init_table(sg, pdu->ahssize ? 2 : 1); + + sg_set_buf(&sg[0], &pdu->bhs, nbytes); + if (pdu->ahssize) { + sg_set_buf(&sg[1], pdu->ahs, pdu->ahssize); + nbytes += pdu->ahssize; + } + + crypto_hash_init(hash); + crypto_hash_update(hash, sg, nbytes); + crypto_hash_final(hash, crc); +} + +int digest_rx_header(struct iscsi_cmnd *cmnd) +{ + u32 crc; + + digest_header(&cmnd->conn->rx_hash, &cmnd->pdu, (u8 *) &crc); + if (crc != cmnd->hdigest) + return -EIO; + + return 0; +} + +void digest_tx_header(struct iscsi_cmnd *cmnd) +{ + digest_header(&cmnd->conn->tx_hash, &cmnd->pdu, (u8 *) &cmnd->hdigest); +} + +static void digest_data(struct hash_desc *hash, struct iscsi_cmnd *cmnd, + struct tio *tio, u32 offset, u8 *crc) +{ + struct scatterlist *sg = cmnd->conn->hash_sg; + u32 size, length; + int i, idx, count; + unsigned int nbytes; + + size = cmnd->pdu.datasize; + nbytes = size = (size + 3) & ~3; + + offset += tio->offset; + idx = offset >> PAGE_CACHE_SHIFT; + offset &= ~PAGE_CACHE_MASK; + count = get_pgcnt(size, offset); + assert(idx + count <= tio->pg_cnt); + + assert(count <= ISCSI_CONN_IOV_MAX); + + sg_init_table(sg, ARRAY_SIZE(cmnd->conn->hash_sg)); + crypto_hash_init(hash); + + for (i = 0; size; i++) { + if (offset + size > PAGE_CACHE_SIZE) + length = PAGE_CACHE_SIZE - offset; + else + length = size; + + sg_set_page(&sg[i], tio->pvec[idx + i], length, offset); + size -= length; + offset = 0; + } + + sg_mark_end(&sg[i - 1]); + + crypto_hash_update(hash, sg, nbytes); + crypto_hash_final(hash, crc); +} + +int digest_rx_data(struct iscsi_cmnd *cmnd) +{ + struct tio *tio; + struct iscsi_cmnd *scsi_cmnd; + struct iscsi_data_out_hdr *req; + u32 offset, crc; + + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_SCSI_REJECT: + case ISCSI_OP_PDU_REJECT: + case ISCSI_OP_DATA_REJECT: + return 0; + case ISCSI_OP_SCSI_DATA_OUT: + scsi_cmnd = cmnd->req; + req = (struct iscsi_data_out_hdr *) &cmnd->pdu.bhs; + tio = scsi_cmnd->tio; + offset = be32_to_cpu(req->buffer_offset); + break; + default: + tio = cmnd->tio; + offset = 0; + } + + digest_data(&cmnd->conn->rx_hash, cmnd, tio, offset, (u8 *) &crc); + + if (!cmnd->conn->read_overflow && + (cmnd_opcode(cmnd) != ISCSI_OP_PDU_REJECT)) { + if (crc != cmnd->ddigest) + return -EIO; + } + + return 0; +} + +void digest_tx_data(struct iscsi_cmnd *cmnd) +{ + struct tio *tio = cmnd->tio; + struct iscsi_data_out_hdr *req = (struct iscsi_data_out_hdr *)&cmnd->pdu.bhs; + + assert(tio); + digest_data(&cmnd->conn->tx_hash, cmnd, tio, + be32_to_cpu(req->buffer_offset), (u8 *) &cmnd->ddigest); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/Kconfig +++ linux-2.6.32/ubuntu/iscsitarget/Kconfig @@ -0,0 +1,3 @@ +config SCSI_ISCSITARGET + tristate "iSCSI Target Driver" + depends on SCSI --- linux-2.6.32.orig/ubuntu/iscsitarget/iscsi_dbg.h +++ linux-2.6.32/ubuntu/iscsitarget/iscsi_dbg.h @@ -0,0 +1,137 @@ +#ifndef ISCSI_DBG_H +#define ISCSI_DBG_H + +#define D_SETUP (1UL << 0) +#define D_EXIT (1UL << 1) +#define D_GENERIC (1UL << 2) +#define D_READ (1UL << 3) +#define D_WRITE (1UL << 4) +#define D_IOD (1UL << 5) +#define D_THREAD (1UL << 6) +#define D_TASK_MGT (1UL << 7) +#define D_IOMODE (1UL << 8) +#define D_UAC (1UL << 9) + +#define D_DATA (D_READ | D_WRITE) + +extern unsigned long debug_enable_flags; + +#define PFX "iscsi_trgt: " + +#define dprintk(debug, fmt, args...) do { \ + if ((debug) & debug_enable_flags) { \ + printk(KERN_DEBUG PFX "%s(%d) " fmt, __FUNCTION__,\ + __LINE__, args);\ + } \ +} while (0) + +#define dprintk_ua(ua, sess, lun) \ + dprintk(D_UAC, "sess %llu, lun %u: %p %x %x\n", \ + (sess)->sid, lun, ua, \ + (ua) ? (ua)->asc : 0, \ + (ua) ? (ua)->ascq : 0) + +#define eprintk(fmt, args...) do { \ + printk(KERN_ERR PFX "%s(%d) " fmt, __FUNCTION__, \ + __LINE__, args);\ +} while (0) + +#define iprintk(X...) printk(KERN_INFO PFX X) + +#define assert(p) do { \ + if (!(p)) { \ + printk(KERN_CRIT PFX "BUG at %s:%d assert(%s)\n",\ + __FILE__, __LINE__, #p); \ + dump_stack(); \ + BUG(); \ + } \ +} while (0) + +#ifdef D_IOV +static inline void iscsi_dump_iov(struct msghdr *msg) +{ + int i; + printk(PFX "%p, %d\n", msg->msg_iov, msg->msg_iovlen); + for (i = 0; i < min_t(size_t, msg->msg_iovlen, ISCSI_CONN_IOV_MAX); i++) + printk(PFX "%d: %p,%d\n", i, msg->msg_iov[i].iov_base, + msg->msg_iov[i].iov_len); +} +#else +#define iscsi_dump_iov(x) do {} while (0) +#endif + +#ifdef D_DUMP_PDU +static void iscsi_dump_char(int ch) +{ + static unsigned char text[16]; + static int i = 0; + + if (ch < 0) { + while ((i % 16) != 0) { + printk(" "); + text[i] = ' '; + i++; + if ((i % 16) == 0) + printk(" | %.16s |\n", text); + else if ((i % 4) == 0) + printk(" |"); + } + i = 0; + return; + } + + text[i] = (ch < 0x20 || (ch >= 0x80 && ch <= 0xa0)) ? ' ' : ch; + printk(" %02x", ch); + i++; + if ((i % 16) == 0) { + printk(" | %.16s |\n", text); + i = 0; + } else if ((i % 4) == 0) + printk(" |"); +} + +static inline void iscsi_dump_pdu(struct iscsi_pdu *pdu) +{ + unsigned char *buf; + int i; + + buf = (void *)&pdu->bhs; + printk(PFX "BHS: (%p,%d)\n", buf, sizeof(pdu->bhs)); + for (i = 0; i < sizeof(pdu->bhs); i++) + iscsi_dump_char(*buf++); + iscsi_dump_char(-1); + + buf = (void *)pdu->ahs; + printk(PFX "AHS: (%p,%d)\n", buf, pdu->ahssize); + for (i = 0; i < pdu->ahssize; i++) + iscsi_dump_char(*buf++); + iscsi_dump_char(-1); + + printk(PFX "Data: (%d)\n", pdu->datasize); +} + +#else +#define iscsi_dump_pdu(x) do {} while (0) +#endif + +#define show_param(param)\ +{\ + dprintk(D_SETUP, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",\ + (param)->initial_r2t,\ + (param)->immediate_data,\ + (param)->max_connections,\ + (param)->max_recv_data_length,\ + (param)->max_xmit_data_length,\ + (param)->max_burst_length,\ + (param)->first_burst_length,\ + (param)->default_wait_time,\ + (param)->default_retain_time,\ + (param)->max_outstanding_r2t,\ + (param)->data_pdu_inorder,\ + (param)->data_sequence_inorder,\ + (param)->error_recovery_level,\ + (param)->header_digest,\ + (param)->data_digest);\ +} + +#endif --- linux-2.6.32.orig/ubuntu/iscsitarget/session.c +++ linux-2.6.32/ubuntu/iscsitarget/session.c @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2002-2003 Ardis Technolgies + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include "iscsi.h" +#include "iscsi_dbg.h" + +struct iscsi_session *session_lookup(struct iscsi_target *target, u64 sid) +{ + struct iscsi_session *session; + + list_for_each_entry(session, &target->session_list, list) { + if (session->sid == sid) + return session; + } + return NULL; +} + +static struct iscsi_session * +iet_session_alloc(struct iscsi_target *target, struct session_info *info) +{ + int i; + struct iscsi_session *session; + struct iet_volume *vol; + + dprintk(D_SETUP, "%p %u %#Lx\n", target, target->tid, + (unsigned long long) info->sid); + + session = kzalloc(sizeof(*session), GFP_KERNEL); + if (!session) + return NULL; + + session->target = target; + session->sid = info->sid; + memcpy(&session->param, &target->sess_param, sizeof(session->param)); + session->max_queued_cmnds = target->trgt_param.queued_cmnds; + + session->exp_cmd_sn = info->exp_cmd_sn; + session->max_cmd_sn = info->max_cmd_sn; + + session->initiator = kstrdup(info->initiator_name, GFP_KERNEL); + if (!session->initiator) { + kfree(session); + return NULL; + } + + INIT_LIST_HEAD(&session->conn_list); + INIT_LIST_HEAD(&session->pending_list); + + spin_lock_init(&session->cmnd_hash_lock); + for (i = 0; i < ARRAY_SIZE(session->cmnd_hash); i++) + INIT_LIST_HEAD(&session->cmnd_hash[i]); + + spin_lock_init(&session->ua_hash_lock); + for (i = 0; i < ARRAY_SIZE(session->ua_hash); i++) + INIT_LIST_HEAD(&session->ua_hash[i]); + + list_for_each_entry(vol, &target->volumes, list) + /* power-on, reset, or bus device reset occurred */ + ua_establish_for_session(session, vol->lun, 0x29, 0x0); + + session->next_ttt = 1; + + spin_lock(&target->session_list_lock); + list_add(&session->list, &target->session_list); + spin_unlock(&target->session_list_lock); + + return session; +} + +static int session_free(struct iscsi_session *session) +{ + int i; + struct ua_entry *ua, *tmp; + struct list_head *l; + struct iscsi_target *target = session->target; + + dprintk(D_SETUP, "%#Lx\n", (unsigned long long) session->sid); + + spin_lock(&target->session_list_lock); + + assert(list_empty(&session->conn_list)); + + for (i = 0; i < ARRAY_SIZE(session->cmnd_hash); i++) { + if (!list_empty(&session->cmnd_hash[i])) + BUG(); + } + + for (i = 0; i < ARRAY_SIZE(session->ua_hash); i++) { + l = &session->ua_hash[i]; + list_for_each_entry_safe(ua, tmp, l, entry) { + list_del_init(&ua->entry); + ua_free(ua); + } + } + + list_del(&session->list); + + kfree(session->initiator); + kfree(session); + + spin_unlock(&target->session_list_lock); + + return 0; +} + +int session_add(struct iscsi_target *target, struct session_info *info) +{ + struct iscsi_session *session; + + session = session_lookup(target, info->sid); + if (session) + return -EEXIST; + + session = iet_session_alloc(target, info); + if (!session) + return -ENOMEM; + + return 0; +} + +int session_del(struct iscsi_target *target, u64 sid) +{ + struct iscsi_session *session; + + session = session_lookup(target, sid); + if (!session) + return -ENOENT; + + if (!list_empty(&session->conn_list)) { + eprintk("%llu still have connections\n", (unsigned long long) session->sid); + return -EBUSY; + } + + return session_free(session); +} + +void session_del_all(struct iscsi_target *target) +{ + DECLARE_COMPLETION_ONSTACK(done); + struct iscsi_session *sess; + + while (!list_empty(&target->session_list)) { + init_completion(&done); + target_lock(target, 0); + sess = list_entry(target->session_list.next, struct + iscsi_session, list); + sess->done = &done; + conn_del_all(sess); + target_unlock(target); + wait_for_completion(&done); + target_lock(target, 0); + session_free(sess); + target_unlock(target); + } + + if (target->done) + complete(target->done); +} + +static void iet_session_info_show(struct seq_file *seq, struct iscsi_target *target) +{ + struct iscsi_session *session; + + list_for_each_entry(session, &target->session_list, list) { + seq_printf(seq, "\tsid:%llu initiator:%s\n", + (unsigned long long) session->sid, session->initiator); + conn_info_show(seq, session); + } +} + +static int iet_session_seq_open(struct inode *inode, struct file *file) +{ + int res; + res = seq_open(file, &iet_seq_op); + if (!res) + ((struct seq_file *)file->private_data)->private = + iet_session_info_show; + return res; +} + +struct file_operations session_seq_fops = { + .owner = THIS_MODULE, + .open = iet_session_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/block-io.c +++ linux-2.6.32/ubuntu/iscsitarget/block-io.c @@ -0,0 +1,391 @@ +/* + * Target device block I/O. + * + * Based on file I/O driver from FUJITA Tomonori + * (C) 2004 - 2005 FUJITA Tomonori + * (C) 2006 Andre Brinkmann + * (C) 2007 Ross Walker + * (C) 2007 Ming Zhang + * This code is licenced under the GPL. + */ + +#include +#include +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "iotype.h" + +struct blockio_data { + char *path; + struct block_device *bdev; +}; + +struct tio_work { + atomic_t error; + atomic_t bios_remaining; + struct completion tio_complete; +}; + +static void blockio_bio_endio(struct bio *bio, int error) +{ + struct tio_work *tio_work = bio->bi_private; + + error = test_bit(BIO_UPTODATE, &bio->bi_flags) ? error : -EIO; + + if (error) + atomic_set(&tio_work->error, error); + + /* If last bio signal completion */ + if (atomic_dec_and_test(&tio_work->bios_remaining)) + complete(&tio_work->tio_complete); + + bio_put(bio); +} + +/* + * Blockio_make_request(): The function translates an iscsi-request into + * a number of requests to the corresponding block device. + */ +static int +blockio_make_request(struct iet_volume *volume, struct tio *tio, int rw) +{ + struct blockio_data *bio_data = volume->private; + struct request_queue *bdev_q = bdev_get_queue(bio_data->bdev); + struct tio_work *tio_work; + struct bio *tio_bio = NULL, *bio = NULL, *biotail = NULL; + + u32 offset = tio->offset; + u32 size = tio->size; + u32 tio_index = 0; + + int max_pages = 1; + int err = 0; + + loff_t ppos = ((loff_t) tio->idx << PAGE_SHIFT) + offset; + + /* Calculate max_pages for bio_alloc (memory saver) */ + if (bdev_q) + max_pages = bio_get_nr_vecs(bio_data->bdev); + + tio_work = kzalloc(sizeof (*tio_work), GFP_KERNEL); + if (!tio_work) + return -ENOMEM; + + atomic_set(&tio_work->error, 0); + atomic_set(&tio_work->bios_remaining, 0); + init_completion(&tio_work->tio_complete); + + /* Main processing loop, allocate and fill all bios */ + while (tio_index < tio->pg_cnt) { + bio = bio_alloc(GFP_KERNEL, min(max_pages, BIO_MAX_PAGES)); + if (!bio) { + err = -ENOMEM; + goto out; + } + + bio->bi_sector = ppos >> volume->blk_shift; + bio->bi_bdev = bio_data->bdev; + bio->bi_end_io = blockio_bio_endio; + bio->bi_private = tio_work; + + if (tio_bio) + biotail = biotail->bi_next = bio; + else + tio_bio = biotail = bio; + + atomic_inc(&tio_work->bios_remaining); + + /* Loop for filling bio */ + while (tio_index < tio->pg_cnt) { + unsigned int bytes = PAGE_SIZE - offset; + + if (bytes > size) + bytes = size; + + if (!bio_add_page(bio, tio->pvec[tio_index], bytes, offset)) + break; + + size -= bytes; + ppos += bytes; + + offset = 0; + + tio_index++; + } + } + + /* Walk the list, submitting bios 1 by 1 */ + while (tio_bio) { + bio = tio_bio; + tio_bio = tio_bio->bi_next; + bio->bi_next = NULL; + + submit_bio(rw, bio); + } + + if (bdev_q && bdev_q->unplug_fn) + bdev_q->unplug_fn(bdev_q); + + wait_for_completion(&tio_work->tio_complete); + + err = atomic_read(&tio_work->error); + + kfree(tio_work); + + return err; +out: + while (tio_bio) { + bio = tio_bio; + tio_bio = tio_bio->bi_next; + + bio_put(bio); + } + + kfree(tio_work); + + return err; +} + +static int +blockio_open_path(struct iet_volume *volume, const char *path) +{ + struct blockio_data *bio_data = volume->private; + struct block_device *bdev; + int flags = FMODE_READ | (LUReadonly(volume) ? 0 : FMODE_WRITE); + int err = 0; + + bio_data->path = kstrdup(path, GFP_KERNEL); + if (!bio_data->path) + return -ENOMEM; + + bdev = open_bdev_exclusive(path, flags, THIS_MODULE); + if (IS_ERR(bdev)) { + err = PTR_ERR(bdev); + eprintk("Can't open device %s, error %d\n", path, err); + bio_data->bdev = NULL; + } else { + bio_data->bdev = bdev; + fsync_bdev(bio_data->bdev); + } + + return err; +} + +static int +set_scsiid(struct iet_volume *volume, const char *id) +{ + size_t len; + + if ((len = strlen(id)) > SCSI_ID_LEN - VENDOR_ID_LEN) { + eprintk("SCSI ID too long, %zd provided, %u max\n", len, + SCSI_ID_LEN - VENDOR_ID_LEN); + return -EINVAL; + } + + memcpy(volume->scsi_id + VENDOR_ID_LEN, id, len); + + return 0; +} + +static void +gen_scsiid(struct iet_volume *volume, struct inode *inode) +{ + int i; + u32 *p; + + strlcpy(volume->scsi_id, VENDOR_ID, VENDOR_ID_LEN); + + for (i = VENDOR_ID_LEN; i < SCSI_ID_LEN; i++) + if (volume->scsi_id[i]) + return; + + /* If a scsi id doesn't exist generate a 16 byte one: + * Bytes 1-4: target type + * Bytes 5-8: target id + * Bytes 9-12: inode number + * Bytes 13-16: device type + */ + p = (u32 *) (volume->scsi_id + VENDOR_ID_LEN); + *(p + 0) = volume->target->trgt_param.target_type; + *(p + 1) = volume->target->tid; + *(p + 2) = volume->lun; + *(p + 3) = (unsigned int) inode->i_sb->s_dev; +} + +static int +set_scsisn(struct iet_volume *volume, const char *sn) +{ + size_t len; + + if ((len = strlen(sn)) > SCSI_SN_LEN) { + eprintk("SCSI SN too long, %zd provided, %u max\n", len, + SCSI_SN_LEN); + return -EINVAL; + } + + memcpy(volume->scsi_sn, sn, len); + + return 0; +} + +/* Create an enumeration of our accepted actions */ +enum +{ + Opt_scsiid, Opt_scsisn, Opt_path, Opt_ignore, Opt_err, +}; + +/* Create a match table using our action enums and their matching options */ +static match_table_t tokens = { + {Opt_scsiid, "ScsiId=%s"}, + {Opt_scsisn, "ScsiSN=%s"}, + {Opt_path, "Path=%s"}, + {Opt_ignore, "Type=%s"}, + {Opt_ignore, "IOMode=%s"}, + {Opt_err, NULL}, +}; + +static int +parse_blockio_params(struct iet_volume *volume, char *params) +{ + struct blockio_data *info = volume->private; + int err = 0; + char *p, *q; + + /* Loop through parameters separated by commas, look up our + * parameter in match table, return enumeration and arguments + * select case based on the returned enum and run the action */ + while ((p = strsep(¶ms, ",")) != NULL) { + substring_t args[MAX_OPT_ARGS]; + int token; + if (!*p) + continue; + token = match_token(p, tokens, args); + switch (token) { + case Opt_scsiid: + if (!(q = match_strdup(&args[0]))) { + err = -ENOMEM; + goto out; + } + err = set_scsiid(volume, q); + kfree(q); + if (err < 0) + goto out; + break; + case Opt_scsisn: + if (!(q = match_strdup(&args[0]))) { + err = -ENOMEM; + goto out; + } + err = set_scsisn(volume, q); + kfree(q); + if (err < 0) + goto out; + break; + case Opt_path: + if (info->path) { + iprintk("Target %s, LUN %u: " + "duplicate \"Path\" param\n", + volume->target->name, volume->lun); + err = -EINVAL; + goto out; + } + if (!(q = match_strdup(&args[0]))) { + err = -ENOMEM; + goto out; + } + err = blockio_open_path(volume, q); + kfree(q); + if (err < 0) + goto out; + break; + case Opt_ignore: + break; + default: + iprintk("Target %s, LUN %u: unknown param %s\n", + volume->target->name, volume->lun, p); + return -EINVAL; + } + } + + if (!info->path) { + iprintk("Target %s, LUN %u: missing \"Path\" param\n", + volume->target->name, volume->lun); + err = -EINVAL; + } + out: + return err; +} + +static void +blockio_detach(struct iet_volume *volume) +{ + struct blockio_data *bio_data = volume->private; + int flags = FMODE_READ | (LUReadonly(volume) ? 0 : FMODE_WRITE); + + if (bio_data->bdev) + close_bdev_exclusive(bio_data->bdev, flags); + kfree(bio_data->path); + + kfree(volume->private); +} + +static int +blockio_attach(struct iet_volume *volume, char *args) +{ + struct blockio_data *bio_data; + int err = 0; + + if (volume->private) { + eprintk("Lun %u already attached on Target %s \n", + volume->lun, volume->target->name); + return -EBUSY; + } + + bio_data = kzalloc(sizeof (*bio_data), GFP_KERNEL); + if (!bio_data) + return -ENOMEM; + + volume->private = bio_data; + + if ((err = parse_blockio_params(volume, args)) < 0) { + eprintk("Error attaching Lun %u to Target %s \n", + volume->lun, volume->target->name); + goto out; + } + + /* Assign a vendor id, generate scsi id if none exists */ + gen_scsiid(volume, bio_data->bdev->bd_inode); + + /* Offer neither write nor read caching */ + ClearLURCache(volume); + ClearLUWCache(volume); + + volume->blk_shift = SECTOR_SIZE_BITS; + volume->blk_cnt = bio_data->bdev->bd_inode->i_size >> volume->blk_shift; + + out: + if (err < 0) + blockio_detach(volume); + + return err; +} + +static void +blockio_show(struct iet_volume *volume, struct seq_file *seq) +{ + struct blockio_data *bio_data = volume->private; + + /* Used to display blockio volume info in /proc/net/iet/volumes */ + seq_printf(seq, " path:%s\n", bio_data->path); +} + +struct iotype blockio = { + .name = "blockio", + .attach = blockio_attach, + .make_request = blockio_make_request, + .detach = blockio_detach, + .show = blockio_show, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/wthread.c +++ linux-2.6.32/ubuntu/iscsitarget/wthread.c @@ -0,0 +1,222 @@ +/* + * Worker thread. + * (C) 2004 - 2005 FUJITA Tomonori + * This code is licenced under the GPL. + */ + +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" + +struct worker_thread_info *worker_thread_pool; + +void wthread_queue(struct iscsi_cmnd *cmnd) +{ + struct worker_thread_info *info = cmnd->conn->session->target->wthread_info; + + if (!list_empty(&cmnd->list)) { + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + eprintk("%x %p %x %x %x %x %lx %x\n", + cmnd_itt(cmnd), req, req->opcode, req->scb[0], cmnd->pdu.datasize, + be32_to_cpu(req->data_length), cmnd->flags, req->flags); + + if (cmnd->lun) + eprintk("%u\n", cmnd->lun->lun); + assert(list_empty(&cmnd->list)); + } + + spin_lock(&info->wthread_lock); + list_add_tail(&cmnd->list, &info->work_queue); + spin_unlock(&info->wthread_lock); + + atomic_inc(&cmnd->conn->nr_busy_cmnds); + + wake_up(&info->wthread_sleep); +} + +static struct iscsi_cmnd * get_ready_cmnd(struct worker_thread_info *info) +{ + struct iscsi_cmnd *cmnd = NULL; + + spin_lock(&info->wthread_lock); + if (!list_empty(&info->work_queue)) { + cmnd = list_entry(info->work_queue.next, struct iscsi_cmnd, list); + list_del_init(&cmnd->list); + + assert(cmnd->conn); + } + spin_unlock(&info->wthread_lock); + + return cmnd; +} + +static int cmnd_execute(struct iscsi_cmnd *cmnd) +{ + int type = cmnd->conn->session->target->trgt_param.target_type; + + assert(target_type_array[type]->execute_cmnd); + return target_type_array[type]->execute_cmnd(cmnd); +} + +static int worker_thread(void *arg) +{ + struct worker_thread *wt = (struct worker_thread *) arg; + struct worker_thread_info *info = wt->w_info; + struct iscsi_cmnd *cmnd; + struct iscsi_conn *conn; + DECLARE_WAITQUEUE(wait, current); + + add_wait_queue(&info->wthread_sleep, &wait); + + __set_current_state(TASK_RUNNING); + do { + while (!list_empty(&info->work_queue) && + (cmnd = get_ready_cmnd(info))) { + conn = cmnd->conn; + cmnd_execute(cmnd); + assert(conn); + atomic_dec(&conn->nr_busy_cmnds); + } + + __set_current_state(TASK_INTERRUPTIBLE); + if (list_empty(&info->work_queue)) + schedule(); + + __set_current_state(TASK_RUNNING); + } while (!kthread_should_stop()); + + remove_wait_queue(&info->wthread_sleep, &wait); + + return 0; +} + +static int start_one_worker_thread(struct worker_thread_info *info, u32 tid) +{ + struct worker_thread *wt; + struct task_struct *task; + + if (!(wt = kmalloc(sizeof(struct worker_thread), GFP_KERNEL))) + return -ENOMEM; + + wt->w_info = info; + task = kthread_create(worker_thread, wt, "istiod%d", tid); + if (IS_ERR(task)) { + kfree(wt); + return PTR_ERR(task); + } + + wt->w_task = task; + list_add(&wt->w_list, &info->wthread_list); + info->nr_running_wthreads++; + + wake_up_process(task); + + return 0; +} + +static int stop_one_worker_thread(struct worker_thread *wt) +{ + struct worker_thread_info *info = wt->w_info; + int err; + + assert(wt->w_task); + err = kthread_stop(wt->w_task); + + if (err < 0 && err != -EINTR) + return err; + + list_del(&wt->w_list); + kfree(wt); + info->nr_running_wthreads--; + + return 0; +} + +int wthread_init(struct worker_thread_info *info) +{ + spin_lock_init(&info->wthread_lock); + + info->nr_running_wthreads = 0; + + INIT_LIST_HEAD(&info->work_queue); + INIT_LIST_HEAD(&info->wthread_list); + + init_waitqueue_head(&info->wthread_sleep); + + return 0; +} + +int wthread_start(struct worker_thread_info *info, int wthreads, u32 tid) +{ + int err = 0; + + while (info->nr_running_wthreads < wthreads) { + if ((err = start_one_worker_thread(info, tid)) < 0) { + eprintk("Fail to create a worker thread %d\n", err); + goto out; + } + } + + while (info->nr_running_wthreads > wthreads) { + struct worker_thread *wt; + wt = list_entry(info->wthread_list.next, struct worker_thread, w_list); + if ((err = stop_one_worker_thread(wt)) < 0) { + eprintk("Fail to stop a worker thread %d\n", err); + break; + } + } +out: + return err; +} + +int wthread_stop(struct worker_thread_info *info) +{ + struct worker_thread *wt, *tmp; + int err = 0; + + list_for_each_entry_safe(wt, tmp, &info->wthread_list, w_list) { + if ((err = stop_one_worker_thread(wt)) < 0) { + eprintk("Fail to stop a worker thread %d\n", err); + return err; + } + } + + return err; +} + +int wthread_module_init() +{ + int err; + + if (!worker_thread_pool_size) + return 0; + + worker_thread_pool = kmalloc(sizeof(struct worker_thread_info), + GFP_KERNEL); + if (!worker_thread_pool) + return -ENOMEM; + + wthread_init(worker_thread_pool); + + err = wthread_start(worker_thread_pool, worker_thread_pool_size, 0); + if (err) { + kfree(worker_thread_pool); + worker_thread_pool = NULL; + return err; + } + + iprintk("iscsi_trgt using worker thread pool; size = %ld\n", + worker_thread_pool_size); + + return 0; +} + +void wthread_module_exit() +{ + if (!worker_thread_pool_size) + return; + + wthread_stop(worker_thread_pool); + kfree(worker_thread_pool); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/volume.c +++ linux-2.6.32/ubuntu/iscsitarget/volume.c @@ -0,0 +1,264 @@ +/* + * Volume manager + * (C) 2004 - 2005 FUJITA Tomonori + * This code is licenced under the GPL. + */ + +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "iotype.h" + +struct iet_volume *volume_lookup(struct iscsi_target *target, u32 lun) +{ + struct iet_volume *volume; + + list_for_each_entry(volume, &target->volumes, list) { + if (volume->lun == lun) + return volume; + } + return NULL; +} + +enum { + Opt_type, + Opt_iomode, + Opt_err, +}; + +static match_table_t tokens = { + {Opt_type, "Type=%s"}, + {Opt_iomode, "IOMode=%s"}, + {Opt_err, NULL}, +}; + +static int set_iotype(struct iet_volume *volume, char *params) +{ + int err = 0; + substring_t args[MAX_OPT_ARGS]; + char *p, *argp = NULL, *buf = (char *) get_zeroed_page(GFP_USER); + + if (!buf) + return -ENOMEM; + strncpy(buf, params, PAGE_CACHE_SIZE); + + while ((p = strsep(&buf, ",")) != NULL) { + int token; + + if (!*p) + continue; + token = match_token(p, tokens, args); + switch (token) { + case Opt_type: + if (!(argp = match_strdup(&args[0]))) + err = -ENOMEM; + if (argp && !(volume->iotype = get_iotype(argp))) + err = -ENOENT; + kfree(argp); + break; + case Opt_iomode: + if (!(argp = match_strdup(&args[0]))) + err = -ENOMEM; + if (argp && !strcmp(argp, "ro")) + SetLUReadonly(volume); + else if (argp && !strcmp(argp, "wb")) + SetLUWCache(volume); + kfree(argp); + break; + default: + break; + } + } + + if (!err && !volume->iotype && !(volume->iotype = get_iotype("fileio"))) { + eprintk("%s\n", "Cannot find fileio"); + err = -EINVAL; + } + + free_page((unsigned long) buf); + + return err; +} + +int volume_add(struct iscsi_target *target, struct volume_info *info) +{ + int ret; + struct iet_volume *volume; + char *args; + + volume = volume_lookup(target, info->lun); + if (volume) + return -EEXIST; + + if (info->lun > 0x3fff) + return -EINVAL; + + volume = kzalloc(sizeof(*volume), GFP_KERNEL); + if (!volume) + return -ENOMEM; + + volume->target = target; + volume->lun = info->lun; + + args = kzalloc(info->args_len + 1, GFP_KERNEL); + if (!args) { + ret = -ENOMEM; + goto free_volume; + } + + ret = copy_from_user(args, (void *)(unsigned long)info->args_ptr, + info->args_len); + if (ret) { + ret = -EFAULT; + goto free_args; + } + + ret = set_iotype(volume, args); + if (ret < 0) + goto free_args; + + ret = volume->iotype->attach(volume, args); + if (ret < 0) + goto free_args; + + INIT_LIST_HEAD(&volume->queue.wait_list); + spin_lock_init(&volume->queue.queue_lock); + spin_lock_init(&volume->reserve_lock); + + volume->l_state = IDEV_RUNNING; + atomic_set(&volume->l_count, 0); + + list_add_tail(&volume->list, &target->volumes); + atomic_inc(&target->nr_volumes); + + kfree(args); + + return 0; +free_args: + kfree(args); +free_volume: + put_iotype(volume->iotype); + kfree(volume); + + return ret; +} + +void iscsi_volume_destroy(struct iet_volume *volume) +{ + assert(volume->l_state == IDEV_DEL); + assert(!atomic_read(&volume->l_count)); + + volume->iotype->detach(volume); + put_iotype(volume->iotype); + list_del(&volume->list); + kfree(volume); +} + +int iscsi_volume_del(struct iscsi_target *target, struct volume_info *info) +{ + struct iet_volume *volume; + + eprintk("%x %x\n", target->tid, info->lun); + if (!(volume = volume_lookup(target, info->lun))) + return -ENOENT; + + volume->l_state = IDEV_DEL; + atomic_dec(&target->nr_volumes); + if (!atomic_read(&volume->l_count)) + iscsi_volume_destroy(volume); + + return 0; +} + +struct iet_volume *volume_get(struct iscsi_target *target, u32 lun) +{ + struct iet_volume *volume; + + if ((volume = volume_lookup(target, lun))) { + if (volume->l_state == IDEV_RUNNING) + atomic_inc(&volume->l_count); + else + volume = NULL; + } + return volume; +} + +void volume_put(struct iet_volume *volume) +{ + if (atomic_dec_and_test(&volume->l_count) && volume->l_state == IDEV_DEL) + iscsi_volume_destroy(volume); +} + +int volume_reserve(struct iet_volume *volume, u64 sid) +{ + if (!volume) + return -ENOENT; + + spin_lock(&volume->reserve_lock); + if (volume->reserve_sid && volume->reserve_sid != sid) { + spin_unlock(&volume->reserve_lock); + return -EBUSY; + } + + volume->reserve_sid = sid; + spin_unlock(&volume->reserve_lock); + + return 0; +} + +int is_volume_reserved(struct iet_volume *volume, u64 sid) +{ + if (!volume || !volume->reserve_sid || volume->reserve_sid == sid) + return 0; + + return -EBUSY; +} + +int volume_release(struct iet_volume *volume, u64 sid, int force) +{ + if (force || volume->reserve_sid == sid) + volume->reserve_sid = 0; + + return 0; +} + +static void iet_volume_info_show(struct seq_file *seq, struct iscsi_target *target) +{ + struct iet_volume *volume; + + list_for_each_entry(volume, &target->volumes, list) { + seq_printf(seq, "\tlun:%u state:%x iotype:%s", + volume->lun, volume->l_state, volume->iotype->name); + if (LUReadonly(volume)) + seq_printf(seq, " iomode:ro"); + else if (LUWCache(volume)) + seq_printf(seq, " iomode:wb"); + else + seq_printf(seq, " iomode:wt"); + + if (volume->iotype->show) + volume->iotype->show(volume, seq); + else + seq_printf(seq, "\n"); + } +} + +static int iet_volume_seq_open(struct inode *inode, struct file *file) +{ + int res; + res = seq_open(file, &iet_seq_op); + if (!res) + ((struct seq_file *)file->private_data)->private = + iet_volume_info_show; + return res; +} + +struct file_operations volume_seq_fops = { + .owner = THIS_MODULE, + .open = iet_volume_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/file-io.c +++ linux-2.6.32/ubuntu/iscsitarget/file-io.c @@ -0,0 +1,324 @@ +/* + * Target device file I/O. + * (C) 2004 - 2005 FUJITA Tomonori + * This code is licenced under the GPL. + */ + +#include +#include +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "iotype.h" + +struct fileio_data { + char *path; + struct file *filp; +}; + +static int fileio_make_request(struct iet_volume *lu, struct tio *tio, int rw) +{ + struct fileio_data *p = lu->private; + struct file *filp; + mm_segment_t oldfs; + struct page *page; + u32 offset, size; + loff_t ppos, count; + char *buf; + int i, err = 0; + ssize_t ret; + + assert(p); + filp = p->filp; + size = tio->size; + offset= tio->offset; + + ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; + ppos += offset; + + for (i = 0; i < tio->pg_cnt; i++) { + page = tio->pvec[i]; + assert(page); + buf = page_address(page); + buf += offset; + + if (offset + size > PAGE_CACHE_SIZE) + count = PAGE_CACHE_SIZE - offset; + else + count = size; + + oldfs = get_fs(); + set_fs(get_ds()); + + if (rw == READ) + ret = do_sync_read(filp, buf, count, &ppos); + else + ret = do_sync_write(filp, buf, count, &ppos); + + set_fs(oldfs); + + if (ret != count) { + eprintk("I/O error %lld, %ld\n", count, (long) ret); + err = -EIO; + } + + size -= count; + offset = 0; + } + assert(!size); + + return err; +} + +static int fileio_sync(struct iet_volume *lu, struct tio *tio) +{ + struct fileio_data *p = lu->private; + struct inode *inode = p->filp->f_dentry->d_inode; + struct address_space *mapping = inode->i_mapping; + loff_t ppos, count; + int res; + + if (tio) { + ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; + count = tio->size; + } else { + ppos = 0; + count = lu->blk_cnt << lu->blk_shift; + } + + res = filemap_write_and_wait_range(mapping, ppos, ppos + count - 1); + if (res) { + eprintk("I/O error: syncing pages failed: %d\n", res); + return -EIO; + } else + return 0; +} + +static int open_path(struct iet_volume *volume, const char *path) +{ + int err = 0; + struct fileio_data *info = volume->private; + struct file *filp; + mm_segment_t oldfs; + int flags; + + info->path = kstrdup(path, GFP_KERNEL); + if (!info->path) + return -ENOMEM; + + oldfs = get_fs(); + set_fs(get_ds()); + flags = (LUReadonly(volume) ? O_RDONLY : O_RDWR) | O_LARGEFILE; + filp = filp_open(path, flags, 0); + set_fs(oldfs); + + if (IS_ERR(filp)) { + err = PTR_ERR(filp); + eprintk("Can't open %s %d\n", path, err); + info->filp = NULL; + } else + info->filp = filp; + + return err; +} + +static int set_scsiid(struct iet_volume *volume, const char *id) +{ + size_t len; + + if ((len = strlen(id)) > SCSI_ID_LEN - VENDOR_ID_LEN) { + eprintk("SCSI ID too long, %zd provided, %u max\n", len, + SCSI_ID_LEN - VENDOR_ID_LEN); + return -EINVAL; + } + + memcpy(volume->scsi_id + VENDOR_ID_LEN, id, len); + + return 0; +} + +static void gen_scsiid(struct iet_volume *volume, struct inode *inode) +{ + int i; + u32 *p; + + strlcpy(volume->scsi_id, VENDOR_ID, VENDOR_ID_LEN); + + for (i = VENDOR_ID_LEN; i < SCSI_ID_LEN; i++) + if (volume->scsi_id[i]) + return; + + p = (u32 *) (volume->scsi_id + VENDOR_ID_LEN); + *(p + 0) = volume->target->trgt_param.target_type; + *(p + 1) = volume->target->tid; + *(p + 2) = (unsigned int) inode->i_ino; + *(p + 3) = (unsigned int) inode->i_sb->s_dev; +} + +static int set_scsisn(struct iet_volume *volume, const char *sn) +{ + size_t len; + + if ((len = strlen(sn)) > SCSI_SN_LEN) { + eprintk("SCSI SN too long, %zd provided, %u max\n", len, + SCSI_SN_LEN); + return -EINVAL; + } + memcpy(volume->scsi_sn, sn, len); + return 0; +} + +enum { + Opt_scsiid, Opt_scsisn, Opt_path, Opt_ignore, Opt_err, +}; + +static match_table_t tokens = { + {Opt_scsiid, "ScsiId=%s"}, + {Opt_scsisn, "ScsiSN=%s"}, + {Opt_path, "Path=%s"}, + {Opt_ignore, "Type=%s"}, + {Opt_ignore, "IOMode=%s"}, + {Opt_err, NULL}, +}; + +static int parse_fileio_params(struct iet_volume *volume, char *params) +{ + struct fileio_data *info = volume->private; + int err = 0; + char *p, *q; + + while ((p = strsep(¶ms, ",")) != NULL) { + substring_t args[MAX_OPT_ARGS]; + int token; + if (!*p) + continue; + token = match_token(p, tokens, args); + switch (token) { + case Opt_scsiid: + if (!(q = match_strdup(&args[0]))) { + err = -ENOMEM; + goto out; + } + err = set_scsiid(volume, q); + kfree(q); + if (err < 0) + goto out; + break; + case Opt_scsisn: + if (!(q = match_strdup(&args[0]))) { + err = -ENOMEM; + goto out; + } + err = set_scsisn(volume, q); + kfree(q); + if (err < 0) + goto out; + break; + case Opt_path: + if (info->path) { + iprintk("Target %s, LUN %u: " + "duplicate \"Path\" param\n", + volume->target->name, volume->lun); + err = -EINVAL; + goto out; + } + if (!(q = match_strdup(&args[0]))) { + err = -ENOMEM; + goto out; + } + err = open_path(volume, q); + kfree(q); + if (err < 0) + goto out; + break; + case Opt_ignore: + break; + default: + iprintk("Target %s, LUN %u: unknown param %s\n", + volume->target->name, volume->lun, p); + return -EINVAL; + } + } + + if (!info->path) { + iprintk("Target %s, LUN %u: missing \"Path\" param\n", + volume->target->name, volume->lun); + err = -EINVAL; + } +out: + return err; +} + +static void fileio_detach(struct iet_volume *lu) +{ + struct fileio_data *p = lu->private; + + kfree(p->path); + if (p->filp) + filp_close(p->filp, NULL); + kfree(p); + lu->private = NULL; +} + +static int fileio_attach(struct iet_volume *lu, char *args) +{ + int err = 0; + struct fileio_data *p; + struct inode *inode; + + if (lu->private) { + printk("already attached ? %d\n", lu->lun); + return -EBUSY; + } + + p = kzalloc(sizeof(*p), GFP_KERNEL); + if (!p) + return -ENOMEM; + + lu->private = p; + + if ((err = parse_fileio_params(lu, args)) < 0) { + eprintk("%d\n", err); + goto out; + } + inode = p->filp->f_dentry->d_inode; + + gen_scsiid(lu, inode); + + if (S_ISREG(inode->i_mode)) + ; + else if (S_ISBLK(inode->i_mode)) + inode = inode->i_bdev->bd_inode; + else { + err = -EINVAL; + goto out; + } + + lu->blk_shift = SECTOR_SIZE_BITS; + lu->blk_cnt = inode->i_size >> lu->blk_shift; + + /* we're using the page cache */ + SetLURCache(lu); +out: + if (err < 0) + fileio_detach(lu); + return err; +} + +static void fileio_show(struct iet_volume *lu, struct seq_file *seq) +{ + struct fileio_data *p = lu->private; + seq_printf(seq, " path:%s\n", p->path); +} + +struct iotype fileio = +{ + .name = "fileio", + .attach = fileio_attach, + .make_request = fileio_make_request, + .sync = fileio_sync, + .detach = fileio_detach, + .show = fileio_show, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/BOM +++ linux-2.6.32/ubuntu/iscsitarget/BOM @@ -0,0 +1,2 @@ +Downloaded from: svn://svn.berlios.de/iscsitarget/trunk +Current Version: 1.4.19 --- linux-2.6.32.orig/ubuntu/iscsitarget/digest.h +++ linux-2.6.32/ubuntu/iscsitarget/digest.h @@ -0,0 +1,20 @@ +/* + * iSCSI digest handling. + * (C) 2004 Xiranet Communications GmbH + * This code is licensed under the GPL. + */ + +#ifndef __IET_DIGEST_H__ +#define __IET_DIGEST_H__ + +extern void digest_alg_available(unsigned int *val); +extern int digest_init(struct iscsi_conn *conn); +extern void digest_cleanup(struct iscsi_conn *conn); + +extern int digest_rx_header(struct iscsi_cmnd *cmnd); +extern int digest_rx_data(struct iscsi_cmnd *cmnd); + +extern void digest_tx_header(struct iscsi_cmnd *cmnd); +extern void digest_tx_data(struct iscsi_cmnd *cmnd); + +#endif /* __IET_DIGEST_H__ */ --- linux-2.6.32.orig/ubuntu/iscsitarget/iotype.h +++ linux-2.6.32/ubuntu/iscsitarget/iotype.h @@ -0,0 +1,29 @@ +/* + * (C) 2004 - 2005 FUJITA Tomonori + * This code is licenced under the GPL. + */ + +#include "iscsi.h" + +#ifndef __IOTYPE_H__ +#define __IOTYPE_H__ + +struct iotype { + const char *name; + struct list_head iot_list; + + int (*attach)(struct iet_volume *dev, char *args); + int (*make_request)(struct iet_volume *dev, struct tio *tio, int rw); + int (*sync)(struct iet_volume *dev, struct tio *tio); + void (*detach)(struct iet_volume *dev); + void (*show)(struct iet_volume *dev, struct seq_file *seq); +}; + +extern struct iotype fileio; +extern struct iotype nullio; +extern struct iotype blockio; + +extern int iotype_init(void); +extern void iotype_exit(void); + +#endif --- linux-2.6.32.orig/ubuntu/iscsitarget/ua.c +++ linux-2.6.32/ubuntu/iscsitarget/ua.c @@ -0,0 +1,164 @@ +/* + * IET Unit Attention support + * + * Copyright (C) 2009 Xie Gang + * Copyright (C) 2009 Arne Redlich + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" + +#define ua_hashfn(lun) ((lun % UA_HASH_LEN)) + +static struct kmem_cache *ua_cache; + +int ua_init(void) +{ + ua_cache = KMEM_CACHE(ua_entry, 0); + if (!ua_cache) { + eprintk("%s", "Failed to create ua cache\n"); + return -ENOMEM; + } + + return 0; +} + +void ua_exit(void) +{ + if (ua_cache) + kmem_cache_destroy(ua_cache); +} + +/* sess->ua_hash_lock needs to be held */ +static struct ua_entry * ua_find_hash(struct iscsi_session *sess, u32 lun, + u8 asc, u8 ascq, int match) +{ + struct ua_entry *ua; + struct list_head *h = &sess->ua_hash[ua_hashfn(lun)]; + + list_for_each_entry(ua, h, entry) { + if (ua->lun == lun) { + if (!match) + return ua; + if (ua->asc == asc && ua->ascq == ascq) + return ua; + } + } + + return NULL; +} + +int ua_pending(struct iscsi_session *sess, u32 lun) +{ + struct ua_entry *ua; + + spin_lock(&sess->ua_hash_lock); + ua = ua_find_hash(sess, lun, 0, 0, 0); + spin_unlock(&sess->ua_hash_lock); + + dprintk_ua(ua, sess, lun); + + return ua ? 1 : 0; +} + +/* sess->ua_hash_lock needs to be held */ +static struct ua_entry * __ua_get_hash(struct iscsi_session *sess, u32 lun, + u8 asc, u8 ascq, int match) +{ + struct ua_entry *ua = ua_find_hash(sess, lun, asc, ascq, match); + + if (ua) + list_del_init(&ua->entry); + + return ua; +} + +struct ua_entry * ua_get_first(struct iscsi_session *sess, u32 lun) +{ + struct ua_entry *ua; + + spin_lock(&sess->ua_hash_lock); + ua = __ua_get_hash(sess, lun, 0, 0, 0); + spin_unlock(&sess->ua_hash_lock); + + dprintk_ua(ua, sess, lun); + + return ua; +} + +struct ua_entry * ua_get_match(struct iscsi_session *sess, u32 lun, + u8 asc, u8 ascq) +{ + struct ua_entry *ua; + + spin_lock(&sess->ua_hash_lock); + ua = __ua_get_hash(sess, lun, asc, ascq, 1); + spin_unlock(&sess->ua_hash_lock); + + dprintk_ua(ua, sess, lun); + + return ua; +} + +void ua_establish_for_session(struct iscsi_session *sess, u32 lun, + u8 asc, u8 ascq) +{ + struct list_head *l = &sess->ua_hash[ua_hashfn(lun)]; + struct ua_entry *ua = kmem_cache_alloc(ua_cache, GFP_KERNEL); + + if (!ua) { + eprintk("%s", "Failed to alloc ua"); + return; + } + + ua->asc = asc; + ua->ascq = ascq; + ua->lun = lun; + ua->session = sess; + + spin_lock(&sess->ua_hash_lock); + list_add_tail(&ua->entry, l); + spin_unlock(&sess->ua_hash_lock); + + dprintk_ua(ua, sess, lun); +} + +void ua_establish_for_other_sessions(struct iscsi_session *sess, u32 lun, + u8 asc, u8 ascq) +{ + struct list_head *l = &sess->target->session_list; + struct iscsi_session *s; + + spin_lock(&sess->target->session_list_lock); + list_for_each_entry(s, l, list) + if (s->sid != sess->sid) + ua_establish_for_session(s, lun, asc, ascq); + spin_unlock(&sess->target->session_list_lock); +} + +void ua_establish_for_all_sessions(struct iscsi_target *target, u32 lun, + u8 asc, u8 ascq) +{ + struct list_head *l = &target->session_list; + struct iscsi_session *s; + + spin_lock(&target->session_list_lock); + list_for_each_entry(s, l, list) + ua_establish_for_session(s, lun, asc, ascq); + spin_unlock(&target->session_list_lock); + +} + +void ua_free(struct ua_entry *ua) +{ + if (!ua) + return; + + dprintk_ua(ua, ua->session, ua->lun); + BUG_ON(!list_empty(&ua->entry)); + kmem_cache_free(ua_cache, ua); +} --- linux-2.6.32.orig/ubuntu/iscsitarget/Makefile +++ linux-2.6.32/ubuntu/iscsitarget/Makefile @@ -0,0 +1,17 @@ +# +# Makefile for the Linux kernel device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (not a .c file). +# +# Note 2! The CFLAGS definitions are now in the main makefile. + +EXTRA_CFLAGS += -I$(src)/include + +obj-m += iscsi_trgt.o +iscsi_trgt-objs := tio.o iscsi.o nthread.o wthread.o config.o digest.o \ + conn.o session.o target.o volume.o iotype.o \ + file-io.o null-io.o target_disk.o event.o param.o \ + block-io.o ua.o + --- linux-2.6.32.orig/ubuntu/iscsitarget/iscsi.c +++ linux-2.6.32/ubuntu/iscsitarget/iscsi.c @@ -0,0 +1,1924 @@ +/* + * Copyright (C) 2002-2003 Ardis Technolgies + * Copyright (C) 2008 Arne Redlich + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "iotype.h" + +unsigned long debug_enable_flags; +unsigned long worker_thread_pool_size; + +static struct kmem_cache *iscsi_cmnd_cache; +static u8 dummy_data[PAGE_SIZE]; + +static int ctr_major; +static char ctr_name[] = "ietctl"; +extern struct file_operations ctr_fops; + +static u32 cmnd_write_size(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *hdr = cmnd_hdr(cmnd); + + if (hdr->flags & ISCSI_CMD_WRITE) + return be32_to_cpu(hdr->data_length); + return 0; +} + +static u32 cmnd_read_size(struct iscsi_cmnd *cmnd) +{ + struct iscsi_scsi_cmd_hdr *hdr = cmnd_hdr(cmnd); + + if (hdr->flags & ISCSI_CMD_READ) { + struct iscsi_rlength_ahdr *ahdr = + (struct iscsi_rlength_ahdr *)cmnd->pdu.ahs; + + if (!(hdr->flags & ISCSI_CMD_WRITE)) + return be32_to_cpu(hdr->data_length); + if (ahdr && ahdr->ahstype == ISCSI_AHSTYPE_RLENGTH) + return be32_to_cpu(ahdr->read_length); + } + return 0; +} + +static void iscsi_device_queue_cmnd(struct iscsi_cmnd *cmnd) +{ + set_cmnd_waitio(cmnd); + wthread_queue(cmnd); +} + +static void iscsi_scsi_queuecmnd(struct iscsi_cmnd *cmnd) +{ + struct iscsi_queue *queue = &cmnd->lun->queue; + + dprintk(D_GENERIC, "%p\n", cmnd); + + if ((cmnd->pdu.bhs.flags & ISCSI_CMD_ATTR_MASK) != ISCSI_CMD_UNTAGGED && + (cmnd->pdu.bhs.flags & ISCSI_CMD_ATTR_MASK) != ISCSI_CMD_SIMPLE) { + cmnd->pdu.bhs.flags &= ~ISCSI_CMD_ATTR_MASK; + cmnd->pdu.bhs.flags |= ISCSI_CMD_UNTAGGED; + } + + spin_lock(&queue->queue_lock); + + set_cmnd_queued(cmnd); + + switch (cmnd->pdu.bhs.flags & ISCSI_CMD_ATTR_MASK) { + case ISCSI_CMD_UNTAGGED: + case ISCSI_CMD_SIMPLE: + if (!list_empty(&queue->wait_list) || queue->ordered_cmnd) + goto pending; + queue->active_cnt++; + break; + + default: + BUG(); + } + spin_unlock(&queue->queue_lock); + + iscsi_device_queue_cmnd(cmnd); + return; + pending: + assert(list_empty(&cmnd->list)); + + list_add_tail(&cmnd->list, &queue->wait_list); + spin_unlock(&queue->queue_lock); + return; +} + +static void iscsi_scsi_dequeuecmnd(struct iscsi_cmnd *cmnd) +{ + struct iscsi_queue *queue; + + if (!cmnd->lun) + return; + queue = &cmnd->lun->queue; + spin_lock(&queue->queue_lock); + switch (cmnd->pdu.bhs.flags & ISCSI_CMD_ATTR_MASK) { + case ISCSI_CMD_UNTAGGED: + case ISCSI_CMD_SIMPLE: + --queue->active_cnt; + break; + case ISCSI_CMD_ORDERED: + case ISCSI_CMD_HEAD_OF_QUEUE: + case ISCSI_CMD_ACA: + BUG(); + default: + /* Should the iscsi_scsi_queuecmnd func reject this ? */ + break; + } + + while (!list_empty(&queue->wait_list)) { + cmnd = list_entry(queue->wait_list.next, struct iscsi_cmnd, list); + switch ((cmnd->pdu.bhs.flags & ISCSI_CMD_ATTR_MASK)) { + case ISCSI_CMD_UNTAGGED: + case ISCSI_CMD_SIMPLE: + list_del_init(&cmnd->list); + queue->active_cnt++; + iscsi_device_queue_cmnd(cmnd); + break; + case ISCSI_CMD_ORDERED: + case ISCSI_CMD_HEAD_OF_QUEUE: + case ISCSI_CMD_ACA: + BUG(); + } + } + + spin_unlock(&queue->queue_lock); + + return; +} + +/** + * create a new command. + * + * iscsi_cmnd_create - + * @conn: ptr to connection (for i/o) + * + * @return ptr to command or NULL + */ + +struct iscsi_cmnd *cmnd_alloc(struct iscsi_conn *conn, int req) +{ + struct iscsi_cmnd *cmnd; + + /* TODO: async interface is necessary ? */ + cmnd = kmem_cache_alloc(iscsi_cmnd_cache, GFP_KERNEL|__GFP_NOFAIL); + + memset(cmnd, 0, sizeof(*cmnd)); + INIT_LIST_HEAD(&cmnd->list); + INIT_LIST_HEAD(&cmnd->pdu_list); + INIT_LIST_HEAD(&cmnd->conn_list); + INIT_LIST_HEAD(&cmnd->hash_list); + cmnd->conn = conn; + spin_lock(&conn->list_lock); + atomic_inc(&conn->nr_cmnds); + if (req) + list_add_tail(&cmnd->conn_list, &conn->pdu_list); + spin_unlock(&conn->list_lock); + cmnd->tio = NULL; + + dprintk(D_GENERIC, "%p:%p\n", conn, cmnd); + + return cmnd; +} + +/** + * create a new command used as response. + * + * iscsi_cmnd_create_rsp_cmnd - + * @cmnd: ptr to request command + * + * @return ptr to response command or NULL + */ + +static struct iscsi_cmnd *iscsi_cmnd_create_rsp_cmnd(struct iscsi_cmnd *cmnd, int final) +{ + struct iscsi_cmnd *rsp = cmnd_alloc(cmnd->conn, 0); + + if (final) + set_cmnd_final(rsp); + list_add_tail(&rsp->pdu_list, &cmnd->pdu_list); + rsp->req = cmnd; + return rsp; +} + +static struct iscsi_cmnd *get_rsp_cmnd(struct iscsi_cmnd *req) +{ + return list_entry(req->pdu_list.prev, struct iscsi_cmnd, pdu_list); +} + +static void iscsi_cmnds_init_write(struct list_head *send) +{ + struct iscsi_cmnd *cmnd = list_entry(send->next, struct iscsi_cmnd, list); + struct iscsi_conn *conn = cmnd->conn; + struct list_head *pos, *next; + + spin_lock(&conn->list_lock); + + list_for_each_safe(pos, next, send) { + cmnd = list_entry(pos, struct iscsi_cmnd, list); + + dprintk(D_GENERIC, "%p:%x\n", cmnd, cmnd_opcode(cmnd)); + + list_del_init(&cmnd->list); + assert(conn == cmnd->conn); + list_add_tail(&cmnd->list, &conn->write_list); + } + + spin_unlock(&conn->list_lock); + + nthread_wakeup(conn->session->target); +} + +static void iscsi_cmnd_init_write(struct iscsi_cmnd *cmnd) +{ + LIST_HEAD(head); + + if (!list_empty(&cmnd->list)) { + eprintk("%x %x %x %x %lx %u %u %u %u %u %u %u %d %d\n", + cmnd_itt(cmnd), cmnd_ttt(cmnd), cmnd_opcode(cmnd), + cmnd_scsicode(cmnd), cmnd->flags, cmnd->r2t_sn, + cmnd->r2t_length, cmnd->is_unsolicited_data, + cmnd->target_task_tag, cmnd->outstanding_r2t, + cmnd->hdigest, cmnd->ddigest, + list_empty(&cmnd->pdu_list), list_empty(&cmnd->hash_list)); + + assert(list_empty(&cmnd->list)); + } + list_add(&cmnd->list, &head); + iscsi_cmnds_init_write(&head); +} + +static void do_send_data_rsp(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + struct iscsi_cmnd *data_cmnd; + struct tio *tio = cmnd->tio; + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + struct iscsi_data_in_hdr *rsp; + u32 pdusize, expsize, scsisize, size, offset, sn; + LIST_HEAD(send); + + dprintk(D_GENERIC, "%p\n", cmnd); + pdusize = conn->session->param.max_xmit_data_length; + expsize = cmnd_read_size(cmnd); + size = min(expsize, tio->size); + offset = 0; + sn = 0; + + while (1) { + data_cmnd = iscsi_cmnd_create_rsp_cmnd(cmnd, size <= pdusize); + tio_get(tio); + data_cmnd->tio = tio; + rsp = (struct iscsi_data_in_hdr *)&data_cmnd->pdu.bhs; + + rsp->opcode = ISCSI_OP_SCSI_DATA_IN; + rsp->itt = req->itt; + rsp->ttt = cpu_to_be32(ISCSI_RESERVED_TAG); + rsp->buffer_offset = offset; + rsp->data_sn = cpu_to_be32(sn); + + if (size <= pdusize) { + data_cmnd->pdu.datasize = size; + rsp->flags = ISCSI_FLG_FINAL | ISCSI_FLG_STATUS; + + scsisize = tio->size; + if (scsisize < expsize) { + rsp->flags |= ISCSI_FLG_RESIDUAL_UNDERFLOW; + size = expsize - scsisize; + } else if (scsisize > expsize) { + rsp->flags |= ISCSI_FLG_RESIDUAL_OVERFLOW; + size = scsisize - expsize; + } else + size = 0; + rsp->residual_count = cpu_to_be32(size); + list_add_tail(&data_cmnd->list, &send); + + break; + } + + data_cmnd->pdu.datasize = pdusize; + + size -= pdusize; + offset += pdusize; + sn++; + + list_add_tail(&data_cmnd->list, &send); + } + + iscsi_cmnds_init_write(&send); +} + +static struct iscsi_cmnd *create_scsi_rsp(struct iscsi_cmnd *req) +{ + struct iscsi_cmnd *rsp; + struct iscsi_scsi_cmd_hdr *req_hdr = cmnd_hdr(req); + struct iscsi_scsi_rsp_hdr *rsp_hdr; + struct iscsi_sense_data *sense; + + rsp = iscsi_cmnd_create_rsp_cmnd(req, 1); + + rsp_hdr = (struct iscsi_scsi_rsp_hdr *)&rsp->pdu.bhs; + rsp_hdr->opcode = ISCSI_OP_SCSI_RSP; + rsp_hdr->flags = ISCSI_FLG_FINAL; + rsp_hdr->response = ISCSI_RESPONSE_COMMAND_COMPLETED; + rsp_hdr->cmd_status = req->status; + rsp_hdr->itt = req_hdr->itt; + + if (req->status == SAM_STAT_CHECK_CONDITION) { + assert(!rsp->tio); + rsp->tio = tio_alloc(1); + sense = (struct iscsi_sense_data *) + page_address(rsp->tio->pvec[0]); + + assert(sense); + clear_page(sense); + sense->length = cpu_to_be16(IET_SENSE_BUF_SIZE); + + memcpy(sense->data, req->sense_buf, IET_SENSE_BUF_SIZE); + rsp->pdu.datasize = sizeof(struct iscsi_sense_data) + + IET_SENSE_BUF_SIZE; + + rsp->tio->size = (rsp->pdu.datasize + 3) & -4; + rsp->tio->offset = 0; + } + + return rsp; +} + +void iscsi_cmnd_set_sense(struct iscsi_cmnd *cmnd, u8 sense_key, u8 asc, + u8 ascq) +{ + cmnd->status = SAM_STAT_CHECK_CONDITION; + + cmnd->sense_buf[0] = 0xf0; + cmnd->sense_buf[2] = sense_key; + cmnd->sense_buf[7] = 6; // Additional sense length + cmnd->sense_buf[12] = asc; + cmnd->sense_buf[13] = ascq; +} + +static struct iscsi_cmnd *create_sense_rsp(struct iscsi_cmnd *req, + u8 sense_key, u8 asc, u8 ascq) +{ + iscsi_cmnd_set_sense(req, sense_key, asc, ascq); + return create_scsi_rsp(req); +} + +void send_scsi_rsp(struct iscsi_cmnd *req, void (*func)(struct iscsi_cmnd *)) +{ + struct iscsi_cmnd *rsp; + struct iscsi_scsi_rsp_hdr *rsp_hdr; + u32 size; + + func(req); + rsp = create_scsi_rsp(req); + + switch (req->status) { + case SAM_STAT_GOOD: + case SAM_STAT_RESERVATION_CONFLICT: + rsp_hdr = (struct iscsi_scsi_rsp_hdr *) &rsp->pdu.bhs; + if ((size = cmnd_read_size(req)) != 0) { + rsp_hdr->flags |= ISCSI_FLG_RESIDUAL_UNDERFLOW; + rsp_hdr->residual_count = cpu_to_be32(size); + } + break; + default: + break; + } + + iscsi_cmnd_init_write(rsp); +} + +void send_data_rsp(struct iscsi_cmnd *req, void (*func)(struct iscsi_cmnd *)) +{ + struct iscsi_cmnd *rsp; + + func(req); + + if (req->status == SAM_STAT_GOOD) + do_send_data_rsp(req); + else { + rsp = create_scsi_rsp(req); + iscsi_cmnd_init_write(rsp); + } +} + +/** + * Free a command. + * Also frees the additional header. + * + * iscsi_cmnd_remove - + * @cmnd: ptr to command + */ + +static void iscsi_cmnd_remove(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn; + + if (!cmnd) + return; + + if (cmnd_timer_active(cmnd)) { + clear_cmnd_timer_active(cmnd); + del_timer_sync(&cmnd->timer); + } + + dprintk(D_GENERIC, "%p\n", cmnd); + conn = cmnd->conn; + kfree(cmnd->pdu.ahs); + + if (!list_empty(&cmnd->list)) { + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd); + + eprintk("cmnd %p still on some list?, %x, %x, %x, %x, %x, %x, %x %lx\n", + cmnd, req->opcode, req->scb[0], req->flags, req->itt, + be32_to_cpu(req->data_length), + req->cmd_sn, be32_to_cpu(cmnd->pdu.datasize), + conn->state); + + if (cmnd->req) { + struct iscsi_scsi_cmd_hdr *req = cmnd_hdr(cmnd->req); + eprintk("%p %x %u\n", req, req->opcode, req->scb[0]); + } + dump_stack(); + BUG(); + } + list_del(&cmnd->list); + spin_lock(&conn->list_lock); + atomic_dec(&conn->nr_cmnds); + list_del(&cmnd->conn_list); + spin_unlock(&conn->list_lock); + + if (cmnd->tio) + tio_put(cmnd->tio); + + kmem_cache_free(iscsi_cmnd_cache, cmnd); +} + +static void cmnd_skip_pdu(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + struct tio *tio = cmnd->tio; + char *addr; + u32 size; + int i; + + eprintk("%x %x %x %u\n", cmnd_itt(cmnd), cmnd_opcode(cmnd), + cmnd_hdr(cmnd)->scb[0], cmnd->pdu.datasize); + + if (!(size = cmnd->pdu.datasize)) + return; + + if (tio) + assert(tio->pg_cnt > 0); + else + tio = cmnd->tio = tio_alloc(1); + + addr = page_address(tio->pvec[0]); + assert(addr); + size = (size + 3) & -4; + conn->read_size = size; + for (i = 0; size > PAGE_CACHE_SIZE; i++, size -= PAGE_CACHE_SIZE) { + assert(i < ISCSI_CONN_IOV_MAX); + conn->read_iov[i].iov_base = addr; + conn->read_iov[i].iov_len = PAGE_CACHE_SIZE; + } + conn->read_iov[i].iov_base = addr; + conn->read_iov[i].iov_len = size; + conn->read_msg.msg_iov = conn->read_iov; + conn->read_msg.msg_iovlen = ++i; +} + +static void iscsi_cmnd_reject(struct iscsi_cmnd *req, int reason) +{ + struct iscsi_cmnd *rsp; + struct iscsi_reject_hdr *rsp_hdr; + struct tio *tio; + char *addr; + + rsp = iscsi_cmnd_create_rsp_cmnd(req, 1); + rsp_hdr = (struct iscsi_reject_hdr *)&rsp->pdu.bhs; + + rsp_hdr->opcode = ISCSI_OP_REJECT; + rsp_hdr->ffffffff = ISCSI_RESERVED_TAG; + rsp_hdr->reason = reason; + + rsp->tio = tio = tio_alloc(1); + addr = page_address(tio->pvec[0]); + clear_page(addr); + memcpy(addr, &req->pdu.bhs, sizeof(struct iscsi_hdr)); + tio->size = rsp->pdu.datasize = sizeof(struct iscsi_hdr); + cmnd_skip_pdu(req); + + req->pdu.bhs.opcode = ISCSI_OP_PDU_REJECT; +} + +static void cmnd_set_sn(struct iscsi_cmnd *cmnd, int set_stat_sn) +{ + struct iscsi_conn *conn = cmnd->conn; + struct iscsi_session *sess = conn->session; + + if (set_stat_sn) + cmnd->pdu.bhs.sn = cpu_to_be32(conn->stat_sn++); + cmnd->pdu.bhs.exp_sn = cpu_to_be32(sess->exp_cmd_sn); + cmnd->pdu.bhs.max_sn = cpu_to_be32(sess->exp_cmd_sn + sess->max_queued_cmnds); +} + +static void update_stat_sn(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + u32 exp_stat_sn; + + cmnd->pdu.bhs.exp_sn = exp_stat_sn = be32_to_cpu(cmnd->pdu.bhs.exp_sn); + dprintk(D_GENERIC, "%x,%x\n", cmnd_opcode(cmnd), exp_stat_sn); + if ((int)(exp_stat_sn - conn->exp_stat_sn) > 0 && + (int)(exp_stat_sn - conn->stat_sn) <= 0) { + // free pdu resources + cmnd->conn->exp_stat_sn = exp_stat_sn; + } +} + +static int check_cmd_sn(struct iscsi_cmnd *cmnd) +{ + struct iscsi_session *session = cmnd->conn->session; + u32 cmd_sn; + + cmnd->pdu.bhs.sn = cmd_sn = be32_to_cpu(cmnd->pdu.bhs.sn); + dprintk(D_GENERIC, "%d(%d)\n", cmd_sn, session->exp_cmd_sn); + if ((s32)(cmd_sn - session->exp_cmd_sn) >= 0) + return 0; + eprintk("sequence error (%x,%x)\n", cmd_sn, session->exp_cmd_sn); + return -ISCSI_REASON_PROTOCOL_ERROR; +} + +static struct iscsi_cmnd *__cmnd_find_hash(struct iscsi_session *session, u32 itt, u32 ttt) +{ + struct list_head *head; + struct iscsi_cmnd *cmnd; + + head = &session->cmnd_hash[cmnd_hashfn(itt)]; + + list_for_each_entry(cmnd, head, hash_list) { + if (cmnd->pdu.bhs.itt == itt) { + if ((ttt != ISCSI_RESERVED_TAG) && (ttt != cmnd->target_task_tag)) + continue; + return cmnd; + } + } + + return NULL; +} + +static struct iscsi_cmnd *cmnd_find_hash(struct iscsi_session *session, u32 itt, u32 ttt) +{ + struct iscsi_cmnd *cmnd; + + spin_lock(&session->cmnd_hash_lock); + + cmnd = __cmnd_find_hash(session, itt, ttt); + + spin_unlock(&session->cmnd_hash_lock); + + return cmnd; +} + +static int cmnd_insert_hash_ttt(struct iscsi_cmnd *cmnd, u32 ttt) +{ + struct iscsi_session *session = cmnd->conn->session; + struct iscsi_cmnd *tmp; + struct list_head *head; + int err = 0; + u32 itt = cmnd->pdu.bhs.itt; + + head = &session->cmnd_hash[cmnd_hashfn(itt)]; + + spin_lock(&session->cmnd_hash_lock); + + tmp = __cmnd_find_hash(session, itt, ttt); + if (!tmp) { + list_add_tail(&cmnd->hash_list, head); + set_cmnd_hashed(cmnd); + } else + err = -ISCSI_REASON_TASK_IN_PROGRESS; + + spin_unlock(&session->cmnd_hash_lock); + + return err; +} + +static int cmnd_insert_hash(struct iscsi_cmnd *cmnd) +{ + int err; + + dprintk(D_GENERIC, "%p:%x\n", cmnd, cmnd->pdu.bhs.itt); + + if (cmnd->pdu.bhs.itt == ISCSI_RESERVED_TAG) + return -ISCSI_REASON_PROTOCOL_ERROR; + + err = cmnd_insert_hash_ttt(cmnd, ISCSI_RESERVED_TAG); + if (!err) { + update_stat_sn(cmnd); + err = check_cmd_sn(cmnd); + } + + return err; +} + +static void __cmnd_remove_hash(struct iscsi_cmnd *cmnd) +{ + list_del(&cmnd->hash_list); +} + +static void cmnd_remove_hash(struct iscsi_cmnd *cmnd) +{ + struct iscsi_session *session = cmnd->conn->session; + struct iscsi_cmnd *tmp; + + spin_lock(&session->cmnd_hash_lock); + + tmp = __cmnd_find_hash(session, cmnd->pdu.bhs.itt, + cmnd->target_task_tag); + if (tmp && tmp == cmnd) + __cmnd_remove_hash(tmp); + else + eprintk("%p:%x not found\n", cmnd, cmnd_itt(cmnd)); + + spin_unlock(&session->cmnd_hash_lock); +} + +static void cmnd_skip_data(struct iscsi_cmnd *req) +{ + struct iscsi_cmnd *rsp; + struct iscsi_scsi_rsp_hdr *rsp_hdr; + u32 size; + + rsp = get_rsp_cmnd(req); + rsp_hdr = (struct iscsi_scsi_rsp_hdr *)&rsp->pdu.bhs; + if (cmnd_opcode(rsp) != ISCSI_OP_SCSI_RSP) { + eprintk("unexpected response command %u\n", cmnd_opcode(rsp)); + return; + } + + size = cmnd_write_size(req); + if (size) { + rsp_hdr->flags |= ISCSI_FLG_RESIDUAL_UNDERFLOW; + rsp_hdr->residual_count = cpu_to_be32(size); + } + size = cmnd_read_size(req); + if (size) { + if (cmnd_hdr(req)->flags & ISCSI_CMD_WRITE) { + rsp_hdr->flags |= ISCSI_FLG_BIRESIDUAL_UNDERFLOW; + rsp_hdr->bi_residual_count = cpu_to_be32(size); + } else { + rsp_hdr->flags |= ISCSI_FLG_RESIDUAL_UNDERFLOW; + rsp_hdr->residual_count = cpu_to_be32(size); + } + } + req->pdu.bhs.opcode = + (req->pdu.bhs.opcode & ~ISCSI_OPCODE_MASK) | ISCSI_OP_SCSI_REJECT; + + cmnd_skip_pdu(req); +} + +static int cmnd_recv_pdu(struct iscsi_conn *conn, struct tio *tio, u32 offset, u32 size) +{ + int idx, i; + char *addr; + + dprintk(D_GENERIC, "%p %u,%u\n", tio, offset, size); + offset += tio->offset; + + if (!(offset < tio->offset + tio->size) || + !(offset + size <= tio->offset + tio->size)) { + eprintk("%u %u %u %u", offset, size, tio->offset, tio->size); + return -EIO; + } + assert(offset < tio->offset + tio->size); + assert(offset + size <= tio->offset + tio->size); + + idx = offset >> PAGE_CACHE_SHIFT; + offset &= ~PAGE_CACHE_MASK; + + conn->read_msg.msg_iov = conn->read_iov; + conn->read_size = size = (size + 3) & -4; + conn->read_overflow = 0; + + i = 0; + while (1) { + assert(tio->pvec[idx]); + addr = page_address(tio->pvec[idx]); + assert(addr); + conn->read_iov[i].iov_base = addr + offset; + if (offset + size <= PAGE_CACHE_SIZE) { + conn->read_iov[i].iov_len = size; + conn->read_msg.msg_iovlen = ++i; + break; + } + conn->read_iov[i].iov_len = PAGE_CACHE_SIZE - offset; + size -= conn->read_iov[i].iov_len; + offset = 0; + if (++i >= ISCSI_CONN_IOV_MAX) { + conn->read_msg.msg_iovlen = i; + conn->read_overflow = size; + conn->read_size -= size; + break; + } + + idx++; + } + + return 0; +} + +static void set_offset_and_length(struct iet_volume *lu, u8 *cmd, loff_t *off, u32 *len) +{ + assert(lu); + + switch (cmd[0]) { + case READ_6: + case WRITE_6: + *off = ((cmd[1] & 0x1f) << 16) + (cmd[2] << 8) + cmd[3]; + *len = cmd[4]; + if (!*len) + *len = 256; + break; + case READ_10: + case WRITE_10: + case WRITE_VERIFY: + *off = (u32)cmd[2] << 24 | (u32)cmd[3] << 16 | + (u32)cmd[4] << 8 | (u32)cmd[5]; + *len = (cmd[7] << 8) + cmd[8]; + break; + case READ_16: + case WRITE_16: + *off = (u64)cmd[2] << 56 | (u64)cmd[3] << 48 | + (u64)cmd[4] << 40 | (u64)cmd[5] << 32 | + (u64)cmd[6] << 24 | (u64)cmd[7] << 16 | + (u64)cmd[8] << 8 | (u64)cmd[9]; + *len = (u32)cmd[10] << 24 | (u32)cmd[11] << 16 | + (u32)cmd[12] << 8 | (u32)cmd[13]; + break; + default: + BUG(); + } + + *off <<= lu->blk_shift; + *len <<= lu->blk_shift; +} + +static u32 translate_lun(u16 * data) +{ + u8 *p = (u8 *) data; + u32 lun = ~0U; + + switch (*p >> 6) { + case 0: + lun = p[1]; + break; + case 1: + lun = (0x3f & p[0]) << 8 | p[1]; + break; + case 2: + case 3: + default: + eprintk("%u %u %u %u\n", data[0], data[1], data[2], data[3]); + break; + } + + return lun; +} + +static void send_r2t(struct iscsi_cmnd *req) +{ + struct iscsi_cmnd *rsp; + struct iscsi_r2t_hdr *rsp_hdr; + u32 length, offset, burst; + LIST_HEAD(send); + + length = req->r2t_length; + burst = req->conn->session->param.max_burst_length; + offset = be32_to_cpu(cmnd_hdr(req)->data_length) - length; + + do { + rsp = iscsi_cmnd_create_rsp_cmnd(req, 0); + rsp->pdu.bhs.ttt = req->target_task_tag; + + rsp_hdr = (struct iscsi_r2t_hdr *)&rsp->pdu.bhs; + rsp_hdr->opcode = ISCSI_OP_R2T; + rsp_hdr->flags = ISCSI_FLG_FINAL; + memcpy(rsp_hdr->lun, cmnd_hdr(req)->lun, 8); + rsp_hdr->itt = cmnd_hdr(req)->itt; + rsp_hdr->r2t_sn = cpu_to_be32(req->r2t_sn++); + rsp_hdr->buffer_offset = cpu_to_be32(offset); + if (length > burst) { + rsp_hdr->data_length = cpu_to_be32(burst); + length -= burst; + offset += burst; + } else { + rsp_hdr->data_length = cpu_to_be32(length); + length = 0; + } + + dprintk(D_WRITE, "%x %u %u %u %u\n", cmnd_itt(req), + be32_to_cpu(rsp_hdr->data_length), + be32_to_cpu(rsp_hdr->buffer_offset), + be32_to_cpu(rsp_hdr->r2t_sn), req->outstanding_r2t); + + list_add_tail(&rsp->list, &send); + + if (++req->outstanding_r2t >= req->conn->session->param.max_outstanding_r2t) + break; + + } while (length); + + iscsi_cmnds_init_write(&send); +} + +static void scsi_cmnd_exec(struct iscsi_cmnd *cmnd) +{ + if (cmnd->r2t_length) { + if (!cmnd->is_unsolicited_data) + send_r2t(cmnd); + } else { + if (cmnd->lun) { + iscsi_scsi_queuecmnd(cmnd); + } else { + iscsi_device_queue_cmnd(cmnd); + } + } +} + +static int nop_out_start(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd) +{ + u32 size, tmp; + int i, err = 0; + + if (cmnd_ttt(cmnd) != cpu_to_be32(ISCSI_RESERVED_TAG)) { + cmnd->req = cmnd_find_hash(conn->session, cmnd->pdu.bhs.itt, + cmnd->pdu.bhs.ttt); + if (!cmnd->req) { + /* + * We didn't request this NOP-Out (by sending a + * NOP-In, see 10.18.2 of the RFC) or our fake NOP-Out + * timed out. + */ + eprintk("initiator bug %x\n", cmnd_itt(cmnd)); + err = -ISCSI_REASON_PROTOCOL_ERROR; + goto out; + } + + del_timer_sync(&cmnd->req->timer); + clear_cmnd_timer_active(cmnd->req); + dprintk(D_GENERIC, "NOP-Out: %p, ttt %x, timer %p\n", + cmnd->req, cmnd_ttt(cmnd->req), &cmnd->req->timer); + } + + if (cmnd_itt(cmnd) == cpu_to_be32(ISCSI_RESERVED_TAG)) { + if (!(cmnd->pdu.bhs.opcode & ISCSI_OP_IMMEDIATE)) + eprintk("%s\n", "initiator bug!"); + update_stat_sn(cmnd); + err = check_cmd_sn(cmnd); + if (err) + goto out; + } else if ((err = cmnd_insert_hash(cmnd)) < 0) { + eprintk("ignore this request %x\n", cmnd_itt(cmnd)); + goto out; + } + + if ((size = cmnd->pdu.datasize)) { + size = (size + 3) & -4; + conn->read_msg.msg_iov = conn->read_iov; + if (cmnd->pdu.bhs.itt != cpu_to_be32(ISCSI_RESERVED_TAG)) { + struct tio *tio; + int pg_cnt = get_pgcnt(size, 0); + + assert(pg_cnt < ISCSI_CONN_IOV_MAX); + cmnd->tio = tio = tio_alloc(pg_cnt); + tio_set(tio, size, 0); + + for (i = 0; i < pg_cnt; i++) { + conn->read_iov[i].iov_base + = page_address(tio->pvec[i]); + tmp = min_t(u32, size, PAGE_CACHE_SIZE); + conn->read_iov[i].iov_len = tmp; + conn->read_size += tmp; + size -= tmp; + } + } else { + for (i = 0; i < ISCSI_CONN_IOV_MAX; i++) { + conn->read_iov[i].iov_base = dummy_data; + tmp = min_t(u32, size, sizeof(dummy_data)); + conn->read_iov[i].iov_len = tmp; + conn->read_size += tmp; + size -= tmp; + } + } + assert(!size); + conn->read_overflow = size; + conn->read_msg.msg_iovlen = i; + } + +out: + return err; +} + +static u32 get_next_ttt(struct iscsi_session *session) +{ + u32 ttt; + + if (session->next_ttt == ISCSI_RESERVED_TAG) + session->next_ttt++; + ttt = session->next_ttt++; + + return cpu_to_be32(ttt); +} + +static void scsi_cmnd_start(struct iscsi_conn *conn, struct iscsi_cmnd *req) +{ + struct iscsi_scsi_cmd_hdr *req_hdr = cmnd_hdr(req); + + dprintk(D_GENERIC, "scsi command: %02x\n", req_hdr->scb[0]); + + req->lun = volume_get(conn->session->target, translate_lun(req_hdr->lun)); + if (!req->lun) { + switch (req_hdr->scb[0]) { + case INQUIRY: + case REPORT_LUNS: + break; + default: + eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); + create_sense_rsp(req, ILLEGAL_REQUEST, 0x25, 0x0); + cmnd_skip_data(req); + goto out; + } + } else + set_cmnd_lunit(req); + + switch (req_hdr->scb[0]) { + case SERVICE_ACTION_IN: + if ((req_hdr->scb[1] & 0x1f) != 0x10) + goto error; + case INQUIRY: + case REPORT_LUNS: + case TEST_UNIT_READY: + case SYNCHRONIZE_CACHE: + case VERIFY: + case VERIFY_16: + case START_STOP: + case READ_CAPACITY: + case MODE_SENSE: + case REQUEST_SENSE: + case RESERVE: + case RELEASE: + { + if (!(req_hdr->flags & ISCSI_CMD_FINAL) || req->pdu.datasize) { + /* unexpected unsolicited data */ + eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); + create_sense_rsp(req, ABORTED_COMMAND, 0xc, 0xc); + cmnd_skip_data(req); + } + break; + } + case READ_6: + case READ_10: + case READ_16: + { + loff_t offset; + u32 length; + + if (!(req_hdr->flags & ISCSI_CMD_FINAL) || req->pdu.datasize) { + /* unexpected unsolicited data */ + eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); + create_sense_rsp(req, ABORTED_COMMAND, 0xc, 0xc); + cmnd_skip_data(req); + break; + } + + set_offset_and_length(req->lun, req_hdr->scb, &offset, &length); + req->tio = tio_alloc(get_pgcnt(length, offset)); + tio_set(req->tio, length, offset); + break; + } + case WRITE_6: + case WRITE_10: + case WRITE_16: + case WRITE_VERIFY: + { + struct iscsi_sess_param *param = &conn->session->param; + loff_t offset; + u32 length; + + req->r2t_length = be32_to_cpu(req_hdr->data_length) - req->pdu.datasize; + req->is_unsolicited_data = !(req_hdr->flags & ISCSI_CMD_FINAL); + req->target_task_tag = get_next_ttt(conn->session); + + if (LUReadonly(req->lun)) { + create_sense_rsp(req, DATA_PROTECT, 0x27, 0x0); + cmnd_skip_data(req); + break; + } + + if (!param->immediate_data && req->pdu.datasize) + eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); + + if (param->initial_r2t && !(req_hdr->flags & ISCSI_CMD_FINAL)) + eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); + + if (req_hdr->scb[0] == WRITE_VERIFY && req_hdr->scb[1] & 0x02) + eprintk("Verification is ignored %x\n", cmnd_itt(req)); + + set_offset_and_length(req->lun, req_hdr->scb, &offset, &length); + if (cmnd_write_size(req) != length) + eprintk("%x %u %u\n", cmnd_itt(req), cmnd_write_size(req), length); + + req->tio = tio_alloc(get_pgcnt(length, offset)); + tio_set(req->tio, length, offset); + + if (req->pdu.datasize) { + if (cmnd_recv_pdu(conn, req->tio, 0, req->pdu.datasize) < 0) + assert(0); + } + break; + } + error: + default: + eprintk("Unsupported %x\n", req_hdr->scb[0]); + create_sense_rsp(req, ILLEGAL_REQUEST, 0x20, 0x0); + cmnd_skip_data(req); + break; + } + +out: + return; +} + +static void data_out_start(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd) +{ + struct iscsi_data_out_hdr *req = (struct iscsi_data_out_hdr *)&cmnd->pdu.bhs; + struct iscsi_cmnd *scsi_cmnd = NULL; + u32 offset = be32_to_cpu(req->buffer_offset); + + update_stat_sn(cmnd); + + cmnd->req = scsi_cmnd = cmnd_find_hash(conn->session, req->itt, req->ttt); + if (!scsi_cmnd) { + eprintk("unable to find scsi task %x %x\n", + cmnd_itt(cmnd), cmnd_ttt(cmnd)); + goto skip_data; + } + + if (scsi_cmnd->r2t_length < cmnd->pdu.datasize) { + eprintk("invalid data len %x %u %u\n", + cmnd_itt(scsi_cmnd), cmnd->pdu.datasize, scsi_cmnd->r2t_length); + goto skip_data; + } + + if (scsi_cmnd->r2t_length + offset != cmnd_write_size(scsi_cmnd)) { + eprintk("%x %u %u %u\n", cmnd_itt(scsi_cmnd), scsi_cmnd->r2t_length, + offset, cmnd_write_size(scsi_cmnd)); + goto skip_data; + } + + scsi_cmnd->r2t_length -= cmnd->pdu.datasize; + + if (req->ttt == cpu_to_be32(ISCSI_RESERVED_TAG)) { + /* unsolicited burst data */ + if (scsi_cmnd->pdu.bhs.flags & ISCSI_FLG_FINAL) { + eprintk("unexpected data from %x %x\n", + cmnd_itt(cmnd), cmnd_ttt(cmnd)); + goto skip_data; + } + } + + dprintk(D_WRITE, "%u %p %p %p %u %u\n", req->ttt, cmnd, scsi_cmnd, + scsi_cmnd->tio, offset, cmnd->pdu.datasize); + + if (cmnd_recv_pdu(conn, scsi_cmnd->tio, offset, cmnd->pdu.datasize) < 0) + goto skip_data; + return; + +skip_data: + cmnd->pdu.bhs.opcode = ISCSI_OP_DATA_REJECT; + cmnd_skip_pdu(cmnd); + return; +} + +static void data_out_end(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd) +{ + struct iscsi_data_out_hdr *req = (struct iscsi_data_out_hdr *) &cmnd->pdu.bhs; + struct iscsi_cmnd *scsi_cmnd; + u32 offset; + + assert(cmnd); + scsi_cmnd = cmnd->req; + assert(scsi_cmnd); + + if (conn->read_overflow) { + eprintk("%x %u\n", cmnd_itt(cmnd), conn->read_overflow); + assert(scsi_cmnd->tio); + offset = be32_to_cpu(req->buffer_offset); + offset += cmnd->pdu.datasize - conn->read_overflow; + if (cmnd_recv_pdu(conn, scsi_cmnd->tio, offset, conn->read_overflow) < 0) + assert(0); + return; + } + + if (req->ttt == cpu_to_be32(ISCSI_RESERVED_TAG)) { + if (req->flags & ISCSI_FLG_FINAL) { + scsi_cmnd->is_unsolicited_data = 0; + if (!cmnd_pending(scsi_cmnd)) + scsi_cmnd_exec(scsi_cmnd); + } + } else { + /* TODO : proper error handling */ + if (!(req->flags & ISCSI_FLG_FINAL) && scsi_cmnd->r2t_length == 0) + eprintk("initiator error %x\n", cmnd_itt(scsi_cmnd)); + + if (!(req->flags & ISCSI_FLG_FINAL)) + goto out; + + scsi_cmnd->outstanding_r2t--; + + if (scsi_cmnd->r2t_length == 0) + assert(list_empty(&scsi_cmnd->pdu_list)); + + scsi_cmnd_exec(scsi_cmnd); + } + +out: + iscsi_cmnd_remove(cmnd); + return; +} + +static int __cmnd_abort(struct iscsi_cmnd *cmnd) +{ + if (cmnd_waitio(cmnd)) + return -ISCSI_RESPONSE_UNKNOWN_TASK; + + if (cmnd->conn->read_cmnd != cmnd) + cmnd_release(cmnd, 1); + else if (cmnd_rxstart(cmnd)) + set_cmnd_tmfabort(cmnd); + else + return -ISCSI_RESPONSE_UNKNOWN_TASK; + + return 0; +} + +static int cmnd_abort(struct iscsi_session *session, u32 itt) +{ + struct iscsi_cmnd *cmnd; + int err = -ISCSI_RESPONSE_UNKNOWN_TASK; + + if ((cmnd = cmnd_find_hash(session, itt, ISCSI_RESERVED_TAG))) { + eprintk("%x %x %x %u %u %u %u\n", cmnd_itt(cmnd), cmnd_opcode(cmnd), + cmnd->r2t_length, cmnd_scsicode(cmnd), + cmnd_write_size(cmnd), cmnd->is_unsolicited_data, + cmnd->outstanding_r2t); + err = __cmnd_abort(cmnd); + } + + return err; +} + +static int target_reset(struct iscsi_cmnd *req, u32 lun, int all) +{ + struct iscsi_target *target = req->conn->session->target; + struct iscsi_session *session; + struct iscsi_conn *conn; + struct iscsi_cmnd *cmnd, *tmp; + struct iet_volume *volume; + + list_for_each_entry(session, &target->session_list, list) { + list_for_each_entry(conn, &session->conn_list, list) { + list_for_each_entry_safe(cmnd, tmp, &conn->pdu_list, conn_list) { + if (cmnd == req) + continue; + + if (all) + __cmnd_abort(cmnd); + else if (translate_lun(cmnd_hdr(cmnd)->lun) == lun) + __cmnd_abort(cmnd); + } + } + } + + list_for_each_entry(volume, &target->volumes, list) { + if (all || volume->lun == lun) { + /* force release */ + volume_release(volume, 0, 1); + /* power-on, reset, or bus device reset occurred */ + ua_establish_for_all_sessions(target, volume->lun, + 0x29, 0x0); + } + } + + return 0; +} + +static void task_set_abort(struct iscsi_cmnd *req) +{ + struct iscsi_session *session = req->conn->session; + struct iscsi_conn *conn; + struct iscsi_cmnd *cmnd, *tmp; + + list_for_each_entry(conn, &session->conn_list, list) { + list_for_each_entry_safe(cmnd, tmp, &conn->pdu_list, conn_list) { + if (cmnd != req) + __cmnd_abort(cmnd); + } + } +} + +static inline char *tmf_desc(int fun) +{ + static char *tmf_desc[] = { + "Unknown Function", + "Abort Task", + "Abort Task Set", + "Clear ACA", + "Clear Task Set", + "Logical Unit Reset", + "Target Warm Reset", + "Target Cold Reset", + "Task Reassign", + }; + + if ((fun < ISCSI_FUNCTION_ABORT_TASK) || + (fun > ISCSI_FUNCTION_TASK_REASSIGN)) + fun = 0; + + return tmf_desc[fun]; +} + +static inline char *rsp_desc(int rsp) +{ + static char *rsp_desc[] = { + "Function Complete", + "Unknown Task", + "Unknown LUN", + "Task Allegiant", + "Failover Unsupported", + "Function Unsupported", + "No Authorization", + "Function Rejected", + "Unknown Response", + }; + + if (((rsp < ISCSI_RESPONSE_FUNCTION_COMPLETE) || + (rsp > ISCSI_RESPONSE_NO_AUTHORIZATION)) && + (rsp != ISCSI_RESPONSE_FUNCTION_REJECTED)) + rsp = 8; + else if (rsp == ISCSI_RESPONSE_FUNCTION_REJECTED) + rsp = 7; + + return rsp_desc[rsp]; +} + +static void execute_task_management(struct iscsi_cmnd *req) +{ + struct iscsi_conn *conn = req->conn; + struct iscsi_session *session = conn->session; + struct iscsi_target *target = session->target; + struct iscsi_cmnd *rsp; + struct iscsi_task_mgt_hdr *req_hdr = (struct iscsi_task_mgt_hdr *)&req->pdu.bhs; + struct iscsi_task_rsp_hdr *rsp_hdr; + u32 lun; + int err, function = req_hdr->function & ISCSI_FUNCTION_MASK; + + rsp = iscsi_cmnd_create_rsp_cmnd(req, 1); + rsp_hdr = (struct iscsi_task_rsp_hdr *)&rsp->pdu.bhs; + + rsp_hdr->opcode = ISCSI_OP_SCSI_TASK_MGT_RSP; + rsp_hdr->flags = ISCSI_FLG_FINAL; + rsp_hdr->itt = req_hdr->itt; + rsp_hdr->response = ISCSI_RESPONSE_FUNCTION_COMPLETE; + + switch (function) { + case ISCSI_FUNCTION_ABORT_TASK: + case ISCSI_FUNCTION_ABORT_TASK_SET: + case ISCSI_FUNCTION_CLEAR_ACA: + case ISCSI_FUNCTION_CLEAR_TASK_SET: + case ISCSI_FUNCTION_LOGICAL_UNIT_RESET: + lun = translate_lun(req_hdr->lun); + if (!volume_lookup(target, lun)) { + rsp_hdr->response = ISCSI_RESPONSE_UNKNOWN_LUN; + goto out; + } + } + + switch (function) { + case ISCSI_FUNCTION_ABORT_TASK: + if ((err = cmnd_abort(conn->session, req_hdr->rtt)) < 0) + rsp_hdr->response = -err; + break; + case ISCSI_FUNCTION_ABORT_TASK_SET: + task_set_abort(req); + break; + case ISCSI_FUNCTION_CLEAR_ACA: + rsp_hdr->response = ISCSI_RESPONSE_FUNCTION_UNSUPPORTED; + break; + case ISCSI_FUNCTION_CLEAR_TASK_SET: + rsp_hdr->response = ISCSI_RESPONSE_FUNCTION_UNSUPPORTED; + break; + case ISCSI_FUNCTION_LOGICAL_UNIT_RESET: + target_reset(req, translate_lun(req_hdr->lun), 0); + break; + case ISCSI_FUNCTION_TARGET_WARM_RESET: + case ISCSI_FUNCTION_TARGET_COLD_RESET: + target_reset(req, 0, 1); + if (function == ISCSI_FUNCTION_TARGET_COLD_RESET) + set_cmnd_close(rsp); + break; + case ISCSI_FUNCTION_TASK_REASSIGN: + rsp_hdr->response = ISCSI_RESPONSE_FUNCTION_UNSUPPORTED; + break; + default: + rsp_hdr->response = ISCSI_RESPONSE_FUNCTION_REJECTED; + break; + } +out: + iprintk("%s (%02x) issued on tid:%d lun:%d by sid:%llu (%s)\n", + tmf_desc(function), function, target->tid, + translate_lun(req_hdr->lun), session->sid, + rsp_desc(rsp_hdr->response)); + + iscsi_cmnd_init_write(rsp); +} + +static void nop_hdr_setup(struct iscsi_hdr *hdr, u8 opcode, __be32 itt, + __be32 ttt) +{ + hdr->opcode = opcode; + hdr->flags = ISCSI_FLG_FINAL; + hdr->itt = itt; + hdr->ttt = ttt; +} + +static void nop_out_exec(struct iscsi_cmnd *req) +{ + struct iscsi_cmnd *rsp; + + if (cmnd_itt(req) != cpu_to_be32(ISCSI_RESERVED_TAG)) { + rsp = iscsi_cmnd_create_rsp_cmnd(req, 1); + + nop_hdr_setup(&rsp->pdu.bhs, ISCSI_OP_NOP_IN, req->pdu.bhs.itt, + cpu_to_be32(ISCSI_RESERVED_TAG)); + + if (req->pdu.datasize) + assert(req->tio); + else + assert(!req->tio); + + if (req->tio) { + tio_get(req->tio); + rsp->tio = req->tio; + } + + assert(get_pgcnt(req->pdu.datasize, 0) < ISCSI_CONN_IOV_MAX); + rsp->pdu.datasize = req->pdu.datasize; + iscsi_cmnd_init_write(rsp); + } else { + if (req->req) { + dprintk(D_GENERIC, "releasing NOP-Out %p, ttt %x; " + "removing NOP-In %p, ttt %x\n", req->req, + cmnd_ttt(req->req), req, cmnd_ttt(req)); + cmnd_release(req->req, 0); + } + iscsi_cmnd_remove(req); + } +} + +static void nop_in_timeout(unsigned long data) +{ + struct iscsi_cmnd *req = (struct iscsi_cmnd *)data; + + printk(KERN_INFO "NOP-In ping timed out - closing sid:cid %llu:%u\n", + req->conn->session->sid, req->conn->cid); + clear_cmnd_timer_active(req); + conn_close(req->conn); +} + +/* create a fake NOP-Out req and treat the NOP-In as our rsp to it */ +void send_nop_in(struct iscsi_conn *conn) +{ + struct iscsi_cmnd *req = cmnd_alloc(conn, 1); + struct iscsi_cmnd *rsp = iscsi_cmnd_create_rsp_cmnd(req, 0); + + req->target_task_tag = get_next_ttt(conn->session); + + + nop_hdr_setup(&req->pdu.bhs, ISCSI_OP_NOP_OUT, + cpu_to_be32(ISCSI_RESERVED_TAG), req->target_task_tag); + nop_hdr_setup(&rsp->pdu.bhs, ISCSI_OP_NOP_IN, + cpu_to_be32(ISCSI_RESERVED_TAG), req->target_task_tag); + + dprintk(D_GENERIC, "NOP-Out: %p, ttt %x, timer %p; " + "NOP-In: %p, ttt %x;\n", req, cmnd_ttt(req), &req->timer, rsp, + cmnd_ttt(rsp)); + + init_timer(&req->timer); + req->timer.data = (unsigned long)req; + req->timer.function = nop_in_timeout; + + if (cmnd_insert_hash_ttt(req, req->target_task_tag)) { + eprintk("%s\n", + "failed to insert fake NOP-Out into hash table"); + cmnd_release(rsp, 0); + cmnd_release(req, 0); + } else + iscsi_cmnd_init_write(rsp); +} + +static void nop_in_tx_end(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + u32 t; + + if (cmnd->pdu.bhs.ttt == cpu_to_be32(ISCSI_RESERVED_TAG)) + return; + + /* + * NOP-In ping issued by the target. + * FIXME: Sanitize the NOP timeout earlier, during configuration + */ + t = conn->session->target->trgt_param.nop_timeout; + + if (!t || t > conn->session->target->trgt_param.nop_interval) { + eprintk("Adjusting NOPTimeout of tid %u from %u to %u " + "(== NOPInterval)\n", conn->session->target->tid, + t, + conn->session->target->trgt_param.nop_interval); + t = conn->session->target->trgt_param.nop_interval; + conn->session->target->trgt_param.nop_timeout = t; + } + + dprintk(D_GENERIC, "NOP-In %p, %x: timer %p\n", cmnd, cmnd_ttt(cmnd), + &cmnd->req->timer); + + set_cmnd_timer_active(cmnd->req); + mod_timer(&cmnd->req->timer, jiffies + HZ * t); +} + +static void logout_exec(struct iscsi_cmnd *req) +{ + struct iscsi_logout_req_hdr *req_hdr; + struct iscsi_cmnd *rsp; + struct iscsi_logout_rsp_hdr *rsp_hdr; + + req_hdr = (struct iscsi_logout_req_hdr *)&req->pdu.bhs; + rsp = iscsi_cmnd_create_rsp_cmnd(req, 1); + rsp_hdr = (struct iscsi_logout_rsp_hdr *)&rsp->pdu.bhs; + rsp_hdr->opcode = ISCSI_OP_LOGOUT_RSP; + rsp_hdr->flags = ISCSI_FLG_FINAL; + rsp_hdr->itt = req_hdr->itt; + set_cmnd_close(rsp); + iscsi_cmnd_init_write(rsp); +} + +static void iscsi_cmnd_exec(struct iscsi_cmnd *cmnd) +{ + dprintk(D_GENERIC, "%p,%x,%u\n", cmnd, cmnd_opcode(cmnd), cmnd->pdu.bhs.sn); + + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_NOP_OUT: + nop_out_exec(cmnd); + break; + case ISCSI_OP_SCSI_CMD: + scsi_cmnd_exec(cmnd); + break; + case ISCSI_OP_SCSI_TASK_MGT_MSG: + execute_task_management(cmnd); + break; + case ISCSI_OP_LOGOUT_CMD: + logout_exec(cmnd); + break; + case ISCSI_OP_SCSI_REJECT: + iscsi_cmnd_init_write(get_rsp_cmnd(cmnd)); + break; + case ISCSI_OP_TEXT_CMD: + case ISCSI_OP_SNACK_CMD: + break; + default: + eprintk("unexpected cmnd op %x\n", cmnd_opcode(cmnd)); + break; + } +} + +static void __cmnd_send_pdu(struct iscsi_conn *conn, struct tio *tio, u32 offset, u32 size) +{ + dprintk(D_GENERIC, "%p %u,%u\n", tio, offset, size); + offset += tio->offset; + + assert(offset <= tio->offset + tio->size); + assert(offset + size <= tio->offset + tio->size); + + conn->write_tcmnd = tio; + conn->write_offset = offset; + conn->write_size += size; +} + +static void cmnd_send_pdu(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd) +{ + u32 size; + struct tio *tio; + + if (!cmnd->pdu.datasize) + return; + + size = (cmnd->pdu.datasize + 3) & -4; + tio = cmnd->tio; + assert(tio); + assert(tio->size == size); + __cmnd_send_pdu(conn, tio, 0, size); +} + +static void set_cork(struct socket *sock, int on) +{ + int opt = on; + mm_segment_t oldfs; + + oldfs = get_fs(); + set_fs(get_ds()); + sock->ops->setsockopt(sock, SOL_TCP, TCP_CORK, (void *)&opt, sizeof(opt)); + set_fs(oldfs); +} + +void cmnd_release(struct iscsi_cmnd *cmnd, int force) +{ + struct iscsi_cmnd *req, *rsp; + int is_last = 0; + + if (!cmnd) + return; + +/* eprintk("%x %lx %d\n", cmnd_opcode(cmnd), cmnd->flags, force); */ + + req = cmnd->req; + is_last = cmnd_final(cmnd); + + if (force) { + while (!list_empty(&cmnd->pdu_list)) { + rsp = list_entry(cmnd->pdu_list.next, struct iscsi_cmnd, pdu_list); + list_del_init(&rsp->list); + list_del(&rsp->pdu_list); + iscsi_cmnd_remove(rsp); + } + list_del_init(&cmnd->list); + } else + if (cmnd_queued(cmnd)) + iscsi_scsi_dequeuecmnd(cmnd); + + if (cmnd_hashed(cmnd)) + cmnd_remove_hash(cmnd); + + if (cmnd_lunit(cmnd)) { + assert(cmnd->lun); + volume_put(cmnd->lun); + } + + list_del_init(&cmnd->pdu_list); + iscsi_cmnd_remove(cmnd); + + if (is_last) { + assert(!force); + assert(req); + cmnd_release(req, 0); + } + + return; +} + +void cmnd_tx_start(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + struct iovec *iop; + + dprintk(D_GENERIC, "%p:%x\n", cmnd, cmnd_opcode(cmnd)); + assert(cmnd); + iscsi_cmnd_set_length(&cmnd->pdu); + + set_cork(conn->sock, 1); + + conn->write_iop = iop = conn->write_iov; + iop->iov_base = &cmnd->pdu.bhs; + iop->iov_len = sizeof(cmnd->pdu.bhs); + iop++; + conn->write_size = sizeof(cmnd->pdu.bhs); + + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_NOP_IN: + if (cmnd->pdu.bhs.itt == ISCSI_RESERVED_TAG) { + /* NOP-In ping generated by us. Don't advance StatSN. */ + cmnd_set_sn(cmnd, 0); + cmnd_set_sn(cmnd->req, 0); + cmnd->pdu.bhs.sn = cpu_to_be32(conn->stat_sn); + cmnd->req->pdu.bhs.sn = cpu_to_be32(conn->stat_sn); + } else + cmnd_set_sn(cmnd, 1); + cmnd_send_pdu(conn, cmnd); + break; + case ISCSI_OP_SCSI_RSP: + cmnd_set_sn(cmnd, 1); + cmnd_send_pdu(conn, cmnd); + break; + case ISCSI_OP_SCSI_TASK_MGT_RSP: + cmnd_set_sn(cmnd, 1); + break; + case ISCSI_OP_TEXT_RSP: + cmnd_set_sn(cmnd, 1); + break; + case ISCSI_OP_SCSI_DATA_IN: + { + struct iscsi_data_in_hdr *rsp = (struct iscsi_data_in_hdr *)&cmnd->pdu.bhs; + u32 offset; + + cmnd_set_sn(cmnd, (rsp->flags & ISCSI_FLG_FINAL) ? 1 : 0); + offset = rsp->buffer_offset; + rsp->buffer_offset = cpu_to_be32(offset); + __cmnd_send_pdu(conn, cmnd->tio, offset, cmnd->pdu.datasize); + break; + } + case ISCSI_OP_LOGOUT_RSP: + cmnd_set_sn(cmnd, 1); + break; + case ISCSI_OP_R2T: + cmnd_set_sn(cmnd, 0); + cmnd->pdu.bhs.sn = cpu_to_be32(conn->stat_sn); + break; + case ISCSI_OP_ASYNC_MSG: + cmnd_set_sn(cmnd, 1); + break; + case ISCSI_OP_REJECT: + cmnd_set_sn(cmnd, 1); + cmnd_send_pdu(conn, cmnd); + break; + default: + eprintk("unexpected cmnd op %x\n", cmnd_opcode(cmnd)); + break; + } + + iop->iov_len = 0; + // move this? + conn->write_size = (conn->write_size + 3) & -4; + iscsi_dump_pdu(&cmnd->pdu); +} + +void cmnd_tx_end(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + + dprintk(D_GENERIC, "%p:%x\n", cmnd, cmnd_opcode(cmnd)); + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_NOP_IN: + nop_in_tx_end(cmnd); + break; + case ISCSI_OP_SCSI_RSP: + case ISCSI_OP_SCSI_TASK_MGT_RSP: + case ISCSI_OP_TEXT_RSP: + case ISCSI_OP_R2T: + case ISCSI_OP_ASYNC_MSG: + case ISCSI_OP_REJECT: + case ISCSI_OP_SCSI_DATA_IN: + case ISCSI_OP_LOGOUT_RSP: + break; + default: + eprintk("unexpected cmnd op %x\n", cmnd_opcode(cmnd)); + assert(0); + break; + } + + if (cmnd_close(cmnd)) + conn_close(conn); + + list_del_init(&cmnd->list); + set_cork(cmnd->conn->sock, 0); +} + +/** + * Push the command for execution. + * This functions reorders the commands. + * Called from the read thread. + * + * iscsi_session_push_cmnd - + * @cmnd: ptr to command + */ + +static void iscsi_session_push_cmnd(struct iscsi_cmnd *cmnd) +{ + struct iscsi_session *session = cmnd->conn->session; + struct list_head *entry; + u32 cmd_sn; + + dprintk(D_GENERIC, "%p:%x %u,%u\n", + cmnd, cmnd_opcode(cmnd), cmnd->pdu.bhs.sn, session->exp_cmd_sn); + + if (cmnd->pdu.bhs.opcode & ISCSI_OP_IMMEDIATE) { + iscsi_cmnd_exec(cmnd); + return; + } + + cmd_sn = cmnd->pdu.bhs.sn; + if (cmd_sn == session->exp_cmd_sn) { + while (1) { + session->exp_cmd_sn = ++cmd_sn; + iscsi_cmnd_exec(cmnd); + + if (list_empty(&session->pending_list)) + break; + cmnd = list_entry(session->pending_list.next, struct iscsi_cmnd, list); + if (cmnd->pdu.bhs.sn != cmd_sn) + break; +/* eprintk("find out-of-order %x %u %u\n", */ +/* cmnd_itt(cmnd), cmd_sn, cmnd->pdu.bhs.sn); */ + list_del_init(&cmnd->list); + clear_cmnd_pending(cmnd); + } + } else { +/* eprintk("out-of-order %x %u %u\n", */ +/* cmnd_itt(cmnd), cmd_sn, session->exp_cmd_sn); */ + + set_cmnd_pending(cmnd); + if (before(cmd_sn, session->exp_cmd_sn)) /* close the conn */ + eprintk("unexpected cmd_sn (%u,%u)\n", cmd_sn, session->exp_cmd_sn); + + if (after(cmd_sn, session->exp_cmd_sn + session->max_queued_cmnds)) + eprintk("too large cmd_sn (%u,%u)\n", cmd_sn, session->exp_cmd_sn); + + list_for_each(entry, &session->pending_list) { + struct iscsi_cmnd *tmp = list_entry(entry, struct iscsi_cmnd, list); + if (before(cmd_sn, tmp->pdu.bhs.sn)) + break; + } + + assert(list_empty(&cmnd->list)); + + list_add_tail(&cmnd->list, entry); + } +} + +static int check_segment_length(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + struct iscsi_sess_param *param = &conn->session->param; + + if (cmnd->pdu.datasize > param->max_recv_data_length) { + eprintk("data too long %x %u %u\n", cmnd_itt(cmnd), + cmnd->pdu.datasize, param->max_recv_data_length); + + if (get_pgcnt(cmnd->pdu.datasize, 0) > ISCSI_CONN_IOV_MAX) { + conn_close(conn); + return -EINVAL; + } + } + + return 0; +} + +void cmnd_rx_start(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + int err = 0; + + iscsi_dump_pdu(&cmnd->pdu); + + set_cmnd_rxstart(cmnd); + if (check_segment_length(cmnd) < 0) + return; + + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_NOP_OUT: + err = nop_out_start(conn, cmnd); + break; + case ISCSI_OP_SCSI_CMD: + if (!(err = cmnd_insert_hash(cmnd))) + scsi_cmnd_start(conn, cmnd); + break; + case ISCSI_OP_SCSI_TASK_MGT_MSG: + err = cmnd_insert_hash(cmnd); + break; + case ISCSI_OP_SCSI_DATA_OUT: + data_out_start(conn, cmnd); + break; + case ISCSI_OP_LOGOUT_CMD: + err = cmnd_insert_hash(cmnd); + break; + case ISCSI_OP_TEXT_CMD: + case ISCSI_OP_SNACK_CMD: + err = -ISCSI_REASON_UNSUPPORTED_COMMAND; + break; + default: + err = -ISCSI_REASON_UNSUPPORTED_COMMAND; + break; + } + + if (err < 0) { + eprintk("%x %x %d\n", cmnd_opcode(cmnd), cmnd_itt(cmnd), err); + iscsi_cmnd_reject(cmnd, -err); + } +} + +void cmnd_rx_end(struct iscsi_cmnd *cmnd) +{ + struct iscsi_conn *conn = cmnd->conn; + + if (cmnd_tmfabort(cmnd)) { + cmnd_release(cmnd, 1); + return; + } + + dprintk(D_GENERIC, "%p:%x\n", cmnd, cmnd_opcode(cmnd)); + switch (cmnd_opcode(cmnd)) { + case ISCSI_OP_SCSI_REJECT: + case ISCSI_OP_NOP_OUT: + case ISCSI_OP_SCSI_CMD: + case ISCSI_OP_SCSI_TASK_MGT_MSG: + case ISCSI_OP_TEXT_CMD: + case ISCSI_OP_LOGOUT_CMD: + iscsi_session_push_cmnd(cmnd); + break; + case ISCSI_OP_SCSI_DATA_OUT: + data_out_end(conn, cmnd); + break; + case ISCSI_OP_SNACK_CMD: + break; + case ISCSI_OP_PDU_REJECT: + iscsi_cmnd_init_write(get_rsp_cmnd(cmnd)); + break; + case ISCSI_OP_DATA_REJECT: + cmnd_release(cmnd, 0); + break; + default: + eprintk("unexpected cmnd op %x\n", cmnd_opcode(cmnd)); + BUG(); + break; + } +} + +static void iscsi_exit(void) +{ + wthread_module_exit(); + + unregister_chrdev(ctr_major, ctr_name); + + iet_procfs_exit(); + + event_exit(); + + tio_exit(); + + iotype_exit(); + + ua_exit(); + + if (iscsi_cmnd_cache) + kmem_cache_destroy(iscsi_cmnd_cache); +} + +static int iscsi_init(void) +{ + int err = -ENOMEM; + + printk("iSCSI Enterprise Target Software - version %s\n", IET_VERSION_STRING); + + if ((ctr_major = register_chrdev(0, ctr_name, &ctr_fops)) < 0) { + eprintk("failed to register the control device %d\n", ctr_major); + return ctr_major; + } + + if ((err = iet_procfs_init()) < 0) + goto err; + + if ((err = event_init()) < 0) + goto err; + + iscsi_cmnd_cache = KMEM_CACHE(iscsi_cmnd, 0); + if (!iscsi_cmnd_cache) + goto err; + + err = ua_init(); + if (err < 0) + goto err; + + if ((err = tio_init()) < 0) + goto err; + + if ((err = iotype_init()) < 0) + goto err; + + if ((err = wthread_module_init()) < 0) + goto err; + + return 0; + +err: + iscsi_exit(); + return err; +} + +module_param(worker_thread_pool_size, ulong, S_IRUGO); +MODULE_PARM_DESC(worker_thread_pool_size, + "Size of the worker thread pool " + "(0 = dedicated threads per target (default))"); + +module_param(debug_enable_flags, ulong, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(debug_enable_flags, + "debug bitmask, low bits (0 ... 8) used, see iscsi_dbg.h"); + +module_init(iscsi_init); +module_exit(iscsi_exit); + +MODULE_VERSION(IET_VERSION_STRING); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("iSCSI Enterprise Target"); +MODULE_AUTHOR("IET development team "); --- linux-2.6.32.orig/ubuntu/iscsitarget/null-io.c +++ linux-2.6.32/ubuntu/iscsitarget/null-io.c @@ -0,0 +1,114 @@ +/* + * Target device null I/O. + * (C) 2005 MING Zhang + * This code is licenced under the GPL. + * + * The nullio mode will not return any meaningful or previous written + * data. It is only for performance measurement purpose. + */ + +#include +#include +#include +#include + +#include "iscsi.h" +#include "iscsi_dbg.h" +#include "iotype.h" + +struct nullio_data { + u64 sectors; +}; + +enum { + Opt_sectors, Opt_ignore, Opt_err, +}; + +static match_table_t tokens = { + {Opt_sectors, "Sectors=%u"}, + {Opt_ignore, "Type=%s"}, + {Opt_err, NULL}, +}; + +static int parse_nullio_params(struct iet_volume *volume, char *params) +{ + int err = 0; + char *p, *q; + struct nullio_data *data = volume->private; + + while ((p = strsep(¶ms, ",")) != NULL) { + substring_t args[MAX_OPT_ARGS]; + int token; + if (!*p) + continue; + token = match_token(p, tokens, args); + switch (token) { + case Opt_sectors: + q = match_strdup(&args[0]); + if (!q) + return -ENOMEM; + data->sectors = simple_strtoull(q, NULL, 10); + kfree(q); + break; + case Opt_ignore: + break; + default: + eprintk("Unknown %s\n", p); + return -EINVAL; + break; + } + } + return err; +} + +static void nullio_detach(struct iet_volume *lu) +{ + struct nullio_data *p = lu->private; + + kfree(p); + lu->private = NULL; +} + +static int nullio_attach(struct iet_volume *lu, char *args) +{ + int err = 0; + struct nullio_data *p; + + if (lu->private) { + printk("already attached ? %d\n", lu->lun); + return -EBUSY; + } + + p = kzalloc(sizeof(*p), GFP_KERNEL); + if (!p) + return -ENOMEM; + + lu->private = p; + + if ((err = parse_nullio_params(lu, args)) < 0) { + eprintk("%d\n", err); + goto out; + } + + lu->blk_shift = SECTOR_SIZE_BITS; + lu->blk_cnt = (p->sectors = p->sectors ? : 1 << 27); /* 64 GB */ + +out: + if (err < 0) + nullio_detach(lu); + return err; +} + +void nullio_show(struct iet_volume *lu, struct seq_file *seq) +{ + struct nullio_data *p = lu->private; + seq_printf(seq, " sectors:%llu\n", p->sectors); +} + +struct iotype nullio = +{ + .name = "nullio", + .attach = nullio_attach, + .detach = nullio_detach, + .show = nullio_show, +}; --- linux-2.6.32.orig/ubuntu/iscsitarget/include/iet_u.h +++ linux-2.6.32/ubuntu/iscsitarget/include/iet_u.h @@ -0,0 +1,149 @@ +#ifndef _IET_U_H +#define _IET_U_H + +#define IET_VERSION_STRING "1.4.19" + +/* The maximum length of 223 bytes in the RFC. */ +#define ISCSI_NAME_LEN 256 +#define ISCSI_ARGS_LEN 2048 + +#define ISCSI_LISTEN_PORT 3260 + +#define VENDOR_ID_LEN 8 +#define SCSI_ID_LEN 24 +#define SCSI_SN_LEN 16 + +#ifndef aligned_u64 +#define aligned_u64 unsigned long long __attribute__((aligned(8))) +#endif + +struct target_info { + u32 tid; + char name[ISCSI_NAME_LEN]; +}; + +struct volume_info { + u32 tid; + u32 lun; + aligned_u64 args_ptr; + u32 args_len; +}; + +struct session_info { + u32 tid; + + aligned_u64 sid; + char initiator_name[ISCSI_NAME_LEN]; + u32 exp_cmd_sn; + u32 max_cmd_sn; +}; + +#define DIGEST_ALL (DIGEST_NONE | DIGEST_CRC32C) +#define DIGEST_NONE (1 << 0) +#define DIGEST_CRC32C (1 << 1) + +struct conn_info { + u32 tid; + aligned_u64 sid; + + u32 cid; + u32 stat_sn; + u32 exp_stat_sn; + int header_digest; + int data_digest; + int fd; +}; + +enum { + key_initial_r2t, + key_immediate_data, + key_max_connections, + key_max_recv_data_length, + key_max_xmit_data_length, + key_max_burst_length, + key_first_burst_length, + key_default_wait_time, + key_default_retain_time, + key_max_outstanding_r2t, + key_data_pdu_inorder, + key_data_sequence_inorder, + key_error_recovery_level, + key_header_digest, + key_data_digest, + key_ofmarker, + key_ifmarker, + key_ofmarkint, + key_ifmarkint, + session_key_last, +}; + +enum { + key_wthreads, + key_target_type, + key_queued_cmnds, + key_nop_interval, + key_nop_timeout, + target_key_last, +}; + +enum { + key_session, + key_target, +}; + +struct iscsi_param_info { + u32 tid; + aligned_u64 sid; + + u32 param_type; + u32 partial; + + u32 session_param[session_key_last]; + u32 target_param[target_key_last]; +}; + +enum iet_event_state { + E_CONN_CLOSE, +}; + +struct iet_event { + u32 tid; + aligned_u64 sid; + u32 cid; + u32 state; +}; + +#define DEFAULT_NR_WTHREADS 8 +#define MIN_NR_WTHREADS 1 +#define MAX_NR_WTHREADS 128 + +#define DEFAULT_NR_QUEUED_CMNDS 32 +#define MIN_NR_QUEUED_CMNDS 1 +#define MAX_NR_QUEUED_CMNDS 256 + +#define DEFAULT_NOP_INTERVAL 0 +#define MIN_NOP_INTERVAL 0 +#define MAX_NOP_INTERVAL 90 + +#define DEFAULT_NOP_TIMEOUT 0 +#define MIN_NOP_TIMEOUT 0 +#define MAX_NOP_TIMEOUT 90 + +#define NETLINK_IET 21 + +#define ADD_TARGET _IOW('i', 0, struct target_info) +#define DEL_TARGET _IOW('i', 1, struct target_info) +#define START_TARGET _IO('i', 2) +#define STOP_TARGET _IO('i', 3) +#define ADD_VOLUME _IOW('i', 4, struct volume_info) +#define DEL_VOLUME _IOW('i', 5, struct volume_info) +#define ADD_SESSION _IOW('i', 6, struct session_info) +#define DEL_SESSION _IOW('i', 7, struct session_info) +#define GET_SESSION_INFO _IOWR('i', 8, struct session_info) +#define ADD_CONN _IOW('i', 9, struct conn_info) +#define DEL_CONN _IOW('i', 10, struct conn_info) +#define GET_CONN_INFO _IOWR('i', 11, struct conn_info) +#define ISCSI_PARAM_SET _IOW('i', 12, struct iscsi_param_info) +#define ISCSI_PARAM_GET _IOWR('i', 13, struct iscsi_param_info) + +#endif --- linux-2.6.32.orig/ubuntu/ndiswrapper/hal.c +++ linux-2.6.32/ubuntu/ndiswrapper/hal.c @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ntoskernel.h" +#include "hal_exports.h" + +wstdcall void WIN_FUNC(WRITE_PORT_ULONG,2) + (ULONG_PTR port, ULONG value) +{ + outl(value, port); +} + +wstdcall ULONG WIN_FUNC(READ_PORT_ULONG,1) + (ULONG_PTR port) +{ + return inl(port); +} + +wstdcall void WIN_FUNC(WRITE_PORT_USHORT,2) + (ULONG_PTR port, USHORT value) +{ + outw(value, port); +} + +wstdcall USHORT WIN_FUNC(READ_PORT_USHORT,1) + (ULONG_PTR port) +{ + return inw(port); +} + +wstdcall void WIN_FUNC(WRITE_PORT_UCHAR,2) + (ULONG_PTR port, UCHAR value) +{ + outb(value, port); +} + +wstdcall UCHAR WIN_FUNC(READ_PORT_UCHAR,1) + (ULONG_PTR port) +{ + return inb(port); +} + +wstdcall void WIN_FUNC(WRITE_PORT_BUFFER_USHORT,3) + (ULONG_PTR port, USHORT *buf, ULONG count) +{ + outsw(port, buf, count); +} + +wstdcall void WIN_FUNC(READ_PORT_BUFFER_USHORT,3) + (ULONG_PTR port, USHORT *buf, ULONG count) +{ + insw(port, buf, count); +} + +wstdcall void WIN_FUNC(WRITE_PORT_BUFFER_ULONG,3) + (ULONG_PTR port, ULONG *buf, ULONG count) +{ + outsl(port, buf, count); +} + +wstdcall void WIN_FUNC(READ_PORT_BUFFER_ULONG,3) + (ULONG_PTR port, ULONG *buf, ULONG count) +{ + insl(port, buf, count); +} + +wstdcall USHORT WIN_FUNC(READ_REGISTER_USHORT,1) + (void __iomem *reg) +{ + return readw(reg); +} + +wstdcall void WIN_FUNC(WRITE_REGISTER_ULONG,2) + (void __iomem *reg, UINT val) +{ + writel(val, reg); +} + +wstdcall void WIN_FUNC(WRITE_REGISTER_USHORT,2) + (void __iomem *reg, USHORT val) +{ + writew(val, reg); +} + +wstdcall void WIN_FUNC(WRITE_REGISTER_UCHAR,2) + (void __iomem *reg, UCHAR val) +{ + writeb(val, reg); +} + +wstdcall void WIN_FUNC(KeStallExecutionProcessor,1) + (ULONG usecs) +{ + udelay(usecs); +} + +wstdcall KIRQL WIN_FUNC(KeGetCurrentIrql,0) + (void) +{ + return current_irql(); +} + +wfastcall KIRQL WIN_FUNC(KfRaiseIrql,1) + (KIRQL newirql) +{ + return raise_irql(newirql); +} + +wfastcall void WIN_FUNC(KfLowerIrql,1) + (KIRQL oldirql) +{ + lower_irql(oldirql); +} + +wfastcall KIRQL WIN_FUNC(KfAcquireSpinLock,1) + (NT_SPIN_LOCK *lock) +{ + return nt_spin_lock_irql(lock, DISPATCH_LEVEL); +} + +wfastcall void WIN_FUNC(KfReleaseSpinLock,2) + (NT_SPIN_LOCK *lock, KIRQL oldirql) +{ + nt_spin_unlock_irql(lock, oldirql); +} + +wfastcall void WIN_FUNC(KefAcquireSpinLockAtDpcLevel,1) + (NT_SPIN_LOCK *lock) +{ +#ifdef DEBUG_IRQL + if (current_irql() != DISPATCH_LEVEL) + ERROR("irql != DISPATCH_LEVEL"); +#endif + nt_spin_lock(lock); +} + +wfastcall void WIN_FUNC(KefReleaseSpinLockFromDpcLevel,1) + (NT_SPIN_LOCK *lock) +{ +#ifdef DEBUG_IRQL + if (current_irql() != DISPATCH_LEVEL) + ERROR("irql != DISPATCH_LEVEL"); +#endif + nt_spin_unlock(lock); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/pe_linker.h +++ linux-2.6.32/ubuntu/ndiswrapper/pe_linker.h @@ -0,0 +1,993 @@ +/* + * This file is an excerpt of winnt.h from WINE, which bears the + * following copyright: + * + * Win32 definitions for Windows NT + * + * Copyright 1996 Alexandre Julliard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * File formats definitions + */ +typedef struct _IMAGE_DOS_HEADER { + WORD e_magic; /* 00: MZ Header signature */ + WORD e_cblp; /* 02: Bytes on last page of file */ + WORD e_cp; /* 04: Pages in file */ + WORD e_crlc; /* 06: Relocations */ + WORD e_cparhdr; /* 08: Size of header in paragraphs */ + WORD e_minalloc; /* 0a: Minimum extra paragraphs needed */ + WORD e_maxalloc; /* 0c: Maximum extra paragraphs needed */ + WORD e_ss; /* 0e: Initial (relative) SS value */ + WORD e_sp; /* 10: Initial SP value */ + WORD e_csum; /* 12: Checksum */ + WORD e_ip; /* 14: Initial IP value */ + WORD e_cs; /* 16: Initial (relative) CS value */ + WORD e_lfarlc; /* 18: File address of relocation table */ + WORD e_ovno; /* 1a: Overlay number */ + WORD e_res[4]; /* 1c: Reserved words */ + WORD e_oemid; /* 24: OEM identifier (for e_oeminfo) */ + WORD e_oeminfo; /* 26: OEM information; e_oemid specific */ + WORD e_res2[10]; /* 28: Reserved words */ + DWORD e_lfanew; /* 3c: Offset to extended header */ +} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; + +#define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */ +#define IMAGE_OS2_SIGNATURE 0x454E /* NE */ +#define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */ +#define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */ +#define IMAGE_VXD_SIGNATURE 0x454C /* LE */ +#define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */ + +/* + * This is the Windows executable (NE) header. + * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way. + */ +typedef struct +{ + WORD ne_magic; /* 00 NE signature 'NE' */ + BYTE ne_ver; /* 02 Linker version number */ + BYTE ne_rev; /* 03 Linker revision number */ + WORD ne_enttab; /* 04 Offset to entry table relative to NE */ + WORD ne_cbenttab; /* 06 Length of entry table in bytes */ + LONG ne_crc; /* 08 Checksum */ + WORD ne_flags; /* 0c Flags about segments in this file */ + WORD ne_autodata; /* 0e Automatic data segment number */ + WORD ne_heap; /* 10 Initial size of local heap */ + WORD ne_stack; /* 12 Initial size of stack */ + DWORD ne_csip; /* 14 Initial CS:IP */ + DWORD ne_sssp; /* 18 Initial SS:SP */ + WORD ne_cseg; /* 1c # of entries in segment table */ + WORD ne_cmod; /* 1e # of entries in module reference tab. */ + WORD ne_cbnrestab; /* 20 Length of nonresident-name table */ + WORD ne_segtab; /* 22 Offset to segment table */ + WORD ne_rsrctab; /* 24 Offset to resource table */ + WORD ne_restab; /* 26 Offset to resident-name table */ + WORD ne_modtab; /* 28 Offset to module reference table */ + WORD ne_imptab; /* 2a Offset to imported name table */ + DWORD ne_nrestab; /* 2c Offset to nonresident-name table */ + WORD ne_cmovent; /* 30 # of movable entry points */ + WORD ne_align; /* 32 Logical sector alignment shift count */ + WORD ne_cres; /* 34 # of resource segments */ + BYTE ne_exetyp; /* 36 Flags indicating target OS */ + BYTE ne_flagsothers; /* 37 Additional information flags */ + WORD ne_pretthunks; /* 38 Offset to return thunks */ + WORD ne_psegrefbytes; /* 3a Offset to segment ref. bytes */ + WORD ne_swaparea; /* 3c Reserved by Microsoft */ + WORD ne_expver; /* 3e Expected Windows version number */ +} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER; + +typedef struct _IMAGE_VXD_HEADER { + WORD e32_magic; + BYTE e32_border; + BYTE e32_worder; + DWORD e32_level; + WORD e32_cpu; + WORD e32_os; + DWORD e32_ver; + DWORD e32_mflags; + DWORD e32_mpages; + DWORD e32_startobj; + DWORD e32_eip; + DWORD e32_stackobj; + DWORD e32_esp; + DWORD e32_pagesize; + DWORD e32_lastpagesize; + DWORD e32_fixupsize; + DWORD e32_fixupsum; + DWORD e32_ldrsize; + DWORD e32_ldrsum; + DWORD e32_objtab; + DWORD e32_objcnt; + DWORD e32_objmap; + DWORD e32_itermap; + DWORD e32_rsrctab; + DWORD e32_rsrccnt; + DWORD e32_restab; + DWORD e32_enttab; + DWORD e32_dirtab; + DWORD e32_dircnt; + DWORD e32_fpagetab; + DWORD e32_frectab; + DWORD e32_impmod; + DWORD e32_impmodcnt; + DWORD e32_impproc; + DWORD e32_pagesum; + DWORD e32_datapage; + DWORD e32_preload; + DWORD e32_nrestab; + DWORD e32_cbnrestab; + DWORD e32_nressum; + DWORD e32_autodata; + DWORD e32_debuginfo; + DWORD e32_debuglen; + DWORD e32_instpreload; + DWORD e32_instdemand; + DWORD e32_heapsize; + BYTE e32_res3[12]; + DWORD e32_winresoff; + DWORD e32_winreslen; + WORD e32_devid; + WORD e32_ddkver; +} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER; + +/* These defines describe the meanings of the bits in the + Characteristics field */ + +#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */ +#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 +#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 +#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 +#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 +#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 +#define IMAGE_FILE_16BIT_MACHINE 0x0040 +#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 +#define IMAGE_FILE_32BIT_MACHINE 0x0100 +#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 +#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 +#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 +#define IMAGE_FILE_SYSTEM 0x1000 +#define IMAGE_FILE_DLL 0x2000 +#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 +#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 + +/* These are the settings of the Machine field. */ +#define IMAGE_FILE_MACHINE_UNKNOWN 0 +#define IMAGE_FILE_MACHINE_I860 0x014d +#define IMAGE_FILE_MACHINE_I386 0x014c +#define IMAGE_FILE_MACHINE_R3000 0x0162 +#define IMAGE_FILE_MACHINE_R4000 0x0166 +#define IMAGE_FILE_MACHINE_R10000 0x0168 +#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 +#define IMAGE_FILE_MACHINE_ALPHA 0x0184 +#define IMAGE_FILE_MACHINE_SH3 0x01a2 +#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 +#define IMAGE_FILE_MACHINE_SH3E 0x01a4 +#define IMAGE_FILE_MACHINE_SH4 0x01a6 +#define IMAGE_FILE_MACHINE_SH5 0x01a8 +#define IMAGE_FILE_MACHINE_ARM 0x01c0 +#define IMAGE_FILE_MACHINE_THUMB 0x01c2 +#define IMAGE_FILE_MACHINE_AM33 0x01d3 +#define IMAGE_FILE_MACHINE_POWERPC 0x01f0 +#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 +#define IMAGE_FILE_MACHINE_IA64 0x0200 +#define IMAGE_FILE_MACHINE_MIPS16 0x0266 +#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 +#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 +#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 +#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 +#define IMAGE_FILE_MACHINE_TRICORE 0x0520 +#define IMAGE_FILE_MACHINE_CEF 0x0cef +#define IMAGE_FILE_MACHINE_EBC 0x0ebc +#define IMAGE_FILE_MACHINE_AMD64 0x8664 +#define IMAGE_FILE_MACHINE_M32R 0x9041 +#define IMAGE_FILE_MACHINE_CEE 0xc0ee + +#define IMAGE_SIZEOF_FILE_HEADER 20 +#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56 +#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28 +#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER32 224 +#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER64 240 +#define IMAGE_SIZEOF_SHORT_NAME 8 +#define IMAGE_SIZEOF_SECTION_HEADER 40 +#define IMAGE_SIZEOF_SYMBOL 18 +#define IMAGE_SIZEOF_AUX_SYMBOL 18 +#define IMAGE_SIZEOF_RELOCATION 10 +#define IMAGE_SIZEOF_BASE_RELOCATION 8 +#define IMAGE_SIZEOF_LINENUMBER 6 +#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 + +/* Possible Magic values */ +#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b +#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b +#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x0107 + +#ifdef CONFIG_X86_64 +#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER64 +#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC +#else +#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL_HEADER32 +#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC +#endif + +/* These are indexes into the DataDirectory array */ +#define IMAGE_FILE_EXPORT_DIRECTORY 0 +#define IMAGE_FILE_IMPORT_DIRECTORY 1 +#define IMAGE_FILE_RESOURCE_DIRECTORY 2 +#define IMAGE_FILE_EXCEPTION_DIRECTORY 3 +#define IMAGE_FILE_SECURITY_DIRECTORY 4 +#define IMAGE_FILE_BASE_RELOCATION_TABLE 5 +#define IMAGE_FILE_DEBUG_DIRECTORY 6 +#define IMAGE_FILE_DESCRIPTION_STRING 7 +#define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */ +#define IMAGE_FILE_THREAD_LOCAL_STORAGE 9 +#define IMAGE_FILE_CALLBACK_DIRECTORY 10 + +/* Directory Entries, indices into the DataDirectory array */ + +#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 +#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 +#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 +#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 +#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 +#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 +#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 +#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 +#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */ +#define IMAGE_DIRECTORY_ENTRY_TLS 9 +#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 +#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 +#define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */ +#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 +#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 + +/* Subsystem Values */ + +#define IMAGE_SUBSYSTEM_UNKNOWN 0 +#define IMAGE_SUBSYSTEM_NATIVE 1 +#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */ +#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */ +#define IMAGE_SUBSYSTEM_OS2_CUI 5 +#define IMAGE_SUBSYSTEM_POSIX_CUI 7 +#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */ +#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */ +#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 +#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 +#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 +#define IMAGE_SUBSYSTEM_EFI_ROM 13 +#define IMAGE_SUBSYSTEM_XBOX 14 + +typedef struct _IMAGE_FILE_HEADER { + WORD Machine; + WORD NumberOfSections; + DWORD TimeDateStamp; + DWORD PointerToSymbolTable; + DWORD NumberOfSymbols; + WORD SizeOfOptionalHeader; + WORD Characteristics; +} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; + +typedef struct _IMAGE_DATA_DIRECTORY { + DWORD VirtualAddress; + DWORD Size; +} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; + +#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 + +typedef struct _IMAGE_OPTIONAL_HEADER32 { + + /* Standard fields */ + + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + DWORD BaseOfData; + + /* NT additional fields */ + DWORD ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + DWORD SizeOfStackReserve; + DWORD SizeOfStackCommit; + DWORD SizeOfHeapReserve; + DWORD SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; +} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; + +typedef struct _IMAGE_OPTIONAL_HEADER64 { + + /* Standard fields */ + + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + + /* NT additional fields */ + ULONGLONG ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + ULONGLONG SizeOfStackReserve; + ULONGLONG SizeOfStackCommit; + ULONGLONG SizeOfHeapReserve; + ULONGLONG SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; +} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; + +#ifdef CONFIG_X86_64 +typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER; +typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER; +#else +typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER; +typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER; +#endif + +typedef struct _IMAGE_NT_HEADERS32 { + DWORD Signature; /* "PE"\0\0 */ /* 0x00 */ + IMAGE_FILE_HEADER FileHeader; /* 0x04 */ + IMAGE_OPTIONAL_HEADER32 OptionalHeader; /* 0x18 */ +} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; + +typedef struct _IMAGE_NT_HEADERS64 { + DWORD Signature; /* "PE"\0\0 */ /* 0x00 */ + IMAGE_FILE_HEADER FileHeader; /* 0x04 */ + IMAGE_OPTIONAL_HEADER64 OptionalHeader; /* 0x18 */ +} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; + +#ifdef CONFIG_X86_64 +typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS; +typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; +#else +typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; +typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; +#endif + +#define IMAGE_SIZEOF_SHORT_NAME 8 + +typedef struct _IMAGE_SECTION_HEADER { + BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; + union { + DWORD PhysicalAddress; + DWORD VirtualSize; + } Misc; + DWORD VirtualAddress; + DWORD SizeOfRawData; + DWORD PointerToRawData; + DWORD PointerToRelocations; + DWORD PointerToLinenumbers; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD Characteristics; +} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; + +#define IMAGE_SIZEOF_SECTION_HEADER 40 + +#define IMAGE_FIRST_SECTION(ntheader) \ +((PIMAGE_SECTION_HEADER)((LPBYTE)&((PIMAGE_NT_HEADERS)(ntheader))->OptionalHeader + \ +((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader)) + +/* These defines are for the Characteristics bitfield. */ +/* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */ +/* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */ +/* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */ +/* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */ +#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */ +/* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */ + +#define IMAGE_SCN_CNT_CODE 0x00000020 +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 +#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 + +#define IMAGE_SCN_LNK_OTHER 0x00000100 +#define IMAGE_SCN_LNK_INFO 0x00000200 +/* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */ +#define IMAGE_SCN_LNK_REMOVE 0x00000800 +#define IMAGE_SCN_LNK_COMDAT 0x00001000 + +/* 0x00002000 - Reserved */ +/* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */ +#define IMAGE_SCN_MEM_FARDATA 0x00008000 + +/* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */ +#define IMAGE_SCN_MEM_PURGEABLE 0x00020000 +#define IMAGE_SCN_MEM_16BIT 0x00020000 +#define IMAGE_SCN_MEM_LOCKED 0x00040000 +#define IMAGE_SCN_MEM_PRELOAD 0x00080000 + +#define IMAGE_SCN_ALIGN_1BYTES 0x00100000 +#define IMAGE_SCN_ALIGN_2BYTES 0x00200000 +#define IMAGE_SCN_ALIGN_4BYTES 0x00300000 +#define IMAGE_SCN_ALIGN_8BYTES 0x00400000 +#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */ +#define IMAGE_SCN_ALIGN_32BYTES 0x00600000 +#define IMAGE_SCN_ALIGN_64BYTES 0x00700000 +#define IMAGE_SCN_ALIGN_128BYTES 0x00800000 +#define IMAGE_SCN_ALIGN_256BYTES 0x00900000 +#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 +#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 +#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 +#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 +#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 +/* 0x00F00000 - Unused */ +#define IMAGE_SCN_ALIGN_MASK 0x00F00000 + +#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 + + +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 +#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 +#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 +#define IMAGE_SCN_MEM_SHARED 0x10000000 +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 +#define IMAGE_SCN_MEM_READ 0x40000000 +#define IMAGE_SCN_MEM_WRITE 0x80000000 + +typedef struct _IMAGE_SYMBOL { + union { + BYTE ShortName[8]; + struct { + DWORD Short; + DWORD Long; + } Name; + DWORD LongName[2]; + } N; + DWORD Value; + SHORT SectionNumber; + WORD Type; + BYTE StorageClass; + BYTE NumberOfAuxSymbols; +} IMAGE_SYMBOL; +typedef IMAGE_SYMBOL *PIMAGE_SYMBOL; + +#define IMAGE_SIZEOF_SYMBOL 18 + +typedef struct _IMAGE_LINENUMBER { + union { + DWORD SymbolTableIndex; + DWORD VirtualAddress; + } Type; + WORD Linenumber; +} IMAGE_LINENUMBER; +typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER; + +#define IMAGE_SIZEOF_LINENUMBER 6 + +typedef union _IMAGE_AUX_SYMBOL { + struct { + DWORD TagIndex; + union { + struct { + WORD Linenumber; + WORD Size; + } LnSz; + DWORD TotalSize; + } Misc; + union { + struct { + DWORD PointerToLinenumber; + DWORD PointerToNextFunction; + } Function; + struct { + WORD Dimension[4]; + } Array; + } FcnAry; + WORD TvIndex; + } Sym; + struct { + BYTE Name[IMAGE_SIZEOF_SYMBOL]; + } File; + struct { + DWORD Length; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD CheckSum; + SHORT Number; + BYTE Selection; + } Section; +} IMAGE_AUX_SYMBOL; +typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL; + +#define IMAGE_SIZEOF_AUX_SYMBOL 18 + +#define IMAGE_SYM_UNDEFINED (SHORT)0 +#define IMAGE_SYM_ABSOLUTE (SHORT)-1 +#define IMAGE_SYM_DEBUG (SHORT)-2 + +#define IMAGE_SYM_TYPE_NULL 0x0000 +#define IMAGE_SYM_TYPE_VOID 0x0001 +#define IMAGE_SYM_TYPE_CHAR 0x0002 +#define IMAGE_SYM_TYPE_SHORT 0x0003 +#define IMAGE_SYM_TYPE_INT 0x0004 +#define IMAGE_SYM_TYPE_LONG 0x0005 +#define IMAGE_SYM_TYPE_FLOAT 0x0006 +#define IMAGE_SYM_TYPE_DOUBLE 0x0007 +#define IMAGE_SYM_TYPE_STRUCT 0x0008 +#define IMAGE_SYM_TYPE_UNION 0x0009 +#define IMAGE_SYM_TYPE_ENUM 0x000A +#define IMAGE_SYM_TYPE_MOE 0x000B +#define IMAGE_SYM_TYPE_BYTE 0x000C +#define IMAGE_SYM_TYPE_WORD 0x000D +#define IMAGE_SYM_TYPE_UINT 0x000E +#define IMAGE_SYM_TYPE_DWORD 0x000F +#define IMAGE_SYM_TYPE_PCODE 0x8000 + +#define IMAGE_SYM_DTYPE_NULL 0 +#define IMAGE_SYM_DTYPE_POINTER 1 +#define IMAGE_SYM_DTYPE_FUNCTION 2 +#define IMAGE_SYM_DTYPE_ARRAY 3 + +#define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1 +#define IMAGE_SYM_CLASS_NULL 0x0000 +#define IMAGE_SYM_CLASS_AUTOMATIC 0x0001 +#define IMAGE_SYM_CLASS_EXTERNAL 0x0002 +#define IMAGE_SYM_CLASS_STATIC 0x0003 +#define IMAGE_SYM_CLASS_REGISTER 0x0004 +#define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005 +#define IMAGE_SYM_CLASS_LABEL 0x0006 +#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007 +#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008 +#define IMAGE_SYM_CLASS_ARGUMENT 0x0009 +#define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A +#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B +#define IMAGE_SYM_CLASS_UNION_TAG 0x000C +#define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D +#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E +#define IMAGE_SYM_CLASS_ENUM_TAG 0x000F +#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010 +#define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011 +#define IMAGE_SYM_CLASS_BIT_FIELD 0x0012 + +#define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044 +#define IMAGE_SYM_CLASS_BLOCK 0x0064 +#define IMAGE_SYM_CLASS_FUNCTION 0x0065 +#define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066 +#define IMAGE_SYM_CLASS_FILE 0x0067 +#define IMAGE_SYM_CLASS_SECTION 0x0068 +#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069 + +#define N_BTMASK 0x000F +#define N_TMASK 0x0030 +#define N_TMASK1 0x00C0 +#define N_TMASK2 0x00F0 +#define N_BTSHFT 4 +#define N_TSHIFT 2 + +#define BTYPE(x) ((x) & N_BTMASK) + +#ifndef ISPTR +#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT)) +#endif + +#ifndef ISFCN +#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT)) +#endif + +#ifndef ISARY +#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT)) +#endif + +#ifndef ISTAG +#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG) +#endif + +#ifndef INCREF +#define INCREF(x) ((((x)&~N_BTMASK)<>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK)) +#endif + +#define IMAGE_COMDAT_SELECT_NODUPLICATES 1 +#define IMAGE_COMDAT_SELECT_ANY 2 +#define IMAGE_COMDAT_SELECT_SAME_SIZE 3 +#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4 +#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5 +#define IMAGE_COMDAT_SELECT_LARGEST 6 +#define IMAGE_COMDAT_SELECT_NEWEST 7 + +#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1 +#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2 +#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3 + +/* Export module directory */ + +typedef struct _IMAGE_EXPORT_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD Name; + DWORD Base; + DWORD NumberOfFunctions; + DWORD NumberOfNames; + DWORD AddressOfFunctions; + DWORD AddressOfNames; + DWORD AddressOfNameOrdinals; +} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY; + +/* Import name entry */ +typedef struct _IMAGE_IMPORT_BY_NAME { + WORD Hint; + BYTE Name[1]; +} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME; + +/* Import thunk */ +typedef struct _IMAGE_THUNK_DATA32 { + union { + DWORD ForwarderString; + DWORD Function; + DWORD Ordinal; + DWORD AddressOfData; + } u1; +} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32; + +typedef struct _IMAGE_THUNK_DATA64 { + union { + ULONGLONG ForwarderString; + ULONGLONG Function; + ULONGLONG Ordinal; + ULONGLONG AddressOfData; + } u1; +} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64; + +#ifdef CONFIG_X86_64 +typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA; +typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA; +#else +typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA; +typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA; +#endif + +/* Import module directory */ + +typedef struct packed _IMAGE_IMPORT_DESCRIPTOR { + union { + DWORD Characteristics; /* 0 for terminating null + * import descriptor */ + DWORD OriginalFirstThunk; /* RVA to original unbound + * IAT */ + } u; + DWORD TimeDateStamp; /* 0 if not bound, + * -1 if bound, and real date\time stamp + * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT + * (new BIND) + * otherwise date/time stamp of DLL bound to + * (Old BIND) + */ + DWORD ForwarderChain; /* -1 if no forwarders */ + DWORD Name; + /* RVA to IAT (if bound this IAT has actual addresses) */ + DWORD FirstThunk; +} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR; + +#define IMAGE_ORDINAL_FLAG32 0x80000000 +#define IMAGE_ORDINAL_FLAG64 0x8000000000000000UL +#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0) +#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0) +#define IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff) + +#ifdef CONFIG_X86_64 +#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64 +#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL64 +#else +#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32 +#define IMAGE_SNAP_BY_ORDINAL IMAGE_SNAP_BY_ORDINAL32 +#endif + +typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR +{ + DWORD TimeDateStamp; + WORD OffsetModuleName; + WORD NumberOfModuleForwarderRefs; +/* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */ +} IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR; + +typedef struct _IMAGE_BOUND_FORWARDER_REF +{ + DWORD TimeDateStamp; + WORD OffsetModuleName; + WORD Reserved; +} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF; + +typedef struct _IMAGE_BASE_RELOCATION +{ + DWORD VirtualAddress; + DWORD SizeOfBlock; + WORD TypeOffset[0]; +} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION; + +typedef struct _IMAGE_RELOCATION +{ + union { + DWORD VirtualAddress; + DWORD RelocCount; + } DUMMYUNIONNAME; + DWORD SymbolTableIndex; + WORD Type; +} IMAGE_RELOCATION, *PIMAGE_RELOCATION; + +#define IMAGE_SIZEOF_RELOCATION 10 + +/* generic relocation types */ +#define IMAGE_REL_BASED_ABSOLUTE 0 +#define IMAGE_REL_BASED_HIGH 1 +#define IMAGE_REL_BASED_LOW 2 +#define IMAGE_REL_BASED_HIGHLOW 3 +#define IMAGE_REL_BASED_HIGHADJ 4 +#define IMAGE_REL_BASED_MIPS_JMPADDR 5 +#define IMAGE_REL_BASED_SECTION 6 +#define IMAGE_REL_BASED_REL 7 +#define IMAGE_REL_BASED_MIPS_JMPADDR16 9 +#define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */ +#define IMAGE_REL_BASED_DIR64 10 +#define IMAGE_REL_BASED_HIGH3ADJ 11 + +/* I386 relocation types */ +#define IMAGE_REL_I386_ABSOLUTE 0 +#define IMAGE_REL_I386_DIR16 1 +#define IMAGE_REL_I386_REL16 2 +#define IMAGE_REL_I386_DIR32 6 +#define IMAGE_REL_I386_DIR32NB 7 +#define IMAGE_REL_I386_SEG12 9 +#define IMAGE_REL_I386_SECTION 10 +#define IMAGE_REL_I386_SECREL 11 +#define IMAGE_REL_I386_REL32 20 + +/* MIPS relocation types */ +#define IMAGE_REL_MIPS_ABSOLUTE 0x0000 +#define IMAGE_REL_MIPS_REFHALF 0x0001 +#define IMAGE_REL_MIPS_REFWORD 0x0002 +#define IMAGE_REL_MIPS_JMPADDR 0x0003 +#define IMAGE_REL_MIPS_REFHI 0x0004 +#define IMAGE_REL_MIPS_REFLO 0x0005 +#define IMAGE_REL_MIPS_GPREL 0x0006 +#define IMAGE_REL_MIPS_LITERAL 0x0007 +#define IMAGE_REL_MIPS_SECTION 0x000A +#define IMAGE_REL_MIPS_SECREL 0x000B +#define IMAGE_REL_MIPS_SECRELLO 0x000C +#define IMAGE_REL_MIPS_SECRELHI 0x000D +#define IMAGE_REL_MIPS_JMPADDR16 0x0010 +#define IMAGE_REL_MIPS_REFWORDNB 0x0022 +#define IMAGE_REL_MIPS_PAIR 0x0025 + +/* ALPHA relocation types */ +#define IMAGE_REL_ALPHA_ABSOLUTE 0x0000 +#define IMAGE_REL_ALPHA_REFLONG 0x0001 +#define IMAGE_REL_ALPHA_REFQUAD 0x0002 +#define IMAGE_REL_ALPHA_GPREL 0x0003 +#define IMAGE_REL_ALPHA_LITERAL 0x0004 +#define IMAGE_REL_ALPHA_LITUSE 0x0005 +#define IMAGE_REL_ALPHA_GPDISP 0x0006 +#define IMAGE_REL_ALPHA_BRADDR 0x0007 +#define IMAGE_REL_ALPHA_HINT 0x0008 +#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009 +#define IMAGE_REL_ALPHA_REFHI 0x000A +#define IMAGE_REL_ALPHA_REFLO 0x000B +#define IMAGE_REL_ALPHA_PAIR 0x000C +#define IMAGE_REL_ALPHA_MATCH 0x000D +#define IMAGE_REL_ALPHA_SECTION 0x000E +#define IMAGE_REL_ALPHA_SECREL 0x000F +#define IMAGE_REL_ALPHA_REFLONGNB 0x0010 +#define IMAGE_REL_ALPHA_SECRELLO 0x0011 +#define IMAGE_REL_ALPHA_SECRELHI 0x0012 +#define IMAGE_REL_ALPHA_REFQ3 0x0013 +#define IMAGE_REL_ALPHA_REFQ2 0x0014 +#define IMAGE_REL_ALPHA_REFQ1 0x0015 +#define IMAGE_REL_ALPHA_GPRELLO 0x0016 +#define IMAGE_REL_ALPHA_GPRELHI 0x0017 + +/* PowerPC relocation types */ +#define IMAGE_REL_PPC_ABSOLUTE 0x0000 +#define IMAGE_REL_PPC_ADDR64 0x0001 +#define IMAGE_REL_PPC_ADDR 0x0002 +#define IMAGE_REL_PPC_ADDR24 0x0003 +#define IMAGE_REL_PPC_ADDR16 0x0004 +#define IMAGE_REL_PPC_ADDR14 0x0005 +#define IMAGE_REL_PPC_REL24 0x0006 +#define IMAGE_REL_PPC_REL14 0x0007 +#define IMAGE_REL_PPC_TOCREL16 0x0008 +#define IMAGE_REL_PPC_TOCREL14 0x0009 +#define IMAGE_REL_PPC_ADDR32NB 0x000A +#define IMAGE_REL_PPC_SECREL 0x000B +#define IMAGE_REL_PPC_SECTION 0x000C +#define IMAGE_REL_PPC_IFGLUE 0x000D +#define IMAGE_REL_PPC_IMGLUE 0x000E +#define IMAGE_REL_PPC_SECREL16 0x000F +#define IMAGE_REL_PPC_REFHI 0x0010 +#define IMAGE_REL_PPC_REFLO 0x0011 +#define IMAGE_REL_PPC_PAIR 0x0012 +#define IMAGE_REL_PPC_SECRELLO 0x0013 +#define IMAGE_REL_PPC_SECRELHI 0x0014 +#define IMAGE_REL_PPC_GPREL 0x0015 +#define IMAGE_REL_PPC_TYPEMASK 0x00FF +/* modifier bits */ +#define IMAGE_REL_PPC_NEG 0x0100 +#define IMAGE_REL_PPC_BRTAKEN 0x0200 +#define IMAGE_REL_PPC_BRNTAKEN 0x0400 +#define IMAGE_REL_PPC_TOCDEFN 0x0800 + +/* SH3 ? relocation type */ +#define IMAGE_REL_SH3_ABSOLUTE 0x0000 +#define IMAGE_REL_SH3_DIRECT16 0x0001 +#define IMAGE_REL_SH3_DIRECT 0x0002 +#define IMAGE_REL_SH3_DIRECT8 0x0003 +#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004 +#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005 +#define IMAGE_REL_SH3_DIRECT4 0x0006 +#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007 +#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008 +#define IMAGE_REL_SH3_PCREL8_WORD 0x0009 +#define IMAGE_REL_SH3_PCREL8_LONG 0x000A +#define IMAGE_REL_SH3_PCREL12_WORD 0x000B +#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C +#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D +#define IMAGE_REL_SH3_SECTION 0x000E +#define IMAGE_REL_SH3_SECREL 0x000F +#define IMAGE_REL_SH3_DIRECT32_NB 0x0010 + +/* ARM (Archimedes?) relocation types */ +#define IMAGE_REL_ARM_ABSOLUTE 0x0000 +#define IMAGE_REL_ARM_ADDR 0x0001 +#define IMAGE_REL_ARM_ADDR32NB 0x0002 +#define IMAGE_REL_ARM_BRANCH24 0x0003 +#define IMAGE_REL_ARM_BRANCH11 0x0004 +#define IMAGE_REL_ARM_SECTION 0x000E +#define IMAGE_REL_ARM_SECREL 0x000F + +/* IA64 relocation types */ +#define IMAGE_REL_IA64_ABSOLUTE 0x0000 +#define IMAGE_REL_IA64_IMM14 0x0001 +#define IMAGE_REL_IA64_IMM22 0x0002 +#define IMAGE_REL_IA64_IMM64 0x0003 +#define IMAGE_REL_IA64_DIR 0x0004 +#define IMAGE_REL_IA64_DIR64 0x0005 +#define IMAGE_REL_IA64_PCREL21B 0x0006 +#define IMAGE_REL_IA64_PCREL21M 0x0007 +#define IMAGE_REL_IA64_PCREL21F 0x0008 +#define IMAGE_REL_IA64_GPREL22 0x0009 +#define IMAGE_REL_IA64_LTOFF22 0x000A +#define IMAGE_REL_IA64_SECTION 0x000B +#define IMAGE_REL_IA64_SECREL22 0x000C +#define IMAGE_REL_IA64_SECREL64I 0x000D +#define IMAGE_REL_IA64_SECREL 0x000E +#define IMAGE_REL_IA64_LTOFF64 0x000F +#define IMAGE_REL_IA64_DIR32NB 0x0010 +#define IMAGE_REL_IA64_RESERVED_11 0x0011 +#define IMAGE_REL_IA64_RESERVED_12 0x0012 +#define IMAGE_REL_IA64_RESERVED_13 0x0013 +#define IMAGE_REL_IA64_RESERVED_14 0x0014 +#define IMAGE_REL_IA64_RESERVED_15 0x0015 +#define IMAGE_REL_IA64_RESERVED_16 0x0016 +#define IMAGE_REL_IA64_ADDEND 0x001F + +/* archive format */ + +#define IMAGE_ARCHIVE_START_SIZE 8 +#define IMAGE_ARCHIVE_START "!\n" +#define IMAGE_ARCHIVE_END "`\n" +#define IMAGE_ARCHIVE_PAD "\n" +#define IMAGE_ARCHIVE_LINKER_MEMBER "/ " +#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// " + +typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER +{ + BYTE Name[16]; + BYTE Date[12]; + BYTE UserID[6]; + BYTE GroupID[6]; + BYTE Mode[8]; + BYTE Size[10]; + BYTE EndHeader[2]; +} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER; + +#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 + +/* + * Resource directory stuff + */ +typedef struct _IMAGE_RESOURCE_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + WORD NumberOfNamedEntries; + WORD NumberOfIdEntries; + /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */ +} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY; + +#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000 +#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000 + +typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { + union { + struct { +#ifdef BITFIELDS_BIGENDIAN + unsigned NameIsString:1; + unsigned NameOffset:31; +#else + unsigned NameOffset:31; + unsigned NameIsString:1; +#endif + } DUMMYSTRUCTNAME1; + DWORD Name; + struct { +#ifdef WORDS_BIGENDIAN + WORD __pad; + WORD Id; +#else + WORD Id; + WORD __pad; +#endif + } DUMMYSTRUCTNAME2; + } DUMMYUNIONNAME1; + union { + DWORD OffsetToData; + struct { +#ifdef BITFIELDS_BIGENDIAN + unsigned DataIsDirectory:1; + unsigned OffsetToDirectory:31; +#else + unsigned OffsetToDirectory:31; + unsigned DataIsDirectory:1; +#endif + } DUMMYSTRUCTNAME3; + } DUMMYUNIONNAME2; +} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY; + + +typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { + WORD Length; + CHAR NameString[ 1 ]; +} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING; + --- linux-2.6.32.orig/ubuntu/ndiswrapper/proc.c +++ linux-2.6.32/ubuntu/ndiswrapper/proc.c @@ -0,0 +1,565 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ +#include +#include +#include + +#include "ndis.h" +#include "iw_ndis.h" +#include "wrapndis.h" +#include "pnp.h" +#include "wrapper.h" + +#define MAX_PROC_STR_LEN 32 + +static struct proc_dir_entry *wrap_procfs_entry; + +static int procfs_read_ndis_stats(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + char *p = page; + struct ndis_device *wnd = (struct ndis_device *)data; + struct ndis_wireless_stats stats; + NDIS_STATUS res; + ndis_rssi rssi; + + if (off != 0) { + *eof = 1; + return 0; + } + + res = mp_query(wnd, OID_802_11_RSSI, &rssi, sizeof(rssi)); + if (!res) + p += sprintf(p, "signal_level=%d dBm\n", (s32)rssi); + + res = mp_query(wnd, OID_802_11_STATISTICS, &stats, sizeof(stats)); + if (!res) { + + p += sprintf(p, "tx_frames=%Lu\n", stats.tx_frag); + p += sprintf(p, "tx_multicast_frames=%Lu\n", + stats.tx_multi_frag); + p += sprintf(p, "tx_failed=%Lu\n", stats.failed); + p += sprintf(p, "tx_retry=%Lu\n", stats.retry); + p += sprintf(p, "tx_multi_rerty=%Lu\n", stats.multi_retry); + p += sprintf(p, "tx_rtss_success=%Lu\n", stats.rtss_succ); + p += sprintf(p, "tx_rtss_fail=%Lu\n", stats.rtss_fail); + p += sprintf(p, "ack_fail=%Lu\n", stats.ack_fail); + p += sprintf(p, "frame_duplicates=%Lu\n", stats.frame_dup); + p += sprintf(p, "rx_frames=%Lu\n", stats.rx_frag); + p += sprintf(p, "rx_multicast_frames=%Lu\n", + stats.rx_multi_frag); + p += sprintf(p, "fcs_errors=%Lu\n", stats.fcs_err); + } + + if (p - page > count) { + ERROR("wrote %lu bytes (limit is %u)\n", + (unsigned long)(p - page), count); + *eof = 1; + } + + return p - page; +} + +static int procfs_read_ndis_encr(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + char *p = page; + struct ndis_device *wnd = (struct ndis_device *)data; + int i, encr_status, auth_mode, infra_mode; + NDIS_STATUS res; + struct ndis_essid essid; + mac_address ap_address; + + if (off != 0) { + *eof = 1; + return 0; + } + + res = mp_query(wnd, OID_802_11_BSSID, + &ap_address, sizeof(ap_address)); + if (res) + memset(ap_address, 0, ETH_ALEN); + p += sprintf(p, "ap_address=%2.2X", ap_address[0]); + for (i = 1 ; i < ETH_ALEN ; i++) + p += sprintf(p, ":%2.2X", ap_address[i]); + p += sprintf(p, "\n"); + + res = mp_query(wnd, OID_802_11_SSID, &essid, sizeof(essid)); + if (!res) + p += sprintf(p, "essid=%.*s\n", essid.length, essid.essid); + + res = mp_query_int(wnd, OID_802_11_ENCRYPTION_STATUS, &encr_status); + if (!res) { + typeof(&wnd->encr_info.keys[0]) tx_key; + p += sprintf(p, "tx_key=%u\n", wnd->encr_info.tx_key_index); + p += sprintf(p, "key="); + tx_key = &wnd->encr_info.keys[wnd->encr_info.tx_key_index]; + if (tx_key->length > 0) + for (i = 0; i < tx_key->length; i++) + p += sprintf(p, "%2.2X", tx_key->key[i]); + else + p += sprintf(p, "off"); + p += sprintf(p, "\n"); + p += sprintf(p, "encr_mode=%d\n", encr_status); + } + res = mp_query_int(wnd, OID_802_11_AUTHENTICATION_MODE, &auth_mode); + if (!res) + p += sprintf(p, "auth_mode=%d\n", auth_mode); + res = mp_query_int(wnd, OID_802_11_INFRASTRUCTURE_MODE, &infra_mode); + p += sprintf(p, "mode=%s\n", (infra_mode == Ndis802_11IBSS) ? + "adhoc" : (infra_mode == Ndis802_11Infrastructure) ? + "managed" : "auto"); + if (p - page > count) { + WARNING("wrote %lu bytes (limit is %u)", + (unsigned long)(p - page), count); + *eof = 1; + } + + return p - page; +} + +static int procfs_read_ndis_hw(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + char *p = page; + struct ndis_device *wnd = (struct ndis_device *)data; + struct ndis_configuration config; + unsigned int power_mode; + NDIS_STATUS res; + ndis_tx_power_level tx_power; + ULONG bit_rate; + ndis_rts_threshold rts_threshold; + ndis_fragmentation_threshold frag_threshold; + ndis_antenna antenna; + ULONG packet_filter; + int n; + mac_address mac; + char *hw_status[] = {"ready", "initializing", "resetting", "closing", + "not ready"}; + + if (off != 0) { + *eof = 1; + return 0; + } + + res = mp_query_int(wnd, OID_GEN_HARDWARE_STATUS, &n); + if (res == NDIS_STATUS_SUCCESS && + n >= 0 && n < sizeof(hw_status) / sizeof(hw_status[0])) + p += sprintf(p, "status=%s\n", hw_status[n]); + + res = mp_query(wnd, OID_802_3_CURRENT_ADDRESS, mac, sizeof(mac)); + if (!res) + p += sprintf(p, "mac: " MACSTRSEP "\n", MAC2STR(mac)); + res = mp_query(wnd, OID_802_11_CONFIGURATION, &config, sizeof(config)); + if (!res) { + p += sprintf(p, "beacon_period=%u msec\n", + config.beacon_period); + p += sprintf(p, "atim_window=%u msec\n", config.atim_window); + p += sprintf(p, "frequency=%u kHZ\n", config.ds_config); + p += sprintf(p, "hop_pattern=%u\n", + config.fh_config.hop_pattern); + p += sprintf(p, "hop_set=%u\n", + config.fh_config.hop_set); + p += sprintf(p, "dwell_time=%u msec\n", + config.fh_config.dwell_time); + } + + res = mp_query(wnd, OID_802_11_TX_POWER_LEVEL, + &tx_power, sizeof(tx_power)); + if (!res) + p += sprintf(p, "tx_power=%u mW\n", tx_power); + + res = mp_query(wnd, OID_GEN_LINK_SPEED, &bit_rate, sizeof(bit_rate)); + if (!res) + p += sprintf(p, "bit_rate=%u kBps\n", (u32)bit_rate / 10); + + res = mp_query(wnd, OID_802_11_RTS_THRESHOLD, + &rts_threshold, sizeof(rts_threshold)); + if (!res) + p += sprintf(p, "rts_threshold=%u bytes\n", rts_threshold); + + res = mp_query(wnd, OID_802_11_FRAGMENTATION_THRESHOLD, + &frag_threshold, sizeof(frag_threshold)); + if (!res) + p += sprintf(p, "frag_threshold=%u bytes\n", frag_threshold); + + res = mp_query_int(wnd, OID_802_11_POWER_MODE, &power_mode); + if (!res) + p += sprintf(p, "power_mode=%s\n", + (power_mode == NDIS_POWER_OFF) ? "always_on" : + (power_mode == NDIS_POWER_MAX) ? + "max_savings" : "min_savings"); + + res = mp_query(wnd, OID_802_11_NUMBER_OF_ANTENNAS, + &antenna, sizeof(antenna)); + if (!res) + p += sprintf(p, "num_antennas=%u\n", antenna); + + res = mp_query(wnd, OID_802_11_TX_ANTENNA_SELECTED, + &antenna, sizeof(antenna)); + if (!res) + p += sprintf(p, "tx_antenna=%u\n", antenna); + + res = mp_query(wnd, OID_802_11_RX_ANTENNA_SELECTED, + &antenna, sizeof(antenna)); + if (!res) + p += sprintf(p, "rx_antenna=%u\n", antenna); + + p += sprintf(p, "encryption_modes=%s%s%s%s%s%s%s\n", + test_bit(Ndis802_11Encryption1Enabled, &wnd->capa.encr) ? + "WEP" : "none", + + test_bit(Ndis802_11Encryption2Enabled, &wnd->capa.encr) ? + "; TKIP with WPA" : "", + test_bit(Ndis802_11AuthModeWPA2, &wnd->capa.auth) ? + ", WPA2" : "", + test_bit(Ndis802_11AuthModeWPA2PSK, &wnd->capa.auth) ? + ", WPA2PSK" : "", + + test_bit(Ndis802_11Encryption3Enabled, &wnd->capa.encr) ? + "; AES/CCMP with WPA" : "", + test_bit(Ndis802_11AuthModeWPA2, &wnd->capa.auth) ? + ", WPA2" : "", + test_bit(Ndis802_11AuthModeWPA2PSK, &wnd->capa.auth) ? + ", WPA2PSK" : ""); + + res = mp_query_int(wnd, OID_GEN_CURRENT_PACKET_FILTER, &packet_filter); + if (!res) { + if (packet_filter != wnd->packet_filter) + WARNING("wrong packet_filter? 0x%08x, 0x%08x\n", + packet_filter, wnd->packet_filter); + p += sprintf(p, "packet_filter: 0x%08x\n", packet_filter); + } + if (p - page > count) { + WARNING("wrote %lu bytes (limit is %u)", + (unsigned long)(p - page), count); + *eof = 1; + } + + return p - page; +} + +static int procfs_read_ndis_settings(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + char *p = page; + struct ndis_device *wnd = (struct ndis_device *)data; + struct wrap_device_setting *setting; + + if (off != 0) { + *eof = 1; + return 0; + } + + p += sprintf(p, "hangcheck_interval=%d\n", + hangcheck_interval == 0 ? + (int)(wnd->hangcheck_interval / HZ) : -1); + + list_for_each_entry(setting, &wnd->wd->settings, list) { + p += sprintf(p, "%s=%s\n", setting->name, setting->value); + } + + list_for_each_entry(setting, &wnd->wd->driver->settings, list) { + p += sprintf(p, "%s=%s\n", setting->name, setting->value); + } + + return p - page; +} + +static int procfs_write_ndis_settings(struct file *file, const char __user *buf, + unsigned long count, void *data) +{ + struct ndis_device *wnd = (struct ndis_device *)data; + char setting[MAX_PROC_STR_LEN], *p; + unsigned int i; + NDIS_STATUS res; + + if (count > MAX_PROC_STR_LEN) + return -EINVAL; + + memset(setting, 0, sizeof(setting)); + if (copy_from_user(setting, buf, count)) + return -EFAULT; + + if ((p = strchr(setting, '\n'))) + *p = 0; + + if ((p = strchr(setting, '='))) + *p = 0; + + if (!strcmp(setting, "hangcheck_interval")) { + if (!p) + return -EINVAL; + p++; + i = simple_strtol(p, NULL, 10); + hangcheck_del(wnd); + if (i > 0) { + wnd->hangcheck_interval = i * HZ; + hangcheck_add(wnd); + } + } else if (!strcmp(setting, "suspend")) { + if (!p) + return -EINVAL; + p++; + i = simple_strtol(p, NULL, 10); + if (i <= 0 || i > 3) + return -EINVAL; + if (wrap_is_pci_bus(wnd->wd->dev_bus)) + i = wrap_pnp_suspend_pci_device(wnd->wd->pci.pdev, + PMSG_SUSPEND); + else +#ifdef ENABLE_USB + i = wrap_pnp_suspend_usb_device(wnd->wd->usb.intf, + PMSG_SUSPEND); +#else + i = -1; +#endif + if (i) + return -EINVAL; + } else if (!strcmp(setting, "resume")) { + if (wrap_is_pci_bus(wnd->wd->dev_bus)) + i = wrap_pnp_resume_pci_device(wnd->wd->pci.pdev); + else +#ifdef ENABLE_USB + i = wrap_pnp_resume_usb_device(wnd->wd->usb.intf); +#else + i = -1; +#endif + if (i) + return -EINVAL; + } else if (!strcmp(setting, "stats_enabled")) { + if (!p) + return -EINVAL; + p++; + i = simple_strtol(p, NULL, 10); + if (i > 0) + wnd->iw_stats_enabled = TRUE; + else + wnd->iw_stats_enabled = FALSE; + } else if (!strcmp(setting, "packet_filter")) { + if (!p) + return -EINVAL; + p++; + i = simple_strtol(p, NULL, 10); + res = mp_set_int(wnd, OID_GEN_CURRENT_PACKET_FILTER, i); + if (res) + WARNING("setting packet_filter failed: %08X", res); + } else if (!strcmp(setting, "reinit")) { + if (ndis_reinit(wnd) != NDIS_STATUS_SUCCESS) + return -EFAULT; + } else { + struct ndis_configuration_parameter param; + struct unicode_string key; + struct ansi_string ansi; + + if (!p) + return -EINVAL; + p++; + RtlInitAnsiString(&ansi, p); + if (RtlAnsiStringToUnicodeString(¶m.data.string, &ansi, + TRUE) != STATUS_SUCCESS) + EXIT1(return -EFAULT); + param.type = NdisParameterString; + RtlInitAnsiString(&ansi, setting); + if (RtlAnsiStringToUnicodeString(&key, &ansi, + TRUE) != STATUS_SUCCESS) { + RtlFreeUnicodeString(¶m.data.string); + EXIT1(return -EINVAL); + } + NdisWriteConfiguration(&res, wnd->nmb, &key, ¶m); + RtlFreeUnicodeString(&key); + RtlFreeUnicodeString(¶m.data.string); + if (res != NDIS_STATUS_SUCCESS) + return -EFAULT; + } + return count; +} + +int wrap_procfs_add_ndis_device(struct ndis_device *wnd) +{ + struct proc_dir_entry *procfs_entry; + + if (wrap_procfs_entry == NULL) + return -ENOMEM; + + if (wnd->procfs_iface) { + ERROR("%s already registered?", wnd->netdev_name); + return -EINVAL; + } + wnd->procfs_iface = proc_mkdir(wnd->netdev_name, wrap_procfs_entry); + if (wnd->procfs_iface == NULL) { + ERROR("couldn't create proc directory"); + return -ENOMEM; + } + wnd->procfs_iface->uid = proc_uid; + wnd->procfs_iface->gid = proc_gid; + + procfs_entry = create_proc_entry("hw", S_IFREG | S_IRUSR | S_IRGRP, + wnd->procfs_iface); + if (procfs_entry == NULL) { + ERROR("couldn't create proc entry for 'hw'"); + goto err_hw; + } else { + procfs_entry->uid = proc_uid; + procfs_entry->gid = proc_gid; + procfs_entry->data = wnd; + procfs_entry->read_proc = procfs_read_ndis_hw; + } + + procfs_entry = create_proc_entry("stats", S_IFREG | S_IRUSR | S_IRGRP, + wnd->procfs_iface); + if (procfs_entry == NULL) { + ERROR("couldn't create proc entry for 'stats'"); + goto err_stats; + } else { + procfs_entry->uid = proc_uid; + procfs_entry->gid = proc_gid; + procfs_entry->data = wnd; + procfs_entry->read_proc = procfs_read_ndis_stats; + } + + procfs_entry = create_proc_entry("encr", S_IFREG | S_IRUSR | S_IRGRP, + wnd->procfs_iface); + if (procfs_entry == NULL) { + ERROR("couldn't create proc entry for 'encr'"); + goto err_encr; + } else { + procfs_entry->uid = proc_uid; + procfs_entry->gid = proc_gid; + procfs_entry->data = wnd; + procfs_entry->read_proc = procfs_read_ndis_encr; + } + + procfs_entry = create_proc_entry("settings", S_IFREG | + S_IRUSR | S_IRGRP | + S_IWUSR | S_IWGRP, wnd->procfs_iface); + if (procfs_entry == NULL) { + ERROR("couldn't create proc entry for 'settings'"); + goto err_settings; + } else { + procfs_entry->uid = proc_uid; + procfs_entry->gid = proc_gid; + procfs_entry->data = wnd; + procfs_entry->read_proc = procfs_read_ndis_settings; + procfs_entry->write_proc = procfs_write_ndis_settings; + } + return 0; + +err_settings: + remove_proc_entry("encr", wnd->procfs_iface); +err_encr: + remove_proc_entry("stats", wnd->procfs_iface); +err_stats: + remove_proc_entry("hw", wnd->procfs_iface); +err_hw: + remove_proc_entry(wnd->netdev_name, wrap_procfs_entry); + wnd->procfs_iface = NULL; + return -ENOMEM; +} + +void wrap_procfs_remove_ndis_device(struct ndis_device *wnd) +{ + struct proc_dir_entry *procfs_iface = xchg(&wnd->procfs_iface, NULL); + + if (procfs_iface == NULL) + return; + remove_proc_entry("hw", procfs_iface); + remove_proc_entry("stats", procfs_iface); + remove_proc_entry("encr", procfs_iface); + remove_proc_entry("settings", procfs_iface); + if (wrap_procfs_entry) + remove_proc_entry(wnd->netdev_name, wrap_procfs_entry); +} + +static int procfs_read_debug(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + char *p = page; + enum alloc_type type; + + if (off != 0) { + *eof = 1; + return 0; + } + p += sprintf(p, "%d\n", debug); + type = 0; +#ifdef ALLOC_DEBUG + for (type = 0; type < ALLOC_TYPE_MAX; type++) + p += sprintf(p, "total size of allocations in %d: %d\n", + type, alloc_size(type)); +#endif + return p - page; +} + +static int procfs_write_debug(struct file *file, const char __user *buf, + unsigned long count, void *data) +{ + int i; + char setting[MAX_PROC_STR_LEN], *p; + + if (count > MAX_PROC_STR_LEN) + return -EINVAL; + + memset(setting, 0, sizeof(setting)); + if (copy_from_user(setting, buf, count)) + return -EFAULT; + + if ((p = strchr(setting, '\n'))) + *p = 0; + + if ((p = strchr(setting, '='))) + *p = 0; + + i = simple_strtol(setting, NULL, 10); + if (i >= 0 && i < 10) + debug = i; + else + return -EINVAL; + return count; +} + +int wrap_procfs_init(void) +{ + struct proc_dir_entry *procfs_entry; + + wrap_procfs_entry = proc_mkdir(DRIVER_NAME, proc_net_root); + if (wrap_procfs_entry == NULL) { + ERROR("couldn't create procfs directory"); + return -ENOMEM; + } + wrap_procfs_entry->uid = proc_uid; + wrap_procfs_entry->gid = proc_gid; + + procfs_entry = create_proc_entry("debug", S_IFREG | S_IRUSR | S_IRGRP, + wrap_procfs_entry); + if (procfs_entry == NULL) { + ERROR("couldn't create proc entry for 'debug'"); + return -ENOMEM; + } else { + procfs_entry->uid = proc_uid; + procfs_entry->gid = proc_gid; + procfs_entry->read_proc = procfs_read_debug; + procfs_entry->write_proc = procfs_write_debug; + } + return 0; +} + +void wrap_procfs_remove(void) +{ + if (wrap_procfs_entry == NULL) + return; + remove_proc_entry("debug", wrap_procfs_entry); + remove_proc_entry(DRIVER_NAME, proc_net_root); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/usb.c +++ linux-2.6.32/ubuntu/ndiswrapper/usb.c @@ -0,0 +1,1457 @@ +/* + * Copyright (C) 2004 Jan Kiszka + * Copyright (C) 2005 Giridhar Pemmasani + * + * 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. + * + */ + +#include "ndis.h" +#include "usb.h" +#include "usb_exports.h" + +#ifdef USB_DEBUG +static unsigned int urb_id = 0; + +#define DUMP_WRAP_URB(wrap_urb, dir) \ + USBTRACE("urb %p (%d) %s: buf: %p, len: %d, pipe: 0x%x, %d", \ + (wrap_urb)->urb, (wrap_urb)->id, \ + (dir == USB_DIR_OUT) ? "going down" : "coming back", \ + (wrap_urb)->urb->transfer_buffer, \ + (wrap_urb)->urb->transfer_buffer_length, \ + (wrap_urb)->urb->pipe, (wrap_urb)->urb->status) + +#define DUMP_URB_BUFFER(urb, dir) \ + while (debug >= 2) { \ + int i; \ + char msg[20], *t; \ + if (!urb->transfer_buffer) \ + break; \ + if (!((usb_pipein(urb->pipe) && dir == USB_DIR_IN) || \ + (usb_pipeout(urb->pipe) && dir == USB_DIR_OUT))) \ + break; \ + t = msg; \ + t += sprintf(t, "%d: ", (urb)->actual_length); \ + for (i = 0; i < urb->actual_length && \ + t < &msg[sizeof(msg) - 4]; i++) \ + t += sprintf(t, "%02X ", \ + ((char *)urb->transfer_buffer)[i]); \ + *t = 0; \ + USBTRACE("%s", msg); \ + break; \ + } + +#else + +#define DUMP_WRAP_URB(wrap_urb, dir) (void)0 +#define DUMP_URB_BUFFER(urb, dir) (void)0 + +#endif + +#define CUR_ALT_SETTING(intf) (intf)->cur_altsetting + +#ifndef USB_CTRL_SET_TIMEOUT +#define USB_CTRL_SET_TIMEOUT 5000 +#endif + +#ifndef USB_CTRL_GET_TIMEOUT +#define USB_CTRL_GET_TIMEOUT 5000 +#endif + +#ifndef URB_NO_TRANSFER_DMA_MAP +#define URB_NO_TRANSFER_DMA_MAP 0 +#endif + +/* wrap_urb->flags */ +/* transfer_buffer for urb is allocated; free it in wrap_free_urb */ +#define WRAP_URB_COPY_BUFFER 0x01 + +static int inline wrap_cancel_urb(struct wrap_urb *wrap_urb) +{ + int ret; + USBTRACE("%p, %p, %d", wrap_urb, wrap_urb->urb, wrap_urb->state); + if (wrap_urb->state != URB_SUBMITTED) + USBEXIT(return -1); + ret = usb_unlink_urb(wrap_urb->urb); + USBTRACE("ret: %d", ret); + if (ret == -EINPROGRESS) + return 0; + else { + WARNING("unlink failed: %d", ret); + return ret; + } +} + +#define URB_STATUS(wrap_urb) (wrap_urb->urb->status) + +static struct nt_list wrap_urb_complete_list; +static spinlock_t wrap_urb_complete_list_lock; + +static work_struct_t wrap_urb_complete_work; +static void wrap_urb_complete_worker(worker_param_t dummy); + +static void kill_all_urbs(struct wrap_device *wd, int complete) +{ + struct nt_list *ent; + struct wrap_urb *wrap_urb; + KIRQL irql; + + USBTRACE("%d", wd->usb.num_alloc_urbs); + while (1) { + IoAcquireCancelSpinLock(&irql); + ent = RemoveHeadList(&wd->usb.wrap_urb_list); + IoReleaseCancelSpinLock(irql); + if (!ent) + break; + wrap_urb = container_of(ent, struct wrap_urb, list); + if (wrap_urb->state == URB_SUBMITTED) { + WARNING("Windows driver %s didn't free urb: %p", + wd->driver->name, wrap_urb->urb); + if (!complete) + wrap_urb->urb->complete = NULL; + usb_kill_urb(wrap_urb->urb); + } + USBTRACE("%p, %p", wrap_urb, wrap_urb->urb); + usb_free_urb(wrap_urb->urb); + kfree(wrap_urb); + } + wd->usb.num_alloc_urbs = 0; +} + +/* for a given Linux urb status code, return corresponding NT urb status */ +static USBD_STATUS wrap_urb_status(int urb_status) +{ + switch (urb_status) { + case 0: + return USBD_STATUS_SUCCESS; + case -EPROTO: + return USBD_STATUS_TIMEOUT; + case -EILSEQ: + return USBD_STATUS_CRC; + case -EPIPE: + return USBD_STATUS_INVALID_PIPE_HANDLE; + case -ECOMM: + return USBD_STATUS_DATA_OVERRUN; + case -ENOSR: + return USBD_STATUS_DATA_UNDERRUN; + case -EOVERFLOW: + return USBD_STATUS_BABBLE_DETECTED; + case -EREMOTEIO: + return USBD_STATUS_ERROR_SHORT_TRANSFER;; + case -ENODEV: + case -ESHUTDOWN: + case -ENOENT: + return USBD_STATUS_DEVICE_GONE; + case -ENOMEM: + return USBD_STATUS_NO_MEMORY; + case -EINVAL: + return USBD_STATUS_REQUEST_FAILED; + default: + return USBD_STATUS_NOT_SUPPORTED; + } +} + +/* for a given USBD_STATUS, return its corresponding NTSTATUS (for irp) */ +static NTSTATUS nt_urb_irp_status(USBD_STATUS nt_urb_status) +{ + switch (nt_urb_status) { + case USBD_STATUS_SUCCESS: + return STATUS_SUCCESS; + case USBD_STATUS_DEVICE_GONE: + return STATUS_DEVICE_REMOVED; + case USBD_STATUS_PENDING: + return STATUS_PENDING; + case USBD_STATUS_NOT_SUPPORTED: + return STATUS_NOT_IMPLEMENTED; + case USBD_STATUS_NO_MEMORY: + return STATUS_NO_MEMORY; + case USBD_STATUS_REQUEST_FAILED: + return STATUS_NOT_SUPPORTED; + default: + return STATUS_FAILURE; + } +} + +static void wrap_free_urb(struct urb *urb) +{ + struct irp *irp; + struct wrap_urb *wrap_urb; + + USBTRACE("freeing urb: %p", urb); + wrap_urb = urb->context; + irp = wrap_urb->irp; + if (wrap_urb->flags & WRAP_URB_COPY_BUFFER) { + USBTRACE("freeing DMA buffer for URB: %p %p", + urb, urb->transfer_buffer); + usb_buffer_free(IRP_WRAP_DEVICE(irp)->usb.udev, + urb->transfer_buffer_length, + urb->transfer_buffer, urb->transfer_dma); + } + if (urb->setup_packet) + kfree(urb->setup_packet); + if (IRP_WRAP_DEVICE(irp)->usb.num_alloc_urbs > MAX_ALLOCATED_URBS) { + IoAcquireCancelSpinLock(&irp->cancel_irql); + RemoveEntryList(&wrap_urb->list); + IRP_WRAP_DEVICE(irp)->usb.num_alloc_urbs--; + IoReleaseCancelSpinLock(irp->cancel_irql); + usb_free_urb(urb); + kfree(wrap_urb); + } else { + wrap_urb->state = URB_FREE; + wrap_urb->flags = 0; + wrap_urb->irp = NULL; + } + return; +} + +void wrap_suspend_urbs(struct wrap_device *wd) +{ + /* TODO: do we need to cancel urbs? */ + USBTRACE("%p, %d", wd, wd->usb.num_alloc_urbs); +} + +void wrap_resume_urbs(struct wrap_device *wd) +{ + /* TODO: do we need to resubmit urbs? */ + USBTRACE("%p, %d", wd, wd->usb.num_alloc_urbs); +} + +wstdcall void wrap_cancel_irp(struct device_object *dev_obj, struct irp *irp) +{ + struct urb *urb; + + /* NB: this function is called holding Cancel spinlock */ + USBENTER("irp: %p", irp); + urb = IRP_WRAP_URB(irp)->urb; + USBTRACE("canceling urb %p", urb); + if (wrap_cancel_urb(IRP_WRAP_URB(irp))) { + irp->cancel = FALSE; + ERROR("urb %p can't be canceld: %d", urb, + IRP_WRAP_URB(irp)->state); + } else + USBTRACE("urb %p canceled", urb); + IoReleaseCancelSpinLock(irp->cancel_irql); + return; +} +WIN_FUNC_DECL(wrap_cancel_irp,2) + +static struct urb *wrap_alloc_urb(struct irp *irp, unsigned int pipe, + void *buf, unsigned int buf_len) +{ + struct urb *urb; + gfp_t alloc_flags; + struct wrap_urb *wrap_urb; + struct wrap_device *wd; + + USBENTER("irp: %p", irp); + wd = IRP_WRAP_DEVICE(irp); + alloc_flags = irql_gfp(); + IoAcquireCancelSpinLock(&irp->cancel_irql); + urb = NULL; + nt_list_for_each_entry(wrap_urb, &wd->usb.wrap_urb_list, list) { + if (cmpxchg(&wrap_urb->state, URB_FREE, + URB_ALLOCATED) == URB_FREE) { + urb = wrap_urb->urb; + usb_init_urb(urb); + break; + } + } + if (!urb) { + IoReleaseCancelSpinLock(irp->cancel_irql); + wrap_urb = kzalloc(sizeof(*wrap_urb), alloc_flags); + if (!wrap_urb) { + WARNING("couldn't allocate memory"); + return NULL; + } + urb = usb_alloc_urb(0, alloc_flags); + if (!urb) { + WARNING("couldn't allocate urb"); + kfree(wrap_urb); + return NULL; + } + IoAcquireCancelSpinLock(&irp->cancel_irql); + wrap_urb->urb = urb; + wrap_urb->state = URB_ALLOCATED; + InsertTailList(&wd->usb.wrap_urb_list, &wrap_urb->list); + wd->usb.num_alloc_urbs++; + } + +#ifdef URB_ASYNC_UNLINK + urb->transfer_flags |= URB_ASYNC_UNLINK; +#elif defined(USB_ASYNC_UNLINK) + urb->transfer_flags |= USB_ASYNC_UNLINK; +#endif + urb->context = wrap_urb; + wrap_urb->irp = irp; + IRP_WRAP_URB(irp) = wrap_urb; + /* called as Windows function */ + irp->cancel_routine = WIN_FUNC_PTR(wrap_cancel_irp,2); + IoReleaseCancelSpinLock(irp->cancel_irql); + USBTRACE("urb: %p", urb); + + urb->transfer_buffer_length = buf_len; + if (buf_len && buf && (!virt_addr_valid(buf) +#if defined(CONFIG_HIGHMEM) || defined(CONFIG_HIGHMEM4G) + || PageHighMem(virt_to_page(buf)) +#endif + )) { + urb->transfer_buffer = + usb_buffer_alloc(wd->usb.udev, buf_len, alloc_flags, + &urb->transfer_dma); + if (!urb->transfer_buffer) { + WARNING("couldn't allocate dma buf"); + IoAcquireCancelSpinLock(&irp->cancel_irql); + wrap_urb->state = URB_FREE; + wrap_urb->irp = NULL; + IRP_WRAP_URB(irp) = NULL; + IoReleaseCancelSpinLock(irp->cancel_irql); + return NULL; + } + if (urb->transfer_dma) + urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + wrap_urb->flags |= WRAP_URB_COPY_BUFFER; + if (usb_pipeout(pipe)) + memcpy(urb->transfer_buffer, buf, buf_len); + USBTRACE("DMA buf for urb %p: %p", urb, urb->transfer_buffer); + } else + urb->transfer_buffer = buf; + return urb; +} + +static USBD_STATUS wrap_submit_urb(struct irp *irp) +{ + int ret; + struct urb *urb; + union nt_urb *nt_urb; + + urb = IRP_WRAP_URB(irp)->urb; + nt_urb = IRP_URB(irp); +#ifdef USB_DEBUG + if (IRP_WRAP_URB(irp)->state != URB_ALLOCATED) { + ERROR("urb %p is in wrong state: %d", + urb, IRP_WRAP_URB(irp)->state); + NT_URB_STATUS(nt_urb) = USBD_STATUS_REQUEST_FAILED; + return NT_URB_STATUS(nt_urb); + } + IRP_WRAP_URB(irp)->id = pre_atomic_add(urb_id, 1); +#endif + DUMP_WRAP_URB(IRP_WRAP_URB(irp), USB_DIR_OUT); + irp->io_status.status = STATUS_PENDING; + irp->io_status.info = 0; + NT_URB_STATUS(nt_urb) = USBD_STATUS_PENDING; + IoMarkIrpPending(irp); + DUMP_URB_BUFFER(urb, USB_DIR_OUT); + USBTRACE("%p", urb); + IRP_WRAP_URB(irp)->state = URB_SUBMITTED; + ret = usb_submit_urb(urb, irql_gfp()); + if (ret) { + USBTRACE("ret: %d", ret); + wrap_free_urb(urb); + /* we assume that IRP was not in pending state before */ + IoUnmarkIrpPending(irp); + NT_URB_STATUS(nt_urb) = wrap_urb_status(ret); + USBEXIT(return NT_URB_STATUS(nt_urb)); + } else + USBEXIT(return USBD_STATUS_PENDING); +} + +static void wrap_urb_complete(struct urb *urb ISR_PT_REGS_PARAM_DECL) +{ + struct irp *irp; + struct wrap_urb *wrap_urb; + + wrap_urb = urb->context; + USBTRACE("%p (%p) completed", wrap_urb, urb); + irp = wrap_urb->irp; + DUMP_WRAP_URB(wrap_urb, USB_DIR_IN); + irp->cancel_routine = NULL; +#ifdef USB_DEBUG + if (wrap_urb->state != URB_SUBMITTED) { + WARNING("urb %p in wrong state: %d (%d)", urb, wrap_urb->state, + urb->status); + return; + } +#endif + wrap_urb->state = URB_COMPLETED; + spin_lock(&wrap_urb_complete_list_lock); + InsertTailList(&wrap_urb_complete_list, &wrap_urb->complete_list); + spin_unlock(&wrap_urb_complete_list_lock); + schedule_ntos_work(&wrap_urb_complete_work); +} + +/* one worker for all devices */ +static void wrap_urb_complete_worker(worker_param_t dummy) +{ + struct irp *irp; + struct urb *urb; + struct usbd_bulk_or_intr_transfer *bulk_int_tx; + struct usbd_vendor_or_class_request *vc_req; + union nt_urb *nt_urb; + struct wrap_urb *wrap_urb; + struct nt_list *ent; + unsigned long flags; + + USBENTER(""); + while (1) { + spin_lock_irqsave(&wrap_urb_complete_list_lock, flags); + ent = RemoveHeadList(&wrap_urb_complete_list); + spin_unlock_irqrestore(&wrap_urb_complete_list_lock, flags); + if (!ent) + break; + wrap_urb = container_of(ent, struct wrap_urb, complete_list); + urb = wrap_urb->urb; +#ifdef USB_DEBUG + if (wrap_urb->state != URB_COMPLETED && + wrap_urb->state != URB_INT_UNLINKED) + WARNING("urb %p in wrong state: %d", + urb, wrap_urb->state); +#endif + irp = wrap_urb->irp; + DUMP_IRP(irp); + nt_urb = IRP_URB(irp); + USBTRACE("urb: %p, nt_urb: %p, status: %d", + urb, nt_urb, urb->status); + switch (urb->status) { + case 0: + /* succesfully transferred */ + irp->io_status.info = urb->actual_length; + if (nt_urb->header.function == + URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER) { + bulk_int_tx = &nt_urb->bulk_int_transfer; + bulk_int_tx->transfer_buffer_length = + urb->actual_length; + DUMP_URB_BUFFER(urb, USB_DIR_IN); + if ((wrap_urb->flags & WRAP_URB_COPY_BUFFER) && + usb_pipein(urb->pipe)) + memcpy(bulk_int_tx->transfer_buffer, + urb->transfer_buffer, + urb->actual_length); + } else { // vendor or class request + vc_req = &nt_urb->vendor_class_request; + vc_req->transfer_buffer_length = + urb->actual_length; + DUMP_URB_BUFFER(urb, USB_DIR_IN); + if ((wrap_urb->flags & WRAP_URB_COPY_BUFFER) && + usb_pipein(urb->pipe)) + memcpy(vc_req->transfer_buffer, + urb->transfer_buffer, + urb->actual_length); + } + NT_URB_STATUS(nt_urb) = USBD_STATUS_SUCCESS; + irp->io_status.status = STATUS_SUCCESS; + break; + case -ENOENT: + case -ECONNRESET: + /* urb canceled */ + irp->io_status.info = 0; + TRACE2("urb %p canceled", urb); + NT_URB_STATUS(nt_urb) = USBD_STATUS_SUCCESS; + irp->io_status.status = STATUS_CANCELLED; + break; + default: + TRACE2("irp: %p, urb: %p, status: %d/%d", + irp, urb, urb->status, wrap_urb->state); + irp->io_status.info = 0; + NT_URB_STATUS(nt_urb) = wrap_urb_status(urb->status); + irp->io_status.status = + nt_urb_irp_status(NT_URB_STATUS(nt_urb)); + break; + } + wrap_free_urb(urb); + IoCompleteRequest(irp, IO_NO_INCREMENT); + } + USBEXIT(return); +} + +static USBD_STATUS wrap_bulk_or_intr_trans(struct irp *irp) +{ + usbd_pipe_handle pipe_handle; + struct urb *urb; + unsigned int pipe; + struct usbd_bulk_or_intr_transfer *bulk_int_tx; + USBD_STATUS status; + struct usb_device *udev; + union nt_urb *nt_urb; + + nt_urb = IRP_URB(irp); + udev = IRP_WRAP_DEVICE(irp)->usb.udev; + bulk_int_tx = &nt_urb->bulk_int_transfer; + pipe_handle = bulk_int_tx->pipe_handle; + USBTRACE("flags: 0x%x, length: %u, buffer: %p, handle: %p", + bulk_int_tx->transfer_flags, + bulk_int_tx->transfer_buffer_length, + bulk_int_tx->transfer_buffer, pipe_handle); + + if (USBD_IS_BULK_PIPE(pipe_handle)) { + if (bulk_int_tx->transfer_flags & USBD_TRANSFER_DIRECTION_IN) + pipe = usb_rcvbulkpipe(udev, + pipe_handle->bEndpointAddress); + else + pipe = usb_sndbulkpipe(udev, + pipe_handle->bEndpointAddress); + } else { + if (bulk_int_tx->transfer_flags & USBD_TRANSFER_DIRECTION_IN) + pipe = usb_rcvintpipe(udev, + pipe_handle->bEndpointAddress); + else + pipe = usb_sndintpipe(udev, + pipe_handle->bEndpointAddress); + } + + DUMP_IRP(irp); + urb = wrap_alloc_urb(irp, pipe, bulk_int_tx->transfer_buffer, + bulk_int_tx->transfer_buffer_length); + if (!urb) { + ERROR("couldn't allocate urb"); + return USBD_STATUS_NO_MEMORY; + } + if (usb_pipein(pipe) && + (!(bulk_int_tx->transfer_flags & USBD_SHORT_TRANSFER_OK))) { + USBTRACE("short not ok"); + urb->transfer_flags |= URB_SHORT_NOT_OK; + } + if (usb_pipebulk(pipe)) { + usb_fill_bulk_urb(urb, udev, pipe, urb->transfer_buffer, + bulk_int_tx->transfer_buffer_length, + wrap_urb_complete, urb->context); + USBTRACE("submitting bulk urb %p on pipe 0x%x (ep 0x%x)", + urb, urb->pipe, pipe_handle->bEndpointAddress); + } else { + usb_fill_int_urb(urb, udev, pipe, urb->transfer_buffer, + bulk_int_tx->transfer_buffer_length, + wrap_urb_complete, urb->context, + pipe_handle->bInterval); + USBTRACE("submitting interrupt urb %p on pipe 0x%x (ep 0x%x), " + "intvl: %d", urb, urb->pipe, + pipe_handle->bEndpointAddress, pipe_handle->bInterval); + } + status = wrap_submit_urb(irp); + USBTRACE("status: %08X", status); + USBEXIT(return status); +} + +static USBD_STATUS wrap_vendor_or_class_req(struct irp *irp) +{ + u8 req_type; + unsigned int pipe; + struct usbd_vendor_or_class_request *vc_req; + struct usb_device *udev; + union nt_urb *nt_urb; + USBD_STATUS status; + struct urb *urb; + struct usb_ctrlrequest *dr; + + nt_urb = IRP_URB(irp); + udev = IRP_WRAP_DEVICE(irp)->usb.udev; + vc_req = &nt_urb->vendor_class_request; + USBTRACE("bits: %x, req: %x, val: %08x, index: %08x, flags: %x," + "buf: %p, len: %d", vc_req->reserved_bits, vc_req->request, + vc_req->value, vc_req->index, vc_req->transfer_flags, + vc_req->transfer_buffer, vc_req->transfer_buffer_length); + + USBTRACE("%x", nt_urb->header.function); + switch (nt_urb->header.function) { + case URB_FUNCTION_VENDOR_DEVICE: + req_type = USB_TYPE_VENDOR | USB_RECIP_DEVICE; + break; + case URB_FUNCTION_VENDOR_INTERFACE: + req_type = USB_TYPE_VENDOR | USB_RECIP_INTERFACE; + break; + case URB_FUNCTION_VENDOR_ENDPOINT: + req_type = USB_TYPE_VENDOR | USB_RECIP_ENDPOINT; + break; + case URB_FUNCTION_VENDOR_OTHER: + req_type = USB_TYPE_VENDOR | USB_RECIP_OTHER; + break; + case URB_FUNCTION_CLASS_DEVICE: + req_type = USB_TYPE_CLASS | USB_RECIP_DEVICE; + break; + case URB_FUNCTION_CLASS_INTERFACE: + req_type = USB_TYPE_CLASS | USB_RECIP_INTERFACE; + break; + case URB_FUNCTION_CLASS_ENDPOINT: + req_type = USB_TYPE_CLASS | USB_RECIP_ENDPOINT; + break; + case URB_FUNCTION_CLASS_OTHER: + req_type = USB_TYPE_CLASS | USB_RECIP_OTHER; + break; + default: + ERROR("unknown request type: %x", nt_urb->header.function); + req_type = 0; + break; + } + + req_type |= vc_req->reserved_bits; + USBTRACE("req type: %08x", req_type); + + if (vc_req->transfer_flags & USBD_TRANSFER_DIRECTION_IN) { + pipe = usb_rcvctrlpipe(udev, 0); + req_type |= USB_DIR_IN; + USBTRACE("pipe: %x, dir in", pipe); + } else { + pipe = usb_sndctrlpipe(udev, 0); + req_type |= USB_DIR_OUT; + USBTRACE("pipe: %x, dir out", pipe); + } + urb = wrap_alloc_urb(irp, pipe, vc_req->transfer_buffer, + vc_req->transfer_buffer_length); + if (!urb) { + ERROR("couldn't allocate urb"); + return USBD_STATUS_NO_MEMORY; + } + + if (usb_pipein(pipe) && + (!(vc_req->transfer_flags & USBD_SHORT_TRANSFER_OK))) { + USBTRACE("short not ok"); + urb->transfer_flags |= URB_SHORT_NOT_OK; + } + + dr = kzalloc(sizeof(*dr), GFP_ATOMIC); + if (!dr) { + ERROR("couldn't allocate memory"); + wrap_free_urb(urb); + return USBD_STATUS_NO_MEMORY; + } + dr->bRequestType = req_type; + dr->bRequest = vc_req->request; + dr->wValue = cpu_to_le16(vc_req->value); + dr->wIndex = cpu_to_le16((u16)vc_req->index); + dr->wLength = cpu_to_le16((u16)urb->transfer_buffer_length); + + usb_fill_control_urb(urb, udev, pipe, (unsigned char *)dr, + urb->transfer_buffer, urb->transfer_buffer_length, + wrap_urb_complete, urb->context); + status = wrap_submit_urb(irp); + USBTRACE("status: %08X", status); + USBEXIT(return status); +} + +static USBD_STATUS wrap_reset_pipe(struct usb_device *udev, struct irp *irp) +{ + int ret; + union nt_urb *nt_urb; + usbd_pipe_handle pipe_handle; + unsigned int pipe1, pipe2; + + nt_urb = IRP_URB(irp); + pipe_handle = nt_urb->pipe_req.pipe_handle; + /* TODO: not clear if both directions should be cleared? */ + if (USBD_IS_BULK_PIPE(pipe_handle)) { + pipe1 = usb_rcvbulkpipe(udev, pipe_handle->bEndpointAddress); + pipe2 = usb_sndbulkpipe(udev, pipe_handle->bEndpointAddress); + } else if (USBD_IS_INT_PIPE(pipe_handle)) { + pipe1 = usb_rcvintpipe(udev, pipe_handle->bEndpointAddress); + pipe2 = pipe1; + } else { + WARNING("invalid pipe %d", pipe_handle->bEndpointAddress); + return USBD_STATUS_INVALID_PIPE_HANDLE; + } + USBTRACE("ep: %d, pipe: 0x%x", pipe_handle->bEndpointAddress, pipe1); + ret = usb_clear_halt(udev, pipe1); + if (ret) + USBTRACE("resetting pipe %d failed: %d", pipe1, ret); + if (pipe2 != pipe1) { + ret = usb_clear_halt(udev, pipe2); + if (ret) + USBTRACE("resetting pipe %d failed: %d", pipe2, ret); + } +// return wrap_urb_status(ret); + return USBD_STATUS_SUCCESS; +} + +static USBD_STATUS wrap_abort_pipe(struct usb_device *udev, struct irp *irp) +{ + union nt_urb *nt_urb; + usbd_pipe_handle pipe_handle; + struct wrap_urb *wrap_urb; + struct wrap_device *wd; + KIRQL irql; + + wd = IRP_WRAP_DEVICE(irp); + nt_urb = IRP_URB(irp); + pipe_handle = nt_urb->pipe_req.pipe_handle; + USBENTER("%p, %x", irp, pipe_handle->bEndpointAddress); + IoAcquireCancelSpinLock(&irql); + nt_list_for_each_entry(wrap_urb, &wd->usb.wrap_urb_list, list) { + USBTRACE("%p, %p, %d, %x, %x", wrap_urb, wrap_urb->urb, + wrap_urb->state, wrap_urb->urb->pipe, + usb_pipeendpoint(wrap_urb->urb->pipe)); + /* for WG111T driver, urbs for endpoint 0 should also + * be canceled */ + if ((usb_pipeendpoint(wrap_urb->urb->pipe) == + pipe_handle->bEndpointAddress) || + (usb_pipeendpoint(wrap_urb->urb->pipe) == 0)) { + if (wrap_cancel_urb(wrap_urb) == 0) + USBTRACE("canceled wrap_urb: %p", wrap_urb); + } + } + IoReleaseCancelSpinLock(irql); + NT_URB_STATUS(nt_urb) = USBD_STATUS_CANCELED; + USBEXIT(return USBD_STATUS_SUCCESS); +} + +static USBD_STATUS wrap_set_clear_feature(struct usb_device *udev, + struct irp *irp) +{ + union nt_urb *nt_urb; + struct urb_control_feature_request *feat_req; + int ret = 0; + __u8 request, type; + __u16 feature; + + nt_urb = IRP_URB(irp); + feat_req = &nt_urb->feat_req; + feature = feat_req->feature_selector; + switch (nt_urb->header.function) { + case URB_FUNCTION_SET_FEATURE_TO_DEVICE: + request = USB_REQ_SET_FEATURE; + type = USB_DT_DEVICE; + break; + case URB_FUNCTION_SET_FEATURE_TO_INTERFACE: + request = USB_REQ_SET_FEATURE; + type = USB_DT_INTERFACE; + break; + case URB_FUNCTION_SET_FEATURE_TO_ENDPOINT: + request = USB_REQ_SET_FEATURE; + type = USB_DT_ENDPOINT; + break; + case URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE: + request = USB_REQ_CLEAR_FEATURE; + type = USB_DT_DEVICE; + break; + case URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE: + request = USB_REQ_CLEAR_FEATURE; + type = USB_DT_INTERFACE; + break; + case URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT: + request = USB_REQ_CLEAR_FEATURE; + type = USB_DT_ENDPOINT; + break; + default: + WARNING("invalid function: %x", nt_urb->header.function); + NT_URB_STATUS(nt_urb) = USBD_STATUS_NOT_SUPPORTED; + return NT_URB_STATUS(nt_urb); + } + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), request, type, + feature, feat_req->index, NULL, 0, 1000); + NT_URB_STATUS(nt_urb) = wrap_urb_status(ret); + USBEXIT(return NT_URB_STATUS(nt_urb)); +} + +static USBD_STATUS wrap_get_status_request(struct usb_device *udev, + struct irp *irp) +{ + union nt_urb *nt_urb; + struct urb_control_get_status_request *status_req; + int ret = 0; + __u8 type; + + nt_urb = IRP_URB(irp); + status_req = &nt_urb->status_req; + switch (nt_urb->header.function) { + case URB_FUNCTION_GET_STATUS_FROM_DEVICE: + type = USB_RECIP_DEVICE; + break; + case URB_FUNCTION_GET_STATUS_FROM_INTERFACE: + type = USB_RECIP_INTERFACE; + break; + case URB_FUNCTION_GET_STATUS_FROM_ENDPOINT: + type = USB_RECIP_ENDPOINT; + break; + default: + WARNING("invalid function: %x", nt_urb->header.function); + NT_URB_STATUS(nt_urb) = USBD_STATUS_NOT_SUPPORTED; + return NT_URB_STATUS(nt_urb); + } + assert(status_req->transfer_buffer_length == sizeof(u16)); + ret = usb_get_status(udev, type, status_req->index, + status_req->transfer_buffer); + if (ret >= 0) { + assert(ret <= status_req->transfer_buffer_length); + status_req->transfer_buffer_length = ret; + NT_URB_STATUS(nt_urb) = USBD_STATUS_SUCCESS; + } else + NT_URB_STATUS(nt_urb) = wrap_urb_status(ret); + USBEXIT(return NT_URB_STATUS(nt_urb)); +} + +static void set_intf_pipe_info(struct wrap_device *wd, + struct usb_interface *usb_intf, + struct usbd_interface_information *intf) +{ + int i; + struct usb_endpoint_descriptor *ep; + struct usbd_pipe_information *pipe; + + for (i = 0; i < CUR_ALT_SETTING(usb_intf)->desc.bNumEndpoints; i++) { + ep = &(CUR_ALT_SETTING(usb_intf)->endpoint[i]).desc; + if (i >= intf->bNumEndpoints) { + ERROR("intf %p has only %d endpoints, " + "ignoring endpoints above %d", + intf, intf->bNumEndpoints, i); + break; + } + pipe = &intf->pipes[i]; + + if (pipe->flags & USBD_PF_CHANGE_MAX_PACKET) + USBTRACE("pkt_sz: %d: %d", pipe->wMaxPacketSize, + pipe->max_tx_size); + USBTRACE("driver wants max_tx_size to %d", + pipe->max_tx_size); + + pipe->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize); + pipe->bEndpointAddress = ep->bEndpointAddress; + pipe->type = ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; + if (pipe->type == UsbdPipeTypeInterrupt) { + /* Windows and Linux differ in how the + * bInterval is interpretted */ + /* for low speed: + interval (Windows) -> frames per ms (Linux) + 0 to 15 -> 8 + 16 to 35 -> 16 + 36 to 255 -> 32 + + for full speed: interval -> frames per ms + 1 -> 1 + 2 to 3 -> 2 + 4 to 7 -> 4 + 8 to 15 -> 8 + 16 to 31 -> 16 + 32 to 255 -> 32 + + for high speed: interval -> microframes + 1 -> 1 + 2 -> 2 + 3 -> 4 + 4 -> 8 + 5 -> 16 + 6 -> 32 + 7 to 255 -> 32 + */ + if (wd->usb.udev->speed == USB_SPEED_LOW) + pipe->bInterval = ep->bInterval + 5; + else if (wd->usb.udev->speed == USB_SPEED_FULL) + pipe->bInterval = ep->bInterval; + else { + int j, k; + for (j = k = 1; j < ep->bInterval; k++) + j *= 2; + pipe->bInterval = k; + } + } + pipe->handle = ep; + USBTRACE("%d: ep 0x%x, type %d, pkt_sz %d, intv %d (%d)," + "type: %d, handle %p", i, ep->bEndpointAddress, + ep->bmAttributes, pipe->wMaxPacketSize, ep->bInterval, + pipe->bInterval, pipe->type, pipe->handle); + } +} + +static USBD_STATUS wrap_select_configuration(struct wrap_device *wd, + union nt_urb *nt_urb, + struct irp *irp) +{ + int i, ret; + struct usbd_select_configuration *sel_conf; + struct usb_device *udev; + struct usbd_interface_information *intf; + struct usb_config_descriptor *config; + struct usb_interface *usb_intf; + + udev = wd->usb.udev; + sel_conf = &nt_urb->select_conf; + config = sel_conf->config; + USBTRACE("%p", config); + if (config == NULL) { + kill_all_urbs(wd, 1); + ret = usb_reset_configuration(udev); + return wrap_urb_status(ret); + } + + USBTRACE("conf: %d, type: %d, length: %d, numif: %d, attr: %08x", + config->bConfigurationValue, config->bDescriptorType, + config->wTotalLength, config->bNumInterfaces, + config->bmAttributes); + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + USB_REQ_SET_CONFIGURATION, 0, + config->bConfigurationValue, 0, + NULL, 0, USB_CTRL_SET_TIMEOUT); + if (ret < 0) { + ERROR("ret: %d", ret); + return wrap_urb_status(ret); + } + sel_conf->handle = udev->actconfig; + intf = &sel_conf->intf; + for (i = 0; i < config->bNumInterfaces && intf->bLength > 0; + i++, intf = (((void *)intf) + intf->bLength)) { + + USBTRACE("intf: %d, alt setting: %d", + intf->bInterfaceNumber, intf->bAlternateSetting); + ret = usb_set_interface(udev, intf->bInterfaceNumber, + intf->bAlternateSetting); + if (ret < 0) { + ERROR("failed with %d", ret); + return wrap_urb_status(ret); + } + usb_intf = usb_ifnum_to_if(udev, intf->bInterfaceNumber); + if (!usb_intf) { + ERROR("couldn't obtain ifnum"); + return USBD_STATUS_REQUEST_FAILED; + } + USBTRACE("intf: %p, num ep: %d", intf, intf->bNumEndpoints); + set_intf_pipe_info(wd, usb_intf, intf); + } + return USBD_STATUS_SUCCESS; +} + +static USBD_STATUS wrap_select_interface(struct wrap_device *wd, + union nt_urb *nt_urb, + struct irp *irp) +{ + int ret; + struct usbd_select_interface *sel_intf; + struct usb_device *udev; + struct usbd_interface_information *intf; + struct usb_interface *usb_intf; + + udev = wd->usb.udev; + sel_intf = &nt_urb->select_intf; + intf = &sel_intf->intf; + + ret = usb_set_interface(udev, intf->bInterfaceNumber, + intf->bAlternateSetting); + if (ret < 0) { + ERROR("failed with %d", ret); + return wrap_urb_status(ret); + } + usb_intf = usb_ifnum_to_if(udev, intf->bInterfaceNumber); + if (!usb_intf) { + ERROR("couldn't get interface information"); + return USBD_STATUS_REQUEST_FAILED; + } + USBTRACE("intf: %p, num ep: %d", usb_intf, intf->bNumEndpoints); + set_intf_pipe_info(wd, usb_intf, intf); + return USBD_STATUS_SUCCESS; +} + +static int wrap_usb_get_string(struct usb_device *udev, unsigned short langid, + unsigned char index, void *buf, int size) +{ + int i, ret; + /* if langid is 0, return array of langauges supported in + * buf */ + for (i = 0; i < 3; i++) { + ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), + USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, + (USB_DT_STRING << 8) + index, langid, + buf, size, USB_CTRL_GET_TIMEOUT); + if (ret > 0 || ret == -EPIPE) + break; + } + return ret; +} + +static USBD_STATUS wrap_get_descriptor(struct wrap_device *wd, + union nt_urb *nt_urb, struct irp *irp) +{ + struct usbd_control_descriptor_request *control_desc; + int ret = 0; + struct usb_device *udev; + + udev = wd->usb.udev; + control_desc = &nt_urb->control_desc; + USBTRACE("desctype = %d, descindex = %d, transfer_buffer = %p," + "transfer_buffer_length = %d", control_desc->desc_type, + control_desc->index, control_desc->transfer_buffer, + control_desc->transfer_buffer_length); + + if (control_desc->desc_type == USB_DT_STRING) { + USBTRACE("langid: %x", control_desc->language_id); + ret = wrap_usb_get_string(udev, control_desc->language_id, + control_desc->index, + control_desc->transfer_buffer, + control_desc->transfer_buffer_length); + } else { + ret = usb_get_descriptor(udev, control_desc->desc_type, + control_desc->index, + control_desc->transfer_buffer, + control_desc->transfer_buffer_length); + } + if (ret < 0) { + USBTRACE("request %d failed: %d", control_desc->desc_type, ret); + control_desc->transfer_buffer_length = 0; + return wrap_urb_status(ret); + } else { + USBTRACE("ret: %08x", ret); + control_desc->transfer_buffer_length = ret; + irp->io_status.info = ret; + return USBD_STATUS_SUCCESS; + } +} + +static USBD_STATUS wrap_process_nt_urb(struct irp *irp) +{ + union nt_urb *nt_urb; + struct usb_device *udev; + USBD_STATUS status; + struct wrap_device *wd; + + wd = IRP_WRAP_DEVICE(irp); + udev = wd->usb.udev; + nt_urb = IRP_URB(irp); + USBENTER("nt_urb = %p, irp = %p, length = %d, function = %x", + nt_urb, irp, nt_urb->header.length, nt_urb->header.function); + + DUMP_IRP(irp); + switch (nt_urb->header.function) { + /* bulk/int and vendor/class urbs are submitted to + * Linux USB core; if the call is sucessful, urb's + * completion worker will return IRP later */ + case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: + USBTRACE("submitting bulk/int irp: %p", irp); + status = wrap_bulk_or_intr_trans(irp); + break; + + case URB_FUNCTION_VENDOR_DEVICE: + case URB_FUNCTION_VENDOR_INTERFACE: + case URB_FUNCTION_VENDOR_ENDPOINT: + case URB_FUNCTION_VENDOR_OTHER: + case URB_FUNCTION_CLASS_DEVICE: + case URB_FUNCTION_CLASS_INTERFACE: + case URB_FUNCTION_CLASS_ENDPOINT: + case URB_FUNCTION_CLASS_OTHER: + USBTRACE("submitting vendor/class irp: %p", irp); + status = wrap_vendor_or_class_req(irp); + break; + + /* rest are synchronous */ + case URB_FUNCTION_SELECT_CONFIGURATION: + status = wrap_select_configuration(wd, nt_urb, irp); + NT_URB_STATUS(nt_urb) = status; + break; + + case URB_FUNCTION_SELECT_INTERFACE: + status = wrap_select_interface(wd, nt_urb, irp); + NT_URB_STATUS(nt_urb) = status; + break; + + case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: + status = wrap_get_descriptor(wd, nt_urb, irp); + NT_URB_STATUS(nt_urb) = status; + break; + + case URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL: + status = wrap_reset_pipe(udev, irp); + NT_URB_STATUS(nt_urb) = status; + break; + + case URB_FUNCTION_ABORT_PIPE: + status = wrap_abort_pipe(udev, irp); + break; + + case URB_FUNCTION_SET_FEATURE_TO_DEVICE: + case URB_FUNCTION_SET_FEATURE_TO_INTERFACE: + case URB_FUNCTION_SET_FEATURE_TO_ENDPOINT: + case URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE: + case URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE: + case URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT: + status = wrap_set_clear_feature(udev, irp); + break; + + case URB_FUNCTION_GET_STATUS_FROM_DEVICE: + case URB_FUNCTION_GET_STATUS_FROM_INTERFACE: + case URB_FUNCTION_GET_STATUS_FROM_ENDPOINT: + status = wrap_get_status_request(udev, irp); + break; + + default: + ERROR("function %x not implemented", nt_urb->header.function); + status = NT_URB_STATUS(nt_urb) = USBD_STATUS_NOT_SUPPORTED; + break; + } + USBTRACE("status: %08X", status); + return status; +} + +static USBD_STATUS wrap_reset_port(struct irp *irp) +{ + no_warn_unused int ret, lock = 0; + struct wrap_device *wd; + + wd = IRP_WRAP_DEVICE(irp); + USBENTER("%p, %p", wd, wd->usb.udev); + lock = usb_lock_device_for_reset(wd->usb.udev, wd->usb.intf); + if (lock < 0) { + WARNING("locking failed: %d", lock); +// return wrap_urb_status(lock); + return USBD_STATUS_SUCCESS; + } + ret = usb_reset_device(wd->usb.udev); + if (ret < 0) + USBTRACE("reset failed: %d", ret); + /* TODO: should reconfigure? */ + if (lock) + usb_unlock_device(wd->usb.udev); +// return wrap_urb_status(ret); + return USBD_STATUS_SUCCESS; +} + +static USBD_STATUS wrap_get_port_status(struct irp *irp) +{ + struct wrap_device *wd; + ULONG *status; + enum usb_device_state state; + + wd = IRP_WRAP_DEVICE(irp); + USBENTER("%p, %p", wd, wd->usb.udev); + status = IoGetCurrentIrpStackLocation(irp)->params.others.arg1; + state = wd->usb.udev->state; + if (state != USB_STATE_NOTATTACHED && + state != USB_STATE_SUSPENDED) { + *status |= USBD_PORT_CONNECTED; + if (state == USB_STATE_CONFIGURED) + *status |= USBD_PORT_ENABLED; + } + USBTRACE("state: %d, *status: %08X", state, *status); + return USBD_STATUS_SUCCESS; +} + +NTSTATUS wrap_submit_irp(struct device_object *pdo, struct irp *irp) +{ + struct io_stack_location *irp_sl; + struct wrap_device *wd; + USBD_STATUS status; + struct usbd_idle_callback *idle_callback; + + USBENTER("%p, %p", pdo, irp); + wd = pdo->reserved; + if (wd->usb.intf == NULL) { + USBTRACE("%p", irp); + irp->io_status.status = STATUS_DEVICE_REMOVED; + irp->io_status.info = 0; + USBEXIT(return STATUS_DEVICE_REMOVED); + } + IRP_WRAP_DEVICE(irp) = wd; + irp_sl = IoGetCurrentIrpStackLocation(irp); + switch (irp_sl->params.dev_ioctl.code) { + case IOCTL_INTERNAL_USB_SUBMIT_URB: + status = wrap_process_nt_urb(irp); + break; + case IOCTL_INTERNAL_USB_RESET_PORT: + status = wrap_reset_port(irp); + break; + case IOCTL_INTERNAL_USB_GET_PORT_STATUS: + status = wrap_get_port_status(irp); + break; + case IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION: + idle_callback = irp_sl->params.dev_ioctl.type3_input_buf; + USBTRACE("suspend function: %p", idle_callback->callback); + status = USBD_STATUS_NOT_SUPPORTED; + break; + default: + ERROR("ioctl %08X NOT IMPLEMENTED", + irp_sl->params.dev_ioctl.code); + status = USBD_STATUS_NOT_SUPPORTED; + break; + } + + USBTRACE("status: %08X", status); + if (status == USBD_STATUS_PENDING) { + /* don't touch this IRP - it may have been already + * completed/returned */ + return STATUS_PENDING; + } else { + irp->io_status.status = nt_urb_irp_status(status); + if (status != USBD_STATUS_SUCCESS) + irp->io_status.info = 0; + USBEXIT(return irp->io_status.status); + } +} + +/* TODO: The example on msdn in reference section suggests that second + * argument should be an array of usbd_interface_information, but + * description and examples elsewhere suggest that it should be + * usbd_interface_list_entry structre. Which is correct? */ + +wstdcall union nt_urb *WIN_FUNC(USBD_CreateConfigurationRequestEx,2) + (struct usb_config_descriptor *config, + struct usbd_interface_list_entry *intf_list) +{ + int size, i, n; + struct usbd_interface_information *intf; + struct usbd_pipe_information *pipe; + struct usb_interface_descriptor *intf_desc; + struct usbd_select_configuration *select_conf; + + USBENTER("config = %p, intf_list = %p", config, intf_list); + + /* calculate size required; select_conf already has space for + * one intf structure */ + size = sizeof(*select_conf) - sizeof(*intf); + for (n = 0; n < config->bNumInterfaces; n++) { + i = intf_list[n].intf_desc->bNumEndpoints; + /* intf already has space for one pipe */ + size += sizeof(*intf) + (i - 1) * sizeof(*pipe); + } + /* don't use kmalloc - driver frees it with ExFreePool */ + select_conf = ExAllocatePoolWithTag(NonPagedPool, size, + POOL_TAG('L', 'U', 'S', 'B')); + if (!select_conf) { + WARNING("couldn't allocate memory"); + return NULL; + } + memset(select_conf, 0, size); + intf = &select_conf->intf; + select_conf->handle = config; + for (n = 0; n < config->bNumInterfaces && intf_list[n].intf_desc; n++) { + /* initialize 'intf' fields in intf_list so they point + * to appropriate entry; these may be read/written by + * driver after this function returns */ + intf_list[n].intf = intf; + intf_desc = intf_list[n].intf_desc; + + i = intf_desc->bNumEndpoints; + intf->bLength = sizeof(*intf) + (i - 1) * sizeof(*pipe); + + intf->bInterfaceNumber = intf_desc->bInterfaceNumber; + intf->bAlternateSetting = intf_desc->bAlternateSetting; + intf->bInterfaceClass = intf_desc->bInterfaceClass; + intf->bInterfaceSubClass = intf_desc->bInterfaceSubClass; + intf->bInterfaceProtocol = intf_desc->bInterfaceProtocol; + intf->bNumEndpoints = intf_desc->bNumEndpoints; + + pipe = &intf->pipes[0]; + for (i = 0; i < intf->bNumEndpoints; i++) { + memset(&pipe[i], 0, sizeof(*pipe)); + pipe[i].max_tx_size = + USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE; + } + intf->handle = intf_desc; + intf = (((void *)intf) + intf->bLength); + } + select_conf->header.function = URB_FUNCTION_SELECT_CONFIGURATION; + select_conf->header.length = size; + select_conf->config = config; + USBEXIT(return (union nt_urb *)select_conf); +} + +WIN_SYMBOL_MAP("_USBD_CreateConfigurationRequestEx@8", USBD_CreateConfigurationRequestEx) + +wstdcall struct usb_interface_descriptor * +WIN_FUNC(USBD_ParseConfigurationDescriptorEx,7) + (struct usb_config_descriptor *config, void *start, + LONG bInterfaceNumber, LONG bAlternateSetting, LONG bInterfaceClass, + LONG bInterfaceSubClass, LONG bInterfaceProtocol) +{ + void *pos; + struct usb_interface_descriptor *intf; + + USBENTER("config = %p, start = %p, ifnum = %d, alt_setting = %d," + " class = %d, subclass = %d, proto = %d", config, start, + bInterfaceNumber, bAlternateSetting, bInterfaceClass, + bInterfaceSubClass, bInterfaceProtocol); + + for (pos = start; + pos < ((void *)config + le16_to_cpu(config->wTotalLength)); + pos += intf->bLength) { + + intf = pos; + + if ((intf->bDescriptorType == USB_DT_INTERFACE) && + ((bInterfaceNumber == -1) || + (intf->bInterfaceNumber == bInterfaceNumber)) && + ((bAlternateSetting == -1) || + (intf->bAlternateSetting == bAlternateSetting)) && + ((bInterfaceClass == -1) || + (intf->bInterfaceClass == bInterfaceClass)) && + ((bInterfaceSubClass == -1) || + (intf->bInterfaceSubClass == bInterfaceSubClass)) && + ((bInterfaceProtocol == -1) || + (intf->bInterfaceProtocol == bInterfaceProtocol))) { + USBTRACE("selected interface = %p", intf); + USBEXIT(return intf); + } + } + USBEXIT(return NULL); +} + +WIN_SYMBOL_MAP("_USBD_ParseConfigurationDescriptorEx@28", USBD_ParseConfigurationDescriptorEx) + +wstdcall union nt_urb *WIN_FUNC(USBD_CreateConfigurationRequest,2) + (struct usb_config_descriptor *config, USHORT *size) +{ + union nt_urb *nt_urb; + struct usbd_interface_list_entry intf_list[2]; + struct usb_interface_descriptor *intf_desc; + + USBENTER("config = %p, urb_size = %p", config, size); + + intf_desc = USBD_ParseConfigurationDescriptorEx(config, config, -1, -1, + -1, -1, -1); + intf_list[0].intf_desc = intf_desc; + intf_list[0].intf = NULL; + intf_list[1].intf_desc = NULL; + intf_list[1].intf = NULL; + nt_urb = USBD_CreateConfigurationRequestEx(config, intf_list); + if (!nt_urb) + return NULL; + + *size = nt_urb->select_conf.header.length; + USBEXIT(return nt_urb); +} + +wstdcall struct usb_interface_descriptor * +WIN_FUNC(USBD_ParseConfigurationDescriptor,3) + (struct usb_config_descriptor *config, UCHAR bInterfaceNumber, + UCHAR bAlternateSetting) +{ + return USBD_ParseConfigurationDescriptorEx(config, config, + bInterfaceNumber, + bAlternateSetting, + -1, -1, -1); +} + +wstdcall usb_common_descriptor_t *WIN_FUNC(USBD_ParseDescriptors,4) + (void *buf, ULONG length, void *start, LONG type) +{ + usb_common_descriptor_t *descr = start; + + while ((void *)descr < buf + length) { + if (descr->bDescriptorType == type) + return descr; + if (descr->bLength == 0) + break; + descr = (void *)descr + descr->bLength; + } + USBEXIT(return NULL); +} + +WIN_SYMBOL_MAP("_USBD_ParseDescriptors@16", USBD_ParseDescriptors) + +wstdcall void WIN_FUNC(USBD_GetUSBDIVersion,1) + (struct usbd_version_info *version_info) +{ + /* this function is obsolete in Windows XP */ + if (version_info) { + version_info->usbdi_version = USBDI_VERSION_XP; + /* TODO: how do we get this correctly? */ + version_info->supported_usb_version = 0x110; + } + USBEXIT(return); +} + +wstdcall void +USBD_InterfaceGetUSBDIVersion(void *context, + struct usbd_version_info *version_info, + ULONG *hcd_capa) +{ + struct wrap_device *wd = context; + + if (version_info) { + version_info->usbdi_version = USBDI_VERSION_XP; + if (wd->usb.udev->speed == USB_SPEED_HIGH) + version_info->supported_usb_version = 0x200; + else + version_info->supported_usb_version = 0x110; + } + *hcd_capa = USB_HCD_CAPS_SUPPORTS_RT_THREADS; + USBEXIT(return); +} + +wstdcall BOOLEAN USBD_InterfaceIsDeviceHighSpeed(void *context) +{ + struct wrap_device *wd = context; + + USBTRACE("wd: %p", wd); + if (wd->usb.udev->speed == USB_SPEED_HIGH) + USBEXIT(return TRUE); + else + USBEXIT(return FALSE); +} + +wstdcall void USBD_InterfaceReference(void *context) +{ + USBTRACE("%p", context); + TODO(); +} + +wstdcall void USBD_InterfaceDereference(void *context) +{ + USBTRACE("%p", context); + TODO(); +} + +wstdcall NTSTATUS USBD_InterfaceQueryBusTime(void *context, ULONG *frame) +{ + struct wrap_device *wd = context; + + *frame = usb_get_current_frame_number(wd->usb.udev); + USBEXIT(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS USBD_InterfaceSubmitIsoOutUrb(void *context, + union nt_urb *nt_urb) +{ + /* TODO: implement this */ + TODO(); + USBEXIT(return STATUS_NOT_IMPLEMENTED); +} + +wstdcall NTSTATUS +USBD_InterfaceQueryBusInformation(void *context, ULONG level, void *buf, + ULONG *buf_length, ULONG *buf_actual_length) +{ + struct wrap_device *wd = context; + struct usb_bus_information_level *bus_info; + struct usb_bus *bus; + + bus = wd->usb.udev->bus; + bus_info = buf; + TODO(); + USBEXIT(return STATUS_NOT_IMPLEMENTED); +} + +wstdcall NTSTATUS +USBD_InterfaceLogEntry(void *context, ULONG driver_tag, ULONG enum_tag, + ULONG p1, ULONG p2) +{ + ERROR("%p, %x, %x, %x, %x", context, driver_tag, enum_tag, p1, p2); + USBEXIT(return STATUS_SUCCESS); +} + +int usb_init(void) +{ + InitializeListHead(&wrap_urb_complete_list); + spin_lock_init(&wrap_urb_complete_list_lock); + initialize_work(&wrap_urb_complete_work, wrap_urb_complete_worker, NULL); +#ifdef USB_DEBUG + urb_id = 0; +#endif + return 0; +} + +void usb_exit(void) +{ + USBEXIT(return); +} + +int usb_init_device(struct wrap_device *wd) +{ + InitializeListHead(&wd->usb.wrap_urb_list); + wd->usb.num_alloc_urbs = 0; + USBEXIT(return 0); +} + +void usb_exit_device(struct wrap_device *wd) +{ + kill_all_urbs(wd, 0); + USBEXIT(return); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/wrapndis.c +++ linux-2.6.32/ubuntu/ndiswrapper/wrapndis.c @@ -0,0 +1,2133 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ndis.h" +#include "iw_ndis.h" +#include "pnp.h" +#include "loader.h" +#include "wrapndis.h" +#include +#include +#include +#include +#include +#include "wrapper.h" + +/* Functions callable from the NDIS driver */ +wstdcall NTSTATUS NdisDispatchDeviceControl(struct device_object *fdo, + struct irp *irp); +wstdcall NTSTATUS NdisDispatchPnp(struct device_object *fdo, struct irp *irp); +wstdcall NTSTATUS NdisDispatchPower(struct device_object *fdo, struct irp *irp); + +workqueue_struct_t *wrapndis_wq; +static struct nt_thread *wrapndis_worker_thread; + +static int set_packet_filter(struct ndis_device *wnd, + ULONG packet_filter); +static void add_iw_stats_timer(struct ndis_device *wnd); +static void del_iw_stats_timer(struct ndis_device *wnd); +static NDIS_STATUS ndis_start_device(struct ndis_device *wnd); +static int ndis_remove_device(struct ndis_device *wnd); +static void set_multicast_list(struct ndis_device *wnd); +static int ndis_net_dev_open(struct net_device *net_dev); +static int ndis_net_dev_close(struct net_device *net_dev); + +/* MiniportReset */ +NDIS_STATUS mp_reset(struct ndis_device *wnd) +{ + NDIS_STATUS res; + struct miniport *mp; + BOOLEAN reset_address; + KIRQL irql; + + ENTER2("wnd: %p", wnd); + if (down_interruptible(&wnd->tx_ring_mutex)) + EXIT3(return NDIS_STATUS_FAILURE); + if (down_interruptible(&wnd->ndis_req_mutex)) { + up(&wnd->tx_ring_mutex); + EXIT3(return NDIS_STATUS_FAILURE); + } + mp = &wnd->wd->driver->ndis_driver->mp; + prepare_wait_condition(wnd->ndis_req_task, wnd->ndis_req_done, 0); + WARNING("%s is being reset", wnd->net_dev->name); + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + res = LIN2WIN2(mp->reset, &reset_address, wnd->nmb->mp_ctx); + serialize_unlock_irql(wnd, irql); + + TRACE2("%08X, %08X", res, reset_address); + if (res == NDIS_STATUS_PENDING) { + /* wait for NdisMResetComplete */ + if (wait_condition((wnd->ndis_req_done > 0), 0, + TASK_INTERRUPTIBLE) < 0) + res = NDIS_STATUS_FAILURE; + else { + res = wnd->ndis_req_status; + reset_address = wnd->ndis_req_done - 1; + } + TRACE2("%08X, %08X", res, reset_address); + } + up(&wnd->ndis_req_mutex); + if (res == NDIS_STATUS_SUCCESS && reset_address) { + set_packet_filter(wnd, wnd->packet_filter); + set_multicast_list(wnd); + } + up(&wnd->tx_ring_mutex); + EXIT3(return res); +} + +/* MiniportRequest(Query/Set)Information */ +NDIS_STATUS mp_request(enum ndis_request_type request, + struct ndis_device *wnd, ndis_oid oid, + void *buf, ULONG buflen, ULONG *written, ULONG *needed) +{ + NDIS_STATUS res; + ULONG w, n; + struct miniport *mp; + KIRQL irql; + + if (down_interruptible(&wnd->ndis_req_mutex)) + EXIT3(return NDIS_STATUS_FAILURE); + if (!written) + written = &w; + if (!needed) + needed = &n; + mp = &wnd->wd->driver->ndis_driver->mp; + prepare_wait_condition(wnd->ndis_req_task, wnd->ndis_req_done, 0); + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + switch (request) { + case NdisRequestQueryInformation: + TRACE2("%p, %08X, %p", mp->queryinfo, oid, wnd->nmb->mp_ctx); + res = LIN2WIN6(mp->queryinfo, wnd->nmb->mp_ctx, oid, buf, + buflen, written, needed); + break; + case NdisRequestSetInformation: + TRACE2("%p, %08X, %p", mp->setinfo, oid, wnd->nmb->mp_ctx); + res = LIN2WIN6(mp->setinfo, wnd->nmb->mp_ctx, oid, buf, + buflen, written, needed); + break; + default: + WARNING("invalid request %d, %08X", request, oid); + res = NDIS_STATUS_NOT_SUPPORTED; + break; + } + serialize_unlock_irql(wnd, irql); + TRACE2("%08X, %08X", res, oid); + if (res == NDIS_STATUS_PENDING) { + /* wait for NdisMQueryInformationComplete */ + if (wait_condition((wnd->ndis_req_done > 0), 0, + TASK_INTERRUPTIBLE) < 0) + res = NDIS_STATUS_FAILURE; + else + res = wnd->ndis_req_status; + TRACE2("%08X, %08X", res, oid); + } + up(&wnd->ndis_req_mutex); + DBG_BLOCK(2) { + if (res || needed) + TRACE2("%08X, %d, %d, %d", res, buflen, *written, + *needed); + } + EXIT3(return res); +} + +/* MiniportPnPEventNotify */ +static NDIS_STATUS mp_pnp_event(struct ndis_device *wnd, + enum ndis_device_pnp_event event, + ULONG power_profile) +{ + struct miniport *mp; + + ENTER1("%p, %d", wnd, event); + mp = &wnd->wd->driver->ndis_driver->mp; + if (!mp->pnp_event_notify) { + TRACE1("Windows driver %s doesn't support " + "MiniportPnpEventNotify", wnd->wd->driver->name); + return NDIS_STATUS_FAILURE; + } + /* RNDIS driver doesn't like to be notified if device is + * already halted */ + if (!test_bit(HW_INITIALIZED, &wnd->wd->hw_status)) + EXIT1(return NDIS_STATUS_SUCCESS); + switch (event) { + case NdisDevicePnPEventSurpriseRemoved: + TRACE1("%u, %p", + (wnd->attributes & NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK), + mp->pnp_event_notify); + if ((wnd->attributes & NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK) && + !test_bit(HW_PRESENT, &wnd->wd->hw_status) && + mp->pnp_event_notify) { + TRACE1("calling surprise_removed"); + LIN2WIN4(mp->pnp_event_notify, wnd->nmb->mp_ctx, + NdisDevicePnPEventSurpriseRemoved, NULL, 0); + } else + TRACE1("Windows driver %s doesn't support " + "MiniportPnpEventNotify for safe unplugging", + wnd->wd->driver->name); + return NDIS_STATUS_SUCCESS; + case NdisDevicePnPEventPowerProfileChanged: + if (power_profile) + power_profile = NdisPowerProfileAcOnLine; + LIN2WIN4(mp->pnp_event_notify, wnd->nmb->mp_ctx, + NdisDevicePnPEventPowerProfileChanged, + &power_profile, (ULONG)sizeof(power_profile)); + return NDIS_STATUS_SUCCESS; + default: + WARNING("event %d not yet implemented", event); + return NDIS_STATUS_SUCCESS; + } +} + +/* MiniportInitialize */ +static NDIS_STATUS mp_init(struct ndis_device *wnd) +{ + NDIS_STATUS error_status, status; + UINT medium_index; + enum ndis_medium medium_array[] = {NdisMedium802_3}; + struct miniport *mp; + + ENTER1("irql: %d", current_irql()); + if (test_bit(HW_INITIALIZED, &wnd->wd->hw_status)) { + WARNING("device %p already initialized!", wnd); + return NDIS_STATUS_FAILURE; + } + + if (!wnd->wd->driver->ndis_driver || + !wnd->wd->driver->ndis_driver->mp.init) { + WARNING("assuming WDM (non-NDIS) driver"); + EXIT1(return NDIS_STATUS_NOT_RECOGNIZED); + } + mp = &wnd->wd->driver->ndis_driver->mp; + status = LIN2WIN6(mp->init, &error_status, &medium_index, medium_array, + sizeof(medium_array) / sizeof(medium_array[0]), + wnd->nmb, wnd->nmb); + TRACE1("init returns: %08X, irql: %d", status, current_irql()); + if (status != NDIS_STATUS_SUCCESS) { + WARNING("couldn't initialize device: %08X", status); + EXIT1(return NDIS_STATUS_FAILURE); + } + + /* Wait a little to let card power up otherwise ifup might + * fail after boot */ + sleep_hz(HZ / 5); + status = mp_pnp_event(wnd, NdisDevicePnPEventPowerProfileChanged, + NdisPowerProfileAcOnLine); + if (status != NDIS_STATUS_SUCCESS) + TRACE1("setting power failed: %08X", status); + set_bit(HW_INITIALIZED, &wnd->wd->hw_status); + /* the description about NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND is + * misleading/confusing */ + status = mp_query(wnd, OID_PNP_CAPABILITIES, + &wnd->pnp_capa, sizeof(wnd->pnp_capa)); + if (status == NDIS_STATUS_SUCCESS) { + TRACE1("%d, %d", wnd->pnp_capa.wakeup.min_magic_packet_wakeup, + wnd->pnp_capa.wakeup.min_pattern_wakeup); + wnd->attributes |= NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND; + status = mp_query_int(wnd, OID_PNP_ENABLE_WAKE_UP, + &wnd->ndis_wolopts); + TRACE1("%08X, %x", status, wnd->ndis_wolopts); + } else if (status == NDIS_STATUS_NOT_SUPPORTED) + wnd->attributes &= ~NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND; + TRACE1("%d", wnd->pnp_capa.wakeup.min_magic_packet_wakeup); + /* although some NDIS drivers support suspend, Linux kernel + * has issues with suspending USB devices */ + if (wrap_is_usb_bus(wnd->wd->dev_bus)) { + wnd->attributes &= ~NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND; + wnd->ndis_wolopts = 0; + } + mp_set_int(wnd, OID_802_11_POWER_MODE, NDIS_POWER_OFF); + EXIT1(return NDIS_STATUS_SUCCESS); +} + +/* MiniportHalt */ +static void mp_halt(struct ndis_device *wnd) +{ + struct miniport *mp; + + ENTER1("%p", wnd); + if (!test_and_clear_bit(HW_INITIALIZED, &wnd->wd->hw_status)) { + WARNING("device %p is not initialized - not halting", wnd); + return; + } + hangcheck_del(wnd); + del_iw_stats_timer(wnd); + if (wnd->physical_medium == NdisPhysicalMediumWirelessLan && + wrap_is_pci_bus(wnd->wd->dev_bus)) { + up(&wnd->ndis_req_mutex); + disassociate(wnd, 0); + if (down_interruptible(&wnd->ndis_req_mutex)) + WARNING("couldn't obtain ndis_req_mutex"); + } + mp = &wnd->wd->driver->ndis_driver->mp; + TRACE1("halt: %p", mp->mp_halt); + LIN2WIN1(mp->mp_halt, wnd->nmb->mp_ctx); + /* if a driver doesn't call NdisMDeregisterInterrupt during + * halt, deregister it now */ + if (wnd->mp_interrupt) + NdisMDeregisterInterrupt(wnd->mp_interrupt); + /* cancel any timers left by bugyy windows driver; also free + * the memory for timers */ + while (1) { + struct nt_slist *slist; + struct wrap_timer *wrap_timer; + + spin_lock_bh(&ntoskernel_lock); + if ((slist = wnd->wrap_timer_slist.next)) + wnd->wrap_timer_slist.next = slist->next; + spin_unlock_bh(&ntoskernel_lock); + TIMERTRACE("%p", slist); + if (!slist) + break; + wrap_timer = container_of(slist, struct wrap_timer, slist); + wrap_timer->repeat = 0; + /* ktimer that this wrap_timer is associated to can't + * be touched, as it may have been freed by the driver + * already */ + if (del_timer_sync(&wrap_timer->timer)) + WARNING("Buggy Windows driver left timer %p " + "running", wrap_timer->nt_timer); + memset(wrap_timer, 0, sizeof(*wrap_timer)); + kfree(wrap_timer); + } + EXIT1(return); +} + +static NDIS_STATUS mp_set_power_state(struct ndis_device *wnd, + enum ndis_power_state state) +{ + NDIS_STATUS status; + + TRACE1("%d", state); + if (state == NdisDeviceStateD0) { + status = NDIS_STATUS_SUCCESS; + up(&wnd->ndis_req_mutex); + if (test_and_clear_bit(HW_HALTED, &wnd->wd->hw_status)) { + status = mp_init(wnd); + if (status == NDIS_STATUS_SUCCESS) { + set_packet_filter(wnd, wnd->packet_filter); + set_multicast_list(wnd); + } + } else if (test_and_clear_bit(HW_SUSPENDED, + &wnd->wd->hw_status)) { + status = mp_set_int(wnd, OID_PNP_SET_POWER, state); + if (status != NDIS_STATUS_SUCCESS) + WARNING("%s: setting power to state %d failed? " + "%08X", wnd->net_dev->name, state, + status); + } else + return NDIS_STATUS_FAILURE; + + if (wrap_is_pci_bus(wnd->wd->dev_bus)) { + pci_enable_wake(wnd->wd->pci.pdev, PCI_D3hot, 0); + pci_enable_wake(wnd->wd->pci.pdev, PCI_D3cold, 0); + } + if (status == NDIS_STATUS_SUCCESS) { + up(&wnd->tx_ring_mutex); + netif_device_attach(wnd->net_dev); + hangcheck_add(wnd); + add_iw_stats_timer(wnd); + } else + WARNING("%s: couldn't set power to state %d; device not" + " resumed", wnd->net_dev->name, state); + EXIT1(return status); + } else { + if (down_interruptible(&wnd->tx_ring_mutex)) + EXIT1(return NDIS_STATUS_FAILURE); + netif_device_detach(wnd->net_dev); + hangcheck_del(wnd); + del_iw_stats_timer(wnd); + status = NDIS_STATUS_NOT_SUPPORTED; + if (wnd->attributes & NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND) { + status = mp_set_int(wnd, OID_PNP_ENABLE_WAKE_UP, + wnd->ndis_wolopts); + TRACE2("0x%x, 0x%x", status, wnd->ndis_wolopts); + if (status == NDIS_STATUS_SUCCESS) { + if (wnd->ndis_wolopts) + wnd->wd->pci.wake_state = + PowerDeviceD3; + else + wnd->wd->pci.wake_state = + PowerDeviceUnspecified; + } else + WARNING("couldn't set wake-on-lan options: " + "0x%x, %08X", wnd->ndis_wolopts, status); + status = mp_set_int(wnd, OID_PNP_SET_POWER, state); + if (status == NDIS_STATUS_SUCCESS) + set_bit(HW_SUSPENDED, &wnd->wd->hw_status); + else + WARNING("suspend failed: %08X", status); + } + if (status != NDIS_STATUS_SUCCESS) { + WARNING("%s does not support power management; " + "halting the device", wnd->net_dev->name); + mp_halt(wnd); + set_bit(HW_HALTED, &wnd->wd->hw_status); + status = STATUS_SUCCESS; + } + if (down_interruptible(&wnd->ndis_req_mutex)) + WARNING("couldn't lock ndis_req_mutex"); + EXIT1(return status); + } +} + +static int ndis_set_mac_address(struct net_device *dev, void *p) +{ + struct ndis_device *wnd = netdev_priv(dev); + struct sockaddr *addr = p; + struct ndis_configuration_parameter param; + struct unicode_string key; + struct ansi_string ansi; + NDIS_STATUS res; + unsigned char mac_string[2 * ETH_ALEN + 1]; + mac_address mac; + + memcpy(mac, addr->sa_data, sizeof(mac)); + memset(mac_string, 0, sizeof(mac_string)); + res = snprintf(mac_string, sizeof(mac_string), MACSTR, MAC2STR(mac)); + if (res != (sizeof(mac_string) - 1)) + EXIT1(return -EINVAL); + TRACE1("new mac: %s", mac_string); + + RtlInitAnsiString(&ansi, mac_string); + if (RtlAnsiStringToUnicodeString(¶m.data.string, &ansi, + TRUE) != STATUS_SUCCESS) + EXIT1(return -EINVAL); + + param.type = NdisParameterString; + RtlInitAnsiString(&ansi, "NetworkAddress"); + if (RtlAnsiStringToUnicodeString(&key, &ansi, TRUE) != STATUS_SUCCESS) { + RtlFreeUnicodeString(¶m.data.string); + EXIT1(return -EINVAL); + } + NdisWriteConfiguration(&res, wnd->nmb, &key, ¶m); + RtlFreeUnicodeString(&key); + RtlFreeUnicodeString(¶m.data.string); + + if (res != NDIS_STATUS_SUCCESS) + EXIT1(return -EFAULT); + if (ndis_reinit(wnd) == NDIS_STATUS_SUCCESS) { + res = mp_query(wnd, OID_802_3_CURRENT_ADDRESS, + mac, sizeof(mac)); + if (res == NDIS_STATUS_SUCCESS) { + TRACE1("mac:" MACSTRSEP, MAC2STR(mac)); + memcpy(dev->dev_addr, mac, sizeof(mac)); + } else + ERROR("couldn't get mac address: %08X", res); + } + EXIT1(return 0); +} + +static int setup_tx_sg_list(struct ndis_device *wnd, struct sk_buff *skb, + struct ndis_packet_oob_data *oob_data) +{ + struct ndis_sg_element *sg_element; + struct ndis_sg_list *sg_list; + int i; + + ENTER3("%p, %d", skb, skb_shinfo(skb)->nr_frags); + if (skb_shinfo(skb)->nr_frags <= 1) { + sg_element = &oob_data->wrap_tx_sg_list.elements[0]; + sg_element->address = + PCI_DMA_MAP_SINGLE(wnd->wd->pci.pdev, skb->data, + skb->len, PCI_DMA_TODEVICE); + sg_element->length = skb->len; + oob_data->wrap_tx_sg_list.nent = 1; + oob_data->ext.info[ScatterGatherListPacketInfo] = + &oob_data->wrap_tx_sg_list; + TRACE3("%Lx, %u", sg_element->address, sg_element->length); + return 0; + } + sg_list = kmalloc(sizeof(*sg_list) + + (skb_shinfo(skb)->nr_frags + 1) * sizeof(*sg_element), + GFP_ATOMIC); + if (!sg_list) + return -ENOMEM; + sg_list->nent = skb_shinfo(skb)->nr_frags + 1; + TRACE3("%p, %d", sg_list, sg_list->nent); + sg_element = sg_list->elements; + sg_element->length = skb_headlen(skb); + sg_element->address = + PCI_DMA_MAP_SINGLE(wnd->wd->pci.pdev, skb->data, + skb_headlen(skb), PCI_DMA_TODEVICE); + for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { + skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; + sg_element++; + sg_element->length = frag->size; + sg_element->address = + pci_map_page(wnd->wd->pci.pdev, frag->page, + frag->page_offset, frag->size, + PCI_DMA_TODEVICE); + TRACE3("%Lx, %u", sg_element->address, sg_element->length); + } + oob_data->ext.info[ScatterGatherListPacketInfo] = sg_list; + return 0; +} + +static void free_tx_sg_list(struct ndis_device *wnd, + struct ndis_packet_oob_data *oob_data) +{ + int i; + struct ndis_sg_element *sg_element; + struct ndis_sg_list *sg_list = + oob_data->ext.info[ScatterGatherListPacketInfo]; + sg_element = sg_list->elements; + TRACE3("%p, %d", sg_list, sg_list->nent); + PCI_DMA_UNMAP_SINGLE(wnd->wd->pci.pdev, sg_element->address, + sg_element->length, PCI_DMA_TODEVICE); + if (sg_list->nent == 1) + EXIT3(return); + for (i = 1; i < sg_list->nent; i++, sg_element++) { + TRACE3("%Lx, %u", sg_element->address, sg_element->length); + pci_unmap_page(wnd->wd->pci.pdev, sg_element->address, + sg_element->length, PCI_DMA_TODEVICE); + } + TRACE3("%p", sg_list); + kfree(sg_list); +} + +static struct ndis_packet *alloc_tx_packet(struct ndis_device *wnd, + struct sk_buff *skb) +{ + struct ndis_packet *packet; + ndis_buffer *buffer; + struct ndis_packet_oob_data *oob_data; + NDIS_STATUS status; + + NdisAllocatePacket(&status, &packet, wnd->tx_packet_pool); + if (status != NDIS_STATUS_SUCCESS) + return NULL; + NdisAllocateBuffer(&status, &buffer, wnd->tx_buffer_pool, + skb->data, skb->len); + if (status != NDIS_STATUS_SUCCESS) { + NdisFreePacket(packet); + return NULL; + } + packet->private.buffer_head = buffer; + packet->private.buffer_tail = buffer; + + oob_data = NDIS_PACKET_OOB_DATA(packet); + oob_data->tx_skb = skb; + if (wnd->sg_dma_size) { + if (setup_tx_sg_list(wnd, skb, oob_data)) { + NdisFreeBuffer(buffer); + NdisFreePacket(packet); + return NULL; + } + } + if (skb->ip_summed == CHECKSUM_PARTIAL) { + struct ndis_tcp_ip_checksum_packet_info csum; + int protocol; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21) + protocol = ntohs(skb->protocol); +#else + protocol = skb->nh.iph->protocol; +#endif + csum.value = 0; + csum.tx.v4 = 1; + if (protocol == IPPROTO_TCP) + csum.tx.tcp = 1; + else if (protocol == IPPROTO_UDP) + csum.tx.udp = 1; +// csum->tx.ip = 1; + packet->private.flags |= NDIS_PROTOCOL_ID_TCP_IP; + oob_data->ext.info[TcpIpChecksumPacketInfo] = + (void *)(ULONG_PTR)csum.value; + } + DBG_BLOCK(4) { + dump_bytes(__func__, skb->data, skb->len); + } + TRACE4("%p, %p, %p", packet, buffer, skb); + return packet; +} + +void free_tx_packet(struct ndis_device *wnd, struct ndis_packet *packet, + NDIS_STATUS status) +{ + ndis_buffer *buffer; + struct ndis_packet_oob_data *oob_data; + struct sk_buff *skb; + struct ndis_packet_pool *pool; + + assert_irql(_irql_ <= DISPATCH_LEVEL); + assert(packet->private.packet_flags); + oob_data = NDIS_PACKET_OOB_DATA(packet); + skb = oob_data->tx_skb; + buffer = packet->private.buffer_head; + TRACE4("%p, %p, %p, %08X", packet, buffer, skb, status); + if (status == NDIS_STATUS_SUCCESS) { + pre_atomic_add(wnd->net_stats.tx_bytes, packet->private.len); + atomic_inc_var(wnd->net_stats.tx_packets); + } else { + TRACE1("packet dropped: %08X", status); + atomic_inc_var(wnd->net_stats.tx_dropped); + } + if (wnd->sg_dma_size) + free_tx_sg_list(wnd, oob_data); + NdisFreeBuffer(buffer); + dev_kfree_skb_any(skb); + pool = packet->private.pool; + NdisFreePacket(packet); + if (netif_queue_stopped(wnd->net_dev) && + ((pool->max_descr - pool->num_used_descr) >= + (wnd->max_tx_packets / 4))) { + set_bit(NETIF_WAKEQ, &wnd->ndis_pending_work); + schedule_wrapndis_work(&wnd->ndis_work); + } + EXIT4(return); +} + +/* MiniportSend and MiniportSendPackets */ +/* this function is called holding tx_ring_mutex. start and n are such + * that start + n < TX_RING_SIZE; i.e., packets don't wrap around + * ring */ +static u8 mp_tx_packets(struct ndis_device *wnd, u8 start, u8 n) +{ + NDIS_STATUS res; + struct miniport *mp; + struct ndis_packet *packet; + u8 sent; + KIRQL irql; + + ENTER3("%d, %d", start, n); + mp = &wnd->wd->driver->ndis_driver->mp; + if (mp->send_packets) { + if (deserialized_driver(wnd)) { + LIN2WIN3(mp->send_packets, wnd->nmb->mp_ctx, + &wnd->tx_ring[start], n); + sent = n; + } else { + irql = serialize_lock_irql(wnd); + LIN2WIN3(mp->send_packets, wnd->nmb->mp_ctx, + &wnd->tx_ring[start], n); + serialize_unlock_irql(wnd, irql); + for (sent = 0; sent < n && wnd->tx_ok; sent++) { + struct ndis_packet_oob_data *oob_data; + packet = wnd->tx_ring[start + sent]; + oob_data = NDIS_PACKET_OOB_DATA(packet); + switch ((res = + xchg(&oob_data->status, + NDIS_STATUS_NOT_RECOGNIZED))) { + case NDIS_STATUS_SUCCESS: + free_tx_packet(wnd, packet, + NDIS_STATUS_SUCCESS); + break; + case NDIS_STATUS_PENDING: + break; + case NDIS_STATUS_RESOURCES: + wnd->tx_ok = 0; + /* resubmit this packet and + * the rest when resources + * become available */ + sent--; + break; + case NDIS_STATUS_FAILURE: + free_tx_packet(wnd, packet, + NDIS_STATUS_FAILURE); + break; + default: + ERROR("%p: invalid status: %08X", + packet, res); + free_tx_packet(wnd, packet, + oob_data->status); + break; + } + TRACE3("%p, %d", packet, res); + } + } + TRACE3("sent: %d(%d)", sent, n); + } else { + for (sent = 0; sent < n && wnd->tx_ok; sent++) { + struct ndis_packet_oob_data *oob_data; + packet = wnd->tx_ring[start + sent]; + oob_data = NDIS_PACKET_OOB_DATA(packet); + oob_data->status = NDIS_STATUS_NOT_RECOGNIZED; + irql = serialize_lock_irql(wnd); + res = LIN2WIN3(mp->send, wnd->nmb->mp_ctx, + packet, packet->private.flags); + serialize_unlock_irql(wnd, irql); + switch (res) { + case NDIS_STATUS_SUCCESS: + free_tx_packet(wnd, packet, res); + break; + case NDIS_STATUS_PENDING: + break; + case NDIS_STATUS_RESOURCES: + wnd->tx_ok = 0; + /* resend this packet when resources + * become available */ + sent--; + break; + case NDIS_STATUS_FAILURE: + free_tx_packet(wnd, packet, res); + break; + default: + ERROR("packet %p: invalid status: %08X", + packet, res); + break; + } + } + } + EXIT3(return sent); +} + +static void tx_worker(worker_param_t param) +{ + struct ndis_device *wnd; + s8 n; + + wnd = worker_param_data(param, struct ndis_device, tx_work); + ENTER3("tx_ok %d", wnd->tx_ok); + while (wnd->tx_ok) { + if (down_interruptible(&wnd->tx_ring_mutex)) + break; + spin_lock_bh(&wnd->tx_ring_lock); + n = wnd->tx_ring_end - wnd->tx_ring_start; + TRACE3("%d, %d, %d", wnd->tx_ring_start, wnd->tx_ring_end, n); + /* end == start if either ring is empty or full; in + * the latter case is_tx_ring_full is set */ + if (n == 0) { + if (wnd->is_tx_ring_full) + n = TX_RING_SIZE - wnd->tx_ring_start; + else { + spin_unlock_bh(&wnd->tx_ring_lock); + up(&wnd->tx_ring_mutex); + break; + } + } else if (n < 0) + n = TX_RING_SIZE - wnd->tx_ring_start; + spin_unlock_bh(&wnd->tx_ring_lock); + if (unlikely(n > wnd->max_tx_packets)) + n = wnd->max_tx_packets; + n = mp_tx_packets(wnd, wnd->tx_ring_start, n); + if (n) { + wnd->net_dev->trans_start = jiffies; + wnd->tx_ring_start = + (wnd->tx_ring_start + n) % TX_RING_SIZE; + wnd->is_tx_ring_full = 0; + } + up(&wnd->tx_ring_mutex); + TRACE3("%d, %d, %d", wnd->tx_ring_start, wnd->tx_ring_end, n); + } + EXIT3(return); +} + +static int tx_skbuff(struct sk_buff *skb, struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + struct ndis_packet *packet; + + packet = alloc_tx_packet(wnd, skb); + if (!packet) { + TRACE2("couldn't allocate packet"); + netif_tx_lock(dev); + netif_stop_queue(dev); + netif_tx_unlock(dev); + return NETDEV_TX_BUSY; + } + spin_lock(&wnd->tx_ring_lock); + wnd->tx_ring[wnd->tx_ring_end++] = packet; + if (wnd->tx_ring_end == TX_RING_SIZE) + wnd->tx_ring_end = 0; + if (wnd->tx_ring_end == wnd->tx_ring_start) { + netif_tx_lock(dev); + wnd->is_tx_ring_full = 1; + netif_stop_queue(dev); + netif_tx_unlock(dev); + } + spin_unlock(&wnd->tx_ring_lock); + TRACE4("ring: %d, %d", wnd->tx_ring_start, wnd->tx_ring_end); + schedule_wrapndis_work(&wnd->tx_work); + return NETDEV_TX_OK; +} + +static int set_packet_filter(struct ndis_device *wnd, ULONG packet_filter) +{ + NDIS_STATUS res; + + while (1) { + res = mp_set_int(wnd, OID_GEN_CURRENT_PACKET_FILTER, + packet_filter); + if (res == NDIS_STATUS_SUCCESS) + break; + TRACE2("couldn't set filter 0x%08x", packet_filter); + /* NDIS_PACKET_TYPE_PROMISCUOUS may not work with 802.11 */ + if (packet_filter & NDIS_PACKET_TYPE_PROMISCUOUS) { + packet_filter &= ~NDIS_PACKET_TYPE_PROMISCUOUS; + continue; + } + if (packet_filter & NDIS_PACKET_TYPE_ALL_LOCAL) { + packet_filter &= ~NDIS_PACKET_TYPE_ALL_LOCAL; + continue; + } + if (packet_filter & NDIS_PACKET_TYPE_ALL_FUNCTIONAL) { + packet_filter &= ~NDIS_PACKET_TYPE_ALL_FUNCTIONAL; + continue; + } + if (packet_filter & NDIS_PACKET_TYPE_MULTICAST) { + packet_filter &= ~NDIS_PACKET_TYPE_MULTICAST; + packet_filter |= NDIS_PACKET_TYPE_ALL_MULTICAST; + continue; + } + if (packet_filter & NDIS_PACKET_TYPE_ALL_MULTICAST) { + packet_filter &= ~NDIS_PACKET_TYPE_ALL_MULTICAST; + continue; + } + break; + } + + wnd->packet_filter = packet_filter; + res = mp_query_int(wnd, OID_GEN_CURRENT_PACKET_FILTER, &packet_filter); + if (packet_filter != wnd->packet_filter) { + WARNING("filter not set: 0x%08x, 0x%08x", + packet_filter, wnd->packet_filter); + wnd->packet_filter = packet_filter; + } + if (wnd->packet_filter) + EXIT3(return 0); + else + EXIT3(return -1); +} + +void set_media_state(struct ndis_device *wnd, enum ndis_media_state state) +{ + ENTER2("state: 0x%x", state); + if (state == NdisMediaStateConnected) { + netif_carrier_on(wnd->net_dev); + wnd->tx_ok = 1; + if (netif_queue_stopped(wnd->net_dev)) + netif_wake_queue(wnd->net_dev); + if (wnd->physical_medium == NdisPhysicalMediumWirelessLan) { + set_bit(LINK_STATUS_ON, &wnd->ndis_pending_work); + schedule_wrapndis_work(&wnd->ndis_work); + } + } else if (state == NdisMediaStateDisconnected) { + netif_carrier_off(wnd->net_dev); + netif_stop_queue(wnd->net_dev); + wnd->tx_ok = 0; + if (wnd->physical_medium == NdisPhysicalMediumWirelessLan) { + memset(&wnd->essid, 0, sizeof(wnd->essid)); + set_bit(LINK_STATUS_OFF, &wnd->ndis_pending_work); + schedule_wrapndis_work(&wnd->ndis_work); + } + } else { + WARNING("invalid media state: 0x%x", state); + } +} + +static int ndis_net_dev_open(struct net_device *net_dev) +{ + ENTER1("%p", netdev_priv(net_dev)); + netif_start_queue(net_dev); + netif_poll_enable(net_dev); + EXIT1(return 0); +} + +static int ndis_net_dev_close(struct net_device *net_dev) +{ + ENTER1("%p", netdev_priv(net_dev)); + netif_poll_disable(net_dev); + netif_tx_disable(net_dev); + EXIT1(return 0); +} + +static int ndis_change_mtu(struct net_device *net_dev, int mtu) +{ + struct ndis_device *wnd = netdev_priv(net_dev); + int max; + + if (mtu < ETH_ZLEN) + return -EINVAL; + if (mp_query_int(wnd, OID_GEN_MAXIMUM_TOTAL_SIZE, &max) != + NDIS_STATUS_SUCCESS) + return -EOPNOTSUPP; + TRACE1("%d", max); + max -= ETH_HLEN; + if (max <= ETH_ZLEN) + return -EINVAL; + if (mtu + ETH_HLEN > max) + return -EINVAL; + net_dev->mtu = mtu; + return 0; +} + +#ifdef CONFIG_NET_POLL_CONTROLLER +static void ndis_poll_controller(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + + disable_irq(dev->irq); + ndis_isr(wnd->mp_interrupt->kinterrupt, wnd->mp_interrupt); + enable_irq(dev->irq); +} +#endif + +/* called from BH context */ +static struct net_device_stats *ndis_get_stats(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + return &wnd->net_stats; +} + +/* called from BH context */ +static void ndis_set_multicast_list(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + set_bit(SET_MULTICAST_LIST, &wnd->ndis_pending_work); + schedule_wrapndis_work(&wnd->ndis_work); +} + +/* called from BH context */ +struct iw_statistics *get_iw_stats(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + return &wnd->iw_stats; +} + +static void update_iw_stats(struct ndis_device *wnd) +{ + struct iw_statistics *iw_stats = &wnd->iw_stats; + struct ndis_wireless_stats ndis_stats; + NDIS_STATUS res; + ndis_rssi rssi; + int qual; + + ENTER2("%p", wnd); + if (wnd->iw_stats_enabled == FALSE || !netif_carrier_ok(wnd->net_dev)) { + memset(iw_stats, 0, sizeof(*iw_stats)); + EXIT2(return); + } + res = mp_query(wnd, OID_802_11_RSSI, &rssi, sizeof(rssi)); + if (res == NDIS_STATUS_SUCCESS) + iw_stats->qual.level = rssi; + + qual = 100 * (rssi - WL_NOISE) / (WL_SIGMAX - WL_NOISE); + if (qual < 0) + qual = 0; + else if (qual > 100) + qual = 100; + + iw_stats->qual.noise = WL_NOISE; + iw_stats->qual.qual = qual; + + res = mp_query(wnd, OID_802_11_STATISTICS, + &ndis_stats, sizeof(ndis_stats)); + if (res != NDIS_STATUS_SUCCESS) + EXIT2(return); + iw_stats->discard.retries = (unsigned long)ndis_stats.retry + + (unsigned long)ndis_stats.multi_retry; + iw_stats->discard.misc = (unsigned long)ndis_stats.fcs_err + + (unsigned long)ndis_stats.rtss_fail + + (unsigned long)ndis_stats.ack_fail + + (unsigned long)ndis_stats.frame_dup; + + EXIT2(return); +} + +static void set_multicast_list(struct ndis_device *wnd) +{ + struct net_device *net_dev; + ULONG packet_filter; + NDIS_STATUS res; + + net_dev = wnd->net_dev; + packet_filter = wnd->packet_filter; + + TRACE2("0x%08x", packet_filter); + if (net_dev->flags & IFF_PROMISC) { + packet_filter |= NDIS_PACKET_TYPE_PROMISCUOUS | + NDIS_PACKET_TYPE_ALL_LOCAL; + } else if (net_dev->flags & IFF_ALLMULTI || + net_dev->mc_count > wnd->multicast_size) { + packet_filter |= NDIS_PACKET_TYPE_ALL_MULTICAST; + TRACE2("0x%08x", packet_filter); + } else if (net_dev->mc_count > 0) { + int i, size; + char *buf; + struct dev_mc_list *mclist; + size = min(wnd->multicast_size, net_dev->mc_count); + TRACE2("%d, %d", wnd->multicast_size, net_dev->mc_count); + buf = kmalloc(size * ETH_ALEN, GFP_KERNEL); + if (!buf) { + WARNING("couldn't allocate memory"); + EXIT2(return); + } + mclist = net_dev->mc_list; + for (i = 0; i < size && mclist; mclist = mclist->next) { + if (mclist->dmi_addrlen != ETH_ALEN) + continue; + memcpy(buf + i * ETH_ALEN, mclist->dmi_addr, ETH_ALEN); + TRACE2(MACSTRSEP, MAC2STR(mclist->dmi_addr)); + i++; + } + res = mp_set(wnd, OID_802_3_MULTICAST_LIST, buf, i * ETH_ALEN); + if (res == NDIS_STATUS_SUCCESS && i > 0) + packet_filter |= NDIS_PACKET_TYPE_MULTICAST; + else + packet_filter |= NDIS_PACKET_TYPE_ALL_MULTICAST; + kfree(buf); + } + TRACE2("0x%08x", packet_filter); + res = set_packet_filter(wnd, packet_filter); + if (res) + TRACE1("couldn't set packet filter (%08X)", res); + EXIT2(return); +} + +static void link_status_off(struct ndis_device *wnd) +{ +#ifdef CONFIG_WIRELESS_EXT + union iwreq_data wrqu; + + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.ap_addr.sa_family = ARPHRD_ETHER; + wireless_send_event(wnd->net_dev, SIOCGIWAP, &wrqu, NULL); +#endif + EXIT2(return); +} + +static void link_status_on(struct ndis_device *wnd) +{ +#ifdef CONFIG_WIRELESS_EXT + struct ndis_assoc_info *ndis_assoc_info; + union iwreq_data wrqu; + NDIS_STATUS res; + const int assoc_size = sizeof(*ndis_assoc_info) + IW_CUSTOM_MAX + 32; +#endif + + ENTER2(""); +#ifdef CONFIG_WIRELESS_EXT + memset(&wrqu, 0, sizeof(wrqu)); + ndis_assoc_info = kzalloc(assoc_size, GFP_KERNEL); + if (!ndis_assoc_info) { + ERROR("couldn't allocate memory"); + goto send_assoc_event; + } + res = mp_query(wnd, OID_802_11_ASSOCIATION_INFORMATION, + ndis_assoc_info, assoc_size); + if (res) { + TRACE2("query assoc_info failed (%08X)", res); + kfree(ndis_assoc_info); + goto send_assoc_event; + } + TRACE2("%u, 0x%x, %u, 0x%x, %u", ndis_assoc_info->length, + ndis_assoc_info->req_ies, ndis_assoc_info->req_ie_length, + ndis_assoc_info->resp_ies, ndis_assoc_info->resp_ie_length); + if (ndis_assoc_info->req_ie_length > 0) { + wrqu.data.length = ndis_assoc_info->req_ie_length; + wireless_send_event(wnd->net_dev, IWEVASSOCREQIE, &wrqu, + ((char *)ndis_assoc_info) + + ndis_assoc_info->offset_req_ies); + } + if (ndis_assoc_info->resp_ie_length > 0) { + wrqu.data.length = ndis_assoc_info->resp_ie_length; + wireless_send_event(wnd->net_dev, IWEVASSOCRESPIE, &wrqu, + ((char *)ndis_assoc_info) + + ndis_assoc_info->offset_resp_ies); + } + kfree(ndis_assoc_info); + +send_assoc_event: + get_ap_address(wnd, wrqu.ap_addr.sa_data); + wrqu.ap_addr.sa_family = ARPHRD_ETHER; + TRACE2(MACSTRSEP, MAC2STR(wrqu.ap_addr.sa_data)); + wireless_send_event(wnd->net_dev, SIOCGIWAP, &wrqu, NULL); +#endif + EXIT2(return); +} + +static void iw_stats_timer_proc(unsigned long data) +{ + struct ndis_device *wnd = (struct ndis_device *)data; + + ENTER2("%d", wnd->iw_stats_interval); + if (wnd->iw_stats_interval > 0) { + set_bit(COLLECT_IW_STATS, &wnd->ndis_pending_work); + schedule_wrapndis_work(&wnd->ndis_work); + } + mod_timer(&wnd->iw_stats_timer, jiffies + wnd->iw_stats_interval); +} + +static void add_iw_stats_timer(struct ndis_device *wnd) +{ + if (wnd->physical_medium != NdisPhysicalMediumWirelessLan) + return; + if (wnd->iw_stats_interval < 0) + wnd->iw_stats_interval *= -1; + wnd->iw_stats_timer.data = (unsigned long)wnd; + wnd->iw_stats_timer.function = iw_stats_timer_proc; + mod_timer(&wnd->iw_stats_timer, jiffies + wnd->iw_stats_interval); +} + +static void del_iw_stats_timer(struct ndis_device *wnd) +{ + ENTER2("%d", wnd->iw_stats_interval); + wnd->iw_stats_interval *= -1; + del_timer_sync(&wnd->iw_stats_timer); + EXIT2(return); +} + +static void hangcheck_proc(unsigned long data) +{ + struct ndis_device *wnd = (struct ndis_device *)data; + + ENTER3("%d", wnd->hangcheck_interval); + if (wnd->hangcheck_interval > 0) { + set_bit(HANGCHECK, &wnd->ndis_pending_work); + schedule_wrapndis_work(&wnd->ndis_work); + } + mod_timer(&wnd->hangcheck_timer, jiffies + wnd->hangcheck_interval); + EXIT3(return); +} + +void hangcheck_add(struct ndis_device *wnd) +{ + if (!wnd->wd->driver->ndis_driver->mp.hangcheck || + hangcheck_interval < 0) + EXIT2(return); + + if (hangcheck_interval > 0) + wnd->hangcheck_interval = hangcheck_interval * HZ; + if (wnd->hangcheck_interval < 0) + wnd->hangcheck_interval *= -1; + wnd->hangcheck_timer.data = (unsigned long)wnd; + wnd->hangcheck_timer.function = hangcheck_proc; + mod_timer(&wnd->hangcheck_timer, jiffies + wnd->hangcheck_interval); + EXIT2(return); +} + +void hangcheck_del(struct ndis_device *wnd) +{ + ENTER2("%d", wnd->hangcheck_interval); + if (wnd->hangcheck_interval > 0) + wnd->hangcheck_interval *= -1; + del_timer_sync(&wnd->hangcheck_timer); + EXIT2(return); +} + +/* worker procedure to take care of setting/checking various states */ +static void ndis_worker(worker_param_t param) +{ + struct ndis_device *wnd; + + wnd = worker_param_data(param, struct ndis_device, ndis_work); + WORKTRACE("0x%lx", wnd->ndis_pending_work); + + if (test_and_clear_bit(NETIF_WAKEQ, &wnd->ndis_pending_work)) { + netif_tx_lock_bh(wnd->net_dev); + netif_wake_queue(wnd->net_dev); + netif_tx_unlock_bh(wnd->net_dev); + } + + if (test_and_clear_bit(LINK_STATUS_OFF, &wnd->ndis_pending_work)) + link_status_off(wnd); + + if (test_and_clear_bit(LINK_STATUS_ON, &wnd->ndis_pending_work)) + link_status_on(wnd); + + if (test_and_clear_bit(COLLECT_IW_STATS, &wnd->ndis_pending_work)) + update_iw_stats(wnd); + + if (test_and_clear_bit(SET_MULTICAST_LIST, + &wnd->ndis_pending_work)) + set_multicast_list(wnd); + + if (test_and_clear_bit(HANGCHECK, &wnd->ndis_pending_work)) { + struct miniport *mp; + BOOLEAN reset; + KIRQL irql; + + mp = &wnd->wd->driver->ndis_driver->mp; + irql = serialize_lock_irql(wnd); + reset = LIN2WIN1(mp->hangcheck, wnd->nmb->mp_ctx); + serialize_unlock_irql(wnd, irql); + if (reset) { + TRACE2("%s needs reset", wnd->net_dev->name); + mp_reset(wnd); + } + } + WORKEXIT(return); +} + +NDIS_STATUS ndis_reinit(struct ndis_device *wnd) +{ + NDIS_STATUS status; + + wnd->attributes &= ~NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND; + status = mp_set_power_state(wnd, NdisDeviceStateD3); + if (status != NDIS_STATUS_SUCCESS) { + ERROR("halting device %s failed: %08X", wnd->net_dev->name, + status); + return status; + } + status = mp_set_power_state(wnd, NdisDeviceStateD0); + if (status != NDIS_STATUS_SUCCESS) + ERROR("starting device %s failed: %08X", wnd->net_dev->name, + status); + return status; +} + +static void get_encryption_capa(struct ndis_device *wnd, char *buf, + const int buf_len) +{ + int i, mode; + NDIS_STATUS res; + struct ndis_assoc_info ndis_assoc_info; + struct ndis_add_key ndis_key; + struct ndis_capability *c; + + ENTER1("%p", wnd); + /* set network type to g, b, or a, in that order */ + res = mp_query(wnd, OID_802_11_NETWORK_TYPES_SUPPORTED, buf, buf_len); + if (res == NDIS_STATUS_SUCCESS) { + struct network_type_list *net_types; + unsigned long types = 0; + net_types = (typeof(net_types))buf; + for (i = 0; i < net_types->num; i++) { + TRACE2("%d", net_types->types[i]); + set_bit(net_types->types[i], &types); + } + if (types & Ndis802_11OFDM24) + mode = Ndis802_11OFDM24; + else if (types & Ndis802_11DS) + mode = Ndis802_11DS; + else if (types & Ndis802_11OFDM5) + mode = Ndis802_11OFDM5; + else + mode = Ndis802_11DS; + mp_set_int(wnd, OID_802_11_NETWORK_TYPE_IN_USE, mode); + } + /* check if WEP is supported */ + if (set_iw_encr_mode(wnd, IW_AUTH_CIPHER_WEP104, + IW_AUTH_CIPHER_NONE) == 0 && + get_ndis_encr_mode(wnd) == Ndis802_11Encryption1KeyAbsent) + set_bit(Ndis802_11Encryption1Enabled, &wnd->capa.encr); + + /* check if WPA is supported */ + if (set_ndis_auth_mode(wnd, Ndis802_11AuthModeWPA) == 0 && + get_ndis_auth_mode(wnd) == Ndis802_11AuthModeWPA) + set_bit(Ndis802_11AuthModeWPA, &wnd->capa.encr); + else + EXIT1(return); + + if (set_ndis_auth_mode(wnd, Ndis802_11AuthModeWPAPSK) == 0 && + get_ndis_auth_mode(wnd) == Ndis802_11AuthModeWPAPSK) + set_bit(Ndis802_11AuthModeWPAPSK, &wnd->capa.encr); + + /* check for highest encryption */ + mode = 0; + if (set_iw_encr_mode(wnd, IW_AUTH_CIPHER_CCMP, + IW_AUTH_CIPHER_NONE) == 0 && + (i = get_ndis_encr_mode(wnd)) > 0 && + (i == Ndis802_11Encryption3KeyAbsent || + i == Ndis802_11Encryption3Enabled)) + mode = Ndis802_11Encryption3Enabled; + else if (set_iw_encr_mode(wnd, IW_AUTH_CIPHER_TKIP, + IW_AUTH_CIPHER_NONE) == 0 && + (i = get_ndis_encr_mode(wnd)) > 0 && + (i == Ndis802_11Encryption2KeyAbsent || + i == Ndis802_11Encryption2Enabled)) + mode = Ndis802_11Encryption2Enabled; + else if (set_iw_encr_mode(wnd, IW_AUTH_CIPHER_WEP104, + IW_AUTH_CIPHER_NONE) == 0 && + (i = get_ndis_encr_mode(wnd)) > 0 && + (i == Ndis802_11Encryption1KeyAbsent || + i == Ndis802_11Encryption1Enabled)) + mode = Ndis802_11Encryption1Enabled; + + TRACE1("mode: %d", mode); + if (mode == 0) + EXIT1(return); + set_bit(Ndis802_11Encryption1Enabled, &wnd->capa.encr); + if (mode == Ndis802_11Encryption1Enabled) + EXIT1(return); + + ndis_key.length = 32; + ndis_key.index = 0xC0000001; + ndis_key.struct_size = sizeof(ndis_key); + res = mp_set(wnd, OID_802_11_ADD_KEY, &ndis_key, ndis_key.struct_size); + TRACE2("%08X, %lu", res, (unsigned long)sizeof(ndis_key)); + if (res && res != NDIS_STATUS_INVALID_DATA) + EXIT1(return); + res = mp_query(wnd, OID_802_11_ASSOCIATION_INFORMATION, + &ndis_assoc_info, sizeof(ndis_assoc_info)); + TRACE1("%08X", res); + if (res == NDIS_STATUS_NOT_SUPPORTED) + EXIT1(return); + + set_bit(Ndis802_11Encryption2Enabled, &wnd->capa.encr); + if (mode == Ndis802_11Encryption3Enabled) + set_bit(Ndis802_11Encryption3Enabled, &wnd->capa.encr); + /* not all drivers support OID_802_11_CAPABILITY, so we don't + * know for sure if driver support WPA or WPAPSK; assume + * WPAPSK */ + set_bit(Ndis802_11AuthModeWPAPSK, &wnd->capa.auth); + wnd->max_pmkids = 1; + + memset(buf, 0, buf_len); + c = (struct ndis_capability *)buf; + res = mp_query(wnd, OID_802_11_CAPABILITY, buf, buf_len); + if (!(res == NDIS_STATUS_SUCCESS && c->version == 2)) + EXIT1(return); + wnd->max_pmkids = c->num_PMKIDs; + + for (i = 0; i < c->num_auth_encr_pair; i++) { + struct ndis_auth_encr_pair *ae; + + ae = &c->auth_encr_pair[i]; + if ((char *)(ae + 1) > buf + buf_len) + break; + switch (ae->auth_mode) { + case Ndis802_11AuthModeOpen: + case Ndis802_11AuthModeShared: + case Ndis802_11AuthModeWPA: + case Ndis802_11AuthModeWPAPSK: + case Ndis802_11AuthModeWPANone: + case Ndis802_11AuthModeWPA2: + case Ndis802_11AuthModeWPA2PSK: + set_bit(ae->auth_mode, &wnd->capa.auth); + break; + default: + WARNING("unknown auth_mode: %d", ae->auth_mode); + break; + } + switch (ae->encr_mode) { + case Ndis802_11EncryptionDisabled: + case Ndis802_11Encryption1Enabled: + case Ndis802_11Encryption2Enabled: + case Ndis802_11Encryption3Enabled: + set_bit(ae->encr_mode, &wnd->capa.encr); + break; + default: + WARNING("unknown encr_mode: %d", ae->encr_mode); + break; + } + } + EXIT1(return); +} + +wstdcall NTSTATUS NdisDispatchDeviceControl(struct device_object *fdo, + struct irp *irp) +{ + struct ndis_device *wnd; + + TRACE3("fdo: %p", fdo); + /* for now, we don't have anything intresting here, so pass it + * down to bus driver */ + wnd = fdo->reserved; + return IoPassIrpDown(wnd->nmb->pdo, irp); +} +WIN_FUNC_DECL(NdisDispatchDeviceControl,2) + +wstdcall NTSTATUS NdisDispatchPower(struct device_object *fdo, struct irp *irp) +{ + struct io_stack_location *irp_sl; + struct ndis_device *wnd; + enum ndis_power_state state; + NTSTATUS status; + NDIS_STATUS ndis_status; + + irp_sl = IoGetCurrentIrpStackLocation(irp); + wnd = fdo->reserved; + IOTRACE("fdo: %p, fn: %d:%d, wnd: %p", fdo, irp_sl->major_fn, + irp_sl->minor_fn, wnd); + if ((irp_sl->params.power.type == SystemPowerState && + irp_sl->params.power.state.system_state > PowerSystemWorking) || + (irp_sl->params.power.type == DevicePowerState && + irp_sl->params.power.state.device_state > PowerDeviceD0)) + state = NdisDeviceStateD3; + else + state = NdisDeviceStateD0; + switch (irp_sl->minor_fn) { + case IRP_MN_SET_POWER: + if (state == NdisDeviceStateD0) { + status = IoSyncForwardIrp(wnd->nmb->pdo, irp); + if (status != STATUS_SUCCESS) + break; + ndis_status = mp_set_power_state(wnd, state); + if (ndis_status != NDIS_STATUS_SUCCESS) + WARNING("couldn't set power to %d: %08X", + state, ndis_status); + TRACE2("%s: device resumed", wnd->net_dev->name); + irp->io_status.status = status = STATUS_SUCCESS; + IoCompleteRequest(irp, IO_NO_INCREMENT); + break; + } else { + ndis_status = mp_set_power_state(wnd, state); + /* TODO: handle error case */ + if (ndis_status != NDIS_STATUS_SUCCESS) + WARNING("setting power to %d failed: %08X", + state, ndis_status); + status = IoAsyncForwardIrp(wnd->nmb->pdo, irp); + } + break; + case IRP_MN_QUERY_POWER: + if (wnd->attributes & NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND) { + ndis_status = mp_query(wnd, OID_PNP_QUERY_POWER, + &state, sizeof(state)); + TRACE2("%d, %08X", state, ndis_status); + /* this OID must always succeed */ + if (ndis_status != NDIS_STATUS_SUCCESS) + TRACE1("query power returns %08X", ndis_status); + irp->io_status.status = STATUS_SUCCESS; + } else + irp->io_status.status = STATUS_SUCCESS; + status = IoPassIrpDown(wnd->nmb->pdo, irp); + break; + case IRP_MN_WAIT_WAKE: + case IRP_MN_POWER_SEQUENCE: + /* TODO: implement WAIT_WAKE */ + status = IoPassIrpDown(wnd->nmb->pdo, irp); + break; + default: + status = IoPassIrpDown(wnd->nmb->pdo, irp); + break; + } + IOEXIT(return status); +} +WIN_FUNC_DECL(NdisDispatchPower,2) + +wstdcall NTSTATUS NdisDispatchPnp(struct device_object *fdo, struct irp *irp) +{ + struct io_stack_location *irp_sl; + struct ndis_device *wnd; + struct device_object *pdo; + NTSTATUS status; + + IOTRACE("fdo: %p, irp: %p", fdo, irp); + irp_sl = IoGetCurrentIrpStackLocation(irp); + wnd = fdo->reserved; + pdo = wnd->nmb->pdo; + switch (irp_sl->minor_fn) { + case IRP_MN_START_DEVICE: + status = IoSyncForwardIrp(pdo, irp); + if (status != STATUS_SUCCESS) + break; + if (ndis_start_device(wnd) == NDIS_STATUS_SUCCESS) + status = STATUS_SUCCESS; + else + status = STATUS_FAILURE; + irp->io_status.status = status; + IoCompleteRequest(irp, IO_NO_INCREMENT); + break; + case IRP_MN_QUERY_STOP_DEVICE: + /* TODO: implement in NDIS */ + status = IoPassIrpDown(wnd->nmb->pdo, irp); + break; + case IRP_MN_STOP_DEVICE: + mp_halt(wnd); + irp->io_status.status = STATUS_SUCCESS; + status = IoAsyncForwardIrp(pdo, irp); + break; + case IRP_MN_REMOVE_DEVICE: + TRACE1("%s", wnd->net_dev->name); + mp_pnp_event(wnd, NdisDevicePnPEventSurpriseRemoved, 0); + if (ndis_remove_device(wnd)) { + status = STATUS_FAILURE; + break; + } + /* wnd is already freed */ + status = IoAsyncForwardIrp(pdo, irp); + IoDetachDevice(fdo); + IoDeleteDevice(fdo); + break; + default: + status = IoAsyncForwardIrp(pdo, irp); + break; + } + IOTRACE("status: %08X", status); + IOEXIT(return status); +} +WIN_FUNC_DECL(NdisDispatchPnp,2) + +static void set_task_offload(struct ndis_device *wnd, void *buf, + const int buf_size) +{ + struct ndis_task_offload_header *task_offload_header; + struct ndis_task_offload *task_offload; + struct ndis_task_tcp_ip_checksum *csum = NULL; + struct ndis_task_tcp_large_send *tso = NULL; + NDIS_STATUS status; + + memset(buf, 0, buf_size); + task_offload_header = buf; + task_offload_header->version = NDIS_TASK_OFFLOAD_VERSION; + task_offload_header->size = sizeof(*task_offload_header); + task_offload_header->encap_format.flags.fixed_header_size = 1; + task_offload_header->encap_format.header_size = sizeof(struct ethhdr); + task_offload_header->encap_format.encap = IEEE_802_3_Encapsulation; + status = mp_query(wnd, OID_TCP_TASK_OFFLOAD, buf, buf_size); + TRACE1("%08X", status); + if (status != NDIS_STATUS_SUCCESS) + EXIT1(return); + if (task_offload_header->offset_first_task == 0) + EXIT1(return); + task_offload = ((void *)task_offload_header + + task_offload_header->offset_first_task); + while (1) { + TRACE1("%d, %d", task_offload->version, task_offload->task); + switch(task_offload->task) { + case TcpIpChecksumNdisTask: + csum = (void *)task_offload->task_buf; + break; + case TcpLargeSendNdisTask: + tso = (void *)task_offload->task_buf; + break; + default: + TRACE1("%d", task_offload->task); + break; + } + if (task_offload->offset_next_task == 0) + break; + task_offload = (void *)task_offload + + task_offload->offset_next_task; + } + if (tso) + TRACE1("%u, %u, %d, %d", tso->max_size, tso->min_seg_count, + tso->tcp_opts, tso->ip_opts); + if (!csum) + EXIT1(return); + TRACE1("%08x, %08x", csum->v4_tx.value, csum->v4_rx.value); + task_offload_header->encap_format.flags.fixed_header_size = 1; + task_offload_header->encap_format.header_size = sizeof(struct ethhdr); + task_offload_header->offset_first_task = sizeof(*task_offload_header); + task_offload = ((void *)task_offload_header + + task_offload_header->offset_first_task); + task_offload->offset_next_task = 0; + task_offload->size = sizeof(*task_offload); + task_offload->task = TcpIpChecksumNdisTask; + memcpy(task_offload->task_buf, csum, sizeof(*csum)); + task_offload->task_buf_length = sizeof(*csum); + status = mp_set(wnd, OID_TCP_TASK_OFFLOAD, task_offload_header, + sizeof(*task_offload_header) + + sizeof(*task_offload) + sizeof(*csum)); + TRACE1("%08X", status); + if (status != NDIS_STATUS_SUCCESS) + EXIT2(return); + wnd->tx_csum = csum->v4_tx; + if (csum->v4_tx.tcp_csum && csum->v4_tx.udp_csum) { + if (csum->v4_tx.ip_csum) { + wnd->net_dev->features |= NETIF_F_HW_CSUM; + TRACE1("hw checksum enabled"); + } else { + wnd->net_dev->features |= NETIF_F_IP_CSUM; + TRACE1("IP checksum enabled"); + } + if (wnd->sg_dma_size) + wnd->net_dev->features |= NETIF_F_SG; + } + wnd->rx_csum = csum->v4_rx; + EXIT1(return); +} + +static void get_supported_oids(struct ndis_device *wnd) +{ + NDIS_STATUS res; + int i, n, needed; + ndis_oid *oids; + + res = mp_query_info(wnd, OID_GEN_SUPPORTED_LIST, NULL, 0, NULL, + &needed); + if (!(res == NDIS_STATUS_BUFFER_TOO_SHORT || + res == NDIS_STATUS_INVALID_LENGTH)) + EXIT1(return); + oids = kmalloc(needed, GFP_KERNEL); + if (!oids) { + TRACE1("couldn't allocate memory"); + EXIT1(return); + } + res = mp_query(wnd, OID_GEN_SUPPORTED_LIST, oids, needed); + if (res) { + TRACE1("failed: %08X", res); + kfree(oids); + EXIT1(return); + } + for (i = 0, n = needed / sizeof(*oids); i < n; i++) { + TRACE1("oid: %08X", oids[i]); + /* if a wireless device didn't say so for + * OID_GEN_PHYSICAL_MEDIUM (they should, but in case) */ + if (wnd->physical_medium != NdisPhysicalMediumWirelessLan && + oids[i] == OID_802_11_SSID) + wnd->physical_medium = NdisPhysicalMediumWirelessLan; + } + kfree(oids); + EXIT1(return); +} + +static void ndis_get_drvinfo(struct net_device *dev, + struct ethtool_drvinfo *info) +{ + struct ndis_device *wnd = netdev_priv(dev); + strncpy(info->driver, DRIVER_NAME, sizeof(info->driver) - 2); + strcat(info->driver, "+"); + strncat(info->driver, wnd->wd->driver->name, + sizeof(info->driver) - strlen(DRIVER_NAME) - 1); + strncpy(info->version, DRIVER_VERSION, sizeof(info->version) - 2); + strcat(info->version, "+"); + strncat(info->version, wnd->wd->driver->version, + sizeof(info->version) - strlen(DRIVER_VERSION) - 1); + if (wrap_is_pci_bus(wnd->wd->dev_bus)) + strncpy(info->bus_info, pci_name(wnd->wd->pci.pdev), + sizeof(info->bus_info) - 1); +#ifdef ENABLE_USB + else + usb_make_path(wnd->wd->usb.udev, info->bus_info, + sizeof(info->bus_info) - 1); +#endif + return; +} + +static u32 ndis_get_link(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + return netif_carrier_ok(wnd->net_dev); +} + +static void ndis_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) +{ + struct ndis_device *wnd = netdev_priv(dev); + + wol->supported = 0; + wol->wolopts = 0; + if (!(wnd->attributes & NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND)) + EXIT2(return); + if (!wrap_is_pci_bus(wnd->wd->dev_bus)) + EXIT2(return); + /* we always suspend to D3 */ + if (wnd->pnp_capa.wakeup.min_magic_packet_wakeup < NdisDeviceStateD3) + return; + wol->supported |= WAKE_MAGIC; + if (wnd->ndis_wolopts & NDIS_PNP_WAKE_UP_MAGIC_PACKET) + wol->wolopts |= WAKE_MAGIC; + return; +} + +static int ndis_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) +{ + struct ndis_device *wnd = netdev_priv(dev); + + if (!(wnd->attributes & NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND)) + return -EOPNOTSUPP; + if (wnd->pnp_capa.wakeup.min_magic_packet_wakeup < NdisDeviceStateD3) + EXIT2(return -EOPNOTSUPP); + TRACE2("0x%x", wol->wolopts); + if (wol->wolopts & WAKE_MAGIC) { + wnd->ndis_wolopts |= NDIS_PNP_WAKE_UP_MAGIC_PACKET; + if (wol->wolopts != WAKE_MAGIC) + WARNING("ignored wake-on-lan options: 0x%x", + wol->wolopts & ~WAKE_MAGIC); + } else if (!wol->wolopts) + wnd->ndis_wolopts = 0; + else + return -EOPNOTSUPP; + TRACE2("0x%x", wnd->ndis_wolopts); + return 0; +} + +static u32 ndis_get_tx_csum(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + if (wnd->tx_csum.tcp_csum && wnd->tx_csum.udp_csum) + return 1; + else + return 0; +} + +static u32 ndis_get_rx_csum(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + if (wnd->rx_csum.value) + return 1; + else + return 0; +} + +static int ndis_set_tx_csum(struct net_device *dev, u32 data) +{ + struct ndis_device *wnd = netdev_priv(dev); + + if (data && (wnd->tx_csum.value == 0)) + return -EOPNOTSUPP; + + if (wnd->tx_csum.ip_csum) + ethtool_op_set_tx_hw_csum(dev, data); + else + ethtool_op_set_tx_csum(dev, data); + return 0; +} + +static int ndis_set_rx_csum(struct net_device *dev, u32 data) +{ + struct ndis_device *wnd = netdev_priv(dev); + + if (data && (wnd->tx_csum.value == 0)) + return -EOPNOTSUPP; + + /* TODO: enable/disable rx csum through NDIS */ + return 0; +} + +static u32 ndis_get_sg(struct net_device *dev) +{ + struct ndis_device *wnd = netdev_priv(dev); + if (wnd->sg_dma_size) + return ethtool_op_get_sg(dev); + else + return 0; +} + +static int ndis_set_sg(struct net_device *dev, u32 data) +{ + struct ndis_device *wnd = netdev_priv(dev); + if (wnd->sg_dma_size) + return ethtool_op_set_sg(dev, data); + else + return -EOPNOTSUPP; +} + +static struct ethtool_ops ndis_ethtool_ops = { + .get_drvinfo = ndis_get_drvinfo, + .get_link = ndis_get_link, + .get_wol = ndis_get_wol, + .set_wol = ndis_set_wol, + .get_tx_csum = ndis_get_tx_csum, + .get_rx_csum = ndis_get_rx_csum, + .set_tx_csum = ndis_set_tx_csum, + .set_rx_csum = ndis_set_rx_csum, + .get_sg = ndis_get_sg, + .set_sg = ndis_set_sg, +}; + +static int notifier_event(struct notifier_block *notifier, unsigned long event, + void *ptr) +{ + struct net_device *net_dev = ptr; + + ENTER2("0x%lx", event); + if (net_dev->ethtool_ops == &ndis_ethtool_ops + && event == NETDEV_CHANGENAME) { + struct ndis_device *wnd = netdev_priv(net_dev); + /* called with rtnl lock held, so no need to lock */ + wrap_procfs_remove_ndis_device(wnd); + printk(KERN_INFO "%s: changing interface name from '%s' to " + "'%s'\n", DRIVER_NAME, wnd->netdev_name, net_dev->name); + memcpy(wnd->netdev_name, net_dev->name, + sizeof(wnd->netdev_name)); + wrap_procfs_add_ndis_device(wnd); + } + return NOTIFY_DONE; +} + +static struct notifier_block netdev_notifier = { + .notifier_call = notifier_event, +}; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) +static const struct net_device_ops ndis_netdev_ops = { + .ndo_open = ndis_net_dev_open, + .ndo_stop = ndis_net_dev_close, + .ndo_start_xmit = tx_skbuff, + .ndo_change_mtu = ndis_change_mtu, + .ndo_set_multicast_list = ndis_set_multicast_list, + .ndo_set_mac_address = ndis_set_mac_address, + .ndo_get_stats = ndis_get_stats, +#ifdef CONFIG_NET_POLL_CONTROLLER + .ndo_poll_controller = ndis_poll_controller, +#endif +}; +#endif + +static NDIS_STATUS ndis_start_device(struct ndis_device *wnd) +{ + struct wrap_device *wd; + struct net_device *net_dev; + NDIS_STATUS status; + char *buf; + const int buf_len = 256; + mac_address mac; + struct transport_header_offset *tx_header_offset; + int n; + + ENTER2("%d", in_atomic()); + status = mp_init(wnd); + if (status == NDIS_STATUS_NOT_RECOGNIZED) + EXIT1(return NDIS_STATUS_SUCCESS); + if (status != NDIS_STATUS_SUCCESS) + EXIT1(return status); + wd = wnd->wd; + net_dev = wnd->net_dev; + + get_supported_oids(wnd); + memset(mac, 0, sizeof(mac)); + status = mp_query(wnd, OID_802_3_CURRENT_ADDRESS, mac, sizeof(mac)); + if (memcmp(mac, "\x00\x00\x00\x00\x00\x00", sizeof(mac)) == 0) { + status = mp_query(wnd, OID_802_3_PERMANENT_ADDRESS, mac, + sizeof(mac)); + if (status != NDIS_STATUS_SUCCESS) { + ERROR("couldn't get mac address: %08X", status); + goto err_start; + } + } + TRACE1("mac:" MACSTRSEP, MAC2STR(mac)); + memcpy(net_dev->dev_addr, mac, ETH_ALEN); + + strncpy(net_dev->name, if_name, IFNAMSIZ - 1); + net_dev->name[IFNAMSIZ - 1] = 0; + + wnd->packet_filter = NDIS_PACKET_TYPE_DIRECTED | + NDIS_PACKET_TYPE_BROADCAST | NDIS_PACKET_TYPE_MULTICAST; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) + net_dev->netdev_ops = &ndis_netdev_ops; +#else + net_dev->open = ndis_net_dev_open; + net_dev->hard_start_xmit = tx_skbuff; + net_dev->stop = ndis_net_dev_close; + net_dev->get_stats = ndis_get_stats; + net_dev->change_mtu = ndis_change_mtu; + net_dev->set_multicast_list = ndis_set_multicast_list; + net_dev->set_mac_address = ndis_set_mac_address; +#ifdef CONFIG_NET_POLL_CONTROLLER + net_dev->poll_controller = ndis_poll_controller; +#endif +#endif + if (wnd->physical_medium == NdisPhysicalMediumWirelessLan) { + net_dev->wireless_handlers = &ndis_handler_def; + } + net_dev->ethtool_ops = &ndis_ethtool_ops; + if (wnd->mp_interrupt) + net_dev->irq = wnd->mp_interrupt->irq; + net_dev->mem_start = wnd->mem_start; + net_dev->mem_end = wnd->mem_end; + status = mp_query_int(wnd, OID_802_3_MAXIMUM_LIST_SIZE, + &wnd->multicast_size); + if (status != NDIS_STATUS_SUCCESS || wnd->multicast_size < 0) + wnd->multicast_size = 0; + if (wnd->multicast_size > 0) + net_dev->flags |= IFF_MULTICAST; + else + net_dev->flags &= ~IFF_MULTICAST; + + buf = kmalloc(buf_len, GFP_KERNEL); + if (!buf) { + WARNING("couldn't allocate memory"); + goto err_start; + } + + set_task_offload(wnd, buf, buf_len); +#ifdef NETIF_F_LLTX + net_dev->features |= NETIF_F_LLTX; +#endif + + if (register_netdev(net_dev)) { + ERROR("cannot register net device %s", net_dev->name); + goto err_register; + } + memcpy(wnd->netdev_name, net_dev->name, sizeof(wnd->netdev_name)); + memset(buf, 0, buf_len); + status = mp_query(wnd, OID_GEN_VENDOR_DESCRIPTION, buf, buf_len); + if (status != NDIS_STATUS_SUCCESS) { + WARNING("couldn't get vendor information: 0x%x", status); + buf[0] = 0; + } + wnd->drv_ndis_version = n = 0; + mp_query_int(wnd, OID_GEN_DRIVER_VERSION, &wnd->drv_ndis_version); + mp_query_int(wnd, OID_GEN_VENDOR_DRIVER_VERSION, &n); + + printk(KERN_INFO "%s: ethernet device " MACSTRSEP " using %sNDIS " + "driver: %s, version: 0x%x, NDIS version: 0x%x, vendor: '%s', " + "%s\n", net_dev->name, MAC2STR(net_dev->dev_addr), + deserialized_driver(wnd) ? "" : "serialized ", + wnd->wd->driver->name, n, wnd->drv_ndis_version, buf, + wnd->wd->conf_file_name); + + if (deserialized_driver(wnd)) { + /* deserialized drivers don't have a limit, but we + * keep max at TX_RING_SIZE */ + wnd->max_tx_packets = TX_RING_SIZE; + } else { + status = mp_query_int(wnd, OID_GEN_MAXIMUM_SEND_PACKETS, + &wnd->max_tx_packets); + if (status != NDIS_STATUS_SUCCESS) + wnd->max_tx_packets = 1; + if (wnd->max_tx_packets > TX_RING_SIZE) + wnd->max_tx_packets = TX_RING_SIZE; + } + TRACE2("maximum send packets: %d", wnd->max_tx_packets); + NdisAllocatePacketPoolEx(&status, &wnd->tx_packet_pool, + wnd->max_tx_packets, 0, + PROTOCOL_RESERVED_SIZE_IN_PACKET); + if (status != NDIS_STATUS_SUCCESS) { + ERROR("couldn't allocate packet pool"); + goto packet_pool_err; + } + NdisAllocateBufferPool(&status, &wnd->tx_buffer_pool, + wnd->max_tx_packets + 4); + if (status != NDIS_STATUS_SUCCESS) { + ERROR("couldn't allocate buffer pool"); + goto buffer_pool_err; + } + TRACE1("pool: %p", wnd->tx_buffer_pool); + + if (mp_query_int(wnd, OID_GEN_MAXIMUM_TOTAL_SIZE, &n) == + NDIS_STATUS_SUCCESS && n > ETH_HLEN) + ndis_change_mtu(wnd->net_dev, n - ETH_HLEN); + + if (mp_query_int(wnd, OID_GEN_MAC_OPTIONS, &n) == NDIS_STATUS_SUCCESS) + TRACE2("mac options supported: 0x%x", n); + + tx_header_offset = (typeof(tx_header_offset))buf; + tx_header_offset->protocol_type = NDIS_PROTOCOL_ID_TCP_IP; + tx_header_offset->header_offset = sizeof(ETH_HLEN); + status = mp_set(wnd, OID_GEN_TRANSPORT_HEADER_OFFSET, + tx_header_offset, sizeof(*tx_header_offset)); + TRACE2("%08X", status); + + status = mp_query_int(wnd, OID_GEN_PHYSICAL_MEDIUM, + &wnd->physical_medium); + if (status != NDIS_STATUS_SUCCESS) + wnd->physical_medium = NdisPhysicalMediumUnspecified; + + if (wnd->physical_medium == NdisPhysicalMediumWirelessLan) { + mp_set_int(wnd, OID_802_11_POWER_MODE, NDIS_POWER_OFF); + get_encryption_capa(wnd, buf, buf_len); + TRACE1("capbilities = %ld", wnd->capa.encr); + printk(KERN_INFO "%s: encryption modes supported: " + "%s%s%s%s%s%s%s\n", net_dev->name, + test_bit(Ndis802_11Encryption1Enabled, &wnd->capa.encr) ? + "WEP" : "none", + + test_bit(Ndis802_11Encryption2Enabled, &wnd->capa.encr) ? + "; TKIP with WPA" : "", + test_bit(Ndis802_11AuthModeWPA2, &wnd->capa.auth) ? + ", WPA2" : "", + test_bit(Ndis802_11AuthModeWPA2PSK, &wnd->capa.auth) ? + ", WPA2PSK" : "", + + test_bit(Ndis802_11Encryption3Enabled, &wnd->capa.encr) ? + "; AES/CCMP with WPA" : "", + test_bit(Ndis802_11AuthModeWPA2, &wnd->capa.auth) ? + ", WPA2" : "", + test_bit(Ndis802_11AuthModeWPA2PSK, &wnd->capa.auth) ? + ", WPA2PSK" : ""); + + set_default_iw_params(wnd); + } + status = mp_query_int(wnd, OID_GEN_MEDIA_CONNECT_STATUS, (int *)buf); + if (status == NDIS_STATUS_SUCCESS) + set_media_state(wnd, *((int *)buf)); + kfree(buf); + wrap_procfs_add_ndis_device(wnd); + hangcheck_add(wnd); + add_iw_stats_timer(wnd); + EXIT1(return NDIS_STATUS_SUCCESS); + +buffer_pool_err: + wnd->tx_buffer_pool = NULL; + if (wnd->tx_packet_pool) { + NdisFreePacketPool(wnd->tx_packet_pool); + wnd->tx_packet_pool = NULL; + } +packet_pool_err: +err_register: + kfree(buf); +err_start: + ndis_remove_device(wnd); + EXIT1(return NDIS_STATUS_FAILURE); +} + +static int ndis_remove_device(struct ndis_device *wnd) +{ + s8 tx_pending; + + /* prevent setting essid during disassociation */ + memset(&wnd->essid, 0, sizeof(wnd->essid)); + wnd->tx_ok = 0; + if (wnd->max_tx_packets) + unregister_netdev(wnd->net_dev); + netif_carrier_off(wnd->net_dev); + /* if device is suspended, but resume failed, tx_ring_mutex + * may already be locked */ + if (down_trylock(&wnd->tx_ring_mutex)) + WARNING("couldn't obtain tx_ring_mutex"); + spin_lock_bh(&wnd->tx_ring_lock); + tx_pending = wnd->tx_ring_end - wnd->tx_ring_start; + if (tx_pending < 0) + tx_pending += TX_RING_SIZE; + else if (tx_pending == 0 && wnd->is_tx_ring_full) + tx_pending = TX_RING_SIZE - 1; + wnd->is_tx_ring_full = 0; + /* throw away pending packets */ + while (tx_pending-- > 0) { + struct ndis_packet *packet; + + packet = wnd->tx_ring[wnd->tx_ring_start]; + free_tx_packet(wnd, packet, NDIS_STATUS_CLOSING); + wnd->tx_ring_start = (wnd->tx_ring_start + 1) % TX_RING_SIZE; + } + spin_unlock_bh(&wnd->tx_ring_lock); + up(&wnd->tx_ring_mutex); + wrap_procfs_remove_ndis_device(wnd); + mp_halt(wnd); + ndis_exit_device(wnd); + + if (wnd->tx_packet_pool) { + NdisFreePacketPool(wnd->tx_packet_pool); + wnd->tx_packet_pool = NULL; + } + if (wnd->tx_buffer_pool) { + NdisFreeBufferPool(wnd->tx_buffer_pool); + wnd->tx_buffer_pool = NULL; + } + if (wnd->pmkids) + kfree(wnd->pmkids); + printk(KERN_INFO "%s: device %s removed\n", DRIVER_NAME, + wnd->net_dev->name); + kfree(wnd->nmb); + free_netdev(wnd->net_dev); + EXIT2(return 0); +} + +static wstdcall NTSTATUS NdisAddDevice(struct driver_object *drv_obj, + struct device_object *pdo) +{ + struct device_object *fdo; + struct ndis_mp_block *nmb; + NTSTATUS status; + struct ndis_device *wnd; + struct net_device *net_dev; + struct wrap_device *wd; + unsigned long i; + + ENTER2("%p, %p", drv_obj, pdo); + if (strlen(if_name) >= IFNAMSIZ) { + ERROR("interface name '%s' is too long", if_name); + return STATUS_INVALID_PARAMETER; + } + net_dev = alloc_etherdev(sizeof(*wnd)); + if (!net_dev) { + ERROR("couldn't allocate device"); + return STATUS_RESOURCES; + } + wd = pdo->reserved; + if (wrap_is_pci_bus(wd->dev_bus)) + SET_NETDEV_DEV(net_dev, &wd->pci.pdev->dev); + if (wrap_is_usb_bus(wd->dev_bus)) + SET_NETDEV_DEV(net_dev, &wd->usb.intf->dev); + status = IoCreateDevice(drv_obj, 0, NULL, FILE_DEVICE_UNKNOWN, 0, + FALSE, &fdo); + if (status != STATUS_SUCCESS) { + free_netdev(net_dev); + EXIT2(return status); + } + wnd = netdev_priv(net_dev); + TRACE1("wnd: %p", wnd); + + nmb = kmalloc(sizeof(*nmb), GFP_KERNEL); + if (!nmb) { + WARNING("couldn't allocate memory"); + IoDeleteDevice(fdo); + free_netdev(net_dev); + return STATUS_RESOURCES; + } +#if defined(DEBUG) && DEBUG >= 6 + /* poison nmb so if a driver accesses uninitialized pointers, we + * know what it is */ + for (i = 0; i < sizeof(*nmb) / sizeof(unsigned long); i++) + ((unsigned long *)nmb)[i] = i + 0x8a3fc1; +#endif + + wnd->nmb = nmb; + nmb->wnd = wnd; + nmb->pdo = pdo; + wd->wnd = wnd; + wnd->wd = wd; + wnd->net_dev = net_dev; + fdo->reserved = wnd; + nmb->fdo = fdo; + if (ndis_init_device(wnd)) { + IoDeleteDevice(fdo); + kfree(nmb); + free_netdev(net_dev); + EXIT1(return STATUS_RESOURCES); + } + nmb->next_device = IoAttachDeviceToDeviceStack(fdo, pdo); + spin_lock_init(&wnd->tx_ring_lock); + init_MUTEX(&wnd->tx_ring_mutex); + init_MUTEX(&wnd->ndis_req_mutex); + wnd->ndis_req_done = 0; + initialize_work(&wnd->tx_work, tx_worker, wnd); + wnd->tx_ring_start = 0; + wnd->tx_ring_end = 0; + wnd->is_tx_ring_full = 0; + wnd->capa.encr = 0; + wnd->capa.auth = 0; + wnd->attributes = 0; + wnd->dma_map_count = 0; + wnd->dma_map_addr = NULL; + wnd->nick[0] = 0; + init_timer(&wnd->hangcheck_timer); + wnd->scan_timestamp = 0; + init_timer(&wnd->iw_stats_timer); + wnd->iw_stats_interval = 10 * HZ; + wnd->ndis_pending_work = 0; + memset(&wnd->essid, 0, sizeof(wnd->essid)); + memset(&wnd->encr_info, 0, sizeof(wnd->encr_info)); + wnd->infrastructure_mode = Ndis802_11Infrastructure; + initialize_work(&wnd->ndis_work, ndis_worker, wnd); + wnd->iw_stats_enabled = TRUE; + + TRACE1("nmb: %p, pdo: %p, fdo: %p, attached: %p, next: %p", + nmb, pdo, fdo, fdo->attached, nmb->next_device); + + /* dispatch routines are called as Windows functions */ + for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) + drv_obj->major_func[i] = WIN_FUNC_PTR(IoPassIrpDown,2); + + drv_obj->major_func[IRP_MJ_PNP] = WIN_FUNC_PTR(NdisDispatchPnp,2); + drv_obj->major_func[IRP_MJ_POWER] = WIN_FUNC_PTR(NdisDispatchPower,2); + drv_obj->major_func[IRP_MJ_INTERNAL_DEVICE_CONTROL] = + WIN_FUNC_PTR(NdisDispatchDeviceControl,2); +// drv_obj->major_func[IRP_MJ_DEVICE_CONTROL] = +// WIN_FUNC_PTR(NdisDispatchDeviceControl,2); + EXIT2(return STATUS_SUCCESS); +} + +int init_ndis_driver(struct driver_object *drv_obj) +{ + ENTER1("%p", drv_obj); + drv_obj->drv_ext->add_device = NdisAddDevice; + return 0; +} + +int wrapndis_init(void) +{ + wrapndis_wq = create_singlethread_workqueue("wrapndis_wq"); + if (!wrapndis_wq) + EXIT1(return -ENOMEM); + wrapndis_worker_thread = wrap_worker_init(wrapndis_wq); + TRACE1("%p", wrapndis_worker_thread); + register_netdevice_notifier(&netdev_notifier); + return 0; +} + +void wrapndis_exit(void) +{ + unregister_netdevice_notifier(&netdev_notifier); + if (wrapndis_wq) + destroy_workqueue(wrapndis_wq); + TRACE1("%p", wrapndis_worker_thread); + if (wrapndis_worker_thread) + ObDereferenceObject(wrapndis_worker_thread); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/ntoskernel.c +++ linux-2.6.32/ubuntu/ndiswrapper/ntoskernel.c @@ -0,0 +1,2683 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ntoskernel.h" +#include "ndis.h" +#include "usb.h" +#include "pnp.h" +#include "loader.h" +#include "ntoskernel_exports.h" + +/* MDLs describe a range of virtual address with an array of physical + * pages right after the header. For different ranges of virtual + * addresses, the number of entries of physical pages may be different + * (depending on number of entries required). If we want to allocate + * MDLs from a pool, the size has to be constant. So we assume that + * maximum range used by a driver is MDL_CACHE_PAGES; if a driver + * requests an MDL for a bigger region, we allocate it with kmalloc; + * otherwise, we allocate from the pool */ + +#define MDL_CACHE_PAGES 3 +#define MDL_CACHE_SIZE (sizeof(struct mdl) + \ + (sizeof(PFN_NUMBER) * MDL_CACHE_PAGES)) +struct wrap_mdl { + struct nt_list list; + struct mdl mdl[0]; +}; + +/* everything here is for all drivers/devices - not per driver/device */ +static spinlock_t dispatcher_lock; +spinlock_t ntoskernel_lock; +static void *mdl_cache; +static struct nt_list wrap_mdl_list; + +static work_struct_t kdpc_work; +static void kdpc_worker(worker_param_t dummy); + +static struct nt_list kdpc_list; +static spinlock_t kdpc_list_lock; + +static struct nt_list callback_objects; + +struct nt_list object_list; + +struct bus_driver { + struct nt_list list; + char name[MAX_DRIVER_NAME_LEN]; + struct driver_object drv_obj; +}; + +static struct nt_list bus_driver_list; + +static work_struct_t ntos_work; +static struct nt_list ntos_work_list; +static spinlock_t ntos_work_lock; +static void ntos_work_worker(worker_param_t dummy); +static struct nt_thread *ntos_worker_thread; +spinlock_t irp_cancel_lock; +static NT_SPIN_LOCK nt_list_lock; +static struct nt_slist wrap_timer_slist; + +/* compute ticks (100ns) since 1601 until when system booted into + * wrap_ticks_to_boot */ +u64 wrap_ticks_to_boot; + +#if defined(CONFIG_X86_64) +static struct timer_list shared_data_timer; +struct kuser_shared_data kuser_shared_data; +static void update_user_shared_data_proc(unsigned long data); +#endif + +WIN_SYMBOL_MAP("KeTickCount", &jiffies) + +WIN_SYMBOL_MAP("NlsMbCodePageTag", FALSE) + +workqueue_struct_t *ntos_wq; + +#ifdef WRAP_PREEMPT +DEFINE_PER_CPU(irql_info_t, irql_info); +#endif + +#if defined(CONFIG_X86_64) +static void update_user_shared_data_proc(unsigned long data) +{ + /* timer is supposed to be scheduled every 10ms, but bigger + * intervals seem to work (tried upto 50ms) */ + *((ULONG64 *)&kuser_shared_data.system_time) = ticks_1601(); + *((ULONG64 *)&kuser_shared_data.interrupt_time) = + jiffies * TICKSPERSEC / HZ; + *((ULONG64 *)&kuser_shared_data.tick) = jiffies; + + mod_timer(&shared_data_timer, jiffies + MSEC_TO_HZ(30)); +} +#endif + +void *allocate_object(ULONG size, enum common_object_type type, + struct unicode_string *name) +{ + struct common_object_header *hdr; + void *body; + + /* we pad header as prefix to body */ + hdr = ExAllocatePoolWithTag(NonPagedPool, OBJECT_SIZE(size), 0); + if (!hdr) { + WARNING("couldn't allocate memory"); + return NULL; + } + memset(hdr, 0, OBJECT_SIZE(size)); + if (name) { + hdr->name.buf = ExAllocatePoolWithTag(NonPagedPool, + name->max_length, 0); + if (!hdr->name.buf) { + ExFreePool(hdr); + return NULL; + } + memcpy(hdr->name.buf, name->buf, name->max_length); + hdr->name.length = name->length; + hdr->name.max_length = name->max_length; + } + hdr->type = type; + hdr->ref_count = 1; + spin_lock_bh(&ntoskernel_lock); + /* threads are looked up often (in KeWaitForXXX), so optimize + * for fast lookups of threads */ + if (type == OBJECT_TYPE_NT_THREAD) + InsertHeadList(&object_list, &hdr->list); + else + InsertTailList(&object_list, &hdr->list); + spin_unlock_bh(&ntoskernel_lock); + body = HEADER_TO_OBJECT(hdr); + TRACE3("allocated hdr: %p, body: %p", hdr, body); + return body; +} + +void free_object(void *object) +{ + struct common_object_header *hdr; + + hdr = OBJECT_TO_HEADER(object); + spin_lock_bh(&ntoskernel_lock); + RemoveEntryList(&hdr->list); + spin_unlock_bh(&ntoskernel_lock); + TRACE3("freed hdr: %p, body: %p", hdr, object); + if (hdr->name.buf) + ExFreePool(hdr->name.buf); + ExFreePool(hdr); +} + +static int add_bus_driver(const char *name) +{ + struct bus_driver *bus_driver; + + bus_driver = kzalloc(sizeof(*bus_driver), GFP_KERNEL); + if (!bus_driver) { + ERROR("couldn't allocate memory"); + return -ENOMEM; + } + strncpy(bus_driver->name, name, sizeof(bus_driver->name)); + bus_driver->name[sizeof(bus_driver->name)-1] = 0; + spin_lock_bh(&ntoskernel_lock); + InsertTailList(&bus_driver_list, &bus_driver->list); + spin_unlock_bh(&ntoskernel_lock); + TRACE1("bus driver %s is at %p", name, &bus_driver->drv_obj); + return STATUS_SUCCESS; +} + +struct driver_object *find_bus_driver(const char *name) +{ + struct bus_driver *bus_driver; + struct driver_object *drv_obj; + + spin_lock_bh(&ntoskernel_lock); + drv_obj = NULL; + nt_list_for_each_entry(bus_driver, &bus_driver_list, list) { + if (strcmp(bus_driver->name, name) == 0) { + drv_obj = &bus_driver->drv_obj; + break; + } + } + spin_unlock_bh(&ntoskernel_lock); + return drv_obj; +} + +wfastcall struct nt_list *WIN_FUNC(ExfInterlockedInsertHeadList,3) + (struct nt_list *head, struct nt_list *entry, NT_SPIN_LOCK *lock) +{ + struct nt_list *first; + unsigned long flags; + + ENTER5("head = %p, entry = %p", head, entry); + nt_spin_lock_irqsave(lock, flags); + first = InsertHeadList(head, entry); + nt_spin_unlock_irqrestore(lock, flags); + TRACE5("head = %p, old = %p", head, first); + return first; +} + +wfastcall struct nt_list *WIN_FUNC(ExInterlockedInsertHeadList,3) + (struct nt_list *head, struct nt_list *entry, NT_SPIN_LOCK *lock) +{ + ENTER5("%p", head); + return ExfInterlockedInsertHeadList(head, entry, lock); +} + +wfastcall struct nt_list *WIN_FUNC(ExfInterlockedInsertTailList,3) + (struct nt_list *head, struct nt_list *entry, NT_SPIN_LOCK *lock) +{ + struct nt_list *last; + unsigned long flags; + + ENTER5("head = %p, entry = %p", head, entry); + nt_spin_lock_irqsave(lock, flags); + last = InsertTailList(head, entry); + nt_spin_unlock_irqrestore(lock, flags); + TRACE5("head = %p, old = %p", head, last); + return last; +} + +wfastcall struct nt_list *WIN_FUNC(ExInterlockedInsertTailList,3) + (struct nt_list *head, struct nt_list *entry, NT_SPIN_LOCK *lock) +{ + ENTER5("%p", head); + return ExfInterlockedInsertTailList(head, entry, lock); +} + +wfastcall struct nt_list *WIN_FUNC(ExfInterlockedRemoveHeadList,2) + (struct nt_list *head, NT_SPIN_LOCK *lock) +{ + struct nt_list *ret; + unsigned long flags; + + ENTER5("head = %p", head); + nt_spin_lock_irqsave(lock, flags); + ret = RemoveHeadList(head); + nt_spin_unlock_irqrestore(lock, flags); + TRACE5("head = %p, ret = %p", head, ret); + return ret; +} + +wfastcall struct nt_list *WIN_FUNC(ExInterlockedRemoveHeadList,2) + (struct nt_list *head, NT_SPIN_LOCK *lock) +{ + ENTER5("%p", head); + return ExfInterlockedRemoveHeadList(head, lock); +} + +wfastcall struct nt_list *WIN_FUNC(ExfInterlockedRemoveTailList,2) + (struct nt_list *head, NT_SPIN_LOCK *lock) +{ + struct nt_list *ret; + unsigned long flags; + + ENTER5("head = %p", head); + nt_spin_lock_irqsave(lock, flags); + ret = RemoveTailList(head); + nt_spin_unlock_irqrestore(lock, flags); + TRACE5("head = %p, ret = %p", head, ret); + return ret; +} + +wfastcall struct nt_list *WIN_FUNC(ExInterlockedRemoveTailList,2) + (struct nt_list *head, NT_SPIN_LOCK *lock) +{ + ENTER5("%p", head); + return ExfInterlockedRemoveTailList(head, lock); +} + +wfastcall void WIN_FUNC(InitializeSListHead,1) + (nt_slist_header *head) +{ + memset(head, 0, sizeof(*head)); +} + +wfastcall struct nt_slist *WIN_FUNC(ExInterlockedPushEntrySList,3) + (nt_slist_header *head, struct nt_slist *entry, NT_SPIN_LOCK *lock) +{ + struct nt_slist *ret; + + ret = PushEntrySList(head, entry, lock); + return ret; +} + +wstdcall struct nt_slist *WIN_FUNC(ExpInterlockedPushEntrySList,2) + (nt_slist_header *head, struct nt_slist *entry) +{ + struct nt_slist *ret; + + ret = PushEntrySList(head, entry, &nt_list_lock); + return ret; +} + +wfastcall struct nt_slist *WIN_FUNC(InterlockedPushEntrySList,2) + (nt_slist_header *head, struct nt_slist *entry) +{ + struct nt_slist *ret; + + ret = PushEntrySList(head, entry, &nt_list_lock); + return ret; +} + +wfastcall struct nt_slist *WIN_FUNC(ExInterlockedPopEntrySList,2) + (nt_slist_header *head, NT_SPIN_LOCK *lock) +{ + struct nt_slist *ret; + + ret = PopEntrySList(head, lock); + return ret; +} + +wstdcall struct nt_slist *WIN_FUNC(ExpInterlockedPopEntrySList,1) + (nt_slist_header *head) +{ + struct nt_slist *ret; + + ret = PopEntrySList(head, &nt_list_lock); + return ret; +} + +wfastcall struct nt_slist *WIN_FUNC(InterlockedPopEntrySList,1) + (nt_slist_header *head) +{ + struct nt_slist *ret; + + ret = PopEntrySList(head, &nt_list_lock); + return ret; +} + +wstdcall USHORT WIN_FUNC(ExQueryDepthSList,1) + (nt_slist_header *head) +{ + USHORT depth; + ENTER5("%p", head); + depth = head->depth; + TRACE5("%d, %p", depth, head->next); + return depth; +} + +wfastcall LONG WIN_FUNC(InterlockedIncrement,1) + (LONG volatile *val) +{ + return post_atomic_add(*val, 1); +} + +wfastcall LONG WIN_FUNC(InterlockedDecrement,1) + (LONG volatile *val) +{ + return post_atomic_add(*val, -1); +} + +wfastcall LONG WIN_FUNC(InterlockedExchange,2) + (LONG volatile *target, LONG val) +{ + return xchg(target, val); +} + +wfastcall LONG WIN_FUNC(InterlockedCompareExchange,3) + (LONG volatile *dest, LONG new, LONG old) +{ + return cmpxchg(dest, old, new); +} + +wfastcall void WIN_FUNC(ExInterlockedAddLargeStatistic,2) + (LARGE_INTEGER volatile *plint, ULONG n) +{ + unsigned long flags; + + local_irq_save(flags); +#ifdef CONFIG_X86_64 + __asm__ __volatile__( + "\n" + LOCK_PREFIX "add %1, %0\n\t" + : "+m" (*plint) + : "r" (n)); +#else + __asm__ __volatile__( + "1:\t" + " movl %1, %%ebx\n\t" + " movl %%edx, %%ecx\n\t" + " addl %%eax, %%ebx\n\t" + " adcl $0, %%ecx\n\t" + LOCK_PREFIX "cmpxchg8b %0\n\t" + " jnz 1b\n\t" + : "+m" (*plint) + : "m" (n), "A" (*plint) + : "ebx", "ecx"); +#endif + local_irq_restore(flags); +} + +static void initialize_object(struct dispatcher_header *dh, enum dh_type type, + int state) +{ + memset(dh, 0, sizeof(*dh)); + set_object_type(dh, type); + dh->signal_state = state; + InitializeListHead(&dh->wait_blocks); +} + +static void timer_proc(unsigned long data) +{ + struct wrap_timer *wrap_timer = (struct wrap_timer *)data; + struct nt_timer *nt_timer; + struct kdpc *kdpc; + + nt_timer = wrap_timer->nt_timer; + TIMERENTER("%p(%p), %lu", wrap_timer, nt_timer, jiffies); +#ifdef TIMER_DEBUG + BUG_ON(wrap_timer->wrap_timer_magic != WRAP_TIMER_MAGIC); + BUG_ON(nt_timer->wrap_timer_magic != WRAP_TIMER_MAGIC); +#endif + KeSetEvent((struct nt_event *)nt_timer, 0, FALSE); + if (wrap_timer->repeat) + mod_timer(&wrap_timer->timer, jiffies + wrap_timer->repeat); + kdpc = nt_timer->kdpc; + if (kdpc) + queue_kdpc(kdpc); + TIMEREXIT(return); +} + +void wrap_init_timer(struct nt_timer *nt_timer, enum timer_type type, + struct ndis_mp_block *nmb) +{ + struct wrap_timer *wrap_timer; + + /* TODO: if a timer is initialized more than once, we allocate + * memory for wrap_timer more than once for the same nt_timer, + * wasting memory. We can check if nt_timer->wrap_timer_magic is + * set and not allocate, but it is not guaranteed always to be + * safe */ + TIMERENTER("%p", nt_timer); + /* we allocate memory for wrap_timer behind driver's back and + * there is no NDIS/DDK function where this memory can be + * freed, so we use slack_kmalloc so it gets freed when driver + * is unloaded */ + if (nmb) + wrap_timer = kmalloc(sizeof(*wrap_timer), irql_gfp()); + else + wrap_timer = slack_kmalloc(sizeof(*wrap_timer)); + if (!wrap_timer) { + ERROR("couldn't allocate memory for timer"); + return; + } + + memset(wrap_timer, 0, sizeof(*wrap_timer)); + init_timer(&wrap_timer->timer); + wrap_timer->timer.data = (unsigned long)wrap_timer; + wrap_timer->timer.function = timer_proc; + wrap_timer->nt_timer = nt_timer; +#ifdef TIMER_DEBUG + wrap_timer->wrap_timer_magic = WRAP_TIMER_MAGIC; +#endif + nt_timer->wrap_timer = wrap_timer; + nt_timer->kdpc = NULL; + initialize_object(&nt_timer->dh, type, 0); + nt_timer->wrap_timer_magic = WRAP_TIMER_MAGIC; + TIMERTRACE("timer %p (%p)", wrap_timer, nt_timer); + spin_lock_bh(&ntoskernel_lock); + if (nmb) { + wrap_timer->slist.next = nmb->wnd->wrap_timer_slist.next; + nmb->wnd->wrap_timer_slist.next = &wrap_timer->slist; + } else { + wrap_timer->slist.next = wrap_timer_slist.next; + wrap_timer_slist.next = &wrap_timer->slist; + } + spin_unlock_bh(&ntoskernel_lock); + TIMEREXIT(return); +} + +wstdcall void WIN_FUNC(KeInitializeTimerEx,2) + (struct nt_timer *nt_timer, enum timer_type type) +{ + TIMERENTER("%p", nt_timer); + wrap_init_timer(nt_timer, type, NULL); +} + +wstdcall void WIN_FUNC(KeInitializeTimer,1) + (struct nt_timer *nt_timer) +{ + TIMERENTER("%p", nt_timer); + wrap_init_timer(nt_timer, NotificationTimer, NULL); +} + +/* expires and repeat are in HZ */ +BOOLEAN wrap_set_timer(struct nt_timer *nt_timer, unsigned long expires_hz, + unsigned long repeat_hz, struct kdpc *kdpc) +{ + struct wrap_timer *wrap_timer; + + TIMERENTER("%p, %lu, %lu, %p, %lu", + nt_timer, expires_hz, repeat_hz, kdpc, jiffies); + + wrap_timer = nt_timer->wrap_timer; + TIMERTRACE("%p", wrap_timer); +#ifdef TIMER_DEBUG + if (wrap_timer->nt_timer != nt_timer) + WARNING("bad timers: %p, %p, %p", wrap_timer, nt_timer, + wrap_timer->nt_timer); + if (nt_timer->wrap_timer_magic != WRAP_TIMER_MAGIC) { + WARNING("buggy Windows timer didn't initialize timer %p", + nt_timer); + return FALSE; + } + if (wrap_timer->wrap_timer_magic != WRAP_TIMER_MAGIC) { + WARNING("timer %p is not initialized (%lx)?", + wrap_timer, wrap_timer->wrap_timer_magic); + wrap_timer->wrap_timer_magic = WRAP_TIMER_MAGIC; + } +#endif + KeClearEvent((struct nt_event *)nt_timer); + nt_timer->kdpc = kdpc; + wrap_timer->repeat = repeat_hz; + if (mod_timer(&wrap_timer->timer, jiffies + expires_hz)) + TIMEREXIT(return TRUE); + else + TIMEREXIT(return FALSE); +} + +wstdcall BOOLEAN WIN_FUNC(KeSetTimerEx,4) + (struct nt_timer *nt_timer, LARGE_INTEGER duetime_ticks, + LONG period_ms, struct kdpc *kdpc) +{ + unsigned long expires_hz, repeat_hz; + + TIMERENTER("%p, %Ld, %d", nt_timer, duetime_ticks, period_ms); + expires_hz = SYSTEM_TIME_TO_HZ(duetime_ticks); + repeat_hz = MSEC_TO_HZ(period_ms); + return wrap_set_timer(nt_timer, expires_hz, repeat_hz, kdpc); +} + +wstdcall BOOLEAN WIN_FUNC(KeSetTimer,3) + (struct nt_timer *nt_timer, LARGE_INTEGER duetime_ticks, + struct kdpc *kdpc) +{ + TIMERENTER("%p, %Ld, %p", nt_timer, duetime_ticks, kdpc); + return KeSetTimerEx(nt_timer, duetime_ticks, 0, kdpc); +} + +wstdcall BOOLEAN WIN_FUNC(KeCancelTimer,1) + (struct nt_timer *nt_timer) +{ + struct wrap_timer *wrap_timer; + int ret; + + TIMERENTER("%p", nt_timer); + wrap_timer = nt_timer->wrap_timer; + if (!wrap_timer) { + ERROR("invalid wrap_timer"); + return TRUE; + } +#ifdef TIMER_DEBUG + BUG_ON(wrap_timer->wrap_timer_magic != WRAP_TIMER_MAGIC); +#endif + /* disable timer before deleting so if it is periodic timer, it + * won't be re-armed after deleting */ + wrap_timer->repeat = 0; + ret = del_timer_sync(&wrap_timer->timer); + /* the documentation for KeCancelTimer suggests the DPC is + * deqeued, but actually DPC is left to run */ + if (ret) + TIMEREXIT(return TRUE); + else + TIMEREXIT(return FALSE); +} + +wstdcall BOOLEAN WIN_FUNC(KeReadStateTimer,1) + (struct nt_timer *nt_timer) +{ + if (nt_timer->dh.signal_state) + return TRUE; + else + return FALSE; +} + +wstdcall void WIN_FUNC(KeInitializeDpc,3) + (struct kdpc *kdpc, void *func, void *ctx) +{ + ENTER3("%p, %p, %p", kdpc, func, ctx); + memset(kdpc, 0, sizeof(*kdpc)); + kdpc->func = func; + kdpc->ctx = ctx; + InitializeListHead(&kdpc->list); +} + +static void kdpc_worker(worker_param_t dummy) +{ + struct nt_list *entry; + struct kdpc *kdpc; + unsigned long flags; + KIRQL irql; + + WORKENTER(""); + irql = raise_irql(DISPATCH_LEVEL); + while (1) { + spin_lock_irqsave(&kdpc_list_lock, flags); + entry = RemoveHeadList(&kdpc_list); + if (entry) { + kdpc = container_of(entry, struct kdpc, list); + assert(kdpc->queued); + kdpc->queued = 0; + } else + kdpc = NULL; + spin_unlock_irqrestore(&kdpc_list_lock, flags); + if (!kdpc) + break; + WORKTRACE("%p, %p, %p, %p, %p", kdpc, kdpc->func, kdpc->ctx, + kdpc->arg1, kdpc->arg2); + assert_irql(_irql_ == DISPATCH_LEVEL); + LIN2WIN4(kdpc->func, kdpc, kdpc->ctx, kdpc->arg1, kdpc->arg2); + assert_irql(_irql_ == DISPATCH_LEVEL); + } + lower_irql(irql); + WORKEXIT(return); +} + +wstdcall void WIN_FUNC(KeFlushQueuedDpcs,0) + (void) +{ + kdpc_worker(NULL); +} + +BOOLEAN queue_kdpc(struct kdpc *kdpc) +{ + BOOLEAN ret; + unsigned long flags; + + WORKENTER("%p", kdpc); + spin_lock_irqsave(&kdpc_list_lock, flags); + if (kdpc->queued) + ret = FALSE; + else { + if (unlikely(kdpc->importance == HighImportance)) + InsertHeadList(&kdpc_list, &kdpc->list); + else + InsertTailList(&kdpc_list, &kdpc->list); + kdpc->queued = 1; + ret = TRUE; + } + spin_unlock_irqrestore(&kdpc_list_lock, flags); + if (ret == TRUE) + schedule_ntos_work(&kdpc_work); + WORKTRACE("%d", ret); + return ret; +} + +BOOLEAN dequeue_kdpc(struct kdpc *kdpc) +{ + BOOLEAN ret; + unsigned long flags; + + WORKENTER("%p", kdpc); + spin_lock_irqsave(&kdpc_list_lock, flags); + if (kdpc->queued) { + RemoveEntryList(&kdpc->list); + kdpc->queued = 0; + ret = TRUE; + } else + ret = FALSE; + spin_unlock_irqrestore(&kdpc_list_lock, flags); + WORKTRACE("%d", ret); + return ret; +} + +wstdcall BOOLEAN WIN_FUNC(KeInsertQueueDpc,3) + (struct kdpc *kdpc, void *arg1, void *arg2) +{ + WORKENTER("%p, %p, %p", kdpc, arg1, arg2); + kdpc->arg1 = arg1; + kdpc->arg2 = arg2; + return queue_kdpc(kdpc); +} + +wstdcall BOOLEAN WIN_FUNC(KeRemoveQueueDpc,1) + (struct kdpc *kdpc) +{ + return dequeue_kdpc(kdpc); +} + +wstdcall void WIN_FUNC(KeSetImportanceDpc,2) + (struct kdpc *kdpc, enum kdpc_importance importance) +{ + kdpc->importance = importance; +} + +static void ntos_work_worker(worker_param_t dummy) +{ + struct ntos_work_item *ntos_work_item; + struct nt_list *cur; + + while (1) { + spin_lock_bh(&ntos_work_lock); + cur = RemoveHeadList(&ntos_work_list); + spin_unlock_bh(&ntos_work_lock); + if (!cur) + break; + ntos_work_item = container_of(cur, struct ntos_work_item, list); + WORKTRACE("%p: executing %p, %p, %p", current, + ntos_work_item->func, ntos_work_item->arg1, + ntos_work_item->arg2); + LIN2WIN2(ntos_work_item->func, ntos_work_item->arg1, + ntos_work_item->arg2); + kfree(ntos_work_item); + } + WORKEXIT(return); +} + +int schedule_ntos_work_item(NTOS_WORK_FUNC func, void *arg1, void *arg2) +{ + struct ntos_work_item *ntos_work_item; + + WORKENTER("adding work: %p, %p, %p", func, arg1, arg2); + ntos_work_item = kmalloc(sizeof(*ntos_work_item), irql_gfp()); + if (!ntos_work_item) { + ERROR("couldn't allocate memory"); + return -ENOMEM; + } + ntos_work_item->func = func; + ntos_work_item->arg1 = arg1; + ntos_work_item->arg2 = arg2; + spin_lock_bh(&ntos_work_lock); + InsertTailList(&ntos_work_list, &ntos_work_item->list); + spin_unlock_bh(&ntos_work_lock); + schedule_ntos_work(&ntos_work); + WORKEXIT(return 0); +} + +wstdcall void WIN_FUNC(KeInitializeSpinLock,1) + (NT_SPIN_LOCK *lock) +{ + ENTER6("%p", lock); + nt_spin_lock_init(lock); +} + +wstdcall void WIN_FUNC(KeAcquireSpinLock,2) + (NT_SPIN_LOCK *lock, KIRQL *irql) +{ + ENTER6("%p", lock); + *irql = nt_spin_lock_irql(lock, DISPATCH_LEVEL); +} + +wstdcall void WIN_FUNC(KeReleaseSpinLock,2) + (NT_SPIN_LOCK *lock, KIRQL oldirql) +{ + ENTER6("%p", lock); + nt_spin_unlock_irql(lock, oldirql); +} + +wstdcall void WIN_FUNC(KeAcquireSpinLockAtDpcLevel,1) + (NT_SPIN_LOCK *lock) +{ + ENTER6("%p", lock); + nt_spin_lock(lock); +} + +wstdcall void WIN_FUNC(KeReleaseSpinLockFromDpcLevel,1) + (NT_SPIN_LOCK *lock) +{ + ENTER6("%p", lock); + nt_spin_unlock(lock); +} + +wstdcall void WIN_FUNC(KeRaiseIrql,2) + (KIRQL newirql, KIRQL *oldirql) +{ + ENTER6("%d", newirql); + *oldirql = raise_irql(newirql); +} + +wstdcall KIRQL WIN_FUNC(KeRaiseIrqlToDpcLevel,0) + (void) +{ + return raise_irql(DISPATCH_LEVEL); +} + +wstdcall void WIN_FUNC(KeLowerIrql,1) + (KIRQL irql) +{ + ENTER6("%d", irql); + lower_irql(irql); +} + +wstdcall KIRQL WIN_FUNC(KeAcquireSpinLockRaiseToDpc,1) + (NT_SPIN_LOCK *lock) +{ + ENTER6("%p", lock); + return nt_spin_lock_irql(lock, DISPATCH_LEVEL); +} + +#undef ExAllocatePoolWithTag + +wstdcall void *WIN_FUNC(ExAllocatePoolWithTag,3) + (enum pool_type pool_type, SIZE_T size, ULONG tag) +{ + void *addr; + + ENTER4("pool_type: %d, size: %lu, tag: 0x%x", pool_type, size, tag); + assert_irql(_irql_ <= DISPATCH_LEVEL); + if (size < PAGE_SIZE) + addr = kmalloc(size, irql_gfp()); + else { + if (irql_gfp() & GFP_ATOMIC) { + addr = __vmalloc(size, GFP_ATOMIC | __GFP_HIGHMEM, + PAGE_KERNEL); + TRACE1("%p, %lu", addr, size); + } else { + addr = vmalloc(size); + TRACE1("%p, %lu", addr, size); + } + } + DBG_BLOCK(1) { + if (addr) + TRACE4("addr: %p, %lu", addr, size); + else + TRACE1("failed: %lu", size); + } + return addr; +} +WIN_FUNC_DECL(ExAllocatePoolWithTag,3) + +wstdcall void WIN_FUNC(ExFreePoolWithTag,2) + (void *addr, ULONG tag) +{ + TRACE4("%p", addr); + if ((unsigned long)addr < VMALLOC_START || + (unsigned long)addr >= VMALLOC_END) + kfree(addr); + else + vfree(addr); + + EXIT4(return); +} + +wstdcall void WIN_FUNC(ExFreePool,1) + (void *addr) +{ + ExFreePoolWithTag(addr, 0); +} +WIN_FUNC_DECL(ExFreePool,1) + +wstdcall void WIN_FUNC(ExInitializeNPagedLookasideList,7) + (struct npaged_lookaside_list *lookaside, + LOOKASIDE_ALLOC_FUNC *alloc_func, LOOKASIDE_FREE_FUNC *free_func, + ULONG flags, SIZE_T size, ULONG tag, USHORT depth) +{ + ENTER3("lookaside: %p, size: %lu, flags: %u, head: %p, " + "alloc: %p, free: %p", lookaside, size, flags, + lookaside, alloc_func, free_func); + + memset(lookaside, 0, sizeof(*lookaside)); + + lookaside->size = size; + lookaside->tag = tag; + lookaside->depth = 4; + lookaside->maxdepth = 256; + lookaside->pool_type = NonPagedPool; + + if (alloc_func) + lookaside->alloc_func = alloc_func; + else + lookaside->alloc_func = WIN_FUNC_PTR(ExAllocatePoolWithTag,3); + if (free_func) + lookaside->free_func = free_func; + else + lookaside->free_func = WIN_FUNC_PTR(ExFreePool,1); + +#ifndef CONFIG_X86_64 + nt_spin_lock_init(&lookaside->obsolete); +#endif + EXIT3(return); +} + +wstdcall void WIN_FUNC(ExDeleteNPagedLookasideList,1) + (struct npaged_lookaside_list *lookaside) +{ + struct nt_slist *entry; + + ENTER3("lookaside = %p", lookaside); + while ((entry = ExpInterlockedPopEntrySList(&lookaside->head))) + LIN2WIN1(lookaside->free_func, entry); + EXIT3(return); +} + +#if defined(ALLOC_DEBUG) && ALLOC_DEBUG > 1 +#define ExAllocatePoolWithTag(pool_type, size, tag) \ + wrap_ExAllocatePoolWithTag(pool_type, size, tag, __FILE__, __LINE__) +#endif + +wstdcall NTSTATUS WIN_FUNC(ExCreateCallback,4) + (struct callback_object **object, struct object_attributes *attributes, + BOOLEAN create, BOOLEAN allow_multiple_callbacks) +{ + struct callback_object *obj; + + ENTER2(""); + spin_lock_bh(&ntoskernel_lock); + nt_list_for_each_entry(obj, &callback_objects, callback_funcs) { + if (obj->attributes == attributes) { + spin_unlock_bh(&ntoskernel_lock); + *object = obj; + return STATUS_SUCCESS; + } + } + spin_unlock_bh(&ntoskernel_lock); + obj = allocate_object(sizeof(struct callback_object), + OBJECT_TYPE_CALLBACK, NULL); + if (!obj) + EXIT2(return STATUS_INSUFFICIENT_RESOURCES); + InitializeListHead(&obj->callback_funcs); + nt_spin_lock_init(&obj->lock); + obj->allow_multiple_callbacks = allow_multiple_callbacks; + obj->attributes = attributes; + *object = obj; + EXIT2(return STATUS_SUCCESS); +} + +wstdcall void *WIN_FUNC(ExRegisterCallback,3) + (struct callback_object *object, PCALLBACK_FUNCTION func, void *context) +{ + struct callback_func *callback; + KIRQL irql; + + ENTER2(""); + irql = nt_spin_lock_irql(&object->lock, DISPATCH_LEVEL); + if (object->allow_multiple_callbacks == FALSE && + !IsListEmpty(&object->callback_funcs)) { + nt_spin_unlock_irql(&object->lock, irql); + EXIT2(return NULL); + } + nt_spin_unlock_irql(&object->lock, irql); + callback = kmalloc(sizeof(*callback), GFP_KERNEL); + if (!callback) { + ERROR("couldn't allocate memory"); + return NULL; + } + callback->func = func; + callback->context = context; + callback->object = object; + irql = nt_spin_lock_irql(&object->lock, DISPATCH_LEVEL); + InsertTailList(&object->callback_funcs, &callback->list); + nt_spin_unlock_irql(&object->lock, irql); + EXIT2(return callback); +} + +wstdcall void WIN_FUNC(ExUnregisterCallback,1) + (struct callback_func *callback) +{ + struct callback_object *object; + KIRQL irql; + + ENTER3("%p", callback); + if (!callback) + return; + object = callback->object; + irql = nt_spin_lock_irql(&object->lock, DISPATCH_LEVEL); + RemoveEntryList(&callback->list); + nt_spin_unlock_irql(&object->lock, irql); + kfree(callback); + return; +} + +wstdcall void WIN_FUNC(ExNotifyCallback,3) + (struct callback_object *object, void *arg1, void *arg2) +{ + struct callback_func *callback; + KIRQL irql; + + ENTER3("%p", object); + irql = nt_spin_lock_irql(&object->lock, DISPATCH_LEVEL); + nt_list_for_each_entry(callback, &object->callback_funcs, list) { + LIN2WIN3(callback->func, callback->context, arg1, arg2); + } + nt_spin_unlock_irql(&object->lock, irql); + return; +} + +/* check and set signaled state; should be called with dispatcher_lock held */ +/* @grab indicates if the event should be grabbed or checked + * - note that a semaphore may stay in signaled state for multiple + * 'grabs' if the count is > 1 */ +static int grab_object(struct dispatcher_header *dh, + struct task_struct *thread, int grab) +{ + EVENTTRACE("%p, %p, %d, %d", dh, thread, grab, dh->signal_state); + if (unlikely(is_mutex_object(dh))) { + struct nt_mutex *nt_mutex; + nt_mutex = container_of(dh, struct nt_mutex, dh); + EVENTTRACE("%p, %p, %d, %p, %d", nt_mutex, + nt_mutex->owner_thread, dh->signal_state, + thread, grab); + /* either no thread owns the mutex or this thread owns + * it */ + assert(dh->signal_state == 1 && nt_mutex->owner_thread == NULL); + assert(dh->signal_state < 1 && nt_mutex->owner_thread != NULL); + if ((dh->signal_state == 1 && nt_mutex->owner_thread == NULL) || + nt_mutex->owner_thread == thread) { + if (grab) { + dh->signal_state--; + nt_mutex->owner_thread = thread; + } + EVENTEXIT(return 1); + } + } else if (dh->signal_state > 0) { + /* to grab, decrement signal_state for synchronization + * or semaphore objects */ + if (grab && (is_synch_object(dh) || is_semaphore_object(dh))) + dh->signal_state--; + EVENTEXIT(return 1); + } + EVENTEXIT(return 0); +} + +/* this function should be called holding dispatcher_lock */ +static void object_signalled(struct dispatcher_header *dh) +{ + struct nt_list *cur, *next; + struct wait_block *wb; + + EVENTENTER("%p", dh); + nt_list_for_each_safe(cur, next, &dh->wait_blocks) { + wb = container_of(cur, struct wait_block, list); + assert(wb->thread != NULL); + assert(wb->object == NULL); + if (!grab_object(dh, wb->thread, 1)) + continue; + EVENTTRACE("%p (%p): waking %p", dh, wb, wb->thread); + RemoveEntryList(cur); + wb->object = dh; + *(wb->wait_done) = 1; + wake_up_process(wb->thread); + } + EVENTEXIT(return); +} + +wstdcall NTSTATUS WIN_FUNC(KeWaitForMultipleObjects,8) + (ULONG count, void *object[], enum wait_type wait_type, + KWAIT_REASON wait_reason, KPROCESSOR_MODE wait_mode, + BOOLEAN alertable, LARGE_INTEGER *timeout, + struct wait_block *wait_block_array) +{ + int i, res = 0, wait_count, wait_done; + typeof(jiffies) wait_hz = 0; + struct wait_block *wb, wb_array[THREAD_WAIT_OBJECTS]; + struct dispatcher_header *dh; + + EVENTENTER("%p, %d, %u, %p", current, count, wait_type, timeout); + + if (count > MAX_WAIT_OBJECTS || + (count > THREAD_WAIT_OBJECTS && wait_block_array == NULL)) + EVENTEXIT(return STATUS_INVALID_PARAMETER); + + if (wait_block_array == NULL) + wb = wb_array; + else + wb = wait_block_array; + + /* If *timeout == 0: In the case of WaitAny, if an object can + * be grabbed (object is in signaled state), grab and + * return. In the case of WaitAll, we have to first make sure + * all objects can be grabbed. If any/some of them can't be + * grabbed, either we return STATUS_TIMEOUT or wait for them, + * depending on how to satisfy wait. If all of them can be + * grabbed, we will grab them in the next loop below */ + + spin_lock_bh(&dispatcher_lock); + for (i = wait_count = 0; i < count; i++) { + dh = object[i]; + EVENTTRACE("%p: event %p (%d)", current, dh, dh->signal_state); + /* wait_type == 1 for WaitAny, 0 for WaitAll */ + if (grab_object(dh, current, wait_type)) { + if (wait_type == WaitAny) { + spin_unlock_bh(&dispatcher_lock); + EVENTEXIT(return STATUS_WAIT_0 + i); + } + } else { + EVENTTRACE("%p: wait for %p", current, dh); + wait_count++; + } + } + + if (timeout && *timeout == 0 && wait_count) { + spin_unlock_bh(&dispatcher_lock); + EVENTEXIT(return STATUS_TIMEOUT); + } + + /* get the list of objects the thread needs to wait on and add + * the thread on the wait list for each such object */ + /* if *timeout == 0, this step will grab all the objects */ + wait_done = 0; + for (i = 0; i < count; i++) { + dh = object[i]; + EVENTTRACE("%p: event %p (%d)", current, dh, dh->signal_state); + wb[i].object = NULL; + if (grab_object(dh, current, 1)) { + EVENTTRACE("%p: no wait for %p (%d)", + current, dh, dh->signal_state); + /* mark that we are not waiting on this object */ + wb[i].thread = NULL; + } else { + wb[i].wait_done = &wait_done; + wb[i].thread = current; + EVENTTRACE("%p: wait for %p", current, dh); + InsertTailList(&dh->wait_blocks, &wb[i].list); + } + } + spin_unlock_bh(&dispatcher_lock); + if (wait_count == 0) + EVENTEXIT(return STATUS_SUCCESS); + + assert(timeout == NULL || *timeout != 0); + if (timeout == NULL) + wait_hz = 0; + else + wait_hz = SYSTEM_TIME_TO_HZ(*timeout); + + DBG_BLOCK(2) { + KIRQL irql = current_irql(); + if (irql >= DISPATCH_LEVEL) { + TRACE2("wait in atomic context: %lu, %d, %ld", + wait_hz, in_atomic(), in_interrupt()); + } + } + assert_irql(_irql_ < DISPATCH_LEVEL); + EVENTTRACE("%p: sleep for %ld on %p", current, wait_hz, &wait_done); + /* we don't honor 'alertable' - according to decription for + * this, even if waiting in non-alertable state, thread may be + * alerted in some circumstances */ + while (wait_count) { + res = wait_condition(wait_done, wait_hz, TASK_INTERRUPTIBLE); + spin_lock_bh(&dispatcher_lock); + EVENTTRACE("%p woke up: %d, %d", current, res, wait_done); + /* the event may have been set by the time + * wrap_wait_event returned and spinlock obtained, so + * don't rely on value of 'res' - check event status */ + if (!wait_done) { + assert(res <= 0); + /* timed out or interrupted; remove from wait list */ + for (i = 0; i < count; i++) { + if (!wb[i].thread) + continue; + EVENTTRACE("%p: timedout, dequeue %p (%p)", + current, object[i], wb[i].object); + assert(wb[i].object == NULL); + RemoveEntryList(&wb[i].list); + } + spin_unlock_bh(&dispatcher_lock); + if (res < 0) + EVENTEXIT(return STATUS_ALERTED); + else + EVENTEXIT(return STATUS_TIMEOUT); + } + assert(res > 0); + /* woken because object(s) signalled */ + for (i = 0; wait_count && i < count; i++) { + if (!wb[i].thread || !wb[i].object) + continue; + DBG_BLOCK(1) { + if (wb[i].object != object[i]) { + EVENTTRACE("oops %p != %p", + wb[i].object, object[i]); + continue; + } + } + wait_count--; + if (wait_type == WaitAny) { + int j; + /* done; remove from rest of wait list */ + for (j = i + 1; j < count; j++) { + if (wb[j].thread && !wb[j].object) + RemoveEntryList(&wb[j].list); + } + spin_unlock_bh(&dispatcher_lock); + EVENTEXIT(return STATUS_WAIT_0 + i); + } + } + wait_done = 0; + spin_unlock_bh(&dispatcher_lock); + if (wait_count == 0) + EVENTEXIT(return STATUS_SUCCESS); + + /* this thread is still waiting for more objects, so + * let it wait for remaining time and those objects */ + if (timeout) + wait_hz = res; + else + wait_hz = 0; + } + /* should never reach here, but compiler wants return value */ + ERROR("%p: wait_hz: %ld", current, wait_hz); + EVENTEXIT(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(KeWaitForSingleObject,5) + (void *object, KWAIT_REASON wait_reason, KPROCESSOR_MODE wait_mode, + BOOLEAN alertable, LARGE_INTEGER *timeout) +{ + return KeWaitForMultipleObjects(1, &object, WaitAny, wait_reason, + wait_mode, alertable, timeout, NULL); +} + +wstdcall void WIN_FUNC(KeInitializeEvent,3) + (struct nt_event *nt_event, enum event_type type, BOOLEAN state) +{ + EVENTENTER("event = %p, type = %d, state = %d", nt_event, type, state); + initialize_object(&nt_event->dh, type, state); + EVENTEXIT(return); +} + +wstdcall LONG WIN_FUNC(KeSetEvent,3) + (struct nt_event *nt_event, KPRIORITY incr, BOOLEAN wait) +{ + LONG old_state; + + EVENTENTER("%p, %d", nt_event, nt_event->dh.type); + if (wait == TRUE) + WARNING("wait = %d, not yet implemented", wait); + spin_lock_bh(&dispatcher_lock); + old_state = nt_event->dh.signal_state; + nt_event->dh.signal_state = 1; + if (old_state == 0) + object_signalled(&nt_event->dh); + spin_unlock_bh(&dispatcher_lock); + EVENTEXIT(return old_state); +} + +wstdcall void WIN_FUNC(KeClearEvent,1) + (struct nt_event *nt_event) +{ + EVENTENTER("%p", nt_event); + nt_event->dh.signal_state = 0; + EVENTEXIT(return); +} + +wstdcall LONG WIN_FUNC(KeResetEvent,1) + (struct nt_event *nt_event) +{ + LONG old_state; + + EVENTENTER("%p", nt_event); + old_state = xchg(&nt_event->dh.signal_state, 0); + EVENTEXIT(return old_state); +} + +wstdcall LONG WIN_FUNC(KeReadStateEvent,1) + (struct nt_event *nt_event) +{ + LONG state; + + state = nt_event->dh.signal_state; + EVENTTRACE("%d", state); + return state; +} + +wstdcall void WIN_FUNC(KeInitializeMutex,2) + (struct nt_mutex *mutex, ULONG level) +{ + EVENTENTER("%p", mutex); + initialize_object(&mutex->dh, MutexObject, 1); + mutex->dh.size = sizeof(*mutex); + InitializeListHead(&mutex->list); + mutex->abandoned = FALSE; + mutex->apc_disable = 1; + mutex->owner_thread = NULL; + EVENTEXIT(return); +} + +wstdcall LONG WIN_FUNC(KeReleaseMutex,2) + (struct nt_mutex *mutex, BOOLEAN wait) +{ + LONG ret; + struct task_struct *thread; + + EVENTENTER("%p, %d, %p", mutex, wait, current); + if (wait == TRUE) + WARNING("wait: %d", wait); + thread = current; + spin_lock_bh(&dispatcher_lock); + EVENTTRACE("%p, %p, %p, %d", mutex, thread, mutex->owner_thread, + mutex->dh.signal_state); + if ((mutex->owner_thread == thread) && (mutex->dh.signal_state <= 0)) { + ret = mutex->dh.signal_state++; + if (ret == 0) { + mutex->owner_thread = NULL; + object_signalled(&mutex->dh); + } + } else { + ret = STATUS_MUTANT_NOT_OWNED; + WARNING("invalid mutex: %p, %p, %p", mutex, mutex->owner_thread, + thread); + } + EVENTTRACE("%p, %p, %p, %d", mutex, thread, mutex->owner_thread, + mutex->dh.signal_state); + spin_unlock_bh(&dispatcher_lock); + EVENTEXIT(return ret); +} + +wstdcall void WIN_FUNC(KeInitializeSemaphore,3) + (struct nt_semaphore *semaphore, LONG count, LONG limit) +{ + EVENTENTER("%p: %d", semaphore, count); + /* if limit > 1, we need to satisfy as many waits (until count + * becomes 0); so we keep decrementing count everytime a wait + * is satisified */ + initialize_object(&semaphore->dh, SemaphoreObject, count); + semaphore->dh.size = sizeof(*semaphore); + semaphore->limit = limit; + EVENTEXIT(return); +} + +wstdcall LONG WIN_FUNC(KeReleaseSemaphore,4) + (struct nt_semaphore *semaphore, KPRIORITY incr, LONG adjustment, + BOOLEAN wait) +{ + LONG ret; + + EVENTENTER("%p", semaphore); + spin_lock_bh(&dispatcher_lock); + ret = semaphore->dh.signal_state; + assert(ret >= 0); + if (semaphore->dh.signal_state + adjustment <= semaphore->limit) + semaphore->dh.signal_state += adjustment; + else { + WARNING("releasing %d over limit %d", adjustment, + semaphore->limit); + semaphore->dh.signal_state = semaphore->limit; + } + if (semaphore->dh.signal_state > 0) + object_signalled(&semaphore->dh); + spin_unlock_bh(&dispatcher_lock); + EVENTEXIT(return ret); +} + +wstdcall NTSTATUS WIN_FUNC(KeDelayExecutionThread,3) + (KPROCESSOR_MODE wait_mode, BOOLEAN alertable, LARGE_INTEGER *interval) +{ + int res; + long timeout; + + if (wait_mode != 0) + ERROR("invalid wait_mode %d", wait_mode); + + timeout = SYSTEM_TIME_TO_HZ(*interval); + EVENTTRACE("%p, %Ld, %ld", current, *interval, timeout); + if (timeout <= 0) + EVENTEXIT(return STATUS_SUCCESS); + + if (alertable) + set_current_state(TASK_INTERRUPTIBLE); + else + set_current_state(TASK_UNINTERRUPTIBLE); + + res = schedule_timeout(timeout); + EVENTTRACE("%p, %d", current, res); + if (res == 0) + EVENTEXIT(return STATUS_SUCCESS); + else + EVENTEXIT(return STATUS_ALERTED); +} + +wstdcall ULONGLONG WIN_FUNC(KeQueryInterruptTime,0) + (void) +{ + EXIT5(return jiffies * TICKSPERJIFFY); +} + +wstdcall ULONG WIN_FUNC(KeQueryTimeIncrement,0) + (void) +{ + EXIT5(return TICKSPERSEC / HZ); +} + +wstdcall void WIN_FUNC(KeQuerySystemTime,1) + (LARGE_INTEGER *time) +{ + *time = ticks_1601(); + TRACE5("%Lu, %lu", *time, jiffies); +} + +wstdcall void WIN_FUNC(KeQueryTickCount,1) + (LARGE_INTEGER *count) +{ + *count = jiffies; +} + +wstdcall LARGE_INTEGER WIN_FUNC(KeQueryPerformanceCounter,1) + (LARGE_INTEGER *counter) +{ + if (counter) + *counter = HZ; + return jiffies; +} + +wstdcall KAFFINITY WIN_FUNC(KeQueryActiveProcessors,0) + (void) +{ + int i, n; + KAFFINITY bits = 0; +#ifdef num_online_cpus + n = num_online_cpus(); +#else + n = NR_CPUS; +#endif + for (i = 0; i < n; i++) + bits = (bits << 1) | 1; + return bits; +} + +struct nt_thread *get_current_nt_thread(void) +{ + struct task_struct *task = current; + struct nt_thread *thread; + struct common_object_header *header; + + TRACE6("task: %p", task); + thread = NULL; + spin_lock_bh(&ntoskernel_lock); + nt_list_for_each_entry(header, &object_list, list) { + TRACE6("%p, %d", header, header->type); + if (header->type != OBJECT_TYPE_NT_THREAD) + break; + thread = HEADER_TO_OBJECT(header); + TRACE6("%p, %p", thread, thread->task); + if (thread->task == task) + break; + else + thread = NULL; + } + spin_unlock_bh(&ntoskernel_lock); + if (thread == NULL) + TRACE4("couldn't find thread for task %p, %d", task, task->pid); + TRACE6("%p", thread); + return thread; +} + +static struct task_struct *get_nt_thread_task(struct nt_thread *thread) +{ + struct task_struct *task; + struct common_object_header *header; + + TRACE6("%p", thread); + task = NULL; + spin_lock_bh(&ntoskernel_lock); + nt_list_for_each_entry(header, &object_list, list) { + TRACE6("%p, %d", header, header->type); + if (header->type != OBJECT_TYPE_NT_THREAD) + break; + if (thread == HEADER_TO_OBJECT(header)) { + task = thread->task; + break; + } + } + spin_unlock_bh(&ntoskernel_lock); + if (task == NULL) + TRACE2("%p: couldn't find task for %p", current, thread); + return task; +} + +static struct nt_thread *create_nt_thread(struct task_struct *task) +{ + struct nt_thread *thread; + thread = allocate_object(sizeof(*thread), OBJECT_TYPE_NT_THREAD, NULL); + if (!thread) { + ERROR("couldn't allocate thread object"); + EXIT2(return NULL); + } + thread->task = task; + if (task) + thread->pid = task->pid; + else + thread->pid = 0; + nt_spin_lock_init(&thread->lock); + InitializeListHead(&thread->irps); + initialize_object(&thread->dh, ThreadObject, 0); + thread->dh.size = sizeof(*thread); + thread->prio = LOW_PRIORITY; + return thread; +} + +wstdcall struct nt_thread *WIN_FUNC(KeGetCurrentThread,0) + (void) +{ + struct nt_thread *thread = get_current_nt_thread(); + TRACE2("%p, %p", thread, current); + return thread; +} + +wstdcall KPRIORITY WIN_FUNC(KeQueryPriorityThread,1) + (struct nt_thread *thread) +{ + KPRIORITY prio; + struct task_struct *task; + + TRACE2("%p", thread); +#ifdef CONFIG_X86_64 + /* sis163u driver for amd64 passes 0x1f from thread created by + * PsCreateSystemThread - no idea what is 0x1f */ + if (thread == (void *)0x1f) + thread = get_current_nt_thread(); +#endif + if (!thread) { + TRACE2("invalid thread"); + EXIT2(return LOW_REALTIME_PRIORITY); + } + task = get_nt_thread_task(thread); + if (!task) { + TRACE2("couldn't find task for thread: %p", thread); + EXIT2(return LOW_REALTIME_PRIORITY); + } + + prio = thread->prio; + + TRACE2("%d", prio); + return prio; +} + +wstdcall KPRIORITY WIN_FUNC(KeSetPriorityThread,2) + (struct nt_thread *thread, KPRIORITY prio) +{ + KPRIORITY old_prio; + struct task_struct *task; + + TRACE2("thread: %p, priority = %u", thread, prio); +#ifdef CONFIG_X86_64 + if (thread == (void *)0x1f) + thread = get_current_nt_thread(); +#endif + if (!thread) { + TRACE2("invalid thread"); + EXIT2(return LOW_REALTIME_PRIORITY); + } + task = get_nt_thread_task(thread); + if (!task) { + TRACE2("couldn't find task for thread: %p", thread); + EXIT2(return LOW_REALTIME_PRIORITY); + } + + old_prio = thread->prio; + thread->prio = prio; + + TRACE2("%d, %d", old_prio, thread->prio); + return old_prio; +} + +struct thread_trampoline { + void (*func)(void *) wstdcall; + void *ctx; + struct nt_thread *thread; + struct completion started; +}; + +static int ntdriver_thread(void *data) +{ + struct thread_trampoline *thread_tramp = data; + /* yes, a tramp! */ + typeof(thread_tramp->func) func = thread_tramp->func; + typeof(thread_tramp->ctx) ctx = thread_tramp->ctx; + + thread_tramp->thread->task = current; + thread_tramp->thread->pid = current->pid; + TRACE2("thread: %p, task: %p (%d)", thread_tramp->thread, + current, current->pid); + complete(&thread_tramp->started); + +#ifdef PF_NOFREEZE + current->flags |= PF_NOFREEZE; +#endif + strncpy(current->comm, "ntdriver", sizeof(current->comm)); + current->comm[sizeof(current->comm)-1] = 0; + LIN2WIN1(func, ctx); + ERROR("task: %p", current); + return 0; +} + +wstdcall NTSTATUS WIN_FUNC(PsCreateSystemThread,7) + (void **handle, ULONG access, void *obj_attr, void *process, + void *client_id, void (*func)(void *) wstdcall, void *ctx) +{ + struct thread_trampoline thread_tramp; + + ENTER2("handle = %p, access = %u, obj_attr = %p, process = %p, " + "client_id = %p, func = %p, context = %p", handle, access, + obj_attr, process, client_id, func, ctx); + + thread_tramp.thread = create_nt_thread(NULL); + if (!thread_tramp.thread) { + ERROR("couldn't allocate thread object"); + EXIT2(return STATUS_RESOURCES); + } + TRACE2("thread: %p", thread_tramp.thread); + thread_tramp.func = func; + thread_tramp.ctx = ctx; + init_completion(&thread_tramp.started); + + thread_tramp.thread->task = kthread_run(ntdriver_thread, + &thread_tramp, "ntdriver"); + if (IS_ERR(thread_tramp.thread->task)) { + free_object(thread_tramp.thread); + EXIT2(return STATUS_FAILURE); + } + TRACE2("created task: %p", thread_tramp.thread->task); + + wait_for_completion(&thread_tramp.started); + *handle = OBJECT_TO_HEADER(thread_tramp.thread); + TRACE2("created thread: %p, %p", thread_tramp.thread, *handle); + EXIT2(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(PsTerminateSystemThread,1) + (NTSTATUS status) +{ + struct nt_thread *thread; + + TRACE2("%p, %08X", current, status); + thread = get_current_nt_thread(); + TRACE2("%p", thread); + if (thread) { + KeSetEvent((struct nt_event *)&thread->dh, 0, FALSE); + while (1) { + struct nt_list *ent; + struct irp *irp; + KIRQL irql; + irql = nt_spin_lock_irql(&thread->lock, DISPATCH_LEVEL); + ent = RemoveHeadList(&thread->irps); + nt_spin_unlock_irql(&thread->lock, irql); + if (!ent) + break; + irp = container_of(ent, struct irp, thread_list); + IOTRACE("%p", irp); + IoCancelIrp(irp); + } + /* the driver may later query this status with + * ZwQueryInformationThread */ + thread->status = status; + } else + ERROR("couldn't find thread for task: %p", current); + + complete_and_exit(NULL, status); + ERROR("oops: %p, %d", thread->task, thread->pid); + return STATUS_FAILURE; +} + +wstdcall BOOLEAN WIN_FUNC(KeRemoveEntryDeviceQueue,2) + (struct kdevice_queue *dev_queue, struct kdevice_queue_entry *entry) +{ + struct kdevice_queue_entry *e; + KIRQL irql; + + irql = nt_spin_lock_irql(&dev_queue->lock, DISPATCH_LEVEL); + nt_list_for_each_entry(e, &dev_queue->list, list) { + if (e == entry) { + RemoveEntryList(&e->list); + nt_spin_unlock_irql(&dev_queue->lock, irql); + return TRUE; + } + } + nt_spin_unlock_irql(&dev_queue->lock, irql); + return FALSE; +} + +wstdcall BOOLEAN WIN_FUNC(KeSynchronizeExecution,3) + (struct kinterrupt *interrupt, PKSYNCHRONIZE_ROUTINE synch_routine, + void *ctx) +{ + BOOLEAN ret; + unsigned long flags; + + nt_spin_lock_irqsave(interrupt->actual_lock, flags); + ret = LIN2WIN1(synch_routine, ctx); + nt_spin_unlock_irqrestore(interrupt->actual_lock, flags); + TRACE6("%d", ret); + return ret; +} + +wstdcall void *WIN_FUNC(MmAllocateContiguousMemorySpecifyCache,5) + (SIZE_T size, PHYSICAL_ADDRESS lowest, PHYSICAL_ADDRESS highest, + PHYSICAL_ADDRESS boundary, enum memory_caching_type cache_type) +{ + void *addr; + gfp_t flags; + + ENTER2("%lu, 0x%lx, 0x%lx, 0x%lx, %d", size, (long)lowest, + (long)highest, (long)boundary, cache_type); + flags = irql_gfp(); + addr = wrap_get_free_pages(flags, size); + TRACE2("%p, %lu, 0x%x", addr, size, flags); + if (addr && ((virt_to_phys(addr) + size) <= highest)) + EXIT2(return addr); +#ifdef CONFIG_X86_64 + /* GFP_DMA is really only 16MB even on x86-64, but there is no + * other zone available */ + if (highest <= DMA_BIT_MASK(31)) + flags |= __GFP_DMA; + else if (highest <= DMA_BIT_MASK(32)) + flags |= __GFP_DMA32; +#else + if (highest <= DMA_BIT_MASK(24)) + flags |= __GFP_DMA; + else if (highest > DMA_BIT_MASK(30)) + flags |= __GFP_HIGHMEM; +#endif + addr = wrap_get_free_pages(flags, size); + TRACE2("%p, %lu, 0x%x", addr, size, flags); + return addr; +} + +wstdcall void WIN_FUNC(MmFreeContiguousMemorySpecifyCache,3) + (void *base, SIZE_T size, enum memory_caching_type cache_type) +{ + TRACE2("%p, %lu", base, size); + free_pages((unsigned long)base, get_order(size)); +} + +wstdcall PHYSICAL_ADDRESS WIN_FUNC(MmGetPhysicalAddress,1) + (void *base) +{ + unsigned long phy = virt_to_phys(base); + TRACE2("%p, %p", base, (void *)phy); + return phy; +} + +/* Atheros card with pciid 168C:0014 calls this function with 0xf0000 + * and 0xf6ef0 address, and then check for things that seem to be + * related to ACPI: "_SM_" and "_DMI_". This may be the hack they do + * to check if this card is installed in IBM thinkpads; we can + * probably get this device to work if we create a buffer with the + * strings as required by the driver and return virtual address for + * that address instead */ +wstdcall void __iomem *WIN_FUNC(MmMapIoSpace,3) + (PHYSICAL_ADDRESS phys_addr, SIZE_T size, + enum memory_caching_type cache) +{ + void __iomem *virt; + ENTER1("cache type: %d", cache); + if (cache == MmCached) + virt = ioremap(phys_addr, size); + else + virt = ioremap_nocache(phys_addr, size); + TRACE1("%Lx, %lu, %p", phys_addr, size, virt); + return virt; +} + +wstdcall void WIN_FUNC(MmUnmapIoSpace,2) + (void __iomem *addr, SIZE_T size) +{ + ENTER1("%p, %lu", addr, size); + iounmap(addr); + return; +} + +wstdcall ULONG WIN_FUNC(MmSizeOfMdl,2) + (void *base, ULONG length) +{ + return sizeof(struct mdl) + + (sizeof(PFN_NUMBER) * SPAN_PAGES(base, length)); +} + +struct mdl *allocate_init_mdl(void *virt, ULONG length) +{ + struct wrap_mdl *wrap_mdl; + struct mdl *mdl; + int mdl_size = MmSizeOfMdl(virt, length); + + if (mdl_size <= MDL_CACHE_SIZE) { + wrap_mdl = kmem_cache_alloc(mdl_cache, irql_gfp()); + if (!wrap_mdl) + return NULL; + spin_lock_bh(&dispatcher_lock); + InsertHeadList(&wrap_mdl_list, &wrap_mdl->list); + spin_unlock_bh(&dispatcher_lock); + mdl = wrap_mdl->mdl; + TRACE3("allocated mdl from cache: %p(%p), %p(%d)", + wrap_mdl, mdl, virt, length); + memset(mdl, 0, MDL_CACHE_SIZE); + MmInitializeMdl(mdl, virt, length); + /* mark the MDL as allocated from cache pool so when + * it is freed, we free it back to the pool */ + mdl->flags = MDL_ALLOCATED_FIXED_SIZE | MDL_CACHE_ALLOCATED; + } else { + wrap_mdl = + kmalloc(sizeof(*wrap_mdl) + mdl_size, irql_gfp()); + if (!wrap_mdl) + return NULL; + mdl = wrap_mdl->mdl; + TRACE3("allocated mdl from memory: %p(%p), %p(%d)", + wrap_mdl, mdl, virt, length); + spin_lock_bh(&dispatcher_lock); + InsertHeadList(&wrap_mdl_list, &wrap_mdl->list); + spin_unlock_bh(&dispatcher_lock); + memset(mdl, 0, mdl_size); + MmInitializeMdl(mdl, virt, length); + mdl->flags = MDL_ALLOCATED_FIXED_SIZE; + } + return mdl; +} + +void free_mdl(struct mdl *mdl) +{ + /* A driver may allocate Mdl with NdisAllocateBuffer and free + * with IoFreeMdl (e.g., 64-bit Broadcom). Since we need to + * treat buffers allocated with Ndis calls differently, we + * must call NdisFreeBuffer if it is allocated with Ndis + * function. We set 'pool' field in Ndis functions. */ + if (!mdl) + return; + if (mdl->pool) + NdisFreeBuffer(mdl); + else { + struct wrap_mdl *wrap_mdl = (struct wrap_mdl *) + ((char *)mdl - offsetof(struct wrap_mdl, mdl)); + spin_lock_bh(&dispatcher_lock); + RemoveEntryList(&wrap_mdl->list); + spin_unlock_bh(&dispatcher_lock); + + if (mdl->flags & MDL_CACHE_ALLOCATED) { + TRACE3("freeing mdl cache: %p, %p, %p", + wrap_mdl, mdl, mdl->mappedsystemva); + kmem_cache_free(mdl_cache, wrap_mdl); + } else { + TRACE3("freeing mdl: %p, %p, %p", + wrap_mdl, mdl, mdl->mappedsystemva); + kfree(wrap_mdl); + } + } + return; +} + +wstdcall void WIN_FUNC(IoBuildPartialMdl,4) + (struct mdl *source, struct mdl *target, void *virt, ULONG length) +{ + MmInitializeMdl(target, virt, length); + target->flags |= MDL_PARTIAL; +} + +wstdcall void WIN_FUNC(MmBuildMdlForNonPagedPool,1) + (struct mdl *mdl) +{ + PFN_NUMBER *mdl_pages; + int i, n; + + ENTER4("%p", mdl); + /* already mapped */ +// mdl->mappedsystemva = MmGetMdlVirtualAddress(mdl); + mdl->flags |= MDL_SOURCE_IS_NONPAGED_POOL; + TRACE4("%p, %p, %p, %d, %d", mdl, mdl->mappedsystemva, mdl->startva, + mdl->byteoffset, mdl->bytecount); + n = SPAN_PAGES(MmGetSystemAddressForMdl(mdl), MmGetMdlByteCount(mdl)); + if (n > MDL_CACHE_PAGES) + WARNING("%p, %d, %d", MmGetSystemAddressForMdl(mdl), + MmGetMdlByteCount(mdl), n); + mdl_pages = MmGetMdlPfnArray(mdl); + for (i = 0; i < n; i++) + mdl_pages[i] = (ULONG_PTR)mdl->startva + (i * PAGE_SIZE); + EXIT4(return); +} + +wstdcall void *WIN_FUNC(MmMapLockedPages,2) + (struct mdl *mdl, KPROCESSOR_MODE access_mode) +{ + /* already mapped */ +// mdl->mappedsystemva = MmGetMdlVirtualAddress(mdl); + mdl->flags |= MDL_MAPPED_TO_SYSTEM_VA; + /* what is the need for MDL_PARTIAL_HAS_BEEN_MAPPED? */ + if (mdl->flags & MDL_PARTIAL) + mdl->flags |= MDL_PARTIAL_HAS_BEEN_MAPPED; + return mdl->mappedsystemva; +} + +wstdcall void *WIN_FUNC(MmMapLockedPagesSpecifyCache,6) + (struct mdl *mdl, KPROCESSOR_MODE access_mode, + enum memory_caching_type cache_type, void *base_address, + ULONG bug_check, enum mm_page_priority priority) +{ + return MmMapLockedPages(mdl, access_mode); +} + +wstdcall void WIN_FUNC(MmUnmapLockedPages,2) + (void *base, struct mdl *mdl) +{ + mdl->flags &= ~MDL_MAPPED_TO_SYSTEM_VA; + return; +} + +wstdcall void WIN_FUNC(MmProbeAndLockPages,3) + (struct mdl *mdl, KPROCESSOR_MODE access_mode, + enum lock_operation operation) +{ + /* already locked */ + mdl->flags |= MDL_PAGES_LOCKED; + return; +} + +wstdcall void WIN_FUNC(MmUnlockPages,1) + (struct mdl *mdl) +{ + mdl->flags &= ~MDL_PAGES_LOCKED; + return; +} + +wstdcall BOOLEAN WIN_FUNC(MmIsAddressValid,1) + (void *virt_addr) +{ + if (virt_addr_valid(virt_addr)) + return TRUE; + else + return FALSE; +} + +wstdcall void *WIN_FUNC(MmLockPagableDataSection,1) + (void *address) +{ + return address; +} + +wstdcall void WIN_FUNC(MmUnlockPagableImageSection,1) + (void *handle) +{ + return; +} + +wstdcall NTSTATUS WIN_FUNC(ObReferenceObjectByHandle,6) + (void *handle, ACCESS_MASK desired_access, void *obj_type, + KPROCESSOR_MODE access_mode, void **object, void *handle_info) +{ + struct common_object_header *hdr; + + TRACE2("%p", handle); + hdr = HANDLE_TO_HEADER(handle); + atomic_inc_var(hdr->ref_count); + *object = HEADER_TO_OBJECT(hdr); + TRACE2("%p, %p, %d, %p", hdr, object, hdr->ref_count, *object); + return STATUS_SUCCESS; +} + +/* DDK doesn't say if return value should be before incrementing or + * after incrementing reference count, but according to #reactos + * devels, it should be return value after incrementing */ +wfastcall LONG WIN_FUNC(ObfReferenceObject,1) + (void *object) +{ + struct common_object_header *hdr; + LONG ret; + + hdr = OBJECT_TO_HEADER(object); + ret = post_atomic_add(hdr->ref_count, 1); + TRACE2("%p, %d, %p", hdr, hdr->ref_count, object); + return ret; +} + +static int dereference_object(void *object) +{ + struct common_object_header *hdr; + int ref_count; + + ENTER2("object: %p", object); + hdr = OBJECT_TO_HEADER(object); + TRACE2("hdr: %p", hdr); + ref_count = post_atomic_add(hdr->ref_count, -1); + TRACE2("object: %p, %d", object, ref_count); + if (ref_count < 0) + ERROR("invalid object: %p (%d)", object, ref_count); + if (ref_count <= 0) { + free_object(object); + return 1; + } else + return 0; +} + +wfastcall void WIN_FUNC(ObfDereferenceObject,1) + (void *object) +{ + TRACE2("%p", object); + dereference_object(object); +} + +wstdcall NTSTATUS WIN_FUNC(ZwCreateFile,11) + (void **handle, ACCESS_MASK access_mask, + struct object_attributes *obj_attr, struct io_status_block *iosb, + LARGE_INTEGER *size, ULONG file_attr, ULONG share_access, + ULONG create_disposition, ULONG create_options, void *ea_buffer, + ULONG ea_length) +{ + struct common_object_header *coh; + struct file_object *fo; + struct ansi_string ansi; + struct wrap_bin_file *bin_file; + char *file_basename; + NTSTATUS status; + + spin_lock_bh(&ntoskernel_lock); + nt_list_for_each_entry(coh, &object_list, list) { + if (coh->type != OBJECT_TYPE_FILE) + continue; + /* TODO: check if file is opened in shared mode */ + if (!RtlCompareUnicodeString(&coh->name, obj_attr->name, TRUE)) { + fo = HEADER_TO_OBJECT(coh); + bin_file = fo->wrap_bin_file; + *handle = coh; + spin_unlock_bh(&ntoskernel_lock); + ObReferenceObject(fo); + iosb->status = FILE_OPENED; + iosb->info = bin_file->size; + EXIT2(return STATUS_SUCCESS); + } + } + spin_unlock_bh(&ntoskernel_lock); + + if (RtlUnicodeStringToAnsiString(&ansi, obj_attr->name, TRUE) != + STATUS_SUCCESS) + EXIT2(return STATUS_INSUFFICIENT_RESOURCES); + + file_basename = strrchr(ansi.buf, '\\'); + if (file_basename) + file_basename++; + else + file_basename = ansi.buf; + TRACE2("file: '%s', '%s'", ansi.buf, file_basename); + + fo = allocate_object(sizeof(struct file_object), OBJECT_TYPE_FILE, + obj_attr->name); + if (!fo) { + RtlFreeAnsiString(&ansi); + iosb->status = STATUS_INSUFFICIENT_RESOURCES; + iosb->info = 0; + EXIT2(return STATUS_FAILURE); + } + coh = OBJECT_TO_HEADER(fo); + bin_file = get_bin_file(file_basename); + if (bin_file) { + TRACE2("%s, %s", bin_file->name, file_basename); + fo->flags = FILE_OPENED; + } else if (access_mask & FILE_WRITE_DATA) { + bin_file = kzalloc(sizeof(*bin_file), GFP_KERNEL); + if (bin_file) { + strncpy(bin_file->name, file_basename, + sizeof(bin_file->name)); + bin_file->name[sizeof(bin_file->name)-1] = 0; + bin_file->data = vmalloc(*size); + if (bin_file->data) { + memset(bin_file->data, 0, *size); + bin_file->size = *size; + fo->flags = FILE_CREATED; + } else { + kfree(bin_file); + bin_file = NULL; + } + } + } else + bin_file = NULL; + + RtlFreeAnsiString(&ansi); + if (!bin_file) { + iosb->status = FILE_DOES_NOT_EXIST; + iosb->info = 0; + free_object(fo); + EXIT2(return STATUS_FAILURE); + } + + fo->wrap_bin_file = bin_file; + fo->current_byte_offset = 0; + if (access_mask & FILE_READ_DATA) + fo->read_access = TRUE; + if (access_mask & FILE_WRITE_DATA) + fo->write_access = TRUE; + iosb->status = FILE_OPENED; + iosb->info = bin_file->size; + *handle = coh; + TRACE2("handle: %p", *handle); + status = STATUS_SUCCESS; + EXIT2(return status); +} + +wstdcall NTSTATUS WIN_FUNC(ZwOpenFile,6) + (void **handle, ACCESS_MASK access_mask, + struct object_attributes *obj_attr, struct io_status_block *iosb, + ULONG share_access, ULONG open_options) +{ + LARGE_INTEGER size; + return ZwCreateFile(handle, access_mask, obj_attr, iosb, &size, 0, + share_access, 0, open_options, NULL, 0); +} + +wstdcall NTSTATUS WIN_FUNC(ZwReadFile,9) + (void *handle, struct nt_event *event, void *apc_routine, + void *apc_context, struct io_status_block *iosb, void *buffer, + ULONG length, LARGE_INTEGER *byte_offset, ULONG *key) +{ + struct file_object *fo; + struct common_object_header *coh; + ULONG count; + size_t offset; + struct wrap_bin_file *file; + + TRACE2("%p", handle); + coh = handle; + if (coh->type != OBJECT_TYPE_FILE) { + ERROR("handle %p is invalid: %d", handle, coh->type); + EXIT2(return STATUS_FAILURE); + } + fo = HANDLE_TO_OBJECT(coh); + file = fo->wrap_bin_file; + TRACE2("file: %s (%zu)", file->name, file->size); + spin_lock_bh(&ntoskernel_lock); + if (byte_offset) + offset = *byte_offset; + else + offset = fo->current_byte_offset; + count = min((size_t)length, file->size - offset); + TRACE2("count: %u, offset: %zu, length: %u", count, offset, length); + memcpy(buffer, ((void *)file->data) + offset, count); + fo->current_byte_offset = offset + count; + spin_unlock_bh(&ntoskernel_lock); + iosb->status = STATUS_SUCCESS; + iosb->info = count; + EXIT2(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(ZwWriteFile,9) + (void *handle, struct nt_event *event, void *apc_routine, + void *apc_context, struct io_status_block *iosb, void *buffer, + ULONG length, LARGE_INTEGER *byte_offset, ULONG *key) +{ + struct file_object *fo; + struct common_object_header *coh; + struct wrap_bin_file *file; + unsigned long offset; + + TRACE2("%p", handle); + coh = handle; + if (coh->type != OBJECT_TYPE_FILE) { + ERROR("handle %p is invalid: %d", handle, coh->type); + EXIT2(return STATUS_FAILURE); + } + fo = HANDLE_TO_OBJECT(coh); + file = fo->wrap_bin_file; + TRACE2("file: %zu, %u", file->size, length); + spin_lock_bh(&ntoskernel_lock); + if (byte_offset) + offset = *byte_offset; + else + offset = fo->current_byte_offset; + if (length + offset > file->size) { + WARNING("%lu, %u", length + offset, (unsigned int)file->size); + /* TODO: implement writing past end of current size */ + iosb->status = STATUS_FAILURE; + iosb->info = 0; + } else { + memcpy(file->data + offset, buffer, length); + iosb->status = STATUS_SUCCESS; + iosb->info = length; + fo->current_byte_offset = offset + length; + } + spin_unlock_bh(&ntoskernel_lock); + EXIT2(return iosb->status); +} + +wstdcall NTSTATUS WIN_FUNC(ZwClose,1) + (void *handle) +{ + struct common_object_header *coh; + + TRACE2("%p", handle); + if (handle == NULL) { + TRACE1(""); + EXIT2(return STATUS_SUCCESS); + } + coh = handle; + if (coh->type == OBJECT_TYPE_FILE) { + struct file_object *fo; + struct wrap_bin_file *bin_file; + typeof(fo->flags) flags; + + fo = HANDLE_TO_OBJECT(handle); + flags = fo->flags; + bin_file = fo->wrap_bin_file; + if (dereference_object(fo)) { + if (flags == FILE_CREATED) { + vfree(bin_file->data); + kfree(bin_file); + } else + free_bin_file(bin_file); + } + } else if (coh->type == OBJECT_TYPE_NT_THREAD) { + struct nt_thread *thread = HANDLE_TO_OBJECT(handle); + TRACE2("thread: %p (%p)", thread, handle); + ObDereferenceObject(thread); + } else { + /* TODO: can we just dereference object here? */ + WARNING("closing handle 0x%x not implemented", coh->type); + } + EXIT2(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(ZwQueryInformationFile,5) + (void *handle, struct io_status_block *iosb, void *info, + ULONG length, enum file_info_class class) +{ + struct file_object *fo; + struct file_name_info *fni; + struct file_std_info *fsi; + struct wrap_bin_file *file; + struct common_object_header *coh; + + ENTER2("%p", handle); + coh = handle; + if (coh->type != OBJECT_TYPE_FILE) { + ERROR("handle %p is invalid: %d", coh, coh->type); + EXIT2(return STATUS_FAILURE); + } + fo = HANDLE_TO_OBJECT(handle); + TRACE2("fo: %p, %d", fo, class); + switch (class) { + case FileNameInformation: + fni = info; + fni->length = min(length, (typeof(length))coh->name.length); + memcpy(fni->name, coh->name.buf, fni->length); + iosb->status = STATUS_SUCCESS; + iosb->info = fni->length; + break; + case FileStandardInformation: + fsi = info; + file = fo->wrap_bin_file; + fsi->alloc_size = file->size; + fsi->eof = file->size; + fsi->num_links = 1; + fsi->delete_pending = FALSE; + fsi->dir = FALSE; + iosb->status = STATUS_SUCCESS; + iosb->info = 0; + break; + default: + WARNING("type %d not implemented yet", class); + iosb->status = STATUS_FAILURE; + iosb->info = 0; + break; + } + EXIT2(return iosb->status); +} + +wstdcall NTSTATUS WIN_FUNC(ZwOpenSection,3) + (void **handle, ACCESS_MASK access, struct object_attributes *obj_attrs) +{ + INFO("%p, 0x%x, %d", obj_attrs, obj_attrs->attributes, access); + TODO(); + *handle = obj_attrs; + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwMapViewOfSection,10) + (void *secn_handle, void *process_handle, void **base_address, + ULONG zero_bits, LARGE_INTEGER *secn_offset, SIZE_T *view_size, + enum section_inherit inherit, ULONG alloc_type, ULONG protect) +{ + INFO("%p, %p, %p", secn_handle, process_handle, base_address); + TODO(); + *base_address = (void *)0xdeadbeef; + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwUnmapViewOfSection,2) + (void *process_handle, void *base_address) +{ + INFO("%p, %p", process_handle, base_address); + TODO(); + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwCreateKey,7) + (void **handle, ACCESS_MASK desired_access, + struct object_attributes *attr, ULONG title_index, + struct unicode_string *class, ULONG create_options, + ULONG *disposition) +{ + struct ansi_string ansi; + if (RtlUnicodeStringToAnsiString(&ansi, attr->name, TRUE) == + STATUS_SUCCESS) { + TRACE1("key: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + *handle = NULL; + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwOpenKey,3) + (void **handle, ACCESS_MASK desired_access, + struct object_attributes *attr) +{ + struct ansi_string ansi; + if (RtlUnicodeStringToAnsiString(&ansi, attr->name, TRUE) == + STATUS_SUCCESS) { + TRACE1("key: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + *handle = NULL; + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwSetValueKey,6) + (void *handle, struct unicode_string *name, ULONG title_index, + ULONG type, void *data, ULONG data_size) +{ + struct ansi_string ansi; + if (RtlUnicodeStringToAnsiString(&ansi, name, TRUE) == + STATUS_SUCCESS) { + TRACE1("key: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwQueryValueKey,6) + (void *handle, struct unicode_string *name, + enum key_value_information_class class, void *info, + ULONG length, ULONG *res_length) +{ + struct ansi_string ansi; + if (RtlUnicodeStringToAnsiString(&ansi, name, TRUE) == STATUS_SUCCESS) { + TRACE1("key: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + TODO(); + return STATUS_INVALID_PARAMETER; +} + +wstdcall NTSTATUS WIN_FUNC(ZwDeleteKey,1) + (void *handle) +{ + ENTER2("%p", handle); + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(ZwPowerInformation,4) + (INT info_level, void *in_buf, ULONG in_buf_len, void *out_buf, + ULONG out_buf_len) +{ + INFO("%d, %u, %u", info_level, in_buf_len, out_buf_len); + TODO(); + return STATUS_ACCESS_DENIED; +} + +wstdcall NTSTATUS WIN_FUNC(WmiSystemControl,4) + (struct wmilib_context *info, struct device_object *dev_obj, + struct irp *irp, void *irp_disposition) +{ + TODO(); + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(WmiCompleteRequest,5) + (struct device_object *dev_obj, struct irp *irp, NTSTATUS status, + ULONG buffer_used, CCHAR priority_boost) +{ + TODO(); + return STATUS_SUCCESS; +} + +noregparm NTSTATUS WIN_FUNC(WmiTraceMessage,12) + (void *tracehandle, ULONG message_flags, + void *message_guid, USHORT message_no, ...) +{ + TODO(); + EXIT2(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(WmiQueryTraceInformation,4) + (enum trace_information_class trace_info_class, void *trace_info, + ULONG *req_length, void *buf) +{ + TODO(); + EXIT2(return STATUS_SUCCESS); +} + +/* this function can't be wstdcall as it takes variable number of args */ +noregparm ULONG WIN_FUNC(DbgPrint,12) + (char *format, ...) +{ +#ifdef DEBUG + va_list args; + static char buf[100]; + + va_start(args, format); + vsnprintf(buf, sizeof(buf), format, args); + printk(KERN_DEBUG "%s (%s): %s", DRIVER_NAME, __func__, buf); + va_end(args); +#endif + return STATUS_SUCCESS; +} + +wstdcall void WIN_FUNC(KeBugCheck,1) + (ULONG code) +{ + TODO(); + return; +} + +wstdcall void WIN_FUNC(KeBugCheckEx,5) + (ULONG code, ULONG_PTR param1, ULONG_PTR param2, + ULONG_PTR param3, ULONG_PTR param4) +{ + TODO(); + return; +} + +wstdcall void WIN_FUNC(ExSystemTimeToLocalTime,2) + (LARGE_INTEGER *system_time, LARGE_INTEGER *local_time) +{ + *local_time = *system_time; +} + +wstdcall ULONG WIN_FUNC(ExSetTimerResolution,2) + (ULONG time, BOOLEAN set) +{ + /* why a driver should change system wide timer resolution is + * beyond me */ + return time; +} + +wstdcall void WIN_FUNC(DbgBreakPoint,0) + (void) +{ + TODO(); +} + +wstdcall void WIN_FUNC(_except_handler3,0) + (void) +{ + TODO(); +} + +wstdcall void WIN_FUNC(__C_specific_handler,0) + (void) +{ + TODO(); +} + +wstdcall void WIN_FUNC(_purecall,0) + (void) +{ + TODO(); +} + +wstdcall void WIN_FUNC(__chkstk,0) + (void) +{ + TODO(); +} + +struct worker_init_struct { + work_struct_t work; + struct completion completion; + struct nt_thread *nt_thread; +}; + +static void wrap_worker_init_func(worker_param_t param) +{ + struct worker_init_struct *worker_init_struct; + + worker_init_struct = + worker_param_data(param, struct worker_init_struct, work); + TRACE1("%p", worker_init_struct); + worker_init_struct->nt_thread = create_nt_thread(current); + if (!worker_init_struct->nt_thread) + WARNING("couldn't create worker thread"); + complete(&worker_init_struct->completion); +} + +struct nt_thread *wrap_worker_init(workqueue_struct_t *wq) +{ + struct worker_init_struct worker_init_struct; + + TRACE1("%p", &worker_init_struct); + init_completion(&worker_init_struct.completion); + initialize_work(&worker_init_struct.work, wrap_worker_init_func, + &worker_init_struct); + worker_init_struct.nt_thread = NULL; + if (wq) + queue_work(wq, &worker_init_struct.work); + else + schedule_work(&worker_init_struct.work); + wait_for_completion(&worker_init_struct.completion); + TRACE1("%p", worker_init_struct.nt_thread); + return worker_init_struct.nt_thread; +} + +int ntoskernel_init(void) +{ + struct timeval now; + + spin_lock_init(&dispatcher_lock); + spin_lock_init(&ntoskernel_lock); + spin_lock_init(&ntos_work_lock); + spin_lock_init(&kdpc_list_lock); + spin_lock_init(&irp_cancel_lock); + InitializeListHead(&wrap_mdl_list); + InitializeListHead(&kdpc_list); + InitializeListHead(&callback_objects); + InitializeListHead(&bus_driver_list); + InitializeListHead(&object_list); + InitializeListHead(&ntos_work_list); + + nt_spin_lock_init(&nt_list_lock); + + initialize_work(&kdpc_work, kdpc_worker, NULL); + initialize_work(&ntos_work, ntos_work_worker, NULL); + wrap_timer_slist.next = NULL; + + do_gettimeofday(&now); + wrap_ticks_to_boot = TICKS_1601_TO_1970; + wrap_ticks_to_boot += (u64)now.tv_sec * TICKSPERSEC; + wrap_ticks_to_boot += now.tv_usec * 10; + wrap_ticks_to_boot -= jiffies * TICKSPERJIFFY; + TRACE2("%Lu", wrap_ticks_to_boot); + +#ifdef WRAP_PREEMPT + do { + int cpu; + for_each_possible_cpu(cpu) { + irql_info_t *info; + info = &per_cpu(irql_info, cpu); + mutex_init(&(info->lock)); + info->task = NULL; + info->count = 0; + } + } while (0); +#endif + + ntos_wq = create_singlethread_workqueue("ntos_wq"); + if (!ntos_wq) { + WARNING("couldn't create ntos_wq thread"); + return -ENOMEM; + } + ntos_worker_thread = wrap_worker_init(ntos_wq); + TRACE1("%p", ntos_worker_thread); + + if (add_bus_driver("PCI") +#ifdef ENABLE_USB + || add_bus_driver("USB") +#endif + ) { + ntoskernel_exit(); + return -ENOMEM; + } + mdl_cache = + wrap_kmem_cache_create("wrap_mdl", + sizeof(struct wrap_mdl) + MDL_CACHE_SIZE, + 0, 0); + TRACE2("%p", mdl_cache); + if (!mdl_cache) { + ERROR("couldn't allocate MDL cache"); + ntoskernel_exit(); + return -ENOMEM; + } + +#if defined(CONFIG_X86_64) + memset(&kuser_shared_data, 0, sizeof(kuser_shared_data)); + *((ULONG64 *)&kuser_shared_data.system_time) = ticks_1601(); + init_timer(&shared_data_timer); + shared_data_timer.function = update_user_shared_data_proc; + shared_data_timer.data = (unsigned long)0; +#endif + return 0; +} + +int ntoskernel_init_device(struct wrap_device *wd) +{ +#if defined(CONFIG_X86_64) + if (kuser_shared_data.reserved1) + mod_timer(&shared_data_timer, jiffies + MSEC_TO_HZ(30)); +#endif + return 0; +} + +void ntoskernel_exit_device(struct wrap_device *wd) +{ + ENTER2(""); + + KeFlushQueuedDpcs(); + EXIT2(return); +} + +void ntoskernel_exit(void) +{ + struct nt_list *cur; + + ENTER2(""); + + /* free kernel (Ke) timers */ + TRACE2("freeing timers"); + while (1) { + struct wrap_timer *wrap_timer; + struct nt_slist *slist; + + spin_lock_bh(&ntoskernel_lock); + if ((slist = wrap_timer_slist.next)) + wrap_timer_slist.next = slist->next; + spin_unlock_bh(&ntoskernel_lock); + TIMERTRACE("%p", slist); + if (!slist) + break; + wrap_timer = container_of(slist, struct wrap_timer, slist); + if (del_timer_sync(&wrap_timer->timer)) + WARNING("Buggy Windows driver left timer %p running", + wrap_timer->nt_timer); + memset(wrap_timer, 0, sizeof(*wrap_timer)); + slack_kfree(wrap_timer); + } + + TRACE2("freeing MDLs"); + if (mdl_cache) { + spin_lock_bh(&ntoskernel_lock); + if (!IsListEmpty(&wrap_mdl_list)) + ERROR("Windows driver didn't free all MDLs; " + "freeing them now"); + while ((cur = RemoveHeadList(&wrap_mdl_list))) { + struct wrap_mdl *wrap_mdl; + wrap_mdl = container_of(cur, struct wrap_mdl, list); + if (wrap_mdl->mdl->flags & MDL_CACHE_ALLOCATED) + kmem_cache_free(mdl_cache, wrap_mdl); + else + kfree(wrap_mdl); + } + spin_unlock_bh(&ntoskernel_lock); + kmem_cache_destroy(mdl_cache); + mdl_cache = NULL; + } + + TRACE2("freeing callbacks"); + spin_lock_bh(&ntoskernel_lock); + while ((cur = RemoveHeadList(&callback_objects))) { + struct callback_object *object; + struct nt_list *ent; + object = container_of(cur, struct callback_object, list); + while ((ent = RemoveHeadList(&object->callback_funcs))) { + struct callback_func *f; + f = container_of(ent, struct callback_func, list); + kfree(f); + } + kfree(object); + } + spin_unlock_bh(&ntoskernel_lock); + + spin_lock_bh(&ntoskernel_lock); + while ((cur = RemoveHeadList(&bus_driver_list))) { + struct bus_driver *bus_driver; + bus_driver = container_of(cur, struct bus_driver, list); + /* TODO: make sure all all drivers are shutdown/removed */ + kfree(bus_driver); + } + spin_unlock_bh(&ntoskernel_lock); + +#if defined(CONFIG_X86_64) + del_timer_sync(&shared_data_timer); +#endif + if (ntos_wq) + destroy_workqueue(ntos_wq); + TRACE1("%p", ntos_worker_thread); + if (ntos_worker_thread) + ObDereferenceObject(ntos_worker_thread); + ENTER2("freeing objects"); + spin_lock_bh(&ntoskernel_lock); + while ((cur = RemoveHeadList(&object_list))) { + struct common_object_header *hdr; + hdr = container_of(cur, struct common_object_header, list); + if (hdr->type == OBJECT_TYPE_NT_THREAD) + TRACE1("object %p(%d) was not freed, freeing it now", + HEADER_TO_OBJECT(hdr), hdr->type); + else + WARNING("object %p(%d) was not freed, freeing it now", + HEADER_TO_OBJECT(hdr), hdr->type); + ExFreePool(hdr); + } + spin_unlock_bh(&ntoskernel_lock); + + EXIT2(return); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/ntoskernel.h +++ linux-2.6.32/ubuntu/ndiswrapper/ntoskernel.h @@ -0,0 +1,1157 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _NTOSKERNEL_H_ +#define _NTOSKERNEL_H_ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined(CONFIG_X86) && !defined(CONFIG_X86_64) +#error "this module is for x86 or x86_64 architectures only" +#endif + +/* Interrupt backwards compatibility stuff */ +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) +#ifndef IRQ_HANDLED +#define IRQ_HANDLED +#define IRQ_NONE +#define irqreturn_t void +#endif +#endif /* Linux < 2.6.29 */ + +/* pci functions in 2.6 kernels have problems allocating dma buffers, + * but seem to work fine with dma functions + */ +#include + +#define PCI_DMA_ALLOC_COHERENT(pci_dev,size,dma_handle) \ + dma_alloc_coherent(&pci_dev->dev,size,dma_handle, \ + GFP_KERNEL | __GFP_REPEAT) +#define PCI_DMA_FREE_COHERENT(pci_dev,size,cpu_addr,dma_handle) \ + dma_free_coherent(&pci_dev->dev,size,cpu_addr,dma_handle) +#define PCI_DMA_MAP_SINGLE(pci_dev,addr,size,direction) \ + dma_map_single(&pci_dev->dev,addr,size,direction) +#define PCI_DMA_UNMAP_SINGLE(pci_dev,dma_handle,size,direction) \ + dma_unmap_single(&pci_dev->dev,dma_handle,size,direction) +#define MAP_SG(pci_dev, sglist, nents, direction) \ + dma_map_sg(&pci_dev->dev, sglist, nents, direction) +#define UNMAP_SG(pci_dev, sglist, nents, direction) \ + dma_unmap_sg(&pci_dev->dev, sglist, nents, direction) +#define PCI_DMA_MAP_ERROR(dma_addr) dma_mapping_error(dma_addr) + + +#if defined(CONFIG_NET_RADIO) && !defined(CONFIG_WIRELESS_EXT) +#define CONFIG_WIRELESS_EXT +#endif + +#define prepare_wait_condition(task, var, value) \ +do { \ + var = value; \ + task = current; \ + barrier(); \ +} while (0) + +/* Wait in wait_state (e.g., TASK_INTERRUPTIBLE) for condition to + * become true; timeout is either jiffies (> 0) to wait or 0 to wait + * forever. + * When timeout == 0, return value is + * > 0 if condition becomes true, or + * < 0 if signal is pending on the thread. + * When timeout > 0, return value is + * > 0 if condition becomes true before timeout, + * < 0 if signal is pending on the thread before timeout, or + * 0 if timedout (condition may have become true at the same time) + */ + +#define wait_condition(condition, timeout, wait_state) \ +({ \ + long ret = timeout ? timeout : 1; \ + while (1) { \ + if (signal_pending(current)) { \ + ret = -ERESTARTSYS; \ + break; \ + } \ + set_current_state(wait_state); \ + if (condition) { \ + __set_current_state(TASK_RUNNING); \ + break; \ + } \ + if (timeout) { \ + ret = schedule_timeout(ret); \ + if (!ret) \ + break; \ + } else \ + schedule(); \ + } \ + ret; \ +}) + +#ifdef WRAP_WQ + +struct workqueue_struct; + +struct workqueue_thread { + spinlock_t lock; + struct task_struct *task; + struct completion *completion; + char name[16]; + int pid; + /* whether any work_structs pending? <0 implies quit */ + s8 pending; + /* list of work_structs pending */ + struct list_head work_list; +}; + +typedef struct workqueue_struct { + u8 singlethread; + u8 qon; + int num_cpus; + struct workqueue_thread threads[0]; +} workqueue_struct_t; + +typedef struct { + struct list_head list; + void (*func)(void *data); + void *data; + /* whether/on which thread scheduled */ + struct workqueue_thread *thread; +} work_struct_t; + +#define initialize_work(work, pfunc, pdata) \ + do { \ + (work)->func = (pfunc); \ + (work)->data = (pdata); \ + (work)->thread = NULL; \ + } while (0) + +#undef create_singlethread_workqueue +#define create_singlethread_workqueue(name) wrap_create_wq(name, 1, 0) +#undef create_workqueue +#define create_workqueue(name) wrap_create_wq(name, 0, 0) +#undef destroy_workqueue +#define destroy_workqueue wrap_destroy_wq +#undef queue_work +#define queue_work wrap_queue_work +#undef flush_workqueue +#define flush_workqueue wrap_flush_wq + +workqueue_struct_t *wrap_create_wq(const char *name, u8 singlethread, u8 freeze); +void wrap_destroy_wq_on(workqueue_struct_t *workq, int cpu); +void wrap_destroy_wq(workqueue_struct_t *workq); +int wrap_queue_work_on(workqueue_struct_t *workq, work_struct_t *work, + int cpu); +int wrap_queue_work(workqueue_struct_t *workq, work_struct_t *work); +void wrap_cancel_work(work_struct_t *work); +void wrap_flush_wq_on(workqueue_struct_t *workq, int cpu); +void wrap_flush_wq(workqueue_struct_t *workq); +typedef void *worker_param_t; +#define worker_param_data(param, type, member) param + +#else // WRAP_WQ + +typedef struct workqueue_struct workqueue_struct_t; +typedef struct work_struct work_struct_t; + +#if defined(INIT_WORK_NAR) || defined(INIT_DELAYED_WORK_DEFERRABLE) +#define initialize_work(work, func, data) INIT_WORK(work, func) +typedef struct work_struct *worker_param_t; +#define worker_param_data(param, type, member) \ + container_of(param, type, member) +#else +#define initialize_work(work, func, data) INIT_WORK(work, func, data) +typedef void *worker_param_t; +#define worker_param_data(param, type, member) param +#endif // INIT_WORK_NAR + +#endif // WRAP_WQ + +struct nt_thread *wrap_worker_init(workqueue_struct_t *wq); + +#ifdef module_param +#define WRAP_MODULE_PARM_INT(name, perm) module_param(name, int, perm) +#define WRAP_MODULE_PARM_STRING(name, perm) module_param(name, charp, perm) +#else +#define WRAP_MODULE_PARM_INT(name, perm) MODULE_PARM(name, "i") +#define WRAP_MODULE_PARM_STRING(name, perm) MODULE_PARM(name, "s") +#endif + +#ifndef LOCK_PREFIX +#ifdef LOCK +#define LOCK_PREFIX LOCK +#else +#ifdef CONFIG_SMP +#define LOCK_PREFIX "lock ; " +#else +#define LOCK_PREFIX "" +#endif +#endif +#endif + +#ifndef NETDEV_TX_OK +#define NETDEV_TX_OK 0 +#endif + +#ifndef NETDEV_TX_BUSY +#define NETDEV_TX_BUSY 1 +#endif + +#ifndef CHECKSUM_HW +#define CHECKSUM_HW CHECKSUM_PARTIAL +#endif + +#ifndef offset_in_page +#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) +#endif + +#ifndef PMSG_SUSPEND +#ifdef PM_SUSPEND +/* this is not correct - the value of PM_SUSPEND is different from + * PMSG_SUSPEND, but ndiswrapper doesn't care about the value when + * suspending */ +#define PMSG_SUSPEND PM_SUSPEND +#define PSMG_ON PM_ON +#else +typedef u32 pm_message_t; +#define PMSG_SUSPEND 2 +#define PMSG_ON 0 +#endif +#endif + +#ifndef PCI_D0 +#define PCI_D0 0 +#endif + +#ifndef PCI_D3hot +#define PCI_D3hot 3 +#endif + +#ifndef PCI_D3cold +#define PCI_D3cold 3 +#endif + +#ifndef PM_EVENT_SUSPEND +#define PM_EVENT_SUSPEND 2 +#endif + +#if !defined(HAVE_NETDEV_PRIV) +#define netdev_priv(dev) ((dev)->priv) +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18) +#define ISR_PT_REGS_PARAM_DECL +#define ISR_PT_REGS_ARG +#else +#define ISR_PT_REGS_PARAM_DECL , struct pt_regs *regs +#define ISR_PT_REGS_ARG , NULL +#endif + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16) +#define for_each_possible_cpu(_cpu) for_each_cpu(_cpu) +#endif + +#ifndef flush_icache_range +#define flush_icache_range(start, end) do { } while (0) +#endif + +#ifndef CHECKSUM_PARTIAL +#define CHECKSUM_PARTIAL CHECKSUM_HW +#endif + +#ifndef IRQF_SHARED +#define IRQF_SHARED SA_SHIRQ +#endif + +#define memcpy_skb(skb, from, length) \ + memcpy(skb_put(skb, length), from, length) + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) +#ifndef DMA_BIT_MASK +#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) +#endif +#endif + +#ifndef __GFP_DMA32 +#define __GFP_DMA32 GFP_DMA +#endif + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,22) +#define wrap_kmem_cache_create(name, size, align, flags) \ + kmem_cache_create(name, size, align, flags, NULL, NULL) +#else +#define wrap_kmem_cache_create(name, size, align, flags) \ + kmem_cache_create(name, size, align, flags, NULL) +#endif + +#include "winnt_types.h" +#include "ndiswrapper.h" +#include "pe_linker.h" +#include "wrapmem.h" +#include "lin2win.h" +#include "loader.h" + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) +static inline void netif_tx_lock(struct net_device *dev) +{ + spin_lock(&dev->xmit_lock); +} +static inline void netif_tx_unlock(struct net_device *dev) +{ + spin_unlock(&dev->xmit_lock); +} +static inline void netif_tx_lock_bh(struct net_device *dev) +{ + spin_lock_bh(&dev->xmit_lock); +} +static inline void netif_tx_unlock_bh(struct net_device *dev) +{ + spin_unlock_bh(&dev->xmit_lock); +} +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) +static inline void netif_poll_enable(struct net_device *dev) +{ +} +static inline void netif_poll_disable(struct net_device *dev) +{ +} +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) +#define proc_net_root init_net.proc_net +#else +#define proc_net_root proc_net +#endif + +/* TICK is 100ns */ +#define TICKSPERSEC 10000000 +#define TICKSPERMSEC 10000 +#define SECSPERDAY 86400 +#define TICKSPERJIFFY ((TICKSPERSEC + HZ - 1) / HZ) + +#define int_div_round(x, y) (((x) + (y - 1)) / (y)) + +/* 1601 to 1970 is 369 years plus 89 leap days */ +#define SECS_1601_TO_1970 ((369 * 365 + 89) * (u64)SECSPERDAY) +#define TICKS_1601_TO_1970 (SECS_1601_TO_1970 * TICKSPERSEC) + +/* 100ns units to HZ; if sys_time is negative, relative to current + * clock, otherwise from year 1601 */ +#define SYSTEM_TIME_TO_HZ(sys_time) \ + (((sys_time) <= 0) ? \ + int_div_round(((u64)HZ * (-(sys_time))), TICKSPERSEC) : \ + int_div_round(((s64)HZ * ((sys_time) - ticks_1601())), TICKSPERSEC)) + +#define MSEC_TO_HZ(ms) int_div_round((ms * HZ), 1000) +#define USEC_TO_HZ(us) int_div_round((us * HZ), 1000000) + +extern u64 wrap_ticks_to_boot; + +static inline u64 ticks_1601(void) +{ + return wrap_ticks_to_boot + (u64)jiffies * TICKSPERJIFFY; +} + +typedef void (*generic_func)(void); + +struct wrap_export { + const char *name; + generic_func func; +}; + +#ifdef CONFIG_X86_64 + +#define WIN_SYMBOL(name, argc) \ + {#name, (generic_func) win2lin_ ## name ## _ ## argc} +#define WIN_WIN_SYMBOL(name, argc) \ + {#name, (generic_func) win2lin__win_ ## name ## _ ## argc} +#define WIN_FUNC_DECL(name, argc) \ + extern typeof(name) win2lin_ ## name ## _ ## argc; +#define WIN_FUNC_PTR(name, argc) win2lin_ ## name ## _ ## argc + +#else + +#define WIN_SYMBOL(name, argc) {#name, (generic_func)name} +#define WIN_WIN_SYMBOL(name, argc) {#name, (generic_func)_win_ ## name} +#define WIN_FUNC_DECL(name, argc) +#define WIN_FUNC_PTR(name, argc) name + +#endif + +#define WIN_FUNC(name, argc) name +/* map name s to f - if f is different from s */ +#define WIN_SYMBOL_MAP(s, f) + +#define POOL_TAG(A, B, C, D) \ + ((ULONG)((A) + ((B) << 8) + ((C) << 16) + ((D) << 24))) + +struct pe_image { + char name[MAX_DRIVER_NAME_LEN]; + UINT (*entry)(struct driver_object *, struct unicode_string *) wstdcall; + void *image; + int size; + int type; + + IMAGE_NT_HEADERS *nt_hdr; + IMAGE_OPTIONAL_HEADER *opt_hdr; +}; + +struct ndis_mp_block; + +struct wrap_timer { + struct nt_slist slist; + struct timer_list timer; + struct nt_timer *nt_timer; + long repeat; +#ifdef TIMER_DEBUG + unsigned long wrap_timer_magic; +#endif +}; + +struct ntos_work_item { + struct nt_list list; + void *arg1; + void *arg2; + NTOS_WORK_FUNC func; +}; + +struct wrap_device_setting { + struct nt_list list; + char name[MAX_SETTING_NAME_LEN]; + char value[MAX_SETTING_VALUE_LEN]; + void *encoded; +}; + +struct wrap_bin_file { + char name[MAX_DRIVER_NAME_LEN]; + size_t size; + void *data; +}; + +#define WRAP_DRIVER_CLIENT_ID 1 + +struct wrap_driver { + struct nt_list list; + struct driver_object *drv_obj; + char name[MAX_DRIVER_NAME_LEN]; + char version[MAX_SETTING_VALUE_LEN]; + unsigned short num_pe_images; + struct pe_image pe_images[MAX_DRIVER_PE_IMAGES]; + unsigned short num_bin_files; + struct wrap_bin_file *bin_files; + struct nt_list wrap_devices; + struct nt_list settings; + int dev_type; + struct ndis_driver *ndis_driver; +}; + +enum hw_status { + HW_INITIALIZED = 1, HW_SUSPENDED, HW_HALTED, HW_PRESENT, +}; + +struct wrap_device { + /* first part is (de)initialized once by loader */ + struct nt_list list; + int dev_bus; + int vendor; + int device; + int subvendor; + int subdevice; + char conf_file_name[MAX_DRIVER_NAME_LEN]; + char driver_name[MAX_DRIVER_NAME_LEN]; + struct wrap_driver *driver; + struct nt_list settings; + + /* rest should be (de)initialized when a device is + * (un)plugged */ + struct cm_resource_list *resource_list; + unsigned long hw_status; + struct device_object *pdo; + union { + struct { + struct pci_dev *pdev; + enum device_power_state wake_state; + } pci; + struct { + struct usb_device *udev; + struct usb_interface *intf; + int num_alloc_urbs; + struct nt_list wrap_urb_list; + } usb; + }; + union { + struct ndis_device *wnd; + }; +}; + +#define wrap_is_pci_bus(dev_bus) \ + (WRAP_BUS(dev_bus) == WRAP_PCI_BUS || \ + WRAP_BUS(dev_bus) == WRAP_PCMCIA_BUS) +#ifdef ENABLE_USB +/* earlier versions of ndiswrapper used 0 as USB_BUS */ +#define wrap_is_usb_bus(dev_bus) \ + (WRAP_BUS(dev_bus) == WRAP_USB_BUS || \ + WRAP_BUS(dev_bus) == WRAP_INTERNAL_BUS) +#else +#define wrap_is_usb_bus(dev_bus) 0 +#endif +#define wrap_is_bluetooth_device(dev_bus) \ + (WRAP_DEVICE(dev_bus) == WRAP_BLUETOOTH_DEVICE1 || \ + WRAP_DEVICE(dev_bus) == WRAP_BLUETOOTH_DEVICE2) + +extern workqueue_struct_t *ntos_wq; +#define schedule_ntos_work(work_struct) queue_work(ntos_wq, work_struct) +#define schedule_work(work_struct) queue_work(ntos_wq, work_struct) + +extern workqueue_struct_t *ndis_wq; +#define schedule_ndis_work(work_struct) queue_work(ndis_wq, work_struct) + +extern workqueue_struct_t *wrapndis_wq; +#define schedule_wrapndis_work(work_struct) queue_work(wrapndis_wq, work_struct) + +#define atomic_unary_op(var, size, oper) \ +do { \ + if (size == 1) \ + __asm__ __volatile__( \ + LOCK_PREFIX oper "b %b0\n\t" : "+m" (var)); \ + else if (size == 2) \ + __asm__ __volatile__( \ + LOCK_PREFIX oper "w %w0\n\t" : "+m" (var)); \ + else if (size == 4) \ + __asm__ __volatile__( \ + LOCK_PREFIX oper "l %0\n\t" : "+m" (var)); \ + else if (size == 8) \ + __asm__ __volatile__( \ + LOCK_PREFIX oper "q %q0\n\t" : "+m" (var)); \ + else { \ + extern void _invalid_op_size_(void); \ + _invalid_op_size_(); \ + } \ +} while (0) + +#define atomic_inc_var_size(var, size) atomic_unary_op(var, size, "inc") + +#define atomic_inc_var(var) atomic_inc_var_size(var, sizeof(var)) + +#define atomic_dec_var_size(var, size) atomic_unary_op(var, size, "dec") + +#define atomic_dec_var(var) atomic_dec_var_size(var, sizeof(var)) + +#define pre_atomic_add(var, i) \ +({ \ + typeof(var) pre; \ + __asm__ __volatile__( \ + LOCK_PREFIX "xadd %0, %1\n\t" \ + : "=r"(pre), "+m"(var) \ + : "0"(i)); \ + pre; \ +}) + +#define post_atomic_add(var, i) (pre_atomic_add(var, i) + i) + +#ifndef in_atomic +#define in_atomic() in_interrupt() +#endif + +#ifndef preempt_enable_no_resched +#define preempt_enable_no_resched() preempt_enable() +#endif + +//#define DEBUG_IRQL 1 + +#ifdef DEBUG_IRQL +#define assert_irql(cond) \ +do { \ + KIRQL _irql_ = current_irql(); \ + if (!(cond)) { \ + WARNING("assertion '%s' failed: %d", #cond, _irql_); \ + DBG_BLOCK(4) { \ + dump_stack(); \ + } \ + } \ +} while (0) +#else +#define assert_irql(cond) do { } while (0) +#endif + +/* When preempt is enabled, we should preempt_disable to raise IRQL to + * DISPATCH_LEVEL, to be consistent with the semantics. However, using + * a mutex instead, so that only ndiswrapper threads run one at a time + * on a processor when at DISPATCH_LEVEL seems to be enough. So that + * is what we will use until we learn otherwise. If + * preempt_(en|dis)able is required for some reason, comment out + * following #define. */ + +#define WRAP_PREEMPT 1 + +#if !defined(CONFIG_PREEMPT) || defined(CONFIG_PREEMPT_RT) +#ifndef WRAP_PREEMPT +#define WRAP_PREEMPT 1 +#endif +#endif + +//#undef WRAP_PREEMPT + +#ifdef WRAP_PREEMPT + +typedef struct { + int count; + struct mutex lock; +#ifdef CONFIG_SMP + typeof(current->cpus_allowed) cpus_allowed; +#endif + struct task_struct *task; +} irql_info_t; + +DECLARE_PER_CPU(irql_info_t, irql_info); + +static inline KIRQL raise_irql(KIRQL newirql) +{ + irql_info_t *info; + + assert(newirql == DISPATCH_LEVEL); + info = &get_cpu_var(irql_info); + if (info->task == current) { + assert(info->count > 0); + assert(mutex_is_locked(&info->lock)); +#if defined(CONFIG_SMP) && defined(DEBUG) + do { + cpumask_t cpumask; + cpumask = cpumask_of_cpu(smp_processor_id()); + cpus_xor(cpumask, cpumask, current->cpus_allowed); + assert(cpus_empty(cpumask)); + } while (0); +#endif + info->count++; + put_cpu_var(irql_info); + return DISPATCH_LEVEL; + } + /* TODO: is this enough to pin down to current cpu? */ +#ifdef CONFIG_SMP + assert(task_cpu(current) == smp_processor_id()); + info->cpus_allowed = current->cpus_allowed; + current->cpus_allowed = cpumask_of_cpu(smp_processor_id()); +#endif + put_cpu_var(irql_info); + mutex_lock(&info->lock); + assert(info->count == 0); + assert(info->task == NULL); + info->count = 1; + info->task = current; + return PASSIVE_LEVEL; +} + +static inline void lower_irql(KIRQL oldirql) +{ + irql_info_t *info; + + assert(oldirql <= DISPATCH_LEVEL); + info = &get_cpu_var(irql_info); + assert(info->task == current); + assert(mutex_is_locked(&info->lock)); + assert(info->count > 0); + if (--info->count == 0) { + info->task = NULL; +#ifdef CONFIG_SMP + current->cpus_allowed = info->cpus_allowed; +#endif + mutex_unlock(&info->lock); + } + put_cpu_var(irql_info); +} + +static inline KIRQL current_irql(void) +{ + int count; + if (in_irq() || irqs_disabled()) + EXIT4(return DIRQL); + if (in_atomic() || in_interrupt()) + EXIT4(return SOFT_IRQL); + count = get_cpu_var(irql_info).count; + put_cpu_var(irql_info); + if (count) + EXIT6(return DISPATCH_LEVEL); + else + EXIT6(return PASSIVE_LEVEL); +} + +#else + +static inline KIRQL current_irql(void) +{ + if (in_irq() || irqs_disabled()) + EXIT4(return DIRQL); + if (in_interrupt()) + EXIT4(return SOFT_IRQL); + if (in_atomic()) + EXIT6(return DISPATCH_LEVEL); + else + EXIT6(return PASSIVE_LEVEL); +} + +static inline KIRQL raise_irql(KIRQL newirql) +{ + KIRQL ret = in_atomic() ? DISPATCH_LEVEL : PASSIVE_LEVEL; + assert(newirql == DISPATCH_LEVEL); + assert(current_irql() <= DISPATCH_LEVEL); + preempt_disable(); + return ret; +} + +static inline void lower_irql(KIRQL oldirql) +{ + assert(current_irql() == DISPATCH_LEVEL); + preempt_enable(); +} + +#endif + +#define irql_gfp() (in_atomic() ? GFP_ATOMIC : GFP_KERNEL) + +/* Windows spinlocks are of type ULONG_PTR which is not big enough to + * store Linux spinlocks; so we implement Windows spinlocks using + * ULONG_PTR space with our own functions/macros */ + +/* Windows seems to use 0 for unlocked state of spinlock - if Linux + * convention of 1 for unlocked state is used, at least prism54 driver + * crashes */ + +#define NT_SPIN_LOCK_UNLOCKED 0 +#define NT_SPIN_LOCK_LOCKED 1 + +static inline void nt_spin_lock_init(NT_SPIN_LOCK *lock) +{ + *lock = NT_SPIN_LOCK_UNLOCKED; +} + +#ifdef CONFIG_SMP + +static inline void nt_spin_lock(NT_SPIN_LOCK *lock) +{ + __asm__ __volatile__( + "1:\t" + " xchgl %1, %0\n\t" + " testl %1, %1\n\t" + " jz 3f\n" + "2:\t" + " rep; nop\n\t" + " cmpl %2, %0\n\t" + " je 1b\n\t" + " jmp 2b\n" + "3:\n\t" + : "+m" (*lock) + : "r" (NT_SPIN_LOCK_LOCKED), "i" (NT_SPIN_LOCK_UNLOCKED)); +} + +static inline void nt_spin_unlock(NT_SPIN_LOCK *lock) +{ + *lock = NT_SPIN_LOCK_UNLOCKED; +} + +#else // CONFIG_SMP + +#define nt_spin_lock(lock) do { } while (0) + +#define nt_spin_unlock(lock) do { } while (0) + +#endif // CONFIG_SMP + +/* When kernel would've disabled preempt (e.g., in interrupt + * handlers), we need to fake preempt so driver thinks it is running + * at right IRQL */ + +/* raise IRQL to given (higher) IRQL if necessary before locking */ +static inline KIRQL nt_spin_lock_irql(NT_SPIN_LOCK *lock, KIRQL newirql) +{ + KIRQL oldirql = raise_irql(newirql); + nt_spin_lock(lock); + return oldirql; +} + +/* lower IRQL to given (lower) IRQL if necessary after unlocking */ +static inline void nt_spin_unlock_irql(NT_SPIN_LOCK *lock, KIRQL oldirql) +{ + nt_spin_unlock(lock); + lower_irql(oldirql); +} + +#define nt_spin_lock_irqsave(lock, flags) \ +do { \ + local_irq_save(flags); \ + preempt_disable(); \ + nt_spin_lock(lock); \ +} while (0) + +#define nt_spin_unlock_irqrestore(lock, flags) \ +do { \ + nt_spin_unlock(lock); \ + preempt_enable_no_resched(); \ + local_irq_restore(flags); \ + preempt_check_resched(); \ +} while (0) + +static inline ULONG SPAN_PAGES(void *ptr, SIZE_T length) +{ + return PAGE_ALIGN(((unsigned long)ptr & (PAGE_SIZE - 1)) + length) + >> PAGE_SHIFT; +} + +#ifdef CONFIG_X86_64 + +/* TODO: can these be implemented without using spinlock? */ + +static inline struct nt_slist *PushEntrySList(nt_slist_header *head, + struct nt_slist *entry, + NT_SPIN_LOCK *lock) +{ + KIRQL irql = nt_spin_lock_irql(lock, DISPATCH_LEVEL); + entry->next = head->next; + head->next = entry; + head->depth++; + nt_spin_unlock_irql(lock, irql); + TRACE4("%p, %p, %p", head, entry, entry->next); + return entry->next; +} + +static inline struct nt_slist *PopEntrySList(nt_slist_header *head, + NT_SPIN_LOCK *lock) +{ + struct nt_slist *entry; + KIRQL irql = nt_spin_lock_irql(lock, DISPATCH_LEVEL); + entry = head->next; + if (entry) { + head->next = entry->next; + head->depth--; + } + nt_spin_unlock_irql(lock, irql); + TRACE4("%p, %p", head, entry); + return entry; +} + +#else + +#define u64_low_32(x) ((u32)x) +#define u64_high_32(x) ((u32)(x >> 32)) + +static inline u64 cmpxchg8b(volatile u64 *ptr, u64 old, u64 new) +{ + u64 prev; + + __asm__ __volatile__( + "\n" + LOCK_PREFIX "cmpxchg8b %0\n" + : "+m" (*ptr), "=A" (prev) + : "A" (old), "b" (u64_low_32(new)), "c" (u64_high_32(new))); + return prev; +} + +/* slist routines below update slist atomically - no need for + * spinlocks */ + +static inline struct nt_slist *PushEntrySList(nt_slist_header *head, + struct nt_slist *entry, + NT_SPIN_LOCK *lock) +{ + nt_slist_header old, new; + do { + old.align = head->align; + entry->next = old.next; + new.next = entry; + new.depth = old.depth + 1; + } while (cmpxchg8b(&head->align, old.align, new.align) != old.align); + TRACE4("%p, %p, %p", head, entry, old.next); + return old.next; +} + +static inline struct nt_slist *PopEntrySList(nt_slist_header *head, + NT_SPIN_LOCK *lock) +{ + struct nt_slist *entry; + nt_slist_header old, new; + do { + old.align = head->align; + entry = old.next; + if (!entry) + break; + new.next = entry->next; + new.depth = old.depth - 1; + } while (cmpxchg8b(&head->align, old.align, new.align) != old.align); + TRACE4("%p, %p", head, entry); + return entry; +} + +#endif + +#define sleep_hz(n) \ +do { \ + set_current_state(TASK_INTERRUPTIBLE); \ + schedule_timeout(n); \ +} while (0) + +int ntoskernel_init(void); +void ntoskernel_exit(void); +int ntoskernel_init_device(struct wrap_device *wd); +void ntoskernel_exit_device(struct wrap_device *wd); +void *allocate_object(ULONG size, enum common_object_type type, + struct unicode_string *name); +void free_object(void *object); + +int usb_init(void); +void usb_exit(void); +int usb_init_device(struct wrap_device *wd); +void usb_exit_device(struct wrap_device *wd); +void usb_cancel_pending_urbs(void); + +int crt_init(void); +void crt_exit(void); +int rtl_init(void); +void rtl_exit(void); +int wrap_procfs_init(void); +void wrap_procfs_remove(void); + +int link_pe_images(struct pe_image *pe_image, unsigned short n); + +int stricmp(const char *s1, const char *s2); +void dump_bytes(const char *name, const u8 *from, int len); +struct mdl *allocate_init_mdl(void *virt, ULONG length); +void free_mdl(struct mdl *mdl); +struct driver_object *find_bus_driver(const char *name); +void free_custom_extensions(struct driver_extension *drv_obj_ext); +struct nt_thread *get_current_nt_thread(void); +u64 ticks_1601(void); +int schedule_ntos_work_item(NTOS_WORK_FUNC func, void *arg1, void *arg2); +void wrap_init_timer(struct nt_timer *nt_timer, enum timer_type type, + struct ndis_mp_block *nmb); +BOOLEAN wrap_set_timer(struct nt_timer *nt_timer, unsigned long expires_hz, + unsigned long repeat_hz, struct kdpc *kdpc); + +LONG InterlockedDecrement(LONG volatile *val) wfastcall; +LONG InterlockedIncrement(LONG volatile *val) wfastcall; +struct nt_list *ExInterlockedInsertHeadList + (struct nt_list *head, struct nt_list *entry, + NT_SPIN_LOCK *lock) wfastcall; +struct nt_list *ExInterlockedInsertTailList + (struct nt_list *head, struct nt_list *entry, + NT_SPIN_LOCK *lock) wfastcall; +struct nt_list *ExInterlockedRemoveHeadList + (struct nt_list *head, NT_SPIN_LOCK *lock) wfastcall; +NTSTATUS IofCallDriver(struct device_object *dev_obj, struct irp *irp) wfastcall; +KIRQL KfRaiseIrql(KIRQL newirql) wfastcall; +void KfLowerIrql(KIRQL oldirql) wfastcall; +KIRQL KfAcquireSpinLock(NT_SPIN_LOCK *lock) wfastcall; +void KfReleaseSpinLock(NT_SPIN_LOCK *lock, KIRQL oldirql) wfastcall; +void IofCompleteRequest(struct irp *irp, CHAR prio_boost) wfastcall; +void KefReleaseSpinLockFromDpcLevel(NT_SPIN_LOCK *lock) wfastcall; + +LONG ObfReferenceObject(void *object) wfastcall; +void ObfDereferenceObject(void *object) wfastcall; + +#define ObReferenceObject(object) ObfReferenceObject(object) +#define ObDereferenceObject(object) ObfDereferenceObject(object) + +void WRITE_PORT_UCHAR(ULONG_PTR port, UCHAR value) wstdcall; +UCHAR READ_PORT_UCHAR(ULONG_PTR port) wstdcall; + +#undef ExAllocatePoolWithTag +void *ExAllocatePoolWithTag(enum pool_type pool_type, SIZE_T size, + ULONG tag) wstdcall; +#if defined(ALLOC_DEBUG) && ALLOC_DEBUG > 1 +#define ExAllocatePoolWithTag(pool_type, size, tag) \ + wrap_ExAllocatePoolWithTag(pool_type, size, tag, __FILE__, __LINE__) +#endif + +void ExFreePool(void *p) wstdcall; +ULONG MmSizeOfMdl(void *base, ULONG length) wstdcall; +void __iomem *MmMapIoSpace(PHYSICAL_ADDRESS phys_addr, SIZE_T size, + enum memory_caching_type cache) wstdcall; +void MmUnmapIoSpace(void __iomem *addr, SIZE_T size) wstdcall; +void MmProbeAndLockPages(struct mdl *mdl, KPROCESSOR_MODE access_mode, + enum lock_operation operation) wstdcall; +void MmUnlockPages(struct mdl *mdl) wstdcall; +void KeInitializeEvent(struct nt_event *nt_event, + enum event_type type, BOOLEAN state) wstdcall; +LONG KeSetEvent(struct nt_event *nt_event, KPRIORITY incr, + BOOLEAN wait) wstdcall; +LONG KeResetEvent(struct nt_event *nt_event) wstdcall; +void KeClearEvent(struct nt_event *nt_event) wstdcall; +void KeInitializeDpc(struct kdpc *kdpc, void *func, void *ctx) wstdcall; +BOOLEAN queue_kdpc(struct kdpc *kdpc); +BOOLEAN dequeue_kdpc(struct kdpc *kdpc); + +void KeFlushQueuedDpcs(void) wstdcall; +NTSTATUS IoConnectInterrupt(struct kinterrupt **kinterrupt, + PKSERVICE_ROUTINE service_routine, + void *service_context, NT_SPIN_LOCK *lock, + ULONG vector, KIRQL irql, KIRQL synch_irql, + enum kinterrupt_mode interrupt_mode, + BOOLEAN shareable, KAFFINITY processor_enable_mask, + BOOLEAN floating_save) wstdcall; +void IoDisconnectInterrupt(struct kinterrupt *interrupt) wstdcall; +BOOLEAN KeSynchronizeExecution(struct kinterrupt *interrupt, + PKSYNCHRONIZE_ROUTINE synch_routine, + void *ctx) wstdcall; + +NTSTATUS KeWaitForSingleObject(void *object, KWAIT_REASON reason, + KPROCESSOR_MODE waitmode, BOOLEAN alertable, + LARGE_INTEGER *timeout) wstdcall; +struct mdl *IoAllocateMdl(void *virt, ULONG length, BOOLEAN second_buf, + BOOLEAN charge_quota, struct irp *irp) wstdcall; +void MmBuildMdlForNonPagedPool(struct mdl *mdl) wstdcall; +void IoFreeMdl(struct mdl *mdl) wstdcall; +NTSTATUS IoCreateDevice(struct driver_object *driver, ULONG dev_ext_length, + struct unicode_string *dev_name, DEVICE_TYPE dev_type, + ULONG dev_chars, BOOLEAN exclusive, + struct device_object **dev_obj) wstdcall; +NTSTATUS IoCreateSymbolicLink(struct unicode_string *link, + struct unicode_string *dev_name) wstdcall; +void IoDeleteDevice(struct device_object *dev) wstdcall; +void IoDetachDevice(struct device_object *topdev) wstdcall; +struct device_object *IoGetAttachedDevice(struct device_object *dev) wstdcall; +struct device_object *IoGetAttachedDeviceReference + (struct device_object *dev) wstdcall; +NTSTATUS IoAllocateDriverObjectExtension + (struct driver_object *drv_obj, void *client_id, ULONG extlen, + void **ext) wstdcall; +void *IoGetDriverObjectExtension(struct driver_object *drv, + void *client_id) wstdcall; +struct device_object *IoAttachDeviceToDeviceStack + (struct device_object *src, struct device_object *dst) wstdcall; +void KeInitializeEvent(struct nt_event *nt_event, enum event_type type, + BOOLEAN state) wstdcall; +struct irp *IoAllocateIrp(char stack_count, BOOLEAN charge_quota) wstdcall; +void IoFreeIrp(struct irp *irp) wstdcall; +BOOLEAN IoCancelIrp(struct irp *irp) wstdcall; +struct irp *IoBuildSynchronousFsdRequest + (ULONG major_func, struct device_object *dev_obj, void *buf, + ULONG length, LARGE_INTEGER *offset, struct nt_event *event, + struct io_status_block *status) wstdcall; +struct irp *IoBuildAsynchronousFsdRequest + (ULONG major_func, struct device_object *dev_obj, void *buf, + ULONG length, LARGE_INTEGER *offset, + struct io_status_block *status) wstdcall; +NTSTATUS PoCallDriver(struct device_object *dev_obj, struct irp *irp) wstdcall; + +NTSTATUS IoPassIrpDown(struct device_object *dev_obj, struct irp *irp) wstdcall; +WIN_FUNC_DECL(IoPassIrpDown,2); +NTSTATUS IoSyncForwardIrp(struct device_object *dev_obj, + struct irp *irp) wstdcall; +NTSTATUS IoAsyncForwardIrp(struct device_object *dev_obj, + struct irp *irp) wstdcall; +NTSTATUS IoInvalidDeviceRequest(struct device_object *dev_obj, + struct irp *irp) wstdcall; + +KIRQL KeGetCurrentIrql(void) wstdcall; +void KeInitializeSpinLock(NT_SPIN_LOCK *lock) wstdcall; +void KeAcquireSpinLock(NT_SPIN_LOCK *lock, KIRQL *irql) wstdcall; +void KeReleaseSpinLock(NT_SPIN_LOCK *lock, KIRQL oldirql) wstdcall; +KIRQL KeAcquireSpinLockRaiseToDpc(NT_SPIN_LOCK *lock) wstdcall; + +void IoAcquireCancelSpinLock(KIRQL *irql) wstdcall; +void IoReleaseCancelSpinLock(KIRQL irql) wstdcall; + +void RtlCopyMemory(void *dst, const void *src, SIZE_T length) wstdcall; +NTSTATUS RtlUnicodeStringToAnsiString + (struct ansi_string *dst, const struct unicode_string *src, + BOOLEAN dup) wstdcall; +NTSTATUS RtlAnsiStringToUnicodeString + (struct unicode_string *dst, const struct ansi_string *src, + BOOLEAN dup) wstdcall; +void RtlInitAnsiString(struct ansi_string *dst, const char *src) wstdcall; +void RtlInitString(struct ansi_string *dst, const char *src) wstdcall; +void RtlInitUnicodeString(struct unicode_string *dest, + const wchar_t *src) wstdcall; +void RtlFreeUnicodeString(struct unicode_string *string) wstdcall; +void RtlFreeAnsiString(struct ansi_string *string) wstdcall; +LONG RtlCompareUnicodeString(const struct unicode_string *s1, + const struct unicode_string *s2, + BOOLEAN case_insensitive) wstdcall; +void RtlCopyUnicodeString(struct unicode_string *dst, + struct unicode_string *src) wstdcall; +NTSTATUS RtlUpcaseUnicodeString(struct unicode_string *dst, + struct unicode_string *src, + BOOLEAN alloc) wstdcall; +void KeInitializeTimer(struct nt_timer *nt_timer) wstdcall; +void KeInitializeTimerEx(struct nt_timer *nt_timer, + enum timer_type type) wstdcall; +BOOLEAN KeSetTimerEx(struct nt_timer *nt_timer, LARGE_INTEGER duetime_ticks, + LONG period_ms, struct kdpc *kdpc) wstdcall; +BOOLEAN KeSetTimer(struct nt_timer *nt_timer, LARGE_INTEGER duetime_ticks, + struct kdpc *kdpc) wstdcall; +BOOLEAN KeCancelTimer(struct nt_timer *nt_timer) wstdcall; +void KeInitializeDpc(struct kdpc *kdpc, void *func, void *ctx) wstdcall; +struct nt_thread *KeGetCurrentThread(void) wstdcall; +NTSTATUS ObReferenceObjectByHandle(void *handle, ACCESS_MASK desired_access, + void *obj_type, KPROCESSOR_MODE access_mode, + void **object, void *handle_info) wstdcall; + +void adjust_user_shared_data_addr(char *driver, unsigned long length); + +extern spinlock_t ntoskernel_lock; +extern spinlock_t irp_cancel_lock; +extern struct nt_list object_list; +#ifdef CONFIG_X86_64 +extern struct kuser_shared_data kuser_shared_data; +#endif + +#define IoCompleteRequest(irp, prio) IofCompleteRequest(irp, prio) +#define IoCallDriver(dev, irp) IofCallDriver(dev, irp) + +#if defined(IO_DEBUG) +#define DUMP_IRP(_irp) \ +do { \ + struct io_stack_location *_irp_sl; \ + _irp_sl = IoGetCurrentIrpStackLocation(_irp); \ + IOTRACE("irp: %p, stack size: %d, cl: %d, sl: %p, dev_obj: %p, " \ + "mj_fn: %d, minor_fn: %d, nt_urb: %p, event: %p", \ + _irp, _irp->stack_count, (_irp)->current_location, \ + _irp_sl, _irp_sl->dev_obj, _irp_sl->major_fn, \ + _irp_sl->minor_fn, IRP_URB(_irp), \ + (_irp)->user_event); \ +} while (0) +#else +#define DUMP_IRP(_irp) do { } while (0) +#endif + +#endif // _NTOSKERNEL_H_ --- linux-2.6.32.orig/ubuntu/ndiswrapper/usb.h +++ linux-2.6.32/ubuntu/ndiswrapper/usb.h @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2004 Jan Kiszka + * Copyright (C) 2005 Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _USB_H_ +#define _USB_H_ + +#include "ntoskernel.h" + +#define IOCTL_INTERNAL_USB_SUBMIT_URB 0x00220003 +#define IOCTL_INTERNAL_USB_RESET_PORT 0x00220007 +#define IOCTL_INTERNAL_USB_GET_PORT_STATUS 0x00220013 +#define IOCTL_INTERNAL_USB_CYCLE_PORT 0x0022001F +#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION 0x00220027 + +#define URB_FUNCTION_SELECT_CONFIGURATION 0x0000 +#define URB_FUNCTION_SELECT_INTERFACE 0x0001 +#define URB_FUNCTION_ABORT_PIPE 0x0002 +#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003 +#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004 +#define URB_FUNCTION_GET_FRAME_LENGTH 0x0005 +#define URB_FUNCTION_SET_FRAME_LENGTH 0x0006 +#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007 +#define URB_FUNCTION_CONTROL_TRANSFER 0x0008 +#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009 +#define URB_FUNCTION_ISOCH_TRANSFER 0x000A +#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B +#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C +#define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D +#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E +#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F +#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010 +#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011 +#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012 +#define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013 +#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014 +#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015 +#define URB_FUNCTION_RESERVED_0X0016 0x0016 +#define URB_FUNCTION_VENDOR_DEVICE 0x0017 +#define URB_FUNCTION_VENDOR_INTERFACE 0x0018 +#define URB_FUNCTION_VENDOR_ENDPOINT 0x0019 +#define URB_FUNCTION_CLASS_DEVICE 0x001A +#define URB_FUNCTION_CLASS_INTERFACE 0x001B +#define URB_FUNCTION_CLASS_ENDPOINT 0x001C +#define URB_FUNCTION_RESERVE_0X001D 0x001D +#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E +#define URB_FUNCTION_CLASS_OTHER 0x001F +#define URB_FUNCTION_VENDOR_OTHER 0x0020 +#define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021 +#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022 +#define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023 +#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024 +#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025 +#define URB_FUNCTION_GET_CONFIGURATION 0x0026 +#define URB_FUNCTION_GET_INTERFACE 0x0027 +#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028 +#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029 +#define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR 0x002A +#define URB_FUNCTION_RESERVE_0X002B 0x002B +#define URB_FUNCTION_RESERVE_0X002C 0x002C +#define URB_FUNCTION_RESERVE_0X002D 0x002D +#define URB_FUNCTION_RESERVE_0X002E 0x002E +#define URB_FUNCTION_RESERVE_0X002F 0x002F +// USB 2.0 calls start at 0x0030 +#define URB_FUNCTION_SYNC_RESET_PIPE 0x0030 +#define URB_FUNCTION_SYNC_CLEAR_STALL 0x0031 +#define URB_FUNCTION_CONTROL_TRANSFER_EX 0x0032 + +#define USBD_PF_CHANGE_MAX_PACKET 0x00000001 + +#define USBD_TRANSFER_DIRECTION_OUT 0 +#define USBD_TRANSFER_DIRECTION_IN 1 + +#define USBD_SHORT_TRANSFER_OK 0x00000002 +#define USBD_START_ISO_TRANSFER_ASAP 0x00000004 +#define USBD_DEFAULT_PIPE_TRANSFER 0x00000008 + +#define USBD_TRANSFER_DIRECTION(flags) \ + ((flags) & USBD_TRANSFER_DIRECTION_IN) + +enum pipe_type {UsbdPipeTypeControl = USB_ENDPOINT_XFER_CONTROL, + UsbdPipeTypeIsochronous = USB_ENDPOINT_XFER_ISOC, + UsbdPipeTypeBulk = USB_ENDPOINT_XFER_BULK, + UsbdPipeTypeInterrupt = USB_ENDPOINT_XFER_INT}; + +#define USBD_IS_BULK_PIPE(pipe_handle) \ + (((pipe_handle)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) \ + == USB_ENDPOINT_XFER_BULK) + +#define USBD_IS_INT_PIPE(pipe_handle) \ + (((pipe_handle)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) \ + == USB_ENDPOINT_XFER_INT) + +#define USBD_PORT_ENABLED 0x00000001 +#define USBD_PORT_CONNECTED 0x00000002 + +typedef LONG USBD_STATUS; + +#define USBD_STATUS_SUCCESS 0x0 +#define USBD_STATUS_PENDING 0x40000000 +#define USBD_STATUS_CANCELED 0x00010000 + +#define USBD_STATUS_CRC 0xC0000001 +#define USBD_STATUS_BTSTUFF 0xC0000002 +#define USBD_STATUS_DATA_TOGGLE_MISMATCH 0xC0000003 +#define USBD_STATUS_STALL_PID 0xC0000004 +#define USBD_STATUS_DEV_NOT_RESPONDING 0xC0000005 +#define USBD_STATUS_PID_CHECK_FAILURE 0xC0000006 +#define USBD_STATUS_UNEXPECTED_PID 0xC0000007 +#define USBD_STATUS_DATA_OVERRUN 0xC0000008 +#define USBD_STATUS_DATA_UNDERRUN 0xC0000009 +#define USBD_STATUS_RESERVED1 0xC000000A +#define USBD_STATUS_RESERVED2 0xC000000B +#define USBD_STATUS_BUFFER_OVERRUN 0xC000000C +#define USBD_STATUS_BUFFER_UNDERRUN 0xC000000D +#define USBD_STATUS_NOT_ACCESSED 0xC000000F +#define USBD_STATUS_FIFO 0xC0000010 +#define USBD_STATUS_XACT_ERROR 0xC0000011 +#define USBD_STATUS_BABBLE_DETECTED 0xC0000012 +#define USBD_STATUS_DATA_BUFFER_ERROR 0xC0000013 + +#define USBD_STATUS_NOT_SUPPORTED 0xC0000E00 +#define USBD_STATUS_BUFFER_TOO_SMALL 0xC0003000 +#define USBD_STATUS_TIMEOUT 0xC0006000 +#define USBD_STATUS_DEVICE_GONE 0xC0007000 + +#define USBD_STATUS_NO_MEMORY 0x80000100 +#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200 +#define USBD_STATUS_INVALID_PARAMETER 0x80000300 +#define USBD_STATUS_REQUEST_FAILED 0x80000500 +#define USBD_STATUS_INVALID_PIPE_HANDLE 0x80000600 +#define USBD_STATUS_ERROR_SHORT_TRANSFER 0x80000900 + +#define USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE PAGE_SIZE + +struct urb_hcd_area { + void *reserved8[8]; +}; + +typedef struct usb_endpoint_descriptor *usbd_pipe_handle; +typedef struct usb_descriptor_header usb_common_descriptor_t; + +struct usbd_pipe_information { + USHORT wMaxPacketSize; + UCHAR bEndpointAddress; + UCHAR bInterval; + enum pipe_type type; + usbd_pipe_handle handle; + ULONG max_tx_size; + ULONG flags; +}; + +struct usbd_interface_information { + USHORT bLength; + UCHAR bInterfaceNumber; + UCHAR bAlternateSetting; + UCHAR bInterfaceClass; + UCHAR bInterfaceSubClass; + UCHAR bInterfaceProtocol; + UCHAR reserved; + void *handle; + ULONG bNumEndpoints; + struct usbd_pipe_information pipes[1]; +}; + +struct usbd_interface_list_entry { + struct usb_interface_descriptor *intf_desc; + struct usbd_interface_information *intf; +}; + +struct nt_urb_header { + USHORT length; + USHORT function; + USBD_STATUS status; + void *usbd_dev_handle; + ULONG usbd_flags; +}; + +struct usbd_select_interface { + struct nt_urb_header header; + void *handle; + struct usbd_interface_information intf; +}; + +struct usbd_select_configuration { + struct nt_urb_header header; + struct usb_config_descriptor *config; + void *handle; + struct usbd_interface_information intf; +}; + +struct usbd_control_descriptor_request { + struct nt_urb_header header; + void *reserved; + ULONG reserved0; + ULONG transfer_buffer_length; + void *transfer_buffer; + struct mdl *mdl; + union nt_urb *urb_link; + struct urb_hcd_area hca; + USHORT reserved1; + UCHAR index; + UCHAR desc_type; + USHORT language_id; + USHORT reserved2; +}; + +struct usbd_bulk_or_intr_transfer { + struct nt_urb_header header; + usbd_pipe_handle pipe_handle; + ULONG transfer_flags; + ULONG transfer_buffer_length; + void *transfer_buffer; + struct mdl *mdl; + union nt_urb *urb_link; + struct urb_hcd_area hca; +}; + +struct usbd_pipe_request { + struct nt_urb_header header; + usbd_pipe_handle pipe_handle; +}; + +struct usbd_vendor_or_class_request { + struct nt_urb_header header; + void *reserved; + ULONG transfer_flags; + ULONG transfer_buffer_length; + void *transfer_buffer; + struct mdl *mdl; + union nt_urb *link; + struct urb_hcd_area hca; + UCHAR reserved_bits; + UCHAR request; + USHORT value; + USHORT index; + USHORT reserved1; +}; + +struct urb_control_feature_request { + struct nt_urb_header header; + void *reserved; + ULONG reserved2; + ULONG reserved3; + void *reserved4; + struct mdl *reserved5; + union nt_urb *link; + struct urb_hcd_area hca; + USHORT reserved0; + USHORT feature_selector; + USHORT index; + USHORT reserved1; +}; + +struct urb_control_get_status_request { + struct nt_urb_header header; + void *reserved; + ULONG reserved0; + ULONG transfer_buffer_length; + void *transfer_buffer; + struct mdl *mdl; + union nt_urb *link; + struct urb_hcd_area hca; + UCHAR reserved1[4]; + USHORT index; + USHORT reserved2; +}; + +struct usbd_iso_packet_desc { + ULONG offset; + ULONG length; + USBD_STATUS status; +}; + +struct usbd_isochronous_transfer { + struct nt_urb_header header; + usbd_pipe_handle pipe_handle; + ULONG transfer_flags; + ULONG transfer_buffer_length; + void *transfer_buffer; + struct mdl *mdl; + union nt_urb *urb_link; + struct urb_hcd_area hca; + ULONG start_frame; + ULONG number_of_packets; + ULONG error_count; + struct usbd_iso_packet_desc iso_packet[1]; +}; + +union nt_urb { + struct nt_urb_header header; + struct usbd_select_interface select_intf; + struct usbd_select_configuration select_conf; + struct usbd_bulk_or_intr_transfer bulk_int_transfer; + struct usbd_control_descriptor_request control_desc; + struct usbd_vendor_or_class_request vendor_class_request; + struct usbd_isochronous_transfer isochronous; + struct usbd_pipe_request pipe_req; + struct urb_control_feature_request feat_req; + struct urb_control_get_status_request status_req; +}; + +struct usbd_bus_interface_usbdi { + USHORT Size; + USHORT Version; + void *Context; + void *InterfaceReference; + void *InterfaceDereference; + void *GetUSBDIVersion; + void *QueryBusTime; + void *SubmitIsoOutUrb; + void *QueryBusInformation; + /* version 1 and above have following field */ + void *IsDeviceHighSpeed; + /* version 2 (and above) have following field */ + void *LogEntry; +}; + +struct usbd_bus_information_level { + ULONG TotalBandwidth; + ULONG ConsumedBandwidth; + /* level 1 and above have following fields */ + ULONG ControllerNameLength; + wchar_t ControllerName[1]; +}; + +#define USBDI_VERSION_XP 0x00000500 // Windows XP +#define USB_HCD_CAPS_SUPPORTS_RT_THREADS 0x00000001 +#define USB_BUSIF_USBDI_VERSION_0 0x0000 +#define USB_BUSIF_USBDI_VERSION_1 0x0001 +#define USB_BUSIF_USBDI_VERSION_2 0x0002 + +struct usbd_version_info { + ULONG usbdi_version; + ULONG supported_usb_version; +}; + +struct usbd_idle_callback { + void *callback; + void *context; +}; + +#define NT_URB_STATUS(nt_urb) ((nt_urb)->header.status) + +NTSTATUS wrap_submit_irp(struct device_object *pdo, struct irp *irp); +void wrap_suspend_urbs(struct wrap_device *wd); +void wrap_resume_urbs(struct wrap_device *wd); + +void USBD_InterfaceGetUSBDIVersion(void *context, + struct usbd_version_info *version_info, + ULONG *hcd_capa) wstdcall; +BOOLEAN USBD_InterfaceIsDeviceHighSpeed(void *context) wstdcall; +void USBD_InterfaceReference(void *context) wstdcall; +void USBD_InterfaceDereference(void *context) wstdcall; +NTSTATUS USBD_InterfaceQueryBusTime(void *context, ULONG *frame) wstdcall; +NTSTATUS USBD_InterfaceSubmitIsoOutUrb(void *context, + union nt_urb *nt_urb) wstdcall; +NTSTATUS USBD_InterfaceQueryBusInformation(void *context, ULONG level, void *buf, + ULONG *buf_length, + ULONG *buf_actual_length) wstdcall; +NTSTATUS USBD_InterfaceLogEntry(void *context, ULONG driver_tag, ULONG enum_tag, + ULONG p1, ULONG p2) wstdcall; + +#endif /* USB_H */ --- linux-2.6.32.orig/ubuntu/ndiswrapper/wrapper.h +++ linux-2.6.32/ubuntu/ndiswrapper/wrapper.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef WRAPPER_H +#define WRAPPER_H + +extern char *if_name; +extern int proc_uid; +extern int proc_gid; +extern int hangcheck_interval; + +#endif /* WRAPPER_H */ --- linux-2.6.32.orig/ubuntu/ndiswrapper/rtl.c +++ linux-2.6.32/ubuntu/ndiswrapper/rtl.c @@ -0,0 +1,716 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ntoskernel.h" +#include "rtl_exports.h" + +wstdcall SIZE_T WIN_FUNC(RtlCompareMemory,3) + (const void *a, const void *b, SIZE_T len) +{ + size_t i; + char *x, *y; + + x = (char *)a; + y = (char *)b; + /* MSDN says this should return number of bytes that compare as + * equal. This can be interpretted as either all bytes that are + * equal in 'len' bytes or that only until the bytes compare as + * not equal. Initially we had it the former way, but Realtek driver + * doesn't like it that way - it takes many attempts to associate + * with WPA. ReactOS returns the number of bytes that are equal + * upto when they compare as not equal. + * According to lords at #reactos, that is the way it should be + * and that msdn is wrong about it! + */ + for (i = 0; i < len && x[i] == y[i]; i++) + ; + return i; +} + +wstdcall void WIN_FUNC(RtlCopyMemory,3) + (void *dst, const void *src, SIZE_T length) +{ + memcpy(dst, src, length); +} + +wstdcall void WIN_FUNC(RtlZeroMemory,2) + (void *dst, SIZE_T length) +{ + memset(dst, 0, length); +} + +wstdcall void WIN_FUNC(RtlSecureZeroMemory,2) + (void *dst, SIZE_T length) +{ + memset(dst, 0, length); +} + +wstdcall void WIN_FUNC(RtlFillMemory,3) + (void *dest, SIZE_T length, UCHAR fill) +{ + memset(dest, fill, length); +} + +wstdcall void WIN_FUNC(RtlMoveMemory,3) + (void *dest, const void *src, SIZE_T length) +{ + memmove(dest, src, length); +} + +wstdcall LONG WIN_FUNC(RtlCompareString,3) + (const struct ansi_string *s1, const struct ansi_string *s2, + BOOLEAN case_insensitive) +{ + unsigned int len; + LONG ret = 0; + const char *p1, *p2; + + ENTER2(""); + len = min(s1->length, s2->length); + p1 = s1->buf; + p2 = s2->buf; + if (case_insensitive) + while (!ret && len--) + ret = toupper(*p1++) - toupper(*p2++); + else + while (!ret && len--) + ret = *p1++ - *p2++; + if (!ret) + ret = s1->length - s2->length; + EXIT2(return ret); +} + +wstdcall LONG WIN_FUNC(RtlCompareUnicodeString,3) + (const struct unicode_string *s1, const struct unicode_string *s2, + BOOLEAN case_insensitive) +{ + unsigned int len; + LONG ret = 0; + const wchar_t *p1, *p2; + + ENTER2(""); + + len = min(s1->length, s2->length) / sizeof(wchar_t); + p1 = s1->buf; + p2 = s2->buf; + if (case_insensitive) + while (!ret && len--) + ret = toupper((u8)*p1++) - toupper((u8)*p2++); + else + while (!ret && len--) + ret = (u8)*p1++ - (u8)*p2++; + if (!ret) + ret = s1->length - s2->length; + TRACE2("len: %d, ret: %d", len, ret); + EXIT2(return ret); +} + +wstdcall BOOLEAN WIN_FUNC(RtlEqualString,3) + (const struct ansi_string *s1, const struct ansi_string *s2, + BOOLEAN case_insensitive) +{ + ENTER1(""); + if (s1->length != s2->length) + return FALSE; + return !RtlCompareString(s1, s2, case_insensitive); +} + +wstdcall BOOLEAN WIN_FUNC(RtlEqualUnicodeString,3) + (const struct unicode_string *s1, const struct unicode_string *s2, + BOOLEAN case_insensitive) +{ + if (s1->length != s2->length) + return FALSE; + return !RtlCompareUnicodeString(s1, s2, case_insensitive); +} + +wstdcall void WIN_FUNC(RtlCopyUnicodeString,2) + (struct unicode_string *dst, struct unicode_string *src) +{ + ENTER1("%p, %p", dst, src); + if (src && src->buf && dst->buf) { + dst->length = min(src->length, dst->max_length); + memcpy(dst->buf, src->buf, dst->length); + if (dst->length < dst->max_length) + dst->buf[dst->length / sizeof(dst->buf[0])] = 0; + } else + dst->length = 0; + EXIT1(return); +} + +wstdcall void WIN_FUNC(RtlCopyString,2) + (struct ansi_string *dst, struct ansi_string *src) +{ + ENTER1("%p, %p", dst, src); + if (src && src->buf && dst->buf) { + dst->length = min(src->length, dst->max_length); + memcpy(dst->buf, src->buf, dst->length); + if (dst->length < dst->max_length) + dst->buf[dst->length] = 0; + } else + dst->length = 0; + EXIT1(return); +} + +wstdcall NTSTATUS WIN_FUNC(RtlAppendUnicodeToString,2) + (struct unicode_string *dst, wchar_t *src) +{ + if (src) { + int len; + for (len = 0; src[len]; len++) + ; + if (dst->length + (len * sizeof(dst->buf[0])) > dst->max_length) + return STATUS_BUFFER_TOO_SMALL; + memcpy(&dst->buf[dst->length], src, len * sizeof(dst->buf[0])); + dst->length += len * sizeof(dst->buf[0]); + if (dst->max_length > dst->length) + dst->buf[dst->length / sizeof(dst->buf[0])] = 0; + } + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(RtlAppendUnicodeStringToString,2) + (struct unicode_string *dst, struct unicode_string *src) +{ + if (dst->max_length < src->length + dst->length) + return STATUS_BUFFER_TOO_SMALL; + if (src->length) { + memcpy(&dst->buf[dst->length], src->buf, src->length); + dst->length += src->length; + if (dst->max_length > dst->length) + dst->buf[dst->length / sizeof(dst->buf[0])] = 0; + } + EXIT2(return STATUS_SUCCESS); +} + +wstdcall ULONG WIN_FUNC(RtlxAnsiStringToUnicodeSize,1) + (const struct ansi_string *string) +{ + int i; + + for (i = 0; i < string->max_length && string->buf[i]; i++) + ; + return i * sizeof(wchar_t); +} + +wstdcall ULONG WIN_FUNC(RtlxUnicodeStringToAnsiSize,1) + (const struct unicode_string *string) +{ + int i; + + for (i = 0; i < string->max_length && string->buf[i]; i++) + ; + return i; +} + +wstdcall NTSTATUS WIN_FUNC(RtlAnsiStringToUnicodeString,3) + (struct unicode_string *dst, const struct ansi_string *src, + BOOLEAN alloc) +{ + int i, n; + + n = RtlxAnsiStringToUnicodeSize(src); + TRACE2("%d, %d, %d, %d, %p", n, dst->max_length, src->length, + src->max_length, src->buf); + if (alloc == TRUE) { +#if 0 + if (n == 0) { + dst->length = dst->max_length = 0; + dst->buf = NULL; + EXIT2(return STATUS_SUCCESS); + } +#endif + dst->max_length = n + sizeof(dst->buf[0]); + dst->buf = ExAllocatePoolWithTag(NonPagedPool, + dst->max_length, 0); + if (!dst->buf) { + dst->max_length = dst->length = 0; + EXIT2(return STATUS_NO_MEMORY); + } + } else if (dst->max_length < n) + EXIT2(return STATUS_BUFFER_TOO_SMALL); + + dst->length = n; + n /= sizeof(dst->buf[0]); + for (i = 0; i < n; i++) + dst->buf[i] = src->buf[i]; + if (i * sizeof(dst->buf[0]) < dst->max_length) + dst->buf[i] = 0; + TRACE2("dst: length: %d, max_length: %d, string: %p", + dst->length, dst->max_length, src->buf); + EXIT2(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(RtlUnicodeStringToAnsiString,3) + (struct ansi_string *dst, const struct unicode_string *src, + BOOLEAN alloc) +{ + int i, n; + + n = RtlxUnicodeStringToAnsiSize(src); + TRACE2("%d, %d, %d, %d, %p", n, dst->max_length, src->length, + src->max_length, src->buf); + if (alloc == TRUE) { +#if 0 + if (n == 0) { + dst->length = dst->max_length = 0; + dst->buf = NULL; + EXIT2(return STATUS_SUCCESS); + } +#endif + dst->max_length = n + sizeof(dst->buf[0]); + dst->buf = ExAllocatePoolWithTag(NonPagedPool, + dst->max_length, 0); + if (!dst->buf) { + dst->max_length = dst->length = 0; + EXIT1(return STATUS_NO_MEMORY); + } + } else if (dst->max_length < n) + EXIT2(return STATUS_BUFFER_TOO_SMALL); + + dst->length = n; + for (i = 0; i < n; i++) + dst->buf[i] = src->buf[i]; + if (i < dst->max_length) + dst->buf[i] = 0; + TRACE2("string: %p, len: %d(%d)", dst->buf, dst->length, + dst->max_length); + EXIT2(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(RtlUnicodeStringToInteger,3) + (struct unicode_string *ustring, ULONG base, ULONG *value) +{ + int i, sign = 1; + ULONG res; + typeof(ustring->buf) string; + + if (ustring->length == 0) { + *value = 0; + return STATUS_SUCCESS; + } + + string = ustring->buf; + i = 0; + while (i < (ustring->length / sizeof(*string)) && string[i] == ' ') + i++; + if (string[i] == '+') + i++; + else if (string[i] == '-') { + i++; + sign = -1; + } + if (base == 0) { + base = 10; + if (i <= ((ustring->length / sizeof(*string)) - 2) && + string[i] == '0') { + i++; + if (string[i] == 'b') { + base = 2; + i++; + } else if (string[i] == 'o') { + base = 8; + i++; + } else if (string[i] == 'x') { + base = 16; + i++; + } + } + } + if (!(base == 2 || base == 8 || base == 10 || base == 16)) + EXIT2(return STATUS_INVALID_PARAMETER); + + for (res = 0; i < (ustring->length / sizeof(*string)); i++) { + int v; + if (isdigit((char)string[i])) + v = string[i] - '0'; + else if (isxdigit((char)string[i])) + v = tolower((char)string[i]) - 'a' + 10; + else + v = base; + if (v >= base) + EXIT2(return STATUS_INVALID_PARAMETER); + res = res * base + v; + } + *value = sign * res; + EXIT3(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(RtlCharToInteger,3) + (const char *string, ULONG base, ULONG *value) +{ + int sign = 1; + ULONG res; + + if (!string || !value) + EXIT2(return STATUS_INVALID_PARAMETER); + while (*string == ' ') + string++; + if (*string == '+') + string++; + else if (*string == '-') { + string++; + sign = -1; + } + if (base == 0) { + base = 10; + if (*string == '0') { + string++; + if (*string == 'b') { + base = 2; + string++; + } else if (*string == 'o') { + base = 8; + string++; + } else if (*string == 'x') { + base = 16; + string++; + } + } + } + if (!(base == 2 || base == 8 || base == 10 || base == 16)) + EXIT2(return STATUS_INVALID_PARAMETER); + + for (res = 0; *string; string++) { + int v; + if (isdigit(*string)) + v = *string - '0'; + else if (isxdigit(*string)) + v = tolower(*string) - 'a' + 10; + else + v = base; + if (v >= base) + EXIT2(return STATUS_INVALID_PARAMETER); + res = res * base + v; + } + *value = sign * res; + EXIT3(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(RtlIntegerToUnicodeString,3) + (ULONG value, ULONG base, struct unicode_string *ustring) +{ + typeof(ustring->buf) buf = ustring->buf; + int i; + + if (base == 0) + base = 10; + if (!(base == 2 || base == 8 || base == 10 || base == 16)) + return STATUS_INVALID_PARAMETER; + for (i = 0; value && i < ustring->max_length / sizeof(*buf); i++) { + int r; + r = value % base; + value /= base; + if (r < 10) + buf[i] = r + '0'; + else + buf[i] = r + 'a' - 10; + } + if (value) + return STATUS_BUFFER_OVERFLOW; + ustring->length = i * sizeof(*buf); + return STATUS_SUCCESS; +} + +wstdcall LARGE_INTEGER WIN_FUNC(RtlConvertUlongToLargeInteger,1) + (ULONG ul) +{ + LARGE_INTEGER li = ul; + return li; +} + +wfastcall USHORT WIN_FUNC(RtlUshortByteSwap,1) + (USHORT src) +{ + return __swab16(src); +} + +wfastcall ULONG WIN_FUNC(RtlUlongByteSwap,1) + (ULONG src) +{ + /* ULONG is 32 bits for both 32-bit and 64-bit architectures */ + return __swab32(src); +} + +wstdcall NTSTATUS WIN_FUNC(RtlUpcaseUnicodeString,3) + (struct unicode_string *dst, struct unicode_string *src, BOOLEAN alloc) +{ + USHORT i, n; + + if (alloc) { + dst->buf = ExAllocatePoolWithTag(NonPagedPool, src->length, 0); + if (dst->buf) + dst->max_length = src->length; + else + EXIT2(return STATUS_NO_MEMORY); + } else { + if (dst->max_length < src->length) + EXIT2(return STATUS_BUFFER_OVERFLOW); + } + + n = src->length / sizeof(src->buf[0]); + for (i = 0; i < n; i++) + dst->buf[i] = toupper(src->buf[i]); + + dst->length = src->length; + EXIT3(return STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(RtlInitUnicodeString,2) + (struct unicode_string *dst, const wchar_t *src) +{ + ENTER2("%p", dst); + if (dst == NULL) + EXIT1(return); + if (src == NULL) { + dst->max_length = dst->length = 0; + dst->buf = NULL; + } else { + int i; + for (i = 0; (char)src[i]; i++) + ; + dst->buf = (typeof(dst->buf))src; + dst->length = i * sizeof(dst->buf[0]); + dst->max_length = (i + 1) * sizeof(dst->buf[0]); + } + EXIT1(return); +} + +wstdcall void WIN_FUNC(RtlInitAnsiString,2) + (struct ansi_string *dst, const char *src) +{ + ENTER2("%p", dst); + if (dst == NULL) + EXIT2(return); + if (src == NULL) { + dst->max_length = dst->length = 0; + dst->buf = NULL; + } else { + int i; + for (i = 0; src[i]; i++) + ; + dst->buf = (typeof(dst->buf))src; + dst->length = i; + dst->max_length = i + 1; + } + TRACE2("%p", dst->buf); + EXIT2(return); +} + +wstdcall void WIN_FUNC(RtlInitString,2) + (struct ansi_string *dst, const char *src) +{ + ENTER2("%p", dst); + RtlInitAnsiString(dst, src); + EXIT2(return); +} + +wstdcall void WIN_FUNC(RtlFreeUnicodeString,1) + (struct unicode_string *string) +{ + ENTER2("%p", string); + if (string == NULL) + return; + if (string->buf) + ExFreePool(string->buf); + string->length = string->max_length = 0; + string->buf = NULL; + return; +} + +wstdcall void WIN_FUNC(RtlFreeAnsiString,1) + (struct ansi_string *string) +{ + ENTER2("%p", string); + if (string == NULL) + return; + if (string->buf) + ExFreePool(string->buf); + string->length = string->max_length = 0; + string->buf = NULL; + return; +} + +/* guid string is of the form: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */ +wstdcall NTSTATUS WIN_FUNC(RtlGUIDFromString,2) + (struct unicode_string *guid_string, struct guid *guid) +{ + struct ansi_string ansi; + NTSTATUS ret; + int i, j, k, l, m; + + ret = RtlUnicodeStringToAnsiString(&ansi, guid_string, TRUE); + if (ret != STATUS_SUCCESS) + return ret; + if (ansi.length != 37 || ansi.buf[0] != '{' || + ansi.buf[36] != '}' || ansi.buf[9] != '-' || + ansi.buf[14] != '-' || ansi.buf[19] != '-' || + ansi.buf[24] != '-') { + RtlFreeAnsiString(&ansi); + EXIT2(return STATUS_INVALID_PARAMETER); + } + memcpy(&guid->data4, &ansi.buf[29], sizeof(guid->data3)); + /* set end of data3 for scanf */ + ansi.buf[29] = 0; + if (sscanf(&ansi.buf[1], "%x", &i) == 1 && + sscanf(&ansi.buf[10], "%x", &j) == 1 && + sscanf(&ansi.buf[15], "%x", &k) == 1 && + sscanf(&ansi.buf[20], "%x", &l) == 1 && + sscanf(&ansi.buf[25], "%x", &m) == 1) { + guid->data1 = (i << 16) | (j < 8) | k; + guid->data2 = l; + guid->data3 = m; + ret = STATUS_SUCCESS; + } else + ret = STATUS_INVALID_PARAMETER; + RtlFreeAnsiString(&ansi); + return ret; +} + +wstdcall NTSTATUS WIN_FUNC(RtlQueryRegistryValues,5) + (ULONG relative, wchar_t *path, struct rtl_query_registry_table *tbl, + void *context, void *env) +{ + struct ansi_string ansi; + struct unicode_string unicode; + NTSTATUS status, ret; + static int i = 0; + + ENTER3("%x, %p", relative, tbl); +// TODO(); + + RtlInitUnicodeString(&unicode, path); + if (RtlUnicodeStringToAnsiString(&ansi, &unicode, TRUE) == + STATUS_SUCCESS) { + TRACE2("%s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + ret = STATUS_SUCCESS; + for (; tbl->name; tbl++) { + RtlInitUnicodeString(&unicode, tbl->name); + if (RtlUnicodeStringToAnsiString(&ansi, &unicode, TRUE) == + STATUS_SUCCESS) { + TRACE2("name: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + TRACE2("flags: %08X", tbl->flags); + if (tbl->flags == RTL_QUERY_REGISTRY_DIRECT) { + TRACE2("type: %08X", tbl->def_type); + if (tbl->def_type == REG_DWORD) { + /* Atheros USB driver needs this, but + * don't know where and how to get its + * value */ + if (tbl->def_data) { + TRACE2("def_data: %x", + *(int *)tbl->def_data); + *(DWORD *)tbl->context = 0x5f292a + i++; +// *(DWORD *)tbl->def_data; + } else + *(DWORD *)tbl->context = 0x2345dbe; + } + } else { + void *data; + ULONG type, length; + + if (!tbl->query_func) { + ERROR("oops: no query_func"); + ret = STATUS_INVALID_PARAMETER; + break; + } + if (tbl->flags & RTL_QUERY_REGISTRY_NOVALUE) { + data = NULL; + type = REG_NONE; + length = 0; + } else { + data = tbl->def_data; + type = tbl->def_type; + length = tbl->def_length;; + } + TRACE2("calling query_func: %p", tbl->query_func); + status = LIN2WIN6(tbl->query_func, tbl->name, type, + data, length, context, env); + TRACE2("status: %08X", status); + if (status) { + if (status == STATUS_BUFFER_TOO_SMALL) + ret = STATUS_BUFFER_TOO_SMALL; + else + EXIT2(return STATUS_INVALID_PARAMETER); + } + } + } + EXIT3(return ret); +} + +wstdcall NTSTATUS WIN_FUNC(RtlWriteRegistryValue,6) + (ULONG relative, wchar_t *path, wchar_t *name, ULONG type, + void *data, ULONG length) +{ + struct ansi_string ansi; + struct unicode_string unicode; + + ENTER3("%d", relative); + TODO(); + + RtlInitUnicodeString(&unicode, path); + if (RtlUnicodeStringToAnsiString(&ansi, &unicode, TRUE) == + STATUS_SUCCESS) { + TRACE2("%s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + RtlInitUnicodeString(&unicode, name); + if (RtlUnicodeStringToAnsiString(&ansi, &unicode, TRUE) == + STATUS_SUCCESS) { + TRACE2("%s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + EXIT5(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(RtlDeleteRegistryValue,3) + (ULONG relative, wchar_t *path, wchar_t *name) +{ + return STATUS_SUCCESS; +} + +wstdcall void WIN_FUNC(RtlAssert,4) + (char *failed_assertion, char *file_name, ULONG line_num, char *message) +{ + ERROR("assertion '%s' failed at %s line %d%s", + failed_assertion, file_name, line_num, message ? message : ""); + return; +} + +wstdcall void WIN_FUNC(RtlUnwind,0) + (void) +{ + TODO(); +} + +wstdcall void WIN_FUNC(RtlRaiseException,1) + (void *exception_record) +{ + TODO(); +} + +int rtl_init(void) +{ + return 0; +} + +/* called when module is being removed */ +void rtl_exit(void) +{ + EXIT4(return); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/divdi3.c +++ linux-2.6.32/ubuntu/ndiswrapper/divdi3.c @@ -0,0 +1,329 @@ +/* 64-bit multiplication and division + Copyright (C) 1989, 1992-1999, 2000, 2001, 2002, 2003 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#include + +#if BITS_PER_LONG != 32 +#error This is for 32-bit targets only +#endif + +typedef unsigned int UQItype __attribute__ ((mode (QI))); +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); +#define Wtype SItype +#define HWtype SItype +#define DWtype DItype +#define UWtype USItype +#define UHWtype USItype +#define UDWtype UDItype +#define W_TYPE_SIZE 32 + +#include "longlong.h" + +#if defined(__BIG_ENDIAN) +struct DWstruct { Wtype high, low;}; +#elif defined(__LITTLE_ENDIAN) +struct DWstruct { Wtype low, high;}; +#else +#error Unhandled endianity +#endif +typedef union { struct DWstruct s; DWtype ll; } DWunion; + +/* Prototypes of exported functions. */ +extern DWtype __divdi3 (DWtype u, DWtype v); +extern DWtype __moddi3 (DWtype u, DWtype v); +extern UDWtype __udivdi3 (UDWtype u, UDWtype v); +extern UDWtype __umoddi3 (UDWtype u, UDWtype v); + +static UDWtype +__udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp) +{ + DWunion ww; + DWunion nn, dd; + DWunion rr; + UWtype d0, d1, n0, n1, n2; + UWtype q0, q1; + UWtype b, bm; + + nn.ll = n; + dd.ll = d; + + d0 = dd.s.low; + d1 = dd.s.high; + n0 = nn.s.low; + n1 = nn.s.high; + +#if !UDIV_NEEDS_NORMALIZATION + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + udiv_qrnnd (q1, n1, 0, n1, d0); + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0. */ + } + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = 0; + *rp = rr.ll; + } + } + +#else /* UDIV_NEEDS_NORMALIZATION */ + + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + count_leading_zeros (bm, d0); + + if (bm != 0) + { + /* Normalize, i.e. make the most significant bit of the + denominator set. */ + + d0 = d0 << bm; + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); + n0 = n0 << bm; + } + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0 >> bm. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + count_leading_zeros (bm, d0); + + if (bm == 0) + { + /* From (n1 >= d0) /\ (the most significant bit of d0 is set), + conclude (the most significant bit of n1 is set) /\ (the + leading quotient digit q1 = 1). + + This special case is necessary, not an optimization. + (Shifts counts of W_TYPE_SIZE are undefined.) */ + + n1 -= d0; + q1 = 1; + } + else + { + /* Normalize. */ + + b = W_TYPE_SIZE - bm; + + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q1, n1, n2, n1, d0); + } + + /* n1 != d0... */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0 >> bm. */ + } + + if (rp != 0) + { + rr.s.low = n0 >> bm; + rr.s.high = 0; + *rp = rr.ll; + } + } +#endif /* UDIV_NEEDS_NORMALIZATION */ + + else + { + if (d1 > n1) + { + /* 00 = nn / DD */ + + q0 = 0; + q1 = 0; + + /* Remainder in n1n0. */ + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + /* 0q = NN / dd */ + + count_leading_zeros (bm, d1); + if (bm == 0) + { + /* From (n1 >= d1) /\ (the most significant bit of d1 is set), + conclude (the most significant bit of n1 is set) /\ (the + quotient digit q0 = 0 or 1). + + This special case is necessary, not an optimization. */ + + /* The condition on the next line takes advantage of that + n1 >= d1 (true due to program flow). */ + if (n1 > d1 || n0 >= d0) + { + q0 = 1; + sub_ddmmss (n1, n0, n1, n0, d1, d0); + } + else + q0 = 0; + + q1 = 0; + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + UWtype m1, m0; + /* Normalize. */ + + b = W_TYPE_SIZE - bm; + + d1 = (d1 << bm) | (d0 >> b); + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q0, n1, n2, n1, d1); + umul_ppmm (m1, m0, q0, d0); + + if (m1 > n1 || (m1 == n1 && m0 > n0)) + { + q0--; + sub_ddmmss (m1, m0, m1, m0, d1, d0); + } + + q1 = 0; + + /* Remainder in (n1n0 - m1m0) >> bm. */ + if (rp != 0) + { + sub_ddmmss (n1, n0, n1, n0, m1, m0); + rr.s.low = (n1 << b) | (n0 >> bm); + rr.s.high = n1 >> bm; + *rp = rr.ll; + } + } + } + } + + ww.s.low = q0; + ww.s.high = q1; + return ww.ll; +} + +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; + DWtype w; + + if (u < 0) + { + c = ~c; + u = -u; + } + if (v < 0) + { + c = ~c; + v = -v; + } + w = __udivmoddi4 (u, v, NULL); + if (c) + w = -w; + return w; +} + +DWtype +__moddi3 (DWtype u, DWtype v) +{ + Wtype c = 0; + DWtype w; + + if (u < 0) + { + c = ~c; + u = -u; + } + if (v < 0) + v = -v; + __udivmoddi4 (u, v, &w); + if (c) + w = -w; + return w; +} + +UDWtype +__udivdi3 (UDWtype u, UDWtype v) +{ + return __udivmoddi4 (u, v, NULL); +} + +UDWtype +__umoddi3 (UDWtype u, UDWtype v) +{ + UDWtype w; + + __udivmoddi4 (u, v, &w); + return w; +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/loader.h +++ linux-2.6.32/ubuntu/ndiswrapper/loader.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _LOADER_H_ +#define _LOADER_H_ + +#include "ndiswrapper.h" + +#ifndef __KERNEL__ +#define __user +#endif + +struct load_driver_file { + char driver_name[MAX_DRIVER_NAME_LEN]; + char name[MAX_DRIVER_NAME_LEN]; + size_t size; + void __user *data; +}; + +struct load_device_setting { + char name[MAX_SETTING_NAME_LEN]; + char value[MAX_SETTING_VALUE_LEN]; +}; + +struct load_device { + int bus; + int vendor; + int device; + int subvendor; + int subdevice; + char conf_file_name[MAX_DRIVER_NAME_LEN]; + char driver_name[MAX_DRIVER_NAME_LEN]; +}; + +struct load_devices { + int count; + struct load_device *devices; +}; + +struct load_driver { + char name[MAX_DRIVER_NAME_LEN]; + char conf_file_name[MAX_DRIVER_NAME_LEN]; + unsigned int num_sys_files; + struct load_driver_file sys_files[MAX_DRIVER_PE_IMAGES]; + unsigned int num_settings; + struct load_device_setting settings[MAX_DEVICE_SETTINGS]; + unsigned int num_bin_files; + struct load_driver_file bin_files[MAX_DRIVER_BIN_FILES]; +}; + +#define WRAP_IOCTL_LOAD_DEVICE _IOW(('N' + 'd' + 'i' + 'S'), 0, \ + struct load_device *) +#define WRAP_IOCTL_LOAD_DRIVER _IOW(('N' + 'd' + 'i' + 'S'), 1, \ + struct load_driver *) +#define WRAP_IOCTL_LOAD_BIN_FILE _IOW(('N' + 'd' + 'i' + 'S'), 2, \ + struct load_driver_file *) + +#define WRAP_CMD_LOAD_DEVICE "load_device" +#define WRAP_CMD_LOAD_DRIVER "load_driver" +#define WRAP_CMD_LOAD_BIN_FILE "load_bin_file" + +int loader_init(void); +void loader_exit(void); + +#ifdef __KERNEL__ +struct wrap_device *load_wrap_device(struct load_device *load_device); +struct wrap_driver *load_wrap_driver(struct wrap_device *device); +struct wrap_bin_file *get_bin_file(char *bin_file_name); +void free_bin_file(struct wrap_bin_file *bin_file); +void unload_wrap_driver(struct wrap_driver *driver); +void unload_wrap_device(struct wrap_device *wd); +struct wrap_device *get_wrap_device(void *dev, int bus_type); + +extern struct semaphore loader_mutex; +#endif + +#endif /* LOADER_H */ + --- linux-2.6.32.orig/ubuntu/ndiswrapper/winnt_types.h +++ linux-2.6.32/ubuntu/ndiswrapper/winnt_types.h @@ -0,0 +1,1702 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _WINNT_TYPES_H_ +#define _WINNT_TYPES_H_ + +#define TRUE 1 +#define FALSE 0 + +#define PASSIVE_LEVEL 0 +#define APC_LEVEL 1 +#define DISPATCH_LEVEL 2 +#define DEVICE_LEVEL_BASE 4 + +/* soft interrupts / bottom-half's are disabled at SOFT_IRQL */ +#define SOFT_IRQL (DEVICE_LEVEL_BASE + 1) +#define DIRQL (DEVICE_LEVEL_BASE + 2) + +#define STATUS_WAIT_0 0 +#define STATUS_SUCCESS 0 +#define STATUS_ALERTED 0x00000101 +#define STATUS_TIMEOUT 0x00000102 +#define STATUS_PENDING 0x00000103 +#define STATUS_FAILURE 0xC0000001 +#define STATUS_NOT_IMPLEMENTED 0xC0000002 +#define STATUS_INVALID_PARAMETER 0xC000000D +#define STATUS_INVALID_DEVICE_REQUEST 0xC0000010 +#define STATUS_MORE_PROCESSING_REQUIRED 0xC0000016 +#define STATUS_ACCESS_DENIED 0xC0000022 +#define STATUS_BUFFER_TOO_SMALL 0xC0000023 +#define STATUS_OBJECT_NAME_INVALID 0xC0000023 +#define STATUS_MUTANT_NOT_OWNED 0xC0000046 +#define STATUS_RESOURCES 0xC000009A +#define STATUS_DELETE_PENDING 0xC0000056 +#define STATUS_INSUFFICIENT_RESOURCES 0xC000009A +#define STATUS_NOT_SUPPORTED 0xC00000BB +#define STATUS_INVALID_PARAMETER_2 0xC00000F0 +#define STATUS_NO_MEMORY 0xC0000017 +#define STATUS_CANCELLED 0xC0000120 +#define STATUS_DEVICE_REMOVED 0xC00002B6 +#define STATUS_DEVICE_NOT_CONNECTED 0xC000009D + +#define STATUS_BUFFER_OVERFLOW 0x80000005 + +#define SL_PENDING_RETURNED 0x01 +#define SL_INVOKE_ON_CANCEL 0x20 +#define SL_INVOKE_ON_SUCCESS 0x40 +#define SL_INVOKE_ON_ERROR 0x80 + +#define IRP_MJ_CREATE 0x00 +#define IRP_MJ_CREATE_NAMED_PIPE 0x01 +#define IRP_MJ_CLOSE 0x02 +#define IRP_MJ_READ 0x03 +#define IRP_MJ_WRITE 0x04 + +#define IRP_MJ_DEVICE_CONTROL 0x0E +#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0F +#define IRP_MJ_POWER 0x16 +#define IRP_MJ_SYSTEM_CONTROL 0x0E +#define IRP_MJ_PNP 0x1b +#define IRP_MJ_MAXIMUM_FUNCTION 0x1b + +#define IRP_MN_WAIT_WAKE 0x00 +#define IRP_MN_POWER_SEQUENCE 0x01 +#define IRP_MN_SET_POWER 0x02 +#define IRP_MN_QUERY_POWER 0x03 + +#define IRP_MN_REGINFO 0x08 +#define IRP_MN_REGINFO_EX 0x0b + +#define IRP_MN_START_DEVICE 0x00 +#define IRP_MN_QUERY_REMOVE_DEVICE 0x01 +#define IRP_MN_REMOVE_DEVICE 0x02 +#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 +#define IRP_MN_STOP_DEVICE 0x04 +#define IRP_MN_QUERY_STOP_DEVICE 0x05 +#define IRP_MN_CANCEL_STOP_DEVICE 0x06 +#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 +#define IRP_MN_QUERY_INTERFACE 0x08 + +#define IRP_BUFFERED_IO 0x00000010 +#define IRP_DEALLOCATE_BUFFER 0x00000020 +#define IRP_INPUT_OPERATION 0x00000040 + +#define IRP_DEFFER_IO_COMPLETION 0x00000800 + +#define THREAD_WAIT_OBJECTS 3 +#define MAX_WAIT_OBJECTS 64 + +#define LOW_PRIORITY 0 +#define LOW_REALTIME_PRIORITY 16 +#define HIGH_PRIORITY 31 +#define MAXIMUM_PRIORITY 32 + +#define PROCESSOR_FEATURE_MAX 64 + +#define IO_NO_INCREMENT 0 + +#define WMIREG_ACTION_REGISTER 1 +#define WMIREG_ACTION_DEREGISTER 2 +#define WMIREG_ACTION_REREGISTER 3 +#define WMIREG_ACTION_UPDATE_GUIDS 4 + +#define WMIREGISTER 0 +#define WMIUPDATE 1 + +#ifdef CONFIG_X86_64 +#define wstdcall +#define wfastcall +#define noregparm + +#define KI_USER_SHARED_DATA 0xfffff78000000000UL + +#else + +#define noregparm __attribute__((regparm(0))) +#define wstdcall __attribute__((__stdcall__, regparm(0))) +#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ > 3) || __GNUC__ > 3) +#undef fastcall +#define wfastcall __attribute__((fastcall)) +#else +#error "gcc 3.4 or newer should be used for compiling this module" +#endif + +#define KI_USER_SHARED_DATA 0xffdf0000 + +#endif + +#define packed __attribute__((packed)) +#define no_warn_unused __attribute__((unused)) + +typedef u8 BOOLEAN; +typedef u8 BYTE; +typedef u8 *LPBYTE; +typedef s8 CHAR; +typedef u8 UCHAR; +typedef s16 SHORT; +typedef u16 USHORT; +typedef u16 WORD; +typedef s32 INT; +typedef u32 UINT; +typedef u32 DWORD; +typedef s32 LONG; +typedef u32 ULONG; +typedef s64 LONGLONG; +typedef u64 ULONGLONG; +typedef u64 ULONGULONG; +typedef u64 ULONG64; + +typedef CHAR CCHAR; +typedef USHORT wchar_t; +typedef SHORT CSHORT; +typedef LONGLONG LARGE_INTEGER; + +typedef LONG NTSTATUS; + +typedef LONG KPRIORITY; +typedef LARGE_INTEGER PHYSICAL_ADDRESS; +typedef UCHAR KIRQL; +typedef CHAR KPROCESSOR_MODE; + +/* ULONG_PTR is 32 bits on 32-bit platforms and 64 bits on 64-bit + * platform, which is same as 'unsigned long' in Linux */ +typedef unsigned long ULONG_PTR; + +typedef ULONG_PTR SIZE_T; +typedef ULONG_PTR KAFFINITY; +typedef ULONG ACCESS_MASK; + +typedef ULONG_PTR PFN_NUMBER; +typedef ULONG SECURITY_INFORMATION; + +/* non-negative numbers indicate success */ +#define NT_SUCCESS(status) ((NTSTATUS)(status) >= 0) + +struct ansi_string { + USHORT length; + USHORT max_length; + char *buf; +}; + +struct unicode_string { + USHORT length; + USHORT max_length; + wchar_t *buf; +}; + +struct nt_slist { + struct nt_slist *next; +}; + +#ifdef CONFIG_X86_64 +/* it is not clear how nt_slist_head is used to store pointer to + * slists and depth; here we assume 'align' field is used to store + * depth and 'region' field is used to store slist pointers */ +struct nt_slist_head { + union { + USHORT depth; + ULONGLONG align; + }; + union { + ULONGLONG region; + struct nt_slist *next; + }; +} __attribute__((aligned(16))); +typedef struct nt_slist_head nt_slist_header; +#else +union nt_slist_head { + ULONGLONG align; + struct { + struct nt_slist *next; + USHORT depth; + USHORT sequence; + }; +}; +typedef union nt_slist_head nt_slist_header; +#endif + +struct nt_list { + struct nt_list *next; + struct nt_list *prev; +}; + +typedef ULONG_PTR NT_SPIN_LOCK; + +enum kdpc_importance {LowImportance, MediumImportance, HighImportance}; + +struct kdpc; +typedef void (*DPC)(struct kdpc *kdpc, void *ctx, void *arg1, + void *arg2) wstdcall; +struct kdpc { + SHORT type; + UCHAR nr_cpu; + UCHAR importance; + struct nt_list list; + DPC func; + void *ctx; + void *arg1; + void *arg2; + union { + NT_SPIN_LOCK *lock; + /* 'lock' is not used; 'queued' represents whether + * kdpc is queued or not */ + int queued; + }; +}; + +enum pool_type { + NonPagedPool, PagedPool, NonPagedPoolMustSucceed, DontUseThisType, + NonPagedPoolCacheAligned, PagedPoolCacheAligned, + NonPagedPoolCacheAlignedMustS, MaxPoolType, + NonPagedPoolSession = 32, + PagedPoolSession = NonPagedPoolSession + 1, + NonPagedPoolMustSucceedSession = PagedPoolSession + 1, + DontUseThisTypeSession = NonPagedPoolMustSucceedSession + 1, + NonPagedPoolCacheAlignedSession = DontUseThisTypeSession + 1, + PagedPoolCacheAlignedSession = NonPagedPoolCacheAlignedSession + 1, + NonPagedPoolCacheAlignedMustSSession = PagedPoolCacheAlignedSession + 1 +}; + +enum memory_caching_type_orig { + MmFrameBufferCached = 2 +}; + +enum memory_caching_type { + MmNonCached = FALSE, MmCached = TRUE, + MmWriteCombined = MmFrameBufferCached, MmHardwareCoherentCached, + MmNonCachedUnordered, MmUSWCCached, MmMaximumCacheType +}; + +enum lock_operation { + IoReadAccess, IoWriteAccess, IoModifyAccess +}; + +enum mode { + KernelMode, UserMode, MaximumMode +}; + +struct mdl { + struct mdl *next; + CSHORT size; + CSHORT flags; + /* NdisFreeBuffer doesn't pass pool, so we store pool in + * unused field 'process' */ + union { + void *process; + void *pool; + }; + void *mappedsystemva; + void *startva; + ULONG bytecount; + ULONG byteoffset; +}; + +#define MDL_MAPPED_TO_SYSTEM_VA 0x0001 +#define MDL_PAGES_LOCKED 0x0002 +#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 +#define MDL_ALLOCATED_FIXED_SIZE 0x0008 +#define MDL_PARTIAL 0x0010 +#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 +#define MDL_IO_PAGE_READ 0x0040 +#define MDL_WRITE_OPERATION 0x0080 +#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 +#define MDL_FREE_EXTRA_PTES 0x0200 +#define MDL_IO_SPACE 0x0800 +#define MDL_NETWORK_HEADER 0x1000 +#define MDL_MAPPING_CAN_FAIL 0x2000 +#define MDL_ALLOCATED_MUST_SUCCEED 0x4000 + +#define MDL_POOL_ALLOCATED 0x0400 +#define MDL_CACHE_ALLOCATED 0x8000 + +#define PAGE_START(ptr) ((void *)((ULONG_PTR)(ptr) & ~(PAGE_SIZE - 1))) +#define BYTE_OFFSET(ptr) ((ULONG)((ULONG_PTR)(ptr) & (PAGE_SIZE - 1))) + +#define MmGetMdlByteCount(mdl) ((mdl)->bytecount) +#define MmGetMdlVirtualAddress(mdl) ((mdl)->startva + (mdl)->byteoffset) +#define MmGetMdlByteOffset(mdl) ((mdl)->byteoffset) +#define MmGetSystemAddressForMdl(mdl) ((mdl)->mappedsystemva) +#define MmGetSystemAddressForMdlSafe(mdl, priority) ((mdl)->mappedsystemva) +#define MmGetMdlPfnArray(mdl) ((PFN_NUMBER *)(mdl + 1)) +#define MmInitializeMdl(mdl, baseva, length) \ +do { \ + (mdl)->next = NULL; \ + (mdl)->size = MmSizeOfMdl(baseva, length); \ + (mdl)->flags = 0; \ + (mdl)->startva = PAGE_START(baseva); \ + (mdl)->byteoffset = BYTE_OFFSET(baseva); \ + (mdl)->bytecount = length; \ + (mdl)->mappedsystemva = baseva; \ + TRACE4("%p %p %p %d %d", (mdl), baseva, (mdl)->startva, \ + (mdl)->byteoffset, length); \ +} while (0) + +struct kdevice_queue_entry { + struct nt_list list; + ULONG sort_key; + BOOLEAN inserted; +}; + +struct kdevice_queue { + USHORT type; + USHORT size; + struct nt_list list; + NT_SPIN_LOCK lock; + BOOLEAN busy; +}; + +struct wait_context_block { + struct kdevice_queue_entry wait_queue_entry; + void *device_routine; + void *device_context; + ULONG num_regs; + void *device_object; + void *current_irp; + void *buffer_chaining_dpc; +}; + +struct wait_block { + struct nt_list list; + struct task_struct *thread; + void *object; + int *wait_done; + USHORT wait_key; + USHORT wait_type; +}; + +struct dispatcher_header { + UCHAR type; + UCHAR absolute; + UCHAR size; + UCHAR inserted; + LONG signal_state; + struct nt_list wait_blocks; +}; + +enum event_type { + NotificationEvent, + SynchronizationEvent, +}; + +enum timer_type { + NotificationTimer = NotificationEvent, + SynchronizationTimer = SynchronizationEvent, +}; + +enum dh_type { + NotificationObject = NotificationEvent, + SynchronizationObject = SynchronizationEvent, + MutexObject, + SemaphoreObject, + ThreadObject, +}; + +enum wait_type { + WaitAll, WaitAny +}; + +/* objects that use dispatcher_header have it as the first field, so + * whenever we need to initialize dispatcher_header, we can convert + * that object into a nt_event and access dispatcher_header */ +struct nt_event { + struct dispatcher_header dh; +}; + +struct wrap_timer; + +#define WRAP_TIMER_MAGIC 47697249 + +struct nt_timer { + struct dispatcher_header dh; + /* We can't fit Linux timer in this structure. Instead of + * padding the nt_timer structure, we replace due_time field + * with *wrap_timer and allocate memory for it when nt_timer is + * initialized */ + union { + ULONGLONG due_time; + struct wrap_timer *wrap_timer; + }; + struct nt_list nt_timer_list; + struct kdpc *kdpc; + union { + LONG period; + LONG wrap_timer_magic; + }; +}; + +struct nt_mutex { + struct dispatcher_header dh; + struct nt_list list; + struct task_struct *owner_thread; + BOOLEAN abandoned; + BOOLEAN apc_disable; +}; + +struct nt_semaphore { + struct dispatcher_header dh; + LONG limit; +}; + +struct nt_thread { + struct dispatcher_header dh; + /* the rest in Windows is a long structure; since this + * structure is opaque to drivers, we just define what we + * need */ + int pid; + NTSTATUS status; + struct task_struct *task; + struct nt_list irps; + NT_SPIN_LOCK lock; + KPRIORITY prio; +}; + +#define set_object_type(dh, type) ((dh)->type = (type)) +#define is_notify_object(dh) ((dh)->type == NotificationObject) +#define is_synch_object(dh) ((dh)->type == SynchronizationObject) +#define is_mutex_object(dh) ((dh)->type == MutexObject) +#define is_semaphore_object(dh) ((dh)->type == SemaphoreObject) +#define is_nt_thread_object(dh) ((dh)->type == ThreadObject) + +#define IO_TYPE_ADAPTER 1 +#define IO_TYPE_CONTROLLER 2 +#define IO_TYPE_DEVICE 3 +#define IO_TYPE_DRIVER 4 +#define IO_TYPE_FILE 5 +#define IO_TYPE_IRP 6 +#define IO_TYPE_DEVICE_OBJECT_EXTENSION 13 + +struct irp; +struct dev_obj_ext; +struct driver_object; + +struct device_object { + CSHORT type; + USHORT size; + LONG ref_count; + struct driver_object *drv_obj; + struct device_object *next; + struct device_object *attached; + struct irp *current_irp; + void *io_timer; + ULONG flags; + ULONG characteristics; + void *vpb; + void *dev_ext; + CCHAR stack_count; + union { + struct nt_list queue_list; + struct wait_context_block wcb; + } queue; + ULONG align_req; + struct kdevice_queue dev_queue; + struct kdpc dpc; + ULONG active_threads; + void *security_desc; + struct nt_event lock; + USHORT sector_size; + USHORT spare1; + struct dev_obj_ext *dev_obj_ext; + void *reserved; +}; + +struct dev_obj_ext { + CSHORT type; + CSHORT size; + struct device_object *dev_obj; + struct device_object *attached_to; +}; + +struct io_status_block { + union { + NTSTATUS status; + void *pointer; + }; + ULONG_PTR info; +}; + +#ifdef CONFIG_X86_64 +struct io_status_block32 { + NTSTATUS status; + ULONG info; +}; +#endif + +#define DEVICE_TYPE ULONG + +struct driver_extension; + +typedef NTSTATUS driver_dispatch_t(struct device_object *dev_obj, + struct irp *irp) wstdcall; + +struct driver_object { + CSHORT type; + CSHORT size; + struct device_object *dev_obj; + ULONG flags; + void *start; + ULONG driver_size; + void *section; + struct driver_extension *drv_ext; + struct unicode_string name; + struct unicode_string *hardware_database; + void *fast_io_dispatch; + void *init; + void *start_io; + void (*unload)(struct driver_object *driver) wstdcall; + driver_dispatch_t *major_func[IRP_MJ_MAXIMUM_FUNCTION + 1]; +}; + +struct driver_extension { + struct driver_object *drv_obj; + NTSTATUS (*add_device)(struct driver_object *drv_obj, + struct device_object *dev_obj) wstdcall; + ULONG count; + struct unicode_string service_key_name; + struct nt_list custom_ext; +}; + +struct custom_ext { + struct nt_list list; + void *client_id; +}; + +struct wrap_bin_file; + +struct file_object { + CSHORT type; + CSHORT size; + struct device_object *dev_obj; + void *volume_parameter_block; + void *fs_context; + void *fs_context2; + void *section_object_pointer; + void *private_cache_map; + NTSTATUS final_status; + union { + struct file_object *related_file_object; + struct wrap_bin_file *wrap_bin_file; + }; + BOOLEAN lock_operation; + BOOLEAN delete_pending; + BOOLEAN read_access; + BOOLEAN write_access; + BOOLEAN delete_access; + BOOLEAN shared_read; + BOOLEAN shared_write; + BOOLEAN shared_delete; + ULONG flags; + struct unicode_string _name_; + LARGE_INTEGER current_byte_offset; + ULONG waiters; + ULONG busy; + void *last_lock; + struct nt_event lock; + struct nt_event event; + void *completion_context; +}; + +#ifdef CONFIG_X86_64 +#define POINTER_ALIGN __attribute__((aligned(8))) +#else +#define POINTER_ALIGN +#endif + +#define CACHE_ALIGN __attribute__((aligned(128))) + +enum system_power_state { + PowerSystemUnspecified = 0, + PowerSystemWorking, PowerSystemSleeping1, PowerSystemSleeping2, + PowerSystemSleeping3, PowerSystemHibernate, PowerSystemShutdown, + PowerSystemMaximum, +}; + +enum device_power_state { + PowerDeviceUnspecified = 0, + PowerDeviceD0, PowerDeviceD1, PowerDeviceD2, PowerDeviceD3, + PowerDeviceMaximum, +}; + +union power_state { + enum system_power_state system_state; + enum device_power_state device_state; +}; + +enum power_state_type { + SystemPowerState = 0, DevicePowerState, +}; + +enum power_action { + PowerActionNone = 0, + PowerActionReserved, PowerActionSleep, PowerActionHibernate, + PowerActionShutdown, PowerActionShutdownReset, PowerActionShutdownOff, + PowerActionWarmEject, +}; + +struct guid { + ULONG data1; + USHORT data2; + USHORT data3; + UCHAR data4[8]; +}; + +struct nt_interface { + USHORT size; + USHORT version; + void *context; + void (*reference)(void *context) wstdcall; + void (*dereference)(void *context) wstdcall; +}; + +enum interface_type { + InterfaceTypeUndefined = -1, Internal, Isa, Eisa, MicroChannel, + TurboChannel, PCIBus, VMEBus, NuBus, PCMCIABus, CBus, MPIBus, + MPSABus, ProcessorInternal, InternalPowerBus, PNPISABus, + PNPBus, MaximumInterfaceType, +}; + +#define CmResourceTypeNull 0 +#define CmResourceTypePort 1 +#define CmResourceTypeInterrupt 2 +#define CmResourceTypeMemory 3 +#define CmResourceTypeDma 4 +#define CmResourceTypeDeviceSpecific 5 +#define CmResourceTypeBusNumber 6 +#define CmResourceTypeMaximum 7 + +#define CmResourceTypeNonArbitrated 128 +#define CmResourceTypeConfigData 128 +#define CmResourceTypeDevicePrivate 129 +#define CmResourceTypePcCardConfig 130 +#define CmResourceTypeMfCardConfig 131 + +enum cm_share_disposition { + CmResourceShareUndetermined = 0, CmResourceShareDeviceExclusive, + CmResourceShareDriverExclusive, CmResourceShareShared +}; + +#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0 +#define CM_RESOURCE_INTERRUPT_LATCHED 1 +#define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 +#define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 +#define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 +#define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 + +#define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 +#define CM_RESOURCE_MEMORY_24 0x0010 +#define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 + +#define CM_RESOURCE_PORT_MEMORY 0x0000 +#define CM_RESOURCE_PORT_IO 0x0001 +#define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 +#define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 +#define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 +#define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 +#define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 +#define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 + +#define CM_RESOURCE_DMA_8 0x0000 +#define CM_RESOURCE_DMA_16 0x0001 +#define CM_RESOURCE_DMA_32 0x0002 +#define CM_RESOURCE_DMA_8_AND_16 0x0004 +#define CM_RESOURCE_DMA_BUS_MASTER 0x0008 +#define CM_RESOURCE_DMA_TYPE_A 0x0010 +#define CM_RESOURCE_DMA_TYPE_B 0x0020 +#define CM_RESOURCE_DMA_TYPE_F 0x0040 + +#define MAX_RESOURCES 20 + +#pragma pack(push,4) +struct cm_partial_resource_descriptor { + UCHAR type; + UCHAR share; + USHORT flags; + union { + struct { + PHYSICAL_ADDRESS start; + ULONG length; + } generic; + struct { + PHYSICAL_ADDRESS start; + ULONG length; + } port; + struct { + ULONG level; + ULONG vector; + KAFFINITY affinity; + } interrupt; + struct { + PHYSICAL_ADDRESS start; + ULONG length; + } memory; + struct { + ULONG channel; + ULONG port; + ULONG reserved1; + } dma; + struct { + ULONG data[3]; + } device_private; + struct { + ULONG start; + ULONG length; + ULONG reserved; + } bus_number; + struct { + ULONG data_size; + ULONG reserved1; + ULONG reserved2; + } device_specific_data; + } u; +}; +#pragma pack(pop) + +struct cm_partial_resource_list { + USHORT version; + USHORT revision; + ULONG count; + struct cm_partial_resource_descriptor partial_descriptors[1]; +}; + +struct cm_full_resource_descriptor { + enum interface_type interface_type; + ULONG bus_number; + struct cm_partial_resource_list partial_resource_list; +}; + +struct cm_resource_list { + ULONG count; + struct cm_full_resource_descriptor list[1]; +}; + +enum file_info_class { + FileDirectoryInformation = 1, + FileBasicInformation = 4, + FileStandardInformation = 5, + FileNameInformation = 9, + FilePositionInformation = 14, + FileAlignmentInformation = 17, + FileNetworkOpenInformation = 34, + FileAttributeTagInformation = 35, + FileMaximumInformation = 41, +}; + +enum fs_info_class { + FileFsVolumeInformation = 1, + /* ... */ + FileFsMaximumInformation = 9, +}; + +enum device_relation_type { + BusRelations, EjectionRelations, PowerRelations, RemovalRelations, + TargetDeviceRelation, SingleBusRelations, +}; + +enum bus_query_id_type { + BusQueryDeviceID = 0, BusQueryHardwareIDs = 1, + BusQueryCompatibleIDs = 2, BusQueryInstanceID = 3, + BusQueryDeviceSerialNumber = 4, +}; + +enum device_text_type { + DeviceTextDescription = 0, DeviceTextLocationInformation = 1, +}; + +enum device_usage_notification_type { + DeviceUsageTypeUndefined, DeviceUsageTypePaging, + DeviceUsageTypeHibernation, DevbiceUsageTypeDumpFile, +}; + +#define METHOD_BUFFERED 0 +#define METHOD_IN_DIRECT 1 +#define METHOD_OUT_DIRECT 2 +#define METHOD_NEITHER 3 + +#define CTL_CODE(dev_type, func, method, access) \ + (((dev_type) << 16) | ((access) << 14) | ((func) << 2) | (method)) + +#define IO_METHOD_FROM_CTL_CODE(code) (code & 0x3) + +#ifndef CONFIG_X86_64 +#pragma pack(push,4) +#endif +struct io_stack_location { + UCHAR major_fn; + UCHAR minor_fn; + UCHAR flags; + UCHAR control; + union { + struct { + void *security_context; + ULONG options; + USHORT POINTER_ALIGN file_attributes; + USHORT share_access; + ULONG POINTER_ALIGN ea_length; + } create; + struct { + ULONG length; + ULONG POINTER_ALIGN key; + LARGE_INTEGER byte_offset; + } read; + struct { + ULONG length; + ULONG POINTER_ALIGN key; + LARGE_INTEGER byte_offset; + } write; + struct { + ULONG length; + enum file_info_class POINTER_ALIGN file_info_class; + } query_file; + struct { + ULONG length; + enum file_info_class POINTER_ALIGN file_info_class; + struct file_object *file_object; + union { + struct { + BOOLEAN replace_if_exists; + BOOLEAN advance_only; + }; + ULONG cluster_count; + void *delete_handle; + }; + } set_file; + struct { + ULONG length; + enum fs_info_class POINTER_ALIGN fs_info_class; + } query_volume; + struct { + ULONG output_buf_len; + ULONG POINTER_ALIGN input_buf_len; + ULONG POINTER_ALIGN code; + void *type3_input_buf; + } dev_ioctl; + struct { + SECURITY_INFORMATION security_info; + ULONG POINTER_ALIGN length; + } query_security; + struct { + SECURITY_INFORMATION security_info; + void *security_descriptor; + } set_security; + struct { + void *vpb; + struct device_object *device_object; + } mount_volume; + struct { + void *vpb; + struct device_object *device_object; + } verify_volume; + struct { + void *srb; + } scsi; + struct { + enum device_relation_type type; + } query_device_relations; + struct { + const struct guid *type; + USHORT size; + USHORT version; + struct nt_interface *intf; + void *intf_data; + } query_intf; + struct { + void *capabilities; + } device_capabilities; + struct { + void *io_resource_requirement_list; + } filter_resource_requirements; + struct { + ULONG which_space; + void *buffer; + ULONG offset; + ULONG POINTER_ALIGN length; + } read_write_config; + struct { + BOOLEAN lock; + } set_lock; + struct { + enum bus_query_id_type id_type; + } query_id; + struct { + enum device_text_type device_text_type; + ULONG POINTER_ALIGN locale_id; + } query_device_text; + struct { + BOOLEAN in_path; + BOOLEAN reserved[3]; + enum device_usage_notification_type POINTER_ALIGN type; + } usage_notification; + struct { + enum system_power_state power_state; + } wait_wake; + struct { + void *power_sequence; + } power_sequence; + struct { + ULONG sys_context; + enum power_state_type POINTER_ALIGN type; + union power_state POINTER_ALIGN state; + enum power_action POINTER_ALIGN shutdown_type; + } power; + struct { + struct cm_resource_list *allocated_resources; + struct cm_resource_list *allocated_resources_translated; + } start_device; + struct { + ULONG_PTR provider_id; + void *data_path; + ULONG buf_len; + void *buf; + } wmi; + struct { + void *arg1; + void *arg2; + void *arg3; + void *arg4; + } others; + } params; + struct device_object *dev_obj; + struct file_object *file_obj; + NTSTATUS (*completion_routine)(struct device_object *, + struct irp *, void *) wstdcall; + void *context; +}; +#ifndef CONFIG_X86_64 +#pragma pack(pop) +#endif + +struct kapc { + CSHORT type; + CSHORT size; + ULONG spare0; + struct nt_thread *thread; + struct nt_list list; + void *kernele_routine; + void *rundown_routine; + void *normal_routine; + void *normal_context; + void *sys_arg1; + void *sys_arg2; + CCHAR apc_state_index; + KPROCESSOR_MODE apc_mode; + BOOLEAN inserted; +}; + +#define IRP_NOCACHE 0x00000001 +#define IRP_SYNCHRONOUS_API 0x00000004 +#define IRP_ASSOCIATED_IRP 0x00000008 + +enum urb_state { + URB_INVALID = 1, URB_ALLOCATED, URB_SUBMITTED, + URB_COMPLETED, URB_FREE, URB_SUSPEND, URB_INT_UNLINKED }; + +struct wrap_urb { + struct nt_list list; + enum urb_state state; + struct nt_list complete_list; + unsigned int flags; + struct urb *urb; + struct irp *irp; +#ifdef USB_DEBUG + unsigned int id; +#endif +}; + +struct irp { + SHORT type; + USHORT size; + struct mdl *mdl; + ULONG flags; + union { + struct irp *master_irp; + LONG irp_count; + void *system_buffer; + } associated_irp; + struct nt_list thread_list; + struct io_status_block io_status; + KPROCESSOR_MODE requestor_mode; + BOOLEAN pending_returned; + CHAR stack_count; + CHAR current_location; + BOOLEAN cancel; + KIRQL cancel_irql; + CCHAR apc_env; + UCHAR alloc_flags; + struct io_status_block *user_status; + struct nt_event *user_event; + union { + struct { + void *user_apc_routine; + void *user_apc_context; + } async_params; + LARGE_INTEGER alloc_size; + } overlay; + void (*cancel_routine)(struct device_object *, struct irp *) wstdcall; + void *user_buf; + union { + struct { + union { + struct kdevice_queue_entry dev_q_entry; + struct { + void *driver_context[4]; + }; + }; + void *thread; + char *aux_buf; + struct { + struct nt_list list; + union { + struct io_stack_location *csl; + ULONG packet_type; + }; + }; + struct file_object *file_object; + } overlay; + union { + struct kapc apc; + /* space for apc is used for ndiswrapper + * specific fields */ + struct { + struct wrap_urb *wrap_urb; + struct wrap_device *wrap_device; + }; + }; + void *completion_key; + } tail; +}; + +#define IoSizeOfIrp(stack_count) \ + ((USHORT)(sizeof(struct irp) + \ + ((stack_count) * sizeof(struct io_stack_location)))) +#define IoGetCurrentIrpStackLocation(irp) \ + (irp)->tail.overlay.csl +#define IoGetNextIrpStackLocation(irp) \ + (IoGetCurrentIrpStackLocation(irp) - 1) +#define IoGetPreviousIrpStackLocation(irp) \ + (IoGetCurrentIrpStackLocation(irp) + 1) + +#define IoSetNextIrpStackLocation(irp) \ +do { \ + KIRQL _irql_; \ + IoAcquireCancelSpinLock(&_irql_); \ + (irp)->current_location--; \ + IoGetCurrentIrpStackLocation(irp)--; \ + IoReleaseCancelSpinLock(_irql_); \ +} while (0) + +#define IoSkipCurrentIrpStackLocation(irp) \ +do { \ + KIRQL _irql_; \ + IoAcquireCancelSpinLock(&_irql_); \ + (irp)->current_location++; \ + IoGetCurrentIrpStackLocation(irp)++; \ + IoReleaseCancelSpinLock(_irql_); \ +} while (0) + +static inline void +IoCopyCurrentIrpStackLocationToNext(struct irp *irp) +{ + struct io_stack_location *next; + next = IoGetNextIrpStackLocation(irp); + memcpy(next, IoGetCurrentIrpStackLocation(irp), + offsetof(struct io_stack_location, completion_routine)); + next->control = 0; +} + +static inline void +IoSetCompletionRoutine(struct irp *irp, void *routine, void *context, + BOOLEAN success, BOOLEAN error, BOOLEAN cancel) +{ + struct io_stack_location *irp_sl = IoGetNextIrpStackLocation(irp); + irp_sl->completion_routine = routine; + irp_sl->context = context; + irp_sl->control = 0; + if (success) + irp_sl->control |= SL_INVOKE_ON_SUCCESS; + if (error) + irp_sl->control |= SL_INVOKE_ON_ERROR; + if (cancel) + irp_sl->control |= SL_INVOKE_ON_CANCEL; +} + +#define IoMarkIrpPending(irp) \ + (IoGetCurrentIrpStackLocation((irp))->control |= SL_PENDING_RETURNED) +#define IoUnmarkIrpPending(irp) \ + (IoGetCurrentIrpStackLocation((irp))->control &= ~SL_PENDING_RETURNED) + +#define IRP_SL(irp, n) (((struct io_stack_location *)((irp) + 1)) + (n)) +#define IRP_DRIVER_CONTEXT(irp) (irp)->tail.overlay.driver_context +#define IoIrpThread(irp) ((irp)->tail.overlay.thread) + +#define IRP_URB(irp) \ + (union nt_urb *)(IoGetCurrentIrpStackLocation(irp)->params.others.arg1) + +#define IRP_WRAP_DEVICE(irp) (irp)->tail.wrap_device +#define IRP_WRAP_URB(irp) (irp)->tail.wrap_urb + +struct wmi_guid_reg_info { + struct guid *guid; + ULONG instance_count; + ULONG flags; +}; + +struct wmilib_context { + ULONG guid_count; + struct wmi_guid_reg_info *guid_list; + void *query_wmi_reg_info; + void *query_wmi_data_block; + void *set_wmi_data_block; + void *set_wmi_data_item; + void *execute_wmi_method; + void *wmi_function_control; +}; + +enum key_value_information_class { + KeyValueBasicInformation, KeyValueFullInformation, + KeyValuePartialInformation, KeyValueFullInformationAlign64, + KeyValuePartialInformationAlign64 +}; + +struct file_name_info { + ULONG length; + wchar_t *name; +}; + +struct file_std_info { + LARGE_INTEGER alloc_size; + LARGE_INTEGER eof; + ULONG num_links; + BOOLEAN delete_pending; + BOOLEAN dir; +}; + +enum nt_obj_type { + NT_OBJ_EVENT = 10, NT_OBJ_MUTEX, NT_OBJ_THREAD, NT_OBJ_TIMER, + NT_OBJ_SEMAPHORE, +}; + +enum common_object_type { + OBJECT_TYPE_NONE, OBJECT_TYPE_DEVICE, OBJECT_TYPE_DRIVER, + OBJECT_TYPE_NT_THREAD, OBJECT_TYPE_FILE, OBJECT_TYPE_CALLBACK, +}; + +struct common_object_header { + struct nt_list list; + enum common_object_type type; + UINT size; + UINT ref_count; + BOOLEAN close_in_process; + BOOLEAN permanent; + struct unicode_string name; +}; + +#define OBJECT_TO_HEADER(object) \ + (struct common_object_header *)((void *)(object) - \ + sizeof(struct common_object_header)) +#define OBJECT_SIZE(size) \ + ((size) + sizeof(struct common_object_header)) +#define HEADER_TO_OBJECT(hdr) \ + ((void *)(hdr) + sizeof(struct common_object_header)) +#define HANDLE_TO_OBJECT(handle) HEADER_TO_OBJECT(handle) +#define HANDLE_TO_HEADER(handle) (handle) + +enum work_queue_type { + CriticalWorkQueue, DelayedWorkQueue, HyperCriticalWorkQueue, + MaximumWorkQueue +}; + +typedef void (*NTOS_WORK_FUNC)(void *arg1, void *arg2) wstdcall; + +struct io_workitem { + enum work_queue_type type; + struct device_object *dev_obj; + NTOS_WORK_FUNC worker_routine; + void *context; +}; + +struct io_workitem_entry { + struct nt_list list; + struct io_workitem *io_workitem; +}; + +enum mm_page_priority { + LowPagePriority, NormalPagePriority = 16, HighPagePriority = 32 +}; + +enum kinterrupt_mode { + LevelSensitive, Latched +}; + +enum ntos_wait_reason { + Executive, FreePage, PageIn, PoolAllocation, DelayExecution, + Suspended, UserRequest, WrExecutive, WrFreePage, WrPageIn, + WrPoolAllocation, WrDelayExecution, WrSuspended, WrUserRequest, + WrEventPair, WrQueue, WrLpcReceive, WrLpcReply, WrVirtualMemory, + WrPageOut, WrRendezvous, Spare2, Spare3, Spare4, Spare5, Spare6, + WrKernel, MaximumWaitReason +}; + +typedef enum ntos_wait_reason KWAIT_REASON; + +typedef void *LOOKASIDE_ALLOC_FUNC(enum pool_type pool_type, + SIZE_T size, ULONG tag) wstdcall; +typedef void LOOKASIDE_FREE_FUNC(void *) wstdcall; + +struct npaged_lookaside_list { + nt_slist_header head; + USHORT depth; + USHORT maxdepth; + ULONG totalallocs; + union { + ULONG allocmisses; + ULONG allochits; + } u1; + ULONG totalfrees; + union { + ULONG freemisses; + ULONG freehits; + } u2; + enum pool_type pool_type; + ULONG tag; + ULONG size; + LOOKASIDE_ALLOC_FUNC *alloc_func; + LOOKASIDE_FREE_FUNC *free_func; + struct nt_list list; + ULONG lasttotallocs; + union { + ULONG lastallocmisses; + ULONG lastallochits; + } u3; + ULONG pad[2]; +#ifndef CONFIG_X86_64 + NT_SPIN_LOCK obsolete; +#endif +} +#ifdef CONFIG_X86_64 +CACHE_ALIGN +#endif +; + +enum device_registry_property { + DevicePropertyDeviceDescription, DevicePropertyHardwareID, + DevicePropertyCompatibleIDs, DevicePropertyBootConfiguration, + DevicePropertyBootConfigurationTranslated, + DevicePropertyClassName, DevicePropertyClassGuid, + DevicePropertyDriverKeyName, DevicePropertyManufacturer, + DevicePropertyFriendlyName, DevicePropertyLocationInformation, + DevicePropertyPhysicalDeviceObjectName, DevicePropertyBusTypeGuid, + DevicePropertyLegacyBusType, DevicePropertyBusNumber, + DevicePropertyEnumeratorName, DevicePropertyAddress, + DevicePropertyUINumber, DevicePropertyInstallState, + DevicePropertyRemovalPolicy +}; + +enum trace_information_class { + TraceIdClass, TraceHandleClass, TraceEnableFlagsClass, + TraceEnableLevelClass, GlobalLoggerHandleClass, EventLoggerHandleClass, + AllLoggerHandlesClass, TraceHandleByNameClass +}; + +struct kinterrupt; +typedef BOOLEAN (*PKSERVICE_ROUTINE)(struct kinterrupt *interrupt, + void *context) wstdcall; +typedef BOOLEAN (*PKSYNCHRONIZE_ROUTINE)(void *context) wstdcall; + +struct kinterrupt { + ULONG vector; + KAFFINITY cpu_mask; + NT_SPIN_LOCK lock; + NT_SPIN_LOCK *actual_lock; + BOOLEAN shared; + BOOLEAN save_fp; + union { + CHAR processor_number; +#ifdef CONFIG_DEBUG_SHIRQ + CHAR enabled; +#endif + } u; + PKSERVICE_ROUTINE isr; + void *isr_ctx; + struct nt_list list; + KIRQL irql; + KIRQL synch_irql; + enum kinterrupt_mode mode; +}; + +struct time_fields { + CSHORT year; + CSHORT month; + CSHORT day; + CSHORT hour; + CSHORT minute; + CSHORT second; + CSHORT milliseconds; + CSHORT weekday; +}; + +struct object_attributes { + ULONG length; + void *root_dir; + struct unicode_string *name; + ULONG attributes; + void *security_descr; + void *security_qos; +}; + +typedef void (*PCALLBACK_FUNCTION)(void *context, void *arg1, + void *arg2) wstdcall; + +struct callback_object; +struct callback_func { + PCALLBACK_FUNCTION func; + void *context; + struct nt_list list; + struct callback_object *object; +}; + +struct callback_object { + NT_SPIN_LOCK lock; + struct nt_list list; + struct nt_list callback_funcs; + BOOLEAN allow_multiple_callbacks; + struct object_attributes *attributes; +}; + +enum section_inherit { + ViewShare = 1, ViewUnmap = 2 +}; + +struct ksystem_time { + ULONG low_part; + LONG high1_time; + LONG high2_time; +}; + +enum nt_product_type { + nt_product_win_nt = 1, nt_product_lan_man_nt, nt_product_server +}; + +enum alt_arch_type { + arch_type_standard, arch_type_nex98x86, end_alternatives +}; + +struct kuser_shared_data { + ULONG tick_count; + ULONG tick_count_multiplier; + volatile struct ksystem_time interrupt_time; + volatile struct ksystem_time system_time; + volatile struct ksystem_time time_zone_bias; + USHORT image_number_low; + USHORT image_number_high; + wchar_t nt_system_root[260]; + ULONG max_stack_trace_depth; + ULONG crypto_exponent; + ULONG time_zone_id; + ULONG large_page_min; + ULONG reserved2[7]; + enum nt_product_type nt_product_type; + BOOLEAN product_type_is_valid; + ULONG nt_major_version; + ULONG nt_minor_version; + BOOLEAN processor_features[PROCESSOR_FEATURE_MAX]; + ULONG reserved1; + ULONG reserved3; + volatile LONG time_slip; + enum alt_arch_type alt_arch_type; + LARGE_INTEGER system_expiration_date; + ULONG suite_mask; + BOOLEAN kdbg_enabled; + volatile ULONG active_console; + volatile ULONG dismount_count; + ULONG com_plus_package; + ULONG last_system_rite_event_tick_count; + ULONG num_phys_pages; + BOOLEAN safe_boot_mode; + ULONG trace_log; + ULONGLONG fill0; + ULONGLONG sys_call[4]; + union { + volatile struct ksystem_time tick_count; + volatile ULONG64 tick_count_quad; + } tick; +}; + +#define REG_NONE (0) +#define REG_SZ (1) +#define REG_EXPAND_SZ (2) +#define REG_BINARY (3) +#define REG_DWORD (4) + +#define RTL_REGISTRY_ABSOLUTE 0 +#define RTL_REGISTRY_SERVICES 1 +#define RTL_REGISTRY_CONTROL 2 +#define RTL_REGISTRY_WINDOWS_NT 3 +#define RTL_REGISTRY_DEVICEMAP 4 +#define RTL_REGISTRY_USER 5 +#define RTL_REGISTRY_MAXIMUM 6 +#define RTL_REGISTRY_HANDLE 0x40000000 +#define RTL_REGISTRY_OPTIONAL 0x80000000 + +#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 +#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 +#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 +#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 +#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 +#define RTL_QUERY_REGISTRY_DIRECT 0x00000020 +#define RTL_QUERY_REGISTRY_DELETE 0x00000040 + +typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)(wchar_t *name, ULONG type, + void *data, ULONG length, + void *context, + void *entry) wstdcall; + +struct rtl_query_registry_table { + PRTL_QUERY_REGISTRY_ROUTINE query_func; + ULONG flags; + wchar_t *name; + void *context; + ULONG def_type; + void *def_data; + ULONG def_length; +}; + +struct io_remove_lock { + BOOLEAN removed; + BOOLEAN reserved[3]; + LONG io_count; + struct nt_event remove_event; +}; + +struct io_error_log_packet { + UCHAR major_fn_code; + UCHAR retry_count; + USHORT dump_data_size; + USHORT nr_of_strings; + USHORT string_offset; + USHORT event_category; + NTSTATUS error_code; + ULONG unique_error_value; + NTSTATUS final_status; + ULONG sequence_number; + ULONG io_control_code; + LARGE_INTEGER device_offset; + ULONG dump_data[1]; +}; + +/* some of the functions below are slightly different from DDK's + * implementation; e.g., Insert functions return appropriate + * pointer */ + +/* instead of using Linux's lists, we implement list manipulation + * functions because nt_list is used by drivers and we don't want to + * worry about Linux's list being different from nt_list (right now + * they are same, but in future they could be different) */ + +static inline void InitializeListHead(struct nt_list *head) +{ + head->next = head->prev = head; +} + +static inline BOOLEAN IsListEmpty(struct nt_list *head) +{ + if (head == head->next) + return TRUE; + else + return FALSE; +} + +static inline void RemoveEntryList(struct nt_list *entry) +{ + entry->prev->next = entry->next; + entry->next->prev = entry->prev; +} + +static inline struct nt_list *RemoveHeadList(struct nt_list *head) +{ + struct nt_list *entry; + + entry = head->next; + if (entry == head) + return NULL; + else { + RemoveEntryList(entry); + return entry; + } +} + +static inline struct nt_list *RemoveTailList(struct nt_list *head) +{ + struct nt_list *entry; + + entry = head->prev; + if (entry == head) + return NULL; + else { + RemoveEntryList(entry); + return entry; + } +} + +static inline void InsertListEntry(struct nt_list *entry, struct nt_list *prev, + struct nt_list *next) +{ + next->prev = entry; + entry->next = next; + entry->prev = prev; + prev->next = entry; +} + +static inline struct nt_list *InsertHeadList(struct nt_list *head, + struct nt_list *entry) +{ + struct nt_list *ret; + + if (IsListEmpty(head)) + ret = NULL; + else + ret = head->next; + + InsertListEntry(entry, head, head->next); + return ret; +} + +static inline struct nt_list *InsertTailList(struct nt_list *head, + struct nt_list *entry) +{ + struct nt_list *ret; + + if (IsListEmpty(head)) + ret = NULL; + else + ret = head->prev; + + InsertListEntry(entry, head->prev, head); + return ret; +} + +#define nt_list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = pos->next) + +#define nt_list_for_each_entry(pos, head, member) \ + for (pos = container_of((head)->next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = container_of(pos->member.next, typeof(*pos), member)) + +#define nt_list_for_each_safe(pos, n, head) \ + for (pos = (head)->next, n = pos->next; pos != (head); \ + pos = n, n = pos->next) + +/* device object flags */ +#define DO_VERIFY_VOLUME 0x00000002 +#define DO_BUFFERED_IO 0x00000004 +#define DO_EXCLUSIVE 0x00000008 +#define DO_DIRECT_IO 0x00000010 +#define DO_MAP_IO_BUFFER 0x00000020 +#define DO_DEVICE_HAS_NAME 0x00000040 +#define DO_DEVICE_INITIALIZING 0x00000080 +#define DO_SYSTEM_BOOT_PARTITION 0x00000100 +#define DO_LONG_TERM_REQUESTS 0x00000200 +#define DO_NEVER_LAST_DEVICE 0x00000400 +#define DO_SHUTDOWN_REGISTERED 0x00000800 +#define DO_BUS_ENUMERATED_DEVICE 0x00001000 +#define DO_POWER_PAGABLE 0x00002000 +#define DO_POWER_INRUSH 0x00004000 +#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 + +/* Various supported device types (used with IoCreateDevice()) */ + +#define FILE_DEVICE_BEEP 0x00000001 +#define FILE_DEVICE_CD_ROM 0x00000002 +#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 +#define FILE_DEVICE_CONTROLLER 0x00000004 +#define FILE_DEVICE_DATALINK 0x00000005 +#define FILE_DEVICE_DFS 0x00000006 +#define FILE_DEVICE_DISK 0x00000007 +#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 +#define FILE_DEVICE_FILE_SYSTEM 0x00000009 +#define FILE_DEVICE_INPORT_PORT 0x0000000A +#define FILE_DEVICE_KEYBOARD 0x0000000B +#define FILE_DEVICE_MAILSLOT 0x0000000C +#define FILE_DEVICE_MIDI_IN 0x0000000D +#define FILE_DEVICE_MIDI_OUT 0x0000000E +#define FILE_DEVICE_MOUSE 0x0000000F +#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 +#define FILE_DEVICE_NAMED_PIPE 0x00000011 +#define FILE_DEVICE_NETWORK 0x00000012 +#define FILE_DEVICE_NETWORK_BROWSER 0x00000013 +#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 +#define FILE_DEVICE_NULL 0x00000015 +#define FILE_DEVICE_PARALLEL_PORT 0x00000016 +#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 +#define FILE_DEVICE_PRINTER 0x00000018 +#define FILE_DEVICE_SCANNER 0x00000019 +#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001A +#define FILE_DEVICE_SERIAL_PORT 0x0000001B +#define FILE_DEVICE_SCREEN 0x0000001C +#define FILE_DEVICE_SOUND 0x0000001D +#define FILE_DEVICE_STREAMS 0x0000001E +#define FILE_DEVICE_TAPE 0x0000001F +#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 +#define FILE_DEVICE_TRANSPORT 0x00000021 +#define FILE_DEVICE_UNKNOWN 0x00000022 +#define FILE_DEVICE_VIDEO 0x00000023 +#define FILE_DEVICE_VIRTUAL_DISK 0x00000024 +#define FILE_DEVICE_WAVE_IN 0x00000025 +#define FILE_DEVICE_WAVE_OUT 0x00000026 +#define FILE_DEVICE_8042_PORT 0x00000027 +#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 +#define FILE_DEVICE_BATTERY 0x00000029 +#define FILE_DEVICE_BUS_EXTENDER 0x0000002A +#define FILE_DEVICE_MODEM 0x0000002B +#define FILE_DEVICE_VDM 0x0000002C +#define FILE_DEVICE_MASS_STORAGE 0x0000002D +#define FILE_DEVICE_SMB 0x0000002E +#define FILE_DEVICE_KS 0x0000002F +#define FILE_DEVICE_CHANGER 0x00000030 +#define FILE_DEVICE_SMARTCARD 0x00000031 +#define FILE_DEVICE_ACPI 0x00000032 +#define FILE_DEVICE_DVD 0x00000033 +#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 +#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 +#define FILE_DEVICE_DFS_VOLUME 0x00000036 +#define FILE_DEVICE_SERENUM 0x00000037 +#define FILE_DEVICE_TERMSRV 0x00000038 +#define FILE_DEVICE_KSEC 0x00000039 +#define FILE_DEVICE_FIPS 0x0000003A + +/* Device characteristics */ + +#define FILE_REMOVABLE_MEDIA 0x00000001 +#define FILE_READ_ONLY_DEVICE 0x00000002 +#define FILE_FLOPPY_DISKETTE 0x00000004 +#define FILE_WRITE_ONCE_MEDIA 0x00000008 +#define FILE_REMOTE_DEVICE 0x00000010 +#define FILE_DEVICE_IS_MOUNTED 0x00000020 +#define FILE_VIRTUAL_VOLUME 0x00000040 +#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 +#define FILE_DEVICE_SECURE_OPEN 0x00000100 + +#define FILE_READ_DATA 0x0001 +#define FILE_WRITE_DATA 0x0002 + +#define FILE_SUPERSEDED 0x00000000 +#define FILE_OPENED 0x00000001 +#define FILE_CREATED 0x00000002 +#define FILE_OVERWRITTEN 0x00000003 +#define FILE_EXISTS 0x00000004 +#define FILE_DOES_NOT_EXIST 0x00000005 + + +#endif /* WINNT_TYPES_H */ --- linux-2.6.32.orig/ubuntu/ndiswrapper/ndis.c +++ linux-2.6.32/ubuntu/ndiswrapper/ndis.c @@ -0,0 +1,2974 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ndis.h" +#include "iw_ndis.h" +#include "wrapndis.h" +#include "pnp.h" +#include "loader.h" +#include +#include +#include "ndis_exports.h" + +#define MAX_ALLOCATED_NDIS_PACKETS TX_RING_SIZE +#define MAX_ALLOCATED_NDIS_BUFFERS TX_RING_SIZE + +static void ndis_worker(worker_param_t dummy); +static work_struct_t ndis_work; +static struct nt_list ndis_work_list; +static spinlock_t ndis_work_list_lock; + +workqueue_struct_t *ndis_wq; +static struct nt_thread *ndis_worker_thread; + +static void *ndis_get_routine_address(char *name); + +wstdcall void WIN_FUNC(NdisInitializeWrapper,4) + (void **driver_handle, struct driver_object *driver, + struct unicode_string *reg_path, void *unused) +{ + ENTER1("handle: %p, driver: %p", driver_handle, driver); + *driver_handle = driver; + EXIT1(return); +} + +wstdcall void WIN_FUNC(NdisTerminateWrapper,2) + (struct device_object *dev_obj, void *system_specific) +{ + EXIT1(return); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMRegisterMiniport,3) + (struct driver_object *drv_obj, struct miniport *mp, UINT length) +{ + int min_length; + struct wrap_driver *wrap_driver; + struct ndis_driver *ndis_driver; + + min_length = ((char *)&mp->co_create_vc) - ((char *)mp); + + ENTER1("%p %p %d", drv_obj, mp, length); + + if (mp->major_version < 4) { + ERROR("Driver is using ndis version %d which is too old.", + mp->major_version); + EXIT1(return NDIS_STATUS_BAD_VERSION); + } + + if (length < min_length) { + ERROR("Characteristics length %d is too small", length); + EXIT1(return NDIS_STATUS_BAD_CHARACTERISTICS); + } + + TRACE1("%d.%d, %d, %u", mp->major_version, mp->minor_version, length, + (u32)sizeof(struct miniport)); + wrap_driver = IoGetDriverObjectExtension(drv_obj, + (void *)WRAP_DRIVER_CLIENT_ID); + if (!wrap_driver) { + ERROR("couldn't get wrap_driver"); + EXIT1(return NDIS_STATUS_RESOURCES); + } + if (IoAllocateDriverObjectExtension( + drv_obj, (void *)NDIS_DRIVER_CLIENT_ID, + sizeof(*ndis_driver), (void **)&ndis_driver) != + STATUS_SUCCESS) + EXIT1(return NDIS_STATUS_RESOURCES); + wrap_driver->ndis_driver = ndis_driver; + TRACE1("driver: %p", ndis_driver); + memcpy(&ndis_driver->mp, mp, min_t(int, sizeof(*mp), length)); + + DBG_BLOCK(2) { + int i; + void **func; + char *mp_funcs[] = { + "queryinfo", "reconfig", "reset", "send", "setinfo", + "tx_data", "return_packet", "send_packets", + "alloc_complete", "co_create_vc", "co_delete_vc", + "co_activate_vc", "co_deactivate_vc", + "co_send_packets", "co_request", "cancel_send_packets", + "pnp_event_notify", "shutdown", + }; + func = (void **)&ndis_driver->mp.queryinfo; + for (i = 0; i < (sizeof(mp_funcs) / sizeof(mp_funcs[0])); i++) + TRACE2("function '%s' is at %p", mp_funcs[i], func[i]); + } + EXIT1(return NDIS_STATUS_SUCCESS); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMRegisterDevice,6) + (struct driver_object *drv_obj, struct unicode_string *dev_name, + struct unicode_string *link, void **funcs, + struct device_object **dev_obj, void **dev_obj_handle) +{ + NTSTATUS status; + struct device_object *tmp; + int i; + + ENTER1("%p, %p, %p", drv_obj, dev_name, link); + status = IoCreateDevice(drv_obj, 0, dev_name, FILE_DEVICE_NETWORK, 0, + FALSE, &tmp); + + if (status != STATUS_SUCCESS) + EXIT1(return NDIS_STATUS_RESOURCES); + if (link) + status = IoCreateSymbolicLink(link, dev_name); + if (status != STATUS_SUCCESS) { + IoDeleteDevice(tmp); + EXIT1(return NDIS_STATUS_RESOURCES); + } + + *dev_obj = tmp; + *dev_obj_handle = *dev_obj; + for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) + if (funcs[i] && i != IRP_MJ_PNP && i != IRP_MJ_POWER) { + drv_obj->major_func[i] = funcs[i]; + TRACE1("mj_fn for 0x%x is at %p", i, funcs[i]); + } + EXIT1(return NDIS_STATUS_SUCCESS); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMDeregisterDevice,1) + (struct device_object *dev_obj) +{ + ENTER2("%p", dev_obj); + IoDeleteDevice(dev_obj); + return NDIS_STATUS_SUCCESS; +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisAllocateMemoryWithTag,3) + (void **dest, UINT length, ULONG tag) +{ + void *addr; + + assert_irql(_irql_ <= DISPATCH_LEVEL); + addr = ExAllocatePoolWithTag(NonPagedPool, length, tag); + TRACE4("%p", addr); + if (addr) { + *dest = addr; + EXIT4(return NDIS_STATUS_SUCCESS); + } else + EXIT4(return NDIS_STATUS_FAILURE); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisAllocateMemory,4) + (void **dest, UINT length, UINT flags, NDIS_PHY_ADDRESS highest_address) +{ + return NdisAllocateMemoryWithTag(dest, length, 0); +} + +/* length_tag is either length or tag, depending on if + * NdisAllocateMemory or NdisAllocateMemoryTag is used to allocate + * memory */ +wstdcall void WIN_FUNC(NdisFreeMemory,3) + (void *addr, UINT length_tag, UINT flags) +{ + TRACE4("%p", addr); + ExFreePool(addr); +} + +noregparm void WIN_FUNC(NdisWriteErrorLogEntry,12) + (struct driver_object *drv_obj, ULONG error, ULONG count, ...) +{ + va_list args; + int i; + ULONG code; + + va_start(args, count); + ERROR("log: %08X, count: %d, return_address: %p", + error, count, __builtin_return_address(0)); + for (i = 0; i < count; i++) { + code = va_arg(args, ULONG); + ERROR("code: 0x%x", code); + } + va_end(args); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisOpenConfiguration,3) + (NDIS_STATUS *status, struct ndis_mp_block **conf_handle, + struct ndis_mp_block *handle) +{ + ENTER2("%p", conf_handle); + *conf_handle = handle; + *status = NDIS_STATUS_SUCCESS; + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisOpenProtocolConfiguration,3) + (NDIS_STATUS *status, void **confhandle, + struct unicode_string *section) +{ + ENTER2("%p", confhandle); + *status = NDIS_STATUS_SUCCESS; + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisOpenConfigurationKeyByName,4) + (NDIS_STATUS *status, void *handle, + struct unicode_string *key, void **subkeyhandle) +{ + struct ansi_string ansi; + ENTER2(""); + if (RtlUnicodeStringToAnsiString(&ansi, key, TRUE) == STATUS_SUCCESS) { + TRACE2("%s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + *subkeyhandle = handle; + *status = NDIS_STATUS_SUCCESS; + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisOpenConfigurationKeyByIndex,5) + (NDIS_STATUS *status, void *handle, ULONG index, + struct unicode_string *key, void **subkeyhandle) +{ + ENTER2("%u", index); +// *subkeyhandle = handle; + *status = NDIS_STATUS_FAILURE; + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisCloseConfiguration,1) + (void *handle) +{ + /* instead of freeing all configuration parameters as we are + * supposed to do here, we free them when the device is + * removed */ + ENTER2("%p", handle); + return; +} + +wstdcall void WIN_FUNC(NdisOpenFile,5) + (NDIS_STATUS *status, struct wrap_bin_file **file, + UINT *filelength, struct unicode_string *filename, + NDIS_PHY_ADDRESS highest_address) +{ + struct ansi_string ansi; + struct wrap_bin_file *bin_file; + + ENTER2("%p, %d, %llx, %p", status, *filelength, highest_address, *file); + if (RtlUnicodeStringToAnsiString(&ansi, filename, TRUE) != + STATUS_SUCCESS) { + *status = NDIS_STATUS_RESOURCES; + EXIT2(return); + } + TRACE2("%s", ansi.buf); + bin_file = get_bin_file(ansi.buf); + if (bin_file) { + *file = bin_file; + *filelength = bin_file->size; + *status = NDIS_STATUS_SUCCESS; + } else + *status = NDIS_STATUS_FILE_NOT_FOUND; + + RtlFreeAnsiString(&ansi); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisMapFile,3) + (NDIS_STATUS *status, void **mappedbuffer, struct wrap_bin_file *file) +{ + ENTER2("%p", file); + + if (!file) { + *status = NDIS_STATUS_ALREADY_MAPPED; + EXIT2(return); + } + + *status = NDIS_STATUS_SUCCESS; + *mappedbuffer = file->data; + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisUnmapFile,1) + (struct wrap_bin_file *file) +{ + ENTER2("%p", file); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisCloseFile,1) + (struct wrap_bin_file *file) +{ + ENTER2("%p", file); + free_bin_file(file); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisGetSystemUpTime,1) + (ULONG *ms) +{ + *ms = 1000 * jiffies / HZ; + EXIT5(return); +} + +wstdcall ULONG WIN_FUNC(NDIS_BUFFER_TO_SPAN_PAGES,1) + (ndis_buffer *buffer) +{ + ULONG n, length; + + if (buffer == NULL) + EXIT2(return 0); + if (MmGetMdlByteCount(buffer) == 0) + EXIT2(return 1); + + length = MmGetMdlByteCount(buffer); + n = SPAN_PAGES(MmGetMdlVirtualAddress(buffer), length); + TRACE4("%p, %p, %d, %d", buffer->startva, buffer->mappedsystemva, + length, n); + EXIT3(return n); +} + +wstdcall void WIN_FUNC(NdisGetBufferPhysicalArraySize,2) + (ndis_buffer *buffer, UINT *arraysize) +{ + ENTER3("%p", buffer); + *arraysize = NDIS_BUFFER_TO_SPAN_PAGES(buffer); + EXIT3(return); +} + +static struct ndis_configuration_parameter * +ndis_encode_setting(struct wrap_device_setting *setting, + enum ndis_parameter_type type) +{ + struct ansi_string ansi; + struct ndis_configuration_parameter *param; + + param = setting->encoded; + if (param) { + if (param->type == type) + EXIT2(return param); + if (param->type == NdisParameterString) + RtlFreeUnicodeString(¶m->data.string); + setting->encoded = NULL; + } else + param = ExAllocatePoolWithTag(NonPagedPool, sizeof(*param), 0); + if (!param) { + ERROR("couldn't allocate memory"); + return NULL; + } + switch(type) { + case NdisParameterInteger: + param->data.integer = simple_strtol(setting->value, NULL, 0); + TRACE2("0x%x", (ULONG)param->data.integer); + break; + case NdisParameterHexInteger: + param->data.integer = simple_strtol(setting->value, NULL, 16); + TRACE2("0x%x", (ULONG)param->data.integer); + break; + case NdisParameterString: + RtlInitAnsiString(&ansi, setting->value); + TRACE2("'%s'", ansi.buf); + if (RtlAnsiStringToUnicodeString(¶m->data.string, + &ansi, TRUE)) { + ExFreePool(param); + EXIT2(return NULL); + } + break; + case NdisParameterBinary: + param->data.integer = simple_strtol(setting->value, NULL, 2); + TRACE2("0x%x", (ULONG)param->data.integer); + break; + default: + ERROR("unknown type: %d", type); + ExFreePool(param); + return NULL; + } + param->type = type; + setting->encoded = param; + EXIT2(return param); +} + +static int ndis_decode_setting(struct wrap_device_setting *setting, + struct ndis_configuration_parameter *param) +{ + struct ansi_string ansi; + struct ndis_configuration_parameter *prev; + + ENTER2("%p, %p", setting, param); + prev = setting->encoded; + if (prev && prev->type == NdisParameterString) { + RtlFreeUnicodeString(&prev->data.string); + setting->encoded = NULL; + } + switch(param->type) { + case NdisParameterInteger: + snprintf(setting->value, sizeof(u32), "%u", + param->data.integer); + setting->value[sizeof(ULONG)] = 0; + break; + case NdisParameterHexInteger: + snprintf(setting->value, sizeof(u32), "%x", + param->data.integer); + setting->value[sizeof(ULONG)] = 0; + break; + case NdisParameterString: + ansi.buf = setting->value; + ansi.max_length = MAX_SETTING_VALUE_LEN; + if ((RtlUnicodeStringToAnsiString(&ansi, ¶m->data.string, + FALSE) != STATUS_SUCCESS) + || ansi.length >= MAX_SETTING_VALUE_LEN) { + EXIT1(return -1); + } + if (ansi.length == ansi.max_length) + ansi.length--; + setting->value[ansi.length] = 0; + break; + case NdisParameterBinary: + snprintf(setting->value, sizeof(u32), "%u", + param->data.integer); + setting->value[sizeof(ULONG)] = 0; + break; + default: + TRACE2("unknown setting type: %d", param->type); + return -1; + } + TRACE2("setting changed %s='%s', %d", setting->name, setting->value, + ansi.length); + return 0; +} + +static int read_setting(struct nt_list *setting_list, char *keyname, int length, + struct ndis_configuration_parameter **param, + enum ndis_parameter_type type) +{ + struct wrap_device_setting *setting; + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + nt_list_for_each_entry(setting, setting_list, list) { + if (strnicmp(keyname, setting->name, length) == 0) { + TRACE2("setting %s='%s'", keyname, setting->value); + up(&loader_mutex); + *param = ndis_encode_setting(setting, type); + if (*param) + EXIT2(return 0); + else + EXIT2(return -1); + } + } + up(&loader_mutex); + EXIT2(return -1); +} + +wstdcall void WIN_FUNC(NdisReadConfiguration,5) + (NDIS_STATUS *status, struct ndis_configuration_parameter **param, + struct ndis_mp_block *nmb, struct unicode_string *key, + enum ndis_parameter_type type) +{ + struct ansi_string ansi; + int ret; + + ENTER2("nmb: %p", nmb); + ret = RtlUnicodeStringToAnsiString(&ansi, key, TRUE); + if (ret != STATUS_SUCCESS || ansi.buf == NULL) { + *param = NULL; + *status = NDIS_STATUS_FAILURE; + RtlFreeAnsiString(&ansi); + EXIT2(return); + } + TRACE2("%d, %s", type, ansi.buf); + + if (read_setting(&nmb->wnd->wd->settings, ansi.buf, + ansi.length, param, type) == 0 || + read_setting(&nmb->wnd->wd->driver->settings, ansi.buf, + ansi.length, param, type) == 0) + *status = NDIS_STATUS_SUCCESS; + else { + TRACE2("setting %s not found (type:%d)", ansi.buf, type); + *status = NDIS_STATUS_FAILURE; + } + RtlFreeAnsiString(&ansi); + EXIT2(return); + +} + +wstdcall void WIN_FUNC(NdisWriteConfiguration,4) + (NDIS_STATUS *status, struct ndis_mp_block *nmb, + struct unicode_string *key, struct ndis_configuration_parameter *param) +{ + struct ansi_string ansi; + char *keyname; + struct wrap_device_setting *setting; + + ENTER2("nmb: %p", nmb); + if (RtlUnicodeStringToAnsiString(&ansi, key, TRUE)) { + *status = NDIS_STATUS_FAILURE; + EXIT2(return); + } + keyname = ansi.buf; + TRACE2("%s", keyname); + + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + nt_list_for_each_entry(setting, &nmb->wnd->wd->settings, list) { + if (strnicmp(keyname, setting->name, ansi.length) == 0) { + up(&loader_mutex); + if (ndis_decode_setting(setting, param)) + *status = NDIS_STATUS_FAILURE; + else + *status = NDIS_STATUS_SUCCESS; + RtlFreeAnsiString(&ansi); + EXIT2(return); + } + } + up(&loader_mutex); + setting = kzalloc(sizeof(*setting), GFP_KERNEL); + if (setting) { + if (ansi.length == ansi.max_length) + ansi.length--; + memcpy(setting->name, keyname, ansi.length); + setting->name[ansi.length] = 0; + if (ndis_decode_setting(setting, param)) + *status = NDIS_STATUS_FAILURE; + else { + *status = NDIS_STATUS_SUCCESS; + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + InsertTailList(&nmb->wnd->wd->settings, &setting->list); + up(&loader_mutex); + } + } else + *status = NDIS_STATUS_RESOURCES; + + RtlFreeAnsiString(&ansi); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisReadNetworkAddress,4) + (NDIS_STATUS *status, void **addr, UINT *len, + struct ndis_mp_block *nmb) +{ + struct ndis_device *wnd = nmb->wnd; + struct ndis_configuration_parameter *param; + struct unicode_string key; + struct ansi_string ansi; + typeof(wnd->mac) mac; + int i, ret; + + ENTER2("%p", nmb); + RtlInitAnsiString(&ansi, "NetworkAddress"); + *status = NDIS_STATUS_FAILURE; + if (RtlAnsiStringToUnicodeString(&key, &ansi, TRUE) != STATUS_SUCCESS) + EXIT1(return); + + NdisReadConfiguration(&ret, ¶m, nmb, &key, NdisParameterString); + RtlFreeUnicodeString(&key); + if (ret != NDIS_STATUS_SUCCESS) + EXIT1(return); + ret = RtlUnicodeStringToAnsiString(&ansi, ¶m->data.string, TRUE); + if (ret != STATUS_SUCCESS) + EXIT1(return); + + i = 0; + if (ansi.length >= 2 * sizeof(mac)) { + for (i = 0; i < sizeof(mac); i++) { + char c[3]; + int x; + c[0] = ansi.buf[i*2]; + c[1] = ansi.buf[i*2+1]; + c[2] = 0; + ret = sscanf(c, "%x", &x); + if (ret != 1) + break; + mac[i] = x; + } + } + TRACE2("%s, %d, " MACSTR, ansi.buf, i, MAC2STR(mac)); + RtlFreeAnsiString(&ansi); + if (i == sizeof(mac)) { + memcpy(wnd->mac, mac, sizeof(wnd->mac)); + *len = sizeof(mac); + *addr = wnd->mac; + *status = NDIS_STATUS_SUCCESS; + } + EXIT1(return); +} + +wstdcall void WIN_FUNC(NdisInitializeString,2) + (struct unicode_string *dest, UCHAR *src) +{ + struct ansi_string ansi; + + ENTER2(""); + if (src == NULL) { + dest->length = dest->max_length = 0; + dest->buf = NULL; + } else { + RtlInitAnsiString(&ansi, src); + /* the string is freed with NdisFreeMemory */ + RtlAnsiStringToUnicodeString(dest, &ansi, TRUE); + } + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisInitAnsiString,2) + (struct ansi_string *dst, CHAR *src) +{ + RtlInitAnsiString(dst, src); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisInitUnicodeString,2) + (struct unicode_string *dest, const wchar_t *src) +{ + RtlInitUnicodeString(dest, src); + return; +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisAnsiStringToUnicodeString,2) + (struct unicode_string *dst, struct ansi_string *src) +{ + ENTER2(""); + if (dst == NULL || src == NULL) + EXIT2(return NDIS_STATUS_FAILURE); + if (RtlAnsiStringToUnicodeString(dst, src, FALSE) == STATUS_SUCCESS) + return NDIS_STATUS_SUCCESS; + else + return NDIS_STATUS_FAILURE; +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisUnicodeStringToAnsiString,2) + (struct ansi_string *dst, struct unicode_string *src) +{ + ENTER2(""); + if (dst == NULL || src == NULL) + EXIT2(return NDIS_STATUS_FAILURE); + if (RtlUnicodeStringToAnsiString(dst, src, FALSE) == STATUS_SUCCESS) + return NDIS_STATUS_SUCCESS; + else + return NDIS_STATUS_FAILURE; +} + +wstdcall NTSTATUS WIN_FUNC(NdisUpcaseUnicodeString,2) + (struct unicode_string *dst, struct unicode_string *src) +{ + EXIT2(return RtlUpcaseUnicodeString(dst, src, FALSE)); +} + +wstdcall void WIN_FUNC(NdisMSetAttributesEx,5) + (struct ndis_mp_block *nmb, void *mp_ctx, + UINT hangcheck_interval, UINT attributes, ULONG adaptertype) +{ + struct ndis_device *wnd; + + ENTER1("%p, %p, %d, %08x, %d", nmb, mp_ctx, hangcheck_interval, + attributes, adaptertype); + wnd = nmb->wnd; + nmb->mp_ctx = mp_ctx; + wnd->attributes = attributes; + + if ((attributes & NDIS_ATTRIBUTE_BUS_MASTER) && + wrap_is_pci_bus(wnd->wd->dev_bus)) + pci_set_master(wnd->wd->pci.pdev); + + if (hangcheck_interval > 0) + wnd->hangcheck_interval = 2 * hangcheck_interval * HZ; + else + wnd->hangcheck_interval = 2 * HZ; + + EXIT1(return); +} + +wstdcall ULONG WIN_FUNC(NdisReadPciSlotInformation,5) + (struct ndis_mp_block *nmb, ULONG slot, + ULONG offset, char *buf, ULONG len) +{ + struct wrap_device *wd = nmb->wnd->wd; + ULONG i; + for (i = 0; i < len; i++) + if (pci_read_config_byte(wd->pci.pdev, offset + i, &buf[i]) != + PCIBIOS_SUCCESSFUL) + break; + DBG_BLOCK(2) { + if (i != len) + WARNING("%u, %u", i, len); + } + return i; +} + +wstdcall ULONG WIN_FUNC(NdisImmediateReadPciSlotInformation,5) + (struct ndis_mp_block *nmb, ULONG slot, + ULONG offset, char *buf, ULONG len) +{ + return NdisReadPciSlotInformation(nmb, slot, offset, buf, len); +} + +wstdcall ULONG WIN_FUNC(NdisWritePciSlotInformation,5) + (struct ndis_mp_block *nmb, ULONG slot, + ULONG offset, char *buf, ULONG len) +{ + struct wrap_device *wd = nmb->wnd->wd; + ULONG i; + for (i = 0; i < len; i++) + if (pci_write_config_byte(wd->pci.pdev, offset + i, buf[i]) != + PCIBIOS_SUCCESSFUL) + break; + DBG_BLOCK(2) { + if (i != len) + WARNING("%u, %u", i, len); + } + return i; +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMRegisterIoPortRange,4) + (void **virt, struct ndis_mp_block *nmb, UINT start, UINT len) +{ + ENTER3("%08x %08x", start, len); + *virt = (void *)(ULONG_PTR)start; + return NDIS_STATUS_SUCCESS; +} + +wstdcall void WIN_FUNC(NdisMDeregisterIoPortRange,4) + (struct ndis_mp_block *nmb, UINT start, UINT len, void* virt) +{ + ENTER1("%08x %08x", start, len); +} + +wstdcall void WIN_FUNC(NdisReadPortUchar,3) + (struct ndis_mp_block *nmb, ULONG port, char *data) +{ + *data = inb(port); +} + +wstdcall void WIN_FUNC(NdisImmediateReadPortUchar,3) + (struct ndis_mp_block *nmb, ULONG port, char *data) +{ + *data = inb(port); +} + +wstdcall void WIN_FUNC(NdisWritePortUchar,3) + (struct ndis_mp_block *nmb, ULONG port, char data) +{ + outb(data, port); +} + +wstdcall void WIN_FUNC(NdisImmediateWritePortUchar,3) + (struct ndis_mp_block *nmb, ULONG port, char data) +{ + outb(data, port); +} + +wstdcall void WIN_FUNC(NdisMQueryAdapterResources,4) + (NDIS_STATUS *status, struct ndis_mp_block *nmb, + NDIS_RESOURCE_LIST *resource_list, UINT *size) +{ + struct ndis_device *wnd = nmb->wnd; + NDIS_RESOURCE_LIST *list; + UINT resource_length; + + list = &wnd->wd->resource_list->list->partial_resource_list; + resource_length = sizeof(struct cm_partial_resource_list) + + sizeof(struct cm_partial_resource_descriptor) * + (list->count - 1); + TRACE2("%p, %p,%d (%d), %p %d %d", wnd, resource_list, *size, + resource_length, &list->partial_descriptors[list->count-1], + list->partial_descriptors[list->count-1].u.interrupt.level, + list->partial_descriptors[list->count-1].u.interrupt.vector); + if (*size < sizeof(*list)) { + *size = resource_length; + *status = NDIS_STATUS_BUFFER_TOO_SHORT; + } else { + ULONG count; + if (*size >= resource_length) { + *size = resource_length; + count = list->count; + } else { + UINT n = sizeof(*list); + count = 1; + while (count++ < list->count && n < *size) + n += sizeof(list->partial_descriptors); + *size = n; + } + memcpy(resource_list, list, *size); + resource_list->count = count; + *status = NDIS_STATUS_SUCCESS; + } + EXIT2(return); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMPciAssignResources,3) + (struct ndis_mp_block *nmb, ULONG slot_number, + NDIS_RESOURCE_LIST **resources) +{ + struct ndis_device *wnd = nmb->wnd; + + ENTER2("%p, %p", wnd, wnd->wd->resource_list); + *resources = &wnd->wd->resource_list->list->partial_resource_list; + EXIT2(return NDIS_STATUS_SUCCESS); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMMapIoSpace,4) + (void __iomem **virt, struct ndis_mp_block *nmb, + NDIS_PHY_ADDRESS phy_addr, UINT len) +{ + struct ndis_device *wnd = nmb->wnd; + + ENTER2("%Lx, %d", phy_addr, len); + *virt = MmMapIoSpace(phy_addr, len, MmCached); + if (*virt == NULL) { + ERROR("ioremap failed"); + EXIT2(return NDIS_STATUS_FAILURE); + } + wnd->mem_start = phy_addr; + wnd->mem_end = phy_addr + len; + TRACE2("%p", *virt); + EXIT2(return NDIS_STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(NdisMUnmapIoSpace,3) + (struct ndis_mp_block *nmb, void __iomem *virt, UINT len) +{ + ENTER2("%p, %d", virt, len); + MmUnmapIoSpace(virt, len); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisAllocateSpinLock,1) + (struct ndis_spinlock *lock) +{ + TRACE4("lock %p, %p", lock, &lock->klock); + KeInitializeSpinLock(&lock->klock); + lock->irql = PASSIVE_LEVEL; + return; +} + +wstdcall void WIN_FUNC(NdisFreeSpinLock,1) + (struct ndis_spinlock *lock) +{ + TRACE4("lock %p, %p", lock, &lock->klock); + return; +} + +wstdcall void WIN_FUNC(NdisAcquireSpinLock,1) + (struct ndis_spinlock *lock) +{ + ENTER6("lock %p, %p", lock, &lock->klock); +// assert_irql(_irql_ <= DISPATCH_LEVEL); + lock->irql = nt_spin_lock_irql(&lock->klock, DISPATCH_LEVEL); + return; +} + +wstdcall void WIN_FUNC(NdisReleaseSpinLock,1) + (struct ndis_spinlock *lock) +{ + ENTER6("lock %p, %p", lock, &lock->klock); +// assert_irql(_irql_ == DISPATCH_LEVEL); + nt_spin_unlock_irql(&lock->klock, lock->irql); + return; +} + +wstdcall void WIN_FUNC(NdisDprAcquireSpinLock,1) + (struct ndis_spinlock *lock) +{ + ENTER6("lock %p", &lock->klock); +// assert_irql(_irql_ == DISPATCH_LEVEL); + nt_spin_lock(&lock->klock); + return; +} + +wstdcall void WIN_FUNC(NdisDprReleaseSpinLock,1) + (struct ndis_spinlock *lock) +{ + ENTER6("lock %p", &lock->klock); +// assert_irql(_irql_ == DISPATCH_LEVEL); + nt_spin_unlock(&lock->klock); + return; +} + +wstdcall void WIN_FUNC(NdisInitializeReadWriteLock,1) + (struct ndis_rw_lock *rw_lock) +{ + ENTER3("%p", rw_lock); + memset(rw_lock, 0, sizeof(*rw_lock)); + KeInitializeSpinLock(&rw_lock->klock); + return; +} + +/* read/write locks are implemented in a rather simplisitic way - we + * should probably use Linux's rw_lock implementation */ + +wstdcall void WIN_FUNC(NdisAcquireReadWriteLock,3) + (struct ndis_rw_lock *rw_lock, BOOLEAN write, + struct lock_state *lock_state) +{ + if (write) { + while (1) { + if (cmpxchg(&rw_lock->count, 0, -1) == 0) + return; + while (rw_lock->count) + cpu_relax(); + } + return; + } + while (1) { + typeof(rw_lock->count) count; + while ((count = rw_lock->count) < 0) + cpu_relax(); + if (cmpxchg(&rw_lock->count, count, count + 1) == count) + return; + } +} + +wstdcall void WIN_FUNC(NdisReleaseReadWriteLock,2) + (struct ndis_rw_lock *rw_lock, struct lock_state *lock_state) +{ + if (rw_lock->count > 0) + pre_atomic_add(rw_lock->count, -1); + else if (rw_lock->count == -1) + rw_lock->count = 0; + else + WARNING("invalid state: %d", rw_lock->count); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMAllocateMapRegisters,5) + (struct ndis_mp_block *nmb, UINT dmachan, + NDIS_DMA_SIZE dmasize, ULONG basemap, ULONG max_buf_size) +{ + struct ndis_device *wnd = nmb->wnd; + + ENTER2("%p, %d %d %d %d", wnd, dmachan, dmasize, basemap, max_buf_size); + if (wnd->dma_map_count > 0) { + WARNING("%s: map registers already allocated: %u", + wnd->net_dev->name, wnd->dma_map_count); + EXIT2(return NDIS_STATUS_RESOURCES); + } + if (dmasize == NDIS_DMA_24BITS) { + if (pci_set_dma_mask(wnd->wd->pci.pdev, DMA_BIT_MASK(24)) || + pci_set_consistent_dma_mask(wnd->wd->pci.pdev, + DMA_BIT_MASK(24))) + WARNING("setting dma mask failed"); + } else if (dmasize == NDIS_DMA_32BITS) { + /* consistent dma is in low 32-bits by default */ + if (pci_set_dma_mask(wnd->wd->pci.pdev, DMA_BIT_MASK(32))) + WARNING("setting dma mask failed"); +#ifdef CONFIG_X86_64 + } else if (dmasize == NDIS_DMA_64BITS) { + if (pci_set_dma_mask(wnd->wd->pci.pdev, DMA_BIT_MASK(64)) || + pci_set_consistent_dma_mask(wnd->wd->pci.pdev, + DMA_BIT_MASK(64))) + WARNING("setting dma mask failed"); + else + wnd->net_dev->features |= NETIF_F_HIGHDMA; +#endif + } + /* since memory for buffer is allocated with kmalloc, buffer + * is physically contiguous, so entire map will fit in one + * register */ + if (basemap > 64) { + WARNING("Windows driver %s requesting too many (%u) " + "map registers", wnd->wd->driver->name, basemap); + /* As per NDIS, NDIS_STATUS_RESOURCES should be + * returned, but with that Atheros PCI driver fails - + * for now tolerate it */ +// EXIT2(return NDIS_STATUS_RESOURCES); + } + + wnd->dma_map_addr = kmalloc(basemap * sizeof(*(wnd->dma_map_addr)), + GFP_KERNEL); + if (!wnd->dma_map_addr) + EXIT2(return NDIS_STATUS_RESOURCES); + memset(wnd->dma_map_addr, 0, basemap * sizeof(*(wnd->dma_map_addr))); + wnd->dma_map_count = basemap; + TRACE2("%u", wnd->dma_map_count); + EXIT2(return NDIS_STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(NdisMFreeMapRegisters,1) + (struct ndis_mp_block *nmb) +{ + struct ndis_device *wnd = nmb->wnd; + int i; + + ENTER2("wnd: %p", wnd); + if (wnd->dma_map_addr) { + for (i = 0; i < wnd->dma_map_count; i++) { + if (wnd->dma_map_addr[i]) + WARNING("%s: dma addr %p not freed by " + "Windows driver", wnd->net_dev->name, + (void *)wnd->dma_map_addr[i]); + } + kfree(wnd->dma_map_addr); + wnd->dma_map_addr = NULL; + } else + WARNING("map registers already freed?"); + wnd->dma_map_count = 0; + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisMStartBufferPhysicalMapping,6) + (struct ndis_mp_block *nmb, ndis_buffer *buf, + ULONG index, BOOLEAN write_to_dev, + struct ndis_phy_addr_unit *phy_addr_array, UINT *array_size) +{ + struct ndis_device *wnd = nmb->wnd; + + ENTER3("%p, %p, %u, %u", wnd, buf, index, wnd->dma_map_count); + if (unlikely(wnd->sg_dma_size || !write_to_dev || + index >= wnd->dma_map_count)) { + WARNING("invalid request: %d, %d, %d, %d", wnd->sg_dma_size, + write_to_dev, index, wnd->dma_map_count); + phy_addr_array[0].phy_addr = 0; + phy_addr_array[0].length = 0; + *array_size = 0; + return; + } + if (wnd->dma_map_addr[index]) { + TRACE2("buffer %p at %d is already mapped: %lx", buf, index, + (unsigned long)wnd->dma_map_addr[index]); +// *array_size = 1; + return; + } + TRACE3("%p, %p, %u", buf, MmGetSystemAddressForMdl(buf), + MmGetMdlByteCount(buf)); + DBG_BLOCK(4) { + dump_bytes(__func__, MmGetSystemAddressForMdl(buf), + MmGetMdlByteCount(buf)); + } + wnd->dma_map_addr[index] = + PCI_DMA_MAP_SINGLE(wnd->wd->pci.pdev, + MmGetSystemAddressForMdl(buf), + MmGetMdlByteCount(buf), PCI_DMA_TODEVICE); + phy_addr_array[0].phy_addr = wnd->dma_map_addr[index]; + phy_addr_array[0].length = MmGetMdlByteCount(buf); + TRACE4("%Lx, %d, %d", phy_addr_array[0].phy_addr, + phy_addr_array[0].length, index); + *array_size = 1; +} + +wstdcall void WIN_FUNC(NdisMCompleteBufferPhysicalMapping,3) + (struct ndis_mp_block *nmb, ndis_buffer *buf, ULONG index) +{ + struct ndis_device *wnd = nmb->wnd; + + ENTER3("%p, %p %u (%u)", wnd, buf, index, wnd->dma_map_count); + + if (unlikely(wnd->sg_dma_size)) + WARNING("buffer %p may have been unmapped already", buf); + if (index >= wnd->dma_map_count) { + ERROR("invalid map register (%u >= %u)", + index, wnd->dma_map_count); + return; + } + TRACE4("%lx", (unsigned long)wnd->dma_map_addr[index]); + if (wnd->dma_map_addr[index]) { + PCI_DMA_UNMAP_SINGLE(wnd->wd->pci.pdev, wnd->dma_map_addr[index], + MmGetMdlByteCount(buf), PCI_DMA_TODEVICE); + wnd->dma_map_addr[index] = 0; + } else + WARNING("map registers at %u not used", index); +} + +wstdcall void WIN_FUNC(NdisMAllocateSharedMemory,5) + (struct ndis_mp_block *nmb, ULONG size, + BOOLEAN cached, void **virt, NDIS_PHY_ADDRESS *phys) +{ + dma_addr_t dma_addr; + struct wrap_device *wd = nmb->wnd->wd; + + ENTER3("size: %u, cached: %d", size, cached); + *virt = PCI_DMA_ALLOC_COHERENT(wd->pci.pdev, size, &dma_addr); + if (*virt) + *phys = dma_addr; + else + WARNING("couldn't allocate %d bytes of %scached DMA memory", + size, cached ? "" : "un-"); + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisMFreeSharedMemory,5) + (struct ndis_mp_block *nmb, ULONG size, BOOLEAN cached, + void *virt, NDIS_PHY_ADDRESS addr) +{ + struct wrap_device *wd = nmb->wnd->wd; + ENTER3("%p, %Lx, %u", virt, addr, size); + PCI_DMA_FREE_COHERENT(wd->pci.pdev, size, virt, addr); + EXIT3(return); +} + +wstdcall void alloc_shared_memory_async(void *arg1, void *arg2) +{ + struct ndis_device *wnd; + struct alloc_shared_mem *alloc_shared_mem; + struct miniport *mp; + void *virt; + NDIS_PHY_ADDRESS phys; + KIRQL irql; + + wnd = arg1; + alloc_shared_mem = arg2; + mp = &wnd->wd->driver->ndis_driver->mp; + NdisMAllocateSharedMemory(wnd->nmb, alloc_shared_mem->size, + alloc_shared_mem->cached, &virt, &phys); + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + LIN2WIN5(mp->alloc_complete, wnd->nmb, virt, + &phys, alloc_shared_mem->size, alloc_shared_mem->ctx); + serialize_unlock_irql(wnd, irql); + kfree(alloc_shared_mem); +} +WIN_FUNC_DECL(alloc_shared_memory_async,2) + +wstdcall NDIS_STATUS WIN_FUNC(NdisMAllocateSharedMemoryAsync,4) + (struct ndis_mp_block *nmb, ULONG size, BOOLEAN cached, void *ctx) +{ + struct ndis_device *wnd = nmb->wnd; + struct alloc_shared_mem *alloc_shared_mem; + + ENTER3("wnd: %p", wnd); + alloc_shared_mem = kmalloc(sizeof(*alloc_shared_mem), irql_gfp()); + if (!alloc_shared_mem) { + WARNING("couldn't allocate memory"); + return NDIS_STATUS_FAILURE; + } + + alloc_shared_mem->size = size; + alloc_shared_mem->cached = cached; + alloc_shared_mem->ctx = ctx; + if (schedule_ntos_work_item(WIN_FUNC_PTR(alloc_shared_memory_async,2), + wnd, alloc_shared_mem)) + EXIT3(return NDIS_STATUS_FAILURE); + EXIT3(return NDIS_STATUS_PENDING); +} + +/* Some drivers allocate NDIS_BUFFER (aka MDL) very often; instead of + * allocating and freeing with kernel functions, we chain them into + * ndis_buffer_pool. When an MDL is freed, it is added to the list of + * free MDLs. When allocated, we first check if there is one in free + * list and if so just return it; otherwise, we allocate a new one and + * return that. This reduces memory fragmentation. Windows DDK says + * that the driver itself shouldn't check what is returned in + * pool_handle, presumably because buffer pools are not used in + * XP. However, as long as driver follows rest of the semantics - that + * it should indicate maximum number of MDLs used with num_descr and + * pass the same pool_handle in other buffer functions, this should + * work. Sadly, though, NdisFreeBuffer doesn't pass the pool_handle, + * so we use 'process' field of MDL to store pool_handle. */ + +wstdcall void WIN_FUNC(NdisAllocateBufferPool,3) + (NDIS_STATUS *status, struct ndis_buffer_pool **pool_handle, + UINT num_descr) +{ + struct ndis_buffer_pool *pool; + + ENTER1("buffers: %d", num_descr); + pool = kmalloc(sizeof(*pool), irql_gfp()); + if (!pool) { + *status = NDIS_STATUS_RESOURCES; + EXIT3(return); + } + spin_lock_init(&pool->lock); + pool->max_descr = num_descr; + pool->num_allocated_descr = 0; + pool->free_descr = NULL; + *pool_handle = pool; + *status = NDIS_STATUS_SUCCESS; + TRACE1("pool: %p, num_descr: %d", pool, num_descr); + EXIT1(return); +} + +wstdcall void WIN_FUNC(NdisAllocateBuffer,5) + (NDIS_STATUS *status, ndis_buffer **buffer, + struct ndis_buffer_pool *pool, void *virt, UINT length) +{ + ndis_buffer *descr; + + ENTER4("pool: %p (%d)", pool, pool->num_allocated_descr); + /* NDIS drivers should call this at DISPATCH_LEVEL, but + * alloc_tx_packet calls at SOFT_IRQL */ + assert_irql(_irql_ <= SOFT_LEVEL); + if (!pool) { + *status = NDIS_STATUS_FAILURE; + *buffer = NULL; + EXIT4(return); + } + spin_lock_bh(&pool->lock); + if ((descr = pool->free_descr)) + pool->free_descr = descr->next; + spin_unlock_bh(&pool->lock); + if (descr) { + typeof(descr->flags) flags; + flags = descr->flags; + memset(descr, 0, sizeof(*descr)); + MmInitializeMdl(descr, virt, length); + if (flags & MDL_CACHE_ALLOCATED) + descr->flags |= MDL_CACHE_ALLOCATED; + } else { + if (pool->num_allocated_descr > pool->max_descr) { + TRACE2("pool %p is full: %d(%d)", pool, + pool->num_allocated_descr, pool->max_descr); +#ifndef ALLOW_POOL_OVERFLOW + *status = NDIS_STATUS_FAILURE; + *buffer = NULL; + return; +#endif + } + descr = allocate_init_mdl(virt, length); + if (!descr) { + WARNING("couldn't allocate buffer"); + *status = NDIS_STATUS_FAILURE; + *buffer = NULL; + EXIT4(return); + } + TRACE4("buffer %p for %p, %d", descr, virt, length); + atomic_inc_var(pool->num_allocated_descr); + } + /* TODO: make sure this mdl can map given buffer */ + MmBuildMdlForNonPagedPool(descr); +// descr->flags |= MDL_ALLOCATED_FIXED_SIZE | +// MDL_MAPPED_TO_SYSTEM_VA | MDL_PAGES_LOCKED; + descr->pool = pool; + *buffer = descr; + *status = NDIS_STATUS_SUCCESS; + TRACE4("buffer: %p", descr); + EXIT4(return); +} + +wstdcall void WIN_FUNC(NdisFreeBuffer,1) + (ndis_buffer *buffer) +{ + struct ndis_buffer_pool *pool; + + ENTER4("%p", buffer); + if (!buffer || !buffer->pool) { + ERROR("invalid buffer"); + EXIT4(return); + } + pool = buffer->pool; + if (pool->num_allocated_descr > MAX_ALLOCATED_NDIS_BUFFERS) { + /* NB NB NB: set mdl's 'pool' field to NULL before + * calling free_mdl; otherwise free_mdl calls + * NdisFreeBuffer back */ + atomic_dec_var(pool->num_allocated_descr); + buffer->pool = NULL; + free_mdl(buffer); + } else { + spin_lock_bh(&pool->lock); + buffer->next = pool->free_descr; + pool->free_descr = buffer; + spin_unlock_bh(&pool->lock); + } + EXIT4(return); +} + +wstdcall void WIN_FUNC(NdisFreeBufferPool,1) + (struct ndis_buffer_pool *pool) +{ + ndis_buffer *cur, *next; + + TRACE3("pool: %p", pool); + if (!pool) { + WARNING("invalid pool"); + EXIT3(return); + } + spin_lock_bh(&pool->lock); + cur = pool->free_descr; + while (cur) { + next = cur->next; + cur->pool = NULL; + free_mdl(cur); + cur = next; + } + spin_unlock_bh(&pool->lock); + kfree(pool); + pool = NULL; + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisAdjustBufferLength,2) + (ndis_buffer *buffer, UINT length) +{ + ENTER4("%p, %d", buffer, length); + buffer->bytecount = length; +} + +wstdcall void WIN_FUNC(NdisQueryBuffer,3) + (ndis_buffer *buffer, void **virt, UINT *length) +{ + ENTER4("buffer: %p", buffer); + if (virt) + *virt = MmGetSystemAddressForMdl(buffer); + *length = MmGetMdlByteCount(buffer); + TRACE4("%p, %u", virt? *virt : NULL, *length); + return; +} + +wstdcall void WIN_FUNC(NdisQueryBufferSafe,4) + (ndis_buffer *buffer, void **virt, UINT *length, + enum mm_page_priority priority) +{ + ENTER4("%p, %p, %p, %d", buffer, virt, length, priority); + if (virt) + *virt = MmGetSystemAddressForMdlSafe(buffer, priority); + *length = MmGetMdlByteCount(buffer); + TRACE4("%p, %u", virt? *virt : NULL, *length); +} + +wstdcall void *WIN_FUNC(NdisBufferVirtualAddress,1) + (ndis_buffer *buffer) +{ + ENTER3("%p", buffer); + return MmGetSystemAddressForMdl(buffer); +} + +wstdcall ULONG WIN_FUNC(NdisBufferLength,1) + (ndis_buffer *buffer) +{ + ENTER3("%p", buffer); + return MmGetMdlByteCount(buffer); +} + +wstdcall void WIN_FUNC(NdisQueryBufferOffset,3) + (ndis_buffer *buffer, UINT *offset, UINT *length) +{ + ENTER3("%p", buffer); + *offset = MmGetMdlByteOffset(buffer); + *length = MmGetMdlByteCount(buffer); + TRACE3("%d, %d", *offset, *length); +} + +wstdcall void WIN_FUNC(NdisUnchainBufferAtBack,2) + (struct ndis_packet *packet, ndis_buffer **buffer) +{ + ndis_buffer *b, *btail; + + ENTER3("%p", packet); + b = packet->private.buffer_head; + if (!b) { + /* no buffer in packet */ + *buffer = NULL; + EXIT3(return); + } + btail = packet->private.buffer_tail; + *buffer = btail; + if (b == btail) { + /* one buffer in packet */ + packet->private.buffer_head = NULL; + packet->private.buffer_tail = NULL; + } else { + while (b->next != btail) + b = b->next; + packet->private.buffer_tail = b; + b->next = NULL; + } + packet->private.valid_counts = FALSE; + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisUnchainBufferAtFront,2) + (struct ndis_packet *packet, ndis_buffer **buffer) +{ + ENTER3("%p", packet); + if (packet->private.buffer_head == NULL) { + /* no buffer in packet */ + *buffer = NULL; + EXIT3(return); + } + + *buffer = packet->private.buffer_head; + if (packet->private.buffer_head == packet->private.buffer_tail) { + /* one buffer in packet */ + packet->private.buffer_head = NULL; + packet->private.buffer_tail = NULL; + } else + packet->private.buffer_head = (*buffer)->next; + + packet->private.valid_counts = FALSE; + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisGetFirstBufferFromPacketSafe,6) + (struct ndis_packet *packet, ndis_buffer **first_buffer, + void **first_buffer_va, UINT *first_buffer_length, + UINT *total_buffer_length, enum mm_page_priority priority) +{ + ndis_buffer *b = packet->private.buffer_head; + + ENTER3("%p(%p)", packet, b); + *first_buffer = b; + if (b) { + *first_buffer_va = MmGetSystemAddressForMdlSafe(b, priority); + *first_buffer_length = *total_buffer_length = + MmGetMdlByteCount(b); + for (b = b->next; b; b = b->next) + *total_buffer_length += MmGetMdlByteCount(b); + } else { + *first_buffer_va = NULL; + *first_buffer_length = 0; + *total_buffer_length = 0; + } + TRACE3("%p, %d, %d", *first_buffer_va, *first_buffer_length, + *total_buffer_length); + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisGetFirstBufferFromPacket,6) + (struct ndis_packet *packet, ndis_buffer **first_buffer, + void **first_buffer_va, UINT *first_buffer_length, + UINT *total_buffer_length, enum mm_page_priority priority) +{ + NdisGetFirstBufferFromPacketSafe(packet, first_buffer, + first_buffer_va, first_buffer_length, + total_buffer_length, + NormalPagePriority); +} + +wstdcall void WIN_FUNC(NdisAllocatePacketPoolEx,5) + (NDIS_STATUS *status, struct ndis_packet_pool **pool_handle, + UINT num_descr, UINT overflowsize, UINT proto_rsvd_length) +{ + struct ndis_packet_pool *pool; + + ENTER3("buffers: %d, length: %d", num_descr, proto_rsvd_length); + pool = kzalloc(sizeof(*pool), irql_gfp()); + if (!pool) { + *status = NDIS_STATUS_RESOURCES; + EXIT3(return); + } + spin_lock_init(&pool->lock); + pool->max_descr = num_descr; + pool->num_allocated_descr = 0; + pool->num_used_descr = 0; + pool->free_descr = NULL; + pool->proto_rsvd_length = proto_rsvd_length; + *pool_handle = pool; + *status = NDIS_STATUS_SUCCESS; + TRACE3("pool: %p", pool); + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisAllocatePacketPool,4) + (NDIS_STATUS *status, struct ndis_packet_pool **pool_handle, + UINT num_descr, UINT proto_rsvd_length) +{ + NdisAllocatePacketPoolEx(status, pool_handle, num_descr, 0, + proto_rsvd_length); + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisFreePacketPool,1) + (struct ndis_packet_pool *pool) +{ + struct ndis_packet *packet, *next; + + ENTER3("pool: %p", pool); + if (!pool) { + WARNING("invalid pool"); + EXIT3(return); + } + spin_lock_bh(&pool->lock); + packet = pool->free_descr; + while (packet) { + next = (struct ndis_packet *)packet->reserved[0]; + kfree(packet); + packet = next; + } + pool->num_allocated_descr = 0; + pool->num_used_descr = 0; + pool->free_descr = NULL; + spin_unlock_bh(&pool->lock); + kfree(pool); + EXIT3(return); +} + +wstdcall UINT WIN_FUNC(NdisPacketPoolUsage,1) + (struct ndis_packet_pool *pool) +{ + EXIT4(return pool->num_used_descr); +} + +wstdcall void WIN_FUNC(NdisAllocatePacket,3) + (NDIS_STATUS *status, struct ndis_packet **ndis_packet, + struct ndis_packet_pool *pool) +{ + struct ndis_packet *packet; + int packet_length; + + ENTER4("pool: %p", pool); + if (!pool) { + *status = NDIS_STATUS_RESOURCES; + *ndis_packet = NULL; + EXIT4(return); + } + assert_irql(_irql_ <= SOFT_LEVEL); + if (pool->num_used_descr > pool->max_descr) { + TRACE3("pool %p is full: %d(%d)", pool, + pool->num_used_descr, pool->max_descr); +#ifndef ALLOW_POOL_OVERFLOW + *status = NDIS_STATUS_RESOURCES; + *ndis_packet = NULL; + return; +#endif + } + /* packet has space for 1 byte in protocol_reserved field */ + packet_length = sizeof(*packet) - 1 + pool->proto_rsvd_length + + sizeof(struct ndis_packet_oob_data); + spin_lock_bh(&pool->lock); + if ((packet = pool->free_descr)) + pool->free_descr = (void *)packet->reserved[0]; + spin_unlock_bh(&pool->lock); + if (!packet) { + packet = kmalloc(packet_length, irql_gfp()); + if (!packet) { + WARNING("couldn't allocate packet"); + *status = NDIS_STATUS_RESOURCES; + *ndis_packet = NULL; + return; + } + atomic_inc_var(pool->num_allocated_descr); + } + TRACE4("%p, %p", pool, packet); + atomic_inc_var(pool->num_used_descr); + memset(packet, 0, packet_length); + packet->private.oob_offset = + packet_length - sizeof(struct ndis_packet_oob_data); + packet->private.packet_flags = fPACKET_ALLOCATED_BY_NDIS; + packet->private.pool = pool; + *ndis_packet = packet; + *status = NDIS_STATUS_SUCCESS; + EXIT4(return); +} + +wstdcall void WIN_FUNC(NdisDprAllocatePacket,3) + (NDIS_STATUS *status, struct ndis_packet **packet, + struct ndis_packet_pool *pool) +{ + NdisAllocatePacket(status, packet, pool); +} + +wstdcall void WIN_FUNC(NdisFreePacket,1) + (struct ndis_packet *packet) +{ + struct ndis_packet_pool *pool; + + ENTER4("%p, %p", packet, packet->private.pool); + pool = packet->private.pool; + if (!pool) { + ERROR("invalid pool %p", packet); + EXIT4(return); + } + assert((int)pool->num_used_descr > 0); + atomic_dec_var(pool->num_used_descr); + if (packet->reserved[1]) { + TRACE3("%p, %p", packet, (void *)packet->reserved[1]); + kfree((void *)packet->reserved[1]); + packet->reserved[1] = 0; + } + if (pool->num_allocated_descr > MAX_ALLOCATED_NDIS_PACKETS) { + TRACE3("%p", pool); + atomic_dec_var(pool->num_allocated_descr); + kfree(packet); + } else { + TRACE4("%p, %p, %p", pool, packet, pool->free_descr); + spin_lock_bh(&pool->lock); + packet->reserved[0] = + (typeof(packet->reserved[0]))pool->free_descr; + pool->free_descr = packet; + spin_unlock_bh(&pool->lock); + } + EXIT4(return); +} + +wstdcall struct ndis_packet_stack *WIN_FUNC(NdisIMGetCurrentPacketStack,2) + (struct ndis_packet *packet, BOOLEAN *stacks_remain) +{ + struct ndis_packet_stack *stack; + + if (!packet->reserved[1]) { + stack = kzalloc(2 * sizeof(*stack), irql_gfp()); + TRACE3("%p, %p", packet, stack); + packet->reserved[1] = (typeof(packet->reserved[1]))stack; + } else { + stack = (void *)packet->reserved[1];; + if (xchg(&stack->ndis_reserved[0], 1)) { + stack++; + if (xchg(&stack->ndis_reserved[0], 1)) + stack = NULL; + } + TRACE3("%p", stack); + } + if (stack) + *stacks_remain = TRUE; + else + *stacks_remain = FALSE; + + EXIT3(return stack); +} + +wstdcall void WIN_FUNC(NdisCopyFromPacketToPacketSafe,7) + (struct ndis_packet *dst, UINT dst_offset, UINT num_to_copy, + struct ndis_packet *src, UINT src_offset, UINT *num_copied, + enum mm_page_priority priority) +{ + UINT dst_n, src_n, n, left; + ndis_buffer *dst_buf; + ndis_buffer *src_buf; + + ENTER4(""); + if (!dst || !src) { + *num_copied = 0; + EXIT4(return); + } + + dst_buf = dst->private.buffer_head; + src_buf = src->private.buffer_head; + + if (!dst_buf || !src_buf) { + *num_copied = 0; + EXIT4(return); + } + dst_n = MmGetMdlByteCount(dst_buf) - dst_offset; + src_n = MmGetMdlByteCount(src_buf) - src_offset; + + n = min(src_n, dst_n); + n = min(n, num_to_copy); + memcpy(MmGetSystemAddressForMdl(dst_buf) + dst_offset, + MmGetSystemAddressForMdl(src_buf) + src_offset, n); + + left = num_to_copy - n; + while (left > 0) { + src_offset += n; + dst_offset += n; + dst_n -= n; + src_n -= n; + if (dst_n == 0) { + dst_buf = dst_buf->next; + if (!dst_buf) + break; + dst_n = MmGetMdlByteCount(dst_buf); + dst_offset = 0; + } + if (src_n == 0) { + src_buf = src_buf->next; + if (!src_buf) + break; + src_n = MmGetMdlByteCount(src_buf); + src_offset = 0; + } + + n = min(src_n, dst_n); + n = min(n, left); + memcpy(MmGetSystemAddressForMdl(dst_buf) + dst_offset, + MmGetSystemAddressForMdl(src_buf) + src_offset, n); + left -= n; + } + *num_copied = num_to_copy - left; + EXIT4(return); +} + +wstdcall void WIN_FUNC(NdisCopyFromPacketToPacket,6) + (struct ndis_packet *dst, UINT dst_offset, UINT num_to_copy, + struct ndis_packet *src, UINT src_offset, UINT *num_copied) +{ + NdisCopyFromPacketToPacketSafe(dst, dst_offset, num_to_copy, + src, src_offset, num_copied, + NormalPagePriority); + return; +} + +wstdcall void WIN_FUNC(NdisIMCopySendPerPacketInfo,2) + (struct ndis_packet *dst, struct ndis_packet *src) +{ + struct ndis_packet_oob_data *dst_oob, *src_oob; + dst_oob = NDIS_PACKET_OOB_DATA(dst); + src_oob = NDIS_PACKET_OOB_DATA(src); + memcpy(&dst_oob->ext, &src_oob->ext, sizeof(dst_oob->ext)); + return; +} + +wstdcall void WIN_FUNC(NdisSend,3) + (NDIS_STATUS *status, struct ndis_mp_block *nmb, + struct ndis_packet *packet) +{ + struct ndis_device *wnd = nmb->wnd; + struct miniport *mp; + KIRQL irql; + + mp = &wnd->wd->driver->ndis_driver->mp; + if (mp->send_packets) { + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + LIN2WIN3(mp->send_packets, wnd->nmb->mp_ctx, &packet, 1); + serialize_unlock_irql(wnd, irql); + if (deserialized_driver(wnd)) + *status = NDIS_STATUS_PENDING; + else { + struct ndis_packet_oob_data *oob_data; + oob_data = NDIS_PACKET_OOB_DATA(packet); + *status = oob_data->status; + switch (*status) { + case NDIS_STATUS_SUCCESS: + free_tx_packet(wnd, packet, *status); + break; + case NDIS_STATUS_PENDING: + break; + case NDIS_STATUS_RESOURCES: + wnd->tx_ok = 0; + break; + case NDIS_STATUS_FAILURE: + default: + free_tx_packet(wnd, packet, *status); + break; + } + } + } else { + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + *status = LIN2WIN3(mp->send, wnd->nmb->mp_ctx, packet, 0); + serialize_unlock_irql(wnd, irql); + switch (*status) { + case NDIS_STATUS_SUCCESS: + free_tx_packet(wnd, packet, *status); + break; + case NDIS_STATUS_PENDING: + break; + case NDIS_STATUS_RESOURCES: + wnd->tx_ok = 0; + break; + case NDIS_STATUS_FAILURE: + default: + free_tx_packet(wnd, packet, *status); + break; + } + } + EXIT3(return); +} + +/* called for serialized drivers only */ +wstdcall void mp_timer_dpc(struct kdpc *kdpc, void *ctx, void *arg1, void *arg2) +{ + struct ndis_mp_timer *timer; + struct ndis_mp_block *nmb; + + timer = ctx; + TIMERENTER("%p, %p, %p, %p", timer, timer->func, timer->ctx, timer->nmb); + assert_irql(_irql_ == DISPATCH_LEVEL); + nmb = timer->nmb; + serialize_lock(nmb->wnd); + LIN2WIN4(timer->func, NULL, timer->ctx, NULL, NULL); + serialize_unlock(nmb->wnd); + TIMEREXIT(return); +} +WIN_FUNC_DECL(mp_timer_dpc,4) + +wstdcall void WIN_FUNC(NdisMInitializeTimer,4) + (struct ndis_mp_timer *timer, struct ndis_mp_block *nmb, + DPC func, void *ctx) +{ + TIMERENTER("%p, %p, %p, %p", timer, func, ctx, nmb); + assert_irql(_irql_ == PASSIVE_LEVEL); + timer->func = func; + timer->ctx = ctx; + timer->nmb = nmb; + if (deserialized_driver(nmb->wnd)) + KeInitializeDpc(&timer->kdpc, func, ctx); + else + KeInitializeDpc(&timer->kdpc, WIN_FUNC_PTR(mp_timer_dpc,4), + timer); + wrap_init_timer(&timer->nt_timer, NotificationTimer, nmb); + TIMEREXIT(return); +} + +wstdcall void WIN_FUNC(NdisMSetPeriodicTimer,2) + (struct ndis_mp_timer *timer, UINT period_ms) +{ + unsigned long expires = MSEC_TO_HZ(period_ms); + + TIMERENTER("%p, %u, %ld", timer, period_ms, expires); + assert_irql(_irql_ <= DISPATCH_LEVEL); + wrap_set_timer(&timer->nt_timer, expires, expires, &timer->kdpc); + TIMEREXIT(return); +} + +wstdcall void WIN_FUNC(NdisMCancelTimer,2) + (struct ndis_mp_timer *timer, BOOLEAN *canceled) +{ + TIMERENTER("%p", timer); + assert_irql(_irql_ <= DISPATCH_LEVEL); + *canceled = KeCancelTimer(&timer->nt_timer); + TIMERTRACE("%d", *canceled); + return; +} + +wstdcall void WIN_FUNC(NdisInitializeTimer,3) + (struct ndis_timer *timer, void *func, void *ctx) +{ + TIMERENTER("%p, %p, %p", timer, func, ctx); + assert_irql(_irql_ == PASSIVE_LEVEL); + KeInitializeDpc(&timer->kdpc, func, ctx); + wrap_init_timer(&timer->nt_timer, NotificationTimer, NULL); + TIMEREXIT(return); +} + +/* NdisMSetTimer is a macro that calls NdisSetTimer with + * ndis_mp_timer typecast to ndis_timer */ + +wstdcall void WIN_FUNC(NdisSetTimer,2) + (struct ndis_timer *timer, UINT duetime_ms) +{ + unsigned long expires = MSEC_TO_HZ(duetime_ms); + + TIMERENTER("%p, %p, %u, %ld", timer, timer->nt_timer.wrap_timer, + duetime_ms, expires); + assert_irql(_irql_ <= DISPATCH_LEVEL); + wrap_set_timer(&timer->nt_timer, expires, 0, &timer->kdpc); + TIMEREXIT(return); +} + +wstdcall void WIN_FUNC(NdisCancelTimer,2) + (struct ndis_timer *timer, BOOLEAN *canceled) +{ + TIMERENTER("%p", timer); + assert_irql(_irql_ <= DISPATCH_LEVEL); + *canceled = KeCancelTimer(&timer->nt_timer); + TIMEREXIT(return); +} + +wstdcall void WIN_FUNC(NdisMRegisterAdapterShutdownHandler,3) + (struct ndis_mp_block *nmb, void *ctx, void *func) +{ + struct ndis_device *wnd = nmb->wnd; + ENTER1("%p", func); + wnd->wd->driver->ndis_driver->mp.shutdown = func; + wnd->shutdown_ctx = ctx; +} + +wstdcall void WIN_FUNC(NdisMDeregisterAdapterShutdownHandler,1) + (struct ndis_mp_block *nmb) +{ + struct ndis_device *wnd = nmb->wnd; + wnd->wd->driver->ndis_driver->mp.shutdown = NULL; + wnd->shutdown_ctx = NULL; +} + +/* TODO: rt61 (serialized) driver doesn't want MiniportEnableInterrupt + * to be called in irq handler, but mrv800c (deserialized) driver + * wants. NDIS is confusing about when to call MiniportEnableInterrupt + * For now, handle these cases with two separate irq handlers based on + * observation of these two drivers. However, it is likely not + * correct. */ +wstdcall void deserialized_irq_handler(struct kdpc *kdpc, void *ctx, + void *arg1, void *arg2) +{ + struct ndis_device *wnd = ctx; + ndis_interrupt_handler irq_handler = arg1; + struct miniport *mp = arg2; + + TRACE6("%p", irq_handler); + assert_irql(_irql_ == DISPATCH_LEVEL); + LIN2WIN1(irq_handler, wnd->nmb->mp_ctx); + if (mp->enable_interrupt) + LIN2WIN1(mp->enable_interrupt, wnd->nmb->mp_ctx); + EXIT6(return); +} +WIN_FUNC_DECL(deserialized_irq_handler,4) + +wstdcall void serialized_irq_handler(struct kdpc *kdpc, void *ctx, + void *arg1, void *arg2) +{ + struct ndis_device *wnd = ctx; + ndis_interrupt_handler irq_handler = arg1; + + TRACE6("%p, %p, %p", wnd, irq_handler, arg2); + assert_irql(_irql_ == DISPATCH_LEVEL); + serialize_lock(wnd); + LIN2WIN1(irq_handler, arg2); + serialize_unlock(wnd); + EXIT6(return); +} +WIN_FUNC_DECL(serialized_irq_handler,4) + +wstdcall BOOLEAN ndis_isr(struct kinterrupt *kinterrupt, void *ctx) +{ + struct ndis_mp_interrupt *mp_interrupt = ctx; + struct ndis_device *wnd = mp_interrupt->nmb->wnd; + BOOLEAN recognized = TRUE, queue_handler = TRUE; + + TRACE6("%p", wnd); + /* kernel may call ISR when registering interrupt, in + * the same context if DEBUG_SHIRQ is enabled */ + assert_irql(_irql_ == DIRQL || _irql_ == PASSIVE_LEVEL); + if (mp_interrupt->shared) + LIN2WIN3(mp_interrupt->isr, &recognized, &queue_handler, + wnd->nmb->mp_ctx); + else { + struct miniport *mp; + mp = &wnd->wd->driver->ndis_driver->mp; + LIN2WIN1(mp->disable_interrupt, wnd->nmb->mp_ctx); + /* it is not shared interrupt, so handler must be called */ + recognized = queue_handler = TRUE; + } + if (recognized) { + if (queue_handler) { + TRACE5("%p", &wnd->irq_kdpc); + queue_kdpc(&wnd->irq_kdpc); + } + EXIT6(return TRUE); + } + EXIT6(return FALSE); +} +WIN_FUNC_DECL(ndis_isr,2) + +wstdcall NDIS_STATUS WIN_FUNC(NdisMRegisterInterrupt,7) + (struct ndis_mp_interrupt *mp_interrupt, + struct ndis_mp_block *nmb, UINT vector, UINT level, + BOOLEAN req_isr, BOOLEAN shared, enum kinterrupt_mode mode) +{ + struct ndis_device *wnd = nmb->wnd; + struct miniport *mp; + + ENTER1("%p, vector:%d, level:%d, req_isr:%d, shared:%d, mode:%d", + mp_interrupt, vector, level, req_isr, shared, mode); + + mp = &wnd->wd->driver->ndis_driver->mp; + nt_spin_lock_init(&mp_interrupt->lock); + mp_interrupt->irq = vector; + mp_interrupt->isr = mp->isr; + mp_interrupt->mp_dpc = mp->handle_interrupt; + mp_interrupt->nmb = nmb; + mp_interrupt->req_isr = req_isr; + if (shared && !req_isr) + WARNING("shared but dynamic interrupt!"); + mp_interrupt->shared = shared; + wnd->mp_interrupt = mp_interrupt; + if (mp->enable_interrupt) + mp_interrupt->enable = TRUE; + else + mp_interrupt->enable = FALSE; + + if (deserialized_driver(wnd)) { + KeInitializeDpc(&wnd->irq_kdpc, + WIN_FUNC_PTR(deserialized_irq_handler,4), + nmb->wnd); + wnd->irq_kdpc.arg1 = mp->handle_interrupt; + wnd->irq_kdpc.arg2 = mp; + TRACE2("%p, %p, %p, %p", wnd->irq_kdpc.arg1, wnd->irq_kdpc.arg2, + nmb->wnd, nmb->mp_ctx); + } else { + KeInitializeDpc(&wnd->irq_kdpc, + WIN_FUNC_PTR(serialized_irq_handler,4), + nmb->wnd); + wnd->irq_kdpc.arg1 = mp->handle_interrupt; + wnd->irq_kdpc.arg2 = nmb->mp_ctx; + TRACE2("%p, %p, %p", wnd->irq_kdpc.arg1, wnd->irq_kdpc.arg2, + nmb->wnd); + } + + if (IoConnectInterrupt(&mp_interrupt->kinterrupt, + WIN_FUNC_PTR(ndis_isr,2), mp_interrupt, NULL, + vector, DIRQL, DIRQL, mode, shared, 0, FALSE) != + STATUS_SUCCESS) { + printk(KERN_WARNING "%s: request for IRQ %d failed\n", + DRIVER_NAME, vector); + return NDIS_STATUS_RESOURCES; + } + printk(KERN_INFO "%s: using IRQ %d\n", DRIVER_NAME, vector); + EXIT1(return NDIS_STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(NdisMDeregisterInterrupt,1) + (struct ndis_mp_interrupt *mp_interrupt) +{ + struct ndis_mp_block *nmb; + + ENTER1("%p", mp_interrupt); + nmb = xchg(&mp_interrupt->nmb, NULL); + TRACE1("%p", nmb); + if (!nmb) { + WARNING("interrupt already freed?"); + return; + } + nmb->wnd->mp_interrupt = NULL; + if (dequeue_kdpc(&nmb->wnd->irq_kdpc)) + TRACE2("interrupt kdpc was pending"); + flush_workqueue(wrapndis_wq); + IoDisconnectInterrupt(mp_interrupt->kinterrupt); + EXIT1(return); +} + +wstdcall BOOLEAN WIN_FUNC(NdisMSynchronizeWithInterrupt,3) + (struct ndis_mp_interrupt *mp_interrupt, + PKSYNCHRONIZE_ROUTINE sync_func, void *ctx) +{ + return KeSynchronizeExecution(mp_interrupt->kinterrupt, sync_func, ctx); +} + +/* called via function pointer; but 64-bit RNDIS driver calls directly */ +wstdcall void WIN_FUNC(NdisMIndicateStatus,4) + (struct ndis_mp_block *nmb, NDIS_STATUS status, void *buf, UINT len) +{ + struct ndis_device *wnd = nmb->wnd; + struct ndis_status_indication *si; + + ENTER2("status=0x%x len=%d", status, len); + switch (status) { + case NDIS_STATUS_MEDIA_CONNECT: + set_media_state(wnd, NdisMediaStateConnected); + break; + case NDIS_STATUS_MEDIA_DISCONNECT: + set_media_state(wnd, NdisMediaStateDisconnected); + break; + case NDIS_STATUS_MEDIA_SPECIFIC_INDICATION: + if (!buf) + break; + si = buf; + TRACE2("status_type=%d", si->status_type); + switch (si->status_type) { + case Ndis802_11StatusType_MediaStreamMode: + break; +#ifdef CONFIG_WIRELESS_EXT + case Ndis802_11StatusType_Authentication: + buf = (char *)buf + sizeof(*si); + len -= sizeof(*si); + while (len > 0) { + int pairwise_error = 0, group_error = 0; + struct ndis_auth_req *auth_req = + (struct ndis_auth_req *)buf; + TRACE1(MACSTRSEP, MAC2STR(auth_req->bssid)); + if (auth_req->flags & 0x01) + TRACE2("reauth request"); + if (auth_req->flags & 0x02) + TRACE2("key update request"); + if (auth_req->flags & 0x06) { + pairwise_error = 1; + TRACE2("pairwise_error"); + } + if (auth_req->flags & 0x0E) { + group_error = 1; + TRACE2("group_error"); + } + if (pairwise_error || group_error) { + union iwreq_data wrqu; + struct iw_michaelmicfailure micfailure; + + memset(&micfailure, 0, sizeof(micfailure)); + if (pairwise_error) + micfailure.flags |= + IW_MICFAILURE_PAIRWISE; + if (group_error) + micfailure.flags |= + IW_MICFAILURE_GROUP; + memcpy(micfailure.src_addr.sa_data, + auth_req->bssid, ETH_ALEN); + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = sizeof(micfailure); + wireless_send_event(wnd->net_dev, + IWEVMICHAELMICFAILURE, + &wrqu, (u8 *)&micfailure); + } + len -= auth_req->length; + buf = (char *)buf + auth_req->length; + } + break; + case Ndis802_11StatusType_PMKID_CandidateList: + { + u8 *end; + unsigned long i; + struct ndis_pmkid_candidate_list *cand; + + cand = buf + sizeof(struct ndis_status_indication); + if (len < sizeof(struct ndis_status_indication) + + sizeof(struct ndis_pmkid_candidate_list) || + cand->version != 1) { + WARNING("unrecognized PMKID ignored"); + EXIT1(return); + } + + end = (u8 *)buf + len; + TRACE2("PMKID ver %d num_cand %d", + cand->version, cand->num_candidates); + for (i = 0; i < cand->num_candidates; i++) { + struct iw_pmkid_cand pcand; + union iwreq_data wrqu; + struct ndis_pmkid_candidate *c = + &cand->candidates[i]; + if ((u8 *)(c + 1) > end) { + TRACE2("truncated PMKID"); + break; + } + TRACE2("%ld: " MACSTRSEP " 0x%x", + i, MAC2STR(c->bssid), c->flags); + memset(&pcand, 0, sizeof(pcand)); + if (c->flags & 0x01) + pcand.flags |= IW_PMKID_CAND_PREAUTH; + pcand.index = i; + memcpy(pcand.bssid.sa_data, c->bssid, ETH_ALEN); + + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = sizeof(pcand); + wireless_send_event(wnd->net_dev, IWEVPMKIDCAND, + &wrqu, (u8 *)&pcand); + } + break; + } + case Ndis802_11StatusType_RadioState: + { + struct ndis_radio_status_indication *radio_status = buf; + if (radio_status->radio_state == + Ndis802_11RadioStatusOn) + INFO("radio is turned on"); + else if (radio_status->radio_state == + Ndis802_11RadioStatusHardwareOff) + INFO("radio is turned off by hardware"); + else if (radio_status->radio_state == + Ndis802_11RadioStatusSoftwareOff) + INFO("radio is turned off by software"); + break; + } +#endif + default: + /* is this RSSI indication? */ + TRACE2("unknown indication: %x", si->status_type); + break; + } + break; + default: + TRACE2("unknown status: %08X", status); + break; + } + + EXIT2(return); +} + +/* called via function pointer; but 64-bit RNDIS driver calls directly */ +wstdcall void WIN_FUNC(NdisMIndicateStatusComplete,1) + (struct ndis_mp_block *nmb) +{ + struct ndis_device *wnd = nmb->wnd; + ENTER2("%p", wnd); + if (wnd->tx_ok) + schedule_wrapndis_work(&wnd->tx_work); +} + +/* called via function pointer */ +wstdcall void NdisMSendComplete(struct ndis_mp_block *nmb, + struct ndis_packet *packet, NDIS_STATUS status) +{ + struct ndis_device *wnd = nmb->wnd; + ENTER4("%p, %08X", packet, status); + assert_irql(_irql_ <= DISPATCH_LEVEL); + if (deserialized_driver(wnd)) + free_tx_packet(wnd, packet, status); + else { + struct ndis_packet_oob_data *oob_data; + NDIS_STATUS pkt_status; + TRACE3("%p, %08x", packet, status); + oob_data = NDIS_PACKET_OOB_DATA(packet); + switch ((pkt_status = xchg(&oob_data->status, status))) { + case NDIS_STATUS_NOT_RECOGNIZED: + free_tx_packet(wnd, packet, status); + break; + case NDIS_STATUS_PENDING: + case 0: + break; + default: + WARNING("%p: invalid status: %08X", packet, pkt_status); + break; + } + /* In case a serialized driver has earlier requested a + * pause by returning NDIS_STATUS_RESOURCES during + * MiniportSend(Packets), wakeup tx worker now. + */ + if (xchg(&wnd->tx_ok, 1) == 0) { + TRACE3("%d, %d", wnd->tx_ring_start, wnd->tx_ring_end); + schedule_wrapndis_work(&wnd->tx_work); + } + } + EXIT3(return); +} + +/* called via function pointer */ +wstdcall void NdisMSendResourcesAvailable(struct ndis_mp_block *nmb) +{ + struct ndis_device *wnd = nmb->wnd; + ENTER3("%d, %d", wnd->tx_ring_start, wnd->tx_ring_end); + wnd->tx_ok = 1; + schedule_wrapndis_work(&wnd->tx_work); + EXIT3(return); +} + +wstdcall void return_packet(void *arg1, void *arg2) +{ + struct ndis_device *wnd; + struct ndis_packet *packet; + struct miniport *mp; + KIRQL irql; + + wnd = arg1; + packet = arg2; + ENTER4("%p, %p", wnd, packet); + mp = &wnd->wd->driver->ndis_driver->mp; + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + LIN2WIN2(mp->return_packet, wnd->nmb->mp_ctx, packet); + serialize_unlock_irql(wnd, irql); + EXIT4(return); +} +WIN_FUNC_DECL(return_packet,2) + +/* called via function pointer */ +wstdcall void NdisMIndicateReceivePacket(struct ndis_mp_block *nmb, + struct ndis_packet **packets, + UINT nr_packets) +{ + struct ndis_device *wnd; + ndis_buffer *buffer; + struct ndis_packet *packet; + struct sk_buff *skb; + ULONG i, length, total_length; + struct ndis_packet_oob_data *oob_data; + void *virt; + struct ndis_tcp_ip_checksum_packet_info csum; + + ENTER3("%p, %d", nmb, nr_packets); + assert_irql(_irql_ <= DISPATCH_LEVEL); + wnd = nmb->wnd; + for (i = 0; i < nr_packets; i++) { + packet = packets[i]; + if (!packet) { + WARNING("empty packet ignored"); + continue; + } + wnd->net_dev->last_rx = jiffies; + /* get total number of bytes in packet */ + NdisGetFirstBufferFromPacketSafe(packet, &buffer, &virt, + &length, &total_length, + NormalPagePriority); + TRACE3("%d, %d", length, total_length); + oob_data = NDIS_PACKET_OOB_DATA(packet); + TRACE3("0x%x, 0x%x, %Lu", packet->private.flags, + packet->private.packet_flags, oob_data->time_rxed); + skb = dev_alloc_skb(total_length); + if (skb) { + while (buffer) { + memcpy_skb(skb, MmGetSystemAddressForMdl(buffer), + MmGetMdlByteCount(buffer)); + buffer = buffer->next; + } + skb->dev = wnd->net_dev; + skb->protocol = eth_type_trans(skb, wnd->net_dev); + pre_atomic_add(wnd->net_stats.rx_bytes, total_length); + atomic_inc_var(wnd->net_stats.rx_packets); + csum.value = (typeof(csum.value))(ULONG_PTR) + oob_data->ext.info[TcpIpChecksumPacketInfo]; + TRACE3("0x%05x", csum.value); + if (wnd->rx_csum.value && + (csum.rx.tcp_succeeded || csum.rx.udp_succeeded || + csum.rx.ip_succeeded)) + skb->ip_summed = CHECKSUM_UNNECESSARY; + else + skb->ip_summed = CHECKSUM_NONE; + + if (in_interrupt()) + netif_rx(skb); + else + netif_rx_ni(skb); + } else { + WARNING("couldn't allocate skb; packet dropped"); + atomic_inc_var(wnd->net_stats.rx_dropped); + } + + /* serialized drivers check the status upon return + * from this function */ + if (!deserialized_driver(wnd)) { + oob_data->status = NDIS_STATUS_SUCCESS; + continue; + } + + /* if a deserialized driver sets + * NDIS_STATUS_RESOURCES, then it reclaims the packet + * upon return from this function */ + if (oob_data->status == NDIS_STATUS_RESOURCES) + continue; + + assert(oob_data->status == NDIS_STATUS_SUCCESS); + /* deserialized driver doesn't check the status upon + * return from this function; we need to call + * MiniportReturnPacket later for this packet. Calling + * MiniportReturnPacket from here is not correct - the + * driver doesn't expect it (at least Centrino driver + * crashes) */ + schedule_ntos_work_item(WIN_FUNC_PTR(return_packet,2), + wnd, packet); + } + EXIT3(return); +} + +/* called via function pointer (by NdisMEthIndicateReceive macro); the + * first argument is nmb->eth_db */ +wstdcall void EthRxIndicateHandler(struct ndis_mp_block *nmb, void *rx_ctx, + char *header1, char *header, UINT header_size, + void *look_ahead, UINT look_ahead_size, + UINT packet_size) +{ + struct sk_buff *skb = NULL; + struct ndis_device *wnd; + unsigned int skb_size = 0; + KIRQL irql; + struct ndis_packet_oob_data *oob_data; + + ENTER3("nmb = %p, rx_ctx = %p, buf = %p, size = %d, buf = %p, " + "size = %d, packet = %d", nmb, rx_ctx, header, header_size, + look_ahead, look_ahead_size, packet_size); + + wnd = nmb->wnd; + TRACE3("wnd = %p", wnd); + if (!wnd) { + ERROR("nmb is NULL"); + EXIT3(return); + } + wnd->net_dev->last_rx = jiffies; + + if (look_ahead_size < packet_size) { + struct ndis_packet *packet; + struct miniport *mp; + unsigned int bytes_txed; + NDIS_STATUS res; + + NdisAllocatePacket(&res, &packet, wnd->tx_packet_pool); + if (res != NDIS_STATUS_SUCCESS) { + atomic_inc_var(wnd->net_stats.rx_dropped); + EXIT3(return); + } + oob_data = NDIS_PACKET_OOB_DATA(packet); + mp = &wnd->wd->driver->ndis_driver->mp; + irql = serialize_lock_irql(wnd); + assert_irql(_irql_ == DISPATCH_LEVEL); + res = LIN2WIN6(mp->tx_data, packet, &bytes_txed, nmb, + rx_ctx, look_ahead_size, packet_size); + serialize_unlock_irql(wnd, irql); + TRACE3("%d, %d, %d", header_size, look_ahead_size, bytes_txed); + if (res == NDIS_STATUS_SUCCESS) { + ndis_buffer *buffer; + struct ndis_tcp_ip_checksum_packet_info csum; + skb = dev_alloc_skb(header_size + look_ahead_size + + bytes_txed); + if (!skb) { + ERROR("couldn't allocate skb; packet dropped"); + atomic_inc_var(wnd->net_stats.rx_dropped); + NdisFreePacket(packet); + return; + } + memcpy_skb(skb, header, header_size); + memcpy_skb(skb, look_ahead, look_ahead_size); + buffer = packet->private.buffer_head; + while (buffer) { + memcpy_skb(skb, + MmGetSystemAddressForMdl(buffer), + MmGetMdlByteCount(buffer)); + buffer = buffer->next; + } + skb_size = header_size + look_ahead_size + bytes_txed; + csum.value = (typeof(csum.value))(ULONG_PTR) + oob_data->ext.info[TcpIpChecksumPacketInfo]; + TRACE3("0x%05x", csum.value); + if (wnd->rx_csum.value && + (csum.rx.tcp_succeeded || csum.rx.udp_succeeded)) + skb->ip_summed = CHECKSUM_UNNECESSARY; + else + skb->ip_summed = CHECKSUM_NONE; + NdisFreePacket(packet); + } else if (res == NDIS_STATUS_PENDING) { + /* driver will call td_complete */ + oob_data->look_ahead = kmalloc(look_ahead_size, + GFP_ATOMIC); + if (!oob_data->look_ahead) { + NdisFreePacket(packet); + ERROR("packet dropped"); + atomic_inc_var(wnd->net_stats.rx_dropped); + EXIT3(return); + } + assert(sizeof(oob_data->header) == header_size); + memcpy(oob_data->header, header, + sizeof(oob_data->header)); + memcpy(oob_data->look_ahead, look_ahead, + look_ahead_size); + oob_data->look_ahead_size = look_ahead_size; + EXIT3(return); + } else { + WARNING("packet dropped: %08X", res); + atomic_inc_var(wnd->net_stats.rx_dropped); + NdisFreePacket(packet); + EXIT3(return); + } + } else { + skb_size = header_size + packet_size; + skb = dev_alloc_skb(skb_size); + if (skb) { + memcpy_skb(skb, header, header_size); + memcpy_skb(skb, look_ahead, packet_size); + } + } + + if (skb) { + skb->dev = wnd->net_dev; + skb->protocol = eth_type_trans(skb, wnd->net_dev); + pre_atomic_add(wnd->net_stats.rx_bytes, skb_size); + atomic_inc_var(wnd->net_stats.rx_packets); + if (in_interrupt()) + netif_rx(skb); + else + netif_rx_ni(skb); + } + + EXIT3(return); +} + +/* called via function pointer */ +wstdcall void NdisMTransferDataComplete(struct ndis_mp_block *nmb, + struct ndis_packet *packet, + NDIS_STATUS status, UINT bytes_txed) +{ + struct ndis_device *wnd = nmb->wnd; + struct sk_buff *skb; + unsigned int skb_size; + struct ndis_packet_oob_data *oob_data; + ndis_buffer *buffer; + struct ndis_tcp_ip_checksum_packet_info csum; + + ENTER3("wnd = %p, packet = %p, bytes_txed = %d", + wnd, packet, bytes_txed); + if (!packet) { + WARNING("illegal packet"); + EXIT3(return); + } + wnd->net_dev->last_rx = jiffies; + oob_data = NDIS_PACKET_OOB_DATA(packet); + skb_size = sizeof(oob_data->header) + oob_data->look_ahead_size + + bytes_txed; + skb = dev_alloc_skb(skb_size); + if (!skb) { + kfree(oob_data->look_ahead); + NdisFreePacket(packet); + ERROR("couldn't allocate skb; packet dropped"); + atomic_inc_var(wnd->net_stats.rx_dropped); + EXIT3(return); + } + memcpy_skb(skb, oob_data->header, sizeof(oob_data->header)); + memcpy_skb(skb, oob_data->look_ahead, oob_data->look_ahead_size); + buffer = packet->private.buffer_head; + while (buffer) { + memcpy_skb(skb, MmGetSystemAddressForMdl(buffer), + MmGetMdlByteCount(buffer)); + buffer = buffer->next; + } + kfree(oob_data->look_ahead); + NdisFreePacket(packet); + skb->dev = wnd->net_dev; + skb->protocol = eth_type_trans(skb, wnd->net_dev); + pre_atomic_add(wnd->net_stats.rx_bytes, skb_size); + atomic_inc_var(wnd->net_stats.rx_packets); + + csum.value = (typeof(csum.value))(ULONG_PTR) + oob_data->ext.info[TcpIpChecksumPacketInfo]; + TRACE3("0x%05x", csum.value); + if (wnd->rx_csum.value && + (csum.rx.tcp_succeeded || csum.rx.udp_succeeded)) + skb->ip_summed = CHECKSUM_UNNECESSARY; + else + skb->ip_summed = CHECKSUM_NONE; + + if (in_interrupt()) + netif_rx(skb); + else + netif_rx_ni(skb); +} + +/* called via function pointer */ +wstdcall void EthRxComplete(struct ndis_mp_block *nmb) +{ + TRACE3(""); +} + +/* called via function pointer */ +wstdcall void NdisMQueryInformationComplete(struct ndis_mp_block *nmb, + NDIS_STATUS status) +{ + struct ndis_device *wnd = nmb->wnd; + typeof(wnd->ndis_req_task) task; + + ENTER2("nmb: %p, wnd: %p, %08X", nmb, wnd, status); + wnd->ndis_req_status = status; + wnd->ndis_req_done = 1; + if ((task = xchg(&wnd->ndis_req_task, NULL))) + wake_up_process(task); + else + WARNING("invalid task"); + EXIT2(return); +} + +/* called via function pointer */ +wstdcall void NdisMSetInformationComplete(struct ndis_mp_block *nmb, + NDIS_STATUS status) +{ + struct ndis_device *wnd = nmb->wnd; + typeof(wnd->ndis_req_task) task; + + ENTER2("status = %08X", status); + wnd->ndis_req_status = status; + wnd->ndis_req_done = 1; + if ((task = xchg(&wnd->ndis_req_task, NULL))) + wake_up_process(task); + else + WARNING("invalid task"); + EXIT2(return); +} + +/* called via function pointer */ +wstdcall void NdisMResetComplete(struct ndis_mp_block *nmb, + NDIS_STATUS status, BOOLEAN address_reset) +{ + struct ndis_device *wnd = nmb->wnd; + typeof(wnd->ndis_req_task) task; + + ENTER2("status: %08X, %u", status, address_reset); + wnd->ndis_req_status = status; + wnd->ndis_req_done = address_reset + 1; + if ((task = xchg(&wnd->ndis_req_task, NULL))) + wake_up_process(task); + else + WARNING("invalid task"); + EXIT2(return); +} + +wstdcall void WIN_FUNC(NdisMSleep,1) + (ULONG us) +{ + unsigned long delay; + + ENTER4("%p: us: %u", current, us); + delay = USEC_TO_HZ(us); + sleep_hz(delay); + TRACE4("%p: done", current); +} + +wstdcall void WIN_FUNC(NdisGetCurrentSystemTime,1) + (LARGE_INTEGER *time) +{ + *time = ticks_1601(); + TRACE5("%Lu, %lu", *time, jiffies); +} + +wstdcall LONG WIN_FUNC(NdisInterlockedDecrement,1) + (LONG *val) +{ + return InterlockedDecrement(val); +} + +wstdcall LONG WIN_FUNC(NdisInterlockedIncrement,1) + (LONG *val) +{ + return InterlockedIncrement(val); +} + +wstdcall struct nt_list *WIN_FUNC(NdisInterlockedInsertHeadList,3) + (struct nt_list *head, struct nt_list *entry, + struct ndis_spinlock *lock) +{ + return ExInterlockedInsertHeadList(head, entry, &lock->klock); +} + +wstdcall struct nt_list *WIN_FUNC(NdisInterlockedInsertTailList,3) + (struct nt_list *head, struct nt_list *entry, + struct ndis_spinlock *lock) +{ + return ExInterlockedInsertTailList(head, entry, &lock->klock); +} + +wstdcall struct nt_list *WIN_FUNC(NdisInterlockedRemoveHeadList,2) + (struct nt_list *head, struct ndis_spinlock *lock) +{ + return ExInterlockedRemoveHeadList(head, &lock->klock); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMInitializeScatterGatherDma,3) + (struct ndis_mp_block *nmb, BOOLEAN dma_size, ULONG max_phy_map) +{ + struct ndis_device *wnd = nmb->wnd; + ENTER2("dma_size=%d, maxtransfer=%u", dma_size, max_phy_map); +#ifdef CONFIG_X86_64 + if (dma_size != NDIS_DMA_64BITS) { + TRACE1("DMA size is not 64-bits"); + if (pci_set_dma_mask(wnd->wd->pci.pdev, DMA_BIT_MASK(32)) || + pci_set_consistent_dma_mask(wnd->wd->pci.pdev, + DMA_BIT_MASK(32))) + WARNING("setting dma mask failed"); + } +#endif + if ((wnd->attributes & NDIS_ATTRIBUTE_BUS_MASTER) && + wrap_is_pci_bus(wnd->wd->dev_bus)) { + wnd->sg_dma_size = max_phy_map; + return NDIS_STATUS_SUCCESS; + } else + EXIT1(return NDIS_STATUS_NOT_SUPPORTED); +} + +wstdcall ULONG WIN_FUNC(NdisMGetDmaAlignment,1) + (struct ndis_mp_block *nmb) +{ + ENTER3(""); + return dma_get_cache_alignment(); +} + +wstdcall CHAR WIN_FUNC(NdisSystemProcessorCount,0) + (void) +{ + return (CHAR)NR_CPUS; +} + +wstdcall void WIN_FUNC(NdisGetCurrentProcessorCounts,3) + (ULONG *idle, ULONG *kernel_user, ULONG *index) +{ + int cpu = smp_processor_id(); + *idle = kstat_cpu(cpu).cpustat.idle; + *kernel_user = kstat_cpu(cpu).cpustat.system + + kstat_cpu(cpu).cpustat.user; + *index = cpu; +} + +wstdcall void WIN_FUNC(NdisInitializeEvent,1) + (struct ndis_event *ndis_event) +{ + EVENTENTER("%p", ndis_event); + KeInitializeEvent(&ndis_event->nt_event, NotificationEvent, 0); +} + +wstdcall BOOLEAN WIN_FUNC(NdisWaitEvent,2) + (struct ndis_event *ndis_event, UINT ms) +{ + LARGE_INTEGER ticks; + NTSTATUS res; + + EVENTENTER("%p %u", ndis_event, ms); + ticks = -((LARGE_INTEGER)ms * TICKSPERMSEC); + res = KeWaitForSingleObject(&ndis_event->nt_event, 0, 0, TRUE, + ms == 0 ? NULL : &ticks); + if (res == STATUS_SUCCESS) + EXIT3(return TRUE); + else + EXIT3(return FALSE); +} + +wstdcall void WIN_FUNC(NdisSetEvent,1) + (struct ndis_event *ndis_event) +{ + EVENTENTER("%p", ndis_event); + KeSetEvent(&ndis_event->nt_event, 0, 0); +} + +wstdcall void WIN_FUNC(NdisResetEvent,1) + (struct ndis_event *ndis_event) +{ + EVENTENTER("%p", ndis_event); + KeResetEvent(&ndis_event->nt_event); +} + +static void ndis_worker(worker_param_t dummy) +{ + struct nt_list *ent; + struct ndis_work_item *ndis_work_item; + + WORKENTER(""); + while (1) { + spin_lock_bh(&ndis_work_list_lock); + ent = RemoveHeadList(&ndis_work_list); + spin_unlock_bh(&ndis_work_list_lock); + if (!ent) + break; + ndis_work_item = container_of(ent, struct ndis_work_item, list); + WORKTRACE("%p: %p, %p", ndis_work_item, + ndis_work_item->func, ndis_work_item->ctx); + LIN2WIN2(ndis_work_item->func, ndis_work_item, + ndis_work_item->ctx); + WORKTRACE("%p done", ndis_work_item); + } + WORKEXIT(return); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisScheduleWorkItem,1) + (struct ndis_work_item *ndis_work_item) +{ + ENTER3("%p", ndis_work_item); + spin_lock_bh(&ndis_work_list_lock); + InsertTailList(&ndis_work_list, &ndis_work_item->list); + spin_unlock_bh(&ndis_work_list_lock); + WORKTRACE("scheduling %p", ndis_work_item); + schedule_ndis_work(&ndis_work); + EXIT3(return NDIS_STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(NdisMGetDeviceProperty,6) + (struct ndis_mp_block *nmb, void **phy_dev, void **func_dev, + void **next_dev, void **alloc_res, void**trans_res) +{ + ENTER2("nmb: %p, phy_dev = %p, func_dev = %p, next_dev = %p, " + "alloc_res = %p, trans_res = %p", nmb, phy_dev, func_dev, + next_dev, alloc_res, trans_res); + if (phy_dev) + *phy_dev = nmb->pdo; + if (func_dev) + *func_dev = nmb->fdo; + if (next_dev) + *next_dev = nmb->next_device; +} + +wstdcall void WIN_FUNC(NdisMRegisterUnloadHandler,2) + (struct driver_object *drv_obj, void *unload) +{ + if (drv_obj) + drv_obj->unload = unload; + return; +} + +wstdcall UINT WIN_FUNC(NdisGetVersion,0) + (void) +{ + return 0x00050001; +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMQueryAdapterInstanceName,2) + (struct unicode_string *name, struct ndis_mp_block *nmb) +{ + struct ndis_device *wnd = nmb->wnd; + struct ansi_string ansi; + + if (wrap_is_pci_bus(wnd->wd->dev_bus)) + RtlInitAnsiString(&ansi, "PCI Ethernet Adapter"); + else + RtlInitAnsiString(&ansi, "USB Ethernet Adapter"); + + if (RtlAnsiStringToUnicodeString(name, &ansi, TRUE)) + EXIT2(return NDIS_STATUS_RESOURCES); + else + EXIT2(return NDIS_STATUS_SUCCESS); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisWriteEventLogEntry,7) + (void *handle, NDIS_STATUS code, ULONG value, USHORT n, + void *strings, ULONG datasize, void *data) +{ + TRACE1("0x%x, 0x%x, %u, %u", code, value, n, datasize); + return NDIS_STATUS_SUCCESS; +} + +wstdcall void *WIN_FUNC(NdisGetRoutineAddress,1) + (struct unicode_string *unicode_string) +{ + struct ansi_string ansi_string; + void *address; + + if (RtlUnicodeStringToAnsiString(&ansi_string, unicode_string, TRUE) != + STATUS_SUCCESS) + EXIT1(return NULL); + INFO("%s", ansi_string.buf); + address = ndis_get_routine_address(ansi_string.buf); + RtlFreeAnsiString(&ansi_string); + return address; +} + +wstdcall ULONG WIN_FUNC(NdisReadPcmciaAttributeMemory,4) + (struct ndis_mp_block *nmb, ULONG offset, void *buffer, + ULONG length) +{ + TODO(); + return 0; +} + +wstdcall ULONG WIN_FUNC(NdisWritePcmciaAttributeMemory,4) + (struct ndis_mp_block *nmb, ULONG offset, void *buffer, + ULONG length) +{ + TODO(); + return 0; +} + +wstdcall void WIN_FUNC(NdisMCoIndicateReceivePacket,3) + (struct ndis_mp_block *nmb, struct ndis_packet **packets, + UINT nr_packets) +{ + ENTER3("nmb = %p", nmb); + NdisMIndicateReceivePacket(nmb, packets, nr_packets); + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisMCoSendComplete,3) + (NDIS_STATUS status, struct ndis_mp_block *nmb, + struct ndis_packet *packet) +{ + ENTER3("%08x", status); + NdisMSendComplete(nmb, packet, status); + EXIT3(return); +} + +wstdcall void WIN_FUNC(NdisMCoRequestComplete,3) + (NDIS_STATUS status, struct ndis_mp_block *nmb, + struct ndis_request *ndis_request) +{ + struct ndis_device *wnd = nmb->wnd; + typeof(wnd->ndis_req_task) task; + + ENTER3("%08X", status); + wnd->ndis_req_status = status; + wnd->ndis_req_done = 1; + if ((task = xchg(&wnd->ndis_req_task, NULL))) + wake_up_process(task); + else + WARNING("invalid task"); + EXIT3(return); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisIMNotifiyPnPEvent,2) + (struct ndis_mp_block *nmb, struct net_pnp_event *event) +{ + ENTER2("%p, %d", nmb, event->code); + /* NdisWrapper never calls protocol's pnp event notifier, so + * nothing to do here */ + EXIT2(return NDIS_STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(NdisCompletePnPEvent,2) + (NDIS_STATUS status, void *handle, struct net_pnp_event *event) +{ + ENTER2("%d, %p, %d", status, handle, event->code); + /* NdisWrapper never calls protocol's pnp event notifier, so + * nothing to do here */ + EXIT2(return); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMSetMiniportSecondary,2) + (struct ndis_mp_block *nmb2, struct ndis_mp_block *nmb1) +{ + ENTER3("%p, %p", nmb1, nmb2); + TODO(); + EXIT3(return NDIS_STATUS_SUCCESS); +} + +wstdcall NDIS_STATUS WIN_FUNC(NdisMPromoteMiniport,1) + (struct ndis_mp_block *nmb) +{ + ENTER3("%p", nmb); + TODO(); + EXIT3(return NDIS_STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(NdisMCoActivateVcComplete,3) + (NDIS_STATUS status, void *handle, void *params) +{ + TODO(); +} + +wstdcall void WIN_FUNC(NdisMCoDeactivateVcComplete,2) + (NDIS_STATUS status, void *handle) +{ + TODO(); +} + +wstdcall void WIN_FUNC(NdisMRemoveMiniport,1) + (void *handle) +{ + TODO(); +} + +static void *ndis_get_routine_address(char *name) +{ + int i; + ENTER2("%p", name); + for (i = 0; i < sizeof(ndis_exports) / sizeof(ndis_exports[0]); i++) { + if (strcmp(name, ndis_exports[i].name) == 0) { + TRACE2("%p", ndis_exports[i].func); + return ndis_exports[i].func; + } + } + EXIT2(return NULL); +} + +/* ndis_init_device is called for each device */ +int ndis_init_device(struct ndis_device *wnd) +{ + struct ndis_mp_block *nmb = wnd->nmb; + + KeInitializeSpinLock(&nmb->lock); + wnd->mp_interrupt = NULL; + wnd->wrap_timer_slist.next = NULL; + if (wnd->wd->driver->ndis_driver) + wnd->wd->driver->ndis_driver->mp.shutdown = NULL; + + nmb->filterdbs.eth_db = nmb; + nmb->filterdbs.tr_db = nmb; + nmb->filterdbs.fddi_db = nmb; + nmb->filterdbs.arc_db = nmb; + + nmb->rx_packet = WIN_FUNC_PTR(NdisMIndicateReceivePacket,3); + nmb->send_complete = WIN_FUNC_PTR(NdisMSendComplete,3); + nmb->send_resource_avail = WIN_FUNC_PTR(NdisMSendResourcesAvailable,1); + nmb->status = WIN_FUNC_PTR(NdisMIndicateStatus,4); + nmb->status_complete = WIN_FUNC_PTR(NdisMIndicateStatusComplete,1); + nmb->queryinfo_complete = WIN_FUNC_PTR(NdisMQueryInformationComplete,2); + nmb->setinfo_complete = WIN_FUNC_PTR(NdisMSetInformationComplete,2); + nmb->reset_complete = WIN_FUNC_PTR(NdisMResetComplete,3); + nmb->eth_rx_indicate = WIN_FUNC_PTR(EthRxIndicateHandler,8); + nmb->eth_rx_complete = WIN_FUNC_PTR(EthRxComplete,1); + nmb->td_complete = WIN_FUNC_PTR(NdisMTransferDataComplete,4); + return 0; +} + +/* ndis_exit_device is called for each device */ +void ndis_exit_device(struct ndis_device *wnd) +{ + struct wrap_device_setting *setting; + ENTER2("%p", wnd); + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + nt_list_for_each_entry(setting, &wnd->wd->settings, list) { + struct ndis_configuration_parameter *param; + param = setting->encoded; + if (param) { + if (param->type == NdisParameterString) + RtlFreeUnicodeString(¶m->data.string); + ExFreePool(param); + setting->encoded = NULL; + } + } + up(&loader_mutex); +} + +/* ndis_init is called once when module is loaded */ +int ndis_init(void) +{ + InitializeListHead(&ndis_work_list); + spin_lock_init(&ndis_work_list_lock); + initialize_work(&ndis_work, ndis_worker, NULL); + + ndis_wq = create_singlethread_workqueue("ndis_wq"); + if (!ndis_wq) { + WARNING("couldn't create worker thread"); + EXIT1(return -ENOMEM); + } + + ndis_worker_thread = wrap_worker_init(ndis_wq); + TRACE1("%p", ndis_worker_thread); + return 0; +} + +/* ndis_exit is called once when module is removed */ +void ndis_exit(void) +{ + ENTER1(""); + if (ndis_wq) + destroy_workqueue(ndis_wq); + TRACE1("%p", ndis_worker_thread); + if (ndis_worker_thread) + ObDereferenceObject(ndis_worker_thread); + EXIT1(return); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/ndis.h +++ linux-2.6.32/ubuntu/ndiswrapper/ndis.h @@ -0,0 +1,1314 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _NDIS_H_ +#define _NDIS_H_ + +#include "ntoskernel.h" + +//#define ALLOW_POOL_OVERFLOW 1 + +#define NDIS_DMA_24BITS 0 +#define NDIS_DMA_32BITS 1 +#define NDIS_DMA_64BITS 2 + +#ifdef CONFIG_X86_64 +#define MAXIMUM_PROCESSORS 64 +#else +#define MAXIMUM_PROCESSORS 32 +#endif + +typedef UINT NDIS_STATUS; +typedef UCHAR NDIS_DMA_SIZE; +typedef LONG ndis_rssi; +typedef ULONG ndis_key_index; +typedef ULONG ndis_tx_power_level; +typedef ULONGULONG ndis_key_rsc; +typedef UCHAR ndis_rates[NDIS_MAX_RATES]; +typedef UCHAR ndis_rates_ex[NDIS_MAX_RATES_EX]; +typedef UCHAR mac_address[ETH_ALEN]; +typedef ULONG ndis_fragmentation_threshold; +typedef ULONG ndis_rts_threshold; +typedef ULONG ndis_antenna; +typedef ULONG ndis_oid; + +typedef UCHAR ndis_pmkid_vavlue[16]; + +typedef uint64_t NDIS_PHY_ADDRESS; + +struct ndis_sg_element { + PHYSICAL_ADDRESS address; + ULONG length; + ULONG_PTR reserved; +}; + +struct ndis_sg_list { + ULONG nent; + ULONG_PTR reserved; + struct ndis_sg_element elements[]; +}; + +/* when sending packets, ndiswrapper associates exactly one sg element + * in sg list */ +struct wrap_tx_sg_list { + ULONG nent; + ULONG_PTR reserved; + struct ndis_sg_element elements[1]; +}; + +struct ndis_phy_addr_unit { + NDIS_PHY_ADDRESS phy_addr; + UINT length; +}; + +typedef struct mdl ndis_buffer; + +struct ndis_buffer_pool { + ndis_buffer *free_descr; +// NT_SPIN_LOCK lock; + spinlock_t lock; + UINT max_descr; + UINT num_allocated_descr; +}; + +#define NDIS_PROTOCOL_ID_DEFAULT 0x00 +#define NDIS_PROTOCOL_ID_TCP_IP 0x02 +#define NDIS_PROTOCOL_ID_IPX 0x06 +#define NDIS_PROTOCOL_ID_NBF 0x07 +#define NDIS_PROTOCOL_ID_MAX 0x0F +#define NDIS_PROTOCOL_ID_MASK 0x0F + +#define fPACKET_WRAPPER_RESERVED 0x3F +#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40 +#define fPACKET_ALLOCATED_BY_NDIS 0x80 + +#define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(void *)) + +struct transport_header_offset { + USHORT protocol_type; + USHORT header_offset; +}; + +struct ndis_network_address { + USHORT length; + USHORT type; + UCHAR address[1]; +}; + +struct ndis_network_address_list { + LONG count; + USHORT type; + struct ndis_network_address address[1]; +}; + +struct ndis_tcp_ip_checksum_packet_info { + union { + struct { + ULONG v4:1; + ULONG v6:1; + ULONG tcp:1; + ULONG udp:1; + ULONG ip:1; + } tx; + struct { + ULONG tcp_failed:1; + ULONG udp_failed:1; + ULONG ip_failed:1; + ULONG tcp_succeeded:1; + ULONG udp_succeeded:1; + ULONG ip_succeeded:1; + ULONG loopback:1; + } rx; + ULONG value; + }; +}; + +enum ndis_task { + TcpIpChecksumNdisTask, IpSecNdisTask, TcpLargeSendNdisTask, MaxNdisTask +}; + +enum ndis_encapsulation { + UNSPECIFIED_Encapsulation, NULL_Encapsulation, + IEEE_802_3_Encapsulation, IEEE_802_5_Encapsulation, + LLC_SNAP_ROUTED_Encapsulation, LLC_SNAP_BRIDGED_Encapsulation +}; + +#define NDIS_TASK_OFFLOAD_VERSION 1 + +struct ndis_encapsulation_format { + enum ndis_encapsulation encap; + struct { + ULONG fixed_header_size:1; + ULONG reserved:31; + } flags; + ULONG header_size; +}; + +struct ndis_task_offload_header { + ULONG version; + ULONG size; + ULONG reserved; + ULONG offset_first_task; + struct ndis_encapsulation_format encap_format; +}; + +struct ndis_task_offload { + ULONG version; + ULONG size; + enum ndis_task task; + ULONG offset_next_task; + ULONG task_buf_length; + UCHAR task_buf[1]; +}; + +struct v4_checksum { + union { + struct { + ULONG ip_opts:1; + ULONG tcp_opts:1; + ULONG tcp_csum:1; + ULONG udp_csum:1; + ULONG ip_csum:1; + }; + ULONG value; + }; +}; + +struct v6_checksum { + ULONG ip_supported:1; + ULONG tcp_supported:1; + ULONG tcp_csum:1; + ULONG udp_csum:1; +}; + +struct ndis_task_tcp_ip_checksum { + struct v4_checksum v4_tx; + struct v4_checksum v4_rx; + struct v6_checksum v6_tx; + struct v6_checksum v6_rx; +}; + +struct ndis_task_tcp_large_send { + ULONG version; + ULONG max_size; + ULONG min_seg_count; + BOOLEAN tcp_opts; + BOOLEAN ip_opts; +}; + +struct ndis_packet; + +struct ndis_packet_pool { + struct ndis_packet *free_descr; +// NT_SPIN_LOCK lock; + spinlock_t lock; + UINT max_descr; + UINT num_allocated_descr; + UINT num_used_descr; + UINT proto_rsvd_length; +}; + +struct ndis_packet_stack { + ULONG_PTR IM_reserved[2]; + ULONG_PTR ndis_reserved[4]; +}; + +enum ndis_per_packet_info { + TcpIpChecksumPacketInfo, IpSecPacketInfo, TcpLargeSendPacketInfo, + ClassificationHandlePacketInfo, NdisReserved, + ScatterGatherListPacketInfo, Ieee8021QInfo, OriginalPacketInfo, + PacketCancelId, MaxPerPacketInfo +}; + +struct ndis_packet_extension { + void *info[MaxPerPacketInfo]; +}; + +struct ndis_packet_private { + UINT nr_pages; + UINT len; + ndis_buffer *buffer_head; + ndis_buffer *buffer_tail; + struct ndis_packet_pool *pool; + UINT count; + ULONG flags; + BOOLEAN valid_counts; + UCHAR packet_flags; + USHORT oob_offset; +}; + +struct ndis_packet { + struct ndis_packet_private private; + /* for use by miniport */ + union { + /* for connectionless mininports */ + struct { + UCHAR miniport_reserved[2 * sizeof(void *)]; + UCHAR wrapper_reserved[2 * sizeof(void *)]; + } cl_reserved; + /* for deserialized miniports */ + struct { + UCHAR miniport_reserved_ex[3 * sizeof(void *)]; + UCHAR wrapper_reserved_ex[sizeof(void *)]; + } deserailized_reserved; + struct { + UCHAR mac_reserved[4 * sizeof(void *)]; + } mac_reserved; + }; + ULONG_PTR reserved[2]; + UCHAR protocol_reserved[1]; +}; + +/* OOB data */ +struct ndis_packet_oob_data { + union { + ULONGLONG time_to_tx; + ULONGLONG time_txed; + }; + ULONGLONG time_rxed; + UINT header_size; + UINT media_size; + void *media; + NDIS_STATUS status; + + /* ndiswrapper specific info; extension should be right after + * ndis's oob_data */ + struct ndis_packet_extension ext; + union { + /* used for tx only */ + struct { + struct sk_buff *tx_skb; + union { + struct wrap_tx_sg_list wrap_tx_sg_list; + struct ndis_sg_list *tx_sg_list; + }; + }; + /* used for rx only */ + struct { + unsigned char header[ETH_HLEN]; + unsigned char *look_ahead; + UINT look_ahead_size; + }; + }; +}; + +#define NDIS_PACKET_OOB_DATA(packet) \ + (struct ndis_packet_oob_data *)(((void *)(packet)) + \ + (packet)->private.oob_offset) + +enum ndis_device_pnp_event { + NdisDevicePnPEventQueryRemoved, NdisDevicePnPEventRemoved, + NdisDevicePnPEventSurpriseRemoved, NdisDevicePnPEventQueryStopped, + NdisDevicePnPEventStopped, NdisDevicePnPEventPowerProfileChanged, + NdisDevicePnPEventMaximum +}; + +enum ndis_request_type { + NdisRequestQueryInformation, NdisRequestSetInformation, + NdisRequestQueryStatistics, NdisRequestOpen, NdisRequestClose, + NdisRequestSend, NdisRequestTransferData, NdisRequestReset, + NdisRequestGeneric1, NdisRequestGeneric2, NdisRequestGeneric3, + NdisRequestGeneric4 +}; + +struct ndis_request { + mac_address mac; + enum ndis_request_type request_type; + union data { + struct query_info { + UINT oid; + void *buf; + UINT buf_len; + UINT written; + UINT needed; + } query_info; + struct set_info { + UINT oid; + void *buf; + UINT buf_len; + UINT written; + UINT needed; + } set_info; + } data; +}; + +enum ndis_medium { + NdisMedium802_3, NdisMedium802_5, NdisMediumFddi, NdisMediumWan, + NdisMediumLocalTalk, NdisMediumDix, NdisMediumArcnetRaw, + NdisMediumArcnet878_2, NdisMediumAtm, NdisMediumWirelessWan, + NdisMediumIrda, NdisMediumBpc, NdisMediumCoWan, + NdisMedium1394, NdisMediumMax +}; + +enum ndis_physical_medium { + NdisPhysicalMediumUnspecified, NdisPhysicalMediumWirelessLan, + NdisPhysicalMediumCableModem, NdisPhysicalMediumPhoneLine, + NdisPhysicalMediumPowerLine, NdisPhysicalMediumDSL, + NdisPhysicalMediumFibreChannel, NdisPhysicalMedium1394, + NdisPhysicalMediumWirelessWan, NdisPhysicalMediumMax +}; + +enum ndis_power_state { + NdisDeviceStateUnspecified = 0, + NdisDeviceStateD0, NdisDeviceStateD1, NdisDeviceStateD2, + NdisDeviceStateD3, NdisDeviceStateMaximum +}; + +enum ndis_power_profile { + NdisPowerProfileBattery, NdisPowerProfileAcOnLine +}; + +struct ndis_pm_wakeup_capabilities { + enum ndis_power_state min_magic_packet_wakeup; + enum ndis_power_state min_pattern_wakeup; + enum ndis_power_state min_link_change_wakeup; +}; + +#define NDIS_PNP_WAKE_UP_MAGIC_PACKET 0x00000001 +#define NDIS_PNP_WAKE_UP_PATTERN_MATCH 0x00000002 +#define NDIS_PNP_WAKE_UP_LINK_CHANGE 0x00000004 + +enum net_pnp_event_code { + NetEventSetPower, NetEventQueryPower, NetEventQueryRemoveDevice, + NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, + NetEventBindsComplete, NetEventPnPCapabilities, NetEventMaximum +}; + +struct net_pnp_event { + enum net_pnp_event_code code; + void *buf; + ULONG buf_length; + ULONG_PTR ndis_reserved[4]; + ULONG_PTR transport_reserved[4]; + ULONG_PTR tdi_reserved[4]; + ULONG_PTR tdi_client_reserved[4]; +}; + +struct ndis_pnp_capabilities { + ULONG flags; + struct ndis_pm_wakeup_capabilities wakeup; +}; + +typedef void (*ndis_isr_handler)(BOOLEAN *recognized, BOOLEAN *queue_handler, + void *handle) wstdcall; +typedef void (*ndis_interrupt_handler)(void *ctx) wstdcall; + +struct miniport { + /* NDIS 3.0 */ + UCHAR major_version; + UCHAR minor_version; + USHORT filler; + UINT reserved; + BOOLEAN (*hangcheck)(void *ctx) wstdcall; + void (*disable_interrupt)(void *ctx) wstdcall; + void (*enable_interrupt)(void *ctx) wstdcall; + void (*mp_halt)(void *ctx) wstdcall; + ndis_interrupt_handler handle_interrupt; + NDIS_STATUS (*init)(NDIS_STATUS *error_status, UINT *medium_index, + enum ndis_medium medium[], UINT medium_array_size, + void *handle, void *conf_handle) wstdcall; + ndis_isr_handler isr; + NDIS_STATUS (*queryinfo)(void *ctx, ndis_oid oid, void *buffer, + ULONG buflen, ULONG *written, + ULONG *needed) wstdcall; + void *reconfig; + NDIS_STATUS (*reset)(BOOLEAN *reset_address, void *ctx) wstdcall; + NDIS_STATUS (*send)(void *ctx, struct ndis_packet *packet, + UINT flags) wstdcall; + NDIS_STATUS (*setinfo)(void *ctx, ndis_oid oid, void *buffer, + ULONG buflen, ULONG *written, + ULONG *needed) wstdcall; + NDIS_STATUS (*tx_data)(struct ndis_packet *ndis_packet, + UINT *bytes_txed, void *mp_ctx, void *rx_ctx, + UINT offset, UINT bytes_to_tx) wstdcall; + /* NDIS 4.0 extensions */ + void (*return_packet)(void *ctx, void *packet) wstdcall; + void (*send_packets)(void *ctx, struct ndis_packet **packets, + INT nr_of_packets) wstdcall; + void (*alloc_complete)(void *handle, void *virt, + NDIS_PHY_ADDRESS *phys, + ULONG size, void *ctx) wstdcall; + /* NDIS 5.0 extensions */ + NDIS_STATUS (*co_create_vc)(void *ctx, void *vc_handle, + void *vc_ctx) wstdcall; + NDIS_STATUS (*co_delete_vc)(void *vc_ctx) wstdcall; + NDIS_STATUS (*co_activate_vc)(void *vc_ctx, void *call_params) wstdcall; + NDIS_STATUS (*co_deactivate_vc)(void *vc_ctx) wstdcall; + NDIS_STATUS (*co_send_packets)(void *vc_ctx, void **packets, + UINT nr_of_packets) wstdcall; + NDIS_STATUS (*co_request)(void *ctx, void *vc_ctx, UINT *req) wstdcall; + /* NDIS 5.1 extensions */ + void (*cancel_send_packets)(void *ctx, void *id) wstdcall; + void (*pnp_event_notify)(void *ctx, enum ndis_device_pnp_event event, + void *inf_buf, ULONG inf_buf_len) wstdcall; + void (*shutdown)(void *ctx) wstdcall; + void *reserved1; + void *reserved2; + void *reserved3; + void *reserved4; +}; + +struct ndis_spinlock { + NT_SPIN_LOCK klock; + KIRQL irql; +}; + +union ndis_rw_lock_refcount { + UCHAR cache_line[16]; +}; + +struct ndis_rw_lock { + union { + struct { + NT_SPIN_LOCK klock; + void *context; + }; + UCHAR reserved[16]; + }; + union { + union ndis_rw_lock_refcount ref_count[MAXIMUM_PROCESSORS]; + /* ndiswrapper specific */ + volatile int count; + }; +}; + +struct lock_state { + USHORT state; + KIRQL irql; +}; + +struct ndis_work_item; +typedef void (*NDIS_PROC)(struct ndis_work_item *, void *) wstdcall; + +struct ndis_work_item { + void *ctx; + NDIS_PROC func; + union { + UCHAR reserved[8 * sizeof(void *)]; + /* ndiswrapper specific */ + struct nt_list list; + }; +}; + +struct alloc_shared_mem { + void *ctx; + ULONG size; + BOOLEAN cached; +}; + +struct ndis_mp_block; + +/* this is opaque to drivers, so we can use it as we please */ +struct ndis_mp_interrupt { + struct kinterrupt *kinterrupt; + NT_SPIN_LOCK lock; + union { + void *reserved; + unsigned int irq; + }; + ndis_isr_handler isr; + ndis_interrupt_handler mp_dpc; + struct kdpc intr_dpc; + struct ndis_mp_block *nmb; + UCHAR dpc_count; + BOOLEAN enable; + struct nt_event dpc_completed_event; + BOOLEAN shared; + BOOLEAN req_isr; +}; + +struct ndis_binary_data { + USHORT len; + void *buf; +}; + +enum ndis_parameter_type { + NdisParameterInteger, NdisParameterHexInteger, + NdisParameterString, NdisParameterMultiString, NdisParameterBinary, +}; + +typedef struct unicode_string NDIS_STRING; + +struct ndis_configuration_parameter { + enum ndis_parameter_type type; + union { + ULONG integer; + NDIS_STRING string; + } data; +}; + +struct ndis_driver { + struct miniport mp; +}; + +/* IDs used to store extensions in driver_object's custom extension */ +#define NDIS_DRIVER_CLIENT_ID 10 + +struct ndis_wireless_stats { + ULONG length; + LARGE_INTEGER tx_frag; + LARGE_INTEGER tx_multi_frag; + LARGE_INTEGER failed; + LARGE_INTEGER retry; + LARGE_INTEGER multi_retry; + LARGE_INTEGER rtss_succ; + LARGE_INTEGER rtss_fail; + LARGE_INTEGER ack_fail; + LARGE_INTEGER frame_dup; + LARGE_INTEGER rx_frag; + LARGE_INTEGER rx_multi_frag; + LARGE_INTEGER fcs_err; + LARGE_INTEGER tkip_local_mic_failures; + LARGE_INTEGER tkip_icv_errors; + LARGE_INTEGER tkip_counter_measures_invoked; + LARGE_INTEGER tkip_replays; + LARGE_INTEGER ccmp_format_errors; + LARGE_INTEGER ccmp_replays; + LARGE_INTEGER ccmp_decrypt_errors; + LARGE_INTEGER fourway_handshake_failures; + LARGE_INTEGER wep_undecryptable_count; + LARGE_INTEGER wep_icv_errorcount; + LARGE_INTEGER decrypt_success_count; + LARGE_INTEGER decrypt_failure_count; +}; + +enum ndis_status_type { + Ndis802_11StatusType_Authentication, + Ndis802_11StatusType_MediaStreamMode, + Ndis802_11StatusType_PMKID_CandidateList, + Ndis802_11StatusType_RadioState, +}; + +struct ndis_status_indication { + enum ndis_status_type status_type; +}; + +enum ndis_radio_status { + Ndis802_11RadioStatusOn, Ndis802_11RadioStatusHardwareOff, + Ndis802_11RadioStatusSoftwareOff, +}; + +struct ndis_radio_status_indication +{ + enum ndis_status_type status_type; + enum ndis_radio_status radio_state; +}; + +enum ndis_media_state { + NdisMediaStateConnected, + NdisMediaStateDisconnected, +}; + +enum ndis_media_stream_mode { + Ndis802_11MediaStreamOff, Ndis802_11MediaStreamOn +}; + +enum wrapper_work { + LINK_STATUS_OFF, LINK_STATUS_ON, SET_MULTICAST_LIST, COLLECT_IW_STATS, + HANGCHECK, NETIF_WAKEQ, +}; + +struct encr_info { + struct encr_key { + ULONG length; + UCHAR key[NDIS_ENCODING_TOKEN_MAX]; + } keys[MAX_ENCR_KEYS]; + unsigned short tx_key_index; +}; + +struct ndis_essid { + ULONG length; + UCHAR essid[NDIS_ESSID_MAX_SIZE]; +}; + +enum ndis_infrastructure_mode { + Ndis802_11IBSS, Ndis802_11Infrastructure, Ndis802_11AutoUnknown, + Ndis802_11InfrastructureMax +}; + +enum authentication_mode { + Ndis802_11AuthModeOpen, Ndis802_11AuthModeShared, + Ndis802_11AuthModeAutoSwitch, Ndis802_11AuthModeWPA, + Ndis802_11AuthModeWPAPSK, Ndis802_11AuthModeWPANone, + Ndis802_11AuthModeWPA2, Ndis802_11AuthModeWPA2PSK, + Ndis802_11AuthModeMax +}; + +enum encryption_status { + Ndis802_11WEPEnabled, + Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, + Ndis802_11WEPDisabled, + Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, + Ndis802_11WEPKeyAbsent, + Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, + Ndis802_11WEPNotSupported, + Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, + Ndis802_11Encryption2Enabled, Ndis802_11Encryption2KeyAbsent, + Ndis802_11Encryption3Enabled, Ndis802_11Encryption3KeyAbsent +}; + +struct ndis_auth_encr_pair { + enum authentication_mode auth_mode; + enum encryption_status encr_mode; +}; + +struct ndis_capability { + ULONG length; + ULONG version; + ULONG num_PMKIDs; + ULONG num_auth_encr_pair; + struct ndis_auth_encr_pair auth_encr_pair[1]; +}; + +struct ndis_guid { + struct guid guid; + union { + ndis_oid oid; + NDIS_STATUS status; + }; + ULONG size; + ULONG flags; +}; + +struct ndis_timer { + struct nt_timer nt_timer; + struct kdpc kdpc; +}; + +struct ndis_mp_timer { + struct nt_timer nt_timer; + struct kdpc kdpc; + DPC func; + void *ctx; + struct ndis_mp_block *nmb; + struct ndis_mp_timer *next; +}; + +typedef struct cm_partial_resource_list NDIS_RESOURCE_LIST; + +struct ndis_event { + struct nt_event nt_event; +}; + +struct ndis_bind_paths { + UINT number; + struct unicode_string paths[1]; +}; + +struct ndis_reference { + NT_SPIN_LOCK lock; + USHORT ref_count; + BOOLEAN closing; +}; + +struct ndis_filterdbs { + union { + void *eth_db; + void *null_db; + }; + void *tr_db; + void *fddi_db; + void *arc_db; +}; + +enum ndis_interface_type { + NdisInterfaceInternal, NdisInterfaceIsa, NdisInterfaceEisa, + NdisInterfaceMca, NdisInterfaceTurboChannel, NdisInterfacePci, + NdisInterfacePcMcia, +}; + +struct auth_encr_capa { + unsigned long auth; + unsigned long encr; +}; + +struct ndis_pmkid_candidate { + mac_address bssid; + DWORD flags; +}; + +struct ndis_pmkid_candidate_list { + ULONG version; + ULONG num_candidates; + struct ndis_pmkid_candidate candidates[1]; +}; + +/* + * This struct contains function pointers that the drivers references + * directly via macros, so it's important that they are at the correct + * position. + */ +struct ndis_mp_block { + void *signature; + struct ndis_mp_block *next; + struct driver_object *drv_obj; + void *mp_ctx; + struct unicode_string name; + struct ndis_bind_paths *bindpaths; + void *openqueue; + struct ndis_reference reference; + void *device_ctx; + UCHAR padding; + UCHAR lock_acquired; + UCHAR pmode_opens; + UCHAR assigned_cpu; + NT_SPIN_LOCK lock; + enum ndis_request_type *mediarequest; + struct ndis_mp_interrupt *interrupt; + ULONG flags; + ULONG pnp_flags; + struct nt_list packet_list; + struct ndis_packet *first_pending_tx_packet; + struct ndis_packet *return_packet_queue; + ULONG request_buffer; + void *set_mcast_buffer; + struct ndis_mp_block *primary_mp; + void *wrapper_ctx; + void *bus_data_ctx; + ULONG pnp_capa; + void *resources; + struct ndis_timer wakeup_dpc_timer; + struct unicode_string basename; + struct unicode_string symlink_name; + ULONG ndis_hangcheck_interval; + USHORT hanghcheck_ticks; + USHORT hangcheck_tick; + NDIS_STATUS ndis_reset_status; + void *resetopen; + struct ndis_filterdbs filterdbs; + void *rx_packet; + void *send_complete; + void *send_resource_avail; + void *reset_complete; + + enum ndis_medium media_type; + ULONG bus_number; + enum ndis_interface_type bus_type; + enum ndis_interface_type adapter_type; + struct device_object *fdo; + struct device_object *pdo; + struct device_object *next_device; + void *mapreg; + void *call_mgraflist; + void *mp_thread; + void *setinfobuf; + USHORT setinfo_buf_len; + USHORT max_send_pkts; + NDIS_STATUS fake_status; + void *lock_handler; + struct unicode_string *adapter_instance_name; + void *timer_queue; + UINT mac_options; + void *pending_req; + UINT max_long_addrs; + UINT max_short_addrs; + UINT cur_lookahead; + UINT max_lookahead; + + ndis_interrupt_handler irq_bh; + void *disable_intr; + void *enable_intr; + void *send_pkts; + void *deferred_send; + void *eth_rx_indicate; + void *tr_rx_indicate; + void *fddi_rx_indicate; + void *eth_rx_complete; + void *tr_rx_complete; + void *fddi_rx_complete; + + void *status; + void *status_complete; + void *td_complete; + + void *queryinfo_complete; + void *setinfo_complete; + void *wan_tx_complete; + void *wan_rx; + void *wan_rx_complete; + /* ndiswrapper specific */ + struct ndis_device *wnd; +}; + +struct ndis_device { + struct ndis_mp_block *nmb; + struct wrap_device *wd; + struct net_device *net_dev; + void *shutdown_ctx; + struct ndis_mp_interrupt *mp_interrupt; + struct kdpc irq_kdpc; + unsigned long mem_start; + unsigned long mem_end; + + struct net_device_stats net_stats; + struct iw_statistics iw_stats; + BOOLEAN iw_stats_enabled; + struct ndis_wireless_stats ndis_stats; + + work_struct_t tx_work; + struct ndis_packet *tx_ring[TX_RING_SIZE]; + u8 tx_ring_start; + u8 tx_ring_end; + u8 is_tx_ring_full; + u8 tx_ok; + spinlock_t tx_ring_lock; + struct semaphore tx_ring_mutex; + unsigned int max_tx_packets; + struct semaphore ndis_req_mutex; + struct task_struct *ndis_req_task; + int ndis_req_done; + NDIS_STATUS ndis_req_status; + ULONG packet_filter; + + ULONG sg_dma_size; + ULONG dma_map_count; + dma_addr_t *dma_map_addr; + + int hangcheck_interval; + struct timer_list hangcheck_timer; + int iw_stats_interval; + struct timer_list iw_stats_timer; + unsigned long scan_timestamp; + struct encr_info encr_info; + char nick[IW_ESSID_MAX_SIZE + 1]; + struct ndis_essid essid; + struct auth_encr_capa capa; + enum ndis_infrastructure_mode infrastructure_mode; + int max_pmkids; + int num_pmkids; + struct ndis_pmkid *pmkids; + mac_address mac; + struct proc_dir_entry *procfs_iface; + + work_struct_t ndis_work; + unsigned long ndis_pending_work; + UINT attributes; + int iw_auth_wpa_version; + int iw_auth_cipher_pairwise; + int iw_auth_cipher_group; + int iw_auth_key_mgmt; + int iw_auth_80211_alg; + struct ndis_packet_pool *tx_packet_pool; + struct ndis_buffer_pool *tx_buffer_pool; + int multicast_size; + struct v4_checksum rx_csum; + struct v4_checksum tx_csum; + enum ndis_physical_medium physical_medium; + ULONG ndis_wolopts; + struct nt_slist wrap_timer_slist; + int drv_ndis_version; + struct ndis_pnp_capabilities pnp_capa; + char netdev_name[IFNAMSIZ]; +}; + +BOOLEAN ndis_isr(struct kinterrupt *kinterrupt, void *ctx) wstdcall; + +int ndis_init(void); +void ndis_exit(void); +int ndis_init_device(struct ndis_device *wnd); +void ndis_exit_device(struct ndis_device *wnd); + +int wrap_procfs_add_ndis_device(struct ndis_device *wnd); +void wrap_procfs_remove_ndis_device(struct ndis_device *wnd); + +void NdisAllocatePacketPoolEx(NDIS_STATUS *status, + struct ndis_packet_pool **pool_handle, + UINT num_descr, UINT overflowsize, + UINT proto_rsvd_length) wstdcall; +void NdisFreePacketPool(struct ndis_packet_pool *pool) wstdcall; +void NdisAllocatePacket(NDIS_STATUS *status, struct ndis_packet **packet, + struct ndis_packet_pool *pool) wstdcall; +void NdisFreePacket(struct ndis_packet *descr) wstdcall; +void NdisAllocateBufferPool(NDIS_STATUS *status, + struct ndis_buffer_pool **pool_handle, + UINT num_descr) wstdcall; +void NdisFreeBufferPool(struct ndis_buffer_pool *pool) wstdcall; +void NdisAllocateBuffer(NDIS_STATUS *status, ndis_buffer **buffer, + struct ndis_buffer_pool *pool, void *virt, + UINT length) wstdcall; +void NdisFreeBuffer(ndis_buffer *descr) wstdcall; +void NdisMIndicateReceivePacket(struct ndis_mp_block *nmb, + struct ndis_packet **packets, + UINT nr_packets) wstdcall; +void NdisMSendComplete(struct ndis_mp_block *nmb, struct ndis_packet *packet, + NDIS_STATUS status) wstdcall; +void NdisMSendResourcesAvailable(struct ndis_mp_block *nmb) wstdcall; +void NdisMIndicateStatus(struct ndis_mp_block *nmb, + NDIS_STATUS status, void *buf, UINT len) wstdcall; +void NdisMIndicateStatusComplete(struct ndis_mp_block *nmb) wstdcall; +void NdisMQueryInformationComplete(struct ndis_mp_block *nmb, + NDIS_STATUS status) wstdcall; +void NdisMSetInformationComplete(struct ndis_mp_block *nmb, + NDIS_STATUS status) wstdcall; +void NdisMResetComplete(struct ndis_mp_block *nmb, NDIS_STATUS status, + BOOLEAN address_reset) wstdcall; +ULONG NDIS_BUFFER_TO_SPAN_PAGES(ndis_buffer *buffer) wstdcall; +BOOLEAN NdisWaitEvent(struct ndis_event *event, UINT timeout) wstdcall; +void NdisSetEvent(struct ndis_event *event) wstdcall; +void NdisMDeregisterInterrupt(struct ndis_mp_interrupt *mp_interrupt) wstdcall; +void EthRxIndicateHandler(struct ndis_mp_block *nmb, void *rx_ctx, + char *header1, char *header, UINT header_size, + void *look_ahead, UINT look_ahead_size, + UINT packet_size) wstdcall; +void EthRxComplete(struct ndis_mp_block *nmb) wstdcall; +void NdisMTransferDataComplete(struct ndis_mp_block *nmb, + struct ndis_packet *packet, NDIS_STATUS status, + UINT bytes_txed) wstdcall; +void NdisWriteConfiguration(NDIS_STATUS *status, struct ndis_mp_block *nmb, + struct unicode_string *key, + struct ndis_configuration_parameter *param) wstdcall; +void NdisReadConfiguration(NDIS_STATUS *status, + struct ndis_configuration_parameter **param, + struct ndis_mp_block *nmb, + struct unicode_string *key, + enum ndis_parameter_type type) wstdcall; + +/* Required OIDs */ +#define OID_GEN_SUPPORTED_LIST 0x00010101 +#define OID_GEN_HARDWARE_STATUS 0x00010102 +#define OID_GEN_MEDIA_SUPPORTED 0x00010103 +#define OID_GEN_MEDIA_IN_USE 0x00010104 +#define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105 +#define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106 +#define OID_GEN_LINK_SPEED 0x00010107 +#define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108 +#define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109 +#define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A +#define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B +#define OID_GEN_VENDOR_ID 0x0001010C +#define OID_GEN_VENDOR_DESCRIPTION 0x0001010D +#define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E +#define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F +#define OID_GEN_DRIVER_VERSION 0x00010110 +#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111 +#define OID_GEN_PROTOCOL_OPTIONS 0x00010112 +#define OID_GEN_MAC_OPTIONS 0x00010113 +#define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114 +#define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115 +#define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116 +#define OID_GEN_SUPPORTED_GUIDS 0x00010117 +#define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 /* Set only */ +#define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 /* Set only */ +#define OID_GEN_MACHINE_NAME 0x0001021A +#define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B /* Set only */ +#define OID_GEN_VLAN_ID 0x0001021C + +/* Optional OIDs. */ +#define OID_GEN_MEDIA_CAPABILITIES 0x00010201 +#define OID_GEN_PHYSICAL_MEDIUM 0x00010202 + +/* Required statistics OIDs. */ +#define OID_GEN_XMIT_OK 0x00020101 +#define OID_GEN_RCV_OK 0x00020102 +#define OID_GEN_XMIT_ERROR 0x00020103 +#define OID_GEN_RCV_ERROR 0x00020104 +#define OID_GEN_RCV_NO_BUFFER 0x00020105 + +/* Optional OID statistics */ +#define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201 +#define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202 +#define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203 +#define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204 +#define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205 +#define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206 +#define OID_GEN_DIRECTED_BYTES_RCV 0x00020207 +#define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208 +#define OID_GEN_MULTICAST_BYTES_RCV 0x00020209 +#define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A +#define OID_GEN_BROADCAST_BYTES_RCV 0x0002020B +#define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C +#define OID_GEN_RCV_CRC_ERROR 0x0002020D +#define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E +#define OID_GEN_GET_TIME_CAPS 0x0002020F +#define OID_GEN_GET_NETCARD_TIME 0x00020210 +#define OID_GEN_NETCARD_LOAD 0x00020211 +#define OID_GEN_DEVICE_PROFILE 0x00020212 + +/* 802.3 (ethernet) OIDs */ +#define OID_802_3_PERMANENT_ADDRESS 0x01010101 +#define OID_802_3_CURRENT_ADDRESS 0x01010102 +#define OID_802_3_MULTICAST_LIST 0x01010103 +#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 +#define OID_802_3_MAC_OPTIONS 0x01010105 +#define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001 +#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101 +#define OID_802_3_XMIT_ONE_COLLISION 0x01020102 +#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103 +#define OID_802_3_XMIT_DEFERRED 0x01020201 +#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202 +#define OID_802_3_RCV_OVERRUN 0x01020203 +#define OID_802_3_XMIT_UNDERRUN 0x01020204 +#define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205 +#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206 +#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207 + +/* PnP and power management OIDs */ +#define OID_PNP_CAPABILITIES 0xFD010100 +#define OID_PNP_SET_POWER 0xFD010101 +#define OID_PNP_QUERY_POWER 0xFD010102 +#define OID_PNP_ADD_WAKE_UP_PATTERN 0xFD010103 +#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xFD010104 +#define OID_PNP_WAKE_UP_PATTERN_LIST 0xFD010105 +#define OID_PNP_ENABLE_WAKE_UP 0xFD010106 + +/* PnP/PM Statistics (Optional). */ +#define OID_PNP_WAKE_UP_OK 0xFD020200 +#define OID_PNP_WAKE_UP_ERROR 0xFD020201 + +/* The following bits are defined for OID_PNP_ENABLE_WAKE_UP */ +#define NDIS_PNP_WAKE_UP_MAGIC_PACKET 0x00000001 +#define NDIS_PNP_WAKE_UP_PATTERN_MATCH 0x00000002 +#define NDIS_PNP_WAKE_UP_LINK_CHANGE 0x00000004 + +/* 802.11 OIDs */ +#define OID_802_11_BSSID 0x0D010101 +#define OID_802_11_SSID 0x0D010102 +#define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0D010203 +#define OID_802_11_NETWORK_TYPE_IN_USE 0x0D010204 +#define OID_802_11_TX_POWER_LEVEL 0x0D010205 +#define OID_802_11_RSSI 0x0D010206 +#define OID_802_11_RSSI_TRIGGER 0x0D010207 +#define OID_802_11_INFRASTRUCTURE_MODE 0x0D010108 +#define OID_802_11_FRAGMENTATION_THRESHOLD 0x0D010209 +#define OID_802_11_RTS_THRESHOLD 0x0D01020A +#define OID_802_11_NUMBER_OF_ANTENNAS 0x0D01020B +#define OID_802_11_RX_ANTENNA_SELECTED 0x0D01020C +#define OID_802_11_TX_ANTENNA_SELECTED 0x0D01020D +#define OID_802_11_SUPPORTED_RATES 0x0D01020E +#define OID_802_11_DESIRED_RATES 0x0D010210 +#define OID_802_11_CONFIGURATION 0x0D010211 +#define OID_802_11_STATISTICS 0x0D020212 +#define OID_802_11_ADD_WEP 0x0D010113 +#define OID_802_11_REMOVE_WEP 0x0D010114 +#define OID_802_11_DISASSOCIATE 0x0D010115 +#define OID_802_11_POWER_MODE 0x0D010216 +#define OID_802_11_BSSID_LIST 0x0D010217 +#define OID_802_11_AUTHENTICATION_MODE 0x0D010118 +#define OID_802_11_PRIVACY_FILTER 0x0D010119 +#define OID_802_11_BSSID_LIST_SCAN 0x0D01011A +#define OID_802_11_WEP_STATUS 0x0D01011B +#define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS +#define OID_802_11_RELOAD_DEFAULTS 0x0D01011C +#define OID_802_11_ADD_KEY 0x0D01011D +#define OID_802_11_REMOVE_KEY 0x0D01011E +#define OID_802_11_ASSOCIATION_INFORMATION 0x0D01011F +#define OID_802_11_TEST 0x0D010120 +#define OID_802_11_MEDIA_STREAM_MODE 0x0D010121 +#define OID_802_11_CAPABILITY 0x0D010122 +#define OID_802_11_PMKID 0x0D010123 + +#define NDIS_STATUS_SUCCESS 0 +#define NDIS_STATUS_PENDING 0x00000103 +#define NDIS_STATUS_NOT_RECOGNIZED 0x00010001 +#define NDIS_STATUS_NOT_COPIED 0x00010002 +#define NDIS_STATUS_NOT_ACCEPTED 0x00010003 +#define NDIS_STATUS_CALL_ACTIVE 0x00010007 +#define NDIS_STATUS_ONLINE 0x40010003 +#define NDIS_STATUS_RESET_START 0x40010004 +#define NDIS_STATUS_RESET_END 0x40010005 +#define NDIS_STATUS_RING_STATUS 0x40010006 +#define NDIS_STATUS_CLOSED 0x40010007 +#define NDIS_STATUS_WAN_LINE_UP 0x40010008 +#define NDIS_STATUS_WAN_LINE_DOWN 0x40010009 +#define NDIS_STATUS_WAN_FRAGMENT 0x4001000A +#define NDIS_STATUS_MEDIA_CONNECT 0x4001000B +#define NDIS_STATUS_MEDIA_DISCONNECT 0x4001000C +#define NDIS_STATUS_HARDWARE_LINE_UP 0x4001000D +#define NDIS_STATUS_HARDWARE_LINE_DOWN 0x4001000E +#define NDIS_STATUS_INTERFACE_UP 0x4001000F +#define NDIS_STATUS_INTERFACE_DOWN 0x40010010 +#define NDIS_STATUS_MEDIA_BUSY 0x40010011 +#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION 0x40010012 +#define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION +#define NDIS_STATUS_LINK_SPEED_CHANGE 0x40010013 +#define NDIS_STATUS_WAN_GET_STATS 0x40010014 +#define NDIS_STATUS_WAN_CO_FRAGMENT 0x40010015 +#define NDIS_STATUS_WAN_CO_LINKPARAMS 0x40010016 +#define NDIS_STATUS_NOT_RESETTABLE 0x80010001 +#define NDIS_STATUS_SOFT_ERRORS 0x80010003 +#define NDIS_STATUS_HARD_ERRORS 0x80010004 +#define NDIS_STATUS_BUFFER_OVERFLOW 0x80000005 +#define NDIS_STATUS_FAILURE 0xC0000001 +#define NDIS_STATUS_INVALID_PARAMETER 0xC000000D +#define NDIS_STATUS_RESOURCES 0xC000009A +#define NDIS_STATUS_CLOSING 0xC0010002 +#define NDIS_STATUS_BAD_VERSION 0xC0010004 +#define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005 +#define NDIS_STATUS_ADAPTER_NOT_FOUND 0xC0010006 +#define NDIS_STATUS_OPEN_FAILED 0xC0010007 +#define NDIS_STATUS_DEVICE_FAILED 0xC0010008 +#define NDIS_STATUS_MULTICAST_FULL 0xC0010009 +#define NDIS_STATUS_MULTICAST_EXISTS 0xC001000A +#define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B +#define NDIS_STATUS_REQUEST_ABORTED 0xC001000C +#define NDIS_STATUS_RESET_IN_PROGRESS 0xC001000D +#define NDIS_STATUS_CLOSING_INDICATING 0xC001000E +#define NDIS_STATUS_BAD_VERSION 0xC0010004 +#define NDIS_STATUS_NOT_SUPPORTED 0xC00000BB +#define NDIS_STATUS_INVALID_PACKET 0xC001000F +#define NDIS_STATUS_OPEN_LIST_FULL 0xC0010010 +#define NDIS_STATUS_ADAPTER_NOT_READY 0xC0010011 +#define NDIS_STATUS_ADAPTER_NOT_OPEN 0xC0010012 +#define NDIS_STATUS_NOT_INDICATING 0xC0010013 +#define NDIS_STATUS_INVALID_LENGTH 0xC0010014 +#define NDIS_STATUS_INVALID_DATA 0xC0010015 +#define NDIS_STATUS_BUFFER_TOO_SHORT 0xC0010016 +#define NDIS_STATUS_INVALID_OID 0xC0010017 +#define NDIS_STATUS_ADAPTER_REMOVED 0xC0010018 +#define NDIS_STATUS_UNSUPPORTED_MEDIA 0xC0010019 +#define NDIS_STATUS_GROUP_ADDRESS_IN_USE 0xC001001A +#define NDIS_STATUS_FILE_NOT_FOUND 0xC001001B +#define NDIS_STATUS_ERROR_READING_FILE 0xC001001C +#define NDIS_STATUS_ALREADY_MAPPED 0xC001001D +#define NDIS_STATUS_RESOURCE_CONFLICT 0xC001001E +#define NDIS_STATUS_NO_CABLE 0xC001001F +#define NDIS_STATUS_INVALID_SAP 0xC0010020 +#define NDIS_STATUS_SAP_IN_USE 0xC0010021 +#define NDIS_STATUS_INVALID_ADDRESS 0xC0010022 +#define NDIS_STATUS_VC_NOT_ACTIVATED 0xC0010023 +#define NDIS_STATUS_DEST_OUT_OF_ORDER 0xC0010024 +#define NDIS_STATUS_VC_NOT_AVAILABLE 0xC0010025 +#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE 0xC0010026 +#define NDIS_STATUS_INCOMPATABLE_QOS 0xC0010027 +#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED 0xC0010028 +#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION 0xC0010029 +#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR 0xC0011000 +#define NDIS_STATUS_INVALID_DEVICE_REQUEST 0xC0000010 +#define NDIS_STATUS_NETWORK_UNREACHABLE 0xC000023C + +/* Event codes */ + +#define EVENT_NDIS_RESOURCE_CONFLICT 0xC0001388 +#define EVENT_NDIS_OUT_OF_RESOURCE 0xC0001389 +#define EVENT_NDIS_HARDWARE_FAILURE 0xC000138A +#define EVENT_NDIS_ADAPTER_NOT_FOUND 0xC000138B +#define EVENT_NDIS_INTERRUPT_CONNECT 0xC000138C +#define EVENT_NDIS_DRIVER_FAILURE 0xC000138D +#define EVENT_NDIS_BAD_VERSION 0xC000138E +#define EVENT_NDIS_TIMEOUT 0x8000138F +#define EVENT_NDIS_NETWORK_ADDRESS 0xC0001390 +#define EVENT_NDIS_UNSUPPORTED_CONFIGURATION 0xC0001391 +#define EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER 0xC0001392 +#define EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER 0xC0001393 +#define EVENT_NDIS_BAD_IO_BASE_ADDRESS 0xC0001394 +#define EVENT_NDIS_RECEIVE_SPACE_SMALL 0x40001395 +#define EVENT_NDIS_ADAPTER_DISABLED 0x80001396 +#define EVENT_NDIS_IO_PORT_CONFLICT 0x80001397 +#define EVENT_NDIS_PORT_OR_DMA_CONFLICT 0x80001398 +#define EVENT_NDIS_MEMORY_CONFLICT 0x80001399 +#define EVENT_NDIS_INTERRUPT_CONFLICT 0x8000139A +#define EVENT_NDIS_DMA_CONFLICT 0x8000139B +#define EVENT_NDIS_INVALID_DOWNLOAD_FILE_ERROR 0xC000139C +#define EVENT_NDIS_MAXRECEIVES_ERROR 0x8000139D +#define EVENT_NDIS_MAXTRANSMITS_ERROR 0x8000139E +#define EVENT_NDIS_MAXFRAMESIZE_ERROR 0x8000139F +#define EVENT_NDIS_MAXINTERNALBUFS_ERROR 0x800013A0 +#define EVENT_NDIS_MAXMULTICAST_ERROR 0x800013A1 +#define EVENT_NDIS_PRODUCTID_ERROR 0x800013A2 +#define EVENT_NDIS_LOBE_FAILUE_ERROR 0x800013A3 +#define EVENT_NDIS_SIGNAL_LOSS_ERROR 0x800013A4 +#define EVENT_NDIS_REMOVE_RECEIVED_ERROR 0x800013A5 +#define EVENT_NDIS_TOKEN_RING_CORRECTION 0x400013A6 +#define EVENT_NDIS_ADAPTER_CHECK_ERROR 0xC00013A7 +#define EVENT_NDIS_RESET_FAILURE_ERROR 0x800013A8 +#define EVENT_NDIS_CABLE_DISCONNECTED_ERROR 0x800013A9 +#define EVENT_NDIS_RESET_FAILURE_CORRECTION 0x800013AA + +/* packet filter bits used by NDIS_OID_PACKET_FILTER */ +#define NDIS_PACKET_TYPE_DIRECTED 0x00000001 +#define NDIS_PACKET_TYPE_MULTICAST 0x00000002 +#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 +#define NDIS_PACKET_TYPE_BROADCAST 0x00000008 +#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 +#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 +#define NDIS_PACKET_TYPE_SMT 0x00000040 +#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 +#define NDIS_PACKET_TYPE_GROUP 0x00001000 +#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000 +#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000 +#define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000 + +/* memory allocation flags */ +#define NDIS_MEMORY_CONTIGUOUS 0x00000001 +#define NDIS_MEMORY_NONCACHED 0x00000002 + +/* Atrribute flags to NdisMSetAtrributesEx */ +#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001 +#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002 +#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004 +#define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008 +#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010 +#define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020 +#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040 +#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080 +#define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100 +#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200 + +#define OID_TCP_TASK_OFFLOAD 0xFC010201 + +#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001 +#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002 +#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004 +#define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008 +#define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010 +#define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020 +#define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040 +#define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00000080 +#define NDIS_MAC_OPTION_RECEIVE_AT_DPC 0x00000100 +#define NDIS_MAC_OPTION_8021Q_VLAN 0x00000200 +#define NDIS_MAC_OPTION_RESERVED 0x80000000 + +#define deserialized_driver(wnd) (wnd->attributes & NDIS_ATTRIBUTE_DESERIALIZE) + +static inline void serialize_lock(struct ndis_device *wnd) +{ + nt_spin_lock(&wnd->nmb->lock); +} + +static inline void serialize_unlock(struct ndis_device *wnd) +{ + nt_spin_unlock(&wnd->nmb->lock); +} + +static inline KIRQL serialize_lock_irql(struct ndis_device *wnd) +{ + if (deserialized_driver(wnd)) + return raise_irql(DISPATCH_LEVEL); + else + return nt_spin_lock_irql(&wnd->nmb->lock, DISPATCH_LEVEL); +} + +static inline void serialize_unlock_irql(struct ndis_device *wnd, + KIRQL irql) +{ + if (deserialized_driver(wnd)) + lower_irql(irql); + else + nt_spin_unlock_irql(&wnd->nmb->lock, irql); +} + +static inline void if_serialize_lock(struct ndis_device *wnd) +{ + if (!deserialized_driver(wnd)) + nt_spin_lock(&wnd->nmb->lock); +} + +static inline void if_serialize_unlock(struct ndis_device *wnd) +{ + if (!deserialized_driver(wnd)) + nt_spin_unlock(&wnd->nmb->lock); +} + +#endif /* NDIS_H */ --- linux-2.6.32.orig/ubuntu/ndiswrapper/crt.c +++ linux-2.6.32/ubuntu/ndiswrapper/crt.c @@ -0,0 +1,578 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ntoskernel.h" +#include "crt_exports.h" + +#ifdef CONFIG_X86_64 +/* Windows long is 32-bit, so strip single 'l' in integer formats */ +static void strip_l_modifier(char *str) +{ + char *ptr = str; + int in_format = 0; + char *lptr = NULL; + char last = 0; + char *end_ptr; + char *wptr; + + /* Replace single 'l' inside integer formats with '\0' */ + for (ptr = str; *ptr; ptr++) { + if (!in_format) { + if (*ptr == '%') + in_format = 1; + last = *ptr; + continue; + } + switch (*ptr) { + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'p': + case 'n': + case 'm': + if (lptr) { + *lptr = '\0'; + lptr = NULL; + } + in_format = 0; + break; + case 'c': + case 'C': + case 's': + case 'S': + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + case 'a': + case 'A': + lptr = NULL; + in_format = 0; + break; + case '%': + lptr = NULL; + if (last == '%') + in_format = 0; + else + in_format = 1; /* ignore previous junk */ + break; + case 'l': + if (last == 'l') + lptr = NULL; + else + lptr = ptr; + break; + default: + break; + } + last = *ptr; + } + + /* Purge zeroes from the resulting string */ + end_ptr = ptr; + wptr = str; + for (ptr = str; ptr < end_ptr; ptr++) + if (*ptr != 0) + *(wptr++) = *ptr; + *wptr = 0; +} + +/* + * va_list on x86_64 Linux is designed to allow passing arguments in registers + * even to variadic functions. va_list is a structure holding pointers to the + * register save area, which holds the arguments passed in registers, and to + * the stack, which may have the arguments that did not fit the registers. + * va_list also holds offsets in the register save area for the next general + * purpose and floating point registers that the next va_arg() would fetch. + * + * Unlike Linux, the Windows va_list is just a pointer to the stack. No + * arguments are passed in the registers. That's why we construct the Linux + * va_list so that the register save area is never used. For that goal, we set + * the offsets to the maximal allowed values, meaning that the arguments passed + * in the registers have been exhausted. The values are 48 for general purpose + * registers (6 registers, 8 bytes each) and 304 for floating point registers + * (16 registers, 16 bytes each, on top of general purpose register). + */ + +struct x86_64_va_list { + int gp_offset; + int fp_offset; + void *overflow_arg_area; + void *reg_save_area; +}; + +#define VA_LIST_DECL(_args) \ + va_list _args##new; \ + struct x86_64_va_list *_args##x; +#define VA_LIST_PREP(_args) \ +do { \ + _args##x = (struct x86_64_va_list *)&_args##new; \ + _args##x->gp_offset = 6 * 8; /* GP registers exhausted */ \ + _args##x->fp_offset = 6 * 8 + 16 * 16; /* FP registers exhausted */ \ + _args##x->overflow_arg_area = (void *)_args; \ + _args##x->reg_save_area = NULL; \ +} while (0) +#define VA_LIST_CONV(_args) (_args##new) +#define VA_LIST_FREE(_args) +#define FMT_DECL(_fmt) \ + char *_fmt##copy; \ + int _fmt##len; +#define FMT_PREP(_fmt) \ +do { \ + _fmt##len = strlen(format) + 1; \ + _fmt##copy = kmalloc(_fmt##len, GFP_KERNEL); \ + if (_fmt##copy) { \ + memcpy(_fmt##copy, format, _fmt##len); \ + strip_l_modifier(_fmt##copy); \ + } \ +} while (0) +#define FMT_CONV(_fmt) (_fmt##copy ? _fmt##copy : format) +#define FMT_FREE(_fmt) kfree(_fmt##copy) + +#else /* !CONFIG_X86_64 */ + +#define VA_LIST_DECL(_args) +#define VA_LIST_PREP(_args) +#define VA_LIST_CONV(_args) (_args) +#define VA_LIST_FREE(_args) +#define FMT_DECL(_fmt) +#define FMT_PREP(_fmt) +#define FMT_CONV(_fmt) (format) +#define FMT_FREE(_fmt) + +#endif /* !CONFIG_X86_64 */ + +noregparm INT WIN_FUNC(_win_sprintf,12) + (char *buf, const char *format, ...) +{ + va_list args; + int res; + FMT_DECL(format) + + FMT_PREP(format); + va_start(args, format); + res = vsprintf(buf, FMT_CONV(format), args); + va_end(args); + FMT_FREE(format); + + TRACE2("buf: %p: %s", buf, buf); + return res; +} + +noregparm INT WIN_FUNC(swprintf,12) + (wchar_t *buf, const wchar_t *format, ...) +{ + TODO(); + EXIT2(return 0); +} + +noregparm INT WIN_FUNC(_win_vsprintf,3) + (char *str, const char *format, va_list ap) +{ + INT i; + VA_LIST_DECL(ap) + FMT_DECL(format) + + VA_LIST_PREP(ap); + FMT_PREP(format); + + i = vsprintf(str, FMT_CONV(format), VA_LIST_CONV(ap)); + TRACE2("str: %p: %s", str, str); + + FMT_FREE(format); + VA_LIST_FREE(ap); + EXIT2(return i); +} + +noregparm INT WIN_FUNC(_win_snprintf,12) + (char *buf, SIZE_T count, const char *format, ...) +{ + va_list args; + int res; + FMT_DECL(format) + + FMT_PREP(format); + va_start(args, format); + res = vsnprintf(buf, count, FMT_CONV(format), args); + va_end(args); + TRACE2("buf: %p: %s", buf, buf); + + FMT_FREE(format); + return res; +} + +noregparm INT WIN_FUNC(_win__snprintf,12) + (char *buf, SIZE_T count, const char *format, ...) +{ + va_list args; + int res; + FMT_DECL(format) + + FMT_PREP(format); + va_start(args, format); + res = vsnprintf(buf, count, FMT_CONV(format), args); + va_end(args); + TRACE2("buf: %p: %s", buf, buf); + + FMT_FREE(format); + return res; +} + +noregparm INT WIN_FUNC(_win_vsnprintf,4) + (char *str, SIZE_T size, const char *format, va_list ap) +{ + INT i; + VA_LIST_DECL(ap) + FMT_DECL(format) + + VA_LIST_PREP(ap); + FMT_PREP(format); + + i = vsnprintf(str, size, FMT_CONV(format), VA_LIST_CONV(ap)); + TRACE2("str: %p: %s", str, str); + + FMT_FREE(format); + VA_LIST_FREE(ap); + EXIT2(return i); +} + +noregparm INT WIN_FUNC(_win__vsnprintf,4) + (char *str, SIZE_T size, const char *format, va_list ap) +{ + INT i; + VA_LIST_DECL(ap) + FMT_DECL(format) + + VA_LIST_PREP(ap); + FMT_PREP(format); + + i = vsnprintf(str, size, FMT_CONV(format), VA_LIST_CONV(ap)); + TRACE2("str: %p: %s", str, str); + + FMT_FREE(format); + VA_LIST_FREE(ap); + EXIT2(return i); +} + +noregparm char *WIN_FUNC(_win_strncpy,3) + (char *dst, char *src, SIZE_T n) +{ + return strncpy(dst, src, n); +} + +noregparm SIZE_T WIN_FUNC(_win_strlen,1) + (const char *s) +{ + return strlen(s); +} + +noregparm INT WIN_FUNC(_win_strncmp,3) + (const char *s1, const char *s2, SIZE_T n) +{ + return strncmp(s1, s2, n); +} + +noregparm INT WIN_FUNC(_win_strcmp,2) + (const char *s1, const char *s2) +{ + return strcmp(s1, s2); +} + +noregparm INT WIN_FUNC(_win_stricmp,2) + (const char *s1, const char *s2) +{ + return stricmp(s1, s2); +} + +noregparm char *WIN_FUNC(_win_strncat,3) + (char *dest, const char *src, SIZE_T n) +{ + return strncat(dest, src, n); +} + +noregparm INT WIN_FUNC(_win_wcscmp,2) + (const wchar_t *s1, const wchar_t *s2) +{ + while (*s1 && *s1 == *s2) { + s1++; + s2++; + } + return *s1 - *s2; +} + +noregparm INT WIN_FUNC(_win_wcsicmp,2) + (const wchar_t *s1, const wchar_t *s2) +{ + while (*s1 && tolower((char)*s1) == tolower((char)*s2)) { + s1++; + s2++; + } + return tolower((char)*s1) - tolower((char)*s2); +} + +noregparm SIZE_T WIN_FUNC(_win_wcslen,1) + (const wchar_t *s) +{ + const wchar_t *t = s; + while (*t) + t++; + return t - s; +} + +noregparm wchar_t *WIN_FUNC(_win_wcsncpy,3) + (wchar_t *dest, const wchar_t *src, SIZE_T n) +{ + const wchar_t *s; + wchar_t *d; + s = src + n; + d = dest; + while (src < s && (*d++ = *src++)) + ; + if (s > src) + memset(d, 0, (s - src) * sizeof(wchar_t)); + return dest; +} + +noregparm wchar_t *WIN_FUNC(_win_wcscpy,2) + (wchar_t *dest, const wchar_t *src) +{ + wchar_t *d = dest; + while ((*d++ = *src++)) + ; + return dest; +} + +noregparm wchar_t *WIN_FUNC(_win_wcscat,2) + (wchar_t *dest, const wchar_t *src) +{ + wchar_t *d; + d = dest; + while (*d) + d++; + while ((*d++ = *src++)) + ; + return dest; +} + +noregparm INT WIN_FUNC(_win_towupper,1) + (wchar_t c) +{ + return toupper(c); +} + +noregparm INT WIN_FUNC(_win_towlower,1) + (wchar_t c) +{ + return tolower(c); +} + +noregparm INT WIN_FUNC(_win_tolower,1) + (INT c) +{ + return tolower(c); +} + +noregparm INT WIN_FUNC(_win_toupper,1) + (INT c) +{ + return toupper(c); +} + +noregparm void *WIN_FUNC(_win_strcpy,2) + (void *to, const void *from) +{ + return strcpy(to, from); +} + +noregparm char *WIN_FUNC(_win_strstr,2) + (const char *s1, const char *s2) +{ + return strstr(s1, s2); +} + +noregparm char *WIN_FUNC(_win_strchr,2) + (const char *s, int c) +{ + return strchr(s, c); +} + +noregparm char *WIN_FUNC(_win_strrchr,2) + (const char *s, int c) +{ + return strrchr(s, c); +} + +noregparm void *WIN_FUNC(_win_memmove,3) + (void *to, void *from, SIZE_T count) +{ + return memmove(to, from, count); +} + +noregparm void *WIN_FUNC(_win_memchr,3) + (const void *s, INT c, SIZE_T n) +{ + return memchr(s, c, n); +} + +noregparm void *WIN_FUNC(_win_memcpy,3) + (void *to, const void *from, SIZE_T n) +{ + return memcpy(to, from, n); +} + +noregparm void *WIN_FUNC(_win_memset,3) + (void *s, char c, SIZE_T count) +{ + return memset(s, c, count); +} + +noregparm int WIN_FUNC(_win_memcmp,3) + (void *s1, void *s2, SIZE_T n) +{ + return memcmp(s1, s2, n); +} + +noregparm void WIN_FUNC(_win_srand,1) + (UINT seed) +{ + net_srandom(seed); +} + +noregparm int WIN_FUNC(rand,0) + (void) +{ + char buf[6]; + int i, n; + + get_random_bytes(buf, sizeof(buf)); + for (n = i = 0; i < sizeof(buf) ; i++) + n += buf[i]; + return n; +} + +noregparm int WIN_FUNC(_win_atoi,1) + (const char *ptr) +{ + int i = simple_strtol(ptr, NULL, 10); + return i; +} + +noregparm int WIN_FUNC(_win_isprint,1) + (int c) +{ + return isprint(c); +} + +wstdcall s64 WIN_FUNC(_alldiv,2) + (s64 a, s64 b) +{ + return a / b; +} + +wstdcall u64 WIN_FUNC(_aulldiv,2) + (u64 a, u64 b) +{ + return a / b; +} + +wstdcall s64 WIN_FUNC(_allmul,2) + (s64 a, s64 b) +{ + return a * b; +} + +wstdcall u64 WIN_FUNC(_aullmul,2) + (u64 a, u64 b) +{ + return a * b; +} + +wstdcall s64 WIN_FUNC(_allrem,2) + (s64 a, s64 b) +{ + return a % b; +} + +wstdcall u64 WIN_FUNC(_aullrem,2) + (u64 a, u64 b) +{ + return a % b; +} + +__attribute__((regparm(3))) s64 WIN_FUNC(_allshl,2) + (s64 a, u8 b) +{ + return a << b; +} + +__attribute__((regparm(3))) u64 WIN_FUNC(_aullshl,2) + (u64 a, u8 b) +{ + return a << b; +} + +__attribute__((regparm(3))) s64 WIN_FUNC(_allshr,2) + (s64 a, u8 b) +{ + return a >> b; +} + +__attribute__((regparm(3))) u64 WIN_FUNC(_aullshr,2) + (u64 a, u8 b) +{ + return a >> b; +} + +int stricmp(const char *s1, const char *s2) +{ + while (*s1 && tolower(*s1) == tolower(*s2)) { + s1++; + s2++; + } + return *s1 - *s2; +} + +void dump_bytes(const char *ctx, const u8 *from, int len) +{ + int i, j; + u8 *buf; + + buf = kmalloc(len * 3 + 1, irql_gfp()); + if (!buf) { + ERROR("couldn't allocate memory"); + return; + } + for (i = j = 0; i < len; i++, j += 3) { + sprintf(&buf[j], "%02x ", from[i]); + } + buf[j] = 0; + printk(KERN_DEBUG "%s: %p: %s\n", ctx, from, buf); + kfree(buf); +} + +int crt_init(void) +{ + return 0; +} + +/* called when module is being removed */ +void crt_exit(void) +{ + EXIT4(return); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/Kconfig +++ linux-2.6.32/ubuntu/ndiswrapper/Kconfig @@ -0,0 +1,4 @@ +config NDISWRAPPER + tristate "Wrapper for Windows NDIS network drivers" + depends on NET + default m --- linux-2.6.32.orig/ubuntu/ndiswrapper/wrapmem.h +++ linux-2.6.32/ubuntu/ndiswrapper/wrapmem.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2006 Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _WRAPMEM_H_ + +/* set ALLOC_DEBUG to 1 to get information about memory used by both + * ndiswrapper and Windows driver by reading + * /proc/net/ndiswrapper/debug; this will also show memory leaks + * (memory allocated but not freed) when ndiswrapper module is + * unloaded. + + * ALLOC_DEBUG=2: details about individual allocations leaking is printed + * ALLOC_DEBUG=3: tags in ExAllocatePoolWithTag leaking printed +*/ + +//#ifndef ALLOC_DEBUG +//#define ALLOC_DEBUG 1 +//#endif + +enum alloc_type { ALLOC_TYPE_KMALLOC_ATOMIC, ALLOC_TYPE_KMALLOC_NON_ATOMIC, + ALLOC_TYPE_VMALLOC_ATOMIC, ALLOC_TYPE_VMALLOC_NON_ATOMIC, + ALLOC_TYPE_SLACK, ALLOC_TYPE_PAGES, ALLOC_TYPE_MAX }; + +int wrapmem_init(void); +void wrapmem_exit(void); +void *slack_kmalloc(size_t size); +void slack_kfree(void *ptr); +void wrapmem_info(void); + +#ifdef ALLOC_DEBUG +void *wrap_kmalloc(size_t size, gfp_t flags, const char *file, int line); +void *wrap_kzalloc(size_t size, gfp_t flags, const char *file, int line); +void wrap_kfree(void *ptr); +void *wrap_vmalloc(unsigned long size, const char *file, int line); +void *wrap__vmalloc(unsigned long size, gfp_t flags, pgprot_t prot, + const char *file, int line); +void wrap_vfree(void *ptr); +void *wrap_alloc_pages(gfp_t flags, unsigned int size, + const char *file, int line); +void wrap_free_pages(unsigned long ptr, int order); +int alloc_size(enum alloc_type type); + +#ifndef _WRAPMEM_C_ +#undef kmalloc +#undef kzalloc +#undef kfree +#undef vmalloc +#undef __vmalloc +#undef vfree +#define kmalloc(size, flags) \ + wrap_kmalloc(size, flags, __FILE__, __LINE__) +#define kzalloc(size, flags) \ + wrap_kzalloc(size, flags, __FILE__, __LINE__) +#define vmalloc(size) \ + wrap_vmalloc(size, __FILE__, __LINE__) +#define __vmalloc(size, flags, prot) \ + wrap__vmalloc(size, flags, prot, __FILE__, __LINE__) +#define kfree(ptr) wrap_kfree(ptr) +#define vfree(ptr) wrap_vfree(ptr) + +#define wrap_get_free_pages(flags, size) \ + wrap_alloc_pages(flags, size, __FILE__, __LINE__) +#undef free_pages +#define free_pages(ptr, order) wrap_free_pages(ptr, order) + +#if ALLOC_DEBUG > 1 +void *wrap_ExAllocatePoolWithTag(enum pool_type pool_type, SIZE_T size, + ULONG tag, const char *file, int line); +#define ExAllocatePoolWithTag(pool_type, size, tag) \ + wrap_ExAllocatePoolWithTag(pool_type, size, tag, __FILE__, __LINE__) +#endif + +#endif // _WRAPMEM_C_ + +#else + +#define wrap_get_free_pages(flags, size) \ + (void *)__get_free_pages(flags, get_order(size)) + +#endif // ALLOC_DEBUG + +#endif --- linux-2.6.32.orig/ubuntu/ndiswrapper/wrapndis.h +++ linux-2.6.32/ubuntu/ndiswrapper/wrapndis.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _WRAPNDIS_H_ +#define _WRAPNDIS_H_ + +#include "ndis.h" +#include "pnp.h" + +int wrapndis_init(void); +void wrapndis_exit(void); + +NDIS_STATUS mp_reset(struct ndis_device *wnd); + +NDIS_STATUS mp_request(enum ndis_request_type request, + struct ndis_device *wnd, ndis_oid oid, + void *buf, ULONG buflen, ULONG *written, ULONG *needed); + +static inline NDIS_STATUS mp_query_info(struct ndis_device *wnd, + ndis_oid oid, void *buf, ULONG buflen, + ULONG *written, ULONG *needed) +{ + return mp_request(NdisRequestQueryInformation, wnd, oid, + buf, buflen, written, needed); +} + +static inline NDIS_STATUS mp_set_info(struct ndis_device *wnd, + ndis_oid oid, void *buf, ULONG buflen, + ULONG *written, ULONG *needed) +{ + return mp_request(NdisRequestSetInformation, wnd, oid, + buf, buflen, written, needed); +} + +static inline NDIS_STATUS mp_query(struct ndis_device *wnd, ndis_oid oid, + void *buf, ULONG buflen) +{ + return mp_request(NdisRequestQueryInformation, wnd, oid, + buf, buflen, NULL, NULL); +} + +static inline NDIS_STATUS mp_query_int(struct ndis_device *wnd, + ndis_oid oid, ULONG *data) +{ + return mp_request(NdisRequestQueryInformation, wnd, oid, + data, sizeof(ULONG), NULL, NULL); +} + +static inline NDIS_STATUS mp_set(struct ndis_device *wnd, ndis_oid oid, + void *buf, ULONG buflen) +{ + return mp_request(NdisRequestSetInformation, wnd, oid, + buf, buflen, NULL, NULL); +} + +static inline NDIS_STATUS mp_set_int(struct ndis_device *wnd, + ndis_oid oid, ULONG data) +{ + return mp_request(NdisRequestSetInformation, wnd, oid, + &data, sizeof(ULONG), NULL, NULL); +} + +void free_tx_packet(struct ndis_device *wnd, struct ndis_packet *packet, + NDIS_STATUS status); +int init_ndis_driver(struct driver_object *drv_obj); +NDIS_STATUS ndis_reinit(struct ndis_device *wnd); +void set_media_state(struct ndis_device *wnd, enum ndis_media_state state); + +void hangcheck_add(struct ndis_device *wnd); +void hangcheck_del(struct ndis_device *wnd); + +driver_dispatch_t winNdisDispatchPnp; +driver_dispatch_t winNdisDispatchPower; +driver_dispatch_t winNdisDispatchDeviceControl; + +struct iw_statistics *get_iw_stats(struct net_device *dev); + +#endif --- linux-2.6.32.orig/ubuntu/ndiswrapper/pnp.h +++ linux-2.6.32/ubuntu/ndiswrapper/pnp.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2005 Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _PNP_H_ +#define _PNP_H_ + +#include "ntoskernel.h" +#include "ndis.h" +#include "wrapndis.h" + +NTSTATUS pnp_start_device(struct wrap_device *wd); +NTSTATUS pnp_stop_device(struct wrap_device *wd); +NTSTATUS pnp_remove_device(struct wrap_device *wd); + +int wrap_pnp_start_pci_device(struct pci_dev *pdev, + const struct pci_device_id *ent); +void __devexit wrap_pnp_remove_pci_device(struct pci_dev *pdev); +int wrap_pnp_suspend_pci_device(struct pci_dev *pdev, pm_message_t state); +int wrap_pnp_resume_pci_device(struct pci_dev *pdev); + +#ifdef ENABLE_USB +int wrap_pnp_start_usb_device(struct usb_interface *intf, + const struct usb_device_id *usb_id); +void wrap_pnp_remove_usb_device(struct usb_interface *intf); +int wrap_pnp_suspend_usb_device(struct usb_interface *intf, + pm_message_t state); +int wrap_pnp_resume_usb_device(struct usb_interface *intf); +#endif + +#endif --- linux-2.6.32.orig/ubuntu/ndiswrapper/iw_ndis.c +++ linux-2.6.32/ubuntu/ndiswrapper/iw_ndis.c @@ -0,0 +1,1973 @@ + /* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "iw_ndis.h" +#include "wrapndis.h" + +static int freq_chan[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442, + 2447, 2452, 2457, 2462, 2467, 2472, 2484 }; + +static const char *network_names[] = {"IEEE 802.11FH", "IEEE 802.11b", + "IEEE 802.11a", "IEEE 802.11g", "Auto"}; + +int set_essid(struct ndis_device *wnd, const char *ssid, int ssid_len) +{ + NDIS_STATUS res; + struct ndis_essid req; + + if (ssid_len > NDIS_ESSID_MAX_SIZE) + return -EINVAL; + + memset(&req, 0, sizeof(req)); + req.length = ssid_len; + if (ssid_len) + memcpy(&req.essid, ssid, ssid_len); + + res = mp_set(wnd, OID_802_11_SSID, &req, sizeof(req)); + if (res) { + WARNING("setting essid failed (%08X)", res); + EXIT2(return -EINVAL); + } + memcpy(&wnd->essid, &req, sizeof(req)); + EXIT2(return 0); +} + +static int set_assoc_params(struct ndis_device *wnd) +{ + TRACE2("wpa_version=0x%x auth_alg=0x%x key_mgmt=0x%x " + "cipher_pairwise=0x%x cipher_group=0x%x", + wnd->iw_auth_wpa_version, wnd->iw_auth_80211_alg, + wnd->iw_auth_key_mgmt, wnd->iw_auth_cipher_pairwise, + wnd->iw_auth_cipher_group); + set_auth_mode(wnd); + set_priv_filter(wnd); + set_encr_mode(wnd); + return 0; +} + +static int iw_set_essid(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + char ssid[NDIS_ESSID_MAX_SIZE]; + int length; + + ENTER2(""); + memset(ssid, 0, sizeof(ssid)); + /* there is no way to turn off essid other than to set to + * random bytes; instead, we use off to mean any */ + if (wrqu->essid.flags) { + /* wireless-tools prior to version 20 add extra 1, and + * later than 20 don't! Deal with that mess */ + length = wrqu->essid.length - 1; + if (length > 0) + length--; + while (length < wrqu->essid.length && extra[length]) + length++; + TRACE2("%d", length); + if (length <= 0 || length > NDIS_ESSID_MAX_SIZE) + EXIT2(return -EINVAL); + } else + length = 0; + + set_assoc_params(wnd); + + memcpy(ssid, extra, length); + if (set_essid(wnd, ssid, length)) + EXIT2(return -EINVAL); + + EXIT2(return 0); +} + +static int iw_get_essid(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + struct ndis_essid req; + + ENTER2(""); + memset(&req, 0, sizeof(req)); + res = mp_query(wnd, OID_802_11_SSID, &req, sizeof(req)); + if (res) { + WARNING("getting essid failed (%08X)", res); + EXIT2(return -EOPNOTSUPP); + } + memcpy(extra, req.essid, req.length); + if (req.length > 0) + wrqu->essid.flags = 1; + else + wrqu->essid.flags = 0; + wrqu->essid.length = req.length; + EXIT2(return 0); +} + +int set_infra_mode(struct ndis_device *wnd, + enum ndis_infrastructure_mode mode) +{ + NDIS_STATUS res; + unsigned int i; + + ENTER2("%d", mode); + res = mp_query_int(wnd, OID_802_11_INFRASTRUCTURE_MODE, + &wnd->infrastructure_mode); + if (res != NDIS_STATUS_SUCCESS) { + WARNING("getting operating mode to failed (%08X)", res); + EXIT2(return -EINVAL); + } + if (wnd->infrastructure_mode == mode) + EXIT2(return 0); + res = mp_set_int(wnd, OID_802_11_INFRASTRUCTURE_MODE, mode); + if (res) { + WARNING("setting operating mode to %d failed (%08X)", + mode, res); + EXIT2(return -EINVAL); + } + /* NDIS drivers clear keys when infrastructure mode is + * changed. But Linux tools assume otherwise. So set the + * keys */ + if (wnd->iw_auth_key_mgmt == 0 || + wnd->iw_auth_key_mgmt == IW_AUTH_KEY_MGMT_802_1X) { + for (i = 0; i < MAX_ENCR_KEYS; i++) { + if (wnd->encr_info.keys[i].length > 0) + add_wep_key(wnd, wnd->encr_info.keys[i].key, + wnd->encr_info.keys[i].length, i); + } + } + wnd->infrastructure_mode = mode; + EXIT2(return 0); +} + +static int iw_set_infra_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + enum ndis_infrastructure_mode ndis_mode; + + ENTER2("%d", wrqu->mode); + switch (wrqu->mode) { + case IW_MODE_ADHOC: + ndis_mode = Ndis802_11IBSS; + break; + case IW_MODE_INFRA: + ndis_mode = Ndis802_11Infrastructure; + break; + case IW_MODE_AUTO: + ndis_mode = Ndis802_11AutoUnknown; + break; + default: + EXIT2(return -EINVAL); + } + + if (set_infra_mode(wnd, ndis_mode)) + EXIT2(return -EINVAL); + + EXIT2(return 0); +} + +static int iw_get_infra_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + int ndis_mode, iw_mode; + NDIS_STATUS res; + + ENTER2(""); + res = mp_query_int(wnd, OID_802_11_INFRASTRUCTURE_MODE, &ndis_mode); + if (res) { + WARNING("getting operating mode failed (%08X)", res); + EXIT2(return -EOPNOTSUPP); + } + + switch(ndis_mode) { + case Ndis802_11IBSS: + iw_mode = IW_MODE_ADHOC; + break; + case Ndis802_11Infrastructure: + iw_mode = IW_MODE_INFRA; + break; + case Ndis802_11AutoUnknown: + iw_mode = IW_MODE_AUTO; + break; + default: + ERROR("invalid operating mode (%u)", ndis_mode); + EXIT2(return -EINVAL); + } + wrqu->mode = iw_mode; + EXIT2(return 0); +} + +static const char *network_type_to_name(int net_type) +{ + if (net_type >= 0 && + net_type < (sizeof(network_names)/sizeof(network_names[0]))) + return network_names[net_type]; + else + return network_names[sizeof(network_names) / + sizeof(network_names[0]) - 1]; +} + +static int iw_get_network_type(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + unsigned int network_type; + NDIS_STATUS res; + + ENTER2(""); + res = mp_query_int(wnd, OID_802_11_NETWORK_TYPE_IN_USE, + &network_type); + if (res) { + WARNING("getting network type failed: %08X", res); + network_type = -1; + } + strncpy(wrqu->name, network_type_to_name(network_type), + sizeof(wrqu->name) - 1); + wrqu->name[sizeof(wrqu->name)-1] = 0; + return 0; +} + +static int iw_get_freq(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + struct ndis_configuration req; + + ENTER2(""); + memset(&req, 0, sizeof(req)); + res = mp_query(wnd, OID_802_11_CONFIGURATION, &req, sizeof(req)); + if (res) { + WARNING("getting configuration failed (%08X)", res); + EXIT2(return -EOPNOTSUPP); + } + + memset(&(wrqu->freq), 0, sizeof(struct iw_freq)); + + /* see comment in wireless.h above the "struct iw_freq" + definition for an explanation of this if + NOTE: 1000000 is due to the kHz + */ + if (req.ds_config > 1000000) { + wrqu->freq.m = req.ds_config / 10; + wrqu->freq.e = 1; + } + else + wrqu->freq.m = req.ds_config; + + /* convert from kHz to Hz */ + wrqu->freq.e += 3; + + return 0; +} + +static int iw_set_freq(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + struct ndis_configuration req; + + ENTER2(""); + /* this OID is valid only when not associated */ + if (netif_carrier_ok(wnd->net_dev)) + EXIT2(return 0); + memset(&req, 0, sizeof(req)); + res = mp_query(wnd, OID_802_11_CONFIGURATION, &req, sizeof(req)); + if (res) { + WARNING("getting configuration failed (%08X)", res); + EXIT2(return 0); + } + + if (wrqu->freq.m < 1000 && wrqu->freq.e == 0) { + if (wrqu->freq.m >= 1 && + wrqu->freq.m <= (sizeof(freq_chan) / sizeof(freq_chan[0]))) + req.ds_config = freq_chan[wrqu->freq.m - 1] * 1000; + else + return -EINVAL; + } else { + int i; + req.ds_config = wrqu->freq.m; + for (i = wrqu->freq.e; i > 0; i--) + req.ds_config *= 10; + req.ds_config /= 1000; + } + res = mp_set(wnd, OID_802_11_CONFIGURATION, &req, sizeof(req)); + if (res) + WARNING("setting configuration failed (%08X)", res); + return 0; +} + +static int iw_get_tx_power(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ndis_tx_power_level ndis_power; + NDIS_STATUS res; + + ENTER2(""); + res = mp_query(wnd, OID_802_11_TX_POWER_LEVEL, + &ndis_power, sizeof(ndis_power)); + if (res) + return -EOPNOTSUPP; + wrqu->txpower.flags = IW_TXPOW_MWATT; + wrqu->txpower.disabled = 0; + wrqu->txpower.fixed = 0; + wrqu->txpower.value = ndis_power; + return 0; +} + +static int iw_set_tx_power(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ndis_tx_power_level ndis_power; + NDIS_STATUS res; + + ENTER2(""); + if (wrqu->txpower.disabled) + ndis_power = 0; + else { + if (wrqu->txpower.flags == IW_TXPOW_MWATT) + ndis_power = wrqu->txpower.value; + else { // wrqu->txpower.flags == IW_TXPOW_DBM + if (wrqu->txpower.value > 20) + ndis_power = 128; + else if (wrqu->txpower.value < -43) + ndis_power = 127; + else { + signed char tmp; + tmp = wrqu->txpower.value; + tmp = -12 - tmp; + tmp <<= 2; + ndis_power = (unsigned char)tmp; + } + } + } + TRACE2("%d", ndis_power); + res = mp_set(wnd, OID_802_11_TX_POWER_LEVEL, + &ndis_power, sizeof(ndis_power)); + if (res) + EXIT2(return -EOPNOTSUPP); + if (ndis_power == 0) + res = disassociate(wnd, 0); + EXIT2(return 0); +} + +static int iw_get_bitrate(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ULONG ndis_rate; + int res; + + ENTER2(""); + res = mp_query(wnd, OID_GEN_LINK_SPEED, &ndis_rate, sizeof(ndis_rate)); + if (res) { + WARNING("getting bitrate failed (%08X)", res); + ndis_rate = 0; + } + + wrqu->bitrate.value = ndis_rate * 100; + return 0; +} + +static int iw_set_bitrate(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + int i, n; + NDIS_STATUS res; + ndis_rates_ex rates; + + ENTER2(""); + if (wrqu->bitrate.fixed == 0) + EXIT2(return 0); + + res = mp_query_info(wnd, OID_802_11_SUPPORTED_RATES, &rates, + sizeof(rates), &n, NULL); + if (res) { + WARNING("getting bit rate failed (%08X)", res); + EXIT2(return 0); + } + for (i = 0; i < n; i++) { + if (rates[i] & 0x80) + continue; + if ((rates[i] & 0x7f) * 500000 > wrqu->bitrate.value) { + TRACE2("setting rate %d to 0", + (rates[i] & 0x7f) * 500000); + rates[i] = 0; + } + } + + res = mp_set(wnd, OID_802_11_DESIRED_RATES, &rates, n); + if (res) { + WARNING("setting bit rate failed (%08X)", res); + EXIT2(return 0); + } + + return 0; +} + +static int iw_set_dummy(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + /* Do nothing. Used for ioctls that are not implemented. */ + return 0; +} + +static int iw_get_rts_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ndis_rts_threshold threshold; + NDIS_STATUS res; + + ENTER2(""); + res = mp_query(wnd, OID_802_11_RTS_THRESHOLD, + &threshold, sizeof(threshold)); + if (res) + return -EOPNOTSUPP; + + wrqu->rts.value = threshold; + return 0; +} + +static int iw_set_rts_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ndis_rts_threshold threshold; + NDIS_STATUS res; + + ENTER2(""); + threshold = wrqu->rts.value; + res = mp_set(wnd, OID_802_11_RTS_THRESHOLD, + &threshold, sizeof(threshold)); + if (res == NDIS_STATUS_INVALID_DATA) + return -EINVAL; + if (res) + return -EOPNOTSUPP; + + return 0; +} + +static int iw_get_frag_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ndis_fragmentation_threshold frag_threshold; + NDIS_STATUS res; + + ENTER2(""); + res = mp_query(wnd, OID_802_11_FRAGMENTATION_THRESHOLD, + &frag_threshold, sizeof(frag_threshold)); + if (res) + return -ENOTSUPP; + + wrqu->frag.value = frag_threshold; + return 0; +} + +static int iw_set_frag_threshold(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + ndis_rts_threshold threshold; + NDIS_STATUS res; + + ENTER2(""); + threshold = wrqu->frag.value; + res = mp_set(wnd, OID_802_11_FRAGMENTATION_THRESHOLD, + &threshold, sizeof(threshold)); + if (res == NDIS_STATUS_INVALID_DATA) + return -EINVAL; + if (res) + return -EOPNOTSUPP; + return 0; +} + +int get_ap_address(struct ndis_device *wnd, mac_address ap_addr) +{ + NDIS_STATUS res; + + res = mp_query(wnd, OID_802_11_BSSID, ap_addr, ETH_ALEN); + TRACE2(MACSTRSEP, MAC2STR(ap_addr)); + if (res) { + TRACE2("res: %08X", res); + memset(ap_addr, 0x0, ETH_ALEN); + EXIT2(return -EOPNOTSUPP); + } + EXIT2(return 0); +} + +static int iw_get_ap_address(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + mac_address ap_addr; + + ENTER2(""); + get_ap_address(wnd, ap_addr); + memcpy(wrqu->ap_addr.sa_data, ap_addr, ETH_ALEN); + wrqu->ap_addr.sa_family = ARPHRD_ETHER; + EXIT2(return 0); +} + +static int iw_set_ap_address(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + mac_address ap_addr; + + ENTER2(""); + memcpy(ap_addr, wrqu->ap_addr.sa_data, ETH_ALEN); + TRACE2(MACSTRSEP, MAC2STR(ap_addr)); + res = mp_set(wnd, OID_802_11_BSSID, ap_addr, ETH_ALEN); + /* user apps may set ap's mac address, which is not required; + * they may fail to work if this function fails, so return + * success */ + if (res) + WARNING("setting AP mac address failed (%08X)", res); + + EXIT2(return 0); +} + +int set_iw_auth_mode(struct ndis_device *wnd, int wpa_version, + int auth_80211_alg) +{ + NDIS_STATUS res; + ULONG auth_mode; + + ENTER2("%d, %d", wpa_version, auth_80211_alg); + if (wpa_version & IW_AUTH_WPA_VERSION_WPA2) { + if (wnd->iw_auth_key_mgmt & IW_AUTH_KEY_MGMT_802_1X) + auth_mode = Ndis802_11AuthModeWPA2; + else + auth_mode = Ndis802_11AuthModeWPA2PSK; + } else if (wpa_version & IW_AUTH_WPA_VERSION_WPA) { + if (wnd->iw_auth_key_mgmt & IW_AUTH_KEY_MGMT_802_1X) + auth_mode = Ndis802_11AuthModeWPA; + else if (wnd->iw_auth_key_mgmt & IW_AUTH_KEY_MGMT_PSK) + auth_mode = Ndis802_11AuthModeWPAPSK; + else + auth_mode = Ndis802_11AuthModeWPANone; + } else if (auth_80211_alg & IW_AUTH_ALG_SHARED_KEY) { + if (auth_80211_alg & IW_AUTH_ALG_OPEN_SYSTEM) + auth_mode = Ndis802_11AuthModeAutoSwitch; + else + auth_mode = Ndis802_11AuthModeShared; + } else + auth_mode = Ndis802_11AuthModeOpen; + + res = mp_set_int(wnd, OID_802_11_AUTHENTICATION_MODE, auth_mode); + if (res) { + WARNING("setting auth mode to %u failed (%08X)", + auth_mode, res); + if (res == NDIS_STATUS_INVALID_DATA) + EXIT2(return -EINVAL); + return -EOPNOTSUPP; + } + wnd->iw_auth_wpa_version = wpa_version; + wnd->iw_auth_80211_alg = auth_80211_alg; + EXIT2(return 0); +} + +int set_ndis_auth_mode(struct ndis_device *wnd, ULONG auth_mode) +{ + NDIS_STATUS res; + + ENTER2("%d", auth_mode); + res = mp_set_int(wnd, OID_802_11_AUTHENTICATION_MODE, auth_mode); + if (res) { + WARNING("setting auth mode to %u failed (%08X)", + auth_mode, res); + if (res == NDIS_STATUS_INVALID_DATA) + EXIT2(return -EINVAL); + return -EOPNOTSUPP; + } + switch (auth_mode) { + case Ndis802_11AuthModeWPA: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_WPA; + wnd->iw_auth_key_mgmt = IW_AUTH_KEY_MGMT_802_1X; + break; + case Ndis802_11AuthModeWPAPSK: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_WPA; + wnd->iw_auth_key_mgmt = IW_AUTH_KEY_MGMT_PSK; + case Ndis802_11AuthModeWPANone: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_DISABLED; + wnd->iw_auth_key_mgmt = IW_AUTH_KEY_MGMT_PSK; + break; + case Ndis802_11AuthModeWPA2: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_WPA2; + wnd->iw_auth_key_mgmt = IW_AUTH_KEY_MGMT_802_1X; + break; + case Ndis802_11AuthModeWPA2PSK: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_WPA2; + wnd->iw_auth_key_mgmt = IW_AUTH_KEY_MGMT_PSK; + break; + case Ndis802_11AuthModeOpen: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_DISABLED; + wnd->iw_auth_80211_alg = IW_AUTH_ALG_OPEN_SYSTEM; + break; + case Ndis802_11AuthModeShared: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_DISABLED; + wnd->iw_auth_80211_alg = IW_AUTH_ALG_SHARED_KEY; + break; + case Ndis802_11AuthModeAutoSwitch: + wnd->iw_auth_wpa_version = IW_AUTH_WPA_VERSION_DISABLED; + wnd->iw_auth_80211_alg = IW_AUTH_ALG_SHARED_KEY; + wnd->iw_auth_80211_alg |= IW_AUTH_ALG_OPEN_SYSTEM; + break; + default: + WARNING("invalid authentication algorithm: %d", auth_mode); + break; + } + EXIT2(return 0); +} + +int set_auth_mode(struct ndis_device *wnd) +{ + return set_iw_auth_mode(wnd, wnd->iw_auth_wpa_version, + wnd->iw_auth_80211_alg); +} + +int get_ndis_auth_mode(struct ndis_device *wnd) +{ + ULONG mode; + NDIS_STATUS res; + + res = mp_query_int(wnd, OID_802_11_AUTHENTICATION_MODE, &mode); + if (res) { + WARNING("getting authentication mode failed (%08X)", res); + EXIT2(return -EOPNOTSUPP); + } + TRACE2("%d", mode); + return mode; +} + +int set_iw_encr_mode(struct ndis_device *wnd, int cipher_pairwise, + int cipher_groupwise) +{ + NDIS_STATUS res; + ULONG ndis_mode; + + ENTER2("%d, %d", cipher_pairwise, cipher_groupwise); + if (cipher_pairwise & IW_AUTH_CIPHER_CCMP) + ndis_mode = Ndis802_11Encryption3Enabled; + else if (cipher_pairwise & IW_AUTH_CIPHER_TKIP) + ndis_mode = Ndis802_11Encryption2Enabled; + else if (cipher_pairwise & + (IW_AUTH_CIPHER_WEP40 | IW_AUTH_CIPHER_WEP104)) + ndis_mode = Ndis802_11Encryption1Enabled; + else if (cipher_groupwise & IW_AUTH_CIPHER_CCMP) + ndis_mode = Ndis802_11Encryption3Enabled; + else if (cipher_groupwise & IW_AUTH_CIPHER_TKIP) + ndis_mode = Ndis802_11Encryption2Enabled; + else + ndis_mode = Ndis802_11EncryptionDisabled; + + res = mp_set_int(wnd, OID_802_11_ENCRYPTION_STATUS, ndis_mode); + if (res) { + WARNING("setting encryption mode to %u failed (%08X)", + ndis_mode, res); + if (res == NDIS_STATUS_INVALID_DATA) + EXIT2(return -EINVAL); + return -EOPNOTSUPP; + } + wnd->iw_auth_cipher_pairwise = cipher_pairwise; + wnd->iw_auth_cipher_group = cipher_groupwise; + EXIT2(return 0); +} + +int set_encr_mode(struct ndis_device *wnd) +{ + return set_iw_encr_mode(wnd, wnd->iw_auth_cipher_pairwise, + wnd->iw_auth_cipher_group); +} + +int get_ndis_encr_mode(struct ndis_device *wnd) +{ + ULONG mode; + NDIS_STATUS res; + + ENTER2(""); + res = mp_query_int(wnd, OID_802_11_ENCRYPTION_STATUS, &mode); + if (res) { + WARNING("getting encryption status failed (%08X)", res); + EXIT2(return -EOPNOTSUPP); + } else + EXIT2(return mode); +} + +static int iw_get_encr(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + int index, mode; + struct encr_info *encr_info = &wnd->encr_info; + + ENTER2("wnd = %p", wnd); + wrqu->data.length = 0; + extra[0] = 0; + + index = (wrqu->encoding.flags & IW_ENCODE_INDEX); + TRACE2("index = %u", index); + if (index > 0) + index--; + else + index = encr_info->tx_key_index; + + if (index < 0 || index >= MAX_ENCR_KEYS) { + WARNING("encryption index out of range (%u)", index); + EXIT2(return -EINVAL); + } + + if (index != encr_info->tx_key_index) { + if (encr_info->keys[index].length > 0) { + wrqu->data.flags |= IW_ENCODE_ENABLED; + wrqu->data.length = encr_info->keys[index].length; + memcpy(extra, encr_info->keys[index].key, + encr_info->keys[index].length); + } + else + wrqu->data.flags |= IW_ENCODE_DISABLED; + + EXIT2(return 0); + } + + /* transmit key */ + mode = get_ndis_encr_mode(wnd); + if (mode < 0) + EXIT2(return -EOPNOTSUPP); + + if (mode == Ndis802_11EncryptionDisabled || + mode == Ndis802_11EncryptionNotSupported) + wrqu->data.flags |= IW_ENCODE_DISABLED; + else { + if (mode == Ndis802_11Encryption1KeyAbsent || + mode == Ndis802_11Encryption2KeyAbsent || + mode == Ndis802_11Encryption3KeyAbsent) + wrqu->data.flags |= IW_ENCODE_NOKEY; + else { + wrqu->data.flags |= IW_ENCODE_ENABLED; + wrqu->encoding.flags |= index+1; + wrqu->data.length = encr_info->keys[index].length; + memcpy(extra, encr_info->keys[index].key, + encr_info->keys[index].length); + } + } + mode = get_ndis_auth_mode(wnd); + if (mode < 0) + EXIT2(return -EOPNOTSUPP); + + if (mode == Ndis802_11AuthModeOpen) + wrqu->data.flags |= IW_ENCODE_OPEN; + else if (mode == Ndis802_11AuthModeAutoSwitch) + wrqu->data.flags |= IW_ENCODE_RESTRICTED; + else // Ndis802_11AuthModeAutoSwitch, Ndis802_11AuthModeWPA etc. + wrqu->data.flags |= IW_ENCODE_RESTRICTED; + + EXIT2(return 0); +} + +/* index must be 0 - N, as per NDIS */ +int add_wep_key(struct ndis_device *wnd, char *key, int key_len, + int index) +{ + struct ndis_encr_key ndis_key; + NDIS_STATUS res; + + ENTER2("key index: %d, length: %d", index, key_len); + if (key_len <= 0 || key_len > NDIS_ENCODING_TOKEN_MAX) { + WARNING("invalid key length (%d)", key_len); + EXIT2(return -EINVAL); + } + if (index < 0 || index >= MAX_ENCR_KEYS) { + WARNING("invalid key index (%d)", index); + EXIT2(return -EINVAL); + } + ndis_key.struct_size = sizeof(ndis_key); + ndis_key.length = key_len; + memcpy(&ndis_key.key, key, key_len); + ndis_key.index = index; + + if (index == wnd->encr_info.tx_key_index) { + ndis_key.index |= (1 << 31); + res = set_iw_encr_mode(wnd, IW_AUTH_CIPHER_WEP104, + IW_AUTH_CIPHER_NONE); + if (res) + WARNING("encryption couldn't be enabled (%08X)", res); + } + TRACE2("key %d: " MACSTRSEP, index, MAC2STR(key)); + res = mp_set(wnd, OID_802_11_ADD_WEP, &ndis_key, sizeof(ndis_key)); + if (res) { + WARNING("adding encryption key %d failed (%08X)", + index+1, res); + EXIT2(return -EINVAL); + } + + /* Atheros driver messes up ndis_key during ADD_WEP, so + * don't rely on that; instead use info in key and key_len */ + wnd->encr_info.keys[index].length = key_len; + memcpy(&wnd->encr_info.keys[index].key, key, key_len); + + EXIT2(return 0); +} + +/* remove_key is for both wep and wpa */ +static int remove_key(struct ndis_device *wnd, int index, + mac_address bssid) +{ + NDIS_STATUS res; + if (wnd->encr_info.keys[index].length == 0) + EXIT2(return 0); + wnd->encr_info.keys[index].length = 0; + memset(&wnd->encr_info.keys[index].key, 0, + sizeof(wnd->encr_info.keys[index].length)); + if (wnd->iw_auth_cipher_pairwise == IW_AUTH_CIPHER_TKIP || + wnd->iw_auth_cipher_pairwise == IW_AUTH_CIPHER_CCMP || + wnd->iw_auth_cipher_group == IW_AUTH_CIPHER_TKIP || + wnd->iw_auth_cipher_group == IW_AUTH_CIPHER_CCMP) { + struct ndis_remove_key remove_key; + remove_key.struct_size = sizeof(remove_key); + remove_key.index = index; + if (bssid) { + /* pairwise key */ + if (memcmp(bssid, "\xff\xff\xff\xff\xff\xff", + ETH_ALEN) != 0) + remove_key.index |= (1 << 30); + memcpy(remove_key.bssid, bssid, + sizeof(remove_key.bssid)); + } else + memset(remove_key.bssid, 0xff, + sizeof(remove_key.bssid)); + if (mp_set(wnd, OID_802_11_REMOVE_KEY, + &remove_key, sizeof(remove_key))) + EXIT2(return -EINVAL); + } else { + ndis_key_index keyindex = index; + res = mp_set_int(wnd, OID_802_11_REMOVE_WEP, keyindex); + if (res) { + WARNING("removing encryption key %d failed (%08X)", + keyindex, res); + EXIT2(return -EINVAL); + } + } + /* if it is transmit key, disable encryption */ + if (index == wnd->encr_info.tx_key_index) { + res = set_iw_encr_mode(wnd, IW_AUTH_CIPHER_NONE, + IW_AUTH_CIPHER_NONE); + if (res) + WARNING("changing encr status failed (%08X)", res); + } + TRACE2("key %d removed", index); + EXIT2(return 0); +} + +static int iw_set_wep(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + unsigned int index, key_len; + struct encr_info *encr_info = &wnd->encr_info; + unsigned char *key; + + ENTER2(""); + index = (wrqu->encoding.flags & IW_ENCODE_INDEX); + TRACE2("index = %u", index); + + /* iwconfig gives index as 1 - N */ + if (index > 0) + index--; + else + index = encr_info->tx_key_index; + + if (index < 0 || index >= MAX_ENCR_KEYS) { + WARNING("encryption index out of range (%u)", index); + EXIT2(return -EINVAL); + } + + /* remove key if disabled */ + if (wrqu->data.flags & IW_ENCODE_DISABLED) { + if (remove_key(wnd, index, NULL)) + EXIT2(return -EINVAL); + else + EXIT2(return 0); + } + + /* global encryption state (for all keys) */ + if (wrqu->data.flags & IW_ENCODE_OPEN) + res = set_ndis_auth_mode(wnd, Ndis802_11AuthModeOpen); + else // if (wrqu->data.flags & IW_ENCODE_RESTRICTED) + res = set_ndis_auth_mode(wnd, Ndis802_11AuthModeShared); + if (res) { + WARNING("setting authentication mode failed (%08X)", res); + EXIT2(return -EINVAL); + } + + TRACE2("key length: %d", wrqu->data.length); + + if (wrqu->data.length > 0) { + key_len = wrqu->data.length; + key = extra; + } else { // must be set as tx key + if (encr_info->keys[index].length == 0) { + WARNING("key %d is not set", index+1); + EXIT2(return -EINVAL); + } + key_len = encr_info->keys[index].length; + key = encr_info->keys[index].key; + encr_info->tx_key_index = index; + } + + if (add_wep_key(wnd, key, key_len, index)) + EXIT2(return -EINVAL); + + if (index == encr_info->tx_key_index) { + /* if transmit key is at index other than 0, some + * drivers, at least Atheros and TI, want another + * (global) non-transmit key to be set; don't know why */ + if (index != 0) { + int i; + for (i = 0; i < MAX_ENCR_KEYS; i++) + if (i != index && + encr_info->keys[i].length != 0) + break; + if (i == MAX_ENCR_KEYS) { + if (index == 0) + i = index + 1; + else + i = index - 1; + if (add_wep_key(wnd, key, key_len, i)) + WARNING("couldn't add broadcast key" + " at %d", i); + } + } + /* ndis drivers want essid to be set after setting encr */ + set_essid(wnd, wnd->essid.essid, wnd->essid.length); + } + EXIT2(return 0); +} + +static int iw_set_nick(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + + if (wrqu->data.length >= IW_ESSID_MAX_SIZE || wrqu->data.length <= 0) + return -EINVAL; + memcpy(wnd->nick, extra, wrqu->data.length); + wnd->nick[wrqu->data.length] = 0; + return 0; +} + +static int iw_get_nick(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + + wrqu->data.length = strlen(wnd->nick); + memcpy(extra, wnd->nick, wrqu->data.length); + return 0; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) && !defined(IW_REQUEST_FLAG_COMPAT) +#define iwe_stream_add_event(a, b, c, d, e) iwe_stream_add_event(b, c, d, e) +#define iwe_stream_add_point(a, b, c, d, e) iwe_stream_add_point(b, c, d, e) +#define iwe_stream_add_value(a, b, c, d, e, f) \ + iwe_stream_add_value(b, c, d, e, f) +#define iwe_stream_lcp_len(a) IW_EV_LCP_LEN +#endif + +static char *ndis_translate_scan(struct net_device *dev, + struct iw_request_info *info, char *event, + char *end_buf, void *item) +{ + struct iw_event iwe; + char *current_val; + int i, nrates; + unsigned char buf[MAX_WPA_IE_LEN * 2 + 30]; + struct ndis_wlan_bssid *bssid; + struct ndis_wlan_bssid_ex *bssid_ex; + + ENTER2("%p, %p", event, item); + bssid = item; + bssid_ex = item; + /* add mac address */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWAP; + iwe.u.ap_addr.sa_family = ARPHRD_ETHER; + iwe.len = IW_EV_ADDR_LEN; + memcpy(iwe.u.ap_addr.sa_data, bssid->mac, ETH_ALEN); + event = iwe_stream_add_event(info, event, end_buf, &iwe, + IW_EV_ADDR_LEN); + + /* add essid */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWESSID; + iwe.u.data.length = bssid->ssid.length; + if (iwe.u.data.length > IW_ESSID_MAX_SIZE) + iwe.u.data.length = IW_ESSID_MAX_SIZE; + iwe.u.data.flags = 1; + iwe.len = IW_EV_POINT_LEN + iwe.u.data.length; + event = iwe_stream_add_point(info, event, end_buf, &iwe, + bssid->ssid.essid); + + /* add protocol name */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWNAME; + strncpy(iwe.u.name, network_type_to_name(bssid->net_type), IFNAMSIZ); + event = iwe_stream_add_event(info, event, end_buf, &iwe, + IW_EV_CHAR_LEN); + + /* add mode */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWMODE; + if (bssid->mode == Ndis802_11IBSS) + iwe.u.mode = IW_MODE_ADHOC; + else if (bssid->mode == Ndis802_11Infrastructure) + iwe.u.mode = IW_MODE_INFRA; + else // if (bssid->mode == Ndis802_11AutoUnknown) + iwe.u.mode = IW_MODE_AUTO; + event = iwe_stream_add_event(info, event, end_buf, &iwe, + IW_EV_UINT_LEN); + + /* add freq */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWFREQ; + iwe.u.freq.m = bssid->config.ds_config; + if (bssid->config.ds_config > 1000000) { + iwe.u.freq.m = bssid->config.ds_config / 10; + iwe.u.freq.e = 1; + } + else + iwe.u.freq.m = bssid->config.ds_config; + /* convert from kHz to Hz */ + iwe.u.freq.e += 3; + iwe.len = IW_EV_FREQ_LEN; + event = iwe_stream_add_event(info, event, end_buf, &iwe, + IW_EV_FREQ_LEN); + + /* add qual */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVQUAL; + i = 100 * (bssid->rssi - WL_NOISE) / (WL_SIGMAX - WL_NOISE); + if (i < 0) + i = 0; + else if (i > 100) + i = 100; + iwe.u.qual.level = bssid->rssi; + iwe.u.qual.noise = WL_NOISE; + iwe.u.qual.qual = i; + iwe.len = IW_EV_QUAL_LEN; + event = iwe_stream_add_event(info, event, end_buf, &iwe, + IW_EV_QUAL_LEN); + + /* add key info */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWENCODE; + if (bssid->privacy == Ndis802_11PrivFilterAcceptAll) + iwe.u.data.flags = IW_ENCODE_DISABLED; + else + iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; + iwe.u.data.length = 0; + iwe.len = IW_EV_POINT_LEN; + event = iwe_stream_add_point(info, event, end_buf, &iwe, + bssid->ssid.essid); + + /* add rate */ + memset(&iwe, 0, sizeof(iwe)); + current_val = event + iwe_stream_lcp_len(info); + iwe.cmd = SIOCGIWRATE; + if (bssid->length > sizeof(*bssid)) + nrates = NDIS_MAX_RATES_EX; + else + nrates = NDIS_MAX_RATES; + for (i = 0 ; i < nrates ; i++) { + if (bssid->rates[i] & 0x7f) { + iwe.u.bitrate.value = ((bssid->rates[i] & 0x7f) * + 500000); + current_val = iwe_stream_add_value(info, event, + current_val, + end_buf, &iwe, + IW_EV_PARAM_LEN); + } + } + + if ((current_val - event) > iwe_stream_lcp_len(info)) + event = current_val; + + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVCUSTOM; + sprintf(buf, "bcn_int=%d", bssid->config.beacon_period); + iwe.u.data.length = strlen(buf); + event = iwe_stream_add_point(info, event, end_buf, &iwe, buf); + + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVCUSTOM; + sprintf(buf, "atim=%u", bssid->config.atim_window); + iwe.u.data.length = strlen(buf); + event = iwe_stream_add_point(info, event, end_buf, &iwe, buf); + + TRACE2("%d, %u", bssid->length, (unsigned int)sizeof(*bssid)); + if (bssid->length > sizeof(*bssid)) { + unsigned char *iep = (unsigned char *)bssid_ex->ies + + sizeof(struct ndis_fixed_ies); + no_warn_unused unsigned char *end = iep + bssid_ex->ie_length; + + while (iep + 1 < end && iep + 2 + iep[1] <= end) { + unsigned char ielen = 2 + iep[1]; + + if (ielen > SSID_MAX_WPA_IE_LEN) { + iep += ielen; + continue; + } + if ((iep[0] == WLAN_EID_GENERIC && iep[1] >= 4 && + memcmp(iep + 2, "\x00\x50\xf2\x01", 4) == 0) || + iep[0] == RSN_INFO_ELEM) { + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVGENIE; + iwe.u.data.length = ielen; + event = iwe_stream_add_point(info, event, + end_buf, &iwe, + iep); + } + iep += ielen; + } + } + TRACE2("event = %p, current_val = %p", event, current_val); + EXIT2(return event); +} + +int set_scan(struct ndis_device *wnd) +{ + NDIS_STATUS res; + + ENTER2(""); + res = mp_set(wnd, OID_802_11_BSSID_LIST_SCAN, NULL, 0); + if (res) { + WARNING("scanning failed (%08X)", res); + EXIT2(return -EOPNOTSUPP); + } + wnd->scan_timestamp = jiffies; + EXIT2(return 0); +} + +static int iw_set_scan(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + return set_scan(wnd); +} + +static int iw_get_scan(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + unsigned int i, list_len, needed; + NDIS_STATUS res; + struct ndis_bssid_list *bssid_list = NULL; + char *event = extra; + struct ndis_wlan_bssid *cur_item ; + + ENTER2(""); + if (time_before(jiffies, wnd->scan_timestamp + 3 * HZ)) + return -EAGAIN; + /* try with space for a few scan items */ + list_len = sizeof(ULONG) + sizeof(struct ndis_wlan_bssid_ex) * 8; + bssid_list = kmalloc(list_len, GFP_KERNEL); + if (!bssid_list) { + ERROR("couldn't allocate memory"); + return -ENOMEM; + } + /* some drivers don't set bssid_list->num_items to 0 if + OID_802_11_BSSID_LIST returns no items (prism54 driver, e.g.,) */ + memset(bssid_list, 0, list_len); + + needed = 0; + res = mp_query_info(wnd, OID_802_11_BSSID_LIST, + bssid_list, list_len, NULL, &needed); + if (res == NDIS_STATUS_INVALID_LENGTH || + res == NDIS_STATUS_BUFFER_TOO_SHORT) { + /* now try with required space */ + kfree(bssid_list); + list_len = needed; + bssid_list = kmalloc(list_len, GFP_KERNEL); + if (!bssid_list) { + ERROR("couldn't allocate memory"); + return -ENOMEM; + } + memset(bssid_list, 0, list_len); + + res = mp_query(wnd, OID_802_11_BSSID_LIST, + bssid_list, list_len); + } + if (res) { + WARNING("getting BSSID list failed (%08X)", res); + kfree(bssid_list); + EXIT2(return -EOPNOTSUPP); + } + TRACE2("%d", bssid_list->num_items); + cur_item = &bssid_list->bssid[0]; + for (i = 0; i < bssid_list->num_items; i++) { + event = ndis_translate_scan(dev, info, event, + extra + IW_SCAN_MAX_DATA, cur_item); + cur_item = (struct ndis_wlan_bssid *)((char *)cur_item + + cur_item->length); + } + wrqu->data.length = event - extra; + wrqu->data.flags = 0; + kfree(bssid_list); + EXIT2(return 0); +} + +static int iw_set_power_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + ULONG power_mode; + + if (wrqu->power.disabled == 1) + power_mode = NDIS_POWER_OFF; + else if (wrqu->power.flags & IW_POWER_MIN) + power_mode = NDIS_POWER_MIN; + else // if (wrqu->power.flags & IW_POWER_MAX) + power_mode = NDIS_POWER_MAX; + + TRACE2("%d", power_mode); + res = mp_set(wnd, OID_802_11_POWER_MODE, + &power_mode, sizeof(power_mode)); + if (res) + WARNING("setting power mode failed (%08X)", res); + return 0; +} + +static int iw_get_power_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + ULONG power_mode; + + ENTER2(""); + res = mp_query(wnd, OID_802_11_POWER_MODE, + &power_mode, sizeof(power_mode)); + if (res) + return -ENOTSUPP; + + if (power_mode == NDIS_POWER_OFF) + wrqu->power.disabled = 1; + else { + if (wrqu->power.flags != 0) + return 0; + wrqu->power.flags |= IW_POWER_ALL_R; + wrqu->power.flags |= IW_POWER_TIMEOUT; + wrqu->power.value = 0; + wrqu->power.disabled = 0; + + if (power_mode == NDIS_POWER_MIN) + wrqu->power.flags |= IW_POWER_MIN; + else // if (power_mode == NDIS_POWER_MAX) + wrqu->power.flags |= IW_POWER_MAX; + } + return 0; +} + +static int iw_get_sensitivity(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + ndis_rssi rssi_trigger; + + ENTER2(""); + res = mp_query(wnd, OID_802_11_RSSI_TRIGGER, + &rssi_trigger, sizeof(rssi_trigger)); + if (res) + return -EOPNOTSUPP; + wrqu->param.value = rssi_trigger; + wrqu->param.disabled = (rssi_trigger == 0); + wrqu->param.fixed = 1; + return 0; +} + +static int iw_set_sensitivity(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + ndis_rssi rssi_trigger; + + ENTER2(""); + if (wrqu->param.disabled) + rssi_trigger = 0; + else + rssi_trigger = wrqu->param.value; + res = mp_set(wnd, OID_802_11_RSSI_TRIGGER, + &rssi_trigger, sizeof(rssi_trigger)); + if (res == NDIS_STATUS_INVALID_DATA) + return -EINVAL; + if (res) + return -EOPNOTSUPP; + return 0; +} + +static int iw_get_ndis_stats(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + struct iw_statistics *stats = &wnd->iw_stats; + memcpy(&wrqu->qual, &stats->qual, sizeof(stats->qual)); + return 0; +} + +static int iw_get_range(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct iw_range *range = (struct iw_range *)extra; + struct iw_point *data = &wrqu->data; + struct ndis_device *wnd = netdev_priv(dev); + unsigned int i, n; + NDIS_STATUS res; + ndis_rates_ex rates; + ndis_tx_power_level tx_power; + + ENTER2(""); + data->length = sizeof(struct iw_range); + memset(range, 0, sizeof(struct iw_range)); + + range->txpower_capa = IW_TXPOW_MWATT; + range->num_txpower = 0; + + res = mp_query(wnd, OID_802_11_TX_POWER_LEVEL, + &tx_power, sizeof(tx_power)); + if (!res) { + range->num_txpower = 1; + range->txpower[0] = tx_power; + } + + range->we_version_compiled = WIRELESS_EXT; + range->we_version_source = 18; + + range->retry_capa = IW_RETRY_LIMIT; + range->retry_flags = IW_RETRY_LIMIT; + range->min_retry = 0; + range->max_retry = 255; + + range->num_channels = 1; + + range->max_qual.qual = 100; + range->max_qual.level = 154; + range->max_qual.noise = 154; + range->sensitivity = 3; + + range->max_encoding_tokens = 4; + range->num_encoding_sizes = 2; + range->encoding_size[0] = 5; + range->encoding_size[1] = 13; + + range->num_bitrates = 0; + memset(&rates, 0, sizeof(rates)); + res = mp_query_info(wnd, OID_802_11_SUPPORTED_RATES, + &rates, sizeof(rates), &n, NULL); + if (res) + WARNING("getting bit rates failed: %08X", res); + else { + for (i = 0; i < n && range->num_bitrates < IW_MAX_BITRATES; i++) + if (rates[i] & 0x80) + continue; + else if (rates[i] & 0x7f) { + range->bitrate[range->num_bitrates] = + (rates[i] & 0x7f) * 500000; + range->num_bitrates++; + } + } + + range->num_channels = (sizeof(freq_chan)/sizeof(freq_chan[0])); + + for (i = 0; i < (sizeof(freq_chan)/sizeof(freq_chan[0])) && + i < IW_MAX_FREQUENCIES; i++) { + range->freq[i].i = i + 1; + range->freq[i].m = freq_chan[i] * 100000; + range->freq[i].e = 1; + } + range->num_frequency = i; + + range->min_rts = 0; + range->max_rts = 2347; + range->min_frag = 256; + range->max_frag = 2346; + + /* Event capability (kernel + driver) */ + range->event_capa[0] = (IW_EVENT_CAPA_K_0 | + IW_EVENT_CAPA_MASK(SIOCGIWTHRSPY) | + IW_EVENT_CAPA_MASK(SIOCGIWAP) | + IW_EVENT_CAPA_MASK(SIOCGIWSCAN)); + range->event_capa[1] = IW_EVENT_CAPA_K_1; + range->event_capa[4] = (IW_EVENT_CAPA_MASK(IWEVTXDROP) | + IW_EVENT_CAPA_MASK(IWEVCUSTOM) | + IW_EVENT_CAPA_MASK(IWEVREGISTERED) | + IW_EVENT_CAPA_MASK(IWEVEXPIRED)); + + range->enc_capa = 0; + + if (test_bit(Ndis802_11Encryption2Enabled, &wnd->capa.encr)) + range->enc_capa |= IW_ENC_CAPA_CIPHER_TKIP; + if (test_bit(Ndis802_11Encryption3Enabled, &wnd->capa.encr)) + range->enc_capa |= IW_ENC_CAPA_CIPHER_CCMP; + + if (test_bit(Ndis802_11AuthModeWPA, &wnd->capa.auth) || + test_bit(Ndis802_11AuthModeWPAPSK, &wnd->capa.auth)) + range->enc_capa |= IW_ENC_CAPA_WPA; + if (test_bit(Ndis802_11AuthModeWPA2, &wnd->capa.auth) || + test_bit(Ndis802_11AuthModeWPA2PSK, &wnd->capa.auth)) + range->enc_capa |= IW_ENC_CAPA_WPA2; + + return 0; +} + +void set_default_iw_params(struct ndis_device *wnd) +{ + wnd->iw_auth_key_mgmt = 0; + wnd->iw_auth_wpa_version = 0; + set_infra_mode(wnd, Ndis802_11Infrastructure); + set_ndis_auth_mode(wnd, Ndis802_11AuthModeOpen); + set_priv_filter(wnd); + set_iw_encr_mode(wnd, IW_AUTH_CIPHER_NONE, IW_AUTH_CIPHER_NONE); +} + +static int deauthenticate(struct ndis_device *wnd) +{ + int ret; + + ENTER2(""); + ret = disassociate(wnd, 1); + set_default_iw_params(wnd); + EXIT2(return ret); +} + +NDIS_STATUS disassociate(struct ndis_device *wnd, int reset_ssid) +{ + NDIS_STATUS res; + u8 buf[NDIS_ESSID_MAX_SIZE]; + int i; + + TRACE2(""); + res = mp_set(wnd, OID_802_11_DISASSOCIATE, NULL, 0); + /* disassociate causes radio to be turned off; if reset_ssid + * is given, set ssid to random to enable radio */ + if (reset_ssid) { + get_random_bytes(buf, sizeof(buf)); + for (i = 0; i < sizeof(buf); i++) + buf[i] = 'a' + (buf[i] % 26); + set_essid(wnd, buf, sizeof(buf)); + } + return res; +} + +static ULONG ndis_priv_mode(struct ndis_device *wnd) +{ + if (wnd->iw_auth_wpa_version & IW_AUTH_WPA_VERSION_WPA2 || + wnd->iw_auth_wpa_version & IW_AUTH_WPA_VERSION_WPA) + return Ndis802_11PrivFilter8021xWEP; + else + return Ndis802_11PrivFilterAcceptAll; +} + +int set_priv_filter(struct ndis_device *wnd) +{ + NDIS_STATUS res; + ULONG flags; + + flags = ndis_priv_mode(wnd); + ENTER2("filter: %d", flags); + res = mp_set_int(wnd, OID_802_11_PRIVACY_FILTER, flags); + if (res) + TRACE2("setting privacy filter to %d failed (%08X)", + flags, res); + EXIT2(return 0); +} + +static int iw_set_mlme(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + struct iw_mlme *mlme = (struct iw_mlme *)extra; + + ENTER2(""); + switch (mlme->cmd) { + case IW_MLME_DEAUTH: + return deauthenticate(wnd); + case IW_MLME_DISASSOC: + TRACE2("cmd=%d reason_code=%d", mlme->cmd, mlme->reason_code); + return disassociate(wnd, 1); + default: + return -EOPNOTSUPP; + } + + return 0; +} + +static int iw_set_genie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + /* + * NDIS drivers do not allow IEs to be configured; this is + * done by the driver based on other configuration. Return 0 + * to avoid causing issues with user space programs that + * expect this function to succeed. + */ + return 0; +} + +static int iw_set_auth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + TRACE2("index=%d value=%d", wrqu->param.flags & IW_AUTH_INDEX, + wrqu->param.value); + switch (wrqu->param.flags & IW_AUTH_INDEX) { + case IW_AUTH_WPA_VERSION: + wnd->iw_auth_wpa_version = wrqu->param.value; + break; + case IW_AUTH_CIPHER_PAIRWISE: + wnd->iw_auth_cipher_pairwise = wrqu->param.value; + break; + case IW_AUTH_CIPHER_GROUP: + wnd->iw_auth_cipher_group = wrqu->param.value; + break; + case IW_AUTH_KEY_MGMT: + wnd->iw_auth_key_mgmt = wrqu->param.value; + break; + case IW_AUTH_80211_AUTH_ALG: + wnd->iw_auth_80211_alg = wrqu->param.value; + break; + case IW_AUTH_WPA_ENABLED: + if (wrqu->param.value) + deauthenticate(wnd); + break; + case IW_AUTH_TKIP_COUNTERMEASURES: + case IW_AUTH_DROP_UNENCRYPTED: + case IW_AUTH_RX_UNENCRYPTED_EAPOL: + case IW_AUTH_PRIVACY_INVOKED: + TRACE2("%d not implemented: %d", + wrqu->param.flags & IW_AUTH_INDEX, wrqu->param.value); + break; + default: + WARNING("invalid cmd %d", wrqu->param.flags & IW_AUTH_INDEX); + return -EOPNOTSUPP; + } + return 0; +} + +static int iw_get_auth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + + ENTER2("index=%d", wrqu->param.flags & IW_AUTH_INDEX); + switch (wrqu->param.flags & IW_AUTH_INDEX) { + case IW_AUTH_WPA_VERSION: + wrqu->param.value = wnd->iw_auth_wpa_version; + break; + case IW_AUTH_CIPHER_PAIRWISE: + wrqu->param.value = wnd->iw_auth_cipher_pairwise; + break; + case IW_AUTH_CIPHER_GROUP: + wrqu->param.value = wnd->iw_auth_cipher_group; + break; + case IW_AUTH_KEY_MGMT: + wrqu->param.value = wnd->iw_auth_key_mgmt; + break; + case IW_AUTH_80211_AUTH_ALG: + wrqu->param.value = wnd->iw_auth_80211_alg; + break; + default: + WARNING("invalid cmd %d", wrqu->param.flags & IW_AUTH_INDEX); + return -EOPNOTSUPP; + } + return 0; +} + +static int iw_set_encodeext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + struct ndis_device *wnd = netdev_priv(dev); + struct ndis_add_key ndis_key; + int i, keyidx; + NDIS_STATUS res; + u8 *addr; + + keyidx = wrqu->encoding.flags & IW_ENCODE_INDEX; + ENTER2("%d", keyidx); + if (keyidx) + keyidx--; + else + keyidx = wnd->encr_info.tx_key_index; + + if (keyidx < 0 || keyidx >= MAX_ENCR_KEYS) + return -EINVAL; + + if (ext->alg == WPA_ALG_WEP) { + if (!test_bit(Ndis802_11Encryption1Enabled, &wnd->capa.encr)) + EXIT2(return -1); + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) + wnd->encr_info.tx_key_index = keyidx; + if (add_wep_key(wnd, ext->key, ext->key_len, keyidx)) + EXIT2(return -1); + else + EXIT2(return 0); + } + if ((wrqu->encoding.flags & IW_ENCODE_DISABLED) || + ext->alg == IW_ENCODE_ALG_NONE || ext->key_len == 0) + EXIT2(return remove_key(wnd, keyidx, ndis_key.bssid)); + + if (ext->key_len > sizeof(ndis_key.key)) { + TRACE2("incorrect key length (%u)", ext->key_len); + EXIT2(return -1); + } + + memset(&ndis_key, 0, sizeof(ndis_key)); + + ndis_key.struct_size = + sizeof(ndis_key) - sizeof(ndis_key.key) + ext->key_len; + ndis_key.length = ext->key_len; + ndis_key.index = keyidx; + + if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { + for (i = 0; i < 6 ; i++) + ndis_key.rsc |= (((u64)ext->rx_seq[i]) << (i * 8)); + TRACE2("0x%Lx", ndis_key.rsc); + ndis_key.index |= 1 << 29; + } + + addr = ext->addr.sa_data; + if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { + /* group key */ + if (wnd->infrastructure_mode == Ndis802_11IBSS) + memset(ndis_key.bssid, 0xff, ETH_ALEN); + else + get_ap_address(wnd, ndis_key.bssid); + } else { + /* pairwise key */ + ndis_key.index |= (1 << 30); + memcpy(ndis_key.bssid, addr, ETH_ALEN); + } + TRACE2(MACSTRSEP, MAC2STR(ndis_key.bssid)); + + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) + ndis_key.index |= (1 << 31); + + if (ext->alg == IW_ENCODE_ALG_TKIP && ext->key_len == 32) { + /* wpa_supplicant gives us the Michael MIC RX/TX keys in + * different order than NDIS spec, so swap the order here. */ + memcpy(ndis_key.key, ext->key, 16); + memcpy(ndis_key.key + 16, ext->key + 24, 8); + memcpy(ndis_key.key + 24, ext->key + 16, 8); + } else + memcpy(ndis_key.key, ext->key, ext->key_len); + + res = mp_set(wnd, OID_802_11_ADD_KEY, &ndis_key, ndis_key.struct_size); + if (res) { + TRACE2("adding key failed (%08X), %u", + res, ndis_key.struct_size); + EXIT2(return -1); + } + wnd->encr_info.keys[keyidx].length = ext->key_len; + memcpy(&wnd->encr_info.keys[keyidx].key, ndis_key.key, ext->key_len); + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) + wnd->encr_info.tx_key_index = keyidx; + TRACE2("key %d added", keyidx); + + EXIT2(return 0); +} + +static int iw_get_encodeext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + /* struct iw_encode_ext *ext = (struct iw_encode_ext *) extra; */ + /* TODO */ + ENTER2(""); + return 0; +} + +static int iw_set_pmksa(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct iw_pmksa *pmksa = (struct iw_pmksa *)extra; + struct ndis_pmkid pmkid; + NDIS_STATUS res; + struct ndis_device *wnd = netdev_priv(dev); + + /* TODO: must keep local list of PMKIDs since NDIS drivers + * expect that all PMKID entries are included whenever a new + * one is added. */ + + ENTER2("%d", pmksa->cmd); + if ((pmksa->cmd == IW_PMKSA_ADD || pmksa->cmd == IW_PMKSA_REMOVE) && + (!(wnd->iw_auth_wpa_version & IW_AUTH_WPA_VERSION_WPA2))) + EXIT2(return -EOPNOTSUPP); + + memset(&pmkid, 0, sizeof(pmkid)); + if (pmksa->cmd == IW_PMKSA_ADD) { + pmkid.bssid_info_count = 1; + memcpy(pmkid.bssid_info[0].bssid, pmksa->bssid.sa_data, + ETH_ALEN); + memcpy(pmkid.bssid_info[0].pmkid, pmksa->pmkid, IW_PMKID_LEN); + } + pmkid.length = sizeof(pmkid); + + res = mp_set(wnd, OID_802_11_PMKID, &pmkid, pmkid.length); + if (res == NDIS_STATUS_FAILURE) + EXIT2(return -EOPNOTSUPP); + TRACE2("OID_802_11_PMKID -> %d", res); + if (res) + return -EINVAL; + + return 0; +} + +#define WEXT(id) [id - SIOCIWFIRST] + +static const iw_handler ndis_handler[] = { + WEXT(SIOCGIWNAME) = iw_get_network_type, + WEXT(SIOCSIWESSID) = iw_set_essid, + WEXT(SIOCGIWESSID) = iw_get_essid, + WEXT(SIOCSIWMODE) = iw_set_infra_mode, + WEXT(SIOCGIWMODE) = iw_get_infra_mode, + WEXT(SIOCGIWFREQ) = iw_get_freq, + WEXT(SIOCSIWFREQ) = iw_set_freq, + WEXT(SIOCGIWTXPOW) = iw_get_tx_power, + WEXT(SIOCSIWTXPOW) = iw_set_tx_power, + WEXT(SIOCGIWRATE) = iw_get_bitrate, + WEXT(SIOCSIWRATE) = iw_set_bitrate, + WEXT(SIOCGIWRTS) = iw_get_rts_threshold, + WEXT(SIOCSIWRTS) = iw_set_rts_threshold, + WEXT(SIOCGIWFRAG) = iw_get_frag_threshold, + WEXT(SIOCSIWFRAG) = iw_set_frag_threshold, + WEXT(SIOCGIWAP) = iw_get_ap_address, + WEXT(SIOCSIWAP) = iw_set_ap_address, + WEXT(SIOCSIWENCODE) = iw_set_wep, + WEXT(SIOCGIWENCODE) = iw_get_encr, + WEXT(SIOCSIWSCAN) = iw_set_scan, + WEXT(SIOCGIWSCAN) = iw_get_scan, + WEXT(SIOCGIWPOWER) = iw_get_power_mode, + WEXT(SIOCSIWPOWER) = iw_set_power_mode, + WEXT(SIOCGIWRANGE) = iw_get_range, + WEXT(SIOCGIWSTATS) = iw_get_ndis_stats, + WEXT(SIOCGIWSENS) = iw_get_sensitivity, + WEXT(SIOCSIWSENS) = iw_set_sensitivity, + WEXT(SIOCGIWNICKN) = iw_get_nick, + WEXT(SIOCSIWNICKN) = iw_set_nick, + WEXT(SIOCSIWCOMMIT) = iw_set_dummy, + WEXT(SIOCSIWMLME) = iw_set_mlme, + WEXT(SIOCSIWGENIE) = iw_set_genie, + WEXT(SIOCSIWAUTH) = iw_set_auth, + WEXT(SIOCGIWAUTH) = iw_get_auth, + WEXT(SIOCSIWENCODEEXT) = iw_set_encodeext, + WEXT(SIOCGIWENCODEEXT) = iw_get_encodeext, + WEXT(SIOCSIWPMKSA) = iw_set_pmksa, +}; + +/* private ioctl's */ + +static int priv_reset(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int res; + ENTER2(""); + res = mp_reset(netdev_priv(dev)); + if (res) { + WARNING("reset failed: %08X", res); + return -EOPNOTSUPP; + } + return 0; +} + +static int priv_deauthenticate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int res; + ENTER2(""); + res = deauthenticate(netdev_priv(dev)); + return res; +} + +static int priv_power_profile(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + struct miniport *mp; + ULONG profile_inf; + + ENTER2(""); + mp = &wnd->wd->driver->ndis_driver->mp; + if (!mp->pnp_event_notify) + EXIT2(return -EOPNOTSUPP); + + /* 1 for AC and 0 for Battery */ + if (wrqu->param.value) + profile_inf = NdisPowerProfileAcOnLine; + else + profile_inf = NdisPowerProfileBattery; + + LIN2WIN4(mp->pnp_event_notify, wnd->nmb->mp_ctx, + NdisDevicePnPEventPowerProfileChanged, + &profile_inf, sizeof(profile_inf)); + EXIT2(return 0); +} + +static int priv_network_type(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + enum network_type network_type; + NDIS_STATUS res; + char type; + + ENTER2(""); + type = wrqu->param.value; + if (type == 'f') + network_type = Ndis802_11FH; + else if (type == 'b') + network_type = Ndis802_11DS; + else if (type == 'a') + network_type = Ndis802_11OFDM5; + else if (type == 'g' || type == 'n') + network_type = Ndis802_11OFDM24; + else + network_type = Ndis802_11Automode; + + res = mp_set_int(wnd, OID_802_11_NETWORK_TYPE_IN_USE, network_type); + if (res) { + WARNING("setting network type to %d failed (%08X)", + network_type, res); + EXIT2(return -EINVAL); + } + + EXIT2(return 0); +} + +static int priv_media_stream_mode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + NDIS_STATUS res; + int mode; + + ENTER2(""); + if (wrqu->param.value > 0) + mode = Ndis802_11MediaStreamOn; + else + mode = Ndis802_11MediaStreamOff; + res = mp_set_int(wnd, OID_802_11_MEDIA_STREAM_MODE, mode); + if (res) { + WARNING("oid failed (%08X)", res); + EXIT2(return -EINVAL); + } + EXIT2(return 0); +} + +static int priv_reload_defaults(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct ndis_device *wnd = netdev_priv(dev); + int res; + ENTER2(""); + res = mp_set_int(wnd, OID_802_11_RELOAD_DEFAULTS, + Ndis802_11ReloadWEPKeys); + if (res) { + WARNING("reloading defaults failed: %08X", res); + return -EOPNOTSUPP; + } + return 0; +} + +static const struct iw_priv_args priv_args[] = { + {PRIV_RESET, 0, 0, "ndis_reset"}, + {PRIV_POWER_PROFILE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, + "power_profile"}, + {PRIV_DEAUTHENTICATE, 0, 0, "deauthenticate"}, + {PRIV_NETWORK_TYPE, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 1, 0, + "network_type"}, + {PRIV_MEDIA_STREAM_MODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, + "media_stream"}, + + {PRIV_RELOAD_DEFAULTS, 0, 0, "reload_defaults"}, +}; + +#define WEPRIV(id) [id - SIOCIWFIRSTPRIV] + +static const iw_handler priv_handler[] = { + WEPRIV(PRIV_RESET) = priv_reset, + WEPRIV(PRIV_POWER_PROFILE) = priv_power_profile, + WEPRIV(PRIV_DEAUTHENTICATE) = priv_deauthenticate, + WEPRIV(PRIV_NETWORK_TYPE) = priv_network_type, + WEPRIV(PRIV_MEDIA_STREAM_MODE) = priv_media_stream_mode, + WEPRIV(PRIV_RELOAD_DEFAULTS) = priv_reload_defaults, +}; + +const struct iw_handler_def ndis_handler_def = { + .num_standard = sizeof(ndis_handler) / sizeof(ndis_handler[0]), + .num_private = sizeof(priv_handler) / sizeof(priv_handler[0]), + .num_private_args = sizeof(priv_args) / sizeof(priv_args[0]), + + .standard = (iw_handler *)ndis_handler, + .private = (iw_handler *)priv_handler, + .private_args = (struct iw_priv_args *)priv_args, + .get_wireless_stats = get_iw_stats, +}; --- linux-2.6.32.orig/ubuntu/ndiswrapper/wrapper.c +++ linux-2.6.32/ubuntu/ndiswrapper/wrapper.c @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ndis.h" +#include "iw_ndis.h" +#include "loader.h" +#include "pnp.h" +#include "wrapper.h" + +char *if_name = "wlan%d"; +int proc_uid, proc_gid; +int hangcheck_interval; +static char *utils_version = UTILS_VERSION; + +#if defined(DEBUG) && (DEBUG > 0) +int debug = DEBUG; +#else +int debug = 0; +#endif + +WRAP_MODULE_PARM_STRING(if_name, 0400); +MODULE_PARM_DESC(if_name, "Network interface name or template " + "(default: wlan%d)"); +WRAP_MODULE_PARM_INT(proc_uid, 0600); +MODULE_PARM_DESC(proc_uid, "The uid of the files created in /proc " + "(default: 0)."); +WRAP_MODULE_PARM_INT(proc_gid, 0600); +MODULE_PARM_DESC(proc_gid, "The gid of the files created in /proc " + "(default: 0)."); +WRAP_MODULE_PARM_INT(debug, 0600); +MODULE_PARM_DESC(debug, "debug level"); + +/* 0 - default value provided by NDIS driver, + * positive value - force hangcheck interval to that many seconds + * negative value - disable hangcheck + */ +WRAP_MODULE_PARM_INT(hangcheck_interval, 0600); +MODULE_PARM_DESC(hangcheck_interval, "The interval, in seconds, for checking" + " if driver is hung. (default: 0)"); + +WRAP_MODULE_PARM_STRING(utils_version, 0400); +MODULE_PARM_DESC(utils_version, "Compatible version of utils " + "(read only: " UTILS_VERSION ")"); + +MODULE_AUTHOR("ndiswrapper team "); +#ifdef MODULE_DESCRIPTION +MODULE_DESCRIPTION("NDIS wrapper driver"); +#endif +#ifdef MODULE_VERSION +MODULE_VERSION(DRIVER_VERSION); +#endif +MODULE_LICENSE("GPL"); + +static void module_cleanup(void) +{ + loader_exit(); +#ifdef ENABLE_USB + usb_exit(); +#endif + + wrap_procfs_remove(); + wrapndis_exit(); + ndis_exit(); + rtl_exit(); + crt_exit(); + ntoskernel_exit(); + wrapmem_exit(); +} + +static int __init wrapper_init(void) +{ + printk(KERN_INFO "%s version %s loaded (smp=%s, preempt=%s)\n", + DRIVER_NAME, DRIVER_VERSION, +#ifdef CONFIG_SMP + "yes" +#else + "no" +#endif + , +#ifdef CONFIG_PREEMPT_RT + "rt" +#elif defined(CONFIG_PREEMPT) + "yes" +#else + "no" +#endif + ); + + if (wrapmem_init() || ntoskernel_init() || crt_init() || + rtl_init() || ndis_init() || wrapndis_init() || +#ifdef ENABLE_USB + usb_init() || +#endif + wrap_procfs_init() || loader_init()) { + module_cleanup(); + ERROR("%s: initialization failed", DRIVER_NAME); + return -EINVAL; + } + EXIT1(return 0); +} + +static void __exit wrapper_exit(void) +{ + ENTER1(""); + module_cleanup(); +} + +module_init(wrapper_init); +module_exit(wrapper_exit); --- linux-2.6.32.orig/ubuntu/ndiswrapper/mkstubs.sh +++ linux-2.6.32/ubuntu/ndiswrapper/mkstubs.sh @@ -0,0 +1,12 @@ +#! /bin/sh + +for file in "$@"; do + echo + echo "# automatically generated from $file" + sed -n \ + -e 's/.*WIN_FUNC(\([^\,]\+\) *\, *\([0-9]\+\)).*/\ + win2lin(\1, \2)/p' \ + -e 's/.*WIN_FUNC_PTR(\([^\,]\+\) *\, *\([0-9]\+\)).*/\ + win2lin(\1, \2)/p' \ + $file | sed -e 's/[ \t ]\+//' | sort -u; \ +done --- linux-2.6.32.orig/ubuntu/ndiswrapper/mkexport.sh +++ linux-2.6.32/ubuntu/ndiswrapper/mkexport.sh @@ -0,0 +1,42 @@ +#! /bin/sh + +# Generate exports symbol table from C files + +input="$1" +output="$2" +exports=$(basename "$output" .h) +exec >"$output" + +echo "/* automatically generated from src */"; + +sed -n -e '/^\(wstdcall\|wfastcall\|noregparm\|__attribute__\)/{ +:more +N +s/\([^{]\)$/\1/ +t more +s/\n{$/;/ +p +}' $input + +echo "#ifdef CONFIG_X86_64"; + +sed -n \ + -e 's/.*WIN_FUNC(\([^\,]\+\) *\, *\([0-9]\+\)).*/'\ +'WIN_FUNC_DECL(\1, \2)/p' \ + -e 's/.*WIN_FUNC_PTR(\([^\,]\+\) *\, *\([0-9]\+\)).*/'\ +'WIN_FUNC_DECL(\1, \2)/p' $input | sort -u + +echo "#endif" +echo "extern struct wrap_export $exports[];" +echo "struct wrap_export $exports[] = {" + +sed -n \ + -e 's/.*WIN_FUNC(_win_\([^\,]\+\) *\, *\([0-9]\+\)).*/'\ +' WIN_WIN_SYMBOL(\1, \2),/p' \ + -e 's/.*WIN_FUNC(\([^\,]\+\) *\, *\([0-9]\+\)).*/'\ +' WIN_SYMBOL(\1, \2),/p' \ + -e 's/.*WIN_SYMBOL_MAP(\("[^"]\+"\)[ ,\n]\+\([^)]\+\)).*/'\ +' {\1, (generic_func)\2},/p' $input | sort -u + +echo " {NULL, NULL}" +echo "};" --- linux-2.6.32.orig/ubuntu/ndiswrapper/win2lin_stubs.S +++ linux-2.6.32/ubuntu/ndiswrapper/win2lin_stubs.S @@ -0,0 +1,288 @@ +/* + * Copyright (C) 2005 Karl Vogel, Giridhar Pemmasani + * + * 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. + * + */ + +#include + +#ifdef CONFIG_X86_64 + +/* +# Windows <---> Linux register usage conversion when calling functions +# V = Volatile +# NV = Non Volatile (needs to be saved) +# +# Win Lin +# --------------------------------------- +# Rax Return V Return V +# Rbx NV NV +# Rcx Arg1 V Arg4 V +# Rdx Arg2 V Arg3 V +# Rsi NV Arg2 V +# Rdi NV Arg1 V +# Rsp NV NV +# Rbp NV NV +# R8 Arg3 V Arg5 V +# R9 Arg4 V Arg6 V +# R10 V V +# R11 V V +# R12 NV NV +# R13 NV NV +# R14 NV NV +# R15 NV NV +# +# In addition, Linux uses %rax to indicate number of SSE registers used +# when variadic functions are called. Since there is no way to obtain this +# from Windows, for now, we just assume this is 0 (hence %rax is cleared). +# +# Windows pushes arguments 5 and higher onto stack in case of integer +# variables and 4 and higher in case of floating point variabes (passed +# in SSE registers). + +In a windows function, the stackframe/registers look like this: + +# 0x0048 .... +# 0x0040 arg8 +# 0x0038 arg7 +# 0x0030 arg6 +# 0x0028 arg5 +# 0x0020 shadow/spill space for arg4 +# 0x0018 shadow/spill space for arg3 +# 0x0010 shadow/spill space for arg2 +# 0x0008 shadow/spill space for arg1 +# 0x0000 ret + +# register spill space is same irrespective of number of arguments - even +# if Windows function takes less than 4 arguments, 32 bytes above return +# address is reserved for the function + +In Linux it should look like: + +# 0x0018 .... +# 0x0010 arg8 +# 0x0008 arg7 +# 0x0000 ret + +*/ + +# +# setup for Windows to Linux function call +# + + .text + +.macro win2lin_prolog + push %rsi + push %rdi +.endm + +.macro win2lin_epilog + pop %rdi + pop %rsi +.endm + +# when Windows function calls Linux function, the function address is in %r10 + +.macro call_lin_func + xor %rax, %rax # rax indicates number of SSE regs + call *%r10 +.endm + +# before prolog, 0(%rsp) is return address, 8(%rsp) would be arg1 +# (but it is in register) and so on, so n'th arg would be at n*8(%rsp) +# for n > 4. But in prolog, we push 2 registers that are non-volaile in +# Windows, but volatile in Linux. So after prolog, args are at (n+2)*8(%rsp) + +#define win2lin_win_arg(n) (n+2)*8(%rsp) + +#define win2lin_arg1 mov %rcx, %rdi +#define win2lin_arg2 mov %rdx, %rsi +#define win2lin_arg3 mov %r8, %rdx +#define win2lin_arg4 mov %r9, %rcx +#define win2lin_arg5 mov win2lin_win_arg(5), %r8 +#define win2lin_arg6 mov win2lin_win_arg(6), %r9 + + .type win2lin0, @function +win2lin0: + win2lin_prolog + call_lin_func + win2lin_epilog + ret + .size win2lin0, .-win2lin0 + + .type win2lin1, @function +win2lin1: + win2lin_prolog + win2lin_arg1 + call_lin_func + win2lin_epilog + ret + .size win2lin1, .-win2lin1 + + .type win2lin2, @function +win2lin2: + win2lin_prolog + win2lin_arg1 + win2lin_arg2 + call_lin_func + win2lin_epilog + ret + .size win2lin2, .-win2lin2 + + .type win2lin3, @function +win2lin3: + win2lin_prolog + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + call_lin_func + win2lin_epilog + ret + .size win2lin3, .-win2lin3 + + .type win2lin4, @function +win2lin4: + win2lin_prolog + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + win2lin_arg4 + call_lin_func + win2lin_epilog + ret + .size win2lin4, .-win2lin4 + + .type win2lin5, @function +win2lin5: + win2lin_prolog + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + win2lin_arg4 + win2lin_arg5 + call_lin_func + win2lin_epilog + ret + .size win2lin5, .-win2lin5 + + .type win2lin6, @function +win2lin6: + win2lin_prolog + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + win2lin_arg4 + win2lin_arg5 + win2lin_arg6 + call_lin_func + win2lin_epilog + ret + .size win2lin6, .-win2lin6 + +# Allocate stack frame for Linux arguments before calling function. +# First 6 args are passed through registers, so we need space for 7 and above. +# The arguments should have been copied onto stack already. + +.macro call_lin_func_args n + sub $(\n-6)*8, %rsp + call_lin_func + add $(\n-6)*8, %rsp + .endm + +# m is index of Linux arg required, n is total number of args to function +# After stack frame is allocated, Linux arg 7 should be at 0(%rsp), +# arg 8 should be at 1*8(%rsp) and so on. So Linux arg m should be at (m-7)*8 +# Stack frame starts at -(n-6)*8(%rsp), so before stack frame is allocated +# Linux arg m should be at (6-n+m-7)*8(%rsp) + +#define win2lin_lin_arg(m,n) (m-1-n)*8(%rsp) + + .type win2lin7, @function +win2lin7: + win2lin_prolog + + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + win2lin_arg4 + win2lin_arg5 + win2lin_arg6 + + # copy windows argument 7 onto stack for Linux function + mov win2lin_win_arg(7), %r11 + mov %r11, win2lin_lin_arg(7,7) + + call_lin_func_args(7) + win2lin_epilog + ret + .size win2lin7, .-win2lin7 + + .type win2lin8, @function +win2lin8: + win2lin_prolog + + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + win2lin_arg4 + win2lin_arg5 + win2lin_arg6 + + # copy windows arguments 7 and 8 onto stack for Linux function + mov win2lin_win_arg(7), %r11 + mov %r11, win2lin_lin_arg(7,8) + mov win2lin_win_arg(8), %r11 + mov %r11, win2lin_lin_arg(8,8) + + call_lin_func_args(8) + win2lin_epilog + ret + .size win2lin8, .-win2lin8 + + .type win2lin9, @function +win2lin9: +win2lin10: +win2lin11: +win2lin12: + win2lin_prolog + + # since we destroy rsi and rdi here, first copy windows + # arguments 7 through 12 onto stack for Linux function + mov %rcx, %r11 # save rcx + lea win2lin_win_arg(7), %rsi # source (windows arg 7 and up) + lea win2lin_lin_arg(7,12), %rdi # = destination + mov $6, %rcx # 6 arguments + rep + movsq + mov %r11, %rcx # restore rcx + + win2lin_arg1 + win2lin_arg2 + win2lin_arg3 + win2lin_arg4 + win2lin_arg5 + win2lin_arg6 + + call_lin_func_args(12) + win2lin_epilog + ret + .size win2lin9, .-win2lin9 + +#define win2lin(name, argc) \ +ENTRY(win2lin_ ## name ## _ ## argc) \ + lea name(%rip), %r10 ; \ + jmp win2lin ## argc + +#include "win2lin_stubs.h" + +#endif // CONFIG_X86_64 --- linux-2.6.32.orig/ubuntu/ndiswrapper/iw_ndis.h +++ linux-2.6.32/ubuntu/ndiswrapper/iw_ndis.h @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _IW_NDIS_H_ +#define _IW_NDIS_H_ + +#include "ndis.h" + +#define WL_NOISE -96 /* typical noise level in dBm */ +#define WL_SIGMAX -32 /* typical maximum signal level in dBm */ + +struct ndis_encr_key { + ULONG struct_size; + ULONG index; + ULONG length; + UCHAR key[NDIS_ENCODING_TOKEN_MAX]; +}; + +struct ndis_add_key { + ULONG struct_size; + ndis_key_index index; + ULONG length; + mac_address bssid; + UCHAR pad[6]; + ndis_key_rsc rsc; + UCHAR key[NDIS_ENCODING_TOKEN_MAX]; +}; + +struct ndis_remove_key { + ULONG struct_size; + ndis_key_index index; + mac_address bssid; +}; + +struct ndis_fixed_ies { + UCHAR time_stamp[8]; + USHORT beacon_interval; + USHORT capa; +}; + +struct ndis_variable_ies { + ULONG elem_id; + UCHAR length; + UCHAR data[1]; +}; + +enum ndis_reload_defaults { Ndis802_11ReloadWEPKeys }; + +struct ndis_assoc_info { + ULONG length; + USHORT req_ies; + struct req_ie { + USHORT capa; + USHORT listen_interval; + mac_address cur_ap_address; + } req_ie; + ULONG req_ie_length; + ULONG offset_req_ies; + USHORT resp_ies; + struct resp_ie { + USHORT capa; + USHORT status_code; + USHORT assoc_id; + } resp_ie; + ULONG resp_ie_length; + ULONG offset_resp_ies; +}; + +struct ndis_configuration_fh { + ULONG length; + ULONG hop_pattern; + ULONG hop_set; + ULONG dwell_time; +}; + +struct ndis_configuration { + ULONG length; + ULONG beacon_period; + ULONG atim_window; + ULONG ds_config; + struct ndis_configuration_fh fh_config; +}; + +struct ndis_wlan_bssid { + ULONG length; + mac_address mac; + UCHAR reserved[2]; + struct ndis_essid ssid; + ULONG privacy; + ndis_rssi rssi; + UINT net_type; + struct ndis_configuration config; + UINT mode; + ndis_rates rates; +}; + +struct ndis_wlan_bssid_ex { + ULONG length; + mac_address mac; + UCHAR reserved[2]; + struct ndis_essid ssid; + ULONG privacy; + ndis_rssi rssi; + UINT net_type; + struct ndis_configuration config; + UINT mode; + ndis_rates_ex rates_ex; + ULONG ie_length; + UCHAR ies[1]; +}; + +/* we use bssid_list as bssid_list_ex also */ +struct ndis_bssid_list { + ULONG num_items; + struct ndis_wlan_bssid bssid[1]; +}; + +enum ndis_priv_filter { + Ndis802_11PrivFilterAcceptAll, Ndis802_11PrivFilter8021xWEP +}; + +enum network_type { + Ndis802_11FH, Ndis802_11DS, Ndis802_11OFDM5, Ndis802_11OFDM24, + /* MSDN site uses Ndis802_11Automode, which is not mentioned + * in DDK, so add one and assign it to + * Ndis802_11NetworkTypeMax */ + Ndis802_11Automode, Ndis802_11NetworkTypeMax = Ndis802_11Automode +}; + +struct network_type_list { + ULONG num; + enum network_type types[1]; +}; + +enum ndis_power { + NDIS_POWER_OFF = 0, NDIS_POWER_MAX, NDIS_POWER_MIN, +}; + +struct ndis_auth_req { + ULONG length; + mac_address bssid; + ULONG flags; +}; + +struct ndis_bssid_info { + mac_address bssid; + ndis_pmkid_vavlue pmkid; +}; + +struct ndis_pmkid { + ULONG length; + ULONG bssid_info_count; + struct ndis_bssid_info bssid_info[1]; +}; + +int add_wep_key(struct ndis_device *wnd, char *key, int key_len, + int index); +int set_essid(struct ndis_device *wnd, const char *ssid, int ssid_len); +int set_infra_mode(struct ndis_device *wnd, + enum ndis_infrastructure_mode mode); +int get_ap_address(struct ndis_device *wnd, mac_address mac); +int set_ndis_auth_mode(struct ndis_device *wnd, ULONG auth_mode); +int set_iw_auth_mode(struct ndis_device *wnd, int wpa_version, + int auth_80211_alg); +int set_auth_mode(struct ndis_device *wnd); +int set_ndis_encr_mode(struct ndis_device *wnd, int cipher_pairwise, + int cipher_groupwise); +int get_ndis_encr_mode(struct ndis_device *wnd); +int set_encr_mode(struct ndis_device *wnd); +int set_iw_encr_mode(struct ndis_device *wnd, int cipher_pairwise, + int cipher_groupwise); +int get_ndis_auth_mode(struct ndis_device *wnd); +int set_priv_filter(struct ndis_device *wnd); +int set_scan(struct ndis_device *wnd); +NDIS_STATUS disassociate(struct ndis_device *wnd, int reset_ssid); +void set_default_iw_params(struct ndis_device *wnd); +extern const struct iw_handler_def ndis_handler_def; + +#define PRIV_RESET SIOCIWFIRSTPRIV+16 +#define PRIV_POWER_PROFILE SIOCIWFIRSTPRIV+17 +#define PRIV_NETWORK_TYPE SIOCIWFIRSTPRIV+18 +#define PRIV_DEAUTHENTICATE SIOCIWFIRSTPRIV+19 +#define PRIV_MEDIA_STREAM_MODE SIOCIWFIRSTPRIV+20 +#define PRIV_RELOAD_DEFAULTS SIOCIWFIRSTPRIV+23 + +#define RSN_INFO_ELEM 0x30 + +/* these have to match what is in wpa_supplicant */ + +typedef enum { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP } wpa_alg; +typedef enum { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, + CIPHER_WEP104 } wpa_cipher; +typedef enum { KEY_MGMT_802_1X, KEY_MGMT_PSK, KEY_MGMT_NONE, + KEY_MGMT_802_1X_NO_WPA, KEY_MGMT_WPA_NONE } wpa_key_mgmt; + +#endif // IW_NDIS_H --- linux-2.6.32.orig/ubuntu/ndiswrapper/wrapmem.c +++ linux-2.6.32/ubuntu/ndiswrapper/wrapmem.c @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2006 Giridhar Pemmasani + * + * 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. + * + */ + +#define _WRAPMEM_C_ + +#include "ntoskernel.h" + +struct slack_alloc_info { + struct nt_list list; + size_t size; +}; + +static struct nt_list allocs; +static struct nt_list slack_allocs; +static spinlock_t alloc_lock; + +struct vmem_block { + struct nt_list list; + int size; +}; + +static struct nt_list vmem_list; + +#if defined(ALLOC_DEBUG) +struct alloc_info { + enum alloc_type type; + size_t size; +#if ALLOC_DEBUG > 1 + struct nt_list list; + const char *file; + int line; + ULONG tag; +#endif +}; + +static atomic_t alloc_sizes[ALLOC_TYPE_MAX]; +#endif + +void wrapmem_info(void) +{ +#ifdef ALLOC_DEBUG + enum alloc_type type; + for (type = 0; type < ALLOC_TYPE_MAX; type++) + INFO("total size of allocations in %d: %d", + type, atomic_read(&alloc_sizes[type])); +#endif +} + +/* allocate memory and add it to list of allocated pointers; if a + * driver doesn't free this memory for any reason (buggy driver or we + * allocate space behind driver's back since we need more space than + * corresponding Windows structure provides etc.), this gets freed + * automatically when module is unloaded + */ +void *slack_kmalloc(size_t size) +{ + struct slack_alloc_info *info; + gfp_t flags; + + ENTER4("size = %lu", (unsigned long)size); + + if (irql_gfp() & GFP_ATOMIC) + flags = GFP_ATOMIC; + else + flags = GFP_KERNEL; + info = kmalloc(size + sizeof(*info), flags); + if (!info) + return NULL; + info->size = size; + spin_lock_bh(&alloc_lock); + InsertTailList(&slack_allocs, &info->list); + spin_unlock_bh(&alloc_lock); +#ifdef ALLOC_DEBUG + atomic_add(size, &alloc_sizes[ALLOC_TYPE_SLACK]); +#endif + TRACE4("%p, %p", info, info + 1); + EXIT4(return info + 1); +} + +/* free pointer and remove from list of allocated pointers */ +void slack_kfree(void *ptr) +{ + struct slack_alloc_info *info; + + ENTER4("%p", ptr); + info = ptr - sizeof(*info); + spin_lock_bh(&alloc_lock); + RemoveEntryList(&info->list); + spin_unlock_bh(&alloc_lock); +#ifdef ALLOC_DEBUG + atomic_sub(info->size, &alloc_sizes[ALLOC_TYPE_SLACK]); +#endif + kfree(info); + EXIT4(return); +} + +#if defined(ALLOC_DEBUG) +void *wrap_kmalloc(size_t size, gfp_t flags, const char *file, int line) +{ + struct alloc_info *info; + + info = kmalloc(size + sizeof(*info), flags); + if (!info) + return NULL; + if (flags & GFP_ATOMIC) + info->type = ALLOC_TYPE_KMALLOC_ATOMIC; + else + info->type = ALLOC_TYPE_KMALLOC_NON_ATOMIC; + info->size = size; + atomic_add(size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + info->file = file; + info->line = line; + info->tag = 0; + spin_lock_bh(&alloc_lock); + InsertTailList(&allocs, &info->list); + spin_unlock_bh(&alloc_lock); +#endif + TRACE4("%p", info + 1); + return info + 1; +} + +void *wrap_kzalloc(size_t size, gfp_t flags, const char *file, int line) +{ + void *ptr = wrap_kmalloc(size, flags, file, line); + if (ptr) + memset(ptr, 0, size); + return ptr; +} + +void wrap_kfree(void *ptr) +{ + struct alloc_info *info; + + TRACE4("%p", ptr); + if (!ptr) + return; + info = ptr - sizeof(*info); + atomic_sub(info->size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + spin_lock_bh(&alloc_lock); + RemoveEntryList(&info->list); + spin_unlock_bh(&alloc_lock); + if (!(info->type == ALLOC_TYPE_KMALLOC_ATOMIC || + info->type == ALLOC_TYPE_KMALLOC_NON_ATOMIC)) + WARNING("invliad type: %d", info->type); +#endif + kfree(info); +} + +void *wrap_vmalloc(unsigned long size, const char *file, int line) +{ + struct alloc_info *info; + + info = vmalloc(size + sizeof(*info)); + if (!info) + return NULL; + info->type = ALLOC_TYPE_VMALLOC_NON_ATOMIC; + info->size = size; + atomic_add(size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + info->file = file; + info->line = line; + info->tag = 0; + spin_lock_bh(&alloc_lock); + InsertTailList(&allocs, &info->list); + spin_unlock_bh(&alloc_lock); +#endif + return info + 1; +} + +void *wrap__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot, + const char *file, int line) +{ + struct alloc_info *info; + + info = __vmalloc(size + sizeof(*info), gfp_mask, prot); + if (!info) + return NULL; + if (gfp_mask & GFP_ATOMIC) + info->type = ALLOC_TYPE_VMALLOC_ATOMIC; + else + info->type = ALLOC_TYPE_VMALLOC_NON_ATOMIC; + info->size = size; + atomic_add(size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + info->file = file; + info->line = line; + info->tag = 0; + spin_lock_bh(&alloc_lock); + InsertTailList(&allocs, &info->list); + spin_unlock_bh(&alloc_lock); +#endif + return info + 1; +} + +void wrap_vfree(void *ptr) +{ + struct alloc_info *info; + + info = ptr - sizeof(*info); + atomic_sub(info->size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + spin_lock_bh(&alloc_lock); + RemoveEntryList(&info->list); + spin_unlock_bh(&alloc_lock); + if (!(info->type == ALLOC_TYPE_VMALLOC_ATOMIC || + info->type == ALLOC_TYPE_VMALLOC_NON_ATOMIC)) + WARNING("invliad type: %d", info->type); +#endif + vfree(info); +} + +void *wrap_alloc_pages(gfp_t flags, unsigned int size, + const char *file, int line) +{ + struct alloc_info *info; + + size += sizeof(*info); + info = (struct alloc_info *)__get_free_pages(flags, get_order(size)); + if (!info) + return NULL; + info->type = ALLOC_TYPE_PAGES; + info->size = size; + atomic_add(size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + info->file = file; + info->line = line; + info->tag = 0; + spin_lock_bh(&alloc_lock); + InsertTailList(&allocs, &info->list); + spin_unlock_bh(&alloc_lock); +#endif + return info + 1; +} + +void wrap_free_pages(unsigned long ptr, int order) +{ + struct alloc_info *info; + + info = (void *)ptr - sizeof(*info); + atomic_sub(info->size, &alloc_sizes[info->type]); +#if ALLOC_DEBUG > 1 + spin_lock_bh(&alloc_lock); + RemoveEntryList(&info->list); + spin_unlock_bh(&alloc_lock); + if (info->type != ALLOC_TYPE_PAGES) + WARNING("invliad type: %d", info->type); +#endif + free_pages((unsigned long)info, get_order(info->size)); +} + +#if ALLOC_DEBUG > 1 +#undef ExAllocatePoolWithTag +void *wrap_ExAllocatePoolWithTag(enum pool_type pool_type, SIZE_T size, + ULONG tag, const char *file, int line) +{ + void *addr; + struct alloc_info *info; + + ENTER4("pool_type: %d, size: %lu, tag: %u", pool_type, size, tag); + addr = ExAllocatePoolWithTag(pool_type, size, tag); + if (!addr) + return NULL; + info = addr - sizeof(*info); + info->file = file; + info->line = line; + info->tag = tag; + EXIT4(return addr); +} +#endif + +int alloc_size(enum alloc_type type) +{ + if (type >= 0 && type < ALLOC_TYPE_MAX) + return atomic_read(&alloc_sizes[type]); + else + return -EINVAL; +} + +#endif // ALLOC_DEBUG + +int wrapmem_init(void) +{ + InitializeListHead(&allocs); + InitializeListHead(&slack_allocs); + InitializeListHead(&vmem_list); + spin_lock_init(&alloc_lock); + return 0; +} + +void wrapmem_exit(void) +{ + enum alloc_type type; + struct nt_list *ent; + + /* free all pointers on the slack list */ + while (1) { + struct slack_alloc_info *info; + spin_lock_bh(&alloc_lock); + ent = RemoveHeadList(&slack_allocs); + spin_unlock_bh(&alloc_lock); + if (!ent) + break; + info = container_of(ent, struct slack_alloc_info, list); +#ifdef ALLOC_DEBUG + atomic_sub(info->size, &alloc_sizes[ALLOC_TYPE_SLACK]); +#endif + kfree(info); + } + type = 0; +#ifdef ALLOC_DEBUG + for (type = 0; type < ALLOC_TYPE_MAX; type++) { + int n = atomic_read(&alloc_sizes[type]); + if (n) + WARNING("%d bytes of memory in %d leaking", n, type); + } + +#if ALLOC_DEBUG > 1 + while (1) { + struct alloc_info *info; + + spin_lock_bh(&alloc_lock); + ent = RemoveHeadList(&allocs); + spin_unlock_bh(&alloc_lock); + if (!ent) + break; + info = container_of(ent, struct alloc_info, list); + atomic_sub(info->size, &alloc_sizes[ALLOC_TYPE_SLACK]); + WARNING("%p in %d of size %zu allocated at %s(%d) " + "with tag 0x%08X leaking; freeing it now", + info + 1, info->type, info->size, info->file, + info->line, info->tag); + if (info->type == ALLOC_TYPE_KMALLOC_ATOMIC || + info->type == ALLOC_TYPE_KMALLOC_NON_ATOMIC) + kfree(info); + else if (info->type == ALLOC_TYPE_VMALLOC_ATOMIC || + info->type == ALLOC_TYPE_VMALLOC_NON_ATOMIC) + vfree(info); + else if (info->type == ALLOC_TYPE_PAGES) + free_pages((unsigned long)info, get_order(info->size)); + else + WARNING("invalid type: %d; not freed", info->type); + } +#endif +#endif + return; +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/pnp.c +++ linux-2.6.32/ubuntu/ndiswrapper/pnp.c @@ -0,0 +1,742 @@ +/* + * Copyright (C) 2005 Giridhar Pemmasani + * + * 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. + * + */ + +#include "usb.h" +#include "pnp.h" +#include "wrapndis.h" +#include "loader.h" + +/* Functions callable from the NDIS driver */ +wstdcall NTSTATUS pdoDispatchDeviceControl(struct device_object *pdo, + struct irp *irp); +wstdcall NTSTATUS pdoDispatchPnp(struct device_object *pdo, struct irp *irp); +wstdcall NTSTATUS pdoDispatchPower(struct device_object *pdo, struct irp *irp); + +static NTSTATUS start_pdo(struct device_object *pdo) +{ + int i, ret, count, resources_size; + struct wrap_device *wd; + struct pci_dev *pdev; + struct cm_partial_resource_descriptor *entry; + struct cm_partial_resource_list *partial_resource_list; + + ENTER1("%p, %p", pdo, pdo->reserved); + wd = pdo->reserved; + if (ntoskernel_init_device(wd)) + EXIT1(return STATUS_FAILURE); + if (wrap_is_usb_bus(wd->dev_bus)) { +#ifdef ENABLE_USB + if (usb_init_device(wd)) { + ntoskernel_exit_device(wd); + EXIT1(return STATUS_FAILURE); + } +#endif + EXIT1(return STATUS_SUCCESS); + } + if (!wrap_is_pci_bus(wd->dev_bus)) + EXIT1(return STATUS_SUCCESS); + pdev = wd->pci.pdev; + ret = pci_enable_device(pdev); + if (ret) { + ERROR("couldn't enable PCI device: %x", ret); + return STATUS_FAILURE; + } + ret = pci_request_regions(pdev, DRIVER_NAME); + if (ret) { + ERROR("couldn't request PCI regions: %x", ret); + goto err_enable; + } + pci_set_power_state(pdev, PCI_D0); +#ifdef CONFIG_X86_64 + /* 64-bit broadcom driver doesn't work if DMA is allocated + * from over 1GB */ + if (wd->vendor == 0x14e4) { + if (pci_set_dma_mask(pdev, DMA_BIT_MASK(30)) || + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(30))) + WARNING("couldn't set DMA mask; this driver " + "may not work with more than 1GB RAM"); + } +#endif + /* IRQ resource entry is filled in from pdev, instead of + * pci_resource macros */ + for (i = count = 0; pci_resource_start(pdev, i); i++) + if ((pci_resource_flags(pdev, i) & IORESOURCE_MEM) || + (pci_resource_flags(pdev, i) & IORESOURCE_IO)) + count++; + /* space for entry for IRQ is already in + * cm_partial_resource_list */ + resources_size = sizeof(struct cm_resource_list) + + sizeof(struct cm_partial_resource_descriptor) * count; + TRACE2("resources: %d, %d", count, resources_size); + wd->resource_list = kzalloc(resources_size, GFP_KERNEL); + if (!wd->resource_list) { + WARNING("couldn't allocate memory"); + goto err_regions; + } + wd->resource_list->count = 1; + wd->resource_list->list[0].interface_type = PCIBus; + /* bus_number is not used by WDM drivers */ + wd->resource_list->list[0].bus_number = pdev->bus->number; + + partial_resource_list = + &wd->resource_list->list->partial_resource_list; + partial_resource_list->version = 1; + partial_resource_list->revision = 1; + partial_resource_list->count = count + 1; + + for (i = count = 0; pci_resource_start(pdev, i); i++) { + entry = &partial_resource_list->partial_descriptors[count]; + TRACE2("%d", count); + if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) { + entry->type = CmResourceTypeMemory; + entry->flags = CM_RESOURCE_MEMORY_READ_WRITE; + entry->share = CmResourceShareDeviceExclusive; + } else if (pci_resource_flags(pdev, i) & IORESOURCE_IO) { + entry->type = CmResourceTypePort; + entry->flags = CM_RESOURCE_PORT_IO; + entry->share = CmResourceShareDeviceExclusive; +#if 0 + } else if (pci_resource_flags(pdev, i) & IORESOURCE_DMA) { + /* it looks like no driver uses this resource */ + typeof(pci_resource_flags(pdev, 0)) flags; + entry->type = CmResourceTypeDma; + flags = pci_resource_flags(pdev, i); + if (flags & IORESOURCE_DMA_TYPEA) + entry->flags |= CM_RESOURCE_DMA_TYPE_A; + else if (flags & IORESOURCE_DMA_TYPEB) + entry->flags |= CM_RESOURCE_DMA_TYPE_B; + else if (flags & IORESOURCE_DMA_TYPEF) + entry->flags |= CM_RESOURCE_DMA_TYPE_F; + if (flags & IORESOURCE_DMA_8BIT) + entry->flags |= CM_RESOURCE_DMA_8; + else if (flags & IORESOURCE_DMA_16BIT) + entry->flags |= CM_RESOURCE_DMA_16; + /* what about 32bit DMA? */ + else if (flags & IORESOURCE_DMA_8AND16BIT) + entry->flags |= CM_RESOURCE_DMA_8_AND_16; + if (flags & IORESOURCE_DMA_MASTER) + entry->flags |= CM_RESOURCE_DMA_BUS_MASTER; + entry->u.dma.channel = pci_resource_start(pdev, i); + /* what should this be? */ + entry->u.dma.port = 1; +#endif + } else + continue; + /* TODO: Add other resource types? */ + entry->u.generic.start = + (ULONG_PTR)pci_resource_start(pdev, i); + entry->u.generic.length = pci_resource_len(pdev, i); + count++; + } + + /* put IRQ resource at the end */ + entry = &partial_resource_list->partial_descriptors[count++]; + entry->type = CmResourceTypeInterrupt; + entry->flags = CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE; + /* we assume all devices use shared IRQ */ + entry->share = CmResourceShareShared; + /* as per documentation, interrupt level should be DIRQL, but + * examples from DDK as well some drivers, such as AR5211, + * RT8180L use interrupt level as interrupt vector also in + * NdisMRegisterInterrupt */ + entry->u.interrupt.level = pdev->irq; + entry->u.interrupt.vector = pdev->irq; + entry->u.interrupt.affinity = -1; + + TRACE2("resource list count %d, irq: %d", + partial_resource_list->count, pdev->irq); + pci_set_drvdata(pdev, wd); + EXIT1(return STATUS_SUCCESS); +err_regions: + pci_release_regions(pdev); +err_enable: + pci_disable_device(pdev); + wd->pci.pdev = NULL; + wd->pdo = NULL; + EXIT1(return STATUS_FAILURE); +} + +static void remove_pdo(struct device_object *pdo) +{ + struct wrap_device *wd = pdo->reserved; + + ntoskernel_exit_device(wd); + if (wrap_is_pci_bus(wd->dev_bus)) { + struct pci_dev *pdev = wd->pci.pdev; + pci_release_regions(pdev); + pci_disable_device(pdev); + wd->pci.pdev = NULL; + pci_set_drvdata(pdev, NULL); + } else if (wrap_is_usb_bus(wd->dev_bus)) { +#ifdef ENABLE_USB + usb_exit_device(wd); +#endif + } + if (wd->resource_list) + kfree(wd->resource_list); + wd->resource_list = NULL; + return; +} + +static NTSTATUS IoSendIrpTopDev(struct device_object *dev_obj, ULONG major_fn, + ULONG minor_fn, struct io_stack_location *sl) +{ + NTSTATUS status; + struct nt_event event; + struct irp *irp; + struct io_stack_location *irp_sl; + struct device_object *top_dev = IoGetAttachedDeviceReference(dev_obj); + + KeInitializeEvent(&event, NotificationEvent, FALSE); + irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP, top_dev, NULL, 0, NULL, + &event, NULL); + irp->io_status.status = STATUS_NOT_IMPLEMENTED; + irp->io_status.info = 0; + irp_sl = IoGetNextIrpStackLocation(irp); + if (sl) + memcpy(irp_sl, sl, sizeof(*irp_sl)); + irp_sl->major_fn = major_fn; + irp_sl->minor_fn = minor_fn; + status = IoCallDriver(top_dev, irp); + if (status == STATUS_PENDING) { + KeWaitForSingleObject(&event, Executive, KernelMode, + FALSE, NULL); + status = irp->io_status.status; + } + ObDereferenceObject(top_dev); + return status; +} + +wstdcall NTSTATUS pdoDispatchDeviceControl(struct device_object *pdo, + struct irp *irp) +{ + struct io_stack_location *irp_sl; + NTSTATUS status; + + DUMP_IRP(irp); + irp_sl = IoGetCurrentIrpStackLocation(irp); +#ifdef ENABLE_USB + status = wrap_submit_irp(pdo, irp); + IOTRACE("status: %08X", status); + if (status != STATUS_PENDING) + IoCompleteRequest(irp, IO_NO_INCREMENT); +#else + status = irp->io_status.status = STATUS_NOT_IMPLEMENTED; + IoCompleteRequest(irp, IO_NO_INCREMENT); +#endif + IOEXIT(return status); +} +WIN_FUNC_DECL(pdoDispatchDeviceControl,2) + +wstdcall NTSTATUS pdoDispatchPnp(struct device_object *pdo, struct irp *irp) +{ + struct io_stack_location *irp_sl; + struct wrap_device *wd; + NTSTATUS status; +#ifdef ENABLE_USB + struct usbd_bus_interface_usbdi *usb_intf; +#endif + + irp_sl = IoGetCurrentIrpStackLocation(irp); + TRACE2("%p %d:%d", pdo, irp_sl->major_fn, irp_sl->minor_fn); + wd = pdo->reserved; + switch (irp_sl->minor_fn) { + case IRP_MN_START_DEVICE: + status = start_pdo(pdo); + break; + case IRP_MN_QUERY_STOP_DEVICE: + case IRP_MN_STOP_DEVICE: + case IRP_MN_QUERY_REMOVE_DEVICE: + status = STATUS_SUCCESS; + break; + case IRP_MN_REMOVE_DEVICE: + remove_pdo(pdo); + status = STATUS_SUCCESS; + break; + case IRP_MN_QUERY_INTERFACE: +#ifdef ENABLE_USB + if (!wrap_is_usb_bus(wd->dev_bus)) { + status = STATUS_NOT_IMPLEMENTED; + break; + } + TRACE2("type: %x, size: %d, version: %d", + irp_sl->params.query_intf.type->data1, + irp_sl->params.query_intf.size, + irp_sl->params.query_intf.version); + usb_intf = (struct usbd_bus_interface_usbdi *) + irp_sl->params.query_intf.intf; + usb_intf->Context = wd; + usb_intf->InterfaceReference = USBD_InterfaceReference; + usb_intf->InterfaceDereference = USBD_InterfaceDereference; + usb_intf->GetUSBDIVersion = USBD_InterfaceGetUSBDIVersion; + usb_intf->QueryBusTime = USBD_InterfaceQueryBusTime; + usb_intf->SubmitIsoOutUrb = USBD_InterfaceSubmitIsoOutUrb; + usb_intf->QueryBusInformation = + USBD_InterfaceQueryBusInformation; + if (irp_sl->params.query_intf.version >= + USB_BUSIF_USBDI_VERSION_1) + usb_intf->IsDeviceHighSpeed = + USBD_InterfaceIsDeviceHighSpeed; + if (irp_sl->params.query_intf.version >= + USB_BUSIF_USBDI_VERSION_2) + usb_intf->LogEntry = USBD_InterfaceLogEntry; + status = STATUS_SUCCESS; +#else + status = STATUS_NOT_IMPLEMENTED; +#endif + break; + default: + TRACE2("fn %d not implemented", irp_sl->minor_fn); + status = STATUS_SUCCESS; + break; + } + irp->io_status.status = status; + TRACE2("status: %08X", status); + IoCompleteRequest(irp, IO_NO_INCREMENT); + IOEXIT(return status); +} +WIN_FUNC_DECL(pdoDispatchPnp,2) + +wstdcall NTSTATUS pdoDispatchPower(struct device_object *pdo, struct irp *irp) +{ + struct io_stack_location *irp_sl; + struct wrap_device *wd; + union power_state power_state; + struct pci_dev *pdev; + NTSTATUS status; + + irp_sl = IoGetCurrentIrpStackLocation(irp); + wd = pdo->reserved; + TRACE2("pdo: %p, fn: %d:%d, wd: %p", + pdo, irp_sl->major_fn, irp_sl->minor_fn, wd); + switch (irp_sl->minor_fn) { + case IRP_MN_WAIT_WAKE: + /* TODO: this is not complete/correct */ + TRACE2("state: %d, completion: %p", + irp_sl->params.power.state.system_state, + irp_sl->completion_routine); + IoMarkIrpPending(irp); + status = STATUS_PENDING; + break; + case IRP_MN_SET_POWER: + power_state = irp_sl->params.power.state; + if (power_state.device_state == PowerDeviceD0) { + TRACE2("resuming %p", wd); + if (wrap_is_pci_bus(wd->dev_bus)) { + pdev = wd->pci.pdev; + pci_restore_state(pdev); + if (wd->pci.wake_state == PowerDeviceD3) { + pci_enable_wake(wd->pci.pdev, + PCI_D3hot, 0); + pci_enable_wake(wd->pci.pdev, + PCI_D3cold, 0); + } + pci_set_power_state(pdev, PCI_D0); + } else { // usb device +#ifdef ENABLE_USB + wrap_resume_urbs(wd); +#endif + } + } else { + TRACE2("suspending device %p", wd); + if (wrap_is_pci_bus(wd->dev_bus)) { + pdev = wd->pci.pdev; + pci_save_state(pdev); + TRACE2("%d", wd->pci.wake_state); + if (wd->pci.wake_state == PowerDeviceD3) { + pci_enable_wake(wd->pci.pdev, + PCI_D3hot, 1); + pci_enable_wake(wd->pci.pdev, + PCI_D3cold, 1); + } + pci_set_power_state(pdev, PCI_D3hot); + } else { // usb device +#ifdef ENABLE_USB + wrap_suspend_urbs(wd); +#endif + } + } + status = STATUS_SUCCESS; + break; + case IRP_MN_QUERY_POWER: + status = STATUS_SUCCESS; + break; + default: + TRACE2("fn %d not implemented", irp_sl->minor_fn); + status = STATUS_SUCCESS; + break; + } + irp->io_status.status = status; + IoCompleteRequest(irp, IO_NO_INCREMENT); + return status; +} +WIN_FUNC_DECL(pdoDispatchPower,2) + +static NTSTATUS pnp_set_device_power_state(struct wrap_device *wd, + enum device_power_state state) +{ + NTSTATUS status; + struct device_object *pdo; + struct io_stack_location irp_sl; + + pdo = wd->pdo; + IOTRACE("%p, %p", pdo, IoGetAttachedDevice(pdo)); + memset(&irp_sl, 0, sizeof(irp_sl)); + irp_sl.params.power.state.device_state = state; + irp_sl.params.power.type = DevicePowerState; + if (state > PowerDeviceD0) { + status = IoSendIrpTopDev(pdo, IRP_MJ_POWER, IRP_MN_QUERY_POWER, + &irp_sl); + if (status != STATUS_SUCCESS) { + TRACE1("query of power to %d returns %08X", + state, status); + EXIT1(return status); + } + } + status = IoSendIrpTopDev(pdo, IRP_MJ_POWER, IRP_MN_SET_POWER, &irp_sl); + if (status != STATUS_SUCCESS) + WARNING("setting power to %d failed: %08X", state, status); + EXIT1(return status); +} + +NTSTATUS pnp_start_device(struct wrap_device *wd) +{ + struct device_object *fdo; + struct device_object *pdo; + struct io_stack_location irp_sl; + NTSTATUS status; + + pdo = wd->pdo; + /* TODO: for now we use same resources for both translated + * resources and raw resources */ + memset(&irp_sl, 0, sizeof(irp_sl)); + irp_sl.params.start_device.allocated_resources = + wd->resource_list; + irp_sl.params.start_device.allocated_resources_translated = + wd->resource_list; + status = IoSendIrpTopDev(pdo, IRP_MJ_PNP, IRP_MN_START_DEVICE, &irp_sl); + fdo = IoGetAttachedDevice(pdo); + if (status == STATUS_SUCCESS) + fdo->drv_obj->drv_ext->count++; + else + WARNING("Windows driver couldn't initialize the device (%08X)", + status); + EXIT1(return status); +} + +NTSTATUS pnp_stop_device(struct wrap_device *wd) +{ + struct device_object *pdo; + NTSTATUS status; + + pdo = wd->pdo; + status = IoSendIrpTopDev(pdo, IRP_MJ_PNP, IRP_MN_QUERY_STOP_DEVICE, + NULL); + if (status != STATUS_SUCCESS) + WARNING("status: %08X", status); + /* for now we ignore query status */ + status = IoSendIrpTopDev(pdo, IRP_MJ_PNP, IRP_MN_STOP_DEVICE, NULL); + if (status != STATUS_SUCCESS) + WARNING("status: %08X", status); + if (status != STATUS_SUCCESS) + WARNING("status: %08X", status); + EXIT2(return status); +} + +NTSTATUS pnp_remove_device(struct wrap_device *wd) +{ + struct device_object *pdo, *fdo; + struct driver_object *fdo_drv_obj; + NTSTATUS status; + + pdo = wd->pdo; + fdo = IoGetAttachedDevice(pdo); + fdo_drv_obj = fdo->drv_obj; + TRACE2("%p, %p, %p", pdo, fdo, fdo_drv_obj); + status = IoSendIrpTopDev(pdo, IRP_MJ_PNP, IRP_MN_QUERY_REMOVE_DEVICE, + NULL); + if (status != STATUS_SUCCESS) + WARNING("status: %08X", status); + + status = IoSendIrpTopDev(pdo, IRP_MJ_PNP, IRP_MN_REMOVE_DEVICE, NULL); + if (status != STATUS_SUCCESS) + WARNING("status: %08X", status); + /* TODO: should we use count in drv_ext or driver's Object + * header reference count to keep count of devices associated + * with a driver? */ + if (status == STATUS_SUCCESS) + fdo_drv_obj->drv_ext->count--; + TRACE1("count: %d", fdo_drv_obj->drv_ext->count); + if (fdo_drv_obj->drv_ext->count < 0) + WARNING("wrong count: %d", fdo_drv_obj->drv_ext->count); + if (fdo_drv_obj->drv_ext->count == 0) { + struct wrap_driver *wrap_driver; + TRACE1("unloading driver: %p", fdo_drv_obj); + wrap_driver = + IoGetDriverObjectExtension(fdo_drv_obj, + (void *)WRAP_DRIVER_CLIENT_ID); + if (fdo_drv_obj->unload) + LIN2WIN1(fdo_drv_obj->unload, fdo_drv_obj); + if (wrap_driver) { + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + unload_wrap_driver(wrap_driver); + up(&loader_mutex); + } else + ERROR("couldn't get wrap_driver"); + ObDereferenceObject(fdo_drv_obj); + } + IoDeleteDevice(pdo); + unload_wrap_device(wd); + EXIT1(return status); +} + +WIN_FUNC_DECL(IoInvalidDeviceRequest,2) + +static struct device_object *alloc_pdo(struct driver_object *drv_obj) +{ + struct device_object *pdo; + NTSTATUS status ; + int i; + struct ansi_string ansi_name; + struct unicode_string unicode_name; + + RtlInitAnsiString(&ansi_name, "NDISpdo"); + if (RtlAnsiStringToUnicodeString(&unicode_name, &ansi_name, TRUE) == + STATUS_SUCCESS) { + status = IoCreateDevice(drv_obj, 0, &unicode_name, + FILE_DEVICE_UNKNOWN, + FILE_AUTOGENERATED_DEVICE_NAME, + FALSE, &pdo); + RtlFreeUnicodeString(&unicode_name); + } else { + status = IoCreateDevice(drv_obj, 0, NULL, + FILE_DEVICE_UNKNOWN, + FILE_AUTOGENERATED_DEVICE_NAME, + FALSE, &pdo); + } + TRACE1("%p, %d, %p", drv_obj, status, pdo); + if (status != STATUS_SUCCESS) + return NULL; + /* dispatch routines are called as Windows functions */ + for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) + drv_obj->major_func[i] = WIN_FUNC_PTR(IoInvalidDeviceRequest,2); + drv_obj->major_func[IRP_MJ_INTERNAL_DEVICE_CONTROL] = + WIN_FUNC_PTR(pdoDispatchDeviceControl,2); + drv_obj->major_func[IRP_MJ_DEVICE_CONTROL] = + WIN_FUNC_PTR(pdoDispatchDeviceControl,2); + drv_obj->major_func[IRP_MJ_POWER] = WIN_FUNC_PTR(pdoDispatchPower,2); + drv_obj->major_func[IRP_MJ_PNP] = WIN_FUNC_PTR(pdoDispatchPnp,2); + return pdo; +} + +static int wrap_pnp_start_device(struct wrap_device *wd) +{ + struct wrap_driver *driver; + struct device_object *pdo; + struct driver_object *pdo_drv_obj; + + ENTER1("wd: %p", wd); + + if (!((wrap_is_pci_bus(wd->dev_bus)) || + (wrap_is_usb_bus(wd->dev_bus)))) { + ERROR("bus type %d (%d) not supported", + WRAP_BUS(wd->dev_bus), wd->dev_bus); + EXIT1(return -EINVAL); + } + driver = load_wrap_driver(wd); + if (!driver) + return -ENODEV; + + wd->driver = driver; + wd->dev_bus = WRAP_DEVICE_BUS(driver->dev_type, WRAP_BUS(wd->dev_bus)); + TRACE1("dev type: %d, bus type: %d, %d", WRAP_DEVICE(wd->dev_bus), + WRAP_BUS(wd->dev_bus), wd->dev_bus); + TRACE1("%d, %d", driver->dev_type, wrap_is_usb_bus(wd->dev_bus)); + /* first create pdo */ + if (wrap_is_pci_bus(wd->dev_bus)) + pdo_drv_obj = find_bus_driver("PCI"); + else // if (wrap_is_usb_bus(wd->dev_bus)) + pdo_drv_obj = find_bus_driver("USB"); + if (!pdo_drv_obj) + return -EINVAL; + pdo = alloc_pdo(pdo_drv_obj); + if (!pdo) + return -ENOMEM; + wd->pdo = pdo; + pdo->reserved = wd; + if (WRAP_DEVICE(wd->dev_bus) == WRAP_NDIS_DEVICE) { + if (init_ndis_driver(driver->drv_obj)) { + IoDeleteDevice(pdo); + return -EINVAL; + } + } + TRACE1("%p", driver->drv_obj->drv_ext->add_device); + if (driver->drv_obj->drv_ext->add_device(driver->drv_obj, pdo) != + STATUS_SUCCESS) { + IoDeleteDevice(pdo); + return -ENOMEM; + } + if (pnp_start_device(wd) != STATUS_SUCCESS) { + /* TODO: we need proper cleanup, to deallocate memory, + * for example */ + pnp_remove_device(wd); + return -EINVAL; + } + return 0; +} + +/* + * This function should not be marked __devinit because PCI IDs are + * added dynamically. + */ +int wrap_pnp_start_pci_device(struct pci_dev *pdev, + const struct pci_device_id *ent) +{ + struct load_device load_device; + struct wrap_device *wd; + + ENTER1("called for %04x:%04x:%04x:%04x", pdev->vendor, pdev->device, + pdev->subsystem_vendor, pdev->subsystem_device); + + load_device.bus = WRAP_PCI_BUS; + load_device.vendor = pdev->vendor; + load_device.device = pdev->device; + load_device.subvendor = pdev->subsystem_vendor; + load_device.subdevice = pdev->subsystem_device; + wd = load_wrap_device(&load_device); + if (!wd) + EXIT1(return -ENODEV); + wd->pci.pdev = pdev; + return wrap_pnp_start_device(wd); +} + +void wrap_pnp_remove_pci_device(struct pci_dev *pdev) +{ + struct wrap_device *wd; + + wd = (struct wrap_device *)pci_get_drvdata(pdev); + ENTER1("%p, %p", pdev, wd); + if (!wd) + EXIT1(return); + pnp_remove_device(wd); +} + +int wrap_pnp_suspend_pci_device(struct pci_dev *pdev, pm_message_t state) +{ + struct wrap_device *wd; + + wd = (struct wrap_device *)pci_get_drvdata(pdev); + return pnp_set_device_power_state(wd, PowerDeviceD3); +} + +int wrap_pnp_resume_pci_device(struct pci_dev *pdev) +{ + struct wrap_device *wd; + + wd = (struct wrap_device *)pci_get_drvdata(pdev); + return pnp_set_device_power_state(wd, PowerDeviceD0); +} + +#ifdef ENABLE_USB +int wrap_pnp_start_usb_device(struct usb_interface *intf, + const struct usb_device_id *usb_id) +{ + struct wrap_device *wd; + int ret; + struct usb_device *udev = interface_to_usbdev(intf); + ENTER1("%04x, %04x, %04x", udev->descriptor.idVendor, + udev->descriptor.idProduct, udev->descriptor.bDeviceClass); + + /* USB device (e.g., RNDIS) may have multiple interfaces; + initialize one interface only (is there a way to know which + of these interfaces is for network?) */ + + if ((wd = get_wrap_device(udev, WRAP_USB_BUS))) { + TRACE1("device already initialized: %p", wd); + usb_set_intfdata(intf, NULL); + ret = 0; + } else { + struct load_device load_device; + + load_device.bus = WRAP_USB_BUS; + load_device.vendor = le16_to_cpu(udev->descriptor.idVendor); + load_device.device = le16_to_cpu(udev->descriptor.idProduct); + load_device.subvendor = 0; + load_device.subdevice = 0; + wd = load_wrap_device(&load_device); + TRACE2("%p", wd); + if (wd) { + /* some devices (e.g., TI 4150, RNDIS) need + * full reset */ + ret = usb_reset_device(udev); + if (ret) + WARNING("reset failed: %d", ret); + usb_set_intfdata(intf, wd); + wd->usb.intf = intf; + wd->usb.udev = udev; + ret = wrap_pnp_start_device(wd); + } else + ret = -ENODEV; + } + + TRACE2("ret: %d", ret); + if (ret) + EXIT1(return ret); + else + return 0; +} + +void __devexit wrap_pnp_remove_usb_device(struct usb_interface *intf) +{ + struct wrap_device *wd; + + wd = (struct wrap_device *)usb_get_intfdata(intf); + TRACE1("%p, %p", intf, wd); + if (wd == NULL) + EXIT1(return); + usb_set_intfdata(intf, NULL); + wd->usb.intf = NULL; + pnp_remove_device(wd); +} + +int wrap_pnp_suspend_usb_device(struct usb_interface *intf, pm_message_t state) +{ + struct wrap_device *wd; + struct device_object *pdo; + + wd = usb_get_intfdata(intf); + ENTER1("%p, %p", intf, wd); + if (!wd) + EXIT1(return 0); + pdo = wd->pdo; + if (pnp_set_device_power_state(wd, PowerDeviceD3)) + return -1; + return 0; +} + +int wrap_pnp_resume_usb_device(struct usb_interface *intf) +{ + struct wrap_device *wd; + wd = usb_get_intfdata(intf); + ENTER1("%p, %p", intf, wd); + if (!wd) + EXIT1(return 0); + if (pnp_set_device_power_state(wd, PowerDeviceD0)) + return -1; + return 0; +} + +#endif // USB --- linux-2.6.32.orig/ubuntu/ndiswrapper/BOM +++ linux-2.6.32/ubuntu/ndiswrapper/BOM @@ -0,0 +1,2 @@ +Downloaded from: http://sourceforge.net/project/showfiles.php?group_id=93482 +Current Version: 1.55 --- linux-2.6.32.orig/ubuntu/ndiswrapper/ntoskernel_io.c +++ linux-2.6.32/ubuntu/ndiswrapper/ntoskernel_io.c @@ -0,0 +1,1106 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ntoskernel.h" +#include "ndis.h" +#include "wrapndis.h" +#include "usb.h" +#include "loader.h" +#include "ntoskernel_io_exports.h" + +wstdcall void WIN_FUNC(IoAcquireCancelSpinLock,1) + (KIRQL *irql) __acquires(irql) +{ + spin_lock_bh(&irp_cancel_lock); + *irql = 0; +} + +wstdcall void WIN_FUNC(IoReleaseCancelSpinLock,1) + (KIRQL irql) __releases(irql) +{ + spin_unlock_bh(&irp_cancel_lock); +} + +wstdcall int WIN_FUNC(IoIsWdmVersionAvailable,2) + (UCHAR major, UCHAR minor) +{ + IOENTER("%d, %x", major, minor); + if (major == 1 && + (minor == 0x30 || // Windows 2003 + minor == 0x20 || // Windows XP + minor == 0x10)) // Windows 2000 + IOEXIT(return TRUE); + IOEXIT(return FALSE); +} + +wstdcall BOOLEAN WIN_FUNC(IoIs32bitProcess,1) + (struct irp *irp) +{ +#ifdef CONFIG_X86_64 + return FALSE; +#else + return TRUE; +#endif +} + +wstdcall void WIN_FUNC(IoInitializeIrp,3) + (struct irp *irp, USHORT size, CCHAR stack_count) +{ + IOENTER("irp: %p, %d, %d", irp, size, stack_count); + + memset(irp, 0, size); + irp->size = size; + irp->stack_count = stack_count; + irp->current_location = stack_count; + IoGetCurrentIrpStackLocation(irp) = IRP_SL(irp, stack_count); + IOEXIT(return); +} + +wstdcall void WIN_FUNC(IoReuseIrp,2) + (struct irp *irp, NTSTATUS status) +{ + IOENTER("%p, %d", irp, status); + if (irp) { + UCHAR alloc_flags; + + alloc_flags = irp->alloc_flags; + IoInitializeIrp(irp, irp->size, irp->stack_count); + irp->alloc_flags = alloc_flags; + irp->io_status.status = status; + } + IOEXIT(return); +} + +wstdcall struct irp *WIN_FUNC(IoAllocateIrp,2) + (char stack_count, BOOLEAN charge_quota) +{ + struct irp *irp; + int irp_size; + + IOENTER("count: %d", stack_count); + stack_count++; + irp_size = IoSizeOfIrp(stack_count); + irp = kmalloc(irp_size, irql_gfp()); + if (irp) + IoInitializeIrp(irp, irp_size, stack_count); + IOTRACE("irp %p", irp); + IOEXIT(return irp); +} + +wstdcall BOOLEAN WIN_FUNC(IoCancelIrp,1) + (struct irp *irp) +{ + typeof(irp->cancel_routine) cancel_routine; + + /* NB: this function may be called at DISPATCH_LEVEL */ + IOTRACE("irp: %p", irp); + if (!irp) + return FALSE; + DUMP_IRP(irp); + IoAcquireCancelSpinLock(&irp->cancel_irql); + cancel_routine = xchg(&irp->cancel_routine, NULL); + IOTRACE("%p", cancel_routine); + irp->cancel = TRUE; + if (cancel_routine) { + struct io_stack_location *irp_sl; + irp_sl = IoGetCurrentIrpStackLocation(irp); + IOTRACE("%p, %p", irp_sl, irp_sl->dev_obj); + /* cancel_routine will release the spin lock */ + __release(irp->cancel_irql); + LIN2WIN2(cancel_routine, irp_sl->dev_obj, irp); + /* in usb's cancel, irp->cancel is set to indicate + * status of cancel */ + IOEXIT(return xchg(&irp->cancel, TRUE)); + } else { + IOTRACE("irp %p already canceled", irp); + IoReleaseCancelSpinLock(irp->cancel_irql); + IOEXIT(return FALSE); + } +} + +wstdcall void IoQueueThreadIrp(struct irp *irp) +{ + struct nt_thread *thread; + KIRQL irql; + + thread = get_current_nt_thread(); + if (thread) { + IOTRACE("thread: %p, task: %p", thread, thread->task); + irp->flags |= IRP_SYNCHRONOUS_API; + irql = nt_spin_lock_irql(&thread->lock, DISPATCH_LEVEL); + InsertTailList(&thread->irps, &irp->thread_list); + IoIrpThread(irp) = thread; + nt_spin_unlock_irql(&thread->lock, irql); + } else + IoIrpThread(irp) = NULL; +} + +wstdcall void IoDequeueThreadIrp(struct irp *irp) +{ + struct nt_thread *thread; + KIRQL irql; + + thread = IoIrpThread(irp); + if (thread) { + irql = nt_spin_lock_irql(&thread->lock, DISPATCH_LEVEL); + RemoveEntryList(&irp->thread_list); + nt_spin_unlock_irql(&thread->lock, irql); + } +} + +wstdcall void WIN_FUNC(IoFreeIrp,1) + (struct irp *irp) +{ + IOENTER("irp = %p", irp); + if (irp->flags & IRP_SYNCHRONOUS_API) + IoDequeueThreadIrp(irp); + kfree(irp); + + IOEXIT(return); +} + +wstdcall struct irp *WIN_FUNC(IoBuildAsynchronousFsdRequest,6) + (ULONG major_fn, struct device_object *dev_obj, void *buffer, + ULONG length, LARGE_INTEGER *offset, + struct io_status_block *user_status) +{ + struct irp *irp; + struct io_stack_location *irp_sl; + + IOENTER("%p", dev_obj); + if (!dev_obj) + IOEXIT(return NULL); + irp = IoAllocateIrp(dev_obj->stack_count, FALSE); + if (irp == NULL) { + WARNING("couldn't allocate irp"); + IOEXIT(return NULL); + } + + irp_sl = IoGetNextIrpStackLocation(irp); + irp_sl->major_fn = major_fn; + IOTRACE("major_fn: %d", major_fn); + irp_sl->minor_fn = 0; + irp_sl->flags = 0; + irp_sl->control = 0; + irp_sl->dev_obj = dev_obj; + irp_sl->file_obj = NULL; + irp_sl->completion_routine = NULL; + + if (dev_obj->flags & DO_DIRECT_IO) { + irp->mdl = IoAllocateMdl(buffer, length, FALSE, FALSE, irp); + if (irp->mdl == NULL) { + IoFreeIrp(irp); + return NULL; + } + MmProbeAndLockPages(irp->mdl, KernelMode, + major_fn == IRP_MJ_WRITE ? + IoReadAccess : IoWriteAccess); + IOTRACE("mdl: %p", irp->mdl); + } else if (dev_obj->flags & DO_BUFFERED_IO) { + irp->associated_irp.system_buffer = buffer; + irp->flags = IRP_BUFFERED_IO; + irp->mdl = NULL; + IOTRACE("buffer: %p", buffer); + } + if (major_fn == IRP_MJ_READ) { + irp_sl->params.read.length = length; + irp_sl->params.read.byte_offset = *offset; + } else if (major_fn == IRP_MJ_WRITE) { + irp_sl->params.write.length = length; + irp_sl->params.write.byte_offset = *offset; + } + irp->user_status = user_status; + IOTRACE("irp: %p", irp); + return irp; +} + +wstdcall struct irp *WIN_FUNC(IoBuildSynchronousFsdRequest,7) + (ULONG major_fn, struct device_object *dev_obj, void *buf, + ULONG length, LARGE_INTEGER *offset, struct nt_event *event, + struct io_status_block *user_status) +{ + struct irp *irp; + + irp = IoBuildAsynchronousFsdRequest(major_fn, dev_obj, buf, length, + offset, user_status); + if (irp == NULL) + return NULL; + irp->user_event = event; + IoQueueThreadIrp(irp); + return irp; +} + +wstdcall struct irp *WIN_FUNC(IoBuildDeviceIoControlRequest,9) + (ULONG ioctl, struct device_object *dev_obj, + void *input_buf, ULONG input_buf_len, void *output_buf, + ULONG output_buf_len, BOOLEAN internal_ioctl, + struct nt_event *event, struct io_status_block *io_status) +{ + struct irp *irp; + struct io_stack_location *irp_sl; + ULONG buf_len; + + IOENTER("%p, 0x%08x, %d", dev_obj, ioctl, internal_ioctl); + if (!dev_obj) + IOEXIT(return NULL); + irp = IoAllocateIrp(dev_obj->stack_count, FALSE); + if (irp == NULL) { + WARNING("couldn't allocate irp"); + return NULL; + } + irp_sl = IoGetNextIrpStackLocation(irp); + irp_sl->params.dev_ioctl.code = ioctl; + irp_sl->params.dev_ioctl.input_buf_len = input_buf_len; + irp_sl->params.dev_ioctl.output_buf_len = output_buf_len; + irp_sl->major_fn = (internal_ioctl) ? + IRP_MJ_INTERNAL_DEVICE_CONTROL : IRP_MJ_DEVICE_CONTROL; + IOTRACE("%d", IO_METHOD_FROM_CTL_CODE(ioctl)); + + switch (IO_METHOD_FROM_CTL_CODE(ioctl)) { + case METHOD_BUFFERED: + buf_len = max(input_buf_len, output_buf_len); + if (buf_len) { + irp->associated_irp.system_buffer = + ExAllocatePoolWithTag(NonPagedPool, buf_len, 0); + if (!irp->associated_irp.system_buffer) { + IoFreeIrp(irp); + IOEXIT(return NULL); + } + irp->associated_irp.system_buffer = input_buf; + if (input_buf) + memcpy(irp->associated_irp.system_buffer, + input_buf, input_buf_len); + irp->flags = IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER; + if (output_buf) + irp->flags = IRP_INPUT_OPERATION; + irp->user_buf = output_buf; + } else + irp->user_buf = NULL; + break; + case METHOD_IN_DIRECT: + case METHOD_OUT_DIRECT: + if (input_buf) { + irp->associated_irp.system_buffer = + ExAllocatePoolWithTag(NonPagedPool, + input_buf_len, 0); + if (!irp->associated_irp.system_buffer) { + IoFreeIrp(irp); + IOEXIT(return NULL); + } + memcpy(irp->associated_irp.system_buffer, + input_buf, input_buf_len); + irp->flags = IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER; + } + /* TODO: we are supposed to setup MDL, but USB layer + * doesn't use MDLs. Moreover, USB layer mirrors + * non-DMAable buffers, so no need to allocate + * DMAable buffer here */ + if (output_buf) { + irp->associated_irp.system_buffer = + ExAllocatePoolWithTag(NonPagedPool, + output_buf_len, 0); + if (!irp->associated_irp.system_buffer) { + IoFreeIrp(irp); + IOEXIT(return NULL); + } + irp->flags = IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER; + } + break; + case METHOD_NEITHER: + irp->user_buf = output_buf; + irp_sl->params.dev_ioctl.type3_input_buf = input_buf; + break; + } + + irp->user_status = io_status; + irp->user_event = event; + IoQueueThreadIrp(irp); + + IOTRACE("irp: %p", irp); + IOEXIT(return irp); +} + +wfastcall NTSTATUS WIN_FUNC(IofCallDriver,2) + (struct device_object *dev_obj, struct irp *irp) +{ + struct io_stack_location *irp_sl; + NTSTATUS status; + driver_dispatch_t *major_func; + struct driver_object *drv_obj; + + if (irp->current_location <= 0) { + ERROR("invalid irp: %p, %d", irp, irp->current_location); + return STATUS_INVALID_PARAMETER; + } + IOTRACE("%p, %p, %p, %d, %d, %p", dev_obj, irp, dev_obj->drv_obj, + irp->current_location, irp->stack_count, + IoGetCurrentIrpStackLocation(irp)); + IoSetNextIrpStackLocation(irp); + DUMP_IRP(irp); + irp_sl = IoGetCurrentIrpStackLocation(irp); + drv_obj = dev_obj->drv_obj; + irp_sl->dev_obj = dev_obj; + major_func = drv_obj->major_func[irp_sl->major_fn]; + IOTRACE("major_func: %p, dev_obj: %p", major_func, dev_obj); + if (major_func) + status = LIN2WIN2(major_func, dev_obj, irp); + else { + ERROR("major_function %d is not implemented", + irp_sl->major_fn); + status = STATUS_NOT_SUPPORTED; + } + IOEXIT(return status); +} + +wfastcall void WIN_FUNC(IofCompleteRequest,2) + (struct irp *irp, CHAR prio_boost) +{ + struct io_stack_location *irp_sl; + +#ifdef IO_DEBUG + DUMP_IRP(irp); + if (irp->io_status.status == STATUS_PENDING) { + ERROR("invalid irp: %p, STATUS_PENDING", irp); + return; + } + if (irp->current_location < 0 || + irp->current_location >= irp->stack_count) { + ERROR("invalid irp: %p, %d", irp, irp->current_location); + return; + } +#endif + for (irp_sl = IoGetCurrentIrpStackLocation(irp); + irp->current_location < irp->stack_count; irp_sl++) { + struct device_object *dev_obj; + NTSTATUS status; + + DUMP_IRP(irp); + if (irp_sl->control & SL_PENDING_RETURNED) + irp->pending_returned = TRUE; + + /* current_location and dev_obj must be same as when + * driver called IoSetCompletionRoutine, which sets + * completion routine at next (lower) location, which + * is what we are going to call below; so we set + * current_location and dev_obj for the previous + * (higher) location */ + IoSkipCurrentIrpStackLocation(irp); + if (irp->current_location < irp->stack_count) + dev_obj = IoGetCurrentIrpStackLocation(irp)->dev_obj; + else + dev_obj = NULL; + + IOTRACE("%d, %d, %p", irp->current_location, irp->stack_count, + dev_obj); + if (irp_sl->completion_routine && + ((irp->io_status.status == STATUS_SUCCESS && + irp_sl->control & SL_INVOKE_ON_SUCCESS) || + (irp->io_status.status != STATUS_SUCCESS && + irp_sl->control & SL_INVOKE_ON_ERROR) || + (irp->cancel == TRUE && + irp_sl->control & SL_INVOKE_ON_CANCEL))) { + IOTRACE("calling completion_routine at: %p, %p", + irp_sl->completion_routine, irp_sl->context); + status = LIN2WIN3(irp_sl->completion_routine, + dev_obj, irp, irp_sl->context); + IOTRACE("status: %08X", status); + if (status == STATUS_MORE_PROCESSING_REQUIRED) + IOEXIT(return); + } else { + /* propagate pending status to next irp_sl */ + if (irp->pending_returned && + irp->current_location < irp->stack_count) + IoMarkIrpPending(irp); + } + } + + if (irp->user_status) { + irp->user_status->status = irp->io_status.status; + irp->user_status->info = irp->io_status.info; + } + + if (irp->user_event) { + IOTRACE("setting event %p", irp->user_event); + KeSetEvent(irp->user_event, prio_boost, FALSE); + } + + if (irp->associated_irp.system_buffer && + (irp->flags & IRP_DEALLOCATE_BUFFER)) + ExFreePool(irp->associated_irp.system_buffer); + else { + struct mdl *mdl; + while ((mdl = irp->mdl)) { + irp->mdl = mdl->next; + MmUnlockPages(mdl); + IoFreeMdl(mdl); + } + } + IOTRACE("freeing irp %p", irp); + IoFreeIrp(irp); + IOEXIT(return); +} + +wstdcall NTSTATUS IoPassIrpDown(struct device_object *dev_obj, struct irp *irp) +{ + IoSkipCurrentIrpStackLocation(irp); + IOEXIT(return IoCallDriver(dev_obj, irp)); +} + +wstdcall NTSTATUS IoIrpSyncComplete(struct device_object *dev_obj, + struct irp *irp, void *context) +{ + if (irp->pending_returned == TRUE) + KeSetEvent(context, IO_NO_INCREMENT, FALSE); + IOEXIT(return STATUS_MORE_PROCESSING_REQUIRED); +} +WIN_FUNC_DECL(IoIrpSyncComplete,3) + +wstdcall NTSTATUS IoSyncForwardIrp(struct device_object *dev_obj, + struct irp *irp) +{ + struct nt_event event; + NTSTATUS status; + + IoCopyCurrentIrpStackLocationToNext(irp); + KeInitializeEvent(&event, SynchronizationEvent, FALSE); + /* completion function is called as Windows function */ + IoSetCompletionRoutine(irp, WIN_FUNC_PTR(IoIrpSyncComplete,3), &event, + TRUE, TRUE, TRUE); + status = IoCallDriver(dev_obj, irp); + IOTRACE("%08X", status); + if (status == STATUS_PENDING) { + KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, + NULL); + status = irp->io_status.status; + } + IOTRACE("%08X", status); + IOEXIT(return status); +} +WIN_FUNC_DECL(IoSyncForwardIrp,2) + +wstdcall NTSTATUS IoAsyncForwardIrp(struct device_object *dev_obj, + struct irp *irp) +{ + NTSTATUS status; + + IoCopyCurrentIrpStackLocationToNext(irp); + status = IoCallDriver(dev_obj, irp); + IOEXIT(return status); +} +WIN_FUNC_DECL(IoAsyncForwardIrp,2) + +wstdcall NTSTATUS IoInvalidDeviceRequest(struct device_object *dev_obj, + struct irp *irp) +{ + struct io_stack_location *irp_sl; + NTSTATUS status; + + irp_sl = IoGetCurrentIrpStackLocation(irp); + WARNING("%d:%d not implemented", irp_sl->major_fn, irp_sl->minor_fn); + irp->io_status.status = STATUS_SUCCESS; + irp->io_status.info = 0; + status = irp->io_status.status; + IoCompleteRequest(irp, IO_NO_INCREMENT); + IOEXIT(return status); +} +WIN_FUNC_DECL(IoInvalidDeviceRequest,2) + +static irqreturn_t io_irq_isr(int irq, void *data ISR_PT_REGS_PARAM_DECL) +{ + struct kinterrupt *interrupt = data; + BOOLEAN ret; + +#ifdef CONFIG_DEBUG_SHIRQ + if (!interrupt->u.enabled) + EXIT1(return IRQ_NONE); +#endif + TRACE6("%p", interrupt); + nt_spin_lock(interrupt->actual_lock); + ret = LIN2WIN2(interrupt->isr, interrupt, interrupt->isr_ctx); + nt_spin_unlock(interrupt->actual_lock); + if (ret == TRUE) + EXIT6(return IRQ_HANDLED); + else + EXIT6(return IRQ_NONE); +} + +wstdcall NTSTATUS WIN_FUNC(IoConnectInterrupt,11) + (struct kinterrupt **kinterrupt, PKSERVICE_ROUTINE isr, void *isr_ctx, + NT_SPIN_LOCK *lock, ULONG vector, KIRQL irql, KIRQL synch_irql, + enum kinterrupt_mode mode, BOOLEAN shared, KAFFINITY cpu_mask, + BOOLEAN save_fp) +{ + struct kinterrupt *interrupt; + IOENTER(""); + interrupt = kzalloc(sizeof(*interrupt), GFP_KERNEL); + if (!interrupt) + IOEXIT(return STATUS_INSUFFICIENT_RESOURCES); + interrupt->vector = vector; + interrupt->cpu_mask = cpu_mask; + nt_spin_lock_init(&interrupt->lock); + if (lock) + interrupt->actual_lock = lock; + else + interrupt->actual_lock = &interrupt->lock; + interrupt->shared = shared; + interrupt->save_fp = save_fp; + interrupt->isr = isr; + interrupt->isr_ctx = isr_ctx; + InitializeListHead(&interrupt->list); + interrupt->irql = irql; + interrupt->synch_irql = synch_irql; + interrupt->mode = mode; + if (request_irq(vector, io_irq_isr, shared ? IRQF_SHARED : 0, + "ndiswrapper", interrupt)) { + WARNING("request for irq %d failed", vector); + kfree(interrupt); + IOEXIT(return STATUS_INSUFFICIENT_RESOURCES); + } + *kinterrupt = interrupt; +#ifdef CONFIG_DEBUG_SHIRQ + interrupt->u.enabled = 1; +#endif + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(IoDisconnectInterrupt,1) + (struct kinterrupt *interrupt) +{ +#ifdef CONFIG_DEBUG_SHIRQ + interrupt->u.enabled = 0; +#endif + free_irq(interrupt->vector, interrupt); + kfree(interrupt); +} + +wstdcall struct mdl *WIN_FUNC(IoAllocateMdl,5) + (void *virt, ULONG length, BOOLEAN second_buf, BOOLEAN charge_quota, + struct irp *irp) +{ + struct mdl *mdl; + mdl = allocate_init_mdl(virt, length); + if (!mdl) + return NULL; + if (irp) { + if (second_buf == TRUE) { + struct mdl *last; + + last = irp->mdl; + while (last->next) + last = last->next; + last->next = mdl; + } else + irp->mdl = mdl; + } + IOTRACE("%p", mdl); + return mdl; +} + +wstdcall void WIN_FUNC(IoFreeMdl,1) + (struct mdl *mdl) +{ + IOTRACE("%p", mdl); + free_mdl(mdl); +} + +wstdcall struct io_workitem *WIN_FUNC(IoAllocateWorkItem,1) + (struct device_object *dev_obj) +{ + struct io_workitem *io_workitem; + + IOENTER("%p", dev_obj); + io_workitem = kmalloc(sizeof(*io_workitem), irql_gfp()); + if (!io_workitem) + IOEXIT(return NULL); + io_workitem->dev_obj = dev_obj; + IOEXIT(return io_workitem); +} + +wstdcall void WIN_FUNC(IoFreeWorkItem,1) + (struct io_workitem *io_workitem) +{ + kfree(io_workitem); + IOEXIT(return); +} + +wstdcall void WIN_FUNC(IoQueueWorkItem,4) + (struct io_workitem *io_workitem, void *func, + enum work_queue_type queue_type, void *context) +{ + IOENTER("%p, %p", io_workitem, io_workitem->dev_obj); + io_workitem->worker_routine = func; + io_workitem->context = context; + schedule_ntos_work_item(func, io_workitem->dev_obj, context); + IOEXIT(return); +} + +wstdcall void WIN_FUNC(ExQueueWorkItem,2) + (struct io_workitem *io_workitem, enum work_queue_type queue_type) +{ + IOENTER("%p", io_workitem); + schedule_ntos_work_item(io_workitem->worker_routine, + io_workitem->dev_obj, io_workitem->context); +} + +wstdcall NTSTATUS WIN_FUNC(IoAllocateDriverObjectExtension,4) + (struct driver_object *drv_obj, void *client_id, ULONG extlen, + void **ext) +{ + struct custom_ext *ce; + + IOENTER("%p, %p", drv_obj, client_id); + ce = kmalloc(sizeof(*ce) + extlen, irql_gfp()); + if (ce == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + IOTRACE("custom_ext: %p", ce); + ce->client_id = client_id; + spin_lock_bh(&ntoskernel_lock); + InsertTailList(&drv_obj->drv_ext->custom_ext, &ce->list); + spin_unlock_bh(&ntoskernel_lock); + + *ext = (void *)ce + sizeof(*ce); + IOTRACE("ext: %p", *ext); + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall void *WIN_FUNC(IoGetDriverObjectExtension,2) + (struct driver_object *drv_obj, void *client_id) +{ + struct custom_ext *ce; + void *ret; + + IOENTER("drv_obj: %p, client_id: %p", drv_obj, client_id); + ret = NULL; + spin_lock_bh(&ntoskernel_lock); + nt_list_for_each_entry(ce, &drv_obj->drv_ext->custom_ext, list) { + if (ce->client_id == client_id) { + ret = (void *)ce + sizeof(*ce); + break; + } + } + spin_unlock_bh(&ntoskernel_lock); + IOTRACE("ret: %p", ret); + return ret; +} + +void free_custom_extensions(struct driver_extension *drv_ext) +{ + struct nt_list *ent; + + IOENTER("%p", drv_ext); + spin_lock_bh(&ntoskernel_lock); + while ((ent = RemoveHeadList(&drv_ext->custom_ext))) + kfree(ent); + spin_unlock_bh(&ntoskernel_lock); + IOEXIT(return); +} + +wstdcall NTSTATUS WIN_FUNC(IoCreateDevice,7) + (struct driver_object *drv_obj, ULONG dev_ext_length, + struct unicode_string *dev_name, DEVICE_TYPE dev_type, + ULONG dev_chars, BOOLEAN exclusive, struct device_object **newdev) +{ + struct device_object *dev; + struct dev_obj_ext *dev_obj_ext; + int size; + + IOENTER("%p, %u, %p", drv_obj, dev_ext_length, dev_name); + + size = sizeof(*dev) + dev_ext_length + sizeof(*dev_obj_ext); + dev = allocate_object(size, OBJECT_TYPE_DEVICE, dev_name); + if (!dev) + IOEXIT(return STATUS_INSUFFICIENT_RESOURCES); + if (dev_ext_length) + dev->dev_ext = dev + 1; + else + dev->dev_ext = NULL; + + dev_obj_ext = ((void *)(dev + 1)) + dev_ext_length; + dev_obj_ext->dev_obj = dev; + dev_obj_ext->size = 0; + dev_obj_ext->type = IO_TYPE_DEVICE; + dev->dev_obj_ext = dev_obj_ext; + + dev->type = dev_type; + dev->flags = 0; + dev->size = sizeof(*dev) + dev_ext_length; + dev->ref_count = 1; + dev->attached = NULL; + dev->stack_count = 1; + + dev->drv_obj = drv_obj; + dev->next = drv_obj->dev_obj; + drv_obj->dev_obj = dev; + + dev->align_req = 1; + dev->characteristics = dev_chars; + dev->io_timer = NULL; + KeInitializeEvent(&dev->lock, SynchronizationEvent, TRUE); + dev->vpb = NULL; + + IOTRACE("dev: %p, ext: %p", dev, dev->dev_ext); + *newdev = dev; + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(IoCreateUnprotectedSymbolicLink,2) + (struct unicode_string *link, struct unicode_string *dev_name) +{ + struct ansi_string ansi; + + IOENTER("%p, %p", dev_name, link); + if (dev_name && (RtlUnicodeStringToAnsiString(&ansi, dev_name, TRUE) == + STATUS_SUCCESS)) { + IOTRACE("dev_name: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + if (link && (RtlUnicodeStringToAnsiString(&ansi, link, TRUE) == + STATUS_SUCCESS)) { + IOTRACE("link: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } +// TODO(); + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(IoCreateSymbolicLink,2) + (struct unicode_string *link, struct unicode_string *dev_name) +{ + IOEXIT(return IoCreateUnprotectedSymbolicLink(link, dev_name)); +} + +wstdcall NTSTATUS WIN_FUNC(IoDeleteSymbolicLink,1) + (struct unicode_string *link) +{ + struct ansi_string ansi; + + IOENTER("%p", link); + if (link && (RtlUnicodeStringToAnsiString(&ansi, link, TRUE) == + STATUS_SUCCESS)) { + IOTRACE("dev_name: %s", ansi.buf); + RtlFreeAnsiString(&ansi); + } + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(IoDeleteDevice,1) + (struct device_object *dev) +{ + IOENTER("%p", dev); + if (dev == NULL) + IOEXIT(return); + IOTRACE("drv_obj: %p", dev->drv_obj); + if (dev->drv_obj) { + struct device_object *prev; + + prev = dev->drv_obj->dev_obj; + IOTRACE("dev_obj: %p", prev); + if (prev == dev) + dev->drv_obj->dev_obj = dev->next; + else if (prev) { + while (prev->next != dev) + prev = prev->next; + prev->next = dev->next; + } + } + ObDereferenceObject(dev); + IOEXIT(return); +} + +wstdcall void WIN_FUNC(IoDetachDevice,1) + (struct device_object *tgt) +{ + struct device_object *tail; + + IOENTER("%p", tgt); + if (!tgt) + IOEXIT(return); + tail = tgt->attached; + if (!tail) + IOEXIT(return); + IOTRACE("tail: %p", tail); + + spin_lock_bh(&ntoskernel_lock); + tgt->attached = tail->attached; + IOTRACE("attached:%p", tgt->attached); + for ( ; tail; tail = tail->attached) { + IOTRACE("tail:%p", tail); + tail->stack_count--; + } + spin_unlock_bh(&ntoskernel_lock); + IOEXIT(return); +} + +wstdcall struct device_object *WIN_FUNC(IoGetAttachedDevice,1) + (struct device_object *dev) +{ + IOENTER("%p", dev); + if (!dev) + IOEXIT(return NULL); + spin_lock_bh(&ntoskernel_lock); + while (dev->attached) + dev = dev->attached; + spin_unlock_bh(&ntoskernel_lock); + IOEXIT(return dev); +} + +wstdcall struct device_object *WIN_FUNC(IoGetAttachedDeviceReference,1) + (struct device_object *dev) +{ + IOENTER("%p", dev); + if (!dev) + IOEXIT(return NULL); + dev = IoGetAttachedDevice(dev); + ObReferenceObject(dev); + IOEXIT(return dev); +} + +wstdcall struct device_object *WIN_FUNC(IoAttachDeviceToDeviceStack,2) + (struct device_object *src, struct device_object *tgt) +{ + struct device_object *attached; + struct dev_obj_ext *src_dev_ext; + + IOENTER("%p, %p", src, tgt); + attached = IoGetAttachedDevice(tgt); + IOTRACE("%p", attached); + src_dev_ext = src->dev_obj_ext; + spin_lock_bh(&ntoskernel_lock); + if (attached) + attached->attached = src; + src->attached = NULL; + src->stack_count = attached->stack_count + 1; + src_dev_ext->attached_to = attached; + spin_unlock_bh(&ntoskernel_lock); + IOTRACE("stack_count: %d -> %d", attached->stack_count, + src->stack_count); + IOEXIT(return attached); +} + +wstdcall NTSTATUS WIN_FUNC(IoGetDeviceProperty,5) + (struct device_object *pdo, enum device_registry_property dev_property, + ULONG buffer_len, void *buffer, ULONG *result_len) +{ + struct ansi_string ansi; + struct unicode_string unicode; + struct wrap_device *wd; + ULONG need; + + IOENTER("dev_obj = %p, dev_property = %d, buffer_len = %u, " + "buffer = %p, result_len = %p", pdo, dev_property, + buffer_len, buffer, result_len); + + wd = pdo->reserved; + switch (dev_property) { + case DevicePropertyDeviceDescription: + case DevicePropertyFriendlyName: + case DevicePropertyDriverKeyName: + if (wrap_is_pci_bus(wd->dev_bus)) + RtlInitAnsiString(&ansi, "PCI"); + else // if (wrap_is_usb_bus(wd->dev_bus)) + RtlInitAnsiString(&ansi, "USB"); + need = sizeof(wchar_t) * (ansi.max_length + 1); + if (buffer_len < need) { + *result_len = need; + IOEXIT(return STATUS_BUFFER_TOO_SMALL); + } + unicode.max_length = buffer_len; + unicode.buf = buffer; + if (RtlAnsiStringToUnicodeString(&unicode, &ansi, + FALSE) != STATUS_SUCCESS) { + *result_len = unicode.length; + IOEXIT(return STATUS_BUFFER_TOO_SMALL); + } + IOEXIT(return STATUS_SUCCESS); + default: + WARNING("%d not implemented", dev_property); + IOEXIT(return STATUS_INVALID_PARAMETER_2); + } +} + +wstdcall NTSTATUS WIN_FUNC(IoGetDeviceObjectPointer,4) + (struct unicode_string *name, ACCESS_MASK desired_access, + void *file_obj, struct device_object *dev_obj) +{ + struct common_object_header *coh; + + dev_obj = NULL; + /* TODO: access is not checked and file_obj is set to NULL */ + file_obj = NULL; + spin_lock_bh(&ntoskernel_lock); + nt_list_for_each_entry(coh, &object_list, list) { + TRACE5("header: %p, type: %d", coh, coh->type); + if (coh->type != OBJECT_TYPE_DEVICE) + continue; + if (!RtlCompareUnicodeString(&coh->name, name, TRUE)) { + dev_obj = HEADER_TO_OBJECT(coh); + TRACE5("dev_obj: %p", dev_obj); + break; + } + } + spin_unlock_bh(&ntoskernel_lock); + if (dev_obj) + IOEXIT(return STATUS_SUCCESS); + else + IOEXIT(return STATUS_OBJECT_NAME_INVALID); +} + +/* NOTE: Make sure to compile with -freg-struct-return, so gcc will + * return union in register, like Windows */ +wstdcall union power_state WIN_FUNC(PoSetPowerState,3) + (struct device_object *dev_obj, enum power_state_type type, + union power_state state) +{ + IOEXIT(return state); +} + +wstdcall NTSTATUS WIN_FUNC(PoCallDriver,2) + (struct device_object *dev_obj, struct irp *irp) +{ + return IoCallDriver(dev_obj, irp); +} + +wstdcall NTSTATUS WIN_FUNC(PoRequestPowerIrp,6) + (struct device_object *dev_obj, UCHAR minor_fn, + union power_state power_state, void *completion_func, + void *context, struct irp **pirp) +{ + struct irp *irp; + struct io_stack_location *irp_sl; + + TRACE1("%p, %d, %p", dev_obj, dev_obj->stack_count, dev_obj->drv_obj); + irp = IoAllocateIrp(dev_obj->stack_count, FALSE); + if (!irp) + return STATUS_INSUFFICIENT_RESOURCES; + irp_sl = IoGetNextIrpStackLocation(irp); + irp_sl->major_fn = IRP_MJ_POWER; + irp_sl->minor_fn = minor_fn; + if (minor_fn == IRP_MN_WAIT_WAKE) + irp_sl->params.power.type = SystemPowerState; + else + irp_sl->params.power.type = DevicePowerState; + irp_sl->params.power.state = power_state; + irp_sl->completion_routine = completion_func; + irp->io_status.status = STATUS_NOT_SUPPORTED; + *pirp = irp; + return PoCallDriver(dev_obj, irp); +} + +wstdcall void WIN_FUNC(PoStartNextPowerIrp,1) + (struct irp *irp) +{ + IOENTER("irp = %p", irp); + IOEXIT(return); +} + +wstdcall void WIN_FUNC(IoInitializeRemoveLockEx,5) + (struct io_remove_lock *lock, ULONG alloc_tag, ULONG max_locked_min, + ULONG high_mark, ULONG lock_size) +{ + TODO(); +} + +wstdcall void *WIN_FUNC(IoAllocateErrorLogEntry,2) + (void *io_object, UCHAR entry_size) +{ + /* not implemented fully */ + void *ret = kmalloc(sizeof(struct io_error_log_packet) + entry_size, + irql_gfp()); + TRACE2("%p", ret); + if (ret) + return ret + sizeof(struct io_error_log_packet); + else + return NULL; +} + +wstdcall void WIN_FUNC(IoWriteErrorLogEntry,1) + (void *entry) +{ + /* TODO: log error with codes and message */ + ERROR(""); +} + +wstdcall void WIN_FUNC(IoFreeErrorLogEntry,1) + (void *entry) +{ + TRACE2("%p", entry); + kfree(entry - sizeof(struct io_error_log_packet)); +} + +wstdcall NTSTATUS WIN_FUNC(IoAcquireRemoveLockEx,5) + (struct io_remove_lock lock, void *tag, char *file, ULONG line, + ULONG lock_size) +{ + TODO(); + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(IoReleaseRemoveLockEx,3) + (struct io_remove_lock lock, void *tag, ULONG lock_size) +{ + TODO(); + IOEXIT(return STATUS_SUCCESS); +} + +wstdcall NTSTATUS WIN_FUNC(IoRegisterDeviceInterface,4) + (struct device_object *pdo, struct guid *guid_class, + struct unicode_string *reference, struct unicode_string *link) +{ + struct ansi_string ansi; + + /* TODO: check if pdo is valid */ + RtlInitAnsiString(&ansi, "ndis"); + ENTER1("pdo: %p, ref: %p, link: %p, %x, %x, %x", pdo, reference, link, + guid_class->data1, guid_class->data2, guid_class->data3); + return RtlAnsiStringToUnicodeString(link, &ansi, TRUE); +} + +wstdcall NTSTATUS WIN_FUNC(IoSetDeviceInterfaceState,2) + (struct unicode_string *link, BOOLEAN enable) +{ + ENTER1("link: %p, enable: %d", link, enable); + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(IoOpenDeviceRegistryKey,4) + (struct device_object *dev_obj, ULONG type, ACCESS_MASK mask, + void **handle) +{ + ENTER1("dev_obj: %p", dev_obj); + *handle = dev_obj; + return STATUS_SUCCESS; +} + +wstdcall NTSTATUS WIN_FUNC(IoWMIRegistrationControl,2) + (struct device_object *dev_obj, ULONG action) +{ + ENTER2("%p, %d", dev_obj, action); + EXIT2(return STATUS_SUCCESS); +} + +wstdcall void WIN_FUNC(IoInvalidateDeviceRelations,2) + (struct device_object *dev_obj, enum device_relation_type type) +{ + INFO("%p, %d", dev_obj, type); + TODO(); +} + +wstdcall void WIN_FUNC(IoInvalidateDeviceState,1) + (struct device_object *pdo) +{ + INFO("%p", pdo); + TODO(); +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/ndiswrapper.h +++ linux-2.6.32/ubuntu/ndiswrapper/ndiswrapper.h @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifndef _NDISWRAPPER_H_ +#define _NDISWRAPPER_H_ + +#define DRIVER_VERSION "1.55" +#define UTILS_VERSION "1.9" + +#define DRIVER_NAME "ndiswrapper" +#define DRIVER_CONFIG_DIR "/etc/ndiswrapper" + +#define SSID_MAX_WPA_IE_LEN 40 +#define NDIS_ESSID_MAX_SIZE 32 +#define NDIS_ENCODING_TOKEN_MAX 32 +#define MAX_ENCR_KEYS 4 +#define TX_RING_SIZE 16 +#define NDIS_MAX_RATES 8 +#define NDIS_MAX_RATES_EX 16 +#define WLAN_EID_GENERIC 221 +#define MAX_WPA_IE_LEN 64 +#define MAX_STR_LEN 512 + +#define WRAP_PCI_BUS 5 +#define WRAP_PCMCIA_BUS 8 +/* some USB devices, e.g., DWL-G120 have BusType as 0 */ +#define WRAP_INTERNAL_BUS 0 +/* documentation at msdn says 15 is PNP bus, but inf files from all + * vendors say 15 is USB; which is correct? */ +#define WRAP_USB_BUS 15 + +/* NDIS device must be 0, for compatability with old versions of + * ndiswrapper where device type for NDIS drivers is 0 */ +#define WRAP_NDIS_DEVICE 0 +#define WRAP_USB_DEVICE 1 +#define WRAP_BLUETOOTH_DEVICE1 2 +#define WRAP_BLUETOOTH_DEVICE2 3 + +#define WRAP_DEVICE_BUS(dev, bus) ((dev) << 8 | (bus)) +#define WRAP_BUS(dev_bus) ((dev_bus) & 0x000FF) +#define WRAP_DEVICE(dev_bus) ((dev_bus) >> 8) + +#define MAX_DRIVER_NAME_LEN 32 +#define MAX_VERSION_STRING_LEN 64 +#define MAX_SETTING_NAME_LEN 128 +#define MAX_SETTING_VALUE_LEN 256 + +#define MAX_DRIVER_PE_IMAGES 4 +#define MAX_DRIVER_BIN_FILES 5 +#define MAX_DEVICE_SETTINGS 512 + +#define MAX_ALLOCATED_URBS 15 + +#define DEV_ANY_ID -1 + +#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] +#define MACSTRSEP "%02x:%02x:%02x:%02x:%02x:%02x" +#define MACSTR "%02x%02x%02x%02x%02x%02x" +#define MACINTADR(a) (int*)&((a)[0]), (int*)&((a)[1]), (int*)&((a)[2]), \ + (int*)&((a)[3]), (int*)&((a)[4]), (int*)&((a)[5]) + +#ifdef __KERNEL__ +/* DEBUG macros */ + +#define MSG(level, fmt, ...) \ + printk(level "ndiswrapper (%s:%d): " fmt "\n", \ + __func__, __LINE__ , ## __VA_ARGS__) + +#define WARNING(fmt, ...) MSG(KERN_WARNING, fmt, ## __VA_ARGS__) +#define ERROR(fmt, ...) MSG(KERN_ERR, fmt , ## __VA_ARGS__) +#define INFO(fmt, ...) MSG(KERN_INFO, fmt , ## __VA_ARGS__) +#define TODO() WARNING("not fully implemented (yet)") + +#define TRACE(fmt, ...) do { } while (0) +#define TRACE1(fmt, ...) do { } while (0) +#define TRACE2(fmt, ...) do { } while (0) +#define TRACE3(fmt, ...) do { } while (0) +#define TRACE4(fmt, ...) do { } while (0) +#define TRACE5(fmt, ...) do { } while (0) +#define TRACE6(fmt, ...) do { } while (0) + +/* for a block of code */ +#define DBG_BLOCK(level) while (0) + +extern int debug; + +#if defined DEBUG +#undef TRACE +#define TRACE(level, fmt, ...) \ +do { \ + if (debug >= level) \ + printk(KERN_INFO "%s (%s:%d): " fmt "\n", DRIVER_NAME, \ + __func__, __LINE__ , ## __VA_ARGS__); \ +} while (0) +#undef DBG_BLOCK +#define DBG_BLOCK(level) if (debug >= level) +#endif + +#if defined(DEBUG) && DEBUG >= 1 +#undef TRACE1 +#define TRACE1(fmt, ...) TRACE(1, fmt , ## __VA_ARGS__) +#endif + +#if defined(DEBUG) && DEBUG >= 2 +#undef TRACE2 +#define TRACE2(fmt, ...) TRACE(2, fmt , ## __VA_ARGS__) +#endif + +#if defined(DEBUG) && DEBUG >= 3 +#undef TRACE3 +#define TRACE3(fmt, ...) TRACE(3, fmt , ## __VA_ARGS__) +#endif + +#if defined(DEBUG) && DEBUG >= 4 +#undef TRACE4 +#define TRACE4(fmt, ...) TRACE(4, fmt , ## __VA_ARGS__) +#endif + +#if defined(DEBUG) && DEBUG >= 5 +#undef TRACE5 +#define TRACE5(fmt, ...) TRACE(5, fmt , ## __VA_ARGS__) +#endif + +#if defined(DEBUG) && DEBUG >= 6 +#undef TRACE6 +#define TRACE6(fmt, ...) TRACE(6, fmt , ## __VA_ARGS__) +#endif + +#define ENTER1(fmt, ...) TRACE1("Enter " fmt , ## __VA_ARGS__) +#define ENTER2(fmt, ...) TRACE2("Enter " fmt , ## __VA_ARGS__) +#define ENTER3(fmt, ...) TRACE3("Enter " fmt , ## __VA_ARGS__) +#define ENTER4(fmt, ...) TRACE4("Enter " fmt , ## __VA_ARGS__) +#define ENTER5(fmt, ...) TRACE5("Enter " fmt , ## __VA_ARGS__) +#define ENTER6(fmt, ...) TRACE6("Enter " fmt , ## __VA_ARGS__) + +#define EXIT1(stmt) do { TRACE1("Exit"); stmt; } while(0) +#define EXIT2(stmt) do { TRACE2("Exit"); stmt; } while(0) +#define EXIT3(stmt) do { TRACE3("Exit"); stmt; } while(0) +#define EXIT4(stmt) do { TRACE4("Exit"); stmt; } while(0) +#define EXIT5(stmt) do { TRACE5("Exit"); stmt; } while(0) +#define EXIT6(stmt) do { TRACE6("Exit"); stmt; } while(0) + +#if defined(USB_DEBUG) +#define USBTRACE TRACE1 +#define USBENTER ENTER1 +#define USBEXIT EXIT1 +#else +#define USBTRACE(fmt, ...) +#define USBENTER(fmt, ...) +#define USBEXIT(stmt) stmt +#endif + +#if defined(EVENT_DEBUG) +#define EVENTTRACE TRACE1 +#define EVENTENTER ENTER1 +#define EVENTEXIT EXIT1 +#else +#define EVENTTRACE(fmt, ...) +#define EVENTENTER(fmt, ...) +#define EVENTEXIT(stmt) stmt +#endif + +#if defined(TIMER_DEBUG) +#define TIMERTRACE TRACE1 +#define TIMERENTER ENTER1 +#define TIMEREXIT EXIT1 +#else +#define TIMERTRACE(fmt, ...) +#define TIMERENTER(fmt, ...) +#define TIMEREXIT(stmt) stmt +#endif + +#if defined(IO_DEBUG) +#define IOTRACE TRACE1 +#define IOENTER ENTER1 +#define IOEXIT EXIT1 +#else +#define IOTRACE(fmt, ...) +#define IOENTER(fmt, ...) +#define IOEXIT(stmt) stmt +#endif + +#if defined(WORK_DEBUG) +#define WORKTRACE TRACE1 +#define WORKENTER ENTER1 +#define WORKEXIT EXIT1 +#else +#define WORKTRACE(fmt, ...) +#define WORKENTER(fmt, ...) +#define WORKEXIT(stmt) stmt +#endif + +#ifdef DEBUG +#define assert(expr) \ +do { \ + if (!(expr)) { \ + ERROR("assertion '%s' failed", #expr); \ + dump_stack(); \ + } \ +} while (0) +#else +#define assert(expr) do { } while (0) +#endif + +#endif // __KERNEL__ + +#endif // NDISWRAPPER_H --- linux-2.6.32.orig/ubuntu/ndiswrapper/lin2win.h +++ linux-2.6.32/ubuntu/ndiswrapper/lin2win.h @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2006 Giridhar Pemmasani + * + * 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. + * + */ + +#ifdef CONFIG_X86_64 + +/* Windows functions must have 32 bytes of shadow space for arguments + * above return address, irrespective of number of args. So argc >= 4 + */ + +#define alloc_win_stack_frame(argc) \ + "sub $(" #argc "+1)*8, %%rsp\n\t" +#define free_win_stack_frame(argc) \ + "add $(" #argc "+1)*8, %%rsp\n\t" + +/* m is index of Windows arg required; Windows arg 1 should be at + * 0(%rsp), arg 2 at 8(%rsp) and so on after the frame is allocated. +*/ + +#define lin2win_win_arg(m) "(" #m "-1)*8(%%rsp)" + +/* args for Windows function must be in clobber / output list */ + +#define outputs() \ + "=a" (_ret), "=c" (_dummy), "=d" (_dummy), \ + "=r" (r8), "=r" (r9), "=r" (r10), "=r" (r11) + +#define clobbers() "cc" + +#define LIN2WIN0(func) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8"); \ + register u64 r9 __asm__("r9"); \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(4) \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(4) \ + : outputs() \ + : [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#define LIN2WIN1(func, arg1) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8"); \ + register u64 r9 __asm__("r9"); \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(4) \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(4) \ + : outputs() \ + : "c" (arg1), [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#define LIN2WIN2(func, arg1, arg2) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8"); \ + register u64 r9 __asm__("r9"); \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(4) \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(4) \ + : outputs() \ + : "c" (arg1), "d" (arg2), [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#define LIN2WIN3(func, arg1, arg2, arg3) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8") = (u64)arg3; \ + register u64 r9 __asm__("r9"); \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(4) \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(4) \ + : outputs() \ + : "c" (arg1), "d" (arg2), "r" (r8), \ + [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#define LIN2WIN4(func, arg1, arg2, arg3, arg4) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8") = (u64)arg3; \ + register u64 r9 __asm__("r9") = (u64)arg4; \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(4) \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(4) \ + : outputs() \ + : "c" (arg1), "d" (arg2), "r" (r8), "r" (r9), \ + [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#define LIN2WIN5(func, arg1, arg2, arg3, arg4, arg5) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8") = (u64)arg3; \ + register u64 r9 __asm__("r9") = (u64)arg4; \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(5) \ + "movq %[rarg5], " lin2win_win_arg(5) "\n\t" \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(5) \ + : outputs() \ + : "c" (arg1), "d" (arg2), "r" (r8), "r" (r9), \ + [rarg5] "ri" ((u64)arg5), \ + [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#define LIN2WIN6(func, arg1, arg2, arg3, arg4, arg5, arg6) \ +({ \ + u64 _ret, _dummy; \ + register u64 r8 __asm__("r8") = (u64)arg3; \ + register u64 r9 __asm__("r9") = (u64)arg4; \ + register u64 r10 __asm__("r10"); \ + register u64 r11 __asm__("r11"); \ + __asm__ __volatile__( \ + alloc_win_stack_frame(6) \ + "movq %[rarg5], " lin2win_win_arg(5) "\n\t" \ + "movq %[rarg6], " lin2win_win_arg(6) "\n\t" \ + "callq *%[fptr]\n\t" \ + free_win_stack_frame(6) \ + : outputs() \ + : "c" (arg1), "d" (arg2), "r" (r8), "r" (r9), \ + [rarg5] "ri" ((u64)arg5), [rarg6] "ri" ((u64)arg6), \ + [fptr] "r" (func) \ + : clobbers()); \ + _ret; \ +}) + +#else // CONFIG_X86_64 + +#define LIN2WIN1(func, arg1) \ +({ \ + TRACE6("calling %p", func); \ + func(arg1); \ +}) +#define LIN2WIN2(func, arg1, arg2) \ +({ \ + TRACE6("calling %p", func); \ + func(arg1, arg2); \ +}) +#define LIN2WIN3(func, arg1, arg2, arg3) \ +({ \ + TRACE6("calling %p", func); \ + func(arg1, arg2, arg3); \ +}) +#define LIN2WIN4(func, arg1, arg2, arg3, arg4) \ +({ \ + TRACE6("calling %p", func); \ + func(arg1, arg2, arg3, arg4); \ +}) +#define LIN2WIN5(func, arg1, arg2, arg3, arg4, arg5) \ +({ \ + TRACE6("calling %p", func); \ + func(arg1, arg2, arg3, arg4, arg5); \ +}) +#define LIN2WIN6(func, arg1, arg2, arg3, arg4, arg5, arg6) \ +({ \ + TRACE6("calling %p", func); \ + func(arg1, arg2, arg3, arg4, arg5, arg6); \ +}) + +#endif // CONFIG_X86_64 --- linux-2.6.32.orig/ubuntu/ndiswrapper/longlong.h +++ linux-2.6.32/ubuntu/ndiswrapper/longlong.h @@ -0,0 +1,1333 @@ +/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. + Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000 + Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* You have to define the following before including this file: + + UWtype -- An unsigned type, default type for operations (typically a "word") + UHWtype -- An unsigned type, at least half the size of UWtype. + UDWtype -- An unsigned type, at least twice as large a UWtype + W_TYPE_SIZE -- size in bits of UWtype + + UQItype -- Unsigned 8 bit type. + SItype, USItype -- Signed and unsigned 32 bit types. + DItype, UDItype -- Signed and unsigned 64 bit types. + + On a 32 bit machine UWtype should typically be USItype; + on a 64 bit machine, UWtype should typically be UDItype. +*/ + +#define __BITS4 (W_TYPE_SIZE / 4) +#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) +#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) +#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) + +#ifndef W_TYPE_SIZE +#define W_TYPE_SIZE 32 +#define UWtype USItype +#define UHWtype USItype +#define UDWtype UDItype +#endif + +/* Define auxiliary asm macros. + + 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two + UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype + word product in HIGH_PROD and LOW_PROD. + + 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a + UDWtype product. This is just a variant of umul_ppmm. + + 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator) divides a UDWtype, composed by the UWtype integers + HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient + in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less + than DENOMINATOR for correct operation. If, in addition, the most + significant bit of DENOMINATOR must be 1, then the pre-processor symbol + UDIV_NEEDS_NORMALIZATION is defined to 1. + + 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator). Like udiv_qrnnd but the numbers are signed. The quotient + is rounded towards 0. + + 5) count_leading_zeros(count, x) counts the number of zero-bits from the + msb to the first nonzero bit in the UWtype X. This is the number of + steps X needs to be shifted left to set the msb. Undefined for X == 0, + unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. + + 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts + from the least significant end. + + 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, + high_addend_2, low_addend_2) adds two UWtype integers, composed by + HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 + respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow + (i.e. carry out) is not stored anywhere, and is lost. + + 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, + high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, + composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and + LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE + and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, + and is lost. + + If any of these macros are left undefined for a particular CPU, + C macros are used. */ + +/* The CPUs come in alphabetical order below. + + Please add support for more CPUs here, or improve the current support + for the CPUs below! + (E.g. WE32100, IBM360.) */ + +#if defined (__GNUC__) && !defined (NO_ASM) + +/* We sometimes need to clobber "cc" with gcc2, but that would not be + understood by gcc1. Use cpp to avoid major code duplication. */ +#if __GNUC__ < 2 +#define __CLOBBER_CC +#define __AND_CLOBBER_CC +#else /* __GNUC__ >= 2 */ +#define __CLOBBER_CC : "cc" +#define __AND_CLOBBER_CC , "cc" +#endif /* __GNUC__ < 2 */ + +#if defined (__alpha) && W_TYPE_SIZE == 64 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("umulh %r1,%2,%0" \ + : "=r" ((UDItype) ph) \ + : "%rJ" (__m0), \ + "rI" (__m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 46 +#ifndef LONGLONG_STANDALONE +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { UDItype __r; \ + (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ + (r) = __r; \ + } while (0) +extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype); +#define UDIV_TIME 220 +#endif /* LONGLONG_STANDALONE */ +#ifdef __alpha_cix__ +#define count_leading_zeros(COUNT,X) \ + __asm__("ctlz %1,%0" : "=r"(COUNT) : "r"(X)) +#define count_trailing_zeros(COUNT,X) \ + __asm__("cttz %1,%0" : "=r"(COUNT) : "r"(X)) +#define COUNT_LEADING_ZEROS_0 64 +#else +extern const UQItype __clz_tab[]; +#define count_leading_zeros(COUNT,X) \ + do { \ + UDItype __xr = (X), __t, __a; \ + __asm__("cmpbge $31,%1,%0" : "=r"(__t) : "r"(__xr)); \ + __a = __clz_tab[__t ^ 0xff] - 1; \ + __asm__("extbl %1,%2,%0" : "=r"(__t) : "r"(__xr), "r"(__a)); \ + (COUNT) = 64 - (__clz_tab[__t] + __a*8); \ + } while (0) +#define count_trailing_zeros(COUNT,X) \ + do { \ + UDItype __xr = (X), __t, __a; \ + __asm__("cmpbge $31,%1,%0" : "=r"(__t) : "r"(__xr)); \ + __t = ~__t & -~__t; \ + __a = ((__t & 0xCC) != 0) * 2; \ + __a += ((__t & 0xF0) != 0) * 4; \ + __a += ((__t & 0xAA) != 0); \ + __asm__("extbl %1,%2,%0" : "=r"(__t) : "r"(__xr), "r"(__a)); \ + __a <<= 3; \ + __t &= -__t; \ + __a += ((__t & 0xCC) != 0) * 2; \ + __a += ((__t & 0xF0) != 0) * 4; \ + __a += ((__t & 0xAA) != 0); \ + (COUNT) = __a; \ + } while (0) +#endif /* __alpha_cix__ */ +#endif /* __alpha */ + +#if defined (__arc__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add.f %1, %4, %5\n\tadc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%r" ((USItype) (ah)), \ + "rIJ" ((USItype) (bh)), \ + "%r" ((USItype) (al)), \ + "rIJ" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "r" ((USItype) (ah)), \ + "rIJ" ((USItype) (bh)), \ + "r" ((USItype) (al)), \ + "rIJ" ((USItype) (bl))) +/* Call libgcc routine. */ +#define umul_ppmm(w1, w0, u, v) \ +do { \ + DWunion __w; \ + __w.ll = __umulsidi3 (u, v); \ + w1 = __w.s.high; \ + w0 = __w.s.low; \ +} while (0) +#define __umulsidi3 __umulsidi3 +UDItype __umulsidi3 (USItype, USItype); +#endif + +#if defined (__arm__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("adds %1, %4, %5\n\tadc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%r" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "%r" ((USItype) (al)), \ + "rI" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subs %1, %4, %5\n\tsbc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "r" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "r" ((USItype) (al)), \ + "rI" ((USItype) (bl))) +#define umul_ppmm(xh, xl, a, b) \ +{register USItype __t0, __t1, __t2; \ + __asm__ ("%@ Inlined umul_ppmm\n" \ + " mov %2, %5, lsr #16\n" \ + " mov %0, %6, lsr #16\n" \ + " bic %3, %5, %2, lsl #16\n" \ + " bic %4, %6, %0, lsl #16\n" \ + " mul %1, %3, %4\n" \ + " mul %4, %2, %4\n" \ + " mul %3, %0, %3\n" \ + " mul %0, %2, %0\n" \ + " adds %3, %4, %3\n" \ + " addcs %0, %0, #65536\n" \ + " adds %1, %1, %3, lsl #16\n" \ + " adc %0, %0, %3, lsr #16" \ + : "=&r" ((USItype) (xh)), \ + "=r" ((USItype) (xl)), \ + "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ + : "r" ((USItype) (a)), \ + "r" ((USItype) (b)));} +#define UMUL_TIME 20 +#define UDIV_TIME 100 +#endif /* __arm__ */ + +#if defined (__hppa) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%rM" ((USItype) (ah)), \ + "rM" ((USItype) (bh)), \ + "%rM" ((USItype) (al)), \ + "rM" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub %4,%5,%1\n\tsubb %2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "rM" ((USItype) (ah)), \ + "rM" ((USItype) (bh)), \ + "rM" ((USItype) (al)), \ + "rM" ((USItype) (bl))) +#if defined (_PA_RISC1_1) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + union \ + { \ + UDItype __f; \ + struct {USItype __w1, __w0;} __w1w0; \ + } __t; \ + __asm__ ("xmpyu %1,%2,%0" \ + : "=x" (__t.__f) \ + : "x" ((USItype) (u)), \ + "x" ((USItype) (v))); \ + (w1) = __t.__w1w0.__w1; \ + (w0) = __t.__w1w0.__w0; \ + } while (0) +#define UMUL_TIME 8 +#else +#define UMUL_TIME 30 +#endif +#define UDIV_TIME 40 +#define count_leading_zeros(count, x) \ + do { \ + USItype __tmp; \ + __asm__ ( \ + "ldi 1,%0\n" \ +" extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \ +" extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n"\ +" ldo 16(%0),%0 ; Yes. Perform add.\n" \ +" extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \ +" extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n"\ +" ldo 8(%0),%0 ; Yes. Perform add.\n" \ +" extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \ +" extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n"\ +" ldo 4(%0),%0 ; Yes. Perform add.\n" \ +" extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \ +" extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n"\ +" ldo 2(%0),%0 ; Yes. Perform add.\n" \ +" extru %1,30,1,%1 ; Extract bit 1.\n" \ +" sub %0,%1,%0 ; Subtract it.\n" \ + : "=r" (count), "=r" (__tmp) : "1" (x)); \ + } while (0) +#endif + +#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32 +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mr %0,%3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (__m0), \ + "r" (__m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + (xh) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define smul_ppmm(xh, xl, m0, m1) \ + do { \ + union {DItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ ("mr %0,%3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (m0), \ + "r" (m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + } while (0) +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + union {DItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __xx.__i.__h = n1; __xx.__i.__l = n0; \ + __asm__ ("dr %0,%2" \ + : "=r" (__xx.__ll) \ + : "0" (__xx.__ll), "r" (d)); \ + (q) = __xx.__i.__l; (r) = __xx.__i.__h; \ + } while (0) +#endif + +#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addl %5,%1\n\tadcl %3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subl %5,%1\n\tsbbl %3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mull %3" \ + : "=a" ((USItype) (w0)), \ + "=d" ((USItype) (w1)) \ + : "%0" ((USItype) (u)), \ + "rm" ((USItype) (v))) +#define udiv_qrnnd(q, r, n1, n0, dv) \ + __asm__ ("divl %4" \ + : "=a" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "rm" ((USItype) (dv))) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("bsrl %1,%0" \ + : "=r" (__cbtmp) : "rm" ((USItype) (x))); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#define count_trailing_zeros(count, x) \ + __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x))) +#define UMUL_TIME 40 +#define UDIV_TIME 40 +#endif /* 80x86 */ + +#if defined (__i960__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("emul %2,%1,%0" \ + : "=d" (__xx.__ll) \ + : "%dI" ((USItype) (u)), \ + "dI" ((USItype) (v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("emul %2,%1,%0" \ + : "=d" (__w) \ + : "%dI" ((USItype) (u)), \ + "dI" ((USItype) (v))); \ + __w; }) +#endif /* __i960__ */ + +#if defined (__M32R__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + /* The cmp clears the condition bit. */ \ + __asm__ ("cmp %0,%0\n\taddx %%5,%1\n\taddx %%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "r" ((USItype) (bl)) \ + : "cbit") +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + /* The cmp clears the condition bit. */ \ + __asm__ ("cmp %0,%0\n\tsubx %5,%1\n\tsubx %3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "r" ((USItype) (bl)) \ + : "cbit") +#endif /* __M32R__ */ + +#if defined (__mc68000__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add%.l %5,%1\n\taddx%.l %3,%0" \ + : "=d" ((USItype) (sh)), \ + "=&d" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "d" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub%.l %5,%1\n\tsubx%.l %3,%0" \ + : "=d" ((USItype) (sh)), \ + "=&d" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "d" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) + +/* The '020, '030, '040 and CPU32 have 32x32->64 and 64/32->32q-32r. */ +#if defined (__mc68020__) || defined(mc68020) \ + || defined(__mc68030__) || defined(mc68030) \ + || defined(__mc68040__) || defined(mc68040) \ + || defined(__mcpu32__) || defined(mcpu32) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mulu%.l %3,%1:%0" \ + : "=d" ((USItype) (w0)), \ + "=d" ((USItype) (w1)) \ + : "%0" ((USItype) (u)), \ + "dmi" ((USItype) (v))) +#define UMUL_TIME 45 +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divu%.l %4,%1:%0" \ + : "=d" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "dmi" ((USItype) (d))) +#define UDIV_TIME 90 +#define sdiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divs%.l %4,%1:%0" \ + : "=d" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "dmi" ((USItype) (d))) + +#else /* not mc68020 */ +#if !defined(__mcf5200__) +/* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX. */ +#define umul_ppmm(xh, xl, a, b) \ + __asm__ ("| Inlined umul_ppmm\n" \ + " move%.l %2,%/d0\n" \ + " move%.l %3,%/d1\n" \ + " move%.l %/d0,%/d2\n" \ + " swap %/d0\n" \ + " move%.l %/d1,%/d3\n" \ + " swap %/d1\n" \ + " move%.w %/d2,%/d4\n" \ + " mulu %/d3,%/d4\n" \ + " mulu %/d1,%/d2\n" \ + " mulu %/d0,%/d3\n" \ + " mulu %/d0,%/d1\n" \ + " move%.l %/d4,%/d0\n" \ + " eor%.w %/d0,%/d0\n" \ + " swap %/d0\n" \ + " add%.l %/d0,%/d2\n" \ + " add%.l %/d3,%/d2\n" \ + " jcc 1f\n" \ + " add%.l %#65536,%/d1\n" \ + "1: swap %/d2\n" \ + " moveq %#0,%/d0\n" \ + " move%.w %/d2,%/d0\n" \ + " move%.w %/d4,%/d2\n" \ + " move%.l %/d2,%1\n" \ + " add%.l %/d1,%/d0\n" \ + " move%.l %/d0,%0" \ + : "=g" ((USItype) (xh)), \ + "=g" ((USItype) (xl)) \ + : "g" ((USItype) (a)), \ + "g" ((USItype) (b)) \ + : "d0", "d1", "d2", "d3", "d4") +#define UMUL_TIME 100 +#define UDIV_TIME 400 +#endif /* not mcf5200 */ +#endif /* not mc68020 */ + +/* The '020, '030, '040 and '060 have bitfield insns. */ +#if defined (__mc68020__) || defined(mc68020) \ + || defined(__mc68030__) || defined(mc68030) \ + || defined(__mc68040__) || defined(mc68040) \ + || defined(__mc68060__) || defined(mc68060) +#define count_leading_zeros(count, x) \ + __asm__ ("bfffo %1{%b2:%b2},%0" \ + : "=d" ((USItype) (count)) \ + : "od" ((USItype) (x)), "n" (0)) +#endif +#endif /* mc68000 */ + +#if defined (__m88000__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%rJ" ((USItype) (ah)), \ + "rJ" ((USItype) (bh)), \ + "%rJ" ((USItype) (al)), \ + "rJ" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subu.co %1,%r4,%r5\n\tsubu.ci %0,%r2,%r3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "rJ" ((USItype) (ah)), \ + "rJ" ((USItype) (bh)), \ + "rJ" ((USItype) (al)), \ + "rJ" ((USItype) (bl))) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("ff1 %0,%1" \ + : "=r" (__cbtmp) \ + : "r" ((USItype) (x))); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#define COUNT_LEADING_ZEROS_0 63 /* sic */ +#if defined (__mc88110__) +#define umul_ppmm(wh, wl, u, v) \ + do { \ + union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ ("mulu.d %0,%1,%2" \ + : "=r" (__xx.__ll) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))); \ + (wh) = __xx.__i.__h; \ + (wl) = __xx.__i.__l; \ + } while (0) +#define udiv_qrnnd(q, r, n1, n0, d) \ + ({union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + USItype __q; \ + __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ + __asm__ ("divu.d %0,%1,%2" \ + : "=r" (__q) \ + : "r" (__xx.__ll), \ + "r" ((USItype) (d))); \ + (r) = (n0) - __q * (d); (q) = __q; }) +#define UMUL_TIME 5 +#define UDIV_TIME 25 +#else +#define UMUL_TIME 17 +#define UDIV_TIME 150 +#endif /* __mc88110__ */ +#endif /* __m88000__ */ + +#if defined (__mips__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3" \ + : "=l" ((USItype) (w0)), \ + "=h" ((USItype) (w1)) \ + : "d" ((USItype) (u)), \ + "d" ((USItype) (v))) +#define UMUL_TIME 10 +#define UDIV_TIME 100 +#endif /* __mips__ */ + +#if defined (__ns32000__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("meid %2,%0" \ + : "=g" (__xx.__ll) \ + : "%0" ((USItype) (u)), \ + "g" ((USItype) (v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("meid %2,%0" \ + : "=g" (__w) \ + : "%0" ((USItype) (u)), \ + "g" ((USItype) (v))); \ + __w; }) +#define udiv_qrnnd(q, r, n1, n0, d) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ + __asm__ ("deid %2,%0" \ + : "=g" (__xx.__ll) \ + : "0" (__xx.__ll), \ + "g" ((USItype) (d))); \ + (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) +#define count_trailing_zeros(count,x) \ + do { \ + __asm__ ("ffsd %2,%0" \ + : "=r" ((USItype) (count)) \ + : "0" ((USItype) 0), \ + "r" ((USItype) (x))); \ + } while (0) +#endif /* __ns32000__ */ + +/* FIXME: We should test _IBMR2 here when we add assembly support for the + system vendor compilers. + FIXME: What's needed for gcc PowerPC VxWorks? __vxworks__ is not good + enough, since that hits ARM and m68k too. */ +#if (defined (_ARCH_PPC) /* AIX */ \ + || defined (_ARCH_PWR) /* AIX */ \ + || defined (_ARCH_COM) /* AIX */ \ + || defined (__powerpc__) /* gcc */ \ + || defined (__POWERPC__) /* BEOS */ \ + || defined (__ppc__) /* Darwin */ \ + || defined (PPC) /* GNU/Linux, SysV */ \ + ) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else \ + __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ + : "=r" (sh), "=&r" (sl) \ + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else \ + __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ + : "=r" (sh), "=&r" (sl) \ + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("{cntlz|cntlzw} %0,%1" : "=r" (count) : "r" (x)) +#define COUNT_LEADING_ZEROS_0 32 +#if defined (_ARCH_PPC) || defined (__powerpc__) || defined (__POWERPC__) \ + || defined (__ppc__) || defined (PPC) || defined (__vxworks__) +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + SItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 +#define UDIV_TIME 120 +#elif defined (_ARCH_PWR) +#define UMUL_TIME 8 +#define smul_ppmm(xh, xl, m0, m1) \ + __asm__ ("mul %0,%2,%3" : "=r" (xh), "=q" (xl) : "r" (m0), "r" (m1)) +#define SMUL_TIME 4 +#define sdiv_qrnnd(q, r, nh, nl, d) \ + __asm__ ("div %0,%2,%4" : "=r" (q), "=q" (r) : "r" (nh), "1" (nl), "r" (d)) +#define UDIV_TIME 100 +#endif +#endif /* 32-bit POWER architecture variants. */ + +/* We should test _IBMR2 here when we add assembly support for the system + vendor compilers. */ +#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else \ + __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ + : "=r" (sh), "=&r" (sl) \ + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else \ + __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ + : "=r" (sh), "=&r" (sl) \ + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) +#define COUNT_LEADING_ZEROS_0 64 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + DItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 /* ??? */ +#define UDIV_TIME 120 /* ??? */ +#endif /* 64-bit PowerPC. */ + +#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("a %1,%5\n\tae %0,%3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "r" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("s %1,%5\n\tse %0,%3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "r" ((USItype) (bl))) +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ( \ + "s r2,r2\n" \ +" mts r10,%2\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" cas %0,r2,r0\n" \ +" mfs r10,%1" \ + : "=r" ((USItype) (ph)), \ + "=r" ((USItype) (pl)) \ + : "%r" (__m0), \ + "r" (__m1) \ + : "r2"); \ + (ph) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define UMUL_TIME 20 +#define UDIV_TIME 200 +#define count_leading_zeros(count, x) \ + do { \ + if ((x) >= 0x10000) \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x) >> 16)); \ + else \ + { \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x))); \ + (count) += 16; \ + } \ + } while (0) +#endif + +#if defined (__sh2__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ( \ + "dmulu.l %2,%3\n\tsts macl,%1\n\tsts mach,%0" \ + : "=r" ((USItype)(w1)), \ + "=r" ((USItype)(w0)) \ + : "r" ((USItype)(u)), \ + "r" ((USItype)(v)) \ + : "macl", "mach") +#define UMUL_TIME 5 +#endif + +#if defined (__SH5__) && __SHMEDIA__ && W_TYPE_SIZE == 32 +#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) +#define count_leading_zeros(count, x) \ + do \ + { \ + UDItype x_ = (USItype)(x); \ + SItype c_; \ + \ + __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_)); \ + (count) = c_ - 31; \ + } \ + while (0) +#define COUNT_LEADING_ZEROS_0 32 +#endif + +#if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \ + && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%rJ" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "%rJ" ((USItype) (al)), \ + "rI" ((USItype) (bl)) \ + __CLOBBER_CC) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "rJ" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "rJ" ((USItype) (al)), \ + "rI" ((USItype) (bl)) \ + __CLOBBER_CC) +#if defined (__sparc_v8__) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("umul %2,%3,%1;rd %%y,%0" \ + : "=r" ((USItype) (w1)), \ + "=r" ((USItype) (w0)) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))) +#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \ + __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\ + : "=&r" ((USItype) (__q)), \ + "=&r" ((USItype) (__r)) \ + : "r" ((USItype) (__n1)), \ + "r" ((USItype) (__n0)), \ + "r" ((USItype) (__d))) +#else +#if defined (__sparclite__) +/* This has hardware multiply but not divide. It also has two additional + instructions scan (ffs from high bit) and divscc. */ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("umul %2,%3,%1;rd %%y,%0" \ + : "=r" ((USItype) (w1)), \ + "=r" ((USItype) (w0)) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))) +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("! Inlined udiv_qrnnd\n" \ +" wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \ +" tst %%g0\n" \ +" divscc %3,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%0\n" \ +" rd %%y,%1\n" \ +" bl,a 1f\n" \ +" add %1,%4,%1\n" \ +"1: ! End of inline udiv_qrnnd" \ + : "=r" ((USItype) (q)), \ + "=r" ((USItype) (r)) \ + : "r" ((USItype) (n1)), \ + "r" ((USItype) (n0)), \ + "rI" ((USItype) (d)) \ + : "g1" __AND_CLOBBER_CC) +#define UDIV_TIME 37 +#define count_leading_zeros(count, x) \ + do { \ + __asm__ ("scan %1,1,%0" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x))); \ + } while (0) +/* Early sparclites return 63 for an argument of 0, but they warn that future + implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 + undefined. */ +#else +/* SPARC without integer multiplication and divide instructions. + (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("! Inlined umul_ppmm\n" \ +" wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n"\ +" sra %3,31,%%o5 ! Don't move this insn\n" \ +" and %2,%%o5,%%o5 ! Don't move this insn\n" \ +" andcc %%g0,0,%%g1 ! Don't move this insn\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,0,%%g1\n" \ +" add %%g1,%%o5,%0\n" \ +" rd %%y,%1" \ + : "=r" ((USItype) (w1)), \ + "=r" ((USItype) (w0)) \ + : "%rI" ((USItype) (u)), \ + "r" ((USItype) (v)) \ + : "g1", "o5" __AND_CLOBBER_CC) +#define UMUL_TIME 39 /* 39 instructions */ +/* It's quite necessary to add this much assembler for the sparc. + The default udiv_qrnnd (in C) is more than 10 times slower! */ +#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \ + __asm__ ("! Inlined udiv_qrnnd\n" \ +" mov 32,%%g1\n" \ +" subcc %1,%2,%%g0\n" \ +"1: bcs 5f\n" \ +" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \ +" sub %1,%2,%1 ! this kills msb of n\n" \ +" addx %1,%1,%1 ! so this can't give carry\n" \ +" subcc %%g1,1,%%g1\n" \ +"2: bne 1b\n" \ +" subcc %1,%2,%%g0\n" \ +" bcs 3f\n" \ +" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \ +" b 3f\n" \ +" sub %1,%2,%1 ! this kills msb of n\n" \ +"4: sub %1,%2,%1\n" \ +"5: addxcc %1,%1,%1\n" \ +" bcc 2b\n" \ +" subcc %%g1,1,%%g1\n" \ +"! Got carry from n. Subtract next step to cancel this carry.\n" \ +" bne 4b\n" \ +" addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n" \ +" sub %1,%2,%1\n" \ +"3: xnor %0,0,%0\n" \ +" ! End of inline udiv_qrnnd" \ + : "=&r" ((USItype) (__q)), \ + "=&r" ((USItype) (__r)) \ + : "r" ((USItype) (__d)), \ + "1" ((USItype) (__n1)), \ + "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC) +#define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */ +#endif /* __sparclite__ */ +#endif /* __sparc_v8__ */ +#endif /* sparc32 */ + +#if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \ + && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addcc %r4,%5,%1\n\t" \ + "add %r2,%3,%0\n\t" \ + "bcs,a,pn %%xcc, 1f\n\t" \ + "add %0, 1, %0\n" \ + "1:" \ + : "=r" ((UDItype)(sh)), \ + "=&r" ((UDItype)(sl)) \ + : "%rJ" ((UDItype)(ah)), \ + "rI" ((UDItype)(bh)), \ + "%rJ" ((UDItype)(al)), \ + "rI" ((UDItype)(bl)) \ + __CLOBBER_CC) + +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subcc %r4,%5,%1\n\t" \ + "sub %r2,%3,%0\n\t" \ + "bcs,a,pn %%xcc, 1f\n\t" \ + "sub %0, 1, %0\n\t" \ + "1:" \ + : "=r" ((UDItype)(sh)), \ + "=&r" ((UDItype)(sl)) \ + : "rJ" ((UDItype)(ah)), \ + "rI" ((UDItype)(bh)), \ + "rJ" ((UDItype)(al)), \ + "rI" ((UDItype)(bl)) \ + __CLOBBER_CC) + +#define umul_ppmm(wh, wl, u, v) \ + do { \ + UDItype tmp1, tmp2, tmp3, tmp4; \ + __asm__ __volatile__ ( \ + "srl %7,0,%3\n\t" \ + "mulx %3,%6,%1\n\t" \ + "srlx %6,32,%2\n\t" \ + "mulx %2,%3,%4\n\t" \ + "sllx %4,32,%5\n\t" \ + "srl %6,0,%3\n\t" \ + "sub %1,%5,%5\n\t" \ + "srlx %5,32,%5\n\t" \ + "addcc %4,%5,%4\n\t" \ + "srlx %7,32,%5\n\t" \ + "mulx %3,%5,%3\n\t" \ + "mulx %2,%5,%5\n\t" \ + "sethi %%hi(0x80000000),%2\n\t" \ + "addcc %4,%3,%4\n\t" \ + "srlx %4,32,%4\n\t" \ + "add %2,%2,%2\n\t" \ + "movcc %%xcc,%%g0,%2\n\t" \ + "addcc %5,%4,%5\n\t" \ + "sllx %3,32,%3\n\t" \ + "add %1,%3,%1\n\t" \ + "add %5,%2,%0" \ + : "=r" ((UDItype)(wh)), \ + "=&r" ((UDItype)(wl)), \ + "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4) \ + : "r" ((UDItype)(u)), \ + "r" ((UDItype)(v)) \ + __CLOBBER_CC); \ + } while (0) +#define UMUL_TIME 96 +#define UDIV_TIME 230 +#endif /* sparc64 */ + +#if defined (__vax__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addl2 %5,%1\n\tadwc %3,%0" \ + : "=g" ((USItype) (sh)), \ + "=&g" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subl2 %5,%1\n\tsbwc %3,%0" \ + : "=g" ((USItype) (sh)), \ + "=&g" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union { \ + UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("emul %1,%2,$0,%0" \ + : "=r" (__xx.__ll) \ + : "g" (__m0), \ + "g" (__m1)); \ + (xh) = __xx.__i.__h; \ + (xl) = __xx.__i.__l; \ + (xh) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + union {DItype __ll; \ + struct {SItype __l, __h;} __i; \ + } __xx; \ + __xx.__i.__h = n1; __xx.__i.__l = n0; \ + __asm__ ("ediv %3,%2,%0,%1" \ + : "=g" (q), "=g" (r) \ + : "g" (__xx.__ll), "g" (d)); \ + } while (0) +#endif /* __vax__ */ + +#if defined (__z8000__) && W_TYPE_SIZE == 16 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ + : "=r" ((unsigned int)(sh)), \ + "=&r" ((unsigned int)(sl)) \ + : "%0" ((unsigned int)(ah)), \ + "r" ((unsigned int)(bh)), \ + "%1" ((unsigned int)(al)), \ + "rQR" ((unsigned int)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ + : "=r" ((unsigned int)(sh)), \ + "=&r" ((unsigned int)(sl)) \ + : "0" ((unsigned int)(ah)), \ + "r" ((unsigned int)(bh)), \ + "1" ((unsigned int)(al)), \ + "rQR" ((unsigned int)(bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union {long int __ll; \ + struct {unsigned int __h, __l;} __i; \ + } __xx; \ + unsigned int __m0 = (m0), __m1 = (m1); \ + __asm__ ("mult %S0,%H3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (__m0), \ + "rQR" (__m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + (xh) += ((((signed int) __m0 >> 15) & __m1) \ + + (((signed int) __m1 >> 15) & __m0)); \ + } while (0) +#endif /* __z8000__ */ + +#endif /* __GNUC__ */ + +/* If this machine has no inline assembler, use C macros. */ + +#if !defined (add_ssaaaa) +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + UWtype __x; \ + __x = (al) + (bl); \ + (sh) = (ah) + (bh) + (__x < (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (sub_ddmmss) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + UWtype __x; \ + __x = (al) - (bl); \ + (sh) = (ah) - (bh) - (__x > (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (umul_ppmm) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UWtype __x0, __x1, __x2, __x3; \ + UHWtype __ul, __vl, __uh, __vh; \ + \ + __ul = __ll_lowpart (u); \ + __uh = __ll_highpart (u); \ + __vl = __ll_lowpart (v); \ + __vh = __ll_highpart (v); \ + \ + __x0 = (UWtype) __ul * __vl; \ + __x1 = (UWtype) __ul * __vh; \ + __x2 = (UWtype) __uh * __vl; \ + __x3 = (UWtype) __uh * __vh; \ + \ + __x1 += __ll_highpart (__x0);/* this can't give carry */ \ + __x1 += __x2; /* but this indeed can */ \ + if (__x1 < __x2) /* did we get it? */ \ + __x3 += __ll_B; /* yes, add it in the proper pos. */ \ + \ + (w1) = __x3 + __ll_highpart (__x1); \ + (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \ + } while (0) +#endif + +#if !defined (__umulsidi3) +#define __umulsidi3(u, v) \ + ({DWunion __w; \ + umul_ppmm (__w.s.high, __w.s.low, u, v); \ + __w.ll; }) +#endif + +/* Define this unconditionally, so it can be used for debugging. */ +#define __udiv_qrnnd_c(q, r, n1, n0, d) \ + do { \ + UWtype __d1, __d0, __q1, __q0; \ + UWtype __r1, __r0, __m; \ + __d1 = __ll_highpart (d); \ + __d0 = __ll_lowpart (d); \ + \ + __r1 = (n1) % __d1; \ + __q1 = (n1) / __d1; \ + __m = (UWtype) __q1 * __d0; \ + __r1 = __r1 * __ll_B | __ll_highpart (n0); \ + if (__r1 < __m) \ + { \ + __q1--, __r1 += (d); \ + if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ + if (__r1 < __m) \ + __q1--, __r1 += (d); \ + } \ + __r1 -= __m; \ + \ + __r0 = __r1 % __d1; \ + __q0 = __r1 / __d1; \ + __m = (UWtype) __q0 * __d0; \ + __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ + if (__r0 < __m) \ + { \ + __q0--, __r0 += (d); \ + if (__r0 >= (d)) \ + if (__r0 < __m) \ + __q0--, __r0 += (d); \ + } \ + __r0 -= __m; \ + \ + (q) = (UWtype) __q1 * __ll_B | __q0; \ + (r) = __r0; \ + } while (0) + +/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through + __udiv_w_sdiv (defined in libgcc or elsewhere). */ +#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) +#define udiv_qrnnd(q, r, nh, nl, d) \ + do { \ + USItype __r; \ + (q) = __udiv_w_sdiv (&__r, nh, nl, d); \ + (r) = __r; \ + } while (0) +#endif + +/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ +#if !defined (udiv_qrnnd) +#define UDIV_NEEDS_NORMALIZATION 1 +#define udiv_qrnnd __udiv_qrnnd_c +#endif + +#if !defined (count_leading_zeros) +extern const UQItype __clz_tab[]; +#define count_leading_zeros(count, x) \ + do { \ + UWtype __xr = (x); \ + UWtype __a; \ + \ + if (W_TYPE_SIZE <= 32) \ + { \ + __a = __xr < ((UWtype)1<<2*__BITS4) \ + ? (__xr < ((UWtype)1<<__BITS4) ? 0 : __BITS4) \ + : (__xr < ((UWtype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \ + } \ + else \ + { \ + for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ + if (((__xr >> __a) & 0xff) != 0) \ + break; \ + } \ + \ + (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ + } while (0) +#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE +#endif + +#if !defined (count_trailing_zeros) +/* Define count_trailing_zeros using count_leading_zeros. The latter might be + defined in asm, but if it is not, the C version above is good enough. */ +#define count_trailing_zeros(count, x) \ + do { \ + UWtype __ctz_x = (x); \ + UWtype __ctz_c; \ + count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ + (count) = W_TYPE_SIZE - 1 - __ctz_c; \ + } while (0) +#endif + +#ifndef UDIV_NEEDS_NORMALIZATION +#define UDIV_NEEDS_NORMALIZATION 0 +#endif --- linux-2.6.32.orig/ubuntu/ndiswrapper/Makefile +++ linux-2.6.32/ubuntu/ndiswrapper/Makefile @@ -0,0 +1,38 @@ +ndiswrapper-objs := crt.o hal.o iw_ndis.o loader.o ndis.o ntoskernel.o ntoskernel_io.o \ + pe_linker.o pnp.o proc.o rtl.o wrapmem.o wrapndis.o wrapper.o usb.o + +EXPORTS = crt_exports.h hal_exports.h ndis_exports.h ntoskernel_exports.h \ + ntoskernel_io_exports.h rtl_exports.h usb_exports.h + +STUB_SRCS = crt.c hal.c ndis.c ntoskernel.c ntoskernel_io.c \ + pnp.c rtl.c wrapndis.c usb.c + + +EXTRA_CFLAGS += -DENABLE_USB -I$(obj) +EXTRA_AFLAGS += -I$(obj) + +# generate exports symbol table from C files +quiet_cmd_mkexport = MKEXPORT $@ +cmd_mkexport = $(SHELL) $(srctree)/$(src)/mkexport.sh $< $@ + +%_exports.h: %.c $(srctree)/$(src)/mkexport.sh FORCE + $(call if_changed,mkexport) + +$(addprefix $(obj)/,$(EXPORTS:_exports.h=.o)): %.o: %_exports.h +extra-y += $(EXPORTS) + +ifeq ($(CONFIG_X86_64),y) +quiet_cmd_mkstubs = MKSTUBS $@ +cmd_mkstubs = $(SHELL) $(srctree)/$(src)/mkstubs.sh $(addprefix $(srctree)/$(src)/,$(STUB_SRCS)) >$@ + +$(obj)/win2lin_stubs.h: $(addprefix $(srctree)/$(src)/,$(STUB_SRCS)) FORCE + $(call if_changed,mkstubs) + +$(obj)/win2lin_stubs.o: $(obj)/win2lin_stubs.h +extra-y += win2lin_stubs.h +ndiswrapper-objs += win2lin_stubs.o +else +ndiswrapper-objs += divdi3.o +endif + +obj-$(CONFIG_NDISWRAPPER) := ndiswrapper.o --- linux-2.6.32.orig/ubuntu/ndiswrapper/pe_linker.c +++ linux-2.6.32/ubuntu/ndiswrapper/pe_linker.c @@ -0,0 +1,609 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#ifdef TEST_LOADER + +#include "usr_linker.h" + +#else + +#include +#include + +//#define DEBUGLINKER 2 + +#include "ntoskernel.h" + +#endif + +struct pe_exports { + char *dll; + char *name; + generic_func addr; +}; + +static struct pe_exports pe_exports[40]; +static int num_pe_exports; + +#define RVA2VA(image, rva, type) (type)(ULONG_PTR)((void *)image + rva) +#define CHECK_SZ(a,b) { if (sizeof(a) != b) { \ + ERROR("%s is bad, got %zd, expected %d", \ + #a , sizeof(a), (b)); return -EINVAL; } } + +#if defined(DEBUGLINKER) && DEBUGLINKER > 0 +#define DBGLINKER(fmt, ...) printk(KERN_INFO "%s (%s:%d): " fmt "\n", \ + DRIVER_NAME, __func__, \ + __LINE__ , ## __VA_ARGS__); +static const char *image_directory_name[] = { + "EXPORT", + "IMPORT", + "RESOURCE", + "EXCEPTION", + "SECURITY", + "BASERELOC", + "DEBUG", + "COPYRIGHT", + "GLOBALPTR", + "TLS", + "LOAD_CONFIG", + "BOUND_IMPORT", + "IAT", + "DELAY_IMPORT", + "COM_DESCRIPTOR" }; +#else +#define DBGLINKER(fmt, ...) do { } while (0) +#endif + +#ifndef TEST_LOADER +extern struct wrap_export ntoskernel_exports[], ntoskernel_io_exports[], + ndis_exports[], crt_exports[], hal_exports[], rtl_exports[]; +#ifdef ENABLE_USB +extern struct wrap_export usb_exports[]; +#endif + +static char *get_export(char *name) +{ + int i; + + for (i = 0 ; ntoskernel_exports[i].name != NULL; i++) + if (strcmp(ntoskernel_exports[i].name, name) == 0) + return (char *)ntoskernel_exports[i].func; + + for (i = 0 ; ntoskernel_io_exports[i].name != NULL; i++) + if (strcmp(ntoskernel_io_exports[i].name, name) == 0) + return (char *)ntoskernel_io_exports[i].func; + + for (i = 0 ; ndis_exports[i].name != NULL; i++) + if (strcmp(ndis_exports[i].name, name) == 0) + return (char *)ndis_exports[i].func; + + for (i = 0 ; crt_exports[i].name != NULL; i++) + if (strcmp(crt_exports[i].name, name) == 0) + return (char *)crt_exports[i].func; + + for (i = 0 ; hal_exports[i].name != NULL; i++) + if (strcmp(hal_exports[i].name, name) == 0) + return (char *)hal_exports[i].func; + + for (i = 0 ; rtl_exports[i].name != NULL; i++) + if (strcmp(rtl_exports[i].name, name) == 0) + return (char *)rtl_exports[i].func; + +#ifdef ENABLE_USB + for (i = 0 ; usb_exports[i].name != NULL; i++) + if (strcmp(usb_exports[i].name, name) == 0) + return (char *)usb_exports[i].func; +#endif + + for (i = 0; i < num_pe_exports; i++) + if (strcmp(pe_exports[i].name, name) == 0) + return (char *)pe_exports[i].addr; + + return NULL; +} +#endif // TEST_LOADER + +static void *get_dll_init(char *name) +{ + int i; + for (i = 0; i < num_pe_exports; i++) + if ((strcmp(pe_exports[i].dll, name) == 0) && + (strcmp(pe_exports[i].name, "DllInitialize") == 0)) + return (void *)pe_exports[i].addr; + return NULL; +} + +/* + * Find and validate the coff header + * + */ +static int check_nt_hdr(IMAGE_NT_HEADERS *nt_hdr) +{ + int i; + WORD attr; + PIMAGE_OPTIONAL_HEADER opt_hdr; + + /* Validate the "PE\0\0" signature */ + if (nt_hdr->Signature != IMAGE_NT_SIGNATURE) { + ERROR("is this driver file? bad signature %08x", + nt_hdr->Signature); + return -EINVAL; + } + + opt_hdr = &nt_hdr->OptionalHeader; + /* Make sure Image is PE32 or PE32+ */ +#ifdef CONFIG_X86_64 + if (opt_hdr->Magic != IMAGE_NT_OPTIONAL_HDR64_MAGIC) { + ERROR("kernel is 64-bit, but Windows driver is not 64-bit;" + "bad magic: %04X", opt_hdr->Magic); + return -EINVAL; + } +#else + if (opt_hdr->Magic != IMAGE_NT_OPTIONAL_HDR32_MAGIC) { + ERROR("kernel is 32-bit, but Windows driver is not 32-bit;" + "bad magic: %04X", opt_hdr->Magic); + return -EINVAL; + } +#endif + + /* Validate the image for the current architecture. */ +#ifdef CONFIG_X86_64 + if (nt_hdr->FileHeader.Machine != IMAGE_FILE_MACHINE_AMD64) { + ERROR("kernel is 64-bit, but Windows driver is not 64-bit;" + " (PE signature is %04X)", nt_hdr->FileHeader.Machine); + return -EINVAL; + } +#else + if (nt_hdr->FileHeader.Machine != IMAGE_FILE_MACHINE_I386) { + ERROR("kernel is 32-bit, but Windows driver is not 32-bit;" + " (PE signature is %04X)", nt_hdr->FileHeader.Machine); + return -EINVAL; + } +#endif + + /* Must have attributes */ +#ifdef CONFIG_X86_64 + attr = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LARGE_ADDRESS_AWARE; +#else + attr = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_32BIT_MACHINE; +#endif + if ((nt_hdr->FileHeader.Characteristics & attr) != attr) + return -EINVAL; + + /* Must be relocatable */ + attr = IMAGE_FILE_RELOCS_STRIPPED; + if ((nt_hdr->FileHeader.Characteristics & attr)) + return -EINVAL; + + /* Make sure we have at least one section */ + if (nt_hdr->FileHeader.NumberOfSections == 0) + return -EINVAL; + + if (opt_hdr->SectionAlignment < opt_hdr->FileAlignment) { + ERROR("alignment mismatch: secion: 0x%x, file: 0x%x", + opt_hdr->SectionAlignment, opt_hdr->FileAlignment); + return -EINVAL; + } + + DBGLINKER("number of datadictionary entries %d", + opt_hdr->NumberOfRvaAndSizes); + for (i = 0; i < opt_hdr->NumberOfRvaAndSizes; i++) { + DBGLINKER("datadirectory %s RVA:%X Size:%d", + (i<=IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR)? + image_directory_name[i] : "unknown", + opt_hdr->DataDirectory[i].VirtualAddress, + opt_hdr->DataDirectory[i].Size); + } + + if ((nt_hdr->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE)) + return IMAGE_FILE_EXECUTABLE_IMAGE; + if ((nt_hdr->FileHeader.Characteristics & IMAGE_FILE_DLL)) + return IMAGE_FILE_DLL; + return -EINVAL; +} + +static int import(void *image, IMAGE_IMPORT_DESCRIPTOR *dirent, char *dll) +{ + ULONG_PTR *lookup_tbl, *address_tbl; + char *symname = NULL; + int i; + int ret = 0; + void *adr; + + lookup_tbl = RVA2VA(image, dirent->u.OriginalFirstThunk, ULONG_PTR *); + address_tbl = RVA2VA(image, dirent->FirstThunk, ULONG_PTR *); + + for (i = 0; lookup_tbl[i]; i++) { + if (IMAGE_SNAP_BY_ORDINAL(lookup_tbl[i])) { + ERROR("ordinal import not supported: %Lu", + (uint64_t)lookup_tbl[i]); + return -1; + } + else { + symname = RVA2VA(image, + ((lookup_tbl[i] & + ~IMAGE_ORDINAL_FLAG) + 2), char *); + } + + adr = get_export(symname); + if (adr == NULL) { + ERROR("unknown symbol: %s:'%s'", dll, symname); + ret = -1; + } else { + DBGLINKER("found symbol: %s:%s: addr: %p, rva = %Lu", + dll, symname, adr, (uint64_t)address_tbl[i]); + address_tbl[i] = (ULONG_PTR)adr; + } + } + return ret; +} + +static int read_exports(struct pe_image *pe) +{ + IMAGE_EXPORT_DIRECTORY *export_dir_table; + uint32_t *export_addr_table; + int i; + uint32_t *name_table; + PIMAGE_OPTIONAL_HEADER opt_hdr; + IMAGE_DATA_DIRECTORY *export_data_dir; + + opt_hdr = &pe->nt_hdr->OptionalHeader; + export_data_dir = + &opt_hdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; + + if (export_data_dir->Size == 0) { + DBGLINKER("no exports"); + return 0; + } + + export_dir_table = + RVA2VA(pe->image, export_data_dir->VirtualAddress, + IMAGE_EXPORT_DIRECTORY *); + + name_table = (unsigned int *)(pe->image + + export_dir_table->AddressOfNames); + export_addr_table = (uint32_t *) + (pe->image + export_dir_table->AddressOfFunctions); + + for (i = 0; i < export_dir_table->NumberOfNames; i++) { + + if (export_data_dir->VirtualAddress <= *export_addr_table || + *export_addr_table >= (export_data_dir->VirtualAddress + + export_data_dir->Size)) + DBGLINKER("forwarder rva"); + + DBGLINKER("export symbol: %s, at %p", + (char *)(pe->image + *name_table), + pe->image + *export_addr_table); + + pe_exports[num_pe_exports].dll = pe->name; + pe_exports[num_pe_exports].name = pe->image + *name_table; + pe_exports[num_pe_exports].addr = + pe->image + *export_addr_table; + + num_pe_exports++; + name_table++; + export_addr_table++; + } + return 0; +} + +static int fixup_imports(void *image, IMAGE_NT_HEADERS *nt_hdr) +{ + int i; + char *name; + int ret = 0; + IMAGE_IMPORT_DESCRIPTOR *dirent; + IMAGE_DATA_DIRECTORY *import_data_dir; + PIMAGE_OPTIONAL_HEADER opt_hdr; + + opt_hdr = &nt_hdr->OptionalHeader; + import_data_dir = + &opt_hdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; + dirent = RVA2VA(image, import_data_dir->VirtualAddress, + IMAGE_IMPORT_DESCRIPTOR *); + + for (i = 0; dirent[i].Name; i++) { + name = RVA2VA(image, dirent[i].Name, char*); + + DBGLINKER("imports from dll: %s", name); + ret += import(image, &dirent[i], name); + } + return ret; +} + +static int fixup_reloc(void *image, IMAGE_NT_HEADERS *nt_hdr) +{ + ULONG_PTR base; + ULONG_PTR size; + IMAGE_BASE_RELOCATION *fixup_block; + IMAGE_DATA_DIRECTORY *base_reloc_data_dir; + PIMAGE_OPTIONAL_HEADER opt_hdr; + + opt_hdr = &nt_hdr->OptionalHeader; + base = opt_hdr->ImageBase; + base_reloc_data_dir = + &opt_hdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC]; + if (base_reloc_data_dir->Size == 0) + return 0; + + fixup_block = RVA2VA(image, base_reloc_data_dir->VirtualAddress, + IMAGE_BASE_RELOCATION *); + DBGLINKER("fixup_block=%p, image=%p", fixup_block, image); + DBGLINKER("fixup_block info: %x %d", + fixup_block->VirtualAddress, fixup_block->SizeOfBlock); + + while (fixup_block->SizeOfBlock) { + int i; + WORD fixup, offset; + + size = (fixup_block->SizeOfBlock - + sizeof(IMAGE_BASE_RELOCATION)) / sizeof(WORD); + DBGLINKER("found %Lu relocations in this block", + (uint64_t)size); + + for (i = 0; i < size; i++) { + fixup = fixup_block->TypeOffset[i]; + offset = fixup & 0xfff; + switch ((fixup >> 12) & 0x0f) { + case IMAGE_REL_BASED_ABSOLUTE: + break; + + case IMAGE_REL_BASED_HIGHLOW: { + uint32_t addr; + uint32_t *loc = + RVA2VA(image, + fixup_block->VirtualAddress + + offset, uint32_t *); + addr = RVA2VA(image, (*loc - base), uint32_t); + DBGLINKER("relocation: *%p (Val:%X)= %X", + loc, *loc, addr); + *loc = addr; + } + break; + + case IMAGE_REL_BASED_DIR64: { + uint64_t addr; + uint64_t *loc = + RVA2VA(image, + fixup_block->VirtualAddress + + offset, uint64_t *); + addr = RVA2VA(image, (*loc - base), uint64_t); + DBGLINKER("relocation: *%p (Val:%llX)= %llx", + loc, *loc, addr); + *loc = addr; + } + break; + + default: + ERROR("unknown fixup: %08X", + (fixup >> 12) & 0x0f); + return -EOPNOTSUPP; + break; + } + } + DBGLINKER("finished relocating block"); + + fixup_block = (IMAGE_BASE_RELOCATION *) + ((void *)fixup_block + fixup_block->SizeOfBlock); + }; + DBGLINKER("done relocating all"); + + return 0; +} + +/* Expand the image in memroy if necessary. The image on disk does not + * necessarily maps the image of the driver in memory, so we have to + * re-write it in order to fullfill the sections alignements. The + * advantage to do that is that rva_to_va becomes a simple + * addition. */ +static int fix_pe_image(struct pe_image *pe) +{ + void *image; + IMAGE_SECTION_HEADER *sect_hdr; + int i, sections; + int image_size; + + if (pe->size == pe->opt_hdr->SizeOfImage) { + /* Nothing to do */ + return 0; + } + + image_size = pe->opt_hdr->SizeOfImage; +#ifdef CONFIG_X86_64 +#ifdef PAGE_KERNEL_EXECUTABLE + image = __vmalloc(image_size, GFP_KERNEL | __GFP_HIGHMEM, + PAGE_KERNEL_EXECUTABLE); +#elif defined PAGE_KERNEL_EXEC + image = __vmalloc(image_size, GFP_KERNEL | __GFP_HIGHMEM, + PAGE_KERNEL_EXEC); +#else +#error x86_64 should have either PAGE_KERNEL_EXECUTABLE or PAGE_KERNEL_EXEC +#endif +#else +#ifdef cpu_has_nx + /* hate to play with kernel macros, but PAGE_KERNEL_EXEC is + * not available to modules! */ + if (cpu_has_nx) + image = __vmalloc(image_size, GFP_KERNEL | __GFP_HIGHMEM, + __pgprot(__PAGE_KERNEL & ~_PAGE_NX)); + else + image = vmalloc(image_size); +#else + image = vmalloc(image_size); +#endif +#endif + if (image == NULL) { + ERROR("failed to allocate enough space for new image:" + " %d bytes", image_size); + return -ENOMEM; + } + + /* Copy all the headers, ie everything before the first section. */ + + sections = pe->nt_hdr->FileHeader.NumberOfSections; + sect_hdr = IMAGE_FIRST_SECTION(pe->nt_hdr); + + DBGLINKER("copying headers: %u bytes", sect_hdr->PointerToRawData); + + memcpy(image, pe->image, sect_hdr->PointerToRawData); + + /* Copy all the sections */ + for (i = 0; i < sections; i++) { + DBGLINKER("Copy section %s from %x to %x", + sect_hdr->Name, sect_hdr->PointerToRawData, + sect_hdr->VirtualAddress); + if (sect_hdr->VirtualAddress+sect_hdr->SizeOfRawData > + image_size) { + ERROR("Invalid section %s in driver", sect_hdr->Name); + vfree(image); + return -EINVAL; + } + + memcpy(image+sect_hdr->VirtualAddress, + pe->image + sect_hdr->PointerToRawData, + sect_hdr->SizeOfRawData); + sect_hdr++; + } + + vfree(pe->image); + pe->image = image; + pe->size = image_size; + + /* Update our internal pointers */ + pe->nt_hdr = (IMAGE_NT_HEADERS *) + (pe->image + ((IMAGE_DOS_HEADER *)pe->image)->e_lfanew); + pe->opt_hdr = &pe->nt_hdr->OptionalHeader; + + DBGLINKER("set nt headers: nt_hdr=%p, opt_hdr=%p, image=%p", + pe->nt_hdr, pe->opt_hdr, pe->image); + + return 0; +} + +#if defined(CONFIG_X86_64) +static void fix_user_shared_data_addr(char *driver, unsigned long length) +{ + unsigned long i, n, max_addr, *addr; + + n = length - sizeof(unsigned long); + max_addr = KI_USER_SHARED_DATA + sizeof(kuser_shared_data); + for (i = 0; i < n; i++) { + addr = (unsigned long *)(driver + i); + if (*addr >= KI_USER_SHARED_DATA && *addr < max_addr) { + *addr -= KI_USER_SHARED_DATA; + *addr += (unsigned long)&kuser_shared_data; + kuser_shared_data.reserved1 = 1; + } + } +} +#endif + +int link_pe_images(struct pe_image *pe_image, unsigned short n) +{ + int i; + struct pe_image *pe; + +#ifdef DEBUG + /* Sanity checkings */ + CHECK_SZ(IMAGE_SECTION_HEADER, IMAGE_SIZEOF_SECTION_HEADER); + CHECK_SZ(IMAGE_FILE_HEADER, IMAGE_SIZEOF_FILE_HEADER); + CHECK_SZ(IMAGE_OPTIONAL_HEADER, IMAGE_SIZEOF_NT_OPTIONAL_HEADER); + CHECK_SZ(IMAGE_NT_HEADERS, 4 + IMAGE_SIZEOF_FILE_HEADER + + IMAGE_SIZEOF_NT_OPTIONAL_HEADER); + CHECK_SZ(IMAGE_DOS_HEADER, 0x40); + CHECK_SZ(IMAGE_EXPORT_DIRECTORY, 40); + CHECK_SZ(IMAGE_BASE_RELOCATION, 8); + CHECK_SZ(IMAGE_IMPORT_DESCRIPTOR, 20); +#endif + + for (i = 0; i < n; i++) { + IMAGE_DOS_HEADER *dos_hdr; + pe = &pe_image[i]; + dos_hdr = pe->image; + + if (pe->size < sizeof(IMAGE_DOS_HEADER)) { + TRACE1("image too small: %d", pe->size); + return -EINVAL; + } + + pe->nt_hdr = + (IMAGE_NT_HEADERS *)(pe->image + dos_hdr->e_lfanew); + pe->opt_hdr = &pe->nt_hdr->OptionalHeader; + + pe->type = check_nt_hdr(pe->nt_hdr); + if (pe->type <= 0) { + TRACE1("type <= 0"); + return -EINVAL; + } + + if (fix_pe_image(pe)) { + TRACE1("bad PE image"); + return -EINVAL; + } + + if (read_exports(pe)) { + TRACE1("read exports failed"); + return -EINVAL; + } + } + + for (i = 0; i < n; i++) { + pe = &pe_image[i]; + + if (fixup_reloc(pe->image, pe->nt_hdr)) { + TRACE1("fixup reloc failed"); + return -EINVAL; + } + if (fixup_imports(pe->image, pe->nt_hdr)) { + TRACE1("fixup imports failed"); + return -EINVAL; + } +#if defined(CONFIG_X86_64) + INFO("fixing KI_USER_SHARED_DATA address in the driver"); + fix_user_shared_data_addr(pe_image[i].image, pe_image[i].size); +#endif + flush_icache_range(pe->image, pe->size); + + pe->entry = + RVA2VA(pe->image, + pe->opt_hdr->AddressOfEntryPoint, void *); + TRACE1("entry is at %p, rva at %08X", pe->entry, + pe->opt_hdr->AddressOfEntryPoint); + } + + for (i = 0; i < n; i++) { + pe = &pe_image[i]; + + if (pe->type == IMAGE_FILE_DLL) { + struct unicode_string ustring; + char *buf = "0/0t0m0p00"; + int (*dll_entry)(struct unicode_string *ustring) + wstdcall; + + memset(&ustring, 0, sizeof(ustring)); + ustring.buf = (wchar_t *)buf; + dll_entry = (void *)get_dll_init(pe->name); + + TRACE1("calling dll_init at %p", dll_entry); + if (!dll_entry || dll_entry(&ustring)) + ERROR("DLL initialize failed for %s", + pe->name); + } + else if (pe->type != IMAGE_FILE_EXECUTABLE_IMAGE) + ERROR("illegal image type: %d", pe->type); + } + return 0; +} --- linux-2.6.32.orig/ubuntu/ndiswrapper/loader.c +++ linux-2.6.32/ubuntu/ndiswrapper/loader.c @@ -0,0 +1,877 @@ +/* + * Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani + * + * 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. + * + */ + +#include "ndis.h" +#include "loader.h" +#include "wrapndis.h" +#include "pnp.h" + +#include +#include +#include +#include + +/* + Network adapter: ClassGuid = {4d36e972-e325-11ce-bfc1-08002be10318} + Network client: ClassGuid = {4d36e973-e325-11ce-bfc1-08002be10318} + PCMCIA adapter: ClassGuid = {4d36e977-e325-11ce-bfc1-08002be10318} + USB: ClassGuid = {36fc9e60-c465-11cf-8056-444553540000} +*/ + +/* the indices used here must match macros WRAP_NDIS_DEVICE etc. */ +static struct guid class_guids[] = { + /* Network */ + {0x4d36e972, 0xe325, 0x11ce, }, + /* USB WDM */ + {0x36fc9e60, 0xc465, 0x11cf, }, + /* Bluetooth */ + {0xe0cbf06c, 0xcd8b, 0x4647, }, + /* ivtcorporatino.com's bluetooth device claims this is + * bluetooth guid */ + {0xf12d3cf8, 0xb11d, 0x457e, }, +}; + +struct semaphore loader_mutex; +static struct completion loader_complete; + +static struct nt_list wrap_devices; +static struct nt_list wrap_drivers; + +static int wrap_device_type(int data1) +{ + int i; + for (i = 0; i < sizeof(class_guids) / sizeof(class_guids[0]); i++) + if (data1 == class_guids[i].data1) + return i; + ERROR("unknown device: 0x%x\n", data1); + return -1; +} + +/* load driver for given device, if not already loaded */ +struct wrap_driver *load_wrap_driver(struct wrap_device *wd) +{ + int ret; + struct nt_list *cur; + struct wrap_driver *wrap_driver; + + ENTER1("device: %04X:%04X:%04X:%04X", wd->vendor, wd->device, + wd->subvendor, wd->subdevice); + if (down_interruptible(&loader_mutex)) { + WARNING("couldn't obtain loader_mutex"); + EXIT1(return NULL); + } + wrap_driver = NULL; + nt_list_for_each(cur, &wrap_drivers) { + wrap_driver = container_of(cur, struct wrap_driver, list); + if (!stricmp(wrap_driver->name, wd->driver_name)) { + TRACE1("driver %s already loaded", wrap_driver->name); + break; + } else + wrap_driver = NULL; + } + up(&loader_mutex); + + if (!wrap_driver) { + char *argv[] = {"loadndisdriver", WRAP_CMD_LOAD_DRIVER, +#if defined(DEBUG) && DEBUG >= 1 + "1", +#else + "0", +#endif + UTILS_VERSION, wd->driver_name, + wd->conf_file_name, NULL}; + char *env[] = {NULL}; + + TRACE1("loading driver %s", wd->driver_name); + if (down_interruptible(&loader_mutex)) { + WARNING("couldn't obtain loader_mutex"); + EXIT1(return NULL); + } + INIT_COMPLETION(loader_complete); + ret = call_usermodehelper("/sbin/loadndisdriver", argv, env, 1); + if (ret) { + up(&loader_mutex); + ERROR("couldn't load driver %s; check system log " + "for messages from 'loadndisdriver'", + wd->driver_name); + EXIT1(return NULL); + } + wait_for_completion(&loader_complete); + TRACE1("%s", wd->driver_name); + wrap_driver = NULL; + nt_list_for_each(cur, &wrap_drivers) { + wrap_driver = container_of(cur, struct wrap_driver, + list); + if (!stricmp(wrap_driver->name, wd->driver_name)) { + wd->driver = wrap_driver; + break; + } else + wrap_driver = NULL; + } + up(&loader_mutex); + if (wrap_driver) + TRACE1("driver %s is loaded", wrap_driver->name); + else + ERROR("couldn't load driver '%s'", wd->driver_name); + } + EXIT1(return wrap_driver); +} + +/* load the driver files from userspace. */ +static int load_sys_files(struct wrap_driver *driver, + struct load_driver *load_driver) +{ + int i, err; + + TRACE1("num_pe_images = %d", load_driver->num_sys_files); + TRACE1("loading driver: %s", load_driver->name); + strncpy(driver->name, load_driver->name, sizeof(driver->name)); + driver->name[sizeof(driver->name)-1] = 0; + TRACE1("driver: %s", driver->name); + err = 0; + driver->num_pe_images = 0; + for (i = 0; i < load_driver->num_sys_files; i++) { + struct pe_image *pe_image; + pe_image = &driver->pe_images[driver->num_pe_images]; + + strncpy(pe_image->name, load_driver->sys_files[i].name, + sizeof(pe_image->name)); + pe_image->name[sizeof(pe_image->name)-1] = 0; + TRACE1("image size: %lu bytes", + (unsigned long)load_driver->sys_files[i].size); + +#ifdef CONFIG_X86_64 +#ifdef PAGE_KERNEL_EXECUTABLE + pe_image->image = + __vmalloc(load_driver->sys_files[i].size, + GFP_KERNEL | __GFP_HIGHMEM, + PAGE_KERNEL_EXECUTABLE); +#elif defined PAGE_KERNEL_EXEC + pe_image->image = + __vmalloc(load_driver->sys_files[i].size, + GFP_KERNEL | __GFP_HIGHMEM, + PAGE_KERNEL_EXEC); +#else +#error x86_64 should have either PAGE_KERNEL_EXECUTABLE or PAGE_KERNEL_EXEC +#endif +#else + /* hate to play with kernel macros, but PAGE_KERNEL_EXEC is + * not available to modules! */ +#ifdef cpu_has_nx + if (cpu_has_nx) + pe_image->image = + __vmalloc(load_driver->sys_files[i].size, + GFP_KERNEL | __GFP_HIGHMEM, + __pgprot(__PAGE_KERNEL & ~_PAGE_NX)); + else + pe_image->image = + vmalloc(load_driver->sys_files[i].size); +#else + pe_image->image = + vmalloc(load_driver->sys_files[i].size); +#endif +#endif + if (!pe_image->image) { + ERROR("couldn't allocate memory"); + err = -ENOMEM; + break; + } + TRACE1("image is at %p", pe_image->image); + + if (copy_from_user(pe_image->image, + load_driver->sys_files[i].data, + load_driver->sys_files[i].size)) { + ERROR("couldn't load file %s", + load_driver->sys_files[i].name); + err = -EFAULT; + break; + } + pe_image->size = load_driver->sys_files[i].size; + driver->num_pe_images++; + } + + if (!err && link_pe_images(driver->pe_images, driver->num_pe_images)) { + ERROR("couldn't prepare driver '%s'", load_driver->name); + err = -EINVAL; + } + + if (driver->num_pe_images < load_driver->num_sys_files || err) { + for (i = 0; i < driver->num_pe_images; i++) + if (driver->pe_images[i].image) + vfree(driver->pe_images[i].image); + driver->num_pe_images = 0; + EXIT1(return err); + } else + EXIT1(return 0); +} + +struct wrap_bin_file *get_bin_file(char *bin_file_name) +{ + int i = 0; + struct wrap_driver *driver, *cur; + + ENTER1("%s", bin_file_name); + if (down_interruptible(&loader_mutex)) { + WARNING("couldn't obtain loader_mutex"); + EXIT1(return NULL); + } + driver = NULL; + nt_list_for_each_entry(cur, &wrap_drivers, list) { + for (i = 0; i < cur->num_bin_files; i++) + if (!stricmp(cur->bin_files[i].name, bin_file_name)) { + driver = cur; + break; + } + if (driver) + break; + } + up(&loader_mutex); + if (!driver) { + TRACE1("coudln't find bin file '%s'", bin_file_name); + return NULL; + } + + if (!driver->bin_files[i].data) { + char *argv[] = {"loadndisdriver", WRAP_CMD_LOAD_BIN_FILE, +#if defined(DEBUG) && DEBUG >= 1 + "1", +#else + "0", +#endif + UTILS_VERSION, driver->name, + driver->bin_files[i].name, NULL}; + char *env[] = {NULL}; + int ret; + + TRACE1("loading bin file %s/%s", driver->name, + driver->bin_files[i].name); + if (down_interruptible(&loader_mutex)) { + WARNING("couldn't obtain loader_mutex"); + EXIT1(return NULL); + } + INIT_COMPLETION(loader_complete); + ret = call_usermodehelper("/sbin/loadndisdriver", argv, env, 1); + if (ret) { + up(&loader_mutex); + ERROR("couldn't load file %s/%s; check system log " + "for messages from 'loadndisdriver' (%d)", + driver->name, driver->bin_files[i].name, ret); + EXIT1(return NULL); + } + wait_for_completion(&loader_complete); + up(&loader_mutex); + if (!driver->bin_files[i].data) { + WARNING("couldn't load binary file %s", + driver->bin_files[i].name); + EXIT1(return NULL); + } + } + EXIT2(return &(driver->bin_files[i])); +} + +/* called with loader_mutex down */ +static int add_bin_file(struct load_driver_file *driver_file) +{ + struct wrap_driver *driver, *cur; + struct wrap_bin_file *bin_file; + int i = 0; + + driver = NULL; + nt_list_for_each_entry(cur, &wrap_drivers, list) { + for (i = 0; i < cur->num_bin_files; i++) + if (!stricmp(cur->bin_files[i].name, + driver_file->name)) { + driver = cur; + break; + } + if (driver) + break; + } + if (!driver) { + ERROR("couldn't find %s", driver_file->name); + return -EINVAL; + } + bin_file = &driver->bin_files[i]; + strncpy(bin_file->name, driver_file->name, sizeof(bin_file->name)); + bin_file->name[sizeof(bin_file->name)-1] = 0; + bin_file->data = vmalloc(driver_file->size); + if (!bin_file->data) { + ERROR("couldn't allocate memory"); + return -ENOMEM; + } + bin_file->size = driver_file->size; + if (copy_from_user(bin_file->data, driver_file->data, bin_file->size)) { + ERROR("couldn't copy data"); + free_bin_file(bin_file); + return -EFAULT; + } + return 0; +} + +void free_bin_file(struct wrap_bin_file *bin_file) +{ + TRACE2("unloading %s", bin_file->name); + if (bin_file->data) + vfree(bin_file->data); + bin_file->data = NULL; + bin_file->size = 0; + EXIT2(return); +} + +/* load firmware files from userspace */ +static int load_bin_files_info(struct wrap_driver *driver, + struct load_driver *load_driver) +{ + struct wrap_bin_file *bin_files; + int i; + + ENTER1("%s, %d", load_driver->name, load_driver->num_bin_files); + driver->num_bin_files = 0; + driver->bin_files = NULL; + if (load_driver->num_bin_files == 0) + EXIT1(return 0); + bin_files = kzalloc(load_driver->num_bin_files * sizeof(*bin_files), + GFP_KERNEL); + if (!bin_files) { + ERROR("couldn't allocate memory"); + EXIT1(return -ENOMEM); + } + + for (i = 0; i < load_driver->num_bin_files; i++) { + strncpy(bin_files[i].name, load_driver->bin_files[i].name, + sizeof(bin_files[i].name)); + bin_files[i].name[sizeof(bin_files[i].name)-1] = 0; + TRACE2("loaded bin file %s", bin_files[i].name); + } + driver->num_bin_files = load_driver->num_bin_files; + driver->bin_files = bin_files; + EXIT1(return 0); +} + +/* load settnigs for a device. called with loader_mutex down */ +static int load_settings(struct wrap_driver *wrap_driver, + struct load_driver *load_driver) +{ + int i, num_settings; + + ENTER1("%p, %p", wrap_driver, load_driver); + + num_settings = 0; + for (i = 0; i < load_driver->num_settings; i++) { + struct load_device_setting *load_setting = + &load_driver->settings[i]; + struct wrap_device_setting *setting; + ULONG data1; + + setting = kzalloc(sizeof(*setting), GFP_KERNEL); + if (!setting) { + ERROR("couldn't allocate memory"); + break; + } + strncpy(setting->name, load_setting->name, + sizeof(setting->name)); + setting->name[sizeof(setting->name)-1] = 0; + strncpy(setting->value, load_setting->value, + sizeof(setting->value)); + setting->value[sizeof(setting->value)-1] = 0; + TRACE2("%p: %s=%s", setting, setting->name, setting->value); + + if (strcmp(setting->name, "driver_version") == 0) { + strncpy(wrap_driver->version, setting->value, + sizeof(wrap_driver->version)); + wrap_driver->version[sizeof(wrap_driver->version)-1] = 0; + } else if (strcmp(setting->name, "class_guid") == 0 && + sscanf(setting->value, "%x", &data1) == 1) { + wrap_driver->dev_type = wrap_device_type(data1); + if (wrap_driver->dev_type < 0) { + WARNING("unknown guid: %x", data1); + wrap_driver->dev_type = 0; + } + } + InsertTailList(&wrap_driver->settings, &setting->list); + num_settings++; + } + /* it is not a fatal error if some settings couldn't be loaded */ + if (num_settings > 0) + EXIT1(return 0); + else + EXIT1(return -EINVAL); +} + +void unload_wrap_device(struct wrap_device *wd) +{ + struct nt_list *cur; + ENTER1("unloading device %p (%04X:%04X:%04X:%04X), driver %s", wd, + wd->vendor, wd->device, wd->subvendor, wd->subdevice, + wd->driver_name); + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + while ((cur = RemoveHeadList(&wd->settings))) { + struct wrap_device_setting *setting; + setting = container_of(cur, struct wrap_device_setting, list); + kfree(setting); + } + RemoveEntryList(&wd->list); + up(&loader_mutex); + kfree(wd); + EXIT1(return); +} + +/* should be called with loader_mutex down */ +void unload_wrap_driver(struct wrap_driver *driver) +{ + int i; + struct driver_object *drv_obj; + struct nt_list *cur, *next; + + ENTER1("unloading driver: %s (%p)", driver->name, driver); + TRACE1("freeing %d images", driver->num_pe_images); + drv_obj = driver->drv_obj; + for (i = 0; i < driver->num_pe_images; i++) + if (driver->pe_images[i].image) { + TRACE1("freeing image at %p", + driver->pe_images[i].image); + vfree(driver->pe_images[i].image); + } + + TRACE1("freeing %d bin files", driver->num_bin_files); + for (i = 0; i < driver->num_bin_files; i++) { + TRACE1("freeing image at %p", driver->bin_files[i].data); + if (driver->bin_files[i].data) + vfree(driver->bin_files[i].data); + } + if (driver->bin_files) + kfree(driver->bin_files); + RtlFreeUnicodeString(&drv_obj->name); + RemoveEntryList(&driver->list); + nt_list_for_each_safe(cur, next, &driver->settings) { + struct wrap_device_setting *setting; + struct ndis_configuration_parameter *param; + + setting = container_of(cur, struct wrap_device_setting, list); + TRACE2("%p", setting); + param = setting->encoded; + if (param) { + TRACE2("%p", param); + if (param->type == NdisParameterString) + RtlFreeUnicodeString(¶m->data.string); + ExFreePool(param); + } + kfree(setting); + } + /* this frees driver */ + free_custom_extensions(drv_obj->drv_ext); + kfree(drv_obj->drv_ext); + TRACE1("drv_obj: %p", drv_obj); + + EXIT1(return); +} + +/* call the entry point of the driver */ +static int start_wrap_driver(struct wrap_driver *driver) +{ + int i; + NTSTATUS ret, res; + struct driver_object *drv_obj; + typeof(driver->pe_images[0].entry) entry; + + ENTER1("%s", driver->name); + drv_obj = driver->drv_obj; + for (ret = res = 0, i = 0; i < driver->num_pe_images; i++) + /* dlls are already started by loader */ + if (driver->pe_images[i].type == IMAGE_FILE_EXECUTABLE_IMAGE) { + entry = driver->pe_images[i].entry; + drv_obj->start = driver->pe_images[i].entry; + drv_obj->driver_size = driver->pe_images[i].size; + TRACE1("entry: %p, %p, drv_obj: %p", + entry, *entry, drv_obj); + res = LIN2WIN2(entry, drv_obj, &drv_obj->name); + ret |= res; + TRACE1("entry returns %08X", res); + break; + } + if (ret) { + ERROR("driver initialization failed: %08X", ret); + RtlFreeUnicodeString(&drv_obj->name); + /* this frees ndis_driver */ + free_custom_extensions(drv_obj->drv_ext); + kfree(drv_obj->drv_ext); + TRACE1("drv_obj: %p", drv_obj); + ObDereferenceObject(drv_obj); + EXIT1(return -EINVAL); + } + EXIT1(return 0); +} + +/* + * add driver to list of loaded driver but make sure this driver is + * not loaded before. called with loader_mutex down + */ +static int add_wrap_driver(struct wrap_driver *driver) +{ + struct wrap_driver *tmp; + + ENTER1("name: %s", driver->name); + nt_list_for_each_entry(tmp, &wrap_drivers, list) { + if (stricmp(tmp->name, driver->name) == 0) { + ERROR("cannot add duplicate driver"); + EXIT1(return -EBUSY); + } + } + InsertHeadList(&wrap_drivers, &driver->list); + EXIT1(return 0); +} + +/* load a driver from userspace and initialize it. called with + * loader_mutex down */ +static int load_user_space_driver(struct load_driver *load_driver) +{ + struct driver_object *drv_obj; + struct ansi_string ansi_reg; + struct wrap_driver *wrap_driver = NULL; + + ENTER1("%p", load_driver); + drv_obj = allocate_object(sizeof(*drv_obj), OBJECT_TYPE_DRIVER, NULL); + if (!drv_obj) { + ERROR("couldn't allocate memory"); + EXIT1(return -ENOMEM); + } + TRACE1("drv_obj: %p", drv_obj); + drv_obj->drv_ext = kzalloc(sizeof(*(drv_obj->drv_ext)), GFP_KERNEL); + if (!drv_obj->drv_ext) { + ERROR("couldn't allocate memory"); + ObDereferenceObject(drv_obj); + EXIT1(return -ENOMEM); + } + InitializeListHead(&drv_obj->drv_ext->custom_ext); + if (IoAllocateDriverObjectExtension(drv_obj, + (void *)WRAP_DRIVER_CLIENT_ID, + sizeof(*wrap_driver), + (void **)&wrap_driver) != + STATUS_SUCCESS) + EXIT1(return -ENOMEM); + TRACE1("driver: %p", wrap_driver); + memset(wrap_driver, 0, sizeof(*wrap_driver)); + InitializeListHead(&wrap_driver->list); + InitializeListHead(&wrap_driver->settings); + InitializeListHead(&wrap_driver->wrap_devices); + wrap_driver->drv_obj = drv_obj; + RtlInitAnsiString(&ansi_reg, "/tmp"); + if (RtlAnsiStringToUnicodeString(&drv_obj->name, &ansi_reg, TRUE) != + STATUS_SUCCESS) { + ERROR("couldn't initialize registry path"); + free_custom_extensions(drv_obj->drv_ext); + kfree(drv_obj->drv_ext); + TRACE1("drv_obj: %p", drv_obj); + ObDereferenceObject(drv_obj); + EXIT1(return -EINVAL); + } + strncpy(wrap_driver->name, load_driver->name, sizeof(wrap_driver->name)); + wrap_driver->name[sizeof(wrap_driver->name)-1] = 0; + if (load_sys_files(wrap_driver, load_driver) || + load_bin_files_info(wrap_driver, load_driver) || + load_settings(wrap_driver, load_driver) || + start_wrap_driver(wrap_driver) || + add_wrap_driver(wrap_driver)) { + unload_wrap_driver(wrap_driver); + EXIT1(return -EINVAL); + } else { + printk(KERN_INFO "%s: driver %s (%s) loaded\n", + DRIVER_NAME, wrap_driver->name, wrap_driver->version); + add_taint(TAINT_PROPRIETARY_MODULE); + EXIT1(return 0); + } +} + +static struct pci_device_id wrap_pci_id_table[] = { + {PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID}, +}; + +static struct pci_driver wrap_pci_driver = { + .name = DRIVER_NAME, + .id_table = wrap_pci_id_table, + .probe = wrap_pnp_start_pci_device, + .remove = __devexit_p(wrap_pnp_remove_pci_device), + .suspend = wrap_pnp_suspend_pci_device, + .resume = wrap_pnp_resume_pci_device, +}; + +#ifdef ENABLE_USB +static struct usb_device_id wrap_usb_id_table[] = { + { + .driver_info = 1 + }, +}; + +static struct usb_driver wrap_usb_driver = { + .name = DRIVER_NAME, + .id_table = wrap_usb_id_table, + .probe = wrap_pnp_start_usb_device, + .disconnect = __devexit_p(wrap_pnp_remove_usb_device), + .suspend = wrap_pnp_suspend_usb_device, + .resume = wrap_pnp_resume_usb_device, +}; +#endif + +/* register drivers for pci and usb */ +static void register_devices(void) +{ + int res; + + res = pci_register_driver(&wrap_pci_driver); + if (res < 0) { + ERROR("couldn't register pci driver: %d", res); + wrap_pci_driver.name = NULL; + } + +#ifdef ENABLE_USB + res = usb_register(&wrap_usb_driver); + if (res < 0) { + ERROR("couldn't register usb driver: %d", res); + wrap_usb_driver.name = NULL; + } +#endif + EXIT1(return); +} + +static void unregister_devices(void) +{ + struct nt_list *cur, *next; + + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + nt_list_for_each_safe(cur, next, &wrap_devices) { + struct wrap_device *wd; + wd = container_of(cur, struct wrap_device, list); + set_bit(HW_PRESENT, &wd->hw_status); + } + up(&loader_mutex); + + if (wrap_pci_driver.name) + pci_unregister_driver(&wrap_pci_driver); +#ifdef ENABLE_USB + if (wrap_usb_driver.name) + usb_deregister(&wrap_usb_driver); +#endif +} + +struct wrap_device *load_wrap_device(struct load_device *load_device) +{ + int ret; + struct nt_list *cur; + struct wrap_device *wd = NULL; + char vendor[5], device[5], subvendor[5], subdevice[5], bus[5]; + + ENTER1("%04x, %04x, %04x, %04x", load_device->vendor, + load_device->device, load_device->subvendor, + load_device->subdevice); + if (sprintf(vendor, "%04x", load_device->vendor) == 4 && + sprintf(device, "%04x", load_device->device) == 4 && + sprintf(subvendor, "%04x", load_device->subvendor) == 4 && + sprintf(subdevice, "%04x", load_device->subdevice) == 4 && + sprintf(bus, "%04x", load_device->bus) == 4) { + char *argv[] = {"loadndisdriver", WRAP_CMD_LOAD_DEVICE, +#if defined(DEBUG) && DEBUG >= 1 + "1", +#else + "0", +#endif + UTILS_VERSION, vendor, device, + subvendor, subdevice, bus, NULL}; + char *env[] = {NULL}; + TRACE2("%s, %s, %s, %s, %s", vendor, device, + subvendor, subdevice, bus); + if (down_interruptible(&loader_mutex)) { + WARNING("couldn't obtain loader_mutex"); + EXIT1(return NULL); + } + INIT_COMPLETION(loader_complete); + ret = call_usermodehelper("/sbin/loadndisdriver", argv, env, 1); + if (ret) { + up(&loader_mutex); + TRACE1("couldn't load device %04x:%04x; check system " + "log for messages from 'loadndisdriver'", + load_device->vendor, load_device->device); + EXIT1(return NULL); + } + wait_for_completion(&loader_complete); + wd = NULL; + nt_list_for_each(cur, &wrap_devices) { + wd = container_of(cur, struct wrap_device, list); + TRACE2("%p, %04x, %04x, %04x, %04x", wd, wd->vendor, + wd->device, wd->subvendor, wd->subdevice); + if (wd->vendor == load_device->vendor && + wd->device == load_device->device) + break; + else + wd = NULL; + } + up(&loader_mutex); + } else + wd = NULL; + EXIT1(return wd); +} + +struct wrap_device *get_wrap_device(void *dev, int bus) +{ + struct nt_list *cur; + struct wrap_device *wd; + + if (down_interruptible(&loader_mutex)) { + WARNING("couldn't obtain loader_mutex"); + return NULL; + } + wd = NULL; + nt_list_for_each(cur, &wrap_devices) { + wd = container_of(cur, struct wrap_device, list); + if (bus == WRAP_PCI_BUS && + wrap_is_pci_bus(wd->dev_bus) && wd->pci.pdev == dev) + break; + else if (bus == WRAP_USB_BUS && + wrap_is_usb_bus(wd->dev_bus) && wd->usb.udev == dev) + break; + else + wd = NULL; + } + up(&loader_mutex); + return wd; +} + +/* called with loader_mutex is down */ +static int wrapper_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct load_driver *load_driver; + struct load_device load_device; + struct load_driver_file load_bin_file; + int ret; + void __user *addr = (void __user *)arg; + + ENTER1("cmd: %u", cmd); + + ret = 0; + switch (cmd) { + case WRAP_IOCTL_LOAD_DEVICE: + if (copy_from_user(&load_device, addr, sizeof(load_device))) { + ret = -EFAULT; + break; + } + TRACE2("%04x, %04x, %04x, %04x", load_device.vendor, + load_device.device, load_device.subvendor, + load_device.subdevice); + if (load_device.vendor) { + struct wrap_device *wd; + wd = kzalloc(sizeof(*wd), GFP_KERNEL); + if (!wd) { + ret = -ENOMEM; + break; + } + InitializeListHead(&wd->settings); + wd->dev_bus = WRAP_BUS(load_device.bus); + wd->vendor = load_device.vendor; + wd->device = load_device.device; + wd->subvendor = load_device.subvendor; + wd->subdevice = load_device.subdevice; + strncpy(wd->conf_file_name, load_device.conf_file_name, + sizeof(wd->conf_file_name)); + wd->conf_file_name[sizeof(wd->conf_file_name)-1] = 0; + strncpy(wd->driver_name, load_device.driver_name, + sizeof(wd->driver_name)); + wd->driver_name[sizeof(wd->driver_name)-1] = 0; + InsertHeadList(&wrap_devices, &wd->list); + ret = 0; + } else + ret = -EINVAL; + break; + case WRAP_IOCTL_LOAD_DRIVER: + TRACE1("loading driver at %p", addr); + load_driver = vmalloc(sizeof(*load_driver)); + if (!load_driver) { + ret = -ENOMEM; + break; + } + if (copy_from_user(load_driver, addr, sizeof(*load_driver))) + ret = -EFAULT; + else + ret = load_user_space_driver(load_driver); + vfree(load_driver); + break; + case WRAP_IOCTL_LOAD_BIN_FILE: + if (copy_from_user(&load_bin_file, addr, sizeof(load_bin_file))) + ret = -EFAULT; + else + ret = add_bin_file(&load_bin_file); + break; + default: + ERROR("unknown ioctl %u", cmd); + ret = -EINVAL; + break; + } + complete(&loader_complete); + EXIT1(return ret); +} + +static int wrapper_ioctl_release(struct inode *inode, struct file *file) +{ + ENTER1(""); + return 0; +} + +static struct file_operations wrapper_fops = { + .owner = THIS_MODULE, + .ioctl = wrapper_ioctl, + .release = wrapper_ioctl_release, +}; + +static struct miscdevice wrapper_misc = { + .name = DRIVER_NAME, + .minor = MISC_DYNAMIC_MINOR, + .fops = &wrapper_fops +}; + +int loader_init(void) +{ + int err; + + InitializeListHead(&wrap_drivers); + InitializeListHead(&wrap_devices); + init_MUTEX(&loader_mutex); + init_completion(&loader_complete); + if ((err = misc_register(&wrapper_misc)) < 0 ) { + ERROR("couldn't register module (%d)", err); + unregister_devices(); + EXIT1(return err); + } + register_devices(); + EXIT1(return 0); +} + +void loader_exit(void) +{ + struct nt_list *cur, *next; + + ENTER1(""); + misc_deregister(&wrapper_misc); + unregister_devices(); + if (down_interruptible(&loader_mutex)) + WARNING("couldn't obtain loader_mutex"); + nt_list_for_each_safe(cur, next, &wrap_drivers) { + struct wrap_driver *driver; + driver = container_of(cur, struct wrap_driver, list); + unload_wrap_driver(driver); + } + up(&loader_mutex); + EXIT1(return); +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_rfkill.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_rfkill.c @@ -0,0 +1,221 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + ******************************************************************************/ +#include "rtl_core.h" +#include "rtl_dm.h" +#include "rtl_rfkill.h" + +#ifdef CONFIG_RTL_RFKILL +static void rtl8192_before_radio_check(struct net_device *dev, + bool *rf_state, + bool *turnonbypowerdomain) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + *rf_state = (priv->rtllib->eRFPowerState != eRfOn); +#ifdef CONFIG_ASPM_OR_D3 + if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM)) + { + RT_DISABLE_ASPM(dev); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } + else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3)) + { +#ifdef TODO + RT_LEAVE_D3(dev, false); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); +#endif + } +#endif + if (RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) { + Power_DomainInit92SE(dev); + *turnonbypowerdomain = true; + } + +} + +static bool rtl8192_radio_on_off_checking(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 u1Tmp = 0; + u8 gpio; + + if (priv->pwrdown) { + u1Tmp = read_nic_byte(dev, 0x06); + gpio = u1Tmp & BIT6; + } else +#ifdef CONFIG_BT_COEXIST + if (pHalData->bt_coexist.BluetoothCoexist) { + if (pHalData->bt_coexist.BT_CoexistType == BT_2Wire) { + PlatformEFIOWrite1Byte(pAdapter, MAC_PINMUX_CFG, 0xa); + u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IO_SEL); + delay_us(100); + u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IN); + RTPRINT(FPWR, PWRHW, ("GPIO_IN=%02x\n", u1Tmp)); + retval = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff; + } else if ((pHalData->bt_coexist.BT_CoexistType == BT_ISSC_3Wire) || + (pHalData->bt_coexist.BT_CoexistType == BT_Accel) || + (pHalData->bt_coexist.BT_CoexistType == BT_CSR)) { + u4tmp = PHY_QueryBBReg(pAdapter, 0x87c, bMaskDWord); + if ((u4tmp & BIT17) != 0) { + PHY_SetBBReg(pAdapter, 0x87c, bMaskDWord, u4tmp & ~BIT17); + delay_us(50); + RTPRINT(FBT, BT_RFPoll, ("BT write 0x87c (~BIT17) = 0x%x\n", u4tmp &~BIT17)); + } + u4tmp = PHY_QueryBBReg(pAdapter, 0x8e0, bMaskDWord); + RTPRINT(FBT, BT_RFPoll, ("BT read 0x8e0 (BIT24)= 0x%x\n", u4tmp)); + retval = (u4tmp & BIT24) ? eRfOn : eRfOff; + RTPRINT(FBT, BT_RFPoll, ("BT check RF state to %s\n", (retval==eRfOn)? "ON":"OFF")); + } + } else +#endif + { + write_nic_byte(dev, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO)); + u1Tmp = read_nic_byte(dev, GPIO_IO_SEL); + + u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK; + write_nic_byte(dev, GPIO_IO_SEL, u1Tmp); + + mdelay(10); + + u1Tmp = read_nic_byte(dev, GPIO_IN); + gpio = u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT; + } +#ifdef DEBUG_RFKILL + { + static u8 gpio_test; + printk("%s: gpio = %x\n", __FUNCTION__, gpio); + if(gpio_test % 5 == 0) { + gpio = 0; + } else { + gpio = 1; + } + printk("%s: gpio_test = %d, gpio = %x\n", __FUNCTION__, gpio_test++ % 20, gpio); + } +#endif + + return gpio; +} + +static void rtl8192_after_radio_check(struct net_device *dev, bool rf_state, bool turnonbypowerdomain) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + if (turnonbypowerdomain) { + PHY_SetRtl8192seRfHalt(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + } +#ifdef CONFIG_ASPM_OR_D3 + if (!rf_state) { + if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) { + RT_ENABLE_ASPM(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } +#ifdef TODO + else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) { + RT_ENTER_D3(dev, false); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); + } +#endif + } +#endif + return; +} + +static bool rtl8192_is_radio_enabled(struct net_device *dev, bool *radio_enabled) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + bool rf_state = false; + bool turnonbypowerdomain = false; + bool valid; + + rtl8192_before_radio_check(dev, &rf_state, &turnonbypowerdomain); + *radio_enabled = rtl8192_radio_on_off_checking(dev); + rtl8192_after_radio_check(dev, rf_state, turnonbypowerdomain); + if (priv->bResetInProgress) { + priv->RFChangeInProgress = false; + valid = false; + } else { + valid = true; + } + + return valid; +} + +bool rtl8192_rfkill_init(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct wireless_dev *wdev = &priv->rtllib->wdev; + bool radio_enabled; + bool valid = rtl8192_is_radio_enabled(dev, &radio_enabled); + + if (valid) { + priv->rfkill_off = radio_enabled; + printk(KERN_INFO "rtl8192: wireless switch is %s\n", + priv->rfkill_off ? "on" : "off"); + wiphy_rfkill_set_hw_state(wdev->wiphy, !priv->rfkill_off); + wiphy_rfkill_start_polling(wdev->wiphy); + return true; + } else { + return false; + } +} + +void rtl8192_rfkill_poll(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct wireless_dev *wdev = &priv->rtllib->wdev; + bool radio_enabled; + bool valid; + + if (priv->being_init_adapter) { + return; + } + + if (priv->ResetProgress == RESET_TYPE_SILENT) { + RT_TRACE((COMP_INIT | COMP_POWER | COMP_RF), + "%s(): silent Reseting, ignore rf polling!\n", __FUNCTION__); + return; + } + + valid = rtl8192_is_radio_enabled(dev, &radio_enabled); + if (valid) { + if (unlikely(radio_enabled != priv->rfkill_off)) { + priv->rfkill_off = radio_enabled; + printk(KERN_INFO "rtl8192: wireless radio switch turned %s\n", + radio_enabled ? "on" : "off"); + wiphy_rfkill_set_hw_state(wdev->wiphy, !radio_enabled); + } + } +} + +void rtl8192_rfkill_exit(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct wireless_dev *wdev = &priv->rtllib->wdev; + + wiphy_rfkill_stop_polling(wdev->wiphy); +} + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_mesh.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_mesh.c @@ -0,0 +1,371 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifdef _RTL8192_EXT_PATCH_ + +#include +#include + +#include "rtl_wx.h" +#include "rtl_core.h" +#include "rtl_dm.h" +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_rtl6052.h" +#include "rtl8192s/r8192S_Efuse.h" +#include "../../mshclass/msh_class.h" + +int meshdev_up(struct net_device *meshdev,bool is_silent_reset) +{ + struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(mpriv->priv->rtllib->PowerSaveControl)); + bool init_status; + struct net_device *dev = ieee->dev; + RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__); + + mpriv->priv->up_first_time = 0; + mpriv->rtllib->iw_mode = IW_MODE_MESH; + if(mpriv->priv->mesh_up){ + RT_TRACE(COMP_INIT,"%s():mesh is up,return\n",__FUNCTION__); + return -1; + } +#ifdef RTL8192SE + mpriv->priv->ReceiveConfig = + RCR_APPFCS | RCR_APWRMGT | /*RCR_ADD3 |*/ + RCR_AMF | RCR_ADF | RCR_APP_MIC | RCR_APP_ICV | + RCR_AICV | RCR_ACRC32 | + RCR_AB | RCR_AM | + RCR_APM | + /*RCR_AAP |*/ + RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF | + (mpriv->priv->EarlyRxThreshold<priv->ReceiveConfig = RCR_ADD3 | + RCR_AMF | RCR_ADF | + RCR_AICV | + RCR_AB | RCR_AM | RCR_APM | + RCR_AAP | ((u32)7<priv->up) { + RT_TRACE(COMP_INIT, "Bringing up iface"); + mpriv->priv->bfirst_init = true; + init_status = mpriv->priv->ops->initialize_adapter(dev); + if(init_status != true) { + RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__); + return -1; + } + RT_TRACE(COMP_INIT, "start adapter finished\n"); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + printk("==>%s():priv->up is 0\n",__FUNCTION__); + mpriv->rtllib->ieee_up=1; + mpriv->priv->bfirst_init = false; +#ifdef ENABLE_GPIO_RADIO_CTL + if(mpriv->priv->polling_timer_on == 0){ + check_rfctrl_gpio_timer((unsigned long)dev); + } +#endif + if(!is_silent_reset){ + mpriv->rtllib->current_network.channel = INIT_DEFAULT_CHAN; + mpriv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN; + if(mpriv->priv->mshobj->ext_patch_r819x_wx_set_mesh_chan) + mpriv->priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,INIT_DEFAULT_CHAN); + if(mpriv->priv->mshobj->ext_patch_r819x_wx_set_channel) + { + mpriv->priv->mshobj->ext_patch_r819x_wx_set_channel(mpriv->rtllib, INIT_DEFAULT_CHAN); + } + printk("%s():set chan %d\n",__FUNCTION__,INIT_DEFAULT_CHAN); + mpriv->rtllib->set_chan(dev, INIT_DEFAULT_CHAN); + } + dm_InitRateAdaptiveMask(dev); + watch_dog_timer_callback((unsigned long) dev); + + } else { + rtllib_stop_scan(ieee); + msleep(1000); + } + if(!ieee->mesh_started) { +#ifdef RTL8192E + if(ieee->eRFPowerState!=eRfOn) + MgntActSet_RF_State(dev, eRfOn, ieee->RfOffReason); +#endif + if(mpriv->priv->mshobj && mpriv->priv->mshobj->ext_patch_rtl819x_up ) + mpriv->priv->mshobj->ext_patch_rtl819x_up(mpriv->priv->mshobj); + + + if(!netif_queue_stopped(meshdev)) + netif_start_queue(meshdev); + else + netif_wake_queue(meshdev); + + rtllib_reset_queue(ieee); + } + + mpriv->priv->mesh_up = 1; + + RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__); + return 0; +} + +int meshdev_down(struct net_device *meshdev) +{ + struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct r8192_priv *priv = (void*)ieee->priv; + struct net_device *dev = ieee->dev; + unsigned long flags = 0; + u8 RFInProgressTimeOut = 0; + if(priv->mesh_up == 0) { + RT_TRACE(COMP_ERR,"%s():ERR!!! mesh is already down\n",__FUNCTION__) + return -1; + } + + RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__); + + if (netif_running(meshdev)) { + netif_stop_queue(meshdev); + } + + if(!priv->up) + { + priv->bDriverIsGoingToUnload = true; + ieee->ieee_up = 0; + rtl8192_irq_disable(dev); + rtl8192_cancel_deferred_work(priv); +#ifndef RTL8190P + cancel_delayed_work(&priv->rtllib->hw_wakeup_wq); +#endif + deinit_hal_dm(dev); + del_timer_sync(&priv->watch_dog_timer); + rtllib_softmac_stop_protocol(ieee, 1, true); + + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + while(priv->RFChangeInProgress) + { + SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock); + if(RFInProgressTimeOut > 100) + { + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + break; + } + printk("===>%s():RF is in progress, need to wait until rf chang is done.\n",__FUNCTION__); + mdelay(1); + RFInProgressTimeOut ++; + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + } + priv->RFChangeInProgress = true; + SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock); + priv->ops->stop_adapter(dev, false); + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + priv->RFChangeInProgress = false; + SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock); + udelay(100); + memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list)); + priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN; +#ifdef CONFIG_ASPM_OR_D3 + RT_ENABLE_ASPM(dev); +#endif + memset(&ieee->current_mesh_network, 0 , offsetof(struct rtllib_network, list)); + priv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN; + ieee->mesh_state = RTLLIB_NOLINK; + } else { + rtllib_softmac_stop_protocol(ieee, 1, true); + memset(&ieee->current_mesh_network, 0 , offsetof(struct rtllib_network, list)); + if((ieee->current_network.channel > 0) && (ieee->current_network.channel < 15)) + priv->rtllib->current_mesh_network.channel = ieee->current_network.channel; + else + priv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN; + + ieee->mesh_state = RTLLIB_NOLINK; + ieee->iw_mode = IW_MODE_INFRA; + } + priv->mesh_up = 0; + RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__); + + return 0; +} + +static int meshdev_open(struct net_device *meshdev) +{ + struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct r8192_priv *priv = (void*)ieee->priv; + int ret; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = meshdev_up(meshdev,false); + SEM_UP_PRIV_WX(&priv->wx_sem); + + return ret; +} + +static int meshdev_close(struct net_device *meshdev) +{ + struct meshdev_priv * mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct r8192_priv *priv = (void *)ieee->priv; + int ret; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = meshdev_down(meshdev); + SEM_UP_PRIV_WX(&priv->wx_sem); + + return ret; +} + +extern int meshdev_wx_mesh(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +static int meshdev_ioctl(struct net_device *meshdev, struct ifreq *rq, int cmd) +{ + struct iwreq *wrq = (struct iwreq *)rq; + int ret = -1; + if(cmd == 0x8BEE) + { + ret = meshdev_wx_mesh(meshdev, NULL, &(wrq->u), wrq->u.data.pointer); + } + return ret; +} + +struct net_device_stats *meshdev_stats(struct net_device *meshdev) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + return &((struct meshdev_priv*)netdev_priv(meshdev))->stats; +#else + return &((struct meshdev_priv*)meshdev->priv)->stats; +#endif +} + +static int meshdev_tx(struct sk_buff *skb, struct net_device *meshdev) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device * ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + memset(skb->cb,0,sizeof(skb->cb)); + + return rtllib_mesh_xmit(skb, dev); +} + +static void meshdev_tx_timeout(struct net_device *meshdev) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device * ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + rtl8192_tx_timeout(dev); +} + +#ifdef HAVE_NET_DEVICE_OPS +static const struct net_device_ops mesh_netdev_ops = { + .ndo_open = meshdev_open, + .ndo_stop = meshdev_close, + .ndo_get_stats = meshdev_stats, + .ndo_tx_timeout = meshdev_tx_timeout, + .ndo_do_ioctl = meshdev_ioctl, + .ndo_start_xmit = meshdev_tx, +}; +#endif + +void meshdev_init(struct net_device* meshdev) +{ + struct meshdev_priv *mpriv; + ether_setup(meshdev); + +#ifdef HAVE_NET_DEVICE_OPS + meshdev->netdev_ops = &mesh_netdev_ops; +#else + meshdev->open = meshdev_open; + meshdev->stop = meshdev_close; + meshdev->tx_timeout = meshdev_tx_timeout; + meshdev->do_ioctl = meshdev_ioctl; + meshdev->get_stats = meshdev_stats; + meshdev->hard_start_xmit = meshdev_tx; +#endif + meshdev->wireless_handlers = &meshdev_wx_handlers_def; + meshdev->destructor = free_netdev; + meshdev->watchdog_timeo = HZ*3; + meshdev->type = ARPHRD_ETHER; + memset(meshdev->broadcast,0xFF, ETH_ALEN); + + meshdev->watchdog_timeo = 3 * HZ; + + mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + memset(mpriv, 0, sizeof(struct meshdev_priv)); + + return; +} + +int meshdev_update_ext_chnl_offset_as_client(void *data) +{ + struct rtllib_device *ieee = container_of_work_rsl(data, struct rtllib_device, + ext_update_extchnloffset_wq); + struct r8192_priv *priv = (void *)ieee->priv; + struct net_device *dev = ieee->dev; + struct mshclass *mshobj= priv->mshobj; + u8 updateBW = 0; + u8 bserverHT = 0; + + updateBW=mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT); + printk("$$$$$$%s(): Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", + __FUNCTION__,ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT); + if (updateBW == 1) { + if (bserverHT == 0) { + printk("===>server is not HT supported,set 20M\n"); + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } else { + printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n", + ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset); + if (ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset); + } + } else { + printk("===>there is no same hostname server, ERR!!!\n"); + return -1; + } + return 0; +} + +int meshdev_start_mesh_protocol_wq(void *data) +{ + struct rtllib_device *ieee = container_of_work_rsl(data, struct rtllib_device, + ext_start_mesh_protocol_wq); + + ieee->set_chan(ieee->dev, ieee->current_mesh_network.channel); + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + + rtllib_start_mesh_protocol(ieee); + + return 0; +} +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_mesh.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_mesh.h @@ -0,0 +1,40 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifdef _RTL8192_EXT_PATCH_ +#ifndef _RTL_MESH_H +#define _RTL_MESH_H + +struct net_device; +struct net_device_stats; + +int meshdev_up(struct net_device *meshdev,bool is_silent_reset); +int meshdev_down(struct net_device *meshdev); +struct net_device_stats *meshdev_stats(struct net_device *meshdev); +void meshdev_init(struct net_device* meshdev); + +int meshdev_update_ext_chnl_offset_as_client(void *data); +int meshdev_start_mesh_protocol_wq(void *data); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_eeprom.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_eeprom.h @@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + + +#define EPROM_DELAY 10 +#if 0 +#define EPROM_ANAPARAM_ADDRLWORD 0xd +#define EPROM_ANAPARAM_ADDRHWORD 0xe + +#define EPROM_RFCHIPID 0x6 +#define EPROM_TXPW_BASE 0x05 +#define EPROM_RFCHIPID_RTL8225U 5 +#define EPROM_RF_PARAM 0x4 +#define EPROM_CONFIG2 0xc + +#define EPROM_VERSION 0x1E +#define MAC_ADR 0x7 + +#define CIS 0x18 + +#define EPROM_TXPW0 0x16 +#define EPROM_TXPW2 0x1b +#define EPROM_TXPW1 0x3d +#endif + +u32 eprom_read(struct net_device *dev,u32 addr); --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_eeprom.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_eeprom.c @@ -0,0 +1,140 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "rtl_core.h" +#include "rtl_eeprom.h" + +void eprom_cs(struct net_device *dev, short bit) +{ + if(bit) + write_nic_byte(dev, EPROM_CMD, + (1<epromtype==EEPROM_93C56){ + addr_str[7]=addr & 1; + addr_str[6]=addr & (1<<1); + addr_str[5]=addr & (1<<2); + addr_str[4]=addr & (1<<3); + addr_str[3]=addr & (1<<4); + addr_str[2]=addr & (1<<5); + addr_str[1]=addr & (1<<6); + addr_str[0]=addr & (1<<7); + addr_len=8; + }else{ + addr_str[5]=addr & 1; + addr_str[4]=addr & (1<<1); + addr_str[3]=addr & (1<<2); + addr_str[2]=addr & (1<<3); + addr_str[1]=addr & (1<<4); + addr_str[0]=addr & (1<<5); + addr_len=6; + } + eprom_cs(dev, 1); + eprom_ck_cycle(dev); + eprom_send_bits_string(dev, read_cmd, 3); + eprom_send_bits_string(dev, addr_str, addr_len); + + eprom_w(dev, 0); + + for(i=0;i<16;i++){ + eprom_ck_cycle(dev); + ret |= (eprom_r(dev)<<(15-i)); + } + + eprom_cs(dev, 0); + eprom_ck_cycle(dev); + + write_nic_byte(dev, EPROM_CMD, + (EPROM_CMD_NORMAL<, et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _RTL_DEBUG_H +#define _RTL_DEBUG_H +#include +#include +#include +#if(LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)) +#include +#endif + +struct r8192_priv; +struct _tx_desc_8192se; +struct _TX_DESC_8192CE; +struct net_device; + +typedef struct _rtl_fs_debug +{ + const char *name; + struct dentry *dir_drv; + struct dentry *debug_register; + u32 hw_type; + u32 hw_offset; +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20)) + bool hw_holding; +#else + u8 hw_holding; +#endif +} rtl_fs_debug; + +void print_buffer(u32 *buffer, int len); +void dump_eprom(struct net_device *dev); +void rtl8192_dump_reg(struct net_device *dev); + +#ifdef RTL8192SE +void rtl8192se_dump_tx_desc(struct _tx_desc_8192se *pDesc); +#endif +#ifdef RTL8192CE +void rtl8192ce_dump_tx_desc(struct _TX_DESC_8192CE *pDesc); +#endif + +/* debugfs stuff */ +#ifdef CONFIG_RTLWIFI_DEBUGFS +int rtl_debug_module_init(struct r8192_priv *priv, const char *name); +void rtl_debug_module_remove(struct r8192_priv *priv); +int rtl_create_debugfs_root(void); +void rtl_remove_debugfs_root(void); +#else +static inline int rtl_debug_module_init(struct r8192_priv *priv, const char *name) { + return 0; +} +static inline void rtl_debug_module_remove(struct r8192_priv *priv) { + +} +static inline int rtl_create_debugfs_root(void) { + return 0; +} +static inline void rtl_remove_debugfs_root(void) { +} +#endif + +/* proc stuff */ +void rtl8192_proc_init_one(struct net_device *dev); +void rtl8192_proc_remove_one(struct net_device *dev); +void rtl8192_proc_module_init(void); +void rtl8192_proc_module_remove(void); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_ethtool.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_ethtool.c @@ -0,0 +1,59 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + ***************************************************************************** + */ +#include +#include +#include + +#include "rtl_core.h" + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) +static void rtl819x_ethtool_get_drvinfo(struct net_device *dev, + struct ethtool_drvinfo *info) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + strcpy(info->driver, DRV_NAME); + strcpy(info->version, DRV_VERSION); +#if defined RTL8192SE + snprintf(info->fw_version, sizeof(info->fw_version), "%d", + priv->pFirmware->FirmwareVersion); +#endif + strcpy(info->bus_info, pci_name(priv->pdev)); +} + +static u32 rtl819x_ethtool_get_link(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + return ((priv->rtllib->state == RTLLIB_LINKED) || + (priv->rtllib->state == RTLLIB_LINKED_SCANNING)); +} + +const struct ethtool_ops rtl819x_ethtool_ops = { + .get_drvinfo = rtl819x_ethtool_get_drvinfo, + .get_link = rtl819x_ethtool_get_link, +}; +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_cam.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_cam.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _RTL_CAM_H +#define _RTL_CAM_H + +#include +struct net_device; + +void CamResetAllEntry(struct net_device* dev); +void EnableHWSecurityConfig8192(struct net_device *dev); +void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, u8 *MacAddr, u8 DefaultKey, u32 *KeyContent ); +void set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, u8 *MacAddr, u8 DefaultKey, u32 *KeyContent, u8 is_mesh); +void CamPrintDbgReg(struct net_device* dev); + +#ifdef _RTL8192_EXT_PATCH_ +void CamDeleteOneEntry(struct net_device *dev, u8 EntryNo); +void CamRestoreEachIFEntry(struct net_device* dev,u8 is_mesh); +#endif + +u32 read_cam(struct net_device *dev, u8 addr); +void write_cam(struct net_device *dev, u8 addr, u32 data); + +void CamRestoreAllEntry(struct net_device *dev); +#ifdef _RTL8192_EXT_PATCH_ +void reset_IFswcam(struct net_device *dev, u8 is_mesh); +void CamRestoreEachIFEntry(struct net_device* dev,u8 is_mesh); +int rtl8192_set_key_for_AP(struct rtllib_device *ieee); +#endif + +void CAM_read_entry(struct net_device *dev, u32 iIndex); + +#ifdef _RTL8192_EXT_PATCH_ +u8 rtl8192_get_free_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr); +void rtl8192_del_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr); +int meshdev_set_key_for_peer(struct net_device *dev, u8 *Addr, u8 KeyIndex, u16 KeyType, u32 *KeyContent); +#endif + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_dm.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_dm.c @@ -0,0 +1,5294 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifdef RTL8192SE +#include "rtl_core.h" +#include "rtl_dm.h" +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#else +#include "rtl_core.h" +#include "rtl_dm.h" +#include "rtl8192e/r8192E_hw.h" +#include "rtl8192e/r8192E_phy.h" +#include "rtl8192e/r8192E_phyreg.h" +#include "rtl8192e/r8190P_rtl8256.h" +#endif +#ifdef _RTL8192_EXT_PATCH_ +#include "../../mshclass/msh_class.h" +#endif + +/*---------------------------Define Local Constant---------------------------*/ +#ifdef RTL8190P +static u32 edca_setting_DL[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0x5e4322, + 0x5ea44f, + 0x5e4322, + 0x604322, + 0xa44f, + 0x5e4322, + 0x5e4322 + }; + +static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0x5e4322, + 0x5e4322, + 0x5e4322, + 0x604322, + 0xa44f, + 0x5e4322, + 0x5e4322 +}; + +static u32 edca_setting_UL[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0xa44f, + 0x5ea44f, + 0x5e4322, + 0x604322, + 0x5e4322, + 0x5e4322, + 0x5e4322 +}; + +#elif defined RTL8192E +static u32 edca_setting_DL[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0x5e4322, + 0x5ea44f, + 0x5e4322, + 0x604322, + 0xa44f, + 0x5e4322, + 0x5e4332 + }; + +static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0x5e4322, + 0x5e4322, + 0x5e4322, + 0x604322, + 0xa44f, + 0x5e4322, + 0x5e4322 +}; + +static u32 edca_setting_UL[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0xa44f, + 0x5ea44f, + 0x5e4322, + 0x604322, + 0x5e4322, + 0x5e4322, + 0x5e4332 +}; + +#elif defined(RTL8192SE) +static u32 edca_setting_DL[HT_IOT_PEER_MAX] = +{ 0xa44f, + 0x5ea44f, + 0x5ea44f, + 0xa630, + 0xa44f, + 0xa630, + 0xa630, + 0xa42b, + 0x5e4322, + 0x5e4322 + }; + +static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = + +{ 0x4322, + 0xa44f, + 0x5ea44f, + 0xa42b, + 0x5e4322, + 0x4322, + 0xa430, + 0x5ea44f, + 0x5e4322, + 0x5e4322 +}; + +static u32 edca_setting_UL[HT_IOT_PEER_MAX] = +{ 0x5e4322, + 0xa44f, + 0x5ea44f, + 0x5ea322, + 0x5ea422, + 0x5ea322, + 0x3ea44f, + 0x5ea44f, + 0x5e4322, + 0x5e4322 + }; +#endif + +#define RTK_UL_EDCA 0xa44f +#define RTK_DL_EDCA 0x5e4322 +/*---------------------------Define Local Constant---------------------------*/ + + +/*------------------------Define global variable-----------------------------*/ +dig_t dm_digtable; +u8 dm_shadow[16][256] = {{0}}; +DRxPathSel DM_RxPathSelTable; +/*------------------------Define global variable-----------------------------*/ + + +/*------------------------Define local variable------------------------------*/ +/*------------------------Define local variable------------------------------*/ + + +/*--------------------Define export function prototype-----------------------*/ +extern void init_hal_dm(struct net_device *dev); +extern void deinit_hal_dm(struct net_device *dev); + +extern void hal_dm_watchdog(struct net_device *dev); + + +extern void init_rate_adaptive(struct net_device *dev); +extern void dm_txpower_trackingcallback(void *data); + +extern void dm_restore_dynamic_mechanism_state(struct net_device *dev); +extern void dm_backup_dynamic_mechanism_state(struct net_device *dev); +extern void dm_change_dynamic_initgain_thresh(struct net_device *dev, + u32 dm_type, + u32 dm_value); +extern void DM_ChangeFsyncSetting(struct net_device *dev, + s32 DM_Type, + s32 DM_Value); +extern void dm_force_tx_fw_info(struct net_device *dev, + u32 force_type, + u32 force_value); +extern void dm_init_edca_turbo(struct net_device *dev); +extern void dm_rf_operation_test_callback(unsigned long data); +extern void dm_rf_pathcheck_workitemcallback(void *data); +extern void dm_fsync_timer_callback(unsigned long data); +#if 0 +extern bool dm_check_lbus_status(struct net_device *dev); +#endif +extern void dm_check_fsync(struct net_device *dev); +extern void dm_shadow_init(struct net_device *dev); +extern void dm_initialize_txpower_tracking(struct net_device *dev); + +#if (defined RTL8192E || defined RTL8192SE) +extern void dm_CheckRfCtrlGPIO(void *data); +#endif + +#ifdef RTL8192SE +extern void DM_TXPowerTracking92SDirectCall(struct net_device *dev); +static void dm_CtrlInitGainByTwoPort(struct net_device *dev); +static void dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm(struct net_device *dev); +static void dm_initial_gain_STABeforeConnect(struct net_device *dev); + +void dm_InitRateAdaptiveMask(struct net_device *dev); +#if 0 +static void Adhoc_dm_CheckRateAdaptive(struct net_device * dev); +#endif +void Adhoc_InitRateAdaptive(struct net_device *dev,struct sta_info *pEntry); +#endif + +/*--------------------Define export function prototype-----------------------*/ + + +/*---------------------Define local function prototype-----------------------*/ +static void dm_check_rate_adaptive(struct net_device *dev); + +static void dm_init_bandwidth_autoswitch(struct net_device *dev); +static void dm_bandwidth_autoswitch( struct net_device *dev); + + +static void dm_check_txpower_tracking(struct net_device *dev); + + + + + +#if defined(RTL8192E)||defined(RTL8190P) +static void dm_bb_initialgain_restore(struct net_device *dev); + + +static void dm_bb_initialgain_backup(struct net_device *dev); +#endif + +static void dm_dig_init(struct net_device *dev); +static void dm_ctrl_initgain_byrssi(struct net_device *dev); +static void dm_ctrl_initgain_byrssi_highpwr(struct net_device *dev); +static void dm_ctrl_initgain_byrssi_by_driverrssi( struct net_device *dev); +static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm(struct net_device *dev); +static void dm_initial_gain(struct net_device *dev); +static void dm_pd_th(struct net_device *dev); +static void dm_cs_ratio(struct net_device *dev); + +static void dm_init_ctstoself(struct net_device *dev); +static void dm_Init_WA_Broadcom_IOT(struct net_device *dev); +#ifdef RTL8192SE +static void dm_WA_Broadcom_IOT(struct net_device *dev); +#endif + +static void dm_check_edca_turbo(struct net_device *dev); + +#if 0 +static void dm_check_rfctrl_gpio(struct net_device *dev); +#endif + +#ifndef RTL8190P +#endif +static void dm_check_pbc_gpio(struct net_device *dev); + + +static void dm_check_rx_path_selection(struct net_device *dev); +static void dm_init_rxpath_selection(struct net_device *dev); +static void dm_rxpath_sel_byrssi(struct net_device *dev); + + +static void dm_init_fsync(struct net_device *dev); +static void dm_deInit_fsync(struct net_device *dev); + +static void dm_check_txrateandretrycount(struct net_device *dev); +static void dm_check_ac_dc_power(struct net_device *dev); + +/*---------------------Define local function prototype-----------------------*/ + +static void dm_init_dynamic_txpower(struct net_device *dev); +static void dm_dynamic_txpower(struct net_device *dev); + + +static void dm_send_rssi_tofw(struct net_device *dev); +static void dm_ctstoself(struct net_device *dev); +#if defined RTL8192SE +static void dm_RefreshRateAdaptiveMask(struct net_device *dev); +#endif +/*---------------------------Define function prototype------------------------*/ + +extern void +init_hal_dm(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + priv->DM_Type = DM_Type_ByDriver; + + priv->undecorated_smoothed_pwdb = -1; + + dm_init_dynamic_txpower(dev); + +#ifdef RTL8192SE + if (IS_HARDWARE_TYPE_8192SE(dev)) + dm_InitRateAdaptiveMask(dev); + else +#endif + init_rate_adaptive(dev); + + dm_dig_init(dev); + dm_init_edca_turbo(dev); + dm_init_bandwidth_autoswitch(dev); + dm_init_fsync(dev); + dm_init_rxpath_selection(dev); + dm_init_ctstoself(dev); + if (IS_HARDWARE_TYPE_8192SE(dev)) + dm_Init_WA_Broadcom_IOT(dev); + +#if (defined RTL8192E || defined RTL8192SE) + INIT_DELAYED_WORK_RSL(&priv->gpio_change_rf_wq, (void *)dm_CheckRfCtrlGPIO,dev); +#endif + +} + +extern void deinit_hal_dm(struct net_device *dev) +{ + + dm_deInit_fsync(dev); + +} + + +#ifdef USB_RX_AGGREGATION_SUPPORT +void dm_CheckRxAggregation(struct net_device *dev) { + struct r8192_priv *priv = rtllib_priv((struct net_device *)dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + static unsigned long lastTxOkCnt = 0; + static unsigned long lastRxOkCnt = 0; + unsigned long curTxOkCnt = 0; + unsigned long curRxOkCnt = 0; + + curTxOkCnt = priv->stats.txbytesunicast - lastTxOkCnt; + curRxOkCnt = priv->stats.rxbytesunicast - lastRxOkCnt; + + if((curTxOkCnt + curRxOkCnt) < 15000000) { + return; + } + + if(curTxOkCnt > 4*curRxOkCnt) { + if (priv->bCurrentRxAggrEnable) { + write_nic_dword(dev, 0x1a8, 0); + priv->bCurrentRxAggrEnable = false; + } + }else{ + if (!priv->bCurrentRxAggrEnable && !pHTInfo->bCurrentRT2RTAggregation) { + u32 ulValue; + ulValue = (pHTInfo->UsbRxFwAggrEn<<24) | (pHTInfo->UsbRxFwAggrPageNum<<16) | + (pHTInfo->UsbRxFwAggrPacketNum<<8) | (pHTInfo->UsbRxFwAggrTimeout); + write_nic_dword(dev, 0x1a8, ulValue); + priv->bCurrentRxAggrEnable = true; + } + } + + lastTxOkCnt = priv->stats.txbytesunicast; + lastRxOkCnt = priv->stats.rxbytesunicast; +} +#endif + + + +extern void hal_dm_watchdog(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + if(priv->being_init_adapter) + return; + + dm_check_ac_dc_power(dev); + + dm_check_pbc_gpio(dev); + dm_check_txrateandretrycount(dev); + dm_check_edca_turbo(dev); + + if (IS_HARDWARE_TYPE_8192SE(dev)){ +#ifdef RTL8192SE + dm_RefreshRateAdaptiveMask(dev); + dm_WA_Broadcom_IOT(dev); + return; +#if 0 + dm_check_txpower_tracking(dev); + dm_ctrl_initgain_byrssi(dev); + dm_dynamic_txpower(dev); + dm_RefreshRateAdaptiveMask(dev); + dm_check_fsync(dev); + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + Adhoc_dm_CheckRateAdaptive(dev); + else + dm_check_rate_adaptive(dev); +#endif +#endif + } + dm_check_rate_adaptive(dev); + dm_dynamic_txpower(dev); + dm_check_txpower_tracking(dev); + + dm_ctrl_initgain_byrssi(dev); + dm_bandwidth_autoswitch(dev); + + dm_check_rx_path_selection(dev); + dm_check_fsync(dev); + + dm_send_rssi_tofw(dev); + dm_ctstoself(dev); + +#ifdef USB_RX_AGGREGATION_SUPPORT + dm_CheckRxAggregation(dev); +#endif +} + +void dm_check_ac_dc_power(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static char *ac_dc_check_script_path = "/etc/acpi/wireless-rtl-ac-dc-power.sh"; + char *argv[] = {ac_dc_check_script_path,DRV_NAME,NULL}; + static char *envp[] = {"HOME=/", + "TERM=linux", + "PATH=/usr/bin:/bin", + NULL}; + + if(priv->ResetProgress == RESET_TYPE_SILENT) + { + RT_TRACE((COMP_INIT | COMP_POWER | COMP_RF), "GPIOChangeRFWorkItemCallBack(): Silent Reseting!!!!!!!\n"); + return; + } + + if(priv->rtllib->state != RTLLIB_LINKED) { + return; + } + call_usermodehelper(ac_dc_check_script_path,argv,envp,1); + + return; +}; + + +extern void init_rate_adaptive(struct net_device * dev) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + prate_adaptive pra = (prate_adaptive)&priv->rate_adaptive; + + pra->ratr_state = DM_RATR_STA_MAX; + pra->high2low_rssi_thresh_for_ra = RateAdaptiveTH_High; + pra->low2high_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M+5; + pra->low2high_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M+5; + + pra->high_rssi_thresh_for_ra = RateAdaptiveTH_High+5; + pra->low_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M; + pra->low_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M; + + if(priv->CustomerID == RT_CID_819x_Netcore) + pra->ping_rssi_enable = 1; + else + pra->ping_rssi_enable = 0; + pra->ping_rssi_thresh_for_ra = 15; + + + if (priv->rf_type == RF_2T4R) + { + pra->upper_rssi_threshold_ratr = 0x8f0f0000; + pra->middle_rssi_threshold_ratr = 0x8f0ff000; + pra->low_rssi_threshold_ratr = 0x8f0ff001; + pra->low_rssi_threshold_ratr_40M = 0x8f0ff005; + pra->low_rssi_threshold_ratr_20M = 0x8f0ff001; + pra->ping_rssi_ratr = 0x0000000d; + } + else if (priv->rf_type == RF_1T2R) + { + pra->upper_rssi_threshold_ratr = 0x000f0000; + pra->middle_rssi_threshold_ratr = 0x000ff000; + pra->low_rssi_threshold_ratr = 0x000ff001; + pra->low_rssi_threshold_ratr_40M = 0x000ff005; + pra->low_rssi_threshold_ratr_20M = 0x000ff001; + pra->ping_rssi_ratr = 0x0000000d; + } + +} + + +static void dm_check_rate_adaptive(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + prate_adaptive pra = (prate_adaptive)&priv->rate_adaptive; + u32 currentRATR, targetRATR = 0; + u32 LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0; + bool bshort_gi_enabled = false; + static u8 ping_rssi_state=0; + + if(IS_NIC_DOWN(priv)){ + RT_TRACE(COMP_RATE, "<---- dm_check_rate_adaptive(): driver is going to unload\n"); + return; + } + + if(pra->rate_adaptive_disabled) + return; + + if( !(priv->rtllib->mode == WIRELESS_MODE_N_24G || + priv->rtllib->mode == WIRELESS_MODE_N_5G)) + return; + + if( priv->rtllib->state == RTLLIB_LINKED ) + { + + bshort_gi_enabled = (pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI40MHz) || + (!pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI20MHz); + + + pra->upper_rssi_threshold_ratr = + (pra->upper_rssi_threshold_ratr & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ; + + pra->middle_rssi_threshold_ratr = + (pra->middle_rssi_threshold_ratr & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ; + + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + pra->low_rssi_threshold_ratr = + (pra->low_rssi_threshold_ratr_40M & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ; + } + else + { + pra->low_rssi_threshold_ratr = + (pra->low_rssi_threshold_ratr_20M & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ; + } + pra->ping_rssi_ratr = + (pra->ping_rssi_ratr & (~BIT31)) | ((bshort_gi_enabled)? BIT31:0) ; + + if (pra->ratr_state == DM_RATR_STA_HIGH) + { + HighRSSIThreshForRA = pra->high2low_rssi_thresh_for_ra; + LowRSSIThreshForRA = (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)? + (pra->low_rssi_thresh_for_ra40M):(pra->low_rssi_thresh_for_ra20M); + } + else if (pra->ratr_state == DM_RATR_STA_LOW) + { + HighRSSIThreshForRA = pra->high_rssi_thresh_for_ra; + LowRSSIThreshForRA = (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)? + (pra->low2high_rssi_thresh_for_ra40M):(pra->low2high_rssi_thresh_for_ra20M); + } + else + { + HighRSSIThreshForRA = pra->high_rssi_thresh_for_ra; + LowRSSIThreshForRA = (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)? + (pra->low_rssi_thresh_for_ra40M):(pra->low_rssi_thresh_for_ra20M); + } + + if(priv->undecorated_smoothed_pwdb >= (long)HighRSSIThreshForRA) + { + pra->ratr_state = DM_RATR_STA_HIGH; + targetRATR = pra->upper_rssi_threshold_ratr; + }else if(priv->undecorated_smoothed_pwdb >= (long)LowRSSIThreshForRA) + { + pra->ratr_state = DM_RATR_STA_MIDDLE; + targetRATR = pra->middle_rssi_threshold_ratr; + }else + { + pra->ratr_state = DM_RATR_STA_LOW; + targetRATR = pra->low_rssi_threshold_ratr; + } + + if(pra->ping_rssi_enable) + { + if(priv->undecorated_smoothed_pwdb < (long)(pra->ping_rssi_thresh_for_ra+5)) + { + if( (priv->undecorated_smoothed_pwdb < (long)pra->ping_rssi_thresh_for_ra) || + ping_rssi_state ) + { + pra->ratr_state = DM_RATR_STA_LOW; + targetRATR = pra->ping_rssi_ratr; + ping_rssi_state = 1; + } + } + else + { + ping_rssi_state = 0; + } + } + +#if 1 + if(priv->rtllib->GetHalfNmodeSupportByAPsHandler(dev)) + targetRATR &= 0xf00fffff; +#endif + + currentRATR = read_nic_dword(dev, RATR0); + if( targetRATR != currentRATR ) + { + u32 ratr_value; + ratr_value = targetRATR; + RT_TRACE(COMP_RATE,"currentRATR = %x, targetRATR = %x\n", currentRATR, targetRATR); + if(priv->rf_type == RF_1T2R) + { + ratr_value &= ~(RATE_ALL_OFDM_2SS); + } + write_nic_dword(dev, RATR0, ratr_value); + write_nic_byte(dev, UFWP, 1); + + pra->last_ratr = targetRATR; + } + + } + else + { + pra->ratr_state = DM_RATR_STA_MAX; + } + +} + +#ifdef RTL8192SE +void dm_InitRateAdaptiveMask(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + prate_adaptive pRA = (prate_adaptive)&priv->rate_adaptive; + + pRA->ratr_state = DM_RATR_STA_MAX; + pRA->PreRATRState = DM_RATR_STA_MAX; + +#ifdef _RTL8192_EXT_PATCH_ + if (priv->DM_Type == DM_Type_ByDriver && priv->pFirmware->FirmwareVersion >= 60) + priv->rtllib->bUseRAMask = true; + else +#endif + priv->rtllib->bUseRAMask = false; + + printk("=========>%s: bUseRAMask=%d\n", __func__, priv->rtllib->bUseRAMask); + priv->bInformFWDriverControlDM = false; + +} +#endif + +static void dm_init_bandwidth_autoswitch(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->rtllib->bandwidth_auto_switch.threshold_20Mhzto40Mhz = BW_AUTO_SWITCH_LOW_HIGH; + priv->rtllib->bandwidth_auto_switch.threshold_40Mhzto20Mhz = BW_AUTO_SWITCH_HIGH_LOW; + priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = false; + priv->rtllib->bandwidth_auto_switch.bautoswitch_enable = false; + +} + + +static void dm_bandwidth_autoswitch(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20 ||!priv->rtllib->bandwidth_auto_switch.bautoswitch_enable){ + return; + }else{ + if(priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz == false){ + if(priv->undecorated_smoothed_pwdb <= priv->rtllib->bandwidth_auto_switch.threshold_40Mhzto20Mhz) + priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = true; + }else{ + if(priv->undecorated_smoothed_pwdb >= priv->rtllib->bandwidth_auto_switch.threshold_20Mhzto40Mhz) + priv->rtllib->bandwidth_auto_switch.bforced_tx20Mhz = false; + + } + } +} + +#ifdef Rtl8192SE +u32 OFDMSwingTable[OFDM_Table_Length] = { + 0x7f8001fe, + 0x788001e2, + 0x71c001c7, + 0x6b8001ae, + 0x65400195, + 0x5fc0017f, + 0x5a400169, + 0x55400155, + 0x50800142, + 0x4c000130, + 0x47c0011f, + 0x43c0010f, + 0x40000100, + 0x3c8000f2, + 0x390000e4, + 0x35c000d7, + 0x32c000cb, + 0x300000c0, + 0x2d4000b5, + 0x2ac000ab, + 0x288000a2, + 0x26000098, + 0x24000090, + 0x22000088, + 0x20000080, + 0x1e400079, + 0x1c800072, + 0x1b00006c, + 0x19800066, + 0x18000060, + 0x16c0005b, + 0x15800056, + 0x14400051, + 0x1300004c, + 0x12000048, + 0x11000044, + 0x10000040, +}; + +u8 CCKSwingTable_Ch1_Ch13[CCK_Table_length][8] = { + {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, + {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, + {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, + {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, + {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, + {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, + {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, + {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, + {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, + {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, + {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, + {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, + {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, + {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, + {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, + {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, + {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, + {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, + {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, + {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, + {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, + {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, + {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, + {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, + {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, + {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, + {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, + {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, + {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, + {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, + {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, + {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, + {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} +}; + + +u8 CCKSwingTable_Ch14[CCK_Table_length][8] = { + {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, + {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, + {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, + {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, + {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, + {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, + {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, + {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, + {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, + {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, + {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, + {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, + {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, + {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, + {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, + {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, + {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, + {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, + {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, + {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, + {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, + {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, + {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, + {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, + {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, + {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, + {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, + {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, + {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, + {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} +}; +#elif defined RTL8192E +static u32 OFDMSwingTable[OFDM_Table_Length] = { + 0x7f8001fe, + 0x71c001c7, + 0x65400195, + 0x5a400169, + 0x50800142, + 0x47c0011f, + 0x40000100, + 0x390000e4, + 0x32c000cb, + 0x2d4000b5, + 0x288000a2, + 0x24000090, + 0x20000080, + 0x1c800072, + 0x19800066, + 0x26c0005b, + 0x24400051, + 0x12000048, + 0x10000040 +}; +static u8 CCKSwingTable_Ch1_Ch13[CCK_Table_length][8] = { + {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, + {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, + {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, + {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, + {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, + {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, + {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, + {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, + {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, + {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, + {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, + {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01} +}; + +static u8 CCKSwingTable_Ch14[CCK_Table_length][8] = { + {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, + {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, + {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, + {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, + {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, + {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, + {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, + {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, + {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, + {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, + {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, + {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00} +}; +#endif +#define Pw_Track_Flag 0x11d +#define Tssi_Mea_Value 0x13c +#define Tssi_Report_Value1 0x134 +#define Tssi_Report_Value2 0x13e +#define FW_Busy_Flag 0x13f + +#ifndef RTL8192SE +static void dm_TXPowerTrackingCallback_TSSI(struct net_device * dev) + { + struct r8192_priv *priv = rtllib_priv(dev); + bool bHighpowerstate, viviflag = false; + DCMD_TXCMD_T tx_cmd; + u8 powerlevelOFDM24G; + int i =0, j = 0, k = 0; + u8 RF_Type, tmp_report[5]={0, 0, 0, 0, 0}; + u32 Value; + u8 Pwr_Flag; + u16 Avg_TSSI_Meas, TSSI_13dBm, Avg_TSSI_Meas_from_driver=0; +#ifdef RTL8192U + RT_STATUS rtStatus = RT_STATUS_SUCCESS; +#endif + u32 delta=0; + RT_TRACE(COMP_POWER_TRACKING,"%s()\n",__FUNCTION__); + write_nic_byte(dev, Pw_Track_Flag, 0); + write_nic_byte(dev, FW_Busy_Flag, 0); + priv->rtllib->bdynamic_txpower_enable = false; + bHighpowerstate = priv->bDynamicTxHighPower; + + powerlevelOFDM24G = (u8)(priv->Pwr_Track>>24); + RF_Type = priv->rf_type; + Value = (RF_Type<<8) | powerlevelOFDM24G; + + RT_TRACE(COMP_POWER_TRACKING, "powerlevelOFDM24G = %x\n", powerlevelOFDM24G); + + +#ifdef RTL8190P + for(j = 0; j<1; j++) +#else + for(j = 0; j<=30; j++) +#endif +{ + + tx_cmd.Op = TXCMD_SET_TX_PWR_TRACKING; + tx_cmd.Length = 4; + tx_cmd.Value = Value; +#ifdef RTL8192U + rtStatus = SendTxCommandPacket(dev, &tx_cmd, 12); + if (rtStatus == RT_STATUS_FAILURE) + { + RT_TRACE(COMP_POWER_TRACKING, "Set configuration with tx cmd queue fail!\n"); + } +#else + cmpk_message_handle_tx(dev, (u8*)&tx_cmd, DESC_PACKET_TYPE_INIT, sizeof(DCMD_TXCMD_T)); +#endif + mdelay(1); + for(i = 0;i <= 30; i++) + { + Pwr_Flag = read_nic_byte(dev, Pw_Track_Flag); + + if (Pwr_Flag == 0) + { + mdelay(1); + + if(priv->bResetInProgress) + { + RT_TRACE(COMP_POWER_TRACKING, "we are in slient reset progress, so return\n"); + write_nic_byte(dev, Pw_Track_Flag, 0); + write_nic_byte(dev, FW_Busy_Flag, 0); + return; + } +#ifdef RTL8192E + if((priv->rtllib->eRFPowerState != eRfOn)) + { + RT_TRACE(COMP_POWER_TRACKING, "we are in power save, so return\n"); + write_nic_byte(dev, Pw_Track_Flag, 0); + write_nic_byte(dev, FW_Busy_Flag, 0); + return; + } + +#endif + continue; + } + + Avg_TSSI_Meas = read_nic_word(dev, Tssi_Mea_Value); + + if(Avg_TSSI_Meas == 0) + { + write_nic_byte(dev, Pw_Track_Flag, 0); + write_nic_byte(dev, FW_Busy_Flag, 0); + return; + } + + for(k = 0;k < 5; k++) + { + if(k !=4) + tmp_report[k] = read_nic_byte(dev, Tssi_Report_Value1+k); + else + tmp_report[k] = read_nic_byte(dev, Tssi_Report_Value2); + + RT_TRACE(COMP_POWER_TRACKING, "TSSI_report_value = %d\n", tmp_report[k]); + + { + if(tmp_report[k] <= 20) + { + viviflag =true; + break; + } + } + } + + if(viviflag ==true) + { + write_nic_byte(dev, Pw_Track_Flag, 0); + viviflag = false; + RT_TRACE(COMP_POWER_TRACKING, "we filted this data\n"); + for(k = 0;k < 5; k++) + tmp_report[k] = 0; + break; + } + + for(k = 0;k < 5; k++) + { + Avg_TSSI_Meas_from_driver += tmp_report[k]; + } + + Avg_TSSI_Meas_from_driver = Avg_TSSI_Meas_from_driver*100/5; + RT_TRACE(COMP_POWER_TRACKING, "Avg_TSSI_Meas_from_driver = %d\n", Avg_TSSI_Meas_from_driver); + TSSI_13dBm = priv->TSSI_13dBm; + RT_TRACE(COMP_POWER_TRACKING, "TSSI_13dBm = %d\n", TSSI_13dBm); + + if(Avg_TSSI_Meas_from_driver > TSSI_13dBm) + delta = Avg_TSSI_Meas_from_driver - TSSI_13dBm; + else + delta = TSSI_13dBm - Avg_TSSI_Meas_from_driver; + + if(delta <= E_FOR_TX_POWER_TRACK) + { + priv->rtllib->bdynamic_txpower_enable = true; + write_nic_byte(dev, Pw_Track_Flag, 0); + write_nic_byte(dev, FW_Busy_Flag, 0); + RT_TRACE(COMP_POWER_TRACKING, "tx power track is done\n"); + RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex = %d\n", priv->rfa_txpowertrackingindex); + RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex_real = %d\n", priv->rfa_txpowertrackingindex_real); +#ifdef RTL8190P + RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex = %d\n", priv->rfc_txpowertrackingindex); + RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex_real = %d\n", priv->rfc_txpowertrackingindex_real); +#endif + RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation_difference = %d\n", priv->CCKPresentAttentuation_difference); + RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation = %d\n", priv->CCKPresentAttentuation); + return; + } + else + { + if(Avg_TSSI_Meas_from_driver < TSSI_13dBm - E_FOR_TX_POWER_TRACK) + { + if (RF_Type == RF_2T4R) + { + + if((priv->rfa_txpowertrackingindex > 0) &&(priv->rfc_txpowertrackingindex > 0)) + { + priv->rfa_txpowertrackingindex--; + if(priv->rfa_txpowertrackingindex_real > 4) + { + priv->rfa_txpowertrackingindex_real--; + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value); + } + + priv->rfc_txpowertrackingindex--; + if(priv->rfc_txpowertrackingindex_real > 4) + { + priv->rfc_txpowertrackingindex_real--; + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value); + } + } + else + { + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value); + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value); + } + } + else + { + { +#ifdef RTL8190P + { + if(priv->rfc_txpowertrackingindex > 0) + { + priv->rfc_txpowertrackingindex--; + if(priv->rfc_txpowertrackingindex_real > 4) + { + priv->rfc_txpowertrackingindex_real--; + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value); + } + } + else + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value); + } +#endif +#ifdef RTL8192E + { + if(priv->rfa_txpowertrackingindex > 0) + { + priv->rfa_txpowertrackingindex--; + if(priv->rfa_txpowertrackingindex_real > 4) + { + priv->rfa_txpowertrackingindex_real--; + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value); + } + } + else + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[4].txbbgain_value); + } +#endif + } + + } + } + else + { + if (RF_Type == RF_2T4R) + { + if((priv->rfa_txpowertrackingindex < TxBBGainTableLength - 1) &&(priv->rfc_txpowertrackingindex < TxBBGainTableLength - 1)) + { + priv->rfa_txpowertrackingindex++; + priv->rfa_txpowertrackingindex_real++; + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value); + priv->rfc_txpowertrackingindex++; + priv->rfc_txpowertrackingindex_real++; + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value); + } + else + { + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value); + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value); + } + } + else + { + { +#ifdef RTL8190P + { + if(priv->rfc_txpowertrackingindex < (TxBBGainTableLength - 1)) + { + priv->rfc_txpowertrackingindex++; + priv->rfc_txpowertrackingindex_real++; + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex_real].txbbgain_value); + } + else + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value); + } +#endif +#ifdef RTL8192E + { + if(priv->rfa_txpowertrackingindex < (TxBBGainTableLength - 1)) + { + priv->rfa_txpowertrackingindex++; + priv->rfa_txpowertrackingindex_real++; + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex_real].txbbgain_value); + } + else + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[TxBBGainTableLength - 1].txbbgain_value); + } +#endif + } + } + } + if (RF_Type == RF_2T4R){ + priv->CCKPresentAttentuation_difference + = priv->rfa_txpowertrackingindex - priv->rfa_txpowertracking_default; + }else{ + { +#ifdef RTL8190P + priv->CCKPresentAttentuation_difference + = priv->rfc_txpowertrackingindex - priv->rfc_txpowertracking_default; +#endif +#ifdef RTL8192E + priv->CCKPresentAttentuation_difference + = priv->rfa_txpowertrackingindex_real - priv->rfa_txpowertracking_default; +#endif + } + } + + if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20) + priv->CCKPresentAttentuation + = priv->CCKPresentAttentuation_20Mdefault + priv->CCKPresentAttentuation_difference; + else + priv->CCKPresentAttentuation + = priv->CCKPresentAttentuation_40Mdefault + priv->CCKPresentAttentuation_difference; + + if(priv->CCKPresentAttentuation > (CCKTxBBGainTableLength-1)) + priv->CCKPresentAttentuation = CCKTxBBGainTableLength-1; + if(priv->CCKPresentAttentuation < 0) + priv->CCKPresentAttentuation = 0; + + if(priv->CCKPresentAttentuation > -1&&priv->CCKPresentAttentuation < CCKTxBBGainTableLength) + { + if(priv->rtllib->current_network.channel == 14 && !priv->bcck_in_ch14) + { + priv->bcck_in_ch14 = true; + dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); + } + else if(priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14) + { + priv->bcck_in_ch14 = false; + dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); + } + else + dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); + } + RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex = %d\n", priv->rfa_txpowertrackingindex); + RT_TRACE(COMP_POWER_TRACKING, "priv->rfa_txpowertrackingindex_real = %d\n", priv->rfa_txpowertrackingindex_real); +#ifdef RTL8190P + RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex = %d\n", priv->rfc_txpowertrackingindex); + RT_TRACE(COMP_POWER_TRACKING, "priv->rfc_txpowertrackingindex_real = %d\n", priv->rfc_txpowertrackingindex_real); +#endif + RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation_difference = %d\n", priv->CCKPresentAttentuation_difference); + RT_TRACE(COMP_POWER_TRACKING, "priv->CCKPresentAttentuation = %d\n", priv->CCKPresentAttentuation); + + if (priv->CCKPresentAttentuation_difference <= -12||priv->CCKPresentAttentuation_difference >= 24) + { + priv->rtllib->bdynamic_txpower_enable = true; + write_nic_byte(dev, Pw_Track_Flag, 0); + write_nic_byte(dev, FW_Busy_Flag, 0); + RT_TRACE(COMP_POWER_TRACKING, "tx power track--->limited\n"); + return; + } + + + } + write_nic_byte(dev, Pw_Track_Flag, 0); + Avg_TSSI_Meas_from_driver = 0; + for(k = 0;k < 5; k++) + tmp_report[k] = 0; + break; + } + write_nic_byte(dev, FW_Busy_Flag, 0); +} + priv->rtllib->bdynamic_txpower_enable = true; + write_nic_byte(dev, Pw_Track_Flag, 0); +} +#endif + +#ifdef RTL8192E +static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device * dev) +{ +#define ThermalMeterVal 9 + struct r8192_priv *priv = rtllib_priv(dev); + u32 tmpRegA, TempCCk; + u8 tmpOFDMindex, tmpCCKindex, tmpCCK20Mindex, tmpCCK40Mindex, tmpval; + int i =0, CCKSwingNeedUpdate=0; + + if(!priv->btxpower_trackingInit) + { + tmpRegA= rtl8192_QueryBBReg(dev, rOFDM0_XATxIQImbalance, bMaskDWord); + for(i=0; iOFDM_index= (u8)i; + RT_TRACE(COMP_POWER_TRACKING, "Initial reg0x%x = 0x%x, OFDM_index=0x%x\n", + rOFDM0_XATxIQImbalance, tmpRegA, priv->OFDM_index); + } + } + + TempCCk = rtl8192_QueryBBReg(dev, rCCK0_TxFilter1, bMaskByte2); + for(i=0 ; iCCK_index =(u8) i; + RT_TRACE(COMP_POWER_TRACKING, "Initial reg0x%x = 0x%x, CCK_index=0x%x\n", + rCCK0_TxFilter1, TempCCk, priv->CCK_index); + break; + } +} + priv->btxpower_trackingInit = true; + return; + } + +#if 0 +{ + UINT32 curr_addr; + UINT32 reg_value; + + for (curr_addr = 0; curr_addr < 0x2d; curr_addr++) + { + reg_value = PHY_QueryRFReg( dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + curr_addr, bMaskDWord); + } + + pHalData->TXPowercount = 0; + return; +} +#endif + + tmpRegA = rtl8192_phy_QueryRFReg(dev, RF90_PATH_A, 0x12, 0x078); + RT_TRACE(COMP_POWER_TRACKING, "Readback ThermalMeterA = %d \n", tmpRegA); + if(tmpRegA < 3 || tmpRegA > 13) + return; + if(tmpRegA >= 12) + tmpRegA = 12; + RT_TRACE(COMP_POWER_TRACKING, "Valid ThermalMeterA = %d \n", tmpRegA); + priv->ThermalMeter[0] = ThermalMeterVal; + priv->ThermalMeter[1] = ThermalMeterVal; + + if(priv->ThermalMeter[0] >= (u8)tmpRegA) + { + tmpOFDMindex = tmpCCK20Mindex = 6+(priv->ThermalMeter[0]-(u8)tmpRegA); + tmpCCK40Mindex = tmpCCK20Mindex - 6; + if(tmpOFDMindex >= OFDM_Table_Length) + tmpOFDMindex = OFDM_Table_Length-1; + if(tmpCCK20Mindex >= CCK_Table_length) + tmpCCK20Mindex = CCK_Table_length-1; + if(tmpCCK40Mindex >= CCK_Table_length) + tmpCCK40Mindex = CCK_Table_length-1; + } + else + { + tmpval = ((u8)tmpRegA - priv->ThermalMeter[0]); + if(tmpval >= 6) + tmpOFDMindex = tmpCCK20Mindex = 0; + else + tmpOFDMindex = tmpCCK20Mindex = 6 - tmpval; + tmpCCK40Mindex = 0; + } + if(priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + tmpCCKindex = tmpCCK40Mindex; + else + tmpCCKindex = tmpCCK20Mindex; + + priv->Record_CCK_20Mindex = tmpCCK20Mindex; + priv->Record_CCK_40Mindex = tmpCCK40Mindex; + RT_TRACE(COMP_POWER_TRACKING, "Record_CCK_20Mindex / Record_CCK_40Mindex = %d / %d.\n", + priv->Record_CCK_20Mindex, priv->Record_CCK_40Mindex); + + if(priv->rtllib->current_network.channel == 14 && !priv->bcck_in_ch14) + { + priv->bcck_in_ch14 = true; + CCKSwingNeedUpdate = 1; + } + else if(priv->rtllib->current_network.channel != 14 && priv->bcck_in_ch14) + { + priv->bcck_in_ch14 = false; + CCKSwingNeedUpdate = 1; + } + + if(priv->CCK_index != tmpCCKindex) +{ + priv->CCK_index = tmpCCKindex; + CCKSwingNeedUpdate = 1; + } + + if(CCKSwingNeedUpdate) + { + dm_cck_txpower_adjust(dev, priv->bcck_in_ch14); + } + if(priv->OFDM_index != tmpOFDMindex) + { + priv->OFDM_index = tmpOFDMindex; + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[priv->OFDM_index]); + RT_TRACE(COMP_POWER_TRACKING, "Update OFDMSwing[%d] = 0x%x\n", + priv->OFDM_index, OFDMSwingTable[priv->OFDM_index]); + } + priv->txpower_count = 0; +} +#elif defined (RTL8192SE) +static void dm_TXPowerTrackingCallback_ThermalMeter(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 ThermalValue=0; + u32 FwCmdVal=0; + + priv->btxpower_trackingInit = true; + + + ThermalValue = (u8)rtl8192_phy_QueryRFReg(dev, RF90_PATH_A, RF_T_METER, 0x1f); + RT_TRACE(COMP_POWER_TRACKING, "Readback Thermal Meter = 0x%x\n", ThermalValue); + printk("%s()Readback Thermal Meter = 0x%x\n", __func__,ThermalValue); + if(ThermalValue) + { + priv->ThermalValue = ThermalValue; + if(priv->pFirmware->FirmwareVersion >= 0x35) + { + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_TXPWR_TRACK_THERMAL); + } + else + { + FwCmdVal = (FW_TXPWR_TRACK_THERMAL| + (priv->ThermalMeter[0]<<8)|(ThermalValue<<16)); + RT_TRACE(COMP_POWER_TRACKING, "Write to FW Thermal Val = 0x%x\n", FwCmdVal); + write_nic_dword(dev, WFM5, FwCmdVal); + ChkFwCmdIoDone(dev); + } + } + + priv->txpower_count = 0; +} +#endif + +void dm_txpower_trackingcallback(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,txpower_tracking_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + +#ifdef RTL8190P + dm_TXPowerTrackingCallback_TSSI(dev); +#elif defined(RTL8192E) + if(priv->IC_Cut >= IC_VersionCut_D) + dm_TXPowerTrackingCallback_TSSI(dev); + else + dm_TXPowerTrackingCallback_ThermalMeter(dev); +#elif defined(RTL8192SE) + dm_TXPowerTrackingCallback_ThermalMeter(dev); +#endif +} + +#ifndef RTL8192SE +static void dm_InitializeTXPowerTracking_TSSI(struct net_device *dev) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + + priv->txbbgain_table[0].txbb_iq_amplifygain = 12; + priv->txbbgain_table[0].txbbgain_value=0x7f8001fe; + priv->txbbgain_table[1].txbb_iq_amplifygain = 11; + priv->txbbgain_table[1].txbbgain_value=0x788001e2; + priv->txbbgain_table[2].txbb_iq_amplifygain = 10; + priv->txbbgain_table[2].txbbgain_value=0x71c001c7; + priv->txbbgain_table[3].txbb_iq_amplifygain = 9; + priv->txbbgain_table[3].txbbgain_value=0x6b8001ae; + priv->txbbgain_table[4].txbb_iq_amplifygain = 8; + priv->txbbgain_table[4].txbbgain_value=0x65400195; + priv->txbbgain_table[5].txbb_iq_amplifygain = 7; + priv->txbbgain_table[5].txbbgain_value=0x5fc0017f; + priv->txbbgain_table[6].txbb_iq_amplifygain = 6; + priv->txbbgain_table[6].txbbgain_value=0x5a400169; + priv->txbbgain_table[7].txbb_iq_amplifygain = 5; + priv->txbbgain_table[7].txbbgain_value=0x55400155; + priv->txbbgain_table[8].txbb_iq_amplifygain = 4; + priv->txbbgain_table[8].txbbgain_value=0x50800142; + priv->txbbgain_table[9].txbb_iq_amplifygain = 3; + priv->txbbgain_table[9].txbbgain_value=0x4c000130; + priv->txbbgain_table[10].txbb_iq_amplifygain = 2; + priv->txbbgain_table[10].txbbgain_value=0x47c0011f; + priv->txbbgain_table[11].txbb_iq_amplifygain = 1; + priv->txbbgain_table[11].txbbgain_value=0x43c0010f; + priv->txbbgain_table[12].txbb_iq_amplifygain = 0; + priv->txbbgain_table[12].txbbgain_value=0x40000100; + priv->txbbgain_table[13].txbb_iq_amplifygain = -1; + priv->txbbgain_table[13].txbbgain_value=0x3c8000f2; + priv->txbbgain_table[14].txbb_iq_amplifygain = -2; + priv->txbbgain_table[14].txbbgain_value=0x390000e4; + priv->txbbgain_table[15].txbb_iq_amplifygain = -3; + priv->txbbgain_table[15].txbbgain_value=0x35c000d7; + priv->txbbgain_table[16].txbb_iq_amplifygain = -4; + priv->txbbgain_table[16].txbbgain_value=0x32c000cb; + priv->txbbgain_table[17].txbb_iq_amplifygain = -5; + priv->txbbgain_table[17].txbbgain_value=0x300000c0; + priv->txbbgain_table[18].txbb_iq_amplifygain = -6; + priv->txbbgain_table[18].txbbgain_value=0x2d4000b5; + priv->txbbgain_table[19].txbb_iq_amplifygain = -7; + priv->txbbgain_table[19].txbbgain_value=0x2ac000ab; + priv->txbbgain_table[20].txbb_iq_amplifygain = -8; + priv->txbbgain_table[20].txbbgain_value=0x288000a2; + priv->txbbgain_table[21].txbb_iq_amplifygain = -9; + priv->txbbgain_table[21].txbbgain_value=0x26000098; + priv->txbbgain_table[22].txbb_iq_amplifygain = -10; + priv->txbbgain_table[22].txbbgain_value=0x24000090; + priv->txbbgain_table[23].txbb_iq_amplifygain = -11; + priv->txbbgain_table[23].txbbgain_value=0x22000088; + priv->txbbgain_table[24].txbb_iq_amplifygain = -12; + priv->txbbgain_table[24].txbbgain_value=0x20000080; + priv->txbbgain_table[25].txbb_iq_amplifygain = -13; + priv->txbbgain_table[25].txbbgain_value=0x1a00006c; + priv->txbbgain_table[26].txbb_iq_amplifygain = -14; + priv->txbbgain_table[26].txbbgain_value=0x1c800072; + priv->txbbgain_table[27].txbb_iq_amplifygain = -15; + priv->txbbgain_table[27].txbbgain_value=0x18000060; + priv->txbbgain_table[28].txbb_iq_amplifygain = -16; + priv->txbbgain_table[28].txbbgain_value=0x19800066; + priv->txbbgain_table[29].txbb_iq_amplifygain = -17; + priv->txbbgain_table[29].txbbgain_value=0x15800056; + priv->txbbgain_table[30].txbb_iq_amplifygain = -18; + priv->txbbgain_table[30].txbbgain_value=0x26c0005b; + priv->txbbgain_table[31].txbb_iq_amplifygain = -19; + priv->txbbgain_table[31].txbbgain_value=0x14400051; + priv->txbbgain_table[32].txbb_iq_amplifygain = -20; + priv->txbbgain_table[32].txbbgain_value=0x24400051; + priv->txbbgain_table[33].txbb_iq_amplifygain = -21; + priv->txbbgain_table[33].txbbgain_value=0x1300004c; + priv->txbbgain_table[34].txbb_iq_amplifygain = -22; + priv->txbbgain_table[34].txbbgain_value=0x12000048; + priv->txbbgain_table[35].txbb_iq_amplifygain = -23; + priv->txbbgain_table[35].txbbgain_value=0x11000044; + priv->txbbgain_table[36].txbb_iq_amplifygain = -24; + priv->txbbgain_table[36].txbbgain_value=0x10000040; + + priv->cck_txbbgain_table[0].ccktxbb_valuearray[0] = 0x36; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[1] = 0x35; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[2] = 0x2e; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[3] = 0x25; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[4] = 0x1c; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[5] = 0x12; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[6] = 0x09; + priv->cck_txbbgain_table[0].ccktxbb_valuearray[7] = 0x04; + + priv->cck_txbbgain_table[1].ccktxbb_valuearray[0] = 0x33; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[1] = 0x32; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[2] = 0x2b; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[3] = 0x23; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[4] = 0x1a; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[5] = 0x11; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[6] = 0x08; + priv->cck_txbbgain_table[1].ccktxbb_valuearray[7] = 0x04; + + priv->cck_txbbgain_table[2].ccktxbb_valuearray[0] = 0x30; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[1] = 0x2f; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[2] = 0x29; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[3] = 0x21; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[4] = 0x19; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[5] = 0x10; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[6] = 0x08; + priv->cck_txbbgain_table[2].ccktxbb_valuearray[7] = 0x03; + + priv->cck_txbbgain_table[3].ccktxbb_valuearray[0] = 0x2d; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[1] = 0x2d; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[2] = 0x27; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[3] = 0x1f; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[4] = 0x18; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[5] = 0x0f; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[6] = 0x08; + priv->cck_txbbgain_table[3].ccktxbb_valuearray[7] = 0x03; + + priv->cck_txbbgain_table[4].ccktxbb_valuearray[0] = 0x2b; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[1] = 0x2a; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[2] = 0x25; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[3] = 0x1e; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[4] = 0x16; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[5] = 0x0e; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[6] = 0x07; + priv->cck_txbbgain_table[4].ccktxbb_valuearray[7] = 0x03; + + priv->cck_txbbgain_table[5].ccktxbb_valuearray[0] = 0x28; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[1] = 0x28; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[2] = 0x22; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[3] = 0x1c; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[4] = 0x15; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[5] = 0x0d; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[6] = 0x07; + priv->cck_txbbgain_table[5].ccktxbb_valuearray[7] = 0x03; + + priv->cck_txbbgain_table[6].ccktxbb_valuearray[0] = 0x26; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[1] = 0x25; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[2] = 0x21; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[3] = 0x1b; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[4] = 0x14; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[5] = 0x0d; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[6] = 0x06; + priv->cck_txbbgain_table[6].ccktxbb_valuearray[7] = 0x03; + + priv->cck_txbbgain_table[7].ccktxbb_valuearray[0] = 0x24; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[1] = 0x23; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[2] = 0x1f; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[3] = 0x19; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[4] = 0x13; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[5] = 0x0c; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[6] = 0x06; + priv->cck_txbbgain_table[7].ccktxbb_valuearray[7] = 0x03; + + priv->cck_txbbgain_table[8].ccktxbb_valuearray[0] = 0x22; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[1] = 0x21; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[2] = 0x1d; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[3] = 0x18; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[4] = 0x11; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[5] = 0x0b; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[6] = 0x06; + priv->cck_txbbgain_table[8].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[9].ccktxbb_valuearray[0] = 0x20; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[1] = 0x20; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[2] = 0x1b; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[3] = 0x16; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[4] = 0x11; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[5] = 0x08; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[6] = 0x05; + priv->cck_txbbgain_table[9].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[10].ccktxbb_valuearray[0] = 0x1f; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[1] = 0x1e; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[2] = 0x1a; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[3] = 0x15; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[4] = 0x10; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[5] = 0x0a; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[6] = 0x05; + priv->cck_txbbgain_table[10].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[11].ccktxbb_valuearray[0] = 0x1d; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[1] = 0x1c; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[2] = 0x18; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[3] = 0x14; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[4] = 0x0f; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[5] = 0x0a; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[6] = 0x05; + priv->cck_txbbgain_table[11].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[12].ccktxbb_valuearray[0] = 0x1b; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[1] = 0x1a; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[2] = 0x17; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[3] = 0x13; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[4] = 0x0e; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[5] = 0x09; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[6] = 0x04; + priv->cck_txbbgain_table[12].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[13].ccktxbb_valuearray[0] = 0x1a; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[1] = 0x19; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[2] = 0x16; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[3] = 0x12; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[4] = 0x0d; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[5] = 0x09; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[6] = 0x04; + priv->cck_txbbgain_table[13].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[14].ccktxbb_valuearray[0] = 0x18; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[1] = 0x17; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[2] = 0x15; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[3] = 0x11; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[4] = 0x0c; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[5] = 0x08; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[6] = 0x04; + priv->cck_txbbgain_table[14].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[15].ccktxbb_valuearray[0] = 0x17; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[1] = 0x16; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[2] = 0x13; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[3] = 0x10; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[4] = 0x0c; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[5] = 0x08; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[6] = 0x04; + priv->cck_txbbgain_table[15].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[16].ccktxbb_valuearray[0] = 0x16; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[1] = 0x15; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[2] = 0x12; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[3] = 0x0f; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[4] = 0x0b; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[5] = 0x07; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[6] = 0x04; + priv->cck_txbbgain_table[16].ccktxbb_valuearray[7] = 0x01; + + priv->cck_txbbgain_table[17].ccktxbb_valuearray[0] = 0x14; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[1] = 0x14; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[2] = 0x11; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[3] = 0x0e; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[4] = 0x0b; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[5] = 0x07; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[6] = 0x03; + priv->cck_txbbgain_table[17].ccktxbb_valuearray[7] = 0x02; + + priv->cck_txbbgain_table[18].ccktxbb_valuearray[0] = 0x13; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[1] = 0x13; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[2] = 0x10; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[3] = 0x0d; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[4] = 0x0a; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[5] = 0x06; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[6] = 0x03; + priv->cck_txbbgain_table[18].ccktxbb_valuearray[7] = 0x01; + + priv->cck_txbbgain_table[19].ccktxbb_valuearray[0] = 0x12; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[1] = 0x12; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[2] = 0x0f; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[3] = 0x0c; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[4] = 0x09; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[5] = 0x06; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[6] = 0x03; + priv->cck_txbbgain_table[19].ccktxbb_valuearray[7] = 0x01; + + priv->cck_txbbgain_table[20].ccktxbb_valuearray[0] = 0x11; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[1] = 0x11; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[2] = 0x0f; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[3] = 0x0c; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[4] = 0x09; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[5] = 0x06; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[6] = 0x03; + priv->cck_txbbgain_table[20].ccktxbb_valuearray[7] = 0x01; + + priv->cck_txbbgain_table[21].ccktxbb_valuearray[0] = 0x10; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[1] = 0x10; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[2] = 0x0e; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[3] = 0x0b; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[4] = 0x08; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[5] = 0x05; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[6] = 0x03; + priv->cck_txbbgain_table[21].ccktxbb_valuearray[7] = 0x01; + + priv->cck_txbbgain_table[22].ccktxbb_valuearray[0] = 0x0f; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[1] = 0x0f; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[2] = 0x0d; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[3] = 0x0b; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[4] = 0x08; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[5] = 0x05; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[6] = 0x03; + priv->cck_txbbgain_table[22].ccktxbb_valuearray[7] = 0x01; + + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[0] = 0x36; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[1] = 0x35; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[2] = 0x2e; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[3] = 0x1b; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[0].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[0] = 0x33; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[1] = 0x32; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[2] = 0x2b; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[3] = 0x19; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[1].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[0] = 0x30; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[1] = 0x2f; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[2] = 0x29; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[3] = 0x18; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[2].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[0] = 0x2d; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[1] = 0x2d; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[2] = 0x27; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[3] = 0x17; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[3].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[0] = 0x2b; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[1] = 0x2a; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[2] = 0x25; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[3] = 0x15; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[4].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[0] = 0x28; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[1] = 0x28; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[2] = 0x22; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[3] = 0x14; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[5].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[0] = 0x26; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[1] = 0x25; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[2] = 0x21; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[3] = 0x13; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[6].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[0] = 0x24; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[1] = 0x23; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[2] = 0x1f; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[3] = 0x12; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[7].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[0] = 0x22; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[1] = 0x21; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[2] = 0x1d; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[3] = 0x11; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[8].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[0] = 0x20; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[1] = 0x20; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[2] = 0x1b; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[3] = 0x10; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[9].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[0] = 0x1f; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[1] = 0x1e; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[2] = 0x1a; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[3] = 0x0f; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[10].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[0] = 0x1d; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[1] = 0x1c; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[2] = 0x18; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[3] = 0x0e; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[11].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[0] = 0x1b; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[1] = 0x1a; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[2] = 0x17; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[3] = 0x0e; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[12].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[0] = 0x1a; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[1] = 0x19; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[2] = 0x16; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[3] = 0x0d; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[13].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[0] = 0x18; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[1] = 0x17; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[2] = 0x15; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[3] = 0x0c; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[14].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[0] = 0x17; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[1] = 0x16; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[2] = 0x13; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[3] = 0x0b; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[15].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[0] = 0x16; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[1] = 0x15; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[2] = 0x12; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[3] = 0x0b; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[16].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[0] = 0x14; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[1] = 0x14; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[2] = 0x11; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[3] = 0x0a; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[17].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[0] = 0x13; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[1] = 0x13; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[2] = 0x10; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[3] = 0x0a; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[18].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[0] = 0x12; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[1] = 0x12; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[2] = 0x0f; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[3] = 0x09; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[19].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[0] = 0x11; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[1] = 0x11; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[2] = 0x0f; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[3] = 0x09; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[20].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[0] = 0x10; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[1] = 0x10; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[2] = 0x0e; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[3] = 0x08; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[21].ccktxbb_valuearray[7] = 0x00; + + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[0] = 0x0f; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[1] = 0x0f; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[2] = 0x0d; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[3] = 0x08; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[4] = 0x00; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[5] = 0x00; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[6] = 0x00; + priv->cck_txbbgain_ch14_table[22].ccktxbb_valuearray[7] = 0x00; + + priv->btxpower_tracking = true; + priv->txpower_count = 0; + priv->btxpower_trackingInit = false; + +} +#endif +#ifndef RTL8190P +static void dm_InitializeTXPowerTracking_ThermalMeter(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef RTL8192SE + priv->btxpower_tracking = false; + priv->txpower_count = 0; + priv->btxpower_trackingInit = false; +#else + + if(priv->rtllib->FwRWRF) + priv->btxpower_tracking = true; + else + priv->btxpower_tracking = false; + priv->txpower_count = 0; + priv->btxpower_trackingInit = false; +#endif + RT_TRACE(COMP_POWER_TRACKING, "pMgntInfo->bTXPowerTracking = %d\n", priv->btxpower_tracking); +} +#endif + +void dm_initialize_txpower_tracking(struct net_device *dev) +{ +#ifdef RTL8192E + struct r8192_priv *priv = rtllib_priv(dev); +#endif +#ifdef RTL8190P + dm_InitializeTXPowerTracking_TSSI(dev); +#elif defined RTL8192E + if(priv->IC_Cut >= IC_VersionCut_D) + dm_InitializeTXPowerTracking_TSSI(dev); + else + dm_InitializeTXPowerTracking_ThermalMeter(dev); +#elif defined RTL8192SE + dm_InitializeTXPowerTracking_ThermalMeter(dev); +#endif +} + +#if (defined RTL8192E || defined RTL8190P) +static void dm_CheckTXPowerTracking_TSSI(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u32 tx_power_track_counter = 0; + RT_TRACE(COMP_POWER_TRACKING,"%s()\n",__FUNCTION__); + if(read_nic_byte(dev, 0x11e) ==1) + return; + if(!priv->btxpower_tracking) + return; + tx_power_track_counter++; + + + if(tx_power_track_counter >= 180) + { + queue_delayed_work_rsl(priv->priv_wq,&priv->txpower_tracking_wq,0); + tx_power_track_counter =0; + } + +} +#endif +#ifndef RTL8190P +static void dm_CheckTXPowerTracking_ThermalMeter(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u8 TM_Trigger=0; + u8 TxPowerCheckCnt = 0; + + if(IS_HARDWARE_TYPE_8192SE(dev)) + TxPowerCheckCnt = 5; + else + TxPowerCheckCnt = 2; + if(!priv->btxpower_tracking){ + return; + } else { + if(priv->txpower_count <= TxPowerCheckCnt) { + priv->txpower_count++; + return; + } + } + + if(!TM_Trigger) + { +#ifdef RTL8192SE + if(IS_HARDWARE_TYPE_8192SE(dev)) + { + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60); + RT_TRACE(COMP_POWER_TRACKING, "Trigger 92S Thermal Meter!!\n"); + } + else +#endif + { + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d); + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f); + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d); + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f); + } + TM_Trigger = 1; + return; + } else { + printk("===============>Schedule TxPowerTrackingWorkItem\n"); +#ifdef RTL8192SE + DM_TXPowerTracking92SDirectCall(dev); +#else + + queue_delayed_work_rsl(priv->priv_wq,&priv->txpower_tracking_wq,0); +#endif + TM_Trigger = 0; + } + + } +#endif + +#ifdef RTL8192SE +void DM_TXPowerTracking92SDirectCall(struct net_device *dev) +{ + dm_TXPowerTrackingCallback_ThermalMeter(dev); + } +#endif + +static void dm_check_txpower_tracking(struct net_device *dev) +{ +#ifdef RTL8192E + struct r8192_priv *priv = rtllib_priv(dev); +#endif +#ifdef RTL8190P + dm_CheckTXPowerTracking_TSSI(dev); +#elif defined RTL8192E + if(priv->IC_Cut >= IC_VersionCut_D) + dm_CheckTXPowerTracking_TSSI(dev); + else + dm_CheckTXPowerTracking_ThermalMeter(dev); +#elif defined RTL8192SE + dm_CheckTXPowerTracking_ThermalMeter(dev); +#endif + +} + +#ifndef RTL8192SE +static void dm_CCKTxPowerAdjust_TSSI(struct net_device *dev, bool bInCH14) +{ + u32 TempVal; + struct r8192_priv *priv = rtllib_priv(dev); + TempVal = 0; + if(!bInCH14){ + TempVal = (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[0] + + (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[1]<<8)) ; + + rtl8192_setBBreg(dev, rCCK0_TxFilter1,bMaskHWord, TempVal); + TempVal = 0; + TempVal = (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[2] + + (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[3]<<8) + + (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[4]<<16 )+ + (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[5]<<24)); + rtl8192_setBBreg(dev, rCCK0_TxFilter2,bMaskDWord, TempVal); + TempVal = 0; + TempVal = (u32)(priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[6] + + (priv->cck_txbbgain_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[7]<<8)) ; + + rtl8192_setBBreg(dev, rCCK0_DebugPort,bMaskLWord, TempVal); + } + else + { + TempVal = (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[0] + + (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[1]<<8)) ; + + rtl8192_setBBreg(dev, rCCK0_TxFilter1,bMaskHWord, TempVal); + TempVal = 0; + TempVal = (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[2] + + (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[3]<<8) + + (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[4]<<16 )+ + (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[5]<<24)); + rtl8192_setBBreg(dev, rCCK0_TxFilter2,bMaskDWord, TempVal); + TempVal = 0; + TempVal = (u32)(priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[6] + + (priv->cck_txbbgain_ch14_table[(u8)(priv->CCKPresentAttentuation)].ccktxbb_valuearray[7]<<8)) ; + + rtl8192_setBBreg(dev, rCCK0_DebugPort,bMaskLWord, TempVal); + } + + +} +#endif +#ifdef RTL8192E +static void dm_CCKTxPowerAdjust_ThermalMeter(struct net_device *dev, bool bInCH14) +{ + u32 TempVal; + struct r8192_priv *priv = rtllib_priv(dev); + + TempVal = 0; + if(!bInCH14) + { + TempVal = CCKSwingTable_Ch1_Ch13[priv->CCK_index][0] + + (CCKSwingTable_Ch1_Ch13[priv->CCK_index][1]<<8) ; + rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal); + RT_TRACE(COMP_POWER_TRACKING, "CCK not chnl 14, reg 0x%x = 0x%x\n", + rCCK0_TxFilter1, TempVal); + TempVal = 0; + TempVal = CCKSwingTable_Ch1_Ch13[priv->CCK_index][2] + + (CCKSwingTable_Ch1_Ch13[priv->CCK_index][3]<<8) + + (CCKSwingTable_Ch1_Ch13[priv->CCK_index][4]<<16 )+ + (CCKSwingTable_Ch1_Ch13[priv->CCK_index][5]<<24); + rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal); + RT_TRACE(COMP_POWER_TRACKING, "CCK not chnl 14, reg 0x%x = 0x%x\n", + rCCK0_TxFilter2, TempVal); + TempVal = 0; + TempVal = CCKSwingTable_Ch1_Ch13[priv->CCK_index][6] + + (CCKSwingTable_Ch1_Ch13[priv->CCK_index][7]<<8) ; + + rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal); + RT_TRACE(COMP_POWER_TRACKING, "CCK not chnl 14, reg 0x%x = 0x%x\n", + rCCK0_DebugPort, TempVal); + } + else + { + TempVal = CCKSwingTable_Ch14[priv->CCK_index][0] + + (CCKSwingTable_Ch14[priv->CCK_index][1]<<8) ; + + rtl8192_setBBreg(dev, rCCK0_TxFilter1, bMaskHWord, TempVal); + RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n", + rCCK0_TxFilter1, TempVal); + TempVal = 0; + TempVal = CCKSwingTable_Ch14[priv->CCK_index][2] + + (CCKSwingTable_Ch14[priv->CCK_index][3]<<8) + + (CCKSwingTable_Ch14[priv->CCK_index][4]<<16 )+ + (CCKSwingTable_Ch14[priv->CCK_index][5]<<24); + rtl8192_setBBreg(dev, rCCK0_TxFilter2, bMaskDWord, TempVal); + RT_TRACE(COMP_POWER_TRACKING, "CCK chnl 14, reg 0x%x = 0x%x\n", + rCCK0_TxFilter2, TempVal); + TempVal = 0; + TempVal = CCKSwingTable_Ch14[priv->CCK_index][6] + + (CCKSwingTable_Ch14[priv->CCK_index][7]<<8) ; + + rtl8192_setBBreg(dev, rCCK0_DebugPort, bMaskLWord, TempVal); + RT_TRACE(COMP_POWER_TRACKING,"CCK chnl 14, reg 0x%x = 0x%x\n", + rCCK0_DebugPort, TempVal); + } + } +#endif + +#ifndef RTL8192SE +extern void dm_cck_txpower_adjust( + struct net_device *dev, + bool binch14 +) +{ +#ifndef RTL8190P + struct r8192_priv *priv = rtllib_priv(dev); +#endif +#ifdef RTL8190P + dm_CCKTxPowerAdjust_TSSI(dev, binch14); +#else + if(priv->IC_Cut >= IC_VersionCut_D) + dm_CCKTxPowerAdjust_TSSI(dev, binch14); + else + dm_CCKTxPowerAdjust_ThermalMeter(dev, binch14); +#endif +} +#endif + + +#if defined(RTL8192E)||defined(RTL8190P) +static void dm_txpower_reset_recovery( + struct net_device *dev +) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + RT_TRACE(COMP_POWER_TRACKING, "Start Reset Recovery ==>\n"); + rtl8192_setBBreg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbbgain_value); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc80 is %08x\n",priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbbgain_value); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in RFA_txPowerTrackingIndex is %x\n",priv->rfa_txpowertrackingindex); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery : RF A I/Q Amplify Gain is %ld\n",priv->txbbgain_table[priv->rfa_txpowertrackingindex].txbb_iq_amplifygain); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: CCK Attenuation is %d dB\n",priv->CCKPresentAttentuation); + dm_cck_txpower_adjust(dev,priv->bcck_in_ch14); + + rtl8192_setBBreg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbbgain_value); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in 0xc90 is %08x\n",priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbbgain_value); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery: Fill in RFC_txPowerTrackingIndex is %x\n",priv->rfc_txpowertrackingindex); + RT_TRACE(COMP_POWER_TRACKING, "Reset Recovery : RF C I/Q Amplify Gain is %ld\n",priv->txbbgain_table[priv->rfc_txpowertrackingindex].txbb_iq_amplifygain); + +} + +extern void dm_restore_dynamic_mechanism_state(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 reg_ratr = priv->rate_adaptive.last_ratr; + + if(IS_NIC_DOWN(priv)){ + RT_TRACE(COMP_RATE, "<---- dm_restore_dynamic_mechanism_state(): driver is going to unload\n"); + return; + } + + if(priv->rate_adaptive.rate_adaptive_disabled) + return; + if( !(priv->rtllib->mode==WIRELESS_MODE_N_24G || + priv->rtllib->mode==WIRELESS_MODE_N_5G)) + return; + { + u32 ratr_value; + ratr_value = reg_ratr; + if(priv->rf_type == RF_1T2R) + { + ratr_value &=~ (RATE_ALL_OFDM_2SS); + } + write_nic_dword(dev, RATR0, ratr_value); + write_nic_byte(dev, UFWP, 1); +#if 0 + u1Byte index; + u4Byte input_value; + index = (u1Byte)((((pu4Byte)(val))[0]) >> 28); + input_value = (((pu4Byte)(val))[0]) & 0x0fffffff; + PlatformEFIOWrite4Byte(dev, RATR0+index*4, input_value); +#endif + } + if(priv->btxpower_trackingInit && priv->btxpower_tracking){ + dm_txpower_reset_recovery(dev); + } + + dm_bb_initialgain_restore(dev); + +} + +static void dm_bb_initialgain_restore(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 bit_mask = 0x7f; + + if(dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI) + return; + + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8); + rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bit_mask, (u32)priv->initgain_backup.xaagccore1); + rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bit_mask, (u32)priv->initgain_backup.xbagccore1); + rtl8192_setBBreg(dev, rOFDM0_XCAGCCore1, bit_mask, (u32)priv->initgain_backup.xcagccore1); + rtl8192_setBBreg(dev, rOFDM0_XDAGCCore1, bit_mask, (u32)priv->initgain_backup.xdagccore1); + bit_mask = bMaskByte2; + rtl8192_setBBreg(dev, rCCK0_CCA, bit_mask, (u32)priv->initgain_backup.cca); + + RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc50 is %x\n",priv->initgain_backup.xaagccore1); + RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc58 is %x\n",priv->initgain_backup.xbagccore1); + RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc60 is %x\n",priv->initgain_backup.xcagccore1); + RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xc68 is %x\n",priv->initgain_backup.xdagccore1); + RT_TRACE(COMP_DIG, "dm_BBInitialGainRestore 0xa0a is %x\n",priv->initgain_backup.cca); + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1); + +} + + +extern void dm_backup_dynamic_mechanism_state(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->bswitch_fsync = false; + priv->bfsync_processing = false; + dm_bb_initialgain_backup(dev); + +} + + +static void dm_bb_initialgain_backup(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 bit_mask = bMaskByte0; + + if(dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI) + return; + + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8); + priv->initgain_backup.xaagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bit_mask); + priv->initgain_backup.xbagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bit_mask); + priv->initgain_backup.xcagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bit_mask); + priv->initgain_backup.xdagccore1 = (u8)rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bit_mask); + bit_mask = bMaskByte2; + priv->initgain_backup.cca = (u8)rtl8192_QueryBBReg(dev, rCCK0_CCA, bit_mask); + + RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc50 is %x\n",priv->initgain_backup.xaagccore1); + RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc58 is %x\n",priv->initgain_backup.xbagccore1); + RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc60 is %x\n",priv->initgain_backup.xcagccore1); + RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xc68 is %x\n",priv->initgain_backup.xdagccore1); + RT_TRACE(COMP_DIG, "BBInitialGainBackup 0xa0a is %x\n",priv->initgain_backup.cca); + +} + +#endif +extern void dm_change_dynamic_initgain_thresh(struct net_device *dev, + u32 dm_type, + u32 dm_value) +{ +#ifdef RTL8192SE + struct r8192_priv *priv = rtllib_priv(dev); + if(dm_type == DIG_TYPE_THRESH_HIGHPWR_HIGH) + priv->MidHighPwrTHR_L2 = (u8)dm_value; + else if(dm_type == DIG_TYPE_THRESH_HIGHPWR_LOW) + priv->MidHighPwrTHR_L1 = (u8)dm_value; + return; +#endif + if (dm_type == DIG_TYPE_THRESH_HIGH) + { + dm_digtable.rssi_high_thresh = dm_value; + } + else if (dm_type == DIG_TYPE_THRESH_LOW) + { + dm_digtable.rssi_low_thresh = dm_value; + } + else if (dm_type == DIG_TYPE_THRESH_HIGHPWR_HIGH) + { + dm_digtable.rssi_high_power_highthresh = dm_value; + } + else if (dm_type == DIG_TYPE_THRESH_HIGHPWR_HIGH) + { + dm_digtable.rssi_high_power_highthresh = dm_value; + } + else if (dm_type == DIG_TYPE_ENABLE) + { + dm_digtable.dig_state = DM_STA_DIG_MAX; + dm_digtable.dig_enable_flag = true; + } + else if (dm_type == DIG_TYPE_DISABLE) + { + dm_digtable.dig_state = DM_STA_DIG_MAX; + dm_digtable.dig_enable_flag = false; + } + else if (dm_type == DIG_TYPE_DBG_MODE) + { + if(dm_value >= DM_DBG_MAX) + dm_value = DM_DBG_OFF; + dm_digtable.dbg_mode = (u8)dm_value; + } + else if (dm_type == DIG_TYPE_RSSI) + { + if(dm_value > 100) + dm_value = 30; + dm_digtable.rssi_val = (long)dm_value; + } + else if (dm_type == DIG_TYPE_ALGORITHM) + { + if (dm_value >= DIG_ALGO_MAX) + dm_value = DIG_ALGO_BY_FALSE_ALARM; + if(dm_digtable.dig_algorithm != (u8)dm_value) + dm_digtable.dig_algorithm_switch = 1; + dm_digtable.dig_algorithm = (u8)dm_value; + } + else if (dm_type == DIG_TYPE_BACKOFF) + { + if(dm_value > 30) + dm_value = 30; + dm_digtable.backoff_val = (u8)dm_value; + } + else if(dm_type == DIG_TYPE_RX_GAIN_MIN) + { + if(dm_value == 0) + dm_value = 0x1; + dm_digtable.rx_gain_range_min = (u8)dm_value; + } + else if(dm_type == DIG_TYPE_RX_GAIN_MAX) + { + if(dm_value > 0x50) + dm_value = 0x50; + dm_digtable.rx_gain_range_max = (u8)dm_value; + } +} +extern void +dm_change_fsync_setting( + struct net_device *dev, + s32 DM_Type, + s32 DM_Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if (DM_Type == 0) + { + if(DM_Value > 1) + DM_Value = 1; + priv->framesyncMonitor = (u8)DM_Value; + } +} + +extern void +dm_change_rxpath_selection_setting( + struct net_device *dev, + s32 DM_Type, + s32 DM_Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + prate_adaptive pRA = (prate_adaptive)&(priv->rate_adaptive); + + + if(DM_Type == 0) + { + if(DM_Value > 1) + DM_Value = 1; + DM_RxPathSelTable.Enable = (u8)DM_Value; + } + else if(DM_Type == 1) + { + if(DM_Value > 1) + DM_Value = 1; + DM_RxPathSelTable.DbgMode = (u8)DM_Value; + } + else if(DM_Type == 2) + { + if(DM_Value > 40) + DM_Value = 40; + DM_RxPathSelTable.SS_TH_low = (u8)DM_Value; + } + else if(DM_Type == 3) + { + if(DM_Value > 25) + DM_Value = 25; + DM_RxPathSelTable.diff_TH = (u8)DM_Value; + } + else if(DM_Type == 4) + { + if(DM_Value >= CCK_Rx_Version_MAX) + DM_Value = CCK_Rx_Version_1; + DM_RxPathSelTable.cck_method= (u8)DM_Value; + } + else if(DM_Type == 10) + { + if(DM_Value > 100) + DM_Value = 50; + DM_RxPathSelTable.rf_rssi[0] = (u8)DM_Value; + } + else if(DM_Type == 11) + { + if(DM_Value > 100) + DM_Value = 50; + DM_RxPathSelTable.rf_rssi[1] = (u8)DM_Value; + } + else if(DM_Type == 12) + { + if(DM_Value > 100) + DM_Value = 50; + DM_RxPathSelTable.rf_rssi[2] = (u8)DM_Value; + } + else if(DM_Type == 13) + { + if(DM_Value > 100) + DM_Value = 50; + DM_RxPathSelTable.rf_rssi[3] = (u8)DM_Value; + } + else if(DM_Type == 20) + { + if(DM_Value > 1) + DM_Value = 1; + pRA->ping_rssi_enable = (u8)DM_Value; + } + else if(DM_Type == 21) + { + if(DM_Value > 30) + DM_Value = 30; + pRA->ping_rssi_thresh_for_ra = DM_Value; + } +} + +#if 0 +extern void dm_force_tx_fw_info(struct net_device *dev, + u32 force_type, + u32 force_value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if (force_type == 0) + { + priv->tx_fwinfo_force_subcarriermode = 0; + } + else if(force_type == 1) + { + priv->tx_fwinfo_force_subcarriermode = 1; + if(force_value > 3) + force_value = 3; + priv->tx_fwinfo_force_subcarrierval = (u8)force_value; + } +} +#endif + +static void dm_dig_init(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + dm_digtable.dig_enable_flag = true; + dm_digtable.Backoff_Enable_Flag = true; + +#ifdef RTL8192SE + if((priv->DM_Type == DM_Type_ByDriver) && (priv->pFirmware->FirmwareVersion >= 0x3c)) + dm_digtable.dig_algorithm = DIG_ALGO_BY_TOW_PORT; + else + dm_digtable.dig_algorithm = DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM; +#else + dm_digtable.dig_algorithm = DIG_ALGO_BY_RSSI; +#endif + + dm_digtable.Dig_TwoPort_Algorithm = DIG_TWO_PORT_ALGO_RSSI; + dm_digtable.Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX; + dm_digtable.dbg_mode = DM_DBG_OFF; + dm_digtable.dig_algorithm_switch = 0; + + dm_digtable.dig_state = DM_STA_DIG_MAX; + dm_digtable.dig_highpwr_state = DM_STA_DIG_MAX; + dm_digtable.CurSTAConnectState = dm_digtable.PreSTAConnectState = DIG_STA_DISCONNECT; + dm_digtable.CurAPConnectState = dm_digtable.PreAPConnectState = DIG_AP_DISCONNECT; + dm_digtable.initialgain_lowerbound_state = false; + + dm_digtable.rssi_low_thresh = DM_DIG_THRESH_LOW; + dm_digtable.rssi_high_thresh = DM_DIG_THRESH_HIGH; + + dm_digtable.FALowThresh = DM_FALSEALARM_THRESH_LOW; + dm_digtable.FAHighThresh = DM_FALSEALARM_THRESH_HIGH; + + dm_digtable.rssi_high_power_lowthresh = DM_DIG_HIGH_PWR_THRESH_LOW; + dm_digtable.rssi_high_power_highthresh = DM_DIG_HIGH_PWR_THRESH_HIGH; + + dm_digtable.rssi_val = 50; + dm_digtable.backoff_val = DM_DIG_BACKOFF; + dm_digtable.rx_gain_range_max = DM_DIG_MAX; + if(priv->CustomerID == RT_CID_819x_Netcore) + dm_digtable.rx_gain_range_min = DM_DIG_MIN_Netcore; + else + dm_digtable.rx_gain_range_min = DM_DIG_MIN; + + dm_digtable.BackoffVal_range_max = DM_DIG_BACKOFF_MAX; + dm_digtable.BackoffVal_range_min = DM_DIG_BACKOFF_MIN; +} + +void dm_FalseAlarmCounterStatistics(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 ret_value; + PFALSE_ALARM_STATISTICS FalseAlmCnt = &(priv->FalseAlmCnt); + + ret_value = rtl8192_QueryBBReg(dev, rOFDM_PHYCounter1, bMaskDWord); + FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16); + + ret_value = rtl8192_QueryBBReg(dev, rOFDM_PHYCounter2, bMaskDWord); + FalseAlmCnt->Cnt_Rate_Illegal = (ret_value&0xffff); + FalseAlmCnt->Cnt_Crc8_fail = ((ret_value&0xffff0000)>>16); + ret_value = rtl8192_QueryBBReg(dev, rOFDM_PHYCounter3, bMaskDWord); + FalseAlmCnt->Cnt_Mcs_fail = (ret_value&0xffff); + + FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Parity_Fail + FalseAlmCnt->Cnt_Rate_Illegal + + FalseAlmCnt->Cnt_Crc8_fail + FalseAlmCnt->Cnt_Mcs_fail; + + ret_value = rtl8192_QueryBBReg(dev, 0xc64, bMaskDWord); + FalseAlmCnt->Cnt_Cck_fail = (ret_value&0xffff); + FalseAlmCnt->Cnt_all = (FalseAlmCnt->Cnt_Parity_Fail + + FalseAlmCnt->Cnt_Rate_Illegal + + FalseAlmCnt->Cnt_Crc8_fail + + FalseAlmCnt->Cnt_Mcs_fail + + FalseAlmCnt->Cnt_Cck_fail); + + RT_TRACE(COMP_DIG, "Cnt_Ofdm_fail = %d, Cnt_Cck_fail = %d, Cnt_all = %d\n", + FalseAlmCnt->Cnt_Ofdm_fail, FalseAlmCnt->Cnt_Cck_fail , FalseAlmCnt->Cnt_all); +} + +#ifdef RTL8192SE +static void dm_CtrlInitGainAPByFalseAlarm(struct net_device *dev) +{ + static u8 binitialized = false; + + { + binitialized = false; + dm_digtable.Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX; + return; + } +} +#endif + +static void dm_ctrl_initgain_byrssi(struct net_device *dev) +{ + + if (dm_digtable.dig_enable_flag == false) + return; + + if(dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM) + dm_ctrl_initgain_byrssi_by_fwfalse_alarm(dev); + else if(dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI) + dm_ctrl_initgain_byrssi_by_driverrssi(dev); +#ifdef RTL8192SE + else if(dm_digtable.dig_algorithm == DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM) + dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm(dev); + else if(dm_digtable.dig_algorithm == DIG_ALGO_BY_TOW_PORT) + dm_CtrlInitGainByTwoPort(dev); +#endif + else + return; +} + +#ifdef RTL8192SE +static void dm_CtrlInitGainByTwoPort(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(rtllib_act_scanning(priv->rtllib,true) == true) + return; + + if((priv->rtllib->state > RTLLIB_NOLINK) && (priv->rtllib->state < RTLLIB_LINKED)) + dm_digtable.CurSTAConnectState = DIG_STA_BEFORE_CONNECT; + else if((priv->rtllib->state == RTLLIB_LINKED) ||(priv->rtllib->state == RTLLIB_LINKED_SCANNING)) + dm_digtable.CurSTAConnectState = DIG_STA_CONNECT; + else + dm_digtable.CurSTAConnectState = DIG_STA_DISCONNECT; + + dm_digtable.rssi_val = priv->undecorated_smoothed_pwdb; + + if(dm_digtable.CurSTAConnectState != DIG_STA_DISCONNECT) + { + if(dm_digtable.Dig_TwoPort_Algorithm == DIG_TWO_PORT_ALGO_FALSE_ALARM) + { + dm_digtable.Dig_TwoPort_Algorithm = DIG_TWO_PORT_ALGO_RSSI; + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_DIG_MODE_SS); + } + } + + dm_FalseAlarmCounterStatistics(dev); + dm_initial_gain_STABeforeConnect(dev); + dm_CtrlInitGainAPByFalseAlarm(dev); + + dm_digtable.PreSTAConnectState = dm_digtable.CurSTAConnectState; +} +#endif + +/*----------------------------------------------------------------------------- + * Function: dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm() + * + * Overview: Driver monitor RSSI and False Alarm to change initial gain. + Only change initial gain during link in progress. + * + * Input: IN PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 03/04/2009 hpfan Create Version 0. + * + *---------------------------------------------------------------------------*/ + +#ifdef RTL8192SE +static void dm_CtrlInitGainBeforeConnectByRssiAndFalseAlarm(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(rtllib_act_scanning(priv->rtllib,true) == true) + return; + + if((priv->rtllib->state > RTLLIB_NOLINK) && (priv->rtllib->state < RTLLIB_LINKED)) + dm_digtable.CurSTAConnectState = DIG_STA_BEFORE_CONNECT; + else if((priv->rtllib->state == RTLLIB_LINKED) ||(priv->rtllib->state == RTLLIB_LINKED_SCANNING)) + dm_digtable.CurSTAConnectState = DIG_STA_CONNECT; + else + dm_digtable.CurSTAConnectState = DIG_STA_DISCONNECT; + + if(dm_digtable.dbg_mode == DM_DBG_OFF) + dm_digtable.rssi_val = priv->undecorated_smoothed_pwdb; + + dm_FalseAlarmCounterStatistics(dev); + dm_initial_gain_STABeforeConnect(dev); + dm_digtable.PreSTAConnectState = dm_digtable.CurSTAConnectState; + +} +#endif +static void dm_ctrl_initgain_byrssi_by_driverrssi( + struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 i; + static u8 fw_dig=0; + + if (dm_digtable.dig_enable_flag == false) + return; + + if(dm_digtable.dig_algorithm_switch) + fw_dig = 0; + if(fw_dig <= 3) + { + for(i=0; i<3; i++) + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8); + fw_dig++; + dm_digtable.dig_state = DM_STA_DIG_OFF; + } + + if(priv->rtllib->state == RTLLIB_LINKED) + dm_digtable.CurSTAConnectState = DIG_STA_CONNECT; + else + dm_digtable.CurSTAConnectState = DIG_STA_DISCONNECT; + + + if(dm_digtable.dbg_mode == DM_DBG_OFF) + dm_digtable.rssi_val = priv->undecorated_smoothed_pwdb; + dm_initial_gain(dev); + dm_pd_th(dev); + dm_cs_ratio(dev); + if(dm_digtable.dig_algorithm_switch) + dm_digtable.dig_algorithm_switch = 0; + dm_digtable.PreSTAConnectState = dm_digtable.CurSTAConnectState; + +} + +static void dm_ctrl_initgain_byrssi_by_fwfalse_alarm( + struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u32 reset_cnt = 0; + u8 i; + + if (dm_digtable.dig_enable_flag == false) + return; + + if(dm_digtable.dig_algorithm_switch) + { + dm_digtable.dig_state = DM_STA_DIG_MAX; + for(i=0; i<3; i++) + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1); + dm_digtable.dig_algorithm_switch = 0; + } + + if (priv->rtllib->state != RTLLIB_LINKED) + return; + + if ((priv->undecorated_smoothed_pwdb > dm_digtable.rssi_low_thresh) && + (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_thresh)) + { + return; + } + if ((priv->undecorated_smoothed_pwdb <= dm_digtable.rssi_low_thresh)) + { + if (dm_digtable.dig_state == DM_STA_DIG_OFF && + (priv->reset_count == reset_cnt)) + { + return; + } + else + { + reset_cnt = priv->reset_count; + } + + dm_digtable.dig_highpwr_state = DM_STA_DIG_MAX; + dm_digtable.dig_state = DM_STA_DIG_OFF; + + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x8); + + write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x17); + write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x17); + write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x17); + write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x17); + + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x40); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x00); + #endif + /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(pAdapter, rOFDM0_RxDetector1, 0x40); + */ + + + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + + write_nic_byte(dev, 0xa0a, 0x08); + + return; + + } + + if ((priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_thresh) ) + { + u8 reset_flag = 0; + + if (dm_digtable.dig_state == DM_STA_DIG_ON && + (priv->reset_count == reset_cnt)) + { + dm_ctrl_initgain_byrssi_highpwr(dev); + return; + } + else + { + if (priv->reset_count != reset_cnt) + reset_flag = 1; + + reset_cnt = priv->reset_count; + } + + dm_digtable.dig_state = DM_STA_DIG_ON; + + if (reset_flag == 1) + { + write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x2c); + write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x2c); + write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x2c); + write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x2c); + } + else + { + write_nic_byte(dev, rOFDM0_XAAGCCore1, 0x20); + write_nic_byte(dev, rOFDM0_XBAGCCore1, 0x20); + write_nic_byte(dev, rOFDM0_XCAGCCore1, 0x20); + write_nic_byte(dev, rOFDM0_XDAGCCore1, 0x20); + } + + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20); + #endif + /* + else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + */ + + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x44); + + write_nic_byte(dev, 0xa0a, 0xcd); + + + rtl8192_setBBreg(dev, UFWP, bMaskByte1, 0x1); + + } + + dm_ctrl_initgain_byrssi_highpwr(dev); + +} + + +static void dm_ctrl_initgain_byrssi_highpwr( + struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u32 reset_cnt_highpwr = 0; + + if ((priv->undecorated_smoothed_pwdb > dm_digtable.rssi_high_power_lowthresh) && + (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_power_highthresh)) + { + return; + } + + if (priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_power_highthresh) + { + if (dm_digtable.dig_highpwr_state == DM_STA_DIG_ON && + (priv->reset_count == reset_cnt_highpwr)) + return; + else + dm_digtable.dig_highpwr_state = DM_STA_DIG_ON; + + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x41); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x10); + #endif + + /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(dev, rOFDM0_RxDetector1, 0x41); + */ + + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x43); + } + else + { + if (dm_digtable.dig_highpwr_state == DM_STA_DIG_OFF&& + (priv->reset_count == reset_cnt_highpwr)) + return; + else + dm_digtable.dig_highpwr_state = DM_STA_DIG_OFF; + + if (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_power_lowthresh && + priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_thresh) + { + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20); + #endif + /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + */ + + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x44); + } + } + + reset_cnt_highpwr = priv->reset_count; + +} + + +static void dm_initial_gain( + struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 initial_gain=0; + static u8 initialized=0, force_write=0; + static u32 reset_cnt=0; + + if(dm_digtable.dig_algorithm_switch) + { + initialized = 0; + reset_cnt = 0; + } + + if(rtllib_act_scanning(priv->rtllib,true) == true) + { + force_write = 1; + return; + } + + if(dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState) + { + if(dm_digtable.CurSTAConnectState == DIG_STA_CONNECT) + { + if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) > dm_digtable.rx_gain_range_max) + dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_max; + else if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) < dm_digtable.rx_gain_range_min) + dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_min; + else + dm_digtable.cur_ig_value = dm_digtable.rssi_val+10-dm_digtable.backoff_val; + } + else + { + if(dm_digtable.cur_ig_value == 0) + dm_digtable.cur_ig_value = priv->DefaultInitialGain[0]; + else + dm_digtable.cur_ig_value = dm_digtable.pre_ig_value; + } + } + else + { + dm_digtable.cur_ig_value = priv->DefaultInitialGain[0]; + dm_digtable.pre_ig_value = 0; + } + + if(priv->reset_count != reset_cnt) + { + force_write = 1; + reset_cnt = priv->reset_count; + } + + if(dm_digtable.pre_ig_value != read_nic_byte(dev, rOFDM0_XAAGCCore1)) + force_write = 1; + + { + if((dm_digtable.pre_ig_value != dm_digtable.cur_ig_value) + || !initialized || force_write) + { + initial_gain = (u8)dm_digtable.cur_ig_value; + write_nic_byte(dev, rOFDM0_XAAGCCore1, initial_gain); + write_nic_byte(dev, rOFDM0_XBAGCCore1, initial_gain); + write_nic_byte(dev, rOFDM0_XCAGCCore1, initial_gain); + write_nic_byte(dev, rOFDM0_XDAGCCore1, initial_gain); + dm_digtable.pre_ig_value = dm_digtable.cur_ig_value; + initialized = 1; + force_write = 0; + } + } +} + +void dm_initial_gain_STABeforeConnect( + struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 initial_gain=0; + static u8 initialized=0, force_write=0; + + RT_TRACE(COMP_DIG, "PreSTAConnectState = %x, CurSTAConnectState = %x\n", + dm_digtable.PreSTAConnectState, dm_digtable.CurSTAConnectState); + + + if((dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState) || + (dm_digtable.CurSTAConnectState == DIG_STA_BEFORE_CONNECT)) + { + if(dm_digtable.CurSTAConnectState == DIG_STA_BEFORE_CONNECT) + { + if(priv->rtllib->eRFPowerState != eRfOn) + return; + + if(dm_digtable.Backoff_Enable_Flag == true) + { + if(priv->FalseAlmCnt.Cnt_all > dm_digtable.FAHighThresh) + { + if((dm_digtable.backoff_val -6) < dm_digtable.BackoffVal_range_min) + dm_digtable.backoff_val = dm_digtable.BackoffVal_range_min; + else + dm_digtable.backoff_val -= 6; + } + else if(priv->FalseAlmCnt.Cnt_all < dm_digtable.FALowThresh) + { + if((dm_digtable.backoff_val+6) > dm_digtable.BackoffVal_range_max) + dm_digtable.backoff_val = dm_digtable.BackoffVal_range_max; + else + dm_digtable.backoff_val +=6; + } + } + else + dm_digtable.backoff_val =DM_DIG_BACKOFF; + + if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) > dm_digtable.rx_gain_range_max) + dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_max; + else if((dm_digtable.rssi_val+10-dm_digtable.backoff_val) < dm_digtable.rx_gain_range_min) + dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_min; + else + dm_digtable.cur_ig_value = dm_digtable.rssi_val+10-dm_digtable.backoff_val; + + if(priv->FalseAlmCnt.Cnt_all > 10000) + dm_digtable.cur_ig_value = (dm_digtable.cur_ig_value>0x33)?dm_digtable.cur_ig_value:0x33; + + if(priv->FalseAlmCnt.Cnt_all > 16000) + dm_digtable.cur_ig_value = dm_digtable.rx_gain_range_max; + + } + else + { + return; + } + } + else + { + dm_digtable.Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX; + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_DIG_ENABLE); + + dm_digtable.backoff_val = DM_DIG_BACKOFF; + dm_digtable.cur_ig_value = priv->DefaultInitialGain[0]; + dm_digtable.pre_ig_value = 0; + return; + } + + if(dm_digtable.pre_ig_value != rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bMaskByte0)) + force_write = 1; + + if((dm_digtable.pre_ig_value != dm_digtable.cur_ig_value) || !initialized || force_write) + { + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_DIG_DISABLE); + + initial_gain = (u8)dm_digtable.cur_ig_value; + + rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, initial_gain); + rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, initial_gain); + dm_digtable.pre_ig_value = dm_digtable.cur_ig_value; + initialized = 1; + force_write = 0; + } + + RT_TRACE(COMP_DIG, "CurIGValue = 0x%x, pre_ig_value = 0x%x, backoff_val = %d\n", + dm_digtable.cur_ig_value, dm_digtable.pre_ig_value, dm_digtable.backoff_val); + +} + +static void dm_pd_th( + struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u8 initialized=0, force_write=0; + static u32 reset_cnt = 0; + + if(dm_digtable.dig_algorithm_switch) + { + initialized = 0; + reset_cnt = 0; + } + + if(dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState) + { + if(dm_digtable.CurSTAConnectState == DIG_STA_CONNECT) + { + if (dm_digtable.rssi_val >= dm_digtable.rssi_high_power_highthresh) + dm_digtable.curpd_thstate = DIG_PD_AT_HIGH_POWER; + else if ((dm_digtable.rssi_val <= dm_digtable.rssi_low_thresh)) + dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER; + else if ((dm_digtable.rssi_val >= dm_digtable.rssi_high_thresh) && + (dm_digtable.rssi_val < dm_digtable.rssi_high_power_lowthresh)) + dm_digtable.curpd_thstate = DIG_PD_AT_NORMAL_POWER; + else + dm_digtable.curpd_thstate = dm_digtable.prepd_thstate; + } + else + { + dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER; + } + } + else + { + dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER; + } + + if(priv->reset_count != reset_cnt) + { + force_write = 1; + reset_cnt = priv->reset_count; + } + + { + if((dm_digtable.prepd_thstate != dm_digtable.curpd_thstate) || + (initialized<=3) || force_write) + { + if(dm_digtable.curpd_thstate == DIG_PD_AT_LOW_POWER) + { + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x40); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x00); + #endif + /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(dev, rOFDM0_RxDetector1, 0x40); + */ + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + } + else if(dm_digtable.curpd_thstate == DIG_PD_AT_NORMAL_POWER) + { + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x20); + #endif + /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(dev, rOFDM0_RxDetector1, 0x42); + */ + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x44); + } + else if(dm_digtable.curpd_thstate == DIG_PD_AT_HIGH_POWER) + { + if (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector1, 0x41); + #else + write_nic_byte(dev, (rOFDM0_XATxAFE+3), 0x10); + #endif + /*else if (priv->card_8192 == HARDWARE_TYPE_RTL8190P) + write_nic_byte(dev, rOFDM0_RxDetector1, 0x41); + */ + } + else + write_nic_byte(dev, rOFDM0_RxDetector1, 0x43); + } + dm_digtable.prepd_thstate = dm_digtable.curpd_thstate; + if(initialized <= 3) + initialized++; + force_write = 0; + } + } +} + +static void dm_cs_ratio( + struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u8 initialized=0,force_write=0; + static u32 reset_cnt = 0; + + if(dm_digtable.dig_algorithm_switch) + { + initialized = 0; + reset_cnt = 0; + } + + if(dm_digtable.PreSTAConnectState == dm_digtable.CurSTAConnectState) + { + if(dm_digtable.CurSTAConnectState == DIG_STA_CONNECT) + { + if ((dm_digtable.rssi_val <= dm_digtable.rssi_low_thresh)) + dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER; + else if ((dm_digtable.rssi_val >= dm_digtable.rssi_high_thresh) ) + dm_digtable.curcs_ratio_state = DIG_CS_RATIO_HIGHER; + else + dm_digtable.curcs_ratio_state = dm_digtable.precs_ratio_state; + } + else + { + dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER; + } + } + else + { + dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER; + } + + if(priv->reset_count != reset_cnt) + { + force_write = 1; + reset_cnt = priv->reset_count; + } + + + { + if((dm_digtable.precs_ratio_state != dm_digtable.curcs_ratio_state) || + !initialized || force_write) + { + if(dm_digtable.curcs_ratio_state == DIG_CS_RATIO_LOWER) + { + write_nic_byte(dev, 0xa0a, 0x08); + } + else if(dm_digtable.curcs_ratio_state == DIG_CS_RATIO_HIGHER) + { + write_nic_byte(dev, 0xa0a, 0xcd); + } + dm_digtable.precs_ratio_state = dm_digtable.curcs_ratio_state; + initialized = 1; + force_write = 0; + } + } +} + +extern void dm_init_edca_turbo(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->bcurrent_turbo_EDCA = false; + priv->rtllib->bis_any_nonbepkts = false; + priv->bis_cur_rdlstate = false; +} + +#if 1 +static void dm_check_edca_turbo( + struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + + static unsigned long lastTxOkCnt = 0; + static unsigned long lastRxOkCnt = 0; + unsigned long curTxOkCnt = 0; + unsigned long curRxOkCnt = 0; + + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + { + goto dm_CheckEdcaTurbo_EXIT; + } + if(priv->rtllib->state != RTLLIB_LINKED) + { + goto dm_CheckEdcaTurbo_EXIT; + } + if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_EDCA_TURBO) + { + goto dm_CheckEdcaTurbo_EXIT; + } + + { + u8* peername[11] = {"unknown", "realtek_90", "realtek_92se","broadcom", "ralink", "atheros", "cisco", "marvell", "92u_softap", "self_softap"}; + static int wb_tmp = 0; + if (wb_tmp == 0){ + printk("%s():iot peer is %s, bssid:"MAC_FMT"\n",__FUNCTION__,peername[pHTInfo->IOTPeer], MAC_ARG(priv->rtllib->current_network.bssid)); + wb_tmp = 1; + } + } + if(!priv->rtllib->bis_any_nonbepkts) + { + curTxOkCnt = priv->stats.txbytesunicast - lastTxOkCnt; + curRxOkCnt = priv->stats.rxbytesunicast - lastRxOkCnt; + if(pHTInfo->IOTAction & HT_IOT_ACT_EDCA_BIAS_ON_RX) + { + if(curTxOkCnt > 4*curRxOkCnt) + { + if(priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA) + { + write_nic_dword(dev, EDCAPARA_BE, edca_setting_UL[pHTInfo->IOTPeer]); + priv->bis_cur_rdlstate = false; + } + } + else + { + if(!priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA) + { + if(priv->rtllib->mode == WIRELESS_MODE_G) + write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL_GMode[pHTInfo->IOTPeer]); + else + write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL[pHTInfo->IOTPeer]); + priv->bis_cur_rdlstate = true; + } + } + priv->bcurrent_turbo_EDCA = true; + } + else + { + if(curRxOkCnt > 4*curTxOkCnt) + { + if(!priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA) + { + if(priv->rtllib->mode == WIRELESS_MODE_G) + write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL_GMode[pHTInfo->IOTPeer]); + else + write_nic_dword(dev, EDCAPARA_BE, edca_setting_DL[pHTInfo->IOTPeer]); + priv->bis_cur_rdlstate = true; + } + } + else + { + if(priv->bis_cur_rdlstate || !priv->bcurrent_turbo_EDCA) + { + write_nic_dword(dev, EDCAPARA_BE, edca_setting_UL[pHTInfo->IOTPeer]); + priv->bis_cur_rdlstate = false; + } + + } + + priv->bcurrent_turbo_EDCA = true; + } + } + else + { + if(priv->bcurrent_turbo_EDCA) + { + + { + u8 u1bAIFS; + u32 u4bAcParam; + struct rtllib_qos_parameters *qos_parameters = &priv->rtllib->current_network.qos_data.parameters; + u8 mode = priv->rtllib->mode; + + dm_init_edca_turbo(dev); + u1bAIFS = qos_parameters->aifs[0] * ((mode&(IEEE_G|IEEE_N_24G)) ?9:20) + aSifsTime; + u4bAcParam = ((((u32)(qos_parameters->tx_op_limit[0]))<< AC_PARAM_TXOP_LIMIT_OFFSET)| + (((u32)(qos_parameters->cw_max[0]))<< AC_PARAM_ECW_MAX_OFFSET)| + (((u32)(qos_parameters->cw_min[0]))<< AC_PARAM_ECW_MIN_OFFSET)| + ((u32)u1bAIFS << AC_PARAM_AIFS_OFFSET)); + write_nic_dword(dev, EDCAPARA_BE, u4bAcParam); + + { + + PACI_AIFSN pAciAifsn = (PACI_AIFSN)&(qos_parameters->aifs[0]); + u8 AcmCtrl = read_nic_byte( dev, AcmHwCtrl ); + if( pAciAifsn->f.ACM ) + { + AcmCtrl |= AcmHw_BeqEn; + } + else + { + AcmCtrl &= (~AcmHw_BeqEn); + } + + RT_TRACE( COMP_QOS,"SetHwReg8190pci(): [HW_VAR_ACM_CTRL] Write 0x%X\n", AcmCtrl ) ; + write_nic_byte(dev, AcmHwCtrl, AcmCtrl ); + } + } + priv->bcurrent_turbo_EDCA = false; + } + } + + +dm_CheckEdcaTurbo_EXIT: + priv->rtllib->bis_any_nonbepkts = false; + lastTxOkCnt = priv->stats.txbytesunicast; + lastRxOkCnt = priv->stats.rxbytesunicast; +} +#endif + +extern void DM_CTSToSelfSetting(struct net_device * dev,u32 DM_Type, u32 DM_Value) +{ + struct r8192_priv *priv = rtllib_priv((struct net_device *)dev); + + if (DM_Type == 0) + { + if(DM_Value > 1) + DM_Value = 1; + priv->rtllib->bCTSToSelfEnable = (bool)DM_Value; + } + else if(DM_Type == 1) + { + if(DM_Value >= 50) + DM_Value = 50; + priv->rtllib->CTSToSelfTH = (u8)DM_Value; + } +} + +static void dm_init_ctstoself(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv((struct net_device *)dev); + + priv->rtllib->bCTSToSelfEnable = true; + priv->rtllib->CTSToSelfTH = CTSToSelfTHVal; +} + +static void dm_ctstoself(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv((struct net_device *)dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + static unsigned long lastTxOkCnt = 0; + static unsigned long lastRxOkCnt = 0; + unsigned long curTxOkCnt = 0; + unsigned long curRxOkCnt = 0; + + if(priv->rtllib->bCTSToSelfEnable != true) + { + pHTInfo->IOTAction &= ~HT_IOT_ACT_FORCED_CTS2SELF; + return; + } + if(pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + { + curTxOkCnt = priv->stats.txbytesunicast - lastTxOkCnt; + curRxOkCnt = priv->stats.rxbytesunicast - lastRxOkCnt; + if(curRxOkCnt > 4*curTxOkCnt) + { + pHTInfo->IOTAction &= ~HT_IOT_ACT_FORCED_CTS2SELF; + } + else + { + #if 1 + pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF; + #else + if(priv->undecorated_smoothed_pwdb < priv->rtllib->CTSToSelfTH) + { + pHTInfo->IOTAction &= ~HT_IOT_ACT_FORCED_CTS2SELF; + } + else if(priv->undecorated_smoothed_pwdb >= (priv->rtllib->CTSToSelfTH+5)) + { + pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF; + } + #endif + } + + lastTxOkCnt = priv->stats.txbytesunicast; + lastRxOkCnt = priv->stats.rxbytesunicast; + } +} + + +static void +dm_Init_WA_Broadcom_IOT(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv((struct net_device *)dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + + pHTInfo->bWAIotBroadcom = false; + pHTInfo->WAIotTH = WAIotTHVal; +} + +#ifdef RTL8192SE +static void +dm_WA_Broadcom_IOT(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv((struct net_device *)dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + u8 update=0; + static enum rtllib_state connectState = RTLLIB_NOLINK; + + if( (pHTInfo->bWAIotBroadcom != true) || + (priv->rtllib->mode == WIRELESS_MODE_B) || + (pHTInfo->bCurBW40MHz)) + { + if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + pHTInfo->IOTAction &= ~HT_IOT_ACT_WA_IOT_Broadcom; + update = 1; + printk(" dm_WA_Broadcom_IOT(), disable HT_IOT_ACT_WA_IOT_Broadcom\n"); + } + else + return; + } + + if(connectState == RTLLIB_LINKED && priv->rtllib->state == RTLLIB_LINKED) + { + if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + pHTInfo->IOTAction &= ~HT_IOT_ACT_WA_IOT_Broadcom; + update = 1; + pHTInfo->bWAIotBroadcom = false; + printk("dm_WA_Broadcom_IOT(), from connect to disconnected, disable HT_IOT_ACT_WA_IOT_Broadcom\n"); + } + } + connectState = priv->rtllib->state; + + if(!update && pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + { + if(priv->undecorated_smoothed_pwdb < pHTInfo->WAIotTH) + { + if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + pHTInfo->IOTAction &= ~HT_IOT_ACT_WA_IOT_Broadcom; + update = 1; + printk("dm_WA_Broadcom_IOT() ==> WA_IOT enable cck rates\n"); + } + } + else if(priv->undecorated_smoothed_pwdb >= (priv->rtllib->CTSToSelfTH+5)) + { + if((pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) == 0) + { + pHTInfo->IOTAction |= HT_IOT_ACT_WA_IOT_Broadcom; + update = 1; + printk("dm_WA_Broadcom_IOT() ==> WA_IOT disable cck rates\n"); + } + } + } + + if(update){ + if(priv->rtllib->bUseRAMask){ + priv->rtllib->UpdateHalRAMaskHandler( + dev, + false, + 0, + priv->rtllib->pHTInfo->PeerMimoPs, + priv->rtllib->mode, + priv->rtllib->pHTInfo->bCurTxBW40MHz, + 0); + }else{ + priv->ops->update_ratr_table(dev, priv->rtllib->dot11HTOperationalRateSet, NULL); + } + priv->rtllib->SetHwRegHandler( dev, HW_VAR_BASIC_RATE, (u8*)(&priv->basic_rate)); + } +} +#endif + + +#if 0 +extern void dm_rf_operation_test_callback(unsigned long dev) +{ + u8 erfpath; + + + for(erfpath=0; erfpath<4; erfpath++) + { + udelay(100); + } + + { + } + + { +#if 0 + for(i=0; i<50; i++) + { + PHY_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4d); + PHY_SetRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits, 0x4f); + PHY_SetRFReg(dev, RF90_PATH_C, 0x02, bMask12Bits, 0x4d); + PHY_SetRFReg(dev, RF90_PATH_C, 0x02, bMask12Bits, 0x4f); + +#if 0 + PHY_QueryRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits); + PHY_QueryRFReg(dev, RF90_PATH_A, 0x02, bMask12Bits); + PHY_QueryRFReg(dev, RF90_PATH_A, 0x12, bMask12Bits); + PHY_QueryRFReg(dev, RF90_PATH_A, 0x12, bMask12Bits); + PHY_QueryRFReg(dev, RF90_PATH_A, 0x21, bMask12Bits); + PHY_QueryRFReg(dev, RF90_PATH_A, 0x21, bMask12Bits); +#endif + } +#endif + } + +} +#endif + +#if 0 +static void dm_check_rfctrl_gpio(struct net_device * dev) +{ +#ifdef RTL8192E + struct r8192_priv *priv = rtllib_priv(dev); +#endif + + +#ifdef RTL8190P + return; +#endif +#ifdef RTL8192U + return; +#endif +#ifdef RTL8192E + queue_delayed_work_rsl(priv->priv_wq,&priv->gpio_change_rf_wq,0); +#endif + +} + +#endif +static void dm_check_pbc_gpio(struct net_device *dev) +{ +#ifdef RTL8192U + struct r8192_priv *priv = rtllib_priv(dev); + u8 tmp1byte; + + + tmp1byte = read_nic_byte(dev,GPI); + if(tmp1byte == 0xff) + return; + + if (tmp1byte&BIT6 || tmp1byte&BIT0) + { + RT_TRACE(COMP_IO, "CheckPbcGPIO - PBC is pressed\n"); + priv->bpbc_pressed = true; + } +#endif + +} + +#ifdef RTL8192E + +extern void dm_CheckRfCtrlGPIO(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,gpio_change_rf_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct r8192_priv *priv = rtllib_priv((struct net_device *)data); + struct net_device *dev = priv->rtllib->dev; +#endif + u8 tmp1byte; + RT_RF_POWER_STATE eRfPowerStateToSet; + bool bActuallySet = false; + + char *argv[3]; + static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh"; + static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL}; + + bActuallySet=false; + + if((priv->up_first_time == 1) || (priv->being_init_adapter)) + { + return; + } + + if(priv->bfirst_after_down){ + priv->bfirst_after_down = 1; + return; + } + + + + { + tmp1byte = read_nic_byte(dev,GPI); + + eRfPowerStateToSet = (tmp1byte&BIT1) ? eRfOn : eRfOff; + + if( (priv->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn)) + { + RT_TRACE(COMP_RF, "gpiochangeRF - HW Radio ON\n"); + printk("gpiochangeRF - HW Radio ON\n"); + priv->bHwRadioOff = false; + bActuallySet = true; + } + else if ( (priv->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff)) + { + RT_TRACE(COMP_RF, "gpiochangeRF - HW Radio OFF\n"); + printk("gpiochangeRF - HW Radio OFF\n"); + priv->bHwRadioOff = true; + bActuallySet = true; + } + + if(bActuallySet) + { + mdelay(1000); + priv->bHwRfOffAction = 1; + MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW); + { + if(priv->bHwRadioOff == true) + argv[1] = "RFOFF"; + else + argv[1] = "RFON"; + + argv[0] = RadioPowerPath; + argv[2] = NULL; + call_usermodehelper(RadioPowerPath,argv,envp,1); + } + + } +#if 0 + else + { + msleep(2000); + } +#endif + + } + +} +#elif defined RTL8192SE +extern void Power_DomainInit92SE(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 tmpU1b; + u16 tmpU2b; + + + + priv->PwrDomainProtect = true; + + tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1)); + if(tmpU1b & BIT7) + { + tmpU1b &= ~(BIT6 | BIT7); + if(!HalSetSysClk8192SE(dev, tmpU1b)){ + priv->PwrDomainProtect = false; + return; + } + } + + write_nic_byte(dev, AFE_PLL_CTRL, 0x0); + write_nic_byte(dev, LDOA15_CTRL, 0x34); + +#if 0 + tmpU2b = read_nic_word(dev, SYS_CLKR); + if (tmpU2b & BIT15) + { + tmpU2b &= ~(BIT14|BIT15); + RT_TRACE(COMP_INIT, DBG_LOUD, ("Return to HW CTRL\n")); + write_nic_word(dev, SYS_CLKR, tmpU2b); + } + udelay(200); +#endif + + tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1); + if (priv->rtllib->RfOffReason & (RF_CHANGE_BY_IPS | RF_CHANGE_BY_HW)) { + tmpU1b &= 0xFB; + } else { + tmpU1b &= 0x73; + } + + write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b); + udelay(1000); + + write_nic_byte(dev, CMDR, 0); + write_nic_byte(dev, TCR, 0); + + tmpU1b = read_nic_byte(dev, 0x562); + tmpU1b |= 0x08; + write_nic_byte(dev, 0x562, tmpU1b); + tmpU1b &= ~(BIT3); + write_nic_byte(dev, 0x562, tmpU1b); + + tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL); + write_nic_byte(dev, AFE_XTAL_CTRL, (tmpU1b|0x01)); + udelay(1500); + tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL+1); + write_nic_byte(dev, AFE_XTAL_CTRL+1, (tmpU1b&0xfb)); + + + tmpU1b = read_nic_byte(dev, AFE_MISC); + write_nic_byte(dev, AFE_MISC, (tmpU1b|BIT0)); + udelay(1000); + + tmpU1b = read_nic_byte(dev, AFE_MISC); + write_nic_byte(dev, AFE_MISC, (tmpU1b|0x02)); + udelay(1000); + + tmpU1b = read_nic_byte(dev, LDOA15_CTRL); + write_nic_byte(dev, LDOA15_CTRL, (tmpU1b|BIT0)); + + tmpU2b = read_nic_word(dev, SYS_ISO_CTRL); + write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b|BIT11)); + + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b |BIT13)); + + write_nic_byte(dev, SYS_ISO_CTRL+1, 0x68); + + tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL); + write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4)); + tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL+1); + write_nic_byte(dev, AFE_PLL_CTRL+1, (tmpU1b|BIT0)); + udelay(1000); + + write_nic_byte(dev, SYS_ISO_CTRL, 0xA6); + + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, (tmpU2b|BIT12|BIT11)); + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11)); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11|BIT15)); + + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, (tmpU2b&(~BIT2))); + + tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1)); + tmpU1b = ((tmpU1b | BIT7) & (~BIT6)); + if(!HalSetSysClk8192SE(dev, tmpU1b)) + { + priv->PwrDomainProtect = false; + return; + } +#if 0 + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, ((tmpU2b|BIT15)&(~BIT14))); +#endif + + write_nic_word(dev, CMDR, 0x37FC); + + gen_RefreshLedState(dev); + + priv->PwrDomainProtect = false; + +} + +void SET_RTL8192SE_RF_HALT(struct net_device *dev) +{ + u8 u1bTmp; + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS && priv->LedStrategy == SW_LED_MODE8) + { + SET_RTL8192SE_RF_SLEEP(dev); + return; + } + + u1bTmp = read_nic_byte(dev, LDOV12D_CTRL); + u1bTmp |= BIT0; + write_nic_byte(dev, LDOV12D_CTRL, u1bTmp); + write_nic_byte(dev, SPS1_CTRL, 0x0); + write_nic_byte(dev, TXPAUSE, 0xFF); + write_nic_word(dev, CMDR, 0x57FC); + udelay(100); + write_nic_word(dev, CMDR, 0x77FC); + write_nic_byte(dev, PHY_CCA, 0x0); + udelay(10); + write_nic_word(dev, CMDR, 0x37FC); + udelay(10); + write_nic_word(dev, CMDR, 0x77FC); + udelay(10); + write_nic_word(dev, CMDR, 0x57FC); + write_nic_word(dev, CMDR, 0x0000); + u1bTmp = read_nic_byte(dev, (SYS_CLKR + 1)); + if(u1bTmp & BIT7) + { + u1bTmp &= ~(BIT6 | BIT7); + if(!HalSetSysClk8192SE(dev, u1bTmp)) + return; + } + if(priv->rtllib->RfOffReason==RF_CHANGE_BY_IPS ) + { + write_nic_byte(dev, 0x03, 0xF9); + } + else + { + write_nic_byte(dev, 0x03, 0x71); + } + write_nic_byte(dev, SYS_CLKR+1, 0x70); + write_nic_byte(dev, AFE_PLL_CTRL+1, 0x68); + write_nic_byte(dev, AFE_PLL_CTRL, 0x00); + write_nic_byte(dev, LDOA15_CTRL, 0x34); + write_nic_byte(dev, AFE_XTAL_CTRL, 0x0E); + +} + +u8 RfOnOffDetect(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 u1Tmp; + u8 retval=eRfOn; + + if(priv->pwrdown) + { + u1Tmp = read_nic_byte(dev, 0x06); + printk("pwrdown, 0x6(BIT6)=%02x\n", u1Tmp); + retval = (u1Tmp & BIT6) ? eRfOn: eRfOff; + } + else + { +#ifdef CONFIG_BT_COEXIST + if(pHalData->bt_coexist.BluetoothCoexist) + { + if(pHalData->bt_coexist.BT_CoexistType == BT_2Wire) + { + PlatformEFIOWrite1Byte(pAdapter, MAC_PINMUX_CFG, 0xa); + u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IO_SEL); + delay_us(100); + u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IN); + RTPRINT(FPWR, PWRHW, ("GPIO_IN=%02x\n", u1Tmp)); + retval = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff; + } + else if( (pHalData->bt_coexist.BT_CoexistType == BT_ISSC_3Wire) || + (pHalData->bt_coexist.BT_CoexistType == BT_Accel) || + (pHalData->bt_coexist.BT_CoexistType == BT_CSR) ) + { + u4tmp = PHY_QueryBBReg(pAdapter, 0x87c, bMaskDWord); + if((u4tmp & BIT17) != 0) + { + PHY_SetBBReg(pAdapter, 0x87c, bMaskDWord, u4tmp & ~BIT17); + delay_us(50); + RTPRINT(FBT, BT_RFPoll, ("BT write 0x87c (~BIT17) = 0x%x\n", u4tmp &~BIT17)); + } + u4tmp = PHY_QueryBBReg(pAdapter, 0x8e0, bMaskDWord); + RTPRINT(FBT, BT_RFPoll, ("BT read 0x8e0 (BIT24)= 0x%x\n", u4tmp)); + retval = (u4tmp & BIT24) ? eRfOn : eRfOff; + RTPRINT(FBT, BT_RFPoll, ("BT check RF state to %s\n", (retval==eRfOn)? "ON":"OFF")); + } + } + else +#endif + { + write_nic_byte(dev, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO)); + u1Tmp = read_nic_byte(dev, GPIO_IO_SEL); + + u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK; + write_nic_byte(dev, GPIO_IO_SEL, u1Tmp); + + mdelay(10); + + u1Tmp = read_nic_byte(dev, GPIO_IN); + retval = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff; + } + } + + return retval; +} + +extern void dm_CheckRfCtrlGPIO(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,gpio_change_rf_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + + RT_RF_POWER_STATE eRfPowerStateToSet, CurRfState; + bool bActuallySet = false; + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + unsigned long flag = 0; + bool turnonbypowerdomain = false; + + +#ifdef CONFIG_RTL_RFKILL + return; +#endif + if((priv->up_first_time == 1) || (priv->being_init_adapter)) + { + ; + return; + } + + if(priv->ResetProgress == RESET_TYPE_SILENT) + { + RT_TRACE((COMP_INIT | COMP_POWER | COMP_RF), "GPIOChangeRFWorkItemCallBack(): Silent Reseting!!!!!!!\n"); + return; + } + + + if (pPSC->bSwRfProcessing) + { + RT_TRACE(COMP_SCAN, "GPIOChangeRFWorkItemCallBack(): Rf is in switching state.\n"); + return; + } + + RT_TRACE(COMP_RF, "GPIOChangeRFWorkItemCallBack() ---------> \n"); + + spin_lock_irqsave(&priv->rf_ps_lock,flag); + if (priv->RFChangeInProgress) { + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + RT_TRACE(COMP_RF, "GPIOChangeRFWorkItemCallBack(): RF Change in progress! \n"); + return; + } else { + priv->RFChangeInProgress = true; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + } + CurRfState = priv->rtllib->eRFPowerState; +#ifdef CONFIG_ASPM_OR_D3 + if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM)) + { + RT_DISABLE_ASPM(dev); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } + else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3)) + { +#ifdef TODO + RT_LEAVE_D3(dev, false); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); +#endif + } + +#endif + if(RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) + { + Power_DomainInit92SE(dev); + turnonbypowerdomain = true; + } + + eRfPowerStateToSet = RfOnOffDetect(dev); + if (priv->bResetInProgress) { + spin_lock_irqsave(&priv->rf_ps_lock,flag); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + return; + } + + if( (priv->bHwRadioOff == true) && \ + (((eRfPowerStateToSet == eRfOn)&&(priv->sw_radio_on == true)) +#ifdef CONFIG_RTLWIFI_DEBUGFS + ||priv->debug->hw_holding +#endif + )) + { + RT_TRACE(COMP_RF, "GPIOChangeRF - HW Radio ON, RF ON\n"); + printk("GPIOChangeRF - HW Radio ON, RF ON\n"); + eRfPowerStateToSet = eRfOn; + bActuallySet = true; + } else if ((priv->bHwRadioOff == false) && + ((eRfPowerStateToSet == eRfOff) || (priv->sw_radio_on == false))) + { + RT_TRACE(COMP_RF, "GPIOChangeRF - HW Radio OFF\n"); + printk("GPIOChangeRF - HW Radio OFF\n"); + eRfPowerStateToSet = eRfOff; + bActuallySet = true; + } + + if (bActuallySet) { + priv->bHwRfOffAction = 1; +#ifdef CONFIG_ASPM_OR_D3 + if(eRfPowerStateToSet == eRfOn) + { + if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM)) + { + RT_DISABLE_ASPM(dev); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } +#ifdef TODO + else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3)) + { + RT_LEAVE_D3(dev, false); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); + } +#endif + } +#endif + spin_lock_irqsave(&priv->rf_ps_lock,flag); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + MgntActSet_RF_State(dev, eRfPowerStateToSet, RF_CHANGE_BY_HW); + + { +#ifdef CONFIG_CFG_80211 + struct wireless_dev *wdev = &priv->rtllib->wdev; + wiphy_rfkill_set_hw_state(wdev->wiphy, priv->bHwRadioOff); +#else + char *argv[3]; + static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh"; + static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL}; + + if(priv->bHwRadioOff == true) + argv[1] = "RFOFF"; + else + argv[1] = "RFON"; + + argv[0] = RadioPowerPath; + argv[2] = NULL; + call_usermodehelper(RadioPowerPath,argv,envp,1); + +#endif + } + + if(eRfPowerStateToSet == eRfOff) + { + if(priv->pwrdown){ + + write_nic_byte(dev, SYS_FUNC_EN+1, 0x31); + } +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) + { + RT_ENABLE_ASPM(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } +#ifdef TODO + else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) + { + RT_ENTER_D3(dev, false); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); + } +#endif +#endif + } + } + else if(eRfPowerStateToSet == eRfOff || CurRfState == eRfOff || priv->bDriverIsGoingToUnload) + { + + if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && turnonbypowerdomain) + { + PHY_SetRtl8192seRfHalt(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + } +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) + { + RT_ENABLE_ASPM(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } +#ifdef TODO + else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) + { + RT_ENTER_D3(dev, false); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); + } +#endif +#endif + spin_lock_irqsave(&priv->rf_ps_lock,flag); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + } + else + { + spin_lock_irqsave(&priv->rf_ps_lock,flag); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + } + RT_TRACE(COMP_RF, "GPIOChangeRFWorkItemCallBack() <--------- \n"); +} +#endif +void dm_rf_pathcheck_workitemcallback(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,rfpath_check_wq); + struct net_device *dev =priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + u8 rfpath = 0, i; + + + rfpath = read_nic_byte(dev, 0xc04); + + for (i = 0; i < RF90_PATH_MAX; i++) + { + if (rfpath & (0x01<brfpath_rxenable[i] = 1; + else + priv->brfpath_rxenable[i] = 0; + } + if(!DM_RxPathSelTable.Enable) + return; + + dm_rxpath_sel_byrssi(dev); +} + +static void dm_init_rxpath_selection(struct net_device * dev) +{ + u8 i; + struct r8192_priv *priv = rtllib_priv(dev); + DM_RxPathSelTable.Enable = 1; + DM_RxPathSelTable.SS_TH_low = RxPathSelection_SS_TH_low; + DM_RxPathSelTable.diff_TH = RxPathSelection_diff_TH; + if(priv->CustomerID == RT_CID_819x_Netcore) + DM_RxPathSelTable.cck_method = CCK_Rx_Version_2; + else + DM_RxPathSelTable.cck_method = CCK_Rx_Version_1; + DM_RxPathSelTable.DbgMode = DM_DBG_OFF; + DM_RxPathSelTable.disabledRF = 0; + for(i=0; i<4; i++) + { + DM_RxPathSelTable.rf_rssi[i] = 50; + DM_RxPathSelTable.cck_pwdb_sta[i] = -64; + DM_RxPathSelTable.rf_enable_rssi_th[i] = 100; + } +} + +static void dm_rxpath_sel_byrssi(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 i, max_rssi_index=0, min_rssi_index=0, sec_rssi_index=0, rf_num=0; + u8 tmp_max_rssi=0, tmp_min_rssi=0, tmp_sec_rssi=0; + u8 cck_default_Rx=0x2; + u8 cck_optional_Rx=0x3; + long tmp_cck_max_pwdb=0, tmp_cck_min_pwdb=0, tmp_cck_sec_pwdb=0; + u8 cck_rx_ver2_max_index=0, cck_rx_ver2_min_index=0, cck_rx_ver2_sec_index=0; + u8 cur_rf_rssi; + long cur_cck_pwdb; + static u8 disabled_rf_cnt=0, cck_Rx_Path_initialized=0; + u8 update_cck_rx_path; + + if(priv->rf_type != RF_2T4R) + return; + + if(!cck_Rx_Path_initialized) + { + DM_RxPathSelTable.cck_Rx_path = (read_nic_byte(dev, 0xa07)&0xf); + cck_Rx_Path_initialized = 1; + } + + DM_RxPathSelTable.disabledRF = 0xf; + DM_RxPathSelTable.disabledRF &=~ (read_nic_byte(dev, 0xc04)); + + if(priv->rtllib->mode == WIRELESS_MODE_B) + { + DM_RxPathSelTable.cck_method = CCK_Rx_Version_2; + } + + for (i=0; istats.rx_rssi_percentage[i]; + + if(priv->brfpath_rxenable[i]) + { + rf_num++; + cur_rf_rssi = DM_RxPathSelTable.rf_rssi[i]; + + if(rf_num == 1) + { + max_rssi_index = min_rssi_index = sec_rssi_index = i; + tmp_max_rssi = tmp_min_rssi = tmp_sec_rssi = cur_rf_rssi; + } + else if(rf_num == 2) + { + if(cur_rf_rssi >= tmp_max_rssi) + { + tmp_max_rssi = cur_rf_rssi; + max_rssi_index = i; + } + else + { + tmp_sec_rssi = tmp_min_rssi = cur_rf_rssi; + sec_rssi_index = min_rssi_index = i; + } + } + else + { + if(cur_rf_rssi > tmp_max_rssi) + { + tmp_sec_rssi = tmp_max_rssi; + sec_rssi_index = max_rssi_index; + tmp_max_rssi = cur_rf_rssi; + max_rssi_index = i; + } + else if(cur_rf_rssi == tmp_max_rssi) + { + tmp_sec_rssi = cur_rf_rssi; + sec_rssi_index = i; + } + else if((cur_rf_rssi < tmp_max_rssi) &&(cur_rf_rssi > tmp_sec_rssi)) + { + tmp_sec_rssi = cur_rf_rssi; + sec_rssi_index = i; + } + else if(cur_rf_rssi == tmp_sec_rssi) + { + if(tmp_sec_rssi == tmp_min_rssi) + { + tmp_sec_rssi = cur_rf_rssi; + sec_rssi_index = i; + } + else + { + } + } + else if((cur_rf_rssi < tmp_sec_rssi) && (cur_rf_rssi > tmp_min_rssi)) + { + } + else if(cur_rf_rssi == tmp_min_rssi) + { + if(tmp_sec_rssi == tmp_min_rssi) + { + tmp_min_rssi = cur_rf_rssi; + min_rssi_index = i; + } + else + { + } + } + else if(cur_rf_rssi < tmp_min_rssi) + { + tmp_min_rssi = cur_rf_rssi; + min_rssi_index = i; + } + } + } + } + + rf_num = 0; + if(DM_RxPathSelTable.cck_method == CCK_Rx_Version_2) + { + for (i=0; ibrfpath_rxenable[i]) + { + rf_num++; + cur_cck_pwdb = DM_RxPathSelTable.cck_pwdb_sta[i]; + + if(rf_num == 1) + { + cck_rx_ver2_max_index = cck_rx_ver2_min_index = cck_rx_ver2_sec_index = i; + tmp_cck_max_pwdb = tmp_cck_min_pwdb = tmp_cck_sec_pwdb = cur_cck_pwdb; + } + else if(rf_num == 2) + { + if(cur_cck_pwdb >= tmp_cck_max_pwdb) + { + tmp_cck_max_pwdb = cur_cck_pwdb; + cck_rx_ver2_max_index = i; + } + else + { + tmp_cck_sec_pwdb = tmp_cck_min_pwdb = cur_cck_pwdb; + cck_rx_ver2_sec_index = cck_rx_ver2_min_index = i; + } + } + else + { + if(cur_cck_pwdb > tmp_cck_max_pwdb) + { + tmp_cck_sec_pwdb = tmp_cck_max_pwdb; + cck_rx_ver2_sec_index = cck_rx_ver2_max_index; + tmp_cck_max_pwdb = cur_cck_pwdb; + cck_rx_ver2_max_index = i; + } + else if(cur_cck_pwdb == tmp_cck_max_pwdb) + { + tmp_cck_sec_pwdb = cur_cck_pwdb; + cck_rx_ver2_sec_index = i; + } + else if((cur_cck_pwdb < tmp_cck_max_pwdb) &&(cur_cck_pwdb > tmp_cck_sec_pwdb)) + { + tmp_cck_sec_pwdb = cur_cck_pwdb; + cck_rx_ver2_sec_index = i; + } + else if(cur_cck_pwdb == tmp_cck_sec_pwdb) + { + if(tmp_cck_sec_pwdb == tmp_cck_min_pwdb) + { + tmp_cck_sec_pwdb = cur_cck_pwdb; + cck_rx_ver2_sec_index = i; + } + else + { + } + } + else if((cur_cck_pwdb < tmp_cck_sec_pwdb) && (cur_cck_pwdb > tmp_cck_min_pwdb)) + { + } + else if(cur_cck_pwdb == tmp_cck_min_pwdb) + { + if(tmp_cck_sec_pwdb == tmp_cck_min_pwdb) + { + tmp_cck_min_pwdb = cur_cck_pwdb; + cck_rx_ver2_min_index = i; + } + else + { + } + } + else if(cur_cck_pwdb < tmp_cck_min_pwdb) + { + tmp_cck_min_pwdb = cur_cck_pwdb; + cck_rx_ver2_min_index = i; + } + } + + } + } + } + + + update_cck_rx_path = 0; + if(DM_RxPathSelTable.cck_method == CCK_Rx_Version_2) + { + cck_default_Rx = cck_rx_ver2_max_index; + cck_optional_Rx = cck_rx_ver2_sec_index; + if(tmp_cck_max_pwdb != -64) + update_cck_rx_path = 1; + } + + if(tmp_min_rssi < DM_RxPathSelTable.SS_TH_low && disabled_rf_cnt < 2) + { + if((tmp_max_rssi - tmp_min_rssi) >= DM_RxPathSelTable.diff_TH) + { + DM_RxPathSelTable.rf_enable_rssi_th[min_rssi_index] = tmp_max_rssi+5; + rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x1<>i) & 0x1) + { + if(tmp_max_rssi >= DM_RxPathSelTable.rf_enable_rssi_th[i]) + { + rtl8192_setBBreg(dev, rOFDM0_TRxPathEnable, 0x1<priv_wq,&priv->rfpath_check_wq,0); +} + + +static void dm_init_fsync (struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->rtllib->fsync_time_interval = 500; + priv->rtllib->fsync_rate_bitmap = 0x0f000800; + priv->rtllib->fsync_rssi_threshold = 30; +#ifdef RTL8190P + priv->rtllib->bfsync_enable = true; +#elif defined RTL8192E || defined RTL8192SE + priv->rtllib->bfsync_enable = false; +#endif + priv->rtllib->fsync_multiple_timeinterval = 3; + priv->rtllib->fsync_firstdiff_ratethreshold= 100; + priv->rtllib->fsync_seconddiff_ratethreshold= 200; + priv->rtllib->fsync_state = Default_Fsync; + +#ifdef RTL8192SE + priv->framesyncMonitor = 0; +#elif defined RTL8192E || defined RTL8190P + priv->framesyncMonitor = 1; +#endif + + setup_timer(&priv->fsync_timer, dm_fsync_timer_callback,(unsigned long) dev); +} + + +static void dm_deInit_fsync(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + del_timer_sync(&priv->fsync_timer); +} + +extern void dm_fsync_timer_callback(unsigned long data) +{ + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv((struct net_device *)data); + u32 rate_index, rate_count = 0, rate_count_diff=0; + bool bSwitchFromCountDiff = false; + bool bDoubleTimeInterval = false; + + if( priv->rtllib->state == RTLLIB_LINKED && + priv->rtllib->bfsync_enable && + (priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_CDD_FSYNC)) + { + u32 rate_bitmap; + for(rate_index = 0; rate_index <= 27; rate_index++) + { + rate_bitmap = 1 << rate_index; + if(priv->rtllib->fsync_rate_bitmap & rate_bitmap) + rate_count+= priv->stats.received_rate_histogram[1][rate_index]; + } + + if(rate_count < priv->rate_record) + rate_count_diff = 0xffffffff - rate_count + priv->rate_record; + else + rate_count_diff = rate_count - priv->rate_record; + if(rate_count_diff < priv->rateCountDiffRecord) + { + + u32 DiffNum = priv->rateCountDiffRecord - rate_count_diff; + if(DiffNum >= priv->rtllib->fsync_seconddiff_ratethreshold) + priv->ContiuneDiffCount++; + else + priv->ContiuneDiffCount = 0; + + if(priv->ContiuneDiffCount >=2) + { + bSwitchFromCountDiff = true; + priv->ContiuneDiffCount = 0; + } + } + else + { + priv->ContiuneDiffCount = 0; + } + + if(rate_count_diff <= priv->rtllib->fsync_firstdiff_ratethreshold) + { + bSwitchFromCountDiff = true; + priv->ContiuneDiffCount = 0; + } + priv->rate_record = rate_count; + priv->rateCountDiffRecord = rate_count_diff; + RT_TRACE(COMP_HALDM, "rateRecord %d rateCount %d, rateCountdiff %d bSwitchFsync %d\n", priv->rate_record, rate_count, rate_count_diff , priv->bswitch_fsync); + if(priv->undecorated_smoothed_pwdb > priv->rtllib->fsync_rssi_threshold && bSwitchFromCountDiff) + { + bDoubleTimeInterval = true; + priv->bswitch_fsync = !priv->bswitch_fsync; + if(priv->bswitch_fsync) + { + #ifdef RTL8190P + write_nic_byte(dev,0xC36, 0x00); +#elif defined RTL8192E + write_nic_byte(dev,0xC36, 0x1c); + #endif + write_nic_byte(dev, 0xC3e, 0x90); + } + else + { + #ifdef RTL8190P + write_nic_byte(dev, 0xC36, 0x40); + #else + write_nic_byte(dev, 0xC36, 0x5c); + #endif + write_nic_byte(dev, 0xC3e, 0x96); + } + } + else if(priv->undecorated_smoothed_pwdb <= priv->rtllib->fsync_rssi_threshold) + { + if(priv->bswitch_fsync) + { + priv->bswitch_fsync = false; + #ifdef RTL8190P + write_nic_byte(dev, 0xC36, 0x40); +#elif defined RTL8192E + write_nic_byte(dev, 0xC36, 0x5c); + #endif + write_nic_byte(dev, 0xC3e, 0x96); + } + } + if(bDoubleTimeInterval){ + if(timer_pending(&priv->fsync_timer)) + del_timer_sync(&priv->fsync_timer); + priv->fsync_timer.expires = jiffies + MSECS(priv->rtllib->fsync_time_interval*priv->rtllib->fsync_multiple_timeinterval); + add_timer(&priv->fsync_timer); + } + else{ + if(timer_pending(&priv->fsync_timer)) + del_timer_sync(&priv->fsync_timer); + priv->fsync_timer.expires = jiffies + MSECS(priv->rtllib->fsync_time_interval); + add_timer(&priv->fsync_timer); + } + } + else + { + if(priv->bswitch_fsync) + { + priv->bswitch_fsync = false; + #ifdef RTL8190P + write_nic_byte(dev, 0xC36, 0x40); +#elif defined RTL8192E + write_nic_byte(dev, 0xC36, 0x5c); + #endif + write_nic_byte(dev, 0xC3e, 0x96); + } + priv->ContiuneDiffCount = 0; + #ifdef RTL8190P + write_nic_dword(dev, rOFDM0_RxDetector2, 0x164052cd); +#elif defined RTL8192E + write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd); + #endif + } + RT_TRACE(COMP_HALDM, "ContiuneDiffCount %d\n", priv->ContiuneDiffCount); + RT_TRACE(COMP_HALDM, "rateRecord %d rateCount %d, rateCountdiff %d bSwitchFsync %d\n", priv->rate_record, rate_count, rate_count_diff , priv->bswitch_fsync); +} + +static void dm_StartHWFsync(struct net_device *dev) +{ + RT_TRACE(COMP_HALDM, "%s\n", __FUNCTION__); +#if defined RTL8192E + write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c12cf); + write_nic_byte(dev, 0xc3b, 0x41); +#elif defined RTL8192SE + write_nic_byte(dev, rOFDM0_RxDetector3, 0x96); +#endif +} + +static void dm_EndHWFsync(struct net_device *dev) +{ + RT_TRACE(COMP_HALDM,"%s\n", __FUNCTION__); +#if defined RTL8192E + write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd); + write_nic_byte(dev, 0xc3b, 0x49); +#elif defined RTL8192SE + write_nic_byte(dev, rOFDM0_RxDetector3, 0x94); +#endif + +} + +static void dm_EndSWFsync(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + RT_TRACE(COMP_HALDM, "%s\n", __FUNCTION__); + del_timer_sync(&(priv->fsync_timer)); + + if(priv->bswitch_fsync) + { + priv->bswitch_fsync = false; + + #ifdef RTL8190P + write_nic_byte(dev, 0xC36, 0x40); +#elif defined RTL8192E + write_nic_byte(dev, 0xC36, 0x5c); +#endif + + write_nic_byte(dev, 0xC3e, 0x96); + } + + priv->ContiuneDiffCount = 0; +#ifdef RTL8192E + write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c52cd); +#endif + +} + +static void dm_StartSWFsync(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 rateIndex; + u32 rateBitmap; + + RT_TRACE(COMP_HALDM,"%s\n", __FUNCTION__); + priv->rate_record = 0; + priv->ContiuneDiffCount = 0; + priv->rateCountDiffRecord = 0; + priv->bswitch_fsync = false; + + if(priv->rtllib->mode == WIRELESS_MODE_N_24G) + { + priv->rtllib->fsync_firstdiff_ratethreshold= 600; + priv->rtllib->fsync_seconddiff_ratethreshold = 0xffff; + } + else + { + priv->rtllib->fsync_firstdiff_ratethreshold= 200; + priv->rtllib->fsync_seconddiff_ratethreshold = 200; + } + for(rateIndex = 0; rateIndex <= 27; rateIndex++) + { + rateBitmap = 1 << rateIndex; + if(priv->rtllib->fsync_rate_bitmap & rateBitmap) + priv->rate_record += priv->stats.received_rate_histogram[1][rateIndex]; + } + if(timer_pending(&priv->fsync_timer)) + del_timer_sync(&priv->fsync_timer); + priv->fsync_timer.expires = jiffies + MSECS(priv->rtllib->fsync_time_interval); + add_timer(&priv->fsync_timer); + +#ifdef RTL8192E + write_nic_dword(dev, rOFDM0_RxDetector2, 0x465c12cd); +#endif + +} + +void dm_check_fsync(struct net_device *dev) +{ +#define RegC38_Default 0 +#define RegC38_NonFsync_Other_AP 1 +#define RegC38_Fsync_AP_BCM 2 + struct r8192_priv *priv = rtllib_priv(dev); + static u8 reg_c38_State=RegC38_Default; + static u32 reset_cnt=0; + + RT_TRACE(COMP_HALDM, "RSSI %d TimeInterval %d MultipleTimeInterval %d\n", priv->rtllib->fsync_rssi_threshold, priv->rtllib->fsync_time_interval, priv->rtllib->fsync_multiple_timeinterval); + RT_TRACE(COMP_HALDM, "RateBitmap 0x%x FirstDiffRateThreshold %d SecondDiffRateThreshold %d\n", priv->rtllib->fsync_rate_bitmap, priv->rtllib->fsync_firstdiff_ratethreshold, priv->rtllib->fsync_seconddiff_ratethreshold); + + if( priv->rtllib->state == RTLLIB_LINKED && + (priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_CDD_FSYNC)) + { + if(priv->rtllib->bfsync_enable == 0) + { + switch(priv->rtllib->fsync_state) + { + case Default_Fsync: + dm_StartHWFsync(dev); + priv->rtllib->fsync_state = HW_Fsync; + break; + case SW_Fsync: + dm_EndSWFsync(dev); + dm_StartHWFsync(dev); + priv->rtllib->fsync_state = HW_Fsync; + break; + case HW_Fsync: + default: + break; + } + } + else + { + switch(priv->rtllib->fsync_state) + { + case Default_Fsync: + dm_StartSWFsync(dev); + priv->rtllib->fsync_state = SW_Fsync; + break; + case HW_Fsync: + dm_EndHWFsync(dev); + dm_StartSWFsync(dev); + priv->rtllib->fsync_state = SW_Fsync; + break; + case SW_Fsync: + default: + break; + + } + } + if(priv->framesyncMonitor) + { + if(reg_c38_State != RegC38_Fsync_AP_BCM) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector3, 0x15); + #else + write_nic_byte(dev, rOFDM0_RxDetector3, 0x95); + #endif + + reg_c38_State = RegC38_Fsync_AP_BCM; + } + } + } + else + { + switch(priv->rtllib->fsync_state) + { + case HW_Fsync: + dm_EndHWFsync(dev); + priv->rtllib->fsync_state = Default_Fsync; + break; + case SW_Fsync: + dm_EndSWFsync(dev); + priv->rtllib->fsync_state = Default_Fsync; + break; + case Default_Fsync: + default: + break; + } + + if(priv->framesyncMonitor) + { + if(priv->rtllib->state == RTLLIB_LINKED) + { + if(priv->undecorated_smoothed_pwdb <= RegC38_TH) + { + if(reg_c38_State != RegC38_NonFsync_Other_AP) + { + #ifdef RTL8190P + write_nic_byte(dev, rOFDM0_RxDetector3, 0x10); + #else + write_nic_byte(dev, rOFDM0_RxDetector3, 0x90); + #endif + + reg_c38_State = RegC38_NonFsync_Other_AP; + #if 0 + if (dev->HardwareType == HARDWARE_TYPE_RTL8190P) + DbgPrint("Fsync is idle, rssi<=35, write 0xc38 = 0x%x \n", 0x10); + else + DbgPrint("Fsync is idle, rssi<=35, write 0xc38 = 0x%x \n", 0x90); + #endif + } + } + else if(priv->undecorated_smoothed_pwdb >= (RegC38_TH+5)) + { + if(reg_c38_State) + { + write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync); + reg_c38_State = RegC38_Default; + } + } + } + else + { + if(reg_c38_State) + { + write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync); + reg_c38_State = RegC38_Default; + } + } + } + } + if(priv->framesyncMonitor) + { + if(priv->reset_count != reset_cnt) + { + write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync); + reg_c38_State = RegC38_Default; + reset_cnt = priv->reset_count; + } + } + else + { + if(reg_c38_State) + { + write_nic_byte(dev, rOFDM0_RxDetector3, priv->framesync); + reg_c38_State = RegC38_Default; + } + } +} + +#if 0 +extern s1Byte DM_CheckLBusStatus(IN PADAPTER dev) +{ + PMGNT_INFO pMgntInfo=&dev->MgntInfo; + +#if (HAL_CODE_BASE & RTL819X) + +#if (HAL_CODE_BASE == RTL8192) + +#if( DEV_BUS_TYPE==PCI_INTERFACE) + return true; +#endif + +#if( DEV_BUS_TYPE==USB_INTERFACE) + return true; +#endif + +#endif + +#if (HAL_CODE_BASE == RTL8190) + return true; +#endif + +#endif +} + +#endif + +extern void dm_shadow_init(struct net_device *dev) +{ + u8 page; + u16 offset; + + for (page = 0; page < 5; page++) + for (offset = 0; offset < 256; offset++) + { + dm_shadow[page][offset] = read_nic_byte(dev, offset+page*256); + } + + for (page = 8; page < 11; page++) + for (offset = 0; offset < 256; offset++) + dm_shadow[page][offset] = read_nic_byte(dev, offset+page*256); + + for (page = 12; page < 15; page++) + for (offset = 0; offset < 256; offset++) + dm_shadow[page][offset] = read_nic_byte(dev, offset+page*256); + +} + +/*---------------------------Define function prototype------------------------*/ +static void dm_init_dynamic_txpower(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef RTL8192SE + if(((priv->pFirmware->FirmwareVersion) >= 60) && + (priv->DM_Type == DM_Type_ByDriver)){ + priv->rtllib->bdynamic_txpower_enable = true; + RT_TRACE(COMP_INIT, "Dynamic Tx Power is enabled by Driver \n"); + } else { + priv->rtllib->bdynamic_txpower_enable = false; + RT_TRACE(COMP_INIT, "Dynamic Tx Power is enabled by FW \n"); + } + + priv->LastDTPLvl = TxHighPwrLevel_Normal; + priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; + +#elif defined RTL8190P || defined RTL8192E + priv->rtllib->bdynamic_txpower_enable = true; + priv->bLastDTPFlag_High = false; + priv->bLastDTPFlag_Low = false; + priv->bDynamicTxHighPower = false; + priv->bDynamicTxLowPower = false; +#endif +} + +#if defined RTL8190P || defined RTL8192E +static void dm_dynamic_txpower(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned int txhipower_threshhold=0; + unsigned int txlowpower_threshold=0; + if(priv->rtllib->bdynamic_txpower_enable != true) + { + priv->bDynamicTxHighPower = false; + priv->bDynamicTxLowPower = false; + return; + } + if((priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_ATHEROS) && (priv->rtllib->mode == IEEE_G)){ + txhipower_threshhold = TX_POWER_ATHEROAP_THRESH_HIGH; + txlowpower_threshold = TX_POWER_ATHEROAP_THRESH_LOW; + } + else + { + txhipower_threshhold = TX_POWER_NEAR_FIELD_THRESH_HIGH; + txlowpower_threshold = TX_POWER_NEAR_FIELD_THRESH_LOW; + } + + + RT_TRACE(COMP_TXAGC,"priv->undecorated_smoothed_pwdb = %ld \n" , priv->undecorated_smoothed_pwdb); + + if(priv->rtllib->state == RTLLIB_LINKED) + { + if(priv->undecorated_smoothed_pwdb >= txhipower_threshhold) + { + priv->bDynamicTxHighPower = true; + priv->bDynamicTxLowPower = false; + } + else + { + if(priv->undecorated_smoothed_pwdb < txlowpower_threshold && priv->bDynamicTxHighPower == true) + { + priv->bDynamicTxHighPower = false; + } + if(priv->undecorated_smoothed_pwdb < 35) + { + priv->bDynamicTxLowPower = true; + } + else if(priv->undecorated_smoothed_pwdb >= 40) + { + priv->bDynamicTxLowPower = false; + } + } + } + else + { + priv->bDynamicTxHighPower = false; + priv->bDynamicTxLowPower = false; + } + + if( (priv->bDynamicTxHighPower != priv->bLastDTPFlag_High ) || + (priv->bDynamicTxLowPower != priv->bLastDTPFlag_Low ) ) + { + RT_TRACE(COMP_TXAGC,"SetTxPowerLevel8190() channel = %d \n" , priv->rtllib->current_network.channel); + + rtl8192_phy_setTxPower(dev,priv->rtllib->current_network.channel); + } + priv->bLastDTPFlag_High = priv->bDynamicTxHighPower; + priv->bLastDTPFlag_Low = priv->bDynamicTxLowPower; + +} +#elif defined RTL8192SE +static void dm_dynamic_txpower(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + long UndecoratedSmoothedPWDB; + + if( (priv->rtllib->bdynamic_txpower_enable != true) || + (priv->DMFlag & HAL_DM_HIPWR_DISABLE) || + priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) { + priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; + return; + } + + if((!priv->rtllib->state != RTLLIB_LINKED) && + (priv->EntryMinUndecoratedSmoothedPWDB == 0)) { + RT_TRACE(COMP_POWER, "Not connected to any \n"); + priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; + return; + } + + if(priv->rtllib->state == RTLLIB_LINKED) { + if(priv->OpMode == RT_OP_MODE_IBSS) { + UndecoratedSmoothedPWDB = priv->EntryMinUndecoratedSmoothedPWDB; + RT_TRACE(COMP_POWER, "AP Client PWDB = %ld \n", UndecoratedSmoothedPWDB); + } else { + UndecoratedSmoothedPWDB = priv->undecorated_smoothed_pwdb; + RT_TRACE(COMP_POWER, "STA Default Port PWDB = %ld \n", UndecoratedSmoothedPWDB); + } + } else { + UndecoratedSmoothedPWDB = priv->EntryMinUndecoratedSmoothedPWDB; + RT_TRACE(COMP_POWER, "AP Ext Port PWDB = %ld \n", UndecoratedSmoothedPWDB); + } + + if(UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL2) { + priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level2; + RT_TRACE(COMP_POWER, "TxHighPwrLevel_Level2 (TxPwr=0x0)\n"); + } else if((UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL2-3)) && + (UndecoratedSmoothedPWDB >= TX_POWER_NEAR_FIELD_THRESH_LVL1) ) { + priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Level1; + RT_TRACE(COMP_POWER, "TxHighPwrLevel_Level1 (TxPwr=0x10)\n"); + } else if(UndecoratedSmoothedPWDB < (TX_POWER_NEAR_FIELD_THRESH_LVL1-3)) { + priv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal; + RT_TRACE(COMP_POWER, "TxHighPwrLevel_Normal\n"); + } + + if( (priv->DynamicTxHighPowerLvl != priv->LastDTPLvl) ) { + RT_TRACE(COMP_POWER, "PHY_SetTxPowerLevel8192S() Channel = %d \n" , priv->rtllib->current_network.channel); + rtl8192_phy_setTxPower(dev, priv->rtllib->current_network.channel); + } + priv->LastDTPLvl = priv->DynamicTxHighPowerLvl; +} +#endif + +static void dm_check_txrateandretrycount(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + +#ifdef RTL8192SE + static u8 LegacyRateSet[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c}; + u8 RateIdx = 0; + RateIdx = read_nic_byte(dev, TX_RATE_REG); + + if(ieee->softmac_stats.CurrentShowTxate < 76) + ieee->softmac_stats.CurrentShowTxate = (RateIdx<12)?(LegacyRateSet[RateIdx]):((RateIdx-12)|0x80); + else + ieee->softmac_stats.CurrentShowTxate = 0; +#else + ieee->softmac_stats.CurrentShowTxate = read_nic_byte(dev, Current_Tx_Rate_Reg); +#endif + + ieee->softmac_stats.last_packet_rate = read_nic_byte(dev ,Initial_Tx_Rate_Reg); + + ieee->softmac_stats.txretrycount = read_nic_dword(dev, Tx_Retry_Count_Reg); +} + +static void dm_send_rssi_tofw(struct net_device *dev) +{ +#ifndef RTL8192SE + DCMD_TXCMD_T tx_cmd; + struct r8192_priv *priv = rtllib_priv(dev); + + write_nic_byte(dev, DRIVER_RSSI, (u8)priv->undecorated_smoothed_pwdb); + return; + tx_cmd.Op = TXCMD_SET_RX_RSSI; + tx_cmd.Length = 4; + tx_cmd.Value = priv->undecorated_smoothed_pwdb; + + cmpk_message_handle_tx(dev, (u8*)&tx_cmd, + DESC_PACKET_TYPE_INIT, sizeof(DCMD_TXCMD_T)); +#endif +} + +#if defined RTL8192SE +/*----------------------------------------------------------------------------- + * Function: dm_RefreshRateAdaptiveMask() + * + * Overview: Update rate table mask according to rssi + * + * Input: NONE + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/27/2009 hpfan Create Version 0. + * + *---------------------------------------------------------------------------*/ +static void dm_RefreshRateAdaptiveMask(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + prate_adaptive pRA = (prate_adaptive)&priv->rate_adaptive; + u32 LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0; + u8 rssi_level; + + if(IS_NIC_DOWN(priv)){ + RT_TRACE(COMP_RATE,"<---- dm_RefreshRateAdaptiveMask(): driver is going to unload\n"); + return; + } + + if(!priv->rtllib->bUseRAMask){ + return; + } + + if(priv->pFirmware->FirmwareVersion >= 61 && !priv->bInformFWDriverControlDM){ + RT_TRACE(COMP_RATE, "<---- dm_RefreshRateAdaptiveMask(): inform fw driver control dm\n"); + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_CTRL_DM_BY_DRIVER); + priv->bInformFWDriverControlDM = true; + } + + if((priv->rtllib->state == RTLLIB_LINKED && (priv->rtllib->iw_mode == IW_MODE_INFRA)) +#ifdef _RTL8192_EXT_PATCH_ + || ((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0)) +#endif + ) + { + + switch (pRA->PreRATRState){ + case DM_RATR_STA_HIGH: + HighRSSIThreshForRA = 50; + LowRSSIThreshForRA = 20; + break; + case DM_RATR_STA_MIDDLE: + HighRSSIThreshForRA = 55; + LowRSSIThreshForRA = 20; + break; + case DM_RATR_STA_LOW: + HighRSSIThreshForRA = 50; + LowRSSIThreshForRA = 25; + break; + default: + HighRSSIThreshForRA = 50; + LowRSSIThreshForRA = 20; + break; + } + + if(priv->undecorated_smoothed_pwdb > (long)HighRSSIThreshForRA){ + pRA->ratr_state = DM_RATR_STA_HIGH; + rssi_level = 1; + } + else if(priv->undecorated_smoothed_pwdb > (long)LowRSSIThreshForRA){ + pRA->ratr_state = DM_RATR_STA_MIDDLE; + rssi_level = 2; + }else{ + pRA->ratr_state = DM_RATR_STA_LOW; + rssi_level = 3; + } + if((pRA->PreRATRState != pRA->ratr_state) || ((pRA->PreRATRState == pRA->ratr_state) && (rssi_level != priv->rssi_level))) + { + RT_TRACE(COMP_RATE, "Target AP addr : "MAC_FMT"\n", MAC_ARG(priv->rtllib->current_network.bssid)); + RT_TRACE(COMP_RATE, "RSSI = %ld\n", priv->undecorated_smoothed_pwdb); + RT_TRACE(COMP_RATE, "RSSI_LEVEL = %d\n", rssi_level); + RT_TRACE(COMP_RATE, "PreState = %d, CurState = %d\n", pRA->PreRATRState, pRA->ratr_state); + priv->rtllib->UpdateHalRAMaskHandler( + dev, + false, + 0, + priv->rtllib->pHTInfo->PeerMimoPs, + priv->rtllib->mode, + priv->rtllib->pHTInfo->bCurTxBW40MHz, + rssi_level); + priv->rssi_level = rssi_level; + pRA->PreRATRState = pRA->ratr_state; + } + } + if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_ADHOC)){ + int i; + struct sta_info *pEntry; + + for(i = 0; i < PEER_MAX_ASSOC; i++){ + pEntry = priv->rtllib->peer_assoc_list[i]; + if(NULL != pEntry){ + pRA = &pEntry->rate_adaptive; + switch (pRA->PreRATRState){ + case DM_RATR_STA_HIGH: + HighRSSIThreshForRA = 50; + LowRSSIThreshForRA = 20; + break; + case DM_RATR_STA_MIDDLE: + HighRSSIThreshForRA = 55; + LowRSSIThreshForRA = 20; + break; + case DM_RATR_STA_LOW: + HighRSSIThreshForRA = 50; + LowRSSIThreshForRA = 25; + break; + default: + HighRSSIThreshForRA = 50; + LowRSSIThreshForRA = 20; + break; + } + + if(pEntry->rssi_stat.UndecoratedSmoothedPWDB > HighRSSIThreshForRA){ + pRA->ratr_state = DM_RATR_STA_HIGH; + rssi_level = 1; + }else if(pEntry->rssi_stat.UndecoratedSmoothedPWDB > LowRSSIThreshForRA){ + pRA->ratr_state = DM_RATR_STA_MIDDLE; + rssi_level = 2; + }else{ + pRA->ratr_state = DM_RATR_STA_LOW; + rssi_level = 3; + } + + if(pRA->PreRATRState != pRA->ratr_state){ + RT_TRACE(COMP_RATE, "AsocEntry addr : "MAC_FMT"\n", MAC_ARG(pEntry->macaddr)); + RT_TRACE(COMP_RATE, "RSSI = %ld\n", pEntry->rssi_stat.UndecoratedSmoothedPWDB); + RT_TRACE(COMP_RATE, "RSSI_LEVEL = %d\n", rssi_level); + RT_TRACE(COMP_RATE, "PreState = %d, CurState = %d\n", pRA->PreRATRState, pRA->ratr_state); + priv->rtllib->UpdateHalRAMaskHandler( + dev, + false, + pEntry->aid+1, + pEntry->htinfo.MimoPs, + pEntry->wireless_mode, + pEntry->htinfo.bCurTxBW40MHz, + rssi_level); + pRA->PreRATRState = pRA->ratr_state; + } + + } + } + } +#ifdef _RTL8192_EXT_PATCH_ + if(priv->rtllib->iw_mode == IW_MODE_MESH) + { + if(priv->mshobj->ext_refresh_rate_adaptive_mask) + priv->mshobj->ext_refresh_rate_adaptive_mask(priv); + } +#endif +} + +void Adhoc_InitRateAdaptive(struct net_device *dev,struct sta_info *pEntry) +{ + prate_adaptive pRA = (prate_adaptive)&pEntry->rate_adaptive; + struct r8192_priv *priv = rtllib_priv(dev); + + pRA->ratr_state = DM_RATR_STA_MAX; + pRA->high2low_rssi_thresh_for_ra = RateAdaptiveTH_High; + pRA->low2high_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M+5; + pRA->low2high_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M+5; + + pRA->high_rssi_thresh_for_ra = RateAdaptiveTH_High+5; + pRA->low_rssi_thresh_for_ra20M = RateAdaptiveTH_Low_20M; + pRA->low_rssi_thresh_for_ra40M = RateAdaptiveTH_Low_40M; + + if (priv->rf_type == RF_2T4R) + { + /* 2008/01/11 MH Modify 2T RATR table for different RSSI. */ + pRA->upper_rssi_threshold_ratr = 0x8f0f0000; + pRA->middle_rssi_threshold_ratr = 0x8d0ff000; + pRA->low_rssi_threshold_ratr = 0x8f0ff003; + pRA->low_rssi_threshold_ratr_40M = 0x8f0ff007; + pRA->low_rssi_threshold_ratr_20M = 0x8f0ff003; + } + else if (priv->rf_type == RF_1T2R) + { + pRA->upper_rssi_threshold_ratr = 0x000f0000; + pRA->middle_rssi_threshold_ratr = 0x000ff000; + pRA->low_rssi_threshold_ratr = 0x000ff003; + pRA->low_rssi_threshold_ratr_40M = 0x000ff007; + pRA->low_rssi_threshold_ratr_20M = 0x000ff003; + } + +} + + +void Adhoc_InitRateAdaptiveState(struct net_device *dev,struct sta_info *pEntry) +{ + prate_adaptive pRA = (prate_adaptive)&pEntry->rate_adaptive; + + pRA->ratr_state = DM_RATR_STA_MAX; + pRA->PreRATRState = DM_RATR_STA_MAX; +} + +#if 0 +static void Adhoc_dm_CheckRateAdaptive(struct net_device * dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + prate_adaptive pRA; + u32 currentRATR, targetRATR = 0; + u32 LowRSSIThreshForRA = 0, HighRSSIThreshForRA = 0; + bool bShortGIEnabled = false; + u8 i = 0; + struct sta_info *pEntry = NULL; + + if(!priv->up) + { + RT_TRACE(COMP_RATE, "<---- AP_dm_CheckRateAdaptive(): driver is going to unload\n"); + return; + } + + for(i=0;ipeer_assoc_list[i]; + if(NULL != pEntry) + { + pRA = (prate_adaptive)&pEntry->rate_adaptive; + if(pRA->rate_adaptive_disabled) + continue; + if((pEntry->wireless_mode!=WIRELESS_MODE_N_24G) && (pEntry->wireless_mode != WIRELESS_MODE_N_5G)) + continue; + bShortGIEnabled = (pEntry->htinfo.bCurTxBW40MHz && priv->rtllib->pHTInfo->bCurShortGI40MHz && pEntry->htinfo.bCurShortGI40MHz) | + (!pEntry->htinfo.bCurTxBW40MHz && priv->rtllib->pHTInfo->bCurShortGI20MHz && pEntry->htinfo.bCurShortGI20MHz); + pRA->upper_rssi_threshold_ratr = + (pRA->upper_rssi_threshold_ratr & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ; + + pRA->middle_rssi_threshold_ratr = + (pRA->middle_rssi_threshold_ratr & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ; + + + if (pEntry->htinfo.bBw40MHz) + { + pRA->low_rssi_threshold_ratr = + (pRA->low_rssi_threshold_ratr_40M & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ; + } + else + { + pRA->low_rssi_threshold_ratr = + (pRA->low_rssi_threshold_ratr_20M & (~BIT31)) | ((bShortGIEnabled)? BIT31:0) ; + } + if (pRA->ratr_state == DM_RATR_STA_HIGH) + { + HighRSSIThreshForRA = pRA->high2low_rssi_thresh_for_ra; + LowRSSIThreshForRA = + (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)? + (pRA->low_rssi_thresh_for_ra40M):(pRA->low_rssi_thresh_for_ra20M); + } + else if (pRA->ratr_state == DM_RATR_STA_LOW) + { + HighRSSIThreshForRA = pRA->high_rssi_thresh_for_ra; + LowRSSIThreshForRA = + (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)? + (pRA->low2high_rssi_thresh_for_ra40M):(pRA->low2high_rssi_thresh_for_ra20M); + } + else + { + HighRSSIThreshForRA = pRA->high_rssi_thresh_for_ra; + LowRSSIThreshForRA = + (priv->CurrentChannelBW != HT_CHANNEL_WIDTH_20)? + (pRA->low_rssi_thresh_for_ra40M):(pRA->low_rssi_thresh_for_ra20M); + } + if(priv->undecorated_smoothed_pwdb >= (int)HighRSSIThreshForRA) + { + pRA->ratr_state = DM_RATR_STA_HIGH; + targetRATR = pRA->upper_rssi_threshold_ratr; + } + else if(priv->undecorated_smoothed_pwdb >= (int)LowRSSIThreshForRA) + { + pRA->ratr_state = DM_RATR_STA_MIDDLE; + targetRATR = pRA->middle_rssi_threshold_ratr; + } + else + { + pRA->ratr_state = DM_RATR_STA_LOW; + targetRATR = pRA->low_rssi_threshold_ratr; + } + currentRATR = read_nic_dword(dev, pEntry->ratr_index*4 + RATR0); + if( targetRATR != currentRATR ) + { + if(priv->rf_type == RF_1T2R) + { + targetRATR &=~ (RATE_ALL_OFDM_2SS); + } + printk("<<<<<<<<<<ratr_index*4, targetRATR); + write_nic_byte(dev, UFWP, 1); + pRA->last_ratr = targetRATR; + } + } + } + +} +#endif + +#endif +/*---------------------------Define function prototype------------------------*/ + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_rfkill.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_rfkill.h @@ -0,0 +1,12 @@ +#ifndef RTL_RFKILL_H +#define RTL_RFKILL_H + +#ifdef CONFIG_RTL_RFKILL +struct net_device; + +bool rtl8192_rfkill_init(struct net_device *dev); +void rtl8192_rfkill_poll(struct net_device *dev); +void rtl8192_rfkill_exit(struct net_device *dev); +#endif + +#endif /* RTL_RFKILL_H */ --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_pm.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_pm.c @@ -0,0 +1,193 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifdef CONFIG_PM_RTL +#ifdef RTL8192CE +#include "rtl_core.h" +#include "rtl8192c/r8192C_hw.h" +#include "rtl8192c/r8192C_phy.h" +#include "rtl8192c/r8192C_phyreg.h" +#include "rtl8192c/r8192C_rtl6052.h" +#elif defined RTL8192SE +#include "rtl_core.h" +#include "rtl8192s/r8192S_hw.h" +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_rtl6052.h" +#else +#include "rtl_core.h" +#include "rtl8192e/r8192E_hw.h" +#include "rtl8192e/r8190P_rtl8256.h" +#endif +#include "rtl_pm.h" + +int rtl8192E_save_state (struct pci_dev *dev, pm_message_t state) +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) + printk(KERN_NOTICE "r8192E save state call (state %u).\n", state); +#else + printk(KERN_NOTICE "r8192E save state call (state %u).\n", state.event); +#endif + return(-EAGAIN); +} + + +int rtl8192E_suspend (struct pci_dev *pdev, pm_message_t state) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct r8192_priv *priv = rtllib_priv(dev); +#if !(defined RTL8192SE || defined RTL8192CE) + u32 ulRegRead; +#endif + + RT_TRACE(COMP_POWER, "============> r8192E suspend call.\n"); + printk("============> r8192E suspend call.\n"); +#ifdef ENABLE_GPIO_RADIO_CTL + del_timer_sync(&priv->gpio_polling_timer); + cancel_delayed_work(&priv->gpio_change_rf_wq); + priv->polling_timer_on = 0; +#endif + + if (!netif_running(dev)){ + printk("RTL819XE:UI is open out of suspend function\n"); + goto out_pci_suspend; + } + +#ifdef HAVE_NET_DEVICE_OPS + if (dev->netdev_ops->ndo_stop) + dev->netdev_ops->ndo_stop(dev); +#else + dev->stop(dev); +#endif + netif_device_detach(dev); + +#if !(defined RTL8192SE || defined RTL8192CE) + if(!priv->rtllib->bSupportRemoteWakeUp) { + MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_INIT); + ulRegRead = read_nic_dword(dev, CPU_GEN); + ulRegRead|=CPU_GEN_SYSTEM_RESET; + write_nic_dword(dev, CPU_GEN, ulRegRead); + } else { + write_nic_dword(dev, WFCRC0, 0xffffffff); + write_nic_dword(dev, WFCRC1, 0xffffffff); + write_nic_dword(dev, WFCRC2, 0xffffffff); +#ifdef RTL8190P + ucRegRead = read_nic_byte(dev, GPO); + ucRegRead |= BIT0; + write_nic_byte(dev, GPO, ucRegRead); +#endif + write_nic_byte(dev, PMR, 0x5); + write_nic_byte(dev, MacBlkCtrl, 0xa); + } +#endif +out_pci_suspend: + RT_TRACE(COMP_POWER, "r8192E support WOL call??????????????????????\n"); + printk("r8192E support WOL call??????????????????????\n"); + if(priv->rtllib->bSupportRemoteWakeUp) { + RT_TRACE(COMP_POWER, "r8192E support WOL call!!!!!!!!!!!!!!!!!!.\n"); + } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) + pci_save_state(pdev,&(priv->pci_state)); + pci_disable_device(pdev); + pci_enable_wake(pdev, state,\ + priv->rtllib->bSupportRemoteWakeUp?1:0); + pci_set_power_state(pdev,state); +#else + pci_save_state(pdev); + pci_disable_device(pdev); + pci_enable_wake(pdev, pci_choose_state(pdev,state),\ + priv->rtllib->bSupportRemoteWakeUp?1:0); + pci_set_power_state(pdev,pci_choose_state(pdev,state)); +#endif + + mdelay(20); + + return 0; +} + +int rtl8192E_resume (struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); +#ifdef ENABLE_GPIO_RADIO_CTL + struct r8192_priv *priv = rtllib_priv(dev); +#endif + int err; + u32 val; + + RT_TRACE(COMP_POWER, "================>r8192E resume call."); + printk("================>r8192E resume call.\n"); + + pci_set_power_state(pdev, PCI_D0); + + err = pci_enable_device(pdev); + if(err) { + printk(KERN_ERR "%s: pci_enable_device failed on resume\n", + dev->name); + return err; + } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) + pci_restore_state(pdev,&(priv->pci_state)); +#else + pci_restore_state(pdev); +#endif + + pci_read_config_dword(pdev, 0x40, &val); + if ((val & 0x0000ff00) != 0) { + pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); + } + + pci_enable_wake(pdev, PCI_D0, 0); + +#ifdef ENABLE_GPIO_RADIO_CTL + if(priv->polling_timer_on == 0){ + check_rfctrl_gpio_timer((unsigned long)dev); + } +#endif + + if(!netif_running(dev)){ + printk("RTL819XE:UI is open out of resume function\n"); + goto out; + } + + netif_device_attach(dev); +#ifdef HAVE_NET_DEVICE_OPS + if (dev->netdev_ops->ndo_open) + dev->netdev_ops->ndo_open(dev); +#else + dev->open(dev); +#endif +out: + RT_TRACE(COMP_POWER, "<================r8192E resume call.\n"); + return 0; +} + + +int rtl8192E_enable_wake (struct pci_dev *dev, pm_message_t state, int enable) +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) + printk(KERN_NOTICE "r8192E enable wake call (state %u, enable %d).\n", + state, enable); +#else + printk(KERN_NOTICE "r8192E enable wake call (state %u, enable %d).\n", + state.event, enable); +#endif + return(-EAGAIN); +} + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_endianfree.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_endianfree.h @@ -0,0 +1,156 @@ +#ifndef __INC_ENDIANFREE_H +#define __INC_ENDIANFREE_H + +/* + * Call endian free function when + * 1. Read/write packet content. + * 2. Before write integer to IO. + * 3. After read integer from IO. + */ + +#define __MACHINE_LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ +#define __MACHINE_BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net, ppc */ + +#define BYTE_ORDER __MACHINE_LITTLE_ENDIAN + +#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN +#define EF1Byte(_val) ((u8)(_val)) +#define EF2Byte(_val) ((u16)(_val)) +#define EF4Byte(_val) ((u32)(_val)) + +#else +#define EF1Byte(_val) ((u8)(_val)) +#define EF2Byte(_val) (((((u16)(_val))&0x00ff)<<8)|((((u16)(_val))&0xff00)>>8)) +#define EF4Byte(_val) (((((u32)(_val))&0x000000ff)<<24)|\ + ((((u32)(_val))&0x0000ff00)<<8)|\ + ((((u32)(_val))&0x00ff0000)>>8)|\ + ((((u32)(_val))&0xff000000)>>24)) +#endif + +#define ReadEF1Byte(_ptr) EF1Byte(*((u8 *)(_ptr))) +#define ReadEF2Byte(_ptr) EF2Byte(*((u16 *)(_ptr))) +#define ReadEF4Byte(_ptr) EF4Byte(*((u32 *)(_ptr))) + +#define WriteEF1Byte(_ptr, _val) (*((u8 *)(_ptr)))=EF1Byte(_val) +#define WriteEF2Byte(_ptr, _val) (*((u16 *)(_ptr)))=EF2Byte(_val) +#define WriteEF4Byte(_ptr, _val) (*((u32 *)(_ptr)))=EF4Byte(_val) +#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN +#define H2N1BYTE(_val) ((u8)(_val)) +#define H2N2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\ + ((((u16)(_val))&0xff00)>>8)) +#define H2N4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\ + ((((u32)(_val))&0x0000ff00)<<8) |\ + ((((u32)(_val))&0x00ff0000)>>8) |\ + ((((u32)(_val))&0xff000000)>>24)) +#else +#define H2N1BYTE(_val) ((u8)(_val)) +#define H2N2BYTE(_val) ((u16)(_val)) +#define H2N4BYTE(_val) ((u32)(_val)) +#endif + +#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN +#define N2H1BYTE(_val) ((u8)(_val)) +#define N2H2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\ + ((((u16)(_val))&0xff00)>>8)) +#define N2H4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\ + ((((u32)(_val))&0x0000ff00)<<8) |\ + ((((u32)(_val))&0x00ff0000)>>8) |\ + ((((u32)(_val))&0xff000000)>>24)) +#else +#define N2H1BYTE(_val) ((u8)(_val)) +#define N2H2BYTE(_val) ((u16)(_val)) +#define N2H4BYTE(_val) ((u32)(_val)) +#endif + +#define BIT_LEN_MASK_32(__BitLen) (0xFFFFFFFF >> (32 - (__BitLen))) +#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) + +#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) (EF4Byte(*((u32 *)(__pStart)))) + +#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \ + & \ + BIT_LEN_MASK_32(__BitLen) \ + ) + +#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ + & \ + ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \ + ) + +#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \ + *((u32 *)(__pStart)) = \ + EF4Byte( \ + LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ + | \ + ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \ + ); + + +#define BIT_LEN_MASK_16(__BitLen) \ + (0xFFFF >> (16 - (__BitLen))) + +#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \ + (BIT_LEN_MASK_16(__BitLen) << (__BitOffset)) + +#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ + (EF2Byte(*((u16 *)(__pStart)))) + +#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \ + & \ + BIT_LEN_MASK_16(__BitLen) \ + ) + +#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ + & \ + ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \ + ) + +#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \ + *((u16 *)(__pStart)) = \ + EF2Byte( \ + LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ + | \ + ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \ + ); + +#define BIT_LEN_MASK_8(__BitLen) \ + (0xFF >> (8 - (__BitLen))) + +#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \ + (BIT_LEN_MASK_8(__BitLen) << (__BitOffset)) + +#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ + (EF1Byte(*((u8 *)(__pStart)))) + +#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \ + & \ + BIT_LEN_MASK_8(__BitLen) \ + ) + +#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ + & \ + ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \ + ) + +#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \ + *((u8 *)(__pStart)) = \ + EF1Byte( \ + LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ + | \ + ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \ + ); + +#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment)) +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_core.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_core.h @@ -0,0 +1,1449 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifndef _RTL_CORE_H +#define _RTL_CORE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) +#include +#endif +#include "rtllib/rtllib.h" + +#ifdef ENABLE_DOT11D +#include "rtllib/dot11d.h" +#endif + +#ifdef RTL8192SE +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_firmware.h" +#include "rtl8192s/r8192S_hw.h" +#elif defined RTL8190P || defined RTL8192E +#include "rtl8192e/r8192E_firmware.h" +#include "rtl8192e/r8192E_hw.h" +#endif + +#ifdef RTL8192SE +#include "rtl8192s/r8192S_scan.h" +#include "rtl8192s/r8192S_dev.h" +#include "rtl8192s/r8192S_led.h" +#include "rtl8192s/r8192S_def.h" +#include "rtl8192s/r8192S_mp.h" +#elif defined RTL8190P || defined RTL8192E +#include "rtl8192e/r8190P_def.h" +#include "rtl8192e/r8192E_dev.h" +#elif defined RTL8192CE +#include "rtl8192c/r8192C_dev.h" +#include "rtl8192c/r8192C_led.h" +#include "rtl8192c/r8192C_def.h" +#include "rtl8192c/r8192C_phy.h" +#include "rtl8192c/r8192C_phyreg.h" +#include "rtl8192c/r8192C_firmware.h" +#include "rtl8192c/r8192C_hw.h" +#include "rtl8192c/r8192C_rtl6052.h" +#include "rtl8192c/r8192C_Efuse.h" +#include "rtl8192c/r8192C_com.h" +#endif + +#ifdef CONFIG_CFG_80211 +#include "rtl_regd.h" +#endif + +#ifdef CONFIG_RTL_RFKILL +#include "rtl_rfkill.h" +#endif + +#include "rtl_debug.h" +#include "rtl_eeprom.h" +#include "rtl_ps.h" +#include "rtl_cam.h" + +#define DRV_COPYRIGHT "Copyright(c) 2008 - 2010 Realsil Semiconductor Corporation" +#define DRV_AUTHOR "" +#define DRV_VERSION "0015.0127.2010" + +#ifdef RTL8190P +#define DRV_NAME "rtl819xP" +#elif defined RTL8192E +#define DRV_NAME "rtl819xE" +#elif defined RTL8192SE +#define DRV_NAME "rtl819xSE" +#elif defined RTL8192CE +#define DRV_NAME "rtl8192CE" +#endif + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) +#define RTL_PCI_DEVICE(vend, dev, cfg) \ + .vendor = (vend), .device = (dev), \ + .subvendor = PCI_ANY_ID, .subdevice =PCI_ANY_ID , \ + .driver_data = (kernel_ulong_t)&(cfg) +#else +#define RTL_PCI_DEVICE(vend, dev, cfg) \ + .vendor = (vend), .device = (dev), \ + .subvendor = PCI_ANY_ID, .subdevice =PCI_ANY_ID +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + typedef void irqreturn_type; +#else + typedef irqreturn_t irqreturn_type; +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) + +#if !defined(PCI_CAP_ID_EXP) +#define PCI_CAP_ID_EXP 0x10 +#endif +#if !defined(PCI_EXP_LNKCTL) +#define PCI_EXP_LNKCTL 0x10 +#endif + +typedef int __bitwise pci_power_t; +#define PCI_D0 ((pci_power_t __force) 0) +#define PCI_D1 ((pci_power_t __force) 1) +#define PCI_D2 ((pci_power_t __force) 2) +#define PCI_D3hot ((pci_power_t __force) 3) +#define PCI_D3cold ((pci_power_t __force) 4) +#define PCI_UNKNOWN ((pci_power_t __force) 5) +#define PCI_POWER_ERROR ((pci_power_t __force) -1) + +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) + #define rtl8192_interrupt(x,y,z) rtl8192_interrupt_rsl(x,y,z) +#else + #define rtl8192_interrupt(x,y,z) rtl8192_interrupt_rsl(x,y) +#endif + +#define RTL_MAX_SCAN_SIZE 128 + +#define RTL_RATE_MAX 30 + +#define TOTAL_CAM_ENTRY 32 +#define CAM_CONTENT_COUNT 8 + +#ifndef BIT +#define BIT(_i) (1<<(_i)) +#endif + +#define DMESG(x,a...) +#define DMESGW(x,a...) +#define DMESGE(x,a...) +extern u32 rt_global_debug_component; +#define RT_TRACE(component, x, args...) \ +do { if(rt_global_debug_component & component) \ + printk(KERN_DEBUG DRV_NAME ":" x "\n" , \ + ##args);\ +}while(0); + +#ifdef _RTL8192_EXT_PATCH_ +#define IS_NIC_DOWN(priv) ((!(priv)->up) && (!(priv)->mesh_up)) +#else +#define IS_NIC_DOWN(priv) (!(priv)->up) +#endif + +#ifdef RTL8192CE +#define RT_ASSERT(_Exp,Fmt) \ + if(!(_Exp)) \ + { \ + printk("Rtl819x: "); \ + printk Fmt; \ + } +#define PHY_BBR BIT0 +#define PHY_BBW BIT1 +#define PHY_RFR BIT2 +#define PHY_RFW BIT3 +#define PHY_MACR BIT4 +#define PHY_MACW BIT5 +#define PHY_ALLR BIT6 +#define PHY_ALLW BIT7 +#define PHY_TXPWR BIT8 +#define PHY_PWRDIFF BIT9 +/* Define different debug flag for dedicated service modules in debug flag array. */ +typedef enum tag_DBGP_Flag_Type_Definition +{ + FQoS = 0, + FTX = 1, + FRX = 2, + FSEC = 3, + FMGNT = 4, + FMLME = 5, + FRESOURCE = 6, + FBEACON = 7, + FISR = 8, + FPHY = 9, + FMP = 10, + FEEPROM = 11, + FPWR = 12, + FDM = 13, + FDBGCtrl = 14, + FC2H = 15, + FBT = 16, + FINIT = 17, + DBGP_TYPE_MAX +}DBGP_FLAG_E; +#define INIT_EEPROM BIT0 +#define INIT_TxPower BIT1 +#define INIT_IQK BIT2 +#define EFUSE_READ_ALL BIT2 +#define EFUSE_PG BIT1 +#define DM_Monitor BIT2 +#define TX_DESC BIT3 +#define RTPRINT(dbgtype, dbgflag, printstr) \ + { \ + if(dbgflag == TX_DESC) \ + { \ + printk printstr; \ + } \ + } + +#define RT_PRINT_DATA(_Comp, _TitleString, _HexData, _HexDataLen) \ + do {\ + if((_Comp) & rt_global_debug_component ) \ + { \ + int __i; \ + u8* ptr = (u8*)_HexData; \ + printk("Rtl819x: "); \ + printk(_TitleString); \ + for( __i=0; __i<(int)_HexDataLen; __i++ ) \ + { \ + printk("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \ + if (((__i + 1) % 16) == 0) printk("\n"); \ + } \ + printk("\n"); \ + } \ + }while(0); +#endif + +#define RTL819x_DEBUG +#ifdef RTL819x_DEBUG +#define assert(expr) \ + if (!(expr)) { \ + printk( "Assertion failed! %s,%s,%s,line=%d\n", \ + #expr,__FILE__,__FUNCTION__,__LINE__); \ + } +#define RT_DEBUG_DATA(level, data, datalen) \ + do{ if ((rt_global_debug_component & (level)) == (level)) \ + { \ + int _i; \ + u8* _pdata = (u8*) data; \ + printk(KERN_DEBUG DRV_NAME ": %s()\n", __FUNCTION__); \ + for(_i=0; _i<(int)(datalen); _i++) \ + { \ + printk("%2x ", _pdata[_i]); \ + if ((_i+1)%16 == 0) printk("\n"); \ + } \ + printk("\n"); \ + } \ + } while (0) +#else +#define assert(expr) do {} while (0) +#define RT_DEBUG_DATA(level, data, datalen) do {} while(0) +#endif + +#ifdef _RTL8192_EXT_PATCH_ +#define IS_UNDER_11N_AES_MODE(_rtllib) ((_rtllib->pHTInfo->bCurrentHTSupport == true) &&\ + ((_rtllib->pairwise_key_type == KEY_TYPE_CCMP) || \ + (_rtllib->mesh_pairwise_key_type == KEY_TYPE_CCMP))) +#else +#define IS_UNDER_11N_AES_MODE(_rtllib) ((_rtllib->pHTInfo->bCurrentHTSupport == true) &&\ + (_rtllib->pairwise_key_type == KEY_TYPE_CCMP)) +#endif + +#define HAL_MEMORY_MAPPED_IO_RANGE_8190PCI 0x1000 +#define HAL_HW_PCI_REVISION_ID_8190PCI 0x00 +#define HAL_MEMORY_MAPPED_IO_RANGE_8192PCIE 0x4000 +#define HAL_HW_PCI_REVISION_ID_8192PCIE 0x01 +#define HAL_MEMORY_MAPPED_IO_RANGE_8192SE 0x4000 +#define HAL_HW_PCI_REVISION_ID_8192SE 0x10 +#define HAL_HW_PCI_REVISION_ID_8192CE 0x1 +#define HAL_MEMORY_MAPPED_IO_RANGE_8192CE 0x4000 +#define HAL_HW_PCI_REVISION_ID_8192DE 0x0 +#define HAL_MEMORY_MAPPED_IO_RANGE_8192DE 0x4000 + +#define HAL_HW_PCI_8180_DEVICE_ID 0x8180 +#define HAL_HW_PCI_8185_DEVICE_ID 0x8185 +#define HAL_HW_PCI_8188_DEVICE_ID 0x8188 +#define HAL_HW_PCI_8198_DEVICE_ID 0x8198 +#define HAL_HW_PCI_8190_DEVICE_ID 0x8190 +#define HAL_HW_PCI_8192_DEVICE_ID 0x8192 +#define HAL_HW_PCI_8192SE_DEVICE_ID 0x8192 +#define HAL_HW_PCI_8174_DEVICE_ID 0x8174 +#define HAL_HW_PCI_8173_DEVICE_ID 0x8173 +#define HAL_HW_PCI_8172_DEVICE_ID 0x8172 +#define HAL_HW_PCI_8171_DEVICE_ID 0x8171 +#define HAL_HW_PCI_0045_DEVICE_ID 0x0045 +#define HAL_HW_PCI_0046_DEVICE_ID 0x0046 +#define HAL_HW_PCI_0044_DEVICE_ID 0x0044 +#define HAL_HW_PCI_0047_DEVICE_ID 0x0047 +#define HAL_HW_PCI_700F_DEVICE_ID 0x700F +#define HAL_HW_PCI_701F_DEVICE_ID 0x701F +#define HAL_HW_PCI_DLINK_DEVICE_ID 0x3304 +#define HAL_HW_PCI_8192CET_DEVICE_ID 0x8191 +#define HAL_HW_PCI_8192CE_DEVICE_ID 0x8178 +#define HAL_HW_PCI_8191CE_DEVICE_ID 0x8177 +#define HAL_HW_PCI_8188CE_DEVICE_ID 0x8176 +#define HAL_HW_PCI_8192CU_DEVICE_ID 0x8191 +#define HAL_HW_PCI_8192DE_DEVICE_ID 0x092D +#define HAL_HW_PCI_8192DU_DEVICE_ID 0x092D + +#ifdef RTL8192CE +#define RTL819X_DEFAULT_RF_TYPE RF_2T2R +#else +#define RTL819X_DEFAULT_RF_TYPE RF_1T2R +#endif + +#define RTLLIB_WATCH_DOG_TIME 2000 + +#define MAX_DEV_ADDR_SIZE 8 /* support till 64 bit bus width OS */ +#define MAX_FIRMWARE_INFORMATION_SIZE 32 +#define MAX_802_11_HEADER_LENGTH (40 + MAX_FIRMWARE_INFORMATION_SIZE) +#define ENCRYPTION_MAX_OVERHEAD 128 +#define MAX_FRAGMENT_COUNT 8 +#define MAX_TRANSMIT_BUFFER_SIZE (1600+(MAX_802_11_HEADER_LENGTH+ENCRYPTION_MAX_OVERHEAD)*MAX_FRAGMENT_COUNT) + +#define scrclng 4 + +#define DEFAULT_FRAG_THRESHOLD 2342U +#define MIN_FRAG_THRESHOLD 256U +#define DEFAULT_BEACONINTERVAL 0x64U + +#define DEFAULT_SSID "" +#define DEFAULT_RETRY_RTS 7 +#define DEFAULT_RETRY_DATA 7 +#define PRISM_HDR_SIZE 64 + +#define PHY_RSSI_SLID_WIN_MAX 100 + +#define RTL_IOCTL_WPA_SUPPLICANT SIOCIWFIRSTPRIV+30 + +#define TxBBGainTableLength 37 +#define CCKTxBBGainTableLength 23 + +#define CHANNEL_PLAN_LEN 10 +#define sCrcLng 4 + +#define NIC_SEND_HANG_THRESHOLD_NORMAL 4 +#define NIC_SEND_HANG_THRESHOLD_POWERSAVE 8 + +#define MAX_TX_QUEUE 9 + +#if defined RTL8192SE || defined RTL8192CE +#define MAX_RX_QUEUE 2 +#else +#define MAX_RX_QUEUE 1 +#endif + +#define MAX_RX_COUNT 64 +#define MAX_TX_QUEUE_COUNT 9 + +enum RTL819x_PHY_PARAM { + RTL819X_PHY_MACPHY_REG = 0, + RTL819X_PHY_MACPHY_REG_PG = 1, + RTL8188C_PHY_MACREG =2, + RTL8192C_PHY_MACREG =3, + RTL819X_PHY_REG = 4, + RTL819X_PHY_REG_1T2R = 5, + RTL819X_PHY_REG_to1T1R = 6, + RTL819X_PHY_REG_to1T2R = 7, + RTL819X_PHY_REG_to2T2R = 8, + RTL819X_PHY_REG_PG = 9, + RTL819X_AGC_TAB = 10, + RTL819X_PHY_RADIO_A =11, + RTL819X_PHY_RADIO_A_1T =12, + RTL819X_PHY_RADIO_A_2T =13, + RTL819X_PHY_RADIO_B =14, + RTL819X_PHY_RADIO_B_GM =15, + RTL819X_PHY_RADIO_C =16, + RTL819X_PHY_RADIO_D =17, + RTL819X_EEPROM_MAP =18, + RTL819X_EFUSE_MAP =19, +}; + +enum RTL_DEBUG { + COMP_TRACE = BIT0, + COMP_DBG = BIT1, + COMP_INIT = BIT2, + COMP_RECV = BIT3, + COMP_SEND = BIT4, + COMP_CMD = BIT5, + COMP_POWER = BIT6, + COMP_EPROM = BIT7, + COMP_SWBW = BIT8, + COMP_SEC = BIT9, + COMP_LPS = BIT10, + COMP_QOS = BIT11, + COMP_RATE = BIT12, + COMP_RXDESC = BIT13, + COMP_PHY = BIT14, + COMP_DIG = BIT15, + COMP_TXAGC = BIT16, + COMP_HALDM = BIT17, + COMP_POWER_TRACKING = BIT18, + COMP_CH = BIT19, + COMP_RF = BIT20, + COMP_FIRMWARE = BIT21, + COMP_HT = BIT22, + COMP_RESET = BIT23, + COMP_CMDPKT = BIT24, + COMP_SCAN = BIT25, + COMP_PS = BIT26, + COMP_DOWN = BIT27, + COMP_INTR = BIT28, + COMP_LED = BIT29, + COMP_MLME = BIT30, + COMP_ERR = BIT31 +}; + +typedef enum{ + NIC_UNKNOWN = 0, + NIC_8192E = 1, + NIC_8190P = 2, + NIC_8192SE = 4, + NIC_8192CE = 5, + NIC_8192CU = 6, + NIC_8192DE = 7, + NIC_8192DU = 8, + } nic_t; + +typedef enum _RT_EEPROM_TYPE{ + EEPROM_93C46, + EEPROM_93C56, + EEPROM_BOOT_EFUSE, +}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE; + +typedef enum _tag_TxCmd_Config_Index{ + TXCMD_TXRA_HISTORY_CTRL = 0xFF900000, + TXCMD_RESET_TX_PKT_BUFF = 0xFF900001, + TXCMD_RESET_RX_PKT_BUFF = 0xFF900002, + TXCMD_SET_TX_DURATION = 0xFF900003, + TXCMD_SET_RX_RSSI = 0xFF900004, + TXCMD_SET_TX_PWR_TRACKING = 0xFF900005, + TXCMD_XXXX_CTRL, +}DCMD_TXCMD_OP; + +typedef enum _RT_RF_TYPE_819xU{ + RF_TYPE_MIN = 0, + RF_8225, + RF_8256, + RF_8258, + RF_6052=4, + RF_PSEUDO_11N = 5, +}RT_RF_TYPE_819xU, *PRT_RF_TYPE_819xU; + +typedef enum tag_Rf_Operatetion_State +{ + RF_STEP_INIT = 0, + RF_STEP_NORMAL, + RF_STEP_MAX +}RF_STEP_E; + +typedef enum _RT_STATUS{ + RT_STATUS_SUCCESS, + RT_STATUS_FAILURE, + RT_STATUS_PENDING, + RT_STATUS_RESOURCE +}RT_STATUS,*PRT_STATUS; + +typedef enum _RT_CUSTOMER_ID +{ + RT_CID_DEFAULT = 0, + RT_CID_8187_ALPHA0 = 1, + RT_CID_8187_SERCOMM_PS = 2, + RT_CID_8187_HW_LED = 3, + RT_CID_8187_NETGEAR = 4, + RT_CID_WHQL = 5, + RT_CID_819x_CAMEO = 6, + RT_CID_819x_RUNTOP = 7, + RT_CID_819x_Senao = 8, + RT_CID_TOSHIBA = 9, + RT_CID_819x_Netcore = 10, + RT_CID_Nettronix = 11, + RT_CID_DLINK = 12, + RT_CID_PRONET = 13, + RT_CID_COREGA = 14, + RT_CID_819x_ALPHA = 15, + RT_CID_819x_Sitecom = 16, + RT_CID_CCX = 17, + RT_CID_819x_Lenovo = 18, + RT_CID_819x_QMI = 19, + RT_CID_819x_Edimax_Belkin = 20, + RT_CID_819x_Sercomm_Belkin = 21, + RT_CID_819x_CAMEO1 = 22, + RT_CID_819x_MSI = 23, + RT_CID_819x_Acer = 24, + RT_CID_819x_HP =27, +}RT_CUSTOMER_ID, *PRT_CUSTOMER_ID; + +typedef enum _RT_OP_MODE{ + RT_OP_MODE_AP, + RT_OP_MODE_INFRASTRUCTURE, + RT_OP_MODE_IBSS, + RT_OP_MODE_NO_LINK, +}RT_OP_MODE, *PRT_OP_MODE; + +typedef enum _RESET_TYPE { + RESET_TYPE_NORESET = 0x00, + RESET_TYPE_NORMAL = 0x01, + RESET_TYPE_SILENT = 0x02 +} RESET_TYPE; + +typedef enum _IC_INFERIORITY_8192S{ + IC_INFERIORITY_A = 0, + IC_INFERIORITY_B = 1, +}IC_INFERIORITY_8192S, *PIC_INFERIORITY_8192S; + +typedef enum _PCI_BRIDGE_VENDOR { + PCI_BRIDGE_VENDOR_INTEL = 0x01, + PCI_BRIDGE_VENDOR_ATI = 0x02, + PCI_BRIDGE_VENDOR_AMD = 0x04, + PCI_BRIDGE_VENDOR_SIS = 0x08, + PCI_BRIDGE_VENDOR_UNKNOWN = 0x40, + PCI_BRIDGE_VENDOR_MAX = 0x80 +} PCI_BRIDGE_VENDOR; + +typedef struct buffer +{ + struct buffer *next; + u32 *buf; + dma_addr_t dma; + +} buffer; + +typedef struct rtl_reg_debug{ + unsigned int cmd; + struct { + unsigned char type; + unsigned char addr; + unsigned char page; + unsigned char length; + } head; + unsigned char buf[0xff]; +}rtl_reg_debug; + +typedef struct _rt_9x_tx_rate_history { + u32 cck[4]; + u32 ofdm[8]; + u32 ht_mcs[4][16]; +}rt_tx_rahis_t, *prt_tx_rahis_t; + +typedef struct _RT_SMOOTH_DATA_4RF { + char elements[4][100]; + u32 index; + u32 TotalNum; + u32 TotalVal[4]; +}RT_SMOOTH_DATA_4RF, *PRT_SMOOTH_DATA_4RF; + +#ifdef _RTL8192_EXT_PATCH_ +typedef struct _RT_SMOOTH_DATA { + u32 elements[100]; + u32 index; + u32 TotalNum; + u32 TotalVal; +}RT_SMOOTH_DATA, *PRT_SMOOTH_DATA; +#endif +typedef struct Stats +{ + unsigned long txrdu; + unsigned long rxrdu; + unsigned long rxok; + unsigned long rxframgment; + unsigned long rxcmdpkt[4]; + unsigned long rxurberr; + unsigned long rxstaterr; + unsigned long rxdatacrcerr; + unsigned long rxmgmtcrcerr; + unsigned long rxcrcerrmin; + unsigned long rxcrcerrmid; + unsigned long rxcrcerrmax; + unsigned long received_rate_histogram[4][32]; + unsigned long received_preamble_GI[2][32]; + unsigned long rx_AMPDUsize_histogram[5]; + unsigned long rx_AMPDUnum_histogram[5]; + unsigned long numpacket_matchbssid; + unsigned long numpacket_toself; + unsigned long num_process_phyinfo; + unsigned long numqry_phystatus; + unsigned long numqry_phystatusCCK; + unsigned long numqry_phystatusHT; + unsigned long received_bwtype[5]; + unsigned long txnperr; + unsigned long txnpdrop; + unsigned long txresumed; + unsigned long rxoverflow; + unsigned long rxint; + unsigned long txnpokint; + unsigned long ints; + unsigned long shints; + unsigned long txoverflow; + unsigned long txlpokint; + unsigned long txlpdrop; + unsigned long txlperr; + unsigned long txbeokint; + unsigned long txbedrop; + unsigned long txbeerr; + unsigned long txbkokint; + unsigned long txbkdrop; + unsigned long txbkerr; + unsigned long txviokint; + unsigned long txvidrop; + unsigned long txvierr; + unsigned long txvookint; + unsigned long txvodrop; + unsigned long txvoerr; + unsigned long txbeaconokint; + unsigned long txbeacondrop; + unsigned long txbeaconerr; + unsigned long txmanageokint; + unsigned long txmanagedrop; + unsigned long txmanageerr; + unsigned long txcmdpktokint; + unsigned long txdatapkt; + unsigned long txfeedback; + unsigned long txfeedbackok; + unsigned long txoktotal; + unsigned long txokbytestotal; + unsigned long txokinperiod; + unsigned long txmulticast; + unsigned long txbytesmulticast; + unsigned long txbroadcast; + unsigned long txbytesbroadcast; + unsigned long txunicast; + unsigned long txbytesunicast; + unsigned long rxbytesunicast; + unsigned long txfeedbackfail; + unsigned long txerrtotal; + unsigned long txerrbytestotal; + unsigned long txerrmulticast; + unsigned long txerrbroadcast; + unsigned long txerrunicast; + unsigned long txretrycount; + unsigned long txfeedbackretry; + u8 last_packet_rate; + unsigned long slide_signal_strength[100]; + unsigned long slide_evm[100]; + unsigned long slide_rssi_total; + unsigned long slide_evm_total; + long signal_strength; + long signal_quality; + long last_signal_strength_inpercent; + long recv_signal_power; + u8 rx_rssi_percentage[4]; + u8 rx_evm_percentage[2]; + long rxSNRdB[4]; + rt_tx_rahis_t txrate; + u32 Slide_Beacon_pwdb[100]; + u32 Slide_Beacon_Total; + RT_SMOOTH_DATA_4RF cck_adc_pwdb; + u32 CurrentShowTxate; +#ifdef _RTL8192_EXT_PATCH_ + u32 RssiCalculateCnt; + RT_SMOOTH_DATA ui_rssi; + RT_SMOOTH_DATA ui_link_quality; +#endif +} Stats; + +typedef struct ChnlAccessSetting { + u16 SIFS_Timer; + u16 DIFS_Timer; + u16 SlotTimeTimer; + u16 EIFS_Timer; + u16 CWminIndex; + u16 CWmaxIndex; +}*PCHANNEL_ACCESS_SETTING,CHANNEL_ACCESS_SETTING; + +typedef enum _TWO_PORT_STATUS +{ + TWO_PORT_STATUS__DEFAULT_ONLY, + TWO_PORT_STATUS__EXTENSION_ONLY, + TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT, + TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20, + TWO_PORT_STATUS__ADHOC, + TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE +}TWO_PORT_STATUS; + +typedef struct _txbbgain_struct +{ + long txbb_iq_amplifygain; + u32 txbbgain_value; +} txbbgain_struct, *ptxbbgain_struct; + +typedef struct _ccktxbbgain_struct +{ + u8 ccktxbb_valuearray[8]; +} ccktxbbgain_struct,*pccktxbbgain_struct; + +typedef struct _init_gain +{ + u8 xaagccore1; + u8 xbagccore1; + u8 xcagccore1; + u8 xdagccore1; + u8 cca; + +} init_gain, *pinit_gain; + +typedef struct _tx_ring{ + u32 * desc; + u8 nStuckCount; + struct _tx_ring * next; +}__attribute__ ((packed)) tx_ring, * ptx_ring; + +struct rtl8192_tx_ring { + tx_desc *desc; + dma_addr_t dma; + unsigned int idx; + unsigned int entries; + struct sk_buff_head queue; +}; + + + +struct rtl819x_ops{ + nic_t nic_type; + void (* get_eeprom_size)(struct net_device* dev); + void (* init_adapter_variable)(struct net_device* dev); + void (* init_before_adapter_start)(struct net_device* dev); + bool (* initialize_adapter)(struct net_device* dev); + void (*link_change)(struct net_device* dev); + void (* tx_fill_descriptor)(struct net_device* dev, tx_desc * tx_desc, cb_desc * cb_desc, struct sk_buff *skb); + void (* tx_fill_cmd_descriptor)(struct net_device* dev, tx_desc_cmd * entry, cb_desc * cb_desc, struct sk_buff *skb); + bool (* rx_query_status_descriptor)(struct net_device* dev, struct rtllib_rx_stats* stats, rx_desc *pdesc, struct sk_buff* skb); + bool (* rx_command_packet_handler)(struct net_device *dev, struct sk_buff* skb, rx_desc *pdesc); + void (* stop_adapter)(struct net_device *dev, bool reset); +#if defined RTL8192SE || defined RTL8192CE + void (* update_ratr_table)(struct net_device* dev,u8* pMcsRate,struct sta_info* pEntry); +#else + void (* update_ratr_table)(struct net_device* dev); +#endif + void (* irq_enable)(struct net_device* dev); + void (* irq_disable)(struct net_device* dev); + void (* irq_clear)(struct net_device* dev); + void (* rx_enable)(struct net_device* dev); + void (* tx_enable)(struct net_device* dev); + void (* interrupt_recognized)(struct net_device *dev, u32 *p_inta, u32 *p_intb); + bool (* TxCheckStuckHandler)(struct net_device* dev); + bool (* RxCheckStuckHandler)(struct net_device* dev); +}; + +typedef struct r8192_priv +{ + struct pci_dev *pdev; + struct pci_dev *bridge_pdev; + + u8 RegPciASPM; + u8 RegHwSwRfOffD3; + u8 RegSupportPciASPM; + + u8 rssi_level; + void *scan_cmd; + + u8 check_roaming_cnt; + struct rtl819x_ops* ops; + bool bfirst_init; + bool bfirst_after_down; + bool initialized_at_probe; + LOG_INTERRUPT_8190_T InterruptLog; + bool bIgnoreSilentReset; + u32 SilentResetRxSoltNum; + u32 SilentResetRxSlotIndex; + u32 SilentResetRxStuckEvent[MAX_SILENT_RESET_RX_SLOT_NUM]; + RT_CUSTOMER_ID CustomerID; + bool being_init_adapter; + bool sw_radio_on; + u8 IC_Cut; + int irq; + short irq_enabled; + struct rtllib_device *rtllib; + u8 Rf_Mode; + nic_t card_8192; + u8 card_8192_version; + short enable_gpio0; + enum card_type {PCI,MINIPCI,CARDBUS,USB}card_type; + short hw_plcp_len; + short plcp_preamble_mode; + u8 ScanDelay; + + spinlock_t fw_scan_lock; + spinlock_t irq_lock; + spinlock_t irq_th_lock; + spinlock_t tx_lock; + spinlock_t rf_ps_lock; + spinlock_t rw_lock; + spinlock_t rt_h2c_lock; +#ifdef CONFIG_ASPM_OR_D3 + spinlock_t D3_lock; +#endif + +#ifdef CONFIG_CFG_80211 + struct ieee80211_rate rates[IEEE80211_NUM_BANDS][RTL_RATE_MAX]; + struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) + struct semaphore mutex; +#else + struct mutex mutex; +#endif + bool ps_force; + spinlock_t rf_lock; + spinlock_t ps_lock; + + u32 irq_mask[2]; + short chan; + u8 hwscan_bw_40; + short sens; + short max_sens; + u32 rx_prevlen; + + rx_desc *rx_ring[MAX_RX_QUEUE]; + dma_addr_t rx_ring_dma[MAX_RX_QUEUE]; + unsigned int rx_idx[MAX_RX_QUEUE]; + struct sk_buff *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT]; + int rxringcount; + u16 rxbuffersize; + + struct sk_buff *rx_skb; + u32 *rxring; + u32 *rxringtail; + dma_addr_t rxringdma; + struct buffer *rxbuffer; + struct buffer *rxbufferhead; + short rx_skb_complete; + struct rtl8192_tx_ring tx_ring[MAX_TX_QUEUE_COUNT]; + int txringcount; + int txbuffsize; + int txfwbuffersize; + struct tasklet_struct irq_rx_tasklet; + struct tasklet_struct irq_tx_tasklet; + struct tasklet_struct irq_prepare_beacon_tasklet; + + struct buffer *txmapbufs; + struct buffer *txbkpbufs; + struct buffer *txbepbufs; + struct buffer *txvipbufs; + struct buffer *txvopbufs; + struct buffer *txcmdbufs; + struct buffer *txmapbufstail; + struct buffer *txbkpbufstail; + struct buffer *txbepbufstail; + struct buffer *txvipbufstail; + struct buffer *txvopbufstail; + struct buffer *txcmdbufstail; + ptx_ring txbeaconringtail; + dma_addr_t txbeaconringdma; + ptx_ring txbeaconring; + int txbeaconcount; + struct buffer *txbeaconbufs; + struct buffer *txbeaconbufstail; + ptx_ring txmapring; + ptx_ring txbkpring; + ptx_ring txbepring; + ptx_ring txvipring; + ptx_ring txvopring; + ptx_ring txcmdring; + ptx_ring txmapringtail; + ptx_ring txbkpringtail; + ptx_ring txbepringtail; + ptx_ring txvipringtail; + ptx_ring txvopringtail; + ptx_ring txcmdringtail; + ptx_ring txmapringhead; + ptx_ring txbkpringhead; + ptx_ring txbepringhead; + ptx_ring txvipringhead; + ptx_ring txvopringhead; + ptx_ring txcmdringhead; + dma_addr_t txmapringdma; + dma_addr_t txbkpringdma; + dma_addr_t txbepringdma; + dma_addr_t txvipringdma; + dma_addr_t txvopringdma; + dma_addr_t txcmdringdma; + + short up; + short up_first_time; +#ifdef _RTL8192_EXT_PATCH_ + short mesh_up; +#endif + short crcmon; + struct semaphore wx_sem; + struct semaphore rf_sem; + u8 rf_type; + RT_RF_TYPE_819xU rf_chip; + char nick[IW_ESSID_MAX_SIZE + 1]; + + short (*rf_set_sens)(struct net_device *dev,short sens); + u8 (*rf_set_chan)(struct net_device *dev,u8 ch); + void (*rf_close)(struct net_device *dev); + void (*rf_init)(struct net_device *dev); + short promisc; + /*stats*/ + struct Stats stats; + struct iw_statistics wstats; + struct proc_dir_entry *dir_dev; + + struct sk_buff_head rx_queue; + struct sk_buff_head skb_queue; + work_struct_rsl qos_activate; + atomic_t tx_pending[0x10]; + + u16 ShortRetryLimit; + u16 LongRetryLimit; + u32 TransmitConfig; + u8 RegCWinMin; +#ifdef _RTL8192_EXT_PATCH_ + u32 NumTxUnicast; + u8 keepAliveLevel; +#endif + + u32 LastRxDescTSFHigh; + u32 LastRxDescTSFLow; + + + u16 EarlyRxThreshold; + u32 ReceiveConfig; + u8 AcmControl; + + u8 RFProgType; + + u8 retry_data; + u8 retry_rts; + u16 rts; + + struct ChnlAccessSetting ChannelAccessSetting; + + work_struct_rsl reset_wq; + +#ifdef CONFIG_RTLWIFI_DEBUGFS + rtl_fs_debug *debug; +#endif /* CONFIG_IWLWIFI_DEBUGFS */ +#ifdef CONFIG_RTL_RFKILL + bool rfkill_off; +#endif + /**********************************************************/ + u16 basic_rate; + u8 short_preamble; + u8 slot_time; + u16 SifsTime; + u8 RegWirelessMode; + prt_firmware pFirmware; + rtl819x_loopback_e LoopbackMode; + firmware_source_e firmware_source; + u8 firmware_version; + u16 rf_pathmap; + bool AutoloadFailFlag; + short epromtype; + u16 eeprom_vid; + u16 eeprom_did; + u16 eeprom_svid; + u16 eeprom_smid; + u8 eeprom_CustomerID; + u16 eeprom_ChannelPlan; + u8 eeprom_version; + u8 EfuseMap[2][HWSET_MAX_SIZE_92S]; + u16 EfuseUsedBytes; + u8 EfuseUsedPercentage; + +#ifdef EFUSE_REPG_WORKAROUND + bool efuse_RePGSec1Flag; + u8 efuse_RePGData[8]; +#endif + u8 EEPROMRegulatory; + u8 EEPROMPwrGroup[2][3]; + u8 EEPROMOptional; + u8 ThermalValue; + long EntryMinUndecoratedSmoothedPWDB; + long EntryMaxUndecoratedSmoothedPWDB; + u8 DynamicTxHighPowerLvl; + u8 LastDTPLvl; + u32 CurrentRATR0; + FALSE_ALARM_STATISTICS FalseAlmCnt; + + bool bInformFWDriverControlDM; + u8 PwrGroupHT20[2][14]; + u8 PwrGroupHT40[2][14]; + u16 FwCmdIOMap; + u32 FwCmdIOParam; + bool bSupportASPM; + u32 RfRegChnlVal[2]; + u8 DMFlag; + u8 DM_Type; + u8 ShowRateMode; + u8 RATRTableBitmap; + +#if (EEPROM_OLD_FORMAT_SUPPORT == 1) + u8 EEPROMTxPowerLevelCCK[14]; + u8 EEPROMTxPowerLevelOFDM24G[14]; + u8 EEPROMTxPowerLevelOFDM5G[24]; +#else + u8 RfCckChnlAreaTxPwr[2][3]; + u8 RfOfdmChnlAreaTxPwr1T[2][3]; + u8 RfOfdmChnlAreaTxPwr2T[2][3]; +#endif + u8 EEPROMRfACCKChnl1TxPwLevel[3]; + u8 EEPROMRfAOfdmChnlTxPwLevel[3]; + u8 EEPROMRfCCCKChnl1TxPwLevel[3]; + u8 EEPROMRfCOfdmChnlTxPwLevel[3]; +#if defined (RTL8192S_WAPI_SUPPORT) + u8 EEPROMWapiSupport; + u8 WapiSupport; +#endif + u16 EEPROMTxPowerDiff; + u16 EEPROMAntPwDiff; + u8 EEPROMThermalMeter; + u8 EEPROMPwDiff; + u8 EEPROMCrystalCap; + + u8 EEPROMBluetoothCoexist; + u8 EEPROMBluetoothType; + u8 EEPROMBluetoothAntNum; + u8 EEPROMBluetoothAntIsolation; + u8 EEPROMBluetoothRadioShared; + + + u8 EEPROMSupportWoWLAN; + u8 EEPROMBoardType; + u8 EEPROM_Def_Ver; + u8 EEPROMHT2T_TxPwr[6]; + u8 EEPROMTSSI_A; + u8 EEPROMTSSI_B; + u8 EEPROMTxPowerLevelCCK_V1[3]; + u8 EEPROMLegacyHTTxPowerDiff; + bool bTXPowerDataReadFromEEPORM; + u16 RegChannelPlan; + u16 ChannelPlan; + bool bChnlPlanFromHW; + bool RegRfOff; + bool isRFOff; + bool bInPowerSaveMode; + u8 bHwRfOffAction; + BB_REGISTER_DEFINITION_T PHYRegDef[4]; + u8 pwrGroupCnt; +#if defined RTL8192CE + u32 MCSTxPowerLevelOriginalOffset[4][16]; +#elif defined RTL8192SE + u32 MCSTxPowerLevelOriginalOffset[4][7]; +#else + u32 MCSTxPowerLevelOriginalOffset[6]; +#endif + u32 CCKTxPowerLevelOriginalOffset; + u8 TxPowerLevelCCK[14]; + u8 TxPowerLevelCCK_A[14]; + u8 TxPowerLevelCCK_C[14]; + u8 TxPowerLevelOFDM24G[14]; + u8 TxPowerLevelOFDM5G[14]; + u8 TxPowerLevelOFDM24G_A[14]; + u8 TxPowerLevelOFDM24G_C[14]; + u8 LegacyHTTxPowerDiff; + u8 TxPowerDiff; + s8 RF_C_TxPwDiff; + s8 RF_B_TxPwDiff; + u8 RfTxPwrLevelCck[2][14]; + u8 RfTxPwrLevelOfdm1T[2][14]; + u8 RfTxPwrLevelOfdm2T[2][14]; + u8 AntennaTxPwDiff[3]; + u8 TxPwrHt20Diff[2][14]; + u8 TxPwrLegacyHtDiff[2][14]; +#if 0 + u8 TxPwrbandEdgeHt40[2][2]; + u8 TxPwrbandEdgeHt20[2][2]; + u8 TxPwrbandEdgeLegacyOfdm[2][2]; +#endif + u8 TxPwrSafetyFlag; + u8 HT2T_TxPwr_A[14]; + u8 HT2T_TxPwr_B[14]; + u8 CurrentCckTxPwrIdx; + u8 CurrentOfdm24GTxPwrIdx; + + u8 CrystalCap; + u8 ThermalMeter[2]; + u8 BluetoothCoexist; + IC_INFERIORITY_8192S IC_Class; + + u8 CckPwEnl; + u16 TSSI_13dBm; + u32 Pwr_Track; + u8 CCKPresentAttentuation_20Mdefault; + u8 CCKPresentAttentuation_40Mdefault; + char CCKPresentAttentuation_difference; + char CCKPresentAttentuation; + u8 bCckHighPower; + long undecorated_smoothed_pwdb; + long undecorated_smoothed_cck_adc_pwdb[4]; + u8 SwChnlInProgress; + u8 SwChnlStage; + u8 SwChnlStep; + u8 SetBWModeInProgress; + HT_CHANNEL_WIDTH CurrentChannelBW; + + u8 nCur40MhzPrimeSC; + u32 RfReg0Value[4]; + u8 NumTotalRFPath; + bool brfpath_rxenable[4]; + struct timer_list watch_dog_timer; + + bool bdynamic_txpower; + bool bDynamicTxHighPower; + bool bDynamicTxLowPower; + bool bLastDTPFlag_High; + bool bLastDTPFlag_Low; + + bool bstore_last_dtpflag; + bool bstart_txctrl_bydtp; + rate_adaptive rate_adaptive; + txbbgain_struct txbbgain_table[TxBBGainTableLength]; + u8 txpower_count; + bool btxpower_trackingInit; + u8 OFDM_index; + u8 CCK_index; + u8 Record_CCK_20Mindex; + u8 Record_CCK_40Mindex; + ccktxbbgain_struct cck_txbbgain_table[CCKTxBBGainTableLength]; + ccktxbbgain_struct cck_txbbgain_ch14_table[CCKTxBBGainTableLength]; + u8 rfa_txpowertrackingindex; + u8 rfa_txpowertrackingindex_real; + u8 rfa_txpowertracking_default; + u8 rfc_txpowertrackingindex; + u8 rfc_txpowertrackingindex_real; + u8 rfc_txpowertracking_default; + bool btxpower_tracking; + bool bcck_in_ch14; + + init_gain initgain_backup; + u8 DefaultInitialGain[4]; + bool bis_any_nonbepkts; + bool bcurrent_turbo_EDCA; + + bool SetFwCmdInProgress; + u8 CurrentFwCmdIO; + + u8 MidHighPwrTHR_L1; + u8 MidHighPwrTHR_L2; + + + bool bis_cur_rdlstate; + struct timer_list fsync_timer; + bool bfsync_processing; + u32 rate_record; + u32 rateCountDiffRecord; + u32 ContiuneDiffCount; + bool bswitch_fsync; + + u8 framesync; + u32 framesyncC34; + u8 framesyncMonitor; + u16 nrxAMPDU_size; + u8 nrxAMPDU_aggr_num; + + u32 last_rxdesc_tsf_high; + u32 last_rxdesc_tsf_low; + + bool bHwRadioOff; + bool pwrdown; + bool blinked_ingpio; + bool aspm_clkreq_enable; + u32 pci_bridge_vendor; + u8 RegHostPciASPMSetting; + int PciBridgeASPMRegOffset; + u8 PciBridgeLinkCtrlReg; + u8 RegDevicePciASPMSetting; + int ASPMRegOffset; + int ClkReqOffset; + u8 LinkCtrlReg; + + bool RFChangeInProgress; + bool SetRFPowerStateInProgress; + bool bdisable_nic; + RT_OP_MODE OpMode; + u32 reset_count; + bool bpbc_pressed; + u32 txpower_checkcnt; + u32 txpower_tracking_callback_cnt; + u8 thermal_read_val[40]; + u8 thermal_readback_index; + u32 ccktxpower_adjustcnt_not_ch14; + u32 ccktxpower_adjustcnt_ch14; + u8 tx_fwinfo_force_subcarriermode; + u8 tx_fwinfo_force_subcarrierval; + + RESET_TYPE ResetProgress; + bool bForcedSilentReset; + bool bDisableNormalResetCheck; + u16 TxCounter; + u16 RxCounter; + int IrpPendingCount; + bool bResetInProgress; + bool force_reset; + bool force_lps; + u8 InitialGainOperateType; +#if defined RTL8192SE || defined RTL8192CE + LED_STRATEGY_8190 LedStrategy; + LED_8190 SwLed0; + LED_8190 SwLed1; +#endif + delayed_work_struct_rsl update_beacon_wq; + delayed_work_struct_rsl watch_dog_wq; + delayed_work_struct_rsl txpower_tracking_wq; + delayed_work_struct_rsl rfpath_check_wq; + delayed_work_struct_rsl gpio_change_rf_wq; + delayed_work_struct_rsl initialgain_operate_wq; + delayed_work_struct_rsl check_hw_scan_wq; + delayed_work_struct_rsl hw_scan_simu_wq; + delayed_work_struct_rsl start_hw_scan_wq; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct workqueue_struct *priv_wq; +#else + u32 *priv_wq; +#endif + struct timer_list gpio_polling_timer; + u8 polling_timer_on; + bool bDriverIsGoingToUnload; +#ifdef _RTL8192_EXT_PATCH_ + struct mshclass *mshobj; +#endif + + bool chan_forced; + bool bSingleCarrier; + bool RegBoard; + bool bCckContTx; + bool bOfdmContTx; + bool bStartContTx; + u8 RegPaModel; + u8 btMpCckTxPower; + u8 btMpOfdmTxPower; + + u32 MptActType; + u32 MptIoOffset; + u32 MptIoValue; + u32 MptRfPath; + + u32 MptBandWidth; + u32 MptRateIndex; + u8 MptChannelToSw; + u32 MptRCR; + + u8 PwrDomainProtect; + u8 H2CTxCmdSeq; + +#ifdef RTL8192CE + u8 EEPROMTSSI[2]; + u8 EEPROMPwrLimitHT20[3]; + u8 EEPROMPwrLimitHT40[3]; + u8 EEPROMChnlAreaTxPwrCCK[2][3]; + u8 EEPROMChnlAreaTxPwrHT40_1S[2][3]; + u8 EEPROMChnlAreaTxPwrHT40_2SDiff[2][3]; + u8 TxPwrLevelCck[2][14]; + u8 TxPwrLevelHT40_1S[2][14]; + u8 TxPwrLevelHT40_2S[2][14]; + bool bRPDownloadFinished; + bool bH2CSetInProgress; + u8 SetIOInProgress; + IO_TYPE CurrentIOType; + BT_COEXIST_STR bt_coexist; + + u8 CurFwCmdRegSet; + u8 LastHMEBoxNum; +#endif + bool bDMInitialGainEnable; + bool MutualAuthenticationFail; + bool bDisableFrameBursting; + bool bLedOpenDrain; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) + u32 pci_state; +#endif +}r8192_priv; + + +#ifdef _RTL8192_EXT_PATCH_ +struct meshdev_priv { + struct net_device_stats stats; + struct rtllib_device *rtllib; + struct r8192_priv * priv; +}; +#endif + +extern const struct ethtool_ops rtl819x_ethtool_ops; + +#ifdef RTL8192CE +#define Rtl819XFwImageArray Rtl8192CEFwImgArray +#define Rtl819XMAC_Array Rtl8192CEMAC_2T_Array +#define Rtl819XAGCTAB_2TArray Rtl8192CEAGCTAB_2TArray +#define Rtl819XAGCTAB_1TArray Rtl8192CEAGCTAB_1TArray +#define Rtl819XPHY_REG_2TArray Rtl8192CEPHY_REG_2TArray +#define Rtl819XPHY_REG_1TArray Rtl8192CEPHY_REG_1TArray +#define Rtl819XRadioA_2TArray Rtl8192CERadioA_2TArray +#define Rtl819XRadioA_1TArray Rtl8192CERadioA_1TArray +#define Rtl819XRadioB_2TArray Rtl8192CERadioB_2TArray +#define Rtl819XRadioB_1TArray Rtl8192CERadioB_1TArray +#define Rtl819XMAC_Array Rtl8192CEMAC_2T_Array +#define Rtl819XPHY_REG_Array_PG Rtl8192CEPHY_REG_Array_PG +#endif + +bool init_firmware(struct net_device *dev); +void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb); +short rtl8192_tx(struct net_device *dev, struct sk_buff* skb); + +u8 read_nic_io_byte(struct net_device *dev, int x); +u32 read_nic_io_dword(struct net_device *dev, int x); +u16 read_nic_io_word(struct net_device *dev, int x) ; +void write_nic_io_byte(struct net_device *dev, int x,u8 y); +void write_nic_io_word(struct net_device *dev, int x,u16 y); +void write_nic_io_dword(struct net_device *dev, int x,u32 y); + +u8 read_nic_byte(struct net_device *dev, int x); +u32 read_nic_dword(struct net_device *dev, int x); +u16 read_nic_word(struct net_device *dev, int x) ; +void write_nic_byte(struct net_device *dev, int x,u8 y); +void write_nic_word(struct net_device *dev, int x,u16 y); +void write_nic_dword(struct net_device *dev, int x,u32 y); + +void force_pci_posting(struct net_device *dev); + +void rtl8192_rx_enable(struct net_device *); +void rtl8192_tx_enable(struct net_device *); + +void rtl8192_disassociate(struct net_device *dev); +void rtl8185_set_rf_pins_enable(struct net_device *dev,u32 a); + +int rtl8192_hard_start_xmit(struct sk_buff *skb,struct net_device *dev); +void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int rate); +void rtl8192_data_hard_stop(struct net_device *dev); +void rtl8192_data_hard_resume(struct net_device *dev); +void rtl8192_restart(void *data); +void rtl819x_watchdog_wqcallback(void *data); +void rtl8192_hw_sleep_wq (void *data); +void watch_dog_timer_callback(unsigned long data); +void rtl8192_irq_rx_tasklet(struct r8192_priv *priv); +void rtl8192_irq_tx_tasklet(struct r8192_priv *priv); +int rtl8192_down(struct net_device *dev,bool shutdownrf); +int rtl8192_up(struct net_device *dev); +void rtl8192_commit(struct net_device *dev); +void rtl8192_set_chan(struct net_device *dev,short ch); + +void check_rfctrl_gpio_timer(unsigned long data); + + +extern void firmware_init_param(struct net_device *dev); +extern bool cmpk_message_handle_tx(struct net_device *dev, u8* codevirtualaddress, u32 packettype, u32 buffer_len); +void rtl8192_hw_wakeup_wq(void *data); + +irqreturn_type rtl8192_interrupt(int irq, void *netdev, struct pt_regs *regs); + +short rtl8192_pci_initdescring(struct net_device *dev); + +void rtl8192_cancel_deferred_work(struct r8192_priv* priv); + +int _rtl8192_up(struct net_device *dev,bool is_silent_reset); + +short rtl8192_is_tx_queue_empty(struct net_device *dev); +#ifdef RTL8192SE +void rtl8192_irq_disable(struct net_device *dev); +void GetHwReg8192SE(struct net_device *dev,u8 variable,u8* val); +void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val); +void SwLedOn(struct net_device *dev , PLED_8190 pLed); +void SwLedOff(struct net_device *dev, PLED_8190 pLed); +void Adhoc_InitRateAdaptive(struct net_device *dev,struct sta_info *pEntry); +void SetBeaconRelatedRegisters8192SE(struct net_device *dev); + +#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20) +void rtl8192se_check_tsf_wq(struct work_struct * work); +void rtl8192se_update_assoc_sta_info_wq(struct work_struct * work); +#else +void rtl8192se_check_tsf_wq(struct net_device *dev); +void rtl8192se_update_assoc_sta_info_wq(struct net_device *dev); +#endif +#endif + +void check_rfctrl_gpio_timer(unsigned long data); +u8 HalSetSysClk8192SE(struct net_device *dev, u8 Data); +void gen_RefreshLedState(struct net_device *dev); +#ifdef _RTL8192_EXT_PATCH_ +extern int r8192_mesh_set_enc_ext(struct net_device *dev, struct iw_point *encoding, struct iw_encode_ext *ext, u8 *addr); +#ifdef BUILT_IN_MSHCLASS +extern int msh_init(void); +extern void msh_exit(void); +#endif +#endif +#define IS_HARDWARE_TYPE_819xP(_priv) ((((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8190P)||\ + (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192E)) +#define IS_HARDWARE_TYPE_8192SE(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192SE) +#define IS_HARDWARE_TYPE_8192CE(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192CE) +#define IS_HARDWARE_TYPE_8192CU(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192CU) +#define IS_HARDWARE_TYPE_8192DE(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192DE) +#define IS_HARDWARE_TYPE_8192DU(_priv) (((struct r8192_priv*)rtllib_priv(dev))->card_8192==NIC_8192DU) +extern void dm_InitRateAdaptiveMask(struct net_device * dev); + +void rtl8192_tx_timeout(struct net_device *dev); +void rtl8192_pci_resetdescring(struct net_device *dev); +void rtl8192_SetWirelessMode(struct net_device* dev, u8 wireless_mode); +void rtl8192_irq_enable(struct net_device *dev); +void rtl8192_config_rate(struct net_device* dev, u16* rate_config); +void rtl8192_update_cap(struct net_device* dev, u16 cap); +void rtl8192_irq_disable(struct net_device *dev); + +void rtl819x_UpdateRxPktTimeStamp (struct net_device *dev, struct rtllib_rx_stats *stats); +long rtl819x_translate_todbm(struct r8192_priv * priv, u8 signal_strength_index ); +void rtl819x_update_rxsignalstatistics8190pci(struct r8192_priv * priv,struct rtllib_rx_stats * pprevious_stats); +u8 rtl819x_evm_dbtopercentage(char value); +void rtl819x_process_cck_rxpathsel(struct r8192_priv * priv,struct rtllib_rx_stats * pprevious_stats); +u8 rtl819x_query_rxpwrpercentage( char antpower ); +void rtl8192_record_rxdesc_forlateruse(struct rtllib_rx_stats * psrc_stats,struct rtllib_rx_stats * ptarget_stats); + +bool NicIFEnableNIC(struct net_device* dev); +bool NicIFDisableNIC(struct net_device* dev); + +bool +MgntActSet_RF_State( + struct net_device* dev, + RT_RF_POWER_STATE StateToSet, + RT_RF_CHANGE_SOURCE ChangeSource + ); +#ifdef CONFIG_CFG_80211 +struct net_device *wiphy_to_net_device(struct wiphy *wiphy); +#endif + +#endif + + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_dm.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_dm.h @@ -0,0 +1,332 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __R8192UDM_H__ +#define __R8192UDM_H__ + + +/*--------------------------Define Parameters-------------------------------*/ +#define OFDM_Table_Length 19 +#define CCK_Table_length 12 + +#define DM_DIG_THRESH_HIGH 40 +#define DM_DIG_THRESH_LOW 35 + +#define DM_FALSEALARM_THRESH_LOW 40 +#define DM_FALSEALARM_THRESH_HIGH 1000 + +#define DM_DIG_HIGH_PWR_THRESH_HIGH 75 +#define DM_DIG_HIGH_PWR_THRESH_LOW 70 + +#define BW_AUTO_SWITCH_HIGH_LOW 25 +#define BW_AUTO_SWITCH_LOW_HIGH 30 + +#define DM_check_fsync_time_interval 500 + + +#define DM_DIG_BACKOFF 12 +#ifdef RTL8192SE +#define DM_DIG_MAX 0x3e +#elif defined RTL8190P || defined RTL8192E +#define DM_DIG_MAX 0x36 +#endif +#define DM_DIG_MIN 0x1c +#define DM_DIG_MIN_Netcore 0x12 + +#define DM_DIG_BACKOFF_MAX 12 +#define DM_DIG_BACKOFF_MIN -4 + +#define RxPathSelection_SS_TH_low 30 +#define RxPathSelection_diff_TH 18 + +#define RateAdaptiveTH_High 50 +#define RateAdaptiveTH_Low_20M 30 +#define RateAdaptiveTH_Low_40M 10 +#define VeryLowRSSI 15 + +#ifdef RTL8192SE +#define CTSToSelfTHVal 30 +#elif defined RTL8190P || defined RTL8192E +#define CTSToSelfTHVal 35 +#endif + +#define WAIotTHVal 25 + +#define E_FOR_TX_POWER_TRACK 300 +#define TX_POWER_NEAR_FIELD_THRESH_HIGH 68 +#define TX_POWER_NEAR_FIELD_THRESH_LOW 62 +#define TX_POWER_ATHEROAP_THRESH_HIGH 78 +#define TX_POWER_ATHEROAP_THRESH_LOW 72 + +#define Current_Tx_Rate_Reg 0x1e0 +#define Initial_Tx_Rate_Reg 0x1e1 +#define Tx_Retry_Count_Reg 0x1ac +#define RegC38_TH 20 + +#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74 +#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67 + +#define TxHighPwrLevel_Normal 0 +#define TxHighPwrLevel_Level1 1 +#define TxHighPwrLevel_Level2 2 + +#define DM_Type_ByFW 0 +#define DM_Type_ByDriver 1 + +/*--------------------------Define Parameters-------------------------------*/ + + +/*------------------------------Define structure----------------------------*/ +typedef struct _dynamic_initial_gain_threshold_ +{ + u8 dig_enable_flag; + u8 dig_algorithm; + u8 Dig_TwoPort_Algorithm; + u8 Dig_Ext_Port_Stage; + u8 dbg_mode; + u8 dig_algorithm_switch; + + long rssi_low_thresh; + long rssi_high_thresh; + + u32 FALowThresh; + u32 FAHighThresh; + + long rssi_high_power_lowthresh; + long rssi_high_power_highthresh; + + u8 dig_state; + u8 dig_highpwr_state; + u8 CurSTAConnectState; + u8 PreSTAConnectState; + u8 CurAPConnectState; + u8 PreAPConnectState; + + u8 curpd_thstate; + u8 prepd_thstate; + u8 curcs_ratio_state; + u8 precs_ratio_state; + + u32 pre_ig_value; + u32 cur_ig_value; + + u8 Backoff_Enable_Flag; + u8 backoff_val; + char BackoffVal_range_max; + char BackoffVal_range_min; + u8 rx_gain_range_max; + u8 rx_gain_range_min; + bool initialgain_lowerbound_state; + + long rssi_val; +}dig_t; + +typedef enum tag_dynamic_init_gain_state_definition +{ + DM_STA_DIG_OFF = 0, + DM_STA_DIG_ON, + DM_STA_DIG_MAX +}dm_dig_sta_e; + + +typedef enum tag_dynamic_ratr_state_definition +{ + DM_RATR_STA_HIGH = 0, + DM_RATR_STA_MIDDLE = 1, + DM_RATR_STA_LOW = 2, + DM_RATR_STA_MAX +}dm_ratr_sta_e; + +typedef enum tag_dynamic_init_gain_operation_type_definition +{ + DIG_TYPE_THRESH_HIGH = 0, + DIG_TYPE_THRESH_LOW = 1, + DIG_TYPE_THRESH_HIGHPWR_HIGH = 2, + DIG_TYPE_THRESH_HIGHPWR_LOW = 3, + DIG_TYPE_DBG_MODE = 4, + DIG_TYPE_RSSI = 5, + DIG_TYPE_ALGORITHM = 6, + DIG_TYPE_BACKOFF = 7, + DIG_TYPE_PWDB_FACTOR = 8, + DIG_TYPE_RX_GAIN_MIN = 9, + DIG_TYPE_RX_GAIN_MAX = 10, + DIG_TYPE_ENABLE = 20, + DIG_TYPE_DISABLE = 30, + DIG_OP_TYPE_MAX +}dm_dig_op_e; + +typedef enum tag_dig_algorithm_definition +{ + DIG_ALGO_BY_FALSE_ALARM = 0, + DIG_ALGO_BY_RSSI = 1, + DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM = 2, + DIG_ALGO_BY_TOW_PORT = 3, + DIG_ALGO_MAX +}dm_dig_alg_e; + +typedef enum tag_DIG_TWO_PORT_ALGO_Definition +{ + DIG_TWO_PORT_ALGO_RSSI = 0, + DIG_TWO_PORT_ALGO_FALSE_ALARM = 1, +}DM_DIG_TWO_PORT_ALG_E; + + +typedef enum tag_DIG_EXT_PORT_ALGO_Definition +{ + DIG_EXT_PORT_STAGE_0 = 0, + DIG_EXT_PORT_STAGE_1 = 1, + DIG_EXT_PORT_STAGE_2 = 2, + DIG_EXT_PORT_STAGE_3 = 3, + DIG_EXT_PORT_STAGE_MAX = 4, +}DM_DIG_EXT_PORT_ALG_E; + +typedef enum tag_dig_dbgmode_definition +{ + DIG_DBG_OFF = 0, + DIG_DBG_ON = 1, + DIG_DBG_MAX +}dm_dig_dbg_e; + +typedef enum tag_dig_connect_definition +{ + DIG_STA_DISCONNECT = 0, + DIG_STA_CONNECT = 1, + DIG_STA_BEFORE_CONNECT = 2, + DIG_AP_DISCONNECT = 3, + DIG_AP_CONNECT = 4, + DIG_AP_ADD_STATION = 5, + DIG_CONNECT_MAX +}dm_dig_connect_e; + +typedef enum tag_dig_packetdetection_threshold_definition +{ + DIG_PD_AT_LOW_POWER = 0, + DIG_PD_AT_NORMAL_POWER = 1, + DIG_PD_AT_HIGH_POWER = 2, + DIG_PD_MAX +}dm_dig_pd_th_e; + +typedef enum tag_dig_cck_cs_ratio_state_definition +{ + DIG_CS_RATIO_LOWER = 0, + DIG_CS_RATIO_HIGHER = 1, + DIG_CS_MAX +}dm_dig_cs_ratio_e; +typedef struct _Dynamic_Rx_Path_Selection_ +{ + u8 Enable; + u8 DbgMode; + u8 cck_method; + u8 cck_Rx_path; + + u8 SS_TH_low; + u8 diff_TH; + u8 disabledRF; + u8 reserved; + + u8 rf_rssi[4]; + u8 rf_enable_rssi_th[4]; + long cck_pwdb_sta[4]; +}DRxPathSel; + +typedef enum tag_CCK_Rx_Path_Method_Definition +{ + CCK_Rx_Version_1 = 0, + CCK_Rx_Version_2= 1, + CCK_Rx_Version_MAX +}DM_CCK_Rx_Path_Method; + + +typedef enum tag_DM_DbgMode_Definition +{ + DM_DBG_OFF = 0, + DM_DBG_ON = 1, + DM_DBG_MAX +}DM_DBG_E; + +typedef struct tag_Tx_Config_Cmd_Format +{ + u32 Op; + u32 Length; + u32 Value; +}DCMD_TXCMD_T, *PDCMD_TXCMD_T; +/*------------------------------Define structure----------------------------*/ + + +/*------------------------Export global variable----------------------------*/ +extern dig_t dm_digtable; +extern u8 dm_shadow[16][256]; +extern DRxPathSel DM_RxPathSelTable; + +extern u8 test_flag; +/*------------------------Export global variable----------------------------*/ + + +/*------------------------Export Marco Definition---------------------------*/ +#define DM_APInitGainChangeNotify(Event) {dm_digtable.CurAPConnectState = Event;} +/*------------------------Export Marco Definition---------------------------*/ + + +/*--------------------------Exported Function prototype---------------------*/ +/*--------------------------Exported Function prototype---------------------*/ +extern void init_hal_dm(struct net_device *dev); +extern void deinit_hal_dm(struct net_device *dev); + +extern void hal_dm_watchdog(struct net_device *dev); + + +extern void init_rate_adaptive(struct net_device *dev); +extern void dm_txpower_trackingcallback(void *data); + +#ifndef RTL8192SE +extern void dm_cck_txpower_adjust(struct net_device *dev,bool binch14); +#endif + +extern void dm_restore_dynamic_mechanism_state(struct net_device *dev); +extern void dm_backup_dynamic_mechanism_state(struct net_device *dev); +extern void dm_change_dynamic_initgain_thresh(struct net_device *dev, + u32 dm_type, + u32 dm_value); +extern void DM_ChangeFsyncSetting(struct net_device *dev, + s32 DM_Type, + s32 DM_Value); +extern void dm_force_tx_fw_info(struct net_device *dev, + u32 force_type, + u32 force_value); +extern void dm_init_edca_turbo(struct net_device *dev); +extern void dm_rf_operation_test_callback(unsigned long data); +extern void dm_rf_pathcheck_workitemcallback(void *data); +extern void dm_fsync_timer_callback(unsigned long data); +#if 0 +extern bool dm_check_lbus_status(struct net_device *dev); +#endif +extern void dm_check_fsync(struct net_device *dev); +extern void dm_shadow_init(struct net_device *dev); +extern void dm_initialize_txpower_tracking(struct net_device *dev); + +#if (defined RTL8192E || defined RTL8192SE) +extern void dm_CheckRfCtrlGPIO(void *data); +#endif + +#ifdef RTL8192SE +extern void Power_DomainInit92SE(struct net_device *dev); +#endif +#endif /*__R8192UDM_H__ */ + + +/* End of r8192U_dm.h */ --- linux-2.6.32.orig/ubuntu/rtl8192se/Kconfig +++ linux-2.6.32/ubuntu/rtl8192se/Kconfig @@ -0,0 +1,5 @@ +config RTL8192SE + tristate "Kernel module for RTL81991/2SE or RTL8171 wireless" + depends on X86 + default m + ---help--- --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_regd.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_regd.h @@ -0,0 +1,53 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the ath driver, which is: + * Copyright (c) 2008-2009 Atheros Communications Inc. + * + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + ******************************************************************************/ +#ifndef RTL_REGD_H +#define RTL_REGD_H + +#ifdef CONFIG_CFG_80211 + +#include +#include +#include "rtl_core.h" + +struct r8192_priv; + +struct country_code_to_enum_rd { + u16 countryCode; + const char *isoName; +}; + + +int rtl_regd_init(struct net_device *dev, + int (*reg_notifier)(struct wiphy *wiphy, + struct regulatory_request *request)); +int rtl_reg_notifier(struct wiphy *wiphy, + struct regulatory_request *request); +void rtl_dump_channel_map(struct wiphy *wiphy); +int rtllib_set_geo(struct r8192_priv *priv); +bool rtl8192_register_wiphy_dev(struct net_device *dev); + +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_ps.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_ps.c @@ -0,0 +1,732 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + *****************************************************************************/ +#include "rtl_ps.h" +#include "rtl_core.h" +#ifdef RTL8192CE +#include "rtl8192c/r8192C_phy.h" +#include "rtl8192c/r8192C_phyreg.h" +#include "rtl8192c/r8192C_rtl6052.h" +#include "rtl8192c/r8192C_Efuse.h" +#elif defined RTL8192SE +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_rtl6052.h" +#include "rtl8192s/r8192S_Efuse.h" +#else +#include "rtl8192e/r8192E_phy.h" +#include "rtl8192e/r8192E_phyreg.h" +#include "rtl8192e/r8190P_rtl8256.h" /* RTL8225 Radio frontend */ +#include "rtl8192e/r8192E_cmdpkt.h" +#endif + +#if defined(RTL8192E) || defined(RTL8192SE) || defined RTL8192CE +void rtl8192_hw_sleep_down(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags = 0; +#ifdef CONFIG_ASPM_OR_D3 + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); +#endif + spin_lock_irqsave(&priv->rf_ps_lock,flags); + if (priv->RFChangeInProgress) { + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); + RT_TRACE(COMP_RF, "rtl8192_hw_sleep_down(): RF Change in progress! \n"); + printk("rtl8192_hw_sleep_down(): RF Change in progress!\n"); + return; + } + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); + RT_TRACE(COMP_PS, "%s()============>come to sleep down\n", __FUNCTION__); + +#ifdef CONFIG_RTLWIFI_DEBUGFS + if(priv->debug->hw_holding) { + return; + } +#endif + MgntActSet_RF_State(dev, eRfSleep, RF_CHANGE_BY_PS); +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM) + { + RT_ENABLE_ASPM(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM); + } +#endif +} + +void rtl8192_hw_sleep_wq(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct rtllib_device *ieee = container_of_dwork_rsl(data,struct rtllib_device,hw_sleep_wq); + struct net_device *dev = ieee->dev; +#else + struct net_device *dev = (struct net_device *)data; +#endif + rtl8192_hw_sleep_down(dev); +} + +void rtl8192_hw_wakeup(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags = 0; +#ifdef CONFIG_ASPM_OR_D3 + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); +#endif + spin_lock_irqsave(&priv->rf_ps_lock,flags); + if (priv->RFChangeInProgress) { + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); + RT_TRACE(COMP_RF, "rtl8192_hw_wakeup(): RF Change in progress! \n"); + printk("rtl8192_hw_wakeup(): RF Change in progress! schedule wake up task again\n"); + queue_delayed_work_rsl(priv->rtllib->wq,&priv->rtllib->hw_wakeup_wq,MSECS(10)); + return; + } + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); +#ifdef CONFIG_ASPM_OR_D3 + if (pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM) { + RT_DISABLE_ASPM(dev); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM); + } +#endif + RT_TRACE(COMP_PS, "%s()============>come to wake up\n", __FUNCTION__); + MgntActSet_RF_State(dev, eRfOn, RF_CHANGE_BY_PS); +} + +void rtl8192_hw_wakeup_wq(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct rtllib_device *ieee = container_of_dwork_rsl(data,struct rtllib_device,hw_wakeup_wq); + struct net_device *dev = ieee->dev; +#else + struct net_device *dev = (struct net_device *)data; +#endif + rtl8192_hw_wakeup(dev); + +} + +#define MIN_SLEEP_TIME 50 +#define MAX_SLEEP_TIME 10000 +void rtl8192_hw_to_sleep(struct net_device *dev, u32 th, u32 tl) +{ +#ifdef _RTL8192_EXT_PATCH_ + struct r8192_priv *priv = rtllib_priv(dev); + u32 rb = jiffies, sleep_cost = MSECS(8+16+7), delta = 0; + unsigned long flags; + + if((tl > rb) && (th > 0)) + return; + + spin_lock_irqsave(&priv->ps_lock,flags); + + if (tl >= sleep_cost) + tl -= sleep_cost; + else if (th > 0) { + tl = 0xffffffff - sleep_cost + tl; + th--; + } else { + spin_unlock_irqrestore(&priv->ps_lock,flags); + return; + } + + if (tl > rb) { + delta = tl - rb; + } else if (th > 0) { + delta = 0xffffffff - rb + tl; + th --; + } else { + spin_unlock_irqrestore(&priv->ps_lock,flags); + return; + } + + if (delta <= MSECS(MIN_SLEEP_TIME)) { + spin_unlock_irqrestore(&priv->ps_lock,flags); + printk("too short to sleep::%x, %x, %lx\n",tl, rb, MSECS(MIN_SLEEP_TIME)); + return; + } + + if(delta > MSECS(MAX_SLEEP_TIME)) { + spin_unlock_irqrestore(&priv->ps_lock,flags); + printk("========>too long to sleep:%x, %x, %lx\n", tl, rb, MSECS(MAX_SLEEP_TIME)); + return; + } + + RT_TRACE(COMP_LPS, "==============>%s(): wake up time is %d,%d\n",__FUNCTION__,delta,jiffies_to_msecs(delta)); + queue_delayed_work_rsl(priv->rtllib->wq,&priv->rtllib->hw_wakeup_wq,delta); + queue_delayed_work_rsl(priv->rtllib->wq, (void *)&priv->rtllib->hw_sleep_wq,0); + + spin_unlock_irqrestore(&priv->ps_lock,flags); +#else + struct r8192_priv *priv = rtllib_priv(dev); + + u32 rb = jiffies; + unsigned long flags; + + spin_lock_irqsave(&priv->ps_lock,flags); + + tl -= MSECS(8+16+7); + + if(((tl>=rb)&& (tl-rb) <= MSECS(MIN_SLEEP_TIME)) + ||((rb>tl)&& (rb-tl) < MSECS(MIN_SLEEP_TIME))) { + spin_unlock_irqrestore(&priv->ps_lock,flags); + printk("too short to sleep::%x, %x, %lx\n",tl, rb, MSECS(MIN_SLEEP_TIME)); + return; + } + + if(((tl > rb) && ((tl-rb) > MSECS(MAX_SLEEP_TIME)))|| + ((tl < rb) && (tl>MSECS(69)) && ((rb-tl) > MSECS(MAX_SLEEP_TIME)))|| + ((tlMSECS(MAX_SLEEP_TIME)))) { + printk("========>too long to sleep:%x, %x, %lx\n", tl, rb, MSECS(MAX_SLEEP_TIME)); + spin_unlock_irqrestore(&priv->ps_lock,flags); + return; + } + { + u32 tmp = (tl>rb)?(tl-rb):(rb-tl); + queue_delayed_work_rsl(priv->rtllib->wq, + &priv->rtllib->hw_wakeup_wq,tmp); + } + queue_delayed_work_rsl(priv->rtllib->wq, + (void *)&priv->rtllib->hw_sleep_wq,0); + spin_unlock_irqrestore(&priv->ps_lock,flags); +#endif +} +#endif + +#ifdef ENABLE_IPS +void InactivePsWorkItemCallback(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + RT_TRACE(COMP_PS, "InactivePsWorkItemCallback() ---------> \n"); + pPSC->bSwRfProcessing = true; + + RT_TRACE(COMP_PS, "InactivePsWorkItemCallback(): Set RF to %s.\n", \ + pPSC->eInactivePowerState == eRfOff?"OFF":"ON"); +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->eInactivePowerState == eRfOn) + { + + if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM)) + { + RT_DISABLE_ASPM(dev); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } +#ifdef TODO + else if((pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3)) + { + RT_LEAVE_D3(dev, false); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); + } +#endif + } +#endif + MgntActSet_RF_State(dev, pPSC->eInactivePowerState, RF_CHANGE_BY_IPS); + +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->eInactivePowerState == eRfOff) + { + if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) + { + RT_ENABLE_ASPM(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_ASPM); + } +#ifdef TODO + else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) + { + RT_ENTER_D3(dev, false); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_PCI_D3); + } +#endif + } +#endif + +#if 0 + if(pPSC->eInactivePowerState == eRfOn) + { + while( index < 4 ) + { + if( ( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == WEP104_Encryption ) || + (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == WEP40_Encryption) ) + { + if( pMgntInfo->SecurityInfo.KeyLen[index] != 0) + pAdapter->HalFunc.SetKeyHandler(pAdapter, index, 0, false, pMgntInfo->SecurityInfo.PairwiseEncAlgorithm, true, false); + + } + index++; + } + } +#endif + pPSC->bSwRfProcessing = false; + RT_TRACE(COMP_PS, "InactivePsWorkItemCallback() <--------- \n"); +} + +void +IPSEnter(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + RT_RF_POWER_STATE rtState; + + if (pPSC->bInactivePs) + { + rtState = priv->rtllib->eRFPowerState; + if (rtState == eRfOn && !pPSC->bSwRfProcessing &&\ + (priv->rtllib->state != RTLLIB_LINKED)&&\ + (priv->rtllib->iw_mode != IW_MODE_MASTER)) + { + RT_TRACE(COMP_PS,"IPSEnter(): Turn off RF.\n"); + pPSC->eInactivePowerState = eRfOff; + priv->isRFOff = true; + priv->bInPowerSaveMode = true; + InactivePsWorkItemCallback(dev); + } + } +} + +void +IPSLeave(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + RT_RF_POWER_STATE rtState; + + if (pPSC->bInactivePs) + { + rtState = priv->rtllib->eRFPowerState; + if (rtState != eRfOn && !pPSC->bSwRfProcessing && priv->rtllib->RfOffReason <= RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_PS, "IPSLeave(): Turn on RF.\n"); + pPSC->eInactivePowerState = eRfOn; + priv->bInPowerSaveMode = false; + InactivePsWorkItemCallback(dev); + } + } +} +void IPSLeave_wq(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct rtllib_device *ieee = container_of_work_rsl(data,struct rtllib_device,ips_leave_wq); + struct net_device *dev = ieee->dev; +#else + struct net_device *dev = (struct net_device *)data; +#endif + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); +} +void rtllib_ips_leave_wq(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + RT_RF_POWER_STATE rtState; + rtState = priv->rtllib->eRFPowerState; + + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + return; + } + else{ + printk("=========>%s(): IPSLeave\n",__FUNCTION__); + queue_work_rsl(priv->rtllib->wq,&priv->rtllib->ips_leave_wq); + } + } + } +} +void rtllib_ips_leave(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); +} +#endif + +#ifdef ENABLE_LPS +bool MgntActSet_802_11_PowerSaveMode(struct net_device *dev, u8 rtPsMode) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef _RTL8192_EXT_PATCH_ + if((priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER) + || (priv->rtllib->iw_mode == IW_MODE_MESH)) +#else + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) +#endif + { + return false; + } + + + RT_TRACE(COMP_LPS,"%s(): set ieee->ps = %x\n",__FUNCTION__,rtPsMode); + if(!priv->ps_force) { + priv->rtllib->ps = rtPsMode; + } +#if 0 + priv->rtllib->dot11PowerSaveMode = rtPsMode; + + if(priv->rtllib->dot11PowerSaveMode == eMaxPs) + { + } + else + { + } +#endif + if(priv->rtllib->sta_sleep != 0 && rtPsMode == RTLLIB_PS_DISABLED) + { + unsigned long flags; + + rtl8192_hw_wakeup(dev); + priv->rtllib->sta_sleep = 0; + + spin_lock_irqsave(&(priv->rtllib->mgmt_tx_lock), flags); + printk("LPS leave: notify AP we are awaked ++++++++++ SendNullFunctionData\n"); + rtllib_sta_ps_send_null_frame(priv->rtllib, 0); + spin_unlock_irqrestore(&(priv->rtllib->mgmt_tx_lock), flags); + } + +#if 0 + if((pPSC->bFwCtrlLPS) && (pPSC->bLeisurePs)) + { + if(priv->rtllib->dot11PowerSaveMode == eActive) + { + RpwmVal = 0x0C; + FwPwrMode = FW_PS_ACTIVE_MODE; + Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_SET_RPWM, (pu1Byte)(&RpwmVal)); + Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_PWRMODE, (pu1Byte)(&FwPwrMode)); + } + else + { + if(GetFwLPS_Doze(Adapter)) + { + RpwmVal = 0x02; + Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_PWRMODE, (pu1Byte)(&pPSC->FWCtrlPSMode)); + Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_SET_RPWM, (pu1Byte)(&RpwmVal)); + } + else + { + pMgntInfo->dot11PowerSaveMode = eActive; + Adapter->bInPowerSaveMode = false; + } + } + } +#endif + return true; +} + + +void LeisurePSEnter(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + RT_TRACE(COMP_PS, "LeisurePSEnter()...\n"); + RT_TRACE(COMP_PS, "pPSC->bLeisurePs = %d, ieee->ps = %d,pPSC->LpsIdleCount is %d,RT_CHECK_FOR_HANG_PERIOD is %d\n", + pPSC->bLeisurePs, priv->rtllib->ps,pPSC->LpsIdleCount,RT_CHECK_FOR_HANG_PERIOD); + +#ifdef _RTL8192_EXT_PATCH_ + if(!((priv->rtllib->iw_mode == IW_MODE_INFRA) && (priv->rtllib->state == RTLLIB_LINKED)) + || (priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER) + || (priv->rtllib->iw_mode == IW_MODE_MESH)) +#else + if(!((priv->rtllib->iw_mode == IW_MODE_INFRA) && (priv->rtllib->state == RTLLIB_LINKED)) + || (priv->rtllib->iw_mode == IW_MODE_ADHOC) || (priv->rtllib->iw_mode == IW_MODE_MASTER)) +#endif + return; + + if (pPSC->bLeisurePs) + { + if(pPSC->LpsIdleCount >= RT_CHECK_FOR_HANG_PERIOD) + { + + if(priv->rtllib->ps == RTLLIB_PS_DISABLED) + { + + RT_TRACE(COMP_LPS, "LeisurePSEnter(): Enter 802.11 power save mode...\n"); + + if(!pPSC->bFwCtrlLPS) + { + if (priv->rtllib->SetFwCmdHandler) + { + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_LPS_ENTER); + } + } + MgntActSet_802_11_PowerSaveMode(dev, RTLLIB_PS_MBCAST|RTLLIB_PS_UNICAST); + + /*if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM) + { + RT_ENABLE_ASPM(pAdapter); + RT_SET_PS_LEVEL(pAdapter, RT_RF_LPS_LEVEL_ASPM); + }*/ + + } + } + else + pPSC->LpsIdleCount++; + } +} + + +void LeisurePSLeave(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + + RT_TRACE(COMP_PS, "LeisurePSLeave()...\n"); + RT_TRACE(COMP_PS, "pPSC->bLeisurePs = %d, ieee->ps = %d\n", + pPSC->bLeisurePs, priv->rtllib->ps); + + if (pPSC->bLeisurePs) + { + if(priv->rtllib->ps != RTLLIB_PS_DISABLED) + { +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM && RT_IN_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM)) + { + RT_DISABLE_ASPM(dev); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_LPS_LEVEL_ASPM); + } +#endif + RT_TRACE(COMP_LPS, "LeisurePSLeave(): Busy Traffic , Leave 802.11 power save..\n"); + MgntActSet_802_11_PowerSaveMode(dev, RTLLIB_PS_DISABLED); + + if(!pPSC->bFwCtrlLPS) + { + if (priv->rtllib->SetFwCmdHandler) + { + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_LPS_LEAVE); + } + } + } + } +} +#endif + +#ifdef CONFIG_ASPM_OR_D3 +bool +PlatformEnable92CEBackDoor(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + bool bResult = true; + u8 value; + + pci_read_config_byte(priv->pdev, 0x70f, &value); + value |= BIT7; + pci_write_config_byte(priv->pdev, 0x70f, value); + + + pci_read_config_byte(priv->pdev, 0x719, &value); + value |= (BIT3|BIT4); + pci_write_config_byte(priv->pdev, 0x719, value); + + + return bResult; +} + +bool PlatformSwitchDevicePciASPM(struct net_device *dev, u8 value) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + bool bResult = false; + +#ifdef RTL8192CE + value |= 0x40; +#endif + + pci_write_config_byte(priv->pdev, priv->ASPMRegOffset, value); + udelay(100); + + return bResult; +} + +bool PlatformSwitchClkReq(struct net_device *dev, u8 value) +{ + bool bResult = false; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 Buffer; + + Buffer= value; + + pci_write_config_byte(priv->pdev,priv->ClkReqOffset,value); + bResult = true; +#ifdef TODO + if(Buffer) { + priv->ClkReqState = true; + } else { + priv->ClkReqState = false; + } +#endif + udelay(100); + return bResult; +} + +void +PlatformDisableASPM(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + u8 LinkCtrlReg; + u16 PciBridgeLinkCtrlReg, ASPMLevel=0; + +#ifdef RTL8192CE + if (!priv->aspm_clkreq_enable) { + RT_TRACE(COMP_INIT, "%s: Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n",\ + __FUNCTION__); + return; + } +#endif + + LinkCtrlReg = priv->LinkCtrlReg; + ASPMLevel |= BIT0|BIT1; + LinkCtrlReg &=~ASPMLevel; + + PciBridgeLinkCtrlReg = priv->PciBridgeLinkCtrlReg; + PciBridgeLinkCtrlReg &=~(BIT0|BIT1); + + if (priv->aspm_clkreq_enable) { + + pci_write_config_byte(priv->bridge_pdev,priv->PciBridgeASPMRegOffset,PciBridgeLinkCtrlReg); + RT_TRACE(COMP_POWER, "Write reg[%x]=%x\n", (priv->PciBridgeASPMRegOffset), PciBridgeLinkCtrlReg); + udelay(100); + } + + PlatformSwitchDevicePciASPM(dev, priv->LinkCtrlReg); + + PlatformSwitchClkReq(dev, 0x0); + if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_CLK_REQ) + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_CLK_REQ); + udelay(100); +} + +void PlatformEnableASPM(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + u16 ASPMLevel = 0; + + if (!priv->aspm_clkreq_enable) { + RT_TRACE(COMP_INIT, "%s: Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n",\ + __FUNCTION__); + return; + } + + ASPMLevel |= priv->RegDevicePciASPMSetting; + PlatformSwitchDevicePciASPM(dev, (priv->LinkCtrlReg | ASPMLevel)); + + if (pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_CLK_REQ) { + PlatformSwitchClkReq(dev,(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_CLK_REQ) ? 1 : 0); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_CLK_REQ); + } + udelay(100); + + pci_write_config_byte(priv->bridge_pdev,priv->PciBridgeASPMRegOffset,\ + ((priv->PciBridgeLinkCtrlReg | priv->RegHostPciASPMSetting)&~BIT0)&0xff); + RT_TRACE(COMP_INIT, "Write reg[%x] = %x\n", + priv->PciBridgeASPMRegOffset, + (priv->PciBridgeLinkCtrlReg|priv->RegHostPciASPMSetting)); + udelay(100); +} + +u32 PlatformResetPciSpace(struct net_device *dev,u8 Value) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + pci_write_config_byte(priv->pdev,0x04,Value); + + return 1; + +} +bool PlatformSetPMCSR(struct net_device *dev,u8 value,bool bTempSetting) +{ + bool bResult = false; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 Buffer; + bool bActuallySet=false, bSetFunc=false; + unsigned long flag; + + Buffer= value; + spin_lock_irqsave(&priv->D3_lock,flag); +#ifdef TODO + if(bTempSetting) + { + if(Buffer==0x00) + { + priv->LeaveD3Cnt++; + + { + bActuallySet =true; + } + } + else + { + priv->LeaveD3Cnt--; + + if(priv->LeaveD3Cnt == 0) + { + bActuallySet=true; + } + } + } + else + { + priv->LeaveD3Cnt=0; + bActuallySet=true; + bSetFunc=true; + } +#endif + if (bActuallySet) { + if (Buffer) { + PlatformSwitchClkReq(dev, 0x01); + } else { + PlatformSwitchClkReq(dev, 0x00); + } + + pci_write_config_byte(priv->pdev,0x44,Buffer); + RT_TRACE(COMP_POWER, "PlatformSetPMCSR(): D3(value: %d)\n", Buffer); + + bResult = true; + if (!Buffer) { + PlatformResetPciSpace(dev, 0x06); + PlatformResetPciSpace(dev, 0x07); + } + + if (bSetFunc) { + if(Buffer) + { +#ifdef TO_DO_LIST + RT_DISABLE_FUNC(Adapter, DF_IO_D3_BIT); +#endif + } else { +#ifdef TO_DO_LIST + RT_ENABLE_FUNC(Adapter, DF_IO_D3_BIT); +#endif + } + } + + } + spin_unlock_irqrestore(&priv->D3_lock,flag); + return bResult; +} +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_regd.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_regd.c @@ -0,0 +1,390 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the ath driver, which is: + * Copyright (c) 2008-2009 Atheros Communications Inc. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + ******************************************************************************/ +#ifdef CONFIG_CFG_80211 +#include "rtl_core.h" +#include +#include +#include + +#ifdef CONFIG_CRDA +static struct country_code_to_enum_rd allCountries[] = { + {COUNTRY_CODE_FCC, "US"}, + {COUNTRY_CODE_IC, "US"}, + {COUNTRY_CODE_ETSI, "EC"}, + {COUNTRY_CODE_SPAIN, "EC"}, + {COUNTRY_CODE_FRANCE, "EC"}, + {COUNTRY_CODE_MKK, "JP"}, + {COUNTRY_CODE_MKK1, "JP"}, + {COUNTRY_CODE_ISRAEL, "EC"}, + {COUNTRY_CODE_TELEC, "JP"}, + {COUNTRY_CODE_MIC, "JP"}, + {COUNTRY_CODE_GLOBAL_DOMAIN, "JP"}, + {COUNTRY_CODE_WORLD_WIDE_13, "EC"}, + {COUNTRY_CODE_TELEC_NETGEAR, "EC"}, +}; + +/* Only these channels all allow active scan on all world regulatory domains */ +#define RTL819x_2GHZ_CH01_11 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0) + +/* We enable active scan on these a case by case basis by regulatory domain */ +#define RTL819x_2GHZ_CH12_13 REG_RULE(2467-10, 2472+10, 40, 0, 20, NL80211_RRF_PASSIVE_SCAN) +#define RTL819x_2GHZ_CH14 REG_RULE(2484-10, 2484+10, 40, 0, 20, NL80211_RRF_PASSIVE_SCAN | \ + NL80211_RRF_NO_OFDM) + +static const struct ieee80211_regdomain rtl_regdom_11 = { + .n_reg_rules = 1, + .alpha2 = "99", + .reg_rules = { + RTL819x_2GHZ_CH01_11, + } +}; + +static const struct ieee80211_regdomain rtl_regdom_global = { + .n_reg_rules = 3, + .alpha2 = "99", + .reg_rules = { + RTL819x_2GHZ_CH01_11, + RTL819x_2GHZ_CH12_13, + RTL819x_2GHZ_CH14, + } +}; + +static const struct ieee80211_regdomain rtl_regdom_world = { + .n_reg_rules = 2, + .alpha2 = "99", + .reg_rules = { + RTL819x_2GHZ_CH01_11, + RTL819x_2GHZ_CH12_13, + } +}; + +static void rtl_reg_apply_chan_plan(struct wiphy *wiphy) +{ + struct net_device *dev = wiphy_to_net_device(wiphy); + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_device *rtllib = priv->rtllib; + struct ieee80211_supported_band *sband; + struct ieee80211_channel *ch; + int i; + + sband = wiphy->bands[IEEE80211_BAND_2GHZ]; + + for (i = 0; i < sband->n_channels; i++) { + ch = &sband->channels[i]; + if (ch->flags & IEEE80211_CHAN_DISABLED) { + GET_DOT11D_INFO(rtllib)->channel_map[ch->hw_value] = 0; + } else { + if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN) { + GET_DOT11D_INFO(rtllib)->channel_map[ch->hw_value] = 2; + } else { + GET_DOT11D_INFO(rtllib)->channel_map[ch->hw_value] = 1; + } + } + + } + + for (i = sband->n_channels - 1; i >= 0; i--) { + ch = &sband->channels[i]; + if (!(ch->flags & IEEE80211_CHAN_NO_IBSS)) { + rtllib->ibss_maxjoin_chal = ch->hw_value; + break; + } + } + + rtllib->IbssStartChnl = 10; + + return; +} + +void rtl_dump_channel_map(struct wiphy *wiphy) +{ + enum ieee80211_band band; + struct ieee80211_supported_band *sband; + struct ieee80211_channel *ch; + unsigned int i; + + for (band = 0; band < IEEE80211_NUM_BANDS; band++) { + + if (!wiphy->bands[band]) + continue; + + sband = wiphy->bands[band]; + + for (i = 0; i < sband->n_channels; i++) { + ch = &sband->channels[i]; + printk("chan:%d, NO_IBSS:%d," + " PASSIVE_SCAN:%d, RADAR:%d, DISABLED:%d\n", i+1, + (ch->flags&IEEE80211_CHAN_NO_IBSS) ? 1:0, + (ch->flags&IEEE80211_CHAN_PASSIVE_SCAN) ? 1:0, + (ch->flags&IEEE80211_CHAN_RADAR) ? 1:0, + (ch->flags&IEEE80211_CHAN_DISABLED) ? 1:0 + ); + } + + } +} + +static void rtl_reg_apply_world_flags(struct wiphy *wiphy, + enum nl80211_reg_initiator initiator, + struct rtl_regulatory *reg) +{ + rtl_reg_apply_chan_plan(wiphy); + return; +} + +int rtl_reg_notifier_apply(struct wiphy *wiphy, + struct regulatory_request *request, + struct rtl_regulatory *reg) +{ + switch (request->initiator) { + case NL80211_REGDOM_SET_BY_CORE: + break; + case NL80211_REGDOM_SET_BY_DRIVER: + case NL80211_REGDOM_SET_BY_USER: + rtl_reg_apply_world_flags(wiphy, request->initiator, reg); + rtl_dump_channel_map(wiphy); + break; + case NL80211_REGDOM_SET_BY_COUNTRY_IE: + rtl_reg_apply_world_flags(wiphy, request->initiator, reg); + rtl_dump_channel_map(wiphy); + break; + } + + return 0; +} + +static const struct +ieee80211_regdomain *rtl_regdomain_select(struct rtl_regulatory *reg) +{ + switch (reg->country_code) { + case COUNTRY_CODE_FCC: + case COUNTRY_CODE_IC: + return &rtl_regdom_11; + case COUNTRY_CODE_ETSI: + case COUNTRY_CODE_SPAIN: + case COUNTRY_CODE_FRANCE: + case COUNTRY_CODE_ISRAEL: + case COUNTRY_CODE_TELEC_NETGEAR: + return &rtl_regdom_world; + case COUNTRY_CODE_MKK: + case COUNTRY_CODE_MKK1: + case COUNTRY_CODE_TELEC: + case COUNTRY_CODE_MIC: + return &rtl_regdom_global; + case COUNTRY_CODE_GLOBAL_DOMAIN: + return &rtl_regdom_global; + case COUNTRY_CODE_WORLD_WIDE_13: + return &rtl_regdom_world; + default: + WARN_ON(1); + return &rtl_regdom_world; + } +} + +static int +rtl_regd_init_wiphy(struct rtl_regulatory *reg, + struct wiphy *wiphy, + int (*reg_notifier)(struct wiphy *wiphy, + struct regulatory_request *request)) +{ + const struct ieee80211_regdomain *regd; + + wiphy->reg_notifier = reg_notifier; + + wiphy->custom_regulatory = true; + wiphy->strict_regulatory = false; + + regd = rtl_regdomain_select(reg); + + wiphy->disable_beacon_hints = true; + wiphy_apply_custom_regulatory(wiphy, regd); + + rtl_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); + return 0; +} + +static struct +country_code_to_enum_rd *rtl_regd_find_country(u16 countryCode) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(allCountries); i++) { + if (allCountries[i].countryCode == countryCode) + return &allCountries[i]; + } + return NULL; +} + +int rtl_regd_init(struct net_device *dev, + int (*reg_notifier)(struct wiphy *wiphy, + struct regulatory_request *request)) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtl_regulatory *reg = &priv->rtllib->regulatory; + struct wiphy *wiphy = priv->rtllib->wdev.wiphy; + struct country_code_to_enum_rd *country = NULL; + + if (wiphy == NULL || reg == NULL){ + return -EINVAL; + } + + printk(KERN_DEBUG "rtl: EEPROM regdomain: 0x%0x\n", priv->ChannelPlan); + + reg->country_code = priv->ChannelPlan; + + if (reg->country_code >= COUNTRY_CODE_MAX) { + printk(KERN_DEBUG "rtl: EEPROM indicates invalid contry code" + "world wide 13 should be used\n"); + reg->country_code = COUNTRY_CODE_WORLD_WIDE_13; + } + + country = rtl_regd_find_country(reg->country_code); + + if (country) { + reg->alpha2[0] = country->isoName[0]; + reg->alpha2[1] = country->isoName[1]; + } else { + reg->alpha2[0] = '0'; + reg->alpha2[1] = '0'; + } + + printk(KERN_DEBUG "rtl: Country alpha2 being used: %c%c\n", + reg->alpha2[0], reg->alpha2[1]); + rtl_regd_init_wiphy(reg, wiphy, reg_notifier); + rtl_dump_channel_map(wiphy); + return 0; +} + +int rtl_reg_notifier(struct wiphy *wiphy, + struct regulatory_request *request) +{ + struct net_device *dev = wiphy_to_net_device(wiphy); + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtl_regulatory *reg = &priv->rtllib->regulatory; + + printk("rtl_regd: %s\n", __func__); + return rtl_reg_notifier_apply(wiphy, request, reg); +} +#endif + +struct net_device *wiphy_to_net_device(struct wiphy *wiphy) +{ + struct rtllib_device *rtllib; + + rtllib = wiphy_priv(wiphy); + return rtllib->dev; +} + +static const struct ieee80211_rate rtl819x_rates[] = { + { .bitrate = 10, .hw_value = 0, }, + { .bitrate = 20, .hw_value = 1, }, + { .bitrate = 55, .hw_value = 2, }, + { .bitrate = 110, .hw_value = 3, }, + { .bitrate = 60, .hw_value = 4, }, + { .bitrate = 90, .hw_value = 5, }, + { .bitrate = 120, .hw_value = 6, }, + { .bitrate = 180, .hw_value = 7, }, + { .bitrate = 240, .hw_value = 8, }, + { .bitrate = 360, .hw_value = 9, }, + { .bitrate = 480, .hw_value = 10, }, + { .bitrate = 540, .hw_value = 11, }, +}; + +#define CHAN2G(_freq, _flags, _idx) { \ + .band = IEEE80211_BAND_2GHZ, \ + .center_freq = (_freq), \ + .flags = (_flags), \ + .hw_value = (_idx), \ + .max_power = 20, \ +} + +static struct ieee80211_channel rtl819x_2ghz_chantable[] = { + CHAN2G(2412, 0, 1), /* Channel 1 */ + CHAN2G(2417, 0, 2), /* Channel 2 */ + CHAN2G(2422, 0, 3), /* Channel 3 */ + CHAN2G(2427, 0, 4), /* Channel 4 */ + CHAN2G(2432, 0, 5), /* Channel 5 */ + CHAN2G(2437, 0, 6), /* Channel 6 */ + CHAN2G(2442, 0, 7), /* Channel 7 */ + CHAN2G(2447, 0, 8), /* Channel 8 */ + CHAN2G(2452, 0, 9), /* Channel 9 */ + CHAN2G(2457, 0, 10), /* Channel 10 */ + CHAN2G(2462, 0, 11), /* Channel 11 */ + CHAN2G(2467, IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN, 12), /* Channel 12 */ + CHAN2G(2472, IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN, 13), /* Channel 13 */ + CHAN2G(2484, IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN, 14), /* Channel 14 */ +}; + +int rtllib_set_geo(struct r8192_priv *priv) +{ + priv->bands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ; + priv->bands[IEEE80211_BAND_2GHZ].channels = rtl819x_2ghz_chantable; + priv->bands[IEEE80211_BAND_2GHZ].n_channels = ARRAY_SIZE(rtl819x_2ghz_chantable); + + memcpy(&priv->rates[IEEE80211_BAND_2GHZ], rtl819x_rates, sizeof(rtl819x_rates)); + + priv->bands[IEEE80211_BAND_2GHZ].n_bitrates = ARRAY_SIZE(rtl819x_rates); + priv->bands[IEEE80211_BAND_2GHZ].bitrates = priv->rates[IEEE80211_BAND_2GHZ]; + + return 0; +} + +bool rtl8192_register_wiphy_dev(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct wireless_dev *wdev = &priv->rtllib->wdev; +#ifdef CONFIG_CRDA + struct rtl_regulatory *reg; +#endif + memcpy(wdev->wiphy->perm_addr, dev->dev_addr, ETH_ALEN); + wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &(priv->bands[IEEE80211_BAND_2GHZ]); + set_wiphy_dev(wdev->wiphy, &priv->pdev->dev); + +#ifdef CONFIG_CRDA + if (rtl_regd_init(dev, rtl_reg_notifier)) { + return false; + } +#endif + + if (wiphy_register(wdev->wiphy)) { + return false; + } + +#ifdef CONFIG_CRDA + reg = &priv->rtllib->regulatory; + if (reg != NULL) { + if (regulatory_hint(wdev->wiphy, reg->alpha2)) { + printk("########>%s() regulatory_hint fail\n", __func__); + ; + } else { + printk("########>#%s() regulatory_hint success\n", __func__); + } + } else { + printk("#########%s() regulator null\n", __func__); + } +#endif + return true; +} +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_wx.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_wx.h @@ -0,0 +1,34 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifndef R819x_WX_H +#define R819x_WX_H + +struct net_device; +struct iw_handler_def; +struct iw_statistics; + +extern struct iw_handler_def r8192_wx_handlers_def; +struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev); +u16 rtl8192_11n_user_show_rates(struct net_device* dev); + +#ifdef _RTL8192_EXT_PATCH_ +extern struct iw_handler_def meshdev_wx_handlers_def; +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_debug.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_debug.c @@ -0,0 +1,1384 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "rtl_debug.h" +#include "rtl_core.h" +#ifdef RTL8192CE +#include "rtl8192c/r8192C_phy.h" +#include "rtl8192c/r8192C_phyreg.h" +#include "rtl8192c/r8192C_rtl6052.h" +#include "rtl8192c/r8192C_Efuse.h" +#elif defined RTL8192SE +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_rtl6052.h" +#include "rtl8192s/r8192S_Efuse.h" +#else +#include "rtl8192e/r8192E_phy.h" +#include "rtl8192e/r8192E_phyreg.h" +#include "rtl8192e/r8190P_rtl8256.h" /* RTL8225 Radio frontend */ +#include "rtl8192e/r8192E_cmdpkt.h" +#endif + +#ifdef _RTL8192_EXT_PATCH_ +#include "../../mshclass/msh_class.h" +#endif +/* this is only for debugging */ +void print_buffer(u32 *buffer, int len) +{ + int i; + u8 *buf =(u8*)buffer; + + printk("ASCII BUFFER DUMP (len: %x):\n",len); + + for(i=0;i ", n); + for (i = 0; i < 16 && n <= max; i++, n++) + printk("%2x ", read_nic_byte(dev, n)); + } + printk("\n"); +} + +#ifdef RTL8192CE +void rtl8192ce_dump_tx_desc(tx_desc *pDesc) +{ +#if 0 + RTPRINT(FTX, TX_DESC, ("DW 0 =========\r\n")); + RTPRINT(FTX, TX_DESC, ("Own = %d\n", pDesc->OWN)); + RTPRINT(FTX, TX_DESC, ("GF = %d\n", pDesc->GF)); + RTPRINT(FTX, TX_DESC, ("LINIP = %d\n", pDesc->LINIP)); + RTPRINT(FTX, TX_DESC, ("FS = %d\n", pDesc->FirstSeg)); + RTPRINT(FTX, TX_DESC, ("LS = %d\n", pDesc->LastSeg)); + RTPRINT(FTX, TX_DESC, ("Offset = %d\n", pDesc->Offset)); + RTPRINT(FTX, TX_DESC, ("PktSize = %d\r\n", pDesc->PktSize)); + + RTPRINT(FTX, TX_DESC, ("DW 1 ==========\r\n")); + RTPRINT(FTX, TX_DESC, ("PKTOFFSET = %d\n", pDesc->PktOffset)); + RTPRINT(FTX, TX_DESC, ("HTC = %d\n", pDesc->HTC)); + RTPRINT(FTX, TX_DESC, ("SecType = %d\n", pDesc->SecType)); + RTPRINT(FTX, TX_DESC, ("EnDescID = %d\n", pDesc->EnDescID)); + RTPRINT(FTX, TX_DESC, ("NoACM = %d\n", pDesc->NOACM)); + RTPRINT(FTX, TX_DESC, ("QueueSelect = %d\n", pDesc->QueueSel)); + RTPRINT(FTX, TX_DESC, ("PIFS = %d\n", pDesc->PIFS)); + RTPRINT(FTX, TX_DESC, ("MoreFrag = %d\n", pDesc->MoreFrag)); + RTPRINT(FTX, TX_DESC, ("MacID = %d\r\n", pDesc->MacID)); + + RTPRINT(FTX, TX_DESC, ("DW 2 ==========\r\n")); + RTPRINT(FTX, TX_DESC, ("BK = %d\n", pDesc->Bk)); + RTPRINT(FTX, TX_DESC, ("AGG_EN = %d\n", pDesc->AggEn)); + RTPRINT(FTX, TX_DESC, ("Data Retry CNT = %d\n", pDesc->DATARC)); + RTPRINT(FTX, TX_DESC, ("RTS Retry CNT = %d\n", pDesc->RTSRC)); + RTPRINT(FTX, TX_DESC, ("TSFL = %d\n", pDesc->TSFL)); + RTPRINT(FTX, TX_DESC, ("RetryLmtEn = %d\n", pDesc->RetryLmtEn)); + RTPRINT(FTX, TX_DESC, ("DataRetryLmt = %d\r\n", pDesc->TxRetryLmt)); + + RTPRINT(FTX, TX_DESC, ("DW 3 ==========\r\n")); + RTPRINT(FTX, TX_DESC, ("Seq = %d\n", pDesc->Seq)); + RTPRINT(FTX, TX_DESC, ("TailPage = %d\n", pDesc->TailPage)); + RTPRINT(FTX, TX_DESC, ("NextHeadPage = %d\r\n", pDesc->NextHeadPage)); + + RTPRINT(FTX, TX_DESC, ("DW 4 ==========\r\n")); + RTPRINT(FTX, TX_DESC, ("UserRate = %d\n", pDesc->UserRate)); + RTPRINT(FTX, TX_DESC, ("RTS STBC = %d\n", pDesc->RTSSTBC)); + RTPRINT(FTX, TX_DESC, ("RTSSC = %d\n", pDesc->RTSSC)); + RTPRINT(FTX, TX_DESC, ("STBC = %d\n", pDesc->STBC)); + RTPRINT(FTX, TX_DESC, ("TXSC = %d\n", pDesc->TxSc)); + RTPRINT(FTX, TX_DESC, ("TxBw = %d\n", pDesc->TxBW)); + RTPRINT(FTX, TX_DESC, ("TxShort = %d\n", pDesc->TxShort)); + RTPRINT(FTX, TX_DESC, ("RTSEn = %d\n", pDesc->RTSEn)); + RTPRINT(FTX, TX_DESC, ("CTS2Self = %d\n", pDesc->CTS2Self)); + RTPRINT(FTX, TX_DESC, ("RTSRateFBLmt = %d\n", pDesc->RTSRateFBLmt)); + RTPRINT(FTX, TX_DESC, ("DisRTSFB = %d\n", pDesc->DisRTSFB)); + RTPRINT(FTX, TX_DESC, ("RTSRate = %d\r\n", pDesc->RTSRate)); + + RTPRINT(FTX, TX_DESC, ("DW 5 ==========\r\n")); + RTPRINT(FTX, TX_DESC, ("TxAGC = %d\n", pDesc->TXAGCA)); + RTPRINT(FTX, TX_DESC, ("TxAGC = %d\n", pDesc->TXAGCB)); + RTPRINT(FTX, TX_DESC, ("DataRateFBLmt = %d\n", pDesc->TxRateFBLmt)); + RTPRINT(FTX, TX_DESC, ("Disable Feedback = %d\n", pDesc->DisDataFB)); + RTPRINT(FTX, TX_DESC, ("TX_Rate = %d\n", pDesc->TxRate)); + RTPRINT(FTX, TX_DESC, ("PktID = %d\r\n", pDesc->PktID)); + + RTPRINT(FTX, TX_DESC, ("DW 6 ==========\r\n")); + + RTPRINT(FTX, TX_DESC, ("DW 7-9 ==========\r\n")); + RTPRINT(FTX, TX_DESC, ("TxBufferSize = %d\r\n", pDesc->TxBufferSize)); + + RTPRINT(FTX, TX_DESC, ("PhyAddressLow = %08x\n", pDesc->TxBuffAddr)); + + RTPRINT(FTX, TX_DESC, ("NextDescAddress= %08X\n", pDesc->NextDescAddress)); +#else + u32* desc = (u32*)pDesc; + u8 i=0; + printk("#########################\n"); + for(i=0;i<=9;i++){ + printk("#########>%x\n", desc[i]); + } + printk("#########################\n\n"); +#endif +} +#endif + +#ifdef RTL8192SE +void rtl8192se_dump_tx_desc(tx_desc* pDesc) +{ + printk("DW 0 =========\r\n"); + printk("Own = %d\n", pDesc->OWN); + printk("GF = %d\n", pDesc->GF); + printk("LINIP = %d\n", pDesc->LINIP); + printk("FS = %d\n", pDesc->FirstSeg); + printk("LS = %d\n", pDesc->LastSeg); + printk("Offset = %d\n", pDesc->Offset); + printk("PktSize = %d\r\n", pDesc->PktSize); + + printk("DW 1 ==========\r\n"); + printk("HWPC = %d\n", pDesc->HWPC); + printk("PKTOFFSET = %d\n", pDesc->PktOffset); + printk("WDS = %d\n", pDesc->WDS); + printk("HTC = %d\n", pDesc->HTC); + printk("SecType = %d\n", pDesc->SecType); + printk("EnDescID = %d\n", pDesc->EnDescID); + printk("PktType = %d\n", pDesc->PktType); + printk("OUI = %d\n", pDesc->OUI); + printk("SecKeyId = %d\n", pDesc->KeyID); + printk("NonQos = %d\n", pDesc->NonQos); + printk("NoACM = %d\n", pDesc->NoACM); + printk("AckPolicy = %d\n", pDesc->AckPolicy); + printk("QueueSelect = %d\n", pDesc->QueueSel); + printk("PIFS = %d\n", pDesc->PIFS); + printk("MoreFrag = %d\n", pDesc->MoreFrag); + printk("MoreData = %d\n", pDesc->MoreData); + printk("MacID = %d\r\n", pDesc->MacID); + + printk("DW 2 ==========\r\n"); + printk("OwnMAC = %d\n", pDesc->OwnMAC); + printk("BK = %d\n", pDesc->BK); + printk("AGG_EN = %d\n", pDesc->AggEn); + printk("Data Retry CNT = %d\n", pDesc->DATARC); + printk("RTS Retry CNT = %d\n", pDesc->RTSRC); + printk("TSFL = %d\n", pDesc->TSFL); + printk("RetryLmtEn = %d\n", pDesc->RetryLmtEn); + printk("DataRetryLmt = %d\r\n", pDesc->DataRetryLmt); + + printk("DW 3 ==========\r\n"); + printk("Frag = %d\n", pDesc->Frag); + printk("Seq = %d\n", pDesc->Seq); + printk("TailPage = %d\n", pDesc->TailPage); + printk("NextHeadPage = %d\r\n", pDesc->NextHeadPage); + + printk("DW 4 ==========\r\n"); + printk("UserRate = %d\n", pDesc->UserRate); + printk("RTS STBC = %d\n", pDesc->RTSSTBC); + printk("RTSSC = %d\n", pDesc->RTSSC); + printk("RTSBW = %d\n", pDesc->RTSBW); + printk("RTSShort = %d\n", pDesc->RTSShort); + printk("RTSHT = %d\n", pDesc->RTSHT); + printk("RD = %d\n", pDesc->RD); + printk("STBC = %d\n", pDesc->STBC); + printk("TXSC = %d\n", pDesc->TXSC); + printk("TxBw = %d\n", pDesc->TxBw); + printk("TxShort = %d\n", pDesc->TxShort); + printk("TXHT = %d\n", pDesc->TXHT); + printk("RaBRSRID = %d\n", pDesc->RaBRSRID); + printk("RTSEn = %d\n", pDesc->RTSEn); + printk("CTS2Self = %d\n", pDesc->CTS2Self); + printk("RTSRateFBLmt = %d\n", pDesc->RTSRateFBLmt); + printk("DisRTSFB = %d\n", pDesc->DisRTSFB); + printk("RTSRate = %d\r\n", pDesc->RTSRate); + + printk("DW 5 ==========\r\n"); + printk("TxAGC = %d\n", pDesc->TxAGC); + printk("DataRateFBLmt = %d\n", pDesc->DataRateFBLmt); + printk("Disable Feedback = %d\n", pDesc->DISFB); + printk("TX_Rate = %d\n", pDesc->TxRate); + printk("PktID = %d\r\n", pDesc->PktID); + + printk("DW 6 ==========\r\n"); + printk("TCPChkSum = %d\n", pDesc->TCPChkSum); + printk("IPChkSum = %d\r\n", pDesc->IPChkSum); + + printk("DW 7-9 ==========\r\n"); + printk("TCPEn = %d\n", pDesc->TCPEn); + printk("IPHdrOffset = %d\n", pDesc->IPHdrOffset); + printk("TxBufferSize = %d\r\n", pDesc->TxBufferSize); + + printk("PhyAddressLow = %08x\n", pDesc->TxBuffAddr); + + printk("NextDescAddress= %08X\n", pDesc->NextDescAddress); +} +#endif + +#ifdef CONFIG_RTLWIFI_DEBUGFS +/* debugfs related stuff */ +static struct dentry *rtl_debugfs_root; +static int rtl_dbgfs_open(struct inode *inode, struct file *file) +{ + file->private_data = inode->i_private; + return 0; +} + +static ssize_t rtl_dbgfs_register_write(struct file *file, + const char __user *user_buf, + size_t count, + loff_t *ppos) +{ + struct r8192_priv *priv = (struct r8192_priv *)file->private_data; + char buf[32]; + int buf_size; + u32 type, offset; + + memset(buf, 0, sizeof(buf)); + buf_size = min(count, sizeof(buf) - 1); + if (copy_from_user(buf, user_buf, buf_size)) + return -EFAULT; + + if (sscanf(buf, "%x,%x", &type, &offset ) == 2) { + priv->debug->hw_type = type; + priv->debug->hw_offset = offset; + } else { + priv->debug->hw_type = 0; + priv->debug->hw_offset = 0; + } + + return count; +} + +void rtl_hardware_grab(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int t = 0; + int timeout = 20; + u32 mask = RF_CHANGE_BY_HW|RF_CHANGE_BY_PS|RF_CHANGE_BY_IPS; + + priv->debug->hw_holding = true; +#ifdef ENABLE_IPS + rtllib_ips_leave_wq(dev); +#endif + do { + if ((priv->rtllib->RfOffReason & mask)) { + msleep(100); + t++; + } else { + return; + } + } while (t < timeout); + + return; +} + +static ssize_t rtl_dbgfs_register_read(struct file *file, + char __user *user_buf, + size_t count, + loff_t *ppos) +{ + struct r8192_priv *priv = (struct r8192_priv *)file->private_data; + struct net_device *dev = priv->rtllib->dev; + ssize_t ret = 0; + char buf[2048]; + int n,i; + u32 len = 0; + u32 max = 0xff; + u32 page_no, path; + + rtl_hardware_grab(dev); + + if(!priv->debug->hw_type) { + page_no = (priv->debug->hw_offset > 0x0f)? 0x0f: priv->debug->hw_offset; +#ifdef RTL8192SE + if(page_no >= 0x08 ) { + len += snprintf(buf + len, count - len, + "\n#################### BB page- %x##################\n ", page_no); + for(n=0;n<=max;) + { + len += snprintf(buf + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(buf + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page_no << 8|n), + bMaskDWord)); + } + + } else +#endif + { + len += snprintf(buf + len,count - len, + "\n#################### MAC page- %x##################\n ", page_no); + for(n=0;n<=max;) { + len += snprintf(buf + len, count - len, "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(buf + len, count - len, + "%2.2x ",read_nic_byte(dev,((page_no<<8)|n))); + } + } + } else { + path = (priv->debug->hw_offset < RF90_PATH_MAX)? priv->debug->hw_offset:(RF90_PATH_MAX - 1); + len += snprintf(buf + len, count - len, + "\n#################### RF-PATH-%x ##################\n ", 0x0a+path); + for(n=0;n<=max;) { + len += snprintf(buf+ len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(buf + len, count - len, + "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)path,\ + n, bMaskDWord)); + } + } + + priv->debug->hw_holding = false; + + len += snprintf(buf + len, count - len, "\n"); + ret = simple_read_from_buffer(user_buf, count, ppos, buf, len); + return ret; +} + +static const struct file_operations rtl_register_debug = { + .read = rtl_dbgfs_register_read, + .write = rtl_dbgfs_register_write, + .open = rtl_dbgfs_open, + .owner = THIS_MODULE +}; + +int rtl_debug_module_init(struct r8192_priv *priv, const char *name) +{ + rtl_fs_debug *debug; + int ret = 0; + + if (!rtl_debugfs_root) + return -ENOENT; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) + debug = kzalloc(sizeof(rtl_fs_debug), GFP_KERNEL); +#else + rtl_fs_debug = kmalloc(sizeof(*rtl_fs_debug), GFP_KERNEL); + memset(rtl_fs_debug,0,sizeof(*rtl_fs_debug)); +#endif + if (!debug) { + ret = -ENOMEM; + goto err; + } + priv->debug = debug; + + debug->name = name; + debug->dir_drv = debugfs_create_dir(name, rtl_debugfs_root); + if (!debug->dir_drv ) { + ret = -ENOENT; + goto err; + } + + debug->debug_register = debugfs_create_file("debug_register", S_IRUGO, + debug->dir_drv, priv, &rtl_register_debug); + if(!debug->debug_register) { + ret = -ENOENT; + goto err; + } + + return 0; +err: + RT_TRACE(COMP_DBG, "Can't open the debugfs directory\n"); + rtl_debug_module_remove(priv); + return ret; + +} + +void rtl_debug_module_remove(struct r8192_priv *priv) +{ + if (!priv->debug) + return; + debugfs_remove(priv->debug->debug_register); + debugfs_remove(priv->debug->dir_drv); + kfree(priv->debug); + priv->debug = NULL; +} + +int rtl_create_debugfs_root(void) +{ + rtl_debugfs_root = debugfs_create_dir(DRV_NAME, NULL); + if (!rtl_debugfs_root) + return -ENOENT; + + return 0; +} + +void rtl_remove_debugfs_root(void) +{ + debugfs_remove(rtl_debugfs_root); + rtl_debugfs_root = NULL; +} +#endif + +/**************************************************************************** + -----------------------------PROCFS STUFF------------------------- +*****************************************************************************/ +/*This part is related to PROC, which will record some statistics. */ +static struct proc_dir_entry *rtl8192_proc = NULL; + +static int proc_get_stats_ap(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + struct rtllib_network *target; + + int len = 0; + + list_for_each_entry(target, &ieee->network_list, list) { + + len += snprintf(page + len, count - len, + "%s ", target->ssid); + + if(target->wpa_ie_len>0 || target->rsn_ie_len>0){ + len += snprintf(page + len, count - len, + "WPA\n"); + } + else{ + len += snprintf(page + len, count - len, + "non_WPA\n"); + } + + } + + *eof = 1; + return len; +} + +static int proc_get_registers_0(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x000; + +#ifdef RTL8192SE + /* This dump the current register page */ + if(!IS_BB_REG_OFFSET_92S(page0)){ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + }else +#endif + { + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;n++,i++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_1(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x100; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_2(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x200; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_3(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x300; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_4(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x400; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_5(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x500; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_6(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x600; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_7(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x700; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, + "\nD: %2x > ",n); + for(i=0;i<16 && n<=max;i++,n++) + len += snprintf(page + len, count - len, + "%2.2x ",read_nic_byte(dev,(page0|n))); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_8(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x800; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; + +} +static int proc_get_registers_9(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0x900; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} +static int proc_get_registers_a(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0xa00; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} +static int proc_get_registers_b(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0xb00; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} +static int proc_get_registers_c(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0xc00; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} +static int proc_get_registers_d(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0xd00; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} +static int proc_get_registers_e(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n,page0; + + int max=0xff; + page0 = 0xe00; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n####################page %x##################\n ", (page0>>8)); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_QueryBBReg(dev,(page0|n), bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} + +static int proc_get_reg_rf_a(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n; + + int max=0xff; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n#################### RF-A ##################\n "); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A,n, bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} + +static int proc_get_reg_rf_b(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n; + + int max=0xff; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n#################### RF-B ##################\n "); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_B, n, bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} + +static int proc_get_reg_rf_c(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n; + + int max=0xff; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n#################### RF-C ##################\n "); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_C, n, bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} + +static int proc_get_reg_rf_d(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + + int len = 0; + int i,n; + + int max=0xff; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n#################### RF-D ##################\n "); + for(n=0;n<=max;) + { + len += snprintf(page + len, count - len, "\nD: %2x > ",n); + for(i=0;i<4 && n<=max;n+=4,i++) + len += snprintf(page + len, count - len, + "%8.8x ",rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_D, n, bMaskDWord)); + } + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} + +static int proc_get_cam_register(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + u32 target_command=0; + u32 target_content=0; + u8 entry_i=0; + u32 ulStatus; + int len = 0; + int i=100, j = 0; + + /* This dump the current register page */ + len += snprintf(page + len, count - len, + "\n#################### SECURITY CAM ##################\n "); + for(j=0; j6) && (j<31)) + continue; + len += snprintf(page + len, count - len, "\nD: %2x > ",j); + for(entry_i=0;entry_i=0) + { + ulStatus = read_nic_dword(dev, RWCAM); + if(ulStatus & BIT31){ + continue; + } + else{ + break; + } + } + write_nic_dword(dev, RWCAM, target_command); + target_content = read_nic_dword(dev, RCAMO); + len += snprintf(page + len, count - len,"%8.8x ",target_content); + } + } + + len += snprintf(page + len, count - len,"\n"); + *eof = 1; + return len; +} + +static int proc_get_stats_tx(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + int len = 0; + + len += snprintf(page + len, count - len, + "TX VI priority ok int: %lu\n" + "TX VO priority ok int: %lu\n" + "TX BE priority ok int: %lu\n" + "TX BK priority ok int: %lu\n" + "TX MANAGE priority ok int: %lu\n" + "TX BEACON priority ok int: %lu\n" + "TX BEACON priority error int: %lu\n" + "TX CMDPKT priority ok int: %lu\n" + "TX queue stopped?: %d\n" + "TX fifo overflow: %lu\n" + "TX total data packets %lu\n" + "TX total data bytes :%lu\n", + priv->stats.txviokint, + priv->stats.txvookint, + priv->stats.txbeokint, + priv->stats.txbkokint, + priv->stats.txmanageokint, + priv->stats.txbeaconokint, + priv->stats.txbeaconerr, + priv->stats.txcmdpktokint, + netif_queue_stopped(dev), + priv->stats.txoverflow, + priv->rtllib->stats.tx_packets, + priv->rtllib->stats.tx_bytes + + + ); + + *eof = 1; + return len; +} + + + +static int proc_get_stats_rx(char *page, char **start, + off_t offset, int count, + int *eof, void *data) +{ + struct net_device *dev = data; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + int len = 0; + + len += snprintf(page + len, count - len, + "RX packets: %lu\n" + "RX data crc err: %lu\n" + "RX mgmt crc err: %lu\n" + "RX desc err: %lu\n" + "RX rx overflow error: %lu\n", + priv->stats.rxint, + priv->stats.rxdatacrcerr, + priv->stats.rxmgmtcrcerr, + priv->stats.rxrdu, + priv->stats.rxoverflow); + + *eof = 1; + return len; +} + +void rtl8192_proc_module_init(void) +{ + RT_TRACE(COMP_INIT, "Initializing proc filesystem"); +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + rtl8192_proc=create_proc_entry(DRV_NAME, S_IFDIR, proc_net); +#else + rtl8192_proc=create_proc_entry(DRV_NAME, S_IFDIR, init_net.proc_net); +#endif +} + + +void rtl8192_proc_module_remove(void) +{ +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + remove_proc_entry(DRV_NAME, proc_net); +#else + remove_proc_entry(DRV_NAME, init_net.proc_net); +#endif +} + + +void rtl8192_proc_remove_one(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + printk("dev name %s\n",dev->name); + + if (priv->dir_dev) { + remove_proc_entry("stats-tx", priv->dir_dev); + remove_proc_entry("stats-rx", priv->dir_dev); + remove_proc_entry("stats-ap", priv->dir_dev); + remove_proc_entry("registers-0", priv->dir_dev); + remove_proc_entry("registers-1", priv->dir_dev); + remove_proc_entry("registers-2", priv->dir_dev); + remove_proc_entry("registers-3", priv->dir_dev); + remove_proc_entry("registers-4", priv->dir_dev); + remove_proc_entry("registers-5", priv->dir_dev); + remove_proc_entry("registers-6", priv->dir_dev); + remove_proc_entry("registers-7", priv->dir_dev); + remove_proc_entry("registers-8", priv->dir_dev); + remove_proc_entry("registers-9", priv->dir_dev); + remove_proc_entry("registers-a", priv->dir_dev); + remove_proc_entry("registers-b", priv->dir_dev); + remove_proc_entry("registers-c", priv->dir_dev); + remove_proc_entry("registers-d", priv->dir_dev); + remove_proc_entry("registers-e", priv->dir_dev); + remove_proc_entry("RF-A", priv->dir_dev); + remove_proc_entry("RF-B", priv->dir_dev); + remove_proc_entry("RF-C", priv->dir_dev); + remove_proc_entry("RF-D", priv->dir_dev); + remove_proc_entry("SEC-CAM", priv->dir_dev); +#ifdef _RTL8192_EXT_PATCH_ + remove_proc_entry("ra0", rtl8192_proc); +#else + remove_proc_entry("wlan0", rtl8192_proc); +#endif + priv->dir_dev = NULL; + } +} + + +void rtl8192_proc_init_one(struct net_device *dev) +{ + struct proc_dir_entry *e; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + priv->dir_dev = create_proc_entry(dev->name, + S_IFDIR | S_IRUGO | S_IXUGO, + rtl8192_proc); + if (!priv->dir_dev) { + RT_TRACE(COMP_ERR, "Unable to initialize /proc/net/rtl8192/%s\n", + dev->name); + return; + } + e = create_proc_read_entry("stats-rx", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_stats_rx, dev); + + if (!e) { + RT_TRACE(COMP_ERR,"Unable to initialize " + "/proc/net/rtl8192/%s/stats-rx\n", + dev->name); + } + + + e = create_proc_read_entry("stats-tx", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_stats_tx, dev); + + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/stats-tx\n", + dev->name); + } + + e = create_proc_read_entry("stats-ap", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_stats_ap, dev); + + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/stats-ap\n", + dev->name); + } + + e = create_proc_read_entry("registers-0", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_0, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-0\n", + dev->name); + } + e = create_proc_read_entry("registers-1", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_1, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-1\n", + dev->name); + } + e = create_proc_read_entry("registers-2", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_2, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-2\n", + dev->name); + } + e = create_proc_read_entry("registers-3", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_3, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-3\n", + dev->name); + } + e = create_proc_read_entry("registers-4", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_4, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-4\n", + dev->name); + } + e = create_proc_read_entry("registers-5", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_5, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-5\n", + dev->name); + } + e = create_proc_read_entry("registers-6", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_6, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-6\n", + dev->name); + } + e = create_proc_read_entry("registers-7", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_7, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-7\n", + dev->name); + } + e = create_proc_read_entry("registers-8", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_8, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-8\n", + dev->name); + } + e = create_proc_read_entry("registers-9", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_9, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-9\n", + dev->name); + } + e = create_proc_read_entry("registers-a", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_a, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-a\n", + dev->name); + } + e = create_proc_read_entry("registers-b", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_b, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-b\n", + dev->name); + } + e = create_proc_read_entry("registers-c", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_c, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-c\n", + dev->name); + } + e = create_proc_read_entry("registers-d", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_d, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-d\n", + dev->name); + } + e = create_proc_read_entry("registers-e", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_registers_e, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/registers-e\n", + dev->name); + } + e = create_proc_read_entry("RF-A", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_reg_rf_a, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/RF-A\n", + dev->name); + } + e = create_proc_read_entry("RF-B", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_reg_rf_b, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/RF-B\n", + dev->name); + } + e = create_proc_read_entry("RF-C", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_reg_rf_c, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/RF-C\n", + dev->name); + } + e = create_proc_read_entry("RF-D", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_reg_rf_d, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/RF-D\n", + dev->name); + } + e = create_proc_read_entry("SEC-CAM", S_IFREG | S_IRUGO, + priv->dir_dev, proc_get_cam_register, dev); + if (!e) { + RT_TRACE(COMP_ERR, "Unable to initialize " + "/proc/net/rtl8192/%s/SEC-CAM\n", + dev->name); + } +#ifdef _RTL8192_EXT_PATCH_ + if( priv->mshobj && priv->mshobj->ext_patch_create_proc ) + priv->mshobj->ext_patch_create_proc(priv); +#endif + +} + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_ps.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_ps.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + ******************************************************************************/ +#ifndef _RTL_PS_H +#define _RTL_PS_H + +#include +struct net_device; + +#define RT_CHECK_FOR_HANG_PERIOD 2 +#define INIT_DEFAULT_CHAN 1 + +#if defined CONFIG_ASPM_OR_D3 +#define RT_DISABLE_ASPM(dev) PlatformDisableASPM(dev) +#define RT_ENABLE_ASPM(dev) PlatformEnableASPM(dev) +#define RT_ENTER_D3(dev, _bTempSetting) PlatformSetPMCSR(dev, 0x03, _bTempSetting) +#define RT_LEAVE_D3(dev, _bTempSetting) PlatformSetPMCSR(dev, 0, _bTempSetting) +bool PlatformEnable92CEBackDoor(struct net_device *dev); +void PlatformDisableASPM(struct net_device *dev); +void PlatformEnableASPM(struct net_device *dev); +u32 PlatformResetPciSpace(struct net_device *dev,u8 Value); +#endif + +#if defined(RTL8192E) || defined(RTL8192SE) || defined RTL8192CE +void rtl8192_hw_wakeup(struct net_device *dev); +void rtl8192_hw_to_sleep(struct net_device *dev, u32 th, u32 tl); +void rtllib_ips_leave_wq(struct net_device *dev); +void rtllib_ips_leave(struct net_device *dev); +void IPSLeave_wq (void *data); +#endif + +#ifdef ENABLE_IPS +void IPSEnter(struct net_device *dev); +void IPSLeave(struct net_device *dev); +#endif + +#ifdef ENABLE_LPS +void LeisurePSEnter(struct net_device *dev); +void LeisurePSLeave(struct net_device *dev); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_wx.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_wx.c @@ -0,0 +1,4231 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#include +#include "rtl_core.h" +#ifdef ENABLE_DOT11D +#include "rtllib/dot11d.h" +#endif +#ifdef _RTL8192_EXT_PATCH_ +#include "../../mshclass/msh_class.h" +#endif + +#ifdef CONFIG_MP +#include "r8192S_mp.h" +#endif + +#define RATE_COUNT 12 +u32 rtl8192_rates[] = {1000000,2000000,5500000,11000000, + 6000000,9000000,12000000,18000000,24000000,36000000,48000000,54000000}; + + +#ifndef ENETDOWN +#define ENETDOWN 1 +#endif +extern int hwwep; +#ifdef _RTL8192_EXT_PATCH_ +int r8192_wx_set_channel(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); +static int r8192_wx_mesh_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); +static int r8192_wx_get_mesh_list(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); +#endif + +static int r8192_wx_get_freq(struct net_device *dev, + struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef _RTL8192_EXT_PATCH_ + return rtllib_wx_get_freq(priv->rtllib,a,wrqu,b,0); +#else + return rtllib_wx_get_freq(priv->rtllib,a,wrqu,b); +#endif +} + + +#if 0 + +static int r8192_wx_set_beaconinterval(struct net_device *dev, struct iw_request_info *aa, + union iwreq_data *wrqu, char *b) +{ + int *parms = (int *)b; + int bi = parms[0]; + + struct r8192_priv *priv = rtllib_priv(dev); + + down(&priv->wx_sem); + DMESG("setting beacon interval to %x",bi); + + priv->rtllib->beacon_interval=bi; + rtl8192_commit(dev); + up(&priv->wx_sem); + + return 0; +} + + +static int r8192_wx_set_forceassociate(struct net_device *dev, struct iw_request_info *aa, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv=rtllib_priv(dev); + int *parms = (int *)extra; + + priv->rtllib->force_associate = (parms[0] > 0); + + + return 0; +} + +#endif +static int r8192_wx_get_mode(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + struct r8192_priv *priv=rtllib_priv(dev); + + return rtllib_wx_get_mode(priv->rtllib,a,wrqu,b); +} + +static int r8192_wx_get_rate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + return rtllib_wx_get_rate(priv->rtllib,info,wrqu,extra); +} + + + +static int r8192_wx_set_rate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + + ret = rtllib_wx_set_rate(priv->rtllib,info,wrqu,extra); + + up(&priv->wx_sem); + + return ret; +} + + +static int r8192_wx_set_rts(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + + ret = rtllib_wx_set_rts(priv->rtllib,info,wrqu,extra); + + up(&priv->wx_sem); + + return ret; +} + +static int r8192_wx_get_rts(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + return rtllib_wx_get_rts(priv->rtllib,info,wrqu,extra); +} + +static int r8192_wx_set_power(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true){ + RT_TRACE(COMP_ERR,"%s():Hw is Radio Off, we can't set Power,return\n",__FUNCTION__); + return 0; + } + down(&priv->wx_sem); + + ret = rtllib_wx_set_power(priv->rtllib,info,wrqu,extra); + + up(&priv->wx_sem); + + return ret; +} + +static int r8192_wx_get_power(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + return rtllib_wx_get_power(priv->rtllib,info,wrqu,extra); +} + +static int r8192_wx_set_rawtx(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret; + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + + ret = rtllib_wx_set_rawtx(priv->rtllib, info, wrqu, extra); + + up(&priv->wx_sem); + + return ret; + +} + +static int r8192_wx_force_reset(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + down(&priv->wx_sem); + + printk("%s(): force reset ! extra is %d\n",__FUNCTION__, *extra); + priv->force_reset = *extra; + up(&priv->wx_sem); + return 0; + +} + +static int r8192_wx_force_mic_error(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + down(&priv->wx_sem); + + printk("%s(): force mic error ! \n",__FUNCTION__); + ieee->force_mic_error = true; + up(&priv->wx_sem); + return 0; + +} + +#define MAX_ADHOC_PEER_NUM 64 +typedef struct +{ + unsigned char MacAddr[ETH_ALEN]; + unsigned char WirelessMode; + unsigned char bCurTxBW40MHz; +} adhoc_peer_entry_t, *p_adhoc_peer_entry_t; +typedef struct +{ + adhoc_peer_entry_t Entry[MAX_ADHOC_PEER_NUM]; + unsigned char num; +} adhoc_peers_info_t, *p_adhoc_peers_info_t; +int r8192_wx_get_adhoc_peers(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#ifndef RTL8192SE + return 0; +#else + struct r8192_priv *priv = rtllib_priv(dev); + struct sta_info * psta = NULL; + adhoc_peers_info_t adhoc_peers_info; + p_adhoc_peers_info_t padhoc_peers_info = &adhoc_peers_info; + p_adhoc_peer_entry_t padhoc_peer_entry = NULL; + int k=0; + + + memset(extra, 0, 2047); + padhoc_peers_info->num = 0; + + down(&priv->wx_sem); + + for(k=0; krtllib->peer_assoc_list[k]; + if(NULL != psta) + { + padhoc_peer_entry = &padhoc_peers_info->Entry[padhoc_peers_info->num]; + memset(padhoc_peer_entry,0, sizeof(adhoc_peer_entry_t)); + memcpy(padhoc_peer_entry->MacAddr, psta->macaddr, ETH_ALEN); + padhoc_peer_entry->WirelessMode = psta->wireless_mode; + padhoc_peer_entry->bCurTxBW40MHz = psta->htinfo.bCurTxBW40MHz; + padhoc_peers_info->num ++; + printk("[%d] MacAddr:"MAC_FMT" \tWirelessMode:%d \tBW40MHz:%d \n", \ + k, MAC_ARG(padhoc_peer_entry->MacAddr), padhoc_peer_entry->WirelessMode, padhoc_peer_entry->bCurTxBW40MHz); + sprintf(extra, "[%d] MacAddr:"MAC_FMT" \tWirelessMode:%d \tBW40MHz:%d \n", \ + k, MAC_ARG(padhoc_peer_entry->MacAddr), padhoc_peer_entry->WirelessMode, padhoc_peer_entry->bCurTxBW40MHz); + } + } + + up(&priv->wx_sem); + + wrqu->data.length = strlen(extra); + wrqu->data.flags = 0; + return 0; + +#endif +} + + +static int r8191se_wx_get_firm_version(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *wrqu, char *extra) +{ +#if defined RTL8192SE || defined RTL8192CE + struct r8192_priv *priv = rtllib_priv(dev); + u16 firmware_version; + + down(&priv->wx_sem); + printk("%s(): Just Support 92SE tmp\n", __FUNCTION__); +#ifdef RTL8192CE + firmware_version = priv->firmware_version; +#else + firmware_version = priv->pFirmware->FirmwareVersion; +#endif + wrqu->value = firmware_version; + wrqu->fixed = 1; + + up(&priv->wx_sem); +#endif + return 0; +} + +static int r8192_wx_adapter_power_status(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#ifdef ENABLE_LPS + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + struct rtllib_device* ieee = priv->rtllib; + + down(&priv->wx_sem); + + RT_TRACE(COMP_POWER, "%s(): %s\n",__FUNCTION__, (*extra == 6)?"DC power":"AC power"); + if(*extra || priv->force_lps) { + priv->ps_force = false; + pPSC->bLeisurePs = true; + } else { + if(priv->rtllib->state == RTLLIB_LINKED) + LeisurePSLeave(dev); + + priv->ps_force = true; + pPSC->bLeisurePs = false; + ieee->ps = *extra; + } + + up(&priv->wx_sem); +#endif + + return 0; + +} + +#ifdef _RTL8192_EXT_PATCH_ +static int r8192_wx_print_reg(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + u8 reg1=0,reg2=0,reg3=0,reg4=0; + u32 reg5 = 0, len = 0; + + memset(extra, 0, 512); + sprintf(extra,"\nStart Log: Set 0x08000000 to 0x230\n"); + write_nic_dword(dev, 0x230 , 0x08000000); + reg1 = read_nic_byte(dev, 0xf0); + reg2 = read_nic_byte(dev, 0xf4); + reg3 = read_nic_byte(dev, 0x140); + reg4 = read_nic_byte(dev, 0x124); + mdelay(10); + reg5 = read_nic_dword(dev, 0x230); + len = strlen(extra); + sprintf(extra+len, "0xf0: %2.2x\n0xf4: %2.2x\n0x140: %2.2x\n0x124: %2.2x\n", reg1,reg2,reg3,reg4); + len = strlen(extra); + sprintf(extra+len,"After delay 10ms, read 0x230: %8.8x\n", reg5); + + write_nic_dword(dev, 0x230 , 0x40000000); + reg5 = read_nic_dword(dev, 0x230); + len = strlen(extra); + sprintf(extra+len,"Set 0x40000000 to 0x230. Read 0x230: %8.8x\n", reg5); + + write_nic_dword(dev, 0x230 , 0x80000000); + reg5 = read_nic_dword(dev, 0x230); + len = strlen(extra); + sprintf(extra+len,"Set 0x80000000 to 0x230. Read 0x230: %8.8x\n", reg5); + + wrqu->data.length = strlen(extra); + return 0; +} + +static int r8192_wx_resume_firm(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + write_nic_byte(dev, 0x42, 0xFF); + write_nic_word(dev, 0x40, 0x77FC); + write_nic_word(dev, 0x40, 0x57FC); + write_nic_word(dev, 0x40, 0x37FC); + write_nic_word(dev, 0x40, 0x77FC); + + udelay(100); + + write_nic_word(dev, 0x40, 0x57FC); + write_nic_word(dev, 0x40, 0x37FC); + write_nic_byte(dev, 0x42, 0x00); + + return 0; +} +#endif +static int r8192se_wx_set_radio(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + down(&priv->wx_sem); + + printk("%s(): set radio ! extra is %d\n",__FUNCTION__, *extra); + if((*extra != 0) && (*extra != 1)) + { + RT_TRACE(COMP_ERR, "%s(): set radio an err value,must 0(radio off) or 1(radio on)\n",__FUNCTION__); + return -1; + } + priv->sw_radio_on = *extra; + up(&priv->wx_sem); + return 0; + +} + +static int r8192se_wx_set_lps_awake_interval(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + down(&priv->wx_sem); + + printk("%s(): set lps awake interval ! extra is %d\n",__FUNCTION__, *extra); + + pPSC->RegMaxLPSAwakeIntvl = *extra; + up(&priv->wx_sem); + return 0; + +} + +static int r8192se_wx_set_force_lps(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + down(&priv->wx_sem); + + printk("%s(): force LPS ! extra is %d (1 is open 0 is close)\n",__FUNCTION__, *extra); + priv->force_lps = *extra; + up(&priv->wx_sem); + return 0; + +} + +#ifdef _RTL8192_EXT_PATCH_ +static int r8192_wx_get_drv_version(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + memset(extra, 0, 64); + sprintf(extra, "Support Mesh"); + + ((struct iw_point *)wrqu)->length = strlen(extra); + return 0; +} +#endif + +static int r8192_wx_set_debugflag(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 c = *extra; + + if(priv->bHwRadioOff == true) + return 0; + + printk("=====>%s(), *extra:%x, debugflag:%x\n", __FUNCTION__, *extra, rt_global_debug_component); + if (c > 0) { + rt_global_debug_component |= (1<bHwRadioOff == true) + return 0; +#ifdef _RTL8192_EXT_PATCH_ + if (priv->mshobj && (priv->rtllib->iw_mode==IW_MODE_MESH)) { + return 0; + } +#endif + rtState = priv->rtllib->eRFPowerState; + down(&priv->wx_sem); +#ifdef ENABLE_IPS + if(wrqu->mode == IW_MODE_ADHOC || wrqu->mode == IW_MODE_MONITOR + || ieee->bNetPromiscuousMode ) + { + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + up(&priv->wx_sem); + return -1; + } else { + printk("=========>%s(): IPSLeave\n",__FUNCTION__); + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); + } + } + } + } +#endif + ret = rtllib_wx_set_mode(priv->rtllib,a,wrqu,b); + + up(&priv->wx_sem); + return ret; +} +#if defined (RTL8192S_WAPI_SUPPORT) +int wapi_ioctl_set_mode(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + struct r8192_priv *priv = rtllib_priv(dev); + RT_RF_POWER_STATE rtState; + int ret; + + printk("===============================>%s\n", __FUNCTION__); + if(priv->bHwRadioOff == true) + return 0; +#ifdef _RTL8192_EXT_PATCH_ + if (priv->mshobj && (priv->rtllib->iw_mode==IW_MODE_MESH)) { + return 0; + } +#endif + rtState = priv->rtllib->eRFPowerState; +#ifdef ENABLE_IPS + if(wrqu->mode == IW_MODE_ADHOC){ + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + up(&priv->wx_sem); + return -1; + } else { + printk("=========>%s(): IPSLeave\n",__FUNCTION__); + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); + } + } + } + } +#endif + ret = rtllib_wx_set_mode(priv->rtllib,a,wrqu,b); + + return ret; +} +#endif +struct iw_range_with_scan_capa +{ + /* Informative stuff (to choose between different interface) */ + __u32 throughput; /* To give an idea... */ + /* In theory this value should be the maximum benchmarked + * TCP/IP throughput, because with most of these devices the + * bit rate is meaningless (overhead an co) to estimate how + * fast the connection will go and pick the fastest one. + * I suggest people to play with Netperf or any benchmark... + */ + + /* NWID (or domain id) */ + __u32 min_nwid; /* Minimal NWID we are able to set */ + __u32 max_nwid; /* Maximal NWID we are able to set */ + + /* Old Frequency (backward compat - moved lower ) */ + __u16 old_num_channels; + __u8 old_num_frequency; + + /* Scan capabilities */ + __u8 scan_capa; +}; + +static int rtl8192_wx_get_range(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct iw_range *range = (struct iw_range *)extra; + struct r8192_priv *priv = rtllib_priv(dev); + u16 val; + int i; + + wrqu->data.length = sizeof(*range); + memset(range, 0, sizeof(*range)); + + /* ~130 Mb/s real (802.11n) */ + range->throughput = 130 * 1000 * 1000; + + if(priv->rf_set_sens != NULL) + range->sensitivity = priv->max_sens; /* signal level threshold range */ + + range->max_qual.qual = 100; + range->max_qual.level = 0; + range->max_qual.noise = 0; + range->max_qual.updated = 7; /* Updated all three */ + + range->avg_qual.qual = 70; /* > 8% missed beacons is 'bad' */ + range->avg_qual.level = 0; + range->avg_qual.noise = 0; + range->avg_qual.updated = 7; /* Updated all three */ + + range->num_bitrates = min(RATE_COUNT, IW_MAX_BITRATES); + + for (i = 0; i < range->num_bitrates; i++) { + range->bitrate[i] = rtl8192_rates[i]; + } + + range->max_rts = DEFAULT_RTS_THRESHOLD; + range->min_frag = MIN_FRAG_THRESHOLD; + range->max_frag = MAX_FRAG_THRESHOLD; + + range->min_pmp = 0; + range->max_pmp = 5000000; + range->min_pmt = 0; + range->max_pmt = 65535*1000; + range->pmp_flags = IW_POWER_PERIOD; + range->pmt_flags = IW_POWER_TIMEOUT; + range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R; + range->we_version_compiled = WIRELESS_EXT; + range->we_version_source = 18; + + for (i = 0, val = 0; i < 14; i++) { + if ((priv->rtllib->active_channel_map)[i+1]) { + range->freq[val].i = i + 1; + range->freq[val].m = rtllib_wlan_frequencies[i] * 100000; + range->freq[val].e = 1; + val++; + } else { + } + + if (val == IW_MAX_FREQUENCIES) + break; + } + range->num_frequency = val; + range->num_channels = val; +#if WIRELESS_EXT > 17 + range->enc_capa = IW_ENC_CAPA_WPA|IW_ENC_CAPA_WPA2| + IW_ENC_CAPA_CIPHER_TKIP|IW_ENC_CAPA_CIPHER_CCMP; +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) + { + struct iw_range_with_scan_capa* tmp = (struct iw_range_with_scan_capa*)range; + tmp->scan_capa = 0x01; + } +#else + range->scan_capa = IW_SCAN_CAPA_ESSID | IW_SCAN_CAPA_TYPE; +#endif + + /* Event capability (kernel + driver) */ + + return 0; +} + +static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + RT_RF_POWER_STATE rtState; + int ret; + +#ifdef CONFIG_MP + printk("######################%s(): In MP Test Can not Scan\n",__FUNCTION__); + return 0; +#endif + if (!(ieee->softmac_features & IEEE_SOFTMAC_SCAN)){ + if((ieee->state >= RTLLIB_ASSOCIATING) && (ieee->state <= RTLLIB_ASSOCIATING_AUTHENTICATED)){ + return 0; + } + if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->CntAfterLink<2)){ + return 0; + } + } + + if(priv->bHwRadioOff == true){ + printk("================>%s(): hwradio off\n",__FUNCTION__); + return 0; + } + rtState = priv->rtllib->eRFPowerState; + if(!priv->up) return -ENETDOWN; + if (priv->rtllib->LinkDetectInfo.bBusyTraffic == true) + return -EAGAIN; + +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH)&&(ieee->mesh_state == RTLLIB_MESH_LINKED)) + { + return 0; + } +#endif +#if WIRELESS_EXT > 17 + if (wrqu->data.flags & IW_SCAN_THIS_ESSID) + { + struct iw_scan_req* req = (struct iw_scan_req*)b; + if (req->essid_len) + { + ieee->current_network.ssid_len = req->essid_len; + memcpy(ieee->current_network.ssid, req->essid, req->essid_len); + } + } +#endif + + down(&priv->wx_sem); + + priv->rtllib->FirstIe_InScan = true; + + if(priv->rtllib->state != RTLLIB_LINKED){ +#ifdef ENABLE_IPS + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS){ + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + up(&priv->wx_sem); + return -1; + }else{ + RT_TRACE(COMP_PS, "=========>%s(): IPSLeave\n",__FUNCTION__); + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); + } + } + } +#endif + rtllib_stop_scan(priv->rtllib); + if(priv->rtllib->LedControlHandler) + priv->rtllib->LedControlHandler(dev, LED_CTL_SITE_SURVEY); + + if(priv->rtllib->eRFPowerState != eRfOff){ + priv->rtllib->actscanning = true; + rtllib_start_scan_syncro(priv->rtllib, 0); + } + ret = 0; + } else { + priv->rtllib->actscanning = true; + ret = rtllib_wx_set_scan(priv->rtllib,a,wrqu,b); + } + + up(&priv->wx_sem); + return ret; +} + + +static int r8192_wx_get_scan(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + if(!priv->up) return -ENETDOWN; + + if(priv->bHwRadioOff == true) + return 0; + + + down(&priv->wx_sem); + + ret = rtllib_wx_get_scan(priv->rtllib,a,wrqu,b); + + up(&priv->wx_sem); + + return ret; +} + +static int r8192_wx_set_essid(struct net_device *dev, + struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret; + + if ((rtllib_act_scanning(priv->rtllib, false)) && !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + ; + } +#ifdef CONFIG_MP + printk("######################%s(): In MP Test Can not Set Essid\n",__FUNCTION__); + return 0; +#endif + if(priv->bHwRadioOff == true){ + printk("=========>%s():hw radio off,or Rf state is eRfOff, return\n",__FUNCTION__); + return 0; + } + down(&priv->wx_sem); + ret = rtllib_wx_set_essid(priv->rtllib,a,wrqu,b); + + up(&priv->wx_sem); + + return ret; +} + +static int r8192_wx_get_essid(struct net_device *dev, + struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + down(&priv->wx_sem); + + ret = rtllib_wx_get_essid(priv->rtllib, a, wrqu, b); + + up(&priv->wx_sem); + + return ret; +} + +static int r8192_wx_set_nick(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if (wrqu->data.length > IW_ESSID_MAX_SIZE) + return -E2BIG; + down(&priv->wx_sem); + 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); + up(&priv->wx_sem); + return 0; + +} + +static int r8192_wx_get_nick(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + down(&priv->wx_sem); + wrqu->data.length = strlen(priv->nick); + memcpy(extra, priv->nick, wrqu->data.length); + wrqu->data.flags = 1; /* active */ + up(&priv->wx_sem); + return 0; +} + +static int r8192_wx_set_freq(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + + ret = rtllib_wx_set_freq(priv->rtllib, a, wrqu, b); + + up(&priv->wx_sem); + return ret; +} + +static int r8192_wx_get_name(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + return rtllib_wx_get_name(priv->rtllib, info, wrqu, extra); +} + + +static int r8192_wx_set_frag(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + if (wrqu->frag.disabled) + priv->rtllib->fts = DEFAULT_FRAG_THRESHOLD; + else { + if (wrqu->frag.value < MIN_FRAG_THRESHOLD || + wrqu->frag.value > MAX_FRAG_THRESHOLD) + return -EINVAL; + + priv->rtllib->fts = wrqu->frag.value & ~0x1; + } + + return 0; +} + + +static int r8192_wx_get_frag(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + wrqu->frag.value = priv->rtllib->fts; + wrqu->frag.fixed = 0; /* no auto select */ + wrqu->frag.disabled = (wrqu->frag.value == DEFAULT_FRAG_THRESHOLD); + + return 0; +} + + +static int r8192_wx_set_wap(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *awrq, + char *extra) +{ + + int ret; + struct r8192_priv *priv = rtllib_priv(dev); + + if ((rtllib_act_scanning(priv->rtllib, false)) && !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + ; + } + + if(priv->bHwRadioOff == true) + return 0; + +#ifdef _RTL8192_EXT_PATCH_ + if (priv->mshobj && (priv->rtllib->iw_mode==IW_MODE_MESH)){ + return 0; + } +#endif + down(&priv->wx_sem); + + ret = rtllib_wx_set_wap(priv->rtllib,info,awrq,extra); + + up(&priv->wx_sem); + + return ret; + +} + + +static int r8192_wx_get_wap(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + return rtllib_wx_get_wap(priv->rtllib,info,wrqu,extra); +} + + +static int r8192_wx_get_enc(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef _RTL8192_EXT_PATCH_ + return rtllib_wx_get_encode(priv->rtllib, info, wrqu, key,0); +#else + return rtllib_wx_get_encode(priv->rtllib, info, wrqu, key); +#endif +} + +static int r8192_wx_set_enc(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret; + + struct rtllib_device *ieee = priv->rtllib; + u32 hwkey[4]={0,0,0,0}; + u8 mask=0xff; + u32 key_idx=0; + u8 zero_addr[4][6] ={ {0x00,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x00,0x00,0x00,0x00,0x01}, + {0x00,0x00,0x00,0x00,0x00,0x02}, + {0x00,0x00,0x00,0x00,0x00,0x03} }; + int i; + + if ((rtllib_act_scanning(priv->rtllib, false)) && !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + ; + } +#ifdef CONFIG_MP + printk("######################%s(): In MP Test Can not Set Enc\n",__FUNCTION__); + return 0; +#endif + if(priv->bHwRadioOff == true) + return 0; + + if(!priv->up) return -ENETDOWN; + + priv->rtllib->wx_set_enc = 1; +#ifdef ENABLE_IPS + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); +#endif + down(&priv->wx_sem); + + RT_TRACE(COMP_SEC, "Setting SW wep key"); +#ifdef _RTL8192_EXT_PATCH_ + ret = rtllib_wx_set_encode(priv->rtllib,info,wrqu,key,0); +#else + ret = rtllib_wx_set_encode(priv->rtllib,info,wrqu,key); +#endif + up(&priv->wx_sem); + + + if (wrqu->encoding.flags & IW_ENCODE_DISABLED) { + ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA; + CamResetAllEntry(dev); +#ifdef _RTL8192_EXT_PATCH_ + CamRestoreEachIFEntry(dev,1); + reset_IFswcam(dev,0); + priv->rtllib->wx_set_enc = 0; +#else + memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32); +#endif + goto end_hw_sec; + } + if(wrqu->encoding.length!=0){ + + for(i=0 ; i<4 ; i++){ + hwkey[i] |= key[4*i+0]&mask; + if(i==1&&(4*i+1)==wrqu->encoding.length) mask=0x00; + if(i==3&&(4*i+1)==wrqu->encoding.length) mask=0x00; + hwkey[i] |= (key[4*i+1]&mask)<<8; + hwkey[i] |= (key[4*i+2]&mask)<<16; + hwkey[i] |= (key[4*i+3]&mask)<<24; + } + + #define CONF_WEP40 0x4 + #define CONF_WEP104 0x14 + + switch(wrqu->encoding.flags & IW_ENCODE_INDEX){ + case 0: key_idx = ieee->tx_keyidx; break; + case 1: key_idx = 0; break; + case 2: key_idx = 1; break; + case 3: key_idx = 2; break; + case 4: key_idx = 3; break; + default: break; + } + if(wrqu->encoding.length==0x5){ + ieee->pairwise_key_type = KEY_TYPE_WEP40; + EnableHWSecurityConfig8192(dev); +#ifndef _RTL8192_EXT_PATCH_ + setKey( dev, + key_idx, + key_idx, + KEY_TYPE_WEP40, + zero_addr[key_idx], + 0, + hwkey); + + set_swcam( dev, + key_idx, + key_idx, + KEY_TYPE_WEP40, + zero_addr[key_idx], + 0, + hwkey, + 0); + +#endif + } + + else if(wrqu->encoding.length==0xd){ + ieee->pairwise_key_type = KEY_TYPE_WEP104; + EnableHWSecurityConfig8192(dev); +#ifndef _RTL8192_EXT_PATCH_ + setKey( dev, + key_idx, + key_idx, + KEY_TYPE_WEP104, + zero_addr[key_idx], + 0, + hwkey); + set_swcam( dev, + key_idx, + key_idx, + KEY_TYPE_WEP104, + zero_addr[key_idx], + 0, + hwkey, + 0); +#endif + } + else printk("wrong type in WEP, not WEP40 and WEP104\n"); +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->state == RTLLIB_LINKED){ + if(ieee->iw_mode == IW_MODE_ADHOC) + { + + setKey( dev, + key_idx, + key_idx, + ieee->pairwise_key_type, + zero_addr[key_idx], + 0, + hwkey); + set_swcam( dev, + key_idx, + key_idx, + ieee->pairwise_key_type, + zero_addr[key_idx], + 0, + hwkey, + 0); + } + else{ + setKey( dev, + 31, + key_idx, + ieee->pairwise_key_type, + ieee->ap_mac_addr, + 0, + hwkey); + set_swcam( dev, + 31, + key_idx, + ieee->pairwise_key_type, + ieee->ap_mac_addr, + 0, + hwkey, + 0); + } + } +#endif + } + +#if 0 + if(wrqu->encoding.length==0 && (wrqu->encoding.flags >>8) == 0x8 ){ + printk("===>1\n"); + EnableHWSecurityConfig8192(dev); + key_idx = (wrqu->encoding.flags & 0xf)-1 ; + write_cam(dev, (4*6), 0xffff0000|read_cam(dev, key_idx*6) ); + write_cam(dev, (4*6)+1, 0xffffffff); + write_cam(dev, (4*6)+2, read_cam(dev, (key_idx*6)+2) ); + write_cam(dev, (4*6)+3, read_cam(dev, (key_idx*6)+3) ); + write_cam(dev, (4*6)+4, read_cam(dev, (key_idx*6)+4) ); + write_cam(dev, (4*6)+5, read_cam(dev, (key_idx*6)+5) ); + } +#endif +#ifdef _RTL8192_EXT_PATCH_ + priv->rtllib->wx_set_enc = 0; + printk("===================>%s():set ieee->wx_set_enc 0\n",__FUNCTION__); +end_hw_sec: +#else +end_hw_sec: + priv->rtllib->wx_set_enc = 0; +#endif + return ret; +} + + +static int r8192_wx_set_scan_type(struct net_device *dev, struct iw_request_info *aa, union + iwreq_data *wrqu, char *p){ + + struct r8192_priv *priv = rtllib_priv(dev); + int *parms=(int*)p; + int mode=parms[0]; + + if(priv->bHwRadioOff == true) + return 0; + + priv->rtllib->active_scan = mode; + + return 1; +} + + + +#define R8192_MAX_RETRY 255 +static int r8192_wx_set_retry(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int err = 0; + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + + if (wrqu->retry.flags & IW_RETRY_LIFETIME || + wrqu->retry.disabled){ + err = -EINVAL; + goto exit; + } + if (!(wrqu->retry.flags & IW_RETRY_LIMIT)){ + err = -EINVAL; + goto exit; + } + + if(wrqu->retry.value > R8192_MAX_RETRY){ + err= -EINVAL; + goto exit; + } + if (wrqu->retry.flags & IW_RETRY_MAX) { + priv->retry_rts = wrqu->retry.value; + DMESG("Setting retry for RTS/CTS data to %d", wrqu->retry.value); + + }else { + priv->retry_data = wrqu->retry.value; + DMESG("Setting retry for non RTS/CTS data to %d", wrqu->retry.value); + } + + + rtl8192_commit(dev); + /* + if(priv->up){ + rtl8180_halt_adapter(dev); + rtl8180_rx_enable(dev); + rtl8180_tx_enable(dev); + + } + */ +exit: + up(&priv->wx_sem); + + return err; +} + +static int r8192_wx_get_retry(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + + wrqu->retry.disabled = 0; /* can't be disabled */ + + if ((wrqu->retry.flags & IW_RETRY_TYPE) == + IW_RETRY_LIFETIME) + return -EINVAL; + + if (wrqu->retry.flags & IW_RETRY_MAX) { + wrqu->retry.flags = IW_RETRY_LIMIT & IW_RETRY_MAX; + wrqu->retry.value = priv->retry_rts; + } else { + wrqu->retry.flags = IW_RETRY_LIMIT & IW_RETRY_MIN; + wrqu->retry.value = priv->retry_data; + } + + + return 0; +} + +static int r8192_wx_get_sens(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + if(priv->rf_set_sens == NULL) + return -1; /* we have not this support for this radio */ + wrqu->sens.value = priv->sens; + return 0; +} + + +static int r8192_wx_set_sens(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + + short err = 0; + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + if(priv->rf_set_sens == NULL) { + err= -1; /* we have not this support for this radio */ + goto exit; + } + if(priv->rf_set_sens(dev, wrqu->sens.value) == 0) + priv->sens = wrqu->sens.value; + else + err= -EINVAL; + +exit: + up(&priv->wx_sem); + + return err; +} + +#if (WIRELESS_EXT >= 18) +#if 0 +static int r8192_wx_get_enc_ext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret = 0; +#ifdef _RTL8192_EXT_PATCH_ + ret = rtllib_wx_get_encode_ext(priv->rtllib, info, wrqu, extra,0); +#else + ret = rtllib_wx_get_encode_ext(priv->rtllib, info, wrqu, extra); +#endif + return ret; +} +#endif + +#ifdef _RTL8192_EXT_PATCH_ +static int meshdev_set_key_for_linked_peers(struct net_device *dev, u8 KeyIndex,u16 KeyType, u32 *KeyContent ); +static int r8192_set_hw_enc(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra, u8 is_mesh) +{ + int ret=0; + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + u32 key[4] = {0}; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + struct iw_point *encoding = &wrqu->encoding; + u8 idx = 0, alg = 0, group = 0; + u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + u8 zero[6] = {0}; + priv->rtllib->wx_set_enc = 1; +#ifdef ENABLE_IPS + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); +#endif +#if 0 + static u8 CAM_CONST_ADDR[4][6] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}}; +#endif + if ((encoding->flags & IW_ENCODE_DISABLED) || + ext->alg == IW_ENCODE_ALG_NONE) + { + if(is_mesh) + ieee->mesh_pairwise_key_type = ieee->mesh_pairwise_key_type = KEY_TYPE_NA; + else + ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA; + CamResetAllEntry(dev); + if(is_mesh) + CamRestoreEachIFEntry(dev,0); + else + CamRestoreEachIFEntry(dev,1); + reset_IFswcam(dev,is_mesh); + goto end_hw_sec; + } + alg = (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; + idx = encoding->flags & IW_ENCODE_INDEX; + if (idx) + idx --; + group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY; + printk("====>group is %x\n",group); + if ((!group) || (IW_MODE_ADHOC == ieee->iw_mode) || (alg == KEY_TYPE_WEP40) || (IW_MODE_MESH == ieee->iw_mode)) + { + if ((ext->key_len == 13) && (alg == KEY_TYPE_WEP40) ) + alg = KEY_TYPE_WEP104; + if(is_mesh) + ieee->mesh_pairwise_key_type = alg; + else + ieee->pairwise_key_type = alg; + EnableHWSecurityConfig8192(dev); + } + memcpy((u8*)key, ext->key, 16); + if ((alg & KEY_TYPE_WEP40) && (ieee->auth_mode !=2) ) + { + printk("=====>set WEP key\n"); + if (ext->key_len == 13){ + if(is_mesh) + ieee->mesh_pairwise_key_type = alg = KEY_TYPE_WEP104; + else + ieee->pairwise_key_type = alg = KEY_TYPE_WEP104; + } + if(ieee->iw_mode == IW_MODE_ADHOC){ + set_swcam( dev, + idx, + idx, + alg, + zero, + 0, + key, + is_mesh); + setKey( dev, + idx, + idx, + alg, + zero, + 0, + key); + } + + if(!is_mesh){ + if(ieee->state == RTLLIB_LINKED){ + setKey( dev, + 31, + idx, + ieee->pairwise_key_type, + ieee->ap_mac_addr, + 0, + key); + set_swcam( dev, + 31, + idx, + ieee->pairwise_key_type, + ieee->ap_mac_addr, + 0, + key, + 0); + } + } + } + else if (group) + { + printk("set group key\n"); + if(is_mesh) + ieee->mesh_group_key_type = alg; + else + ieee->group_key_type = alg; + if(ieee->iw_mode == IW_MODE_ADHOC){ + set_swcam( dev, + idx, + idx, + alg, + broadcast_addr, + 0, + key, + is_mesh); + setKey( dev, + idx, + idx, + alg, + broadcast_addr, + 0, + key); + } + + if(is_mesh) + meshdev_set_key_for_linked_peers(dev, + idx, + alg, + key); + } + else + { + printk("=============>set pairwise key\n"); +#ifdef RTL8192E + if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){ + write_nic_byte(dev, 0x173, 1); + } +#endif + set_swcam( dev, + 31, + idx, + alg, + (u8*)ieee->ap_mac_addr, + 0, + key, + is_mesh); + setKey( dev, + 31, + idx, + alg, + (u8*)ieee->ap_mac_addr, + 0, + key); + } + +end_hw_sec: + priv->rtllib->wx_set_enc = 0; + return ret; +} + +int rtl8192_set_key_for_AP(struct rtllib_device *ieee) +{ + struct rtllib_crypt_data **crypt; + int key_len=0; + char key[32]; + u16 keytype = IW_ENCODE_ALG_NONE; +#ifdef _RTL8192_EXT_PATCH_ + crypt = &ieee->sta_crypt[ieee->tx_keyidx]; +#else + crypt = &ieee->crypt[ieee->tx_keyidx]; +#endif + if (*crypt == NULL || (*crypt)->ops == NULL) + { + printk("%s():no encrypt now\n",__FUNCTION__); + return 0; + } + if (!((*crypt)->ops->set_key && (*crypt)->ops->get_key)) + return -1; + + key_len = (*crypt)->ops->get_key(key, 32, NULL, (*crypt)->priv); + if (strcmp((*crypt)->ops->name, "WEP") == 0 ) + { + if(key_len == 5) + keytype = KEY_TYPE_WEP40; + else + keytype = KEY_TYPE_WEP104; + } + else if (strcmp((*crypt)->ops->name, "TKIP") == 0) + return 0; + else if (strcmp((*crypt)->ops->name, "CCMP") == 0) + return 0; + + set_swcam( ieee->dev, + 31, + ieee->tx_keyidx, + keytype, + ieee->ap_mac_addr, + 0, + (u32 *)key , + 0); + setKey( ieee->dev, + 31, + ieee->tx_keyidx, + keytype, + ieee->ap_mac_addr, + 0, + (u32 *)key); + + + return 0; +} + +static int r8192_wx_set_enc_ext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret=0; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + if(priv->bHwRadioOff == true) + return 0; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra, 0); + + ret |= r8192_set_hw_enc(dev,info,wrqu,extra, 0); + SEM_UP_PRIV_WX(&priv->wx_sem); +#endif + + return ret; +} +/* + * set key for mesh, not a wireless extension handler. + * place it here because of porting from r8192_wx_set_enc_ext(). + */ +int r8192_mesh_set_enc_ext(struct net_device *dev, + struct iw_point *encoding, struct iw_encode_ext *ext, u8 *addr) +{ + int ret=0; + int i=0; + u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + u8 entry_idx = 0; + down(&priv->wx_sem); + if(memcmp(addr,broadcast_addr,6)) + { + if ((i=rtllib_find_MP(ieee, addr, 0)) < 0) + { + i = rtllib_find_MP(ieee, addr, 1); + if (i<0) + return -1; + } + } + ret = rtllib_mesh_set_encode_ext(ieee, encoding, ext, i); + if ((-EINVAL == ret) || (-ENOMEM == ret)) { + goto end_hw_sec; + } + { +#if 0 + u8 zero[6] = {0}; +#endif + u32 key[4] = {0}; + u8 idx = 0, alg = 0, group = 0; + if ((encoding->flags & IW_ENCODE_DISABLED) || + ext->alg == IW_ENCODE_ALG_NONE) + { + CamResetAllEntry(dev); + CamRestoreEachIFEntry(dev,0); + reset_IFswcam(dev,1); + goto end_hw_sec; + } + alg = (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; + idx = encoding->flags & IW_ENCODE_INDEX; + if (idx) + idx --; + group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY; + + if (!group) + { + ieee->mesh_pairwise_key_type = alg; + EnableHWSecurityConfig8192(dev); + } + + memcpy((u8*)key, ext->key, 16); + + if(group) + { + ieee->mesh_group_key_type = alg; +#if 0 + setKey( dev, + idx, + idx, + alg, + broadcast_addr, + 0, + key); +#endif + } + else + { +#if 0 + if ((ieee->mesh_pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){ + write_nic_byte(dev, 0x173, 1); + } +#endif + entry_idx = rtl8192_get_free_hwsec_cam_entry(ieee,addr); +#if 0 + printk("%s(): Can't find free hw security cam entry\n",__FUNCTION__); + ret = -1; +#else + if (entry_idx >= TOTAL_CAM_ENTRY-1) { + printk("%s(): Can't find free hw security cam entry\n",__FUNCTION__); + ret = -1; + } else { + set_swcam( dev, + entry_idx, + idx, + alg, + (u8*)addr, + 0, + key, + 1); + setKey( dev, + entry_idx, + idx, + alg, + (u8*)addr, + 0, + key); + ret = 0; + } +#endif + } + + + } + +end_hw_sec: + up(&priv->wx_sem); +#endif + return ret; + +} +#else +static int r8192_wx_set_enc_ext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret=0; + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + + priv->rtllib->wx_set_enc = 1; +#ifdef ENABLE_IPS + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); +#endif + + ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra); + + { + u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + u8 zero[6] = {0}; + u32 key[4] = {0}; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + struct iw_point *encoding = &wrqu->encoding; +#if 0 + static u8 CAM_CONST_ADDR[4][6] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}}; +#endif + u8 idx = 0, alg = 0, group = 0; + if ((encoding->flags & IW_ENCODE_DISABLED) || + ext->alg == IW_ENCODE_ALG_NONE) + { + ieee->pairwise_key_type = ieee->group_key_type = KEY_TYPE_NA; + CamResetAllEntry(dev); + memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + goto end_hw_sec; + } + alg = (ext->alg == IW_ENCODE_ALG_CCMP)?KEY_TYPE_CCMP:ext->alg; + idx = encoding->flags & IW_ENCODE_INDEX; + if (idx) + idx --; + group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY; + + if ((!group) || (IW_MODE_ADHOC == ieee->iw_mode) || (alg == KEY_TYPE_WEP40)) + { + if ((ext->key_len == 13) && (alg == KEY_TYPE_WEP40) ) + alg = KEY_TYPE_WEP104; + ieee->pairwise_key_type = alg; + EnableHWSecurityConfig8192(dev); + } + memcpy((u8*)key, ext->key, 16); + + if ((alg & KEY_TYPE_WEP40) && (ieee->auth_mode !=2) ) + { + if (ext->key_len == 13) + ieee->pairwise_key_type = alg = KEY_TYPE_WEP104; + setKey( dev, + idx, + idx, + alg, + zero, + 0, + key); + set_swcam( dev, + idx, + idx, + alg, + zero, + 0, + key, + 0); + } + else if (group) + { + ieee->group_key_type = alg; + setKey( dev, + idx, + idx, + alg, + broadcast_addr, + 0, + key); + set_swcam( dev, + idx, + idx, + alg, + broadcast_addr, + 0, + key, + 0); + } + else + { + #ifdef RTL8192E + if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){ + write_nic_byte(dev, 0x173, 1); + } + #endif + setKey( dev, + 4, + idx, + alg, + (u8*)ieee->ap_mac_addr, + 0, + key); + set_swcam( dev, + 4, + idx, + alg, + (u8*)ieee->ap_mac_addr, + 0, + key, + 0); + } + + + } + +end_hw_sec: + priv->rtllib->wx_set_enc = 0; + up(&priv->wx_sem); +#endif + return ret; + +} +#endif +static int r8192_wx_set_auth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *data, char *extra) +{ + int ret=0; + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + ret = rtllib_wx_set_auth(priv->rtllib, info, &(data->param), extra); + up(&priv->wx_sem); +#endif + return ret; +} + +static int r8192_wx_set_mlme(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + int ret=0; + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + ret = rtllib_wx_set_mlme(priv->rtllib, info, wrqu, extra); + up(&priv->wx_sem); +#endif + return ret; +} +#endif + +static int r8192_wx_set_gen_ie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *data, char *extra) +{ + int ret = 0; + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->bHwRadioOff == true) + return 0; + + down(&priv->wx_sem); + ret = rtllib_wx_set_gen_ie(priv->rtllib, extra, data->data.length); + up(&priv->wx_sem); +#endif + return ret; +} + +static int r8192_wx_get_gen_ie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *data, char *extra) +{ + int ret = 0; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + if (ieee->wpa_ie_len == 0 || ieee->wpa_ie == NULL) { + data->data.length = 0; + return 0; + } + + if (data->data.length < ieee->wpa_ie_len) { + return -E2BIG; + } + + data->data.length = ieee->wpa_ie_len; + memcpy(extra, ieee->wpa_ie, ieee->wpa_ie_len); +#endif + return ret; +} + +#ifdef _RTL8192_EXT_PATCH_ +/* + Output: + (case 1) Mesh: Enable. MESHID=[%s] (max length of %s is 32 bytes). + (case 2) Mesh: Disable. +*/ +static int r8192_wx_get_meshinfo(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_meshinfo ) + return 0; + return priv->mshobj->ext_patch_r819x_wx_get_meshinfo(dev, info, wrqu, extra); +} + + +static int r8192_wx_enable_mesh(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + RT_RF_POWER_STATE rtState; + int ret = 0; + rtState = priv->rtllib->eRFPowerState; + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_enable_mesh ) + return 0; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + if(priv->mshobj->ext_patch_r819x_wx_enable_mesh(dev)) + { + union iwreq_data tmprqu; +#ifdef ENABLE_IPS + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + SEM_UP_PRIV_WX(&priv->wx_sem); + return -1; + } + else{ + printk("=========>%s(): IPSLeave\n",__FUNCTION__); + IPSLeave(dev); + } + } + } +#endif + if(ieee->only_mesh == 0) + { + tmprqu.mode = ieee->iw_mode; + ieee->iw_mode = 0; + ret = rtllib_wx_set_mode(ieee, info, &tmprqu, extra); + } + } + + SEM_UP_PRIV_WX(&priv->wx_sem); + + return ret; + +} + +static int r8192_wx_disable_mesh(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + + int ret = 0; + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_disable_mesh ) + return 0; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + if(priv->mshobj->ext_patch_r819x_wx_disable_mesh(dev)) + { + union iwreq_data tmprqu; + tmprqu.mode = ieee->iw_mode; + ieee->iw_mode = 999; + ret = rtllib_wx_set_mode(ieee, info, &tmprqu, extra); + } + + SEM_UP_PRIV_WX(&priv->wx_sem); + + return ret; +} + + +int r8192_wx_set_channel(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ch = *extra; + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + + if (!priv->mshobj || (ieee->iw_mode != IW_MODE_MESH) || !priv->mshobj->ext_patch_r819x_wx_set_channel || !ieee->only_mesh) + return 0; + + if ( ch < 0 ) + { + rtllib_start_scan(ieee); + ieee->meshScanMode =2; + } + else + { + ieee->meshScanMode =0; + if(priv->mshobj->ext_patch_r819x_wx_set_channel) + { + priv->mshobj->ext_patch_r819x_wx_set_channel(ieee, ch); + priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,ch); + } + queue_work_rsl(ieee->wq, &ieee->ext_stop_scan_wq); + ieee->set_chan(ieee->dev, ch); +printk("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!set current mesh network channel %d\n", ch); + ieee->current_mesh_network.channel = ch; + if(ieee->only_mesh) + ieee->current_network.channel = ch; + + ieee->current_network.channel = ieee->current_mesh_network.channel; + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + if(rtllib_act_scanning(ieee,true) == true) + rtllib_stop_scan_syncro(ieee); + } + + return 0; +} + +static int r8192_wx_set_meshID(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_meshID ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_set_meshID(dev, wrqu->data.pointer); +} + + +/* reserved for future +static int r8192_wx_add_mac_deny(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny(dev, info, wrqu, extra); +} + +static int r8192_wx_del_mac_deny(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny(dev, info, wrqu, extra); +} +*/ +/* reserved for future +static int r8192_wx_get_mac_deny(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_mac_deny ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_get_mac_deny(dev, info, wrqu, extra); +} +static int r8192_wx_join_mesh(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret=0; + char ch; + if(priv->rtllib->iw_mode == IW_MODE_MESH) { + printk("join mesh %s\n",extra); + if (wrqu->essid.length > IW_ESSID_MAX_SIZE){ + ret= -E2BIG; + goto out; + } + if((wrqu->essid.length == 1) && (wrqu->essid.flags == 1)){ + ret = 0; + goto out; + } + if (wrqu->essid.flags && wrqu->essid.length) { + if(priv->mshobj->ext_patch_r819x_wx_get_selected_mesh_channel(dev, extra, &ch)) + { + priv->mshobj->ext_patch_r819x_wx_set_meshID(dev, extra); + priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,ch); + r8192_wx_set_channel(dev, NULL, NULL, &ch); + } + else + printk("invalid mesh #\n"); + } + } +out: + return ret; +} +*/ + +static int r8192_wx_get_mesh_list(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_mesh_list ) + return 0; + return priv->mshobj->ext_patch_r819x_wx_get_mesh_list(dev, info, wrqu, extra); +} + +static int r8192_wx_mesh_scan(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_mesh_scan ) + return 0; + return priv->mshobj->ext_patch_r819x_wx_mesh_scan(dev, info, wrqu, extra); +} + +static int r8192_wx_set_meshmode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + + printk("%s(): set mesh mode ! extra is %d\n",__FUNCTION__, *extra); + if((*extra != WIRELESS_MODE_A) && (*extra != WIRELESS_MODE_B) && + (*extra != WIRELESS_MODE_G) && (*extra != WIRELESS_MODE_AUTO) && + (*extra != WIRELESS_MODE_N_24G) && (*extra != WIRELESS_MODE_N_5G)) + { + printk("ERR!! you should input 1 | 2 | 4 | 8 | 16 | 32\n"); + SEM_UP_PRIV_WX(&priv->wx_sem); + return -1; + } + if(priv->rtllib->state == RTLLIB_LINKED) + { + if((priv->rtllib->mode != WIRELESS_MODE_N_5G) && (priv->rtllib->mode != WIRELESS_MODE_N_24G)){ + printk("===>wlan0 is linked,and ieee->mode is not N mode ,do not need to set mode,return\n"); + SEM_UP_PRIV_WX(&priv->wx_sem); + return 0; + } + } + priv->rtllib->mode = *extra; + if(priv->ResetProgress == RESET_TYPE_NORESET) + rtl8192_SetWirelessMode(dev, priv->rtllib->mode); + HTUseDefaultSetting(priv->rtllib); + SEM_UP_PRIV_WX(&priv->wx_sem); + return 0; + +} + +static int r8192_wx_set_meshBW(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + + printk("%s(): set mesh BW ! extra is %d\n",__FUNCTION__, *extra); + priv->rtllib->pHTInfo->bRegBW40MHz = *extra; + SEM_UP_PRIV_WX(&priv->wx_sem); + return 0; +} +static int r8192_wx_set_mesh_security(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + down(&priv->wx_sem); + + printk("%s(): set mesh security! extra is %d\n",__FUNCTION__, *extra); + ieee->mesh_security_setting = *extra; + + if (0 == ieee->mesh_security_setting) + { + ieee->mesh_pairwise_key_type = ieee->mesh_group_key_type = KEY_TYPE_NA; + CamResetAllEntry(dev); + CamRestoreEachIFEntry(dev,0); + reset_IFswcam(dev,1); + } + else + { + ieee->mesh_pairwise_key_type = KEY_TYPE_CCMP; + ieee->mesh_group_key_type = KEY_TYPE_CCMP; + } + up(&priv->wx_sem); + return 0; + +} + +static int r8192_wx_set_mkdd_id(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + printk("===>%s()\n",__FUNCTION__); + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_mkdd_id) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_set_mkdd_id(dev, wrqu->data.pointer); +} + +static int r8192_wx_set_mesh_key(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + printk("===>%s()\n",__FUNCTION__); + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_mesh_key) + return 0; + return priv->mshobj->ext_patch_r819x_wx_set_mesh_key(dev, wrqu->data.pointer); +} + +static int r8192_wx_set_mesh_sec_type(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + printk("%s(): set mesh security type! extra is %d\n",__FUNCTION__, *extra); + if (ieee->mesh_sec_type == 1 && *extra != 1 && ieee->mesh_security_setting == 3) { + rtl8192_abbr_handshk_disable_key(ieee); + + if(priv->mshobj->ext_patch_r819x_wx_release_sae_info) + priv->mshobj->ext_patch_r819x_wx_release_sae_info(ieee); + } + down(&priv->wx_sem); + + ieee->mesh_sec_type = *extra; + + if(ieee->mesh_sec_type == 0) + ieee->mesh_pairwise_key_type = ieee->mesh_group_key_type = KEY_TYPE_NA; + + up(&priv->wx_sem); + return 0; +} + +#endif + +#define OID_RT_INTEL_PROMISCUOUS_MODE 0xFF0101F6 + +static int r8192_wx_set_PromiscuousMode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + u32 *info_buf = (u32*)(wrqu->data.pointer); + + u32 oid = info_buf[0]; + u32 bPromiscuousOn = info_buf[1]; + u32 bFilterSourceStationFrame = info_buf[2]; + + if (OID_RT_INTEL_PROMISCUOUS_MODE == oid) + { + ieee->IntelPromiscuousModeInfo.bPromiscuousOn = + (bPromiscuousOn)? (true) : (false); + ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame = + (bFilterSourceStationFrame)? (true) : (false); + + (bPromiscuousOn) ? (rtllib_EnableIntelPromiscuousMode(dev, false)) : + (rtllib_DisableIntelPromiscuousMode(dev, false)); + + printk("=======>%s(), on = %d, filter src sta = %d\n", __FUNCTION__, + bPromiscuousOn, bFilterSourceStationFrame); + } else { + return -1; + } + + return 0; +} + + +static int r8192_wx_get_PromiscuousMode(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + down(&priv->wx_sem); + + snprintf(extra, 45, "PromiscuousMode:%d, FilterSrcSTAFrame:%d",\ + ieee->IntelPromiscuousModeInfo.bPromiscuousOn,\ + ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame); + wrqu->data.length = strlen(extra) + 1; + + up(&priv->wx_sem); + + return 0; +} + + +#define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT] +static iw_handler r8192_wx_handlers[] = +{ + IW_IOCTL(SIOCGIWNAME) = r8192_wx_get_name, + IW_IOCTL(SIOCSIWFREQ) = r8192_wx_set_freq, + IW_IOCTL(SIOCGIWFREQ) = r8192_wx_get_freq, + IW_IOCTL(SIOCSIWMODE) = r8192_wx_set_mode, + IW_IOCTL(SIOCGIWMODE) = r8192_wx_get_mode, + IW_IOCTL(SIOCSIWSENS) = r8192_wx_set_sens, + IW_IOCTL(SIOCGIWSENS) = r8192_wx_get_sens, + IW_IOCTL(SIOCGIWRANGE) = rtl8192_wx_get_range, + IW_IOCTL(SIOCSIWAP) = r8192_wx_set_wap, + IW_IOCTL(SIOCGIWAP) = r8192_wx_get_wap, + IW_IOCTL(SIOCSIWSCAN) = r8192_wx_set_scan, + IW_IOCTL(SIOCGIWSCAN) = r8192_wx_get_scan, + IW_IOCTL(SIOCSIWESSID) = r8192_wx_set_essid, + IW_IOCTL(SIOCGIWESSID) = r8192_wx_get_essid, + IW_IOCTL(SIOCSIWNICKN) = r8192_wx_set_nick, + IW_IOCTL(SIOCGIWNICKN) = r8192_wx_get_nick, + IW_IOCTL(SIOCSIWRATE) = r8192_wx_set_rate, + IW_IOCTL(SIOCGIWRATE) = r8192_wx_get_rate, + IW_IOCTL(SIOCSIWRTS) = r8192_wx_set_rts, + IW_IOCTL(SIOCGIWRTS) = r8192_wx_get_rts, + IW_IOCTL(SIOCSIWFRAG) = r8192_wx_set_frag, + IW_IOCTL(SIOCGIWFRAG) = r8192_wx_get_frag, + IW_IOCTL(SIOCSIWRETRY) = r8192_wx_set_retry, + IW_IOCTL(SIOCGIWRETRY) = r8192_wx_get_retry, + IW_IOCTL(SIOCSIWENCODE) = r8192_wx_set_enc, + IW_IOCTL(SIOCGIWENCODE) = r8192_wx_get_enc, + IW_IOCTL(SIOCSIWPOWER) = r8192_wx_set_power, + IW_IOCTL(SIOCGIWPOWER) = r8192_wx_get_power, +#if (WIRELESS_EXT >= 18) + IW_IOCTL(SIOCSIWGENIE) = r8192_wx_set_gen_ie, + IW_IOCTL(SIOCGIWGENIE) = r8192_wx_get_gen_ie, + IW_IOCTL(SIOCSIWMLME) = r8192_wx_set_mlme, + IW_IOCTL(SIOCSIWAUTH) = r8192_wx_set_auth, + IW_IOCTL(SIOCSIWENCODEEXT) = r8192_wx_set_enc_ext, +#endif +}; + +/* + * the following rule need to be follwing, + * Odd : get (world access), + * even : set (root access) + * */ +static const struct iw_priv_args r8192_private_args[] = { + { + SIOCIWFIRSTPRIV + 0x0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_debugflag" + }, + { + SIOCIWFIRSTPRIV + 0x1, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "activescan" + }, + { + SIOCIWFIRSTPRIV + 0x2, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rawtx" + } + , + { + SIOCIWFIRSTPRIV + 0x3, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "forcereset" + } + , + { + SIOCIWFIRSTPRIV + 0x4, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "force_mic_error" + } + , + { + SIOCIWFIRSTPRIV + 0x5, + IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_INT|IW_PRIV_SIZE_FIXED|1, + "firm_ver" + } + , + { + SIOCIWFIRSTPRIV + 0x6, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, + "set_power" + } +#ifdef _RTL8192_EXT_PATCH_ + , + { + SIOCIWFIRSTPRIV + 0x7, + IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_CHAR|512, + "print_reg" + } + , + { + SIOCIWFIRSTPRIV + 0x8, + IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_CHAR|64, + "resume_firm" + } +#endif + , + { + SIOCIWFIRSTPRIV + 0x9, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, + "radio" + } + , + { + SIOCIWFIRSTPRIV + 0xa, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, + "lps_interv" + } + , + { + SIOCIWFIRSTPRIV + 0xb, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED|1, IW_PRIV_TYPE_NONE, + "lps_force" + } + , + { + SIOCIWFIRSTPRIV + 0xc, + 0, IW_PRIV_TYPE_CHAR|2047, "adhoc_peer_list" + } +#ifdef _RTL8192_EXT_PATCH_ + , + { + SIOCIWFIRSTPRIV + 0xd, + IW_PRIV_TYPE_NONE, IW_PRIV_TYPE_CHAR|64, + "driverVer" + } +#endif +#ifdef CONFIG_MP + , + { + SIOCIWFIRSTPRIV + 0xe, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetChan" + } + , + { + SIOCIWFIRSTPRIV + 0xf, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetRate" + } + , + { + SIOCIWFIRSTPRIV + 0x10, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetTxPower" + } + , + { + SIOCIWFIRSTPRIV + 0x11, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "SetBW" + } + , + { + SIOCIWFIRSTPRIV + 0x12, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "TxStart" + } + , + { + SIOCIWFIRSTPRIV + 0x13, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,0, "SetSingleCarrier" + } + , + { + SIOCIWFIRSTPRIV + 0x14, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "WriteRF" + } + , + { + SIOCIWFIRSTPRIV + 0x15, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "WriteMAC" + } +#endif + , + { + SIOCIWFIRSTPRIV + 0x16, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "setpromisc" + } + , + { + SIOCIWFIRSTPRIV + 0x17, + 0,IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 45, "getpromisc" + } + +}; + +static iw_handler r8192_private_handler[] = { + (iw_handler)r8192_wx_set_debugflag, /*SIOCIWSECONDPRIV*/ + (iw_handler)r8192_wx_set_scan_type, + (iw_handler)r8192_wx_set_rawtx, + (iw_handler)r8192_wx_force_reset, + (iw_handler)r8192_wx_force_mic_error, + (iw_handler)r8191se_wx_get_firm_version, + (iw_handler)r8192_wx_adapter_power_status, +#ifdef _RTL8192_EXT_PATCH_ + (iw_handler)r8192_wx_print_reg, + (iw_handler)r8192_wx_resume_firm, +#else + (iw_handler)NULL, + (iw_handler)NULL, +#endif + (iw_handler)r8192se_wx_set_radio, + (iw_handler)r8192se_wx_set_lps_awake_interval, + (iw_handler)r8192se_wx_set_force_lps, + (iw_handler)r8192_wx_get_adhoc_peers, +#ifdef _RTL8192_EXT_PATCH_ + (iw_handler)r8192_wx_get_drv_version, +#else + (iw_handler)NULL, +#endif +#ifdef CONFIG_MP + (iw_handler)r8192_wx_mp_set_chan, + (iw_handler)r8192_wx_mp_set_txrate, + (iw_handler)r8192_wx_mp_set_txpower, + (iw_handler)r8192_wx_mp_set_bw, + (iw_handler)r8192_wx_mp_set_txstart, + (iw_handler)r8192_wx_mp_set_singlecarrier, + (iw_handler)r8192_wx_mp_write_rf, + (iw_handler)r8192_wx_mp_write_mac, +#else + (iw_handler)NULL, + (iw_handler)NULL, + (iw_handler)NULL, + (iw_handler)NULL, + (iw_handler)NULL, + (iw_handler)NULL, + (iw_handler)NULL, + (iw_handler)NULL, +#endif + (iw_handler)r8192_wx_set_PromiscuousMode, + (iw_handler)r8192_wx_get_PromiscuousMode, +}; + +struct iw_statistics *r8192_get_wireless_stats(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + struct iw_statistics* wstats = &priv->wstats; + int tmp_level = 0; + int tmp_qual = 0; + int tmp_noise = 0; + if(ieee->state < RTLLIB_LINKED) + { + wstats->qual.qual = 10; + wstats->qual.level = 0; + wstats->qual.noise = -100; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) + wstats->qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM; +#else + wstats->qual.updated = 0x0f; +#endif + return wstats; + } + + tmp_level = (&ieee->current_network)->stats.rssi; + tmp_qual = (&ieee->current_network)->stats.signal; + tmp_noise = (&ieee->current_network)->stats.noise; + + wstats->qual.level = tmp_level; + wstats->qual.qual = tmp_qual; + wstats->qual.noise = tmp_noise; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)) + wstats->qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM; +#else + wstats->qual.updated = 0x0f; +#endif + return wstats; +} + +#if defined RTL8192SE || defined RTL8192CE +u8 SS_Rate_Map_G[6][2] = {{40, MGN_54M}, {30, MGN_48M}, {20, MGN_36M}, + {12, MGN_24M}, {7, MGN_18M}, {0, MGN_12M}}; +u8 MSI_SS_Rate_Map_G[6][2] = {{40, MGN_54M}, {30, MGN_54M}, {20, MGN_54M}, + {12, MGN_48M}, {7, MGN_36M}, {0, MGN_24M}}; +u8 SS_Rate_Map_B[2][2] = {{7, MGN_11M}, {0, MGN_5_5M}}; +u8 SS_Rate_Map_N_MCS7[7][2] = {{40, MGN_MCS7}, {30, MGN_MCS5}, {25, MGN_MCS4}, + {23, MGN_MCS3}, {19, MGN_MCS2}, {8, MGN_MCS1}, {0, MGN_MCS0}}; +u8 SS_Rate_Map_N_MCS15[7][2] = {{40, MGN_MCS15}, {35, MGN_MCS14}, {31, MGN_MCS12}, + {28, MGN_MCS7}, {25, MGN_MCS5}, {23, MGN_MCS3}, {20, MGN_MCS0}}; +#define TxRateTypeNormal 0 +#define TxRateTypeCurrent 1 +#define TxRateTypeStartRate 2 + +u8 rtl8192_decorate_txrate_by_singalstrength(u32 SignalStrength, u8 *SS_Rate_Map, u8 MapSize) +{ + u8 index = 0; + + for (index = 0; index < (MapSize * 2); index += 2) { + if (SignalStrength > SS_Rate_Map[index]) + return SS_Rate_Map[index+1]; + } + + return MGN_1M; +} + +u16 rtl8192_11n_user_show_rates(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + static u8 TimesForReportingFullRxSpeedAfterConnected = 100; + u8 rate = MGN_1M; + u32 Sgstrength; + bool TxorRx = priv->rtllib->bForcedShowRxRate; + + + if (!TxorRx) { + { + return CONVERT_RATE(priv->rtllib, priv->rtllib->softmac_stats.CurrentShowTxate); + } + } + + if(priv->rtllib->bForcedShowRateStill) { + Sgstrength = 100; + } else { + Sgstrength = priv->undecorated_smoothed_pwdb; + } + + if (priv->rtllib->mode == WIRELESS_MODE_A || + priv->rtllib->mode == WIRELESS_MODE_G || + priv->rtllib->mode == (WIRELESS_MODE_G | WIRELESS_MODE_B )) { + if (priv->CustomerID == RT_CID_819x_MSI) { + rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, + (u8*)MSI_SS_Rate_Map_G, sizeof(MSI_SS_Rate_Map_G)/2); + } else { + rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, + (u8*)SS_Rate_Map_G, sizeof(SS_Rate_Map_G)/2); + } + } else if (priv->rtllib->mode == WIRELESS_MODE_B) { + rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, (u8*)SS_Rate_Map_B, + sizeof(SS_Rate_Map_B)/2); + } else if(priv->rtllib->mode == WIRELESS_MODE_N_24G) { + bool bMaxRateMcs15; + bool b1SSSupport = priv->rtllib->b1x1RecvCombine; + u8 rftype = priv->rf_type; + if (((!TxorRx) && (rftype==RF_1T1R || rftype==RF_1T2R)) || + (TxorRx && (rftype==RF_1T1R || (rftype==RF_1T2R && b1SSSupport))) || + (rftype==RF_2T2R && priv->rtllib->HTHighestOperaRate<=MGN_MCS7)) + bMaxRateMcs15 = false; + else + bMaxRateMcs15 = true; + + if((priv->rtllib->state == RTLLIB_LINKED) && !(priv->rtllib->pHTInfo->bCurBW40MHz)) + bMaxRateMcs15 = false; + + if(priv->rtllib->state != RTLLIB_LINKED) + priv->rtllib->SystemQueryDataRateCount = 0; + if (TimesForReportingFullRxSpeedAfterConnected > priv->rtllib->SystemQueryDataRateCount) { + priv->rtllib->SystemQueryDataRateCount++; + if(bMaxRateMcs15) + return 600; + else + return 270; + } + + if (bMaxRateMcs15) + rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, (u8*)SS_Rate_Map_N_MCS15, + sizeof(SS_Rate_Map_N_MCS15)/2); + else + rate = rtl8192_decorate_txrate_by_singalstrength(Sgstrength, (u8*)SS_Rate_Map_N_MCS7, + sizeof(SS_Rate_Map_N_MCS7)/2); + } else if (priv->rtllib->mode == WIRELESS_MODE_N_5G) { + return 580; + } else { + return 2; + } + + if (priv->rtllib->GetHalfNmodeSupportByAPsHandler(dev)) { + if (rate < 0x80) + return rate; + else + return HTHalfMcsToDataRate(priv->rtllib, rate); + } else { + return CONVERT_RATE(priv->rtllib, rate); + } +} +#endif + +struct iw_handler_def r8192_wx_handlers_def={ + .standard = r8192_wx_handlers, + .num_standard = sizeof(r8192_wx_handlers) / sizeof(iw_handler), + .private = r8192_private_handler, + .num_private = sizeof(r8192_private_handler) / sizeof(iw_handler), + .num_private_args = sizeof(r8192_private_args) / sizeof(struct iw_priv_args), +#if WIRELESS_EXT >= 17 + .get_wireless_stats = r8192_get_wireless_stats, +#endif + .private_args = (struct iw_priv_args *)r8192_private_args, +}; + +#ifdef _RTL8192_EXT_PATCH_ +#define OID_802_11_MESH_SECURITY_INFO 0x0651 +#define OID_802_11_MESH_ID 0x0652 +#define OID_802_11_MESH_AUTO_LINK 0x0653 +#define OID_802_11_MESH_LINK_STATUS 0x0654 +#define OID_802_11_MESH_LIST 0x0655 +#define OID_802_11_MESH_ROUTE_LIST 0x0656 +#define OID_802_11_MESH_ADD_LINK 0x0657 +#define OID_802_11_MESH_DEL_LINK 0x0658 +#define OID_802_11_MESH_MAX_TX_RATE 0x0659 +#define OID_802_11_MESH_CHANNEL 0x065A +#define OID_802_11_MESH_HOSTNAME 0x065B +#define OID_802_11_MESH_ONLY_MODE 0x065C + +#define OID_GET_SET_TOGGLE 0x8000 +#define RTL_OID_802_11_MESH_SECURITY_INFO (OID_GET_SET_TOGGLE + OID_802_11_MESH_SECURITY_INFO) +#define RTL_OID_802_11_MESH_ID (OID_GET_SET_TOGGLE + OID_802_11_MESH_ID) +#define RTL_OID_802_11_MESH_AUTO_LINK (OID_GET_SET_TOGGLE + OID_802_11_MESH_AUTO_LINK) +#define RTL_OID_802_11_MESH_ADD_LINK (OID_GET_SET_TOGGLE + OID_802_11_MESH_ADD_LINK) +#define RTL_OID_802_11_MESH_DEL_LINK (OID_GET_SET_TOGGLE + OID_802_11_MESH_DEL_LINK) +#define RTL_OID_802_11_MESH_MAX_TX_RATE (OID_GET_SET_TOGGLE + OID_802_11_MESH_MAX_TX_RATE) +#define RTL_OID_802_11_MESH_CHANNEL (OID_GET_SET_TOGGLE + OID_802_11_MESH_CHANNEL) +#define RTL_OID_802_11_MESH_HOSTNAME (OID_GET_SET_TOGGLE + OID_802_11_MESH_HOSTNAME) +#define RTL_OID_802_11_MESH_ONLY_MODE (OID_GET_SET_TOGGLE + OID_802_11_MESH_ONLY_MODE) + +#define MAX_NEIGHBOR_NUM 64 +typedef struct _MESH_NEIGHBOR_ENTRY +{ + char Rssi; + unsigned char HostName[MAX_HOST_NAME_LENGTH]; + unsigned char MacAddr[ETH_ALEN]; + unsigned char MeshId[MAX_MESH_ID_LEN]; + unsigned char Channel; + unsigned char Status; + unsigned char MeshEncrypType; +} MESH_NEIGHBOR_ENTRY, *PMESH_NEIGHBOR_ENTRY; +typedef struct _MESH_NEIGHBOR_INFO +{ + MESH_NEIGHBOR_ENTRY Entry[MAX_NEIGHBOR_NUM]; + unsigned char num; +} MESH_NEIGHBOR_INFO, *PMESH_NEIGHBOR_INFO; + +static int meshdev_set_key_for_linked_peers(struct net_device *dev, u8 KeyIndex, + u16 KeyType, u32 *KeyContent ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + struct mshclass *mshobj = priv->mshobj; + PMESH_NEIGHBOR_INFO pmesh_neighbor = NULL; + PMESH_NEIGHBOR_ENTRY pneighbor_entry = NULL; + u8 entry_idx = 0; + int i = 0; + int found_idx = MAX_MP-1; + pmesh_neighbor = (PMESH_NEIGHBOR_INFO)kmalloc(sizeof(MESH_NEIGHBOR_INFO), GFP_KERNEL); + if(NULL == pmesh_neighbor) + return -1; + + if(mshobj->ext_patch_r819x_get_peers) + mshobj->ext_patch_r819x_get_peers(dev, (void*)pmesh_neighbor); + + for (i=0; inum; i++) { + pneighbor_entry = (PMESH_NEIGHBOR_ENTRY)&pmesh_neighbor->Entry[i]; + if (mshobj->ext_patch_r819x_insert_linking_crypt_peer_queue) + found_idx = mshobj->ext_patch_r819x_insert_linking_crypt_peer_queue(ieee,pneighbor_entry->MacAddr); + if (found_idx == -1) { + printk("%s(): found_idx is -1 , something is wrong, return\n",__FUNCTION__); + return -1; + } else if (found_idx == (MAX_MP - 1)) { + printk("%s(): found_idx is MAX_MP-1, peer entry is full, return\n",__FUNCTION__); + return -1; + } + if ((((ieee->LinkingPeerBitMap>>found_idx) & (BIT0)) == BIT0) && ((ieee->LinkingPeerSecState[found_idx] == USED) )) { + entry_idx = rtl8192_get_free_hwsec_cam_entry(ieee, pneighbor_entry->MacAddr); +#if 0 + printk("%s: Can not find free hw security cam entry, use software encryption entry(%d)\n", __FUNCTION__,entry_idx); + if (mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info) + mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info(ieee,pneighbor_entry->MacAddr,SW_SEC); + ieee->LinkingPeerSecState[found_idx] = SW_SEC; +#else + if (entry_idx >= TOTAL_CAM_ENTRY-1) { + printk("%s: Can not find free hw security cam entry, use software encryption entry(%d)\n", __FUNCTION__,entry_idx); + if (mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info) + mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info(ieee,pneighbor_entry->MacAddr,SW_SEC); + ieee->LinkingPeerSecState[found_idx] = SW_SEC; + } else { + printk("==========>%s():entry_idx is %d,set HW CAM\n",__FUNCTION__,entry_idx); + set_swcam( dev, + entry_idx, + KeyIndex, + KeyType, + pneighbor_entry->MacAddr, + 0, + KeyContent, + 1); + setKey( dev, + entry_idx, + KeyIndex, + KeyType, + pneighbor_entry->MacAddr, + 0, + KeyContent); + if (mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info) + mshobj->ext_patch_r819x_set_msh_peer_entry_sec_info(ieee,pneighbor_entry->MacAddr,HW_SEC); + ieee->LinkingPeerSecState[found_idx] = HW_SEC; + } +#endif + } + } + if(pmesh_neighbor) + kfree(pmesh_neighbor); + return 0; +} + +int meshdev_set_key_for_peer(struct net_device *dev, + u8 *Addr, + u8 KeyIndex, + u16 KeyType, + u32 *KeyContent ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + u8 entry_idx = 0; + + entry_idx = rtl8192_get_free_hwsec_cam_entry(ieee, Addr); +#if 0 + printk("%s: Can not find free hw security cam entry\n", __FUNCTION__); + return -1; +#else + if (entry_idx >= TOTAL_CAM_ENTRY-1) { + printk("%s: Can not find free hw security cam entry\n", __FUNCTION__); + return -1; + } else { + set_swcam(dev, + entry_idx, + KeyIndex, + KeyType, + Addr, + 0, + KeyContent, + 1); + setKey(dev, + entry_idx, + KeyIndex, + KeyType, + Addr, + 0, + KeyContent); + } + return 0; +#endif +} + +static struct net_device_stats *meshdev_stats(struct net_device *meshdev) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + return &((struct meshdev_priv*)netdev_priv(meshdev))->stats; +#else + return &((struct meshdev_priv*)meshdev->priv)->stats; +#endif +} + +static int meshdev_wx_get_name(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_name(dev, info, wrqu, extra); +} +static int meshdev_wx_get_freq(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + + return rtllib_wx_get_freq(priv->rtllib,info,wrqu,extra,1); +} +static int meshdev_wx_get_mode(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + if(0) + return r8192_wx_get_mode(dev, info, wrqu, extra); + else + return -1; +} +static int meshdev_wx_get_sens(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_sens(dev, info, wrqu, extra); +} +static int meshdev_wx_get_range(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return rtl8192_wx_get_range(dev, info, wrqu, extra); +} +static int meshdev_wx_get_wap(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_wap(dev, info, wrqu, extra); +} +static int meshdev_wx_get_essid(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + struct mshclass *mshobj = priv->mshobj; + int ret = 0; + + if(mshobj->ext_patch_r819x_wx_get_meshid) + ret = mshobj->ext_patch_r819x_wx_get_meshid(dev, info, wrqu, extra); + + return ret; +} +static int meshdev_wx_get_rate(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_rate(dev, info, wrqu, extra); +} +#if 0 +static int meshdev_wx_set_freq(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_freq(dev, info, wrqu, extra); +} +static int meshdev_wx_set_rate(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_rate(dev, info, wrqu, extra); +} +static int meshdev_wx_set_sens(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_sens(dev, info, wrqu, extra); +} +static int meshdev_wx_set_scan(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_scan(dev, info, wrqu, extra); +} +static int meshdev_wx_get_scan(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_scan(dev, info, wrqu, extra); +} +#endif +static int meshdev_wx_set_enc(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = (struct r8192_priv *)ieee->priv; + int ret; + u32 hwkey[4]={0,0,0,0}; + u8 mask=0xff; + u32 key_idx=0; +#if 0 + u8 zero_addr[4][6] ={ {0x00,0x00,0x00,0x00,0x00,0x00}, + {0x00,0x00,0x00,0x00,0x00,0x01}, + {0x00,0x00,0x00,0x00,0x00,0x02}, + {0x00,0x00,0x00,0x00,0x00,0x03} }; +#endif + int i; + + if(!priv->mesh_up) return -ENETDOWN; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + + RT_TRACE(COMP_SEC, "Setting SW wep key"); + ret = rtllib_wx_set_encode(priv->rtllib,info,wrqu,key,1); + + SEM_UP_PRIV_WX(&priv->wx_sem); + + + if(wrqu->encoding.length!=0){ + + for(i=0 ; i<4 ; i++){ + hwkey[i] |= key[4*i+0]&mask; + if(i==1&&(4*i+1)==wrqu->encoding.length) mask=0x00; + if(i==3&&(4*i+1)==wrqu->encoding.length) mask=0x00; + hwkey[i] |= (key[4*i+1]&mask)<<8; + hwkey[i] |= (key[4*i+2]&mask)<<16; + hwkey[i] |= (key[4*i+3]&mask)<<24; + } + + #define CONF_WEP40 0x4 + #define CONF_WEP104 0x14 + + switch(wrqu->encoding.flags & IW_ENCODE_INDEX){ + case 0: key_idx = ieee->mesh_txkeyidx; break; + case 1: key_idx = 0; break; + case 2: key_idx = 1; break; + case 3: key_idx = 2; break; + case 4: key_idx = 3; break; + default: break; + } + + if(wrqu->encoding.length==0x5){ + ieee->mesh_pairwise_key_type = KEY_TYPE_WEP40; + EnableHWSecurityConfig8192(dev); + } + + else if(wrqu->encoding.length==0xd){ + ieee->mesh_pairwise_key_type = KEY_TYPE_WEP104; + EnableHWSecurityConfig8192(dev); + } + else + printk("wrong type in WEP, not WEP40 and WEP104\n"); + + meshdev_set_key_for_linked_peers(dev, + key_idx, + ieee->mesh_pairwise_key_type, + hwkey); + + } + +#if 0 + if(wrqu->encoding.length==0 && (wrqu->encoding.flags >>8) == 0x8 ){ + printk("===>1\n"); + EnableHWSecurityConfig8192(dev); + key_idx = (wrqu->encoding.flags & 0xf)-1 ; + write_cam(dev, (4*6), 0xffff0000|read_cam(dev, key_idx*6) ); + write_cam(dev, (4*6)+1, 0xffffffff); + write_cam(dev, (4*6)+2, read_cam(dev, (key_idx*6)+2) ); + write_cam(dev, (4*6)+3, read_cam(dev, (key_idx*6)+3) ); + write_cam(dev, (4*6)+4, read_cam(dev, (key_idx*6)+4) ); + write_cam(dev, (4*6)+5, read_cam(dev, (key_idx*6)+5) ); + } +#endif + + return ret; +} +static int meshdev_wx_get_enc(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device * dev = ieee->dev; + struct r8192_priv* priv = rtllib_priv(dev); + + if(!priv->mesh_up){ + return -ENETDOWN; + } + return rtllib_wx_get_encode(ieee, info, wrqu, extra,1); +} +#if 0 +static int meshdev_wx_set_frag(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_frag(dev, info, wrqu, extra); +} +static int meshdev_wx_get_frag(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_frag(dev, info, wrqu, extra); +} +static int meshdev_wx_set_retry(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_retry(dev, info, wrqu, extra); +} +static int meshdev_wx_get_retry(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_get_retry(dev, info, wrqu, extra); +} +#endif +static int meshdev_wx_set_mode(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if 0 + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_mode(dev, info, wrqu, extra); +#endif + return 0; +} +static int meshdev_wx_set_wap(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if 0 + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_wap(dev, info, wrqu, extra); +#endif + return 0; +} +static int meshdev_wx_set_mlme(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if 0 + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_mlme(dev, info, wrqu, extra); +#endif + return 0; +} +static int meshdev_wx_set_essid(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if 0 + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_essid(dev, info, wrqu, extra); +#endif + return 0; +} +static int meshdev_wx_set_gen_ie(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if 0 + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_gen_ie(dev, info, wrqu, extra); +#endif + return 0; +} +static int meshdev_wx_set_auth(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if 0 + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + return r8192_wx_set_auth(dev, info, wrqu, extra); +#endif + return 0; +} +static int meshdev_wx_set_enc_ext(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret=0; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = (struct r8192_priv *)ieee->priv; + + printk("============================================================>%s\n", __FUNCTION__); + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra, 1); + + ret |= r8192_set_hw_enc(dev,info,wrqu,extra, 1); + SEM_UP_PRIV_WX(&priv->wx_sem); +#endif + + return ret; +} + +static int dummy(struct net_device *dev, struct iw_request_info *a, + union iwreq_data *wrqu,char *b) +{ + return -1; +} + +int rt_ioctl_siwpmksa(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, + char *extra) +{ + return 0; +} + +static iw_handler meshdev_wx_handlers[] = +{ + NULL, /* SIOCSIWCOMMIT */ + meshdev_wx_get_name, /* SIOCGIWNAME */ + dummy, /* SIOCSIWNWID */ + dummy, /* SIOCGIWNWID */ + NULL, + meshdev_wx_get_freq, /* SIOCGIWFREQ */ + meshdev_wx_set_mode, /* SIOCSIWMODE */ + meshdev_wx_get_mode, /* SIOCGIWMODE */ + NULL, + meshdev_wx_get_sens, /* SIOCGIWSENS */ + NULL, /* SIOCSIWRANGE */ + meshdev_wx_get_range, /* SIOCGIWRANGE */ + NULL, /* SIOCSIWPRIV */ + NULL, /* SIOCGIWPRIV */ + NULL, /* SIOCSIWSTATS */ + NULL, /* SIOCGIWSTATS */ + dummy, /* SIOCSIWSPY */ + dummy, /* SIOCGIWSPY */ + NULL, /* SIOCGIWTHRSPY */ + NULL, /* SIOCWIWTHRSPY */ + meshdev_wx_set_wap, /* SIOCSIWAP */ + meshdev_wx_get_wap, /* SIOCGIWAP */ + meshdev_wx_set_mlme, + dummy, /* SIOCGIWAPLIST -- depricated */ + NULL, + NULL, + meshdev_wx_set_essid, /* SIOCSIWESSID */ + meshdev_wx_get_essid, /* SIOCGIWESSID */ + dummy, /* SIOCSIWNICKN */ + dummy, /* SIOCGIWNICKN */ + NULL, /* -- hole -- */ + NULL, /* -- hole -- */ + NULL, + meshdev_wx_get_rate, /* SIOCGIWRATE */ + dummy, /* SIOCSIWRTS */ + dummy, /* SIOCGIWRTS */ + NULL, + NULL, + dummy, /* SIOCSIWTXPOW */ + dummy, /* SIOCGIWTXPOW */ + NULL, + NULL, + meshdev_wx_set_enc, /* SIOCSIWENCODE */ + meshdev_wx_get_enc, /* SIOCGIWENCODE */ + dummy, /* SIOCSIWPOWER */ + dummy, /* SIOCGIWPOWER */ + NULL, /*---hole---*/ + NULL, /*---hole---*/ + meshdev_wx_set_gen_ie, + NULL, /* SIOCSIWGENIE */ + meshdev_wx_set_auth, + NULL, + meshdev_wx_set_enc_ext, /* SIOCSIWENCODEEXT */ + NULL, + (iw_handler) rt_ioctl_siwpmksa, + NULL, /*---hole---*/ +}; + +static struct iw_priv_args meshdev_private_args[] = { + { + SIOCIWFIRSTPRIV + 0x0, + 0, 0, "enablemesh" + }, + { + SIOCIWFIRSTPRIV + 0x1, + 0, IW_PRIV_TYPE_CHAR | 64, "getmeshinfo" + }, + { + SIOCIWFIRSTPRIV + 0x2, + 0, 0, "disablemesh" + }, + { + SIOCIWFIRSTPRIV + 0x3, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setch" + }, + { + SIOCIWFIRSTPRIV + 0x4, + IW_PRIV_TYPE_CHAR | 64 , 0, "setmeshid" + }, + { SIOCIWFIRSTPRIV + 0x5, + 0,IW_PRIV_TYPE_CHAR | 64 , "getmeshlist" + }, + { SIOCIWFIRSTPRIV + 0x6, + IW_PRIV_TYPE_CHAR | 64,0 , "meshscan" + }, + { + SIOCIWFIRSTPRIV + 0x7, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setmode" + + }, + { + SIOCIWFIRSTPRIV + 0x8, + IW_PRIV_TYPE_CHAR | 64, 0, "sethostname" + }, + { + SIOCIWFIRSTPRIV + 0x9, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setBW" + + }, + { + SIOCIWFIRSTPRIV + 0xa, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "updateBW" + }, + { SIOCIWFIRSTPRIV + 0xb, + 0,IW_PRIV_TYPE_CHAR | 256 , "macdenyget" + }, + { SIOCIWFIRSTPRIV + 0xc, + IW_PRIV_TYPE_CHAR | 64,0 , "macdenyadd" + }, + /* + { + SIOCIWFIRSTPRIV + 0xe, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, "" + },*/ + { SIOCIWFIRSTPRIV + 0xf, + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK , "getneighborlist" + }, + /* Sub-ioctls definitions*/ + /* + { + OID_802_11_MESH_ID, + IW_PRIV_TYPE_INT | 2047, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, "meshid" + }, + { + OID_802_11_MESH_LIST, + IW_PRIV_TYPE_INT | 2047, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_MASK, "meshlist" + },*/ + { SIOCIWFIRSTPRIV + 0x10, + IW_PRIV_TYPE_CHAR | 64, 0, "set" + }, + { SIOCIWFIRSTPRIV + 0x12, + IW_PRIV_TYPE_CHAR | 64,0 , "macdenydel" + }, + { + SIOCIWFIRSTPRIV + 0x14, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setmeshsec" + }, + { + SIOCIWFIRSTPRIV + 0x15, + IW_PRIV_TYPE_CHAR | 6, 0, "setmkddid" + }, + { + SIOCIWFIRSTPRIV + 0x16, + IW_PRIV_TYPE_CHAR | 64, 0, "setkey" + }, + { + SIOCIWFIRSTPRIV + 0x17, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setsectype" + }, +}; + +int meshdev_wx_mesh(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *meshpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device * ieee = meshpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + struct mshclass *mshobj = priv->mshobj; + int ret = 0; + + printk("@@@@@%s: ", __FUNCTION__); + if(mshobj) + { + switch(wrqu->data.flags) + { + case OID_802_11_MESH_SECURITY_INFO: + { + printk("OID_802_11_MESH_SECURITY_INFO \n"); + if(mshobj->ext_patch_r819x_wx_get_security_info) + ret = mshobj->ext_patch_r819x_wx_get_security_info(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_ID: + { + printk("OID_802_11_MESH_ID \n"); + if(mshobj->ext_patch_r819x_wx_get_meshid) + ret = mshobj->ext_patch_r819x_wx_get_meshid(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_AUTO_LINK: + { + printk("OID_802_11_MESH_AUTO_LINK \n"); + if(mshobj->ext_patch_r819x_wx_get_auto_link) + ret = mshobj->ext_patch_r819x_wx_get_auto_link(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_LINK_STATUS: + { + printk("OID_802_11_MESH_LINK_STATUS \n"); + if(mshobj->ext_patch_r819x_wx_get_link_status) + ret = mshobj->ext_patch_r819x_wx_get_link_status(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_LIST: + { + printk("OID_802_11_MESH_LIST \n"); + if(mshobj->ext_patch_r819x_wx_get_neighbor_list) + ret = mshobj->ext_patch_r819x_wx_get_neighbor_list(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_ROUTE_LIST: + { + printk("OID_802_11_MESH_ROUTE_LIST \n"); + if(mshobj->ext_patch_r819x_wx_get_route_list) + ret = mshobj->ext_patch_r819x_wx_get_route_list(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_MAX_TX_RATE: + { + printk("OID_802_11_MESH_MAX_TX_RATE \n"); + if(mshobj->ext_patch_r819x_wx_get_maxrate) + ret = mshobj->ext_patch_r819x_wx_get_maxrate(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_CHANNEL: + { + printk("OID_802_11_MESH_CHANNEL \n"); + if(mshobj->ext_patch_r819x_wx_get_channel) + ret = mshobj->ext_patch_r819x_wx_get_channel(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_HOSTNAME: + { + printk("OID_802_11_MESH_HOSTNAME \n"); + if(mshobj->ext_patch_r819x_wx_get_host_name) + ret = mshobj->ext_patch_r819x_wx_get_host_name(dev, info, wrqu, extra); + break; + } + case OID_802_11_MESH_ONLY_MODE: + { + printk("OID_802_11_MESH_ONLY_MODE \n"); + if(mshobj->ext_patch_r819x_wx_get_mesh_only_mode) + ret = mshobj->ext_patch_r819x_wx_get_mesh_only_mode(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_SECURITY_INFO: + { + printk("RTL_OID_802_11_MESH_SECURITY_INFO \n"); + if(mshobj->ext_patch_r819x_wx_set_security_info) + ret = mshobj->ext_patch_r819x_wx_set_security_info(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_ID: + { + printk("RTL_OID_802_11_MESH_ID \n"); + if(mshobj->ext_patch_r819x_wx_set_meshID) + ret = mshobj->ext_patch_r819x_wx_set_meshID(dev, (u8*)wrqu->data.pointer); + break; + } + case RTL_OID_802_11_MESH_AUTO_LINK: + { + printk("RTL_OID_802_11_MESH_AUTO_LINK \n"); + if(mshobj->ext_patch_r819x_wx_set_auto_link) + ret = mshobj->ext_patch_r819x_wx_set_auto_link(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_ADD_LINK: + { + printk("RTL_OID_802_11_MESH_ADD_LINK \n"); + if(mshobj->ext_patch_r819x_wx_set_add_link) + ret = mshobj->ext_patch_r819x_wx_set_add_link(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_DEL_LINK: + { + printk("RTL_OID_802_11_MESH_DEL_LINK \n"); + if(mshobj->ext_patch_r819x_wx_set_del_link) + ret = mshobj->ext_patch_r819x_wx_set_del_link(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_MAX_TX_RATE: + { + printk("RTL_OID_802_11_MESH_MAX_TX_RATE \n"); + if(mshobj->ext_patch_r819x_wx_set_maxrate) + ret = mshobj->ext_patch_r819x_wx_set_maxrate(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_CHANNEL: + { + printk("RTL_OID_802_11_MESH_CHANNEL \n"); + printk("channel = %d\n",*(u8*)wrqu->data.pointer); + r8192_wx_set_channel(dev, info, wrqu, wrqu->data.pointer); + break; + } + case RTL_OID_802_11_MESH_HOSTNAME: + { + printk("RTL_OID_802_11_MESH_HOSTNAME \n"); + if(mshobj->ext_patch_r819x_wx_set_host_name) + ret = mshobj->ext_patch_r819x_wx_set_host_name(dev, info, wrqu, extra); + break; + } + case RTL_OID_802_11_MESH_ONLY_MODE: + { + printk("RTL_OID_802_11_MESH_ONLY_MODE \n"); + if(mshobj->ext_patch_r819x_wx_set_mesh_only_mode) + ret = mshobj->ext_patch_r819x_wx_set_mesh_only_mode(dev, info, wrqu, extra); + break; + } + default: + printk("Default \n"); + break; + } + } + return ret; +} + +static int meshdev_wx_get_meshinfo(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct net_device *dev = mpriv->rtllib->dev; + +printk("++++++======%s: dev=%p length=%d extra=%p\n", __FUNCTION__, dev, wrqu->data.length,extra); + return r8192_wx_get_meshinfo(dev, info, wrqu, extra); +} + +static int meshdev_wx_enable_mesh(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + +printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_enable_mesh(dev, info, wrqu, extra); + +} + +static int meshdev_wx_disable_mesh(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + +printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_disable_mesh(dev, info, wrqu, extra); +} + + +int meshdev_wx_set_channel(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; +printk("++++++======%s\n", __FUNCTION__); + + return r8192_wx_set_channel(dev, info, wrqu, extra); +} + +static int meshdev_wx_set_meshid(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; +printk("++++++======%s\n", __FUNCTION__); + + return r8192_wx_set_meshID(dev, info, wrqu, extra); +} + +static int meshdev_wx_mesh_scan(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + +printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_mesh_scan(dev, info, wrqu, extra); +} +static int meshdev_wx_get_mesh_list(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; +printk("++++++======%s\n", __FUNCTION__); + + return r8192_wx_get_mesh_list(dev, info, wrqu, extra); +} +static int meshdev_wx_set_meshmode(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + +printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_set_meshmode(dev, info, wrqu, extra); +} +static int meshdev_wx_set_meshbw(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + +printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_set_meshBW(dev, info, wrqu, extra); +} +static int meshdev_wx_update_beacon(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + struct mshclass *mshobj= (priv)->mshobj; + u8 updateBW = 0; + u8 bserverHT = 0; + + printk("++++++======%s\n", __FUNCTION__); + if(*extra == 0) + { + ieee->p2pmode = 1; + ieee->current_network.channel = ieee->current_mesh_network.channel; + if(ieee->state!=RTLLIB_LINKED){ + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + } + } + else + { + ieee->p2pmode = 0; + updateBW=mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT); + printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT); + if(updateBW == 1) + { + if(bserverHT == 0) + { + printk("===>server is not HT supported,set 20M\n"); + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } + else + { + printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n",ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset); + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset); + } + } + else + { + printk("===>there is no same hostname server, ERR!!!\n"); + return -1; + } + } + write_nic_dword(dev,BSSIDR,((u32*)priv->rtllib->current_mesh_network.bssid)[0]); + write_nic_word(dev,BSSIDR+4,((u16*)priv->rtllib->current_mesh_network.bssid)[2]); + return 0; +} +static int meshdev_wx_add_mac_deny(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_set_add_mac_deny(dev, info, wrqu, extra); +} + +static int meshdev_wx_del_mac_deny(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_set_del_mac_deny(dev, info, wrqu, extra); +} + +static int meshdev_wx_get_neighbor_list(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + int ret = 0; + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_neighbor_list ) + return 0; + ret = priv->mshobj->ext_patch_r819x_wx_get_neighbor_list(dev, info, wrqu, extra); +#ifdef MESH_AUTO_TEST + ret |= r8192_wx_set_channel(dev, info, wrqu, &ieee->current_network.channel); +#endif + return ret; +} + +/* reserved for future +static int r819x_wx_get_mac_allow(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + return 0; + + return priv->mshobj->ext_patch_r819x_wx_get_mac_allow(dev, info, wrqu, extra); +} +*/ + +static int meshdev_wx_get_mac_deny(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + + if( ! priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_get_mac_deny ) + return 0; + + return priv->mshobj->ext_patch_r819x_wx_get_mac_deny(dev, info, wrqu, extra); +} + + +static int meshdev_wx_set_hostname(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + + if(wrqu->data.length > MAX_HOST_NAME_LENGTH) + { + printk("%s: Host name is too long. len=%d\n", __FUNCTION__, wrqu->data.length); + return -1; + } + + ieee->hostname_len = wrqu->data.length; + memcpy(ieee->hostname, extra, wrqu->data.length); + +printk("++++++======%s: %s\n", __FUNCTION__, ieee->hostname); + + return 0; +} +static int meshdev_wx_set_mesh_security(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = netdev_priv(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_set_mesh_security(dev, info, wrqu, extra); +} +static int meshdev_wx_set_mkdd_id(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = netdev_priv(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + + printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_set_mkdd_id(dev, info, wrqu, extra); +} +static int meshdev_wx_set_mesh_key(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = netdev_priv(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_set_mesh_key(dev, info, wrqu, extra); +} +static int meshdev_wx_set_sec_type(struct net_device *meshdev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct meshdev_priv *mpriv = netdev_priv(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + + printk("++++++======%s\n", __FUNCTION__); + return r8192_wx_set_mesh_sec_type(dev, info, wrqu, extra); +} +static u8 my_atoi(const char *arg) +{ + u8 val = 0; + for(; ; arg++){ + switch (*arg){ + case '0'...'9': + val = 10*val + (*arg-'0'); + break; + default: + return val; + } + } + return val; +} + +static int Set_Channel_Proc(struct net_device *meshdev, char *arg) +{ + int ch = my_atoi(arg); + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct r8192_priv *priv = (void *)ieee->priv; + struct net_device *dev = ieee->dev; + + if (!priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_set_channel || !ieee->only_mesh) + return 0; + +printk("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!set current mesh network channel %d\n", ch); + if ( ch < 0 ) + { + rtllib_start_scan(ieee); + ieee->meshScanMode =2; + } + else + { + ieee->meshScanMode =0; + if(priv->mshobj->ext_patch_r819x_wx_set_channel) + { + priv->mshobj->ext_patch_r819x_wx_set_channel(ieee, ch); + priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,ch); + } + queue_work_rsl(ieee->wq, &ieee->ext_stop_scan_wq); + ieee->set_chan(ieee->dev, ch); + ieee->current_mesh_network.channel = ch; + if(ieee->only_mesh) + ieee->current_network.channel = ch; + ieee->current_network.channel = ieee->current_mesh_network.channel; + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + if(rtllib_act_scanning(ieee,true) == true) + rtllib_stop_scan_syncro(ieee); + } + return 0; +} +static int Set_MeshID_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = rtllib_priv(dev); + RT_RF_POWER_STATE rtState; + int ret = 0; + rtState = priv->rtllib->eRFPowerState; + + if(!priv->mshobj || !priv->mshobj->ext_patch_r819x_wx_enable_mesh || !priv->mshobj->ext_patch_r819x_wx_set_meshID) + return 0; + + if(rtllib_act_scanning(ieee,true) == true) + rtllib_stop_scan_syncro(ieee); + + /* Set Mesh ID */ + ret = priv->mshobj->ext_patch_r819x_wx_set_meshID(dev, arg); + if(ret) + goto End; + + /* Enable Mesh */ + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = priv->mshobj->ext_patch_r819x_wx_enable_mesh(dev); + if(!ret) + { +#ifdef ENABLE_IPS + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + SEM_UP_PRIV_WX(&priv->wx_sem); + return -1; + } + else{ + printk("=========>%s(): IPSLeave\n",__FUNCTION__); + IPSLeave(dev); + } + } + } +#endif + } + SEM_UP_PRIV_WX(&priv->wx_sem); +#if 1 + if (ieee->mesh_sec_type == 1) { + rtl8192_abbr_handshk_set_GTK(ieee,1); + } +#else + if (ieee->mesh_sec_type == 1) + rtl8192_abbr_handshk_set_key(ieee); +#endif +End: + return ret; +} +static int Set_Bw40MHz_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct r8192_priv *priv = (void *)ieee->priv; + u8 bBw40MHz = my_atoi(arg); + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + printk("%s(): set mesh BW ! extra is %d\n",__FUNCTION__, bBw40MHz); + priv->rtllib->pHTInfo->bRegBW40MHz = bBw40MHz; + SEM_UP_PRIV_WX(&priv->wx_sem); + + return 0; +} +static int Set_WirelessMode_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct r8192_priv *priv = (void *)ieee->priv; + struct net_device *dev = ieee->dev; + u8 wirelessmode = my_atoi(arg); + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + + printk("%s(): set mesh mode ! extra is %d\n",__FUNCTION__, wirelessmode); + if((wirelessmode != WIRELESS_MODE_A) && (wirelessmode != WIRELESS_MODE_B) && + (wirelessmode != WIRELESS_MODE_G) && (wirelessmode != WIRELESS_MODE_AUTO) && + (wirelessmode != WIRELESS_MODE_N_24G) && (wirelessmode != WIRELESS_MODE_N_5G)) + { + printk("ERR!! you should input 1 | 2 | 4 | 8 | 16 | 32\n"); + SEM_UP_PRIV_WX(&priv->wx_sem); + return -1; + } + if(priv->rtllib->state == RTLLIB_LINKED) + { + if((priv->rtllib->mode != WIRELESS_MODE_N_5G) && (priv->rtllib->mode != WIRELESS_MODE_N_24G)){ + printk("===>wlan0 is linked,and ieee->mode is not N mode ,do not need to set mode,return\n"); + SEM_UP_PRIV_WX(&priv->wx_sem); + return 0; + } + } + priv->rtllib->mode = wirelessmode; + if(priv->ResetProgress == RESET_TYPE_NORESET) + rtl8192_SetWirelessMode(dev, priv->rtllib->mode); + HTUseDefaultSetting(priv->rtllib); + SEM_UP_PRIV_WX(&priv->wx_sem); + return 0; +} +static int Set_ExtChnOffset_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; +#if 0 + struct r8192_priv *priv = (void *)ieee->priv; + struct net_device *dev = ieee->dev; + struct mshclass *mshobj= priv->mshobj; + u8 updateBW = 0; + u8 bserverHT = 0; +#endif + ieee->p2pmode = 0; +#if 0 + updateBW=mshobj->ext_patch_r819x_wx_update_beacon(dev,&bserverHT); + printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT); + if(updateBW == 1) + { + if(bserverHT == 0) + { + printk("===>server is not HT supported,set 20M\n"); + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } + else + { + printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n",ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset); + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset); + } + } + else + { + printk("===>there is no same hostname server, ERR!!!\n"); + return -1; + } +#endif + return 0; +} +static int Set_OnlyMesh_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + union iwreq_data tmprqu; + int ret = 0; + + ieee->p2pmode = 1; + ieee->only_mesh = my_atoi(arg); +printk("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!mesh only = %d, p2pmode = %d\n", ieee->only_mesh, ieee->p2pmode); + if(ieee->only_mesh) + ieee->current_network.channel = ieee->current_mesh_network.channel; + if(ieee->only_mesh == 0) + { + tmprqu.mode = ieee->iw_mode; + ieee->iw_mode = IW_MODE_INFRA; + ret = rtllib_wx_set_mode(ieee, NULL, &tmprqu, NULL); + } + return ret; +} +static int Set_AsPortal_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = (void *)ieee->priv; + u8 val = my_atoi(arg); + int ret = 0; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = priv->mshobj->ext_patch_r819x_wx_set_AsPortal(dev, val); + SEM_UP_PRIV_WX(&priv->wx_sem); + + return ret; +} +static int Set_AsRoot_Proc(struct net_device *meshdev, char *arg) +{ + struct meshdev_priv *mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + struct rtllib_device *ieee = mpriv->rtllib; + struct net_device *dev = ieee->dev; + struct r8192_priv *priv = (void *)ieee->priv; + u8 val = my_atoi(arg); + int ret = 0; + + SEM_DOWN_PRIV_WX(&priv->wx_sem); + ret = priv->mshobj->ext_patch_r819x_wx_set_AsRoot(dev, val); + SEM_UP_PRIV_WX(&priv->wx_sem); + + return ret; +} + +static struct { + char* name; + int (*set_proc)(struct net_device *dev, char *arg); +} *private_set_proc, private_support_proc[] = { + {"Debug", NULL}, + {"Channel", Set_Channel_Proc}, + {"MeshId", Set_MeshID_Proc}, + {"Bw40MHz", Set_Bw40MHz_Proc}, + {"WirelessMode", Set_WirelessMode_Proc}, + {"ExtChnOffset", Set_ExtChnOffset_Proc}, + {"OnlyMesh", Set_OnlyMesh_Proc}, + {"AsPortal", Set_AsPortal_Proc}, + {"AsRoot", Set_AsRoot_Proc}, + {"MeshAuthMode", NULL}, + {"MeshEncrypType", NULL}, + {"", NULL}, +}; + +static char *rtlstrchr(const char *s, int c) +{ + for(; *s!=(char)c; ++s) + if(*s == '\0') + return NULL; + return (char *)s; +} + +static int meshdev_wx_set_param(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *w, char *extra) +{ + char * this_char = extra; + char *value = NULL; + int Status=0; + + printk("=======>%s: extra=%s\n", __FUNCTION__,extra); + if (!*this_char) + return -EINVAL; + + if ((value = rtlstrchr(this_char, '=')) != NULL) + *value++ = 0; + + for (private_set_proc = private_support_proc; strcmp(private_set_proc->name, ""); private_set_proc++) + { + if (strcmp(this_char, private_set_proc->name) == 0) + { + if(private_set_proc->set_proc) + { + if(private_set_proc->set_proc(dev, value)) + { + Status = -EINVAL; + } + } + break; + } + } + + if(strcmp(private_set_proc->name, "") == 0) + { + Status = -EINVAL; + printk("===>%s: (iwpriv) Not Support Set Command [%s]", __FUNCTION__, this_char); + if(value != NULL) + printk(" value=%s\n", value); + else + printk("\n"); + } + + return Status; +} + + +static iw_handler meshdev_private_handler[] = { + meshdev_wx_enable_mesh, + meshdev_wx_get_meshinfo, + meshdev_wx_disable_mesh, + meshdev_wx_set_channel, + meshdev_wx_set_meshid, + meshdev_wx_get_mesh_list, + meshdev_wx_mesh_scan, + meshdev_wx_set_meshmode, + meshdev_wx_set_hostname, + meshdev_wx_set_meshbw, + meshdev_wx_update_beacon, + meshdev_wx_get_mac_deny, + meshdev_wx_add_mac_deny, + NULL, + NULL, + meshdev_wx_get_neighbor_list, + meshdev_wx_set_param, + NULL, + meshdev_wx_del_mac_deny, + NULL, + meshdev_wx_set_mesh_security, + meshdev_wx_set_mkdd_id, + meshdev_wx_set_mesh_key, + meshdev_wx_set_sec_type, +}; + +struct iw_handler_def meshdev_wx_handlers_def={ + .standard = meshdev_wx_handlers, + .num_standard = sizeof(meshdev_wx_handlers) / sizeof(iw_handler), + .private = meshdev_private_handler, + .num_private = sizeof(meshdev_private_handler) / sizeof(iw_handler), + .num_private_args = sizeof(meshdev_private_args) / sizeof(struct iw_priv_args), +#if WIRELESS_EXT >= 17 + .get_wireless_stats = (void*)meshdev_stats, +#endif + .private_args = (struct iw_priv_args *)meshdev_private_args, +}; +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/BOM +++ linux-2.6.32/ubuntu/rtl8192se/BOM @@ -0,0 +1,2 @@ +Downloaded from: http://www.realtek.com/products/productsView.aspx?Langid=1&PFid=48&Level=5&Conn=4&ProdID=230 +Current Version: 0015.0127.2010 --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_cam.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_cam.c @@ -0,0 +1,569 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "rtl_core.h" +#if defined RTL8192CE +#include "rtl8192c/r8192C_phy.h" +#include "rtl8192c/r8192C_phyreg.h" +#include "rtl8192c/r8192C_rtl6052.h" +#include "rtl8192c/r8192C_Efuse.h" +#elif defined RTL8192SE +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_rtl6052.h" +#include "rtl8192s/r8192S_Efuse.h" +#else +#include "rtl8192e/r8192E_phy.h" +#include "rtl8192e/r8192E_phyreg.h" +#include "rtl8192e/r8190P_rtl8256.h" /* RTL8225 Radio frontend */ +#include "rtl8192e/r8192E_cmdpkt.h" +#endif + +extern int hwwep; +void CamResetAllEntry(struct net_device *dev) +{ + u32 ulcommand = 0; + + ulcommand |= BIT31|BIT30; + write_nic_dword(dev, RWCAM, ulcommand); +} + +#ifdef _RTL8192_EXT_PATCH_ +void CamDeleteOneEntry(struct net_device *dev, u8 EntryNo) +{ + u32 ulCommand = EntryNo * CAM_CONTENT_COUNT; + u32 ulContent = 0; + + ulCommand = ulCommand | BIT31 | BIT16; + + write_nic_dword(dev,WCAMI,ulContent); + write_nic_dword(dev,RWCAM,ulCommand); +} + +void CamRestoreEachIFEntry(struct net_device* dev,u8 is_mesh) +{ + u32 i; + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + for( i = 0 ; i< TOTAL_CAM_ENTRY; i++) { + + if (is_mesh) { + if(ieee->swmeshcamtable[i].bused ) + { + setKey(dev, + i, + ieee->swmeshcamtable[i].key_index, + ieee->swmeshcamtable[i].key_type, + ieee->swmeshcamtable[i].macaddr, + ieee->swmeshcamtable[i].useDK, + (u32*)(&ieee->swmeshcamtable[i].key_buf[0]) + ); + } + } else { + if(ieee->swcamtable[i].bused ) + { + setKey(dev, + i, + ieee->swcamtable[i].key_index, + ieee->swcamtable[i].key_type, + ieee->swcamtable[i].macaddr, + ieee->swcamtable[i].useDK, + (u32*)(&ieee->swcamtable[i].key_buf[0])); + } + } + } +} +#endif + +void write_cam(struct net_device *dev, u8 addr, u32 data) +{ + write_nic_dword(dev, WCAMI, data); + write_nic_dword(dev, RWCAM, BIT31|BIT16|(addr&0xff) ); +} + +u32 read_cam(struct net_device *dev, u8 addr) +{ + write_nic_dword(dev, RWCAM, 0x80000000|(addr&0xff) ); + return read_nic_dword(dev, 0xa8); +} + +void EnableHWSecurityConfig8192(struct net_device *dev) +{ + u8 SECR_value = 0x0; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + SECR_value = SCR_TxEncEnable | SCR_RxDecEnable; +#ifdef _RTL8192_EXT_PATCH_ + if ((((KEY_TYPE_WEP40 == ieee->pairwise_key_type) || (KEY_TYPE_WEP104 == ieee->pairwise_key_type)) && (priv->rtllib->auth_mode != 2)) + &&(ieee->iw_mode != IW_MODE_MESH)) +#else + if (((KEY_TYPE_WEP40 == ieee->pairwise_key_type) || (KEY_TYPE_WEP104 == ieee->pairwise_key_type)) && (priv->rtllib->auth_mode != 2)) +#endif + { + SECR_value |= SCR_RxUseDK; + SECR_value |= SCR_TxUseDK; + } + else if ((ieee->iw_mode == IW_MODE_ADHOC) && (ieee->pairwise_key_type & (KEY_TYPE_CCMP | KEY_TYPE_TKIP))) + { + SECR_value |= SCR_RxUseDK; + SECR_value |= SCR_TxUseDK; + } + + + ieee->hwsec_active = 1; +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep ) + { + ieee->hwsec_active = 0; + SECR_value &= ~SCR_RxDecEnable; + SECR_value &= ~SCR_TxUseDK; + SECR_value &= ~SCR_RxUseDK; + SECR_value &= ~SCR_TxEncEnable; + } +#else + if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) + { + ieee->hwsec_active = 0; + SECR_value &= ~SCR_RxDecEnable; + } +#endif + +#ifdef RTL8192CE + write_nic_byte(dev, REG_CR+1,0x02); +#endif + RT_TRACE(COMP_SEC,"%s:, hwsec:%d, pairwise_key:%d, SECR_value:%x\n", __FUNCTION__, \ + ieee->hwsec_active, ieee->pairwise_key_type, SECR_value); + { + write_nic_byte(dev, SECR, SECR_value); + } + +} + +void set_swcam(struct net_device *dev, + u8 EntryNo, + u8 KeyIndex, + u16 KeyType, + u8 *MacAddr, + u8 DefaultKey, + u32 *KeyContent, + u8 is_mesh) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + printk("===========>%s():EntryNo is %d,KeyIndex is %d,KeyType is %d,is_mesh is %d\n",__FUNCTION__,EntryNo,KeyIndex,KeyType,is_mesh); + if(is_mesh){ +#ifdef _RTL8192_EXT_PATCH_ + ieee->swmeshcamtable[EntryNo].bused=true; + ieee->swmeshcamtable[EntryNo].key_index=KeyIndex; + ieee->swmeshcamtable[EntryNo].key_type=KeyType; + memcpy(ieee->swmeshcamtable[EntryNo].macaddr,MacAddr,6); + ieee->swmeshcamtable[EntryNo].useDK=DefaultKey; + memcpy(ieee->swmeshcamtable[EntryNo].key_buf,(u8*)KeyContent,16); +#endif + } + else + { + ieee->swcamtable[EntryNo].bused=true; + ieee->swcamtable[EntryNo].key_index=KeyIndex; + ieee->swcamtable[EntryNo].key_type=KeyType; + memcpy(ieee->swcamtable[EntryNo].macaddr,MacAddr,6); + ieee->swcamtable[EntryNo].useDK=DefaultKey; + memcpy(ieee->swcamtable[EntryNo].key_buf,(u8*)KeyContent,16); + } +} +#ifdef _RTL8192_EXT_PATCH_ +void reset_IFswcam(struct net_device *dev, u8 is_mesh) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + if(is_mesh){ + memset(ieee->swmeshcamtable,0,sizeof(SW_CAM_TABLE)*32); + } + else{ + memset(ieee->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + } +} +#endif +void setKey(struct net_device *dev, + u8 EntryNo, + u8 KeyIndex, + u16 KeyType, + u8 *MacAddr, + u8 DefaultKey, + u32 *KeyContent ) +{ + u32 TargetCommand = 0; + u32 TargetContent = 0; + u16 usConfig = 0; + u8 i; +#ifdef ENABLE_IPS + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + RT_RF_POWER_STATE rtState; + rtState = priv->rtllib->eRFPowerState; + if(priv->rtllib->PowerSaveControl.bInactivePs){ + if(rtState == eRfOff){ + if(priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) + { + RT_TRACE(COMP_ERR, "%s(): RF is OFF.\n",__FUNCTION__); + return ; + } + else{ + down(&priv->rtllib->ips_sem); + IPSLeave(dev); + up(&priv->rtllib->ips_sem); } + } + } + priv->rtllib->is_set_key = true; +#endif + if (EntryNo >= TOTAL_CAM_ENTRY) + RT_TRACE(COMP_ERR, "cam entry exceeds in setKey()\n"); + + RT_TRACE(COMP_SEC, "====>to setKey(), dev:%p, EntryNo:%d, KeyIndex:%d, KeyType:%d, MacAddr"MAC_FMT"\n", dev,EntryNo, KeyIndex, KeyType, MAC_ARG(MacAddr)); + + if (DefaultKey) + usConfig |= BIT15 | (KeyType<<2); + else + usConfig |= BIT15 | (KeyType<<2) | KeyIndex; + + + for(i=0 ; iafter set key, usconfig:%x\n", usConfig); +} +#if 0 +void CamPrintDbgReg(struct net_device* dev) +{ + unsigned long rvalue; + unsigned char ucValue; + write_nic_dword(dev, DCAM, 0x80000000); + msleep(40); + rvalue = read_nic_dword(dev, DCAM); + RT_TRACE(COMP_SEC, " TX CAM=%8lX ",rvalue); + if((rvalue & 0x40000000) != 0x4000000) + RT_TRACE(COMP_SEC, "-->TX Key Not Found "); + msleep(20); + write_nic_dword(dev, DCAM, 0x00000000); + rvalue = read_nic_dword(dev, DCAM); + RT_TRACE(COMP_SEC, "RX CAM=%8lX ",rvalue); + if((rvalue & 0x40000000) != 0x4000000) + RT_TRACE(COMP_SEC, "-->CAM Key Not Found "); + ucValue = read_nic_byte(dev, SECR); + RT_TRACE(COMP_SEC, "WPA_Config=%x \n",ucValue); +} +#endif +void CAM_read_entry(struct net_device *dev, u32 iIndex) +{ + u32 target_command=0; + u32 target_content=0; + u8 entry_i=0; + u32 ulStatus; + s32 i=100; + for(entry_i=0;entry_i=0) + { + ulStatus = read_nic_dword(dev, RWCAM); + if(ulStatus & BIT31){ + continue; + } + else{ + break; + } + } +#endif + write_nic_dword(dev, RWCAM, target_command); + RT_TRACE(COMP_SEC,"CAM_read_entry(): WRITE A0: %x \n",target_command); + target_content = read_nic_dword(dev, RCAMO); + RT_TRACE(COMP_SEC, "CAM_read_entry(): WRITE A8: %x \n",target_content); + } + printk("\n"); +} + +void CamRestoreAllEntry( struct net_device *dev) +{ + u8 EntryId = 0; + struct r8192_priv *priv = rtllib_priv(dev); + u8* MacAddr = priv->rtllib->current_network.bssid; + + static u8 CAM_CONST_ADDR[4][6] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}}; + static u8 CAM_CONST_BROAD[] = + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + + RT_TRACE(COMP_SEC, "CamRestoreAllEntry: \n"); + + + if ((priv->rtllib->pairwise_key_type == KEY_TYPE_WEP40)|| + (priv->rtllib->pairwise_key_type == KEY_TYPE_WEP104)) + { + + for(EntryId=0; EntryId<4; EntryId++) + { + { + MacAddr = CAM_CONST_ADDR[EntryId]; + if(priv->rtllib->swcamtable[EntryId].bused ) + { + setKey(dev, + EntryId , + EntryId, + priv->rtllib->pairwise_key_type, + MacAddr, + 0, + (u32*)(&priv->rtllib->swcamtable[EntryId].key_buf[0]) + ); + } + } + } + + } + else if(priv->rtllib->pairwise_key_type == KEY_TYPE_TKIP) + { + + { + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + { + setKey(dev, + 4, + 0, + priv->rtllib->pairwise_key_type, + (u8*)dev->dev_addr, + 0, + (u32*)(&priv->rtllib->swcamtable[4].key_buf[0]) + ); + } + else + { + setKey(dev, + 4, + 0, + priv->rtllib->pairwise_key_type, + MacAddr, + 0, + (u32*)(&priv->rtllib->swcamtable[4].key_buf[0]) + ); + } + + } + } + else if(priv->rtllib->pairwise_key_type == KEY_TYPE_CCMP) + { + + { + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + { + setKey(dev, + 4, + 0, + priv->rtllib->pairwise_key_type, + (u8*)dev->dev_addr, + 0, + (u32*)(&priv->rtllib->swcamtable[4].key_buf[0]) + ); + } + else + { + setKey(dev, + 4, + 0, + priv->rtllib->pairwise_key_type, + MacAddr, + 0, + (u32*)(&priv->rtllib->swcamtable[4].key_buf[0]) + ); + } + } + } + + + + if(priv->rtllib->group_key_type == KEY_TYPE_TKIP) + { + MacAddr = CAM_CONST_BROAD; + for(EntryId=1 ; EntryId<4 ; EntryId++) + { + if(priv->rtllib->swcamtable[EntryId].bused ) + { + setKey(dev, + EntryId, + EntryId, + priv->rtllib->group_key_type, + MacAddr, + 0, + (u32*)(&priv->rtllib->swcamtable[EntryId].key_buf[0]) + ); + } + } + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + { + if(priv->rtllib->swcamtable[0].bused ){ + setKey(dev, + 0, + 0, + priv->rtllib->group_key_type, + CAM_CONST_ADDR[0], + 0, + (u32*)(&priv->rtllib->swcamtable[0].key_buf[0]) + ); + } + else + { + RT_TRACE(COMP_ERR,"===>%s():ERR!! ADHOC TKIP ,but 0 entry is have no data\n",__FUNCTION__); + return; + } + } + } else if(priv->rtllib->group_key_type == KEY_TYPE_CCMP) { + MacAddr = CAM_CONST_BROAD; + for(EntryId=1; EntryId<4 ; EntryId++) + { + if(priv->rtllib->swcamtable[EntryId].bused ) + { + setKey(dev, + EntryId , + EntryId, + priv->rtllib->group_key_type, + MacAddr, + 0, + (u32*)(&priv->rtllib->swcamtable[EntryId].key_buf[0])); + } + } + + if (priv->rtllib->iw_mode == IW_MODE_ADHOC) { + if (priv->rtllib->swcamtable[0].bused) { + setKey(dev, + 0 , + 0, + priv->rtllib->group_key_type, + CAM_CONST_ADDR[0], + 0, + (u32*)(&priv->rtllib->swcamtable[0].key_buf[0])); + } else { + RT_TRACE(COMP_ERR,"===>%s():ERR!! ADHOC CCMP ,but 0 entry is have no data\n", + __FUNCTION__); + return; + } + } + } +} + + +#ifdef _RTL8192_EXT_PATCH_ +u8 rtl8192_get_free_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr) +{ + u32 bitmap = (ieee->HwSecCamBitMap)>>4; + u8 entry_idx = 0; + u8 i, *addr; + + if ((NULL == ieee) || (NULL == sta_addr)) { + printk("%s: ieee or sta_addr is NULL.\n", __FUNCTION__); + return TOTAL_CAM_ENTRY; + } + + /* Does STA already exist? */ + /* CAM Index 31 is for AP */ + for (i = 4; i < TOTAL_CAM_ENTRY-1; i++) { + addr = ieee->HwSecCamStaAddr[i]; + if(memcmp(addr, sta_addr, ETH_ALEN) == 0) + return i; + } + + /* Get a free CAM entry. */ + for (entry_idx = 4; entry_idx < TOTAL_CAM_ENTRY - 1; entry_idx++) { + if ((bitmap & BIT0) == 0) { + ieee->HwSecCamBitMap |= BIT0<HwSecCamStaAddr[entry_idx], sta_addr, ETH_ALEN); + return entry_idx; + } + bitmap = bitmap >>1; + } + + return TOTAL_CAM_ENTRY; +} + +void rtl8192_del_hwsec_cam_entry(struct rtllib_device *ieee, u8 *sta_addr) +{ + u32 bitmap; + u8 i, *addr; + + if ((NULL == ieee) || (NULL == sta_addr)) { + printk("%s: ieee or sta_addr is NULL.\n", __FUNCTION__); + return; + } + + if ((sta_addr[0]|sta_addr[1]|sta_addr[2]|sta_addr[3]|\ + sta_addr[4]|sta_addr[5]) == 0) { + printk("%s: sta_addr is 00:00:00:00:00:00.\n", __FUNCTION__); + return; + } + + /* Does STA already exist? */ + for (i = 4; i < TOTAL_CAM_ENTRY; i++) { + addr = ieee->HwSecCamStaAddr[i]; + bitmap = (ieee->HwSecCamBitMap)>>i; + if (((bitmap & BIT0) == BIT0) && (memcmp(addr, sta_addr, ETH_ALEN) == 0)) { + /* Remove from HW Security CAM */ + CamDeleteOneEntry(ieee->dev, i); + memset(ieee->HwSecCamStaAddr[i], 0, ETH_ALEN); + ieee->HwSecCamBitMap &= ~(BIT0<swmeshcamtable[i]), 0, sizeof(SW_CAM_TABLE)); + RT_TRACE(COMP_SEC, "====>del sw entry, EntryNo:%d, MacAddr:"MAC_FMT"\n", + i, MAC_ARG(sta_addr)); + } + } + return; +} +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/Makefile +++ linux-2.6.32/ubuntu/rtl8192se/Makefile @@ -0,0 +1,786 @@ +NIC_SELECT = RTL8192SE + +CC = gcc +KVER := $(shell uname -r) +MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/ + +ifeq ($(shell uname -r|cut -d. -f1,2), 2.6) +###################### KERNEL 2.6 ################################ +ifeq ($(NIC_SELECT),RTL8192CE) +sub_folder = rtl8192c +EXTRA_CFLAGS = -DRTL8192CE +EXTRA_CFLAGS += -DEEPROM_OLD_FORMAT_SUPPORT=0 \ + -DRTL8192SU_DISABLE_CCK_RATE=0 \ + -DDISABLE_BB_RF=0 \ + -DRTL92SE_FPGA_VERIFY=0 \ + -DSIMULATE_ETHERNET=0 \ + -DSUPERMAC_92D_ENABLE=0 \ + -DEARLYMODE_ENABLE_FOR_92D=0 \ + -DRTL8192S_DISABLE_FW_DM=0 \ + -DMP_CCK_WORKAROUND=0 \ + -DRTL8192SE_DISABLE_MGNT_QUEUE=0 \ + -DRTL8190_Download_Firmware_From_Header=1 \ + -DMUTUAL_AUTHENTICATION=1 \ + -DFOR_QMI=0 \ + -DENABLE_TKIP11N \ + -DCONFIG_PM_RTL \ + -DCONFIG_PM \ + -DENABLE_IPS \ + -DENABLE_LPS \ + -DCONFIG_ASPM_OR_D3 \ + -DENABLE_GPIO_RADIO_CTL \ + -DMP_DRIVER=0 \ + -DENABLE_DOT11D + # \ + -D_ENABLE_SW_BEACON \ + -DUSE_FW_SOURCE_IMG_FILE \ + -DEFUSE_REPG_WORKAROUND \ + -DENABLE_AMSDU \ + -DADHOC_11N \ + -DFOR_ANDROID_X86 \ + -DCONFIG_64BIT_DMA \ + # +endif + +ifeq ($(NIC_SELECT),RTL8192SE) +sub_folder = rtl8192s +EXTRA_CFLAGS = -DRTL8192SE +EXTRA_CFLAGS += -DEEPROM_OLD_FORMAT_SUPPORT=0 \ + -DRTL92SE_FPGA_VERIFY=0 \ + -DDEMO_BOARD_SUPPORT=1 \ + -DRTL8192SU_DISABLE_CCK_RATE=0 \ + -DRTL8192S_DISABLE_FW_DM=0 \ + -DHAL_MAC_ENABLE=1 \ + -DHAL_BB_ENABLE=1 \ + -DHAL_RF_ENABLE=1 \ + -DRTL8192S_PREPARE_FOR_NORMAL_RELEASE=1 \ + -DDISABLE_BB_RF=0 \ + -DCONFIG_PM_RTL \ + -DCONFIG_PM \ + -DENABLE_GPIO_RADIO_CTL \ + -DRTL8190_Download_Firmware_From_Header=1 \ + -DENABLE_LPS \ + -DCONFIG_RX_CMD \ + -DENABLE_IPS \ + -DUSE_FW_SOURCE_IMG_FILE \ + -DENABLE_DOT11D \ + -DCONFIG_ASPM_OR_D3 \ + # \ + -DCONFIG_CRDA \ + -DCONFIG_CFG_80211 \ + -DCONFIG_RTL_RFKILL \ + -DCONFIG_FW_SETCHAN \ + -DRTL8192S_WAPI_SUPPORT \ + -D_ENABLE_SW_BEACON \ + -DCONFIG_MP \ + -DENABLE_AMSDU \ + -DADHOC_11N \ + -DEFUSE_REPG_WORKAROUN \ + -DENABLE_TKIP11N \ + -DFOR_ANDROID_X86 \ + # + #NOTICE: + #[1] CONFIG_MP is for MP test, + # you should close IPS/LPS/GPIO/ASPM + #[2] In order to support CRDA, RFKILL + # CONFIG_CFG_80211 need to be enabled at first. + #[3] In order to support CRDA, + # DOT11D need to be enabled at first. + #[4] CRDA and RFKILL can be enabled individually. + + +endif +ifeq ($(NIC_SELECT),RTL8190P) +sub_folder = rtl8192e +EXTRA_CFLAGS += -DRTL8190P \ + -DUSE_FW_SOURCE_IMG_FILE \ + -DEEPROM_OLD_FORMAT_SUPPORT=1 \ + -DENABLE_DOT11D + # \ + -DCONFIG_PM \ + -DENABLE_TKIP11N \ + -DFOR_ANDROID_X86 \ + # +endif +ifeq ($(NIC_SELECT),RTL8192E) +sub_folder = rtl8192e +EXTRA_CFLAGS+=-DRTL8192E \ + -DEEPROM_OLD_FORMAT_SUPPORT=1 \ + -DUSE_FW_SOURCE_IMG_FILE \ + -DENABLE_IPS \ + -DENABLE_LPS \ + -DENABLE_GPIO_RADIO_CTL \ + -DCONFIG_PM_RTL \ + -DCONFIG_PM \ + -DENABLE_DOT11D + # \ + -DCONFIG_RTL8192_IO_MAP \ + -DCONFIG_ASPM_OR_D3 \ + -DENABLE_TKIP11N \ + -DFOR_ANDROID_X86 \ + # +endif +ifeq ($(NIC_SELECT),RTL8191SE_MESH) +sub_folder = rtl8192s +EXTRA_CFLAGS += -DRTL8192SE \ + -DEEPROM_OLD_FORMAT_SUPPORT=0 \ + -DRTL92SE_FPGA_VERIFY=0 \ + -DDEMO_BOARD_SUPPORT=1 \ + -DRTL8192SU_DISABLE_CCK_RATE=0 \ + -DRTL8192S_DISABLE_FW_DM=0 \ + -DHAL_MAC_ENABLE=1 \ + -DHAL_BB_ENABLE=1 \ + -DHAL_RF_ENABLE=1 \ + -DRTL8192S_PREPARE_FOR_NORMAL_RELEASE=1 \ + -DDISABLE_BB_RF=0 \ + -DRTL8190_Download_Firmware_From_Header=1 \ + -DEFUSE_REPG_WORKAROUND \ + -DCONFIG_PM \ + -DCONFIG_PM_RTL \ + -DENABLE_GPIO_RADIO_CTL \ + -DENABLE_IPS \ + -DENABLE_LPS \ + -DCONFIG_ASPM_OR_D3 \ + -DCUSTOMER_ID_INTEL_CMPC \ + -DMESH_8192_SPECIFIED \ + -D_RTL8192_EXT_PATCH_ \ + -D_MESH_DEBUG_ \ + -DTREE_BASED_ROUTING_ENABLE \ + -DMESH_PATHSEL_DBG_LV=0 \ + -DMESH_PATHSEL_DBG_SIMPLE=0 \ + -DMESH_PATHSEL_DBG_TEST=0 \ + -DBUILT_IN_MSHCLASS \ + -DENABLE_AMSDU \ + -DUSE_FW_SOURCE_IMG_FILE \ + -DENABLE_DOT11D \ + -DCONFIG_RX_CMD \ + # \ + -DADHOC_11N \ + -DCOMPATIBLE_WITH_RALINK_MESH \ + -DCONFIG_CRDA \ + -DCONFIG_FW_SETCHAN \ + -DRTL8192S_WAPI_SUPPORT \ + -DMESH_AUTO_TEST \ + -D_ENABLE_SW_BEACON \ + -DEFUSE_REPG_WORKAROUND \ + -DENABLE_TKIP11N \ + -DFOR_ANDROID_X86 \ + -DCONFIG_MP \ + # +endif + +#it will fail to compile in suse linux enterprise 10 sp2. This flag is to solve this problem. +ifeq ($(shell uname -r | cut -d. -f1,2,3,4), 2.6.16.60-0) + EXTRA_CFLAGS += -DOPENSUSE_SLED=1 +else + EXTRA_CFLAGS += -DOPENSUSE_SLED=0 +endif + +# Switch AP will fail in moblin2. This flag is to solve this issue. +ifeq ($(shell uname -r | cut -d. -f6 | cut -d- -f1), moblin2) + EXTRA_CFLAGS += -DFOR_MOBLIN +endif + +EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/wireless +EXTRA_CFLAGS += -std=gnu89 +EXTRA_CFLAGS += -O2 +EXTRA_CFLAGS += -mhard-float -DCONFIG_FORCE_HARD_FLOAT=y +EXTRA_CFLAGS += -DTHOMAS_TURBO +#flag for single module compile +EXTRA_CFLAGS += -DBUILT_IN_RTLLIB +#EXTRA_CFLAGS += -DCONFIG_RTLWIFI_DEBUGFS +ifeq ($(NIC_SELECT),RTL8190P) +r8190_pci-objs := rtl_core.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_dm.o \ + rtl_pm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl8192e/r8190P_hwimg.o \ + rtl8192e/r8190P_rtl8256.o \ + rtl8192e/r8192E_dev.o \ + rtl8192e/r8192E_phy.o \ + rtl8192e/r8192E_firmware.o \ + rtl8192e/r8192E_cmdpkt.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o + +obj-m := r8190_pci.o +endif +ifeq ($(NIC_SELECT),RTL8192E) +r8192e_pci-objs := rtl_core.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_dm.o \ + rtl_pm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl8192e/r8192E_dev.o \ + rtl8192e/r8192E_phy.o \ + rtl8192e/r8192E_firmware.o \ + rtl8192e/r8192E_cmdpkt.o \ + rtl8192e/r8192E_hwimg.o \ + rtl8192e/r8190P_rtl8256.o \ + rtllib/rtllib_rx.o \ + rtllib/rtllib_softmac.o \ + rtllib/rtllib_tx.o \ + rtllib/rtllib_wx.o \ + rtllib/rtllib_module.o \ + rtllib/rtllib_softmac_wx.o \ + rtllib/rtl819x_HTProc.o \ + rtllib/rtl819x_TSProc.o \ + rtllib/rtl819x_BAProc.o \ + rtllib/dot11d.o \ + rtllib/rtllib_crypt.o \ + rtllib/rtllib_crypt_tkip.o \ + rtllib/rtllib_crypt_ccmp.o \ + rtllib/rtllib_crypt_wep.o +obj-m := r8192e_pci.o +endif +ifeq ($(NIC_SELECT),RTL8192SE) +r8192se_pci-objs := rtl_core.o \ + rtl_regd.o \ + rtl_rfkill.o \ + rtl_eeprom.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_pm.o \ + rtl_ps.o \ + rtl_dm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl8192s/r8192S_dev.o \ + rtl8192s/r8192S_Efuse.o \ + rtl8192s/r8192S_phy.o \ + rtl8192s/r8192S_firmware.o \ + rtl8192s/r8192S_rtl6052.o \ + rtl8192s/r8192S_hwimg.o \ + rtl8192s/r8192S_led.o \ + rtl8192s/r8192S_mp.o \ + rtl8192s/r8192S_scan.o \ + rtllib/rtllib_rx.o \ + rtllib/rtllib_softmac.o \ + rtllib/rtllib_tx.o \ + rtllib/rtllib_wx.o \ + rtllib/rtllib_module.o \ + rtllib/rtllib_softmac_wx.o \ + rtllib/rtl819x_HTProc.o \ + rtllib/rtl819x_TSProc.o \ + rtllib/rtl819x_BAProc.o \ + rtllib/dot11d.o \ + rtllib/rtllib_crypt.o \ + rtllib/rtllib_crypt_tkip.o \ + rtllib/rtllib_crypt_ccmp.o \ + rtllib/rtllib_crypt_wep.o \ + rtllib/wapi.o \ + rtllib/wapi_interface.o +# rtl8192e/r8190P_rtl8256.o +obj-m := r8192se_pci.o +endif + +ifeq ($(NIC_SELECT),RTL8192CE) +r8192ce_pci-objs := rtl_core.o \ + rtl_eeprom.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_pm.o \ + rtl_ps.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl8192c/r8192C_dev.o \ + rtl8192c/r8192C_Efuse.o \ + rtl8192c/r8192C_phy.o \ + rtl8192c/r8192C_firmware.o \ + rtl8192c/r8192C_dm.o \ + rtl8192c/r8192C_rtl6052.o \ + rtl8192c/r8192C_hwimg.o \ + rtl8192c/r8192C_led.o \ + rtl8192c/r8192C_com.o \ + rtl8192c/r8192C_PhyParam.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o +obj-m := r8192ce_pci.o +endif + +ifeq ($(NIC_SELECT),RTL8191SE_MESH) +r8192se_pci_mesh-objs := rtl_core.o \ + rtl_regd.o \ + rtl_rfkill.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_dm.o \ + rtl_pm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl_mesh.o \ + rtl8192s/r8192S_dev.o \ + rtl8192s/r8192S_Efuse.o \ + rtl8192s/r8192S_phy.o \ + rtl8192s/r8192S_firmware.o \ + rtl8192s/r8192S_rtl6052.o \ + rtl8192s/r8192S_hwimg.o \ + rtl8192s/r8192S_led.o \ + rtl8192s/r8192S_mp.o \ + rtl8192s/r8192S_scan.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o \ + ../../mshclass/msh_class.o \ + ../../mshclass/mesh_8192_util.o \ + ../../mshclass/rtl8192_mesh.o \ + ../../mshclass/rtl8192s_sme.o \ + ../../mshclass/rtl8192_proc.o \ + ../../mshclass/8192s_pathsel.o \ + ../../mshclass/hash_table.o \ + ../../mshclass/rtl8192_sha1.o \ + ../../mshclass/rtl8192_sha256.o \ + ../../mshclass/rtl8192_aes.o \ + ../../mshclass/mesh_abbr_handshk.o \ + ../../mshclass/rtl8192_bn_ctx.o \ + ../../mshclass/rtl8192_bn_asm.o \ + ../../mshclass/rtl8192_bn_gcd.o \ + ../../mshclass/rtl8192_bn_mont.o \ + ../../mshclass/rtl8192_bn_recp.o \ + ../../mshclass/rtl8192_bn_lib.o \ + ../../mshclass/mesh_ath.o \ + ../../mshclass/pathselection.o \ + ../../mshclass/tree_proactive.o +# rtl8192e/r8190P_rtl8256.o +obj-m := r8192se_pci_mesh.o +endif + + +KSRC := /lib/modules/$(KVER)/build +INSTALL_PREFIX := +IMG_DIR := /lib/firmware/ +all: modules + +modules: + $(MAKE) -C $(KSRC) M=$(PWD) CC=$(CC) modules +install: modules +ifeq ($(NIC_SELECT),RTL8190P) + install -p -m 644 r8190_pci.ko $(MODDESTDIR) +endif +ifeq ($(NIC_SELECT),RTL8192E) + install -p -m 644 r8192e_pci.ko $(MODDESTDIR) +endif +ifeq ($(NIC_SELECT),RTL8192SE) + install -p -m 644 r8192se_pci.ko $(MODDESTDIR) +endif +ifeq ($(NIC_SELECT),RTL8192CE) + install -p -m 644 r8192ce_pci.ko $(MODDESTDIR) +endif +ifeq ($(NIC_SELECT),RTL8191SE_MESH) + cp ../../script/mesh-tools /usr/share/enhanced-easy-network/ -rf + cp ../../script/mesh.conf /etc/ + cp ../../script/wpa_mesh_tkip.conf /etc/ + cp ../../script/wpa_mesh_ccmp.conf /etc/ + chmod 777 ../../script/do_install + ../../script/do_install + install -p -m 644 r8192se_pci_mesh.ko $(MODDESTDIR) +endif + + depmod -a + @#copy firmware img to target fold + $(shell [ -d "$(IMG_DIR)/`uname -r`" ] && cp -fr $(RTL819x_FIRM_DIR)/$(NIC_SELECT) $(IMG_DIR)/`uname -r`/.) + $(shell [ ! -d "$(IMG_DIR)/`uname -r`" ] && cp -fr $(RTL819x_FIRM_DIR)/$(NIC_SELECT) $(IMG_DIR)/.) +uninstall: +ifeq ($(NIC_SELECT),RTL8190P) + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8190_pci.ko) +endif +ifeq ($(NIC_SELECT),RTL8192E) + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192e_pci.ko) +endif +ifeq ($(NIC_SELECT),RTL8192SE) + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192se_pci.ko) +endif +ifeq ($(NIC_SELECT),RTL8192CE) + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192ce_pci.ko) +endif +ifeq ($(NIC_SELECT),RTL8191SE_MESH) + rm -f /etc/wpa_mesh_tkip.conf + rm -f /etc/wpa_mesh_ccmp.conf + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192se_pci_mesh.ko) +endif + depmod -a + @#delete the firmware img + @rm -fr /lib/firmware/$(NIC_SELECT) + @rm -fr /lib/firmware/`uname -r`/$(NIC_SELECT) +else +###################### KERNEL 2.4 ################################ +LD := ld +KSRC := /lib/modules/$(KVER)/build +CONFIG_FILE := $(KSRC)/include/linux/autoconf.h +CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall +CFLAGS += -I$(KSRC)/include -I. +CFLAGS += -DMODVERSIONS -DEXPORT_SYMTAB -include $(KSRC)/include/linux/modversions.h +#CFLAGS += -D__NO_VERSION__ -DEXPORT_SYMTAB + +ifeq ($(NIC_SELECT),RTL8190P) +sub_folder = rtl8192e +CFLAGS += -DRTL8190P +CFLAGS+=-DEEPROM_OLD_FORMAT_SUPPORT=1 +#CFLAGS +=-DCONFIG_RTLWIFI_DEBUGFS +endif + +ifeq ($(NIC_SELECT),RTL8192E) +sub_folder = rtl8192e +CFLAGS += -DRTL8192E +CFLAGS+=-DEEPROM_OLD_FORMAT_SUPPORT=1 +CFLAGS+=-DENABLE_GPIO_RADIO_CTL +#CFLAGS += -DENABLE_IPS +#CFLAGS += -DENABLE_IPS +#CFLAGS +=-DCONFIG_RTLWIFI_DEBUGFS +endif + +ifeq ($(NIC_SELECT),RTL8192SE) +sub_folder = rtl8192s +CFLAGS += -DRTL8192SE +CFLAGS += -DEEPROM_OLD_FORMAT_SUPPORT=0 +CFLAGS += -DRTL92SE_FPGA_VERIFY=0 +CFLAGS += -DDEMO_BOARD_SUPPORT=1 +CFLAGS += -DRTL8192SU_DISABLE_CCK_RATE=0 +CFLAGS += -DRTL8192S_DISABLE_FW_DM=0 +CFLAGS += -DHAL_MAC_ENABLE=1 +CFLAGS += -DHAL_BB_ENABLE=1 +CFLAGS += -DHAL_RF_ENABLE=1 +CFLAGS += -DRTL8192S_PREPARE_FOR_NORMAL_RELEASE=1 +CFLAGS += -DDISABLE_BB_RF=0 +CFLAGS += -DRTL8190_Download_Firmware_From_Header=1 +#CFLAGS += -DRTL8192S_WAPI_SUPPORT=1 +#CFLAGS +=-DCONFIG_RTLWIFI_DEBUGFS +#CFLAGS += -DCONFIG_PM_RTL +#CFLAGS += -DENABLE_GPIO_RADIO_CTL +#EXTRA_CFLAGS += -DCONFIG_PM +#EXTRA_CFLAGS += -DENABLE_IPS +#EXTRA_CFLAGS += -DENABLE_LPS +#EXTRA_CFLAGS += -DCONFIG_ASPM_OR_D3 +#CFLAGS += -DENABLE_AMSDU +#CFLAGS += -DADHOC_11N +endif + +ifeq ($(NIC_SELECT),RTL8191SE_MESH) +sub_folder = rtl8192s +CFLAGS += -DRTL8192SE +CFLAGS +=-DEEPROM_OLD_FORMAT_SUPPORT=1 +#CFLAGS +=-DCONFIG_RTLWIFI_DEBUGFS +CFLAGS += -DEEPROM_OLD_FORMAT_SUPPORT=0 +CFLAGS += -DRTL92SE_FPGA_VERIFY=0 +CFLAGS += -DDEMO_BOARD_SUPPORT=1 +CFLAGS += -DRTL8192SU_DISABLE_CCK_RATE=0 +CFLAGS += -DRTL8192S_DISABLE_FW_DM=0 +CFLAGS += -DHAL_MAC_ENABLE=1 +CFLAGS += -DHAL_BB_ENABLE=1 +CFLAGS += -DHAL_RF_ENABLE=1 +CFLAGS += -DRTL8192S_PREPARE_FOR_NORMAL_RELEASE=1 +CFLAGS += -DDISABLE_BB_RF=0 +CFLAGS += -DCONFIG_PM_RTL +CFLAGS += -DENABLE_GPIO_RADIO_CTL +CFLAGS += -DRTL8190_Download_Firmware_From_Header=1 +CFLAGS += -DENABLE_IPS +CFLAGS += -DENABLE_LPS +CFLAGS += -DCONFIG_ASPM_OR_D3 +CFLAGS += -D_RTL8192_EXT_PATCH_ \ + -DMESH_8192_SPECIFIED \ + -D_MESH_DEBUG_ \ + -DTREE_BASED_ROUTING_ENABLE \ + -DMESH_PATHSEL_DBG_LV=0 \ + -DMESH_PATHSEL_DBG_SIMPLE=0 \ + -DMESH_PATHSEL_DBG_TEST=0\ + -DBUILT_IN_MSHCLASS \ + -DCUSTOMER_ID_INTEL_CMPC \ + -DENABLE_AMSDU +endif +CFLAGS += -DTHOMAS_TURBO +CFLAGS += -DENABLE_DOT11D + +#flag for single module compile +CFLAGS += -DBUILT_IN_RTLLIB +CFLAGS += -DBUILT_IN_CRYPTO +#CFLAGS += -DENABLE_TKIP11N + +SMP := $(shell $(CC) $(CFLAGS) -E -dM $(CONFIG_FILE) | \ + grep CONFIG_SMP | awk '{print $$3}') +ifneq ($(SMP),1) + SMP := 0 +endif +ifeq ($(SMP),1) + CFLAGS += -D__SMP__ +endif +OBJS := ${patsubst %.c, %.o, ${wildcard *.c}} + +ifeq ($(NIC_SELECT),RTL8190P) +all:r8190_pci.o +r8190_pci.o: \ + rtl_core.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_dm.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_pm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl8192e/r8190P_rtl8256.o \ + rtl8192e/r8190P_hwimg.o \ + rtl8192e/r8192E_dev.o \ + rtl8192e/r8192E_cmdpkt.o\ + rtl8192e/r8192E_firmware.o \ + rtl8192e/r8192E_phy.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o \ + ../../rtllib/api.o \ + ../../rtllib/compress.o \ + ../../rtllib/digest.o \ + ../../rtllib/cipher.o \ + ../../rtllib/scatterwalk.o \ + ../../rtllib/arc4.o \ + ../../rtllib/michael_mic.o \ + ../../rtllib/aes.o \ + ../../rtllib/proc.o + + $(LD) -r $^ -o $@ +install:r8190_pci.o + install -p -m 644 r8190_pci.o $(MODDESTDIR) + @depmod -a +uninstall: + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8190_pci.o) + @depmod -a +endif + +ifeq ($(NIC_SELECT),RTL8192E) +all:r8192e_pci.o +r8192e_pci.o: \ + rtl_core.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_dm.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_pm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl8192e/r8192E_dev.o \ + rtl8192e/r8190P_rtl8256.o \ + rtl8192e/r8192E_hwimg.o \ + rtl8192e/r8192E_cmdpkt.o\ + rtl8192e/r8192E_firmware.o \ + rtl8192e/r8192E_phy.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o \ + ../../rtllib/api.o \ + ../../rtllib/compress.o \ + ../../rtllib/digest.o \ + ../../rtllib/cipher.o \ + ../../rtllib/scatterwalk.o \ + ../../rtllib/arc4.o \ + ../../rtllib/michael_mic.o \ + ../../rtllib/aes.o \ + ../../rtllib/proc.o + + $(LD) -r $^ -o $@ +install: + install -p -m 644 r8192e_pci.o $(MODDESTDIR) + @depmod -a +uninstall: + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192e_pci.o) + @depmod -a +endif + +ifeq ($(NIC_SELECT),RTL8192SE) +all:r8192se_pci.o +r8192se_pci.o: rtl_core.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_dm.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_pm.o \ + rtl8192s/r8192S_dev.o \ + rtl8192s/r8192S_Efuse.o \ + rtl8192s/r8192S_firmware.o \ + rtl8192s/r8192S_hwimg.o \ + rtl8192s/r8192S_led.o \ + rtl8192s/r8192S_phy.o \ + rtl8192s/r8192S_rtl6052.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o \ + ../../rtllib/api.o \ + ../../rtllib/compress.o \ + ../../rtllib/digest.o \ + ../../rtllib/cipher.o \ + ../../rtllib/scatterwalk.o \ + ../../rtllib/arc4.o \ + ../../rtllib/michael_mic.o \ + ../../rtllib/aes.o \ + ../../rtllib/proc.o \ + ../../rtllib/wapi.o \ + ../../rtllib/wapi_interface.o +# rtl8192e/r8192E_cmdpkt.o +# rtl8192e/r8190P_rtl8256.o + $(LD) -r $^ -o $@ +install:r8192se_pci.o + install -p -m 644 r8192se_pci.o $(MODDESTDIR) + @depmod -a +uninstall: + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192se_pci.o) + @depmod -a +endif + +ifeq ($(NIC_SELECT),RTL8191SE_MESH ) +all:r8192se_pci_mesh.o +r8192se_pci_mesh.o: \ + rtl_core.o \ + rtl_eeprom.o \ + rtl_ps.o \ + rtl_dm.o \ + rtl_wx.o \ + rtl_cam.o \ + rtl_pm.o \ + rtl_debug.o \ + rtl_ethtool.o \ + rtl_mesh.o \ + rtl8192s/r8192S_dev.o \ + rtl8192s/r8192S_Efuse.o \ + rtl8192s/r8192S_firmware.o \ + rtl8192s/r8192S_hwimg.o \ + rtl8192s/r8192S_led.o \ + rtl8192s/r8192S_phy.o \ + rtl8192s/r8192S_rtl6052.o \ + ../../rtllib/rtllib_rx.o \ + ../../rtllib/rtllib_softmac.o \ + ../../rtllib/rtllib_tx.o \ + ../../rtllib/rtllib_wx.o \ + ../../rtllib/rtllib_module.o \ + ../../rtllib/rtllib_softmac_wx.o \ + ../../rtllib/rtl819x_HTProc.o \ + ../../rtllib/rtl819x_TSProc.o \ + ../../rtllib/rtl819x_BAProc.o \ + ../../rtllib/dot11d.o \ + ../../rtllib/rtllib_crypt.o \ + ../../rtllib/rtllib_crypt_tkip.o \ + ../../rtllib/rtllib_crypt_ccmp.o \ + ../../rtllib/rtllib_crypt_wep.o \ + ../../mshclass/msh_class.o \ + ../../mshclass/mesh_8192_util.o \ + ../../mshclass/rtl8192_mesh.o \ + ../../mshclass/rtl8192s_sme.o \ + ../../mshclass/rtl8192_proc.o \ + ../../mshclass/8192s_pathsel.o \ + ../../mshclass/hash_table.o \ + ../../mshclass/pathselection.o \ + ../../mshclass/tree_proactive.o \ + ../../mshclass/hash_table.o \ + ../../mshclass/sha1.o \ + ../../mshclass/sha256.o \ + ../../mshclass/aes.o \ + ../../mshclass/mesh_abbr_handshk.o \ + ../../mshclass/bn_ctx.o \ + ../../mshclass/bn_asm.o \ + ../../mshclass/bn_gcd.o \ + ../../mshclass/bn_mont.o \ + ../../mshclass/bn_recp.o \ + ../../mshclass/bn_lib.o \ + ../../mshclass/mesh_ath.o +# rtl8192e/r8190P_rtl8256.o \ +# rtl8192e/r8192E_cmdpkt.o + $(LD) -r $^ -o $@ +install:r8192se_pci_mesh.o + install -p -m 644 r8192se_pci_mesh.o $(MODDESTDIR) + @depmod -a +uninstall: + $(shell [ -d $(MODDESTDIR) ] && rm -f $(MODDESTDIR)/r8192se_pci_mesh.o) + @depmod -a +endif +endif + +.PHONY:clean +clean: + rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~ + rm -fr .tmp_versions + rm -fr Modules.symvers + rm -fr Module.symvers + rm -fr Module.markers + rm -fr modules.order + rm -fr tags + @make -C $(sub_folder)/ clean --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_pm.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl_pm.h @@ -0,0 +1,39 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifdef CONFIG_PM_RTL + +#ifndef R8192E_PM_H +#define R8192E_PM_H + +#include +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) +#define pm_message_t u32 +#endif + +int rtl8192E_save_state (struct pci_dev *dev, pm_message_t state); +int rtl8192E_suspend (struct pci_dev *dev, pm_message_t state); +int rtl8192E_resume (struct pci_dev *dev); +int rtl8192E_enable_wake (struct pci_dev *dev, pm_message_t state, int enable); + +#endif + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl_core.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl_core.c @@ -0,0 +1,5975 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#undef LOOP_TEST +#undef RX_DONT_PASS_UL +#undef DEBUG_EPROM +#undef DEBUG_RX_VERBOSE +#undef DUMMY_RX +#undef DEBUG_ZERO_RX +#undef DEBUG_RX_SKB +#undef DEBUG_TX_FRAG +#undef DEBUG_RX_FRAG +#undef DEBUG_TX_FILLDESC +#undef DEBUG_TX +#undef DEBUG_IRQ +#undef DEBUG_RX +#undef DEBUG_RXALLOC +#undef DEBUG_REGISTERS +#undef DEBUG_RING +#undef DEBUG_IRQ_TASKLET +#undef DEBUG_TX_ALLOC +#undef DEBUG_TX_DESC + +#include +#include +#include "rtl_core.h" +#if defined RTL8192CE +#include "rtl8192c/r8192C_phy.h" +#include "rtl8192c/r8192C_phyreg.h" +#include "rtl8192c/r8192C_rtl6052.h" +#include "rtl8192c/r8192C_Efuse.h" +#include "rtl8192c/r8192C_dm.h" +#elif defined RTL8192SE +#include "rtl8192s/r8192S_phy.h" +#include "rtl8192s/r8192S_phyreg.h" +#include "rtl8192s/r8192S_rtl6052.h" +#include "rtl8192s/r8192S_Efuse.h" +#else +#include "rtl8192e/r8192E_phy.h" +#include "rtl8192e/r8192E_phyreg.h" +#include "rtl8192e/r8190P_rtl8256.h" +#include "rtl8192e/r8192E_cmdpkt.h" +#endif + +#include "rtl_wx.h" +#ifndef RTL8192CE +#include "rtl_dm.h" +#endif + +#ifdef CONFIG_PM_RTL +#include "rtl_pm.h" +#endif + +#ifdef _RTL8192_EXT_PATCH_ +#include "../../mshclass/msh_class.h" +#include "rtl_mesh.h" +#endif + +#ifdef RTL8192S_WAPI_SUPPORT +#include "../../rtllib/wapi.h" +#include "../../rtllib/wapi_interface.h" +#endif + +int hwwep = 1; +static int channels = 0x3fff; +#ifdef _RTL8192_EXT_PATCH_ +char* ifname = "ra%d"; +#else +char* ifname = "wlan%d"; +#endif + +u32 rt_global_debug_component = \ + COMP_ERR ; + +#ifdef RTL8192SE +struct rtl819x_ops rtl8192se_ops = { + .nic_type = NIC_8192SE, + .get_eeprom_size = rtl8192se_get_eeprom_size, + .init_adapter_variable = rtl8192se_InitializeVariables, + .init_before_adapter_start = MacConfigBeforeFwDownload, + .initialize_adapter = rtl8192se_adapter_start, + .link_change = rtl8192se_link_change, + .tx_fill_descriptor = rtl8192se_tx_fill_desc, + .tx_fill_cmd_descriptor = rtl8192se_tx_fill_cmd_desc, + .rx_query_status_descriptor = rtl8192se_rx_query_status_desc, + .rx_command_packet_handler = rtl8192se_RxCommandPacketHandle, + .stop_adapter = rtl8192se_halt_adapter, + .update_ratr_table = rtl8192se_update_ratr_table, + .irq_enable = rtl8192se_EnableInterrupt, + .irq_disable = rtl8192se_DisableInterrupt, + .irq_clear = rtl8192se_ClearInterrupt, + .rx_enable = rtl8192se_enable_rx, + .tx_enable = rtl8192se_enable_tx, + .interrupt_recognized = rtl8192se_interrupt_recognized, + .TxCheckStuckHandler = rtl8192se_HalTxCheckStuck, + .RxCheckStuckHandler = rtl8192se_HalRxCheckStuck, +}; +#elif defined RTL8192CE +struct rtl819x_ops rtl8192ce_ops = { + .nic_type = NIC_8192CE, + .get_eeprom_size = rtl8192ce_get_eeprom_size, + .init_adapter_variable = rtl8192ce_InitializeVariables, + .initialize_adapter = rtl8192ce_adapter_start, + .link_change = rtl8192ce_link_change, + .tx_fill_descriptor = rtl8192ce_tx_fill_desc, + .tx_fill_cmd_descriptor = rtl8192ce_tx_fill_cmd_desc, + .rx_query_status_descriptor = rtl8192ce_rx_query_status_desc, + .rx_command_packet_handler = NULL, + .stop_adapter = rtl8192ce_halt_adapter, + .update_ratr_table = rtl8192ce_UpdateHalRATRTable, + .irq_enable = rtl8192ce_EnableInterrupt, + .irq_disable = rtl8192ce_DisableInterrupt, + .irq_clear = rtl8192ce_ClearInterrupt, + .rx_enable = rtl8192ce_enable_rx, + .tx_enable = rtl8192ce_enable_tx, + .interrupt_recognized = rtl8192ce_interrupt_recognized, + .TxCheckStuckHandler = rtl8192ce_HalTxCheckStuck, + .RxCheckStuckHandler = rtl8192ce_HalRxCheckStuck, +}; +#else +struct rtl819x_ops rtl819xp_ops = { + .nic_type = NIC_UNKNOWN, + .get_eeprom_size = rtl8192_get_eeprom_size, + .init_adapter_variable = rtl8192_InitializeVariables, + .initialize_adapter = rtl8192_adapter_start, + .link_change = rtl8192_link_change, + .tx_fill_descriptor = rtl8192_tx_fill_desc, + .tx_fill_cmd_descriptor = rtl8192_tx_fill_cmd_desc, + .rx_query_status_descriptor = rtl8192_rx_query_status_desc, + .rx_command_packet_handler = NULL, + .stop_adapter = rtl8192_halt_adapter, + .update_ratr_table = rtl8192_update_ratr_table, + .irq_enable = rtl8192_EnableInterrupt, + .irq_disable = rtl8192_DisableInterrupt, + .irq_clear = rtl8192_ClearInterrupt, + .rx_enable = rtl8192_enable_rx, + .tx_enable = rtl8192_enable_tx, + .interrupt_recognized = rtl8192_interrupt_recognized, + .TxCheckStuckHandler = rtl8192_HalTxCheckStuck, + .RxCheckStuckHandler = rtl8192_HalRxCheckStuck, +}; +#endif + +static struct pci_device_id rtl8192_pci_id_tbl[] __devinitdata = { +#ifdef RTL8190P + /* Realtek */ + /* Dlink */ + {RTL_PCI_DEVICE(0x10ec, 0x8190, rtl819xp_ops)}, + /* Corega */ + {RTL_PCI_DEVICE(0x07aa, 0x0045, rtl819xp_ops)}, + {RTL_PCI_DEVICE(0x07aa, 0x0046, rtl819xp_ops)}, +#elif defined(RTL8192E) + /* Realtek */ + {RTL_PCI_DEVICE(0x10ec, 0x8192, rtl819xp_ops)}, + /* Corega */ + {RTL_PCI_DEVICE(0x07aa, 0x0044, rtl819xp_ops)}, + {RTL_PCI_DEVICE(0x07aa, 0x0047, rtl819xp_ops)}, +#elif defined(RTL8192SE) /*8192SE*/ + {RTL_PCI_DEVICE(0x10ec, 0x8171, rtl8192se_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x8172, rtl8192se_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x8173, rtl8192se_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x8174, rtl8192se_ops)}, +#elif defined(RTL8192CE) /*8192CE*/ + {RTL_PCI_DEVICE(0x10ec, 0x8191, rtl8192ce_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x8178, rtl8192ce_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x8177, rtl8192ce_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x8176, rtl8192ce_ops)}, + {RTL_PCI_DEVICE(0x10ec, 0x092D, rtl8192ce_ops)}, +#endif + {} +}; +MODULE_DEVICE_TABLE(pci, rtl8192_pci_id_tbl); + +static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, + const struct pci_device_id *id); +static void __devexit rtl8192_pci_disconnect(struct pci_dev *pdev); + +static struct pci_driver rtl8192_pci_driver = { + .name = DRV_NAME, /* Driver name */ + .id_table = rtl8192_pci_id_tbl, /* PCI_ID table */ + .probe = rtl8192_pci_probe, /* probe fn */ + .remove = __devexit_p(rtl8192_pci_disconnect), /* remove fn */ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0) +#ifdef CONFIG_PM_RTL + .suspend = rtl8192E_suspend, /* PM suspend fn */ + .resume = rtl8192E_resume, /* PM resume fn */ +#else + .suspend = NULL, /* PM suspend fn */ + .resume = NULL, /* PM resume fn */ +#endif +#endif +}; + +/**************************************************************************** + -----------------------------IO STUFF------------------------- +*****************************************************************************/ +bool +PlatformIOCheckPageLegalAndGetRegMask( + u32 u4bPage, + u8* pu1bPageMask +) +{ + bool bReturn = false; + *pu1bPageMask = 0xfe; + + switch(u4bPage) + { + case 1: case 2: case 3: case 4: + case 8: case 9: case 10: case 12: case 13: + bReturn = true; + *pu1bPageMask = 0xf0; + break; + + default: + bReturn = false; + break; + } + + return bReturn; +} + +void write_nic_io_byte(struct net_device *dev, int x,u8 y) +{ + u32 u4bPage = (x >> 8); + u8 u1PageMask = 0; + bool bIsLegalPage = false; + + if(u4bPage == 0) + { + outb(y&0xff,dev->base_addr +x); + }else + { + bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage, &u1PageMask); + if(bIsLegalPage) + { + u8 u1bPsr = read_nic_io_byte(dev, PSR); + + write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) | (u8)u4bPage)); + write_nic_io_byte(dev, (x & 0xff), y); + write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask)); + + }else + { + ; + } + } + + +} + +void write_nic_io_word(struct net_device *dev, int x,u16 y) +{ + u32 u4bPage = (x >> 8); + u8 u1PageMask = 0; + bool bIsLegalPage = false; + + if(u4bPage == 0) + { + outw(y,dev->base_addr +x); + }else + { + bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage, &u1PageMask); + if(bIsLegalPage) + { + u8 u1bPsr = read_nic_io_byte(dev, PSR); + + write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) | (u8)u4bPage)); + write_nic_io_word(dev, (x & 0xff), y); + write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask)); + + }else + { + ; + } + } + +} + +void write_nic_io_dword(struct net_device *dev, int x,u32 y) +{ + u32 u4bPage = (x >> 8); + u8 u1PageMask = 0; + bool bIsLegalPage = false; + + if(u4bPage == 0) + { + outl(y,dev->base_addr +x); + }else + { + bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage, &u1PageMask); + if(bIsLegalPage) + { + u8 u1bPsr = read_nic_io_byte(dev, PSR); + + write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) | (u8)u4bPage)); + write_nic_io_dword(dev, (x & 0xff), y); + write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask)); + + }else + { + ; + } + } + +} +u8 read_nic_io_byte(struct net_device *dev, int x) +{ + u32 u4bPage = (x >> 8); + u8 u1PageMask = 0; + bool bIsLegalPage = false; + u8 Data = 0; + + if(u4bPage == 0) + { + return 0xff&inb(dev->base_addr +x); + }else + { + bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage, &u1PageMask); + if(bIsLegalPage) + { + u8 u1bPsr = read_nic_io_byte(dev, PSR); + + write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) | (u8)u4bPage)); + Data = read_nic_io_byte(dev, (x & 0xff)); + write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask)); + + }else + { + ; + } + } + + return Data; +} + +u16 read_nic_io_word(struct net_device *dev, int x) +{ + u32 u4bPage = (x >> 8); + u8 u1PageMask = 0; + bool bIsLegalPage = false; + u16 Data = 0; + + if(u4bPage == 0) + { + return inw(dev->base_addr +x); + }else + { + bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage, &u1PageMask); + if(bIsLegalPage) + { + u8 u1bPsr = read_nic_io_byte(dev, PSR); + + write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) | (u8)u4bPage)); + Data = read_nic_io_word(dev, (x & 0xff)); + write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask)); + + }else + { + ; + } + } + + return Data; +} + +u32 read_nic_io_dword(struct net_device *dev, int x) +{ + u32 u4bPage = (x >> 8); + u8 u1PageMask = 0; + bool bIsLegalPage = false; + u32 Data = 0; + + if(u4bPage == 0) + { + return inl(dev->base_addr +x); + }else + { + bIsLegalPage = PlatformIOCheckPageLegalAndGetRegMask(u4bPage, &u1PageMask); + if(bIsLegalPage) + { + u8 u1bPsr = read_nic_io_byte(dev, PSR); + + write_nic_io_byte(dev, PSR, ((u1bPsr & u1PageMask) | (u8)u4bPage)); + Data = read_nic_io_dword(dev, (x & 0xff)); + write_nic_io_byte(dev, PSR, (u1bPsr & u1PageMask)); + + }else + { + ; + } + } + + return Data; +} + +u8 read_nic_byte(struct net_device *dev, int x) +{ +#ifdef CONFIG_RTL8192_IO_MAP + return read_nic_io_byte(dev, x); +#else + return 0xff&readb((u8*)dev->mem_start +x); +#endif +} + +u32 read_nic_dword(struct net_device *dev, int x) +{ +#ifdef CONFIG_RTL8192_IO_MAP + return read_nic_io_dword(dev, x); +#else + return readl((u8*)dev->mem_start +x); +#endif +} + +u16 read_nic_word(struct net_device *dev, int x) +{ +#ifdef CONFIG_RTL8192_IO_MAP + return read_nic_io_word(dev, x); +#else + return readw((u8*)dev->mem_start +x); +#endif +} + +void write_nic_byte(struct net_device *dev, int x,u8 y) +{ +#ifdef CONFIG_RTL8192_IO_MAP + write_nic_io_byte(dev, x, y); +#else + writeb(y,(u8*)dev->mem_start +x); +#if !(defined RTL8192SE || defined RTL8192CE) + udelay(20); +#endif +#endif +} + +void write_nic_dword(struct net_device *dev, int x,u32 y) +{ +#ifdef CONFIG_RTL8192_IO_MAP + write_nic_io_dword(dev, x, y); +#else + writel(y,(u8*)dev->mem_start +x); +#if !(defined RTL8192SE || defined RTL8192CE) + udelay(20); +#endif +#endif +} + +void write_nic_word(struct net_device *dev, int x,u16 y) +{ +#ifdef CONFIG_RTL8192_IO_MAP + write_nic_io_word(dev, x, y); +#else + writew(y,(u8*)dev->mem_start +x); +#if !(defined RTL8192SE || defined RTL8192CE) + udelay(20); +#endif +#endif +} + +/**************************************************************************** + -----------------------------GENERAL FUNCTION------------------------- +*****************************************************************************/ + +void +MgntDisconnectIBSS( + struct net_device* dev +) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 OpMode; + u8 i; + bool bFilterOutNonAssociatedBSSID = false; + + + priv->rtllib->state = RTLLIB_NOLINK; + + for(i=0;i<6;i++) priv->rtllib->current_network.bssid[i]= 0x55; + + priv->OpMode = RT_OP_MODE_NO_LINK; + priv->rtllib->SetHwRegHandler(dev, HW_VAR_BSSID, priv->rtllib->current_network.bssid); + OpMode = RT_OP_MODE_NO_LINK; + priv->rtllib->SetHwRegHandler(dev, HW_VAR_MEDIA_STATUS, &OpMode); + rtllib_stop_send_beacons(priv->rtllib); + + bFilterOutNonAssociatedBSSID = false; + priv->rtllib->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, (u8*)(&bFilterOutNonAssociatedBSSID)); + notify_wx_assoc_event(priv->rtllib); + +} + +void +MlmeDisassociateRequest( + struct net_device* dev, + u8* asSta, + u8 asRsn + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 i; + u8 OpMode; + + RemovePeerTS(priv->rtllib, asSta); + + + if(memcpy(priv->rtllib->current_network.bssid,asSta,6) == 0) + { + priv->rtllib->state = RTLLIB_NOLINK; + + for(i=0;i<6;i++) priv->rtllib->current_network.bssid[i] = 0x22; + OpMode = RT_OP_MODE_NO_LINK; + priv->OpMode = RT_OP_MODE_NO_LINK; + priv->rtllib->SetHwRegHandler(dev, HW_VAR_MEDIA_STATUS, (u8 *)(&OpMode) ); + rtllib_disassociate(priv->rtllib); + + priv->rtllib->SetHwRegHandler(dev, HW_VAR_BSSID, priv->rtllib->current_network.bssid); + + } + +} + +void +MgntDisconnectAP( + struct net_device* dev, + u8 asRsn +) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool bFilterOutNonAssociatedBSSID = false; + + +#ifdef TO_DO + if( pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch || + (pMgntInfo->bAPSuportCCKM && pMgntInfo->bCCX8021xenable) ) + { + SecClearAllKeys(dev); + RT_TRACE(COMP_SEC, DBG_LOUD,("======>CCKM clear key...")) + } +#endif + bFilterOutNonAssociatedBSSID = false; + priv->rtllib->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, (u8*)(&bFilterOutNonAssociatedBSSID)); + MlmeDisassociateRequest( dev, priv->rtllib->current_network.bssid, asRsn ); + + priv->rtllib->state = RTLLIB_NOLINK; +} + +bool +MgntDisconnect( + struct net_device* dev, + u8 asRsn +) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#if 1 + if(priv->rtllib->ps != RTLLIB_PS_DISABLED) + { +#ifndef RTL8190P + rtl8192_hw_wakeup(dev); +#endif + } +#endif +#ifdef TO_DO + if(pMgntInfo->mActingAsAp) + { + RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnect() ===> AP_DisassociateAllStation\n")); + AP_DisassociateAllStation(dev, unspec_reason); + return true; + } +#endif + + if( priv->rtllib->state == RTLLIB_LINKED ) + { + if( priv->rtllib->iw_mode == IW_MODE_ADHOC ) + { + MgntDisconnectIBSS(dev); + } +#ifdef _RTL8192_EXT_PATCH_ + if((priv->rtllib->iw_mode == IW_MODE_INFRA ) || ((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0))) +#else + if( priv->rtllib->iw_mode == IW_MODE_INFRA ) +#endif + { +#ifdef TO_DO_LIST + SecClearAllKeys(Adapter); +#endif + MgntDisconnectAP(dev, asRsn); + } + + } + + return true; +} +bool +MgntActSet_RF_State( + struct net_device* dev, + RT_RF_POWER_STATE StateToSet, + RT_RF_CHANGE_SOURCE ChangeSource + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device * ieee = priv->rtllib; + bool bActionAllowed = false; + bool bConnectBySSID = false; + RT_RF_POWER_STATE rtState; + u16 RFWaitCounter = 0; + unsigned long flag; + RT_TRACE((COMP_PS | COMP_RF), "===>MgntActSet_RF_State(): StateToSet(%d)\n",StateToSet); + + + while(true) + { + spin_lock_irqsave(&priv->rf_ps_lock,flag); + if(priv->RFChangeInProgress) + { + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): RF Change in progress! Wait to set..StateToSet(%d).\n", StateToSet); + printk("MgntActSet_RF_State(): RF Change in progress! Wait to set..StateToSet(%d).\n", StateToSet); + #if 1 + while(priv->RFChangeInProgress) + { + RFWaitCounter ++; + RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): Wait 1 ms (%d times)...\n", RFWaitCounter); + mdelay(1); + + if(RFWaitCounter > 100) + { + RT_TRACE(COMP_ERR, "MgntActSet_RF_State(): Wait too logn to set RF\n"); + return false; + } + } + #endif + } + else + { + priv->RFChangeInProgress = true; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + break; + } + } + + rtState = priv->rtllib->eRFPowerState; + + switch(StateToSet) + { + case eRfOn: + + priv->rtllib->RfOffReason &= (~ChangeSource); + + if((ChangeSource == RF_CHANGE_BY_HW) && (priv->bHwRadioOff == true)){ + priv->bHwRadioOff = false; + } + + if(! priv->rtllib->RfOffReason) + { + priv->rtllib->RfOffReason = 0; + bActionAllowed = true; + + + if(rtState == eRfOff && ChangeSource >=RF_CHANGE_BY_HW ) + { + bConnectBySSID = true; + } + } + else{ + RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State - eRfon reject pMgntInfo->RfOffReason= 0x%x, ChangeSource=0x%X\n", priv->rtllib->RfOffReason, ChangeSource); + } + + break; + + case eRfOff: + + if((priv->rtllib->iw_mode == IW_MODE_INFRA) || (priv->rtllib->iw_mode == IW_MODE_ADHOC)) + { + if ((priv->rtllib->RfOffReason > RF_CHANGE_BY_IPS) || (ChangeSource > RF_CHANGE_BY_IPS)) + { + if(ieee->state == RTLLIB_LINKED) + priv->blinked_ingpio = true; + else + priv->blinked_ingpio = false; + MgntDisconnect(dev, disas_lv_ss); + + + + } + } + if((ChangeSource == RF_CHANGE_BY_HW) && (priv->bHwRadioOff == false)){ + priv->bHwRadioOff = true; + } + priv->rtllib->RfOffReason |= ChangeSource; + bActionAllowed = true; + break; + + case eRfSleep: + priv->rtllib->RfOffReason |= ChangeSource; + bActionAllowed = true; + break; + + default: + break; + } + + if(bActionAllowed) + { + RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): Action is allowed.... StateToSet(%d), RfOffReason(%#X)\n", StateToSet, priv->rtllib->RfOffReason); + PHY_SetRFPowerState(dev, StateToSet); + if(StateToSet == eRfOn) + { + + if(bConnectBySSID && (priv->blinked_ingpio == true)) + { + queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0); + priv->blinked_ingpio = false; + + } +#ifdef _RTL8192_EXT_PATCH_ + if(priv->rtllib->iw_mode == IW_MODE_MESH){ + queue_work_rsl(ieee->wq, &ieee->ext_start_mesh_protocol_wq); + + } +#endif + } + else if(StateToSet == eRfOff) + { + } + } + else + { + RT_TRACE((COMP_PS | COMP_RF), "MgntActSet_RF_State(): Action is rejected.... StateToSet(%d), ChangeSource(%#X), RfOffReason(%#X)\n", StateToSet, ChangeSource, priv->rtllib->RfOffReason); + } + + spin_lock_irqsave(&priv->rf_ps_lock,flag); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + + RT_TRACE((COMP_PS && COMP_RF), "<===MgntActSet_RF_State()\n"); + return bActionAllowed; +} + + +short rtl8192_get_nic_desc_num(struct net_device *dev, int prio) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtl8192_tx_ring *ring = &priv->tx_ring[prio]; + + /* For now, we reserved two free descriptor as a safety boundary + * between the tail and the head + */ + if((prio == MGNT_QUEUE) &&(skb_queue_len(&ring->queue)>10)) + printk("-----[%d]---------ring->idx=%d queue_len=%d---------\n", + prio,ring->idx, skb_queue_len(&ring->queue)); + return skb_queue_len(&ring->queue); +} + +short rtl8192_check_nic_enough_desc(struct net_device *dev, int prio) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtl8192_tx_ring *ring = &priv->tx_ring[prio]; + + if (ring->entries - skb_queue_len(&ring->queue) >= 2) { + return 1; + } else { + return 0; + } +} + +void rtl8192_tx_timeout(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + schedule_work(&priv->reset_wq); +#else + schedule_task(&priv->reset_wq); +#endif + printk("TXTIMEOUT"); +} + +void rtl8192_irq_enable(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + priv->irq_enabled = 1; + + priv->ops->irq_enable(dev); +} + +void rtl8192_irq_disable(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + priv->ops->irq_disable(dev); + + priv->irq_enabled = 0; +} + +void rtl8192_irq_clear(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + priv->ops->irq_clear(dev); +} + + +void rtl8192_set_chan(struct net_device *dev,short ch) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + RT_TRACE(COMP_CH, "=====>%s()====ch:%d\n", __FUNCTION__, ch); + if (priv->chan_forced) + return; + + priv->chan = ch; + + +#ifndef LOOP_TEST + + + if (priv->rf_set_chan) + priv->rf_set_chan(dev,priv->chan); + +#ifdef CONFIG_FW_SETCHAN + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_CHAN_SET); +#endif + +#endif +} + +void rtl8192_update_cap(struct net_device* dev, u16 cap) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_network *net = &priv->rtllib->current_network; + + priv->short_preamble = cap & WLAN_CAPABILITY_SHORT_PREAMBLE; + + { + bool ShortPreamble; + + if(cap & WLAN_CAPABILITY_SHORT_PREAMBLE) + { + { + ShortPreamble = true; + priv->rtllib->SetHwRegHandler( dev, HW_VAR_ACK_PREAMBLE, (unsigned char *)&ShortPreamble ); + } + } + else + { + { + ShortPreamble = false; + priv->rtllib->SetHwRegHandler( dev, HW_VAR_ACK_PREAMBLE, (unsigned char *)&ShortPreamble ); + } + } + } + +#ifdef RTL8192CE + if( net->mode & IEEE_G) +#elif defined RTL8192SE || defined RTL8192E || defined RTL8190P + if (net->mode & (IEEE_G|IEEE_N_24G)) +#endif + { + u8 slot_time_val; + u8 CurSlotTime = priv->slot_time; + +#ifdef RTL8192CE + if( (cap & WLAN_CAPABILITY_SHORT_SLOT_TIME) && (!(priv->rtllib->pHTInfo->RT2RT_HT_Mode & RT_HT_CAP_USE_LONG_PREAMBLE))) +#elif defined RTL8192SE || defined RTL8192E || defined RTL8190P + if ((cap & WLAN_CAPABILITY_SHORT_SLOT_TIME) && (!priv->rtllib->pHTInfo->bCurrentRT2RTLongSlotTime)) +#endif + { + if(CurSlotTime != SHORT_SLOT_TIME) + { + slot_time_val = SHORT_SLOT_TIME; + priv->rtllib->SetHwRegHandler( dev, HW_VAR_SLOT_TIME, &slot_time_val ); + } + } + else + { + if(CurSlotTime != NON_SHORT_SLOT_TIME) + { + slot_time_val = NON_SHORT_SLOT_TIME; + priv->rtllib->SetHwRegHandler( dev, HW_VAR_SLOT_TIME, &slot_time_val ); + } + } + } +} + +static struct rtllib_qos_parameters def_qos_parameters = { + {3,3,3,3}, + {7,7,7,7}, + {2,2,2,2}, + {0,0,0,0}, + {0,0,0,0} +}; + +void rtl8192_update_beacon(void *data) +{ +#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20) + struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, update_beacon_wq.work); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + struct rtllib_device* ieee = priv->rtllib; + struct rtllib_network* net = &ieee->current_network; + + if (ieee->pHTInfo->bCurrentHTSupport) + HTUpdateSelfAndPeerSetting(ieee, net); + ieee->pHTInfo->bCurrentRT2RTLongSlotTime = net->bssht.bdRT2RTLongSlotTime; + ieee->pHTInfo->RT2RT_HT_Mode = net->bssht.RT2RT_HT_Mode; + rtl8192_update_cap(dev, net->capability); +} + +#ifdef RTL8192CE +int WDCAPARA_ADD[] = {REG_EDCA_BE_PARAM,REG_EDCA_BK_PARAM,REG_EDCA_VI_PARAM,REG_EDCA_VO_PARAM}; +#else +int WDCAPARA_ADD[] = {EDCAPARA_BE,EDCAPARA_BK,EDCAPARA_VI,EDCAPARA_VO}; +#endif +void rtl8192_qos_activate(void *data) +{ +#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20) + struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, qos_activate); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif +#ifndef RTL8192CE + struct rtllib_qos_parameters *qos_parameters = &priv->rtllib->current_network.qos_data.parameters; + u8 mode = priv->rtllib->current_network.mode; + u8 u1bAIFS; + u32 u4bAcParam; +#endif + int i; + + if (priv == NULL) + return; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) + down(&priv->mutex); +#else + mutex_lock(&priv->mutex); +#endif + if(priv->rtllib->state != RTLLIB_LINKED) + goto success; + RT_TRACE(COMP_QOS,"qos active process with associate response received\n"); + + for (i = 0; i < QOS_QUEUE_NUM; i++) { +#ifdef RTL8192CE + priv->rtllib->SetHwRegHandler(dev, HW_VAR_AC_PARAM, (u8*)(&i)); +#else + u1bAIFS = qos_parameters->aifs[i] * ((mode&(IEEE_G|IEEE_N_24G)) ?9:20) + aSifsTime; + u4bAcParam = ((((u32)(qos_parameters->tx_op_limit[i]))<< AC_PARAM_TXOP_LIMIT_OFFSET)| + (((u32)(qos_parameters->cw_max[i]))<< AC_PARAM_ECW_MAX_OFFSET)| + (((u32)(qos_parameters->cw_min[i]))<< AC_PARAM_ECW_MIN_OFFSET)| + ((u32)u1bAIFS << AC_PARAM_AIFS_OFFSET)); + write_nic_dword(dev, WDCAPARA_ADD[i], u4bAcParam); +#endif + } + +success: +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) + up(&priv->mutex); +#else + mutex_unlock(&priv->mutex); +#endif +} + +static int rtl8192_qos_handle_probe_response(struct r8192_priv *priv, + int active_network, + struct rtllib_network *network) +{ + int ret = 0; + u32 size = sizeof(struct rtllib_qos_parameters); + + if(priv->rtllib->state !=RTLLIB_LINKED) + return ret; + +#ifdef _RTL8192_EXT_PATCH_ + if (!((priv->rtllib->iw_mode == IW_MODE_INFRA ) || + ((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0)))) +#else + if ((priv->rtllib->iw_mode != IW_MODE_INFRA)) +#endif + return ret; + + if (network->flags & NETWORK_HAS_QOS_MASK) { + if (active_network && + (network->flags & NETWORK_HAS_QOS_PARAMETERS)) + network->qos_data.active = network->qos_data.supported; + + if ((network->qos_data.active == 1) && (active_network == 1) && + (network->flags & NETWORK_HAS_QOS_PARAMETERS) && + (network->qos_data.old_param_count != + network->qos_data.param_count)) { + network->qos_data.old_param_count = + network->qos_data.param_count; + priv->rtllib->wmm_acm = network->qos_data.wmm_acm; + queue_work_rsl(priv->priv_wq, &priv->qos_activate); + RT_TRACE (COMP_QOS, "QoS parameters change call " + "qos_activate\n"); + } + } else { + memcpy(&priv->rtllib->current_network.qos_data.parameters,\ + &def_qos_parameters, size); + + if ((network->qos_data.active == 1) && (active_network == 1)) { + queue_work_rsl(priv->priv_wq, &priv->qos_activate); + RT_TRACE(COMP_QOS, "QoS was disabled call qos_activate \n"); + } + network->qos_data.active = 0; + network->qos_data.supported = 0; + } + + return 0; +} + +static int rtl8192_handle_beacon(struct net_device * dev, + struct rtllib_beacon * beacon, + struct rtllib_network * network) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + rtl8192_qos_handle_probe_response(priv,1,network); + + queue_delayed_work_rsl(priv->priv_wq, &priv->update_beacon_wq, 0); + return 0; + +} + +static int rtl8192_qos_association_resp(struct r8192_priv *priv, + struct rtllib_network *network) +{ + int ret = 0; + unsigned long flags; + u32 size = sizeof(struct rtllib_qos_parameters); + int set_qos_param = 0; + + if ((priv == NULL) || (network == NULL)) + return ret; + + if(priv->rtllib->state !=RTLLIB_LINKED) + return ret; + +#ifdef _RTL8192_EXT_PATCH_ + if (!((priv->rtllib->iw_mode == IW_MODE_INFRA ) || + ((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh == 0)))) +#else + if ((priv->rtllib->iw_mode != IW_MODE_INFRA)) +#endif + return ret; + + spin_lock_irqsave(&priv->rtllib->lock, flags); + if (network->flags & NETWORK_HAS_QOS_PARAMETERS) { + memcpy(&priv->rtllib->current_network.qos_data.parameters,\ + &network->qos_data.parameters,\ + sizeof(struct rtllib_qos_parameters)); + priv->rtllib->current_network.qos_data.active = 1; + priv->rtllib->wmm_acm = network->qos_data.wmm_acm; +#if 0 + if((priv->rtllib->current_network.qos_data.param_count != \ + network->qos_data.param_count)) +#endif + { + set_qos_param = 1; + priv->rtllib->current_network.qos_data.old_param_count = \ + priv->rtllib->current_network.qos_data.param_count; + priv->rtllib->current_network.qos_data.param_count = \ + network->qos_data.param_count; + } + } else { + memcpy(&priv->rtllib->current_network.qos_data.parameters,\ + &def_qos_parameters, size); + priv->rtllib->current_network.qos_data.active = 0; + priv->rtllib->current_network.qos_data.supported = 0; + set_qos_param = 1; + } + + spin_unlock_irqrestore(&priv->rtllib->lock, flags); + + RT_TRACE(COMP_QOS, "%s: network->flags = %d,%d\n", __FUNCTION__, + network->flags ,priv->rtllib->current_network.qos_data.active); + if (set_qos_param == 1) { + dm_init_edca_turbo(priv->rtllib->dev); + queue_work_rsl(priv->priv_wq, &priv->qos_activate); + } + return ret; +} + +static int rtl8192_handle_assoc_response(struct net_device *dev, + struct rtllib_assoc_response_frame *resp, + struct rtllib_network *network) +{ + struct r8192_priv *priv = rtllib_priv(dev); + rtl8192_qos_association_resp(priv, network); + return 0; +} + +void rtl8192_prepare_beacon(struct r8192_priv *priv) +{ +#ifdef _RTL8192_EXT_PATCH_ + struct net_device *dev = priv->rtllib->dev; +#endif + struct sk_buff *skb; + cb_desc *tcb_desc; + +#ifdef _RTL8192_EXT_PATCH_ + if((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->mesh_state == RTLLIB_NOLINK)) + return; +#endif + skb = rtllib_get_beacon(priv->rtllib); + tcb_desc = (cb_desc *)(skb->cb + 8); +#ifdef _RTL8192_EXT_PATCH_ + memset(skb->cb, 0, sizeof(skb->cb)); +#endif + tcb_desc->queue_index = BEACON_QUEUE; + tcb_desc->data_rate = 2; + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; + tcb_desc->bTxUseDriverAssingedRate = 1; +#ifdef _RTL8192_EXT_PATCH_ + tcb_desc->bTxEnableFwCalcDur = 0; + memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); +#endif + skb_push(skb, priv->rtllib->tx_headroom); + if(skb){ + rtl8192_tx(priv->rtllib->dev,skb); + } +} + +void rtl8192_stop_beacon(struct net_device *dev) +{ +} + +void rtl8192_config_rate(struct net_device* dev, u16* rate_config) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_network *net; + u8 i=0, basic_rate = 0; +#ifdef _RTL8192_EXT_PATCH_ + if(priv->rtllib->iw_mode == IW_MODE_MESH) + net = & priv->rtllib->current_mesh_network; + else + net = & priv->rtllib->current_network; +#else + net = & priv->rtllib->current_network; +#endif + + for (i = 0; i < net->rates_len; i++) { + basic_rate = net->rates[i] & 0x7f; + switch (basic_rate) { + case MGN_1M: + *rate_config |= RRSR_1M; + break; + case MGN_2M: + *rate_config |= RRSR_2M; + break; + case MGN_5_5M: + *rate_config |= RRSR_5_5M; + break; + case MGN_11M: + *rate_config |= RRSR_11M; + break; + case MGN_6M: + *rate_config |= RRSR_6M; + break; + case MGN_9M: + *rate_config |= RRSR_9M; + break; + case MGN_12M: + *rate_config |= RRSR_12M; + break; + case MGN_18M: + *rate_config |= RRSR_18M; + break; + case MGN_24M: + *rate_config |= RRSR_24M; + break; + case MGN_36M: + *rate_config |= RRSR_36M; + break; + case MGN_48M: + *rate_config |= RRSR_48M; + break; + case MGN_54M: + *rate_config |= RRSR_54M; + break; + } + } + + for (i = 0; i < net->rates_ex_len; i++) { + basic_rate = net->rates_ex[i] & 0x7f; + switch (basic_rate) { + case MGN_1M: + *rate_config |= RRSR_1M; + break; + case MGN_2M: + *rate_config |= RRSR_2M; + break; + case MGN_5_5M: + *rate_config |= RRSR_5_5M; + break; + case MGN_11M: + *rate_config |= RRSR_11M; + break; + case MGN_6M: + *rate_config |= RRSR_6M; + break; + case MGN_9M: + *rate_config |= RRSR_9M; + break; + case MGN_12M: + *rate_config |= RRSR_12M; + break; + case MGN_18M: + *rate_config |= RRSR_18M; + break; + case MGN_24M: + *rate_config |= RRSR_24M; + break; + case MGN_36M: + *rate_config |= RRSR_36M; + break; + case MGN_48M: + *rate_config |= RRSR_48M; + break; + case MGN_54M: + *rate_config |= RRSR_54M; + break; + } + } +} + +void rtl8192_refresh_supportrate(struct r8192_priv* priv) +{ + struct rtllib_device* ieee = priv->rtllib; + if (ieee->mode == WIRELESS_MODE_N_24G || ieee->mode == WIRELESS_MODE_N_5G) { + memcpy(ieee->Regdot11HTOperationalRateSet, ieee->RegHTSuppRateSet, 16); + memcpy(ieee->Regdot11TxHTOperationalRateSet, ieee->RegHTSuppRateSet, 16); + +#ifdef RTL8192CE + if(priv->rf_type == RF_1T1R) { + ieee->Regdot11HTOperationalRateSet[1] = 0; + } +#endif + +#ifdef RTL8192SE + if(priv->rf_type == RF_1T1R) { + ieee->Regdot11HTOperationalRateSet[1] = 0; + } + if(priv->rf_type == RF_1T1R || priv->rf_type == RF_1T2R) + { + ieee->Regdot11TxHTOperationalRateSet[1] = 0; + } + + if(priv->rtllib->b1SSSupport == true) { + ieee->Regdot11HTOperationalRateSet[1] = 0; + } +#endif + } else { + memset(ieee->Regdot11HTOperationalRateSet, 0, 16); + } + return; +} + +u8 rtl8192_getSupportedWireleeMode(struct net_device*dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 ret = 0; + + switch(priv->rf_chip) { + case RF_8225: + case RF_8256: + case RF_6052: + case RF_PSEUDO_11N: + ret = (WIRELESS_MODE_N_24G|WIRELESS_MODE_G | WIRELESS_MODE_B); + break; + case RF_8258: + ret = (WIRELESS_MODE_A | WIRELESS_MODE_N_5G); + break; + default: + ret = WIRELESS_MODE_B; + break; + } + return ret; +} + +void rtl8192_SetWirelessMode(struct net_device* dev, u8 wireless_mode) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 bSupportMode = rtl8192_getSupportedWireleeMode(dev); + +#if 0 + if( (wireless_mode != WIRELESS_MODE_B) && + (wireless_mode != WIRELESS_MODE_G) && + (wireless_mode != WIRELESS_MODE_A) && + (wireless_mode != WIRELESS_MODE_AUTO) && + (wireless_mode != WIRELESS_MODE_N_24G) && + (wireless_mode != WIRELESS_MODE_N_5G) ) + { + wireless_mode = WIRELESS_MODE_AUTO; + } +#endif + if ((wireless_mode == WIRELESS_MODE_AUTO) || ((wireless_mode & bSupportMode) == 0)) { + if (bSupportMode & WIRELESS_MODE_N_24G) { + wireless_mode = WIRELESS_MODE_N_24G; + } else if (bSupportMode & WIRELESS_MODE_N_5G) { + wireless_mode = WIRELESS_MODE_N_5G; + } else if((bSupportMode & WIRELESS_MODE_A)) { + wireless_mode = WIRELESS_MODE_A; + } else if((bSupportMode & WIRELESS_MODE_G)) { + wireless_mode = WIRELESS_MODE_G; + } else if((bSupportMode & WIRELESS_MODE_B)) { + wireless_mode = WIRELESS_MODE_B; + } else { + RT_TRACE(COMP_ERR, "%s(), No valid wireless mode supported (%x)!!!\n", + __FUNCTION__, bSupportMode); + wireless_mode = WIRELESS_MODE_B; + } + } + +#ifdef _RTL8192_EXT_PATCH_ + if ((wireless_mode & WIRELESS_MODE_N_24G) == WIRELESS_MODE_N_24G) + wireless_mode = WIRELESS_MODE_N_24G; + else if((wireless_mode & WIRELESS_MODE_N_5G) == WIRELESS_MODE_N_5G) + wireless_mode = WIRELESS_MODE_N_5G; + else if ((wireless_mode & WIRELESS_MODE_A) == WIRELESS_MODE_A) + wireless_mode = WIRELESS_MODE_A; + else if ((wireless_mode & WIRELESS_MODE_G) == WIRELESS_MODE_G) + wireless_mode = WIRELESS_MODE_G; + else + wireless_mode = WIRELESS_MODE_B; +#else + if ((wireless_mode & (WIRELESS_MODE_B | WIRELESS_MODE_G)) == (WIRELESS_MODE_G | WIRELESS_MODE_B)) + wireless_mode = WIRELESS_MODE_G; +#endif + +#ifdef RTL8192SE + write_nic_word(dev, SIFS_OFDM, 0x0e0e); +#endif +#ifdef RTL8192CE + { + u16 SIFS_Timer = 0x0a0a; + + if(wireless_mode == WIRELESS_MODE_G) + SIFS_Timer = 0x0a0a; + else + SIFS_Timer = 0x1010; + + priv->rtllib->SetHwRegHandler( dev, HW_VAR_SIFS, (u8*)&SIFS_Timer); + } +#endif + priv->rtllib->mode = wireless_mode; + + if ((wireless_mode == WIRELESS_MODE_N_24G) || (wireless_mode == WIRELESS_MODE_N_5G)){ + priv->rtllib->pHTInfo->bEnableHT = 1; + printk("%s(), wireless_mode:%x, bEnableHT = 1\n", __FUNCTION__,wireless_mode); + }else{ + priv->rtllib->pHTInfo->bEnableHT = 0; + printk("%s(), wireless_mode:%x, bEnableHT = 0\n", __FUNCTION__,wireless_mode); + } + RT_TRACE(COMP_INIT, "Current Wireless Mode is %x\n", wireless_mode); + rtl8192_refresh_supportrate(priv); +} + + +#ifdef _RTL8192_EXT_PATCH_ +#define KEEP_ALIVE_INTERVAL 20 +#define DEFAULT_KEEP_ALIVE_LEVEL 1 + +static void MgntLinkKeepAlive(struct r8192_priv *priv ) +{ + if (priv->keepAliveLevel == 0) + return; + + if((priv->rtllib->state == RTLLIB_LINKED) && (!priv->rtllib->is_roaming)) + { + + if ( (priv->keepAliveLevel== 2) || + (priv->rtllib->LinkDetectInfo.LastNumTxUnicast == priv->NumTxUnicast && + priv->rtllib->LinkDetectInfo.NumRxUnicastOkInPeriod == 0) + ) + { + priv->rtllib->LinkDetectInfo.IdleCount++; + + if(priv->rtllib->LinkDetectInfo.IdleCount >= ((KEEP_ALIVE_INTERVAL / RT_CHECK_FOR_HANG_PERIOD)-1) ) + { + priv->rtllib->LinkDetectInfo.IdleCount = 0; + rtllib_sta_ps_send_null_frame(priv->rtllib, false); + } + } + else + { + priv->rtllib->LinkDetectInfo.IdleCount = 0; + } + priv->rtllib->LinkDetectInfo.LastNumTxUnicast = priv->NumTxUnicast; + priv->rtllib->LinkDetectInfo.LastNumRxUnicast = priv->rtllib->LinkDetectInfo.NumRxUnicastOkInPeriod; + } +} + +static void rtl8192_init_mesh_variable(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 i; + + priv->rtllib->mesh_security_setting = 0; + memset(priv->rtllib->swmeshcamtable,0,sizeof(SW_CAM_TABLE)*32); + priv->rtllib->mesh_sec_type = 0; + + priv->NumTxUnicast = 0; + priv->keepAliveLevel = DEFAULT_KEEP_ALIVE_LEVEL; + + priv->FwCmdIOMap = 0; + priv->FwCmdIOParam = 0; + priv->ThermalValue = 0; + priv->DMFlag = 0; + priv->rssi_level = 0; + priv->rtllib->bUseRAMask = 0; + + priv->rtllib->set_key_for_AP = rtl8192_set_key_for_AP; + memset(priv->rtllib->swmeshratrtable,0,8*(sizeof(SW_RATR_TABLE))); + priv->rtllib->mesh_amsdu_in_process = 0; + priv->rtllib->HwSecCamBitMap = 0; + memset(priv->rtllib->HwSecCamStaAddr,0,TOTAL_CAM_ENTRY * ETH_ALEN); + priv->rtllib->LinkingPeerBitMap = 0; + memset(priv->rtllib->LinkingPeerAddr,0,(MAX_MP-1) * ETH_ALEN); + memset(priv->rtllib->LinkingPeerSecState, 0, (MAX_MP-1)); + memset(priv->rtllib->peer_AID_Addr,0,30 * ETH_ALEN); + priv->rtllib->peer_AID_bitmap = 0; + priv->rtllib->backup_channel = 1; + priv->rtllib->del_hwsec_cam_entry = rtl8192_del_hwsec_cam_entry; + priv->rtllib->set_key_for_peer = meshdev_set_key_for_peer; + priv->rtllib->hostname_len = 0; + memset(priv->rtllib->hostname, 0, sizeof(priv->rtllib->hostname)); + strcpy(priv->rtllib->hostname, "Crab"); + priv->rtllib->hostname_len = strlen(priv->rtllib->hostname); + priv->rtllib->meshScanMode = 0; + priv->rtllib->currentRate = 0xffffffff; + priv->mshobj = alloc_mshobj(priv); + printk("priv is %p,mshobj is %p\n",priv,priv->mshobj); + + if (priv->mshobj) { + priv->rtllib->ext_patch_rtllib_start_protocol = + priv->mshobj->ext_patch_rtllib_start_protocol; + priv->rtllib->ext_patch_rtllib_stop_protocol = + priv->mshobj->ext_patch_rtllib_stop_protocol; + priv->rtllib->ext_patch_rtllib_start_mesh = + priv->mshobj->ext_patch_rtllib_start_mesh; + priv->rtllib->ext_patch_rtllib_probe_req_1 = + priv->mshobj->ext_patch_rtllib_probe_req_1; + priv->rtllib->ext_patch_rtllib_probe_req_2 = + priv->mshobj->ext_patch_rtllib_probe_req_2; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_auth = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_auth; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_deauth = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_deauth; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close; + priv->rtllib->ext_patch_rtllib_close_all_peerlink = + priv->mshobj->ext_patch_rtllib_close_all_peerlink; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann = + priv->mshobj->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann; + priv->rtllib->ext_patch_rtllib_ext_stop_scan_wq_set_channel = + priv->mshobj->ext_patch_rtllib_ext_stop_scan_wq_set_channel; + priv->rtllib->ext_patch_r819x_wx_set_mesh_chan = + priv->mshobj->ext_patch_r819x_wx_set_mesh_chan; + priv->rtllib->ext_patch_r819x_wx_set_channel = + priv->mshobj->ext_patch_r819x_wx_set_channel; + priv->rtllib->ext_patch_rtllib_process_probe_response_1 = + priv->mshobj->ext_patch_rtllib_process_probe_response_1; + priv->rtllib->ext_patch_rtllib_rx_mgt_on_probe_req = + priv->mshobj->ext_patch_rtllib_rx_mgt_on_probe_req; + priv->rtllib->ext_patch_rtllib_rx_mgt_update_expire = + priv->mshobj->ext_patch_rtllib_rx_mgt_update_expire; + priv->rtllib->ext_patch_get_beacon_get_probersp = + priv->mshobj->ext_patch_get_beacon_get_probersp; + priv->rtllib->ext_patch_rtllib_rx_on_rx = + priv->mshobj->ext_patch_rtllib_rx_on_rx; + priv->rtllib->ext_patch_rtllib_rx_frame_get_hdrlen = + priv->mshobj->ext_patch_rtllib_rx_frame_get_hdrlen; + priv->rtllib->ext_patch_rtllib_rx_frame_get_mac_hdrlen = + priv->mshobj->ext_patch_rtllib_rx_frame_get_mac_hdrlen; + priv->rtllib->ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc = + priv->mshobj->ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc; + priv->rtllib->ext_patch_rtllib_rx_is_valid_framectl = + priv->mshobj->ext_patch_rtllib_rx_is_valid_framectl; + priv->rtllib->ext_patch_rtllib_softmac_xmit_get_rate = + priv->mshobj->ext_patch_rtllib_softmac_xmit_get_rate; + /* added by david for setting acl dynamically */ + priv->rtllib->ext_patch_rtllib_acl_query = + priv->mshobj->ext_patch_rtllib_acl_query; + priv->rtllib->ext_patch_rtllib_is_mesh = + priv->mshobj->ext_patch_rtllib_is_mesh; + priv->rtllib->ext_patch_rtllib_create_crypt_for_peer = + priv->mshobj->ext_patch_rtllib_create_crypt_for_peer; + priv->rtllib->ext_patch_rtllib_get_peermp_htinfo = + priv->mshobj->ext_patch_rtllib_get_peermp_htinfo; + priv->rtllib->ext_patch_rtllib_send_ath_commit = + priv->mshobj->ext_patch_rtllib_send_ath_commit; + priv->rtllib->ext_patch_rtllib_send_ath_confirm = + priv->mshobj->ext_patch_rtllib_send_ath_confirm; + priv->rtllib->ext_patch_rtllib_rx_ath_commit = + priv->mshobj->ext_patch_rtllib_rx_ath_commit; + priv->rtllib->ext_patch_rtllib_rx_ath_confirm = + priv->mshobj->ext_patch_rtllib_rx_ath_confirm; + } + for (i = 0; i < MAX_QUEUE_SIZE; i++) { + skb_queue_head_init(&priv->rtllib->skb_meshaggQ[i]); + } +} + +int _rtl8192_mesh_up(struct net_device *dev,bool is_silent_reset) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + bool init_status = true; + priv->bDriverIsGoingToUnload = false; + priv->bdisable_nic = false; + + if(priv->mesh_up){ + RT_TRACE(COMP_ERR,"%s(): since mesh0 is already up, ra0 is forbidden to open.\n",__FUNCTION__); + return -1; + } + RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__); + if(!is_silent_reset) + priv->rtllib->iw_mode = IW_MODE_INFRA; + if(priv->up){ + RT_TRACE(COMP_ERR,"%s():%s is up,return\n",__FUNCTION__,DRV_NAME); + return -1; + } +#ifdef RTL8192SE + priv->ReceiveConfig = + RCR_APPFCS | RCR_APWRMGT | /*RCR_ADD3 |*/ + RCR_AMF | RCR_ADF | RCR_APP_MIC | RCR_APP_ICV | + RCR_AICV | RCR_ACRC32 | + RCR_AB | RCR_AM | + RCR_APM | + /*RCR_AAP |*/ + RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF | + (priv->EarlyRxThreshold<mesh_up) + { + RT_TRACE(COMP_INIT, "Bringing up iface"); + priv->bfirst_init = true; + init_status = priv->ops->initialize_adapter(dev); + if(init_status != true) + { + RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__); + return -1; + } + RT_TRACE(COMP_INIT, "start adapter finished\n"); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + priv->rtllib->ieee_up=1; + priv->bfirst_init = false; +#ifdef ENABLE_GPIO_RADIO_CTL + if(priv->polling_timer_on == 0){ + check_rfctrl_gpio_timer((unsigned long)dev); + } +#endif + priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN; + priv->rtllib->current_mesh_network.channel = INIT_DEFAULT_CHAN; + if((priv->mshobj->ext_patch_r819x_wx_set_mesh_chan) && (!is_silent_reset)) + priv->mshobj->ext_patch_r819x_wx_set_mesh_chan(dev,INIT_DEFAULT_CHAN); + if((priv->mshobj->ext_patch_r819x_wx_set_channel) && (!is_silent_reset)) + { + priv->mshobj->ext_patch_r819x_wx_set_channel(priv->rtllib, INIT_DEFAULT_CHAN); + } + dm_InitRateAdaptiveMask(dev); + } + else + { + rtllib_stop_scan_syncro(priv->rtllib); + } + priv->up=1; + printk("%s():set chan %d\n",__FUNCTION__,INIT_DEFAULT_CHAN); + priv->rtllib->set_chan(dev, INIT_DEFAULT_CHAN); + priv->up_first_time = 0; + if(!priv->rtllib->proto_started) + { +#ifdef RTL8192E + if(priv->rtllib->eRFPowerState!=eRfOn) + MgntActSet_RF_State(dev, eRfOn, priv->rtllib->RfOffReason); +#endif + if(priv->rtllib->state != RTLLIB_LINKED) + rtllib_softmac_start_protocol(priv->rtllib, 0); + } + if(!priv->mesh_up) + watch_dog_timer_callback((unsigned long) dev); + rtllib_reset_queue(priv->rtllib); + if(!netif_queue_stopped(dev)) + netif_start_queue(dev); + else + netif_wake_queue(dev); + RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__); + + return 0; +} + +int rtl8192_mesh_down(struct net_device *dev, bool shutdownrf) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags = 0; + u8 RFInProgressTimeOut = 0; + + if (priv->up == 0) + return -1; + + RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__); +#ifdef ENABLE_LPS + if(priv->rtllib->state == RTLLIB_LINKED) + LeisurePSLeave(dev); +#endif + priv->up=0; + + /* FIXME */ + if (!netif_queue_stopped(dev)) + netif_stop_queue(dev); + if(!priv->mesh_up) + { + priv->bDriverIsGoingToUnload = true; + priv->rtllib->ieee_up = 0; + /* mesh stack has also be closed, then disalbe the hardware function at + * the same time */ + priv->rtllib->wpa_ie_len = 0; + if(priv->rtllib->wpa_ie) + kfree(priv->rtllib->wpa_ie); + priv->rtllib->wpa_ie = NULL; +#ifdef RTL8192S_WAPI_SUPPORT + priv->rtllib->wapiInfo.wapiTxMsk.bTxEnable = false; + priv->rtllib->wapiInfo.wapiTxMsk.bSet = false; +#endif + CamResetAllEntry(dev); + memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + rtl8192_irq_disable(dev); + rtl8192_cancel_deferred_work(priv); +#ifndef RTL8190P + cancel_delayed_work(&priv->rtllib->hw_wakeup_wq); +#endif + deinit_hal_dm(dev); + del_timer_sync(&priv->watch_dog_timer); + + rtllib_softmac_stop_protocol(priv->rtllib, 0, true); + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + while(priv->RFChangeInProgress) + { + SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock); + if(RFInProgressTimeOut > 100) + { + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + break; + } + printk("===>%s():RF is in progress, need to wait until rf chang is done.\n",__FUNCTION__); + mdelay(1); + RFInProgressTimeOut ++; + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + } + priv->RFChangeInProgress = true; + SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock); + priv->ops->stop_adapter(dev, false); + SPIN_LOCK_PRIV_RFPS(&priv->rf_ps_lock); + priv->RFChangeInProgress = false; + SPIN_UNLOCK_PRIV_RFPS(&priv->rf_ps_lock); + udelay(100); + memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list)); + priv->rtllib->wap_set = 0; + priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN; +#ifdef CONFIG_ASPM_OR_D3 + RT_ENABLE_ASPM(dev); +#endif + } else { + priv->rtllib->wpa_ie_len = 0; + if(priv->rtllib->wpa_ie) + kfree(priv->rtllib->wpa_ie); + priv->rtllib->wpa_ie = NULL; +#ifdef RTL8192S_WAPI_SUPPORT + priv->rtllib->wapiInfo.wapiTxMsk.bTxEnable = false; + priv->rtllib->wapiInfo.wapiTxMsk.bSet = false; +#endif + CamResetAllEntry(dev); + CamRestoreEachIFEntry(dev,1); + memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + + rtllib_softmac_stop_protocol(priv->rtllib, 0, true); + memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list)); + priv->rtllib->current_network.channel = INIT_DEFAULT_CHAN; + priv->rtllib->wap_set = 0; + } + + RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__); + + return 0; +} + +void rtl8192_dinit_mshobj(struct r8192_priv *priv) +{ + + if(priv && priv->mshobj) + { + if(priv->mshobj->ext_patch_remove_proc) + priv->mshobj->ext_patch_remove_proc(priv); + priv->rtllib->ext_patch_rtllib_start_protocol = 0; + priv->rtllib->ext_patch_rtllib_stop_protocol = 0; + priv->rtllib->ext_patch_rtllib_probe_req_1 = 0; + priv->rtllib->ext_patch_rtllib_probe_req_2 = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_auth =0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_deauth =0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report= 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req= 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep=0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann=0; + priv->rtllib->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann=0; + priv->rtllib->ext_patch_rtllib_ext_stop_scan_wq_set_channel = 0; + priv->rtllib->ext_patch_rtllib_process_probe_response_1 = 0; + priv->rtllib->ext_patch_rtllib_rx_mgt_on_probe_req = 0; + priv->rtllib->ext_patch_rtllib_rx_mgt_update_expire = 0; + priv->rtllib->ext_patch_rtllib_rx_on_rx = 0; + priv->rtllib->ext_patch_get_beacon_get_probersp = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_get_hdrlen = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_get_mac_hdrlen = 0; + priv->rtllib->ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc = 0; + priv->rtllib->ext_patch_rtllib_rx_is_valid_framectl = 0; + priv->rtllib->ext_patch_rtllib_softmac_xmit_get_rate = 0; + priv->rtllib->ext_patch_rtllib_is_mesh = 0; + priv->rtllib->ext_patch_rtllib_create_crypt_for_peer = 0; + priv->rtllib->ext_patch_rtllib_get_peermp_htinfo = 0; + priv->rtllib->ext_patch_rtllib_send_ath_commit = 0; + priv->rtllib->ext_patch_rtllib_send_ath_confirm = 0; + priv->rtllib->ext_patch_rtllib_rx_ath_commit = 0; + priv->rtllib->ext_patch_rtllib_rx_ath_confirm = 0; + free_mshobj(&priv->mshobj); + } + +} +#else +int _rtl8192_sta_up(struct net_device *dev,bool is_silent_reset) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + bool init_status = true; + priv->bDriverIsGoingToUnload = false; + priv->bdisable_nic = false; + + priv->up=1; + priv->rtllib->ieee_up=1; + + priv->up_first_time = 0; + RT_TRACE(COMP_INIT, "Bringing up iface"); + priv->bfirst_init = true; + init_status = priv->ops->initialize_adapter(dev); + if(init_status != true) + { + RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__); + priv->bfirst_init = false; + return -1; + } + + RT_TRACE(COMP_INIT, "start adapter finished\n"); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + priv->bfirst_init = false; +#if defined RTL8192SE || defined RTL8192CE + if(priv->rtllib->eRFPowerState!=eRfOn) + MgntActSet_RF_State(dev, eRfOn, priv->rtllib->RfOffReason); +#endif + +#ifdef ENABLE_GPIO_RADIO_CTL + if(priv->polling_timer_on == 0){ + check_rfctrl_gpio_timer((unsigned long)dev); + } +#endif + + if(priv->rtllib->state != RTLLIB_LINKED) +#ifndef CONFIG_MP + rtllib_softmac_start_protocol(priv->rtllib); +#endif + rtllib_reset_queue(priv->rtllib); +#ifndef CONFIG_MP + watch_dog_timer_callback((unsigned long) dev); +#endif + + + if(!netif_queue_stopped(dev)) + netif_start_queue(dev); + else + netif_wake_queue(dev); + + return 0; +} + +int rtl8192_sta_down(struct net_device *dev, bool shutdownrf) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags = 0; + u8 RFInProgressTimeOut = 0; + + if (priv->up == 0) return -1; + +#ifdef ENABLE_LPS + if(priv->rtllib->state == RTLLIB_LINKED) + LeisurePSLeave(dev); +#endif + + priv->bDriverIsGoingToUnload = true; + priv->up=0; + priv->rtllib->ieee_up = 0; + priv->bfirst_after_down = 1; + RT_TRACE(COMP_DOWN, "==========>%s()\n", __FUNCTION__); + if (!netif_queue_stopped(dev)) + netif_stop_queue(dev); + + priv->rtllib->wpa_ie_len = 0; + if(priv->rtllib->wpa_ie) + kfree(priv->rtllib->wpa_ie); + priv->rtllib->wpa_ie = NULL; +#ifdef RTL8192S_WAPI_SUPPORT + priv->rtllib->wapiInfo.wapiTxMsk.bTxEnable = false; + priv->rtllib->wapiInfo.wapiTxMsk.bSet = false; +#endif + CamResetAllEntry(dev); + memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + rtl8192_irq_disable(dev); + + del_timer_sync(&priv->watch_dog_timer); + rtl8192_cancel_deferred_work(priv); +#ifndef RTL8190P +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&priv->rtllib->hw_wakeup_wq); +#endif +#endif + + rtllib_softmac_stop_protocol(priv->rtllib,true); + spin_lock_irqsave(&priv->rf_ps_lock,flags); + while(priv->RFChangeInProgress) + { + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); + if(RFInProgressTimeOut > 100) + { + spin_lock_irqsave(&priv->rf_ps_lock,flags); + break; + } + printk("===>%s():RF is in progress, need to wait until rf chang is done.\n",__FUNCTION__); + mdelay(1); + RFInProgressTimeOut ++; + spin_lock_irqsave(&priv->rf_ps_lock,flags); + } + priv->RFChangeInProgress = true; + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); + priv->ops->stop_adapter(dev, false); + spin_lock_irqsave(&priv->rf_ps_lock,flags); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flags); + udelay(100); + memset(&priv->rtllib->current_network, 0 , offsetof(struct rtllib_network, list)); +#ifdef CONFIG_ASPM_OR_D3 + RT_ENABLE_ASPM(dev); +#endif + RT_TRACE(COMP_DOWN, "<==========%s()\n", __FUNCTION__); + + return 0; +} + +#endif + +static void rtl8192_init_priv_handler(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->rtllib->softmac_hard_start_xmit = rtl8192_hard_start_xmit; + priv->rtllib->set_chan = rtl8192_set_chan; + priv->rtllib->link_change = priv->ops->link_change; + priv->rtllib->softmac_data_hard_start_xmit = rtl8192_hard_data_xmit; + priv->rtllib->data_hard_stop = rtl8192_data_hard_stop; + priv->rtllib->data_hard_resume = rtl8192_data_hard_resume; + priv->rtllib->check_nic_enough_desc = rtl8192_check_nic_enough_desc; + priv->rtllib->get_nic_desc_num = rtl8192_get_nic_desc_num; +#ifdef _RTL8192_EXT_PATCH_ + priv->rtllib->set_mesh_key = r8192_mesh_set_enc_ext; +#endif + priv->rtllib->handle_assoc_response = rtl8192_handle_assoc_response; + priv->rtllib->handle_beacon = rtl8192_handle_beacon; + priv->rtllib->SetWirelessMode = rtl8192_SetWirelessMode; + +#ifdef ENABLE_LPS + priv->rtllib->LeisurePSLeave = LeisurePSLeave; +#endif + +#ifdef RTL8192CE + priv->rtllib->SetBWModeHandler = PHY_SetBWMode8192C; + priv->rf_set_chan = PHY_SwChnl8192C; + +#ifdef _ENABLE_SW_BEACON + priv->rtllib->start_send_beacons = NULL; + priv->rtllib->stop_send_beacons = NULL; +#else + priv->rtllib->start_send_beacons = rtl8192ce_SetBeaconRelatedRegisters; + priv->rtllib->stop_send_beacons = rtl8192_stop_beacon; +#endif + + priv->rtllib->sta_wake_up = rtl8192_hw_wakeup; + priv->rtllib->enter_sleep_state = rtl8192_hw_to_sleep; + priv->rtllib->ps_is_queue_empty = rtl8192_is_tx_queue_empty; + + priv->rtllib->GetNmodeSupportBySecCfg = rtl8192ce_GetNmodeSupportBySecCfg; + priv->rtllib->GetHalfNmodeSupportByAPsHandler = rtl8192ce_GetHalfNmodeSupportByAPs; + + priv->rtllib->SetHwRegHandler = rtl8192ce_SetHwReg; + priv->rtllib->GetHwRegHandler = rtl8192ce_GetHwReg; + priv->rtllib->AllowAllDestAddrHandler = rtl8192ce_AllowAllDestAddr; + priv->rtllib->SetFwCmdHandler = rtl8192ce_phy_SetFwCmdIO; + priv->rtllib->UpdateHalRAMaskHandler = rtl8192ce_UpdateHalRAMask; + priv->rtllib->UpdateBeaconInterruptHandler = rtl8192ce_UpdateInterruptMask; + priv->rtllib->rtl_11n_user_show_rates = rtl8192_11n_user_show_rates; +#ifdef ENABLE_IPS + priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq; + priv->rtllib->rtllib_ips_leave = rtllib_ips_leave; +#endif + + priv->rtllib->LedControlHandler = LedControl8192CE; + priv->rtllib->ScanOperationBackupHandler = PHY_ScanOperationBackup8192C; +#endif + +#ifdef RTL8192SE + priv->rtllib->SetBWModeHandler = rtl8192_SetBWMode; + priv->rf_set_chan = rtl8192_phy_SwChnl; + +#ifdef _RTL8192_EXT_PATCH_ + priv->rtllib->start_send_beacons = NULL; + priv->rtllib->stop_send_beacons = NULL; +#else +#ifdef _ENABLE_SW_BEACON + priv->rtllib->start_send_beacons = NULL; + priv->rtllib->stop_send_beacons = NULL; +#else + priv->rtllib->start_send_beacons = rtl8192se_start_beacon; + priv->rtllib->stop_send_beacons = rtl8192_stop_beacon; +#endif +#endif + priv->rtllib->sta_wake_up = rtl8192_hw_wakeup; + priv->rtllib->enter_sleep_state = rtl8192_hw_to_sleep; + priv->rtllib->ps_is_queue_empty = rtl8192_is_tx_queue_empty; + + priv->rtllib->GetNmodeSupportBySecCfg = rtl8192se_GetNmodeSupportBySecCfg; + priv->rtllib->GetHalfNmodeSupportByAPsHandler = rtl8192se_GetHalfNmodeSupportByAPs; + + priv->rtllib->SetBeaconRelatedRegistersHandler = SetBeaconRelatedRegisters8192SE; + priv->rtllib->Adhoc_InitRateAdaptive = Adhoc_InitRateAdaptive; + priv->rtllib->check_ht_cap = rtl8192se_check_ht_cap; + priv->rtllib->SetHwRegHandler = SetHwReg8192SE; + priv->rtllib->GetHwRegHandler = GetHwReg8192SE; + priv->rtllib->AllowAllDestAddrHandler = rtl8192se_AllowAllDestAddr; + priv->rtllib->SetFwCmdHandler = rtl8192se_set_fw_cmd; + priv->rtllib->UpdateHalRAMaskHandler = UpdateHalRAMask8192SE; + priv->rtllib->UpdateBeaconInterruptHandler = NULL; + priv->rtllib->rtl_11n_user_show_rates = rtl8192_11n_user_show_rates; +#ifdef ENABLE_IPS + priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq; + priv->rtllib->rtllib_ips_leave = rtllib_ips_leave; +#endif + + priv->rtllib->LedControlHandler = LedControl8192SE; + priv->rtllib->rtllib_start_hw_scan = rtl8192se_hw_scan_initiate; + priv->rtllib->rtllib_stop_hw_scan = rtl8192se_cancel_hw_scan; +#endif + +#ifdef RTL8192E + priv->rtllib->SetBWModeHandler = rtl8192_SetBWMode; + priv->rf_set_chan = rtl8192_phy_SwChnl; + +#ifdef _ENABLE_SW_BEACON + priv->rtllib->start_send_beacons = NULL; + priv->rtllib->stop_send_beacons = NULL; +#else + priv->rtllib->start_send_beacons = rtl8192e_start_beacon; + priv->rtllib->stop_send_beacons = rtl8192_stop_beacon; +#endif + + priv->rtllib->sta_wake_up = rtl8192_hw_wakeup; + priv->rtllib->enter_sleep_state = rtl8192_hw_to_sleep; + priv->rtllib->ps_is_queue_empty = rtl8192_is_tx_queue_empty; + + priv->rtllib->GetNmodeSupportBySecCfg = rtl8192_GetNmodeSupportBySecCfg; + priv->rtllib->GetHalfNmodeSupportByAPsHandler = rtl8192_GetHalfNmodeSupportByAPs; + + priv->rtllib->SetHwRegHandler = rtl8192e_SetHwReg; + priv->rtllib->AllowAllDestAddrHandler = rtl8192_AllowAllDestAddr; + priv->rtllib->SetFwCmdHandler = NULL; + priv->rtllib->InitialGainHandler = InitialGain819xPci; +#ifdef ENABLE_IPS + priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq; + priv->rtllib->rtllib_ips_leave = rtllib_ips_leave; +#endif + + priv->rtllib->LedControlHandler = NULL; + priv->rtllib->UpdateBeaconInterruptHandler = NULL; +#endif + +#ifdef RTL8190P + priv->rtllib->SetBWModeHandler = rtl8192_SetBWMode; + priv->rf_set_chan = rtl8192_phy_SwChnl; + +#ifdef _ENABLE_SW_BEACON + priv->rtllib->start_send_beacons = NULL; + priv->rtllib->stop_send_beacons = NULL; +#else + priv->rtllib->start_send_beacons = rtl8192e_start_beacon; + priv->rtllib->stop_send_beacons = rtl8192_stop_beacon; +#endif + + priv->rtllib->GetNmodeSupportBySecCfg = rtl8192_GetNmodeSupportBySecCfg; + priv->rtllib->GetHalfNmodeSupportByAPsHandler = rtl8192_GetHalfNmodeSupportByAPs; + + priv->rtllib->SetHwRegHandler = rtl8192e_SetHwReg; + priv->rtllib->SetFwCmdHandler = NULL; + priv->rtllib->InitialGainHandler = InitialGain819xPci; +#ifdef ENABLE_IPS + priv->rtllib->rtllib_ips_leave_wq = rtllib_ips_leave_wq; + priv->rtllib->rtllib_ips_leave = rtllib_ips_leave; +#endif + + priv->rtllib->LedControlHandler = NULL; + priv->rtllib->UpdateBeaconInterruptHandler = NULL; +#endif + +#ifdef CONFIG_RTL_RFKILL + priv->rtllib->rtllib_rfkill_poll = rtl8192_rfkill_poll; +#else + priv->rtllib->rtllib_rfkill_poll = NULL; +#endif +} + +static void rtl8192_init_aspm(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); +#ifdef CONFIG_ASPM_OR_D3 + int pos; + u8 value; +#endif + + priv->bridge_pdev = priv->pdev->bus->self; + switch (priv->bridge_pdev->vendor) { + case PCI_VENDOR_ID_INTEL: + priv->pci_bridge_vendor = PCI_BRIDGE_VENDOR_INTEL; + break; + case PCI_VENDOR_ID_SI: + priv->pci_bridge_vendor = PCI_BRIDGE_VENDOR_SIS; + break; + default: + priv->pci_bridge_vendor = 0; + break; + } + +#ifdef CONFIG_ASPM_OR_D3 + if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS)) { + priv->aspm_clkreq_enable = true; + priv->RegHostPciASPMSetting = 0x02; + pos = pci_find_capability(priv->bridge_pdev, PCI_CAP_ID_EXP); + priv->PciBridgeASPMRegOffset = pos + PCI_EXP_LNKCTL; + pci_read_config_byte(priv->bridge_pdev, pos + PCI_EXP_LNKCTL, &value); + priv->PciBridgeLinkCtrlReg = value; + + priv->RegDevicePciASPMSetting = 0x03; + pos = pci_find_capability(priv->pdev, PCI_CAP_ID_EXP); + priv->ASPMRegOffset = pos + PCI_EXP_LNKCTL; + priv->ClkReqOffset = pos + PCI_EXP_LNKCTL + 1; + pci_read_config_byte(priv->pdev, pos + PCI_EXP_LNKCTL, &value); + priv->LinkCtrlReg = value; + } else { + priv->aspm_clkreq_enable = false; + } +#endif +} + +static void rtl8192_init_priv_variable(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); +#if defined RTL8192SE || defined RTL8192CE || defined RTL8192E + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); +#endif + u8 i; + + priv->rtllib->hwscan_sem_up = 1; + priv->rtllib->status = 0; + priv->H2CTxCmdSeq = 0; + priv->bDisableFrameBursting = 0; + priv->bDMInitialGainEnable = 1; + priv->polling_timer_on = 0; + priv->up_first_time = 1; + priv->blinked_ingpio = false; + priv->bDriverIsGoingToUnload = false; + priv->being_init_adapter = false; + priv->initialized_at_probe = false; + priv->sw_radio_on = true; + priv->bdisable_nic = false; + priv->bfirst_init = false; + priv->txringcount = 64; + priv->rxbuffersize = 9100; + priv->rxringcount = MAX_RX_COUNT; + priv->irq_enabled=0; + priv->chan = 1; + priv->RegWirelessMode = WIRELESS_MODE_AUTO; + priv->RegChannelPlan = 0xf; + priv->nrxAMPDU_size = 0; + priv->nrxAMPDU_aggr_num = 0; + priv->last_rxdesc_tsf_high = 0; + priv->last_rxdesc_tsf_low = 0; + priv->rtllib->mode = WIRELESS_MODE_AUTO; + priv->rtllib->iw_mode = IW_MODE_INFRA; + priv->rtllib->bNetPromiscuousMode = false; + priv->rtllib->IntelPromiscuousModeInfo.bPromiscuousOn = false; + priv->rtllib->IntelPromiscuousModeInfo.bFilterSourceStationFrame = false; + priv->rtllib->ieee_up=0; + priv->retry_rts = DEFAULT_RETRY_RTS; + priv->retry_data = DEFAULT_RETRY_DATA; + priv->rtllib->rts = DEFAULT_RTS_THRESHOLD; + priv->rtllib->rate = 110; + priv->rtllib->short_slot = 1; + priv->promisc = (dev->flags & IFF_PROMISC) ? 1:0; + priv->bcck_in_ch14 = false; + priv->bfsync_processing = false; + priv->CCKPresentAttentuation = 0; + priv->rfa_txpowertrackingindex = 0; + priv->rfc_txpowertrackingindex = 0; + priv->CckPwEnl = 6; + priv->ScanDelay = 50; + priv->ResetProgress = RESET_TYPE_NORESET; + priv->bForcedSilentReset = 0; + priv->bDisableNormalResetCheck = false; + priv->force_reset = false; + memset(priv->rtllib->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + + memset(&priv->InterruptLog,0,sizeof(LOG_INTERRUPT_8190_T)); + priv->RxCounter = 0; + priv->rtllib->wx_set_enc = 0; + priv->bHwRadioOff = false; + priv->RegRfOff = 0; + priv->isRFOff = false; + priv->bInPowerSaveMode = false; + priv->rtllib->RfOffReason = 0; + priv->RFChangeInProgress = false; + priv->bHwRfOffAction = 0; + priv->SetRFPowerStateInProgress = false; + priv->rtllib->PowerSaveControl.bInactivePs = true; + priv->rtllib->PowerSaveControl.bIPSModeBackup = false; + priv->rtllib->PowerSaveControl.bLeisurePs = true; + priv->rtllib->PowerSaveControl.bFwCtrlLPS = false; + priv->rtllib->LPSDelayCnt = 0; + priv->rtllib->sta_sleep = 0; + priv->rtllib->eRFPowerState = eRfOn; + + priv->txpower_checkcnt = 0; + priv->thermal_readback_index =0; + priv->txpower_tracking_callback_cnt = 0; + priv->ccktxpower_adjustcnt_ch14 = 0; + priv->ccktxpower_adjustcnt_not_ch14 = 0; + +#if defined RTL8192SE + for(i = 0; irtllib->peer_assoc_list[i]=NULL; + priv->rtllib->AvailableAIDTable[i] = 99; + } + priv->RATRTableBitmap = 0; + priv->rtllib->amsdu_in_process = 0; +#endif + + rtl8192_init_aspm(dev); + + priv->rtllib->current_network.beacon_interval = DEFAULT_BEACONINTERVAL; + priv->rtllib->iw_mode = IW_MODE_INFRA; + priv->rtllib->active_scan = 1; + priv->rtllib->be_scan_inprogress = false; + priv->rtllib->modulation = RTLLIB_CCK_MODULATION | RTLLIB_OFDM_MODULATION; + priv->rtllib->host_encrypt = 1; + priv->rtllib->host_decrypt = 1; + + priv->rtllib->dot11PowerSaveMode = eActive; +#if defined (RTL8192S_WAPI_SUPPORT) + priv->rtllib->wapiInfo.bWapiPSK = false; +#endif + priv->rtllib->fts = DEFAULT_FRAG_THRESHOLD; + priv->rtllib->MaxMssDensity = 0; + priv->rtllib->MinSpaceCfg = 0; + + priv->card_type = PCI; + +#if defined RTL8192SE || defined RTL8192CE || defined RTL8192E + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_HALT_NIC; + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_CLK_REQ; + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_ASPM; + pPSC->RegRfPsLevel |= RT_RF_LPS_LEVEL_ASPM; + + pPSC->RegMaxLPSAwakeIntvl = 5; +#endif + + priv->AcmControl = 0; + priv->pFirmware = (rt_firmware*)vmalloc(sizeof(rt_firmware)); + if (priv->pFirmware) + memset(priv->pFirmware, 0, sizeof(rt_firmware)); + + skb_queue_head_init(&priv->rx_queue); + skb_queue_head_init(&priv->skb_queue); + + for(i = 0; i < MAX_QUEUE_SIZE; i++) { + skb_queue_head_init(&priv->rtllib->skb_waitQ [i]); + } + for(i = 0; i < MAX_QUEUE_SIZE; i++) { + skb_queue_head_init(&priv->rtllib->skb_aggQ [i]); + } + +} + +static void rtl8192_init_priv_lock(struct r8192_priv* priv) +{ + spin_lock_init(&priv->fw_scan_lock); + spin_lock_init(&priv->tx_lock); + spin_lock_init(&priv->irq_lock); + spin_lock_init(&priv->irq_th_lock); + spin_lock_init(&priv->rf_ps_lock); + spin_lock_init(&priv->ps_lock); + spin_lock_init(&priv->rf_lock); + spin_lock_init(&priv->rt_h2c_lock); +#ifdef CONFIG_ASPM_OR_D3 + spin_lock_init(&priv->D3_lock); +#endif + sema_init(&priv->wx_sem,1); + sema_init(&priv->rf_sem,1); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) + sema_init(&priv->mutex, 1); +#else + mutex_init(&priv->mutex); +#endif +} + +static void rtl8192_init_priv_task(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) +#ifdef PF_SYNCTHREAD + priv->priv_wq = create_workqueue(DRV_NAME,0); +#else + priv->priv_wq = create_workqueue(DRV_NAME); +#endif +#endif + INIT_WORK_RSL(&priv->reset_wq, (void*)rtl8192_restart, dev); +#ifdef ENABLE_IPS + INIT_WORK_RSL(&priv->rtllib->ips_leave_wq, (void*)IPSLeave_wq, dev); +#endif + INIT_DELAYED_WORK_RSL(&priv->watch_dog_wq, (void*)rtl819x_watchdog_wqcallback, dev); + INIT_DELAYED_WORK_RSL(&priv->txpower_tracking_wq, (void*)dm_txpower_trackingcallback, dev); + INIT_DELAYED_WORK_RSL(&priv->rfpath_check_wq, (void*)dm_rf_pathcheck_workitemcallback, dev); + INIT_DELAYED_WORK_RSL(&priv->update_beacon_wq, (void*)rtl8192_update_beacon, dev); + INIT_WORK_RSL(&priv->qos_activate, (void*)rtl8192_qos_activate, dev); +#ifndef RTL8190P + INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_wakeup_wq,(void*) rtl8192_hw_wakeup_wq, dev); + INIT_DELAYED_WORK_RSL(&priv->rtllib->hw_sleep_wq,(void*) rtl8192_hw_sleep_wq, dev); +#endif +#if defined RTL8192SE + INIT_DELAYED_WORK_RSL(&priv->check_hw_scan_wq, (void*)rtl8192se_check_hw_scan, dev); + INIT_DELAYED_WORK_RSL(&priv->hw_scan_simu_wq, (void*)rtl8192se_hw_scan_simu, dev); + INIT_DELAYED_WORK_RSL(&priv->start_hw_scan_wq, (void*)rtl8192se_start_hw_scan, dev); + INIT_DELAYED_WORK_RSL(&priv->rtllib->check_tsf_wq,(void*)rtl8192se_check_tsf_wq, dev); + INIT_DELAYED_WORK_RSL(&priv->rtllib->update_assoc_sta_info_wq, + (void*)rtl8192se_update_assoc_sta_info_wq, dev); +#endif +#ifdef _RTL8192_EXT_PATCH_ + INIT_WORK_RSL(&priv->rtllib->ext_create_crypt_for_peers_wq, (void*)msh_create_crypt_for_peers_wq, dev); + INIT_WORK_RSL(&priv->rtllib->ext_path_sel_ops_wq,(void*) path_sel_ops_wq, dev); + INIT_WORK_RSL(&priv->rtllib->ext_update_extchnloffset_wq, + (void*) meshdev_update_ext_chnl_offset_as_client, dev); + INIT_DELAYED_WORK_RSL(&priv->rtllib->ext_wx_set_key_wq, (void*)ext_mesh_set_key_wq,priv->rtllib); + INIT_WORK_RSL(&priv->rtllib->ext_start_mesh_protocol_wq, + (void*) meshdev_start_mesh_protocol_wq, dev); +#endif + tasklet_init(&priv->irq_rx_tasklet, + (void(*)(unsigned long))rtl8192_irq_rx_tasklet, + (unsigned long)priv); + tasklet_init(&priv->irq_tx_tasklet, + (void(*)(unsigned long))rtl8192_irq_tx_tasklet, + (unsigned long)priv); + tasklet_init(&priv->irq_prepare_beacon_tasklet, + (void(*)(unsigned long))rtl8192_prepare_beacon, + (unsigned long)priv); +} + +short rtl8192_get_channel_map(struct net_device * dev) +{ + int i; + +#ifdef ENABLE_DOT11D + struct r8192_priv *priv = rtllib_priv(dev); + if ((priv->rf_chip != RF_8225) && (priv->rf_chip != RF_8256) + && (priv->rf_chip != RF_6052)) { + RT_TRACE(COMP_ERR, "%s: unknown rf chip, can't set channel map\n", __FUNCTION__); + return -1; + } + + if (priv->ChannelPlan > COUNTRY_CODE_MAX) { + printk("rtl819x_init:Error channel plan! Set to default.\n"); + priv->ChannelPlan= COUNTRY_CODE_FCC; + } + RT_TRACE(COMP_INIT, "Channel plan is %d\n",priv->ChannelPlan); + Dot11d_Init(priv->rtllib); +#ifndef CONFIG_CRDA + Dot11d_Channelmap(priv->ChannelPlan, priv->rtllib); +#endif +#else + struct r8192_priv *priv = rtllib_priv(dev); + int ch; + if(!channels){ + DMESG("No channels, aborting"); + return -1; + } + + ch = channels; + priv->ChannelPlan = 0; + for (i = 1; i <= 14; i++) { + (priv->rtllib->channel_map)[i] = (u8)(ch & 0x01); + ch >>= 1; + } + priv->rtllib->IbssStartChnl= 10; + priv->rtllib->ibss_maxjoin_chal = 11; +#endif + for (i = 1; i <= 11; i++) { + (priv->rtllib->active_channel_map)[i] = 1; + } + (priv->rtllib->active_channel_map)[12] = 2; + (priv->rtllib->active_channel_map)[13] = 2; + + return 0; +} + +short rtl8192_init(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + memset(&(priv->stats),0,sizeof(struct Stats)); +#ifdef CONFIG_MP + rtl8192_init_mp(dev); +#endif + + rtl8192_init_priv_handler(dev); + rtl8192_init_priv_variable(dev); +#ifdef _RTL8192_EXT_PATCH_ + rtl8192_init_mesh_variable(dev); +#endif + rtl8192_init_priv_lock(priv); + rtl8192_init_priv_task(dev); + priv->ops->get_eeprom_size(dev); + priv->ops->init_adapter_variable(dev); + rtl8192_get_channel_map(dev); + +#ifdef CONFIG_CFG_80211 + /* channel map setting for the cfg80211 style */ + { + struct r8192_priv* priv = rtllib_priv(dev); + rtllib_set_geo(priv); + } +#endif + + init_hal_dm(dev); + +#if defined RTL8192SE || defined RTL8192CE + InitSwLeds(dev); +#endif + setup_timer(&priv->watch_dog_timer, + watch_dog_timer_callback, + (unsigned long) dev); + + setup_timer(&priv->gpio_polling_timer, + check_rfctrl_gpio_timer, + (unsigned long)dev); + + rtl8192_irq_disable(dev); +#if defined(IRQF_SHARED) + if (request_irq(dev->irq, (void*)rtl8192_interrupt_rsl, IRQF_SHARED, dev->name, dev)) +#else + if (request_irq(dev->irq, (void *)rtl8192_interrupt_rsl, SA_SHIRQ, dev->name, dev)) +#endif + { + printk("Error allocating IRQ %d",dev->irq); + return -1; + } else { + priv->irq=dev->irq; + RT_TRACE(COMP_INIT, "IRQ %d\n",dev->irq); + } + + if (rtl8192_pci_initdescring(dev) != 0) { + printk("Endopoints initialization failed"); + return -1; + } + + return 0; +} + +#ifdef RTL8192CE +static void +rtl8192_update_default_setting(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); +#ifdef CONFIG_ASPM_OR_D3 + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); +#endif + + priv->RegPciASPM = 3; + + priv->RegHwSwRfOffD3 = 0; + + priv->RegSupportPciASPM = true; + + pPSC->RegRfPsLevel = 0; + priv->bSupportASPM = 0; + + + switch(priv->RegPciASPM) + { + case 0: + break; + + case 1: + pPSC->RegRfPsLevel |= RT_RF_LPS_LEVEL_ASPM; + break; + + case 2: + pPSC->RegRfPsLevel |= (RT_RF_LPS_LEVEL_ASPM | RT_RF_OFF_LEVL_CLK_REQ); + break; + + case 3: + pPSC->RegRfPsLevel &= ~(RT_RF_LPS_LEVEL_ASPM); + pPSC->RegRfPsLevel |= (RT_RF_PS_LEVEL_ALWAYS_ASPM | RT_RF_OFF_LEVL_CLK_REQ); + break; + + case 4: + pPSC->RegRfPsLevel &= ~(RT_RF_LPS_LEVEL_ASPM | RT_RF_OFF_LEVL_CLK_REQ); + pPSC->RegRfPsLevel |= RT_RF_PS_LEVEL_ALWAYS_ASPM; + break; + } + + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_HALT_NIC; + + switch(priv->RegHwSwRfOffD3) + { + case 1: + if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM) + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_ASPM; + break; + + case 2: + if(pPSC->RegRfPsLevel & RT_RF_LPS_LEVEL_ASPM) + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_ASPM; + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_HALT_NIC; + break; + + case 3: + pPSC->RegRfPsLevel |= RT_RF_OFF_LEVL_PCI_D3; + break; + } + + + switch(priv->RegSupportPciASPM) + { + case 0: + { + bool bSupportASPM = false; + priv->bSupportASPM = bSupportASPM; + } + break; + + case 1: + { + bool bSupportASPM = true; + priv->bSupportASPM = bSupportASPM; + } + break; + + case 2: + if(priv->pci_bridge_vendor == PCI_BRIDGE_VENDOR_INTEL) + { + bool bSupportASPM = true; + priv->bSupportASPM = bSupportASPM; + } + break; + + default: + break; + } +} +#endif + +#if defined CONFIG_ASPM_OR_D3 +static void +rtl8192_initialize_adapter_common(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); +#ifdef CONFIG_ASPM_OR_D3 + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); +#endif + +#ifdef RTL8192CE + rtl8192_update_default_setting(dev); +#endif + +#ifdef CONFIG_ASPM_OR_D3 + if(pPSC->RegRfPsLevel & RT_RF_PS_LEVEL_ALWAYS_ASPM) + { + RT_ENABLE_ASPM(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_PS_LEVEL_ALWAYS_ASPM); + } +#endif +} +#endif + +/*************************************************************************** + -------------------------------WATCHDOG STUFF--------------------------- +***************************************************************************/ +short rtl8192_is_tx_queue_empty(struct net_device *dev) +{ + int i=0; + struct r8192_priv *priv = rtllib_priv(dev); + for (i=0; i<=MGNT_QUEUE; i++) + { + if ((i== TXCMD_QUEUE) || (i == HCCA_QUEUE) ) + continue; + if (skb_queue_len(&(&priv->tx_ring[i])->queue) > 0){ + printk("===>tx queue is not empty:%d, %d\n", i, skb_queue_len(&(&priv->tx_ring[i])->queue)); + return 0; + } + } + return 1; +} + +RESET_TYPE +rtl819x_TxCheckStuck(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 QueueID; + u8 ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; + bool bCheckFwTxCnt = false; + struct rtl8192_tx_ring *ring = NULL; + struct sk_buff* skb = NULL; + cb_desc * tcb_desc = NULL; + unsigned long flags = 0; + +#if 0 + switch (priv->rtllib->dot11PowerSaveMode) + { + case eActive: + ResetThreshold = NIC_SEND_HANG_THRESHOLD_NORMAL; + break; + case eMaxPs: + ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; + break; + case eFastPs: + ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; + break; + default: + break; + } +#else + switch (priv->rtllib->ps) + { + case RTLLIB_PS_DISABLED: + ResetThreshold = NIC_SEND_HANG_THRESHOLD_NORMAL; + break; + case (RTLLIB_PS_MBCAST|RTLLIB_PS_UNICAST): + ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; + break; + default: + ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; + break; + } +#endif + spin_lock_irqsave(&priv->irq_th_lock,flags); + for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) + { + + + if(QueueID == TXCMD_QUEUE) + continue; +#ifdef RTL8192CE + if((QueueID == 8) || (QueueID == 5)) + continue; +#endif + + ring = &priv->tx_ring[QueueID]; + + if(skb_queue_len(&ring->queue) == 0) + continue; + else + { + skb = (&ring->queue)->next; + tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + tcb_desc->nStuckCount++; + bCheckFwTxCnt = true; +#if defined RTL8192SE || defined RTL8192CE + if(tcb_desc->nStuckCount > ResetThreshold) + { + RT_TRACE( COMP_RESET, "TxCheckStuck(): Need silent reset because nStuckCount > ResetThreshold.\n" ); + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + return RESET_TYPE_SILENT; + } + bCheckFwTxCnt = false; + #endif + } + } + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + + if(bCheckFwTxCnt) { + if (priv->ops->TxCheckStuckHandler(dev)) + { + RT_TRACE(COMP_RESET, "TxCheckStuck(): Fw indicates no Tx condition! \n"); + return RESET_TYPE_SILENT; + } + } + + return RESET_TYPE_NORESET; +} + +RESET_TYPE rtl819x_RxCheckStuck(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(priv->ops->RxCheckStuckHandler(dev)) + { + RT_TRACE(COMP_RESET, "RxStuck Condition\n"); + return RESET_TYPE_SILENT; + } + + return RESET_TYPE_NORESET; +} + +RESET_TYPE +rtl819x_ifcheck_resetornot(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + RESET_TYPE TxResetType = RESET_TYPE_NORESET; + RESET_TYPE RxResetType = RESET_TYPE_NORESET; + RT_RF_POWER_STATE rfState; + + rfState = priv->rtllib->eRFPowerState; + + if(rfState == eRfOn) + TxResetType = rtl819x_TxCheckStuck(dev); + + if( rfState == eRfOn && + (priv->rtllib->iw_mode == IW_MODE_INFRA) && + (priv->rtllib->state == RTLLIB_LINKED)) { + + RxResetType = rtl819x_RxCheckStuck(dev); + } + + RT_TRACE(COMP_RESET,"%s(): TxResetType is %d, RxResetType is %d\n",__FUNCTION__,TxResetType,RxResetType); + if(TxResetType==RESET_TYPE_NORMAL || RxResetType==RESET_TYPE_NORMAL){ + printk("%s(): TxResetType is %d, RxResetType is %d\n",__FUNCTION__,TxResetType,RxResetType); + return RESET_TYPE_NORMAL; + } else if(TxResetType==RESET_TYPE_SILENT || RxResetType==RESET_TYPE_SILENT){ + printk("%s(): TxResetType is %d, RxResetType is %d\n",__FUNCTION__,TxResetType,RxResetType); + return RESET_TYPE_SILENT; + } else { + return RESET_TYPE_NORESET; + } + +} + +void rtl819x_ifsilentreset(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 reset_times = 0; + int reset_status = 0; + struct rtllib_device *ieee = priv->rtllib; + unsigned long flag; +#ifdef _RTL8192_EXT_PATCH_ + bool wlansilentreset = false,meshsilentreset = false; + u8 backup_channel_wlan = 1,backup_channel_mesh = 1; + u8 updateBW = 0; + u8 bserverHT = 0; + int i=0; + u8 IsPortal = 0; +#endif + + if(priv->ResetProgress==RESET_TYPE_NORESET) { + + RT_TRACE(COMP_RESET,"=========>Reset progress!! \n"); + + priv->ResetProgress = RESET_TYPE_SILENT; + spin_lock_irqsave(&priv->rf_ps_lock,flag); + if(priv->RFChangeInProgress) + { + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + goto END; + } + priv->RFChangeInProgress = true; + priv->bResetInProgress = true; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); +RESET_START: + down(&priv->wx_sem); +#ifdef ENABLE_LPS + if(priv->rtllib->state == RTLLIB_LINKED) + LeisurePSLeave(dev); +#endif + if(IS_NIC_DOWN(priv)) + { + RT_TRACE(COMP_ERR,"%s():the driver is not up! return\n",__FUNCTION__); + up(&priv->wx_sem); + return ; + } +#ifdef _RTL8192_EXT_PATCH_ + if(priv->up == 1) + { + printk("================>wlansilentreset is true\n"); + wlansilentreset = true; + priv->up = 0; + } + if(priv->mesh_up == 1) + { + printk("================>meshsilentreset is true\n"); + meshsilentreset = true; + priv->mesh_up = 0; + } +#else + priv->up = 0; +#endif + RT_TRACE(COMP_RESET,"%s():======>start to down the driver\n",__FUNCTION__); + mdelay(1000); + RT_TRACE(COMP_RESET,"%s():111111111111111111111111======>start to down the driver\n",__FUNCTION__); + if(!netif_queue_stopped(dev)) + netif_stop_queue(dev); +#if !(defined RTL8192SE || defined RTL8192CE) + dm_backup_dynamic_mechanism_state(dev); +#endif + rtl8192_irq_disable(dev); + del_timer_sync(&priv->watch_dog_timer); + rtl8192_cancel_deferred_work(priv); + deinit_hal_dm(dev); + rtllib_stop_scan_syncro(ieee); +#ifdef _RTL8192_EXT_PATCH_ + backup_channel_wlan = ieee->current_network.channel; + backup_channel_mesh = ieee->current_mesh_network.channel; + if((ieee->state == RTLLIB_LINKED) && ((ieee->iw_mode == IW_MODE_INFRA) || (ieee->iw_mode == IW_MODE_ADHOC))) + { + printk("====>down, infra or adhoc\n"); + SEM_DOWN_IEEE_WX(&ieee->wx_sem); + printk("ieee->state is RTLLIB_LINKED\n"); + rtllib_stop_send_beacons(priv->rtllib); + del_timer_sync(&ieee->associate_timer); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&ieee->associate_retry_wq); +#endif + rtllib_stop_scan(ieee); + netif_carrier_off(dev); + SEM_UP_IEEE_WX(&ieee->wx_sem); + } + else if((ieee->iw_mode == IW_MODE_MESH) && (ieee->mesh_state == RTLLIB_MESH_LINKED)) + { + if(priv->mshobj->ext_patch_r819x_wx_get_AsPortal) + priv->mshobj->ext_patch_r819x_wx_get_AsPortal(priv, &IsPortal); + if((!ieee->only_mesh) && (ieee->state == RTLLIB_LINKED)){ + printk("====>down, wlan server\n"); + SEM_DOWN_IEEE_WX(&ieee->wx_sem); + printk("ieee->state is RTLLIB_LINKED\n"); + rtllib_stop_send_beacons(priv->rtllib); + del_timer_sync(&ieee->associate_timer); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&ieee->associate_retry_wq); +#endif + rtllib_stop_scan(ieee); + netif_carrier_off(dev); + SEM_UP_IEEE_WX(&ieee->wx_sem); + if(priv->mshobj->ext_patch_rtllib_stop_protocol) + priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1); + } + else if((!ieee->only_mesh) && (ieee->state != RTLLIB_LINKED)){ + printk("====>down, wlan server\n"); + SEM_DOWN_IEEE_WX(&ieee->wx_sem); + printk("ieee->state is Not RTLLIB_LINKED\n"); + rtllib_stop_send_beacons(priv->rtllib); + rtllib_stop_scan(ieee); + netif_carrier_off(dev); + SEM_UP_IEEE_WX(&ieee->wx_sem); + if(priv->mshobj->ext_patch_rtllib_stop_protocol) + priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1); + } + else if(ieee->only_mesh && IsPortal) + { + printk("====>down, eth0 server\n"); + if(priv->mshobj->ext_patch_rtllib_stop_protocol) + priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1); + } + else if(ieee->only_mesh && !IsPortal) + { + printk("====>down, p2p or client\n"); + if(priv->mshobj->ext_patch_rtllib_stop_protocol) + priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1); + } + else{ + printk("====>down, no link\n"); + if(priv->mshobj->ext_patch_rtllib_stop_protocol) + priv->mshobj->ext_patch_rtllib_stop_protocol(ieee,1); + } + } + else{ + printk("====>down, no link\n"); + printk("ieee->state is NOT LINKED\n"); + rtllib_softmac_stop_protocol(priv->rtllib,0,true); + } +#else + if(ieee->state == RTLLIB_LINKED) + { + SEM_DOWN_IEEE_WX(&ieee->wx_sem); + printk("ieee->state is RTLLIB_LINKED\n"); + rtllib_stop_send_beacons(priv->rtllib); + del_timer_sync(&ieee->associate_timer); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&ieee->associate_retry_wq); +#endif + rtllib_stop_scan(ieee); + netif_carrier_off(dev); + SEM_UP_IEEE_WX(&ieee->wx_sem); + } + else{ + printk("ieee->state is NOT LINKED\n"); + rtllib_softmac_stop_protocol(priv->rtllib,true); + } +#endif +#ifdef RTL8190P + priv->ops->stop_adapter(dev, true); +#endif + up(&priv->wx_sem); + RT_TRACE(COMP_RESET,"%s():<==========down process is finished\n",__FUNCTION__); + RT_TRACE(COMP_RESET,"%s():===========>start to up the driver\n",__FUNCTION__); +#ifdef _RTL8192_EXT_PATCH_ + if(wlansilentreset == true){ + reset_status = _rtl8192_up(dev,true); + } + if(meshsilentreset == true) + reset_status = meshdev_up(ieee->meshdev,true); +#else + reset_status = _rtl8192_up(dev,true); +#endif + RT_TRACE(COMP_RESET,"%s():<===========up process is finished\n",__FUNCTION__); + if(reset_status == -1) + { + if(reset_times < 3) + { + reset_times++; + goto RESET_START; + } + else + { + RT_TRACE(COMP_ERR," ERR!!! %s(): Reset Failed!!\n",__FUNCTION__); + } + } + ieee->is_silent_reset = 1; + spin_lock_irqsave(&priv->rf_ps_lock,flag); + priv->RFChangeInProgress = false; + spin_unlock_irqrestore(&priv->rf_ps_lock,flag); + EnableHWSecurityConfig8192(dev); +#ifdef _RTL8192_EXT_PATCH_ + ieee->current_network.channel = backup_channel_wlan; + ieee->current_mesh_network.channel = backup_channel_mesh; +#endif + if(ieee->state == RTLLIB_LINKED && ieee->iw_mode == IW_MODE_INFRA) + { + ieee->set_chan(ieee->dev, ieee->current_network.channel); + + queue_work_rsl(ieee->wq, &ieee->associate_complete_wq); + + } + else if(ieee->state == RTLLIB_LINKED && ieee->iw_mode == IW_MODE_ADHOC) + { + ieee->set_chan(ieee->dev, ieee->current_network.channel); + ieee->link_change(ieee->dev); + + notify_wx_assoc_event(ieee); + + rtllib_start_send_beacons(ieee); + + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + netif_carrier_on(ieee->dev); + } +#ifdef _RTL8192_EXT_PATCH_ + else if (ieee->iw_mode == IW_MODE_MESH) + { + if(!ieee->only_mesh) + { + printk("===>up, wlan0 server\n"); + ieee->set_chan(ieee->dev, ieee->current_network.channel); + + queue_work_rsl(ieee->wq, &ieee->associate_complete_wq); + if (ieee->current_mesh_network.beacon_interval == 0) + ieee->current_mesh_network.beacon_interval = 100; + ieee->mesh_state = RTLLIB_MESH_LINKED; + ieee->link_change(ieee->dev); + if(priv->mshobj->ext_patch_rtllib_start_protocol) + priv->mshobj->ext_patch_rtllib_start_protocol(ieee); + } + else if(ieee->only_mesh && IsPortal) + { + printk("===>up, eth0 server\n"); + if (ieee->current_mesh_network.beacon_interval == 0) + ieee->current_mesh_network.beacon_interval = 100; + ieee->mesh_state = RTLLIB_MESH_LINKED; + ieee->link_change(ieee->dev); + if(priv->mshobj->ext_patch_rtllib_start_protocol) + priv->mshobj->ext_patch_rtllib_start_protocol(ieee); + ieee->current_network.channel = ieee->current_mesh_network.channel; + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + } + else if(ieee->only_mesh && !IsPortal) + { + printk("===>up, p2p or client\n"); + if (ieee->current_mesh_network.beacon_interval == 0) + ieee->current_mesh_network.beacon_interval = 100; + ieee->mesh_state = RTLLIB_MESH_LINKED; + ieee->link_change(ieee->dev); + if(priv->mshobj->ext_patch_rtllib_start_protocol) + priv->mshobj->ext_patch_rtllib_start_protocol(ieee); + if(ieee->p2pmode){ + printk("===>up, p2p\n"); + ieee->current_network.channel = ieee->current_mesh_network.channel; + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_mesh_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + }else{ + printk("===>up, client\n"); + updateBW = priv->mshobj->ext_patch_r819x_wx_update_beacon(ieee->dev,&bserverHT); + printk("$$$$$$ Cur_networ.chan=%d, cur_mesh_net.chan=%d,bserverHT=%d\n", + ieee->current_network.channel,ieee->current_mesh_network.channel,bserverHT); + if (updateBW == 1) { + if (bserverHT == 0) { + printk("===>server is not HT supported,set 20M\n"); + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } else { + printk("===>updateBW is 1,bCurBW40MHz is %d,ieee->serverExtChlOffset is %d\n", + ieee->pHTInfo->bCurBW40MHz,ieee->serverExtChlOffset); + if (ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, ieee->serverExtChlOffset); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, ieee->serverExtChlOffset); + } + } else { + printk("===>there is no same hostname server, ERR!!!\n"); + } + } + } + + } +#endif +#ifdef TO_DO_LIST + else if(Adapter->MgntInfo.mActingAsAp) + { + AP_StartApRequest((PVOID)Adapter); + Adapter->HalFunc.ResetHalRATRTableHandler(Adapter); + } +#endif + +#ifdef TO_DO_LIST + if(Adapter->MgntInfo.mActingAsAp) + AP_CamRestoreAllEntry(Adapter); + else +#endif +#ifdef _RTL8192_EXT_PATCH_ + if(wlansilentreset){ + printk("==========>wlansilentreset\n"); + CamRestoreEachIFEntry(dev,0); + } + if(meshsilentreset){ + printk("==========>meshsilentreset\n"); + CamRestoreEachIFEntry(dev,1); + for(i=0;i<8;i++) + { + if(ieee->swmeshratrtable[i].bused == true) + { + printk("====>restore ratr table: index=%d,value=%x\n",i,ieee->swmeshratrtable[i].ratr_value); + write_nic_dword(dev,ARFR0+i*4,ieee->swmeshratrtable[i].ratr_value); + } + } + } +#else + CamRestoreAllEntry(dev); +#endif +#if !(defined RTL8192SE || defined RTL8192CE) + dm_restore_dynamic_mechanism_state(dev); +#endif +END: + priv->ResetProgress = RESET_TYPE_NORESET; + priv->reset_count++; + + priv->bForcedSilentReset =false; + priv->bResetInProgress = false; + +#ifdef RTL8190P + write_nic_byte(dev, UFWP, 1); +#endif + RT_TRACE(COMP_RESET, "Reset finished!! ====>[%d]\n", priv->reset_count); + } +} + +void rtl819x_update_rxcounts(struct r8192_priv *priv, + u32 *TotalRxBcnNum, + u32 *TotalRxDataNum) +{ + u16 SlotIndex; + u8 i; + + *TotalRxBcnNum = 0; + *TotalRxDataNum = 0; + + SlotIndex = (priv->rtllib->LinkDetectInfo.SlotIndex++)%(priv->rtllib->LinkDetectInfo.SlotNum); + priv->rtllib->LinkDetectInfo.RxBcnNum[SlotIndex] = priv->rtllib->LinkDetectInfo.NumRecvBcnInPeriod; + priv->rtllib->LinkDetectInfo.RxDataNum[SlotIndex] = priv->rtllib->LinkDetectInfo.NumRecvDataInPeriod; + for (i = 0; i < priv->rtllib->LinkDetectInfo.SlotNum; i++) { + *TotalRxBcnNum += priv->rtllib->LinkDetectInfo.RxBcnNum[i]; + *TotalRxDataNum += priv->rtllib->LinkDetectInfo.RxDataNum[i]; + } +} + + +void rtl819x_watchdog_wqcallback(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,watch_dog_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + struct rtllib_device* ieee = priv->rtllib; + RESET_TYPE ResetType = RESET_TYPE_NORESET; + static u8 check_reset_cnt = 0; +#ifdef _RTL8192_EXT_PATCH_ + static u8 last_reset_count = 0; +#endif + unsigned long flags; + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + bool bBusyTraffic = false; +#ifdef ENABLE_LPS + bool bEnterPS = false; +#endif + if(IS_NIC_DOWN(priv) || (priv->bHwRadioOff == true)) + return; + + if(priv->rtllib->state >= RTLLIB_LINKED) + { + if(priv->rtllib->CntAfterLink<2) + priv->rtllib->CntAfterLink++; + } + else + { + priv->rtllib->CntAfterLink = 0; + } + + hal_dm_watchdog(dev); + +#ifdef ENABLE_IPS + if(rtllib_act_scanning(priv->rtllib,false) == false){ + if((ieee->iw_mode == IW_MODE_INFRA) && (ieee->state == RTLLIB_NOLINK) &&\ + (ieee->eRFPowerState == eRfOn)&&!ieee->is_set_key &&\ + (!ieee->proto_stoppping) && !ieee->wx_set_enc +#ifdef CONFIG_RTLWIFI_DEBUGFS + && (!priv->debug->hw_holding) +#endif + ){ + if((ieee->PowerSaveControl.ReturnPoint == IPS_CALLBACK_NONE)&& + (!ieee->bNetPromiscuousMode)) + { + RT_TRACE(COMP_PS, "====================>haha:IPSEnter()\n"); + IPSEnter(dev); + } + } + } +#endif +#ifdef _RTL8192_EXT_PATCH_ + MgntLinkKeepAlive(priv); +#endif + { + if((ieee->state == RTLLIB_LINKED) && (ieee->iw_mode == IW_MODE_INFRA) && (!ieee->bNetPromiscuousMode)) + { + if( ieee->LinkDetectInfo.NumRxOkInPeriod> 100 || + ieee->LinkDetectInfo.NumTxOkInPeriod> 100 ) { + bBusyTraffic = true; + } + +#ifdef ENABLE_LPS + if( ((ieee->LinkDetectInfo.NumRxUnicastOkInPeriod + ieee->LinkDetectInfo.NumTxOkInPeriod) > 8 ) || + (ieee->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) ) + { + bEnterPS= false; + } + else + { + bEnterPS= true; + } + + if (ieee->current_network.beacon_interval < 95) + bEnterPS= false; + + if(bEnterPS) + { + LeisurePSEnter(dev); + } + else + { + LeisurePSLeave(dev); + } +#endif + + } + else + { +#ifdef ENABLE_LPS + RT_TRACE(COMP_LPS,"====>no link LPS leave\n"); + LeisurePSLeave(dev); +#endif + } + + ieee->LinkDetectInfo.NumRxOkInPeriod = 0; + ieee->LinkDetectInfo.NumTxOkInPeriod = 0; + ieee->LinkDetectInfo.NumRxUnicastOkInPeriod = 0; + ieee->LinkDetectInfo.bBusyTraffic = bBusyTraffic; + } + + { +#if defined RTL8192SE + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + IbssAgeFunction(ieee); +#endif + + if(ieee->state == RTLLIB_LINKED && ieee->iw_mode == IW_MODE_INFRA) + { + u32 TotalRxBcnNum = 0; + u32 TotalRxDataNum = 0; + + rtl819x_update_rxcounts(priv, &TotalRxBcnNum, &TotalRxDataNum); + + if((TotalRxBcnNum+TotalRxDataNum) == 0) + priv->check_roaming_cnt ++; + else + priv->check_roaming_cnt = 0; + + + if(priv->check_roaming_cnt > 0) + { + if( ieee->eRFPowerState == eRfOff) + RT_TRACE(COMP_ERR,"========>%s()\n",__FUNCTION__); + + printk("===>%s(): AP is power off,chan:%d, connect another one\n",__FUNCTION__, priv->chan); + + ieee->state = RTLLIB_ASSOCIATING; + +#if defined(RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)) + WapiReturnOneStaInfo(ieee,priv->rtllib->current_network.bssid,0); +#endif + RemovePeerTS(priv->rtllib,priv->rtllib->current_network.bssid); + ieee->is_roaming = true; + ieee->is_set_key = false; + ieee->link_change(dev); + if(ieee->LedControlHandler) + ieee->LedControlHandler(ieee->dev, LED_CTL_START_TO_LINK); + + notify_wx_assoc_event(ieee); + + queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0); + + priv->check_roaming_cnt = 0; + } + } + ieee->LinkDetectInfo.NumRecvBcnInPeriod=0; + ieee->LinkDetectInfo.NumRecvDataInPeriod=0; + + } + + spin_lock_irqsave(&priv->tx_lock,flags); + if((check_reset_cnt++ >= 3) && (!ieee->is_roaming) && + (!priv->RFChangeInProgress) && (!pPSC->bSwRfProcessing)) + { + ResetType = rtl819x_ifcheck_resetornot(dev); +#ifdef _RTL8192_EXT_PATCH_ + if(check_reset_cnt == 0xFF) +#endif + check_reset_cnt = 3; + } + spin_unlock_irqrestore(&priv->tx_lock,flags); + + if(!priv->bDisableNormalResetCheck && ResetType == RESET_TYPE_NORMAL) + { + priv->ResetProgress = RESET_TYPE_NORMAL; + RT_TRACE(COMP_RESET,"%s(): NOMAL RESET\n",__FUNCTION__); + return; + } + +#ifdef _RTL8192_EXT_PATCH_ + if( ((priv->force_reset) || (!priv->bDisableNormalResetCheck && ResetType==RESET_TYPE_SILENT))) + { + if((check_reset_cnt != (last_reset_count + 1)) && !priv->force_reset){ + printk("=======================>%s: Resume firmware\n", __FUNCTION__); + r8192se_resume_firm(dev); + last_reset_count = check_reset_cnt; + }else{ + printk("=======================>%s: Silent Reset\n", __FUNCTION__); + rtl819x_ifsilentreset(dev); + } + } +#else + if( ((priv->force_reset) || (!priv->bDisableNormalResetCheck && ResetType==RESET_TYPE_SILENT))) + { + rtl819x_ifsilentreset(dev); + } +#endif + priv->force_reset = false; + priv->bForcedSilentReset = false; + priv->bResetInProgress = false; + RT_TRACE(COMP_TRACE, " <==RtUsbCheckForHangWorkItemCallback()\n"); + +} + +void watch_dog_timer_callback(unsigned long data) +{ + struct r8192_priv *priv = rtllib_priv((struct net_device *) data); + queue_delayed_work_rsl(priv->priv_wq,&priv->watch_dog_wq,0); + mod_timer(&priv->watch_dog_timer, jiffies + MSECS(RTLLIB_WATCH_DOG_TIME)); +} + +/**************************************************************************** + ---------------------------- NIC TX/RX STUFF--------------------------- +*****************************************************************************/ +void rtl8192_rx_enable(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + priv->ops->rx_enable(dev); +} + +void rtl8192_tx_enable(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + priv->ops->tx_enable(dev); + + rtllib_reset_queue(priv->rtllib); +} + + +static void rtl8192_free_rx_ring(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int i,rx_queue_idx; + + for(rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx ++){ + for (i = 0; i < priv->rxringcount; i++) { + struct sk_buff *skb = priv->rx_buf[rx_queue_idx][i]; + if (!skb) + continue; + + pci_unmap_single(priv->pdev, + *((dma_addr_t *)skb->cb), + priv->rxbuffersize, PCI_DMA_FROMDEVICE); + kfree_skb(skb); + } + + pci_free_consistent(priv->pdev, sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount, + priv->rx_ring[rx_queue_idx], priv->rx_ring_dma[rx_queue_idx]); + priv->rx_ring[rx_queue_idx] = NULL; + } +} + +static void rtl8192_free_tx_ring(struct net_device *dev, unsigned int prio) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtl8192_tx_ring *ring = &priv->tx_ring[prio]; + + while (skb_queue_len(&ring->queue)) { + tx_desc *entry = &ring->desc[ring->idx]; + struct sk_buff *skb = __skb_dequeue(&ring->queue); + + pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr), + skb->len, PCI_DMA_TODEVICE); + kfree_skb(skb); + ring->idx = (ring->idx + 1) % ring->entries; + } + + pci_free_consistent(priv->pdev, sizeof(*ring->desc)*ring->entries, + ring->desc, ring->dma); + ring->desc = NULL; +} + +void rtl8192_data_hard_stop(struct net_device *dev) +{ + #if 0 + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + priv->dma_poll_mask |= (1<dma_poll_mask); + rtl8192_set_mode(dev,EPROM_CMD_NORMAL); + #endif +} + + +void rtl8192_data_hard_resume(struct net_device *dev) +{ + #if 0 + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + priv->dma_poll_mask &= ~(1<dma_poll_mask); + rtl8192_set_mode(dev,EPROM_CMD_NORMAL); + #endif +} + +void rtl8192_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int rate) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + int ret; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + u8 queue_index = tcb_desc->queue_index; + + if((priv->rtllib->eRFPowerState == eRfOff) || IS_NIC_DOWN(priv) || priv->bResetInProgress){ + kfree_skb(skb); + return; + } + + assert(queue_index != TXCMD_QUEUE); + + + memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); +#if 0 + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; + tcb_desc->bTxUseDriverAssingedRate = 1; + tcb_desc->bTxEnableFwCalcDur = 1; +#endif + skb_push(skb, priv->rtllib->tx_headroom); + ret = rtl8192_tx(dev, skb); + if(ret != 0) { + kfree_skb(skb); + }; + + if(queue_index!=MGNT_QUEUE) { + priv->rtllib->stats.tx_bytes+=(skb->len - priv->rtllib->tx_headroom); + priv->rtllib->stats.tx_packets++; + } + + + return; +} + +int rtl8192_hard_start_xmit(struct sk_buff *skb,struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + int ret; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + u8 queue_index = tcb_desc->queue_index; + + if(queue_index != TXCMD_QUEUE){ + if((priv->rtllib->eRFPowerState == eRfOff) ||IS_NIC_DOWN(priv) || priv->bResetInProgress){ + kfree_skb(skb); + return 0; + } + } + + memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); + if(queue_index == TXCMD_QUEUE) { + rtl8192_tx_cmd(dev, skb); + ret = 0; + return ret; + } else { + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; + tcb_desc->bTxUseDriverAssingedRate = 1; + tcb_desc->bTxEnableFwCalcDur = 1; + skb_push(skb, priv->rtllib->tx_headroom); + ret = rtl8192_tx(dev, skb); + if(ret != 0) { + kfree_skb(skb); + }; + } + + + + return ret; + +} + +void rtl8192_tx_isr(struct net_device *dev, int prio) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + struct rtl8192_tx_ring *ring = &priv->tx_ring[prio]; + + while (skb_queue_len(&ring->queue)) { + tx_desc *entry = &ring->desc[ring->idx]; + struct sk_buff *skb; + + if(prio != BEACON_QUEUE) { + if(entry->OWN) + return; + ring->idx = (ring->idx + 1) % ring->entries; + } + + skb = __skb_dequeue(&ring->queue); + pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr), + skb->len, PCI_DMA_TODEVICE); + + kfree_skb(skb); + } + if(prio == MGNT_QUEUE) + ; + if(prio != BEACON_QUEUE) { + tasklet_schedule(&priv->irq_tx_tasklet); + } + +} + +void rtl8192_tx_cmd(struct net_device *dev, struct sk_buff *skb) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtl8192_tx_ring *ring; + tx_desc_cmd* entry; + unsigned int idx; + cb_desc *tcb_desc; + unsigned long flags; + + spin_lock_irqsave(&priv->irq_th_lock,flags); + ring = &priv->tx_ring[TXCMD_QUEUE]; + + idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries; + entry = (tx_desc_cmd*) &ring->desc[idx]; + + tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + + priv->ops->tx_fill_cmd_descriptor(dev, entry, tcb_desc, skb); + + __skb_queue_tail(&ring->queue, skb); + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + + return; +} + +short rtl8192_tx(struct net_device *dev, struct sk_buff* skb) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtl8192_tx_ring *ring; + unsigned long flags; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + tx_desc *pdesc = NULL; + struct rtllib_hdr_1addr * header = NULL; + u16 fc=0, type=0,stype=0; + bool multi_addr=false,broad_addr=false,uni_addr=false; + u8* pda_addr = NULL; + int idx; + u32 fwinfo_size = 0; + + if(priv->bdisable_nic){ + RT_TRACE(COMP_ERR,"%s: ERR!! Nic is disabled! Can't tx packet len=%d qidx=%d!!!\n", __FUNCTION__, skb->len, tcb_desc->queue_index); + return skb->len; + } + + priv->rtllib->bAwakePktSent = true; + +#if defined RTL8192SE || defined RTL8192CE + fwinfo_size = 0; +#else + fwinfo_size = sizeof(TX_FWINFO_8190PCI); +#endif + + header = (struct rtllib_hdr_1addr *)(((u8*)skb->data) + fwinfo_size); + fc = header->frame_ctl; + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + pda_addr = header->addr1; + + if(is_multicast_ether_addr(pda_addr)) + multi_addr = true; + else if(is_broadcast_ether_addr(pda_addr)) + broad_addr = true; + else { +#ifdef _RTL8192_EXT_PATCH_ + priv->NumTxUnicast++; +#endif + uni_addr = true; + } + + if(uni_addr) + priv->stats.txbytesunicast += skb->len - fwinfo_size; + else if(multi_addr) + priv->stats.txbytesmulticast += skb->len - fwinfo_size; + else + priv->stats.txbytesbroadcast += skb->len - fwinfo_size; + + spin_lock_irqsave(&priv->irq_th_lock,flags); + ring = &priv->tx_ring[tcb_desc->queue_index]; + if (tcb_desc->queue_index != BEACON_QUEUE) { + idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries; + } else { + idx = 0; + } + + pdesc = &ring->desc[idx]; + if((pdesc->OWN == 1) && (tcb_desc->queue_index != BEACON_QUEUE)) { + RT_TRACE(COMP_ERR,"No more TX desc@%d, ring->idx = %d,idx = %d, skblen = 0x%x", \ + tcb_desc->queue_index,ring->idx, idx,skb->len); + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + return skb->len; + } + + if(tcb_desc->queue_index == MGNT_QUEUE) + { + } + + if(type == RTLLIB_FTYPE_DATA){ + if(priv->rtllib->LedControlHandler) + priv->rtllib->LedControlHandler(dev, LED_CTL_TX); + } + priv->ops->tx_fill_descriptor(dev, pdesc, tcb_desc, skb); + __skb_queue_tail(&ring->queue, skb); + pdesc->OWN = 1; + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + dev->trans_start = jiffies; + +#ifdef RTL8192CE + if(tcb_desc->queue_index == BEACON_QUEUE){ + write_nic_word(dev, REG_PCIE_CTRL_REG, BIT4); + }else{ + write_nic_word(dev, REG_PCIE_CTRL_REG, BIT0<<(tcb_desc->queue_index)); + } +#else + write_nic_word(dev,TPPoll,0x01<queue_index); +#endif + return 0; +} + +short rtl8192_alloc_rx_desc_ring(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + rx_desc *entry = NULL; + int i, rx_queue_idx; + + for(rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx ++){ + priv->rx_ring[rx_queue_idx] = pci_alloc_consistent(priv->pdev, + sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount, &priv->rx_ring_dma[rx_queue_idx]); + + if (!priv->rx_ring[rx_queue_idx] || (unsigned long)priv->rx_ring[rx_queue_idx] & 0xFF) { + RT_TRACE(COMP_ERR,"Cannot allocate RX ring\n"); + return -ENOMEM; + } + + memset(priv->rx_ring[rx_queue_idx], 0, sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount); + priv->rx_idx[rx_queue_idx] = 0; + + for (i = 0; i < priv->rxringcount; i++) { + struct sk_buff *skb = dev_alloc_skb(priv->rxbuffersize); + dma_addr_t *mapping; + entry = &priv->rx_ring[rx_queue_idx][i]; + if (!skb) + return 0; + skb->dev = dev; + priv->rx_buf[rx_queue_idx][i] = skb; + mapping = (dma_addr_t *)skb->cb; + *mapping = pci_map_single(priv->pdev, skb_tail_pointer_rsl(skb), + priv->rxbuffersize, PCI_DMA_FROMDEVICE); + + entry->BufferAddress = cpu_to_le32(*mapping); + + entry->Length = priv->rxbuffersize; + entry->OWN = 1; + } + + entry->EOR = 1; + } + return 0; +} + +static int rtl8192_alloc_tx_desc_ring(struct net_device *dev, + unsigned int prio, unsigned int entries) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + tx_desc *ring; + dma_addr_t dma; + int i; + + ring = pci_alloc_consistent(priv->pdev, sizeof(*ring) * entries, &dma); + if (!ring || (unsigned long)ring & 0xFF) { + RT_TRACE(COMP_ERR, "Cannot allocate TX ring (prio = %d)\n", prio); + return -ENOMEM; + } + + memset(ring, 0, sizeof(*ring)*entries); + priv->tx_ring[prio].desc = ring; + priv->tx_ring[prio].dma = dma; + priv->tx_ring[prio].idx = 0; + priv->tx_ring[prio].entries = entries; + skb_queue_head_init(&priv->tx_ring[prio].queue); + + for (i = 0; i < entries; i++) + ring[i].NextDescAddress = + cpu_to_le32((u32)dma + ((i + 1) % entries) * sizeof(*ring)); + + return 0; +} + + +short rtl8192_pci_initdescring(struct net_device *dev) +{ + u32 ret; + int i; + struct r8192_priv *priv = rtllib_priv(dev); + + ret = rtl8192_alloc_rx_desc_ring(dev); + if (ret) { + return ret; + } + + + for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) { + if ((ret = rtl8192_alloc_tx_desc_ring(dev, i, priv->txringcount))) + goto err_free_rings; + } + +#if 0 + if ((ret = rtl8192_alloc_tx_desc_ring(dev, MAX_TX_QUEUE_COUNT - 1, 2))) + goto err_free_rings; +#endif + + return 0; + +err_free_rings: + rtl8192_free_rx_ring(dev); + for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) + if (priv->tx_ring[i].desc) + rtl8192_free_tx_ring(dev, i); + return 1; +} + +void rtl8192_pci_resetdescring(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int i,rx_queue_idx; + unsigned long flags = 0; + + for(rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx ++){ + if(priv->rx_ring[rx_queue_idx]) { + rx_desc *entry = NULL; + for (i = 0; i < priv->rxringcount; i++) { + entry = &priv->rx_ring[rx_queue_idx][i]; + entry->OWN = 1; + } + priv->rx_idx[rx_queue_idx] = 0; + } + } + + spin_lock_irqsave(&priv->irq_th_lock,flags); + for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) { + if (priv->tx_ring[i].desc) { + struct rtl8192_tx_ring *ring = &priv->tx_ring[i]; + + while (skb_queue_len(&ring->queue)) { + tx_desc *entry = &ring->desc[ring->idx]; + struct sk_buff *skb = __skb_dequeue(&ring->queue); + + pci_unmap_single(priv->pdev, le32_to_cpu(entry->TxBuffAddr), + skb->len, PCI_DMA_TODEVICE); + kfree_skb(skb); + ring->idx = (ring->idx + 1) % ring->entries; + } + ring->idx = 0; + } + } + spin_unlock_irqrestore(&priv->irq_th_lock,flags); +} + +void rtl819x_UpdateRxPktTimeStamp (struct net_device *dev, struct rtllib_rx_stats *stats) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + if(stats->bIsAMPDU && !stats->bFirstMPDU) { + stats->mac_time[0] = priv->LastRxDescTSFLow; + stats->mac_time[1] = priv->LastRxDescTSFHigh; + } else { + priv->LastRxDescTSFLow = stats->mac_time[0]; + priv->LastRxDescTSFHigh = stats->mac_time[1]; + } +} + +long rtl819x_translate_todbm(struct r8192_priv * priv, u8 signal_strength_index ) +{ + long signal_power; + +#ifdef _RTL8192_EXT_PATCH_ + if(priv->CustomerID == RT_CID_819x_Lenovo) + { + signal_power = (long)signal_strength_index; + if(signal_power >= 45) + signal_power -= 110; + else + { + signal_power = ((signal_power*6)/10); + signal_power -= 93; + } + return signal_power; + } +#endif + signal_power = (long)((signal_strength_index + 1) >> 1); + signal_power -= 95; + + return signal_power; +} + + +void +rtl819x_update_rxsignalstatistics8190pci( + struct r8192_priv * priv, + struct rtllib_rx_stats * pprevious_stats + ) +{ + int weighting = 0; + + + if(priv->stats.recv_signal_power == 0) + priv->stats.recv_signal_power = pprevious_stats->RecvSignalPower; + + if(pprevious_stats->RecvSignalPower > priv->stats.recv_signal_power) + weighting = 5; + else if(pprevious_stats->RecvSignalPower < priv->stats.recv_signal_power) + weighting = (-5); + priv->stats.recv_signal_power = (priv->stats.recv_signal_power * 5 + pprevious_stats->RecvSignalPower + weighting) / 6; +} + +void +rtl819x_process_cck_rxpathsel( + struct r8192_priv * priv, + struct rtllib_rx_stats * pprevious_stats + ) +{ +#ifdef RTL8190P + char last_cck_adc_pwdb[4]={0,0,0,0}; + u8 i; + if(priv->rf_type == RF_2T4R && DM_RxPathSelTable.Enable) + { + if(pprevious_stats->bIsCCK && + (pprevious_stats->bPacketToSelf ||pprevious_stats->bPacketBeacon)) + { + if(priv->stats.cck_adc_pwdb.TotalNum++ >= PHY_RSSI_SLID_WIN_MAX) + { + priv->stats.cck_adc_pwdb.TotalNum = PHY_RSSI_SLID_WIN_MAX; + for(i=RF90_PATH_A; istats.cck_adc_pwdb.elements[i][priv->stats.cck_adc_pwdb.index]; + priv->stats.cck_adc_pwdb.TotalVal[i] -= last_cck_adc_pwdb[i]; + } + } + for(i=RF90_PATH_A; istats.cck_adc_pwdb.TotalVal[i] += pprevious_stats->cck_adc_pwdb[i]; + priv->stats.cck_adc_pwdb.elements[i][priv->stats.cck_adc_pwdb.index] = pprevious_stats->cck_adc_pwdb[i]; + } + priv->stats.cck_adc_pwdb.index++; + if(priv->stats.cck_adc_pwdb.index >= PHY_RSSI_SLID_WIN_MAX) + priv->stats.cck_adc_pwdb.index = 0; + + for(i=RF90_PATH_A; istats.cck_adc_pwdb.TotalVal[i]/priv->stats.cck_adc_pwdb.TotalNum; + } + + for(i=RF90_PATH_A; icck_adc_pwdb[i] > (char)priv->undecorated_smoothed_cck_adc_pwdb[i]) + { + priv->undecorated_smoothed_cck_adc_pwdb[i] = + ( (priv->undecorated_smoothed_cck_adc_pwdb[i]*(Rx_Smooth_Factor-1)) + + (pprevious_stats->cck_adc_pwdb[i])) /(Rx_Smooth_Factor); + priv->undecorated_smoothed_cck_adc_pwdb[i] = priv->undecorated_smoothed_cck_adc_pwdb[i] + 1; + } + else + { + priv->undecorated_smoothed_cck_adc_pwdb[i] = + ( (priv->undecorated_smoothed_cck_adc_pwdb[i]*(Rx_Smooth_Factor-1)) + + (pprevious_stats->cck_adc_pwdb[i])) /(Rx_Smooth_Factor); + } + } + } + } +#endif +} + + +u8 rtl819x_query_rxpwrpercentage( + char antpower + ) +{ + if ((antpower <= -100) || (antpower >= 20)) + { + return 0; + } + else if (antpower >= 0) + { + return 100; + } + else + { + return (100+antpower); + } + +} /* QueryRxPwrPercentage */ + +u8 +rtl819x_evm_dbtopercentage( + char value + ) +{ + char ret_val; + + ret_val = value; + + if(ret_val >= 0) + ret_val = 0; + if(ret_val <= -33) + ret_val = -33; + ret_val = 0 - ret_val; + ret_val*=3; + if(ret_val == 99) + ret_val = 100; + return(ret_val); +} + +void +rtl8192_record_rxdesc_forlateruse( + struct rtllib_rx_stats * psrc_stats, + struct rtllib_rx_stats * ptarget_stats +) +{ + ptarget_stats->bIsAMPDU = psrc_stats->bIsAMPDU; + ptarget_stats->bFirstMPDU = psrc_stats->bFirstMPDU; +} + + + +void rtl8192_rx_normal(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_hdr_1addr *rtllib_hdr = NULL; + bool unicast_packet = false; + bool bLedBlinking=true; + u16 fc=0, type=0; + u32 skb_len = 0; + int rx_queue_idx = RX_MPDU_QUEUE; + + struct rtllib_rx_stats stats = { + .signal = 0, + .noise = -98, + .rate = 0, + .freq = RTLLIB_24GHZ_BAND, + }; + unsigned int count = priv->rxringcount; + + stats.nic_type = NIC_8192E; + + while (count--) { + rx_desc *pdesc = &priv->rx_ring[rx_queue_idx][priv->rx_idx[rx_queue_idx]]; + struct sk_buff *skb = priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]]; + + if (pdesc->OWN){ + return; + } else { + + struct sk_buff *new_skb = NULL; + if (!priv->ops->rx_query_status_descriptor(dev, &stats, pdesc, skb)) + goto done; + + pci_unmap_single(priv->pdev, + *((dma_addr_t *)skb->cb), + priv->rxbuffersize, + PCI_DMA_FROMDEVICE); + + skb_put(skb, pdesc->Length); + skb_reserve(skb, stats.RxDrvInfoSize + stats.RxBufShift); + skb_trim(skb, skb->len - 4/*sCrcLng*/); + rtllib_hdr = (struct rtllib_hdr_1addr *)skb->data; + if(is_broadcast_ether_addr(rtllib_hdr->addr1)) { + }else if(is_multicast_ether_addr(rtllib_hdr->addr1)){ + }else { + /* unicast packet */ + unicast_packet = true; + } + fc = le16_to_cpu(rtllib_hdr->frame_ctl); + type = WLAN_FC_GET_TYPE(fc); + if(type == RTLLIB_FTYPE_MGMT) + { + bLedBlinking = false; + } + if(bLedBlinking) + if(priv->rtllib->LedControlHandler) + priv->rtllib->LedControlHandler(dev, LED_CTL_RX); + + if(stats.bCRC) { + if(type != RTLLIB_FTYPE_MGMT) + priv->stats.rxdatacrcerr ++; + else + priv->stats.rxmgmtcrcerr ++; + } + + skb_len = skb->len; + +#ifdef RTL8192CE + if (!stats.bCRC) +#else + if (1) +#endif + { + if(!rtllib_rx(priv->rtllib, skb, &stats)){ + dev_kfree_skb_any(skb); + } else { + priv->stats.rxok++; + if(unicast_packet) { + priv->stats.rxbytesunicast += skb_len; + } + } + }else{ + dev_kfree_skb_any(skb); + } +#if 1 + new_skb = dev_alloc_skb(priv->rxbuffersize); + if (unlikely(!new_skb)) + { + printk("==========>can't alloc skb for rx\n"); + goto done; + } + skb=new_skb; + skb->dev = dev; +#endif + priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]] = skb; + *((dma_addr_t *) skb->cb) = pci_map_single(priv->pdev, skb_tail_pointer_rsl(skb), priv->rxbuffersize, PCI_DMA_FROMDEVICE); + + } +done: + pdesc->BufferAddress = cpu_to_le32(*((dma_addr_t *)skb->cb)); + pdesc->OWN = 1; + pdesc->Length = priv->rxbuffersize; + if (priv->rx_idx[rx_queue_idx] == priv->rxringcount-1) + pdesc->EOR = 1; + priv->rx_idx[rx_queue_idx] = (priv->rx_idx[rx_queue_idx] + 1) % priv->rxringcount; + } + +} + +void rtl8192_rx_cmd(struct net_device *dev) +{ +#ifdef RTL8192SE + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + unsigned int count = priv->rxringcount; + int rx_queue_idx = RX_CMD_QUEUE; + + struct rtllib_rx_stats stats = { + .signal = 0, + .noise = -98, + .rate = 0, + .freq = RTLLIB_24GHZ_BAND, + }; + stats.nic_type = NIC_8192E; + + while (count--) { + rx_desc *pdesc = &priv->rx_ring[rx_queue_idx][priv->rx_idx[rx_queue_idx]]; + struct sk_buff *skb = priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]]; + + if (pdesc->OWN){ + return; + } else { + struct sk_buff *new_skb = NULL; + + pci_unmap_single(priv->pdev, + *((dma_addr_t *)skb->cb), + priv->rxbuffersize, + PCI_DMA_FROMDEVICE); + + skb_put(skb, pdesc->Length); + + if(pdesc->MACID == 0x1e){ + + pdesc->Length = pdesc->Length - 32; + pdesc->DrvInfoSize = 4; + printk(">>>>%s()CMD PKT RX, beacon_len:%d payload_len:%d\n",__func__, pdesc->Length,skb->len); + + + priv->ops->rx_query_status_descriptor(dev, &stats, pdesc, skb); + skb_reserve(skb, stats.RxDrvInfoSize + stats.RxBufShift); + if(0) + { + u8 i = 0; + u8 *arry = (u8*) skb->data; + + printk("\n==============>\n"); + for(i = 0; i < 32; i ++){ + if((i % 4 == 0)&&(i != 0)) + printk("\n"); + printk("%2.2x ", arry[i]); + } + printk("\n<==============\n"); + } + } + + skb_trim(skb, skb->len - 4/*sCrcLng*/); + + if(pdesc->MACID == 0x1e){ + if(!rtllib_rx(priv->rtllib, skb, &stats)){ + dev_kfree_skb_any(skb); + } + }else{ + if(priv->ops->rx_command_packet_handler != NULL) + priv->ops->rx_command_packet_handler(dev, skb, pdesc); + dev_kfree_skb_any(skb); + } + + + new_skb = dev_alloc_skb(priv->rxbuffersize); + if (unlikely(!new_skb)) + { + printk("==========>can't alloc skb for rx\n"); + goto done; + } + skb=new_skb; + skb->dev = dev; + + priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]] = skb; + *((dma_addr_t *) skb->cb) = pci_map_single(priv->pdev, skb_tail_pointer_rsl(skb), priv->rxbuffersize, PCI_DMA_FROMDEVICE); + + } +done: + pdesc->BufferAddress = cpu_to_le32(*((dma_addr_t *)skb->cb)); + pdesc->OWN = 1; + pdesc->Length = priv->rxbuffersize; + if (priv->rx_idx[rx_queue_idx] == priv->rxringcount-1) + pdesc->EOR = 1; + priv->rx_idx[rx_queue_idx] = (priv->rx_idx[rx_queue_idx] + 1) % priv->rxringcount; + } +#endif +} + + +void rtl8192_tx_resume(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + struct sk_buff *skb; + int queue_index; + + for(queue_index = BK_QUEUE; queue_index < TXCMD_QUEUE;queue_index++) { + while((!skb_queue_empty(&ieee->skb_waitQ[queue_index]))&& + (priv->rtllib->check_nic_enough_desc(dev,queue_index) > 0)) { + skb = skb_dequeue(&ieee->skb_waitQ[queue_index]); + ieee->softmac_data_hard_start_xmit(skb,dev,0/* rate useless now*/); + #if 0 + if(queue_index!=MGNT_QUEUE) { + ieee->stats.tx_packets++; + ieee->stats.tx_bytes += skb->len; + } + #endif + } +#ifdef ENABLE_AMSDU + while((skb_queue_len(&priv->rtllib->skb_aggQ[queue_index]) > 0)&&\ + (!(priv->rtllib->queue_stop)) && \ + (priv->rtllib->check_nic_enough_desc(dev,queue_index) > 0)){ + + struct sk_buff_head pSendList; + u8 dst[ETH_ALEN]; + cb_desc *tcb_desc = NULL; + int qos_actived = priv->rtllib->current_network.qos_data.active; + struct sta_info *psta = NULL; + u8 bIsSptAmsdu = false; + +#ifdef WIFI_TEST + if (queue_index <= VO_QUEUE) + queue_index = wmm_queue_select(priv, queue_index, priv->rtllib->skb_aggQ); +#endif + priv->rtllib->amsdu_in_process = true; + + skb = skb_dequeue(&(priv->rtllib->skb_aggQ[queue_index])); + if(skb == NULL) + { + printk("In %s:Skb is NULL\n",__FUNCTION__); + return; + } + tcb_desc = (pcb_desc)(skb->cb + MAX_DEV_ADDR_SIZE); + if(tcb_desc->bFromAggrQ) + { + rtllib_xmit_inter(skb, dev); + return; + } + + memcpy(dst, skb->data, ETH_ALEN); + if(priv->rtllib->iw_mode == IW_MODE_ADHOC) + { + psta = GetStaInfo(priv->rtllib, dst); + if(psta) { + if(psta->htinfo.bEnableHT) + bIsSptAmsdu = true; + } + } + else if(priv->rtllib->iw_mode == IW_MODE_INFRA) + bIsSptAmsdu = true; + else + bIsSptAmsdu = true; + bIsSptAmsdu = true; + + bIsSptAmsdu = bIsSptAmsdu && priv->rtllib->pHTInfo->bCurrent_AMSDU_Support && qos_actived; + + if(qos_actived && !is_broadcast_ether_addr(dst) && + !is_multicast_ether_addr(dst) && + bIsSptAmsdu) + { + skb_queue_head_init(&pSendList); + if(AMSDU_GetAggregatibleList(priv->rtllib, skb, &pSendList,queue_index)) + { + struct sk_buff * pAggrSkb = AMSDU_Aggregation(priv->rtllib, &pSendList); + if(NULL != pAggrSkb) + rtllib_xmit_inter(pAggrSkb, dev); + } + } + else + { + memset(skb->cb,0,sizeof(skb->cb)); + tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + tcb_desc->bFromAggrQ = true; + rtllib_xmit_inter(skb, dev); + } + } +#endif +#ifdef _RTL8192_EXT_PATCH_ + while((!skb_queue_empty(&priv->rtllib->skb_meshaggQ[queue_index]) )&&\ + (priv->rtllib->check_nic_enough_desc(dev,queue_index)> 0)) + { + struct sk_buff_head pSendList; + u8 dst[ETH_ALEN]; + cb_desc *tcb_desc = NULL; + u8 IsHTEnable = false; + int qos_actived = 1; + priv->rtllib->mesh_amsdu_in_process = true; + skb = skb_dequeue(&(priv->rtllib->skb_meshaggQ[queue_index])); + if(skb == NULL) + { + priv->rtllib->mesh_amsdu_in_process = false; + printk("In %s:Skb is NULL\n",__FUNCTION__); + return; + } + tcb_desc = (pcb_desc)(skb->cb + MAX_DEV_ADDR_SIZE); + if(tcb_desc->bFromAggrQ) + { + rtllib_mesh_xmit(skb, dev); + continue; + } + memcpy(dst, skb->data, ETH_ALEN); + +#if 0 + ppeerMP_htinfo phtinfo = NULL; + bool is_mesh = false; + if(priv->mshobj->ext_patch_rtllib_is_mesh) + is_mesh = priv->mshobj->ext_patch_rtllib_is_mesh(priv->rtllib,dst); + if(is_mesh){ + if(priv->rtllib->ext_patch_rtllib_get_peermp_htinfo) + { + phtinfo = priv->rtllib->ext_patch_rtllib_get_peermp_htinfo(ieee,dst); + if(phtinfo == NULL) + { + RT_TRACE(COMP_ERR,"%s(): No htinfo\n",__FUNCTION__); + } + else + { + if(phtinfo->bEnableHT) + IsHTEnable = true; + } + } + } + else + { + printk("===>%s():tx AMSDU data has not entry,dst: "MAC_FMT"\n",__FUNCTION__,MAC_ARG(dst)); + IsHTEnable = true; + } +#else + IsHTEnable = true; +#endif + IsHTEnable = (IsHTEnable && ieee->pHTInfo->bCurrent_Mesh_AMSDU_Support && qos_actived); + if( !is_broadcast_ether_addr(dst) && + !is_multicast_ether_addr(dst) && + IsHTEnable) + { + skb_queue_head_init(&pSendList); + if(msh_AMSDU_GetAggregatibleList(priv->rtllib, skb, &pSendList,queue_index)) + { + struct sk_buff * pAggrSkb = msh_AMSDU_Aggregation(priv->rtllib, &pSendList); + if(NULL != pAggrSkb) + rtllib_mesh_xmit(pAggrSkb, dev); + }else{ + priv->rtllib->mesh_amsdu_in_process = false; + return; + } + } + else + { + memset(skb->cb,0,sizeof(skb->cb)); + tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + tcb_desc->bFromAggrQ = true; + rtllib_mesh_xmit(skb, dev); + } + } +#endif + } +} + +void rtl8192_irq_tx_tasklet(struct r8192_priv *priv) +{ + rtl8192_tx_resume(priv->rtllib->dev); +} + +void rtl8192_irq_rx_tasklet(struct r8192_priv *priv) +{ + rtl8192_rx_normal(priv->rtllib->dev); + + if(MAX_RX_QUEUE > 1) + rtl8192_rx_cmd(priv->rtllib->dev); + +#ifndef RTL8192CE + write_nic_dword(priv->rtllib->dev, INTA_MASK,read_nic_dword(priv->rtllib->dev, INTA_MASK) | IMR_RDU); +#endif +} + +/**************************************************************************** + ---------------------------- NIC START/CLOSE STUFF--------------------------- +*****************************************************************************/ +void rtl8192_cancel_deferred_work(struct r8192_priv* priv) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&priv->watch_dog_wq); + cancel_delayed_work(&priv->update_beacon_wq); +#ifndef RTL8190P + cancel_delayed_work(&priv->rtllib->hw_sleep_wq); +#endif +#if defined RTL8192SE + cancel_delayed_work(&priv->check_hw_scan_wq); + cancel_delayed_work(&priv->hw_scan_simu_wq); + cancel_delayed_work(&priv->start_hw_scan_wq); + cancel_delayed_work(&priv->rtllib->update_assoc_sta_info_wq); + cancel_delayed_work(&priv->rtllib->check_tsf_wq); +#endif +#endif + +#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,22) + cancel_work_sync(&priv->reset_wq); + cancel_work_sync(&priv->qos_activate); +#elif ((LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))) + cancel_delayed_work(&priv->reset_wq); + cancel_delayed_work(&priv->qos_activate); +#if defined RTL8192SE + cancel_delayed_work(&priv->rtllib->update_assoc_sta_info_wq); + cancel_delayed_work(&priv->rtllib->check_tsf_wq); +#endif +#endif + +} + +int _rtl8192_up(struct net_device *dev,bool is_silent_reset) +{ +#ifdef _RTL8192_EXT_PATCH_ + if(_rtl8192_mesh_up(dev, is_silent_reset) == -1) + return -1; +#else + if(_rtl8192_sta_up(dev, is_silent_reset) == -1) + return -1; +#endif + + return 0; +} + + +int rtl8192_open(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret; + + down(&priv->wx_sem); + ret = rtl8192_up(dev); + up(&priv->wx_sem); + return ret; + +} + + +int rtl8192_up(struct net_device *dev) +{ +#ifndef _RTL8192_EXT_PATCH_ + struct r8192_priv *priv = rtllib_priv(dev); + + if (priv->up == 1) return -1; + return _rtl8192_up(dev,false); +#else + return _rtl8192_up(dev,false); +#endif +} + + +int rtl8192_close(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret; + + if ((rtllib_act_scanning(priv->rtllib, false)) && + !(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + rtllib_stop_scan(priv->rtllib); + } + + down(&priv->wx_sem); + + ret = rtl8192_down(dev,true); + + up(&priv->wx_sem); + + return ret; + +} + +int rtl8192_down(struct net_device *dev, bool shutdownrf) +{ +#ifdef CONFIG_MP + struct r8192_priv *priv = rtllib_priv(dev); +#endif + +#ifdef _RTL8192_EXT_PATCH_ + if(rtl8192_mesh_down(dev, shutdownrf) == -1) + return -1; +#else + if(rtl8192_sta_down(dev, shutdownrf) == -1) + return -1; +#endif + +#ifdef CONFIG_MP + if (priv->bCckContTx) { + printk("####RTL819X MP####stop single cck continious TX\n"); + mpt_StopCckCoNtTx(dev); + } + if (priv->bOfdmContTx) { + printk("####RTL819X MP####stop single ofdm continious TX\n"); + mpt_StopOfdmContTx(dev); + } + if (priv->bSingleCarrier) { + printk("####RTL819X MP####stop single carrier mode\n"); + MPT_ProSetSingleCarrier(dev, false); + } +#endif + return 0; +} + +void rtl8192_commit(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef _RTL8192_EXT_PATCH_ + if (IS_NIC_DOWN(priv)) + return ; + rtllib_softmac_stop_protocol(priv->rtllib,0,true); + rtl8192_irq_disable(dev); + priv->ops->stop_adapter(dev, true); + priv->up = 0; + _rtl8192_up(dev,false); +#else + if (priv->up == 0) return ; + rtllib_softmac_stop_protocol(priv->rtllib,true); + rtl8192_irq_disable(dev); + priv->ops->stop_adapter(dev, true); + _rtl8192_up(dev,false); +#endif + +} + +void rtl8192_restart(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_work_rsl(data, struct r8192_priv, reset_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + + down(&priv->wx_sem); + + rtl8192_commit(dev); + + up(&priv->wx_sem); +} + +static void r8192_set_multicast(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + short promisc; + + + + promisc = (dev->flags & IFF_PROMISC) ? 1:0; + + if (promisc != priv->promisc) { + ; + } + + priv->promisc = promisc; + +} + + +int r8192_set_mac_adr(struct net_device *dev, void *mac) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct sockaddr *addr = mac; + + down(&priv->wx_sem); + + memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + schedule_work(&priv->reset_wq); +#else + schedule_task(&priv->reset_wq); +#endif + up(&priv->wx_sem); + + return 0; +} + +#if defined (RTL8192S_WAPI_SUPPORT) +extern int wapi_ioctl_set_mode(struct net_device *dev, struct iw_request_info *a,union iwreq_data *wrqu, char *b); +int WAPI_Ioctl(struct net_device *dev, struct iwreq *wrq, int cmd) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + static u8 QueueData[WAPI_MAX_BUFF_LEN]; +#define DATAQUEUE_EMPTY "Queue is empty" + int ret = 0; + + switch(cmd){ + case WAPI_CMD_GET_WAPI_SUPPORT: + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_WAPI_SUPPORT!\n",__FUNCTION__); + if(copy_to_user((u8 *)(wrq->u.data.pointer), &ieee->WapiSupport, sizeof(u8))==0) + wrq->u.data.length = sizeof(u8); + break; + case WAPI_CMD_SET_WAPI_ENABLE: + { + u8 wapi_enable = *(u8 *)wrq->u.data.pointer; + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_WAPI_ENABLE!\n",__FUNCTION__); + if((ieee->WapiSupport) && (wapi_enable == 1)){ + ieee->wapiInfo.bWapiEnable = true; + ieee->pairwise_key_type = KEY_TYPE_SMS4; + ieee->group_key_type = KEY_TYPE_SMS4; + ieee->wapiInfo.extra_prefix_len = WAPI_EXT_LEN; + ieee->wapiInfo.extra_postfix_len = SMS4_MIC_LEN; + } + else if (wapi_enable == 0) { + ieee->wapiInfo.bWapiEnable = false; + ieee->pairwise_key_type = KEY_TYPE_NA; + ieee->group_key_type = KEY_TYPE_NA; + } + break; + } + case WAPI_CMD_SET_WAPI_PSK: + { + u8 wapi_psk = *(u8 *)wrq->u.data.pointer; + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_WAPI_PSK!\n",__FUNCTION__); + if(ieee->wapiInfo.bWapiEnable){ + ieee->wapiInfo.bWapiPSK = (wapi_psk > 0)?1:0; + WAPI_TRACE(WAPI_API, "%s(): bWapiPSK=%d!\n",__FUNCTION__, ieee->wapiInfo.bWapiPSK); + } + break; + } + case WAPI_CMD_SET_KEY: + { /*Data: keyType(1) + bTxEnable(1) + bAuthenticator(1) + bUpdate(1) + PeerAddr(6) + DataKey(16) + MicKey(16) + KeyId(1)*/ + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + PRT_WAPI_BKID pWapiBkid; + PRT_WAPI_STA_INFO pWapiSta; + u8 data[43]; + bool bTxEnable; + bool bUpdate; + bool bAuthenticator; + u8 PeerAddr[6]; + u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_KEY!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if(wrq->u.data.length < 26){ + ret = -1; + break; + } + + copy_from_user(data, (u8 *)wrq->u.data.pointer, wrq->u.data.length); + bTxEnable = data[1]; + bAuthenticator = data[2]; + bUpdate = data[3]; + memcpy(PeerAddr,data+4,6); + + if(data[0] == 0x3){ + if(!list_empty(&(pWapiInfo->wapiBKIDIdleList))){ + pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID,list); + list_del_init(&pWapiBkid->list); + memcpy(pWapiBkid->bkid, data+10, 16); + list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDStoreList); + WAPI_DATA(WAPI_API, "SetKey - BKID", pWapiBkid->bkid, 16); + } + } else if (data[0] == 0x04){ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){ + if(bUpdate){ + if(bAuthenticator) { + memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPN,WapiAEPNInitialValueSrc,16); + } else { + memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16); + } + } + } + } + } + else{ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){ + pWapiSta->bAuthenticatorInUpdata = false; + switch(data[0]){ + case 1: + if(bAuthenticator){ + memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16); + if(!bUpdate) { + WAPI_TRACE(WAPI_API, "%s(): AE fisrt set usk!\n",__FUNCTION__); + pWapiSta->wapiUsk.bSet = true; + memcpy(pWapiSta->wapiUsk.dataKey,data+10,16); + memcpy(pWapiSta->wapiUsk.micKey,data+26,16); + pWapiSta->wapiUsk.keyId = *(data+42); + pWapiSta->wapiUsk.bTxEnable = true; + WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUsk.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUsk.micKey, 16); + } + else + { + WAPI_TRACE(WAPI_API, "%s(): AE update usk!\n",__FUNCTION__); + pWapiSta->wapiUskUpdate.bSet = true; + pWapiSta->bAuthenticatorInUpdata = true; + memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16); + memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16); + memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16); + pWapiSta->wapiUskUpdate.keyId = *(data+42); + pWapiSta->wapiUskUpdate.bTxEnable = true; + WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiSta->wapiUskUpdate.keyId); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUskUpdate.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUskUpdate.micKey, 16); + } + } + else{ + if(!bUpdate){ + WAPI_TRACE(WAPI_API, "%s(): ASUE fisrt set usk!\n",__FUNCTION__); + if(bTxEnable){ + pWapiSta->wapiUsk.bTxEnable = true; + memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16); + WAPI_TRACE(WAPI_API, "%s(): Tx enable!\n",__FUNCTION__); + }else{ + pWapiSta->wapiUsk.bSet = true; + memcpy(pWapiSta->wapiUsk.dataKey,data+10,16); + memcpy(pWapiSta->wapiUsk.micKey,data+26,16); + pWapiSta->wapiUsk.keyId = *(data+42); + pWapiSta->wapiUsk.bTxEnable = false; + WAPI_TRACE(WAPI_API, "%s(): Tx disable!\n",__FUNCTION__); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUsk.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUsk.micKey, 16); + } + }else{ + WAPI_TRACE(WAPI_API, "%s(): ASUE update usk!\n",__FUNCTION__); + if(bTxEnable){ + pWapiSta->wapiUskUpdate.bTxEnable = true; + if(pWapiSta->wapiUskUpdate.bSet){ + WAPI_TRACE(WAPI_API, "%s(): ASUE set usk!\n",__FUNCTION__); + memcpy(pWapiSta->wapiUsk.dataKey,pWapiSta->wapiUskUpdate.dataKey,16); + memcpy(pWapiSta->wapiUsk.micKey,pWapiSta->wapiUskUpdate.micKey,16); + pWapiSta->wapiUsk.keyId=pWapiSta->wapiUskUpdate.keyId; + memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiAEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPN,WapiAEPNInitialValueSrc,16); + pWapiSta->wapiUskUpdate.bTxEnable = false; + pWapiSta->wapiUskUpdate.bSet = false; + } + memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16); + }else{ + WAPI_TRACE(WAPI_API, "%s(): ASUE set update usk!\n",__FUNCTION__); + pWapiSta->wapiUskUpdate.bSet = true; + memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16); + memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16); + pWapiSta->wapiUskUpdate.keyId = *(data+42); + pWapiSta->wapiUskUpdate.bTxEnable = false; + WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiSta->wapiUskUpdate.keyId); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Data Key", pWapiSta->wapiUskUpdate.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - AE Usk Mic Key", pWapiSta->wapiUskUpdate.micKey, 16); + } + } + } + break; + case 2: + if(bAuthenticator){ + pWapiInfo->wapiTxMsk.bSet = true; + memcpy(pWapiInfo->wapiTxMsk.dataKey,data+10,16); + memcpy(pWapiInfo->wapiTxMsk.micKey,data+26,16); + pWapiInfo->wapiTxMsk.keyId = *(data+42); + pWapiInfo->wapiTxMsk.bTxEnable = true; + memcpy(pWapiInfo->lastTxMulticastPN,WapiAEMultiCastPNInitialValueSrc,16); + if(!bUpdate){ + WAPI_TRACE(WAPI_API, "%s(): AE fisrt set msk!\n",__FUNCTION__); + if(!pWapiSta->bSetkeyOk) + pWapiSta->bSetkeyOk = true; + pWapiInfo->bFirstAuthentiateInProgress= false; + }else{ + WAPI_TRACE(WAPI_API, "%s():AE update msk!\n",__FUNCTION__); + } + WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiInfo->wapiTxMsk.keyId); + WAPI_DATA(WAPI_API, "SetKey - AE Msk Data Key", pWapiInfo->wapiTxMsk.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - AE Msk Mic Key", pWapiInfo->wapiTxMsk.micKey, 16); + } + else{ + if(!bUpdate){ + WAPI_TRACE(WAPI_API, "%s(): ASUE fisrt set msk!\n",__FUNCTION__); + pWapiSta->wapiMsk.bSet = true; + memcpy(pWapiSta->wapiMsk.dataKey,data+10,16); + memcpy(pWapiSta->wapiMsk.micKey,data+26,16); + pWapiSta->wapiMsk.keyId = *(data+42); + pWapiSta->wapiMsk.bTxEnable = false; + if(!pWapiSta->bSetkeyOk) + pWapiSta->bSetkeyOk = true; + pWapiInfo->bFirstAuthentiateInProgress= false; + WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Data Key", pWapiSta->wapiMsk.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Mic Key", pWapiSta->wapiMsk.micKey, 16); + }else{ + WAPI_TRACE(WAPI_API, "%s(): ASUE update msk!\n",__FUNCTION__); + pWapiSta->wapiMskUpdate.bSet = true; + memcpy(pWapiSta->wapiMskUpdate.dataKey,data+10,16); + memcpy(pWapiSta->wapiMskUpdate.micKey,data+26,16); + pWapiSta->wapiMskUpdate.keyId = *(data+42); + pWapiSta->wapiMskUpdate.bTxEnable = false; + WAPI_TRACE(WAPI_API, "%s(): keyid=%d\n",__FUNCTION__, pWapiSta->wapiMskUpdate.keyId); + WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Data Key", pWapiSta->wapiMskUpdate.dataKey, 16); + WAPI_DATA(WAPI_API, "SetKey - ASUE Msk Mic Key", pWapiSta->wapiMskUpdate.micKey, 16); + } + } + break; + default: + WAPI_TRACE(WAPI_ERR, "%s(): Unknown Flag!\n",__FUNCTION__); + break; + } + } + } + } + break; + } + case WAPI_CMD_SET_MULTICAST_PN: + { + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + PRT_WAPI_STA_INFO pWapiSta; + u8 data[22]; + u8 k; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_MULTICAST_PN!\n",__FUNCTION__); + if (!ieee->WapiSupport) + { + ret = -1; + break; + } + if(wrq->u.data.length < 22){ + ret = -1; + break; + } + + memcpy(data, (u8 *)wrq->u.data.pointer, 22); + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(pWapiSta->PeerMacAddr,data,6)) + { + for(k=0;k<16;k++) + pWapiSta->lastRxMulticastPN[k] = data[21-k]; + break; + } + } + WAPI_DATA(WAPI_API, "Multicast Rx PN:", pWapiSta->lastRxMulticastPN, 16); + break; + } + case WAPI_CMD_GET_PN: + { + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_PN!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if(wrq->u.data.length<16){ + ret = -1; + break; + } + if(copy_to_user((void *)(wrq->u.data.pointer), pWapiInfo->lastTxMulticastPN, 16)==0) + wrq->u.data.length = 16; + break; + } + case WAPI_CMD_GET_WAPIIE: + { + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + u8 data[512]; + u8 Length = 0; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_WAPIIE!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if(wrq->u.data.length<257){ + ret = -1; + break; + } + + if(ieee->iw_mode == IW_MODE_INFRA){ + data[0]= pWapiInfo->assoReqWapiIELength; + Length ++; + memcpy(data+Length,pWapiInfo->assoReqWapiIE,pWapiInfo->assoReqWapiIELength); + Length += pWapiInfo->assoReqWapiIELength; + } + else if(ieee->iw_mode == IW_MODE_ADHOC){ + WAPI_DATA(WAPI_API, "GetWapiIE - ADHOC", pWapiInfo->sendbeaconWapiIE, pWapiInfo->sendbeaconWapiIELength); + data[0] = pWapiInfo->sendbeaconWapiIELength; + Length++; + memcpy(data+Length,pWapiInfo->sendbeaconWapiIE,pWapiInfo->sendbeaconWapiIELength); + Length += pWapiInfo->sendbeaconWapiIELength; + } + + if(copy_to_user((void *)(wrq->u.data.pointer), data, Length)==0) + wrq->u.data.length = Length; + break; + } + case WAPI_CMD_SET_SSID: + { + u8 ssid[IW_ESSID_MAX_SIZE + 1]; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_SSID!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if((wrq->u.data.length == 0) || (NULL == wrq->u.data.pointer)){ + ret = -1; + break; + } + if(wrq->u.data.length > IW_ESSID_MAX_SIZE){ + ret = -1; + break; + } + printk("===>%s(): wrq->u.essid.flags is %d\n",__FUNCTION__,wrq->u.essid.flags); + copy_from_user(ssid, (u8 *)wrq->u.essid.pointer, wrq->u.essid.length); + +#ifdef TO_DO_LIST + if(!ieee->wapiInfo.bWapiEnable) + SetEncryptState(dev); +#endif + if((priv->bHwRadioOff == true) || (!priv->up)){ + ret = -1; + break; + } + ret = rtllib_wx_set_essid(ieee,NULL,(union iwreq_data *)&(wrq->u),ssid); + + break; + } + case WAPI_CMD_GET_BSSID: + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_BSSID!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if((ieee->iw_mode == IW_MODE_INFRA) || (ieee->iw_mode == IW_MODE_ADHOC) ){ + if(copy_to_user((void *)(wrq->u.data.pointer), ieee->current_network.bssid, ETH_ALEN)==0) + wrq->u.data.length = ETH_ALEN; + }else{ + ret = -1; + } + break; +#if 0 + case WAPI_CMD_GET_LINK_STATUS: + { + u8 connect_status = 0; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_GET_LINK_STATUS!\n",__FUNCTION__); + if(ieee->state == IEEE80211_LINKED) + connect_status = 1; + if(copy_to_user((void *)(wrq->u.data.pointer), &connect_status, sizeof(u8))==0) + wrq->u.data.length = sizeof(u8); + break; + } +#endif + case WAPI_CMD_SET_IW_MODE: + { + union iwreq_data *wrqu = (union iwreq_data *)&(wrq->u); + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_IW_MODE!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + WAPI_TRACE(WAPI_API, "%s(): Set iw_mode %d!\n",__FUNCTION__, wrqu->mode); + wapi_ioctl_set_mode(dev, NULL, wrqu, NULL); + if(wrqu->mode == IW_MODE_ADHOC) + ConstructWapiIEForInit(ieee); + break; + } + case WAPI_CMD_SET_DISASSOCIATE: + { + u8 destAddr[6]; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SET_DISASSOCIATE!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if(wrq->u.data.length != 6){ + ret = -1; + break; + } + copy_from_user(destAddr, (u8 *)(wrq->u.data.pointer), wrq->u.data.length); + + if(ieee->iw_mode == IW_MODE_INFRA){ + SendDisassociation(ieee,1,deauth_lv_ss); + ieee80211_disassociate_from_app(ieee); + }else if(ieee->iw_mode == IW_MODE_ADHOC){ + WAPI_TRACE(WAPI_API, "%s(): Disassociate "MAC_FMT"!\n",__FUNCTION__, MAC_ARG(destAddr)); + WapiReturnOneStaInfo(ieee, destAddr, 1); + DelStaInfo(ieee, destAddr); + } + break; + } + case WAPI_CMD_SAVE_PID: + { + u8 strPID[10]; + u32 len = 0; + int i = 0; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_SAVE_PID!\n",__FUNCTION__); + if (!ieee->WapiSupport){ + ret = -1; + break; + } + if ( !wrq->u.data.pointer ){ + ret = -1; + break; + } + + len = wrq->u.data.length; + memset(strPID, 0, sizeof(strPID)); + if(copy_from_user(strPID, (void *)wrq->u.data.pointer, len)){ + ret = -1; + break; + } + + pid_wapi = 0; + for(i = 0; i < len; i++) { + pid_wapi = pid_wapi * 10 + (strPID[i] - 48); + } + WAPI_TRACE(WAPI_API, "%s(): strPID=%s pid_wapi=%d!\n",__FUNCTION__, strPID, pid_wapi); + break; + } + case WAPI_CMD_DEQUEUE: + { + int QueueDataLen = 0; + + WAPI_TRACE(WAPI_API, "%s(): WAPI_CMD_DEQUEUE!\n",__FUNCTION__); + if((ret = WAPI_DeQueue(&ieee->wapi_queue_lock, ieee->wapi_queue, QueueData, &QueueDataLen)) != 0){ + if(copy_to_user((void *)(wrq->u.data.pointer), DATAQUEUE_EMPTY, sizeof(DATAQUEUE_EMPTY))==0) + wrq->u.data.length = sizeof(DATAQUEUE_EMPTY); + }else{ + if(copy_to_user((void *)wrq->u.data.pointer, (void *)QueueData, QueueDataLen)==0) + wrq->u.data.length = QueueDataLen; + } + break; + } + default: + WAPI_TRACE(WAPI_ERR, "%s(): Error CMD!\n",__FUNCTION__); + break; + } + + return ret; +} +#endif + +/* based on ipw2200 driver */ +int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct iwreq *wrq = (struct iwreq *)rq; + int ret=-1; + struct rtllib_device *ieee = priv->rtllib; + u32 key[4]; + u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + u8 zero_addr[6] = {0}; + struct iw_point *p = &wrq->u.data; + + down(&priv->wx_sem); + + switch (cmd) { + case RTL_IOCTL_WPA_SUPPLICANT: + { + struct ieee_param *ipw = NULL; + if (p->length < sizeof(struct ieee_param) || !p->pointer){ + ret = -EINVAL; + goto out; + } + + ipw = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + if (ipw == NULL){ + ret = -ENOMEM; + goto out; + } + if (copy_from_user(ipw, p->pointer, p->length)) { + kfree(ipw); + ret = -EFAULT; + goto out; + } + + if (ipw->cmd == IEEE_CMD_SET_ENCRYPTION) + { + if (ipw->u.crypt.set_tx) + { + if (strcmp(ipw->u.crypt.alg, "CCMP") == 0) + ieee->pairwise_key_type = KEY_TYPE_CCMP; + else if (strcmp(ipw->u.crypt.alg, "TKIP") == 0) + ieee->pairwise_key_type = KEY_TYPE_TKIP; + else if (strcmp(ipw->u.crypt.alg, "WEP") == 0) + { + if (ipw->u.crypt.key_len == 13) + ieee->pairwise_key_type = KEY_TYPE_WEP104; + else if (ipw->u.crypt.key_len == 5) + ieee->pairwise_key_type = KEY_TYPE_WEP40; + } + else + ieee->pairwise_key_type = KEY_TYPE_NA; + + if (ieee->pairwise_key_type) + { + if (memcmp(ieee->ap_mac_addr, zero_addr, 6) == 0) + ieee->iw_mode = IW_MODE_ADHOC; + + memcpy((u8*)key, ipw->u.crypt.key, 16); + EnableHWSecurityConfig8192(dev); + set_swcam(dev, 4, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key,0); + setKey(dev, 4, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key); + if (ieee->iw_mode == IW_MODE_ADHOC){ + set_swcam(dev, ipw->u.crypt.idx, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key,0); + setKey(dev, ipw->u.crypt.idx, ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key); + } + } +#ifdef RTL8192E + if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){ + write_nic_byte(dev, 0x173, 1); + } +#endif + + } + else + { + memcpy((u8*)key, ipw->u.crypt.key, 16); + if (strcmp(ipw->u.crypt.alg, "CCMP") == 0) + ieee->group_key_type= KEY_TYPE_CCMP; + else if (strcmp(ipw->u.crypt.alg, "TKIP") == 0) + ieee->group_key_type = KEY_TYPE_TKIP; + else if (strcmp(ipw->u.crypt.alg, "WEP") == 0) + { + if (ipw->u.crypt.key_len == 13) + ieee->group_key_type = KEY_TYPE_WEP104; + else if (ipw->u.crypt.key_len == 5) + ieee->group_key_type = KEY_TYPE_WEP40; + } + else + ieee->group_key_type = KEY_TYPE_NA; + + if (ieee->group_key_type) + { + set_swcam( dev, + ipw->u.crypt.idx, + ipw->u.crypt.idx, + ieee->group_key_type, + broadcast_addr, + 0, + key, + 0); + setKey( dev, + ipw->u.crypt.idx, + ipw->u.crypt.idx, + ieee->group_key_type, + broadcast_addr, + 0, + key); + } + } + } +#ifdef JOHN_DEBUG + { + int i; + printk("@@ wrq->u pointer = "); + for(i=0;iu.data.length;i++){ + if(i%10==0) printk("\n"); + printk( "%8x|", ((u32*)wrq->u.data.pointer)[i] ); + } + printk("\n"); + } +#endif +#ifdef _RTL8192_EXT_PATCH_ + ret = rtllib_wpa_supplicant_ioctl(priv->rtllib, &wrq->u.data,0); +#else + ret = rtllib_wpa_supplicant_ioctl(priv->rtllib, &wrq->u.data); +#endif + kfree(ipw); + break; + } +#if defined (RTL8192S_WAPI_SUPPORT) + case WAPI_CMD_GET_WAPI_SUPPORT: + case WAPI_CMD_SET_WAPI_ENABLE: + case WAPI_CMD_SET_WAPI_PSK: + case WAPI_CMD_SET_KEY: + case WAPI_CMD_SET_MULTICAST_PN: + case WAPI_CMD_GET_PN: + case WAPI_CMD_GET_WAPIIE: + case WAPI_CMD_SET_SSID: + case WAPI_CMD_GET_BSSID: + case WAPI_CMD_SET_IW_MODE: + case WAPI_CMD_SET_DISASSOCIATE: + case WAPI_CMD_SAVE_PID: + case WAPI_CMD_DEQUEUE: + ret = WAPI_Ioctl(dev, wrq, cmd); + break; +#endif + default: + ret = -EOPNOTSUPP; + break; + } + +out: + up(&priv->wx_sem); + + return ret; +} + +irqreturn_type rtl8192_interrupt(int irq, void *netdev, struct pt_regs *regs) +{ + struct net_device *dev = (struct net_device *) netdev; + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); +#ifdef _RTL8192_EXT_PATCH_ + struct net_device *meshdev = ((struct rtllib_device *)netdev_priv_rsl(dev))->meshdev; +#endif + unsigned long flags; + u32 inta; + u32 intb; + intb = 0; + + if(priv->irq_enabled == 0){ + goto done; + } + + spin_lock_irqsave(&priv->irq_th_lock,flags); + + priv->ops->interrupt_recognized(dev, &inta, &intb); + priv->stats.shints++; + + if (!inta) { + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + goto done; + } + + if (inta == 0xffff) { + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + goto done; + } + + priv->stats.ints++; + +#ifdef _RTL8192_EXT_PATCH_ + if (!netif_running(dev) && !netif_running(meshdev)) +#else + if (!netif_running(dev)) +#endif + { + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + goto done; + } + +#if defined RTL8192SE + if(intb & IMR_TBDOK){ + RT_TRACE(COMP_INTR, "beacon ok interrupt!\n"); + priv->stats.txbeaconokint++; + } + + if(intb & IMR_TBDER){ + RT_TRACE(COMP_INTR, "beacon ok interrupt!\n"); + priv->stats.txbeaconerr++; + } +#else + if(inta & IMR_TBDOK){ + RT_TRACE(COMP_INTR, "beacon ok interrupt!\n"); + priv->stats.txbeaconokint++; + } + + if(inta & IMR_TBDER){ + RT_TRACE(COMP_INTR, "beacon ok interrupt!\n"); + priv->stats.txbeaconerr++; + } +#endif + + if(inta & IMR_BDOK) { + RT_TRACE(COMP_INTR, "beacon interrupt!\n"); + rtl8192_tx_isr(dev, BEACON_QUEUE); + } + + if(inta & IMR_MGNTDOK ) { + RT_TRACE(COMP_INTR, "Manage ok interrupt!\n"); + priv->stats.txmanageokint++; + rtl8192_tx_isr(dev,MGNT_QUEUE); + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + if (priv->rtllib->ack_tx_to_ieee){ + if (rtl8192_is_tx_queue_empty(dev)){ + priv->rtllib->ack_tx_to_ieee = 0; + rtllib_ps_tx_ack(priv->rtllib, 1); + } + } + spin_lock_irqsave(&priv->irq_th_lock,flags); + } + +#ifndef RTL8192CE + if (inta & IMR_COMDOK) { + priv->stats.txcmdpktokint++; + rtl8192_tx_isr(dev,TXCMD_QUEUE); + } +#endif + + if (inta & IMR_HIGHDOK) { + rtl8192_tx_isr(dev,HIGH_QUEUE); + } + +#ifdef RTL8192SE + if ((inta & IMR_ROK) || (inta & IMR_RXCMDOK)) +#else + if (inta & IMR_ROK) +#endif + { + priv->stats.rxint++; + priv->InterruptLog.nIMR_ROK++; + tasklet_schedule(&priv->irq_rx_tasklet); + } + + if (inta & IMR_BcnInt) { + RT_TRACE(COMP_INTR, "prepare beacon for interrupt!\n"); + tasklet_schedule(&priv->irq_prepare_beacon_tasklet); + } + + if (inta & IMR_RDU) { + RT_TRACE(COMP_INTR, "rx descriptor unavailable!\n"); + priv->stats.rxrdu++; +#ifndef RTL8192CE + write_nic_dword(dev,INTA_MASK,read_nic_dword(dev, INTA_MASK) & ~IMR_RDU); +#endif + tasklet_schedule(&priv->irq_rx_tasklet); + } + + if (inta & IMR_RXFOVW) { + RT_TRACE(COMP_INTR, "rx overflow !\n"); + priv->stats.rxoverflow++; + tasklet_schedule(&priv->irq_rx_tasklet); + } + + if (inta & IMR_TXFOVW) priv->stats.txoverflow++; + + if (inta & IMR_BKDOK) { + RT_TRACE(COMP_INTR, "BK Tx OK interrupt!\n"); + priv->stats.txbkokint++; + priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++; + rtl8192_tx_isr(dev,BK_QUEUE); + } + + if (inta & IMR_BEDOK) { + RT_TRACE(COMP_INTR, "BE TX OK interrupt!\n"); + priv->stats.txbeokint++; + priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++; + rtl8192_tx_isr(dev,BE_QUEUE); + } + + if (inta & IMR_VIDOK) { + RT_TRACE(COMP_INTR, "VI TX OK interrupt!\n"); + priv->stats.txviokint++; + priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++; + rtl8192_tx_isr(dev,VI_QUEUE); + } + + if (inta & IMR_VODOK) { + priv->stats.txvookint++; + RT_TRACE(COMP_INTR, "Vo TX OK interrupt!\n"); + priv->rtllib->LinkDetectInfo.NumTxOkInPeriod++; + rtl8192_tx_isr(dev,VO_QUEUE); + } + + spin_unlock_irqrestore(&priv->irq_th_lock,flags); + +done: + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + return; +#else + return IRQ_HANDLED; +#endif +} + +#ifdef RTL8192CE +static void rtl8192_parse_pci_configuration(struct pci_dev *pdev, struct net_device *dev) +{ + u8 tmp; + + pci_read_config_byte(pdev, 0x98, &tmp); + tmp |=BIT4; + pci_write_config_byte(pdev, 0x98, tmp); + + tmp = 0x17; + pci_write_config_byte(pdev, 0x70f, tmp); +} +#endif + +bool rtl8192_pci_findadapter(struct pci_dev *pdev, struct net_device *dev) +{ + u16 DeviceID; + u8 RevisionID = 0; + + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + pci_read_config_word(pdev, 0x2, &DeviceID); + pci_read_config_byte(pdev, 0x8, &RevisionID); + if (DeviceID == HAL_HW_PCI_8190_DEVICE_ID ||DeviceID == HAL_HW_PCI_0045_DEVICE_ID || + DeviceID == HAL_HW_PCI_0046_DEVICE_ID ||DeviceID == HAL_HW_PCI_DLINK_DEVICE_ID){ + printk("Adapter(8190 PCI) is found - DeviceID=%x\n", DeviceID); + priv->ops->nic_type = priv->card_8192 = NIC_8190P; + } else if (DeviceID == HAL_HW_PCI_8192_DEVICE_ID ||DeviceID == HAL_HW_PCI_0044_DEVICE_ID || + DeviceID == HAL_HW_PCI_0047_DEVICE_ID || DeviceID == HAL_HW_PCI_8192SE_DEVICE_ID || + DeviceID == HAL_HW_PCI_8174_DEVICE_ID || DeviceID == HAL_HW_PCI_8173_DEVICE_ID || + DeviceID == HAL_HW_PCI_8172_DEVICE_ID || DeviceID == HAL_HW_PCI_8171_DEVICE_ID) { + + switch(RevisionID) + { + case HAL_HW_PCI_REVISION_ID_8192PCIE: + printk("Adapter(8192 PCI-E) is found - DeviceID=%x\n", DeviceID); + priv->ops->nic_type = priv->card_8192 = NIC_8192E; + break; + case HAL_HW_PCI_REVISION_ID_8192SE: + printk("Adapter(8192SE) is found - DeviceID=%x\n", DeviceID); + priv->card_8192 = NIC_8192SE; + break; + default: + printk("UNKNOWN nic type(%4x:%4x)\n", pdev->vendor, pdev->device); + priv->card_8192 = NIC_UNKNOWN; + + return false; + break; + + } + } else + if (DeviceID == HAL_HW_PCI_8192CET_DEVICE_ID ||DeviceID == HAL_HW_PCI_8192CE_DEVICE_ID || + DeviceID == HAL_HW_PCI_8191CE_DEVICE_ID ||DeviceID == HAL_HW_PCI_8188CE_DEVICE_ID) { + printk("Adapter(8192CE) is found - DeviceID=%x\n", DeviceID); + priv->ops->nic_type = priv->card_8192 = NIC_8192CE; + } else { + printk("Unknown device - DeviceID=%x\n", DeviceID); + priv->ops->nic_type = priv->card_8192 = NIC_8192DE; + } + +#ifdef RTL8192CE + rtl8192_parse_pci_configuration(pdev, dev); +#endif + + return true; +} + +/**************************************************************************** + ---------------------------- PCI_STUFF--------------------------- +*****************************************************************************/ +#ifdef HAVE_NET_DEVICE_OPS +static const struct net_device_ops rtl8192_netdev_ops = { + .ndo_open = rtl8192_open, + .ndo_stop = rtl8192_close, + .ndo_tx_timeout = rtl8192_tx_timeout, + .ndo_do_ioctl = rtl8192_ioctl, + .ndo_set_multicast_list = r8192_set_multicast, + .ndo_set_mac_address = r8192_set_mac_adr, + .ndo_validate_addr = eth_validate_addr, + .ndo_change_mtu = eth_change_mtu, + .ndo_start_xmit = rtllib_xmit, +}; +#endif + +static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, + const struct pci_device_id *id) +{ + unsigned long ioaddr = 0; + struct net_device *dev = NULL; + struct r8192_priv *priv= NULL; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct rtl819x_ops *ops = (struct rtl819x_ops *)(id->driver_data); +#endif + +#ifdef CONFIG_RTL8192_IO_MAP + unsigned long pio_start, pio_len, pio_flags; +#else + unsigned long pmem_start, pmem_len, pmem_flags; +#endif + int err = 0; +#ifdef _RTL8192_EXT_PATCH_ + int result; + struct net_device *meshdev = NULL; + struct meshdev_priv *mpriv; + char meshifname[]="mesh0"; +#endif + bool bdma64 = false; + + RT_TRACE(COMP_INIT,"Configuring chip resources"); + + if( pci_enable_device (pdev) ){ + RT_TRACE(COMP_ERR,"Failed to enable PCI device"); + return -EIO; + } + + pci_set_master(pdev); + +#ifdef CONFIG_64BIT_DMA + if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { + printk("RTL819xCE: Using 64bit DMA\n"); + if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) { + printk( "Unable to obtain 64bit DMA for consistent allocations\n"); + pci_disable_device(pdev); + return -ENOMEM; + } + bdma64 = true; + } else +#endif + { + if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { + printk( "Unable to obtain 32bit DMA for consistent allocations\n"); + pci_disable_device(pdev); + return -ENOMEM; + } +#endif + } + } + dev = alloc_rtllib(sizeof(struct r8192_priv)); + if (!dev) + return -ENOMEM; + + if(bdma64){ + dev->features |= NETIF_F_HIGHDMA; + } + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + SET_MODULE_OWNER(dev); +#endif + + pci_set_drvdata(pdev, dev); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + SET_NETDEV_DEV(dev, &pdev->dev); +#endif + priv = rtllib_priv(dev); + priv->rtllib = (struct rtllib_device *)netdev_priv_rsl(dev); + priv->pdev=pdev; + priv->rtllib->pdev=pdev; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + if((pdev->subsystem_vendor == PCI_VENDOR_ID_DLINK)&&(pdev->subsystem_device == 0x3304)){ + priv->rtllib->bSupportRemoteWakeUp = 1; + } else +#endif + { + priv->rtllib->bSupportRemoteWakeUp = 0; + } + +#ifdef CONFIG_RTL8192_IO_MAP + pio_start = (unsigned long)pci_resource_start (pdev, 0); + pio_len = (unsigned long)pci_resource_len (pdev, 0); + pio_flags = (unsigned long)pci_resource_flags (pdev, 0); + + if (!(pio_flags & IORESOURCE_IO)) { + RT_TRACE(COMP_ERR,"region #0 not a PIO resource, aborting"); + goto fail; + } + + printk("Io mapped space start: 0x%08lx \n", pio_start ); + if( ! request_region( pio_start, pio_len, DRV_NAME ) ){ + RT_TRACE(COMP_ERR,"request_region failed!"); + goto fail; + } + + ioaddr = pio_start; + dev->base_addr = ioaddr; +#else +#ifdef RTL8192CE + pmem_start = pci_resource_start(pdev, 2); + pmem_len = pci_resource_len(pdev, 2); + pmem_flags = pci_resource_flags (pdev, 2); +#else + pmem_start = pci_resource_start(pdev, 1); + pmem_len = pci_resource_len(pdev, 1); + pmem_flags = pci_resource_flags (pdev, 1); +#endif + + if (!(pmem_flags & IORESOURCE_MEM)) { + RT_TRACE(COMP_ERR,"region #1 not a MMIO resource, aborting"); + goto fail; + } + + printk("Memory mapped space start: 0x%08lx \n", pmem_start); + if (!request_mem_region(pmem_start, pmem_len, DRV_NAME)) { + RT_TRACE(COMP_ERR,"request_mem_region failed!"); + goto fail; + } + + + ioaddr = (unsigned long)ioremap_nocache( pmem_start, pmem_len); + if( ioaddr == (unsigned long)NULL ){ + RT_TRACE(COMP_ERR,"ioremap failed!"); + goto fail1; + } + + dev->mem_start = ioaddr; + dev->mem_end = ioaddr + pci_resource_len(pdev, 0); + +#endif +#if defined RTL8192SE || defined RTL8192CE + pci_write_config_byte(pdev, 0x81,0); + pci_write_config_byte(pdev,0x44,0); + pci_write_config_byte(pdev,0x04,0x06); + pci_write_config_byte(pdev,0x04,0x07); +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + priv->ops = ops; +#else +#if defined RTL8190P || defined RTL8192E + priv->ops = &rtl819xp_ops; +#else + priv->ops = &rtl8192se_ops; +#endif +#endif + + if(rtl8192_pci_findadapter(pdev, dev) == false) + goto fail1; + + dev->irq = pdev->irq; + priv->irq = 0; + +#ifdef HAVE_NET_DEVICE_OPS + dev->netdev_ops = &rtl8192_netdev_ops; +#else + dev->open = rtl8192_open; + dev->stop = rtl8192_close; + dev->tx_timeout = rtl8192_tx_timeout; + dev->do_ioctl = rtl8192_ioctl; + dev->set_multicast_list = r8192_set_multicast; + dev->set_mac_address = r8192_set_mac_adr; + dev->hard_start_xmit = rtllib_xmit; +#endif + +#if WIRELESS_EXT >= 12 +#if WIRELESS_EXT < 17 + dev->get_wireless_stats = r8192_get_wireless_stats; +#endif + dev->wireless_handlers = (struct iw_handler_def *) &r8192_wx_handlers_def; +#endif +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + dev->ethtool_ops = &rtl819x_ethtool_ops; +#endif + + dev->type = ARPHRD_ETHER; + dev->watchdog_timeo = HZ*3; + + if (dev_alloc_name(dev, ifname) < 0){ + RT_TRACE(COMP_INIT, "Oops: devname already taken! Trying wlan%%d...\n"); + dev_alloc_name(dev, ifname); + } + + RT_TRACE(COMP_INIT, "Driver probe completed1\n"); + if(rtl8192_init(dev)!=0){ + RT_TRACE(COMP_ERR, "Initialization failed"); + goto fail1; + } + +#ifdef CONFIG_CFG_80211 + if(!rtl8192_register_wiphy_dev(dev)) + goto fail1; +#endif + + netif_carrier_off(dev); + netif_stop_queue(dev); + + register_netdev(dev); + RT_TRACE(COMP_INIT, "dev name: %s\n",dev->name); + err = rtl_debug_module_init(priv, dev->name); + if (err) { + RT_TRACE(COMP_DBG, "failed to create debugfs files. Ignoring error: %d\n", err); + } + rtl8192_proc_init_one(dev); + +#ifdef ENABLE_GPIO_RADIO_CTL + if(priv->polling_timer_on == 0){ + check_rfctrl_gpio_timer((unsigned long)dev); + } +#endif +#ifdef _RTL8192_EXT_PATCH_ + meshdev = alloc_netdev(sizeof(struct meshdev_priv),meshifname,meshdev_init); + netif_stop_queue(meshdev); + memcpy(meshdev->dev_addr, dev->dev_addr, ETH_ALEN); + DMESG("Card MAC address for meshdev is "MAC_FMT, MAC_ARG(meshdev->dev_addr)); + + meshdev->base_addr = dev->base_addr; + meshdev->irq = dev->irq; + meshdev->mem_start = dev->mem_start; + meshdev->mem_end = dev->mem_end; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) + SET_NETDEV_DEV(meshdev, dev->dev.parent); +#endif + + if ((result = register_netdev(meshdev))) + { + printk("Error %i registering device %s",result, meshdev->name); + goto fail; + } + else + { + mpriv = (struct meshdev_priv *)netdev_priv_rsl(meshdev); + priv->rtllib->meshdev=meshdev; + priv->rtllib->meshstats=meshdev_stats(meshdev); + priv->rtllib->only_mesh = 1; + priv->rtllib->p2pmode = 0; + priv->rtllib->serverExtChlOffset = 0; + priv->rtllib->APExtChlOffset = 0; + mpriv->rtllib = priv->rtllib; + mpriv->priv = priv; + } +#endif + +#ifdef RTL8192CE + mdelay(1000); +#endif + +#ifdef CONFIG_RTL_RFKILL + if (priv->ops->init_before_adapter_start) { + priv->ops->init_before_adapter_start(dev); + priv->initialized_at_probe = true; + } + if (!rtl8192_rfkill_init(dev)) { + goto fail1; + } +#endif + +#if defined CONFIG_ASPM_OR_D3 + rtl8192_initialize_adapter_common(dev); +#endif + + RT_TRACE(COMP_INIT, "Driver probe completed\n"); + return 0; + +fail1: +#ifdef CONFIG_RTL8192_IO_MAP + + if( dev->base_addr != 0 ){ + + release_region(dev->base_addr, + pci_resource_len(pdev, 0) ); + } +#else + if( dev->mem_start != (unsigned long)NULL ){ + iounmap( (void *)dev->mem_start ); +#ifdef RTL8192CE + release_mem_region( pci_resource_start(pdev, 2), + pci_resource_len(pdev, 2) ); +#else + release_mem_region( pci_resource_start(pdev, 1), + pci_resource_len(pdev, 1) ); +#endif + } +#endif + +fail: + if(dev){ + + if (priv->irq) { + free_irq(dev->irq, dev); + dev->irq=0; + } + free_rtllib(dev); + } + + pci_disable_device(pdev); + + DMESG("wlan driver load failed\n"); + pci_set_drvdata(pdev, NULL); + return -ENODEV; + +} + +static void __devexit rtl8192_pci_disconnect(struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct r8192_priv *priv ; +#ifdef _RTL8192_EXT_PATCH_ + struct net_device *meshdev; +#endif + if(dev){ +#ifdef CONFIG_RTL_RFKILL + rtl8192_rfkill_exit(dev); +#endif + unregister_netdev(dev); + + priv = rtllib_priv(dev); + +#ifdef _RTL8192_EXT_PATCH_ + rtl8192_dinit_mshobj(priv); +#endif + +#ifdef ENABLE_GPIO_RADIO_CTL + del_timer_sync(&priv->gpio_polling_timer); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&priv->gpio_change_rf_wq); +#endif + priv->polling_timer_on = 0; +#endif + rtl_debug_module_remove(priv); + rtl8192_proc_remove_one(dev); +#ifdef _RTL8192_EXT_PATCH_ + rtl8192_down(dev,true); + if(priv && priv->rtllib->meshdev) + { + meshdev = priv->rtllib->meshdev; + priv->rtllib->meshdev = NULL; + + if(meshdev){ + meshdev_down(meshdev); + unregister_netdev(meshdev); + } + } +#else + rtl8192_down(dev,true); +#endif + deinit_hal_dm(dev); +#ifdef CONFIG_ASPM_OR_D3 + ; +#endif +#ifdef RTL8192SE + DeInitSwLeds(dev); +#endif + if (priv->pFirmware) + { + vfree(priv->pFirmware); + priv->pFirmware = NULL; + } +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + destroy_workqueue(priv->priv_wq); +#endif + { + u32 i; + rtl8192_free_rx_ring(dev); + for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) { + rtl8192_free_tx_ring(dev, i); + } + } + + if(priv->irq){ + + printk("Freeing irq %d\n",dev->irq); + free_irq(dev->irq, dev); + priv->irq=0; + + } +#ifdef CONFIG_RTL8192_IO_MAP + if( dev->base_addr != 0 ){ + + release_region(dev->base_addr, + pci_resource_len(pdev, 0) ); + } +#else + if( dev->mem_start != (unsigned long)NULL ){ + iounmap( (void *)dev->mem_start ); +#ifdef RTL8192CE + release_mem_region( pci_resource_start(pdev, 2), + pci_resource_len(pdev, 2) ); +#else + release_mem_region( pci_resource_start(pdev, 1), + pci_resource_len(pdev, 1) ); +#endif + } +#endif /*end #ifdef RTL_IO_MAP*/ + free_rtllib(dev); + + if(priv->scan_cmd) + kfree(priv->scan_cmd); + + } else{ + priv=rtllib_priv(dev); + } + + pci_disable_device(pdev); +#ifdef RTL8192SE + pci_write_config_byte(pdev, 0x81,1); + pci_write_config_byte(pdev,0x44,3); +#endif + RT_TRACE(COMP_DOWN, "wlan driver removed\n"); +} + +bool NicIFEnableNIC(struct net_device* dev) +{ + bool init_status = true; + struct r8192_priv* priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + + if(IS_NIC_DOWN(priv)){ + RT_TRACE(COMP_ERR, "ERR!!! %s(): Driver is already down!\n",__FUNCTION__); + priv->bdisable_nic = false; + return RT_STATUS_FAILURE; + } + + RT_TRACE(COMP_PS, "===========>%s()\n",__FUNCTION__); + priv->bfirst_init = true; + init_status = priv->ops->initialize_adapter(dev); + if (init_status != true) { + RT_TRACE(COMP_ERR,"ERR!!! %s(): initialization is failed!\n",__FUNCTION__); + priv->bdisable_nic = false; + return -1; + } + RT_TRACE(COMP_INIT, "start adapter finished\n"); + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + priv->bfirst_init = false; + + rtl8192_irq_enable(dev); + priv->bdisable_nic = false; + RT_TRACE(COMP_PS,"<===========%s()\n",__FUNCTION__); + return init_status; +} +bool NicIFDisableNIC(struct net_device* dev) +{ + bool status = true; + struct r8192_priv* priv = rtllib_priv(dev); + u8 tmp_state = 0; + RT_TRACE(COMP_PS, "=========>%s()\n",__FUNCTION__); + priv->bdisable_nic = true; + tmp_state = priv->rtllib->state; +#ifdef _RTL8192_EXT_PATCH_ + if((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->rtllib->only_mesh)) + rtllib_softmac_stop_protocol(priv->rtllib, 1, false); + else + rtllib_softmac_stop_protocol(priv->rtllib, 0, false); +#else + rtllib_softmac_stop_protocol(priv->rtllib,false); +#endif + priv->rtllib->state = tmp_state; + rtl8192_cancel_deferred_work(priv); + rtl8192_irq_disable(dev); + + priv->ops->stop_adapter(dev, false); + RT_TRACE(COMP_PS, "<=========%s()\n",__FUNCTION__); + + return status; +} + +static int __init rtl8192_pci_module_init(void) +{ + int ret; + int error; + +#ifdef BUILT_IN_CRYPTO + ret = arc4_init(); + if (ret) { + printk(KERN_ERR "arc4_init() failed %d\n", ret); + return ret; + } + + + ret = michael_mic_init(); + if (ret) { + printk(KERN_ERR "michael_mic_init() failed %d\n", ret); + return ret; + } + + ret = aes_init(); + if (ret) { + printk(KERN_ERR "aes_init() failed %d\n", ret); + return ret; + } +#endif +#ifdef BUILT_IN_RTLLIB + ret = rtllib_init(); + if (ret) { + printk(KERN_ERR "rtllib_init() failed %d\n", ret); + return ret; + } + ret = rtllib_crypto_init(); + if (ret) { + printk(KERN_ERR "rtllib_crypto_init() failed %d\n", ret); + return ret; + } + ret = rtllib_crypto_tkip_init(); + if (ret) { + printk(KERN_ERR "rtllib_crypto_tkip_init() failed %d\n", ret); + return ret; + } + ret = rtllib_crypto_ccmp_init(); + if (ret) { + printk(KERN_ERR "rtllib_crypto_ccmp_init() failed %d\n", ret); + return ret; + } + ret = rtllib_crypto_wep_init(); + if (ret) { + printk(KERN_ERR "rtllib_crypto_wep_init() failed %d\n", ret); + return ret; + } +#endif +#ifdef BUILT_IN_MSHCLASS + ret = msh_init(); + if (ret) { + printk(KERN_ERR "msh_init() failed %d\n", ret); + return ret; + } +#endif + printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n"); + printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan Driver\n"); + RT_TRACE(COMP_INIT, "Initializing module"); + RT_TRACE(COMP_INIT, "Wireless extensions version %d", WIRELESS_EXT); + + error = rtl_create_debugfs_root(); + if (error) { + RT_TRACE(COMP_DBG, "Create debugfs root fail: %d\n", error); + goto err_out; + } + + rtl8192_proc_module_init(); +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)) + if(0!=pci_module_init(&rtl8192_pci_driver)) +#else + if(0!=pci_register_driver(&rtl8192_pci_driver)) +#endif + { + DMESG("No device found"); + /*pci_unregister_driver (&rtl8192_pci_driver);*/ + return -ENODEV; + } + return 0; +err_out: + return error; + +} + +static void __exit rtl8192_pci_module_exit(void) +{ + pci_unregister_driver(&rtl8192_pci_driver); + + RT_TRACE(COMP_DOWN, "Exiting"); + rtl8192_proc_module_remove(); + rtl_remove_debugfs_root(); +#ifdef BUILT_IN_RTLLIB + rtllib_crypto_tkip_exit(); + rtllib_crypto_ccmp_exit(); + rtllib_crypto_wep_exit(); + rtllib_crypto_deinit(); + rtllib_exit(); +#endif +#ifdef BUILT_IN_CRYPTO + arc4_exit(); + michael_mic_exit(); + aes_fini(); +#endif +#ifdef BUILT_IN_MSHCLASS + msh_exit(); +#endif + +} + +void check_rfctrl_gpio_timer(unsigned long data) +{ + struct r8192_priv* priv = rtllib_priv((struct net_device *)data); + + priv->polling_timer_on = 1; + + queue_delayed_work_rsl(priv->priv_wq,&priv->gpio_change_rf_wq,0); + + mod_timer(&priv->gpio_polling_timer, jiffies + MSECS(RTLLIB_WATCH_DOG_TIME)); +} + +/*************************************************************************** + ------------------- module init / exit stubs ---------------- +****************************************************************************/ +module_init(rtl8192_pci_module_init); +module_exit(rtl8192_pci_module_exit); + +MODULE_DESCRIPTION("Linux driver for Realtek RTL819x WiFi cards"); +MODULE_AUTHOR(DRV_COPYRIGHT " " DRV_AUTHOR); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) +MODULE_VERSION(DRV_VERSION); +#endif +MODULE_LICENSE("GPL"); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 9) +module_param(ifname, charp, S_IRUGO|S_IWUSR ); +module_param(hwwep,int, S_IRUGO|S_IWUSR); +module_param(channels,int, S_IRUGO|S_IWUSR); +#else +MODULE_PARM(ifname, "s"); +MODULE_PARM(hwwep,"i"); +MODULE_PARM(channels,"i"); +#endif + +MODULE_PARM_DESC(ifname," Net interface name, wlan%d=default"); +MODULE_PARM_DESC(hwwep," Try to use hardware WEP support(default use hw. set 0 to use software security)"); +MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI"); --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/proc.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/proc.c @@ -0,0 +1,115 @@ +/* + * Scatterlist Cryptographic API. + * + * Procfs information. + * + * Copyright (c) 2002 James Morris + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#include +#include "rtl_crypto.h" +#include +#include +#include +#include "internal.h" + +extern struct list_head crypto_alg_list; +extern struct rw_semaphore crypto_alg_sem; + +static void *c_start(struct seq_file *m, loff_t *pos) +{ + struct list_head *v; + loff_t n = *pos; + + down_read(&crypto_alg_sem); + list_for_each(v, &crypto_alg_list) + if (!n--) + return list_entry(v, struct crypto_alg, cra_list); + return NULL; +} + +static void *c_next(struct seq_file *m, void *p, loff_t *pos) +{ + struct list_head *v = p; + + (*pos)++; + v = v->next; + return (v == &crypto_alg_list) ? + NULL : list_entry(v, struct crypto_alg, cra_list); +} + +static void c_stop(struct seq_file *m, void *p) +{ + up_read(&crypto_alg_sem); +} + +static int c_show(struct seq_file *m, void *p) +{ + struct crypto_alg *alg = (struct crypto_alg *)p; + + seq_printf(m, "name : %s\n", alg->cra_name); + seq_printf(m, "module : %s\n", + (alg->cra_module ? + alg->cra_module->name : + "kernel")); + + switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) { + case CRYPTO_ALG_TYPE_CIPHER: + seq_printf(m, "type : cipher\n"); + seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); + seq_printf(m, "min keysize : %u\n", + alg->cra_cipher.cia_min_keysize); + seq_printf(m, "max keysize : %u\n", + alg->cra_cipher.cia_max_keysize); + break; + + case CRYPTO_ALG_TYPE_DIGEST: + seq_printf(m, "type : digest\n"); + seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); + seq_printf(m, "digestsize : %u\n", + alg->cra_digest.dia_digestsize); + break; + case CRYPTO_ALG_TYPE_COMPRESS: + seq_printf(m, "type : compression\n"); + break; + default: + seq_printf(m, "type : unknown\n"); + break; + } + + seq_putc(m, '\n'); + return 0; +} + +static struct seq_operations crypto_seq_ops = { + .start = c_start, + .next = c_next, + .stop = c_stop, + .show = c_show +}; + +static int crypto_info_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &crypto_seq_ops); +} + +static struct file_operations proc_crypto_ops = { + .open = crypto_info_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release +}; + +void __init crypto_init_proc(void) +{ + struct proc_dir_entry *proc; + + proc = create_proc_entry("crypto", 0, NULL); + if (proc) + proc->proc_fops = &proc_crypto_ops; +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/wapi.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/wapi.h @@ -0,0 +1,135 @@ +#ifndef __INC_WAPI_H +#define __INC_WAPI_H + +#include +#include +#include "rtl819x_Qos.h" + +/* WAPI trace debug */ +extern u32 wapi_debug_component; + +#define WAPI_TRACE(component, x, args...) \ +do { if(wapi_debug_component & (component)) \ + printk(KERN_DEBUG "WAPI" ":" x "" , \ + ##args);\ +}while(0); + +#define WAPI_DATA(component, x, buf, len) \ +do { if(wapi_debug_component & (component)){ \ + printk("%s:\n", x);\ + dump_buf((buf), (len));}\ +}while(0); + +enum WAPI_DEBUG { + WAPI_INIT =BIT0, + WAPI_API = BIT1, + WAPI_TX = BIT2, + WAPI_RX = BIT3, + WAPI_ERR = BIT31 +}; + +#define WAPI_MAX_BKID_NUM 64 +#define WAPI_MAX_STAINFO_NUM 64 +typedef struct _RT_WAPI_BKID +{ + struct list_head list; + u8 bkid[16]; +}RT_WAPI_BKID,*PRT_WAPI_BKID; + +typedef struct _RT_WAPI_KEY +{ + u8 dataKey[16]; + u8 micKey[16]; + u8 keyId; + bool bSet; + bool bTxEnable; +}RT_WAPI_KEY,*PRT_WAPI_KEY; + +typedef enum _RT_WAPI_PACKET_TYPE +{ + WAPI_NONE = 0, + WAPI_PREAUTHENTICATE=1, + WAPI_STAKEY_REQUEST=2, + WAPI_AUTHENTICATE_ACTIVE=3, + WAPI_ACCESS_AUTHENTICATE_REQUEST=4, + WAPI_ACCESS_AUTHENTICATE_RESPONSE=5, + WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6, + WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7, + WAPI_USK_REQUEST=8, + WAPI_USK_RESPONSE=9, + WAPI_USK_CONFIRM=10, + WAPI_MSK_NOTIFICATION=11, + WAPI_MSK_RESPONSE=12 +}RT_WAPI_PACKET_TYPE; + +typedef struct _RT_CACHE_INFO { + u8 cache_buffer[2000]; + u16 cache_buffer_len; + u8 saddr[6]; + bool bAuthenticator; + u16 recvSeq; + u8 lastFragNum; + struct list_head list; +}RT_CACHE_INFO, *PRT_CACHE_INFO; + +typedef struct _RT_WAPI_STA_INFO +{ + struct list_head list; + u8 PeerMacAddr[6]; + RT_WAPI_KEY wapiUsk; + RT_WAPI_KEY wapiUskUpdate; + RT_WAPI_KEY wapiMsk; + RT_WAPI_KEY wapiMskUpdate; + u8 lastRxUnicastPN[16]; + u8 lastTxUnicastPN[16]; + u8 lastRxMulticastPN[16]; + u8 lastRxUnicastPNBEQueue[16]; + u8 lastRxUnicastPNBKQueue[16]; + u8 lastRxUnicastPNVIQueue[16]; + u8 lastRxUnicastPNVOQueue[16]; + bool bSetkeyOk; + bool bAuthenticateInProgress; + bool bAuthenticatorInUpdata; +}RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO; + +typedef struct _RT_WAPI_T +{ + u8 assoReqWapiIE[256]; + u8 assoReqWapiIELength; + u8 assoRspWapiIE[256]; + u8 assoRspWapiIELength; + u8 sendbeaconWapiIE[256]; + u8 sendbeaconWapiIELength; + RT_WAPI_BKID wapiBKID[WAPI_MAX_BKID_NUM]; + struct list_head wapiBKIDIdleList; + struct list_head wapiBKIDStoreList; + RT_WAPI_KEY wapiTxMsk; + + u8 wapiDestMacAddr[6]; + bool bAuthenticator; + u8 lastTxMulticastPN[16]; + RT_WAPI_STA_INFO wapiSta[WAPI_MAX_STAINFO_NUM]; + struct list_head wapiSTAIdleList; + struct list_head wapiSTAUsedList; + bool bWapiEnable; + bool bUpdateUsk; + bool bUpdateMsk; + + u8 wapiIE[256]; + u8 wapiIELength; + bool bWapiNotSetEncMacHeader; + bool bWapiPSK; + bool bFirstAuthentiateInProgress; + u16 wapiSeqnumAndFragNum; + int extra_prefix_len; + int extra_postfix_len; +}RT_WAPI_T,*PRT_WAPI_T; + +typedef struct _WLAN_HEADER_WAPI_EXTENSION +{ + u8 KeyIdx; + u8 Reserved; + u8 PN[16]; +} WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION; + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_crypt.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_crypt.h @@ -0,0 +1,93 @@ +/* + * Original code based on Host AP (software wireless LAN access point) driver + * for Intersil Prism2/2.5/3. + * + * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen + * + * Copyright (c) 2002-2003, Jouni Malinen + * + * Adaption to a generic IEEE 802.11 stack by James Ketrenos + * + * + * Copyright (c) 2004, Intel Corporation + * + * 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. See README and COPYING for + * more details. + */ + +/* + * This file defines the interface to the rtllib crypto module. + */ +#ifndef RTLLIB_CRYPT_H +#define RTLLIB_CRYPT_H + +#include + +struct rtllib_crypto_ops { + const char *name; + + /* init new crypto context (e.g., allocate private data space, + * select IV, etc.); returns NULL on failure or pointer to allocated + * private data on success */ + void * (*init)(int keyidx); + + /* deinitialize crypto context and free allocated private data */ + void (*deinit)(void *priv); + + /* encrypt/decrypt return < 0 on error or >= 0 on success. The return + * value from decrypt_mpdu is passed as the keyidx value for + * decrypt_msdu. skb must have enough head and tail room for the + * encryption; if not, error will be returned; these functions are + * called for all MPDUs (i.e., fragments). + */ + int (*encrypt_mpdu)(struct sk_buff *skb, int hdr_len, void *priv); + int (*decrypt_mpdu)(struct sk_buff *skb, int hdr_len, void *priv); + + /* These functions are called for full MSDUs, i.e. full frames. + * These can be NULL if full MSDU operations are not needed. */ + int (*encrypt_msdu)(struct sk_buff *skb, int hdr_len, void *priv); + int (*decrypt_msdu)(struct sk_buff *skb, int keyidx, int hdr_len, + void *priv, struct rtllib_device* ieee); + + int (*set_key)(void *key, int len, u8 *seq, void *priv); + int (*get_key)(void *key, int len, u8 *seq, void *priv); + + /* procfs handler for printing out key information and possible + * statistics */ + char * (*print_stats)(char *p, void *priv); + + /* maximum number of bytes added by encryption; encrypt buf is + * allocated with extra_prefix_len bytes, copy of in_buf, and + * extra_postfix_len; encrypt need not use all this space, but + * the result must start at the beginning of the buffer and correct + * length must be returned */ + int extra_prefix_len, extra_postfix_len; + + struct module *owner; +}; + +struct rtllib_crypt_data { + struct list_head list; /* delayed deletion list */ + struct rtllib_crypto_ops *ops; + void *priv; + atomic_t refcnt; +}; + +int rtllib_register_crypto_ops(struct rtllib_crypto_ops *ops); +int rtllib_unregister_crypto_ops(struct rtllib_crypto_ops *ops); +struct rtllib_crypto_ops * rtllib_get_crypto_ops(const char *name); +void rtllib_crypt_deinit_entries(struct rtllib_device *, int); +void rtllib_crypt_deinit_handler(unsigned long); +void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee, + struct rtllib_crypt_data **crypt); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,31)) +#define crypto_alloc_tfm crypto_alloc_tfm_rsl +#define crypto_free_tfm crypto_free_tfm_rsl +#endif + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_softmac_wx.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_softmac_wx.c @@ -0,0 +1,769 @@ +/* IEEE 802.11 SoftMAC layer + * Copyright (c) 2005 Andrea Merello + * + * Mostly extracted from the rtl8180-sa2400 driver for the + * in-kernel generic ieee802.11 stack. + * + * Some pieces of code might be stolen from ipw2100 driver + * copyright of who own it's copyright ;-) + * + * PS wx handler mostly stolen from hostap, copyright who + * own it's copyright ;-) + * + * released under the GPL + */ + + +#include "rtllib.h" +#ifdef ENABLE_DOT11D +#include "dot11d.h" +#endif +/* FIXME: add A freqs */ + +const long rtllib_wlan_frequencies[] = { + 2412, 2417, 2422, 2427, + 2432, 2437, 2442, 2447, + 2452, 2457, 2462, 2467, + 2472, 2484 +}; + + +int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + int ret; + struct iw_freq *fwrq = & wrqu->freq; + + down(&ieee->wx_sem); + + if(ieee->iw_mode == IW_MODE_INFRA){ + ret = 0; + goto out; + } + + /* if setting by freq convert to channel */ + if (fwrq->e == 1) { + if ((fwrq->m >= (int) 2.412e8 && + fwrq->m <= (int) 2.487e8)) { + int f = fwrq->m / 100000; + int c = 0; + + while ((c < 14) && (f != rtllib_wlan_frequencies[c])) + c++; + + /* hack to fall through */ + fwrq->e = 0; + fwrq->m = c + 1; + } + } + + if (fwrq->e > 0 || fwrq->m > 14 || fwrq->m < 1 ){ + ret = -EOPNOTSUPP; + goto out; + + }else { /* Set the channel */ + +#ifdef ENABLE_DOT11D + if (ieee->active_channel_map[fwrq->m] != 1) { + ret = -EINVAL; + goto out; + } +#endif + ieee->current_network.channel = fwrq->m; + ieee->set_chan(ieee->dev, ieee->current_network.channel); + + if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER) + if(ieee->state == RTLLIB_LINKED){ + + rtllib_stop_send_beacons(ieee); + rtllib_start_send_beacons(ieee); + } + } + + ret = 0; +out: + up(&ieee->wx_sem); + return ret; +} + + +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_wx_get_freq(struct rtllib_device *ieee, + struct iw_request_info *a, + union iwreq_data *wrqu, char *b, u8 is_mesh) +#else +int rtllib_wx_get_freq(struct rtllib_device *ieee, + struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +#endif +{ + struct iw_freq *fwrq = & wrqu->freq; + +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + { + if (ieee->current_mesh_network.channel == 0) + return -1; + fwrq->m = rtllib_wlan_frequencies[ieee->current_mesh_network.channel-1] * 100000; + fwrq->e = 1; + } + else +#endif + { + if (ieee->current_network.channel == 0) + return -1; + fwrq->m = rtllib_wlan_frequencies[ieee->current_network.channel-1] * 100000; + fwrq->e = 1; + } + return 0; +} + +int rtllib_wx_get_wap(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + unsigned long flags; + + wrqu->ap_addr.sa_family = ARPHRD_ETHER; + + if (ieee->iw_mode == IW_MODE_MONITOR) + return -1; + + /* We want avoid to give to the user inconsistent infos*/ + spin_lock_irqsave(&ieee->lock, flags); + + if (ieee->state != RTLLIB_LINKED && + ieee->state != RTLLIB_LINKED_SCANNING && + ieee->wap_set == 0) + + memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN); + else + memcpy(wrqu->ap_addr.sa_data, + ieee->current_network.bssid, ETH_ALEN); + + spin_unlock_irqrestore(&ieee->lock, flags); + + return 0; +} + + +int rtllib_wx_set_wap(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *awrq, + char *extra) +{ + + int ret = 0; + u8 zero[] = {0,0,0,0,0,0}; + unsigned long flags; + + short ifup = ieee->proto_started; + struct sockaddr *temp = (struct sockaddr *)awrq; + + rtllib_stop_scan_syncro(ieee); + + down(&ieee->wx_sem); + /* use ifconfig hw ether */ + if (ieee->iw_mode == IW_MODE_MASTER){ + ret = -1; + goto out; + } + + if (temp->sa_family != ARPHRD_ETHER){ + ret = -EINVAL; + goto out; + } + + if (memcmp(temp->sa_data, zero,ETH_ALEN) == 0){ + spin_lock_irqsave(&ieee->lock, flags); + memcpy(ieee->current_network.bssid, temp->sa_data, ETH_ALEN); + ieee->wap_set = 0; + spin_unlock_irqrestore(&ieee->lock, flags); + ret = -1; + goto out; + } + + + if (ifup) + rtllib_stop_protocol(ieee,true); + + /* just to avoid to give inconsistent infos in the + * get wx method. not really needed otherwise + */ + spin_lock_irqsave(&ieee->lock, flags); + + ieee->cannot_notify = false; + memcpy(ieee->current_network.bssid, temp->sa_data, ETH_ALEN); + ieee->wap_set = (memcmp(temp->sa_data, zero,ETH_ALEN)!=0); + + spin_unlock_irqrestore(&ieee->lock, flags); + + if (ifup) + rtllib_start_protocol(ieee); +out: + up(&ieee->wx_sem); + return ret; +} + + int rtllib_wx_get_essid(struct rtllib_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b) +{ + int len,ret = 0; + unsigned long flags; + + if (ieee->iw_mode == IW_MODE_MONITOR) + return -1; + + /* We want avoid to give to the user inconsistent infos*/ + spin_lock_irqsave(&ieee->lock, flags); + + if (ieee->current_network.ssid[0] == '\0' || + ieee->current_network.ssid_len == 0){ + ret = -1; + goto out; + } + + if (ieee->state != RTLLIB_LINKED && + ieee->state != RTLLIB_LINKED_SCANNING && + ieee->ssid_set == 0){ + ret = -1; + goto out; + } + len = ieee->current_network.ssid_len; + wrqu->essid.length = len; + strncpy(b,ieee->current_network.ssid,len); + wrqu->essid.flags = 1; + +out: + spin_unlock_irqrestore(&ieee->lock, flags); + + return ret; + +} + +int rtllib_wx_set_rate(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + u32 target_rate = wrqu->bitrate.value; + + ieee->rate = target_rate/100000; + return 0; +} + +int rtllib_wx_get_rate(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + u32 tmp_rate = 0; +#if defined RTL8192SU|| defined RTL8192CE + if (ieee->mode & (IEEE_A | IEEE_B | IEEE_G)) + tmp_rate = ieee->rate; + else if (ieee->mode & IEEE_N_5G) + tmp_rate = 580; + else if (ieee->mode & IEEE_N_24G) { + if (ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + tmp_rate = HTHalfMcsToDataRate(ieee, 15); + else + tmp_rate = HTMcsToDataRate(ieee, 15); + } +#elif defined RTL8192SE + tmp_rate = ieee->rtl_11n_user_show_rates(ieee->dev); +#else + tmp_rate = TxCountToDataRate(ieee, ieee->softmac_stats.CurrentShowTxate); +#endif + wrqu->bitrate.value = tmp_rate * 500000; + + return 0; +} + + +int rtllib_wx_set_rts(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + if (wrqu->rts.disabled || !wrqu->rts.fixed) + ieee->rts = DEFAULT_RTS_THRESHOLD; + else + { + if (wrqu->rts.value < MIN_RTS_THRESHOLD || + wrqu->rts.value > MAX_RTS_THRESHOLD) + return -EINVAL; + ieee->rts = wrqu->rts.value; + } + return 0; +} + +int rtllib_wx_get_rts(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + wrqu->rts.value = ieee->rts; + wrqu->rts.fixed = 0; /* no auto select */ + wrqu->rts.disabled = (wrqu->rts.value == DEFAULT_RTS_THRESHOLD); + return 0; +} + +int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + int set_mode_status = 0; + + rtllib_stop_scan_syncro(ieee); + down(&ieee->wx_sem); + switch (wrqu->mode) { + case IW_MODE_MONITOR: + case IW_MODE_ADHOC: + case IW_MODE_INFRA: +#ifdef _RTL8192_EXT_PATCH_ + case IW_MODE_MESH: +#endif + break; + case IW_MODE_AUTO: + wrqu->mode = IW_MODE_INFRA; + break; + default: + set_mode_status = -EINVAL; + goto out; + } + + if (wrqu->mode == ieee->iw_mode) + goto out; + + if (wrqu->mode == IW_MODE_MONITOR) { +#ifdef CONFIG_RTL819x_RADIOTAP + ieee->dev->type = ARPHRD_IEEE80211_RADIOTAP; +#else + ieee->dev->type = ARPHRD_IEEE80211; +#endif + rtllib_EnableNetMonitorMode(ieee->dev,false); + + } else { + ieee->dev->type = ARPHRD_ETHER; + if (ieee->iw_mode == IW_MODE_MONITOR) + rtllib_DisableNetMonitorMode(ieee->dev,false); + } + + if (!ieee->proto_started) { + ieee->iw_mode = wrqu->mode; + } else { + rtllib_stop_protocol(ieee,true); + ieee->iw_mode = wrqu->mode; +#if defined (RTL8192S_WAPI_SUPPORT) + if(ieee->iw_mode == IW_MODE_ADHOC) + ieee->wapiInfo.bWapiPSK = true; +#endif + rtllib_start_protocol(ieee); + } + +out: + up(&ieee->wx_sem); + return set_mode_status; +} + +void rtllib_wx_sync_scan_wq(void *data) +{ + struct rtllib_device *ieee = container_of_work_rsl(data, struct rtllib_device, wx_sync_scan_wq); + short chan; + HT_EXTCHNL_OFFSET chan_offset=0; + HT_CHANNEL_WIDTH bandwidth=0; + int b40M = 0; + static int count = 0; + + if (!(ieee->softmac_features & IEEE_SOFTMAC_SCAN)){ + rtllib_start_scan_syncro(ieee, 0); + goto out; + } + + chan = ieee->current_network.channel; + +#ifdef ENABLE_LPS + if (ieee->LeisurePSLeave) { + ieee->LeisurePSLeave(ieee->dev); + } + /* notify AP to be in PS mode */ + rtllib_sta_ps_send_null_frame(ieee, 1); + rtllib_sta_ps_send_null_frame(ieee, 1); +#endif + + rtllib_stop_all_queues(ieee); + + if (ieee->data_hard_stop) + ieee->data_hard_stop(ieee->dev); + rtllib_stop_send_beacons(ieee); + ieee->state = RTLLIB_LINKED_SCANNING; + ieee->link_change(ieee->dev); + /* wait for ps packet to be kicked out successfully */ + msleep(50); + +#if !(defined RTL8192SE ||defined RTL8192CE) + ieee->InitialGainHandler(ieee->dev,IG_Backup); +#endif +#if defined(RTL8192SE) +#if(RTL8192S_DISABLE_FW_DM == 0) + if (ieee->SetFwCmdHandler) { + ieee->SetFwCmdHandler(ieee->dev, FW_CMD_PAUSE_DM_BY_SCAN); + } +#endif +#endif +#if defined RTL8192SU || defined RTL8192CE + ieee->ScanOperationBackupHandler(ieee->dev,SCAN_OPT_BACKUP); +#endif + + if (ieee->pHTInfo->bCurrentHTSupport && ieee->pHTInfo->bEnableHT && ieee->pHTInfo->bCurBW40MHz) { + b40M = 1; + chan_offset = ieee->pHTInfo->CurSTAExtChnlOffset; + bandwidth = (HT_CHANNEL_WIDTH)ieee->pHTInfo->bCurBW40MHz; + printk("Scan in 40M, force to 20M first:%d, %d\n", chan_offset, bandwidth); + ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } + + rtllib_start_scan_syncro(ieee, 0); + + if (b40M) { + printk("Scan in 20M, back to 40M\n"); + if (chan_offset == HT_EXTCHNL_OFFSET_UPPER) + ieee->set_chan(ieee->dev, chan + 2); + else if (chan_offset == HT_EXTCHNL_OFFSET_LOWER) + ieee->set_chan(ieee->dev, chan - 2); + else + ieee->set_chan(ieee->dev, chan); + ieee->SetBWModeHandler(ieee->dev, bandwidth, chan_offset); + } else { + ieee->set_chan(ieee->dev, chan); + } + +#if !(defined RTL8192SE ||defined RTL8192CE) + ieee->InitialGainHandler(ieee->dev,IG_Restore); +#endif + +#if defined(RTL8192SE) +#if(RTL8192S_DISABLE_FW_DM == 0) + if (ieee->SetFwCmdHandler) { + ieee->SetFwCmdHandler(ieee->dev, FW_CMD_RESUME_DM_BY_SCAN); + } +#endif +#endif +#if defined RTL8192SU || defined RTL8192CE + ieee->ScanOperationBackupHandler(ieee->dev,SCAN_OPT_RESTORE); +#endif + ieee->state = RTLLIB_LINKED; + ieee->link_change(ieee->dev); + +#ifdef ENABLE_LPS + /* Notify AP that I wake up again */ + rtllib_sta_ps_send_null_frame(ieee, 0); +#endif + + if (ieee->LinkDetectInfo.NumRecvBcnInPeriod == 0 || + ieee->LinkDetectInfo.NumRecvDataInPeriod == 0 ) { + ieee->LinkDetectInfo.NumRecvBcnInPeriod = 1; + ieee->LinkDetectInfo.NumRecvDataInPeriod= 1; + } + + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + + if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER) + rtllib_start_send_beacons(ieee); + + rtllib_wake_all_queues(ieee); + + count = 0; +out: + up(&ieee->wx_sem); + +} + +int rtllib_wx_set_scan(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ + int ret = 0; + + down(&ieee->wx_sem); + + if (ieee->iw_mode == IW_MODE_MONITOR || !(ieee->proto_started)){ + ret = -1; + goto out; + } + + if ( ieee->state == RTLLIB_LINKED){ + queue_work_rsl(ieee->wq, &ieee->wx_sync_scan_wq); + /* intentionally forget to up sem */ + return 0; + } + +out: + up(&ieee->wx_sem); + return ret; +} + +int rtllib_wx_set_essid(struct rtllib_device *ieee, + struct iw_request_info *a, + union iwreq_data *wrqu, char *extra) +{ + + int ret=0,len,i; + short proto_started; + unsigned long flags; + + rtllib_stop_scan_syncro(ieee); + down(&ieee->wx_sem); + + proto_started = ieee->proto_started; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) + len = ((wrqu->essid.length-1) < IW_ESSID_MAX_SIZE) ? (wrqu->essid.length-1) : IW_ESSID_MAX_SIZE; +#else + len = (wrqu->essid.length < IW_ESSID_MAX_SIZE) ? wrqu->essid.length : IW_ESSID_MAX_SIZE; +#endif + + if (len > IW_ESSID_MAX_SIZE){ + ret= -E2BIG; + goto out; + } + + if (ieee->iw_mode == IW_MODE_MONITOR){ + ret= -1; + goto out; + } + + for (i=0; ilock, flags); + + if (wrqu->essid.flags && wrqu->essid.length) { + strncpy(ieee->current_network.ssid, extra, len); + ieee->current_network.ssid_len = len; +#if 0 + { + int i; + for (i=0; icannot_notify = false; + ieee->ssid_set = 1; + } + else{ + ieee->ssid_set = 0; + ieee->current_network.ssid[0] = '\0'; + ieee->current_network.ssid_len = 0; + } + spin_unlock_irqrestore(&ieee->lock, flags); + + if (proto_started) + rtllib_start_protocol(ieee); +out: + up(&ieee->wx_sem); + return ret; +} + + int rtllib_wx_get_mode(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b) +{ +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->iw_mode == IW_MODE_MESH) { + /* WEXT could not show mesh mode properly, + * just disable it */ + if(ieee->only_mesh) { + return -1; + } else { + wrqu->mode = IW_MODE_INFRA; + } + } + else +#endif + wrqu->mode = ieee->iw_mode; + return 0; +} + + int rtllib_wx_set_rawtx(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + + int *parms = (int *)extra; + int enable = (parms[0] > 0); + short prev = ieee->raw_tx; + + down(&ieee->wx_sem); + + if(enable) + ieee->raw_tx = 1; + else + ieee->raw_tx = 0; + + printk(KERN_INFO"raw TX is %s\n", + ieee->raw_tx ? "enabled" : "disabled"); + + if(ieee->iw_mode == IW_MODE_MONITOR) + { + if(prev == 0 && ieee->raw_tx){ + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + + netif_carrier_on(ieee->dev); + } + + if(prev && ieee->raw_tx == 1) + netif_carrier_off(ieee->dev); + } + + up(&ieee->wx_sem); + + return 0; +} + +int rtllib_wx_get_name(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + strcpy(wrqu->name, "802.11"); + + if (ieee->modulation & RTLLIB_CCK_MODULATION) + strcat(wrqu->name, "b"); + if (ieee->modulation & RTLLIB_OFDM_MODULATION) + strcat(wrqu->name, "g"); + if (ieee->mode & (IEEE_N_24G | IEEE_N_5G)) + strcat(wrqu->name, "n"); +#if 0 + if((ieee->state == RTLLIB_LINKED) || + (ieee->state == RTLLIB_LINKED_SCANNING)) + strcat(wrqu->name," linked"); + else if(ieee->state != RTLLIB_NOLINK) + strcat(wrqu->name," link.."); +#endif + return 0; +} + + +/* this is mostly stolen from hostap */ +int rtllib_wx_set_power(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret = 0; +#if 1 + if( + (!ieee->sta_wake_up) || + (!ieee->enter_sleep_state) || + (!ieee->ps_is_queue_empty)){ + + RTLLIB_DEBUG(RTLLIB_DL_ERR,"%s(): PS mode is tryied to be use but driver missed a callback\n\n",__FUNCTION__); + + return -1; + } +#endif + down(&ieee->wx_sem); + + if (wrqu->power.disabled){ + printk("===>%s(): power disable\n",__FUNCTION__); + ieee->ps = RTLLIB_PS_DISABLED; + goto exit; + } + if (wrqu->power.flags & IW_POWER_TIMEOUT) { + ieee->ps_timeout = wrqu->power.value / 1000; + printk("===>%s():ps_timeout is %d\n",__FUNCTION__,ieee->ps_timeout); + } + + if (wrqu->power.flags & IW_POWER_PERIOD) { + + ieee->ps_period = wrqu->power.value / 1000; + + } + switch (wrqu->power.flags & IW_POWER_MODE) { + case IW_POWER_UNICAST_R: + ieee->ps = RTLLIB_PS_UNICAST; + break; + case IW_POWER_MULTICAST_R: + ieee->ps = RTLLIB_PS_MBCAST; + break; + case IW_POWER_ALL_R: + ieee->ps = RTLLIB_PS_UNICAST | RTLLIB_PS_MBCAST; + break; + + case IW_POWER_ON: + break; + + default: + ret = -EINVAL; + goto exit; + + } +exit: + up(&ieee->wx_sem); + return ret; + +} + +/* this is stolen from hostap */ +int rtllib_wx_get_power(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + int ret =0; + + down(&ieee->wx_sem); + + if(ieee->ps == RTLLIB_PS_DISABLED){ + wrqu->power.disabled = 1; + goto exit; + } + + wrqu->power.disabled = 0; + + if ((wrqu->power.flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { + wrqu->power.flags = IW_POWER_TIMEOUT; + wrqu->power.value = ieee->ps_timeout * 1000; + } else { + wrqu->power.flags = IW_POWER_PERIOD; + wrqu->power.value = ieee->ps_period * 1000; + } + + if ((ieee->ps & (RTLLIB_PS_MBCAST | RTLLIB_PS_UNICAST)) == (RTLLIB_PS_MBCAST | RTLLIB_PS_UNICAST)) + wrqu->power.flags |= IW_POWER_ALL_R; + else if (ieee->ps & RTLLIB_PS_MBCAST) + wrqu->power.flags |= IW_POWER_MULTICAST_R; + else + wrqu->power.flags |= IW_POWER_UNICAST_R; + +exit: + up(&ieee->wx_sem); + return ret; + +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_wx_get_essid); +EXPORT_SYMBOL_RSL(rtllib_wx_set_essid); +EXPORT_SYMBOL_RSL(rtllib_wx_set_rate); +EXPORT_SYMBOL_RSL(rtllib_wx_get_rate); +EXPORT_SYMBOL_RSL(rtllib_wx_set_wap); +EXPORT_SYMBOL_RSL(rtllib_wx_get_wap); +EXPORT_SYMBOL_RSL(rtllib_wx_set_mode); +EXPORT_SYMBOL_RSL(rtllib_wx_get_mode); +EXPORT_SYMBOL_RSL(rtllib_wx_set_scan); +EXPORT_SYMBOL_RSL(rtllib_wx_get_freq); +EXPORT_SYMBOL_RSL(rtllib_wx_set_freq); +EXPORT_SYMBOL_RSL(rtllib_wx_set_rawtx); +EXPORT_SYMBOL_RSL(rtllib_wx_get_name); +EXPORT_SYMBOL_RSL(rtllib_wx_set_power); +EXPORT_SYMBOL_RSL(rtllib_wx_get_power); +EXPORT_SYMBOL_RSL(rtllib_wlan_frequencies); +EXPORT_SYMBOL_RSL(rtllib_wx_set_rts); +EXPORT_SYMBOL_RSL(rtllib_wx_get_rts); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_tx.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_tx.c @@ -0,0 +1,1631 @@ +/****************************************************************************** + + Copyright(c) 2003 - 2004 Intel Corporation. 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 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. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Contact Information: + James P. Ketrenos + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + +****************************************************************************** + + Few modifications for Realtek's Wi-Fi drivers by + Andrea Merello + + A special thanks goes to Realtek for their support ! + +******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "rtllib.h" + +#ifdef RTK_DMP_PLATFORM +#include +#endif + +/* + + +802.11 Data Frame + + +802.11 frame_contorl for data frames - 2 bytes + ,-----------------------------------------------------------------------------------------. +bits | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | + |----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------| +val | 0 | 0 | 0 | 1 | x | 0 | 0 | 0 | 1 | 0 | x | x | x | x | x | + |----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------| +desc | ^-ver-^ | ^type-^ | ^-----subtype-----^ | to |from |more |retry| pwr |more |wep | + | | | x=0 data,x=1 data+ack | DS | DS |frag | | mgm |data | | + '-----------------------------------------------------------------------------------------' + /\ + | +802.11 Data Frame | + ,--------- 'ctrl' expands to >-----------' + | + ,--'---,-------------------------------------------------------------. +Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | + |------|------|---------|---------|---------|------|---------|------| +Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | Frame | fcs | + | | tion | (BSSID) | | | ence | data | | + `--------------------------------------------------| |------' +Total: 28 non-data bytes `----.----' + | + .- 'Frame data' expands to <---------------------------' + | + V + ,---------------------------------------------------. +Bytes | 1 | 1 | 1 | 3 | 2 | 0-2304 | + |------|------|---------|----------|------|---------| +Desc. | SNAP | SNAP | Control |Eth Tunnel| Type | IP | + | DSAP | SSAP | | | | Packet | + | 0xAA | 0xAA |0x03 (UI)|0x00-00-F8| | | + `-----------------------------------------| | +Total: 8 non-data bytes `----.----' + | + .- 'IP Packet' expands, if WEP enabled, to <--' + | + V + ,-----------------------. +Bytes | 4 | 0-2296 | 4 | + |-----|-----------|-----| +Desc. | IV | Encrypted | ICV | + | | IP Packet | | + `-----------------------' +Total: 8 non-data bytes + + +802.3 Ethernet Data Frame + + ,-----------------------------------------. +Bytes | 6 | 6 | 2 | Variable | 4 | + |-------|-------|------|-----------|------| +Desc. | Dest. | Source| Type | IP Packet | fcs | + | MAC | MAC | | | | + `-----------------------------------------' +Total: 18 non-data bytes + +In the event that fragmentation is required, the incoming payload is split into +N parts of size ieee->fts. The first fragment contains the SNAP header and the +remaining packets are just data. + +If encryption is enabled, each fragment payload size is reduced by enough space +to add the prefix and postfix (IV and ICV totalling 8 bytes in the case of WEP) +So if you have 1500 bytes of payload with ieee->fts set to 500 without +encryption it will take 3 frames. With WEP it will take 4 frames as the +payload of each frame is reduced to 492 bytes. + +* SKB visualization +* +* ,- skb->data +* | +* | ETHERNET HEADER ,-<-- PAYLOAD +* | | 14 bytes from skb->data +* | 2 bytes for Type --> ,T. | (sizeof ethhdr) +* | | | | +* |,-Dest.--. ,--Src.---. | | | +* | 6 bytes| | 6 bytes | | | | +* v | | | | | | +* 0 | v 1 | v | v 2 +* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +* ^ | ^ | ^ | +* | | | | | | +* | | | | `T' <---- 2 bytes for Type +* | | | | +* | | '---SNAP--' <-------- 6 bytes for SNAP +* | | +* `-IV--' <-------------------- 4 bytes for IV (WEP) +* +* SNAP HEADER +* +*/ + +static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 }; +static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 }; + +inline int rtllib_put_snap(u8 *data, u16 h_proto) +{ + struct rtllib_snap_hdr *snap; + u8 *oui; + + snap = (struct rtllib_snap_hdr *)data; + snap->dsap = 0xaa; + snap->ssap = 0xaa; + snap->ctrl = 0x03; + + if (h_proto == 0x8137 || h_proto == 0x80f3) + oui = P802_1H_OUI; + else + oui = RFC1042_OUI; + snap->oui[0] = oui[0]; + snap->oui[1] = oui[1]; + snap->oui[2] = oui[2]; + + *(u16 *)(data + SNAP_SIZE) = htons(h_proto); + + return SNAP_SIZE + sizeof(u16); +} + +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_encrypt_fragment( + struct rtllib_device *ieee, + struct sk_buff *frag, + int hdr_len, + u8 is_mesh, + u8 entry) +#else +int rtllib_encrypt_fragment( + struct rtllib_device *ieee, + struct sk_buff *frag, + int hdr_len) +#endif +{ + struct rtllib_crypt_data* crypt = NULL; + int res; + +#ifdef _RTL8192_EXT_PATCH_ + if (is_mesh) { + crypt = ieee->cryptlist[entry]->crypt[ieee->mesh_txkeyidx]; + } else + crypt = ieee->sta_crypt[ieee->tx_keyidx]; +#else + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + + if (!(crypt && crypt->ops)) + { + printk("=========>%s(), crypt is null\n", __FUNCTION__); + return -1; + } +#ifdef CONFIG_RTLLIB_CRYPT_TKIP + struct rtllib_hdr_1addr *header; + + if (ieee->tkip_countermeasures && + crypt && crypt->ops && strcmp(crypt->ops->name, "TKIP") == 0) { + header = (struct rtllib_hdr_1addr *) frag->data; + if (net_ratelimit()) { + printk(KERN_DEBUG "%s: TKIP countermeasures: dropped " + "TX packet to " MAC_FMT "\n", + ieee->dev->name, MAC_ARG(header->addr1)); + } + return -1; + } +#endif + /* To encrypt, frame format is: + * IV (4 bytes), clear payload (including SNAP), ICV (4 bytes) */ + + /* Host-based IEEE 802.11 fragmentation for TX is not yet supported, so + * call both MSDU and MPDU encryption functions from here. */ + atomic_inc(&crypt->refcnt); + res = 0; + if (crypt->ops->encrypt_msdu) + res = crypt->ops->encrypt_msdu(frag, hdr_len, crypt->priv); + if (res == 0 && crypt->ops->encrypt_mpdu) + res = crypt->ops->encrypt_mpdu(frag, hdr_len, crypt->priv); + + atomic_dec(&crypt->refcnt); + if (res < 0) { + printk(KERN_INFO "%s: Encryption failed: len=%d.\n", + ieee->dev->name, frag->len); + ieee->ieee_stats.tx_discards++; + return -1; + } + + return 0; +} + + +void rtllib_txb_free(struct rtllib_txb *txb) { + if (unlikely(!txb)) + return; +#if 0 + for (i = 0; i < txb->nr_frags; i++) + if (txb->fragments[i]) + dev_kfree_skb_any(txb->fragments[i]); +#endif + kfree(txb); +} + +struct rtllib_txb *rtllib_alloc_txb(int nr_frags, int txb_size, + int gfp_mask) +{ +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; +#endif + struct rtllib_txb *txb; + int i; + txb = kmalloc( + sizeof(struct rtllib_txb) + (sizeof(u8*) * nr_frags), + gfp_mask); + if (!txb) + return NULL; + + memset(txb, 0, sizeof(struct rtllib_txb)); + txb->nr_frags = nr_frags; + txb->frag_size = txb_size; + + for (i = 0; i < nr_frags; i++) { +#ifdef USB_USE_ALIGNMENT + txb->fragments[i] = dev_alloc_skb(txb_size+USB_512B_ALIGNMENT_SIZE); +#else + txb->fragments[i] = dev_alloc_skb(txb_size); +#endif + if (unlikely(!txb->fragments[i])) { + i--; + break; + } +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)(txb->fragments[i]->data); + alignment = Tmpaddr & 0x1ff; + skb_reserve(txb->fragments[i],(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + memset(txb->fragments[i]->cb, 0, sizeof(txb->fragments[i]->cb)); + } + if (unlikely(i != nr_frags)) { + while (i >= 0) + dev_kfree_skb_any(txb->fragments[i--]); + kfree(txb); + return NULL; + } + return txb; +} + +int +rtllib_classify(struct sk_buff *skb, u8 bIsAmsdu) +{ + struct ethhdr *eth; + struct iphdr *ip; + + eth = (struct ethhdr *)skb->data; + if (eth->h_proto != htons(ETH_P_IP)) + return 0; + +#ifdef ENABLE_AMSDU + if(bIsAmsdu) + ip = (struct iphdr*)(skb->data + sizeof(struct ether_header) + AMSDU_SUBHEADER_LEN + SNAP_SIZE + sizeof(u16)); + else + ip = (struct iphdr*)(skb->data + sizeof(struct ether_header)); +#else + RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA, skb->data, skb->len); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) + ip = ip_hdr(skb); +#else + ip = (struct iphdr*)(skb->data + sizeof(struct ether_header)); +#endif +#endif + switch (ip->tos & 0xfc) { + case 0x20: + return 2; + case 0x40: + return 1; + case 0x60: + return 3; + case 0x80: + return 4; + case 0xa0: + return 5; + case 0xc0: + return 6; + case 0xe0: + return 7; + default: + return 0; + } +} + +#define SN_LESS(a, b) (((a-b)&0x800)!=0) +void rtllib_tx_query_agg_cap(struct rtllib_device* ieee, struct sk_buff* skb, cb_desc* tcb_desc) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + PTX_TS_RECORD pTxTs = NULL; + struct rtllib_hdr_1addr* hdr = (struct rtllib_hdr_1addr*)skb->data; + + if (!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT){ + return; + } + if (!IsQoSDataFrame(skb->data)){ + return; + } + if (is_multicast_ether_addr(hdr->addr1) || is_broadcast_ether_addr(hdr->addr1)){ + return; + } +#ifdef TO_DO_LIST + if(pTcb->PacketLength >= 4096) + return; + if(!Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter)) + return; +#endif + + if(tcb_desc->bdhcp || ieee->CntAfterLink<2){ + return; + } + + if(pHTInfo->IOTAction & HT_IOT_ACT_TX_NO_AGGREGATION){ + return; + } + + if(!ieee->GetNmodeSupportBySecCfg(ieee->dev)){ + return; + } + if(pHTInfo->bCurrentAMPDUEnable){ + if (!GetTs(ieee, (PTS_COMMON_INFO*)(&pTxTs), hdr->addr1, skb->priority, TX_DIR, true)){ + printk("%s: can't get TS\n", __func__); + return; + } + if (pTxTs->TxAdmittedBARecord.bValid == false){ + if (ieee->wpa_ie_len && (ieee->pairwise_key_type == KEY_TYPE_NA)) { + ; + } else if (tcb_desc->bdhcp == 1){ + ; + } else if (!pTxTs->bDisable_AddBa){ + TsStartAddBaProcess(ieee, pTxTs); + } + goto FORCED_AGG_SETTING; + } + else if (pTxTs->bUsingBa == false) + { + if (SN_LESS(pTxTs->TxAdmittedBARecord.BaStartSeqCtrl.field.SeqNum, (pTxTs->TxCurSeq+1)%4096)) + pTxTs->bUsingBa = true; + else + goto FORCED_AGG_SETTING; + } +#ifndef _RTL8192_EXT_PATCH_ +#ifndef RTL8192S_WAPI_SUPPORT + if (ieee->iw_mode == IW_MODE_INFRA) +#endif +#endif + { + tcb_desc->bAMPDUEnable = true; + tcb_desc->ampdu_factor = pHTInfo->CurrentAMPDUFactor; + tcb_desc->ampdu_density = pHTInfo->CurrentMPDUDensity; + } + } +FORCED_AGG_SETTING: + switch(pHTInfo->ForcedAMPDUMode ) + { + case HT_AGG_AUTO: + break; + + case HT_AGG_FORCE_ENABLE: + tcb_desc->bAMPDUEnable = true; + tcb_desc->ampdu_density = pHTInfo->ForcedMPDUDensity; + tcb_desc->ampdu_factor = pHTInfo->ForcedAMPDUFactor; + break; + + case HT_AGG_FORCE_DISABLE: + tcb_desc->bAMPDUEnable = false; + tcb_desc->ampdu_density = 0; + tcb_desc->ampdu_factor = 0; + break; + + } + return; +} + +extern void rtllib_qurey_ShortPreambleMode(struct rtllib_device* ieee, cb_desc* tcb_desc) +{ + tcb_desc->bUseShortPreamble = false; + if (tcb_desc->data_rate == 2) + { + return; + } + else if (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE) + { + tcb_desc->bUseShortPreamble = true; + } + return; +} + +extern void +rtllib_query_HTCapShortGI(struct rtllib_device *ieee, cb_desc *tcb_desc) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + tcb_desc->bUseShortGI = false; + + if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT) + return; + + if(pHTInfo->bForcedShortGI) + { + tcb_desc->bUseShortGI = true; + return; + } + + if((pHTInfo->bCurBW40MHz==true) && pHTInfo->bCurShortGI40MHz) + tcb_desc->bUseShortGI = true; + else if((pHTInfo->bCurBW40MHz==false) && pHTInfo->bCurShortGI20MHz) + tcb_desc->bUseShortGI = true; +} + +void rtllib_query_BandwidthMode(struct rtllib_device* ieee, cb_desc *tcb_desc) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + tcb_desc->bPacketBW = false; + + if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT) + return; + + if(tcb_desc->bMulticast || tcb_desc->bBroadcast) + return; + + if((tcb_desc->data_rate & 0x80)==0) + return; + if(pHTInfo->bCurBW40MHz && pHTInfo->bCurTxBW40MHz && !ieee->bandwidth_auto_switch.bforced_tx20Mhz) + tcb_desc->bPacketBW = true; + return; +} +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +extern void rtllib_ibss_query_HTCapShortGI(struct rtllib_device *ieee, cb_desc *tcb_desc,u8 is_peer_shortGI_40M,u8 is_peer_shortGI_20M) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + tcb_desc->bUseShortGI = false; + + if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT || (ieee->iw_mode != IW_MODE_ADHOC)) + { + return; + } + + if(pHTInfo->bForcedShortGI) + { + tcb_desc->bUseShortGI = true; + return; + } + if((pHTInfo->bCurBW40MHz==true) && is_peer_shortGI_40M) + tcb_desc->bUseShortGI = true; + else if((pHTInfo->bCurBW40MHz==false) && is_peer_shortGI_20M) + tcb_desc->bUseShortGI = true; +} +void rtllib_ibss_query_BandwidthMode(struct rtllib_device* ieee, cb_desc *tcb_desc, u8 is_peer_40M) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + tcb_desc->bPacketBW = false; + + if(!pHTInfo->bCurrentHTSupport||!pHTInfo->bEnableHT || (ieee->iw_mode != IW_MODE_ADHOC)) + { + return; + } + + if(tcb_desc->bMulticast || tcb_desc->bBroadcast) + { + return; + } + + if((tcb_desc->data_rate & 0x80)==0) + { + return; + } + if(pHTInfo->bCurBW40MHz && is_peer_40M && !ieee->bandwidth_auto_switch.bforced_tx20Mhz) + tcb_desc->bPacketBW = true; + return; +} +#endif +void rtllib_query_protectionmode(struct rtllib_device* ieee, cb_desc* tcb_desc, struct sk_buff* skb) +{ + tcb_desc->bRTSSTBC = false; + tcb_desc->bRTSUseShortGI = false; + tcb_desc->bCTSEnable = false; + tcb_desc->RTSSC = 0; + tcb_desc->bRTSBW = false; + + if(tcb_desc->bBroadcast || tcb_desc->bMulticast) + return; + + if (is_broadcast_ether_addr(skb->data+16)) + return; + + if (ieee->mode < IEEE_N_24G) + { + if (skb->len > ieee->rts) + { + tcb_desc->bRTSEnable = true; + tcb_desc->rts_rate = MGN_24M; + } + else if (ieee->current_network.buseprotection) + { + tcb_desc->bRTSEnable = true; + tcb_desc->bCTSEnable = true; + tcb_desc->rts_rate = MGN_24M; + } + return; + } + else + { + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + while (true) + { + if(pHTInfo->IOTAction & HT_IOT_ACT_FORCED_CTS2SELF) + { + tcb_desc->bCTSEnable = true; + tcb_desc->rts_rate = MGN_24M; +#if defined(RTL8192SE) || defined(RTL8192SU) || defined RTL8192CE + tcb_desc->bRTSEnable = false; +#else + tcb_desc->bRTSEnable = true; +#endif + break; + } + else if(pHTInfo->IOTAction & (HT_IOT_ACT_FORCED_RTS|HT_IOT_ACT_PURE_N_MODE)) + { + tcb_desc->bRTSEnable = true; + tcb_desc->rts_rate = MGN_24M; + break; + } + if (ieee->current_network.buseprotection) + { + tcb_desc->bRTSEnable = true; + tcb_desc->bCTSEnable = true; + tcb_desc->rts_rate = MGN_24M; + break; + } + if(pHTInfo->bCurrentHTSupport && pHTInfo->bEnableHT) + { + u8 HTOpMode = pHTInfo->CurrentOpMode; + if((pHTInfo->bCurBW40MHz && (HTOpMode == 2 || HTOpMode == 3)) || + (!pHTInfo->bCurBW40MHz && HTOpMode == 3) ) + { + tcb_desc->rts_rate = MGN_24M; + tcb_desc->bRTSEnable = true; + break; + } + } + if (skb->len > ieee->rts) + { + tcb_desc->rts_rate = MGN_24M; + tcb_desc->bRTSEnable = true; + break; + } + if(tcb_desc->bAMPDUEnable) + { + tcb_desc->rts_rate = MGN_24M; + tcb_desc->bRTSEnable = false; + break; + } + goto NO_PROTECTION; + } + } + if( 0 ) + { + tcb_desc->bCTSEnable = true; + tcb_desc->rts_rate = MGN_24M; + tcb_desc->bRTSEnable = true; + } + if (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE) + tcb_desc->bUseShortPreamble = true; + if (ieee->iw_mode == IW_MODE_MASTER) + goto NO_PROTECTION; + return; +NO_PROTECTION: + tcb_desc->bRTSEnable = false; + tcb_desc->bCTSEnable = false; + tcb_desc->rts_rate = 0; + tcb_desc->RTSSC = 0; + tcb_desc->bRTSBW = false; +} + + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +void rtllib_txrate_selectmode(struct rtllib_device* ieee, cb_desc* tcb_desc,struct sta_info *psta) +#else +void rtllib_txrate_selectmode(struct rtllib_device* ieee, cb_desc* tcb_desc) +#endif +{ +#ifdef TO_DO_LIST + if(!IsDataFrame(pFrame)) + { + pTcb->bTxDisableRateFallBack = true; + pTcb->bTxUseDriverAssingedRate = true; + pTcb->RATRIndex = 7; + return; + } + + if(pMgntInfo->ForcedDataRate!= 0) + { + pTcb->bTxDisableRateFallBack = true; + pTcb->bTxUseDriverAssingedRate = true; + return; + } +#endif + if(ieee->bTxDisableRateFallBack) + tcb_desc->bTxDisableRateFallBack = true; + + if(ieee->bTxUseDriverAssingedRate) + tcb_desc->bTxUseDriverAssingedRate = true; + if(!tcb_desc->bTxDisableRateFallBack || !tcb_desc->bTxUseDriverAssingedRate) + { +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_INFRA) || (ieee->iw_mode == IW_MODE_MESH)) + tcb_desc->RATRIndex = 0; + else if (ieee->iw_mode == IW_MODE_ADHOC){ + if(tcb_desc->bMulticast || tcb_desc->bBroadcast){ + tcb_desc->data_rate = ieee->basic_rate; + tcb_desc->bTxUseDriverAssingedRate = 1; + }else{ + if(psta != NULL) + tcb_desc->RATRIndex = psta->ratr_index; + else + tcb_desc->RATRIndex = 7; + } + } +#else + if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) + tcb_desc->RATRIndex = 0; +#endif + } +#if 0 +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC) + tcb_desc->RATRIndex = ratr_index; +#endif +#endif +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->bUseRAMask){ + if((ieee->iw_mode == IW_MODE_ADHOC) && (NULL != psta)){ + short peer_AID = psta->aid; + + tcb_desc->macId =0; + if((peer_AID > 0) && (peer_AID < PEER_MAX_ASSOC)) + { + tcb_desc->macId = peer_AID + 1; + }else{ + tcb_desc->macId = 1; + } + } + else{ + if((ieee->mode & WIRELESS_MODE_N_24G) || (ieee->mode & WIRELESS_MODE_N_5G)) + tcb_desc->RATRIndex = RATR_INX_WIRELESS_NGB; + else if(ieee->mode & WIRELESS_MODE_G) + tcb_desc->RATRIndex = RATR_INX_WIRELESS_GB; + else if(ieee->mode & WIRELESS_MODE_B) + tcb_desc->RATRIndex = RATR_INX_WIRELESS_B; + + tcb_desc->macId = 0; + } + } +#endif +} + +u16 rtllib_query_seqnum(struct rtllib_device*ieee, struct sk_buff* skb, u8* dst) +{ + u16 seqnum = 0; + + if (is_multicast_ether_addr(dst) || is_broadcast_ether_addr(dst)) + return 0; + if (IsQoSDataFrame(skb->data)) + { + PTX_TS_RECORD pTS = NULL; + if (!GetTs(ieee, (PTS_COMMON_INFO*)(&pTS), dst, skb->priority, TX_DIR, true)) + { + return 0; + } + seqnum = pTS->TxCurSeq; + pTS->TxCurSeq = (pTS->TxCurSeq+1)%4096; + return seqnum; + } + return 0; +} + + + +#ifdef ENABLE_AMSDU +#if 0 +static void CB_DESC_DUMP(pcb_desc tcb, char* func) +{ + printk("\n%s",func); + printk("\n-------------------CB DESC DUMP ><------------------------"); + printk("\npkt_size:\t %d", tcb->pkt_size); + printk("\nqueue_index:\t %d", tcb->queue_index); + printk("\nbMulticast:\t %d", tcb->bMulticast); + printk("\nbBroadcast:\t %d", tcb->bBroadcast); + printk("\nbPacketBw:\t %d", tcb->bPacketBW); + printk("\nbRTSEnable:\t %d", tcb->bRTSEnable); + printk("\nrts_rate:\t %d", tcb->rts_rate); + printk("\nbUseShortGI:\t %d", tcb->bUseShortGI); + printk("\nbAMSDU:\t %d", tcb->bAMSDU); + printk("\nFromAggrQ:\t %d", tcb->bFromAggrQ); + printk("\nRATRIndex:\t %d", tcb->RATRIndex); + printk("\ndata_rate:\t %d", tcb->data_rate); + printk("\n-------------------CB DESC DUMP <>------------------------\n"); +} +#endif +struct sk_buff *AMSDU_Aggregation( + struct rtllib_device *ieee, + struct sk_buff_head *pSendList + ) +{ + struct sk_buff * pSkb; + struct sk_buff * pAggrSkb; + u8 i; + u32 total_length = 0; + u32 skb_len, num_skb; + pcb_desc pcb; + u8 amsdu_shdr[AMSDU_SUBHEADER_LEN]; + u8 padding = 0; + u8 *p = NULL, *q=NULL; + u16 ether_type; + + num_skb = skb_queue_len(pSendList); + if(num_skb == 0) + return NULL; + if(num_skb == 1) + { + pSkb = (struct sk_buff *)skb_dequeue(pSendList); + memset(pSkb->cb, 0, sizeof(pSkb->cb)); + pcb = (pcb_desc)(pSkb->cb + MAX_DEV_ADDR_SIZE); + pcb->bFromAggrQ = true; + return pSkb; + } + + total_length += sizeof(struct ethhdr); + for(i=0; ilen <= (ETH_ALEN*2)) + { + dev_kfree_skb_any(pSkb); + continue; + } + skb_len = pSkb->len - ETH_ALEN*2 + SNAP_SIZE + AMSDU_SUBHEADER_LEN; + if(i < (num_skb-1)) + { + skb_len += ((4-skb_len%4)==4)?0:(4-skb_len%4); + } + total_length += skb_len; + skb_queue_tail(pSendList, pSkb); + } + + pAggrSkb = dev_alloc_skb(total_length); + if(NULL == pAggrSkb) + { + skb_queue_purge(pSendList); + printk("%s: Can not alloc skb!\n", __FUNCTION__); + return NULL; + } + skb_put(pAggrSkb,total_length); + pAggrSkb->priority = pSkb->priority; + + memset(pAggrSkb->cb, 0, sizeof(pAggrSkb->cb)); + pcb = (pcb_desc)(pAggrSkb->cb + MAX_DEV_ADDR_SIZE); + pcb->bFromAggrQ = true; + pcb->bAMSDU = true; + + memset(amsdu_shdr, 0, AMSDU_SUBHEADER_LEN); + p = pAggrSkb->data; + for(i=0; idata)->h_proto); + + skb_len = pSkb->len - sizeof(struct ethhdr) + AMSDU_SUBHEADER_LEN + SNAP_SIZE + sizeof(u16); + if(i < (num_skb-1)) + { + padding = ((4-skb_len%4)==4)?0:(4-skb_len%4); + skb_len += padding; + } + if(i == 0) + { + memcpy(p, pSkb->data, sizeof(struct ethhdr)); + p += sizeof(struct ethhdr); + } + memcpy(amsdu_shdr, pSkb->data, (ETH_ALEN*2)); + skb_pull(pSkb, sizeof(struct ethhdr)); + *(u16*)(amsdu_shdr+ETH_ALEN*2) = ntohs(pSkb->len + SNAP_SIZE + sizeof(u16)); + memcpy(p, amsdu_shdr, AMSDU_SUBHEADER_LEN); + p += AMSDU_SUBHEADER_LEN; + + rtllib_put_snap(p, ether_type); + p += SNAP_SIZE + sizeof(u16); + + memcpy(p, pSkb->data, pSkb->len); + p += pSkb->len; + if(padding > 0) + { + memset(p, 0, padding); + p += padding; + padding = 0; + } + dev_kfree_skb_any(pSkb); + } + + return pAggrSkb; +} + + +/* NOTE: + This function return a list of SKB which is proper to be aggregated. + If no proper SKB is found to do aggregation, SendList will only contain the input SKB. +*/ +u8 AMSDU_GetAggregatibleList( + struct rtllib_device * ieee, + struct sk_buff * pCurSkb, + struct sk_buff_head *pSendList, + u8 queue_index + ) +{ + struct sk_buff *pSkb = NULL; + u16 nMaxAMSDUSize = 0; + u32 AggrSize = 0; + u32 nAggrSkbNum = 0; + u8 padding = 0; + struct sta_info *psta = NULL; + u8 *addr = (u8*)(pCurSkb->data); + struct sk_buff_head *header; + struct sk_buff *punlinkskb = NULL; + + padding = ((4-pCurSkb->len%4)==4)?0:(4-pCurSkb->len%4); + AggrSize = AMSDU_SUBHEADER_LEN + pCurSkb->len + padding; + skb_queue_tail(pSendList, pCurSkb); + nAggrSkbNum++; + + if(ieee->iw_mode == IW_MODE_MASTER){ + psta = GetStaInfo(ieee, addr); + if(NULL != psta) + nMaxAMSDUSize = psta->htinfo.AMSDU_MaxSize; + else + return 1; + }else if(ieee->iw_mode == IW_MODE_ADHOC){ + psta = GetStaInfo(ieee, addr); + if(NULL != psta) + nMaxAMSDUSize = psta->htinfo.AMSDU_MaxSize; + else + return 1; + }else{ + nMaxAMSDUSize = ieee->pHTInfo->nCurrent_AMSDU_MaxSize; + } + + if(ieee->pHTInfo->ForcedAMSDUMode == HT_AGG_FORCE_ENABLE) + { + nMaxAMSDUSize = ieee->pHTInfo->ForcedAMSDUMaxSize; + } + + header = (&ieee->skb_aggQ[queue_index]); + pSkb = header->next; + while(pSkb != (struct sk_buff*)header) + { + if((ieee->iw_mode == IW_MODE_MASTER) ||(ieee->iw_mode == IW_MODE_ADHOC)) + { + if(memcmp(pCurSkb->data, pSkb->data, ETH_ALEN) != 0) + { + pSkb = pSkb->next; + continue; + } + } + if((AMSDU_SUBHEADER_LEN + pSkb->len + AggrSize < nMaxAMSDUSize) ) + { + punlinkskb = pSkb; + pSkb = pSkb->next; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) + skb_unlink(punlinkskb, header); +#else + /* + * __skb_unlink before linux2.6.14 does not use spinlock to protect list head. + * add spinlock function manually. john,2008/12/03 + */ + { + unsigned long flags; + spin_lock_irqsave(&ieee->lock, flags); + __skb_unlink(punlinkskb,header); + spin_unlock_irqrestore(&ieee->lock, flags); + } +#endif + + padding = ((4-punlinkskb->len%4)==4)?0:(4-punlinkskb->len%4); + AggrSize += AMSDU_SUBHEADER_LEN + punlinkskb->len + padding; + skb_queue_tail(pSendList, punlinkskb); + nAggrSkbNum++; + } + else + { + if(!(AMSDU_SUBHEADER_LEN + pSkb->len + AggrSize < nMaxAMSDUSize)) + ; + + break; + } + } + return nAggrSkbNum; +} +#endif +static int wme_downgrade_ac(struct sk_buff *skb) +{ + switch (skb->priority) { + case 6: + case 7: + skb->priority = 5; /* VO -> VI */ + return 0; + case 4: + case 5: + skb->priority = 3; /* VI -> BE */ + return 0; + case 0: + case 3: + skb->priority = 1; /* BE -> BK */ + return 0; + default: + return -1; + } +} + +int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev) +{ + struct rtllib_device *ieee = (struct rtllib_device *)netdev_priv_rsl(dev); + struct rtllib_txb *txb = NULL; + struct rtllib_hdr_3addrqos *frag_hdr; + int i, bytes_per_frag, nr_frags, bytes_last_frag, frag_size; + unsigned long flags; + struct net_device_stats *stats = &ieee->stats; + int ether_type = 0, encrypt; + int bytes, fc, qos_ctl = 0, hdr_len; + struct sk_buff *skb_frag; + struct rtllib_hdr_3addrqos header = { /* Ensure zero initialized */ + .duration_id = 0, + .seq_ctl = 0, + .qos_ctl = 0 + }; + u8 dest[ETH_ALEN], src[ETH_ALEN]; + int qos_actived = ieee->current_network.qos_data.active; + struct rtllib_crypt_data* crypt = NULL; + cb_desc *tcb_desc; + u8 bIsMulticast = false; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + struct sta_info *p_sta = NULL; +#endif + u8 IsAmsdu = false; +#ifdef ENABLE_AMSDU + u8 queue_index = WME_AC_BE; + cb_desc *tcb_desc_skb; + u8 bIsSptAmsdu = false; +#endif + + bool bdhcp =false; +#ifndef _RTL8192_EXT_PATCH_ +#endif +#ifdef RTL8192S_WAPI_SUPPORT + static u8 zero14[14] = {0}; +#endif + 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 && !(ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE))|| + ((!ieee->softmac_data_hard_start_xmit && (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE)))) { + printk(KERN_WARNING "%s: No xmit handler.\n", + ieee->dev->name); + goto success; + } + + + if(likely(ieee->raw_tx == 0)){ + if (unlikely(skb->len < SNAP_SIZE + sizeof(u16))) { + printk(KERN_WARNING "%s: skb too small (%d).\n", + ieee->dev->name, skb->len); + goto success; + } +#ifdef RTL8192S_WAPI_SUPPORT + if(memcmp(skb->data, zero14, sizeof(zero14))==0){ + if(WapiSendWaiPacket(ieee, skb)< 0) + goto failed; + else{ + spin_unlock_irqrestore(&ieee->lock, flags); + return 0; + } + } +#endif + /* Save source and destination addresses */ + memcpy(dest, skb->data, ETH_ALEN); + memcpy(src, skb->data+ETH_ALEN, ETH_ALEN); + +#ifdef ENABLE_AMSDU + if(ieee->iw_mode == IW_MODE_ADHOC) + { + p_sta = GetStaInfo(ieee, dest); + if(p_sta) { + if(p_sta->htinfo.bEnableHT) + bIsSptAmsdu = true; + } + }else if(ieee->iw_mode == IW_MODE_INFRA) { + bIsSptAmsdu = true; + }else + bIsSptAmsdu = true; + bIsSptAmsdu = (bIsSptAmsdu && ieee->pHTInfo->bCurrent_AMSDU_Support && qos_actived); + + tcb_desc_skb = (pcb_desc)(skb->cb + MAX_DEV_ADDR_SIZE); + if(bIsSptAmsdu) { + if(!tcb_desc_skb->bFromAggrQ) + { + if(qos_actived) + { + queue_index = UP2AC(skb->priority); + } else { + queue_index = WME_AC_BE; + } + + if ((skb_queue_len(&ieee->skb_aggQ[queue_index]) != 0)|| +#if defined RTL8192SE || defined RTL8192CE + (ieee->get_nic_desc_num(ieee->dev,queue_index)) > 1|| +#else + (!ieee->check_nic_enough_desc(ieee->dev,queue_index))|| +#endif + (ieee->queue_stop) || + (ieee->amsdu_in_process)) + { + /* insert the skb packet to the Aggregation queue */ + skb_queue_tail(&ieee->skb_aggQ[queue_index], skb); + spin_unlock_irqrestore(&ieee->lock, flags); + return 0; + } + } + else + { + if(tcb_desc_skb->bAMSDU) + IsAmsdu = true; + + ieee->amsdu_in_process = false; + } + } +#endif + memset(skb->cb, 0, sizeof(skb->cb)); + ether_type = ntohs(((struct ethhdr *)skb->data)->h_proto); + + if(ieee->iw_mode == IW_MODE_MONITOR) + { + txb = rtllib_alloc_txb(1, skb->len, GFP_ATOMIC); + if (unlikely(!txb)) { + printk(KERN_WARNING "%s: Could not allocate TXB\n", + ieee->dev->name); + goto failed; + } + + txb->encrypted = 0; + txb->payload_size = skb->len; + memcpy(skb_put(txb->fragments[0],skb->len), skb->data, skb->len); + + goto success; + } + + if (skb->len > 282){ + if (ETH_P_IP == ether_type) { + const struct iphdr *ip = (struct iphdr *)((u8 *)skb->data+14); + if (IPPROTO_UDP == ip->protocol) { + struct udphdr *udp = (struct udphdr *)((u8 *)ip + (ip->ihl << 2)); + if(((((u8 *)udp)[1] == 68) && (((u8 *)udp)[3] == 67)) || + ((((u8 *)udp)[1] == 67) && (((u8 *)udp)[3] == 68))) { + printk("DHCP pkt src port:%d, dest port:%d!!\n", ((u8 *)udp)[1],((u8 *)udp)[3]); + + bdhcp = true; +#ifdef _RTL8192_EXT_PATCH_ + ieee->LPSDelayCnt = 100; +#else + ieee->LPSDelayCnt = 100; +#endif + } + } + }else if(ETH_P_ARP == ether_type){ + printk("=================>DHCP Protocol start tx ARP pkt!!\n"); + bdhcp = true; + ieee->LPSDelayCnt = ieee->current_network.tim.tim_count; + + + } + } + + skb->priority = rtllib_classify(skb, IsAmsdu); +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){ + crypt = NULL; + encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) && + ieee->host_encrypt && ieee->WapiSupport && ieee->wapiInfo.bWapiEnable; + } + else{ +#endif +#ifdef _RTL8192_EXT_PATCH_ + crypt = ieee->sta_crypt[ieee->tx_keyidx]; +#else + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) && + ieee->host_encrypt && crypt && crypt->ops; +#ifdef RTL8192S_WAPI_SUPPORT + } +#endif + if (!encrypt && ieee->ieee802_1x && + ieee->drop_unencrypted && ether_type != ETH_P_PAE) { + stats->tx_dropped++; + goto success; + } + #ifdef CONFIG_RTLLIB_DEBUG + if (crypt && !encrypt && ether_type == ETH_P_PAE) { + struct eapol *eap = (struct eapol *)(skb->data + + sizeof(struct ethhdr) - SNAP_SIZE - sizeof(u16)); + RTLLIB_DEBUG_EAP("TX: IEEE 802.11 EAPOL frame: %s\n", + eap_get_type(eap->type)); + } + #endif + + /* Advance the SKB to the start of the payload */ + skb_pull(skb, sizeof(struct ethhdr)); + + /* Determine total amount of storage required for TXB packets */ +#ifdef ENABLE_AMSDU + if(!IsAmsdu) + bytes = skb->len + SNAP_SIZE + sizeof(u16); + else + bytes = skb->len; +#else + bytes = skb->len + SNAP_SIZE + sizeof(u16); +#endif + + if (encrypt) + fc = RTLLIB_FTYPE_DATA | RTLLIB_FCTL_WEP; + else + fc = RTLLIB_FTYPE_DATA; + + if(qos_actived) + fc |= RTLLIB_STYPE_QOS_DATA; + else + fc |= RTLLIB_STYPE_DATA; + +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_INFRA) + || (ieee->iw_mode == IW_MODE_MESH) ) +#else + if (ieee->iw_mode == IW_MODE_INFRA) +#endif + { + fc |= RTLLIB_FCTL_TODS; + /* To DS: Addr1 = BSSID, Addr2 = SA, + Addr3 = DA */ + memcpy(&header.addr1, ieee->current_network.bssid, ETH_ALEN); + memcpy(&header.addr2, &src, ETH_ALEN); + if(IsAmsdu) + memcpy(&header.addr3, ieee->current_network.bssid, ETH_ALEN); + else + memcpy(&header.addr3, &dest, ETH_ALEN); + } else if (ieee->iw_mode == IW_MODE_ADHOC) { + /* not From/To DS: Addr1 = DA, Addr2 = SA, + Addr3 = BSSID */ + memcpy(&header.addr1, dest, ETH_ALEN); + memcpy(&header.addr2, src, ETH_ALEN); + memcpy(&header.addr3, ieee->current_network.bssid, ETH_ALEN); + } + + bIsMulticast = is_broadcast_ether_addr(header.addr1) ||is_multicast_ether_addr(header.addr1); + + header.frame_ctl = cpu_to_le16(fc); + + /* Determine fragmentation size based on destination (multicast + * and broadcast are not fragmented) */ + if (bIsMulticast) { + frag_size = MAX_FRAG_THRESHOLD; + qos_ctl |= QOS_CTL_NOTCONTAIN_ACK; + } + else { +#ifdef ENABLE_AMSDU + if(bIsSptAmsdu) { + if(ieee->iw_mode == IW_MODE_ADHOC) { + if(p_sta) + frag_size = p_sta->htinfo.AMSDU_MaxSize; + else + frag_size = ieee->pHTInfo->nAMSDU_MaxSize; + } + else + frag_size = ieee->pHTInfo->nAMSDU_MaxSize; + qos_ctl = 0; + } + else +#endif + { + frag_size = ieee->fts; + qos_ctl = 0; + } + } + + if(qos_actived) + { + hdr_len = RTLLIB_3ADDR_LEN + 2; + + /* in case we are a client verify acm is not set for this ac */ + while (unlikely(ieee->wmm_acm & (0x01 << skb->priority))) { + printk("skb->priority = %x\n", skb->priority); + if (wme_downgrade_ac(skb)) { + break; + } + printk("converted skb->priority = %x\n", skb->priority); + } + qos_ctl |= skb->priority; +#ifdef ENABLE_AMSDU + if(IsAmsdu) + { + qos_ctl |= QOS_CTL_AMSDU_PRESENT; + } + header.qos_ctl = cpu_to_le16(qos_ctl); +#else + header.qos_ctl = cpu_to_le16(qos_ctl & RTLLIB_QOS_TID); +#endif + } else { + hdr_len = RTLLIB_3ADDR_LEN; + } + /* Determine amount of payload per fragment. Regardless of if + * this stack is providing the full 802.11 header, one will + * eventually be affixed to this fragment -- so we must account for + * it when determining the amount of payload space. */ + bytes_per_frag = frag_size - hdr_len; + if (ieee->config & + (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS)) + bytes_per_frag -= RTLLIB_FCS_LEN; + + /* Each fragment may need to have room for encryptiong pre/postfix */ + if (encrypt) { +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable) + bytes_per_frag -= ieee->wapiInfo.extra_prefix_len + + ieee->wapiInfo.extra_postfix_len; + else +#endif + bytes_per_frag -= crypt->ops->extra_prefix_len + + crypt->ops->extra_postfix_len; + } + /* Number of fragments is the total bytes_per_frag / + * payload_per_fragment */ + nr_frags = bytes / bytes_per_frag; + bytes_last_frag = bytes % bytes_per_frag; + if (bytes_last_frag) + nr_frags++; + else + bytes_last_frag = bytes_per_frag; + + /* When we allocate the TXB we allocate enough space for the reserve + * and full fragment bytes (bytes_per_frag doesn't include prefix, + * postfix, header, FCS, etc.) */ + txb = rtllib_alloc_txb(nr_frags, frag_size + ieee->tx_headroom, GFP_ATOMIC); + if (unlikely(!txb)) { + printk(KERN_WARNING "%s: Could not allocate TXB\n", + ieee->dev->name); + goto failed; + } + txb->encrypted = encrypt; + txb->payload_size = bytes; + + if(qos_actived) + { + txb->queue_index = UP2AC(skb->priority); + } else { + txb->queue_index = WME_AC_BE;; + } + + for (i = 0; i < nr_frags; i++) { + skb_frag = txb->fragments[i]; + tcb_desc = (cb_desc *)(skb_frag->cb + MAX_DEV_ADDR_SIZE); +#ifdef _RTL8192_EXT_PATCH_ + tcb_desc->mesh_pkt = 0; + if(ieee->iw_mode == IW_MODE_ADHOC) + tcb_desc->badhoc = 1; + else + tcb_desc->badhoc = 0; +#endif + if(qos_actived){ + skb_frag->priority = skb->priority; + tcb_desc->queue_index = UP2AC(skb->priority); + } else { + skb_frag->priority = WME_AC_BE; + tcb_desc->queue_index = WME_AC_BE; + } + skb_reserve(skb_frag, ieee->tx_headroom); + + if (encrypt){ + if (ieee->hwsec_active) + tcb_desc->bHwSec = 1; + else + tcb_desc->bHwSec = 0; +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable) + skb_reserve(skb_frag, ieee->wapiInfo.extra_prefix_len); + else +#endif + skb_reserve(skb_frag, crypt->ops->extra_prefix_len); + } + else + { + tcb_desc->bHwSec = 0; + } + frag_hdr = (struct rtllib_hdr_3addrqos *)skb_put(skb_frag, hdr_len); + memcpy(frag_hdr, &header, hdr_len); + + /* 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 | RTLLIB_FCTL_MOREFRAGS); + bytes = bytes_per_frag; + + } else { + /* The last fragment takes the remaining length */ + bytes = bytes_last_frag; + } + if((qos_actived) && (!bIsMulticast)) + { + frag_hdr->seq_ctl = rtllib_query_seqnum(ieee, skb_frag, header.addr1); + frag_hdr->seq_ctl = cpu_to_le16(frag_hdr->seq_ctl<<4 | i); + } else { + frag_hdr->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0]<<4 | i); + } + /* Put a SNAP header on the first fragment */ +#ifdef ENABLE_AMSDU + if ((i == 0) && (!IsAmsdu)) +#else + if (i == 0) +#endif + { + rtllib_put_snap( + skb_put(skb_frag, SNAP_SIZE + sizeof(u16)), + ether_type); + bytes -= SNAP_SIZE + sizeof(u16); + } + + memcpy(skb_put(skb_frag, bytes), skb->data, bytes); + + /* Advance the SKB... */ + skb_pull(skb, bytes); + + /* Encryption routine will move the header forward in order + * to insert the IV between the header and the payload */ + if (encrypt) { +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){ + if(SecSMS4HeaderFillIV(ieee, skb_frag) == 0){ + SecSWSMS4Encryption(ieee, skb_frag); + } else { + spin_unlock_irqrestore(&ieee->lock, flags); + dev_kfree_skb_any(skb); + rtllib_txb_free(txb); + return 0; + } + } + else +#endif + { + +#ifdef _RTL8192_EXT_PATCH_ + rtllib_encrypt_fragment(ieee, skb_frag, hdr_len, 0, 0); +#else + rtllib_encrypt_fragment(ieee, skb_frag, hdr_len); +#endif + } + } + if (ieee->config & + (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS)) + skb_put(skb_frag, 4); + } + + if((qos_actived) && (!bIsMulticast)) + { + if (ieee->seq_ctrl[UP2AC(skb->priority) + 1] == 0xFFF) + ieee->seq_ctrl[UP2AC(skb->priority) + 1] = 0; + else + ieee->seq_ctrl[UP2AC(skb->priority) + 1]++; + } else { + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + } + }else{ + if (unlikely(skb->len < sizeof(struct rtllib_hdr_3addr))) { + printk(KERN_WARNING "%s: skb too small (%d).\n", + ieee->dev->name, skb->len); + goto success; + } + + txb = rtllib_alloc_txb(1, skb->len, GFP_ATOMIC); + if(!txb){ + printk(KERN_WARNING "%s: Could not allocate TXB\n", + ieee->dev->name); + goto failed; + } + + txb->encrypted = 0; + txb->payload_size = skb->len; + memcpy(skb_put(txb->fragments[0],skb->len), skb->data, skb->len); + } + + success: + if (txb) + { +#if 1 + cb_desc *tcb_desc = (cb_desc *)(txb->fragments[0]->cb + MAX_DEV_ADDR_SIZE); + tcb_desc->bTxEnableFwCalcDur = 1; + tcb_desc->priority = skb->priority; + + if(ether_type == ETH_P_PAE) { + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + tcb_desc->data_rate = MgntQuery_TxRateExcludeCCKRates(ieee); + tcb_desc->bTxDisableRateFallBack = false; + }else{ + tcb_desc->data_rate = ieee->basic_rate; + tcb_desc->bTxDisableRateFallBack = 1; + } + + + tcb_desc->RATRIndex = 7; + tcb_desc->bTxUseDriverAssingedRate = 1; + } else { + if (is_multicast_ether_addr(header.addr1)) + tcb_desc->bMulticast = 1; + if (is_broadcast_ether_addr(header.addr1)) + tcb_desc->bBroadcast = 1; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if ( tcb_desc->bMulticast || tcb_desc->bBroadcast){ + rtllib_txrate_selectmode(ieee, tcb_desc, p_sta); + tcb_desc->data_rate = ieee->basic_rate; + } + else + { + if(ieee->iw_mode == IW_MODE_ADHOC) + { + u8 is_peer_shortGI_40M = 0; + u8 is_peer_shortGI_20M = 0; + u8 is_peer_BW_40M = 0; + p_sta = GetStaInfo(ieee, header.addr1); + if(NULL == p_sta) + { + rtllib_txrate_selectmode(ieee, tcb_desc, p_sta); + tcb_desc->data_rate = ieee->rate; + } + else + { + rtllib_txrate_selectmode(ieee, tcb_desc, p_sta); + tcb_desc->data_rate = CURRENT_RATE(p_sta->wireless_mode, p_sta->CurDataRate, p_sta->htinfo.HTHighestOperaRate); + is_peer_shortGI_40M = p_sta->htinfo.bCurShortGI40MHz; + is_peer_shortGI_20M = p_sta->htinfo.bCurShortGI20MHz; + is_peer_BW_40M = p_sta->htinfo.bCurTxBW40MHz; + } + rtllib_qurey_ShortPreambleMode(ieee, tcb_desc); + rtllib_tx_query_agg_cap(ieee, txb->fragments[0], tcb_desc); + rtllib_ibss_query_HTCapShortGI(ieee, tcb_desc,is_peer_shortGI_40M,is_peer_shortGI_20M); + rtllib_ibss_query_BandwidthMode(ieee, tcb_desc,is_peer_BW_40M); + rtllib_query_protectionmode(ieee, tcb_desc, txb->fragments[0]); + } + else { + rtllib_txrate_selectmode(ieee, tcb_desc, p_sta); + tcb_desc->data_rate = CURRENT_RATE(ieee->mode, ieee->rate, ieee->HTCurrentOperaRate); + if(bdhcp == true){ + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) { + tcb_desc->data_rate = MGN_1M; + tcb_desc->bTxDisableRateFallBack = false; + }else{ + tcb_desc->data_rate = MGN_1M; + tcb_desc->bTxDisableRateFallBack = 1; + } + + tcb_desc->RATRIndex = 7; + tcb_desc->bTxUseDriverAssingedRate = 1; + tcb_desc->bdhcp = 1; + } + rtllib_qurey_ShortPreambleMode(ieee, tcb_desc); + rtllib_tx_query_agg_cap(ieee, txb->fragments[0], tcb_desc); + rtllib_query_HTCapShortGI(ieee, tcb_desc); + rtllib_query_BandwidthMode(ieee, tcb_desc); + rtllib_query_protectionmode(ieee, tcb_desc, txb->fragments[0]); + + } + } +#else + rtllib_txrate_selectmode(ieee, tcb_desc); + if ( tcb_desc->bMulticast || tcb_desc->bBroadcast) + tcb_desc->data_rate = ieee->basic_rate; + else + tcb_desc->data_rate = CURRENT_RATE(ieee->mode, ieee->rate, ieee->HTCurrentOperaRate); + + if(bdhcp == true){ + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + tcb_desc->data_rate = MgntQuery_TxRateExcludeCCKRates(ieee); + tcb_desc->bTxDisableRateFallBack = false; + }else{ + tcb_desc->data_rate = MGN_1M; + tcb_desc->bTxDisableRateFallBack = 1; + } + + + tcb_desc->RATRIndex = 7; + tcb_desc->bTxUseDriverAssingedRate = 1; + tcb_desc->bdhcp = 1; + } + + rtllib_qurey_ShortPreambleMode(ieee, tcb_desc); + rtllib_tx_query_agg_cap(ieee, txb->fragments[0], tcb_desc); + rtllib_query_HTCapShortGI(ieee, tcb_desc); + rtllib_query_BandwidthMode(ieee, tcb_desc); + rtllib_query_protectionmode(ieee, tcb_desc, txb->fragments[0]); +#endif + } +#endif + } + spin_unlock_irqrestore(&ieee->lock, flags); + dev_kfree_skb_any(skb); + if (txb) { + if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE){ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + dev->stats.tx_packets++; + dev->stats.tx_bytes += txb->payload_size; +#endif + rtllib_softmac_xmit(txb, ieee); + }else{ + if ((*ieee->hard_start_xmit)(txb, dev) == 0) { + stats->tx_packets++; + stats->tx_bytes += txb->payload_size; + return 0; + } + rtllib_txb_free(txb); + } + } + + return 0; + + failed: + spin_unlock_irqrestore(&ieee->lock, flags); + netif_stop_queue(dev); + stats->tx_errors++; + return 1; + +} +int rtllib_xmit(struct sk_buff *skb, struct net_device *dev) +{ + memset(skb->cb, 0, sizeof(skb->cb)); + return rtllib_xmit_inter(skb, dev); +} + + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_txb_free); +#ifdef ENABLE_AMSDU +EXPORT_SYMBOL_RSL(rtllib_xmit_inter); +EXPORT_SYMBOL_RSL(AMSDU_Aggregation); +EXPORT_SYMBOL_RSL(AMSDU_GetAggregatibleList); +#endif +#ifdef _RTL8192_EXT_PATCH_ +EXPORT_SYMBOL_RSL(rtllib_query_seqnum); +EXPORT_SYMBOL_RSL(rtllib_alloc_txb); +EXPORT_SYMBOL_RSL(rtllib_encrypt_fragment); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/arc4.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/arc4.c @@ -0,0 +1,105 @@ +/* + * Cryptographic API + * + * ARC4 Cipher Algorithm + * + * Jon Oberheide + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ +#include +#include +#include "rtl_crypto.h" + +#define ARC4_MIN_KEY_SIZE 1 +#define ARC4_MAX_KEY_SIZE 256 +#define ARC4_BLOCK_SIZE 1 + +struct arc4_ctx { + u8 S[256]; + u8 x, y; +}; + +static int arc4_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len, u32 *flags) +{ + struct arc4_ctx *ctx = ctx_arg; + int i, j = 0, k = 0; + + ctx->x = 1; + ctx->y = 0; + + for(i = 0; i < 256; i++) + ctx->S[i] = i; + + for(i = 0; i < 256; i++) + { + u8 a = ctx->S[i]; + j = (j + in_key[k] + a) & 0xff; + ctx->S[i] = ctx->S[j]; + ctx->S[j] = a; + if((unsigned int)++k >= key_len) + k = 0; + } + + return 0; +} + +static void arc4_crypt(void *ctx_arg, u8 *out, const u8 *in) +{ + struct arc4_ctx *ctx = ctx_arg; + + u8 *const S = ctx->S; + u8 x = ctx->x; + u8 y = ctx->y; + u8 a, b; + + a = S[x]; + y = (y + a) & 0xff; + b = S[y]; + S[x] = b; + S[y] = a; + x = (x + 1) & 0xff; + *out++ = *in ^ S[(a + b) & 0xff]; + + ctx->x = x; + ctx->y = y; +} + +static struct crypto_alg arc4_alg = { + .cra_name = "arc4", + .cra_flags = CRYPTO_ALG_TYPE_CIPHER, + .cra_blocksize = ARC4_BLOCK_SIZE, + .cra_ctxsize = sizeof(struct arc4_ctx), + .cra_module = THIS_MODULE, + .cra_list = LIST_HEAD_INIT(arc4_alg.cra_list), + .cra_u = { .cipher = { + .cia_min_keysize = ARC4_MIN_KEY_SIZE, + .cia_max_keysize = ARC4_MAX_KEY_SIZE, + .cia_setkey = arc4_set_key, + .cia_encrypt = arc4_crypt, + .cia_decrypt = arc4_crypt } } +}; + +int __init arc4_init(void) +{ + return crypto_register_alg(&arc4_alg); +} + + +void __exit arc4_exit(void) +{ + crypto_unregister_alg(&arc4_alg); +} + +#ifndef BUILT_IN_CRYPTO +module_init(arc4_init); +module_exit(arc4_exit); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("ARC4 Cipher Algorithm"); +MODULE_AUTHOR("Jon Oberheide "); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/compress.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/compress.c @@ -0,0 +1,63 @@ +/* + * Cryptographic API. + * + * Compression operations. + * + * Copyright (c) 2002 James Morris + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#include +#include "rtl_crypto.h" +#include +#include +#include +#include "internal.h" + +static int crypto_compress(struct crypto_tfm *tfm, + const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen) +{ + return tfm->__crt_alg->cra_compress.coa_compress(crypto_tfm_ctx(tfm), + src, slen, dst, + dlen); +} + +static int crypto_decompress(struct crypto_tfm *tfm, + const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen) +{ + return tfm->__crt_alg->cra_compress.coa_decompress(crypto_tfm_ctx(tfm), + src, slen, dst, + dlen); +} + +int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags) +{ + return flags ? -EINVAL : 0; +} + +int crypto_init_compress_ops(struct crypto_tfm *tfm) +{ + int ret = 0; + struct compress_tfm *ops = &tfm->crt_compress; + + ret = tfm->__crt_alg->cra_compress.coa_init(crypto_tfm_ctx(tfm)); + if (ret) + goto out; + + ops->cot_compress = crypto_compress; + ops->cot_decompress = crypto_decompress; + +out: + return ret; +} + +void crypto_exit_compress_ops(struct crypto_tfm *tfm) +{ + tfm->__crt_alg->cra_compress.coa_exit(crypto_tfm_ctx(tfm)); +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/aes.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/aes.c @@ -0,0 +1,468 @@ +/* + * Cryptographic API. + * + * AES Cipher Algorithm. + * + * Based on Brian Gladman's code. + * + * Linux developers: + * Alexander Kjeldaas + * Herbert Valerio Riedel + * Kyle McMartin + * Adam J. Richter (conversion to 2.5 API). + * + * 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. + * + * --------------------------------------------------------------------------- + * Copyright (c) 2002, Dr Brian Gladman , Worcester, UK. + * All rights reserved. + * + * LICENSE TERMS + * + * The free distribution and use of this software in both source and binary + * form is allowed (with or without changes) provided that: + * + * 1. distributions of this source code include the above copyright + * notice, this list of conditions and the following disclaimer; + * + * 2. distributions in binary form include the above copyright + * notice, this list of conditions and the following disclaimer + * in the documentation and/or other associated materials; + * + * 3. the copyright holder's name is not used to endorse products + * built using this software without specific written permission. + * + * ALTERNATIVELY, provided that this notice is retained in full, this product + * may be distributed under the terms of the GNU General Public License (GPL), + * in which case the provisions of the GPL apply INSTEAD OF those given above. + * + * DISCLAIMER + * + * This software is provided 'as is' with no explicit or implied warranties + * in respect of its properties, including, but not limited to, correctness + * and/or fitness for purpose. + * --------------------------------------------------------------------------- + */ + +/* Some changes from the Gladman version: + s/RIJNDAEL(e_key)/E_KEY/g + s/RIJNDAEL(d_key)/D_KEY/g +*/ + +#include +#include +#include +#include +#include "rtl_crypto.h" +#include + +#define AES_MIN_KEY_SIZE 16 +#define AES_MAX_KEY_SIZE 32 + +#define AES_BLOCK_SIZE 16 + +static inline +u32 generic_rotr32 (const u32 x, const unsigned bits) +{ + const unsigned n = bits % 32; + return (x >> n) | (x << (32 - n)); +} + +static inline +u32 generic_rotl32 (const u32 x, const unsigned bits) +{ + const unsigned n = bits % 32; + return (x << n) | (x >> (32 - n)); +} + +#define rotl generic_rotl32 +#define rotr generic_rotr32 + +/* + * #define byte(x, nr) ((unsigned char)((x) >> (nr*8))) + */ +inline static u8 +byte(const u32 x, const unsigned n) +{ + return x >> (n << 3); +} + +#define u32_in(x) le32_to_cpu(*(const u32 *)(x)) +#define u32_out(to, from) (*(u32 *)(to) = cpu_to_le32(from)) + +struct aes_ctx { + int key_length; + u32 E[60]; + u32 D[60]; +}; + +#define E_KEY ctx->E +#define D_KEY ctx->D + +static u8 pow_tab[256] __initdata; +static u8 log_tab[256] __initdata; +static u8 sbx_tab[256] __initdata; +static u8 isb_tab[256] __initdata; +static u32 rco_tab[10]; +static u32 ft_tab[4][256]; +static u32 it_tab[4][256]; + +static u32 fl_tab[4][256]; +static u32 il_tab[4][256]; + +static inline u8 __init +f_mult (u8 a, u8 b) +{ + u8 aa = log_tab[a], cc = aa + log_tab[b]; + + return pow_tab[cc + (cc < aa ? 1 : 0)]; +} + +#define ff_mult(a,b) (a && b ? f_mult(a, b) : 0) + +#define f_rn(bo, bi, n, k) \ + bo[n] = ft_tab[0][byte(bi[n],0)] ^ \ + ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ + ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) + +#define i_rn(bo, bi, n, k) \ + bo[n] = it_tab[0][byte(bi[n],0)] ^ \ + it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ + it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) + +#define ls_box(x) \ + ( fl_tab[0][byte(x, 0)] ^ \ + fl_tab[1][byte(x, 1)] ^ \ + fl_tab[2][byte(x, 2)] ^ \ + fl_tab[3][byte(x, 3)] ) + +#define f_rl(bo, bi, n, k) \ + bo[n] = fl_tab[0][byte(bi[n],0)] ^ \ + fl_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ + fl_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) + +#define i_rl(bo, bi, n, k) \ + bo[n] = il_tab[0][byte(bi[n],0)] ^ \ + il_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ + il_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) + +static void __init +gen_tabs (void) +{ + u32 i, t; + u8 p, q; + + /* log and power tables for GF(2**8) finite field with + 0x011b as modular polynomial - the simplest primitive + root is 0x03, used here to generate the tables */ + + for (i = 0, p = 1; i < 256; ++i) { + pow_tab[i] = (u8) p; + log_tab[p] = (u8) i; + + p ^= (p << 1) ^ (p & 0x80 ? 0x01b : 0); + } + + log_tab[1] = 0; + + for (i = 0, p = 1; i < 10; ++i) { + rco_tab[i] = p; + + p = (p << 1) ^ (p & 0x80 ? 0x01b : 0); + } + + for (i = 0; i < 256; ++i) { + p = (i ? pow_tab[255 - log_tab[i]] : 0); + q = ((p >> 7) | (p << 1)) ^ ((p >> 6) | (p << 2)); + p ^= 0x63 ^ q ^ ((q >> 6) | (q << 2)); + sbx_tab[i] = p; + isb_tab[p] = (u8) i; + } + + for (i = 0; i < 256; ++i) { + p = sbx_tab[i]; + + t = p; + fl_tab[0][i] = t; + fl_tab[1][i] = rotl (t, 8); + fl_tab[2][i] = rotl (t, 16); + fl_tab[3][i] = rotl (t, 24); + + t = ((u32) ff_mult (2, p)) | + ((u32) p << 8) | + ((u32) p << 16) | ((u32) ff_mult (3, p) << 24); + + ft_tab[0][i] = t; + ft_tab[1][i] = rotl (t, 8); + ft_tab[2][i] = rotl (t, 16); + ft_tab[3][i] = rotl (t, 24); + + p = isb_tab[i]; + + t = p; + il_tab[0][i] = t; + il_tab[1][i] = rotl (t, 8); + il_tab[2][i] = rotl (t, 16); + il_tab[3][i] = rotl (t, 24); + + t = ((u32) ff_mult (14, p)) | + ((u32) ff_mult (9, p) << 8) | + ((u32) ff_mult (13, p) << 16) | + ((u32) ff_mult (11, p) << 24); + + it_tab[0][i] = t; + it_tab[1][i] = rotl (t, 8); + it_tab[2][i] = rotl (t, 16); + it_tab[3][i] = rotl (t, 24); + } +} + +#define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) + +#define imix_col(y,x) \ + u = star_x(x); \ + v = star_x(u); \ + w = star_x(v); \ + t = w ^ (x); \ + (y) = u ^ v ^ w; \ + (y) ^= rotr(u ^ t, 8) ^ \ + rotr(v ^ t, 16) ^ \ + rotr(t,24) + +/* initialise the key schedule from the user supplied key */ + +#define loop4(i) \ +{ t = rotr(t, 8); t = ls_box(t) ^ rco_tab[i]; \ + t ^= E_KEY[4 * i]; E_KEY[4 * i + 4] = t; \ + t ^= E_KEY[4 * i + 1]; E_KEY[4 * i + 5] = t; \ + t ^= E_KEY[4 * i + 2]; E_KEY[4 * i + 6] = t; \ + t ^= E_KEY[4 * i + 3]; E_KEY[4 * i + 7] = t; \ +} + +#define loop6(i) \ +{ t = rotr(t, 8); t = ls_box(t) ^ rco_tab[i]; \ + t ^= E_KEY[6 * i]; E_KEY[6 * i + 6] = t; \ + t ^= E_KEY[6 * i + 1]; E_KEY[6 * i + 7] = t; \ + t ^= E_KEY[6 * i + 2]; E_KEY[6 * i + 8] = t; \ + t ^= E_KEY[6 * i + 3]; E_KEY[6 * i + 9] = t; \ + t ^= E_KEY[6 * i + 4]; E_KEY[6 * i + 10] = t; \ + t ^= E_KEY[6 * i + 5]; E_KEY[6 * i + 11] = t; \ +} + +#define loop8(i) \ +{ t = rotr(t, 8); ; t = ls_box(t) ^ rco_tab[i]; \ + t ^= E_KEY[8 * i]; E_KEY[8 * i + 8] = t; \ + t ^= E_KEY[8 * i + 1]; E_KEY[8 * i + 9] = t; \ + t ^= E_KEY[8 * i + 2]; E_KEY[8 * i + 10] = t; \ + t ^= E_KEY[8 * i + 3]; E_KEY[8 * i + 11] = t; \ + t = E_KEY[8 * i + 4] ^ ls_box(t); \ + E_KEY[8 * i + 12] = t; \ + t ^= E_KEY[8 * i + 5]; E_KEY[8 * i + 13] = t; \ + t ^= E_KEY[8 * i + 6]; E_KEY[8 * i + 14] = t; \ + t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t; \ +} + +static int +aes_set_key(void *ctx_arg, const u8 *in_key, unsigned int key_len, u32 *flags) +{ + struct aes_ctx *ctx = ctx_arg; + u32 i, t, u, v, w; + + if (key_len != 16 && key_len != 24 && key_len != 32) { + *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; + return -EINVAL; + } + + ctx->key_length = key_len; + + E_KEY[0] = u32_in (in_key); + E_KEY[1] = u32_in (in_key + 4); + E_KEY[2] = u32_in (in_key + 8); + E_KEY[3] = u32_in (in_key + 12); + + switch (key_len) { + case 16: + t = E_KEY[3]; + for (i = 0; i < 10; ++i) + loop4 (i); + break; + + case 24: + E_KEY[4] = u32_in (in_key + 16); + t = E_KEY[5] = u32_in (in_key + 20); + for (i = 0; i < 8; ++i) + loop6 (i); + break; + + case 32: + E_KEY[4] = u32_in (in_key + 16); + E_KEY[5] = u32_in (in_key + 20); + E_KEY[6] = u32_in (in_key + 24); + t = E_KEY[7] = u32_in (in_key + 28); + for (i = 0; i < 7; ++i) + loop8 (i); + break; + } + + D_KEY[0] = E_KEY[0]; + D_KEY[1] = E_KEY[1]; + D_KEY[2] = E_KEY[2]; + D_KEY[3] = E_KEY[3]; + + for (i = 4; i < key_len + 24; ++i) { + imix_col (D_KEY[i], E_KEY[i]); + } + + return 0; +} + +/* encrypt a block of text */ + +#define f_nround(bo, bi, k) \ + f_rn(bo, bi, 0, k); \ + f_rn(bo, bi, 1, k); \ + f_rn(bo, bi, 2, k); \ + f_rn(bo, bi, 3, k); \ + k += 4 + +#define f_lround(bo, bi, k) \ + f_rl(bo, bi, 0, k); \ + f_rl(bo, bi, 1, k); \ + f_rl(bo, bi, 2, k); \ + f_rl(bo, bi, 3, k) + +static void aes_encrypt(void *ctx_arg, u8 *out, const u8 *in) +{ + const struct aes_ctx *ctx = ctx_arg; + u32 b0[4], b1[4]; + const u32 *kp = E_KEY + 4; + b0[0] = u32_in (in) ^ E_KEY[0]; + b0[1] = u32_in (in + 4) ^ E_KEY[1]; + b0[2] = u32_in (in + 8) ^ E_KEY[2]; + b0[3] = u32_in (in + 12) ^ E_KEY[3]; + + if (ctx->key_length > 24) { + f_nround (b1, b0, kp); + f_nround (b0, b1, kp); + } + + if (ctx->key_length > 16) { + f_nround (b1, b0, kp); + f_nround (b0, b1, kp); + } + + f_nround (b1, b0, kp); + f_nround (b0, b1, kp); + f_nround (b1, b0, kp); + f_nround (b0, b1, kp); + f_nround (b1, b0, kp); + f_nround (b0, b1, kp); + f_nround (b1, b0, kp); + f_nround (b0, b1, kp); + f_nround (b1, b0, kp); + f_lround (b0, b1, kp); + + u32_out (out, b0[0]); + u32_out (out + 4, b0[1]); + u32_out (out + 8, b0[2]); + u32_out (out + 12, b0[3]); +} + +/* decrypt a block of text */ + +#define i_nround(bo, bi, k) \ + i_rn(bo, bi, 0, k); \ + i_rn(bo, bi, 1, k); \ + i_rn(bo, bi, 2, k); \ + i_rn(bo, bi, 3, k); \ + k -= 4 + +#define i_lround(bo, bi, k) \ + i_rl(bo, bi, 0, k); \ + i_rl(bo, bi, 1, k); \ + i_rl(bo, bi, 2, k); \ + i_rl(bo, bi, 3, k) + +static void aes_decrypt(void *ctx_arg, u8 *out, const u8 *in) +{ + const struct aes_ctx *ctx = ctx_arg; + u32 b0[4], b1[4]; + const int key_len = ctx->key_length; + const u32 *kp = D_KEY + key_len + 20; + + b0[0] = u32_in (in) ^ E_KEY[key_len + 24]; + b0[1] = u32_in (in + 4) ^ E_KEY[key_len + 25]; + b0[2] = u32_in (in + 8) ^ E_KEY[key_len + 26]; + b0[3] = u32_in (in + 12) ^ E_KEY[key_len + 27]; + + if (key_len > 24) { + i_nround (b1, b0, kp); + i_nround (b0, b1, kp); + } + + if (key_len > 16) { + i_nround (b1, b0, kp); + i_nround (b0, b1, kp); + } + + i_nround (b1, b0, kp); + i_nround (b0, b1, kp); + i_nround (b1, b0, kp); + i_nround (b0, b1, kp); + i_nround (b1, b0, kp); + i_nround (b0, b1, kp); + i_nround (b1, b0, kp); + i_nround (b0, b1, kp); + i_nround (b1, b0, kp); + i_lround (b0, b1, kp); + + u32_out (out, b0[0]); + u32_out (out + 4, b0[1]); + u32_out (out + 8, b0[2]); + u32_out (out + 12, b0[3]); +} + + +static struct crypto_alg aes_alg = { + .cra_name = "aes", + .cra_flags = CRYPTO_ALG_TYPE_CIPHER, + .cra_blocksize = AES_BLOCK_SIZE, + .cra_ctxsize = sizeof(struct aes_ctx), + .cra_module = THIS_MODULE, + .cra_list = LIST_HEAD_INIT(aes_alg.cra_list), + .cra_u = { + .cipher = { + .cia_min_keysize = AES_MIN_KEY_SIZE, + .cia_max_keysize = AES_MAX_KEY_SIZE, + .cia_setkey = aes_set_key, + .cia_encrypt = aes_encrypt, + .cia_decrypt = aes_decrypt + } + } +}; + +int __init aes_init(void) +{ + gen_tabs(); + return crypto_register_alg(&aes_alg); +} + +void __exit aes_fini(void) +{ + crypto_unregister_alg(&aes_alg); +} + +#ifndef BUILT_IN_CRYPTO +module_init(aes_init); +module_exit(aes_fini); + +MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); +MODULE_LICENSE("Dual BSD/GPL"); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_softmac.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_softmac.c @@ -0,0 +1,5255 @@ +/* IEEE 802.11 SoftMAC layer + * Copyright (c) 2005 Andrea Merello + * + * Mostly extracted from the rtl8180-sa2400 driver for the + * in-kernel generic ieee802.11 stack. + * + * Few lines might be stolen from other part of the rtllib + * stack. Copyright who own it's copyright + * + * WPA code stolen from the ipw2200 driver. + * Copyright who own it's copyright. + * + * released under the GPL + */ + + +#include "rtllib.h" + +#include +#include +#include +#include +#ifdef ENABLE_DOT11D +#include "dot11d.h" +#endif + +#ifdef RTK_DMP_PLATFORM +#include +#endif +extern void _setup_timer( struct timer_list*, void*, unsigned long ); +u8 rsn_authen_cipher_suite[16][4] = { + {0x00,0x0F,0xAC,0x00}, + {0x00,0x0F,0xAC,0x01}, + {0x00,0x0F,0xAC,0x02}, + {0x00,0x0F,0xAC,0x03}, + {0x00,0x0F,0xAC,0x04}, + {0x00,0x0F,0xAC,0x05}, +}; + +short rtllib_is_54g(struct rtllib_network *net) +{ + return ((net->rates_ex_len > 0) || (net->rates_len > 4)); +} + +short rtllib_is_shortslot(struct rtllib_network net) +{ + return (net.capability & WLAN_CAPABILITY_SHORT_SLOT_TIME); +} + +/* returns the total length needed for pleacing the RATE MFIE + * tag and the EXTENDED RATE MFIE tag if needed. + * It encludes two bytes per tag for the tag itself and its len + */ +unsigned int rtllib_MFIE_rate_len(struct rtllib_device *ieee) +{ + unsigned int rate_len = 0; + + if (ieee->modulation & RTLLIB_CCK_MODULATION) + rate_len = RTLLIB_CCK_RATE_LEN + 2; + + if (ieee->modulation & RTLLIB_OFDM_MODULATION) + + rate_len += RTLLIB_OFDM_RATE_LEN + 2; + + return rate_len; +} + +/* pleace the MFIE rate, tag to the memory (double) poined. + * Then it updates the pointer so that + * it points after the new MFIE tag added. + */ +void rtllib_MFIE_Brate(struct rtllib_device *ieee, u8 **tag_p) +{ + u8 *tag = *tag_p; + + if (ieee->modulation & RTLLIB_CCK_MODULATION){ + *tag++ = MFIE_TYPE_RATES; + *tag++ = 4; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_1MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_2MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_5MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_11MB; + } + + /* We may add an option for custom rates that specific HW might support */ + *tag_p = tag; +} + +void rtllib_MFIE_Grate(struct rtllib_device *ieee, u8 **tag_p) +{ + u8 *tag = *tag_p; + + if (ieee->modulation & RTLLIB_OFDM_MODULATION){ + + *tag++ = MFIE_TYPE_RATES_EX; + *tag++ = 8; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_6MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_9MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_12MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_18MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_24MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_36MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_48MB; + *tag++ = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_54MB; + + } + + /* We may add an option for custom rates that specific HW might support */ + *tag_p = tag; +} + +void rtllib_WMM_Info(struct rtllib_device *ieee, u8 **tag_p) { + u8 *tag = *tag_p; + + *tag++ = MFIE_TYPE_GENERIC; + *tag++ = 7; + *tag++ = 0x00; + *tag++ = 0x50; + *tag++ = 0xf2; + *tag++ = 0x02; + *tag++ = 0x00; + *tag++ = 0x01; +#ifdef SUPPORT_USPD + if(ieee->current_network.wmm_info & 0x80) { + *tag++ = 0x0f|MAX_SP_Len; + } else { + *tag++ = MAX_SP_Len; + } +#else + *tag++ = MAX_SP_Len; +#endif + *tag_p = tag; +} + +#ifdef THOMAS_TURBO +void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p) { + u8 *tag = *tag_p; + + *tag++ = MFIE_TYPE_GENERIC; + *tag++ = 7; + *tag++ = 0x00; + *tag++ = 0xe0; + *tag++ = 0x4c; + *tag++ = 0x01; + *tag++ = 0x02; + *tag++ = 0x11; + *tag++ = 0x00; + + *tag_p = tag; + printk(KERN_ALERT "This is enable turbo mode IE process\n"); +} +#endif + +void enqueue_mgmt(struct rtllib_device *ieee, struct sk_buff *skb) +{ + int nh; + nh = (ieee->mgmt_queue_head +1) % MGMT_QUEUE_NUM; + +/* + * if the queue is full but we have newer frames then + * just overwrites the oldest. + * + * if (nh == ieee->mgmt_queue_tail) + * return -1; + */ + ieee->mgmt_queue_head = nh; + ieee->mgmt_queue_ring[nh] = skb; + +} + +struct sk_buff *dequeue_mgmt(struct rtllib_device *ieee) +{ + struct sk_buff *ret; + + if(ieee->mgmt_queue_tail == ieee->mgmt_queue_head) + return NULL; + + ret = ieee->mgmt_queue_ring[ieee->mgmt_queue_tail]; + + ieee->mgmt_queue_tail = + (ieee->mgmt_queue_tail+1) % MGMT_QUEUE_NUM; + + return ret; +} + +void init_mgmt_queue(struct rtllib_device *ieee) +{ + ieee->mgmt_queue_tail = ieee->mgmt_queue_head = 0; +} + + +u8 +MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee) +{ + u16 i; + u8 QueryRate = 0; + u8 BasicRate; + + + for( i = 0; i < ieee->current_network.rates_len; i++) + { + BasicRate = ieee->current_network.rates[i]&0x7F; + if(!rtllib_is_cck_rate(BasicRate)) + { + if(QueryRate == 0) + { + QueryRate = BasicRate; + } + else + { + if(BasicRate < QueryRate) + { + QueryRate = BasicRate; + } + } + } + } + + if(QueryRate == 0) + { + QueryRate = 12; + printk("No BasicRate found!!\n"); + } + return QueryRate; +} + +u8 MgntQuery_MgntFrameTxRate(struct rtllib_device *ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + u8 rate; + +#if defined RTL8190P || defined RTL8192E || defined RTL8192U + if(pHTInfo->IOTAction & HT_IOT_ACT_MGNT_USE_CCK_6M) + rate = 0x0c; + else + rate = ieee->basic_rate & 0x7f; +#elif defined RTL8192SE || defined RTL8192SU || defined RTL8192CE + if(pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + rate = MgntQuery_TxRateExcludeCCKRates(ieee); + } + else + rate = ieee->basic_rate & 0x7f; +#endif + + if(rate == 0){ + if(ieee->mode == IEEE_A|| + ieee->mode== IEEE_N_5G|| + (ieee->mode== IEEE_N_24G&&!pHTInfo->bCurSuppCCK)) + rate = 0x0c; + else + rate = 0x02; + } + + /* + if( pMgntInfo->bScanInProgress || (pMgntInfo->bDualModeScanStep!=0) ) + { + if(pMgntInfo->dot11CurrentWirelessMode==WIRELESS_MODE_A) + rate = 0x0c; + else + rate = 0x02; + } + */ + return rate; +} + + +void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl); + +inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee) +{ + unsigned long flags; + short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE; + struct rtllib_hdr_3addr *header= + (struct rtllib_hdr_3addr *) skb->data; + + cb_desc *tcb_desc = (cb_desc *)(skb->cb + 8); + spin_lock_irqsave(&ieee->lock, flags); + + /* called with 2nd param 0, no mgmt lock required */ + rtllib_sta_wakeup(ieee,0); + + tcb_desc->queue_index = MGNT_QUEUE; +#ifdef RTL8192CE + tcb_desc->queue_index = MGNT_QUEUE; +#endif + + if(ieee->disable_mgnt_queue) + tcb_desc->queue_index = HIGH_QUEUE; + + tcb_desc->data_rate = MgntQuery_MgntFrameTxRate(ieee); + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; + tcb_desc->bTxUseDriverAssingedRate = 1; +#ifdef _RTL8192_EXT_PATCH_ + tcb_desc->macId = 0; +#endif + if(single){ + if(ieee->queue_stop){ + enqueue_mgmt(ieee,skb); + }else{ + header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0]<<4); + + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + + /* avoid watchdog triggers */ + ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate); + } + + spin_unlock_irqrestore(&ieee->lock, flags); + }else{ + spin_unlock_irqrestore(&ieee->lock, flags); + spin_lock_irqsave(&ieee->mgmt_tx_lock, flags); + + header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + + /* check wether the managed packet queued greater than 5 */ + if(!ieee->check_nic_enough_desc(ieee->dev,tcb_desc->queue_index)||\ + (skb_queue_len(&ieee->skb_waitQ[tcb_desc->queue_index]) != 0)||\ + (ieee->queue_stop) ) { + /* insert the skb packet to the management queue */ + /* as for the completion function, it does not need + * to check it any more. + * */ + printk("%s():insert to waitqueue, queue_index:%d!\n",__FUNCTION__,tcb_desc->queue_index); + skb_queue_tail(&ieee->skb_waitQ[tcb_desc->queue_index], skb); + } else { + ieee->softmac_hard_start_xmit(skb,ieee->dev); + } + spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags); + } +} + +inline void softmac_ps_mgmt_xmit(struct sk_buff *skb, + struct rtllib_device *ieee) +{ + short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE; + struct rtllib_hdr_3addr *header = + (struct rtllib_hdr_3addr *) skb->data; + u16 fc,type,stype; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + 8); + + fc = header->frame_ctl; + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + + + if(stype != RTLLIB_STYPE_PSPOLL) + tcb_desc->queue_index = MGNT_QUEUE; + else + tcb_desc->queue_index = HIGH_QUEUE; + + if(ieee->disable_mgnt_queue) + tcb_desc->queue_index = HIGH_QUEUE; + +#ifdef RTL8192CE + tcb_desc->queue_index = MGNT_QUEUE; +#endif + + tcb_desc->data_rate = MgntQuery_MgntFrameTxRate(ieee); + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; + tcb_desc->bTxUseDriverAssingedRate = 1; + if (single) { + if (type != RTLLIB_FTYPE_CTL) { + header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + + } + /* avoid watchdog triggers */ + ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate); + + } else { + if (type != RTLLIB_FTYPE_CTL) { + header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + } + ieee->softmac_hard_start_xmit(skb,ieee->dev); + + } +} + +inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee) +{ + unsigned int len,rate_len; + u8 *tag; + struct sk_buff *skb; + struct rtllib_probe_request *req; + +#ifdef _RTL8192_EXT_PATCH_ + short extMore = 0; + if(ieee->ext_patch_rtllib_probe_req_1) + extMore = ieee->ext_patch_rtllib_probe_req_1(ieee); +#endif + + len = ieee->current_network.ssid_len; + + rate_len = rtllib_MFIE_rate_len(ieee); + +#ifdef _RTL8192_EXT_PATCH_ + if(!extMore) + skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) + + 2 + len + rate_len + ieee->tx_headroom); + else + skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) + + 2 + len + rate_len+128+ieee->tx_headroom); +#else +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr; + int alignment; + skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) + + 2 + len + rate_len + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) + + 2 + len + rate_len + ieee->tx_headroom); +#endif +#endif + + if (!skb) + return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + req = (struct rtllib_probe_request *) skb_put(skb,sizeof(struct rtllib_probe_request)); + req->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_REQ); + req->header.duration_id = 0; + + memset(req->header.addr1, 0xff, ETH_ALEN); + memcpy(req->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memset(req->header.addr3, 0xff, ETH_ALEN); + + tag = (u8 *) skb_put(skb,len+2+rate_len); + + *tag++ = MFIE_TYPE_SSID; + *tag++ = len; + memcpy(tag, ieee->current_network.ssid, len); + tag += len; + + rtllib_MFIE_Brate(ieee,&tag); + rtllib_MFIE_Grate(ieee,&tag); + +#ifdef _RTL8192_EXT_PATCH_ + if(extMore) + ieee->ext_patch_rtllib_probe_req_2(ieee, skb, tag); +#endif + + return skb; +} + +struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee); + +#ifdef _RTL8192_EXT_PATCH_ +void ext_rtllib_send_beacon_wq(void *data) +{ + struct rtllib_device *ieee = (struct rtllib_device *)container_of_work_rsl((struct work_struct *)data, struct rtllib_device, ext_send_beacon_wq); + struct sk_buff *skb; + + skb = rtllib_get_beacon_(ieee); + + if (skb){ + softmac_mgmt_xmit(skb, ieee); + ieee->softmac_stats.tx_beacons++; + } + + + +} +#endif +void rtllib_send_beacon(struct rtllib_device *ieee) +{ + struct sk_buff *skb; + if(!ieee->ieee_up) + return; + skb = rtllib_get_beacon_(ieee); + + if (skb){ + softmac_mgmt_xmit(skb, ieee); + ieee->softmac_stats.tx_beacons++; + } + + if(ieee->beacon_txing && ieee->ieee_up){ + mod_timer(&ieee->beacon_timer,jiffies+(MSECS(ieee->current_network.beacon_interval-5))); + } +} + + +void rtllib_send_beacon_cb(unsigned long _ieee) +{ + struct rtllib_device *ieee = + (struct rtllib_device *) _ieee; + unsigned long flags; + + spin_lock_irqsave(&ieee->beacon_lock, flags); + rtllib_send_beacon(ieee); + spin_unlock_irqrestore(&ieee->beacon_lock, flags); +} + +#ifdef _RTL8192_EXT_PATCH_ + +inline struct sk_buff *rtllib_probe_req_with_SSID(struct rtllib_device *ieee, char *ssid, int len_ssid) +{ + unsigned int len,rate_len; + u8 *tag; + struct sk_buff *skb; + struct rtllib_probe_request *req; + +#ifdef _RTL8192_EXT_PATCH_ + short extMore = 0; + if(ieee->ext_patch_rtllib_probe_req_1) + extMore = ieee->ext_patch_rtllib_probe_req_1(ieee); +#endif + + len = len_ssid; + + rate_len = rtllib_MFIE_rate_len(ieee); + +#ifdef _RTL8192_EXT_PATCH_ + if(!extMore) +#endif + skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) + + 2 + len + rate_len + ieee->tx_headroom); +#ifdef _RTL8192_EXT_PATCH_ + else + skb = dev_alloc_skb(sizeof(struct rtllib_probe_request) + + 2 + len + rate_len+128+ieee->tx_headroom); +#endif + + if (!skb) + return NULL; + + req = (struct rtllib_probe_request *) skb_put(skb,sizeof(struct rtllib_probe_request)); + req->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_REQ); + req->header.duration_id = 0; + + memset(req->header.addr1, 0xff, ETH_ALEN); + memcpy(req->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memset(req->header.addr3, 0xff, ETH_ALEN); + + tag = (u8 *) skb_put(skb,len+2+rate_len); + + *tag++ = MFIE_TYPE_SSID; + *tag++ = len; + if(len) + { + memcpy(tag, ssid, len); + tag += len; + } + + rtllib_MFIE_Brate(ieee,&tag); + rtllib_MFIE_Grate(ieee,&tag); + +#ifdef _RTL8192_EXT_PATCH_ + if(extMore) + ieee->ext_patch_rtllib_probe_req_2(ieee, skb, tag); +#endif + return skb; +} + +#endif + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +void rtllib_ibss_wait_timeout(unsigned long _ieee) +{ + struct rtllib_device *ieee = + (struct rtllib_device *) _ieee; + printk("======>%s():oh oh ibss wait beacon time out, search a new ibss now\n",__FUNCTION__); + rtllib_stop_send_beacons(ieee); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&ieee->start_ibss_wq); + cancel_delayed_work(&ieee->link_change_wq); +#endif + rtllib_stop_scan(ieee); + queue_delayed_work_rsl(ieee->wq, &ieee->start_ibss_wq, MSECS(150)); +} +#endif + + +/* + * Description: + * Enable network monitor mode, all rx packets will be received. + */ +void rtllib_EnableNetMonitorMode(struct net_device* dev, + bool bInitState) +{ + struct rtllib_device* ieee = netdev_priv_rsl(dev); + + printk("========>Enter Monitor Mode\n"); + + ieee->AllowAllDestAddrHandler(dev, true, !bInitState); +} + + +/* + * Description: + * Disable network network monitor mode, only packets destinated to + * us will be received. + */ +void rtllib_DisableNetMonitorMode(struct net_device* dev, + bool bInitState) +{ + struct rtllib_device* ieee = netdev_priv_rsl(dev); + + printk("========>Exit Monitor Mode\n"); + + ieee->AllowAllDestAddrHandler(dev, false, !bInitState); +} + + +/* + * Description: + * This enables the specialized promiscuous mode required by Intel. + * In this mode, Intel intends to hear traffics from/to other STAs in the same BSS. + * Therefore we don't have to disable checking BSSID and we only need to allow all dest. + * BUT: if we enable checking BSSID then we can't recv packets from other STA. + */ +void rtllib_EnableIntelPromiscuousMode(struct net_device* dev, + bool bInitState) +{ + bool bFilterOutNonAssociatedBSSID = false; + + struct rtllib_device* ieee = netdev_priv_rsl(dev); + + printk("========>Enter Intel Promiscuous Mode\n"); + + ieee->AllowAllDestAddrHandler(dev, true, !bInitState); + ieee->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, (u8*)&bFilterOutNonAssociatedBSSID); + + ieee->bNetPromiscuousMode = true; +} + + +/* + * Description: + * This disables the specialized promiscuous mode required by Intel. + * See MgntEnableIntelPromiscuousMode for detail. + */ +void rtllib_DisableIntelPromiscuousMode(struct net_device* dev, + bool bInitState) +{ + bool bFilterOutNonAssociatedBSSID = true; + + struct rtllib_device* ieee = netdev_priv_rsl(dev); + + printk("========>Exit Intel Promiscuous Mode\n"); + + ieee->AllowAllDestAddrHandler(dev, false, !bInitState); + ieee->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, (u8*)&bFilterOutNonAssociatedBSSID); + + ieee->bNetPromiscuousMode = false; +} + + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_send_probe(struct rtllib_device *ieee, u8 is_mesh) +#else +void rtllib_send_probe(struct rtllib_device *ieee) +#endif +{ + struct sk_buff *skb; +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + skb = rtllib_probe_req_with_SSID(ieee, NULL, 0); + else +#endif + skb = rtllib_probe_req(ieee); + if (skb){ + softmac_mgmt_xmit(skb, ieee); + ieee->softmac_stats.tx_probe_rq++; + } +} + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh) +{ + if (ieee->active_scan && (ieee->softmac_features & IEEE_SOFTMAC_PROBERQ)){ + rtllib_send_probe(ieee,is_mesh); + rtllib_send_probe(ieee,is_mesh); + } +} +#else +void rtllib_send_probe_requests(struct rtllib_device *ieee) +{ + if (ieee->active_scan && (ieee->softmac_features & IEEE_SOFTMAC_PROBERQ)){ + rtllib_send_probe(ieee); + rtllib_send_probe(ieee); + } +} +#endif + +void rtllib_softmac_hint11d_wq(void *data) +{ +#ifdef CONFIG_CRDA + struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, softmac_hint11d_wq); + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee); + struct wireless_dev *wdev = &ieee->wdev; + + regulatory_hint_11d(wdev->wiphy, pDot11dInfo->CountryIeBuf, pDot11dInfo->CountryIeLen); +#endif +} + +void rtllib_update_active_chan_map(struct rtllib_device *ieee) +{ +#ifdef ENABLE_DOT11D + memcpy(ieee->active_channel_map, GET_DOT11D_INFO(ieee)->channel_map, MAX_CHANNEL_NUMBER+1); +#else + memcpy(ieee->active_channel_map, ieee->channel_map, MAX_CHANNEL_NUMBER+1); +#endif +#if 0 + { + int i; + for(i=1;i<=14;i++) + printk("%d ", ieee->active_channel_map[i]); + printk("\n"); + } +#endif +} + +/* this performs syncro scan blocking the caller until all channels + * in the allowed channel map has been checked. + */ +void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh) +{ + short ch = 0; + + rtllib_update_active_chan_map(ieee); + + ieee->be_scan_inprogress = true; + + down(&ieee->scan_sem); + + while(1) + { + + do { + ch++; + if (ch > MAX_CHANNEL_NUMBER) + goto out; /* scan completed */ + } while(!ieee->active_channel_map[ch]); + + /* this fuction can be called in two situations + * 1- We have switched to ad-hoc mode and we are + * performing a complete syncro scan before conclude + * there are no interesting cell and to create a + * new one. In this case the link state is + * RTLLIB_NOLINK until we found an interesting cell. + * If so the ieee8021_new_net, called by the RX path + * will set the state to RTLLIB_LINKED, so we stop + * scanning + * 2- We are linked and the root uses run iwlist scan. + * So we switch to RTLLIB_LINKED_SCANNING to remember + * that we are still logically linked (not interested in + * new network events, despite for updating the net list, + * but we are temporarly 'unlinked' as the driver shall + * not filter RX frames and the channel is changing. + * So the only situation in witch are interested is to check + * if the state become LINKED because of the #1 situation + */ + + if (ieee->state == RTLLIB_LINKED) + goto out; + if (ieee->sync_scan_hurryup){ + printk("============>sync_scan_hurryup out\n"); + goto out; + } + + ieee->set_chan(ieee->dev, ch); + if(ieee->active_channel_map[ch] == 1) +#ifdef _RTL8192_EXT_PATCH_ + rtllib_send_probe_requests(ieee, is_mesh); +#else + rtllib_send_probe_requests(ieee); +#endif + + /* this prevent excessive time wait when we + * need to wait for a syncro scan to end.. + */ + msleep_interruptible_rsl(RTLLIB_SOFTMAC_SCAN_TIME); + } +out: + ieee->actscanning = false; + ieee->sync_scan_hurryup = 0; + + if(ieee->state >= RTLLIB_LINKED){ +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee)) + DOT11D_ScanComplete(ieee); +#endif + } + up(&ieee->scan_sem); + + ieee->be_scan_inprogress = false; + +#ifndef FOR_MOBLIN + { + union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); + wireless_send_event(ieee->dev,SIOCGIWSCAN,&wrqu,NULL); + } +#endif +} + +void rtllib_softmac_scan_wq(void *data) +{ + struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, softmac_scan_wq); + +#ifndef _RTL8192_EXT_PATCH_ + u8 last_channel = ieee->current_network.channel; +#endif + rtllib_update_active_chan_map(ieee); + + if(!ieee->ieee_up) + return; + if(rtllib_act_scanning(ieee,true) == true) + return; + + down(&ieee->scan_sem); + + if(ieee->eRFPowerState == eRfOff) + { + printk("======>%s():rf state is eRfOff, return\n",__FUNCTION__); + goto out1; + } + + do{ + ieee->current_network.channel = + (ieee->current_network.channel + 1) % MAX_CHANNEL_NUMBER; + if (ieee->scan_watch_dog++ > MAX_CHANNEL_NUMBER) + { + if (!ieee->active_channel_map[ieee->current_network.channel]) + ieee->current_network.channel = 6; + goto out; /* no good chans */ + } + } while(!ieee->active_channel_map[ieee->current_network.channel]); + + if (ieee->scanning_continue == 0 ) + goto out; + + ieee->set_chan(ieee->dev, ieee->current_network.channel); + + if(ieee->active_channel_map[ieee->current_network.channel] == 1) +#ifdef _RTL8192_EXT_PATCH_ + rtllib_send_probe_requests(ieee, 0); +#else + rtllib_send_probe_requests(ieee); +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,40) + queue_delayed_work_rsl(ieee->wq, &ieee->softmac_scan_wq, MSECS(RTLLIB_SOFTMAC_SCAN_TIME)); +#else + if (ieee->scanning_continue == 1) + mod_timer(&ieee->scan_timer,(jiffies + MSECS(RTLLIB_SOFTMAC_SCAN_TIME))); +#endif + + up(&ieee->scan_sem); + return; + +out: +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee)) + DOT11D_ScanComplete(ieee); +#endif +#ifdef _RTL8192_EXT_PATCH_ + ieee->current_network.channel = ieee->backup_channel; + ieee->set_chan(ieee->dev, ieee->current_network.channel); +#else + ieee->current_network.channel = last_channel; +#endif + +out1: + ieee->actscanning = false; + ieee->scan_watch_dog = 0; + ieee->scanning_continue = 0; + up(&ieee->scan_sem); +} + + + +void rtllib_beacons_start(struct rtllib_device *ieee) +{ + unsigned long flags; + spin_lock_irqsave(&ieee->beacon_lock,flags); + + ieee->beacon_txing = 1; + rtllib_send_beacon(ieee); + + spin_unlock_irqrestore(&ieee->beacon_lock,flags); +} + +void rtllib_beacons_stop(struct rtllib_device *ieee) +{ + unsigned long flags; + + spin_lock_irqsave(&ieee->beacon_lock,flags); + + ieee->beacon_txing = 0; + del_timer_sync(&ieee->beacon_timer); + + spin_unlock_irqrestore(&ieee->beacon_lock,flags); + +} + + +void rtllib_stop_send_beacons(struct rtllib_device *ieee) +{ + if(ieee->stop_send_beacons) + ieee->stop_send_beacons(ieee->dev); + if (ieee->softmac_features & IEEE_SOFTMAC_BEACONS) + rtllib_beacons_stop(ieee); +} + + +void rtllib_start_send_beacons(struct rtllib_device *ieee) +{ + if(ieee->start_send_beacons) + ieee->start_send_beacons(ieee->dev); + if(ieee->softmac_features & IEEE_SOFTMAC_BEACONS) + rtllib_beacons_start(ieee); +} + + +void rtllib_softmac_stop_scan(struct rtllib_device *ieee) +{ + + + down(&ieee->scan_sem); + ieee->scan_watch_dog = 0; + if (ieee->scanning_continue == 1){ + ieee->scanning_continue = 0; + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,40) +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,67) + cancel_delayed_work(&ieee->softmac_scan_wq); +#endif +#else + del_timer_sync(&ieee->scan_timer); +#endif + } + + up(&ieee->scan_sem); +} + +void rtllib_stop_scan(struct rtllib_device *ieee) +{ + if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ + rtllib_softmac_stop_scan(ieee); + }else{ + if(ieee->rtllib_stop_hw_scan) + ieee->rtllib_stop_hw_scan(ieee->dev); + } +} + +void rtllib_stop_scan_syncro(struct rtllib_device *ieee) +{ + if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ + ieee->sync_scan_hurryup = 1; + }else{ + if(ieee->rtllib_stop_hw_scan) + ieee->rtllib_stop_hw_scan(ieee->dev); + } +} + +bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan) +{ + if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ + if(sync_scan){ + return ieee->be_scan_inprogress; + }else{ + return (ieee->actscanning ||ieee->be_scan_inprogress); + } + }else{ + return test_bit(STATUS_SCANNING, &ieee->status); + } +} + +/* called with ieee->lock held */ +void rtllib_start_scan(struct rtllib_device *ieee) +{ + printk("===>%s()\n",__FUNCTION__); +#ifdef ENABLE_IPS + if(ieee->rtllib_ips_leave_wq != NULL) + ieee->rtllib_ips_leave_wq(ieee->dev); +#endif + + +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee) ) + { + if(IS_COUNTRY_IE_VALID(ieee)) + { + RESET_CIE_WATCHDOG(ieee); + } + } +#endif + if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ + if (ieee->scanning_continue == 0){ + ieee->actscanning = true; + ieee->scanning_continue = 1; +#ifdef _RTL8192_EXT_PATCH_ + ieee->backup_channel = ieee->current_network.channel; + printk("===>backup_channel is %d\n",ieee->backup_channel); +#endif + queue_delayed_work_rsl(ieee->wq, &ieee->softmac_scan_wq, 0); + } + }else{ + if(ieee->rtllib_start_hw_scan) + ieee->rtllib_start_hw_scan(ieee->dev); + } + +} + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40) +void rtllib_softmac_scan_cb(unsigned long _dev) +{ + unsigned long flags; + struct rtllib_device *ieee = (struct rtllib_device *)_dev; + + spin_lock_irqsave(&ieee->lock, flags); + rtllib_start_scan(ieee); + spin_unlock_irqrestore(&ieee->lock, flags); +} +#endif + +/* called with wx_sem held */ +void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh) +{ +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee) ) + { + if(IS_COUNTRY_IE_VALID(ieee)) + { + RESET_CIE_WATCHDOG(ieee); + } + } +#endif + ieee->sync_scan_hurryup = 0; + if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ + rtllib_softmac_scan_syncro(ieee, is_mesh); + }else{ + if(ieee->rtllib_start_hw_scan) + ieee->rtllib_start_hw_scan(ieee->dev); + } + +} + +#ifdef _RTL8192_EXT_PATCH_ +inline struct sk_buff *rtllib_authentication_req(struct rtllib_network *beacon, + struct rtllib_device *ieee, int challengelen,u8 * daddr) +#else +inline struct sk_buff *rtllib_authentication_req(struct rtllib_network *beacon, + struct rtllib_device *ieee, int challengelen) +#endif +{ + struct sk_buff *skb; + struct rtllib_authentication *auth; + int len = 0; +#ifdef _RTL8192_EXT_PATCH_ + bool is_mesh = false; + is_mesh = ieee->ext_patch_rtllib_is_mesh(ieee,daddr); +#endif +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->mesh_sec_type == 1) && (ieee->mesh_security_setting == 3) && is_mesh){ + skb = ieee->ext_patch_rtllib_send_ath_commit(ieee,daddr); + return skb; + } +#endif + len = sizeof(struct rtllib_authentication) + challengelen + ieee->tx_headroom + 4; +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr; + int alignment; + skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(len); +#endif + + if (!skb) return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + auth = (struct rtllib_authentication *) + skb_put(skb, sizeof(struct rtllib_authentication)); + + auth->header.frame_ctl = RTLLIB_STYPE_AUTH; + if (challengelen) auth->header.frame_ctl |= RTLLIB_FCTL_WEP; + + auth->header.duration_id = 0x013a; +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + memcpy(auth->header.addr1,daddr,ETH_ALEN); + else +#endif + memcpy(auth->header.addr1, beacon->bssid, ETH_ALEN); + memcpy(auth->header.addr2, ieee->dev->dev_addr, ETH_ALEN); +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + memcpy(auth->header.addr3, ieee->current_mesh_network.bssid, ETH_ALEN); + else + memcpy(auth->header.addr3, beacon->bssid, ETH_ALEN); +#else + memcpy(auth->header.addr3, beacon->bssid, ETH_ALEN); +#endif + if(ieee->auth_mode == 0) + auth->algorithm = WLAN_AUTH_OPEN; + else if(ieee->auth_mode == 1) + auth->algorithm = WLAN_AUTH_SHARED_KEY; + else if(ieee->auth_mode == 2) + auth->algorithm = WLAN_AUTH_OPEN; + auth->transaction = cpu_to_le16(ieee->associate_seq); + ieee->associate_seq++; + + auth->status = cpu_to_le16(WLAN_STATUS_SUCCESS); + + return skb; + +} + +void constructWMMIE(u8* wmmie, u8* wmm_len,u8 oui_subtype) +{ + u8 szQoSOUI[] ={221, 0, 0x00, 0x50, 0xf2, 0x02, 0, 1}; + + if (oui_subtype == OUI_SUBTYPE_QOS_CAPABI) + { + szQoSOUI[0] = 46; + szQoSOUI[1] = *wmm_len; + memcpy(wmmie,szQoSOUI,3); + *wmm_len = 3; + } + else + { + szQoSOUI[1] = *wmm_len + 6; + szQoSOUI[6] = oui_subtype; + memcpy(wmmie, szQoSOUI, 8); + *(wmmie+8) = 0; + *wmm_len = 9; + } +} + +static struct sk_buff* rtllib_probe_resp(struct rtllib_device *ieee, u8 *dest) +{ + u8 *tag; + int beacon_size; + struct rtllib_probe_response *beacon_buf; + struct sk_buff *skb = NULL; + int encrypt; + int atim_len,erp_len; + struct rtllib_crypt_data* crypt; + + char *ssid = ieee->current_network.ssid; + int ssid_len = ieee->current_network.ssid_len; + int rate_len = ieee->current_network.rates_len+2; + int rate_ex_len = ieee->current_network.rates_ex_len; + int wpa_ie_len = ieee->wpa_ie_len; + u8 erpinfo_content = 0; + + u8* tmp_ht_cap_buf=NULL; + u8 tmp_ht_cap_len=0; + u8* tmp_ht_info_buf=NULL; + u8 tmp_ht_info_len=0; + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + u8* tmp_generic_ie_buf=NULL; + u8 tmp_generic_ie_len=0; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + u8 wmmie[9] = {0}; + u8 wmm_len = 0; +#endif +#ifdef RTL8192S_WAPI_SUPPORT + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + u8 pWapiIELen = 0; +#endif + if(rate_ex_len > 0) rate_ex_len+=2; + + if(ieee->current_network.capability & WLAN_CAPABILITY_IBSS) + atim_len = 4; + else + atim_len = 0; + +#if 0 + if(rtllib_is_54g(&ieee->current_network)) + erp_len = 3; + else + erp_len = 0; +#else + if((ieee->current_network.mode == IEEE_G) + ||( ieee->current_network.mode == IEEE_N_24G && ieee->pHTInfo->bCurSuppCCK)) { + erp_len = 3; + erpinfo_content = 0; + if(ieee->current_network.buseprotection) + erpinfo_content |= ERP_UseProtection; + } + else + erp_len = 0; +#endif + +#ifdef _RTL8192_EXT_PATCH_ + crypt = ieee->sta_crypt[ieee->tx_keyidx]; +#else + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + encrypt = ieee->host_encrypt && crypt && crypt->ops && + ((0 == strcmp(crypt->ops->name, "WEP") || wpa_ie_len)); +#if 1 + if(ieee->pHTInfo->bCurrentHTSupport){ + tmp_ht_cap_buf =(u8*) &(ieee->pHTInfo->SelfHTCap); + tmp_ht_cap_len = sizeof(ieee->pHTInfo->SelfHTCap); + tmp_ht_info_buf =(u8*) &(ieee->pHTInfo->SelfHTInfo); + tmp_ht_info_len = sizeof(ieee->pHTInfo->SelfHTInfo); +#ifdef _RTL8192_EXT_PATCH_ + HTConstructCapabilityElement(ieee, tmp_ht_cap_buf, &tmp_ht_cap_len,encrypt, 1); +#else + HTConstructCapabilityElement(ieee, tmp_ht_cap_buf, &tmp_ht_cap_len,encrypt); +#endif + HTConstructInfoElement(ieee,tmp_ht_info_buf,&tmp_ht_info_len, encrypt); + + + if(pHTInfo->bRegRT2RTAggregation) + { + tmp_generic_ie_buf = ieee->pHTInfo->szRT2RTAggBuffer; + tmp_generic_ie_len = sizeof(ieee->pHTInfo->szRT2RTAggBuffer); + HTConstructRT2RTAggElement(ieee, tmp_generic_ie_buf, &tmp_generic_ie_len); + } + } +#endif + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC){ + if(ieee->current_network.qos_data.supported){ + wmm_len = 1; + constructWMMIE(wmmie,&wmm_len,OUI_SUBTYPE_WMM_INFO); + }else{ + wmm_len = 0; + } + } +#endif +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->WapiSupport && pWapiInfo->bWapiEnable) + { + WapiSetIE(ieee); + pWapiIELen = pWapiInfo->wapiIELength; + } +#endif + beacon_size = sizeof(struct rtllib_probe_response)+2+ + ssid_len + +3 + +rate_len + +rate_ex_len + +atim_len + +erp_len + +wpa_ie_len +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + +tmp_ht_cap_len + +tmp_ht_info_len + +tmp_generic_ie_len + +wmm_len +#endif +#ifdef RTL8192S_WAPI_SUPPORT + +pWapiIELen+2 +#endif + +ieee->tx_headroom; +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(beacon_size + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(beacon_size); +#endif + if (!skb) + return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + beacon_buf = (struct rtllib_probe_response*) skb_put(skb, (beacon_size - ieee->tx_headroom)); + memcpy (beacon_buf->header.addr1, dest,ETH_ALEN); + memcpy (beacon_buf->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memcpy (beacon_buf->header.addr3, ieee->current_network.bssid, ETH_ALEN); + + beacon_buf->header.duration_id = 0; + beacon_buf->beacon_interval = + cpu_to_le16(ieee->current_network.beacon_interval); + beacon_buf->capability = + cpu_to_le16(ieee->current_network.capability & WLAN_CAPABILITY_IBSS); + beacon_buf->capability |= + cpu_to_le16(ieee->current_network.capability & WLAN_CAPABILITY_SHORT_PREAMBLE); + + if(ieee->short_slot && (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)) + cpu_to_le16((beacon_buf->capability |= WLAN_CAPABILITY_SHORT_SLOT_TIME)); + +#ifndef _RTL8192_EXT_PATCH_ + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + if (encrypt) + beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); + + + beacon_buf->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_RESP); + beacon_buf->info_element[0].id = MFIE_TYPE_SSID; + beacon_buf->info_element[0].len = ssid_len; + + tag = (u8*) beacon_buf->info_element[0].data; + + memcpy(tag, ssid, ssid_len); + + tag += ssid_len; + + *(tag++) = MFIE_TYPE_RATES; + *(tag++) = rate_len-2; + memcpy(tag,ieee->current_network.rates,rate_len-2); + tag+=rate_len-2; + + *(tag++) = MFIE_TYPE_DS_SET; + *(tag++) = 1; + *(tag++) = ieee->current_network.channel; + + if(atim_len){ + u16 val16; + *(tag++) = MFIE_TYPE_IBSS_SET; + *(tag++) = 2; + val16 = cpu_to_le16(ieee->current_network.atim_window); + memcpy((u8 *)tag, (u8 *)&val16, 2); + tag+=2; + } + + if(erp_len){ + *(tag++) = MFIE_TYPE_ERP; + *(tag++) = 1; + *(tag++) = erpinfo_content; + } +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(tmp_ht_cap_len){ + *(tag++) = MFIE_TYPE_HT_CAP; + *(tag++) = tmp_ht_cap_len - 2; + memcpy(tag, tmp_ht_cap_buf, tmp_ht_cap_len - 2); + tag += tmp_ht_cap_len - 2; + } +#endif + if(rate_ex_len){ + *(tag++) = MFIE_TYPE_RATES_EX; + *(tag++) = rate_ex_len-2; + memcpy(tag,ieee->current_network.rates_ex,rate_ex_len-2); + tag+=rate_ex_len-2; + } + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(tmp_ht_info_len){ + *(tag++) = MFIE_TYPE_HT_INFO; + *(tag++) = tmp_ht_info_len - 2; + memcpy(tag, tmp_ht_info_buf, tmp_ht_info_len -2); + tag += tmp_ht_info_len - 2; + } +#endif + + if (wpa_ie_len) + { + if (ieee->iw_mode == IW_MODE_ADHOC) + { + memcpy(&ieee->wpa_ie[14], &ieee->wpa_ie[8], 4); + } + memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len); + tag += ieee->wpa_ie_len; + } + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(tmp_generic_ie_len) + { + (*tag++) = 0xdd; + (*tag++) = tmp_generic_ie_len - 2; + memcpy(tag,tmp_generic_ie_buf,tmp_generic_ie_len -2); + tag += tmp_generic_ie_len -2; + + } +#endif + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(wmm_len) { + memcpy(tag,wmmie,wmm_len); + tag += wmm_len; + } +#endif +#ifdef RTL8192S_WAPI_SUPPORT + if(pWapiIELen) + { + *(tag++) = MFIE_TYPE_WAPI; + *(tag++) = pWapiIELen; + memcpy(tag, pWapiInfo->wapiIE, pWapiIELen); + tag += pWapiIELen; + + pWapiInfo->sendbeaconWapiIE[0] = MFIE_TYPE_WAPI; + pWapiInfo->sendbeaconWapiIE[1] = pWapiIELen; + pWapiInfo->sendbeaconWapiIELength = pWapiIELen+2; + memcpy(pWapiInfo->sendbeaconWapiIE+2, pWapiInfo->wapiIE, pWapiIELen); + } +#endif + return skb; +} + +#ifdef RTL8192S_WAPI_SUPPORT +void ConstructWapiIEForInit(struct rtllib_device* ieee) +{ + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + u8 pWapiIELen = 0; + + if(ieee->WapiSupport && pWapiInfo->bWapiEnable){ + WapiSetIE(ieee); + pWapiIELen = pWapiInfo->wapiIELength; + if(pWapiIELen){ + pWapiInfo->sendbeaconWapiIE[0] = MFIE_TYPE_WAPI; + pWapiInfo->sendbeaconWapiIE[1] = pWapiIELen; + pWapiInfo->sendbeaconWapiIELength = pWapiIELen+2; + memcpy(pWapiInfo->sendbeaconWapiIE+2, pWapiInfo->wapiIE, pWapiIELen); + } + } +} +#endif + +#ifdef _RTL8192_EXT_PATCH_ +#ifdef COMPATIBLE_WITH_RALINK_MESH +extern void ConstructRalinkHostNameIE(struct rtllib_device* ieee, + u8* p_hostname_ie, u8* hostname_ie_len); +#else +extern void ConstructHostNameIE(struct rtllib_device* ieee, + u8* hostname_ie, u8* hostname_ie_len); +#endif +struct sk_buff* rtllib_ext_probe_resp_by_net(struct rtllib_device *ieee, u8 *dest, struct rtllib_network *net) +{ + u8 *tag; + int beacon_size; + struct rtllib_probe_response *beacon_buf; + struct sk_buff *skb; + int encrypt; + int atim_len = 0,erp_len = 0; + struct rtllib_crypt_data* crypt; + u8 broadcast_addr[] = {0xff,0xff,0xff,0xff,0xff,0xff}; + + char *ssid = net->ssid; + int ssid_len = net->ssid_len; + + int rate_len = ieee->current_mesh_network.rates_len+2; + int rate_ex_len = ieee->current_mesh_network.rates_ex_len; + int wpa_ie_len = 0; + u8 erpinfo_content = 0; +#if 0 + u8* tmp_ht_cap_buf=NULL; + u8 tmp_ht_cap_len=0; + u8* tmp_ht_info_buf=NULL; + u8 tmp_ht_info_len=0; + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + u8* tmp_generic_ie_buf=NULL; + u8 tmp_generic_ie_len=0; +#endif + u8 wmmie[9] = {0}; + u8 wmm_len = 0; + u8 hostname_ie_buf[MAX_HOST_NAME_LENGTH+4]; + u8 hostname_ie_len=0; + if(rate_ex_len > 0) rate_ex_len+=2; + if( ieee->meshScanMode&4){ + ieee->current_mesh_network.channel = ieee->ext_patch_rtllib_ext_stop_scan_wq_set_channel(ieee); + if(ieee->current_mesh_network.channel == 0) + ieee->current_mesh_network.channel = 1; + } + if( ieee->meshScanMode&6) + { + queue_work_rsl(ieee->wq, &ieee->ext_stop_scan_wq); + } + if(ieee->current_mesh_network.capability & WLAN_CAPABILITY_IBSS) + atim_len = 4; + else + atim_len = 0; + + + if((ieee->current_mesh_network.mode == IEEE_G) + ||( ieee->mode == IEEE_N_24G && ieee->pHTInfo->bCurSuppCCK)){ + erp_len = 3; + erpinfo_content = 0; + if(ieee->bUseProtection) + erpinfo_content |= ERP_UseProtection; + } + else + erp_len = 0; + + if ((IW_MODE_MESH==ieee->iw_mode)) + { + wpa_ie_len = ieee->wpa_ie_len; + } + + crypt = ieee->cryptlist[0]->crypt[ieee->mesh_txkeyidx]; + + encrypt = ieee->host_encrypt && crypt && crypt->ops && + ((0 == strcmp(crypt->ops->name, "WEP")||wpa_ie_len)); +#if 0 + if(ieee->pHTInfo->bCurrentHTSupport){ + tmp_ht_cap_buf =(u8*) &(ieee->pHTInfo->SelfHTCap); + tmp_ht_cap_len = sizeof(ieee->pHTInfo->SelfHTCap); + tmp_ht_info_buf =(u8*) &(ieee->pHTInfo->SelfHTInfo); + tmp_ht_info_len = sizeof(ieee->pHTInfo->SelfHTInfo); + HTConstructCapabilityElement(ieee, tmp_ht_cap_buf, &tmp_ht_cap_len,encrypt, 1); + HTConstructInfoElement(ieee,tmp_ht_info_buf,&tmp_ht_info_len, encrypt); + + + if(pHTInfo->bRegRT2RTAggregation) + { + tmp_generic_ie_buf = ieee->pHTInfo->szRT2RTAggBuffer; + tmp_generic_ie_len = sizeof(ieee->pHTInfo->szRT2RTAggBuffer); + HTConstructRT2RTAggElement(ieee, tmp_generic_ie_buf, &tmp_generic_ie_len); + } + } +#endif + { +#ifdef COMPATIBLE_WITH_RALINK_MESH + ConstructRalinkHostNameIE(ieee, hostname_ie_buf, &hostname_ie_len); +#else + ConstructHostNameIE(ieee, hostname_ie_buf, &hostname_ie_len); +#endif + } + if((ieee->iw_mode == IW_MODE_MESH) && (ieee->current_mesh_network.qos_data.supported == 1)){ + wmm_len = 1; + constructWMMIE(wmmie,&wmm_len,OUI_SUBTYPE_WMM_INFO); + } + beacon_size = sizeof(struct rtllib_probe_response)+2+ + ssid_len + +3 + +rate_len + +rate_ex_len + +atim_len + +erp_len + +wpa_ie_len +#if 0 + +tmp_ht_cap_len + +tmp_ht_info_len + +tmp_generic_ie_len +#endif + +hostname_ie_len + +wmm_len + +ieee->tx_headroom; + skb = dev_alloc_skb(beacon_size+300); + + if (!skb) + return NULL; + skb_reserve(skb, ieee->tx_headroom); + beacon_buf = (struct rtllib_probe_response*) skb_put(skb, (beacon_size - ieee->tx_headroom)); + + memcpy (beacon_buf->header.addr1, dest,ETH_ALEN); + memcpy (beacon_buf->header.addr2, ieee->meshdev->dev_addr, ETH_ALEN); + memcpy (beacon_buf->header.addr3, ieee->current_mesh_network.bssid, ETH_ALEN); + + beacon_buf->header.duration_id = 0; + + beacon_buf->beacon_interval = + cpu_to_le16(ieee->current_mesh_network.beacon_interval); + beacon_buf->capability = + cpu_to_le16(ieee->current_mesh_network.capability & WLAN_CAPABILITY_IBSS); + + if(ieee->short_slot && (ieee->current_mesh_network.capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)) + cpu_to_le16((beacon_buf->capability |= WLAN_CAPABILITY_SHORT_SLOT_TIME)); + + if (encrypt) + beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); + + + beacon_buf->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_RESP); + + beacon_buf->info_element[0].id = MFIE_TYPE_SSID; + beacon_buf->info_element[0].len = ssid_len; + + tag = (u8*) beacon_buf->info_element[0].data; + + if(memcmp(dest, broadcast_addr, ETH_ALEN )) + memcpy(tag, ssid, ssid_len); + else + ssid_len=0; + + tag += ssid_len; + + + *(tag++) = MFIE_TYPE_RATES; + *(tag++) = rate_len-2; + memcpy(tag,ieee->current_mesh_network.rates,rate_len-2); + tag+=rate_len-2; + + *(tag++) = MFIE_TYPE_DS_SET; + *(tag++) = 1; + *(tag++) = ieee->current_mesh_network.channel; + + + if(atim_len){ + u16 val16; + *(tag++) = MFIE_TYPE_IBSS_SET; + *(tag++) = 2; + val16 = cpu_to_le16(ieee->current_mesh_network.atim_window); + memcpy((u8 *)tag, (u8 *)&val16, 2); + tag+=2; + } + + if(erp_len){ + *(tag++) = MFIE_TYPE_ERP; + *(tag++) = 1; + *(tag++) = erpinfo_content; + } +#if 0 + if(tmp_ht_cap_len){ + *(tag++) = MFIE_TYPE_HT_CAP; + *(tag++) = tmp_ht_cap_len - 2; + memcpy(tag, tmp_ht_cap_buf, tmp_ht_cap_len - 2); + tag += tmp_ht_cap_len - 2; + } +#endif + + if(rate_ex_len){ + *(tag++) = MFIE_TYPE_RATES_EX; + *(tag++) = rate_ex_len-2; + memcpy(tag,ieee->current_mesh_network.rates_ex,rate_ex_len-2); + tag+=rate_ex_len-2; + } + +#if 0 + if(tmp_ht_info_len){ + *(tag++) = MFIE_TYPE_HT_INFO; + *(tag++) = tmp_ht_info_len - 2; + memcpy(tag, tmp_ht_info_buf, tmp_ht_info_len -2); + tag += tmp_ht_info_len - 2; + } +#endif + if (wpa_ie_len) { + memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len); + tag+=ieee->wpa_ie_len; + } + +#if 0 + if(tmp_generic_ie_len) + { + (*tag++) = 0xdd; + (*tag++) = tmp_generic_ie_len - 2; + memcpy(tag,tmp_generic_ie_buf,tmp_generic_ie_len -2); + tag += tmp_generic_ie_len -2; + + } +#endif + if(hostname_ie_len) + { + (*tag++) = 0xdd; + (*tag++) = hostname_ie_len - 2; + memcpy(tag, hostname_ie_buf, hostname_ie_len - 2); + tag += hostname_ie_len -2; + } + + if(wmm_len) + { + memcpy(tag,wmmie,wmm_len); + } + + skb->dev = ieee->dev; + return skb; +} +#endif + +struct sk_buff* rtllib_assoc_resp(struct rtllib_device *ieee, u8 *dest) +{ + struct sk_buff *skb; + u8* tag; + + struct rtllib_crypt_data* crypt; + struct rtllib_assoc_response_frame *assoc; + short encrypt; + + unsigned int rate_len = rtllib_MFIE_rate_len(ieee); + int len = sizeof(struct rtllib_assoc_response_frame) + rate_len + ieee->tx_headroom; + +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(len); +#endif + + if (!skb) + return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + assoc = (struct rtllib_assoc_response_frame *) + skb_put(skb,sizeof(struct rtllib_assoc_response_frame)); + + assoc->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_ASSOC_RESP); + memcpy(assoc->header.addr1, dest,ETH_ALEN); + memcpy(assoc->header.addr3, ieee->dev->dev_addr, ETH_ALEN); + memcpy(assoc->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + assoc->capability = cpu_to_le16(ieee->iw_mode == IW_MODE_MASTER ? + WLAN_CAPABILITY_ESS : WLAN_CAPABILITY_IBSS); + + + if(ieee->short_slot) + assoc->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT_TIME); + + if (ieee->host_encrypt){ +#ifdef _RTL8192_EXT_PATCH_ + crypt = ieee->cryptlist[0]->crypt[ieee->tx_keyidx]; +#else + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + + } + else crypt = NULL; + + encrypt = ( crypt && crypt->ops); + + if (encrypt) + assoc->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); + + assoc->status = 0; + assoc->aid = cpu_to_le16(ieee->assoc_id); + if (ieee->assoc_id == 0x2007) + ieee->assoc_id=0; + else + ieee->assoc_id++; + + tag = (u8*) skb_put(skb, rate_len); + rtllib_MFIE_Brate(ieee, &tag); + rtllib_MFIE_Grate(ieee, &tag); + + return skb; +} + +struct sk_buff* rtllib_auth_resp(struct rtllib_device *ieee,int status, u8 *dest) +{ + struct sk_buff *skb = NULL; + struct rtllib_authentication *auth; + int len = ieee->tx_headroom + sizeof(struct rtllib_authentication)+1; +#ifdef _RTL8192_EXT_PATCH_ + bool is_mesh = ieee->ext_patch_rtllib_is_mesh(ieee,dest); + if(is_mesh && (ieee->mesh_sec_type == 1) && (ieee->mesh_security_setting == 3)) + skb = ieee->ext_patch_rtllib_send_ath_confirm(ieee,dest); + return skb; +#endif +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(len); +#endif + if (!skb) + return NULL; + + skb->len = sizeof(struct rtllib_authentication); + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + auth = (struct rtllib_authentication *) + skb_put(skb, sizeof(struct rtllib_authentication)); + + auth->status = cpu_to_le16(status); + auth->transaction = cpu_to_le16(2); + auth->algorithm = cpu_to_le16(WLAN_AUTH_OPEN); + +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + memset(auth->header.addr3, 0, ETH_ALEN); + else + memcpy(auth->header.addr3, ieee->dev->dev_addr, ETH_ALEN); +#else + memcpy(auth->header.addr3, ieee->dev->dev_addr, ETH_ALEN); +#endif + memcpy(auth->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memcpy(auth->header.addr1, dest, ETH_ALEN); + auth->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_AUTH); + return skb; + + +} + +struct sk_buff* rtllib_null_func(struct rtllib_device *ieee,short pwr) +{ + struct sk_buff *skb; + struct rtllib_hdr_3addr* hdr; + +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(sizeof(struct rtllib_hdr_3addr) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(sizeof(struct rtllib_hdr_3addr)+ieee->tx_headroom); +#endif + if (!skb) + return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + skb_reserve(skb, ieee->tx_headroom); + + hdr = (struct rtllib_hdr_3addr*)skb_put(skb,sizeof(struct rtllib_hdr_3addr)); + + memcpy(hdr->addr1, ieee->current_network.bssid, ETH_ALEN); + memcpy(hdr->addr2, ieee->dev->dev_addr, ETH_ALEN); + memcpy(hdr->addr3, ieee->current_network.bssid, ETH_ALEN); + + hdr->frame_ctl = cpu_to_le16(RTLLIB_FTYPE_DATA | + RTLLIB_STYPE_NULLFUNC | RTLLIB_FCTL_TODS | + (pwr ? RTLLIB_FCTL_PM:0)); + + return skb; + + +} + +struct sk_buff* rtllib_pspoll_func(struct rtllib_device *ieee) +{ + struct sk_buff *skb; + struct rtllib_pspoll_hdr* hdr; + +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(sizeof(struct rtllib_pspoll_hdr) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(sizeof(struct rtllib_pspoll_hdr)+ieee->tx_headroom); +#endif + if (!skb) + return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + skb_reserve(skb, ieee->tx_headroom); + + hdr = (struct rtllib_pspoll_hdr*)skb_put(skb,sizeof(struct rtllib_pspoll_hdr)); + + memcpy(hdr->bssid, ieee->current_network.bssid, ETH_ALEN); + memcpy(hdr->ta, ieee->dev->dev_addr, ETH_ALEN); + + hdr->aid = cpu_to_le16(ieee->assoc_id | 0xc000); + hdr->frame_ctl = cpu_to_le16(RTLLIB_FTYPE_CTL |RTLLIB_STYPE_PSPOLL | RTLLIB_FCTL_PM); + + return skb; + +} + +void rtllib_resp_to_assoc_rq(struct rtllib_device *ieee, u8* dest) +{ + struct sk_buff *buf = rtllib_assoc_resp(ieee, dest); + + if (buf) + softmac_mgmt_xmit(buf, ieee); +} + + +void rtllib_resp_to_auth(struct rtllib_device *ieee, int s, u8* dest) +{ + struct sk_buff *buf = rtllib_auth_resp(ieee, s, dest); + + if (buf) + softmac_mgmt_xmit(buf, ieee); +} + + +void rtllib_resp_to_probe(struct rtllib_device *ieee, u8 *dest) +{ + + + struct sk_buff *buf = rtllib_probe_resp(ieee, dest); + if (buf) + softmac_mgmt_xmit(buf, ieee); +} + + +inline int SecIsInPMKIDList(struct rtllib_device *ieee, u8 *bssid) +{ + int i = 0; + + do + { + if ((ieee->PMKIDList[i].bUsed) && (memcmp(ieee->PMKIDList[i].Bssid, bssid, ETH_ALEN) == 0)) + { + break; + } + else + { + i++; + } + } while (i < NUM_PMKID_CACHE); + + if (i == NUM_PMKID_CACHE) + { + i = -1; + } + else + { + } + + return (i); + +} + + +inline struct sk_buff *rtllib_association_req(struct rtllib_network *beacon,struct rtllib_device *ieee) +{ + struct sk_buff *skb; + + struct rtllib_assoc_request_frame *hdr; + u8 *tag, *ies; + int i; + u8* ht_cap_buf = NULL; + u8 ht_cap_len=0; + u8* realtek_ie_buf=NULL; + u8 realtek_ie_len=0; + int wpa_ie_len= ieee->wpa_ie_len; + int wps_ie_len = ieee->wps_ie_len; + unsigned int ckip_ie_len=0; + unsigned int ccxrm_ie_len=0; + unsigned int cxvernum_ie_len=0; + struct rtllib_crypt_data* crypt; + int encrypt; + int PMKCacheIdx; + + unsigned int rate_len = (beacon->rates_len?(beacon->rates_len+2):0) + (beacon->rates_ex_len?(beacon->rates_ex_len)+2:0); + + unsigned int wmm_info_len = beacon->qos_data.supported?9:0; +#ifdef THOMAS_TURBO + unsigned int turbo_info_len = beacon->Turbo_Enable?9:0; +#endif + + int len = 0; +#ifdef RTL8192S_WAPI_SUPPORT + PRT_WAPI_BKID pWapiBKID; + u16 bkidNum; + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + u8 WapiIE[256]; + u8 WapiIELength = 0; +#endif +#ifdef _RTL8192_EXT_PATCH_ + crypt = ieee->sta_crypt[ieee->tx_keyidx]; +#else + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + if(crypt != NULL) { + encrypt = ieee->host_encrypt && crypt && crypt->ops && ((0 == strcmp(crypt->ops->name,"WEP") || wpa_ie_len)); + } else { + encrypt = 0; + } + +#ifdef ENABLE_TKIP11N + if (ieee->bForcedBgMode == true) +#else + if ((ieee->rtllib_ap_sec_type && (ieee->rtllib_ap_sec_type(ieee)&SEC_ALG_TKIP)) ||(ieee->bForcedBgMode == true)) +#endif + { + ieee->pHTInfo->bEnableHT = 0; + ieee->mode = WIRELESS_MODE_G; + } + + if(ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT) + { + ht_cap_buf = (u8*)&(ieee->pHTInfo->SelfHTCap); + ht_cap_len = sizeof(ieee->pHTInfo->SelfHTCap); +#ifdef _RTL8192_EXT_PATCH_ + HTConstructCapabilityElement(ieee, ht_cap_buf, &ht_cap_len, encrypt, 0); +#else + HTConstructCapabilityElement(ieee, ht_cap_buf, &ht_cap_len, encrypt); +#endif + if(ieee->pHTInfo->bCurrentRT2RTAggregation) + { + realtek_ie_buf = ieee->pHTInfo->szRT2RTAggBuffer; + realtek_ie_len = sizeof( ieee->pHTInfo->szRT2RTAggBuffer); + HTConstructRT2RTAggElement(ieee, realtek_ie_buf, &realtek_ie_len); + + } + } + + if(beacon->bCkipSupported) + { + ckip_ie_len = 30+2; + } + if(beacon->bCcxRmEnable) + { + ccxrm_ie_len = 6+2; + } + if( beacon->BssCcxVerNumber >= 2 ) + { + cxvernum_ie_len = 5+2; + } + + PMKCacheIdx = SecIsInPMKIDList(ieee, ieee->current_network.bssid); + if (PMKCacheIdx >= 0) + { + wpa_ie_len += 18; + printk("[PMK cache]: WPA2 IE length: %x\n", wpa_ie_len); + } +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->WapiSupport && pWapiInfo->bWapiEnable) + { + wpa_ie_len = 0; + + WAPI_TRACE(WAPI_API, "%s(): Set WAPI IE in assoc req!!\n",__FUNCTION__); + WapiSetIE(ieee); + WapiIELength = pWapiInfo->wapiIELength; + memcpy(WapiIE, pWapiInfo->wapiIE ,pWapiInfo->wapiIELength); + + bkidNum = 0; + WapiIELength +=2; + if(!list_empty(&(pWapiInfo->wapiBKIDStoreList))){ + list_for_each_entry(pWapiBKID, &pWapiInfo->wapiBKIDStoreList, list) { + bkidNum ++; + memcpy(WapiIE+WapiIELength, pWapiBKID->bkid,16); + WapiIELength += 16; + } + + } + memcpy(WapiIE+pWapiInfo->wapiIELength,&bkidNum,2); + } +#endif + + len = sizeof(struct rtllib_assoc_request_frame)+ 2 + + beacon->ssid_len + + rate_len + + wpa_ie_len + + wps_ie_len +#ifdef RTL8192S_WAPI_SUPPORT + + WapiIELength + 2 +#endif + + wmm_info_len +#ifdef THOMAS_TURBO + + turbo_info_len +#endif + + ht_cap_len + + realtek_ie_len + + ckip_ie_len + + ccxrm_ie_len + + cxvernum_ie_len + + ieee->tx_headroom; + +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(len + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(len); +#endif + + if (!skb) + return NULL; + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + hdr = (struct rtllib_assoc_request_frame *) + skb_put(skb, sizeof(struct rtllib_assoc_request_frame)+2); + + + hdr->header.frame_ctl = RTLLIB_STYPE_ASSOC_REQ; + hdr->header.duration_id= 37; + memcpy(hdr->header.addr1, beacon->bssid, ETH_ALEN); + memcpy(hdr->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memcpy(hdr->header.addr3, beacon->bssid, ETH_ALEN); + + memcpy(ieee->ap_mac_addr, beacon->bssid, ETH_ALEN); + + hdr->capability = cpu_to_le16(WLAN_CAPABILITY_ESS); + if (beacon->capability & WLAN_CAPABILITY_PRIVACY ) + hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); + + if (beacon->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) + hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE); + + if(ieee->short_slot && (beacon->capability&WLAN_CAPABILITY_SHORT_SLOT_TIME)) + hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT_TIME); + + + hdr->listen_interval = beacon->listen_interval; + + hdr->info_element[0].id = MFIE_TYPE_SSID; + + hdr->info_element[0].len = beacon->ssid_len; + tag = skb_put(skb, beacon->ssid_len); + memcpy(tag, beacon->ssid, beacon->ssid_len); + + tag = skb_put(skb, rate_len); + + if(beacon->rates_len){ + *tag++ = MFIE_TYPE_RATES; + *tag++ = beacon->rates_len; + for(i=0;irates_len;i++){ + *tag++ = beacon->rates[i]; + } + } + + if(beacon->rates_ex_len){ + *tag++ = MFIE_TYPE_RATES_EX; + *tag++ = beacon->rates_ex_len; + for(i=0;irates_ex_len;i++){ + *tag++ = beacon->rates_ex[i]; + } + } + + if( beacon->bCkipSupported ) + { + static u8 AironetIeOui[] = {0x00, 0x01, 0x66}; + u8 CcxAironetBuf[30]; + OCTET_STRING osCcxAironetIE; + + memset(CcxAironetBuf, 0,30); + osCcxAironetIE.Octet = CcxAironetBuf; + osCcxAironetIE.Length = sizeof(CcxAironetBuf); + memcpy(osCcxAironetIE.Octet, AironetIeOui, sizeof(AironetIeOui)); + + osCcxAironetIE.Octet[IE_CISCO_FLAG_POSITION] |= (SUPPORT_CKIP_PK|SUPPORT_CKIP_MIC) ; + tag = skb_put(skb, ckip_ie_len); + *tag++ = MFIE_TYPE_AIRONET; + *tag++ = osCcxAironetIE.Length; + memcpy(tag,osCcxAironetIE.Octet,osCcxAironetIE.Length); + tag += osCcxAironetIE.Length; + } + + if(beacon->bCcxRmEnable) + { + static u8 CcxRmCapBuf[] = {0x00, 0x40, 0x96, 0x01, 0x01, 0x00}; + OCTET_STRING osCcxRmCap; + + osCcxRmCap.Octet = CcxRmCapBuf; + osCcxRmCap.Length = sizeof(CcxRmCapBuf); + tag = skb_put(skb,ccxrm_ie_len); + *tag++ = MFIE_TYPE_GENERIC; + *tag++ = osCcxRmCap.Length; + memcpy(tag,osCcxRmCap.Octet,osCcxRmCap.Length); + tag += osCcxRmCap.Length; + } + + if( beacon->BssCcxVerNumber >= 2 ) + { + u8 CcxVerNumBuf[] = {0x00, 0x40, 0x96, 0x03, 0x00}; + OCTET_STRING osCcxVerNum; + CcxVerNumBuf[4] = beacon->BssCcxVerNumber; + osCcxVerNum.Octet = CcxVerNumBuf; + osCcxVerNum.Length = sizeof(CcxVerNumBuf); + tag = skb_put(skb,cxvernum_ie_len); + *tag++ = MFIE_TYPE_GENERIC; + *tag++ = osCcxVerNum.Length; + memcpy(tag,osCcxVerNum.Octet,osCcxVerNum.Length); + tag += osCcxVerNum.Length; + } + if(ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT){ + if(ieee->pHTInfo->ePeerHTSpecVer != HT_SPEC_VER_EWC) + { + tag = skb_put(skb, ht_cap_len); + *tag++ = MFIE_TYPE_HT_CAP; + *tag++ = ht_cap_len - 2; + memcpy(tag, ht_cap_buf,ht_cap_len -2); + tag += ht_cap_len -2; + } + } + + + if (wpa_ie_len){ + tag = skb_put(skb, ieee->wpa_ie_len); + memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len); + + if (PMKCacheIdx >= 0) + { + tag = skb_put(skb, 18); + *tag = 1; + *(tag + 1) = 0; + memcpy((tag + 2), &ieee->PMKIDList[PMKCacheIdx].PMKID, 16); + } + } +#ifdef RTL8192S_WAPI_SUPPORT + if(WapiIELength){ + tag = skb_put(skb, WapiIELength+2); + *tag = MFIE_TYPE_WAPI; + *(tag+1) = WapiIELength; + memcpy((tag+2), WapiIE, WapiIELength); + + pWapiInfo->assoReqWapiIELength = WapiIELength+2; + pWapiInfo->assoReqWapiIE[0] = MFIE_TYPE_WAPI; + pWapiInfo->assoReqWapiIE[1] = WapiIELength; + memcpy(pWapiInfo->assoReqWapiIE+2,WapiIE,WapiIELength); + } +#endif + + if(wmm_info_len) { + tag = skb_put(skb,wmm_info_len); + rtllib_WMM_Info(ieee, &tag); + } + + if(wps_ie_len && ieee->wps_ie) + { + tag = skb_put(skb, wps_ie_len); + memcpy(tag, ieee->wps_ie, wps_ie_len); + } + +#ifdef THOMAS_TURBO + tag = skb_put(skb,turbo_info_len); + if(turbo_info_len) { + rtllib_TURBO_Info(ieee, &tag); + } +#endif + + if(ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT){ + if(ieee->pHTInfo->ePeerHTSpecVer == HT_SPEC_VER_EWC) + { + tag = skb_put(skb, ht_cap_len); + *tag++ = MFIE_TYPE_GENERIC; + *tag++ = ht_cap_len - 2; + memcpy(tag, ht_cap_buf,ht_cap_len - 2); + tag += ht_cap_len -2; + } + + if(ieee->pHTInfo->bCurrentRT2RTAggregation){ + tag = skb_put(skb, realtek_ie_len); + *tag++ = MFIE_TYPE_GENERIC; + *tag++ = realtek_ie_len - 2; + memcpy(tag, realtek_ie_buf,realtek_ie_len -2 ); + } + } + + if(ieee->assocreq_ies){ + kfree(ieee->assocreq_ies); + ieee->assocreq_ies = NULL; + } + ies = &(hdr->info_element[0].id); + ieee->assocreq_ies_len = (skb->data + skb->len) - ies; + ieee->assocreq_ies = kmalloc(ieee->assocreq_ies_len, GFP_ATOMIC); + if (ieee->assocreq_ies) + memcpy(ieee->assocreq_ies, ies, ieee->assocreq_ies_len); + else{ + printk("%s()Warning: can't alloc memory for assocreq_ies\n", __func__); + ieee->assocreq_ies_len = 0; + } + + return skb; +} + +void rtllib_associate_abort(struct rtllib_device *ieee) +{ + + unsigned long flags; + spin_lock_irqsave(&ieee->lock, flags); + + ieee->associate_seq++; + + /* don't scan, and avoid to have the RX path possibily + * try again to associate. Even do not react to AUTH or + * ASSOC response. Just wait for the retry wq to be scheduled. + * Here we will check if there are good nets to associate + * with, so we retry or just get back to NO_LINK and scanning + */ + if (ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATING){ + RTLLIB_DEBUG_MGMT("Authentication failed\n"); + ieee->softmac_stats.no_auth_rs++; + }else{ + RTLLIB_DEBUG_MGMT("Association failed\n"); + ieee->softmac_stats.no_ass_rs++; + } + + ieee->state = RTLLIB_ASSOCIATING_RETRY; + + queue_delayed_work_rsl(ieee->wq, &ieee->associate_retry_wq, \ + RTLLIB_SOFTMAC_ASSOC_RETRY_TIME); + + spin_unlock_irqrestore(&ieee->lock, flags); +} + +void rtllib_associate_abort_cb(unsigned long dev) +{ + rtllib_associate_abort((struct rtllib_device *) dev); +} + + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_associate_step1(struct rtllib_device *ieee,u8 * daddr) +#else +void rtllib_associate_step1(struct rtllib_device *ieee) +#endif +{ + struct rtllib_network *beacon = &ieee->current_network; + struct sk_buff *skb; +#ifdef _RTL8192_EXT_PATCH_ + bool is_mesh = false; +#endif + RTLLIB_DEBUG_MGMT("Stopping scan\n"); + + ieee->softmac_stats.tx_auth_rq++; +#ifdef _RTL8192_EXT_PATCH_ + skb=rtllib_authentication_req(beacon, ieee, 0,daddr); +#else + skb=rtllib_authentication_req(beacon, ieee, 0); +#endif +#ifdef _RTL8192_EXT_PATCH_ + is_mesh = ieee->ext_patch_rtllib_is_mesh(ieee,daddr); + if(is_mesh) { + if(skb){ + softmac_mgmt_xmit(skb, ieee); + } + return; + }else +#endif + if (!skb) + rtllib_associate_abort(ieee); + else{ + ieee->state = RTLLIB_ASSOCIATING_AUTHENTICATING ; + RTLLIB_DEBUG_MGMT("Sending authentication request\n"); + softmac_mgmt_xmit(skb, ieee); + if(!timer_pending(&ieee->associate_timer)){ + ieee->associate_timer.expires = jiffies + (HZ / 2); + add_timer(&ieee->associate_timer); + } + } +} + +void rtllib_auth_challenge(struct rtllib_device *ieee, u8 *challenge, int chlen) +{ + u8 *c; + struct sk_buff *skb; + struct rtllib_network *beacon = &ieee->current_network; + + ieee->associate_seq++; + ieee->softmac_stats.tx_auth_rq++; + +#ifdef _RTL8192_EXT_PATCH_ + skb = rtllib_authentication_req(beacon, ieee, chlen+2,beacon->bssid); +#else + skb = rtllib_authentication_req(beacon, ieee, chlen+2); +#endif + if (!skb) + rtllib_associate_abort(ieee); + else{ + c = skb_put(skb, chlen+2); + *(c++) = MFIE_TYPE_CHALLENGE; + *(c++) = chlen; + memcpy(c, challenge, chlen); + + RTLLIB_DEBUG_MGMT("Sending authentication challenge response\n"); + +#ifdef _RTL8192_EXT_PATCH_ + rtllib_encrypt_fragment(ieee, skb, sizeof(struct rtllib_hdr_3addr ), 0, 0); +#else + rtllib_encrypt_fragment(ieee, skb, sizeof(struct rtllib_hdr_3addr )); +#endif + + softmac_mgmt_xmit(skb, ieee); + mod_timer(&ieee->associate_timer, jiffies + (HZ/2)); +#if 0 + ieee->associate_timer.expires = jiffies + (HZ / 2); + add_timer(&ieee->associate_timer); +#endif + } + kfree(challenge); +} + +void rtllib_associate_step2(struct rtllib_device *ieee) +{ + struct sk_buff* skb; + struct rtllib_network *beacon = &ieee->current_network; + + del_timer_sync(&ieee->associate_timer); + + RTLLIB_DEBUG_MGMT("Sending association request\n"); + + ieee->softmac_stats.tx_ass_rq++; + skb=rtllib_association_req(beacon, ieee); + if (!skb) + rtllib_associate_abort(ieee); + else{ + softmac_mgmt_xmit(skb, ieee); + mod_timer(&ieee->associate_timer, jiffies + (HZ/2)); +#if 0 + ieee->associate_timer.expires = jiffies + (HZ / 2); + add_timer(&ieee->associate_timer); +#endif + } +} + +#define CANCELLED 2 +void rtllib_associate_complete_wq(void *data) +{ + struct rtllib_device *ieee = (struct rtllib_device *)container_of_work_rsl(data, struct rtllib_device, associate_complete_wq); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(ieee->PowerSaveControl)); + printk(KERN_INFO "Associated successfully\n"); + if(ieee->is_silent_reset == 0){ + printk("normal associate\n"); + notify_wx_assoc_event(ieee); + } + + netif_carrier_on(ieee->dev); + ieee->is_roaming = false; + if(rtllib_is_54g(&ieee->current_network) && + (ieee->modulation & RTLLIB_OFDM_MODULATION)){ + + ieee->rate = 108; + printk(KERN_INFO"Using G rates:%d\n", ieee->rate); + }else{ + ieee->rate = 22; + ieee->SetWirelessMode(ieee->dev, IEEE_B); + printk(KERN_INFO"Using B rates:%d\n", ieee->rate); + } + if (ieee->pHTInfo->bCurrentHTSupport&&ieee->pHTInfo->bEnableHT) + { + printk("Successfully associated, ht enabled\n"); + HTOnAssocRsp(ieee); + } else { + printk("Successfully associated, ht not enabled(%d, %d)\n", + ieee->pHTInfo->bCurrentHTSupport, ieee->pHTInfo->bEnableHT); + memset(ieee->dot11HTOperationalRateSet, 0, 16); + } + ieee->LinkDetectInfo.SlotNum = 2 * (1 + ieee->current_network.beacon_interval/500); + if(ieee->LinkDetectInfo.NumRecvBcnInPeriod==0||ieee->LinkDetectInfo.NumRecvDataInPeriod==0 ) + { + ieee->LinkDetectInfo.NumRecvBcnInPeriod = 1; + ieee->LinkDetectInfo.NumRecvDataInPeriod= 1; + } + pPSC->LpsIdleCount = 0; + ieee->link_change(ieee->dev); + +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->set_key_for_AP) + ieee->set_key_for_AP(ieee); + /* Synchronize mesh channel to wlan channel in MSTA mode.*/ + { + if(ieee->current_mesh_network.channel != ieee->current_network.channel) + { + printk("^^^^^^^^^^^^^^^^Change mesh channel %d with wlan channel %d\n", + ieee->current_mesh_network.channel, ieee->current_network.channel); + ieee->ext_patch_rtllib_close_all_peerlink(ieee, CANCELLED); + ieee->current_mesh_network.channel = ieee->current_network.channel; + if(ieee->ext_patch_r819x_wx_set_channel) + { + ieee->ext_patch_r819x_wx_set_channel(ieee, ieee->current_network.channel); + ieee->ext_patch_r819x_wx_set_mesh_chan(ieee->dev,ieee->current_network.channel); + } + } + } +#endif + if(ieee->is_silent_reset == 0){ + } else if(ieee->is_silent_reset == 1) { + printk("silent reset associate\n"); + ieee->is_silent_reset = 0; + } + + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + +#ifdef RTK_DMP_PLATFORM + kobject_hotplug(&ieee->dev->class_dev.kobj, KOBJ_LINKUP); +#endif +} + +static void rtllib_sta_send_associnfo(struct rtllib_device *ieee) +{ + char *buf; + size_t len; + int i; + union iwreq_data wrqu; + + return; + + + buf = kmalloc(50 + 2 * (ieee->assocreq_ies_len + ieee->assocresp_ies_len), GFP_ATOMIC); + if (!buf) + return; + + len = sprintf(buf, "ASSOCINFO("); + if (ieee->assocreq_ies) { + len += sprintf(buf + len, "ReqIEs="); + for (i = 0; i < ieee->assocreq_ies_len; i++) { + len += sprintf(buf + len, "%02x", ieee->assocreq_ies[i]); + } + } + if (ieee->assocresp_ies) { + if (ieee->assocreq_ies) + len += sprintf(buf + len, " "); + len += sprintf(buf + len, "RespIEs="); + for (i = 0; i < ieee->assocresp_ies_len; i++) { + len += sprintf(buf + len, "%02x", ieee->assocresp_ies[i]); + } + } + len += sprintf(buf + len, ")"); + + if (len > IW_CUSTOM_MAX) { + len = sprintf(buf, "ASSOCRESPIE="); + for (i = 0; i < ieee->assocresp_ies_len; i++) { + len += sprintf(buf + len, "%02x", ieee->assocresp_ies[i]); + } + } + + if (len <= IW_CUSTOM_MAX) { + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = len; + wireless_send_event(ieee->dev, IWEVCUSTOM, &wrqu, buf); + } + + kfree(buf); +} + +void rtllib_associate_complete(struct rtllib_device *ieee) +{ + del_timer_sync(&ieee->associate_timer); + +#if 0 + for(i = 0; i < 6; i++) { + ieee->seq_ctrl[i] = 0; + } +#endif + ieee->state = RTLLIB_LINKED; +#if defined (RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){ + WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0); + } +#endif +#if 0 + if (ieee->pHTInfo->bCurrentHTSupport) + { + printk("Successfully associated, ht enabled\n"); + queue_work_rsl(ieee->wq, &ieee->ht_onAssRsp); + } + else + { + printk("Successfully associated, ht not enabled\n"); + memset(ieee->dot11HTOperationalRateSet, 0, 16); + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } +#endif + + rtllib_sta_send_associnfo(ieee); + + queue_work_rsl(ieee->wq, &ieee->associate_complete_wq); +} + +void rtllib_associate_procedure_wq(void *data) +{ + struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, associate_procedure_wq); + rtllib_stop_scan_syncro(ieee); +#ifdef ENABLE_IPS + if(ieee->rtllib_ips_leave != NULL) + ieee->rtllib_ips_leave(ieee->dev); +#endif + down(&ieee->wx_sem); + + if (ieee->data_hard_stop) + ieee->data_hard_stop(ieee->dev); + + rtllib_stop_scan(ieee); + printk("===>%s(), chan:%d\n", __FUNCTION__, ieee->current_network.channel); + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + if(ieee->eRFPowerState == eRfOff) + { + printk("=============>%s():Rf state is eRfOff, schedule ipsleave wq again,return\n",__FUNCTION__); +#ifdef ENABLE_IPS + if(ieee->rtllib_ips_leave_wq != NULL) + ieee->rtllib_ips_leave_wq(ieee->dev); +#endif + up(&ieee->wx_sem); + return; + } + ieee->associate_seq = 1; +#ifdef _RTL8192_EXT_PATCH_ + rtllib_associate_step1(ieee, ieee->current_network.bssid); +#else + rtllib_associate_step1(ieee); +#endif + up(&ieee->wx_sem); +} + +#ifdef _RTL8192_EXT_PATCH_ + +void rtllib_ext_stop_scan_wq(void *data) +{ + struct rtllib_device *ieee = (struct rtllib_device *)container_of_work_rsl(data, struct rtllib_device, ext_stop_scan_wq); + rtllib_stop_scan_syncro(ieee); + + down(&ieee->wx_sem); + + if (ieee->data_hard_stop) + ieee->data_hard_stop(ieee->dev); + + rtllib_stop_scan(ieee); + + up(&ieee->wx_sem); +} + + +void rtllib_ext_send_11s_beacon(struct rtllib_device *ieee) +{ + queue_work_rsl(ieee->wq, &ieee->ext_send_beacon_wq); +} + +#endif + + +inline void rtllib_softmac_new_net(struct rtllib_device *ieee, struct rtllib_network *net) +{ + u8 tmp_ssid[IW_ESSID_MAX_SIZE+1]; + int tmp_ssid_len = 0; + + short apset,ssidset,ssidbroad,apmatch,ssidmatch; + + /* we are interested in new new only if we are not associated + * and we are not associating / authenticating + */ + if (ieee->state != RTLLIB_NOLINK) + return; + + if ((ieee->iw_mode == IW_MODE_INFRA) && !(net->capability & WLAN_CAPABILITY_ESS)) + return; + + if ((ieee->iw_mode == IW_MODE_ADHOC) && !(net->capability & WLAN_CAPABILITY_IBSS)) + return; + + if ((ieee->iw_mode == IW_MODE_ADHOC) && (net->channel > ieee->ibss_maxjoin_chal)) { + return; + } +#ifdef _RTL8192_EXT_PATCH_ + if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC + || ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))) +#else + if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) +#endif + { + /* if the user specified the AP MAC, we need also the essid + * This could be obtained by beacons or, if the network does not + * broadcast it, it can be put manually. + */ + apset = ieee->wap_set; + ssidset = ieee->ssid_set; + ssidbroad = !(net->ssid_len == 0 || net->ssid[0]== '\0'); + apmatch = (memcmp(ieee->current_network.bssid, net->bssid, ETH_ALEN)==0); + if(!ssidbroad){ + ssidmatch = (ieee->current_network.ssid_len == net->hidden_ssid_len)&&\ + (!strncmp(ieee->current_network.ssid, net->hidden_ssid, net->hidden_ssid_len)); + if(net->hidden_ssid_len > 0) + { + strncpy(net->ssid, net->hidden_ssid, net->hidden_ssid_len); + net->ssid_len = net->hidden_ssid_len; + ssidbroad = 1; + } + } + else + ssidmatch = (ieee->current_network.ssid_len == net->ssid_len)&&\ + (!strncmp(ieee->current_network.ssid, net->ssid, net->ssid_len)); + + if ( /* if the user set the AP check if match. + * if the network does not broadcast essid we check the user supplyed ANY essid + * if the network does broadcast and the user does not set essid it is OK + * if the network does broadcast and the user did set essid chech if essid match + */ + ( apset && apmatch && + ((ssidset && ssidbroad && ssidmatch) || (ssidbroad && !ssidset) || (!ssidbroad && ssidset)) ) + /* if the ap is not set, check that the user set the bssid + * and the network does bradcast and that those two bssid matches + */ + || (!apset && ssidset && ssidbroad && ssidmatch) || (ieee->is_roaming && ssidset && ssidbroad && ssidmatch) + ){ + /* if the essid is hidden replace it with the + * essid provided by the user. + */ + if (!ssidbroad){ + strncpy(tmp_ssid, ieee->current_network.ssid, IW_ESSID_MAX_SIZE); + tmp_ssid_len = ieee->current_network.ssid_len; + } + memcpy(&ieee->current_network, net, sizeof(struct rtllib_network)); + if (!ssidbroad){ + strncpy(ieee->current_network.ssid, tmp_ssid, IW_ESSID_MAX_SIZE); + ieee->current_network.ssid_len = tmp_ssid_len; + } + printk(KERN_INFO"Linking with %s,channel:%d, qos:%d, myHT:%d, networkHT:%d, mode:%x cur_net.flags:0x%x\n",ieee->current_network.ssid,ieee->current_network.channel, ieee->current_network.qos_data.supported, ieee->pHTInfo->bEnableHT, ieee->current_network.bssht.bdSupportHT, ieee->current_network.mode, ieee->current_network.flags); + + if ((rtllib_act_scanning(ieee, false)) && !(ieee->softmac_features & IEEE_SOFTMAC_SCAN)){ + rtllib_stop_scan_syncro(ieee); + } + + ieee->hwscan_ch_bk = ieee->current_network.channel; + HTResetIOTSetting(ieee->pHTInfo); + ieee->wmm_acm = 0; +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_INFRA) || + ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))) +#else + if (ieee->iw_mode == IW_MODE_INFRA) +#endif + { + /* Join the network for the first time */ + ieee->AsocRetryCount = 0; + if((ieee->current_network.qos_data.supported == 1) && + ieee->current_network.bssht.bdSupportHT) +/*WB, 2008.09.09:bCurrentHTSupport and bEnableHT two flags are going to put together to check whether we are in HT now, so needn't to check bEnableHT flags here. That's is to say we will set to HT support whenever joined AP has the ability to support HT. And whether we are in HT or not, please check bCurrentHTSupport&&bEnableHT now please.*/ + { +#ifdef ENABLE_AMSDU + if((ieee->mode == IEEE_N_24G) && (ieee->mode == IEEE_N_5G)) + HTUseDefaultSetting(ieee); +#endif + HTResetSelfAndSavePeerSetting(ieee, &(ieee->current_network)); + } + else + { + ieee->pHTInfo->bCurrentHTSupport = false; + } + + ieee->state = RTLLIB_ASSOCIATING; + if(ieee->LedControlHandler != NULL) + ieee->LedControlHandler(ieee->dev, LED_CTL_START_TO_LINK); + queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0); + }else{ +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +#if defined (RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){ + WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0); + } +#endif + ieee->state = RTLLIB_LINKED; + if(ieee->mode > ieee->current_network.mode) + ieee->SetWirelessMode(ieee->dev, ieee->current_network.mode); + else + ieee->SetWirelessMode(ieee->dev, ieee->mode); + mod_timer(&ieee->ibss_wait_timer,jiffies+(MSECS(20000))); +#else + if(rtllib_is_54g(&ieee->current_network) && + (ieee->modulation & RTLLIB_OFDM_MODULATION)){ + ieee->rate = 108; + ieee->SetWirelessMode(ieee->dev, IEEE_G); + printk(KERN_INFO"Using G rates\n"); + }else{ + ieee->rate = 22; + ieee->SetWirelessMode(ieee->dev, IEEE_B); + printk(KERN_INFO"Using B rates\n"); + } + memset(ieee->dot11HTOperationalRateSet, 0, 16); + ieee->state = RTLLIB_LINKED; +#endif + } + + } + } + +} + +void rtllib_softmac_check_all_nets(struct rtllib_device *ieee) +{ + unsigned long flags; + struct rtllib_network *target; + + spin_lock_irqsave(&ieee->lock, flags); + + list_for_each_entry(target, &ieee->network_list, list) { + + /* if the state become different that NOLINK means + * we had found what we are searching for + */ + + if (ieee->state != RTLLIB_NOLINK) + break; + + if (ieee->scan_age == 0 || time_after(target->last_scanned + ieee->scan_age, jiffies)) + rtllib_softmac_new_net(ieee, target); + } + + spin_unlock_irqrestore(&ieee->lock, flags); + +} + + +static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) +{ + struct rtllib_authentication *a; + u8 *t; + if (skb->len < (sizeof(struct rtllib_authentication)-sizeof(struct rtllib_info_element))){ + RTLLIB_DEBUG_MGMT("invalid len in auth resp: %d\n",skb->len); + return 0xcafe; + } + *challenge = NULL; + a = (struct rtllib_authentication*) skb->data; + if(skb->len > (sizeof(struct rtllib_authentication) +3)){ + t = skb->data + sizeof(struct rtllib_authentication); + + if(*(t++) == MFIE_TYPE_CHALLENGE){ + *chlen = *(t++); + *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); + memcpy(*challenge, t, *chlen); + } + } + + return cpu_to_le16(a->status); + +} + + +int auth_rq_parse(struct sk_buff *skb,u8* dest) +{ + struct rtllib_authentication *a; + + if (skb->len < (sizeof(struct rtllib_authentication)-sizeof(struct rtllib_info_element))){ + RTLLIB_DEBUG_MGMT("invalid len in auth request: %d\n",skb->len); + return -1; + } + a = (struct rtllib_authentication*) skb->data; + + memcpy(dest,a->header.addr2, ETH_ALEN); + + if (le16_to_cpu(a->algorithm) != WLAN_AUTH_OPEN) + return WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG; + + return WLAN_STATUS_SUCCESS; +} + +static short probe_rq_parse(struct rtllib_device *ieee, struct sk_buff *skb, u8 *src) +{ + u8 *tag; + u8 *skbend; + u8 *ssid=NULL; + u8 ssidlen = 0; + + struct rtllib_hdr_3addr *header = + (struct rtllib_hdr_3addr *) skb->data; + + if (skb->len < sizeof (struct rtllib_hdr_3addr )) + return -1; /* corrupted */ + if((memcmp(header->addr3,ieee->current_network.bssid,ETH_ALEN) != 0)&& + (memcmp(header->addr3,"\xff\xff\xff\xff\xff\xff",ETH_ALEN) != 0)) { + return -1; + } + + if(memcmp(header->addr3,ieee->current_network.bssid,ETH_ALEN) == 0) { + } + + if(memcmp(header->addr3,"\xff\xff\xff\xff\xff\xff",ETH_ALEN) == 0) { + } + memcpy(src,header->addr2, ETH_ALEN); + + skbend = (u8*)skb->data + skb->len; + + tag = skb->data + sizeof (struct rtllib_hdr_3addr ); + + while (tag+1 < skbend){ + if (*tag == 0){ + ssid = tag+2; + ssidlen = *(tag+1); + break; + } + tag++; /* point to the len field */ + tag = tag + *(tag); /* point to the last data byte of the tag */ + tag++; /* point to the next tag */ + } + + if (ssidlen == 0) return 1; + + if (!ssid) return 1; /* ssid not found in tagged param */ + return (!strncmp(ssid, ieee->current_network.ssid, ssidlen)); + +} + +int assoc_rq_parse(struct sk_buff *skb,u8* dest) +{ + struct rtllib_assoc_request_frame *a; + + if (skb->len < (sizeof(struct rtllib_assoc_request_frame) - + sizeof(struct rtllib_info_element))) { + + RTLLIB_DEBUG_MGMT("invalid len in auth request:%d \n", skb->len); + return -1; + } + + a = (struct rtllib_assoc_request_frame*) skb->data; + + memcpy(dest,a->header.addr2,ETH_ALEN); + + return 0; +} + +static inline u16 assoc_parse(struct rtllib_device *ieee, struct sk_buff *skb, int *aid) +{ + struct rtllib_assoc_response_frame *response_head; + u16 status_code; + + if (skb->len < sizeof(struct rtllib_assoc_response_frame)){ + RTLLIB_DEBUG_MGMT("invalid len in auth resp: %d\n", skb->len); + return 0xcafe; + } + + response_head = (struct rtllib_assoc_response_frame*) skb->data; + *aid = le16_to_cpu(response_head->aid) & 0x3fff; + + status_code = le16_to_cpu(response_head->status); + if((status_code==WLAN_STATUS_ASSOC_DENIED_RATES || \ + status_code==WLAN_STATUS_CAPS_UNSUPPORTED)&& + ((ieee->mode == IEEE_G) && + (ieee->current_network.mode == IEEE_N_24G) && + (ieee->AsocRetryCount++ < (RT_ASOC_RETRY_LIMIT-1)))) { + ieee->pHTInfo->IOTAction |= HT_IOT_ACT_PURE_N_MODE; + }else { + ieee->AsocRetryCount = 0; + } + + return le16_to_cpu(response_head->status); +} + +void rtllib_rx_probe_rq(struct rtllib_device *ieee, struct sk_buff *skb) +{ + u8 dest[ETH_ALEN]; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + struct sta_info *psta = NULL; +#endif + ieee->softmac_stats.rx_probe_rq++; + if (probe_rq_parse(ieee, skb, dest) > 0){ + ieee->softmac_stats.tx_probe_rs++; + rtllib_resp_to_probe(ieee, dest); +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC){ + psta = GetStaInfo(ieee, dest); + if(NULL != psta) + psta->LastActiveTime = jiffies; + } +#endif + } +} + +static inline void rtllib_rx_auth_rq(struct rtllib_device *ieee, struct sk_buff *skb) +{ + u8 dest[ETH_ALEN]; + int status; + ieee->softmac_stats.rx_auth_rq++; + + if ((status = auth_rq_parse(skb, dest))!= -1){ + rtllib_resp_to_auth(ieee, status, dest); + } + +} + +static inline void rtllib_rx_assoc_rq(struct rtllib_device *ieee, struct sk_buff *skb) +{ + + u8 dest[ETH_ALEN]; + + ieee->softmac_stats.rx_ass_rq++; + if (assoc_rq_parse(skb,dest) != -1){ + rtllib_resp_to_assoc_rq(ieee, dest); + } + + printk(KERN_INFO"New client associated: "MAC_FMT"\n", MAC_ARG(dest)); + #if 0 + spin_lock_irqsave(&ieee->lock,flags); + add_associate(ieee,dest); + spin_unlock_irqrestore(&ieee->lock,flags); + #endif +} + + +void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr) +{ + + struct sk_buff *buf = rtllib_null_func(ieee, pwr); + + if (buf) + softmac_ps_mgmt_xmit(buf, ieee); + +} + +void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee) +{ + + struct sk_buff *buf = rtllib_pspoll_func(ieee); + + if (buf) + softmac_ps_mgmt_xmit(buf, ieee); + +} + +short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u32 *time_h, u32 *time_l) +{ + int timeout = ieee->ps_timeout; + u8 dtim; + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(ieee->PowerSaveControl)); + /*if(ieee->ps == RTLLIB_PS_DISABLED || + ieee->iw_mode != IW_MODE_INFRA || + ieee->state != RTLLIB_LINKED) + + return 0; + */ + + if(ieee->LPSDelayCnt) + { + ieee->LPSDelayCnt --; + return 0; + } + + dtim = ieee->current_network.dtim_data; + if(!(dtim & RTLLIB_DTIM_VALID)) + return 0; + timeout = ieee->current_network.beacon_interval; + ieee->current_network.dtim_data = RTLLIB_DTIM_INVALID; + /* there's no need to nofity AP that I find you buffered with broadcast packet */ + if(dtim & (RTLLIB_DTIM_UCAST & ieee->ps)) + return 2; + + if(!time_after(jiffies, ieee->dev->trans_start + MSECS(timeout))){ + return 0; + } + if(!time_after(jiffies, ieee->last_rx_ps_time + MSECS(timeout))){ + return 0; + } + if((ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE ) && + (ieee->mgmt_queue_tail != ieee->mgmt_queue_head)) + return 0; + + if(time_l){ + if(ieee->bAwakePktSent == true) { + pPSC->LPSAwakeIntvl = 1; + } else { + u8 MaxPeriod = 1; + + if(pPSC->LPSAwakeIntvl == 0) + pPSC->LPSAwakeIntvl = 1; + if(pPSC->RegMaxLPSAwakeIntvl == 0) + MaxPeriod = 1; + else if(pPSC->RegMaxLPSAwakeIntvl == 0xFF) + MaxPeriod = ieee->current_network.dtim_period; + else + MaxPeriod = pPSC->RegMaxLPSAwakeIntvl; + pPSC->LPSAwakeIntvl = (pPSC->LPSAwakeIntvl >= MaxPeriod) ? MaxPeriod : (pPSC->LPSAwakeIntvl + 1); + } + { + u8 LPSAwakeIntvl_tmp = 0; + u8 period = ieee->current_network.dtim_period; + u8 count = ieee->current_network.tim.tim_count; + if(count == 0 ) { + if(pPSC->LPSAwakeIntvl > period) + LPSAwakeIntvl_tmp = period + (pPSC->LPSAwakeIntvl - period) -((pPSC->LPSAwakeIntvl-period)%period); + else + LPSAwakeIntvl_tmp = pPSC->LPSAwakeIntvl; + + } else { + if(pPSC->LPSAwakeIntvl > ieee->current_network.tim.tim_count) + LPSAwakeIntvl_tmp = count + (pPSC->LPSAwakeIntvl - count) -((pPSC->LPSAwakeIntvl-count)%period); + else + LPSAwakeIntvl_tmp = pPSC->LPSAwakeIntvl; + } + + *time_l = ieee->current_network.last_dtim_sta_time[0] + + MSECS(ieee->current_network.beacon_interval * LPSAwakeIntvl_tmp); + } + } + + if(time_h){ +#ifdef _RTL8192_EXT_PATCH_ + if(time_l && *time_l < ieee->current_network.last_dtim_sta_time[0]) + *time_h =1; + else + *time_h =0; +#else + *time_h = ieee->current_network.last_dtim_sta_time[1]; + if(time_l && *time_l < ieee->current_network.last_dtim_sta_time[0]) + *time_h += 1; +#endif + } + + return 1; + + +} + +inline void rtllib_sta_ps(struct rtllib_device *ieee) +{ + + u32 th,tl; + short sleep; + + unsigned long flags,flags2; + + spin_lock_irqsave(&ieee->lock, flags); + + if((ieee->ps == RTLLIB_PS_DISABLED || + ieee->iw_mode != IW_MODE_INFRA || + ieee->state != RTLLIB_LINKED)){ + + printk("=====>%s(): no need to ps,wake up!! ieee->ps is %d,ieee->iw_mode is %d,ieee->state is %d\n", + __FUNCTION__,ieee->ps,ieee->iw_mode,ieee->state); + spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); + + rtllib_sta_wakeup(ieee, 1); + + spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); + } + + sleep = rtllib_sta_ps_sleep(ieee,&th, &tl); + /* 2 wake, 1 sleep, 0 do nothing */ + if(sleep == 0) + { + goto out; + } + if(sleep == 1){ + if(ieee->sta_sleep == 1){ + ieee->enter_sleep_state(ieee->dev,th,tl); + } + + else if(ieee->sta_sleep == 0){ + spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); + + if(ieee->ps_is_queue_empty(ieee->dev)){ + ieee->sta_sleep = 2; + ieee->ack_tx_to_ieee = 1; + rtllib_sta_ps_send_null_frame(ieee,1); + ieee->ps_th = th; + ieee->ps_tl = tl; + } + spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); + + } + + ieee->bAwakePktSent = false; + + }else if(sleep == 2){ + spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); + + rtllib_sta_wakeup(ieee,1); + + spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); + } + +out: + spin_unlock_irqrestore(&ieee->lock, flags); + +} + +void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl) +{ + if(ieee->sta_sleep == 0){ + if(nl){ + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING) + { + ieee->ack_tx_to_ieee = 1; + rtllib_sta_ps_send_null_frame(ieee, 0); + } + else + { + ieee->ack_tx_to_ieee = 1; + rtllib_sta_ps_send_pspoll_frame(ieee); + } + } + return; + + } + + if(ieee->sta_sleep == 1) + ieee->sta_wake_up(ieee->dev); + if(nl){ + /* + ieee->ack_tx_to_ieee = 1; + printk("%s(3): notify AP we are awaked ++++++++++ SendNullFunctionData\n", __func__); + rtllib_sta_ps_send_null_frame(ieee, 0); + */ + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING) + { + ieee->ack_tx_to_ieee = 1; + rtllib_sta_ps_send_null_frame(ieee, 0); + } + else + { + ieee->ack_tx_to_ieee = 1; + ieee->polling = true; + rtllib_sta_ps_send_pspoll_frame(ieee); + } + + } else { + ieee->sta_sleep = 0; + ieee->polling = false; + } +} + +void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success) +{ + unsigned long flags,flags2; + + spin_lock_irqsave(&ieee->lock, flags); + + if(ieee->sta_sleep == 2){ + /* Null frame with PS bit set */ + if(success){ + ieee->sta_sleep = 1; + ieee->enter_sleep_state(ieee->dev,ieee->ps_th,ieee->ps_tl); + } + /* if the card report not success we can't be sure the AP + * has not RXed so we can't assume the AP believe us awake + */ + } else {/* 21112005 - tx again null without PS bit if lost */ + + if((ieee->sta_sleep == 0) && !success){ + spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING) + { + rtllib_sta_ps_send_null_frame(ieee, 0); + } + else + { + rtllib_sta_ps_send_pspoll_frame(ieee); + } + spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); + } + } + spin_unlock_irqrestore(&ieee->lock, flags); +} + +void rtllib_process_action(struct rtllib_device* ieee, struct sk_buff* skb) +{ + struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *) skb->data; + u8* act = rtllib_get_payload((struct rtllib_hdr *)header); + u8 category = 0; + + if (act == NULL) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "error to get payload of action frame\n"); + return; + } + + category = *act; + act ++; + switch (category) { + case ACT_CAT_BA: + switch (*act) { + case ACT_ADDBAREQ: + rtllib_rx_ADDBAReq(ieee, skb); + break; + case ACT_ADDBARSP: + rtllib_rx_ADDBARsp(ieee, skb); + break; + case ACT_DELBA: + rtllib_rx_DELBA(ieee, skb); + break; + } + break; + default: + break; + } + return; +} + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_process_action_mesh(struct rtllib_device* ieee, struct sk_buff* skb, + struct rtllib_rx_stats *rx_stats) +{ + struct rtllib_hdr_3addr *header = NULL; + u8* act = NULL; + u8 category = 0; + +#ifdef COMPATIBLE_WITH_RALINK_MESH + memmove(skb->data + WLAN_MESH_HDR_LEN, skb->data, sizeof(struct rtllib_hdr_3addr)); + skb_pull(skb, WLAN_MESH_HDR_LEN); +#endif + + header = (struct rtllib_hdr_3addr *) skb->data; + act = rtllib_get_payload((struct rtllib_hdr *)header); + + if (act == NULL) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "error to get payload of action frame\n"); + return; + } + if (ieee->iw_mode != IW_MODE_MESH) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "not in mesh mode\n"); + return; + } + + category = *act; + act ++; + switch (category) { + case ACT_CAT_MESH_PEERLINK_MGNT: + if(ieee->iw_mode != IW_MODE_MESH) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "peerlink received not in mesh mode\n"); + return; + } + switch (*act) { + case ACT_PEERLINK_OPEN: + if (ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_open(ieee, skb, rx_stats); + } + break; + case ACT_PEERLINK_CONFIRM: + if (ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm(ieee, skb); + } + break; + case ACT_PEERLINK_CLOSE: + if ( ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_peerlink_close(ieee, skb); + } + break; + } + break; + case ACT_CAT_MESH_LINK_METRIC: + if (ieee->iw_mode != IW_MODE_MESH) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "link metric received not in mesh mode\n"); + return; + } + switch (*act) { + case ACT_LINKMETRIC_REQ: + if (ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req( + ieee, skb); + } + break; + case ACT_LINKMETRIC_RSP: + if (ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report( + ieee, skb); + } + break; + } + + break; + case ACT_CAT_MESH_PATH_SELECT: + if (ieee->iw_mode != IW_MODE_MESH) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "not in mesh mode\n"); + return; + } + + switch (*act) { + case ACT_PATH_REQ: + if( ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq( + ieee, skb, rx_stats); + } + break; + case ACT_PATH_REPLY: + if(ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep( + ieee, skb, rx_stats); + } + break; + case ACT_PATH_ERR: + if(ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr( + ieee, skb, rx_stats); + } + break; + case ACT_RANN: + if(ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann( + ieee, skb, rx_stats); + } + break; + } + break; + case ACT_CAT_MESH_INTERWORKING: + if (ieee->iw_mode != IW_MODE_MESH) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "not in mesh mode\n"); + return; + } + if (*act == 0) { + if (ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann) { + ieee->ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann( + ieee, skb, rx_stats); + } + } + break; + default: + break; + } + return; +} +#endif + +inline int rtllib_rx_frame_softmac(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats, u16 type, + u16 stype) +{ + struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *) skb->data; + u8* ies; + u16 errcode; + u8* challenge; + int chlen=0; + int aid; +#ifdef _RTL8192_EXT_PATCH_ + u8 mesh_bssid[6] = {0,0,0,0,0,0}; +#endif + struct rtllib_assoc_response_frame *assoc_resp; + bool bSupportNmode = true, bHalfSupportNmode = false; + +#ifdef _RTL8192_EXT_PATCH_ + if((!ieee->proto_started)&&(!ieee->mesh_started)) +#else + if(!ieee->proto_started) +#endif + return 0; + + switch (WLAN_FC_GET_STYPE(header->frame_ctl)) { + + case RTLLIB_STYPE_ASSOC_RESP: + case RTLLIB_STYPE_REASSOC_RESP: + + RTLLIB_DEBUG_MGMT("received [RE]ASSOCIATION RESPONSE (%d)\n", + WLAN_FC_GET_STYPE(header->frame_ctl)); + if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && + ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATED && +#ifdef _RTL8192_EXT_PATCH_ + ((ieee->iw_mode == IW_MODE_INFRA) || + (ieee->iw_mode == IW_MODE_MESH && ieee->only_mesh == 0))) +#else + (ieee->iw_mode == IW_MODE_INFRA)) +#endif + { + if (0 == (errcode=assoc_parse(ieee,skb, &aid))){ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) + struct rtllib_network *network = kzalloc(sizeof(struct rtllib_network), GFP_ATOMIC); +#else + struct rtllib_network *network = kmalloc(sizeof(*network), GFP_KERNEL); +#endif + if (!network) { + return 1; + } + memset(network,0,sizeof(*network)); + ieee->state=RTLLIB_LINKED; + ieee->assoc_id = aid; + ieee->softmac_stats.rx_ass_ok++; + /* station support qos */ + /* Let the register setting defaultly with Legacy station */ + assoc_resp = (struct rtllib_assoc_response_frame*)skb->data; + if(ieee->current_network.qos_data.supported == 1) { + if (rtllib_parse_info_param(ieee,assoc_resp->info_element,\ + rx_stats->len - sizeof(*assoc_resp),\ + network,rx_stats)){ + kfree(network); + return 1; + } + else + { + memcpy(ieee->pHTInfo->PeerHTCapBuf, network->bssht.bdHTCapBuf, network->bssht.bdHTCapLen); + memcpy(ieee->pHTInfo->PeerHTInfoBuf, network->bssht.bdHTInfoBuf, network->bssht.bdHTInfoLen); + } + if (ieee->handle_assoc_response != NULL) + ieee->handle_assoc_response(ieee->dev, (struct rtllib_assoc_response_frame*)header, network); + kfree(network); + } + + if(ieee->assocresp_ies){ + kfree(ieee->assocresp_ies); + ieee->assocresp_ies = NULL; + } + ies = &(assoc_resp->info_element[0].id); + ieee->assocresp_ies_len = (skb->data + skb->len) - ies; + ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len, GFP_ATOMIC); + if (ieee->assocresp_ies) + memcpy(ieee->assocresp_ies, ies, ieee->assocresp_ies_len); + else{ + printk("%s()Warning: can't alloc memory for assocresp_ies\n", __func__); + ieee->assocresp_ies_len = 0; + } +#ifdef RTL8192S_WAPI_SUPPORT + { + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + PRT_WAPI_STA_INFO pWapiSta; + u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)) + { + pWapiSta =(PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list); + list_del_init(&pWapiSta->list); + list_add_tail(&pWapiSta->list, &pWapiInfo->wapiSTAUsedList); + WAPI_TRACE(WAPI_API, "%s(): New WAPI STA ("MAC_FMT")!!\n",__FUNCTION__,MAC_ARG(ieee->current_network.bssid)); + memcpy(pWapiSta->PeerMacAddr,ieee->current_network.bssid,6); + memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16); + memcpy(pWapiSta->lastRxUnicastPN, WapiAEPNInitialValueSrc, 16); + pWapiInfo->bFirstAuthentiateInProgress= true; + pWapiInfo->assoRspWapiIE[0] = MFIE_TYPE_WAPI; + pWapiInfo->assoRspWapiIE[1] = network->wapi_ie_len; + pWapiInfo->assoRspWapiIELength = network->wapi_ie_len+2; + memcpy(pWapiInfo->assoRspWapiIE+2,network->wapi_ie,network->wapi_ie_len); + } + } +#endif + rtllib_associate_complete(ieee); + } else { + /* aid could not been allocated */ + ieee->softmac_stats.rx_ass_err++; + printk( + "Association response status code 0x%x\n", + errcode); + RTLLIB_DEBUG_MGMT( + "Association response status code 0x%x\n", + errcode); + if(ieee->AsocRetryCount < RT_ASOC_RETRY_LIMIT) { + queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 0); + } else { + rtllib_associate_abort(ieee); + } + } + } + break; + + case RTLLIB_STYPE_ASSOC_REQ: + case RTLLIB_STYPE_REASSOC_REQ: + + if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && + ieee->iw_mode == IW_MODE_MASTER) + + rtllib_rx_assoc_rq(ieee, skb); + break; + + case RTLLIB_STYPE_AUTH: +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH) && ieee->ext_patch_rtllib_rx_frame_softmac_on_auth && ieee->mesh_started && ((memcmp(header->addr3, ieee->current_network.bssid, 6)) || (memcmp(ieee->current_network.bssid, mesh_bssid, 6) == 0))) + ieee->ext_patch_rtllib_rx_frame_softmac_on_auth(ieee, skb, rx_stats); + else +#endif + if (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE){ + if (ieee->state == RTLLIB_ASSOCIATING_AUTHENTICATING && +#ifdef _RTL8192_EXT_PATCH_ + ((ieee->iw_mode == IW_MODE_INFRA)|| + ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0)))) +#else + (ieee->iw_mode == IW_MODE_INFRA)) +#endif + { + RTLLIB_DEBUG_MGMT("Received authentication response"); + + if (0 == (errcode=auth_parse(skb, &challenge, &chlen))){ + if(ieee->open_wep || !challenge){ + ieee->state = RTLLIB_ASSOCIATING_AUTHENTICATED; + ieee->softmac_stats.rx_auth_rs_ok++; + if(!(ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE)) + { + if (!ieee->GetNmodeSupportBySecCfg(ieee->dev)) + { + if(IsHTHalfNmodeAPs(ieee)) + { + bSupportNmode = true; + bHalfSupportNmode = true; + } + else + { + bSupportNmode = false; + bHalfSupportNmode = false; + } + printk("==========>to link with AP using SEC(%d, %d)", bSupportNmode, bHalfSupportNmode); + } + } + /* Dummy wirless mode setting to avoid encryption issue */ + if(bSupportNmode) { + ieee->SetWirelessMode(ieee->dev, \ + ieee->current_network.mode); + }else{ + /*TODO*/ + ieee->SetWirelessMode(ieee->dev, IEEE_G); + } + + if (ieee->current_network.mode == IEEE_N_24G && bHalfSupportNmode == true) + { + printk("===============>entern half N mode\n"); + ieee->bHalfWirelessN24GMode = true; + } + else + ieee->bHalfWirelessN24GMode = false; + + rtllib_associate_step2(ieee); + }else{ + rtllib_auth_challenge(ieee, challenge, chlen); + } + }else{ + ieee->softmac_stats.rx_auth_rs_err++; + RTLLIB_DEBUG_MGMT("Authentication respose status code 0x%x",errcode); + + printk("Authentication respose status code 0x%x",errcode); + rtllib_associate_abort(ieee); + } + + }else if (ieee->iw_mode == IW_MODE_MASTER){ + rtllib_rx_auth_rq(ieee, skb); + } + } + break; +#if 0 + case RTLLIB_STYPE_PROBE_REQ: + + if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) && + ((ieee->iw_mode == IW_MODE_ADHOC || + ieee->iw_mode == IW_MODE_MASTER) && + ieee->state == RTLLIB_LINKED)){ + rtllib_rx_probe_rq(ieee, skb); + } + break; +#endif + case RTLLIB_STYPE_DISASSOC: + case RTLLIB_STYPE_DEAUTH: + + if(memcmp(header->addr3, ieee->current_network.bssid, ETH_ALEN) != 0) + break; + /* FIXME for now repeat all the association procedure + * both for disassociation and deauthentication + */ + if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && + ieee->state == RTLLIB_LINKED && +#ifdef _RTL8192_EXT_PATCH_ + ((ieee->iw_mode == IW_MODE_INFRA) || + ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0)))) +#else + (ieee->iw_mode == IW_MODE_INFRA)) +#endif + { + printk("==========>received disassoc/deauth(%x) frame, reason code:%x\n",WLAN_FC_GET_STYPE(header->frame_ctl), ((struct rtllib_disassoc*)skb->data)->reason); + ieee->state = RTLLIB_ASSOCIATING; + ieee->softmac_stats.reassoc++; + ieee->is_roaming = true; + ieee->LinkDetectInfo.bBusyTraffic = false; + rtllib_disassociate(ieee); + RemovePeerTS(ieee, header->addr2); + if(ieee->LedControlHandler != NULL) + ieee->LedControlHandler(ieee->dev, LED_CTL_START_TO_LINK); + queue_delayed_work_rsl(ieee->wq, &ieee->associate_procedure_wq, 5); + } + break; + case RTLLIB_STYPE_MANAGE_ACT: + rtllib_process_action(ieee,skb); +#ifdef _RTL8192_EXT_PATCH_ + rtllib_process_action_mesh(ieee,skb,rx_stats); +#endif + break; +#ifdef COMPATIBLE_WITH_RALINK_MESH + case RTLLIB_STYPE_MESH_ACT: + rtllib_process_action_mesh(ieee,skb,rx_stats); + break; +#endif + default: + return -1; + break; + } + + return 0; +} + +/* following are for a simplier TX queue management. + * Instead of using netif_[stop/wake]_queue the driver + * will uses these two function (plus a reset one), that + * will internally uses the kernel netif_* and takes + * care of the ieee802.11 fragmentation. + * So the driver receives a fragment per time and might + * call the stop function when it want without take care + * to have enought room to TX an entire packet. + * This might be useful if each fragment need it's own + * descriptor, thus just keep a total free memory > than + * the max fragmentation treshold is not enought.. If the + * ieee802.11 stack passed a TXB struct then you needed + * to keep N free descriptors where + * N = MAX_PACKET_SIZE / MIN_FRAG_TRESHOLD + * In this way you need just one and the 802.11 stack + * will take care of buffering fragments and pass them to + * to the driver later, when it wakes the queue. + */ +void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee) +{ + + unsigned int queue_index = txb->queue_index; + unsigned long flags; + int i; + cb_desc *tcb_desc = NULL; + unsigned long queue_len = 0; + + spin_lock_irqsave(&ieee->lock,flags); + + /* called with 2nd parm 0, no tx mgmt lock required */ + rtllib_sta_wakeup(ieee,0); + + /* update the tx status */ + tcb_desc = (cb_desc *)(txb->fragments[0]->cb + MAX_DEV_ADDR_SIZE); + if(tcb_desc->bMulticast) { + ieee->stats.multicast++; + } +#if 1 + /* if xmit available, just xmit it immediately, else just insert it to the wait queue */ + for(i = 0; i < txb->nr_frags; i++) { +#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE + queue_len = skb_queue_len(&ieee->skb_drv_aggQ[queue_index]); +#else + queue_len = skb_queue_len(&ieee->skb_waitQ[queue_index]); +#endif + if((queue_len != 0) ||\ + (!ieee->check_nic_enough_desc(ieee->dev,queue_index))||\ + (ieee->queue_stop)) { + /* insert the skb packet to the wait queue */ + /* as for the completion function, it does not need + * to check it any more. + * */ +#ifdef WIFI_TEST + if (1) +#else + if(queue_len < 200) +#endif + { +#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE + skb_queue_tail(&ieee->skb_drv_aggQ[queue_index], txb->fragments[i]); +#else + skb_queue_tail(&ieee->skb_waitQ[queue_index], txb->fragments[i]); +#endif + }else{ + kfree_skb(txb->fragments[i]); + } + }else{ + ieee->softmac_data_hard_start_xmit( + txb->fragments[i], + ieee->dev,ieee->rate); + } + } +#endif + rtllib_txb_free(txb); + + spin_unlock_irqrestore(&ieee->lock,flags); + +} + +/* called with ieee->lock acquired */ +void rtllib_resume_tx(struct rtllib_device *ieee) +{ + int i; + for(i = ieee->tx_pending.frag; i < ieee->tx_pending.txb->nr_frags; i++) { + + if (ieee->queue_stop){ + ieee->tx_pending.frag = i; + return; + }else{ + + ieee->softmac_data_hard_start_xmit( + ieee->tx_pending.txb->fragments[i], + ieee->dev,ieee->rate); + ieee->stats.tx_packets++; + } + } + + rtllib_txb_free(ieee->tx_pending.txb); + ieee->tx_pending.txb = NULL; +} + + +void rtllib_reset_queue(struct rtllib_device *ieee) +{ + unsigned long flags; + + spin_lock_irqsave(&ieee->lock,flags); + init_mgmt_queue(ieee); + if (ieee->tx_pending.txb){ + rtllib_txb_free(ieee->tx_pending.txb); + ieee->tx_pending.txb = NULL; + } + ieee->queue_stop = 0; + spin_unlock_irqrestore(&ieee->lock,flags); + +} + +void rtllib_wake_queue(struct rtllib_device *ieee) +{ + + unsigned long flags; + struct sk_buff *skb; + struct rtllib_hdr_3addr *header; + + spin_lock_irqsave(&ieee->lock,flags); + if (! ieee->queue_stop) goto exit; + + ieee->queue_stop = 0; + + if(ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE){ + while (!ieee->queue_stop && (skb = dequeue_mgmt(ieee))){ + + header = (struct rtllib_hdr_3addr *) skb->data; + + header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + + ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate); + } + } + if (!ieee->queue_stop && ieee->tx_pending.txb) + rtllib_resume_tx(ieee); + + if (!ieee->queue_stop && netif_queue_stopped(ieee->dev)){ + ieee->softmac_stats.swtxawake++; + netif_wake_queue(ieee->dev); + } + +exit : + spin_unlock_irqrestore(&ieee->lock,flags); +} + + +void rtllib_stop_queue(struct rtllib_device *ieee) +{ + + if (! netif_queue_stopped(ieee->dev)){ + netif_stop_queue(ieee->dev); + ieee->softmac_stats.swtxstop++; + } + ieee->queue_stop = 1; + +} + +void rtllib_stop_all_queues(struct rtllib_device *ieee) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30) + unsigned int i; + for(i=0; i < ieee->dev->num_tx_queues; i++) + netdev_get_tx_queue(ieee->dev,i)->trans_start = jiffies; +#else + ieee->dev->trans_start = jiffies; +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) + netif_carrier_off(ieee->dev); +#else + netif_tx_stop_all_queues(ieee->dev); +#endif +} + +void rtllib_wake_all_queues(struct rtllib_device *ieee) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) + netif_carrier_on(ieee->dev); +#else + netif_tx_wake_all_queues(ieee->dev); +#endif +} + +inline void rtllib_randomize_cell(struct rtllib_device *ieee) +{ + + get_random_bytes(ieee->current_network.bssid, ETH_ALEN); + + /* an IBSS cell address must have the two less significant + * bits of the first byte = 2 + */ + ieee->current_network.bssid[0] &= ~0x01; + ieee->current_network.bssid[0] |= 0x02; +} + +/* called in user context only */ +void rtllib_start_master_bss(struct rtllib_device *ieee) +{ + ieee->assoc_id = 1; + + if (ieee->current_network.ssid_len == 0){ + strncpy(ieee->current_network.ssid, + RTLLIB_DEFAULT_TX_ESSID, + IW_ESSID_MAX_SIZE); + + ieee->current_network.ssid_len = strlen(RTLLIB_DEFAULT_TX_ESSID); + ieee->ssid_set = 1; + } + + memcpy(ieee->current_network.bssid, ieee->dev->dev_addr, ETH_ALEN); + + ieee->set_chan(ieee->dev, ieee->current_network.channel); + ieee->state = RTLLIB_LINKED; +#if defined (RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){ + WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0); + } +#endif + ieee->link_change(ieee->dev); + notify_wx_assoc_event(ieee); + + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + + netif_carrier_on(ieee->dev); +} + +void rtllib_start_monitor_mode(struct rtllib_device *ieee) +{ + /* reset hardware status */ + if(ieee->raw_tx){ + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + + netif_carrier_on(ieee->dev); + } +} + +void rtllib_start_ibss_wq(void *data) +{ + struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, start_ibss_wq); + /* iwconfig mode ad-hoc will schedule this and return + * on the other hand this will block further iwconfig SET + * operations because of the wx_sem hold. + * Anyway some most set operations set a flag to speed-up + * (abort) this wq (when syncro scanning) before sleeping + * on the semaphore + */ + if(!ieee->proto_started){ + printk("==========oh driver down return\n"); + return; + } + down(&ieee->wx_sem); + + if (ieee->current_network.ssid_len == 0){ + strcpy(ieee->current_network.ssid,RTLLIB_DEFAULT_TX_ESSID); + ieee->current_network.ssid_len = strlen(RTLLIB_DEFAULT_TX_ESSID); + ieee->ssid_set = 1; + } + + ieee->state = RTLLIB_NOLINK; +#ifdef ADHOC_11N + ieee->mode = IEEE_N_24G; +#else + ieee->mode = IEEE_G; +#endif + /* check if we have this cell in our network list */ + rtllib_softmac_check_all_nets(ieee); + + + /* if not then the state is not linked. Maybe the user swithced to + * ad-hoc mode just after being in monitor mode, or just after + * being very few time in managed mode (so the card have had no + * time to scan all the chans..) or we have just run up the iface + * after setting ad-hoc mode. So we have to give another try.. + * Here, in ibss mode, should be safe to do this without extra care + * (in bss mode we had to make sure no-one tryed to associate when + * we had just checked the ieee->state and we was going to start the + * scan) beacause in ibss mode the rtllib_new_net function, when + * finds a good net, just set the ieee->state to RTLLIB_LINKED, + * so, at worst, we waste a bit of time to initiate an unneeded syncro + * scan, that will stop at the first round because it sees the state + * associated. + */ + if (ieee->state == RTLLIB_NOLINK) + rtllib_start_scan_syncro(ieee, 0); + + /* the network definitively is not here.. create a new cell */ + if (ieee->state == RTLLIB_NOLINK){ + printk("creating new IBSS cell\n"); + ieee->current_network.channel = ieee->IbssStartChnl; + if(!ieee->wap_set) + rtllib_randomize_cell(ieee); + + if(ieee->modulation & RTLLIB_CCK_MODULATION){ + + ieee->current_network.rates_len = 4; + + ieee->current_network.rates[0] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_1MB; + ieee->current_network.rates[1] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_2MB; + ieee->current_network.rates[2] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_5MB; + ieee->current_network.rates[3] = RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_11MB; + + }else + ieee->current_network.rates_len = 0; + + if(ieee->modulation & RTLLIB_OFDM_MODULATION){ + ieee->current_network.rates_ex_len = 8; + + /*ieee->current_network.rates_ex[0] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_6MB; + ieee->current_network.rates_ex[1] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_9MB; + ieee->current_network.rates_ex[2] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_12MB; + ieee->current_network.rates_ex[3] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_18MB; + ieee->current_network.rates_ex[4] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_24MB; + ieee->current_network.rates_ex[5] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_36MB; + ieee->current_network.rates_ex[6] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_48MB; + ieee->current_network.rates_ex[7] = RTLLIB_BASIC_RATE_MASK | RTLLIB_OFDM_RATE_54MB;*/ + + ieee->current_network.rates_ex[0] = RTLLIB_OFDM_RATE_6MB; + ieee->current_network.rates_ex[1] = RTLLIB_OFDM_RATE_9MB; + ieee->current_network.rates_ex[2] = RTLLIB_OFDM_RATE_12MB; + ieee->current_network.rates_ex[3] = RTLLIB_OFDM_RATE_18MB; + ieee->current_network.rates_ex[4] = RTLLIB_OFDM_RATE_24MB; + ieee->current_network.rates_ex[5] = RTLLIB_OFDM_RATE_36MB; + ieee->current_network.rates_ex[6] = RTLLIB_OFDM_RATE_48MB; + ieee->current_network.rates_ex[7] = RTLLIB_OFDM_RATE_54MB; + + ieee->rate = 108; + }else{ + ieee->current_network.rates_ex_len = 0; + ieee->rate = 22; + } + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +#ifdef ADHOC_11N + ieee->current_network.qos_data.supported = 1; +#else + ieee->current_network.qos_data.supported = 0; +#endif + ieee->SetWirelessMode(ieee->dev, ieee->mode); +#else + ieee->current_network.qos_data.supported = 0; + ieee->SetWirelessMode(ieee->dev, IEEE_G); +#endif + ieee->current_network.mode = ieee->mode; + ieee->current_network.atim_window = 0; + ieee->current_network.capability = WLAN_CAPABILITY_IBSS; + } + + printk("%s(): ieee->mode = %d\n", __FUNCTION__, ieee->mode); + if((ieee->mode == IEEE_N_24G) || (ieee->mode == IEEE_N_5G)) + HTUseDefaultSetting(ieee); + else + ieee->pHTInfo->bCurrentHTSupport = false; + + ieee->SetHwRegHandler(ieee->dev, HW_VAR_MEDIA_STATUS, (u8 *)(&ieee->state)); + +#if defined (RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){ + WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0); + } +#endif + ieee->state = RTLLIB_LINKED; +#ifdef _RTL8192_EXT_PATCH_ + ieee->set_chan(ieee->dev, ieee->current_network.channel); +#endif + ieee->link_change(ieee->dev); + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + + if(ieee->pHTInfo->bCurBW40MHz) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); +#else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); +#endif + if(ieee->LedControlHandler != NULL) + ieee->LedControlHandler(ieee->dev,LED_CTL_LINK); + + rtllib_start_send_beacons(ieee); + + notify_wx_assoc_event(ieee); + + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + + netif_carrier_on(ieee->dev); + + up(&ieee->wx_sem); +} + +inline void rtllib_start_ibss(struct rtllib_device *ieee) +{ + queue_delayed_work_rsl(ieee->wq, &ieee->start_ibss_wq, MSECS(150)); +} + +/* this is called only in user context, with wx_sem held */ +void rtllib_start_bss(struct rtllib_device *ieee) +{ + unsigned long flags; +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee) && !IS_COUNTRY_IE_VALID(ieee)) + { + if(! ieee->bGlobalDomain) + { + return; + } + } +#endif + /* check if we have already found the net we + * are interested in (if any). + * if not (we are disassociated and we are not + * in associating / authenticating phase) start the background scanning. + */ + rtllib_softmac_check_all_nets(ieee); + + /* ensure no-one start an associating process (thus setting + * the ieee->state to rtllib_ASSOCIATING) while we + * have just cheked it and we are going to enable scan. + * The rtllib_new_net function is always called with + * lock held (from both rtllib_softmac_check_all_nets and + * the rx path), so we cannot be in the middle of such function + */ + spin_lock_irqsave(&ieee->lock, flags); + + if (ieee->state == RTLLIB_NOLINK) { + rtllib_start_scan(ieee); + } + spin_unlock_irqrestore(&ieee->lock, flags); +} + +void rtllib_link_change_wq(void *data) +{ + struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, link_change_wq); + ieee->link_change(ieee->dev); +} +/* called only in userspace context */ +void rtllib_disassociate(struct rtllib_device *ieee) +{ + netif_carrier_off(ieee->dev); + if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE) + rtllib_reset_queue(ieee); + + if (ieee->data_hard_stop) + ieee->data_hard_stop(ieee->dev); +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee)) + Dot11d_Reset(ieee); +#endif + ieee->state = RTLLIB_NOLINK; + ieee->is_set_key = false; + ieee->wap_set = 0; + + queue_delayed_work_rsl(ieee->wq, &ieee->link_change_wq, 0); + + +#ifndef FOR_ANDROID_X86 + notify_wx_assoc_event(ieee); +#endif +#ifdef RTL8192S_WAPI_SUPPORT + printk("==============> %s()\n", __FUNCTION__); + WapiReturnOneStaInfo(ieee, ieee->current_network.bssid, 0); +#endif +} +#ifdef RTL8192S_WAPI_SUPPORT +void ieee80211_disassociate_from_app(struct rtllib_device *ieee) +{ + netif_carrier_off(ieee->dev); + if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE) + rtllib_reset_queue(ieee); + + if (ieee->data_hard_stop) + ieee->data_hard_stop(ieee->dev); +#ifdef ENABLE_DOT11D + if(IS_DOT11D_ENABLE(ieee)) + Dot11d_Reset(ieee); +#endif + ieee->state = RTLLIB_NOLINK; + ieee->is_set_key = false; + ieee->wap_set = 0; + + queue_delayed_work_rsl(ieee->wq, &ieee->link_change_wq, 0); + + +#ifndef FOR_ANDROID_X86 + notify_wx_assoc_event(ieee); +#endif + + printk("==============> %s()\n", __FUNCTION__); + WapiReturnOneStaInfo(ieee, ieee->current_network.bssid, 1); +} + +#endif +void rtllib_associate_retry_wq(void *data) +{ + struct rtllib_device *ieee = container_of_dwork_rsl(data, struct rtllib_device, associate_retry_wq); + unsigned long flags; + + down(&ieee->wx_sem); + if(!ieee->proto_started) + goto exit; + + if(ieee->state != RTLLIB_ASSOCIATING_RETRY) + goto exit; + + /* until we do not set the state to RTLLIB_NOLINK + * there are no possibility to have someone else trying + * to start an association procdure (we get here with + * ieee->state = RTLLIB_ASSOCIATING). + * When we set the state to RTLLIB_NOLINK it is possible + * that the RX path run an attempt to associate, but + * both rtllib_softmac_check_all_nets and the + * RX path works with ieee->lock held so there are no + * problems. If we are still disassociated then start a scan. + * the lock here is necessary to ensure no one try to start + * an association procedure when we have just checked the + * state and we are going to start the scan. + */ + ieee->beinretry = true; + ieee->state = RTLLIB_NOLINK; + + rtllib_softmac_check_all_nets(ieee); + + spin_lock_irqsave(&ieee->lock, flags); + + if(ieee->state == RTLLIB_NOLINK) + { + rtllib_start_scan(ieee); + } + spin_unlock_irqrestore(&ieee->lock, flags); + + ieee->beinretry = false; +exit: + up(&ieee->wx_sem); +} + +struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee) +{ + u8 broadcast_addr[] = {0xff,0xff,0xff,0xff,0xff,0xff}; + + struct sk_buff *skb; + struct rtllib_probe_response *b; +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH)&&(ieee->ext_patch_get_beacon_get_probersp )) + skb = ieee->ext_patch_get_beacon_get_probersp(ieee, broadcast_addr, &(ieee->current_mesh_network)); + else + skb = rtllib_probe_resp(ieee, broadcast_addr); +#else + skb = rtllib_probe_resp(ieee, broadcast_addr); +#endif + + if (!skb) + return NULL; + + b = (struct rtllib_probe_response *) skb->data; + b->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_BEACON); + + return skb; + +} + +struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee) +{ + struct sk_buff *skb; + struct rtllib_probe_response *b; + + skb = rtllib_get_beacon_(ieee); + if(!skb) + return NULL; + + b = (struct rtllib_probe_response *) skb->data; + b->header.seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + + return skb; +} + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 mesh_flag, u8 shutdown) +#else +void rtllib_softmac_stop_protocol(struct rtllib_device *ieee,u8 shutdown) +#endif +{ + rtllib_stop_scan_syncro(ieee); + down(&ieee->wx_sem); +#ifdef _RTL8192_EXT_PATCH_ + if(mesh_flag) { + rtllib_stop_mesh_protocol(ieee); + } + else +#endif + rtllib_stop_protocol(ieee,shutdown); + up(&ieee->wx_sem); +} + + +void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown) +{ + if (!ieee->proto_started) + return; + + if(shutdown){ + ieee->proto_started = 0; + ieee->proto_stoppping = 1; +#ifdef ENABLE_IPS + if(ieee->rtllib_ips_leave != NULL) + ieee->rtllib_ips_leave(ieee->dev); +#endif + } + + rtllib_stop_send_beacons(ieee); + del_timer_sync(&ieee->associate_timer); +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + del_timer_sync(&ieee->ibss_wait_timer); +#endif +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&ieee->associate_retry_wq); + cancel_delayed_work(&ieee->start_ibss_wq); + cancel_delayed_work(&ieee->link_change_wq); +#endif + rtllib_stop_scan(ieee); + + if(ieee->state <= RTLLIB_ASSOCIATING_AUTHENTICATED) + ieee->state = RTLLIB_NOLINK; + + if (ieee->state == RTLLIB_LINKED){ + if (ieee->iw_mode == IW_MODE_INFRA) + SendDisassociation(ieee,1,deauth_lv_ss); + rtllib_disassociate(ieee); + } + + if(shutdown){ + RemoveAllTS(ieee); + ieee->proto_stoppping = 0; +#ifdef RTL8192S_WAPI_SUPPORT + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)) + { + WapiReturnAllStaInfo(ieee); + } +#endif + } +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC) + DelStaInfoList(ieee); +#endif + + if(ieee->assocreq_ies){ + kfree(ieee->assocreq_ies); + ieee->assocreq_ies = NULL; + ieee->assocreq_ies_len = 0; + } + if(ieee->assocresp_ies){ + kfree(ieee->assocresp_ies); + ieee->assocresp_ies = NULL; + ieee->assocresp_ies_len = 0; + } +} + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_stop_mesh_protocol(struct rtllib_device *ieee) +{ + if (!ieee->mesh_started) + return; + ieee->mesh_started = 0; + + if(ieee->ext_patch_rtllib_stop_protocol) + ieee->ext_patch_rtllib_stop_protocol(ieee,0); + + rtllib_stop_send_beacons(ieee); +} +#endif + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_softmac_start_protocol(struct rtllib_device *ieee, u8 mesh_flag) +#else +void rtllib_softmac_start_protocol(struct rtllib_device *ieee) +#endif +{ + down(&ieee->wx_sem); +#ifdef _RTL8192_EXT_PATCH_ + if (mesh_flag) { + rtllib_start_mesh_protocol(ieee); + } + else +#endif + rtllib_start_protocol(ieee); + up(&ieee->wx_sem); +} + +void rtllib_start_protocol(struct rtllib_device *ieee) +{ + short ch = 0; + int i = 0; + + rtllib_update_active_chan_map(ieee); + + if (ieee->proto_started) + return; + + ieee->proto_started = 1; + + if (ieee->current_network.channel == 0) { + do { + ch++; + if (ch > MAX_CHANNEL_NUMBER) + return; /* no channel found */ + } while(!ieee->active_channel_map[ch]); + ieee->current_network.channel = ch; + } + + if (ieee->current_network.beacon_interval == 0) + ieee->current_network.beacon_interval = 100; + + for(i = 0; i < 17; i++) { + ieee->last_rxseq_num[i] = -1; + ieee->last_rxfrag_num[i] = -1; + ieee->last_packet_time[i] = 0; + } + + if(ieee->UpdateBeaconInterruptHandler) + ieee->UpdateBeaconInterruptHandler(ieee->dev, false); + + ieee->wmm_acm = 0; + /* if the user set the MAC of the ad-hoc cell and then + * switch to managed mode, shall we make sure that association + * attempts does not fail just because the user provide the essid + * and the nic is still checking for the AP MAC ?? + */ +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_INFRA) || ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))) +#else + if (ieee->iw_mode == IW_MODE_INFRA) +#endif + { + rtllib_start_bss(ieee); + }else if (ieee->iw_mode == IW_MODE_ADHOC){ + if(ieee->UpdateBeaconInterruptHandler) + ieee->UpdateBeaconInterruptHandler(ieee->dev, true); + + rtllib_start_ibss(ieee); + + }else if (ieee->iw_mode == IW_MODE_MASTER) + rtllib_start_master_bss(ieee); + + else if(ieee->iw_mode == IW_MODE_MONITOR) + rtllib_start_monitor_mode(ieee); +} + +#ifdef _RTL8192_EXT_PATCH_ +void rtllib_start_mesh_protocol(struct rtllib_device *ieee) +{ + short ch = 0; + + rtllib_update_active_chan_map(ieee); + + if (ieee->mesh_started) + return; + + ieee->mesh_started = 1; + + if (ieee->current_mesh_network.channel == 0){ + do { + ch++; + if (ch > MAX_CHANNEL_NUMBER) + return; /* no channel found */ + } while(ieee->active_channel_map[ch]); + + ieee->current_mesh_network.channel = ch; + } + + if (ieee->current_mesh_network.beacon_interval == 0) + ieee->current_mesh_network.beacon_interval = 100; + ieee->wmm_acm = 0; + + if(ieee->ext_patch_rtllib_start_mesh) + ieee->ext_patch_rtllib_start_mesh(ieee); +} +#endif + + +#define DRV_NAME "Ieee80211" +void rtllib_softmac_init(struct rtllib_device *ieee) +{ + int i; + memset(&ieee->current_network, 0, sizeof(struct rtllib_network)); + + ieee->state = RTLLIB_NOLINK; +#ifdef _RTL8192_EXT_PATCH_ + ieee->mesh_state = RTLLIB_NOLINK; +#endif + for(i = 0; i < 5; i++) { + ieee->seq_ctrl[i] = 0; + } +#ifdef ENABLE_DOT11D + ieee->pDot11dInfo = kmalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); + if (!ieee->pDot11dInfo) + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc memory for DOT11D\n"); + memset(ieee->pDot11dInfo, 0, sizeof(RT_DOT11D_INFO)); +#endif + ieee->LinkDetectInfo.SlotIndex = 0; + ieee->LinkDetectInfo.SlotNum = 2; + ieee->LinkDetectInfo.NumRecvBcnInPeriod=0; + ieee->LinkDetectInfo.NumRecvDataInPeriod=0; + ieee->LinkDetectInfo.NumTxOkInPeriod =0; + ieee->LinkDetectInfo.NumRxOkInPeriod =0; + ieee->LinkDetectInfo.NumRxUnicastOkInPeriod=0; +#ifdef _RTL8192_EXT_PATCH_ + ieee->LinkDetectInfo.LastNumRxUnicast = 0; + ieee->LinkDetectInfo.LastNumTxUnicast = 0; + ieee->LinkDetectInfo.IdleCount = 0; +#endif + ieee->bIsAggregateFrame = false; + ieee->assoc_id = 0; + ieee->queue_stop = 0; + ieee->scanning_continue = 0; + ieee->softmac_features = 0; + ieee->wap_set = 0; + ieee->ssid_set = 0; + ieee->proto_started = 0; + ieee->proto_stoppping = 0; + ieee->basic_rate = RTLLIB_DEFAULT_BASIC_RATE; + ieee->rate = 22; + ieee->ps = RTLLIB_PS_DISABLED; + ieee->sta_sleep = 0; + +#ifdef _RTL8192_EXT_PATCH_ + ieee->mesh_started = 0; +#endif + ieee->Regdot11HTOperationalRateSet[0]= 0xff; + ieee->Regdot11HTOperationalRateSet[1]= 0xff; + ieee->Regdot11HTOperationalRateSet[4]= 0x01; + + ieee->Regdot11TxHTOperationalRateSet[0]= 0xff; + ieee->Regdot11TxHTOperationalRateSet[1]= 0xff; + ieee->Regdot11TxHTOperationalRateSet[4]= 0x01; + + ieee->FirstIe_InScan = false; + ieee->actscanning = false; + ieee->beinretry = false; + ieee->is_set_key = false; + init_mgmt_queue(ieee); + + ieee->sta_edca_param[0] = 0x0000A403; + ieee->sta_edca_param[1] = 0x0000A427; + ieee->sta_edca_param[2] = 0x005E4342; + ieee->sta_edca_param[3] = 0x002F3262; + ieee->aggregation = true; + ieee->enable_rx_imm_BA = 1; +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40) + _setup_timer(&ieee->scan_timer, + rtllib_softmac_scan_cb, + (unsigned long) ieee); +#endif + ieee->tx_pending.txb = NULL; + + _setup_timer(&ieee->associate_timer, + rtllib_associate_abort_cb, + (unsigned long) ieee); + + _setup_timer(&ieee->beacon_timer, + rtllib_send_beacon_cb, + (unsigned long) ieee); + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + _setup_timer(&ieee->ibss_wait_timer, + rtllib_ibss_wait_timeout, + (unsigned long) ieee); +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) +#ifdef PF_SYNCTHREAD + ieee->wq = create_workqueue(DRV_NAME,0); +#else + ieee->wq = create_workqueue(DRV_NAME); +#endif +#endif + + INIT_DELAYED_WORK_RSL(&ieee->link_change_wq,(void*)rtllib_link_change_wq,ieee); + INIT_DELAYED_WORK_RSL(&ieee->start_ibss_wq,(void*)rtllib_start_ibss_wq,ieee); + INIT_WORK_RSL(&ieee->associate_complete_wq, (void*)rtllib_associate_complete_wq,ieee); + INIT_DELAYED_WORK_RSL(&ieee->associate_procedure_wq, (void*)rtllib_associate_procedure_wq,ieee); + INIT_DELAYED_WORK_RSL(&ieee->softmac_scan_wq,(void*)rtllib_softmac_scan_wq,ieee); + INIT_DELAYED_WORK_RSL(&ieee->softmac_hint11d_wq,(void*)rtllib_softmac_hint11d_wq,ieee); + INIT_DELAYED_WORK_RSL(&ieee->associate_retry_wq, (void*)rtllib_associate_retry_wq,ieee); + INIT_WORK_RSL(&ieee->wx_sync_scan_wq,(void*)rtllib_wx_sync_scan_wq,ieee); + +#ifdef _RTL8192_EXT_PATCH_ + INIT_WORK_RSL(&ieee->ext_stop_scan_wq,(void*) rtllib_ext_stop_scan_wq,ieee); + INIT_WORK_RSL(&ieee->ext_send_beacon_wq,(void*) ext_rtllib_send_beacon_wq,ieee); +#endif + + sema_init(&ieee->wx_sem, 1); + sema_init(&ieee->scan_sem, 1); + sema_init(&ieee->ips_sem,1); + + spin_lock_init(&ieee->mgmt_tx_lock); + spin_lock_init(&ieee->beacon_lock); + + tasklet_init(&ieee->ps_task, + (void(*)(unsigned long)) rtllib_sta_ps, + (unsigned long)ieee); + +} + +void rtllib_softmac_free(struct rtllib_device *ieee) +{ + down(&ieee->wx_sem); +#ifdef ENABLE_DOT11D + if(NULL != ieee->pDot11dInfo) + { + kfree(ieee->pDot11dInfo); + ieee->pDot11dInfo = NULL; + } +#endif + del_timer_sync(&ieee->associate_timer); + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + cancel_delayed_work(&ieee->associate_retry_wq); + destroy_workqueue(ieee->wq); +#endif + + up(&ieee->wx_sem); +} + +/******************************************************** + * Start of WPA code. * + * this is stolen from the ipw2200 driver * + ********************************************************/ + + +static int rtllib_wpa_enable(struct rtllib_device *ieee, int value) +{ + /* This is called when wpa_supplicant loads and closes the driver + * interface. */ + printk("%s WPA\n",value ? "enabling" : "disabling"); + ieee->wpa_enabled = value; + memset(ieee->ap_mac_addr, 0, 6); + return 0; +} + + +void rtllib_wpa_assoc_frame(struct rtllib_device *ieee, char *wpa_ie, int wpa_ie_len) +{ + /* make sure WPA is enabled */ + rtllib_wpa_enable(ieee, 1); + + rtllib_disassociate(ieee); +} + + +static int rtllib_wpa_mlme(struct rtllib_device *ieee, int command, int reason) +{ + + int ret = 0; + + switch (command) { + case IEEE_MLME_STA_DEAUTH: + break; + + case IEEE_MLME_STA_DISASSOC: + rtllib_disassociate(ieee); + break; + + default: + printk("Unknown MLME request: %d\n", command); + ret = -EOPNOTSUPP; + } + + return ret; +} + + +static int rtllib_wpa_set_wpa_ie(struct rtllib_device *ieee, + struct ieee_param *param, int plen) +{ + u8 *buf; + + if (param->u.wpa_ie.len > MAX_WPA_IE_LEN || + (param->u.wpa_ie.len && param->u.wpa_ie.data == NULL)) + return -EINVAL; + + if (param->u.wpa_ie.len) { + buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL); + if (buf == NULL) + return -ENOMEM; + + memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len); + kfree(ieee->wpa_ie); + ieee->wpa_ie = buf; + ieee->wpa_ie_len = param->u.wpa_ie.len; + } else { + kfree(ieee->wpa_ie); + ieee->wpa_ie = NULL; + ieee->wpa_ie_len = 0; + } + + rtllib_wpa_assoc_frame(ieee, ieee->wpa_ie, ieee->wpa_ie_len); + return 0; +} + +#define AUTH_ALG_OPEN_SYSTEM 0x1 +#define AUTH_ALG_SHARED_KEY 0x2 +#define AUTH_ALG_LEAP 0x4 +static int rtllib_wpa_set_auth_algs(struct rtllib_device *ieee, int value) +{ + + struct rtllib_security sec = { + .flags = SEC_AUTH_MODE, + }; + int ret = 0; + + if (value & AUTH_ALG_SHARED_KEY) { + sec.auth_mode = WLAN_AUTH_SHARED_KEY; + ieee->open_wep = 0; + ieee->auth_mode = 1; + } else if (value & AUTH_ALG_OPEN_SYSTEM){ + sec.auth_mode = WLAN_AUTH_OPEN; + ieee->open_wep = 1; + ieee->auth_mode = 0; + } + else if (value & AUTH_ALG_LEAP){ + sec.auth_mode = WLAN_AUTH_LEAP >> 6; + ieee->open_wep = 1; + ieee->auth_mode = 2; + } + + + if (ieee->set_security) + ieee->set_security(ieee->dev, &sec); + + return ret; +} + +static int rtllib_wpa_set_param(struct rtllib_device *ieee, u8 name, u32 value) +{ + int ret=0; + unsigned long flags; + + switch (name) { + case IEEE_PARAM_WPA_ENABLED: + ret = rtllib_wpa_enable(ieee, value); + break; + + case IEEE_PARAM_TKIP_COUNTERMEASURES: + ieee->tkip_countermeasures=value; + break; + + case IEEE_PARAM_DROP_UNENCRYPTED: + { + /* HACK: + * + * wpa_supplicant calls set_wpa_enabled when the driver + * is loaded and unloaded, regardless of if WPA is being + * used. No other calls are made which can be used to + * determine if encryption will be used or not prior to + * association being expected. If encryption is not being + * used, drop_unencrypted is set to false, else true -- we + * can use this to determine if the CAP_PRIVACY_ON bit should + * be set. + */ + struct rtllib_security sec = { + .flags = SEC_ENABLED, + .enabled = value, + }; + ieee->drop_unencrypted = value; + /* We only change SEC_LEVEL for open mode. Others + * are set by ipw_wpa_set_encryption. + */ + if (!value) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_0; + } + else { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_1; + } + if (ieee->set_security) + ieee->set_security(ieee->dev, &sec); + break; + } + + case IEEE_PARAM_PRIVACY_INVOKED: + ieee->privacy_invoked=value; + break; + + case IEEE_PARAM_AUTH_ALGS: + ret = rtllib_wpa_set_auth_algs(ieee, value); + break; + + case IEEE_PARAM_IEEE_802_1X: + ieee->ieee802_1x=value; + break; + case IEEE_PARAM_WPAX_SELECT: + spin_lock_irqsave(&ieee->wpax_suitlist_lock,flags); + spin_unlock_irqrestore(&ieee->wpax_suitlist_lock,flags); + break; + + default: + printk("Unknown WPA param: %d\n",name); + ret = -EOPNOTSUPP; + } + + return ret; +} + +/* implementation borrowed from hostap driver */ + +#ifdef _RTL8192_EXT_PATCH_ +static int rtllib_wpa_set_encryption(struct rtllib_device *ieee, + struct ieee_param *param, int param_len, u8 is_mesh) +#else +static int rtllib_wpa_set_encryption(struct rtllib_device *ieee, + struct ieee_param *param, int param_len) +#endif +{ + int ret = 0; +#ifdef _RTL8192_EXT_PATCH_ + u8 i = 0; +#endif + struct rtllib_crypto_ops *ops; + struct rtllib_crypt_data **crypt; + + struct rtllib_security sec = { + .flags = 0, + }; + + param->u.crypt.err = 0; + param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; + + if (param_len != + (int) ((char *) param->u.crypt.key - (char *) param) + + param->u.crypt.key_len) { + printk("Len mismatch %d, %d\n", param_len, + param->u.crypt.key_len); + return -EINVAL; + } + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff && + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff && + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) { + if (param->u.crypt.idx >= WEP_KEYS) + return -EINVAL; +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + crypt = &ieee->cryptlist[0]->crypt[param->u.crypt.idx]; + else + crypt = &ieee->sta_crypt[param->u.crypt.idx]; +#else + crypt = &ieee->crypt[param->u.crypt.idx]; +#endif + } else { + return -EINVAL; + } + + if (strcmp(param->u.crypt.alg, "none") == 0) { + if (crypt) { + sec.enabled = 0; + sec.level = SEC_LEVEL_0; + sec.flags |= SEC_ENABLED | SEC_LEVEL; + rtllib_crypt_delayed_deinit(ieee, crypt); + } + goto done; + } + sec.enabled = 1; + sec.flags |= SEC_ENABLED; + + /* IPW HW cannot build TKIP MIC, host decryption still needed. */ + if (!(ieee->host_encrypt || ieee->host_decrypt) && + strcmp(param->u.crypt.alg, "TKIP")) + goto skip_host_crypt; + + ops = rtllib_get_crypto_ops(param->u.crypt.alg); + if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { + request_module("rtllib_crypt_wep"); + ops = rtllib_get_crypto_ops(param->u.crypt.alg); + } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { + request_module("rtllib_crypt_tkip"); + ops = rtllib_get_crypto_ops(param->u.crypt.alg); + } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { + request_module("rtllib_crypt_ccmp"); + ops = rtllib_get_crypto_ops(param->u.crypt.alg); + } + if (ops == NULL) { + printk("unknown crypto alg '%s'\n", param->u.crypt.alg); + param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG; + ret = -EINVAL; + goto done; + } +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + { + for (i=0; icryptlist[i]->crypt[param->u.crypt.idx]; + + *crypt = ieee->cryptlist[i]->crypt[param->u.crypt.idx]; + } +#endif + + if (*crypt == NULL || (*crypt)->ops != ops) { + struct rtllib_crypt_data *new_crypt; + + rtllib_crypt_delayed_deinit(ieee, crypt); + + new_crypt = (struct rtllib_crypt_data *) + kmalloc(sizeof(*new_crypt), GFP_KERNEL); + if (new_crypt == NULL) { + ret = -ENOMEM; + goto done; + } + memset(new_crypt, 0, sizeof(struct rtllib_crypt_data)); + new_crypt->ops = ops; +#ifdef BUILT_IN_RTLLIB + if (new_crypt->ops) +#else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) +#else + if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner)) +#endif +#endif + new_crypt->priv = + new_crypt->ops->init(param->u.crypt.idx); + + if (new_crypt->priv == NULL) { + kfree(new_crypt); + param->u.crypt.err = IEEE_CRYPT_ERR_CRYPT_INIT_FAILED; + ret = -EINVAL; + goto done; + } + + *crypt = new_crypt; + } + + if (param->u.crypt.key_len > 0 && (*crypt)->ops->set_key && + (*crypt)->ops->set_key(param->u.crypt.key, + param->u.crypt.key_len, param->u.crypt.seq, + (*crypt)->priv) < 0) { + printk("key setting failed\n"); + param->u.crypt.err = IEEE_CRYPT_ERR_KEY_SET_FAILED; + ret = -EINVAL; + goto done; + } +#ifdef _RTL8192_EXT_PATCH_ + } +#endif + + skip_host_crypt: + if (param->u.crypt.set_tx) { + ieee->tx_keyidx = param->u.crypt.idx; + sec.active_key = param->u.crypt.idx; + sec.flags |= SEC_ACTIVE_KEY; + } else + sec.flags &= ~SEC_ACTIVE_KEY; + + if (param->u.crypt.alg != NULL) { + memcpy(sec.keys[param->u.crypt.idx], + param->u.crypt.key, + param->u.crypt.key_len); + sec.key_sizes[param->u.crypt.idx] = param->u.crypt.key_len; + sec.flags |= (1 << param->u.crypt.idx); + + if (strcmp(param->u.crypt.alg, "WEP") == 0) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_1; + } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_2; + } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_3; + } + } + done: + if (ieee->set_security) + ieee->set_security(ieee->dev, &sec); + +#ifdef _RTL8192_EXT_PATCH_ + if (ret != 0) + { + if(is_mesh) + { + for (i=0; icryptlist[i]->crypt[param->u.crypt.idx]==NULL){ + break; + } + else{ + kfree(ieee->cryptlist[i]->crypt[param->u.crypt.idx]); + ieee->cryptlist[i]->crypt[param->u.crypt.idx] = NULL; + } + } + } + else + { + kfree(ieee->sta_crypt[param->u.crypt.idx]); + ieee->sta_crypt[param->u.crypt.idx] = NULL; + } + } +#endif + + + /* Do not reset port if card is in Managed mode since resetting will + * generate new IEEE 802.11 authentication which may end up in looping + * with IEEE 802.1X. If your hardware requires a reset after WEP + * configuration (for example... Prism2), implement the reset_port in + * the callbacks structures used to initialize the 802.11 stack. */ + if (ieee->reset_on_keychange && + ieee->iw_mode != IW_MODE_INFRA && + ieee->reset_port && + ieee->reset_port(ieee->dev)) { + printk("reset_port failed\n"); + param->u.crypt.err = IEEE_CRYPT_ERR_CARD_CONF_FAILED; + return -EINVAL; + } + + return ret; +} + +inline struct sk_buff *rtllib_disauth_skb( struct rtllib_network *beacon, + struct rtllib_device *ieee, u16 asRsn) +{ + struct sk_buff *skb; + struct rtllib_disauth *disauth; +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + int len = sizeof(struct rtllib_disauth) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE; +#else + int len = sizeof(struct rtllib_disauth) + ieee->tx_headroom; + +#endif + skb = dev_alloc_skb(len); + if (!skb) { + return NULL; + } + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + skb_reserve(skb, ieee->tx_headroom); + + disauth = (struct rtllib_disauth *) skb_put(skb,sizeof(struct rtllib_disauth)); + disauth->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_DEAUTH); + disauth->header.duration_id = 0; + + memcpy(disauth->header.addr1, beacon->bssid, ETH_ALEN); + memcpy(disauth->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memcpy(disauth->header.addr3, beacon->bssid, ETH_ALEN); + + disauth->reason = cpu_to_le16(asRsn); + return skb; +} + +inline struct sk_buff *rtllib_disassociate_skb( struct rtllib_network *beacon, + struct rtllib_device *ieee, u16 asRsn) +{ + struct sk_buff *skb; + struct rtllib_disassoc *disass; +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + int len = sizeof(struct rtllib_disassoc) + ieee->tx_headroom + USB_512B_ALIGNMENT_SIZE; +#else + int len = sizeof(struct rtllib_disassoc) + ieee->tx_headroom; +#endif + skb = dev_alloc_skb(len); + + if (!skb) { + return NULL; + } + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + skb_reserve(skb, ieee->tx_headroom); + + disass = (struct rtllib_disassoc *) skb_put(skb,sizeof(struct rtllib_disassoc)); + disass->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_DISASSOC); + disass->header.duration_id = 0; + + memcpy(disass->header.addr1, beacon->bssid, ETH_ALEN); + memcpy(disass->header.addr2, ieee->dev->dev_addr, ETH_ALEN); + memcpy(disass->header.addr3, beacon->bssid, ETH_ALEN); + + disass->reason = cpu_to_le16(asRsn); + return skb; +} + +void SendDisassociation(struct rtllib_device *ieee, bool deauth, u16 asRsn) +{ + struct rtllib_network *beacon = &ieee->current_network; + struct sk_buff *skb; + + if(deauth) { + skb = rtllib_disauth_skb(beacon,ieee,asRsn); + } else { + skb = rtllib_disassociate_skb(beacon,ieee,asRsn); + } + + if (skb){ + softmac_mgmt_xmit(skb, ieee); + } +} + +u8 rtllib_ap_sec_type(struct rtllib_device *ieee) +{ + static u8 ccmp_ie[4] = {0x00,0x50,0xf2,0x04}; + static u8 ccmp_rsn_ie[4] = {0x00, 0x0f, 0xac, 0x04}; + int wpa_ie_len= ieee->wpa_ie_len; + struct rtllib_crypt_data* crypt; + int encrypt; + +#ifdef _RTL8192_EXT_PATCH_ + crypt = ieee->sta_crypt[ieee->tx_keyidx]; +#else + crypt = ieee->crypt[ieee->tx_keyidx]; +#endif + encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY) ||\ + (ieee->host_encrypt && crypt && crypt->ops && \ + (0 == strcmp(crypt->ops->name,"WEP"))); + + /* simply judge */ + if(encrypt && (wpa_ie_len == 0)) { + return SEC_ALG_WEP; + } else if((wpa_ie_len != 0)) { + if (((ieee->wpa_ie[0] == 0xdd) && (!memcmp(&(ieee->wpa_ie[14]),ccmp_ie,4))) || + ((ieee->wpa_ie[0] == 0x30) && (!memcmp(&ieee->wpa_ie[10],ccmp_rsn_ie, 4)))) + return SEC_ALG_CCMP; + else + return SEC_ALG_TKIP; + } else { + return SEC_ALG_NONE; + } +} + +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p, u8 is_mesh) +#else +int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p) +#endif +{ + struct ieee_param *param; + int ret=0; + + down(&ieee->wx_sem); + + if (p->length < sizeof(struct ieee_param) || !p->pointer){ + ret = -EINVAL; + goto out; + } + + param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + if (param == NULL){ + ret = -ENOMEM; + goto out; + } + if (copy_from_user(param, p->pointer, p->length)) { + kfree(param); + ret = -EFAULT; + goto out; + } + + switch (param->cmd) { + + case IEEE_CMD_SET_WPA_PARAM: + ret = rtllib_wpa_set_param(ieee, param->u.wpa_param.name, + param->u.wpa_param.value); + break; + + case IEEE_CMD_SET_WPA_IE: + ret = rtllib_wpa_set_wpa_ie(ieee, param, p->length); + break; + + case IEEE_CMD_SET_ENCRYPTION: +#ifdef _RTL8192_EXT_PATCH_ + ret = rtllib_wpa_set_encryption(ieee, param, p->length, is_mesh); +#else + ret = rtllib_wpa_set_encryption(ieee, param, p->length); +#endif + break; + + case IEEE_CMD_MLME: + ret = rtllib_wpa_mlme(ieee, param->u.mlme.command, + param->u.mlme.reason_code); + break; + + default: + printk("Unknown WPA supplicant request: %d\n",param->cmd); + ret = -EOPNOTSUPP; + break; + } + + if (ret == 0 && copy_to_user(p->pointer, param, p->length)) + ret = -EFAULT; + + kfree(param); +out: + up(&ieee->wx_sem); + + return ret; +} + +void notify_wx_assoc_event(struct rtllib_device *ieee) +{ + union iwreq_data wrqu; + + if(ieee->cannot_notify) + return; + + wrqu.ap_addr.sa_family = ARPHRD_ETHER; + if (ieee->state == RTLLIB_LINKED) + memcpy(wrqu.ap_addr.sa_data, ieee->current_network.bssid, ETH_ALEN); + else{ + + printk("%s(): Tell user space disconnected\n",__func__); + memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN); + } + wireless_send_event(ieee->dev, SIOCGIWAP, &wrqu, NULL); +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_get_beacon); +EXPORT_SYMBOL_RSL(rtllib_wake_queue); +EXPORT_SYMBOL_RSL(rtllib_stop_queue); +EXPORT_SYMBOL_RSL(rtllib_reset_queue); +EXPORT_SYMBOL_RSL(rtllib_softmac_stop_protocol); +EXPORT_SYMBOL_RSL(rtllib_softmac_start_protocol); +EXPORT_SYMBOL_RSL(rtllib_is_shortslot); +EXPORT_SYMBOL_RSL(rtllib_is_54g); +EXPORT_SYMBOL_RSL(rtllib_wpa_supplicant_ioctl); +EXPORT_SYMBOL_RSL(rtllib_ps_tx_ack); +EXPORT_SYMBOL_RSL(rtllib_softmac_xmit); +EXPORT_SYMBOL_RSL(rtllib_stop_send_beacons); +EXPORT_SYMBOL_RSL(notify_wx_assoc_event); +EXPORT_SYMBOL_RSL(SendDisassociation); +EXPORT_SYMBOL_RSL(rtllib_disassociate); +EXPORT_SYMBOL_RSL(rtllib_start_send_beacons); +EXPORT_SYMBOL_RSL(rtllib_stop_scan); +EXPORT_SYMBOL_RSL(rtllib_send_probe_requests); +EXPORT_SYMBOL_RSL(rtllib_softmac_scan_syncro); +EXPORT_SYMBOL_RSL(rtllib_start_scan_syncro); +EXPORT_SYMBOL_RSL(rtllib_sta_ps_send_null_frame); +EXPORT_SYMBOL_RSL(rtllib_sta_ps_send_pspoll_frame); +EXPORT_SYMBOL_RSL(rtllib_sta_wakeup); +EXPORT_SYMBOL_RSL(rtllib_ap_sec_type); +#ifdef _RTL8192_EXT_PATCH_ +EXPORT_SYMBOL_RSL(rtllib_MFIE_rate_len); +EXPORT_SYMBOL_RSL(rtllib_MFIE_Brate); +EXPORT_SYMBOL_RSL(rtllib_MFIE_Grate); +EXPORT_SYMBOL_RSL(rtllib_WMM_Info); +EXPORT_SYMBOL_RSL(rtllib_TURBO_Info); +EXPORT_SYMBOL_RSL(rtllib_ext_probe_resp_by_net); +EXPORT_SYMBOL_RSL(softmac_mgmt_xmit); +EXPORT_SYMBOL_RSL(rtllib_start_scan); +EXPORT_SYMBOL_RSL(rtllib_ext_send_11s_beacon); +EXPORT_SYMBOL_RSL(rtllib_rx_auth_rq); +EXPORT_SYMBOL_RSL(rtllib_associate_step1); +EXPORT_SYMBOL_RSL(rtllib_stop_protocol); +EXPORT_SYMBOL_RSL(rtllib_start_protocol); +EXPORT_SYMBOL_RSL(rtllib_resp_to_auth); + +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_crypt_ccmp.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_crypt_ccmp.c @@ -0,0 +1,544 @@ +/* + * Host AP crypt: host-based CCMP encryption implementation for Host AP driver + * + * Copyright (c) 2003-2004, Jouni Malinen + * + * 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. See README and COPYING for + * more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _RTL8192_EXT_PATCH_ +#include +#endif +#include "rtllib.h" + +#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "rtl_crypto.h" +#else +#include +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) + #include +#else + #include +#endif + +#ifndef BUILT_IN_RTLLIB +MODULE_AUTHOR("Jouni Malinen"); +MODULE_DESCRIPTION("Host AP crypt: CCMP"); +MODULE_LICENSE("GPL"); +#endif + + +#define AES_BLOCK_LEN 16 +#define CCMP_HDR_LEN 8 +#define CCMP_MIC_LEN 8 +#define CCMP_TK_LEN 16 +#define CCMP_PN_LEN 6 + +struct rtllib_ccmp_data { + u8 key[CCMP_TK_LEN]; + int key_set; + + u8 tx_pn[CCMP_PN_LEN]; + u8 rx_pn[CCMP_PN_LEN]; + + u32 dot11RSNAStatsCCMPFormatErrors; + u32 dot11RSNAStatsCCMPReplays; + u32 dot11RSNAStatsCCMPDecryptErrors; + + int key_idx; + + struct crypto_tfm *tfm; + + /* 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]; + u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN]; +}; + +void rtllib_ccmp_aes_encrypt(struct crypto_tfm *tfm, + const u8 pt[16], u8 ct[16]) +{ +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + struct scatterlist src, dst; + +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + src.page = virt_to_page(pt); + src.offset = offset_in_page(pt); + src.length = AES_BLOCK_LEN; + + dst.page = virt_to_page(ct); + dst.offset = offset_in_page(ct); + dst.length = AES_BLOCK_LEN; + +#else + sg_init_one(&src, pt, AES_BLOCK_LEN); + sg_init_one(&dst, ct, AES_BLOCK_LEN); +#endif + + crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN); +#else + crypto_cipher_encrypt_one((void*)tfm, ct, pt); +#endif +} + +static void * rtllib_ccmp_init(int key_idx) +{ + struct rtllib_ccmp_data *priv; + + priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + if (priv == NULL) + goto fail; + memset(priv, 0, sizeof(*priv)); + priv->key_idx = key_idx; + +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + priv->tfm = crypto_alloc_tfm("aes", 0); + if (priv->tfm == NULL) { + printk(KERN_DEBUG "rtllib_crypt_ccmp: could not allocate " + "crypto API aes\n"); + goto fail; + } + #else + priv->tfm = (void*)crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->tfm)) { + printk(KERN_DEBUG "rtllib_crypt_ccmp: could not allocate " + "crypto API aes\n"); + priv->tfm = NULL; + goto fail; + } + #endif + return priv; + +fail: + if (priv) { + if (priv->tfm) + #if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + crypto_free_tfm(priv->tfm); + #else + crypto_free_cipher((void*)priv->tfm); + #endif + kfree(priv); + } + + return NULL; +} + + +static void rtllib_ccmp_deinit(void *priv) +{ + struct rtllib_ccmp_data *_priv = priv; + if (_priv && _priv->tfm) +#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + crypto_free_tfm(_priv->tfm); +#else + crypto_free_cipher((void*)_priv->tfm); +#endif + kfree(priv); +} + + +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 rtllib_hdr_4addr *hdr, + u8 *pn, size_t dlen, u8 *b0, u8 *auth, + u8 *s0) +{ + u8 *pos, qc = 0; + size_t aad_len; + u16 fc; + int a4_included, qc_included; + u8 aad[2 * AES_BLOCK_LEN]; + + fc = le16_to_cpu(hdr->frame_ctl); + a4_included = ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == + (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)); + /* + qc_included = ((WLAN_FC_GET_TYPE(fc) == RTLLIB_FTYPE_DATA) && + (WLAN_FC_GET_STYPE(fc) & 0x08)); + */ + qc_included = ((WLAN_FC_GET_TYPE(fc) == RTLLIB_FTYPE_DATA) && + (WLAN_FC_GET_STYPE(fc) & 0x80)); + aad_len = 22; + if (a4_included) + aad_len += 6; + if (qc_included) { + pos = (u8 *) &hdr->addr4; + if (a4_included) + pos += 6; + qc = *pos & 0x0f; + aad_len += 2; + } + /* CCM Initial Block: + * Flag (Include authentication header, M=3 (8-octet MIC), + * L=1 (2-octet Dlen)) + * Nonce: 0x00 | A2 | PN + * Dlen */ + b0[0] = 0x59; + b0[1] = qc; + memcpy(b0 + 2, hdr->addr2, ETH_ALEN); + memcpy(b0 + 8, pn, CCMP_PN_LEN); + b0[14] = (dlen >> 8) & 0xff; + b0[15] = dlen & 0xff; + + /* AAD: + * FC with bits 4..6 and 11..13 masked to zero; 14 is always one + * A1 | A2 | A3 + * SC with bits 4..15 (seq#) masked to zero + * A4 (if present) + * QC (if present) + */ + pos = (u8 *) hdr; + 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; + aad[22] = pos[0] & 0x0f; + aad[23] = 0; /* all bits masked */ + memset(aad + 24, 0, 8); + if (a4_included) + memcpy(aad + 24, hdr->addr4, ETH_ALEN); + if (qc_included) { + aad[a4_included ? 30 : 24] = qc; + /* rest of QC masked */ + } + + /* Start with the first block and AAD */ + rtllib_ccmp_aes_encrypt(tfm, b0, auth); + xor_block(auth, aad, AES_BLOCK_LEN); + rtllib_ccmp_aes_encrypt(tfm, auth, auth); + xor_block(auth, &aad[AES_BLOCK_LEN], AES_BLOCK_LEN); + rtllib_ccmp_aes_encrypt(tfm, auth, auth); + b0[0] &= 0x07; + b0[14] = b0[15] = 0; + rtllib_ccmp_aes_encrypt(tfm, b0, s0); +} + + + +static int rtllib_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct rtllib_ccmp_data *key = priv; + int data_len, i; + u8 *pos; + struct rtllib_hdr_4addr *hdr; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); +#ifdef _RTL8192_EXT_PATCH_ + u8 broadcastaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + u8 is_broadcast_data = 0; +#endif + if (skb_headroom(skb) < CCMP_HDR_LEN || + skb_tailroom(skb) < CCMP_MIC_LEN || + skb->len < hdr_len) + return -1; + + data_len = skb->len - hdr_len; + pos = skb_push(skb, CCMP_HDR_LEN); + memmove(pos, pos + CCMP_HDR_LEN, hdr_len); + pos += hdr_len; + + i = CCMP_PN_LEN - 1; + while (i >= 0) { + key->tx_pn[i]++; + if (key->tx_pn[i] != 0) + break; + i--; + } + + *pos++ = key->tx_pn[5]; + *pos++ = key->tx_pn[4]; + *pos++ = 0; + *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 rtllib_hdr_4addr *) skb->data; +#ifdef _RTL8192_EXT_PATCH_ + if(tcb_desc->badhoc == 0){ + if(memcmp(hdr->addr1,broadcastaddr,6) == 0){ + is_broadcast_data = 1; + tcb_desc->bHwSec = 0; + } + if(is_multicast_ether_addr(hdr->addr1)){ + tcb_desc->bHwSec = 0; + } + } +#endif + if (!tcb_desc->bHwSec) + { + int blocks, last, len; + u8 *mic; + u8 *b0 = key->tx_b0; + u8 *b = key->tx_b; + u8 *e = key->tx_e; + u8 *s0 = key->tx_s0; + + mic = skb_put(skb, CCMP_MIC_LEN); + + ccmp_init_blocks(key->tfm, hdr, key->tx_pn, data_len, b0, b, s0); + + blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN; + last = data_len % AES_BLOCK_LEN; + + for (i = 1; i <= blocks; i++) { + len = (i == blocks && last) ? last : AES_BLOCK_LEN; + /* Authentication */ + xor_block(b, pos, len); + rtllib_ccmp_aes_encrypt(key->tfm, b, b); + /* Encryption, with counter */ + b0[14] = (i >> 8) & 0xff; + b0[15] = i & 0xff; + rtllib_ccmp_aes_encrypt(key->tfm, b0, e); + xor_block(pos, e, len); + pos += len; + } + + for (i = 0; i < CCMP_MIC_LEN; i++) + mic[i] = b[i] ^ s0[i]; + } + return 0; +} + + +static int rtllib_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct rtllib_ccmp_data *key = priv; + u8 keyidx, *pos; + struct rtllib_hdr_4addr *hdr; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + u8 pn[6]; + + if (skb->len < hdr_len + CCMP_HDR_LEN + CCMP_MIC_LEN) { + key->dot11RSNAStatsCCMPFormatErrors++; + return -1; + } + + hdr = (struct rtllib_hdr_4addr *) skb->data; + pos = skb->data + hdr_len; + keyidx = pos[3]; + if (!(keyidx & (1 << 5))) { + if (net_ratelimit()) { + printk(KERN_DEBUG "CCMP: received packet without ExtIV" + " flag from " MAC_FMT "\n", MAC_ARG(hdr->addr2)); + } + key->dot11RSNAStatsCCMPFormatErrors++; + return -2; + } + keyidx >>= 6; + if (key->key_idx != keyidx) { + printk(KERN_DEBUG "CCMP: RX tkey->key_idx=%d frame " + "keyidx=%d priv=%p\n", key->key_idx, keyidx, priv); + return -6; + } + if (!key->key_set) { + if (net_ratelimit()) { + printk(KERN_DEBUG "CCMP: received packet from " MAC_FMT + " with keyid=%d that does not have a configured" + " key\n", MAC_ARG(hdr->addr2), keyidx); + } + return -3; + } + + pn[0] = pos[7]; + pn[1] = pos[6]; + pn[2] = pos[5]; + pn[3] = pos[4]; + pn[4] = pos[1]; + pn[5] = pos[0]; + pos += 8; +#ifndef _RTL8192_EXT_PATCH_ + if (memcmp(pn, key->rx_pn, CCMP_PN_LEN) <= 0) { + if (net_ratelimit()) { + ; + } + key->dot11RSNAStatsCCMPReplays++; + return -4; + } +#endif + if (!tcb_desc->bHwSec) + { + size_t data_len = skb->len - hdr_len - CCMP_HDR_LEN - CCMP_MIC_LEN; + u8 *mic = skb->data + skb->len - CCMP_MIC_LEN; + u8 *b0 = key->rx_b0; + u8 *b = key->rx_b; + u8 *a = key->rx_a; + int i, blocks, last, len; + + + ccmp_init_blocks(key->tfm, hdr, pn, data_len, b0, a, b); + xor_block(mic, b, CCMP_MIC_LEN); + + blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN; + last = data_len % AES_BLOCK_LEN; + + for (i = 1; i <= blocks; i++) { + len = (i == blocks && last) ? last : AES_BLOCK_LEN; + /* Decrypt, with counter */ + b0[14] = (i >> 8) & 0xff; + b0[15] = i & 0xff; + rtllib_ccmp_aes_encrypt(key->tfm, b0, b); + xor_block(pos, b, len); + /* Authentication */ + xor_block(a, pos, len); + rtllib_ccmp_aes_encrypt(key->tfm, a, a); + pos += len; + } + + if (memcmp(mic, a, CCMP_MIC_LEN) != 0) { + if (net_ratelimit()) { + printk(KERN_DEBUG "CCMP: decrypt failed: STA=" + MAC_FMT "\n", MAC_ARG(hdr->addr2)); + } + key->dot11RSNAStatsCCMPDecryptErrors++; + return -5; + } + + memcpy(key->rx_pn, pn, CCMP_PN_LEN); + } + /* Remove hdr and MIC */ + memmove(skb->data + CCMP_HDR_LEN, skb->data, hdr_len); + skb_pull(skb, CCMP_HDR_LEN); + skb_trim(skb, skb->len - CCMP_MIC_LEN); + + return keyidx; +} + + +static int rtllib_ccmp_set_key(void *key, int len, u8 *seq, void *priv) +{ + struct rtllib_ccmp_data *data = priv; + int keyidx; + struct crypto_tfm *tfm = data->tfm; + + keyidx = data->key_idx; + memset(data, 0, sizeof(*data)); + data->key_idx = keyidx; + data->tfm = tfm; + if (len == CCMP_TK_LEN) { + memcpy(data->key, key, CCMP_TK_LEN); + data->key_set = 1; + if (seq) { + data->rx_pn[0] = seq[5]; + data->rx_pn[1] = seq[4]; + data->rx_pn[2] = seq[3]; + data->rx_pn[3] = seq[2]; + data->rx_pn[4] = seq[1]; + data->rx_pn[5] = seq[0]; + } + crypto_cipher_setkey((void*)data->tfm, data->key, CCMP_TK_LEN); + } else if (len == 0) + data->key_set = 0; + else + return -1; + + return 0; +} + + +static int rtllib_ccmp_get_key(void *key, int len, u8 *seq, void *priv) +{ + struct rtllib_ccmp_data *data = priv; + + if (len < CCMP_TK_LEN) + return -1; + + if (!data->key_set) + return 0; + memcpy(key, data->key, CCMP_TK_LEN); + + if (seq) { + seq[0] = data->tx_pn[5]; + seq[1] = data->tx_pn[4]; + seq[2] = data->tx_pn[3]; + seq[3] = data->tx_pn[2]; + seq[4] = data->tx_pn[1]; + seq[5] = data->tx_pn[0]; + } + + return CCMP_TK_LEN; +} + + +static char * rtllib_ccmp_print_stats(char *p, void *priv) +{ + struct rtllib_ccmp_data *ccmp = priv; + p += sprintf(p, "key[%d] alg=CCMP key_set=%d " + "tx_pn=%02x%02x%02x%02x%02x%02x " + "rx_pn=%02x%02x%02x%02x%02x%02x " + "format_errors=%d replays=%d decrypt_errors=%d\n", + ccmp->key_idx, ccmp->key_set, + MAC_ARG(ccmp->tx_pn), MAC_ARG(ccmp->rx_pn), + ccmp->dot11RSNAStatsCCMPFormatErrors, + ccmp->dot11RSNAStatsCCMPReplays, + ccmp->dot11RSNAStatsCCMPDecryptErrors); + + return p; +} + +void rtllib_ccmp_null(void) +{ + return; +} + +static struct rtllib_crypto_ops rtllib_crypt_ccmp = { + .name = "CCMP", + .init = rtllib_ccmp_init, + .deinit = rtllib_ccmp_deinit, + .encrypt_mpdu = rtllib_ccmp_encrypt, + .decrypt_mpdu = rtllib_ccmp_decrypt, + .encrypt_msdu = NULL, + .decrypt_msdu = NULL, + .set_key = rtllib_ccmp_set_key, + .get_key = rtllib_ccmp_get_key, + .print_stats = rtllib_ccmp_print_stats, + .extra_prefix_len = CCMP_HDR_LEN, + .extra_postfix_len = CCMP_MIC_LEN, + .owner = THIS_MODULE, +}; + + +int __init rtllib_crypto_ccmp_init(void) +{ + return rtllib_register_crypto_ops(&rtllib_crypt_ccmp); +} + + +void __exit rtllib_crypto_ccmp_exit(void) +{ + rtllib_unregister_crypto_ops(&rtllib_crypt_ccmp); +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_ccmp_null); + +module_init(rtllib_crypto_ccmp_init); +module_exit(rtllib_crypto_ccmp_exit); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/EndianFree.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/EndianFree.h @@ -0,0 +1,160 @@ +#ifndef __INC_ENDIANFREE_H +#define __INC_ENDIANFREE_H + +/* + * Call endian free function when + * 1. Read/write packet content. + * 2. Before write integer to IO. + * 3. After read integer from IO. + */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +#ifndef bool +typedef enum{false = 0, true} bool; +#endif +#endif + +#define __MACHINE_LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ +#define __MACHINE_BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net, ppc */ + +#define BYTE_ORDER __MACHINE_LITTLE_ENDIAN + +#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN +#define EF1Byte(_val) ((u8)(_val)) +#define EF2Byte(_val) ((u16)(_val)) +#define EF4Byte(_val) ((u32)(_val)) + +#else +#define EF1Byte(_val) ((u8)(_val)) +#define EF2Byte(_val) (((((u16)(_val))&0x00ff)<<8)|((((u16)(_val))&0xff00)>>8)) +#define EF4Byte(_val) (((((u32)(_val))&0x000000ff)<<24)|\ + ((((u32)(_val))&0x0000ff00)<<8)|\ + ((((u32)(_val))&0x00ff0000)>>8)|\ + ((((u32)(_val))&0xff000000)>>24)) +#endif + +#define ReadEF1Byte(_ptr) EF1Byte(*((u8 *)(_ptr))) +#define ReadEF2Byte(_ptr) EF2Byte(*((u16 *)(_ptr))) +#define ReadEF4Byte(_ptr) EF4Byte(*((u32 *)(_ptr))) + +#define WriteEF1Byte(_ptr, _val) (*((u8 *)(_ptr)))=EF1Byte(_val) +#define WriteEF2Byte(_ptr, _val) (*((u16 *)(_ptr)))=EF2Byte(_val) +#define WriteEF4Byte(_ptr, _val) (*((u32 *)(_ptr)))=EF4Byte(_val) +#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN +#define H2N1BYTE(_val) ((u8)(_val)) +#define H2N2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\ + ((((u16)(_val))&0xff00)>>8)) +#define H2N4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\ + ((((u32)(_val))&0x0000ff00)<<8) |\ + ((((u32)(_val))&0x00ff0000)>>8) |\ + ((((u32)(_val))&0xff000000)>>24)) +#else +#define H2N1BYTE(_val) ((u8)(_val)) +#define H2N2BYTE(_val) ((u16)(_val)) +#define H2N4BYTE(_val) ((u32)(_val)) +#endif + +#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN +#define N2H1BYTE(_val) ((u8)(_val)) +#define N2H2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\ + ((((u16)(_val))&0xff00)>>8)) +#define N2H4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\ + ((((u32)(_val))&0x0000ff00)<<8) |\ + ((((u32)(_val))&0x00ff0000)>>8) |\ + ((((u32)(_val))&0xff000000)>>24)) +#else +#define N2H1BYTE(_val) ((u8)(_val)) +#define N2H2BYTE(_val) ((u16)(_val)) +#define N2H4BYTE(_val) ((u32)(_val)) +#endif + +#define BIT_LEN_MASK_32(__BitLen) (0xFFFFFFFF >> (32 - (__BitLen))) +#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) + +#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) (EF4Byte(*((u32 *)(__pStart)))) + +#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \ + & \ + BIT_LEN_MASK_32(__BitLen) \ + ) + +#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ + & \ + ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \ + ) + +#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \ + *((u32 *)(__pStart)) = \ + EF4Byte( \ + LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ + | \ + ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \ + ); + + +#define BIT_LEN_MASK_16(__BitLen) \ + (0xFFFF >> (16 - (__BitLen))) + +#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \ + (BIT_LEN_MASK_16(__BitLen) << (__BitOffset)) + +#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ + (EF2Byte(*((u16 *)(__pStart)))) + +#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \ + & \ + BIT_LEN_MASK_16(__BitLen) \ + ) + +#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ + & \ + ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \ + ) + +#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \ + *((u16 *)(__pStart)) = \ + EF2Byte( \ + LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ + | \ + ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \ + ); + +#define BIT_LEN_MASK_8(__BitLen) \ + (0xFF >> (8 - (__BitLen))) + +#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \ + (BIT_LEN_MASK_8(__BitLen) << (__BitOffset)) + +#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ + (EF1Byte(*((u8 *)(__pStart)))) + +#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \ + & \ + BIT_LEN_MASK_8(__BitLen) \ + ) + +#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ + ( \ + LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ + & \ + ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \ + ) + +#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \ + *((u8 *)(__pStart)) = \ + EF1Byte( \ + LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ + | \ + ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \ + ); + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/wapi.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/wapi.c @@ -0,0 +1,1842 @@ +#if defined (RTL8192S_WAPI_SUPPORT) + +#include +#include +#include "wapi.h" +#include "wapi_interface.h" +#include "rtllib.h" + +#define LITTLE_ENDIAN +#define ENCRYPT 0 +#define DECRYPT 1 + +u32 wapi_debug_component = WAPI_INIT | + WAPI_ERR ; + +void WapiInit(struct rtllib_device *ieee) +{ + PRT_WAPI_T pWapiInfo; + int i; + + WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__); + RT_ASSERT_RET(ieee); + + pWapiInfo = &ieee->wapiInfo; + pWapiInfo->bWapiEnable = false; + + INIT_LIST_HEAD(&ieee->cache_frag_list); + + INIT_LIST_HEAD(&pWapiInfo->wapiBKIDIdleList); + INIT_LIST_HEAD(&pWapiInfo->wapiBKIDStoreList); + for(i=0;iwapiBKID[i].list, &pWapiInfo->wapiBKIDIdleList); + } + + INIT_LIST_HEAD(&pWapiInfo->wapiSTAIdleList); + INIT_LIST_HEAD(&pWapiInfo->wapiSTAUsedList); + for(i=0;iwapiSta[i].list, &pWapiInfo->wapiSTAIdleList); + } + + spin_lock_init(&ieee->wapi_queue_lock); + + ieee->wapi_queue = (WAPI_QUEUE *)kmalloc((sizeof(WAPI_QUEUE)), GFP_KERNEL); + if (!ieee->wapi_queue) { + return; + } + memset((void *)ieee->wapi_queue, 0, sizeof (WAPI_QUEUE)); + WAPI_InitQueue(ieee->wapi_queue, WAPI_MAX_QUEUE_LEN, WAPI_MAX_BUFF_LEN); + + WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__); +} + +void WapiExit(struct rtllib_device *ieee) +{ + WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__); + RT_ASSERT_RET(ieee); + + if(ieee->wapi_queue) + kfree(ieee->wapi_queue); + ieee->wapi_queue = 0; + + WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__); +} + +void WapiCreateAppEventAndSend( + struct rtllib_device *ieee, + u8 *pbuffer, + u16 buf_len, + u8 *DestAddr, + u8 bUpdateBK, + u8 bUpdateUSK, + u8 bUpdateMSK, + u8 RcvPktType, + u8 bDisconnect +) +{ + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + PRT_WAPI_STA_INFO pWapiSta = NULL; + u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 bFind = false, bRecvAEPacket = false, bRecvASUEPacket = false, EventId = 0; + + WAPI_TRACE(WAPI_API, "==========> %s\n", __FUNCTION__); + WAPI_TRACE(WAPI_API, "DestAddr="MAC_FMT" bUpdateBK=%d bUpdateUSK=%d bUpdateMSK=%d RcvPktType=%d bDisconnect=%d\n", + MAC_ARG(DestAddr), bUpdateBK, bUpdateUSK, bUpdateMSK, RcvPktType,bDisconnect); + + /*if(!pWapiInfo->bWapiEnable){ + WAPI_TRACE(WAPI_ERR,"%s: ieee->WapiSupport = 0!!\n",__FUNCTION__); + return; + }*/ + + if(list_empty(&pWapiInfo->wapiSTAUsedList)){ + bFind = false; + }else{ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(DestAddr,pWapiSta->PeerMacAddr,ETH_ALEN)){ + bFind = true; + break; + } + } + } + + WAPI_TRACE(WAPI_API, "%s: DestAddr="MAC_FMT" bFind=%d\n", __FUNCTION__, MAC_ARG(DestAddr), bFind); + switch(RcvPktType){ + case WAPI_PREAUTHENTICATE: + EventId = WAPI_EVENT_RCV_PREAUTHENTICATE; + bRecvAEPacket = true; + bRecvASUEPacket = false; + break; + case WAPI_ACCESS_AUTHENTICATE_REQUEST: + EventId = WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_REQUEST; + bRecvAEPacket = true; + bRecvASUEPacket = false; + break; + case WAPI_USK_RESPONSE: + EventId = WAPI_EVENT_RCV_USK_RESPONSE; + bRecvAEPacket = true; + bRecvASUEPacket = false; + break; + case WAPI_MSK_RESPONSE: + EventId = WAPI_EVENT_RCV_MSK_RESPONSE; + bRecvAEPacket = true; + bRecvASUEPacket = false; + break; + case WAPI_STAKEY_REQUEST: + EventId = WAPI_EVENT_RCV_STAKEY_REQUEST; + bRecvAEPacket = false; + bRecvASUEPacket = true; + break; + case WAPI_AUTHENTICATE_ACTIVE: + EventId = WAPI_EVENT_RCV_AUTHENTICATE_ACTIVE; + bRecvAEPacket = false; + bRecvASUEPacket = true; + break; + case WAPI_ACCESS_AUTHENTICATE_RESPONSE: + EventId = WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_RESPONSE; + bRecvAEPacket = false; + bRecvASUEPacket = true; + break; + case WAPI_USK_REQUEST: + EventId = WAPI_EVENT_RCV_USK_REQUEST; + bRecvAEPacket = false; + bRecvASUEPacket = true; + break; + case WAPI_USK_CONFIRM: + EventId = WAPI_EVENT_RCV_USK_CONFIRM; + bRecvAEPacket = false; + bRecvASUEPacket = true; + break; + case WAPI_MSK_NOTIFICATION: + EventId = WAPI_EVENT_RCV_MSK_NOTIFICATION; + bRecvAEPacket = false; + bRecvASUEPacket = true; + break; + default: + break; + } + + if(ieee->iw_mode == IW_MODE_INFRA){ + if(bRecvAEPacket || bUpdateMSK){ + goto out; + } + if(bRecvASUEPacket){ + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, pbuffer, buf_len); + goto out; + } + if(bUpdateBK && bFind){ + EventId = WAPI_EVENT_ASUE_UPDATE_BK; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + } + if(bUpdateUSK&& bFind){ + EventId = WAPI_EVENT_ASUE_UPDATE_USK; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + } + if(bDisconnect && bFind){ + EventId = WAPI_EVENT_DISCONNECT; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + } + } + else if(ieee->iw_mode == IW_MODE_ADHOC) + { + if((bFind )&& (!pWapiSta->bSetkeyOk) && (bUpdateBK ||bUpdateUSK||bUpdateMSK)) + goto out; + if(bRecvASUEPacket){ + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, pbuffer, buf_len); + if(EventId != WAPI_EVENT_RCV_USK_REQUEST) + goto out; + } + if((!bFind) && (!bDisconnect) && (!bUpdateMSK)) + { + if(!list_empty(&pWapiInfo->wapiSTAIdleList)) + { + pWapiSta =(PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list); + list_del_init(&pWapiSta->list); + list_add_tail(&pWapiSta->list, &pWapiInfo->wapiSTAUsedList); + WAPI_TRACE(WAPI_API, "%s: Add wapi station "MAC_FMT"\n", __FUNCTION__, MAC_ARG(DestAddr)); + memcpy(pWapiSta->PeerMacAddr,DestAddr,6); + memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16); + memcpy(pWapiSta->lastRxUnicastPN, WapiASUEPNInitialValueSrc, 16); + } + + pWapiInfo->bFirstAuthentiateInProgress= true; + + EventId = WAPI_EVENT_FIRST_AUTHENTICATOR; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + }else{ + if(bRecvAEPacket){ + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, pbuffer, buf_len); + goto out; + } + if(bDisconnect){ + EventId = WAPI_EVENT_DISCONNECT; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + } + if(bUpdateBK){ + EventId = WAPI_EVENT_AE_UPDATE_BK; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + } + if(bUpdateUSK){ + EventId = WAPI_EVENT_AE_UPDATE_USK; + WAPI_CreateEvent_Send(ieee, EventId, DestAddr, NULL, 0); + goto out; + } + if(bUpdateMSK){ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(pWapiSta->bSetkeyOk){ + EventId = WAPI_EVENT_AE_UPDATE_MSK; + WAPI_CreateEvent_Send(ieee, EventId, pWapiSta->PeerMacAddr, NULL, 0); + } + } + goto out; + } + } + } + +out: + WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__); + return; +} + + +void WapiReturnAllStaInfo(struct rtllib_device *ieee) +{ + PRT_WAPI_T pWapiInfo; + PRT_WAPI_STA_INFO pWapiStaInfo; + PRT_WAPI_BKID pWapiBkid; + WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__); + + pWapiInfo = &ieee->wapiInfo; + + while(!list_empty(&(pWapiInfo->wapiSTAUsedList))) + { + pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAUsedList.next, RT_WAPI_STA_INFO, list); + list_del_init(&pWapiStaInfo->list); + memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN); + pWapiStaInfo->bSetkeyOk = 0; + list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList); + } + + while(!list_empty(&(pWapiInfo->wapiBKIDStoreList))) + { + pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list); + list_del_init(&pWapiBkid->list); + memset(pWapiBkid->bkid,0,16); + list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList); + } + WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__); +} + +void WapiReturnOneStaInfo(struct rtllib_device *ieee, u8 *MacAddr, u8 from_app) +{ + PRT_WAPI_T pWapiInfo; + PRT_WAPI_STA_INFO pWapiStaInfo = NULL; + PRT_WAPI_BKID pWapiBkid = NULL; + + pWapiInfo = &ieee->wapiInfo; + + WAPI_TRACE(WAPI_API, "==========> %s\n", __FUNCTION__); + + if(!from_app) + WapiCreateAppEventAndSend(ieee,NULL,0,MacAddr, false,false,false,0,true); + if(list_empty(&(pWapiInfo->wapiSTAUsedList))){ + return; + }else{ + list_for_each_entry(pWapiStaInfo, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(pWapiStaInfo->PeerMacAddr,MacAddr,ETH_ALEN)){ + pWapiStaInfo->bAuthenticateInProgress = false; + pWapiStaInfo->bSetkeyOk = false; + memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN); + list_del_init(&pWapiStaInfo->list); + list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList); + break; + } + + } + } + + if(ieee->iw_mode == IW_MODE_INFRA){ + while(!list_empty(&(pWapiInfo->wapiBKIDStoreList))) + { + pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list); + list_del_init(&pWapiBkid->list); + memset(pWapiBkid->bkid,0,16); + list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList); + } + } + WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__); + return; +} + +void WapiFreeAllStaInfo(struct rtllib_device *ieee) +{ + PRT_WAPI_T pWapiInfo; + PRT_WAPI_STA_INFO pWapiStaInfo; + PRT_WAPI_BKID pWapiBkid; + WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__); + pWapiInfo = &ieee->wapiInfo; + + WapiReturnAllStaInfo(ieee); + while(!list_empty(&(pWapiInfo->wapiSTAIdleList))) + { + pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list); + list_del_init(&pWapiStaInfo->list); + } + + while(!list_empty(&(pWapiInfo->wapiBKIDIdleList))) + { + pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list); + list_del_init(&pWapiBkid->list); + } + WAPI_TRACE(WAPI_INIT, "<=========== %s\n", __FUNCTION__); + return; +} + +u8 SecIsWAIPacket(struct rtllib_device* ieee,struct sk_buff *skb) +{ + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + PRT_WAPI_STA_INFO pWapiSta = NULL; + u8 WaiPkt = 0, *pTaddr, bFind = false; + u8 Offset_TypeWAI = 24 + 6; + struct rtllib_hdr_3addrqos *header; + u16 mask = 1, fc = 0; + + if((!pWapiInfo->bWapiEnable) || (!ieee->wapiInfo.bWapiEnable)) + return 0; + + header = (struct rtllib_hdr_3addrqos *)skb->data; + + fc = le16_to_cpu(header->frame_ctl); + if(fc & RTLLIB_FCTL_WEP) + return 0; + + pTaddr = header->addr2; + if(list_empty(&pWapiInfo->wapiSTAUsedList)){ + bFind = false; + }else{ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){ + if(!memcmp(pTaddr,pWapiSta->PeerMacAddr,6)){ + bFind = true; + break; + } + } + } + + WAPI_TRACE(WAPI_API, "%s: bFind=%d pTaddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(pTaddr)); + + if( IsQoSDataFrame(skb->data) ){ + Offset_TypeWAI += sQoSCtlLng; + } + + if((header->frame_ctl & (mask<<14)) != 0){ + Offset_TypeWAI += WAPI_EXT_LEN; + } + + if( skb->len < (Offset_TypeWAI+1) ){ + WAPI_TRACE(WAPI_ERR, "%s(): invalid length(%d)\n",__FUNCTION__,skb->len); + return 0; + } + + if( (skb->data[Offset_TypeWAI]==0x88) && (skb->data[Offset_TypeWAI+1]==0xb4) ){ + WaiPkt = skb->data[Offset_TypeWAI+5]; + if(ieee->iw_mode == IW_MODE_ADHOC){ + if(bFind){ + if((WaiPkt == 8) && (pWapiInfo->wapiTxMsk.bSet) && (pWapiSta->wapiMsk.bSet) && ((skb->data[Offset_TypeWAI+14] & 0x10)==0)){ + printk("==============> %s(): Receive USK Request After MSK set!\n", __FUNCTION__); + DelStaInfo(ieee, pTaddr); + WapiReturnOneStaInfo (ieee, pTaddr, 0); + WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0); + } + + } + } + }else{ + WAPI_TRACE(WAPI_API, "%s(): non wai packet\n",__FUNCTION__); + } + + WAPI_TRACE(WAPI_API, "%s(): Recvd WAI frame. IsWAIPkt(%d)\n",__FUNCTION__, WaiPkt); + + return WaiPkt; +} + +/****************** +*********************/ +u8 Wapi_defragment(struct rtllib_device* ieee,u8* data, u16 len, + u8* pTaddr,bool bAuthenticator,u8* rxbuffer,u16* rxbuffer_len) +{ + PRT_CACHE_INFO pcache_info = NULL; + bool bfind = false; + + if(!list_empty(&ieee->cache_frag_list)){ + list_for_each_entry(pcache_info, &ieee->cache_frag_list, list) { + if((memcmp(pcache_info->saddr,pTaddr,ETH_ALEN)==0) + && (pcache_info->bAuthenticator == bAuthenticator)) + { + bfind = true; + break; + } + } + } + WAPI_TRACE(WAPI_RX, "%s: bFind=%d pTaddr="MAC_FMT"\n", __FUNCTION__, bfind, MAC_ARG(pTaddr)); + if(bfind == false) { + pcache_info = kmalloc(sizeof(RT_CACHE_INFO),GFP_ATOMIC); + if(pcache_info == NULL){ + WAPI_TRACE(WAPI_ERR,"%s(): can't malloc mem\n", __FUNCTION__); + goto drop2; + } + memset(pcache_info,0,sizeof(RT_CACHE_INFO)); + if(data[11] == 0x1){ + WAPI_TRACE(WAPI_RX, "%s(): First fragment, and have More fragments\n",__FUNCTION__); + memcpy(&(pcache_info->recvSeq),data+8, 2); + if(data[10] != 0x00) + { + WAPI_TRACE(WAPI_ERR, "%s(): First fragment,but fragnum is not 0.\n",__FUNCTION__); + goto drop1; + }else{ + data[10] = 0x0; + data[11] = 0x0; + if (len > 2000) { + WAPI_TRACE(WAPI_ERR,"111****************************%s():cache buf len is not enough: %d\n",__FUNCTION__,len); + goto drop1; + } + pcache_info->lastFragNum= 0x00; + memcpy(pcache_info->cache_buffer,data,len); + pcache_info->cache_buffer_len = len; + pcache_info->bAuthenticator = bAuthenticator; + memcpy(pcache_info->saddr,pTaddr,ETH_ALEN); + list_add_tail(&pcache_info->list, &ieee->cache_frag_list); + WAPI_TRACE(WAPI_RX, "%s(): First fragment, allocate cache to store.\n",__FUNCTION__); + goto drop2; + } + }else{ + if(data[10] == 0){ + WAPI_TRACE(WAPI_RX, "%s(): First fragment, no More fragment, ready to send to App.\n",__FUNCTION__); + if (len > 2000) { + WAPI_TRACE(WAPI_ERR,"222****************************%s():cache buf len is not enough: %d\n",__FUNCTION__,len); + goto drop1; + } + memcpy(rxbuffer,data,len); + *rxbuffer_len = len; + goto success; + }else{ + WAPI_TRACE(WAPI_ERR, "%s(): First fragment,no More fragment, but fragnum is not 0.\n",__FUNCTION__); + goto drop1; + } + } + } + else{ + if(data[11] == 0x1){ + if(memcmp(data+8,&(pcache_info->recvSeq),2)) { + WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, More fragment, seq num error.\n",__FUNCTION__); + list_del(&pcache_info->list); + goto drop1; + }else{ + if(data[10] == (pcache_info->lastFragNum+1)){ + WAPI_TRACE(WAPI_RX, "%s(): Not First fragment, More fragment, same seq num, copy to cache.\n",__FUNCTION__); + if ((pcache_info->cache_buffer_len + len - 12) > 2000) { + WAPI_TRACE(WAPI_ERR,"333****************************%s():cache buf len is not enough: %d\n",__FUNCTION__,pcache_info->cache_buffer_len + len - 12); + list_del(&pcache_info->list); + goto drop1; + } + memcpy(pcache_info->cache_buffer+(pcache_info->cache_buffer_len),data+12,len-12); + pcache_info->cache_buffer_len += len-12; + pcache_info->lastFragNum = data[10]; + goto drop2; + }else{ + WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, More fragment, same seq num, fragnum error.\n",__FUNCTION__); + list_del(&pcache_info->list); + goto drop1; + } + } + }else{ + if(memcmp(data+8,&(pcache_info->recvSeq),2)) { + WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, no More fragment, seq num error.\n",__FUNCTION__); + list_del(&pcache_info->list); + goto drop1; + }else{ + if(data[10] == (pcache_info->lastFragNum+1)){ + WAPI_TRACE(WAPI_RX, "%s(): Not First fragment, no More fragment, same seq num, ready to send to App.\n",__FUNCTION__); + if ((pcache_info->cache_buffer_len + len - 12) > 2000) { + WAPI_TRACE(WAPI_ERR,"444****************************%s():cache buf len is not enough: %d\n",__FUNCTION__,pcache_info->cache_buffer_len + len - 12); + list_del(&pcache_info->list); + goto drop1; + } + memcpy(pcache_info->cache_buffer+(pcache_info->cache_buffer_len),data+12,len-12); + pcache_info->cache_buffer_len += len-12; + memcpy(rxbuffer,pcache_info->cache_buffer,pcache_info->cache_buffer_len); + *rxbuffer_len = pcache_info->cache_buffer_len; + list_del(&pcache_info->list); + goto success; + }else{ + WAPI_TRACE(WAPI_ERR, "%s(): Not First fragment, no More fragment, same seq num, fragnum error.\n",__FUNCTION__); + list_del(&pcache_info->list); + goto drop1; + } + } + } + } + +drop1: + if(pcache_info) + kfree(pcache_info); + pcache_info = NULL; + return false; +drop2: + return false; +success: + if(pcache_info) + kfree(pcache_info); + pcache_info = NULL; + return true; +} + +/**************************************************************************** + * data[8-9]: Sequence Number + * data[10]: Fragment No + * data[11]: Flag = 1 indicates more data. + *****************************************************************************/ +void WapiHandleRecvPacket(struct rtllib_device* ieee,struct sk_buff *skb,u8 WaiPkt) +{ + PRT_WAPI_T pWapiInfo; + struct rtllib_hdr_3addrqos *hdr; + u8 *pTaddr, *recvPtr, *rxbuffer; + u8 bAuthenticator = false, receive_result = false; + int hdrlen = 0; + u16 recvLength = 0, fc = 0, rxbuffer_len = 0; + + WAPI_TRACE(WAPI_RX, "===========> %s: WaiPkt is %d\n", __FUNCTION__,WaiPkt); + + hdr = (struct rtllib_hdr_3addrqos *)skb->data; + pTaddr = hdr->addr2; + fc = hdr->frame_ctl; + hdrlen = rtllib_get_hdrlen(fc); + + pWapiInfo = &(ieee->wapiInfo); + if((WaiPkt == WAPI_CERTIFICATE_AUTHENTICATE_REQUEST) + ||(WaiPkt == WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE)) + { + WAPI_TRACE(WAPI_RX, "%s: Valid Wai Packet \n", __FUNCTION__); + return; + }else{ + switch(WaiPkt) + { + case WAPI_PREAUTHENTICATE: + case WAPI_ACCESS_AUTHENTICATE_REQUEST: + case WAPI_USK_RESPONSE: + case WAPI_MSK_RESPONSE: + bAuthenticator = true; + break; + default: + break; + } + recvLength = skb->len - hdrlen - (SNAP_SIZE + sizeof(u16)); + recvPtr = skb->data + hdrlen + (SNAP_SIZE + sizeof(u16)); + + rxbuffer = kmalloc(2000, GFP_ATOMIC); + if(NULL == rxbuffer) + return; + + receive_result = Wapi_defragment(ieee,recvPtr, recvLength,pTaddr,bAuthenticator,rxbuffer,&rxbuffer_len); + if(receive_result) + WapiCreateAppEventAndSend(ieee, rxbuffer, rxbuffer_len, pTaddr, false,false, false, WaiPkt, false); + + kfree(rxbuffer); + } + WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__); +} + +void WapiSetIE(struct rtllib_device *ieee) +{ + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + u16 protocolVer = 1; + u16 akmCnt = 1; + u16 suiteCnt = 1; + u16 capability = 0; + u8 OUI[3]; + + OUI[0] = 0x00; + OUI[1] = 0x14; + OUI[2] = 0x72; + + pWapiInfo->wapiIELength = 0; + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &protocolVer, 2); + pWapiInfo->wapiIELength +=2; + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &akmCnt, 2); + pWapiInfo->wapiIELength +=2; + + if(pWapiInfo->bWapiPSK){ + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3); + pWapiInfo->wapiIELength +=3; + pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x2; + pWapiInfo->wapiIELength +=1; + }else{ + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3); + pWapiInfo->wapiIELength +=3; + pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1; + pWapiInfo->wapiIELength +=1; + } + + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &suiteCnt, 2); + pWapiInfo->wapiIELength +=2; + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3); + pWapiInfo->wapiIELength +=3; + pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1; + pWapiInfo->wapiIELength +=1; + + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3); + pWapiInfo->wapiIELength +=3; + pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1; + pWapiInfo->wapiIELength +=1; + + memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &capability, 2); + pWapiInfo->wapiIELength +=2; +} + + +/* PN1 > PN2, return 1, + * else return 0. + */ +u32 WapiComparePN(u8 *PN1, u8 *PN2) +{ + char i; + + if ((NULL == PN1) || (NULL == PN2)) + return 1; + + if ((PN2[15] - PN1[15]) & 0x80) + return 1; + + for (i=16; i>0; i--) + { + if(PN1[i-1] == PN2[i-1]) + continue; + else if(PN1[i-1] > PN2[i-1]) + return 1; + else + return 0; + } + + return 0; +} + +/* AddCount: 1 or 2. + * If overflow, return 1, + * else return 0. + */ +u8 WapiIncreasePN(u8 *PN, u8 AddCount) +{ + u8 i; + + if (NULL == PN) + return 1; + /* + if(AddCount == 2){ + printk("############################%s(): PN[0]=0x%x\n", __FUNCTION__, PN[0]); + if(PN[0] == 0x48){ + PN[0] += AddCount; + return 1; + }else{ + PN[0] += AddCount; + return 0; + } + } + */ + + for (i=0; i<16; i++) + { + if (PN[i] + AddCount <= 0xff) + { + PN[i] += AddCount; + return 0; + } + else + { + PN[i] += AddCount; + AddCount = 1; + } + } + + return 1; +} + + +void WapiGetLastRxUnicastPNForQoSData( + u8 UserPriority, + PRT_WAPI_STA_INFO pWapiStaInfo, + u8 *PNOut +) +{ + WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__); + switch(UserPriority) + { + case 0: + case 3: + memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBEQueue,16); + break; + case 1: + case 2: + memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBKQueue,16); + break; + case 4: + case 5: + memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVIQueue,16); + break; + case 6: + case 7: + memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVOQueue,16); + break; + default: + WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__); + break; + } + WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__); +} + + +void WapiSetLastRxUnicastPNForQoSData( + u8 UserPriority, + u8 *PNIn, + PRT_WAPI_STA_INFO pWapiStaInfo +) +{ + WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__); + switch(UserPriority) + { + case 0: + case 3: + memcpy(pWapiStaInfo->lastRxUnicastPNBEQueue,PNIn,16); + break; + case 1: + case 2: + memcpy(pWapiStaInfo->lastRxUnicastPNBKQueue,PNIn,16); + break; + case 4: + case 5: + memcpy(pWapiStaInfo->lastRxUnicastPNVIQueue,PNIn,16); + break; + case 6: + case 7: + memcpy(pWapiStaInfo->lastRxUnicastPNVOQueue,PNIn,16); + break; + default: + WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__); + break; + } + WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__); +} + + +/**************************************************************************** +TRUE-----------------bRxReorder == FALSE not RX-Reorder +FALSE----------------bRxReorder == TRUE do RX Reorder +add to support WAPI to N-mode +*****************************************************************************/ +u8 WapiCheckPnInSwDecrypt( + struct rtllib_device *ieee, + struct sk_buff *pskb +) +{ + struct rtllib_hdr_3addrqos *header; + u16 fc; + u8 *pDaddr, *pTaddr, *pRaddr; + u8 ret = false; + + header = (struct rtllib_hdr_3addrqos *)pskb->data; + pTaddr = header->addr2; + pRaddr = header->addr1; + fc = le16_to_cpu(header->frame_ctl); + + if((fc & RTLLIB_FCTL_TODS) == RTLLIB_FCTL_TODS) + pDaddr = header->addr3; + else + pDaddr = header->addr1; + + if(eqMacAddr(pRaddr, ieee->dev->dev_addr) && + !is_multicast_ether_addr(pDaddr) && + ieee->current_network.qos_data.active && + IsQoSDataFrame(pskb->data) && ieee->pHTInfo->bCurrentHTSupport && + ieee->pHTInfo->bCurRxReorderEnable) + ret = false; + else + ret = true; + + WAPI_TRACE(WAPI_RX, "%s: return %d\n", __FUNCTION__, ret); + return ret; +} + + +/**************************************************************************** +TRUE-----------------Drop +FALSE---------------- handle +add to support WAPI to N-mode +*****************************************************************************/ +u8 WapiCheckDropForRxReorderCase( + struct rtllib_device *ieee, + struct rtllib_rxb* prxb +) +{ + PRT_WAPI_T pWapiInfo = &(ieee->wapiInfo); + u8 *pLastRecvPN = NULL; + u8 bFind = false; + PRT_WAPI_STA_INFO pWapiSta = NULL; + + if(!pWapiInfo->bWapiEnable) + return false; + + if(list_empty(&pWapiInfo->wapiSTAUsedList)){ + bFind = false; + }else{ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(prxb->WapiSrcAddr,pWapiSta->PeerMacAddr,ETH_ALEN)){ + bFind = true; + break; + } + } + } + WAPI_TRACE(WAPI_RX, "%s: bFind=%d prxb->WapiSrcAddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(prxb->WapiSrcAddr)); + + if(bFind){ + switch(prxb->UserPriority) + { + case 0: + case 3: + pLastRecvPN = pWapiSta->lastRxUnicastPNBEQueue; + break; + case 1: + case 2: + pLastRecvPN = pWapiSta->lastRxUnicastPNBKQueue; + break; + case 4: + case 5: + pLastRecvPN = pWapiSta->lastRxUnicastPNVIQueue; + break; + case 6: + case 7: + pLastRecvPN = pWapiSta->lastRxUnicastPNVOQueue; + break; + default: + WAPI_TRACE(WAPI_ERR,"%s: Unknown TID \n",__FUNCTION__); + break; + } + + if(!WapiComparePN(prxb->WapiTempPN,pLastRecvPN)) + { + WAPI_TRACE(WAPI_RX,"%s: Equal PN!!\n",__FUNCTION__); + return true; + } + else + { + memcpy(pLastRecvPN,prxb->WapiTempPN,16); + return false; + } + } + else + return false; +} + +int WapiSendWaiPacket(struct rtllib_device *ieee, struct sk_buff *pskb) +{ + struct sk_buff * newskb = NULL; + struct rtllib_hdr_3addr *mac_hdr=NULL; + cb_desc *tcb_desc = NULL; + + RT_ASSERT_RET_VALUE(ieee,-1); + RT_ASSERT_RET_VALUE(pskb,-1); + + if(pskb->len < (14 + sizeof(struct rtllib_hdr_3addr))) + { + WAPI_TRACE(WAPI_ERR, "%s: WAI frame is too small!!\n", __FUNCTION__); + goto failed; + } + + skb_pull(pskb, 14); + + newskb = dev_alloc_skb(pskb->len+ieee->tx_headroom); + if(!newskb){ + WAPI_TRACE(WAPI_ERR,"%s: can't alloc skb\n",__FUNCTION__); + goto failed; + } + skb_reserve(newskb, ieee->tx_headroom); + memcpy(skb_put(newskb, pskb->len), pskb->data, pskb->len); + dev_kfree_skb_any(pskb); + /* called with 2nd parm 0, no tx mgmt lock required */ + rtllib_sta_wakeup(ieee,0); + + tcb_desc = (cb_desc *)(newskb->cb + MAX_DEV_ADDR_SIZE); +#ifdef RTL8192SU_FPGA_UNSPECIFIED_NETWORK + tcb_desc->queue_index = NORMAL_QUEUE; +#else + tcb_desc->queue_index = BE_QUEUE; +#endif + tcb_desc->data_rate = 0x02; + tcb_desc->bTxUseDriverAssingedRate = true; + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; +#ifdef _RTL8192_EXT_PATCH_ + tcb_desc->macId = 0; +#endif + + mac_hdr = (struct rtllib_hdr_3addr *)(newskb->data); + mac_hdr->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; + + if(!ieee->check_nic_enough_desc(ieee->dev,tcb_desc->queue_index)||\ + (skb_queue_len(&ieee->skb_waitQ[tcb_desc->queue_index]) != 0)||\ + (ieee->queue_stop) ) { + WAPI_TRACE(WAPI_TX, "%s: Insert to waitqueue (idx=%d)!!\n", __FUNCTION__, tcb_desc->queue_index); + skb_queue_tail(&ieee->skb_waitQ[tcb_desc->queue_index], newskb); + } else { + ieee->softmac_hard_start_xmit(newskb,ieee->dev); + } + + return 0; + +failed: + dev_kfree_skb_any(pskb); + return -1; +} +/********************************************************** + **********************************************************/ +const u8 Sbox[256] = { +0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05, +0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99, +0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62, +0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6, +0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8, +0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35, +0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87, +0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e, +0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1, +0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3, +0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f, +0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51, +0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8, +0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0, +0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84, +0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48 +}; + +const u32 CK[32] = { + 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, + 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, + 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, + 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, + 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, + 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, + 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, + 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 }; + +#define Rotl(_x, _y) (((_x) << (_y)) | ((_x) >> (32 - (_y)))) + +#define ByteSub(_A) (Sbox[(_A) >> 24 & 0xFF] << 24 | \ + Sbox[(_A) >> 16 & 0xFF] << 16 | \ + Sbox[(_A) >> 8 & 0xFF] << 8 | \ + Sbox[(_A) & 0xFF]) + +#define L1(_B) ((_B) ^ Rotl(_B, 2) ^ Rotl(_B, 10) ^ Rotl(_B, 18) ^ Rotl(_B, 24)) +#define L2(_B) ((_B) ^ Rotl(_B, 13) ^ Rotl(_B, 23)) + +static void +xor_block(void *dst, void *src1, void *src2) +/* 128-bit xor: *dst = *src1 xor *src2. Pointers must be 32-bit aligned */ +{ + ((u32 *)dst)[0] = ((u32 *)src1)[0] ^ ((u32 *)src2)[0]; + ((u32 *)dst)[1] = ((u32 *)src1)[1] ^ ((u32 *)src2)[1]; + ((u32 *)dst)[2] = ((u32 *)src1)[2] ^ ((u32 *)src2)[2]; + ((u32 *)dst)[3] = ((u32 *)src1)[3] ^ ((u32 *)src2)[3]; +} + + +void SMS4Crypt(u8 *Input, u8 *Output, u32 *rk) +{ + u32 r, mid, x0, x1, x2, x3, *p; + p = (u32 *)Input; + x0 = p[0]; + x1 = p[1]; + x2 = p[2]; + x3 = p[3]; +#ifdef LITTLE_ENDIAN + x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8); + x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8); + x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8); + x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8); +#endif + for (r = 0; r < 32; r += 4) + { + mid = x1 ^ x2 ^ x3 ^ rk[r + 0]; + mid = ByteSub(mid); + x0 ^= L1(mid); + mid = x2 ^ x3 ^ x0 ^ rk[r + 1]; + mid = ByteSub(mid); + x1 ^= L1(mid); + mid = x3 ^ x0 ^ x1 ^ rk[r + 2]; + mid = ByteSub(mid); + x2 ^= L1(mid); + mid = x0 ^ x1 ^ x2 ^ rk[r + 3]; + mid = ByteSub(mid); + x3 ^= L1(mid); + } +#ifdef LITTLE_ENDIAN + x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8); + x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8); + x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8); + x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8); +#endif + p = (u32 *)Output; + p[0] = x3; + p[1] = x2; + p[2] = x1; + p[3] = x0; +} + + + +void SMS4KeyExt(u8 *Key, u32 *rk, u32 CryptFlag) +{ + u32 r, mid, x0, x1, x2, x3, *p; + + p = (u32 *)Key; + x0 = p[0]; + x1 = p[1]; + x2 = p[2]; + x3 = p[3]; +#ifdef LITTLE_ENDIAN + x0 = Rotl(x0, 16); x0 = ((x0 & 0xFF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8); + x1 = Rotl(x1, 16); x1 = ((x1 & 0xFF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8); + x2 = Rotl(x2, 16); x2 = ((x2 & 0xFF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8); + x3 = Rotl(x3, 16); x3 = ((x3 & 0xFF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8); +#endif + + x0 ^= 0xa3b1bac6; + x1 ^= 0x56aa3350; + x2 ^= 0x677d9197; + x3 ^= 0xb27022dc; + for (r = 0; r < 32; r += 4) + { + mid = x1 ^ x2 ^ x3 ^ CK[r + 0]; + mid = ByteSub(mid); + rk[r + 0] = x0 ^= L2(mid); + mid = x2 ^ x3 ^ x0 ^ CK[r + 1]; + mid = ByteSub(mid); + rk[r + 1] = x1 ^= L2(mid); + mid = x3 ^ x0 ^ x1 ^ CK[r + 2]; + mid = ByteSub(mid); + rk[r + 2] = x2 ^= L2(mid); + mid = x0 ^ x1 ^ x2 ^ CK[r + 3]; + mid = ByteSub(mid); + rk[r + 3] = x3 ^= L2(mid); + } + if (CryptFlag == DECRYPT) + { + for (r = 0; r < 16; r++) + mid = rk[r], rk[r] = rk[31 - r], rk[31 - r] = mid; + } +} + + +void WapiSMS4Cryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength, + u8 *Output, u16 *OutputLength, u32 CryptFlag) +{ + u32 blockNum,i,j, rk[32]; + u16 remainder; + u8 blockIn[16],blockOut[16], tempIV[16], k; + + *OutputLength = 0; + remainder = InputLength & 0x0F; + blockNum = InputLength >> 4; + if(remainder !=0) + blockNum++; + else + remainder = 16; + + for(k=0;k<16;k++) + tempIV[k] = IV[15-k]; + + memcpy(blockIn, tempIV, 16); + + SMS4KeyExt((u8 *)Key, rk,CryptFlag); + + for(i=0; i> 4; + + for(k=0;k<16;k++) + tempIV[k] = IV[15-k]; + + memcpy(BlockIn, tempIV, 16); + + SMS4KeyExt((u8 *)Key, rk, ENCRYPT); + + SMS4Crypt((u8 *)BlockIn, BlockOut, rk); + + for(i=0; i> 4; + + for(i=0; iframe_ctl); + if((fc & (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) == (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) + { + memcpy((TempBuf+22), (pHeader+24), 6); + QosOffset = 30; + }else{ + memset((TempBuf+22), 0, 6); + QosOffset = 24; + } + + if( IsQoSDataFrame(pHeader)){ + memcpy((TempBuf+28), (pHeader+QosOffset), 2); + TempLen += 2; + IV = pHeader + QosOffset + 2 + 2; + }else{ + IV = pHeader + QosOffset + 2; + } + + TempBuf[TempLen-1] = (u8)(DataLen & 0xff); + TempBuf[TempLen-2] = (u8)((DataLen & 0xff00)>>8); + TempBuf[TempLen-4] = KeyIdx; + + WAPI_DATA(WAPI_TX, "CalculateMic - KEY", MicKey, 16); + WAPI_DATA(WAPI_TX, "CalculateMic - IV", IV, 16); + WAPI_DATA(WAPI_TX, "CalculateMic - TempBuf", TempBuf, TempLen); + WAPI_DATA(WAPI_TX, "CalculateMic - pData", pData, DataLen); + + WapiSMS4CalculateMic(MicKey, IV, TempBuf, TempLen, + pData, DataLen, MicBuffer, &MicLen); + + if (MicLen != 16) + WAPI_TRACE(WAPI_ERR,"%s: MIC Length Error!!\n",__FUNCTION__); +} + +int SecSMS4HeaderFillIV(struct rtllib_device *ieee, struct sk_buff *pskb) +{ + u8 *pSecHeader = NULL, *pos = NULL, *pRA = NULL; + u8 bPNOverflow = false, bFindMatchPeer = false, hdr_len = 0; + PWLAN_HEADER_WAPI_EXTENSION pWapiExt = NULL; + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + PRT_WAPI_STA_INFO pWapiSta = NULL; + int ret = 0; + + if ((!ieee->WapiSupport) || (!ieee->wapiInfo.bWapiEnable)){ + WAPI_TRACE(WAPI_ERR,"%s: ieee->WapiSupport = 0!!\n",__FUNCTION__); + return -1; + } + + hdr_len = sMacHdrLng; + if(IsQoSDataFrame(pskb->data) ){ + hdr_len += sQoSCtlLng; + } + + pos = skb_push(pskb, ieee->wapiInfo.extra_prefix_len); + memmove(pos, pos+ieee->wapiInfo.extra_prefix_len, hdr_len); + + pSecHeader = pskb->data + hdr_len; + pWapiExt = (PWLAN_HEADER_WAPI_EXTENSION)pSecHeader; + pRA = pskb->data + 4; + + WAPI_DATA(WAPI_TX, "FillIV - Before Fill IV", pskb->data, pskb->len); + + if( is_multicast_ether_addr(pRA) ){ + if(!pWapiInfo->wapiTxMsk.bTxEnable){ + WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__); + return -2; + } + if(pWapiInfo->wapiTxMsk.keyId <= 1){ + pWapiExt->KeyIdx = pWapiInfo->wapiTxMsk.keyId; + pWapiExt->Reserved = 0; + bPNOverflow = WapiIncreasePN(pWapiInfo->lastTxMulticastPN, 1); + memcpy(pWapiExt->PN, pWapiInfo->lastTxMulticastPN, 16); + if (bPNOverflow){ + WAPI_TRACE(WAPI_ERR,"===============>%s():multicast PN overflow\n",__FUNCTION__); + WapiCreateAppEventAndSend(ieee,NULL,0,pRA, false, false, true, 0, false); + } + }else{ + WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Multicast KeyIdx!!\n",__FUNCTION__); + ret = -3; + } + } + else{ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(pWapiSta->PeerMacAddr,pRA,6)){ + bFindMatchPeer = true; + break; + } + } + if (bFindMatchPeer){ + if((!pWapiSta->wapiUskUpdate.bTxEnable) && (!pWapiSta->wapiUsk.bTxEnable)){ + WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__); + return -4; + } + if (pWapiSta->wapiUsk.keyId <= 1){ + if(pWapiSta->wapiUskUpdate.bTxEnable) + pWapiExt->KeyIdx = pWapiSta->wapiUskUpdate.keyId; + else + pWapiExt->KeyIdx = pWapiSta->wapiUsk.keyId; + + pWapiExt->Reserved = 0; + bPNOverflow = WapiIncreasePN(pWapiSta->lastTxUnicastPN, 2); + memcpy(pWapiExt->PN, pWapiSta->lastTxUnicastPN, 16); + if (bPNOverflow){ + WAPI_TRACE(WAPI_ERR,"===============>%s():unicast PN overflow\n",__FUNCTION__); + WapiCreateAppEventAndSend(ieee,NULL,0,pWapiSta->PeerMacAddr, false, true, false, 0, false); + } + }else{ + WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Unicast KeyIdx!!\n",__FUNCTION__); + ret = -5; + } + } + else{ + WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta "MAC_FMT"!!\n",__FUNCTION__, MAC_ARG(pRA)); + ret = -6; + } + } + + WAPI_DATA(WAPI_TX, "FillIV - After Fill IV", pskb->data, pskb->len); + return ret; +} + +void SecSWSMS4Encryption( + struct rtllib_device *ieee, + struct sk_buff *pskb + ) +{ + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + PRT_WAPI_STA_INFO pWapiSta = NULL; + u8 *SecPtr = NULL, *pRA, *pMicKey = NULL, *pDataKey = NULL, *pIV = NULL, *pHeader = pskb->data; + u8 IVOffset, DataOffset, bFindMatchPeer = false, KeyIdx = 0, MicBuffer[16]; + u16 OutputLength; + +#if defined(RTL8192U) || defined(RTL8192SU) + u32 SpecificHeadOverhead = 0; +#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE + cb_desc *tcb_desc = (cb_desc *)(pskb->cb + MAX_DEV_ADDR_SIZE); + if (tcb_desc->drv_agg_enable) + SpecificHeadOverhead = TX_PACKET_DRVAGGR_SUBFRAME_SHIFT_BYTES; + else +#endif + SpecificHeadOverhead = TX_PACKET_SHIFT_BYTES; + + pHeader += SpecificHeadOverhead; +#endif + WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__); + + if( IsQoSDataFrame(pHeader) ){ + IVOffset = sMacHdrLng + sQoSCtlLng; + }else{ + IVOffset = sMacHdrLng; + } + + DataOffset = IVOffset + ieee->wapiInfo.extra_prefix_len; + + pRA = pHeader + 4; + if( is_multicast_ether_addr(pRA) ){ + KeyIdx = pWapiInfo->wapiTxMsk.keyId; + pIV = pWapiInfo->lastTxMulticastPN; + pMicKey = pWapiInfo->wapiTxMsk.micKey; + pDataKey = pWapiInfo->wapiTxMsk.dataKey; + }else{ + if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if (0 == memcmp(pWapiSta->PeerMacAddr, pRA, 6)){ + bFindMatchPeer = true; + break; + } + } + + if (bFindMatchPeer){ + if (pWapiSta->wapiUskUpdate.bTxEnable){ + KeyIdx = pWapiSta->wapiUskUpdate.keyId; + WAPI_TRACE(WAPI_TX, "%s(): Use update USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx); + pIV = pWapiSta->lastTxUnicastPN; + pMicKey = pWapiSta->wapiUskUpdate.micKey; + pDataKey = pWapiSta->wapiUskUpdate.dataKey; + }else{ + KeyIdx = pWapiSta->wapiUsk.keyId; + WAPI_TRACE(WAPI_TX, "%s(): Use USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx); + pIV = pWapiSta->lastTxUnicastPN; + pMicKey = pWapiSta->wapiUsk.micKey; + pDataKey = pWapiSta->wapiUsk.dataKey; + } + }else{ + WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta!!\n",__FUNCTION__); + return; + } + }else{ + WAPI_TRACE(WAPI_ERR,"%s: wapiSTAUsedList is empty!!\n",__FUNCTION__); + return; + } + } + + SecPtr = pHeader; + SecCalculateMicSMS4(KeyIdx, pMicKey, SecPtr, (SecPtr+DataOffset), pskb->len-DataOffset, MicBuffer); + + WAPI_DATA(WAPI_TX, "Encryption - MIC", MicBuffer, ieee->wapiInfo.extra_postfix_len); + + memcpy(skb_put(pskb,ieee->wapiInfo.extra_postfix_len), + MicBuffer, + ieee->wapiInfo.extra_postfix_len + ); + + WapiSMS4Encryption(pDataKey, pIV, (SecPtr+DataOffset), pskb->len-DataOffset, (SecPtr+DataOffset), &OutputLength); + + WAPI_DATA(WAPI_TX, "Encryption - After SMS4 encryption", pskb->data,pskb->len); + + if (OutputLength != pskb->len-DataOffset) + WAPI_TRACE(WAPI_ERR,"%s: Output Length Error!!\n",__FUNCTION__); + + WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__); +} + +u8 SecSWSMS4Decryption( + struct rtllib_device *ieee, + struct sk_buff *pskb, + struct rtllib_rx_stats *rx_stats + ) +{ + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + PRT_WAPI_STA_INFO pWapiSta = NULL; + u8 IVOffset, DataOffset, bFindMatchPeer = false, bUseUpdatedKey = false; + u8 KeyIdx, MicBuffer[16], lastRxPNforQoS[16]; + u8 *pRA, *pTA, *pMicKey, *pDataKey, *pLastRxPN, *pRecvPN, *pSecData, *pRecvMic, *pos; + u8 TID = 0; + u16 OutputLength, DataLen; + + rx_stats->bWapiCheckPNInDecrypt = WapiCheckPnInSwDecrypt(ieee, pskb); + WAPI_TRACE(WAPI_RX, "=========>%s: check PN %d\n", __FUNCTION__,rx_stats->bWapiCheckPNInDecrypt); + WAPI_DATA(WAPI_RX, "Decryption - Before decryption", pskb->data, pskb->len); + + IVOffset = sMacHdrLng; + if( rx_stats->bIsQosData ){ + IVOffset += sQoSCtlLng; + } + if( rx_stats->bContainHTC ) + IVOffset += sHTCLng; + + + DataOffset = IVOffset + ieee->wapiInfo.extra_prefix_len; + + pRA = pskb->data + 4; + pTA = pskb->data + 10; + KeyIdx = *(pskb->data + IVOffset); + pRecvPN = pskb->data + IVOffset + 2; + pSecData = pskb->data + DataOffset; + DataLen = pskb->len - DataOffset; + pRecvMic = pskb->data + pskb->len - ieee->wapiInfo.extra_postfix_len; + TID = Frame_QoSTID(pskb->data); + + if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if (0 == memcmp(pWapiSta->PeerMacAddr, pTA, 6)){ + bFindMatchPeer = true; + break; + } + } + } + + if (!bFindMatchPeer){ + WAPI_TRACE(WAPI_ERR, "%s: Can not find Peer Sta "MAC_FMT" for Key Info!!!\n", __FUNCTION__, MAC_ARG(pTA)); + return false; + } + + if( is_multicast_ether_addr(pRA) ){ + WAPI_TRACE(WAPI_RX, "%s: Multicast decryption !!!\n", __FUNCTION__); + if (pWapiSta->wapiMsk.keyId == KeyIdx && pWapiSta->wapiMsk.bSet){ + pLastRxPN = pWapiSta->lastRxMulticastPN; + if (!WapiComparePN(pRecvPN, pLastRxPN)){ + WAPI_TRACE(WAPI_ERR, "%s: MSK PN is not larger than last, Dropped!!!\n", __FUNCTION__); + WAPI_DATA(WAPI_ERR, "pRecvPN:", pRecvPN, 16); + WAPI_DATA(WAPI_ERR, "pLastRxPN:", pLastRxPN, 16); + return false; + } + + memcpy(pLastRxPN, pRecvPN, 16); + pMicKey = pWapiSta->wapiMsk.micKey; + pDataKey = pWapiSta->wapiMsk.dataKey; + }else if (pWapiSta->wapiMskUpdate.keyId == KeyIdx && pWapiSta->wapiMskUpdate.bSet){ + WAPI_TRACE(WAPI_RX, "%s: Use Updated MSK for Decryption !!!\n", __FUNCTION__); + bUseUpdatedKey = true; + memcpy(pWapiSta->lastRxMulticastPN, pRecvPN, 16); + pMicKey = pWapiSta->wapiMskUpdate.micKey; + pDataKey = pWapiSta->wapiMskUpdate.dataKey; + }else{ + WAPI_TRACE(WAPI_ERR, "%s: Can not find MSK with matched KeyIdx(%d), Dropped !!!\n", __FUNCTION__,KeyIdx); + return false; + } + } + else{ + WAPI_TRACE(WAPI_RX, "%s: Unicast decryption !!!\n", __FUNCTION__); + if (pWapiSta->wapiUsk.keyId == KeyIdx && pWapiSta->wapiUsk.bSet){ + WAPI_TRACE(WAPI_RX, "%s: Use USK for Decryption!!!\n", __FUNCTION__); + if(rx_stats->bWapiCheckPNInDecrypt){ + if(rx_stats->bIsQosData){ + WapiGetLastRxUnicastPNForQoSData(TID, pWapiSta, lastRxPNforQoS); + pLastRxPN = lastRxPNforQoS; + }else{ + pLastRxPN = pWapiSta->lastRxUnicastPN; + } + if (!WapiComparePN(pRecvPN, pLastRxPN)){ + return false; + } + if(rx_stats->bIsQosData){ + WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta); + }else{ + memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16); + } + }else{ + memcpy(rx_stats->WapiTempPN,pRecvPN,16); + } + + if (ieee->iw_mode == IW_MODE_INFRA){ + if ((pRecvPN[0] & 0x1) == 0){ + WAPI_TRACE(WAPI_ERR, "%s: Rx USK PN is not odd when Infra STA mode, Dropped !!!\n", __FUNCTION__); + return false; + } + } + + pMicKey = pWapiSta->wapiUsk.micKey; + pDataKey = pWapiSta->wapiUsk.dataKey; + } + else if (pWapiSta->wapiUskUpdate.keyId == KeyIdx && pWapiSta->wapiUskUpdate.bSet ){ + WAPI_TRACE(WAPI_RX, "%s: Use Updated USK for Decryption!!!\n", __FUNCTION__); + if(pWapiSta->bAuthenticatorInUpdata) + bUseUpdatedKey = true; + else + bUseUpdatedKey = false; + + if(rx_stats->bIsQosData){ + WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta); + }else{ + memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16); + } + pMicKey = pWapiSta->wapiUskUpdate.micKey; + pDataKey = pWapiSta->wapiUskUpdate.dataKey; + }else{ + WAPI_TRACE(WAPI_ERR, "%s: No valid USK!!!KeyIdx=%d pWapiSta->wapiUsk.keyId=%d pWapiSta->wapiUskUpdate.keyId=%d\n", __FUNCTION__, KeyIdx, pWapiSta->wapiUsk.keyId, pWapiSta->wapiUskUpdate.keyId); + dump_buf(pskb->data,pskb->len); + return false; + } + } + + WAPI_DATA(WAPI_RX, "Decryption - DataKey", pDataKey, 16); + WAPI_DATA(WAPI_RX, "Decryption - IV", pRecvPN, 16); + WapiSMS4Decryption(pDataKey, pRecvPN, pSecData, DataLen, pSecData, &OutputLength); + + if (OutputLength != DataLen) + WAPI_TRACE(WAPI_ERR, "%s: Output Length Error!!!!\n", __FUNCTION__); + + WAPI_DATA(WAPI_RX, "Decryption - After decryption", pskb->data, pskb->len); + + DataLen -= ieee->wapiInfo.extra_postfix_len; + + SecCalculateMicSMS4(KeyIdx, pMicKey, pskb->data, pSecData, DataLen, MicBuffer); + + WAPI_DATA(WAPI_RX, "Decryption - MIC received", pRecvMic, SMS4_MIC_LEN); + WAPI_DATA(WAPI_RX, "Decryption - MIC calculated", MicBuffer, SMS4_MIC_LEN); + + if (0 == memcmp(MicBuffer, pRecvMic, ieee->wapiInfo.extra_postfix_len)){ + WAPI_TRACE(WAPI_RX, "%s: Check MIC OK!!\n", __FUNCTION__); + if (bUseUpdatedKey){ + if ( is_multicast_ether_addr(pRA) ){ + WAPI_TRACE(WAPI_API, "%s(): AE use new update MSK!!\n", __FUNCTION__); + pWapiSta->wapiMsk.keyId = pWapiSta->wapiMskUpdate.keyId; + memcpy(pWapiSta->wapiMsk.dataKey, pWapiSta->wapiMskUpdate.dataKey, 16); + memcpy(pWapiSta->wapiMsk.micKey, pWapiSta->wapiMskUpdate.micKey, 16); + pWapiSta->wapiMskUpdate.bTxEnable = pWapiSta->wapiMskUpdate.bSet = false; + }else{ + WAPI_TRACE(WAPI_API, "%s(): AE use new update USK!!\n", __FUNCTION__); + pWapiSta->wapiUsk.keyId = pWapiSta->wapiUskUpdate.keyId; + memcpy(pWapiSta->wapiUsk.dataKey, pWapiSta->wapiUskUpdate.dataKey, 16); + memcpy(pWapiSta->wapiUsk.micKey, pWapiSta->wapiUskUpdate.micKey, 16); + pWapiSta->wapiUskUpdate.bTxEnable = pWapiSta->wapiUskUpdate.bSet = false; + } + } + }else{ + WAPI_TRACE(WAPI_ERR, "%s: Check MIC Error, Dropped !!!!\n", __FUNCTION__); + return false; + } + + pos = pskb->data; + memmove(pos+ieee->wapiInfo.extra_prefix_len, pos, IVOffset); + skb_pull(pskb, ieee->wapiInfo.extra_prefix_len); + + WAPI_TRACE(WAPI_RX, "<=========%s\n", __FUNCTION__); + + return true; +} + +void wapi_test_set_key(struct rtllib_device *ieee, u8* buf) +{ /*Data: keyType(1) + bTxEnable(1) + bAuthenticator(1) + bUpdate(1) + PeerAddr(6) + DataKey(16) + MicKey(16) + KeyId(1)*/ + PRT_WAPI_T pWapiInfo = &ieee->wapiInfo; + PRT_WAPI_BKID pWapiBkid; + PRT_WAPI_STA_INFO pWapiSta; + u8 data[43]; + bool bTxEnable; + bool bUpdate; + bool bAuthenticator; + u8 PeerAddr[6]; + u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ; + + WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__); + + if (!ieee->WapiSupport){ + return; + } + + copy_from_user(data, buf, 43); + bTxEnable = data[1]; + bAuthenticator = data[2]; + bUpdate = data[3]; + memcpy(PeerAddr,data+4,6); + + if(data[0] == 0x3){ + if(!list_empty(&(pWapiInfo->wapiBKIDIdleList))){ + pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list); + list_del_init(&pWapiBkid->list); + memcpy(pWapiBkid->bkid, data+10, 16); + WAPI_DATA(WAPI_INIT, "SetKey - BKID", pWapiBkid->bkid, 16); + list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDStoreList); + } + }else{ + list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) { + if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){ + pWapiSta->bAuthenticatorInUpdata = false; + switch(data[0]){ + case 1: + if(bAuthenticator){ + memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16); + if(!bUpdate) { + WAPI_TRACE(WAPI_INIT,"AE fisrt set usk \n"); + pWapiSta->wapiUsk.bSet = true; + memcpy(pWapiSta->wapiUsk.dataKey,data+10,16); + memcpy(pWapiSta->wapiUsk.micKey,data+26,16); + pWapiSta->wapiUsk.keyId = *(data+42); + pWapiSta->wapiUsk.bTxEnable = true; + WAPI_DATA(WAPI_INIT, "SetKey - AE USK Data Key", pWapiSta->wapiUsk.dataKey, 16); + WAPI_DATA(WAPI_INIT, "SetKey - AE USK Mic Key", pWapiSta->wapiUsk.micKey, 16); + } + else + { + WAPI_TRACE(WAPI_INIT, "AE update usk \n"); + pWapiSta->wapiUskUpdate.bSet = true; + pWapiSta->bAuthenticatorInUpdata = true; + memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16); + memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16); + memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16); + pWapiSta->wapiUskUpdate.keyId = *(data+42); + pWapiSta->wapiUskUpdate.bTxEnable = true; + } + } + else{ + if(!bUpdate){ + WAPI_TRACE(WAPI_INIT,"ASUE fisrt set usk \n"); + if(bTxEnable){ + pWapiSta->wapiUsk.bTxEnable = true; + memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16); + }else{ + pWapiSta->wapiUsk.bSet = true; + memcpy(pWapiSta->wapiUsk.dataKey,data+10,16); + memcpy(pWapiSta->wapiUsk.micKey,data+26,16); + pWapiSta->wapiUsk.keyId = *(data+42); + pWapiSta->wapiUsk.bTxEnable = false; + } + }else{ + WAPI_TRACE(WAPI_INIT,"ASUE update usk \n"); + if(bTxEnable){ + pWapiSta->wapiUskUpdate.bTxEnable = true; + if(pWapiSta->wapiUskUpdate.bSet){ + memcpy(pWapiSta->wapiUsk.dataKey,pWapiSta->wapiUskUpdate.dataKey,16); + memcpy(pWapiSta->wapiUsk.micKey,pWapiSta->wapiUskUpdate.micKey,16); + pWapiSta->wapiUsk.keyId=pWapiSta->wapiUskUpdate.keyId; + memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16); + memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16); + pWapiSta->wapiUskUpdate.bTxEnable = false; + pWapiSta->wapiUskUpdate.bSet = false; + } + memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16); + }else{ + pWapiSta->wapiUskUpdate.bSet = true; + memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16); + memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16); + pWapiSta->wapiUskUpdate.keyId = *(data+42); + pWapiSta->wapiUskUpdate.bTxEnable = false; + } + } + } + break; + case 2: + if(bAuthenticator){ + pWapiInfo->wapiTxMsk.bSet = true; + memcpy(pWapiInfo->wapiTxMsk.dataKey,data+10,16); + memcpy(pWapiInfo->wapiTxMsk.micKey,data+26,16); + pWapiInfo->wapiTxMsk.keyId = *(data+42); + pWapiInfo->wapiTxMsk.bTxEnable = true; + memcpy(pWapiInfo->lastTxMulticastPN,WapiAEMultiCastPNInitialValueSrc,16); + + if(!bUpdate){ + WAPI_TRACE(WAPI_INIT, "AE fisrt set msk \n"); + if(!pWapiSta->bSetkeyOk) + pWapiSta->bSetkeyOk = true; + pWapiInfo->bFirstAuthentiateInProgress= false; + }else{ + WAPI_TRACE(WAPI_INIT,"AE update msk \n"); + } + + WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Data Key", pWapiInfo->wapiTxMsk.dataKey, 16); + WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Mic Key", pWapiInfo->wapiTxMsk.micKey, 16); + } + else{ + if(!bUpdate){ + WAPI_TRACE(WAPI_INIT,"ASUE fisrt set msk \n"); + pWapiSta->wapiMsk.bSet = true; + memcpy(pWapiSta->wapiMsk.dataKey,data+10,16); + memcpy(pWapiSta->wapiMsk.micKey,data+26,16); + pWapiSta->wapiMsk.keyId = *(data+42); + pWapiSta->wapiMsk.bTxEnable = false; + if(!pWapiSta->bSetkeyOk) + pWapiSta->bSetkeyOk = true; + pWapiInfo->bFirstAuthentiateInProgress= false; + WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Data Key", pWapiSta->wapiMsk.dataKey, 16); + WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Mic Key", pWapiSta->wapiMsk.micKey, 16); + }else{ + WAPI_TRACE(WAPI_INIT,"ASUE update msk \n"); + pWapiSta->wapiMskUpdate.bSet = true; + memcpy(pWapiSta->wapiMskUpdate.dataKey,data+10,16); + memcpy(pWapiSta->wapiMskUpdate.micKey,data+26,16); + pWapiSta->wapiMskUpdate.keyId = *(data+42); + pWapiSta->wapiMskUpdate.bTxEnable = false; + } + } + break; + default: + WAPI_TRACE(WAPI_ERR,"Unknown Flag \n"); + break; + } + } + } + } + WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__); +} + +void wapi_test_init(struct rtllib_device *ieee) +{ + u8 keybuf[100]; + u8 mac_addr[6]={0x00,0xe0,0x4c,0x72,0x04,0x70}; + u8 UskDataKey[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; + u8 UskMicKey[16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}; + u8 UskId = 0; + u8 MskDataKey[16]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}; + u8 MskMicKey[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; + u8 MskId = 0; + + WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__); + + WAPI_TRACE(WAPI_INIT, "%s: Enable wapi!!!!\n", __FUNCTION__); + ieee->wapiInfo.bWapiEnable = true; + ieee->pairwise_key_type = KEY_TYPE_SMS4; + ieee->group_key_type = KEY_TYPE_SMS4; + ieee->wapiInfo.extra_prefix_len = WAPI_EXT_LEN; + ieee->wapiInfo.extra_postfix_len = SMS4_MIC_LEN; + + WAPI_TRACE(WAPI_INIT, "%s: Set USK!!!!\n", __FUNCTION__); + memset(keybuf,0,100); + keybuf[0] = 1; + keybuf[1] = 1; + keybuf[2] = 1; + keybuf[3] = 0; + + memcpy(keybuf+4,mac_addr,6); + memcpy(keybuf+10,UskDataKey,16); + memcpy(keybuf+26,UskMicKey,16); + keybuf[42]=UskId; + wapi_test_set_key(ieee, keybuf); + + memset(keybuf,0,100); + keybuf[0] = 1; + keybuf[1] = 1; + keybuf[2] = 0; + keybuf[3] = 0; + + memcpy(keybuf+4,mac_addr,6); + memcpy(keybuf+10,UskDataKey,16); + memcpy(keybuf+26,UskMicKey,16); + keybuf[42]=UskId; + wapi_test_set_key(ieee, keybuf); + + WAPI_TRACE(WAPI_INIT, "%s: Set MSK!!!!\n", __FUNCTION__); + memset(keybuf,0,100); + keybuf[0] = 2; + keybuf[1] = 1; + keybuf[2] = 1; + keybuf[3] = 0; + memcpy(keybuf+4,mac_addr,6); + memcpy(keybuf+10,MskDataKey,16); + memcpy(keybuf+26,MskMicKey,16); + keybuf[42] = MskId; + wapi_test_set_key(ieee, keybuf); + + memset(keybuf,0,100); + keybuf[0] = 2; + keybuf[1] = 1; + keybuf[2] = 0; + keybuf[3] = 0; + memcpy(keybuf+4,mac_addr,6); + memcpy(keybuf+10,MskDataKey,16); + memcpy(keybuf+26,MskMicKey,16); + keybuf[42] = MskId; + wapi_test_set_key(ieee, keybuf); + WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__); +} + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_TSProc.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_TSProc.c @@ -0,0 +1,672 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "rtllib.h" +#include +#include "rtl819x_TS.h" +extern void _setup_timer( struct timer_list*, void*, unsigned long); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +#define list_for_each_entry_safe(pos, n, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) +#endif +void TsSetupTimeOut(unsigned long data) +{ +} + +void TsInactTimeout(unsigned long data) +{ +} + +void RxPktPendingTimeout(unsigned long data) +{ + PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)data; + struct rtllib_device *ieee = container_of(pRxTs, struct rtllib_device, RxTsRecord[pRxTs->num]); + + PRX_REORDER_ENTRY pReorderEntry = NULL; + + unsigned long flags = 0; + struct rtllib_rxb *stats_IndicateArray[REORDER_WIN_SIZE]; + u8 index = 0; + bool bPktInBuf = false; + + spin_lock_irqsave(&(ieee->reorder_spinlock), flags); + if(pRxTs->RxTimeoutIndicateSeq != 0xffff) + { + while(!list_empty(&pRxTs->RxPendingPktList)) + { + pReorderEntry = (PRX_REORDER_ENTRY)list_entry(pRxTs->RxPendingPktList.prev,RX_REORDER_ENTRY,List); + if(index == 0) + pRxTs->RxIndicateSeq = pReorderEntry->SeqNum; + + if( SN_LESS(pReorderEntry->SeqNum, pRxTs->RxIndicateSeq) || + SN_EQUAL(pReorderEntry->SeqNum, pRxTs->RxIndicateSeq) ) + { + list_del_init(&pReorderEntry->List); + + if(SN_EQUAL(pReorderEntry->SeqNum, pRxTs->RxIndicateSeq)) + pRxTs->RxIndicateSeq = (pRxTs->RxIndicateSeq + 1) % 4096; + + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): Indicate SeqNum: %d\n",__func__, pReorderEntry->SeqNum); + stats_IndicateArray[index] = pReorderEntry->prxb; + index++; + + list_add_tail(&pReorderEntry->List, &ieee->RxReorder_Unused_List); + } + else + { + bPktInBuf = true; + break; + } + } + } + + if(index>0){ + pRxTs->RxTimeoutIndicateSeq = 0xffff; + + if(index > REORDER_WIN_SIZE){ + RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n"); + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); + return; + } + rtllib_indicate_packets(ieee, stats_IndicateArray, index); + bPktInBuf = false; + } + + if(bPktInBuf && (pRxTs->RxTimeoutIndicateSeq==0xffff)){ + pRxTs->RxTimeoutIndicateSeq = pRxTs->RxIndicateSeq; + mod_timer(&pRxTs->RxPktPendingTimer, jiffies + MSECS(ieee->pHTInfo->RxReorderPendingTime)); + } + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); +} + +void TsAddBaProcess(unsigned long data) +{ + PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)data; + u8 num = pTxTs->num; + struct rtllib_device *ieee = container_of(pTxTs, struct rtllib_device, TxTsRecord[num]); + + TsInitAddBA(ieee, pTxTs, BA_POLICY_IMMEDIATE, false); + RTLLIB_DEBUG(RTLLIB_DL_BA, "TsAddBaProcess(): ADDBA Req is started!! \n"); +} + + +void ResetTsCommonInfo(PTS_COMMON_INFO pTsCommonInfo) +{ + memset(pTsCommonInfo->Addr, 0, 6); + memset(&pTsCommonInfo->TSpec, 0, sizeof(TSPEC_BODY)); + memset(&pTsCommonInfo->TClass, 0, sizeof(QOS_TCLAS)*TCLAS_NUM); + pTsCommonInfo->TClasProc = 0; + pTsCommonInfo->TClasNum = 0; +} + +void ResetTxTsEntry(PTX_TS_RECORD pTS) +{ + ResetTsCommonInfo(&pTS->TsCommonInfo); + pTS->TxCurSeq = 0; + pTS->bAddBaReqInProgress = false; + pTS->bAddBaReqDelayed = false; + pTS->bUsingBa = false; + pTS->bDisable_AddBa = false; + ResetBaEntry(&pTS->TxAdmittedBARecord); + ResetBaEntry(&pTS->TxPendingBARecord); +} + +void ResetRxTsEntry(PRX_TS_RECORD pTS) +{ + ResetTsCommonInfo(&pTS->TsCommonInfo); + pTS->RxIndicateSeq = 0xffff; + pTS->RxTimeoutIndicateSeq = 0xffff; + ResetBaEntry(&pTS->RxAdmittedBARecord); +} +#ifdef _RTL8192_EXT_PATCH_ +void ResetAdmitTRStream(struct rtllib_device *ieee, u8 *Addr) +{ + u8 dir; + bool search_dir[4] = {0, 0, 0, 0}; + struct list_head* psearch_list; + PTS_COMMON_INFO pRet = NULL; + PRX_TS_RECORD pRxTS = NULL; + PTX_TS_RECORD pTxTS = NULL; + + if(ieee->iw_mode != IW_MODE_MESH) + return; + + search_dir[DIR_DOWN] = true; + psearch_list = &ieee->Rx_TS_Admit_List; + for(dir = 0; dir <= DIR_BI_DIR; dir++) + { + if(search_dir[dir] ==false ) + continue; + list_for_each_entry(pRet, psearch_list, List){ + if ((memcmp(pRet->Addr, Addr, 6) == 0) && (pRet->TSpec.f.TSInfo.field.ucDirection == dir)) + { + pRxTS = (PRX_TS_RECORD)pRet; + pRxTS->RxIndicateSeq = 0xffff; + pRxTS->RxTimeoutIndicateSeq = 0xffff; + } + + } + } + search_dir[DIR_UP] = true; + psearch_list = &ieee->Tx_TS_Admit_List; + for(dir = 0; dir <= DIR_BI_DIR; dir++) + { + if(search_dir[dir] ==false ) + continue; + list_for_each_entry(pRet, psearch_list, List){ + if ((memcmp(pRet->Addr, Addr, 6) == 0) && (pRet->TSpec.f.TSInfo.field.ucDirection == dir)) + { + pTxTS = (PTX_TS_RECORD)pRet; + pTxTS->TxCurSeq = 0xffff; + } + + } + } + + return; +} +#endif + +void TSInitialize(struct rtllib_device *ieee) +{ + PTX_TS_RECORD pTxTS = ieee->TxTsRecord; + PRX_TS_RECORD pRxTS = ieee->RxTsRecord; + PRX_REORDER_ENTRY pRxReorderEntry = ieee->RxReorderEntry; + u8 count = 0; + RTLLIB_DEBUG(RTLLIB_DL_TS, "==========>%s()\n", __FUNCTION__); + INIT_LIST_HEAD(&ieee->Tx_TS_Admit_List); + INIT_LIST_HEAD(&ieee->Tx_TS_Pending_List); + INIT_LIST_HEAD(&ieee->Tx_TS_Unused_List); + + for(count = 0; count < TOTAL_TS_NUM; count++) + { + pTxTS->num = count; + _setup_timer(&pTxTS->TsCommonInfo.SetupTimer, + TsSetupTimeOut, + (unsigned long) pTxTS); + + _setup_timer(&pTxTS->TsCommonInfo.InactTimer, + TsInactTimeout, + (unsigned long) pTxTS); + + _setup_timer(&pTxTS->TsAddBaTimer, + TsAddBaProcess, + (unsigned long) pTxTS); + + _setup_timer(&pTxTS->TxPendingBARecord.Timer, + BaSetupTimeOut, + (unsigned long) pTxTS); + _setup_timer(&pTxTS->TxAdmittedBARecord.Timer, + TxBaInactTimeout, + (unsigned long) pTxTS); + + ResetTxTsEntry(pTxTS); + list_add_tail(&pTxTS->TsCommonInfo.List, + &ieee->Tx_TS_Unused_List); + pTxTS++; + } + + INIT_LIST_HEAD(&ieee->Rx_TS_Admit_List); + INIT_LIST_HEAD(&ieee->Rx_TS_Pending_List); + INIT_LIST_HEAD(&ieee->Rx_TS_Unused_List); + for(count = 0; count < TOTAL_TS_NUM; count++) + { + pRxTS->num = count; + INIT_LIST_HEAD(&pRxTS->RxPendingPktList); + + _setup_timer(&pRxTS->TsCommonInfo.SetupTimer, + TsSetupTimeOut, + (unsigned long) pRxTS); + + _setup_timer(&pRxTS->TsCommonInfo.InactTimer, + TsInactTimeout, + (unsigned long) pRxTS); + + _setup_timer(&pRxTS->RxAdmittedBARecord.Timer, + RxBaInactTimeout, + (unsigned long) pRxTS); + + _setup_timer(&pRxTS->RxPktPendingTimer, + RxPktPendingTimeout, + (unsigned long) pRxTS); + + ResetRxTsEntry(pRxTS); + list_add_tail(&pRxTS->TsCommonInfo.List, &ieee->Rx_TS_Unused_List); + pRxTS++; + } + INIT_LIST_HEAD(&ieee->RxReorder_Unused_List); + for(count = 0; count < REORDER_ENTRY_NUM; count++) + { + list_add_tail( &pRxReorderEntry->List,&ieee->RxReorder_Unused_List); + if(count == (REORDER_ENTRY_NUM-1)) + break; + pRxReorderEntry = &ieee->RxReorderEntry[count+1]; + } + +} + +void AdmitTS(struct rtllib_device *ieee, PTS_COMMON_INFO pTsCommonInfo, u32 InactTime) +{ + del_timer_sync(&pTsCommonInfo->SetupTimer); + del_timer_sync(&pTsCommonInfo->InactTimer); + + if(InactTime!=0) + mod_timer(&pTsCommonInfo->InactTimer, jiffies + MSECS(InactTime)); +} + + +PTS_COMMON_INFO SearchAdmitTRStream(struct rtllib_device *ieee, u8* Addr, u8 TID, TR_SELECT TxRxSelect) +{ + u8 dir; + bool search_dir[4] = {0, 0, 0, 0}; + struct list_head* psearch_list; + PTS_COMMON_INFO pRet = NULL; + if(ieee->iw_mode == IW_MODE_MASTER) + { + if(TxRxSelect == TX_DIR) + { + search_dir[DIR_DOWN] = true; + search_dir[DIR_BI_DIR]= true; + } + else + { + search_dir[DIR_UP] = true; + search_dir[DIR_BI_DIR]= true; + } + } + else if(ieee->iw_mode == IW_MODE_ADHOC) + { + if(TxRxSelect == TX_DIR) + search_dir[DIR_UP] = true; + else + search_dir[DIR_DOWN] = true; + } + else + { + if(TxRxSelect == TX_DIR) + { + search_dir[DIR_UP] = true; + search_dir[DIR_BI_DIR]= true; + search_dir[DIR_DIRECT]= true; + } + else + { + search_dir[DIR_DOWN] = true; + search_dir[DIR_BI_DIR]= true; + search_dir[DIR_DIRECT]= true; + } + } + + if(TxRxSelect == TX_DIR) + psearch_list = &ieee->Tx_TS_Admit_List; + else + psearch_list = &ieee->Rx_TS_Admit_List; + + for(dir = 0; dir <= DIR_BI_DIR; dir++) + { + if(search_dir[dir] ==false ) + continue; + list_for_each_entry(pRet, psearch_list, List){ + if (memcmp(pRet->Addr, Addr, 6) == 0) + if (pRet->TSpec.f.TSInfo.field.ucTSID == TID) + if(pRet->TSpec.f.TSInfo.field.ucDirection == dir) + { + break; + } + + } + if(&pRet->List != psearch_list) + break; + } + + if(&pRet->List != psearch_list){ + return pRet ; + } + else + return NULL; +} + +void MakeTSEntry( + PTS_COMMON_INFO pTsCommonInfo, + u8* Addr, + PTSPEC_BODY pTSPEC, + PQOS_TCLAS pTCLAS, + u8 TCLAS_Num, + u8 TCLAS_Proc + ) +{ + u8 count; + + if(pTsCommonInfo == NULL) + return; + + memcpy(pTsCommonInfo->Addr, Addr, 6); + + if(pTSPEC != NULL) + memcpy((u8*)(&(pTsCommonInfo->TSpec)), (u8*)pTSPEC, sizeof(TSPEC_BODY)); + + for(count = 0; count < TCLAS_Num; count++) + memcpy((u8*)(&(pTsCommonInfo->TClass[count])), (u8*)pTCLAS, sizeof(QOS_TCLAS)); + + pTsCommonInfo->TClasProc = TCLAS_Proc; + pTsCommonInfo->TClasNum = TCLAS_Num; +} + +#ifdef _RTL8192_EXT_PATCH_ +void dump_ts_list(struct list_head * ts_list) +{ + PTS_COMMON_INFO pRet = NULL; + u8 i=0; + list_for_each_entry(pRet, ts_list, List){ + printk("i=%d ADD:"MAC_FMT", TID:%d, dir:%d\n",i,MAC_ARG(pRet->Addr), pRet->TSpec.f.TSInfo.field.ucTSID, pRet->TSpec.f.TSInfo.field.ucDirection); + i++; + } + +} +#endif + +bool GetTs( + struct rtllib_device* ieee, + PTS_COMMON_INFO *ppTS, + u8* Addr, + u8 TID, + TR_SELECT TxRxSelect, + bool bAddNewTs + ) +{ + u8 UP = 0; + if(is_broadcast_ether_addr(Addr) || is_multicast_ether_addr(Addr)) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR! get TS for Broadcast or Multicast\n"); + return false; + } +#if 0 + if(ieee->pStaQos->CurrentQosMode == QOS_DISABLE) + { UP = 0; } + else if(ieee->pStaQos->CurrentQosMode & QOS_WMM) + { +#else + if (ieee->current_network.qos_data.supported == 0) + UP = 0; + else + { +#endif + if (!IsACValid(TID)) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR! in %s(), TID(%d) is not valid\n", __FUNCTION__, TID); + return false; + } + + switch(TID) + { + case 0: + case 3: + UP = 0; + break; + + case 1: + case 2: + UP = 2; + break; + + case 4: + case 5: + UP = 5; + break; + + case 6: + case 7: + UP = 7; + break; + } + } + + *ppTS = SearchAdmitTRStream( + ieee, + Addr, + UP, + TxRxSelect); + if(*ppTS != NULL) + { + return true; + } + else + { + if(bAddNewTs == false) + { + RTLLIB_DEBUG(RTLLIB_DL_TS, "add new TS failed(tid:%d)\n", UP); + return false; + } + else + { + TSPEC_BODY TSpec; + PQOS_TSINFO pTSInfo = &TSpec.f.TSInfo; + struct list_head* pUnusedList = + (TxRxSelect == TX_DIR)? + (&ieee->Tx_TS_Unused_List): + (&ieee->Rx_TS_Unused_List); + + struct list_head* pAddmitList = + (TxRxSelect == TX_DIR)? + (&ieee->Tx_TS_Admit_List): + (&ieee->Rx_TS_Admit_List); + + DIRECTION_VALUE Dir = (ieee->iw_mode == IW_MODE_MASTER)? + ((TxRxSelect==TX_DIR)?DIR_DOWN:DIR_UP): + ((TxRxSelect==TX_DIR)?DIR_UP:DIR_DOWN); + RTLLIB_DEBUG(RTLLIB_DL_TS, "to add Ts\n"); + if(!list_empty(pUnusedList)) + { + (*ppTS) = list_entry(pUnusedList->next, TS_COMMON_INFO, List); + list_del_init(&(*ppTS)->List); + if(TxRxSelect==TX_DIR) + { + PTX_TS_RECORD tmp = container_of(*ppTS, TX_TS_RECORD, TsCommonInfo); + ResetTxTsEntry(tmp); + } + else{ + PRX_TS_RECORD tmp = container_of(*ppTS, RX_TS_RECORD, TsCommonInfo); + ResetRxTsEntry(tmp); + } + + RTLLIB_DEBUG(RTLLIB_DL_TS, "to init current TS, UP:%d, Dir:%d, addr:"MAC_FMT"\n", UP, Dir, MAC_ARG(Addr)); + pTSInfo->field.ucTrafficType = 0; + pTSInfo->field.ucTSID = UP; + pTSInfo->field.ucDirection = Dir; + pTSInfo->field.ucAccessPolicy = 1; + pTSInfo->field.ucAggregation = 0; + pTSInfo->field.ucPSB = 0; + pTSInfo->field.ucUP = UP; + pTSInfo->field.ucTSInfoAckPolicy = 0; + pTSInfo->field.ucSchedule = 0; + + MakeTSEntry(*ppTS, Addr, &TSpec, NULL, 0, 0); + AdmitTS(ieee, *ppTS, 0); + list_add_tail(&((*ppTS)->List), pAddmitList); + + return true; + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR!!in function %s() There is not enough dir=%d(0=up down=1) TS record to be used!!", __FUNCTION__,Dir); + return false; + } + } + } +} + +void RemoveTsEntry( + struct rtllib_device* ieee, + PTS_COMMON_INFO pTs, + TR_SELECT TxRxSelect + ) +{ + unsigned long flags = 0; + del_timer_sync(&pTs->SetupTimer); + del_timer_sync(&pTs->InactTimer); + TsInitDelBA(ieee, pTs, TxRxSelect); + + if(TxRxSelect == RX_DIR) + { + PRX_REORDER_ENTRY pRxReorderEntry; + PRX_TS_RECORD pRxTS = (PRX_TS_RECORD)pTs; + spin_lock_irqsave(&(ieee->reorder_spinlock), flags); + + if(timer_pending(&pRxTS->RxPktPendingTimer)) + del_timer_sync(&pRxTS->RxPktPendingTimer); + + while(!list_empty(&pRxTS->RxPendingPktList)){ + pRxReorderEntry = (PRX_REORDER_ENTRY)list_entry(pRxTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List); + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): Delete SeqNum %d!\n",__FUNCTION__, pRxReorderEntry->SeqNum); + list_del_init(&pRxReorderEntry->List); + { + int i = 0; + struct rtllib_rxb * prxb = pRxReorderEntry->prxb; + if (unlikely(!prxb)){ + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); + return; + } + for(i =0; i < prxb->nr_subframes; i++) { + dev_kfree_skb(prxb->subframes[i]); + } + kfree(prxb); + prxb = NULL; + } + list_add_tail(&pRxReorderEntry->List,&ieee->RxReorder_Unused_List); + } + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); + } + else{ + PTX_TS_RECORD pTxTS = (PTX_TS_RECORD)pTs; + del_timer_sync(&pTxTS->TsAddBaTimer); + } +} + +void RemovePeerTS(struct rtllib_device* ieee, u8* Addr) +{ + PTS_COMMON_INFO pTS, pTmpTS; + printk("===========>RemovePeerTS,"MAC_FMT"\n", MAC_ARG(Addr)); +#if 1 + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) + { + if (memcmp(pTS->Addr, Addr, 6) == 0) + { + RemoveTsEntry(ieee, pTS, TX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + } + } + + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Admit_List, List) + { + if (memcmp(pTS->Addr, Addr, 6) == 0) + { + printk("====>remove Tx_TS_admin_list\n"); + RemoveTsEntry(ieee, pTS, TX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + } + } + + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Pending_List, List) + { + if (memcmp(pTS->Addr, Addr, 6) == 0) + { + RemoveTsEntry(ieee, pTS, RX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + } + } + + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Admit_List, List) + { + if (memcmp(pTS->Addr, Addr, 6) == 0) + { + RemoveTsEntry(ieee, pTS, RX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + } + } +#endif +} + +void RemoveAllTS(struct rtllib_device* ieee) +{ + PTS_COMMON_INFO pTS, pTmpTS; +#if 1 + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) + { + RemoveTsEntry(ieee, pTS, TX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + } + + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Admit_List, List) + { + RemoveTsEntry(ieee, pTS, TX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + } + + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Pending_List, List) + { + RemoveTsEntry(ieee, pTS, RX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + } + + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Admit_List, List) + { + RemoveTsEntry(ieee, pTS, RX_DIR); + list_del_init(&pTS->List); + list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + } +#endif +} + +void TsStartAddBaProcess(struct rtllib_device* ieee, PTX_TS_RECORD pTxTS) +{ + if(pTxTS->bAddBaReqInProgress == false) + { + pTxTS->bAddBaReqInProgress = true; +#if 1 + if(pTxTS->bAddBaReqDelayed) + { + RTLLIB_DEBUG(RTLLIB_DL_BA, "TsStartAddBaProcess(): Delayed Start ADDBA after 60 sec!!\n"); + mod_timer(&pTxTS->TsAddBaTimer, jiffies + MSECS(TS_ADDBA_DELAY)); + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_BA,"TsStartAddBaProcess(): Immediately Start ADDBA now!!\n"); + mod_timer(&pTxTS->TsAddBaTimer, jiffies+10); + } +#endif + } + else + RTLLIB_DEBUG(RTLLIB_DL_ERR, "%s()==>BA timer is already added\n", __FUNCTION__); +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(RemovePeerTS); +#ifdef _RTL8192_EXT_PATCH_ +EXPORT_SYMBOL_RSL(ResetAdmitTRStream); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl_crypto.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl_crypto.h @@ -0,0 +1,409 @@ +/* + * Scatterlist Cryptographic API. + * + * Copyright (c) 2002 James Morris + * Copyright (c) 2002 David S. Miller (davem@redhat.com) + * + * Portions derived from Cryptoapi, by Alexander Kjeldaas + * and Nettle, by Niels Mé°ˆler. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#ifndef _LINUX_CRYPTO_H +#define _LINUX_CRYPTO_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef BUILT_IN_CRYPTO +#ifdef CONFIG_CRYPTO_HMAC +#undef CONFIG_CRYPTO_HMAC +#endif + +#ifdef CONFIG_KMOD +#undef CONFIG_KMOD +#endif +#endif /* BUILT_IN_CRYPTO */ + +#define crypto_register_alg crypto_register_alg_rsl +#define crypto_unregister_alg crypto_unregister_alg_rsl +#define crypto_alloc_tfm crypto_alloc_tfm_rsl +#define crypto_free_tfm crypto_free_tfm_rsl +#define crypto_alg_available crypto_alg_available_rsl + +/* + * Algorithm masks and types. + */ +#define CRYPTO_ALG_TYPE_MASK 0x000000ff +#define CRYPTO_ALG_TYPE_CIPHER 0x00000001 +#define CRYPTO_ALG_TYPE_DIGEST 0x00000002 +#define CRYPTO_ALG_TYPE_COMPRESS 0x00000004 + +/* + * Transform masks and values (for crt_flags). + */ +#define CRYPTO_TFM_MODE_MASK 0x000000ff +#define CRYPTO_TFM_REQ_MASK 0x000fff00 +#define CRYPTO_TFM_RES_MASK 0xfff00000 + +#define CRYPTO_TFM_MODE_ECB 0x00000001 +#define CRYPTO_TFM_MODE_CBC 0x00000002 +#define CRYPTO_TFM_MODE_CFB 0x00000004 +#define CRYPTO_TFM_MODE_CTR 0x00000008 + +#define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 +#define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 +#define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 +#define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 +#define CRYPTO_TFM_RES_BAD_BLOCK_LEN 0x00800000 +#define CRYPTO_TFM_RES_BAD_FLAGS 0x01000000 + +/* + * Miscellaneous stuff. + */ +#define CRYPTO_UNSPEC 0 +#define CRYPTO_MAX_ALG_NAME 64 + +struct scatterlist; + +/* + * Algorithms: modular crypto algorithm implementations, managed + * via crypto_register_alg() and crypto_unregister_alg(). + */ +struct cipher_alg { + unsigned int cia_min_keysize; + unsigned int cia_max_keysize; + int (*cia_setkey)(void *ctx, const u8 *key, + unsigned int keylen, u32 *flags); + void (*cia_encrypt)(void *ctx, u8 *dst, const u8 *src); + void (*cia_decrypt)(void *ctx, u8 *dst, const u8 *src); +}; + +struct digest_alg { + unsigned int dia_digestsize; + void (*dia_init)(void *ctx); + void (*dia_update)(void *ctx, const u8 *data, unsigned int len); + void (*dia_final)(void *ctx, u8 *out); + int (*dia_setkey)(void *ctx, const u8 *key, + unsigned int keylen, u32 *flags); +}; + +struct compress_alg { + int (*coa_init)(void *ctx); + void (*coa_exit)(void *ctx); + int (*coa_compress)(void *ctx, const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen); + int (*coa_decompress)(void *ctx, const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen); +}; + +#define cra_cipher cra_u.cipher +#define cra_digest cra_u.digest +#define cra_compress cra_u.compress + +struct crypto_alg { + struct list_head cra_list; + u32 cra_flags; + unsigned int cra_blocksize; + unsigned int cra_ctxsize; + const char cra_name[CRYPTO_MAX_ALG_NAME]; + + union { + struct cipher_alg cipher; + struct digest_alg digest; + struct compress_alg compress; + } cra_u; + + struct module *cra_module; +}; + +/* + * Algorithm registration interface. + */ +int crypto_register_alg(struct crypto_alg *alg); +int crypto_unregister_alg(struct crypto_alg *alg); + +/* + * Algorithm query interface. + */ +int crypto_alg_available(const char *name, u32 flags); + +/* + * Transforms: user-instantiated objects which encapsulate algorithms + * and core processing logic. Managed via crypto_alloc_tfm() and + * crypto_free_tfm(), as well as the various helpers below. + */ +struct crypto_tfm; + +struct cipher_tfm { + void *cit_iv; + unsigned int cit_ivsize; + u32 cit_mode; + int (*cit_setkey)(struct crypto_tfm *tfm, + const u8 *key, unsigned int keylen); + int (*cit_encrypt)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes); + int (*cit_encrypt_iv)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv); + int (*cit_decrypt)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes); + int (*cit_decrypt_iv)(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv); + void (*cit_xor_block)(u8 *dst, const u8 *src); +}; + +struct digest_tfm { + void (*dit_init)(struct crypto_tfm *tfm); + void (*dit_update)(struct crypto_tfm *tfm, + struct scatterlist *sg, unsigned int nsg); + void (*dit_final)(struct crypto_tfm *tfm, u8 *out); + void (*dit_digest)(struct crypto_tfm *tfm, struct scatterlist *sg, + unsigned int nsg, u8 *out); + int (*dit_setkey)(struct crypto_tfm *tfm, + const u8 *key, unsigned int keylen); +#ifdef CONFIG_CRYPTO_HMAC + void *dit_hmac_block; +#endif +}; + +struct compress_tfm { + int (*cot_compress)(struct crypto_tfm *tfm, + const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen); + int (*cot_decompress)(struct crypto_tfm *tfm, + const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen); +}; + +#define crt_cipher crt_u.cipher +#define crt_digest crt_u.digest +#define crt_compress crt_u.compress + +struct crypto_tfm { + + u32 crt_flags; + + union { + struct cipher_tfm cipher; + struct digest_tfm digest; + struct compress_tfm compress; + } crt_u; + + struct crypto_alg *__crt_alg; +}; + +/* + * Transform user interface. + */ + +/* + * crypto_alloc_tfm() will first attempt to locate an already loaded algorithm. + * If that fails and the kernel supports dynamically loadable modules, it + * will then attempt to load a module of the same name or alias. A refcount + * is grabbed on the algorithm which is then associated with the new transform. + * + * crypto_free_tfm() frees up the transform and any associated resources, + * then drops the refcount on the associated algorithm. + */ +struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, u32 tfm_flags); +void crypto_free_tfm(struct crypto_tfm *tfm); + +/* + * Transform helpers which query the underlying algorithm. + */ +static inline const char *crypto_tfm_alg_name(struct crypto_tfm *tfm) +{ + return tfm->__crt_alg->cra_name; +} + +static inline const char *crypto_tfm_alg_modname(struct crypto_tfm *tfm) +{ + struct crypto_alg *alg = tfm->__crt_alg; + + if (alg->cra_module) + return alg->cra_module->name; + else + return NULL; +} + +static inline u32 crypto_tfm_alg_type(struct crypto_tfm *tfm) +{ + return tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK; +} + +static inline unsigned int crypto_tfm_alg_min_keysize(struct crypto_tfm *tfm) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->__crt_alg->cra_cipher.cia_min_keysize; +} + +static inline unsigned int crypto_tfm_alg_max_keysize(struct crypto_tfm *tfm) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->__crt_alg->cra_cipher.cia_max_keysize; +} + +static inline unsigned int crypto_tfm_alg_ivsize(struct crypto_tfm *tfm) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->crt_cipher.cit_ivsize; +} + +static inline unsigned int crypto_tfm_alg_blocksize(struct crypto_tfm *tfm) +{ + return tfm->__crt_alg->cra_blocksize; +} + +static inline unsigned int crypto_tfm_alg_digestsize(struct crypto_tfm *tfm) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); + return tfm->__crt_alg->cra_digest.dia_digestsize; +} + +/* + * API wrappers. + */ +static inline void crypto_digest_init(struct crypto_tfm *tfm) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); + tfm->crt_digest.dit_init(tfm); +} + +static inline void crypto_digest_update(struct crypto_tfm *tfm, + struct scatterlist *sg, + unsigned int nsg) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); + tfm->crt_digest.dit_update(tfm, sg, nsg); +} + +static inline void crypto_digest_final(struct crypto_tfm *tfm, u8 *out) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); + tfm->crt_digest.dit_final(tfm, out); +} + +static inline void crypto_digest_digest(struct crypto_tfm *tfm, + struct scatterlist *sg, + unsigned int nsg, u8 *out) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); + tfm->crt_digest.dit_digest(tfm, sg, nsg, out); +} + +static inline int crypto_digest_setkey(struct crypto_tfm *tfm, + const u8 *key, unsigned int keylen) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); + if (tfm->crt_digest.dit_setkey == NULL) + return -ENOSYS; + return tfm->crt_digest.dit_setkey(tfm, key, keylen); +} + +static inline int crypto_cipher_setkey(struct crypto_tfm *tfm, + const u8 *key, unsigned int keylen) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->crt_cipher.cit_setkey(tfm, key, keylen); +} + +static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes); +} + +static inline int crypto_cipher_encrypt_iv(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB); + return tfm->crt_cipher.cit_encrypt_iv(tfm, dst, src, nbytes, iv); +} + +static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes); +} + +static inline int crypto_cipher_decrypt_iv(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB); + return tfm->crt_cipher.cit_decrypt_iv(tfm, dst, src, nbytes, iv); +} + +static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm, + const u8 *src, unsigned int len) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + memcpy(tfm->crt_cipher.cit_iv, src, len); +} + +static inline void crypto_cipher_get_iv(struct crypto_tfm *tfm, + u8 *dst, unsigned int len) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + memcpy(dst, tfm->crt_cipher.cit_iv, len); +} + +static inline int crypto_comp_compress(struct crypto_tfm *tfm, + const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS); + return tfm->crt_compress.cot_compress(tfm, src, slen, dst, dlen); +} + +static inline int crypto_comp_decompress(struct crypto_tfm *tfm, + const u8 *src, unsigned int slen, + u8 *dst, unsigned int *dlen) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS); + return tfm->crt_compress.cot_decompress(tfm, src, slen, dst, dlen); +} + +/* + * HMAC support. + */ +#ifdef CONFIG_CRYPTO_HMAC +void crypto_hmac_init(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen); +void crypto_hmac_update(struct crypto_tfm *tfm, + struct scatterlist *sg, unsigned int nsg); +void crypto_hmac_final(struct crypto_tfm *tfm, u8 *key, + unsigned int *keylen, u8 *out); +void crypto_hmac(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen, + struct scatterlist *sg, unsigned int nsg, u8 *out); +#endif /* CONFIG_CRYPTO_HMAC */ + +#endif /* _LINUX_CRYPTO_H */ + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/api.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/api.c @@ -0,0 +1,261 @@ +/* + * Scatterlist Cryptographic API. + * + * Copyright (c) 2002 James Morris + * Copyright (c) 2002 David S. Miller (davem@redhat.com) + * + * Portions derived from Cryptoapi, by Alexander Kjeldaas + * and Nettle, by Niels Mé°ˆler. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ + + +#include +#include +#include "rtl_crypto.h" +#include +#include +#include +#include "internal.h" + +LIST_HEAD(crypto_alg_list); +DECLARE_RWSEM(crypto_alg_sem); + +static inline int crypto_alg_get(struct crypto_alg *alg) +{ +#ifdef BUILT_IN_CRYPTO + return 1; +#else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + return try_module_get(alg->cra_module); +#else + return try_inc_mod_count(alg->cra_module); +#endif +#endif +} + +static inline void crypto_alg_put(struct crypto_alg *alg) +{ +#ifndef BUILT_IN_CRYPTO + if (alg->cra_module) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + module_put(alg->cra_module); +#else + __MOD_DEC_USE_COUNT(alg->cra_module); +#endif +#endif +} + +struct crypto_alg *crypto_alg_lookup(const char *name) +{ + struct crypto_alg *q, *alg = NULL; + + if (!name) + return NULL; + + down_read(&crypto_alg_sem); + + list_for_each_entry(q, &crypto_alg_list, cra_list) { + if (!(strcmp(q->cra_name, name))) { + if (crypto_alg_get(q)) + alg = q; + break; + } + } + + up_read(&crypto_alg_sem); + return alg; +} + +static int crypto_init_flags(struct crypto_tfm *tfm, u32 flags) +{ + tfm->crt_flags = 0; + + switch (crypto_tfm_alg_type(tfm)) { + case CRYPTO_ALG_TYPE_CIPHER: + return crypto_init_cipher_flags(tfm, flags); + + case CRYPTO_ALG_TYPE_DIGEST: + return crypto_init_digest_flags(tfm, flags); + + case CRYPTO_ALG_TYPE_COMPRESS: + return crypto_init_compress_flags(tfm, flags); + + default: + break; + } + + BUG(); + return -EINVAL; +} + +static int crypto_init_ops(struct crypto_tfm *tfm) +{ + switch (crypto_tfm_alg_type(tfm)) { + case CRYPTO_ALG_TYPE_CIPHER: + return crypto_init_cipher_ops(tfm); + + case CRYPTO_ALG_TYPE_DIGEST: + return crypto_init_digest_ops(tfm); + + case CRYPTO_ALG_TYPE_COMPRESS: + return crypto_init_compress_ops(tfm); + + default: + break; + } + + BUG(); + return -EINVAL; +} + +static void crypto_exit_ops(struct crypto_tfm *tfm) +{ + switch (crypto_tfm_alg_type(tfm)) { + case CRYPTO_ALG_TYPE_CIPHER: + crypto_exit_cipher_ops(tfm); + break; + + case CRYPTO_ALG_TYPE_DIGEST: + crypto_exit_digest_ops(tfm); + break; + + case CRYPTO_ALG_TYPE_COMPRESS: + crypto_exit_compress_ops(tfm); + break; + + default: + BUG(); + + } +} + +struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags) +{ + struct crypto_tfm *tfm = NULL; + struct crypto_alg *alg; + + alg = crypto_alg_mod_lookup(name); + if (alg == NULL) + goto out; + + tfm = kmalloc(sizeof(*tfm) + alg->cra_ctxsize, GFP_KERNEL); + if (tfm == NULL) + goto out_put; + + memset(tfm, 0, sizeof(*tfm) + alg->cra_ctxsize); + + tfm->__crt_alg = alg; + + if (crypto_init_flags(tfm, flags)) + goto out_free_tfm; + + if (crypto_init_ops(tfm)) { + crypto_exit_ops(tfm); + goto out_free_tfm; + } + + goto out; + +out_free_tfm: + kfree(tfm); + tfm = NULL; +out_put: + crypto_alg_put(alg); +out: + return tfm; +} + +void crypto_free_tfm(struct crypto_tfm *tfm) +{ + struct crypto_alg *alg = tfm->__crt_alg; + int size = sizeof(*tfm) + alg->cra_ctxsize; + + crypto_exit_ops(tfm); + crypto_alg_put(alg); + memset(tfm, 0, size); + kfree(tfm); +} + +int crypto_register_alg(struct crypto_alg *alg) +{ + int ret = 0; + struct crypto_alg *q; + + down_write(&crypto_alg_sem); + + list_for_each_entry(q, &crypto_alg_list, cra_list) { + if (!(strcmp(q->cra_name, alg->cra_name))) { + ret = -EEXIST; + goto out; + } + } + + list_add_tail(&alg->cra_list, &crypto_alg_list); +out: + up_write(&crypto_alg_sem); + return ret; +} + +int crypto_unregister_alg(struct crypto_alg *alg) +{ + int ret = -ENOENT; + struct crypto_alg *q; + + BUG_ON(!alg->cra_module); + + down_write(&crypto_alg_sem); + list_for_each_entry(q, &crypto_alg_list, cra_list) { + if (alg == q) { + list_del(&alg->cra_list); + ret = 0; + goto out; + } + } +out: + up_write(&crypto_alg_sem); + return ret; +} + +int crypto_alg_available(const char *name, u32 flags) +{ + int ret = 0; + struct crypto_alg *alg = crypto_alg_mod_lookup(name); + + if (alg) { + crypto_alg_put(alg); + ret = 1; + } + + return ret; +} + +#ifndef BUILT_IN_CRYPTO +static int __init init_crypto(void) +{ + printk(KERN_INFO "Initializing Cryptographic API\n"); + crypto_init_proc(); + return 0; +} + +__initcall(init_crypto); + + +/* +EXPORT_SYMBOL_GPL(crypto_register_alg); +EXPORT_SYMBOL_GPL(crypto_unregister_alg); +EXPORT_SYMBOL_GPL(crypto_alloc_tfm); +EXPORT_SYMBOL_GPL(crypto_free_tfm); +EXPORT_SYMBOL_GPL(crypto_alg_available); +*/ +EXPORT_SYMBOL_RSL(crypto_register_alg); +EXPORT_SYMBOL_RSL(crypto_unregister_alg); +EXPORT_SYMBOL_RSL(crypto_alloc_tfm); +EXPORT_SYMBOL_RSL(crypto_free_tfm); +EXPORT_SYMBOL_RSL(crypto_alg_available); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/michael_mic.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/michael_mic.c @@ -0,0 +1,194 @@ +/* + * Cryptographic API + * + * Michael MIC (IEEE 802.11i/TKIP) keyed digest + * + * Copyright (c) 2004 Jouni Malinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include "rtl_crypto.h" + + +struct michael_mic_ctx { + u8 pending[4]; + size_t pending_len; + + u32 l, r; +}; + + +static inline u32 rotl(u32 val, int bits) +{ + return (val << bits) | (val >> (32 - bits)); +} + + +static inline u32 rotr(u32 val, int bits) +{ + return (val >> bits) | (val << (32 - bits)); +} + + +static inline u32 xswap(u32 val) +{ + return ((val & 0x00ff00ff) << 8) | ((val & 0xff00ff00) >> 8); +} + + +#define michael_block(l, r) \ +do { \ + r ^= rotl(l, 17); \ + l += r; \ + r ^= xswap(l); \ + l += r; \ + r ^= rotl(l, 3); \ + l += r; \ + r ^= rotr(l, 2); \ + l += r; \ +} while (0) + + +static inline u32 get_le32(const u8 *p) +{ + return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); +} + + +static inline void put_le32(u8 *p, u32 v) +{ + p[0] = v; + p[1] = v >> 8; + p[2] = v >> 16; + p[3] = v >> 24; +} + + +static void michael_init(void *ctx) +{ + struct michael_mic_ctx *mctx = ctx; + mctx->pending_len = 0; +} + + +static void michael_update(void *ctx, const u8 *data, unsigned int len) +{ + struct michael_mic_ctx *mctx = ctx; + + if (mctx->pending_len) { + int flen = 4 - mctx->pending_len; + if (flen > len) + flen = len; + memcpy(&mctx->pending[mctx->pending_len], data, flen); + mctx->pending_len += flen; + data += flen; + len -= flen; + + if (mctx->pending_len < 4) + return; + + mctx->l ^= get_le32(mctx->pending); + michael_block(mctx->l, mctx->r); + mctx->pending_len = 0; + } + + while (len >= 4) { + mctx->l ^= get_le32(data); + michael_block(mctx->l, mctx->r); + data += 4; + len -= 4; + } + + if (len > 0) { + mctx->pending_len = len; + memcpy(mctx->pending, data, len); + } +} + + +static void michael_final(void *ctx, u8 *out) +{ + struct michael_mic_ctx *mctx = ctx; + u8 *data = mctx->pending; + + /* Last block and padding (0x5a, 4..7 x 0) */ + switch (mctx->pending_len) { + case 0: + mctx->l ^= 0x5a; + break; + case 1: + mctx->l ^= data[0] | 0x5a00; + break; + case 2: + mctx->l ^= data[0] | (data[1] << 8) | 0x5a0000; + break; + case 3: + mctx->l ^= data[0] | (data[1] << 8) | (data[2] << 16) | + 0x5a000000; + break; + } + michael_block(mctx->l, mctx->r); + /* l ^= 0; */ + michael_block(mctx->l, mctx->r); + + put_le32(out, mctx->l); + put_le32(out + 4, mctx->r); +} + + +static int michael_setkey(void *ctx, const u8 *key, unsigned int keylen, + u32 *flags) +{ + struct michael_mic_ctx *mctx = ctx; + if (keylen != 8) { + if (flags) + *flags = CRYPTO_TFM_RES_BAD_KEY_LEN; + return -EINVAL; + } + mctx->l = get_le32(key); + mctx->r = get_le32(key + 4); + return 0; +} + + +static struct crypto_alg michael_mic_alg = { + .cra_name = "michael_mic", + .cra_flags = CRYPTO_ALG_TYPE_DIGEST, + .cra_blocksize = 8, + .cra_ctxsize = sizeof(struct michael_mic_ctx), + .cra_module = THIS_MODULE, + .cra_list = LIST_HEAD_INIT(michael_mic_alg.cra_list), + .cra_u = { .digest = { + .dia_digestsize = 8, + .dia_init = michael_init, + .dia_update = michael_update, + .dia_final = michael_final, + .dia_setkey = michael_setkey } } +}; + + +int __init michael_mic_init(void) +{ + return crypto_register_alg(&michael_mic_alg); +} + + +void __exit michael_mic_exit(void) +{ + crypto_unregister_alg(&michael_mic_alg); +} + +#ifndef BUILT_IN_CRYPTO +module_init(michael_mic_init); +module_exit(michael_mic_exit); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("Michael MIC"); +MODULE_AUTHOR("Jouni Malinen "); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_TS.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_TS.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _TSTYPE_H_ +#define _TSTYPE_H_ +#include "rtl819x_Qos.h" +#define TS_SETUP_TIMEOUT 60 +#define TS_INACT_TIMEOUT 60 +#define TS_ADDBA_DELAY 60 + +#define TOTAL_TS_NUM 16 +#define TCLAS_NUM 4 + +typedef enum _TR_SELECT { + TX_DIR = 0, + RX_DIR = 1, +} TR_SELECT, *PTR_SELECT; + +typedef struct _TS_COMMON_INFO{ + struct list_head List; + struct timer_list SetupTimer; + struct timer_list InactTimer; + u8 Addr[6]; + TSPEC_BODY TSpec; + QOS_TCLAS TClass[TCLAS_NUM]; + u8 TClasProc; + u8 TClasNum; +} TS_COMMON_INFO, *PTS_COMMON_INFO; + +typedef struct _TX_TS_RECORD{ + TS_COMMON_INFO TsCommonInfo; + u16 TxCurSeq; + BA_RECORD TxPendingBARecord; + BA_RECORD TxAdmittedBARecord; + u8 bAddBaReqInProgress; + u8 bAddBaReqDelayed; + u8 bUsingBa; + u8 bDisable_AddBa; + struct timer_list TsAddBaTimer; + u8 num; +} TX_TS_RECORD, *PTX_TS_RECORD; + +typedef struct _RX_TS_RECORD { + TS_COMMON_INFO TsCommonInfo; + u16 RxIndicateSeq; + u16 RxTimeoutIndicateSeq; + struct list_head RxPendingPktList; + struct timer_list RxPktPendingTimer; + BA_RECORD RxAdmittedBARecord; + u16 RxLastSeqNum; + u8 RxLastFragNum; + u8 num; +} RX_TS_RECORD, *PRX_TS_RECORD; + + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_wx.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_wx.c @@ -0,0 +1,1346 @@ +/****************************************************************************** + + Copyright(c) 2004 Intel Corporation. All rights reserved. + + Portions of this file are based on the WEP enablement code provided by the + Host AP project hostap-drivers v0.1.3 + Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen + + Copyright (c) 2002-2003, Jouni Malinen + + 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 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. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Contact Information: + James P. Ketrenos + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + +******************************************************************************/ +#include +#include +#include +#include + +#include "rtllib.h" +#if 0 +static const char *rtllib_modes[] = { + "?", "a", "b", "ab", "g", "ag", "bg", "abg" +}; +#endif +struct modes_unit { + char *mode_string; + int mode_size; +}; +static struct modes_unit rtllib_modes[] = { + {"a",1}, + {"b",1}, + {"g",1}, + {"?",1}, +#ifdef _RTL8192_EXT_PATCH_ + {"n",5}, + {"n",4}, +#else + {"N-24G",5}, + {"N-5G",4}, +#endif +}; + +#define MAX_CUSTOM_LEN 64 +static inline char *rtl819x_translate_scan(struct rtllib_device *ieee, + char *start, char *stop, + struct rtllib_network *network, + struct iw_request_info *info) +{ + char custom[MAX_CUSTOM_LEN]; + char proto_name[IFNAMSIZ]; + char *pname = proto_name; + char *p; + struct iw_event iwe; + int i, j; + u16 max_rate, rate; + static u8 EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; + + /* First entry *MUST* be the AP MAC address */ + iwe.cmd = SIOCGIWAP; + iwe.u.ap_addr.sa_family = ARPHRD_ETHER; + memcpy(iwe.u.ap_addr.sa_data, network->bssid, ETH_ALEN); + start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_ADDR_LEN); + /* Remaining entries will be displayed in the order we provide them */ + + /* Add the ESSID */ + iwe.cmd = SIOCGIWESSID; + iwe.u.data.flags = 1; + if(network->ssid_len > 0){ + iwe.u.data.length = min(network->ssid_len, (u8)32); + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, network->ssid); + }else if(network->hidden_ssid_len == 0){ + iwe.u.data.length = sizeof(""); + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, ""); + }else { + iwe.u.data.length = min(network->hidden_ssid_len, (u8)32); + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, network->hidden_ssid); + } + /* Add the protocol name */ + iwe.cmd = SIOCGIWNAME; + for(i=0; i<(sizeof(rtllib_modes)/sizeof(rtllib_modes[0])); i++) { + if(network->mode&(1<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_rsl(info, start, stop, &iwe, IW_EV_UINT_LEN); + } + + /* Add frequency/channel */ + iwe.cmd = SIOCGIWFREQ; +/* iwe.u.freq.m = rtllib_frequency(network->channel, network->mode); + iwe.u.freq.e = 3; */ + iwe.u.freq.m = network->channel; + iwe.u.freq.e = 0; + iwe.u.freq.i = 0; + start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_FREQ_LEN); + + /* Add encryption capability */ + iwe.cmd = SIOCGIWENCODE; + if (network->capability & WLAN_CAPABILITY_PRIVACY) + iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; + else + iwe.u.data.flags = IW_ENCODE_DISABLED; + iwe.u.data.length = 0; + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, network->ssid); + /* Add basic and extended rates */ + 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; ) { + if (j < network->rates_ex_len && + ((network->rates_ex[j] & 0x7F) < + (network->rates[i] & 0x7F))) + rate = network->rates_ex[j++] & 0x7F; + else + rate = network->rates[i++] & 0x7F; + if (rate > max_rate) + max_rate = rate; + p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), + "%d%s ", rate >> 1, (rate & 1) ? ".5" : ""); + } + for (; j < network->rates_ex_len; j++) { + rate = network->rates_ex[j] & 0x7F; + p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), + "%d%s ", rate >> 1, (rate & 1) ? ".5" : ""); + if (rate > max_rate) + max_rate = rate; + } + + if (network->mode >= IEEE_N_24G) + { + PHT_CAPABILITY_ELE ht_cap = NULL; + bool is40M = false, isShortGI = false; + u8 max_mcs = 0; + if (!memcmp(network->bssht.bdHTCapBuf, EWC11NHTCap, 4)) + ht_cap = (PHT_CAPABILITY_ELE)&network->bssht.bdHTCapBuf[4]; + else + ht_cap = (PHT_CAPABILITY_ELE)&network->bssht.bdHTCapBuf[0]; + is40M = (ht_cap->ChlWidth)?1:0; + isShortGI = (ht_cap->ChlWidth)? + ((ht_cap->ShortGI40Mhz)?1:0): + ((ht_cap->ShortGI20Mhz)?1:0); + + max_mcs = HTGetHighestMCSRate(ieee, ht_cap->MCS, MCS_FILTER_ALL); + rate = MCS_DATA_RATE[is40M][isShortGI][max_mcs&0x7f]; + if (rate > max_rate) + max_rate = rate; + } +#if 0 + printk("max rate:%d ===basic rate:\n", max_rate); + for (i=0;irates_len;i++) + printk(" %x", network->rates[i]); + printk("\n=======extend rate\n"); + for (i=0; irates_ex_len; i++) + printk(" %x", network->rates_ex[i]); + printk("\n"); +#endif + iwe.cmd = SIOCGIWRATE; + iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0; + iwe.u.bitrate.value = max_rate * 500000; + start = iwe_stream_add_event_rsl(info, start, stop, &iwe, + IW_EV_PARAM_LEN); + iwe.cmd = IWEVCUSTOM; + iwe.u.data.length = p - custom; + if (iwe.u.data.length) + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, custom); + /* Add quality statistics */ + /* TODO: Fix these values... */ + iwe.cmd = IWEVQUAL; + iwe.u.qual.qual = network->stats.signal; + iwe.u.qual.level = network->stats.rssi; + iwe.u.qual.noise = network->stats.noise; + iwe.u.qual.updated = network->stats.mask & RTLLIB_STATMASK_WEMASK; + if (!(network->stats.mask & RTLLIB_STATMASK_RSSI)) + iwe.u.qual.updated |= IW_QUAL_LEVEL_INVALID; + if (!(network->stats.mask & RTLLIB_STATMASK_NOISE)) + iwe.u.qual.updated |= IW_QUAL_NOISE_INVALID; + if (!(network->stats.mask & RTLLIB_STATMASK_SIGNAL)) + iwe.u.qual.updated |= IW_QUAL_QUAL_INVALID; + iwe.u.qual.updated = 7; + start = iwe_stream_add_event_rsl(info, start, stop, &iwe, IW_EV_QUAL_LEN); + + iwe.cmd = IWEVCUSTOM; + p = custom; + iwe.u.data.length = p - custom; + if (iwe.u.data.length) + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, custom); +#if (WIRELESS_EXT < 18) + if (ieee->wpa_enabled && network->wpa_ie_len){ + char buf[MAX_WPA_IE_LEN * 2 + 30]; + u8 *p = buf; + p += sprintf(p, "wpa_ie="); + for (i = 0; i < network->wpa_ie_len; i++) { + p += sprintf(p, "%02x", network->wpa_ie[i]); + } + + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVCUSTOM; + iwe.u.data.length = strlen(buf); + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf); + } + + if (ieee->wpa_enabled && network->rsn_ie_len){ + char buf[MAX_WPA_IE_LEN * 2 + 30]; + + u8 *p = buf; + p += sprintf(p, "rsn_ie="); + for (i = 0; i < network->rsn_ie_len; i++) { + p += sprintf(p, "%02x", network->rsn_ie[i]); + } + + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVCUSTOM; + iwe.u.data.length = strlen(buf); + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf); + } +#else + memset(&iwe, 0, sizeof(iwe)); + if (network->wpa_ie_len) + { + char buf[MAX_WPA_IE_LEN]; + memcpy(buf, network->wpa_ie, network->wpa_ie_len); + iwe.cmd = IWEVGENIE; + iwe.u.data.length = network->wpa_ie_len; + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf); + } + memset(&iwe, 0, sizeof(iwe)); + if (network->rsn_ie_len) + { + char buf[MAX_WPA_IE_LEN]; + memcpy(buf, network->rsn_ie, network->rsn_ie_len); + iwe.cmd = IWEVGENIE; + iwe.u.data.length = network->rsn_ie_len; + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf); + } + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) +#ifndef CUSTOMER_ID_INTEL_CMPC + /* add info for WZC */ + memset(&iwe, 0, sizeof(iwe)); + if (network->wzc_ie_len) + { + char buf[MAX_WZC_IE_LEN]; + memcpy(buf, network->wzc_ie, network->wzc_ie_len); + iwe.cmd = IWEVGENIE; + iwe.u.data.length = network->wzc_ie_len; + start = iwe_stream_add_point_rsl(info, start, stop, &iwe, buf); + } +#endif +#endif +#endif + + /* Add EXTRA: Age to display seconds since last beacon/probe response + * for given network. */ + iwe.cmd = IWEVCUSTOM; + p = custom; + p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), + " 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_rsl(info, start, stop, &iwe, custom); + + return start; +} + +int rtllib_wx_get_scan(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct rtllib_network *network; + unsigned long flags; + + char *ev = extra; + char *stop = ev + wrqu->data.length; + int i = 0; + int err = 0; + RTLLIB_DEBUG_WX("Getting scan\n"); + down(&ieee->wx_sem); + spin_lock_irqsave(&ieee->lock, flags); + + list_for_each_entry(network, &ieee->network_list, list) { + i++; + if((stop-ev)<200) + { + err = -E2BIG; + break; + } + if (ieee->scan_age == 0 || + time_after(network->last_scanned + ieee->scan_age, jiffies)) + ev = rtl819x_translate_scan(ieee, ev, stop, network, info); + else + RTLLIB_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); + up(&ieee->wx_sem); + wrqu->data.length = ev - extra; + wrqu->data.flags = 0; + + RTLLIB_DEBUG_WX("exit: %d networks returned.\n", i); + + return err; +} + +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_wx_set_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *keybuf, u8 is_mesh) +#else +int rtllib_wx_set_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *keybuf) +#endif +{ + struct iw_point *erq = &(wrqu->encoding); + struct net_device *dev = ieee->dev; + struct rtllib_security sec = { + .flags = 0 + }; + int i, key, key_provided, len; + struct rtllib_crypt_data **crypt; + + RTLLIB_DEBUG_WX("SET_ENCODE\n"); + + key = erq->flags & IW_ENCODE_INDEX; + if (key) { + if (key > WEP_KEYS) + return -EINVAL; + key--; + key_provided = 1; + } else { + key_provided = 0; +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + key = ieee->mesh_txkeyidx; + else +#endif + key = ieee->tx_keyidx; + } + + RTLLIB_DEBUG_WX("Key: %d [%s]\n", key, key_provided ? + "provided" : "default"); +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + crypt = &ieee->cryptlist[0]->crypt[key]; + else + crypt = &ieee->sta_crypt[key]; +#else + crypt = &ieee->crypt[key]; +#endif + if (erq->flags & IW_ENCODE_DISABLED) { + if (key_provided && *crypt) { + RTLLIB_DEBUG_WX("Disabling encryption on key %d.\n", + key); + rtllib_crypt_delayed_deinit(ieee, crypt); + } else + RTLLIB_DEBUG_WX("Disabling encryption.\n"); + + /* Check all the keys to see if any are still configured, + * and if no key index was provided, de-init them all */ + for (i = 0; i < WEP_KEYS; i++) { +#ifdef _RTL8192_EXT_PATCH_ + bool null_crypt = false; + if(is_mesh) + null_crypt = (ieee->cryptlist[0]->crypt[i] != NULL) ? true:false; + else + null_crypt = (ieee->sta_crypt[i] != NULL) ? true:false; + if (null_crypt) +#else + if (ieee->crypt[i] != NULL) +#endif + { + if (key_provided) + break; +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + rtllib_crypt_delayed_deinit(ieee, &ieee->cryptlist[0]->crypt[i]); + else + rtllib_crypt_delayed_deinit(ieee, &ieee->sta_crypt[i]); +#else + rtllib_crypt_delayed_deinit(ieee, &ieee->crypt[i]); +#endif + + } + } + + if (i == WEP_KEYS) { + sec.enabled = 0; + sec.level = SEC_LEVEL_0; + sec.flags |= SEC_ENABLED | SEC_LEVEL; + } + + goto done; + } + + + + sec.enabled = 1; + sec.flags |= SEC_ENABLED; + + if (*crypt != NULL && (*crypt)->ops != NULL && + strcmp((*crypt)->ops->name, "WEP") != 0) { + /* changing to use WEP; deinit previously used algorithm + * on this key */ + rtllib_crypt_delayed_deinit(ieee, crypt); + } + + if (*crypt == NULL) { + struct rtllib_crypt_data *new_crypt; + + /* take WEP into use */ + new_crypt = kmalloc(sizeof(struct rtllib_crypt_data), + GFP_KERNEL); + if (new_crypt == NULL) + return -ENOMEM; + memset(new_crypt, 0, sizeof(struct rtllib_crypt_data)); + new_crypt->ops = rtllib_get_crypto_ops("WEP"); + if (!new_crypt->ops) { + request_module("rtllib_crypt_wep"); + new_crypt->ops = rtllib_get_crypto_ops("WEP"); + } + +#ifdef BUILT_IN_RTLLIB + if (new_crypt->ops) +#else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) +#else + if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner)) +#endif +#endif + { + new_crypt->priv = new_crypt->ops->init(key); + } + + if (!new_crypt->ops || !new_crypt->priv) { + kfree(new_crypt); + new_crypt = NULL; + + printk(KERN_WARNING "%s: could not initialize WEP: " + "load module rtllib_crypt_wep\n", + dev->name); + return -EOPNOTSUPP; + } + *crypt = new_crypt; + } + + /* If a new key was provided, set it up */ + if (erq->length > 0) { + len = erq->length <= 5 ? 5 : 13; + memcpy(sec.keys[key], keybuf, erq->length); + if (len > erq->length) + memset(sec.keys[key] + erq->length, 0, + len - erq->length); + RTLLIB_DEBUG_WX("Setting key %d to '%s' (%d:%d bytes)\n", + 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)->priv); + sec.flags |= (1 << key); + /* This ensures a key will be activated if no key is + * explicitely set */ + if (key == sec.active_key) + sec.flags |= SEC_ACTIVE_KEY; +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + ieee->mesh_txkeyidx = key; + else +#endif + ieee->tx_keyidx = key; + + } else { + len = (*crypt)->ops->get_key(sec.keys[key], WEP_KEY_LEN, + NULL, (*crypt)->priv); + if (len == 0) { + /* Set a default key of all 0 */ + printk("Setting key %d to all zero.\n", + key); + + RTLLIB_DEBUG_WX("Setting key %d to all zero.\n", + key); + memset(sec.keys[key], 0, 13); + (*crypt)->ops->set_key(sec.keys[key], 13, NULL, + (*crypt)->priv); + sec.key_sizes[key] = 13; + sec.flags |= (1 << key); + } + + /* No key data - just set the default TX key index */ + if (key_provided) { + RTLLIB_DEBUG_WX( + "Setting key %d to default Tx key.\n", key); +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + ieee->mesh_txkeyidx = key; + else +#endif + ieee->tx_keyidx = key; + sec.active_key = key; + sec.flags |= SEC_ACTIVE_KEY; + } + } +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_MESH)&&(is_mesh)&&ieee->ext_patch_rtllib_create_crypt_for_peer) + { + ieee->ext_patch_rtllib_create_crypt_for_peer(ieee); + } +#endif + done: + ieee->open_wep = !(erq->flags & IW_ENCODE_RESTRICTED); + ieee->auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY; + sec.auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY; + sec.flags |= SEC_AUTH_MODE; + RTLLIB_DEBUG_WX("Auth: %s\n", sec.auth_mode == WLAN_AUTH_OPEN ? + "OPEN" : "SHARED KEY"); + + /* 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 */ + + if (ieee->set_security) + ieee->set_security(dev, &sec); + + /* Do not reset port if card is in Managed mode since resetting will + * generate new IEEE 802.11 authentication which may end up in looping + * with IEEE 802.1X. If your hardware requires a reset after WEP + * configuration (for example... Prism2), implement the reset_port in + * the callbacks structures used to initialize the 802.11 stack. */ + if (ieee->reset_on_keychange && + ieee->iw_mode != IW_MODE_INFRA && + ieee->reset_port && ieee->reset_port(dev)) { + printk(KERN_DEBUG "%s: reset_port failed\n", dev->name); + return -EINVAL; + } + return 0; +} + +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_wx_get_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *keybuf, u8 is_mesh) +#else +int rtllib_wx_get_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *keybuf) +#endif +{ + struct iw_point *erq = &(wrqu->encoding); + int len, key; + struct rtllib_crypt_data *crypt; + + RTLLIB_DEBUG_WX("GET_ENCODE\n"); + + if(ieee->iw_mode == IW_MODE_MONITOR) + return -1; + + key = erq->flags & IW_ENCODE_INDEX; + if (key) { + if (key > WEP_KEYS) + return -EINVAL; + key--; + } else { +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + key = ieee->mesh_txkeyidx; + else +#endif + key = ieee->tx_keyidx; + } +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + crypt = ieee->cryptlist[0]->crypt[key]; + else + crypt = ieee->sta_crypt[key]; +#else + crypt = ieee->crypt[key]; +#endif + + erq->flags = key + 1; + + if (crypt == NULL || crypt->ops == NULL) { + erq->length = 0; + erq->flags |= IW_ENCODE_DISABLED; + return 0; + } +#if 0 + if (strcmp(crypt->ops->name, "WEP") != 0) { + /* only WEP is supported with wireless extensions, so just + * report that encryption is used */ + erq->length = 0; + erq->flags |= IW_ENCODE_ENABLED; + return 0; + } +#endif + len = crypt->ops->get_key(keybuf, SCM_KEY_LEN, NULL, crypt->priv); + erq->length = (len >= 0 ? len : 0); + + erq->flags |= IW_ENCODE_ENABLED; + + if (ieee->open_wep) + erq->flags |= IW_ENCODE_OPEN; + else + erq->flags |= IW_ENCODE_RESTRICTED; + + return 0; +} +#if (WIRELESS_EXT >= 18) +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_wx_set_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra, u8 is_mesh) +#else +int rtllib_wx_set_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +#endif +{ + int ret = 0; + struct net_device *dev = ieee->dev; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + int i, idx; + int group_key = 0; + const char *alg, *module; + struct rtllib_crypto_ops *ops; + struct rtllib_crypt_data **crypt; + + struct rtllib_security sec = { + .flags = 0, + }; + idx = encoding->flags & IW_ENCODE_INDEX; + if (idx) { + if (idx < 1 || idx > WEP_KEYS) + return -EINVAL; + idx--; + } else{ +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + idx = ieee->mesh_txkeyidx; + else +#endif + idx = ieee->tx_keyidx; + } + if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + crypt = &ieee->cryptlist[0]->crypt[idx]; + else + crypt = &ieee->sta_crypt[idx]; +#else + crypt = &ieee->crypt[idx]; +#endif + group_key = 1; + } else { + /* some Cisco APs use idx>0 for unicast in dynamic WEP */ + if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP) + return -EINVAL; +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_INFRA)|| + ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0))){ + if(is_mesh) + crypt = &ieee->cryptlist[0]->crypt[idx]; + else + crypt = &ieee->sta_crypt[idx]; + } + else + return -EINVAL; +#else + if (ieee->iw_mode == IW_MODE_INFRA) + crypt = &ieee->crypt[idx]; + else + return -EINVAL; +#endif + } + + sec.flags |= SEC_ENABLED; + if ((encoding->flags & IW_ENCODE_DISABLED) || + ext->alg == IW_ENCODE_ALG_NONE) { + if (*crypt) + rtllib_crypt_delayed_deinit(ieee, crypt); + + for (i = 0; i < WEP_KEYS; i++) + { +#ifdef _RTL8192_EXT_PATCH_ + if ((is_mesh)&&(ieee->cryptlist[0]->crypt[i] != NULL)) + break; + if ((!is_mesh)&&(ieee->sta_crypt[i] != NULL)) + break; +#else + if (ieee->crypt[i] != NULL) + break; +#endif + } + if (i == WEP_KEYS) { + sec.enabled = 0; + sec.level = SEC_LEVEL_0; + sec.flags |= SEC_LEVEL; + } + goto done; + } + + sec.enabled = 1; +#if 0 + if (group_key ? !ieee->host_mc_decrypt : + !(ieee->host_encrypt || ieee->host_decrypt || + ieee->host_encrypt_msdu)) + goto skip_host_crypt; +#endif + switch (ext->alg) { + case IW_ENCODE_ALG_WEP: + alg = "WEP"; + module = "rtllib_crypt_wep"; + break; + case IW_ENCODE_ALG_TKIP: + alg = "TKIP"; + module = "rtllib_crypt_tkip"; + break; + case IW_ENCODE_ALG_CCMP: + alg = "CCMP"; + module = "rtllib_crypt_ccmp"; + break; + default: + RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n", + dev->name, ext->alg); + ret = -EINVAL; + goto done; + } + printk("alg name:%s\n",alg); + + ops = rtllib_get_crypto_ops(alg); + if (ops == NULL) { + char tempbuf[100]; + + memset( tempbuf, 0x00, 100 ); + sprintf( tempbuf, "%s", module); + request_module("%s",tempbuf); + ops = rtllib_get_crypto_ops(alg); + } + if (ops == NULL) { + RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n", + dev->name, ext->alg); + printk("========>unknown crypto alg %d\n", ext->alg); + ret = -EINVAL; + goto done; + } + + if (*crypt == NULL || (*crypt)->ops != ops) { + struct rtllib_crypt_data *new_crypt; + + rtllib_crypt_delayed_deinit(ieee, crypt); + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) + new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL); +#else + new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL); + memset(new_crypt,0,sizeof(*new_crypt)); +#endif + if (new_crypt == NULL) { + ret = -ENOMEM; + goto done; + } + new_crypt->ops = ops; +#ifdef BUILT_IN_RTLLIB + if (new_crypt->ops) +#else + if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) +#endif + { + new_crypt->priv = new_crypt->ops->init(idx); + } + + if (new_crypt->priv == NULL) { + kfree(new_crypt); + ret = -EINVAL; + goto done; + } + *crypt = new_crypt; + + } +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_MESH)&&(is_mesh)) + { + int j; + for (j=1; jcryptlist[j]->crypt[idx]; + if (*crypttmp == NULL) + break; + if (*crypttmp && (*crypttmp)->ops != ops) + rtllib_crypt_delayed_deinit(ieee, crypttmp); + } + } +#endif + + if (ext->key_len > 0 && (*crypt)->ops->set_key && + (*crypt)->ops->set_key(ext->key, ext->key_len, ext->rx_seq, + (*crypt)->priv) < 0) { + RTLLIB_DEBUG_WX("%s: key setting failed\n", dev->name); + printk("key setting failed\n"); + ret = -EINVAL; + goto done; + } +#if 1 + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + ieee->mesh_txkeyidx = idx; + else +#endif + ieee->tx_keyidx = idx; + sec.active_key = idx; + sec.flags |= SEC_ACTIVE_KEY; + } +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_MESH)&&(is_mesh)&&ieee->ext_patch_rtllib_create_crypt_for_peer) + { + ieee->ext_patch_rtllib_create_crypt_for_peer(ieee); + } +#endif + if (ext->alg != IW_ENCODE_ALG_NONE) { + sec.key_sizes[idx] = ext->key_len; + sec.flags |= (1 << idx); + if (ext->alg == IW_ENCODE_ALG_WEP) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_1; + } else if (ext->alg == IW_ENCODE_ALG_TKIP) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_2; + } else if (ext->alg == IW_ENCODE_ALG_CCMP) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_3; + } + /* Don't set sec level for group keys. */ + if (group_key) + sec.flags &= ~SEC_LEVEL; + } +#endif +done: + if (ieee->set_security) + ieee->set_security(ieee->dev, &sec); + + if (ieee->reset_on_keychange && + ieee->iw_mode != IW_MODE_INFRA && + ieee->reset_port && ieee->reset_port(dev)) { + RTLLIB_DEBUG_WX("%s: reset_port failed\n", dev->name); + return -EINVAL; + } + return ret; +} + +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_wx_get_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra, u8 is_mesh) +#else +int rtllib_wx_get_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +#endif +{ + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + struct rtllib_crypt_data *crypt; + int idx, max_key_len; + + max_key_len = encoding->length - sizeof(*ext); + if (max_key_len < 0) + return -EINVAL; + + idx = encoding->flags & IW_ENCODE_INDEX; + if (idx) { + if (idx < 1 || idx > WEP_KEYS) + return -EINVAL; + idx--; + } else{ +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + idx = ieee->mesh_txkeyidx; + else +#endif + idx = ieee->tx_keyidx; + } + if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && + (ext->alg != IW_ENCODE_ALG_WEP)) +#ifdef _RTL8192_EXT_PATCH_ + if (idx != 0 || !((ieee->iw_mode == IW_MODE_INFRA) || ((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0)))) +#else + if (idx != 0 || (ieee->iw_mode != IW_MODE_INFRA)) +#endif + return -EINVAL; + +#ifdef _RTL8192_EXT_PATCH_ + if(is_mesh) + crypt = ieee->cryptlist[0]->crypt[idx]; + else + crypt = ieee->sta_crypt[idx]; +#else + crypt = ieee->crypt[idx]; +#endif + + encoding->flags = idx + 1; + memset(ext, 0, sizeof(*ext)); + + if (crypt == NULL || crypt->ops == NULL ) { + ext->alg = IW_ENCODE_ALG_NONE; + ext->key_len = 0; + encoding->flags |= IW_ENCODE_DISABLED; + } else { + if (strcmp(crypt->ops->name, "WEP") == 0 ) + ext->alg = IW_ENCODE_ALG_WEP; + else if (strcmp(crypt->ops->name, "TKIP")) + ext->alg = IW_ENCODE_ALG_TKIP; + else if (strcmp(crypt->ops->name, "CCMP")) + ext->alg = IW_ENCODE_ALG_CCMP; + else + return -EINVAL; + ext->key_len = crypt->ops->get_key(ext->key, SCM_KEY_LEN, NULL, crypt->priv); + encoding->flags |= IW_ENCODE_ENABLED; + if (ext->key_len && + (ext->alg == IW_ENCODE_ALG_TKIP || + ext->alg == IW_ENCODE_ALG_CCMP)) + ext->ext_flags |= IW_ENCODE_EXT_TX_SEQ_VALID; + + } + + return 0; +} +#ifdef _RTL8192_EXT_PATCH_ +int rtllib_mesh_set_encode_ext(struct rtllib_device *ieee, + struct iw_point *encoding, struct iw_encode_ext *ext, int entry) +{ + int ret = 0; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct net_device *dev = ieee->dev; + int i, idx; + int group_key = 0; + const char *alg, *module; + struct rtllib_crypto_ops *ops; + struct rtllib_crypt_data **crypt; + + struct rtllib_security sec = { + .flags = 0, + }; + idx = encoding->flags & IW_ENCODE_INDEX; + + if (idx) { + if (idx < 1 || idx > WEP_KEYS) + return -EINVAL; + idx--; + } else + idx = ieee->tx_keyidx; + + + if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { + crypt = &ieee->cryptlist[0]->crypt[idx]; + group_key = 1; + } else { + /* some Cisco APs use idx>0 for unicast in dynamic WEP */ + if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP) + return -EINVAL; + if ((ieee->iw_mode == IW_MODE_INFRA) || (ieee->mesh_started==1)) + { + crypt = &ieee->cryptlist[entry]->crypt[idx]; +#if 0 + if(*crypt == NULL ) + printk("%s: ERR! &ieee->cryptlist[%d]->crypt[%d] is NULL.\n",__func__, entry,idx); +#endif + } + else + return -EINVAL; + } + + sec.flags |= SEC_ENABLED; + if ((encoding->flags & IW_ENCODE_DISABLED) || + ext->alg == IW_ENCODE_ALG_NONE) { + if (*crypt){ + printk("=====>%s():DISABLE crypt is not NULL\n",__FUNCTION__); + rtllib_crypt_delayed_deinit(ieee, crypt); + } +#ifdef _RTL8192_EXT_PATCH_ + if(1) + { + int j; + for (j=1; jcryptlist[j]->crypt[idx]; + if (*crypttmp == NULL) + continue; + printk("======>crypt is not NULL\n"); + rtllib_crypt_delayed_deinit(ieee, crypttmp); + } + } +#endif + + for (i = 0; i < WEP_KEYS; i++){ + if (ieee->cryptlist[0]->crypt[i] != NULL) + break; + } + if (i == WEP_KEYS) { + sec.enabled = 0; + sec.level = SEC_LEVEL_0; + sec.flags |= SEC_LEVEL; + } + goto done; + } + + sec.enabled = 1; +#if 0 + if (group_key ? !ieee->host_mc_decrypt : + !(ieee->host_encrypt || ieee->host_decrypt || + ieee->host_encrypt_msdu)) + goto skip_host_crypt; +#endif + switch (ext->alg) { + case IW_ENCODE_ALG_WEP: + alg = "WEP"; + module = "rtllib_crypt_wep"; + break; + case IW_ENCODE_ALG_TKIP: + alg = "TKIP"; + module = "rtllib_crypt_tkip"; + break; + case IW_ENCODE_ALG_CCMP: + alg = "CCMP"; + module = "rtllib_crypt_ccmp"; + break; + default: + RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n", + dev->name, ext->alg); + ret = -EINVAL; + goto done; + } + printk("%s: alg name:%s\n",__FUNCTION__, alg); + + ops = rtllib_get_crypto_ops(alg); + if (ops == NULL) { + request_module("%s",module); + ops = rtllib_get_crypto_ops(alg); + } + if (ops == NULL) { + RTLLIB_DEBUG_WX("%s: unknown crypto alg %d\n", + dev->name, ext->alg); + printk("========>unknown crypto alg %d\n", ext->alg); + ret = -EINVAL; + goto done; + } + + if (*crypt == NULL || (*crypt)->ops != ops) { + + struct rtllib_crypt_data *new_crypt; + + rtllib_crypt_delayed_deinit(ieee, crypt); + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) + new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL); +#else + new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL); + memset(new_crypt,0,sizeof(*new_crypt)); +#endif + if (new_crypt == NULL) { + ret = -ENOMEM; + goto done; + } + new_crypt->ops = ops; +#ifdef BUILT_IN_RTLLIB + if (new_crypt->ops) +#else + if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) +#endif + { + new_crypt->priv = new_crypt->ops->init(idx); + } + if (new_crypt->priv == NULL) { + kfree(new_crypt); + ret = -EINVAL; + goto done; + } + *crypt = new_crypt; + } + + printk("%s: key_len %x \n",__FUNCTION__, ext->key_len); + + if (ext->key_len > 0 && (*crypt)->ops->set_key && + (*crypt)->ops->set_key(ext->key, ext->key_len, ext->rx_seq, + (*crypt)->priv) < 0) { + RTLLIB_DEBUG_WX("%s: key setting failed\n", dev->name); + printk("key setting failed\n"); + ret = -EINVAL; + goto done; + } +#if 1 + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { + ieee->mesh_txkeyidx = idx; + sec.active_key = idx; + sec.flags |= SEC_ACTIVE_KEY; + } + + if (ext->alg != IW_ENCODE_ALG_NONE) { + sec.key_sizes[idx] = ext->key_len; + sec.flags |= (1 << idx); + if (ext->alg == IW_ENCODE_ALG_WEP) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_1; + } else if (ext->alg == IW_ENCODE_ALG_TKIP) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_2; + } else if (ext->alg == IW_ENCODE_ALG_CCMP) { + sec.flags |= SEC_LEVEL; + sec.level = SEC_LEVEL_3; + } + /* Don't set sec level for group keys. */ + if (group_key) + sec.flags &= ~SEC_LEVEL; + } +#endif +done: + if (ieee->set_security) + ieee->set_security(ieee->dev, &sec); + + if (ieee->reset_on_keychange && + ieee->iw_mode != IW_MODE_INFRA && + ieee->reset_port && ieee->reset_port(dev)) { + RTLLIB_DEBUG_WX("%s: reset_port failed\n", dev->name); + return -EINVAL; + } +#endif + return ret; +} +#endif + +int rtllib_wx_set_mlme(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + u8 i = 0; + bool deauth = false; + struct iw_mlme *mlme = (struct iw_mlme *) extra; + + if (ieee->state != RTLLIB_LINKED) + return -ENOLINK; + + down(&ieee->wx_sem); + + switch (mlme->cmd) { + case IW_MLME_DEAUTH: + deauth = true; + /* leave break out intentionly */ + + case IW_MLME_DISASSOC: +#ifdef _RTL8192_EXT_PATCH_ + if(!((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 1))) + { +#endif + if(deauth == true) { + printk("disauth packet !\n"); + } else { + printk("dis associate packet!\n"); + } + + ieee->cannot_notify = true; + + SendDisassociation(ieee,deauth,mlme->reason_code); + rtllib_disassociate(ieee); + + ieee->wap_set = 0; + for(i=0;i<6;i++) ieee->current_network.bssid[i]= 0x55; + + ieee->ssid_set = 0; + ieee->current_network.ssid[0] = '\0'; + ieee->current_network.ssid_len = 0; +#ifdef _RTL8192_EXT_PATCH_ + } +#endif + break; + default: + up(&ieee->wx_sem); + return -EOPNOTSUPP; + } + + up(&ieee->wx_sem); + +#endif + return 0; +} + +int rtllib_wx_set_auth(struct rtllib_device *ieee, + struct iw_request_info *info, + struct iw_param *data, char *extra) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + switch (data->flags & IW_AUTH_INDEX) { + case IW_AUTH_WPA_VERSION: + break; + case IW_AUTH_CIPHER_PAIRWISE: + case IW_AUTH_CIPHER_GROUP: + case IW_AUTH_KEY_MGMT: + /* + * Host AP driver does not use these parameters and allows + * wpa_supplicant to control them internally. + */ + break; + case IW_AUTH_TKIP_COUNTERMEASURES: + ieee->tkip_countermeasures = data->value; + break; + case IW_AUTH_DROP_UNENCRYPTED: + ieee->drop_unencrypted = data->value; + break; + + case IW_AUTH_80211_AUTH_ALG: + if(data->value & IW_AUTH_ALG_SHARED_KEY){ + ieee->open_wep = 0; + ieee->auth_mode = 1; + } + else if(data->value & IW_AUTH_ALG_OPEN_SYSTEM){ + ieee->open_wep = 1; + ieee->auth_mode = 0; + } + else if(data->value & IW_AUTH_ALG_LEAP){ + ieee->open_wep = 1; + ieee->auth_mode = 2; + } + else + return -EINVAL; + break; + +#if 1 + case IW_AUTH_WPA_ENABLED: + ieee->wpa_enabled = (data->value)?1:0; + break; + +#endif + case IW_AUTH_RX_UNENCRYPTED_EAPOL: + ieee->ieee802_1x = data->value; + break; + case IW_AUTH_PRIVACY_INVOKED: + ieee->privacy_invoked = data->value; + break; + default: + return -EOPNOTSUPP; + } +#endif + return 0; +} +#endif + +int rtllib_wx_set_gen_ie(struct rtllib_device *ieee, u8 *ie, size_t len) +{ +#if (WIRELESS_EXT >= 18 ) + u8 *buf; + u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04}; + + if (len > MAX_WPA_IE_LEN || (len && ie == NULL)) { + return -EINVAL; + } + + if (len) { + eid = ie[0]; + if ((eid == MFIE_TYPE_GENERIC) && (!memcmp(&ie[2], wps_oui, 4))) { + + ieee->wps_ie_len = (len < MAX_WZC_IE_LEN) ? (len):(MAX_WZC_IE_LEN); + buf = kmalloc(ieee->wps_ie_len, GFP_KERNEL); + if (buf == NULL) + return -ENOMEM; + memcpy(buf, ie, ieee->wps_ie_len); + ieee->wps_ie = buf; + return 0; + } + } + ieee->wps_ie_len = 0; + if (ieee->wps_ie) + kfree(ieee->wps_ie); + ieee->wps_ie = NULL; + if (len) { + if (len != ie[1]+2) { + return -EINVAL; + } + buf = kmalloc(len, GFP_KERNEL); + if (buf == NULL) + return -ENOMEM; + memcpy(buf, ie, len); + kfree(ieee->wpa_ie); + ieee->wpa_ie = buf; + ieee->wpa_ie_len = len; + } else { + if (ieee->wpa_ie) + kfree(ieee->wpa_ie); + ieee->wpa_ie = NULL; + ieee->wpa_ie_len = 0; + } +#endif + return 0; +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_wx_set_gen_ie); +#if (WIRELESS_EXT >= 18) +EXPORT_SYMBOL_RSL(rtllib_wx_set_mlme); +EXPORT_SYMBOL_RSL(rtllib_wx_set_auth); +EXPORT_SYMBOL_RSL(rtllib_wx_set_encode_ext); +EXPORT_SYMBOL_RSL(rtllib_wx_get_encode_ext); +#endif +EXPORT_SYMBOL_RSL(rtllib_wx_get_scan); +EXPORT_SYMBOL_RSL(rtllib_wx_set_encode); +EXPORT_SYMBOL_RSL(rtllib_wx_get_encode); +#endif +#ifdef _RTL8192_EXT_PATCH_ +EXPORT_SYMBOL_RSL(rtllib_mesh_set_encode_ext); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/kmap_types.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/kmap_types.h @@ -0,0 +1,20 @@ +#ifndef __KMAP_TYPES_H + +#define __KMAP_TYPES_H + + +enum km_type { + KM_BOUNCE_READ, + KM_SKB_SUNRPC_DATA, + KM_SKB_DATA_SOFTIRQ, + KM_USER0, + KM_USER1, + KM_BH_IRQ, + KM_SOFTIRQ0, + KM_SOFTIRQ1, + KM_TYPE_NR +}; + +#define _ASM_KMAP_TYPES_H + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/readme +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/readme @@ -0,0 +1,162 @@ +What this layer should do + +- It mantain the old mechanism as alternative, so the + ipw2100 driver works with really few changes. +- Encapsulate / Decapsulate rtllib packet +- Handle fragmentation +- Optionally provide an alterantive mechanism for netif queue stop/wake, + so that the rtllib layer will pass one fragment per time instead of + one txb struct per time. so the driver can stop the queue in the middle + of a packet. +- Provide two different TX interfaces for cards that can handle management + frames on one HW queue, and data on another, and for cards that have only + one HW queue (the latter untested and very, very rough). +- Optionally provide the logic for handling IBSS/MASTER/MONITOR/BSS modes + and for the channel, essid and wap get/set wireless extension requests. + so that the driver has only to change channel when the ieee stack tell it. +- Optionally provide a scanning mechanism so that the driver has not to + worry about this, just implement the set channel calback and pass + frames to the upper layer +- Optionally provide the bss client protocol handshaking (just with open + authentication) +- Optionally provide the probe request send mechanism +- Optionally provide the bss master mode logic to handle association + protocol (only open authentication) and probe responses. +- SW wep encryption (with open authentication) +- It collects some stats +- It provides beacons to the card when it ask for them + +What this layer doesn't do (yet) +- Perform shared authentication +- Have full support for master mode (the AP should loop back in the air + frames from an associated client to another. This could be done easily + with few lines of code, and it is done in my previous version of the + stach, but a table of association must be keept and a disassociation + policy must be decided and implemented. +- Handle cleanly the full ieee 802.11 protocol. In AP mode it never + disassociate clients, and it is really prone to always allow access. + In bss client mode it is a bit rough with AP deauth and disassoc requests. +- It has not any entry point to view the collected stats. +- Altought it takes care of the card supported rates in the management frame + it sends, support for rate changing on TXed packet is not complete. +- Give up once associated in bss client mode (it never detect a + signal loss condition to disassociate and restart scanning) +- Provide a mechanism for enabling the TX in monitor mode, so + userspace programs can TX raw packets. +- Provide a mechanism for cards that need that the SW take care of beacon + TX completely, in sense that the SW has to enqueue by itself beacons + to the card so it TX them (if any...) +APIs + +Callback functions in the original stack has been mantained. +following has been added (from rtllib.h) + + /* Softmac-generated frames (mamagement) are TXed via this + * callback if the flag IEEE_SOFTMAC_SINGLE_QUEUE is + * not set. As some cards may have different HW queues that + * one might want to use for data and management frames + * the option to have two callbacks might be useful. + * This fucntion can't sleep. + */ + int (*softmac_hard_start_xmit)(struct sk_buff *skb, + struct net_device *dev); + + /* used instead of hard_start_xmit (not softmac_hard_start_xmit) + * if the IEEE_SOFTMAC_TX_QUEUE feature is used to TX data + * frames. I the option IEEE_SOFTMAC_SINGLE_QUEUE is also set + * then also management frames are sent via this callback. + * This function can't sleep. + */ + void (*softmac_data_hard_start_xmit)(struct sk_buff *skb, + struct net_device *dev); + + /* stops the HW queue for DATA frames. Useful to avoid + * waste time to TX data frame when we are reassociating + * This function can sleep. + */ + void (*data_hard_stop)(struct net_device *dev); + + /* OK this is complementar to data_poll_hard_stop */ + void (*data_hard_resume)(struct net_device *dev); + + /* ask to the driver to retune the radio . + * This function can sleep. the driver should ensure + * the radio has been swithced before return. + */ + void (*set_chan)(struct net_device *dev,short ch); + + /* These are not used if the ieee stack takes care of + * scanning (IEEE_SOFTMAC_SCAN feature set). + * In this case only the set_chan is used. + * + * The syncro version is similar to the start_scan but + * does not return until all channels has been scanned. + * this is called in user context and should sleep, + * it is called in a work_queue when swithcing to ad-hoc mode + * or in behalf of iwlist scan when the card is associated + * and root user ask for a scan. + * the fucntion stop_scan should stop both the syncro and + * background scanning and can sleep. + * The fucntion start_scan should initiate the background + * scanning and can't sleep. + */ + void (*scan_syncro)(struct net_device *dev); + void (*start_scan)(struct net_device *dev); + void (*stop_scan)(struct net_device *dev); + + /* indicate the driver that the link state is changed + * for example it may indicate the card is associated now. + * Driver might be interested in this to apply RX filter + * rules or simply light the LINK led + */ + void (*link_change)(struct net_device *dev); + +Functions hard_data_[resume/stop] are optional and should not be used +if the driver decides to uses data+management frames enqueue in a +single HQ queue (thus using just the softmac_hard_data_start_xmit +callback). + +Function that the driver can use are: + +rtllib_get_beacon - this is called by the driver when + the HW needs a beacon. +rtllib_softmac_start_protocol - this should normally be called in the + driver open function +rtllib_softmac_stop_protocol - the opposite of the above +rtllib_wake_queue - this is similar to netif_wake_queue +rtllib_reset_queue - this throw away fragments pending(if any) +rtllib_stop_queue - this is similar to netif_stop_queue + + +known BUGS: +- When performing syncro scan (possiblily when swithcing to ad-hoc mode + and when running iwlist scan when associated) there is still an odd + behaviour.. I have not looked in this more accurately (yet). + +locking: +locking is done by means of three structures. +1- ieee->lock (by means of spin_[un]lock_irq[save/restore] +2- ieee->wx_sem +3- ieee->scan_sem + +the lock 1 is what protect most of the critical sections in the ieee stack. +the lock 2 is used to avoid that more than one of the SET wireless extension +handlers (as well as start/stop protocol function) are running at the same time. +the lock 1 is used when we need to modify or read the shared data in the wx handlers. +In other words the lock 2 will prevent one SET action will run across another SET +action (by make sleep the 2nd one) but allow GET actions, while the lock 1 +make atomic those little shared data access in both GET and SET operation. +So get operation will be never be delayed really: they will never sleep.. +Furthermore in the top of some SET operations a flag is set before acquiring +the lock. This is an help to make the previous running SET operation to +finish faster if needed (just in case the second one will totally undo the +first, so there is not need to complete the 1st really.. ). +The background scanning mechaninsm is protected by the lock 1 except for the +workqueue. this wq is here just to let the set_chan callback sleep (I thinked it +might be appreciated by USB network card driver developer). In this case the lock 3 +take its turn. +Thus the stop function needs both the locks. +Funny in the syncro scan the lock 2 play its role (as both the syncro_scan +function and the stop scan function are called with this semaphore held). + + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/dot11d.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/dot11d.h @@ -0,0 +1,83 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_DOT11D_H +#define __INC_DOT11D_H + +#ifdef ENABLE_DOT11D +#include "rtllib.h" + + + +typedef struct _CHNL_TXPOWER_TRIPLE { + u8 FirstChnl; + u8 NumChnls; + u8 MaxTxPowerInDbm; +}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; + +typedef enum _DOT11D_STATE { + DOT11D_STATE_NONE = 0, + DOT11D_STATE_LEARNED, + DOT11D_STATE_DONE, +}DOT11D_STATE; + +typedef struct _RT_DOT11D_INFO { + + bool bEnabled; + + u16 CountryIeLen; + u8 CountryIeBuf[MAX_IE_LEN]; + u8 CountryIeSrcAddr[6]; + u8 CountryIeWatchdog; + + u8 channel_map[MAX_CHANNEL_NUMBER+1]; + u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1]; + + DOT11D_STATE State; +}RT_DOT11D_INFO, *PRT_DOT11D_INFO; +#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) +#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5]) +#define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo)) + +#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled +#define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0) + +#define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) +#define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) + +#define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \ + (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \ + false : \ + (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length))) + +#define CIE_WATCHDOG_TH 1 +#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog +#define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0 +#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev) + +#define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE) + +void Dot11d_Init( struct rtllib_device *dev); +void Dot11d_Channelmap(u8 channel_plan, struct rtllib_device* ieee); +void Dot11d_Reset(struct rtllib_device *dev); +void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr, u16 CoutryIeLen, u8 *pCoutryIe); +u8 DOT11D_GetMaxTxPwrInDbm(struct rtllib_device *dev, u8 Channel); +void DOT11D_ScanComplete(struct rtllib_device *dev); +int ToLegalChannel(struct rtllib_device *dev, u8 channel); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/internal.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/internal.h @@ -0,0 +1,130 @@ +/* + * Cryptographic API. + * + * Copyright (c) 2002 James Morris + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#ifndef _CRYPTO_INTERNAL_H +#define _CRYPTO_INTERNAL_H + + +#include +#include "rtl_crypto.h" +#include +#include +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)) +#include +#else +#include +#include +#endif +#include + +#ifdef BUILT_IN_CRYPTO +#ifdef CONFIG_CRYPTO_HMAC +#undef CONFIG_CRYPTO_HMAC +#endif + +#ifdef CONFIG_KMOD +#undef CONFIG_KMOD +#endif +#endif /* BUILT_IN_CRYPTO */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,20)) +#define list_for_each_entry(pos, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member), \ + prefetch(pos->member.next); \ + &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member), \ + prefetch(pos->member.next)) + +static inline void cond_resched(void) +{ + if (need_resched()) { + set_current_state(TASK_RUNNING); + schedule(); + } +} +#endif + +extern enum km_type crypto_km_types[]; + +static inline enum km_type crypto_kmap_type(int out) +{ + return crypto_km_types[(in_softirq() ? 2 : 0) + out]; +} + +static inline void *crypto_kmap(struct page *page, int out) +{ + return kmap_atomic(page, crypto_kmap_type(out)); +} + +static inline void crypto_kunmap(void *vaddr, int out) +{ + kunmap_atomic(vaddr, crypto_kmap_type(out)); +} + +static inline void crypto_yield(struct crypto_tfm *tfm) +{ + if (!in_softirq()) + cond_resched(); +} + +static inline void *crypto_tfm_ctx(struct crypto_tfm *tfm) +{ + return (void *)&tfm[1]; +} + +struct crypto_alg *crypto_alg_lookup(const char *name); + +#ifdef CONFIG_KMOD +void crypto_alg_autoload(const char *name); +struct crypto_alg *crypto_alg_mod_lookup(const char *name); +#else +static inline struct crypto_alg *crypto_alg_mod_lookup(const char *name) +{ + return crypto_alg_lookup(name); +} +#endif + +#ifdef CONFIG_CRYPTO_HMAC +int crypto_alloc_hmac_block(struct crypto_tfm *tfm); +void crypto_free_hmac_block(struct crypto_tfm *tfm); +#else +static inline int crypto_alloc_hmac_block(struct crypto_tfm *tfm) +{ + return 0; +} + +static inline void crypto_free_hmac_block(struct crypto_tfm *tfm) +{ } +#endif + +#ifdef CONFIG_PROC_FS +void __init crypto_init_proc(void); +#else +static inline void crypto_init_proc(void) +{ } +#endif + +int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags); +int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags); +int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags); + +int crypto_init_digest_ops(struct crypto_tfm *tfm); +int crypto_init_cipher_ops(struct crypto_tfm *tfm); +int crypto_init_compress_ops(struct crypto_tfm *tfm); + +void crypto_exit_digest_ops(struct crypto_tfm *tfm); +void crypto_exit_cipher_ops(struct crypto_tfm *tfm); +void crypto_exit_compress_ops(struct crypto_tfm *tfm); + +#endif /* _CRYPTO_INTERNAL_H */ + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib.h @@ -0,0 +1,4134 @@ +/* + * Merged with mainline rtllib.h in Aug 2004. Original ieee802_11 + * remains copyright by the original authors + * + * Portions of the merged code are based on Host AP (software wireless + * LAN access point) driver for Intersil Prism2/2.5/3. + * + * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen + * + * Copyright (c) 2002-2003, Jouni Malinen + * + * Adaption to a generic IEEE 802.11 stack by James Ketrenos + * + * Copyright (c) 2004, Intel Corporation + * + * Modified for Realtek's wi-fi cards by Andrea Merello + * + * + * 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. See README and COPYING for + * more details. + */ +#ifndef RTLLIB_H +#define RTLLIB_H +#include /* ETH_ALEN */ +#include /* ARRAY_SIZE */ +#include +#include +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) +#include +#else +#include +#include +#endif +#include +#include + +#include +#include + +#ifdef CONFIG_CFG_80211 +#include +#endif + +#include "rtl819x_HT.h" +#include "rtl819x_BA.h" +#include "rtl819x_TS.h" + +#include +#include /* ARPHRD_ETHER */ + +#ifndef WIRELESS_SPY +#define WIRELESS_SPY +#endif +#include + +#if defined (RTL8192S_WAPI_SUPPORT) +#include "wapi.h" +#include "wapi_interface.h" +#endif + +#ifndef RTK_DMP_PLATFORM +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +#ifndef bool +typedef enum{false = 0, true} bool; +#endif +#endif +#endif + +#ifndef IW_MODE_MONITOR +#define IW_MODE_MONITOR 6 +#endif + +#ifndef IWEVCUSTOM +#define IWEVCUSTOM 0x8c02 +#endif + +#ifndef IW_CUSTOM_MAX +/* Max number of char in custom event - use multiple of them if needed */ +#define IW_CUSTOM_MAX 256 /* In bytes */ +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#define jiffies_to_msecs(t) ((t) * 1000 / HZ) +#ifndef __bitwise +#define __bitwise __attribute__((bitwise)) +#endif +typedef __u16 __le16; + +#if (WIRELESS_EXT < 16) +struct iw_spy_data{ + /* --- Standard spy support --- */ + int spy_number; + u_char spy_address[IW_MAX_SPY][ETH_ALEN]; + struct iw_quality spy_stat[IW_MAX_SPY]; + /* --- Enhanced spy support (event) */ + struct iw_quality spy_thr_low; /* Low threshold */ + struct iw_quality spy_thr_high; /* High threshold */ + u_char spy_thr_under[IW_MAX_SPY]; +}; +#endif +#endif + +#ifndef container_of +/** + * container_of - cast a member of a structure out to the containing structure + * + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) +#endif + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) +#define skb_tail_pointer_rsl(skb) skb_tail_pointer(skb) +#else +#define skb_tail_pointer_rsl(skb) skb->tail +#endif + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + #define EXPORT_SYMBOL_RSL(x) EXPORT_SYMBOL(x) +#else + #define EXPORT_SYMBOL_RSL(x) EXPORT_SYMBOL_NOVERS(x) +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +static inline void tq_init(struct tq_struct * task, void(*func)(void *), void *data) +{ + task->routine = func; + task->data = data; + INIT_LIST_HEAD(&task->list); + task->sync = 0; +} +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) +static inline void setup_timer(struct timer_list * timer, void(*function)(unsigned long), unsigned long data) +{ + timer->function = function; + timer->data = data; +} +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) + typedef struct delayed_work delayed_work_struct_rsl; + #define queue_delayed_work_rsl(x,y,z) queue_delayed_work(x,y,z) + #define INIT_DELAYED_WORK_RSL(x,y,z) INIT_DELAYED_WORK(x,y) +#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40) + typedef struct tq_struct delayed_work_struct_rsl; + #define queue_delayed_work_rsl(x,y,z) schedule_task(y) + #define INIT_DELAYED_WORK_RSL(x,y,z) tq_init(x,y,z) +#else + typedef struct work_struct delayed_work_struct_rsl; + #define queue_delayed_work_rsl(x,y,z) queue_delayed_work(x,y,z) + #define INIT_DELAYED_WORK_RSL(x,y,z) INIT_WORK(x,y,z) +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) + typedef struct work_struct work_struct_rsl; + #define queue_work_rsl(x,y) queue_work(x,y) + #define INIT_WORK_RSL(x,y,z) INIT_WORK(x,y) +#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40) + typedef struct tq_struct work_struct_rsl; + #define queue_work_rsl(x,y) schedule_task(y) + #define INIT_WORK_RSL(x,y,z) tq_init(x,y,z) +#else + typedef struct work_struct work_struct_rsl; + #define queue_work_rsl(x,y) queue_work(x,y) + #define INIT_WORK_RSL(x,y,z) INIT_WORK(x,y,z) +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) + #define container_of_work_rsl(x,y,z) container_of(x,y,z) + #define container_of_dwork_rsl(x,y,z) container_of(container_of(x, struct delayed_work, work), y, z) +#else + #define container_of_work_rsl(x,y,z) (x) + #define container_of_dwork_rsl(x,y,z) (x) +#endif + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +static inline char * +iwe_stream_add_event_rsl(struct iw_request_info *info, + char * stream, /* Stream of events */ + char * ends, /* End of stream */ + struct iw_event *iwe, /* Payload */ + int event_len) /* Real size of payload */ +{ + /* Check if it's possible */ + if((stream + event_len) < ends) { + iwe->len = event_len; + ndelay(1); + memcpy(stream, (char *) iwe, event_len); + stream += event_len; + } + return stream; +} +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) + #define iwe_stream_add_event_rsl(info,start,stop,iwe,len) iwe_stream_add_event(info,start,stop,iwe,len) +#else + #define iwe_stream_add_event_rsl(info,start,stop,iwe,len) iwe_stream_add_event(start,stop,iwe,len) +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) + #define iwe_stream_add_point_rsl(info,start,stop,iwe,p) iwe_stream_add_point(info,start,stop,iwe,p) +#else + #define iwe_stream_add_point_rsl(info,start,stop,iwe,p) iwe_stream_add_point(start,stop,iwe,p) +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + #define usb_alloc_urb_rsl(x,y) usb_alloc_urb(x,y) + #define usb_submit_urb_rsl(x,y) usb_submit_urb(x,y) +#else + #define usb_alloc_urb_rsl(x,y) usb_alloc_urb(x) + #define usb_submit_urb_rsl(x,y) usb_submit_urb(x) +#endif + +static inline void *netdev_priv_rsl(struct net_device *dev) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + return netdev_priv(dev); +#else + return dev->priv; +#endif +} + +#define KEY_TYPE_NA 0x0 +#define KEY_TYPE_WEP40 0x1 +#define KEY_TYPE_TKIP 0x2 +#define KEY_TYPE_CCMP 0x4 +#define KEY_TYPE_WEP104 0x5 +#if defined (RTL8192S_WAPI_SUPPORT) +#define KEY_TYPE_SMS4 0x8 +#endif +/* added for rtl819x tx procedure */ +#define MAX_QUEUE_SIZE 0x10 + +#if defined(RTL8192SU) || defined(RTL8190P) ||defined(RTL8192U) ||defined(RTL8192E) +#define BK_QUEUE 0 +#define BE_QUEUE 1 +#define VI_QUEUE 2 +#define VO_QUEUE 3 +#define HCCA_QUEUE 4 +#define TXCMD_QUEUE 5 +#define MGNT_QUEUE 6 +#define HIGH_QUEUE 7 +#define BEACON_QUEUE 8 +#elif defined(RTL8192SE) +#define BK_QUEUE 0 +#define BE_QUEUE 1 +#define VI_QUEUE 2 +#define VO_QUEUE 3 +#define BEACON_QUEUE 4 +#define TXCMD_QUEUE 5 +#define MGNT_QUEUE 6 +#define HIGH_QUEUE 7 +#define HCCA_QUEUE 8 + +#elif defined(RTL8192CE) + +#define BK_QUEUE 0 +#define BE_QUEUE 1 +#define VI_QUEUE 2 +#define VO_QUEUE 3 +#define BEACON_QUEUE 4 +#define TXCMD_QUEUE 5 +#define MGNT_QUEUE 6 +#define HIGH_QUEUE 7 +#define HCCA_QUEUE 8 +#endif + +#ifdef RTL8192CE +#define LOW_QUEUE BE_QUEUE +#define NORMAL_QUEUE MGNT_QUEUE +#else +#define LOW_QUEUE BE_QUEUE +#define NORMAL_QUEUE MGNT_QUEUE +#endif + +#ifndef IW_MODE_MESH +#define IW_MODE_MESH 7 +#endif +#ifdef _RTL8192_EXT_PATCH_ +#define WIFI_MESH_TYPE RTLLIB_FTYPE_DATA + +#define WLAN_MESH_HDR_LEN 6 +#define WLAN_MESH_HDR_6ADDR_LEN 18 +#define WLAN_MESH_HDR_4ADDR_LEN 6 +#define MAX_MP 65 +#define IEEE_MESH_MAC_HASH_SIZE 31 +#define MAX_MESH_ID_LEN 33 +#define MAX_HOST_NAME_LENGTH 33 +#endif +#define AMSDU_SUBHEADER_LEN 14 +#define SWRF_TIMEOUT 50 + +#define IE_CISCO_FLAG_POSITION 0x08 +#define SUPPORT_CKIP_MIC 0x08 +#define SUPPORT_CKIP_PK 0x10 +#define RT_RF_OFF_LEVL_ASPM BIT0 +#define RT_RF_OFF_LEVL_CLK_REQ BIT1 +#define RT_RF_OFF_LEVL_PCI_D3 BIT2 +#define RT_RF_OFF_LEVL_HALT_NIC BIT3 +#define RT_RF_OFF_LEVL_FREE_FW BIT4 +#define RT_RF_OFF_LEVL_FW_32K BIT5 +#define RT_RF_PS_LEVEL_ALWAYS_ASPM BIT6 +#define RT_RF_LPS_DISALBE_2R BIT30 +#define RT_RF_LPS_LEVEL_ASPM BIT31 +#define RT_IN_PS_LEVEL(pPSC, _PS_FLAG) ((pPSC->CurPsLevel & _PS_FLAG) ? true : false) +#define RT_CLEAR_PS_LEVEL(pPSC, _PS_FLAG) (pPSC->CurPsLevel &= (~(_PS_FLAG))) +#define RT_SET_PS_LEVEL(pPSC, _PS_FLAG) (pPSC->CurPsLevel |= _PS_FLAG) + +#if defined (RTL8192S_WAPI_SUPPORT) +#define SMS4_MIC_LEN 16 +#define WAPI_EXT_LEN 18 +#define MAX_WAPI_IE_LEN 255 +#define sMacHdrLng 24 +#endif + +/* defined for skb cb field */ +/* At most 28 byte */ +typedef struct cb_desc { + /* Tx Desc Related flags (8-9) */ + u8 bLastIniPkt:1; + u8 bCmdOrInit:1; + u8 bFirstSeg:1; + u8 bLastSeg:1; + u8 bEncrypt:1; + u8 bTxDisableRateFallBack:1; + u8 bTxUseDriverAssingedRate:1; + u8 bHwSec:1; + + u8 nStuckCount; + + /* Tx Firmware Relaged flags (10-11)*/ + u8 bCTSEnable:1; + u8 bRTSEnable:1; + u8 bUseShortGI:1; + u8 bUseShortPreamble:1; + u8 bTxEnableFwCalcDur:1; + u8 bAMPDUEnable:1; + u8 bRTSSTBC:1; + u8 RTSSC:1; + + u8 bRTSBW:1; + u8 bPacketBW:1; + u8 bRTSUseShortPreamble:1; + u8 bRTSUseShortGI:1; + u8 bMulticast:1; + u8 bBroadcast:1; + u8 drv_agg_enable:1; +#ifdef _RTL8192_EXT_PATCH_ + u8 mesh_pkt:1; +#else + u8 reserved2:1; +#endif + + /* Tx Desc related element(12-19) */ + u8 rata_index; + u8 queue_index; + u16 txbuf_size; + u8 RATRIndex; +#ifdef _RTL8192_EXT_PATCH_ + u8 mesh_type:2; + u8 bFromAggrQ:1; + u8 bAMSDU:1; + u8 brelay_pkt:1; + u8 badhoc:1; + u8 bretry_pkt:1; + u8 bFromRx:1; +#else + u8 bAMSDU:1; + u8 bFromAggrQ:1; + u8 reserved6:6; +#endif + u8 macId; + u8 priority; + + /* Tx firmware related element(20-27) */ + u8 data_rate; + u8 rts_rate; + u8 ampdu_factor; + u8 ampdu_density; + u8 DrvAggrNum; + u8 bdhcp; + u16 pkt_size; + u8 bIsSpecialDataFrame; +}cb_desc, *pcb_desc; + +/*--------------------------Define -------------------------------------------*/ +#define MGN_1M 0x02 +#define MGN_2M 0x04 +#define MGN_5_5M 0x0b +#define MGN_11M 0x16 + +#define MGN_6M 0x0c +#define MGN_9M 0x12 +#define MGN_12M 0x18 +#define MGN_18M 0x24 +#define MGN_24M 0x30 +#define MGN_36M 0x48 +#define MGN_48M 0x60 +#define MGN_54M 0x6c + +#define MGN_MCS0 0x80 +#define MGN_MCS1 0x81 +#define MGN_MCS2 0x82 +#define MGN_MCS3 0x83 +#define MGN_MCS4 0x84 +#define MGN_MCS5 0x85 +#define MGN_MCS6 0x86 +#define MGN_MCS7 0x87 +#define MGN_MCS8 0x88 +#define MGN_MCS9 0x89 +#define MGN_MCS10 0x8a +#define MGN_MCS11 0x8b +#define MGN_MCS12 0x8c +#define MGN_MCS13 0x8d +#define MGN_MCS14 0x8e +#define MGN_MCS15 0x8f +#define MGN_MCS0_SG 0x90 +#define MGN_MCS1_SG 0x91 +#define MGN_MCS2_SG 0x92 +#define MGN_MCS3_SG 0x93 +#define MGN_MCS4_SG 0x94 +#define MGN_MCS5_SG 0x95 +#define MGN_MCS6_SG 0x96 +#define MGN_MCS7_SG 0x97 +#define MGN_MCS8_SG 0x98 +#define MGN_MCS9_SG 0x99 +#define MGN_MCS10_SG 0x9a +#define MGN_MCS11_SG 0x9b +#define MGN_MCS12_SG 0x9c +#define MGN_MCS13_SG 0x9d +#define MGN_MCS14_SG 0x9e +#define MGN_MCS15_SG 0x9f + + +enum _ReasonCode{ + unspec_reason = 0x1, + auth_not_valid = 0x2, + deauth_lv_ss = 0x3, + inactivity = 0x4, + ap_overload = 0x5, + class2_err = 0x6, + class3_err = 0x7, + disas_lv_ss = 0x8, + asoc_not_auth = 0x9, + + mic_failure = 0xe, + + invalid_IE = 0x0d, + four_way_tmout = 0x0f, + two_way_tmout = 0x10, + IE_dismatch = 0x11, + invalid_Gcipher = 0x12, + invalid_Pcipher = 0x13, + invalid_AKMP = 0x14, + unsup_RSNIEver = 0x15, + invalid_RSNIE = 0x16, + auth_802_1x_fail= 0x17, + ciper_reject = 0x18, + + QoS_unspec = 0x20, + QAP_bandwidth = 0x21, + poor_condition = 0x22, + no_facility = 0x23, + req_declined = 0x25, + invalid_param = 0x26, + req_not_honored= 0x27, + TS_not_created = 0x2F, + DL_not_allowed = 0x30, + dest_not_exist = 0x31, + dest_not_QSTA = 0x32, +}; + +typedef enum _HAL_DEF_VARIABLE{ + HAL_DEF_TPC_ENABLE, + HAL_DEF_INIT_GAIN, + HAL_DEF_PROT_IMP_MODE, + HAL_DEF_HIGH_POWER_MECHANISM, + HAL_DEF_RATE_ADAPTIVE_MECHANISM, + HAL_DEF_ANTENNA_DIVERSITY_MECHANISM, + HAL_DEF_LED, + HAL_DEF_CW_MAX_MIN, + + HAL_DEF_WOWLAN, + HAL_DEF_ENDPOINTS, + HAL_DEF_MIN_TX_POWER_DBM, + HAL_DEF_MAX_TX_POWER_DBM, + HW_DEF_EFUSE_REPG_SECTION1_FLAG, + HW_DEF_EFUSE_REPG_DATA, + HW_DEF_GPIO, + HAL_DEF_PCI_SUPPORT_ASPM, + HAL_DEF_THERMAL_VALUE, + HAL_DEF_USB_IN_TOKEN_REV, +}HAL_DEF_VARIABLE; + + +typedef enum _HW_VARIABLES{ + HW_VAR_ETHER_ADDR, + HW_VAR_MULTICAST_REG, + HW_VAR_BASIC_RATE, + HW_VAR_BSSID, + HW_VAR_MEDIA_STATUS, + HW_VAR_SECURITY_CONF, + HW_VAR_BEACON_INTERVAL, + HW_VAR_ATIM_WINDOW, + HW_VAR_LISTEN_INTERVAL, + HW_VAR_CS_COUNTER, + HW_VAR_DEFAULTKEY0, + HW_VAR_DEFAULTKEY1, + HW_VAR_DEFAULTKEY2, + HW_VAR_DEFAULTKEY3, + HW_VAR_SIFS, + HW_VAR_DIFS, + HW_VAR_EIFS, + HW_VAR_SLOT_TIME, + HW_VAR_ACK_PREAMBLE, + HW_VAR_CW_CONFIG, + HW_VAR_CW_VALUES, + HW_VAR_RATE_FALLBACK_CONTROL, + HW_VAR_CONTENTION_WINDOW, + HW_VAR_RETRY_COUNT, + HW_VAR_TR_SWITCH, + HW_VAR_COMMAND, + HW_VAR_WPA_CONFIG, + HW_VAR_AMPDU_MIN_SPACE, + HW_VAR_SHORTGI_DENSITY, + HW_VAR_AMPDU_FACTOR, + HW_VAR_MCS_RATE_AVAILABLE, + HW_VAR_AC_PARAM, + HW_VAR_ACM_CTRL, + HW_VAR_DIS_Req_Qsize, + HW_VAR_CCX_CHNL_LOAD, + HW_VAR_CCX_NOISE_HISTOGRAM, + HW_VAR_CCX_CLM_NHM, + HW_VAR_TxOPLimit, + HW_VAR_TURBO_MODE, + HW_VAR_RF_STATE, + HW_VAR_RF_OFF_BY_HW, + HW_VAR_BUS_SPEED, + HW_VAR_SET_DEV_POWER, + + HW_VAR_RCR, + HW_VAR_RATR_0, + HW_VAR_RRSR, + HW_VAR_CPU_RST, + HW_VAR_CECHK_BSSID, + HW_VAR_LBK_MODE, + HW_VAR_AES_11N_FIX, + HW_VAR_USB_RX_AGGR, + HW_VAR_USER_CONTROL_TURBO_MODE, + HW_VAR_RETRY_LIMIT, + HW_VAR_INIT_TX_RATE, + HW_VAR_TX_RATE_REG, + HW_VAR_EFUSE_USAGE, + HW_VAR_EFUSE_BYTES, + HW_VAR_AUTOLOAD_STATUS, + HW_VAR_RF_2R_DISABLE, + HW_VAR_SET_RPWM, + HW_VAR_H2C_FW_PWRMODE, + HW_VAR_H2C_FW_JOINBSSRPT, + HW_VAR_1X1_RECV_COMBINE, + HW_VAR_STOP_SEND_BEACON, + HW_VAR_TSF_TIMER, + HW_VAR_IO_CMD, + HW_VAR_HANDLE_FW_C2H, + HW_VAR_DL_FW_RSVD_PAGE, + HW_VAR_AID, + HW_VAR_HW_SEQ_ENABLE, + HW_VAR_CORRECT_TSF, + HW_VAR_BCN_VALID, + HW_VAR_FWLPS_RF_ON, + HW_VAR_DUAL_TSF_RST, + HW_VAR_H2C_FW_UPDATE_GTK, + HW_VAR_WF_MASK, + HW_VAR_WF_CRC, + HW_VAR_WF_IS_MAC_ADDR, + HW_VAR_H2C_FW_OFFLOAD, + HW_VAR_RESET_WFCRC, + HW_VAR_SWITCH_EPHY_WoWLAN, +}HW_VARIABLES; + + +#define aSifsTime (((priv->rtllib->current_network.mode == IEEE_A)||(priv->rtllib->current_network.mode == IEEE_N_24G)||(priv->rtllib->current_network.mode == IEEE_N_5G))? 16 : 10) + +#define MGMT_QUEUE_NUM 5 + +#define IEEE_CMD_SET_WPA_PARAM 1 +#define IEEE_CMD_SET_WPA_IE 2 +#define IEEE_CMD_SET_ENCRYPTION 3 +#define IEEE_CMD_MLME 4 + +#define IEEE_PARAM_WPA_ENABLED 1 +#define IEEE_PARAM_TKIP_COUNTERMEASURES 2 +#define IEEE_PARAM_DROP_UNENCRYPTED 3 +#define IEEE_PARAM_PRIVACY_INVOKED 4 +#define IEEE_PARAM_AUTH_ALGS 5 +#define IEEE_PARAM_IEEE_802_1X 6 +#define IEEE_PARAM_WPAX_SELECT 7 +#define IEEE_PROTO_WPA 1 +#define IEEE_PROTO_RSN 2 +#define IEEE_WPAX_USEGROUP 0 +#define IEEE_WPAX_WEP40 1 +#define IEEE_WPAX_TKIP 2 +#define IEEE_WPAX_WRAP 3 +#define IEEE_WPAX_CCMP 4 +#define IEEE_WPAX_WEP104 5 + +#define IEEE_KEY_MGMT_IEEE8021X 1 +#define IEEE_KEY_MGMT_PSK 2 + +#define IEEE_MLME_STA_DEAUTH 1 +#define IEEE_MLME_STA_DISASSOC 2 + + +#define IEEE_CRYPT_ERR_UNKNOWN_ALG 2 +#define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3 +#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4 +#define IEEE_CRYPT_ERR_KEY_SET_FAILED 5 +#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6 +#define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7 +#define IEEE_CRYPT_ALG_NAME_LEN 16 + +#define MAX_IE_LEN 0xff +#ifdef _RTL8192_EXT_PATCH_ +#define ENABLE_NULL_PT_DEBUG +#endif +#ifdef ENABLE_NULL_PT_DEBUG +#define RT_ASSERT_RET(_Exp) \ + if(!(_Exp)) \ + { \ + printk("Rtl819x: "); \ + printk( "Assertion failed! %s,%s,line=%d\n", \ + #_Exp,__FUNCTION__,__LINE__); \ + return; \ + } +#define RT_ASSERT_RET_VALUE(_Exp,Ret) \ + if(!(_Exp)) \ + { \ + printk("Rtl819x: "); \ + printk( "Assertion failed! %s,%s,line=%d\n", \ + #_Exp,__FUNCTION__,__LINE__); \ + return (Ret); \ + } +#else +#define RT_ASSERT_RET(_Exp) do {} while(0) +#define RT_ASSERT_RET_VALUE(_Exp,Ret) do {} while(0) +#endif + +typedef struct ieee_param { + u32 cmd; + u8 sta_addr[ETH_ALEN]; + union { + struct { + u8 name; + u32 value; + } wpa_param; + struct { + u32 len; + u8 reserved[32]; + u8 data[0]; + } wpa_ie; + struct{ + int command; + int reason_code; + } mlme; + struct { + u8 alg[IEEE_CRYPT_ALG_NAME_LEN]; + u8 set_tx; + u32 err; + u8 idx; + u8 seq[8]; /* sequence counter (set: RX, get: TX) */ + u16 key_len; + u8 key[0]; + } crypt; + } u; +}ieee_param; + + +#if WIRELESS_EXT < 17 +#define IW_QUAL_QUAL_INVALID 0x10 +#define IW_QUAL_LEVEL_INVALID 0x20 +#define IW_QUAL_NOISE_INVALID 0x40 +#define IW_QUAL_QUAL_UPDATED 0x1 +#define IW_QUAL_LEVEL_UPDATED 0x2 +#define IW_QUAL_NOISE_UPDATED 0x4 +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)) +#define MSECS(t) (HZ * ((t) / 1000) + (HZ * ((t) % 1000)) / 1000) +static inline unsigned long msleep_interruptible_rsl(unsigned int msecs) +{ + unsigned long timeout = MSECS(msecs) + 1; + + while (timeout) { + set_current_state(TASK_INTERRUPTIBLE); + timeout = schedule_timeout(timeout); + } + return timeout; +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,31)) +static inline void msleep(unsigned int msecs) +{ + unsigned long timeout = MSECS(msecs) + 1; + + while (timeout) { + set_current_state(TASK_UNINTERRUPTIBLE); + timeout = schedule_timeout(timeout); + } +} +#endif +#else +#define MSECS(t) msecs_to_jiffies(t) +#define msleep_interruptible_rsl msleep_interruptible +#endif + +#define RTLLIB_DATA_LEN 2304 +/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section + 6.2.1.1.2. + + The figure in section 7.1.2 suggests a body size of up to 2312 + bytes is allowed, which is a bit confusing, I suspect this + represents the 2304 bytes of real data, plus a possible 8 bytes of + WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ +#define RTLLIB_1ADDR_LEN 10 +#define RTLLIB_2ADDR_LEN 16 +#define RTLLIB_3ADDR_LEN 24 +#define RTLLIB_4ADDR_LEN 30 +#define RTLLIB_FCS_LEN 4 +#define RTLLIB_HLEN (RTLLIB_4ADDR_LEN) +#define RTLLIB_FRAME_LEN (RTLLIB_DATA_LEN + RTLLIB_HLEN) +#define RTLLIB_MGMT_HDR_LEN 24 +#define RTLLIB_DATA_HDR3_LEN 24 +#define RTLLIB_DATA_HDR4_LEN 30 + +#define MIN_FRAG_THRESHOLD 256U +#define MAX_FRAG_THRESHOLD 2346U +#define MAX_HT_DATA_FRAG_THRESHOLD 0x2000 + +#define HT_AMSDU_SIZE_4K 3839 +#define HT_AMSDU_SIZE_8K 7935 + +/* Frame control field constants */ +#define RTLLIB_FCTL_VERS 0x0003 +#define RTLLIB_FCTL_FTYPE 0x000c +#define RTLLIB_FCTL_STYPE 0x00f0 +#define RTLLIB_FCTL_FRAMETYPE 0x00fc +#define RTLLIB_FCTL_TODS 0x0100 +#define RTLLIB_FCTL_FROMDS 0x0200 +#define RTLLIB_FCTL_DSTODS 0x0300 +#define RTLLIB_FCTL_MOREFRAGS 0x0400 +#define RTLLIB_FCTL_RETRY 0x0800 +#define RTLLIB_FCTL_PM 0x1000 +#define RTLLIB_FCTL_MOREDATA 0x2000 +#define RTLLIB_FCTL_WEP 0x4000 +#define RTLLIB_FCTL_ORDER 0x8000 + +#define RTLLIB_FTYPE_MGMT 0x0000 +#define RTLLIB_FTYPE_CTL 0x0004 +#define RTLLIB_FTYPE_DATA 0x0008 + +/* management */ +#define RTLLIB_STYPE_ASSOC_REQ 0x0000 +#define RTLLIB_STYPE_ASSOC_RESP 0x0010 +#define RTLLIB_STYPE_REASSOC_REQ 0x0020 +#define RTLLIB_STYPE_REASSOC_RESP 0x0030 +#define RTLLIB_STYPE_PROBE_REQ 0x0040 +#define RTLLIB_STYPE_PROBE_RESP 0x0050 +#define RTLLIB_STYPE_BEACON 0x0080 +#define RTLLIB_STYPE_ATIM 0x0090 +#define RTLLIB_STYPE_DISASSOC 0x00A0 +#define RTLLIB_STYPE_AUTH 0x00B0 +#define RTLLIB_STYPE_DEAUTH 0x00C0 +#define RTLLIB_STYPE_MANAGE_ACT 0x00D0 +#ifdef _RTL8192_EXT_PATCH_ +/* added for mesh action frame type */ +#ifdef COMPATIBLE_WITH_RALINK_MESH +#define RTLLIB_STYPE_MESH_ACT 0x00F0 +#else +#define RTLLIB_STYPE_MESH_ACT RTLLIB_STYPE_MANAGE_ACT +#endif +#endif + +/* control */ +#define RTLLIB_STYPE_PSPOLL 0x00A0 +#define RTLLIB_STYPE_RTS 0x00B0 +#define RTLLIB_STYPE_CTS 0x00C0 +#define RTLLIB_STYPE_ACK 0x00D0 +#define RTLLIB_STYPE_CFEND 0x00E0 +#define RTLLIB_STYPE_CFENDACK 0x00F0 +#define RTLLIB_STYPE_BLOCKACK 0x0094 + +/* data */ +#define RTLLIB_STYPE_DATA 0x0000 +#define RTLLIB_STYPE_DATA_CFACK 0x0010 +#define RTLLIB_STYPE_DATA_CFPOLL 0x0020 +#define RTLLIB_STYPE_DATA_CFACKPOLL 0x0030 +#define RTLLIB_STYPE_NULLFUNC 0x0040 +#define RTLLIB_STYPE_CFACK 0x0050 +#define RTLLIB_STYPE_CFPOLL 0x0060 +#define RTLLIB_STYPE_CFACKPOLL 0x0070 +#define RTLLIB_STYPE_QOS_DATA 0x0080 +#define RTLLIB_STYPE_QOS_NULL 0x00C0 + +#define RTLLIB_SCTL_FRAG 0x000F +#define RTLLIB_SCTL_SEQ 0xFFF0 + +/* QOS control */ +#define RTLLIB_QCTL_TID 0x000F + +#define FC_QOS_BIT BIT7 +#define IsDataFrame(pdu) ( ((pdu[0] & 0x0C)==0x08) ? true : false ) +#define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT)) ) +#define IsQoSDataFrame(pframe) ((*(u16*)pframe&(RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) == (RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) +#define Frame_Order(pframe) (*(u16*)pframe&RTLLIB_FCTL_ORDER) +#define SN_LESS(a, b) (((a-b)&0x800)!=0) +#define SN_EQUAL(a, b) (a == b) +#define MAX_DEV_ADDR_SIZE 8 + +typedef enum _ACT_CATEGORY{ + ACT_CAT_QOS = 1, + ACT_CAT_DLS = 2, + ACT_CAT_BA = 3, + ACT_CAT_HT = 7, + ACT_CAT_WMM = 17, +#ifdef _RTL8192_EXT_PATCH_ + ACT_CAT_MESH_PEERLINK_MGNT = 0x0f, + ACT_CAT_MESH_LINK_METRIC = 0x10, + ACT_CAT_MESH_PATH_SELECT = 0x11, + ACT_CAT_MESH_INTERWORKING = 0x12, + ACT_CAT_MESH_SECURITY_INFO = 35, +#endif +} ACT_CATEGORY, *PACT_CATEGORY; + +typedef enum _TS_ACTION{ + ACT_ADDTSREQ = 0, + ACT_ADDTSRSP = 1, + ACT_DELTS = 2, + ACT_SCHEDULE = 3, +} TS_ACTION, *PTS_ACTION; + +typedef enum _BA_ACTION{ + ACT_ADDBAREQ = 0, + ACT_ADDBARSP = 1, + ACT_DELBA = 2, +} BA_ACTION, *PBA_ACTION; +#ifdef _RTL8192_EXT_PATCH_ +typedef enum _PEERLINK_ACTION{ + ACT_PEERLINK_OPEN = 0, + ACT_PEERLINK_CONFIRM = 1, + ACT_PEERLINK_CLOSE =2, +} PEERLINK_ACTION, *PPEERLINK_ACTION; + +typedef enum _LINK_METRIC_ACTION{ + ACT_LINKMETRIC_REQ = 0, + ACT_LINKMETRIC_RSP = 1, +} LINK_METRIC_ACTION, *PLINK_METRIC_ACTION; + +typedef enum _PATH_SELECT_ACTION{ + ACT_PATH_REQ = 0, + ACT_PATH_REPLY = 1, + ACT_PATH_ERR =2, + ACT_RANN =3, +} PATH_SELECT_ACTION, *PPATH_SELECT_ACTION; + +typedef enum _MESH_PEERING_PROTOCOL_VERSION_VALUE{ + Mesh_Peering_Management_Protocol_V =42, + Abbreviated_Handshake_Protocol_V = 43, +}MESH_PEERING_PROTOCOL_VERSION_VALUE; +#endif + +typedef enum _InitialGainOpType{ + IG_Backup=0, + IG_Restore, + IG_Max +}InitialGainOpType; +typedef enum _LED_CTL_MODE{ + LED_CTL_POWER_ON = 1, + LED_CTL_LINK = 2, + LED_CTL_NO_LINK = 3, + LED_CTL_TX = 4, + LED_CTL_RX = 5, + LED_CTL_SITE_SURVEY = 6, + LED_CTL_POWER_OFF = 7, + LED_CTL_START_TO_LINK = 8, + LED_CTL_START_WPS = 9, + LED_CTL_STOP_WPS = 10, + LED_CTL_START_WPS_BOTTON = 11, + LED_CTL_STOP_WPS_FAIL = 12, + LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, +}LED_CTL_MODE; + +typedef enum _RT_RF_TYPE_DEF +{ + RF_1T2R = 0, + RF_2T4R, + RF_2T2R, + RF_1T1R, + RF_2T2R_GREEN, + RF_819X_MAX_TYPE +}RT_RF_TYPE_DEF; + +typedef enum _WIRELESS_MODE { + WIRELESS_MODE_UNKNOWN = 0x00, + WIRELESS_MODE_A = 0x01, + WIRELESS_MODE_B = 0x02, + WIRELESS_MODE_G = 0x04, + WIRELESS_MODE_AUTO = 0x08, + WIRELESS_MODE_N_24G = 0x10, + WIRELESS_MODE_N_5G = 0x20 +} WIRELESS_MODE; + +typedef enum _NETWORK_TYPE{ + WIRELESS_11B = 1, + WIRELESS_11G = 2, + WIRELESS_11A = 4, + WIRELESS_11N = 8 +} WIRELESS_NETWORK_TYPE; + +#define OUI_SUBTYPE_WMM_INFO 0 +#define OUI_SUBTYPE_WMM_PARAM 1 +#define OUI_SUBTYPE_QOS_CAPABI 5 + +/* debug macros */ +#define CONFIG_RTLLIB_DEBUG +#ifdef CONFIG_RTLLIB_DEBUG +extern u32 rtllib_debug_level; +#define RTLLIB_DEBUG(level, fmt, args...) \ +do { if (rtllib_debug_level & (level)) \ + printk(KERN_DEBUG "rtllib: " fmt, ## args); } while (0) +#define RTLLIB_DEBUG_DATA(level, data, datalen) \ + do{ if ((rtllib_debug_level & (level)) == (level)) \ + { \ + int i; \ + u8* pdata = (u8*) data; \ + printk(KERN_DEBUG "rtllib: %s()\n", __FUNCTION__); \ + for(i=0; i<(int)(datalen); i++) \ + { \ + printk("%2.2x ", pdata[i]); \ + if ((i+1)%16 == 0) printk("\n"); \ + } \ + printk("\n"); \ + } \ + } while (0) +#else +#define RTLLIB_DEBUG(level, fmt, args...) do {} while (0) +#define RTLLIB_DEBUG_DATA(level, data, datalen) do {} while(0) +#endif /* CONFIG_RTLLIB_DEBUG */ + +/* debug macros not dependent on CONFIG_RTLLIB_DEBUG */ + +#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" +#define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5] + +/* + * To use the debug system; + * + * If you are defining a new debug classification, simply add it to the #define + * list here in the form of: + * + * #define RTLLIB_DL_xxxx VALUE + * + * shifting value to the left one bit from the previous entry. xxxx should be + * the name of the classification (for example, WEP) + * + * You then need to either add a RTLLIB_xxxx_DEBUG() macro definition for your + * classification, or use RTLLIB_DEBUG(RTLLIB_DL_xxxx, ...) whenever you want + * to send output to that classification. + * + * To add your debug level to the list of levels seen when you perform + * + * % cat /proc/net/ipw/debug_level + * + * you simply need to add your entry to the ipw_debug_levels array. + * + * If you do not see debug_level in /proc/net/ipw then you do not have + * CONFIG_RTLLIB_DEBUG defined in your kernel configuration + * + */ + +#define RTLLIB_DL_INFO (1<<0) +#define RTLLIB_DL_WX (1<<1) +#define RTLLIB_DL_SCAN (1<<2) +#define RTLLIB_DL_STATE (1<<3) +#define RTLLIB_DL_MGMT (1<<4) +#define RTLLIB_DL_FRAG (1<<5) +#define RTLLIB_DL_EAP (1<<6) +#define RTLLIB_DL_DROP (1<<7) + +#define RTLLIB_DL_TX (1<<8) +#define RTLLIB_DL_RX (1<<9) + +#define RTLLIB_DL_HT (1<<10) +#define RTLLIB_DL_BA (1<<11) +#define RTLLIB_DL_TS (1<<12) +#define RTLLIB_DL_QOS (1<<13) +#define RTLLIB_DL_REORDER (1<<14) +#define RTLLIB_DL_IOT (1<<15) +#define RTLLIB_DL_IPS (1<<16) +#define RTLLIB_DL_TRACE (1<<29) +#define RTLLIB_DL_DATA (1<<30) +#define RTLLIB_DL_ERR (1<<31) +#define RTLLIB_ERROR(f, a...) printk(KERN_ERR "rtllib: " f, ## a) +#define RTLLIB_WARNING(f, a...) printk(KERN_WARNING "rtllib: " f, ## a) +#define RTLLIB_DEBUG_INFO(f, a...) RTLLIB_DEBUG(RTLLIB_DL_INFO, f, ## a) + +#define RTLLIB_DEBUG_WX(f, a...) RTLLIB_DEBUG(RTLLIB_DL_WX, f, ## a) +#define RTLLIB_DEBUG_SCAN(f, a...) RTLLIB_DEBUG(RTLLIB_DL_SCAN, f, ## a) +#define RTLLIB_DEBUG_STATE(f, a...) RTLLIB_DEBUG(RTLLIB_DL_STATE, f, ## a) +#define RTLLIB_DEBUG_MGMT(f, a...) RTLLIB_DEBUG(RTLLIB_DL_MGMT, f, ## a) +#define RTLLIB_DEBUG_FRAG(f, a...) RTLLIB_DEBUG(RTLLIB_DL_FRAG, f, ## a) +#define RTLLIB_DEBUG_EAP(f, a...) RTLLIB_DEBUG(RTLLIB_DL_EAP, f, ## a) +#define RTLLIB_DEBUG_DROP(f, a...) RTLLIB_DEBUG(RTLLIB_DL_DROP, f, ## a) +#define RTLLIB_DEBUG_TX(f, a...) RTLLIB_DEBUG(RTLLIB_DL_TX, f, ## a) +#define RTLLIB_DEBUG_RX(f, a...) RTLLIB_DEBUG(RTLLIB_DL_RX, f, ## a) +#define RTLLIB_DEBUG_QOS(f, a...) RTLLIB_DEBUG(RTLLIB_DL_QOS, f, ## a) + +#ifdef CONFIG_RTLLIB_DEBUG +/* Added by Annie, 2005-11-22. */ +#define MAX_STR_LEN 64 +/* I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.*/ +#define PRINTABLE(_ch) (_ch>'!' && _ch<'~') +#define RTLLIB_PRINT_STR(_Comp, _TitleString, _Ptr, _Len) \ + if((_Comp) & level) \ + { \ + int __i; \ + u8 buffer[MAX_STR_LEN]; \ + int length = (_Len\n", _Len, buffer); \ + } +#else +#define RTLLIB_PRINT_STR(_Comp, _TitleString, _Ptr, _Len) do {} while (0) +#endif + +#ifndef ETH_P_PAE +#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ +#define ETH_P_IP 0x0800 /* Internet Protocol packet */ +#define ETH_P_ARP 0x0806 /* Address Resolution packet */ +#endif /* ETH_P_PAE */ + +#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */ + +#ifndef ETH_P_80211_RAW +#define ETH_P_80211_RAW (ETH_P_ECONET + 1) +#endif + +/* IEEE 802.11 defines */ + +#define P80211_OUI_LEN 3 + +struct rtllib_snap_hdr { + + u8 dsap; /* always 0xAA */ + u8 ssap; /* always 0xAA */ + u8 ctrl; /* always 0x03 */ + u8 oui[P80211_OUI_LEN]; /* organizational universal id */ + +} __attribute__ ((packed)); + +#define SNAP_SIZE sizeof(struct rtllib_snap_hdr) + +#define WLAN_FC_GET_VERS(fc) ((fc) & RTLLIB_FCTL_VERS) +#define WLAN_FC_GET_TYPE(fc) ((fc) & RTLLIB_FCTL_FTYPE) +#define WLAN_FC_GET_STYPE(fc) ((fc) & RTLLIB_FCTL_STYPE) +#define WLAN_FC_MORE_DATA(fc) ((fc) & RTLLIB_FCTL_MOREDATA) + +#define WLAN_FC_GET_FRAMETYPE(fc) ((fc) & RTLLIB_FCTL_FRAMETYPE) +#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTLLIB_SCTL_FRAG) +#define WLAN_GET_SEQ_SEQ(seq) (((seq) & RTLLIB_SCTL_SEQ) >> 4) + +#ifndef CONFIG_CFG_80211 +/* Authentication algorithms */ +#define WLAN_AUTH_OPEN 0 +#define WLAN_AUTH_SHARED_KEY 1 +#define WLAN_AUTH_LEAP 128 + +#define WLAN_AUTH_CHALLENGE_LEN 128 + +#define WLAN_CAPABILITY_ESS (1<<0) +#define WLAN_CAPABILITY_IBSS (1<<1) +#define WLAN_CAPABILITY_CF_POLLABLE (1<<2) +#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) +#define WLAN_CAPABILITY_PRIVACY (1<<4) +#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) +#define WLAN_CAPABILITY_PBCC (1<<6) +#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) +#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) +#define WLAN_CAPABILITY_QOS (1<<9) +#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) +#define WLAN_CAPABILITY_DSSS_OFDM (1<<13) + +/* 802.11g ERP information element */ +#define WLAN_ERP_NON_ERP_PRESENT (1<<0) +#define WLAN_ERP_USE_PROTECTION (1<<1) +#define WLAN_ERP_BARKER_PREAMBLE (1<<2) + +/* Status codes */ +enum rtllib_statuscode { + WLAN_STATUS_SUCCESS = 0, + WLAN_STATUS_UNSPECIFIED_FAILURE = 1, + WLAN_STATUS_CAPS_UNSUPPORTED = 10, + WLAN_STATUS_REASSOC_NO_ASSOC = 11, + WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12, + WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13, + WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14, + WLAN_STATUS_CHALLENGE_FAIL = 15, + WLAN_STATUS_AUTH_TIMEOUT = 16, + WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17, + WLAN_STATUS_ASSOC_DENIED_RATES = 18, + /* 802.11b */ + WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19, + WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20, + WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21, + /* 802.11h */ + WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22, + WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23, + WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24, + /* 802.11g */ + WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, + WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, + /* 802.11i */ + WLAN_STATUS_INVALID_IE = 40, + WLAN_STATUS_INVALID_GROUP_CIPHER = 41, + WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42, + WLAN_STATUS_INVALID_AKMP = 43, + WLAN_STATUS_UNSUPP_RSN_VERSION = 44, + WLAN_STATUS_INVALID_RSN_IE_CAP = 45, + WLAN_STATUS_CIPHER_SUITE_REJECTED = 46, +}; + +/* Reason codes */ +enum rtllib_reasoncode { + WLAN_REASON_UNSPECIFIED = 1, + WLAN_REASON_PREV_AUTH_NOT_VALID = 2, + WLAN_REASON_DEAUTH_LEAVING = 3, + WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4, + WLAN_REASON_DISASSOC_AP_BUSY = 5, + WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6, + WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7, + WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8, + WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9, + /* 802.11h */ + WLAN_REASON_DISASSOC_BAD_POWER = 10, + WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11, + /* 802.11i */ + WLAN_REASON_INVALID_IE = 13, + WLAN_REASON_MIC_FAILURE = 14, + WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, + WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16, + WLAN_REASON_IE_DIFFERENT = 17, + WLAN_REASON_INVALID_GROUP_CIPHER = 18, + WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19, + WLAN_REASON_INVALID_AKMP = 20, + WLAN_REASON_UNSUPP_RSN_VERSION = 21, + WLAN_REASON_INVALID_RSN_IE_CAP = 22, + WLAN_REASON_IEEE8021X_FAILED = 23, + WLAN_REASON_CIPHER_SUITE_REJECTED = 24, +}; +#endif + +#define RTLLIB_STATMASK_SIGNAL (1<<0) +#define RTLLIB_STATMASK_RSSI (1<<1) +#define RTLLIB_STATMASK_NOISE (1<<2) +#define RTLLIB_STATMASK_RATE (1<<3) +#define RTLLIB_STATMASK_WEMASK 0x7 + +#define RTLLIB_CCK_MODULATION (1<<0) +#define RTLLIB_OFDM_MODULATION (1<<1) + +#define RTLLIB_24GHZ_BAND (1<<0) +#define RTLLIB_52GHZ_BAND (1<<1) + +#define RTLLIB_CCK_RATE_LEN 4 +#define RTLLIB_CCK_RATE_1MB 0x02 +#define RTLLIB_CCK_RATE_2MB 0x04 +#define RTLLIB_CCK_RATE_5MB 0x0B +#define RTLLIB_CCK_RATE_11MB 0x16 +#define RTLLIB_OFDM_RATE_LEN 8 +#define RTLLIB_OFDM_RATE_6MB 0x0C +#define RTLLIB_OFDM_RATE_9MB 0x12 +#define RTLLIB_OFDM_RATE_12MB 0x18 +#define RTLLIB_OFDM_RATE_18MB 0x24 +#define RTLLIB_OFDM_RATE_24MB 0x30 +#define RTLLIB_OFDM_RATE_36MB 0x48 +#define RTLLIB_OFDM_RATE_48MB 0x60 +#define RTLLIB_OFDM_RATE_54MB 0x6C +#define RTLLIB_BASIC_RATE_MASK 0x80 + +#define RTLLIB_CCK_RATE_1MB_MASK (1<<0) +#define RTLLIB_CCK_RATE_2MB_MASK (1<<1) +#define RTLLIB_CCK_RATE_5MB_MASK (1<<2) +#define RTLLIB_CCK_RATE_11MB_MASK (1<<3) +#define RTLLIB_OFDM_RATE_6MB_MASK (1<<4) +#define RTLLIB_OFDM_RATE_9MB_MASK (1<<5) +#define RTLLIB_OFDM_RATE_12MB_MASK (1<<6) +#define RTLLIB_OFDM_RATE_18MB_MASK (1<<7) +#define RTLLIB_OFDM_RATE_24MB_MASK (1<<8) +#define RTLLIB_OFDM_RATE_36MB_MASK (1<<9) +#define RTLLIB_OFDM_RATE_48MB_MASK (1<<10) +#define RTLLIB_OFDM_RATE_54MB_MASK (1<<11) + +#define RTLLIB_CCK_RATES_MASK 0x0000000F +#define RTLLIB_CCK_BASIC_RATES_MASK (RTLLIB_CCK_RATE_1MB_MASK | \ + RTLLIB_CCK_RATE_2MB_MASK) +#define RTLLIB_CCK_DEFAULT_RATES_MASK (RTLLIB_CCK_BASIC_RATES_MASK | \ + RTLLIB_CCK_RATE_5MB_MASK | \ + RTLLIB_CCK_RATE_11MB_MASK) + +#define RTLLIB_OFDM_RATES_MASK 0x00000FF0 +#define RTLLIB_OFDM_BASIC_RATES_MASK (RTLLIB_OFDM_RATE_6MB_MASK | \ + RTLLIB_OFDM_RATE_12MB_MASK | \ + RTLLIB_OFDM_RATE_24MB_MASK) +#define RTLLIB_OFDM_DEFAULT_RATES_MASK (RTLLIB_OFDM_BASIC_RATES_MASK | \ + RTLLIB_OFDM_RATE_9MB_MASK | \ + RTLLIB_OFDM_RATE_18MB_MASK | \ + RTLLIB_OFDM_RATE_36MB_MASK | \ + RTLLIB_OFDM_RATE_48MB_MASK | \ + RTLLIB_OFDM_RATE_54MB_MASK) +#define RTLLIB_DEFAULT_RATES_MASK (RTLLIB_OFDM_DEFAULT_RATES_MASK | \ + RTLLIB_CCK_DEFAULT_RATES_MASK) + +#define RTLLIB_NUM_OFDM_RATES 8 +#define RTLLIB_NUM_CCK_RATES 4 +#define RTLLIB_OFDM_SHIFT_MASK_A 4 + + +/* this is stolen and modified from the madwifi driver*/ +#define RTLLIB_FC0_TYPE_MASK 0x0c +#define RTLLIB_FC0_TYPE_DATA 0x08 +#define RTLLIB_FC0_SUBTYPE_MASK 0xB0 +#define RTLLIB_FC0_SUBTYPE_QOS 0x80 + +#define RTLLIB_QOS_HAS_SEQ(fc) \ + (((fc) & (RTLLIB_FC0_TYPE_MASK | RTLLIB_FC0_SUBTYPE_MASK)) == \ + (RTLLIB_FC0_TYPE_DATA | RTLLIB_FC0_SUBTYPE_QOS)) + +/* this is stolen from ipw2200 driver */ +#define IEEE_IBSS_MAC_HASH_SIZE 31 +struct ieee_ibss_seq { + u8 mac[ETH_ALEN]; + u16 seq_num[17]; + u16 frag_num[17]; + unsigned long packet_time[17]; + struct list_head list; +}; + +#ifdef _RTL8192_EXT_PATCH_ +struct ieee_mesh_seq { + u8 mac[ETH_ALEN]; + u16 seq_num[17]; + u16 frag_num[17]; + unsigned long packet_time[17]; + struct list_head list; +}; +#endif +/* NOTE: This data is for statistical purposes; not all hardware provides this + * information for frames received. Not setting these will not cause + * any adverse affects. */ +struct rtllib_rx_stats { +#if 1 + u32 mac_time[2]; + s8 rssi; + u8 signal; + u8 noise; + u16 rate; /* in 100 kbps */ + u8 received_channel; + u8 control; + u8 mask; + u8 freq; + u16 len; + u64 tsf; + u32 beacon_time; + u8 nic_type; + u16 Length; + u8 SignalQuality; + s32 RecvSignalPower; + s8 RxPower; + u8 SignalStrength; + u16 bHwError:1; + u16 bCRC:1; + u16 bICV:1; + u16 bShortPreamble:1; + u16 Antenna:1; + u16 Decrypted:1; + u16 Wakeup:1; + u16 Reserved0:1; + u8 AGC; + u32 TimeStampLow; + u32 TimeStampHigh; + bool bShift; + bool bIsQosData; + u8 UserPriority; + + u8 RxDrvInfoSize; + u8 RxBufShift; + bool bIsAMPDU; + bool bFirstMPDU; + bool bContainHTC; + bool RxIs40MHzPacket; + u32 RxPWDBAll; + u8 RxMIMOSignalStrength[4]; + s8 RxMIMOSignalQuality[2]; + bool bPacketMatchBSSID; + bool bIsCCK; + bool bPacketToSelf; + u8* virtual_address; + u16 packetlength; + u16 fraglength; + u16 fragoffset; + u16 ntotalfrag; + bool bisrxaggrsubframe; + bool bPacketBeacon; + bool bToSelfBA; + char cck_adc_pwdb[4]; + u16 Seq_Num; + u8 nTotalAggPkt; +#ifdef TCP_CSUM_OFFLOAD_RX + u8 tcp_csum_valid; +#endif +#if defined (RTL8192S_WAPI_SUPPORT) + u8 WapiTempPN[16]; + u8 WapiSrcAddr[6]; + u8 bWapiCheckPNInDecrypt; +#endif +#endif + +}; + +/* IEEE 802.11 requires that STA supports concurrent reception of at least + * three fragmented frames. This define can be increased to support more + * concurrent frames, but it should be noted that each entry can consume about + * 2 kB of RAM and increasing cache size will slow down frame reassembly. */ +#define RTLLIB_FRAG_CACHE_LEN 4 + +struct rtllib_frag_entry { + unsigned long first_frag_time; + unsigned int seq; + unsigned int last_frag; + struct sk_buff *skb; + u8 src_addr[ETH_ALEN]; + u8 dst_addr[ETH_ALEN]; +}; + +struct rtllib_stats { + unsigned int tx_unicast_frames; + unsigned int tx_multicast_frames; + unsigned int tx_fragments; + unsigned int tx_unicast_octets; + unsigned int tx_multicast_octets; + unsigned int tx_deferred_transmissions; + unsigned int tx_single_retry_frames; + unsigned int tx_multiple_retry_frames; + unsigned int tx_retry_limit_exceeded; + unsigned int tx_discards; + unsigned int rx_unicast_frames; + unsigned int rx_multicast_frames; + unsigned int rx_fragments; + unsigned int rx_unicast_octets; + unsigned int rx_multicast_octets; + unsigned int rx_fcs_errors; + unsigned int rx_discards_no_buffer; + unsigned int tx_discards_wrong_sa; + unsigned int rx_discards_undecryptable; + unsigned int rx_message_in_msg_fragments; + unsigned int rx_message_in_bad_msg_fragments; +}; + +struct rtllib_device; + +#include "rtllib_crypt.h" + +#define SEC_KEY_1 (1<<0) +#define SEC_KEY_2 (1<<1) +#define SEC_KEY_3 (1<<2) +#define SEC_KEY_4 (1<<3) +#define SEC_ACTIVE_KEY (1<<4) +#define SEC_AUTH_MODE (1<<5) +#define SEC_UNICAST_GROUP (1<<6) +#define SEC_LEVEL (1<<7) +#define SEC_ENABLED (1<<8) +#define SEC_ENCRYPT (1<<9) + +#define SEC_LEVEL_0 0 /* None */ +#define SEC_LEVEL_1 1 /* WEP 40 and 104 bit */ +#define SEC_LEVEL_2 2 /* Level 1 + TKIP */ +#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */ +#define SEC_LEVEL_3 4 /* Level 2 + CCMP */ + +#define SEC_ALG_NONE 0 +#define SEC_ALG_WEP 1 +#define SEC_ALG_TKIP 2 +#define SEC_ALG_CCMP 4 + +#define WEP_KEYS 4 +#define WEP_KEY_LEN 13 +#define SCM_KEY_LEN 32 +#define SCM_TEMPORAL_KEY_LENGTH 16 + +struct rtllib_security { + u16 active_key:2, + enabled:1, + auth_mode:2, + auth_algo:4, + unicast_uses_group:1, + encrypt:1; + u8 key_sizes[WEP_KEYS]; + u8 keys[WEP_KEYS][SCM_KEY_LEN]; + u8 level; + u16 flags; +} __attribute__ ((packed)); + + +/* + 802.11 data frame from AP + ,-------------------------------------------------------------------. +Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | + |------|------|---------|---------|---------|------|---------|------| +Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs | + | | tion | (BSSID) | | | ence | data | | + `-------------------------------------------------------------------' +Total: 28-2340 bytes +*/ + +/* Management Frame Information Element Types */ +enum rtllib_mfie { + MFIE_TYPE_SSID = 0, + MFIE_TYPE_RATES = 1, + MFIE_TYPE_FH_SET = 2, + MFIE_TYPE_DS_SET = 3, + MFIE_TYPE_CF_SET = 4, + MFIE_TYPE_TIM = 5, + MFIE_TYPE_IBSS_SET = 6, + MFIE_TYPE_COUNTRY = 7, + MFIE_TYPE_HOP_PARAMS = 8, + MFIE_TYPE_HOP_TABLE = 9, + MFIE_TYPE_REQUEST = 10, + MFIE_TYPE_CHALLENGE = 16, + MFIE_TYPE_POWER_CONSTRAINT = 32, + MFIE_TYPE_POWER_CAPABILITY = 33, + MFIE_TYPE_TPC_REQUEST = 34, + MFIE_TYPE_TPC_REPORT = 35, + MFIE_TYPE_SUPP_CHANNELS = 36, + MFIE_TYPE_CSA = 37, + MFIE_TYPE_MEASURE_REQUEST = 38, + MFIE_TYPE_MEASURE_REPORT = 39, + MFIE_TYPE_QUIET = 40, + MFIE_TYPE_IBSS_DFS = 41, + MFIE_TYPE_ERP = 42, + MFIE_TYPE_HT_CAP= 45, + MFIE_TYPE_RSN = 48, + MFIE_TYPE_RATES_EX = 50, +#ifdef _RTL8192_EXT_PATCH_ + MFIE_TYPE_MESH_PANN = 51, + MFIE_TYPE_MESH_RANN = 52, + MFIE_TYPE_MESH_PATH_REQ = 138, + MFIE_TYPE_MESH_PATH_REP = 139, + MFIE_TYPE_MESH_PATH_ERR = 140, +#endif + MFIE_TYPE_HT_INFO= 61, +#if defined (RTL8192S_WAPI_SUPPORT) + MFIE_TYPE_WAPI = 68, +#endif + MFIE_TYPE_AIRONET=133, +#ifdef _RTL8192_EXT_PATCH_ + MFIE_TYPE_MESH_CONFIGURATION = 121, + MFIE_TYPE_MESH_ID = 122, + MFIE_TYPE_MESH_LOCAL_LINK_STATE_ANNOU = 138, + MFIE_TYPE_MESH_ABBR_HANDSHAKE_IE_ =139, + MFIE_TYPE_MESH_PEER_LINK_MGNT = 125, + MFIE_TYPE_MESH_NEIGHBOR_LIST = 142, + MFIE_TYPE_MESH_TIM = 143, + MFIE_TYPE_MESH_ATIM_WINDOW = 144, + MFIE_TYPE_MESH_BEACON_TIMING = 145, + MFIE_TYPE_MESH_MDAOP_ADVERTISMENTS = 148, + MFIE_TYPE_MESH_MSC = 149, + MFIE_TYPE_MESH_MSA = 150, + MFIE_TYPE_MESH_MOAOP_SET_TEARDOWN = 212, +#endif + MFIE_TYPE_GENERIC = 221, + MFIE_TYPE_QOS_PARAMETER = 222, +}; + +/* Minimal header; can be used for passing 802.11 frames with sufficient + * information to determine what type of underlying data type is actually + * stored in the data. */ +struct rtllib_pspoll_hdr { + __le16 frame_ctl; + __le16 aid; + u8 bssid[ETH_ALEN]; + u8 ta[ETH_ALEN]; +} __attribute__ ((packed)); + +struct rtllib_hdr { + __le16 frame_ctl; + __le16 duration_id; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_hdr_1addr { + __le16 frame_ctl; + __le16 duration_id; + u8 addr1[ETH_ALEN]; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_hdr_2addr { + __le16 frame_ctl; + __le16 duration_id; + u8 addr1[ETH_ALEN]; + u8 addr2[ETH_ALEN]; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_hdr_3addr { + __le16 frame_ctl; + __le16 duration_id; + u8 addr1[ETH_ALEN]; + u8 addr2[ETH_ALEN]; + u8 addr3[ETH_ALEN]; + __le16 seq_ctl; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_hdr_4addr { + __le16 frame_ctl; + __le16 duration_id; + u8 addr1[ETH_ALEN]; + u8 addr2[ETH_ALEN]; + u8 addr3[ETH_ALEN]; + __le16 seq_ctl; + u8 addr4[ETH_ALEN]; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_hdr_3addrqos { + __le16 frame_ctl; + __le16 duration_id; + u8 addr1[ETH_ALEN]; + u8 addr2[ETH_ALEN]; + u8 addr3[ETH_ALEN]; + __le16 seq_ctl; + __le16 qos_ctl; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_hdr_4addrqos { + __le16 frame_ctl; + __le16 duration_id; + u8 addr1[ETH_ALEN]; + u8 addr2[ETH_ALEN]; + u8 addr3[ETH_ALEN]; + __le16 seq_ctl; + u8 addr4[ETH_ALEN]; + __le16 qos_ctl; + u8 payload[0]; +} __attribute__ ((packed)); + +struct rtllib_info_element { + u8 id; + u8 len; + u8 data[0]; +} __attribute__ ((packed)); + +#ifdef _RTL8192_EXT_PATCH_ + +struct mesh_peering_protocol_version_t{ + u8 OUI[3]; + u8 value; +} __attribute__ ((packed)); +struct rtllib_plink_open { + struct rtllib_hdr_3addr header; + u8 category; + u8 action; +#ifndef COMPATIBLE_WITH_RALINK_MESH + struct mesh_peering_protocol_version_t mesh_peering_protocol_version; +#endif + __le16 capability; + /* SSID, supported rates, RSN */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_plink_confirm { + struct rtllib_hdr_3addr header; + u8 category; + u8 action; +#ifndef COMPATIBLE_WITH_RALINK_MESH + struct mesh_peering_protocol_version_t mesh_peering_protocol_version; +#endif + __le16 capability; +#ifdef COMPATIBLE_WITH_RALINK_MESH + __le16 status_code; +#endif + __le16 aid; + /* SSID, supported rates, RSN */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_plink_close { + struct rtllib_hdr_3addr header; + u8 category; + u8 action; +#ifndef COMPATIBLE_WITH_RALINK_MESH + struct mesh_peering_protocol_version_t mesh_peering_protocol_version; +#endif + /* SSID, supported rates, RSN */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_linkmetric_report { + struct rtllib_hdr_3addr header; + u8 category; + u8 action; + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_linkmetric_req { + struct rtllib_hdr_3addr header; + u8 category; + u8 action; +} __attribute__ ((packed)); +#endif + +struct rtllib_authentication { + struct rtllib_hdr_3addr header; + __le16 algorithm; + __le16 transaction; + __le16 status; + /*challenge*/ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_disauth { + struct rtllib_hdr_3addr header; + __le16 reason; +} __attribute__ ((packed)); + +struct rtllib_disassoc { + struct rtllib_hdr_3addr header; + __le16 reason; +} __attribute__ ((packed)); + +struct rtllib_probe_request { + struct rtllib_hdr_3addr header; + /* SSID, supported rates */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_probe_response { + struct rtllib_hdr_3addr header; + u32 time_stamp[2]; + __le16 beacon_interval; + __le16 capability; + /* SSID, supported rates, FH params, DS params, + * CF params, IBSS params, TIM (if beacon), RSN */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +/* Alias beacon for probe_response */ +#define rtllib_beacon rtllib_probe_response + +struct rtllib_assoc_request_frame { + struct rtllib_hdr_3addr header; + __le16 capability; + __le16 listen_interval; + /* SSID, supported rates, RSN */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_reassoc_request_frame { + struct rtllib_hdr_3addr header; + __le16 capability; + __le16 listen_interval; + u8 current_ap[ETH_ALEN]; + /* SSID, supported rates, RSN */ + struct rtllib_info_element info_element[0]; +} __attribute__ ((packed)); + +struct rtllib_assoc_response_frame { + struct rtllib_hdr_3addr header; + __le16 capability; + __le16 status; + __le16 aid; + struct rtllib_info_element info_element[0]; /* supported rates */ +} __attribute__ ((packed)); + +struct rtllib_txb { + u8 nr_frags; + u8 encrypted; + u8 queue_index; + u8 rts_included; + u16 reserved; + __le16 frag_size; + __le16 payload_size; + struct sk_buff *fragments[0]; +}; + +#define MAX_TX_AGG_COUNT 16 +struct rtllib_drv_agg_txb { + u8 nr_drv_agg_frames; + struct sk_buff *tx_agg_frames[MAX_TX_AGG_COUNT]; +}__attribute__((packed)); + +#define MAX_SUBFRAME_COUNT 64 +struct rtllib_rxb { + u8 nr_subframes; + struct sk_buff *subframes[MAX_SUBFRAME_COUNT]; + u8 dst[ETH_ALEN]; + u8 src[ETH_ALEN]; +#ifdef TCP_CSUM_OFFLOAD_RX + u8 tcp_csum_valid; +#endif +#if defined (RTL8192S_WAPI_SUPPORT) + u8 UserPriority; + u8 WapiTempPN[16]; + u8 WapiSrcAddr[6]; + u8 bWapiCheckPNInDecrypt; +#endif +}__attribute__((packed)); + +typedef union _frameqos { + u16 shortdata; + u8 chardata[2]; + struct { + u16 tid:4; + u16 eosp:1; + u16 ack_policy:2; + u16 reserved:1; + u16 txop:8; + }field; +}frameqos,*pframeqos; + +/* SWEEP TABLE ENTRIES NUMBER*/ +#define MAX_SWEEP_TAB_ENTRIES 42 +#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 +/* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs + * only use 8, and then use extended rates for the remaining supported + * rates. Other APs, however, stick all of their supported rates on the + * main rates information element... */ +#define MAX_RATES_LENGTH ((u8)12) +#define MAX_RATES_EX_LENGTH ((u8)16) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#define MAX_NETWORK_COUNT 16 +#else +#define MAX_NETWORK_COUNT 96 +#endif + +#define MAX_CHANNEL_NUMBER 161 +#define RTLLIB_SOFTMAC_SCAN_TIME 100 +#define RTLLIB_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2) + +#define CRC_LENGTH 4U + +#define MAX_WPA_IE_LEN 64 +#define MAX_WZC_IE_LEN 256 + +#define NETWORK_EMPTY_ESSID (1<<0) +#define NETWORK_HAS_OFDM (1<<1) +#define NETWORK_HAS_CCK (1<<2) + +/* QoS structure */ +#define NETWORK_HAS_QOS_PARAMETERS (1<<3) +#define NETWORK_HAS_QOS_INFORMATION (1<<4) +#define NETWORK_HAS_QOS_MASK (NETWORK_HAS_QOS_PARAMETERS | \ + NETWORK_HAS_QOS_INFORMATION) +/* 802.11h */ +#define NETWORK_HAS_POWER_CONSTRAINT (1<<5) +#define NETWORK_HAS_CSA (1<<6) +#define NETWORK_HAS_QUIET (1<<7) +#define NETWORK_HAS_IBSS_DFS (1<<8) +#define NETWORK_HAS_TPC_REPORT (1<<9) + +#define NETWORK_HAS_ERP_VALUE (1<<10) + +#define QOS_QUEUE_NUM 4 +#define QOS_OUI_LEN 3 +#define QOS_OUI_TYPE 2 +#define QOS_ELEMENT_ID 221 +#define QOS_OUI_INFO_SUB_TYPE 0 +#define QOS_OUI_PARAM_SUB_TYPE 1 +#define QOS_VERSION_1 1 +#define QOS_AIFSN_MIN_VALUE 2 +#if 1 +struct rtllib_qos_information_element { + u8 elementID; + u8 length; + u8 qui[QOS_OUI_LEN]; + u8 qui_type; + u8 qui_subtype; + u8 version; + u8 ac_info; +} __attribute__ ((packed)); + +struct rtllib_qos_ac_parameter { + u8 aci_aifsn; + u8 ecw_min_max; + __le16 tx_op_limit; +} __attribute__ ((packed)); + +struct rtllib_qos_parameter_info { + struct rtllib_qos_information_element info_element; + u8 reserved; + struct rtllib_qos_ac_parameter ac_params_record[QOS_QUEUE_NUM]; +} __attribute__ ((packed)); + +struct rtllib_qos_parameters { + __le16 cw_min[QOS_QUEUE_NUM]; + __le16 cw_max[QOS_QUEUE_NUM]; + u8 aifs[QOS_QUEUE_NUM]; + u8 flag[QOS_QUEUE_NUM]; + __le16 tx_op_limit[QOS_QUEUE_NUM]; +} __attribute__ ((packed)); + +struct rtllib_qos_data { + struct rtllib_qos_parameters parameters; + unsigned int wmm_acm; + int active; + int supported; + u8 param_count; + u8 old_param_count; +}; + +struct rtllib_tim_parameters { + u8 tim_count; + u8 tim_period; +} __attribute__ ((packed)); + +struct rtllib_wmm_ac_param { + u8 ac_aci_acm_aifsn; + u8 ac_ecwmin_ecwmax; + u16 ac_txop_limit; +}; + +struct rtllib_wmm_ts_info { + u8 ac_dir_tid; + u8 ac_up_psb; + u8 reserved; +} __attribute__ ((packed)); + +struct rtllib_wmm_tspec_elem { + struct rtllib_wmm_ts_info ts_info; + u16 norm_msdu_size; + u16 max_msdu_size; + u32 min_serv_inter; + u32 max_serv_inter; + u32 inact_inter; + u32 suspen_inter; + u32 serv_start_time; + u32 min_data_rate; + u32 mean_data_rate; + u32 peak_data_rate; + u32 max_burst_size; + u32 delay_bound; + u32 min_phy_rate; + u16 surp_band_allow; + u16 medium_time; +}__attribute__((packed)); +#endif +enum eap_type { + EAP_PACKET = 0, + EAPOL_START, + EAPOL_LOGOFF, + EAPOL_KEY, + EAPOL_ENCAP_ASF_ALERT +}; + +static const char *eap_types[] = { + [EAP_PACKET] = "EAP-Packet", + [EAPOL_START] = "EAPOL-Start", + [EAPOL_LOGOFF] = "EAPOL-Logoff", + [EAPOL_KEY] = "EAPOL-Key", + [EAPOL_ENCAP_ASF_ALERT] = "EAPOL-Encap-ASF-Alert" +}; + +static inline const char *eap_get_type(int type) +{ + return ((u32)type >= ARRAY_SIZE(eap_types)) ? "Unknown" : eap_types[type]; +} +static inline u8 Frame_QoSTID(u8* buf) +{ + struct rtllib_hdr_3addr *hdr; + u16 fc; + hdr = (struct rtllib_hdr_3addr *)buf; + fc = le16_to_cpu(hdr->frame_ctl); + return (u8)((frameqos*)(buf + (((fc & RTLLIB_FCTL_TODS)&&(fc & RTLLIB_FCTL_FROMDS))? 30 : 24)))->field.tid; +} + + +struct eapol { + u8 snap[6]; + u16 ethertype; + u8 version; + u8 type; + u16 length; +} __attribute__ ((packed)); + +struct rtllib_softmac_stats{ + unsigned int rx_ass_ok; + unsigned int rx_ass_err; + unsigned int rx_probe_rq; + unsigned int tx_probe_rs; + unsigned int tx_beacons; + unsigned int rx_auth_rq; + unsigned int rx_auth_rs_ok; + unsigned int rx_auth_rs_err; + unsigned int tx_auth_rq; + unsigned int no_auth_rs; + unsigned int no_ass_rs; + unsigned int tx_ass_rq; + unsigned int rx_ass_rq; + unsigned int tx_probe_rq; + unsigned int reassoc; + unsigned int swtxstop; + unsigned int swtxawake; + unsigned char CurrentShowTxate; + unsigned char last_packet_rate; + unsigned int txretrycount; +}; + +#define BEACON_PROBE_SSID_ID_POSITION 12 + +struct rtllib_info_element_hdr { + u8 id; + u8 len; +} __attribute__ ((packed)); + +/* + * These are the data types that can make up management packets + * + u16 auth_algorithm; + u16 auth_sequence; + u16 beacon_interval; + u16 capability; + u8 current_ap[ETH_ALEN]; + u16 listen_interval; + struct { + u16 association_id:14, reserved:2; + } __attribute__ ((packed)); + u32 time_stamp[2]; + u16 reason; + u16 status; +*/ + +#define RTLLIB_DEFAULT_TX_ESSID "Penguin" +#define RTLLIB_DEFAULT_BASIC_RATE 2 +#ifdef _RTL8192_EXT_PATCH_ +#define RTLLIB_DEFAULT_MESHID "CMPC-mesh" +#define RTLLIB_DEFAULT_MESH_CHAN 7 +#endif + +enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame}; +#define MAX_SP_Len (WMM_all_frame << 4) +#define RTLLIB_QOS_TID 0x0f +#define QOS_CTL_NOTCONTAIN_ACK (0x01 << 5) +#ifdef ENABLE_AMSDU +#define QOS_CTL_AMSDU_PRESENT (0x01 << 7) +#endif + +#define RTLLIB_DTIM_MBCAST 4 +#define RTLLIB_DTIM_UCAST 2 +#define RTLLIB_DTIM_VALID 1 +#define RTLLIB_DTIM_INVALID 0 + +#define RTLLIB_PS_DISABLED 0 +#define RTLLIB_PS_UNICAST RTLLIB_DTIM_UCAST +#define RTLLIB_PS_MBCAST RTLLIB_DTIM_MBCAST + +#ifdef WMM_Hang_8187 +#undef WMM_Hang_8187 +#endif + +#define WME_AC_BK 0x00 +#define WME_AC_BE 0x01 +#define WME_AC_VI 0x02 +#define WME_AC_VO 0x03 +#define WME_ACI_MASK 0x03 +#define WME_AIFSN_MASK 0x03 +#define WME_AC_PRAM_LEN 16 + +#define MAX_RECEIVE_BUFFER_SIZE 9100 + +#if 1 +#define UP2AC(up) ( \ + ((up) < 1) ? WME_AC_BE : \ + ((up) < 3) ? WME_AC_BK : \ + ((up) < 4) ? WME_AC_BE : \ + ((up) < 6) ? WME_AC_VI : \ + WME_AC_VO) +#endif +#define AC2UP(_ac) ( \ + ((_ac) == WME_AC_VO) ? 6 : \ + ((_ac) == WME_AC_VI) ? 5 : \ + ((_ac) == WME_AC_BK) ? 1 : \ + 0) + +#define ETHER_ADDR_LEN 6 /* length of an Ethernet address */ +#define ETHERNET_HEADER_SIZE 14 /* length of two Ethernet address plus ether type*/ + +struct ether_header { + u8 ether_dhost[ETHER_ADDR_LEN]; + u8 ether_shost[ETHER_ADDR_LEN]; + u16 ether_type; +} __attribute__((packed)); + +#ifndef ETHERTYPE_PAE +#define ETHERTYPE_PAE 0x888e /* EAPOL PAE/802.1x */ +#endif +#ifndef ETHERTYPE_IP +#define ETHERTYPE_IP 0x0800 /* IP protocol */ +#endif + + +typedef enum _erp_t{ + ERP_NonERPpresent = 0x01, + ERP_UseProtection = 0x02, + ERP_BarkerPreambleMode = 0x04, +} erp_t; + +#ifdef _RTL8192_EXT_PATCH_ +typedef struct _mesh_config_t { + u8 path_proto_id[4]; + u8 path_metric_id[4]; + u8 congest_ctl_mode[4]; + u8 mesh_capability[2]; +} mesh_config_t; +#define MESH_CONF_TOTAL_LEN 19 +#endif + +struct rtllib_network { + /* These entries are used to identify a unique network */ + u8 bssid[ETH_ALEN]; + u8 channel; + /* Ensure null-terminated for any debug msgs */ + u8 ssid[IW_ESSID_MAX_SIZE + 1]; + u8 ssid_len; + u8 hidden_ssid[IW_ESSID_MAX_SIZE + 1]; + u8 hidden_ssid_len; + struct rtllib_qos_data qos_data; + + bool bWithAironetIE; + bool bCkipSupported; + bool bCcxRmEnable; + u16 CcxRmState[2]; + bool bMBssidValid; + u8 MBssidMask; + u8 MBssid[6]; + bool bWithCcxVerNum; + u8 BssCcxVerNumber; + /* These are network statistics */ + struct rtllib_rx_stats stats; + u16 capability; + u8 rates[MAX_RATES_LENGTH]; + u8 rates_len; + u8 rates_ex[MAX_RATES_EX_LENGTH]; + u8 rates_ex_len; + unsigned long last_scanned; + u8 mode; + u32 flags; + u32 last_associate; + u32 time_stamp[2]; + u16 beacon_interval; + u16 listen_interval; + u16 atim_window; + u8 erp_value; + u8 wpa_ie[MAX_WPA_IE_LEN]; + size_t wpa_ie_len; + u8 rsn_ie[MAX_WPA_IE_LEN]; + size_t rsn_ie_len; +#if defined RTL8192S_WAPI_SUPPORT + u8 wapi_ie[MAX_WAPI_IE_LEN]; + size_t wapi_ie_len; +#endif +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + u8 wzc_ie[MAX_WZC_IE_LEN]; + size_t wzc_ie_len; +#endif + + struct rtllib_tim_parameters tim; + u8 dtim_period; + u8 dtim_data; + u32 last_dtim_sta_time[2]; + + u8 wmm_info; + struct rtllib_wmm_ac_param wmm_param[4]; +#ifdef THOMAS_TURBO + u8 Turbo_Enable; +#endif +#ifdef ENABLE_DOT11D + u16 CountryIeLen; + u8 CountryIeBuf[MAX_IE_LEN]; +#endif + BSS_HT bssht; + bool broadcom_cap_exist; + bool realtek_cap_exit; + bool marvell_cap_exist; + bool ralink_cap_exist; + bool atheros_cap_exist; + bool cisco_cap_exist; + bool unknown_cap_exist; + bool berp_info_valid; + bool buseprotection; + bool bIsNetgear854T; + u8 SignalStrength; + u8 RSSI; +#ifdef _RTL8192_EXT_PATCH_ + u8 hostname[MAX_HOST_NAME_LENGTH]; + u8 hostname_len; + u8 mesh_id[MAX_MESH_ID_LEN]; + u8 mesh_id_len; + mesh_config_t mesh_config; + u8 mesh_config_len; + void *ext_entry; +#endif + + struct list_head list; +}; + +#if 1 +enum rtllib_state { + + /* the card is not linked at all */ + RTLLIB_NOLINK = 0, + + /* RTLLIB_ASSOCIATING* are for BSS client mode + * the driver shall not perform RX filtering unless + * the state is LINKED. + * The driver shall just check for the state LINKED and + * defaults to NOLINK for ALL the other states (including + * LINKED_SCANNING) + */ + + /* the association procedure will start (wq scheduling)*/ + RTLLIB_ASSOCIATING, + RTLLIB_ASSOCIATING_RETRY, + + /* the association procedure is sending AUTH request*/ + RTLLIB_ASSOCIATING_AUTHENTICATING, + + /* the association procedure has successfully authentcated + * and is sending association request + */ + RTLLIB_ASSOCIATING_AUTHENTICATED, + + /* the link is ok. the card associated to a BSS or linked + * to a ibss cell or acting as an AP and creating the bss + */ + RTLLIB_LINKED, + + /* same as LINKED, but the driver shall apply RX filter + * rules as we are in NO_LINK mode. As the card is still + * logically linked, but it is doing a syncro site survey + * then it will be back to LINKED state. + */ + RTLLIB_LINKED_SCANNING, +#ifdef _RTL8192_EXT_PATCH_ + RTLLIB_MESH_SCANNING, + RTLLIB_MESH_LINKED, +#endif +}; +#else +enum rtllib_state { + RTLLIB_UNINITIALIZED = 0, + RTLLIB_INITIALIZED, + RTLLIB_ASSOCIATING, + RTLLIB_ASSOCIATED, + RTLLIB_AUTHENTICATING, + RTLLIB_AUTHENTICATED, + RTLLIB_SHUTDOWN +}; +#endif + +#define DEFAULT_MAX_SCAN_AGE (15 * HZ) +#define DEFAULT_FTS 2346 + +#define CFG_RTLLIB_RESERVE_FCS (1<<0) +#define CFG_RTLLIB_COMPUTE_FCS (1<<1) +#define CFG_RTLLIB_RTS (1<<2) + +#define RTLLIB_24GHZ_MIN_CHANNEL 1 +#define RTLLIB_24GHZ_MAX_CHANNEL 14 +#define RTLLIB_24GHZ_CHANNELS (RTLLIB_24GHZ_MAX_CHANNEL - \ + RTLLIB_24GHZ_MIN_CHANNEL + 1) + +#define RTLLIB_52GHZ_MIN_CHANNEL 34 +#define RTLLIB_52GHZ_MAX_CHANNEL 165 +#define RTLLIB_52GHZ_CHANNELS (RTLLIB_52GHZ_MAX_CHANNEL - \ + RTLLIB_52GHZ_MIN_CHANNEL + 1) + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)) +extern inline int is_multicast_ether_addr(const u8 *addr) +{ + return ((addr[0] != 0xff) && (0x01 & addr[0])); +} +#endif + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,13)) +extern inline int is_broadcast_ether_addr(const u8 *addr) +{ + return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \ + (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); +} +#endif +#ifndef eqMacAddr +#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) +#endif +typedef struct tx_pending_t{ + int frag; + struct rtllib_txb *txb; +}tx_pending_t; + +typedef struct _bandwidth_autoswitch +{ + long threshold_20Mhzto40Mhz; + long threshold_40Mhzto20Mhz; + bool bforced_tx20Mhz; + bool bautoswitch_enable; +}bandwidth_autoswitch,*pbandwidth_autoswitch; + + + +#define REORDER_WIN_SIZE 128 +#define REORDER_ENTRY_NUM 128 +typedef struct _RX_REORDER_ENTRY +{ + struct list_head List; + u16 SeqNum; + struct rtllib_rxb* prxb; +} RX_REORDER_ENTRY, *PRX_REORDER_ENTRY; +typedef enum _Fsync_State{ + Default_Fsync, + HW_Fsync, + SW_Fsync +}Fsync_State; + +typedef enum _RT_PS_MODE +{ + eActive, + eMaxPs, + eFastPs, + eAutoPs, +}RT_PS_MODE; + +typedef enum _IPS_CALLBACK_FUNCION +{ + IPS_CALLBACK_NONE = 0, + IPS_CALLBACK_MGNT_LINK_REQUEST = 1, + IPS_CALLBACK_JOIN_REQUEST = 2, +}IPS_CALLBACK_FUNCION; + +typedef enum _RT_JOIN_ACTION{ + RT_JOIN_INFRA = 1, + RT_JOIN_IBSS = 2, + RT_START_IBSS = 3, + RT_NO_ACTION = 4, +}RT_JOIN_ACTION; + +typedef struct _IbssParms{ + u16 atimWin; +}IbssParms, *PIbssParms; +#define MAX_NUM_RATES 264 + +typedef enum _RT_RF_POWER_STATE +{ + eRfOn, + eRfSleep, + eRfOff +}RT_RF_POWER_STATE; + +#define MAX_SUPPORT_WOL_PATTERN_NUM 8 + +#define MAX_WOL_BIT_MASK_SIZE 16 +#define MAX_WOL_PATTERN_SIZE 128 + +typedef enum _WOLPATTERN_TYPE +{ + eNetBIOS = 0, + eIPv4IPv6ARP, + eIPv4IPv6TCPSYN, + eMACIDOnly, + eNoDefined, +}WOLPATTERN_TYPE; + +typedef struct _RT_PM_WOL_PATTERN_INFO +{ + u32 PatternId; + u32 Mask[4]; + u16 CrcRemainder; + u8 WFMIndex; + WOLPATTERN_TYPE PatternType; +}RT_PM_WOL_PATTERN_INFO, *PRT_PM_WOL_PATTERN_INFO; + +typedef struct _RT_POWER_SAVE_CONTROL +{ + + bool bInactivePs; + bool bIPSModeBackup; + bool bHaltAdapterClkRQ; + bool bSwRfProcessing; + RT_RF_POWER_STATE eInactivePowerState; + work_struct_rsl InactivePsWorkItem; + struct timer_list InactivePsTimer; + + IPS_CALLBACK_FUNCION ReturnPoint; + + bool bTmpBssDesc; + RT_JOIN_ACTION tmpJoinAction; + struct rtllib_network tmpBssDesc; + + bool bTmpScanOnly; + bool bTmpActiveScan; + bool bTmpFilterHiddenAP; + bool bTmpUpdateParms; + u8 tmpSsidBuf[33]; + OCTET_STRING tmpSsid2Scan; + bool bTmpSsid2Scan; + u8 tmpNetworkType; + u8 tmpChannelNumber; + u16 tmpBcnPeriod; + u8 tmpDtimPeriod; + u16 tmpmCap; + OCTET_STRING tmpSuppRateSet; + u8 tmpSuppRateBuf[MAX_NUM_RATES]; + bool bTmpSuppRate; + IbssParms tmpIbpm; + bool bTmpIbpm; + + bool bLeisurePs; + u32 PowerProfile; + u8 LpsIdleCount; + u8 RegMaxLPSAwakeIntvl; + u8 LPSAwakeIntvl; + + u32 CurPsLevel; + u32 RegRfPsLevel; + + bool bFwCtrlLPS; + u8 FWCtrlPSMode; + + bool LinkReqInIPSRFOffPgs; + bool BufConnectinfoBefore; + + + bool bGpioRfSw; + + u8 oWLANMode; + RT_PM_WOL_PATTERN_INFO PmWoLPatternInfo[MAX_SUPPORT_WOL_PATTERN_NUM]; + +}RT_POWER_SAVE_CONTROL,*PRT_POWER_SAVE_CONTROL; + +typedef u32 RT_RF_CHANGE_SOURCE; +#define RF_CHANGE_BY_SW BIT31 +#define RF_CHANGE_BY_HW BIT30 +#define RF_CHANGE_BY_PS BIT29 +#define RF_CHANGE_BY_IPS BIT28 +#define RF_CHANGE_BY_INIT 0 + +typedef enum +{ + COUNTRY_CODE_FCC = 0, + COUNTRY_CODE_IC = 1, + COUNTRY_CODE_ETSI = 2, + COUNTRY_CODE_SPAIN = 3, + COUNTRY_CODE_FRANCE = 4, + COUNTRY_CODE_MKK = 5, + COUNTRY_CODE_MKK1 = 6, + COUNTRY_CODE_ISRAEL = 7, + COUNTRY_CODE_TELEC = 8, + COUNTRY_CODE_MIC = 9, + COUNTRY_CODE_GLOBAL_DOMAIN = 10, + COUNTRY_CODE_WORLD_WIDE_13 = 11, + COUNTRY_CODE_TELEC_NETGEAR = 12, + COUNTRY_CODE_MAX +}country_code_type_t; + +typedef enum _SCAN_OPERATION_BACKUP_OPT{ + SCAN_OPT_BACKUP=0, + SCAN_OPT_RESTORE, + SCAN_OPT_MAX +}SCAN_OPERATION_BACKUP_OPT; + +typedef enum _FW_CMD_IO_TYPE{ + FW_CMD_DIG_ENABLE = 0, + FW_CMD_DIG_DISABLE = 1, + FW_CMD_DIG_HALT = 2, + FW_CMD_DIG_RESUME = 3, + FW_CMD_HIGH_PWR_ENABLE = 4, + FW_CMD_HIGH_PWR_DISABLE = 5, + FW_CMD_RA_RESET = 6, + FW_CMD_RA_ACTIVE= 7, + FW_CMD_RA_REFRESH_N= 8, + FW_CMD_RA_REFRESH_BG= 9, + FW_CMD_RA_INIT= 10, + FW_CMD_IQK_ENABLE = 11, + FW_CMD_TXPWR_TRACK_ENABLE = 12, + FW_CMD_TXPWR_TRACK_DISABLE = 13, + FW_CMD_TXPWR_TRACK_THERMAL = 14, + FW_CMD_PAUSE_DM_BY_SCAN = 15, + FW_CMD_RESUME_DM_BY_SCAN = 16, + FW_CMD_RA_REFRESH_N_COMB = 17, + FW_CMD_RA_REFRESH_BG_COMB = 18, + FW_CMD_ANTENNA_SW_ENABLE = 19, + FW_CMD_ANTENNA_SW_DISABLE = 20, + FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21, + FW_CMD_LPS_ENTER = 22, + FW_CMD_LPS_LEAVE = 23, + FW_CMD_DIG_MODE_SS = 24, + FW_CMD_DIG_MODE_FA = 25, + FW_CMD_ADD_A2_ENTRY = 26, + FW_CMD_CTRL_DM_BY_DRIVER = 27, + FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28, + FW_CMD_PAPE_CONTROL = 29, + FW_CMD_CHAN_SET = 30, +}FW_CMD_IO_TYPE,*PFW_CMD_IO_TYPE; + +#define RT_MAX_LD_SLOT_NUM 10 +typedef struct _RT_LINK_DETECT_T{ + + u32 NumRecvBcnInPeriod; + u32 NumRecvDataInPeriod; + + u32 RxBcnNum[RT_MAX_LD_SLOT_NUM]; + u32 RxDataNum[RT_MAX_LD_SLOT_NUM]; + u16 SlotNum; + u16 SlotIndex; + + u32 NumTxOkInPeriod; + u32 NumRxOkInPeriod; + u32 NumRxUnicastOkInPeriod; + bool bBusyTraffic; + +#ifdef _RTL8192_EXT_PATCH_ + u8 IdleCount; + u32 LastNumTxUnicast; + u32 LastNumRxUnicast; +#endif +}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T; + +#ifdef _RTL8192_EXT_PATCH_ +struct rtllib_crypt_data_list{ + u8 used; + u8 mac_addr[ETH_ALEN]; + struct rtllib_crypt_data *crypt[WEP_KEYS]; +}__attribute__((packed)); + +typedef struct _SW_RATR_TABLE{ + bool bused; + u32 ratr_value; +}SW_RATR_TABLE, *PSW_RATR_TABLE; +#endif + +typedef struct _SW_CAM_TABLE{ + + u8 macaddr[6]; + bool bused; + u8 key_buf[16]; + u16 key_type; + u8 useDK; + u8 key_index; + +}SW_CAM_TABLE,*PSW_CAM_TABLE; +#define TOTAL_CAM_ENTRY 32 +typedef struct _rate_adaptive +{ + u8 rate_adaptive_disabled; + u8 ratr_state; + u16 reserve; + + u32 high_rssi_thresh_for_ra; + u32 high2low_rssi_thresh_for_ra; + u8 low2high_rssi_thresh_for_ra40M; + u32 low_rssi_thresh_for_ra40M; + u8 low2high_rssi_thresh_for_ra20M; + u32 low_rssi_thresh_for_ra20M; + u32 upper_rssi_threshold_ratr; + u32 middle_rssi_threshold_ratr; + u32 low_rssi_threshold_ratr; + u32 low_rssi_threshold_ratr_40M; + u32 low_rssi_threshold_ratr_20M; + u8 ping_rssi_enable; + u32 ping_rssi_ratr; + u32 ping_rssi_thresh_for_ra; + u32 last_ratr; + u8 PreRATRState; + +} rate_adaptive, *prate_adaptive; +typedef enum _RATR_TABLE_MODE_8192S{ + RATR_INX_WIRELESS_NGB = 0, + RATR_INX_WIRELESS_NG = 1, + RATR_INX_WIRELESS_NB = 2, + RATR_INX_WIRELESS_N = 3, + RATR_INX_WIRELESS_GB = 4, + RATR_INX_WIRELESS_G = 5, + RATR_INX_WIRELESS_B = 6, + RATR_INX_WIRELESS_MC = 7, + RATR_INX_WIRELESS_A = 8, +}RATR_TABLE_MODE_8192S, *PRATR_TABLE_MODE_8192S; + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) || defined RTL8192CE +#define PEER_MAX_ASSOC 10 +typedef struct _RSSI_STA{ + long UndecoratedSmoothedPWDB; +}RSSI_STA, *PRSSI_STA; + +struct sta_info { + u8 macaddr[ETH_ALEN]; + u16 aid; + u8 authentication; + u8 encryption; + u16 capability; + u8 ratr_index; + int wireless_mode; + RT_HTINFO_STA_ENTRY htinfo; + u8 wme_enable; + u32 CurDataRate; + RSSI_STA rssi_stat; + rate_adaptive rate_adaptive; + u8 bPowerSave; + struct sk_buff_head PsQueue; + u32 LastActiveTime; + u16 StaDataRate; + u32 StaSS; + u16 RetryFrameCnt; + u16 LastRetryCnt; + u16 NoRetryFrameCnt; + u16 LastNoRetryCnt; + int AvgRetryRate; + int LastRetryRate; + u8 txRateIndex; + u16 APDataRate; + u16 ForcedDataRate; +} __attribute__ ((packed)); +#endif +#ifdef _RTL8192_EXT_PATCH_ +typedef struct _RT_PEERMP_HTINFO{ + u8 bEnableHT; + u8 bCurrentHTSupport; + + u8 bRegBW40MHz; + u8 bCurBW40MHz; + + u8 bRegShortGI40MHz; + u8 bCurShortGI40MHz; + + u8 bRegShortGI20MHz; + u8 bCurShortGI20MHz; + + u8 bCurSuppCCK; + + + + + u8 PeerHTCapBuf[32]; + u8 PeerHTInfoBuf[32]; + + + u8 bAMSDU_Support; + u16 nAMSDU_MaxSize; + u8 bCurrent_Mesh_AMSDU_Support; + + + u8 bAMPDUEnable; + u8 bCurrentMeshAMPDUEnable; + u8 AMPDU_Factor; + u8 CurrentAMPDUFactor; + u8 MPDU_Density; + u8 CurrentMPDUDensity; + + u8 ForcedAMPDUFactor; + u8 ForcedMPDUDensity; + + HT_AGGRE_MODE_E ForcedAMSDUMode; + u16 ForcedAMSDUMaxSize; + + u8 bForcedShortGI; + + u8 CurrentOpMode; + + u8 MimoPs; + + HT_EXTCHNL_OFFSET CurSTAExtChnlOffset; + u8 bCurTxBW40MHz; + u8 PeerBandwidth; + + u8 bSwBwInProgress; + CHNLOP ChnlOp; + u8 SwBwStep; + + u8 bRegRT2RTAggregation; + u8 bCurrentRT2RTAggregation; + u8 bCurrentRT2RTLongSlotTime; + u8 szRT2RTAggBuffer[10]; + + u8 bRegRxReorderEnable; + u8 bCurRxReorderEnable; + u8 RxReorderWinSize; + u8 RxReorderPendingTime; + u16 RxReorderDropCounter; + +#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE + u8 UsbTxAggrNum; +#endif +#ifdef USB_RX_AGGREGATION_SUPPORT + u8 UsbRxFwAggrEn; + u8 UsbRxFwAggrPageNum; + u8 UsbRxFwAggrPacketNum; + u8 UsbRxFwAggrTimeout; +#endif + + u8 bIsPeerBcm; + + u8 McsRateSet[16]; + u8 HTHighestOperaRate; + u8 IOTPeer; + u32 IOTAction; +} __attribute__ ((packed)) peerMP_htinfo, *ppeerMP_htinfo; +#endif + +#define NUM_PMKID_CACHE 16 +typedef struct _RT_PMKID_LIST +{ + u8 bUsed; + u8 Bssid[6]; + u8 PMKID[16]; + u8 SsidBuf[33]; + u8* ssid_octet; + u16 ssid_length; +} RT_PMKID_LIST, *PRT_PMKID_LIST; + +#ifdef CONFIG_CFG_80211 +enum { + LIBIPW_CH_PASSIVE_ONLY = (1 << 0), + LIBIPW_CH_80211H_RULES = (1 << 1), + LIBIPW_CH_B_ONLY = (1 << 2), + LIBIPW_CH_NO_IBSS = (1 << 3), + LIBIPW_CH_UNIFORM_SPREADING = (1 << 4), + LIBIPW_CH_RADAR_DETECT = (1 << 5), + LIBIPW_CH_INVALID = (1 << 6), +}; +struct rtllib_channel { + u32 freq; + u8 channel; + u8 flags; + u8 max_power; +}; + +#define RTLLIB_24GHZ_MIN_CHANNEL 1 +#define RTLLIB_24GHZ_MAX_CHANNEL 14 +#define RTLLIB_24GHZ_CHANNELS (RTLLIB_24GHZ_MAX_CHANNEL - \ + RTLLIB_24GHZ_MIN_CHANNEL + 1) + +struct reg_dmn_pair_mapping { + u16 regDmnEnum; + u16 reg_5ghz_ctl; + u16 reg_2ghz_ctl; +}; + +struct rtl_regulatory { + char alpha2[2]; + u16 country_code; + u16 max_power_level; + u32 tp_scale; + u16 current_rd; + u16 current_rd_ext; + int16_t power_limit; + struct reg_dmn_pair_mapping *regpair; +}; + +struct ieee80211_bss { + /* Yes, this is a hack */ + struct cfg80211_bss cbss; + + /* don't want to look up all the time */ + size_t ssid_len; + u8 ssid[IEEE80211_MAX_SSID_LEN]; + + u8 dtim_period; + + bool wmm_used; + + unsigned long last_probe_resp; + +#ifdef CONFIG_MAC80211_MESH + u8 *mesh_id; + size_t mesh_id_len; + u8 *mesh_cfg; +#endif + + #define IEEE80211_MAX_SUPP_RATES 32 + u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; + size_t supp_rates_len; + + /* + * During assocation, we save an ERP value from a probe response so + * that we can feed ERP info to the driver when handling the + * association completes. these fields probably won't be up-to-date + * otherwise, you probably don't want to use them. + */ + bool has_erp_value; + u8 erp_value; +}; + +/* Parsed Information Elements */ +struct ieee802_11_elems { + u8 *ie_start; + size_t total_len; + + /* pointers to IEs */ + u8 *ssid; + u8 *supp_rates; + u8 *fh_params; + u8 *ds_params; + u8 *cf_params; + struct ieee80211_tim_ie *tim; + u8 *ibss_params; + u8 *challenge; + u8 *wpa; + u8 *rsn; + u8 *erp_info; + u8 *ext_supp_rates; + u8 *wmm_info; + u8 *wmm_param; + struct ieee80211_ht_cap *ht_cap_elem; + struct ieee80211_ht_info *ht_info_elem; + u8 *mesh_config; + u8 *mesh_id; + u8 *peer_link; + u8 *preq; + u8 *prep; + u8 *perr; + u8 *ch_switch_elem; + u8 *country_elem; + u8 *pwr_constr_elem; + u8 *quiet_elem; /* first quite element */ + u8 *timeout_int; + + /* length of them, respectively */ + u8 ssid_len; + u8 supp_rates_len; + u8 fh_params_len; + u8 ds_params_len; + u8 cf_params_len; + u8 tim_len; + u8 ibss_params_len; + u8 challenge_len; + u8 wpa_len; + u8 rsn_len; + u8 erp_info_len; + u8 ext_supp_rates_len; + u8 wmm_info_len; + u8 wmm_param_len; + u8 mesh_config_len; + u8 mesh_id_len; + u8 peer_link_len; + u8 preq_len; + u8 prep_len; + u8 perr_len; + u8 ch_switch_elem_len; + u8 country_elem_len; + u8 pwr_constr_elem_len; + u8 quiet_elem_len; + u8 num_of_quiet_elem; /* can be more the one */ + u8 timeout_int_len; +}; + +#endif + + +typedef struct _RT_INTEL_PROMISCUOUS_MODE_INFO { + bool bPromiscuousOn; + bool bFilterSourceStationFrame; +} RT_INTEL_PROMISCUOUS_MODE_INFO, *PRT_INTEL_PROMISCUOUS_MODE_INFO; + + +/*************** DRIVER STATUS *****/ +#define STATUS_SCANNING 0 +#define STATUS_SCAN_HW 1 +#define STATUS_SCAN_ABORTING 2 +#define STATUS_SETTING_CHAN 3 +/*************** DRIVER STATUS *****/ + +enum { + NO_USE = 0, + USED = 1, + HW_SEC = 2, + SW_SEC = 3, +}; + +struct rtllib_device { + struct pci_dev *pdev; + struct net_device *dev; + struct rtllib_security sec; + + bool disable_mgnt_queue; + + unsigned long status; + short hwscan_ch_bk; + HT_EXTCHNL_OFFSET chan_offset_bk; + HT_CHANNEL_WIDTH bandwidth_bk; + u8 hwscan_sem_up; +#ifdef CONFIG_CFG_80211 + struct wireless_dev wdev; + struct rtl_regulatory regulatory; +#endif + u8 CntAfterLink; + + u8 VersionID; + /* The last AssocReq/Resp IEs */ + u8 *assocreq_ies, *assocresp_ies; + size_t assocreq_ies_len, assocresp_ies_len; + + bool b_customer_lenovo_id; + bool bForcedShowRxRate; + bool bForcedShowRateStill; + u8 SystemQueryDataRateCount; + bool bForcedBgMode; + bool bUseRAMask; + bool b1x1RecvCombine; + u8 RF_Type; + bool b1SSSupport; + + u8 hwsec_active; + bool is_silent_reset; + bool force_mic_error; + bool is_roaming; + bool ieee_up; + bool cannot_notify; + bool bSupportRemoteWakeUp; + RT_PS_MODE dot11PowerSaveMode; + bool actscanning; + bool FirstIe_InScan; + bool be_scan_inprogress; + bool beinretry; + RT_RF_POWER_STATE eRFPowerState; + RT_RF_CHANGE_SOURCE RfOffReason; + bool is_set_key; + bool wx_set_enc; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) || defined RTL8192CE + struct sta_info *peer_assoc_list[PEER_MAX_ASSOC]; + u8 AvailableAIDTable[PEER_MAX_ASSOC]; + atomic_t AsocEntryNum; + u64 CurrTsf; + u64 TargetTsf; + bool Peer_bCurBW40M; +#endif + PRT_HIGH_THROUGHPUT pHTInfo; + spinlock_t bw_spinlock; + + spinlock_t reorder_spinlock; + u8 Regdot11HTOperationalRateSet[16]; + u8 Regdot11TxHTOperationalRateSet[16]; + u8 dot11HTOperationalRateSet[16]; + u8 RegHTSuppRateSet[16]; + u8 HTCurrentOperaRate; + u8 HTHighestOperaRate; + u8 MinSpaceCfg; + u8 MaxMssDensity; + u8 bTxDisableRateFallBack; + u8 bTxUseDriverAssingedRate; + u8 bTxEnableFwCalcDur; + atomic_t atm_chnlop; + atomic_t atm_swbw; + + struct list_head Tx_TS_Admit_List; + struct list_head Tx_TS_Pending_List; + struct list_head Tx_TS_Unused_List; + TX_TS_RECORD TxTsRecord[TOTAL_TS_NUM]; + struct list_head Rx_TS_Admit_List; + struct list_head Rx_TS_Pending_List; + struct list_head Rx_TS_Unused_List; + RX_TS_RECORD RxTsRecord[TOTAL_TS_NUM]; + RX_REORDER_ENTRY RxReorderEntry[128]; + struct list_head RxReorder_Unused_List; + u8 ForcedPriority; + + + /* Bookkeeping structures */ + struct net_device_stats stats; + struct rtllib_stats ieee_stats; + struct rtllib_softmac_stats softmac_stats; + + /* Probe / Beacon management */ + struct list_head network_free_list; + struct list_head network_list; +#ifdef RTL8192U + struct list_head network_bssid_free_list; + struct list_head network_bssid_list; +#endif + struct rtllib_network *networks; + int scans; + int scan_age; + + int iw_mode; /* operating mode (IW_MODE_*) */ + bool bNetPromiscuousMode; + RT_INTEL_PROMISCUOUS_MODE_INFO IntelPromiscuousModeInfo; + + struct iw_spy_data spy_data; + + spinlock_t lock; + spinlock_t wpax_suitlist_lock; + + int tx_headroom; /* Set to size of any additional room needed at front + * of allocated Tx SKBs */ + u32 config; + + /* WEP and other encryption related settings at the device level */ + int open_wep; /* Set to 1 to allow unencrypted frames */ + int auth_mode; + int reset_on_keychange; /* Set to 1 if the HW needs to be reset on + * WEP key changes */ + + /* If the host performs {en,de}cryption, then set to 1 */ + int host_encrypt; + int host_encrypt_msdu; + int host_decrypt; + /* host performs multicast decryption */ + int host_mc_decrypt; + + /* host should strip IV and ICV from protected frames */ + /* meaningful only when hardware decryption is being used */ + int host_strip_iv_icv; + + int host_open_frag; + int host_build_iv; + int ieee802_1x; /* is IEEE 802.1X used */ + + /* WPA data */ + bool bHalfNMode; + bool bHalfWirelessN24GMode; + int wpa_enabled; + int drop_unencrypted; + int tkip_countermeasures; + int privacy_invoked; + size_t wpa_ie_len; + u8 *wpa_ie; + size_t wps_ie_len; + u8 *wps_ie; + u8 ap_mac_addr[6]; + u16 pairwise_key_type; + u16 group_key_type; + struct list_head crypt_deinit_list; +#ifdef _RTL8192_EXT_PATCH_ + struct rtllib_crypt_data_list* cryptlist[MAX_MP]; + struct rtllib_crypt_data *sta_crypt[WEP_KEYS]; +#else + struct rtllib_crypt_data *crypt[WEP_KEYS]; +#endif + + int tx_keyidx; /* default TX key index (crypt[tx_keyidx]) */ + SW_CAM_TABLE swcamtable[TOTAL_CAM_ENTRY]; + struct timer_list crypt_deinit_timer; + int crypt_quiesced; + + int bcrx_sta_key; /* use individual keys to override default keys even + * with RX of broad/multicast frames */ + + RT_PMKID_LIST PMKIDList[NUM_PMKID_CACHE]; + + /* Fragmentation structures */ + struct rtllib_frag_entry frag_cache[17][RTLLIB_FRAG_CACHE_LEN]; + unsigned int frag_next_idx[17]; + u16 fts; /* Fragmentation Threshold */ +#define DEFAULT_RTS_THRESHOLD 2346U +#define MIN_RTS_THRESHOLD 1 +#define MAX_RTS_THRESHOLD 2346U + u16 rts; /* RTS threshold */ + + /* Association info */ + u8 bssid[ETH_ALEN]; + + /* This stores infos for the current network. + * Either the network we are associated in INFRASTRUCTURE + * or the network that we are creating in MASTER mode. + * ad-hoc is a mixture ;-). + * Note that in infrastructure mode, even when not associated, + * fields bssid and essid may be valid (if wpa_set and essid_set + * are true) as thy carry the value set by the user via iwconfig + */ + struct rtllib_network current_network; + + enum rtllib_state state; + + int short_slot; + int reg_mode; + int mode; /* A, B, G */ + int modulation; /* CCK, OFDM */ + int freq_band; /* 2.4Ghz, 5.2Ghz, Mixed */ + int abg_true; /* ABG flag */ + + /* used for forcing the ibss workqueue to terminate + * without wait for the syncro scan to terminate + */ + short sync_scan_hurryup; + u16 scan_watch_dog; + int perfect_rssi; + int worst_rssi; + + u16 prev_seq_ctl; /* used to drop duplicate frames */ + + /* map of allowed channels. 0 is dummy */ +#ifdef ENABLE_DOT11D + void* pDot11dInfo; + bool bGlobalDomain; +#else + u8 channel_map[MAX_CHANNEL_NUMBER+1]; +#endif + u8 active_channel_map[MAX_CHANNEL_NUMBER+1]; + + u8 IbssStartChnl; + u8 ibss_maxjoin_chal; + +#ifdef _RTL8192_EXT_PATCH_ + u8 backup_channel; + bool bUseProtection; +#endif + int rate; /* current rate */ + int basic_rate; + u32 currentRate; + + short active_scan; + + /* this contains flags for selectively enable softmac support */ + u16 softmac_features; + + /* if the sequence control field is not filled by HW */ + u16 seq_ctrl[5]; + + /* association procedure transaction sequence number */ + u16 associate_seq; + + /* AID for RTXed association responses */ + u16 assoc_id; + + /* power save mode related*/ + u8 ack_tx_to_ieee; + short ps; + short sta_sleep; + int ps_timeout; + int ps_period; + struct tasklet_struct ps_task; + u32 ps_th; + u32 ps_tl; + bool polling; + + short raw_tx; + /* used if IEEE_SOFTMAC_TX_QUEUE is set */ + short queue_stop; + short scanning_continue ; + short proto_started; + short proto_stoppping; + + struct semaphore wx_sem; + struct semaphore scan_sem; + struct semaphore ips_sem; + + spinlock_t mgmt_tx_lock; + spinlock_t beacon_lock; + + short beacon_txing; + + short wap_set; + short ssid_set; + + /* set on initialization */ + unsigned int wmm_acm; + + /* for discarding duplicated packets in IBSS */ + struct list_head ibss_mac_hash[IEEE_IBSS_MAC_HASH_SIZE]; + + /* for discarding duplicated packets in BSS */ + u16 last_rxseq_num[17]; /* rx seq previous per-tid */ + u16 last_rxfrag_num[17];/* tx frag previous per-tid */ + unsigned long last_packet_time[17]; + + /* for PS mode */ + unsigned long last_rx_ps_time; + bool bAwakePktSent; + u8 LPSDelayCnt; + + /* used if IEEE_SOFTMAC_SINGLE_QUEUE is set */ + struct sk_buff *mgmt_queue_ring[MGMT_QUEUE_NUM]; + int mgmt_queue_head; + int mgmt_queue_tail; +#define RTLLIB_QUEUE_LIMIT 128 + u8 AsocRetryCount; + unsigned int hw_header; + struct sk_buff_head skb_waitQ[MAX_QUEUE_SIZE]; + struct sk_buff_head skb_aggQ[MAX_QUEUE_SIZE]; + struct sk_buff_head skb_drv_aggQ[MAX_QUEUE_SIZE]; + u32 sta_edca_param[4]; + bool aggregation; + bool enable_rx_imm_BA; + bool bibsscoordinator; + + bool bdynamic_txpower_enable; + + bool bCTSToSelfEnable; + u8 CTSToSelfTH; + + u32 fsync_time_interval; + u32 fsync_rate_bitmap; + u8 fsync_rssi_threshold; + bool bfsync_enable; + + u8 fsync_multiple_timeinterval; + u32 fsync_firstdiff_ratethreshold; + u32 fsync_seconddiff_ratethreshold; + Fsync_State fsync_state; + bool bis_any_nonbepkts; + bandwidth_autoswitch bandwidth_auto_switch; + bool FwRWRF; + + RT_LINK_DETECT_T LinkDetectInfo; + bool bIsAggregateFrame; + RT_POWER_SAVE_CONTROL PowerSaveControl; + u8 amsdu_in_process; + + /* used if IEEE_SOFTMAC_TX_QUEUE is set */ + struct tx_pending_t tx_pending; + + /* used if IEEE_SOFTMAC_ASSOCIATE is set */ + struct timer_list associate_timer; + + /* used if IEEE_SOFTMAC_BEACONS is set */ + struct timer_list beacon_timer; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + struct timer_list ibss_wait_timer; +#endif + u8 need_sw_enc; +#ifdef _RTL8192_EXT_PATCH_ + struct net_device *meshdev; + struct net_device_stats *meshstats; + u8 only_mesh; + u8 hostname[MAX_HOST_NAME_LENGTH]; + u8 hostname_len; + struct list_head mesh_network_free_list; + struct list_head mesh_network_list; + struct rtllib_network *mesh_networks; + struct rtllib_network current_mesh_network; + enum rtllib_state mesh_state; + short mesh_started; + int mesh_security_setting; + int mesh_sec_type; + struct list_head mesh_mac_hash[IEEE_MESH_MAC_HASH_SIZE]; + u64 LinkingPeerBitMap; + u8 LinkingPeerAddr[MAX_MP-1][ETH_ALEN]; + u8 LinkingPeerSecState[MAX_MP-1]; + u8 mesh_cached_PTK[MAX_MP-1][16]; + u32 peer_AID_bitmap; + u8 peer_AID_Addr[30][ETH_ALEN]; + int mesh_txkeyidx; + u16 mesh_pairwise_key_type; + u16 mesh_group_key_type; + u32 HwSecCamBitMap; + u8 HwSecCamStaAddr[TOTAL_CAM_ENTRY][ETH_ALEN]; + SW_CAM_TABLE swmeshcamtable[TOTAL_CAM_ENTRY]; + SW_RATR_TABLE swmeshratrtable[8]; + short meshid_set; + u8 p2pmode; + u8 serverExtChlOffset; + u8 APExtChlOffset; + short meshScanMode; + struct sk_buff_head skb_meshaggQ[MAX_QUEUE_SIZE]; + u8 mesh_amsdu_in_process; +#endif + work_struct_rsl associate_complete_wq; +#ifdef ENABLE_IPS + work_struct_rsl ips_leave_wq; +#endif +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + delayed_work_struct_rsl check_tsf_wq; + delayed_work_struct_rsl update_assoc_sta_info_wq; +#endif + delayed_work_struct_rsl associate_procedure_wq; + delayed_work_struct_rsl softmac_scan_wq; + delayed_work_struct_rsl softmac_hint11d_wq; + delayed_work_struct_rsl associate_retry_wq; + delayed_work_struct_rsl start_ibss_wq; +#ifndef RTL8190P + delayed_work_struct_rsl hw_wakeup_wq; + delayed_work_struct_rsl hw_sleep_wq; +#endif + delayed_work_struct_rsl link_change_wq; + work_struct_rsl wx_sync_scan_wq; +#ifdef _RTL8192_EXT_PATCH_ + work_struct_rsl ext_stop_scan_wq; + work_struct_rsl ext_send_beacon_wq; + work_struct_rsl ext_create_crypt_for_peers_wq; + work_struct_rsl ext_path_sel_ops_wq; + work_struct_rsl ext_update_extchnloffset_wq; + delayed_work_struct_rsl ext_wx_set_key_wq; + work_struct_rsl ext_start_mesh_protocol_wq; +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + struct workqueue_struct *wq; +#else + u32 *wq; +#endif +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,40) + /* used for periodly scan */ + struct timer_list scan_timer; +#endif +#if defined (RTL8192S_WAPI_SUPPORT) + u8 WapiSupport; + RT_WAPI_T wapiInfo; + struct list_head cache_frag_list; + spinlock_t wapi_queue_lock; + WAPI_QUEUE *wapi_queue; +#endif + +#ifdef _RTL8192_EXT_PATCH_ + int (*set_mesh_key)(struct net_device *dev, + struct iw_point *encoding, struct iw_encode_ext *ext, u8 *addr); +#endif + /* Callback functions */ + void (*set_security)(struct net_device *dev, + struct rtllib_security *sec); + + /* Used to TX data frame by using txb structs. + * this is not used if in the softmac_features + * is set the flag IEEE_SOFTMAC_TX_QUEUE + */ + int (*hard_start_xmit)(struct rtllib_txb *txb, + struct net_device *dev); + + int (*reset_port)(struct net_device *dev); + int (*is_queue_full) (struct net_device * dev, int pri); + + int (*handle_management) (struct net_device * dev, + struct rtllib_network * network, u16 type); + int (*is_qos_active) (struct net_device *dev, struct sk_buff *skb); + + /* Softmac-generated frames (mamagement) are TXed via this + * callback if the flag IEEE_SOFTMAC_SINGLE_QUEUE is + * not set. As some cards may have different HW queues that + * one might want to use for data and management frames + * the option to have two callbacks might be useful. + * This fucntion can't sleep. + */ + int (*softmac_hard_start_xmit)(struct sk_buff *skb, + struct net_device *dev); + + /* used instead of hard_start_xmit (not softmac_hard_start_xmit) + * if the IEEE_SOFTMAC_TX_QUEUE feature is used to TX data + * frames. I the option IEEE_SOFTMAC_SINGLE_QUEUE is also set + * then also management frames are sent via this callback. + * This function can't sleep. + */ + void (*softmac_data_hard_start_xmit)(struct sk_buff *skb, + struct net_device *dev,int rate); + + /* stops the HW queue for DATA frames. Useful to avoid + * waste time to TX data frame when we are reassociating + * This function can sleep. + */ + void (*data_hard_stop)(struct net_device *dev); + + /* OK this is complementar to data_poll_hard_stop */ + void (*data_hard_resume)(struct net_device *dev); + + /* ask to the driver to retune the radio . + * This function can sleep. the driver should ensure + * the radio has been swithced before return. + */ + void (*set_chan)(struct net_device *dev,short ch); + + /* These are not used if the ieee stack takes care of + * scanning (IEEE_SOFTMAC_SCAN feature set). + * In this case only the set_chan is used. + * + * The syncro version is similar to the start_scan but + * does not return until all channels has been scanned. + * this is called in user context and should sleep, + * it is called in a work_queue when swithcing to ad-hoc mode + * or in behalf of iwlist scan when the card is associated + * and root user ask for a scan. + * the fucntion stop_scan should stop both the syncro and + * background scanning and can sleep. + * The fucntion start_scan should initiate the background + * scanning and can't sleep. + */ + void (*scan_syncro)(struct net_device *dev); + void (*start_scan)(struct net_device *dev); + void (*stop_scan)(struct net_device *dev); + + void (*rtllib_start_hw_scan)(struct net_device *dev); + void (*rtllib_stop_hw_scan)(struct net_device *dev); + + /* indicate the driver that the link state is changed + * for example it may indicate the card is associated now. + * Driver might be interested in this to apply RX filter + * rules or simply light the LINK led + */ + void (*link_change)(struct net_device *dev); + + /* these two function indicates to the HW when to start + * and stop to send beacons. This is used when the + * IEEE_SOFTMAC_BEACONS is not set. For now the + * stop_send_bacons is NOT guaranteed to be called only + * after start_send_beacons. + */ + void (*start_send_beacons) (struct net_device *dev); + void (*stop_send_beacons) (struct net_device *dev); + + /* power save mode related */ + void (*sta_wake_up) (struct net_device *dev); + void (*enter_sleep_state) (struct net_device *dev, u32 th, u32 tl); + short (*ps_is_queue_empty) (struct net_device *dev); +#if 0 + /* Typical STA methods */ + int (*handle_auth) (struct net_device * dev, + struct rtllib_auth * auth); + int (*handle_deauth) (struct net_device * dev, + struct rtllib_deauth * auth); + int (*handle_action) (struct net_device * dev, + struct rtllib_action * action, + struct rtllib_rx_stats * stats); + int (*handle_disassoc) (struct net_device * dev, + struct rtllib_disassoc * assoc); +#endif + int (*handle_beacon) (struct net_device * dev, struct rtllib_beacon * beacon, struct rtllib_network * network); +#if 0 + int (*handle_probe_response) (struct net_device * dev, + struct rtllib_probe_response * resp, + struct rtllib_network * network); + int (*handle_probe_request) (struct net_device * dev, + struct rtllib_probe_request * req, + struct rtllib_rx_stats * stats); +#endif + int (*handle_assoc_response) (struct net_device * dev, struct rtllib_assoc_response_frame * resp, struct rtllib_network * network); + +#if 0 + /* Typical AP methods */ + int (*handle_assoc_request) (struct net_device * dev); + int (*handle_reassoc_request) (struct net_device * dev, + struct rtllib_reassoc_request * req); +#endif + + /* check whether Tx hw resouce available */ + short (*check_nic_enough_desc)(struct net_device *dev, int queue_index); + short (*get_nic_desc_num)(struct net_device *dev, int queue_index); + void (*SetBWModeHandler)(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset); + bool (*GetNmodeSupportBySecCfg)(struct net_device* dev); + void (*SetWirelessMode)(struct net_device* dev, u8 wireless_mode); + bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device* dev); + u8 (*rtllib_ap_sec_type)(struct rtllib_device *ieee); + void (*HalUsbRxAggrHandler)(struct net_device *dev, bool Value); + void (*InitialGainHandler)(struct net_device *dev, u8 Operation); +#ifdef _RTL8192_EXT_PATCH_ + int (*set_key_for_AP)(struct rtllib_device *ieee); + void (*del_hwsec_cam_entry)(struct rtllib_device *ieee, u8 *addr); + int (*set_key_for_peer) (struct net_device *dev,u8 *Addr,u8 KeyIndex,u16 KeyType,u32 *KeyContent ); + int (*ext_patch_rtllib_start_protocol) (struct rtllib_device *ieee); + + short (*ext_patch_rtllib_probe_req_1) (struct rtllib_device *ieee); + u8* (*ext_patch_rtllib_probe_req_2) (struct rtllib_device *ieee, struct sk_buff *skb, u8 *tag); + + void (*ext_patch_rtllib_stop_protocol) (struct rtllib_device *ieee,bool is_silent_reset); + + int (*ext_patch_rtllib_rx_frame_softmac_on_peerlink_open) (struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_rx_frame_softmac_on_peerlink_confirm) (struct rtllib_device *ieee, struct sk_buff *skb); + int (*ext_patch_rtllib_rx_frame_softmac_on_peerlink_close) (struct rtllib_device *ieee, struct sk_buff *skb); + void (*ext_patch_rtllib_close_all_peerlink) (struct rtllib_device *ieee, __le16 reason); + + int (*ext_patch_rtllib_rx_frame_softmac_on_linkmetric_report) (struct rtllib_device *ieee, struct sk_buff *skb); + int (*ext_patch_rtllib_rx_frame_softmac_on_linkmetric_req) (struct rtllib_device *ieee, struct sk_buff *skb); + + int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_preq) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_prep) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_perr) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_rann) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_rx_frame_softmac_on_pathselect_pann) (struct rtllib_device *ieee, struct sk_buff *skb,struct rtllib_rx_stats *rx_stats); + + int (*ext_patch_rtllib_ext_stop_scan_wq_set_channel) (struct rtllib_device *ieee); + int (*ext_patch_r819x_wx_set_mesh_chan)(struct net_device *dev, unsigned char channel); + void (*ext_patch_r819x_wx_set_channel) (struct rtllib_device *ieee, int ch); + + int (*ext_patch_rtllib_softmac_xmit_get_rate) (struct rtllib_device *ieee, struct sk_buff *skb); + int (*ext_patch_rtllib_rx_frame_softmac_on_auth)(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_rx_frame_softmac_on_deauth)(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats); + int (*ext_patch_rtllib_tx_data)(struct rtllib_device *ieee, struct rtllib_hdr_4addrqos* header, u8* is_peer_n_mode, u8* is_peer_40M, + u8* is_peer_shortGI_40M, u8* is_peer_shortGI_20M,u8* peer_highest_opra_rate,u8* peer_ratr_index, u8* AID); + bool (*ext_patch_rtllib_is_mesh)(struct rtllib_device * ieee,u8 * addr); + ppeerMP_htinfo (*ext_patch_rtllib_get_peermp_htinfo) (struct rtllib_device *ieee,u8 * daddr); + int (* ext_patch_rtllib_create_crypt_for_peer)(struct rtllib_device * ieee); + void (*ext_patch_rtllib_start_mesh)(struct rtllib_device *ieee); + void (*ext_patch_rtllib_rx_mgt_on_probe_req) ( struct rtllib_device *ieee, struct rtllib_probe_request *beacon, struct rtllib_rx_stats *stats); + unsigned int(*ext_patch_rtllib_process_probe_response_1)(struct rtllib_device *ieee, struct rtllib_probe_response *beacon, struct rtllib_rx_stats *stats); + + void (*ext_patch_rtllib_rx_mgt_update_expire) ( struct rtllib_device *ieee, struct sk_buff *skb); + struct sk_buff* (*ext_patch_get_beacon_get_probersp)(struct rtllib_device *ieee, u8 *dest, struct rtllib_network *net); + + int (*ext_patch_rtllib_rx_on_rx) (struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats, u16 type, u16 stype); + + int (*ext_patch_rtllib_rx_frame_get_hdrlen) (struct rtllib_device *ieee, struct sk_buff *skb); + + int (*ext_patch_rtllib_rx_frame_get_mac_hdrlen) (struct rtllib_device *ieee, struct sk_buff *skb); + + int (*ext_patch_rtllib_rx_frame_get_mesh_hdrlen_llc) (struct rtllib_device *ieee, struct sk_buff *skb); + int (*ext_patch_rtllib_rx_is_valid_framectl) (struct rtllib_device *ieee, u16 fc, u16 type, u16 stype); + + + /* added by david for setting acl dynamically */ + u8 (*ext_patch_rtllib_acl_query) (struct rtllib_device *ieee, u8 *sa); + + + struct sk_buff* (*ext_patch_rtllib_send_ath_commit) (struct rtllib_device * ieee,u8 * addr); + struct sk_buff* (*ext_patch_rtllib_send_ath_confirm) (struct rtllib_device * ieee,u8 * addr); + int (*ext_patch_rtllib_rx_ath_commit) (struct rtllib_device * ieee,u8 * addr); + u8 (*ext_patch_rtllib_rx_ath_confirm) (struct rtllib_device *ieee, u8* pframe,u16 strlen,u8 *addr); + +#endif + bool (*SetFwCmdHandler)(struct net_device *dev, FW_CMD_IO_TYPE FwCmdIO); + void (*UpdateHalRAMaskHandler)(struct net_device* dev, bool bMulticast, u8 macId, u8 MimoPs, u8 WirelessMode, u8 bCurTxBW40MHz, u8 rssi_level); + void (*UpdateBeaconInterruptHandler)(struct net_device* dev, bool start); + u16 (*rtl_11n_user_show_rates)(struct net_device *dev); + void (*ScanOperationBackupHandler)(struct net_device *dev, u8 Operation); + void (*LedControlHandler)(struct net_device * dev, LED_CTL_MODE LedAction); + void (*SetHwRegHandler)(struct net_device *dev,u8 variable,u8* val); + void (*GetHwRegHandler)(struct net_device *dev,u8 variable,u8* val); + + void (*AllowAllDestAddrHandler)(struct net_device *dev, bool bAllowAllDA, bool WriteIntoReg); + +#ifdef ENABLE_IPS + void (*rtllib_ips_leave_wq) (struct net_device *dev); + void (*rtllib_ips_leave)(struct net_device *dev); +#endif +#ifdef ENABLE_LPS + void (*LeisurePSLeave)(struct net_device *dev); +#endif +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + void (*SetBeaconRelatedRegistersHandler)(struct net_device* dev); + bool (*check_ht_cap)(struct net_device* dev, struct sta_info *sta, struct rtllib_network* net); + void (*Adhoc_InitRateAdaptive)(struct net_device *dev,struct sta_info *pEntry); +#endif + void (*rtllib_rfkill_poll)(struct net_device *dev); + + /* This must be the last item so that it points to the data + * allocated beyond this structure by alloc_rtllib */ + u8 priv[0]; +}; + +#define IEEE_A (1<<0) +#define IEEE_B (1<<1) +#define IEEE_G (1<<2) +#define IEEE_N_24G (1<<4) +#define IEEE_N_5G (1<<5) +#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G) + +/* Generate a 802.11 header */ + +/* Uses the channel change callback directly + * instead of [start/stop] scan callbacks + */ +#define IEEE_SOFTMAC_SCAN (1<<2) + +/* Perform authentication and association handshake */ +#define IEEE_SOFTMAC_ASSOCIATE (1<<3) + +/* Generate probe requests */ +#define IEEE_SOFTMAC_PROBERQ (1<<4) + +/* Generate respones to probe requests */ +#define IEEE_SOFTMAC_PROBERS (1<<5) + +/* The ieee802.11 stack will manages the netif queue + * wake/stop for the driver, taking care of 802.11 + * fragmentation. See softmac.c for details. */ +#define IEEE_SOFTMAC_TX_QUEUE (1<<7) + +/* Uses only the softmac_data_hard_start_xmit + * even for TX management frames. + */ +#define IEEE_SOFTMAC_SINGLE_QUEUE (1<<8) + +/* Generate beacons. The stack will enqueue beacons + * to the card + */ +#define IEEE_SOFTMAC_BEACONS (1<<6) + +#ifdef _RTL8192_EXT_PATCH_ +static inline int rtllib_find_MP(struct rtllib_device* ieee, const u8* addr, u8 set) +{ + int i=0; + for (i=1; icryptlist[i]->used == 0) && set) { + memcpy(ieee->cryptlist[i]->mac_addr, addr, ETH_ALEN); + ieee->cryptlist[i]->used = 1; + return i; + } else if (0 == memcmp(ieee->cryptlist[i]->mac_addr, addr, ETH_ALEN)) { + return i; + } + } + return -1; +} +#endif + +static inline void *rtllib_priv(struct net_device *dev) +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + return ((struct rtllib_device *)netdev_priv(dev))->priv; +#else + return ((struct rtllib_device *)dev->priv)->priv; +#endif +} + +extern inline int rtllib_is_empty_essid(const char *essid, int essid_len) +{ + /* Single white space is for Linksys APs */ + if (essid_len == 1 && essid[0] == ' ') + return 1; + + /* Otherwise, if the entire essid is 0, we assume it is hidden */ + while (essid_len) { + essid_len--; + if (essid[essid_len] != '\0') + return 0; + } + + return 1; +} + +extern inline int rtllib_is_valid_mode(struct rtllib_device *ieee, int mode) +{ + /* + * It is possible for both access points and our device to support + * combinations of modes, so as long as there is one valid combination + * of ap/device supported modes, then return success + * + */ + if ((mode & IEEE_A) && + (ieee->modulation & RTLLIB_OFDM_MODULATION) && + (ieee->freq_band & RTLLIB_52GHZ_BAND)) + return 1; + + if ((mode & IEEE_G) && + (ieee->modulation & RTLLIB_OFDM_MODULATION) && + (ieee->freq_band & RTLLIB_24GHZ_BAND)) + return 1; + + if ((mode & IEEE_B) && + (ieee->modulation & RTLLIB_CCK_MODULATION) && + (ieee->freq_band & RTLLIB_24GHZ_BAND)) + return 1; + + return 0; +} + +extern inline int rtllib_get_hdrlen(u16 fc) +{ + int hdrlen = RTLLIB_3ADDR_LEN; + + switch (WLAN_FC_GET_TYPE(fc)) { + case RTLLIB_FTYPE_DATA: + if ((fc & RTLLIB_FCTL_FROMDS) && (fc & RTLLIB_FCTL_TODS)) + hdrlen = RTLLIB_4ADDR_LEN; /* Addr4 */ + if(RTLLIB_QOS_HAS_SEQ(fc)) + hdrlen += 2; /* QOS ctrl*/ + break; + case RTLLIB_FTYPE_CTL: + switch (WLAN_FC_GET_STYPE(fc)) { + case RTLLIB_STYPE_CTS: + case RTLLIB_STYPE_ACK: + hdrlen = RTLLIB_1ADDR_LEN; + break; + default: + hdrlen = RTLLIB_2ADDR_LEN; + break; + } + break; + } + + return hdrlen; +} + +static inline u8 *rtllib_get_payload(struct rtllib_hdr *hdr) +{ + switch (rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl))) { + case RTLLIB_1ADDR_LEN: + return ((struct rtllib_hdr_1addr *)hdr)->payload; + case RTLLIB_2ADDR_LEN: + return ((struct rtllib_hdr_2addr *)hdr)->payload; + case RTLLIB_3ADDR_LEN: + return ((struct rtllib_hdr_3addr *)hdr)->payload; + case RTLLIB_4ADDR_LEN: + return ((struct rtllib_hdr_4addr *)hdr)->payload; + } + return NULL; +} + +static inline int rtllib_is_ofdm_rate(u8 rate) +{ + switch (rate & ~RTLLIB_BASIC_RATE_MASK) { + case RTLLIB_OFDM_RATE_6MB: + case RTLLIB_OFDM_RATE_9MB: + case RTLLIB_OFDM_RATE_12MB: + case RTLLIB_OFDM_RATE_18MB: + case RTLLIB_OFDM_RATE_24MB: + case RTLLIB_OFDM_RATE_36MB: + case RTLLIB_OFDM_RATE_48MB: + case RTLLIB_OFDM_RATE_54MB: + return 1; + } + return 0; +} + +static inline int rtllib_is_cck_rate(u8 rate) +{ + switch (rate & ~RTLLIB_BASIC_RATE_MASK) { + case RTLLIB_CCK_RATE_1MB: + case RTLLIB_CCK_RATE_2MB: + case RTLLIB_CCK_RATE_5MB: + case RTLLIB_CCK_RATE_11MB: + return 1; + } + return 0; +} + + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)) +static inline unsigned compare_ether_addr(const u8 *addr1, const u8 *addr2) +{ + const u16 *a = (const u16 *) addr1; + const u16 *b = (const u16 *) addr2; + + BUILD_BUG_ON(ETH_ALEN != 6); + return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0; +} +#endif + +/* rtllib.c */ +extern void free_rtllib(struct net_device *dev); +extern struct net_device *alloc_rtllib(int sizeof_priv); + +extern int rtllib_set_encryption(struct rtllib_device *ieee); + +/* rtllib_tx.c */ + +#ifdef _RTL8192_EXT_PATCH_ +extern int rtllib_encrypt_fragment( + struct rtllib_device *ieee, + struct sk_buff *frag, + int hdr_len, u8 is_mesh, u8 entry); +#else +extern int rtllib_encrypt_fragment( + struct rtllib_device *ieee, + struct sk_buff *frag, + int hdr_len); +#endif + +extern int rtllib_xmit(struct sk_buff *skb, struct net_device *dev); +extern int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev); +#ifdef _RTL8192_EXT_PATCH_ +extern int rtllib_classify(struct sk_buff *skb, u8 bIsAmsdu); +extern int rtllib_mesh_xmit(struct sk_buff *skb, struct net_device *dev); +extern inline int rtllib_put_snap(u8 *data, u16 h_proto); +#endif +extern void rtllib_txb_free(struct rtllib_txb *); + +#ifdef ENABLE_AMSDU +extern struct sk_buff *AMSDU_Aggregation(struct rtllib_device *ieee, struct sk_buff_head *pSendList); +extern u8 AMSDU_GetAggregatibleList(struct rtllib_device *ieee, struct sk_buff *pCurSkb, struct sk_buff_head *pSendList, u8 queue_index); +extern struct sk_buff *msh_AMSDU_Aggregation(struct rtllib_device *ieee, struct sk_buff_head *pSendList); +extern u8 msh_AMSDU_GetAggregatibleList(struct rtllib_device *ieee, struct sk_buff *pCurSkb, struct sk_buff_head *pSendList, u8 queue_index); +#endif + +/* rtllib_rx.c */ +extern int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats); +extern void rtllib_rx_mgt(struct rtllib_device *ieee, + struct sk_buff *skb, + struct rtllib_rx_stats *stats); +extern void rtllib_rx_probe_rq(struct rtllib_device *ieee, + struct sk_buff *skb); +extern int IsLegalChannel( struct rtllib_device *rtllib, u8 channel); + +/* rtllib_wx.c */ +extern int rtllib_wx_get_scan(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key); +#ifdef _RTL8192_EXT_PATCH_ +extern int rtllib_wx_set_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key, u8 is_mesh); +extern int rtllib_wx_get_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key, u8 is_mesh); +extern int rtllib_mesh_set_encode_ext(struct rtllib_device *ieee, + struct iw_point *encoding, struct iw_encode_ext *ext, int entry); +#if WIRELESS_EXT >= 18 +extern int rtllib_wx_get_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data* wrqu, char *extra, u8 is_mesh); +extern int rtllib_wx_set_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data* wrqu, char *extra, u8 is_mesh); +#endif +#else +extern int rtllib_wx_set_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key); +extern int rtllib_wx_get_encode(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *key); +#if WIRELESS_EXT >= 18 +extern int rtllib_wx_get_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data* wrqu, char *extra); +extern int rtllib_wx_set_encode_ext(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data* wrqu, char *extra); +#endif +#endif +extern int rtllib_wx_set_auth(struct rtllib_device *ieee, + struct iw_request_info *info, + struct iw_param *data, char *extra); +extern int rtllib_wx_set_mlme(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +extern int rtllib_wx_set_gen_ie(struct rtllib_device *ieee, u8 *ie, size_t len); + +/* rtllib_softmac.c */ +extern short rtllib_is_54g(struct rtllib_network *net); +extern short rtllib_is_shortslot(struct rtllib_network net); +extern int rtllib_rx_frame_softmac(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats, u16 type, + u16 stype); +extern void rtllib_softmac_new_net(struct rtllib_device *ieee, struct rtllib_network *net); + +void SendDisassociation(struct rtllib_device *ieee, bool deauth, u16 asRsn); +extern void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee); + +extern void rtllib_stop_send_beacons(struct rtllib_device *ieee); +extern void notify_wx_assoc_event(struct rtllib_device *ieee); +extern void rtllib_softmac_check_all_nets(struct rtllib_device *ieee); +extern void rtllib_start_bss(struct rtllib_device *ieee); +extern void rtllib_start_master_bss(struct rtllib_device *ieee); +extern void rtllib_start_ibss(struct rtllib_device *ieee); +extern void rtllib_softmac_init(struct rtllib_device *ieee); +extern void rtllib_softmac_free(struct rtllib_device *ieee); +extern void rtllib_associate_abort(struct rtllib_device *ieee); +extern void rtllib_disassociate(struct rtllib_device *ieee); +extern void rtllib_stop_scan(struct rtllib_device *ieee); +extern bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan); +extern void rtllib_stop_scan_syncro(struct rtllib_device *ieee); +extern void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh); +extern inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee); +extern u8 MgntQuery_MgntFrameTxRate(struct rtllib_device *ieee); +extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr); +extern void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl); +extern void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee); +extern void rtllib_check_all_nets(struct rtllib_device *ieee); +extern void rtllib_start_protocol(struct rtllib_device *ieee); +extern void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown); + +extern void rtllib_EnableNetMonitorMode(struct net_device* dev, bool bInitState); +extern void rtllib_DisableNetMonitorMode(struct net_device* dev, bool bInitState); +extern void rtllib_EnableIntelPromiscuousMode(struct net_device* dev, bool bInitState); +extern void rtllib_DisableIntelPromiscuousMode(struct net_device* dev, bool bInitState); +#ifdef _RTL8192_EXT_PATCH_ +extern void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh); +#else +extern void rtllib_send_probe_requests(struct rtllib_device *ieee); +#endif +#ifdef _RTL8192_EXT_PATCH_ +extern void rtllib_softmac_start_protocol(struct rtllib_device *ieee,u8 mesh_flag); +extern void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 mesh_flag, u8 shutdown); +extern void rtllib_start_mesh_protocol(struct rtllib_device *ieee); +extern void rtllib_stop_mesh_protocol(struct rtllib_device *ieee); +#else +extern void rtllib_softmac_start_protocol(struct rtllib_device *ieee); +extern void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 shutdown); +#endif +extern void rtllib_reset_queue(struct rtllib_device *ieee); +extern void rtllib_wake_queue(struct rtllib_device *ieee); +extern void rtllib_stop_queue(struct rtllib_device *ieee); +extern void rtllib_wake_all_queues(struct rtllib_device *ieee); +extern void rtllib_stop_all_queues(struct rtllib_device *ieee); +extern struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee); +extern void rtllib_start_send_beacons(struct rtllib_device *ieee); +extern void rtllib_stop_send_beacons(struct rtllib_device *ieee); +#ifdef _RTL8192_EXT_PATCH_ +extern int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p, u8 is_mesh); +#else +extern int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p); +#endif +extern void notify_wx_assoc_event(struct rtllib_device *ieee); +extern void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success); + +extern void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee); +extern u16 rtllib_query_seqnum(struct rtllib_device*ieee, struct sk_buff* skb, u8* dst); +extern u8 rtllib_ap_sec_type(struct rtllib_device *ieee); + +#ifdef _RTL8192_EXT_PATCH_ +extern void rtllib_resp_to_auth(struct rtllib_device *ieee, int s, u8* dest); +extern void rtllib_associate_step1(struct rtllib_device *ieee,u8 * addr); +extern bool rtllib_ext_prepare_to_joinmesh(struct rtllib_device *ieee, struct rtllib_network *pstat); +extern u8 HTFilterMCSRate( struct rtllib_device* ieee, u8* pSupportMCS, u8* pOperateMCS); +extern void HTUseDefaultSetting(struct rtllib_device* ieee); +extern void rtllib_start_scan(struct rtllib_device *ieee); +extern struct sk_buff* rtllib_ext_probe_resp_by_net(struct rtllib_device *ieee, u8 *dest, struct rtllib_network *net); +extern int rtllib_network_init(struct rtllib_device *ieee, struct rtllib_probe_response *beacon, struct rtllib_network *network, struct rtllib_rx_stats *stats); +extern struct rtllib_txb *rtllib_alloc_txb(int nr_frags, int txb_size, int gfp_mask); +extern void rtllib_ext_send_11s_beacon(struct rtllib_device *ieee); +#endif + +/* rtllib_crypt_ccmp&tkip&wep.c */ +extern void rtllib_tkip_null(void); +extern void rtllib_wep_null(void); +extern void rtllib_ccmp_null(void); + +/* rtllib_softmac_wx.c */ + +extern int rtllib_wx_get_wap(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *ext); + +extern int rtllib_wx_set_wap(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *awrq, + char *extra); + +extern int rtllib_wx_get_essid(struct rtllib_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b); + +extern int rtllib_wx_set_rate(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_get_rate(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b); + +extern int rtllib_wx_set_scan(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b); + +extern int rtllib_wx_set_essid(struct rtllib_device *ieee, + struct iw_request_info *a, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_get_mode(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b); + +extern int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b); + +#ifdef _RTL8192_EXT_PATCH_ +extern int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b, u8 is_mesh); +#else +extern int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a, + union iwreq_data *wrqu, char *b); +#endif +extern void rtllib_wx_sync_scan_wq(void *data); + +extern int rtllib_wx_set_rawtx(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_get_name(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_set_power(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_get_power(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_set_rts(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +extern int rtllib_wx_get_rts(struct rtllib_device *ieee, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +#ifdef _RTL8192_EXT_PATCH_ +extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr); +#endif +#define MAX_RECEIVE_BUFFER_SIZE 9100 +extern void HTDebugHTCapability(u8* CapIE, u8* TitleString ); +extern void HTDebugHTInfo(u8* InfoIE, u8* TitleString); + +void HTSetConnectBwMode(struct rtllib_device* ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset); +extern void HTUpdateDefaultSetting(struct rtllib_device* ieee); +#ifdef _RTL8192_EXT_PATCH_ +extern void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 isEncrypt, u8 bIsBcn); +#else +extern void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 isEncrypt); +#endif +extern void HTConstructInfoElement(struct rtllib_device* ieee, u8* posHTInfo, u8* len, u8 isEncrypt); +extern void HTConstructRT2RTAggElement(struct rtllib_device* ieee, u8* posRT2RTAgg, u8* len); +extern void HTOnAssocRsp(struct rtllib_device *ieee); +extern void HTInitializeHTInfo(struct rtllib_device* ieee); +extern void HTInitializeBssDesc(PBSS_HT pBssHT); +extern void HTResetSelfAndSavePeerSetting(struct rtllib_device* ieee, struct rtllib_network * pNetwork); +extern void HTUpdateSelfAndPeerSetting(struct rtllib_device* ieee, struct rtllib_network * pNetwork); +extern u8 HTGetHighestMCSRate(struct rtllib_device* ieee, u8* pMCSRateSet, u8* pMCSFilter); +extern u8 MCS_FILTER_ALL[]; +extern u16 MCS_DATA_RATE[2][2][77] ; +extern u8 HTCCheck(struct rtllib_device* ieee, u8* pFrame); +extern void HTResetIOTSetting(PRT_HIGH_THROUGHPUT pHTInfo); +extern bool IsHTHalfNmodeAPs(struct rtllib_device* ieee); +extern u16 HTHalfMcsToDataRate(struct rtllib_device* ieee, u8 nMcsRate); +extern u16 HTMcsToDataRate( struct rtllib_device* ieee, u8 nMcsRate); +extern u16 TxCountToDataRate( struct rtllib_device* ieee, u8 nDataRate); +extern int rtllib_rx_ADDBAReq( struct rtllib_device* ieee, struct sk_buff *skb); +extern int rtllib_rx_ADDBARsp( struct rtllib_device* ieee, struct sk_buff *skb); +extern int rtllib_rx_DELBA(struct rtllib_device* ieee,struct sk_buff *skb); +extern void TsInitAddBA( struct rtllib_device* ieee, PTX_TS_RECORD pTS, u8 Policy, u8 bOverwritePending); +extern void TsInitDelBA( struct rtllib_device* ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect); +extern void BaSetupTimeOut(unsigned long data); +extern void TxBaInactTimeout(unsigned long data); +extern void RxBaInactTimeout(unsigned long data); +extern void ResetBaEntry( PBA_RECORD pBA); +extern bool GetTs( + struct rtllib_device* ieee, + PTS_COMMON_INFO *ppTS, + u8* Addr, + u8 TID, + TR_SELECT TxRxSelect, + bool bAddNewTs + ); +extern void TSInitialize(struct rtllib_device *ieee); +extern void TsStartAddBaProcess(struct rtllib_device* ieee, PTX_TS_RECORD pTxTS); +extern void RemovePeerTS(struct rtllib_device* ieee, u8* Addr); +extern void RemoveAllTS(struct rtllib_device* ieee); +#ifdef _RTL8192_EXT_PATCH_ +extern void ResetAdmitTRStream(struct rtllib_device *ieee, u8 *Addr); +#endif +void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh); + +extern const long rtllib_wlan_frequencies[]; + +extern inline void rtllib_increment_scans(struct rtllib_device *ieee) +{ + ieee->scans++; +} + +extern inline int rtllib_get_scans(struct rtllib_device *ieee) +{ + return ieee->scans; +} + +static inline 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; + + if (rtllib_is_empty_essid(essid, essid_len)) { + memcpy(escaped, "", sizeof("")); + return escaped; + } + + essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE); + while (essid_len--) { + if (*s == '\0') { + *d++ = '\\'; + *d++ = '0'; + s++; + } else { + *d++ = *s++; + } + } + *d = '\0'; + return escaped; +} + +#define CONVERT_RATE(_ieee, _MGN_RATE) (_MGN_RATE + * Copyright (c) 2002-2003, Jouni Malinen + * Copyright (c) 2004, Intel Corporation + * + * 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. See README and COPYING for + * more details. + ****************************************************************************** + + Few modifications for Realtek's Wi-Fi drivers by + Andrea Merello + + A special thanks goes to Realtek for their support ! + +******************************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "rtllib.h" +#ifdef ENABLE_DOT11D +#include "dot11d.h" +#endif + +#ifdef RTLLIB_RADIOTAP +#include +#endif + +#if defined CONFIG_CFG_80211 +#include + +struct ieee80211_channel *rtllib_get_channel(struct wiphy *wiphy, + int freq) +{ + enum ieee80211_band band; + struct ieee80211_supported_band *sband; + int i; + + for (band = 0; band < IEEE80211_NUM_BANDS; band++) { + sband = wiphy->bands[band]; + + if (!sband) + continue; + + for (i = 0; i < sband->n_channels; i++) { + if (sband->channels[i].center_freq == freq) + return &sband->channels[i]; + } + } + + return NULL; +} + +int rtllib_channel_to_frequency(int chan) +{ + if (chan < 14) + return 2407 + chan * 5; + + if (chan == 14) + return 2484; + + /* FIXME: 802.11j 17.3.8.3.2 */ + return (chan + 1000) * 5; +} + +u32 rtllib_parse_elems_crc(u8 *start, size_t len, + struct ieee802_11_elems *elems, + u64 filter, u32 crc) +{ + size_t left = len; + u8 *pos = start; + bool calc_crc = filter != 0; + + memset(elems, 0, sizeof(*elems)); + elems->ie_start = start; + elems->total_len = len; + + while (left >= 2) { + u8 id, elen; + + id = *pos++; + elen = *pos++; + left -= 2; + + if (elen > left) + break; + + if (calc_crc && id < 64 && (filter & BIT(id))) + crc = crc32_be(crc, pos - 2, elen + 2); + + switch (id) { + case WLAN_EID_SSID: + elems->ssid = pos; + elems->ssid_len = elen; + break; + case WLAN_EID_SUPP_RATES: + elems->supp_rates = pos; + elems->supp_rates_len = elen; + break; + case WLAN_EID_FH_PARAMS: + elems->fh_params = pos; + elems->fh_params_len = elen; + break; + case WLAN_EID_DS_PARAMS: + elems->ds_params = pos; + elems->ds_params_len = elen; + break; + case WLAN_EID_CF_PARAMS: + elems->cf_params = pos; + elems->cf_params_len = elen; + break; + case WLAN_EID_TIM: + if (elen >= sizeof(struct ieee80211_tim_ie)) { + elems->tim = (void *)pos; + elems->tim_len = elen; + } + break; + case WLAN_EID_IBSS_PARAMS: + elems->ibss_params = pos; + elems->ibss_params_len = elen; + break; + case WLAN_EID_CHALLENGE: + elems->challenge = pos; + elems->challenge_len = elen; + break; + case WLAN_EID_VENDOR_SPECIFIC: + if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 && + pos[2] == 0xf2) { + /* Microsoft OUI (00:50:F2) */ + + if (calc_crc) + crc = crc32_be(crc, pos - 2, elen + 2); + + if (pos[3] == 1) { + /* OUI Type 1 - WPA IE */ + elems->wpa = pos; + elems->wpa_len = elen; + } else if (elen >= 5 && pos[3] == 2) { + /* OUI Type 2 - WMM IE */ + if (pos[4] == 0) { + elems->wmm_info = pos; + elems->wmm_info_len = elen; + } else if (pos[4] == 1) { + elems->wmm_param = pos; + elems->wmm_param_len = elen; + } + } + } + break; + case WLAN_EID_RSN: + elems->rsn = pos; + elems->rsn_len = elen; + break; + case WLAN_EID_ERP_INFO: + elems->erp_info = pos; + elems->erp_info_len = elen; + break; + case WLAN_EID_EXT_SUPP_RATES: + elems->ext_supp_rates = pos; + elems->ext_supp_rates_len = elen; + break; + case WLAN_EID_HT_CAPABILITY: + if (elen >= sizeof(struct ieee80211_ht_cap)) + elems->ht_cap_elem = (void *)pos; + break; + case WLAN_EID_HT_INFORMATION: + if (elen >= sizeof(struct ieee80211_ht_info)) + elems->ht_info_elem = (void *)pos; + break; + case WLAN_EID_MESH_ID: + elems->mesh_id = pos; + elems->mesh_id_len = elen; + break; + case WLAN_EID_MESH_CONFIG: + elems->mesh_config = pos; + elems->mesh_config_len = elen; + break; + case WLAN_EID_PEER_LINK: + elems->peer_link = pos; + elems->peer_link_len = elen; + break; + case WLAN_EID_PREQ: + elems->preq = pos; + elems->preq_len = elen; + break; + case WLAN_EID_PREP: + elems->prep = pos; + elems->prep_len = elen; + break; + case WLAN_EID_PERR: + elems->perr = pos; + elems->perr_len = elen; + break; + case WLAN_EID_CHANNEL_SWITCH: + elems->ch_switch_elem = pos; + elems->ch_switch_elem_len = elen; + break; + case WLAN_EID_QUIET: + if (!elems->quiet_elem) { + elems->quiet_elem = pos; + elems->quiet_elem_len = elen; + } + elems->num_of_quiet_elem++; + break; + case WLAN_EID_COUNTRY: + elems->country_elem = pos; + elems->country_elem_len = elen; + break; + case WLAN_EID_PWR_CONSTRAINT: + elems->pwr_constr_elem = pos; + elems->pwr_constr_elem_len = elen; + break; + case WLAN_EID_TIMEOUT_INTERVAL: + elems->timeout_int = pos; + elems->timeout_int_len = elen; + break; + default: + break; + } + + left -= elen; + pos += elen; + } + + return crc; +} + +void rtllib_parse_elems(u8 *start, size_t len, + struct ieee802_11_elems *elems) +{ + rtllib_parse_elems_crc(start, len, elems, 0, 0); +} + +void ieee80211_scan_rx(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_status) +{ + struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data ; + struct ieee80211_mgmt *mgmt; + struct ieee80211_bss *bss; + u8 *elements; + struct ieee80211_channel *channel; + size_t baselen; + int freq; + __le16 fc; + bool presp, beacon = false; + struct ieee802_11_elems elems; + s32 signal = 0; + + if (skb->len < 2) + return; + + mgmt = (struct ieee80211_mgmt *) skb->data; + fc = mgmt->frame_control; + + if (skb->len < 24) + return; + + presp = (WLAN_FC_GET_STYPE(header->frame_ctl) == RTLLIB_STYPE_PROBE_RESP); + if (presp) { + /* ignore ProbeResp to foreign address */ + if (memcmp(mgmt->da, ieee->dev->dev_addr, ETH_ALEN)) + return ;; + + presp = true; + elements = mgmt->u.probe_resp.variable; + baselen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable); + } else { + beacon = (WLAN_FC_GET_STYPE(header->frame_ctl) == RTLLIB_STYPE_BEACON); + baselen = offsetof(struct ieee80211_mgmt, u.beacon.variable); + elements = mgmt->u.beacon.variable; + } + + if (!presp && !beacon) + return; + + if (baselen > skb->len) + return; + + rtllib_parse_elems(elements, skb->len - baselen, &elems); + + if (elems.ds_params && elems.ds_params_len == 1) + freq = rtllib_channel_to_frequency(elems.ds_params[0]); + else + return; + + channel = rtllib_get_channel(ieee->wdev.wiphy, freq); + + if (!channel || channel->flags & IEEE80211_CHAN_DISABLED) + return; + + signal = rx_status->signal * 100; + + bss = (void *)cfg80211_inform_bss_frame(ieee->wdev.wiphy, channel, + mgmt, skb->len, signal, GFP_ATOMIC); + + return; +} +#endif + +#ifdef RTLLIB_RADIOTAP +static int rtllib_rx_radiotap_len(struct rtllib_device *ieee, struct rtllib_rx_stats *rx_status) +{ + int len; + + /* always present fields */ + len = sizeof(struct ieee80211_radiotap_header) + 9 + + 8 + /* TSFT */ + 1 + /* HW SIGNAL DBM */ + 1; /* HW NOISE DBM */ + + if (len & 1) /* padding for RX_FLAGS if necessary */ + len++; + + /* make sure radiotap starts at a naturally aligned address */ + if (len % 8) + len = roundup(len, 8); + + return len; +} + +static void rtllib_add_rx_radiotap_header(struct rtllib_device *ieee, + struct sk_buff *skb, int rtap_len, struct rtllib_rx_stats *rx_status) +{ + struct ieee80211_radiotap_header *rthdr; + unsigned char *pos; + printk("add header!\n"); + rthdr = (struct ieee80211_radiotap_header *)skb_push(skb, rtap_len); + memset(rthdr, 0, rtap_len); + + rthdr->it_version = PKTHDR_RADIOTAP_VERSION; + rthdr->it_pad = 0; + rthdr->it_len = cpu_to_le16(rtap_len); + /* radiotap header, set always present flags */ + rthdr->it_present = cpu_to_le32( + (1 << IEEE80211_RADIOTAP_TSFT) | + (1 << IEEE80211_RADIOTAP_FLAGS) | + (1 << IEEE80211_RADIOTAP_RATE) | + (1 << IEEE80211_RADIOTAP_CHANNEL) | + (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | + (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | + (1 << IEEE80211_RADIOTAP_ANTENNA)); + + pos = (unsigned char *)(rthdr+1); + /* the order of the following fields is important */ + /* IEEE80211_RADIOTAP_TSFT */ + *(__le64 *)pos = cpu_to_le64((rx_status->mac_time[1] << 32) | \ + rx_status->mac_time[0]); + pos += 8; + + /* IEEE80211_RADIOTAP_FLAGS */ + if (rx_status->bCRC) + *pos |= IEEE80211_RADIOTAP_F_BADFCS; + if (rx_status->bShortPreamble) + *pos |= IEEE80211_RADIOTAP_F_SHORTPRE; + pos++; + + /* IEEE80211_RADIOTAP_RATE */ + *pos = rx_status->rate / 5; + pos++; + + /* IEEE80211_RADIOTAP_CHANNEL */ + *(__le16 *)pos = cpu_to_le16(rx_status->received_channel); + pos += 2; +#if 0 + if (status->band == IEEE80211_BAND_5GHZ) + *(__le16 *)pos = cpu_to_le16(IEEE80211_CHAN_OFDM | + IEEE80211_CHAN_5GHZ); + else if (rate->flags & IEEE80211_RATE_ERP_G) + *(__le16 *)pos = cpu_to_le16(IEEE80211_CHAN_OFDM | + IEEE80211_CHAN_2GHZ); + else + *(__le16 *)pos = cpu_to_le16(IEEE80211_CHAN_CCK | + IEEE80211_CHAN_2GHZ); +#endif + pos += 2; + + + /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ + *pos = rx_status->RxPower; + pos++; + + /* IEEE80211_RADIOTAP_DBM_ANTNOISE */ + *pos = rx_status->noise; + pos++; + + /* IEEE80211_RADIOTAP_ANTENNA */ + *pos = rx_status->Antenna; + pos++; + + /* IEEE80211_RADIOTAP_DB_ANTNOISE is not used */ + + /* IEEE80211_RADIOTAP_RX_FLAGS */ + /* ensure 2 byte alignment for the 2 byte field as required */ +#if 0 + if ((pos - (unsigned char *)rthdr) & 1) + pos++; + if (status->flag & RX_FLAG_FAILED_PLCP_CRC) + *(__le16 *)pos |= cpu_to_le16(IEEE80211_RADIOTAP_F_RX_BADPLCP); + pos += 2; +#endif +} +#endif + +static inline void rtllib_monitor_rx(struct rtllib_device *ieee, + struct sk_buff *skb,struct rtllib_rx_stats *rx_status, + size_t hdr_length) +{ +#ifdef RTLLIB_RADIOTAP + int needed_headroom = 0; + struct sk_buff *radiotap_skb; + + needed_headroom = rtllib_rx_radiotap_len(ieee, rx_status); + printk("needed_headroom = %d\n", needed_headroom); + radiotap_skb = skb_copy_expand(skb, needed_headroom, 0, GFP_ATOMIC); + dev_kfree_skb(skb); + if (!radiotap_skb) { + return; + } + + rtllib_add_rx_radiotap_header(ieee, skb, needed_headroom, rx_status); + radiotap_skb->dev = ieee->dev; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) + skb_reset_mac_header(radiotap_skb); +#else + radiotap_skb->mac.raw = skb->data; +#endif + radiotap_skb->ip_summed = CHECKSUM_UNNECESSARY; + radiotap_skb->pkt_type = PACKET_OTHERHOST; + radiotap_skb->protocol = htons(ETH_P_802_2); + memset(radiotap_skb->cb, 0, sizeof(radiotap_skb->cb)); + netif_rx(radiotap_skb); +#else + skb->dev = ieee->dev; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) + skb_reset_mac_header(skb); +#else + skb->mac.raw = skb->data; +#endif + skb_pull(skb, hdr_length); + skb->pkt_type = PACKET_OTHERHOST; + skb->protocol = __constant_htons(ETH_P_80211_RAW); + memset(skb->cb, 0, sizeof(skb->cb)); + netif_rx(skb); +#endif +} + +/* Called only as a tasklet (software IRQ) */ +static struct rtllib_frag_entry * +rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq, + unsigned int frag, u8 tid,u8 *src, u8 *dst) +{ + struct rtllib_frag_entry *entry; + int i; + + for (i = 0; i < RTLLIB_FRAG_CACHE_LEN; i++) { + entry = &ieee->frag_cache[tid][i]; + if (entry->skb != NULL && + time_after(jiffies, entry->first_frag_time + 2 * HZ)) { + RTLLIB_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; + } + + if (entry->skb != NULL && entry->seq == seq && + (entry->last_frag + 1 == frag || frag == -1) && + memcmp(entry->src_addr, src, ETH_ALEN) == 0 && + memcmp(entry->dst_addr, dst, ETH_ALEN) == 0) + return entry; + } + + return NULL; +} + +/* Called only as a tasklet (software IRQ) */ +static struct sk_buff * +rtllib_frag_cache_get(struct rtllib_device *ieee, + struct rtllib_hdr_4addr *hdr) +{ + struct sk_buff *skb = NULL; + u16 fc = le16_to_cpu(hdr->frame_ctl); + u16 sc = le16_to_cpu(hdr->seq_ctl); + unsigned int frag = WLAN_GET_SEQ_FRAG(sc); + unsigned int seq = WLAN_GET_SEQ_SEQ(sc); + struct rtllib_frag_entry *entry; + struct rtllib_hdr_3addrqos *hdr_3addrqos; + struct rtllib_hdr_4addrqos *hdr_4addrqos; + u8 tid; + + if (((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS)&&RTLLIB_QOS_HAS_SEQ(fc)) { + hdr_4addrqos = (struct rtllib_hdr_4addrqos *)hdr; + tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID; + tid = UP2AC(tid); + tid ++; + } else if (RTLLIB_QOS_HAS_SEQ(fc)) { + hdr_3addrqos = (struct rtllib_hdr_3addrqos *)hdr; + tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID; + tid = UP2AC(tid); + tid ++; + } else { + tid = 0; + } + + if (frag == 0) { + /* Reserve enough space to fit maximum frame length */ + skb = dev_alloc_skb(ieee->dev->mtu + + sizeof(struct rtllib_hdr_4addr) + + 8 /* LLC */ + + 2 /* alignment */ + + 8 /* WEP */ + + ETH_ALEN /* WDS */ + + (RTLLIB_QOS_HAS_SEQ(fc)?2:0) /* QOS Control */); + if (skb == NULL) + return NULL; + + entry = &ieee->frag_cache[tid][ieee->frag_next_idx[tid]]; + ieee->frag_next_idx[tid]++; + if (ieee->frag_next_idx[tid] >= RTLLIB_FRAG_CACHE_LEN) + ieee->frag_next_idx[tid] = 0; + + if (entry->skb != NULL) + dev_kfree_skb_any(entry->skb); + + entry->first_frag_time = jiffies; + entry->seq = seq; + entry->last_frag = frag; + entry->skb = skb; + memcpy(entry->src_addr, hdr->addr2, ETH_ALEN); + memcpy(entry->dst_addr, hdr->addr1, ETH_ALEN); + } else { + /* received a fragment of a frame for which the head fragment + * should have already been received */ + entry = rtllib_frag_cache_find(ieee, seq, frag, tid,hdr->addr2, + hdr->addr1); + if (entry != NULL) { + entry->last_frag = frag; + skb = entry->skb; + } + } + + return skb; +} + + +/* Called only as a tasklet (software IRQ) */ +static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee, + struct rtllib_hdr_4addr *hdr) +{ + u16 fc = le16_to_cpu(hdr->frame_ctl); + u16 sc = le16_to_cpu(hdr->seq_ctl); + unsigned int seq = WLAN_GET_SEQ_SEQ(sc); + struct rtllib_frag_entry *entry; + struct rtllib_hdr_3addrqos *hdr_3addrqos; + struct rtllib_hdr_4addrqos *hdr_4addrqos; + u8 tid; + + if(((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS)&&RTLLIB_QOS_HAS_SEQ(fc)) { + hdr_4addrqos = (struct rtllib_hdr_4addrqos *)hdr; + tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID; + tid = UP2AC(tid); + tid ++; + } else if (RTLLIB_QOS_HAS_SEQ(fc)) { + hdr_3addrqos = (struct rtllib_hdr_3addrqos *)hdr; + tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID; + tid = UP2AC(tid); + tid ++; + } else { + tid = 0; + } + + entry = rtllib_frag_cache_find(ieee, seq, -1, tid,hdr->addr2, + hdr->addr1); + + if (entry == NULL) { + RTLLIB_DEBUG_FRAG( + "could not invalidate fragment cache " + "entry (seq=%u)\n", seq); + return -1; + } + + entry->skb = NULL; + return 0; +} + + + +/* rtllib_rx_frame_mgtmt + * + * Responsible for handling management control frames + * + * Called by rtllib_rx */ +static inline int +rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats, u16 type, + u16 stype) +{ + /* On the struct stats definition there is written that + * this is not mandatory.... but seems that the probe + * response parser uses it + */ + struct rtllib_hdr_3addr * hdr = (struct rtllib_hdr_3addr *)skb->data; + + rx_stats->len = skb->len; + rtllib_rx_mgt(ieee,skb,rx_stats); +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->iw_mode == IW_MODE_MESH){ + if ((stype != RTLLIB_STYPE_MESH_ACT) && (memcmp(hdr->addr1, ieee->dev->dev_addr, ETH_ALEN))) + { + dev_kfree_skb_any(skb); + return 0; + } + } + else +#endif + { + if ((memcmp(hdr->addr1, ieee->dev->dev_addr, ETH_ALEN))) + { + dev_kfree_skb_any(skb); + return 0; + } + } + rtllib_rx_frame_softmac(ieee, skb, rx_stats, type, stype); + + dev_kfree_skb_any(skb); + + return 0; + +#ifdef NOT_YET + if (ieee->iw_mode == IW_MODE_MASTER) { + printk(KERN_DEBUG "%s: Master mode not yet suppported.\n", + ieee->dev->name); + return 0; +/* + hostap_update_sta_ps(ieee, (struct hostap_rtllib_hdr_4addr *) + skb->data);*/ + } + + if (ieee->hostapd && type == RTLLIB_TYPE_MGMT) { + if (stype == WLAN_FC_STYPE_BEACON && + ieee->iw_mode == IW_MODE_MASTER) { + struct sk_buff *skb2; + /* Process beacon frames also in kernel driver to + * update STA(AP) table statistics */ + skb2 = skb_clone(skb, GFP_ATOMIC); + if (skb2) + hostap_rx(skb2->dev, skb2, rx_stats); + } + + /* send management frames to the user space daemon for + * processing */ + ieee->apdevstats.rx_packets++; + ieee->apdevstats.rx_bytes += skb->len; + prism2_rx_80211(ieee->apdev, skb, rx_stats, PRISM2_RX_MGMT); + return 0; + } + + 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", + skb->dev->name, type, stype); + return -1; + } + + hostap_rx(skb->dev, skb, rx_stats); + return 0; + } + + printk(KERN_DEBUG "%s: hostap_rx_frame_mgmt: management frame " + "received in non-Host AP mode\n", skb->dev->name); + return -1; +#endif +} + +#ifndef CONFIG_CFG_80211 +/* 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 }; +/* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ +static unsigned char bridge_tunnel_header[] = +{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; +/* No encapsulation header if EtherType < 0x600 (=length) */ +#endif + +/* Called by rtllib_rx_frame_decrypt */ +static int rtllib_is_eapol_frame(struct rtllib_device *ieee, + struct sk_buff *skb, size_t hdrlen) +{ + struct net_device *dev = ieee->dev; + u16 fc, ethertype; + struct rtllib_hdr_4addr *hdr; + u8 *pos; + + if (skb->len < 24) + return 0; + + hdr = (struct rtllib_hdr_4addr *) skb->data; + fc = le16_to_cpu(hdr->frame_ctl); + + /* check that the frame is unicast frame to us */ + if ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == + RTLLIB_FCTL_TODS && + memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN) == 0 && + memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN) == 0) { + /* ToDS frame with own addr BSSID and DA */ + } else if ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == + RTLLIB_FCTL_FROMDS && + memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN) == 0) { + /* FromDS frame with own addr as DA */ + } else + return 0; + + if (skb->len < 24 + 8) + return 0; + + /* check for port access entity Ethernet type */ + pos = skb->data + hdrlen; + ethertype = (pos[6] << 8) | pos[7]; + if (ethertype == ETH_P_PAE) + return 1; + + return 0; +} + +/* Called only as a tasklet (software IRQ), by rtllib_rx */ +static inline int +rtllib_rx_frame_decrypt(struct rtllib_device* ieee, struct sk_buff *skb, + struct rtllib_crypt_data *crypt) +{ + struct rtllib_hdr_4addr *hdr; + int res, hdrlen; + + if (crypt == NULL || crypt->ops->decrypt_mpdu == NULL) + return 0; +#if 1 + if (ieee->hwsec_active) + { + cb_desc *tcb_desc = (cb_desc *)(skb->cb+ MAX_DEV_ADDR_SIZE); + tcb_desc->bHwSec = 1; + + if(ieee->need_sw_enc) + tcb_desc->bHwSec = 0; + } +#endif + hdr = (struct rtllib_hdr_4addr *) skb->data; + hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); + +#ifdef CONFIG_RTLLIB_CRYPT_TKIP + 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", + ieee->dev->name, MAC_ARG(hdr->addr2)); + } + return -1; + } +#endif + + atomic_inc(&crypt->refcnt); + res = crypt->ops->decrypt_mpdu(skb, hdrlen, crypt->priv); + atomic_dec(&crypt->refcnt); + if (res < 0) { + RTLLIB_DEBUG_DROP( + "decryption failed (SA=" MAC_FMT + ") res=%d\n", MAC_ARG(hdr->addr2), res); + if (res == -2) + RTLLIB_DEBUG_DROP("Decryption failed ICV " + "mismatch (key %d)\n", + skb->data[hdrlen + 3] >> 6); + ieee->ieee_stats.rx_discards_undecryptable++; + return -1; + } + + return res; +} + + +/* Called only as a tasklet (software IRQ), by rtllib_rx */ +static inline int +rtllib_rx_frame_decrypt_msdu(struct rtllib_device* ieee, struct sk_buff *skb, + int keyidx, struct rtllib_crypt_data *crypt) +{ + struct rtllib_hdr_4addr *hdr; + int res, hdrlen; + + if (crypt == NULL || crypt->ops->decrypt_msdu == NULL) + return 0; + if (ieee->hwsec_active) + { + cb_desc *tcb_desc = (cb_desc *)(skb->cb+ MAX_DEV_ADDR_SIZE); + tcb_desc->bHwSec = 1; + + if(ieee->need_sw_enc) + tcb_desc->bHwSec = 0; + } + + hdr = (struct rtllib_hdr_4addr *) skb->data; + hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); + + atomic_inc(&crypt->refcnt); + res = crypt->ops->decrypt_msdu(skb, keyidx, hdrlen, crypt->priv,ieee); + atomic_dec(&crypt->refcnt); + if (res < 0) { + printk(KERN_DEBUG "%s: MSDU decryption/MIC verification failed" + " (SA=" MAC_FMT " keyidx=%d)\n", + ieee->dev->name, MAC_ARG(hdr->addr2), keyidx); + return -1; + } + + return 0; +} + +#ifdef _RTL8192_EXT_PATCH_ +static inline int rtllib_has_retry(u16 fc) +{ + return ((fc&RTLLIB_FCTL_RETRY)!=0); +} +#endif + +/* this function is stolen from ipw2200 driver*/ +#define IEEE_PACKET_RETRY_TIME (5*HZ) +static int is_duplicate_packet(struct rtllib_device *ieee, + struct rtllib_hdr_4addr *header) +{ + u16 fc = le16_to_cpu(header->frame_ctl); + u16 sc = le16_to_cpu(header->seq_ctl); + u16 seq = WLAN_GET_SEQ_SEQ(sc); + u16 frag = WLAN_GET_SEQ_FRAG(sc); + u16 *last_seq, *last_frag; + unsigned long *last_time; + struct rtllib_hdr_3addrqos *hdr_3addrqos; + struct rtllib_hdr_4addrqos *hdr_4addrqos; + u8 tid; + + if(((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS)&&RTLLIB_QOS_HAS_SEQ(fc)) { + hdr_4addrqos = (struct rtllib_hdr_4addrqos *)header; + tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID; + tid = UP2AC(tid); + tid ++; + } else if(RTLLIB_QOS_HAS_SEQ(fc)) { + hdr_3addrqos = (struct rtllib_hdr_3addrqos*)header; + tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID; + tid = UP2AC(tid); + tid ++; + } else { + tid = 0; + } + + switch (ieee->iw_mode) { + case IW_MODE_ADHOC: + { + struct list_head *p; + struct ieee_ibss_seq *entry = NULL; + u8 *mac = header->addr2; + int index = mac[5] % IEEE_IBSS_MAC_HASH_SIZE; + list_for_each(p, &ieee->ibss_mac_hash[index]) { + entry = list_entry(p, struct ieee_ibss_seq, list); + if (!memcmp(entry->mac, mac, ETH_ALEN)) + break; + } + if (p == &ieee->ibss_mac_hash[index]) { + entry = kmalloc(sizeof(struct ieee_ibss_seq), GFP_ATOMIC); + if (!entry) { + printk(KERN_WARNING "Cannot malloc new mac entry\n"); + return 0; + } + memcpy(entry->mac, mac, ETH_ALEN); + entry->seq_num[tid] = seq; + entry->frag_num[tid] = frag; + entry->packet_time[tid] = jiffies; + list_add(&entry->list, &ieee->ibss_mac_hash[index]); + return 0; + } + last_seq = &entry->seq_num[tid]; + last_frag = &entry->frag_num[tid]; + last_time = &entry->packet_time[tid]; + break; + } + + case IW_MODE_INFRA: + last_seq = &ieee->last_rxseq_num[tid]; + last_frag = &ieee->last_rxfrag_num[tid]; + last_time = &ieee->last_packet_time[tid]; + + break; + +#ifdef _RTL8192_EXT_PATCH_ + case IW_MODE_MESH: + /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */ + if(!is_multicast_ether_addr(header->addr1)){ + struct list_head *p; + struct ieee_mesh_seq *entry = NULL; + u8 *mac = header->addr2; + int index = mac[5] % IEEE_IBSS_MAC_HASH_SIZE; + list_for_each(p, &ieee->mesh_mac_hash[index]) { + entry = list_entry(p, struct ieee_mesh_seq, list); + if (!memcmp(entry->mac, mac, ETH_ALEN)) + break; + } + + if (p == &ieee->mesh_mac_hash[index]) { + entry = kmalloc(sizeof(struct ieee_mesh_seq), GFP_ATOMIC); + if (!entry) { + printk(KERN_WARNING "Cannot malloc new mac entry\n"); + return 0; + } + memcpy(entry->mac, mac, ETH_ALEN); + entry->seq_num[tid] = header->seq_ctl; + entry->packet_time[tid] = jiffies; + list_add(&entry->list, &ieee->mesh_mac_hash[index]); + return 0; + } + last_seq = &entry->seq_num[tid]; + last_time = &entry->packet_time[tid]; + + if (unlikely(rtllib_has_retry(fc) && + *last_seq == header->seq_ctl)) { + goto drop; + } else { + *last_seq = header->seq_ctl; + } + *last_time = jiffies; + } + return 0; +#endif + default: + return 0; + } + + if ((*last_seq == seq) && + time_after(*last_time + IEEE_PACKET_RETRY_TIME, jiffies)) { + if (*last_frag == frag){ + goto drop; + + } + if (*last_frag + 1 != frag) + /* out-of-order fragment */ + goto drop; + } else + *last_seq = seq; + + *last_frag = frag; + *last_time = jiffies; + return 0; + +drop: + + return 1; +} +bool +AddReorderEntry( + PRX_TS_RECORD pTS, + PRX_REORDER_ENTRY pReorderEntry + ) +{ + struct list_head *pList = &pTS->RxPendingPktList; + + while(pList->next != &pTS->RxPendingPktList) + { + if( SN_LESS(pReorderEntry->SeqNum, ((PRX_REORDER_ENTRY)list_entry(pList->next,RX_REORDER_ENTRY,List))->SeqNum) ) + { + pList = pList->next; + } + else if( SN_EQUAL(pReorderEntry->SeqNum, ((PRX_REORDER_ENTRY)list_entry(pList->next,RX_REORDER_ENTRY,List))->SeqNum) ) + { + return false; + } + else + { + break; + } + } + pReorderEntry->List.next = pList->next; + pReorderEntry->List.next->prev = &pReorderEntry->List; + pReorderEntry->List.prev = pList; + pList->next = &pReorderEntry->List; + + return true; +} + +void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb** prxbIndicateArray,u8 index) +{ + struct net_device_stats *stats = &ieee->stats; + u8 i = 0 , j=0; + u16 ethertype; + for(j = 0; jWapiSupport) && (ieee->wapiInfo.bWapiEnable)) + { + if(WapiCheckDropForRxReorderCase(ieee,prxb)) + { + WAPI_TRACE(WAPI_ERR, "%s(): Rx Reorder Drop case!!\n", __FUNCTION__); + for(i = 0; inr_subframes; i++) { + if(prxb->subframes[i]) + dev_kfree_skb(prxb->subframes[i]); + } + prxb->nr_subframes = 0; + } + } +#endif + for(i = 0; inr_subframes; i++) { + struct sk_buff *sub_skb = prxb->subframes[i]; + + /* convert hdr + possible LLC headers into Ethernet header */ + ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7]; + if (sub_skb->len >= 8 && + ((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 && + ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) || + memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) { + /* remove RFC1042 or Bridge-Tunnel encapsulation and + * replace EtherType */ + skb_pull(sub_skb, SNAP_SIZE); + memcpy(skb_push(sub_skb, ETH_ALEN), prxb->src, ETH_ALEN); + memcpy(skb_push(sub_skb, ETH_ALEN), prxb->dst, ETH_ALEN); + } else { + u16 len; + /* Leave Ethernet header part of hdr and full payload */ + len = htons(sub_skb->len); + memcpy(skb_push(sub_skb, 2), &len, 2); + memcpy(skb_push(sub_skb, ETH_ALEN), prxb->src, ETH_ALEN); + memcpy(skb_push(sub_skb, ETH_ALEN), prxb->dst, ETH_ALEN); + } + + /* Indicat the packets to upper layer */ + if (sub_skb) { + stats->rx_packets++; + stats->rx_bytes += sub_skb->len; + + memset(sub_skb->cb, 0, sizeof(sub_skb->cb)); +#ifdef _RTL8192_EXT_PATCH_ + sub_skb->protocol = eth_type_trans(sub_skb, sub_skb->dev); +#else + sub_skb->protocol = eth_type_trans(sub_skb, ieee->dev); + sub_skb->dev = ieee->dev; +#endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + sub_skb->dev->stats.rx_packets++; + sub_skb->dev->stats.rx_bytes += sub_skb->len; +#endif +#ifdef TCP_CSUM_OFFLOAD_RX + if ( prxb->tcp_csum_valid) + sub_skb->ip_summed = CHECKSUM_UNNECESSARY; + else + sub_skb->ip_summed = CHECKSUM_NONE; + +#else + sub_skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */ +#endif + ieee->last_rx_ps_time = jiffies; + netif_rx(sub_skb); + } + } + kfree(prxb); + prxb = NULL; + } +} + +void +rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, PRX_TS_RECORD pTS) +{ + PRX_REORDER_ENTRY pRxReorderEntry; + struct rtllib_rxb* RfdArray[REORDER_WIN_SIZE]; + u8 RfdCnt = 0; + unsigned long flags; + + spin_lock_irqsave(&(ieee->reorder_spinlock), flags); + + del_timer_sync(&pTS->RxPktPendingTimer); + while(!list_empty(&pTS->RxPendingPktList)) + { + if(RfdCnt >= REORDER_WIN_SIZE){ + printk("-------------->%s() error! RfdCnt >= REORDER_WIN_SIZE\n", __func__); + break; + } + + pRxReorderEntry = (PRX_REORDER_ENTRY)list_entry(pTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List); + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): Indicate SeqNum %d!\n",__FUNCTION__, pRxReorderEntry->SeqNum); + list_del_init(&pRxReorderEntry->List); + + RfdArray[RfdCnt] = pRxReorderEntry->prxb; + + RfdCnt = RfdCnt + 1; + list_add_tail(&pRxReorderEntry->List, &ieee->RxReorder_Unused_List); + } + rtllib_indicate_packets(ieee, RfdArray, RfdCnt); + + pTS->RxIndicateSeq = 0xffff; + + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); +#ifdef MERGE_TO_DO +#endif +} + + +void RxReorderIndicatePacket( struct rtllib_device *ieee, + struct rtllib_rxb* prxb, + PRX_TS_RECORD pTS, + u16 SeqNum) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + PRX_REORDER_ENTRY pReorderEntry = NULL; + struct rtllib_rxb* prxbIndicateArray[REORDER_WIN_SIZE]; + u8 WinSize = pHTInfo->RxReorderWinSize; + u16 WinEnd = 0; + u8 index = 0; + bool bMatchWinStart = false, bPktInBuf = false; + unsigned long flags; + + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__FUNCTION__,SeqNum,pTS->RxIndicateSeq,WinSize); + + spin_lock_irqsave(&(ieee->reorder_spinlock), flags); + + WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096; +#if 0 + if(!list_empty(&ieee->RxReorder_Unused_List)) + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): ieee->RxReorder_Unused_List is nut NULL\n"); +#endif + /* Rx Reorder initialize condition.*/ + if(pTS->RxIndicateSeq == 0xffff) { + pTS->RxIndicateSeq = SeqNum; + } + + /* Drop out the packet which SeqNum is smaller than WinStart */ + if(SN_LESS(SeqNum, pTS->RxIndicateSeq)) { + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"Packet Drop! IndicateSeq: %d, NewSeq: %d\n", + pTS->RxIndicateSeq, SeqNum); + pHTInfo->RxReorderDropCounter++; + { + int i; + for(i =0; i < prxb->nr_subframes; i++) { + dev_kfree_skb(prxb->subframes[i]); + } + kfree(prxb); + prxb = NULL; + } + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); + return; + } + + /* + * Sliding window manipulation. Conditions includes: + * 1. Incoming SeqNum is equal to WinStart =>Window shift 1 + * 2. Incoming SeqNum is larger than the WinEnd => Window shift N + */ + if(SN_EQUAL(SeqNum, pTS->RxIndicateSeq)) { + pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096; + bMatchWinStart = true; + } else if(SN_LESS(WinEnd, SeqNum)) { + if(SeqNum >= (WinSize - 1)) { + pTS->RxIndicateSeq = SeqNum + 1 -WinSize; + } else { + pTS->RxIndicateSeq = 4095 - (WinSize - (SeqNum +1)) + 1; + } + RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Window Shift! IndicateSeq: %d, NewSeq: %d\n",pTS->RxIndicateSeq, SeqNum); + } + + /* + * Indication process. + * After Packet dropping and Sliding Window shifting as above, we can now just indicate the packets + * with the SeqNum smaller than latest WinStart and buffer other packets. + */ + /* For Rx Reorder condition: + * 1. All packets with SeqNum smaller than WinStart => Indicate + * 2. All packets with SeqNum larger than or equal to WinStart => Buffer it. + */ + if(bMatchWinStart) { + /* Current packet is going to be indicated.*/ + RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Packets indication!! IndicateSeq: %d, NewSeq: %d\n",\ + pTS->RxIndicateSeq, SeqNum); + prxbIndicateArray[0] = prxb; + index = 1; + } else { + /* Current packet is going to be inserted into pending list.*/ + if(!list_empty(&ieee->RxReorder_Unused_List)) { + pReorderEntry = (PRX_REORDER_ENTRY)list_entry(ieee->RxReorder_Unused_List.next,RX_REORDER_ENTRY,List); + list_del_init(&pReorderEntry->List); + + /* Make a reorder entry and insert into a the packet list.*/ + pReorderEntry->SeqNum = SeqNum; + pReorderEntry->prxb = prxb; + +#if 1 + if(!AddReorderEntry(pTS, pReorderEntry)) { + RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Duplicate packet is dropped!! IndicateSeq: %d, NewSeq: %d\n", + __FUNCTION__, pTS->RxIndicateSeq, SeqNum); + list_add_tail(&pReorderEntry->List,&ieee->RxReorder_Unused_List); + { + int i; + for(i =0; i < prxb->nr_subframes; i++) { + dev_kfree_skb(prxb->subframes[i]); + } + kfree(prxb); + prxb = NULL; + } + } else { + RTLLIB_DEBUG(RTLLIB_DL_REORDER, + "Pkt insert into buffer!! IndicateSeq: %d, NewSeq: %d\n",pTS->RxIndicateSeq, SeqNum); + } +#endif + } + else { + /* + * Packets are dropped if there is not enough reorder entries. + * This part shall be modified!! We can just indicate all the + * packets in buffer and get reorder entries. + */ + RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): There is no reorder entry!! Packet is dropped!!\n"); + { + int i; + for(i =0; i < prxb->nr_subframes; i++) { + dev_kfree_skb(prxb->subframes[i]); + } + kfree(prxb); + prxb = NULL; + } + } + } + + /* Check if there is any packet need indicate.*/ + while(!list_empty(&pTS->RxPendingPktList)) { + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): start RREORDER indicate\n",__FUNCTION__); +#if 1 + pReorderEntry = (PRX_REORDER_ENTRY)list_entry(pTS->RxPendingPktList.prev,RX_REORDER_ENTRY,List); + if( SN_LESS(pReorderEntry->SeqNum, pTS->RxIndicateSeq) || + SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq)) + { + /* This protect buffer from overflow. */ + if(index >= REORDER_WIN_SIZE) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): Buffer overflow!! \n"); + bPktInBuf = true; + break; + } + + list_del_init(&pReorderEntry->List); + + if(SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq)) + pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096; + + prxbIndicateArray[index] = pReorderEntry->prxb; + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): Indicate SeqNum %d!\n",__FUNCTION__, pReorderEntry->SeqNum); + index++; + + list_add_tail(&pReorderEntry->List,&ieee->RxReorder_Unused_List); + } else { + bPktInBuf = true; + break; + } +#endif + } + + /* Handling pending timer. Set this timer to prevent from long time Rx buffering.*/ + if(index>0) { + if(timer_pending(&pTS->RxPktPendingTimer)){ + del_timer_sync(&pTS->RxPktPendingTimer); + } + pTS->RxTimeoutIndicateSeq = 0xffff; + + if(index>REORDER_WIN_SIZE){ + RTLLIB_DEBUG(RTLLIB_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n"); + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); + return; + } + rtllib_indicate_packets(ieee, prxbIndicateArray, index); + bPktInBuf = false; + } + + if(bPktInBuf && pTS->RxTimeoutIndicateSeq==0xffff) { + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): SET rx timeout timer\n", __FUNCTION__); + pTS->RxTimeoutIndicateSeq = pTS->RxIndicateSeq; + mod_timer(&pTS->RxPktPendingTimer, jiffies + MSECS(pHTInfo->RxReorderPendingTime)); + } + spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); +} + +u8 parse_subframe(struct rtllib_device* ieee,struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats, + struct rtllib_rxb *rxb,u8* src,u8* dst) +{ + struct rtllib_hdr_3addr *hdr = (struct rtllib_hdr_3addr* )skb->data; + u16 fc = le16_to_cpu(hdr->frame_ctl); + + u16 LLCOffset= sizeof(struct rtllib_hdr_3addr); + u16 ChkLength; + bool bIsAggregateFrame = false; + u16 nSubframe_Length; + u8 nPadding_Length = 0; + u16 SeqNum=0; + struct sk_buff *sub_skb; + u8 *data_ptr; + /* just for debug purpose */ + SeqNum = WLAN_GET_SEQ_SEQ(le16_to_cpu(hdr->seq_ctl)); + if((RTLLIB_QOS_HAS_SEQ(fc))&&\ + (((frameqos *)(skb->data + RTLLIB_3ADDR_LEN))->field.reserved)) { + bIsAggregateFrame = true; + } + + if(RTLLIB_QOS_HAS_SEQ(fc)) { + LLCOffset += 2; + } + if(rx_stats->bContainHTC) { + LLCOffset += sHTCLng; + } + ChkLength = LLCOffset;/* + (Frame_WEP(frame)!=0 ?Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead:0);*/ + + if( skb->len <= ChkLength ) { + return 0; + } + + skb_pull(skb, LLCOffset); + ieee->bIsAggregateFrame = bIsAggregateFrame; + if(!bIsAggregateFrame) { + rxb->nr_subframes = 1; +#ifndef RTK_DMP_PLATFORM +#ifdef JOHN_NOCPY + rxb->subframes[0] = skb; +#else + rxb->subframes[0] = skb_copy(skb, GFP_ATOMIC); +#endif +#else + rxb->subframes[0] = skb_clone(skb, GFP_ATOMIC); +#endif + memcpy(rxb->src,src,ETH_ALEN); + memcpy(rxb->dst,dst,ETH_ALEN); + rxb->subframes[0]->dev = ieee->dev; + return 1; + } else { + rxb->nr_subframes = 0; + memcpy(rxb->src,src,ETH_ALEN); + memcpy(rxb->dst,dst,ETH_ALEN); + while(skb->len > ETHERNET_HEADER_SIZE) { + /* Offset 12 denote 2 mac address */ + nSubframe_Length = *((u16*)(skb->data + 12)); + nSubframe_Length = (nSubframe_Length>>8) + (nSubframe_Length<<8); + + if(skb->len<(ETHERNET_HEADER_SIZE + nSubframe_Length)) { + printk("%s: A-MSDU parse error!! pRfd->nTotalSubframe : %d\n",\ + __FUNCTION__,rxb->nr_subframes); + printk("%s: A-MSDU parse error!! Subframe Length: %d\n",__FUNCTION__, nSubframe_Length); + printk("nRemain_Length is %d and nSubframe_Length is : %d\n",skb->len,nSubframe_Length); + printk("The Packet SeqNum is %d\n",SeqNum); + return 0; + } + + /* move the data point to data content */ + skb_pull(skb, ETHERNET_HEADER_SIZE); + +#ifdef JOHN_NOCPY + sub_skb = skb_clone(skb, GFP_ATOMIC); + sub_skb->len = nSubframe_Length; + sub_skb->tail = sub_skb->data + nSubframe_Length; +#else + /* Allocate new skb for releasing to upper layer */ + sub_skb = dev_alloc_skb(nSubframe_Length + 12); + skb_reserve(sub_skb, 12); + data_ptr = (u8 *)skb_put(sub_skb, nSubframe_Length); + memcpy(data_ptr,skb->data,nSubframe_Length); +#endif + sub_skb->dev = ieee->dev; + rxb->subframes[rxb->nr_subframes++] = sub_skb; + if(rxb->nr_subframes >= MAX_SUBFRAME_COUNT) { + RTLLIB_DEBUG_RX("ParseSubframe(): Too many Subframes! Packets dropped!\n"); + break; + } + skb_pull(skb,nSubframe_Length); + + if(skb->len != 0) { + nPadding_Length = 4 - ((nSubframe_Length + ETHERNET_HEADER_SIZE) % 4); + if(nPadding_Length == 4) { + nPadding_Length = 0; + } + + if(skb->len < nPadding_Length) { + return 0; + } + + skb_pull(skb,nPadding_Length); + } + } +#ifdef JOHN_NOCPY + dev_kfree_skb(skb); +#endif + return rxb->nr_subframes; + } +} + + +size_t rtllib_rx_get_hdrlen(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_ctl); + size_t hdrlen = 0; + + hdrlen = rtllib_get_hdrlen(fc); + if (HTCCheck(ieee, skb->data)) { + if(net_ratelimit()) + printk("%s: find HTCControl!\n", __func__); + hdrlen += 4; + rx_stats->bContainHTC = 1; + } + + if(RTLLIB_QOS_HAS_SEQ(fc)) + rx_stats->bIsQosData = 1; + + return hdrlen; +} + +int rtllib_rx_check_duplicate(struct rtllib_device *ieee, struct sk_buff *skb, u8 multicast) +{ + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + u16 fc, sc; + u8 frag, type, stype; + + fc = le16_to_cpu(hdr->frame_ctl); + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + sc = le16_to_cpu(hdr->seq_ctl); + frag = WLAN_GET_SEQ_FRAG(sc); + +#ifdef _RTL8192_EXT_PATCH_ + if( (ieee->pHTInfo->bCurRxReorderEnable == false) || + !ieee->current_network.qos_data.active|| + !IsDataFrame(skb->data) || + IsLegacyDataFrame(skb->data) || + multicast) { + if (!multicast) { + if (is_duplicate_packet(ieee, hdr)){ + return -1; + } + } + } +#else + if( (ieee->pHTInfo->bCurRxReorderEnable == false) || + !ieee->current_network.qos_data.active || + !IsDataFrame(skb->data) || + IsLegacyDataFrame(skb->data)) { + if(!((type == RTLLIB_FTYPE_MGMT) && (stype == RTLLIB_STYPE_BEACON))){ + if (is_duplicate_packet(ieee, hdr)){ + return -1; + } + } + } +#endif + else { + PRX_TS_RECORD pRxTS = NULL; + if (GetTs(ieee, (PTS_COMMON_INFO*) &pRxTS, hdr->addr2, + (u8)Frame_QoSTID((u8*)(skb->data)), RX_DIR, true)) { + if ((fc & (1<<11)) && (frag == pRxTS->RxLastFragNum) && + (WLAN_GET_SEQ_SEQ(sc) == pRxTS->RxLastSeqNum)) { + return -1; + } else { + pRxTS->RxLastFragNum = frag; + pRxTS->RxLastSeqNum = WLAN_GET_SEQ_SEQ(sc); + } + } else { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR!!%s(): No TS!! Skip the check!!\n",__FUNCTION__); + return -1; + } + } + + return 0; +} +void rtllib_rx_extract_addr(struct rtllib_device *ieee, struct rtllib_hdr_4addr *hdr, u8 *dst, u8 *src, u8 *bssid) +{ + u16 fc = le16_to_cpu(hdr->frame_ctl); + + switch (fc & (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) { + case RTLLIB_FCTL_FROMDS: + memcpy(dst, hdr->addr1, ETH_ALEN); + memcpy(src, hdr->addr3, ETH_ALEN); + memcpy(bssid, hdr->addr2, ETH_ALEN); + break; + case RTLLIB_FCTL_TODS: + memcpy(dst, hdr->addr3, ETH_ALEN); + memcpy(src, hdr->addr2, ETH_ALEN); + memcpy(bssid, hdr->addr1, ETH_ALEN); + break; + case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS: + memcpy(dst, hdr->addr3, ETH_ALEN); + memcpy(src, hdr->addr4, ETH_ALEN); +#ifdef _RTL8192_EXT_PATCH_ + memcpy(bssid, ieee->current_mesh_network.bssid, ETH_ALEN); +#else + memcpy(bssid, ieee->current_network.bssid, ETH_ALEN); +#endif + break; + case 0: + memcpy(dst, hdr->addr1, ETH_ALEN); + memcpy(src, hdr->addr2, ETH_ALEN); + memcpy(bssid, hdr->addr3, ETH_ALEN); + break; + } +} +int rtllib_rx_data_filter(struct rtllib_device *ieee, u16 fc, u8 *dst, u8 *src, u8 *bssid, u8 *addr2) +{ + u8 zero_addr[ETH_ALEN] = {0}; + u8 type, stype; + + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + + /* Filter frames from different BSS */ + if (((fc & RTLLIB_FCTL_DSTODS) != RTLLIB_FCTL_DSTODS) + && (compare_ether_addr(ieee->current_network.bssid, bssid) != 0) + && memcmp(ieee->current_network.bssid, zero_addr, ETH_ALEN)) { + return -1; + } + + /* Filter packets sent by an STA that will be forwarded by AP */ + if ( ieee->IntelPromiscuousModeInfo.bPromiscuousOn && + ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame ) { + if ((fc & RTLLIB_FCTL_TODS) && !(fc & RTLLIB_FCTL_FROMDS) && + (compare_ether_addr(dst, ieee->current_network.bssid) != 0) && + (compare_ether_addr(bssid, ieee->current_network.bssid) == 0)) { + return -1; + } + } + + /* Nullfunc frames may have PS-bit set, so they must be passed to + * hostap_handle_sta_rx() before being dropped here. */ + if(!ieee->IntelPromiscuousModeInfo.bPromiscuousOn){ + if (stype != RTLLIB_STYPE_DATA && + stype != RTLLIB_STYPE_DATA_CFACK && + stype != RTLLIB_STYPE_DATA_CFPOLL && + stype != RTLLIB_STYPE_DATA_CFACKPOLL&& + stype != RTLLIB_STYPE_QOS_DATA + ) { + if (stype != RTLLIB_STYPE_NULLFUNC) + RTLLIB_DEBUG_DROP( + "RX: dropped data frame " + "with no data (type=0x%02x, " + "subtype=0x%02x)\n", + type, stype); + return -1; + } + } + + if(ieee->iw_mode == IW_MODE_MESH) { +#ifdef _RTL8192_EXT_PATCH_ + /* check whether it exists the mesh entry for data packet */ + if(ieee->ext_patch_rtllib_is_mesh&&\ + (false ==ieee->ext_patch_rtllib_is_mesh(ieee, addr2))) { + if(ieee->only_mesh) { + return -1; + } else if(memcmp(bssid, ieee->current_network.bssid, ETH_ALEN)) { + return -1; + } + } +#endif + } else { + /* packets from our adapter are dropped (echo) */ + if (!memcmp(src, ieee->dev->dev_addr, ETH_ALEN)) + return -1; + + /* {broad,multi}cast packets to our BSS go through */ + if (is_multicast_ether_addr(dst) || is_broadcast_ether_addr(dst)) { + if (memcmp(bssid, ieee->current_network.bssid, ETH_ALEN)) { + return -1; + } + } + } + return 0; +} +int rtllib_rx_get_crypt( + struct rtllib_device *ieee, + struct sk_buff *skb, + struct rtllib_crypt_data **crypt, + size_t hdrlen) +{ + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_ctl); + int idx = 0; + +#if defined (RTL8192S_WAPI_SUPPORT) + if (ieee->host_decrypt && (!ieee->wapiInfo.bWapiEnable)) +#else + if (ieee->host_decrypt) +#endif + { + if (skb->len >= hdrlen + 3) + idx = skb->data[hdrlen + 3] >> 6; + +#ifdef _RTL8192_EXT_PATCH_ + *crypt = ieee->sta_crypt[idx]; +#else + *crypt = ieee->crypt[idx]; +#endif + /* allow NULL decrypt to indicate an station specific override + * for default encryption */ + if (*crypt && ((*crypt)->ops == NULL || + (*crypt)->ops->decrypt_mpdu == NULL)) + *crypt = NULL; + + if (!*crypt && (fc & RTLLIB_FCTL_WEP)) { + /* This seems to be triggered by some (multicast?) + * frames from other than current BSS, so just drop the + * frames silently instead of filling system log with + * these reports. */ + RTLLIB_DEBUG_DROP("Decryption failed (not set)" + " (SA=" MAC_FMT ")\n", + MAC_ARG(hdr->addr2)); + ieee->ieee_stats.rx_discards_undecryptable++; + return -1; + } + } + + return 0; +} +int rtllib_rx_decrypt( + struct rtllib_device *ieee, + struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats, + struct rtllib_crypt_data *crypt, + size_t hdrlen) +{ + struct rtllib_hdr_4addr *hdr; + int keyidx = 0; + u16 fc, sc; + u8 frag; + + hdr = (struct rtllib_hdr_4addr *)skb->data; + fc = le16_to_cpu(hdr->frame_ctl); + sc = le16_to_cpu(hdr->seq_ctl); + frag = WLAN_GET_SEQ_FRAG(sc); + + if((!rx_stats->Decrypted)){ + ieee->need_sw_enc = 1; + }else{ + ieee->need_sw_enc = 0; + } + + if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) && + ((keyidx = rtllib_rx_frame_decrypt(ieee, skb, crypt)) < 0) +#if defined (RTL8192S_WAPI_SUPPORT) + && (!ieee->wapiInfo.bWapiEnable) +#endif + ) + { + printk("%s: decrypt frame error\n", __func__); + return -1; + } + +#if defined (RTL8192S_WAPI_SUPPORT) + if(ieee->wapiInfo.bWapiEnable){ + if(ieee->pairwise_key_type == KEY_TYPE_SMS4){ + if(false == SecSWSMS4Decryption(ieee, skb, rx_stats)){ + WAPI_TRACE(WAPI_ERR, "%s():SMS4 decrypt frame error\n",__func__); + return -1; + } + } + } +#endif + hdr = (struct rtllib_hdr_4addr *) skb->data; + if ((frag != 0 || (fc & RTLLIB_FCTL_MOREFRAGS))) { + int flen; + struct sk_buff *frag_skb = rtllib_frag_cache_get(ieee, hdr); + RTLLIB_DEBUG_FRAG("Rx Fragment received (%u)\n", frag); + + if (!frag_skb) { + RTLLIB_DEBUG(RTLLIB_DL_RX | RTLLIB_DL_FRAG, + "Rx cannot get skb from fragment " + "cache (morefrag=%d seq=%u frag=%u)\n", + (fc & RTLLIB_FCTL_MOREFRAGS) != 0, + WLAN_GET_SEQ_SEQ(sc), frag); + return -1; + } + flen = skb->len; + if (frag != 0) + flen -= hdrlen; + + if (frag_skb->tail + flen > frag_skb->end) { + printk(KERN_WARNING "%s: host decrypted and " + "reassembled frame did not fit skb\n", + __func__); + rtllib_frag_cache_invalidate(ieee, hdr); + return -1; + } + + if (frag == 0) { + /* copy first fragment (including full headers) into + * beginning of the fragment cache skb */ + memcpy(skb_put(frag_skb, flen), skb->data, flen); + } else { + /* append frame payload to the end of the fragment + * cache skb */ + memcpy(skb_put(frag_skb, flen), skb->data + hdrlen, + flen); + } + dev_kfree_skb_any(skb); + skb = NULL; + + if (fc & RTLLIB_FCTL_MOREFRAGS) { + /* more fragments expected - leave the skb in fragment + * cache for now; it will be delivered to upper layers + * after all fragments have been received */ + return -2; + } + + /* this was the last fragment and the frame will be + * delivered, so remove skb from fragment cache */ + skb = frag_skb; + hdr = (struct rtllib_hdr_4addr *) skb->data; + rtllib_frag_cache_invalidate(ieee, hdr); + } + + /* skb: hdr + (possible reassembled) full MSDU payload; possibly still + * encrypted/authenticated */ + if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) && +#if defined (RTL8192S_WAPI_SUPPORT) + (!ieee->wapiInfo.bWapiEnable) && +#endif + rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) + { + printk("%s: ==>decrypt msdu error\n", __func__); + return -1; + } + + hdr = (struct rtllib_hdr_4addr *) skb->data; + if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep) { + if (/*ieee->ieee802_1x &&*/ + rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + +#ifdef CONFIG_RTLLIB_DEBUG + /* pass unencrypted EAPOL frames even if encryption is + * configured */ + struct eapol *eap = (struct eapol *)(skb->data + + 24); + RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n", + eap_get_type(eap->type)); +#endif + } else { + RTLLIB_DEBUG_DROP( + "encryption configured, but RX " + "frame not encrypted (SA=" MAC_FMT ")\n", + MAC_ARG(hdr->addr2)); + return -1; + } + } + +#ifdef CONFIG_RTLLIB_DEBUG + if (crypt && !(fc & RTLLIB_FCTL_WEP) && + rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + struct eapol *eap = (struct eapol *)(skb->data + + 24); + RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n", + eap_get_type(eap->type)); + } +#endif + + if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep && + !rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + RTLLIB_DEBUG_DROP( + "dropped unencrypted RX data " + "frame from " MAC_FMT + " (drop_unencrypted=1)\n", + MAC_ARG(hdr->addr2)); + return -1; + } + + if(rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + printk(KERN_WARNING "RX: IEEE802.1X EPAOL frame!\n"); + } + + return 0; +} +void rtllib_rx_check_leave_lps(struct rtllib_device *ieee, u8 unicast, u8 nr_subframes) +{ +#if !defined(RTL8192SU) && !defined(RTL8192U) +#ifdef ENABLE_LPS + if(unicast){ + ieee->LinkDetectInfo.NumRxUnicastOkInPeriod += nr_subframes; + + if((ieee->state == RTLLIB_LINKED) /*&& !MgntInitAdapterInProgress(pMgntInfo)*/) + { + if( ((ieee->LinkDetectInfo.NumRxUnicastOkInPeriod +ieee->LinkDetectInfo.NumTxOkInPeriod) > 8 ) || + (ieee->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) ) + { + if(ieee->LeisurePSLeave) + ieee->LeisurePSLeave(ieee->dev); + } + } + } +#endif +#endif + ieee->last_rx_ps_time = jiffies; +} +void rtllib_rx_indicate_pkt_legacy( + struct rtllib_device *ieee, + struct rtllib_rx_stats *rx_stats, + struct rtllib_rxb* rxb, + u8 *dst, + u8 *src) +{ +#ifndef _RTL8192_EXT_PATCH_ + struct net_device *dev = ieee->dev; +#endif + u16 ethertype; + int i = 0; + + if(rxb == NULL){ + printk("%s: rxb is NULL!!\n", __func__); + return ; + } + + for(i = 0; inr_subframes; i++) { + struct sk_buff *sub_skb = rxb->subframes[i]; + + if (sub_skb) { + /* convert hdr + possible LLC headers into Ethernet header */ + ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7]; + if (sub_skb->len >= 8 && + ((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 && + ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) || + memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) { + /* remove RFC1042 or Bridge-Tunnel encapsulation and + * replace EtherType */ + skb_pull(sub_skb, SNAP_SIZE); + memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN); + memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN); + } else { + u16 len; + /* Leave Ethernet header part of hdr and full payload */ + len = htons(sub_skb->len); + memcpy(skb_push(sub_skb, 2), &len, 2); + memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN); + memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN); + } + + ieee->stats.rx_packets++; + ieee->stats.rx_bytes += sub_skb->len; + + if(is_multicast_ether_addr(dst)) { + ieee->stats.multicast++; + } + + /* Indicat the packets to upper layer */ + memset(sub_skb->cb, 0, sizeof(sub_skb->cb)); +#ifdef _RTL8192_EXT_PATCH_ + sub_skb->protocol = eth_type_trans(sub_skb, sub_skb->dev); +#else + sub_skb->protocol = eth_type_trans(sub_skb, dev); + sub_skb->dev = dev; +#endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + sub_skb->dev->stats.rx_packets++; + sub_skb->dev->stats.rx_bytes += sub_skb->len; +#endif +#ifdef TCP_CSUM_OFFLOAD_RX + if ( rx_stats->tcp_csum_valid) + sub_skb->ip_summed = CHECKSUM_UNNECESSARY; + else + sub_skb->ip_summed = CHECKSUM_NONE; +#else + sub_skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */ +#endif + netif_rx(sub_skb); + } + } + kfree(rxb); + rxb = NULL; +} +int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ + struct net_device *dev = ieee->dev; + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + struct rtllib_crypt_data *crypt = NULL; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + struct sta_info * psta = NULL; +#endif + struct rtllib_rxb* rxb = NULL; + PRX_TS_RECORD pTS = NULL; + u16 fc, sc, SeqNum = 0; + u8 type, stype, multicast = 0, unicast = 0, nr_subframes = 0, TID = 0; + u8 dst[ETH_ALEN], src[ETH_ALEN], bssid[ETH_ALEN] = {0}, *payload; + size_t hdrlen = 0; +#if defined (RTL8192S_WAPI_SUPPORT) + u8 wapiDectResult = 0; +#endif + bool bToOtherSTA = false; + int ret = 0, i = 0; + + hdr = (struct rtllib_hdr_4addr *)skb->data; + fc = le16_to_cpu(hdr->frame_ctl); + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + sc = le16_to_cpu(hdr->seq_ctl); + + /*Filter pkt not to me*/ + multicast = is_multicast_ether_addr(hdr->addr1)|is_broadcast_ether_addr(hdr->addr1); + unicast = !multicast; + if (unicast && (compare_ether_addr(dev->dev_addr, hdr->addr1) != 0)) { + if(ieee->bNetPromiscuousMode) + bToOtherSTA = true; + else + goto rx_dropped; + } + + /*Filter pkt has too small length */ + hdrlen = rtllib_rx_get_hdrlen(ieee, skb, rx_stats); + if(skb->len < hdrlen){ + printk("%s():ERR!!! skb->len is smaller than hdrlen\n",__FUNCTION__); + goto rx_dropped; + } + + /* Filter Duplicate pkt */ + ret = rtllib_rx_check_duplicate(ieee, skb, multicast); + if(ret < 0) + goto rx_dropped; + + /* Filter CTRL Frame */ + if (type == RTLLIB_FTYPE_CTL) { + goto rx_dropped; + } + + /* Filter MGNT Frame */ + if (type == RTLLIB_FTYPE_MGMT) { + if(bToOtherSTA) + goto rx_dropped; + if (rtllib_rx_frame_mgmt(ieee, skb, rx_stats, type, stype)) + goto rx_dropped; + else + goto rx_exit; + } + + /* Filter WAPI DATA Frame */ +#if defined (RTL8192S_WAPI_SUPPORT) + if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){ + wapiDectResult = SecIsWAIPacket(ieee, skb); + if(wapiDectResult !=0){ + if(memcmp(&ieee->wapiInfo.wapiSeqnumAndFragNum,&sc,2)) + WapiHandleRecvPacket(ieee, skb, wapiDectResult); + memcpy(&ieee->wapiInfo.wapiSeqnumAndFragNum,&sc,2); + dev_kfree_skb_any(skb); + goto rx_exit; + } + } +#endif + + /* Update statstics for AP roaming */ + if(!bToOtherSTA){ + ieee->LinkDetectInfo.NumRecvDataInPeriod++; + ieee->LinkDetectInfo.NumRxOkInPeriod++; + } + dev->last_rx = jiffies; + + /* Data frame - extract src/dst addresses */ + rtllib_rx_extract_addr(ieee, hdr, dst, src, bssid); + + /* Filter Data frames */ + ret = rtllib_rx_data_filter(ieee, fc, dst, src, bssid, hdr->addr2); + if(ret < 0) + goto rx_dropped; + + if(skb->len == hdrlen){ + goto rx_dropped; + } + + /* Send pspoll based on moredata */ +#ifdef ENABLE_LPS + if ((ieee->iw_mode == IW_MODE_INFRA) && (ieee->sta_sleep == 1) + && (ieee->polling) && (!bToOtherSTA)) { + if (WLAN_FC_MORE_DATA(fc)) { + /* more data bit is set, let's request a new frame from the AP */ + rtllib_sta_ps_send_pspoll_frame(ieee); + } else { + ieee->polling = false; + } + } +#endif + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC){ + psta = GetStaInfo(ieee, src); + if(NULL != psta) + psta->LastActiveTime = jiffies; + } +#endif + + /* Get crypt if encrypted */ + ret = rtllib_rx_get_crypt(ieee, skb, &crypt, hdrlen); + if(ret == -1) + goto rx_dropped; + + /* Decrypt data frame (including reassemble) */ + ret = rtllib_rx_decrypt(ieee, skb, rx_stats, crypt, hdrlen); + if(ret == -1) + goto rx_dropped; + else if(ret == -2) + goto rx_exit; + + /* Get TS for Rx Reorder */ + hdr = (struct rtllib_hdr_4addr *) skb->data; + if(ieee->current_network.qos_data.active && IsQoSDataFrame(skb->data) + && !is_multicast_ether_addr(hdr->addr1) && !is_broadcast_ether_addr(hdr->addr1) + && (!bToOtherSTA)) + { + TID = Frame_QoSTID(skb->data); + SeqNum = WLAN_GET_SEQ_SEQ(sc); + GetTs(ieee,(PTS_COMMON_INFO*) &pTS,hdr->addr2,TID,RX_DIR,true); + if(TID !=0 && TID !=3){ + ieee->bis_any_nonbepkts = true; + } + } + + /* Parse rx data frame (For AMSDU) */ + /* skb: hdr + (possible reassembled) full plaintext payload */ + payload = skb->data + hdrlen; + rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC); + if(rxb == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR,"%s(): kmalloc rxb error\n",__FUNCTION__); + goto rx_dropped; + } + /* to parse amsdu packets */ + /* qos data packets & reserved bit is 1 */ + if(parse_subframe(ieee,skb,rx_stats,rxb,src,dst) == 0) { + /* only to free rxb, and not submit the packets to upper layer */ + for(i =0; i < rxb->nr_subframes; i++) { + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + } + + /* Update WAPI PN */ +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->wapiInfo.bWapiEnable){ + if(rxb){ + rxb->UserPriority = TID; + memcpy(rxb->WapiTempPN, rx_stats->WapiTempPN, 16); + memcpy(rxb->WapiSrcAddr, rx_stats->WapiSrcAddr, 6); + rxb->bWapiCheckPNInDecrypt = rx_stats->bWapiCheckPNInDecrypt; + } + } +#endif + + /* Check if leave LPS */ + if(!bToOtherSTA){ + if(ieee->bIsAggregateFrame) + nr_subframes = rxb->nr_subframes; + else + nr_subframes = 1; + rtllib_rx_check_leave_lps(ieee, unicast, nr_subframes); + } + + /* Indicate packets to upper layer or Rx Reorder */ + if(ieee->pHTInfo->bCurRxReorderEnable == false ||pTS == NULL || bToOtherSTA){ + rtllib_rx_indicate_pkt_legacy(ieee, rx_stats, rxb, dst, src); + }else{ +#ifdef TCP_CSUM_OFFLOAD_RX + rxb->tcp_csum_valid = rx_stats->tcp_csum_valid; +#endif + RxReorderIndicatePacket(ieee, rxb, pTS, SeqNum); + } + +#ifndef JOHN_NOCPY + dev_kfree_skb(skb); +#endif + + rx_exit: + return 1; + + rx_dropped: + if (rxb != NULL) + { + kfree(rxb); + rxb = NULL; + } + ieee->stats.rx_dropped++; + + /* Returning 0 indicates to caller that we have not handled the SKB-- + * so it is still allocated and can be used again by underlying + * hardware as a DMA target */ + return 0; +} + +int rtllib_rx_Master(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ + return 0; +} +int rtllib_rx_Monitor(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_ctl); + size_t hdrlen = rtllib_get_hdrlen(fc); + + if(skb->len < hdrlen){ + printk("%s():ERR!!! skb->len is smaller than hdrlen\n", __func__); + return 0; + } + + if (HTCCheck(ieee, skb->data)) { + if(net_ratelimit()) + printk("%s: Find HTCControl!\n", __func__); + hdrlen += 4; + } + +#if WIRELESS_EXT > 15 + rtllib_monitor_rx(ieee, skb, rx_stats, hdrlen); + ieee->stats.rx_packets++; + ieee->stats.rx_bytes += skb->len; +#endif + return 1; +} +#ifdef _RTL8192_EXT_PATCH_ +extern u8 msh_parse_subframe(struct rtllib_device *ieee,struct sk_buff *skb, struct rtllib_rxb *rxb); +extern int msh_rx_process_dataframe(struct rtllib_device *ieee, struct rtllib_rxb *rxb, struct rtllib_rx_stats *rx_stats); +int rtllib_rx_get_mesh_crypt( + struct rtllib_device *ieee, + struct sk_buff *skb, + struct rtllib_crypt_data **crypt, + size_t hdrlen) +{ + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_ctl); + int idx = 0, i; + u8 find_crypt = false; + + if (ieee->host_decrypt){ + if (skb->len >= hdrlen + 3) + idx = skb->data[hdrlen + 3] >> 6; + if (ieee->mesh_sec_type == 1) { + if(ieee->mesh_security_setting==1 ||ieee->mesh_security_setting==3){ + i = rtllib_find_MP(ieee, hdr->addr2, 0); + if(is_multicast_ether_addr(hdr->addr1) || is_broadcast_ether_addr(hdr->addr1)){ + if(ieee->only_mesh){ + if(i != -1){ + i=0; + }else{ + printk("%s: Err find MP ("MAC_FMT")!SAE, Multicast and only mesh\n", __func__, MAC_ARG(hdr->addr2)); + return -1; + } + }else{ + if(i != -1){ + i=0; + }else{ + find_crypt = true; + *crypt = ieee->sta_crypt[idx]; + } + } + }else{ + if(ieee->only_mesh){ + if (i == -1){ + printk("%s: Err find MP ("MAC_FMT")!SAE, Unicast and only mesh\n", __func__, MAC_ARG(hdr->addr2)); + return -1; + } + }else{ + if (i == -1){ + find_crypt = true; + *crypt = ieee->sta_crypt[idx]; + } + } + } + if(find_crypt == false){ + if(ieee->cryptlist[i] == NULL) + return -1; + else + *crypt = ieee->cryptlist[i]->crypt[idx]; + } + } + } + else { + *crypt = ieee->cryptlist[0]->crypt[idx]; + if(*crypt){ + int i = rtllib_find_MP(ieee, hdr->addr2, 0); + if(ieee->only_mesh){ + if (i == -1){ + printk("%s: Err find MP ("MAC_FMT")!Not SAE, Only mesh.\n", __func__, MAC_ARG(hdr->addr2)); + return -1; + } + if (ieee->cryptlist[i] && ieee->cryptlist[i]->crypt[idx]) + *crypt = ieee->cryptlist[i]->crypt[idx]; + else{ + *crypt = NULL; + printk("%s: Err find crypt!Not SAE, Only mesh.\n", __func__); + return -1; + } + }else{ + if(i != -1) + { + if (ieee->cryptlist[i] && ieee->cryptlist[i]->crypt[idx]) + *crypt = ieee->cryptlist[i]->crypt[idx]; + else{ + *crypt = NULL; + printk("%s: Err find crypt!Not SAE, Only mesh.\n", __func__); + return -1; + } + } + else + *crypt = ieee->sta_crypt[idx]; + } + } + else{ + if(!ieee->ext_patch_rtllib_is_mesh(ieee,hdr->addr2)) + *crypt = ieee->sta_crypt[idx]; + } + } + + /* allow NULL decrypt to indicate an station specific override + * for default encryption */ + if (*crypt && ((*crypt)->ops == NULL || + (*crypt)->ops->decrypt_mpdu == NULL)) + *crypt = NULL; + + if (!*crypt && (fc & RTLLIB_FCTL_WEP)) { + /* This seems to be triggered by some (multicast?) + * frames from other than current BSS, so just drop the + * frames silently instead of filling system log with + * these reports. */ + RTLLIB_DEBUG_DROP("Decryption failed (not set)" + " (SA=" MAC_FMT ")\n", + MAC_ARG(hdr->addr2)); + ieee->ieee_stats.rx_discards_undecryptable++; + return -1; + } + } + return 0; +} +#endif + +int rtllib_rx_Mesh(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ +#ifdef _RTL8192_EXT_PATCH_ + struct net_device *dev = ieee->dev; + struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + struct rtllib_crypt_data *crypt = NULL; + struct rtllib_rxb* rxb = NULL; + PRX_TS_RECORD pTS = NULL; + u16 fc, sc, SeqNum = 0; + u8 type, stype, multicast = 0, unicast = 0, TID = 0; + u8 dst[ETH_ALEN], src[ETH_ALEN], bssid[ETH_ALEN] = {0}, *payload; + size_t hdrlen = 0; + int ret = 0, i = 0; + + hdr = (struct rtllib_hdr_4addr *)skb->data; + fc = le16_to_cpu(hdr->frame_ctl); + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + sc = le16_to_cpu(hdr->seq_ctl); + + /*Filter pkt not to me*/ + multicast = is_multicast_ether_addr(hdr->addr1)|is_broadcast_ether_addr(hdr->addr1); + unicast = !multicast; + if (unicast && (compare_ether_addr(dev->dev_addr, hdr->addr1) != 0)) { + goto rx_dropped; + } + + /*Filter pkt has too small length */ + hdrlen = rtllib_rx_get_hdrlen(ieee, skb, rx_stats); + if(skb->len < hdrlen){ + printk("%s():ERR!!! skb->len is smaller than hdrlen\n",__FUNCTION__); + goto rx_dropped; + } + + /* Filter Duplicate pkt */ + ret = rtllib_rx_check_duplicate(ieee, skb, multicast); + if(ret < 0){ + goto rx_dropped; + } + + /* Update PeerMP expire time */ + if(ieee->ext_patch_rtllib_rx_mgt_update_expire) + ieee->ext_patch_rtllib_rx_mgt_update_expire( ieee, skb ); + + /* Filter CTRL Frame */ + if (type == RTLLIB_FTYPE_CTL) { + goto rx_dropped; + } + + /* Filter MGNT Frame */ + if (type == RTLLIB_FTYPE_MGMT) { + if (rtllib_rx_frame_mgmt(ieee, skb, rx_stats, type, stype)){ + printk("%s: Mgnt Frame! ret!=0\n", __func__); + goto rx_dropped; + } + else + goto rx_exit; + } + + /* Update statstics for AP roaming */ + if(ieee->only_mesh == 0){ + ieee->LinkDetectInfo.NumRecvDataInPeriod++; + ieee->LinkDetectInfo.NumRxOkInPeriod++; + dev->last_rx = jiffies; + } + + /* Data frame - extract src/dst addresses */ + rtllib_rx_extract_addr(ieee, hdr, dst, src, bssid); + + /* Filter Data frames */ + ret = rtllib_rx_data_filter(ieee, fc, dst, src, bssid, hdr->addr2); + if(ret < 0){ + goto rx_dropped; + } + if(skb->len == hdrlen){ + goto rx_dropped; + } + + /* Get crypt if encrypted */ + ret = rtllib_rx_get_mesh_crypt(ieee, skb, &crypt, hdrlen); + if(ret == -1) + goto rx_dropped; + + /* Decrypt data frame (including reassemble) */ + ret = rtllib_rx_decrypt(ieee, skb, rx_stats, crypt, hdrlen); + if(ret == -1) + goto rx_dropped; + else if(ret == -2) + goto rx_exit; + + /* Get TS for Rx Reorder */ + hdr = (struct rtllib_hdr_4addr *) skb->data; + if(ieee->current_network.qos_data.active && IsQoSDataFrame(skb->data) + && !is_multicast_ether_addr(hdr->addr1) && !is_broadcast_ether_addr(hdr->addr1)) + { + TID = Frame_QoSTID(skb->data); + SeqNum = WLAN_GET_SEQ_SEQ(sc); + GetTs(ieee,(PTS_COMMON_INFO*) &pTS,hdr->addr2,TID,RX_DIR,true); + if(TID !=0 && TID !=3){ + ieee->bis_any_nonbepkts = true; + } + } + + /* Parse rx data frame */ + if((fc & (WIFI_MESH_TYPE | RTLLIB_FCTL_DSTODS)) + == (WIFI_MESH_TYPE | RTLLIB_FCTL_DSTODS)) + { + /* Parse Mesh data frame */ + rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC); + if(rxb == NULL) + { + printk("%s(): kmalloc rxb error\n", __func__); + goto rx_dropped; + } + memset(rxb, 0, sizeof(struct rtllib_rxb)); + if(msh_parse_subframe(ieee, skb, rxb)==0){ + /* only to free rxb, and not submit the packets to upper layer */ + for(i =0; i < rxb->nr_subframes; i++) { + if(rxb->subframes[i]) + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + } + ret = msh_rx_process_dataframe(ieee,rxb,rx_stats); + if(ret < 0) { + for(i =0; i < rxb->nr_subframes; i++) { + if(rxb->subframes[i]) + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + }else{ + kfree(rxb); + rxb = NULL; + } + } + else{ + /* Parse INFRA data frame (Server Ra0 mode) */ + /* skb: hdr + (possible reassembled) full plaintext payload */ + payload = skb->data + hdrlen; + rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC); + if(rxb == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR,"%s(): kmalloc rxb error\n", __func__); + goto rx_dropped; + } + /* to parse amsdu packets */ + /* qos data packets & reserved bit is 1 */ + if(parse_subframe(ieee,skb,rx_stats,rxb,src,dst) == 0) { + /* only to free rxb, and not submit the packets to upper layer */ + for(i =0; i < rxb->nr_subframes; i++) { + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + } + + /* Indicate packets to upper layer or Rx Reorder */ + if(ieee->pHTInfo->bCurRxReorderEnable == false ||pTS == NULL){ + rtllib_rx_indicate_pkt_legacy(ieee, rx_stats, rxb, dst, src); + }else{ + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): REORDER ENABLE AND PTS not NULL, and we will enter RxReorderIndicatePacket()\n",__FUNCTION__); +#ifdef TCP_CSUM_OFFLOAD_RX + rxb->tcp_csum_valid = rx_stats->tcp_csum_valid; +#endif + RxReorderIndicatePacket(ieee, rxb, pTS, SeqNum); + } + } +#ifndef JOHN_NOCPY + dev_kfree_skb(skb); +#endif + + rx_exit: + return 1; + + rx_dropped: + if (rxb != NULL) + { + kfree(rxb); + rxb = NULL; + } + ieee->stats.rx_dropped++; + + /* Returning 0 indicates to caller that we have not handled the SKB-- + * so it is still allocated and can be used again by underlying + * hardware as a DMA target */ +#endif + return 0; +} + +#if 1 +/* 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). */ +int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ + int ret = 0; + + if((NULL==ieee) || (NULL==skb) || (NULL==rx_stats)){ + printk(KERN_INFO "%s: Input parameters NULL!\n", __func__); + goto rx_dropped; + } + if (skb->len < 10) { + printk(KERN_INFO "%s: SKB length < 10 \n", __func__); + goto rx_dropped; + } + + switch(ieee->iw_mode){ + case IW_MODE_ADHOC: + case IW_MODE_INFRA: + ret = rtllib_rx_InfraAdhoc(ieee, skb, rx_stats); + break; + case IW_MODE_MASTER: + case IW_MODE_REPEAT: + ret = rtllib_rx_Master(ieee, skb, rx_stats); + break; + case IW_MODE_MONITOR: + ret = rtllib_rx_Monitor(ieee, skb, rx_stats); + break; + case IW_MODE_MESH: + ret = rtllib_rx_Mesh(ieee, skb, rx_stats); + break; + default: + printk(KERN_INFO"%s: ERR iw mode!!!\n", __func__); + break; + } + + return ret; + + rx_dropped: + ieee->stats.rx_dropped++; + return 0; +} +#else +int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, + struct rtllib_rx_stats *rx_stats) +{ + struct net_device *dev = ieee->dev; + struct rtllib_hdr_4addr *hdr; + size_t hdrlen; + u16 fc, type, stype, sc; + struct net_device_stats *stats = NULL; + unsigned int frag; + u8 *payload; + u16 ethertype; + u8 TID = 0; + u16 SeqNum = 0; + PRX_TS_RECORD pTS = NULL; +#ifdef NOT_YET + struct net_device *wds = NULL; + struct sk_buff *skb2 = NULL; + struct net_device *wds = NULL; + int frame_authorized = 0; + int from_assoc_ap = 0; + void *sta = NULL; +#endif + u8 dst[ETH_ALEN]; + u8 src[ETH_ALEN]; + u8 bssid[ETH_ALEN] = {0}; + u8 zero_addr[ETH_ALEN] = {0}; + struct rtllib_crypt_data *crypt = NULL; + int keyidx = 0; +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + struct sta_info * psta = NULL; +#endif + bool unicast_packet = false; + int i; + struct rtllib_rxb* rxb = NULL; + int multicast = 0; + bool tmp_dump = false; +#if defined _RTL8192_EXT_PATCH_ + int ret = 0; +#endif + bool bToOtherSTA = false; +#if defined (RTL8192S_WAPI_SUPPORT) + u8 wapiDectResult = 0; +#endif + hdr = (struct rtllib_hdr_4addr *)skb->data; + stats = &ieee->stats; + + multicast = is_multicast_ether_addr(hdr->addr1)|is_broadcast_ether_addr(hdr->addr1); + if (!multicast && (compare_ether_addr(dev->dev_addr, hdr->addr1) != 0)) { + if ((ieee->iw_mode == IW_MODE_MONITOR) || ieee->bNetPromiscuousMode){ + bToOtherSTA = true; + }else{ + goto rx_dropped; + } + } + + fc = le16_to_cpu(hdr->frame_ctl); + type = WLAN_FC_GET_TYPE(fc); + stype = WLAN_FC_GET_STYPE(fc); + sc = le16_to_cpu(hdr->seq_ctl); + frag = WLAN_GET_SEQ_FRAG(sc); + + ieee->need_sw_enc = 0; + + hdrlen = rtllib_get_hdrlen(fc); + if(skb->len < hdrlen){ + printk("%s():ERR!!! skb->len is smaller than hdrlen\n",__FUNCTION__); + goto rx_dropped; + } + + if (HTCCheck(ieee, skb->data)) { + if(net_ratelimit()) + printk("find HTCControl\n"); + hdrlen += 4; + rx_stats->bContainHTC = 1; + } + if(RTLLIB_QOS_HAS_SEQ(fc)) + rx_stats->bIsQosData = 1; + if ((0) && (type == RTLLIB_FTYPE_DATA) && ((is_broadcast_ether_addr(hdr->addr1)) || (compare_ether_addr(dev->dev_addr, hdr->addr1) == 0))) { + printk("===>RX data before decrypt\n"); + tmp_dump = true; + dump_buf(skb->data,skb->len); + } +#ifdef NOT_YET + hostap_update_rx_stats(local->ap, hdr, rx_stats); +#endif + +#ifndef _RTL8192_EXT_PATCH_ +#if defined (RTL8192S_WAPI_SUPPORT) + if (ieee->host_decrypt && (!ieee->wapiInfo.bWapiEnable)) +#else + if (ieee->host_decrypt) +#endif + { + int idx = 0; + if (skb->len >= hdrlen + 3) + idx = skb->data[hdrlen + 3] >> 6; + crypt = ieee->crypt[idx]; +#ifdef NOT_YET + sta = NULL; + + /* Use station specific key to override default keys if the + * receiver address is a unicast address ("individual RA"). If + * bcrx_sta_key parameter is set, station specific key is used + * even with broad/multicast targets (this is against IEEE + * 802.11, but makes it easier to use different keys with + * 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); +#endif + + /* allow NULL decrypt to indicate an station specific override + * for default encryption */ + if (crypt && (crypt->ops == NULL || + crypt->ops->decrypt_mpdu == NULL)) + crypt = NULL; + + if (!crypt && (fc & RTLLIB_FCTL_WEP)) { + /* This seems to be triggered by some (multicast?) + * frames from other than current BSS, so just drop the + * frames silently instead of filling system log with + * these reports. */ + RTLLIB_DEBUG_DROP("Decryption failed (not set)" + " (SA=" MAC_FMT ")\n", + MAC_ARG(hdr->addr2)); + ieee->ieee_stats.rx_discards_undecryptable++; + goto rx_dropped; + } + } +#endif + + if (skb->len < RTLLIB_DATA_HDR3_LEN) + goto rx_dropped; + +#ifdef _RTL8192_EXT_PATCH_ + if( (ieee->pHTInfo->bCurRxReorderEnable == false) || + !ieee->current_network.qos_data.active|| + !IsDataFrame(skb->data) || + IsLegacyDataFrame(skb->data) || + multicast) { + if (!multicast) { + if (is_duplicate_packet(ieee, hdr)){ + goto rx_dropped; + } + } + } +#else + if( (ieee->pHTInfo->bCurRxReorderEnable == false) || + !ieee->current_network.qos_data.active || + !IsDataFrame(skb->data) || + IsLegacyDataFrame(skb->data)) { + if(!((type == RTLLIB_FTYPE_MGMT) && (stype == RTLLIB_STYPE_BEACON))){ + if (is_duplicate_packet(ieee, hdr)){ + goto rx_dropped; + } + } + } +#endif + else { + PRX_TS_RECORD pRxTS = NULL; + if (GetTs(ieee, (PTS_COMMON_INFO*) &pRxTS, hdr->addr2, + (u8)Frame_QoSTID((u8*)(skb->data)), RX_DIR, true)) { + if ((fc & (1<<11)) && (frag == pRxTS->RxLastFragNum) && + (WLAN_GET_SEQ_SEQ(sc) == pRxTS->RxLastSeqNum)) { + goto rx_dropped; + } else { + pRxTS->RxLastFragNum = frag; + pRxTS->RxLastSeqNum = WLAN_GET_SEQ_SEQ(sc); + } + } else { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "ERR!!%s(): No TS!! Skip the check!!\n",__FUNCTION__); + goto rx_dropped; + } + } +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH) && ieee->ext_patch_rtllib_rx_mgt_update_expire) + ieee->ext_patch_rtllib_rx_mgt_update_expire( ieee, skb ); +#endif + if (type == RTLLIB_FTYPE_MGMT) { + if (bToOtherSTA){ + goto rx_dropped; + } + if (rtllib_rx_frame_mgmt(ieee, skb, rx_stats, type, stype)) + goto rx_dropped; + else + goto rx_exit; + } + if (type == RTLLIB_FTYPE_CTL) { + goto rx_dropped; + } +#if defined (RTL8192S_WAPI_SUPPORT) + if(ieee->WapiSupport && ieee->wapiInfo.bWapiEnable){ + wapiDectResult = SecIsWAIPacket(ieee, skb); + if(wapiDectResult !=0){ + if(memcmp(&ieee->wapiInfo.wapiSeqnumAndFragNum,&sc,2)) + WapiHandleRecvPacket(ieee, skb, wapiDectResult); + memcpy(&ieee->wapiInfo.wapiSeqnumAndFragNum,&sc,2); + dev_kfree_skb_any(skb); + goto rx_exit; + } + } +#endif + /* Data frame - extract src/dst addresses */ + switch (fc & (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) { + case RTLLIB_FCTL_FROMDS: + memcpy(dst, hdr->addr1, ETH_ALEN); + memcpy(src, hdr->addr3, ETH_ALEN); + memcpy(bssid, hdr->addr2, ETH_ALEN); + break; + case RTLLIB_FCTL_TODS: + memcpy(dst, hdr->addr3, ETH_ALEN); + memcpy(src, hdr->addr2, ETH_ALEN); + memcpy(bssid, hdr->addr1, ETH_ALEN); + break; + case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS: + if (skb->len < RTLLIB_DATA_HDR4_LEN) + goto rx_dropped; + memcpy(dst, hdr->addr3, ETH_ALEN); + memcpy(src, hdr->addr4, ETH_ALEN); +#ifdef _RTL8192_EXT_PATCH_ + memcpy(bssid, ieee->current_mesh_network.bssid, ETH_ALEN); +#else + memcpy(bssid, ieee->current_network.bssid, ETH_ALEN); +#endif + break; + case 0: + memcpy(dst, hdr->addr1, ETH_ALEN); + memcpy(src, hdr->addr2, ETH_ALEN); + memcpy(bssid, hdr->addr3, ETH_ALEN); + break; + } + + /* Filter frames from different BSS */ + if ((type != RTLLIB_FTYPE_CTL) && ((fc & RTLLIB_FCTL_DSTODS) != RTLLIB_FCTL_DSTODS) + && (compare_ether_addr(ieee->current_network.bssid, bssid) != 0) && memcmp(ieee->current_network.bssid, zero_addr, ETH_ALEN)) { + goto rx_dropped; + } + + /* Filter packets sent by an STA that will be forwarded by AP */ + if ( ieee->IntelPromiscuousModeInfo.bPromiscuousOn && + ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame ) { + if ((fc & RTLLIB_FCTL_TODS) && !(fc & RTLLIB_FCTL_FROMDS) && + (compare_ether_addr(dst, ieee->current_network.bssid) != 0) && + (compare_ether_addr(bssid, ieee->current_network.bssid) == 0)) { + goto rx_dropped; + } + } + +#ifdef NOT_YET + if (hostap_rx_frame_wds(ieee, hdr, fc, &wds)) + goto rx_dropped; + if (wds) { + skb->dev = dev = wds; + stats = hostap_get_stats(dev); + } + + if (ieee->iw_mode == IW_MODE_MASTER && !wds && + (fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == RTLLIB_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); + from_assoc_ap = 1; + } +#endif + + dev->last_rx = jiffies; + +#ifdef NOT_YET + if ((ieee->iw_mode == IW_MODE_MASTER || + 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: + frame_authorized = 0; + break; + case AP_RX_CONTINUE: + frame_authorized = 1; + break; + case AP_RX_DROP: + goto rx_dropped; + case AP_RX_EXIT: + goto rx_exit; + } + } +#endif + /* Nullfunc frames may have PS-bit set, so they must be passed to + * hostap_handle_sta_rx() before being dropped here. */ + if (stype != RTLLIB_STYPE_DATA && + stype != RTLLIB_STYPE_DATA_CFACK && + stype != RTLLIB_STYPE_DATA_CFPOLL && + stype != RTLLIB_STYPE_DATA_CFACKPOLL&& + stype != RTLLIB_STYPE_QOS_DATA + ) { + if (stype != RTLLIB_STYPE_NULLFUNC) + RTLLIB_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; + } + + if(skb->len == hdrlen){ + goto rx_dropped; + } + +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->iw_mode == IW_MODE_MESH) { + /* check whether it exists the mesh entry for data packet */ + if(ieee->ext_patch_rtllib_is_mesh&&\ + (false ==ieee->ext_patch_rtllib_is_mesh(ieee,hdr->addr2))) { + if(ieee->only_mesh) { + goto rx_dropped; + } else if(memcmp(bssid, ieee->current_network.bssid, ETH_ALEN)) { + goto rx_dropped; + } + } + } else +#endif + { +#if 0 + /* check bssid under none mesh mode */ + if (memcmp(bssid, ieee->current_network.bssid, ETH_ALEN)) { + goto rx_dropped; + } +#endif + /* network filter more precisely */ + switch (ieee->iw_mode) { + case IW_MODE_ADHOC: + /* packets from our adapter are dropped (echo) */ + if (!memcmp(hdr->addr2, dev->dev_addr, ETH_ALEN)) + goto rx_dropped; + + /* {broad,multi}cast packets to our BSSID go through */ + if (is_multicast_ether_addr(hdr->addr1)) { + if(!memcmp(hdr->addr3, ieee->current_network.bssid, ETH_ALEN)) + break; + else + goto rx_dropped; + } + + /* packets not to our adapter, just discard it */ + if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { + if (bToOtherSTA) + break; + else + goto rx_dropped; + } + + break; + + case IW_MODE_INFRA: + /* packets from our adapter are dropped (echo) */ + if (!memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN)) + goto rx_dropped; + + /* {broad,multi}cast packets to our BSS go through */ + if (is_multicast_ether_addr(hdr->addr1)) { + if (!memcmp(hdr->addr2, ieee->current_network.bssid, ETH_ALEN)) { + break; + } else { + goto rx_dropped; + } + } + + /* packets to our adapter go through */ + if (memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN)) { + if (bToOtherSTA) + break; + else + goto rx_dropped; + } + + break; + } + + + } + +#ifdef ENABLE_LPS + if ((ieee->iw_mode == IW_MODE_INFRA) && (ieee->sta_sleep == 1) + && (ieee->polling)) { + if (WLAN_FC_MORE_DATA(fc)) { + /* more data bit is set, let's request a new frame from the AP */ + rtllib_sta_ps_send_pspoll_frame(ieee); + } else { + ieee->polling = false; + } + } +#endif + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC){ + psta = GetStaInfo(ieee, src); + if(NULL != psta) + psta->LastActiveTime = jiffies; + } +#endif + /* skb: hdr + (possibly fragmented, possibly encrypted) payload */ +#ifdef _RTL8192_EXT_PATCH_ +#if defined (RTL8192S_WAPI_SUPPORT) + if (ieee->host_decrypt && (!ieee->wapiInfo.bWapiEnable)) +#else + if (ieee->host_decrypt) +#endif + { + + int idx = 0; + if (skb->len >= hdrlen + 3) + idx = skb->data[hdrlen + 3] >> 6; + if (ieee->iw_mode == IW_MODE_MESH) + { + if (ieee->mesh_sec_type == 1) { + if(ieee->mesh_security_setting==1 ||ieee->mesh_security_setting==3) + { + bool find_crypt = false; + i = rtllib_find_MP(ieee, hdr->addr2, 0); + if(is_multicast_ether_addr(((struct rtllib_hdr_3addr*)skb->data)->addr1) || is_broadcast_ether_addr(((struct rtllib_hdr_3addr*)skb->data)->addr1)) + { + if(ieee->only_mesh){ + if(i != -1){ + i=0; + }else{ + printk("err find crypt\n"); + goto rx_dropped; + } + }else{ + if(i != -1){ + i=0; + }else{ + find_crypt = true; + crypt = ieee->sta_crypt[idx]; + } + } + }else{ + if(ieee->only_mesh){ + if (i != -1){ + }else{ + printk("err find crypt\n"); + goto rx_dropped; + } + }else{ + if (i != -1){ + }else{ + find_crypt = true; + crypt = ieee->sta_crypt[idx]; + } + } + } + if(find_crypt == false){ + if(ieee->cryptlist[i] == NULL) + goto rx_dropped; + else + crypt = ieee->cryptlist[i]->crypt[idx]; + } + } + } + else { + crypt = ieee->cryptlist[0]->crypt[idx]; + if(crypt) + { + int i = rtllib_find_MP(ieee, hdr->addr2, 0); + if(ieee->only_mesh) + { + if (i == -1) + { + printk("error find entry in entry list\n"); + goto rx_dropped; + } + if (ieee->cryptlist[i]&&ieee->cryptlist[i]->crypt[idx]) + crypt = ieee->cryptlist[i]->crypt[idx]; + + else + crypt = NULL; + } + else + { + if(i != -1) + { + if (ieee->cryptlist[i]&&ieee->cryptlist[i]->crypt[idx]) + crypt = ieee->cryptlist[i]->crypt[idx]; + else + crypt = NULL; + } + else + crypt = ieee->sta_crypt[idx]; + + } + } + else + { + if(!ieee->ext_patch_rtllib_is_mesh(ieee,hdr->addr2)) + crypt = ieee->sta_crypt[idx]; + } + } + } + else + crypt = ieee->sta_crypt[idx]; +#ifdef NOT_YET + sta = NULL; + + /* Use station specific key to override default keys if the + * receiver address is a unicast address ("individual RA"). If + * bcrx_sta_key parameter is set, station specific key is used + * even with broad/multicast targets (this is against IEEE + * 802.11, but makes it easier to use different keys with + * 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); +#endif + + /* allow NULL decrypt to indicate an station specific override + * for default encryption */ + if (crypt && (crypt->ops == NULL || + crypt->ops->decrypt_mpdu == NULL)) + crypt = NULL; + + if (!crypt && (fc & RTLLIB_FCTL_WEP)) { + /* This seems to be triggered by some (multicast?) + * frames from other than current BSS, so just drop the + * frames silently instead of filling system log with + * these reports. */ + RTLLIB_DEBUG_DROP("Decryption failed (not set)" + " (SA=" MAC_FMT ")\n", + MAC_ARG(hdr->addr2)); + ieee->ieee_stats.rx_discards_undecryptable++; + goto rx_dropped; + } + } +#endif + if((!rx_stats->Decrypted)){ + ieee->need_sw_enc = 1; + } + + if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) && + ((keyidx = rtllib_rx_frame_decrypt(ieee, skb, crypt)) < 0) +#if defined (RTL8192S_WAPI_SUPPORT) + && (!ieee->wapiInfo.bWapiEnable) +#endif + ) + { + printk("decrypt frame error\n"); + goto rx_dropped; + } + if (tmp_dump) { + printk("************after decrypt\n"); + dump_buf(skb->data,skb->len); + } +#if defined (RTL8192S_WAPI_SUPPORT) + if(ieee->wapiInfo.bWapiEnable){ + if(ieee->pairwise_key_type == KEY_TYPE_SMS4){ + if(false == SecSWSMS4Decryption(ieee, skb, rx_stats)){ + WAPI_TRACE(WAPI_ERR, "%s():SMS4 decrypt frame error\n",__FUNCTION__); + goto rx_dropped; + } + } + } +#endif + hdr = (struct rtllib_hdr_4addr *) skb->data; + + /* skb: hdr + (possibly fragmented) plaintext payload */ + if ((frag != 0 || (fc & RTLLIB_FCTL_MOREFRAGS))) { + int flen; + struct sk_buff *frag_skb = rtllib_frag_cache_get(ieee, hdr); + RTLLIB_DEBUG_FRAG("Rx Fragment received (%u)\n", frag); + + if (!frag_skb) { + RTLLIB_DEBUG(RTLLIB_DL_RX | RTLLIB_DL_FRAG, + "Rx cannot get skb from fragment " + "cache (morefrag=%d seq=%u frag=%u)\n", + (fc & RTLLIB_FCTL_MOREFRAGS) != 0, + WLAN_GET_SEQ_SEQ(sc), frag); + goto rx_dropped; + } + flen = skb->len; + if (frag != 0) + flen -= hdrlen; + + if (frag_skb->tail + flen > frag_skb->end) { + printk(KERN_WARNING "%s: host decrypted and " + "reassembled frame did not fit skb\n", + dev->name); + rtllib_frag_cache_invalidate(ieee, hdr); + goto rx_dropped; + } + + if (frag == 0) { + /* copy first fragment (including full headers) into + * beginning of the fragment cache skb */ + memcpy(skb_put(frag_skb, flen), skb->data, flen); + } else { + /* append frame payload to the end of the fragment + * cache skb */ + memcpy(skb_put(frag_skb, flen), skb->data + hdrlen, + flen); + } + dev_kfree_skb_any(skb); + skb = NULL; + + if (fc & RTLLIB_FCTL_MOREFRAGS) { + /* more fragments expected - leave the skb in fragment + * cache for now; it will be delivered to upper layers + * after all fragments have been received */ + goto rx_exit; + } + + /* this was the last fragment and the frame will be + * delivered, so remove skb from fragment cache */ + skb = frag_skb; + hdr = (struct rtllib_hdr_4addr *) skb->data; + rtllib_frag_cache_invalidate(ieee, hdr); + } + + /* skb: hdr + (possible reassembled) full MSDU payload; possibly still + * encrypted/authenticated */ + if (ieee->host_decrypt && (fc & RTLLIB_FCTL_WEP) && +#if defined (RTL8192S_WAPI_SUPPORT) + (!ieee->wapiInfo.bWapiEnable) && +#endif + rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) + { + printk("==>decrypt msdu error\n"); + goto rx_dropped; + } + + ieee->LinkDetectInfo.NumRecvDataInPeriod++; + ieee->LinkDetectInfo.NumRxOkInPeriod++; + + hdr = (struct rtllib_hdr_4addr *) skb->data; + if((!is_multicast_ether_addr(hdr->addr1)) && (!is_broadcast_ether_addr(hdr->addr1))) + unicast_packet = true; + if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep) { + if (/*ieee->ieee802_1x &&*/ + rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + +#ifdef CONFIG_RTLLIB_DEBUG + /* pass unencrypted EAPOL frames even if encryption is + * configured */ + struct eapol *eap = (struct eapol *)(skb->data + + 24); + RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n", + eap_get_type(eap->type)); +#endif + } else { + RTLLIB_DEBUG_DROP( + "encryption configured, but RX " + "frame not encrypted (SA=" MAC_FMT ")\n", + MAC_ARG(hdr->addr2)); + goto rx_dropped; + } + } + +#ifdef CONFIG_RTLLIB_DEBUG + if (crypt && !(fc & RTLLIB_FCTL_WEP) && + rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + struct eapol *eap = (struct eapol *)(skb->data + + 24); + RTLLIB_DEBUG_EAP("RX: IEEE 802.1X EAPOL frame: %s\n", + eap_get_type(eap->type)); + } +#endif + + if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep && + !rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + RTLLIB_DEBUG_DROP( + "dropped unencrypted RX data " + "frame from " MAC_FMT + " (drop_unencrypted=1)\n", + MAC_ARG(hdr->addr2)); + goto rx_dropped; + } +/* + if(rtllib_is_eapol_frame(ieee, skb, hdrlen)) { + printk(KERN_WARNING "RX: IEEE802.1X EPAOL frame!\n"); + } +*/ + if(ieee->current_network.qos_data.active && IsQoSDataFrame(skb->data) + && !is_multicast_ether_addr(hdr->addr1) && !is_broadcast_ether_addr(hdr->addr1)) + { + TID = Frame_QoSTID(skb->data); + SeqNum = WLAN_GET_SEQ_SEQ(sc); + GetTs(ieee,(PTS_COMMON_INFO*) &pTS,hdr->addr2,TID,RX_DIR,true); + if(TID !=0 && TID !=3){ + ieee->bis_any_nonbepkts = true; + } + } +#ifdef _RTL8192_EXT_PATCH_ + if((fc & (WIFI_MESH_TYPE | RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) + == (WIFI_MESH_TYPE | RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) + { + if(ieee->iw_mode == IW_MODE_MESH){ + rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC); + if(rxb == NULL) + { + printk("%s(): kmalloc rxb error\n",__FUNCTION__); + goto rx_dropped; + } + memset(rxb, 0, sizeof(struct rtllib_rxb)); + if(msh_parse_subframe(ieee, skb, rxb)==0){ + /* only to free rxb, and not submit the packets to upper layer */ + for(i =0; i < rxb->nr_subframes; i++) { + if(rxb->subframes[i]) + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + } + ret = msh_rx_process_dataframe(ieee,rxb,rx_stats); + if(ret < 0) { + for(i =0; i < rxb->nr_subframes; i++) { + if(rxb->subframes[i]) + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + }else{ + kfree(rxb); + rxb = NULL; + } + }else + goto rx_dropped; + }else{ +#endif + /* skb: hdr + (possible reassembled) full plaintext payload */ + payload = skb->data + hdrlen; + rxb = (struct rtllib_rxb*)kmalloc(sizeof(struct rtllib_rxb),GFP_ATOMIC); + if(rxb == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR,"%s(): kmalloc rxb error\n",__FUNCTION__); + goto rx_dropped; + } + /* to parse amsdu packets */ + /* qos data packets & reserved bit is 1 */ + if(parse_subframe(ieee,skb,rx_stats,rxb,src,dst) == 0) { + /* only to free rxb, and not submit the packets to upper layer */ + for(i =0; i < rxb->nr_subframes; i++) { + dev_kfree_skb(rxb->subframes[i]); + } + kfree(rxb); + rxb = NULL; + goto rx_dropped; + } +#ifdef RTL8192S_WAPI_SUPPORT + if(ieee->wapiInfo.bWapiEnable){ + if(rxb){ + rxb->UserPriority = TID; + memcpy(rxb->WapiTempPN, rx_stats->WapiTempPN, 16); + memcpy(rxb->WapiSrcAddr, rx_stats->WapiSrcAddr, 6); + rxb->bWapiCheckPNInDecrypt = rx_stats->bWapiCheckPNInDecrypt; + } + } +#endif +#if !defined(RTL8192SU) && !defined(RTL8192U) +#ifdef ENABLE_LPS + if(unicast_packet) + { + if (type == RTLLIB_FTYPE_DATA) + { + + if(ieee->bIsAggregateFrame) + ieee->LinkDetectInfo.NumRxUnicastOkInPeriod+=rxb->nr_subframes; + else + ieee->LinkDetectInfo.NumRxUnicastOkInPeriod++; + + if((ieee->state == RTLLIB_LINKED) /*&& !MgntInitAdapterInProgress(pMgntInfo)*/) + { + if( ((ieee->LinkDetectInfo.NumRxUnicastOkInPeriod +ieee->LinkDetectInfo.NumTxOkInPeriod) > 8 ) || + (ieee->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) ) + { + if(ieee->LeisurePSLeave) + ieee->LeisurePSLeave(dev); + } + } + } + } +#endif +#endif + ieee->last_rx_ps_time = jiffies; + if(ieee->pHTInfo->bCurRxReorderEnable == false ||pTS == NULL || bToOtherSTA ){ + for(i = 0; inr_subframes; i++) { + struct sk_buff *sub_skb = rxb->subframes[i]; + + if (sub_skb) { + /* convert hdr + possible LLC headers into Ethernet header */ + ethertype = (sub_skb->data[6] << 8) | sub_skb->data[7]; + if (sub_skb->len >= 8 && + ((memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) == 0 && + ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) || + memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE) == 0)) { + /* remove RFC1042 or Bridge-Tunnel encapsulation and + * replace EtherType */ + skb_pull(sub_skb, SNAP_SIZE); + memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN); + memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN); + } else { + u16 len; + /* Leave Ethernet header part of hdr and full payload */ + len = htons(sub_skb->len); + memcpy(skb_push(sub_skb, 2), &len, 2); + memcpy(skb_push(sub_skb, ETH_ALEN), src, ETH_ALEN); + memcpy(skb_push(sub_skb, ETH_ALEN), dst, ETH_ALEN); + } + + stats->rx_packets++; + stats->rx_bytes += sub_skb->len; + + if(is_multicast_ether_addr(dst)) { + stats->multicast++; + } + + /* Indicat the packets to upper layer */ + memset(sub_skb->cb, 0, sizeof(sub_skb->cb)); +#ifdef _RTL8192_EXT_PATCH_ + sub_skb->protocol = eth_type_trans(sub_skb, sub_skb->dev); +#else + sub_skb->protocol = eth_type_trans(sub_skb, dev); + sub_skb->dev = dev; +#endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + sub_skb->dev->stats.rx_packets++; + sub_skb->dev->stats.rx_bytes += sub_skb->len; +#endif +#ifdef TCP_CSUM_OFFLOAD_RX + if ( rx_stats->tcp_csum_valid) + sub_skb->ip_summed = CHECKSUM_UNNECESSARY; + else + sub_skb->ip_summed = CHECKSUM_NONE; +#else + sub_skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */ +#endif + + netif_rx(sub_skb); + } + } + kfree(rxb); + rxb = NULL; + + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_REORDER,"%s(): REORDER ENABLE AND PTS not NULL, and we will enter RxReorderIndicatePacket()\n",__FUNCTION__); +#ifdef TCP_CSUM_OFFLOAD_RX + rxb->tcp_csum_valid = rx_stats->tcp_csum_valid; +#endif + RxReorderIndicatePacket(ieee, rxb, pTS, SeqNum); + } +#ifdef _RTL8192_EXT_PATCH_ + } +#endif +#ifndef JOHN_NOCPY + dev_kfree_skb(skb); +#endif + + rx_exit: +#ifdef NOT_YET + if (sta) + hostap_handle_sta_release(sta); +#endif + return 1; + + rx_dropped: + if (rxb != NULL) + { + kfree(rxb); + rxb = NULL; + } + stats->rx_dropped++; + + /* Returning 0 indicates to caller that we have not handled the SKB-- + * so it is still allocated and can be used again by underlying + * hardware as a DMA target */ + return 0; +} +#endif + +#define MGMT_FRAME_FIXED_PART_LENGTH 0x24 + +static u8 qos_oui[QOS_OUI_LEN] = { 0x00, 0x50, 0xF2 }; + +/* +* Make ther structure we read from the beacon packet has +* the right values +*/ +static int rtllib_verify_qos_info(struct rtllib_qos_information_element + *info_element, int sub_type) +{ + + if (info_element->qui_subtype != sub_type) + return -1; + if (memcmp(info_element->qui, qos_oui, QOS_OUI_LEN)) + return -1; + if (info_element->qui_type != QOS_OUI_TYPE) + return -1; + if (info_element->version != QOS_VERSION_1) + return -1; + + return 0; +} + + +/* + * Parse a QoS parameter element + */ +static int rtllib_read_qos_param_element(struct rtllib_qos_parameter_info + *element_param, struct rtllib_info_element + *info_element) +{ + int ret = 0; + u16 size = sizeof(struct rtllib_qos_parameter_info) - 2; + + if ((info_element == NULL) || (element_param == NULL)) + return -1; + + if (info_element->id == QOS_ELEMENT_ID && info_element->len == size) { + memcpy(element_param->info_element.qui, info_element->data, + info_element->len); + element_param->info_element.elementID = info_element->id; + element_param->info_element.length = info_element->len; + } else + ret = -1; + if (ret == 0) + ret = rtllib_verify_qos_info(&element_param->info_element, + QOS_OUI_PARAM_SUB_TYPE); + return ret; +} + +/* + * Parse a QoS information element + */ +static int rtllib_read_qos_info_element(struct + rtllib_qos_information_element + *element_info, struct rtllib_info_element + *info_element) +{ + int ret = 0; + u16 size = sizeof(struct rtllib_qos_information_element) - 2; + + if (element_info == NULL) + return -1; + if (info_element == NULL) + return -1; + + if ((info_element->id == QOS_ELEMENT_ID) && (info_element->len == size)) { + memcpy(element_info->qui, info_element->data, + info_element->len); + element_info->elementID = info_element->id; + element_info->length = info_element->len; + } else + ret = -1; + + if (ret == 0) + ret = rtllib_verify_qos_info(element_info, + QOS_OUI_INFO_SUB_TYPE); + return ret; +} + + +/* + * Write QoS parameters from the ac parameters. + */ +static int rtllib_qos_convert_ac_to_parameters(struct rtllib_qos_parameter_info *param_elm, + struct rtllib_qos_data *qos_data) +{ + struct rtllib_qos_ac_parameter *ac_params; + struct rtllib_qos_parameters *qos_param = &(qos_data->parameters); + int rc = 0; + int i; + u8 aci; + u8 acm; + + qos_data->wmm_acm = 0; + for (i = 0; i < QOS_QUEUE_NUM; i++) { + ac_params = &(param_elm->ac_params_record[i]); + + aci = (ac_params->aci_aifsn & 0x60) >> 5; + acm = (ac_params->aci_aifsn & 0x10) >> 4; + + if(aci >= QOS_QUEUE_NUM) + continue; + switch (aci) { + case 1: + /* BIT(0) | BIT(3) */ + if (acm) + qos_data->wmm_acm |= (0x01<<0)|(0x01<<3); + break; + case 2: + /* BIT(4) | BIT(5) */ + if (acm) + qos_data->wmm_acm |= (0x01<<4)|(0x01<<5); + break; + case 3: + /* BIT(6) | BIT(7) */ + if (acm) + qos_data->wmm_acm |= (0x01<<6)|(0x01<<7); + break; + case 0: + default: + /* BIT(1) | BIT(2) */ + if (acm) + qos_data->wmm_acm |= (0x01<<1)|(0x01<<2); + break; + } + + qos_param->aifs[aci] = (ac_params->aci_aifsn) & 0x0f; + + /* WMM spec P.11: The minimum value for AIFSN shall be 2 */ + qos_param->aifs[aci] = (qos_param->aifs[aci] < 2) ? 2:qos_param->aifs[aci]; + + qos_param->cw_min[aci] = ac_params->ecw_min_max & 0x0F; + + qos_param->cw_max[aci] = (ac_params->ecw_min_max & 0xF0) >> 4; + + qos_param->flag[aci] = + (ac_params->aci_aifsn & 0x10) ? 0x01 : 0x00; + qos_param->tx_op_limit[aci] = le16_to_cpu(ac_params->tx_op_limit); + } + return rc; +} + +/* + * we have a generic data element which it may contain QoS information or + * parameters element. check the information element length to decide + * which type to read + */ +static int rtllib_parse_qos_info_param_IE(struct rtllib_info_element + *info_element, + struct rtllib_network *network) +{ + int rc = 0; + struct rtllib_qos_information_element qos_info_element; + + rc = rtllib_read_qos_info_element(&qos_info_element, info_element); + + if (rc == 0) { + network->qos_data.param_count = qos_info_element.ac_info & 0x0F; + network->flags |= NETWORK_HAS_QOS_INFORMATION; + } else { + struct rtllib_qos_parameter_info param_element; + + rc = rtllib_read_qos_param_element(¶m_element, + info_element); + if (rc == 0) { + rtllib_qos_convert_ac_to_parameters(¶m_element, + &(network->qos_data)); + network->flags |= NETWORK_HAS_QOS_PARAMETERS; + network->qos_data.param_count = + param_element.info_element.ac_info & 0x0F; + } + } + + if (rc == 0) { + RTLLIB_DEBUG_QOS("QoS is supported\n"); + network->qos_data.supported = 1; + } + return rc; +} + +#ifdef CONFIG_RTLLIB_DEBUG +#define MFIE_STRING(x) case MFIE_TYPE_ ##x: return #x + +static const char *get_info_element_string(u16 id) +{ + switch (id) { + MFIE_STRING(SSID); + MFIE_STRING(RATES); + MFIE_STRING(FH_SET); + MFIE_STRING(DS_SET); + MFIE_STRING(CF_SET); + MFIE_STRING(TIM); + MFIE_STRING(IBSS_SET); + MFIE_STRING(COUNTRY); + MFIE_STRING(HOP_PARAMS); + MFIE_STRING(HOP_TABLE); + MFIE_STRING(REQUEST); + MFIE_STRING(CHALLENGE); + MFIE_STRING(POWER_CONSTRAINT); + MFIE_STRING(POWER_CAPABILITY); + MFIE_STRING(TPC_REQUEST); + MFIE_STRING(TPC_REPORT); + MFIE_STRING(SUPP_CHANNELS); + MFIE_STRING(CSA); + MFIE_STRING(MEASURE_REQUEST); + MFIE_STRING(MEASURE_REPORT); + MFIE_STRING(QUIET); + MFIE_STRING(IBSS_DFS); + MFIE_STRING(RSN); + MFIE_STRING(RATES_EX); + MFIE_STRING(GENERIC); + MFIE_STRING(QOS_PARAMETER); + default: + return "UNKNOWN"; + } +} +#endif + +#ifdef ENABLE_DOT11D +static inline void rtllib_extract_country_ie( + struct rtllib_device *ieee, + struct rtllib_info_element *info_element, + struct rtllib_network *network, + u8 * addr2) +{ + if (IS_DOT11D_ENABLE(ieee)) { + if(info_element->len!= 0) { + memcpy(network->CountryIeBuf, info_element->data, info_element->len); + network->CountryIeLen = info_element->len; + + if(!IS_COUNTRY_IE_VALID(ieee)) + { + if((rtllib_act_scanning(ieee,false) == true) && (ieee->FirstIe_InScan == 1)) + printk("Received beacon ContryIE, SSID: <%s>\n",network->ssid); + Dot11d_UpdateCountryIe(ieee, addr2, info_element->len, info_element->data); + } + } + + if (IS_EQUAL_CIE_SRC(ieee, addr2)) { + UPDATE_CIE_WATCHDOG(ieee); + } + } + +} +#endif + +int rtllib_parse_info_param(struct rtllib_device *ieee, + struct rtllib_info_element *info_element, + u16 length, + struct rtllib_network *network, + struct rtllib_rx_stats *stats) +{ + u8 i; + short offset; + u16 tmp_htcap_len=0; + u16 tmp_htinfo_len=0; + u16 ht_realtek_agg_len=0; + u8 ht_realtek_agg_buf[MAX_IE_LEN]; +#ifdef CONFIG_RTLLIB_DEBUG + char rates_str[64]; + char *p; +#endif +#ifdef RTL8192S_WAPI_SUPPORT + u8 tmp_wapi_len = 0; +#endif + while (length >= sizeof(*info_element)) { + if (sizeof(*info_element) + info_element->len > length) { + RTLLIB_DEBUG_MGMT("Info elem: parse failed: " + "info_element->len + 2 > left : " + "info_element->len+2=%zd left=%d, id=%d.\n", + info_element->len + + sizeof(*info_element), + length, info_element->id); + /* We stop processing but don't return an error here + * because some misbehaviour APs break this rule. ie. + * Orinoco AP1000. */ + break; + } + + switch (info_element->id) { + case MFIE_TYPE_SSID: + if (rtllib_is_empty_essid(info_element->data, + info_element->len)) { + network->flags |= NETWORK_EMPTY_ESSID; + break; + } + + 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, + IW_ESSID_MAX_SIZE - network->ssid_len); + + RTLLIB_DEBUG_MGMT("MFIE_TYPE_SSID: '%s' len=%d.\n", + network->ssid, network->ssid_len); + break; + + case MFIE_TYPE_RATES: +#ifdef CONFIG_RTLLIB_DEBUG + p = rates_str; +#endif + 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_RTLLIB_DEBUG + p += snprintf(p, sizeof(rates_str) - + (p - rates_str), "%02X ", + network->rates[i]); +#endif + if (rtllib_is_ofdm_rate + (info_element->data[i])) { + network->flags |= NETWORK_HAS_OFDM; + if (info_element->data[i] & + RTLLIB_BASIC_RATE_MASK) + network->flags &= + ~NETWORK_HAS_CCK; + } + + if (rtllib_is_cck_rate + (info_element->data[i])) { + network->flags |= NETWORK_HAS_CCK; + } + } + + RTLLIB_DEBUG_MGMT("MFIE_TYPE_RATES: '%s' (%d)\n", + rates_str, network->rates_len); + break; + + case MFIE_TYPE_RATES_EX: +#ifdef CONFIG_RTLLIB_DEBUG + p = rates_str; +#endif + 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_RTLLIB_DEBUG + p += snprintf(p, sizeof(rates_str) - + (p - rates_str), "%02X ", + network->rates[i]); +#endif + if (rtllib_is_ofdm_rate + (info_element->data[i])) { + network->flags |= NETWORK_HAS_OFDM; + if (info_element->data[i] & + RTLLIB_BASIC_RATE_MASK) + network->flags &= + ~NETWORK_HAS_CCK; + } + } + + RTLLIB_DEBUG_MGMT("MFIE_TYPE_RATES_EX: '%s' (%d)\n", + rates_str, network->rates_ex_len); + break; + + case MFIE_TYPE_DS_SET: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_DS_SET: %d\n", + info_element->data[0]); + network->channel = info_element->data[0]; + break; + + case MFIE_TYPE_FH_SET: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_FH_SET: ignored\n"); + break; + + case MFIE_TYPE_CF_SET: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_CF_SET: ignored\n"); + break; + + case MFIE_TYPE_TIM: + if(info_element->len < 4) + break; + + network->tim.tim_count = info_element->data[0]; + network->tim.tim_period = info_element->data[1]; + + network->dtim_period = info_element->data[1]; + if(ieee->state != RTLLIB_LINKED) + break; +#if 0 + network->last_dtim_sta_time[0] = stats->mac_time[0]; +#else + network->last_dtim_sta_time[0] = jiffies; +#endif + network->last_dtim_sta_time[1] = stats->mac_time[1]; + + network->dtim_data = RTLLIB_DTIM_VALID; + + + if(info_element->data[2] & 1) + network->dtim_data |= RTLLIB_DTIM_MBCAST; + +#if 1 + offset = (info_element->data[2] >> 1)*2; + + + if(ieee->assoc_id < 8*offset || + ieee->assoc_id > 8*(offset + info_element->len -3)) + + break; + + offset = (ieee->assoc_id / 8) - offset; + if(info_element->data[3+offset] & (1<<(ieee->assoc_id%8))) + network->dtim_data |= RTLLIB_DTIM_UCAST; +#else + { + u16 numSta = 0; + u16 offset_byte = 0; + u16 offset_bit = 0; + + numSta = (info_element->data[2] &0xFE)*8; + + if(ieee->assoc_id < numSta || + ieee->assoc_id > (numSta + (info_element->len -3)*8)) + break; + + offset = ieee->assoc_id - numSta; + offset_byte = offset / 8; + offset_bit = offset % 8; + if(info_element->data[3+offset_byte] & (0x01<dtim_data |= RTLLIB_DTIM_UCAST; + } +#endif + + network->listen_interval = network->dtim_period; + break; + + case MFIE_TYPE_ERP: + network->erp_value = info_element->data[0]; + network->flags |= NETWORK_HAS_ERP_VALUE; + RTLLIB_DEBUG_MGMT("MFIE_TYPE_ERP_SET: %d\n", + network->erp_value); + break; + case MFIE_TYPE_IBSS_SET: + network->atim_window = info_element->data[0]; + RTLLIB_DEBUG_MGMT("MFIE_TYPE_IBSS_SET: %d\n", + network->atim_window); + break; + + case MFIE_TYPE_CHALLENGE: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_CHALLENGE: ignored\n"); + break; + + case MFIE_TYPE_GENERIC: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_GENERIC: %d bytes\n", + info_element->len); + if (!rtllib_parse_qos_info_param_IE(info_element, + network)) + break; + 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); + memcpy(network->wpa_ie, info_element, + network->wpa_ie_len); + break; + } +#ifdef THOMAS_TURBO + if (info_element->len == 7 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0xe0 && + info_element->data[2] == 0x4c && + info_element->data[3] == 0x01 && + info_element->data[4] == 0x02) { + network->Turbo_Enable = 1; + } +#endif + + if(tmp_htcap_len == 0){ + if(info_element->len >= 4 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x90 && + info_element->data[2] == 0x4c && + info_element->data[3] == 0x033){ + + tmp_htcap_len = min(info_element->len,(u8)MAX_IE_LEN); + if(tmp_htcap_len != 0){ + network->bssht.bdHTSpecVer = HT_SPEC_VER_EWC; + network->bssht.bdHTCapLen = tmp_htcap_len > sizeof(network->bssht.bdHTCapBuf)?\ + sizeof(network->bssht.bdHTCapBuf):tmp_htcap_len; + memcpy(network->bssht.bdHTCapBuf,info_element->data,network->bssht.bdHTCapLen); + } + } + if(tmp_htcap_len != 0){ + network->bssht.bdSupportHT = true; + network->bssht.bdHT1R = ((((PHT_CAPABILITY_ELE)(network->bssht.bdHTCapBuf))->MCS[1]) == 0); + }else{ + network->bssht.bdSupportHT = false; + network->bssht.bdHT1R = false; + } + } + + + if(tmp_htinfo_len == 0){ + if(info_element->len >= 4 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x90 && + info_element->data[2] == 0x4c && + info_element->data[3] == 0x034){ + + tmp_htinfo_len = min(info_element->len,(u8)MAX_IE_LEN); + if(tmp_htinfo_len != 0){ + network->bssht.bdHTSpecVer = HT_SPEC_VER_EWC; + if(tmp_htinfo_len){ + network->bssht.bdHTInfoLen = tmp_htinfo_len > sizeof(network->bssht.bdHTInfoBuf)?\ + sizeof(network->bssht.bdHTInfoBuf):tmp_htinfo_len; + memcpy(network->bssht.bdHTInfoBuf,info_element->data,network->bssht.bdHTInfoLen); + } + + } + + } + } + + if(ieee->aggregation){ + if(network->bssht.bdSupportHT){ + if(info_element->len >= 4 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0xe0 && + info_element->data[2] == 0x4c && + info_element->data[3] == 0x02){ + + ht_realtek_agg_len = min(info_element->len,(u8)MAX_IE_LEN); + memcpy(ht_realtek_agg_buf,info_element->data,info_element->len); + + } + if(ht_realtek_agg_len >= 5){ + network->realtek_cap_exit = true; + network->bssht.bdRT2RTAggregation = true; + + if((ht_realtek_agg_buf[4] == 1) && (ht_realtek_agg_buf[5] & 0x02)) + network->bssht.bdRT2RTLongSlotTime = true; + + if((ht_realtek_agg_buf[4]==1) && (ht_realtek_agg_buf[5] & RT_HT_CAP_USE_92SE)) + { + network->bssht.RT2RT_HT_Mode |= RT_HT_CAP_USE_92SE; + } + } + } + if(ht_realtek_agg_len >= 5){ + if((ht_realtek_agg_buf[5] & RT_HT_CAP_USE_SOFTAP)) + network->bssht.RT2RT_HT_Mode |= RT_HT_CAP_USE_SOFTAP; + } + } + + { + if((info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x05 && + info_element->data[2] == 0xb5) || + (info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x0a && + info_element->data[2] == 0xf7) || + (info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x10 && + info_element->data[2] == 0x18)){ + + network->broadcom_cap_exist = true; + + } + } +#if 0 + if (tmp_htcap_len !=0) + { + u16 cap_ext = ((PHT_CAPABILITY_ELE)&info_element->data[0])->ExtHTCapInfo; + if ((cap_ext & 0x0c00) == 0x0c00) + { + network->ralink_cap_exist = true; + } + } +#endif + if(info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x0c && + info_element->data[2] == 0x43) + { + network->ralink_cap_exist = true; + } + if((info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x03 && + info_element->data[2] == 0x7f) || + (info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x13 && + info_element->data[2] == 0x74)) + { + network->atheros_cap_exist = true; + } + + if ((info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x50 && + info_element->data[2] == 0x43) ) + { + network->marvell_cap_exist = true; + } + if(info_element->len >= 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x40 && + info_element->data[2] == 0x96) + { + network->cisco_cap_exist = true; + } + if(info_element->len > 4 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x40 && + info_element->data[2] == 0x96 && + info_element->data[3] == 0x01) + { + if(info_element->len == 6) + { + memcpy(network->CcxRmState, &info_element[4], 2); + if(network->CcxRmState[0] != 0) + { + network->bCcxRmEnable = true; + } + else + network->bCcxRmEnable = false; + network->MBssidMask = network->CcxRmState[1] & 0x07; + if(network->MBssidMask != 0) + { + network->bMBssidValid = true; + network->MBssidMask = 0xff << (network->MBssidMask); + memcpy(network->MBssid, network->bssid, ETH_ALEN); + network->MBssid[5] &= network->MBssidMask; + } + else + { + network->bMBssidValid = false; + } + } + else + { + network->bCcxRmEnable = false; + } + } + if(info_element->len > 4 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x40 && + info_element->data[2] == 0x96 && + info_element->data[3] == 0x03) + { + if(info_element->len == 5) + { + network->bWithCcxVerNum = true; + network->BssCcxVerNumber = info_element->data[4]; + } + else + { + network->bWithCcxVerNum = false; + network->BssCcxVerNumber = 0; + } + } + if(info_element->len > 4 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x50 && + info_element->data[2] == 0xf2 && + info_element->data[3] == 0x04) + { + RTLLIB_DEBUG_MGMT("MFIE_TYPE_WZC: %d bytes\n", + info_element->len); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + network->wzc_ie_len = min(info_element->len+2, + MAX_WZC_IE_LEN); + memcpy(network->wzc_ie, info_element, + network->wzc_ie_len); +#endif + } +#ifdef _RTL8192_EXT_PATCH_ +#ifdef COMPATIBLE_WITH_RALINK_MESH + if(info_element->len > 3 && + info_element->data[0] == 0x00 && + info_element->data[1] == 0x0F && + info_element->data[2] == 0xAC) + { + network->hostname_len = info_element->len - 3; + memcpy(network->hostname, (info_element->data+3), network->hostname_len); + } +#else + if(info_element->len > 4 && + info_element->data[0] == 0x48 && + info_element->data[1] == 0x4F && + info_element->data[2] == 0x53 && + info_element->data[3] == 0x54) + { + network->hostname_len = info_element->len - 4; + memcpy(network->hostname, (info_element->data+4), network->hostname_len); + } +#endif +#endif + break; + + case MFIE_TYPE_RSN: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_RSN: %d bytes\n", + info_element->len); + network->rsn_ie_len = min(info_element->len + 2, + MAX_WPA_IE_LEN); + memcpy(network->rsn_ie, info_element, + network->rsn_ie_len); + break; + + case MFIE_TYPE_HT_CAP: + RTLLIB_DEBUG_SCAN("MFIE_TYPE_HT_CAP: %d bytes\n", + info_element->len); + tmp_htcap_len = min(info_element->len,(u8)MAX_IE_LEN); + if(tmp_htcap_len != 0){ + network->bssht.bdHTSpecVer = HT_SPEC_VER_EWC; + network->bssht.bdHTCapLen = tmp_htcap_len > sizeof(network->bssht.bdHTCapBuf)?\ + sizeof(network->bssht.bdHTCapBuf):tmp_htcap_len; + memcpy(network->bssht.bdHTCapBuf,info_element->data,network->bssht.bdHTCapLen); + + network->bssht.bdSupportHT = true; + network->bssht.bdHT1R = ((((PHT_CAPABILITY_ELE)(network->bssht.bdHTCapBuf))->MCS[1]) == 0); + + network->bssht.bdBandWidth = (HT_CHANNEL_WIDTH)(((PHT_CAPABILITY_ELE)(network->bssht.bdHTCapBuf))->ChlWidth); + } + else{ + network->bssht.bdSupportHT = false; + network->bssht.bdHT1R = false; + network->bssht.bdBandWidth = HT_CHANNEL_WIDTH_20 ; + } + break; + + + case MFIE_TYPE_HT_INFO: + RTLLIB_DEBUG_SCAN("MFIE_TYPE_HT_INFO: %d bytes\n", + info_element->len); + tmp_htinfo_len = min(info_element->len,(u8)MAX_IE_LEN); + if(tmp_htinfo_len){ + network->bssht.bdHTSpecVer = HT_SPEC_VER_IEEE; + network->bssht.bdHTInfoLen = tmp_htinfo_len > sizeof(network->bssht.bdHTInfoBuf)?\ + sizeof(network->bssht.bdHTInfoBuf):tmp_htinfo_len; + memcpy(network->bssht.bdHTInfoBuf,info_element->data,network->bssht.bdHTInfoLen); + } + break; + + case MFIE_TYPE_AIRONET: + RTLLIB_DEBUG_SCAN("MFIE_TYPE_AIRONET: %d bytes\n", + info_element->len); + if(info_element->len >IE_CISCO_FLAG_POSITION) + { + network->bWithAironetIE = true; + + if( (info_element->data[IE_CISCO_FLAG_POSITION]&SUPPORT_CKIP_MIC) || + (info_element->data[IE_CISCO_FLAG_POSITION]&SUPPORT_CKIP_PK) ) + { + network->bCkipSupported = true; + } + else + { + network->bCkipSupported = false; + } + } + else + { + network->bWithAironetIE = false; + network->bCkipSupported = false; + } + break; + case MFIE_TYPE_QOS_PARAMETER: + printk(KERN_ERR + "QoS Error need to parse QOS_PARAMETER IE\n"); + break; + +#ifdef ENABLE_DOT11D + case MFIE_TYPE_COUNTRY: + RTLLIB_DEBUG_SCAN("MFIE_TYPE_COUNTRY: %d bytes\n", + info_element->len); + rtllib_extract_country_ie(ieee, info_element, network, network->bssid); + break; +#endif +#ifdef _RTL8192_EXT_PATCH_ + case MFIE_TYPE_MESH_ID: + network->mesh_id_len = min(info_element->len, (u8)MAX_MESH_ID_LEN); + memcpy(network->mesh_id, info_element->data, network->mesh_id_len); + if (network->mesh_id_len < MAX_MESH_ID_LEN) { + memset(network->mesh_id + network->mesh_id_len, 0, + MAX_MESH_ID_LEN - network->mesh_id_len); + } + RTLLIB_DEBUG_MGMT("MFIE_TYPE_MESH_ID: '%s'len=%d.\n", network->mesh_id, + network->mesh_id_len); + break; + + case MFIE_TYPE_MESH_CONFIGURATION: + network->mesh_config_len = min(info_element->len, (u8)MESH_CONF_TOTAL_LEN); + memcpy(network->mesh_config.path_proto_id, info_element->data + 1, 4); + memcpy(network->mesh_config.path_metric_id, info_element->data + 5, 4); + memcpy(network->mesh_config.congest_ctl_mode, info_element->data + 9, 4); + memcpy(network->mesh_config.mesh_capability, info_element->data + 17, 2); + break; +#endif +/* TODO */ +#if 0 + /* 802.11h */ + case MFIE_TYPE_POWER_CONSTRAINT: + network->power_constraint = info_element->data[0]; + network->flags |= NETWORK_HAS_POWER_CONSTRAINT; + break; + + case MFIE_TYPE_CSA: + network->power_constraint = info_element->data[0]; + network->flags |= NETWORK_HAS_CSA; + break; + + case MFIE_TYPE_QUIET: + network->quiet.count = info_element->data[0]; + network->quiet.period = info_element->data[1]; + network->quiet.duration = info_element->data[2]; + network->quiet.offset = info_element->data[3]; + network->flags |= NETWORK_HAS_QUIET; + break; + + case MFIE_TYPE_IBSS_DFS: + if (network->ibss_dfs) + break; + network->ibss_dfs = kmemdup(info_element->data, + info_element->len, + GFP_ATOMIC); + if (!network->ibss_dfs) + return 1; + network->flags |= NETWORK_HAS_IBSS_DFS; + break; + + case MFIE_TYPE_TPC_REPORT: + network->tpc_report.transmit_power = + info_element->data[0]; + network->tpc_report.link_margin = info_element->data[1]; + network->flags |= NETWORK_HAS_TPC_REPORT; + break; +#endif +#ifdef RTL8192S_WAPI_SUPPORT + case MFIE_TYPE_WAPI: + RTLLIB_DEBUG_MGMT("MFIE_TYPE_WAPI: %d bytes\n", info_element->len); + tmp_wapi_len = min(info_element->len,(u8)MAX_WAPI_IE_LEN); + if(tmp_wapi_len){ + network->wapi_ie_len = tmp_wapi_len; + memcpy(network->wapi_ie,info_element->data,network->wapi_ie_len); + } + break; +#endif + default: + RTLLIB_DEBUG_MGMT + ("Unsupported info element: %s (%d)\n", + get_info_element_string(info_element->id), + info_element->id); + break; + } + + length -= sizeof(*info_element) + info_element->len; + info_element = + (struct rtllib_info_element *)&info_element-> + data[info_element->len]; + } + + if(!network->atheros_cap_exist && !network->broadcom_cap_exist && + !network->cisco_cap_exist && !network->ralink_cap_exist && !network->bssht.bdRT2RTAggregation) + { + network->unknown_cap_exist = true; + } + else + { + network->unknown_cap_exist = false; + } + return 0; +} + +static inline u8 rtllib_SignalStrengthTranslate( + u8 CurrSS + ) +{ + u8 RetSS; + + if(CurrSS >= 71 && CurrSS <= 100) + { + RetSS = 90 + ((CurrSS - 70) / 3); + } + else if(CurrSS >= 41 && CurrSS <= 70) + { + RetSS = 78 + ((CurrSS - 40) / 3); + } + else if(CurrSS >= 31 && CurrSS <= 40) + { + RetSS = 66 + (CurrSS - 30); + } + else if(CurrSS >= 21 && CurrSS <= 30) + { + RetSS = 54 + (CurrSS - 20); + } + else if(CurrSS >= 5 && CurrSS <= 20) + { + RetSS = 42 + (((CurrSS - 5) * 2) / 3); + } + else if(CurrSS == 4) + { + RetSS = 36; + } + else if(CurrSS == 3) + { + RetSS = 27; + } + else if(CurrSS == 2) + { + RetSS = 18; + } + else if(CurrSS == 1) + { + RetSS = 9; + } + else + { + RetSS = CurrSS; + } + + + + return RetSS; +} + +long rtllib_translate_todbm(u8 signal_strength_index ) +{ + long signal_power; + + signal_power = (long)((signal_strength_index + 1) >> 1); + signal_power -= 95; + + return signal_power; +} + +#ifdef _RTL8192_EXT_PATCH_ +extern int rtllib_network_init( +#else +static inline int rtllib_network_init( +#endif + struct rtllib_device *ieee, + struct rtllib_probe_response *beacon, + struct rtllib_network *network, + struct rtllib_rx_stats *stats) +{ +#ifdef CONFIG_RTLLIB_DEBUG +#endif + + /* + network->qos_data.active = 0; + network->qos_data.supported = 0; + network->qos_data.param_count = 0; + network->qos_data.old_param_count = 0; + */ + memset(&network->qos_data, 0, sizeof(struct rtllib_qos_data)); + + /* Pull out fixed field data */ + memcpy(network->bssid, beacon->header.addr3, ETH_ALEN); + network->capability = le16_to_cpu(beacon->capability); + network->last_scanned = jiffies; + network->time_stamp[0] = le32_to_cpu(beacon->time_stamp[0]); + network->time_stamp[1] = le32_to_cpu(beacon->time_stamp[1]); + network->beacon_interval = le32_to_cpu(beacon->beacon_interval); + /* Where to pull this? beacon->listen_interval;*/ + network->listen_interval = 0x0A; + network->rates_len = network->rates_ex_len = 0; + network->last_associate = 0; + network->ssid_len = 0; + network->hidden_ssid_len = 0; + memset(network->hidden_ssid, 0, sizeof(network->hidden_ssid)); + network->flags = 0; + network->atim_window = 0; + network->erp_value = (network->capability & WLAN_CAPABILITY_IBSS) ? + 0x3 : 0x0; + network->berp_info_valid = false; + network->broadcom_cap_exist = false; + network->ralink_cap_exist = false; + network->atheros_cap_exist = false; + network->cisco_cap_exist = false; + network->unknown_cap_exist = false; + network->realtek_cap_exit = false; + network->marvell_cap_exist = false; +#ifdef THOMAS_TURBO + network->Turbo_Enable = 0; +#endif + network->SignalStrength = stats->SignalStrength; + network->RSSI = stats->SignalStrength; +#ifdef ENABLE_DOT11D + network->CountryIeLen = 0; + memset(network->CountryIeBuf, 0, MAX_IE_LEN); +#endif +#ifdef _RTL8192_EXT_PATCH_ + memset(network->hostname, 0, MAX_HOST_NAME_LENGTH); + network->hostname_len = 0; +#endif + HTInitializeBssDesc(&network->bssht); + if (stats->freq == RTLLIB_52GHZ_BAND) { + /* for A band (No DS info) */ + network->channel = stats->received_channel; + } else + network->flags |= NETWORK_HAS_CCK; + + network->wpa_ie_len = 0; + network->rsn_ie_len = 0; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + network->wzc_ie_len = 0; +#endif + + if (rtllib_parse_info_param(ieee, + beacon->info_element, + (stats->len - sizeof(*beacon)), + network, + stats)) + return 1; + + network->mode = 0; + if (stats->freq == RTLLIB_52GHZ_BAND) + network->mode = IEEE_A; + else { + if (network->flags & NETWORK_HAS_OFDM) + network->mode |= IEEE_G; + if (network->flags & NETWORK_HAS_CCK) + network->mode |= IEEE_B; + } + + if (network->mode == 0) { + RTLLIB_DEBUG_SCAN("Filtered out '%s (" MAC_FMT ")' " + "network.\n", + escape_essid(network->ssid, + network->ssid_len), + MAC_ARG(network->bssid)); + return 1; + } + + if(network->bssht.bdSupportHT){ +#ifdef _RTL8192_EXT_PATCH_ + if(network->mode == IEEE_A) + network->mode |= IEEE_N_5G; + else if(network->mode & (IEEE_G | IEEE_B)) + network->mode |= IEEE_N_24G; +#else + if(network->mode == IEEE_A) + network->mode = IEEE_N_5G; + else if(network->mode & (IEEE_G | IEEE_B)) + network->mode = IEEE_N_24G; +#endif + } + if (rtllib_is_empty_essid(network->ssid, network->ssid_len)) + network->flags |= NETWORK_EMPTY_ESSID; + +#if 0 + { + static u8 Netgear845T_Mac[3] = {0x00, 0x1B, 0x2F}; + static u8 Buffalo300N_Mac[3] = {0x00, 0x16, 0x01}; + + if(ieee->RF_Type == RF_1T1R || ieee->b1SSSupport == true) + { + if((memcmp(network->bssid, Netgear845T_Mac, 3)==0) ||(memcmp(network->bssid, Buffalo300N_Mac, 3)==0)) + { + network->bIsNetgear854T = true; + network->bssht.bdSupportHT = false; + if(network->mode == WIRELESS_MODE_N_24G) + { + network->mode = WIRELESS_MODE_B | WIRELESS_MODE_G; + } + + } + else + { + network->bIsNetgear854T = false; + } + } + } +#endif + +#if 1 + stats->signal = 30 + (stats->SignalStrength * 70) / 100; + stats->noise = rtllib_translate_todbm((u8)(100-stats->signal)) -25; +#endif + + memcpy(&network->stats, stats, sizeof(network->stats)); + + return 0; +} + +static inline int is_same_network(struct rtllib_network *src, + struct rtllib_network *dst, u8 ssidbroad) +{ + /* A network is only a duplicate if the channel, BSSID, ESSID + * and the capability field (in particular IBSS and BSS) all match. + * We treat all with the same BSSID and channel + * as one network */ + return + (((src->ssid_len == dst->ssid_len) || (!ssidbroad)) && + (src->channel == dst->channel) && + !memcmp(src->bssid, dst->bssid, ETH_ALEN) && + (!memcmp(src->ssid, dst->ssid, src->ssid_len) || (!ssidbroad)) && + ((src->capability & WLAN_CAPABILITY_IBSS) == + (dst->capability & WLAN_CAPABILITY_IBSS)) && + ((src->capability & WLAN_CAPABILITY_ESS) == + (dst->capability & WLAN_CAPABILITY_ESS))); +} + +static inline void update_network(struct rtllib_network *dst, + struct rtllib_network *src) +{ + int qos_active; + u8 old_param; + + memcpy(&dst->stats, &src->stats, sizeof(struct rtllib_rx_stats)); + dst->capability = src->capability; + memcpy(dst->rates, src->rates, src->rates_len); + dst->rates_len = src->rates_len; + memcpy(dst->rates_ex, src->rates_ex, src->rates_ex_len); + dst->rates_ex_len = src->rates_ex_len; + if(src->ssid_len > 0) + { + if(dst->ssid_len == 0) + { + memset(dst->hidden_ssid, 0, sizeof(dst->hidden_ssid)); + dst->hidden_ssid_len = src->ssid_len; + memcpy(dst->hidden_ssid, src->ssid, src->ssid_len); + }else{ + memset(dst->ssid, 0, dst->ssid_len); + dst->ssid_len = src->ssid_len; + memcpy(dst->ssid, src->ssid, src->ssid_len); + } + } + dst->mode = src->mode; + dst->flags = src->flags; + dst->time_stamp[0] = src->time_stamp[0]; + dst->time_stamp[1] = src->time_stamp[1]; + if (src->flags & NETWORK_HAS_ERP_VALUE) + { + dst->erp_value = src->erp_value; + dst->berp_info_valid = src->berp_info_valid = true; + } + dst->beacon_interval = src->beacon_interval; + dst->listen_interval = src->listen_interval; + dst->atim_window = src->atim_window; + dst->dtim_period = src->dtim_period; + dst->dtim_data = src->dtim_data; + dst->last_dtim_sta_time[0] = src->last_dtim_sta_time[0]; + dst->last_dtim_sta_time[1] = src->last_dtim_sta_time[1]; + memcpy(&dst->tim, &src->tim, sizeof(struct rtllib_tim_parameters)); + + dst->bssht.bdSupportHT = src->bssht.bdSupportHT; + dst->bssht.bdRT2RTAggregation = src->bssht.bdRT2RTAggregation; + dst->bssht.bdHTCapLen= src->bssht.bdHTCapLen; + memcpy(dst->bssht.bdHTCapBuf,src->bssht.bdHTCapBuf,src->bssht.bdHTCapLen); + dst->bssht.bdHTInfoLen= src->bssht.bdHTInfoLen; + memcpy(dst->bssht.bdHTInfoBuf,src->bssht.bdHTInfoBuf,src->bssht.bdHTInfoLen); + dst->bssht.bdHTSpecVer = src->bssht.bdHTSpecVer; + dst->bssht.bdRT2RTLongSlotTime = src->bssht.bdRT2RTLongSlotTime; + dst->broadcom_cap_exist = src->broadcom_cap_exist; + dst->ralink_cap_exist = src->ralink_cap_exist; + dst->atheros_cap_exist = src->atheros_cap_exist; + dst->realtek_cap_exit = src->realtek_cap_exit; + dst->marvell_cap_exist = src->marvell_cap_exist; + dst->cisco_cap_exist = src->cisco_cap_exist; + dst->unknown_cap_exist = src->unknown_cap_exist; + memcpy(dst->wpa_ie, src->wpa_ie, src->wpa_ie_len); + dst->wpa_ie_len = src->wpa_ie_len; + memcpy(dst->rsn_ie, src->rsn_ie, src->rsn_ie_len); + dst->rsn_ie_len = src->rsn_ie_len; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + memcpy(dst->wzc_ie, src->wzc_ie, src->wzc_ie_len); + dst->wzc_ie_len = src->wzc_ie_len; +#endif + + dst->last_scanned = jiffies; + /* qos related parameters */ + qos_active = dst->qos_data.active; + old_param = dst->qos_data.param_count; +#if 0 + if(dst->flags & NETWORK_HAS_QOS_MASK){ + } + else { + dst->qos_data.supported = src->qos_data.supported; + dst->qos_data.param_count = src->qos_data.param_count; + } +#else + dst->qos_data.supported = src->qos_data.supported; + if(dst->flags & NETWORK_HAS_QOS_PARAMETERS){ + memcpy(&dst->qos_data, &src->qos_data, sizeof(struct rtllib_qos_data)); + } +#endif + if(dst->qos_data.supported == 1) { + if(dst->ssid_len) + RTLLIB_DEBUG_QOS + ("QoS the network %s is QoS supported\n", + dst->ssid); + else + RTLLIB_DEBUG_QOS + ("QoS the network is QoS supported\n"); + } + dst->qos_data.active = qos_active; + dst->qos_data.old_param_count = old_param; + + /* dst->last_associate is not overwritten */ + dst->wmm_info = src->wmm_info; + if(src->wmm_param[0].ac_aci_acm_aifsn|| \ + src->wmm_param[1].ac_aci_acm_aifsn|| \ + src->wmm_param[2].ac_aci_acm_aifsn|| \ + src->wmm_param[1].ac_aci_acm_aifsn) { + memcpy(dst->wmm_param, src->wmm_param, WME_AC_PRAM_LEN); + } + + dst->SignalStrength = src->SignalStrength; + dst->RSSI = src->RSSI; +#ifdef THOMAS_TURBO + dst->Turbo_Enable = src->Turbo_Enable; +#endif + +#ifdef ENABLE_DOT11D + dst->CountryIeLen = src->CountryIeLen; + memcpy(dst->CountryIeBuf, src->CountryIeBuf, src->CountryIeLen); +#endif + + dst->bWithAironetIE = src->bWithAironetIE; + dst->bCkipSupported = src->bCkipSupported; + memcpy(dst->CcxRmState,src->CcxRmState,2); + dst->bCcxRmEnable = src->bCcxRmEnable; + dst->MBssidMask = src->MBssidMask; + dst->bMBssidValid = src->bMBssidValid; + memcpy(dst->MBssid,src->MBssid,6); + dst->bWithCcxVerNum = src->bWithCcxVerNum; + dst->BssCcxVerNumber = src->BssCcxVerNumber; + +} +static inline int is_beacon(__le16 fc) +{ + return (WLAN_FC_GET_STYPE(le16_to_cpu(fc)) == RTLLIB_STYPE_BEACON); +} + +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +u8 AsocEntry_ComputeSum(u8 *paddr) +{ + u32 sum; + + sum = paddr[0]+ + paddr[1]+ + paddr[2]+ + paddr[3]+ + paddr[4]+ + paddr[5]; + + return (u8)(sum % PEER_MAX_ASSOC); +} +u8 AsocEntry_AssignAvailableAID(struct rtllib_device *ieee, u8 *paddr) +{ + int i; + + for(i = 0; i < PEER_MAX_ASSOC; i++) + { + if(ieee->AvailableAIDTable[i] == 99) + { + ieee->AvailableAIDTable[i] = AsocEntry_ComputeSum(paddr); + return i+1; + } + } + + return 1; +} + +void InitStaInfo(struct rtllib_device *ieee,int index) +{ + int idx = index; + ieee->peer_assoc_list[idx]->StaDataRate = 0; + ieee->peer_assoc_list[idx]->StaSS = 0; + ieee->peer_assoc_list[idx]->RetryFrameCnt = 0; + ieee->peer_assoc_list[idx]->NoRetryFrameCnt = 0; + ieee->peer_assoc_list[idx]->LastRetryCnt = 0; + ieee->peer_assoc_list[idx]->LastNoRetryCnt = 0; + ieee->peer_assoc_list[idx]->AvgRetryRate = 0; + ieee->peer_assoc_list[idx]->LastRetryRate = 0; + ieee->peer_assoc_list[idx]->txRateIndex = 11; + ieee->peer_assoc_list[idx]->APDataRate = 0x2; + ieee->peer_assoc_list[idx]->ForcedDataRate = 0x2; + +} +static u8 IsStaInfoExist(struct rtllib_device *ieee, u8 *addr) +{ + int k=0; + struct sta_info * psta = NULL; + u8 sta_idx = PEER_MAX_ASSOC; + + for(k=0; kpeer_assoc_list[k]; + if(NULL != psta) + { + if(memcmp(addr, psta->macaddr, ETH_ALEN) == 0) + { + sta_idx = k; + break; + } + } + } + return sta_idx; +} +static u8 GetFreeStaInfoIdx(struct rtllib_device *ieee, u8 *addr) +{ + int k = 0; + while((ieee->peer_assoc_list[k] != NULL) && (k < PEER_MAX_ASSOC)) + k++; + printk("%s: addr:"MAC_FMT" index: %d\n", __FUNCTION__, MAC_ARG(addr), k); + return k; +} +struct sta_info *GetStaInfo(struct rtllib_device *ieee, u8 *addr) +{ + int k=0; + struct sta_info * psta = NULL; + struct sta_info * psta_find = NULL; + + for(k=0; kpeer_assoc_list[k]; + if(NULL != psta) + { + if(memcmp(addr, psta->macaddr, ETH_ALEN) == 0) + { + psta_find = psta; + break; + } + } + } + return psta_find; +} +void DelStaInfoList(struct rtllib_device *ieee) +{ + int idx = 0; + struct sta_info * AsocEntry = NULL; + + atomic_set(&ieee->AsocEntryNum, 0); + for(idx=0; idxpeer_assoc_list[idx]; + if(NULL != AsocEntry){ + kfree(AsocEntry); + ieee->peer_assoc_list[idx] = NULL; + } + ieee->AvailableAIDTable[idx] = 99; + } +} +void DelStaInfo(struct rtllib_device *ieee, u8 *addr) +{ + struct sta_info * psta = NULL; + int k=0; + + for(k=0; kpeer_assoc_list[k]; + if(NULL != psta){ + if(memcmp(addr, psta->macaddr, ETH_ALEN) == 0){ + if (psta->aid > 0 && psta->aid-1 < PEER_MAX_ASSOC) + ieee->AvailableAIDTable[psta->aid-1] = 99; + else + printk("%s(): clear non-existing entry AID\n", __func__); + + kfree(psta); + ieee->peer_assoc_list[k] = NULL; + atomic_dec(&ieee->AsocEntryNum); + } + } + } +} +void IbssAgeFunction(struct rtllib_device *ieee) +{ + struct sta_info* AsocEntry = NULL; + int idx; + unsigned long CurrentTime; + signed long TimeDifference; + struct rtllib_network *target; + + CurrentTime = jiffies; + + for(idx = 0; idx < PEER_MAX_ASSOC; idx++) + { + AsocEntry = ieee->peer_assoc_list[idx]; + if(AsocEntry) + { + TimeDifference = jiffies_to_msecs(CurrentTime - AsocEntry->LastActiveTime); + + if(TimeDifference > 20000) + { + printk("IbssAgeFunction(): "MAC_FMT" timeout\n", MAC_ARG(AsocEntry->macaddr)); +#ifdef RTL8192S_WAPI_SUPPORT + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)) + { + WapiReturnOneStaInfo(ieee, AsocEntry->macaddr, 0); + } +#endif + kfree(AsocEntry); + ieee->peer_assoc_list[idx] = NULL; + atomic_dec(&ieee->AsocEntryNum); + + if(atomic_read(&ieee->AsocEntryNum) == 0){ + + down(&ieee->wx_sem); + rtllib_stop_protocol(ieee,true); + + list_for_each_entry(target, &ieee->network_list, list) { + if (is_same_network(target, &ieee->current_network,(target->ssid_len?1:0))){ + printk("delete sta of previous Ad-hoc\n"); + list_del(&target->list); + break; + } + } + + rtllib_start_protocol(ieee); + up(&ieee->wx_sem); + }else{ +#if defined (RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){ + WAPI_CreateEvent_Send(ieee, WAPI_EVENT_CONNECT, ieee->current_network.bssid, NULL, 0); + } +#endif + } + } + } + } + +#ifdef TO_DO_LIST + if(AsocEntry_AnyStationAssociated(pMgntInfo)==false) + DrvIFIndicateDisassociation(Adapter, unspec_reason); + + if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_G || + (IS_WIRELESS_MODE_N_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK) ) + { + if(nBModeStaCnt == 0) + { + pMgntInfo->bUseProtection = false; + ActUpdate_mCapInfo(Adapter, pMgntInfo->mCap); + } + } + + if(IS_WIRELESS_MODE_N_24G(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter) ) + { + if(nLegacyStaCnt > 0) + { + pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_MIXED; + } + else + { + if((pMgntInfo->pHTInfo->bCurBW40MHz) && (n20MHzStaCnt > 0)) + pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_40MHZ_PROTECT; + else + pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_NO_PROTECT; + + } + } + + if(IS_WIRELESS_MODE_G(Adapter) || + (IS_WIRELESS_MODE_N_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)) + { + if(pMgntInfo->bUseProtection) + { + u8 CckRate[4] = { MGN_1M, MGN_2M, MGN_5_5M, MGN_11M }; + OCTET_STRING osCckRate; + FillOctetString(osCckRate, CckRate, 4); + FilterSupportRate(pMgntInfo->mBrates, &osCckRate, false); + Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osCckRate); + } + else + { + Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) ); + } + } +#endif +} +#endif + +static int IsPassiveChannel( struct rtllib_device *rtllib, u8 channel) +{ + if (MAX_CHANNEL_NUMBER < channel) { + printk("%s(): Invalid Channel\n", __FUNCTION__); + return 0; + } + + if(rtllib->active_channel_map[channel] == 2) + return 1; + + return 0; +} + +int IsLegalChannel( struct rtllib_device *rtllib, u8 channel) +{ + if (MAX_CHANNEL_NUMBER < channel) { + printk("%s(): Invalid Channel\n", __FUNCTION__); + return 0; + } + if (rtllib->active_channel_map[channel] > 0) + return 1; + + return 0; +} + + +static inline void rtllib_process_probe_response( + struct rtllib_device *ieee, + struct rtllib_probe_response *beacon, + struct rtllib_rx_stats *stats) +{ + struct rtllib_network *target; + struct rtllib_network *oldest = NULL; +#ifdef CONFIG_RTLLIB_DEBUG + struct rtllib_info_element *info_element = &beacon->info_element[0]; +#endif + unsigned long flags; + short renew; +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) + struct rtllib_network *network = kzalloc(sizeof(struct rtllib_network), GFP_ATOMIC); +#else + struct rtllib_network *network = kmalloc(sizeof(*network), GFP_KERNEL); + memset(network,0,sizeof(*network)); +#endif + + if (!network) { + return; + } + +#ifdef _RTL8192_EXT_PATCH_ + if(ieee->ext_patch_rtllib_process_probe_response_1) { + /* 2 deonte the normal beacon packet, + * discard it under mesh only mode */ + if(ieee->ext_patch_rtllib_process_probe_response_1(ieee, beacon, stats) != 2){ + goto free_network; + } else if((ieee->iw_mode == IW_MODE_MESH)&&ieee->only_mesh) { + goto free_network; + } + } +#endif + + RTLLIB_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 (rtllib_network_init(ieee, beacon, network, stats)) { + RTLLIB_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) == + RTLLIB_STYPE_PROBE_RESP ? + "PROBE RESPONSE" : "BEACON"); + goto free_network; + } + + + if (!IsLegalChannel(ieee, network->channel)) + goto free_network; + + if (WLAN_FC_GET_STYPE(beacon->header.frame_ctl) == RTLLIB_STYPE_PROBE_RESP) { + if (IsPassiveChannel(ieee, network->channel)) { + printk("GetScanInfo(): For Global Domain, " + "filter probe response at channel(%d).\n", network->channel); + goto free_network; + } + } + + /* The network parsed correctly -- so now we scan our known networks + * to see if we can find it in our list. + * + * NOTE: This search is definitely not optimized. Once its doing + * the "right thing" we'll optimize it for efficiency if + * necessary */ + + /* Search for this entry in the list and update it if it is + * already there. */ + + spin_lock_irqsave(&ieee->lock, flags); +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(is_beacon(beacon->header.frame_ctl)){ + if((ieee->iw_mode == IW_MODE_ADHOC) && (ieee->state == RTLLIB_LINKED)) + { + if((network->ssid_len == ieee->current_network.ssid_len) + && (!memcmp(network->ssid,ieee->current_network.ssid,ieee->current_network.ssid_len)) + && (network->channel == ieee->current_network.channel) + && (ieee->current_network.channel > 0) + && (ieee->current_network.channel <= 14)) + { + if(!memcmp(ieee->current_network.bssid,network->bssid,6)) + { + int idx = 0; + struct rtllib_hdr_3addr* header = NULL; + int idx_exist = 0; + if(timer_pending(&ieee->ibss_wait_timer)) + del_timer_sync(&ieee->ibss_wait_timer); + header = (struct rtllib_hdr_3addr*)&(beacon->header); + idx_exist = IsStaInfoExist(ieee,header->addr2); + if(idx_exist >= PEER_MAX_ASSOC) { + idx = GetFreeStaInfoIdx(ieee, header->addr2); + } else { + ieee->peer_assoc_list[idx_exist]->LastActiveTime = jiffies; + goto no_alloc; + } + if (idx >= PEER_MAX_ASSOC - 1) { + printk("\n%s():ERR!!!Buffer overflow - could not append!!!",__FUNCTION__); + goto free_network; + } else { + ieee->peer_assoc_list[idx] = (struct sta_info *)kmalloc(sizeof(struct sta_info), GFP_ATOMIC); + memset(ieee->peer_assoc_list[idx], 0, sizeof(struct sta_info)); + ieee->peer_assoc_list[idx]->LastActiveTime = jiffies; + memcpy(ieee->peer_assoc_list[idx]->macaddr,header->addr2,ETH_ALEN); + ieee->peer_assoc_list[idx]->ratr_index = 8; + InitStaInfo(ieee,idx); + atomic_inc(&ieee->AsocEntryNum); + ieee->peer_assoc_list[idx]->aid = AsocEntry_AssignAvailableAID(ieee, ieee->peer_assoc_list[idx]->macaddr); + ieee->check_ht_cap(ieee->dev,ieee->peer_assoc_list[idx],network); + queue_delayed_work_rsl(ieee->wq, &ieee->update_assoc_sta_info_wq, 0); + ieee->Adhoc_InitRateAdaptive(ieee->dev,ieee->peer_assoc_list[idx]); + } +#if defined (RTL8192S_WAPI_SUPPORT) + if ((ieee->WapiSupport) && (ieee->wapiInfo.bWapiEnable)){ + WapiCreateAppEventAndSend(ieee,NULL,0,header->addr2,false, false, false, 0, false); + } +#endif + } + else + { +#if 0 + printk("%s(): SSID matched but BSSID mismatched.\n",__FUNCTION__); + + ieee->TargetTsf = beacon->time_stamp[1]; + ieee->TargetTsf <<= 32; + ieee->TargetTsf |= beacon->time_stamp[0]; + + ieee->CurrTsf = stats->TimeStampLow; + + queue_delayed_work_rsl(ieee->wq, &ieee->check_tsf_wq, 0); +#endif + } + } + } + } + if(ieee->iw_mode == IW_MODE_ADHOC){ + if((network->ssid_len == ieee->current_network.ssid_len) + && (!memcmp(network->ssid,ieee->current_network.ssid,ieee->current_network.ssid_len)) + && (network->capability & WLAN_CAPABILITY_IBSS) + && (ieee->state == RTLLIB_LINKED_SCANNING)) + { + if(memcmp(ieee->current_network.bssid,network->bssid,6)) + { + printk("%s(): SSID matched but BSSID mismatched.\n",__FUNCTION__); + + ieee->TargetTsf = beacon->time_stamp[1]; + ieee->TargetTsf <<= 32; + ieee->TargetTsf |= beacon->time_stamp[0]; + + ieee->CurrTsf = stats->TimeStampLow; + + queue_delayed_work_rsl(ieee->wq, &ieee->check_tsf_wq, 0); + } + } + } +#endif +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +no_alloc: + if(ieee->iw_mode == IW_MODE_INFRA) +#endif + { + if(is_same_network(&ieee->current_network, network, (network->ssid_len?1:0))) { + update_network(&ieee->current_network, network); + if((ieee->current_network.mode == IEEE_N_24G || ieee->current_network.mode == IEEE_G) + && ieee->current_network.berp_info_valid){ + if(ieee->current_network.erp_value& ERP_UseProtection) + ieee->current_network.buseprotection = true; + else + ieee->current_network.buseprotection = false; + } + if(is_beacon(beacon->header.frame_ctl)) + { + if(ieee->state >= RTLLIB_LINKED) + ieee->LinkDetectInfo.NumRecvBcnInPeriod++; + } +#if 0 + else + network.flags = (~NETWORK_EMPTY_ESSID & network.flags)|(NETWORK_EMPTY_ESSID & ieee->current_network.flags); +#endif + } + } +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + else if(ieee->iw_mode == IW_MODE_ADHOC) + { + ieee->current_network.last_scanned = jiffies; + } +#endif + list_for_each_entry(target, &ieee->network_list, list) { + if (is_same_network(target, network,(target->ssid_len?1:0))) + break; + if ((oldest == NULL) || + (target->last_scanned < oldest->last_scanned)) + oldest = target; + } + + /* If we didn't find a match, then get a new network slot to initialize + * with this beacon's information */ + if (&target->list == &ieee->network_list) { + if (list_empty(&ieee->network_free_list)) { + /* If there are no more slots, expire the oldest */ + list_del(&oldest->list); + target = oldest; + RTLLIB_DEBUG_SCAN("Expired '%s' (" MAC_FMT ") from " + "network list.\n", + escape_essid(target->ssid, + target->ssid_len), + MAC_ARG(target->bssid)); + } else { + /* Otherwise just pull from the free list */ + target = list_entry(ieee->network_free_list.next, + struct rtllib_network, list); + list_del(ieee->network_free_list.next); + } + + +#ifdef CONFIG_RTLLIB_DEBUG + RTLLIB_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) == + RTLLIB_STYPE_PROBE_RESP ? + "PROBE RESPONSE" : "BEACON"); +#endif +#ifdef _RTL8192_EXT_PATCH_ + network->ext_entry = target->ext_entry; +#endif + memcpy(target, network, sizeof(*target)); + list_add_tail(&target->list, &ieee->network_list); + if(ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) + rtllib_softmac_new_net(ieee, network); + } else { + RTLLIB_DEBUG_SCAN("Updating '%s' (" MAC_FMT ") via %s.\n", + escape_essid(target->ssid, + target->ssid_len), + MAC_ARG(target->bssid), + WLAN_FC_GET_STYPE(beacon->header.frame_ctl) == + RTLLIB_STYPE_PROBE_RESP ? + "PROBE RESPONSE" : "BEACON"); + + /* we have an entry and we are going to update it. But this entry may + * be already expired. In this case we do the same as we found a new + * net and call the new_net handler + */ + renew = !time_after(target->last_scanned + ieee->scan_age, jiffies); +#if 0 + if(is_beacon(beacon->header.frame_ctl) == 0) + network.flags = (~NETWORK_EMPTY_ESSID & network.flags)|(NETWORK_EMPTY_ESSID & target->flags); + if(((network.flags & NETWORK_EMPTY_ESSID) == NETWORK_EMPTY_ESSID) \ + && (((network.ssid_len > 0) && (strncmp(target->ssid, network.ssid, network.ssid_len)))\ + ||((ieee->current_network.ssid_len == network.ssid_len)&&(strncmp(ieee->current_network.ssid, network.ssid, network.ssid_len) == 0)&&(ieee->state == RTLLIB_NOLINK)))) + renew = 1; +#else + if((!target->ssid_len) && + (((network->ssid_len > 0) && (target->hidden_ssid_len == 0)) + || ((ieee->current_network.ssid_len == network->ssid_len) && + (strncmp(ieee->current_network.ssid, network->ssid, network->ssid_len) == 0) && + (ieee->state == RTLLIB_NOLINK))) + ) { + renew = 1; + } +#endif +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) + if(ieee->iw_mode == IW_MODE_ADHOC) + target->last_scanned = jiffies; + else + update_network(target, network); +#else + update_network(target, network); +#endif + if(renew && (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE)) + rtllib_softmac_new_net(ieee, network); + } + + spin_unlock_irqrestore(&ieee->lock, flags); + if (is_beacon(beacon->header.frame_ctl)&&is_same_network(&ieee->current_network, network, (network->ssid_len?1:0))&&\ + (ieee->state == RTLLIB_LINKED)) { + if(ieee->handle_beacon != NULL) { + ieee->handle_beacon(ieee->dev,beacon,&ieee->current_network); + } + } +free_network: + kfree(network); + return; +} + +void rtllib_rx_mgt(struct rtllib_device *ieee, + struct sk_buff *skb, + struct rtllib_rx_stats *stats) +{ + struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data ; +#if 0 + if(ieee->sta_sleep || (ieee->ps != RTLLIB_PS_DISABLED && + ieee->iw_mode == IW_MODE_INFRA && + ieee->state == RTLLIB_LINKED)) + { + tasklet_schedule(&ieee->ps_task); + } +#endif + if(WLAN_FC_GET_STYPE(header->frame_ctl) != RTLLIB_STYPE_PROBE_RESP && + WLAN_FC_GET_STYPE(header->frame_ctl) != RTLLIB_STYPE_BEACON) + ieee->last_rx_ps_time = jiffies; + + switch (WLAN_FC_GET_STYPE(header->frame_ctl)) { + + case RTLLIB_STYPE_BEACON: + RTLLIB_DEBUG_MGMT("received BEACON (%d)\n", + WLAN_FC_GET_STYPE(header->frame_ctl)); + RTLLIB_DEBUG_SCAN("Beacon\n"); + rtllib_process_probe_response( + ieee, (struct rtllib_probe_response *)header, stats); + +#ifdef ENABLE_LPS + if(ieee->sta_sleep || (ieee->ps != RTLLIB_PS_DISABLED && + ieee->iw_mode == IW_MODE_INFRA && + ieee->state == RTLLIB_LINKED)) + { + tasklet_schedule(&ieee->ps_task); + } +#endif + + break; + + case RTLLIB_STYPE_PROBE_RESP: + RTLLIB_DEBUG_MGMT("received PROBE RESPONSE (%d)\n", + WLAN_FC_GET_STYPE(header->frame_ctl)); + RTLLIB_DEBUG_SCAN("Probe response\n"); + rtllib_process_probe_response( + ieee, (struct rtllib_probe_response *)header, stats); + break; + case RTLLIB_STYPE_PROBE_REQ: + RTLLIB_DEBUG_MGMT("received PROBE RESQUEST (%d)\n", + WLAN_FC_GET_STYPE(header->frame_ctl)); + RTLLIB_DEBUG_SCAN("Probe request\n"); + if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) && + ((ieee->iw_mode == IW_MODE_ADHOC || + ieee->iw_mode == IW_MODE_MASTER) && + ieee->state == RTLLIB_LINKED)){ + rtllib_rx_probe_rq(ieee, skb); + } +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH) && ieee->ext_patch_rtllib_rx_mgt_on_probe_req ) + ieee->ext_patch_rtllib_rx_mgt_on_probe_req( ieee, (struct rtllib_probe_request *)header, stats); +#endif + break; + } + +#if 0 +#ifdef CONFIG_CFG_80211 + if((rtllib_act_scanning(ieee,false) == true) && ((WLAN_FC_GET_STYPE(header->frame_ctl) ==RTLLIB_STYPE_PROBE_RESP) || + (WLAN_FC_GET_STYPE(header->frame_ctl) ==RTLLIB_STYPE_BEACON))) + return ieee80211_scan_rx(ieee, skb, stats); +#endif +#endif +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_rx_mgt); +EXPORT_SYMBOL_RSL(rtllib_rx); +EXPORT_SYMBOL_RSL(IsLegalChannel); +#if defined(RTL8192U) || defined(RTL8192SU) || defined(RTL8192SE) +EXPORT_SYMBOL_RSL(IbssAgeFunction); +EXPORT_SYMBOL_RSL(GetStaInfo); +#endif +#ifdef _RTL8192_EXT_PATCH_ +EXPORT_SYMBOL_RSL(rtllib_network_init); +EXPORT_SYMBOL_RSL(rtllib_parse_info_param); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/cipher.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/cipher.c @@ -0,0 +1,298 @@ +/* + * Cryptographic API. + * + * Cipher operations. + * + * Copyright (c) 2002 James Morris + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#include +#include "rtl_crypto.h" +#include +#include +#include +#include +#include "internal.h" +#include "scatterwalk.h" + +typedef void (cryptfn_t)(void *, u8 *, const u8 *); +typedef void (procfn_t)(struct crypto_tfm *, u8 *, + u8*, cryptfn_t, int enc, void *, int); + +static inline void xor_64(u8 *a, const u8 *b) +{ + ((u32 *)a)[0] ^= ((u32 *)b)[0]; + ((u32 *)a)[1] ^= ((u32 *)b)[1]; +} + +static inline void xor_128(u8 *a, const u8 *b) +{ + ((u32 *)a)[0] ^= ((u32 *)b)[0]; + ((u32 *)a)[1] ^= ((u32 *)b)[1]; + ((u32 *)a)[2] ^= ((u32 *)b)[2]; + ((u32 *)a)[3] ^= ((u32 *)b)[3]; +} + + +/* + * Generic encrypt/decrypt wrapper for ciphers, handles operations across + * multiple page boundaries by using temporary blocks. In user context, + * the kernel is given a chance to schedule us once per block. + */ +static int crypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, cryptfn_t crfn, + procfn_t prfn, int enc, void *info) +{ + struct scatter_walk walk_in, walk_out; + const unsigned int bsize = crypto_tfm_alg_blocksize(tfm); + u8 tmp_src[bsize]; + u8 tmp_dst[bsize]; + + if (!nbytes) + return 0; + + if (nbytes % bsize) { + tfm->crt_flags |= CRYPTO_TFM_RES_BAD_BLOCK_LEN; + return -EINVAL; + } + + scatterwalk_start(&walk_in, src); + scatterwalk_start(&walk_out, dst); + + for(;;) { + u8 *src_p, *dst_p; + int in_place; + + scatterwalk_map(&walk_in, 0); + scatterwalk_map(&walk_out, 1); + src_p = scatterwalk_whichbuf(&walk_in, bsize, tmp_src); + dst_p = scatterwalk_whichbuf(&walk_out, bsize, tmp_dst); + in_place = scatterwalk_samebuf(&walk_in, &walk_out, + src_p, dst_p); + + nbytes -= bsize; + + scatterwalk_copychunks(src_p, &walk_in, bsize, 0); + + prfn(tfm, dst_p, src_p, crfn, enc, info, in_place); + + scatterwalk_done(&walk_in, 0, nbytes); + + scatterwalk_copychunks(dst_p, &walk_out, bsize, 1); + scatterwalk_done(&walk_out, 1, nbytes); + + if (!nbytes) + return 0; + + crypto_yield(tfm); + } +} + +static void cbc_process(struct crypto_tfm *tfm, u8 *dst, u8 *src, + cryptfn_t fn, int enc, void *info, int in_place) +{ + u8 *iv = info; + + /* Null encryption */ + if (!iv) + return; + + if (enc) { + tfm->crt_u.cipher.cit_xor_block(iv, src); + fn(crypto_tfm_ctx(tfm), dst, iv); + memcpy(iv, dst, crypto_tfm_alg_blocksize(tfm)); + } else { + u8 stack[in_place ? crypto_tfm_alg_blocksize(tfm) : 0]; + u8 *buf = in_place ? stack : dst; + + fn(crypto_tfm_ctx(tfm), buf, src); + tfm->crt_u.cipher.cit_xor_block(buf, iv); + memcpy(iv, src, crypto_tfm_alg_blocksize(tfm)); + if (buf != dst) + memcpy(dst, buf, crypto_tfm_alg_blocksize(tfm)); + } +} + +static void ecb_process(struct crypto_tfm *tfm, u8 *dst, u8 *src, + cryptfn_t fn, int enc, void *info, int in_place) +{ + fn(crypto_tfm_ctx(tfm), dst, src); +} + +static int setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen) +{ + struct cipher_alg *cia = &tfm->__crt_alg->cra_cipher; + + if (keylen < cia->cia_min_keysize || keylen > cia->cia_max_keysize) { + tfm->crt_flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; + return -EINVAL; + } else + return cia->cia_setkey(crypto_tfm_ctx(tfm), key, keylen, + &tfm->crt_flags); +} + +static int ecb_encrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, unsigned int nbytes) +{ + return crypt(tfm, dst, src, nbytes, + tfm->__crt_alg->cra_cipher.cia_encrypt, + ecb_process, 1, NULL); +} + +static int ecb_decrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + return crypt(tfm, dst, src, nbytes, + tfm->__crt_alg->cra_cipher.cia_decrypt, + ecb_process, 1, NULL); +} + +static int cbc_encrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + return crypt(tfm, dst, src, nbytes, + tfm->__crt_alg->cra_cipher.cia_encrypt, + cbc_process, 1, tfm->crt_cipher.cit_iv); +} + +static int cbc_encrypt_iv(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv) +{ + return crypt(tfm, dst, src, nbytes, + tfm->__crt_alg->cra_cipher.cia_encrypt, + cbc_process, 1, iv); +} + +static int cbc_decrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + return crypt(tfm, dst, src, nbytes, + tfm->__crt_alg->cra_cipher.cia_decrypt, + cbc_process, 0, tfm->crt_cipher.cit_iv); +} + +static int cbc_decrypt_iv(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv) +{ + return crypt(tfm, dst, src, nbytes, + tfm->__crt_alg->cra_cipher.cia_decrypt, + cbc_process, 0, iv); +} + +static int nocrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + return -ENOSYS; +} + +static int nocrypt_iv(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes, u8 *iv) +{ + return -ENOSYS; +} + +int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags) +{ + u32 mode = flags & CRYPTO_TFM_MODE_MASK; + + tfm->crt_cipher.cit_mode = mode ? mode : CRYPTO_TFM_MODE_ECB; + if (flags & CRYPTO_TFM_REQ_WEAK_KEY) + tfm->crt_flags = CRYPTO_TFM_REQ_WEAK_KEY; + + return 0; +} + +int crypto_init_cipher_ops(struct crypto_tfm *tfm) +{ + int ret = 0; + struct cipher_tfm *ops = &tfm->crt_cipher; + + ops->cit_setkey = setkey; + + switch (tfm->crt_cipher.cit_mode) { + case CRYPTO_TFM_MODE_ECB: + ops->cit_encrypt = ecb_encrypt; + ops->cit_decrypt = ecb_decrypt; + break; + + case CRYPTO_TFM_MODE_CBC: + ops->cit_encrypt = cbc_encrypt; + ops->cit_decrypt = cbc_decrypt; + ops->cit_encrypt_iv = cbc_encrypt_iv; + ops->cit_decrypt_iv = cbc_decrypt_iv; + break; + + case CRYPTO_TFM_MODE_CFB: + ops->cit_encrypt = nocrypt; + ops->cit_decrypt = nocrypt; + ops->cit_encrypt_iv = nocrypt_iv; + ops->cit_decrypt_iv = nocrypt_iv; + break; + + case CRYPTO_TFM_MODE_CTR: + ops->cit_encrypt = nocrypt; + ops->cit_decrypt = nocrypt; + ops->cit_encrypt_iv = nocrypt_iv; + ops->cit_decrypt_iv = nocrypt_iv; + break; + + default: + BUG(); + } + + if (ops->cit_mode == CRYPTO_TFM_MODE_CBC) { + + switch (crypto_tfm_alg_blocksize(tfm)) { + case 8: + ops->cit_xor_block = xor_64; + break; + + case 16: + ops->cit_xor_block = xor_128; + break; + + default: + printk(KERN_WARNING "%s: block size %u not supported\n", + crypto_tfm_alg_name(tfm), + crypto_tfm_alg_blocksize(tfm)); + ret = -EINVAL; + goto out; + } + + ops->cit_ivsize = crypto_tfm_alg_blocksize(tfm); + ops->cit_iv = kmalloc(ops->cit_ivsize, GFP_KERNEL); + if (ops->cit_iv == NULL) + ret = -ENOMEM; + } + +out: + return ret; +} + +void crypto_exit_cipher_ops(struct crypto_tfm *tfm) +{ + if (tfm->crt_cipher.cit_iv) + kfree(tfm->crt_cipher.cit_iv); +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_BA.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_BA.h @@ -0,0 +1,79 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _BATYPE_H_ +#define _BATYPE_H_ + +#define TOTAL_TXBA_NUM 16 +#define TOTAL_RXBA_NUM 16 + +#define BA_SETUP_TIMEOUT 200 +#define BA_INACT_TIMEOUT 60000 + +#define BA_POLICY_DELAYED 0 +#define BA_POLICY_IMMEDIATE 1 + +#define ADDBA_STATUS_SUCCESS 0 +#define ADDBA_STATUS_REFUSED 37 +#define ADDBA_STATUS_INVALID_PARAM 38 + +#define DELBA_REASON_QSTA_LEAVING 36 +#define DELBA_REASON_END_BA 37 +#define DELBA_REASON_UNKNOWN_BA 38 +#define DELBA_REASON_TIMEOUT 39 +typedef union _SEQUENCE_CONTROL{ + u16 ShortData; + struct + { + u16 FragNum:4; + u16 SeqNum:12; + }field; +}SEQUENCE_CONTROL, *PSEQUENCE_CONTROL; + +typedef union _BA_PARAM_SET { + u8 charData[2]; + u16 shortData; + struct { + u16 AMSDU_Support:1; + u16 BAPolicy:1; + u16 TID:4; + u16 BufferSize:10; + } field; +} BA_PARAM_SET, *PBA_PARAM_SET; + +typedef union _DELBA_PARAM_SET { + u8 charData[2]; + u16 shortData; + struct { + u16 Reserved:11; + u16 Initiator:1; + u16 TID:4; + } field; +} DELBA_PARAM_SET, *PDELBA_PARAM_SET; + +typedef struct _BA_RECORD { + struct timer_list Timer; + u8 bValid; + u8 DialogToken; + BA_PARAM_SET BaParamSet; + u16 BaTimeoutValue; + SEQUENCE_CONTROL BaStartSeqCtrl; +} BA_RECORD, *PBA_RECORD; + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/digest.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/digest.c @@ -0,0 +1,120 @@ +/* + * Cryptographic API. + * + * Digest operations. + * + * Copyright (c) 2002 James Morris + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#include +#include "rtl_crypto.h" +#include +#include +#include +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) +#include +#else +#include +#endif +#include "internal.h" + +static void init(struct crypto_tfm *tfm) +{ + tfm->__crt_alg->cra_digest.dia_init(crypto_tfm_ctx(tfm)); +} + +static void update(struct crypto_tfm *tfm, + struct scatterlist *sg, unsigned int nsg) +{ + unsigned int i; + + for (i = 0; i < nsg; i++) { + + #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + struct page *pg = sg[i].page; + #else + struct page *pg = sg_page(&sg[i]); + #endif + unsigned int offset = sg[i].offset; + unsigned int l = sg[i].length; + + do { + unsigned int bytes_from_page = min(l, ((unsigned int) + (PAGE_SIZE)) - + offset); + char *p = crypto_kmap(pg, 0) + offset; + + tfm->__crt_alg->cra_digest.dia_update + (crypto_tfm_ctx(tfm), p, + bytes_from_page); + crypto_kunmap(p, 0); + crypto_yield(tfm); + offset = 0; + pg++; + l -= bytes_from_page; + } while (l > 0); + } +} + +static void final(struct crypto_tfm *tfm, u8 *out) +{ + tfm->__crt_alg->cra_digest.dia_final(crypto_tfm_ctx(tfm), out); +} + +static int setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen) +{ + u32 flags; + if (tfm->__crt_alg->cra_digest.dia_setkey == NULL) + return -ENOSYS; + return tfm->__crt_alg->cra_digest.dia_setkey(crypto_tfm_ctx(tfm), + key, keylen, &flags); +} + +static void digest(struct crypto_tfm *tfm, + struct scatterlist *sg, unsigned int nsg, u8 *out) +{ + unsigned int i; + + tfm->crt_digest.dit_init(tfm); + + for (i = 0; i < nsg; i++) { + #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + char *p = crypto_kmap(sg[i].page, 0) + sg[i].offset; + #else + char *p = crypto_kmap(sg_page(&sg[i]), 0) + sg[i].offset; + #endif + tfm->__crt_alg->cra_digest.dia_update(crypto_tfm_ctx(tfm), + p, sg[i].length); + crypto_kunmap(p, 0); + crypto_yield(tfm); + } + crypto_digest_final(tfm, out); +} + +int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags) +{ + return flags ? -EINVAL : 0; +} + +int crypto_init_digest_ops(struct crypto_tfm *tfm) +{ + struct digest_tfm *ops = &tfm->crt_digest; + + ops->dit_init = init; + ops->dit_update = update; + ops->dit_final = final; + ops->dit_digest = digest; + ops->dit_setkey = setkey; + + return crypto_alloc_hmac_block(tfm); +} + +void crypto_exit_digest_ops(struct crypto_tfm *tfm) +{ + crypto_free_hmac_block(tfm); +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/scatterwalk.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/scatterwalk.c @@ -0,0 +1,138 @@ +/* + * Cryptographic API. + * + * Cipher operations. + * + * Copyright (c) 2002 James Morris + * 2002 Adam J. Richter + * 2004 Jean-Luc Cooke + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ + +#include +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "kmap_types.h" +#endif + +#include +#include +#include +#include +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) +#include +#else +#include +#endif +#include "internal.h" +#include "scatterwalk.h" + +enum km_type crypto_km_types[] = { + KM_USER0, + KM_USER1, + KM_SOFTIRQ0, + KM_SOFTIRQ1, +}; + +void *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch) +{ + if (nbytes <= walk->len_this_page && + (((unsigned long)walk->data) & (PAGE_CACHE_SIZE - 1)) + nbytes <= + PAGE_CACHE_SIZE) + return walk->data; + else + return scratch; +} + +static void memcpy_dir(void *buf, void *sgdata, size_t nbytes, int out) +{ + if (out) + memcpy(sgdata, buf, nbytes); + else + memcpy(buf, sgdata, nbytes); +} + +void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg) +{ + unsigned int rest_of_page; + + walk->sg = sg; + +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + walk->page = sg->page; +#else + walk->page = sg_page(sg); +#endif + walk->len_this_segment = sg->length; + + rest_of_page = PAGE_CACHE_SIZE - (sg->offset & (PAGE_CACHE_SIZE - 1)); + walk->len_this_page = min(sg->length, rest_of_page); + walk->offset = sg->offset; +} + +void scatterwalk_map(struct scatter_walk *walk, int out) +{ + walk->data = crypto_kmap(walk->page, out) + walk->offset; +} + +static void scatterwalk_pagedone(struct scatter_walk *walk, int out, + unsigned int more) +{ + /* walk->data may be pointing the first byte of the next page; + however, we know we transfered at least one byte. So, + walk->data - 1 will be a virtual address in the mapped page. */ + + if (out) + flush_dcache_page(walk->page); + + if (more) { + walk->len_this_segment -= walk->len_this_page; + + if (walk->len_this_segment) { + walk->page++; + walk->len_this_page = min(walk->len_this_segment, + (unsigned)PAGE_CACHE_SIZE); + walk->offset = 0; + } + else + scatterwalk_start(walk, sg_next(walk->sg)); + } +} + +void scatterwalk_done(struct scatter_walk *walk, int out, int more) +{ + crypto_kunmap(walk->data, out); + if (walk->len_this_page == 0 || !more) + scatterwalk_pagedone(walk, out, more); +} + +/* + * Do not call this unless the total length of all of the fragments + * has been verified as multiple of the block size. + */ +int scatterwalk_copychunks(void *buf, struct scatter_walk *walk, + size_t nbytes, int out) +{ + if (buf != walk->data) { + while (nbytes > walk->len_this_page) { + memcpy_dir(buf, walk->data, walk->len_this_page, out); + buf += walk->len_this_page; + nbytes -= walk->len_this_page; + + crypto_kunmap(walk->data, out); + scatterwalk_pagedone(walk, out, 1); + scatterwalk_map(walk, out); + } + + memcpy_dir(buf, walk->data, nbytes, out); + } + + walk->offset += nbytes; + walk->len_this_page -= nbytes; + walk->len_this_segment -= nbytes; + return 0; +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_HT.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_HT.h @@ -0,0 +1,489 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _RTL819XU_HTTYPE_H_ +#define _RTL819XU_HTTYPE_H_ + + +#define HT_OPMODE_NO_PROTECT 0 +#define HT_OPMODE_OPTIONAL 1 +#define HT_OPMODE_40MHZ_PROTECT 2 +#define HT_OPMODE_MIXED 3 + +#define MIMO_PS_STATIC 0 +#define MIMO_PS_DYNAMIC 1 +#define MIMO_PS_NOLIMIT 3 + + + +#define sHTCLng 4 + + +#define HT_SUPPORTED_MCS_1SS_BITMAP 0x000000ff +#define HT_SUPPORTED_MCS_2SS_BITMAP 0x0000ff00 +#define HT_SUPPORTED_MCS_1SS_2SS_BITMAP HT_MCS_1SS_BITMAP|HT_MCS_1SS_2SS_BITMAP + + +typedef enum _HT_MCS_RATE{ + HT_MCS0 = 0x00000001, + HT_MCS1 = 0x00000002, + HT_MCS2 = 0x00000004, + HT_MCS3 = 0x00000008, + HT_MCS4 = 0x00000010, + HT_MCS5 = 0x00000020, + HT_MCS6 = 0x00000040, + HT_MCS7 = 0x00000080, + HT_MCS8 = 0x00000100, + HT_MCS9 = 0x00000200, + HT_MCS10 = 0x00000400, + HT_MCS11 = 0x00000800, + HT_MCS12 = 0x00001000, + HT_MCS13 = 0x00002000, + HT_MCS14 = 0x00004000, + HT_MCS15 = 0x00008000, +}HT_MCS_RATE,*PHT_MCS_RATE; + +typedef enum _HT_CHANNEL_WIDTH{ + HT_CHANNEL_WIDTH_20 = 0, + HT_CHANNEL_WIDTH_20_40 = 1, +}HT_CHANNEL_WIDTH, *PHT_CHANNEL_WIDTH; + +typedef enum _HT_EXTCHNL_OFFSET{ + HT_EXTCHNL_OFFSET_NO_EXT = 0, + HT_EXTCHNL_OFFSET_UPPER = 1, + HT_EXTCHNL_OFFSET_NO_DEF = 2, + HT_EXTCHNL_OFFSET_LOWER = 3, +}HT_EXTCHNL_OFFSET, *PHT_EXTCHNL_OFFSET; + +typedef enum _CHNLOP{ + CHNLOP_NONE = 0, + CHNLOP_SCAN = 1, + CHNLOP_SWBW = 2, + CHNLOP_SWCHNL = 3, +} CHNLOP, *PCHNLOP; + +#define CHHLOP_IN_PROGRESS(_pHTInfo) \ + ((_pHTInfo)->ChnlOp > CHNLOP_NONE) ? true : false + +/* +typedef union _HT_CAPABILITY{ + u16 ShortData; + u8 CharData[2]; + struct + { + u16 AdvCoding:1; + u16 ChlWidth:1; + u16 MimoPwrSave:2; + u16 GreenField:1; + u16 ShortGI20Mhz:1; + u16 ShortGI40Mhz:1; + u16 STBC:1; + u16 BeamForm:1; + u16 DelayBA:1; + u16 MaxAMSDUSize:1; + u16 DssCCk:1; + u16 PSMP:1; + u16 Rsvd:3; + }Field; +}HT_CAPABILITY, *PHT_CAPABILITY; + +typedef union _HT_CAPABILITY_MACPARA{ + u8 ShortData; + u8 CharData[1]; + struct + { + u8 MaxRxAMPDU:2; + u8 MPDUDensity:2; + u8 Rsvd:4; + }Field; +}HT_CAPABILITY_MACPARA, *PHT_CAPABILITY_MACPARA; +*/ + +typedef enum _HT_ACTION{ + ACT_RECOMMAND_WIDTH = 0, + ACT_MIMO_PWR_SAVE = 1, + ACT_PSMP = 2, + ACT_SET_PCO_PHASE = 3, + ACT_MIMO_CHL_MEASURE = 4, + ACT_RECIPROCITY_CORRECT = 5, + ACT_MIMO_CSI_MATRICS = 6, + ACT_MIMO_NOCOMPR_STEER = 7, + ACT_MIMO_COMPR_STEER = 8, + ACT_ANTENNA_SELECT = 9, +} HT_ACTION, *PHT_ACTION; + + +typedef enum _HT_Bandwidth_40MHZ_Sub_Carrier{ + SC_MODE_DUPLICATE = 0, + SC_MODE_LOWER = 1, + SC_MODE_UPPER = 2, + SC_MODE_FULL40MHZ = 3, +}HT_BW40_SC_E; + +typedef struct _HT_CAPABILITY_ELE{ + + u8 AdvCoding:1; + u8 ChlWidth:1; + u8 MimoPwrSave:2; + u8 GreenField:1; + u8 ShortGI20Mhz:1; + u8 ShortGI40Mhz:1; + u8 TxSTBC:1; + u8 RxSTBC:2; + u8 DelayBA:1; + u8 MaxAMSDUSize:1; + u8 DssCCk:1; + u8 PSMP:1; + u8 Rsvd1:1; + u8 LSigTxopProtect:1; + + u8 MaxRxAMPDUFactor:2; + u8 MPDUDensity:3; + u8 Rsvd2:3; + + u8 MCS[16]; + + + u16 ExtHTCapInfo; + + u8 TxBFCap[4]; + + u8 ASCap; + +} __attribute__ ((packed)) HT_CAPABILITY_ELE, *PHT_CAPABILITY_ELE; + + +typedef struct _HT_INFORMATION_ELE{ + u8 ControlChl; + + u8 ExtChlOffset:2; + u8 RecommemdedTxWidth:1; + u8 RIFS:1; + u8 PSMPAccessOnly:1; + u8 SrvIntGranularity:3; + + u8 OptMode:2; + u8 NonGFDevPresent:1; + u8 Revd1:5; + u8 Revd2:8; + + u8 Rsvd3:6; + u8 DualBeacon:1; + u8 DualCTSProtect:1; + + u8 SecondaryBeacon:1; + u8 LSigTxopProtectFull:1; + u8 PcoActive:1; + u8 PcoPhase:1; + u8 Rsvd4:4; + + u8 BasicMSC[16]; +} __attribute__ ((packed)) HT_INFORMATION_ELE, *PHT_INFORMATION_ELE; + +typedef struct _MIMOPS_CTRL{ + u8 MimoPsEnable:1; + u8 MimoPsMode:1; + u8 Reserved:6; +} MIMOPS_CTRL, *PMIMOPS_CTRL; + +typedef enum _HT_SPEC_VER{ + HT_SPEC_VER_IEEE = 0, + HT_SPEC_VER_EWC = 1, +}HT_SPEC_VER, *PHT_SPEC_VER; + +typedef enum _HT_AGGRE_MODE_E{ + HT_AGG_AUTO = 0, + HT_AGG_FORCE_ENABLE = 1, + HT_AGG_FORCE_DISABLE = 2, +}HT_AGGRE_MODE_E, *PHT_AGGRE_MODE_E; + + +typedef struct _RT_HIGH_THROUGHPUT{ + u8 bEnableHT; + u8 bCurrentHTSupport; + + u8 bRegBW40MHz; + u8 bCurBW40MHz; + + u8 bRegShortGI40MHz; + u8 bCurShortGI40MHz; + + u8 bRegShortGI20MHz; + u8 bCurShortGI20MHz; + + u8 bRegSuppCCK; + u8 bCurSuppCCK; + + HT_SPEC_VER ePeerHTSpecVer; + + + HT_CAPABILITY_ELE SelfHTCap; + HT_INFORMATION_ELE SelfHTInfo; + + u8 PeerHTCapBuf[32]; + u8 PeerHTInfoBuf[32]; + + + u8 bAMSDU_Support; + u16 nAMSDU_MaxSize; + u8 bCurrent_AMSDU_Support; + u16 nCurrent_AMSDU_MaxSize; +#ifdef _RTL8192_EXT_PATCH_ + u8 bCurrent_Mesh_AMSDU_Support; +#endif + + u8 bAMPDUEnable; + u8 bCurrentAMPDUEnable; + u8 AMPDU_Factor; + u8 CurrentAMPDUFactor; + u8 MPDU_Density; + u8 CurrentMPDUDensity; +#ifdef _RTL8192_EXT_PATCH_ + u8 bCurrentMeshAMPDUEnable; +#endif + + HT_AGGRE_MODE_E ForcedAMPDUMode; + u8 ForcedAMPDUFactor; + u8 ForcedMPDUDensity; + + HT_AGGRE_MODE_E ForcedAMSDUMode; + u16 ForcedAMSDUMaxSize; + + u8 bForcedShortGI; + + u8 CurrentOpMode; + + u8 SelfMimoPs; + u8 PeerMimoPs; + + HT_EXTCHNL_OFFSET CurSTAExtChnlOffset; + u8 bCurTxBW40MHz; + u8 PeerBandwidth; + + u8 bSwBwInProgress; + CHNLOP ChnlOp; + u8 SwBwStep; + + u8 bRegRT2RTAggregation; + u8 RT2RT_HT_Mode; + u8 bCurrentRT2RTAggregation; + u8 bCurrentRT2RTLongSlotTime; + u8 szRT2RTAggBuffer[10]; + + u8 bRegRxReorderEnable; + u8 bCurRxReorderEnable; + u8 RxReorderWinSize; + u8 RxReorderPendingTime; + u16 RxReorderDropCounter; + +#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE + u8 UsbTxAggrNum; +#endif +#ifdef USB_RX_AGGREGATION_SUPPORT + u8 UsbRxFwAggrEn; + u8 UsbRxFwAggrPageNum; + u8 UsbRxFwAggrPacketNum; + u8 UsbRxFwAggrTimeout; + u8 UsbRxPageSize; +#endif + + u8 bIsPeerBcm; + + u8 IOTPeer; + u32 IOTAction; + u8 IOTRaFunc; + + u8 bWAIotBroadcom; + u8 WAIotTH; + +#ifdef RTL8192CE + u8 bRDGEnable; +#endif +} __attribute__ ((packed)) RT_HIGH_THROUGHPUT, *PRT_HIGH_THROUGHPUT; + + + +typedef struct _RT_HTINFO_STA_ENTRY{ + u8 bEnableHT; + + u8 bSupportCck; + + u16 AMSDU_MaxSize; + + u8 AMPDU_Factor; + u8 MPDU_Density; + + u8 HTHighestOperaRate; + + u8 bBw40MHz; + + u8 bCurTxBW40MHz; + + u8 bCurShortGI20MHz; + + u8 bCurShortGI40MHz; + + u8 MimoPs; + + u8 McsRateSet[16]; + + u8 bCurRxReorderEnable; + + u16 nAMSDU_MaxSize; + +}RT_HTINFO_STA_ENTRY, *PRT_HTINFO_STA_ENTRY; + + + + + + +typedef struct _BSS_HT{ + + u8 bdSupportHT; + + u8 bdHTCapBuf[32]; + u16 bdHTCapLen; + u8 bdHTInfoBuf[32]; + u16 bdHTInfoLen; + + HT_SPEC_VER bdHTSpecVer; + HT_CHANNEL_WIDTH bdBandWidth; + + u8 bdRT2RTAggregation; + u8 bdRT2RTLongSlotTime; + u8 RT2RT_HT_Mode; + u8 bdHT1R; +} __attribute__ ((packed)) BSS_HT, *PBSS_HT; + +typedef struct _MIMO_RSSI{ + u32 EnableAntenna; + u32 AntennaA; + u32 AntennaB; + u32 AntennaC; + u32 AntennaD; + u32 Average; +}MIMO_RSSI, *PMIMO_RSSI; + +typedef struct _MIMO_EVM{ + u32 EVM1; + u32 EVM2; +}MIMO_EVM, *PMIMO_EVM; + +typedef struct _FALSE_ALARM_STATISTICS{ + u32 Cnt_Parity_Fail; + u32 Cnt_Rate_Illegal; + u32 Cnt_Crc8_fail; + u32 Cnt_Mcs_fail; + u32 Cnt_Ofdm_fail; + u32 Cnt_Cck_fail; + u32 Cnt_all; +}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS; + + +extern u8 MCS_FILTER_ALL[16]; +extern u8 MCS_FILTER_1SS[16]; + +#define PICK_RATE(_nLegacyRate, _nMcsRate) \ + (_nMcsRate==0)?(_nLegacyRate&0x7f):(_nMcsRate) +#define LEGACY_WIRELESS_MODE IEEE_MODE_MASK + +#define CURRENT_RATE(WirelessMode, LegacyRate, HTRate) \ + ((WirelessMode & (LEGACY_WIRELESS_MODE))!=0)?\ + (LegacyRate):\ + (PICK_RATE(LegacyRate, HTRate)) + + + +#define RATE_ADPT_1SS_MASK 0xFF +#define RATE_ADPT_2SS_MASK 0xF0 +#define RATE_ADPT_MCS32_MASK 0x01 + +#define IS_11N_MCS_RATE(rate) (rate&0x80) + +typedef enum _HT_AGGRE_SIZE{ + HT_AGG_SIZE_8K = 0, + HT_AGG_SIZE_16K = 1, + HT_AGG_SIZE_32K = 2, + HT_AGG_SIZE_64K = 3, +}HT_AGGRE_SIZE_E, *PHT_AGGRE_SIZE_E; + +typedef enum _HT_IOT_PEER +{ + HT_IOT_PEER_UNKNOWN = 0, + HT_IOT_PEER_REALTEK = 1, + HT_IOT_PEER_REALTEK_92SE = 2, + HT_IOT_PEER_BROADCOM = 3, + HT_IOT_PEER_RALINK = 4, + HT_IOT_PEER_ATHEROS = 5, + HT_IOT_PEER_CISCO= 6, + HT_IOT_PEER_MARVELL=7, + HT_IOT_PEER_92U_SOFTAP = 8, + HT_IOT_PEER_SELF_SOFTAP = 9, + HT_IOT_PEER_MAX = 10, +}HT_IOT_PEER_E, *PHTIOT_PEER_E; + +typedef enum _HT_IOT_ACTION{ + HT_IOT_ACT_TX_USE_AMSDU_4K = 0x00000001, + HT_IOT_ACT_TX_USE_AMSDU_8K = 0x00000002, + HT_IOT_ACT_DISABLE_MCS14 = 0x00000004, + HT_IOT_ACT_DISABLE_MCS15 = 0x00000008, + HT_IOT_ACT_DISABLE_ALL_2SS = 0x00000010, + HT_IOT_ACT_DISABLE_EDCA_TURBO = 0x00000020, + HT_IOT_ACT_MGNT_USE_CCK_6M = 0x00000040, + HT_IOT_ACT_CDD_FSYNC = 0x00000080, + HT_IOT_ACT_PURE_N_MODE = 0x00000100, + HT_IOT_ACT_FORCED_CTS2SELF = 0x00000200, + HT_IOT_ACT_FORCED_RTS = 0x00000400, + HT_IOT_ACT_AMSDU_ENABLE = 0x00000800, + HT_IOT_ACT_REJECT_ADDBA_REQ = 0x00001000, + HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT = 0x00002000, + HT_IOT_ACT_EDCA_BIAS_ON_RX = 0x00004000, + + HT_IOT_ACT_HYBRID_AGGREGATION = 0x00010000, + HT_IOT_ACT_DISABLE_SHORT_GI = 0x00020000, + HT_IOT_ACT_DISABLE_HIGH_POWER = 0x00040000, + HT_IOT_ACT_DISABLE_TX_40_MHZ = 0x00080000, + HT_IOT_ACT_TX_NO_AGGREGATION = 0x00100000, + HT_IOT_ACT_DISABLE_TX_2SS = 0x00200000, + + HT_IOT_ACT_MID_HIGHPOWER = 0x00400000, + HT_IOT_ACT_NULL_DATA_POWER_SAVING = 0x00800000, + + HT_IOT_ACT_DISABLE_CCK_RATE = 0x01000000, + HT_IOT_ACT_FORCED_ENABLE_BE_TXOP = 0x02000000, + HT_IOT_ACT_WA_IOT_Broadcom = 0x04000000, +}HT_IOT_ACTION_E, *PHT_IOT_ACTION_E; + +typedef enum _HT_IOT_RAFUNC{ + HT_IOT_RAFUNC_DISABLE_ALL = 0x00, + HT_IOT_RAFUNC_PEER_1R = 0x01, + HT_IOT_RAFUNC_TX_AMSDU = 0x02, +}HT_IOT_RAFUNC, *PHT_IOT_RAFUNC; + +typedef enum _RT_HT_CAP{ + RT_HT_CAP_USE_TURBO_AGGR = 0x01, + RT_HT_CAP_USE_LONG_PREAMBLE = 0x02, + RT_HT_CAP_USE_AMPDU = 0x04, + RT_HT_CAP_USE_WOW = 0x8, + RT_HT_CAP_USE_SOFTAP = 0x10, + RT_HT_CAP_USE_92SE = 0x20, +}RT_HT_CAPBILITY, *PRT_HT_CAPBILITY; + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_Qos.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_Qos.h @@ -0,0 +1,619 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_QOS_TYPE_H +#define __INC_QOS_TYPE_H + +#define BIT0 0x00000001 +#define BIT1 0x00000002 +#define BIT2 0x00000004 +#define BIT3 0x00000008 +#define BIT4 0x00000010 +#define BIT5 0x00000020 +#define BIT6 0x00000040 +#define BIT7 0x00000080 +#define BIT8 0x00000100 +#define BIT9 0x00000200 +#define BIT10 0x00000400 +#define BIT11 0x00000800 +#define BIT12 0x00001000 +#define BIT13 0x00002000 +#define BIT14 0x00004000 +#define BIT15 0x00008000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +#define MAX_WMMELE_LENGTH 64 + +typedef u32 QOS_MODE, *PQOS_MODE; +#define QOS_DISABLE 0 +#define QOS_WMM 1 +#define QOS_WMMSA 2 +#define QOS_EDCA 4 +#define QOS_HCCA 8 +#define QOS_WMM_UAPSD 16 + +#define AC_PARAM_SIZE 4 +#define WMM_PARAM_ELE_BODY_LEN 18 + +typedef enum _ACK_POLICY{ + eAckPlc0_ACK = 0x00, + eAckPlc1_NoACK = 0x01, +}ACK_POLICY,*PACK_POLICY; + +#define WMM_PARAM_ELEMENT_SIZE (8+(4*AC_PARAM_SIZE)) +#if 0 +#define GET_QOS_CTRL(_pStart) ReadEF2Byte((u8 *)(_pStart) + 24) +#define SET_QOS_CTRL(_pStart, _value) WriteEF2Byte((u8 *)(_pStart) + 24, _value) + +#define GET_QOS_CTRL_WMM_UP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 3)) +#define SET_QOS_CTRL_WMM_UP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 3, (u8)(_value)) + +#define GET_QOS_CTRL_WMM_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) +#define SET_QOS_CTRL_WMM_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) + +#define GET_QOS_CTRL_WMM_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) +#define SET_QOS_CTRL_WMM_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) + +#define GET_QOS_CTRL_STA_DATA_TID(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4)) +#define SET_QOS_CTRL_STA_DATA_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value)) + +#define GET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) +#define SET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) + +#define GET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) +#define SET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) + +#define GET_QOS_CTRL_STA_DATA_TXOP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8)) +#define SET_QOS_CTRL_STA_DATA_TXOP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value)) + +#define GET_QOS_CTRL_STA_DATA_QSIZE(_pStart) GET_QOS_CTRL_STA_DATA_TXOP(_pStart) +#define SET_QOS_CTRL_STA_DATA_QSIZE(_pStart, _value) SET_QOS_CTRL_STA_DATA_TXOP(_pStart) + +#define GET_QOS_CTRL_HC_DATA_TID(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4)) +#define SET_QOS_CTRL_HC_DATA_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value)) + +#define GET_QOS_CTRL_HC_DATA_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) +#define SET_QOS_CTRL_HC_DATA_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) + +#define GET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) +#define SET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) + +#define GET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8)) +#define SET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value)) + +#define GET_QOS_CTRL_HC_CFP_TID(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4)) +#define SET_QOS_CTRL_HC_CFP_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value)) + +#define GET_QOS_CTRL_HC_CFP_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) +#define SET_QOS_CTRL_HC_CFP_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) + +#define GET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) +#define SET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) + +#define GET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8)) +#define SET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value)) + +#define SET_WMM_QOS_INFO_FIELD(_pStart, _val) WriteEF1Byte(_pStart, _val) + +#define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 4) +#define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val) + +#define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 7, 1) +#define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val) + +#define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 1) +#define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val) + +#define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 1, 1) +#define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val) + +#define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 2, 1) +#define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val) + +#define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 3, 1) +#define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val) + +#define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) LE_BITS_TO_1BYTE(_pStart, 5, 2) +#define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val) + + +#define WMM_INFO_ELEMENT_SIZE 7 + +#define GET_WMM_INFO_ELE_OUI(_pStart) ((u8 *)(_pStart)) +#define SET_WMM_INFO_ELE_OUI(_pStart, _pVal) PlatformMoveMemory(_pStart, _pVal, 3); + +#define GET_WMM_INFO_ELE_OUI_TYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+3) ) ) +#define SET_WMM_INFO_ELE_OUI_TYPE(_pStart, _val) ( *((u8 *)(_pStart)+3) = EF1Byte(_val) ) + +#define GET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+4) ) ) +#define SET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart, _val) ( *((u8 *)(_pStart)+4) = EF1Byte(_val) ) + +#define GET_WMM_INFO_ELE_VERSION(_pStart) ( EF1Byte( *((u8 *)(_pStart)+5) ) ) +#define SET_WMM_INFO_ELE_VERSION(_pStart, _val) ( *((u8 *)(_pStart)+5) = EF1Byte(_val) ) + +#define GET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart) ( EF1Byte( *((u8 *)(_pStart)+6) ) ) +#define SET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((u8 *)(_pStart)+6) = EF1Byte(_val) ) + + + +#define GET_WMM_AC_PARAM_AIFSN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 4) ) +#define SET_WMM_AC_PARAM_AIFSN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val) + +#define GET_WMM_AC_PARAM_ACM(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 4, 1) ) +#define SET_WMM_AC_PARAM_ACM(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val) + +#define GET_WMM_AC_PARAM_ACI(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 5, 2) ) +#define SET_WMM_AC_PARAM_ACI(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val) + +#define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 8) ) +#define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val) SET_BTIS_TO_LE_4BYTE(_pStart, 0, 8, _val) + +#define GET_WMM_AC_PARAM_ECWMIN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 8, 4) ) +#define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val) + +#define GET_WMM_AC_PARAM_ECWMAX(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 12, 4) ) +#define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val) + +#define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart) ( (u16)LE_BITS_TO_4BYTE(_pStart, 16, 16) ) +#define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val) + + + + +#define GET_WMM_PARAM_ELE_OUI(_pStart) ((u8 *)(_pStart)) +#define SET_WMM_PARAM_ELE_OUI(_pStart, _pVal) PlatformMoveMemory(_pStart, _pVal, 3) + +#define GET_WMM_PARAM_ELE_OUI_TYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+3) ) ) +#define SET_WMM_PARAM_ELE_OUI_TYPE(_pStart, _val) ( *((u8 *)(_pStart)+3) = EF1Byte(_val) ) + +#define GET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+4) ) ) +#define SET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart, _val) ( *((u8 *)(_pStart)+4) = EF1Byte(_val) ) + +#define GET_WMM_PARAM_ELE_VERSION(_pStart) ( EF1Byte( *((u8 *)(_pStart)+5) ) ) +#define SET_WMM_PARAM_ELE_VERSION(_pStart, _val) ( *((u8 *)(_pStart)+5) = EF1Byte(_val) ) + +#define GET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart) ( EF1Byte( *((u8 *)(_pStart)+6) ) ) +#define SET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((u8 *)(_pStart)+6) = EF1Byte(_val) ) + +#define GET_WMM_PARAM_ELE_AC_PARAM(_pStart) ( (u8 *)(_pStart)+8 ) +#define SET_WMM_PARAM_ELE_AC_PARAM(_pStart, _pVal) PlatformMoveMemory((_pStart)+8, _pVal, 16) +#endif + +typedef union _QOS_CTRL_FIELD{ + u8 charData[2]; + u16 shortData; + + struct + { + u8 UP:3; + u8 usRsvd1:1; + u8 EOSP:1; + u8 AckPolicy:2; + u8 usRsvd2:1; + u8 ucRsvdByte; + }WMM; + + struct + { + u8 TID:4; + u8 bIsQsize:1; + u8 AckPolicy:2; + u8 usRsvd:1; + u8 TxopOrQsize; + }BySta; + + struct + { + u8 TID:4; + u8 EOSP:1; + u8 AckPolicy:2; + u8 usRsvd:1; + u8 PSBufState; + }ByHc_Data; + + struct + { + u8 TID:4; + u8 EOSP:1; + u8 AckPolicy:2; + u8 usRsvd:1; + u8 TxopLimit; + }ByHc_CFP; + +}QOS_CTRL_FIELD, *PQOS_CTRL_FIELD; + + +typedef union _QOS_INFO_FIELD{ + u8 charData; + + struct + { + u8 ucParameterSetCount:4; + u8 ucReserved:4; + }WMM; + + struct + { + u8 ucAC_VO_UAPSD:1; + u8 ucAC_VI_UAPSD:1; + u8 ucAC_BE_UAPSD:1; + u8 ucAC_BK_UAPSD:1; + u8 ucReserved1:1; + u8 ucMaxSPLen:2; + u8 ucReserved2:1; + + }ByWmmPsSta; + + struct + { + u8 ucParameterSetCount:4; + u8 ucReserved:3; + u8 ucApUapsd:1; + }ByWmmPsAp; + + struct + { + u8 ucAC3_UAPSD:1; + u8 ucAC2_UAPSD:1; + u8 ucAC1_UAPSD:1; + u8 ucAC0_UAPSD:1; + u8 ucQAck:1; + u8 ucMaxSPLen:2; + u8 ucMoreDataAck:1; + } By11eSta; + + struct + { + u8 ucParameterSetCount:4; + u8 ucQAck:1; + u8 ucQueueReq:1; + u8 ucTXOPReq:1; + u8 ucReserved:1; + } By11eAp; + + struct + { + u8 ucReserved1:4; + u8 ucQAck:1; + u8 ucReserved2:2; + u8 ucMoreDataAck:1; + } ByWmmsaSta; + + struct + { + u8 ucReserved1:4; + u8 ucQAck:1; + u8 ucQueueReq:1; + u8 ucTXOPReq:1; + u8 ucReserved2:1; + } ByWmmsaAp; + + struct + { + u8 ucAC3_UAPSD:1; + u8 ucAC2_UAPSD:1; + u8 ucAC1_UAPSD:1; + u8 ucAC0_UAPSD:1; + u8 ucQAck:1; + u8 ucMaxSPLen:2; + u8 ucMoreDataAck:1; + } ByAllSta; + + struct + { + u8 ucParameterSetCount:4; + u8 ucQAck:1; + u8 ucQueueReq:1; + u8 ucTXOPReq:1; + u8 ucApUapsd:1; + } ByAllAp; + +}QOS_INFO_FIELD, *PQOS_INFO_FIELD; + +#if 0 +typedef struct _WMM_INFO_ELEMENT{ + u8 OUI[3]; + u8 OUI_Type; + u8 OUI_SubType; + u8 Version; + QOS_INFO_FIELD QosInfo; +}WMM_INFO_ELEMENT, *PWMM_INFO_ELEMENT; +#endif + +typedef u32 AC_CODING; +#define AC0_BE 0 +#define AC1_BK 1 +#define AC2_VI 2 +#define AC3_VO 3 +#define AC_MAX 4 + +typedef union _ACI_AIFSN{ + u8 charData; + + struct + { + u8 AIFSN:4; + u8 ACM:1; + u8 ACI:2; + u8 Reserved:1; + }f; +}ACI_AIFSN, *PACI_AIFSN; + +typedef union _ECW{ + u8 charData; + struct + { + u8 ECWmin:4; + u8 ECWmax:4; + }f; +}ECW, *PECW; + +typedef union _AC_PARAM{ + u32 longData; + u8 charData[4]; + + struct + { + ACI_AIFSN AciAifsn; + ECW Ecw; + u16 TXOPLimit; + }f; +}AC_PARAM, *PAC_PARAM; + + + +typedef enum _QOS_ELE_SUBTYPE{ + QOSELE_TYPE_INFO = 0x00, + QOSELE_TYPE_PARAM = 0x01, +}QOS_ELE_SUBTYPE,*PQOS_ELE_SUBTYPE; + + +typedef enum _DIRECTION_VALUE{ + DIR_UP = 0, + DIR_DOWN = 1, + DIR_DIRECT = 2, + DIR_BI_DIR = 3, +}DIRECTION_VALUE,*PDIRECTION_VALUE; + + +typedef union _QOS_TSINFO{ + u8 charData[3]; + struct { + u8 ucTrafficType:1; + u8 ucTSID:4; + u8 ucDirection:2; + u8 ucAccessPolicy:2; + u8 ucAggregation:1; + u8 ucPSB:1; + u8 ucUP:3; + u8 ucTSInfoAckPolicy:2; + u8 ucSchedule:1; + u8 ucReserved:7; + }field; +}QOS_TSINFO, *PQOS_TSINFO; + +typedef union _TSPEC_BODY{ + u8 charData[55]; + + struct + { + QOS_TSINFO TSInfo; + u16 NominalMSDUsize; + u16 MaxMSDUsize; + u32 MinServiceItv; + u32 MaxServiceItv; + u32 InactivityItv; + u32 SuspenItv; + u32 ServiceStartTime; + u32 MinDataRate; + u32 MeanDataRate; + u32 PeakDataRate; + u32 MaxBurstSize; + u32 DelayBound; + u32 MinPhyRate; + u16 SurplusBandwidthAllowance; + u16 MediumTime; + } f; +}TSPEC_BODY, *PTSPEC_BODY; + + +typedef struct _WMM_TSPEC{ + u8 ID; + u8 Length; + u8 OUI[3]; + u8 OUI_Type; + u8 OUI_SubType; + u8 Version; + TSPEC_BODY Body; +} WMM_TSPEC, *PWMM_TSPEC; + +typedef enum _ACM_METHOD{ + eAcmWay0_SwAndHw = 0, + eAcmWay1_HW = 1, + eAcmWay2_SW = 2, +}ACM_METHOD,*PACM_METHOD; + + +typedef struct _ACM{ + u64 UsedTime; + u64 MediumTime; + u8 HwAcmCtl; +}ACM, *PACM; + +typedef u8 AC_UAPSD, *PAC_UAPSD; + +#define GET_VO_UAPSD(_apsd) ((_apsd) & BIT0) +#define SET_VO_UAPSD(_apsd) ((_apsd) |= BIT0) + +#define GET_VI_UAPSD(_apsd) ((_apsd) & BIT1) +#define SET_VI_UAPSD(_apsd) ((_apsd) |= BIT1) + +#define GET_BK_UAPSD(_apsd) ((_apsd) & BIT2) +#define SET_BK_UAPSD(_apsd) ((_apsd) |= BIT2) + +#define GET_BE_UAPSD(_apsd) ((_apsd) & BIT3) +#define SET_BE_UAPSD(_apsd) ((_apsd) |= BIT3) + + +typedef union _QOS_TCLAS{ + + struct _TYPE_GENERAL{ + u8 Priority; + u8 ClassifierType; + u8 Mask; + } TYPE_GENERAL; + + struct _TYPE0_ETH{ + u8 Priority; + u8 ClassifierType; + u8 Mask; + u8 SrcAddr[6]; + u8 DstAddr[6]; + u16 Type; + } TYPE0_ETH; + + struct _TYPE1_IPV4{ + u8 Priority; + u8 ClassifierType; + u8 Mask; + u8 Version; + u8 SrcIP[4]; + u8 DstIP[4]; + u16 SrcPort; + u16 DstPort; + u8 DSCP; + u8 Protocol; + u8 Reserved; + } TYPE1_IPV4; + + struct _TYPE1_IPV6{ + u8 Priority; + u8 ClassifierType; + u8 Mask; + u8 Version; + u8 SrcIP[16]; + u8 DstIP[16]; + u16 SrcPort; + u16 DstPort; + u8 FlowLabel[3]; + } TYPE1_IPV6; + + struct _TYPE2_8021Q{ + u8 Priority; + u8 ClassifierType; + u8 Mask; + u16 TagType; + } TYPE2_8021Q; +} QOS_TCLAS, *PQOS_TCLAS; + +typedef struct _QOS_TSTREAM{ + u8 AC; + WMM_TSPEC TSpec; + QOS_TCLAS TClass; +} QOS_TSTREAM, *PQOS_TSTREAM; + + + +typedef struct _OCTET_STRING{ + u8 *Octet; + u16 Length; +}OCTET_STRING, *POCTET_STRING; +#if 0 +#define FillOctetString(_os,_octet,_len) \ + (_os).Octet=(u8 *)(_octet); \ + (_os).Length=(_len); + +#define WMM_ELEM_HDR_LEN 6 +#define WMMElemSkipHdr(_osWMMElem) \ + (_osWMMElem).Octet += WMM_ELEM_HDR_LEN; \ + (_osWMMElem).Length -= WMM_ELEM_HDR_LEN; +#endif +typedef struct _STA_QOS{ + u8 WMMIEBuf[MAX_WMMELE_LENGTH]; + u8* WMMIE; + + QOS_MODE QosCapability; + QOS_MODE CurrentQosMode; + + AC_UAPSD b4ac_Uapsd; + AC_UAPSD Curr4acUapsd; + u8 bInServicePeriod; + u8 MaxSPLength; + int NumBcnBeforeTrigger; + + u8 * pWMMInfoEle; + u8 WMMParamEle[WMM_PARAM_ELEMENT_SIZE]; + u8 WMMPELength; + + QOS_INFO_FIELD QosInfoField_STA; + QOS_INFO_FIELD QosInfoField_AP; + + AC_PARAM CurAcParameters[4]; + + ACM acm[4]; + ACM_METHOD AcmMethod; + + QOS_TSTREAM TStream[16]; + WMM_TSPEC TSpec; + + u32 QBssWirelessMode; + + u8 bNoAck; + + u8 bEnableRxImmBA; + +}STA_QOS, *PSTA_QOS; + +typedef struct _BSS_QOS{ + QOS_MODE bdQoSMode; + + u8 bdWMMIEBuf[MAX_WMMELE_LENGTH]; + u8* bdWMMIE; + + QOS_ELE_SUBTYPE EleSubType; + + u8 * pWMMInfoEle; + u8 * pWMMParamEle; + + QOS_INFO_FIELD QosInfoField; + AC_PARAM AcParameter[4]; +}BSS_QOS, *PBSS_QOS; + + +#define sQoSCtlLng 2 +#define QOS_CTRL_LEN(_QosMode) ((_QosMode > QOS_DISABLE)? sQoSCtlLng : 0) + + +#define IsACValid(ac) ((ac<=7 )?true:false ) + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_crypt_wep.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_crypt_wep.c @@ -0,0 +1,404 @@ +/* + * Host AP crypt: host-based WEP encryption implementation for Host AP driver + * + * Copyright (c) 2002-2004, Jouni Malinen + * + * 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. See README and COPYING for + * more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef _RTL8192_EXT_PATCH_ +#include +#endif +#include "rtllib.h" + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20)) +#endif + + +#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "rtl_crypto.h" +#else +#include +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) + #include +#else + #include +#endif +#include +/* +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "rtl_crypto.h" +#else +#include +#endif + +#include +#include +*/ +#ifndef BUILT_IN_RTLLIB +MODULE_AUTHOR("Jouni Malinen"); +MODULE_DESCRIPTION("Host AP crypt: WEP"); +MODULE_LICENSE("GPL"); +#endif +struct prism2_wep_data { + u32 iv; +#define WEP_KEY_LEN 13 + u8 key[WEP_KEY_LEN + 1]; + u8 key_len; + u8 key_idx; + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + struct crypto_tfm *tfm; + #else + struct crypto_blkcipher *tx_tfm; + struct crypto_blkcipher *rx_tfm; + #endif +}; + + +static void * prism2_wep_init(int keyidx) +{ + struct prism2_wep_data *priv; + + priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + if (priv == NULL) + goto fail; + memset(priv, 0, sizeof(*priv)); + priv->key_idx = keyidx; + + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + priv->tfm = crypto_alloc_tfm("arc4", 0); + if (priv->tfm == NULL) { + printk(KERN_DEBUG "rtllib_crypt_wep: could not allocate " + "crypto API arc4\n"); + goto fail; + } + #else + priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->tx_tfm)) { + printk(KERN_DEBUG "rtllib_crypt_wep: could not allocate " + "crypto API arc4\n"); + priv->tx_tfm = NULL; + goto fail; + } + priv->rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->rx_tfm)) { + printk(KERN_DEBUG "rtllib_crypt_wep: could not allocate " + "crypto API arc4\n"); + priv->rx_tfm = NULL; + goto fail; + } + #endif + + /* start WEP IV from a random value */ + get_random_bytes(&priv->iv, 4); + + return priv; + +fail: + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + if (priv) { + if (priv->tfm) + crypto_free_tfm(priv->tfm); + kfree(priv); + } + #else + if (priv) { + if (priv->tx_tfm) + crypto_free_blkcipher(priv->tx_tfm); + if (priv->rx_tfm) + crypto_free_blkcipher(priv->rx_tfm); + kfree(priv); + } + #endif + return NULL; +} + + +static void prism2_wep_deinit(void *priv) +{ + struct prism2_wep_data *_priv = priv; + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + if (_priv && _priv->tfm) + crypto_free_tfm(_priv->tfm); + #else + if (_priv) { + if (_priv->tx_tfm) + crypto_free_blkcipher(_priv->tx_tfm); + if (_priv->rx_tfm) + crypto_free_blkcipher(_priv->rx_tfm); + } + #endif + 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. + * + * WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data)) + */ +static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct prism2_wep_data *wep = priv; + u32 klen, len; + u8 key[WEP_KEY_LEN + 3]; + u8 *pos; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) ) + struct blkcipher_desc desc = {.tfm = wep->tx_tfm}; + #endif + u32 crc; + u8 *icv; +#ifdef _RTL8192_EXT_PATCH_ + u8 broadcastaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + struct rtllib_hdr_3addr* tmp_header = (struct rtllib_hdr_3addr*)(skb->data); + u8 is_broadcast_data = 0; + u8 is_multicast_data = 0; +#endif + struct scatterlist sg; + if (skb_headroom(skb) < 4 || skb_tailroom(skb) < 4 || + skb->len < hdr_len){ + printk("Error!!!headroom=%d tailroom=%d skblen=%d hdr_len=%d\n",skb_headroom(skb),skb_tailroom(skb),skb->len,hdr_len); + return -1; + } +#ifdef _RTL8192_EXT_PATCH_ + if(tcb_desc->badhoc==0){ + if(memcmp(tmp_header->addr1,broadcastaddr,6) == 0){ + is_broadcast_data = 1; + tcb_desc->bHwSec = 0; + } + if(is_multicast_ether_addr(tmp_header->addr1)){ + is_multicast_data = 1; + tcb_desc->bHwSec = 0; + } + } +#endif + len = skb->len - hdr_len; + pos = skb_push(skb, 4); + memmove(pos, pos + 4, hdr_len); + pos += hdr_len; + + klen = 3 + wep->key_len; + + wep->iv++; + + /* Fluhrer, Mantin, and Shamir have reported weaknesses in the key + * scheduling algorithm of RC4. At least IVs (KeyByte + 3, 0xff, N) + * can be used to speedup attacks, so avoid using them. */ + if ((wep->iv & 0xff00) == 0xff00) { + u8 B = (wep->iv >> 16) & 0xff; + if (B >= 3 && B < klen) + wep->iv += 0x0100; + } + + /* Prepend 24-bit IV to RC4 key and TX frame */ + *pos++ = key[0] = (wep->iv >> 16) & 0xff; + *pos++ = key[1] = (wep->iv >> 8) & 0xff; + *pos++ = key[2] = wep->iv & 0xff; + *pos++ = wep->key_idx << 6; + + /* Copy rest of the WEP key (the secret part) */ + memcpy(key + 3, wep->key, wep->key_len); + + if (!tcb_desc->bHwSec) + { + + /* Append little-endian CRC32 and encrypt it to produce ICV */ + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + crc = ~crc32_le(~0, pos, len); + #else + crc = ~ether_crc_le(len, pos); + #endif + icv = skb_put(skb, 4); + icv[0] = crc; + icv[1] = crc >> 8; + icv[2] = crc >> 16; + icv[3] = crc >> 24; + + #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = len + 4; + #else + sg_init_one(&sg, pos, len+4); + #endif + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + crypto_cipher_setkey(wep->tfm, key, klen); + crypto_cipher_encrypt(wep->tfm, &sg, &sg, len + 4); + return 0; + #else + crypto_blkcipher_setkey(wep->tx_tfm, key, klen); + return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); + #endif + } + + 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. + * + * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on + * failure. If frame is OK, IV and ICV will be removed. + */ +static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct prism2_wep_data *wep = priv; + u32 klen, plen; + u8 key[WEP_KEY_LEN + 3]; + u8 keyidx, *pos; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) ) + struct blkcipher_desc desc = {.tfm = wep->rx_tfm}; + #endif + u32 crc; + u8 icv[4]; + struct scatterlist sg; + if (skb->len < hdr_len + 8) + return -1; + + pos = skb->data + hdr_len; + key[0] = *pos++; + key[1] = *pos++; + key[2] = *pos++; + keyidx = *pos++ >> 6; + if (keyidx != wep->key_idx) + return -1; + + klen = 3 + wep->key_len; + + /* Copy rest of the WEP key (the secret part) */ + memcpy(key + 3, wep->key, wep->key_len); + + /* Apply RC4 to data and compute CRC32 over decrypted data */ + plen = skb->len - hdr_len - 8; + + if (!tcb_desc->bHwSec) + { + #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = plen + 4; + #else + sg_init_one(&sg, pos, plen+4); + #endif + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + crypto_cipher_setkey(wep->tfm, key, klen); + crypto_cipher_decrypt(wep->tfm, &sg, &sg, plen + 4); + #else + crypto_blkcipher_setkey(wep->rx_tfm, key, klen); + if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) + return -7; + #endif + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + crc = ~crc32_le(~0, pos, plen); + #else + crc = ~ether_crc_le(plen, pos); + #endif + icv[0] = crc; + icv[1] = crc >> 8; + icv[2] = crc >> 16; + icv[3] = crc >> 24; + if (memcmp(icv, pos + plen, 4) != 0) { + /* ICV mismatch - drop frame */ + return -2; + } + } + /* Remove IV and ICV */ + memmove(skb->data + 4, skb->data, hdr_len); + skb_pull(skb, 4); + skb_trim(skb, skb->len - 4); + + return 0; +} + + +static int prism2_wep_set_key(void *key, int len, u8 *seq, void *priv) +{ + struct prism2_wep_data *wep = priv; + + if (len < 0 || len > WEP_KEY_LEN) + return -1; + + memcpy(wep->key, key, len); + wep->key_len = len; + + return 0; +} + + +static int prism2_wep_get_key(void *key, int len, u8 *seq, void *priv) +{ + struct prism2_wep_data *wep = priv; + + if (len < wep->key_len) + return -1; + + memcpy(key, wep->key, wep->key_len); + + return wep->key_len; +} + + +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); + return p; +} + + +static struct rtllib_crypto_ops rtllib_crypt_wep = { + .name = "WEP", + .init = prism2_wep_init, + .deinit = prism2_wep_deinit, + .encrypt_mpdu = prism2_wep_encrypt, + .decrypt_mpdu = prism2_wep_decrypt, + .encrypt_msdu = NULL, + .decrypt_msdu = NULL, + .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 */ + .owner = THIS_MODULE, +}; + + +int __init rtllib_crypto_wep_init(void) +{ + return rtllib_register_crypto_ops(&rtllib_crypt_wep); +} + + +void __exit rtllib_crypto_wep_exit(void) +{ + rtllib_unregister_crypto_ops(&rtllib_crypt_wep); +} + +void rtllib_wep_null(void) +{ + return; +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_wep_null); + +module_init(rtllib_crypto_wep_init); +module_exit(rtllib_crypto_wep_exit); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/scatterwalk.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/scatterwalk.h @@ -0,0 +1,53 @@ +/* + * Cryptographic API. + * + * Copyright (c) 2002 James Morris + * Copyright (c) 2002 Adam J. Richter + * Copyright (c) 2004 Jean-Luc Cooke + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ + +#ifndef _CRYPTO_SCATTERWALK_H +#define _CRYPTO_SCATTERWALK_H +#include +#include + +struct scatter_walk { + struct scatterlist *sg; + struct page *page; + void *data; + unsigned int len_this_page; + unsigned int len_this_segment; + unsigned int offset; +}; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) +/* Define sg_next is an inline routine now in case we want to change + scatterlist to a linked list later. */ +static inline struct scatterlist *sg_next(struct scatterlist *sg) +{ + return sg + 1; +} +#endif + +static inline int scatterwalk_samebuf(struct scatter_walk *walk_in, + struct scatter_walk *walk_out, + void *src_p, void *dst_p) +{ + return walk_in->page == walk_out->page && + walk_in->offset == walk_out->offset && + walk_in->data == src_p && walk_out->data == dst_p; +} + +void *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch); +void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg); +int scatterwalk_copychunks(void *buf, struct scatter_walk *walk, size_t nbytes, int out); +void scatterwalk_map(struct scatter_walk *walk, int out); +void scatterwalk_done(struct scatter_walk *walk, int out, int more); + +#endif /* _CRYPTO_SCATTERWALK_H */ --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_HTProc.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_HTProc.c @@ -0,0 +1,1683 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "rtllib.h" +#include "rtl819x_HT.h" +u8 MCS_FILTER_ALL[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +u8 MCS_FILTER_1SS[16] = {0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +u16 MCS_DATA_RATE[2][2][77] = + { { {13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78 ,104, 156, 208, 234, 260, + 39, 78, 117, 234, 312, 351, 390, 52, 104, 156, 208, 312, 416, 468, 520, + 0, 78, 104, 130, 117, 156, 195, 104, 130, 130, 156, 182, 182, 208, 156, 195, + 195, 234, 273, 273, 312, 130, 156, 181, 156, 181, 208, 234, 208, 234, 260, 260, + 286, 195, 234, 273, 234, 273, 312, 351, 312, 351, 390, 390, 429}, + {14, 29, 43, 58, 87, 116, 130, 144, 29, 58, 87, 116, 173, 231, 260, 289, + 43, 87, 130, 173, 260, 347, 390, 433, 58, 116, 173, 231, 347, 462, 520, 578, + 0, 87, 116, 144, 130, 173, 217, 116, 144, 144, 173, 202, 202, 231, 173, 217, + 217, 260, 303, 303, 347, 144, 173, 202, 173, 202, 231, 260, 231, 260, 289, 289, + 318, 217, 260, 303, 260, 303, 347, 390, 347, 390, 433, 433, 477} }, + { {27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, + 81, 162, 243, 324, 486, 648, 729, 810, 108, 216, 324, 432, 648, 864, 972, 1080, + 12, 162, 216, 270, 243, 324, 405, 216, 270, 270, 324, 378, 378, 432, 324, 405, + 405, 486, 567, 567, 648, 270, 324, 378, 324, 378, 432, 486, 432, 486, 540, 540, + 594, 405, 486, 567, 486, 567, 648, 729, 648, 729, 810, 810, 891}, + {30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, + 90, 180, 270, 360, 540, 720, 810, 900, 120, 240, 360, 480, 720, 960, 1080, 1200, + 13, 180, 240, 300, 270, 360, 450, 240, 300, 300, 360, 420, 420, 480, 360, 450, + 450, 540, 630, 630, 720, 300, 360, 420, 360, 420, 480, 540, 480, 540, 600, 600, + 660, 450, 540, 630, 540, 630, 720, 810, 720, 810, 900, 900, 990} } + }; + +static u8 UNKNOWN_BORADCOM[3] = {0x00, 0x14, 0xbf}; +static u8 LINKSYSWRT330_LINKSYSWRT300_BROADCOM[3] = {0x00, 0x1a, 0x70}; +static u8 LINKSYSWRT350_LINKSYSWRT150_BROADCOM[3] = {0x00, 0x1d, 0x7e}; +static u8 BELKINF5D8233V1_RALINK[3] = {0x00, 0x17, 0x3f}; +static u8 BELKINF5D82334V3_RALINK[3] = {0x00, 0x1c, 0xdf}; +static u8 PCI_RALINK[3] = {0x00, 0x90, 0xcc}; +static u8 EDIMAX_RALINK[3] = {0x00, 0x0e, 0x2e}; +static u8 AIRLINK_RALINK[3] = {0x00, 0x18, 0x02}; +static u8 DLINK_ATHEROS_1[3] = {0x00, 0x1c, 0xf0}; +static u8 DLINK_ATHEROS_2[3] = {0x00, 0x21, 0x91}; +static u8 CISCO_BROADCOM[3] = {0x00, 0x17, 0x94}; +#if defined(RTL8192SU) +static u8 NETGEAR_BROADCOM[3] = {0x00, 0x1f, 0x33}; +#endif +static u8 LINKSYS_MARVELL_4400N[3] = {0x00, 0x14, 0xa4}; +void HTUpdateDefaultSetting(struct rtllib_device* ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + +#ifdef RTL8192CE + pHTInfo->bRDGEnable = 0; +#endif + + pHTInfo->bRegShortGI20MHz= 1; + pHTInfo->bRegShortGI40MHz= 1; + + pHTInfo->bRegBW40MHz = 1; + + if(pHTInfo->bRegBW40MHz) + pHTInfo->bRegSuppCCK = 1; + else + pHTInfo->bRegSuppCCK = true; + + pHTInfo->nAMSDU_MaxSize = 7935UL; + pHTInfo->bAMSDU_Support = 0; + + pHTInfo->bAMPDUEnable = 1; + pHTInfo->AMPDU_Factor = 2; + pHTInfo->MPDU_Density = 0; + + pHTInfo->SelfMimoPs = 3; + if(pHTInfo->SelfMimoPs == 2) + pHTInfo->SelfMimoPs = 3; + ieee->bTxDisableRateFallBack = 0; + ieee->bTxUseDriverAssingedRate = 0; + + ieee->bTxEnableFwCalcDur = 1; + + pHTInfo->bRegRT2RTAggregation = 1; + + pHTInfo->bRegRxReorderEnable = 1; + pHTInfo->RxReorderWinSize = 64; + pHTInfo->RxReorderPendingTime = 30; + +#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE + pHTInfo->UsbTxAggrNum = 4; +#endif +#ifdef USB_RX_AGGREGATION_SUPPORT +#ifdef RTL8192SU + pHTInfo->UsbRxFwAggrEn = 1; + pHTInfo->UsbRxFwAggrPageNum = 48; + pHTInfo->UsbRxFwAggrPacketNum = 8; + pHTInfo->UsbRxFwAggrTimeout = 4; + pHTInfo->UsbRxPageSize= 128; +#else + pHTInfo->UsbRxFwAggrEn = 1; + pHTInfo->UsbRxFwAggrPageNum = 24; + pHTInfo->UsbRxFwAggrPacketNum = 8; + pHTInfo->UsbRxFwAggrTimeout = 8; +#endif +#endif + + +} +void HTDebugHTCapability(u8* CapIE, u8* TitleString ) +{ + + static u8 EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; + PHT_CAPABILITY_ELE pCapELE; + + if(!memcmp(CapIE, EWC11NHTCap, sizeof(EWC11NHTCap))) + { + RTLLIB_DEBUG(RTLLIB_DL_HT, "EWC IE in %s()\n", __FUNCTION__); + pCapELE = (PHT_CAPABILITY_ELE)(&CapIE[4]); + }else + pCapELE = (PHT_CAPABILITY_ELE)(&CapIE[0]); + + RTLLIB_DEBUG(RTLLIB_DL_HT, ". Called by %s\n", TitleString ); + + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSupported Channel Width = %s\n", (pCapELE->ChlWidth)?"20MHz": "20/40MHz"); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSupport Short GI for 20M = %s\n", (pCapELE->ShortGI20Mhz)?"YES": "NO"); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSupport Short GI for 40M = %s\n", (pCapELE->ShortGI40Mhz)?"YES": "NO"); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSupport TX STBC = %s\n", (pCapELE->TxSTBC)?"YES": "NO"); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tMax AMSDU Size = %s\n", (pCapELE->MaxAMSDUSize)?"3839": "7935"); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSupport CCK in 20/40 mode = %s\n", (pCapELE->DssCCk)?"YES": "NO"); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tMax AMPDU Factor = %d\n", pCapELE->MaxRxAMPDUFactor); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tMPDU Density = %d\n", pCapELE->MPDUDensity); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tMCS Rate Set = [%x][%x][%x][%x][%x]\n", pCapELE->MCS[0],\ + pCapELE->MCS[1], pCapELE->MCS[2], pCapELE->MCS[3], pCapELE->MCS[4]); + return; + +} +void HTDebugHTInfo(u8* InfoIE, u8* TitleString) +{ + + static u8 EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34}; + PHT_INFORMATION_ELE pHTInfoEle; + + if(!memcmp(InfoIE, EWC11NHTInfo, sizeof(EWC11NHTInfo))) + { + RTLLIB_DEBUG(RTLLIB_DL_HT, "EWC IE in %s()\n", __FUNCTION__); + pHTInfoEle = (PHT_INFORMATION_ELE)(&InfoIE[4]); + }else + pHTInfoEle = (PHT_INFORMATION_ELE)(&InfoIE[0]); + + + RTLLIB_DEBUG(RTLLIB_DL_HT, ". Called by %s\n", TitleString); + + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tPrimary channel = %d\n", pHTInfoEle->ControlChl); + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tSenondary channel ="); + switch(pHTInfoEle->ExtChlOffset) + { + case 0: + RTLLIB_DEBUG(RTLLIB_DL_HT, "Not Present\n"); + break; + case 1: + RTLLIB_DEBUG(RTLLIB_DL_HT, "Upper channel\n"); + break; + case 2: + RTLLIB_DEBUG(RTLLIB_DL_HT, "Reserved. Eooro!!!\n"); + break; + case 3: + RTLLIB_DEBUG(RTLLIB_DL_HT, "Lower Channel\n"); + break; + } + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tRecommended channel width = %s\n", (pHTInfoEle->RecommemdedTxWidth)?"20Mhz": "40Mhz"); + + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tOperation mode for protection = "); + switch(pHTInfoEle->OptMode) + { + case 0: + RTLLIB_DEBUG(RTLLIB_DL_HT, "No Protection\n"); + break; + case 1: + RTLLIB_DEBUG(RTLLIB_DL_HT, "HT non-member protection mode\n"); + break; + case 2: + RTLLIB_DEBUG(RTLLIB_DL_HT, "Suggest to open protection\n"); + break; + case 3: + RTLLIB_DEBUG(RTLLIB_DL_HT, "HT mixed mode\n"); + break; + } + + RTLLIB_DEBUG(RTLLIB_DL_HT, "\tBasic MCS Rate Set = [%x][%x][%x][%x][%x]\n", pHTInfoEle->BasicMSC[0],\ + pHTInfoEle->BasicMSC[1], pHTInfoEle->BasicMSC[2], pHTInfoEle->BasicMSC[3], pHTInfoEle->BasicMSC[4]); + return; +} + +bool IsHTHalfNmode40Bandwidth(struct rtllib_device* ieee) +{ + bool retValue = false; + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + if(pHTInfo->bCurrentHTSupport == false ) + retValue = false; + else if(pHTInfo->bRegBW40MHz == false) + retValue = false; + else if(!ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + retValue = false; + else if(((PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf))->ChlWidth) + retValue = true; + else + retValue = false; + + return retValue; +} + +bool IsHTHalfNmodeSGI(struct rtllib_device* ieee, bool is40MHz) +{ + bool retValue = false; + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + if(pHTInfo->bCurrentHTSupport == false ) + retValue = false; + else if(!ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + retValue = false; + else if(is40MHz) + { + if(((PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf))->ShortGI40Mhz) + retValue = true; + else + retValue = false; + } + else + { + if(((PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf))->ShortGI20Mhz) + retValue = true; + else + retValue = false; + } + + return retValue; +} + +u16 HTHalfMcsToDataRate(struct rtllib_device* ieee, u8 nMcsRate) +{ + + u8 is40MHz; + u8 isShortGI; + + is40MHz = (IsHTHalfNmode40Bandwidth(ieee))?1:0; + isShortGI = (IsHTHalfNmodeSGI(ieee, is40MHz))? 1:0; + + return MCS_DATA_RATE[is40MHz][isShortGI][(nMcsRate&0x7f)]; +} + + +u16 HTMcsToDataRate( struct rtllib_device* ieee, u8 nMcsRate) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + u8 is40MHz = (pHTInfo->bCurBW40MHz)?1:0; + u8 isShortGI = (pHTInfo->bCurBW40MHz)? + ((pHTInfo->bCurShortGI40MHz)?1:0): + ((pHTInfo->bCurShortGI20MHz)?1:0); + return MCS_DATA_RATE[is40MHz][isShortGI][(nMcsRate&0x7f)]; +} + +u16 TxCountToDataRate( struct rtllib_device* ieee, u8 nDataRate) +{ + u16 CCKOFDMRate[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c}; + u8 is40MHz = 0; + u8 isShortGI = 0; + + if(nDataRate < 12) + { + return CCKOFDMRate[nDataRate]; + } + else + { + if (nDataRate >= 0x10 && nDataRate <= 0x1f) + { + is40MHz = 0; + isShortGI = 0; + + } + else if(nDataRate >=0x20 && nDataRate <= 0x2f ) + { + is40MHz = 1; + isShortGI = 0; + + } + else if(nDataRate >= 0x30 && nDataRate <= 0x3f ) + { + is40MHz = 0; + isShortGI = 1; + + } + else if(nDataRate >= 0x40 && nDataRate <= 0x4f ) + { + is40MHz = 1; + isShortGI = 1; + + } + return MCS_DATA_RATE[is40MHz][isShortGI][nDataRate&0xf]; + } +} + + + +bool IsHTHalfNmodeAPs(struct rtllib_device* ieee) +{ + bool retValue = false; + struct rtllib_network* net = &ieee->current_network; +#if 0 + if(ieee->bHalfNMode == false) + retValue = false; + else +#endif + if((memcmp(net->bssid, BELKINF5D8233V1_RALINK, 3)==0) || + (memcmp(net->bssid, BELKINF5D82334V3_RALINK, 3)==0) || + (memcmp(net->bssid, PCI_RALINK, 3)==0) || + (memcmp(net->bssid, EDIMAX_RALINK, 3)==0) || + (memcmp(net->bssid, AIRLINK_RALINK, 3)==0) || + (net->ralink_cap_exist)) + retValue = true; + else if((memcmp(net->bssid, UNKNOWN_BORADCOM, 3)==0) || + (memcmp(net->bssid, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)|| + (memcmp(net->bssid, LINKSYSWRT350_LINKSYSWRT150_BROADCOM, 3)==0)|| + (net->broadcom_cap_exist)) + retValue = true; + else if(net->bssht.bdRT2RTAggregation) + retValue = true; + else + retValue = false; + + return retValue; +} + +void HTIOTPeerDetermine(struct rtllib_device* ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + struct rtllib_network* net = &ieee->current_network; + if(net->bssht.bdRT2RTAggregation){ + pHTInfo->IOTPeer = HT_IOT_PEER_REALTEK; + if(net->bssht.RT2RT_HT_Mode & RT_HT_CAP_USE_92SE){ + pHTInfo->IOTPeer = HT_IOT_PEER_REALTEK_92SE; + } + if(net->bssht.RT2RT_HT_Mode & RT_HT_CAP_USE_SOFTAP){ + pHTInfo->IOTPeer = HT_IOT_PEER_92U_SOFTAP; + } + } + else if(net->broadcom_cap_exist) + pHTInfo->IOTPeer = HT_IOT_PEER_BROADCOM; + else if((memcmp(net->bssid, UNKNOWN_BORADCOM, 3)==0) || + (memcmp(net->bssid, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)|| + (memcmp(net->bssid, LINKSYSWRT350_LINKSYSWRT150_BROADCOM, 3)==0)/*|| + (memcmp(net->bssid, NETGEAR834Bv2_BROADCOM, 3)==0) */) + pHTInfo->IOTPeer = HT_IOT_PEER_BROADCOM; + else if((memcmp(net->bssid, BELKINF5D8233V1_RALINK, 3)==0) || + (memcmp(net->bssid, BELKINF5D82334V3_RALINK, 3)==0) || + (memcmp(net->bssid, PCI_RALINK, 3)==0) || + (memcmp(net->bssid, EDIMAX_RALINK, 3)==0) || + (memcmp(net->bssid, AIRLINK_RALINK, 3)==0) || + net->ralink_cap_exist) + pHTInfo->IOTPeer = HT_IOT_PEER_RALINK; + else if((net->atheros_cap_exist )|| + (memcmp(net->bssid, DLINK_ATHEROS_1, 3) == 0)|| + (memcmp(net->bssid, DLINK_ATHEROS_2, 3) == 0)) + pHTInfo->IOTPeer = HT_IOT_PEER_ATHEROS; + else if((memcmp(net->bssid, CISCO_BROADCOM, 3)==0)||net->cisco_cap_exist) + pHTInfo->IOTPeer = HT_IOT_PEER_CISCO; + else if ((memcmp(net->bssid, LINKSYS_MARVELL_4400N, 3) == 0) || + net->marvell_cap_exist) + pHTInfo->IOTPeer = HT_IOT_PEER_MARVELL; + else + pHTInfo->IOTPeer = HT_IOT_PEER_UNKNOWN; + + RTLLIB_DEBUG(RTLLIB_DL_IOT, "Joseph debug!! IOTPEER: %x\n", pHTInfo->IOTPeer); +} + +u8 HTIOTActIsDisableMCS14(struct rtllib_device* ieee, u8* PeerMacAddr) +{ + u8 ret = 0; +#if 0 +#if (HAL_CODE_BASE==RTL8192 && DEV_BUS_TYPE==USB_INTERFACE) + if((memcmp(PeerMacAddr, UNKNOWN_BORADCOM, 3)==0) || + (memcmp(PeerMacAddr, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0) + ) + { + ret = 1; + } + + + if(pHTInfo->bCurrentRT2RTAggregation) + { + ret = 1; + } +#endif +#endif + return ret; + } + + +bool HTIOTActIsDisableMCS15(struct rtllib_device* ieee) +{ + bool retValue = false; + +#if defined(RTL8192U) + if(ieee->current_network.bssht.bdBandWidth == HT_CHANNEL_WIDTH_20_40) + retValue = true; + else + retValue = false; +#endif + + + return retValue; +} + +bool HTIOTActIsDisableMCSTwoSpatialStream(struct rtllib_device* ieee) +{ + bool retValue = false; +#ifdef RTL8192U + struct rtllib_network* net = &ieee->current_network; + + if((ieee->pHTInfo->bCurrentHTSupport == true) && (ieee->pairwise_key_type == KEY_TYPE_CCMP)) + { + if((memcmp(net->bssid, BELKINF5D8233V1_RALINK, 3)==0) || + (memcmp(net->bssid, PCI_RALINK, 3)==0) || + (memcmp(net->bssid, EDIMAX_RALINK, 3)==0)) + { + retValue = false; + } + } +#endif +#if defined(RTL8192SU) || defined RTL8192CE + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + if (ieee->rtllib_ap_sec_type && + (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP))) + { + if( (pHTInfo->IOTPeer != HT_IOT_PEER_ATHEROS) && + (pHTInfo->IOTPeer != HT_IOT_PEER_UNKNOWN) && + (pHTInfo->IOTPeer != HT_IOT_PEER_MARVELL) && + (pHTInfo->IOTPeer != HT_IOT_PEER_REALTEK_92SE) && + (pHTInfo->IOTPeer != HT_IOT_PEER_RALINK) ) + retValue = true; + } +#elif defined(RTL8192SE) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + if (ieee->rtllib_ap_sec_type && + (ieee->rtllib_ap_sec_type(ieee)&SEC_ALG_TKIP)) { + if(pHTInfo->IOTPeer == HT_IOT_PEER_RALINK){ + retValue = true; + } + } +#endif + return retValue; +} + +u8 HTIOTActIsDisableEDCATurbo(struct rtllib_device* ieee, u8* PeerMacAddr) +{ + u8 retValue = false; + + return retValue; +#if 0 + if((memcmp(PeerMacAddr, UNKNOWN_BORADCOM, 3)==0)|| + (memcmp(PeerMacAddr, LINKSYSWRT330_LINKSYSWRT300_BROADCOM, 3)==0)|| + (memcmp(PeerMacAddr, LINKSYSWRT350_LINKSYSWRT150_BROADCOM, 3)==0)) + + { + retValue = 1; + } + + return retValue; +#endif +} + + +bool HTIOTActIsEnableBETxOPLimit(struct rtllib_device* ieee) +{ + bool retValue = false; + +#if defined RTL8192SU + if(ieee->mode == IEEE_G) + retValue = true; +#elif defined RTL8192CE + if(ieee->mode == IEEE_G || + (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP))) + retValue = true; +#endif + + return retValue; +} + + +u8 HTIOTActIsMgntUseCCK6M(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; + + +#if (defined RTL8192U || defined RTL8192E || defined RTL8190P) + { + if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + { + retValue = 1; + } + } +#endif + + return retValue; +} + +u8 +HTIOTActWAIOTBroadcom(struct rtllib_device* ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + u8 retValue = false; + u8 boundary=59; + + pHTInfo->bWAIotBroadcom = false; + if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + { + if(ieee->current_network.bssht.bdBandWidth == HT_CHANNEL_WIDTH_20_40) + { + if(!(pHTInfo->bCurBW40MHz)) + { + if(ieee->current_network.mode != WIRELESS_MODE_B) + { + pHTInfo->bWAIotBroadcom = true; + + if(ieee->b_customer_lenovo_id == true) + boundary = 30; + + if( ieee->current_network.RSSI >= boundary) + retValue = true; + } + }else{ + ; + } + } + } + return retValue; +} + +u8 HTIOTActIsForcedCTS2Self(struct rtllib_device *ieee, struct rtllib_network *network) +{ + u8 retValue = 0; +#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE) + if((ieee->pHTInfo->IOTPeer == HT_IOT_PEER_MARVELL) ||(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_ATHEROS) ) +#else + if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_MARVELL) +#endif + { + retValue = 1; + } + + return retValue; +} + +u8 HTIOTActIsForcedRTSCTS(struct rtllib_device *ieee, struct rtllib_network *network) +{ + u8 retValue = 0; +#if defined(RTL8192SE) || defined(RTL8192SU) + if(ieee->pHTInfo->bCurrentHTSupport) + { + if((ieee->pHTInfo->IOTPeer != HT_IOT_PEER_REALTEK)&& + (ieee->pHTInfo->IOTPeer != HT_IOT_PEER_REALTEK_92SE)) + { + if((ieee->pHTInfo->IOTAction & HT_IOT_ACT_TX_NO_AGGREGATION) == 0) + retValue = 1; + } + } +#endif + return retValue; +} + +u8 +HTIOTActIsForcedAMSDU8K(struct rtllib_device *ieee, struct rtllib_network *network) +{ + u8 retValue = 0; + + return retValue; +} + +u8 HTIOTActIsCCDFsync(struct rtllib_device *ieee) +{ + u8 retValue = 0; +#if (defined RTL8190P || defined RTL8192U || defined RTL8192SU) + if(ieee->pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + { + retValue = 1; + } +#endif + return retValue; +} + +u8 +HTIOCActRejcectADDBARequest(struct rtllib_network *network) +{ + u8 retValue = 0; +#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE) + { + + + } +#endif + + return retValue; + +} + +u8 + HTIOTActIsEDCABiasRx(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; +#ifdef RTL8192SU + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + { + if(pHTInfo->IOTPeer==HT_IOT_PEER_ATHEROS || + pHTInfo->IOTPeer==HT_IOT_PEER_BROADCOM || + pHTInfo->IOTPeer==HT_IOT_PEER_RALINK) + return 1; + + } +#elif defined RTL8192CE + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + { + if(pHTInfo->IOTPeer==HT_IOT_PEER_ATHEROS || + pHTInfo->IOTPeer==HT_IOT_PEER_RALINK) + return 1; + + } +#elif defined RTL8192SE + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + { + if(ieee->rtllib_ap_sec_type != NULL) + if(ieee->rtllib_ap_sec_type(ieee) == SEC_ALG_CCMP) + if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK){ + return 1; + } + + } +#endif + return retValue; +} + +u8 +HTIOTActDisableShortGI(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK) + { + retValue = 1; + } + + return retValue; +} + +u8 +HTIOTActDisableHighPower(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; +#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; +#endif + +#ifdef RTL8192SU + if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK || + pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK || + pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK_92SE) + { + retValue = 1; + } +#elif defined RTL8192SE || defined RTL8192CE + if(pHTInfo->IOTPeer==HT_IOT_PEER_RALINK || + pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK ) + { + retValue = 1; + } +#endif + return retValue; +} + +void +HTIOTActDetermineRaFunc(struct rtllib_device* ieee, bool bPeerRx2ss) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + pHTInfo->IOTRaFunc &= HT_IOT_RAFUNC_DISABLE_ALL; + + if(pHTInfo->IOTPeer == HT_IOT_PEER_RALINK && !bPeerRx2ss) + pHTInfo->IOTRaFunc |= HT_IOT_RAFUNC_PEER_1R; + + if(pHTInfo->IOTAction & HT_IOT_ACT_AMSDU_ENABLE) + pHTInfo->IOTRaFunc |= HT_IOT_RAFUNC_TX_AMSDU; + +} + + +u8 +HTIOTActIsDisableTx40MHz(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; + +#if (defined RTL8192SU || defined RTL8192SE || defined RTL8192CE) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + if( (KEY_TYPE_WEP104 == ieee->pairwise_key_type) || + (KEY_TYPE_WEP40 == ieee->pairwise_key_type) || + (KEY_TYPE_WEP104 == ieee->group_key_type) || + (KEY_TYPE_WEP40 == ieee->group_key_type) || + (KEY_TYPE_TKIP == ieee->pairwise_key_type) ) + { + if((pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK) && (network->bssht.bdSupportHT)) + retValue = 1; + } +#endif + + return retValue; +} + +u8 +HTIOTActIsTxNoAggregation(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; + +#if (defined RTL8192SU || defined RTL8192SE || defined RTL8192CE) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + if( (KEY_TYPE_WEP104 == ieee->pairwise_key_type) || + (KEY_TYPE_WEP40 == ieee->pairwise_key_type) || + (KEY_TYPE_WEP104 == ieee->group_key_type) || + (KEY_TYPE_WEP40 == ieee->group_key_type) || + (KEY_TYPE_TKIP == ieee->pairwise_key_type) ) + { + if(pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK) + retValue = 1; + } +#endif + + return retValue; +} + + +u8 +HTIOTActIsDisableTx2SS(struct rtllib_device* ieee,struct rtllib_network *network) +{ + u8 retValue = 0; + +#if (defined RTL8192SU || defined RTL8192SE || defined RTL8192CE) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + if( (KEY_TYPE_WEP104 == ieee->pairwise_key_type) || + (KEY_TYPE_WEP40 == ieee->pairwise_key_type) || + (KEY_TYPE_WEP104 == ieee->group_key_type) || + (KEY_TYPE_WEP40 == ieee->group_key_type) || + (KEY_TYPE_TKIP == ieee->pairwise_key_type) ) + { + if((pHTInfo->IOTPeer==HT_IOT_PEER_REALTEK) && (network->bssht.bdSupportHT)) + retValue = 1; + } +#endif + + return retValue; +} + + +bool HTIOCActIsDisableCckRate(struct rtllib_device* ieee,struct rtllib_network *network) +{ + bool retValue = false; +#if defined(RTL8192SU) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + if(pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + { + if((memcmp(network->bssid, NETGEAR_BROADCOM, 3)==0) + && (network->bssht.bdBandWidth == HT_CHANNEL_WIDTH_20_40)) + return true; + } +#endif + return retValue; +} + + +bool HTIOCActAllowPeerAggOnePacket(struct rtllib_device* ieee,struct rtllib_network *network) +{ + bool retValue = false; +#if defined(RTL8192SE) || defined(RTL8192SU) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + { + if(ieee->VersionID<2) + if(pHTInfo->IOTPeer == HT_IOT_PEER_MARVELL) + return true; + + } +#endif + return retValue; +} + +bool +HTIOTActIsNullDataPowerSaving(struct rtllib_device* ieee,struct rtllib_network *network) +{ + bool retValue = false; +#if defined(RTL8192SE) || defined(RTL8192SU) + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + { + if(pHTInfo->IOTPeer == HT_IOT_PEER_BROADCOM) + return true; + + } +#endif + return retValue; +} + +void HTResetIOTSetting( + PRT_HIGH_THROUGHPUT pHTInfo +) +{ + pHTInfo->IOTAction = 0; + pHTInfo->IOTPeer = HT_IOT_PEER_UNKNOWN; + pHTInfo->IOTRaFunc = 0; +} + + +#ifdef _RTL8192_EXT_PATCH_ +void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 IsEncrypt, u8 bIsBcn) +#else +void HTConstructCapabilityElement(struct rtllib_device* ieee, u8* posHTCap, u8* len, u8 IsEncrypt) +#endif +{ + PRT_HIGH_THROUGHPUT pHT = ieee->pHTInfo; + PHT_CAPABILITY_ELE pCapELE = NULL; + + if ((posHTCap == NULL) || (pHT == NULL)) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "posHTCap or pHTInfo can't be null in HTConstructCapabilityElement()\n"); + return; + } + memset(posHTCap, 0, *len); + if(pHT->ePeerHTSpecVer == HT_SPEC_VER_EWC) + { + u8 EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; + memcpy(posHTCap, EWC11NHTCap, sizeof(EWC11NHTCap)); + pCapELE = (PHT_CAPABILITY_ELE)&(posHTCap[4]); + }else + { + pCapELE = (PHT_CAPABILITY_ELE)posHTCap; + } + + pCapELE->AdvCoding = 0; + if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + { + pCapELE->ChlWidth = 0; + } + else + { +#ifdef _RTL8192_EXT_PATCH_ + if(bIsBcn) + pCapELE->ChlWidth = (pHT->bCurBW40MHz?1:0); + else +#endif + pCapELE->ChlWidth = (pHT->bRegBW40MHz?1:0); + } + + pCapELE->MimoPwrSave = pHT->SelfMimoPs; + pCapELE->GreenField = 0; + pCapELE->ShortGI20Mhz = 1; + pCapELE->ShortGI40Mhz = 1; + pCapELE->TxSTBC = 1; +#ifdef Rtl8192SE + pCapELE->TxSTBC = 0; +#endif + pCapELE->RxSTBC = 0; + pCapELE->DelayBA = 0; + pCapELE->MaxAMSDUSize = (MAX_RECEIVE_BUFFER_SIZE>=7935)?1:0; + pCapELE->DssCCk = ((pHT->bRegBW40MHz)?(pHT->bRegSuppCCK?1:0):0); + pCapELE->PSMP = 0; + pCapELE->LSigTxopProtect = 0; + + + RTLLIB_DEBUG(RTLLIB_DL_HT, "TX HT cap/info ele BW=%d MaxAMSDUSize:%d DssCCk:%d\n", pCapELE->ChlWidth, pCapELE->MaxAMSDUSize, pCapELE->DssCCk); + + if( IsEncrypt) + { + pCapELE->MPDUDensity = 7; + pCapELE->MaxRxAMPDUFactor = 2; + } + else + { + pCapELE->MaxRxAMPDUFactor = 3; + pCapELE->MPDUDensity = 0; + } + + memcpy(pCapELE->MCS, ieee->Regdot11HTOperationalRateSet, 16); + if(pHT->IOTAction & HT_IOT_ACT_DISABLE_MCS15) + pCapELE->MCS[1] &= 0x7f; + + if(pHT->IOTAction & HT_IOT_ACT_DISABLE_MCS14) + pCapELE->MCS[1] &= 0xbf; + + if(pHT->IOTAction & HT_IOT_ACT_DISABLE_ALL_2SS) + pCapELE->MCS[1] &= 0x00; + + if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + { + int i; + for(i = 1; i< 16; i++) + pCapELE->MCS[i] = 0; + } + + memset(&pCapELE->ExtHTCapInfo, 0, 2); + + + memset(pCapELE->TxBFCap, 0, 4); + + pCapELE->ASCap = 0; + if(pHT->ePeerHTSpecVer == HT_SPEC_VER_EWC) + *len = 30 + 2; + else + *len = 26 + 2; + + + + + return; + +} +void HTConstructInfoElement(struct rtllib_device* ieee, u8* posHTInfo, u8* len, u8 IsEncrypt) +{ + PRT_HIGH_THROUGHPUT pHT = ieee->pHTInfo; + PHT_INFORMATION_ELE pHTInfoEle = (PHT_INFORMATION_ELE)posHTInfo; + if ((posHTInfo == NULL) || (pHTInfoEle == NULL)) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "posHTInfo or pHTInfoEle can't be null in HTConstructInfoElement()\n"); + return; + } + + memset(posHTInfo, 0, *len); +#ifdef _RTL8192_EXT_PATCH_ + if ((ieee->iw_mode == IW_MODE_ADHOC) || (ieee->iw_mode == IW_MODE_MASTER) ||(ieee->iw_mode == IW_MODE_MESH) ) +#else + if ( (ieee->iw_mode == IW_MODE_ADHOC) || (ieee->iw_mode == IW_MODE_MASTER)) +#endif + { + pHTInfoEle->ControlChl = ieee->current_network.channel; +#ifdef _RTL8192_EXT_PATCH_ + if((!ieee->only_mesh) && (ieee->iw_mode == IW_MODE_MESH) && (ieee->state == RTLLIB_LINKED)) + pHTInfoEle->ExtChlOffset = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT: + ieee->APExtChlOffset); + else if(ieee->iw_mode == IW_MODE_MESH) + pHTInfoEle->ExtChlOffset = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT: + (ieee->current_mesh_network.channel<=6)? + HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else +#endif + pHTInfoEle->ExtChlOffset = ((pHT->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT: + (ieee->current_network.channel<=6)? + HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + pHTInfoEle->RecommemdedTxWidth = pHT->bRegBW40MHz; + pHTInfoEle->RIFS = 0; + pHTInfoEle->PSMPAccessOnly = 0; + pHTInfoEle->SrvIntGranularity = 0; + pHTInfoEle->OptMode = pHT->CurrentOpMode; + pHTInfoEle->NonGFDevPresent = 0; + pHTInfoEle->DualBeacon = 0; + pHTInfoEle->SecondaryBeacon = 0; + pHTInfoEle->LSigTxopProtectFull = 0; + pHTInfoEle->PcoActive = 0; + pHTInfoEle->PcoPhase = 0; + + memset(pHTInfoEle->BasicMSC, 0, 16); + + + *len = 22 + 2; + + } + else + { + *len = 0; + } + return; +} + +void HTConstructRT2RTAggElement(struct rtllib_device* ieee, u8* posRT2RTAgg, u8* len) +{ + if (posRT2RTAgg == NULL) { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "posRT2RTAgg can't be null in HTConstructRT2RTAggElement()\n"); + return; + } + memset(posRT2RTAgg, 0, *len); + *posRT2RTAgg++ = 0x00; + *posRT2RTAgg++ = 0xe0; + *posRT2RTAgg++ = 0x4c; + *posRT2RTAgg++ = 0x02; + *posRT2RTAgg++ = 0x01; + +#ifdef RTL8192CE + *posRT2RTAgg = 0x70; +#else + *posRT2RTAgg = 0x10; +#endif + + if(ieee->bSupportRemoteWakeUp) { + *posRT2RTAgg |= RT_HT_CAP_USE_WOW; + } + + *len = 6 + 2; + + return; + +#ifdef TODO + posRT2RTAgg->Length = 6; +#endif + + + + +} + +u8 HT_PickMCSRate(struct rtllib_device* ieee, u8* pOperateMCS) +{ + u8 i; + if (pOperateMCS == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "pOperateMCS can't be null in HT_PickMCSRate()\n"); + return false; + } + + switch(ieee->mode) + { + case IEEE_A: + case IEEE_B: + case IEEE_G: + + for(i=0;i<=15;i++){ + pOperateMCS[i] = 0; + } + break; + + case IEEE_N_24G: + case IEEE_N_5G: + + pOperateMCS[0] &=RATE_ADPT_1SS_MASK; + pOperateMCS[1] &=RATE_ADPT_2SS_MASK; + pOperateMCS[3] &=RATE_ADPT_MCS32_MASK; + break; + + default: + + break; + + } + + return true; +} + +u8 HTGetHighestMCSRate(struct rtllib_device* ieee, u8* pMCSRateSet, u8* pMCSFilter) +{ + u8 i, j; + u8 bitMap; + u8 mcsRate = 0; + u8 availableMcsRate[16]; + if (pMCSRateSet == NULL || pMCSFilter == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "pMCSRateSet or pMCSFilter can't be null in HTGetHighestMCSRate()\n"); + return false; + } + for(i=0; i<16; i++) + availableMcsRate[i] = pMCSRateSet[i] & pMCSFilter[i]; + + for(i = 0; i < 16; i++) + { + if(availableMcsRate[i] != 0) + break; + } + if(i == 16) + return false; + + for(i = 0; i < 16; i++) + { + if(availableMcsRate[i] != 0) + { + bitMap = availableMcsRate[i]; + for(j = 0; j < 8; j++) + { + if((bitMap%2) != 0) + { + if(HTMcsToDataRate(ieee, (8*i+j)) > HTMcsToDataRate(ieee, mcsRate)) + mcsRate = (8*i+j); + } + bitMap = bitMap>>1; + } + } + } + return (mcsRate|0x80); +} + +u8 HTFilterMCSRate( struct rtllib_device* ieee, u8* pSupportMCS, u8* pOperateMCS) +{ + + u8 i=0; + + for(i=0;i<=15;i++){ + pOperateMCS[i] = ieee->Regdot11TxHTOperationalRateSet[i]&pSupportMCS[i]; + } + + + + HT_PickMCSRate(ieee, pOperateMCS); + + if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + pOperateMCS[1] = 0; + + for(i=2; i<=15; i++) + pOperateMCS[i] = 0; + + return true; +} +void HTSetConnectBwMode(struct rtllib_device* ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset); +void HTOnAssocRsp(struct rtllib_device *ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + PHT_CAPABILITY_ELE pPeerHTCap = NULL; + PHT_INFORMATION_ELE pPeerHTInfo = NULL; + u16 nMaxAMSDUSize = 0; + u8* pMcsFilter = NULL; + + static u8 EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; + static u8 EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34}; + + if( pHTInfo->bCurrentHTSupport == false ) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "<=== HTOnAssocRsp(): HT_DISABLE\n"); + return; + } + RTLLIB_DEBUG(RTLLIB_DL_HT, "===> HTOnAssocRsp_wq(): HT_ENABLE\n"); + + if(!memcmp(pHTInfo->PeerHTCapBuf,EWC11NHTCap, sizeof(EWC11NHTCap))) + pPeerHTCap = (PHT_CAPABILITY_ELE)(&pHTInfo->PeerHTCapBuf[4]); + else + pPeerHTCap = (PHT_CAPABILITY_ELE)(pHTInfo->PeerHTCapBuf); + + if(!memcmp(pHTInfo->PeerHTInfoBuf, EWC11NHTInfo, sizeof(EWC11NHTInfo))) + pPeerHTInfo = (PHT_INFORMATION_ELE)(&pHTInfo->PeerHTInfoBuf[4]); + else + pPeerHTInfo = (PHT_INFORMATION_ELE)(pHTInfo->PeerHTInfoBuf); + +#ifdef _RTL8192_EXT_PATCH_ + ieee->APExtChlOffset = (HT_EXTCHNL_OFFSET)(pPeerHTInfo->ExtChlOffset); +#endif + RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_HT, pPeerHTCap, sizeof(HT_CAPABILITY_ELE)); + HTSetConnectBwMode(ieee, (HT_CHANNEL_WIDTH)(pPeerHTCap->ChlWidth), (HT_EXTCHNL_OFFSET)(pPeerHTInfo->ExtChlOffset)); +#if defined RTL8192SE || defined RTL8192SU || defined RTL8192CE + if(pHTInfo->bCurBW40MHz == true) +#endif + pHTInfo->bCurTxBW40MHz = ((pPeerHTInfo->RecommemdedTxWidth == 1)?true:false); + + pHTInfo->bCurShortGI20MHz= + ((pHTInfo->bRegShortGI20MHz)?((pPeerHTCap->ShortGI20Mhz==1)?true:false):false); + pHTInfo->bCurShortGI40MHz= + ((pHTInfo->bRegShortGI40MHz)?((pPeerHTCap->ShortGI40Mhz==1)?true:false):false); + + pHTInfo->bCurSuppCCK = + ((pHTInfo->bRegSuppCCK)?((pPeerHTCap->DssCCk==1)?true:false):false); + + + pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; + + nMaxAMSDUSize = (pPeerHTCap->MaxAMSDUSize==0)?3839:7935; + + if(pHTInfo->nAMSDU_MaxSize > nMaxAMSDUSize ) + pHTInfo->nCurrent_AMSDU_MaxSize = nMaxAMSDUSize; + else + pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; + + pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; + if (ieee->rtllib_ap_sec_type && + (ieee->rtllib_ap_sec_type(ieee)&(SEC_ALG_WEP|SEC_ALG_TKIP))){ + if( (pHTInfo->IOTPeer== HT_IOT_PEER_ATHEROS) || + (pHTInfo->IOTPeer == HT_IOT_PEER_UNKNOWN) ) + pHTInfo->bCurrentAMPDUEnable = false; + } + + if(!pHTInfo->bRegRT2RTAggregation) + { + if(pHTInfo->AMPDU_Factor > pPeerHTCap->MaxRxAMPDUFactor) + pHTInfo->CurrentAMPDUFactor = pPeerHTCap->MaxRxAMPDUFactor; + else + pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor; + + } else { +#if 0 + osTmp= PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_REALTEK_AGG, OUI_SUBTYPE_DONT_CARE); + if(osTmp.Length >= 5) +#endif + if (ieee->current_network.bssht.bdRT2RTAggregation) + { + if( ieee->pairwise_key_type != KEY_TYPE_NA) + pHTInfo->CurrentAMPDUFactor = pPeerHTCap->MaxRxAMPDUFactor; + else + pHTInfo->CurrentAMPDUFactor = HT_AGG_SIZE_64K; + }else + { + if(pPeerHTCap->MaxRxAMPDUFactor < HT_AGG_SIZE_32K) + pHTInfo->CurrentAMPDUFactor = pPeerHTCap->MaxRxAMPDUFactor; + else + pHTInfo->CurrentAMPDUFactor = HT_AGG_SIZE_32K; + } + } + +#if 0 + if(pHTInfo->MPDU_Density > pPeerHTCap->MPDUDensity) + pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density; + else + pHTInfo->CurrentMPDUDensity = pPeerHTCap->MPDUDensity; + if(ieee->pairwise_key_type != KEY_TYPE_NA ) + pHTInfo->CurrentMPDUDensity = 7; +#else + if(pHTInfo->MPDU_Density > pPeerHTCap->MPDUDensity) + pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density; + else + pHTInfo->CurrentMPDUDensity = pPeerHTCap->MPDUDensity; +#endif +#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE) + if(ieee->SetHwRegHandler != NULL) { + ieee->SetHwRegHandler( ieee->dev, HW_VAR_SHORTGI_DENSITY, (u8*)(&ieee->MaxMssDensity)); + ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor); + ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity); + } +#elif defined RTL8192CE + if(ieee->SetHwRegHandler != NULL) { + ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor); + ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity); + } +#endif +#ifndef RTL8190P + if(pHTInfo->IOTAction & HT_IOT_ACT_TX_USE_AMSDU_8K) +#else + if( 0 ) +#endif + { + pHTInfo->bCurrentAMPDUEnable = false; + pHTInfo->ForcedAMSDUMode = HT_AGG_FORCE_ENABLE; + pHTInfo->ForcedAMSDUMaxSize = 7935; + } + pHTInfo->bCurRxReorderEnable = pHTInfo->bRegRxReorderEnable; + + + if(pPeerHTCap->MCS[0] == 0) + pPeerHTCap->MCS[0] = 0xff; + + HTIOTActDetermineRaFunc(ieee, ((pPeerHTCap->MCS[1])!=0)); + + HTFilterMCSRate(ieee, pPeerHTCap->MCS, ieee->dot11HTOperationalRateSet); + + pHTInfo->PeerMimoPs = pPeerHTCap->MimoPwrSave; + if(pHTInfo->PeerMimoPs == MIMO_PS_STATIC) + pMcsFilter = MCS_FILTER_1SS; + else + pMcsFilter = MCS_FILTER_ALL; + ieee->HTHighestOperaRate = HTGetHighestMCSRate(ieee, ieee->dot11HTOperationalRateSet, pMcsFilter); + ieee->HTCurrentOperaRate = ieee->HTHighestOperaRate; + + pHTInfo->CurrentOpMode = pPeerHTInfo->OptMode; + +} + +void HTSetConnectBwModeCallback(struct rtllib_device* ieee); +void HTInitializeHTInfo(struct rtllib_device* ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + RTLLIB_DEBUG(RTLLIB_DL_HT, "===========>%s()\n", __FUNCTION__); + pHTInfo->bCurrentHTSupport = false; + + pHTInfo->bCurBW40MHz = false; + pHTInfo->bCurTxBW40MHz = false; + + pHTInfo->bCurShortGI20MHz = false; + pHTInfo->bCurShortGI40MHz = false; + pHTInfo->bForcedShortGI = false; + + pHTInfo->bCurSuppCCK = true; + + pHTInfo->bCurrent_AMSDU_Support = false; + pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; +#ifdef _RTL8192_EXT_PATCH_ + pHTInfo->bCurrent_Mesh_AMSDU_Support = true; +#endif + pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density; + pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor; + + memset((void*)(&(pHTInfo->SelfHTCap)), 0, sizeof(pHTInfo->SelfHTCap)); + memset((void*)(&(pHTInfo->SelfHTInfo)), 0, sizeof(pHTInfo->SelfHTInfo)); + memset((void*)(&(pHTInfo->PeerHTCapBuf)), 0, sizeof(pHTInfo->PeerHTCapBuf)); + memset((void*)(&(pHTInfo->PeerHTInfoBuf)), 0, sizeof(pHTInfo->PeerHTInfoBuf)); + + pHTInfo->bSwBwInProgress = false; + pHTInfo->ChnlOp = CHNLOP_NONE; + + pHTInfo->ePeerHTSpecVer = HT_SPEC_VER_IEEE; + + pHTInfo->bCurrentRT2RTAggregation = false; + pHTInfo->bCurrentRT2RTLongSlotTime = false; + pHTInfo->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0; + + pHTInfo->IOTPeer = 0; + pHTInfo->IOTAction = 0; + pHTInfo->IOTRaFunc = 0; + + { + u8* RegHTSuppRateSets = &(ieee->RegHTSuppRateSet[0]); + RegHTSuppRateSets[0] = 0xFF; + RegHTSuppRateSets[1] = 0xFF; + RegHTSuppRateSets[4] = 0x01; + } +} +void HTInitializeBssDesc(PBSS_HT pBssHT) +{ + + pBssHT->bdSupportHT = false; + memset(pBssHT->bdHTCapBuf, 0, sizeof(pBssHT->bdHTCapBuf)); + pBssHT->bdHTCapLen = 0; + memset(pBssHT->bdHTInfoBuf, 0, sizeof(pBssHT->bdHTInfoBuf)); + pBssHT->bdHTInfoLen = 0; + + pBssHT->bdHTSpecVer= HT_SPEC_VER_IEEE; + + pBssHT->bdRT2RTAggregation = false; + pBssHT->bdRT2RTLongSlotTime = false; + pBssHT->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0; +} + +void HTResetSelfAndSavePeerSetting(struct rtllib_device* ieee, struct rtllib_network * pNetwork) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + u8 bIOTAction = 0; + + RTLLIB_DEBUG(RTLLIB_DL_HT, "==============>%s()\n", __FUNCTION__); + /*unmark bEnableHT flag here is the same reason why unmarked in function rtllib_softmac_new_net. WB 2008.09.10*/ + if (pNetwork->bssht.bdSupportHT) + { + pHTInfo->bCurrentHTSupport = true; + pHTInfo->ePeerHTSpecVer = pNetwork->bssht.bdHTSpecVer; + + if(pNetwork->bssht.bdHTCapLen > 0 && pNetwork->bssht.bdHTCapLen <= sizeof(pHTInfo->PeerHTCapBuf)) + memcpy(pHTInfo->PeerHTCapBuf, pNetwork->bssht.bdHTCapBuf, pNetwork->bssht.bdHTCapLen); + + if(pNetwork->bssht.bdHTInfoLen > 0 && pNetwork->bssht.bdHTInfoLen <= sizeof(pHTInfo->PeerHTInfoBuf)) + memcpy(pHTInfo->PeerHTInfoBuf, pNetwork->bssht.bdHTInfoBuf, pNetwork->bssht.bdHTInfoLen); + + if(pHTInfo->bRegRT2RTAggregation) + { + pHTInfo->bCurrentRT2RTAggregation = pNetwork->bssht.bdRT2RTAggregation; + pHTInfo->bCurrentRT2RTLongSlotTime = pNetwork->bssht.bdRT2RTLongSlotTime; + pHTInfo->RT2RT_HT_Mode = pNetwork->bssht.RT2RT_HT_Mode; + } + else + { + pHTInfo->bCurrentRT2RTAggregation = false; + pHTInfo->bCurrentRT2RTLongSlotTime = false; + pHTInfo->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0; + } + + HTIOTPeerDetermine(ieee); + + pHTInfo->IOTAction = 0; + bIOTAction = HTIOTActIsDisableMCS14(ieee, pNetwork->bssid); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_MCS14; + + bIOTAction = HTIOTActIsDisableMCS15(ieee); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_MCS15; + + bIOTAction = HTIOTActIsDisableMCSTwoSpatialStream(ieee); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_ALL_2SS; + + + bIOTAction = HTIOTActIsDisableEDCATurbo(ieee, pNetwork->bssid); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_EDCA_TURBO; + +#if defined(RTL8190P) || defined(RTL8192E) || defined(RTL8192U) + bIOTAction = HTIOTActIsMgntUseCCK6M(ieee,pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_MGNT_USE_CCK_6M; +#elif defined(RTL8192SE) || defined(RTL8192SU) || defined RTL8192CE + bIOTAction = HTIOTActWAIOTBroadcom(ieee); + if(bIOTAction) + { + pHTInfo->IOTAction |= HT_IOT_ACT_WA_IOT_Broadcom; + } +#endif + bIOTAction = HTIOTActIsCCDFsync(ieee); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_CDD_FSYNC; +#if defined(RTL8192SU) || defined(RTL8192SE) || defined RTL8192CE + bIOTAction = HTIOTActIsForcedCTS2Self(ieee,pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF; + + + bIOTAction = HTIOTActIsEnableBETxOPLimit(ieee); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_ENABLE_BE_TXOP; + +#if defined(RTL8192SU) + bIOTAction = HTIOCActRejcectADDBARequest(pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_REJECT_ADDBA_REQ; +#endif + + bIOTAction = HTIOCActAllowPeerAggOnePacket(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT; + + bIOTAction = HTIOTActIsEDCABiasRx(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_EDCA_BIAS_ON_RX; + +#if defined(RTL8192SU) + bIOTAction = HTIOCActIsDisableCckRate(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_CCK_RATE; +#endif + bIOTAction = HTIOTActDisableShortGI(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_SHORT_GI; + + bIOTAction = HTIOTActDisableHighPower(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_HIGH_POWER; + + + bIOTAction = HTIOTActIsForcedAMSDU8K(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_TX_USE_AMSDU_8K; + +#if defined(RTL8192SU) + bIOTAction = HTIOTActIsTxNoAggregation(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_TX_NO_AGGREGATION; + + bIOTAction = HTIOTActIsDisableTx40MHz(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_TX_40_MHZ; + + bIOTAction = HTIOTActIsDisableTx2SS(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_TX_2SS; +#endif + + bIOTAction = HTIOTActIsForcedRTSCTS(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_FORCED_RTS; + + bIOTAction = HTIOTActIsNullDataPowerSaving(ieee, pNetwork); + if(bIOTAction) + pHTInfo->IOTAction |= HT_IOT_ACT_NULL_DATA_POWER_SAVING; +#endif + } + else + { + pHTInfo->bCurrentHTSupport = false; + pHTInfo->bCurrentRT2RTAggregation = false; + pHTInfo->bCurrentRT2RTLongSlotTime = false; + pHTInfo->RT2RT_HT_Mode = (RT_HT_CAPBILITY)0; + + pHTInfo->IOTAction = 0; + pHTInfo->IOTRaFunc = 0; + } + +} + +void HTUpdateSelfAndPeerSetting(struct rtllib_device* ieee, struct rtllib_network * pNetwork) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + PHT_INFORMATION_ELE pPeerHTInfo = (PHT_INFORMATION_ELE)pNetwork->bssht.bdHTInfoBuf; + + if(pHTInfo->bCurrentHTSupport) + { + if(pNetwork->bssht.bdHTInfoLen != 0) + pHTInfo->CurrentOpMode = pPeerHTInfo->OptMode; + + } +} + +void HTUseDefaultSetting(struct rtllib_device* ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + +#ifdef _RTL8192_EXT_PATCH_ + ieee->current_mesh_network.qos_data.supported = 1; + ieee->current_mesh_network.qos_data.active = ieee->current_mesh_network.qos_data.supported; +#endif + if(pHTInfo->bEnableHT) + { + pHTInfo->bCurrentHTSupport = true; + pHTInfo->bCurSuppCCK = pHTInfo->bRegSuppCCK; + +#ifdef _RTL8192_EXT_PATCH_ + if(!((ieee->iw_mode == IW_MODE_MESH) && ieee->proto_started && (ieee->state == RTLLIB_LINKED))) + pHTInfo->bCurBW40MHz = pHTInfo->bRegBW40MHz; +#else + pHTInfo->bCurBW40MHz = pHTInfo->bRegBW40MHz; +#endif + pHTInfo->bCurShortGI20MHz= pHTInfo->bRegShortGI20MHz; + + pHTInfo->bCurShortGI40MHz= pHTInfo->bRegShortGI40MHz; +#ifdef _RTL8192_EXT_PATCH_ + ieee->current_mesh_network.qos_data.supported = 1; + ieee->current_mesh_network.qos_data.active = ieee->current_mesh_network.qos_data.supported; +#endif + + if(ieee->iw_mode == IW_MODE_ADHOC) + { + ieee->current_network.qos_data.active = ieee->current_network.qos_data.supported; + } +#ifdef ENABLE_AMSDU + if(ieee->iw_mode == IW_MODE_ADHOC) + { + pHTInfo->bCurrent_AMSDU_Support = 1; + } +#ifdef _RTL8192_EXT_PATCH_ + else if(ieee->iw_mode == IW_MODE_MESH) + { +#ifdef COMPATIBLE_WITH_RALINK_MESH + pHTInfo->bCurrent_Mesh_AMSDU_Support = 0; +#else + pHTInfo->bCurrent_Mesh_AMSDU_Support = 1; +#endif + pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; + } +#endif + else + pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; +#else + pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; +#endif + pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; + +#ifdef ENABLE_AMSDU + if(ieee->iw_mode == IW_MODE_ADHOC) + pHTInfo->bCurrentAMPDUEnable = 0; +#ifdef _RTL8192_EXT_PATCH_ + else if(ieee->iw_mode == IW_MODE_MESH) + { +#ifdef COMPATIBLE_WITH_RALINK_MESH + pHTInfo->bCurrentMeshAMPDUEnable = 1; +#else + pHTInfo->bCurrentMeshAMPDUEnable = 0; +#endif + pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; + } +#endif + else + pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; +#else + pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; +#endif + pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor; + + pHTInfo->CurrentMPDUDensity = pHTInfo->CurrentMPDUDensity; + + + HTFilterMCSRate(ieee, ieee->Regdot11TxHTOperationalRateSet, ieee->dot11HTOperationalRateSet); +#ifdef TODO + Adapter->HalFunc.InitHalRATRTableHandler( Adapter, &pMgntInfo->dot11OperationalRateSet, pMgntInfo->dot11HTOperationalRateSet); +#endif + ieee->HTHighestOperaRate = HTGetHighestMCSRate(ieee, ieee->dot11HTOperationalRateSet, MCS_FILTER_ALL); + ieee->HTCurrentOperaRate = ieee->HTHighestOperaRate; + +#if (defined RTL8192SE || defined RTL8192SU || defined RTL8192CE) + if(ieee->SetHwRegHandler != NULL) { + ieee->SetHwRegHandler( ieee->dev, HW_VAR_SHORTGI_DENSITY, (u8*)(&ieee->MaxMssDensity)); + ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor); + ieee->SetHwRegHandler(ieee->dev, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity); + } +#endif + + } + else + { + pHTInfo->bCurrentHTSupport = false; + } + return; +} +u8 HTCCheck(struct rtllib_device* ieee, u8* pFrame) +{ + if(ieee->pHTInfo->bCurrentHTSupport) + { + if( (IsQoSDataFrame(pFrame) && Frame_Order(pFrame)) == 1) + { + RTLLIB_DEBUG(RTLLIB_DL_HT, "HT CONTROL FILED EXIST!!\n"); + return true; + } + } + return false; +} + +void HTSetConnectBwMode(struct rtllib_device* ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + if(pHTInfo->bRegBW40MHz == false) + return; + + if(ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)) + Bandwidth=HT_CHANNEL_WIDTH_20; + + + if(pHTInfo->bSwBwInProgress) { + printk("%s: bSwBwInProgress!!\n", __FUNCTION__); + return; + } + if(Bandwidth==HT_CHANNEL_WIDTH_20_40) + { + if(ieee->current_network.channel<2 && Offset==HT_EXTCHNL_OFFSET_LOWER) + Offset = HT_EXTCHNL_OFFSET_NO_EXT; + if(Offset==HT_EXTCHNL_OFFSET_UPPER || Offset==HT_EXTCHNL_OFFSET_LOWER) { + pHTInfo->bCurBW40MHz = true; + pHTInfo->CurSTAExtChnlOffset = Offset; + } else { + pHTInfo->bCurBW40MHz = false; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_EXT; + } + } else { + pHTInfo->bCurBW40MHz = false; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_EXT; + } + + printk("%s():pHTInfo->bCurBW40MHz:%x\n", __func__, pHTInfo->bCurBW40MHz); + + pHTInfo->bSwBwInProgress = true; + + HTSetConnectBwModeCallback(ieee); + +} + +void HTSetConnectBwModeCallback(struct rtllib_device* ieee) +{ + PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo; + + RTLLIB_DEBUG(RTLLIB_DL_HT, "======>%s()\n", __FUNCTION__); + if(pHTInfo->bCurBW40MHz) + { + if(pHTInfo->CurSTAExtChnlOffset==HT_EXTCHNL_OFFSET_UPPER) + ieee->set_chan(ieee->dev, ieee->current_network.channel+2); + else if(pHTInfo->CurSTAExtChnlOffset==HT_EXTCHNL_OFFSET_LOWER) + ieee->set_chan(ieee->dev, ieee->current_network.channel-2); + else + ieee->set_chan(ieee->dev, ieee->current_network.channel); + + ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset); + } else { + ieee->set_chan(ieee->dev, ieee->current_network.channel); + ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } + + pHTInfo->bSwBwInProgress = false; +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(HTUpdateSelfAndPeerSetting); +EXPORT_SYMBOL_RSL(HTFilterMCSRate); +EXPORT_SYMBOL_RSL(HTGetHighestMCSRate); +EXPORT_SYMBOL_RSL(MCS_FILTER_ALL); +EXPORT_SYMBOL_RSL(MCS_FILTER_1SS); +#ifdef _RTL8192_EXT_PATCH_ +EXPORT_SYMBOL_RSL(HTSetConnectBwMode); +EXPORT_SYMBOL_RSL(HTConstructCapabilityElement); +EXPORT_SYMBOL_RSL(HTConstructRT2RTAggElement); +EXPORT_SYMBOL_RSL(HTUseDefaultSetting); +EXPORT_SYMBOL_RSL(HTConstructInfoElement); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/autoload.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/autoload.c @@ -0,0 +1,41 @@ +/* + * Cryptographic API. + * + * Algorithm autoloader. + * + * Copyright (c) 2002 James Morris + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ +#include "kmap_types.h" + +#include +#include "rtl_crypto.h" +#include +#include +#include "internal.h" + +#ifdef CONFIG_KMOD +/* + * A far more intelligent version of this is planned. For now, just + * try an exact match on the name of the algorithm. + */ +void crypto_alg_autoload(const char *name) +{ + request_module(name); +} + +struct crypto_alg *crypto_alg_mod_lookup(const char *name) +{ + struct crypto_alg *alg = crypto_alg_lookup(name); + if (alg == NULL) { + crypto_alg_autoload(name); + alg = crypto_alg_lookup(name); + } + return alg; +} +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_module.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_module.c @@ -0,0 +1,587 @@ +/******************************************************************************* + + Copyright(c) 2004 Intel Corporation. All rights reserved. + + Portions of this file are based on the WEP enablement code provided by the + Host AP project hostap-drivers v0.1.3 + Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen + + Copyright (c) 2002-2003, Jouni Malinen + + 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 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. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Contact Information: + James P. Ketrenos + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + +*******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "rtllib.h" + + +#ifndef BUILT_IN_RTLLIB +MODULE_DESCRIPTION("802.11 data/management/control stack"); +MODULE_AUTHOR("Copyright (C) 2004 Intel Corporation "); +MODULE_LICENSE("GPL"); +#endif + +#define DRV_NAME "rtllib" + +#ifdef CONFIG_CFG_80211 +#ifdef CONFIG_RTL_RFKILL +static inline void rtllib_rfkill_poll(struct wiphy *wiphy) +{ + struct rtllib_device *rtllib = NULL; + + rtllib = (struct rtllib_device *)wiphy_priv(wiphy); + + rtllib = (struct rtllib_device *)netdev_priv_rsl(rtllib->dev); + + if (rtllib->rtllib_rfkill_poll) + rtllib->rtllib_rfkill_poll(rtllib->dev); +} +#else +static inline void rtllib_rfkill_poll(struct wiphy *wiphy) {} +#endif +struct cfg80211_ops rtllib_config_ops = {.rfkill_poll = rtllib_rfkill_poll }; +void *rtllib_wiphy_privid = &rtllib_wiphy_privid; +#endif + +void _setup_timer( struct timer_list* ptimer, void* fun, unsigned long data ) +{ + ptimer->function = fun; + ptimer->data = data; + init_timer( ptimer ); +} + +#ifdef _RTL8192_EXT_PATCH_ +static inline int rtllib_mesh_networks_allocate(struct rtllib_device *ieee) +{ + if (ieee->mesh_networks) + return 0; + + ieee->mesh_networks = kmalloc( + MAX_NETWORK_COUNT * sizeof(struct rtllib_network), + GFP_KERNEL); + + if (!ieee->mesh_networks) { + printk(KERN_WARNING "%s: Out of memory allocating beacons\n", + ieee->dev->name); + return -ENOMEM; + } + + memset(ieee->mesh_networks, 0, + MAX_NETWORK_COUNT * sizeof(struct rtllib_network)); + + return 0; +} + +static inline void rtllib_mesh_networks_free(struct rtllib_device *ieee) +{ + if (!ieee->mesh_networks) + return; + kfree(ieee->mesh_networks); + ieee->mesh_networks = NULL; +} +#endif + +static inline int rtllib_networks_allocate(struct rtllib_device *ieee) +{ + if (ieee->networks) + return 0; + +#ifndef RTK_DMP_PLATFORM + ieee->networks = kmalloc( + MAX_NETWORK_COUNT * sizeof(struct rtllib_network), + GFP_KERNEL); +#else + ieee->networks = dvr_malloc(MAX_NETWORK_COUNT * sizeof(struct rtllib_network)); +#endif + if (!ieee->networks) { + printk(KERN_WARNING "%s: Out of memory allocating beacons\n", + ieee->dev->name); + return -ENOMEM; + } + + memset(ieee->networks, 0, + MAX_NETWORK_COUNT * sizeof(struct rtllib_network)); + + return 0; +} + +static inline void rtllib_networks_free(struct rtllib_device *ieee) +{ + if (!ieee->networks) + return; +#ifndef RTK_DMP_PLATFORM + kfree(ieee->networks); +#else + dvr_free(ieee->networks); +#endif + ieee->networks = NULL; +} + +static inline void rtllib_networks_initialize(struct rtllib_device *ieee) +{ + int i; + + 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); +#ifdef _RTL8192_EXT_PATCH_ + INIT_LIST_HEAD(&ieee->mesh_network_free_list); + INIT_LIST_HEAD(&ieee->mesh_network_list); + for (i = 0; i < MAX_NETWORK_COUNT; i++) + list_add_tail(&ieee->mesh_networks[i].list, &ieee->mesh_network_free_list); +#endif +} + +#if defined CONFIG_CFG_80211 +static bool rtllib_wdev_alloc(struct rtllib_device *ieee, int sizeof_priv) +{ + int priv_size; + struct rtllib_device *rtllib = NULL; + + priv_size = ALIGN(sizeof(struct rtllib_device),NETDEV_ALIGN) + sizeof_priv; + + ieee->wdev.wiphy = wiphy_new(&rtllib_config_ops, priv_size); + if (!ieee->wdev.wiphy) { + RTLLIB_ERROR("Unable to allocate wiphy.\n"); + goto out_err_new; + } + + rtllib = (struct rtllib_device *)wiphy_priv(ieee->wdev.wiphy); + rtllib->dev = ieee->dev; + + ieee->dev->ieee80211_ptr = &ieee->wdev; + ieee->wdev.iftype = NL80211_IFTYPE_STATION; + + /* Fill-out wiphy structure bits we know... Not enough info + * here to call set_wiphy_dev or set MAC address or channel info + * -- have to do that in ->ndo_init... */ + ieee->wdev.wiphy->privid = rtllib_wiphy_privid; + + ieee->wdev.wiphy->max_scan_ssids = 1; + ieee->wdev.wiphy->max_scan_ie_len = 0; + ieee->wdev.wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); + + return true; + +out_err_new: + wiphy_free(ieee->wdev.wiphy); + return false; +} +#endif + +struct net_device *alloc_rtllib(int sizeof_priv) +{ + struct rtllib_device *ieee = NULL; + struct net_device *dev; + int i,err; + + RTLLIB_DEBUG_INFO("Initializing...\n"); + + dev = alloc_etherdev(sizeof(struct rtllib_device) + sizeof_priv); + if (!dev) { + RTLLIB_ERROR("Unable to network device.\n"); + goto failed; + } + ieee = (struct rtllib_device *)netdev_priv_rsl(dev); + memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv); + ieee->dev = dev; + +#ifdef CONFIG_CFG_80211 + if(!rtllib_wdev_alloc(ieee, sizeof_priv)) + goto failed; +#endif + err = rtllib_networks_allocate(ieee); + if (err) { + RTLLIB_ERROR("Unable to allocate beacon storage: %d\n", + err); + goto failed; + } +#ifdef _RTL8192_EXT_PATCH_ + err = rtllib_mesh_networks_allocate(ieee); + if (err) { + RTLLIB_ERROR("Unable to allocate mesh_beacon storage: %d\n", + err); + goto failed; + } +#endif + rtllib_networks_initialize(ieee); + + + /* Default fragmentation threshold is maximum payload size */ + ieee->fts = DEFAULT_FTS; + ieee->scan_age = DEFAULT_MAX_SCAN_AGE; + ieee->open_wep = 1; + + /* 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 */ + + INIT_LIST_HEAD(&ieee->crypt_deinit_list); + _setup_timer(&ieee->crypt_deinit_timer, + rtllib_crypt_deinit_handler, + (unsigned long) ieee); + ieee->rtllib_ap_sec_type = rtllib_ap_sec_type; + + spin_lock_init(&ieee->lock); + spin_lock_init(&ieee->wpax_suitlist_lock); + spin_lock_init(&ieee->bw_spinlock); + spin_lock_init(&ieee->reorder_spinlock); + atomic_set(&(ieee->atm_chnlop), 0); + atomic_set(&(ieee->atm_swbw), 0); + + ieee->bHalfNMode = false; + ieee->wpa_enabled = 0; + ieee->tkip_countermeasures = 0; + ieee->drop_unencrypted = 0; + ieee->privacy_invoked = 0; + ieee->ieee802_1x = 1; + ieee->raw_tx = 0; + ieee->hwsec_active = 0; + +#ifdef _RTL8192_EXT_PATCH_ + for (i=0; icryptlist[i] = (struct rtllib_crypt_data_list*) kmalloc(sizeof(struct rtllib_crypt_data_list), GFP_KERNEL); + if (NULL == ieee->cryptlist[i]) + { + printk("error kmalloc cryptlist\n"); + goto failed; + } + memset(ieee->cryptlist[i], 0, sizeof(struct rtllib_crypt_data_list)); + } + memset(ieee->swmeshcamtable,0,sizeof(SW_CAM_TABLE)*32); +#endif + memset(ieee->swcamtable,0,sizeof(SW_CAM_TABLE)*32); + rtllib_softmac_init(ieee); + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) + ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); +#else + ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kmalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); + memset(ieee->pHTInfo,0,sizeof(RT_HIGH_THROUGHPUT)); +#endif + if (ieee->pHTInfo == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc memory for HTInfo\n"); + return NULL; + } + HTUpdateDefaultSetting(ieee); + HTInitializeHTInfo(ieee); + TSInitialize(ieee); +#if 0 + INIT_WORK_RSL(&ieee->ht_onAssRsp, (void(*)(void*)) HTOnAssocRsp_wq, ieee); +#endif + for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) + INIT_LIST_HEAD(&ieee->ibss_mac_hash[i]); + +#ifdef _RTL8192_EXT_PATCH_ + for (i = 0; i < IEEE_MESH_MAC_HASH_SIZE; i++) + INIT_LIST_HEAD(&ieee->mesh_mac_hash[i]); +#endif + + for (i = 0; i < 17; i++) { + ieee->last_rxseq_num[i] = -1; + ieee->last_rxfrag_num[i] = -1; + ieee->last_packet_time[i] = 0; + } + + rtllib_tkip_null(); + rtllib_wep_null(); + rtllib_ccmp_null(); + + return dev; + + failed: +#ifdef _RTL8192_EXT_PATCH_ + for (i=0; icryptlist[i]==NULL){ + continue; + } + kfree(ieee->cryptlist[i]); + ieee->cryptlist[i] = NULL; + + } +#endif + + if (dev) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)) + free_netdev(dev); +#else + kfree(dev); +#endif + return NULL; +} + + +void free_rtllib(struct net_device *dev) +{ + struct rtllib_device *ieee = (struct rtllib_device *)netdev_priv_rsl(dev); + int i; +#ifdef _RTL8192_EXT_PATCH_ + int j; + struct list_head *p, *q; + struct rtllib_crypt_data *crypt = NULL; +#endif +#if 1 + if (ieee->pHTInfo != NULL) + { + kfree(ieee->pHTInfo); + ieee->pHTInfo = NULL; + } +#endif + rtllib_softmac_free(ieee); + del_timer_sync(&ieee->crypt_deinit_timer); + rtllib_crypt_deinit_entries(ieee, 1); + +#ifdef _RTL8192_EXT_PATCH_ + for (j=0;jcryptlist[j] == NULL) + continue; + for (i = 0; i < WEP_KEYS; i++) { + crypt = ieee->cryptlist[j]->crypt[i]; + + if (crypt) + { + if (crypt->ops) { + crypt->ops->deinit(crypt->priv); + printk("===>%s():j is %d,i is %d\n",__FUNCTION__,j,i); +#ifndef BUILT_IN_RTLLIB +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + module_put(crypt->ops->owner); +#else + __MOD_DEC_USE_COUNT(crypt->ops->owner); +#endif +#endif + } + kfree(crypt); + ieee->cryptlist[j]->crypt[i] = NULL; + } + } + kfree(ieee->cryptlist[j]); + } + for (i = 0; i < WEP_KEYS; i++) { + crypt = ieee->sta_crypt[i]; + if (crypt) + { + if (crypt->ops) { + crypt->ops->deinit(crypt->priv); +#ifndef BUILT_IN_RTLLIB +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + module_put(crypt->ops->owner); +#else + __MOD_DEC_USE_COUNT(crypt->ops->owner); +#endif +#endif + } + kfree(crypt); + } + ieee->sta_crypt[i] = NULL; + } +#else + for (i = 0; i < WEP_KEYS; i++) { + struct rtllib_crypt_data *crypt = ieee->crypt[i]; + if (crypt) { + if (crypt->ops) { + crypt->ops->deinit(crypt->priv); +#ifndef BUILT_IN_RTLLIB +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + module_put(crypt->ops->owner); +#else + __MOD_DEC_USE_COUNT(crypt->ops->owner); +#endif +#endif + } + kfree(crypt); + ieee->crypt[i] = NULL; + } + } +#endif + + rtllib_networks_free(ieee); +#ifdef _RTL8192_EXT_PATCH_ + rtllib_mesh_networks_free(ieee); +#endif +#if 0 + for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) { + list_for_each_safe(p, q, &ieee->ibss_mac_hash[i]) { + kfree(list_entry(p, struct ieee_ibss_seq, list)); + list_del(p); + } + } + +#endif +#ifdef _RTL8192_EXT_PATCH_ + for (i = 0; i < IEEE_MESH_MAC_HASH_SIZE; i++) { + list_for_each_safe(p, q, &ieee->mesh_mac_hash[i]) { + kfree(list_entry(p, struct ieee_mesh_seq, list)); + list_del(p); + } + } +#endif +#if defined (RTL8192S_WAPI_SUPPORT) + if (ieee->WapiSupport) + { + WapiFreeAllStaInfo(ieee); + } +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)) +#ifdef CONFIG_CFG_80211 + wiphy_unregister(ieee->wdev.wiphy); + wiphy_free(ieee->wdev.wiphy); +#endif + free_netdev(dev); +#else + kfree(dev); +#endif +} + +#ifdef CONFIG_RTLLIB_DEBUG + +u32 rtllib_debug_level = 0; +static int debug = \ + RTLLIB_DL_ERR + ; +struct proc_dir_entry *rtllib_proc = NULL; + +static int show_debug_level(char *page, char **start, off_t offset, + int count, int *eof, void *data) +{ + return snprintf(page, count, "0x%08X\n", rtllib_debug_level); +} + +static int store_debug_level(struct file *file, const char *buffer, + unsigned long count, void *data) +{ + char buf[] = "0x00000000"; + unsigned long len = min((unsigned long)sizeof(buf) - 1, count); + char *p = (char *)buf; + unsigned long val; + + if (copy_from_user(buf, buffer, len)) + return count; + buf[len] = 0; + if (p[1] == 'x' || p[1] == 'X' || p[0] == 'x' || p[0] == 'X') { + p++; + if (p[0] == 'x' || p[0] == 'X') + p++; + val = simple_strtoul(p, &p, 16); + } else + val = simple_strtoul(p, &p, 10); + if (p == buf) + printk(KERN_INFO DRV_NAME + ": %s is not in hex or decimal form.\n", buf); + else + rtllib_debug_level = val; + + return strnlen(buf, count); +} + +int __init rtllib_init(void) +{ +#ifdef CONFIG_RTLLIB_DEBUG + struct proc_dir_entry *e; + + rtllib_debug_level = debug; +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + rtllib_proc = create_proc_entry(DRV_NAME, S_IFDIR, proc_net); +#else + rtllib_proc = create_proc_entry(DRV_NAME, S_IFDIR, init_net.proc_net); +#endif + if (rtllib_proc == NULL) { + RTLLIB_ERROR("Unable to create " DRV_NAME + " proc directory\n"); + return -EIO; + } + e = create_proc_entry("debug_level", S_IFREG | S_IRUGO | S_IWUSR, + rtllib_proc); + if (!e) { +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + remove_proc_entry(DRV_NAME, proc_net); +#else + remove_proc_entry(DRV_NAME, init_net.proc_net); +#endif + rtllib_proc = NULL; + return -EIO; + } + e->read_proc = show_debug_level; + e->write_proc = store_debug_level; + e->data = NULL; +#endif + + return 0; +} + +void __exit rtllib_exit(void) +{ +#ifdef CONFIG_RTLLIB_DEBUG + if (rtllib_proc) { + remove_proc_entry("debug_level", rtllib_proc); +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + remove_proc_entry(DRV_NAME, proc_net); +#else + remove_proc_entry(DRV_NAME, init_net.proc_net); +#endif + rtllib_proc = NULL; + } +#endif +} + +#ifndef BUILT_IN_RTLLIB +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) +#include +module_param(debug, int, 0444); +MODULE_PARM_DESC(debug, "debug output mask"); + + +module_exit(rtllib_exit); +module_init(rtllib_init); +#endif + +EXPORT_SYMBOL_RSL(alloc_rtllib); +EXPORT_SYMBOL_RSL(free_rtllib); +EXPORT_SYMBOL_RSL(rtllib_debug_level); +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtl819x_BAProc.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtl819x_BAProc.c @@ -0,0 +1,669 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "rtllib.h" +#include "rtl819x_BA.h" +#ifdef RTK_DMP_PLATFORM +#include +#endif + +void ActivateBAEntry(struct rtllib_device* ieee, PBA_RECORD pBA, u16 Time) +{ + pBA->bValid = true; + if(Time != 0) + mod_timer(&pBA->Timer, jiffies + MSECS(Time)); +} + +void DeActivateBAEntry( struct rtllib_device* ieee, PBA_RECORD pBA) +{ + pBA->bValid = false; + del_timer_sync(&pBA->Timer); +} +u8 TxTsDeleteBA( struct rtllib_device* ieee, PTX_TS_RECORD pTxTs) +{ + PBA_RECORD pAdmittedBa = &pTxTs->TxAdmittedBARecord; + PBA_RECORD pPendingBa = &pTxTs->TxPendingBARecord; + u8 bSendDELBA = false; + + if(pPendingBa->bValid) + { + DeActivateBAEntry(ieee, pPendingBa); + bSendDELBA = true; + } + + if(pAdmittedBa->bValid) + { + DeActivateBAEntry(ieee, pAdmittedBa); + bSendDELBA = true; + } + + return bSendDELBA; +} + +u8 RxTsDeleteBA( struct rtllib_device* ieee, PRX_TS_RECORD pRxTs) +{ + PBA_RECORD pBa = &pRxTs->RxAdmittedBARecord; + u8 bSendDELBA = false; + + if(pBa->bValid) + { + DeActivateBAEntry(ieee, pBa); + bSendDELBA = true; + } + + return bSendDELBA; +} + +void ResetBaEntry( PBA_RECORD pBA) +{ + pBA->bValid = false; + pBA->BaParamSet.shortData = 0; + pBA->BaTimeoutValue = 0; + pBA->DialogToken = 0; + pBA->BaStartSeqCtrl.ShortData = 0; +} +static struct sk_buff* rtllib_ADDBA(struct rtllib_device* ieee, u8* Dst, PBA_RECORD pBA, u16 StatusCode, u8 type) +{ + struct sk_buff *skb = NULL; + struct rtllib_hdr_3addr* BAReq = NULL; + u8* tag = NULL; + u16 tmp = 0; + u16 len = ieee->tx_headroom + 9; + RTLLIB_DEBUG(RTLLIB_DL_TRACE | RTLLIB_DL_BA, "========>%s(), frame(%d) sentd to:"MAC_FMT", ieee->dev:%p\n", __FUNCTION__, type, MAC_ARG(Dst), ieee->dev); + if (pBA == NULL||ieee == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "pBA(%p) is NULL or ieee(%p) is NULL\n", pBA, ieee); + return NULL; + } +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr) + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr)); +#endif + if (skb == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc skb for ADDBA_REQ\n"); + return NULL; + } + + memset(skb->data, 0, sizeof( struct rtllib_hdr_3addr)); + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + + skb_reserve(skb, ieee->tx_headroom); + + BAReq = ( struct rtllib_hdr_3addr *) skb_put(skb,sizeof( struct rtllib_hdr_3addr)); + + memcpy(BAReq->addr1, Dst, ETH_ALEN); + memcpy(BAReq->addr2, ieee->dev->dev_addr, ETH_ALEN); + +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0) && ieee->ext_patch_rtllib_is_mesh && ieee->ext_patch_rtllib_is_mesh(ieee, Dst)){ +#ifdef COMPATIBLE_WITH_RALINK_MESH + memcpy(BAReq->addr3, Dst, ETH_ALEN); +#else + memcpy(BAReq->addr3, ieee->current_mesh_network.bssid, ETH_ALEN); +#endif + } + else + memcpy(BAReq->addr3, ieee->current_network.bssid, ETH_ALEN); +#else + memcpy(BAReq->addr3, ieee->current_network.bssid, ETH_ALEN); +#endif + BAReq->frame_ctl = cpu_to_le16(RTLLIB_STYPE_MANAGE_ACT); + + tag = (u8*)skb_put(skb, 9); + *tag ++= ACT_CAT_BA; + *tag ++= type; + *tag ++= pBA->DialogToken; + + if (ACT_ADDBARSP == type) + { + printk("====>to send ADDBARSP\n"); + tmp = cpu_to_le16(StatusCode); + memcpy(tag, (u8*)&tmp, 2); + tag += 2; + } + tmp = cpu_to_le16(pBA->BaParamSet.shortData); + memcpy(tag, (u8*)&tmp, 2); + tag += 2; + tmp = cpu_to_le16(pBA->BaTimeoutValue); + memcpy(tag, (u8*)&tmp, 2); + tag += 2; + + if (ACT_ADDBAREQ == type) + { + memcpy(tag,(u8*)&(pBA->BaStartSeqCtrl), 2); + tag += 2; + } + + RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len); + return skb; +} + +static struct sk_buff* rtllib_DELBA( + struct rtllib_device* ieee, + u8* dst, + PBA_RECORD pBA, + TR_SELECT TxRxSelect, + u16 ReasonCode + ) +{ + DELBA_PARAM_SET DelbaParamSet; + struct sk_buff *skb = NULL; + struct rtllib_hdr_3addr* Delba = NULL; + u8* tag = NULL; + u16 tmp = 0; + u16 len = 6 + ieee->tx_headroom; + + if (net_ratelimit()) + RTLLIB_DEBUG(RTLLIB_DL_TRACE | RTLLIB_DL_BA, "========>%s(), ReasonCode(%d) sentd to:"MAC_FMT"\n", __FUNCTION__, ReasonCode, MAC_ARG(dst)); + + memset(&DelbaParamSet, 0, 2); + + DelbaParamSet.field.Initiator = (TxRxSelect==TX_DIR)?1:0; + DelbaParamSet.field.TID = pBA->BaParamSet.field.TID; + +#ifdef USB_USE_ALIGNMENT + u32 Tmpaddr=0; + int alignment=0; + skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr) + USB_512B_ALIGNMENT_SIZE); +#else + skb = dev_alloc_skb(len + sizeof( struct rtllib_hdr_3addr)); +#endif + if (skb == NULL) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't alloc skb for ADDBA_REQ\n"); + return NULL; + } + +#ifdef USB_USE_ALIGNMENT + Tmpaddr = (u32)skb->data; + alignment = Tmpaddr & 0x1ff; + skb_reserve(skb,(USB_512B_ALIGNMENT_SIZE - alignment)); +#endif + skb_reserve(skb, ieee->tx_headroom); + + Delba = ( struct rtllib_hdr_3addr *) skb_put(skb,sizeof( struct rtllib_hdr_3addr)); + + memcpy(Delba->addr1, dst, ETH_ALEN); + memcpy(Delba->addr2, ieee->dev->dev_addr, ETH_ALEN); +#ifdef _RTL8192_EXT_PATCH_ + if((ieee->iw_mode == IW_MODE_MESH) && (ieee->only_mesh == 0) && ieee->ext_patch_rtllib_is_mesh && ieee->ext_patch_rtllib_is_mesh(ieee, dst)){ +#ifdef COMPATIBLE_WITH_RALINK_MESH + memcpy(Delba->addr3, dst, ETH_ALEN); +#else + memcpy(Delba->addr3, ieee->current_mesh_network.bssid, ETH_ALEN); +#endif + } + else + memcpy(Delba->addr3, ieee->current_network.bssid, ETH_ALEN); +#else + memcpy(Delba->addr3, ieee->current_network.bssid, ETH_ALEN); +#endif + Delba->frame_ctl = cpu_to_le16(RTLLIB_STYPE_MANAGE_ACT); + + tag = (u8*)skb_put(skb, 6); + + *tag ++= ACT_CAT_BA; + *tag ++= ACT_DELBA; + + tmp = cpu_to_le16(DelbaParamSet.shortData); + memcpy(tag, (u8*)&tmp, 2); + tag += 2; + tmp = cpu_to_le16(ReasonCode); + memcpy(tag, (u8*)&tmp, 2); + tag += 2; + + RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len); + if (net_ratelimit()) + RTLLIB_DEBUG(RTLLIB_DL_TRACE | RTLLIB_DL_BA, "<=====%s()\n", __FUNCTION__); + return skb; +} + +void rtllib_send_ADDBAReq(struct rtllib_device* ieee, u8* dst, PBA_RECORD pBA) +{ + struct sk_buff *skb = NULL; + skb = rtllib_ADDBA(ieee, dst, pBA, 0, ACT_ADDBAREQ); + + if (skb) + { + printk("====>to send ADDBAREQ!!!!!\n"); + softmac_mgmt_xmit(skb, ieee); + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "alloc skb error in function %s()\n", __FUNCTION__); + } + return; +} + +void rtllib_send_ADDBARsp(struct rtllib_device* ieee, u8* dst, PBA_RECORD pBA, u16 StatusCode) +{ + struct sk_buff *skb = NULL; + skb = rtllib_ADDBA(ieee, dst, pBA, StatusCode, ACT_ADDBARSP); + if (skb) + { + softmac_mgmt_xmit(skb, ieee); + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "alloc skb error in function %s()\n", __FUNCTION__); + } + + return; + +} + +void rtllib_send_DELBA(struct rtllib_device* ieee, u8* dst, PBA_RECORD pBA, TR_SELECT TxRxSelect, u16 ReasonCode) +{ + struct sk_buff *skb = NULL; + skb = rtllib_DELBA(ieee, dst, pBA, TxRxSelect, ReasonCode); + if (skb) + { + softmac_mgmt_xmit(skb, ieee); + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "alloc skb error in function %s()\n", __FUNCTION__); + } + return ; +} + +int rtllib_rx_ADDBAReq( struct rtllib_device* ieee, struct sk_buff *skb) +{ + struct rtllib_hdr_3addr* req = NULL; + u16 rc = 0; + u8 * dst = NULL, *pDialogToken = NULL, *tag = NULL; + PBA_RECORD pBA = NULL; + PBA_PARAM_SET pBaParamSet = NULL; + u16* pBaTimeoutVal = NULL; + PSEQUENCE_CONTROL pBaStartSeqCtrl = NULL; + PRX_TS_RECORD pTS = NULL; + + if (skb->len < sizeof( struct rtllib_hdr_3addr) + 9) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, " Invalid skb len in BAREQ(%d / %d)\n",(int)skb->len, (int)(sizeof( struct rtllib_hdr_3addr) + 9)); + return -1; + } + + RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len); + + req = ( struct rtllib_hdr_3addr*) skb->data; + tag = (u8*)req; + dst = (u8*)(&req->addr2[0]); + tag += sizeof( struct rtllib_hdr_3addr); + pDialogToken = tag + 2; + pBaParamSet = (PBA_PARAM_SET)(tag + 3); + pBaTimeoutVal = (u16*)(tag + 5); + pBaStartSeqCtrl = (PSEQUENCE_CONTROL)(req + 7); + + printk("====>rx ADDBAREQ from :"MAC_FMT"\n", MAC_ARG(dst)); + if( +#ifdef _RTL8192_EXT_PATCH_ + (ieee->current_network.qos_data.active == 0 && ieee->current_mesh_network.qos_data.active==0) || +#else + ieee->current_network.qos_data.active == 0 || +#endif + (ieee->pHTInfo->bCurrentHTSupport == false) || + (ieee->pHTInfo->IOTAction & HT_IOT_ACT_REJECT_ADDBA_REQ)) + { + rc = ADDBA_STATUS_REFUSED; + RTLLIB_DEBUG(RTLLIB_DL_ERR, "Failed to reply on ADDBA_REQ as some capability is not ready(%d, %d)\n", ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport); + goto OnADDBAReq_Fail; + } + if( !GetTs( + ieee, + (PTS_COMMON_INFO*)(&pTS), + dst, + (u8)(pBaParamSet->field.TID), + RX_DIR, + true) ) + { + rc = ADDBA_STATUS_REFUSED; + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't get TS in %s()\n", __FUNCTION__); + goto OnADDBAReq_Fail; + } + pBA = &pTS->RxAdmittedBARecord; + + if(pBaParamSet->field.BAPolicy == BA_POLICY_DELAYED) + { + rc = ADDBA_STATUS_INVALID_PARAM; + RTLLIB_DEBUG(RTLLIB_DL_ERR, "BA Policy is not correct in %s()\n", __FUNCTION__); + goto OnADDBAReq_Fail; + } + + + rtllib_FlushRxTsPendingPkts(ieee, pTS); + + DeActivateBAEntry(ieee, pBA); + pBA->DialogToken = *pDialogToken; + pBA->BaParamSet = *pBaParamSet; + pBA->BaTimeoutValue = *pBaTimeoutVal; + pBA->BaStartSeqCtrl = *pBaStartSeqCtrl; + + if (ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev)|| + (ieee->pHTInfo->IOTAction & HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT)) + pBA->BaParamSet.field.BufferSize = 1; + else + pBA->BaParamSet.field.BufferSize = 32; + + ActivateBAEntry(ieee, pBA, 0); + rtllib_send_ADDBARsp(ieee, dst, pBA, ADDBA_STATUS_SUCCESS); + + return 0; + +OnADDBAReq_Fail: + { + BA_RECORD BA; + BA.BaParamSet = *pBaParamSet; + BA.BaTimeoutValue = *pBaTimeoutVal; + BA.DialogToken = *pDialogToken; + BA.BaParamSet.field.BAPolicy = BA_POLICY_IMMEDIATE; + rtllib_send_ADDBARsp(ieee, dst, &BA, rc); + return 0; + } + +} + +int rtllib_rx_ADDBARsp( struct rtllib_device* ieee, struct sk_buff *skb) +{ + struct rtllib_hdr_3addr* rsp = NULL; + PBA_RECORD pPendingBA, pAdmittedBA; + PTX_TS_RECORD pTS = NULL; + u8* dst = NULL, *pDialogToken = NULL, *tag = NULL; + u16* pStatusCode = NULL, *pBaTimeoutVal = NULL; + PBA_PARAM_SET pBaParamSet = NULL; + u16 ReasonCode; + + if (skb->len < sizeof( struct rtllib_hdr_3addr) + 9) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, " Invalid skb len in BARSP(%d / %d)\n", (int)skb->len, (int)(sizeof( struct rtllib_hdr_3addr) + 9)); + return -1; + } + rsp = ( struct rtllib_hdr_3addr*)skb->data; + tag = (u8*)rsp; + dst = (u8*)(&rsp->addr2[0]); + tag += sizeof( struct rtllib_hdr_3addr); + pDialogToken = tag + 2; + pStatusCode = (u16*)(tag + 3); + pBaParamSet = (PBA_PARAM_SET)(tag + 5); + pBaTimeoutVal = (u16*)(tag + 7); + + printk("====>rx ADDBARSP from :"MAC_FMT"\n", MAC_ARG(dst)); + if( +#ifdef _RTL8192_EXT_PATCH_ + (ieee->current_network.qos_data.active == 0 && ieee->current_mesh_network.qos_data.active==0) || +#else + ieee->current_network.qos_data.active == 0 || +#endif + ieee->pHTInfo->bCurrentHTSupport == false || + ieee->pHTInfo->bCurrentAMPDUEnable == false ) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "reject to ADDBA_RSP as some capability is not ready(%d, %d, %d)\n",ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport, ieee->pHTInfo->bCurrentAMPDUEnable); + ReasonCode = DELBA_REASON_UNKNOWN_BA; + goto OnADDBARsp_Reject; + } + + + if (!GetTs( + ieee, + (PTS_COMMON_INFO*)(&pTS), + dst, + (u8)(pBaParamSet->field.TID), + TX_DIR, + false) ) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't get TS in %s()\n", __FUNCTION__); + ReasonCode = DELBA_REASON_UNKNOWN_BA; + goto OnADDBARsp_Reject; + } + + pTS->bAddBaReqInProgress = false; + pPendingBA = &pTS->TxPendingBARecord; + pAdmittedBA = &pTS->TxAdmittedBARecord; + + + if((pAdmittedBA->bValid==true)) + { + RTLLIB_DEBUG(RTLLIB_DL_BA, "OnADDBARsp(): Recv ADDBA Rsp. Drop because already admit it! \n"); + return -1; + } + else if((pPendingBA->bValid == false) ||(*pDialogToken != pPendingBA->DialogToken)) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "OnADDBARsp(): Recv ADDBA Rsp. BA invalid, DELBA! \n"); + ReasonCode = DELBA_REASON_UNKNOWN_BA; + goto OnADDBARsp_Reject; + } + else + { + RTLLIB_DEBUG(RTLLIB_DL_BA, "OnADDBARsp(): Recv ADDBA Rsp. BA is admitted! Status code:%X\n", *pStatusCode); + DeActivateBAEntry(ieee, pPendingBA); + } + + + if(*pStatusCode == ADDBA_STATUS_SUCCESS) + { + if(pBaParamSet->field.BAPolicy == BA_POLICY_DELAYED) + { + pTS->bAddBaReqDelayed = true; + DeActivateBAEntry(ieee, pAdmittedBA); + ReasonCode = DELBA_REASON_END_BA; + goto OnADDBARsp_Reject; + } + + + pAdmittedBA->DialogToken = *pDialogToken; + pAdmittedBA->BaTimeoutValue = *pBaTimeoutVal; + pAdmittedBA->BaStartSeqCtrl = pPendingBA->BaStartSeqCtrl; + pAdmittedBA->BaParamSet = *pBaParamSet; + DeActivateBAEntry(ieee, pAdmittedBA); + ActivateBAEntry(ieee, pAdmittedBA, *pBaTimeoutVal); + } else { + pTS->bAddBaReqDelayed = true; + pTS->bDisable_AddBa = true; + ReasonCode = DELBA_REASON_END_BA; + goto OnADDBARsp_Reject; + } + + return 0; + +OnADDBARsp_Reject: + { + BA_RECORD BA; + BA.BaParamSet = *pBaParamSet; + rtllib_send_DELBA(ieee, dst, &BA, TX_DIR, ReasonCode); + return 0; + } + +} + +int rtllib_rx_DELBA(struct rtllib_device* ieee,struct sk_buff *skb) +{ + struct rtllib_hdr_3addr* delba = NULL; + PDELBA_PARAM_SET pDelBaParamSet = NULL; + u16* pReasonCode = NULL; + u8* dst = NULL; + + if (skb->len < sizeof( struct rtllib_hdr_3addr) + 6) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, " Invalid skb len in DELBA(%d / %d)\n", (int)skb->len, (int)(sizeof( struct rtllib_hdr_3addr) + 6)); + return -1; + } + + if( +#ifdef _RTL8192_EXT_PATCH_ + (ieee->current_network.qos_data.active == 0 && ieee->current_mesh_network.qos_data.active==0) || +#else + ieee->current_network.qos_data.active == 0 || +#endif + ieee->pHTInfo->bCurrentHTSupport == false ) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "received DELBA while QOS or HT is not supported(%d, %d)\n",ieee->current_network.qos_data.active, ieee->pHTInfo->bCurrentHTSupport); + return -1; + } + + RTLLIB_DEBUG_DATA(RTLLIB_DL_DATA|RTLLIB_DL_BA, skb->data, skb->len); + delba = ( struct rtllib_hdr_3addr*)skb->data; + dst = (u8*)(&delba->addr2[0]); + delba += sizeof( struct rtllib_hdr_3addr); + pDelBaParamSet = (PDELBA_PARAM_SET)(delba+2); + pReasonCode = (u16*)(delba+4); + + if(pDelBaParamSet->field.Initiator == 1) + { + PRX_TS_RECORD pRxTs; + + if( !GetTs( + ieee, + (PTS_COMMON_INFO*)&pRxTs, + dst, + (u8)pDelBaParamSet->field.TID, + RX_DIR, + false) ) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't get TS for RXTS in %s().dst:"MAC_FMT" TID:%d\n", __FUNCTION__, MAC_ARG(dst), (u8)pDelBaParamSet->field.TID); + return -1; + } + + RxTsDeleteBA(ieee, pRxTs); + } + else + { + PTX_TS_RECORD pTxTs; + + if(!GetTs( + ieee, + (PTS_COMMON_INFO*)&pTxTs, + dst, + (u8)pDelBaParamSet->field.TID, + TX_DIR, + false) ) + { + RTLLIB_DEBUG(RTLLIB_DL_ERR, "can't get TS for TXTS in %s()\n", __FUNCTION__); + return -1; + } + + pTxTs->bUsingBa = false; + pTxTs->bAddBaReqInProgress = false; + pTxTs->bAddBaReqDelayed = false; + del_timer_sync(&pTxTs->TsAddBaTimer); + TxTsDeleteBA(ieee, pTxTs); + } + return 0; +} + +void +TsInitAddBA( + struct rtllib_device* ieee, + PTX_TS_RECORD pTS, + u8 Policy, + u8 bOverwritePending + ) +{ + PBA_RECORD pBA = &pTS->TxPendingBARecord; + + if(pBA->bValid==true && bOverwritePending==false) + return; + + DeActivateBAEntry(ieee, pBA); + + pBA->DialogToken++; + pBA->BaParamSet.field.AMSDU_Support = 0; + pBA->BaParamSet.field.BAPolicy = Policy; + pBA->BaParamSet.field.TID = pTS->TsCommonInfo.TSpec.f.TSInfo.field.ucTSID; + pBA->BaParamSet.field.BufferSize = 32; + pBA->BaTimeoutValue = 0; + pBA->BaStartSeqCtrl.field.SeqNum = (pTS->TxCurSeq + 3) % 4096; + + ActivateBAEntry(ieee, pBA, BA_SETUP_TIMEOUT); + + rtllib_send_ADDBAReq(ieee, pTS->TsCommonInfo.Addr, pBA); +} + +void +TsInitDelBA( struct rtllib_device* ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect) +{ + + if(TxRxSelect == TX_DIR) + { + PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)pTsCommonInfo; + + if(TxTsDeleteBA(ieee, pTxTs)) + rtllib_send_DELBA( + ieee, + pTsCommonInfo->Addr, + (pTxTs->TxAdmittedBARecord.bValid)?(&pTxTs->TxAdmittedBARecord):(&pTxTs->TxPendingBARecord), + TxRxSelect, + DELBA_REASON_END_BA); + } + else if(TxRxSelect == RX_DIR) + { + PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)pTsCommonInfo; + if(RxTsDeleteBA(ieee, pRxTs)) + rtllib_send_DELBA( + ieee, + pTsCommonInfo->Addr, + &pRxTs->RxAdmittedBARecord, + TxRxSelect, + DELBA_REASON_END_BA ); + } +} +void BaSetupTimeOut(unsigned long data) +{ + PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)data; + + pTxTs->bAddBaReqInProgress = false; + pTxTs->bAddBaReqDelayed = true; + pTxTs->TxPendingBARecord.bValid = false; +} + +void TxBaInactTimeout(unsigned long data) +{ + PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)data; + struct rtllib_device *ieee = container_of(pTxTs, struct rtllib_device, TxTsRecord[pTxTs->num]); + TxTsDeleteBA(ieee, pTxTs); + rtllib_send_DELBA( + ieee, + pTxTs->TsCommonInfo.Addr, + &pTxTs->TxAdmittedBARecord, + TX_DIR, + DELBA_REASON_TIMEOUT); +} + +void RxBaInactTimeout(unsigned long data) +{ + PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)data; + struct rtllib_device *ieee = container_of(pRxTs, struct rtllib_device, RxTsRecord[pRxTs->num]); + + RxTsDeleteBA(ieee, pRxTs); + rtllib_send_DELBA( + ieee, + pRxTs->TsCommonInfo.Addr, + &pRxTs->RxAdmittedBARecord, + RX_DIR, + DELBA_REASON_TIMEOUT); + return ; +} + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/rtllib_crypt_tkip.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/rtllib_crypt_tkip.c @@ -0,0 +1,1047 @@ +/* + * Host AP crypt: host-based TKIP encryption implementation for Host AP driver + * + * Copyright (c) 2003-2004, Jouni Malinen + * + * 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. See README and COPYING for + * more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _RTL8192_EXT_PATCH_ +#include +#endif +#include "rtllib.h" +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20)) +#endif + + +#if defined(BUILT_IN_CRYPTO) || (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "rtl_crypto.h" +#else +#include +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) + #include +#else + #include +#endif + +#include + +#ifndef BUILT_IN_RTLLIB +MODULE_AUTHOR("Jouni Malinen"); +MODULE_DESCRIPTION("Host AP crypt: TKIP"); +MODULE_LICENSE("GPL"); +#endif + + +struct rtllib_tkip_data { +#define TKIP_KEY_LEN 32 + u8 key[TKIP_KEY_LEN]; + int key_set; + + u32 tx_iv32; + u16 tx_iv16; + u16 tx_ttak[5]; + int tx_phase1_done; + + u32 rx_iv32; + u16 rx_iv16; + bool initialized; + u16 rx_ttak[5]; + int rx_phase1_done; + u32 rx_iv32_new; + u16 rx_iv16_new; + + u32 dot11RSNAStatsTKIPReplays; + u32 dot11RSNAStatsTKIPICVErrors; + u32 dot11RSNAStatsTKIPLocalMICFailures; + + int key_idx; +#if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) ) + struct crypto_blkcipher *rx_tfm_arc4; + struct crypto_hash *rx_tfm_michael; + struct crypto_blkcipher *tx_tfm_arc4; + struct crypto_hash *tx_tfm_michael; +#else + struct crypto_tfm *tx_tfm_arc4; + struct crypto_tfm *tx_tfm_michael; + struct crypto_tfm *rx_tfm_arc4; + struct crypto_tfm *rx_tfm_michael; +#endif + /* scratch buffers for virt_to_page() (crypto API) */ + u8 rx_hdr[16], tx_hdr[16]; +}; + +static void * rtllib_tkip_init(int key_idx) +{ + struct rtllib_tkip_data *priv; + + priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + if (priv == NULL) + goto fail; + memset(priv, 0, sizeof(*priv)); + priv->key_idx = key_idx; +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + priv->tx_tfm_arc4 = crypto_alloc_tfm("arc4", 0); + if (priv->tx_tfm_arc4 == NULL) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API arc4\n"); + goto fail; + } + + priv->tx_tfm_michael = crypto_alloc_tfm("michael_mic", 0); + if (priv->tx_tfm_michael == NULL) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API michael_mic\n"); + goto fail; + } + + priv->rx_tfm_arc4 = crypto_alloc_tfm("arc4", 0); + if (priv->rx_tfm_arc4 == NULL) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API arc4\n"); + goto fail; + } + + priv->rx_tfm_michael = crypto_alloc_tfm("michael_mic", 0); + if (priv->rx_tfm_michael == NULL) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API michael_mic\n"); + goto fail; + } +#else + priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, + CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->tx_tfm_arc4)) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API arc4\n"); + priv->tx_tfm_arc4 = NULL; + goto fail; + } + + priv->tx_tfm_michael = crypto_alloc_hash("michael_mic", 0, + CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->tx_tfm_michael)) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API michael_mic\n"); + priv->tx_tfm_michael = NULL; + goto fail; + } + + priv->rx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, + CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->rx_tfm_arc4)) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API arc4\n"); + priv->rx_tfm_arc4 = NULL; + goto fail; + } + + priv->rx_tfm_michael = crypto_alloc_hash("michael_mic", 0, + CRYPTO_ALG_ASYNC); + if (IS_ERR(priv->rx_tfm_michael)) { + printk(KERN_DEBUG "rtllib_crypt_tkip: could not allocate " + "crypto API michael_mic\n"); + priv->rx_tfm_michael = NULL; + goto fail; + } +#endif + return priv; + +fail: + if (priv) { +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + if (priv->tx_tfm_michael) + crypto_free_tfm(priv->tx_tfm_michael); + if (priv->tx_tfm_arc4) + crypto_free_tfm(priv->tx_tfm_arc4); + if (priv->rx_tfm_michael) + crypto_free_tfm(priv->rx_tfm_michael); + if (priv->rx_tfm_arc4) + crypto_free_tfm(priv->rx_tfm_arc4); + +#else + if (priv->tx_tfm_michael) + crypto_free_hash(priv->tx_tfm_michael); + if (priv->tx_tfm_arc4) + crypto_free_blkcipher(priv->tx_tfm_arc4); + if (priv->rx_tfm_michael) + crypto_free_hash(priv->rx_tfm_michael); + if (priv->rx_tfm_arc4) + crypto_free_blkcipher(priv->rx_tfm_arc4); +#endif + kfree(priv); + } + + return NULL; +} + + +static void rtllib_tkip_deinit(void *priv) +{ + struct rtllib_tkip_data *_priv = priv; +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + if (_priv->tx_tfm_michael) + crypto_free_tfm(_priv->tx_tfm_michael); + if (_priv->tx_tfm_arc4) + crypto_free_tfm(_priv->tx_tfm_arc4); + if (_priv->rx_tfm_michael) + crypto_free_tfm(_priv->rx_tfm_michael); + if (_priv->rx_tfm_arc4) + crypto_free_tfm(_priv->rx_tfm_arc4); +#else + if (_priv) { + if (_priv->tx_tfm_michael) + crypto_free_hash(_priv->tx_tfm_michael); + if (_priv->tx_tfm_arc4) + crypto_free_blkcipher(_priv->tx_tfm_arc4); + if (_priv->rx_tfm_michael) + crypto_free_hash(_priv->rx_tfm_michael); + if (_priv->rx_tfm_arc4) + crypto_free_blkcipher(_priv->rx_tfm_arc4); + } +#endif + 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) +{ + return le16_to_cpu(*v); +} + + +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, + 0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B, + 0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F, + 0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F, + 0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5, + 0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F, + 0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB, + 0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397, + 0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED, + 0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A, + 0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194, + 0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3, + 0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104, + 0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D, + 0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39, + 0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695, + 0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83, + 0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76, + 0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4, + 0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B, + 0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0, + 0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018, + 0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751, + 0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85, + 0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12, + 0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9, + 0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7, + 0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A, + 0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8, + 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) +{ + int i, j; + + /* Initialize the 80-bit TTAK from TSC (IV32) and TA[0..5] */ + TTAK[0] = Lo16(IV32); + TTAK[1] = Hi16(IV32); + TTAK[2] = Mk16(TA[1], TA[0]); + TTAK[3] = Mk16(TA[3], TA[2]); + TTAK[4] = Mk16(TA[5], TA[4]); + + for (i = 0; i < PHASE1_LOOP_COUNT; i++) { + j = 2 * (i & 1); + TTAK[0] += _S_(TTAK[4] ^ Mk16(TK[1 + j], TK[0 + j])); + TTAK[1] += _S_(TTAK[0] ^ Mk16(TK[5 + j], TK[4 + j])); + TTAK[2] += _S_(TTAK[1] ^ Mk16(TK[9 + j], TK[8 + j])); + TTAK[3] += _S_(TTAK[2] ^ Mk16(TK[13 + j], TK[12 + j])); + TTAK[4] += _S_(TTAK[3] ^ Mk16(TK[1 + j], TK[0 + j])) + i; + } +} + + +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]; + + /* Step 1 - make copy of TTAK and bring in TSC */ + PPK[0] = TTAK[0]; + PPK[1] = TTAK[1]; + PPK[2] = TTAK[2]; + PPK[3] = TTAK[3]; + PPK[4] = TTAK[4]; + 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[2] += RotR1(PPK[1]); + PPK[3] += RotR1(PPK[2]); + PPK[4] += RotR1(PPK[3]); + PPK[5] += RotR1(PPK[4]); + + /* Step 3 - bring in last of TK bits, assign 24-bit WEP IV value + * WEPSeed[0..2] is transmitted as WEP IV */ + 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); + +#ifdef __BIG_ENDIAN + { + int i; + for (i = 0; i < 6; i++) + PPK[i] = (PPK[i] << 8) | (PPK[i] >> 8); + } +#endif +} + + +static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct rtllib_tkip_data *tkey = priv; + int len; + u8 *pos; + struct rtllib_hdr_4addr *hdr; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + + #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) ) + struct blkcipher_desc desc = {.tfm = tkey->tx_tfm_arc4}; + int ret = 0; + #endif + u8 rc4key[16], *icv; + u32 crc; +#ifdef _RTL8192_EXT_PATCH_ + u8 broadcastaddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; + u8 is_broadcast_data = 0; +#endif + struct scatterlist sg; + + if (skb_headroom(skb) < 8 || skb_tailroom(skb) < 4 || + skb->len < hdr_len) + return -1; + + hdr = (struct rtllib_hdr_4addr *) skb->data; +#ifdef _RTL8192_EXT_PATCH_ + if(tcb_desc->badhoc == 0){ + if(memcmp(hdr->addr1,broadcastaddr,6) == 0){ + is_broadcast_data = 1; + tcb_desc->bHwSec = 0; + } + if(is_multicast_ether_addr(hdr->addr1)){ + tcb_desc->bHwSec = 0; + } + } +#endif +#if 0 +printk("@@ tkey\n"); +printk("%x|", ((u32*)tkey->key)[0]); +printk("%x|", ((u32*)tkey->key)[1]); +printk("%x|", ((u32*)tkey->key)[2]); +printk("%x|", ((u32*)tkey->key)[3]); +printk("%x|", ((u32*)tkey->key)[4]); +printk("%x|", ((u32*)tkey->key)[5]); +printk("%x|", ((u32*)tkey->key)[6]); +printk("%x\n", ((u32*)tkey->key)[7]); +#endif + + if (!tcb_desc->bHwSec) + { + if (!tkey->tx_phase1_done) { + tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2, + tkey->tx_iv32); + tkey->tx_phase1_done = 1; + } + tkip_mixing_phase2(rc4key, tkey->key, tkey->tx_ttak, tkey->tx_iv16); + } + else + tkey->tx_phase1_done = 1; + + + len = skb->len - hdr_len; + pos = skb_push(skb, 8); + memmove(pos, pos + 8, hdr_len); + pos += hdr_len; + + if (tcb_desc->bHwSec) + { + *pos++ = Hi8(tkey->tx_iv16); + *pos++ = (Hi8(tkey->tx_iv16) | 0x20) & 0x7F; + *pos++ = Lo8(tkey->tx_iv16); + } + else + { + *pos++ = rc4key[0]; + *pos++ = rc4key[1]; + *pos++ = rc4key[2]; + } + + *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; + *pos++ = (tkey->tx_iv32 >> 24) & 0xff; + + if (!tcb_desc->bHwSec) + { + icv = skb_put(skb, 4); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + crc = ~crc32_le(~0, pos, len); +#else + crc = ~ether_crc_le(len, pos); +#endif + icv[0] = crc; + icv[1] = crc >> 8; + icv[2] = crc >> 16; + icv[3] = crc >> 24; + +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = len + 4; +#else + sg_init_one(&sg, pos, len+4); +#endif + + +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + crypto_cipher_setkey(tkey->tx_tfm_arc4, rc4key, 16); + crypto_cipher_encrypt(tkey->tx_tfm_arc4, &sg, &sg, len + 4); +#else + crypto_blkcipher_setkey(tkey->tx_tfm_arc4, rc4key, 16); + ret= crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); +#endif + + } + + tkey->tx_iv16++; + if (tkey->tx_iv16 == 0) { + tkey->tx_phase1_done = 0; + tkey->tx_iv32++; + } + + if (!tcb_desc->bHwSec) + #if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + return 0; + #else + return ret; + #endif + else + return 0; + + +} + +static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct rtllib_tkip_data *tkey = priv; + u8 keyidx, *pos; + u32 iv32; + u16 iv16; + struct rtllib_hdr_4addr *hdr; + cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); + #if ( !defined(BUILT_IN_CRYPTO) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) || (OPENSUSE_SLED)) ) + struct blkcipher_desc desc = {.tfm = tkey->rx_tfm_arc4}; + #endif + u8 rc4key[16]; + u8 icv[4]; + u32 crc; + struct scatterlist sg; + int plen; + if (skb->len < hdr_len + 8 + 4) + return -1; + + hdr = (struct rtllib_hdr_4addr *) skb->data; + pos = skb->data + hdr_len; + keyidx = pos[3]; + if (!(keyidx & (1 << 5))) { + if (net_ratelimit()) { + printk(KERN_DEBUG "TKIP: received packet without ExtIV" + " flag from " MAC_FMT "\n", MAC_ARG(hdr->addr2)); + } + return -2; + } + keyidx >>= 6; + if (tkey->key_idx != keyidx) { + printk(KERN_DEBUG "TKIP: RX tkey->key_idx=%d frame " + "keyidx=%d priv=%p\n", tkey->key_idx, keyidx, priv); + return -6; + } + if (!tkey->key_set) { + if (net_ratelimit()) { + printk(KERN_DEBUG "TKIP: received packet from " MAC_FMT + " with keyid=%d that does not have a configured" + " key\n", MAC_ARG(hdr->addr2), keyidx); + } + return -3; + } + iv16 = (pos[0] << 8) | pos[2]; + iv32 = pos[4] | (pos[5] << 8) | (pos[6] << 16) | (pos[7] << 24); + pos += 8; + + if (!tcb_desc->bHwSec || (skb->cb[0] == 1)) + { + if ((iv32 < tkey->rx_iv32 || + (iv32 == tkey->rx_iv32 && iv16 <= tkey->rx_iv16))&&tkey->initialized) { + if (net_ratelimit()) { + printk(KERN_DEBUG "TKIP: replay detected: STA=" MAC_FMT + " previous TSC %08x%04x received TSC " + "%08x%04x\n", MAC_ARG(hdr->addr2), + tkey->rx_iv32, tkey->rx_iv16, iv32, iv16); + } + tkey->dot11RSNAStatsTKIPReplays++; + return -4; + } + tkey->initialized = true; + + if (iv32 != tkey->rx_iv32 || !tkey->rx_phase1_done) { + tkip_mixing_phase1(tkey->rx_ttak, tkey->key, hdr->addr2, iv32); + tkey->rx_phase1_done = 1; + } + tkip_mixing_phase2(rc4key, tkey->key, tkey->rx_ttak, iv16); + + plen = skb->len - hdr_len - 12; + +#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = plen + 4; +#else + sg_init_one(&sg, pos, plen+4); +#endif + +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + crypto_cipher_setkey(tkey->rx_tfm_arc4, rc4key, 16); + crypto_cipher_decrypt(tkey->rx_tfm_arc4, &sg, &sg, plen + 4); +#else + crypto_blkcipher_setkey(tkey->rx_tfm_arc4, rc4key, 16); + if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) { + if (net_ratelimit()) { + printk(KERN_DEBUG ": TKIP: failed to decrypt " + "received packet from " MAC_FMT "\n", + MAC_ARG(hdr->addr2)); + } + return -7; + } +#endif + + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + crc = ~crc32_le(~0, pos, plen); + #else + crc = ~ether_crc_le(plen, pos); + #endif + icv[0] = crc; + icv[1] = crc >> 8; + icv[2] = crc >> 16; + icv[3] = crc >> 24; + + if (memcmp(icv, pos + plen, 4) != 0) { + if (iv32 != tkey->rx_iv32) { + /* Previously cached Phase1 result was already lost, so + * it needs to be recalculated for the next packet. */ + tkey->rx_phase1_done = 0; + } + if (net_ratelimit()) { + printk(KERN_DEBUG "TKIP: ICV error detected: STA=" + MAC_FMT "\n", MAC_ARG(hdr->addr2)); + } + tkey->dot11RSNAStatsTKIPICVErrors++; + return -5; + } + + } + + /* Update real counters only after Michael MIC verification has + * completed */ + tkey->rx_iv32_new = iv32; + tkey->rx_iv16_new = iv16; + + /* Remove IV and ICV */ + memmove(skb->data + 8, skb->data, hdr_len); + skb_pull(skb, 8); + skb_trim(skb, skb->len - 4); + +#ifdef JOHN_DUMP +if( ((u16*)skb->data)[0] & 0x4000){ + printk("@@ rx decrypted skb->data"); + int i; + for(i=0;ilen;i++){ + if( (i%24)==0 ) printk("\n"); + printk("%2x ", ((u8*)skb->data)[i]); + } + printk("\n"); +} +#endif /*JOHN_DUMP*/ + return keyidx; +} + + +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) +static int michael_mic(struct crypto_tfm * tfm_michael, u8 *key, u8 *hdr, + u8 *data, size_t data_len, u8 *mic) +{ + struct scatterlist sg[2]; +#if ( !defined(BUILT_IN_CRYPTO) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) ) + struct hash_desc desc; + int ret = 0; +#endif + + if (tfm_michael == NULL){ + printk(KERN_WARNING "michael_mic: tfm_michael == NULL\n"); + return -1; + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + sg[0].page = virt_to_page(hdr); + sg[0].offset = offset_in_page(hdr); + sg[0].length = 16; + + sg[1].page = virt_to_page(data); + sg[1].offset = offset_in_page(data); + sg[1].length = data_len; +#else + sg_init_table(sg, 2); + sg_set_buf(&sg[0], hdr, 16); + sg_set_buf(&sg[1], data, data_len); +#endif + +#if ( defined(BUILT_IN_CRYPTO) || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) ) + crypto_digest_init(tfm_michael); + crypto_digest_setkey(tfm_michael, key, 8); + crypto_digest_update(tfm_michael, sg, 2); + crypto_digest_final(tfm_michael, mic); + return 0; +#else +if (crypto_hash_setkey(tkey->tfm_michael, key, 8)) + return -1; + + desc.tfm = tkey->tfm_michael; + desc.flags = 0; + ret = crypto_hash_digest(&desc, sg, data_len + 16, mic); + return ret; +#endif +} +#else +static int michael_mic(struct crypto_hash *tfm_michael, u8 * key, u8 * hdr, + u8 * data, size_t data_len, u8 * mic) +{ + struct hash_desc desc; + struct scatterlist sg[2]; + + if (tfm_michael == NULL) { + printk(KERN_WARNING "michael_mic: tfm_michael == NULL\n"); + return -1; + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + sg[0].page = virt_to_page(hdr); + sg[0].offset = offset_in_page(hdr); + sg[0].length = 16; + + sg[1].page = virt_to_page(data); + sg[1].offset = offset_in_page(data); + sg[1].length = data_len; +#else + sg_init_table(sg, 2); + sg_set_buf(&sg[0], hdr, 16); + sg_set_buf(&sg[1], data, data_len); +#endif + + if (crypto_hash_setkey(tfm_michael, key, 8)) + return -1; + + desc.tfm = tfm_michael; + desc.flags = 0; + return crypto_hash_digest(&desc, sg, data_len + 16, mic); +} +#endif + + + +static void michael_mic_hdr(struct sk_buff *skb, u8 *hdr) +{ + struct rtllib_hdr_4addr *hdr11; + + hdr11 = (struct rtllib_hdr_4addr *) skb->data; + switch (le16_to_cpu(hdr11->frame_ctl) & + (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) { + case RTLLIB_FCTL_TODS: + memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */ + memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */ + break; + case RTLLIB_FCTL_FROMDS: + memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */ + memcpy(hdr + ETH_ALEN, hdr11->addr3, ETH_ALEN); /* SA */ + break; + case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS: + 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 */ + break; + } + + hdr[12] = 0; /* priority */ + + hdr[13] = hdr[14] = hdr[15] = 0; /* reserved */ +} + + +static int rtllib_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv) +{ + struct rtllib_tkip_data *tkey = priv; + u8 *pos; + struct rtllib_hdr_4addr *hdr; + + hdr = (struct rtllib_hdr_4addr *) skb->data; + + if (skb_tailroom(skb) < 8 || skb->len < hdr_len) { + printk(KERN_DEBUG "Invalid packet for Michael MIC add " + "(tailroom=%d hdr_len=%d skb->len=%d)\n", + skb_tailroom(skb), hdr_len, skb->len); + return -1; + } + + michael_mic_hdr(skb, tkey->tx_hdr); + + if(RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_ctl))) { + tkey->tx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07; + } + pos = skb_put(skb, 8); +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr, + skb->data + hdr_len, skb->len - 8 - hdr_len, pos)) +#else + if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr, + skb->data + hdr_len, skb->len - 8 - hdr_len, pos)) +#endif + return -1; + + return 0; +} + + +#if WIRELESS_EXT >= 18 +static void rtllib_michael_mic_failure(struct net_device *dev, + struct rtllib_hdr_4addr *hdr, + int keyidx) +{ + union iwreq_data wrqu; + struct iw_michaelmicfailure ev; + + /* TODO: needed parameters: count, keyid, key type, TSC */ + memset(&ev, 0, sizeof(ev)); + ev.flags = keyidx & IW_MICFAILURE_KEY_ID; + if (hdr->addr1[0] & 0x01) + ev.flags |= IW_MICFAILURE_GROUP; + else + ev.flags |= IW_MICFAILURE_PAIRWISE; + ev.src_addr.sa_family = ARPHRD_ETHER; + 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); +} +#elif WIRELESS_EXT >= 15 +static void rtllib_michael_mic_failure(struct net_device *dev, + struct rtllib_hdr_4addr *hdr, + int keyidx) +{ + union iwreq_data wrqu; + char buf[128]; + + /* TODO: needed parameters: count, keyid, key type, TSC */ + sprintf(buf, "MLME-MICHAELMICFAILURE.indication(keyid=%d %scast addr=" + MAC_FMT ")", keyidx, hdr->addr1[0] & 0x01 ? "broad" : "uni", + MAC_ARG(hdr->addr2)); + memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = strlen(buf); + wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf); +} +#else /* WIRELESS_EXT >= 15 */ +static inline void rtllib_michael_mic_failure(struct net_device *dev, + struct rtllib_hdr_4addr *hdr, + int keyidx) +{ +} +#endif /* WIRELESS_EXT >= 15 */ + +static int rtllib_michael_mic_verify(struct sk_buff *skb, int keyidx, + int hdr_len, void *priv, struct rtllib_device* ieee) +{ + struct rtllib_tkip_data *tkey = priv; + u8 mic[8]; + struct rtllib_hdr_4addr *hdr; + + hdr = (struct rtllib_hdr_4addr *) skb->data; + + if (!tkey->key_set) + return -1; + + michael_mic_hdr(skb, tkey->rx_hdr); + if(RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_ctl))) { + tkey->rx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07; + } + +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr, + skb->data + hdr_len, skb->len - 8 - hdr_len, mic)) +#else + if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr, + skb->data + hdr_len, skb->len - 8 - hdr_len, mic)) +#endif + return -1; + + if ((memcmp(mic, skb->data + skb->len - 8, 8) != 0)||(ieee->force_mic_error)) { + struct rtllib_hdr_4addr *hdr; + hdr = (struct rtllib_hdr_4addr *) 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), + keyidx); + printk("%d, force_mic_error = %d\n", (memcmp(mic, skb->data + skb->len - 8, 8) != 0),\ + ieee->force_mic_error); + if (skb->dev) { + printk("skb->dev != NULL\n"); + rtllib_michael_mic_failure(skb->dev, hdr, keyidx); + } + tkey->dot11RSNAStatsTKIPLocalMICFailures++; + ieee->force_mic_error = false; + return -1; + } + + /* Update TSC counters for RX now that the packet verification has + * completed. */ + tkey->rx_iv32 = tkey->rx_iv32_new; + tkey->rx_iv16 = tkey->rx_iv16_new; + + skb_trim(skb, skb->len - 8); + + return 0; +} + + +static int rtllib_tkip_set_key(void *key, int len, u8 *seq, void *priv) +{ + struct rtllib_tkip_data *tkey = priv; + int keyidx; +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + struct crypto_tfm *tfm = tkey->tx_tfm_michael; + struct crypto_tfm *tfm2 = tkey->tx_tfm_arc4; + struct crypto_tfm *tfm3 = tkey->rx_tfm_michael; + struct crypto_tfm *tfm4 = tkey->rx_tfm_arc4; +#else + struct crypto_hash *tfm = tkey->tx_tfm_michael; + struct crypto_blkcipher *tfm2 = tkey->tx_tfm_arc4; + struct crypto_hash *tfm3 = tkey->rx_tfm_michael; + struct crypto_blkcipher *tfm4 = tkey->rx_tfm_arc4; +#endif + + keyidx = tkey->key_idx; + memset(tkey, 0, sizeof(*tkey)); + tkey->key_idx = keyidx; +#if ( defined(BUILT_IN_CRYPTO) || ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) ) + tkey->tx_tfm_michael = tfm; + tkey->tx_tfm_arc4 = tfm2; + tkey->rx_tfm_michael = tfm3; + tkey->rx_tfm_arc4 = tfm4; +#else + tkey->tx_tfm_michael = tfm; + tkey->tx_tfm_arc4 = tfm2; + tkey->rx_tfm_michael = tfm3; + tkey->rx_tfm_arc4 = tfm4; +#endif + + 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 */ + if (seq) { + tkey->rx_iv32 = (seq[5] << 24) | (seq[4] << 16) | + (seq[3] << 8) | seq[2]; + tkey->rx_iv16 = (seq[1] << 8) | seq[0]; + } + } else if (len == 0) + tkey->key_set = 0; + else + return -1; + + return 0; +} + + +static int rtllib_tkip_get_key(void *key, int len, u8 *seq, void *priv) +{ + struct rtllib_tkip_data *tkey = priv; + + if (len < TKIP_KEY_LEN) + return -1; + + if (!tkey->key_set) + return 0; + memcpy(key, tkey->key, TKIP_KEY_LEN); + + if (seq) { + /* Return the sequence number of the last transmitted frame. */ + u16 iv16 = tkey->tx_iv16; + u32 iv32 = tkey->tx_iv32; + if (iv16 == 0) + iv32--; + iv16--; + seq[0] = tkey->tx_iv16; + seq[1] = tkey->tx_iv16 >> 8; + seq[2] = tkey->tx_iv32; + seq[3] = tkey->tx_iv32 >> 8; + seq[4] = tkey->tx_iv32 >> 16; + seq[5] = tkey->tx_iv32 >> 24; + } + + return TKIP_KEY_LEN; +} + + +static char * rtllib_tkip_print_stats(char *p, void *priv) +{ + struct rtllib_tkip_data *tkip = priv; + p += sprintf(p, "key[%d] alg=TKIP key_set=%d " + "tx_pn=%02x%02x%02x%02x%02x%02x " + "rx_pn=%02x%02x%02x%02x%02x%02x " + "replays=%d icv_errors=%d local_mic_failures=%d\n", + tkip->key_idx, tkip->key_set, + (tkip->tx_iv32 >> 24) & 0xff, + (tkip->tx_iv32 >> 16) & 0xff, + (tkip->tx_iv32 >> 8) & 0xff, + tkip->tx_iv32 & 0xff, + (tkip->tx_iv16 >> 8) & 0xff, + tkip->tx_iv16 & 0xff, + (tkip->rx_iv32 >> 24) & 0xff, + (tkip->rx_iv32 >> 16) & 0xff, + (tkip->rx_iv32 >> 8) & 0xff, + tkip->rx_iv32 & 0xff, + (tkip->rx_iv16 >> 8) & 0xff, + tkip->rx_iv16 & 0xff, + tkip->dot11RSNAStatsTKIPReplays, + tkip->dot11RSNAStatsTKIPICVErrors, + tkip->dot11RSNAStatsTKIPLocalMICFailures); + return p; +} + + +static struct rtllib_crypto_ops rtllib_crypt_tkip = { + .name = "TKIP", + .init = rtllib_tkip_init, + .deinit = rtllib_tkip_deinit, + .encrypt_mpdu = rtllib_tkip_encrypt, + .decrypt_mpdu = rtllib_tkip_decrypt, + .encrypt_msdu = rtllib_michael_mic_add, + .decrypt_msdu = rtllib_michael_mic_verify, + .set_key = rtllib_tkip_set_key, + .get_key = rtllib_tkip_get_key, + .print_stats = rtllib_tkip_print_stats, + .extra_prefix_len = 4 + 4, /* IV + ExtIV */ + .extra_postfix_len = 8 + 4, /* MIC + ICV */ + .owner = THIS_MODULE, +}; + + +int __init rtllib_crypto_tkip_init(void) +{ + return rtllib_register_crypto_ops(&rtllib_crypt_tkip); +} + + +void __exit rtllib_crypto_tkip_exit(void) +{ + rtllib_unregister_crypto_ops(&rtllib_crypt_tkip); +} + +void rtllib_tkip_null(void) +{ + return; +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_tkip_null); + +module_init(rtllib_crypto_tkip_init); +module_exit(rtllib_crypto_tkip_exit); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/Makefile +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/Makefile @@ -0,0 +1,214 @@ +NIC_SELECT = RTL8192SE + +KVER := $(shell uname -r) +MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/$(NIC_SELECT) + +CC = gcc +ifneq ($(shell uname -r|cut -d. -f1,2), 2.4) +EXTRA_CFLAGS += -I$(TOPDIR)/drivers/net/wireless +EXTRA_CFLAGS += -O2 + +#it will fail to compile in suse linux enterprise 10 sp2. This flag is to solve this problem. +ifeq ($(shell uname -r | cut -d. -f1,2,3,4), 2.6.16.60-0) +EXTRA_CFLAGS += -DOPENSUSE_SLED +endif +ifeq ($(NIC_SELECT), RTL8192SE) + EXTRA_CFLAGS += -DRTL8192S_DISABLE_FW_DM=0 + EXTRA_CFLAGS += -DRTL8192SE + EXTRA_CFLAGS += -DENABLE_IPS + EXTRA_CFLAGS += -DENABLE_LPS +endif +ifeq ($(NIC_SELECT), RTL8192SU) + EXTRA_CFLAGS += -DRTL8192S_DISABLE_FW_DM=0 + EXTRA_CFLAGS += -DRTL8192SU + EXTRA_CFLAGS += -DENABLE_IPS + EXTRA_CFLAGS += -DENABLE_LPS + EXTRA_CFLAGS += -DUSB_RX_AGGREGATION_SUPPORT + EXTRA_CFLAGS += -DTCP_CSUM_OFFLOAD_RX +endif +ifeq ($(NIC_SELECT), RTL8190P) + EXTRA_CFLAGS += -DRTL8190P +endif +ifeq ($(NIC_SELECT), RTL8192E) + EXTRA_CFLAGS += -DRTL8192E + EXTRA_CFLAGS += -DENABLE_IPS + EXTRA_CFLAGS += -DENABLE_LPS +endif +ifeq ($(NIC_SELECT),RTL8192U) +EXTRA_CFLAGS += -DRTL8192U +#EXTRA_CFLAGS += -DENABLE_AMSDU +EXTRA_CFLAGS += -DUSB_TX_DRIVER_AGGREGATION_ENABLE +EXTRA_CFLAGS += -DUSB_RX_AGGREGATION_SUPPORT + +# For RTK DMP platform +#EXTRA_CFLAGS += -DRTK_DMP_PLATFORM +#EXTRA_CFLAGS += -DWIFI_TEST + +endif +ifeq ($(NIC_SELECT), RTL8191SE_MESH) +AUTHTYPE=SAE +#AUTHTYPE=OPEN +EXTRA_CFLAGS += -DRTL8192SE \ + -DRTL8192S_DISABLE_FW_DM=0 \ + -D_RTL8192_EXT_PATCH_\ + -DENABLE_IPS \ + -DENABLE_LPS \ + -DCUSTOMER_ID_INTEL_CMPC +ifeq ($(AUTHTYPE),SAE) +EXTRA_CFLAGS += -DMESH_ABBR_HANDSHK_SUPPORT\ + -DMESH_ATH_2 +endif +endif +#EXTRA_CFLAGS += -DJOHN_NOCPY +EXTRA_CFLAGS += -DTHOMAS_TURBO +#flags to enable or disble 80211D feature +EXTRA_CFLAGS += -DENABLE_DOT11D +rtllib-rsl-objs := rtllib_rx.o \ + rtllib_softmac.o \ + rtllib_tx.o \ + rtllib_wx.o \ + rtllib_module.o \ + rtllib_softmac_wx.o\ + rtl819x_HTProc.o\ + rtl819x_TSProc.o\ + rtl819x_BAProc.o\ + dot11d.o + +rtllib_crypt-rsl-objs := rtllib_crypt.o +rtllib_crypt_tkip-rsl-objs := rtllib_crypt_tkip.o +rtllib_crypt_ccmp-rsl-objs := rtllib_crypt_ccmp.o +rtllib_crypt_wep-rsl-objs := rtllib_crypt_wep.o + +obj-m +=rtllib-rsl.o +obj-m +=rtllib_crypt-rsl.o +obj-m +=rtllib_crypt_wep-rsl.o +obj-m +=rtllib_crypt_tkip-rsl.o +obj-m +=rtllib_crypt_ccmp-rsl.o + +KSRC := /lib/modules/$(KVER)/build +INSTALL_PREFIX := + +all: modules + +modules: + $(MAKE) -C $(KSRC) M=$(PWD) CC=$(CC) modules + +install: modules + rm -fr $(MODDESTDIR) + mkdir -p $(MODDESTDIR) + @install -p -m 644 rtllib_crypt-rsl.ko $(MODDESTDIR) + @install -p -m 644 rtllib_crypt_wep-rsl.ko $(MODDESTDIR) + @install -p -m 644 rtllib_crypt_tkip-rsl.ko $(MODDESTDIR) + @install -p -m 644 rtllib_crypt_ccmp-rsl.ko $(MODDESTDIR) + @install -p -m 644 rtllib-rsl.ko $(MODDESTDIR) + depmod -a +uninstall: + rm -fr $(MODDESTDIR) + depmod -a + +else +LD := ld +KSRC := /lib/modules/$(KVER)/build +CONFIG_FILE := $(KSRC)/include/linux/autoconf.h + +CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall +CFLAGS += -I$(KSRC)/include -I. +#Kernel 2.4.31 +CFLAGS += -DMODVERSIONS -DEXPORT_SYMTAB -include $(KSRC)/include/linux/modversions.h +#Kernel 2.4.20 +#CFLAGS += -D__NO_VERSION__ -DEXPORT_SYMTAB +CFLAGS += -DENABLE_DOT11D +CFLAGS += -DTHOMAS_TURBO + +ifeq ($(NIC_SELECT),RTL8192U) +CFLAGS += -DRTL8192U +#EXTRA_CFLAGS += -DENABLE_AMSDU +EXTRA_CFLAGS += -DUSB_TX_DRIVER_AGGREGATION_ENABLE +EXTRA_CFLAGS += -DUSB_RX_AGGREGATION_SUPPORT +endif +ifeq ($(NIC_SELECT),RTL8192E) +CFLAGS += -DRTL8192E +endif +ifeq ($(NIC_SELECT),RTL8190P) +CFLAGS += -DRTL8190P +endif +ifeq ($(NIC_SELECT),RTL8192SE) +CFLAGS += -DRTL8192SE +CFLAGS += -DRTL8192S_DISABLE_FW_DM=0 +endif +ifeq ($(NIC_SELECT), RTL8191SE_MESH) +AUTHTYPE=SAE +#AUTHTYPE=OPEN +CFLAGS += -DRTL8192SE +CFLAGS += -DRTL8192S_DISABLE_FW_DM=0 +CFLAGS += -D_RTL8192_EXT_PATCH_ +ifeq ($(AUTHTYPE),SAE) +CFLAGS += -DMESH_ABBR_HANDSHK_SUPPORT\ +CFLAGS += -DMESH_ATH_2 +endif +endif + +SMP := $(shell $(CC) $(MODCFLAGS) -E -dM $(CONFIG_FILE) | \ + grep CONFIG_SMP | awk '{print $$3}') +ifneq ($(SMP),1) + SMP := 0 +endif +ifeq ($(SMP),1) + CFLAGS += -D__SMP__ +endif + +#CFLAGS += -DJOHN_NOCPY + +OBJS := ${patsubst %.c, %.o, ${wildcard *.c}} +all:${OBJS} rtllib_crypt-rsl.o michael_mic-rsl.o aes-rsl.o rtllib_crypt_wep-rsl.o rtllib_crypt_tkip-rsl.o rtllib_crypt_ccmp-rsl.o crypto-rsl.o rtllib-rsl.o + +rtllib_crypt-rsl.o: rtllib_crypt.o + mv $^ $@ + +michael_mic-rsl.o: michael_mic.o + mv $^ $@ + +aes-rsl.o: aes.o + mv $^ $@ + +rtllib_crypt_wep-rsl.o: rtllib_crypt_wep.o + mv $^ $@ + +rtllib_crypt_tkip-rsl.o: rtllib_crypt_tkip.o + mv $^ $@ + +rtllib_crypt_ccmp-rsl.o: rtllib_crypt_ccmp.o + mv $^ $@ + +crypto-rsl.o: arc4.o api.o autoload.o cipher.o compress.o digest.o scatterwalk.o proc.o + $(LD) -r $^ -o $@ + +rtllib-rsl.o: rtllib_rx.o rtllib_tx.o rtllib_wx.o rtllib_module.o rtllib_softmac_wx.o rtllib_softmac.o rtl819x_HTProc.o rtl819x_TSProc.o rtl819x_BAProc.o dot11d.o + $(LD) -r $^ -o $@ +install: + rm -fr $(MODDESTDIR) + mkdir -p $(MODDESTDIR) + @install -p -m 644 rtllib_crypt-rsl.o $(MODDESTDIR) + @install -p -m 644 crypto-rsl.o $(MODDESTDIR) + @install -p -m 644 michael_mic-rsl.o $(MODDESTDIR) + @install -p -m 644 aes-rsl.o $(MODDESTDIR) + @install -p -m 644 rtllib_crypt_wep-rsl.o $(MODDESTDIR) + @install -p -m 644 rtllib_crypt_tkip-rsl.o $(MODDESTDIR) + @install -p -m 644 rtllib_crypt_ccmp-rsl.o $(MODDESTDIR) + @install -p -m 644 rtllib-rsl.o $(MODDESTDIR) + /sbin/depmod -a ${shell uname -r} + +uninstall: + rm -fr $(MODDESTDIR) + /sbin/depmod -a ${shell uname -r} + +endif + +.PHONY: clean +clean: + rm -fr *.mod.c *.mod *.o .*.cmd *.mod.* *.ko *.o *~ + rm -rf .tmp_versions + rm -rf Module.symvers + rm -fr Module.markers + rm -fr modules.order + rm -fr tags --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/wapi_interface.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/wapi_interface.h @@ -0,0 +1,98 @@ +#ifndef __INC_WAPI_INTERFACE_H +#define __INC_WAPI_INTERFACE_H +#include +#include /* ETH_ALEN */ + +/************************************************************* + * WAPI EVENT QUEUE : * + * Buffer events from driver to application. * + *************************************************************/ +#define WAPI_MAX_BUFF_LEN 2000 +#define WAPI_MAX_QUEUE_LEN 6 + +typedef enum +{ + E_WAPI_OK = 0, + E_WAPI_ITEM_TOO_LARGE = 1, + E_WAPI_QFULL = 2, + E_WAPI_QEMPTY = 3, + E_WAPI_QNULL = 4 +}WAPI_QUEUE_RET_VAL; + +typedef struct _WAPI_QUEUE_NODE +{ + u16 ItemSize; + u8 Item[WAPI_MAX_BUFF_LEN]; +}WAPI_QUEUE_NODE; + +typedef struct _WAPI_QUEUE +{ + int Head; + int Tail; + int NumItem; + int MaxItem; + WAPI_QUEUE_NODE ItemArray[WAPI_MAX_QUEUE_LEN]; + int MaxData; +}WAPI_QUEUE; + +typedef enum{ + WAPI_EVENT_RCV_PREAUTHENTICATE = 1, + WAPI_EVENT_RCV_STAKEY_REQUEST = 2, + WAPI_EVENT_RCV_AUTHENTICATE_ACTIVE = 3, + WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_REQUEST = 4, + WAPI_EVENT_RCV_ACCESS_AUTHENTICATE_RESPONSE = 5, + WAPI_EVENT_RCV_CERTIFICATE_AUTHENTICATE_REQUEST = 6, + WAPI_EVENT_RCV_CERTIFICATE_AUTHENTICATE_RESPONSE = 7, + WAPI_EVENT_RCV_USK_REQUEST = 8, + WAPI_EVENT_RCV_USK_RESPONSE = 9, + WAPI_EVENT_RCV_USK_CONFIRM = 10, + WAPI_EVENT_RCV_MSK_NOTIFICATION = 11, + WAPI_EVENT_RCV_MSK_RESPONSE = 12, + WAPI_EVENT_AE_UPDATE_BK = 13, + WAPI_EVENT_AE_UPDATE_USK = 14, + WAPI_EVENT_AE_UPDATE_MSK = 15, + WAPI_EVENT_ASUE_UPDATE_BK = 16, + WAPI_EVENT_ASUE_UPDATE_USK = 17, + WAPI_EVENT_FIRST_AUTHENTICATOR = 18, + WAPI_EVENT_CONNECT = 19, + WAPI_EVENT_DISCONNECT = 20, + WAPI_EVENT_MAX_NUM = 21 +} WAPI_EVENT_ID; + +typedef struct _WAPI_EVENT_T{ + u8 EventId; + u8 MACAddr[ETH_ALEN]; + u16 BuffLength; + u8 Buff[0]; +}__attribute__ ((packed))WAPI_EVENT_T; + +#define WAPI_IsEmptyQueue(q) (q->NumItem==0 ? 1:0) +#define WAPI_IsFullQueue(q) (q->NumItem==q->MaxItem? 1:0) +#define WAPI_NumItemQueue(q) q->NumItem + +void WAPI_InitQueue(WAPI_QUEUE *q, int szMaxItem, int szMaxData); +int WAPI_EnQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int itemsize); +int WAPI_DeQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int *itemsize); +void WAPI_PrintQueue(WAPI_QUEUE *q); + +extern int pid_wapi; +extern void notifyWapiApplication(void); +/************************************************************* + * WAPI IOCTL: FROM APPLICATION TO DRIVER * + *************************************************************/ +#define WAPI_CMD_GET_WAPI_SUPPORT 0X8B81 +#define WAPI_CMD_SET_WAPI_ENABLE 0X8B82 +#define WAPI_CMD_SET_WAPI_PSK 0X8B83 +#define WAPI_CMD_SET_KEY 0X8B84 +#define WAPI_CMD_SET_MULTICAST_PN 0X8B85 +#define WAPI_CMD_GET_PN 0X8B86 +#define WAPI_CMD_GET_WAPIIE 0X8B87 +#define WAPI_CMD_SET_SSID 0X8B88 +#define WAPI_CMD_GET_BSSID 0X8B89 +#define WAPI_CMD_SET_IW_MODE 0X8B8b +#define WAPI_CMD_SET_DISASSOCIATE 0X8B8c +#define WAPI_CMD_SAVE_PID 0X8B8d +#define WAPI_CMD_DEQUEUE 0X8B90 + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/crypto_compat.h +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/crypto_compat.h @@ -0,0 +1,88 @@ +/* + * Header file to maintain compatibility among different kernel versions. + * + * Copyright (c) 2004-2006 + * + * 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. See README and COPYING for + * more details. + */ + +#include + +static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes); +} + + +static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm, + struct scatterlist *dst, + struct scatterlist *src, + unsigned int nbytes) +{ + BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); + return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes); +} + +#if 0 +/* + * crypto_free_tfm - Free crypto transform + * @tfm: Transform to free + * + * crypto_free_tfm() frees up the transform and any associated resources, + * then drops the refcount on the associated algorithm. + */ +void crypto_free_tfm(struct crypto_tfm *tfm) +{ + struct crypto_alg *alg; + int size; + + if (unlikely(!tfm)) + return; + + alg = tfm->__crt_alg; + size = sizeof(*tfm) + alg->cra_ctxsize; + + if (alg->cra_exit) + alg->cra_exit(tfm); + crypto_exit_ops(tfm); + crypto_mod_put(alg); + memset(tfm, 0, size); + kfree(tfm); +} + +#endif +#if 1 + struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags) +{ + struct crypto_tfm *tfm = NULL; + int err; + printk("call crypto_alloc_tfm!!!\n"); + do { + struct crypto_alg *alg; + + alg = crypto_alg_mod_lookup(name, 0, CRYPTO_ALG_ASYNC); + err = PTR_ERR(alg); + if (IS_ERR(alg)) + continue; + + tfm = __crypto_alloc_tfm(alg, flags); + err = 0; + if (IS_ERR(tfm)) { + crypto_mod_put(alg); + err = PTR_ERR(tfm); + tfm = NULL; + } + } while (err == -EAGAIN && !signal_pending(current)); + + return tfm; +} +#endif + + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/wapi_interface.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/wapi_interface.c @@ -0,0 +1,151 @@ +#if defined (RTL8192S_WAPI_SUPPORT) + +#include "wapi.h" +#include "wapi_interface.h" +#include "rtllib.h" + + +/************************************************************* + * WAPI EVENT QUEUE : * + * Buffer events from driver to application. * + *************************************************************/ +void WAPI_InitQueue(WAPI_QUEUE * q, int szMaxItem, int szMaxData) +{ + RT_ASSERT_RET(q); + + q->Head = 0; + q->Tail = 0; + q->NumItem = 0; + q->MaxItem = szMaxItem; + q->MaxData = szMaxData; +} + +int WAPI_EnQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int itemsize) +{ + unsigned long flags; + + RT_ASSERT_RET_VALUE(plock, (-E_WAPI_QNULL)); + RT_ASSERT_RET_VALUE(q, (-E_WAPI_QNULL)); + RT_ASSERT_RET_VALUE(item, (-E_WAPI_QNULL)); + + if(WAPI_IsFullQueue(q)) + return -E_WAPI_QFULL; + if(itemsize > q->MaxData) + return -E_WAPI_ITEM_TOO_LARGE; + + spin_lock_irqsave(plock, flags); + + q->ItemArray[q->Tail].ItemSize = itemsize; + memset(q->ItemArray[q->Tail].Item, 0, sizeof(q->ItemArray[q->Tail].Item)); + memcpy(q->ItemArray[q->Tail].Item, item, itemsize); + q->NumItem++; + if((q->Tail+1) == q->MaxItem) + q->Tail = 0; + else + q->Tail++; + + spin_unlock_irqrestore(plock, flags); + + return E_WAPI_OK; +} + + +int WAPI_DeQueue(spinlock_t *plock, WAPI_QUEUE *q, u8 *item, int *itemsize) +{ + unsigned long flags; + + RT_ASSERT_RET_VALUE(plock, (-E_WAPI_QNULL)); + RT_ASSERT_RET_VALUE(q, (-E_WAPI_QNULL)); + RT_ASSERT_RET_VALUE(item, (-E_WAPI_QNULL)); + + if(WAPI_IsEmptyQueue(q)) + return -E_WAPI_QEMPTY; + + spin_lock_irqsave(plock, flags); + + memcpy(item, q->ItemArray[q->Head].Item, q->ItemArray[q->Head].ItemSize); + *itemsize = q->ItemArray[q->Head].ItemSize; + q->NumItem--; + if((q->Head+1) == q->MaxItem) + q->Head = 0; + else + q->Head++; + + spin_unlock_irqrestore(plock, flags); + + return E_WAPI_OK; +} + +void WAPI_PrintQueue(WAPI_QUEUE *q) +{ + int i, j, index; + + RT_ASSERT_RET(q); + + printk("\n/-------------------------------------------------\n"); + printk("[DOT11_PrintQueue]: MaxItem = %d, NumItem = %d, Head = %d, Tail = %d\n", q->MaxItem, q->NumItem, q->Head, q->Tail); + for(i=0; iNumItem; i++) { + index = (i + q->Head) % q->MaxItem; + printk("Queue[%d].ItemSize = %d ", index, q->ItemArray[index].ItemSize); + for(j=0; jItemArray[index].ItemSize; j++) + printk(" %x", q->ItemArray[index].Item[j]); + printk("\n"); + } + printk("------------------------------------------------/\n"); +} + +int pid_wapi = 0; +void notifyWapiApplication() +{ + struct task_struct *p; + + if(pid_wapi != 0){ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + p = find_task_by_pid(pid_wapi); +#else + p = find_task_by_vpid(pid_wapi); +#endif + if(p){ + send_sig(SIGUSR1,p,0); + }else { + pid_wapi = 0; + } + } +} + +int WAPI_CreateEvent_Send(struct rtllib_device *ieee, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen) +{ + WAPI_EVENT_T *pEvent; + u8 *pbuf = NULL; + int ret = 0; + + WAPI_TRACE(WAPI_API, "==========> %s: EventId=%d\n", __FUNCTION__, EventId); + + RT_ASSERT_RET_VALUE(ieee, -1); + RT_ASSERT_RET_VALUE(MacAddr, -1); + + pbuf= (u8 *)kmalloc((sizeof(WAPI_EVENT_T) + BufLen), GFP_ATOMIC); + if(NULL == pbuf) + return -1; + + pEvent = (WAPI_EVENT_T *)pbuf; + pEvent->EventId = EventId; + memcpy(pEvent->MACAddr, MacAddr, ETH_ALEN); + pEvent->BuffLength = BufLen; + if(BufLen > 0){ + memcpy(pEvent->Buff, Buff, BufLen); + } + + ret = WAPI_EnQueue(&ieee->wapi_queue_lock, ieee->wapi_queue, pbuf, (sizeof(WAPI_EVENT_T) + BufLen)); + notifyWapiApplication(); + + if(pbuf) + kfree(pbuf); + + WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__); + return ret; +} + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/license +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/license @@ -0,0 +1,339 @@ + +"This software program is licensed subject to the GNU General Public License +(GPL). Version 2, June 1991, available at + + * Portions Copyright (C) 2004, Intel Corporation + * + * 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. See README and COPYING for + * more details. + * + */ + +#include +#include +#include +#include +#include +#include + +#include "rtllib.h" + +#ifndef BUILT_IN_RTLLIB +MODULE_AUTHOR("Jouni Malinen"); +MODULE_DESCRIPTION("HostAP crypto"); +MODULE_LICENSE("GPL"); +#endif + +struct rtllib_crypto_alg { + struct list_head list; + struct rtllib_crypto_ops *ops; +}; + + +struct rtllib_crypto { + struct list_head algs; + spinlock_t lock; +}; + +static struct rtllib_crypto *hcrypt; + +void rtllib_crypt_deinit_entries(struct rtllib_device *ieee, + int force) +{ + struct list_head *ptr, *n; + struct rtllib_crypt_data *entry; + + for (ptr = ieee->crypt_deinit_list.next, n = ptr->next; + ptr != &ieee->crypt_deinit_list; ptr = n, n = ptr->next) { + entry = list_entry(ptr, struct rtllib_crypt_data, list); + + if (atomic_read(&entry->refcnt) != 0 && !force) + continue; + + list_del(ptr); + + if (entry->ops) { + entry->ops->deinit(entry->priv); +#ifndef BUILT_IN_RTLLIB +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) + module_put(entry->ops->owner); +#else + __MOD_DEC_USE_COUNT(entry->ops->owner); +#endif +#endif + } + kfree(entry); + } +} + +void rtllib_crypt_deinit_handler(unsigned long data) +{ + struct rtllib_device *ieee = (struct rtllib_device *)data; + unsigned long flags; + + spin_lock_irqsave(&ieee->lock, flags); + rtllib_crypt_deinit_entries(ieee, 0); + if (!list_empty(&ieee->crypt_deinit_list)) { + printk(KERN_DEBUG "%s: entries remaining in delayed crypt " + "deletion list\n", ieee->dev->name); + ieee->crypt_deinit_timer.expires = jiffies + HZ; + add_timer(&ieee->crypt_deinit_timer); + } + spin_unlock_irqrestore(&ieee->lock, flags); + +} + +void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee, + struct rtllib_crypt_data **crypt) +{ + struct rtllib_crypt_data *tmp; + unsigned long flags; + + if (*crypt == NULL) + return; + + tmp = *crypt; + *crypt = NULL; + + /* must not run ops->deinit() while there may be pending encrypt or + * decrypt operations. Use a list of delayed deinits to avoid needing + * locking. */ + + spin_lock_irqsave(&ieee->lock, flags); + list_add(&tmp->list, &ieee->crypt_deinit_list); + if (!timer_pending(&ieee->crypt_deinit_timer)) { + ieee->crypt_deinit_timer.expires = jiffies + HZ; + add_timer(&ieee->crypt_deinit_timer); + } + spin_unlock_irqrestore(&ieee->lock, flags); +} + +int rtllib_register_crypto_ops(struct rtllib_crypto_ops *ops) +{ + unsigned long flags; + struct rtllib_crypto_alg *alg; + + if (hcrypt == NULL) + return -1; + + alg = kmalloc(sizeof(*alg), GFP_KERNEL); + if (alg == NULL) + return -ENOMEM; + + memset(alg, 0, sizeof(*alg)); + alg->ops = ops; + + spin_lock_irqsave(&hcrypt->lock, flags); + list_add(&alg->list, &hcrypt->algs); + spin_unlock_irqrestore(&hcrypt->lock, flags); + + printk(KERN_DEBUG "rtllib_crypt: registered algorithm '%s'\n", + ops->name); + + return 0; +} + +int rtllib_unregister_crypto_ops(struct rtllib_crypto_ops *ops) +{ + unsigned long flags; + struct list_head *ptr; + struct rtllib_crypto_alg *del_alg = NULL; + + if (hcrypt == NULL) + return -1; + + spin_lock_irqsave(&hcrypt->lock, flags); + for (ptr = hcrypt->algs.next; ptr != &hcrypt->algs; ptr = ptr->next) { + struct rtllib_crypto_alg *alg = + (struct rtllib_crypto_alg *) ptr; + if (alg->ops == ops) { + list_del(&alg->list); + del_alg = alg; + break; + } + } + spin_unlock_irqrestore(&hcrypt->lock, flags); + + if (del_alg) { + printk(KERN_DEBUG "rtllib_crypt: unregistered algorithm " + "'%s'\n", ops->name); + kfree(del_alg); + } + + return del_alg ? 0 : -1; +} + + +struct rtllib_crypto_ops * rtllib_get_crypto_ops(const char *name) +{ + unsigned long flags; + struct list_head *ptr; + struct rtllib_crypto_alg *found_alg = NULL; + + if (hcrypt == NULL) + return NULL; + + spin_lock_irqsave(&hcrypt->lock, flags); + for (ptr = hcrypt->algs.next; ptr != &hcrypt->algs; ptr = ptr->next) { + struct rtllib_crypto_alg *alg = + (struct rtllib_crypto_alg *) ptr; + if (strcmp(alg->ops->name, name) == 0) { + found_alg = alg; + break; + } + } + spin_unlock_irqrestore(&hcrypt->lock, flags); + + if (found_alg) + return found_alg->ops; + else + return NULL; +} + + +static void * rtllib_crypt_null_init(int keyidx) { return (void *) 1; } +static void rtllib_crypt_null_deinit(void *priv) {} + +static struct rtllib_crypto_ops rtllib_crypt_null = { + .name = "NULL", + .init = rtllib_crypt_null_init, + .deinit = rtllib_crypt_null_deinit, + .encrypt_mpdu = NULL, + .decrypt_mpdu = NULL, + .encrypt_msdu = NULL, + .decrypt_msdu = NULL, + .set_key = NULL, + .get_key = NULL, + .extra_prefix_len = 0, + .extra_postfix_len = 0, + .owner = THIS_MODULE, +}; + + +int __init rtllib_crypto_init(void) +{ + int ret = -ENOMEM; + + hcrypt = kmalloc(sizeof(*hcrypt), GFP_KERNEL); + if (!hcrypt) + goto out; + + memset(hcrypt, 0, sizeof(*hcrypt)); + INIT_LIST_HEAD(&hcrypt->algs); + spin_lock_init(&hcrypt->lock); + + ret = rtllib_register_crypto_ops(&rtllib_crypt_null); + if (ret < 0) { + kfree(hcrypt); + hcrypt = NULL; + } +out: + return ret; +} + + +void __exit rtllib_crypto_deinit(void) +{ + struct list_head *ptr, *n; + + if (hcrypt == NULL) + return; + + for (ptr = hcrypt->algs.next, n = ptr->next; ptr != &hcrypt->algs; + ptr = n, n = ptr->next) { + struct rtllib_crypto_alg *alg = + (struct rtllib_crypto_alg *) ptr; + list_del(ptr); + printk(KERN_DEBUG "rtllib_crypt: unregistered algorithm " + "'%s' (deinit)\n", alg->ops->name); + kfree(alg); + } + + kfree(hcrypt); +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(rtllib_crypt_deinit_entries); +EXPORT_SYMBOL_RSL(rtllib_crypt_deinit_handler); +EXPORT_SYMBOL_RSL(rtllib_crypt_delayed_deinit); + +EXPORT_SYMBOL_RSL(rtllib_register_crypto_ops); +EXPORT_SYMBOL_RSL(rtllib_unregister_crypto_ops); +EXPORT_SYMBOL_RSL(rtllib_get_crypto_ops); + +module_init(rtllib_crypto_init); +module_exit(rtllib_crypto_deinit); +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtllib/dot11d.c +++ linux-2.6.32/ubuntu/rtl8192se/rtllib/dot11d.c @@ -0,0 +1,261 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifdef ENABLE_DOT11D +#include "dot11d.h" + +typedef struct _CHANNEL_LIST +{ + u8 Channel[32]; + u8 Len; +}CHANNEL_LIST, *PCHANNEL_LIST; + +static CHANNEL_LIST ChannelPlan[] = { + {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,149,153,157,161,165},24}, + {{1,2,3,4,5,6,7,8,9,10,11},11}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13},13}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13},13}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13},13}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64},22}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13},13}, + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21} +}; + +void Dot11d_Init(struct rtllib_device *ieee) +{ + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee); +#ifdef CONFIG_CRDA + ieee->bGlobalDomain = true; + pDot11dInfo->bEnabled = true; +#else + pDot11dInfo->bEnabled = false; +#endif + + pDot11dInfo->State = DOT11D_STATE_NONE; + pDot11dInfo->CountryIeLen = 0; + memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1); + memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1); + RESET_CIE_WATCHDOG(ieee); + +} + +void Dot11d_Channelmap(u8 channel_plan, struct rtllib_device* ieee) +{ + int i, max_chan = 14, min_chan = 1; + + ieee->bGlobalDomain = false; + + if (ChannelPlan[channel_plan].Len != 0) { + memset(GET_DOT11D_INFO(ieee)->channel_map, 0, sizeof(GET_DOT11D_INFO(ieee)->channel_map)); + for (i = 0; i < ChannelPlan[channel_plan].Len; i++) { + if (ChannelPlan[channel_plan].Channel[i] < min_chan || + ChannelPlan[channel_plan].Channel[i] > max_chan) + break; + GET_DOT11D_INFO(ieee)->channel_map[ChannelPlan[channel_plan].Channel[i]] = 1; + } + } + + switch (channel_plan) { + case COUNTRY_CODE_GLOBAL_DOMAIN: + ieee->bGlobalDomain = true; + for (i = 12; i <= 14; i++) { + GET_DOT11D_INFO(ieee)->channel_map[i] = 2; + } + ieee->IbssStartChnl= 10; + ieee->ibss_maxjoin_chal = 11; + break; + + case COUNTRY_CODE_WORLD_WIDE_13: + for (i = 12; i <= 13; i++) { + GET_DOT11D_INFO(ieee)->channel_map[i] = 2; + } + ieee->IbssStartChnl = 10; + ieee->ibss_maxjoin_chal = 11; + break; + + default: + ieee->IbssStartChnl = 1; + ieee->ibss_maxjoin_chal = 14; + break; + } +} + + +void Dot11d_Reset(struct rtllib_device *ieee) +{ + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee); +#if 0 + if(!pDot11dInfo->bEnabled) + return; +#endif + +#ifndef CONFIG_CRDA + u32 i; + memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1); + memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1); + for (i=1; i<=11; i++) { + (pDot11dInfo->channel_map)[i] = 1; + } + for (i=12; i<=14; i++) { + (pDot11dInfo->channel_map)[i] = 2; + } +#endif + pDot11dInfo->State = DOT11D_STATE_NONE; + pDot11dInfo->CountryIeLen = 0; + RESET_CIE_WATCHDOG(ieee); + +} + +void Dot11d_UpdateCountryIe(struct rtllib_device *dev, u8 *pTaddr, + u16 CoutryIeLen, u8* pCoutryIe) +{ + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev); +#ifdef CONFIG_CRDA + +#else + u8 i, j, NumTriples, MaxChnlNum; + PCHNL_TXPOWER_TRIPLE pTriple; + + memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1); + memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1); + MaxChnlNum = 0; + NumTriples = (CoutryIeLen - 3) / 3; + pTriple = (PCHNL_TXPOWER_TRIPLE)(pCoutryIe + 3); + for(i = 0; i < NumTriples; i++) + { + if(MaxChnlNum >= pTriple->FirstChnl) + { + printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n"); + return; + } + if(MAX_CHANNEL_NUMBER < (pTriple->FirstChnl + pTriple->NumChnls)) + { + printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........2\n"); + return; + } + + for(j = 0 ; j < pTriple->NumChnls; j++) + { + pDot11dInfo->channel_map[pTriple->FirstChnl + j] = 1; + pDot11dInfo->MaxTxPwrDbmList[pTriple->FirstChnl + j] = pTriple->MaxTxPowerInDbm; + MaxChnlNum = pTriple->FirstChnl + j; + } + + pTriple = (PCHNL_TXPOWER_TRIPLE)((u8*)pTriple + 3); + } +#if 0 + printk("Channel List:"); + for(i=1; i<= MAX_CHANNEL_NUMBER; i++) + if(pDot11dInfo->channel_map[i] > 0) + printk(" %d", i); + printk("\n"); +#endif +#endif + + UPDATE_CIE_SRC(dev, pTaddr); + + pDot11dInfo->CountryIeLen = CoutryIeLen; + memcpy(pDot11dInfo->CountryIeBuf, pCoutryIe,CoutryIeLen); + pDot11dInfo->State = DOT11D_STATE_LEARNED; + +#ifdef CONFIG_CRDA + queue_delayed_work_rsl(dev->wq, &dev->softmac_hint11d_wq, 0); +#endif +} + +u8 DOT11D_GetMaxTxPwrInDbm( struct rtllib_device *dev, u8 Channel) +{ + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev); + u8 MaxTxPwrInDbm = 255; + + if(MAX_CHANNEL_NUMBER < Channel) + { + printk("DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n"); + return MaxTxPwrInDbm; + } + if(pDot11dInfo->channel_map[Channel]) + { + MaxTxPwrInDbm = pDot11dInfo->MaxTxPwrDbmList[Channel]; + } + + return MaxTxPwrInDbm; +} + +void DOT11D_ScanComplete( struct rtllib_device * dev) +{ + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev); + + switch(pDot11dInfo->State) + { + case DOT11D_STATE_LEARNED: + pDot11dInfo->State = DOT11D_STATE_DONE; + break; + + case DOT11D_STATE_DONE: + { + Dot11d_Reset(dev); + } + break; + case DOT11D_STATE_NONE: + break; + } +} + +int ToLegalChannel( struct rtllib_device * dev, u8 channel) +{ + PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev); + u8 default_chn = 0; + u32 i = 0; + + for (i=1; i<= MAX_CHANNEL_NUMBER; i++) + { + if(pDot11dInfo->channel_map[i] > 0) + { + default_chn = i; + break; + } + } + + if(MAX_CHANNEL_NUMBER < channel) + { + printk("%s(): Invalid Channel\n", __FUNCTION__); + return default_chn; + } + + if(pDot11dInfo->channel_map[channel] > 0) + return channel; + + return default_chn; +} + +#ifndef BUILT_IN_RTLLIB +EXPORT_SYMBOL_RSL(Dot11d_Init); +EXPORT_SYMBOL_RSL(Dot11d_Channelmap); +EXPORT_SYMBOL_RSL(Dot11d_Reset); +EXPORT_SYMBOL_RSL(Dot11d_UpdateCountryIe); +EXPORT_SYMBOL_RSL(DOT11D_GetMaxTxPwrInDbm); +EXPORT_SYMBOL_RSL(DOT11D_ScanComplete); +EXPORT_SYMBOL_RSL(ToLegalChannel); +#endif + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.h @@ -0,0 +1,116 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + + +/*--------------------------Define Parameters-------------------------------*/ + +#define RF6052_MAX_TX_PWR 0x3F +#define RF6052_MAX_REG 0x3F +#define RF6052_MAX_PATH 4 +/*--------------------------Define Parameters-------------------------------*/ + + +/*------------------------------Define structure----------------------------*/ + +/*------------------------------Define structure----------------------------*/ + + +/*------------------------Export global variable----------------------------*/ +/*------------------------Export global variable----------------------------*/ + +/*------------------------Export Marco Definition---------------------------*/ + +/*------------------------Export Marco Definition---------------------------*/ + + +/*--------------------------Exported Function prototype---------------------*/ +#if 1 +extern void PHY_SetRF0222DBandwidth(struct net_device* dev , HT_CHANNEL_WIDTH Bandwidth); +extern void PHY_SetRF8225Bandwidth( struct net_device* dev , HT_CHANNEL_WIDTH Bandwidth); +extern bool PHY_RF8225_Config(struct net_device* dev ); +extern void phy_RF8225_Config_HardCode(struct net_device* dev); +extern bool phy_RF8225_Config_ParaFile(struct net_device* dev); +extern void PHY_SetRF8225CckTxPower(struct net_device* dev ,u8 powerlevel); +extern void PHY_SetRF8225OfdmTxPower(struct net_device* dev ,u8 powerlevel); +extern void PHY_SetRF0222DOfdmTxPower(struct net_device* dev ,u8 powerlevel); +extern void PHY_SetRF0222DCckTxPower(struct net_device* dev ,u8 powerlevel); + +extern void PHY_SetRF8256Bandwidth(struct net_device* dev , HT_CHANNEL_WIDTH Bandwidth); +extern void PHY_RF8256_Config(struct net_device* dev); +extern void phy_RF8256_Config_ParaFile(struct net_device* dev); +extern void PHY_SetRF8256CCKTxPower(struct net_device* dev, u8 powerlevel); +extern void PHY_SetRF8256OFDMTxPower(struct net_device* dev, u8 powerlevel); +#endif + +extern void RF_ChangeTxPath(struct net_device * dev, u16 DataRate); +extern void PHY_RF6052SetBandwidth(struct net_device * dev,HT_CHANNEL_WIDTH Bandwidth); +extern void PHY_RF6052SetCckTxPower(struct net_device * dev, u8 powerlevel); +extern void PHY_RF6052SetOFDMTxPower(struct net_device * dev, u8* pPowerLevel, u8 Channel); +extern bool PHY_RF6052_Config(struct net_device * dev); +extern void PHY_RFShadowRefresh( struct net_device * dev); +extern void PHY_RFShadowWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data); + +extern bool +PHY_RFShadowCompare( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset); +extern void +PHY_RFShadowRecorver( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset); +extern void +PHY_RFShadowCompareFlagSet( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u8 Type); +extern void +PHY_RFShadowRecorverFlagSet( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u8 Type); +#if 0 +extern u32 +PHY_RFShadowRead( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset); +extern void +PHY_RFShadowCompareAll( + struct net_device * dev); +extern void +PHY_RFShadowRecorverAll( + struct net_device * dev); +extern void +PHY_RFShadowCompareFlagSetAll( + struct net_device * dev); +extern void +PHY_RFShadowRecorverFlagSetAll( + struct net_device * dev); +extern void +PHY_RFShadowRefresh( + struct net_device * dev); +#endif +/*--------------------------Exported Function prototype---------------------*/ + + +/* End of HalRf.h */ --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.c @@ -0,0 +1,1869 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "../rtl_core.h" +#include "r8192S_Efuse.h" + +#include + +#ifdef RTL8192SE +/*---------------------------Define Local Constant---------------------------*/ +#define _POWERON_DELAY_ +#define _PRE_EXECUTE_READ_CMD_ + +#define EFUSE_REPEAT_THRESHOLD_ 3 +#define EFUSE_ERROE_HANDLE 1 + + +typedef struct _EFUSE_MAP_A{ + u8 offset; + u8 word_start; + u8 byte_start; + u8 byte_cnts; + +}EFUSE_MAP, *PEFUSE_MAP; + +typedef struct PG_PKT_STRUCT_A{ + u8 offset; + u8 word_en; + u8 data[8]; +}PGPKT_STRUCT,*PPGPKT_STRUCT; + +typedef enum _EFUSE_DATA_ITEM{ + EFUSE_CHIP_ID=0, + EFUSE_LDO_SETTING, + EFUSE_CLK_SETTING, + EFUSE_SDIO_SETTING, + EFUSE_CCCR, + EFUSE_SDIO_MODE, + EFUSE_OCR, + EFUSE_F0CIS, + EFUSE_F1CIS, + EFUSE_MAC_ADDR, + EFUSE_EEPROM_VER, + EFUSE_CHAN_PLAN, + EFUSE_TXPW_TAB +} EFUSE_DATA_ITEM; + +struct efuse_priv +{ + u8 id[2]; + u8 ldo_setting[2]; + u8 clk_setting[2]; + u8 cccr; + u8 sdio_mode; + u8 ocr[3]; + u8 cis0[17]; + u8 cis1[48]; + u8 mac_addr[6]; + u8 eeprom_verno; + u8 channel_plan; + u8 tx_power_b[14]; + u8 tx_power_g[14]; +}; + +/*---------------------------Define Local Constant---------------------------*/ + + +/*------------------------Define global variable-----------------------------*/ +const u8 MAX_PGPKT_SIZE = 9; +const u8 PGPKT_DATA_SIZE = 8; +const u32 EFUSE_MAX_SIZE = 512; + +const u8 EFUSE_OOB_PROTECT_BYTES = 15; + + +const EFUSE_MAP RTL8712_SDIO_EFUSE_TABLE[]={ +/*ID*/ {0 ,0 ,0 ,2 }, +/*LDO Setting*/ {0 ,1 ,0 ,2 }, +/*CLK Setting*/ {0 ,2 ,0 ,2 }, +/*SDIO Setting*/{1 ,0 ,0 ,1 }, +/*CCCR*/ {1 ,0 ,1 ,1 }, +/*SDIO MODE*/ {1 ,1 ,0 ,1 }, +/*OCR*/ {1 ,1 ,1 ,3 }, +/*CCIS*/ {1 ,3 ,0 ,17 }, +/*F1CIS*/ {3 ,3 ,1 ,48 }, +/*MAC Addr*/ {10 ,0 ,0 ,6 }, +/*EEPROM ver*/ {10 ,3 ,0 ,1 }, +/*Channel plan*/{10 ,3 ,1 ,1 }, +/*TxPwIndex */ {11 ,0 ,0 ,28 } +}; + +/*------------------------Define global variable-----------------------------*/ + + +/*------------------------Define local variable------------------------------*/ + +/*------------------------Define local variable------------------------------*/ + + +/*--------------------Define function prototype-----------------------*/ +extern void +EFUSE_Initialize(struct net_device* dev); +extern u8 +EFUSE_Read1Byte(struct net_device* dev, u16 Address); +extern void +EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value); + +static void +efuse_ShadowRead1Byte(struct net_device* dev,u16 Offset,u8 *Value); +static void +efuse_ShadowRead2Byte(struct net_device* dev, u16 Offset,u16 *Value ); +static void +efuse_ShadowRead4Byte(struct net_device* dev, u16 Offset,u32 *Value ); +static void +efuse_ShadowWrite1Byte(struct net_device* dev, u16 Offset, u8 Value); +static void +efuse_ShadowWrite2Byte(struct net_device* dev, u16 Offset,u16 Value); +static void +efuse_ShadowWrite4Byte(struct net_device* dev, u16 Offset,u32 Value); + +static u8 +efuse_OneByteRead(struct net_device* dev,u16 addr,u8 *data); +static u8 +efuse_OneByteWrite(struct net_device* dev,u16 addr, u8 data); + +static void +efuse_ReadAllMap(struct net_device* dev,u8 *Efuse); +#ifdef TO_DO_LIST +static void +efuse_WriteAllMap(struct net_device* dev,u8 *eeprom,u32 eeprom_size); +static bool +efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove); +#endif +static u8 +efuse_PgPacketRead( struct net_device* dev,u8 offset,u8 *data); +static u8 +efuse_PgPacketWrite(struct net_device* dev,u8 offset,u8 word_en,u8 *data); +static void +efuse_WordEnableDataRead( u8 word_en,u8 *sourdata,u8 *targetdata); +static u8 +efuse_WordEnableDataWrite( struct net_device* dev, u16 efuse_addr, u8 word_en, u8 *data); +static void +efuse_PowerSwitch(struct net_device* dev,u8 PwrState); +static u16 +efuse_GetCurrentSize(struct net_device* dev); +static u8 +efuse_CalculateWordCnts(u8 word_en); +#if 0 +static void +efuse_ResetLoader(struct net_device* dev); +#endif +#ifdef TO_DO_LIST +static void efuse_reg_ctrl(struct net_device* dev, u8 bPowerOn); +#endif +/*--------------------Define function prototype-----------------------*/ + + + +extern void +EFUSE_Initialize(struct net_device* dev) +{ + u8 Bytetemp = {0x00}; + u8 temp = {0x00}; + + Bytetemp = read_nic_byte(dev, SYS_FUNC_EN+1); + temp = Bytetemp | 0x20; + write_nic_byte(dev, SYS_FUNC_EN+1, temp); + + Bytetemp = read_nic_byte(dev, SYS_ISO_CTRL+1); + temp = Bytetemp & 0xFE; + write_nic_byte(dev, SYS_ISO_CTRL+1, temp); + + + Bytetemp = read_nic_byte(dev, EFUSE_TEST+3); + temp = Bytetemp | 0x80; + write_nic_byte(dev, EFUSE_TEST+3, temp); + + write_nic_byte(dev, 0x2F8, 0x3); + + write_nic_byte(dev, EFUSE_CTRL+3, 0x72); + +} /* EFUSE_Initialize */ + + +extern u8 +EFUSE_Read1Byte(struct net_device* dev, u16 Address) +{ + u8 data; + u8 Bytetemp = {0x00}; + u8 temp = {0x00}; + u32 k=0; + + if (Address < EFUSE_REAL_CONTENT_LEN) + { + temp = Address & 0xFF; + write_nic_byte(dev, EFUSE_CTRL+1, temp); + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+2); + temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC); + write_nic_byte(dev, EFUSE_CTRL+2, temp); + + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); + temp = Bytetemp & 0x7F; + write_nic_byte(dev, EFUSE_CTRL+3, temp); + + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); + while(!(Bytetemp & 0x80)) + { + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); + k++; + if(k==1000) + { + k=0; + break; + } + } + data=read_nic_byte(dev, EFUSE_CTRL); + return data; + } + else + return 0xFF; + +} /* EFUSE_Read1Byte */ + + +extern void +EFUSE_Write1Byte(struct net_device* dev, u16 Address,u8 Value) +{ + u8 Bytetemp = {0x00}; + u8 temp = {0x00}; + u32 k=0; + + + if( Address < EFUSE_REAL_CONTENT_LEN) + { + write_nic_byte(dev, EFUSE_CTRL, Value); + + temp = Address & 0xFF; + write_nic_byte(dev, EFUSE_CTRL+1, temp); + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+2); + + temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC); + write_nic_byte(dev, EFUSE_CTRL+2, temp); + + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); + temp = Bytetemp | 0x80; + write_nic_byte(dev, EFUSE_CTRL+3, temp); + + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); + while(Bytetemp & 0x80) + { + Bytetemp = read_nic_byte(dev, EFUSE_CTRL+3); + k++; + if(k==100) + { + k=0; + break; + } + } + } + +} /* EFUSE_Write1Byte */ + + +#ifdef EFUSE_FOR_92SU +void do_93c46(struct net_device* dev, u8 addorvalue) +{ + u8 cs[1] = {0x88}; + u8 cssk[1] = {0x8c}; + u8 csdi[1] = {0x8a}; + u8 csskdi[1] = {0x8e}; + u8 count; + + for(count=0 ; count<8 ; count++) + { + if((addorvalue&0x80)!=0) + { + write_nic_byte(dev, EPROM_CMD, csdi[0]); + write_nic_byte(dev, EPROM_CMD, csskdi[0]); + } + else + { + write_nic_byte(dev, EPROM_CMD, cs[0]); + write_nic_byte(dev, EPROM_CMD, cssk[0]); + } + addorvalue = addorvalue << 1; + } +} + + +u16 Read93C46(struct net_device* dev, u16 Reg ) +{ + + u8 clear[1] = {0x0}; + u8 cs[1] = {0x88}; + u8 cssk[1] = {0x8c}; + u8 csdi[1] = {0x8a}; + u8 csskdi[1] = {0x8e}; + u8 EepromSEL[1]={0x00}; + u8 address; + + u16 storedataF[1] = {0x0}; + u8 t,data[1],storedata[1]; + + + address = (u8)Reg; + + *EepromSEL= read_nic_byte(dev, EPROM_CMD); + + if((*EepromSEL & 0x10) == 0x10) + { + address = address | 0x80; + + write_nic_byte(dev, EPROM_CMD, csdi[0]); + write_nic_byte(dev, EPROM_CMD, csskdi[0]); + do_93c46(dev, address); + } + + + for(t=0 ; t<16 ; t++) + { + write_nic_byte(dev, EPROM_CMD, cs[0]); + write_nic_byte(dev, EPROM_CMD, cssk[0]); + *data= read_nic_byte(dev, EPROM_CMD); + + if(*data & 0x8d) + { + *data = *data & 0x01; + *storedata = *data; + } + else + { + *data = *data & 0x01 ; + *storedata = *data; + } + *storedataF = (*storedataF << 1 ) + *storedata; + } + write_nic_byte(dev, EPROM_CMD, cs[0]); + write_nic_byte(dev, EPROM_CMD, clear[0]); + + return *storedataF; +} + + +void +ReadEFuseByte(struct net_device* dev,u16 _offset, u8 *pbuf) +{ + + u32 value32; + u8 readbyte; + u16 retry; + + + write_nic_byte(dev, EFUSE_CTRL+1, (_offset & 0xff)); + readbyte = read_nic_byte(dev, EFUSE_CTRL+2); + write_nic_byte(dev, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc)); + + readbyte = read_nic_byte(dev, EFUSE_CTRL+3); + write_nic_byte(dev, EFUSE_CTRL+3, (readbyte & 0x7f)); + + retry = 0; + value32 = read_nic_dword(dev, EFUSE_CTRL); + while(!(((value32 >> 24) & 0xff) & 0x80) && (retry<10000)) + { + value32 = read_nic_dword(dev, EFUSE_CTRL); + retry++; + } + *pbuf = (u8)(value32 & 0xff); +} + + +#define EFUSE_READ_SWITCH 1 +void +ReadEFuse(struct net_device* dev, u16 _offset, u16 _size_byte, u8 *pbuf) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 efuseTbl[EFUSE_MAP_LEN]; + u8 rtemp8[1]; + u16 eFuse_Addr = 0; + u8 offset, wren; + u16 i, j; + u16 eFuseWord[EFUSE_MAX_SECTION][EFUSE_MAX_WORD_UNIT]; + u16 efuse_utilized = 0; + u16 efuse_usage = 0; +#ifdef EFUSE_REPG_WORKAROUND + u16 sec1_addr = 0, sec5_addr = 0; +#endif + + if((_offset + _size_byte)>EFUSE_MAP_LEN) + { + printk("ReadEFuse(): Invalid offset with read bytes!!\n"); + return; + } + + for (i = 0; i < EFUSE_MAX_SECTION; i++) + for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) + eFuseWord[i][j]=0xFFFF; + + for (i = 0; i < EFUSE_MAP_LEN; i++) + efuseTbl[i] = 0xFF; + + ReadEFuseByte(dev, eFuse_Addr, rtemp8); + if(*rtemp8 != 0xFF) + { + efuse_utilized++; + eFuse_Addr++; + } + while((*rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN)) + { + offset = ((*rtemp8 >> 4) & 0x0f); +#ifdef EFUSE_REPG_WORKAROUND + if (IS_HARDWARE_TYPE_8192SE(dev)) + { + if (offset == 1) + { + sec1_addr = eFuse_Addr; + } + else if (offset == 5) + { + sec5_addr = eFuse_Addr; + } + + if (sec1_addr > sec5_addr) + { + priv->efuse_RePGSec1Flag = false; + } + else + { + priv->efuse_RePGSec1Flag = true; + } + } +#endif + if(offset < EFUSE_MAX_SECTION){ + wren = (*rtemp8 & 0x0f); + for(i=0; i<4; i++){ + if(!(wren & 0x01)){ + ReadEFuseByte(dev, eFuse_Addr, rtemp8); eFuse_Addr++; + efuse_utilized++; + eFuseWord[offset][i] = (*rtemp8 & 0xff); + if(eFuse_Addr >= EFUSE_REAL_CONTENT_LEN) break; + ReadEFuseByte(dev, eFuse_Addr, rtemp8); eFuse_Addr++; + efuse_utilized++; + eFuseWord[offset][i] |= (((u16)*rtemp8 << 8) & 0xff00); + if(eFuse_Addr >= EFUSE_REAL_CONTENT_LEN) break; + } + wren >>= 1; + } + } + ReadEFuseByte(dev, eFuse_Addr, rtemp8); + if(*rtemp8 != 0xFF && (eFuse_Addr < 512)) + { + efuse_utilized++; + eFuse_Addr++; + } + } + + for(i=0; i> 8) & 0xff); +#ifdef FUSE_REPG_WORKAROUND + if ((i == 1) && (priv->efuse_RePGSec1Flag == true)) + { + priv->efuse_RePGData[j*2]=(eFuseWord[i][j] & 0xff); + priv->efuse_RePGData[(j*2)+1]=((eFuseWord[i][j] >> 8) & 0xff); + } +#endif + } + } + for(i=0; i<_size_byte; i++) + pbuf[i] = efuseTbl[_offset+i]; + priv->EfuseUsedBytes = efuse_utilized; + efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN); + priv->EfuseUsedPercentage = efuse_usage; +} +#endif + +extern bool EFUSE_ShadowUpdateChk(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 SectionIdx, i, Base; + u16 WordsNeed = 0, HdrNum = 0, TotalBytes = 0, EfuseUsed = 0; + bool bWordChanged, bResult = true; + + for (SectionIdx = 0; SectionIdx < 16; SectionIdx++) { + Base = SectionIdx * 8; + bWordChanged = false; + + for (i = 0; i < 8; i=i+2) { + if((priv->EfuseMap[EFUSE_INIT_MAP][Base+i] != + priv->EfuseMap[EFUSE_MODIFY_MAP][Base+i]) || + (priv->EfuseMap[EFUSE_INIT_MAP][Base+i+1] != + priv->EfuseMap[EFUSE_MODIFY_MAP][Base+i+1])) { + WordsNeed++; + bWordChanged = true; + } + } + + if( bWordChanged == true ) + HdrNum++; + } + + TotalBytes = HdrNum + WordsNeed * 2; + EfuseUsed = priv->EfuseUsedBytes; + + if ((TotalBytes + EfuseUsed) >= (EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES)) + bResult = false; + + return bResult; +} + +extern void +EFUSE_ShadowRead( struct net_device* dev, u8 Type, u16 Offset, u32 *Value) +{ + + if (Type == 1) + efuse_ShadowRead1Byte(dev, Offset, (u8 *)Value); + else if (Type == 2) + efuse_ShadowRead2Byte(dev, Offset, (u16 *)Value); + else if (Type == 4) + efuse_ShadowRead4Byte(dev, Offset, (u32 *)Value); + +} + + +extern void +EFUSE_ShadowWrite( struct net_device* dev, u8 Type, u16 Offset,u32 Value) +{ + + if (Offset >= 0x18 && Offset <= 0x1F) + return; + + if (Type == 1) + efuse_ShadowWrite1Byte(dev, Offset, (u8)Value); + else if (Type == 2) + efuse_ShadowWrite2Byte(dev, Offset, (u16)Value); + else if (Type == 4) + efuse_ShadowWrite4Byte(dev, Offset, (u32)Value); + +} + + +extern bool EFUSE_ShadowUpdate(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u16 i, offset, base = 0; + u8 word_en = 0x0F; + bool first_pg = false; + + if (!EFUSE_ShadowUpdateChk(dev)) { + efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]); + memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0], + (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + + printk("<---EFUSE_ShadowUpdate(): Efuse out of capacity!!\n"); + return false; + } + + efuse_PowerSwitch(dev, true); + + for (offset = 0; offset < 16; offset++) + { + if(IS_HARDWARE_TYPE_8192SE(dev)){ + if (offset == 3) + continue; + } + word_en = 0x0F; + base = offset * 8; + + for (i = 0; i < 8; i++) + { + if (offset == 0 && priv->EfuseMap[EFUSE_INIT_MAP][base+i] == 0xFF) + { + first_pg = true; + } + + if (first_pg == true && offset == 1 && IS_HARDWARE_TYPE_8192SE(dev)) + { + continue; + } + + if (first_pg == true) + { + word_en &= ~(BIT(i/2)); + priv->EfuseMap[EFUSE_INIT_MAP][base+i] = + priv->EfuseMap[EFUSE_MODIFY_MAP][base+i]; + }else + { + if ( priv->EfuseMap[EFUSE_INIT_MAP][base+i] != + priv->EfuseMap[EFUSE_MODIFY_MAP][base+i]) + { + word_en &= ~(EFUSE_BIT(i/2)); + + priv->EfuseMap[EFUSE_INIT_MAP][base+i] = + priv->EfuseMap[EFUSE_MODIFY_MAP][base+i]; + } + } + } + + if (word_en != 0x0F) + { + u8 tmpdata[8]; + + memcpy(tmpdata, &(priv->EfuseMap[EFUSE_MODIFY_MAP][base]), 8); + efuse_PgPacketWrite(dev,(u8)offset,word_en,tmpdata); + } + + } + if (first_pg == true && IS_HARDWARE_TYPE_8192SE(dev)) + { + u8 tmpdata[8]; + + memcpy(tmpdata, (&priv->EfuseMap[EFUSE_MODIFY_MAP][8]), 8); + efuse_PgPacketWrite(dev, 1, 0x0, tmpdata); +#if 0 + u1Byte tmpdata[8] = {0xFF, 0xFF, 0xEC, 0x10, 0xFF, 0xFF, 0xFF, 0xFF}; + + efuse_PgPacketWrite(pAdapter, 1, 0xD, tmpdata); +#endif + } + + + efuse_PowerSwitch(dev, false); + efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]); + memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0], + (void *)&priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + + return true; +} + + +extern void EFUSE_ShadowMapUpdate(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if (priv->AutoloadFailFlag == true){ + memset(&(priv->EfuseMap[EFUSE_INIT_MAP][0]), 0xff, 128); + }else{ + efuse_ReadAllMap(dev, &priv->EfuseMap[EFUSE_INIT_MAP][0]); + } + memcpy(&priv->EfuseMap[EFUSE_MODIFY_MAP][0], + &priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + +} + + +extern void +EFUSE_ForceWriteVendorId( struct net_device* dev) +{ + u8 tmpdata[8] = {0xFF, 0xFF, 0xEC, 0x10, 0xFF, 0xFF, 0xFF, 0xFF}; + + efuse_PowerSwitch(dev, true); + + efuse_PgPacketWrite(dev, 1, 0xD, tmpdata); + + efuse_PowerSwitch(dev, false); + +} + +extern void +EFUSE_RePgSection1(struct net_device* dev) +{ +#ifdef EFUSE_REPG_WORKAROUND + + struct r8192_priv *priv = rtllib_priv(dev); + + if (priv->efuse_RePGSec1Flag == true) + { + efuse_PowerSwitch(dev, true); + RT_TRACE(COMP_INIT, "EFUSE REPG: %p, %u\n", priv->efuse_RePGData, 8); + + efuse_PgPacketWrite(dev, 1, 0x0d, priv->efuse_RePGData); + efuse_PowerSwitch(dev, false); + priv->efuse_RePGSec1Flag = false; + } +#endif +} + + +static void +efuse_ShadowRead1Byte(struct net_device* dev, u16 Offset, u8 *Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset]; + +} + +static void +efuse_ShadowRead2Byte(struct net_device* dev, u16 Offset, u16 *Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset]; + *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1]<<8; + +} + +static void +efuse_ShadowRead4Byte(struct net_device* dev, u16 Offset, u32 *Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + *Value = priv->EfuseMap[EFUSE_MODIFY_MAP][Offset]; + *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1]<<8; + *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+2]<<16; + *Value |= priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+3]<<24; + +} + + + +static void +efuse_ShadowWrite1Byte(struct net_device* dev, u16 Offset, u8 Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = Value; + +} + +static void +efuse_ShadowWrite2Byte(struct net_device* dev, u16 Offset, u16 Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = Value&0x00FF; + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1] = Value>>8; + +} + +static void +efuse_ShadowWrite4Byte(struct net_device* dev, u16 Offset, u32 Value) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset] = (u8)(Value&0x000000FF); + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+1] = (u8)((Value>>8)&0x0000FF); + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+2] = (u8)((Value>>16)&0x00FF); + priv->EfuseMap[EFUSE_MODIFY_MAP][Offset+3] = (u8)((Value>>24)&0xFF); + +} + + +static u8 +efuse_OneByteRead(struct net_device* dev, u16 addr,u8 *data) +{ + u8 tmpidx = 0; + u8 bResult; + + write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff)); + write_nic_byte(dev, EFUSE_CTRL+2, ((u8)((addr>>8) &0x03) ) | + (read_nic_byte(dev, EFUSE_CTRL+2)&0xFC )); + + write_nic_byte(dev, EFUSE_CTRL+3, 0x72); + + while(!(0x80 &read_nic_byte(dev, EFUSE_CTRL+3))&&(tmpidx<100)) + { + tmpidx++; + } + if(tmpidx<100) + { + *data=read_nic_byte(dev, EFUSE_CTRL); + bResult = true; + } + else + { + *data = 0xff; + bResult = false; + } + return bResult; +} + +static u8 +efuse_OneByteWrite(struct net_device* dev, u16 addr, u8 data) +{ + u8 tmpidx = 0; + u8 bResult; + + + + write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff)); + write_nic_byte(dev, EFUSE_CTRL+2, + read_nic_byte(dev, EFUSE_CTRL+2)|(u8)((addr>>8)&0x03) ); + + write_nic_byte(dev, EFUSE_CTRL, data); + write_nic_byte(dev, EFUSE_CTRL+3, 0xF2); + + while((0x80 & read_nic_byte(dev, EFUSE_CTRL+3)) && (tmpidx<100) ){ + tmpidx++; + } + + if(tmpidx<100) + { + bResult = true; + } + else + { + bResult = false; + } + + return bResult; +} + + +static void +efuse_ReadAllMap(struct net_device* dev, u8 *Efuse) +{ + + efuse_PowerSwitch(dev, true); + ReadEFuse(dev, 0, 128, Efuse); + efuse_PowerSwitch(dev, false); +#if 0 + RT_TRACE(COMP_INIT, "efuse_ResetLoader\n"); + efuse_ResetLoader(dev); + + write_nic_byte(dev, EFUSE_CLK, 0x03); + + ReadEFuse(dev, 0, 128, Efuse); + + write_nic_byte(dev, EFUSE_CLK, 0x02); +#if 0 + for(offset = 0;offset<16;offset++) + { + PlatformFillMemory((PVOID)pg_data, 8, 0xff); + efuse_PgPacketRead(pAdapter,offset,pg_data); + + PlatformMoveMemory((PVOID)&Efuse[offset*8], (PVOID)pg_data, 8); + } +#endif + + if (Efuse[0] != 0x29 || Efuse[1] != 0x81) + { + if (index ++ < 5) + { + RT_TRACE(COMP_INIT, "EFUSE R FAIL %d\n", index); + efuse_ReadAllMap(dev, Efuse); + } + } + else + { + index = 0; + } + +#endif +} + + +#ifdef TO_DO_LIST +static void +efuse_WriteAllMap(struct net_device* dev,u8 *eeprom, u32 eeprom_size) +{ + unsigned char word_en = 0x00; + + unsigned char tmpdata[8]; + unsigned char offset; + + efuse_PowerSwitch(dev, true); + + for(offset=0 ; offset< eeprom_size/PGPKT_DATA_SIZE ; offset++) + { + if (IS_HARDWARE_TYPE_8192SE(dev)) + { + if (offset == 3/* || offset > 9*/) + continue; + else + word_en = 0x00; + } + + memcpy(tmpdata, (eeprom+(offset*PGPKT_DATA_SIZE)), 8); + + + efuse_PgPacketWrite(dev,offset,word_en,tmpdata); + + + } + + efuse_PowerSwitch(dev, false); + +} +#endif +static u8 +efuse_PgPacketRead( struct net_device* dev, u8 offset, u8 *data) +{ + u8 ReadState = PG_STATE_HEADER; + + bool bContinual = true; + bool bDataEmpty = true ; + + u8 efuse_data,word_cnts=0; + u16 efuse_addr = 0; + u8 hoffset=0,hworden=0; + u8 tmpidx=0; + u8 tmpdata[8]; + + if(data==NULL) return false; + if(offset>15) return false; + + memset(data, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); + memset(tmpdata, 0xff, sizeof(u8)*PGPKT_DATA_SIZE); + + + while(bContinual && (efuse_addr < EFUSE_MAX_SIZE) ) + { + if(ReadState & PG_STATE_HEADER) + { + if(efuse_OneByteRead(dev, efuse_addr ,&efuse_data)&&(efuse_data!=0xFF)){ + hoffset = (efuse_data>>4) & 0x0F; + hworden = efuse_data & 0x0F; + word_cnts = efuse_CalculateWordCnts(hworden); + bDataEmpty = true ; + + if(hoffset==offset){ + for(tmpidx = 0;tmpidx< word_cnts*2 ;tmpidx++){ + if(efuse_OneByteRead(dev, efuse_addr+1+tmpidx ,&efuse_data) ){ + tmpdata[tmpidx] = efuse_data; + if(efuse_data!=0xff){ + bDataEmpty = false; + } + } + } + if(bDataEmpty==false){ + ReadState = PG_STATE_DATA; + }else{ + efuse_addr = efuse_addr + (word_cnts*2)+1; + ReadState = PG_STATE_HEADER; + } + } + else{ + efuse_addr = efuse_addr + (word_cnts*2)+1; + ReadState = PG_STATE_HEADER; + } + + } + else{ + bContinual = false ; + } + } + else if(ReadState & PG_STATE_DATA) + { + efuse_WordEnableDataRead(hworden,tmpdata,data); + efuse_addr = efuse_addr + (word_cnts*2)+1; + ReadState = PG_STATE_HEADER; + } + + } + + + if( (data[0]==0xff) &&(data[1]==0xff) && (data[2]==0xff) && (data[3]==0xff) && + (data[4]==0xff) &&(data[5]==0xff) && (data[6]==0xff) && (data[7]==0xff)) + return false; + else + return true; + +} + + +static u8 efuse_PgPacketWrite(struct net_device* dev, u8 offset, u8 word_en,u8 *data) +{ + u8 WriteState = PG_STATE_HEADER; + bool bContinual = true,bDataEmpty=true, bResult = true; + u16 efuse_addr = 0; + u8 efuse_data; + + u8 pg_header = 0; + + u8 tmp_word_cnts=0,target_word_cnts=0; + u8 tmp_header,match_word_en,tmp_word_en; + + PGPKT_STRUCT target_pkt; + PGPKT_STRUCT tmp_pkt; + + u8 originaldata[sizeof(u8)*8]; + u8 tmpindex = 0,badworden = 0x0F; + + static u32 repeat_times = 0; + + if (efuse_GetCurrentSize(dev) >= EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES) { + printk("efuse_PgPacketWrite error \n"); + return false; + } + + target_pkt.offset = offset; + target_pkt.word_en= word_en; + + memset(target_pkt.data,0xFF,sizeof(u8)*8); + + efuse_WordEnableDataRead(word_en,data,target_pkt.data); + target_word_cnts = efuse_CalculateWordCnts(target_pkt.word_en); + + printk("EFUSE Power ON\n"); + + while (bContinual && (efuse_addr < (EFUSE_MAX_SIZE - EFUSE_OOB_PROTECT_BYTES))) + { + if(WriteState==PG_STATE_HEADER) + { + bDataEmpty=true; + badworden = 0x0F; + printk("EFUSE PG_STATE_HEADER\n"); + if ( efuse_OneByteRead(dev, efuse_addr ,&efuse_data) && + (efuse_data!=0xFF)) + { + tmp_header = efuse_data; + + tmp_pkt.offset = (tmp_header>>4) & 0x0F; + tmp_pkt.word_en = tmp_header & 0x0F; + tmp_word_cnts = efuse_CalculateWordCnts(tmp_pkt.word_en); + + if(tmp_pkt.offset != target_pkt.offset) + { + efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; + #if (EFUSE_ERROE_HANDLE == 1) + WriteState = PG_STATE_HEADER; + #endif + } + else + { + for(tmpindex=0 ; tmpindex<(tmp_word_cnts*2) ; tmpindex++) + { + if(efuse_OneByteRead(dev, (efuse_addr+1+tmpindex) ,&efuse_data)&&(efuse_data != 0xFF)){ + bDataEmpty = false; + } + } + if(bDataEmpty == false) + { + efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; + #if (EFUSE_ERROE_HANDLE == 1) + WriteState=PG_STATE_HEADER; + #endif + } + else + { + match_word_en = 0x0F; + if( !( (target_pkt.word_en&BIT0)|(tmp_pkt.word_en&BIT0) )) + { + match_word_en &= (~BIT0); + } + if( !( (target_pkt.word_en&BIT1)|(tmp_pkt.word_en&BIT1) )) + { + match_word_en &= (~BIT1); + } + if( !( (target_pkt.word_en&BIT2)|(tmp_pkt.word_en&BIT2) )) + { + match_word_en &= (~BIT2); + } + if( !( (target_pkt.word_en&BIT3)|(tmp_pkt.word_en&BIT3) )) + { + match_word_en &= (~BIT3); + } + + if((match_word_en&0x0F)!=0x0F) + { + badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1, tmp_pkt.word_en ,target_pkt.data); + + if(0x0F != (badworden&0x0F)) + { + u8 reorg_offset = offset; + u8 reorg_worden=badworden; + efuse_PgPacketWrite(dev,reorg_offset,reorg_worden,originaldata); + } + + tmp_word_en = 0x0F; + if( (target_pkt.word_en&BIT0)^(match_word_en&BIT0) ) + { + tmp_word_en &= (~BIT0); + } + if( (target_pkt.word_en&BIT1)^(match_word_en&BIT1) ) + { + tmp_word_en &= (~BIT1); + } + if( (target_pkt.word_en&BIT2)^(match_word_en&BIT2) ) + { + tmp_word_en &= (~BIT2); + } + if( (target_pkt.word_en&BIT3)^(match_word_en&BIT3) ) + { + tmp_word_en &=(~BIT3); + } + + if((tmp_word_en&0x0F)!=0x0F){ + efuse_addr = efuse_GetCurrentSize(dev); + target_pkt.offset = offset; + target_pkt.word_en= tmp_word_en; + }else{ + bContinual = false; + } + #if (EFUSE_ERROE_HANDLE == 1) + WriteState=PG_STATE_HEADER; + repeat_times++; + if(repeat_times>EFUSE_REPEAT_THRESHOLD_){ + bContinual = false; + bResult = false; + } + #endif + } + else{ + efuse_addr = efuse_addr + (2*tmp_word_cnts) +1; + target_pkt.offset = offset; + target_pkt.word_en= target_pkt.word_en; + #if (EFUSE_ERROE_HANDLE == 1) + WriteState=PG_STATE_HEADER; + #endif + } + } + } + printk("EFUSE PG_STATE_HEADER-1\n"); + } + else + { + pg_header = ((target_pkt.offset << 4)&0xf0) |target_pkt.word_en; + + efuse_OneByteWrite(dev,efuse_addr, pg_header); + efuse_OneByteRead(dev,efuse_addr, &tmp_header); + + if(tmp_header == pg_header) + { + WriteState = PG_STATE_DATA; + } + #if (EFUSE_ERROE_HANDLE == 1) + else if(tmp_header == 0xFF){ + WriteState = PG_STATE_HEADER; + repeat_times++; + if(repeat_times>EFUSE_REPEAT_THRESHOLD_){ + bContinual = false; + bResult = false; + } + } + #endif + else + { + tmp_pkt.offset = (tmp_header>>4) & 0x0F; + tmp_pkt.word_en= tmp_header & 0x0F; + tmp_word_cnts = efuse_CalculateWordCnts(tmp_pkt.word_en); + + memset(originaldata,0xff,sizeof(u8)*8); + + if(efuse_PgPacketRead( dev, tmp_pkt.offset,originaldata)) + { + badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1,tmp_pkt.word_en,originaldata); + if(0x0F != (badworden&0x0F)) + { + u8 reorg_offset = tmp_pkt.offset; + u8 reorg_worden=badworden; + efuse_PgPacketWrite(dev,reorg_offset,reorg_worden,originaldata); + efuse_addr = efuse_GetCurrentSize(dev); + } + else{ + efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; + } + } + else + { + efuse_addr = efuse_addr + (tmp_word_cnts*2) +1; + } + + #if (EFUSE_ERROE_HANDLE == 1) + WriteState=PG_STATE_HEADER; + repeat_times++; + if(repeat_times>EFUSE_REPEAT_THRESHOLD_){ + bContinual = false; + bResult = false; + } + #endif + + printk("EFUSE PG_STATE_HEADER-2\n"); + } + + } + + } + else if(WriteState==PG_STATE_DATA) + { + printk("EFUSE PG_STATE_DATA\n"); + badworden = 0x0f; + badworden = efuse_WordEnableDataWrite(dev,efuse_addr+1,target_pkt.word_en,target_pkt.data); + if((badworden&0x0F)==0x0F) + { + bContinual = false; + } + else + { + efuse_addr = efuse_addr + (2*target_word_cnts) +1; + + target_pkt.offset = offset; + target_pkt.word_en= badworden; + target_word_cnts = efuse_CalculateWordCnts(target_pkt.word_en); + #if (EFUSE_ERROE_HANDLE == 1) + WriteState=PG_STATE_HEADER; + repeat_times++; + if(repeat_times>EFUSE_REPEAT_THRESHOLD_){ + bContinual = false; + bResult = false; + } + #endif + printk("EFUSE PG_STATE_HEADER-3\n"); + } + } + } + + + return true; +} + + +static void +efuse_WordEnableDataRead( u8 word_en,u8 *sourdata,u8 *targetdata) +{ + + + + if (!(word_en&BIT0)) + { + targetdata[0] = sourdata[0]; + targetdata[1] = sourdata[1]; + } + if (!(word_en&BIT1)) + { + targetdata[2] = sourdata[2]; + targetdata[3] = sourdata[3]; + } + if (!(word_en&BIT2)) + { + targetdata[4] = sourdata[4]; + targetdata[5] = sourdata[5]; + } + if (!(word_en&BIT3)) + { + targetdata[6] = sourdata[6]; + targetdata[7] = sourdata[7]; + } +} + + +static u8 +efuse_WordEnableDataWrite( struct net_device* dev, u16 efuse_addr, u8 word_en, u8 *data) +{ + u16 tmpaddr = 0; + u16 start_addr = efuse_addr; + u8 badworden = 0x0F; + u8 tmpdata[8]; + + memset(tmpdata,0xff,PGPKT_DATA_SIZE); + + + + if(!(word_en&BIT0)) + { + tmpaddr = start_addr; + efuse_OneByteWrite(dev,start_addr++, data[0]); + efuse_OneByteWrite(dev,start_addr++, data[1]); + + efuse_OneByteRead(dev,tmpaddr, &tmpdata[0]); + efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[1]); + if((data[0]!=tmpdata[0])||(data[1]!=tmpdata[1])){ + badworden &= (~BIT0); + } + } + if(!(word_en&BIT1)) + { + tmpaddr = start_addr; + efuse_OneByteWrite(dev,start_addr++, data[2]); + efuse_OneByteWrite(dev,start_addr++, data[3]); + + efuse_OneByteRead(dev,tmpaddr , &tmpdata[2]); + efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[3]); + if((data[2]!=tmpdata[2])||(data[3]!=tmpdata[3])){ + badworden &=( ~BIT1); + } + } + if(!(word_en&BIT2)) + { + tmpaddr = start_addr; + efuse_OneByteWrite(dev,start_addr++, data[4]); + efuse_OneByteWrite(dev,start_addr++, data[5]); + + efuse_OneByteRead(dev,tmpaddr, &tmpdata[4]); + efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[5]); + if((data[4]!=tmpdata[4])||(data[5]!=tmpdata[5])){ + badworden &=( ~BIT2); + } + } + if(!(word_en&BIT3)) + { + tmpaddr = start_addr; + efuse_OneByteWrite(dev,start_addr++, data[6]); + efuse_OneByteWrite(dev,start_addr++, data[7]); + + efuse_OneByteRead(dev,tmpaddr, &tmpdata[6]); + efuse_OneByteRead(dev,tmpaddr+1, &tmpdata[7]); + if((data[6]!=tmpdata[6])||(data[7]!=tmpdata[7])){ + badworden &=( ~BIT3); + } + } + return badworden; +} + + +static void +efuse_PowerSwitch(struct net_device* dev, u8 PwrState) +{ + u8 tempval; + if (PwrState == true) + { + tempval = read_nic_byte(dev, EFUSE_TEST+3); + write_nic_byte(dev, EFUSE_TEST+3, (tempval | 0x80)); + + write_nic_byte(dev, EFUSE_CLK, 0x03); + } + else + { + tempval = read_nic_byte(dev, EFUSE_TEST+3); + write_nic_byte(dev, EFUSE_TEST+3, (tempval & 0x7F)); + + write_nic_byte(dev, EFUSE_CLK, 0x02); + } + +} /* efuse_PowerSwitch */ + + +static u16 +efuse_GetCurrentSize(struct net_device* dev) +{ + bool bContinual = true; + + u16 efuse_addr = 0; + u8 hoffset=0,hworden=0; + u8 efuse_data,word_cnts=0; + + + while ( bContinual && + efuse_OneByteRead(dev, efuse_addr ,&efuse_data) && + (efuse_addr < EFUSE_MAX_SIZE) ) + { + if(efuse_data!=0xFF) + { + hoffset = (efuse_data>>4) & 0x0F; + hworden = efuse_data & 0x0F; + word_cnts = efuse_CalculateWordCnts(hworden); + efuse_addr = efuse_addr + (word_cnts*2)+1; + } + else + { + bContinual = false ; + } + } + + + return efuse_addr; + +} + + +static u8 +efuse_CalculateWordCnts(u8 word_en) +{ + u8 word_cnts = 0; + if(!(word_en & BIT0)) word_cnts++; + if(!(word_en & BIT1)) word_cnts++; + if(!(word_en & BIT2)) word_cnts++; + if(!(word_en & BIT3)) word_cnts++; + return word_cnts; +} + + +#if 0 +static void efuse_ResetLoader(struct net_device* dev) +{ + u16 tmpU2b; + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b&~(BIT12))); + mdelay(10); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT12)); + mdelay(10); + +} +#endif + + #ifdef TO_DO_LIST +extern bool +EFUSE_ProgramMap(struct net_device* dev, char* pFileName,u8 TableType) +{ + struct r8192_priv *priv = rtllib_priv(dev); + s4Byte nLinesRead, ithLine; + RT_STATUS rtStatus = RT_STATUS_SUCCESS; + char* szLine; + u32 u4bRegValue, u4RegMask; + u32 u4bMove; + u16 index = 0; + u16 i; + u8 eeprom[HWSET_MAX_SIZE_92S]; + + rtStatus = PlatformReadFile( + dev, + pFileName, + (u8*)(priv->BufOfLines), + MAX_LINES_HWCONFIG_TXT, + MAX_BYTES_LINE_HWCONFIG_TXT, + &nLinesRead + ); + + if(rtStatus == RT_STATUS_SUCCESS) + { + memcp(pHalData->BufOfLines3, pHalData->BufOfLines, + nLinesRead*MAX_BYTES_LINE_HWCONFIG_TXT); + pHalData->nLinesRead3 = nLinesRead; + } + + if(rtStatus == RT_STATUS_SUCCESS) + { + printk("szEepromFile(): read %s ok\n", pFileName); + for(ithLine = 0; ithLine < nLinesRead; ithLine++) + { + szLine = pHalData->BufOfLines[ithLine]; + printk("Line-%d String =%s\n", ithLine, szLine); + + if(!IsCommentString(szLine)) + { + for (i = 0; i < 8; i++) + { + u32 j; + + efuse_ParsingMap(szLine, &u4bRegValue, &u4bMove); + + szLine += u4bMove; + eeprom[index++] = (u8)(u4bRegValue&0xff); + eeprom[index++] = (u8)((u4bRegValue>>8)&0xff); + + printk("Addr-%d = %x\n", (ithLine*8+i), u4bRegValue); + } + } + + } + + } + else + { + printk("szEepromFile(): Fail read%s\n", pFileName); + return RT_STATUS_FAILURE; + } + + + + if (TableType == 1) + { + efuse_WriteAllMap(dev, eeprom, HWSET_MAX_SIZE_92S); + } + else + { + for (i = 0; i < HWSET_MAX_SIZE_92S; i++) + EFUSE_ShadowWrite(dev, 1, i, (u32)eeprom[i]); + } + + return rtStatus; +} /* EFUSE_ProgramMap */ + +#endif + +bool IsHexDigit( char chTmp) +{ + if( (chTmp >= '0' && chTmp <= '9') || + (chTmp >= 'a' && chTmp <= 'f') || + (chTmp >= 'A' && chTmp <= 'F') ) + { + return true; + } + else + { + return false; + } +} + +u32 MapCharToHexDigit(char chTmp) +{ + if(chTmp >= '0' && chTmp <= '9') + return (chTmp - '0'); + else if(chTmp >= 'a' && chTmp <= 'f') + return (10 + (chTmp - 'a')); + else if(chTmp >= 'A' && chTmp <= 'F') + return (10 + (chTmp - 'A')); + else + return 0; +} + +#ifdef TO_DO_LIST +static bool +efuse_ParsingMap(char* szStr,u32* pu4bVal,u32* pu4bMove) +{ + char* szScan = szStr; + + if(szStr == NULL || pu4bVal == NULL || pu4bMove == NULL) + { + return false; + } + + *pu4bMove = 0; + *pu4bVal = 0; + + while( *szScan != '\0' && + (*szScan == ' ' || *szScan == '\t') ) + { + szScan++; + (*pu4bMove)++; + } + + if(!IsHexDigit(*szScan)) + { + return false; + } + + do + { + (*pu4bVal) <<= 4; + *pu4bVal += MapCharToHexDigit(*szScan); + + szScan++; + (*pu4bMove)++; + } while(IsHexDigit(*szScan)); + + return true; + +} /* efuse_ParsingMap */ +#endif + +int efuse_one_byte_rw(struct net_device* dev, u8 bRead, u16 addr, u8 *data) +{ + u32 bResult; + u8 tmpidx = 0; + u8 tmpv8=0; + + + write_nic_byte(dev, EFUSE_CTRL+1, (u8)(addr&0xff)); + tmpv8 = ((u8)((addr>>8) &0x03) ) | (read_nic_byte(dev, EFUSE_CTRL+2)&0xFC ); + write_nic_byte(dev, EFUSE_CTRL+2, tmpv8); + + if(true==bRead){ + + write_nic_byte(dev, EFUSE_CTRL+3, 0x72); + + while(!(0x80 & read_nic_byte(dev, EFUSE_CTRL+3)) && (tmpidx<100) ){ + tmpidx++; + } + if(tmpidx<100){ + *data=read_nic_byte(dev, EFUSE_CTRL); + bResult = true; + } + else + { + *data = 0; + bResult = false; + } + + } + else{ + write_nic_byte(dev, EFUSE_CTRL, *data); + + write_nic_byte(dev, EFUSE_CTRL+3, 0xF2); + + while((0x80 & read_nic_byte(dev, EFUSE_CTRL+3)) && (tmpidx<100) ){ + tmpidx++; + } + if(tmpidx<100) + { + *data=read_nic_byte(dev, EFUSE_CTRL); + bResult = true; + } + else + { + *data = 0; + bResult = false; + } + + } + return bResult; +} +void efuse_access(struct net_device* dev, u8 bRead,u16 start_addr, u8 cnts, u8 *data) +{ + u8 efuse_clk_ori,efuse_clk_new; + u32 i = 0; + + if(start_addr>0x200) return; + efuse_clk_ori = read_nic_byte(dev,SYS_FUNC_EN+1); + efuse_clk_new = efuse_clk_ori|0x20; + + if(efuse_clk_new!= efuse_clk_ori){ + write_nic_byte(dev, SYS_FUNC_EN+1, efuse_clk_new); + } +#ifdef _POWERON_DELAY_ + mdelay(10); +#endif + write_nic_byte(dev, EFUSE_TEST+3, (read_nic_byte(dev, EFUSE_TEST+3)|0x80)); + write_nic_byte(dev, EFUSE_CLK_CTRL, (read_nic_byte(dev, EFUSE_CLK_CTRL)|0x03)); + +#ifdef _PRE_EXECUTE_READ_CMD_ + { + unsigned char tmpdata; + efuse_OneByteRead(dev, 0,&tmpdata); + } +#endif + + for(i=0;i (sizeof(RTL8712_SDIO_EFUSE_TABLE)/sizeof(EFUSE_MAP))){ + return ; + } + + offset = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].offset ; + word_start = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].word_start; + byte_start = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].byte_start; + byte_cnts = RTL8712_SDIO_EFUSE_TABLE[efuse_read_item].byte_cnts; + + if(data_size!=byte_cnts){ + return; + } + + pg_pkt_cnts = (byte_cnts /PGPKT_DATA_SIZE) +1; + + if(pg_pkt_cnts > 1){ + tmpdata = efusedata; + + if(tmpdata!=NULL) + { + memset(tmpdata,0xff,pg_pkt_cnts*PGPKT_DATA_SIZE); + + for(tmpidx=0;tmpidx (sizeof(RTL8712_SDIO_EFUSE_TABLE)/sizeof(EFUSE_MAP))){ + return ; + } + + offset = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].offset ; + word_start = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].word_start; + byte_start = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].byte_start; + byte_cnts = RTL8712_SDIO_EFUSE_TABLE[efuse_write_item].byte_cnts; + + if(data_size > byte_cnts){ + return; + } + pg_pkt_cnts = (byte_cnts /PGPKT_DATA_SIZE) +1; + word_cnts = byte_cnts /2 ; + + if(byte_cnts %2){ + word_cnts+=1; + } + if((byte_start==1)||((byte_cnts%2)==1)){ + + if((efuse_write_item==EFUSE_F0CIS)||(efuse_write_item==EFUSE_F1CIS)){ + memset(pg_data,0xff,PGPKT_DATA_SIZE); + efuse_PgPacketRead(dev,offset,pg_data); + + if(efuse_write_item==EFUSE_F0CIS){ + word_en = 0x07; + memcpy(pg_data+word_start*2+byte_start,data,sizeof(u8)*2); + efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); + + word_en = 0x00; + efuse_PgPacketWrite(dev,(offset+1),word_en,data+2); + + word_en = 0x00; + efuse_PgPacketRead(dev,offset+2,pg_data); + memcpy(pg_data,data+2+8,sizeof(u8)*7); + + efuse_PgPacketWrite(dev,(offset+2),word_en,pg_data); + } + else if(efuse_write_item==EFUSE_F1CIS){ + word_en = 0x07; + efuse_PgPacketRead(dev,offset,pg_data); + pg_data[7] = data[0]; + efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); + + word_en = 0x00; + for(tmpidx = 0 ;tmpidx<(word_cnts/4);tmpidx++){ + efuse_PgPacketWrite(dev,(offset+1+tmpidx),word_en,data+1+(tmpidx*PGPKT_DATA_SIZE)); + } + } + + } + else{ + memset(pg_data,0xff,PGPKT_DATA_SIZE); + if((efuse_write_item==EFUSE_SDIO_SETTING)||(efuse_write_item==EFUSE_CCCR)){ + word_en = 0x0e ; + tmpbytes = 2; + } + else if(efuse_write_item == EFUSE_SDIO_MODE){ + word_en = 0x0d ; + tmpbytes = 2; + } + else if(efuse_write_item == EFUSE_OCR){ + word_en = 0x09 ; + tmpbytes = 4; + } + else if((efuse_write_item == EFUSE_EEPROM_VER)||(efuse_write_item==EFUSE_CHAN_PLAN)){ + word_en = 0x07 ; + tmpbytes = 2; + } + if(bWordUnit==true){ + memcpy(pg_data+word_start*2 ,data,sizeof(u8)*tmpbytes); + } + else{ + efuse_PgPacketRead(dev,offset,pg_data); + memcpy(pg_data+(2*word_start)+byte_start,data,sizeof(u8)*byte_cnts); + } + + efuse_PgPacketWrite(dev,offset,word_en,pg_data+(word_start*2)); + + } + + } + else if(pg_pkt_cnts>1){ + if(word_start==0){ + word_en = 0x00; + for(tmpidx = 0 ;tmpidx<(word_cnts/4);tmpidx++) + { + efuse_PgPacketWrite(dev,(offset+tmpidx),word_en,data+(tmpidx*PGPKT_DATA_SIZE)); + } + word_en = 0x0f; + for(tmpidx= 0; tmpidx<(word_cnts%4) ; tmpidx++) + { + tmpbitmask =tmpidx; + word_en &= (~(EFUSE_BIT(tmpbitmask))); + } + efuse_PgPacketWrite(dev,offset+(word_cnts/4),word_en,data+((word_cnts/4)*PGPKT_DATA_SIZE)); + }else + { + + } + } + else{ + word_en = 0x0f; + for(tmpidx= 0; tmpidx +******************************************************************************/ +#ifndef __INC_HAL8192SE_FW_IMG_H +#define __INC_HAL8192SE_FW_IMG_H + +/*Created on 2009/11/17, 16:15*/ + +#include +#define ImgArrayLength 88592 +extern u8 Rtl8192SEFwImgArray[ImgArrayLength]; +#define MainArrayLength 1 +extern u8 Rtl8192SEFwMainArray[MainArrayLength]; +#define DataArrayLength 1 +extern u8 Rtl8192SEFwDataArray[DataArrayLength]; +#define PHY_REG_2T2RArrayLength 372 +extern u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength]; +#define PHY_REG_1T2RArrayLength 1 +extern u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength]; +#define PHY_ChangeTo_1T1RArrayLength 48 +extern u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength]; +#define PHY_ChangeTo_1T2RArrayLength 45 +extern u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength]; +#define PHY_ChangeTo_2T2RArrayLength 45 +extern u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength]; +#define PHY_REG_Array_PGLength 84 +extern u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength]; +#define RadioA_1T_ArrayLength 202 +extern u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength]; +#define RadioB_ArrayLength 22 +extern u32 Rtl8192SERadioB_Array[RadioB_ArrayLength]; +#define RadioA_to1T_ArrayLength 196 +extern u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength]; +#define RadioA_to2T_ArrayLength 196 +extern u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength]; +#define RadioB_GM_ArrayLength 10 +extern u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength]; +#define MAC_2T_ArrayLength 106 +extern u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength]; +#define MACPHY_Array_PGLength 1 +extern u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength]; +#define AGCTAB_ArrayLength 320 +extern u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength]; + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg74.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg74.c @@ -0,0 +1,6398 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +/*Created on 2009/11/17, 16:15*/ + +#ifdef RTL8192SE +#include "r8192S_hwimg.h" + +u8 Rtl8192SEFwImgArray[ImgArrayLength] = { +0x92,0x81,0x4a,0x70,0x30,0x00,0x00,0x00,0x08,0xa4,0x00,0x00,0x88,0xb5,0x00,0x00, +0x30,0x00,0x00,0x00,0x00,0xb4,0x00,0x00,0x4a,0x00,0x00,0x00,0x11,0x17,0x13,0x29, +0x92,0x81,0x01,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x7f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x1f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x25,0xb0,0x1a,0x3c,0x80,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c,0x80,0x00,0x7b,0x37, +0x00,0x00,0x5b,0xaf,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c, +0x80,0x00,0x7b,0x37,0x00,0x00,0x5b,0xaf,0x01,0x80,0x1a,0x3c,0x10,0x9d,0x5a,0x27, +0x08,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0xa1,0xaf,0x08,0x00,0xa2,0xaf,0x0c,0x00,0xa3,0xaf,0x10,0x00,0xa4,0xaf, +0x14,0x00,0xa5,0xaf,0x18,0x00,0xa6,0xaf,0x1c,0x00,0xa7,0xaf,0x20,0x00,0xa8,0xaf, +0x24,0x00,0xa9,0xaf,0x28,0x00,0xaa,0xaf,0x2c,0x00,0xab,0xaf,0x30,0x00,0xac,0xaf, +0x34,0x00,0xad,0xaf,0x38,0x00,0xae,0xaf,0x3c,0x00,0xaf,0xaf,0x12,0x40,0x00,0x00, +0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0xb0,0xaf,0x44,0x00,0xb1,0xaf, +0x48,0x00,0xb2,0xaf,0x4c,0x00,0xb3,0xaf,0x50,0x00,0xb4,0xaf,0x54,0x00,0xb5,0xaf, +0x58,0x00,0xb6,0xaf,0x5c,0x00,0xb7,0xaf,0x60,0x00,0xb8,0xaf,0x64,0x00,0xb9,0xaf, +0x68,0x00,0xbc,0xaf,0x6c,0x00,0xbd,0xaf,0x70,0x00,0xbe,0xaf,0x74,0x00,0xbf,0xaf, +0x78,0x00,0xa8,0xaf,0x7c,0x00,0xa9,0xaf,0x80,0x00,0xaa,0xaf,0xda,0x26,0x00,0x08, +0x21,0x20,0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xff,0xff,0x88,0x30,0x80,0x28,0x08,0x00,0x2a,0xb0,0x0a,0x3c,0x21,0x38,0xaa,0x00, +0x0c,0x00,0xe6,0x8c,0x02,0x80,0x03,0x3c,0xcc,0x3f,0x63,0x24,0x25,0xb0,0x02,0x3c, +0xb0,0x03,0x42,0x34,0x21,0x28,0xa3,0x00,0xff,0x00,0xc4,0x30,0xff,0x00,0x09,0x24, +0x00,0x00,0x45,0xac,0x00,0x00,0x43,0xac,0x05,0x00,0x89,0x10,0x00,0x00,0x00,0x00, +0x00,0x80,0xc2,0x30,0x04,0x00,0x40,0x10,0x00,0x80,0x02,0x3c,0x0c,0x00,0xe2,0xac, +0x08,0x00,0xe0,0x03,0x21,0x10,0xc0,0x00,0x00,0xff,0x02,0x3c,0x24,0x10,0xc2,0x00, +0xfb,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x21,0x20,0x0a,0x01,0x40,0x00,0x82,0x90, +0x00,0x00,0x00,0x00,0xff,0x00,0x43,0x30,0x12,0x00,0x69,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0xa3,0xa0,0x40,0x00,0x83,0x90,0x00,0x00,0xa6,0x90,0xff,0x00,0x63,0x30, +0xff,0x00,0xc2,0x30,0xfa,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x20,0xb0,0x03,0x3c, +0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,0x0c,0x00,0x46,0x8c,0x25,0xb0,0x03,0x3c, +0xb0,0x03,0x63,0x34,0x21,0x10,0xc0,0x00,0x00,0x00,0x66,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0xa6,0x90,0xe7,0x00,0x00,0x08,0xff,0x00,0xc2,0x30, +0xff,0xff,0x84,0x30,0x80,0x20,0x04,0x00,0x2a,0xb0,0x02,0x3c,0x21,0x48,0x82,0x00, +0x00,0x00,0x25,0x8d,0x02,0x80,0x02,0x3c,0xec,0x3f,0x42,0x24,0x21,0x40,0x82,0x00, +0x25,0xb0,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb0,0x03,0x67,0x34,0xcc,0x3f,0x42,0x24, +0xff,0x00,0xa4,0x30,0xff,0x00,0x03,0x24,0x00,0x00,0xe8,0xac,0x00,0x80,0xa6,0x30, +0x00,0x00,0xe2,0xac,0x06,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x00,0xff,0x02,0x3c, +0x05,0x00,0xc0,0x10,0x24,0x10,0xa2,0x00,0x00,0x80,0x02,0x3c,0x00,0x00,0x22,0xad, +0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0xfd,0xff,0x40,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x03,0x91,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x0c,0x00,0x65,0x8c,0x00,0x00,0x00,0x00,0x21,0x10,0xa0,0x00,0x00,0x00,0xe5,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x05,0x3c,0x00,0x80,0x02,0x3c, +0xe0,0xff,0xbd,0x27,0x18,0x03,0xa3,0x34,0x68,0x04,0x42,0x24,0x18,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x42,0xb0,0x02,0x3c,0x03,0x00,0x46,0x34, +0x00,0x00,0xc3,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x70,0x30,0x10,0x00,0x02,0x32, +0x18,0x00,0x40,0x10,0x02,0x80,0x11,0x3c,0x78,0x1b,0x27,0x26,0xec,0x23,0xe4,0x94, +0x10,0x00,0x02,0x24,0x00,0x00,0xc2,0xa0,0x08,0x00,0x80,0x10,0x1c,0x03,0xa3,0x34, +0xf0,0x23,0xe2,0x94,0xb0,0x03,0xa4,0x34,0x00,0x00,0x62,0xa0,0x00,0x00,0x80,0xac, +0xec,0x23,0xe0,0xa4,0xf0,0x23,0xe0,0xa4,0x00,0x00,0x04,0x24,0x02,0x80,0x05,0x3c, +0x02,0x80,0x06,0x3c,0x8c,0x43,0xa2,0x8c,0xbc,0x44,0xc3,0x8c,0x01,0x00,0x84,0x24, +0x01,0x00,0x42,0x24,0x01,0x00,0x63,0x24,0xec,0x23,0xe4,0xa4,0x8c,0x43,0xa2,0xac, +0xbc,0x44,0xc3,0xac,0x00,0x16,0x10,0x00,0x03,0x16,0x02,0x00,0x71,0x00,0x40,0x04, +0x42,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x40,0x00,0x02,0x32,0x16,0x00,0x40,0x10,0x78,0x1b,0x24,0x26, +0x42,0xb0,0x03,0x3c,0x40,0x00,0x02,0x24,0x03,0x00,0x63,0x34,0x00,0x00,0x62,0xa0, +0x02,0x80,0x03,0x3c,0xb6,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x1a,0x00,0x40,0x10, +0x02,0x80,0x04,0x3c,0xb6,0x44,0x60,0xa0,0x02,0x80,0x04,0x3c,0xb2,0x44,0x83,0x90, +0xfd,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0xb2,0x44,0x83,0xa0,0xb2,0x44,0x82,0x90, +0x00,0x00,0x00,0x00,0x07,0x00,0x42,0x30,0x2c,0x00,0x40,0x10,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x24,0x26,0x18,0x0b,0x83,0x94,0x14,0x0b,0x85,0x94,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c, +0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,0x20,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4, +0x08,0x00,0xe0,0x03,0x14,0x0b,0x83,0xa4,0x9e,0x44,0x82,0x90,0x02,0x80,0x05,0x3c, +0x01,0x00,0x42,0x24,0x9e,0x44,0x82,0xa0,0xb2,0x44,0xa3,0x90,0xef,0xff,0x02,0x24, +0x24,0x18,0x62,0x00,0xb2,0x44,0xa3,0xa0,0x9e,0x44,0x82,0x90,0x00,0x00,0x00,0x00, +0x02,0x00,0x42,0x2c,0x24,0x00,0x40,0x14,0x78,0x1b,0x23,0x26,0xe8,0x0a,0x62,0x90, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x3d,0x00,0x40,0x10,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0xdc,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xb9,0x44,0x62,0xa0,0x65,0x01,0x00,0x08,0x78,0x1b,0x24,0x26,0xb0,0x44,0x40,0xa0, +0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30, +0x78,0x1b,0x24,0x26,0x18,0x0b,0x83,0x94,0x14,0x0b,0x85,0x94,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c, +0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,0x20,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4, +0x08,0x00,0xe0,0x03,0x14,0x0b,0x83,0xa4,0x02,0x80,0x05,0x3c,0x02,0x80,0x03,0x3c, +0xac,0x44,0xa2,0x8c,0xa4,0x44,0x64,0x8c,0x02,0x80,0x03,0x3c,0x21,0x10,0x44,0x00, +0xac,0x44,0xa2,0xac,0xac,0x44,0xa4,0x8c,0x25,0xb0,0x02,0x3c,0xe4,0x02,0x42,0x34, +0x00,0x00,0x44,0xac,0xa0,0x44,0x62,0x94,0x02,0x80,0x05,0x3c,0x99,0x44,0xa4,0x90, +0xff,0xff,0x42,0x30,0x40,0x10,0x02,0x00,0xf6,0xff,0x42,0x24,0x02,0x80,0x03,0x3c, +0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x0c,0x88,0x44,0x62,0xac,0x95,0x01,0x00,0x08, +0x78,0x1b,0x24,0x26,0x80,0xff,0x03,0x24,0x03,0x00,0x42,0x34,0x00,0x00,0x43,0xa0, +0x1b,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0x49,0x01,0x00,0x08,0x00,0x00,0x00,0x00, +0xb9,0x44,0x40,0xa0,0x65,0x01,0x00,0x08,0x78,0x1b,0x24,0x26,0xff,0x00,0x84,0x30, +0x0b,0x00,0x82,0x2c,0xff,0xff,0xe7,0x30,0x10,0x00,0xa8,0x93,0x19,0x00,0x40,0x10, +0x21,0x18,0x00,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00,0x48,0xaf,0x63,0x24, +0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00, +0x00,0x00,0x00,0x00,0x43,0xb0,0x02,0x3c,0x78,0x00,0x44,0x34,0x07,0x00,0xe2,0x30, +0x00,0x00,0x85,0xac,0x04,0x00,0x86,0xac,0x04,0x00,0x40,0x18,0x00,0x00,0x00,0x00, +0xf8,0xff,0xe2,0x30,0x08,0x00,0x42,0x24,0xff,0xff,0x47,0x30,0x21,0x10,0xe8,0x00, +0x00,0x80,0x03,0x3c,0x08,0x00,0x82,0xac,0x25,0x10,0x43,0x00,0x08,0x00,0x82,0xac, +0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x43,0xb0,0x02,0x3c, +0xd3,0x01,0x00,0x08,0x6c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08, +0x60,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x54,0x00,0x44,0x34, +0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x48,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c, +0xd3,0x01,0x00,0x08,0x3c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08, +0x30,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x24,0x00,0x44,0x34, +0x43,0xb0,0x02,0x3c,0xd3,0x01,0x00,0x08,0x18,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c, +0xd3,0x01,0x00,0x08,0x0c,0x00,0x44,0x34,0xd3,0x01,0x00,0x08,0x43,0xb0,0x04,0x3c, +0x01,0x00,0x02,0x24,0x43,0xb0,0x03,0x3c,0x04,0x20,0x82,0x00,0x88,0x00,0x65,0x34, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0xff,0x42,0x30,0x05,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x00,0x00,0xa2,0x94,0x00,0x00,0x00,0x00, +0xff,0xff,0x42,0x30,0x24,0x10,0x44,0x00,0xf5,0xff,0x40,0x1c,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c,0x00,0x80,0x02,0x3c, +0xd0,0xff,0xbd,0x27,0x18,0x03,0x03,0x35,0x48,0x08,0x42,0x24,0x00,0x00,0x62,0xac, +0x28,0x00,0xb4,0xaf,0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0x2c,0x00,0xbf,0xaf, +0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,0x08,0x00,0xf3,0x8c,0xff,0x00,0xc6,0x30, +0x00,0x01,0x02,0x24,0x0c,0x00,0xf1,0x84,0x23,0x10,0x46,0x00,0xff,0xff,0xa3,0x30, +0xff,0xff,0x50,0x30,0xff,0x00,0x94,0x30,0xd0,0x03,0x08,0x35,0x21,0x30,0xc5,0x00, +0x21,0x20,0x80,0x02,0x21,0x28,0x60,0x02,0x21,0x38,0x00,0x02,0x02,0x92,0x03,0x00, +0x00,0x00,0x11,0xad,0x00,0x00,0x13,0xad,0x42,0x02,0x00,0x08,0x00,0x00,0x00,0x00, +0x01,0x01,0x23,0x2a,0xff,0xff,0x22,0x32,0x21,0x98,0x70,0x02,0x21,0x20,0x80,0x02, +0x00,0x01,0x10,0x24,0x00,0x02,0x00,0x0c,0x0b,0x80,0x43,0x00,0xc0,0x10,0x12,0x00, +0x28,0xb0,0x03,0x3c,0x21,0x10,0x43,0x00,0x00,0x00,0x45,0x90,0x20,0x10,0x06,0x3c, +0x21,0x20,0x80,0x02,0xff,0x00,0xb2,0x30,0x00,0x12,0x12,0x00,0x21,0x30,0x46,0x00, +0x21,0x28,0x60,0x02,0x21,0x38,0x00,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x23,0x18,0x30,0x02,0x00,0x8c,0x03,0x00,0x03,0x8c,0x11,0x00,0xe8,0xff,0x20,0x1e, +0x00,0x00,0x00,0x00,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x30,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x18,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf, +0x21,0x38,0x80,0x00,0x02,0x80,0x02,0x3c,0x78,0x1b,0x44,0x24,0x00,0x00,0xe8,0x94, +0x28,0x24,0x83,0x8c,0x21,0x80,0xa0,0x00,0x27,0x10,0x08,0x00,0x2b,0x10,0x62,0x00, +0x03,0x00,0x40,0x10,0x21,0x28,0xc0,0x00,0x21,0x10,0x68,0x00,0x28,0x24,0x82,0xac, +0x04,0x24,0x82,0x8c,0x04,0x00,0xe3,0x8c,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30, +0x20,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,0x08,0x00,0xe2,0x8c,0xff,0xe0,0x03,0x3c, +0xff,0xff,0x63,0x34,0x00,0x26,0x04,0x00,0x24,0x10,0x43,0x00,0x25,0x18,0x44,0x00, +0x10,0x00,0xe4,0x8c,0x00,0x00,0x00,0x00,0x1a,0x00,0x80,0x04,0x08,0x00,0xe3,0xac, +0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,0x05,0x00,0x40,0x14,0x02,0x00,0x04,0x24, +0xc0,0xff,0x02,0x24,0x24,0x10,0x62,0x00,0x0f,0x00,0x42,0x34,0x08,0x00,0xe2,0xac, +0x21,0x30,0x00,0x02,0x01,0x00,0x02,0x24,0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xa2,0xaf,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x50,0xac, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb0,0x8f,0x02,0x00,0x04,0x24,0x00,0x02,0x00,0x08, +0x20,0x00,0xbd,0x27,0x10,0x00,0xe4,0x8c,0x08,0x00,0xe3,0x8c,0xe9,0xff,0x81,0x04, +0x82,0x11,0x03,0x00,0x14,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00,0x42,0x12,0x02,0x00, +0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,0xe2,0xff,0x40,0x14,0x82,0x11,0x03,0x00, +0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,0x70,0x02,0x00,0x08, +0x10,0x00,0xe2,0xac,0xff,0xff,0x84,0x30,0x2a,0xb0,0x02,0x3c,0x0d,0x00,0x42,0x34, +0x80,0x20,0x04,0x00,0x21,0x20,0x82,0x00,0x04,0x00,0x82,0x24,0xff,0xff,0xa5,0x30, +0x0b,0x20,0x45,0x00,0x01,0x00,0x03,0x24,0x02,0x00,0x02,0x24,0x00,0x00,0x83,0xa0, +0x00,0x00,0x82,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xc0,0xff,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,0x24,0x00,0xb3,0xaf,0x78,0x1b,0x53,0x24, +0x00,0x80,0x02,0x3c,0x38,0x00,0xbe,0xaf,0x8c,0x0a,0x42,0x24,0xb0,0x03,0x7e,0x34, +0x18,0x03,0x63,0x34,0x2c,0x00,0xb5,0xaf,0x3c,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf, +0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x21,0xa8,0x60,0x02,0xc0,0x24,0x62,0x8e, +0x2c,0x25,0x72,0x8e,0x21,0x20,0x00,0x00,0x00,0x00,0xc2,0xaf,0xc4,0x24,0x62,0xae, +0x00,0x00,0xd2,0xaf,0x00,0x02,0x00,0x0c,0x21,0xa0,0xa0,0x02,0x2c,0x25,0x64,0x8e, +0x30,0x25,0x63,0x8e,0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00, +0x0a,0x18,0x82,0x00,0x02,0x80,0x02,0x3c,0x2c,0x25,0x63,0xae,0x74,0xaf,0x42,0x24, +0x2c,0x25,0xa5,0x8e,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac, +0x02,0x80,0x02,0x3c,0xff,0xff,0x43,0x32,0x25,0x80,0x62,0x00,0x00,0x00,0x90,0xac, +0x0c,0x00,0x02,0x92,0xff,0x00,0x16,0x24,0x01,0x00,0x17,0x24,0x00,0x00,0x82,0xac, +0x0c,0x00,0x11,0x92,0x20,0x10,0x02,0x3c,0x21,0x20,0x00,0x00,0x00,0x1a,0x11,0x00, +0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x05,0x00,0x36,0x12,0x40,0x00,0x07,0x24, +0xc0,0x24,0xa3,0xae,0x74,0x24,0xb1,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x00,0x00,0x02,0x96,0x24,0x24,0x83,0x8e,0x21,0x28,0x40,0x02,0x27,0x30,0x02,0x00, +0x21,0x10,0x62,0x00,0x2b,0x18,0x66,0x00,0x21,0x20,0x00,0x00,0x02,0x00,0x60,0x10, +0x40,0x00,0x07,0x24,0x24,0x24,0x82,0xae,0x04,0x00,0x06,0x8e,0x08,0x00,0x03,0x8e, +0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0xc6,0x30,0x24,0x18,0x62,0x00, +0x00,0x36,0x06,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x66,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x00,0x40,0x06,0x3c,0x25,0x18,0x66,0x00,0xc0,0xff,0x02,0x24, +0x24,0x18,0x62,0x00,0x08,0x00,0x03,0xae,0xc4,0x24,0xa6,0x8e,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xb7,0xaf,0xc4,0x24,0xa3,0x8e,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x21,0x20,0x00,0x00,0x2a,0xb0,0x02,0x3c, +0x01,0x00,0x42,0x34,0x02,0x00,0x03,0x24,0x00,0x00,0x57,0xa0,0x00,0x00,0x43,0xa0, +0xae,0xff,0x36,0x16,0x41,0xb0,0x03,0x3c,0x08,0x0b,0xa2,0x8e,0x3c,0x00,0xbf,0x8f, +0x00,0x38,0x42,0x34,0x00,0x00,0x62,0xac,0x38,0x00,0xbe,0x8f,0x08,0x0b,0xa2,0xae, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c, +0xc0,0xff,0xbd,0x27,0x18,0x03,0x83,0x34,0x68,0x0c,0x42,0x24,0x3c,0x00,0xbf,0xaf, +0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf, +0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x78,0x1b,0x55,0x24,0xb0,0x03,0x96,0x34, +0x4e,0x03,0x00,0x08,0x21,0xf0,0xa0,0x02,0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34, +0x02,0x80,0x03,0x3c,0x78,0x1b,0x71,0x24,0x08,0x00,0x02,0xae,0xdc,0x24,0x26,0x8e, +0x01,0x00,0x04,0x24,0x21,0x28,0x80,0x02,0x40,0x00,0x07,0x24,0x01,0x00,0x12,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xb2,0xaf,0xdc,0x24,0x23,0x8e,0x25,0xb0,0x02,0x3c, +0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24, +0x82,0x0b,0x22,0x92,0x00,0x00,0x00,0x00,0x88,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c, +0x09,0x00,0x42,0x34,0x02,0x00,0x03,0x24,0x00,0x00,0x52,0xa0,0x00,0x00,0x43,0xa0, +0x9d,0x00,0x77,0x12,0x00,0x00,0x00,0x00,0xd8,0x24,0xa2,0x8e,0x44,0x25,0xb4,0x8e, +0x01,0x00,0x04,0x24,0x00,0x00,0xc2,0xae,0xdc,0x24,0xa2,0xae,0x00,0x00,0xd4,0xae, +0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,0x44,0x25,0xa4,0x8e,0x48,0x25,0xa3,0x8e, +0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00, +0x44,0x25,0xa3,0xae,0x44,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xae, +0x02,0x80,0x11,0x3c,0xff,0xff,0x82,0x32,0x25,0x80,0x51,0x00,0x00,0x00,0xd0,0xae, +0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xae,0x02,0x00,0x02,0x92, +0x06,0x00,0x03,0x96,0x21,0x10,0x54,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30, +0x12,0x00,0x60,0x10,0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,0x00,0x00,0x00,0x00, +0x01,0x00,0x62,0x24,0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,0x00,0xf0,0x02,0x3c, +0xff,0x0f,0x63,0x30,0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,0x24,0x20,0x82,0x00, +0x25,0x20,0x85,0x00,0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,0x00,0x19,0x03,0x00, +0x0f,0x00,0x42,0x30,0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,0x02,0x80,0x03,0x3c, +0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x17,0x00,0x40,0x10,0x02,0x80,0x03,0x3c, +0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x77,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x0b,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x54,0x00,0xff,0xff,0x42,0x30, +0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30, +0x6a,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x0c,0x00,0x13,0x92,0xff,0x00,0x17,0x24, +0x0d,0x00,0x77,0x12,0x02,0x80,0x02,0x3c,0x78,0x1b,0x48,0x24,0x00,0x1a,0x13,0x00, +0x20,0x10,0x02,0x3c,0x44,0x25,0x05,0x8d,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0x01,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0xd8,0x24,0x03,0xad,0x78,0x24,0x13,0xa1, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x04,0x00,0x04,0x8e,0x08,0x00,0x03,0x8e, +0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0x84,0x30,0x24,0x18,0x62,0x00, +0x00,0x26,0x04,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x82,0x11,0x03,0x00, +0x01,0x00,0x42,0x30,0x78,0xff,0x40,0x10,0xc0,0xff,0x02,0x24,0x08,0x00,0x03,0xae, +0x02,0x80,0x03,0x3c,0x78,0x1b,0x71,0x24,0xdc,0x24,0x26,0x8e,0x01,0x00,0x04,0x24, +0x21,0x28,0x80,0x02,0x40,0x00,0x07,0x24,0x01,0x00,0x12,0x24,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xb2,0xaf,0xdc,0x24,0x23,0x8e,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24,0x82,0x0b,0x22,0x92, +0x00,0x00,0x00,0x00,0x7a,0xff,0x40,0x14,0x2a,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x82,0x0b,0x32,0xa2, +0x02,0x00,0x02,0x92,0x02,0x80,0x03,0x3c,0x21,0x10,0x54,0x00,0xff,0xff,0x42,0x30, +0x25,0x10,0x43,0x00,0x02,0x00,0x45,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0xa4,0x30, +0x00,0xc0,0x84,0x24,0xff,0xff,0x84,0x30,0x2c,0x22,0x00,0x0c,0x83,0x0b,0x25,0xa2, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c, +0x09,0x00,0x42,0x34,0x02,0x00,0x03,0x24,0x00,0x00,0x52,0xa0,0x00,0x00,0x43,0xa0, +0x65,0xff,0x77,0x16,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0b,0x22,0x8e,0x41,0xb0,0x03,0x3c, +0x3c,0x00,0xbf,0x8f,0x00,0x38,0x42,0x34,0x00,0x00,0x62,0xac,0x38,0x00,0xbe,0x8f, +0x08,0x0b,0x22,0xae,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f, +0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f, +0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x55,0x1f,0x00,0x0c, +0x01,0x00,0x04,0x24,0x8a,0x03,0x00,0x08,0x02,0x80,0x03,0x3c,0xb1,0x44,0x43,0x90, +0x00,0x00,0x00,0x00,0x94,0xff,0x60,0x14,0x00,0x10,0x82,0x34,0x9a,0x03,0x00,0x08, +0x00,0x00,0xa2,0xa4,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x24,0x10,0x63,0x24, +0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xc0,0xff,0xbd,0x27,0x2c,0x00,0xb5,0xaf,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf, +0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf, +0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c, +0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34, +0x40,0x10,0x63,0x24,0x40,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,0x21,0xa8,0x00,0x00, +0x03,0x00,0x80,0x10,0x7f,0x00,0xa2,0x30,0xbf,0x00,0xa2,0x30,0x01,0x00,0x15,0x24, +0x54,0x44,0xc2,0xa0,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x52,0x24,0x02,0x80,0x17,0x3c,0x02,0x80,0x14,0x3c, +0x21,0xf0,0x40,0x02,0x4c,0x04,0x00,0x08,0x21,0xb0,0x40,0x02,0x58,0x24,0xd0,0xa3, +0xfc,0x24,0x45,0x8e,0x90,0x24,0x46,0x8e,0x03,0x00,0x04,0x24,0x40,0x00,0x07,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x94,0x24,0xc5,0x8e,0x21,0x20,0x20,0x02, +0x51,0x02,0x00,0x0c,0x21,0x30,0x60,0x02,0x21,0x20,0x00,0x00,0x21,0x28,0xa0,0x02, +0x95,0x02,0x00,0x0c,0x21,0x30,0x00,0x02,0x9c,0x43,0x82,0x96,0x25,0xb0,0x05,0x3c, +0x66,0x03,0xa4,0x34,0x01,0x00,0x42,0x24,0x9c,0x43,0x82,0xa6,0x9c,0x43,0x83,0x96, +0xff,0x00,0x02,0x24,0x00,0x00,0x83,0xa4,0x5f,0x00,0x02,0x12,0x00,0x00,0x00,0x00, +0x90,0x24,0x42,0x8e,0x03,0x00,0x04,0x24,0xfc,0x24,0x53,0x8e,0x00,0x02,0x00,0x0c, +0x94,0x24,0x42,0xae,0xfc,0x24,0x44,0x8e,0x00,0x25,0x43,0x8e,0x02,0x80,0x10,0x3c, +0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00, +0xff,0xff,0x65,0x32,0x25,0x88,0xb0,0x00,0xfc,0x24,0x43,0xae,0x02,0x00,0x22,0x92, +0x06,0x00,0x23,0x96,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30, +0x11,0x00,0x60,0x10,0x25,0x28,0x50,0x00,0xec,0x0c,0x44,0x96,0x00,0xf0,0x06,0x3c, +0xff,0xff,0xc6,0x34,0x01,0x00,0x82,0x24,0xec,0x0c,0x42,0xa6,0x0c,0x00,0x23,0x8e, +0xff,0x0f,0x84,0x30,0x00,0x14,0x04,0x00,0x24,0x18,0x66,0x00,0x25,0x18,0x62,0x00, +0x0c,0x00,0x23,0xae,0x16,0x00,0xa2,0x94,0x00,0x21,0x04,0x00,0x0f,0x00,0x42,0x30, +0x25,0x10,0x44,0x00,0x16,0x00,0xa2,0xa4,0x98,0x44,0xe2,0x92,0x00,0x00,0x00,0x00, +0x1c,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00, +0x02,0x00,0x42,0x30,0x21,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c, +0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28, +0x0b,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x00,0x22,0x92,0x00,0x00,0x00,0x00, +0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x25,0x28,0x50,0x00,0x00,0x00,0xa4,0x94, +0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30,0x43,0x00,0x62,0x10,0x02,0x80,0x02,0x3c, +0x98,0x44,0xe2,0x92,0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x0f,0x00,0x43,0x10, +0x02,0x80,0x03,0x3c,0x0c,0x00,0x30,0x92,0xff,0x00,0x02,0x24,0xa6,0xff,0x02,0x12, +0x00,0x12,0x10,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,0x9b,0xff,0xa0,0x16, +0x90,0x24,0xc2,0xaf,0x34,0x04,0x00,0x08,0x54,0x24,0xd0,0xa3,0x55,0x1f,0x00,0x0c, +0x01,0x00,0x04,0x24,0x7c,0x04,0x00,0x08,0x02,0x80,0x03,0x3c,0xb3,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xee,0xff,0x40,0x10,0x02,0x80,0x03,0x3c, +0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,0xb2,0x44,0x62,0xa0, +0x91,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x29,0x00,0xa0,0x12,0x2a,0xb0,0x02,0x3c, +0x58,0x24,0xc3,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x41,0x00,0x42,0x34, +0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,0x08,0x0b,0xa4,0x8c, +0x01,0x00,0x02,0x3c,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x80,0x42,0x34, +0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x64,0xac, +0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,0xb1,0x44,0x43,0x90,0x00,0x00,0x00,0x00, +0xbb,0xff,0x60,0x14,0x00,0x10,0x82,0x34,0x8c,0x04,0x00,0x08,0x00,0x00,0xa2,0xa4, +0x54,0x24,0xc3,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x40,0x00,0x42,0x34, +0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,0x08,0x0b,0xa4,0x8c, +0x01,0x00,0x02,0x3c,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x80,0x42,0x34, +0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x64,0xac, +0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,0xb8,0xff,0xbd,0x27,0x44,0x00,0xbf,0xaf, +0x40,0x00,0xbe,0xaf,0x3c,0x00,0xb7,0xaf,0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf, +0x30,0x00,0xb4,0xaf,0x2c,0x00,0xb3,0xaf,0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf, +0x20,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c,0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,0xd8,0x13,0x63,0x24,0x10,0x00,0xa4,0x30, +0x00,0x00,0x43,0xac,0x18,0x00,0xa0,0xaf,0x04,0x00,0x80,0x10,0xdf,0x00,0xa2,0x30, +0x01,0x00,0x03,0x24,0xef,0x00,0xa2,0x30,0x18,0x00,0xa3,0xaf,0x54,0x44,0xc2,0xa0, +0x54,0x44,0xc3,0x90,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x02,0x80,0x17,0x3c,0x78,0x1b,0xf4,0x26,0x21,0xa8,0x40,0x00,0x02,0x80,0x16,0x3c, +0x39,0x05,0x00,0x08,0x21,0xf0,0x80,0x02,0x60,0x24,0x71,0xa0,0x78,0x1b,0xe2,0x26, +0x9c,0x24,0x46,0x8c,0x08,0x25,0x45,0x8c,0x04,0x00,0x04,0x24,0x40,0x00,0x07,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x78,0x1b,0xf2,0x26,0xa0,0x24,0x45,0x8e, +0x21,0x20,0x00,0x02,0x51,0x02,0x00,0x0c,0x21,0x30,0x60,0x02,0x18,0x00,0xa5,0x8f, +0x02,0x00,0x04,0x24,0x95,0x02,0x00,0x0c,0x21,0x30,0x20,0x02,0x9c,0x43,0xc2,0x96, +0x25,0xb0,0x05,0x3c,0x66,0x03,0xa4,0x34,0x01,0x00,0x42,0x24,0x9c,0x43,0xc2,0xa6, +0x9c,0x43,0xc3,0x96,0xff,0x00,0x02,0x24,0x00,0x00,0x83,0xa4,0x71,0x00,0x22,0x12, +0x00,0x00,0x00,0x00,0x9c,0x24,0x82,0x8e,0x08,0x25,0x93,0x8e,0x04,0x00,0x04,0x24, +0x00,0x00,0xa2,0xae,0xa0,0x24,0x82,0xae,0x00,0x00,0xb3,0xae,0x00,0x02,0x00,0x0c, +0x00,0x00,0x00,0x00,0x08,0x25,0x84,0x8e,0x0c,0x25,0x83,0x8e,0x40,0x00,0x84,0x24, +0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x08,0x25,0x83,0xae, +0x08,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xae,0x02,0x80,0x11,0x3c, +0xff,0xff,0x62,0x32,0x25,0x80,0x51,0x00,0x00,0x00,0xb0,0xae,0x0c,0x00,0x03,0x92, +0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xae,0x02,0x00,0x02,0x92,0x06,0x00,0x03,0x96, +0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30,0x12,0x00,0x60,0x10, +0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x24, +0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,0x00,0xf0,0x02,0x3c,0xff,0x0f,0x63,0x30, +0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,0x24,0x20,0x82,0x00,0x25,0x20,0x85,0x00, +0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,0x00,0x19,0x03,0x00,0x0f,0x00,0x42,0x30, +0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c, +0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x31,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x0c,0x00,0x40,0x10,0x02,0x80,0x03,0x3c, +0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30, +0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30, +0x48,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90, +0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x0f,0x00,0x43,0x10,0x02,0x80,0x03,0x3c, +0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x97,0xff,0x22,0x12,0x20,0x10,0x03,0x3c, +0x00,0x12,0x11,0x00,0x21,0x10,0x43,0x00,0x78,0x1b,0xe3,0x26,0x9c,0x24,0x62,0xac, +0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,0x87,0xff,0x40,0x14,0x00,0x00,0x00,0x00, +0x1f,0x05,0x00,0x08,0x5c,0x24,0x71,0xa0,0xb3,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x02,0x00,0x42,0x30,0xee,0xff,0x40,0x10,0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,0xb2,0x44,0x62,0xa0,0x8c,0x05,0x00,0x08, +0x00,0x00,0x00,0x00,0x55,0x1f,0x00,0x0c,0x01,0x00,0x04,0x24,0x76,0x05,0x00,0x08, +0x02,0x80,0x03,0x3c,0x18,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x28,0x00,0x60,0x10, +0x2a,0xb0,0x02,0x3c,0x60,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00, +0x43,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c, +0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f, +0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f, +0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00, +0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03, +0x08,0x0b,0xa2,0xac,0xb1,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0xb7,0xff,0x60,0x14, +0x02,0x80,0x03,0x3c,0x00,0x10,0x82,0x34,0x87,0x05,0x00,0x08,0x00,0x00,0xa2,0xa4, +0x5c,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x42,0x00,0x42,0x34, +0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f, +0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f, +0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f, +0x20,0x00,0xb0,0x8f,0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c, +0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac, +0xb8,0xff,0xbd,0x27,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf,0x3c,0x00,0xb7,0xaf, +0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf,0x2c,0x00,0xb3,0xaf, +0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c, +0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34, +0xd0,0x17,0x63,0x24,0x01,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,0x18,0x00,0xa0,0xaf, +0x04,0x00,0x80,0x10,0xf7,0x00,0xa2,0x30,0x01,0x00,0x03,0x24,0xfe,0x00,0xa2,0x30, +0x18,0x00,0xa3,0xaf,0x54,0x44,0xc2,0xa0,0x54,0x44,0xc3,0x90,0x25,0xb0,0x02,0x3c, +0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x02,0x80,0x17,0x3c,0x78,0x1b,0xf4,0x26,0x21,0xa8,0x40,0x00, +0x02,0x80,0x16,0x3c,0x36,0x06,0x00,0x08,0x21,0xf0,0x80,0x02,0x68,0x24,0x71,0xa0, +0x78,0x1b,0xe2,0x26,0xa8,0x24,0x46,0x8c,0x14,0x25,0x45,0x8c,0x05,0x00,0x04,0x24, +0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x78,0x1b,0xf2,0x26, +0xac,0x24,0x45,0x8e,0x21,0x20,0x00,0x02,0x51,0x02,0x00,0x0c,0x21,0x30,0x60,0x02, +0x18,0x00,0xa5,0x8f,0x04,0x00,0x04,0x24,0x95,0x02,0x00,0x0c,0x21,0x30,0x20,0x02, +0x9c,0x43,0xc2,0x96,0x25,0xb0,0x05,0x3c,0x66,0x03,0xa4,0x34,0x01,0x00,0x42,0x24, +0x9c,0x43,0xc2,0xa6,0x9c,0x43,0xc3,0x96,0xff,0x00,0x02,0x24,0x00,0x00,0x83,0xa4, +0x71,0x00,0x22,0x12,0x00,0x00,0x00,0x00,0xa8,0x24,0x82,0x8e,0x14,0x25,0x93,0x8e, +0x05,0x00,0x04,0x24,0x00,0x00,0xa2,0xae,0xac,0x24,0x82,0xae,0x00,0x00,0xb3,0xae, +0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,0x14,0x25,0x84,0x8e,0x18,0x25,0x83,0x8e, +0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00, +0x14,0x25,0x83,0xae,0x14,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xae, +0x02,0x80,0x11,0x3c,0xff,0xff,0x62,0x32,0x25,0x80,0x51,0x00,0x00,0x00,0xb0,0xae, +0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xae,0x02,0x00,0x02,0x92, +0x06,0x00,0x03,0x96,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x01,0x00,0x63,0x30, +0x12,0x00,0x60,0x10,0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97,0x00,0x00,0x00,0x00, +0x01,0x00,0x62,0x24,0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e,0x00,0xf0,0x02,0x3c, +0xff,0x0f,0x63,0x30,0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00,0x24,0x20,0x82,0x00, +0x25,0x20,0x85,0x00,0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94,0x00,0x19,0x03,0x00, +0x0f,0x00,0x42,0x30,0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4,0x02,0x80,0x03,0x3c, +0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30, +0x31,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x0c,0x00,0x40,0x10, +0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x53,0x00, +0xff,0xff,0x42,0x30,0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94,0x08,0x00,0x02,0x24, +0x0c,0x00,0x83,0x30,0x48,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c, +0x98,0x44,0x62,0x90,0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x0f,0x00,0x43,0x10, +0x02,0x80,0x03,0x3c,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x97,0xff,0x22,0x12, +0x20,0x10,0x03,0x3c,0x00,0x12,0x11,0x00,0x21,0x10,0x43,0x00,0x78,0x1b,0xe3,0x26, +0xa8,0x24,0x62,0xac,0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00,0x87,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x1c,0x06,0x00,0x08,0x64,0x24,0x71,0xa0,0xb3,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30,0xee,0xff,0x40,0x10,0x02,0x80,0x03,0x3c, +0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34,0xb2,0x44,0x62,0xa0, +0x89,0x06,0x00,0x08,0x00,0x00,0x00,0x00,0x55,0x1f,0x00,0x0c,0x01,0x00,0x04,0x24, +0x73,0x06,0x00,0x08,0x02,0x80,0x03,0x3c,0x18,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00, +0x28,0x00,0x60,0x10,0x2a,0xb0,0x02,0x3c,0x68,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34, +0x21,0x20,0x60,0x00,0x45,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26, +0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f, +0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f, +0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c, +0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac, +0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,0xb1,0x44,0x43,0x90,0x00,0x00,0x00,0x00, +0xb7,0xff,0x60,0x14,0x02,0x80,0x03,0x3c,0x00,0x10,0x82,0x34,0x84,0x06,0x00,0x08, +0x00,0x00,0xa2,0xa4,0x64,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00, +0x44,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c, +0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f, +0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f, +0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c,0x25,0x10,0x43,0x00, +0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03, +0x08,0x0b,0xa2,0xac,0xb8,0xff,0xbd,0x27,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf, +0x3c,0x00,0xb7,0xaf,0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf, +0x2c,0x00,0xb3,0xaf,0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf, +0x02,0x80,0x06,0x3c,0x54,0x44,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0xc4,0x1b,0x63,0x24,0x02,0x00,0xa4,0x30,0x00,0x00,0x43,0xac, +0x18,0x00,0xa0,0xaf,0x04,0x00,0x80,0x10,0xfb,0x00,0xa2,0x30,0x01,0x00,0x03,0x24, +0xfd,0x00,0xa2,0x30,0x18,0x00,0xa3,0xaf,0x54,0x44,0xc2,0xa0,0x54,0x44,0xc3,0x90, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x17,0x3c,0x78,0x1b,0xf4,0x26, +0x21,0xa8,0x40,0x00,0x02,0x80,0x16,0x3c,0x33,0x07,0x00,0x08,0x21,0xf0,0x80,0x02, +0x70,0x24,0x71,0xa0,0x78,0x1b,0xe2,0x26,0xb4,0x24,0x46,0x8c,0x20,0x25,0x45,0x8c, +0x06,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x78,0x1b,0xf2,0x26,0xb8,0x24,0x45,0x8e,0x21,0x20,0x00,0x02,0x51,0x02,0x00,0x0c, +0x21,0x30,0x60,0x02,0x18,0x00,0xa5,0x8f,0x06,0x00,0x04,0x24,0x95,0x02,0x00,0x0c, +0x21,0x30,0x20,0x02,0x9c,0x43,0xc2,0x96,0x25,0xb0,0x05,0x3c,0x66,0x03,0xa4,0x34, +0x01,0x00,0x42,0x24,0x9c,0x43,0xc2,0xa6,0x9c,0x43,0xc3,0x96,0xff,0x00,0x02,0x24, +0x00,0x00,0x83,0xa4,0x71,0x00,0x22,0x12,0x00,0x00,0x00,0x00,0xb4,0x24,0x82,0x8e, +0x20,0x25,0x93,0x8e,0x06,0x00,0x04,0x24,0x00,0x00,0xa2,0xae,0xb8,0x24,0x82,0xae, +0x00,0x00,0xb3,0xae,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00,0x20,0x25,0x84,0x8e, +0x24,0x25,0x83,0x8e,0x40,0x00,0x84,0x24,0x7f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00, +0x0a,0x18,0x82,0x00,0x20,0x25,0x83,0xae,0x20,0x25,0xc2,0x8f,0x00,0x00,0x00,0x00, +0x00,0x00,0xa2,0xae,0x02,0x80,0x11,0x3c,0xff,0xff,0x62,0x32,0x25,0x80,0x51,0x00, +0x00,0x00,0xb0,0xae,0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xae, +0x02,0x00,0x02,0x92,0x06,0x00,0x03,0x96,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30, +0x01,0x00,0x63,0x30,0x12,0x00,0x60,0x10,0x25,0x30,0x51,0x00,0xec,0x0c,0xc3,0x97, +0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x24,0xec,0x0c,0xc2,0xa7,0x0c,0x00,0x04,0x8e, +0x00,0xf0,0x02,0x3c,0xff,0x0f,0x63,0x30,0xff,0xff,0x42,0x34,0x00,0x2c,0x03,0x00, +0x24,0x20,0x82,0x00,0x25,0x20,0x85,0x00,0x0c,0x00,0x04,0xae,0x16,0x00,0xc2,0x94, +0x00,0x19,0x03,0x00,0x0f,0x00,0x42,0x30,0x25,0x10,0x43,0x00,0x16,0x00,0xc2,0xa4, +0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00, +0x02,0x00,0x42,0x30,0x31,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c, +0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28, +0x0c,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00, +0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30,0x25,0x28,0x51,0x00,0x00,0x00,0xa4,0x94, +0x08,0x00,0x02,0x24,0x0c,0x00,0x83,0x30,0x48,0x00,0x62,0x10,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90,0x05,0x00,0x03,0x24,0xff,0x00,0x42,0x30, +0x0f,0x00,0x43,0x10,0x02,0x80,0x03,0x3c,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24, +0x97,0xff,0x22,0x12,0x20,0x10,0x03,0x3c,0x00,0x12,0x11,0x00,0x21,0x10,0x43,0x00, +0x78,0x1b,0xe3,0x26,0xb4,0x24,0x62,0xac,0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00, +0x87,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x19,0x07,0x00,0x08,0x6c,0x24,0x71,0xa0, +0xb3,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x30,0xee,0xff,0x40,0x10, +0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x34, +0xb2,0x44,0x62,0xa0,0x86,0x07,0x00,0x08,0x00,0x00,0x00,0x00,0x55,0x1f,0x00,0x0c, +0x01,0x00,0x04,0x24,0x70,0x07,0x00,0x08,0x02,0x80,0x03,0x3c,0x18,0x00,0xa3,0x8f, +0x00,0x00,0x00,0x00,0x28,0x00,0x60,0x10,0x2a,0xb0,0x02,0x3c,0x70,0x24,0x43,0x92, +0xb0,0x03,0xa5,0x34,0x21,0x20,0x60,0x00,0x47,0x00,0x42,0x34,0x00,0x00,0x43,0xa0, +0x00,0x00,0xa4,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x78,0x1b,0xe5,0x26,0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f, +0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f, +0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f, +0x60,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27, +0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,0xb1,0x44,0x43,0x90, +0x00,0x00,0x00,0x00,0xb7,0xff,0x60,0x14,0x02,0x80,0x03,0x3c,0x00,0x10,0x82,0x34, +0x81,0x07,0x00,0x08,0x00,0x00,0xa2,0xa4,0x6c,0x24,0x43,0x92,0xb0,0x03,0xa5,0x34, +0x21,0x20,0x60,0x00,0x46,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x00,0x00,0xa4,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0xe5,0x26, +0x08,0x0b,0xa2,0x8c,0x44,0x00,0xbf,0x8f,0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f, +0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f,0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f, +0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f,0x20,0x00,0xb0,0x8f,0x60,0x00,0x03,0x3c, +0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0xac, +0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0xb8,0x1f,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24, +0x10,0x0b,0xa2,0x8c,0x08,0x0b,0xa4,0x8c,0x00,0x08,0x03,0x3c,0x24,0x10,0x43,0x00, +0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x00,0xe0,0x03, +0x08,0x0b,0xa4,0xac,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,0xc8,0xff,0xbd,0x27, +0x18,0x03,0x83,0x34,0x14,0x20,0x42,0x24,0x30,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf, +0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x02,0x80,0x14,0x3c,0x78,0x1b,0x93,0x26,0xfc,0x00,0x82,0x34, +0x00,0x00,0x45,0x8c,0xe4,0x0a,0x66,0x96,0x94,0x25,0x63,0x96,0x8c,0x25,0x67,0x8e, +0x23,0x28,0xa6,0x00,0x21,0x10,0xa3,0x00,0x23,0x88,0x47,0x00,0xb0,0x03,0x84,0x34, +0x23,0x30,0x23,0x02,0x2b,0x10,0x71,0x00,0x00,0x00,0x83,0xac,0x00,0x00,0x91,0xac, +0x0b,0x88,0xc2,0x00,0x21,0x20,0x20,0x02,0x39,0x15,0x00,0x0c,0x90,0x25,0x65,0xae, +0x4b,0x00,0x40,0x10,0x21,0x90,0x40,0x00,0x0c,0x00,0x51,0xac,0x8c,0x25,0x68,0x8e, +0x90,0x25,0x62,0x8e,0x08,0x00,0x45,0x8e,0x20,0xbd,0x03,0x3c,0x88,0x03,0x63,0x34, +0x2b,0x10,0x48,0x00,0x40,0x10,0x15,0x3c,0x21,0x20,0x00,0x00,0xff,0xff,0x27,0x32, +0x00,0x00,0x65,0xac,0x28,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0xe4,0x0a,0x66,0x96, +0x08,0x00,0x42,0x96,0x40,0x10,0x05,0x3c,0x21,0x20,0x00,0x00,0x21,0x30,0x06,0x01, +0x25,0x28,0x45,0x00,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x02,0x3c, +0x68,0x41,0x42,0x24,0x78,0x1b,0x84,0x26,0x90,0x25,0x83,0x8c,0x04,0x00,0x45,0x8c, +0x8c,0x25,0x83,0xac,0x00,0x00,0x42,0xae,0x04,0x00,0x52,0xac,0x00,0x00,0xb2,0xac, +0x04,0x00,0x45,0xae,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x78,0x1b,0x85,0x26,0x10,0x0b,0xa2,0x8c,0x08,0x0b,0xa3,0x8c, +0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x04,0x00,0x42,0x30, +0x25,0x18,0x62,0x00,0x41,0xb0,0x04,0x3c,0x38,0x00,0xbd,0x27,0x00,0x00,0x83,0xac, +0x08,0x00,0xe0,0x03,0x08,0x0b,0xa3,0xac,0x94,0x25,0x70,0x8e,0x08,0x00,0x45,0x96, +0xe4,0x0a,0x66,0x96,0x23,0x80,0x08,0x02,0xff,0xff,0x10,0x32,0x21,0x30,0x06,0x01, +0x25,0x28,0xb5,0x00,0x21,0x38,0x00,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x00,0x02,0x00,0x0c,0x21,0x20,0x00,0x00,0x08,0x00,0x45,0x96,0xe4,0x0a,0x62,0x96, +0x23,0x38,0x30,0x02,0x25,0x28,0xb5,0x00,0x21,0xb0,0x06,0x3c,0x21,0x28,0xb0,0x00, +0x21,0x30,0x46,0x00,0xff,0xff,0xe7,0x30,0x3d,0x08,0x00,0x08,0x21,0x20,0x00,0x00, +0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x02,0x80,0x04,0x3c,0x58,0x44,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x10,0x63,0x34, +0x58,0x44,0x83,0xac,0x00,0x60,0x82,0x40,0x49,0x08,0x00,0x08,0x00,0x00,0x00,0x00, +0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0xc0,0xff,0xbd,0x27,0x00,0x22,0x63,0x24, +0x18,0x03,0x42,0x34,0x2a,0xb0,0x04,0x3c,0x00,0x00,0x43,0xac,0x3c,0x00,0xbf,0xaf, +0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf, +0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x2c,0x00,0x84,0x34,0x00,0x00,0x88,0x8c,0xff,0x00,0x02,0x24, +0xff,0x00,0x03,0x31,0x9e,0x00,0x62,0x10,0x00,0x80,0x02,0x31,0x33,0x00,0x40,0x10, +0x00,0xff,0x02,0x3c,0x00,0x80,0x02,0x3c,0x00,0x00,0x82,0xac,0xff,0x00,0x02,0x24, +0x10,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x78,0x1b,0x50,0x24,0xff,0x00,0x03,0x31, +0x50,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0xe4,0x24,0x03,0xae,0x21,0x30,0x60,0x00,0x80,0x24,0x08,0xa2,0x0a,0x00,0x04,0x24, +0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x01,0x00,0x03,0x24, +0x58,0x25,0x03,0xa2,0x02,0x80,0x02,0x3c,0x78,0x1b,0x44,0x24,0x58,0x25,0x83,0x90, +0x01,0x00,0x02,0x24,0x25,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,0x78,0x1b,0x70,0x24, +0x59,0x25,0x02,0x92,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x10,0x00,0x04,0x03,0x3c, +0x10,0x0b,0x02,0x8e,0x08,0x0b,0x04,0x8e,0x24,0x10,0x43,0x00,0x25,0x20,0x82,0x00, +0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x0b,0x04,0xae,0x3c,0x00,0xbf,0x8f, +0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f, +0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f, +0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x24,0x10,0x02,0x01, +0xcf,0xff,0x40,0x10,0xff,0x00,0x02,0x24,0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x24, +0x80,0x24,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x0c,0x00,0x68,0x8c,0x9b,0x08,0x00,0x08,0xff,0x00,0x03,0x31,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x25,0xb0,0x02,0x3c,0x21,0x88,0x80,0x00, +0x7c,0x03,0x57,0x34,0x1e,0x03,0x5e,0x34,0x21,0x98,0x80,0x00,0xb0,0x03,0x56,0x34, +0x01,0x00,0x15,0x24,0x07,0x09,0x00,0x08,0x01,0x00,0x14,0x24,0xf2,0x23,0x22,0x96, +0x59,0x25,0x35,0xa2,0x01,0x00,0x42,0x34,0x00,0x00,0xc2,0xa7,0xf2,0x23,0x22,0xa6, +0x30,0x00,0x02,0x24,0x06,0x00,0x42,0x12,0x02,0x80,0x02,0x3c,0x78,0xaf,0x42,0x24, +0x00,0x00,0x48,0x8c,0x02,0x00,0x02,0x24,0x01,0x00,0x15,0xa1,0x01,0x00,0x02,0xa1, +0x59,0x25,0x62,0x92,0x00,0x00,0x00,0x00,0x45,0x00,0x54,0x14,0xff,0x00,0x02,0x24, +0x0c,0x00,0x03,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x69,0x30,0x40,0x00,0x22,0x11, +0x20,0x10,0x02,0x3c,0x80,0x24,0x63,0xa2,0x80,0x24,0x28,0x92,0x50,0x25,0x25,0x8e, +0xff,0x00,0x03,0x31,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0xc9,0xae, +0x21,0x30,0x60,0x00,0x00,0x00,0xe8,0xa6,0x0a,0x00,0x04,0x24,0xe4,0x24,0x23,0xae, +0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x50,0x25,0x30,0x8e, +0x00,0x02,0x00,0x0c,0x0a,0x00,0x04,0x24,0xff,0xff,0x10,0x32,0x02,0x80,0x02,0x3c, +0x25,0x80,0x02,0x02,0x02,0x00,0x03,0x92,0x20,0x00,0x02,0x24,0xd3,0xff,0x62,0x14, +0x21,0x20,0x03,0x02,0x02,0x80,0x02,0x3c,0x88,0xb5,0x44,0xac,0x20,0x00,0x03,0x26, +0x02,0x00,0x62,0x90,0x59,0x25,0x25,0x92,0x03,0x00,0x64,0x90,0xff,0x00,0x52,0x30, +0x7f,0x00,0x83,0x30,0x10,0x00,0xb4,0x14,0x28,0x00,0x04,0x26,0x02,0x80,0x05,0x3c, +0x91,0x43,0xa2,0x90,0x00,0x00,0x00,0x00,0x7f,0x00,0x42,0x30,0x08,0x00,0x62,0x10, +0x32,0x00,0x42,0x2e,0xf2,0x23,0x22,0x96,0x00,0x00,0x00,0x00,0x10,0x00,0x42,0x34, +0x00,0x00,0xc2,0xa7,0x91,0x43,0xa3,0xa0,0xf2,0x23,0x22,0xa6,0x32,0x00,0x42,0x2e, +0xbf,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0xc0,0x18,0x12,0x00, +0x94,0x9f,0x42,0x24,0x21,0x18,0x62,0x00,0x04,0x00,0x62,0x8c,0x02,0x80,0x03,0x3c, +0x09,0xf8,0x40,0x00,0x84,0xb5,0x62,0xac,0xe9,0x08,0x00,0x08,0x30,0x00,0x02,0x24, +0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x24,0xad,0x08,0x00,0x08,0x58,0x25,0x40,0xa0, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0xb3,0x08,0x00,0x08,0x02,0x80,0x03,0x3c,0xc8,0xff,0xbd,0x27,0xff,0xff,0xa8,0x30, +0x02,0x80,0x02,0x3c,0x25,0x40,0x02,0x01,0x30,0x00,0xb6,0xaf,0x20,0x00,0xb2,0xaf, +0x34,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf, +0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x00,0x00,0x03,0x8d,0xff,0xff,0xd2,0x30, +0x21,0xb0,0xa0,0x00,0x00,0xc0,0x02,0x24,0x08,0x00,0x45,0x26,0x04,0x00,0x06,0x8d, +0x24,0x18,0x62,0x00,0xff,0x3f,0xa5,0x30,0xf0,0xff,0x02,0x3c,0x25,0x18,0x65,0x00, +0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x80,0x05,0x3c,0x25,0x18,0x65,0x00, +0xff,0x01,0xc6,0x34,0x00,0x00,0x03,0xad,0x04,0x00,0x06,0xad,0x21,0x48,0x80,0x00, +0xff,0xff,0xe7,0x30,0x18,0x00,0x12,0xa5,0x1a,0x00,0x07,0xa1,0x18,0x00,0x03,0x8d, +0xff,0x7f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x02,0x80,0x15,0x3c, +0x18,0x00,0x03,0xad,0x78,0x1b,0xa5,0x26,0xee,0x23,0xa3,0x90,0x00,0x00,0x00,0x00, +0x01,0x00,0x62,0x24,0xee,0x23,0xa2,0xa0,0x18,0x00,0x04,0x8d,0xff,0x80,0x02,0x3c, +0x20,0x00,0x45,0x26,0xff,0xff,0x42,0x34,0x7f,0x00,0x63,0x30,0xff,0xff,0xb2,0x30, +0x24,0x20,0x82,0x00,0x00,0x1e,0x03,0x00,0x25,0xb0,0x02,0x3c,0xc0,0x00,0x42,0x34, +0x25,0x20,0x83,0x00,0x07,0x00,0x45,0x32,0x18,0x00,0x04,0xad,0x00,0x00,0x52,0xa4, +0x03,0x00,0xa0,0x10,0xff,0xff,0x42,0x32,0x08,0x00,0x42,0x26,0xff,0xff,0x42,0x30, +0x78,0x1b,0xb4,0x26,0xb4,0x25,0x86,0x8e,0xb8,0x25,0x90,0x8e,0xf8,0xff,0x52,0x30, +0x21,0x10,0xd2,0x00,0x2b,0x10,0x02,0x02,0x31,0x00,0x40,0x10,0xff,0x00,0x33,0x31, +0x23,0x80,0x06,0x02,0x21,0x28,0xc0,0x02,0xff,0xff,0x07,0x32,0x01,0x00,0x11,0x24, +0x21,0x20,0x60,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xb1,0xaf,0x23,0x18,0x50,0x02, +0xff,0xff,0x72,0x30,0x22,0x10,0x02,0x3c,0x21,0x10,0x42,0x02,0x21,0x20,0x60,0x02, +0x00,0x02,0x00,0x0c,0xb4,0x25,0x82,0xae,0x21,0x28,0xd0,0x02,0x21,0x38,0x40,0x02, +0x21,0x20,0x60,0x02,0x10,0x00,0xb1,0xaf,0x22,0x10,0x06,0x3c,0xc3,0x01,0x00,0x0c, +0x78,0x1b,0xb1,0x26,0xb4,0x25,0x23,0x8e,0x25,0xb0,0x10,0x3c,0xb0,0x03,0x02,0x36, +0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0x00, +0xb4,0x25,0x25,0x8e,0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,0x00,0x00,0x45,0xac, +0x00,0x00,0x83,0x90,0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,0x10,0x00,0x63,0x34, +0x00,0x00,0x83,0xa0,0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,0x2c,0x00,0xb5,0x8f, +0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f, +0x18,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27, +0x21,0x28,0xc0,0x02,0x21,0x20,0x60,0x02,0x21,0x38,0x40,0x02,0x01,0x00,0x02,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa2,0xaf,0xb4,0x25,0x83,0x8e,0x78,0x1b,0xb1,0x26, +0x25,0xb0,0x10,0x3c,0x21,0x18,0x72,0x00,0xb4,0x25,0x83,0xae,0xb4,0x25,0x23,0x8e, +0xb0,0x03,0x02,0x36,0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0x00,0x02,0x00,0x0c, +0x00,0x00,0x00,0x00,0xb4,0x25,0x25,0x8e,0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36, +0x00,0x00,0x45,0xac,0x00,0x00,0x83,0x90,0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f, +0x10,0x00,0x63,0x34,0x00,0x00,0x83,0xa0,0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6, +0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f, +0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x38,0x00,0xbd,0x27,0xc8,0xff,0xbd,0x27,0x1c,0x00,0xb1,0xaf,0x34,0x00,0xbf,0xaf, +0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf, +0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0x21,0x88,0x80,0x00,0x00,0x60,0x14,0x40, +0x01,0x00,0x81,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x14,0x00,0x83,0x8c, +0x02,0x80,0x15,0x3c,0x15,0x00,0x02,0x24,0x78,0x1b,0xb3,0x26,0x21,0x28,0x00,0x00, +0x1d,0x00,0x62,0x10,0x08,0x00,0x06,0x24,0x08,0x00,0x82,0x94,0x02,0x80,0x04,0x3c, +0x3e,0x46,0x00,0x0c,0x25,0x20,0x44,0x00,0x08,0x00,0x25,0x8e,0x0c,0x00,0x26,0x96, +0x14,0x00,0x27,0x96,0x3e,0x09,0x00,0x0c,0x09,0x00,0x04,0x24,0x04,0x00,0x22,0x8e, +0x00,0x00,0x23,0x8e,0x21,0x20,0x20,0x02,0x00,0x00,0x43,0xac,0x04,0x00,0x62,0xac, +0x00,0x00,0x31,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0x31,0xae,0x00,0x60,0x94,0x40, +0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x0c,0x00,0x90,0x8c,0x25,0xb0,0x02,0x3c, +0xc0,0x00,0x42,0x34,0xb4,0x25,0x68,0x8e,0x07,0x00,0x07,0x32,0x00,0x00,0x50,0xa4, +0x08,0x00,0x05,0x26,0x0b,0x80,0xa7,0x00,0xb8,0x25,0x63,0x8e,0xf8,0xff,0x10,0x32, +0x21,0x10,0x10,0x01,0x23,0x90,0x68,0x00,0x2b,0x18,0x62,0x00,0x01,0x00,0x16,0x24, +0x09,0x00,0x04,0x24,0x21,0x30,0x00,0x01,0x33,0x00,0x60,0x10,0xff,0xff,0x07,0x32, +0x08,0x00,0x25,0x8e,0xff,0xff,0x47,0x32,0x23,0x80,0x12,0x02,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xb6,0xaf,0x22,0x10,0x03,0x3c,0x21,0x18,0x03,0x02,0x09,0x00,0x04,0x24, +0x00,0x02,0x00,0x0c,0xb4,0x25,0x63,0xae,0x08,0x00,0x25,0x8e,0xff,0xff,0x07,0x32, +0x09,0x00,0x04,0x24,0x21,0x28,0xb2,0x00,0x22,0x10,0x06,0x3c,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xb6,0xaf,0x00,0x02,0x00,0x0c,0x09,0x00,0x04,0x24,0x78,0x1b,0xa2,0x26, +0xb4,0x25,0x46,0x8c,0x25,0xb0,0x03,0x3c,0xec,0x00,0x64,0x34,0x00,0x00,0x86,0xac, +0xbd,0x00,0x65,0x34,0x00,0x00,0xa2,0x90,0xc2,0x00,0x63,0x34,0x21,0x20,0x20,0x02, +0x10,0x00,0x42,0x34,0x00,0x00,0xa2,0xa0,0x00,0x00,0x66,0xa4,0x04,0x00,0x22,0x8e, +0x00,0x00,0x23,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0xac,0x04,0x00,0x62,0xac, +0x00,0x00,0x31,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0x31,0xae,0x00,0x60,0x94,0x40, +0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x08,0x00,0x25,0x8e,0x01,0x00,0x02,0x24, +0x21,0x30,0x00,0x01,0x09,0x00,0x04,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa2,0xaf, +0xb4,0x25,0x63,0x8e,0x00,0x00,0x00,0x00,0x21,0x18,0x70,0x00,0x2d,0x0a,0x00,0x08, +0xb4,0x25,0x63,0xae,0xe8,0xff,0xbd,0x27,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf, +0x21,0x28,0x80,0x00,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x25,0xb0,0x02,0x3c,0xbf,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0x04,0x00,0x63,0x2c,0x05,0x00,0x60,0x10,0x02,0x80,0x06,0x3c, +0x70,0x41,0xc3,0x8c,0x70,0x41,0xc2,0x24,0x0c,0x00,0x62,0x10,0x00,0x00,0x00,0x00, +0x70,0x41,0xc2,0x24,0x04,0x00,0x43,0x8c,0x00,0x00,0xa2,0xac,0x04,0x00,0x45,0xac, +0x00,0x00,0x65,0xac,0x04,0x00,0xa3,0xac,0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xd9,0x09,0x00,0x0c, +0x00,0x00,0x00,0x00,0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0xd0,0xff,0xbd,0x27,0x18,0x03,0x42,0x34,0xf8,0x29,0x63,0x24,0x28,0x00,0xbf,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x00,0x00,0x43,0xac,0x02,0x80,0x04,0x3c,0x98,0x44,0x82,0x90,0x00,0x00,0x00,0x00, +0x09,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x02,0x3c,0xb1,0x44,0x43,0x90, +0x00,0x00,0x00,0x00,0x61,0x00,0x60,0x10,0x02,0x80,0x02,0x3c,0x9c,0x1e,0x00,0x0c, +0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x78,0x41,0x43,0x8c,0x78,0x41,0x42,0x24, +0x66,0x00,0x62,0x10,0x02,0x80,0x13,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,0x36,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x78,0x1b,0x66,0x26,0xbc,0x25,0xc5,0x8c,0xc0,0x18,0x03,0x00,0x23,0xb0,0x04,0x3c, +0xf0,0x07,0x63,0x30,0xff,0x1f,0x02,0x3c,0x21,0x18,0x64,0x00,0xff,0xff,0x42,0x34, +0x24,0x20,0x62,0x00,0x23,0x88,0x85,0x00,0x00,0x04,0x22,0x26,0x2b,0x28,0x85,0x00, +0x6c,0x25,0xc3,0x8c,0x0b,0x88,0x45,0x00,0xe1,0x01,0x22,0x2e,0x68,0x25,0xc3,0xac, +0xc0,0x25,0xc4,0xac,0x72,0x25,0xc0,0xa4,0x14,0x00,0x40,0x14,0x71,0x25,0xc0,0xa0, +0x20,0xfe,0x82,0x24,0x20,0x02,0x83,0x24,0x0a,0x18,0x45,0x00,0x23,0x10,0x02,0x3c, +0xff,0x03,0x42,0x34,0x2b,0x10,0x43,0x00,0x21,0x28,0x60,0x00,0x34,0x00,0x40,0x14, +0xbc,0x25,0xc3,0xac,0xc0,0x25,0xc2,0x8c,0x00,0x00,0x00,0x00,0x2b,0x18,0x45,0x00, +0x23,0x88,0x45,0x00,0x03,0x00,0x60,0x10,0xe1,0x01,0x22,0x2e,0x00,0x04,0x31,0x26, +0xe1,0x01,0x22,0x2e,0x0e,0x00,0x40,0x10,0x78,0x1b,0x70,0x26,0x78,0x1b,0x70,0x26, +0xc0,0x25,0x03,0x8e,0xbc,0x25,0x04,0x8e,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00, +0x41,0x00,0x40,0x14,0x2b,0x10,0x64,0x00,0x6d,0x00,0x40,0x14,0x25,0xb0,0x02,0x3c, +0x80,0x00,0x03,0x24,0xd0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x78,0x1b,0x70,0x26, +0xbc,0x25,0x03,0x96,0x2a,0xb0,0x02,0x3c,0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00, +0x00,0x00,0x51,0xa0,0x45,0x18,0x00,0x0c,0x00,0x00,0x00,0x00,0x72,0x25,0x03,0x96, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0b,0x02,0x8e, +0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c,0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac, +0x28,0x00,0xbf,0x8f,0x08,0x0b,0x02,0xae,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f, +0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0x00,0xfc,0xa5,0x24,0xbd,0x0a,0x00,0x08,0xbc,0x25,0xc5,0xac,0x01,0x00,0x04,0x24, +0xba,0x44,0x44,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x02,0x80,0x13,0x3c, +0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,0x02,0x80,0x02,0x3c,0x78,0x41,0x43,0x8c, +0x78,0x41,0x42,0x24,0x9c,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x90,0x1e,0x00,0x0c, +0x00,0x00,0x00,0x00,0x98,0xff,0x40,0x10,0x78,0x1b,0x63,0x26,0x82,0x0b,0x62,0x90, +0x00,0x00,0x00,0x00,0x94,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x98,0x26,0x64,0x94, +0x82,0x0b,0x60,0xa0,0x00,0xc0,0x84,0x24,0x2c,0x22,0x00,0x0c,0xff,0xff,0x84,0x30, +0x9a,0x0a,0x00,0x08,0x00,0x00,0x00,0x00,0x68,0x25,0x05,0x8e,0x21,0x30,0x80,0x00, +0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x68,0x25,0x03,0x8e,0x72,0x25,0x05,0x96,0xbc,0x25,0x02,0x8e,0x21,0x18,0x71,0x00, +0x21,0x28,0x25,0x02,0x21,0x10,0x51,0x00,0x09,0x00,0x04,0x24,0xbc,0x25,0x02,0xae, +0x68,0x25,0x03,0xae,0x00,0x02,0x00,0x0c,0x72,0x25,0x05,0xa6,0x78,0x1b,0x70,0x26, +0xbc,0x25,0x03,0x96,0x2a,0xb0,0x02,0x3c,0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00, +0x00,0x00,0x51,0xa0,0x45,0x18,0x00,0x0c,0x00,0x00,0x00,0x00,0x72,0x25,0x03,0x96, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0b,0x02,0x8e, +0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c,0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac, +0x28,0x00,0xbf,0x8f,0x08,0x0b,0x02,0xae,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f, +0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0xc4,0x25,0x02,0x8e,0x68,0x25,0x05,0x8e,0x21,0x30,0x80,0x00,0x23,0x88,0x44,0x00, +0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x68,0x25,0x03,0x8e,0x72,0x25,0x02,0x96,0xc0,0x25,0x12,0x96,0x21,0x18,0x71,0x00, +0x21,0x10,0x22,0x02,0x23,0x10,0x11,0x3c,0x68,0x25,0x03,0xae,0x72,0x25,0x02,0xa6, +0x06,0x00,0x40,0x16,0xbc,0x25,0x11,0xae,0x09,0x00,0x04,0x24,0x00,0x02,0x00,0x0c, +0x78,0x1b,0x70,0x26,0x20,0x0b,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x0c, +0x09,0x00,0x04,0x24,0x68,0x25,0x05,0x8e,0x09,0x00,0x04,0x24,0x23,0x10,0x06,0x3c, +0x21,0x38,0x40,0x02,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x68,0x25,0x03,0x8e, +0x72,0x25,0x02,0x96,0x21,0x20,0x51,0x02,0x21,0x18,0x72,0x00,0x21,0x10,0x42,0x02, +0xbc,0x25,0x04,0xae,0x09,0x00,0x04,0x24,0x68,0x25,0x03,0xae,0x4f,0x0b,0x00,0x08, +0x72,0x25,0x02,0xa6,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x08,0x00,0x02,0x24,0xfc,0x00,0x84,0x30, +0x50,0x00,0x02,0x24,0x11,0x00,0x82,0x10,0x05,0x00,0x03,0x24,0x51,0x00,0x82,0x28, +0x10,0x00,0x40,0x10,0xa0,0x00,0x02,0x24,0x20,0x00,0x02,0x24,0x0b,0x00,0x82,0x10, +0x02,0x00,0x03,0x24,0x21,0x00,0x82,0x28,0x15,0x00,0x40,0x14,0x30,0x00,0x02,0x24, +0x06,0x00,0x82,0x10,0x03,0x00,0x03,0x24,0x04,0x00,0x03,0x24,0x40,0x00,0x02,0x24, +0x02,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0xfd,0xff,0x82,0x10,0x08,0x00,0x03,0x24,0xa1,0x00,0x82,0x28, +0x0c,0x00,0x40,0x10,0xc0,0x00,0x02,0x24,0x80,0x00,0x02,0x24,0xf7,0xff,0x82,0x10, +0x06,0x00,0x03,0x24,0x07,0x00,0x03,0x24,0x84,0x0b,0x00,0x08,0x90,0x00,0x02,0x24, +0xf2,0xff,0x80,0x10,0x21,0x18,0x00,0x00,0x01,0x00,0x03,0x24,0x84,0x0b,0x00,0x08, +0x10,0x00,0x02,0x24,0xed,0xff,0x82,0x10,0x0a,0x00,0x03,0x24,0xc1,0x00,0x82,0x28, +0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x09,0x00,0x03,0x24,0x84,0x0b,0x00,0x08, +0xb0,0x00,0x02,0x24,0x0b,0x00,0x03,0x24,0x84,0x0b,0x00,0x08,0xd0,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x3c,0x25,0xb0,0x04,0x3c, +0x98,0x2e,0x63,0x24,0x18,0x03,0x84,0x34,0x00,0x00,0x83,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x00,0x80,0x03,0x3c, +0x25,0xb0,0x04,0x3c,0xdc,0x2e,0x63,0x24,0x18,0x03,0x84,0x34,0x00,0x00,0x83,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x3c,0x25,0xb0,0x04,0x3c, +0xf8,0x2e,0x63,0x24,0x18,0x03,0x84,0x34,0x00,0x00,0x83,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x00,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x7c,0x2f,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x25,0xb0,0x03,0x3c,0x00,0x80,0x02,0x3c, +0xb0,0x03,0x65,0x34,0x98,0x2f,0x42,0x24,0x18,0x03,0x63,0x34,0x00,0x00,0x62,0xac, +0x00,0x00,0xa4,0xac,0x00,0x00,0x83,0x8c,0x21,0x10,0x00,0x00,0xff,0x3f,0x63,0x30, +0x00,0x00,0xa3,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x98,0xff,0xbd,0x27,0x60,0x00,0xbe,0xaf,0x5c,0x00,0xb7,0xaf, +0x48,0x00,0xb2,0xaf,0x44,0x00,0xb1,0xaf,0x64,0x00,0xbf,0xaf,0x58,0x00,0xb6,0xaf, +0x54,0x00,0xb5,0xaf,0x50,0x00,0xb4,0xaf,0x4c,0x00,0xb3,0xaf,0x40,0x00,0xb0,0xaf, +0x21,0x88,0x80,0x00,0x02,0x00,0x84,0x90,0x21,0xf0,0x00,0x00,0x21,0xb8,0x00,0x00, +0x0f,0x00,0x84,0x30,0xc0,0x20,0x04,0x00,0x21,0x20,0x91,0x00,0x18,0x00,0x92,0x24, +0x00,0x60,0x13,0x40,0x01,0x00,0x61,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x02,0x80,0x05,0x3c,0x28,0x00,0x84,0x24,0x18,0x42,0xa5,0x24,0x7b,0x46,0x00,0x0c, +0x06,0x00,0x06,0x24,0xa6,0x00,0x40,0x14,0x02,0x80,0x14,0x3c,0x98,0x44,0x82,0x92, +0x00,0x00,0x00,0x00,0xb0,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24, +0xe8,0x0a,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xaa,0x00,0x40,0x10, +0x02,0x80,0x09,0x3c,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x10, +0x02,0x80,0x02,0x3c,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x24, +0xb9,0x44,0x22,0xa1,0x02,0x80,0x02,0x3c,0x9e,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c, +0xb2,0x44,0x62,0x90,0xfd,0xff,0x03,0x24,0x42,0xb0,0x04,0x3c,0x24,0x10,0x43,0x00, +0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0xa0,0x00,0x00,0x83,0x90,0xef,0xff,0x02,0x24, +0x03,0x00,0x85,0x34,0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24,0x00,0x00,0x83,0xa0, +0x02,0x80,0x16,0x3c,0x00,0x00,0xa2,0xa0,0xa0,0x44,0xc2,0x96,0x20,0x00,0x43,0x96, +0xff,0xff,0x42,0x30,0x0a,0x00,0x43,0x10,0x02,0x80,0x15,0x3c,0x25,0xb0,0x02,0x3c, +0x94,0x00,0x42,0x34,0xa0,0x44,0xc3,0xa6,0x00,0x00,0x43,0xa4,0xa0,0x44,0xc3,0x96, +0x00,0x00,0x00,0x00,0xff,0xff,0x63,0x30,0x80,0x1a,0x03,0x00,0xa4,0x44,0xa3,0xae, +0x25,0xb0,0x10,0x3c,0x84,0x00,0x02,0x36,0x00,0x00,0x44,0x8c,0x80,0x00,0x10,0x36, +0x00,0x00,0x02,0x8e,0xa4,0x44,0xa6,0x8e,0x21,0x18,0x00,0x00,0x00,0x28,0x04,0x00, +0x21,0x20,0x00,0x00,0x25,0x28,0xa3,0x00,0x25,0x20,0x82,0x00,0x24,0x22,0x00,0x0c, +0x38,0x00,0xa9,0xaf,0x02,0x80,0x05,0x3c,0x00,0x00,0x04,0x8e,0xa4,0x44,0xa6,0x8e, +0xa8,0x44,0xa3,0x94,0x23,0x20,0x82,0x00,0x21,0x20,0x86,0x00,0xff,0xff,0x63,0x30, +0x80,0x1a,0x03,0x00,0x23,0x20,0x83,0x00,0x02,0x80,0x08,0x3c,0xac,0x44,0x04,0xad, +0x00,0x00,0x02,0x8e,0x21,0x18,0x00,0x00,0x21,0x38,0x00,0x00,0x00,0x50,0x42,0x24, +0x00,0x50,0x45,0x2c,0x21,0x18,0x65,0x00,0x2b,0x20,0xe3,0x00,0xac,0x44,0x06,0x8d, +0x38,0x00,0xa9,0x8f,0x8f,0x00,0x80,0x14,0x00,0x00,0x00,0x00,0x8b,0x00,0x67,0x10, +0x2b,0x10,0xc2,0x00,0xac,0x44,0x04,0x8d,0x25,0xb0,0x02,0x3c,0xe4,0x02,0x42,0x34, +0x00,0x00,0x44,0xac,0xa0,0x44,0xc3,0x96,0x02,0x80,0x02,0x3c,0x05,0x00,0x05,0x24, +0xff,0xff,0x63,0x30,0x40,0x18,0x03,0x00,0xf6,0xff,0x63,0x24,0x88,0x44,0x43,0xac, +0x00,0x00,0x27,0x8e,0x24,0x00,0x44,0x26,0x30,0x00,0xa6,0x27,0xff,0x3f,0xe7,0x30, +0x8a,0x11,0x00,0x0c,0xdc,0xff,0xe7,0x24,0x2c,0x00,0x40,0x10,0x21,0x28,0x40,0x00, +0x98,0x44,0x82,0x92,0x02,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x7f,0x00,0x43,0x10, +0x02,0x80,0x04,0x3c,0x02,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x04,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x30, +0x04,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x01,0x00,0x17,0x24,0xb6,0x44,0x57,0xa0, +0x04,0x00,0xa3,0x90,0x30,0x00,0xa7,0x8f,0x00,0x00,0x00,0x00,0x04,0x00,0xe2,0x28, +0x16,0x00,0x40,0x14,0xfe,0x00,0x66,0x30,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24, +0x98,0x26,0x64,0x94,0xc0,0x10,0x06,0x00,0x2a,0x10,0x82,0x00,0x10,0x00,0x40,0x14, +0x02,0x80,0x03,0x3c,0x21,0x10,0xc7,0x00,0xfd,0xff,0x42,0x24,0xc0,0x10,0x02,0x00, +0x2a,0x10,0x44,0x00,0x0a,0x00,0x40,0x14,0xc2,0x10,0x04,0x00,0x23,0x30,0x46,0x00, +0x21,0x18,0xa6,0x00,0x05,0x00,0x62,0x90,0x07,0x00,0x84,0x30,0x01,0x00,0x03,0x24, +0x07,0x10,0x82,0x00,0x01,0x00,0x42,0x30,0x0b,0xf0,0x62,0x00,0x02,0x80,0x03,0x3c, +0xb2,0x44,0x62,0x90,0xef,0xff,0x03,0x24,0x21,0x20,0xe0,0x02,0x24,0x10,0x43,0x00, +0x02,0x80,0x03,0x3c,0xb2,0x44,0x62,0xa0,0x98,0x44,0x83,0x92,0x02,0x80,0x02,0x3c, +0x10,0xaf,0x42,0x24,0xff,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00, +0x00,0x00,0x66,0x8c,0x00,0x00,0x00,0x00,0x09,0xf8,0xc0,0x00,0x21,0x28,0xc0,0x03, +0x00,0x60,0x93,0x40,0x64,0x00,0xbf,0x8f,0x60,0x00,0xbe,0x8f,0x5c,0x00,0xb7,0x8f, +0x58,0x00,0xb6,0x8f,0x54,0x00,0xb5,0x8f,0x50,0x00,0xb4,0x8f,0x4c,0x00,0xb3,0x8f, +0x48,0x00,0xb2,0x8f,0x44,0x00,0xb1,0x8f,0x40,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x68,0x00,0xbd,0x27,0x98,0x44,0x82,0x92,0x00,0x00,0x00,0x00, +0xef,0xff,0x40,0x14,0x02,0x80,0x03,0x3c,0x78,0x1b,0x70,0x24,0xe8,0x0a,0x02,0x92, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xe9,0xff,0x40,0x10,0x24,0x00,0x44,0x26, +0x00,0x00,0x27,0x8e,0x05,0x00,0x05,0x24,0xff,0x3f,0xe7,0x30,0xdc,0xff,0xe7,0x24, +0x8a,0x11,0x00,0x0c,0x30,0x00,0xa6,0x27,0xe1,0xff,0x40,0x10,0x21,0x28,0x40,0x00, +0x30,0x00,0xa7,0x8f,0x04,0x00,0x42,0x90,0x04,0x00,0xe3,0x28,0xdc,0xff,0x60,0x14, +0xfe,0x00,0x46,0x30,0x98,0x26,0x04,0x96,0xc0,0x10,0x06,0x00,0x2a,0x10,0x82,0x00, +0xd7,0xff,0x40,0x14,0x21,0x10,0xc7,0x00,0xfd,0xff,0x42,0x24,0xc0,0x10,0x02,0x00, +0x2a,0x10,0x44,0x00,0xd2,0xff,0x40,0x14,0xc2,0x10,0x04,0x00,0x23,0x30,0x46,0x00, +0x21,0x18,0xa6,0x00,0x05,0x00,0x62,0x90,0x07,0x00,0x84,0x30,0x07,0x10,0x82,0x00, +0x01,0x00,0x42,0x30,0xca,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x0e,0x46,0x00,0x0c, +0x21,0x20,0x00,0x00,0xc4,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x75,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0x71,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0xb9,0x44,0x22,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xb9,0x44,0x22,0xa1,0x75,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0xa2,0x90, +0x02,0x80,0x07,0x3c,0xb4,0x44,0xe2,0xa0,0x02,0x00,0xa3,0x90,0x21,0x30,0x80,0x00, +0xb5,0x44,0x83,0xa0,0xb5,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0xb4,0x44,0xe2,0x90,0x00,0x00,0x00,0x00,0xb5,0x44,0xc2,0xa0, +0x8d,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0xb5,0x44,0x82,0x90,0x00,0x00,0x00,0x00, +0xb5,0x44,0xc2,0xa0,0x8d,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x09,0x3c, +0x78,0x1b,0x28,0x25,0xf4,0x23,0x06,0x8d,0xff,0xff,0x02,0x34,0x44,0x00,0xc2,0x10, +0x21,0x38,0x80,0x00,0x2b,0x10,0xc7,0x00,0x34,0x00,0x40,0x10,0x02,0x19,0x06,0x00, +0x21,0x10,0xc7,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0xf4,0x23,0x06,0xad, +0xf8,0x23,0x02,0xad,0x78,0x1b,0x26,0x25,0x06,0x00,0xc4,0x94,0xff,0xff,0x02,0x34, +0xff,0xff,0x83,0x30,0x33,0x00,0x62,0x10,0x00,0x11,0x07,0x00,0xff,0xff,0x84,0x30, +0x2b,0x10,0x87,0x00,0x20,0x00,0x40,0x10,0x03,0x19,0x04,0x00,0x03,0x11,0x04,0x00, +0x21,0x18,0x87,0x00,0x23,0x18,0x62,0x00,0x10,0x00,0x64,0x24,0x06,0x00,0xc4,0xa4, +0xf8,0x23,0xc3,0xac,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x45,0x00,0x78,0x1b,0x23,0x25,0x80,0x10,0x02,0x00,0x21,0x28,0x43,0x00, +0x80,0x11,0xa6,0x8c,0x00,0x21,0x07,0x00,0xff,0xff,0xc2,0x38,0x0a,0x30,0x82,0x00, +0x2b,0x18,0xc7,0x00,0x07,0x00,0x60,0x10,0x21,0x10,0xc7,0x00,0x02,0x19,0x06,0x00, +0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0x80,0x11,0xa6,0xac,0x08,0x00,0xe0,0x03, +0x84,0x11,0xa2,0xac,0x02,0x19,0x06,0x00,0x23,0x10,0x43,0x00,0x80,0x11,0xa2,0xac, +0x08,0x00,0xe0,0x03,0x84,0x11,0xa2,0xac,0x21,0x10,0x87,0x00,0x23,0x10,0x43,0x00, +0x06,0x00,0xc2,0xa4,0x3d,0x0d,0x00,0x08,0xf8,0x23,0xc2,0xac,0x21,0x10,0xc7,0x00, +0x23,0x10,0x43,0x00,0xf4,0x23,0x02,0xad,0xf8,0x23,0x02,0xad,0x78,0x1b,0x26,0x25, +0x06,0x00,0xc4,0x94,0xff,0xff,0x02,0x34,0xff,0xff,0x83,0x30,0xcf,0xff,0x62,0x14, +0x00,0x11,0x07,0x00,0x21,0x20,0x40,0x00,0x33,0x0d,0x00,0x08,0x06,0x00,0xc2,0xa4, +0x00,0x31,0x04,0x00,0x25,0x0d,0x00,0x08,0xf4,0x23,0x06,0xad,0x63,0x00,0x82,0x24, +0x77,0x00,0x42,0x2c,0x00,0x00,0x85,0x28,0x04,0x00,0x40,0x10,0x21,0x18,0x00,0x00, +0x64,0x00,0x82,0x24,0x64,0x00,0x03,0x24,0x0b,0x18,0x45,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x0c,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x07,0x00,0x40,0x14, +0x25,0xb0,0x02,0x3c,0x04,0x00,0xa4,0x90,0x10,0x00,0xbf,0x8f,0x18,0x00,0xbd,0x27, +0x42,0x20,0x04,0x00,0x6b,0x0d,0x00,0x08,0x96,0xff,0x84,0x24,0x24,0x08,0x42,0x34, +0x00,0x00,0x43,0x8c,0x00,0x00,0x00,0x00,0x00,0x02,0x63,0x30,0x1b,0x00,0x60,0x14, +0x01,0x00,0x02,0x24,0x05,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x82,0x21,0x03,0x00, +0x3c,0x00,0x82,0x10,0x02,0x00,0x82,0x28,0x57,0x00,0x40,0x14,0x02,0x00,0x02,0x24, +0x46,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0x2e,0x00,0x82,0x10,0x3e,0x00,0x63,0x30, +0x6b,0x0d,0x00,0x0c,0x21,0x20,0xc0,0x00,0x06,0x00,0x45,0x24,0x65,0x00,0xa4,0x2c, +0x64,0x00,0x03,0x24,0x0a,0x28,0x64,0x00,0xdd,0xff,0xa2,0x24,0x08,0x00,0x42,0x2c, +0x1f,0x00,0x40,0x10,0xe5,0xff,0xa2,0x24,0xfe,0xff,0xa5,0x24,0x10,0x00,0xbf,0x8f, +0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x05,0x00,0xa3,0x90, +0x00,0x00,0x00,0x00,0x60,0x00,0x64,0x30,0x42,0x21,0x04,0x00,0x25,0x00,0x82,0x10, +0x02,0x00,0x82,0x28,0x36,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x2f,0x00,0x82,0x10, +0x03,0x00,0x02,0x24,0xe6,0xff,0x82,0x14,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00, +0xd8,0xff,0x03,0x24,0x23,0x30,0x62,0x00,0x6b,0x0d,0x00,0x0c,0x21,0x20,0xc0,0x00, +0x06,0x00,0x45,0x24,0x65,0x00,0xa4,0x2c,0x64,0x00,0x03,0x24,0x0a,0x28,0x64,0x00, +0xdd,0xff,0xa2,0x24,0x08,0x00,0x42,0x2c,0xe3,0xff,0x40,0x14,0xe5,0xff,0xa2,0x24, +0x08,0x00,0x42,0x2c,0x06,0x00,0x40,0x10,0xf1,0xff,0xa2,0x24,0x9f,0x0d,0x00,0x08, +0xfa,0xff,0xa5,0x24,0xd8,0xff,0x02,0x24,0x94,0x0d,0x00,0x08,0x23,0x30,0x43,0x00, +0x0c,0x00,0x42,0x2c,0x0c,0x00,0x40,0x10,0xfb,0xff,0xa2,0x24,0x9f,0x0d,0x00,0x08, +0xf8,0xff,0xa5,0x24,0x3e,0x00,0x63,0x30,0xfe,0xff,0x02,0x24,0x94,0x0d,0x00,0x08, +0x23,0x30,0x43,0x00,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00,0xfe,0xff,0x03,0x24, +0xb2,0x0d,0x00,0x08,0x23,0x30,0x62,0x00,0x0a,0x00,0x42,0x2c,0xcb,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x9f,0x0d,0x00,0x08,0xfc,0xff,0xa5,0x24,0x3e,0x00,0x63,0x30, +0xec,0xff,0x02,0x24,0x94,0x0d,0x00,0x08,0x23,0x30,0x43,0x00,0x1f,0x00,0x62,0x30, +0x40,0x10,0x02,0x00,0xec,0xff,0x03,0x24,0xb2,0x0d,0x00,0x08,0x23,0x30,0x62,0x00, +0xb3,0xff,0x80,0x14,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00,0x0e,0x00,0x03,0x24, +0xb2,0x0d,0x00,0x08,0x23,0x30,0x62,0x00,0xad,0xff,0x80,0x14,0x3e,0x00,0x63,0x30, +0x0e,0x00,0x02,0x24,0x94,0x0d,0x00,0x08,0x23,0x30,0x43,0x00,0xa0,0xff,0xbd,0x27, +0x5c,0x00,0xbf,0xaf,0x58,0x00,0xbe,0xaf,0x54,0x00,0xb7,0xaf,0x50,0x00,0xb6,0xaf, +0x4c,0x00,0xb5,0xaf,0x48,0x00,0xb4,0xaf,0x44,0x00,0xb3,0xaf,0x40,0x00,0xb2,0xaf, +0x3c,0x00,0xb1,0xaf,0x38,0x00,0xb0,0xaf,0x02,0x80,0x02,0x3c,0x68,0x41,0x45,0x8c, +0x00,0x80,0x04,0x3c,0xac,0x37,0x83,0x24,0x68,0x41,0x44,0x24,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0xbb,0x00,0xa4,0x10,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0x7c,0xaf,0x42,0x24,0x80,0xaf,0x63,0x24,0x00,0x00,0x5e,0x8c, +0x00,0x00,0x75,0x8c,0xf0,0x25,0xd6,0x8f,0x21,0x20,0x00,0x00,0x21,0xb8,0x00,0x00, +0x08,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xae,0x08,0x00,0xc3,0x96, +0x02,0x80,0x02,0x3c,0x00,0x02,0x00,0x0c,0x25,0xa0,0x62,0x00,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xe4,0x0a,0xc3,0x97, +0x8c,0x25,0xc2,0x8f,0x25,0xb0,0x04,0x3c,0xf8,0x00,0x84,0x34,0x21,0x10,0x43,0x00, +0x00,0x00,0x82,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x23,0x0e,0x00,0x08,0x00,0x00,0x00,0x00,0x0c,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00, +0x2b,0x10,0xe2,0x02,0x86,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x8e, +0x21,0x98,0x80,0x02,0x42,0x1b,0x02,0x00,0x78,0x00,0x63,0x30,0x02,0x26,0x02,0x00, +0xff,0x3f,0x42,0x30,0x21,0x10,0x43,0x00,0x03,0x00,0x84,0x30,0x21,0x10,0x44,0x00, +0x18,0x00,0x42,0x24,0xff,0xff,0x52,0x30,0x7f,0x00,0x43,0x32,0x00,0x00,0xb2,0xae, +0x03,0x00,0x60,0x10,0x80,0xff,0x42,0x32,0x80,0x00,0x42,0x26,0x80,0xff,0x42,0x30, +0x00,0x00,0xa2,0xae,0x21,0x90,0x40,0x00,0x02,0x00,0x62,0x96,0x21,0x18,0xf2,0x02, +0xff,0xff,0x77,0x30,0x0f,0x00,0x42,0x30,0x00,0x00,0xa2,0xae,0x00,0x00,0x63,0x8e, +0x21,0xa0,0x92,0x02,0x42,0x13,0x03,0x00,0x78,0x00,0x42,0x30,0x02,0x1e,0x03,0x00, +0x03,0x00,0x63,0x30,0x21,0x10,0x53,0x00,0x21,0x88,0x43,0x00,0x18,0x00,0x25,0x26, +0x00,0x00,0xa5,0xae,0x01,0x00,0xa4,0x90,0x18,0x00,0x22,0x92,0x00,0x22,0x04,0x00, +0x73,0x0b,0x00,0x0c,0x25,0x20,0x82,0x00,0x40,0x18,0x02,0x00,0x21,0x18,0x62,0x00, +0x02,0x80,0x04,0x3c,0x21,0x80,0x40,0x00,0x80,0x18,0x03,0x00,0x98,0xa8,0x82,0x24, +0x21,0x18,0x62,0x00,0x08,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x09,0xf8,0x40,0x00, +0x21,0x20,0x60,0x02,0x06,0x00,0x03,0x24,0xc7,0xff,0x03,0x16,0x00,0x00,0x00,0x00, +0xe8,0x0a,0xc2,0x93,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xc2,0xff,0x40,0x10, +0x02,0x80,0x02,0x3c,0x28,0x00,0x24,0x26,0x18,0x42,0x45,0x24,0x7b,0x46,0x00,0x0c, +0x06,0x00,0x06,0x24,0xbc,0xff,0x40,0x14,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c, +0xbc,0x44,0x64,0x8c,0x9c,0x44,0x43,0x90,0x02,0x80,0x02,0x3c,0x38,0xa9,0x45,0x8c, +0xff,0x00,0x63,0x30,0x40,0x10,0x03,0x00,0x21,0x10,0x43,0x00,0xc0,0x10,0x02,0x00, +0x21,0x10,0x43,0x00,0x23,0x20,0x85,0x00,0x80,0x10,0x02,0x00,0x2b,0x20,0x82,0x00, +0xad,0xff,0x80,0x14,0x02,0x80,0x03,0x3c,0xbc,0x44,0x62,0x8c,0x21,0x20,0x40,0x02, +0x02,0x80,0x03,0x3c,0x39,0x15,0x00,0x0c,0x38,0xa9,0x62,0xac,0x1d,0x01,0x40,0x10, +0x21,0x88,0x40,0x00,0x00,0x00,0x65,0x8e,0x08,0x00,0x50,0x94,0x04,0x00,0x64,0x8e, +0xf0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0xe0,0xff,0x03,0x24,0x24,0x28,0xa2,0x00, +0xff,0xfb,0x02,0x3c,0x24,0x20,0x83,0x00,0xff,0xff,0x42,0x34,0x02,0x80,0x03,0x3c, +0x25,0x80,0x03,0x02,0x24,0x28,0xa2,0x00,0x1e,0x00,0x84,0x34,0x04,0x00,0x64,0xae, +0x00,0x00,0x65,0xae,0x21,0x20,0x00,0x02,0x21,0x28,0x60,0x02,0x52,0x46,0x00,0x0c, +0x06,0x00,0x06,0x24,0xc8,0xff,0x46,0x26,0xcb,0xff,0x43,0x26,0x00,0x00,0xc2,0x28, +0x0b,0x30,0x62,0x00,0x18,0x00,0x04,0x26,0x83,0x30,0x06,0x00,0x52,0x46,0x00,0x0c, +0x38,0x00,0x65,0x26,0x15,0x00,0x03,0x24,0x14,0x00,0x23,0xae,0x00,0x00,0x62,0x8e, +0x21,0x20,0x20,0x02,0x42,0x1b,0x02,0x00,0x78,0x00,0x63,0x30,0x02,0x2e,0x02,0x00, +0xff,0x3f,0x42,0x30,0x21,0x10,0x43,0x00,0x03,0x00,0xa5,0x30,0x21,0x10,0x45,0x00, +0x18,0x00,0x42,0x24,0x59,0x0a,0x00,0x0c,0x0c,0x00,0x22,0xae,0x0c,0x00,0xc2,0x8e, +0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x02,0x7c,0xff,0x40,0x14,0x00,0x00,0x00,0x00, +0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x04,0x00,0xc3,0x8e,0x00,0x00,0xc2,0x8e,0x21,0x20,0xc0,0x02,0x00,0x00,0x62,0xac, +0x04,0x00,0x43,0xac,0x00,0x00,0xd6,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0xd6,0xae, +0x00,0x60,0x90,0x40,0x02,0x80,0x04,0x3c,0x68,0x41,0x83,0x8c,0x68,0x41,0x82,0x24, +0x4c,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x7c,0xaf,0x42,0x24, +0x00,0x00,0x51,0x8c,0x25,0xb0,0x10,0x3c,0x04,0x01,0x02,0x36,0x00,0x00,0x43,0x8c, +0xa4,0x25,0x27,0x8e,0x00,0x00,0x00,0x00,0xc5,0x00,0xe3,0x10,0xa8,0x25,0x23,0xae, +0x2b,0x10,0x67,0x00,0xe4,0x00,0x40,0x14,0x2b,0x10,0xe3,0x00,0x0c,0x01,0x40,0x14, +0x23,0x10,0x67,0x00,0x02,0x80,0x03,0x3c,0x78,0x1b,0x64,0x24,0x78,0x25,0x83,0x94, +0x02,0x80,0x02,0x3c,0x21,0x90,0x00,0x00,0x22,0x00,0xe0,0x1a,0x25,0x88,0x62,0x00, +0x21,0xa8,0x80,0x00,0x21,0xf0,0x80,0x00,0x21,0x80,0x00,0x00,0x01,0x00,0x14,0x24, +0x21,0x98,0x11,0x02,0x04,0x00,0x62,0x8e,0x02,0x00,0x03,0x24,0x02,0x17,0x02,0x00, +0x03,0x00,0x42,0x30,0x31,0x00,0x43,0x10,0x02,0x80,0x04,0x3c,0x21,0x10,0x11,0x02, +0x00,0x00,0x43,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x10,0x01,0x00,0x42,0x26, +0x04,0x00,0x62,0x8e,0x00,0xf0,0x03,0x3c,0x00,0x20,0x04,0x3c,0x24,0x10,0x43,0x00, +0x10,0x00,0x44,0x10,0x00,0x00,0x00,0x00,0x06,0x00,0x42,0x26,0x00,0x00,0x65,0x8e, +0xff,0xff,0x52,0x30,0x82,0x16,0x05,0x00,0x01,0x00,0x42,0x30,0x4a,0x00,0x54,0x10, +0x02,0x80,0x03,0x3c,0x80,0x80,0x12,0x00,0x2a,0x10,0x17,0x02,0xe4,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x56,0x15,0x00,0x0c,0x21,0x20,0xc0,0x02,0x8e,0x0f,0x00,0x08, +0x02,0x80,0x02,0x3c,0xc8,0x0c,0xa2,0x8e,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xc8,0x0c,0xa2,0xae,0x0c,0x00,0x64,0x8e,0x0c,0x00,0x02,0x24,0x3f,0x00,0x83,0x30, +0xa6,0x00,0x62,0x10,0x21,0x28,0xa0,0x02,0x3f,0x00,0x83,0x30,0x0d,0x00,0x02,0x24, +0x9b,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x3f,0x00,0x83,0x30,0x0e,0x00,0x02,0x24, +0xe2,0xff,0x62,0x14,0x06,0x00,0x42,0x26,0xd4,0x0c,0xa2,0x8e,0x00,0x00,0x00,0x00, +0x01,0x00,0x42,0x24,0xe6,0x0e,0x00,0x08,0xd4,0x0c,0xa2,0xae,0x98,0x44,0x82,0x90, +0x00,0x00,0x00,0x00,0xce,0xff,0x40,0x10,0x21,0x10,0x11,0x02,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x98,0x44,0x82,0x90, +0x02,0x80,0x03,0x3c,0xe4,0xae,0x65,0x24,0xff,0x00,0x42,0x30,0x80,0x10,0x02,0x00, +0x21,0x10,0x45,0x00,0x00,0x00,0x43,0x8c,0x00,0x00,0x64,0x8e,0x04,0x00,0x65,0x8e, +0x09,0xf8,0x60,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0x9a,0x44,0x82,0x90, +0x0c,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x10,0x02,0x80,0x03,0x3c, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xdc,0x0e,0x00,0x08, +0x21,0x10,0x11,0x02,0xb1,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0xf8,0xff,0x40,0x10, +0x02,0x80,0x04,0x3c,0xb7,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xb7,0x44,0x82,0xa0,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0xdc,0x0e,0x00,0x08,0x21,0x10,0x11,0x02,0x78,0x1b,0x62,0x8c,0x00,0x00,0x00,0x00, +0x02,0x11,0x02,0x00,0x03,0x00,0x42,0x30,0x05,0x00,0x54,0x10,0xc2,0x13,0x05,0x00, +0x1e,0x00,0x42,0x30,0x21,0x10,0x52,0x00,0xed,0x0e,0x00,0x08,0xff,0xff,0x52,0x30, +0x01,0x00,0xc2,0x93,0x00,0x00,0x00,0x00,0x1c,0x00,0x40,0x14,0x02,0x80,0x04,0x3c, +0x04,0x00,0x64,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x04,0x00,0x0f,0x00,0x45,0x30, +0x08,0x00,0xa3,0x28,0x14,0x00,0x60,0x10,0x02,0x17,0x04,0x00,0x03,0x00,0x43,0x30, +0x08,0x00,0x60,0x10,0x00,0xc0,0x02,0x3c,0x24,0x10,0x82,0x00,0x0e,0x00,0x40,0x14, +0x03,0x00,0x02,0x24,0x0d,0x00,0x62,0x10,0x02,0x80,0x04,0x3c,0x0c,0x00,0x60,0x10, +0x78,0x1b,0x82,0x24,0x21,0x10,0xbe,0x00,0xf0,0x04,0x50,0x90,0x80,0x28,0x12,0x00, +0x21,0x28,0xb1,0x00,0x75,0x0d,0x00,0x0c,0x21,0x20,0x60,0x02,0x21,0x20,0x40,0x00, +0x1f,0x0d,0x00,0x0c,0x21,0x28,0x00,0x02,0x02,0x80,0x04,0x3c,0x78,0x1b,0x82,0x24, +0x01,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x89,0x00,0x74,0x10,0x00,0x00,0x00,0x00, +0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,0x01,0x00,0x83,0x90,0x02,0x00,0x02,0x24, +0x08,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x8e,0x00,0x00,0x00,0x00, +0xc2,0x13,0x05,0x00,0x1e,0x00,0x42,0x30,0x21,0x10,0x52,0x00,0xed,0x0e,0x00,0x08, +0xff,0xff,0x52,0x30,0x04,0x00,0x64,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x04,0x00, +0x0f,0x00,0x45,0x30,0x08,0x00,0xa3,0x28,0xf3,0xff,0x60,0x10,0x02,0x17,0x04,0x00, +0x03,0x00,0x42,0x30,0xf0,0xff,0x40,0x14,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24, +0x21,0x10,0xa3,0x00,0xf0,0x04,0x50,0x90,0x80,0x28,0x12,0x00,0x21,0x28,0xb1,0x00, +0x75,0x0d,0x00,0x0c,0x21,0x20,0x60,0x02,0x21,0x20,0x40,0x00,0x1f,0x0d,0x00,0x0c, +0x21,0x28,0x00,0x02,0x00,0x00,0x65,0x8e,0x6d,0x0f,0x00,0x08,0xc2,0x13,0x05,0x00, +0x02,0x80,0x04,0x3c,0x00,0x01,0x02,0x36,0x78,0x1b,0x84,0x24,0x00,0x00,0x47,0xac, +0xa4,0x25,0x87,0xac,0x02,0x80,0x02,0x3c,0x08,0x04,0x44,0x24,0x21,0x28,0x00,0x00, +0x21,0x30,0x00,0x00,0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0xf7,0x0d,0x00,0x08, +0x02,0x80,0x02,0x3c,0x99,0x99,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x96,0x99,0x63,0x34, +0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x1e,0x0e,0x00,0x08,0x00,0x00,0x00,0x00, +0xd0,0x0c,0xa2,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xd0,0x0c,0xa2,0xac, +0x0c,0x00,0x64,0x8e,0x03,0x0f,0x00,0x08,0x3f,0x00,0x83,0x30,0xcc,0x0c,0xa2,0x8e, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xcc,0x0c,0xa2,0xae,0x0c,0x00,0x64,0x8e, +0xff,0x0e,0x00,0x08,0x3f,0x00,0x83,0x30,0xac,0x25,0x22,0x8e,0xff,0xff,0x73,0x30, +0x23,0x10,0x47,0x00,0xff,0xff,0x52,0x30,0x21,0x18,0x53,0x02,0xff,0xff,0x77,0x30, +0x39,0x15,0x00,0x0c,0x21,0x20,0xe0,0x02,0xda,0xff,0x40,0x10,0x21,0xb0,0x40,0x00, +0x08,0x00,0x42,0x8c,0xa4,0x25,0x26,0x8e,0x21,0x38,0x40,0x02,0x21,0x18,0x57,0x00, +0x74,0x25,0x23,0xae,0x21,0x28,0x40,0x00,0x08,0x00,0x04,0x24,0x78,0x25,0x22,0xae, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x00,0x02,0x00,0x0c,0x08,0x00,0x04,0x24, +0x78,0x25,0x25,0x8e,0x24,0x10,0x02,0x3c,0x00,0x01,0x10,0x36,0x00,0x00,0x02,0xae, +0x21,0x38,0x60,0x02,0x21,0x28,0xb2,0x00,0x08,0x00,0x04,0x24,0x24,0x10,0x06,0x3c, +0xa4,0x25,0x22,0xae,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xa8,0x25,0x23,0x8e, +0x08,0x00,0x04,0x24,0x00,0x02,0x00,0x0c,0xa4,0x25,0x23,0xae,0xa4,0x25,0x22,0x8e, +0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xae,0xca,0x0e,0x00,0x08,0x02,0x80,0x03,0x3c, +0xff,0xff,0x57,0x30,0x39,0x15,0x00,0x0c,0x21,0x20,0xe0,0x02,0x42,0x00,0x40,0x10, +0x21,0xb0,0x40,0x00,0x08,0x00,0x42,0x8c,0xa4,0x25,0x26,0x8e,0x08,0x00,0x04,0x24, +0x21,0x18,0x57,0x00,0x74,0x25,0x23,0xae,0x21,0x28,0x40,0x00,0x21,0x38,0xe0,0x02, +0x78,0x25,0x22,0xae,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xa8,0x25,0x23,0x8e, +0x08,0x00,0x04,0x24,0x00,0x02,0x00,0x0c,0xa4,0x25,0x23,0xae,0xa4,0x25,0x23,0x8e, +0x00,0x01,0x02,0x36,0x00,0x00,0x43,0xac,0xca,0x0e,0x00,0x08,0x02,0x80,0x03,0x3c, +0x04,0x00,0x64,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x04,0x00,0x0f,0x00,0x42,0x30, +0x08,0x00,0x42,0x28,0x06,0x00,0x40,0x10,0x00,0xc0,0x02,0x3c,0x02,0x17,0x04,0x00, +0x03,0x00,0x42,0x30,0x0b,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x00,0xc0,0x02,0x3c, +0x24,0x10,0x82,0x00,0x6a,0xff,0x40,0x14,0x02,0x17,0x04,0x00,0x03,0x00,0x42,0x30, +0x03,0x00,0x03,0x24,0x66,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x64,0xff,0x40,0x10, +0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x8c,0x00,0x00,0x00,0x00,0x42,0x10,0x02,0x00, +0x01,0x00,0x42,0x30,0x06,0x00,0x54,0x14,0x21,0x80,0x00,0x00,0x02,0x14,0x04,0x00, +0x0f,0x00,0x42,0x30,0x78,0x1b,0x63,0x24,0x21,0x10,0x43,0x00,0xf0,0x04,0x50,0x90, +0x80,0x28,0x12,0x00,0x21,0x28,0xb1,0x00,0xec,0xff,0xa2,0x8c,0x25,0xb0,0x03,0x3c, +0xd4,0x02,0x63,0x34,0x21,0x20,0x60,0x02,0x00,0x00,0x62,0xac,0x75,0x0d,0x00,0x0c, +0x00,0x00,0x00,0x00,0x21,0x20,0x40,0x00,0x1f,0x0d,0x00,0x0c,0x21,0x28,0x00,0x02, +0x65,0x0f,0x00,0x08,0x02,0x80,0x04,0x3c,0xa8,0x25,0x23,0x8e,0x00,0x01,0x02,0x36, +0x00,0x00,0x43,0xac,0x8d,0x0f,0x00,0x08,0xa4,0x25,0x23,0xae,0xe0,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x0c,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x29,0x00,0x40,0x14, +0x21,0x80,0xa0,0x00,0x00,0x00,0xa4,0x8c,0x02,0x80,0x11,0x3c,0x3f,0x00,0x84,0x30, +0x40,0x20,0x04,0x00,0x6b,0x0d,0x00,0x0c,0x96,0xff,0x84,0x24,0x78,0x1b,0x25,0x26, +0xfc,0x23,0xa4,0x8c,0x21,0x18,0x40,0x00,0xff,0xff,0x02,0x34,0x3c,0x00,0x82,0x10, +0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x27,0x00,0x40,0x10,0x21,0x10,0x83,0x00, +0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00,0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24, +0xfc,0x23,0xa4,0xac,0x00,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00, +0x7e,0x00,0x84,0x30,0x6b,0x0d,0x00,0x0c,0x96,0xff,0x84,0x24,0x78,0x1b,0x25,0x26, +0x00,0x24,0xa4,0x8c,0x21,0x18,0x40,0x00,0xff,0xff,0x02,0x34,0x25,0x00,0x82,0x10, +0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x0b,0x00,0x40,0x10,0x21,0x10,0x83,0x00, +0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00,0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24, +0x00,0x24,0xa4,0xac,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x02,0x19,0x04,0x00,0x23,0x10,0x43,0x00,0x20,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x00,0x24,0xa2,0xac,0x02,0x19,0x04,0x00,0x23,0x10,0x43,0x00, +0xfc,0x23,0xa2,0xac,0x00,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00, +0x7e,0x00,0x84,0x30,0x6b,0x0d,0x00,0x0c,0x96,0xff,0x84,0x24,0x78,0x1b,0x25,0x26, +0x00,0x24,0xa4,0x8c,0x21,0x18,0x40,0x00,0xff,0xff,0x02,0x34,0xde,0xff,0x82,0x14, +0x2b,0x10,0x83,0x00,0x00,0x21,0x03,0x00,0x49,0x10,0x00,0x08,0x00,0x24,0xa4,0xac, +0x00,0x21,0x03,0x00,0x35,0x10,0x00,0x08,0xfc,0x23,0xa4,0xac,0xb8,0xff,0xbd,0x27, +0x25,0xb0,0x03,0x3c,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf,0x3c,0x00,0xb7,0xaf, +0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf,0x2c,0x00,0xb3,0xaf, +0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf,0x44,0x00,0x63,0x34, +0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00, +0x0e,0x00,0x40,0x04,0x18,0x00,0xa0,0xaf,0x21,0x20,0x60,0x00,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0xff,0x42,0x30,0x64,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x02,0x00, +0x03,0x16,0x02,0x00,0xf6,0xff,0x41,0x04,0x21,0x10,0x00,0x00,0x02,0x80,0x02,0x3c, +0x78,0x41,0x43,0x8c,0x00,0x80,0x06,0x3c,0xcc,0x41,0xc2,0x24,0x25,0xb0,0x05,0x3c, +0x02,0x80,0x06,0x3c,0x18,0x03,0xa4,0x34,0x78,0x41,0xd1,0x24,0x00,0x00,0x82,0xac, +0x5d,0x00,0x71,0x10,0x01,0x00,0x15,0x24,0x2a,0xb0,0x02,0x3c,0x02,0x80,0x03,0x3c, +0x06,0x00,0x56,0x34,0x78,0x1b,0x74,0x24,0xb0,0x03,0xb7,0x34,0x21,0xf0,0x80,0x00, +0x05,0x00,0x53,0x34,0x01,0x00,0x12,0x24,0x1b,0x00,0xa0,0x12,0x02,0x80,0x03,0x3c, +0x98,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x17,0x00,0x40,0x10,0x21,0xa8,0x00,0x00, +0x01,0x00,0x06,0x24,0x18,0x00,0xa6,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x57,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x02,0x80,0x06,0x3c,0x56,0x43,0xc2,0x90,0x00,0x00,0x00,0x00, +0x02,0x00,0x42,0x30,0x4d,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x00,0xc2,0x96,0x00,0x26,0x90,0x8e, +0x00,0xff,0x42,0x30,0x00,0x00,0xf0,0xae,0x0d,0x00,0x40,0x18,0x02,0x80,0x02,0x3c, +0x84,0xaf,0x42,0x24,0x21,0x28,0xc0,0x03,0x00,0x00,0x44,0x8c,0x02,0x80,0x06,0x3c, +0x88,0xaf,0xc6,0x24,0x00,0x00,0xc3,0x8c,0x00,0x00,0xa4,0xac,0x00,0x00,0x62,0x94, +0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x30,0xfb,0xff,0x40,0x1c,0x00,0x00,0x00,0x00, +0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x07,0x00,0x62,0x30,0x48,0x00,0x40,0x14, +0x08,0x00,0x62,0x24,0xc2,0x10,0x03,0x00,0x08,0x00,0x05,0x8e,0xcc,0x24,0x86,0x8e, +0xc0,0x10,0x02,0x00,0x20,0x00,0x42,0x24,0xff,0xff,0x47,0x30,0x01,0x00,0x04,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xb2,0xaf,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24, +0x02,0x00,0x02,0x24,0x00,0x00,0x72,0xa2,0x00,0x00,0x62,0xa2,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x04,0x00,0x03,0x8e, +0x00,0x00,0x02,0x8e,0x21,0x20,0x00,0x02,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac, +0x00,0x00,0x10,0xae,0x56,0x15,0x00,0x0c,0x04,0x00,0x10,0xae,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x00,0x22,0x8e,0x00,0x00,0x00,0x00, +0xad,0xff,0x51,0x14,0x00,0x00,0x00,0x00,0x18,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00, +0x07,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x98,0x44,0x62,0x90, +0x00,0x00,0x00,0x00,0x11,0x00,0x40,0x14,0x18,0x00,0xa0,0xaf,0x02,0x80,0x02,0x3c, +0x08,0x08,0x44,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,0x2d,0x28,0x00,0x0c, +0x21,0x38,0x00,0x00,0x94,0x10,0x00,0x08,0x02,0x80,0x02,0x3c,0x55,0x1f,0x00,0x0c, +0x01,0x00,0x04,0x24,0xbf,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0xf9,0x1f,0x00,0x0c, +0x04,0x00,0x04,0x24,0xba,0x10,0x00,0x08,0x02,0x80,0x06,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x06,0x3c, +0x99,0x44,0xc4,0x90,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x04,0x11,0x00,0x08,0x02,0x80,0x02,0x3c, +0xda,0x10,0x00,0x08,0xc2,0x10,0x02,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00, +0x08,0x00,0xe0,0x03,0x08,0x00,0x82,0x24,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf, +0x24,0x11,0x00,0x0c,0x74,0x00,0x84,0x24,0x21,0x28,0x40,0x00,0x10,0x00,0xa4,0x27, +0x46,0x46,0x00,0x0c,0x02,0x00,0x06,0x24,0x10,0x00,0xa2,0x97,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27, +0x18,0x00,0xbf,0xaf,0x24,0x11,0x00,0x0c,0x10,0x00,0xa5,0xa7,0x21,0x20,0x40,0x00, +0x10,0x00,0xa5,0x27,0x46,0x46,0x00,0x0c,0x02,0x00,0x06,0x24,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03, +0x0a,0x00,0x82,0x24,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x3f,0x11,0x00,0x0c, +0x74,0x00,0x84,0x24,0x21,0x28,0x40,0x00,0x10,0x00,0xa4,0x27,0x46,0x46,0x00,0x0c, +0x02,0x00,0x06,0x24,0x10,0x00,0xa2,0x97,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf, +0x21,0x80,0x80,0x00,0x00,0x00,0x05,0xa2,0x01,0x00,0x06,0xa2,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x1c,0x00,0xbf,0xaf,0x21,0x88,0xc0,0x00,0x02,0x00,0x84,0x24, +0x30,0x00,0xb2,0x8f,0x0d,0x00,0xc0,0x14,0x21,0x28,0xe0,0x00,0x00,0x00,0x43,0x8e, +0x21,0x10,0x11,0x02,0x1c,0x00,0xbf,0x8f,0x21,0x18,0x71,0x00,0x02,0x00,0x63,0x24, +0x00,0x00,0x43,0xae,0x14,0x00,0xb1,0x8f,0x18,0x00,0xb2,0x8f,0x10,0x00,0xb0,0x8f, +0x02,0x00,0x42,0x24,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x46,0x46,0x00,0x0c, +0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x8e,0x21,0x10,0x11,0x02,0x1c,0x00,0xbf,0x8f, +0x21,0x18,0x71,0x00,0x02,0x00,0x63,0x24,0x00,0x00,0x43,0xae,0x14,0x00,0xb1,0x8f, +0x18,0x00,0xb2,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x00,0x42,0x24,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x21,0x80,0xa0,0x00, +0x18,0x00,0xb2,0xaf,0x21,0x28,0xc0,0x00,0x21,0x90,0xe0,0x00,0x21,0x30,0x00,0x02, +0x1c,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x46,0x46,0x00,0x0c,0x21,0x88,0x80,0x00, +0x00,0x00,0x43,0x8e,0x21,0x10,0x30,0x02,0x1c,0x00,0xbf,0x8f,0x21,0x18,0x70,0x00, +0x00,0x00,0x43,0xae,0x14,0x00,0xb1,0x8f,0x18,0x00,0xb2,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x10,0x00,0xe0,0x18,0x21,0x18,0x00,0x00, +0x00,0x00,0xc0,0xac,0x21,0x40,0x00,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00, +0x0c,0x00,0x45,0x10,0x21,0x18,0x80,0x00,0x01,0x00,0x82,0x90,0x00,0x00,0x00,0x00, +0x21,0x18,0x48,0x00,0x02,0x00,0x68,0x24,0x21,0x10,0x82,0x00,0x2b,0x18,0x07,0x01, +0xf5,0xff,0x60,0x14,0x02,0x00,0x44,0x24,0x21,0x18,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x01,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xac, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x7f,0x00,0x84,0x30,0x0c,0x00,0x82,0x2c, +0x0a,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00, +0x8c,0xaf,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00, +0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x6c,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x60,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x48,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x30,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x24,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x18,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x12,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x0c,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x16,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x0b,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x04,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x02,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xc8,0xff,0xbd,0x27,0x24,0x00,0xb5,0xaf, +0x02,0x80,0x15,0x3c,0x2c,0x00,0xb7,0xaf,0x28,0x00,0xb6,0xaf,0x20,0x00,0xb4,0xaf, +0x1c,0x00,0xb3,0xaf,0x30,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf, +0x10,0x00,0xb0,0xaf,0x21,0xb8,0x80,0x00,0x21,0xa0,0x00,0x00,0x21,0x98,0x00,0x00, +0x78,0x1b,0xb6,0x26,0x78,0x1b,0xa2,0x26,0x21,0x10,0x62,0x02,0x44,0x0b,0x51,0x90, +0xfe,0x00,0x03,0x24,0x1e,0x00,0x23,0x12,0xff,0x00,0x02,0x24,0x21,0x00,0x22,0x12, +0x21,0x10,0x80,0x02,0xa2,0x11,0x00,0x0c,0x21,0x20,0x20,0x02,0x21,0x88,0x40,0x00, +0x21,0x80,0x00,0x00,0x21,0x90,0xc0,0x02,0x21,0x10,0x12,0x02,0x26,0x0b,0x44,0x90, +0x00,0x00,0x00,0x00,0x02,0x00,0x82,0x24,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x2c, +0x05,0x00,0x40,0x14,0x01,0x00,0x10,0x26,0xa2,0x11,0x00,0x0c,0x00,0x00,0x00,0x00, +0x05,0x00,0x51,0x10,0x01,0x00,0x03,0x24,0x1e,0x00,0x02,0x2a,0xf3,0xff,0x40,0x14, +0x21,0x10,0x12,0x02,0x21,0x18,0x00,0x00,0x01,0x00,0x02,0x24,0x14,0x00,0x62,0x10, +0xff,0x00,0x22,0x32,0x21,0x10,0xf4,0x02,0x00,0x00,0x51,0xa0,0x01,0x00,0x94,0x26, +0x01,0x00,0x73,0x26,0x1e,0x00,0x62,0x2a,0xdb,0xff,0x40,0x14,0x78,0x1b,0xa2,0x26, +0x21,0x10,0x80,0x02,0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb7,0x8f,0x28,0x00,0xb6,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27, +0x01,0x12,0x00,0x08,0x80,0x00,0x51,0x34,0xb8,0xff,0xbd,0x27,0x3c,0x00,0xb3,0xaf, +0x38,0x00,0xb2,0xaf,0x30,0x00,0xb0,0xaf,0x21,0x90,0xc0,0x00,0x21,0x98,0xa0,0x00, +0x1e,0x00,0x06,0x24,0x21,0x28,0x00,0x00,0x21,0x80,0x80,0x00,0x10,0x00,0xa4,0x27, +0x40,0x00,0xbf,0xaf,0x35,0x46,0x00,0x0c,0x34,0x00,0xb1,0xaf,0x10,0x00,0xa4,0x27, +0xd2,0x11,0x00,0x0c,0x00,0x00,0x40,0xae,0x21,0x88,0x40,0x00,0x09,0x00,0x43,0x28, +0x21,0x38,0x40,0x00,0x08,0x00,0x02,0x24,0x0a,0x88,0x43,0x00,0x01,0x00,0x02,0x24, +0x21,0x20,0x60,0x02,0x10,0x00,0xa5,0x27,0x0e,0x00,0x02,0x12,0x21,0x30,0x20,0x02, +0x05,0x00,0x60,0x14,0xf8,0xff,0xf1,0x24,0x21,0x20,0x60,0x02,0x18,0x00,0xa5,0x27, +0x08,0x00,0x20,0x16,0x21,0x30,0x20,0x02,0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb3,0x8f, +0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f,0x30,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x48,0x00,0xbd,0x27,0x46,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0xae, +0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb3,0x8f,0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f, +0x30,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,0x00,0x00,0x82,0x94, +0x21,0x30,0x80,0x00,0x10,0x00,0x85,0x24,0x42,0x1a,0x02,0x00,0xc2,0x11,0x02,0x00, +0x02,0x00,0x42,0x30,0x01,0x00,0x63,0x30,0x25,0x18,0x43,0x00,0x01,0x00,0x04,0x24, +0x07,0x00,0x64,0x10,0x00,0x00,0x00,0x00,0x05,0x00,0x60,0x10,0x0a,0x00,0xc5,0x24, +0x02,0x00,0x02,0x24,0x02,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x18,0x00,0xc5,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0x00,0x00,0x82,0x94,0x21,0x30,0x80,0x00, +0x04,0x00,0x85,0x24,0x42,0x1a,0x02,0x00,0xc2,0x11,0x02,0x00,0x02,0x00,0x42,0x30, +0x01,0x00,0x63,0x30,0x25,0x18,0x43,0x00,0x01,0x00,0x04,0x24,0x04,0x00,0x64,0x10, +0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0xc5,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0x13,0x00,0xa0,0x18,0x21,0x30,0x00,0x00, +0x02,0x00,0x07,0x24,0x04,0x00,0x08,0x24,0x0b,0x00,0x09,0x24,0x16,0x00,0x0a,0x24, +0x21,0x10,0x86,0x00,0x00,0x00,0x43,0x90,0x01,0x00,0xc6,0x24,0x7f,0x00,0x63,0x30, +0x07,0x00,0x67,0x10,0x2a,0x10,0xc5,0x00,0x05,0x00,0x68,0x10,0x00,0x00,0x00,0x00, +0x03,0x00,0x69,0x10,0x00,0x00,0x00,0x00,0x05,0x00,0x6a,0x14,0x00,0x00,0x00,0x00, +0xf3,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf, +0x6a,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,0x01,0x00,0x44,0x38, +0x03,0x00,0x03,0x24,0x01,0x00,0x02,0x24,0x0b,0x10,0x64,0x00,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x02,0x40, +0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c, +0xfc,0xa9,0x64,0xac,0x00,0x60,0x82,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x02,0x80,0x02,0x3c,0xfc,0xa9,0x45,0x8c,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0x70,0x4a,0x63,0x24,0x00,0x00,0x43,0xac,0x04,0x00,0x02,0x24, +0x1e,0x00,0xa2,0x10,0x05,0x00,0xa2,0x2c,0x10,0x00,0x40,0x10,0x05,0x00,0x02,0x24, +0x03,0x00,0x02,0x24,0x08,0x00,0xa2,0x10,0x00,0x19,0x04,0x00,0x80,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00, +0x21,0x10,0x44,0x00,0x40,0x19,0x02,0x00,0xff,0xff,0x63,0x24,0xfe,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf3,0xff,0xa2,0x10, +0x06,0x00,0x02,0x24,0xf2,0xff,0xa2,0x14,0x80,0x10,0x04,0x00,0x40,0x11,0x04,0x00, +0x23,0x10,0x44,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x00,0x19,0x02,0x00, +0x23,0x18,0x62,0x00,0xb2,0x12,0x00,0x08,0x00,0x19,0x03,0x00,0x80,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00, +0x21,0x10,0x44,0x00,0xb2,0x12,0x00,0x08,0x00,0x19,0x02,0x00,0x02,0x80,0x02,0x3c, +0xfc,0xa9,0x45,0x8c,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34, +0x2c,0x4b,0x63,0x24,0x00,0x00,0x43,0xac,0x05,0x00,0x02,0x24,0x06,0x00,0xa2,0x10, +0x06,0x00,0xa2,0x2c,0x0c,0x00,0x40,0x10,0x06,0x00,0x02,0x24,0x04,0x00,0x02,0x24, +0x0e,0x00,0xa2,0x10,0x80,0x10,0x04,0x00,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00, +0x80,0x10,0x02,0x00,0xff,0xff,0x42,0x24,0xfe,0xff,0x40,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf7,0xff,0xa2,0x14,0x00,0x11,0x04,0x00, +0x23,0x10,0x44,0x00,0xdd,0x12,0x00,0x08,0x40,0x10,0x02,0x00,0x21,0x10,0x44,0x00, +0xdd,0x12,0x00,0x08,0x40,0x10,0x02,0x00,0xff,0xff,0x85,0x30,0x21,0x30,0x00,0x00, +0x25,0xb0,0x03,0x3c,0x2a,0xb0,0x04,0x3c,0xb4,0x00,0x63,0x34,0x01,0x00,0xa2,0x24, +0x31,0x00,0x84,0x34,0x00,0x00,0x65,0xa0,0x00,0x00,0x85,0xa0,0xff,0xff,0x45,0x30, +0x12,0x00,0xa0,0x10,0x01,0x00,0x03,0x24,0x28,0xb0,0x07,0x3c,0xff,0x12,0x00,0x08, +0xff,0xff,0x08,0x24,0x00,0x00,0x83,0xa0,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30, +0x2b,0x10,0xa3,0x00,0x09,0x00,0x40,0x14,0x08,0x00,0xc6,0x24,0xf9,0xff,0x65,0x14, +0x21,0x20,0xc7,0x00,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30,0x2b,0x10,0xa3,0x00, +0x00,0x00,0x88,0xa0,0xf9,0xff,0x40,0x10,0x08,0x00,0xc6,0x24,0x00,0x01,0xa2,0x2c, +0x13,0x00,0x40,0x10,0x21,0x18,0xa0,0x00,0xff,0x00,0x08,0x24,0x28,0xb0,0x07,0x3c, +0x13,0x13,0x00,0x08,0xff,0xff,0x09,0x24,0xff,0xff,0x43,0x30,0x00,0x00,0xa2,0xa0, +0x00,0x01,0x62,0x2c,0x0a,0x00,0x40,0x10,0x08,0x00,0xc6,0x24,0x01,0x00,0x62,0x24, +0xf9,0xff,0x68,0x14,0x21,0x28,0xc7,0x00,0x00,0x01,0x02,0x24,0xff,0xff,0x43,0x30, +0x00,0x01,0x62,0x2c,0x00,0x00,0xa9,0xa0,0xf8,0xff,0x40,0x14,0x08,0x00,0xc6,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd0,0xff,0xbd,0x27,0x28,0x00,0xbf,0xaf, +0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x12,0x40,0x01,0x00,0x41,0x36, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x42,0x00,0x15,0x36, +0xff,0xff,0x02,0x24,0x00,0x00,0xa2,0xa2,0xd8,0x00,0x05,0x36,0x40,0x00,0x11,0x36, +0xa8,0x00,0x14,0x36,0xa0,0x00,0x13,0x36,0x00,0x10,0x03,0x24,0xa4,0x00,0x10,0x36, +0x00,0x80,0x02,0x3c,0x00,0x00,0x23,0xa6,0x00,0x00,0xa0,0xa0,0x00,0x00,0x60,0xae, +0x00,0x00,0x00,0xae,0x00,0x00,0x82,0xae,0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24, +0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00,0xfc,0x17,0x02,0x24,0x00,0x00,0xa3,0xa0, +0x00,0x00,0x22,0xa6,0xea,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x42,0x24,0x74,0x0b,0x45,0x8c,0x6c,0x0b,0x43,0x8c,0x70,0x0b,0x44,0x8c, +0xfc,0x37,0x02,0x24,0x00,0x00,0x63,0xae,0x00,0x00,0x04,0xae,0x00,0x00,0x85,0xae, +0x00,0x00,0x22,0xa6,0x00,0x00,0xa0,0xa2,0x00,0x60,0x92,0x40,0x28,0x00,0xbf,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0xc8,0xff,0xbd,0x27,0x34,0x00,0xbf,0xaf,0x30,0x00,0xbe,0xaf,0x2c,0x00,0xb7,0xaf, +0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf, +0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x16,0x40, +0x01,0x00,0xc1,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x11,0x3c, +0x40,0x00,0x30,0x36,0xff,0xff,0x02,0x24,0x42,0x00,0x3e,0x36,0xfc,0x77,0x13,0x24, +0x00,0x00,0xc2,0xa3,0xfc,0x57,0x12,0x24,0x00,0x00,0x13,0xa6,0xcb,0x12,0x00,0x0c, +0x32,0x00,0x04,0x24,0xfc,0x37,0x17,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6, +0xcb,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x24,0x00,0x00,0x17,0xa6, +0xcb,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xa6,0xcb,0x12,0x00,0x0c, +0x32,0x00,0x04,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6,0xcb,0x12,0x00,0x0c, +0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x96,0x24,0xfa,0x03,0x24,0xd8,0x00,0x25,0x36, +0x24,0x10,0x43,0x00,0x00,0x00,0x02,0xa6,0x00,0x00,0xa3,0x90,0xa0,0x00,0x34,0x36, +0xa4,0x00,0x35,0x36,0xa8,0x00,0x33,0x36,0x7f,0x00,0x63,0x30,0x00,0x80,0x02,0x3c, +0x00,0x00,0xa3,0xa0,0x00,0x00,0x80,0xae,0x00,0x00,0xa0,0xae,0x00,0x00,0x62,0xae, +0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00, +0x00,0x00,0xa3,0xa0,0x00,0x00,0x12,0xa6,0xea,0x12,0x00,0x0c,0x56,0x01,0x31,0x36, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x74,0x0b,0x45,0x8c,0x6c,0x0b,0x43,0x8c, +0x70,0x0b,0x44,0x8c,0xff,0x0f,0x02,0x24,0x00,0x00,0x83,0xae,0x00,0x00,0xa4,0xae, +0x00,0x00,0x65,0xae,0x00,0x00,0x17,0xa6,0x00,0x00,0x22,0xa6,0x00,0x00,0xc0,0xa3, +0x00,0x60,0x96,0x40,0x34,0x00,0xbf,0x8f,0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f, +0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x38,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf, +0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x40,0x00,0x05,0x36, +0x00,0x00,0xa2,0x94,0xaf,0xff,0x03,0x24,0xa8,0x00,0x13,0x36,0x24,0x10,0x43,0x00, +0x00,0x00,0xa2,0xa4,0xa0,0x00,0x12,0x36,0xa4,0x00,0x10,0x36,0x00,0x00,0x55,0x8e, +0x00,0x00,0x16,0x8e,0x00,0x00,0x71,0x8e,0x00,0x80,0x14,0x3c,0xfc,0x37,0x02,0x24, +0x00,0x00,0x40,0xae,0xfd,0x00,0x04,0x24,0x00,0x00,0x00,0xae,0x21,0x88,0x34,0x02, +0x00,0x00,0x74,0xae,0x00,0x00,0xa2,0xa4,0xea,0x12,0x00,0x0c,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0xae,0x00,0x00,0x16,0xae,0x00,0x00,0x71,0xae,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x25,0xb0,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x82,0x94,0xd8,0xfd,0x03,0x24, +0x24,0x10,0x43,0x00,0xfc,0x37,0x03,0x24,0x00,0x00,0x82,0xa4,0x00,0x00,0x83,0xa4, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xc8,0xff,0xbd,0x27,0x25,0xb0,0x03,0x3c,0x1c,0x00,0xb3,0xaf, +0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x34,0x00,0xbf,0xaf, +0x30,0x00,0xbe,0xaf,0x2c,0x00,0xb7,0xaf,0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf, +0x20,0x00,0xb4,0xaf,0x0a,0x00,0x67,0x34,0x00,0x00,0xe2,0x90,0xff,0xff,0xb2,0x30, +0x21,0x98,0xc0,0x00,0xff,0x00,0x91,0x30,0x20,0x00,0x40,0x12,0xff,0x00,0x50,0x30, +0x21,0xa0,0xe0,0x00,0x0c,0x00,0x77,0x34,0x0b,0x00,0x76,0x34,0x21,0xf0,0xe0,0x00, +0xc0,0xff,0x15,0x24,0x25,0x10,0x15,0x02,0xff,0x00,0x50,0x30,0x00,0x00,0xd1,0xa2, +0x00,0x00,0x90,0xa2,0x00,0x00,0x82,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x50,0x30, +0xc0,0x00,0x03,0x32,0x07,0x00,0x60,0x10,0x21,0x20,0xc0,0x03,0x00,0x00,0x82,0x90, +0x00,0x00,0x00,0x00,0xff,0x00,0x50,0x30,0xc0,0x00,0x03,0x32,0xfb,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x00,0x00,0xe2,0x8e,0x04,0x00,0x23,0x26,0x64,0x00,0x04,0x24, +0x00,0x00,0x62,0xae,0x9c,0x12,0x00,0x0c,0xff,0x00,0x71,0x30,0xfc,0xff,0x42,0x26, +0xff,0xff,0x52,0x30,0xe7,0xff,0x40,0x16,0x04,0x00,0x73,0x26,0x34,0x00,0xbf,0x8f, +0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f,0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f, +0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0xff,0x00,0x84,0x30, +0xff,0xff,0xac,0x30,0xc0,0x48,0x04,0x00,0x00,0x60,0x0e,0x40,0x01,0x00,0xc1,0x35, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x02,0x3c,0x40,0x02,0x4d,0x34, +0xf8,0xff,0xe7,0x24,0x21,0x40,0x00,0x00,0x01,0x00,0x0f,0x24,0x44,0x02,0x4b,0x34, +0x57,0x14,0x00,0x08,0x01,0x80,0x0a,0x3c,0x28,0x00,0x0f,0x11,0x00,0x00,0x00,0x00, +0x01,0x00,0xe2,0x90,0x00,0x00,0xe4,0x90,0x02,0x00,0xe3,0x90,0x03,0x00,0xe5,0x90, +0x00,0x12,0x02,0x00,0x25,0x20,0x82,0x00,0x00,0x1c,0x03,0x00,0x25,0x20,0x83,0x00, +0x21,0x10,0x28,0x01,0x00,0x2e,0x05,0x00,0x01,0x00,0x08,0x25,0x25,0x20,0x85,0x00, +0x25,0x10,0x4a,0x00,0x06,0x00,0x03,0x2d,0x00,0x00,0x64,0xad,0x04,0x00,0xe7,0x24, +0x00,0x00,0xa2,0xad,0x12,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xea,0xff,0x00,0x15, +0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0x90,0x01,0x00,0xc3,0x90,0x04,0x00,0xe7,0x24, +0x00,0x14,0x02,0x00,0x25,0x10,0x82,0x01,0x00,0x1e,0x03,0x00,0x25,0x20,0x43,0x00, +0x21,0x10,0x28,0x01,0x01,0x00,0x08,0x25,0x25,0x10,0x4a,0x00,0x06,0x00,0x03,0x2d, +0x00,0x00,0x64,0xad,0x00,0x00,0xa2,0xad,0xf0,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x00,0x60,0x8e,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0xc2,0x90, +0x02,0x00,0xc4,0x90,0x04,0x00,0xc3,0x90,0x05,0x00,0xc5,0x90,0x49,0x14,0x00,0x08, +0x00,0x12,0x02,0x00,0xff,0xff,0x84,0x30,0x42,0xb0,0x08,0x3c,0x80,0x10,0x04,0x00, +0x21,0x10,0x48,0x00,0x04,0x00,0x46,0xac,0x00,0x00,0x07,0x91,0x40,0x18,0x04,0x00, +0x03,0x00,0x06,0x24,0xff,0x00,0xe7,0x30,0x04,0x30,0x66,0x00,0x01,0x00,0x02,0x24, +0x04,0x10,0x62,0x00,0x25,0x30,0xc7,0x00,0xff,0xff,0xa5,0x30,0x25,0x10,0x47,0x00, +0x02,0x00,0xa0,0x14,0xff,0x00,0xc7,0x30,0xff,0x00,0x47,0x30,0x42,0xb0,0x02,0x3c, +0x00,0x00,0x47,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x42,0xb0,0x02,0x3c, +0x03,0x00,0x47,0x34,0x00,0x00,0xe3,0x90,0xff,0x00,0x84,0x30,0x04,0x00,0x84,0x24, +0xff,0x00,0x65,0x30,0x01,0x00,0x02,0x24,0x04,0x30,0x82,0x00,0x07,0x18,0x85,0x00, +0x25,0xb0,0x02,0x3c,0xe8,0x03,0x42,0x34,0x01,0x00,0x63,0x30,0x21,0x20,0xc0,0x00, +0x00,0x00,0x45,0xa0,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0xa0, +0x08,0x00,0xe0,0x03,0x24,0x10,0x85,0x00,0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x00,0xaa,0x42,0x24, +0x04,0x00,0x45,0x8c,0x00,0x00,0x82,0xac,0x04,0x00,0x44,0xac,0x00,0x00,0xa4,0xac, +0x04,0x00,0x85,0xac,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x14,0x00,0x83,0x90,0x01,0x00,0x02,0x24,0x08,0x00,0x86,0xac,0x18,0x00,0x85,0xac, +0x00,0x00,0x84,0xac,0x03,0x00,0x62,0x10,0x04,0x00,0x84,0xac,0x9a,0x14,0x00,0x08, +0x0c,0x00,0x80,0xac,0x0c,0x00,0x82,0x8c,0x9a,0x14,0x00,0x08,0x10,0x00,0x82,0xac, +0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x04,0x00,0x85,0x8c,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac, +0x04,0x00,0x45,0xac,0x00,0x00,0x84,0xac,0x04,0x00,0x84,0xac,0x00,0x60,0x83,0x40, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xc8,0xff,0xbd,0x27,0x28,0x00,0xb6,0xaf, +0x25,0xb0,0x02,0x3c,0x02,0x80,0x16,0x3c,0x2c,0x00,0xb7,0xaf,0x24,0x00,0xb5,0xaf, +0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x30,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x18,0x03,0x55,0x34,0x00,0x80,0x17,0x3c, +0x02,0x80,0x13,0x3c,0x02,0x80,0x14,0x3c,0x00,0xaa,0xd2,0x26,0x08,0x53,0xe2,0x26, +0x00,0x00,0xa2,0xae,0x00,0xaa,0xd0,0x8e,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x8c,0x43,0x71,0x8e,0x00,0x00,0x00,0x00, +0x25,0x00,0x20,0x12,0x00,0x00,0x00,0x00,0x8c,0x43,0x60,0xae,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x23,0x00,0x12,0x12,0x08,0x0c,0x84,0x26, +0x14,0x00,0x03,0x92,0x01,0x00,0x02,0x24,0x2b,0x00,0x62,0x10,0x00,0x00,0x00,0x00, +0x0a,0x00,0x60,0x14,0x02,0x00,0x02,0x24,0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00, +0x2b,0x10,0x23,0x02,0x1e,0x00,0x40,0x10,0x23,0x10,0x71,0x00,0x0c,0x00,0x02,0xae, +0x00,0x00,0x10,0x8e,0xe2,0x14,0x00,0x08,0x00,0x00,0x00,0x00,0xfc,0xff,0x62,0x14, +0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0xf8,0xff,0x60,0x10, +0x2b,0x10,0x23,0x02,0xf5,0xff,0x40,0x14,0x23,0x10,0x71,0x00,0x08,0x00,0x02,0x8e, +0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,0x0c,0x00,0x00,0xae,0x00,0x00,0x10,0x8e, +0xe2,0x14,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x08,0x0c,0x84,0x26,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00, +0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0xd4,0x14,0x00,0x08,0x08,0x53,0xe2,0x26, +0x08,0x00,0x02,0x8e,0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,0x00,0x00,0x00,0x00, +0xf0,0x14,0x00,0x08,0x0c,0x00,0x02,0xae,0x0c,0x00,0x03,0x8e,0x00,0x00,0x00,0x00, +0x2b,0x10,0x23,0x02,0xd9,0xff,0x40,0x14,0x23,0x10,0x71,0x00,0x08,0x00,0x02,0x8e, +0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x03,0x8e, +0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0xae,0x00,0x00,0x10,0x8e,0xe2,0x14,0x00,0x08, +0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x80,0x41,0x42,0x24,0xc0,0x20,0x04,0x00, +0x21,0x20,0x82,0x00,0x21,0x28,0x00,0x00,0x00,0x60,0x06,0x40,0x01,0x00,0xc1,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x09,0x00,0x44,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x43,0x8c,0x21,0x28,0x40,0x00, +0x00,0x00,0x42,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac, +0x00,0x00,0xa5,0xac,0x04,0x00,0xa5,0xac,0x00,0x60,0x86,0x40,0x08,0x00,0xe0,0x03, +0x21,0x10,0xa0,0x00,0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x21,0x80,0x80,0x00, +0x01,0x01,0x02,0x2e,0x14,0x00,0xbf,0xaf,0x01,0x00,0x04,0x24,0x01,0x02,0x03,0x2e, +0x0b,0x00,0x40,0x14,0x21,0x28,0x00,0x00,0x02,0x00,0x04,0x24,0x08,0x00,0x60,0x14, +0x01,0x08,0x02,0x2e,0x06,0x00,0x40,0x14,0x03,0x00,0x04,0x24,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0x21,0x15,0x00,0x0c,0x00,0x00,0x00,0x00,0xf8,0xff,0x40,0x10,0x21,0x28,0x40,0x00, +0x0c,0x00,0x50,0xac,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0xa0,0x00, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x00,0x60,0x06,0x40,0x01,0x00,0xc1,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x10,0x00,0x83,0x8c,0x02,0x80,0x02,0x3c, +0x80,0x41,0x42,0x24,0xc0,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x65,0x8c, +0x02,0x80,0x07,0x3c,0x02,0x80,0x08,0x3c,0x00,0x00,0x85,0xac,0x04,0x00,0xa4,0xac, +0x04,0x00,0x83,0xac,0x58,0x44,0xe5,0x8c,0x00,0x00,0x00,0x00,0x05,0x00,0xa0,0x10, +0x00,0x00,0x64,0xac,0x44,0x44,0x02,0x8d,0x58,0x44,0xe0,0xac,0x25,0x10,0x45,0x00, +0x44,0x44,0x02,0xad,0x00,0x60,0x86,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x02,0x80,0x02,0x3c,0x7c,0x3f,0x43,0x8c,0xff,0x00,0xa5,0x30,0x25,0xb0,0x02,0x3c, +0x42,0x18,0x03,0x00,0x21,0x30,0xa2,0x00,0x01,0x00,0x63,0x30,0x01,0x00,0x02,0x24, +0x10,0x00,0xa7,0x2c,0x04,0x00,0x62,0x10,0xff,0x00,0x84,0x30,0x60,0x01,0xc4,0xa0, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c,0x10,0x00,0xa2,0x34, +0xfa,0xff,0xe0,0x10,0x21,0x40,0x43,0x00,0x60,0x01,0xc4,0xa0,0x60,0x01,0x04,0xa1, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x84,0x30,0x01,0x00,0x03,0x24, +0x10,0x00,0x02,0x3c,0x04,0x18,0x83,0x00,0xf0,0x70,0x42,0x34,0x15,0x00,0x84,0x2c, +0x06,0x00,0x80,0x10,0x24,0x28,0x62,0x00,0x0f,0x00,0x63,0x30,0x04,0x00,0xa0,0x14, +0x01,0x00,0x02,0x24,0x02,0x00,0x60,0x14,0x02,0x00,0x02,0x24,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xc0,0x40,0x04,0x00,0x21,0x18,0x04,0x01, +0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,0x80,0x18,0x03,0x00, +0x78,0x1b,0x42,0x24,0x21,0x18,0x62,0x00,0x8c,0x11,0x66,0x8c,0x21,0x38,0x60,0x00, +0x92,0x11,0x60,0xa0,0x93,0x11,0x60,0xa0,0x1c,0x00,0x05,0x24,0xa7,0x15,0x00,0x08, +0x01,0x00,0x03,0x24,0x08,0x00,0xa0,0x04,0x21,0x10,0x04,0x01,0x04,0x10,0xa3,0x00, +0x24,0x10,0xc2,0x00,0xfb,0xff,0x40,0x10,0xff,0xff,0xa5,0x24,0x01,0x00,0xa5,0x24, +0x92,0x11,0xe5,0xa0,0x21,0x10,0x04,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00, +0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x78,0x1b,0x63,0x24,0x21,0x18,0x43,0x00, +0x8c,0x11,0x66,0x8c,0x21,0x28,0x00,0x00,0xbb,0x15,0x00,0x08,0x01,0x00,0x07,0x24, +0x1d,0x00,0xa2,0x28,0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x04,0x10,0xa7,0x00, +0x24,0x10,0xc2,0x00,0xfa,0xff,0x40,0x10,0x01,0x00,0xa5,0x24,0xff,0xff,0xa5,0x24, +0x08,0x00,0xe0,0x03,0x93,0x11,0x65,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf, +0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,0x80,0x80,0x10,0x00,0x21,0x80,0x04,0x02, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x80,0x10,0x00,0x20,0x00,0xbf,0xaf, +0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x21,0x80,0x02,0x02,0x14,0x00,0xb1,0xaf, +0x90,0x11,0x03,0x8e,0x25,0xb0,0x02,0x3c,0x80,0x01,0x53,0x34,0x07,0x00,0x63,0x30, +0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x71,0x92,0x88,0x11,0x05,0x8e, +0x84,0x01,0x62,0x8c,0x21,0x90,0x80,0x00,0xff,0x00,0x31,0x32,0x24,0x10,0x45,0x00, +0x96,0x15,0x00,0x0c,0x8c,0x11,0x02,0xae,0x92,0x11,0x04,0x92,0x70,0x15,0x00,0x0c, +0xff,0x00,0x45,0x32,0x92,0x11,0x04,0x92,0x86,0x15,0x00,0x0c,0x00,0x00,0x00,0x00, +0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x88,0x62,0x00,0x00,0x00,0x71,0xa2, +0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xff,0xff,0x84,0x30, +0x00,0x02,0x82,0x30,0x07,0x00,0x03,0x24,0x0d,0x00,0x40,0x14,0x0b,0x00,0x84,0x30, +0x0c,0x00,0x82,0x2c,0x0a,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c, +0x80,0x10,0x04,0x00,0xe0,0xaf,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c, +0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x06,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x05,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x04,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x03,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x02,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x21,0x18,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x90,0xff,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x68,0x00,0xbe,0xaf,0x64,0x00,0xb7,0xaf,0x60,0x00,0xb6,0xaf, +0x5c,0x00,0xb5,0xaf,0x54,0x00,0xb3,0xaf,0x50,0x00,0xb2,0xaf,0x6c,0x00,0xbf,0xaf, +0x58,0x00,0xb4,0xaf,0x4c,0x00,0xb1,0xaf,0x48,0x00,0xb0,0xaf,0x10,0xb0,0x42,0x24, +0x00,0x00,0x54,0x8c,0x08,0x00,0x03,0x24,0x10,0x00,0xa3,0xaf,0x21,0x98,0x00,0x00, +0x21,0xa8,0x00,0x00,0x21,0xb8,0x00,0x00,0x21,0xf0,0x00,0x00,0x14,0x00,0xa0,0xaf, +0x18,0x00,0xa0,0xaf,0x1c,0x00,0xa0,0xaf,0x20,0x00,0xa0,0xaf,0x21,0xb0,0x00,0x00, +0x24,0x00,0xa0,0xaf,0x28,0x00,0xa0,0xaf,0x2c,0x00,0xa0,0xaf,0x30,0x00,0xa0,0xaf, +0x34,0x00,0xa0,0xaf,0x38,0x00,0xa0,0xaf,0x3c,0x00,0xa0,0xaf,0x40,0x00,0xa0,0xaf, +0x21,0x90,0x80,0x02,0x90,0x11,0x42,0x8e,0x00,0x00,0x00,0x00,0x02,0x13,0x02,0x00, +0x01,0x00,0x42,0x30,0x6c,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,0x21,0x10,0x62,0x02, +0x60,0x01,0x44,0x90,0x78,0x11,0x43,0x8e,0x74,0x11,0x46,0x8e,0xff,0x00,0x91,0x30, +0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,0x21,0x10,0x24,0x02,0x77,0x04,0x44,0x90, +0x5a,0x04,0x45,0x90,0x5c,0x11,0x47,0x8e,0x18,0x00,0x64,0x00,0x12,0x18,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xc5,0x00,0x12,0x30,0x00,0x00, +0x21,0x30,0xc3,0x00,0x2b,0x10,0xe6,0x00,0x25,0x01,0x40,0x14,0x23,0x10,0xe6,0x00, +0x5c,0x11,0x42,0xae,0x78,0x11,0x44,0x8e,0x74,0x11,0x47,0x8e,0x60,0x11,0x48,0x8e, +0x64,0x11,0x45,0x8e,0x6c,0x11,0x46,0x8e,0x70,0x11,0x43,0x8e,0x21,0x38,0xe4,0x00, +0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24,0x21,0x10,0x24,0x02,0x21,0x40,0x05,0x01, +0x21,0x30,0xc3,0x00,0xce,0x04,0x42,0x90,0x5c,0x11,0x4a,0x8e,0x0c,0x00,0xe0,0x10, +0x21,0x48,0x00,0x00,0x2b,0x48,0x47,0x00,0x0b,0x00,0x20,0x15,0x02,0x80,0x02,0x3c, +0x07,0x00,0x22,0x2e,0x93,0x01,0x40,0x14,0xc0,0x10,0x07,0x00,0x0c,0x00,0x02,0x24, +0x8f,0x01,0x22,0x12,0x0d,0x00,0x02,0x24,0x8e,0x01,0x22,0x12,0xc0,0x10,0x07,0x00, +0x81,0x00,0x20,0x11,0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x18,0x11,0x00, +0x21,0x18,0x62,0x00,0x21,0x20,0x51,0x02,0xce,0x11,0x85,0x90,0xf8,0x04,0x62,0x8c, +0x00,0x00,0x00,0x00,0x04,0x10,0xa2,0x00,0x2b,0x10,0x4a,0x00,0x76,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0xec,0x11,0x42,0x8e,0x01,0x00,0x07,0x24,0x04,0x18,0x27,0x02, +0x24,0x10,0x43,0x00,0x04,0x01,0x40,0x10,0x1c,0x00,0x22,0x2e,0x21,0x28,0x51,0x02, +0x94,0x11,0xa6,0x90,0xce,0x11,0xa2,0x90,0x0a,0x00,0x04,0x24,0xff,0x00,0xc3,0x30, +0x04,0x20,0x44,0x00,0x2a,0x18,0x64,0x00,0xfb,0x00,0x60,0x10,0x1c,0x00,0x22,0x2e, +0x01,0x00,0xc2,0x24,0xff,0x00,0x43,0x30,0x8c,0x01,0x64,0x10,0x94,0x11,0xa2,0xa0, +0x02,0x80,0x04,0x3c,0x78,0x1b,0x85,0x24,0x80,0x10,0x11,0x00,0x21,0x10,0x45,0x00, +0x6c,0x05,0x44,0x8c,0xf8,0x04,0x43,0x8c,0x21,0x30,0xc5,0x02,0x40,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0x21,0x18,0x62,0x00,0x82,0x50,0x03,0x00,0x5c,0x11,0xca,0xac, +0xec,0x25,0xa3,0x8c,0xff,0xff,0x02,0x34,0x03,0x00,0x62,0x10,0x21,0x20,0x20,0x02, +0x70,0x15,0x00,0x0c,0xff,0x00,0x65,0x32,0x86,0x15,0x00,0x0c,0x21,0x20,0x20,0x02, +0x10,0x00,0xa4,0x8f,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x20,0x62,0x00, +0xbc,0x00,0x60,0x12,0x10,0x00,0xa4,0xaf,0x02,0x80,0x03,0x3c,0x78,0x1b,0x62,0x24, +0x21,0x10,0xa2,0x02,0x70,0x11,0x40,0xac,0x74,0x11,0x40,0xac,0x78,0x11,0x40,0xac, +0x60,0x11,0x40,0xac,0x64,0x11,0x40,0xac,0x68,0x11,0x40,0xac,0x6c,0x11,0x40,0xac, +0x40,0x00,0xa4,0x8f,0x3c,0x00,0xa2,0x8f,0x01,0x00,0x73,0x26,0x94,0x00,0x84,0x24, +0x94,0x00,0x42,0x24,0x40,0x00,0xa4,0xaf,0x3c,0x00,0xa2,0xaf,0x38,0x00,0xa4,0x8f, +0x34,0x00,0xa2,0x8f,0x20,0x00,0x63,0x2a,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24, +0x38,0x00,0xa4,0xaf,0x34,0x00,0xa2,0xaf,0x30,0x00,0xa4,0x8f,0x2c,0x00,0xa2,0x8f, +0x94,0x00,0x52,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x30,0x00,0xa4,0xaf, +0x2c,0x00,0xa2,0xaf,0x28,0x00,0xa4,0x8f,0x24,0x00,0xa2,0x8f,0x94,0x00,0xd6,0x26, +0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x28,0x00,0xa4,0xaf,0x24,0x00,0xa2,0xaf, +0x20,0x00,0xa4,0x8f,0x1c,0x00,0xa2,0x8f,0x94,0x00,0xde,0x27,0x94,0x00,0x84,0x24, +0x94,0x00,0x42,0x24,0x20,0x00,0xa4,0xaf,0x1c,0x00,0xa2,0xaf,0x18,0x00,0xa4,0x8f, +0x14,0x00,0xa2,0x8f,0x94,0x00,0x94,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24, +0x18,0x00,0xa4,0xaf,0x14,0x00,0xa2,0xaf,0x94,0x00,0xf7,0x26,0x59,0xff,0x60,0x14, +0x94,0x00,0xb5,0x26,0x10,0x00,0xa3,0x8f,0x6c,0x00,0xbf,0x8f,0x68,0x00,0xbe,0x8f, +0x64,0x00,0xb7,0x8f,0x60,0x00,0xb6,0x8f,0x5c,0x00,0xb5,0x8f,0x58,0x00,0xb4,0x8f, +0x54,0x00,0xb3,0x8f,0x50,0x00,0xb2,0x8f,0x4c,0x00,0xb1,0x8f,0x48,0x00,0xb0,0x8f, +0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,0x70,0x00,0xbd,0x27,0x00,0x00,0x43,0xa0, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x87,0x00,0xe0,0x10,0x00,0x00,0x00,0x00, +0x87,0x00,0x20,0x15,0x02,0x80,0x03,0x3c,0x40,0x10,0x07,0x00,0x21,0x10,0x47,0x00, +0x82,0x10,0x02,0x00,0x2b,0x10,0x46,0x00,0xa7,0xff,0x40,0x10,0x00,0x00,0x00,0x00, +0x20,0x00,0xa2,0x8f,0x02,0x80,0x04,0x3c,0x78,0x1b,0x88,0x24,0x21,0x20,0x48,0x00, +0x21,0x30,0x91,0x00,0xec,0x11,0x83,0x8c,0x01,0x00,0x05,0x24,0x04,0x10,0x25,0x02, +0xb1,0x11,0xc7,0x90,0x27,0x10,0x02,0x00,0x24,0x18,0x62,0x00,0xec,0x11,0x83,0xac, +0x09,0x00,0xe5,0x10,0x94,0x11,0xc0,0xa0,0x1c,0x00,0xa3,0x8f,0x21,0x38,0x00,0x00, +0x21,0x20,0x68,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24,0x1d,0x00,0xe2,0x28, +0xfc,0xff,0x40,0x14,0xce,0x11,0x60,0xa0,0x02,0x80,0x04,0x3c,0x78,0x1b,0x83,0x24, +0x18,0x00,0xa4,0x8f,0x21,0x50,0x60,0x00,0x21,0x38,0x00,0x00,0x21,0x10,0x83,0x00, +0x21,0x10,0x51,0x00,0xb1,0x11,0x40,0xa0,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c, +0x70,0xae,0x49,0x24,0xfc,0xad,0x68,0x24,0x80,0x18,0x07,0x00,0x21,0x10,0x69,0x00, +0x21,0x20,0x68,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,0x01,0x00,0xe7,0x24, +0x21,0x18,0x6a,0x00,0x1d,0x00,0xe2,0x28,0xf8,0x04,0x65,0xac,0xf6,0xff,0x40,0x14, +0x6c,0x05,0x66,0xac,0x15,0x00,0x20,0x12,0x02,0x80,0x05,0x3c,0x93,0x11,0x82,0x92, +0xff,0xff,0x27,0x26,0x2a,0x10,0xe2,0x00,0x10,0x00,0x40,0x14,0x02,0x80,0x03,0x3c, +0x14,0x00,0xa4,0x8f,0x78,0x1b,0x62,0x24,0x21,0x10,0x82,0x00,0x93,0x11,0x45,0x90, +0x8c,0x11,0x44,0x8c,0x01,0x00,0x06,0x24,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00, +0x06,0x01,0x43,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0xe7,0x24,0x2a,0x10,0xe5,0x00, +0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,0x02,0x80,0x05,0x3c,0x56,0x43,0xa3,0x90, +0x22,0x00,0x02,0x24,0xe8,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,0x02,0x80,0x04,0x3c, +0x78,0x1b,0x83,0x24,0x80,0x10,0x11,0x00,0x21,0x10,0x43,0x00,0x6c,0x05,0x44,0x8c, +0xf8,0x04,0x43,0x8c,0x56,0x43,0xa5,0x90,0x40,0x10,0x04,0x00,0x21,0x10,0x44,0x00, +0x21,0x18,0x62,0x00,0x22,0x00,0x02,0x24,0xd6,0x00,0xa2,0x10,0x82,0x50,0x03,0x00, +0xec,0x11,0x83,0x8e,0x01,0x00,0x02,0x24,0x04,0x10,0x22,0x02,0x25,0x18,0x62,0x00, +0xec,0x11,0x83,0xae,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,0x21,0x10,0xe3,0x02, +0x5c,0x11,0x4a,0xac,0xec,0x25,0x64,0x8c,0xff,0xff,0x02,0x34,0x44,0xff,0x82,0x14, +0x21,0x20,0x20,0x02,0x86,0x15,0x00,0x0c,0x21,0x20,0x20,0x02,0x10,0x00,0xa4,0x8f, +0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x20,0x62,0x00,0x46,0xff,0x60,0x16, +0x10,0x00,0xa4,0xaf,0x02,0x80,0x02,0x3c,0x78,0x1b,0x50,0x24,0x64,0x11,0x05,0x96, +0x60,0x11,0x02,0x96,0x25,0xb0,0x11,0x3c,0x00,0x2c,0x05,0x00,0x21,0x28,0x45,0x00, +0x10,0x50,0x00,0x0c,0x68,0x0c,0x24,0x36,0x70,0x11,0x02,0x8e,0x6c,0x11,0x05,0x8e, +0x68,0x11,0x03,0x96,0x6c,0x0c,0x24,0x36,0x21,0x28,0xa2,0x00,0x00,0x2c,0x05,0x00, +0x10,0x50,0x00,0x0c,0x21,0x28,0x65,0x00,0xaf,0x16,0x00,0x08,0x02,0x80,0x03,0x3c, +0x59,0x16,0x00,0x08,0x5c,0x11,0x40,0xae,0x27,0xff,0x20,0x11,0x02,0x80,0x03,0x3c, +0x78,0x1b,0x62,0x24,0x80,0x18,0x11,0x00,0x21,0x18,0x62,0x00,0x6c,0x05,0x64,0x8c, +0x00,0x00,0x00,0x00,0x2b,0x20,0x44,0x01,0x1f,0xff,0x80,0x10,0x00,0x00,0x00,0x00, +0x00,0x17,0x00,0x08,0x00,0x00,0x00,0x00,0x0a,0xff,0x40,0x10,0x02,0x80,0x04,0x3c, +0x21,0x20,0x51,0x02,0xb1,0x11,0x83,0x90,0x01,0x00,0x02,0x24,0x78,0x00,0x62,0x10, +0x02,0x80,0x02,0x3c,0x40,0x00,0xa3,0x8f,0x78,0x1b,0x42,0x24,0x21,0x20,0x62,0x00, +0x21,0x38,0x00,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24,0x1d,0x00,0xe2,0x28, +0xfc,0xff,0x40,0x14,0xce,0x11,0x60,0xa0,0x3c,0x00,0xa2,0x8f,0x02,0x80,0x04,0x3c, +0x78,0x1b,0x85,0x24,0x21,0x30,0x45,0x00,0xec,0x11,0xc2,0x8c,0x01,0x00,0x03,0x24, +0x04,0x18,0x23,0x02,0x27,0x18,0x03,0x00,0x21,0x20,0xd1,0x00,0x24,0x10,0x43,0x00, +0xb1,0x11,0x80,0xa0,0xec,0x11,0xc2,0xac,0x12,0x00,0x20,0x16,0x94,0x11,0x80,0xa0, +0x92,0x11,0xc2,0x90,0x00,0x00,0x00,0x00,0x0e,0x00,0x40,0x10,0x01,0x00,0x07,0x24, +0x38,0x00,0xa3,0x8f,0x01,0x00,0x06,0x24,0x21,0x10,0x65,0x00,0x92,0x11,0x44,0x90, +0x8c,0x11,0x45,0x8c,0x04,0x18,0xe6,0x00,0x24,0x10,0xa3,0x00,0x8d,0x00,0x43,0x10, +0x00,0x00,0x00,0x00,0x01,0x00,0xe7,0x24,0x2a,0x10,0x87,0x00,0xfa,0xff,0x40,0x10, +0x04,0x18,0xe6,0x00,0x02,0x80,0x02,0x3c,0x78,0x1b,0x44,0x24,0x34,0x00,0xa2,0x8f, +0x01,0x00,0x27,0x26,0x21,0x18,0x44,0x00,0x92,0x11,0x62,0x90,0x00,0x00,0x00,0x00, +0x2a,0x10,0x47,0x00,0x0f,0x00,0x40,0x14,0x02,0x80,0x05,0x3c,0x30,0x00,0xa3,0x8f, +0x01,0x00,0x06,0x24,0x21,0x10,0x64,0x00,0x92,0x11,0x45,0x90,0x8c,0x11,0x44,0x8c, +0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,0x73,0x00,0x43,0x10,0x00,0x00,0x00,0x00, +0x01,0x00,0xe7,0x24,0x2a,0x10,0xa7,0x00,0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00, +0x02,0x80,0x05,0x3c,0x56,0x43,0xa3,0x90,0x22,0x00,0x02,0x24,0x3e,0x00,0x62,0x10, +0xee,0xff,0x22,0x26,0x56,0x43,0xa3,0x90,0x22,0x00,0x02,0x24,0xbd,0xfe,0x62,0x14, +0x02,0x80,0x04,0x3c,0x28,0x00,0xa2,0x8f,0x78,0x1b,0x86,0x24,0x21,0x20,0x46,0x00, +0x90,0x11,0x85,0x8c,0x01,0x00,0x03,0x24,0x42,0x13,0x05,0x00,0x07,0x00,0x42,0x30, +0xb3,0xfe,0x43,0x10,0x14,0x00,0x22,0x2e,0xb1,0xfe,0x40,0x14,0x1c,0x00,0x22,0x2e, +0xaf,0xfe,0x40,0x10,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x10,0xa2,0x00, +0x00,0x20,0x42,0x34,0x90,0x11,0x82,0xac,0x93,0x11,0x83,0x90,0xff,0xff,0x27,0x26, +0x2a,0x18,0xe3,0x00,0xa6,0xfe,0x60,0x14,0x00,0x00,0x00,0x00,0x24,0x00,0xa3,0x8f, +0x00,0x00,0x00,0x00,0x21,0x10,0x66,0x00,0x93,0x11,0x45,0x90,0x8c,0x11,0x44,0x8c, +0xf9,0x17,0x00,0x08,0x01,0x00,0x06,0x24,0x2a,0x10,0xe5,0x00,0x9c,0xfe,0x40,0x14, +0x00,0x00,0x00,0x00,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,0xfa,0xff,0x43,0x14, +0xff,0xff,0xe7,0x24,0x01,0x00,0xe7,0x24,0x94,0x16,0x00,0x08,0xff,0x00,0xf1,0x30, +0xc0,0x10,0x07,0x00,0x23,0x10,0x47,0x00,0xc2,0x10,0x02,0x00,0x2b,0x10,0x48,0x00, +0x7c,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0x74,0x16,0x00,0x08,0x00,0x00,0x00,0x00, +0x18,0x00,0x22,0x2e,0x17,0x00,0x40,0x14,0x05,0x00,0x22,0x2e,0xce,0x11,0x83,0x90, +0x00,0x00,0x00,0x00,0x05,0x00,0x62,0x2c,0x8b,0xff,0x40,0x10,0x01,0x00,0x62,0x24, +0x9a,0x17,0x00,0x08,0xce,0x11,0x82,0xa0,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x2c, +0xc0,0xff,0x40,0x10,0x02,0x80,0x04,0x3c,0x2c,0x00,0xa3,0x8f,0x78,0x1b,0x82,0x24, +0x21,0x10,0x62,0x00,0x8c,0x11,0x43,0x8c,0x00,0x01,0x04,0x3c,0x18,0x00,0x02,0x24, +0x24,0x18,0x64,0x00,0xd5,0x17,0x00,0x08,0x0b,0x88,0x43,0x00,0x94,0x16,0x00,0x08, +0xb1,0x11,0xa7,0xa0,0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xce,0x11,0x83,0x90, +0x0e,0x18,0x00,0x08,0x03,0x00,0x62,0x2c,0xce,0x11,0x83,0x90,0x0e,0x18,0x00,0x08, +0x04,0x00,0x62,0x2c,0x13,0x00,0x02,0x24,0x29,0xff,0x22,0x16,0x02,0x80,0x02,0x3c, +0x5b,0x17,0x00,0x08,0x78,0x1b,0x43,0x24,0x78,0x1b,0x62,0x24,0x21,0x20,0xc2,0x03, +0x90,0x11,0x83,0x8c,0x00,0x00,0x00,0x00,0x42,0x13,0x03,0x00,0x07,0x00,0x42,0x30, +0x12,0xff,0x40,0x10,0x14,0x00,0x22,0x2e,0x10,0xff,0x40,0x10,0x0c,0x00,0x22,0x2e, +0x0e,0xff,0x40,0x14,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x10,0x62,0x00, +0x47,0x17,0x00,0x08,0x90,0x11,0x82,0xac,0xff,0x00,0xf1,0x30,0xd1,0x17,0x00,0x08, +0x02,0x80,0x05,0x3c,0xb9,0x17,0x00,0x08,0xff,0x00,0xf1,0x30,0x42,0x17,0x00,0x08, +0xff,0x00,0xf1,0x30,0xa8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x38,0x00,0xb2,0xaf, +0x54,0x00,0xbf,0xaf,0x50,0x00,0xbe,0xaf,0x4c,0x00,0xb7,0xaf,0x48,0x00,0xb6,0xaf, +0x44,0x00,0xb5,0xaf,0x40,0x00,0xb4,0xaf,0x3c,0x00,0xb3,0xaf,0x34,0x00,0xb1,0xaf, +0x30,0x00,0xb0,0xaf,0x78,0x1b,0x46,0x24,0x71,0x25,0xc4,0x90,0x6c,0x25,0xc3,0x8c, +0x68,0x25,0xc2,0x8c,0x21,0x90,0x64,0x00,0x2b,0x10,0x42,0x02,0x7e,0x00,0x40,0x10, +0x21,0x88,0xc0,0x00,0x02,0x80,0x1e,0x3c,0x02,0x80,0x17,0x3c,0x21,0xa8,0xc0,0x00, +0x21,0xb0,0xc0,0x00,0x64,0x18,0x00,0x08,0x01,0x00,0x14,0x24,0x68,0x25,0xc2,0x8e, +0x10,0x00,0x52,0x26,0x2b,0x10,0x42,0x02,0x73,0x00,0x40,0x10,0x21,0x88,0xc0,0x02, +0x71,0x25,0x22,0x92,0xff,0xff,0x45,0x32,0x25,0x28,0xb7,0x00,0x10,0x00,0x42,0x24, +0x71,0x25,0x22,0xa2,0x54,0x3f,0xc4,0x27,0x46,0x46,0x00,0x0c,0x10,0x00,0x06,0x24, +0x04,0x24,0x23,0x8e,0x00,0x00,0x00,0x00,0x42,0x18,0x03,0x00,0x01,0x00,0x63,0x30, +0x71,0x00,0x74,0x10,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,0xe0,0x23,0x62,0x8c, +0x00,0x00,0x00,0x00,0x42,0x84,0x02,0x00,0x1f,0x00,0x10,0x32,0xc0,0x48,0x10,0x00, +0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x55,0x00,0x90,0x11,0x45,0x8c,0x00,0x00,0x00,0x00,0x02,0x1b,0x05,0x00, +0x01,0x00,0x63,0x30,0xdd,0xff,0x60,0x10,0x21,0x30,0xa0,0x02,0x25,0xb0,0x02,0x3c, +0x21,0x40,0x02,0x02,0xdc,0x23,0xa7,0x8e,0x04,0x24,0xa2,0x8e,0x60,0x01,0x03,0x91, +0x82,0x25,0x07,0x00,0x01,0x00,0x42,0x30,0xff,0x00,0x6b,0x30,0x9a,0x00,0x54,0x10, +0x3f,0x00,0x8a,0x30,0x02,0x80,0x04,0x3c,0x14,0xb0,0x84,0x24,0x00,0x00,0x86,0x8c, +0x04,0x00,0x04,0x24,0xdc,0x23,0xc3,0x8c,0x00,0x00,0x00,0x00,0x82,0x15,0x03,0x00, +0x3f,0x00,0x42,0x30,0x05,0x00,0x42,0x28,0x0a,0x00,0x60,0x04,0x0a,0x50,0x82,0x00, +0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x46,0x00,0x7c,0x11,0x43,0x8c,0x04,0x00,0x0a,0x24,0x01,0x00,0x63,0x24, +0x7c,0x11,0x43,0xac,0xe0,0x23,0xc2,0x8c,0x00,0x00,0x00,0x00,0x02,0x13,0x02,0x00, +0x1f,0x00,0x42,0x30,0x08,0x00,0x42,0x28,0xb8,0xff,0x40,0x10,0x00,0x00,0x00,0x00, +0xdc,0x23,0xc2,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0xb3,0xff,0x4b,0x14, +0x00,0x00,0x00,0x00,0x9f,0x00,0x40,0x11,0x21,0x10,0x30,0x01,0xa8,0x00,0x54,0x11, +0x80,0x10,0x02,0x00,0x02,0x00,0x02,0x24,0xb0,0x00,0x42,0x11,0x21,0x10,0x30,0x01, +0x03,0x00,0x02,0x24,0xb8,0x00,0x42,0x11,0x21,0x10,0x30,0x01,0xc0,0x00,0x44,0x11, +0x21,0x10,0x30,0x01,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00, +0x80,0x10,0x02,0x00,0x21,0x28,0x46,0x00,0x80,0x11,0xa3,0x8c,0x21,0x10,0x66,0x01, +0x94,0x04,0x44,0x90,0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,0xc8,0x00,0x60,0x14, +0x00,0x00,0x00,0x00,0x74,0x11,0xa3,0x8c,0x80,0x10,0x0b,0x00,0x21,0x10,0x4b,0x00, +0x01,0x00,0x63,0x24,0x21,0x10,0x46,0x00,0x74,0x11,0xa3,0xac,0x21,0x10,0x4a,0x00, +0x38,0x03,0x44,0x90,0x5c,0x11,0xa3,0x8c,0x00,0x00,0x00,0x00,0x21,0x18,0x64,0x00, +0x5c,0x11,0xa3,0xac,0x68,0x25,0xc2,0x8e,0x10,0x00,0x52,0x26,0x2b,0x10,0x42,0x02, +0x8f,0xff,0x40,0x14,0x21,0x88,0xc0,0x02,0x54,0x00,0xbf,0x8f,0x50,0x00,0xbe,0x8f, +0x4c,0x00,0xb7,0x8f,0x48,0x00,0xb6,0x8f,0x44,0x00,0xb5,0x8f,0x40,0x00,0xb4,0x8f, +0x3c,0x00,0xb3,0x8f,0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f,0x30,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x58,0x00,0xbd,0x27,0xe0,0x23,0x22,0x8e,0x00,0x00,0x00,0x00, +0x42,0x14,0x02,0x00,0x10,0x00,0x43,0x30,0x90,0xff,0x60,0x10,0x0f,0x00,0x50,0x30, +0x39,0x15,0x00,0x0c,0x48,0x00,0x04,0x24,0x74,0xff,0x40,0x10,0x21,0x98,0x40,0x00, +0x14,0x00,0x02,0x24,0x28,0x00,0x04,0x24,0x14,0x00,0x62,0xae,0x0c,0x00,0x64,0xae, +0x14,0x00,0xa3,0x8f,0xe0,0xff,0x04,0x24,0x08,0x00,0x07,0x24,0x80,0x00,0x63,0x34, +0x14,0x00,0xa3,0xaf,0xe0,0x23,0x26,0x8e,0x24,0x18,0x64,0x00,0xff,0xe0,0x04,0x24, +0x42,0x14,0x06,0x00,0x1f,0x00,0x42,0x30,0x25,0x18,0x62,0x00,0x14,0x00,0xa3,0xaf, +0xdc,0x23,0x25,0x8e,0x24,0x18,0x64,0x00,0x02,0x23,0x06,0x00,0x82,0x13,0x05,0x00, +0x00,0x1f,0x42,0x30,0x25,0x18,0x62,0x00,0xff,0xff,0x02,0x3c,0xff,0x7f,0x42,0x34, +0xc2,0x2f,0x05,0x00,0x24,0x18,0x62,0x00,0xc0,0x2b,0x05,0x00,0x0f,0x00,0x02,0x3c, +0x25,0x18,0x65,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x35,0x06,0x00, +0xf0,0xff,0x02,0x3c,0x25,0x18,0x66,0x00,0xff,0xff,0x42,0x34,0x0f,0x00,0x84,0x30, +0x24,0x18,0x62,0x00,0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,0x02,0x80,0x04,0x3c, +0x10,0x00,0xa5,0x27,0xa8,0x3f,0x84,0x24,0x02,0x00,0x06,0x24,0x04,0x00,0x02,0x24, +0x11,0x00,0xa7,0xa3,0x14,0x00,0xa3,0xaf,0x52,0x46,0x00,0x0c,0x10,0x00,0xa2,0xa3, +0x08,0x00,0x64,0x96,0x10,0x00,0xa5,0x27,0x02,0x00,0x06,0x24,0x25,0x20,0x97,0x00, +0x52,0x46,0x00,0x0c,0x20,0x00,0x84,0x24,0x59,0x0a,0x00,0x0c,0x21,0x20,0x60,0x02, +0x78,0x18,0x00,0x08,0xc0,0x48,0x10,0x00,0x02,0x12,0x05,0x00,0x01,0x00,0x42,0x30, +0x14,0x00,0x54,0x10,0xc2,0x10,0x05,0x00,0x01,0x00,0x42,0x30,0x76,0x00,0x54,0x10, +0x00,0x00,0x00,0x00,0x10,0x24,0xa2,0x96,0x60,0x01,0x03,0x91,0xc2,0x27,0x07,0x00, +0x21,0x10,0x42,0x01,0x2c,0x24,0xa3,0xa2,0x13,0x00,0x80,0x10,0x10,0x24,0xa2,0xa6, +0x59,0xff,0x94,0x14,0x02,0x80,0x04,0x3c,0x0c,0x24,0xa2,0x96,0x16,0x24,0xa3,0x96, +0x01,0x00,0x42,0x24,0x01,0x00,0x63,0x24,0x0c,0x24,0xa2,0xa6,0x8e,0x18,0x00,0x08, +0x16,0x24,0xa3,0xa6,0x5d,0x00,0xe0,0x04,0x00,0x00,0x00,0x00,0x0e,0x24,0xa3,0x96, +0x1a,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x1a,0x24,0xa2,0xa6, +0x8d,0x18,0x00,0x08,0x0e,0x24,0xc3,0xa4,0x0e,0x24,0xa3,0x96,0x1c,0x24,0xa2,0x96, +0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x1c,0x24,0xa2,0xa6,0x8d,0x18,0x00,0x08, +0x0e,0x24,0xc3,0xa4,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x46,0x00,0x60,0x11,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24, +0x5c,0xff,0x54,0x15,0x60,0x11,0x43,0xac,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00, +0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x64,0x11,0x43,0x8c, +0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x64,0x11,0x43,0xac,0x02,0x00,0x02,0x24, +0x54,0xff,0x42,0x15,0x03,0x00,0x02,0x24,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00, +0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x68,0x11,0x43,0x8c, +0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x68,0x11,0x43,0xac,0x03,0x00,0x02,0x24, +0x4a,0xff,0x42,0x15,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x6c,0x11,0x43,0x8c,0x00,0x00,0x00,0x00, +0x01,0x00,0x63,0x24,0x43,0xff,0x44,0x15,0x6c,0x11,0x43,0xac,0x21,0x10,0x30,0x01, +0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00, +0x70,0x11,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x70,0x11,0x43,0xac, +0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00, +0x21,0x28,0x46,0x00,0x80,0x11,0xa3,0x8c,0x21,0x10,0x66,0x01,0x94,0x04,0x44,0x90, +0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,0x3a,0xff,0x60,0x10,0x00,0x00,0x00,0x00, +0x78,0x11,0xa3,0x8c,0x80,0x10,0x0b,0x00,0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24, +0x21,0x10,0x4b,0x00,0x01,0x00,0x63,0x24,0x21,0x10,0x44,0x00,0x78,0x11,0xa3,0xac, +0x21,0x10,0x4a,0x00,0xc9,0x03,0x44,0x90,0x5c,0x11,0xa3,0x8c,0x00,0x00,0x00,0x00, +0x21,0x18,0x64,0x00,0xd1,0x18,0x00,0x08,0x5c,0x11,0xa3,0xac,0x0c,0x24,0xa3,0x96, +0x14,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x14,0x24,0xa2,0xa6, +0x8d,0x18,0x00,0x08,0x0c,0x24,0xc3,0xa4,0x08,0x00,0xe0,0x04,0x00,0x00,0x00,0x00, +0x0e,0x24,0xa3,0x96,0x18,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24, +0x18,0x24,0xa2,0xa6,0x8d,0x18,0x00,0x08,0x0e,0x24,0xc3,0xa4,0x0c,0x24,0xa3,0x96, +0x12,0x24,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x12,0x24,0xa2,0xa6, +0x8d,0x18,0x00,0x08,0x0c,0x24,0xc3,0xa4,0x02,0x80,0x0a,0x3c,0x78,0x1b,0x42,0x8d, +0xe8,0xff,0xbd,0x27,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x11,0x00,0x40,0x14, +0x10,0x00,0xbf,0xaf,0x25,0xb0,0x05,0x3c,0x4c,0x00,0xa2,0x34,0x00,0x00,0x43,0x90, +0x78,0x1b,0x46,0x25,0xf9,0x0a,0xc2,0x90,0x03,0x00,0x67,0x30,0x09,0x00,0x47,0x10, +0x58,0x00,0xa2,0x34,0x00,0x00,0x44,0x8c,0x29,0xb0,0x03,0x3c,0x5c,0x00,0xa2,0x34, +0x00,0x00,0x64,0xac,0x00,0x00,0x44,0x8c,0x04,0x00,0x63,0x34,0xf9,0x0a,0xc7,0xa0, +0x00,0x00,0x64,0xac,0x78,0x1b,0x42,0x25,0xcb,0x02,0x43,0x90,0x25,0xb0,0x02,0x3c, +0x90,0x0c,0x42,0x34,0x0f,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x25,0xc9,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c, +0x91,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x78,0x1b,0x42,0x25,0xca,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x92,0x0c,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x25, +0xc8,0x02,0x43,0x8c,0x25,0xb0,0x02,0x3c,0x93,0x0c,0x42,0x34,0x02,0x1f,0x03,0x00, +0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x25, +0xea,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x98,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x2d,0x0a,0x46,0x34, +0xa2,0x0d,0x43,0x34,0xa4,0x0d,0x44,0x34,0xa6,0x0d,0x45,0x34,0xa8,0x0d,0x42,0x34, +0x00,0x00,0x67,0x94,0x00,0x00,0x88,0x94,0x00,0x00,0xa9,0x94,0x00,0x00,0x44,0x94, +0x00,0x00,0xc3,0x90,0x78,0x1b,0x42,0x25,0xe2,0x02,0x44,0xa4,0x40,0x00,0x63,0x34, +0xff,0x00,0x63,0x30,0x00,0x00,0xc3,0xa0,0xdc,0x02,0x47,0xa4,0xde,0x02,0x48,0xa4, +0xe0,0x02,0x49,0xa4,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x07,0x3c, +0x5b,0x0a,0xe2,0x34,0x00,0x00,0x44,0x90,0x78,0x1b,0x46,0x25,0x5c,0x0a,0xe2,0x34, +0x00,0x00,0x45,0x90,0xdc,0x02,0xc3,0x94,0xde,0x02,0xc2,0x94,0xe0,0x02,0xc9,0x94, +0xe2,0x02,0xc8,0x94,0xff,0x00,0x84,0x30,0x21,0x18,0x62,0x00,0x00,0x22,0x04,0x00, +0xff,0x00,0xa5,0x30,0x21,0x20,0x85,0x00,0x21,0x18,0x69,0x00,0xff,0xff,0x82,0x30, +0x21,0x18,0x68,0x00,0x21,0x18,0x62,0x00,0x64,0x0c,0xe7,0x34,0xff,0xff,0x42,0x30, +0xe4,0x02,0xc3,0xac,0x00,0x00,0xe2,0xa4,0xe8,0x02,0xc4,0xa4,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x42,0x8d,0x01,0x00,0x03,0x24,0x01,0x00,0x44,0x30, +0x07,0x00,0x83,0x10,0x78,0x1b,0x45,0x25,0x24,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00, +0x10,0x00,0xbf,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0xe8,0x02,0xa2,0x8c,0x00,0x00,0x00,0x00,0x02,0x17,0x02,0x00,0x01,0x00,0x42,0x30, +0xf5,0xff,0x40,0x14,0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,0x4e,0x00,0x64,0x10,0x00,0x00,0x00,0x00, +0x78,0x1b,0x45,0x25,0xea,0x02,0xa2,0x90,0x00,0x00,0x00,0x00,0x07,0x00,0x40,0x14, +0x78,0x1b,0x46,0x25,0x78,0x1b,0x42,0x8d,0x01,0x00,0x03,0x24,0x02,0x11,0x02,0x00, +0x03,0x00,0x42,0x30,0x49,0x00,0x43,0x10,0x3e,0x00,0x02,0x24,0xea,0x02,0xc3,0x90, +0xff,0x00,0x02,0x24,0xe0,0xff,0x62,0x14,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34, +0x00,0x00,0x45,0x90,0xcc,0x02,0xc4,0x94,0xe4,0x02,0xc7,0x8c,0x32,0x00,0x02,0x24, +0x20,0x00,0x03,0x24,0x7f,0x00,0xa5,0x30,0x2b,0x20,0xe4,0x00,0xd4,0x02,0xc2,0xa0, +0xd5,0x02,0xc3,0xa0,0x0c,0x00,0x80,0x14,0xff,0xff,0xa2,0x24,0xce,0x02,0xc2,0x94, +0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x00,0x09,0x00,0x40,0x14,0x78,0x1b,0x44,0x25, +0xd0,0x02,0xc2,0x94,0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x00,0x02,0x00,0x40,0x10, +0x02,0x00,0xa2,0x24,0x01,0x00,0xa2,0x24,0xff,0x00,0x45,0x30,0x78,0x1b,0x44,0x25, +0xd4,0x02,0x83,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x65,0x00,0x7e,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x21,0x28,0x60,0x00,0x78,0x1b,0x43,0x25,0xe4,0x02,0x62,0x8c, +0x00,0x00,0x00,0x00,0x11,0x27,0x42,0x2c,0x73,0x00,0x40,0x14,0x3a,0x00,0xa2,0x2c, +0x32,0x00,0x05,0x24,0x44,0x00,0x03,0x24,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34, +0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,0x00,0x00,0x45,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x58,0x0c,0x42,0x34, +0x00,0x00,0x45,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x3e,0x1a,0x00,0x08, +0x00,0x00,0x00,0x00,0xea,0x02,0xa2,0x90,0x00,0x00,0x00,0x00,0xb0,0xff,0x40,0x14, +0xff,0xff,0x02,0x24,0x50,0x1a,0x00,0x08,0xea,0x02,0xa2,0xa0,0x02,0x00,0xa4,0x90, +0xd4,0x02,0xa2,0xa0,0x1c,0x00,0x03,0x24,0x06,0x00,0x02,0x24,0x57,0x00,0x82,0x10, +0xd5,0x02,0xa3,0xa0,0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,0x8f,0xff,0x60,0x10,0x78,0x1b,0x44,0x25, +0x80,0x11,0x83,0x8c,0xff,0xff,0x02,0x34,0x8b,0xff,0x62,0x10,0x00,0x00,0x00,0x00, +0xe4,0x02,0x83,0x8c,0x00,0x00,0x00,0x00,0xe9,0x03,0x62,0x2c,0x5c,0x00,0x40,0x14, +0x90,0x01,0x62,0x2c,0xd6,0x02,0x83,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x03,0x00, +0x03,0x16,0x02,0x00,0xfe,0xff,0x42,0x24,0xfc,0xff,0x42,0x28,0x02,0x00,0x40,0x10, +0xfe,0xff,0x62,0x24,0xfc,0xff,0x02,0x24,0xd6,0x02,0x82,0xa0,0x78,0x1b,0x44,0x25, +0x80,0x11,0x82,0x8c,0xd6,0x02,0x83,0x90,0xd2,0x02,0x85,0x90,0x02,0x11,0x02,0x00, +0x7f,0x00,0x42,0x30,0x0a,0x00,0x47,0x24,0x23,0x18,0xe3,0x00,0x00,0x3e,0x03,0x00, +0x03,0x3e,0x07,0x00,0xff,0x00,0xa2,0x30,0x2a,0x10,0x47,0x00,0x3e,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x00,0x3e,0x05,0x00,0x03,0x3e,0x07,0x00,0x78,0x1b,0x43,0x25, +0xe4,0x02,0x62,0x8c,0x00,0x00,0x00,0x00,0x11,0x27,0x42,0x2c,0x32,0x00,0x40,0x14, +0x3a,0x00,0xe2,0x28,0x32,0x00,0xe2,0x28,0x2f,0x00,0x40,0x10,0x3a,0x00,0xe2,0x28, +0x32,0x00,0x07,0x24,0x44,0x00,0x03,0x24,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34, +0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,0xff,0x00,0xe4,0x30, +0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c, +0x58,0x0c,0x42,0x34,0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x3e,0x1a,0x00,0x08,0x00,0x00,0x00,0x00,0x8f,0xff,0x40,0x10,0x48,0x00,0x03,0x24, +0x86,0x1a,0x00,0x08,0x44,0x00,0x03,0x24,0xd5,0x02,0x83,0x90,0x00,0x00,0x00,0x00, +0x2b,0x10,0xa3,0x00,0x7e,0x1a,0x00,0x08,0x0b,0x28,0x62,0x00,0x25,0xb0,0x02,0x3c, +0x00,0x08,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x27,0x18,0x03,0x00, +0x01,0x00,0x63,0x30,0xa4,0xff,0x60,0x10,0x25,0xb0,0x02,0x3c,0x36,0x00,0x02,0x24, +0xa9,0x1a,0x00,0x08,0xd2,0x02,0xa2,0xa0,0xd3,0xff,0x40,0x10,0x48,0x00,0x03,0x24, +0xde,0x1a,0x00,0x08,0x44,0x00,0x03,0x24,0xd3,0x02,0x83,0x80,0x00,0x00,0x00,0x00, +0xff,0x00,0x62,0x30,0x2a,0x10,0xe2,0x00,0xd3,0x1a,0x00,0x08,0x0b,0x38,0x62,0x00, +0xae,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xd6,0x02,0x83,0x90,0x00,0x00,0x00,0x00, +0x00,0x16,0x03,0x00,0x03,0x16,0x02,0x00,0x02,0x00,0x42,0x24,0x0d,0x00,0x42,0x28, +0x03,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0xc2,0x1a,0x00,0x08,0x0c,0x00,0x02,0x24, +0xc2,0x1a,0x00,0x08,0x02,0x00,0x62,0x24,0xc0,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf, +0x25,0xb0,0x14,0x3c,0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf, +0x2c,0x00,0xb5,0xaf,0x20,0x00,0xb2,0xaf,0xd8,0x00,0x86,0x36,0x00,0x00,0xc3,0x90, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x51,0x24,0x2a,0xb0,0x10,0x3c,0xa0,0xff,0x02,0x24, +0x25,0x18,0x62,0x00,0x34,0x00,0x05,0x36,0xfe,0xff,0x02,0x24,0xbc,0x02,0x32,0x92, +0x40,0x00,0x04,0x24,0x00,0x00,0xc3,0xa0,0x00,0x00,0xa2,0xa0,0x39,0x15,0x00,0x0c, +0x00,0x96,0x12,0x00,0x21,0x98,0x40,0x00,0x8d,0x00,0x60,0x12,0x00,0x40,0x02,0x3c, +0x08,0x00,0x63,0x8e,0xb0,0x03,0x82,0x36,0x25,0xb0,0x1e,0x3c,0x21,0x20,0x60,0x02, +0x00,0x00,0x43,0xac,0x02,0x45,0x00,0x0c,0x21,0xb8,0x20,0x02,0x42,0x00,0xd5,0x37, +0x03,0x0c,0xd1,0x37,0x17,0x0e,0xd6,0x37,0x04,0x00,0x14,0x24,0x2a,0xb0,0x03,0x3c, +0x06,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x30, +0x0a,0x00,0x40,0x18,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0xd4,0xb2,0x84,0x24, +0x00,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00, +0x00,0xff,0x42,0x30,0xfc,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,0x08,0x00,0x65,0x8e, +0x20,0x10,0x06,0x3c,0x01,0x00,0x04,0x24,0x00,0xfe,0xc6,0x34,0x40,0x00,0x07,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa4,0xaf,0x00,0x02,0x00,0x0c,0x01,0x00,0x04,0x24, +0x02,0x80,0x02,0x3c,0xd8,0xb2,0x42,0x24,0x00,0x00,0x45,0x8c,0x01,0x00,0x03,0x24, +0x21,0x20,0x00,0x00,0x00,0x00,0xa3,0xa0,0xff,0xff,0x03,0x24,0x00,0x00,0xa3,0xa2, +0x00,0x00,0x22,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,0x40,0x00,0x42,0x34, +0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x02,0x00,0x02,0x24,0x02,0x80,0x04,0x3c, +0x00,0x00,0xa2,0xa0,0x78,0x1b,0x83,0x24,0xc1,0x02,0x62,0x90,0x00,0x00,0xc4,0x92, +0x21,0x28,0x00,0x00,0x00,0x00,0xc2,0xa2,0xff,0x00,0x90,0x30,0x01,0x00,0xa2,0x24, +0xff,0x00,0x45,0x30,0x06,0x00,0xa3,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0xa2,0x24, +0xef,0xff,0x02,0x24,0x64,0x00,0x04,0x24,0x00,0x00,0xa2,0xa2,0xcb,0x12,0x00,0x0c, +0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00,0xbf,0x00,0x42,0x30, +0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0xcb,0x12,0x00,0x0c,0x84,0x03,0x04,0x24, +0xf4,0x08,0xc2,0x37,0x00,0x00,0x43,0x8c,0x00,0x80,0x04,0x3c,0xdf,0x07,0x84,0x34, +0x00,0x00,0xd0,0xa2,0x21,0x10,0x00,0x00,0x24,0x28,0x64,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x00,0x00,0xa0,0xa2,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30, +0x40,0x00,0x42,0x34,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30, +0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0xbe,0x02,0xe2,0x92, +0x1f,0x00,0xa3,0x30,0x2b,0x10,0x62,0x00,0x0a,0x00,0x40,0x10,0x02,0x80,0x02,0x3c, +0xbf,0x02,0xe2,0x92,0x00,0x00,0x00,0x00,0x2b,0x10,0x43,0x00,0x05,0x00,0x40,0x10, +0x02,0x80,0x02,0x3c,0x01,0x00,0x02,0x3c,0x25,0x10,0x62,0x00,0x21,0x90,0x42,0x02, +0x02,0x80,0x02,0x3c,0x56,0x43,0x43,0x90,0x22,0x00,0x02,0x24,0x1c,0x00,0x62,0x10, +0x92,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0x02,0x80,0x03,0x3c,0xff,0xff,0x94,0x26, +0xcb,0x12,0x00,0x0c,0xf4,0x01,0x04,0x24,0x89,0xff,0x81,0x06,0x2a,0xb0,0x03,0x3c, +0x04,0x00,0x60,0x12,0x25,0xb0,0x02,0x3c,0x56,0x15,0x00,0x0c,0x21,0x20,0x60,0x02, +0x25,0xb0,0x02,0x3c,0xd8,0x02,0x42,0x34,0x00,0x00,0x52,0xac,0x21,0x10,0x40,0x02, +0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f, +0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f, +0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27, +0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,0xbe,0x02,0x62,0x90,0xc0,0x07,0xa3,0x30, +0x82,0x19,0x03,0x00,0x2b,0x10,0x62,0x00,0xe0,0xff,0x40,0x10,0x02,0x80,0x04,0x3c, +0x78,0x1b,0x84,0x24,0xbf,0x02,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x43,0x00, +0xda,0xff,0x40,0x10,0x00,0x12,0x03,0x00,0x10,0x00,0x03,0x3c,0x25,0x10,0x43,0x00, +0xbf,0x1b,0x00,0x08,0x21,0x90,0x42,0x02,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf, +0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,0x15,0x00,0x04,0x24, +0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0xb8,0x44,0x00,0x0c,0x14,0x00,0xb1,0xaf, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x02,0x80,0x12,0x3c,0xff,0xff,0x05,0x36, +0x56,0x30,0x06,0x24,0xb8,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0x78,0x1b,0x51,0x26, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x08,0x03,0x23,0x92,0x04,0x00,0x02,0x24, +0x20,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0x18,0x03,0x25,0x8e,0x25,0xb0,0x10,0x3c, +0xb1,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c, +0x04,0x0e,0x04,0x36,0x1c,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x08,0x0e,0x04,0x36, +0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x10,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e, +0xb1,0x5a,0x00,0x0c,0x14,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c, +0x18,0x0e,0x04,0x36,0x18,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x1c,0x0e,0x04,0x36, +0x78,0x1b,0x43,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x04,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03, +0x08,0x03,0x62,0xa0,0x00,0x0e,0x42,0x34,0x00,0x00,0x43,0x8c,0x18,0x03,0x25,0x8e, +0x00,0x00,0x00,0x00,0xde,0xff,0x65,0x14,0x25,0xb0,0x10,0x3c,0x19,0x1c,0x00,0x08, +0x78,0x1b,0x43,0x26,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x0f,0x00,0x10,0x3c, +0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf, +0x18,0x00,0xb2,0xaf,0xb8,0x44,0x00,0x0c,0x14,0x00,0xb1,0xaf,0xcb,0x12,0x00,0x0c, +0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x56,0x30,0x06,0x24,0xb8,0x44,0x00,0x0c, +0x1a,0x00,0x04,0x24,0x02,0x80,0x10,0x3c,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0x78,0x1b,0x02,0x26,0x08,0x03,0x46,0x90,0x25,0xb0,0x11,0x3c,0x10,0x10,0x12,0x3c, +0x01,0x00,0x03,0x24,0x00,0x0e,0x24,0x36,0x1e,0x00,0xc3,0x10,0x10,0x10,0x45,0x36, +0xb1,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x04,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c, +0x10,0x10,0x45,0x36,0x08,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,0x10,0x10,0x05,0x24, +0x10,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x14,0x0e,0x24,0x36, +0xb1,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x18,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c, +0x10,0x10,0x45,0x36,0x1c,0x0e,0x24,0x36,0xb1,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36, +0x78,0x1b,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03, +0x08,0x03,0x62,0xa0,0x00,0x00,0x86,0x8c,0x00,0x00,0x00,0x00,0xe0,0xff,0xc5,0x14, +0x78,0x1b,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03, +0x08,0x03,0x62,0xa0,0xd8,0xff,0xbd,0x27,0x1c,0x00,0xb3,0xaf,0x02,0x80,0x13,0x3c, +0x14,0x00,0xb1,0xaf,0x78,0x1b,0x71,0x26,0x10,0x03,0x26,0x8e,0x10,0x00,0xb0,0xaf, +0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0x15,0x00,0x04,0x24,0x20,0x00,0xbf,0xaf, +0xb8,0x44,0x00,0x0c,0x18,0x00,0xb2,0xaf,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0x14,0x03,0x26,0x8e,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x08,0x03,0x22,0x92,0x25,0xb0,0x12,0x3c, +0x08,0x00,0x40,0x14,0x08,0x0e,0x44,0x36,0x25,0xb0,0x02,0x3c,0x00,0x0e,0x42,0x34, +0x00,0x00,0x45,0x8c,0xf0,0x02,0x23,0x8e,0x00,0x00,0x00,0x00,0x17,0x00,0xa3,0x10, +0x78,0x1b,0x62,0x26,0xec,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00, +0xf0,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x00,0x0e,0x44,0x36,0xf4,0x02,0x25,0x8e, +0xb1,0x5a,0x00,0x0c,0x04,0x0e,0x44,0x36,0xf8,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c, +0x10,0x0e,0x44,0x36,0xfc,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x14,0x0e,0x44,0x36, +0x00,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x18,0x0e,0x44,0x36,0x04,0x03,0x25,0x8e, +0xb1,0x5a,0x00,0x0c,0x1c,0x0e,0x44,0x36,0x78,0x1b,0x62,0x26,0x20,0x00,0xbf,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x28,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x08,0x03,0x40,0xa0,0xe0,0xff,0xbd,0x27, +0x18,0x00,0xb2,0xaf,0x02,0x80,0x12,0x3c,0x14,0x00,0xb1,0xaf,0x78,0x1b,0x51,0x26, +0x10,0x03,0x26,0x8e,0x10,0x00,0xb0,0xaf,0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36, +0x1c,0x00,0xbf,0xaf,0xb8,0x44,0x00,0x0c,0x15,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c, +0x64,0x00,0x04,0x24,0x14,0x03,0x26,0x8e,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c, +0x1a,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x08,0x03,0x23,0x92, +0x03,0x00,0x02,0x24,0x2c,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0xf0,0x02,0x25,0x8e, +0x25,0xb0,0x10,0x3c,0xb1,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,0xf4,0x02,0x25,0x8e, +0xb1,0x5a,0x00,0x0c,0x04,0x0e,0x04,0x36,0xf8,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c, +0x10,0x0e,0x04,0x36,0xfc,0x02,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x14,0x0e,0x04,0x36, +0x00,0x03,0x25,0x8e,0xb1,0x5a,0x00,0x0c,0x18,0x0e,0x04,0x36,0x04,0x03,0x25,0x8e, +0xb1,0x5a,0x00,0x0c,0x1c,0x0e,0x04,0x36,0x0c,0x03,0x24,0x8e,0xec,0x02,0x22,0x8e, +0x00,0x00,0x00,0x00,0x21,0x28,0x44,0x00,0x00,0xff,0xa3,0x30,0xff,0xff,0x02,0x3c, +0xff,0x00,0x42,0x34,0x01,0x3f,0x63,0x2c,0x24,0x10,0xa2,0x00,0x0c,0x00,0x60,0x10, +0x08,0x0e,0x04,0x36,0xb1,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x78,0x1b,0x43,0x26, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x08,0x03,0x62,0xa0, +0xe1,0x1c,0x00,0x08,0x00,0x3f,0x45,0x34,0x00,0x0e,0x42,0x34,0x00,0x00,0x43,0x8c, +0xf0,0x02,0x25,0x8e,0x00,0x00,0x00,0x00,0xd2,0xff,0x65,0x14,0x25,0xb0,0x10,0x3c, +0xe4,0x1c,0x00,0x08,0x78,0x1b,0x43,0x26,0xd8,0xff,0xbd,0x27,0x18,0x00,0xb2,0xaf, +0x02,0x80,0x12,0x3c,0x20,0x00,0xb4,0xaf,0x24,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x78,0x1b,0x44,0x26,0x80,0x11,0x82,0x8c, +0x78,0x1b,0x43,0x8e,0x08,0x03,0x93,0x90,0x02,0x11,0x02,0x00,0x7f,0x00,0x54,0x30, +0xcc,0x00,0x63,0x30,0x40,0x00,0x02,0x24,0x68,0x00,0x62,0x10,0x01,0x00,0x02,0x24, +0x25,0xb0,0x08,0x3c,0x4c,0x00,0x03,0x35,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x03,0x00,0x42,0x30,0x07,0x00,0x40,0x10,0x78,0x1b,0x45,0x26,0x78,0x1b,0x42,0x92, +0x00,0x00,0x00,0x00,0x82,0x11,0x02,0x00,0x2f,0x00,0x40,0x10,0x00,0x0e,0x05,0x35, +0x78,0x1b,0x45,0x26,0x08,0x03,0xa2,0x8c,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00, +0x0f,0x00,0x40,0x14,0x78,0x1b,0x42,0x26,0x25,0xb0,0x02,0x3c,0x84,0x01,0x42,0x34, +0x00,0x00,0x44,0x8c,0x0d,0x00,0x03,0x24,0x7b,0x00,0x83,0x10,0x3e,0x00,0x02,0x24, +0x4a,0x00,0x03,0x24,0x23,0x03,0xa2,0xa0,0x20,0x03,0xa3,0xa0,0x45,0x00,0x02,0x24, +0x43,0x00,0x03,0x24,0x21,0x03,0xa2,0xa0,0x22,0x03,0xa3,0xa0,0x78,0x1b,0x42,0x26, +0x80,0x11,0x43,0x8c,0x25,0xb0,0x02,0x3c,0x60,0x0c,0x42,0x34,0x02,0x19,0x03,0x00, +0xff,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x78,0x1b,0x45,0x8e,0x44,0x00,0x02,0x24,0xcc,0x00,0xa3,0x30,0x3e,0x00,0x62,0x10, +0x78,0x1b,0x44,0x26,0x24,0x00,0xbf,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x00,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00, +0x5e,0x00,0x40,0x10,0x10,0x0e,0x07,0x35,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x08,0x0e,0x02,0x35,0x04,0x0e,0x03,0x35, +0x00,0x00,0x44,0x8c,0x00,0x00,0xa5,0x8c,0x00,0x00,0x66,0x8c,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x49,0x24,0xec,0x02,0x24,0xad,0xf0,0x02,0x25,0xad,0xf4,0x02,0x26,0xad, +0x14,0x0e,0x04,0x35,0x02,0x80,0x02,0x3c,0x18,0x0e,0x05,0x35,0x00,0x00,0xe7,0x8c, +0x1c,0x0e,0x06,0x35,0x00,0x00,0x83,0x8c,0x56,0x43,0x4a,0x90,0x00,0x00,0xa2,0x8c, +0x00,0x00,0xc4,0x8c,0xf8,0x02,0x27,0xad,0x00,0x03,0x22,0xad,0x22,0x00,0x02,0x24, +0xfc,0x02,0x23,0xad,0x5a,0x00,0x42,0x11,0x04,0x03,0x24,0xad,0x92,0x00,0x02,0x24, +0x58,0x00,0x42,0x11,0x0d,0x08,0x02,0x35,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x78,0x1b,0x42,0x8e,0x3f,0xff,0x03,0x24,0x24,0x10,0x43,0x00, +0x40,0x00,0x42,0x34,0x14,0x1d,0x00,0x08,0x78,0x1b,0x42,0xae,0x3a,0x00,0x62,0x12, +0x04,0x00,0x02,0x24,0x38,0x00,0x62,0x12,0x78,0x1b,0x43,0x26,0xff,0xff,0x02,0x24, +0x08,0x1d,0x00,0x08,0x08,0x03,0x62,0xa0,0x80,0x11,0x83,0x8c,0xff,0xff,0x02,0x34, +0xc0,0xff,0x62,0x10,0x02,0x11,0x05,0x00,0x03,0x00,0x45,0x30,0x01,0x00,0x03,0x24, +0xbc,0xff,0xa3,0x14,0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30,0xb6,0xff,0x60,0x10,0x03,0x00,0x02,0x24, +0x65,0x00,0x62,0x12,0x04,0x00,0x62,0x2a,0x47,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x6a,0x00,0x60,0x12,0x00,0x00,0x00,0x00,0xae,0xff,0x65,0x16,0x00,0x00,0x00,0x00, +0x20,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x56,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x23,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00, +0x48,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x6d,0x1c,0x00,0x0c,0x00,0x00,0x00,0x00, +0x39,0x1d,0x00,0x08,0x00,0x00,0x00,0x00,0x3b,0x00,0x02,0x24,0x46,0x00,0x03,0x24, +0x23,0x03,0xa2,0xa0,0x20,0x03,0xa3,0xa0,0x41,0x00,0x02,0x24,0x40,0x00,0x03,0x24, +0x21,0x03,0xa2,0xa0,0x27,0x1d,0x00,0x08,0x22,0x03,0xa3,0xa0,0x00,0x00,0xe3,0x8c, +0x3f,0x3f,0x02,0x3c,0x3f,0x3f,0x42,0x34,0x9f,0xff,0x62,0x14,0x00,0x00,0x00,0x00, +0x15,0x1d,0x00,0x08,0x78,0x1b,0x45,0x26,0x0f,0x00,0x10,0x3c,0x01,0x00,0x11,0x3c, +0xff,0xff,0x05,0x36,0xf4,0x98,0x26,0x36,0xb8,0x44,0x00,0x0c,0x15,0x00,0x04,0x24, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x56,0x30,0x26,0x36, +0xb8,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0x78,0x1b,0x43,0x26,0xff,0xff,0x02,0x24,0x08,0x1d,0x00,0x08,0x08,0x03,0x62,0xa0, +0x0d,0x08,0x02,0x35,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x63,0x30, +0x08,0x00,0x62,0x2c,0x0f,0x00,0x63,0x38,0xa3,0xff,0x40,0x14,0x01,0x00,0x65,0x24, +0x00,0x16,0x05,0x00,0x00,0x24,0x05,0x00,0x00,0x1a,0x05,0x00,0x25,0x10,0x44,0x00, +0x25,0x10,0x43,0x00,0x25,0x10,0x45,0x00,0x25,0x18,0x65,0x00,0x1c,0x03,0x23,0xad, +0x66,0x1d,0x00,0x08,0x18,0x03,0x22,0xad,0x04,0x00,0x02,0x24,0x11,0x00,0x62,0x12, +0xff,0x00,0x02,0x24,0x67,0xff,0x62,0x16,0x00,0x00,0x00,0x00,0x22,0x03,0x82,0x90, +0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x21,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x20,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x0a,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x29,0x1c,0x00,0x0c,0x00,0x00,0x00,0x00,0x39,0x1d,0x00,0x08, +0x00,0x00,0x00,0x00,0x21,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00, +0xf8,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xea,0x1b,0x00,0x0c,0x00,0x00,0x00,0x00, +0x39,0x1d,0x00,0x08,0x00,0x00,0x00,0x00,0x24,0x03,0x82,0x90,0x00,0x00,0x00,0x00, +0x2b,0x10,0x82,0x02,0xa8,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xab,0x1c,0x00,0x0c, +0x00,0x00,0x00,0x00,0x39,0x1d,0x00,0x08,0x00,0x00,0x00,0x00,0x22,0x03,0x82,0x90, +0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0xe6,0xff,0x40,0x10,0x00,0x00,0x00,0x00, +0x25,0x03,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0x9a,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0xab,0x1c,0x00,0x0c,0x00,0x00,0x00,0x00,0x39,0x1d,0x00,0x08, +0x00,0x00,0x00,0x00,0x02,0x80,0x08,0x3c,0x78,0x1b,0x05,0x25,0x80,0x11,0xa4,0x8c, +0xea,0x02,0xa3,0x90,0x02,0x11,0x04,0x00,0x26,0x00,0x60,0x14,0x7f,0x00,0x46,0x30, +0x25,0xb0,0x07,0x3c,0x4c,0x00,0xe2,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00, +0x20,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x34,0x1d,0x00,0x82,0x10, +0x00,0x00,0x00,0x00,0x00,0x08,0xe3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x01,0x00,0x42,0x30,0x19,0x00,0x40,0x10,0x4b,0x00,0xc2,0x2c,0x3e,0x00,0x40,0x10, +0x01,0x00,0x04,0x24,0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x49,0x00,0x40,0x10, +0x23,0x00,0xc2,0x2c,0x78,0x1b,0x04,0x25,0xd7,0x02,0x82,0x90,0x00,0x00,0x00,0x00, +0x44,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x87,0x0c,0x42,0x34, +0x20,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0xd7,0x02,0x80,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x17,0x00,0x40,0x10, +0x01,0x00,0x04,0x24,0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x44,0x00,0x40,0x10, +0x23,0x00,0xc2,0x2c,0x78,0x1b,0x04,0x25,0xd7,0x02,0x82,0x90,0x00,0x00,0x00,0x00, +0x3f,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34, +0x44,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0xd7,0x02,0x80,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xd7,0x02,0xa2,0x90, +0x00,0x00,0x00,0x00,0xe7,0xff,0x44,0x10,0x43,0x00,0x02,0x24,0x30,0x0c,0xe3,0x34, +0xd7,0x02,0xa4,0xa0,0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xd7,0x02,0xa2,0x90,0x00,0x00,0x00,0x00, +0xc0,0xff,0x44,0x10,0x10,0x00,0x02,0x24,0x87,0x0c,0xe3,0x34,0xd7,0x02,0xa4,0xa0, +0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0xc7,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x04,0x25, +0xd7,0x02,0x82,0x90,0x02,0x00,0x03,0x24,0xc2,0xff,0x43,0x10,0x00,0x00,0x00,0x00, +0x25,0xb0,0x02,0x3c,0x87,0x0c,0x42,0x34,0xd7,0x02,0x83,0xa0,0x00,0x00,0x40,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0xb4,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x04,0x25,0xd7,0x02,0x82,0x90, +0x02,0x00,0x03,0x24,0xaf,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c, +0xd7,0x02,0x83,0xa0,0x30,0x0c,0x42,0x34,0x42,0x00,0x03,0x24,0x00,0x00,0x43,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x2a,0xb0,0x04,0x3c,0x28,0x00,0x85,0x34,0x02,0x00,0x82,0x94,0x04,0x00,0x84,0x24, +0x05,0x00,0x40,0x14,0x2b,0x18,0xa4,0x00,0xfb,0xff,0x60,0x10,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x90,0x1e,0x00,0x0c,0x00,0x00,0x00,0x00, +0x08,0x00,0x40,0x10,0x01,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0xb8,0x44,0x43,0xa0, +0x14,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x6c,0x44,0x44,0xac, +0xb7,0x44,0x60,0xa0,0x10,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x9e,0x44,0x40,0xa0,0xff,0x00,0x85,0x30, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb0,0x44,0x60,0xa0,0x08,0x00,0xa4,0x2c, +0xb2,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xba,0x44,0x60,0xa0, +0x98,0x44,0x45,0xa0,0x11,0x00,0x80,0x10,0x02,0x80,0x03,0x3c,0x80,0x10,0x05,0x00, +0xdc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00, +0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24, +0x08,0x0b,0xa4,0x8c,0x00,0x70,0x02,0x3c,0x08,0x00,0x42,0x34,0x25,0x20,0x82,0x00, +0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x0b,0xa4,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,0x08,0x0b,0xa4,0x8c, +0x00,0x70,0x02,0x3c,0x08,0x00,0x42,0x34,0x27,0x10,0x02,0x00,0x24,0x20,0x82,0x00, +0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac, +0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24,0x08,0x0b,0xa2,0x8c,0x14,0x0b,0xa6,0x94, +0x00,0x70,0x04,0x3c,0x41,0xb0,0x03,0x3c,0x08,0x00,0x42,0x34,0x27,0x20,0x04,0x00, +0x00,0x00,0x62,0xac,0x24,0x20,0x44,0x00,0x10,0x00,0xc6,0x34,0x08,0x00,0x67,0x34, +0x02,0x80,0x08,0x3c,0x01,0x00,0x02,0x24,0x00,0x00,0x64,0xac,0x00,0x00,0xe6,0xa4, +0xb4,0x44,0x02,0xa1,0xb4,0x44,0x03,0x91,0x02,0x80,0x02,0x3c,0x14,0x0b,0xa6,0xa4, +0xb5,0x44,0x43,0xa0,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa4,0xac,0x02,0x80,0x05,0x3c, +0x78,0x1b,0xa5,0x24,0x08,0x0b,0xa3,0x8c,0x14,0x0b,0xa6,0x94,0x00,0x70,0x02,0x3c, +0x41,0xb0,0x04,0x3c,0x08,0x00,0x63,0x34,0x27,0x10,0x02,0x00,0x24,0x10,0x62,0x00, +0x10,0x00,0xc6,0x34,0x08,0x00,0x87,0x34,0x14,0x0b,0xa6,0xa4,0x00,0x00,0x83,0xac, +0x00,0x00,0x82,0xac,0x00,0x00,0xe6,0xa4,0x08,0x00,0xe0,0x03,0x08,0x0b,0xa2,0xac, +0x25,0xb0,0x03,0x3c,0xbe,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x08,0x00,0xe0,0x03, +0x01,0x00,0x42,0x2c,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x90,0x1e,0x00,0x0c, +0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x15,0x00,0x40,0x10,0x78,0x41,0x64,0x24, +0x78,0x41,0x62,0x8c,0x00,0x00,0x00,0x00,0x11,0x00,0x44,0x14,0x02,0x80,0x02,0x3c, +0xb8,0x44,0x43,0x90,0x01,0x00,0x02,0x24,0xff,0x00,0x63,0x30,0x0c,0x00,0x62,0x10, +0x01,0x00,0x04,0x24,0x02,0x80,0x03,0x3c,0x99,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x05,0x00,0x42,0x28,0x05,0x00,0x40,0x10,0x21,0x10,0x80,0x00, +0x10,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0x10,0x00,0xbf,0x8f,0x21,0x20,0x00,0x00,0x21,0x10,0x80,0x00,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x90,0x1e,0x00,0x0c, +0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x25,0x00,0x40,0x10,0x78,0x41,0x64,0x24, +0x78,0x41,0x62,0x8c,0x00,0x00,0x00,0x00,0x21,0x00,0x44,0x14,0x01,0x00,0x05,0x24, +0x02,0x80,0x03,0x3c,0xb0,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30, +0x1b,0x00,0x45,0x10,0x02,0x80,0x03,0x3c,0x99,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x03,0x00,0x42,0x28,0x15,0x00,0x40,0x10,0x02,0x80,0x03,0x3c, +0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x30,0x10,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0xb2,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x10,0x00,0x42,0x30, +0x0b,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0xb8,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0xff,0x00,0x42,0x30,0x06,0x00,0x45,0x10,0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c, +0xb9,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00, +0x21,0x20,0x00,0x00,0x10,0x00,0xbf,0x8f,0x21,0x10,0x80,0x00,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0xff,0x00,0x84,0x30,0x18,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x29,0x00,0x80,0x10,0x10,0x00,0xb0,0xaf,0x25,0xb0,0x03,0x3c, +0x04,0x0c,0x62,0x90,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x34, +0x04,0x0c,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x04,0x0d,0x62,0x90, +0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x02,0x00,0x42,0x34,0x04,0x0d,0x62,0xa0, +0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x82,0x24,0x25,0xb0,0x10,0x3c,0x70,0x0e,0x05,0x8e,0x80,0x01,0x11,0x3c, +0x70,0x0e,0x04,0x24,0x34,0x5b,0x00,0x0c,0x25,0x28,0xb1,0x00,0x8c,0x0e,0x05,0x8e, +0x8c,0x0e,0x04,0x24,0x34,0x5b,0x00,0x0c,0x25,0x28,0xb1,0x00,0x03,0x00,0x05,0x3c, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x59,0x01,0xa5,0x34, +0x44,0x08,0x04,0x24,0x34,0x5b,0x00,0x08,0x20,0x00,0xbd,0x27,0x44,0x08,0x04,0x24, +0x34,0x5b,0x00,0x0c,0x21,0x28,0x00,0x00,0x25,0xb0,0x03,0x3c,0x04,0x0c,0x62,0x90, +0x21,0x20,0x00,0x00,0xfd,0x00,0x42,0x30,0x04,0x0c,0x62,0xa0,0x01,0x00,0x82,0x24, +0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24, +0x25,0xb0,0x03,0x3c,0x04,0x0d,0x62,0x90,0x21,0x20,0x00,0x00,0xfd,0x00,0x42,0x30, +0x04,0x0d,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x11,0x3c,0x70,0x0e,0x25,0x8e, +0x7f,0xfe,0x10,0x3c,0xff,0xff,0x10,0x36,0x24,0x28,0xb0,0x00,0x34,0x5b,0x00,0x0c, +0x70,0x0e,0x04,0x24,0x8c,0x0e,0x25,0x8e,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x24,0x28,0xb0,0x00,0x8c,0x0e,0x04,0x24,0x10,0x00,0xb0,0x8f,0x34,0x5b,0x00,0x08, +0x20,0x00,0xbd,0x27,0x25,0xb0,0x03,0x3c,0xfc,0x37,0x02,0x24,0x40,0x00,0x64,0x34, +0x00,0x00,0x82,0xa4,0x42,0x00,0x65,0x34,0x03,0x00,0x02,0x24,0x00,0x00,0xa0,0xa0, +0x03,0x08,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf, +0x10,0x00,0xb0,0xaf,0x02,0x80,0x02,0x3c,0x98,0x44,0x43,0x90,0x00,0x00,0x00,0x00, +0x07,0x00,0x60,0x10,0x25,0xb0,0x10,0x3c,0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90, +0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x2e,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x21,0x00,0x06,0x36,0x00,0x00,0xc2,0x90,0x18,0x00,0x03,0x36,0x42,0x00,0x05,0x36, +0x01,0x00,0x42,0x34,0x00,0x00,0xc2,0xa0,0x40,0x00,0x11,0x36,0x00,0x00,0x60,0xa0, +0xff,0xff,0x02,0x24,0xfc,0x57,0x03,0x24,0x00,0x00,0xa2,0xa0,0x64,0x00,0x04,0x24, +0x00,0x00,0x23,0xa6,0xcb,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0xfc,0x77,0x02,0x24, +0x00,0x00,0x22,0xa6,0xcb,0x12,0x00,0x0c,0x0a,0x00,0x04,0x24,0x03,0x08,0x00,0xa2, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x0a,0x00,0x04,0x24,0xcb,0x12,0x00,0x0c, +0x25,0xb0,0x10,0x3c,0x40,0x00,0x10,0x36,0xfc,0x37,0x02,0x24,0x00,0x00,0x02,0xa6, +0xcb,0x12,0x00,0x0c,0x0a,0x00,0x04,0x24,0xfc,0x77,0x02,0x24,0x00,0x00,0x02,0xa6, +0xcb,0x12,0x00,0x0c,0x0a,0x00,0x04,0x24,0xfc,0x57,0x02,0x24,0x00,0x00,0x02,0xa6, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x55,0x1f,0x00,0x0c,0x21,0x20,0x00,0x00,0xc8,0x1f,0x00,0x08, +0x25,0xb0,0x10,0x3c,0xd8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x20,0x00,0xbf,0xaf, +0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0xff,0x00,0x90,0x30, +0x00,0x60,0x13,0x40,0x01,0x00,0x61,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x02,0x80,0x11,0x3c,0x9a,0x44,0x22,0x92,0x0f,0x00,0x12,0x32,0x0f,0x00,0x42,0x30, +0x0d,0x00,0x52,0x10,0x04,0x00,0x02,0x32,0x13,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x9a,0x44,0x22,0x92,0x0c,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x2f,0x00,0x43,0x10, +0x08,0x00,0x02,0x32,0x9a,0x44,0x22,0x92,0x04,0x00,0x03,0x24,0x0f,0x00,0x42,0x30, +0x5a,0x00,0x43,0x10,0x00,0x00,0x00,0x00,0x00,0x60,0x93,0x40,0x20,0x00,0xbf,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x9a,0x44,0x22,0x92,0x00,0x00,0x00,0x00, +0x04,0x00,0x42,0x30,0x33,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92, +0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30,0x32,0x00,0x40,0x10,0x08,0x00,0x02,0x32, +0x30,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90,0x00,0x00,0x00,0x00, +0x01,0x00,0x42,0x30,0x3d,0x00,0x40,0x14,0x01,0x00,0x04,0x24,0x9a,0x44,0x22,0x92, +0xf0,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x9a,0x44,0x22,0xa2,0x9a,0x44,0x23,0x92, +0x00,0x00,0x00,0x00,0x25,0x18,0x43,0x02,0x9a,0x44,0x23,0xa2,0x00,0x60,0x93,0x40, +0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xd1,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x05,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0xd2,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,0xf0,0xff,0x03,0x24,0x24,0x10,0x43,0x00, +0x9a,0x44,0x22,0xa2,0x02,0x80,0x03,0x3c,0x9a,0x44,0x22,0x92,0x60,0x26,0x64,0x90, +0x04,0x00,0x42,0x34,0x01,0x00,0x84,0x30,0x9a,0x44,0x22,0xa2,0xc1,0xff,0x80,0x10, +0x00,0x00,0x00,0x00,0x0e,0x46,0x00,0x0c,0x01,0x00,0x04,0x24,0x11,0x20,0x00,0x08, +0x00,0x00,0x00,0x00,0xa9,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0x23,0x20,0x00,0x08, +0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30, +0xd2,0xff,0x40,0x14,0x08,0x00,0x02,0x32,0xd0,0xff,0x40,0x10,0x02,0x80,0x02,0x3c, +0xb1,0x44,0x43,0x90,0x01,0x00,0x02,0x24,0xff,0x00,0x63,0x30,0x1b,0x00,0x62,0x10, +0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30, +0xc6,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x21,0x20,0x00,0x00,0x0e,0x46,0x00,0x0c, +0x00,0x00,0x00,0x00,0x2f,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x25,0x1f,0x00,0x0c, +0x00,0x00,0x00,0x00,0xa4,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xb9,0x1f,0x00,0x0c, +0x00,0x00,0x00,0x00,0x9a,0x44,0x22,0x92,0xf0,0xff,0x03,0x24,0x24,0x10,0x43,0x00, +0x9a,0x44,0x22,0xa2,0x9a,0x44,0x23,0x92,0x00,0x00,0x00,0x00,0x02,0x00,0x63,0x34, +0x9a,0x44,0x23,0xa2,0x37,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x98,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0xac,0xff,0x60,0x14,0x02,0x80,0x03,0x3c, +0x65,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x98,0x44,0x43,0x90, +0x00,0x00,0x00,0x00,0x0c,0x00,0x60,0x10,0x02,0x80,0x02,0x3c,0xb1,0x44,0x43,0x90, +0x00,0x00,0x00,0x00,0x0a,0x00,0x60,0x14,0x0c,0x00,0x04,0x24,0x02,0x80,0x03,0x3c, +0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28, +0x03,0x00,0x40,0x14,0x04,0x00,0x04,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xf9,0x1f,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0xe8,0xff,0xbd,0x27,0x68,0x82,0x63,0x24,0x18,0x03,0x42,0x34,0x14,0x00,0xbf,0xaf, +0x10,0x00,0xb0,0xaf,0x00,0x00,0x43,0xac,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x17,0x00,0x40,0x10,0x02,0x80,0x02,0x3c, +0x02,0x80,0x02,0x3c,0x9a,0x44,0x43,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x63,0x30, +0x04,0x00,0x63,0x28,0x17,0x00,0x60,0x14,0x04,0x00,0x04,0x24,0x02,0x80,0x03,0x3c, +0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0c,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xb9,0x44,0x62,0xa0, +0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xb9,0x44,0x40,0xa0,0x00,0x60,0x90,0x40, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0xf9,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0xb4,0x20,0x00,0x08, +0x02,0x80,0x03,0x3c,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xe8,0xff,0xbd,0x27, +0x34,0x83,0x42,0x24,0x18,0x03,0x63,0x34,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf, +0x00,0x00,0x62,0xac,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x02,0x80,0x04,0x3c,0xb7,0x44,0x82,0x90,0x00,0x00,0x00,0x00, +0x0a,0x00,0x40,0x10,0x14,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0x6c,0x44,0x43,0xac, +0xb7,0x44,0x80,0xa0,0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x02,0x80,0x03,0x3c, +0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0xba,0x44,0x44,0xa0,0xb8,0x44,0x60,0xa0, +0x02,0x80,0x02,0x3c,0x99,0x44,0x44,0x90,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30, +0x00,0x60,0x90,0x40,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x42,0x11,0x05,0x00,0x0f,0x00,0x46,0x30, +0xe8,0xff,0xbd,0x27,0x09,0x00,0xc3,0x28,0x14,0x00,0xbf,0xaf,0x15,0x00,0x60,0x10, +0x10,0x00,0xb0,0xaf,0x82,0x16,0x05,0x00,0x01,0x00,0x42,0x30,0x15,0x00,0x40,0x10, +0x00,0xc0,0x02,0x3c,0x24,0x10,0xa2,0x00,0x47,0x00,0x40,0x14,0xc2,0x15,0x04,0x00, +0x01,0x00,0x42,0x30,0x54,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c, +0x3c,0xaf,0x63,0x24,0x21,0x18,0xc3,0x00,0x02,0x80,0x04,0x3c,0xb3,0x44,0x85,0x90, +0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x24,0x10,0x45,0x00,0x4a,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0x24,0x10,0xa2,0x00,0x1f,0x00,0x40,0x14,0xc2,0x15,0x04,0x00, +0x01,0x00,0x42,0x30,0x0b,0x00,0x40,0x10,0x02,0x80,0x04,0x3c,0x02,0x80,0x03,0x3c, +0x3c,0xaf,0x63,0x24,0x21,0x18,0xc3,0x00,0x02,0x80,0x04,0x3c,0xb3,0x44,0x85,0x90, +0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x24,0x10,0x45,0x00,0x3b,0x00,0x40,0x14, +0x02,0x80,0x04,0x3c,0xb2,0x44,0x82,0x90,0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00, +0xb2,0x44,0x82,0xa0,0xb2,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x07,0x00,0x42,0x30, +0xe4,0xff,0x40,0x14,0x02,0x80,0x02,0x3c,0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c, +0x99,0x44,0x64,0x90,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30, +0xf9,0x1f,0x00,0x08,0x18,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,0xb2,0x44,0x82,0x90, +0xfd,0xff,0x03,0x24,0x14,0x00,0xbf,0x8f,0x24,0x10,0x43,0x00,0x02,0x80,0x03,0x3c, +0xb2,0x44,0x82,0xa0,0xb6,0x44,0x60,0xa0,0x42,0xb0,0x04,0x3c,0x00,0x00,0x82,0x90, +0x10,0x00,0xb0,0x8f,0xef,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x03,0x00,0x85,0x34, +0x40,0x00,0x03,0x24,0x18,0x00,0xbd,0x27,0x00,0x00,0x82,0xa0,0x00,0x00,0xa3,0xa0, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x42,0xb0,0x07,0x3c,0x00,0x00,0xe3,0x90, +0xef,0xff,0x02,0x24,0x03,0x00,0xf0,0x34,0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24, +0x00,0x00,0xe3,0xa0,0x02,0x00,0x04,0x24,0x00,0x00,0x02,0xa2,0x21,0x28,0x00,0x00, +0x71,0x14,0x00,0x0c,0x00,0x03,0x06,0x24,0x44,0x00,0x02,0x24,0x00,0x00,0x02,0xa2, +0x11,0x21,0x00,0x08,0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x01,0x00,0x04,0x24,0x1c,0x46,0x00,0x08,0x18,0x00,0xbd,0x27,0xb2,0x44,0x82,0x90, +0x27,0x21,0x00,0x08,0xfb,0xff,0x03,0x24,0x82,0x26,0x05,0x00,0xe8,0xff,0xbd,0x27, +0x00,0xc0,0x02,0x3c,0x01,0x00,0x84,0x30,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf, +0x0c,0x00,0x80,0x10,0x24,0x10,0xa2,0x00,0x42,0xb0,0x07,0x3c,0x03,0x00,0xf0,0x34, +0x02,0x00,0x04,0x24,0x21,0x28,0x00,0x00,0x31,0x00,0x40,0x14,0x00,0x03,0x06,0x24, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x04,0x24,0x1c,0x46,0x00,0x08, +0x18,0x00,0xbd,0x27,0x42,0xb0,0x04,0x3c,0x02,0x80,0x06,0x3c,0x0f,0x00,0x40,0x14, +0x03,0x00,0x87,0x34,0x02,0x80,0x06,0x3c,0xb2,0x44,0xc3,0x90,0xfe,0xff,0x02,0x24, +0x24,0x18,0x62,0x00,0xb2,0x44,0xc3,0xa0,0xb2,0x44,0xc2,0x90,0x00,0x00,0x00,0x00, +0x07,0x00,0x42,0x30,0x16,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xb2,0x44,0xc3,0x90, +0xfd,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0x02,0x80,0x02,0x3c,0xb2,0x44,0xc3,0xa0, +0xb6,0x44,0x40,0xa0,0x00,0x00,0x83,0x90,0xef,0xff,0x02,0x24,0x24,0x18,0x62,0x00, +0x40,0x00,0x02,0x24,0x00,0x00,0x83,0xa0,0x00,0x00,0xe2,0xa0,0xb2,0x44,0xc2,0x90, +0x00,0x00,0x00,0x00,0x07,0x00,0x42,0x30,0xec,0xff,0x40,0x14,0x02,0x80,0x02,0x3c, +0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x08,0x18,0x00,0xbd,0x27, +0x00,0x00,0xe3,0x90,0xef,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24, +0x00,0x00,0xe3,0xa0,0x00,0x00,0x02,0xa2,0x71,0x14,0x00,0x0c,0x00,0x00,0x00,0x00, +0x44,0x00,0x02,0x24,0x00,0x00,0x02,0xa2,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0xff,0x00,0xa5,0x30, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x02,0x80,0x10,0x3c, +0x03,0x00,0xa0,0x14,0xff,0x00,0x91,0x30,0x19,0x00,0x20,0x12,0x02,0x80,0x02,0x3c, +0xb2,0x44,0x03,0x92,0xfb,0xff,0x02,0x24,0x01,0x00,0x04,0x24,0x24,0x18,0x62,0x00, +0xb2,0x44,0x03,0xa2,0x2e,0x00,0xa0,0x14,0x01,0x00,0x02,0x24,0xb2,0x44,0x02,0x92, +0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0xb2,0x44,0x02,0xa2,0x02,0x00,0x04,0x24, +0x21,0x28,0x00,0x00,0x13,0x00,0x20,0x16,0x00,0x03,0x06,0x24,0xb2,0x44,0x02,0x92, +0xfd,0xff,0x03,0x24,0x18,0x00,0xbf,0x8f,0x24,0x10,0x43,0x00,0xb2,0x44,0x02,0xa2, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x08, +0x20,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x01,0x00,0x07,0x24,0xb0,0x44,0x47,0xa0, +0xb2,0x44,0x03,0x92,0x00,0x00,0x00,0x00,0x02,0x00,0x63,0x34,0xb2,0x44,0x03,0xa2, +0x71,0x14,0x00,0x0c,0x00,0x00,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x42,0xb0,0x02,0x3c,0x44,0x00,0x03,0x24,0x03,0x00,0x42,0x34, +0x20,0x00,0xbd,0x27,0x00,0x00,0x43,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x02,0x80,0x03,0x3c,0xb0,0x44,0x62,0xa0,0xb2,0x44,0x05,0x92,0x00,0x00,0x00,0x00, +0x01,0x00,0xa5,0x34,0xb2,0x44,0x05,0xa2,0x1c,0x46,0x00,0x0c,0x00,0x00,0x00,0x00, +0xc4,0x21,0x00,0x08,0x02,0x00,0x04,0x24,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c, +0xe8,0xff,0xbd,0x27,0xd8,0x87,0x42,0x24,0x18,0x03,0x63,0x34,0x10,0x00,0xb0,0xaf, +0x00,0x00,0x62,0xac,0x02,0x80,0x10,0x3c,0x99,0x44,0x02,0x92,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x03,0x00,0x42,0x28,0x05,0x00,0x40,0x10,0x14,0x00,0xbf,0xaf, +0x25,0x1f,0x00,0x0c,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x99,0x44,0x04,0x92,0xf9,0x1f,0x00,0x0c,0xff,0x00,0x84,0x30,0x02,0x80,0x04,0x3c, +0x78,0x1b,0x84,0x24,0x18,0x0b,0x83,0x94,0x14,0x0b,0x85,0x94,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x02,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,0x25,0x18,0x65,0x00, +0x08,0x00,0x42,0x34,0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,0x08,0x00,0xe0,0x03, +0x14,0x0b,0x83,0xa4,0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x14,0x00,0xbf,0xaf, +0x02,0x80,0x10,0x3c,0x08,0x14,0x04,0x26,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00, +0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0x1e,0x22,0x00,0x08,0x08,0x14,0x04,0x26, +0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf,0x82,0x5b,0x00,0x0c,0x21,0x38,0x00,0x00, +0x10,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0xff,0xff,0x8d,0x30,0x00,0x60,0x0f,0x40,0x01,0x00,0xe1,0x35,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x02,0x80,0x06,0x3c,0x78,0x1b,0xce,0x24,0x82,0x0b,0xc2,0x91, +0x00,0x00,0x00,0x00,0x1d,0x00,0x40,0x10,0x25,0xb0,0x03,0x3c,0x38,0x02,0x64,0x34, +0x80,0xff,0x02,0x24,0x00,0x00,0x82,0xa0,0x34,0x02,0x6a,0x34,0xd2,0x01,0x65,0x34, +0xd6,0x01,0x66,0x34,0xda,0x01,0x67,0x34,0xde,0x01,0x63,0x34,0x00,0x00,0xa8,0x94, +0x00,0x00,0xc9,0x94,0x00,0x00,0xeb,0x94,0x00,0x00,0x6c,0x94,0x00,0x00,0x44,0x95, +0xb0,0xfe,0xa2,0x25,0xff,0xff,0x4d,0x30,0x80,0x0b,0xc4,0xa5,0x00,0x00,0xa0,0xa4, +0x78,0x0b,0xc8,0xa5,0x00,0x00,0xc0,0xa4,0x7a,0x0b,0xc9,0xa5,0x00,0x00,0xe0,0xa4, +0x7c,0x0b,0xcb,0xa5,0x00,0x00,0x60,0xa4,0x00,0x00,0x4d,0xa5,0x7e,0x0b,0xcc,0xa5, +0x00,0x60,0x8f,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x2a,0xb0,0x02,0x3c, +0x0a,0x00,0x45,0x34,0x63,0x00,0x03,0x24,0xff,0xff,0x04,0x34,0x00,0x00,0xa2,0x90, +0x00,0x00,0x00,0x00,0x0a,0x00,0x40,0x10,0x78,0x1b,0xc2,0x24,0x64,0x00,0x02,0x24, +0xff,0xff,0x42,0x24,0xff,0xff,0x42,0x30,0xfe,0xff,0x40,0x14,0xff,0xff,0x42,0x24, +0xff,0xff,0x62,0x24,0xff,0xff,0x43,0x30,0xf4,0xff,0x64,0x14,0x78,0x1b,0xc2,0x24, +0x80,0x0b,0x48,0x94,0x7e,0x0b,0x47,0x94,0x78,0x0b,0x49,0x94,0x7a,0x0b,0x4a,0x94, +0x7c,0x0b,0x4b,0x94,0x25,0xb0,0x03,0x3c,0x38,0x02,0x6c,0x34,0x34,0x02,0x62,0x34, +0xd2,0x01,0x64,0x34,0xd6,0x01,0x65,0x34,0xda,0x01,0x66,0x34,0xde,0x01,0x63,0x34, +0x00,0x00,0x48,0xa4,0x00,0x00,0x89,0xa4,0x00,0x00,0xaa,0xa4,0x00,0x00,0xcb,0xa4, +0x00,0x00,0x67,0xa4,0x00,0x00,0x80,0xa1,0x00,0x60,0x8f,0x40,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x25,0xb0,0x04,0x3c,0x08,0x00,0x83,0x34,0x00,0x00,0x62,0x94, +0x00,0x00,0x00,0x00,0x00,0x14,0x02,0x00,0x03,0x14,0x02,0x00,0x1a,0x00,0x40,0x04, +0x60,0x02,0x85,0x34,0x00,0x00,0xa3,0x90,0x05,0x00,0x02,0x24,0x00,0x03,0x8b,0x34, +0xff,0x00,0x63,0x30,0x04,0x03,0x8c,0x34,0xbd,0x00,0x8a,0x34,0x03,0x00,0x86,0x34, +0x40,0x00,0x85,0x34,0xfc,0x77,0x09,0x24,0x11,0x00,0x62,0x10,0x23,0x00,0x84,0x34, +0x00,0x00,0xc2,0x90,0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x00,0x00,0xc2,0xa0, +0x22,0x00,0x02,0x24,0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,0x00,0x00,0x82,0xa0, +0xfc,0x37,0x02,0x24,0x00,0x00,0xa9,0xa4,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa9,0xa4, +0x00,0x00,0xa0,0xa4,0x00,0x00,0xa0,0xa4,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,0x00,0x00,0x42,0x91,0x00,0x00,0x00,0x00, +0x08,0x00,0x42,0x34,0x00,0x00,0x42,0xa1,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xd0,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf,0x2c,0x00,0xbf,0xaf,0x24,0x00,0xb3,0xaf, +0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0xff,0xff,0x14,0x24, +0x02,0x80,0x13,0x3c,0x41,0xb0,0x02,0x3c,0x78,0x1b,0x66,0x26,0x04,0x00,0x42,0x34, +0x00,0x00,0x47,0x8c,0x0c,0x0b,0xc5,0x8c,0x02,0x80,0x03,0x3c,0x5e,0x43,0x64,0x90, +0x08,0x0b,0xc8,0x8c,0x02,0x80,0x02,0x3c,0x80,0x43,0x49,0x90,0x25,0xb0,0x0a,0x3c, +0x25,0x88,0xa7,0x00,0xb0,0x03,0x42,0x35,0x00,0x00,0x51,0xac,0x00,0x24,0x04,0x00, +0x00,0x00,0x48,0xac,0x84,0x02,0x43,0x35,0x8c,0x02,0x45,0x35,0x01,0x00,0x02,0x24, +0x00,0x00,0x71,0xac,0x00,0x00,0xa4,0xac,0x0a,0x03,0x22,0x11,0x0c,0x0b,0xd1,0xac, +0x78,0x1b,0x64,0x26,0x08,0x0b,0x82,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x51,0x00, +0x01,0x00,0x42,0x30,0x0e,0x00,0x40,0x10,0x78,0x1b,0x67,0x26,0x25,0xb0,0x0b,0x3c, +0xb0,0x03,0x63,0x35,0x01,0x00,0x06,0x24,0x00,0x00,0x66,0xac,0x04,0x00,0x62,0x35, +0x00,0x00,0x4a,0x8c,0x0c,0x0b,0x83,0x8c,0x40,0x00,0x02,0x3c,0x24,0x10,0x42,0x01, +0x01,0x00,0x63,0x38,0x18,0x01,0x40,0x10,0x0c,0x0b,0x83,0xac,0x78,0x1b,0x67,0x26, +0x08,0x0b,0xe8,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x11,0x01,0x04,0x00,0x42,0x30, +0x18,0x00,0x40,0x10,0x78,0x1b,0x70,0x26,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x64,0x34, +0x04,0x00,0x02,0x24,0x00,0x00,0x82,0xac,0x0c,0x0b,0xe2,0x8c,0xfc,0x00,0x63,0x34, +0xe4,0x0a,0xe5,0x94,0x8c,0x25,0xe4,0x8c,0x00,0x00,0x66,0x8c,0x04,0x00,0x42,0x38, +0x21,0x50,0x85,0x00,0x0a,0x00,0xca,0x10,0x0c,0x0b,0xe2,0xac,0x02,0x80,0x05,0x3c, +0x44,0x44,0xa2,0x8c,0xfb,0xff,0x04,0x24,0x24,0x20,0x04,0x01,0x00,0x10,0x42,0x34, +0x41,0xb0,0x03,0x3c,0x44,0x44,0xa2,0xac,0x00,0x00,0x64,0xac,0x08,0x0b,0xe4,0xac, +0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x24,0x20,0x51,0x00, +0x08,0x00,0x83,0x30,0x06,0x00,0x60,0x10,0x10,0x00,0x82,0x30,0x0c,0x0b,0x02,0x8e, +0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,0x10,0x00,0x82,0x30, +0x06,0x00,0x40,0x10,0x20,0x00,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00, +0x10,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,0x20,0x00,0x82,0x30,0x06,0x00,0x40,0x10, +0x40,0x00,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x38, +0x0c,0x0b,0x02,0xae,0x40,0x00,0x82,0x30,0x06,0x00,0x40,0x10,0x80,0x00,0x82,0x30, +0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae, +0x80,0x00,0x82,0x30,0x06,0x00,0x40,0x10,0x00,0x01,0x82,0x30,0x0c,0x0b,0x02,0x8e, +0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x38,0x0c,0x0b,0x02,0xae,0x00,0x01,0x82,0x30, +0x06,0x00,0x40,0x10,0x00,0x02,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00, +0x00,0x01,0x42,0x38,0x0c,0x0b,0x02,0xae,0x00,0x02,0x82,0x30,0x06,0x00,0x40,0x10, +0x00,0x04,0x82,0x30,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x00,0x02,0x42,0x38, +0x0c,0x0b,0x02,0xae,0x00,0x04,0x82,0x30,0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x00,0x04,0x42,0x38,0x0c,0x0b,0x02,0xae, +0x00,0x08,0x82,0x30,0x7a,0x02,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26, +0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x51,0x00,0x00,0x10,0x42,0x30, +0x50,0x02,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x03,0x8e, +0x00,0x00,0x00,0x00,0x24,0x10,0x71,0x00,0x00,0x20,0x42,0x30,0x42,0x02,0x40,0x14, +0x00,0x00,0x00,0x00,0x24,0x10,0x71,0x00,0x00,0x80,0x42,0x30,0xf6,0x00,0x40,0x14, +0x01,0x00,0x12,0x3c,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00, +0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,0x20,0x01,0x40,0x14, +0x00,0x00,0x00,0x00,0x08,0x0b,0x02,0x8e,0x02,0x00,0x12,0x3c,0x24,0x10,0x51,0x00, +0x24,0x10,0x52,0x00,0x48,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26, +0x08,0x0b,0x02,0x8e,0x04,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00, +0x24,0x10,0x52,0x00,0x71,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26, +0x08,0x0b,0x02,0x8e,0x08,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00, +0x98,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e, +0x10,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00, +0xc1,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e, +0x20,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,0xe8,0x01,0x40,0x14, +0x00,0x00,0x00,0x00,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x40,0x00,0x12,0x3c, +0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,0x9a,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x78,0x1b,0x68,0x26,0x08,0x0b,0x07,0x8d,0x00,0x04,0x05,0x3c, +0x24,0x10,0xf1,0x00,0x24,0x10,0x45,0x00,0x1b,0x00,0x40,0x10,0x78,0x1b,0x66,0x26, +0x2a,0xb0,0x02,0x3c,0x2c,0x00,0x42,0x34,0x00,0x00,0x4a,0x8c,0xff,0x00,0x02,0x24, +0xff,0x00,0x43,0x31,0x58,0x02,0x62,0x10,0x02,0x80,0x06,0x3c,0x44,0x44,0xc4,0x8c, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x00,0x80,0x84,0x34,0x27,0x28,0x05,0x00, +0x00,0x00,0x44,0xac,0x24,0x28,0xe5,0x00,0x41,0xb0,0x03,0x3c,0x02,0x80,0x02,0x3c, +0x00,0x00,0x65,0xac,0x44,0x44,0xc4,0xac,0x08,0x0b,0x05,0xad,0x9a,0x43,0x40,0xa4, +0x78,0x1b,0x62,0x26,0x0c,0x0b,0x43,0x8c,0x00,0x04,0x04,0x3c,0x26,0x18,0x64,0x00, +0x0c,0x0b,0x43,0xac,0x78,0x1b,0x66,0x26,0x08,0x0b,0xc7,0x8c,0x00,0x08,0x04,0x3c, +0x24,0x28,0xf1,0x00,0x24,0x10,0xa4,0x00,0x08,0x00,0x40,0x10,0x80,0x00,0x08,0x3c, +0x0c,0x0b,0xc3,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00, +0x00,0x00,0x44,0xac,0x0c,0x0b,0xc3,0xac,0x80,0x00,0x08,0x3c,0x24,0x10,0xa8,0x00, +0x21,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x0c,0x0b,0xc3,0x8c,0x25,0xb0,0x09,0x3c, +0xb0,0x03,0x2a,0x35,0x2a,0xb0,0x02,0x3c,0x00,0x00,0x43,0xad,0x36,0x00,0x42,0x34, +0x00,0x00,0x43,0x90,0x23,0xb0,0x04,0x3c,0xff,0x1f,0x02,0x3c,0xc0,0x18,0x03,0x00, +0xf0,0x07,0x63,0x30,0xbc,0x25,0xc5,0x8c,0x21,0x18,0x64,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x2a,0x02,0x65,0x10,0xc0,0x25,0xc3,0xac,0x02,0x80,0x05,0x3c, +0x44,0x44,0xa3,0x8c,0x27,0x20,0x08,0x00,0x24,0x20,0xe4,0x00,0x00,0x08,0x63,0x34, +0x41,0xb0,0x02,0x3c,0x00,0x00,0x43,0xad,0x00,0x00,0x44,0xac,0x44,0x44,0xa3,0xac, +0x08,0x0b,0xc4,0xac,0x78,0x1b,0x62,0x26,0x0c,0x0b,0x43,0x8c,0x80,0x00,0x04,0x3c, +0x26,0x18,0x64,0x00,0x0c,0x0b,0x43,0xac,0x78,0x1b,0x66,0x26,0x08,0x0b,0xc3,0x8c, +0x00,0x01,0x04,0x3c,0x24,0x28,0x71,0x00,0x24,0x10,0xa4,0x00,0x06,0x00,0x40,0x10, +0x25,0xb0,0x02,0x3c,0x0c,0x0b,0xc3,0x8c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00, +0x00,0x00,0x44,0xac,0x0c,0x0b,0xc3,0xac,0x00,0x02,0x04,0x3c,0x24,0x10,0xa4,0x00, +0x08,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x0c,0x0b,0xc2,0x8c,0x25,0xb0,0x03,0x3c, +0xb0,0x03,0x63,0x34,0x26,0x10,0x44,0x00,0x0c,0x0b,0xc2,0xac,0x00,0x00,0x64,0xac, +0x02,0x80,0x02,0x3c,0x52,0x43,0x43,0x90,0x01,0x00,0x02,0x24,0x0f,0x00,0x63,0x30, +0xf1,0x01,0x62,0x10,0x00,0x00,0x00,0x00,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,0x20,0xbd,0x02,0x3c,0xec,0x02,0x65,0x35, +0x4d,0x00,0x68,0x35,0xf1,0x02,0x69,0x35,0x08,0x00,0x07,0x24,0x78,0x02,0x42,0x34, +0x00,0x00,0x46,0xa4,0x00,0x00,0x00,0xa1,0x00,0x00,0x27,0xa1,0x00,0x00,0xa0,0xac, +0x00,0x00,0xa2,0x8c,0xff,0x00,0x03,0x3c,0x80,0x00,0x04,0x3c,0xff,0x00,0x4a,0x30, +0x25,0x50,0x43,0x01,0x24,0x20,0x44,0x01,0xf2,0x02,0x66,0x35,0x0a,0x00,0x6a,0x35, +0x80,0xff,0x02,0x24,0x00,0x00,0x00,0xa1,0x00,0x00,0x27,0xa1,0x00,0x00,0xa3,0xac, +0x00,0x00,0xa3,0xac,0x00,0x00,0xc0,0xa0,0x00,0x00,0x42,0xa1,0x04,0x00,0x80,0x10, +0x02,0x00,0x62,0x35,0x84,0xff,0x02,0x24,0x00,0x00,0x42,0xa1,0x02,0x00,0x62,0x35, +0x00,0x00,0x43,0x94,0xff,0xbf,0x04,0x24,0x24,0x18,0x64,0x00,0x00,0x00,0x43,0xa4, +0xd8,0x22,0x00,0x08,0x78,0x1b,0x67,0x26,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00, +0xc0,0x00,0x00,0x0c,0x07,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30, +0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x20,0x25,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0xb4,0x24,0x03,0xae,0x06,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x70,0x24,0x0a,0xa2, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c, +0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x60,0x00,0x02,0x3c, +0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,0x00,0x04,0x63,0x34,0x02,0x00,0x84,0x34, +0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,0x54,0x44,0xe4,0xa0,0x00,0x00,0x45,0xac, +0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00, +0x79,0x23,0x00,0x08,0x0c,0x0b,0x02,0xae,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00, +0xc0,0x00,0x00,0x0c,0x21,0x20,0x00,0x00,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30, +0xff,0x00,0x02,0x24,0x1e,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0xfc,0x24,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0x90,0x24,0x03,0xae,0x03,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x54,0x24,0x0a,0xa2, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x07,0x3c,0x02,0x80,0x08,0x3c, +0x44,0x44,0xe5,0x8c,0x54,0x44,0x06,0x91,0x08,0x0b,0x04,0x8e,0x01,0x00,0x09,0x3c, +0x00,0x80,0x22,0x35,0x27,0x10,0x02,0x00,0x80,0xff,0x03,0x24,0x24,0x20,0x82,0x00, +0x25,0x30,0xc3,0x00,0x80,0x00,0xa5,0x34,0x41,0xb0,0x02,0x3c,0x44,0x44,0xe5,0xac, +0x54,0x44,0x06,0xa1,0x27,0xa0,0x09,0x00,0x00,0x00,0x44,0xac,0x08,0x0b,0x04,0xae, +0x0c,0x0b,0x02,0x8e,0x01,0x00,0x12,0x3c,0x00,0x80,0x42,0x38,0x0c,0x0b,0x02,0xae, +0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x51,0x00, +0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00,0xe2,0xfe,0x40,0x10,0x00,0x00,0x00,0x00, +0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x01,0x00,0x04,0x24, +0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10, +0xff,0x00,0x43,0x31,0xfc,0x24,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00, +0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x90,0x24,0x03,0xae,0x03,0x00,0x04,0x24, +0x40,0x00,0x07,0x24,0x58,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c,0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90, +0x08,0x0b,0x05,0x8e,0x00,0x80,0x42,0x36,0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00, +0x80,0x00,0x63,0x34,0x40,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac, +0x54,0x44,0xe4,0xa0,0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e, +0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26, +0x08,0x0b,0x02,0x8e,0x02,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00, +0xbb,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00, +0xc0,0x00,0x00,0x0c,0x02,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30, +0xff,0x00,0x02,0x24,0x1d,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x08,0x25,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0x9c,0x24,0x03,0xae,0x04,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x5c,0x24,0x0a,0xa2, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x44,0x44,0xc3,0x8c, +0x02,0x80,0x07,0x3c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x06,0x00,0x02,0x3c, +0x27,0x10,0x02,0x00,0x00,0x01,0x63,0x34,0x24,0x28,0xa2,0x00,0x44,0x44,0xc3,0xac, +0x20,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,0x04,0x00,0x03,0x3c,0x54,0x44,0xe4,0xa0, +0x26,0xa0,0x83,0x02,0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e, +0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26, +0x08,0x0b,0x02,0x8e,0x04,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00, +0x24,0x10,0x52,0x00,0x92,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c, +0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x03,0x00,0x04,0x24,0x21,0x50,0x40,0x00, +0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0xff,0x00,0x43,0x31, +0x08,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x21,0x30,0x60,0x00,0x9c,0x24,0x03,0xae,0x04,0x00,0x04,0x24,0x40,0x00,0x07,0x24, +0x60,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c, +0x02,0x80,0x07,0x3c,0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e, +0x06,0x00,0x02,0x3c,0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,0x00,0x01,0x63,0x34, +0x10,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,0x54,0x44,0xe4,0xa0, +0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00, +0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e, +0x08,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,0x6b,0xfe,0x40,0x10, +0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c, +0x04,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24, +0x1d,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x14,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c, +0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0xa8,0x24,0x03,0xae, +0x05,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x64,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x44,0x44,0xc3,0x8c,0x02,0x80,0x07,0x3c, +0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x18,0x00,0x02,0x3c,0x27,0x10,0x02,0x00, +0x00,0x02,0x63,0x34,0x24,0x28,0xa2,0x00,0x44,0x44,0xc3,0xac,0x08,0x00,0x84,0x34, +0x41,0xb0,0x02,0x3c,0x10,0x00,0x03,0x3c,0x54,0x44,0xe4,0xa0,0x26,0xa0,0x83,0x02, +0x00,0x00,0x45,0xac,0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00, +0x26,0x10,0x52,0x00,0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e, +0x10,0x00,0x12,0x3c,0x24,0x10,0x51,0x00,0x24,0x10,0x54,0x00,0x24,0x10,0x52,0x00, +0x42,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00, +0xc0,0x00,0x00,0x0c,0x05,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30, +0xff,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x14,0x25,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0xa8,0x24,0x03,0xae,0x05,0x00,0x04,0x24,0x40,0x00,0x07,0x24,0x68,0x24,0x0a,0xa2, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c, +0x44,0x44,0xc3,0x8c,0x54,0x44,0xe4,0x90,0x08,0x0b,0x05,0x8e,0x18,0x00,0x02,0x3c, +0x27,0x10,0x02,0x00,0x24,0x28,0xa2,0x00,0x00,0x02,0x63,0x34,0x01,0x00,0x84,0x34, +0x41,0xb0,0x02,0x3c,0x44,0x44,0xc3,0xac,0x54,0x44,0xe4,0xa0,0x00,0x00,0x45,0xac, +0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00, +0x0c,0x0b,0x02,0xae,0x78,0x1b,0x70,0x26,0x08,0x0b,0x02,0x8e,0x20,0x00,0x12,0x3c, +0x24,0x10,0x51,0x00,0x24,0x10,0x52,0x00,0x1b,0xfe,0x40,0x10,0x00,0x00,0x00,0x00, +0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x06,0x00,0x04,0x24, +0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24,0x1d,0x00,0x62,0x10, +0xff,0x00,0x43,0x31,0x20,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00, +0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0xb4,0x24,0x03,0xae,0x06,0x00,0x04,0x24, +0x40,0x00,0x07,0x24,0x6c,0x24,0x0a,0xa2,0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x02,0x80,0x06,0x3c,0x44,0x44,0xc3,0x8c,0x02,0x80,0x07,0x3c,0x54,0x44,0xe4,0x90, +0x08,0x0b,0x05,0x8e,0x60,0x00,0x02,0x3c,0x27,0x10,0x02,0x00,0x00,0x04,0x63,0x34, +0x24,0x28,0xa2,0x00,0x44,0x44,0xc3,0xac,0x04,0x00,0x84,0x34,0x41,0xb0,0x02,0x3c, +0x40,0x00,0x03,0x3c,0x54,0x44,0xe4,0xa0,0x26,0xa0,0x83,0x02,0x00,0x00,0x45,0xac, +0x08,0x0b,0x05,0xae,0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x26,0x10,0x52,0x00, +0x71,0x23,0x00,0x08,0x0c,0x0b,0x02,0xae,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00, +0x0c,0x0b,0x02,0x8e,0x08,0x0b,0x03,0x8e,0x00,0x20,0x42,0x38,0x41,0x23,0x00,0x08, +0x0c,0x0b,0x02,0xae,0x86,0x20,0x00,0x0c,0x00,0x00,0x00,0x00,0xf4,0x00,0x00,0x0c, +0x01,0x00,0x04,0x24,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30,0xff,0x00,0x02,0x24, +0x16,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x44,0x25,0x05,0x8e,0x20,0x10,0x02,0x3c, +0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0xd8,0x24,0x03,0xae,0x21,0x30,0x60,0x00, +0x01,0x00,0x04,0x24,0x78,0x24,0x0a,0xa2,0x40,0x00,0x07,0x24,0xc3,0x01,0x00,0x0c, +0x10,0x00,0xa0,0xaf,0x02,0x80,0x05,0x3c,0x44,0x44,0xa3,0x8c,0x08,0x0b,0x04,0x8e, +0xff,0xc7,0x02,0x24,0x10,0x00,0x63,0x34,0x24,0x20,0x82,0x00,0x41,0xb0,0x02,0x3c, +0x44,0x44,0xa3,0xac,0x00,0x00,0x44,0xac,0x08,0x0b,0x04,0xae,0x0c,0x0b,0x02,0x8e, +0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,0x3a,0x23,0x00,0x08,0x0c,0x0b,0x02,0xae, +0xf4,0x00,0x00,0x0c,0x21,0x20,0x00,0x00,0x21,0x50,0x40,0x00,0xff,0x00,0x43,0x30, +0xff,0x00,0x02,0x24,0x16,0x00,0x62,0x10,0xff,0x00,0x43,0x31,0x2c,0x25,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0xc0,0x24,0x03,0xae, +0x21,0x30,0x60,0x00,0x21,0x20,0x00,0x00,0x74,0x24,0x0a,0xa2,0x40,0x00,0x07,0x24, +0xc3,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x05,0x3c,0x44,0x44,0xa3,0x8c, +0x08,0x0b,0x04,0x8e,0xff,0xc7,0x02,0x24,0x04,0x00,0x63,0x34,0x24,0x20,0x82,0x00, +0x41,0xb0,0x02,0x3c,0x44,0x44,0xa3,0xac,0x00,0x00,0x44,0xac,0x08,0x0b,0x04,0xae, +0x0c,0x0b,0x02,0x8e,0x00,0x00,0x00,0x00,0x00,0x08,0x42,0x38,0x33,0x23,0x00,0x08, +0x0c,0x0b,0x02,0xae,0x56,0x01,0x42,0x35,0x00,0x00,0x43,0x94,0x00,0x00,0x00,0x00, +0xf3,0xfc,0x60,0x10,0x00,0x00,0x00,0x00,0xde,0x4f,0x00,0x0c,0x07,0x00,0x04,0x24, +0xc5,0x22,0x00,0x08,0x78,0x1b,0x64,0x26,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x79,0x22,0x00,0x08,0x30,0x00,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x01,0x00,0x03,0x24, +0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x95,0x23,0x00,0x08,0x78,0x1b,0x62,0x26, +0xd0,0x03,0x23,0x35,0x80,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xc6,0x23,0x00,0x08, +0x78,0x1b,0x62,0x26,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf, +0x10,0x00,0xb0,0xaf,0x25,0xb0,0x0c,0x3c,0x01,0x80,0x02,0x3c,0x18,0x03,0x83,0x35, +0xa4,0x97,0x42,0x24,0x02,0x80,0x11,0x3c,0x41,0xb0,0x0b,0x3c,0x00,0x00,0x62,0xac, +0x78,0x1b,0x2a,0x26,0x0a,0x00,0x62,0x35,0x00,0x00,0x44,0x94,0x16,0x0b,0x43,0x95, +0x14,0x0b,0x49,0x95,0x25,0x30,0x64,0x00,0xff,0xff,0xd0,0x30,0x24,0x10,0x09,0x02, +0x02,0x00,0x42,0x30,0x9e,0x00,0x40,0x10,0xc0,0x03,0x83,0x35,0x02,0x00,0x02,0x24, +0x00,0x00,0x62,0xac,0x02,0x80,0x08,0x3c,0x44,0x44,0x04,0x8d,0xdc,0x02,0x82,0x35, +0x00,0x00,0x47,0x90,0xfd,0xff,0x03,0x24,0x00,0x80,0x02,0x3c,0x24,0x18,0x23,0x01, +0x25,0x20,0x82,0x00,0x02,0x00,0xc6,0x38,0x08,0x00,0x65,0x35,0x02,0x80,0x02,0x3c, +0x99,0x44,0x47,0xa0,0x44,0x44,0x04,0xad,0x16,0x0b,0x46,0xa5,0x21,0x48,0x60,0x00, +0x00,0x00,0xa3,0xa4,0x14,0x0b,0x43,0xa5,0x24,0x38,0x09,0x02,0x04,0x00,0xe2,0x30, +0x0a,0x00,0x40,0x10,0x08,0x00,0xe2,0x30,0x16,0x0b,0x43,0x95,0x0c,0x00,0x64,0x35, +0xc0,0x03,0x85,0x35,0x04,0x00,0x63,0x38,0x04,0x00,0x02,0x24,0x00,0x00,0x86,0x8c, +0x00,0x00,0xa2,0xac,0x16,0x0b,0x43,0xa5,0x08,0x00,0xe2,0x30,0x08,0x00,0x40,0x10, +0x10,0x00,0xe2,0x30,0x16,0x0b,0x42,0x95,0xc0,0x03,0x84,0x35,0x08,0x00,0x03,0x24, +0x08,0x00,0x42,0x38,0x00,0x00,0x83,0xac,0x16,0x0b,0x42,0xa5,0x10,0x00,0xe2,0x30, +0x3a,0x00,0x40,0x10,0x78,0x1b,0x29,0x26,0xc0,0x03,0x84,0x35,0x10,0x00,0x02,0x24, +0x00,0x00,0x82,0xac,0x16,0x0b,0x43,0x95,0x02,0x80,0x05,0x3c,0xba,0x44,0xa4,0x90, +0x10,0x00,0x63,0x38,0x02,0x80,0x02,0x3c,0x16,0x0b,0x43,0xa5,0x7c,0x44,0x47,0x24, +0x69,0x00,0x80,0x14,0x21,0x30,0x00,0x00,0xe8,0x0a,0x42,0x91,0x00,0x00,0x00,0x00, +0x01,0x00,0x42,0x30,0x69,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c, +0x98,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x64,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x98,0x44,0x82,0x90,0x02,0x00,0x03,0x24,0xff,0x00,0x42,0x30,0x66,0x00,0x43,0x10, +0x00,0x00,0x00,0x00,0x98,0x44,0x82,0x90,0x03,0x00,0x03,0x24,0xff,0x00,0x42,0x30, +0x61,0x00,0x43,0x10,0x02,0x80,0x05,0x3c,0xb2,0x44,0xa2,0x90,0x02,0x80,0x03,0x3c, +0x02,0x00,0x04,0x24,0x10,0x00,0x42,0x34,0xb2,0x44,0xa2,0xa0,0x9d,0x44,0x66,0x90, +0x21,0x28,0x00,0x00,0x0c,0x00,0xe0,0xac,0xff,0x00,0xc6,0x30,0x71,0x14,0x00,0x0c, +0x00,0x32,0x06,0x00,0x42,0xb0,0x02,0x3c,0x03,0x00,0x42,0x34,0x44,0x00,0x04,0x24, +0x00,0x00,0x44,0xa0,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x04,0x00,0x40,0x10,0x78,0x1b,0x29,0x26, +0xf9,0x1f,0x00,0x0c,0x04,0x00,0x04,0x24,0x78,0x1b,0x29,0x26,0x14,0x0b,0x27,0x95, +0x00,0x00,0x00,0x00,0x24,0x28,0x07,0x02,0x20,0x00,0xa2,0x30,0x09,0x00,0x40,0x10, +0x80,0x00,0xa2,0x30,0x16,0x0b,0x22,0x95,0x25,0xb0,0x03,0x3c,0x20,0x00,0x04,0x24, +0x20,0x00,0x42,0x38,0xc0,0x03,0x63,0x34,0x00,0x00,0x64,0xac,0x16,0x0b,0x22,0xa5, +0x80,0x00,0xa2,0x30,0x17,0x00,0x40,0x10,0x24,0x10,0x07,0x02,0x02,0x80,0x08,0x3c, +0x44,0x44,0x04,0x8d,0x16,0x0b,0x26,0x95,0x25,0xb0,0x03,0x3c,0x10,0x00,0x02,0x3c, +0x7f,0xff,0x05,0x24,0x24,0x28,0xe5,0x00,0x25,0x20,0x82,0x00,0xb0,0x03,0x67,0x34, +0x80,0x00,0x02,0x24,0xc0,0x03,0x63,0x34,0x00,0x00,0x62,0xac,0x41,0xb0,0x02,0x3c, +0x80,0x00,0xc6,0x38,0x08,0x00,0x42,0x34,0x00,0x00,0xe4,0xac,0x16,0x0b,0x26,0xa5, +0x44,0x44,0x04,0xad,0x21,0x38,0xa0,0x00,0x00,0x00,0x45,0xa4,0x14,0x0b,0x25,0xa5, +0x24,0x10,0x07,0x02,0x00,0x30,0x42,0x30,0x07,0x00,0x40,0x10,0x02,0x80,0x02,0x3c, +0x16,0x0b,0x22,0x95,0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,0x00,0x20,0x42,0x34, +0x16,0x0b,0x22,0xa5,0x02,0x80,0x02,0x3c,0x52,0x43,0x43,0x90,0x01,0x00,0x02,0x24, +0x0f,0x00,0x63,0x30,0x0f,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x12,0x26,0x00,0x08,0x16,0x0b,0x46,0xa5,0xe8,0x0a,0x42,0x91,0xba,0x44,0xa0,0xa0, +0x01,0x00,0x42,0x30,0x99,0xff,0x40,0x14,0x01,0x00,0x06,0x24,0x62,0x26,0x00,0x08, +0x0c,0x00,0xe0,0xac,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x79,0x22,0x00,0x08,0x20,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,0xb5,0x44,0x82,0x90, +0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x24,0xb5,0x44,0x82,0xa0,0xb5,0x44,0x83,0x90, +0x00,0x00,0x00,0x00,0x07,0x00,0x60,0x10,0x02,0x80,0x02,0x3c,0x9e,0x44,0x43,0x90, +0x00,0x00,0x00,0x00,0x03,0x00,0x60,0x14,0x00,0x00,0x00,0x00,0x12,0x00,0xc0,0x10, +0x02,0x80,0x02,0x3c,0xb5,0x44,0x82,0x90,0x00,0x00,0x00,0x00,0x05,0x00,0x40,0x14, +0x0c,0x00,0xe0,0xac,0x02,0x80,0x02,0x3c,0xb4,0x44,0x43,0x90,0x00,0x00,0x00,0x00, +0xb5,0x44,0x83,0xa0,0x02,0x80,0x05,0x3c,0xb2,0x44,0xa2,0x90,0x02,0x80,0x03,0x3c, +0x02,0x00,0x04,0x24,0x10,0x00,0x42,0x34,0xb2,0x44,0xa2,0xa0,0x9d,0x44,0x66,0x90, +0x52,0x26,0x00,0x08,0x21,0x28,0x00,0x00,0x02,0x80,0x04,0x3c,0xac,0x44,0x83,0x8c, +0xa4,0x44,0x45,0x8c,0xe4,0x02,0x86,0x35,0x21,0x18,0x65,0x00,0xac,0x44,0x83,0xac, +0xac,0x44,0x82,0x8c,0x02,0x80,0x03,0x3c,0x00,0x00,0xc2,0xac,0xa0,0x44,0x62,0x94, +0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x30,0x40,0x10,0x02,0x00,0xf6,0xff,0x42,0x24, +0x62,0x26,0x00,0x08,0x0c,0x00,0xe2,0xac,0xf8,0xff,0xbd,0x27,0x04,0x00,0xb1,0xaf, +0x00,0x00,0xb0,0xaf,0x00,0x40,0x09,0x40,0x00,0x68,0x0a,0x40,0x00,0x70,0x02,0x40, +0x00,0x60,0x0b,0x40,0x25,0xb0,0x05,0x3c,0x18,0x03,0xa7,0x34,0x00,0x00,0xe6,0x8c, +0x01,0x80,0x02,0x3c,0x1c,0x03,0xa3,0x34,0x68,0x9b,0x42,0x24,0x00,0x00,0x66,0xac, +0x00,0x00,0xe2,0xac,0x80,0x00,0x83,0x8c,0x7c,0x02,0xa2,0x34,0x80,0x02,0xa6,0x34, +0x84,0x02,0xa7,0x34,0x88,0x02,0xa8,0x34,0x00,0x00,0x43,0xac,0x00,0x00,0xc9,0xac, +0x00,0x00,0xea,0xac,0x00,0x00,0x0b,0xad,0x74,0x00,0x83,0x8c,0x8c,0x02,0xa2,0x34, +0x90,0x02,0xa7,0x34,0x00,0x00,0x43,0xac,0x08,0x00,0x86,0x8c,0x94,0x02,0xa8,0x34, +0x98,0x02,0xa9,0x34,0x00,0x00,0xe6,0xac,0x0c,0x00,0x82,0x8c,0x9c,0x02,0xa6,0x34, +0xa0,0x02,0xa7,0x34,0x00,0x00,0x02,0xad,0x10,0x00,0x83,0x8c,0xa4,0x02,0xa8,0x34, +0xa8,0x02,0xaa,0x34,0x00,0x00,0x23,0xad,0x14,0x00,0x82,0x8c,0xac,0x02,0xa9,0x34, +0xb0,0x02,0xab,0x34,0x00,0x00,0xc2,0xac,0x18,0x00,0x83,0x8c,0xb4,0x02,0xa6,0x34, +0xb8,0x02,0xac,0x34,0x00,0x00,0xe3,0xac,0x1c,0x00,0x82,0x8c,0xbc,0x02,0xa7,0x34, +0xc0,0x02,0xad,0x34,0x00,0x00,0x02,0xad,0x20,0x00,0x83,0x8c,0xc4,0x02,0xa8,0x34, +0xc8,0x02,0xae,0x34,0x00,0x00,0x43,0xad,0x24,0x00,0x82,0x8c,0xcc,0x02,0xaa,0x34, +0xd0,0x02,0xaf,0x34,0x00,0x00,0x22,0xad,0x28,0x00,0x83,0x8c,0xd4,0x02,0xa9,0x34, +0xd8,0x02,0xb0,0x34,0x00,0x00,0x63,0xad,0x2c,0x00,0x82,0x8c,0x70,0x02,0xab,0x34, +0x74,0x02,0xb1,0x34,0x00,0x00,0xc2,0xac,0x30,0x00,0x83,0x8c,0x78,0x02,0xa5,0x34, +0x00,0x00,0x83,0xad,0x34,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xe2,0xac, +0x38,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xad,0x3c,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xad,0x40,0x00,0x83,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0xc3,0xad,0x44,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0xad, +0x48,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xe3,0xad,0x4c,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0x22,0xad,0x50,0x00,0x83,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x03,0xae,0x54,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xad, +0x58,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0xae,0x5c,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac,0x42,0x27,0x00,0x08,0x00,0x00,0x00,0x00, +0x01,0x80,0x1b,0x3c,0x10,0x9d,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27, +0x00,0x00,0x5b,0xaf,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00, +0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf,0x0c,0x00,0x63,0xaf, +0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf,0x1c,0x00,0x67,0xaf, +0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf,0x2c,0x00,0x6b,0xaf, +0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf,0x3c,0x00,0x6f,0xaf, +0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0x70,0xaf, +0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf,0x50,0x00,0x74,0xaf, +0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf,0x60,0x00,0x78,0xaf, +0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf,0x70,0x00,0x7e,0xaf, +0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf,0x80,0x00,0x6a,0xaf, +0x00,0x68,0x1a,0x40,0x7f,0x00,0x5b,0x33,0x30,0x00,0x60,0x13,0x00,0x00,0x00,0x00, +0x25,0xb0,0x1b,0x3c,0x30,0x03,0x7b,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0xaf, +0x00,0x00,0x00,0x00,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00, +0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf,0x0c,0x00,0x63,0xaf, +0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf,0x1c,0x00,0x67,0xaf, +0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf,0x2c,0x00,0x6b,0xaf, +0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf,0x3c,0x00,0x6f,0xaf, +0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0x70,0xaf, +0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf,0x50,0x00,0x74,0xaf, +0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf,0x60,0x00,0x78,0xaf, +0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf,0x70,0x00,0x7e,0xaf, +0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf,0x80,0x00,0x6a,0xaf, +0xda,0x26,0x00,0x08,0x21,0x20,0x60,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c, +0x20,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0xad,0x00,0x04,0x5b,0x33, +0x0a,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x01,0x80,0x08,0x3c,0x90,0x8a,0x08,0x25, +0x00,0x00,0x00,0x00,0x25,0xb0,0x1b,0x3c,0x24,0x03,0x7b,0x37,0x00,0x00,0x00,0x00, +0x00,0x00,0x68,0xaf,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x5b,0x33, +0x25,0xb0,0x08,0x3c,0x28,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0xad, +0x06,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x01,0x80,0x08,0x3c,0xa4,0x97,0x08,0x25, +0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00,0x02,0x80,0x1a,0x3c, +0x44,0x44,0x5a,0x27,0x04,0x00,0x5b,0x97,0x25,0xb0,0x08,0x3c,0x30,0x03,0x08,0x35, +0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0xad,0x18,0x00,0x60,0x13,0x00,0x00,0x00,0x00, +0x08,0xe8,0x9b,0x27,0x00,0x00,0x00,0x00,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b, +0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b, +0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b, +0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b, +0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b, +0x80,0x00,0x7b,0x8f,0x2b,0x28,0x00,0x08,0x00,0x00,0x00,0x00,0x21,0xd8,0xa0,0x03, +0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,0x08,0x00,0x5b,0xaf, +0xfc,0xeb,0x9d,0x27,0x00,0x00,0x4a,0x8f,0x00,0x00,0x00,0x00,0x21,0x00,0x40,0x11, +0x00,0x00,0x00,0x00,0x02,0x80,0x08,0x3c,0xa4,0x43,0x08,0x25,0x21,0x48,0x00,0x00, +0x21,0x58,0x00,0x00,0x01,0x00,0x6b,0x25,0x1a,0x00,0x40,0x11,0x24,0x70,0x4b,0x01, +0x14,0x00,0xc0,0x11,0x01,0x00,0x04,0x24,0x00,0x00,0x00,0x00,0x04,0x00,0x44,0xa3, +0x26,0x50,0x4b,0x01,0x00,0x00,0x4a,0xaf,0x80,0x80,0x09,0x00,0x21,0x80,0x08,0x02, +0x00,0x00,0x10,0x8e,0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x02,0x00,0x00,0x00,0x00, +0x01,0x80,0x1b,0x3c,0xd8,0x9f,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27, +0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0x44,0x44,0x5a,0x27,0xe1,0xff,0x00,0x10, +0x00,0x00,0x00,0x00,0x01,0x00,0x29,0x25,0x40,0x58,0x0b,0x00,0xee,0x27,0x00,0x08, +0x00,0x00,0x00,0x00,0x02,0x80,0x1b,0x3c,0x44,0x44,0x7b,0x27,0x21,0x60,0x00,0x00, +0x04,0x00,0x6c,0xa7,0x08,0x00,0x7a,0x8f,0x00,0x00,0x00,0x00,0xf8,0xff,0x5a,0x27, +0x00,0x00,0x5a,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x5a,0x27,0x84,0x00,0x44,0x8f, +0x00,0x00,0x00,0x00,0xf9,0xff,0x80,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x41,0x8f, +0xfc,0x03,0x50,0x7b,0x7c,0x00,0x42,0x7b,0xbc,0x00,0x44,0x7b,0xfc,0x00,0x46,0x7b, +0x3c,0x01,0x48,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x4a,0x7b, +0xbc,0x01,0x4c,0x7b,0xfc,0x01,0x4e,0x7b,0x3c,0x02,0x50,0x7b,0x7c,0x02,0x52,0x7b, +0xbc,0x02,0x54,0x7b,0xfc,0x02,0x56,0x7b,0x3c,0x03,0x58,0x7b,0x7c,0x03,0x5c,0x7b, +0xbc,0x03,0x5e,0x7b,0x80,0x00,0x5b,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x03, +0x10,0x00,0x00,0x42,0x00,0x60,0x05,0x40,0x42,0x28,0x05,0x00,0x40,0x28,0x05,0x00, +0x00,0x60,0x85,0x40,0x04,0x00,0x81,0xac,0x08,0x00,0x82,0xac,0x0c,0x00,0x83,0xac, +0x20,0x00,0x88,0xac,0x24,0x00,0x89,0xac,0x28,0x00,0x8a,0xac,0x2c,0x00,0x8b,0xac, +0x30,0x00,0x8c,0xac,0x34,0x00,0x8d,0xac,0x38,0x00,0x8e,0xac,0x3c,0x00,0x8f,0xac, +0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x40,0x00,0x90,0xac,0x44,0x00,0x91,0xac, +0x48,0x00,0x92,0xac,0x4c,0x00,0x93,0xac,0x50,0x00,0x94,0xac,0x54,0x00,0x95,0xac, +0x58,0x00,0x96,0xac,0x5c,0x00,0x97,0xac,0x60,0x00,0x98,0xac,0x64,0x00,0x99,0xac, +0x68,0x00,0x9c,0xac,0x6c,0x00,0x9d,0xac,0x70,0x00,0x9e,0xac,0x74,0x00,0x9f,0xac, +0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,0x80,0x00,0x9f,0xac,0xf8,0xff,0x84,0x24, +0x00,0x00,0x84,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x84,0x24,0x84,0x00,0x86,0x8c, +0x00,0x00,0x00,0x00,0xf9,0xff,0xc0,0x10,0x00,0x00,0x00,0x00,0x21,0xd8,0x80,0x00, +0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b,0x7c,0x00,0x62,0x7b, +0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b,0x13,0x00,0x00,0x02, +0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b,0xfc,0x01,0x6e,0x7b, +0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b,0xfc,0x02,0x76,0x7b, +0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b,0x80,0x00,0x7b,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40,0x00,0x60,0x05,0x40, +0x42,0x28,0x05,0x00,0x40,0x28,0x05,0x00,0x00,0x60,0x85,0x40,0x04,0x00,0x81,0xac, +0x08,0x00,0x82,0xac,0x0c,0x00,0x83,0xac,0x20,0x00,0x88,0xac,0x24,0x00,0x89,0xac, +0x28,0x00,0x8a,0xac,0x2c,0x00,0x8b,0xac,0x30,0x00,0x8c,0xac,0x34,0x00,0x8d,0xac, +0x38,0x00,0x8e,0xac,0x3c,0x00,0x8f,0xac,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00, +0x40,0x00,0x90,0xac,0x44,0x00,0x91,0xac,0x48,0x00,0x92,0xac,0x4c,0x00,0x93,0xac, +0x50,0x00,0x94,0xac,0x54,0x00,0x94,0xac,0x58,0x00,0x96,0xac,0x5c,0x00,0x96,0xac, +0x60,0x00,0x98,0xac,0x64,0x00,0x99,0xac,0x68,0x00,0x9c,0xac,0x6c,0x00,0x9d,0xac, +0x70,0x00,0x9e,0xac,0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,0x80,0x00,0x9f,0xac, +0x84,0x00,0x80,0xac,0xf8,0xff,0x84,0x24,0x00,0x00,0x84,0x8c,0x00,0x00,0x00,0x00, +0x08,0x00,0x84,0x24,0x84,0x00,0x86,0x8c,0xfa,0xff,0xc0,0x10,0x00,0x00,0x00,0x00, +0x21,0xd8,0x80,0x00,0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b, +0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b, +0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b, +0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b, +0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b, +0x80,0x00,0x7b,0x8f,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xd7,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x1b,0x3c,0x00,0x00,0x7b,0x27, +0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x00,0x00,0x05,0x24, +0x03,0x00,0xa4,0x24,0x00,0xa0,0x80,0x40,0x00,0xa0,0x84,0x40,0x01,0x80,0x04,0x3c, +0x98,0x03,0x84,0x24,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x80,0x1b,0x3c,0x98,0x03,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27, +0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0x00,0x00,0x5a,0x27,0xfc,0x03,0x5d,0x27, +0x02,0x80,0x1c,0x3c,0x00,0x18,0x9c,0x27,0x00,0xf0,0x08,0x3c,0x00,0x0c,0x08,0x35, +0x00,0x60,0x88,0x40,0x02,0x80,0x04,0x3c,0x00,0x00,0x84,0x24,0xff,0x7f,0x05,0x3c, +0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x20,0x84,0x4c,0xff,0xff,0x05,0x34, +0x21,0x28,0xa4,0x00,0x00,0x28,0x85,0x4c,0x02,0x80,0x08,0x3c,0x00,0x00,0x08,0x25, +0x00,0x00,0x00,0xad,0x03,0x80,0x09,0x3c,0x7c,0xc3,0x29,0x25,0x04,0x00,0x08,0x25, +0xfe,0xff,0x09,0x15,0x00,0x00,0x00,0xad,0x00,0x80,0x04,0x3c,0x00,0x00,0x84,0x24, +0xff,0x7f,0x05,0x3c,0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x00,0x84,0x4c, +0xff,0xff,0x06,0x34,0x21,0x30,0xc4,0x00,0x24,0x30,0xc5,0x00,0x00,0x08,0x86,0x4c, +0x00,0xa0,0x04,0x40,0x10,0x00,0x84,0x34,0x00,0xa0,0x84,0x40,0x01,0x80,0x1b,0x3c, +0x44,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf, +0x00,0x00,0x00,0x00,0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x84, +0x20,0x00,0x06,0x24,0x25,0x28,0xa6,0x00,0x00,0x00,0x85,0xa4,0x01,0x80,0x1b,0x3c, +0x74,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf, +0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x8c,0x00,0x00,0x00,0x00, +0x10,0x00,0xa5,0x30,0xfc,0xff,0xa0,0x10,0x00,0x00,0x00,0x00,0xff,0x1f,0x07,0x3c, +0xff,0xff,0xe7,0x34,0x02,0x80,0x05,0x3c,0x50,0x43,0xa5,0x24,0xff,0xff,0xa5,0x30, +0x40,0xb0,0x04,0x3c,0x25,0x28,0xa4,0x00,0x24,0x28,0xa7,0x00,0x21,0x30,0x00,0x00, +0x43,0xb0,0x02,0x3c,0x00,0x80,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x45,0xac, +0x04,0x00,0x46,0xac,0x08,0x00,0x44,0xac,0x7e,0x5e,0x00,0x08,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24, +0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x42,0x24, +0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x21,0x18,0x40,0x00,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0xe0,0xff,0xbd,0x27,0x18,0x00,0xb2,0xaf,0x1c,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x30,0x80,0x00,0x21,0x90,0x00,0x00, +0x00,0x60,0x11,0x40,0x01,0x00,0x21,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x0d,0x00,0x83,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x60,0x14,0x02,0x80,0x02,0x3c, +0x01,0x00,0x03,0x24,0x9c,0x44,0x43,0xa0,0x0c,0x00,0xc2,0x90,0x02,0x80,0x05,0x3c, +0xb1,0x44,0xa2,0xa0,0x00,0x00,0xc4,0x90,0x05,0x00,0x02,0x24,0xff,0x00,0x83,0x30, +0x4b,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x02,0x24,0x3b,0x00,0x62,0x10, +0xff,0x00,0x84,0x30,0x09,0x00,0x82,0x2c,0x2f,0x00,0x40,0x10,0x02,0x80,0x10,0x3c, +0x98,0x44,0x02,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,0x2b,0x00,0x82,0x10, +0x00,0x00,0x00,0x00,0xad,0x1e,0x00,0x0c,0x00,0x00,0x00,0x00,0x98,0x44,0x02,0x92, +0x00,0x00,0x00,0x00,0x3e,0x00,0x40,0x10,0x02,0x80,0x03,0x3c,0x60,0x26,0x62,0x90, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x5a,0x00,0x40,0x10,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x0f,0x00,0x40,0x14, +0x25,0xb0,0x02,0x3c,0xb9,0x44,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xb9,0x44,0x62,0xa0,0x02,0x80,0x03,0x3c,0x9a,0x44,0x62,0x90,0x00,0x00,0x00,0x00, +0x0f,0x00,0x42,0x30,0x04,0x00,0x42,0x28,0x04,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c, +0xf9,0x1f,0x00,0x0c,0x04,0x00,0x04,0x24,0x25,0xb0,0x02,0x3c,0x00,0x01,0x03,0x24, +0x16,0x01,0x42,0x34,0x00,0x00,0x43,0xa4,0x00,0x60,0x91,0x40,0x21,0x10,0x40,0x02, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x04,0x00,0x12,0x24,0x00,0x60,0x91,0x40, +0x21,0x10,0x40,0x02,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x0b,0x00,0xc2,0x90, +0x00,0x00,0x00,0x00,0x03,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x02,0x80,0x03,0x3c, +0x01,0x00,0x02,0x24,0xb4,0x44,0x62,0xa0,0xb4,0x44,0x63,0x90,0x02,0x80,0x02,0x3c, +0xb5,0x44,0x43,0xa0,0x00,0x00,0xc4,0x90,0xb7,0x41,0x00,0x08,0xff,0x00,0x84,0x30, +0xb1,0x44,0xa0,0xa0,0x00,0x00,0xc4,0x90,0xb4,0x41,0x00,0x08,0xff,0x00,0x83,0x30, +0x42,0xb0,0x05,0x3c,0x00,0x00,0xa3,0x90,0xef,0xff,0x02,0x24,0x03,0x00,0xa6,0x34, +0x24,0x18,0x62,0x00,0x40,0x00,0x02,0x24,0x00,0x00,0xa3,0xa0,0x0c,0x00,0x04,0x24, +0x00,0x00,0xc2,0xa0,0x02,0x80,0x03,0x3c,0xf9,0x1f,0x00,0x0c,0x88,0x44,0x60,0xac, +0x02,0x80,0x03,0x3c,0x56,0x43,0x62,0x90,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30, +0x17,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24, +0x82,0x0b,0xa3,0x90,0x25,0xb0,0x02,0x3c,0x16,0x01,0x42,0x34,0x00,0x00,0x40,0xa4, +0xce,0xff,0x60,0x10,0x00,0x00,0x00,0x00,0x98,0x26,0xa4,0x94,0x82,0x0b,0xa0,0xa0, +0x00,0xc0,0x84,0x24,0x2c,0x22,0x00,0x0c,0xff,0xff,0x84,0x30,0xe9,0x41,0x00,0x08, +0x00,0x00,0x00,0x00,0xb9,0x44,0x40,0xa0,0x25,0xb0,0x02,0x3c,0x00,0x01,0x03,0x24, +0x16,0x01,0x42,0x34,0x00,0x00,0x43,0xa4,0xe0,0x41,0x00,0x08,0x00,0x00,0x00,0x00, +0x55,0x1f,0x00,0x0c,0x01,0x00,0x04,0x24,0x15,0x42,0x00,0x08,0x02,0x80,0x02,0x3c, +0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x21,0x80,0x80,0x00,0x00,0x60,0x11,0x40,0x01,0x00,0x21,0x36, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0x00,0x02,0x92,0x02,0x80,0x04,0x3c, +0x25,0xb0,0x05,0x3c,0x02,0x80,0x07,0x3c,0x98,0x26,0x84,0x24,0x50,0x00,0xa5,0x34, +0x06,0x00,0x06,0x24,0x13,0x00,0x40,0x14,0x78,0x1b,0xe3,0x24,0xe8,0x0a,0x62,0x90, +0x78,0x1b,0xf2,0x24,0x02,0x80,0x04,0x3c,0xfe,0x00,0x42,0x30,0xe8,0x0a,0x62,0xa0, +0xe8,0x0a,0x42,0x92,0x18,0x42,0x84,0x24,0x01,0x00,0x42,0x30,0x18,0x00,0x40,0x14, +0x02,0x00,0x05,0x26,0x00,0x60,0x91,0x40,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x46,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x07,0x3c, +0x78,0x1b,0xe3,0x24,0xe8,0x0a,0x62,0x90,0x78,0x1b,0xf2,0x24,0x02,0x80,0x04,0x3c, +0x01,0x00,0x42,0x34,0xe8,0x0a,0x62,0xa0,0xe8,0x0a,0x42,0x92,0x18,0x42,0x84,0x24, +0x02,0x00,0x05,0x26,0x01,0x00,0x42,0x30,0xea,0xff,0x40,0x10,0x06,0x00,0x06,0x24, +0x01,0x00,0x03,0x92,0x02,0x80,0x02,0x3c,0xb3,0x44,0x43,0xa0,0x46,0x46,0x00,0x0c, +0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x96,0x02,0x80,0x03,0x3c,0xa0,0x44,0x64,0xa4, +0xa0,0x44,0x62,0x94,0x02,0x80,0x03,0x3c,0xff,0xff,0x42,0x30,0x80,0x12,0x02,0x00, +0xa4,0x44,0x62,0xac,0x0a,0x00,0x04,0x96,0x14,0x00,0x03,0x24,0x02,0x80,0x02,0x3c, +0xb9,0x44,0x43,0xa0,0x98,0x26,0x44,0xa6,0x00,0x60,0x91,0x40,0x1c,0x00,0xbf,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x25,0xb0,0x02,0x3c,0x21,0x20,0x82,0x00,0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x25,0xb0,0x06,0x3c,0x78,0x1b,0x45,0x24,0x01,0x80,0x02,0x3c,0x18,0x03,0xc3,0x34, +0x54,0x0a,0x42,0x24,0x20,0x08,0xc8,0x34,0x21,0x38,0x80,0x00,0x60,0x08,0x09,0x24, +0x00,0x00,0x62,0xac,0x07,0x00,0x80,0x10,0x70,0x08,0x02,0x24,0x01,0x00,0x02,0x24, +0x28,0x08,0xc3,0x34,0x2a,0x00,0x82,0x10,0x64,0x08,0x06,0x24,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x8d,0xe0,0x08,0x03,0x24,0x8c,0x0b,0xa2,0xac, +0x40,0x08,0x02,0x24,0x90,0x0b,0xa3,0xac,0x9c,0x0b,0xa2,0xac,0x78,0x08,0x03,0x24, +0x0c,0x08,0x02,0x24,0xa0,0x0b,0xa3,0xac,0xa4,0x0b,0xa2,0xac,0x10,0x08,0x03,0x24, +0x20,0x08,0x02,0x24,0xa8,0x0b,0xa3,0xac,0xac,0x0b,0xa2,0xac,0x24,0x08,0x03,0x24, +0x58,0x08,0x02,0x24,0xb0,0x0b,0xa3,0xac,0xb4,0x0b,0xa2,0xac,0x50,0x0c,0x03,0x24, +0x54,0x0c,0x02,0x24,0xb8,0x0b,0xa3,0xac,0xbc,0x0b,0xa2,0xac,0x14,0x0c,0x03,0x24, +0x10,0x0c,0x02,0x24,0xc0,0x0b,0xa3,0xac,0xc4,0x0b,0xa2,0xac,0x80,0x0c,0x03,0x24, +0x84,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xcc,0x0b,0xa2,0xac,0x98,0x0b,0xa9,0xac, +0xc8,0x0b,0xa3,0xac,0x89,0x0b,0xa0,0xa0,0x94,0x0b,0xa9,0xac,0x02,0x00,0x80,0x10, +0xa0,0x08,0x02,0x24,0xb8,0x08,0x02,0x24,0x08,0x00,0xe0,0x03,0xd0,0x0b,0xa2,0xac, +0x70,0x08,0x02,0x24,0x00,0x00,0x64,0x8c,0xe0,0x08,0x03,0x24,0x8c,0x0b,0xa2,0xac, +0x44,0x08,0x02,0x24,0x90,0x0b,0xa3,0xac,0x9c,0x0b,0xa2,0xac,0x78,0x08,0x03,0x24, +0x0c,0x08,0x02,0x24,0xa0,0x0b,0xa3,0xac,0xa4,0x0b,0xa2,0xac,0x14,0x08,0x03,0x24, +0x28,0x08,0x02,0x24,0xa8,0x0b,0xa3,0xac,0xac,0x0b,0xa2,0xac,0x2c,0x08,0x03,0x24, +0x58,0x08,0x02,0x24,0xb0,0x0b,0xa3,0xac,0xb4,0x0b,0xa2,0xac,0x58,0x0c,0x03,0x24, +0x5c,0x0c,0x02,0x24,0xb8,0x0b,0xa3,0xac,0xbc,0x0b,0xa2,0xac,0x1c,0x0c,0x03,0x24, +0x18,0x0c,0x02,0x24,0xc0,0x0b,0xa3,0xac,0xc4,0x0b,0xa2,0xac,0x88,0x0c,0x03,0x24, +0x8c,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xcc,0x0b,0xa2,0xac,0x89,0x0b,0xa7,0xa0, +0x98,0x0b,0xa6,0xac,0xc8,0x0b,0xa3,0xac,0x94,0x0b,0xa6,0xac,0xda,0xff,0x80,0x10, +0xa4,0x08,0x02,0x24,0xbc,0x08,0x02,0x24,0x08,0x00,0xe0,0x03,0xd0,0x0b,0xa2,0xac, +0xfb,0x42,0x00,0x08,0x21,0x18,0x00,0x00,0x20,0x00,0x62,0x2c,0x06,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x06,0x10,0x64,0x00,0x01,0x00,0x42,0x30,0xfa,0xff,0x40,0x10, +0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0xd8,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x25,0xb0,0x02,0x3c,0x21,0x88,0xa0,0x00, +0xff,0xff,0x03,0x24,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf, +0x20,0x00,0xbf,0xaf,0x21,0x98,0xc0,0x00,0x21,0x28,0xc0,0x00,0x21,0x90,0x80,0x00, +0x09,0x00,0x23,0x12,0x21,0x80,0x82,0x00,0x00,0x00,0x10,0x8e,0xf6,0x42,0x00,0x0c, +0x21,0x20,0x20,0x02,0x27,0x28,0x11,0x00,0x24,0x28,0xb0,0x00,0x04,0x10,0x53,0x00, +0x25,0x28,0xa2,0x00,0x21,0x20,0x40,0x02,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x8a,0x42,0x00,0x08, +0x28,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x21,0x30,0x80,0x00,0x14,0x27,0x44,0x8c, +0x02,0x43,0x00,0x08,0xff,0xff,0x05,0x24,0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c, +0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x20,0x82,0x00, +0x00,0x00,0x90,0x8c,0x21,0x88,0xa0,0x00,0xf6,0x42,0x00,0x0c,0x21,0x20,0xa0,0x00, +0x24,0x80,0x11,0x02,0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd8,0xff,0xbd,0x27, +0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,0x20,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf, +0x1c,0x00,0xb3,0xaf,0x10,0x00,0xb0,0xaf,0x78,0x1b,0x31,0x26,0xb0,0x0b,0x23,0x8e, +0x25,0xb0,0x02,0x3c,0x24,0x08,0x53,0x8c,0x21,0x18,0x62,0x00,0x00,0x00,0x70,0x8c, +0x7f,0x80,0x02,0x3c,0xff,0xff,0x42,0x34,0xff,0x7f,0x05,0x3c,0x24,0x80,0x02,0x02, +0xc0,0x25,0x04,0x00,0xff,0xff,0xa5,0x34,0x24,0x28,0x65,0x02,0x25,0x80,0x04,0x02, +0x8a,0x42,0x00,0x0c,0x24,0x08,0x04,0x24,0x9c,0x12,0x00,0x0c,0x01,0x00,0x04,0x24, +0x00,0x80,0x12,0x3c,0xb0,0x0b,0x24,0x8e,0x25,0x80,0x12,0x02,0x8a,0x42,0x00,0x0c, +0x21,0x28,0x00,0x02,0x9c,0x12,0x00,0x0c,0x01,0x00,0x04,0x24,0x25,0x28,0x72,0x02, +0x8a,0x42,0x00,0x0c,0x24,0x08,0x04,0x24,0x9c,0x12,0x00,0x0c,0x01,0x00,0x04,0x24, +0xd0,0x0b,0x24,0x8e,0x0f,0x00,0x05,0x3c,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0xff,0xa5,0x34, +0x24,0x43,0x00,0x08,0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf, +0x02,0x80,0x11,0x3c,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x78,0x1b,0x27,0x26, +0x8b,0x0b,0xe5,0x90,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x90,0x0d,0x63,0x24, +0x18,0x03,0x42,0x34,0x02,0x00,0x06,0x24,0x00,0x00,0x43,0xac,0x34,0x00,0xa6,0x10, +0x21,0x80,0x80,0x00,0x03,0x00,0x03,0x24,0x3a,0x00,0xa3,0x10,0x2e,0x00,0x02,0x2e, +0x10,0x00,0x02,0x2e,0x07,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0x00,0x04,0x32, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x35,0x43,0x00,0x08, +0x20,0x00,0xbd,0x27,0xfa,0xff,0xa6,0x14,0xff,0x00,0x04,0x32,0x89,0x0b,0xe4,0x90, +0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10,0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x38,0x00,0x85,0x10,0x78,0x1b,0x22,0x26,0x2e,0x00,0x83,0x10, +0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24,0x24,0x43,0x00,0x0c,0xff,0xff,0x05,0x24, +0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34,0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24, +0x02,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,0x78,0x1b,0x22,0x26,0x89,0x0b,0x44,0x90, +0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10,0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14, +0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0xdb,0xff,0x82,0x14, +0x00,0x00,0x00,0x00,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c, +0x02,0x43,0x00,0x0c,0x21,0x30,0x00,0x00,0x7a,0x43,0x00,0x08,0xff,0x00,0x04,0x32, +0x25,0x00,0x82,0x2c,0xcc,0xff,0x40,0x14,0x03,0x00,0x03,0x24,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xc7,0xff,0x40,0x14,0x10,0x00,0x02,0x2e,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c, +0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24,0x8c,0x43,0x00,0x08,0x00,0x08,0x04,0x24, +0xcc,0xff,0x80,0x14,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x24, +0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24,0x8c,0x43,0x00,0x08,0x00,0x08,0x04,0x24, +0xb2,0xff,0x80,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c, +0x0f,0x00,0x05,0x24,0x02,0x43,0x00,0x0c,0x21,0x30,0x00,0x00,0x7a,0x43,0x00,0x08, +0xff,0x00,0x04,0x32,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c, +0x78,0x1b,0x28,0x26,0x8b,0x0b,0x06,0x91,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x3c,0x0f,0x63,0x24,0x18,0x03,0x42,0x34,0x02,0x00,0x07,0x24,0x18,0x00,0xb2,0xaf, +0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,0x00,0x00,0x43,0xac,0x21,0x90,0xa0,0x00, +0x39,0x00,0xc7,0x10,0xff,0x00,0x90,0x30,0x03,0x00,0x03,0x24,0x3f,0x00,0xc3,0x10, +0x2e,0x00,0x02,0x2e,0x10,0x00,0x02,0x2e,0x0c,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x0f,0x00,0x04,0x3c,0xff,0xff,0x84,0x34,0x24,0x20,0x44,0x02,0x00,0x15,0x10,0x00, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x25,0x20,0x44,0x00,0x1f,0x43,0x00,0x08,0x20,0x00,0xbd,0x27,0xf5,0xff,0xc7,0x14, +0x0f,0x00,0x04,0x3c,0x89,0x0b,0x04,0x91,0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10, +0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x38,0x00,0x86,0x10, +0x78,0x1b,0x22,0x26,0x2e,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24, +0x24,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34, +0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24,0x02,0x43,0x00,0x0c,0xff,0xff,0x05,0x24, +0x78,0x1b,0x22,0x26,0x89,0x0b,0x44,0x90,0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10, +0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10, +0x03,0x00,0x02,0x24,0xd6,0xff,0x82,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x22,0x26, +0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0x02,0x43,0x00,0x0c,0x21,0x30,0x00,0x00, +0xe7,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0x25,0x00,0x02,0x2e,0xc7,0xff,0x40,0x14, +0x03,0x00,0x03,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xc1,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x78,0x1b,0x22,0x26, +0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24, +0xfe,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xcc,0xff,0x80,0x14,0x78,0x1b,0x22,0x26, +0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x24,0x02,0x43,0x00,0x0c,0x0f,0x00,0x06,0x24, +0xfe,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xad,0xff,0x80,0x14,0x00,0x00,0x00,0x00, +0x78,0x1b,0x22,0x26,0x8c,0x0b,0x44,0x8c,0x0f,0x00,0x05,0x24,0x02,0x43,0x00,0x0c, +0x21,0x30,0x00,0x00,0xe7,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0xe8,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0x21,0x80,0x80,0x00,0x14,0x00,0xbf,0xaf,0x35,0x43,0x00,0x0c, +0x21,0x20,0x00,0x00,0x40,0x01,0x44,0x34,0x21,0x18,0x40,0x00,0x1f,0x00,0x02,0x2e, +0x00,0x23,0x04,0x00,0x10,0x00,0x40,0x10,0x10,0x00,0x05,0x2e,0x00,0x01,0x64,0x34, +0x06,0x00,0xa0,0x10,0x00,0x23,0x04,0x00,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x1f,0x43,0x00,0x0c, +0xf1,0xff,0x10,0x26,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x1f,0x43,0x00,0x0c,0xe2,0xff,0x10,0x26, +0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x18,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x20,0x82,0x00,0x00,0x00,0x90,0x8c, +0x21,0x88,0xa0,0x00,0xf6,0x42,0x00,0x0c,0x21,0x20,0xa0,0x00,0x24,0x80,0x11,0x02, +0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd8,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c, +0x18,0x00,0xb2,0xaf,0x21,0x90,0x82,0x00,0xff,0xff,0x02,0x24,0x1c,0x00,0xb3,0xaf, +0x14,0x00,0xb1,0xaf,0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x88,0xa0,0x00, +0x21,0x20,0xa0,0x00,0x21,0x18,0x40,0x02,0x10,0x00,0xa2,0x10,0x21,0x98,0xc0,0x00, +0x00,0x00,0x50,0x8e,0xf6,0x42,0x00,0x0c,0x00,0x00,0x00,0x00,0x27,0x18,0x11,0x00, +0x24,0x18,0x70,0x00,0x04,0x10,0x53,0x00,0x25,0x18,0x62,0x00,0x00,0x00,0x43,0xae, +0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x20,0x00,0xbf,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x28,0x00,0xbd,0x27,0x00,0x00,0x66,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x25,0xb0,0x02,0x3c,0x21,0x38,0x82,0x00,0xff,0xff,0x02,0x24,0x27,0x40,0x05,0x00, +0x08,0x00,0xa2,0x10,0x24,0x18,0xc5,0x00,0x00,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x02,0x01,0x25,0x10,0x43,0x00,0x00,0x00,0xe2,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x21,0x38,0xa0,0x00,0x25,0xb0,0x02,0x3c,0xff,0xff,0x03,0x24,0x27,0x48,0x05,0x00, +0x24,0x40,0xc7,0x00,0x21,0x28,0xc0,0x00,0x05,0x00,0xe3,0x10,0x21,0x30,0x82,0x00, +0x00,0x00,0xc5,0x8c,0x00,0x00,0x00,0x00,0x24,0x28,0x25,0x01,0x25,0x28,0xa8,0x00, +0x8a,0x42,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c, +0xd8,0xff,0xbd,0x27,0xe0,0x12,0x42,0x24,0x18,0x03,0x63,0x34,0x20,0x00,0xb4,0xaf, +0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x24,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf, +0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x21,0x88,0xa0,0x00,0x21,0x98,0xc0,0x00, +0x21,0xa0,0x80,0x00,0x00,0x60,0x12,0x40,0x01,0x00,0x41,0x36,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x0f,0x00,0x02,0x3c,0xff,0xff,0x42,0x34,0x0a,0x00,0x22,0x12, +0x21,0x28,0xc0,0x00,0x64,0x43,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x20,0x20,0x02, +0xf6,0x42,0x00,0x0c,0x21,0x80,0x40,0x00,0x27,0x28,0x11,0x00,0x24,0x28,0xb0,0x00, +0x04,0x10,0x53,0x00,0x25,0x28,0xa2,0x00,0xcf,0x43,0x00,0x0c,0xff,0x00,0x84,0x32, +0x00,0x60,0x92,0x40,0x24,0x00,0xbf,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x28,0x00,0xbd,0x27,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x8c,0x13,0x63,0x24, +0x18,0x03,0x42,0x34,0xe0,0xff,0xbd,0x27,0x00,0x00,0x43,0xac,0x18,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x64,0x43,0x00,0x0c,0x21,0x88,0xa0,0x00, +0x21,0x80,0x40,0x00,0xf6,0x42,0x00,0x0c,0x21,0x20,0x20,0x02,0x24,0x80,0x11,0x02, +0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf, +0x95,0x42,0x00,0x0c,0xff,0x00,0x84,0x30,0x10,0x00,0xbf,0x8f,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xc8,0xff,0xbd,0x27,0x2c,0x00,0xb1,0xaf,0xff,0xff,0x05,0x24,0x21,0x88,0x80,0x00, +0x02,0x00,0x06,0x24,0x10,0x00,0xa4,0x27,0x34,0x00,0xbf,0xaf,0x30,0x00,0xb2,0xaf, +0x3e,0x46,0x00,0x0c,0x28,0x00,0xb0,0xaf,0x08,0x00,0x30,0x96,0x02,0x80,0x02,0x3c, +0x21,0x28,0x00,0x00,0x25,0x80,0x02,0x02,0x21,0x20,0x00,0x02,0x3e,0x46,0x00,0x0c, +0x10,0x00,0x06,0x24,0x20,0x00,0x02,0x96,0x24,0x00,0x04,0x26,0x10,0x00,0xa5,0x27, +0x03,0xff,0x42,0x30,0xc8,0x00,0x42,0x34,0x20,0x00,0x02,0xa6,0x46,0x46,0x00,0x0c, +0x06,0x00,0x06,0x24,0x25,0xb0,0x03,0x3c,0x50,0x00,0x62,0x34,0x00,0x00,0x44,0x8c, +0x54,0x00,0x65,0x34,0x58,0x00,0x66,0x34,0x18,0x00,0xa4,0xaf,0x00,0x00,0xa2,0x8c, +0x5c,0x00,0x63,0x34,0x2a,0x00,0x04,0x26,0x1c,0x00,0xa2,0xaf,0x00,0x00,0xc7,0x8c, +0x18,0x00,0xa5,0x27,0x06,0x00,0x06,0x24,0x20,0x00,0xa7,0xaf,0x00,0x00,0x62,0x8c, +0x1a,0x00,0x12,0x24,0x46,0x46,0x00,0x0c,0x24,0x00,0xa2,0xaf,0x30,0x00,0x04,0x26, +0x20,0x00,0xa5,0x27,0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,0x13,0x00,0x03,0x24, +0x14,0x00,0x23,0xae,0x0c,0x00,0x32,0xae,0x08,0x00,0x05,0x8e,0x04,0x00,0x04,0x8e, +0xff,0xdf,0x02,0x3c,0x14,0x00,0x06,0x8e,0xff,0xff,0x42,0x34,0x10,0x00,0x07,0x8e, +0xff,0xe0,0x03,0x24,0x24,0x28,0xa2,0x00,0x00,0x40,0x02,0x3c,0x24,0x20,0x83,0x00, +0x25,0x28,0xa2,0x00,0xff,0x81,0x03,0x24,0xfe,0xff,0x02,0x3c,0x24,0x30,0xc3,0x00, +0xff,0xff,0x42,0x34,0x00,0x12,0x84,0x34,0x00,0x80,0x03,0x3c,0x24,0x20,0x82,0x00, +0x25,0x38,0xe3,0x00,0x00,0x26,0xc6,0x34,0x80,0x00,0xa5,0x34,0x20,0x00,0x02,0x24, +0x00,0x00,0x12,0xa6,0x10,0x00,0x07,0xae,0x02,0x00,0x02,0xa2,0x14,0x00,0x06,0xae, +0x04,0x00,0x04,0xae,0x08,0x00,0x05,0xae,0x34,0x00,0xbf,0x8f,0x30,0x00,0xb2,0x8f, +0x2c,0x00,0xb1,0x8f,0x28,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27, +0xc8,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf,0x18,0x00,0xb0,0xaf,0xff,0xff,0xf4,0x30, +0x25,0xb0,0x10,0x3c,0x01,0x80,0x02,0x3c,0x1c,0x00,0xb1,0xaf,0x18,0x03,0x03,0x36, +0x58,0x15,0x42,0x24,0x20,0x00,0x91,0x26,0x30,0x00,0xb6,0xaf,0x24,0x00,0xb3,0xaf, +0x21,0xb0,0x80,0x00,0x48,0x00,0xb3,0x93,0x21,0x20,0x20,0x02,0x00,0x00,0x62,0xac, +0x2c,0x00,0xb5,0xaf,0x20,0x00,0xb2,0xaf,0x34,0x00,0xbf,0xaf,0xff,0x00,0xb5,0x30, +0x39,0x15,0x00,0x0c,0xff,0x00,0xd2,0x30,0x0b,0x00,0x40,0x14,0x10,0x00,0xa2,0xaf, +0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x08,0x00,0x43,0x8c,0xb0,0x03,0x02,0x36, +0x02,0x80,0x10,0x3c,0x00,0x00,0x43,0xac,0x10,0x00,0xa2,0x8f,0x21,0x30,0x20,0x02, +0x21,0x28,0x00,0x00,0x08,0x00,0x44,0x94,0x35,0x46,0x00,0x0c,0x25,0x20,0x90,0x00, +0x10,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x62,0x94,0x00,0x00,0x00,0x00, +0x25,0x88,0x50,0x00,0x50,0x00,0x60,0x16,0x20,0x00,0x30,0x26,0x20,0x00,0x32,0xa6, +0x48,0x00,0x02,0x24,0x6b,0x00,0x42,0x12,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x24, +0x4c,0x00,0xa2,0x16,0x21,0x28,0xc0,0x02,0xa4,0x00,0x02,0x24,0x6a,0x00,0x42,0x12, +0x02,0x80,0x02,0x3c,0x10,0x00,0xa2,0x8f,0x25,0xb0,0x10,0x3c,0xb0,0x03,0x10,0x36, +0x0c,0x00,0x54,0xac,0x10,0x00,0xa2,0x8f,0x12,0x00,0x03,0x24,0x21,0x28,0x00,0x00, +0x14,0x00,0x43,0xac,0x00,0x00,0x14,0xae,0x10,0x00,0xa2,0x8f,0x08,0x00,0x06,0x24, +0x08,0x00,0x43,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xae,0x10,0x00,0xa2,0x8f, +0x02,0x80,0x03,0x3c,0x08,0x00,0x44,0x94,0x00,0x00,0x00,0x00,0x25,0x88,0x83,0x00, +0x3e,0x46,0x00,0x0c,0x21,0x20,0x20,0x02,0x04,0x00,0x25,0x8e,0x08,0x00,0x26,0x8e, +0x14,0x00,0x27,0x8e,0x10,0x00,0x24,0x8e,0xff,0xe0,0x03,0x24,0xff,0xdf,0x02,0x3c, +0x24,0x28,0xa3,0x00,0xff,0xff,0x42,0x34,0xff,0x81,0x03,0x24,0x24,0x38,0xe3,0x00, +0x24,0x30,0xc2,0x00,0x00,0x80,0x03,0x3c,0x00,0x40,0x02,0x3c,0x25,0x30,0xc2,0x00, +0x25,0x20,0x83,0x00,0x00,0x12,0xa5,0x34,0x20,0x00,0x02,0x24,0x10,0x00,0x24,0xae, +0x00,0x00,0x34,0xa6,0x02,0x00,0x22,0xa2,0x04,0x00,0x25,0xae,0x14,0x00,0x27,0xae, +0x08,0x00,0x26,0xae,0x00,0x60,0x05,0x40,0x01,0x00,0xa1,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x10,0x00,0xa3,0x8f,0x78,0x41,0x42,0x24, +0x04,0x00,0x44,0x8c,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac,0x10,0x00,0xa2,0x27, +0x00,0x00,0x83,0xac,0x04,0x00,0x64,0xac,0x00,0x00,0x02,0xae,0x00,0x60,0x85,0x40, +0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x00,0x10,0x42,0x36,0x8a,0x45,0x00,0x08, +0x20,0x00,0x22,0xa6,0x24,0x00,0x24,0x26,0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24, +0x02,0x80,0x05,0x3c,0x98,0x26,0xa5,0x24,0x2a,0x00,0x24,0x26,0x46,0x46,0x00,0x0c, +0x06,0x00,0x06,0x24,0x02,0x80,0x05,0x3c,0x30,0x00,0x24,0x26,0x18,0x42,0xa5,0x24, +0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,0x02,0x80,0x05,0x3c,0x78,0x1b,0xa5,0x24, +0xec,0x0c,0xa6,0x94,0x00,0x00,0x00,0x00,0x01,0x00,0xc2,0x24,0x00,0x21,0x06,0x00, +0xff,0xff,0x46,0x30,0xff,0xff,0x84,0x30,0x00,0x10,0xc2,0x2c,0x0a,0x30,0x02,0x00, +0x02,0x1a,0x04,0x00,0x17,0x00,0x03,0xa2,0x16,0x00,0x04,0xa2,0x93,0x45,0x00,0x08, +0xec,0x0c,0xa6,0xa4,0x20,0x00,0x22,0x96,0x00,0x00,0x00,0x00,0x00,0x01,0x42,0x34, +0x8d,0x45,0x00,0x08,0x20,0x00,0x22,0xa6,0x10,0x42,0x43,0x94,0x02,0x80,0x05,0x3c, +0x24,0x00,0x24,0x26,0x00,0xc0,0x63,0x24,0xff,0xff,0x63,0x30,0x02,0x12,0x03,0x00, +0x18,0x42,0xa5,0x24,0x03,0x00,0x02,0xa2,0x02,0x00,0x03,0xa2,0x46,0x46,0x00,0x0c, +0x06,0x00,0x06,0x24,0x02,0x80,0x05,0x3c,0x2a,0x00,0x24,0x26,0x98,0x26,0xa5,0x24, +0x46,0x46,0x00,0x0c,0x06,0x00,0x06,0x24,0x93,0x45,0x00,0x08,0x00,0x00,0x00,0x00, +0xff,0x00,0x82,0x30,0x02,0x80,0x04,0x3c,0xe0,0xff,0xbd,0x27,0x18,0x42,0x84,0x24, +0x08,0x00,0x05,0x24,0x48,0x00,0x06,0x24,0x18,0x00,0x07,0x24,0x18,0x00,0xbf,0xaf, +0x56,0x45,0x00,0x0c,0x10,0x00,0xa2,0xaf,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x05,0x3c, +0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb0,0xaf,0x78,0x1b,0xa5,0x24,0x98,0x26,0xa2,0x94, +0x01,0x00,0x03,0x24,0xff,0x00,0x90,0x30,0x00,0xc0,0x42,0x24,0xff,0xff,0x44,0x30, +0x2c,0x22,0x00,0x0c,0x82,0x0b,0xa3,0xa0,0x02,0x80,0x04,0x3c,0x18,0x42,0x84,0x24, +0x04,0x00,0x05,0x24,0xa4,0x00,0x06,0x24,0x10,0x00,0x07,0x24,0x56,0x45,0x00,0x0c, +0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x3a,0x46,0x00,0x08, +0xff,0x00,0xa5,0x30,0x00,0x00,0x85,0xa0,0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24, +0xfc,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x05,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0xff,0xff,0xc6,0x24, +0xfd,0xff,0xc0,0x14,0x04,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10,0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24, +0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24,0x01,0x00,0xa5,0x24,0x00,0x00,0xe2,0xa0, +0xfb,0xff,0x66,0x14,0x01,0x00,0xe7,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00, +0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10,0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24, +0x00,0x00,0xa2,0x8c,0xff,0xff,0x63,0x24,0x04,0x00,0xa5,0x24,0x00,0x00,0xe2,0xac, +0xfb,0xff,0x66,0x14,0x04,0x00,0xe7,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00, +0x2b,0x10,0xa4,0x00,0x0d,0x00,0x40,0x14,0xff,0xff,0x02,0x24,0xff,0xff,0xc6,0x24, +0x08,0x00,0xc2,0x10,0x21,0x18,0x80,0x00,0xff,0xff,0x07,0x24,0x00,0x00,0xa2,0x90, +0xff,0xff,0xc6,0x24,0x01,0x00,0xa5,0x24,0x00,0x00,0x62,0xa0,0xfb,0xff,0xc7,0x14, +0x01,0x00,0x63,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x21,0x28,0xa6,0x00, +0x21,0x18,0x86,0x00,0xff,0xff,0xc6,0x24,0xfa,0xff,0xc2,0x10,0x00,0x00,0x00,0x00, +0xff,0xff,0x07,0x24,0xff,0xff,0xa5,0x24,0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24, +0xff,0xff,0xc6,0x24,0xfb,0xff,0xc7,0x14,0x00,0x00,0x62,0xa0,0x08,0x00,0xe0,0x03, +0x21,0x10,0x80,0x00,0x0c,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x90, +0x00,0x00,0xa3,0x90,0x01,0x00,0x84,0x24,0x23,0x10,0x43,0x00,0x00,0x16,0x02,0x00, +0x03,0x16,0x02,0x00,0x04,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,0xff,0xff,0xc6,0x24, +0xf6,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0xc0,0x00, +0x91,0x46,0x00,0x08,0x21,0x18,0x86,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00, +0x04,0x00,0x45,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x84,0x24,0xfa,0xff,0x83,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x09,0x00,0xc0,0x10, +0xff,0xff,0xc3,0x24,0xff,0x00,0xa5,0x30,0xff,0xff,0x06,0x24,0x00,0x00,0x82,0x90, +0xff,0xff,0x63,0x24,0x05,0x00,0x45,0x10,0x01,0x00,0x84,0x24,0xfb,0xff,0x66,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0xff,0xff,0x82,0x24,0x21,0x38,0x00,0x00,0x1f,0x00,0xc0,0x10,0x21,0x18,0x00,0x00, +0x02,0x80,0x02,0x3c,0x80,0xb4,0x4b,0x24,0x00,0x00,0x87,0x90,0x00,0x00,0xa3,0x90, +0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24,0x21,0x10,0xeb,0x00,0x16,0x00,0xe0,0x10, +0x01,0x00,0xa5,0x24,0x14,0x00,0x60,0x10,0x21,0x48,0x6b,0x00,0x10,0x00,0xe3,0x10, +0x20,0x00,0xe8,0x24,0x00,0x00,0x42,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30, +0x02,0x00,0x40,0x10,0x20,0x00,0x6a,0x24,0xff,0x00,0x07,0x31,0x00,0x00,0x22,0x91, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x02,0x00,0x40,0x10,0xff,0x00,0xe7,0x30, +0xff,0x00,0x43,0x31,0xff,0x00,0x63,0x30,0x03,0x00,0xe3,0x14,0x00,0x00,0x00,0x00, +0xe5,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x23,0x10,0xe3,0x00, +0x21,0x18,0x80,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0, +0xfc,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x21,0x38,0x80,0x00,0xff,0xff,0x03,0x24,0xff,0xff,0xc6,0x24,0x06,0x00,0xc3,0x10, +0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0, +0xf9,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00, +0x00,0x00,0x82,0x80,0xe0,0x46,0x00,0x08,0x21,0x18,0x80,0x00,0x01,0x00,0x84,0x24, +0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,0x00,0x00,0x00,0x00, +0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0xfc,0xff,0x40,0x14, +0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x12,0x00,0xc0,0x10, +0x21,0x18,0x80,0x00,0x00,0x00,0x82,0x80,0xf1,0x46,0x00,0x08,0x00,0x00,0x00,0x00, +0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0, +0x05,0x00,0x40,0x10,0x01,0x00,0x84,0x24,0xff,0xff,0xc6,0x24,0xf9,0xff,0xc0,0x14, +0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xa0,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x00,0x00,0x83,0x90,0x00,0x00,0xa2,0x90,0x01,0x00,0x84,0x24,0x23,0x10,0x62,0x00, +0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x03,0x00,0x40,0x14,0x01,0x00,0xa5,0x24, +0xf7,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x21,0x10,0x00,0x00,0x0b,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90, +0x00,0x00,0x83,0x90,0xff,0xff,0xc6,0x24,0x23,0x10,0x62,0x00,0x00,0x16,0x02,0x00, +0x03,0x16,0x02,0x00,0x03,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,0xf5,0xff,0x60,0x14, +0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x80, +0x00,0x2e,0x05,0x00,0x21,0x10,0x80,0x00,0x22,0x47,0x00,0x08,0x03,0x2e,0x05,0x00, +0x07,0x00,0x60,0x10,0x01,0x00,0x42,0x24,0x00,0x00,0x43,0x80,0x00,0x00,0x00,0x00, +0xfb,0xff,0x65,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x00,0x00,0x82,0x80,0x2e,0x47,0x00,0x08, +0x21,0x18,0x80,0x00,0x01,0x00,0x63,0x24,0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00, +0xfc,0xff,0x40,0x14,0x23,0x10,0x64,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x21,0x80,0xa0,0x00,0x14,0x00,0xb1,0xaf, +0x18,0x00,0xbf,0xaf,0x21,0x88,0x80,0x00,0x28,0x47,0x00,0x0c,0x00,0x86,0x10,0x00, +0x21,0x18,0x51,0x00,0x03,0x86,0x10,0x00,0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00, +0x0a,0x00,0x50,0x10,0x21,0x10,0x60,0x00,0xff,0xff,0x63,0x24,0x2b,0x10,0x71,0x00, +0xf9,0xff,0x40,0x10,0x21,0x10,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x21,0x30,0x80,0x00,0x0d,0x00,0xa0,0x10,0xff,0xff,0xa3,0x24,0x00,0x00,0x82,0x80, +0x00,0x00,0x00,0x00,0x09,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x24, +0xff,0xff,0x63,0x24,0x05,0x00,0x65,0x10,0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x80, +0x00,0x00,0x00,0x00,0xfa,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x23,0x10,0xc4,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10, +0x21,0x40,0x00,0x00,0x00,0x00,0xa9,0x80,0x00,0x00,0x00,0x00,0x17,0x00,0x20,0x11, +0x21,0x30,0xa0,0x00,0x00,0x3e,0x02,0x00,0x03,0x3e,0x07,0x00,0x21,0x18,0x20,0x01, +0x15,0x00,0xe3,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x90, +0x00,0x00,0x00,0x00,0x00,0x1e,0x02,0x00,0x03,0x1e,0x03,0x00,0xf8,0xff,0x60,0x14, +0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x06,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0xeb,0xff,0x40,0x14, +0x01,0x00,0x08,0x25,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x01,0x00,0x00,0xa2,0x90, +0x73,0x47,0x00,0x08,0x00,0x16,0x02,0x00,0x00,0x00,0xc2,0x90,0x73,0x47,0x00,0x08, +0x00,0x16,0x02,0x00,0x00,0x00,0x87,0x90,0x00,0x00,0x00,0x00,0x14,0x00,0xe0,0x10, +0x21,0x10,0x80,0x00,0x00,0x00,0xa4,0x90,0x00,0x00,0x00,0x00,0x00,0x1e,0x04,0x00, +0x03,0x1e,0x03,0x00,0x09,0x00,0x60,0x10,0x21,0x30,0xa0,0x00,0x00,0x3e,0x07,0x00, +0x03,0x3e,0x07,0x00,0x0b,0x00,0xe3,0x10,0x01,0x00,0xc6,0x24,0x00,0x00,0xc3,0x80, +0x00,0x00,0x00,0x00,0xfb,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0x00,0x00,0x47,0x90,0x00,0x00,0x00,0x00,0xf0,0xff,0xe0,0x14,0x00,0x00,0x00,0x00, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x21,0x80,0x80,0x00, +0x1d,0x00,0x80,0x10,0x21,0x88,0xa0,0x00,0x5f,0x47,0x00,0x0c,0x21,0x20,0x00,0x02, +0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02, +0x22,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x83,0x47,0x00,0x0c,0x00,0x00,0x00,0x00, +0x05,0x00,0x40,0x10,0x21,0x18,0x40,0x00,0x00,0x00,0x42,0x80,0x00,0x00,0x00,0x00, +0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0xa8,0xb5,0x43,0xac, +0x21,0x18,0x00,0x02,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x00,0x00,0x60,0xa0, +0xb4,0x47,0x00,0x08,0x01,0x00,0x63,0x24,0x02,0x80,0x02,0x3c,0xa8,0xb5,0x50,0x8c, +0x00,0x00,0x00,0x00,0xf3,0xff,0x00,0x12,0x21,0x18,0x00,0x00,0x5f,0x47,0x00,0x0c, +0x21,0x20,0x00,0x02,0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02, +0x21,0x20,0x00,0x02,0xe0,0xff,0x40,0x14,0x21,0x18,0x00,0x00,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x80,0x02,0x3c,0xa8,0xb5,0x40,0xac, +0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xe0,0xff,0xbd,0x27, +0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf, +0x00,0x00,0x90,0x8c,0x21,0x90,0x80,0x00,0x21,0x88,0xa0,0x00,0x21,0x18,0x00,0x00, +0x0f,0x00,0x00,0x12,0x21,0x20,0x00,0x02,0x5f,0x47,0x00,0x0c,0x00,0x00,0x00,0x00, +0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02, +0x07,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x83,0x47,0x00,0x0c,0x00,0x00,0x00,0x00, +0x21,0x18,0x40,0x00,0x09,0x00,0x40,0x14,0x00,0x00,0x42,0xae,0x21,0x18,0x00,0x02, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x00,0x00,0x42,0x80, +0x00,0x00,0x00,0x00,0xf5,0xff,0x40,0x10,0x01,0x00,0x64,0x24,0x00,0x00,0x60,0xa0, +0xed,0x47,0x00,0x08,0x00,0x00,0x44,0xae,0xd8,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf, +0x21,0x88,0x80,0x00,0x21,0x20,0xa0,0x00,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf, +0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x28,0x47,0x00,0x0c,0x21,0x98,0xa0,0x00, +0x21,0x90,0x40,0x00,0x08,0x00,0x40,0x16,0x21,0x10,0x20,0x02,0x20,0x00,0xbf,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x28,0x47,0x00,0x0c,0x21,0x20,0x20,0x02, +0x21,0x80,0x40,0x00,0x2a,0x10,0x52,0x00,0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x02,0x21,0x30,0x40,0x02,0x7b,0x46,0x00,0x0c, +0xff,0xff,0x10,0x26,0x0b,0x00,0x40,0x10,0x2a,0x18,0x12,0x02,0xf8,0xff,0x60,0x10, +0x01,0x00,0x31,0x26,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x28,0x00,0xbd,0x27,0x09,0x48,0x00,0x08,0x21,0x10,0x20,0x02,0x01,0x80,0x02,0x3c, +0xa4,0x20,0x43,0x24,0x25,0xb0,0x02,0x3c,0xc0,0xff,0xbd,0x27,0x18,0x03,0x42,0x34, +0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x20,0x00,0xb2,0xaf, +0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x00,0x00,0x43,0xac,0x21,0xa0,0x00,0x00, +0x02,0x80,0x13,0x3c,0x02,0x80,0x15,0x3c,0x02,0x80,0x17,0x3c,0x02,0x80,0x16,0x3c, +0x78,0x1b,0x67,0x26,0xf0,0x23,0xe3,0x94,0x25,0xb0,0x11,0x3c,0x01,0x80,0x05,0x3c, +0x18,0x03,0x24,0x36,0x01,0x00,0x63,0x24,0xa4,0x20,0xa2,0x24,0x00,0x00,0x82,0xac, +0xf0,0x23,0xe3,0xa4,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0xc6,0x00,0x23,0x36,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00, +0x11,0x00,0x42,0x2c,0x08,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x02,0x80,0x04,0x3c, +0x44,0x44,0x62,0x8c,0x5c,0x44,0x83,0x8c,0x02,0x80,0x05,0x3c,0x5c,0x44,0x80,0xac, +0x25,0x10,0x43,0x00,0x44,0x44,0xa2,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0xc0,0x02,0x26,0x36,0x00,0x00,0xd2,0x8c,0x00,0x00,0x00,0x00, +0x03,0x00,0x40,0x12,0xff,0x00,0x03,0x3c,0x01,0x00,0x82,0x26,0xff,0xff,0x54,0x30, +0xff,0xff,0x62,0x34,0x2b,0x10,0x52,0x00,0x1d,0x02,0x40,0x10,0x00,0x50,0x82,0x2e, +0x00,0xff,0x02,0x3c,0xff,0x00,0x42,0x34,0x00,0xfd,0x06,0x3c,0x24,0x28,0x42,0x02, +0x14,0x00,0xc2,0x34,0xf7,0x04,0xa2,0x10,0x2b,0x10,0x45,0x00,0x33,0x02,0x40,0x14, +0x00,0xfd,0x04,0x3c,0x00,0xf2,0x08,0x3c,0x01,0x00,0x02,0x35,0x0b,0x05,0xa2,0x10, +0x2b,0x10,0x45,0x00,0xd3,0x02,0x40,0x14,0x00,0xfb,0x04,0x3c,0x00,0xf0,0x04,0x3c, +0x20,0x00,0x82,0x34,0x59,0x05,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00, +0xfe,0x02,0x40,0x14,0x01,0x00,0x82,0x34,0x68,0x05,0xa2,0x10,0x00,0x00,0x00,0x00, +0x2b,0x10,0x45,0x00,0x07,0x04,0x40,0x14,0x03,0x00,0x82,0x34,0x00,0xe0,0x02,0x3c, +0xb7,0x05,0xa2,0x10,0x00,0xff,0x48,0x32,0xb3,0x04,0xa4,0x10,0xff,0x00,0x02,0x3c, +0x25,0xb0,0x02,0x3c,0xc0,0x02,0x42,0x34,0x21,0xa0,0x00,0x00,0x00,0x00,0x40,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x25,0xb0,0x08,0x3c,0x64,0x03,0x02,0x35,0x00,0x00,0x43,0x94,0x68,0x03,0x04,0x35, +0x90,0x43,0xa3,0xa6,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0xae, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x90,0x43,0xa2,0x96, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0xd2,0x01,0x40,0x10,0x78,0x1b,0x66,0x26, +0x78,0x1b,0x67,0x26,0x78,0x1b,0x64,0x8e,0xd8,0x02,0xe5,0x8c,0xe8,0x02,0xe6,0x8c, +0xf0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x00,0x50,0x03,0x3c,0x24,0x28,0xa2,0x00, +0x01,0x00,0x84,0x34,0x24,0x30,0xc3,0x00,0x00,0x10,0x02,0x3c,0x78,0x1b,0x64,0xae, +0x9b,0x04,0xc2,0x10,0xd8,0x02,0xe5,0xac,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00, +0x02,0x00,0x42,0x30,0xbc,0x01,0x40,0x10,0xf3,0xff,0x03,0x24,0x78,0x1b,0x62,0x8e, +0x00,0x00,0x00,0x00,0x24,0x10,0x43,0x00,0x04,0x00,0x42,0x34,0x78,0x1b,0x62,0xae, +0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x30,0x49,0x01,0x40,0x10, +0xcf,0xff,0x03,0x24,0x78,0x1b,0x62,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x43,0x00, +0x10,0x00,0x42,0x34,0x78,0x1b,0x62,0xae,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00, +0x08,0x00,0x42,0x30,0x48,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0x90,0x43,0xa2,0x96, +0x00,0x00,0x00,0x00,0x10,0x00,0x42,0x30,0x26,0x00,0x40,0x10,0x78,0x1b,0x64,0x26, +0xc9,0x02,0x82,0x90,0xa0,0x43,0xe3,0x8e,0x01,0x00,0x42,0x24,0xc9,0x02,0x82,0xa0, +0x0f,0x00,0x63,0x30,0x01,0x00,0x02,0x24,0xa6,0x04,0x62,0x10,0x02,0x80,0x04,0x3c, +0xa0,0x43,0x82,0x8c,0x02,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0xa5,0x04,0x43,0x10, +0x00,0x00,0x00,0x00,0xa0,0x43,0x82,0x8c,0x03,0x00,0x03,0x24,0x0f,0x00,0x42,0x30, +0x02,0x00,0x43,0x10,0x03,0x00,0x04,0x24,0x21,0x20,0x00,0x00,0x15,0x51,0x00,0x0c, +0x00,0x00,0x00,0x00,0xa0,0x43,0xe3,0x8e,0x90,0x43,0xa5,0x96,0x25,0xb0,0x02,0x3c, +0xf0,0x00,0x63,0x30,0x64,0x03,0x42,0x34,0x02,0x19,0x03,0x00,0xef,0x00,0xa5,0x30, +0x78,0x1b,0x64,0x26,0x02,0x00,0x83,0xa0,0x00,0x00,0x45,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x30, +0x26,0x00,0x40,0x10,0x78,0x1b,0x64,0x26,0xca,0x02,0x82,0x90,0xa0,0x43,0xe3,0x8e, +0x01,0x00,0x42,0x24,0xca,0x02,0x82,0xa0,0x0f,0x00,0x63,0x30,0x01,0x00,0x02,0x24, +0x7a,0x04,0x62,0x10,0x02,0x80,0x04,0x3c,0xa0,0x43,0x82,0x8c,0x02,0x00,0x03,0x24, +0x0f,0x00,0x42,0x30,0x79,0x04,0x43,0x10,0x00,0x00,0x00,0x00,0xa0,0x43,0x82,0x8c, +0x03,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x02,0x00,0x43,0x10,0x03,0x00,0x04,0x24, +0x21,0x20,0x00,0x00,0x15,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0xa0,0x43,0xe3,0x8e, +0x90,0x43,0xa5,0x96,0x25,0xb0,0x02,0x3c,0xf0,0x00,0x63,0x30,0x64,0x03,0x42,0x34, +0x02,0x19,0x03,0x00,0xdf,0x00,0xa5,0x30,0x78,0x1b,0x64,0x26,0x02,0x00,0x83,0xa0, +0x00,0x00,0x45,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x90,0x43,0xa2,0x96, +0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x30,0xc4,0x00,0x40,0x10,0x78,0x1b,0x64,0x26, +0x78,0x1b,0x6f,0x26,0x08,0x00,0xe4,0x8d,0x00,0x00,0x00,0x00,0x42,0x17,0x04,0x00, +0x03,0x00,0x42,0x30,0x71,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0x8e, +0xff,0x9f,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x18,0x83,0x00,0x00,0xff,0x11,0x3c, +0x00,0x20,0x04,0x3c,0x25,0x18,0x64,0x00,0x24,0x10,0x51,0x00,0x08,0x00,0xe3,0xad, +0x98,0x01,0x40,0x14,0x02,0x80,0x10,0x3c,0x25,0xb0,0x0e,0x3c,0x03,0x0d,0xc2,0x35, +0x00,0x00,0x43,0x90,0x10,0x00,0xe4,0x8d,0xff,0x3f,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x58,0x82,0x00,0x70,0x00,0x63,0x30,0x00,0x40,0x02,0x3c,0x56,0x04,0x60,0x10, +0x25,0x58,0x62,0x01,0x94,0x0e,0xc2,0x35,0x9c,0x0e,0xc3,0x35,0xa4,0x0e,0xc4,0x35, +0xac,0x0e,0xc5,0x35,0x00,0x00,0x47,0x8c,0x00,0x00,0x6a,0x8c,0x00,0x00,0x8c,0x8c, +0x00,0x00,0xa6,0x8c,0x0c,0x00,0xe4,0x8d,0xb4,0x0e,0xc2,0x35,0x00,0x00,0x49,0x8c, +0xff,0x03,0x05,0x3c,0x00,0xfc,0x08,0x24,0xbc,0x0e,0xc2,0x35,0x24,0x38,0xe5,0x00, +0x24,0x30,0xc5,0x00,0x24,0x18,0x68,0x01,0x02,0x3c,0x07,0x00,0x00,0x00,0x4b,0x8c, +0x24,0x20,0x88,0x00,0x02,0x34,0x06,0x00,0xcc,0x0e,0xcd,0x35,0xc4,0x0e,0xc8,0x35, +0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,0x25,0x20,0x87,0x00,0x25,0x18,0x66,0x00, +0x00,0x00,0x07,0x8d,0x24,0x50,0x45,0x01,0x00,0x00,0xa6,0x8d,0x24,0x48,0x25,0x01, +0x24,0x18,0x62,0x00,0x24,0x20,0x82,0x00,0x82,0x51,0x0a,0x00,0x82,0x49,0x09,0x00, +0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,0x25,0x20,0x8a,0x00,0x25,0x18,0x69,0x00, +0x24,0x60,0x85,0x01,0x24,0x58,0x65,0x01,0x24,0x18,0x62,0x00,0x24,0x30,0xc5,0x00, +0x00,0x61,0x0c,0x00,0x24,0x20,0x82,0x00,0x00,0x59,0x0b,0x00,0x24,0x38,0xe5,0x00, +0x25,0x20,0x8c,0x00,0x25,0x18,0x6b,0x00,0x02,0x3c,0x07,0x00,0x02,0x34,0x06,0x00, +0x16,0x00,0xe6,0xa5,0x0c,0x00,0xe4,0xad,0x10,0x00,0xe3,0xad,0x14,0x00,0xe7,0xa5, +0x78,0x1b,0x63,0x26,0x0c,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x16,0x04,0x40,0x04, +0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0x8e,0xff,0x00,0x04,0x3c,0x24,0x10,0x44,0x00, +0x05,0x00,0x40,0x10,0x12,0x00,0x02,0x24,0xa0,0x43,0xe2,0x8e,0x00,0x00,0x00,0x00, +0x24,0x10,0x44,0x00,0x02,0x14,0x02,0x00,0xc3,0x02,0x62,0xa0,0x6c,0x56,0x00,0x0c, +0x10,0x00,0xa4,0x27,0xa7,0x55,0x00,0x0c,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x26, +0x0c,0x00,0x43,0x8c,0x00,0x80,0x04,0x3c,0x25,0x18,0x64,0x00,0x0c,0x00,0x43,0xac, +0x78,0x1b,0x62,0x26,0xc3,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x61,0x0c,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x90,0x43,0xa2,0x96, +0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x30,0x52,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x78,0x1b,0x62,0x8e,0x00,0x00,0x00,0x00,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30, +0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00, +0x00,0x01,0x42,0x30,0xe6,0x00,0x40,0x14,0x02,0x80,0x02,0x3c,0x78,0x1b,0x62,0x26, +0xea,0x02,0x40,0xa0,0x90,0x43,0xa2,0x96,0x01,0x00,0x03,0x24,0x00,0x02,0x42,0x30, +0xe7,0x00,0x43,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x8e,0xfd,0xff,0x03,0x24, +0x24,0x10,0x43,0x00,0x78,0x1b,0x62,0xae,0x25,0xb0,0x04,0x3c,0x4c,0x00,0x83,0x34, +0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0x05,0x00,0x40,0x14, +0x01,0x80,0x05,0x3c,0x78,0x1b,0x62,0x8e,0x3f,0xff,0x03,0x24,0x24,0x10,0x43,0x00, +0x78,0x1b,0x62,0xae,0x18,0x03,0x82,0x34,0xa4,0x21,0xa3,0x24,0x00,0x00,0x43,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x70,0x41,0xc2,0x8e,0x70,0x41,0xc3,0x26,0x11,0x00,0x43,0x10,0x02,0x80,0x02,0x3c, +0xbf,0x00,0x92,0x34,0x78,0x1b,0x51,0x24,0x21,0x80,0x60,0x00,0x21,0xf0,0x00,0x00, +0x00,0x00,0x42,0x92,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x2c,0x08,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0xf8,0x25,0x24,0x8e,0xd9,0x09,0x00,0x0c,0x00,0x00,0x00,0x00, +0x70,0x41,0xc3,0x8e,0x00,0x00,0x00,0x00,0xf5,0xff,0x70,0x14,0x00,0x00,0x00,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c, +0x21,0x28,0x00,0x00,0x08,0x10,0x44,0x24,0x21,0x30,0x00,0x00,0x2d,0x28,0x00,0x0c, +0x21,0x38,0x00,0x00,0x3f,0x48,0x00,0x08,0x78,0x1b,0x67,0x26,0x08,0x00,0x83,0x8c, +0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x08,0x00,0x83,0xac, +0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x30,0xb0,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x78,0x1b,0x65,0x26,0xc8,0x02,0xa4,0x8c,0xff,0x0f,0x02,0x3c, +0xff,0xff,0x42,0x34,0x02,0x1f,0x04,0x00,0x01,0x00,0x63,0x24,0x24,0x20,0x82,0x00, +0x00,0x1f,0x03,0x00,0x25,0x20,0x83,0x00,0x76,0x52,0x00,0x0c,0xc8,0x02,0xa4,0xac, +0x90,0x43,0xa3,0x96,0x25,0xb0,0x02,0x3c,0x64,0x03,0x42,0x34,0x7f,0x00,0x63,0x30, +0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x9a,0x49,0x00,0x08, +0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x43,0x00, +0x78,0x1b,0x62,0xae,0x90,0x43,0xa2,0x96,0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x30, +0xba,0xfe,0x40,0x10,0x00,0x00,0x00,0x00,0x78,0x1b,0x65,0x26,0xc8,0x02,0xa4,0x8c, +0xff,0xf0,0x02,0x3c,0xff,0xff,0x42,0x34,0x02,0x1e,0x04,0x00,0x0f,0x00,0x63,0x30, +0x01,0x00,0x63,0x24,0x0f,0x00,0x63,0x30,0x24,0x20,0x82,0x00,0x00,0x1e,0x03,0x00, +0x25,0x20,0x83,0x00,0xe5,0x50,0x00,0x0c,0xc8,0x02,0xa4,0xac,0x5d,0x52,0x00,0x0c, +0x00,0x00,0x00,0x00,0xa0,0x43,0xe2,0x8e,0x01,0x00,0x03,0x24,0x0f,0x00,0x42,0x30, +0x86,0x05,0x43,0x10,0x02,0x80,0x04,0x3c,0xa0,0x43,0x82,0x8c,0x02,0x00,0x03,0x24, +0x0f,0x00,0x42,0x30,0x83,0x05,0x43,0x10,0x00,0x00,0x00,0x00,0xa0,0x43,0x82,0x8c, +0x03,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x02,0x00,0x43,0x10,0x03,0x00,0x04,0x24, +0x21,0x20,0x00,0x00,0x15,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0x29,0xb0,0x02,0x3c, +0x00,0x00,0x40,0xac,0x08,0x00,0x44,0x34,0x0c,0x00,0x45,0x34,0x10,0x00,0x46,0x34, +0x3c,0x00,0x51,0x34,0x04,0x00,0x43,0x34,0x14,0x00,0x47,0x34,0x18,0x00,0x48,0x34, +0x1c,0x00,0x49,0x34,0x20,0x00,0x4a,0x34,0x24,0x00,0x4b,0x34,0x28,0x00,0x4c,0x34, +0x2c,0x00,0x4d,0x34,0x30,0x00,0x4e,0x34,0x34,0x00,0x4f,0x34,0x38,0x00,0x50,0x34, +0x02,0x80,0x02,0x3c,0x00,0x00,0x60,0xac,0x00,0x00,0x80,0xac,0x00,0x00,0xa0,0xac, +0xff,0xff,0x04,0x24,0x00,0x00,0xc0,0xac,0x21,0x28,0x00,0x00,0x00,0x00,0xe0,0xac, +0x78,0x1b,0x46,0x24,0x00,0x00,0x00,0xad,0x00,0x00,0x20,0xad,0x00,0x00,0x40,0xad, +0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad,0x00,0x00,0xa0,0xad,0x00,0x00,0xc0,0xad, +0x00,0x00,0xe0,0xad,0x00,0x00,0x00,0xae,0x00,0x00,0x20,0xae,0x21,0x18,0xa6,0x00, +0x01,0x00,0xa5,0x24,0x08,0x00,0xa2,0x28,0xfc,0xff,0x40,0x14,0xf0,0x04,0x64,0xa0, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,0x1f,0x00,0x05,0x24,0x90,0x11,0x62,0x8c, +0xff,0xff,0xa5,0x24,0xf0,0x00,0x42,0x34,0x90,0x11,0x62,0xac,0xfb,0xff,0xa1,0x04, +0x94,0x00,0x63,0x24,0x90,0x43,0xa3,0x96,0x25,0xb0,0x02,0x3c,0x64,0x03,0x42,0x34, +0xf7,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0xc5,0x48,0x00,0x08,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x8e,0xb5,0x48,0x00,0x08, +0x24,0x10,0x43,0x00,0x78,0x1b,0x64,0x8e,0xe8,0x02,0xc5,0x8c,0xfe,0xff,0x02,0x24, +0x00,0x90,0x03,0x3c,0x24,0x20,0x82,0x00,0x24,0x18,0xa3,0x00,0x00,0x10,0x02,0x3c, +0x35,0xfe,0x62,0x14,0x78,0x1b,0x64,0xae,0x50,0x0c,0x03,0x35,0xff,0xbf,0x02,0x3c, +0x00,0x00,0x64,0x90,0xff,0xff,0x42,0x34,0x24,0x10,0xa2,0x00,0x00,0x80,0x03,0x3c, +0x25,0x10,0x43,0x00,0xe8,0x02,0xc2,0xac,0xac,0x48,0x00,0x08,0xdb,0x02,0xc4,0xa0, +0x07,0xfe,0x40,0x14,0xc4,0x02,0x23,0x36,0xff,0xff,0x02,0x24,0x21,0xa0,0x00,0x00, +0x00,0x00,0xc0,0xac,0x00,0x00,0x62,0xac,0x8a,0x48,0x00,0x08,0x00,0x00,0x00,0x00, +0xff,0xff,0x03,0x24,0x78,0x1b,0x42,0x24,0xea,0x02,0x43,0xa0,0x90,0x43,0xa2,0x96, +0x01,0x00,0x03,0x24,0x00,0x02,0x42,0x30,0x1b,0xff,0x43,0x14,0x00,0x00,0x00,0x00, +0x78,0x1b,0x62,0x8e,0x25,0xb0,0x03,0x3c,0x77,0x00,0x04,0x24,0x02,0x00,0x42,0x34, +0x99,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x78,0x1b,0x62,0xae,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0xb1,0x49,0x00,0x08,0x25,0xb0,0x04,0x3c,0xa5,0x00,0x82,0x34, +0xf1,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,0x77,0x00,0x40,0x14, +0x00,0xfe,0x06,0x3c,0x28,0x00,0x82,0x34,0x0b,0x03,0xa2,0x10,0x0f,0x00,0x10,0x3c, +0x2b,0x10,0x45,0x00,0xb4,0x00,0x40,0x14,0xa1,0x00,0x82,0x34,0x18,0x00,0x82,0x34, +0x1c,0x03,0xa2,0x10,0x2b,0x10,0x45,0x00,0x41,0x01,0x40,0x14,0x23,0x00,0x82,0x34, +0x16,0x00,0x82,0x34,0xf2,0x03,0xa2,0x10,0x02,0x14,0x12,0x00,0x17,0x00,0x82,0x34, +0xcf,0xfd,0xa2,0x14,0x25,0xb0,0x04,0x3c,0x68,0x03,0x85,0x34,0x00,0x00,0xa3,0x8c, +0x00,0xff,0x42,0x32,0x00,0x12,0x02,0x00,0xff,0xff,0x74,0x30,0x25,0x10,0x54,0x00, +0x00,0x00,0xa2,0xac,0x64,0x03,0x84,0x34,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00, +0xff,0x00,0x54,0x30,0x40,0x00,0x83,0x36,0x00,0x00,0x83,0xa0,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x25,0xb0,0x04,0x3c,0x94,0x0e,0x82,0x34,0x9c,0x0e,0x83,0x34, +0xa4,0x0e,0x85,0x34,0xac,0x0e,0x86,0x34,0x00,0x00,0x49,0x8c,0x00,0x00,0x6c,0x8c, +0xb4,0x0e,0x82,0x34,0x00,0x00,0xae,0x8c,0x10,0x00,0xe3,0x8d,0x00,0x00,0xc8,0x8c, +0x0c,0x00,0xe5,0x8d,0x00,0x00,0x4a,0x8c,0xff,0x3f,0x02,0x3c,0xff,0x03,0x06,0x3c, +0xff,0xff,0x42,0x34,0x00,0xfc,0x07,0x24,0x24,0x18,0x62,0x00,0x24,0x48,0x26,0x01, +0xbc,0x0e,0x82,0x34,0x24,0x40,0x06,0x01,0x00,0x00,0x4b,0x8c,0x24,0x18,0x67,0x00, +0x24,0x28,0xa7,0x00,0x02,0x44,0x08,0x00,0xcc,0x0e,0x8d,0x34,0x02,0x4c,0x09,0x00, +0xc4,0x0e,0x84,0x34,0xf0,0xff,0x02,0x3c,0x00,0x00,0x87,0x8c,0xff,0x03,0x42,0x34, +0x00,0x00,0xa4,0x8d,0x25,0x18,0x68,0x00,0x25,0x28,0xa9,0x00,0x24,0x60,0x86,0x01, +0x24,0x50,0x46,0x01,0xa0,0x43,0x08,0x8e,0x24,0x18,0x62,0x00,0x24,0x28,0xa2,0x00, +0x82,0x61,0x0c,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34, +0x25,0x28,0xac,0x00,0x25,0x18,0x6a,0x00,0x24,0x70,0xc6,0x01,0x24,0x58,0x66,0x01, +0x24,0x18,0x62,0x00,0x24,0x28,0xa2,0x00,0x24,0x20,0x86,0x00,0x00,0x71,0x0e,0x00, +0x00,0x59,0x0b,0x00,0x24,0x38,0xe6,0x00,0xff,0xff,0x02,0x3c,0x25,0x28,0xae,0x00, +0x25,0x18,0x6b,0x00,0x02,0x3c,0x07,0x00,0x02,0x24,0x04,0x00,0x24,0x40,0x02,0x01, +0x0c,0x00,0xe5,0xad,0x10,0x00,0xe3,0xad,0x14,0x00,0xe7,0xa5,0x56,0x00,0x00,0x11, +0x16,0x00,0xe4,0xa5,0xa0,0x43,0x03,0x8e,0xa0,0x43,0x02,0x8e,0x02,0x1c,0x03,0x00, +0x24,0x10,0x51,0x00,0x02,0x16,0x02,0x00,0xc7,0x02,0xe2,0xa1,0xc3,0x02,0xe3,0xa1, +0x6c,0x56,0x00,0x0c,0x10,0x00,0xa4,0x27,0x90,0x43,0xa3,0x96,0x25,0xb0,0x02,0x3c, +0x64,0x03,0x42,0x34,0xbf,0x00,0x63,0x30,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x8b,0x49,0x00,0x08,0x78,0x1b,0x62,0x26,0x10,0x00,0xc2,0x34, +0x7a,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,0x9a,0x00,0x40,0x14,0x19,0x00,0xc2,0x34, +0xaa,0x00,0x82,0x34,0x12,0x03,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00, +0x2d,0x01,0x40,0x14,0xae,0x00,0x82,0x34,0xa6,0x00,0x82,0x34,0xdf,0x03,0xa2,0x10, +0x00,0x00,0x00,0x00,0xa7,0x00,0x82,0x34,0x5a,0xfd,0xa2,0x14,0x25,0xb0,0x02,0x3c, +0x00,0xff,0x42,0x32,0x02,0xa2,0x02,0x00,0x02,0x1c,0x12,0x00,0x01,0x00,0x02,0x24, +0x50,0x04,0x82,0x12,0xff,0x00,0x68,0x30,0x02,0x00,0x02,0x24,0x41,0x04,0x82,0x12, +0xc0,0x10,0x08,0x00,0x03,0x00,0x02,0x24,0x4d,0xfd,0x82,0x16,0xc0,0x10,0x08,0x00, +0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,0x21,0x10,0x48,0x00, +0x08,0x2d,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x02,0x00,0x82,0x34,0x65,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00, +0x8b,0x00,0x40,0x14,0x10,0x00,0xc2,0x34,0x00,0xf8,0x03,0x3c,0x17,0x00,0x62,0x34, +0x4b,0x03,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00,0x0e,0x01,0x40,0x14, +0x15,0x00,0x62,0x34,0x3c,0x04,0xa2,0x10,0x00,0x00,0x00,0x00,0x16,0x00,0x62,0x34, +0x2f,0xfd,0xa2,0x14,0x00,0x00,0x00,0x00,0x58,0x13,0x00,0x0c,0x00,0x00,0x00,0x00, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x12,0x00,0x02,0x24,0xc7,0x02,0xe2,0xa1, +0x0e,0x4b,0x00,0x08,0xc3,0x02,0xe2,0xa1,0xd0,0x02,0xa2,0x10,0x00,0x00,0x00,0x00, +0x2b,0x10,0x45,0x00,0x7f,0x00,0x40,0x14,0xa3,0x00,0x82,0x34,0x29,0x00,0x82,0x34, +0xa6,0x03,0xa2,0x10,0xa0,0x00,0x82,0x34,0x1e,0xfd,0xa2,0x14,0x25,0xb0,0x02,0x3c, +0x00,0x0f,0x42,0x32,0x02,0x22,0x02,0x00,0x01,0x00,0x03,0x24,0x3b,0x04,0x83,0x10, +0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x24,0x45,0x04,0x82,0x10,0x00,0x00,0x00,0x00, +0x03,0x00,0x02,0x24,0xff,0x03,0x82,0x10,0x00,0x00,0x00,0x00,0x15,0x51,0x00,0x0c, +0x21,0x20,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xf1,0x04,0x3c, +0x02,0x00,0x82,0x34,0x0a,0xfd,0xa2,0x10,0x2b,0x10,0x45,0x00,0x1c,0x01,0x40,0x14, +0x04,0x00,0x82,0x34,0x44,0x03,0xa4,0x10,0x26,0xb0,0x06,0x3c,0x01,0x00,0x82,0x34, +0x04,0xfd,0xa2,0x14,0x25,0xb0,0x02,0x3c,0x00,0xff,0x42,0x32,0x02,0xf2,0x02,0x00, +0xba,0x03,0xc0,0x13,0x25,0xb0,0x05,0x3c,0x94,0x00,0xa2,0x34,0x00,0x00,0x43,0x94, +0xb0,0x03,0xa6,0x34,0xff,0xff,0xca,0x27,0xff,0xff,0x74,0x30,0x1b,0x00,0x9e,0x02, +0x02,0x00,0xc0,0x17,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x00,0x00,0xd4,0xac, +0x78,0x1b,0x68,0x26,0x01,0x00,0x02,0x24,0xef,0x0a,0x02,0xa1,0x80,0xff,0x02,0x24, +0x4f,0x00,0xab,0x34,0x9e,0x00,0xac,0x34,0xf2,0x0a,0x09,0x95,0x44,0x00,0xa7,0x34, +0xd8,0x00,0xa5,0x34,0x12,0xa0,0x00,0x00,0x80,0x22,0x14,0x00,0x00,0xf8,0x84,0x24, +0x18,0x00,0xd4,0x03,0xff,0xff,0x5e,0x31,0x00,0x19,0x1e,0x00,0x25,0x18,0x62,0x00, +0x26,0xb0,0x02,0x3c,0x00,0x00,0xde,0xac,0x7c,0x00,0x42,0x34,0x00,0x00,0x63,0xa1, +0x00,0x00,0xd4,0xac,0x00,0x00,0x94,0xa5,0x42,0xa1,0x04,0x00,0x00,0x00,0xd4,0xac, +0x00,0x00,0x54,0xa4,0x00,0x00,0xe3,0x94,0xff,0xfd,0x02,0x24,0x24,0x18,0x62,0x00, +0x00,0x00,0xe3,0xa4,0x00,0x00,0xe4,0x94,0x12,0x68,0x00,0x00,0x23,0x48,0x2d,0x01, +0x00,0x02,0x84,0x34,0xf4,0x0a,0x09,0xa5,0x00,0x00,0xe4,0xa4,0x00,0x00,0xa2,0x90, +0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x34,0x00,0x00,0xa2,0xa0,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x35,0x02,0xa2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x45,0x00, +0xac,0x00,0x40,0x14,0x12,0x00,0xc2,0x34,0xac,0x02,0xa2,0x10,0x00,0x00,0x00,0x00, +0x2b,0x10,0xa2,0x00,0x2d,0x03,0x40,0x14,0x00,0x00,0x00,0x00,0x18,0x00,0xc2,0x34, +0xbf,0xfc,0xa2,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x78,0x1b,0x62,0x26,0x83,0x0b,0x44,0x90, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x26,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,0xd7,0x00,0x40,0x14,0x12,0x00,0xc2,0x34, +0x03,0x00,0x82,0x34,0x23,0x03,0xa2,0x10,0x07,0x00,0xc2,0x34,0xa8,0xfc,0xa2,0x14, +0x00,0x00,0x00,0x00,0x34,0x59,0x00,0x0c,0x21,0x20,0x40,0x02,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x5f,0x01,0xa2,0x10,0x2b,0x10,0x45,0x00,0x01,0x01,0x40,0x14, +0x78,0x1b,0x63,0x26,0x25,0xb0,0x02,0x3c,0xff,0x00,0x03,0x3c,0xc4,0x02,0x42,0x34, +0x00,0xff,0x63,0x34,0x24,0x18,0x43,0x02,0x00,0x00,0x45,0x8c,0x02,0xf2,0x03,0x00, +0x21,0x52,0x00,0x0c,0x21,0x20,0xc0,0x03,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x9e,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00,0xfb,0x00,0x40,0x14,0x24,0x00,0x82,0x34, +0x19,0x00,0x82,0x34,0x8f,0xfc,0xa2,0x14,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c, +0xc0,0x02,0x62,0x34,0x00,0x00,0x40,0xac,0x94,0x0e,0x64,0x34,0x9c,0x0e,0x62,0x34, +0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34,0x00,0x00,0x89,0x8c,0x78,0x1b,0x6f,0x26, +0x00,0x00,0x4b,0x8c,0x00,0x00,0xac,0x8c,0x00,0x00,0xc4,0x8c,0xb4,0x0e,0x62,0x34, +0x0c,0x00,0xe5,0x8d,0x10,0x00,0xe6,0x8d,0x00,0x00,0x4a,0x8c,0xff,0x03,0x07,0x3c, +0x00,0xfc,0x08,0x24,0xbc,0x0e,0x62,0x34,0x24,0x48,0x27,0x01,0x24,0x20,0x87,0x00, +0x00,0x00,0x4d,0x8c,0x24,0x30,0xc8,0x00,0x02,0x4c,0x09,0x00,0x24,0x28,0xa8,0x00, +0x02,0x24,0x04,0x00,0xcc,0x0e,0x68,0x34,0xf0,0xff,0x02,0x3c,0xc4,0x0e,0x63,0x34, +0xff,0x03,0x42,0x34,0x25,0x28,0xa9,0x00,0x25,0x30,0xc4,0x00,0x00,0x00,0x69,0x8c, +0x08,0x00,0xe4,0x8d,0x00,0x00,0x0e,0x8d,0x24,0x58,0x67,0x01,0x24,0x50,0x47,0x01, +0x24,0x30,0xc2,0x00,0x24,0x28,0xa2,0x00,0x82,0x59,0x0b,0x00,0x82,0x51,0x0a,0x00, +0x0f,0xc0,0x03,0x3c,0xff,0x9f,0x02,0x3c,0xff,0xff,0x63,0x34,0xff,0xff,0x42,0x34, +0x25,0x28,0xab,0x00,0x25,0x30,0xca,0x00,0x24,0x60,0x87,0x01,0x24,0x68,0xa7,0x01, +0xff,0x00,0x08,0x3c,0x24,0x20,0x82,0x00,0x24,0x30,0xc3,0x00,0x24,0x28,0xa3,0x00, +0x24,0x70,0xc7,0x01,0x00,0x61,0x0c,0x00,0x00,0x69,0x0d,0x00,0x24,0x48,0x27,0x01, +0x00,0xff,0x03,0x35,0x00,0x20,0x02,0x3c,0x25,0x20,0x82,0x00,0x25,0x28,0xac,0x00, +0x25,0x30,0xcd,0x00,0x02,0x4c,0x09,0x00,0x02,0x74,0x0e,0x00,0x24,0x18,0x43,0x02, +0x08,0x00,0xe4,0xad,0x0c,0x00,0xe5,0xad,0x10,0x00,0xe6,0xad,0x14,0x00,0xe9,0xa5, +0x55,0x03,0x60,0x10,0x16,0x00,0xee,0xa5,0x24,0x10,0x48,0x02,0x02,0x14,0x02,0x00, +0x02,0x1a,0x12,0x00,0xc7,0x02,0xe2,0xa1,0xc3,0x02,0xe3,0xa1,0x78,0x1b,0x62,0x26, +0xc3,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c,0x61,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x6c,0x56,0x00,0x0c,0x10,0x00,0xa4,0x27, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x92,0x02,0xa2,0x10,0x00,0x00,0x00,0x00, +0x2b,0x10,0x45,0x00,0x82,0x00,0x40,0x14,0xaf,0x00,0x82,0x34,0xab,0x00,0x82,0x34, +0x2b,0xfc,0xa2,0x14,0x00,0x00,0x00,0x00,0x54,0x5a,0x00,0x0c,0x21,0x20,0x40,0x02, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x3d,0x02,0xa4,0x10,0x2b,0x10,0x85,0x00, +0x87,0x00,0x40,0x14,0x78,0x1b,0x62,0x26,0x18,0x00,0x62,0x34,0x20,0xfc,0xa2,0x14, +0x00,0x00,0x00,0x00,0xb1,0x13,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x00,0xff,0x03,0x3c,0x0f,0x00,0x62,0x34,0x0d,0x02,0xa2,0x10, +0x2b,0x10,0x45,0x00,0x70,0x00,0x40,0x14,0x10,0x00,0x62,0x34,0x1a,0x00,0xc2,0x34, +0x14,0xfc,0xa2,0x14,0x25,0xb0,0x02,0x3c,0xff,0x00,0x02,0x3c,0x00,0xff,0x42,0x34, +0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x01,0x00,0x03,0x24,0x28,0x03,0xc3,0x13, +0x78,0x1b,0x62,0x26,0x02,0x00,0xc2,0x2b,0x1f,0x03,0x40,0x14,0x03,0x00,0x02,0x24, +0x19,0x03,0xc2,0x13,0x00,0x00,0x00,0x00,0x78,0x1b,0x62,0x26,0x7c,0x0b,0x44,0x94, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0xcd,0x01,0xa2,0x10,0x2b,0x10,0xa2,0x00,0x7b,0x00,0x40,0x14, +0x02,0x14,0x12,0x00,0x08,0x00,0x82,0x34,0xfa,0xfb,0xa2,0x14,0x25,0xb0,0x02,0x3c, +0x00,0xff,0x42,0x32,0x02,0x92,0x02,0x00,0x05,0x00,0x40,0x12,0x21,0x20,0x00,0x00, +0x01,0x00,0x02,0x24,0x02,0x00,0x42,0x12,0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00, +0x95,0x42,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0xe8,0x01,0xa2,0x10,0x2b,0x10,0xa2,0x00,0x68,0x02,0x40,0x14,0x00,0x00,0x00,0x00, +0xe8,0xfb,0xa8,0x14,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x05,0x3c,0xc4,0x02,0xa3,0x34, +0x00,0x00,0x64,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x90,0x82,0x00, +0x01,0x00,0x03,0x3c,0x2b,0x18,0x72,0x00,0xdd,0xfb,0x60,0x10,0x00,0xb0,0x02,0x3c, +0x25,0x90,0x42,0x02,0x00,0x00,0x54,0x8e,0xc8,0x02,0xa2,0x34,0x00,0x00,0x54,0xac, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x75,0x02,0xa2,0x10,0x2b,0x10,0x45,0x00, +0x66,0x00,0x40,0x14,0x02,0x1c,0x12,0x00,0x1f,0x00,0x68,0x30,0xc0,0x10,0x08,0x00, +0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x25,0xb0,0x04,0x3c,0x21,0x10,0x48,0x00, +0x02,0x80,0x03,0x3c,0xc8,0x02,0x85,0x34,0x78,0x1b,0x63,0x24,0xc4,0x02,0x84,0x34, +0x80,0x10,0x02,0x00,0x00,0x00,0x94,0x8c,0x21,0x48,0x43,0x00,0x00,0x00,0xa7,0x8c, +0x21,0x58,0x80,0x00,0x21,0x28,0x00,0x00,0xff,0x00,0x0a,0x24,0x29,0xb0,0x06,0x3c, +0x21,0x20,0xa3,0x00,0xf0,0x04,0x82,0x90,0x00,0x00,0x00,0x00,0x6a,0x02,0x4a,0x10, +0x00,0x00,0x00,0x00,0x68,0x02,0x48,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0xa5,0x24, +0x08,0x00,0xa2,0x28,0xf6,0xff,0x40,0x14,0x08,0x00,0xc6,0x24,0x08,0x00,0x02,0x24, +0xb3,0xfb,0xa2,0x14,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xff,0xff,0x03,0x24, +0xc4,0x02,0x42,0x34,0x00,0x00,0x43,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0xab,0xfb,0xa2,0x14,0x00,0x00,0x00,0x00,0xe5,0x50,0x00,0x0c,0x00,0x00,0x00,0x00, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0xfb,0xa2,0x14,0x25,0xb0,0x02,0x3c, +0x00,0xff,0x43,0x32,0x00,0xff,0x02,0x34,0x5f,0x00,0x62,0x14,0x78,0x1b,0x62,0x26, +0x78,0x1b,0x63,0x26,0xff,0xff,0x02,0x34,0x86,0x48,0x00,0x08,0xec,0x25,0x62,0xac, +0x04,0x24,0x43,0x8c,0xfd,0xff,0x04,0x24,0x24,0x18,0x64,0x00,0x01,0x00,0x63,0x34, +0x86,0x48,0x00,0x08,0x04,0x24,0x43,0xac,0x96,0xfb,0xa2,0x14,0x25,0xb0,0x02,0x3c, +0x78,0x1b,0x65,0x26,0xd8,0x02,0xa3,0x8c,0x0f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x12,0x01,0x04,0x3c,0x25,0xb0,0x02,0x3c,0x0c,0x09,0x42,0x34, +0x13,0x13,0x84,0x34,0xd8,0x02,0xa3,0xac,0x00,0x00,0x44,0xac,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x43,0x32, +0xff,0x00,0x5e,0x30,0x04,0x00,0xc0,0x13,0x02,0x92,0x03,0x00,0x01,0x00,0x02,0x24, +0x02,0x00,0xc2,0x13,0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00,0x95,0x42,0x00,0x0c, +0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xe3,0x44,0x00,0x0c,0x21,0x20,0x40,0x02, +0xff,0xff,0x10,0x36,0x24,0xa0,0x50,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34, +0x00,0x00,0x54,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x1f,0x00,0x68,0x30, +0xc0,0x10,0x08,0x00,0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x48,0x00, +0x80,0x10,0x02,0x00,0x78,0x1b,0x64,0x26,0x21,0x30,0x44,0x00,0x90,0x11,0xc3,0x90, +0x0f,0x00,0x02,0x24,0x02,0x29,0x03,0x00,0xaf,0xff,0xa2,0x10,0x21,0x18,0xa4,0x00, +0xf0,0x04,0x62,0x90,0x00,0x00,0x00,0x00,0xab,0xff,0x48,0x14,0xc0,0x20,0x05,0x00, +0xff,0xff,0x02,0x24,0xf0,0x04,0x62,0xa0,0x90,0x11,0xc3,0x8c,0x29,0xb0,0x02,0x3c, +0x21,0x20,0x82,0x00,0x25,0xb0,0x02,0x3c,0xf0,0x00,0x63,0x34,0xc4,0x02,0x42,0x34, +0x90,0x11,0xc3,0xac,0x00,0x00,0x80,0xac,0x04,0x00,0x80,0xac,0x00,0x00,0x45,0xac, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x42,0x34,0x24,0x10,0x42,0x02, +0x25,0xb0,0x03,0x3c,0x02,0x92,0x02,0x00,0x21,0x10,0x43,0x02,0x00,0x00,0x54,0x8c, +0xc4,0x02,0x63,0x34,0x00,0x00,0x74,0xac,0x00,0x00,0x54,0x8c,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x78,0x1b,0x62,0x26,0x86,0x48,0x00,0x08,0xec,0x25,0x40,0xac, +0xdb,0x02,0xe3,0x90,0x50,0x0c,0x02,0x35,0x21,0x28,0x00,0x00,0x00,0x00,0x43,0xa0, +0x01,0x00,0xa2,0x24,0xff,0x00,0x45,0x30,0x06,0x00,0xa3,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0xa2,0x24,0x78,0x1b,0x62,0x26,0xdb,0x02,0x44,0x90,0x25,0xb0,0x03,0x3c, +0x58,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x78,0x1b,0x65,0x26,0xe8,0x02,0xa3,0x8c,0x00,0x40,0x04,0x3c,0xff,0x7f,0x02,0x3c, +0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xac,0x48,0x00,0x08, +0xe8,0x02,0xa3,0xac,0x00,0xff,0x62,0x34,0x24,0x10,0x42,0x02,0x21,0xfb,0x40,0x10, +0x25,0xb0,0x02,0x3c,0x08,0x03,0xe5,0x90,0x24,0x18,0x43,0x02,0x00,0xff,0x44,0x32, +0x02,0x1c,0x03,0x00,0x02,0x22,0x04,0x00,0x00,0x01,0xa5,0x34,0xfb,0xff,0x66,0x24, +0xfb,0xff,0x82,0x24,0x23,0x03,0xe2,0xa0,0x08,0x03,0xe5,0xac,0x21,0x03,0xe6,0xa0, +0x20,0x03,0xe3,0xa0,0x86,0x48,0x00,0x08,0x22,0x03,0xe4,0xa0,0x07,0x49,0x00,0x08, +0x01,0x00,0x04,0x24,0xdd,0x48,0x00,0x08,0x01,0x00,0x04,0x24,0x07,0x49,0x00,0x08, +0x02,0x00,0x04,0x24,0xdd,0x48,0x00,0x08,0x02,0x00,0x04,0x24,0xc4,0x02,0x23,0x36, +0x00,0x00,0x64,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x90,0x82,0x00, +0x01,0x00,0x03,0x3c,0x2b,0x18,0x72,0x00,0x01,0xfb,0x60,0x10,0xc8,0x02,0x22,0x36, +0x00,0x00,0x54,0x8c,0x00,0xb0,0x03,0x3c,0x25,0x90,0x43,0x02,0x00,0x00,0x54,0xae, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x6c,0x56,0x00,0x0c,0x10,0x00,0xa4,0x27, +0x8b,0x49,0x00,0x08,0x78,0x1b,0x62,0x26,0x76,0x52,0x00,0x0c,0x10,0x00,0xeb,0xad, +0x73,0x49,0x00,0x08,0x78,0x1b,0x63,0x26,0x24,0x20,0x43,0x02,0x5b,0x52,0x00,0x0c, +0x02,0x24,0x04,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x82,0x0b,0xe2,0x90, +0x00,0x00,0x00,0x00,0x31,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0xff,0x62,0x34, +0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x01,0x00,0x02,0x24,0x21,0x20,0xc0,0x03, +0x82,0x0b,0xe2,0xa0,0x2c,0x22,0x00,0x0c,0x83,0x0b,0xfe,0xa0,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x04,0x24,0xe2,0x8c,0xfe,0xff,0x03,0x24,0x02,0x00,0x42,0x34,0x24,0x10,0x43,0x00, +0x86,0x48,0x00,0x08,0x04,0x24,0xe2,0xac,0xff,0xff,0x05,0x36,0x60,0x00,0x06,0x24, +0xb8,0x44,0x00,0x0c,0x24,0x00,0x04,0x24,0x9c,0x12,0x00,0x0c,0xe8,0x03,0x04,0x24, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x24,0x00,0x04,0x24,0xe3,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,0x1f,0x00,0x54,0x30, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c, +0x64,0x00,0x04,0x24,0xc4,0x02,0x22,0x36,0x00,0x00,0x54,0xa0,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x08,0x00,0xe3,0x8c,0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x86,0x48,0x00,0x08,0x08,0x00,0xe3,0xac,0xc8,0x02,0xe4,0x8c, +0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0x02,0x1f,0x04,0x00,0x01,0x00,0x63,0x24, +0x24,0x20,0x82,0x00,0x00,0x1f,0x03,0x00,0x25,0x20,0x83,0x00,0xc8,0x02,0xe4,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x76,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x62,0x34, +0xc4,0x02,0x24,0x36,0x00,0x00,0x94,0x8c,0x24,0x10,0x42,0x02,0x02,0x92,0x02,0x00, +0x21,0x18,0x51,0x02,0x00,0x00,0x74,0xac,0x00,0x00,0x74,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x94,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x82,0x0b,0xe3,0x90, +0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x29,0xb0,0x02,0x3c, +0x00,0x00,0x40,0xac,0x04,0x00,0x44,0x34,0x08,0x00,0x45,0x34,0x0c,0x00,0x46,0x34, +0x3c,0x00,0x43,0x34,0x10,0x00,0x47,0x34,0x14,0x00,0x48,0x34,0x18,0x00,0x49,0x34, +0x1c,0x00,0x4a,0x34,0x20,0x00,0x4b,0x34,0x24,0x00,0x4c,0x34,0x28,0x00,0x4d,0x34, +0x2c,0x00,0x4e,0x34,0x30,0x00,0x4f,0x34,0x34,0x00,0x50,0x34,0x38,0x00,0x51,0x34, +0x02,0x80,0x02,0x3c,0x00,0x00,0x80,0xac,0x00,0x00,0xa0,0xac,0xff,0xff,0x04,0x24, +0x00,0x00,0xc0,0xac,0x21,0x28,0x00,0x00,0x00,0x00,0xe0,0xac,0x78,0x1b,0x46,0x24, +0x00,0x00,0x00,0xad,0x00,0x00,0x20,0xad,0x00,0x00,0x40,0xad,0x00,0x00,0x60,0xad, +0x00,0x00,0x80,0xad,0x00,0x00,0xa0,0xad,0x00,0x00,0xc0,0xad,0x00,0x00,0xe0,0xad, +0x00,0x00,0x00,0xae,0x00,0x00,0x20,0xae,0x00,0x00,0x60,0xac,0x21,0x18,0xa6,0x00, +0x01,0x00,0xa5,0x24,0x08,0x00,0xa2,0x28,0xfc,0xff,0x40,0x14,0xf0,0x04,0x64,0xa0, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24,0x1f,0x00,0x05,0x24,0x90,0x11,0x62,0x8c, +0xff,0xff,0xa5,0x24,0xf0,0x00,0x42,0x34,0x90,0x11,0x62,0xac,0xfb,0xff,0xa1,0x04, +0x94,0x00,0x63,0x24,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x24,0x20,0x43,0x02, +0xc6,0x15,0x00,0x0c,0x02,0x24,0x04,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x6e,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x02,0x1a,0x08,0x00,0xff,0x00,0x02,0x24,0x2b,0x01,0x62,0x10,0x25,0xb0,0x05,0x3c, +0x0e,0x00,0x60,0x14,0x00,0xcc,0x02,0x34,0x25,0xb0,0x04,0x3c,0x64,0x03,0x84,0x34, +0x78,0x1b,0x67,0x26,0x00,0x00,0x85,0x94,0xe8,0x02,0xe6,0x8c,0xff,0xef,0x02,0x3c, +0xff,0xfe,0x03,0x24,0xff,0xff,0x42,0x34,0x24,0x28,0xa3,0x00,0x24,0x30,0xc2,0x00, +0x00,0x00,0x85,0xa4,0xe8,0x02,0xe6,0xac,0x00,0xcc,0x02,0x34,0x39,0xfa,0x02,0x15, +0x25,0xb0,0x02,0x3c,0x78,0x1b,0x62,0x26,0xe8,0x02,0x43,0x8c,0x00,0x10,0x04,0x3c, +0x25,0x18,0x64,0x00,0x86,0x48,0x00,0x08,0xe8,0x02,0x43,0xac,0x24,0x10,0x43,0x02, +0x02,0xf4,0x02,0x00,0x00,0xff,0x43,0x32,0x04,0x00,0xc0,0x13,0x02,0x92,0x03,0x00, +0x01,0x00,0x02,0x24,0x02,0x00,0xc2,0x13,0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00, +0x25,0xb0,0x10,0x3c,0x95,0x42,0x00,0x0c,0xc4,0x02,0x10,0x36,0x00,0x00,0x14,0x8e, +0x0f,0x00,0x11,0x3c,0x21,0x20,0x40,0x02,0x21,0x30,0x80,0x02,0xb8,0x44,0x00,0x0c, +0xff,0xff,0x25,0x36,0x21,0x20,0x40,0x02,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36, +0x00,0x00,0x02,0xae,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0xff,0x62,0x34, +0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x78,0x1b,0x63,0x26,0x83,0x0b,0x7e,0xa0, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xff,0x00,0x02,0x24,0x56,0x01,0x63,0x34, +0x00,0x00,0x62,0xa4,0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0x86,0x48,0x00,0x08, +0x80,0x43,0x44,0xa0,0x24,0x10,0x43,0x02,0x02,0xa4,0x02,0x00,0x00,0xff,0x43,0x32, +0x07,0x00,0x82,0x2e,0xfe,0xf9,0x40,0x10,0x02,0xf2,0x03,0x00,0x02,0x80,0x04,0x3c, +0xbc,0xaf,0x83,0x24,0x80,0x10,0x14,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c, +0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x78,0x1b,0x65,0x26, +0xd8,0x02,0xa3,0x8c,0x0f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x10,0x00,0x04,0x3c,0x25,0x18,0x64,0x00,0x86,0x48,0x00,0x08,0xd8,0x02,0xa3,0xac, +0xe4,0x13,0x00,0x0c,0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x78,0x1b,0x65,0x26,0x04,0x24,0xa2,0x8c,0xfd,0xff,0x03,0x24,0xfe,0xff,0x04,0x24, +0x24,0x10,0x43,0x00,0x24,0x10,0x44,0x00,0x86,0x48,0x00,0x08,0x04,0x24,0xa2,0xac, +0x1f,0x00,0x48,0x30,0xc0,0x18,0x08,0x00,0x21,0x18,0x68,0x00,0x00,0x0f,0x45,0x32, +0x80,0x18,0x03,0x00,0x02,0x2a,0x05,0x00,0x78,0x1b,0x64,0x26,0x25,0xb0,0x02,0x3c, +0x21,0x18,0x68,0x00,0x21,0x30,0xa4,0x00,0xc8,0x02,0x47,0x34,0x80,0x18,0x03,0x00, +0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0x8c,0x21,0x18,0x64,0x00,0x00,0x00,0xe7,0x8c, +0xf0,0x04,0xc8,0xa0,0x90,0x11,0x64,0x8c,0x0f,0xff,0x02,0x24,0xc0,0x30,0x05,0x00, +0x24,0x20,0x82,0x00,0x00,0x29,0x05,0x00,0x29,0xb0,0x02,0x3c,0x21,0x30,0xc2,0x00, +0x25,0x20,0x85,0x00,0x90,0x11,0x64,0xac,0x00,0x00,0xd4,0xac,0x04,0x00,0xc7,0xac, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x65,0x34,0x24,0x28,0x45,0x02, +0x25,0xb0,0x04,0x3c,0x02,0x2a,0x05,0x00,0x94,0x00,0x83,0x34,0x40,0x11,0x05,0x00, +0x00,0x00,0x65,0xa4,0xc0,0xff,0x54,0x24,0x7c,0x00,0xcc,0x34,0x04,0x00,0x07,0x24, +0x9a,0x00,0x88,0x34,0x98,0x00,0x89,0x34,0x96,0x00,0x8a,0x34,0x7a,0x00,0xc6,0x34, +0xb0,0x03,0x8b,0x34,0x00,0x04,0x02,0x24,0xa0,0x00,0x03,0x24,0x00,0x00,0x02,0xa5, +0x44,0x00,0x84,0x34,0x00,0x00,0x23,0xa5,0x00,0x00,0x47,0xa5,0x00,0x00,0xc7,0xa0, +0x00,0x00,0x74,0xad,0x00,0x00,0x94,0xa5,0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24, +0x78,0x1b,0x66,0x26,0x24,0x18,0x62,0x00,0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94, +0xf2,0x0a,0xc5,0xa4,0x00,0x02,0x42,0x34,0x00,0x00,0x82,0xa4,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x24,0x20,0x43,0x02,0x00,0xff,0x45,0x32,0x02,0x24,0x04,0x00, +0x97,0x50,0x00,0x0c,0x02,0x2a,0x05,0x00,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34, +0x00,0x00,0x62,0xa0,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xff,0x00,0x02,0x3c, +0x00,0xff,0x42,0x34,0x24,0x10,0x42,0x02,0x02,0xf2,0x02,0x00,0x78,0x1b,0x63,0x26, +0x21,0x20,0xc0,0x03,0x2c,0x22,0x00,0x0c,0x82,0x0b,0x60,0xa0,0xa9,0x4d,0x00,0x08, +0x00,0x00,0x00,0x00,0x78,0x1b,0x63,0x26,0x04,0x24,0x62,0x8c,0x00,0x00,0x00,0x00, +0x03,0x00,0x42,0x34,0x86,0x48,0x00,0x08,0x04,0x24,0x62,0xac,0x6f,0x0b,0x00,0x0c, +0x21,0x20,0xc0,0x03,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x5d,0x52,0x00,0x0c, +0x00,0x00,0x00,0x00,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0x1c,0x12,0x00, +0x00,0x1f,0x42,0x32,0x78,0x1b,0x70,0x26,0x02,0xa2,0x02,0x00,0x3f,0x00,0x67,0x30, +0xc1,0x02,0x07,0xa2,0xbc,0x02,0x14,0xa2,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x22,0x1b,0x00,0x0c,0x00,0x00,0x00,0x00, +0x21,0xa0,0x40,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x03,0x00,0x02,0x92, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0x86,0x48,0x00,0x08,0x03,0x00,0x02,0xa2, +0x24,0x18,0x43,0x02,0x02,0x44,0x03,0x00,0xc0,0x10,0x08,0x00,0x21,0x10,0x48,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x48,0x00,0x00,0xff,0x44,0x32,0x80,0x10,0x02,0x00, +0x78,0x1b,0x63,0x26,0x21,0x10,0x43,0x00,0x02,0xa1,0x04,0x00,0x80,0x11,0x54,0xac, +0x86,0x48,0x00,0x08,0x84,0x11,0x54,0xac,0xf0,0x04,0x88,0xa0,0x90,0x11,0x22,0x8d, +0x0f,0x00,0xa3,0x30,0x0f,0xff,0x04,0x24,0x00,0x19,0x03,0x00,0x24,0x10,0x44,0x00, +0x25,0x10,0x43,0x00,0x90,0x11,0x22,0xad,0x00,0x00,0xd4,0xac,0x04,0x00,0xc7,0xac, +0x00,0x00,0x65,0xad,0xd2,0x4c,0x00,0x08,0x08,0x00,0x02,0x24,0x4f,0x00,0xa2,0x34, +0x9e,0x00,0xa3,0x34,0x00,0x00,0x40,0xa0,0x00,0x00,0x60,0xa4,0x94,0x00,0xa2,0x34, +0x00,0x00,0x43,0x94,0x9a,0x00,0xa4,0x34,0x98,0x00,0xa6,0x34,0xff,0xff,0x74,0x30, +0x80,0x12,0x14,0x00,0x00,0xf8,0x42,0x24,0x42,0xa1,0x02,0x00,0x00,0x14,0x02,0x24, +0x00,0x00,0x82,0xa4,0x26,0xb0,0x02,0x3c,0xb0,0x03,0xa7,0x34,0xa0,0x80,0x03,0x24, +0x7c,0x00,0x42,0x34,0x00,0x00,0xc3,0xa4,0x44,0x00,0xa4,0x34,0x00,0x00,0xf4,0xac, +0x00,0x00,0x54,0xa4,0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24,0xd8,0x00,0xa5,0x34, +0x24,0x18,0x62,0x00,0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94,0x78,0x1b,0x66,0x26, +0x00,0x02,0x42,0x34,0x00,0x00,0x82,0xa4,0x00,0x00,0xa3,0x90,0xbf,0xff,0x02,0x24, +0xf4,0x0a,0xc0,0xa4,0x24,0x18,0x62,0x00,0xef,0x0a,0xc0,0xa0,0x00,0x00,0xa3,0xa0, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x64,0x03,0xa5,0x34,0x78,0x1b,0x66,0x26, +0x00,0x00,0xa3,0x94,0xe8,0x02,0xc4,0x8c,0xff,0xef,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x20,0x82,0x00,0x00,0x01,0x63,0x34,0x00,0x00,0xa3,0xa4,0x4c,0x4e,0x00,0x08, +0xe8,0x02,0xc4,0xac,0x15,0x51,0x00,0x0c,0x03,0x00,0x04,0x24,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x48,0x00, +0x78,0x1b,0x63,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x8c,0x11,0x44,0x8c, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0x87,0x48,0x00,0x08, +0x25,0xb0,0x02,0x3c,0xc0,0x10,0x08,0x00,0x21,0x10,0x48,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x48,0x00,0x78,0x1b,0x63,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00, +0x88,0x11,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x1e,0x13,0x00,0x0c,0x00,0x00,0x00,0x00, +0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x12,0x00,0x02,0x24,0xc7,0x02,0xe2,0xa1, +0x45,0x4c,0x00,0x08,0xc3,0x02,0xe2,0xa1,0x78,0x1b,0x62,0x26,0x7e,0x0b,0x44,0x94, +0x43,0x4b,0x00,0x08,0x25,0xb0,0x03,0x3c,0xe3,0xfc,0xc0,0x17,0x25,0xb0,0x03,0x3c, +0x78,0x1b,0x62,0x26,0x78,0x0b,0x44,0x94,0x44,0x4b,0x00,0x08,0xc4,0x02,0x63,0x34, +0x7a,0x0b,0x44,0x94,0x43,0x4b,0x00,0x08,0x25,0xb0,0x03,0x3c,0x2b,0x4a,0x00,0x08, +0x01,0x00,0x04,0x24,0x2b,0x4a,0x00,0x08,0x02,0x00,0x04,0x24,0x15,0x51,0x00,0x0c, +0x01,0x00,0x04,0x24,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x19,0x1e,0x00, +0x78,0x1b,0x62,0x26,0x21,0x18,0x62,0x00,0x36,0x03,0x64,0x94,0x25,0xb0,0x02,0x3c, +0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x15,0x51,0x00,0x0c,0x02,0x00,0x04,0x24,0x87,0x48,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26,0x21,0x18,0x62,0x00,0x35,0x03,0x64,0x90, +0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26, +0x21,0x18,0x62,0x00,0x34,0x03,0x64,0x90,0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26,0x21,0x18,0x62,0x00,0x32,0x03,0x64,0x94, +0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x19,0x1e,0x00,0x78,0x1b,0x62,0x26, +0x21,0x18,0x62,0x00,0x30,0x03,0x64,0x94,0xb2,0x4f,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0x11,0x1e,0x00,0x78,0x1b,0x63,0x26,0x21,0x10,0x43,0x00,0x2c,0x03,0x44,0x8c, +0xb1,0x4f,0x00,0x08,0x42,0x26,0x04,0x00,0x00,0x11,0x1e,0x00,0x78,0x1b,0x63,0x26, +0x21,0x10,0x43,0x00,0x2f,0x03,0x44,0x90,0xb1,0x4f,0x00,0x08,0x01,0x00,0x84,0x30, +0x25,0xb0,0x05,0x3c,0x01,0x00,0x06,0x24,0x01,0x80,0x02,0x3c,0x04,0x30,0x86,0x00, +0xf1,0x02,0xa7,0x34,0xed,0x02,0xa4,0x34,0x78,0x3f,0x42,0x24,0x18,0x03,0xa5,0x34, +0x08,0x00,0x03,0x24,0x00,0x00,0xa2,0xac,0x00,0x00,0xe3,0xa0,0x00,0x00,0x80,0xa0, +0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0, +0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0, +0x00,0x00,0xe0,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c, +0x25,0xb0,0x03,0x3c,0xd4,0x3f,0x42,0x24,0x18,0x03,0x63,0x34,0x00,0x00,0x62,0xac, +0x00,0x00,0x83,0x90,0x30,0x00,0x02,0x24,0x05,0x00,0x62,0x10,0x21,0x20,0x00,0x00, +0x31,0x00,0x02,0x24,0x02,0x00,0x62,0x10,0x01,0x00,0x04,0x24,0x07,0x00,0x04,0x24, +0xde,0x4f,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c, +0x10,0x40,0x42,0x24,0x18,0x03,0x63,0x34,0x02,0x80,0x04,0x3c,0x00,0x00,0x62,0xac, +0x08,0x00,0xe0,0x03,0x8c,0x43,0x80,0xac,0x02,0x80,0x03,0x3c,0x98,0x41,0x62,0x8c, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,0x80,0x80,0x10,0x00, +0x21,0x80,0x04,0x02,0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x80,0x10,0x00, +0x21,0x80,0x02,0x02,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf, +0x90,0x11,0x05,0x8e,0xff,0x1f,0x02,0x3c,0x25,0xb0,0x12,0x3c,0xff,0xff,0x42,0x34, +0xf8,0xff,0x03,0x24,0x88,0x11,0x02,0xae,0x84,0x01,0x46,0x36,0x24,0x28,0xa3,0x00, +0xff,0xfe,0x02,0x24,0x00,0x00,0xc7,0x8c,0x24,0x28,0xa2,0x00,0xff,0xef,0x03,0x24, +0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x28,0xa3,0x00,0x24,0x28,0xa2,0x00, +0x8c,0x11,0x07,0xae,0x90,0x11,0x05,0xae,0x96,0x15,0x00,0x0c,0x21,0x88,0x80,0x00, +0x92,0x11,0x02,0x92,0x21,0x88,0x32,0x02,0x1c,0x00,0xbf,0x8f,0x60,0x01,0x22,0xa2, +0x18,0x00,0xb2,0x8f,0x7c,0x11,0x00,0xae,0x60,0x11,0x00,0xae,0x64,0x11,0x00,0xae, +0x68,0x11,0x00,0xae,0x6c,0x11,0x00,0xae,0x70,0x11,0x00,0xae,0x74,0x11,0x00,0xae, +0x78,0x11,0x00,0xae,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xff,0x00,0xa5,0x30,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24, +0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x90,0x11,0x43,0x8c,0x25,0xb0,0x05,0x3c, +0xff,0x00,0xc6,0x30,0x21,0x30,0xc5,0x00,0xaf,0x01,0xc2,0x90,0x07,0x00,0x63,0x30, +0x80,0x18,0x03,0x00,0x21,0x18,0x65,0x00,0xff,0x00,0x88,0x30,0xff,0x00,0x49,0x30, +0x84,0x01,0x66,0x8c,0x21,0x50,0x00,0x00,0x21,0x58,0x00,0x00,0x2b,0x00,0x20,0x11, +0x21,0x20,0x00,0x01,0x2b,0x00,0xc0,0x10,0x2b,0x10,0x09,0x01,0x21,0x28,0x00,0x00, +0x6c,0x50,0x00,0x08,0x01,0x00,0x07,0x24,0xff,0x00,0x65,0x30,0x1d,0x00,0xa2,0x2c, +0x07,0x00,0x40,0x10,0xff,0xff,0x02,0x25,0x04,0x10,0xa7,0x00,0x24,0x10,0x46,0x00, +0xf9,0xff,0x40,0x10,0x01,0x00,0xa3,0x24,0x21,0x58,0xa0,0x00,0xff,0xff,0x02,0x25, +0xff,0x00,0x45,0x30,0x2b,0x18,0xab,0x00,0x0f,0x00,0x60,0x14,0x2b,0x10,0x49,0x01, +0x01,0x00,0x04,0x24,0x04,0x10,0xa4,0x00,0x24,0x10,0x46,0x00,0xff,0xff,0xa7,0x24, +0x04,0x00,0x40,0x10,0x01,0x00,0x43,0x25,0x17,0x00,0x49,0x11,0xff,0x00,0x6a,0x30, +0x21,0x40,0xa0,0x00,0xff,0x00,0xe5,0x30,0x2b,0x10,0xab,0x00,0xf6,0xff,0x40,0x10, +0x04,0x10,0xa4,0x00,0x2b,0x10,0x49,0x01,0x08,0x00,0x40,0x10,0x21,0x20,0x00,0x01, +0x23,0x10,0x2a,0x01,0x2a,0x10,0x62,0x01,0x04,0x00,0x40,0x14,0x21,0x20,0x00,0x00, +0x23,0x10,0x69,0x01,0x21,0x10,0x4a,0x00,0xff,0x00,0x44,0x30,0x08,0x00,0xe0,0x03, +0x21,0x10,0x80,0x00,0xfd,0xff,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x09,0x01, +0x8d,0x50,0x00,0x08,0xff,0x00,0x44,0x30,0x21,0x20,0x00,0x01,0x08,0x00,0xe0,0x03, +0x21,0x10,0x80,0x00,0xff,0x00,0x84,0x30,0xc0,0x10,0x04,0x00,0x21,0x10,0x44,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24, +0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x25,0xb0,0x06,0x3c,0x90,0x11,0x43,0x8c, +0xff,0x00,0xa5,0x30,0x21,0x20,0x86,0x00,0x21,0x28,0xa6,0x00,0x60,0x01,0x82,0x90, +0xaf,0x01,0xa4,0x90,0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x66,0x00, +0xff,0x00,0x48,0x30,0xff,0x00,0x89,0x30,0x84,0x01,0x66,0x8c,0x21,0x50,0x00,0x00, +0x21,0x58,0x00,0x00,0x2b,0x00,0x20,0x11,0x21,0x20,0x00,0x01,0x2b,0x00,0xc0,0x10, +0x2b,0x10,0x09,0x01,0x21,0x28,0x00,0x00,0xba,0x50,0x00,0x08,0x01,0x00,0x07,0x24, +0xff,0x00,0x65,0x30,0x1d,0x00,0xa2,0x2c,0x07,0x00,0x40,0x10,0xff,0xff,0x02,0x25, +0x04,0x10,0xa7,0x00,0x24,0x10,0x46,0x00,0xf9,0xff,0x40,0x10,0x01,0x00,0xa3,0x24, +0x21,0x58,0xa0,0x00,0xff,0xff,0x02,0x25,0xff,0x00,0x45,0x30,0x2b,0x18,0xab,0x00, +0x0f,0x00,0x60,0x14,0x2b,0x10,0x49,0x01,0x01,0x00,0x04,0x24,0x04,0x10,0xa4,0x00, +0x24,0x10,0x46,0x00,0xff,0xff,0xa7,0x24,0x04,0x00,0x40,0x10,0x01,0x00,0x43,0x25, +0x17,0x00,0x49,0x11,0xff,0x00,0x6a,0x30,0x21,0x40,0xa0,0x00,0xff,0x00,0xe5,0x30, +0x2b,0x10,0xab,0x00,0xf6,0xff,0x40,0x10,0x04,0x10,0xa4,0x00,0x2b,0x10,0x49,0x01, +0x08,0x00,0x40,0x10,0x21,0x20,0x00,0x01,0x23,0x10,0x2a,0x01,0x2a,0x10,0x62,0x01, +0x04,0x00,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x69,0x01,0x21,0x10,0x4a,0x00, +0xff,0x00,0x44,0x30,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xfd,0xff,0x40,0x14, +0x21,0x20,0x00,0x00,0x23,0x10,0x09,0x01,0xdb,0x50,0x00,0x08,0xff,0x00,0x44,0x30, +0x21,0x20,0x00,0x01,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xd8,0xff,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x18,0x00,0xb2,0xaf,0xff,0xff,0x03,0x3c,0x78,0x1b,0x52,0x24, +0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x20,0x00,0xbf,0xaf, +0xff,0x1f,0x73,0x34,0x21,0x88,0x00,0x00,0x21,0x80,0x40,0x02,0x19,0x50,0x00,0x0c, +0x21,0x20,0x20,0x02,0x90,0x11,0x02,0x8e,0x21,0x28,0x00,0x00,0x24,0x10,0x53,0x00, +0x00,0x20,0x42,0x34,0x90,0x11,0x02,0xae,0x92,0x11,0x03,0x92,0x00,0x00,0x00,0x00, +0x80,0x18,0x03,0x00,0x21,0x18,0x72,0x00,0xf8,0x04,0x64,0x8c,0x6c,0x05,0x62,0x8c, +0x00,0x00,0x00,0x00,0x21,0x10,0x44,0x00,0x42,0x10,0x02,0x00,0x5c,0x11,0x02,0xae, +0x21,0x10,0x05,0x02,0x01,0x00,0xa5,0x24,0x1d,0x00,0xa3,0x28,0xce,0x11,0x40,0xa0, +0x94,0x11,0x40,0xa0,0xfa,0xff,0x60,0x14,0xb1,0x11,0x40,0xa0,0x01,0x00,0x31,0x26, +0x20,0x00,0x22,0x2a,0xec,0x11,0x00,0xae,0xe4,0xff,0x40,0x14,0x94,0x00,0x10,0x26, +0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xc0,0xff,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x2c,0x00,0xb5,0xaf,0x78,0x1b,0x46,0x24,0x3c,0x00,0xbf,0xaf, +0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0xec,0x25,0xc2,0x8c,0xff,0x00,0x03,0x24,0xff,0x00,0x8d,0x30,0xff,0xff,0x42,0x38, +0x0b,0x18,0x02,0x00,0xff,0xff,0x04,0x34,0x10,0x00,0xa3,0xaf,0xec,0x25,0xc4,0xac, +0xb9,0x00,0xa0,0x11,0x08,0x00,0x15,0x24,0x02,0x80,0x02,0x3c,0xdc,0xad,0x45,0x24, +0x94,0x04,0xc4,0x24,0x36,0x51,0x00,0x08,0x21,0x88,0x00,0x00,0x01,0x00,0x31,0x26, +0x00,0x00,0x82,0xa0,0x1d,0x00,0x22,0x2a,0x0b,0x00,0x40,0x10,0x01,0x00,0x84,0x24, +0x21,0x10,0x25,0x02,0x00,0x00,0x42,0x90,0x00,0x00,0x00,0x00,0xf7,0xff,0x40,0x10, +0xfd,0xff,0x43,0x24,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x00,0x00,0x83,0xa0, +0xf7,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,0x78,0x1b,0x4a,0x24, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x74,0xab,0x6c,0x24,0xfc,0xaa,0x4b,0x24, +0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01, +0x21,0x38,0x2c,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90, +0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc9,0x03,0x64,0xa0, +0xf8,0xff,0x40,0x14,0x38,0x03,0x65,0xa0,0x21,0x10,0x2b,0x02,0x1d,0x00,0x44,0x90, +0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a, +0x77,0x04,0x64,0xa0,0x5a,0x04,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25, +0xaf,0x00,0xa0,0x11,0x02,0x80,0x02,0x3c,0x78,0x1b,0x48,0x24,0x02,0x80,0x03,0x3c, +0x02,0x80,0x02,0x3c,0x70,0xae,0x69,0x24,0xfc,0xad,0x47,0x24,0x21,0x88,0x00,0x00, +0x80,0x18,0x11,0x00,0x21,0x10,0x69,0x00,0x21,0x20,0x67,0x00,0x00,0x00,0x46,0x8c, +0x00,0x00,0x85,0x8c,0x01,0x00,0x31,0x26,0x21,0x18,0x68,0x00,0x04,0x00,0x22,0x2a, +0xf8,0x04,0x65,0xac,0xf6,0xff,0x40,0x14,0x6c,0x05,0x66,0xac,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x70,0xae,0x68,0x24, +0xfc,0xad,0x47,0x24,0x04,0x00,0x11,0x24,0x80,0x20,0x11,0x00,0x21,0x10,0x88,0x00, +0x21,0x30,0x87,0x00,0x00,0x00,0x45,0x8c,0x00,0x00,0xc3,0x8c,0x01,0x00,0x31,0x26, +0x21,0x20,0x89,0x00,0x82,0x28,0x05,0x00,0x82,0x18,0x03,0x00,0x1d,0x00,0x22,0x2a, +0xf8,0x04,0x83,0xac,0xf4,0xff,0x40,0x14,0x6c,0x05,0x85,0xac,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x56,0x24,0xff,0xff,0x02,0x3c,0x21,0xf0,0xc0,0x02,0xff,0x1f,0x57,0x34, +0x21,0x88,0x00,0x00,0x21,0xa0,0x00,0x00,0x93,0x51,0x00,0x08,0x21,0x90,0xc0,0x02, +0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0x94,0x00,0x52,0x26,0x3d,0x00,0x40,0x10, +0x94,0x00,0x94,0x26,0x90,0x11,0x44,0x8e,0x01,0x00,0x03,0x24,0x02,0x13,0x04,0x00, +0x01,0x00,0x53,0x30,0xf6,0xff,0x63,0x16,0x07,0x00,0x82,0x30,0x25,0xb0,0x03,0x3c, +0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x84,0x01,0x45,0x8c,0x88,0x11,0x43,0x8e, +0x21,0x20,0x20,0x02,0x24,0x28,0xa3,0x00,0x96,0x15,0x00,0x0c,0x8c,0x11,0x45,0xae, +0x92,0x11,0x44,0x92,0x70,0x15,0x00,0x0c,0xff,0x00,0x25,0x32,0x90,0x11,0x42,0x8e, +0x00,0x00,0x00,0x00,0x24,0x10,0x57,0x00,0x00,0x20,0x42,0x34,0x90,0x11,0x42,0xae, +0x92,0x11,0x50,0x92,0x00,0x00,0x00,0x00,0x21,0x20,0x00,0x02,0x86,0x15,0x00,0x0c, +0x80,0x80,0x10,0x00,0x21,0x80,0x16,0x02,0x60,0x11,0x40,0xae,0x64,0x11,0x40,0xae, +0x68,0x11,0x40,0xae,0x6c,0x11,0x40,0xae,0x70,0x11,0x40,0xae,0x74,0x11,0x40,0xae, +0x78,0x11,0x40,0xae,0x7c,0x11,0x40,0xae,0xf8,0x04,0x04,0x8e,0x6c,0x05,0x03,0x8e, +0x26,0x10,0x53,0x00,0x21,0x30,0x00,0x00,0x21,0x18,0x64,0x00,0x42,0x18,0x03,0x00, +0x04,0x00,0x04,0x24,0x0a,0xa8,0x82,0x00,0x5c,0x11,0x43,0xae,0x21,0x20,0x9e,0x02, +0x21,0x10,0x86,0x00,0x01,0x00,0xc6,0x24,0x1d,0x00,0xc3,0x28,0xce,0x11,0x40,0xa0, +0x94,0x11,0x40,0xa0,0xfa,0xff,0x60,0x14,0xb1,0x11,0x40,0xa0,0x01,0x00,0x31,0x26, +0x20,0x00,0x22,0x2a,0xec,0x11,0x80,0xac,0x94,0x00,0x52,0x26,0xc5,0xff,0x40,0x14, +0x94,0x00,0x94,0x26,0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,0x00,0x00,0x55,0xa0, +0x10,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x03,0x00,0x60,0x14,0x02,0x80,0x03,0x3c, +0x78,0x1b,0x62,0x24,0xec,0x25,0x40,0xac,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0xdc,0xad,0x45,0x24, +0x94,0x04,0xc4,0x24,0x21,0x88,0x00,0x00,0x21,0x10,0x25,0x02,0x00,0x00,0x43,0x90, +0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x00,0x00,0x83,0xa0,0xfa,0xff,0x40,0x14, +0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,0x78,0x1b,0x4a,0x24,0x02,0x80,0x03,0x3c, +0x02,0x80,0x02,0x3c,0x98,0xac,0x6c,0x24,0x38,0xab,0x4b,0x24,0x21,0x88,0x00,0x00, +0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01,0x21,0x38,0x2c,0x01, +0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01, +0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc9,0x03,0x64,0xa0,0xf8,0xff,0x40,0x14, +0x38,0x03,0x65,0xa0,0x21,0x10,0x2b,0x02,0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90, +0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x77,0x04,0x64,0xa0, +0x5a,0x04,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x70,0xae,0x68,0x24, +0xfc,0xad,0x47,0x24,0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,0x21,0x10,0x68,0x00, +0x21,0x20,0x67,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,0x01,0x00,0x31,0x26, +0x21,0x18,0x69,0x00,0x1d,0x00,0x22,0x2a,0xf8,0x04,0x65,0xac,0xf6,0xff,0x40,0x14, +0x6c,0x05,0x66,0xac,0x86,0x51,0x00,0x08,0x02,0x80,0x02,0x3c,0xd8,0xff,0xbd,0x27, +0xff,0xff,0x84,0x30,0x18,0x00,0xb2,0xaf,0xf0,0x01,0x92,0x30,0x02,0x91,0x12,0x00, +0x14,0x00,0xb1,0xaf,0xc0,0x88,0x12,0x00,0x21,0x88,0x32,0x02,0x80,0x88,0x11,0x00, +0x21,0x88,0x32,0x02,0x02,0x80,0x02,0x3c,0x78,0x1b,0x42,0x24,0x80,0x88,0x11,0x00, +0x21,0x88,0x22,0x02,0x20,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,0x10,0x00,0xb0,0xaf, +0x90,0x11,0x30,0x8e,0x00,0x02,0x83,0x30,0xff,0xfe,0x02,0x24,0x2b,0x18,0x03,0x00, +0x00,0x10,0x10,0x36,0x24,0x80,0x02,0x02,0x00,0x1a,0x03,0x00,0x00,0x04,0x82,0x30, +0x25,0x80,0x03,0x02,0x2b,0x10,0x02,0x00,0xf7,0xff,0x03,0x24,0x24,0x80,0x03,0x02, +0xc0,0x10,0x02,0x00,0x25,0x80,0x02,0x02,0x88,0x11,0x25,0xae,0x90,0x11,0x30,0xae, +0xf3,0x15,0x00,0x0c,0x21,0x98,0xa0,0x00,0xf8,0xff,0x03,0x24,0x24,0x80,0x03,0x02, +0x07,0x00,0x42,0x30,0x25,0x80,0x02,0x02,0x07,0x00,0x03,0x32,0x25,0xb0,0x02,0x3c, +0x80,0x18,0x03,0x00,0x90,0x11,0x30,0xae,0x21,0x18,0x62,0x00,0x84,0x01,0x62,0x8c, +0x21,0x20,0x40,0x02,0x24,0x10,0x53,0x00,0x96,0x15,0x00,0x0c,0x8c,0x11,0x22,0xae, +0x92,0x11,0x24,0x92,0x21,0x28,0x40,0x02,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x70,0x15,0x00,0x08, +0x28,0x00,0xbd,0x27,0x19,0x50,0x00,0x08,0xff,0x00,0x84,0x30,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x43,0x24,0x1f,0x00,0x04,0x24,0x90,0x11,0x62,0x8c,0xff,0xff,0x84,0x24, +0x00,0x10,0x42,0x34,0x90,0x11,0x62,0xac,0xfb,0xff,0x81,0x04,0x94,0x00,0x63,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x23,0x10,0xa4,0x00, +0x2b,0x18,0xa4,0x00,0x23,0x20,0x85,0x00,0x08,0x00,0xe0,0x03,0x0b,0x10,0x83,0x00, +0x20,0xff,0xbd,0x27,0xcc,0x00,0xb5,0xaf,0xdc,0x00,0xbf,0xaf,0xd8,0x00,0xbe,0xaf, +0xd4,0x00,0xb7,0xaf,0xd0,0x00,0xb6,0xaf,0xc8,0x00,0xb4,0xaf,0xc4,0x00,0xb3,0xaf, +0xc0,0x00,0xb2,0xaf,0xbc,0x00,0xb1,0xaf,0xb8,0x00,0xb0,0xaf,0x21,0xa8,0x00,0x00, +0x40,0x11,0x15,0x00,0x10,0x00,0xa3,0x27,0x21,0x10,0x43,0x00,0x07,0x00,0x16,0x24, +0xff,0xff,0xd6,0x26,0x00,0x00,0x40,0xac,0xfd,0xff,0xc1,0x06,0x04,0x00,0x42,0x24, +0x01,0x00,0xb5,0x26,0x03,0x00,0xa2,0x2e,0xf6,0xff,0x40,0x14,0x40,0x11,0x15,0x00, +0x25,0xb0,0x10,0x3c,0xc4,0x02,0x02,0x36,0x00,0x00,0x40,0xac,0x04,0x00,0x03,0x36, +0x00,0x00,0x62,0x8c,0x04,0x0c,0x03,0x36,0x00,0x00,0x63,0x8c,0x08,0x0c,0x04,0x36, +0x0f,0x00,0x11,0x3c,0xac,0x00,0xa3,0xaf,0x00,0x00,0x84,0x8c,0x24,0x10,0x51,0x00, +0x02,0xf4,0x02,0x00,0xb0,0x00,0xa4,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c, +0xff,0xff,0x25,0x36,0x70,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c, +0x01,0x00,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36, +0x74,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00, +0xe0,0x0e,0x02,0x36,0x21,0x20,0x40,0x00,0x00,0x00,0x42,0x8c,0xdc,0x0e,0x12,0x36, +0x70,0x0e,0x13,0x36,0x78,0x00,0xa2,0xaf,0x00,0x00,0x42,0x8e,0x74,0x0e,0x14,0x36, +0x78,0x0e,0x15,0x36,0x7c,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8e,0x7c,0x0e,0x16,0x36, +0x80,0x0e,0x17,0x36,0x80,0x00,0xa3,0xaf,0x00,0x00,0x82,0x8e,0xd4,0x0e,0x10,0x36, +0xed,0x3f,0x11,0x3c,0x84,0x00,0xa2,0xaf,0x00,0x00,0xa3,0x8e,0xfb,0x92,0x25,0x36, +0x88,0x00,0xa3,0xaf,0x00,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00,0x8c,0x00,0xa2,0xaf, +0x00,0x00,0xe3,0x8e,0x25,0xb0,0x02,0x3c,0x84,0x0e,0x42,0x34,0x90,0x00,0xa3,0xaf, +0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0x88,0x0e,0x63,0x34,0x94,0x00,0xa2,0xaf, +0x00,0x00,0x63,0x8c,0x25,0xb0,0x02,0x3c,0x8c,0x0e,0x42,0x34,0x98,0x00,0xa3,0xaf, +0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0xd0,0x0e,0x63,0x34,0x9c,0x00,0xa2,0xaf, +0x00,0x00,0x63,0x8c,0x00,0x00,0x00,0x00,0xa0,0x00,0xa3,0xaf,0x00,0x00,0x02,0x8e, +0x25,0xb0,0x03,0x3c,0xd8,0x0e,0x63,0x34,0xa4,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8c, +0x68,0x52,0x00,0x0c,0xa8,0x00,0xa3,0xaf,0x21,0x20,0x40,0x02,0x68,0x52,0x00,0x0c, +0xfb,0x92,0x25,0x36,0x21,0x20,0x60,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36, +0x21,0x20,0x80,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xa0,0x02, +0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xc0,0x02,0x68,0x52,0x00,0x0c, +0xfb,0x92,0x25,0x36,0x21,0x20,0xe0,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36, +0x02,0x80,0x02,0x3c,0x18,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0xfb,0x92,0x25,0x36, +0x68,0x52,0x00,0x0c,0x25,0xb0,0x13,0x3c,0x02,0x80,0x03,0x3c,0x1c,0xb0,0x63,0x24, +0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0x68,0x52,0x00,0x0c,0x21,0xb0,0x00,0x00, +0x02,0x80,0x02,0x3c,0x20,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0xfb,0x92,0x25,0x36, +0x68,0x52,0x00,0x0c,0xff,0x03,0x14,0x3c,0x02,0x80,0x03,0x3c,0x24,0xb0,0x63,0x24, +0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0x68,0x52,0x00,0x0c,0x10,0x00,0xb7,0x27, +0x21,0x20,0x00,0x02,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36,0x02,0x80,0x02,0x3c, +0x28,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0x68,0x52,0x00,0x0c,0xfb,0x92,0x25,0x36, +0x54,0x53,0x00,0x08,0x21,0xa8,0x00,0x00,0x6e,0x00,0xc2,0x13,0x02,0x80,0x02,0x3c, +0xac,0x0e,0x62,0x36,0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,0x00,0x00,0x64,0x8c, +0xb4,0x0e,0x62,0x36,0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,0x00,0x00,0x66,0x8c, +0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,0x24,0x20,0x94,0x00, +0x00,0xd8,0x02,0x3c,0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,0x24,0x30,0xd4,0x00, +0x24,0x38,0xf4,0x00,0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,0x01,0x00,0x42,0x2c, +0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0xe8,0x00,0x83,0x10,0x02,0x3c,0x07,0x00, +0xe6,0x00,0xa3,0x10,0x20,0x00,0x03,0x24,0xe4,0x00,0xc3,0x10,0x00,0x00,0x00,0x00, +0xe2,0x00,0xe3,0x10,0x01,0x00,0x08,0x24,0x80,0x00,0x03,0x24,0x08,0x00,0x83,0x10, +0x21,0x20,0x00,0x00,0x06,0x00,0xa3,0x10,0x21,0x20,0x00,0x00,0xe0,0x03,0x03,0x24, +0x03,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,0xdb,0x00,0xe3,0x10,0x01,0x00,0x04,0x24, +0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x00, +0xd7,0x00,0x80,0x14,0x94,0x0e,0x63,0x36,0x01,0x00,0xb5,0x26,0x0a,0x00,0xa2,0x2e, +0x01,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0xcb,0xff,0xc0,0x17,0x01,0x00,0x02,0x24, +0xa0,0x00,0x03,0x3c,0x30,0x54,0x65,0x34,0x68,0x52,0x00,0x0c,0x04,0x0c,0x64,0x36, +0x08,0x00,0x05,0x3c,0xe4,0x00,0xa5,0x34,0x68,0x52,0x00,0x0c,0x08,0x0c,0x64,0x36, +0x28,0x0e,0x64,0x36,0x68,0x52,0x00,0x0c,0x80,0x80,0x05,0x3c,0x14,0x02,0x02,0x3c, +0x48,0x01,0x45,0x34,0x68,0x52,0x00,0x0c,0x40,0x0e,0x64,0x36,0x16,0x68,0x05,0x3c, +0xa2,0x04,0xa5,0x34,0x68,0x52,0x00,0x0c,0x44,0x0e,0x64,0x36,0x4c,0x0e,0x64,0x36, +0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x24,0x14,0x02,0x03,0x3c,0x4d,0x01,0x65,0x34, +0x68,0x52,0x00,0x0c,0x60,0x0e,0x64,0x36,0x16,0x28,0x05,0x3c,0xba,0x08,0xa5,0x34, +0x68,0x52,0x00,0x0c,0x64,0x0e,0x64,0x36,0x6c,0x0e,0x64,0x36,0x68,0x52,0x00,0x0c, +0xd1,0x28,0x05,0x24,0x00,0xfb,0x05,0x3c,0x01,0x00,0xa5,0x34,0x68,0x52,0x00,0x0c, +0x48,0x0e,0x64,0x36,0x00,0xf8,0x05,0x3c,0x01,0x00,0xa5,0x34,0x68,0x52,0x00,0x0c, +0x48,0x0e,0x64,0x36,0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xa0,0x00,0x02,0x3c, +0x33,0x54,0x45,0x34,0x68,0x52,0x00,0x0c,0x04,0x0c,0x64,0x36,0x08,0x0c,0x64,0x36, +0x68,0x52,0x00,0x0c,0xe4,0x00,0x05,0x24,0x28,0x0e,0x64,0x36,0x68,0x52,0x00,0x0c, +0x21,0x28,0x00,0x00,0x01,0x00,0x02,0x24,0x96,0xff,0xc2,0x17,0xac,0x0e,0x62,0x36, +0x02,0x80,0x02,0x3c,0x2c,0xb0,0x42,0x24,0x25,0xb0,0x03,0x3c,0x00,0x00,0x44,0x8c, +0x20,0x08,0x63,0x34,0x00,0x00,0x71,0x8c,0x00,0x01,0x03,0x3c,0x00,0x01,0x65,0x34, +0x68,0x52,0x00,0x0c,0x25,0xb0,0x12,0x3c,0x00,0x01,0x02,0x3c,0x00,0x01,0x45,0x34, +0x68,0x52,0x00,0x0c,0x28,0x08,0x44,0x36,0xa0,0x00,0x03,0x3c,0x30,0x54,0x65,0x34, +0x68,0x52,0x00,0x0c,0x04,0x0c,0x44,0x36,0x08,0x00,0x05,0x3c,0xe4,0x00,0xa5,0x34, +0x68,0x52,0x00,0x0c,0x08,0x0c,0x44,0x36,0x28,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c, +0x80,0x80,0x05,0x3c,0x00,0x01,0x02,0x3c,0x00,0x7c,0x45,0x34,0x68,0x52,0x00,0x0c, +0x30,0x0e,0x44,0x36,0x00,0x01,0x03,0x3c,0x00,0x48,0x65,0x34,0x68,0x52,0x00,0x0c, +0x34,0x0e,0x44,0x36,0x00,0x10,0x02,0x3c,0x1f,0xdc,0x45,0x34,0x68,0x52,0x00,0x0c, +0x38,0x0e,0x44,0x36,0x00,0x10,0x03,0x3c,0x1f,0x8c,0x65,0x34,0x68,0x52,0x00,0x0c, +0x3c,0x0e,0x44,0x36,0x14,0x02,0x02,0x3c,0x02,0x01,0x45,0x34,0x68,0x52,0x00,0x0c, +0x40,0x0e,0x44,0x36,0x16,0x68,0x05,0x3c,0xc7,0x04,0xa5,0x34,0x68,0x52,0x00,0x0c, +0x44,0x0e,0x44,0x36,0x4c,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x24, +0x6c,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x24,0x00,0x01,0x03,0x3c, +0x00,0x7c,0x65,0x34,0x68,0x52,0x00,0x0c,0x50,0x0e,0x44,0x36,0x00,0x01,0x02,0x3c, +0x00,0x48,0x45,0x34,0x68,0x52,0x00,0x0c,0x54,0x0e,0x44,0x36,0x00,0x10,0x03,0x3c, +0x23,0xdc,0x65,0x34,0x68,0x52,0x00,0x0c,0x58,0x0e,0x44,0x36,0x00,0x10,0x02,0x3c, +0x23,0x8c,0x45,0x34,0x68,0x52,0x00,0x0c,0x5c,0x0e,0x44,0x36,0x14,0x02,0x03,0x3c, +0x02,0x01,0x65,0x34,0x68,0x52,0x00,0x0c,0x60,0x0e,0x44,0x36,0x16,0x28,0x05,0x3c, +0x07,0x0d,0xa5,0x34,0x68,0x52,0x00,0x0c,0x64,0x0e,0x44,0x36,0x48,0x0e,0x44,0x36, +0x68,0x52,0x00,0x0c,0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,0x68,0x52,0x00,0x0c, +0x48,0x0e,0x44,0x36,0x00,0x02,0x10,0x3c,0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24, +0x4c,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c,0xd1,0x28,0x05,0x36,0xd1,0x28,0x05,0x36, +0x68,0x52,0x00,0x0c,0x6c,0x0e,0x44,0x36,0x48,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c, +0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,0x68,0x52,0x00,0x0c,0x48,0x0e,0x44,0x36, +0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xac,0x00,0xa5,0x8f,0x04,0x0c,0x44,0x36, +0x68,0x52,0x00,0x0c,0x00,0x01,0x31,0x32,0xb0,0x00,0xa5,0x8f,0x08,0x0c,0x44,0x36, +0x68,0x52,0x00,0x0c,0x2b,0x88,0x11,0x00,0x28,0x0e,0x44,0x36,0x68,0x52,0x00,0x0c, +0x21,0x28,0x00,0x00,0x23,0xff,0x20,0x16,0xac,0x0e,0x62,0x36,0x02,0x80,0x02,0x3c, +0x2c,0xb0,0x42,0x24,0x00,0x00,0x44,0x8c,0x68,0x52,0x00,0x0c,0x00,0x01,0x05,0x3c, +0x28,0x08,0x44,0x36,0x68,0x52,0x00,0x0c,0x00,0x01,0x05,0x3c,0xac,0x0e,0x62,0x36, +0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,0x00,0x00,0x64,0x8c,0xb4,0x0e,0x62,0x36, +0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,0x00,0x00,0x66,0x8c,0x25,0xb0,0x03,0x3c, +0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,0x24,0x20,0x94,0x00,0x00,0xd8,0x02,0x3c, +0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,0x24,0x30,0xd4,0x00,0x24,0x38,0xf4,0x00, +0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,0x01,0x00,0x42,0x2c,0x02,0x2c,0x05,0x00, +0x02,0x34,0x06,0x00,0x1a,0xff,0x83,0x14,0x02,0x3c,0x07,0x00,0x80,0x00,0x03,0x24, +0x20,0xff,0x83,0x14,0x21,0x40,0x00,0x00,0x4a,0x53,0x00,0x08,0x21,0x20,0x00,0x00, +0x00,0x00,0x62,0x8c,0x9c,0x0e,0x65,0x36,0xa4,0x0e,0x66,0x36,0x24,0x10,0x54,0x00, +0x02,0x14,0x02,0x00,0x00,0x00,0xe2,0xae,0x00,0x00,0xa4,0x8c,0xac,0x0e,0x67,0x36, +0xb4,0x0e,0x65,0x36,0x24,0x20,0x94,0x00,0x02,0x24,0x04,0x00,0x04,0x00,0xe4,0xae, +0x00,0x00,0xc3,0x8c,0xc4,0x0e,0x64,0x36,0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00, +0x08,0x00,0xe3,0xae,0x00,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x54,0x00, +0x02,0x14,0x02,0x00,0x0c,0x00,0xe2,0xae,0x00,0x00,0xa3,0x8c,0x00,0x00,0x00,0x00, +0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x10,0x00,0xe3,0xae,0x25,0xb0,0x03,0x3c, +0xbc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x54,0x00, +0x02,0x14,0x02,0x00,0x14,0x00,0xe2,0xae,0x00,0x00,0x83,0x8c,0x00,0x00,0x00,0x00, +0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x18,0x00,0xe3,0xae,0x25,0xb0,0x03,0x3c, +0xcc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x54,0x00, +0x02,0x14,0x02,0x00,0x1c,0x00,0xe2,0xae,0x01,0x00,0xd6,0x26,0x03,0x00,0xc2,0x2e, +0xc7,0xfe,0x40,0x14,0x20,0x00,0xf7,0x26,0x10,0x00,0xb0,0x8f,0x00,0x00,0x00,0x00, +0x49,0x01,0x00,0x16,0x00,0x00,0x00,0x00,0x30,0x00,0xb1,0x8f,0x00,0x00,0x00,0x00, +0x06,0x00,0x20,0x16,0x21,0x20,0x00,0x02,0x50,0x00,0xa2,0x8f,0x00,0x00,0x00,0x00, +0x29,0x00,0x40,0x10,0xff,0x00,0x05,0x24,0x21,0x20,0x00,0x02,0x71,0x52,0x00,0x0c, +0x21,0x28,0x20,0x02,0x03,0x00,0x42,0x2c,0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x34,0x00,0xa5,0x8f,0x14,0x00,0xa4,0x8f,0x71,0x52,0x00,0x0c,0x00,0x00,0x00,0x00, +0x03,0x00,0x42,0x2c,0x1c,0x00,0x40,0x14,0x21,0x28,0x00,0x00,0x50,0x00,0xb2,0x8f, +0x21,0x20,0x00,0x02,0x71,0x52,0x00,0x0c,0x21,0x28,0x40,0x02,0x03,0x00,0x42,0x2c, +0x09,0x00,0x40,0x10,0x21,0x20,0x20,0x02,0x54,0x00,0xa5,0x8f,0x14,0x00,0xa4,0x8f, +0x71,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c,0x0e,0x00,0x40,0x14, +0x21,0x28,0x00,0x00,0x21,0x20,0x20,0x02,0x71,0x52,0x00,0x0c,0x21,0x28,0x40,0x02, +0x03,0x00,0x42,0x2c,0xe0,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x54,0x00,0xa5,0x8f, +0x34,0x00,0xa4,0x8f,0x71,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c, +0xd9,0x00,0x40,0x10,0x01,0x00,0x05,0x24,0xff,0x00,0x02,0x24,0xdb,0x00,0xa2,0x10, +0x25,0xb0,0x03,0x3c,0x10,0x00,0xa2,0x27,0x40,0x29,0x05,0x00,0x02,0x80,0x0f,0x3c, +0x21,0x28,0xa2,0x00,0x78,0x1b,0xec,0x25,0x00,0x00,0xa6,0x8c,0x0c,0x00,0xa7,0x8c, +0x0c,0x00,0x83,0x8d,0x10,0x00,0x84,0x8d,0x04,0x00,0xa8,0x8c,0x10,0x00,0xa9,0x8c, +0x00,0xfc,0x02,0x24,0x08,0x00,0xaa,0x8c,0x14,0x00,0xab,0x8c,0x24,0x20,0x82,0x00, +0xff,0x03,0xc6,0x30,0x24,0x18,0x62,0x00,0xff,0x03,0xe7,0x30,0xf0,0xff,0x02,0x3c, +0xff,0x03,0x42,0x34,0x25,0x18,0x66,0x00,0x25,0x20,0x87,0x00,0xff,0x03,0x08,0x31, +0xff,0x03,0x29,0x31,0x24,0x20,0x82,0x00,0x24,0x18,0x62,0x00,0x80,0x42,0x08,0x00, +0x80,0x4a,0x09,0x00,0x0f,0xc0,0x02,0x3c,0x1c,0x00,0xa6,0x8c,0x18,0x00,0xa7,0x8c, +0xff,0xff,0x42,0x34,0x25,0x18,0x68,0x00,0x25,0x20,0x89,0x00,0xff,0x03,0x4a,0x31, +0xff,0x03,0x6b,0x31,0x24,0x20,0x82,0x00,0x00,0x55,0x0a,0x00,0x24,0x18,0x62,0x00, +0x00,0x5d,0x0b,0x00,0x25,0x18,0x6a,0x00,0x25,0x20,0x8b,0x00,0x16,0x00,0x86,0xa5, +0x0c,0x00,0x83,0xad,0x10,0x00,0x84,0xad,0x14,0x00,0x87,0xa5,0x78,0x1b,0xf1,0x25, +0x10,0x00,0x22,0x8e,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,0x4d,0x00,0x43,0x10, +0x25,0xb0,0x12,0x3c,0x0c,0x00,0x23,0x8e,0x80,0x0c,0x44,0x36,0x00,0x00,0x88,0x8c, +0x00,0x02,0x62,0x30,0xc0,0xff,0x13,0x3c,0x82,0x6d,0x08,0x00,0x03,0x00,0x40,0x10, +0xff,0x03,0x65,0x30,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00,0x18,0x00,0xad,0x00, +0x82,0x62,0x03,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31,0x12,0x10,0x00,0x00, +0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30,0x00,0xfc,0x02,0x24, +0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x00,0xfc,0x74,0x36,0x24,0x28,0x14,0x01, +0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00, +0x25,0x28,0xa2,0x00,0x68,0x52,0x00,0x0c,0x25,0x28,0xa6,0x00,0x94,0x0c,0x44,0x36, +0x00,0x00,0x85,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x55,0x34,0xc0,0x03,0x10,0x32, +0x24,0x28,0xb5,0x00,0x80,0x85,0x10,0x00,0x68,0x52,0x00,0x0c,0x25,0x28,0xb0,0x00, +0x10,0x00,0x2c,0x8e,0x88,0x0c,0x44,0x36,0x00,0x00,0x88,0x8c,0x82,0x2a,0x0c,0x00, +0xff,0x03,0xa5,0x30,0x24,0x10,0x13,0x01,0x00,0x02,0xa3,0x30,0x03,0x00,0x60,0x10, +0x82,0x6d,0x02,0x00,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00,0x18,0x00,0xad,0x00, +0x02,0x65,0x0c,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31,0x12,0x10,0x00,0x00, +0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30,0x00,0xfc,0x02,0x24, +0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x24,0x28,0x14,0x01,0x12,0x80,0x00,0x00, +0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,0x25,0x28,0xa2,0x00, +0x68,0x52,0x00,0x0c,0x25,0x28,0xa6,0x00,0x9c,0x0c,0x44,0x36,0x00,0x00,0x85,0x8c, +0xc0,0x03,0x10,0x32,0x80,0x85,0x10,0x00,0x24,0x28,0xb5,0x00,0x68,0x52,0x00,0x0c, +0x25,0x28,0xb0,0x00,0x78,0x00,0xa5,0x8f,0x25,0xb0,0x10,0x3c,0x68,0x52,0x00,0x0c, +0xe0,0x0e,0x04,0x36,0x7c,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0xdc,0x0e,0x04,0x36, +0x80,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x70,0x0e,0x04,0x36,0x84,0x00,0xa5,0x8f, +0x68,0x52,0x00,0x0c,0x74,0x0e,0x04,0x36,0x88,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c, +0x78,0x0e,0x04,0x36,0x8c,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x7c,0x0e,0x04,0x36, +0x90,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x80,0x0e,0x04,0x36,0x94,0x00,0xa5,0x8f, +0x68,0x52,0x00,0x0c,0x84,0x0e,0x04,0x36,0x98,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c, +0x88,0x0e,0x04,0x36,0x9c,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0x8c,0x0e,0x04,0x36, +0xa0,0x00,0xa5,0x8f,0x68,0x52,0x00,0x0c,0xd0,0x0e,0x04,0x36,0xa4,0x00,0xa5,0x8f, +0x68,0x52,0x00,0x0c,0xd4,0x0e,0x04,0x36,0xa8,0x00,0xa5,0x8f,0x88,0x0e,0x04,0x36, +0x68,0x52,0x00,0x0c,0x0f,0x00,0x10,0x3c,0x70,0x00,0xa6,0x8f,0xff,0xff,0x05,0x36, +0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0x95,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0x74,0x00,0xa6,0x8f,0xff,0xff,0x05,0x36, +0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0xff,0xff,0x05,0x36,0xe3,0x44,0x00,0x0c, +0x1e,0x00,0x04,0x24,0x21,0x88,0x40,0x00,0xfd,0xff,0x06,0x24,0x01,0x00,0x42,0x34, +0x24,0x30,0x46,0x00,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24, +0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x03,0x00,0x26,0x36, +0xb8,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,0xdc,0x00,0xbf,0x8f,0xd8,0x00,0xbe,0x8f, +0xd4,0x00,0xb7,0x8f,0xd0,0x00,0xb6,0x8f,0xcc,0x00,0xb5,0x8f,0xc8,0x00,0xb4,0x8f, +0xc4,0x00,0xb3,0x8f,0xc0,0x00,0xb2,0x8f,0xbc,0x00,0xb1,0x8f,0xb8,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0xe0,0x00,0xbd,0x27,0xff,0x00,0x05,0x24,0xff,0x00,0x02,0x24, +0x29,0xff,0xa2,0x14,0x10,0x00,0xa2,0x27,0x25,0xb0,0x03,0x3c,0x94,0x0e,0x62,0x34, +0x9c,0x0e,0x64,0x34,0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34,0x02,0x80,0x0f,0x3c, +0x00,0x00,0x49,0x8c,0x78,0x1b,0xed,0x25,0x00,0x00,0x8c,0x8c,0x00,0x00,0xae,0x8c, +0x00,0x00,0xc7,0x8c,0xb4,0x0e,0x62,0x34,0x0c,0x00,0xa4,0x8d,0x10,0x00,0xa5,0x8d, +0x00,0x00,0x4a,0x8c,0xff,0x03,0x06,0x3c,0x00,0xfc,0x08,0x24,0xbc,0x0e,0x62,0x34, +0x24,0x48,0x26,0x01,0x24,0x38,0xe6,0x00,0x00,0x00,0x4b,0x8c,0x24,0x28,0xa8,0x00, +0x24,0x20,0x88,0x00,0x02,0x3c,0x07,0x00,0xcc,0x0e,0x68,0x34,0x02,0x4c,0x09,0x00, +0xc4,0x0e,0x63,0x34,0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,0x25,0x28,0xa7,0x00, +0x25,0x20,0x89,0x00,0x00,0x00,0x67,0x8c,0x24,0x60,0x86,0x01,0x00,0x00,0x03,0x8d, +0x24,0x50,0x46,0x01,0x24,0x28,0xa2,0x00,0x24,0x20,0x82,0x00,0x82,0x61,0x0c,0x00, +0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34,0x25,0x20,0x8c,0x00, +0x25,0x28,0xaa,0x00,0x24,0x70,0xc6,0x01,0x24,0x58,0x66,0x01,0x24,0x28,0xa2,0x00, +0x24,0x18,0x66,0x00,0x00,0x71,0x0e,0x00,0x24,0x20,0x82,0x00,0x00,0x59,0x0b,0x00, +0x24,0x38,0xe6,0x00,0x25,0x20,0x8e,0x00,0x25,0x28,0xab,0x00,0x02,0x3c,0x07,0x00, +0x02,0x1c,0x03,0x00,0x16,0x00,0xa3,0xa5,0x0c,0x00,0xa4,0xad,0x10,0x00,0xa5,0xad, +0xbd,0x54,0x00,0x08,0x14,0x00,0xa7,0xa5,0x30,0x00,0xb1,0x8f,0x65,0x54,0x00,0x08, +0x21,0x20,0x00,0x02,0xe0,0xff,0xbd,0x27,0x44,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3, +0x49,0x00,0x03,0x24,0x47,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x1c,0xb6,0xe7,0x24, +0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0x10,0x27,0x03,0x24,0x01,0x00,0x02,0x24, +0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0xb0,0x59,0xc6,0x24, +0x0c,0x00,0xe3,0xac,0x14,0x00,0xe2,0xa0,0x18,0x00,0xbf,0xaf,0xa8,0x14,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x25,0xb0,0x03,0x3c,0x20,0x00,0xb4,0xaf, +0x1c,0x00,0xb3,0xaf,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf, +0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x03,0x0d,0x64,0x34, +0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x54,0x30,0x70,0x00,0x93,0x32, +0x63,0x00,0x60,0x12,0x42,0x00,0x63,0x34,0x8f,0x00,0x82,0x32,0x00,0x00,0x82,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x5b,0x00,0x60,0x12,0x00,0x00,0x00,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x0f,0x00,0x11,0x3c,0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36, +0x21,0xa8,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,0x01,0x00,0x04,0x24, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x21,0x20,0x00,0x00,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0xb0,0x40,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x64,0x00,0x04,0x24, +0xcb,0x12,0x00,0x0c,0x08,0x00,0x10,0x3c,0xff,0xff,0x10,0x36,0x95,0x42,0x00,0x0c, +0x21,0x20,0x00,0x00,0x01,0x00,0x12,0x3c,0x24,0x30,0xb0,0x02,0x25,0x30,0xd2,0x00, +0xff,0xff,0x25,0x36,0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c, +0x64,0x00,0x04,0x24,0x24,0x80,0xd0,0x02,0x95,0x42,0x00,0x0c,0x01,0x00,0x04,0x24, +0x25,0x30,0x12,0x02,0xff,0xff,0x25,0x36,0xb8,0x44,0x00,0x0c,0x21,0x20,0x00,0x00, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x0f,0x00,0x11,0x3c,0x18,0x00,0x04,0x24,0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36, +0x21,0x80,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x18,0x00,0x04,0x24,0xff,0xff,0x25,0x36, +0xb8,0x44,0x00,0x0c,0x00,0x80,0x06,0x36,0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24, +0x27,0x00,0x60,0x16,0x25,0xb0,0x02,0x3c,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x25,0xb0,0x02,0x3c,0x42,0x00,0x42,0x34, +0x30,0x00,0xbd,0x27,0x00,0x00,0x40,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xff,0xff,0x02,0x24,0x00,0x00,0x62,0xa0,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,0x18,0x00,0x04,0x24, +0xe3,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0x80,0x40,0x00,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0x18,0x00,0x04,0x24,0xff,0xff,0x25,0x36,0xb8,0x44,0x00,0x0c,0x00,0x80,0x06,0x36, +0x9c,0x12,0x00,0x0c,0x03,0x00,0x04,0x24,0xdb,0xff,0x60,0x12,0x25,0xb0,0x02,0x3c, +0x03,0x0d,0x42,0x34,0x00,0x00,0x54,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x0f,0x00,0x10,0x3c,0x21,0x30,0xa0,0x02,0xff,0xff,0x05,0x36,0xb8,0x44,0x00,0x0c, +0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x95,0x42,0x00,0x0c, +0x01,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x21,0x30,0xc0,0x02,0xb8,0x44,0x00,0x0c, +0x21,0x20,0x00,0x00,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24,0x2c,0x00,0xbf,0x8f, +0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x20,0x00,0x00, +0x95,0x42,0x00,0x08,0x30,0x00,0xbd,0x27,0xc0,0xff,0xbd,0x27,0x28,0x00,0xb4,0xaf, +0x02,0x80,0x14,0x3c,0x78,0x1b,0x85,0x26,0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf, +0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf, +0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0xc8,0x02,0xa3,0x90,0x25,0xb0,0x02,0x3c, +0x9a,0x0c,0x42,0x34,0x01,0x00,0x63,0x24,0xff,0x00,0x64,0x30,0x00,0x00,0x44,0xa0, +0xc8,0x02,0xa3,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x78,0x1b,0x85,0x26, +0x0c,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,0x82,0x17,0x02,0x00,0x01,0x00,0x42,0x30, +0x08,0x00,0x40,0x14,0x06,0x00,0x16,0x24,0x08,0x00,0xa2,0x8c,0x01,0x00,0x03,0x24, +0x42,0x17,0x02,0x00,0x03,0x00,0x42,0x30,0x4e,0x01,0x43,0x10,0x25,0xb0,0x02,0x3c, +0x78,0x1b,0x85,0x26,0x0c,0x00,0xa2,0x8c,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00, +0x01,0x00,0x44,0x30,0x0d,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x38,0x00,0xbf,0x8f, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x08,0x00,0xa2,0x8c, +0x00,0x00,0x00,0x00,0x42,0x17,0x02,0x00,0x03,0x00,0x43,0x30,0xef,0xff,0x64,0x14, +0x00,0x00,0x00,0x00,0x10,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,0x82,0x17,0x02,0x00, +0x60,0x02,0x43,0x10,0x0f,0x00,0x10,0x3c,0xc7,0x02,0xb3,0x90,0x25,0xb0,0x02,0x3c, +0x62,0x0c,0x42,0x34,0xff,0x00,0x63,0x32,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x90,0x26,0xc6,0x02,0x02,0x92,0x00,0x00,0x00,0x00, +0x6f,0x01,0x40,0x10,0x01,0x00,0x02,0x24,0x25,0xb0,0x11,0x3c,0x03,0x0d,0x23,0x36, +0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x70,0x00,0x42,0x30,0x95,0x01,0x40,0x14, +0xcc,0x00,0x02,0x24,0xc4,0x02,0x02,0x96,0x00,0x00,0x00,0x00,0x23,0x20,0x53,0x00, +0x2b,0x18,0x53,0x00,0x23,0x10,0x62,0x02,0x0a,0x10,0x83,0x00,0x03,0x00,0x42,0x2c, +0x62,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0xc4,0x02,0x03,0x92,0x63,0x0c,0x22,0x36, +0x21,0x20,0x00,0x00,0x00,0x00,0x43,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30, +0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x78,0x1b,0x83,0x26, +0xc3,0x02,0x62,0x90,0x08,0x00,0x66,0x8c,0xc2,0x02,0x73,0xa0,0x23,0x20,0x53,0x00, +0x2b,0x38,0x62,0x02,0x23,0x90,0x62,0x02,0x02,0x2c,0x06,0x00,0x0b,0x90,0x87,0x00, +0x3f,0x00,0xa5,0x30,0x3f,0x00,0xc4,0x30,0x24,0x00,0x02,0x24,0x20,0x00,0x03,0x24, +0x23,0x10,0x44,0x00,0x7d,0x01,0x40,0x16,0x23,0x18,0x65,0x00,0x21,0x40,0x80,0x00, +0x21,0xa8,0xa0,0x00,0x02,0x80,0x17,0x3c,0x2b,0x28,0xc8,0x02,0xf3,0x01,0xa0,0x10, +0x78,0x1b,0x82,0x26,0x80,0x10,0x08,0x00,0x78,0x1b,0x83,0x26,0x21,0x10,0x43,0x00, +0x18,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x82,0x25,0x04,0x00,0x78,0x1b,0x86,0x26, +0x0c,0x00,0xc3,0x8c,0x00,0x00,0x00,0x00,0xff,0x03,0x67,0x30,0x7b,0x01,0xe0,0x10, +0x00,0x02,0x62,0x30,0x04,0x00,0x40,0x10,0x18,0x00,0xe4,0x00,0x00,0xfc,0x02,0x24, +0x25,0x38,0xe2,0x00,0x18,0x00,0xe4,0x00,0x82,0x82,0x03,0x00,0xff,0x03,0x10,0x32, +0x00,0x02,0x03,0x32,0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10, +0xff,0x03,0x45,0x30,0x00,0xfc,0x02,0x24,0x25,0x80,0x02,0x02,0x18,0x00,0x04,0x02, +0x80,0x1d,0x04,0x00,0x25,0xb0,0x11,0x3c,0x80,0x0c,0x24,0x36,0x94,0x0c,0x31,0x36, +0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00, +0x25,0x18,0x62,0x00,0x25,0x18,0x65,0x00,0x21,0x28,0x60,0x00,0x68,0x52,0x00,0x0c, +0x10,0x00,0xa3,0xaf,0x00,0x00,0x23,0x8e,0xff,0x0f,0x02,0x3c,0xc0,0x03,0x10,0x32, +0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x80,0x85,0x10,0x00,0x25,0x18,0x70,0x00, +0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x00,0x10,0x00,0xa3,0xaf,0x68,0x52,0x00,0x0c, +0x00,0x00,0x00,0x00,0x78,0x1b,0x83,0x26,0x08,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x59,0x01,0x40,0x04,0xc0,0x28,0x15,0x00,0x21,0x10,0xa3,0x00,0xac,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xad,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xae,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xaf,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb0,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb1,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb2,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb3,0x00,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x56,0x43,0xe3,0x92,0x22,0x00,0x02,0x24,0x03,0x00,0x62,0x10, +0x92,0x00,0x02,0x24,0x0d,0xff,0x62,0x14,0x00,0x00,0x00,0x00,0x78,0x1b,0x82,0x26, +0x08,0x00,0x43,0x8c,0x01,0x00,0x44,0x3a,0x24,0x00,0x02,0x24,0x02,0x1a,0x03,0x00, +0x3f,0x00,0x63,0x30,0x01,0x00,0x84,0x30,0x71,0x01,0x80,0x10,0x23,0x28,0x43,0x00, +0x42,0x18,0x12,0x00,0x40,0x10,0x03,0x00,0x21,0x90,0x43,0x00,0x78,0x1b,0x83,0x26, +0xc3,0x02,0x62,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x62,0x02,0x46,0x01,0x40,0x10, +0x2b,0x10,0x45,0x02,0x06,0x00,0x40,0x10,0x24,0x00,0x06,0x24,0x08,0x00,0x62,0x8c, +0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x3f,0x00,0x42,0x30,0x21,0x30,0x52,0x00, +0x2b,0x28,0xc6,0x02,0x46,0x01,0xa0,0x10,0x78,0x1b,0x82,0x26,0x80,0x10,0x06,0x00, +0x78,0x1b,0x83,0x26,0x21,0x10,0x43,0x00,0x18,0x00,0x44,0x8c,0x00,0x00,0x00,0x00, +0x82,0x25,0x04,0x00,0x78,0x1b,0x83,0x26,0x10,0x00,0x70,0x8c,0x00,0x00,0x00,0x00, +0x82,0x3a,0x10,0x00,0xff,0x03,0xe7,0x30,0x3c,0x01,0xe0,0x10,0x00,0x02,0xe2,0x30, +0x04,0x00,0x40,0x10,0x18,0x00,0xe4,0x00,0x00,0xfc,0x02,0x24,0x25,0x38,0xe2,0x00, +0x18,0x00,0xe4,0x00,0x02,0x85,0x10,0x00,0xff,0x03,0x10,0x32,0x00,0x02,0x03,0x32, +0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x45,0x30, +0x00,0xfc,0x02,0x24,0x25,0x80,0x02,0x02,0x18,0x00,0x04,0x02,0x80,0x1d,0x04,0x00, +0x25,0xb0,0x11,0x3c,0x88,0x0c,0x24,0x36,0x9c,0x0c,0x31,0x36,0x12,0x80,0x00,0x00, +0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,0x25,0x18,0x62,0x00, +0x25,0x18,0x65,0x00,0x21,0x28,0x60,0x00,0x68,0x52,0x00,0x0c,0x10,0x00,0xa3,0xaf, +0x00,0x00,0x23,0x8e,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0xc0,0x03,0x10,0x32, +0x24,0x18,0x62,0x00,0x80,0x85,0x10,0x00,0x25,0x18,0x70,0x00,0x21,0x20,0x20,0x02, +0x21,0x28,0x60,0x00,0x68,0x52,0x00,0x0c,0x10,0x00,0xa3,0xaf,0x99,0x56,0x00,0x08, +0x00,0x00,0x00,0x00,0x80,0x0c,0x42,0x34,0x00,0x00,0x43,0x8c,0x21,0x30,0xa0,0x00, +0xc0,0xff,0x02,0x3c,0x24,0x20,0x62,0x00,0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c, +0xec,0x57,0x00,0x08,0x18,0x00,0xc3,0x24,0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e, +0x0d,0x00,0x40,0x10,0x02,0x80,0x17,0x3c,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,0x04,0x00,0x63,0x24,0x08,0x00,0xc2,0x8c, +0xc0,0xff,0x03,0x24,0x3f,0x00,0x24,0x32,0x24,0x10,0x43,0x00,0x25,0x10,0x44,0x00, +0x08,0x00,0xc2,0xac,0x02,0x80,0x17,0x3c,0x56,0x43,0xe3,0x92,0x22,0x00,0x02,0x24, +0x3a,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0x39,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c, +0x25,0xb0,0x02,0x3c,0x24,0x0a,0x42,0x34,0x00,0x00,0x44,0x8c,0x3f,0x3f,0x03,0x3c, +0x3f,0x3f,0x63,0x34,0x24,0x20,0x83,0x00,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c, +0x26,0x1c,0x53,0x24,0x2e,0x1d,0x72,0x24,0x21,0x88,0x00,0x00,0x13,0x58,0x00,0x08, +0x10,0x00,0xa4,0xaf,0x7b,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x43,0x00,0x40,0x10, +0x78,0x1b,0x85,0x26,0x01,0x00,0x31,0x26,0x21,0x00,0x22,0x2e,0x17,0x00,0x40,0x10, +0x78,0x1b,0x82,0x26,0xc0,0x80,0x11,0x00,0x10,0x00,0xa4,0x27,0x21,0x28,0x13,0x02, +0x7b,0x46,0x00,0x0c,0x04,0x00,0x06,0x24,0x21,0x28,0x12,0x02,0x10,0x00,0xa4,0x27, +0xf0,0xff,0x40,0x14,0x04,0x00,0x06,0x24,0x78,0x1b,0x85,0x26,0x08,0x00,0xa3,0x8c, +0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00, +0x00,0x24,0x04,0x00,0xff,0x7f,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x08,0x00,0xa3,0xac,0x78,0x1b,0x82,0x26,0x0c,0x00,0x43,0x8c, +0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x92,0x56,0x00,0x08,0x0c,0x00,0x43,0xac, +0xc6,0x02,0x02,0xa2,0xc0,0x56,0x00,0x08,0xc4,0x02,0x13,0xa6,0xbf,0x55,0x00,0x0c, +0x00,0x00,0x00,0x00,0xd0,0x56,0x00,0x08,0xc4,0x02,0x13,0xa6,0x25,0xb0,0x02,0x3c, +0x88,0x0c,0x42,0x34,0x00,0x00,0x44,0x8c,0x02,0x80,0x03,0x3c,0x78,0x1b,0x66,0x24, +0xc0,0xff,0x02,0x3c,0x24,0x20,0x82,0x00,0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c, +0x44,0x58,0x00,0x08,0x18,0x00,0xc3,0x24,0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e, +0xbc,0xff,0x40,0x10,0x25,0xb0,0x02,0x3c,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,0x04,0x00,0x63,0x24,0x08,0x00,0xc2,0x8c, +0x3f,0x00,0x23,0x32,0xff,0xc0,0x04,0x24,0x24,0x10,0x44,0x00,0x00,0x1a,0x03,0x00, +0x25,0x10,0x43,0x00,0xfe,0x57,0x00,0x08,0x08,0x00,0xc2,0xac,0x08,0x00,0xa3,0x8c, +0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00, +0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,0x00,0x80,0x02,0x3c,0x27,0x58,0x00,0x08, +0x25,0x18,0x62,0x00,0x63,0x0c,0x23,0x36,0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0xda,0x56,0x00,0x08,0x78,0x1b,0x83,0x26,0x98,0x00,0xe0,0x10, +0x21,0x40,0x00,0x00,0x2b,0x10,0x42,0x02,0x21,0x20,0x92,0x00,0x00,0x00,0x42,0x38, +0x24,0x00,0x08,0x24,0x2b,0x18,0x43,0x02,0x0b,0x40,0x82,0x00,0x7d,0xfe,0x60,0x10, +0x20,0x00,0x15,0x24,0x78,0x1b,0x83,0x26,0x0a,0x00,0x62,0x94,0x02,0x80,0x17,0x3c, +0x3f,0x00,0x42,0x30,0xec,0x56,0x00,0x08,0x21,0xa8,0x52,0x00,0x96,0x00,0xa0,0x10, +0x80,0x10,0x08,0x00,0x21,0x10,0x46,0x00,0x18,0x00,0x45,0x8c,0x25,0xb0,0x04,0x3c, +0x68,0x52,0x00,0x0c,0x80,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x94,0x0c,0x84,0x34, +0x21,0x57,0x00,0x08,0x21,0x28,0x00,0x00,0x21,0x10,0xa3,0x00,0xb4,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb5,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb6,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb7,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb8,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xb9,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xba,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x78,0x1b,0x82,0x26,0x21,0x10,0xa2,0x00,0xbb,0x01,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x87,0x57,0x00,0x08,0x00,0x00,0x00,0x00,0x30,0x00,0x43,0x8c, +0xf5,0x56,0x00,0x08,0x82,0x25,0x03,0x00,0x08,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x02,0x12,0x02,0x00,0x3f,0x00,0x42,0x30,0x2b,0x18,0x42,0x02,0xbc,0xfe,0x60,0x14, +0x23,0x30,0x52,0x00,0x21,0x30,0x00,0x00,0x21,0x28,0x00,0x00,0x78,0x1b,0x82,0x26, +0x30,0x00,0x43,0x8c,0xaf,0x57,0x00,0x08,0x82,0x25,0x03,0x00,0x32,0x00,0xa0,0x10, +0x80,0x10,0x06,0x00,0x21,0x10,0x43,0x00,0x18,0x00,0x45,0x8c,0x25,0xb0,0x04,0x3c, +0x68,0x52,0x00,0x0c,0x88,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x9c,0x0c,0x84,0x34, +0x68,0x52,0x00,0x0c,0x21,0x28,0x00,0x00,0x99,0x56,0x00,0x08,0x00,0x00,0x00,0x00, +0x23,0x10,0x92,0x00,0x2b,0x18,0x44,0x02,0x2b,0x20,0x45,0x02,0x0b,0x40,0x43,0x00, +0xe8,0xfd,0x80,0x14,0x23,0xa8,0xb2,0x00,0xeb,0x56,0x00,0x08,0x21,0xa8,0x00,0x00, +0xff,0xff,0x43,0x26,0x42,0x18,0x03,0x00,0x40,0x10,0x03,0x00,0x21,0x10,0x43,0x00, +0x99,0x57,0x00,0x08,0x01,0x00,0x52,0x24,0x30,0x00,0xc5,0x8c,0x7a,0x58,0x00,0x08, +0x25,0xb0,0x04,0x3c,0xff,0xff,0x05,0x36,0x60,0x00,0x06,0x24,0xb8,0x44,0x00,0x0c, +0x24,0x00,0x04,0x24,0x9c,0x12,0x00,0x0c,0xe8,0x03,0x04,0x24,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x24,0x00,0x04,0x24, +0xe3,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,0x1f,0x00,0x53,0x30,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcb,0x12,0x00,0x0c,0x64,0x00,0x04,0x24, +0xb2,0x56,0x00,0x08,0x25,0xb0,0x02,0x3c,0x30,0x00,0x65,0x8c,0xf6,0x58,0x00,0x08, +0x25,0xb0,0x04,0x3c,0x00,0xff,0x84,0x30,0x02,0x22,0x04,0x00,0x08,0x00,0x80,0x10, +0x02,0x80,0x02,0x3c,0xff,0x00,0x02,0x24,0x04,0x00,0x82,0x10,0xcc,0xff,0x03,0x24, +0x02,0x80,0x02,0x3c,0x08,0x00,0xe0,0x03,0x62,0x1e,0x43,0xa0,0x02,0x80,0x02,0x3c, +0x08,0x00,0xe0,0x03,0x62,0x1e,0x44,0xa0,0x02,0x24,0x04,0x00,0xff,0x00,0x84,0x30, +0xc0,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00, +0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x78,0x1b,0x63,0x24,0x20,0x00,0x84,0x2c, +0x09,0x00,0x80,0x10,0x21,0x10,0x43,0x00,0x80,0x11,0x43,0x8c,0x25,0xb0,0x02,0x3c, +0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,0x7f,0x00,0x63,0x30,0x00,0x00,0x43,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x6c,0x3f,0x43,0x8c, +0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,0x7f,0x00,0x63,0x30, +0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x85,0x30, +0xd2,0xff,0xa3,0x24,0xfe,0xff,0xa2,0x24,0xda,0xff,0xa4,0x24,0x04,0x00,0x63,0x2c, +0x08,0x00,0x84,0x2c,0x06,0x00,0x60,0x14,0xff,0x00,0x42,0x30,0xf0,0xff,0xa2,0x24, +0xfc,0xff,0xa3,0x24,0x16,0x00,0x46,0x2c,0x03,0x00,0x80,0x10,0xff,0x00,0x62,0x30, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfa,0xff,0xa3,0x24,0xfc,0xff,0xc0,0x10, +0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0xff,0x00,0x62,0x30,0xe0,0xff,0xbd,0x27, +0x02,0x80,0x08,0x3c,0x78,0x1b,0x08,0x25,0x18,0x00,0xbf,0xaf,0xe8,0x02,0x07,0x8d, +0x02,0x80,0x02,0x3c,0x56,0x43,0x49,0x90,0x00,0x03,0x02,0x3c,0x25,0x38,0xe2,0x00, +0xff,0xf3,0x02,0x3c,0x02,0x80,0x03,0x3c,0xff,0xff,0x42,0x34,0xe4,0xb5,0x6a,0x24, +0x24,0x38,0xe2,0x00,0xff,0xff,0x03,0x34,0x01,0x80,0x06,0x3c,0x22,0x00,0x02,0x24, +0x21,0x20,0x40,0x01,0x44,0x66,0xc6,0x24,0x10,0x00,0xa5,0x27,0xe8,0x02,0x07,0xad, +0x00,0x24,0x03,0xad,0x05,0x00,0x22,0x11,0xfc,0x23,0x03,0xad,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x44,0x00,0x02,0x24, +0x10,0x00,0xa2,0xa3,0x49,0x00,0x03,0x24,0x47,0x00,0x02,0x24,0x11,0x00,0xa3,0xa3, +0x12,0x00,0xa2,0xa3,0xd0,0x07,0x03,0x24,0x01,0x00,0x02,0x24,0x13,0x00,0xa0,0xa3, +0x0c,0x00,0x43,0xad,0xa8,0x14,0x00,0x0c,0x14,0x00,0x42,0xa1,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0x02,0x80,0x10,0x3c,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf, +0x78,0x1b,0x04,0x26,0xd8,0x02,0x82,0x8c,0x01,0x00,0x03,0x24,0x02,0x15,0x02,0x00, +0x0f,0x00,0x42,0x30,0x07,0x00,0x43,0x10,0x25,0xb0,0x06,0x3c,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x4c,0x00,0xc3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x03,0x00,0x42,0x30,0x45,0x00,0x40,0x10,0xff,0xf3,0x02,0x3c,0xe8,0x02,0x85,0x8c, +0x00,0x00,0x00,0x00,0x82,0x16,0x05,0x00,0x03,0x00,0x42,0x30,0x17,0x00,0x40,0x14, +0x78,0x1b,0x11,0x26,0x0c,0x09,0xc3,0x34,0x00,0x00,0x63,0x8c,0x12,0x01,0x02,0x3c, +0x13,0x13,0x42,0x34,0x6b,0x00,0x62,0x10,0xff,0xfc,0x02,0x3c,0x22,0x02,0x02,0x3c, +0x23,0x13,0x42,0x34,0x52,0x00,0x62,0x10,0xff,0xfc,0x02,0x3c,0x00,0x03,0x02,0x3c, +0x25,0x10,0xa2,0x00,0xe8,0x02,0x82,0xac,0x78,0x1b,0x05,0x26,0xe8,0x02,0xa3,0x8c, +0xff,0xf3,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x04,0x04,0x3c, +0x25,0x18,0x64,0x00,0xe8,0x02,0xa3,0xac,0x78,0x1b,0x11,0x26,0xfc,0x23,0x24,0x8e, +0xff,0xff,0x02,0x34,0xd5,0xff,0x82,0x10,0x00,0x00,0x00,0x00,0x80,0x11,0x22,0x8e, +0x00,0x00,0x00,0x00,0x02,0x11,0x02,0x00,0x7f,0x00,0x42,0x30,0x3f,0x00,0x43,0x2c, +0x28,0x00,0x60,0x14,0x3b,0x00,0x42,0x2c,0x00,0x24,0x22,0x8e,0x02,0x19,0x04,0x00, +0x02,0x11,0x02,0x00,0x23,0x18,0x62,0x00,0x3a,0x00,0x60,0x18,0x01,0x00,0x03,0x24, +0xeb,0x02,0x22,0x92,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0x0e,0x00,0x43,0x10, +0x78,0x1b,0x02,0x26,0x25,0xb0,0x04,0x3c,0x12,0x01,0x05,0x3c,0x0c,0x09,0x84,0x34, +0x68,0x52,0x00,0x0c,0x13,0x13,0xa5,0x34,0xe8,0x02,0x23,0x8e,0xff,0xfc,0x02,0x3c, +0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x01,0x04,0x3c,0x25,0x18,0x64,0x00, +0xe8,0x02,0x23,0xae,0x78,0x1b,0x02,0x26,0xe8,0x02,0x43,0x8c,0x00,0x20,0x04,0x3c, +0x25,0x18,0x64,0x00,0x9d,0x59,0x00,0x08,0xe8,0x02,0x43,0xac,0xe8,0x02,0x83,0x8c, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x20,0x00,0xbd,0x27,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0xe8,0x02,0x83,0xac,0xa5,0xff,0x40,0x10,0x03,0x00,0x03,0x24,0xeb,0x02,0x22,0x92, +0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0xa0,0xff,0x43,0x10,0x32,0x03,0x05,0x3c, +0x25,0xb0,0x04,0x3c,0x0c,0x09,0x84,0x34,0x68,0x52,0x00,0x0c,0x33,0x13,0xa5,0x34, +0xe8,0x02,0x23,0x8e,0xff,0xdf,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x00,0x03,0x04,0x3c,0x25,0x18,0x64,0x00,0x9d,0x59,0x00,0x08,0xe8,0x02,0x23,0xae, +0xff,0xff,0x42,0x34,0x24,0x10,0xa2,0x00,0x00,0x02,0x03,0x3c,0xbb,0x59,0x00,0x08, +0x25,0x10,0x43,0x00,0xeb,0x02,0x22,0x92,0x02,0x00,0x03,0x24,0x03,0x00,0x42,0x30, +0xd5,0xff,0x43,0x10,0x78,0x1b,0x02,0x26,0x25,0xb0,0x04,0x3c,0x22,0x02,0x05,0x3c, +0x0c,0x09,0x84,0x34,0x68,0x52,0x00,0x0c,0x23,0x13,0xa5,0x34,0xe8,0x02,0x23,0x8e, +0xff,0xfc,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xe5,0x59,0x00,0x08, +0x00,0x02,0x04,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0xa2,0x00,0x00,0x01,0x03,0x3c, +0xbb,0x59,0x00,0x08,0x25,0x10,0x43,0x00,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34, +0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x08,0x00,0x42,0x34, +0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34, +0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xf7,0x00,0x42,0x30,0x00,0x00,0x62,0xa0, +0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90, +0x21,0x20,0x00,0x00,0x3f,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24, +0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24, +0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00, +0xff,0x00,0x42,0x30,0x80,0x00,0x42,0x34,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24, +0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xff,0x00,0x03,0x3c, +0x82,0x01,0x49,0x34,0x81,0x01,0x48,0x34,0x24,0x10,0x83,0x00,0x02,0x3c,0x02,0x00, +0x00,0xff,0x63,0x34,0x02,0x80,0x02,0x3c,0x78,0x1b,0x45,0x24,0x02,0x32,0x04,0x00, +0x01,0x00,0x02,0x24,0x24,0x20,0x83,0x00,0xda,0x0c,0xa2,0xa0,0xc8,0x0c,0xa0,0xac, +0xcc,0x0c,0xa0,0xac,0xd0,0x0c,0xa0,0xac,0x06,0x00,0x80,0x14,0xd4,0x0c,0xa0,0xac, +0x00,0x00,0x02,0x91,0x00,0x00,0x23,0x91,0xd8,0x0c,0xa2,0xa0,0x08,0x00,0xe0,0x03, +0xd9,0x0c,0xa3,0xa0,0xd9,0x0c,0xa7,0xa0,0x08,0x00,0xe0,0x03,0xd8,0x0c,0xa6,0xa0, +0x02,0x80,0x03,0x3c,0x78,0x1b,0x63,0x24,0xd9,0x0c,0x66,0x90,0xd8,0x0c,0x65,0x90, +0x25,0xb0,0x02,0x3c,0x82,0x01,0x44,0x34,0x81,0x01,0x42,0x34,0x00,0x00,0x45,0xa0, +0x00,0x00,0x86,0xa0,0x08,0x00,0xe0,0x03,0xda,0x0c,0x60,0xa0,0x02,0x80,0x08,0x3c, +0x78,0x1b,0x04,0x25,0xda,0x0c,0x82,0x90,0x00,0x00,0x00,0x00,0x15,0x00,0x40,0x10, +0x21,0x18,0x00,0x00,0xcc,0x0c,0x82,0x8c,0xc8,0x0c,0x85,0x8c,0x25,0xb0,0x03,0x3c, +0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x82,0x01,0x67,0x34,0x0f,0x00,0x40,0x10, +0x81,0x01,0x66,0x34,0xd9,0x0c,0x83,0x90,0xd8,0x0c,0x82,0x90,0xf0,0x00,0x63,0x30, +0x1f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0,0x00,0x00,0xe3,0xa0,0x78,0x1b,0x02,0x25, +0x01,0x00,0x03,0x24,0xd4,0x0c,0x40,0xac,0xc8,0x0c,0x40,0xac,0xcc,0x0c,0x40,0xac, +0xd0,0x0c,0x40,0xac,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xd0,0x0c,0x82,0x8c, +0x25,0xb0,0x03,0x3c,0x82,0x01,0x69,0x34,0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00, +0x0e,0x00,0x40,0x14,0x81,0x01,0x66,0x34,0xd4,0x0c,0x82,0x8c,0x00,0x00,0x00,0x00, +0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x08,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0xd9,0x0c,0x83,0x90,0xd8,0x0c,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xa0, +0x00,0x00,0x23,0xa1,0x8e,0x5a,0x00,0x08,0x78,0x1b,0x02,0x25,0xd9,0x0c,0x83,0x90, +0xd8,0x0c,0x82,0x90,0xf0,0x00,0x63,0x30,0x7f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0, +0x00,0x00,0x23,0xa1,0x8e,0x5a,0x00,0x08,0x78,0x1b,0x02,0x25,0x00,0x00,0x85,0xac, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x25,0xb0,0x03,0x3c,0x33,0x02,0x65,0x34,0x00,0x11,0x04,0x00,0x00,0x00,0xa2,0xa0, +0x30,0x02,0x63,0x34,0x00,0x00,0x65,0x8c,0x0f,0x00,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x28,0xa2,0x00,0x01,0x00,0x03,0x24,0x04,0x18,0x83,0x00,0x02,0x00,0xa0,0x10, +0x21,0x10,0x00,0x00,0xff,0xff,0x62,0x30,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x25,0xb0,0x11,0x3c,0x18,0x00,0xb2,0xaf, +0x4c,0x00,0x22,0x36,0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x44,0x90, +0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x24,0xff,0x00,0x84,0x30,0x07,0x00,0x82,0x10, +0x78,0x1b,0x72,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x52,0x24,0x43,0x96, +0x01,0x00,0x02,0x24,0xf7,0xff,0x62,0x14,0x21,0x20,0x00,0x00,0xba,0x5a,0x00,0x0c, +0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x24,0xba,0x5a,0x00,0x0c,0x21,0x80,0x40,0x00, +0x25,0x80,0x02,0x02,0x33,0x02,0x23,0x36,0x08,0x00,0x02,0x24,0xff,0xff,0x10,0x32, +0x40,0x00,0x25,0x36,0x00,0x00,0x62,0xa0,0xea,0xff,0x00,0x16,0x00,0x00,0x00,0x00, +0x00,0x00,0xa2,0x94,0x50,0x24,0x43,0x96,0xff,0xdf,0x42,0x30,0x00,0x20,0x44,0x34, +0x01,0x00,0x63,0x24,0x50,0x24,0x43,0xa6,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa4,0xa4, +0xd7,0x5a,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xb8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x3c,0x00,0xb1,0xaf,0x38,0x00,0xb0,0xaf,0x40,0x00,0xbf,0xaf,0x78,0x1b,0x50,0x24, +0x04,0x24,0x03,0x8e,0x02,0x80,0x11,0x3c,0x01,0x00,0x02,0x24,0x01,0x00,0x63,0x30, +0x10,0x00,0xa4,0x27,0x80,0x3f,0x25,0x26,0x07,0x00,0x62,0x10,0x0a,0x00,0x06,0x24, +0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb1,0x8f,0x38,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,0x52,0x46,0x00,0x0c,0x00,0x00,0x00,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x21,0x28,0x00,0x00,0x80,0x3f,0x24,0x26,0x3e,0x46,0x00,0x0c,0x0a,0x00,0x06,0x24, +0x28,0x00,0x03,0x24,0x05,0x00,0x02,0x24,0x09,0x24,0x03,0xa2,0x08,0x24,0x02,0xa2, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x39,0x15,0x00,0x0c, +0x48,0x00,0x04,0x24,0x21,0x80,0x40,0x00,0x10,0x00,0xa5,0x27,0xe4,0xff,0x40,0x10, +0x0a,0x00,0x06,0x24,0x08,0x00,0x44,0x94,0x14,0x00,0x02,0x24,0x14,0x00,0x02,0xae, +0x02,0x80,0x02,0x3c,0x28,0x00,0x03,0x24,0x25,0x20,0x82,0x00,0x0c,0x00,0x03,0xae, +0x52,0x46,0x00,0x0c,0x20,0x00,0x84,0x24,0x59,0x0a,0x00,0x0c,0x21,0x20,0x00,0x02, +0x0a,0x5b,0x00,0x08,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0x21,0x20,0x82,0x00, +0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xe8,0xff,0xbd,0x27,0xff,0x00,0xa5,0x30,0x10,0x00,0xb0,0xaf, +0x14,0x00,0xbf,0xaf,0x18,0x00,0xa0,0x14,0xff,0x00,0x90,0x30,0x2c,0x00,0x00,0x12, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x01,0x00,0x07,0x24,0xb0,0x44,0x67,0xa0, +0x02,0x80,0x08,0x3c,0xb2,0x44,0x02,0x91,0x02,0x00,0x04,0x24,0x21,0x28,0x00,0x00, +0x02,0x00,0x42,0x34,0x00,0x03,0x06,0x24,0xb2,0x44,0x02,0xa1,0x71,0x14,0x00,0x0c, +0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x42,0xb0,0x02,0x3c, +0x44,0x00,0x03,0x24,0x03,0x00,0x42,0x34,0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa0, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x24,0x02,0x80,0x02,0x3c, +0xb0,0x44,0x43,0xa0,0x02,0x80,0x02,0x3c,0xb3,0x44,0x43,0x90,0x0f,0x00,0x02,0x24, +0x02,0x80,0x05,0x3c,0x0f,0x00,0x63,0x30,0x07,0x00,0x62,0x10,0x01,0x00,0x04,0x24, +0xb2,0x44,0xa2,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x34,0xb2,0x44,0xa2,0xa0, +0x1c,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0xdb,0xff,0x00,0x16,0x02,0x80,0x03,0x3c, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0xb0,0x44,0x40,0xa0,0x02,0x80,0x03,0x3c,0x99,0x44,0x64,0x90,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0xff,0x00,0x84,0x30,0xf9,0x1f,0x00,0x08,0x18,0x00,0xbd,0x27, +0xe8,0xff,0xbd,0x27,0x10,0x00,0xb2,0xaf,0x0c,0x00,0xb1,0xaf,0x08,0x00,0xb0,0xaf, +0x21,0x40,0xe0,0x00,0x21,0x90,0xa0,0x03,0x21,0x60,0xc0,0x00,0x21,0x78,0x80,0x00, +0x45,0x00,0xe0,0x14,0x21,0x50,0xa0,0x00,0x2b,0x10,0xa6,0x00,0x78,0x00,0x40,0x10, +0xff,0xff,0x02,0x34,0x2b,0x10,0x46,0x00,0x8f,0x01,0x40,0x10,0x21,0x28,0xc0,0x00, +0xff,0x00,0x02,0x3c,0xff,0xff,0x42,0x34,0x10,0x00,0x03,0x24,0x2b,0x10,0x46,0x00, +0x18,0x00,0x04,0x24,0x21,0x30,0x60,0x00,0x0b,0x30,0x82,0x00,0x02,0x80,0x03,0x3c, +0x06,0x10,0xc5,0x00,0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x90, +0x20,0x00,0x02,0x24,0x21,0x20,0x86,0x00,0x23,0x30,0x44,0x00,0x08,0x00,0xc0,0x10, +0x02,0x4c,0x0c,0x00,0x23,0x10,0x46,0x00,0x06,0x10,0x4f,0x00,0x04,0x18,0xca,0x00, +0x25,0x50,0x62,0x00,0x04,0x60,0xcc,0x00,0x04,0x78,0xcf,0x00,0x02,0x4c,0x0c,0x00, +0x1b,0x00,0x49,0x01,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00, +0xff,0xff,0x87,0x31,0x02,0x24,0x0f,0x00,0x12,0x18,0x00,0x00,0x10,0x28,0x00,0x00, +0x00,0x14,0x05,0x00,0x25,0x28,0x44,0x00,0x18,0x00,0x67,0x00,0x12,0x58,0x00,0x00, +0x2b,0x18,0xab,0x00,0x00,0x00,0x00,0x00,0x1b,0x00,0x49,0x01,0x02,0x00,0x20,0x15, +0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00, +0x21,0x28,0xac,0x00,0x2b,0x10,0xac,0x00,0x04,0x00,0x40,0x14,0x2b,0x10,0xab,0x00, +0x00,0x00,0x42,0x38,0x21,0x18,0xac,0x00,0x0b,0x28,0x62,0x00,0x23,0x28,0xab,0x00, +0x1b,0x00,0xa9,0x00,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00, +0xff,0xff,0xe4,0x31,0x12,0x18,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00, +0x42,0x5c,0x00,0x08,0x18,0x00,0x67,0x00,0x2b,0x10,0xa7,0x00,0x0a,0x00,0x40,0x10, +0xff,0xff,0x02,0x34,0x10,0x00,0xb2,0x8f,0x0c,0x00,0xb1,0x8f,0x08,0x00,0xb0,0x8f, +0x21,0x10,0x80,0x00,0x21,0x18,0xa0,0x00,0x00,0x00,0xa4,0xaf,0x04,0x00,0xa5,0xaf, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x2b,0x10,0x47,0x00,0xd2,0x00,0x40,0x10, +0x00,0x01,0xe3,0x2c,0xff,0x00,0x02,0x3c,0x10,0x00,0x03,0x24,0xff,0xff,0x42,0x34, +0x2b,0x10,0x47,0x00,0x18,0x00,0x04,0x24,0x21,0x28,0x60,0x00,0x0b,0x28,0x82,0x00, +0x06,0x10,0xa8,0x00,0x02,0x80,0x03,0x3c,0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,0x21,0x20,0x85,0x00,0x23,0x30,0x44,0x00, +0xce,0x00,0xc0,0x14,0x23,0x38,0x46,0x00,0x2b,0x10,0x0a,0x01,0x04,0x00,0x40,0x14, +0x23,0x20,0xec,0x01,0x2b,0x10,0xec,0x01,0x05,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x2b,0x10,0xe4,0x01,0x23,0x18,0x48,0x01,0x23,0x50,0x62,0x00,0x21,0x78,0x80,0x00, +0x04,0x00,0x40,0x12,0x21,0xc0,0xe0,0x01,0x21,0xc8,0x40,0x01,0x00,0x00,0x58,0xae, +0x04,0x00,0x59,0xae,0x00,0x00,0xa2,0x8f,0x04,0x00,0xa3,0x8f,0x10,0x00,0xb2,0x8f, +0x0c,0x00,0xb1,0x8f,0x08,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0x53,0x00,0xc0,0x10,0x01,0x00,0x02,0x24,0xff,0xff,0x02,0x34,0x2b,0x10,0x4c,0x00, +0x59,0x00,0x40,0x14,0xff,0x00,0x02,0x3c,0x00,0x01,0x83,0x2d,0x08,0x00,0x02,0x24, +0x21,0x28,0x00,0x00,0x0a,0x28,0x43,0x00,0x06,0x10,0xac,0x00,0x02,0x80,0x03,0x3c, +0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24, +0x21,0x20,0x85,0x00,0x23,0x30,0x44,0x00,0x5b,0x00,0xc0,0x14,0x00,0x00,0x00,0x00, +0x23,0x50,0x4c,0x01,0x02,0x4c,0x0c,0x00,0xff,0xff,0x8d,0x31,0x1b,0x00,0x49,0x01, +0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x02,0x24,0x0f,0x00, +0x12,0x18,0x00,0x00,0x10,0x28,0x00,0x00,0x00,0x14,0x05,0x00,0x25,0x28,0x44,0x00, +0x18,0x00,0x6d,0x00,0x12,0x58,0x00,0x00,0x2b,0x18,0xab,0x00,0x00,0x00,0x00,0x00, +0x1b,0x00,0x49,0x01,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00, +0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x21,0x28,0xac,0x00,0x2b,0x10,0xac,0x00, +0x04,0x00,0x40,0x14,0x2b,0x10,0xab,0x00,0x00,0x00,0x42,0x38,0x21,0x18,0xac,0x00, +0x0b,0x28,0x62,0x00,0x23,0x28,0xab,0x00,0x1b,0x00,0xa9,0x00,0x02,0x00,0x20,0x15, +0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0xff,0xff,0xe4,0x31,0x12,0x18,0x00,0x00, +0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x6d,0x00, +0x00,0x14,0x08,0x00,0x12,0x58,0x00,0x00,0x25,0x40,0x44,0x00,0x2b,0x18,0x0b,0x01, +0x1b,0x00,0xa9,0x00,0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00, +0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x21,0x40,0x0c,0x01,0x2b,0x10,0x0c,0x01, +0x04,0x00,0x40,0x14,0x2b,0x10,0x0b,0x01,0x21,0x18,0x0c,0x01,0x00,0x00,0x42,0x38, +0x0b,0x40,0x62,0x00,0xab,0xff,0x40,0x12,0x23,0x78,0x0b,0x01,0x06,0xc0,0xcf,0x00, +0x21,0xc8,0x00,0x00,0x00,0x00,0x58,0xae,0xff,0x5b,0x00,0x08,0x04,0x00,0x59,0xae, +0x1b,0x00,0x47,0x00,0x02,0x00,0xe0,0x14,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00, +0xff,0xff,0x02,0x34,0x12,0x60,0x00,0x00,0x2b,0x10,0x4c,0x00,0xab,0xff,0x40,0x10, +0x00,0x01,0x83,0x2d,0xff,0x00,0x02,0x3c,0x10,0x00,0x03,0x24,0xff,0xff,0x42,0x34, +0x2b,0x10,0x4c,0x00,0x18,0x00,0x04,0x24,0x21,0x28,0x60,0x00,0x0b,0x28,0x82,0x00, +0x02,0x80,0x03,0x3c,0x06,0x10,0xac,0x00,0xfc,0xb2,0x63,0x24,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,0x21,0x20,0x85,0x00,0x23,0x30,0x44,0x00, +0xa7,0xff,0xc0,0x10,0x00,0x00,0x00,0x00,0x23,0x38,0x46,0x00,0x04,0x60,0xcc,0x00, +0x06,0x58,0xea,0x00,0x02,0x4c,0x0c,0x00,0x1b,0x00,0x69,0x01,0x02,0x00,0x20,0x15, +0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0xff,0xff,0x8d,0x31,0x06,0x18,0xef,0x00, +0x04,0x10,0xca,0x00,0x25,0x50,0x43,0x00,0x02,0x24,0x0a,0x00,0x12,0x28,0x00,0x00, +0x10,0x40,0x00,0x00,0x00,0x14,0x08,0x00,0x25,0x40,0x44,0x00,0x18,0x00,0xad,0x00, +0x12,0x28,0x00,0x00,0x2b,0x18,0x05,0x01,0x00,0x00,0x00,0x00,0x1b,0x00,0x69,0x01, +0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x05,0x00,0x60,0x10, +0x04,0x78,0xcf,0x00,0x21,0x40,0x0c,0x01,0x2b,0x10,0x0c,0x01,0x93,0x00,0x40,0x10, +0x2b,0x10,0x05,0x01,0x23,0x40,0x05,0x01,0x1b,0x00,0x09,0x01,0x02,0x00,0x20,0x15, +0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0xff,0xff,0x44,0x31,0x12,0x18,0x00,0x00, +0x10,0x58,0x00,0x00,0x00,0x14,0x0b,0x00,0x25,0x58,0x44,0x00,0x18,0x00,0x6d,0x00, +0x12,0x28,0x00,0x00,0x2b,0x18,0x65,0x01,0x00,0x00,0x00,0x00,0x1b,0x00,0x09,0x01, +0x02,0x00,0x20,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x77,0xff,0x60,0x10, +0x23,0x50,0x65,0x01,0x21,0x58,0x6c,0x01,0x2b,0x10,0x6c,0x01,0x04,0x00,0x40,0x14, +0x2b,0x10,0x65,0x01,0x00,0x00,0x42,0x38,0x21,0x18,0x6c,0x01,0x0b,0x58,0x62,0x00, +0x1d,0x5c,0x00,0x08,0x23,0x50,0x65,0x01,0x08,0x00,0x02,0x24,0x21,0x28,0x00,0x00, +0x0a,0x28,0x43,0x00,0x02,0x80,0x03,0x3c,0x06,0x10,0xa8,0x00,0xfc,0xb2,0x63,0x24, +0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x90,0x20,0x00,0x02,0x24,0x21,0x20,0x85,0x00, +0x23,0x30,0x44,0x00,0x34,0xff,0xc0,0x10,0x23,0x38,0x46,0x00,0x06,0x10,0xec,0x00, +0x04,0x18,0xc8,0x00,0x25,0x40,0x62,0x00,0x06,0x58,0xea,0x00,0x02,0x6c,0x08,0x00, +0x1b,0x00,0x6d,0x01,0x02,0x00,0xa0,0x15,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00, +0xff,0xff,0x11,0x31,0x06,0x10,0xef,0x00,0x04,0x18,0xca,0x00,0x25,0x50,0x62,0x00, +0x02,0x24,0x0a,0x00,0x04,0x60,0xcc,0x00,0x12,0x80,0x00,0x00,0x10,0x48,0x00,0x00, +0x00,0x14,0x09,0x00,0x25,0x48,0x44,0x00,0x12,0x28,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x18,0x00,0x11,0x02,0x12,0x70,0x00,0x00,0x2b,0x18,0x2e,0x01, +0x00,0x00,0x00,0x00,0x1b,0x00,0x6d,0x01,0x02,0x00,0xa0,0x15,0x00,0x00,0x00,0x00, +0x0d,0x00,0x07,0x00,0x0a,0x00,0x60,0x10,0x04,0x78,0xcf,0x00,0x21,0x48,0x28,0x01, +0x2b,0x10,0x28,0x01,0x06,0x00,0x40,0x14,0xff,0xff,0xb0,0x24,0x2b,0x10,0x2e,0x01, +0x03,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x10,0x26,0x21,0x48,0x28,0x01, +0x23,0x48,0x2e,0x01,0x1b,0x00,0x2d,0x01,0x02,0x00,0xa0,0x15,0x00,0x00,0x00,0x00, +0x0d,0x00,0x07,0x00,0xff,0xff,0x44,0x31,0x12,0x28,0x00,0x00,0x10,0x58,0x00,0x00, +0x00,0x14,0x0b,0x00,0x25,0x58,0x44,0x00,0x18,0x00,0xb1,0x00,0x12,0x70,0x00,0x00, +0x2b,0x18,0x6e,0x01,0x00,0x00,0x00,0x00,0x1b,0x00,0x2d,0x01,0x02,0x00,0xa0,0x15, +0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x0b,0x00,0x60,0x10,0x00,0x14,0x10,0x00, +0x21,0x58,0x68,0x01,0x2b,0x10,0x68,0x01,0x06,0x00,0x40,0x14,0xff,0xff,0xa5,0x24, +0x2b,0x10,0x6e,0x01,0x04,0x00,0x40,0x10,0x00,0x14,0x10,0x00,0xff,0xff,0xa5,0x24, +0x21,0x58,0x68,0x01,0x00,0x14,0x10,0x00,0x25,0x10,0x45,0x00,0x23,0x58,0x6e,0x01, +0x19,0x00,0x4c,0x00,0x10,0x28,0x00,0x00,0x2b,0x18,0x65,0x01,0x12,0x48,0x00,0x00, +0x05,0x00,0x60,0x14,0x23,0x20,0x2c,0x01,0x07,0x00,0xab,0x14,0x2b,0x10,0xe9,0x01, +0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x24,0x01,0x23,0x18,0xa8,0x00, +0x23,0x28,0x62,0x00,0x21,0x48,0x80,0x00,0xea,0xfe,0x40,0x12,0x23,0x18,0xe9,0x01, +0x23,0x20,0x65,0x01,0x2b,0x10,0xe3,0x01,0x23,0x50,0x82,0x00,0x04,0x28,0xea,0x00, +0x06,0x18,0xc3,0x00,0x25,0xc0,0xa3,0x00,0x06,0xc8,0xca,0x00,0x00,0x00,0x58,0xae, +0xff,0x5b,0x00,0x08,0x04,0x00,0x59,0xae,0x00,0x01,0xc3,0x2c,0x08,0x00,0x02,0x24, +0x21,0x30,0x00,0x00,0x99,0x5b,0x00,0x08,0x0a,0x30,0x43,0x00,0x00,0x00,0x42,0x38, +0x21,0x18,0x0c,0x01,0x93,0x5c,0x00,0x08,0x0b,0x40,0x62,0x00,0x25,0xb0,0x02,0x3c, +0x4d,0x00,0x44,0x34,0xff,0x00,0x03,0x3c,0xec,0x02,0x42,0x34,0x00,0x00,0x43,0xac, +0x00,0x00,0x80,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0xc4,0x74,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7f,0x00,0x02,0x3c,0x0d,0xb8,0x46,0x34, +0x80,0x00,0x03,0x3c,0x25,0x30,0xc3,0x00,0x00,0x04,0x02,0x3c,0x25,0x30,0xc2,0x00, +0x00,0x08,0x03,0x3c,0x25,0x30,0xc3,0x00,0x02,0x80,0x04,0x3c,0x01,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x78,0x1b,0x84,0x24,0x41,0xb0,0x05,0x3c,0xe0,0x74,0x63,0x24, +0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x00,0xa6,0xac,0x10,0x0b,0x86,0xac, +0x08,0x0b,0x86,0xac,0x08,0x00,0xa5,0x34,0x86,0x00,0x06,0x24,0x00,0x00,0xa6,0xa4, +0x14,0x0b,0x86,0xa4,0x0c,0x0b,0x80,0xac,0x16,0x0b,0x80,0xa4,0x08,0x00,0xe0,0x03, +0x18,0x0b,0x86,0xa4,0x53,0x5d,0x00,0x08,0x00,0x00,0x00,0x00,0x42,0xb0,0x02,0x3c, +0xa0,0xff,0x03,0x24,0x01,0x00,0x42,0x34,0xe8,0xff,0xbd,0x27,0x21,0x20,0x00,0x00, +0x01,0x00,0x05,0x24,0x00,0x01,0x06,0x24,0x00,0x00,0x43,0xa0,0x10,0x00,0xbf,0xaf, +0x71,0x14,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,0x03,0x00,0x04,0x24, +0x01,0x00,0x05,0x24,0x40,0x1f,0x06,0x24,0x71,0x14,0x00,0x08,0x18,0x00,0xbd,0x27, +0x25,0xb0,0x03,0x3c,0x01,0x80,0x02,0x3c,0xe0,0xff,0xbd,0x27,0x18,0x03,0x64,0x34, +0x98,0x75,0x42,0x24,0x00,0x00,0x82,0xac,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf, +0x18,0x00,0xbf,0xaf,0xb6,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x02,0x80,0x10,0x3c, +0x78,0x1b,0x10,0x26,0xe3,0x0a,0x02,0xa2,0x34,0x61,0x00,0x0c,0xee,0x23,0x00,0xa2, +0xff,0xff,0x02,0x34,0x21,0x88,0x00,0x02,0xf8,0x23,0x02,0xae,0xf0,0x23,0x00,0xa6, +0xf2,0x23,0x00,0xa6,0xf4,0x23,0x02,0xae,0x21,0x28,0x00,0x00,0x21,0x20,0x00,0x02, +0x04,0x00,0xa2,0x24,0x01,0x00,0xa5,0x24,0x20,0x00,0xa3,0x28,0xee,0x0c,0x82,0xa4, +0xdc,0x0c,0x80,0xa4,0xde,0x0c,0x80,0xa4,0xe0,0x0c,0x80,0xa4,0xe2,0x0c,0x80,0xa4, +0xe4,0x0c,0x80,0xa4,0xe6,0x0c,0x80,0xa4,0xe8,0x0c,0x80,0xa4,0xea,0x0c,0x80,0xa4, +0xec,0x0c,0x80,0xa4,0xf0,0x0c,0x80,0xa0,0xf1,0xff,0x60,0x14,0x24,0x00,0x84,0x24, +0x25,0xb0,0x02,0x3c,0x10,0x00,0x03,0x24,0xb0,0x03,0x42,0x34,0x02,0x80,0x04,0x3c, +0xa0,0x1e,0x84,0x24,0x00,0x00,0x43,0xac,0x21,0x28,0x00,0x00,0x3e,0x46,0x00,0x0c, +0x04,0x00,0x06,0x24,0x11,0x62,0x00,0x0c,0x00,0x00,0x00,0x00,0x84,0x62,0x00,0x0c, +0xec,0x25,0x20,0xae,0xe6,0x63,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c, +0x56,0x43,0x64,0x90,0x92,0x00,0x02,0x24,0x03,0x00,0x82,0x10,0x00,0x00,0x00,0x00, +0x5c,0x64,0x00,0x0c,0x00,0x00,0x00,0x00,0x42,0x64,0x00,0x0c,0x00,0x00,0x00,0x00, +0xbd,0x62,0x00,0x0c,0x00,0x00,0x00,0x00,0xc9,0x64,0x00,0x0c,0x00,0x00,0x00,0x00, +0x50,0x24,0x20,0xa6,0xaf,0x64,0x00,0x0c,0x52,0x24,0x20,0xa6,0xf3,0x64,0x00,0x0c, +0x00,0x00,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x02,0x80,0x05,0x3c,0x02,0x80,0x06,0x3c,0x02,0x80,0x07,0x3c,0x68,0x41,0xa2,0x24, +0x70,0x41,0xc3,0x24,0x78,0x41,0xe4,0x24,0x20,0x00,0xbd,0x27,0x04,0x00,0x42,0xac, +0x68,0x41,0xa2,0xac,0x04,0x00,0x63,0xac,0x70,0x41,0xc3,0xac,0x78,0x41,0xe4,0xac, +0x08,0x00,0xe0,0x03,0x04,0x00,0x84,0xac,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0xe8,0xff,0xbd,0x27,0x00,0x77,0x63,0x24,0x18,0x03,0x42,0x34,0x14,0x00,0xbf,0xaf, +0x10,0x00,0xb0,0xaf,0x00,0x00,0x43,0xac,0x21,0x20,0x00,0x00,0x01,0x00,0x82,0x24, +0xff,0xff,0x44,0x30,0x64,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x52,0x43,0x48,0x90,0x50,0x43,0x65,0x94, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x53,0x43,0x46,0x90,0x60,0x43,0x67,0x90, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x6b,0x43,0x49,0x90,0x6d,0x43,0x6a,0x90, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x70,0x43,0x4b,0x90,0x72,0x43,0x6c,0x90, +0x02,0x80,0x02,0x3c,0x07,0x00,0x03,0x24,0x25,0xb0,0x04,0x3c,0x5d,0x43,0x43,0xa0, +0xb0,0x03,0x84,0x34,0x02,0x80,0x02,0x3c,0x00,0x00,0x85,0xac,0x5e,0x43,0x40,0xa0, +0x02,0x80,0x02,0x3c,0x00,0x00,0x86,0xac,0x5f,0x43,0x40,0xa0,0x02,0x80,0x02,0x3c, +0x00,0x00,0x87,0xac,0x02,0x80,0x03,0x3c,0x80,0x43,0x40,0xa0,0x02,0x80,0x10,0x3c, +0x02,0x80,0x02,0x3c,0x78,0x1b,0x0d,0x26,0x7e,0x43,0x60,0xa4,0x7c,0x43,0x40,0xa4, +0x01,0x00,0x03,0x24,0xfd,0xff,0x02,0x24,0xe0,0x0a,0xa3,0xa1,0xe2,0x0a,0xa2,0xa1, +0xff,0x07,0x03,0x24,0x00,0x78,0x02,0x24,0xe6,0x0a,0xa3,0xa5,0xe4,0x0a,0xa2,0xa5, +0xff,0xff,0x03,0x24,0x02,0x80,0x02,0x3c,0x00,0x00,0x88,0xac,0x0f,0x00,0x0e,0x31, +0x00,0x00,0x89,0xac,0x00,0x00,0x8a,0xac,0x00,0x00,0x8b,0xac,0x00,0x00,0x8c,0xac, +0x91,0x43,0x43,0xa0,0x02,0x00,0x02,0x24,0xe8,0x0a,0xa0,0xa1,0x31,0x00,0xc2,0x11, +0x82,0x0b,0xa0,0xa1,0x00,0x80,0x02,0x3c,0x15,0x15,0x03,0x3c,0x02,0xbc,0x42,0x34, +0x07,0x07,0x63,0x34,0x74,0x0b,0xa2,0xad,0x6c,0x0b,0xa3,0xad,0x02,0x02,0x02,0x3c, +0x70,0x0b,0xa2,0xad,0x02,0x80,0x02,0x3c,0x25,0xb0,0x04,0x3c,0x9c,0x43,0x40,0xa4, +0x0a,0x00,0x83,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x30, +0x12,0x00,0x40,0x10,0x4c,0x87,0x02,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x10,0x00,0x42,0x30,0x38,0x00,0x40,0x14,0x21,0x20,0x00,0x00,0x08,0x00,0x82,0x24, +0xff,0xff,0x44,0x30,0x80,0x00,0x83,0x2c,0xfc,0xff,0x60,0x14,0x78,0x1b,0x03,0x26, +0x01,0x00,0x02,0x24,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x05,0x00,0x04,0x24, +0x8b,0x0b,0x62,0xa0,0x93,0x12,0x00,0x08,0x18,0x00,0xbd,0x27,0x54,0x00,0x85,0x34, +0x00,0xe0,0x42,0x34,0x50,0x00,0x84,0x34,0x12,0x01,0x03,0x24,0x00,0x00,0x82,0xac, +0x00,0x00,0xa3,0xac,0x01,0x00,0x02,0x24,0x78,0x1b,0x03,0x26,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x05,0x00,0x04,0x24,0x8b,0x0b,0x62,0xa0,0x93,0x12,0x00,0x08, +0x18,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x57,0x43,0x44,0x90,0x06,0x00,0x03,0x24, +0x25,0x00,0x83,0x10,0x0b,0x00,0x02,0x24,0x10,0x00,0x82,0x10,0x00,0x80,0x02,0x3c, +0x02,0x80,0x02,0x3c,0x6a,0x43,0x43,0x90,0x00,0x00,0x00,0x00,0x2c,0x00,0x60,0x10, +0x00,0xe0,0x02,0x3c,0x04,0xe0,0x02,0x3c,0x78,0x1b,0x04,0x26,0x00,0x8e,0x42,0x34, +0x00,0x15,0x03,0x3c,0x74,0x0b,0x82,0xac,0x00,0x15,0x63,0x34,0x00,0x42,0x02,0x24, +0x6c,0x0b,0x83,0xac,0x0f,0x5e,0x00,0x08,0x70,0x0b,0x82,0xac,0x00,0xbc,0x42,0x34, +0x15,0x15,0x03,0x3c,0x74,0x0b,0xa2,0xad,0x07,0x07,0x63,0x34,0x03,0x03,0x02,0x3c, +0x0e,0x5e,0x00,0x08,0x6c,0x0b,0xa3,0xad,0x02,0x80,0x06,0x3c,0x00,0xb4,0xc6,0x24, +0xf5,0x13,0x00,0x0c,0x80,0x00,0x05,0x24,0x78,0x1b,0x03,0x26,0x01,0x00,0x02,0x24, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x05,0x00,0x04,0x24,0x8b,0x0b,0x62,0xa0, +0x93,0x12,0x00,0x08,0x18,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c,0x6a,0x43,0x43,0x90, +0x00,0x00,0x00,0x00,0x13,0x00,0x60,0x10,0x1c,0x1c,0x03,0x3c,0x04,0xc0,0x02,0x3c, +0x00,0xb8,0x42,0x34,0x74,0x0b,0xa2,0xad,0x00,0x15,0x03,0x3c,0x02,0x02,0x02,0x3c, +0x00,0x07,0x63,0x34,0x00,0x22,0x42,0x34,0x0e,0x5e,0x00,0x08,0x6c,0x0b,0xa3,0xad, +0x78,0x1b,0x04,0x26,0x00,0xb2,0x42,0x34,0x00,0x1c,0x03,0x3c,0x74,0x0b,0x82,0xac, +0x00,0x1c,0x63,0x34,0x00,0x04,0x02,0x24,0x6c,0x0b,0x83,0xac,0x0f,0x5e,0x00,0x08, +0x70,0x0b,0x82,0xac,0x00,0xc0,0x02,0x3c,0x00,0xb2,0x42,0x34,0x74,0x0b,0xa2,0xad, +0x07,0x07,0x63,0x34,0x00,0x04,0x02,0x24,0x0e,0x5e,0x00,0x08,0x6c,0x0b,0xa3,0xad, +0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x01,0x80,0x02,0x3c,0x25,0xb0,0x10,0x3c, +0x18,0x03,0x03,0x36,0xf8,0x79,0x42,0x24,0x00,0x00,0x62,0xac,0x14,0x00,0xbf,0xaf, +0xc0,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0xff,0x5e,0x00,0x0c,0x00,0x00,0x00,0x00, +0x25,0x61,0x00,0x0c,0x00,0x00,0x00,0x00,0x29,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00, +0x3a,0x41,0x00,0x0c,0x00,0x00,0x00,0x00,0x66,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00, +0x44,0x00,0x03,0x36,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x34, +0x00,0x00,0x62,0xa4,0x31,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0x55,0x5d,0x00,0x0c, +0x00,0x00,0x00,0x00,0xf1,0x60,0x00,0x0c,0x00,0x00,0x00,0x00,0xaf,0x60,0x00,0x0c, +0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x3c,0xac,0x37,0x84,0x24,0x0e,0x61,0x00,0x0c, +0x01,0x00,0x05,0x24,0x00,0x80,0x04,0x3c,0xcc,0x41,0x84,0x24,0x0e,0x61,0x00,0x0c, +0x02,0x00,0x05,0x24,0x01,0x80,0x04,0x3c,0xa4,0x20,0x84,0x24,0x0e,0x61,0x00,0x0c, +0x04,0x00,0x05,0x24,0x04,0x50,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x3c, +0x08,0x53,0x84,0x24,0x0e,0x61,0x00,0x0c,0x03,0x00,0x05,0x24,0x02,0x80,0x02,0x3c, +0x60,0x43,0x43,0x90,0x43,0x00,0x04,0x36,0x2a,0x00,0x60,0x10,0xd8,0x00,0x10,0x36, +0x07,0x00,0x02,0x24,0x2c,0x00,0x62,0x10,0x25,0xb0,0x04,0x3c,0x43,0x00,0x85,0x34, +0x10,0x02,0x86,0x34,0x03,0x00,0x02,0x24,0x10,0x00,0x03,0x24,0x00,0x00,0xa2,0xa0, +0xd8,0x00,0x84,0x34,0x00,0x00,0xc3,0xa0,0x00,0x00,0x82,0x90,0x80,0xff,0x03,0x24, +0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xa0,0x32,0x61,0x00,0x0c,0x00,0x00,0x00,0x00, +0x42,0xb0,0x03,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x34, +0x00,0x00,0x62,0xa0,0x38,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c, +0x44,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24, +0xc0,0x00,0x42,0x34,0x00,0x00,0x62,0xa4,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00, +0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0x53,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0x00,0x00,0x80,0xa0,0x00,0x00,0x03,0x92,0x80,0xff,0x02,0x24, +0x25,0x18,0x62,0x00,0x00,0x00,0x03,0xa2,0x32,0x61,0x00,0x0c,0x00,0x00,0x00,0x00, +0x42,0xb0,0x03,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x34, +0x00,0x00,0x62,0xa0,0x38,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c, +0x44,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24, +0xc0,0x00,0x42,0x34,0x00,0x00,0x62,0xa4,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00, +0x2d,0x28,0x00,0x0c,0x21,0x38,0x00,0x00,0x53,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0xb0,0xff,0xbd,0x27,0x02,0x80,0x03,0x3c,0x4c,0x00,0xbf,0xaf, +0x48,0x00,0xbe,0xaf,0x3c,0x00,0xb5,0xaf,0x38,0x00,0xb4,0xaf,0x34,0x00,0xb3,0xaf, +0x30,0x00,0xb2,0xaf,0x2c,0x00,0xb1,0xaf,0x28,0x00,0xb0,0xaf,0x44,0x00,0xb7,0xaf, +0x40,0x00,0xb6,0xaf,0x78,0x1b,0x62,0x24,0xe2,0x0a,0x43,0x90,0xe4,0x0a,0x45,0x94, +0xe6,0x0a,0x46,0x94,0x1c,0x00,0xa3,0xa3,0x6c,0x0b,0x43,0x8c,0x24,0xb0,0x04,0x3c, +0x21,0xb0,0x07,0x3c,0x10,0x00,0xa3,0xaf,0x70,0x0b,0x43,0x8c,0x25,0xb0,0x1e,0x3c, +0x01,0x00,0x88,0x34,0x14,0x00,0xa3,0xaf,0x74,0x0b,0x42,0x8c,0x21,0x38,0xa7,0x00, +0xff,0x1f,0x03,0x3c,0x18,0x00,0xa2,0xaf,0x20,0xb0,0x02,0x3c,0xff,0xff,0x42,0x34, +0x21,0x28,0xa2,0x00,0x4c,0x81,0x02,0x3c,0xff,0xff,0x63,0x34,0x21,0x40,0xc8,0x00, +0x58,0x00,0xc9,0x37,0x21,0x30,0xc4,0x00,0x00,0xe0,0x42,0x34,0x00,0x00,0x22,0xad, +0xff,0xff,0x04,0x24,0x24,0x40,0x03,0x01,0x24,0x28,0xa3,0x00,0x24,0x38,0xe3,0x00, +0x24,0x30,0xc3,0x00,0x5c,0x00,0xca,0x37,0x60,0x00,0xcb,0x37,0x64,0x00,0xcc,0x37, +0x8a,0x00,0xcd,0x37,0x96,0x01,0x03,0x24,0x28,0x28,0x02,0x24,0x00,0x00,0x43,0xad, +0x89,0x00,0xce,0x37,0x00,0x00,0x64,0xad,0x8c,0x00,0xcf,0x37,0x00,0x00,0x84,0xad, +0x09,0x00,0x03,0x24,0x00,0x00,0xa2,0xa5,0x0a,0x0a,0x02,0x24,0x00,0x00,0xc3,0xa1, +0x00,0x00,0xe2,0xa5,0x25,0xb0,0x02,0x3c,0x0e,0x0e,0x03,0x24,0x8e,0x00,0x42,0x34, +0x00,0x00,0x43,0xa4,0x90,0x00,0xd1,0x37,0x13,0x00,0x02,0x24,0x00,0x00,0x22,0xa2, +0x40,0x00,0x03,0x24,0x3a,0x01,0x02,0x24,0x91,0x00,0xd2,0x37,0x92,0x00,0xd3,0x37, +0x00,0x00,0x43,0xa2,0x00,0x00,0x62,0xa6,0x25,0xb0,0x02,0x3c,0x21,0x00,0x03,0x24, +0xb5,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x10,0x00,0xa3,0x8f,0xa0,0x00,0xd5,0x37, +0x25,0xb0,0x02,0x3c,0x00,0x00,0xa3,0xae,0x14,0x00,0xa3,0x8f,0xa4,0x00,0x42,0x34, +0xb0,0x00,0xdf,0x37,0x00,0x00,0x43,0xac,0x18,0x00,0xa3,0x8f,0x25,0xb0,0x02,0x3c, +0xa8,0x00,0x42,0x34,0x00,0x00,0x43,0xac,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c, +0xac,0x00,0x42,0x34,0xf8,0x00,0x63,0x34,0x00,0x00,0x45,0xac,0x00,0x00,0x67,0xac, +0x25,0xb0,0x02,0x3c,0x25,0xb0,0x03,0x3c,0x08,0x01,0x42,0x34,0xd8,0x00,0x63,0x34, +0x00,0x00,0xe6,0xaf,0x00,0x00,0x48,0xac,0x00,0x00,0x60,0xa0,0x1c,0x00,0xa3,0x93, +0x25,0xb0,0x02,0x3c,0xb4,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c, +0x04,0x00,0x03,0x24,0xb6,0x00,0x42,0x34,0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c, +0xb9,0x00,0x42,0x34,0x25,0xb0,0x03,0x3c,0x00,0x00,0x44,0xa0,0xba,0x00,0x63,0x34, +0x0f,0x00,0x02,0x24,0x00,0x00,0x62,0xa4,0x25,0xb0,0x02,0x3c,0x1a,0x01,0x42,0x34, +0x16,0x01,0xd4,0x37,0x18,0x01,0xd0,0x37,0x25,0xb0,0x03,0x3c,0x00,0x00,0x80,0xa6, +0xdc,0x00,0x63,0x34,0x00,0x00,0x00,0xa6,0x00,0x00,0x40,0xa4,0xff,0xcf,0x02,0x24, +0x00,0x00,0x62,0xac,0x02,0x80,0x02,0x3c,0x56,0x43,0x42,0x90,0xd0,0x01,0xc4,0x37, +0x5e,0x00,0x03,0x3c,0x20,0x00,0xa2,0xaf,0x2f,0x00,0x02,0x3c,0x32,0x32,0x42,0x34, +0x00,0x00,0x82,0xac,0x08,0x00,0x02,0x3c,0x32,0x43,0x63,0x34,0x30,0xa5,0x42,0x34, +0xd4,0x01,0xc5,0x37,0xd8,0x01,0xc6,0x37,0x00,0x00,0xa3,0xac,0xdc,0x01,0xc7,0x37, +0x00,0x00,0xc2,0xac,0x49,0xa5,0x03,0x34,0x1a,0x06,0x02,0x24,0xe0,0x01,0xc8,0x37, +0x00,0x00,0xe3,0xac,0xf4,0x01,0xc9,0x37,0x00,0x00,0x02,0xa5,0x07,0x07,0x03,0x24, +0xc2,0x00,0x02,0x3c,0x00,0x00,0x23,0xa5,0x51,0x10,0x42,0x34,0x26,0x00,0x03,0x24, +0xf8,0x01,0xca,0x37,0x00,0x02,0xcb,0x37,0x00,0x00,0x42,0xad,0x03,0x02,0xcc,0x37, +0x00,0x00,0x63,0xa5,0x0c,0x00,0x02,0x24,0x04,0x00,0x03,0x24,0x36,0x02,0xcd,0x37, +0x00,0x00,0x83,0xa1,0x34,0x02,0xce,0x37,0x00,0x00,0xa2,0xa1,0xc0,0x01,0x03,0x24, +0x03,0x00,0x02,0x24,0x37,0x02,0xcf,0x37,0x00,0x00,0xc3,0xa5,0x00,0x00,0xe2,0xa1, +0x20,0x00,0xa2,0x8f,0x22,0x00,0x03,0x24,0xd2,0x00,0x43,0x10,0x1b,0x1b,0x02,0x3c, +0x13,0x13,0x02,0x3c,0x13,0x13,0x42,0x34,0x60,0x01,0xc3,0x37,0x64,0x01,0xc4,0x37, +0x68,0x01,0xc5,0x37,0x7c,0x01,0xca,0x37,0x6c,0x01,0xc6,0x37,0x70,0x01,0xc7,0x37, +0x74,0x01,0xc8,0x37,0x78,0x01,0xc9,0x37,0x00,0x00,0x62,0xac,0x00,0x00,0x82,0xac, +0x02,0x80,0x03,0x3c,0x00,0x00,0xa2,0xac,0x00,0x00,0xc2,0xac,0x00,0x00,0xe2,0xac, +0x00,0x00,0x02,0xad,0x00,0x00,0x22,0xad,0x00,0x00,0x42,0xad,0x56,0x43,0x65,0x90, +0x25,0xb0,0x0c,0x3c,0x01,0x70,0x03,0x3c,0x80,0x01,0x82,0x35,0x08,0x5f,0x63,0x34, +0x22,0x00,0x04,0x24,0x00,0x00,0x43,0xac,0xb1,0x00,0xa4,0x10,0x0f,0x1f,0x02,0x3c, +0x92,0x00,0x02,0x24,0xae,0x00,0xa2,0x10,0x0f,0x1f,0x02,0x3c,0x0f,0x10,0x02,0x3c, +0x00,0xf0,0x4f,0x34,0xf7,0x01,0x91,0x35,0x15,0xf0,0x4d,0x34,0x77,0x00,0x0e,0x24, +0x84,0x01,0x87,0x35,0x88,0x01,0x88,0x35,0x10,0xf0,0x44,0x34,0x8c,0x01,0x85,0x35, +0x05,0xf0,0x42,0x34,0x00,0x00,0xed,0xac,0x90,0x01,0x83,0x35,0x00,0x00,0x04,0xad, +0x94,0x01,0x86,0x35,0x00,0x00,0xa2,0xac,0xf5,0x0f,0x02,0x24,0x00,0x00,0x6f,0xac, +0x25,0xb0,0x05,0x3c,0x00,0x00,0xc2,0xac,0x98,0x01,0x89,0x35,0x9c,0x01,0x8a,0x35, +0xf0,0x0f,0x03,0x24,0x0d,0x00,0x02,0x24,0x00,0x00,0x23,0xad,0xa0,0x01,0x8b,0x35, +0x00,0x00,0x42,0xad,0xa7,0x01,0xb7,0x34,0xf6,0x01,0x8c,0x35,0xff,0xff,0x02,0x24, +0x00,0x00,0x6d,0xad,0x03,0x04,0x04,0x3c,0x00,0x00,0x8e,0xa1,0x07,0x08,0x03,0x3c, +0x00,0x00,0x2e,0xa2,0x00,0x00,0xe2,0xa2,0x25,0xb0,0x02,0x3c,0x01,0x02,0x84,0x34, +0x05,0x06,0x63,0x34,0xa8,0x01,0xb6,0x34,0xff,0xff,0x09,0x24,0xac,0x01,0xaf,0x34, +0xb4,0x01,0xb1,0x34,0xb8,0x01,0xb2,0x34,0xbc,0x01,0xb3,0x34,0xb0,0x01,0x42,0x34, +0x00,0x00,0xc9,0xae,0x00,0x00,0xe9,0xad,0x00,0x00,0x44,0xac,0x00,0x00,0x23,0xae, +0x00,0x00,0x44,0xae,0x00,0x00,0x63,0xae,0x25,0xb0,0x03,0x3c,0x0c,0x00,0x06,0x24, +0xc0,0x01,0x63,0x34,0x25,0xb0,0x02,0x3c,0x00,0x00,0x66,0xa0,0xc1,0x01,0xb5,0x34, +0xc2,0x01,0x42,0x34,0x25,0xb0,0x03,0x3c,0x00,0x00,0xa6,0xa2,0x0d,0x00,0x08,0x24, +0x00,0x00,0x46,0xa0,0xc4,0x01,0xab,0x34,0xc5,0x01,0xac,0x34,0x0e,0x00,0x07,0x24, +0xc6,0x01,0xaa,0x34,0xc7,0x01,0xad,0x34,0xc3,0x01,0x63,0x34,0x0f,0x00,0x02,0x24, +0x00,0x00,0x68,0xa0,0x00,0x00,0x68,0xa1,0x00,0x00,0x87,0xa1,0x00,0x00,0x47,0xa1, +0x00,0x00,0xa2,0xa1,0x57,0x01,0x02,0x3c,0x48,0x00,0xbf,0x34,0x46,0x00,0xae,0x34, +0x0e,0xe2,0x42,0x34,0x00,0x00,0xc0,0xa5,0x4c,0x00,0xbe,0x34,0x00,0x00,0xe2,0xaf, +0x4d,0x00,0xb9,0x34,0x80,0xff,0x02,0x24,0x00,0x00,0xc0,0xa3,0x00,0x00,0x22,0xa3, +0x25,0xb0,0x02,0x3c,0xbc,0x00,0x03,0x24,0x40,0x00,0x42,0x34,0x00,0x00,0x43,0xa4, +0x25,0xb0,0x03,0x3c,0x64,0x03,0xb8,0x34,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34, +0x00,0x00,0x00,0xa3,0x00,0x00,0x62,0xa4,0x02,0x80,0x02,0x3c,0xd8,0x00,0xaa,0x34, +0x78,0x1b,0x43,0x24,0xe2,0x0a,0x64,0x90,0x00,0x00,0x47,0x91,0x2a,0xb0,0x06,0x3c, +0xa0,0xff,0x02,0x24,0x25,0x38,0xe2,0x00,0x34,0x00,0xc9,0x34,0x01,0x00,0x83,0x24, +0x00,0x00,0x47,0xa1,0x26,0xb0,0x08,0x3c,0x00,0x00,0x23,0xa1,0x30,0x00,0xce,0x34, +0x20,0x20,0x02,0x24,0x38,0x00,0xc6,0x34,0x40,0x00,0x03,0x24,0x00,0x00,0xc2,0xa4, +0x79,0x00,0x0b,0x35,0x00,0x00,0xc3,0xa1,0x94,0x00,0xac,0x34,0x16,0x00,0x02,0x24, +0x64,0x00,0x03,0x24,0x00,0x00,0x62,0xa1,0x7c,0x00,0x15,0x35,0x00,0x00,0x83,0xa5, +0x98,0x00,0xad,0x34,0x7a,0x00,0x08,0x35,0x22,0x00,0x02,0x24,0x04,0x00,0x03,0x24, +0x00,0x00,0xa2,0xa5,0x9c,0x00,0xaf,0x34,0x00,0x00,0x03,0xa1,0x20,0x0c,0x02,0x24, +0x0a,0x00,0x03,0x24,0x00,0x00,0xa2,0xa6,0x00,0x00,0xe3,0xa1,0x25,0xb0,0x03,0x3c, +0xff,0x03,0x02,0x24,0x9a,0x00,0x63,0x34,0x00,0x00,0x62,0xa4,0x96,0x00,0xb1,0x34, +0x02,0x00,0x03,0x24,0x00,0x00,0x23,0xa6,0xb7,0x00,0xb2,0x34,0x89,0x00,0xb3,0x34, +0x20,0x00,0x02,0x24,0x09,0x00,0x03,0x24,0x00,0x00,0x42,0xa2,0x44,0x00,0xa5,0x34, +0x00,0x00,0x63,0xa2,0x00,0x00,0xa2,0x94,0xff,0xfd,0x03,0x24,0x04,0x02,0x06,0x24, +0x24,0x10,0x43,0x00,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa3,0x94,0x29,0xb0,0x02,0x3c, +0x40,0x00,0x42,0x34,0x00,0x02,0x63,0x34,0x00,0x00,0xa3,0xa4,0xff,0x00,0x84,0x30, +0x00,0x00,0x46,0xa4,0xea,0x12,0x00,0x0c,0x00,0x00,0x00,0x00,0x4c,0x00,0xbf,0x8f, +0x48,0x00,0xbe,0x8f,0x44,0x00,0xb7,0x8f,0x40,0x00,0xb6,0x8f,0x3c,0x00,0xb5,0x8f, +0x38,0x00,0xb4,0x8f,0x34,0x00,0xb3,0x8f,0x30,0x00,0xb2,0x8f,0x2c,0x00,0xb1,0x8f, +0x28,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x50,0x00,0xbd,0x27, +0x00,0xf0,0x4f,0x34,0xf7,0x01,0x91,0x35,0x15,0xf0,0x4d,0x34,0xd2,0x5f,0x00,0x08, +0xff,0xff,0x0e,0x24,0xb0,0x5f,0x00,0x08,0x1b,0x1b,0x42,0x34,0x25,0xb0,0x03,0x3c, +0x25,0xb0,0x08,0x3c,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34,0x02,0x80,0x04,0x3c, +0x00,0x00,0x62,0xa4,0x34,0x9b,0x84,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35, +0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00, +0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24, +0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c, +0x02,0x80,0x02,0x3c,0x2c,0x95,0x44,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35, +0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00, +0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24, +0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x02,0x80,0x05,0x3c,0xb0,0x83,0x42,0x24, +0x02,0x80,0x03,0x3c,0xa4,0x43,0xa2,0xac,0x00,0x80,0x02,0x3c,0x44,0x44,0x60,0xac, +0xa4,0x43,0xa4,0x24,0x02,0x80,0x03,0x3c,0x8c,0x0a,0x42,0x24,0x48,0x44,0x60,0xa4, +0x08,0x00,0x82,0xac,0x02,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0x4a,0x44,0x60,0xa4, +0x02,0x80,0x06,0x3c,0x24,0x10,0x42,0x24,0x00,0x80,0x03,0x3c,0x4c,0x44,0xc7,0x24, +0x14,0x00,0x82,0xac,0x68,0x0c,0x63,0x24,0x02,0x80,0x02,0x3c,0x4c,0x44,0xc0,0xac, +0x10,0x00,0x83,0xac,0x04,0x00,0xe0,0xac,0x02,0x80,0x03,0x3c,0x54,0x44,0x40,0xa0, +0x02,0x80,0x02,0x3c,0x58,0x44,0x60,0xac,0x5c,0x44,0x40,0xac,0x01,0x80,0x02,0x3c, +0x00,0x80,0x03,0x3c,0xd8,0x87,0x42,0x24,0x40,0x10,0x63,0x24,0x7c,0x00,0x82,0xac, +0x1c,0x00,0x83,0xac,0x00,0x80,0x02,0x3c,0x00,0x80,0x03,0x3c,0xd8,0x13,0x42,0x24, +0xd0,0x17,0x63,0x24,0x20,0x00,0x82,0xac,0x24,0x00,0x83,0xac,0x00,0x80,0x02,0x3c, +0x00,0x80,0x03,0x3c,0xc4,0x1b,0x42,0x24,0xf8,0x29,0x63,0x24,0x28,0x00,0x82,0xac, +0x2c,0x00,0x83,0xac,0x00,0x80,0x02,0x3c,0x00,0x80,0x03,0x3c,0x14,0x20,0x42,0x24, +0x00,0x22,0x63,0x24,0x30,0x00,0x82,0xac,0x3c,0x00,0x83,0xac,0x00,0x80,0x02,0x3c, +0x00,0x80,0x03,0x3c,0x68,0x04,0x42,0x24,0xb8,0x1f,0x63,0x24,0x50,0x00,0x82,0xac, +0x08,0x00,0xe0,0x03,0x40,0x00,0x83,0xac,0x25,0xb0,0x02,0x3c,0x08,0x00,0x42,0x34, +0x00,0x00,0x43,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x0e,0x3c, +0x02,0x80,0x08,0x3c,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0xf8,0x03,0x4d,0x24, +0x00,0x18,0x6c,0x24,0x01,0x00,0x07,0x24,0x00,0x00,0xcb,0x25,0xff,0xff,0x0a,0x24, +0x00,0x04,0x09,0x25,0x80,0x1a,0x07,0x00,0x21,0x10,0x6b,0x00,0x00,0x00,0x42,0xac, +0x90,0x00,0x4a,0xac,0x00,0x04,0x04,0x8d,0x01,0x00,0xe7,0x24,0x08,0x00,0x45,0x24, +0x21,0x18,0x6d,0x00,0x06,0x00,0xe6,0x28,0x04,0x00,0x82,0xac,0x00,0x00,0x44,0xac, +0x04,0x00,0x49,0xac,0x00,0x04,0x02,0xad,0x8c,0x00,0x40,0xac,0x6c,0x00,0xa3,0xac, +0xf0,0xff,0xc0,0x14,0x68,0x00,0xac,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0xc9,0xad, +0x06,0x00,0xa2,0x2c,0x13,0x00,0x40,0x10,0xff,0xff,0x07,0x24,0x02,0x80,0x02,0x3c, +0x80,0x1a,0x05,0x00,0x00,0x00,0x42,0x24,0x0e,0x00,0xa0,0x10,0x21,0x30,0x62,0x00, +0x90,0x00,0xc3,0x8c,0xff,0xff,0x02,0x24,0x0a,0x00,0x62,0x14,0x00,0x00,0x00,0x00, +0x8c,0x00,0xc2,0x8c,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x01,0x00,0x02,0x24,0x88,0x00,0xc4,0xac,0x8c,0x00,0xc2,0xac,0x90,0x00,0xc5,0xac, +0x21,0x38,0xa0,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00,0x02,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,0x94,0x84,0x63,0x24,0xe8,0xff,0xbd,0x27, +0x00,0x00,0x43,0xac,0x10,0x00,0xbf,0xaf,0x95,0x42,0x00,0x0c,0x21,0x20,0x00,0x00, +0x10,0x00,0xbf,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x03,0x80,0x05,0x3c,0x00,0x80,0xa5,0x24, +0x40,0x10,0x0c,0x3c,0xff,0xff,0xa5,0x30,0x02,0x80,0x04,0x3c,0x78,0x1b,0x84,0x24, +0x25,0xc8,0xac,0x00,0x00,0x25,0x99,0xac,0x80,0x00,0x39,0x27,0xe0,0xff,0xbd,0x27, +0x0c,0x25,0x99,0xac,0x80,0x00,0x39,0x27,0x1c,0x00,0xb7,0xaf,0x18,0x00,0xb6,0xaf, +0x14,0x00,0xb5,0xaf,0x10,0x00,0xb4,0xaf,0x0c,0x00,0xb3,0xaf,0x08,0x00,0xb2,0xaf, +0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf,0x18,0x25,0x99,0xac,0x80,0x00,0x39,0x27, +0x24,0x25,0x99,0xac,0xe2,0x0a,0x86,0x90,0x80,0x00,0x39,0x27,0x30,0x25,0x99,0xac, +0x80,0x00,0x39,0x27,0x3c,0x25,0x99,0xac,0x20,0xb0,0x02,0x3c,0x0c,0x25,0x87,0x8c, +0x18,0x25,0x88,0x8c,0x24,0x25,0x89,0x8c,0x30,0x25,0x8a,0x8c,0x3c,0x25,0x8b,0x8c, +0x00,0x01,0x42,0x34,0x00,0x32,0x06,0x00,0xff,0x1f,0x03,0x3c,0x80,0x00,0x39,0x27, +0x21,0x30,0xc2,0x00,0xff,0xff,0x63,0x34,0x24,0x30,0xc3,0x00,0x48,0x25,0x99,0xac, +0x20,0x10,0x03,0x3c,0x21,0x68,0x20,0x03,0x25,0x28,0xac,0x00,0x25,0xb0,0x0e,0x3c, +0x80,0x00,0x39,0x27,0xfc,0x24,0x85,0xac,0x08,0x25,0x87,0xac,0x14,0x25,0x88,0xac, +0x20,0x25,0x89,0xac,0x2c,0x25,0x8a,0xac,0xcc,0x24,0x86,0xac,0x38,0x25,0x8b,0xac, +0xac,0x00,0xc2,0x35,0x94,0x24,0x83,0xac,0x90,0x24,0x83,0xac,0xa0,0x24,0x83,0xac, +0x9c,0x24,0x83,0xac,0xac,0x24,0x83,0xac,0xa8,0x24,0x83,0xac,0x54,0x25,0x99,0xac, +0xd0,0x24,0x86,0xac,0x44,0x25,0x8d,0xac,0xb8,0x24,0x83,0xac,0xb4,0x24,0x83,0xac, +0xc4,0x24,0x83,0xac,0xc0,0x24,0x83,0xac,0xdc,0x24,0x83,0xac,0xd8,0x24,0x83,0xac, +0x00,0x02,0x39,0x27,0x00,0x00,0x48,0x8c,0xe4,0x0a,0x87,0x94,0x6c,0x25,0x99,0xac, +0xb0,0x00,0xc2,0x35,0x00,0x00,0x56,0x8c,0x21,0x10,0x06,0x3c,0x54,0x25,0x92,0x8c, +0x23,0x10,0x0b,0x3c,0x22,0x10,0x0f,0x3c,0x02,0x80,0x14,0x3c,0x02,0x80,0x15,0x3c, +0x02,0x80,0x17,0x3c,0x02,0x80,0x18,0x3c,0x00,0x80,0xc5,0x34,0x21,0x98,0x20,0x03, +0x23,0x28,0xa7,0x00,0x00,0x02,0x39,0x27,0x24,0x10,0x07,0x3c,0x80,0x41,0x89,0x26, +0x88,0x41,0xaa,0x26,0x90,0x41,0xec,0x26,0x98,0x41,0x0d,0x27,0x00,0x04,0x70,0x35, +0x01,0x00,0x08,0x25,0x00,0x40,0xf1,0x35,0x00,0x01,0xce,0x35,0x01,0x00,0x02,0x24, +0x50,0x25,0x92,0xac,0x59,0x25,0x82,0xa0,0x68,0x25,0x93,0xac,0xc4,0x25,0x90,0xac, +0x88,0x25,0x88,0xac,0x94,0x25,0x85,0xac,0xb8,0x25,0x91,0xac,0xac,0x25,0x96,0xac, +0x00,0x00,0xc7,0xad,0xa8,0x25,0x87,0xac,0xc8,0x25,0x83,0xac,0xe8,0x24,0x83,0xac, +0xe4,0x24,0x83,0xac,0x72,0x25,0x80,0xa4,0x71,0x25,0x80,0xa0,0x70,0x25,0x80,0xa0, +0xbc,0x25,0x8b,0xac,0xc0,0x25,0x8b,0xac,0x80,0x25,0x86,0xac,0x84,0x25,0x86,0xac, +0x8c,0x25,0x86,0xac,0x90,0x25,0x86,0xac,0xb0,0x25,0x8f,0xac,0xb4,0x25,0x8f,0xac, +0xa4,0x25,0x87,0xac,0xcc,0x25,0x83,0xac,0xd8,0x25,0x99,0xac,0xd4,0x25,0x99,0xac, +0x04,0x00,0x4a,0xad,0x80,0x41,0x89,0xae,0x04,0x00,0x8c,0xad,0x88,0x41,0xaa,0xae, +0x04,0x00,0xad,0xad,0x90,0x41,0xec,0xae,0x98,0x41,0x0d,0xaf,0x04,0x00,0x29,0xad, +0x02,0x80,0x02,0x3c,0x00,0x18,0x43,0x24,0x21,0x20,0x20,0x01,0x03,0x00,0x06,0x24, +0x21,0x10,0x80,0x00,0xff,0xff,0xc6,0x24,0x08,0x00,0x79,0xac,0x00,0x00,0x63,0xac, +0x10,0x00,0x60,0xac,0x00,0x00,0x69,0xac,0x21,0x20,0x60,0x00,0x04,0x00,0x62,0xac, +0x00,0x00,0x43,0xac,0x00,0x01,0x39,0x27,0xf5,0xff,0xc1,0x04,0x18,0x00,0x63,0x24, +0x02,0x80,0x02,0x3c,0x88,0x41,0x48,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c, +0x04,0x00,0x07,0x8d,0x60,0x18,0x4b,0x24,0x04,0x00,0x24,0xad,0x00,0x18,0x6a,0x24, +0x01,0x00,0x09,0x24,0x21,0x28,0x00,0x00,0x0f,0x00,0x06,0x24,0x21,0x20,0xab,0x00, +0x21,0x10,0xaa,0x00,0xff,0xff,0xc6,0x24,0x68,0x00,0x59,0xac,0x70,0x00,0x49,0xac, +0x18,0x00,0xa5,0x24,0x00,0x00,0x88,0xac,0x04,0x00,0x87,0xac,0x00,0x00,0xe4,0xac, +0x00,0x01,0x39,0x27,0xf5,0xff,0xc1,0x04,0x21,0x38,0x80,0x00,0x02,0x80,0x02,0x3c, +0x90,0x41,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x04,0x00,0x25,0x8d, +0xe0,0x19,0x4b,0x24,0x04,0x00,0x04,0xad,0x00,0x18,0x6a,0x24,0x02,0x00,0x07,0x24, +0x21,0x20,0x00,0x00,0x0f,0x00,0x06,0x24,0x21,0x40,0x8b,0x00,0x21,0x10,0x8a,0x00, +0xff,0xff,0xc6,0x24,0xe8,0x01,0x59,0xac,0xf0,0x01,0x47,0xac,0x18,0x00,0x84,0x24, +0x00,0x00,0x09,0xad,0x04,0x00,0x05,0xad,0x00,0x00,0xa8,0xac,0x00,0x02,0x39,0x27, +0xf5,0xff,0xc1,0x04,0x21,0x28,0x00,0x01,0x02,0x80,0x05,0x3c,0x98,0x41,0xa5,0x24, +0x04,0x00,0xa6,0x8c,0x1c,0x00,0xb7,0x8f,0x18,0x00,0xb6,0x8f,0x14,0x00,0xb5,0x8f, +0x10,0x00,0xb4,0x8f,0x0c,0x00,0xb3,0x8f,0x08,0x00,0xb2,0x8f,0x04,0x00,0xb1,0x8f, +0x00,0x00,0xb0,0x8f,0x02,0x80,0x07,0x3c,0x02,0x80,0x03,0x3c,0x60,0x1b,0xe4,0x24, +0x00,0x18,0x63,0x24,0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x68,0x03,0x79,0xac, +0x04,0x00,0x28,0xad,0x04,0x00,0xa4,0xac,0x70,0x03,0x62,0xac,0x60,0x1b,0xe5,0xac, +0x04,0x00,0x86,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0xc4,0xac,0xc8,0xff,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf, +0xfc,0xad,0x73,0x24,0x70,0xae,0x52,0x24,0x02,0x80,0x03,0x3c,0xff,0xff,0x02,0x3c, +0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x30,0x00,0xbf,0xaf,0xff,0x1f,0x54,0x34,0x78,0x1b,0x70,0x24,0x21,0x88,0x00,0x00, +0x02,0x80,0x15,0x3c,0x19,0x50,0x00,0x0c,0x21,0x20,0x20,0x02,0x90,0x11,0x05,0x8e, +0x6c,0x00,0x66,0x8e,0x6c,0x00,0x43,0x8e,0xdc,0xad,0xa2,0x26,0x1b,0x00,0x44,0x90, +0x21,0x18,0x66,0x00,0x24,0x28,0xb4,0x00,0x00,0x21,0x04,0x00,0x42,0x18,0x03,0x00, +0x00,0x20,0xa5,0x34,0x5c,0x11,0x03,0xae,0x80,0x11,0x04,0xae,0x90,0x11,0x05,0xae, +0x84,0x11,0x04,0xae,0x21,0x30,0x00,0x00,0x21,0x10,0x06,0x02,0x01,0x00,0xc6,0x24, +0x1d,0x00,0xc3,0x28,0xb1,0x11,0x40,0xa0,0x94,0x11,0x40,0xa0,0xfa,0xff,0x60,0x14, +0xce,0x11,0x40,0xa0,0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0xec,0x11,0x00,0xae, +0xe4,0xff,0x40,0x14,0x94,0x00,0x10,0x26,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c, +0x78,0x1b,0x4b,0x24,0x02,0x80,0x02,0x3c,0x70,0xae,0x6f,0x24,0xfc,0xad,0x4d,0x24, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xdc,0xad,0x6e,0x24,0xbc,0xad,0x4c,0x24, +0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,0x21,0x20,0x6d,0x00,0x21,0x10,0x6f,0x00, +0x21,0x28,0x2e,0x02,0x21,0x30,0x2c,0x02,0x00,0x00,0x88,0x8c,0x00,0x00,0xa9,0x90, +0x00,0x00,0xc7,0x90,0x00,0x00,0x4a,0x8c,0x21,0x10,0x2b,0x02,0x01,0x00,0x31,0x26, +0x21,0x18,0x6b,0x00,0x1d,0x00,0x24,0x2a,0xf8,0x04,0x68,0xac,0xce,0x04,0x47,0xa0, +0x6c,0x05,0x6a,0xac,0xef,0xff,0x80,0x14,0x94,0x04,0x49,0xa0,0x02,0x80,0x02,0x3c, +0x78,0x1b,0x4a,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x98,0xac,0x6b,0x24, +0x38,0xab,0x4c,0x24,0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00, +0x21,0x40,0x2a,0x01,0x21,0x38,0x2b,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90, +0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28, +0xc9,0x03,0x64,0xa0,0xf8,0xff,0x40,0x14,0x38,0x03,0x65,0xa0,0x21,0x10,0x2c,0x02, +0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26, +0x1d,0x00,0x22,0x2a,0x77,0x04,0x64,0xa0,0x5a,0x04,0x65,0xa0,0xeb,0xff,0x40,0x14, +0x05,0x00,0x29,0x25,0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x29,0xb0,0x02,0x3c,0xf8,0xff,0xbd,0x27, +0x00,0x00,0x40,0xac,0x08,0x00,0x44,0x34,0x0c,0x00,0x45,0x34,0x10,0x00,0x46,0x34, +0x04,0x00,0x43,0x34,0x14,0x00,0x47,0x34,0x18,0x00,0x48,0x34,0x1c,0x00,0x49,0x34, +0x20,0x00,0x4a,0x34,0x24,0x00,0x4b,0x34,0x28,0x00,0x4c,0x34,0x2c,0x00,0x4d,0x34, +0x30,0x00,0x4e,0x34,0x34,0x00,0x4f,0x34,0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf, +0x3c,0x00,0x51,0x34,0x38,0x00,0x50,0x34,0x02,0x80,0x02,0x3c,0x00,0x00,0x60,0xac, +0x00,0x00,0x80,0xac,0x00,0x00,0xa0,0xac,0x21,0x20,0x00,0x00,0x00,0x00,0xc0,0xac, +0xff,0xff,0x05,0x24,0x00,0x00,0xe0,0xac,0x78,0x1b,0x46,0x24,0x00,0x00,0x00,0xad, +0x00,0x00,0x20,0xad,0x00,0x00,0x40,0xad,0x00,0x00,0x60,0xad,0x00,0x00,0x80,0xad, +0x00,0x00,0xa0,0xad,0x00,0x00,0xc0,0xad,0x00,0x00,0xe0,0xad,0x00,0x00,0x00,0xae, +0x00,0x00,0x20,0xae,0x21,0x18,0x86,0x00,0x01,0x00,0x84,0x24,0x08,0x00,0x82,0x28, +0xfc,0xff,0x40,0x14,0xf0,0x04,0x65,0xa0,0x02,0x80,0x02,0x3c,0x78,0x1b,0x43,0x24, +0x1f,0x00,0x04,0x24,0x90,0x11,0x62,0x8c,0xff,0xff,0x84,0x24,0xf0,0x00,0x42,0x34, +0x90,0x11,0x62,0xac,0xfb,0xff,0x81,0x04,0x94,0x00,0x63,0x24,0x04,0x00,0xb1,0x8f, +0x00,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x08,0x00,0xbd,0x27,0x48,0xfd,0xbd,0x27, +0xb4,0x02,0xb3,0xaf,0x02,0x80,0x02,0x3c,0x02,0x80,0x13,0x3c,0x30,0xb0,0x46,0x24, +0x78,0x1b,0x63,0x26,0xb0,0x02,0xb2,0xaf,0xac,0x02,0xb1,0xaf,0xa8,0x02,0xb0,0xaf, +0x03,0x00,0x60,0xa0,0x21,0x38,0xa0,0x03,0x90,0x00,0xc8,0x24,0x00,0x00,0xc2,0x8c, +0x04,0x00,0xc3,0x8c,0x08,0x00,0xc4,0x8c,0x0c,0x00,0xc5,0x8c,0x10,0x00,0xc6,0x24, +0x00,0x00,0xe2,0xac,0x04,0x00,0xe3,0xac,0x08,0x00,0xe4,0xac,0x0c,0x00,0xe5,0xac, +0xf6,0xff,0xc8,0x14,0x10,0x00,0xe7,0x24,0x00,0x00,0xc3,0x8c,0x02,0x80,0x02,0x3c, +0xc4,0xb0,0x58,0x24,0x00,0x00,0xe3,0xac,0x98,0x00,0xb9,0x27,0x00,0x01,0x12,0x27, +0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x09,0x00,0x04,0x93,0x0d,0x00,0x05,0x93, +0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,0x04,0x00,0x10,0x93,0x06,0x00,0x0c,0x93, +0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,0x0c,0x00,0x0e,0x93,0x0e,0x00,0x06,0x93, +0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,0x0b,0x00,0x0a,0x93,0x0f,0x00,0x0b,0x93, +0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x22,0x04,0x00,0x00,0x2a,0x05,0x00, +0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,0x25,0x20,0x8f,0x00,0x25,0x28,0xae,0x00, +0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,0x00,0x3c,0x07,0x00,0x00,0x34,0x06,0x00, +0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,0x25,0x38,0xe4,0x00,0x25,0x30,0xc5,0x00, +0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,0x00,0x56,0x0a,0x00,0x00,0x5e,0x0b,0x00, +0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,0x25,0x50,0x47,0x01,0x25,0x58,0x66,0x01, +0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,0x04,0x00,0x29,0xaf,0x08,0x00,0x2a,0xaf, +0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,0x10,0x00,0x39,0x27,0x01,0x00,0x02,0x93, +0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,0x02,0x00,0x04,0x93,0x04,0x00,0x08,0x93, +0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,0x03,0x00,0x07,0x93,0x00,0x12,0x02,0x00, +0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,0x25,0x18,0x68,0x00,0x00,0x24,0x04,0x00, +0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,0x25,0x28,0xa3,0x00,0x00,0x3e,0x07,0x00, +0x00,0x36,0x06,0x00,0x02,0x80,0x02,0x3c,0x25,0x38,0xe4,0x00,0x25,0x30,0xc5,0x00, +0xcc,0xb1,0x58,0x24,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf,0x00,0x01,0x12,0x27, +0xa0,0x01,0xb9,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x09,0x00,0x04,0x93, +0x0d,0x00,0x05,0x93,0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,0x04,0x00,0x10,0x93, +0x06,0x00,0x0c,0x93,0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,0x0c,0x00,0x0e,0x93, +0x0e,0x00,0x06,0x93,0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,0x0b,0x00,0x0a,0x93, +0x0f,0x00,0x0b,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x22,0x04,0x00, +0x00,0x2a,0x05,0x00,0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,0x25,0x20,0x8f,0x00, +0x25,0x28,0xae,0x00,0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,0x00,0x3c,0x07,0x00, +0x00,0x34,0x06,0x00,0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,0x25,0x38,0xe4,0x00, +0x25,0x30,0xc5,0x00,0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,0x00,0x56,0x0a,0x00, +0x00,0x5e,0x0b,0x00,0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,0x25,0x50,0x47,0x01, +0x25,0x58,0x66,0x01,0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,0x04,0x00,0x29,0xaf, +0x08,0x00,0x2a,0xaf,0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,0x10,0x00,0x39,0x27, +0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,0x02,0x00,0x04,0x93, +0x04,0x00,0x08,0x93,0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,0x03,0x00,0x07,0x93, +0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,0x25,0x18,0x68,0x00, +0x00,0x24,0x04,0x00,0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,0x25,0x28,0xa3,0x00, +0x00,0x3e,0x07,0x00,0x00,0x36,0x06,0x00,0x25,0x30,0xc5,0x00,0x25,0x38,0xe4,0x00, +0x02,0x80,0x02,0x3c,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf,0x78,0x1b,0x46,0x24, +0x21,0x50,0x00,0x00,0x80,0x20,0x0a,0x00,0x21,0x10,0x9d,0x00,0x00,0x00,0x45,0x8c, +0x01,0x00,0x43,0x25,0xff,0x00,0x6a,0x30,0x21,0x20,0x86,0x00,0x25,0x00,0x42,0x2d, +0xf8,0xff,0x40,0x14,0x18,0x00,0x85,0xac,0x02,0x80,0x02,0x3c,0x78,0x1b,0x4b,0x24, +0x21,0x50,0x00,0x00,0xc0,0x10,0x0a,0x00,0x21,0x48,0x5d,0x00,0x21,0x38,0x00,0x00, +0x21,0x40,0x4b,0x00,0x21,0x10,0x27,0x01,0xa0,0x01,0x46,0x90,0x98,0x00,0x45,0x90, +0x01,0x00,0xe4,0x24,0x21,0x18,0x07,0x01,0xff,0x00,0x87,0x30,0x08,0x00,0xe2,0x2c, +0xb4,0x01,0x66,0xa0,0xf7,0xff,0x40,0x14,0xac,0x00,0x65,0xa0,0x01,0x00,0x42,0x25, +0xff,0x00,0x4a,0x30,0x21,0x00,0x43,0x2d,0xef,0xff,0x60,0x14,0xc0,0x10,0x0a,0x00, +0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00, +0x20,0x00,0x63,0x30,0x4f,0x00,0x60,0x10,0x78,0x1b,0x64,0x26,0x33,0x00,0x02,0x24, +0xc1,0x02,0x62,0xa1,0x1c,0x00,0x03,0x24,0x0f,0x00,0x02,0x24,0xbc,0x02,0x63,0xa1, +0xbd,0x02,0x62,0xa1,0x78,0x1b,0x65,0x26,0x08,0x00,0xa4,0x8c,0xff,0x7f,0x09,0x3c, +0xff,0xff,0x29,0x35,0xc0,0xff,0x02,0x24,0x24,0x20,0x89,0x00,0x24,0x20,0x82,0x00, +0x0c,0x00,0x84,0x34,0xff,0xc0,0x02,0x24,0xc8,0x02,0xa0,0xa0,0x24,0x20,0x82,0x00, +0xc0,0xff,0x02,0x3c,0xc8,0x02,0xa6,0x8c,0xff,0xff,0x42,0x34,0x00,0x18,0x84,0x34, +0x24,0x20,0x82,0x00,0xff,0x0f,0x02,0x3c,0xff,0xff,0x42,0x34,0xbf,0xff,0x03,0x3c, +0x24,0x30,0xc2,0x00,0xff,0xff,0x63,0x34,0x7f,0xff,0x02,0x3c,0x24,0x20,0x83,0x00, +0xff,0xff,0x42,0x34,0x24,0x20,0x82,0x00,0x7f,0xff,0x03,0x24,0x40,0x40,0x84,0x34, +0xff,0xff,0x02,0x3c,0x24,0x20,0x83,0x00,0xff,0x7f,0x42,0x34,0xc8,0x02,0xa6,0xac, +0x24,0x20,0x82,0x00,0xc9,0x02,0xa0,0xa0,0x0c,0x00,0xa6,0x8c,0xff,0x9f,0x02,0x3c, +0xc8,0x02,0xa7,0x8c,0xff,0xff,0x42,0x34,0xff,0xbf,0x03,0x3c,0x10,0x00,0xa8,0x8c, +0xff,0xff,0x63,0x34,0x24,0x20,0x82,0x00,0xff,0xf0,0x02,0x3c,0x24,0x30,0xc3,0x00, +0xff,0xff,0x42,0x34,0xff,0x3f,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x38,0xe2,0x00, +0xb4,0x02,0xb3,0x8f,0x1f,0x00,0x02,0x24,0xb0,0x02,0xb2,0x8f,0xac,0x02,0xb1,0x8f, +0xa8,0x02,0xb0,0x8f,0x24,0x40,0x03,0x01,0xbe,0x02,0xa2,0xa0,0x01,0x00,0x03,0x24, +0xff,0xff,0x02,0x24,0x24,0x30,0xc9,0x00,0xc0,0x02,0xa3,0xa0,0xc2,0x02,0xa2,0xa0, +0xff,0x00,0x03,0x24,0x12,0x00,0x02,0x24,0xb8,0x02,0xbd,0x27,0xc8,0x02,0xa7,0xac, +0x08,0x00,0xa4,0xac,0x10,0x00,0xa8,0xac,0x0c,0x00,0xa6,0xac,0xc4,0x02,0xa3,0xa4, +0xc7,0x02,0xa2,0xa0,0xca,0x02,0xa0,0xa0,0xbf,0x02,0xa0,0xa0,0x08,0x00,0xe0,0x03, +0xc6,0x02,0xa0,0xa0,0x33,0x00,0x02,0x24,0xc1,0x02,0x82,0xa0,0x0d,0x00,0x03,0x24, +0x03,0x00,0x02,0x24,0xbc,0x02,0x83,0xa0,0x97,0x63,0x00,0x08,0xbd,0x02,0x82,0xa0, +0x02,0x80,0x19,0x3c,0x78,0x1b,0x22,0x27,0xe0,0xff,0xbd,0x27,0xff,0xff,0x03,0x34, +0x18,0x00,0xbf,0xaf,0x21,0xc0,0x40,0x00,0xf4,0x23,0x43,0xac,0xea,0x02,0x40,0xa0, +0x1f,0x00,0x0f,0x24,0xff,0xff,0xef,0x25,0x80,0x11,0x43,0xac,0x84,0x11,0x43,0xac, +0xfc,0xff,0xe1,0x05,0x94,0x00,0x42,0x24,0x78,0x1b,0x24,0x8f,0xd8,0x02,0x05,0x8f, +0xf0,0xff,0x02,0x3c,0xe8,0x02,0x07,0x8f,0xfd,0xff,0x03,0x24,0xff,0xff,0x42,0x34, +0x24,0x20,0x83,0x00,0x24,0x28,0xa2,0x00,0x20,0x00,0x0f,0x24,0xff,0xff,0x0e,0x24, +0xff,0xef,0x02,0x3c,0x78,0x1b,0x24,0xaf,0xff,0xff,0x42,0x34,0xd8,0x02,0x05,0xaf, +0x02,0x00,0x0e,0xa3,0xdb,0x02,0x0f,0xa3,0xd8,0x02,0x00,0xa3,0xff,0xbf,0x03,0x3c, +0x78,0x1b,0x28,0x8f,0xd8,0x02,0x09,0x8f,0x24,0x38,0xe2,0x00,0xff,0xff,0x63,0x34, +0x24,0x38,0xe3,0x00,0xff,0x7f,0x02,0x3c,0x0f,0xff,0x03,0x3c,0xfe,0xff,0x04,0x24, +0xff,0xff,0x42,0x34,0xff,0xff,0x63,0x34,0x24,0x40,0x04,0x01,0x24,0x38,0xe2,0x00, +0x24,0x48,0x23,0x01,0xff,0xdf,0x02,0x3c,0xcf,0xff,0x03,0x24,0x24,0x40,0x03,0x01, +0xff,0xff,0x42,0x34,0x10,0x00,0x03,0x3c,0x24,0x38,0xe2,0x00,0x25,0x48,0x23,0x01, +0x0a,0x00,0x02,0x24,0x00,0x02,0x03,0x24,0x78,0x1b,0x28,0xaf,0x02,0x80,0x0a,0x3c, +0xd6,0x02,0x02,0xa3,0xd0,0x02,0x03,0xa7,0x00,0x01,0x02,0x24,0x49,0x00,0x03,0x24, +0xe8,0x02,0x07,0xaf,0xd8,0x02,0x09,0xaf,0xac,0xb5,0x4a,0x25,0x3e,0x00,0x0c,0x24, +0x1c,0x00,0x0d,0x24,0x01,0x00,0x0b,0x24,0x11,0x00,0xa3,0xa3,0xce,0x02,0x02,0xa7, +0xd0,0x07,0x03,0x24,0x44,0x00,0x02,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa2,0xa3, +0x10,0x00,0xa5,0x27,0x47,0x00,0x02,0x24,0x21,0x20,0x40,0x01,0xc8,0x66,0xc6,0x24, +0xd4,0x02,0x0c,0xa3,0xd5,0x02,0x0d,0xa3,0xcc,0x02,0x0f,0xa7,0x01,0x00,0x0b,0xa3, +0x0c,0x00,0x43,0xad,0x14,0x00,0x4b,0xa1,0x06,0x00,0x0e,0xa7,0xd2,0x02,0x0c,0xa3, +0xd3,0x02,0x0d,0xa3,0x12,0x00,0xa2,0xa3,0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3, +0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x50,0x00,0x03,0x24,0x10,0x00,0xa3,0xa3, +0x52,0x28,0x40,0xa0,0x41,0x00,0x03,0x24,0x52,0x00,0x02,0x24,0x02,0x80,0x07,0x3c, +0x54,0xb6,0xe7,0x24,0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3,0xd0,0x07,0x02,0x24, +0x01,0x00,0x03,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00, +0xe4,0x69,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf, +0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x02,0x80,0x09,0x3c,0x78,0x1b,0x23,0x8d, +0xff,0xff,0x02,0x24,0xff,0x00,0x4b,0x30,0xf3,0xff,0x02,0x24,0x24,0x18,0x62,0x00, +0x3f,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0xd8,0xff,0xbd,0x27,0x78,0x1b,0x23,0xad, +0x47,0x00,0x02,0x24,0x3b,0x00,0x03,0x24,0x02,0x80,0x08,0x3c,0x70,0xb6,0x08,0x25, +0x18,0x00,0xb0,0xaf,0x10,0x00,0xa2,0xa3,0x78,0x1b,0x30,0x25,0x11,0x00,0xa3,0xa3, +0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x01,0x00,0x07,0x3c,0x00,0x80,0x06,0x3c, +0x08,0x03,0x0b,0xae,0x1c,0x00,0xb1,0xaf,0x56,0x30,0xea,0x34,0x43,0x00,0x11,0x24, +0xf4,0x98,0xe7,0x34,0x10,0x00,0xa5,0x27,0x0c,0x00,0x02,0xad,0x14,0x00,0x03,0xa1, +0x21,0x20,0x00,0x01,0xd8,0x73,0xc6,0x24,0x20,0x00,0xbf,0xaf,0x12,0x00,0xb1,0xa3, +0x10,0x03,0x07,0xae,0x14,0x03,0x0a,0xae,0x13,0x00,0xa0,0xa3,0x0c,0x03,0x00,0xae, +0x18,0x03,0x00,0xae,0xa8,0x14,0x00,0x0c,0x1c,0x03,0x00,0xae,0x1e,0x00,0x02,0x24, +0x25,0x03,0x02,0xa2,0x4a,0x00,0x03,0x24,0x45,0x00,0x02,0x24,0x20,0x03,0x03,0xa2, +0x21,0x03,0x02,0xa2,0x23,0x00,0x03,0x24,0x3e,0x00,0x02,0x24,0x22,0x03,0x11,0xa2, +0x23,0x03,0x02,0xa2,0x24,0x03,0x03,0xa2,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb1,0x8f, +0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27, +0x3b,0x00,0x02,0x24,0x43,0x00,0x03,0x24,0x10,0x00,0xa2,0xa3,0x11,0x00,0xa3,0xa3, +0x36,0x00,0x02,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x07,0x3c,0x8c,0xb6,0xe7,0x24, +0x12,0x00,0xa2,0xa3,0x4f,0x1e,0x60,0xa0,0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24, +0x00,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0x04,0x78,0xc6,0x24, +0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,0xa8,0x14,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x52,0x00,0x03,0x24, +0x10,0x00,0xa3,0xa3,0xc8,0x3f,0x40,0xa4,0x54,0x00,0x03,0x24,0x53,0x00,0x02,0x24, +0x02,0x80,0x07,0x3c,0xc4,0xb6,0xe7,0x24,0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3, +0xf4,0x01,0x02,0x24,0x01,0x00,0x03,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27, +0x21,0x20,0xe0,0x00,0x28,0x6b,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0, +0x18,0x00,0xbf,0xaf,0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c, +0xd8,0xff,0xbd,0x27,0x80,0x3f,0x84,0x24,0x21,0x28,0x00,0x00,0x20,0x00,0xbf,0xaf, +0x3e,0x46,0x00,0x0c,0x0a,0x00,0x06,0x24,0x02,0x80,0x07,0x3c,0x78,0x1b,0xe7,0x24, +0x04,0x24,0xe3,0x8c,0xfd,0xff,0x02,0x24,0x02,0x80,0x08,0x3c,0x24,0x18,0x62,0x00, +0xfe,0xff,0x02,0x24,0x24,0x18,0x62,0x00,0x05,0x00,0x02,0x24,0x04,0x24,0xe3,0xac, +0x08,0x24,0xe2,0xa0,0x28,0x00,0x03,0x24,0x46,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3, +0x09,0x24,0xe3,0xa0,0x4b,0x00,0x02,0x24,0x42,0x00,0x03,0x24,0xe0,0xb6,0x08,0x25, +0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0xd0,0x07,0x03,0x24,0x01,0x00,0x02,0x24, +0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0x00,0x01,0xf0,0x6b,0xc6,0x24, +0x06,0x24,0xe0,0xa4,0x0c,0x00,0x03,0xad,0x14,0x00,0x02,0xa1,0xa8,0x14,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x20,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x03,0x3c,0x1c,0x00,0xbf,0xaf, +0x18,0x00,0xb0,0xaf,0x44,0xaf,0x62,0x24,0x02,0x00,0x48,0x90,0x44,0xaf,0x67,0x94, +0x02,0x80,0x02,0x3c,0x60,0x44,0x42,0x24,0x02,0x00,0x10,0x24,0x01,0x80,0x06,0x3c, +0x21,0x20,0x40,0x00,0x10,0x00,0xa5,0x27,0x14,0x00,0x50,0xa0,0x34,0x83,0xc6,0x24, +0x10,0x00,0xa7,0xa7,0x12,0x00,0xa8,0xa3,0xa8,0x14,0x00,0x0c,0x13,0x00,0xa0,0xa3, +0x02,0x80,0x02,0x3c,0x7c,0x44,0x42,0x24,0x01,0x80,0x06,0x3c,0x21,0x20,0x40,0x00, +0x10,0x00,0xa5,0x27,0x14,0x00,0x50,0xa0,0xa8,0x14,0x00,0x0c,0x68,0x82,0xc6,0x24, +0x02,0x80,0x02,0x3c,0x98,0x44,0x40,0xa0,0x0c,0x00,0x04,0x24,0x02,0x80,0x03,0x3c, +0x02,0x80,0x02,0x3c,0x99,0x44,0x64,0xa0,0x9a,0x44,0x44,0xa0,0x02,0x80,0x03,0x3c, +0x02,0x80,0x02,0x3c,0xb1,0x44,0x60,0xa0,0x01,0x00,0x06,0x24,0xb7,0x44,0x40,0xa0, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb8,0x44,0x60,0xa0,0x9c,0x44,0x46,0xa0, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xb9,0x44,0x60,0xa0,0x08,0x00,0x04,0x24, +0x9b,0x44,0x46,0xa0,0x02,0x80,0x02,0x3c,0x9d,0x44,0x44,0xa0,0x01,0x00,0x05,0x24, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x9e,0x44,0x60,0xa0,0x64,0x00,0x04,0x24, +0xa8,0x44,0x45,0xa4,0x02,0x80,0x03,0x3c,0x01,0x00,0x02,0x3c,0xa0,0x44,0x64,0xa4, +0x00,0x90,0x42,0x34,0x02,0x80,0x03,0x3c,0xa4,0x44,0x62,0xac,0x02,0x80,0x04,0x3c, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0xac,0x44,0x80,0xac,0x1c,0x00,0xbf,0x8f, +0xb0,0x44,0x40,0xa0,0x18,0x00,0xb0,0x8f,0xb2,0x44,0x60,0xa0,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0xba,0x44,0x40,0xa0,0xb3,0x44,0x60,0xa0,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0xb4,0x44,0x45,0xa0,0x20,0x00,0xbd,0x27,0xb5,0x44,0x65,0xa0, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0xb6,0x44,0x40,0xa0,0xbc,0x44,0x60,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x78,0x0c,0x00,0x00,0x01,0x00,0x00,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x01,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x02,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x03,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x04,0x5d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x05,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x06,0x59,0x78,0x0c,0x00,0x00, +0x01,0x00,0x07,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x08,0x55,0x78,0x0c,0x00,0x00, +0x01,0x00,0x09,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x0a,0x51,0x78,0x0c,0x00,0x00, +0x01,0x00,0x0b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x0c,0x4d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x0d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x0e,0x49,0x78,0x0c,0x00,0x00, +0x01,0x00,0x0f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x10,0x45,0x78,0x0c,0x00,0x00, +0x01,0x00,0x11,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x12,0x41,0x78,0x0c,0x00,0x00, +0x01,0x00,0x13,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x14,0x3d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x15,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x16,0x39,0x78,0x0c,0x00,0x00, +0x01,0x00,0x17,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x18,0x35,0x78,0x0c,0x00,0x00, +0x01,0x00,0x19,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x1a,0x31,0x78,0x0c,0x00,0x00, +0x01,0x00,0x1b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x1c,0x2d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x1d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x1e,0x29,0x78,0x0c,0x00,0x00, +0x01,0x00,0x1f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x20,0x25,0x78,0x0c,0x00,0x00, +0x01,0x00,0x21,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x22,0x21,0x78,0x0c,0x00,0x00, +0x01,0x00,0x23,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x24,0x1d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x25,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x26,0x19,0x78,0x0c,0x00,0x00, +0x01,0x00,0x27,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x28,0x15,0x78,0x0c,0x00,0x00, +0x01,0x00,0x29,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x2a,0x11,0x78,0x0c,0x00,0x00, +0x01,0x00,0x2b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x2c,0x0d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x2d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x2e,0x09,0x78,0x0c,0x00,0x00, +0x01,0x00,0x2f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x30,0x05,0x78,0x0c,0x00,0x00, +0x01,0x00,0x31,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x32,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x33,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x34,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x35,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x36,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x37,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x38,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x39,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3a,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x3b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3c,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x3d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3e,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x3f,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x40,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x41,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x42,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x43,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x44,0x5d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x45,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x46,0x59,0x78,0x0c,0x00,0x00, +0x01,0x00,0x47,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x48,0x55,0x78,0x0c,0x00,0x00, +0x01,0x00,0x49,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x4a,0x51,0x78,0x0c,0x00,0x00, +0x01,0x00,0x4b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x4c,0x4d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x4d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x4e,0x49,0x78,0x0c,0x00,0x00, +0x01,0x00,0x4f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x50,0x45,0x78,0x0c,0x00,0x00, +0x01,0x00,0x51,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x52,0x41,0x78,0x0c,0x00,0x00, +0x01,0x00,0x53,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x54,0x3d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x55,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x56,0x39,0x78,0x0c,0x00,0x00, +0x01,0x00,0x57,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x58,0x35,0x78,0x0c,0x00,0x00, +0x01,0x00,0x59,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x5a,0x31,0x78,0x0c,0x00,0x00, +0x01,0x00,0x5b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x5c,0x2d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x5d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x5e,0x29,0x78,0x0c,0x00,0x00, +0x01,0x00,0x5f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x60,0x25,0x78,0x0c,0x00,0x00, +0x01,0x00,0x61,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x62,0x21,0x78,0x0c,0x00,0x00, +0x01,0x00,0x63,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x64,0x1d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x65,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x66,0x19,0x78,0x0c,0x00,0x00, +0x01,0x00,0x67,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x68,0x15,0x78,0x0c,0x00,0x00, +0x01,0x00,0x69,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x6a,0x11,0x78,0x0c,0x00,0x00, +0x01,0x00,0x6b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x6c,0x0d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x6d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x6e,0x09,0x78,0x0c,0x00,0x00, +0x01,0x00,0x6f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x70,0x05,0x78,0x0c,0x00,0x00, +0x01,0x00,0x71,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x72,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x73,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x74,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x75,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x76,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x77,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x78,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x79,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7a,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x7b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7c,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x7d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7e,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x7f,0x01,0x78,0x0c,0x00,0x00,0x1e,0x00,0x00,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x01,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x02,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x03,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x04,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x05,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x06,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x07,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x08,0x3e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x09,0x40,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0a,0x42,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x0b,0x44,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0c,0x46,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x0d,0x48,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0e,0x48,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x0f,0x4a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x10,0x4a,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x11,0x4c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x12,0x4c,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x13,0x4e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x14,0x50,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x15,0x50,0x78,0x0c,0x00,0x00,0x1e,0x00,0x16,0x50,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x17,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x18,0x52,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x19,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1a,0x54,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x1b,0x54,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1c,0x54,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x1d,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1e,0x56,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x1f,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x20,0x56,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x21,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x22,0x58,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x23,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x24,0x58,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x25,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x26,0x5a,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x27,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x28,0x5c,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x29,0x5c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2a,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x2b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2c,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x2d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2e,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x2f,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x30,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x31,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x32,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x33,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x34,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x35,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x36,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x37,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x38,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x39,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3a,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x3b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3c,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x3d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3e,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x3f,0x5e,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x08,0x00,0x00, +0x00,0x00,0x04,0x03,0x04,0x08,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x08,0x00,0x00, +0x00,0xfc,0x00,0x00,0x0c,0x08,0x00,0x00,0x0a,0x00,0x00,0x04,0x10,0x08,0x00,0x00, +0xff,0x10,0x10,0x80,0x14,0x08,0x00,0x00,0x10,0x3d,0x0c,0x02,0x18,0x08,0x00,0x00, +0xc5,0x03,0x00,0x00,0x1c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x24,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x28,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x2c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x30,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x34,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x38,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x3c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x40,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x4c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x08,0x00,0x00, +0x65,0xa9,0x65,0xa9,0x5c,0x08,0x00,0x00,0x65,0xa9,0x65,0xa9,0x60,0x08,0x00,0x00, +0x30,0x01,0x7f,0x0f,0x64,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x68,0x08,0x00,0x00, +0x30,0x01,0x7f,0x0f,0x6c,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x70,0x08,0x00,0x00, +0x00,0x03,0x00,0x03,0x74,0x08,0x00,0x00,0x00,0x03,0x00,0x03,0x78,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x7c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x94,0x08,0x00,0x00,0xfe,0xff,0xff,0xff,0x98,0x08,0x00,0x00, +0x10,0x20,0x30,0x40,0x9c,0x08,0x00,0x00,0x50,0x60,0x70,0x00,0xb0,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0xe0,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x04,0x0e,0x00,0x00, +0x03,0x03,0x03,0x03,0x08,0x0e,0x00,0x00,0x03,0x03,0x00,0x00,0x0c,0x0e,0x00,0x00, +0x00,0x00,0x00,0x00,0x10,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x14,0x0e,0x00,0x00, +0x03,0x03,0x03,0x03,0x18,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x1c,0x0e,0x00,0x00, +0x03,0x03,0x03,0x03,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x09,0x00,0x00, +0x23,0x00,0x00,0x00,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x00,0x00, +0x33,0x13,0x32,0x03,0x08,0x0a,0x00,0x00,0x00,0x86,0x88,0x8f,0x2c,0x0a,0x00,0x00, +0x00,0x00,0x92,0x00,0x00,0x0c,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x0c,0x00,0x00, +0x33,0x54,0x00,0x00,0x08,0x0c,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x0c,0x00,0x00, +0x6c,0x6c,0x6c,0x6c,0x10,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x14,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x20,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x24,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x28,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x2c,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x30,0x0c,0x00,0x00,0x44,0x6a,0xe9,0x8d,0x34,0x0c,0x00,0x00, +0xcd,0x52,0x96,0x46,0x38,0x0c,0x00,0x00,0x90,0x5a,0x01,0x48,0x3c,0x0c,0x00,0x00, +0x64,0x97,0x97,0x1a,0x40,0x0c,0x00,0x00,0x3f,0x42,0x7c,0x1f,0x44,0x0c,0x00,0x00, +0xb7,0x00,0x01,0x00,0x48,0x0c,0x00,0x00,0x00,0x00,0x02,0xec,0x4c,0x0c,0x00,0x00, +0x03,0x03,0xfc,0x00,0x50,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x54,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x58,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x5c,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x60,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x64,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x68,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x6c,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x70,0x0c,0x00,0x00,0x0d,0x00,0x5a,0x2c,0x74,0x0c,0x00,0x00, +0x1b,0x15,0x86,0x01,0x78,0x0c,0x00,0x00,0x1f,0x00,0x00,0x00,0x7c,0x0c,0x00,0x00, +0x12,0x16,0xb9,0x00,0x80,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x84,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0x88,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x8c,0x0c,0x00,0x00, +0x00,0x00,0x20,0x08,0x90,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x94,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0x98,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x9c,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xa0,0x0c,0x00,0x00,0x92,0x24,0x49,0x00,0xa4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xa8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xac,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xb0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xb8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xbc,0x0c,0x00,0x00, +0x92,0x24,0x49,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xc8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xd0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xd8,0x0c,0x00,0x00,0x27,0x24,0xb2,0x64,0xdc,0x0c,0x00,0x00, +0x32,0x69,0x76,0x00,0xe0,0x0c,0x00,0x00,0x22,0x22,0x22,0x00,0xe4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xe8,0x0c,0x00,0x00,0x02,0x43,0x64,0x07,0x00,0x0d,0x00,0x00, +0x80,0x07,0x00,0x00,0x04,0x0d,0x00,0x00,0x03,0x04,0x00,0x00,0x08,0x0d,0x00,0x00, +0x7f,0x90,0x00,0x00,0x0c,0x0d,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x0d,0x00,0x00, +0x99,0x99,0x69,0xa0,0x14,0x0d,0x00,0x00,0x67,0x3c,0x99,0x99,0x18,0x0d,0x00,0x00, +0x6b,0x5b,0x8f,0x6a,0x1c,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x24,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x2c,0x0d,0x00,0x00,0x75,0x19,0x97,0xcc,0x30,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x34,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x3c,0x0d,0x00,0x00,0x93,0x72,0x02,0x00,0x40,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x44,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x50,0x0d,0x00,0x00,0x0a,0x14,0x37,0x64,0x54,0x0d,0x00,0x00, +0x02,0xbd,0x4d,0x02,0x58,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x0d,0x00,0x00, +0x64,0x20,0x03,0x30,0x60,0x0d,0x00,0x00,0x68,0xde,0x53,0x46,0x64,0x0d,0x00,0x00, +0x3c,0x8a,0x51,0x00,0x68,0x0d,0x00,0x00,0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00, +0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, +0x64,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x6c,0x05,0x01,0x80,0x10,0x00,0x00,0x00, +0x74,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x7c,0x05,0x01,0x80,0x10,0x00,0x00,0x00, +0x84,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x8c,0x05,0x01,0x80,0x10,0x00,0x00,0x00, +0x94,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x9c,0x05,0x01,0x80,0x10,0x00,0x00,0x00, +0xa4,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0xac,0x05,0x01,0x80,0x10,0x00,0x00,0x00, +0x9c,0x2d,0x00,0x80,0x10,0x00,0x00,0x00,0x94,0x2d,0x00,0x80,0x10,0x00,0x00,0x00, +0xb4,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0xbc,0x05,0x01,0x80,0x34,0x01,0x00,0x00, +0xc4,0x05,0x01,0x80,0x04,0x00,0x00,0x00,0xcc,0x05,0x01,0x80,0x34,0x01,0x00,0x00, +0xc4,0x05,0x01,0x80,0x04,0x00,0x00,0x00,0xd4,0x05,0x01,0x80,0x30,0x00,0x00,0x00, +0xdc,0x05,0x01,0x80,0x04,0x00,0x00,0x00,0xe4,0x05,0x01,0x80,0x13,0x00,0x00,0x00, +0xec,0x05,0x01,0x80,0x17,0x00,0x00,0x00,0xf4,0x05,0x01,0x80,0x06,0x00,0x00,0x00, +0xfc,0x05,0x01,0x80,0x06,0x00,0x00,0x00,0x04,0x06,0x01,0x80,0x08,0x00,0x00,0x00, +0x0c,0x06,0x01,0x80,0x0c,0x00,0x00,0x00,0x14,0x06,0x01,0x80,0x04,0x00,0x00,0x00, +0x1c,0x06,0x01,0x80,0x1f,0x00,0x00,0x00,0x24,0x06,0x01,0x80,0x01,0x00,0x00,0x00, +0x2c,0x06,0x01,0x80,0x38,0x00,0x00,0x00,0x34,0x06,0x01,0x80,0x04,0x00,0x00,0x00, +0x3c,0x06,0x01,0x80,0x02,0x00,0x00,0x00,0x44,0x06,0x01,0x80,0x04,0x00,0x00,0x00, +0x4c,0x06,0x01,0x80,0x01,0x00,0x00,0x00,0x54,0x06,0x01,0x80,0x01,0x00,0x00,0x00, +0x5c,0x06,0x01,0x80,0x0c,0x00,0x00,0x00,0x64,0x06,0x01,0x80,0x0e,0x00,0x00,0x00, +0x6c,0x06,0x01,0x80,0x0c,0x00,0x00,0x00,0xb8,0x08,0x01,0x80,0x78,0x00,0x00,0x00, +0xf0,0x09,0x01,0x80,0x04,0x00,0x00,0x00,0xf8,0x09,0x01,0x80,0x04,0x00,0x00,0x00, +0xa4,0x2d,0x00,0x80,0x04,0x00,0x00,0x00,0xac,0x2d,0x00,0x80,0x04,0x00,0x00,0x00, +0xb4,0x2d,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x0a,0x01,0x80,0x08,0x00,0x00,0x00, +0x08,0x0a,0x01,0x80,0x10,0x00,0x00,0x00,0x10,0x0a,0x01,0x80,0x01,0x00,0x00,0x00, +0x18,0x0a,0x01,0x80,0x01,0x00,0x00,0x00,0x20,0x0a,0x01,0x80,0x10,0x00,0x00,0x00, +0xc4,0x2d,0x00,0x80,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00, +0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00, +0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00, +0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00, +0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00, +0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00, +0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00, +0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00, +0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00, +0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00, +0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00, +0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00, +0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00, +0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00, +0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00, +0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00, +0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00, +0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00, +0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00, +0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00, +0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00, +0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00, +0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00, +0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00, +0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00, +0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00, +0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00, +0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00, +0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00, +0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00, +0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00, +0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00, +0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00, +0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00, +0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00, +0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00, +0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00, +0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00, +0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00, +0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00, +0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00, +0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00, +0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00, +0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00, +0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00, +0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00, +0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00, +0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00, +0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00, +0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00, +0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00, +0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00, +0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00, +0xff,0xff,0xff,0x00,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00, +0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00, +0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00, +0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00, +0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00, +0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00, +0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00, +0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00, +0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00, +0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00, +0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00, +0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00, +0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00, +0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00, +0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00, +0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00, +0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00, +0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00, +0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00, +0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00, +0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00, +0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00, +0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00, +0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00, +0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00, +0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00, +0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00, +0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00, +0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00, +0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00, +0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00, +0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00, +0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00, +0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00, +0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00, +0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00, +0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00, +0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00, +0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00, +0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00, +0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00, +0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00, +0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00, +0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00, +0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00, +0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00, +0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00, +0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00, +0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00, +0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00, +0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00, +0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00, +0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00, +0xff,0xff,0xff,0x00,0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,0x65,0x71,0x00,0x00, +0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,0x4f,0x6e,0x52,0x65, +0x41,0x73,0x73,0x6f,0x63,0x52,0x65,0x71,0x00,0x00,0x00,0x00,0x4f,0x6e,0x52,0x65, +0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,0x00,0x00,0x4f,0x6e,0x50,0x72, +0x6f,0x62,0x65,0x52,0x65,0x71,0x00,0x00,0x4f,0x6e,0x50,0x72,0x6f,0x62,0x65,0x52, +0x73,0x70,0x00,0x00,0x4f,0x6e,0x42,0x65,0x61,0x63,0x6f,0x6e,0x00,0x00,0x00,0x00, +0x4f,0x6e,0x41,0x54,0x49,0x4d,0x00,0x00,0x4f,0x6e,0x44,0x69,0x73,0x61,0x73,0x73, +0x6f,0x63,0x00,0x00,0x4f,0x6e,0x41,0x75,0x74,0x68,0x00,0x00,0x4f,0x6e,0x44,0x65, +0x41,0x75,0x74,0x68,0x00,0x00,0x00,0x00,0x4f,0x6e,0x41,0x63,0x74,0x69,0x6f,0x6e, +0x00,0x00,0x00,0x00,0x4f,0x6e,0x45,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,0x00, +0x00,0x00,0x00,0x00,0xfc,0xa7,0x01,0x80,0x24,0x2f,0x00,0x80,0x10,0x00,0x00,0x00, +0x08,0xa8,0x01,0x80,0x2c,0x2f,0x00,0x80,0x20,0x00,0x00,0x00,0x14,0xa8,0x01,0x80, +0x24,0x2f,0x00,0x80,0x30,0x00,0x00,0x00,0x24,0xa8,0x01,0x80,0x2c,0x2f,0x00,0x80, +0x40,0x00,0x00,0x00,0x34,0xa8,0x01,0x80,0x34,0x2f,0x00,0x80,0x50,0x00,0x00,0x00, +0x40,0xa8,0x01,0x80,0x54,0x2f,0x00,0x80,0x80,0x00,0x00,0x00,0x4c,0xa8,0x01,0x80, +0x04,0x30,0x00,0x80,0x90,0x00,0x00,0x00,0x58,0xa8,0x01,0x80,0x5c,0x2f,0x00,0x80, +0xa0,0x00,0x00,0x00,0x60,0xa8,0x01,0x80,0x6c,0x2f,0x00,0x80,0xb0,0x00,0x00,0x00, +0x6c,0xa8,0x01,0x80,0x64,0x2f,0x00,0x80,0xc0,0x00,0x00,0x00,0x74,0xa8,0x01,0x80, +0x74,0x2f,0x00,0x80,0xd0,0x00,0x00,0x00,0x80,0xa8,0x01,0x80,0x7c,0x2f,0x00,0x80, +0x0c,0x00,0x00,0x00,0x8c,0xa8,0x01,0x80,0x98,0x2f,0x00,0x80,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b, +0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x05,0x06,0x07,0x08,0xff,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0x01,0x80,0x00,0xaa,0x01,0x80, +0x31,0x10,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x20,0x10,0x00,0x00,0x30,0x00,0x00, +0x31,0x28,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x2c,0x10,0x10,0x00,0x30,0x00,0x00, +0x31,0x2f,0x10,0x10,0x00,0x30,0x00,0x00,0x31,0x30,0x18,0x00,0x00,0x30,0x00,0x00, +0x31,0x30,0x20,0x10,0x00,0x30,0x00,0x00,0x22,0x20,0x18,0x08,0x00,0x20,0x00,0x00, +0x22,0x21,0x14,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x1c,0x08,0x00,0x20,0x00,0x00, +0x22,0x21,0x20,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x10,0x00,0x20,0x00,0x00, +0x22,0x21,0x20,0x18,0x00,0x20,0x00,0x00,0x1a,0x19,0x18,0x10,0x00,0x18,0x00,0x00, +0x12,0x11,0x10,0x08,0x00,0x10,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x08,0x00,0x00, +0x0a,0x09,0x08,0x02,0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x04,0x00,0x08,0x00,0x00, +0x0a,0x09,0x08,0x06,0x00,0x08,0x00,0x00,0x08,0x07,0x06,0x04,0x00,0x06,0x00,0x00, +0x06,0x05,0x04,0x02,0x00,0x04,0x00,0x00,0x06,0x05,0x04,0x03,0x00,0x04,0x00,0x00, +0x05,0x04,0x03,0x02,0x00,0x03,0x00,0x00,0x09,0x08,0x07,0x06,0x07,0x06,0x06,0x05, +0x05,0x04,0x04,0x03,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x05,0x04,0x04,0x03, +0x03,0x02,0x02,0x02,0x00,0x09,0x08,0x07,0x06,0x07,0x06,0x06,0x05,0x05,0x04,0x04, +0x03,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x04,0x03,0x03,0x02,0x02,0x01,0x01, +0x01,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20, +0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x20,0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20, +0x30,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,0x30,0x10,0x20,0x20, +0x20,0x20,0x20,0x30,0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x08,0x08,0x08,0x08, +0x08,0x20,0x20,0x20,0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x20,0x08,0x08,0x08, +0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,0x30,0x10,0x20,0x20,0x20,0x20,0x20,0x30, +0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x0a,0x09,0x08,0x04, +0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00, +0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a, +0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x12,0x11, +0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08, +0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x18, +0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x1c,0x08,0x00,0x22,0x20,0x18,0x08,0x00, +0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a, +0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x10,0x00,0x22,0x21, +0x20,0x08,0x00,0x22,0x21,0x1c,0x08,0x00,0x31,0x30,0x18,0x00,0x00,0x0a,0x09,0x08, +0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04, +0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00, +0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x31, +0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21, +0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14, +0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2c,0x10,0x10, +0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00, +0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31, +0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,0x00,0x31,0x2c,0x10,0x10,0x00,0x00,0x00, +0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a, +0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09, +0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10, +0x08,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x0a,0x09,0x08,0x04, +0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00, +0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x1c,0x08,0x00,0x22, +0x21,0x14,0x08,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09, +0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20, +0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x21,0x14,0x08, +0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00, +0x0a,0x09,0x08,0x04,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a, +0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x22,0x21, +0x20,0x08,0x00,0x31,0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,0x00,0x12,0x11,0x10, +0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x08, +0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,0x30,0x20,0x10,0x00, +0x31,0x2c,0x10,0x10,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22, +0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2f, +0x10,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,0x00,0x31,0x2c,0x10, +0x10,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x02,0x04,0x08,0x0c,0x10,0x18,0x20,0x30, +0x02,0x04,0x08,0x0c,0x10,0x18,0x20,0x30,0x06,0x0c,0x10,0x18,0x24,0x30,0x3c,0x48, +0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x27,0x2c, +0x19,0x1b,0x1e,0x20,0x23,0x29,0x2a,0x2b,0x00,0x00,0x00,0x00,0x25,0x29,0x2b,0x2e, +0x2e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00, +0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00, +0x48,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xc0,0x00,0x00,0x00, +0xd8,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, +0xc8,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, +0x30,0x02,0x00,0x00,0x2c,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xe0,0x01,0x00,0x00, +0xd0,0x02,0x00,0x00,0x80,0x0c,0x00,0x00,0x80,0x0c,0x00,0x00,0x80,0x0c,0x00,0x00, +0xa0,0x0f,0x00,0x00,0xa0,0x0f,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00, +0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x00,0x00,0x00, +0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x00,0x00, +0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, +0x50,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, +0xf0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, +0xf0,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x40,0x06,0x00,0x00,0x40,0x06,0x00,0x00, +0x40,0x06,0x00,0x00,0xd0,0x07,0x00,0x00,0xd0,0x07,0x00,0x00,0x30,0x7a,0x00,0x80, +0x88,0x85,0x00,0x80,0x88,0x85,0x00,0x80,0x88,0x85,0x00,0x80,0x88,0x85,0x00,0x80, +0xd8,0x83,0x00,0x80,0x38,0x7a,0x00,0x80,0x30,0x7a,0x00,0x80,0x30,0x7a,0x00,0x80, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0x86,0x00,0x80,0xb8,0x86,0x00,0x80, +0xb8,0x86,0x00,0x80,0xb8,0x86,0x00,0x80,0xfc,0x6c,0x01,0x80,0x1c,0x6d,0x01,0x80, +0x04,0x6d,0x01,0x80,0x0c,0x6d,0x01,0x80,0x14,0x6d,0x01,0x80,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x08,0x04,0x04,0x08,0x02,0x02,0x01,0x01,0x50,0x53,0x00,0x00, +0xf8,0x07,0x00,0x80,0xec,0x07,0x00,0x80,0xe0,0x07,0x00,0x80,0xd4,0x07,0x00,0x80, +0xc8,0x07,0x00,0x80,0xbc,0x07,0x00,0x80,0xb0,0x07,0x00,0x80,0xa4,0x07,0x00,0x80, +0x98,0x07,0x00,0x80,0x8c,0x07,0x00,0x80,0x44,0x07,0x00,0x80,0xb0,0x03,0x25,0xb0, +0x2c,0x00,0x2a,0xb0,0x78,0x1b,0x02,0x80,0xb0,0x03,0x25,0xb0,0x44,0x44,0x33,0x33, +0x06,0x00,0x2a,0xb0,0x3c,0x47,0x00,0x80,0x30,0x47,0x00,0x80,0x24,0x47,0x00,0x80, +0x18,0x47,0x00,0x80,0x0c,0x47,0x00,0x80,0x00,0x47,0x00,0x80,0xf4,0x46,0x00,0x80, +0xe8,0x46,0x00,0x80,0xdc,0x46,0x00,0x80,0xd0,0x46,0x00,0x80,0xc4,0x46,0x00,0x80, +0xb8,0x46,0x00,0x80,0x60,0x3f,0x01,0x80,0x48,0x3f,0x01,0x80,0x30,0x3f,0x01,0x80, +0x18,0x3f,0x01,0x80,0x00,0x3f,0x01,0x80,0xe8,0x3e,0x01,0x80,0xb4,0x3e,0x01,0x80, +0x00,0x02,0x00,0x00,0x08,0x09,0x00,0x00,0x0c,0x58,0x00,0x80,0x18,0x58,0x00,0x80, +0x24,0x58,0x00,0x80,0x30,0x58,0x00,0x80,0x0c,0x58,0x00,0x80,0x0c,0x58,0x00,0x80, +0x0c,0x58,0x00,0x80,0x0c,0x58,0x00,0x80,0x3c,0x58,0x00,0x80,0x48,0x58,0x00,0x80, +0x54,0x58,0x00,0x80,0x60,0x58,0x00,0x80,0x78,0x1b,0x02,0x80,0x78,0x1b,0x02,0x80, +0x84,0x0e,0x25,0xb0,0x88,0x0e,0x25,0xb0,0x8c,0x0e,0x25,0xb0,0xd0,0x0e,0x25,0xb0, +0xd8,0x0e,0x25,0xb0,0x20,0x08,0x25,0xb0,0xfe,0x01,0x80,0x7f,0xe2,0x01,0x80,0x78, +0xc7,0x01,0xc0,0x71,0xae,0x01,0x80,0x6b,0x95,0x01,0x40,0x65,0x7f,0x01,0xc0,0x5f, +0x69,0x01,0x40,0x5a,0x55,0x01,0x40,0x55,0x42,0x01,0x80,0x50,0x30,0x01,0x00,0x4c, +0x1f,0x01,0xc0,0x47,0x0f,0x01,0xc0,0x43,0x00,0x01,0x00,0x40,0xf2,0x00,0x80,0x3c, +0xe4,0x00,0x00,0x39,0xd7,0x00,0xc0,0x35,0xcb,0x00,0xc0,0x32,0xc0,0x00,0x00,0x30, +0xb5,0x00,0x40,0x2d,0xab,0x00,0xc0,0x2a,0xa2,0x00,0x80,0x28,0x98,0x00,0x00,0x26, +0x90,0x00,0x00,0x24,0x88,0x00,0x00,0x22,0x80,0x00,0x00,0x20,0x79,0x00,0x40,0x1e, +0x72,0x00,0x80,0x1c,0x6c,0x00,0x00,0x1b,0x66,0x00,0x80,0x19,0x60,0x00,0x00,0x18, +0x5b,0x00,0xc0,0x16,0x56,0x00,0x80,0x15,0x51,0x00,0x40,0x14,0x4c,0x00,0x00,0x13, +0x48,0x00,0x00,0x12,0x44,0x00,0x00,0x11,0x40,0x00,0x00,0x10,0x36,0x35,0x2e,0x25, +0x1c,0x12,0x09,0x04,0x33,0x32,0x2b,0x23,0x1a,0x11,0x08,0x04,0x30,0x2f,0x29,0x21, +0x19,0x10,0x08,0x03,0x2d,0x2d,0x27,0x1f,0x18,0x0f,0x08,0x03,0x2b,0x2a,0x25,0x1e, +0x16,0x0e,0x07,0x03,0x28,0x28,0x22,0x1c,0x15,0x0d,0x07,0x03,0x26,0x25,0x21,0x1b, +0x14,0x0d,0x06,0x03,0x24,0x23,0x1f,0x19,0x13,0x0c,0x06,0x03,0x22,0x21,0x1d,0x18, +0x11,0x0b,0x06,0x02,0x20,0x20,0x1b,0x16,0x11,0x08,0x05,0x02,0x1f,0x1e,0x1a,0x15, +0x10,0x0a,0x05,0x02,0x1d,0x1c,0x18,0x14,0x0f,0x0a,0x05,0x02,0x1b,0x1a,0x17,0x13, +0x0e,0x09,0x04,0x02,0x1a,0x19,0x16,0x12,0x0d,0x09,0x04,0x02,0x18,0x17,0x15,0x11, +0x0c,0x08,0x04,0x02,0x17,0x16,0x13,0x10,0x0c,0x08,0x04,0x02,0x16,0x15,0x12,0x0f, +0x0b,0x07,0x04,0x01,0x14,0x14,0x11,0x0e,0x0b,0x07,0x03,0x02,0x13,0x13,0x10,0x0d, +0x0a,0x06,0x03,0x01,0x12,0x12,0x0f,0x0c,0x09,0x06,0x03,0x01,0x11,0x11,0x0f,0x0c, +0x09,0x06,0x03,0x01,0x10,0x10,0x0e,0x0b,0x08,0x05,0x03,0x01,0x0f,0x0f,0x0d,0x0b, +0x08,0x05,0x03,0x01,0x0e,0x0e,0x0c,0x0a,0x08,0x05,0x02,0x01,0x0d,0x0d,0x0c,0x0a, +0x07,0x05,0x02,0x01,0x0d,0x0c,0x0b,0x09,0x07,0x04,0x02,0x01,0x0c,0x0c,0x0a,0x09, +0x06,0x04,0x02,0x01,0x0b,0x0b,0x0a,0x08,0x06,0x04,0x02,0x01,0x0b,0x0a,0x09,0x08, +0x06,0x04,0x02,0x01,0x0a,0x0a,0x09,0x07,0x05,0x03,0x02,0x01,0x0a,0x09,0x08,0x07, +0x05,0x03,0x02,0x01,0x09,0x09,0x08,0x06,0x05,0x03,0x01,0x01,0x09,0x08,0x07,0x06, +0x04,0x03,0x01,0x01,0x36,0x35,0x2e,0x1b,0x00,0x00,0x00,0x00,0x33,0x32,0x2b,0x19, +0x00,0x00,0x00,0x00,0x30,0x2f,0x29,0x18,0x00,0x00,0x00,0x00,0x2d,0x2d,0x17,0x17, +0x00,0x00,0x00,0x00,0x2b,0x2a,0x25,0x15,0x00,0x00,0x00,0x00,0x28,0x28,0x24,0x14, +0x00,0x00,0x00,0x00,0x26,0x25,0x21,0x13,0x00,0x00,0x00,0x00,0x24,0x23,0x1f,0x12, +0x00,0x00,0x00,0x00,0x22,0x21,0x1d,0x11,0x00,0x00,0x00,0x00,0x20,0x20,0x1b,0x10, +0x00,0x00,0x00,0x00,0x1f,0x1e,0x1a,0x0f,0x00,0x00,0x00,0x00,0x1d,0x1c,0x18,0x0e, +0x00,0x00,0x00,0x00,0x1b,0x1a,0x17,0x0e,0x00,0x00,0x00,0x00,0x1a,0x19,0x16,0x0d, +0x00,0x00,0x00,0x00,0x18,0x17,0x15,0x0c,0x00,0x00,0x00,0x00,0x17,0x16,0x13,0x0b, +0x00,0x00,0x00,0x00,0x16,0x15,0x12,0x0b,0x00,0x00,0x00,0x00,0x14,0x14,0x11,0x0a, +0x00,0x00,0x00,0x00,0x13,0x13,0x10,0x0a,0x00,0x00,0x00,0x00,0x12,0x12,0x0f,0x09, +0x00,0x00,0x00,0x00,0x11,0x11,0x0f,0x09,0x00,0x00,0x00,0x00,0x10,0x10,0x0e,0x08, +0x00,0x00,0x00,0x00,0x0f,0x0f,0x0d,0x08,0x00,0x00,0x00,0x00,0x0e,0x0e,0x0c,0x07, +0x00,0x00,0x00,0x00,0x0d,0x0d,0x0c,0x07,0x00,0x00,0x00,0x00,0x0d,0x0c,0x0b,0x06, +0x00,0x00,0x00,0x00,0x0c,0x0c,0x0a,0x06,0x00,0x00,0x00,0x00,0x0b,0x0b,0x0a,0x06, +0x00,0x00,0x00,0x00,0x0b,0x0a,0x09,0x05,0x00,0x00,0x00,0x00,0x0a,0x0a,0x09,0x05, +0x00,0x00,0x00,0x00,0x0a,0x09,0x08,0x05,0x00,0x00,0x00,0x00,0x09,0x09,0x08,0x05, +0x00,0x00,0x00,0x00,0x09,0x08,0x07,0x04,0x00,0x00,0x00,0x00,0x06,0x00,0x2a,0xb0, +0x05,0x00,0x2a,0xb0,0x34,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,0x60,0x7b,0x00,0x80, +0xbc,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80,0xbc,0x7b,0x00,0x80, +0x08,0x7b,0x00,0x80,0x00,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04, +0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, +0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, +0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, +0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, +0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x28,0x28,0x28,0x28,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x41,0x41,0x41,0x41,0x41,0x41,0x01, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, +0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x42,0x42,0x42,0x42,0x42,0x42,0x02, +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, +0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10, +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x36,0xc2,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x45,0xc4,0xf0,0x00,0x45,0xc4,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x45,0xb5,0x60,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x02, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xc7,0x00,0xb8,0xff,0xff,0xff,0xff, +}; + +u8 Rtl8192SEFwMainArray[MainArrayLength] = { +0x0, }; + +u8 Rtl8192SEFwDataArray[DataArrayLength] = { +0x0, }; + +u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength] = { +0x01c,0x07000000, +0x800,0x00040000, +0x804,0x00008003, +0x808,0x0000fc00, +0x80c,0x0000000a, +0x810,0x10005088, +0x814,0x020c3d10, +0x818,0x00200185, +0x81c,0x00000000, +0x820,0x01000000, +0x824,0x00390004, +0x828,0x01000000, +0x82c,0x00390004, +0x830,0x00000004, +0x834,0x00690200, +0x838,0x00000004, +0x83c,0x00690200, +0x840,0x00010000, +0x844,0x00010000, +0x848,0x00000000, +0x84c,0x00000000, +0x850,0x00000000, +0x854,0x00000000, +0x858,0x48484848, +0x85c,0x65a965a9, +0x860,0x0f7f0130, +0x864,0x0f7f0130, +0x868,0x0f7f0130, +0x86c,0x0f7f0130, +0x870,0x03000700, +0x874,0x03000300, +0x878,0x00020002, +0x87c,0x004f0201, +0x880,0xa8300ac1, +0x884,0x00000058, +0x888,0x00000008, +0x88c,0x00000004, +0x890,0x00000000, +0x894,0xfffffffe, +0x898,0x40302010, +0x89c,0x00706050, +0x8b0,0x00000000, +0x8e0,0x00000000, +0x8e4,0x00000000, +0xe00,0x30333333, +0xe04,0x2a2d2e2f, +0xe08,0x00003232, +0xe10,0x30333333, +0xe14,0x2a2d2e2f, +0xe18,0x30333333, +0xe1c,0x2a2d2e2f, +0xe30,0x01007c00, +0xe34,0x01004800, +0xe38,0x1000dc1f, +0xe3c,0x10008c1f, +0xe40,0x021400a0, +0xe44,0x281600a0, +0xe48,0xf8000001, +0xe4c,0x00002910, +0xe50,0x01007c00, +0xe54,0x01004800, +0xe58,0x1000dc1f, +0xe5c,0x10008c1f, +0xe60,0x021400a0, +0xe64,0x281600a0, +0xe6c,0x00002910, +0xe70,0x31ed92fb, +0xe74,0x361536fb, +0xe78,0x361536fb, +0xe7c,0x361536fb, +0xe80,0x361536fb, +0xe84,0x000d92fb, +0xe88,0x000d92fb, +0xe8c,0x31ed92fb, +0xed0,0x31ed92fb, +0xed4,0x31ed92fb, +0xed8,0x000d92fb, +0xedc,0x000d92fb, +0xee0,0x000d92fb, +0xee4,0x015e5448, +0xee8,0x21555448, +0x900,0x00000000, +0x904,0x00000023, +0x908,0x00000000, +0x90c,0x01121313, +0xa00,0x00d047c8, +0xa04,0x80ff0008, +0xa08,0x88cd8300, +0xa0c,0x2e62120f, +0xa10,0x9500bb78, +0xa14,0x11144028, +0xa18,0x00881117, +0xa1c,0x89140f00, +0xa20,0x1a1b0000, +0xa24,0x090e1317, +0xa28,0x00000204, +0xa2c,0x10d30000, +0xc00,0x40071d40, +0xc04,0x00a05633, +0xc08,0x000000e4, +0xc0c,0x6c6c6c6c, +0xc10,0x08800000, +0xc14,0x40000100, +0xc18,0x08000000, +0xc1c,0x40000100, +0xc20,0x08000000, +0xc24,0x40000100, +0xc28,0x08000000, +0xc2c,0x40000100, +0xc30,0x6de9ac44, +0xc34,0x469652cf, +0xc38,0x49795994, +0xc3c,0x0a979764, +0xc40,0x1f7c403f, +0xc44,0x000100b7, +0xc48,0xec020000, +0xc4c,0x007f037f, +0xc50,0x69543420, +0xc54,0x433c0094, +0xc58,0x69543420, +0xc5c,0x433c0094, +0xc60,0x69543420, +0xc64,0x433c0094, +0xc68,0x69543420, +0xc6c,0x433c0094, +0xc70,0x2c7f000d, +0xc74,0x0186175b, +0xc78,0x0000001f, +0xc7c,0x00b91612, +0xc80,0x40000100, +0xc84,0x20f60000, +0xc88,0x20000080, +0xc8c,0x20200000, +0xc90,0x40000100, +0xc94,0x00000000, +0xc98,0x40000100, +0xc9c,0x00000000, +0xca0,0x00492492, +0xca4,0x00000000, +0xca8,0x00000000, +0xcac,0x00000000, +0xcb0,0x00000000, +0xcb4,0x00000000, +0xcb8,0x00000000, +0xcbc,0x28000000, +0xcc0,0x00000000, +0xcc4,0x00000000, +0xcc8,0x00000000, +0xccc,0x00000000, +0xcd0,0x00000000, +0xcd4,0x00000000, +0xcd8,0x64b22427, +0xcdc,0x00766932, +0xce0,0x00222222, +0xce4,0x00000000, +0xce8,0x37644302, +0xcec,0x2f97d40c, +0xd00,0x00000750, +0xd04,0x00000403, +0xd08,0x0000907f, +0xd0c,0x00000001, +0xd10,0xa0633333, +0xd14,0x33333c63, +0xd18,0x6a8f5b6b, +0xd1c,0x00000000, +0xd20,0x00000000, +0xd24,0x00000000, +0xd28,0x00000000, +0xd2c,0xcc979975, +0xd30,0x00000000, +0xd34,0x00000000, +0xd38,0x00000000, +0xd3c,0x00027293, +0xd40,0x00000000, +0xd44,0x00000000, +0xd48,0x00000000, +0xd50,0x6437140a, +0xd54,0x024dbd02, +0xd58,0x00000000, +0xd5c,0x30032064, +0xd60,0x4653de68, +0xd64,0x00518a3c, +0xd68,0x00002101, +0xf14,0x00000003, +0xf4c,0x00000000, +0xf00,0x00000300, +}; + +u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength] = { +0x0, }; + +u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength] = { +0x844,0xffffffff,0x00010000, +0x804,0x0000000f,0x00000001, +0x824,0x00f0000f,0x00300004, +0x82c,0x00f0000f,0x00100002, +0x870,0x04000000,0x00000001, +0x864,0x00000400,0x00000000, +0x878,0x000f000f,0x00000002, +0xe74,0x0f000000,0x00000002, +0xe78,0x0f000000,0x00000002, +0xe7c,0x0f000000,0x00000002, +0xe80,0x0f000000,0x00000002, +0x90c,0x000000ff,0x00000011, +0xc04,0x000000ff,0x00000011, +0xd04,0x0000000f,0x00000001, +0x1f4,0xffff0000,0x00007777, +0x234,0xf8000000,0x0000000a, +}; + +u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength] = { +0x804,0x0000000f,0x00000003, +0x824,0x00f0000f,0x00300004, +0x82c,0x00f0000f,0x00300002, +0x870,0x04000000,0x00000001, +0x864,0x00000400,0x00000000, +0x878,0x000f000f,0x00000002, +0xe74,0x0f000000,0x00000002, +0xe78,0x0f000000,0x00000002, +0xe7c,0x0f000000,0x00000002, +0xe80,0x0f000000,0x00000002, +0x90c,0x000000ff,0x00000011, +0xc04,0x000000ff,0x00000033, +0xd04,0x0000000f,0x00000003, +0x1f4,0xffff0000,0x00007777, +0x234,0xf8000000,0x0000000a, +}; + +u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength] = { +0x804,0x0000000f,0x00000003, +0x824,0x00f0000f,0x00300004, +0x82c,0x00f0000f,0x00300004, +0x870,0x04000000,0x00000001, +0x864,0x00000400,0x00000001, +0x878,0x000f000f,0x00020002, +0xe74,0x0f000000,0x00000006, +0xe78,0x0f000000,0x00000006, +0xe7c,0x0f000000,0x00000006, +0xe80,0x0f000000,0x00000006, +0x90c,0x000000ff,0x00000033, +0xc04,0x000000ff,0x00000033, +0xd04,0x0000000f,0x00000003, +0x1f4,0xffff0000,0x0000ffff, +0x234,0xf8000000,0x00000013, +}; + +u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength] = { +0xe00,0xffffffff,0x06090909, +0xe04,0xffffffff,0x00030406, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x0a0c0d0e, +0xe14,0xffffffff,0x03040508, +0xe18,0xffffffff,0x0a0c0d0e, +0xe1c,0xffffffff,0x03040508, +0xe00,0xffffffff,0x04040404, +0xe04,0xffffffff,0x00020204, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x02040404, +0xe14,0xffffffff,0x00000002, +0xe18,0xffffffff,0x02040404, +0xe1c,0xffffffff,0x00000002, +0xe00,0xffffffff,0x04040404, +0xe04,0xffffffff,0x00020204, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x02040404, +0xe14,0xffffffff,0x00000002, +0xe18,0xffffffff,0x02040404, +0xe1c,0xffffffff,0x00000002, +0xe00,0xffffffff,0x02020202, +0xe04,0xffffffff,0x00020202, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x02020202, +0xe14,0xffffffff,0x00000002, +0xe18,0xffffffff,0x02020202, +0xe1c,0xffffffff,0x00000002, +}; + +u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength] = { +0x000,0x00030159, +0x001,0x00030250, +0x002,0x00010000, +0x010,0x0008000f, +0x011,0x000231fc, +0x010,0x000c000f, +0x011,0x0003f9f8, +0x010,0x0002000f, +0x011,0x00020101, +0x014,0x0001093e, +0x014,0x0009093e, +0x015,0x0000f8f4, +0x017,0x000f6500, +0x01a,0x00013056, +0x01b,0x00060000, +0x01c,0x00000300, +0x01e,0x00031059, +0x021,0x00054000, +0x022,0x0000083c, +0x023,0x00001558, +0x024,0x00000060, +0x025,0x00022583, +0x026,0x0000f200, +0x027,0x000eacf1, +0x028,0x0009bd54, +0x029,0x00004582, +0x02a,0x00000001, +0x02b,0x00021334, +0x02a,0x00000000, +0x02b,0x0000000a, +0x02a,0x00000001, +0x02b,0x00000808, +0x02b,0x00053333, +0x02c,0x0000000c, +0x02a,0x00000002, +0x02b,0x00000808, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000003, +0x02b,0x00000808, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000004, +0x02b,0x00000808, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000005, +0x02b,0x00000709, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x00000006, +0x02b,0x00000709, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000007, +0x02b,0x00000709, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000008, +0x02b,0x00000709, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000009, +0x02b,0x0000060a, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000a, +0x02b,0x0000060a, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x0000000b, +0x02b,0x0000060a, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x0000000c, +0x02b,0x0000060a, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x0000000d, +0x02b,0x0000050b, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000e, +0x02b,0x0000050b, +0x02b,0x00066623, +0x02c,0x0000001a, +0x02a,0x000e4000, +0x030,0x00020000, +0x031,0x000b9631, +0x032,0x0000130d, +0x033,0x00000187, +0x013,0x00019e6c, +0x013,0x00015e94, +0x000,0x00010159, +0x018,0x0000f401, +0x0fe,0x00000000, +0x01e,0x0003105b, +0x0fe,0x00000000, +0x000,0x00030159, +0x010,0x0004000f, +0x011,0x000203f9, +}; + +u32 Rtl8192SERadioB_Array[RadioB_ArrayLength] = { +0x000,0x00030159, +0x001,0x00001041, +0x002,0x00011000, +0x005,0x00080fc0, +0x007,0x000fc803, +0x013,0x00017cb0, +0x013,0x00011cc0, +0x013,0x0000dc60, +0x013,0x00008c60, +0x013,0x00004450, +0x013,0x00000020, +}; + +u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength] = { +0x000,0x00030159, +0x001,0x00030250, +0x002,0x00010000, +0x010,0x0008000f, +0x011,0x000231fc, +0x010,0x000c000f, +0x011,0x0003f9f8, +0x014,0x0001093e, +0x014,0x0009093e, +0x015,0x000198f4, +0x017,0x000f6500, +0x01a,0x00013056, +0x01b,0x00060000, +0x01c,0x00000300, +0x01e,0x00031059, +0x021,0x00054000, +0x022,0x0000083c, +0x023,0x00001558, +0x024,0x00000060, +0x025,0x00022583, +0x026,0x0000f200, +0x027,0x000eacf1, +0x028,0x000dbd54, +0x029,0x00004582, +0x02a,0x00000001, +0x02b,0x00021334, +0x02a,0x00000000, +0x02b,0x0000000a, +0x02a,0x00000001, +0x02b,0x00000808, +0x02b,0x00053333, +0x02c,0x0000000c, +0x02a,0x00000002, +0x02b,0x00000808, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000003, +0x02b,0x00000808, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000004, +0x02b,0x00000808, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000005, +0x02b,0x00000709, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x00000006, +0x02b,0x00000709, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000007, +0x02b,0x00000709, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000008, +0x02b,0x00000709, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000009, +0x02b,0x0000060a, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000a, +0x02b,0x0000060a, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x0000000b, +0x02b,0x0000060a, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x0000000c, +0x02b,0x0000060a, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x0000000d, +0x02b,0x0000050b, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000e, +0x02b,0x0000050b, +0x02b,0x00066623, +0x02c,0x0000001a, +0x02a,0x000e4000, +0x030,0x00020000, +0x031,0x000b9631, +0x033,0x00000187, +0x013,0x00019e6c, +0x013,0x00015e94, +0x000,0x00010159, +0x018,0x0000f401, +0x0fe,0x00000000, +0x01e,0x0003105b, +0x0fe,0x00000000, +0x000,0x00030159, +0x010,0x0004000f, +0x011,0x000203f9, +}; + +u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength] = { +0x000,0x00030159, +0x001,0x00030250, +0x002,0x00010000, +0x010,0x0008000f, +0x011,0x000231fc, +0x010,0x000c000f, +0x011,0x0003f9f8, +0x014,0x0001093e, +0x014,0x0009093e, +0x015,0x000198f4, +0x017,0x000f6500, +0x01a,0x00013056, +0x01b,0x00060000, +0x01c,0x00000300, +0x01e,0x00031059, +0x021,0x00054000, +0x022,0x0000083c, +0x023,0x00001558, +0x024,0x00000060, +0x025,0x00022583, +0x026,0x0000f200, +0x027,0x000eacf1, +0x028,0x000dbd54, +0x029,0x00004582, +0x02a,0x00000001, +0x02b,0x00021334, +0x02a,0x00000000, +0x02b,0x0000000a, +0x02a,0x00000001, +0x02b,0x00000808, +0x02b,0x00053333, +0x02c,0x0000000c, +0x02a,0x00000002, +0x02b,0x00000808, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000003, +0x02b,0x00000808, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000004, +0x02b,0x00000808, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000005, +0x02b,0x00000709, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x00000006, +0x02b,0x00000709, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000007, +0x02b,0x00000709, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000008, +0x02b,0x00000709, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000009, +0x02b,0x0000060a, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000a, +0x02b,0x0000060a, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x0000000b, +0x02b,0x0000060a, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x0000000c, +0x02b,0x0000060a, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x0000000d, +0x02b,0x0000050b, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000e, +0x02b,0x0000050b, +0x02b,0x00066623, +0x02c,0x0000001a, +0x02a,0x000e4000, +0x030,0x00020000, +0x031,0x000b9631, +0x033,0x00000187, +0x013,0x00019e6c, +0x013,0x00015e94, +0x000,0x00010159, +0x018,0x0000f401, +0x0fe,0x00000000, +0x01e,0x0003105b, +0x0fe,0x00000000, +0x000,0x00030159, +0x010,0x0004000f, +0x011,0x000203f9, +}; + +u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength] = { +0x000,0x00030159, +0x001,0x00001041, +0x002,0x00011000, +0x005,0x00080fc0, +0x007,0x000fc803, +}; + +u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength] = { +0x020,0x00000035, +0x048,0x0000000e, +0x049,0x000000f0, +0x04a,0x00000077, +0x04b,0x00000083, +0x0b5,0x00000021, +0x0dc,0x000000ff, +0x0dd,0x000000ff, +0x0de,0x000000ff, +0x0df,0x000000ff, +0x116,0x00000000, +0x117,0x00000000, +0x118,0x00000000, +0x119,0x00000000, +0x11a,0x00000000, +0x11b,0x00000000, +0x11c,0x00000000, +0x11d,0x00000000, +0x160,0x0000000b, +0x161,0x0000000b, +0x162,0x0000000b, +0x163,0x0000000b, +0x164,0x0000000b, +0x165,0x0000000b, +0x166,0x0000000b, +0x167,0x0000000b, +0x168,0x0000000b, +0x169,0x0000000b, +0x16a,0x0000000b, +0x16b,0x0000000b, +0x16c,0x0000000b, +0x16d,0x0000000b, +0x16e,0x0000000b, +0x16f,0x0000000b, +0x170,0x0000000b, +0x171,0x0000000b, +0x172,0x0000000b, +0x173,0x0000000b, +0x174,0x0000000b, +0x175,0x0000000b, +0x176,0x0000000b, +0x177,0x0000000b, +0x178,0x0000000b, +0x179,0x0000000b, +0x17a,0x0000000b, +0x17b,0x0000000b, +0x17c,0x0000000b, +0x17d,0x0000000b, +0x17e,0x0000000b, +0x17f,0x0000000b, +0x236,0x0000000c, +0x503,0x00000022, +0x560,0x00000000, +}; + +u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength] = { +0x0, }; + +u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength] = { +0xc78,0x7f000001, +0xc78,0x7f010001, +0xc78,0x7e020001, +0xc78,0x7d030001, +0xc78,0x7c040001, +0xc78,0x7b050001, +0xc78,0x7a060001, +0xc78,0x79070001, +0xc78,0x78080001, +0xc78,0x77090001, +0xc78,0x760a0001, +0xc78,0x750b0001, +0xc78,0x740c0001, +0xc78,0x730d0001, +0xc78,0x720e0001, +0xc78,0x710f0001, +0xc78,0x70100001, +0xc78,0x6f110001, +0xc78,0x6f120001, +0xc78,0x6e130001, +0xc78,0x6d140001, +0xc78,0x6d150001, +0xc78,0x6c160001, +0xc78,0x6b170001, +0xc78,0x6a180001, +0xc78,0x6a190001, +0xc78,0x691a0001, +0xc78,0x681b0001, +0xc78,0x671c0001, +0xc78,0x661d0001, +0xc78,0x651e0001, +0xc78,0x641f0001, +0xc78,0x63200001, +0xc78,0x4c210001, +0xc78,0x4b220001, +0xc78,0x4a230001, +0xc78,0x49240001, +0xc78,0x48250001, +0xc78,0x47260001, +0xc78,0x46270001, +0xc78,0x45280001, +0xc78,0x44290001, +0xc78,0x2c2a0001, +0xc78,0x2b2b0001, +0xc78,0x2a2c0001, +0xc78,0x292d0001, +0xc78,0x282e0001, +0xc78,0x272f0001, +0xc78,0x26300001, +0xc78,0x25310001, +0xc78,0x24320001, +0xc78,0x23330001, +0xc78,0x22340001, +0xc78,0x09350001, +0xc78,0x08360001, +0xc78,0x07370001, +0xc78,0x06380001, +0xc78,0x05390001, +0xc78,0x043a0001, +0xc78,0x033b0001, +0xc78,0x023c0001, +0xc78,0x013d0001, +0xc78,0x003e0001, +0xc78,0x003f0001, +0xc78,0x7f400001, +0xc78,0x7f410001, +0xc78,0x7e420001, +0xc78,0x7d430001, +0xc78,0x7c440001, +0xc78,0x7b450001, +0xc78,0x7a460001, +0xc78,0x79470001, +0xc78,0x78480001, +0xc78,0x77490001, +0xc78,0x764a0001, +0xc78,0x754b0001, +0xc78,0x744c0001, +0xc78,0x734d0001, +0xc78,0x724e0001, +0xc78,0x714f0001, +0xc78,0x70500001, +0xc78,0x6f510001, +0xc78,0x6f520001, +0xc78,0x6e530001, +0xc78,0x6d540001, +0xc78,0x6d550001, +0xc78,0x6c560001, +0xc78,0x6b570001, +0xc78,0x6a580001, +0xc78,0x6a590001, +0xc78,0x695a0001, +0xc78,0x685b0001, +0xc78,0x675c0001, +0xc78,0x665d0001, +0xc78,0x655e0001, +0xc78,0x645f0001, +0xc78,0x63600001, +0xc78,0x4c610001, +0xc78,0x4b620001, +0xc78,0x4a630001, +0xc78,0x49640001, +0xc78,0x48650001, +0xc78,0x47660001, +0xc78,0x46670001, +0xc78,0x45680001, +0xc78,0x44690001, +0xc78,0x2c6a0001, +0xc78,0x2b6b0001, +0xc78,0x2a6c0001, +0xc78,0x296d0001, +0xc78,0x286e0001, +0xc78,0x276f0001, +0xc78,0x26700001, +0xc78,0x25710001, +0xc78,0x24720001, +0xc78,0x23730001, +0xc78,0x22740001, +0xc78,0x09750001, +0xc78,0x08760001, +0xc78,0x07770001, +0xc78,0x06780001, +0xc78,0x05790001, +0xc78,0x047a0001, +0xc78,0x037b0001, +0xc78,0x027c0001, +0xc78,0x017d0001, +0xc78,0x007e0001, +0xc78,0x007f0001, +0xc78,0x3000001e, +0xc78,0x3001001e, +0xc78,0x3002001e, +0xc78,0x3003001e, +0xc78,0x3004001e, +0xc78,0x3405001e, +0xc78,0x3806001e, +0xc78,0x3e07001e, +0xc78,0x3e08001e, +0xc78,0x4409001e, +0xc78,0x460a001e, +0xc78,0x480b001e, +0xc78,0x480c001e, +0xc78,0x4e0d001e, +0xc78,0x560e001e, +0xc78,0x5a0f001e, +0xc78,0x5e10001e, +0xc78,0x6211001e, +0xc78,0x6c12001e, +0xc78,0x7213001e, +0xc78,0x7214001e, +0xc78,0x7215001e, +0xc78,0x7216001e, +0xc78,0x7217001e, +0xc78,0x7218001e, +0xc78,0x7219001e, +0xc78,0x721a001e, +0xc78,0x721b001e, +0xc78,0x721c001e, +0xc78,0x721d001e, +0xc78,0x721e001e, +0xc78,0x721f001e, +}; + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.h @@ -0,0 +1,60 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_HAL8192SE_FW_IMG_H +#define __INC_HAL8192SE_FW_IMG_H + +/*Created on 2009/ 7/23, 5: 4*/ + +#include +#define ImgArrayLength 75984 +extern u8 Rtl8192SEFwImgArray[ImgArrayLength]; +#define MainArrayLength 1 +extern u8 Rtl8192SEFwMainArray[MainArrayLength]; +#define DataArrayLength 1 +extern u8 Rtl8192SEFwDataArray[DataArrayLength]; +#define PHY_REG_2T2RArrayLength 372 +extern u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength]; +#define PHY_REG_1T2RArrayLength 1 +extern u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength]; +#define PHY_ChangeTo_1T1RArrayLength 48 +extern u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength]; +#define PHY_ChangeTo_1T2RArrayLength 45 +extern u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength]; +#define PHY_ChangeTo_2T2RArrayLength 45 +extern u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength]; +#define PHY_REG_Array_PGLength 84 +extern u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength]; +#define RadioA_1T_ArrayLength 202 +extern u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength]; +#define RadioB_ArrayLength 22 +extern u32 Rtl8192SERadioB_Array[RadioB_ArrayLength]; +#define RadioA_to1T_ArrayLength 196 +extern u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength]; +#define RadioA_to2T_ArrayLength 196 +extern u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength]; +#define RadioB_GM_ArrayLength 10 +extern u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength]; +#define MAC_2T_ArrayLength 106 +extern u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength]; +#define MACPHY_Array_PGLength 1 +extern u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength]; +#define AGCTAB_ArrayLength 320 +extern u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength]; + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_phy.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_phy.c @@ -0,0 +1,3464 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifdef RTL8192SE + +#include "../rtl_core.h" +#include "../rtl_dm.h" +#include "r8192S_phy.h" +#include "r8192S_phyreg.h" +#include "r8192S_rtl6052.h" +#include "r8192S_hwimg.h" + +#ifdef ENABLE_DOT11D +#include "../rtllib/dot11d.h" +#endif + +/*---------------------------Define Local Constant---------------------------*/ +#define MAX_PRECMD_CNT 16 +#define MAX_RFDEPENDCMD_CNT 16 +#define MAX_POSTCMD_CNT 16 + +#define MAX_DOZE_WAITING_TIMES_9x 64 + +#define PHY_STOP_SWITCH_CLKREQ 0 +/*---------------------------Define Local Constant---------------------------*/ + +/*------------------------Define global variable-----------------------------*/ + +#define Rtl819XMAC_Array Rtl8192SEMAC_2T_Array +#define Rtl819XAGCTAB_Array Rtl8192SEAGCTAB_Array +#define Rtl819XPHY_REG_Array Rtl8192SEPHY_REG_2T2RArray +#define Rtl819XPHY_REG_to1T1R_Array Rtl8192SEPHY_ChangeTo_1T1RArray +#define Rtl819XPHY_REG_to1T2R_Array Rtl8192SEPHY_ChangeTo_1T2RArray +#define Rtl819XPHY_REG_to2T2R_Array Rtl8192SEPHY_ChangeTo_2T2RArray +#define Rtl819XPHY_REG_Array_PG Rtl8192SEPHY_REG_Array_PG +#define Rtl819XRadioA_Array Rtl8192SERadioA_1T_Array +#define Rtl819XRadioB_Array Rtl8192SERadioB_Array +#define Rtl819XRadioB_GM_Array Rtl8192SERadioB_GM_Array +#define Rtl819XRadioA_to1T_Array Rtl8192SERadioA_to1T_Array +#define Rtl819XRadioA_to2T_Array Rtl8192SERadioA_to2T_Array + +/*------------------------Define local variable------------------------------*/ +#if 0 +static u32 RF_CHANNEL_TABLE_ZEBRA[]={ + 0, + 0x085c, + 0x08dc, + 0x095c, + 0x09dc, + 0x0a5c, + 0x0adc, + 0x0b5c, + 0x0bdc, + 0x0c5c, + 0x0cdc, + 0x0d5c, + 0x0ddc, + 0x0e5c, + 0x0f72, +}; +#endif + +/*------------------------Define local variable------------------------------*/ + + +/*--------------------Define export function prototype-----------------------*/ +/*--------------------Define export function prototype-----------------------*/ + + +/*---------------------Define local function prototype-----------------------*/ + +static u32 phy_FwRFSerialRead( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset); +static void phy_FwRFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data); + +static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset); +static void phy_RFSerialWrite( struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 Offset, u32 Data); +static u32 phy_CalculateBitShift(u32 BitMask); +static bool phy_BB8190_Config_HardCode(struct net_device* dev); +static bool phy_BB8192S_Config_ParaFile(struct net_device* dev); + +static bool phy_ConfigMACWithHeaderFile(struct net_device* dev); + +static bool phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType); + +static bool phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType); + +static bool phy_SetBBtoDiffRFWithHeaderFile(struct net_device* dev,u8 ConfigType); + +static void phy_InitBBRFRegisterDefinition(struct net_device* dev); +static bool phy_SetSwChnlCmdArray( SwChnlCmd* CmdTable, + u32 CmdTableIdx, + u32 CmdTableSz, + SwChnlCmdID CmdID, + u32 Para1, + u32 Para2, + u32 msDelay ); + +static bool phy_SwChnlStepByStep( + struct net_device* dev, + u8 channel, + u8 *stage, + u8 *step, + u32 *delay + ); + +static void phy_FinishSwChnlNow(struct net_device* dev,u8 channel); + +static u8 phy_DbmToTxPwrIdx( struct net_device* dev, WIRELESS_MODE WirelessMode, long PowerInDbm); +static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState); +static void phy_CheckEphySwitchReady( struct net_device* dev); + +static long phy_TxPwrIdxToDbm( struct net_device* dev, WIRELESS_MODE WirelessMode, u8 TxPwrIdx); +void rtl8192_SetFwCmdIOCallback(struct net_device* dev); + + +/*---------------------Define local function prototype-----------------------*/ + + +/*----------------------------Function Body----------------------------------*/ +u32 rtl8192_QueryBBReg(struct net_device* dev, u32 RegAddr, u32 BitMask) +{ + + u32 ReturnValue = 0, OriginalValue, BitShift; + +#if (DISABLE_BB_RF == 1) + return 0; +#endif + + RT_TRACE(COMP_RF, "--->PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x)\n", RegAddr, BitMask); + + OriginalValue = read_nic_dword(dev, RegAddr); + + BitShift = phy_CalculateBitShift(BitMask); + ReturnValue = (OriginalValue & BitMask) >> BitShift; + + RT_TRACE(COMP_RF, "<---PHY_QueryBBReg(): RegAddr(%#x), BitMask(%#x), OriginalValue(%#x)\n", RegAddr, BitMask, OriginalValue); + return (ReturnValue); +} + +void rtl8192_setBBreg(struct net_device* dev, u32 RegAddr, u32 BitMask, u32 Data) +{ + u32 OriginalValue, BitShift, NewValue; + +#if (DISABLE_BB_RF == 1) + return; +#endif + + + { + if(BitMask!= bMaskDWord) + { + OriginalValue = read_nic_dword(dev, RegAddr); + BitShift = phy_CalculateBitShift(BitMask); + NewValue = (((OriginalValue) & (~BitMask)) | (Data << BitShift)); + write_nic_dword(dev, RegAddr, NewValue); + }else + write_nic_dword(dev, RegAddr, Data); + } + + return; +} + + +u32 rtl8192_phy_QueryRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask) +{ + u32 Original_Value, Readback_Value, BitShift; + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags; + +#if (DISABLE_BB_RF == 1) + return 0; +#endif + + RT_TRACE(COMP_RF, "--->PHY_QueryRFReg(): RegAddr(%#x), eRFPath(%#x), BitMask(%#x)\n", RegAddr, eRFPath,BitMask); + + if (!((priv->rf_pathmap >> eRFPath) & 0x1)) + return 0; + + if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) + return 0; + + spin_lock_irqsave(&priv->rf_lock, flags); + if (priv->Rf_Mode == RF_OP_By_FW) + { + Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr); + } + else + { + Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr); + } + + BitShift = phy_CalculateBitShift(BitMask); + Readback_Value = (Original_Value & BitMask) >> BitShift; + spin_unlock_irqrestore(&priv->rf_lock, flags); + + + return (Readback_Value); +} + + +void rtl8192_phy_SetRFReg(struct net_device* dev, RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask, u32 Data) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + u32 Original_Value, BitShift, New_Value; + unsigned long flags; +#if (DISABLE_BB_RF == 1) + return; +#endif + + RT_TRACE(COMP_RF, "--->PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n", + RegAddr, BitMask, Data, eRFPath); + + if (!((priv->rf_pathmap >> eRFPath) & 0x1)) + return ; + if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) + { + return; + } + + spin_lock_irqsave(&priv->rf_lock, flags); + if (priv->Rf_Mode == RF_OP_By_FW) + { + if (BitMask != bRFRegOffsetMask) + { + Original_Value = phy_FwRFSerialRead(dev, eRFPath, RegAddr); + BitShift = phy_CalculateBitShift(BitMask); + New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift)); + + phy_FwRFSerialWrite(dev, eRFPath, RegAddr, New_Value); + } + else + phy_FwRFSerialWrite(dev, eRFPath, RegAddr, Data); + } + else + { + if (BitMask != bRFRegOffsetMask) + { + Original_Value = phy_RFSerialRead(dev, eRFPath, RegAddr); + BitShift = phy_CalculateBitShift(BitMask); + New_Value = (((Original_Value) & (~BitMask)) | (Data<< BitShift)); + + phy_RFSerialWrite(dev, eRFPath, RegAddr, New_Value); + } + else + phy_RFSerialWrite(dev, eRFPath, RegAddr, Data); + + } + spin_unlock_irqrestore(&priv->rf_lock, flags); + RT_TRACE(COMP_RF, "<---PHY_SetRFReg(): RegAddr(%#x), BitMask(%#x), Data(%#x), eRFPath(%#x)\n", + RegAddr, BitMask, Data, eRFPath); + +} + +static u32 +phy_FwRFSerialRead( + struct net_device* dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset ) +{ + u32 retValue = 0; +#if 0 + u32 Data = 0; + u8 time = 0; + Data |= ((Offset&0xFF)<<12); + Data |= ((eRFPath&0x3)<<20); + Data |= 0x80000000; + while (PlatformIORead4Byte(dev, QPNR)&0x80000000) + { + if (time++ < 100) + { + delay_us(10); + } + else + break; + } + PlatformIOWrite4Byte(dev, QPNR, Data); + while (PlatformIORead4Byte(dev, QPNR)&0x80000000) + { + if (time++ < 100) + { + delay_us(10); + } + else + return (0); + } + retValue = PlatformIORead4Byte(dev, RF_DATA); +#endif + return (retValue); + +} /* phy_FwRFSerialRead */ + +static void +phy_FwRFSerialWrite( + struct net_device* dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u32 Data ) +{ +#if 0 + u8 time = 0; + DbgPrint("N FW RF CTRL RF-%d OF%02x DATA=%03x\n\r", eRFPath, Offset, Data); + + Data |= ((Offset&0xFF)<<12); + Data |= ((eRFPath&0x3)<<20); + Data |= 0x400000; + Data |= 0x80000000; + + while (PlatformIORead4Byte(dev, QPNR)&0x80000000) + { + if (time++ < 100) + { + delay_us(10); + } + else + break; + } + PlatformIOWrite4Byte(dev, QPNR, Data); +#endif +} /* phy_FwRFSerialWrite */ + +#if (RTL92SE_FPGA_VERIFY == 1) +static u32 phy_RFSerialRead(struct net_device* dev,RF90_RADIO_PATH_E eRFPath,u32 Offset) +{ + + u32 retValue = 0; + struct r8192_priv *priv = rtllib_priv(dev); + BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath]; + u32 NewOffset; + + Offset &= 0x3f; + + if( priv->rf_chip == RF_8256 || + priv->rf_chip == RF_8225 || + priv->rf_chip == RF_6052) + { + rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); + + if(Offset>=31) + { + priv->RFReadPageCnt[2]++; + priv->RfReg0Value[eRFPath] |= 0x140; + + rtl8192_setBBreg(dev, + pPhyReg->rf3wireOffset, + bMaskDWord, + (priv->RfReg0Value[eRFPath] << 16) ); + + NewOffset = Offset - 30; + + }else if(Offset>=16) + { + priv->RFReadPageCnt[1]++; + priv->RfReg0Value[eRFPath] |= 0x100; + priv->RfReg0Value[eRFPath] &= (~0x40); + + rtl8192_setBBreg(dev, + pPhyReg->rf3wireOffset, + bMaskDWord, + (priv->RfReg0Value[eRFPath] << 16) ); + + NewOffset = Offset - 15; + } + else + { + priv->RFReadPageCnt[0]++; + NewOffset = Offset; + } + } + else + NewOffset = Offset; + +#if (RTL92SE_FPGA_VERIFY == 1) + { + u32 temp1, temp2; + + temp1 = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff); + temp2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, 0xffffffff); + temp2 = temp2 & (~bLSSIReadAddress) | (NewOffset<<24) | bLSSIReadEdge; + + rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1&(~bLSSIReadEdge)); + msleep(1); + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, 0xffffffff, temp2); + msleep(1); + rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, 0xffffffff, temp1|bLSSIReadEdge); + msleep(1); + + } +#else + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadAddress, NewOffset); + + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x0); + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bLSSIReadEdge, 0x1); +#endif + + mdelay(1); + + retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData); + + if( priv->rf_chip == RF_8256 || + priv->rf_chip == RF_8225 || + priv->rf_chip == RF_6052) + { + if (Offset >= 0x10) + { + priv->RfReg0Value[eRFPath] &= 0xebf; + + rtl8192_setBBreg( + dev, + pPhyReg->rf3wireOffset, + bMaskDWord, + (priv->RfReg0Value[eRFPath] << 16) ); + } + + rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf); + } + + return retValue; +} + + +static void +phy_RFSerialWrite( + struct net_device* dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u32 Data + ) +{ + u32 DataAndAddr = 0; + struct r8192_priv *priv = rtllib_priv(dev); + BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath]; + u32 NewOffset; + + Offset &= 0x3f; + + PHY_RFShadowWrite(dev, eRFPath, Offset, Data); + + if( priv->rf_chip == RF_8256 || + priv->rf_chip == RF_8225 || + priv->rf_chip == RF_6052) + { + rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0x0); + + if(Offset>=31) + { + priv->RFWritePageCnt[2]++; + priv->RfReg0Value[eRFPath] |= 0x140; + + rtl8192_setBBreg(dev, + pPhyReg->rf3wireOffset, + bMaskDWord, + (priv->RfReg0Value[eRFPath] << 16) ); + + NewOffset = Offset - 30; + + }else if(Offset>=16) + { + priv->RFWritePageCnt[1]++; + priv->RfReg0Value[eRFPath] |= 0x100; + priv->RfReg0Value[eRFPath] &= (~0x40); + + + rtl8192_setBBreg(dev, + pPhyReg->rf3wireOffset, + bMaskDWord, + (priv->RfReg0Value[eRFPath] << 16) ); + + NewOffset = Offset - 15; + } + else + { + priv->RFWritePageCnt[0]++; + NewOffset = Offset; + } + } + else + NewOffset = Offset; + + DataAndAddr = (Data<<16) | (NewOffset&0x3f); + + rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr); + + + if(Offset==0x0) + priv->RfReg0Value[eRFPath] = Data; + + if( priv->rf_chip == RF_8256 || + priv->rf_chip == RF_8225 || + priv->rf_chip == RF_6052) + { + if (Offset >= 0x10) + { + if(Offset != 0) + { + priv->RfReg0Value[eRFPath] &= 0xebf; + rtl8192_setBBreg( + dev, + pPhyReg->rf3wireOffset, + bMaskDWord, + (priv->RfReg0Value[eRFPath] << 16) ); + } + } + rtl8192_setBBreg(dev, rFPGA0_AnalogParameter4, 0xf00, 0xf); + } + +} +#else +static u32 +phy_RFSerialRead( + struct net_device* dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset + ) +{ + + u32 retValue = 0; + struct r8192_priv *priv = rtllib_priv(dev); + BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath]; + u32 NewOffset; + u32 tmplong,tmplong2; + u8 RfPiEnable=0; +#if 0 + if(priv->rf_chip == RF_8225 && Offset > 0x24) + return retValue; + if(priv->rf_chip == RF_8256 && Offset > 0x2D) + return retValue; +#endif + Offset &= 0x3f; + + NewOffset = Offset; + + tmplong = rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord); + if(eRFPath == RF90_PATH_A) + tmplong2 = tmplong; + else + tmplong2 = rtl8192_QueryBBReg(dev, pPhyReg->rfHSSIPara2, bMaskDWord); + tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset<<23) | bLSSIReadEdge; + + rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong&(~bLSSIReadEdge)); + udelay(1000); + + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2); + udelay(1000); + + rtl8192_setBBreg(dev, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge); + + if(eRFPath == RF90_PATH_A) + RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8); + else if(eRFPath == RF90_PATH_B) + RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XB_HSSIParameter1, BIT8); + + if(RfPiEnable) + { + retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData); + } + else + { + retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData); + } + + retValue = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack, bLSSIReadBackData); + + return retValue; + +} + +static void +phy_RFSerialWrite( + struct net_device* dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u32 Data + ) +{ + u32 DataAndAddr = 0; + struct r8192_priv *priv = rtllib_priv(dev); + BB_REGISTER_DEFINITION_T *pPhyReg = &priv->PHYRegDef[eRFPath]; + u32 NewOffset; + +#if 0 + if(priv->rf_chip == RF_8225 && Offset > 0x24) + return; + if(priv->rf_chip == RF_8256 && Offset > 0x2D) + return; +#endif + + Offset &= 0x3f; + + PHY_RFShadowWrite(dev, eRFPath, Offset, Data); + + NewOffset = Offset; + + DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff; + + rtl8192_setBBreg(dev, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr); + +} + +#endif + +static u32 phy_CalculateBitShift(u32 BitMask) +{ + u32 i; + + for(i=0; i<=31; i++) + { + if ( ((BitMask>>i) & 0x1 ) == 1) + break; + } + + return (i); +} + + +extern bool PHY_MACConfig8192S(struct net_device* dev) +{ + bool rtStatus = true; + +#if RTL8190_Download_Firmware_From_Header + rtStatus = phy_ConfigMACWithHeaderFile(dev); +#else + + RT_TRACE(COMP_INIT, "Read MACREG.txt\n"); +#endif + return (rtStatus == true) ? 1:0; + +} + +extern bool +PHY_BBConfig8192S(struct net_device* dev) +{ + bool rtStatus = true; + u8 PathMap = 0, index = 0, rf_num = 0; + struct r8192_priv *priv = rtllib_priv(dev); + u8 bRegHwParaFile = 1; + + phy_InitBBRFRegisterDefinition(dev); + + switch(bRegHwParaFile) + { + case 0: + phy_BB8190_Config_HardCode(dev); + break; + + case 1: + rtStatus = phy_BB8192S_Config_ParaFile(dev); + break; + + case 2: + phy_BB8190_Config_HardCode(dev); + phy_BB8192S_Config_ParaFile(dev); + break; + + default: + phy_BB8190_Config_HardCode(dev); + break; + } + + PathMap = (u8)(rtl8192_QueryBBReg(dev, rFPGA0_TxInfo, 0xf) | + rtl8192_QueryBBReg(dev, rOFDM0_TRxPathEnable, 0xf)); + priv->rf_pathmap = PathMap; + for(index = 0; index<4; index++) + { + if((PathMap>>index)&0x1) + rf_num++; + } + + if((priv->rf_type==RF_1T1R && rf_num!=1) || + (priv->rf_type==RF_1T2R && rf_num!=2) || + (priv->rf_type==RF_2T2R && rf_num!=2) || + (priv->rf_type==RF_2T2R_GREEN && rf_num!=2) || + (priv->rf_type==RF_2T4R && rf_num!=4)) + { + RT_TRACE( COMP_INIT, "PHY_BBConfig8192S: RF_Type(%x) does not match RF_Num(%x)!!\n", priv->rf_type, rf_num); + } + return rtStatus; +} + +extern bool +PHY_RFConfig8192S(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool rtStatus = true; + + + if (IS_HARDWARE_TYPE_8192SE(dev)) + priv->rf_chip = RF_6052; + + switch(priv->rf_chip) + { + case RF_8225: + case RF_6052: + rtStatus = PHY_RF6052_Config(dev); + break; + + case RF_8256: + break; + + case RF_8258: + break; + + case RF_PSEUDO_11N: + break; + default: + break; + } + + return rtStatus; +} + + +static bool +phy_BB8190_Config_HardCode(struct net_device* dev) +{ + return true; +} + + +static bool +phy_BB8192S_Config_ParaFile(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool rtStatus = true; + + RT_TRACE(COMP_INIT, "==>phy_BB8192S_Config_ParaFile\n"); + +#if RTL8190_Download_Firmware_From_Header + if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R || + priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN) + { + rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_PHY_REG); + if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN) + { + rtStatus = phy_SetBBtoDiffRFWithHeaderFile(dev,BaseBand_Config_PHY_REG); + } + }else + rtStatus = false; +#else + RT_TRACE(COMP_INIT, "RF_Type == %d\n", priv->rf_type); + if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R || + priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN) + { + rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szBBRegFile); + if(priv->rf_type != RF_2T2R && priv->rf_type != RF_2T2R_GREEN) + { + if(priv->rf_type == RF_1T1R) + rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T1RFile); + else if(priv->rf_type == RF_1T2R) + rtStatus = phy_SetBBtoDiffRFWithParaFile(dev, (char* )&szBBRegto1T2RFile); + } + + }else + rtStatus = false; +#endif + + if(rtStatus != true){ + RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():Write BB Reg Fail!!"); + goto phy_BB8190_Config_ParaFile_Fail; + } + + if (priv->AutoloadFailFlag == false) + { + priv->pwrGroupCnt = 0; + +#if RTL8190_Download_Firmware_From_Header + rtStatus = phy_ConfigBBWithPgHeaderFile(dev,BaseBand_Config_PHY_REG); +#else + rtStatus = phy_ConfigBBWithPgParaFile(dev, (char* )&szBBRegPgFile); +#endif + } + if(rtStatus != true){ + RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile():BB_PG Reg Fail!!"); + goto phy_BB8190_Config_ParaFile_Fail; + } + +#if RTL8190_Download_Firmware_From_Header + rtStatus = phy_ConfigBBWithHeaderFile(dev,BaseBand_Config_AGC_TAB); +#else + RT_TRACE(COMP_INIT, "phy_BB8192S_Config_ParaFile AGC_TAB.txt\n"); + rtStatus = phy_ConfigBBWithParaFile(dev, (char* )&szAGCTableFile); +#endif + + if(rtStatus != true){ + printk( "phy_BB8192S_Config_ParaFile():AGC Table Fail\n"); + goto phy_BB8190_Config_ParaFile_Fail; + } + + +#if 0 + if(pHalData->VersionID > VERSION_8190_BD) + { + u4RegValue = ( pHalData->AntennaTxPwDiff[2]<<8 | + pHalData->AntennaTxPwDiff[1]<<4 | + pHalData->AntennaTxPwDiff[0]); + + PHY_SetBBReg(dev, rFPGA0_TxGainStage, + (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue); + + u4RegValue = pHalData->CrystalCap; + PHY_SetBBReg(dev, rFPGA0_AnalogParameter1, bXtalCap92x, u4RegValue); + + } +#endif + + priv->bCckHighPower = (bool)(rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter2, 0x200)); + + +phy_BB8190_Config_ParaFile_Fail: + return rtStatus; +} + +static bool +phy_ConfigMACWithHeaderFile(struct net_device* dev) +{ + u32 i = 0; + u32 ArrayLength = 0; + u32* ptrArray; + + /*if(dev->bInHctTest) + { + RT_TRACE(COMP_INIT, DBG_LOUD, ("Rtl819XMACPHY_ArrayDTM\n")); + ArrayLength = MACPHY_ArrayLengthDTM; + ptrArray = Rtl819XMACPHY_ArrayDTM; + } + else if(pHalData->bTXPowerDataReadFromEEPORM) + { + + }else*/ + { + RT_TRACE(COMP_INIT, "Read Rtl819XMACPHY_Array\n"); + ArrayLength = MAC_2T_ArrayLength; + ptrArray = Rtl819XMAC_Array; + } + + /*for(i = 0 ;i < ArrayLength;i=i+3){ + RT_TRACE(COMP_SEND, DBG_LOUD, ("The Rtl819XMACPHY_Array[0] is %lx Rtl819XMACPHY_Array[1] is %lx Rtl819XMACPHY_Array[2] is %lx\n",ptrArray[i], ptrArray[i+1], ptrArray[i+2])); + if(ptrArray[i] == 0x318) + { + ptrArray[i+2] = 0x00000800; + } + PHY_SetBBReg(dev, ptrArray[i], ptrArray[i+1], ptrArray[i+2]); + }*/ + for(i = 0 ;i < ArrayLength;i=i+2){ + write_nic_byte(dev, ptrArray[i], (u8)ptrArray[i+1]); + } + return true; +} + + +static bool +phy_ConfigBBWithHeaderFile(struct net_device* dev,u8 ConfigType) +{ + int i; + u32* Rtl819XPHY_REGArray_Table; + u32* Rtl819XAGCTAB_Array_Table; + u16 PHY_REGArrayLen, AGCTAB_ArrayLen; + /*if(dev->bInHctTest) + { + + AGCTAB_ArrayLen = AGCTAB_ArrayLengthDTM; + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_ArrayDTM; + + if(pHalData->RF_Type == RF_2T4R) + { + PHY_REGArrayLen = PHY_REGArrayLengthDTM; + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REGArrayDTM; + } + else if (pHalData->RF_Type == RF_1T2R) + { + PHY_REGArrayLen = PHY_REG_1T2RArrayLengthDTM; + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T2RArrayDTM; + } + + } + else + */ + AGCTAB_ArrayLen = AGCTAB_ArrayLength; + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_Array; + PHY_REGArrayLen = PHY_REG_2T2RArrayLength; + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_Array; + + if(ConfigType == BaseBand_Config_PHY_REG) + { + for(i=0;irf_type == RF_1T1R) + { + Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T1R_Array; + PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T1RArrayLength; + } + else if(priv->rf_type == RF_1T2R) + { + Rtl819XPHY_REGArraytoXTXR_Table = Rtl819XPHY_REG_to1T2R_Array; + PHY_REGArraytoXTXRLen = PHY_ChangeTo_1T2RArrayLength; + } + else + { + return false; + } + + if(ConfigType == BaseBand_Config_PHY_REG) + { + for(i=0;iMCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][0] = Data; + } + if(RegAddr == rTxAGC_Rate54_24) + { + priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][1] = Data; + } + if(RegAddr == rTxAGC_CCK_Mcs32) + { + priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][6] = Data; + } + if(RegAddr == rTxAGC_Mcs03_Mcs00) + { + priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][2] = Data; + } + if(RegAddr == rTxAGC_Mcs07_Mcs04) + { + priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][3] = Data; + } + if(RegAddr == rTxAGC_Mcs11_Mcs08) + { + priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][4] = Data; + } + if(RegAddr == rTxAGC_Mcs15_Mcs12) + { + priv->MCSTxPowerLevelOriginalOffset[priv->pwrGroupCnt][5] = Data; + priv->pwrGroupCnt++; + } +} + +static bool +phy_ConfigBBWithPgHeaderFile(struct net_device* dev,u8 ConfigType) +{ + int i; + u32* Rtl819XPHY_REGArray_Table_PG; + u16 PHY_REGArrayPGLen; + + PHY_REGArrayPGLen = PHY_REG_Array_PGLength; + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG; + + if(ConfigType == BaseBand_Config_PHY_REG) + { + for(i=0;iIC_Class != IC_INFERIORITY_A) + { + tmpval = rtl8192_phy_QueryRFReg(dev, eRFPath, RF_IPA, 0xf); + rtl8192_phy_SetRFReg(dev, eRFPath, RF_IPA, 0xf, tmpval+1); + } + + return rtStatus; +} + +u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev, RF90_RADIO_PATH_E eRFPath) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int i; + bool rtStatus = true; + u32 *Rtl819XRadioA_Array_Table; + u32 *Rtl819XRadioB_Array_Table; + u16 RadioA_ArrayLen,RadioB_ArrayLen; + + RadioA_ArrayLen = RadioA_1T_ArrayLength; + Rtl819XRadioA_Array_Table=Rtl819XRadioA_Array; + + if(priv->rf_type == RF_2T2R_GREEN) + { + Rtl819XRadioB_Array_Table = Rtl819XRadioB_GM_Array; + RadioB_ArrayLen = RadioB_GM_ArrayLength; + } + else + { + Rtl819XRadioB_Array_Table=Rtl819XRadioB_Array; + RadioB_ArrayLen = RadioB_ArrayLength; + } + + + RT_TRACE(COMP_INIT, "PHY_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath); + rtStatus = true; + + switch(eRFPath){ + case RF90_PATH_A: + for(i = 0;iSetRFPowerStateInProgress == true) + return; + + priv->SetRFPowerStateInProgress = true; + + + if(RFPowerState==RF_SHUT_DOWN) + { + RFPowerState=RF_OFF; + WaitShutDown=true; + } + + + priv->RFPowerState = RFPowerState; + switch( priv->rf_chip ) + { + case RF_8225: + case RF_6052: + switch( RFPowerState ) + { + case RF_ON: + break; + + case RF_SLEEP: + break; + + case RF_OFF: + break; + } + break; + + case RF_8256: + switch( RFPowerState ) + { + case RF_ON: + break; + + case RF_SLEEP: + break; + + case RF_OFF: + for(eRFPath=(RF90_RADIO_PATH_E)RF90_PATH_A; eRFPath < RF90_PATH_MAX; eRFPath++) + { + if (!rtl8192_phy_CheckIsLegalRFPath(dev, eRFPath)) + continue; + + pPhyReg = &priv->PHYRegDef[eRFPath]; + rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, bRFSI_RFENV); + rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0); + } + break; + } + break; + + case RF_8258: + break; + } + + priv->SetRFPowerStateInProgress = false; +} +#endif + +void PHY_GetHWRegOriginalValue(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); +#if 0 + priv->MCSTxPowerLevelOriginalOffset[0] = + rtl8192_QueryBBReg(dev, rTxAGC_Rate18_06, bMaskDWord); + priv->MCSTxPowerLevelOriginalOffset[1] = + rtl8192_QueryBBReg(dev, rTxAGC_Rate54_24, bMaskDWord); + priv->MCSTxPowerLevelOriginalOffset[2] = + rtl8192_QueryBBReg(dev, rTxAGC_Mcs03_Mcs00, bMaskDWord); + priv->MCSTxPowerLevelOriginalOffset[3] = + rtl8192_QueryBBReg(dev, rTxAGC_Mcs07_Mcs04, bMaskDWord); + priv->MCSTxPowerLevelOriginalOffset[4] = + rtl8192_QueryBBReg(dev, rTxAGC_Mcs11_Mcs08, bMaskDWord); + priv->MCSTxPowerLevelOriginalOffset[5] = + rtl8192_QueryBBReg(dev, rTxAGC_Mcs15_Mcs12, bMaskDWord); + + priv->CCKTxPowerLevelOriginalOffset= + rtl8192_QueryBBReg(dev, rTxAGC_CCK_Mcs32, bMaskDWord); + RT_TRACE(COMP_INIT, "Legacy OFDM =%08x/%08x HT_OFDM=%08x/%08x/%08x/%08x\n", + priv->MCSTxPowerLevelOriginalOffset[0], priv->MCSTxPowerLevelOriginalOffset[1] , + priv->MCSTxPowerLevelOriginalOffset[2], priv->MCSTxPowerLevelOriginalOffset[3] , + priv->MCSTxPowerLevelOriginalOffset[4], priv->MCSTxPowerLevelOriginalOffset[5] ); +#endif + + priv->DefaultInitialGain[0] = rtl8192_QueryBBReg(dev, rOFDM0_XAAGCCore1, bMaskByte0); + priv->DefaultInitialGain[1] = rtl8192_QueryBBReg(dev, rOFDM0_XBAGCCore1, bMaskByte0); + priv->DefaultInitialGain[2] = rtl8192_QueryBBReg(dev, rOFDM0_XCAGCCore1, bMaskByte0); + priv->DefaultInitialGain[3] = rtl8192_QueryBBReg(dev, rOFDM0_XDAGCCore1, bMaskByte0); + RT_TRACE(COMP_INIT, "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n", + priv->DefaultInitialGain[0], priv->DefaultInitialGain[1], + priv->DefaultInitialGain[2], priv->DefaultInitialGain[3]); + + priv->framesync = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector3, bMaskByte0); + priv->framesyncC34 = rtl8192_QueryBBReg(dev, rOFDM0_RxDetector2, bMaskDWord); + RT_TRACE(COMP_INIT, "Default framesync (0x%x) = 0x%x \n", + rOFDM0_RxDetector3, priv->framesync); + +} + + + +static void phy_InitBBRFRegisterDefinition( struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; + priv->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; + priv->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW; + priv->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW; + + priv->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; + priv->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB; + priv->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB; + priv->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB; + + priv->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; + priv->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; + priv->PHYRegDef[RF90_PATH_C].rfintfo = rFPGA0_XC_RFInterfaceOE; + priv->PHYRegDef[RF90_PATH_D].rfintfo = rFPGA0_XD_RFInterfaceOE; + + priv->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; + priv->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; + priv->PHYRegDef[RF90_PATH_C].rfintfe = rFPGA0_XC_RFInterfaceOE; + priv->PHYRegDef[RF90_PATH_D].rfintfe = rFPGA0_XD_RFInterfaceOE; + + priv->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; + priv->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter; + priv->PHYRegDef[RF90_PATH_C].rf3wireOffset = rFPGA0_XC_LSSIParameter; + priv->PHYRegDef[RF90_PATH_D].rf3wireOffset = rFPGA0_XD_LSSIParameter; + + priv->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; + priv->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter; + priv->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter; + priv->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter; + + priv->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; + priv->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; + priv->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; + priv->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; + + priv->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; + priv->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; + priv->PHYRegDef[RF90_PATH_C].rfHSSIPara1 = rFPGA0_XC_HSSIParameter1; + priv->PHYRegDef[RF90_PATH_D].rfHSSIPara1 = rFPGA0_XD_HSSIParameter1; + + priv->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; + priv->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; + priv->PHYRegDef[RF90_PATH_C].rfHSSIPara2 = rFPGA0_XC_HSSIParameter2; + priv->PHYRegDef[RF90_PATH_D].rfHSSIPara2 = rFPGA0_XD_HSSIParameter2; + + priv->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; + priv->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl; + priv->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl; + priv->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl; + + priv->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1; + priv->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1; + priv->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1; + priv->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1; + + priv->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2; + priv->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2; + priv->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2; + priv->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2; + + priv->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance; + priv->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance; + priv->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance; + priv->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance; + + priv->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE; + priv->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE; + priv->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE; + priv->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE; + + priv->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance; + priv->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance; + priv->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance; + priv->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance; + + priv->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE; + priv->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE; + priv->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE; + priv->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE; + + priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack; + priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack; + priv->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack; + priv->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack; + + priv->PHYRegDef[RF90_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback; + priv->PHYRegDef[RF90_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback; + +} + + +bool PHY_SetRFPowerState(struct net_device* dev, RT_RF_POWER_STATE eRFPowerState) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool bResult = false; + + RT_TRACE((COMP_PS | COMP_RF), "---------> PHY_SetRFPowerState(): eRFPowerState(%d)\n", eRFPowerState); + + if(eRFPowerState == priv->rtllib->eRFPowerState) + { + ; + return bResult; + } + + bResult = phy_SetRFPowerState8192SE(dev, eRFPowerState); + + RT_TRACE((COMP_PS | COMP_RF), "<--------- PHY_SetRFPowerState(): bResult(%d)\n", bResult); + + return bResult; +} + +static bool phy_SetRFPowerState8192SE(struct net_device* dev,RT_RF_POWER_STATE eRFPowerState) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + bool bResult = true; + u8 i, QueueID; + struct rtl8192_tx_ring *ring = NULL; + priv->SetRFPowerStateInProgress = true; + + switch(priv->rf_chip ) + { + default: + switch( eRFPowerState ) + { + case eRfOn: + RT_TRACE(COMP_PS,"========>%s():eRfOn\n", __func__); + { + if((priv->rtllib->eRFPowerState == eRfOff) && RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) + { + bool rtstatus = true; + u32 InitializeCount = 0; + do + { + InitializeCount++; + rtstatus = NicIFEnableNIC(dev); + }while( (rtstatus != true) &&(InitializeCount < 10) ); + if(rtstatus != true) + { + RT_TRACE(COMP_ERR,"%s():Initialize Adapter fail,return\n",__FUNCTION__); + priv->SetRFPowerStateInProgress = false; + return false; + } + RT_CLEAR_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + } + else + { + write_nic_word(dev, CMDR, 0x37FC); + write_nic_byte(dev, TXPAUSE, 0x00); + write_nic_byte(dev, PHY_CCA, 0x3); + } + +#if 1 + if(priv->rtllib->state == RTLLIB_LINKED) + { + LedControl8192SE(dev, LED_CTL_LINK); + } + else + { + LedControl8192SE(dev, LED_CTL_NO_LINK); + } +#endif + } + break; + case eRfOff: + RT_TRACE(COMP_PS,"========>%s():eRfOff\n", __func__); + { + for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; ) + { + ring = &priv->tx_ring[QueueID]; + if(skb_queue_len(&ring->queue) == 0) + { + QueueID++; + continue; + } + #ifdef TO_DO_LIST + #if( DEV_BUS_TYPE==PCI_INTERFACE) + else if(IsLowPowerState(Adapter)) + { + RT_TRACE(COMP_PS, DBG_LOUD, + ("eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID)); + break; + } + #endif + #endif + else + { + RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID); + udelay(10); + i++; + } + + if(i >= MAX_DOZE_WAITING_TIMES_9x) + { + RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID); + break; + } + } + + if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC && !RT_IN_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC)) + { + NicIFDisableNIC(dev); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); + if(priv->pwrdown && priv->rtllib->RfOffReason>= RF_CHANGE_BY_HW) + write_nic_byte(dev,0x03,0x31); + } + else if(!(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC)) + { + SET_RTL8192SE_RF_SLEEP(dev); + +#if 1 + if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS ) + { + LedControl8192SE(dev,LED_CTL_NO_LINK); + } + else + { + LedControl8192SE(dev, LED_CTL_POWER_OFF); + } +#endif + } + } + break; + + case eRfSleep: + RT_TRACE(COMP_PS,"========>%s():eRfSleep\n", __func__); + { + if(priv->rtllib->eRFPowerState == eRfOff) + break; + + for(QueueID = 0, i = 0; QueueID < MAX_TX_QUEUE; ) + { + ring = &priv->tx_ring[QueueID]; + if(skb_queue_len(&ring->queue) == 0) + { + QueueID++; + continue; + } + #ifdef TO_DO_LIST + #if( DEV_BUS_TYPE==PCI_INTERFACE) + else if(IsLowPowerState(Adapter)) + { + RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 but lower power state!\n", (i+1), QueueID); + break; + } + #endif + #endif + else + { + RT_TRACE(COMP_PS, "eRf Off/Sleep: %d times TcbBusyQueue[%d] !=0 before doze!\n", (i+1), QueueID); + udelay(10); + i++; + } + + if(i >= MAX_DOZE_WAITING_TIMES_9x) + { + RT_TRACE(COMP_PS, "\n\n\n %s(): eRfOff: %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", __FUNCTION__,MAX_DOZE_WAITING_TIMES_9x, QueueID); + break; + } + } + + SET_RTL8192SE_RF_SLEEP(dev); + } + break; + + default: + bResult = false; + RT_TRACE(COMP_ERR, "phy_SetRFPowerState8192S(): unknow state to set: 0x%X!!!\n", eRFPowerState); + break; + } + break; + } + + if(bResult) + { + priv->rtllib->eRFPowerState = eRFPowerState; + } + + priv->SetRFPowerStateInProgress = false; + + return bResult; +} + + +void +PHY_SwitchEphyParameter(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + write_nic_dword(dev, 0x540, 0x73c11); + write_nic_dword(dev, 0x548, 0x2407c); + + write_nic_word(dev, 0x550, 0x1000); + write_nic_byte(dev, 0x554, 0x20); + phy_CheckEphySwitchReady(dev); + + write_nic_word(dev, 0x550, 0xa0eb); + write_nic_byte(dev, 0x554, 0x3e); + phy_CheckEphySwitchReady(dev); + + write_nic_word(dev, 0x550, 0xff80); + write_nic_byte(dev, 0x554, 0x39); + phy_CheckEphySwitchReady(dev); + + if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS)) + write_nic_byte(dev, 0x560, 0x40); + else + write_nic_byte(dev, 0x560, 0x00); + +} + + + void +PHY_GetTxPowerLevel8192S( + struct net_device* dev, + long* powerlevel + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 TxPwrLevel = 0; + long TxPwrDbm; + + TxPwrLevel = priv->CurrentCckTxPwrIdx; + TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_B, TxPwrLevel); + + TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx + priv->LegacyHTTxPowerDiff; + + if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm) + TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_G, TxPwrLevel); + TxPwrLevel = priv->CurrentOfdm24GTxPwrIdx; + + if(phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm) + TxPwrDbm = phy_TxPwrIdxToDbm(dev, WIRELESS_MODE_N_24G, TxPwrLevel); + *powerlevel = TxPwrDbm; +} + +#if 1 +void getTxPowerIndex( + struct net_device* dev, + u8 channel, + u8* cckPowerLevel, + u8* ofdmPowerLevel + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 index = (channel -1); + cckPowerLevel[0] = priv->RfTxPwrLevelCck[0][index]; + cckPowerLevel[1] = priv->RfTxPwrLevelCck[1][index]; + + if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R) + { + ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm1T[0][index]; + ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm1T[1][index]; + } + else if (priv->rf_type == RF_2T2R) + { + ofdmPowerLevel[0] = priv->RfTxPwrLevelOfdm2T[0][index]; + ofdmPowerLevel[1] = priv->RfTxPwrLevelOfdm2T[1][index]; + } + RT_TRACE(COMP_POWER,"Channel-%d, set tx power index !!\n", channel); +} + +void ccxPowerIndexCheck( + struct net_device* dev, + u8 channel, + u8* cckPowerLevel, + u8* ofdmPowerLevel + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + +#ifdef TODO + if( priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr && + channel == priv->rtllib->current_network.channel) + { + u8 CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr); + u8 LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr); + u8 OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr); + + RT_TRACE(COMP_TXAGC, + "CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", + priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx); + RT_TRACE(COMP_TXAGC, + "EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", + channel, cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]); + + if(cckPowerLevel[0] > CckCellPwrIdx) + cckPowerLevel[0] = CckCellPwrIdx; + if(ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx) + { + if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0) + { + ofdmPowerLevel[0] = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff; + } + else + { + ofdmPowerLevel[0] = 0; + } + } + + RT_TRACE(COMP_TXAGC, + "Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", + cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]); + } + +#endif + priv->CurrentCckTxPwrIdx = cckPowerLevel[0]; + priv->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0]; + + RT_TRACE(COMP_TXAGC, + "PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", + cckPowerLevel[0], ofdmPowerLevel[0] + priv->LegacyHTTxPowerDiff, ofdmPowerLevel[0]); + +} +/*----------------------------------------------------------------------------- + * Function: SetTxPowerLevel8190() + * + * Overview: This function is export to "HalCommon" moudule + * We must consider RF path later!!!!!!! + * + * Input: PADAPTER Adapter + * u1Byte channel + * + * Output: NONE + * + * Return: NONE + * 2008/11/04 MHC We remove EEPROM_93C56. + * We need to move CCX relative code to independet file. + * 2009/01/21 MHC Support new EEPROM format from SD3 requirement. + * + *---------------------------------------------------------------------------*/ +void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 cckPowerLevel[2], ofdmPowerLevel[2]; + + if(priv->bTXPowerDataReadFromEEPORM == false) + return; + getTxPowerIndex(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]); + RT_TRACE(COMP_POWER, "Channel-%d, cckPowerLevel (A / B) = 0x%x / 0x%x, ofdmPowerLevel (A / B) = 0x%x / 0x%x\n", + channel, cckPowerLevel[0], cckPowerLevel[1], ofdmPowerLevel[0], ofdmPowerLevel[1]); + + ccxPowerIndexCheck(dev, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]); + + switch(priv->rf_chip) + { + case RF_8225: + break; + + case RF_8256: + ; + break; + + case RF_6052: + PHY_RF6052SetCckTxPower(dev, cckPowerLevel[0]); + PHY_RF6052SetOFDMTxPower(dev, &ofdmPowerLevel[0], channel); + break; + + case RF_8258: + break; + default: + break; + } +} +#else +void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 powerlevel = (u8)EEPROM_Default_TxPower, powerlevelOFDM24G = 0x10; + s8 ant_pwr_diff = 0; + u32 u4RegValue; + u8 index = (channel -1); + u8 pwrdiff[2] = {0}; + u8 ht20pwr[2] = {0}, ht40pwr[2] = {0}; + u8 rfpath = 0, rfpathnum = 2; + + if(priv->bTXPowerDataReadFromEEPORM == false) + return; + + + powerlevel = priv->RfTxPwrLevelCck[0][index]; + + if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R) + { + powerlevelOFDM24G = priv->RfTxPwrLevelOfdm1T[0][index]; + + + rfpathnum = 1; + ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm1T[0][index]; + } + else if (priv->rf_type == RF_2T2R) + { + powerlevelOFDM24G = priv->RfTxPwrLevelOfdm2T[0][index]; + ant_pwr_diff = priv->RfTxPwrLevelOfdm2T[1][index] - + priv->RfTxPwrLevelOfdm2T[0][index]; + + RT_TRACE(COMP_POWER, "CH-%d HT40 A/B Pwr index = %x/%x(%d/%d)\n", + channel, priv->RfTxPwrLevelOfdm2T[0][index], + priv->RfTxPwrLevelOfdm2T[1][index], + priv->RfTxPwrLevelOfdm2T[0][index], + priv->RfTxPwrLevelOfdm2T[1][index]); + + ht20pwr[0] = ht40pwr[0] = priv->RfTxPwrLevelOfdm2T[0][index]; + ht20pwr[1] = ht40pwr[1] = priv->RfTxPwrLevelOfdm2T[1][index]; + } + RT_TRACE(COMP_POWER, "Channel-%d, set tx power index\n", channel); + + if (priv->eeprom_version >= 2) + { + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20) + { + for (rfpath = 0; rfpath < rfpathnum; rfpath++) + { + pwrdiff[rfpath] = priv->TxPwrHt20Diff[rfpath][index]; + + if (pwrdiff[rfpath] < 8) + { + ht20pwr[rfpath] += pwrdiff[rfpath]; + } + else + { + ht20pwr[rfpath] -= (16-pwrdiff[rfpath]); + } + } + + if (priv->rf_type == RF_2T2R) + ant_pwr_diff = ht20pwr[1] - ht20pwr[0]; + + RT_TRACE(COMP_POWER, "HT20 to HT40 pwrdiff[A/B]=%d/%d, ant_pwr_diff=%d(B-A=%d-%d)\n", + pwrdiff[0], pwrdiff[1], ant_pwr_diff, ht20pwr[1], ht20pwr[0]); + } + } + + if(ant_pwr_diff > 7) + ant_pwr_diff = 7; + if(ant_pwr_diff < -8) + ant_pwr_diff = -8; + + RT_TRACE(COMP_POWER, "CCK/HT Power index = %x/%x(%d/%d), ant_pwr_diff=%d\n", + powerlevel, powerlevelOFDM24G, powerlevel, powerlevelOFDM24G, ant_pwr_diff); + + ant_pwr_diff &= 0xf; + + priv->AntennaTxPwDiff[2] = 0; + priv->AntennaTxPwDiff[1] = 0; + priv->AntennaTxPwDiff[0] = (u8)(ant_pwr_diff); + RT_TRACE(COMP_POWER, "pHalData->AntennaTxPwDiff[0]/[1]/[2] = 0x%x/0x%x/0x%x\n", + priv->AntennaTxPwDiff[0], priv->AntennaTxPwDiff[1], priv->AntennaTxPwDiff[2]); + u4RegValue = ( priv->AntennaTxPwDiff[2]<<8 | + priv->AntennaTxPwDiff[1]<<4 | + priv->AntennaTxPwDiff[0] ); + RT_TRACE(COMP_POWER, "BCD-Diff=0x%x\n", u4RegValue); + + rtl8192_setBBreg(dev, rFPGA0_TxGainStage, (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue); + +#ifdef TODO + if( priv->rtllib->iw_mode != IW_MODE_INFRA && priv->bWithCcxCellPwr && + channel == priv->rtllib->current_network.channel) + { + u8 CckCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, priv->CcxCellPwr); + u8 LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_G, priv->CcxCellPwr); + u8 OfdmCellPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, priv->CcxCellPwr); + + RT_TRACE(COMP_TXAGC, + ("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", + priv->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx)); + RT_TRACE(COMP_TXAGC, + ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n", + channel, powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G)); + + if(powerlevel > CckCellPwrIdx) + powerlevel = CckCellPwrIdx; + if(powerlevelOFDM24G + priv->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx) + { + if((OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff) > 0) + { + powerlevelOFDM24G = OfdmCellPwrIdx - priv->LegacyHTTxPowerDiff; + } + else + { + powerlevelOFDM24G = 0; + } + } + + RT_TRACE(COMP_TXAGC, + ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", + powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G)); + } +#endif + priv->CurrentCckTxPwrIdx = powerlevel; + priv->CurrentOfdm24GTxPwrIdx = powerlevelOFDM24G; + + RT_TRACE(COMP_POWER, "PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n", + powerlevel, powerlevelOFDM24G + priv->LegacyHTTxPowerDiff, powerlevelOFDM24G); + + switch(priv->rf_chip) + { + case RF_8225: + break; + + case RF_8256: + break; + + case RF_6052: + PHY_RF6052SetCckTxPower(dev, powerlevel); + PHY_RF6052SetOFDMTxPower(dev, powerlevelOFDM24G, channel); + break; + + case RF_8258: + break; + default: + break; + } + +} +#endif + +bool PHY_UpdateTxPowerDbm8192S(struct net_device* dev, long powerInDbm) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 idx; + u8 rf_path; + + u8 CckTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_B, powerInDbm); + u8 OfdmTxPwrIdx = phy_DbmToTxPwrIdx(dev, WIRELESS_MODE_N_24G, powerInDbm); + + if(OfdmTxPwrIdx - priv->LegacyHTTxPowerDiff > 0) + OfdmTxPwrIdx -= priv->LegacyHTTxPowerDiff; + else + OfdmTxPwrIdx = 0; + + RT_TRACE(COMP_POWER, "PHY_UpdateTxPowerDbm8192S(): %ld dBm , CckTxPwrIdx = %d, OfdmTxPwrIdx = %d\n", powerInDbm, CckTxPwrIdx, OfdmTxPwrIdx); + + for(idx = 0; idx < 14; idx++) + { + priv->TxPowerLevelCCK[idx] = CckTxPwrIdx; + priv->TxPowerLevelCCK_A[idx] = CckTxPwrIdx; + priv->TxPowerLevelCCK_C[idx] = CckTxPwrIdx; + priv->TxPowerLevelOFDM24G[idx] = OfdmTxPwrIdx; + priv->TxPowerLevelOFDM24G_A[idx] = OfdmTxPwrIdx; + priv->TxPowerLevelOFDM24G_C[idx] = OfdmTxPwrIdx; + for (rf_path = 0; rf_path < 2; rf_path++) + { + priv->RfTxPwrLevelCck[rf_path][idx] = CckTxPwrIdx; + priv->RfTxPwrLevelOfdm1T[rf_path][idx] = + priv->RfTxPwrLevelOfdm2T[rf_path][idx] = OfdmTxPwrIdx; + } + } + + rtl8192_phy_setTxPower(dev, priv->chan); + + return true; +} + +extern void PHY_SetBeaconHwReg( struct net_device* dev, u16 BeaconInterval) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 NewBeaconNum; + + if(priv->pFirmware->FirmwareVersion >= 0x33) + { + write_nic_dword(dev,WFM5,0xF1000000|(BeaconInterval<<8)); + } + else + { + NewBeaconNum = BeaconInterval *32 - 64; + write_nic_dword(dev, WFM3+4, NewBeaconNum); + write_nic_dword(dev, WFM3, 0xB026007C); +} +} + +static u8 phy_DbmToTxPwrIdx( + struct net_device* dev, + WIRELESS_MODE WirelessMode, + long PowerInDbm + ) +{ + u8 TxPwrIdx = 0; + long Offset = 0; + + + switch(WirelessMode) + { + case WIRELESS_MODE_B: + Offset = -7; + break; + + case WIRELESS_MODE_G: + Offset = -8; + break; + + case WIRELESS_MODE_N_24G: + default: + Offset = -8; + break; + } + + if((PowerInDbm - Offset) > 0) + { + TxPwrIdx = (u8)((PowerInDbm - Offset) * 2); + } + else + { + TxPwrIdx = 0; + } + + if(TxPwrIdx > MAX_TXPWR_IDX_NMODE_92S) + TxPwrIdx = MAX_TXPWR_IDX_NMODE_92S; + + return TxPwrIdx; +} + +static long phy_TxPwrIdxToDbm( + struct net_device* dev, + WIRELESS_MODE WirelessMode, + u8 TxPwrIdx + ) +{ + long Offset = 0; + long PwrOutDbm = 0; + + switch(WirelessMode) + { + case WIRELESS_MODE_B: + Offset = -7; + break; + + case WIRELESS_MODE_G: + case WIRELESS_MODE_N_24G: + Offset = -8; + break; + default: + Offset = -8; + break; + } + + PwrOutDbm = TxPwrIdx / 2 + Offset; + + return PwrOutDbm; +} + +#ifdef TO_DO_LIST +extern void +PHY_ScanOperationBackup8192S( + struct net_device* dev, + u8 Operation + ) +{ +#if(RTL8192S_DISABLE_FW_DM == 0) + + if(!Adapter->bDriverStopped) + { + switch(Operation) + { + case SCAN_OPT_BACKUP: + Adapter->HalFunc.SetFwCmdHandler(Adapter, FW_CMD_PAUSE_DM_BY_SCAN); + break; + + case SCAN_OPT_RESTORE: + Adapter->HalFunc.SetFwCmdHandler(Adapter, FW_CMD_RESUME_DM_BY_SCAN); + break; + + default: + RT_TRACE(COMP_SCAN, DBG_LOUD, ("Unknown Scan Backup Operation. \n")); + break; + } + } +#endif +} +#endif +void PHY_SetBWModeCallback8192S(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 regBwOpMode, regRRSR_RSC; + + + + RT_TRACE(COMP_SWBW, "==>SetBWModeCallback8192s() Switch to %s bandwidth\n", \ + priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"); + + if(priv->rf_chip == RF_PSEUDO_11N) + { + priv->SetBWModeInProgress= false; + return; + } + if(IS_NIC_DOWN(priv)){ + priv->SwChnlInProgress = priv->SetBWModeInProgress = false; + return; + } + + regBwOpMode = read_nic_byte(dev, BW_OPMODE); + regRRSR_RSC = read_nic_byte(dev, RRSR+2); + + switch(priv->CurrentChannelBW) + { + case HT_CHANNEL_WIDTH_20: + regBwOpMode |= BW_OPMODE_20MHZ; + write_nic_byte(dev, BW_OPMODE, regBwOpMode); + break; + + case HT_CHANNEL_WIDTH_20_40: + regBwOpMode &= ~BW_OPMODE_20MHZ; + write_nic_byte(dev, BW_OPMODE, regBwOpMode); + + break; + + default: + RT_TRACE(COMP_DBG, "SetBWModeCallback8192s():\ + unknown Bandwidth: %#X\n",priv->CurrentChannelBW); + break; + } + + switch(priv->CurrentChannelBW) + { + case HT_CHANNEL_WIDTH_20: + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0); + rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0); + + if(priv->card_8192_version >= VERSION_8192S_BCUT) + write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x58); + break; + + case HT_CHANNEL_WIDTH_20_40: + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1); + rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1); + + + rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, (priv->nCur40MhzPrimeSC>>1)); + rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, priv->nCur40MhzPrimeSC); + + if(priv->card_8192_version >= VERSION_8192S_BCUT) + write_nic_byte(dev, rFPGA0_AnalogParameter2, 0x18); + break; + + default: + RT_TRACE(COMP_DBG, "SetBWModeCallback8192s(): unknown Bandwidth: %#X\n"\ + ,priv->CurrentChannelBW); + break; + + } + + + switch( priv->rf_chip ) + { + case RF_8225: + break; + + case RF_8256: + break; + + case RF_8258: + break; + + case RF_PSEUDO_11N: + break; + + case RF_6052: + PHY_RF6052SetBandwidth(dev, priv->CurrentChannelBW); + break; + default: + printk("Unknown rf_chip: %d\n", priv->rf_chip); + break; + } + + priv->SetBWModeInProgress= false; + + RT_TRACE(COMP_SWBW, "<==SetBWModeCallback8192s() \n" ); +} + + +void rtl8192_SetBWMode(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + + + + + if(priv->SetBWModeInProgress) + return; + + priv->SetBWModeInProgress= true; + + priv->CurrentChannelBW = Bandwidth; + + if(Offset==HT_EXTCHNL_OFFSET_LOWER) + priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER; + else if(Offset==HT_EXTCHNL_OFFSET_UPPER) + priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER; + else + priv->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE; + +#if 0 + if(!priv->bDriverStopped) + { +#ifdef USE_WORKITEM + PlatformScheduleWorkItem(&(priv->SetBWModeWorkItem)); +#else + PlatformSetTimer(dev, &(priv->SetBWModeTimer), 0); +#endif + } +#endif + if(!IS_NIC_DOWN(priv)){ + PHY_SetBWModeCallback8192S(dev); + } else { + priv->SetBWModeInProgress= false; + } +} + +void PHY_SwChnlCallback8192S(struct net_device *dev) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + u32 delay; + + RT_TRACE(COMP_CH, "==>SwChnlCallback8190Pci(), switch to channel %d\n", priv->chan); + + if(IS_NIC_DOWN(priv)) + { + printk("%s: driver is not up\n", __FUNCTION__); + priv->SwChnlInProgress = priv->SetBWModeInProgress = false; + return; + } + if(priv->rf_chip == RF_PSEUDO_11N) + { + printk("%s: rt chip is RF_PSEUDO_11N\n", __FUNCTION__); + priv->SwChnlInProgress=false; + return; + } + + do{ + if(!priv->SwChnlInProgress) + break; + + if(!phy_SwChnlStepByStep(dev, priv->chan, &priv->SwChnlStage, &priv->SwChnlStep, &delay)) + { + if(delay>0) + { + mdelay(delay); + } + else + continue; + } + else + { + priv->SwChnlInProgress=false; + break; + } + }while(true); +} + +u8 rtl8192_phy_SwChnl(struct net_device* dev, u8 channel) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(IS_NIC_DOWN(priv)) + { + printk("%s: driver is not up.\n",__FUNCTION__); + priv->SwChnlInProgress = priv->SetBWModeInProgress = false; + return false; + } + if(priv->SwChnlInProgress){ + printk("%s: SwChnl is in progress\n",__FUNCTION__); + return false; + } + + if(priv->SetBWModeInProgress){ + printk("%s: Set BWMode is in progress\n",__FUNCTION__); + return false; + } + if (0) + { + u8 path; + for(path=0; path<2; path++){ + printk("============>to set channel:%x\n", rtl8192_phy_QueryRFReg(dev, path, 0x18, 0x3ff)); + udelay(10); + } + } + switch(priv->rtllib->mode) + { + case WIRELESS_MODE_A: + case WIRELESS_MODE_N_5G: + if (channel<=14){ + RT_TRACE(COMP_ERR, "WIRELESS_MODE_A but channel<=14"); + return false; + } + break; + + case WIRELESS_MODE_B: + if (channel>14){ + RT_TRACE(COMP_ERR, "WIRELESS_MODE_B but channel>14"); + return false; + } + break; + + case WIRELESS_MODE_G: + case WIRELESS_MODE_N_24G: + if (channel>14){ + RT_TRACE(COMP_ERR, "WIRELESS_MODE_G but channel>14"); + return false; + } + break; + + default: + break; + } + + priv->SwChnlInProgress = true; + if( channel == 0) + channel = 1; + + priv->chan=channel; + + priv->SwChnlStage=0; + priv->SwChnlStep=0; + +#if 0 + if(!dev->bDriverStopped) + { +#ifdef USE_WORKITEM + PlatformScheduleWorkItem(&(priv->SwChnlWorkItem)); +#else + PlatformSetTimer(dev, &(priv->SwChnlTimer), 0); +#endif + } +#endif + + if(!IS_NIC_DOWN(priv)){ + PHY_SwChnlCallback8192S(dev); + } else { + priv->SwChnlInProgress = false; + } + return true; +} + + +void PHY_SwChnlPhy8192S( + struct net_device* dev, + u8 channel + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + RT_TRACE(COMP_SCAN, "==>PHY_SwChnlPhy8192S(), switch to channel %d.\n", priv->chan); + +#ifdef TO_DO_LIST + if(RT_CANNOT_IO(dev)) + return; +#endif + + if(priv->SwChnlInProgress) + return; + + if(priv->rf_chip == RF_PSEUDO_11N) + { + priv->SwChnlInProgress=false; + return; + } + + priv->SwChnlInProgress = true; + if( channel == 0) + channel = 1; + + priv->chan=channel; + + priv->SwChnlStage = 0; + priv->SwChnlStep = 0; + + phy_FinishSwChnlNow(dev,channel); + + priv->SwChnlInProgress = false; +} + +static bool +phy_SwChnlStepByStep( + struct net_device* dev, + u8 channel, + u8 *stage, + u8 *step, + u32 *delay + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT]; + u32 PreCommonCmdCnt; + SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT]; + u32 PostCommonCmdCnt; + SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT]; + u32 RfDependCmdCnt; + SwChnlCmd *CurrentCmd = NULL; + u8 eRFPath; + u16 u2Channel = 0; + + RT_TRACE(COMP_CH, "===========>%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step); + if (!IsLegalChannel(priv->rtllib, channel)) + { + RT_TRACE(COMP_ERR, "=============>set to illegal channel:%d\n", channel); + return true; + } + + + PreCommonCmdCnt = 0; + phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT, + CmdID_SetTxPowerLevel, 0, 0, 0); + phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT, + CmdID_End, 0, 0, 0); + + PostCommonCmdCnt = 0; + + phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT, + CmdID_End, 0, 0, 0); + + RfDependCmdCnt = 0; + switch( priv->rf_chip ) + { + case RF_8225: + if (channel < 1 || channel > 14) + RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel); + phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, + CmdID_RF_WriteReg, rRfChannel, channel, 10); + phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, + CmdID_End, 0, 0, 0); + break; + + case RF_8256: + if (channel < 1 || channel > 14) + RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel); + phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, + CmdID_RF_WriteReg, rRfChannel, channel, 10); + phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, + CmdID_End, 0, 0, 0); + break; + + case RF_6052: + if (channel < 1 || channel > 14) + RT_TRACE(COMP_ERR, "illegal channel for zebra:%d\n", channel); + + u2Channel = channel; + + switch(priv->CurrentChannelBW) + { + case HT_CHANNEL_WIDTH_20: + u2Channel |= BIT10; + break; + + case HT_CHANNEL_WIDTH_20_40: + u2Channel &= ~BIT10; + break; + default: + u2Channel |= BIT10; + break; + } + u2Channel |= BIT12|BIT13|BIT14; + + phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, + CmdID_RF_WriteReg, RF_CHNLBW, u2Channel, 10); + phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, + CmdID_End, 0, 0, 0); + break; + + case RF_8258: + break; + + default: + return false; + break; + } + + + do{ + switch(*stage) + { + case 0: + CurrentCmd=&PreCommonCmd[*step]; + break; + case 1: + CurrentCmd=&RfDependCmd[*step]; + break; + case 2: + CurrentCmd=&PostCommonCmd[*step]; + break; + } + + if(CurrentCmd->CmdID==CmdID_End) + { + if((*stage)==2) + { + return true; + } + else + { + (*stage)++; + (*step)=0; + continue; + } + } + + switch(CurrentCmd->CmdID) + { + case CmdID_SetTxPowerLevel: +#ifndef CONFIG_MP + rtl8192_phy_setTxPower(dev,channel); +#endif + break; + case CmdID_WritePortUlong: + write_nic_dword(dev, CurrentCmd->Para1, CurrentCmd->Para2); + break; + case CmdID_WritePortUshort: + write_nic_word(dev, CurrentCmd->Para1, (u16)CurrentCmd->Para2); + break; + case CmdID_WritePortUchar: + write_nic_byte(dev, CurrentCmd->Para1, (u8)CurrentCmd->Para2); + break; + case CmdID_RF_WriteReg: + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + if (IS_HARDWARE_TYPE_8192SE(dev)) { +#ifdef CONFIG_FW_SETCHAN + u32 rf_bw = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | (CurrentCmd->Para2 & 0xFF00)); +#endif + priv->RfRegChnlVal[eRFPath] = ((priv->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2); + +#ifdef CONFIG_FW_SETCHAN + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, rf_bw); +#else + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, priv->RfRegChnlVal[eRFPath]); +#endif + } else { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2)); + } + } + break; + default: + break; + } + + break; + }while(true); + + (*delay)=CurrentCmd->msDelay; + (*step)++; + RT_TRACE(COMP_CH, "<===========%s(), channel:%d, stage:%d, step:%d\n", __FUNCTION__, channel, *stage, *step); + return false; +} + +static bool +phy_SetSwChnlCmdArray( + SwChnlCmd* CmdTable, + u32 CmdTableIdx, + u32 CmdTableSz, + SwChnlCmdID CmdID, + u32 Para1, + u32 Para2, + u32 msDelay + ) +{ + SwChnlCmd* pCmd; + + if(CmdTable == NULL) + { + return false; + } + if(CmdTableIdx >= CmdTableSz) + { + return false; + } + + pCmd = CmdTable + CmdTableIdx; + pCmd->CmdID = CmdID; + pCmd->Para1 = Para1; + pCmd->Para2 = Para2; + pCmd->msDelay = msDelay; + + return true; +} + +static void +phy_FinishSwChnlNow( + struct net_device* dev, + u8 channel + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 delay; + + while(!phy_SwChnlStepByStep(dev,channel,&priv->SwChnlStage,&priv->SwChnlStep,&delay)) + { + if(delay>0) + mdelay(delay); + if(IS_NIC_DOWN(priv)) + break; + } +} + + +u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev, u32 eRFPath) +{ + bool rtValue = true; + +#if 0 + if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A) + { + rtValue = false; + } + if (priv->rf_type == RF_1T2R && eRFPath != RF90_PATH_A) + { + + } +#endif + return rtValue; + +} /* PHY_CheckIsLegalRfPath8192S */ + + + +void +PHY_IQCalibrate( struct net_device* dev) +{ + u32 i, reg; + u32 old_value; + long X, Y, TX0[4]; + u32 TXA[4]; + + + for (i = 0; i < 10; i++) + { + rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430); + udelay(5); + rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4); + udelay(5); + rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000); + udelay(5); + rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140148); + udelay(5); + rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604a2); + udelay(5); + rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1); + udelay(5); + rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x0214014d); + udelay(5); + rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x281608ba); + udelay(5); + rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x000028d1); + udelay(5); + rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000001); + udelay(5); + rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000001); + udelay(2000); + rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433); + udelay(5); + rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4); + udelay(5); + rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0); + + + reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord); + + if (!(reg&(BIT27|BIT28|BIT30|BIT31))) + { + old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF); + + X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16; + TXA[RF90_PATH_A] = (X * old_value)/0x100; + reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord); + reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A]; + rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg); + udelay(5); + + Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16; + TX0[RF90_PATH_C] = ((Y * old_value)/0x100); + reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord); + reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16); + rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg); + reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord); + reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28); + rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg); + udelay(5); + + reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord); + X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16; + reg = (reg & 0xFFFFFC00) |X; + rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg); + Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16; + reg = (reg & 0xFFFF03FF) |Y<<10; + rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg); + udelay(5); + old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF); + + X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16; + reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord); + TXA[RF90_PATH_A] = (X * old_value) / 0x100; + reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A]; + rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg); + udelay(5); + + Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16; + TX0[RF90_PATH_C] = ((Y * old_value)/0x100); + reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord); + reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16); + rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg); + reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord); + reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28); + rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg); + udelay(5); + + reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord); + X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16; + reg = (reg & 0xFFFFFC00) |X; + rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg); + + Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16; + reg = (reg & 0xFFFF03FF) |Y<<10; + rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg); + udelay(5); + + RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n"); + break; + } + + } + + + + +} + +extern void PHY_IQCalibrateBcut(struct net_device* dev) +{ + u32 i, reg; + u32 old_value; + long X, Y, TX0[4]; + u32 TXA[4]; + u32 calibrate_set[13] = {0}; + u32 load_value[13]; + u8 RfPiEnable=0; + + /* + 0xee0[31:0]=0x3fed92fb; + 0xedc[31:0] =0x3fed92fb; + 0xe70[31:0] =0x3fed92fb; + 0xe74[31:0] =0x3fed92fb; + 0xe78[31:0] =0x3fed92fb; + 0xe7c[31:0]= 0x3fed92fb; + 0xe80[31:0]= 0x3fed92fb; + 0xe84[31:0]= 0x3fed92fb; + 0xe88[31:0]= 0x3fed92fb; + 0xe8c[31:0]= 0x3fed92fb; + 0xed0[31:0]= 0x3fed92fb; + 0xed4[31:0]= 0x3fed92fb; + 0xed8[31:0]= 0x3fed92fb; + */ + calibrate_set [0] = 0xee0; + calibrate_set [1] = 0xedc; + calibrate_set [2] = 0xe70; + calibrate_set [3] = 0xe74; + calibrate_set [4] = 0xe78; + calibrate_set [5] = 0xe7c; + calibrate_set [6] = 0xe80; + calibrate_set [7] = 0xe84; + calibrate_set [8] = 0xe88; + calibrate_set [9] = 0xe8c; + calibrate_set [10] = 0xed0; + calibrate_set [11] = 0xed4; + calibrate_set [12] = 0xed8; + for (i = 0; i < 13; i++) + { + load_value[i] = rtl8192_QueryBBReg(dev, calibrate_set[i], bMaskDWord); + rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, 0x3fed92fb); + + } + + RfPiEnable = (u8)rtl8192_QueryBBReg(dev, rFPGA0_XA_HSSIParameter1, BIT8); + for (i = 0; i < 10; i++) + { + RT_TRACE(COMP_INIT, "IQK -%d\n", i); + if (!RfPiEnable) + { + rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000100); + rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000100); + } + + rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05430); + udelay(5); + rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000800e4); + udelay(5); + rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x80800000); + udelay(5); + rtl8192_setBBreg(dev, 0xe40, bMaskDWord, 0x02140102); + udelay(5); + rtl8192_setBBreg(dev, 0xe44, bMaskDWord, 0x681604c2); + udelay(5); + rtl8192_setBBreg(dev, 0xe4c, bMaskDWord, 0x000028d1); + udelay(5); + rtl8192_setBBreg(dev, 0xe60, bMaskDWord, 0x02140102); + udelay(5); + rtl8192_setBBreg(dev, 0xe64, bMaskDWord, 0x28160d05); + udelay(5); + rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000); + udelay(5); + rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000); + udelay(5); + + udelay(2000); + + rtl8192_setBBreg(dev, 0xe6c, bMaskDWord, 0x020028d1); + udelay(5); + rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xfb000000); + udelay(5); + rtl8192_setBBreg(dev, 0xe48, bMaskDWord, 0xf8000000); + + udelay(2000); + + rtl8192_setBBreg(dev, 0xc04, bMaskDWord, 0x00a05433); + udelay(5); + rtl8192_setBBreg(dev, 0xc08, bMaskDWord, 0x000000e4); + udelay(5); + rtl8192_setBBreg(dev, 0xe28, bMaskDWord, 0x0); + + if (!RfPiEnable) + { + rtl8192_setBBreg(dev, 0x820, bMaskDWord, 0x01000000); + rtl8192_setBBreg(dev, 0x828, bMaskDWord, 0x01000000); + } + + + reg = rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord); + + if (!(reg&(BIT27|BIT28|BIT30|BIT31))) + { + old_value = (rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord) & 0x3FF); + + X = (rtl8192_QueryBBReg(dev, 0xe94, bMaskDWord) & 0x03FF0000)>>16; + TXA[RF90_PATH_A] = (X * old_value)/0x100; + reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord); + reg = (reg & 0xFFFFFC00) | (u32)TXA[RF90_PATH_A]; + rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg); + udelay(5); + + Y = ( rtl8192_QueryBBReg(dev, 0xe9C, bMaskDWord) & 0x03FF0000)>>16; + TX0[RF90_PATH_C] = ((Y * old_value)/0x100); + reg = rtl8192_QueryBBReg(dev, 0xc80, bMaskDWord); + reg = (reg & 0xffc0ffff) |((u32) (TX0[RF90_PATH_C]&0x3F)<<16); + rtl8192_setBBreg(dev, 0xc80, bMaskDWord, reg); + reg = rtl8192_QueryBBReg(dev, 0xc94, bMaskDWord); + reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28); + rtl8192_setBBreg(dev, 0xc94, bMaskDWord, reg); + udelay(5); + + reg = rtl8192_QueryBBReg(dev, 0xc14, bMaskDWord); + X = (rtl8192_QueryBBReg(dev, 0xea4, bMaskDWord) & 0x03FF0000)>>16; + reg = (reg & 0xFFFFFC00) |X; + rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg); + Y = (rtl8192_QueryBBReg(dev, 0xeac, bMaskDWord) & 0x003F0000)>>16; + reg = (reg & 0xFFFF03FF) |Y<<10; + rtl8192_setBBreg(dev, 0xc14, bMaskDWord, reg); + udelay(5); + old_value = (rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord) & 0x3FF); + + X = (rtl8192_QueryBBReg(dev, 0xeb4, bMaskDWord) & 0x03FF0000)>>16; + reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord); + TXA[RF90_PATH_A] = (X * old_value) / 0x100; + reg = (reg & 0xFFFFFC00) | TXA[RF90_PATH_A]; + rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg); + udelay(5); + + Y = (rtl8192_QueryBBReg(dev, 0xebc, bMaskDWord)& 0x03FF0000)>>16; + TX0[RF90_PATH_C] = ((Y * old_value)/0x100); + reg = rtl8192_QueryBBReg(dev, 0xc88, bMaskDWord); + reg = (reg & 0xffc0ffff) |( (TX0[RF90_PATH_C]&0x3F)<<16); + rtl8192_setBBreg(dev, 0xc88, bMaskDWord, reg); + reg = rtl8192_QueryBBReg(dev, 0xc9c, bMaskDWord); + reg = (reg & 0x0fffffff) |(((Y&0x3c0)>>6)<<28); + rtl8192_setBBreg(dev, 0xc9c, bMaskDWord, reg); + udelay(5); + + reg = rtl8192_QueryBBReg(dev, 0xc1c, bMaskDWord); + X = (rtl8192_QueryBBReg(dev, 0xec4, bMaskDWord) & 0x03FF0000)>>16; + reg = (reg & 0xFFFFFC00) |X; + rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg); + + Y = (rtl8192_QueryBBReg(dev, 0xecc, bMaskDWord) & 0x003F0000)>>16; + reg = (reg & 0xFFFF03FF) |Y<<10; + rtl8192_setBBreg(dev, 0xc1c, bMaskDWord, reg); + udelay(5); + + RT_TRACE(COMP_INIT, "PHY_IQCalibrate OK\n"); + break; + } + + } + + for (i = 0; i < 13; i++) + rtl8192_setBBreg(dev, calibrate_set[i], bMaskDWord, load_value[i]); + + + + + +} + +#define HalGetFirmwareVerison(priv) (priv->pFirmware->FirmwareVersion ) +bool rtl8192se_set_fw_cmd(struct net_device* dev, FW_CMD_IO_TYPE FwCmdIO) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 FwParam = FW_CMD_IO_PARA_QUERY(priv); + u16 FwCmdMap = FW_CMD_IO_QUERY(priv); + bool bPostProcessing = false; + + RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n", FwCmdIO, priv->SetFwCmdInProgress); + + + + + + RT_TRACE(COMP_CMD, "-->HalSetFwCmd8192S(): Set FW Cmd(%#x), SetFwCmdInProgress(%d)\n", + FwCmdIO, priv->SetFwCmdInProgress); + + do{ + + if(HalGetFirmwareVerison(priv) >= 0x35) + { + switch(FwCmdIO) + { + case FW_CMD_RA_REFRESH_N: + FwCmdIO = FW_CMD_RA_REFRESH_N_COMB; + break; + case FW_CMD_RA_REFRESH_BG: + FwCmdIO = FW_CMD_RA_REFRESH_BG_COMB; + break; + default: + break; + } + } + else + { + if((FwCmdIO == FW_CMD_IQK_ENABLE) || + (FwCmdIO == FW_CMD_RA_REFRESH_N) || + (FwCmdIO == FW_CMD_RA_REFRESH_BG)) + { + bPostProcessing = true; + break; + } + } + + if(HalGetFirmwareVerison(priv) >= 0x3E) + { + if(FwCmdIO == FW_CMD_CTRL_DM_BY_DRIVER) + FwCmdIO = FW_CMD_CTRL_DM_BY_DRIVER_NEW; + } + + + switch(FwCmdIO) + { + + case FW_CMD_RA_INIT: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] RA init!!\n"); + FwCmdMap |= FW_RA_INIT_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + FW_CMD_IO_CLR(priv, FW_RA_INIT_CTL); + break; + + case FW_CMD_DIG_DISABLE: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG disable!!\n"); + FwCmdMap &= ~FW_DIG_ENABLE_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + break; + + case FW_CMD_DIG_ENABLE: + case FW_CMD_DIG_RESUME: + if(!(priv->DMFlag & HAL_DM_DIG_DISABLE)) + { + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG enable or resume!!\n"); + FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_SS_CTL); + FW_CMD_IO_SET(priv, FwCmdMap); + } + break; + + case FW_CMD_DIG_HALT: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG halt!!\n"); + FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_SS_CTL); + FW_CMD_IO_SET(priv, FwCmdMap); + break; + + case FW_CMD_TXPWR_TRACK_THERMAL: + { + u8 ThermalVal = 0; + FwCmdMap |= FW_PWR_TRK_CTL; + FwParam &= FW_PWR_TRK_PARAM_CLR; + ThermalVal = priv->ThermalValue; + FwParam |= ((ThermalVal<<24) |(priv->ThermalMeter[0]<<16)); + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set TxPwr tracking!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam); + FW_CMD_PARA_SET(priv, FwParam); + FW_CMD_IO_SET(priv, FwCmdMap); + FW_CMD_IO_CLR(priv, FW_PWR_TRK_CTL); + } + break; + + case FW_CMD_RA_REFRESH_N_COMB: + FwCmdMap |= FW_RA_N_CTL; + FwCmdMap &= ~(FW_RA_BG_CTL |FW_RA_INIT_CTL); + FwParam &= FW_RA_PARAM_CLR; + if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)) + FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf); + FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4); + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in n mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam); + FW_CMD_PARA_SET(priv, FwParam); + FW_CMD_IO_SET(priv, FwCmdMap); + FW_CMD_IO_CLR(priv, FW_RA_N_CTL); + break; + + case FW_CMD_RA_REFRESH_BG_COMB: + FwCmdMap |= FW_RA_BG_CTL; + FwCmdMap &= ~(FW_RA_N_CTL|FW_RA_INIT_CTL); + FwParam &= FW_RA_PARAM_CLR; + if(!(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL)) + FwParam |= ((priv->rtllib->pHTInfo->IOTRaFunc)&0xf); + FwParam |= ((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<4); + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set RA/IOT Comb in BG mode!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam); + FW_CMD_PARA_SET(priv, FwParam); + FW_CMD_IO_SET(priv, FwCmdMap); + FW_CMD_IO_CLR(priv, FW_RA_BG_CTL); + break; + + case FW_CMD_IQK_ENABLE: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] IQK enable.\n"); + FwCmdMap |= FW_IQK_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + FW_CMD_IO_CLR(priv, FW_IQK_CTL); + break; + + case FW_CMD_CTRL_DM_BY_DRIVER_NEW: + RT_TRACE(COMP_CMD, "[FW CMD][New Version] Inform FW driver control some DM!! FwCmdMap(%#x), FwParam(%#x)\n", FwCmdMap, FwParam); + FwCmdMap |= FW_DRIVER_CTRL_DM_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + break; + + case FW_CMD_RESUME_DM_BY_SCAN: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Resume DM after scan.\n"); + FwCmdMap |= (FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL); + + if(priv->DMFlag & HAL_DM_DIG_DISABLE || !dm_digtable.dig_enable_flag) + FwCmdMap &= ~FW_DIG_ENABLE_CTL; + + if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) || + (priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) || + (priv->rtllib->bdynamic_txpower_enable == true)) + FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL; + + if( (dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_0) || + (dm_digtable.Dig_Ext_Port_Stage == DIG_EXT_PORT_STAGE_1)) + FwCmdMap &= ~FW_DIG_ENABLE_CTL; + + FW_CMD_IO_SET(priv, FwCmdMap); + bPostProcessing = true; + break; + + case FW_CMD_PAUSE_DM_BY_SCAN: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Pause DM before scan.\n"); + FwCmdMap &= ~(FW_DIG_ENABLE_CTL|FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL); + FW_CMD_IO_SET(priv, FwCmdMap); + bPostProcessing = true; + break; + + case FW_CMD_HIGH_PWR_DISABLE: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr disable!!\n"); + FwCmdMap &= ~FW_HIGH_PWR_ENABLE_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + bPostProcessing = true; + break; + + case FW_CMD_HIGH_PWR_ENABLE: + if(((priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER)==0) && + !(priv->DMFlag & HAL_DM_HIPWR_DISABLE) && + (priv->rtllib->bdynamic_txpower_enable != true)) + { + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set HighPwr enable!!\n"); + FwCmdMap |= (FW_HIGH_PWR_ENABLE_CTL|FW_SS_CTL); + FW_CMD_IO_SET(priv, FwCmdMap); + bPostProcessing = true; + } + break; + + case FW_CMD_DIG_MODE_FA: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to FA.\n"); + FwCmdMap |= FW_FA_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + break; + + case FW_CMD_DIG_MODE_SS: + RT_TRACE(COMP_CMD, "[FW CMD] [New Version] Set DIG Mode to SS.\n"); + FwCmdMap &= ~FW_FA_CTL; + FW_CMD_IO_SET(priv, FwCmdMap); + break; + + case FW_CMD_PAPE_CONTROL: + RT_TRACE(COMP_CMD, "[FW CMD] Set PAPE Control \n"); +#ifdef MERGE_TO_DO + if(pHalData->bt_coexist.BT_PapeCtrl) + { + RTPRINT(FBT, BT_TRACE, ("BT set PAPE Control to SW/HW dynamically. \n")); + FwCmdMap |= FW_PAPE_CTL_BY_SW_HW; + } + else +#endif + { + printk("BT set PAPE Control to SW\n"); + FwCmdMap &= ~FW_PAPE_CTL_BY_SW_HW; + } + FW_CMD_IO_SET(priv, FwCmdMap); + break; + + default: + bPostProcessing = true; + break; + } + }while(false); + + RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdMap(%#x)\n", priv->FwCmdIOMap); + RT_TRACE(COMP_CMD, "[FW CMD] Current FwCmdIOParam(%#x)\n", priv->FwCmdIOParam); + + if(bPostProcessing && !priv->SetFwCmdInProgress) + { + priv->SetFwCmdInProgress = true; + priv->CurrentFwCmdIO = FwCmdIO; + } + else + { + return false; + } + +#if 0 +#ifdef USE_WORKITEM + PlatformScheduleWorkItem(&(pHalData->FwCmdIOWorkItem)); +#else + PlatformSetTimer(Adapter, &(pHalData->SetFwCmdIOTimer), 0); +#endif +#endif + rtl8192_SetFwCmdIOCallback(dev); + return true; +} +void ChkFwCmdIoDone(struct net_device* dev) +{ + u16 PollingCnt = 10000; + u32 tmpValue; + + do + { + + udelay(10); + + tmpValue = read_nic_dword(dev, WFM5); + if(tmpValue == 0) + { + RT_TRACE(COMP_CMD, "[FW CMD] Set FW Cmd success!!\n"); + break; + } + else + { + RT_TRACE(COMP_CMD, "[FW CMD] Polling FW Cmd PollingCnt(%d)!!\n", PollingCnt); + } + }while( --PollingCnt ); + + if(PollingCnt == 0) + { + RT_TRACE(COMP_ERR, "[FW CMD] Set FW Cmd fail!!\n"); + } +} +void rtl8192_SetFwCmdIOCallback(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 input,CurrentAID = 0; + + if(IS_NIC_DOWN(priv)){ + RT_TRACE(COMP_CMD, "SetFwCmdIOTimerCallback(): driver is going to unload\n"); + return; + } + + RT_TRACE(COMP_CMD, "--->SetFwCmdIOTimerCallback(): Cmd(%#x), SetFwCmdInProgress(%d)\n", priv->CurrentFwCmdIO, priv->SetFwCmdInProgress); + + if(HalGetFirmwareVerison(priv) >= 0x34) + { + switch(priv->CurrentFwCmdIO) + { + case FW_CMD_RA_REFRESH_N: + priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_N_COMB; + break; + case FW_CMD_RA_REFRESH_BG: + priv->CurrentFwCmdIO = FW_CMD_RA_REFRESH_BG_COMB; + break; + default: + break; + } + } + + switch(priv->CurrentFwCmdIO) + { + + case FW_CMD_RA_RESET: + RT_TRACE(COMP_CMD, "[FW CMD] Set RA Reset!!\n"); + write_nic_dword(dev, WFM5, FW_RA_RESET); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_RA_ACTIVE: + RT_TRACE(COMP_CMD, "[FW CMD] Set RA Active!!\n"); + write_nic_dword(dev, WFM5, FW_RA_ACTIVE); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_RA_REFRESH_N: + RT_TRACE(COMP_CMD, "[FW CMD] Set RA n refresh!!\n"); + if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL) + input = FW_RA_REFRESH; + else + input = FW_RA_REFRESH | (priv->rtllib->pHTInfo->IOTRaFunc << 8); + write_nic_dword(dev, WFM5, input); + ChkFwCmdIoDone(dev); + write_nic_dword(dev, WFM5, FW_RA_ENABLE_RSSI_MASK); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_RA_REFRESH_BG: + RT_TRACE(COMP_CMD, "[FW CMD] Set RA BG refresh!!\n"); + write_nic_dword(dev, WFM5, FW_RA_REFRESH); + ChkFwCmdIoDone(dev); + write_nic_dword(dev, WFM5, FW_RA_DISABLE_RSSI_MASK); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_RA_REFRESH_N_COMB: + RT_TRACE(COMP_CMD, "[FW CMD] Set RA n Combo refresh!!\n"); + if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL) + input = FW_RA_IOT_N_COMB; + else + input = FW_RA_IOT_N_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8); + input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12); + RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in n mode!! input(%#x)\n", input); + write_nic_dword(dev, WFM5, input); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_RA_REFRESH_BG_COMB: + RT_TRACE(COMP_CMD, "[FW CMD] Set RA B/G Combo refresh!!\n"); + if(priv->rtllib->pHTInfo->IOTRaFunc & HT_IOT_RAFUNC_DISABLE_ALL) + input = FW_RA_IOT_BG_COMB; + else + input = FW_RA_IOT_BG_COMB | (((priv->rtllib->pHTInfo->IOTRaFunc)&0x0f) << 8); + input = input |((priv->rtllib->pHTInfo->IOTPeer & 0xf) <<12); + RT_TRACE(COMP_CMD, "[FW CMD] Set RA/IOT Comb in B/G mode!! input(%#x)\n", input); + write_nic_dword(dev, WFM5, input); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_IQK_ENABLE: + RT_TRACE(COMP_CMD, "[FW CMD] IQK Enable!!\n"); + write_nic_dword(dev, WFM5, FW_IQK_ENABLE); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_PAUSE_DM_BY_SCAN: + RT_TRACE(COMP_CMD, "[FW CMD] Pause DM by Scan!!\n"); + rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17); + rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17); + rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40); + break; + + case FW_CMD_RESUME_DM_BY_SCAN: + RT_TRACE(COMP_CMD, "[FW CMD] Resume DM by Scan!!\n"); + rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x83); + rtl8192_phy_setTxPower(dev, priv->rtllib->current_network.channel); + break; + + case FW_CMD_HIGH_PWR_DISABLE: + RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Disable!!\n"); + if(priv->DMFlag & HAL_DM_HIPWR_DISABLE) + break; + rtl8192_setBBreg(dev, rOFDM0_XAAGCCore1, bMaskByte0, 0x17); + rtl8192_setBBreg(dev, rOFDM0_XBAGCCore1, bMaskByte0, 0x17); + rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x40); + break; + + case FW_CMD_HIGH_PWR_ENABLE: + RT_TRACE(COMP_CMD, "[FW CMD] High Pwr Enable!!\n"); + if((priv->DMFlag & HAL_DM_HIPWR_DISABLE) || + (priv->rtllib->bdynamic_txpower_enable == true)) + break; + rtl8192_setBBreg(dev, rCCK0_CCA, bMaskByte2, 0x83); + break; + + case FW_CMD_LPS_ENTER: + RT_TRACE(COMP_CMD, "[FW CMD] Enter LPS mode!!\n"); + CurrentAID = priv->rtllib->assoc_id; + write_nic_dword(dev, WFM5, (FW_LPS_ENTER| ((CurrentAID|0xc000)<<8)) ); + ChkFwCmdIoDone(dev); + priv->rtllib->pHTInfo->IOTAction |= HT_IOT_ACT_DISABLE_EDCA_TURBO; + break; + + case FW_CMD_LPS_LEAVE: + RT_TRACE(COMP_CMD, "[FW CMD] Leave LPS mode!!\n"); + write_nic_dword(dev, WFM5, FW_LPS_LEAVE ); + ChkFwCmdIoDone(dev); + priv->rtllib->pHTInfo->IOTAction &= (~HT_IOT_ACT_DISABLE_EDCA_TURBO); + break; + + case FW_CMD_ADD_A2_ENTRY: + RT_TRACE(COMP_CMD, "[FW CMD] ADD A2 entry!!\n"); + write_nic_dword(dev, WFM5, FW_ADD_A2_ENTRY); + ChkFwCmdIoDone(dev); + break; + + case FW_CMD_CTRL_DM_BY_DRIVER: + RT_TRACE(COMP_CMD, "[FW CMD] Inform fw driver will do some dm at driver\n"); + write_nic_dword(dev, WFM5, FW_CTRL_DM_BY_DRIVER); + ChkFwCmdIoDone(dev); + break; + case FW_CMD_CHAN_SET: + input = FW_CHAN_SET | (((priv->chan)&0xff) << 8); + RT_TRACE(COMP_CMD, "[FW CMD] Inform fw to set channel to %x!!, input(%#x):\n", priv->chan,input); + write_nic_dword(dev, WFM5, input); + ChkFwCmdIoDone(dev); + break; + + default: + break; + } + + + ChkFwCmdIoDone(dev); + + + priv->SetFwCmdInProgress = false; + RT_TRACE(COMP_CMD, "<---SetFwCmdIOWorkItemCallback()\n"); +} + +static void +phy_CheckEphySwitchReady(struct net_device* dev) +{ + u32 delay = 100; + u8 regu1; + + regu1 = read_nic_byte(dev, 0x554); + while ((regu1 & BIT5) && (delay > 0)) + { + regu1 = read_nic_byte(dev, 0x554); + delay--; + udelay(50); + } + RT_TRACE(COMP_INIT, "regu1=%02x delay = %d\n", regu1, delay); + +} + +#ifdef TO_DO_LIST +void +HW_RadioGpioChk92SE( + IN PADAPTER pAdapter + ) +{ + PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); + u1Byte u1Tmp = 0; + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); + RT_RF_POWER_STATE eRfPowerStateToSet; + BOOLEAN bActuallySet = false; + +#if 0 + if (!RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3) && + pMgntInfo->RfOffReason != RF_CHANGE_BY_HW) + { + return; + } + + PlatformSwitchClkReq(pAdapter, 0x00); + + if (RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3)) + { + RT_LEAVE_D3(pAdapter, false); + RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3); + Power_DomainInit92SE(pAdapter); + } + + PlatformEFIOWrite1Byte(pAdapter, MAC_PINMUX_CFG, (GPIOMUX_EN | GPIOSEL_GPIO)); + + u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IO_SEL); + u1Tmp &= HAL_8192S_HW_GPIO_OFF_MASK; + PlatformEFIOWrite1Byte(pAdapter, GPIO_IO_SEL, u1Tmp); + + RT_TRACE(COMP_CMD, DBG_LOUD, + ("HW_RadioGpioChk92SE HW_RadioGpioChk92SE=%02x\n", HW_RadioGpioChk92SE)); + + u1Tmp = PlatformEFIORead1Byte(pAdapter, GPIO_IN); + + eRfPowerStateToSet = (u1Tmp & HAL_8192S_HW_GPIO_OFF_BIT) ? eRfOn : eRfOff; + + if( (pHalData->bHwRadioOff == true) && (eRfPowerStateToSet == eRfOn)) + { + RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE - HW Radio ON\n")); + pHalData->bHwRadioOff = false; + bActuallySet = true; + } + else if ( (pHalData->bHwRadioOff == false) && (eRfPowerStateToSet == eRfOff)) + { + RT_TRACE(COMP_RF, DBG_LOUD, ("HW_RadioGpioChk92SE - HW Radio OFF\n")); + pHalData->bHwRadioOff = true; + bActuallySet = true; + } + + if(bActuallySet) + { + pHalData->bHwRfOffAction = 1; + MgntActSet_RF_State(pAdapter, eRfPowerStateToSet, RF_CHANGE_BY_HW); + DrvIFIndicateCurrentPhyStatus(pAdapter); + + + { + PMP_ADAPTER pDevice = &(pAdapter->NdisAdapter); + if(pDevice->RegHwSwRfOffD3 == 1 || pDevice->RegHwSwRfOffD3 == 2) + (eRfPowerStateToSet == eRfOff) ? RT_ENABLE_ASPM(pAdapter) : RT_DISABLE_ASPM(pAdapter); + } + } + RT_TRACE(COMP_RF, DBG_TRACE, ("HW_RadioGpioChk92SE() <--------- \n")); +#endif +}/* HW_RadioGpioChk92SE */ +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg492.c @@ -0,0 +1,5610 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +/*Created on 2009/ 7/23, 5: 4*/ + +#ifdef RTL8192SE +#include "r8192S_hwimg.h" + +u8 Rtl8192SEFwImgArray[ImgArrayLength] = { +0x92,0x81,0x31,0x70,0x30,0x00,0x00,0x00,0x08,0x84,0x00,0x00,0x48,0xa4,0x00,0x00, +0x30,0x00,0x00,0x00,0xc0,0xa2,0x00,0x00,0x31,0x00,0x02,0x00,0x07,0x20,0x16,0x06, +0x92,0x81,0x01,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x7f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x1f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x25,0xb0,0x1a,0x3c,0x80,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c,0x80,0x00,0x7b,0x37, +0x00,0x00,0x5b,0xaf,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x37,0x00,0x80,0x1b,0x3c, +0x80,0x00,0x7b,0x37,0x00,0x00,0x5b,0xaf,0x00,0x80,0x1a,0x3c,0x44,0x7c,0x5a,0x27, +0x08,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0xa1,0xaf,0x08,0x00,0xa2,0xaf,0x0c,0x00,0xa3,0xaf,0x10,0x00,0xa4,0xaf, +0x14,0x00,0xa5,0xaf,0x18,0x00,0xa6,0xaf,0x1c,0x00,0xa7,0xaf,0x20,0x00,0xa8,0xaf, +0x24,0x00,0xa9,0xaf,0x28,0x00,0xaa,0xaf,0x2c,0x00,0xab,0xaf,0x30,0x00,0xac,0xaf, +0x34,0x00,0xad,0xaf,0x38,0x00,0xae,0xaf,0x3c,0x00,0xaf,0xaf,0x12,0x40,0x00,0x00, +0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40,0x40,0x00,0xb0,0xaf,0x44,0x00,0xb1,0xaf, +0x48,0x00,0xb2,0xaf,0x4c,0x00,0xb3,0xaf,0x50,0x00,0xb4,0xaf,0x54,0x00,0xb5,0xaf, +0x58,0x00,0xb6,0xaf,0x5c,0x00,0xb7,0xaf,0x60,0x00,0xb8,0xaf,0x64,0x00,0xb9,0xaf, +0x68,0x00,0xbc,0xaf,0x6c,0x00,0xbd,0xaf,0x70,0x00,0xbe,0xaf,0x74,0x00,0xbf,0xaf, +0x78,0x00,0xa8,0xaf,0x7c,0x00,0xa9,0xaf,0x80,0x00,0xaa,0xaf,0xac,0x1e,0x00,0x08, +0x21,0x20,0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x25,0xb0,0x06,0x3c,0x00,0x80,0x02,0x3c,0xe8,0xff,0xbd,0x27,0x18,0x03,0xc3,0x34, +0x00,0x03,0x42,0x24,0x14,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x42,0xb0,0x03,0x3c, +0x03,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x02,0x80,0x0a,0x3c,0x02,0x80,0x10,0x3c, +0xff,0x00,0x42,0x30,0x00,0x46,0x02,0x00,0x10,0x00,0x42,0x30,0x13,0x00,0x40,0x10, +0x03,0x46,0x08,0x00,0x24,0x7e,0x42,0x8d,0x68,0x15,0x05,0x26,0xe0,0x63,0xa4,0x94, +0x01,0x00,0x47,0x24,0x10,0x00,0x02,0x24,0xb0,0x03,0xc9,0x34,0x00,0x00,0x62,0xa0, +0x07,0x00,0x80,0x10,0x1c,0x03,0xc6,0x34,0xe4,0x63,0xa2,0x94,0xe0,0x63,0xa0,0xa4, +0xe4,0x63,0xa0,0xa4,0x00,0x00,0x04,0x24,0x00,0x00,0xc2,0xac,0x00,0x00,0x20,0xad, +0x01,0x00,0x82,0x24,0x24,0x7e,0x47,0xad,0xe0,0x63,0xa2,0xa4,0x12,0x00,0x00,0x05, +0x42,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x68,0x15,0x04,0x26,0x0c,0x4b,0x83,0x94,0x08,0x4b,0x85,0x94, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c, +0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34,0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4, +0x08,0x00,0xe0,0x03,0x08,0x4b,0x83,0xa4,0x80,0xff,0x03,0x24,0x03,0x00,0x42,0x34, +0x00,0x00,0x43,0xa0,0x64,0x10,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0x04,0x26, +0x0c,0x4b,0x83,0x94,0x08,0x4b,0x85,0x94,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x80,0x00,0x63,0x30,0x41,0xb0,0x02,0x3c,0x25,0x18,0x65,0x00,0x08,0x00,0x42,0x34, +0x18,0x00,0xbd,0x27,0x00,0x00,0x43,0xa4,0x08,0x00,0xe0,0x03,0x08,0x4b,0x83,0xa4, +0xff,0x00,0x84,0x30,0x0b,0x00,0x82,0x2c,0xff,0xff,0xe7,0x30,0x10,0x00,0xa8,0x93, +0x19,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00, +0x58,0x9f,0x63,0x24,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00, +0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x43,0xb0,0x02,0x3c,0x78,0x00,0x44,0x34, +0x07,0x00,0xe2,0x30,0x00,0x00,0x85,0xac,0x04,0x00,0x86,0xac,0x04,0x00,0x40,0x18, +0x00,0x00,0x00,0x00,0xf8,0xff,0xe2,0x30,0x08,0x00,0x42,0x24,0xff,0xff,0x47,0x30, +0x21,0x10,0xe8,0x00,0x00,0x80,0x03,0x3c,0x08,0x00,0x82,0xac,0x25,0x10,0x43,0x00, +0x08,0x00,0x82,0xac,0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x6c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c, +0x20,0x01,0x00,0x08,0x60,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08, +0x54,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x48,0x00,0x44,0x34, +0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x3c,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c, +0x20,0x01,0x00,0x08,0x30,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08, +0x24,0x00,0x44,0x34,0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x18,0x00,0x44,0x34, +0x43,0xb0,0x02,0x3c,0x20,0x01,0x00,0x08,0x0c,0x00,0x44,0x34,0x20,0x01,0x00,0x08, +0x43,0xb0,0x04,0x3c,0x01,0x00,0x02,0x24,0x25,0xb0,0x03,0x3c,0x04,0x20,0x82,0x00, +0x18,0x03,0x67,0x34,0x00,0x80,0x02,0x3c,0x43,0xb0,0x03,0x3c,0x34,0x05,0x46,0x24, +0x88,0x00,0x65,0x34,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0xff,0x42,0x30, +0x05,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x00,0x00,0xe6,0xac, +0x00,0x00,0xa2,0x94,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x30,0x24,0x10,0x44,0x00, +0xf4,0xff,0x40,0x1c,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x25,0xb0,0x08,0x3c,0x00,0x80,0x02,0x3c,0xc8,0xff,0xbd,0x27,0x18,0x03,0x03,0x35, +0x90,0x05,0x42,0x24,0x00,0x00,0x62,0xac,0x30,0x00,0xb6,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf,0x34,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf, +0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0x0c,0x00,0xf2,0x84,0x08,0x00,0xf5,0x8c, +0xff,0x00,0xc6,0x30,0x00,0x01,0x02,0x24,0x23,0x10,0x46,0x00,0xff,0xff,0x51,0x30, +0xd0,0x03,0x08,0x35,0xff,0x00,0x96,0x30,0x00,0x00,0x12,0xad,0x21,0xa0,0xa0,0x00, +0x21,0x30,0xc5,0x00,0x00,0x00,0x15,0xad,0x21,0x20,0xc0,0x02,0x21,0x28,0xa0,0x02, +0x21,0x38,0x20,0x02,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x23,0x18,0x51,0x02, +0xff,0xff,0x82,0x32,0x00,0x94,0x03,0x00,0x03,0x94,0x12,0x00,0xa6,0x01,0x00,0x08, +0x02,0x9a,0x02,0x00,0x28,0xb0,0x03,0x3c,0xc0,0x10,0x13,0x00,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x90,0x25,0xb0,0x10,0x3c,0x20,0x10,0x02,0x3c,0xff,0x00,0x93,0x30, +0x00,0x22,0x13,0x00,0xff,0xff,0x43,0x32,0x01,0x01,0x45,0x2a,0x21,0xa0,0x82,0x00, +0x21,0xa8,0xb1,0x02,0xd0,0x03,0x02,0x36,0x00,0x01,0x11,0x24,0x0b,0x88,0x65,0x00, +0x21,0x20,0xc0,0x02,0x00,0x00,0x53,0xac,0x4d,0x01,0x00,0x0c,0xb0,0x03,0x10,0x36, +0x21,0x30,0x80,0x02,0x21,0x20,0xc0,0x02,0x21,0x28,0xa0,0x02,0x21,0x38,0x20,0x02, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x23,0x18,0x51,0x02,0x00,0x94,0x03,0x00, +0x03,0x94,0x12,0x00,0x00,0x00,0x12,0xae,0xe2,0xff,0x40,0x1e,0x00,0x00,0x00,0x00, +0x34,0x00,0xbf,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0xc8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x25,0xb0,0x04,0x3c,0x20,0x00,0xb2,0xaf,0x68,0x15,0x52,0x24,0x00,0x80,0x02,0x3c, +0x18,0x03,0x83,0x34,0xc8,0x06,0x42,0x24,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf, +0x30,0x00,0xbf,0xaf,0x2c,0x00,0xb5,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x00,0x00,0x62,0xac,0xb0,0x03,0x93,0x34,0x21,0xa0,0x40,0x02,0xb4,0x64,0x42,0x8e, +0x20,0x65,0x50,0x8e,0x21,0x20,0x00,0x00,0x00,0x00,0x62,0xae,0xb8,0x64,0x42,0xae, +0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,0x20,0x65,0x44,0x8e, +0x24,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00, +0x0a,0x18,0x82,0x00,0x20,0x65,0x43,0xae,0x20,0x65,0x85,0x8e,0x00,0x00,0x00,0x00, +0x00,0x00,0x65,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32,0x25,0x80,0x02,0x02, +0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,0xff,0x00,0x15,0x24,0x21,0x20,0x00,0x00, +0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0x20,0x10,0x02,0x3c,0x20,0x00,0x07,0x24, +0x00,0x1a,0x11,0x00,0x21,0x18,0x62,0x00,0x05,0x00,0x35,0x12,0x21,0x30,0x60,0x00, +0x68,0x64,0x91,0xa2,0xb4,0x64,0x83,0xae,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x00,0x00,0x05,0x96,0x18,0x64,0x83,0x8e,0x2a,0xb0,0x02,0x3c,0x27,0x20,0x05,0x00, +0x01,0x00,0x46,0x34,0x21,0x10,0x65,0x00,0x2b,0x18,0x64,0x00,0x02,0x00,0x60,0x10, +0x00,0x00,0x00,0x00,0x18,0x64,0x82,0xae,0x04,0x00,0x04,0x8e,0x08,0x00,0x03,0x8e, +0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0x84,0x30,0x24,0x18,0x62,0x00, +0x00,0x26,0x04,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x00,0x40,0x04,0x3c,0xc0,0xff,0x02,0x24,0x25,0x18,0x64,0x00, +0x24,0x18,0x62,0x00,0x08,0x00,0x03,0xae,0x01,0x00,0x02,0x24,0x02,0x00,0x03,0x24, +0x00,0x00,0xc2,0xa0,0x00,0x00,0xc3,0xa0,0xbc,0xff,0x35,0x16,0x41,0xb0,0x03,0x3c, +0xfc,0x4a,0x82,0x8e,0x30,0x00,0xbf,0x8f,0x00,0x38,0x42,0x34,0x00,0x00,0x62,0xac, +0x2c,0x00,0xb5,0x8f,0xfc,0x4a,0x82,0xae,0x24,0x00,0xb3,0x8f,0x28,0x00,0xb4,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x38,0x00,0xbd,0x27,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,0xc0,0xff,0xbd,0x27, +0x18,0x03,0x83,0x34,0x54,0x08,0x42,0x24,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf, +0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x02,0x80,0x02,0x3c,0x68,0x15,0x52,0x24,0xb0,0x03,0x95,0x34,0x39,0x02,0x00,0x08, +0x21,0xf0,0x40,0x02,0x08,0x00,0x04,0xae,0x76,0x4b,0x82,0x92,0x00,0x00,0x00,0x00, +0x45,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c,0x09,0x00,0x42,0x34,0x01,0x00,0x03,0x24, +0x02,0x00,0x04,0x24,0x00,0x00,0x43,0xa0,0x00,0x00,0x44,0xa0,0x5a,0x00,0x36,0x12, +0x00,0x00,0x00,0x00,0xcc,0x64,0x42,0x8e,0x38,0x65,0x53,0x8e,0x01,0x00,0x04,0x24, +0x00,0x00,0xa2,0xae,0xd0,0x64,0x42,0xae,0x00,0x00,0xb3,0xae,0x4d,0x01,0x00,0x0c, +0x21,0xa0,0xc0,0x03,0x38,0x65,0x44,0x8e,0x3c,0x65,0x43,0x8e,0x20,0x00,0x84,0x24, +0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x38,0x65,0x43,0xae, +0x38,0x65,0xc5,0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0xa5,0xae,0x02,0x80,0x17,0x3c, +0xff,0xff,0x62,0x32,0x25,0x80,0x57,0x00,0x00,0x00,0xb0,0xae,0x0c,0x00,0x02,0x92, +0xff,0x00,0x16,0x24,0x01,0x00,0x04,0x24,0x00,0x00,0xa2,0xae,0x0c,0x00,0x11,0x92, +0x20,0x10,0x02,0x3c,0x20,0x00,0x07,0x24,0x00,0x1a,0x11,0x00,0x21,0x18,0x62,0x00, +0x05,0x00,0x36,0x12,0x21,0x30,0x60,0x00,0xcc,0x64,0xc3,0xaf,0x70,0x64,0xd1,0xa3, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x04,0x00,0x04,0x8e,0x08,0x00,0x03,0x8e, +0xff,0xe0,0x02,0x3c,0xff,0xff,0x42,0x34,0x1f,0x00,0x84,0x30,0x24,0x18,0x62,0x00, +0x00,0x26,0x04,0x00,0xff,0xdf,0x02,0x3c,0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0xc0,0xff,0x05,0x24, +0x82,0x11,0x03,0x00,0x24,0x20,0x65,0x00,0x01,0x00,0x42,0x30,0xbd,0xff,0x40,0x10, +0x04,0x00,0x84,0x34,0x08,0x00,0x03,0xae,0x76,0x4b,0x82,0x92,0x00,0x00,0x00,0x00, +0xbd,0xff,0x40,0x14,0x2a,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x01,0x00,0x03,0x24,0x76,0x4b,0x83,0xa2, +0x02,0x00,0x02,0x92,0x00,0x00,0x00,0x00,0x21,0x10,0x53,0x00,0xff,0xff,0x42,0x30, +0x25,0x10,0x57,0x00,0x02,0x00,0x43,0x94,0x00,0x00,0x00,0x00,0xff,0xc0,0x64,0x30, +0x00,0xc0,0x84,0x34,0xe3,0x18,0x00,0x0c,0x77,0x4b,0x83,0xa2,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,0x09,0x00,0x42,0x34, +0x01,0x00,0x03,0x24,0x02,0x00,0x04,0x24,0x00,0x00,0x43,0xa0,0x00,0x00,0x44,0xa0, +0xa8,0xff,0x36,0x16,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x68,0x15,0x62,0x24, +0xfc,0x4a,0x43,0x8c,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x38,0x63,0x34, +0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x83,0xac,0x08,0x00,0xe0,0x03, +0xfc,0x4a,0x43,0xac,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c,0xc0,0xff,0xbd,0x27, +0x18,0x03,0x83,0x34,0xa4,0x0a,0x42,0x24,0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf, +0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf, +0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x16,0x3c, +0x68,0x15,0xd3,0x26,0xb0,0x03,0x94,0x34,0x02,0x80,0x15,0x3c,0x21,0xb8,0x60,0x02, +0xc0,0x64,0x62,0x8e,0x2c,0x65,0x70,0x8e,0x01,0x00,0x04,0x24,0x00,0x00,0x82,0xae, +0xc4,0x64,0x62,0xae,0x00,0x00,0x90,0xae,0x4d,0x01,0x00,0x0c,0x21,0x88,0xe0,0x02, +0x2c,0x65,0x64,0x8e,0x30,0x65,0x63,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24, +0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x2c,0x65,0x63,0xae,0x2c,0x65,0xe5,0x8e, +0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32, +0x25,0x80,0x02,0x02,0x00,0x00,0x90,0xae,0x0c,0x00,0x02,0x92,0x00,0x00,0x00,0x00, +0x00,0x00,0x82,0xae,0x0c,0x00,0x12,0x92,0xff,0x00,0x02,0x24,0x0a,0x00,0x42,0x12, +0x00,0x1a,0x12,0x00,0x20,0x10,0x02,0x3c,0x21,0x18,0x62,0x00,0xc0,0x64,0xe3,0xae, +0x6c,0x64,0xf2,0xa2,0x21,0x30,0x60,0x00,0x01,0x00,0x04,0x24,0x20,0x00,0x07,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xf8,0x63,0x22,0x8e,0x04,0x00,0x03,0x8e, +0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x5d,0x00,0x40,0x14,0x1f,0x00,0x64,0x30, +0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00, +0x00,0x26,0x04,0x00,0x25,0x28,0x44,0x00,0x08,0x00,0x05,0xae,0xc2,0x11,0x05,0x00, +0x01,0x00,0x43,0x30,0x47,0x00,0x60,0x14,0x01,0x00,0x02,0x24,0x00,0x00,0x04,0x96, +0x1c,0x64,0x23,0x8e,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0x05,0x00,0x40,0x10, +0xff,0xdf,0x02,0x3c,0x21,0x10,0x64,0x00,0x1c,0x64,0x22,0xae,0x08,0x00,0x05,0x8e, +0xff,0xdf,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x28,0xa2,0x00,0x00,0x40,0x03,0x3c, +0x25,0x28,0xa3,0x00,0x82,0x11,0x05,0x00,0x01,0x00,0x42,0x30,0x03,0x00,0x40,0x14, +0xc0,0xff,0x02,0x24,0x24,0x10,0xa2,0x00,0x04,0x00,0x45,0x34,0x08,0x00,0x05,0xae, +0x68,0x15,0xc2,0x26,0x76,0x4b,0x44,0x90,0x01,0x00,0x03,0x24,0x3b,0x00,0x83,0x10, +0x7f,0xff,0x02,0x24,0x24,0x10,0xa2,0x00,0x08,0x00,0x02,0xae,0x68,0x15,0xc5,0x26, +0xc4,0x64,0xa2,0x8c,0x20,0x00,0x10,0x8e,0x00,0x80,0x03,0x3c,0x25,0x10,0x43,0x00, +0x2a,0xb0,0x03,0x3c,0x08,0x00,0x50,0xac,0x05,0x00,0x70,0x34,0x01,0x00,0x02,0x24, +0x02,0x00,0x03,0x24,0x00,0x00,0x02,0xa2,0x00,0x00,0x03,0xa2,0x2a,0x7e,0xa2,0x96, +0xff,0x00,0x03,0x24,0x01,0x00,0x42,0x24,0x2a,0x7e,0xa2,0xa6,0x2a,0x7e,0xa4,0x96, +0x25,0xb0,0x02,0x3c,0x66,0x03,0x42,0x34,0x00,0x00,0x44,0xa4,0x98,0xff,0x43,0x16, +0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x38,0x42,0x34, +0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x62,0xac,0x08,0x00,0xe0,0x03, +0xfc,0x4a,0xa2,0xac,0xc3,0xff,0x62,0x14,0xff,0xdf,0x02,0x3c,0x00,0x00,0x04,0x96, +0x18,0x64,0x23,0x8e,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0xbd,0xff,0x40,0x10, +0xff,0xdf,0x02,0x3c,0x21,0x10,0x64,0x00,0xff,0x02,0x00,0x08,0x18,0x64,0x22,0xae, +0x08,0x00,0x05,0x8e,0xf4,0x02,0x00,0x08,0xc2,0x11,0x05,0x00,0x80,0x00,0xa5,0x34, +0x13,0x03,0x00,0x08,0x08,0x00,0x05,0xae,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf, +0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x02,0x80,0x06,0x3c,0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0x38,0x0d,0x63,0x24,0x40,0x00,0xa4,0x30,0x00,0x00,0x43,0xac, +0x21,0xb0,0x00,0x00,0x03,0x00,0x80,0x10,0x7f,0x00,0xa2,0x30,0xbf,0x00,0xa2,0x30, +0x01,0x00,0x16,0x24,0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc2,0x90,0x25,0xb0,0x04,0x3c, +0x88,0x02,0x83,0x34,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,0xb0,0x03,0x93,0x34, +0x02,0x80,0x14,0x3c,0xc0,0x03,0x00,0x08,0x21,0xb8,0x40,0x02,0x4c,0x64,0xf1,0xa2, +0x68,0x15,0xa2,0x26,0x84,0x64,0x46,0x8c,0xf0,0x64,0x45,0x8c,0x03,0x00,0x04,0x24, +0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x68,0x15,0xa5,0x26, +0xf8,0x63,0xa2,0x8c,0x04,0x00,0x03,0x8e,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30, +0x08,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c, +0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,0x00,0x26,0x04,0x00,0x25,0x18,0x44,0x00, +0x08,0x00,0x03,0xae,0x00,0x00,0x04,0x96,0x1c,0x64,0xa3,0x8c,0x27,0x10,0x04,0x00, +0x2b,0x10,0x62,0x00,0x02,0x00,0x40,0x10,0x21,0x10,0x64,0x00,0x1c,0x64,0xa2,0xac, +0x10,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0x53,0x00,0x80,0x04,0x00,0x00,0x00,0x00, +0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30, +0x0c,0x00,0x42,0x28,0x06,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x96, +0x00,0x00,0x00,0x00,0xfd,0x0f,0x42,0x28,0x44,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x18,0x43,0x00, +0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x08,0x00,0x03,0xae,0x82,0x11,0x03,0x00, +0x01,0x00,0x42,0x30,0x05,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,0xc0,0xff,0x02,0x24, +0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,0x08,0x00,0x02,0xae,0x0d,0x00,0xe2,0x34, +0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24, +0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c, +0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96, +0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x33,0x00,0x23,0x12,0x00,0x00,0x00,0x00, +0x84,0x64,0x42,0x8e,0xf0,0x64,0x50,0x8e,0x03,0x00,0x04,0x24,0x00,0x00,0x62,0xae, +0x88,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00, +0xf0,0x64,0x44,0x8e,0xf4,0x64,0x43,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24, +0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0xf0,0x64,0x43,0xae,0xf0,0x64,0xe2,0x8e, +0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32, +0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x9f,0xff,0x22,0x12, +0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,0x93,0xff,0xc0,0x16, +0x84,0x64,0xe2,0xae,0x74,0x03,0x00,0x08,0x48,0x64,0xf1,0xa2,0x08,0x00,0x03,0x8e, +0xa8,0x03,0x00,0x08,0x82,0x11,0x03,0x00,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00, +0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,0xab,0xff,0x40,0x14, +0x42,0x12,0x03,0x00,0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00, +0x96,0x03,0x00,0x08,0x10,0x00,0x02,0xae,0x20,0x00,0xc0,0x12,0x68,0x15,0xa2,0x26, +0x4c,0x64,0x43,0x90,0x41,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0, +0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa4,0x8c,0x01,0x00,0x02,0x3c,0x38,0x00,0xbf,0x8f, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x00,0x80,0x42,0x34,0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27, +0x00,0x00,0x64,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa4,0xac,0x48,0x64,0x43,0x90, +0x40,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26, +0xfc,0x4a,0xa4,0x8c,0x01,0x00,0x02,0x3c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x00,0x80,0x42,0x34, +0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x64,0xac, +0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa4,0xac,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf, +0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x02,0x80,0x06,0x3c,0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0xc8,0x10,0x63,0x24,0x10,0x00,0xa4,0x30,0x00,0x00,0x43,0xac, +0x21,0xb0,0x00,0x00,0x03,0x00,0x80,0x10,0xdf,0x00,0xa2,0x30,0xef,0x00,0xa2,0x30, +0x01,0x00,0x16,0x24,0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c, +0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26, +0x21,0x98,0x40,0x00,0x02,0x80,0x14,0x3c,0xa5,0x04,0x00,0x08,0x21,0xb8,0x40,0x02, +0x54,0x64,0xf1,0xa2,0x68,0x15,0xa2,0x26,0x90,0x64,0x46,0x8c,0xfc,0x64,0x45,0x8c, +0x04,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,0x04,0x00,0x03,0x8e,0x42,0x10,0x02,0x00, +0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14,0x1f,0x00,0x64,0x30,0x08,0x00,0x02,0x8e, +0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,0x00,0x26,0x04,0x00, +0x25,0x18,0x44,0x00,0x08,0x00,0x03,0xae,0x00,0x00,0x04,0x96,0x1c,0x64,0xa3,0x8c, +0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0x02,0x00,0x40,0x10,0x21,0x10,0x64,0x00, +0x1c,0x64,0xa2,0xac,0x10,0x00,0x04,0x8e,0x00,0x00,0x00,0x00,0x53,0x00,0x80,0x04, +0x00,0x00,0x00,0x00,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00, +0x3f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x06,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x00,0x00,0x02,0x96,0x00,0x00,0x00,0x00,0xfd,0x0f,0x42,0x28,0x44,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,0xff,0xff,0x63,0x34, +0x24,0x18,0x43,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x64,0x00,0x08,0x00,0x03,0xae, +0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,0x05,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c, +0xc0,0xff,0x02,0x24,0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,0x08,0x00,0x02,0xae, +0x15,0x00,0xe2,0x34,0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24, +0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96, +0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6, +0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x33,0x00,0x23,0x12, +0x00,0x00,0x00,0x00,0x90,0x64,0x42,0x8e,0xfc,0x64,0x50,0x8e,0x04,0x00,0x04,0x24, +0x00,0x00,0x62,0xae,0x94,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c, +0x00,0x00,0x00,0x00,0xfc,0x64,0x44,0x8e,0x00,0x65,0x43,0x8e,0x20,0x00,0x84,0x24, +0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0xfc,0x64,0x43,0xae, +0xfc,0x64,0xe2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c, +0xff,0xff,0x10,0x32,0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92, +0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24, +0x9f,0xff,0x22,0x12,0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00, +0x93,0xff,0xc0,0x16,0x90,0x64,0xe2,0xae,0x59,0x04,0x00,0x08,0x50,0x64,0xf1,0xa2, +0x08,0x00,0x03,0x8e,0x8d,0x04,0x00,0x08,0x82,0x11,0x03,0x00,0x14,0x00,0x03,0x8e, +0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28, +0xab,0xff,0x40,0x14,0x42,0x12,0x03,0x00,0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x10,0x82,0x00,0x7b,0x04,0x00,0x08,0x10,0x00,0x02,0xae,0x1f,0x00,0xc0,0x12, +0x68,0x15,0xa2,0x26,0x54,0x64,0x43,0x90,0x43,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34, +0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27, +0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x50,0x64,0x43,0x90, +0x42,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26, +0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f, +0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f, +0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x06,0x00,0x03,0x3c,0x25,0x10,0x43,0x00, +0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03, +0xfc,0x4a,0xa2,0xac,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf,0x38,0x00,0xbf,0xaf, +0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf, +0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x02,0x80,0x06,0x3c, +0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34, +0x54,0x14,0x63,0x24,0x01,0x00,0xa4,0x30,0x00,0x00,0x43,0xac,0x21,0xb0,0x00,0x00, +0x03,0x00,0x80,0x10,0xf7,0x00,0xa2,0x30,0xfe,0x00,0xa2,0x30,0x01,0x00,0x16,0x24, +0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,0x21,0x98,0x40,0x00,0x02,0x80,0x14,0x3c, +0x5c,0x05,0x00,0x08,0x21,0xb8,0x40,0x02,0x00,0x00,0x02,0x96,0x00,0x00,0x00,0x00, +0xfd,0x0f,0x42,0x28,0x67,0x00,0x40,0x10,0x00,0x20,0x02,0x3c,0x08,0x00,0x03,0x8e, +0x00,0x00,0x00,0x00,0x25,0x18,0x62,0x00,0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30, +0x6b,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,0xc0,0xff,0x02,0x24,0x24,0x10,0x62,0x00, +0x04,0x00,0x42,0x34,0x2a,0xb0,0x07,0x3c,0x08,0x00,0x02,0xae,0x1d,0x00,0xe2,0x34, +0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24, +0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c, +0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96, +0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x67,0x00,0x23,0x12,0x00,0x00,0x00,0x00, +0x9c,0x64,0x42,0x8e,0x08,0x65,0x50,0x8e,0x05,0x00,0x04,0x24,0x00,0x00,0x62,0xae, +0xa0,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00, +0x08,0x65,0x44,0x8e,0x0c,0x65,0x43,0x8e,0x20,0x00,0x84,0x24,0x3f,0x00,0x62,0x24, +0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x08,0x65,0x43,0xae,0x08,0x65,0xe2,0x8e, +0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c,0xff,0xff,0x10,0x32, +0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24,0x0d,0x00,0x22,0x12, +0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00,0x66,0x00,0xc0,0x12, +0x9c,0x64,0xe2,0xae,0x64,0x64,0xf1,0xa2,0x68,0x15,0xa2,0x26,0x9c,0x64,0x46,0x8c, +0x08,0x65,0x45,0x8c,0x05,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c, +0x10,0x00,0xa0,0xaf,0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,0x04,0x00,0x03,0x8e, +0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14,0x1f,0x00,0x64,0x30, +0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00, +0x00,0x26,0x04,0x00,0x25,0x10,0x44,0x00,0x08,0x00,0x02,0xae,0x00,0x00,0x04,0x96, +0x1c,0x64,0xa3,0x8c,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00,0x02,0x00,0x40,0x10, +0x21,0x10,0x64,0x00,0x1c,0x64,0xa2,0xac,0x10,0x00,0x04,0x8e,0x00,0x00,0x00,0x00, +0x47,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00, +0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28,0x96,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c,0xff,0xff,0x63,0x34, +0x24,0x10,0x43,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x44,0x00,0x82,0x11,0x03,0x00, +0x01,0x00,0x42,0x30,0x99,0xff,0x40,0x10,0xc0,0xff,0x02,0x24,0x2a,0xb0,0x07,0x3c, +0x1d,0x00,0xe2,0x34,0x08,0x00,0x03,0xae,0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00, +0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0, +0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24, +0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4, +0x9b,0xff,0x23,0x16,0x00,0x00,0x00,0x00,0x2d,0x00,0xc0,0x12,0x68,0x15,0xa2,0x26, +0x64,0x64,0x43,0x90,0x45,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0, +0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c, +0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x82,0xac, +0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x7e,0x05,0x00,0x08,0x58,0x64,0xf1,0xa2, +0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30, +0x14,0x00,0x42,0x28,0xb7,0xff,0x40,0x14,0x42,0x12,0x03,0x00,0x9f,0xff,0x02,0x3c, +0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,0xa0,0x05,0x00,0x08,0x10,0x00,0x02,0xae, +0x58,0x64,0x43,0x90,0x44,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34,0x00,0x00,0x83,0xa0, +0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x18,0x00,0x03,0x3c, +0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27,0x00,0x00,0x82,0xac, +0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0xc0,0xff,0xbd,0x27,0x30,0x00,0xb6,0xaf, +0x38,0x00,0xbf,0xaf,0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x02,0x80,0x06,0x3c,0xdc,0x7e,0xc5,0x90,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0x38,0x18,0x63,0x24,0x02,0x00,0xa4,0x30,0x00,0x00,0x43,0xac, +0x21,0xb0,0x00,0x00,0x03,0x00,0x80,0x10,0xfb,0x00,0xa2,0x30,0xfd,0x00,0xa2,0x30, +0x01,0x00,0x16,0x24,0xdc,0x7e,0xc2,0xa0,0xdc,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c, +0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x02,0x80,0x15,0x3c,0x68,0x15,0xb2,0x26,0x21,0x98,0x40,0x00, +0x02,0x80,0x14,0x3c,0x55,0x06,0x00,0x08,0x21,0xb8,0x40,0x02,0x00,0x00,0x02,0x96, +0x00,0x00,0x00,0x00,0xfd,0x0f,0x42,0x28,0x67,0x00,0x40,0x10,0x00,0x20,0x02,0x3c, +0x08,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x25,0x18,0x62,0x00,0x82,0x11,0x03,0x00, +0x01,0x00,0x42,0x30,0x6b,0x00,0x40,0x14,0x2a,0xb0,0x07,0x3c,0xc0,0xff,0x02,0x24, +0x24,0x10,0x62,0x00,0x04,0x00,0x42,0x34,0x2a,0xb0,0x07,0x3c,0x08,0x00,0x02,0xae, +0x25,0x00,0xe2,0x34,0x04,0x00,0x43,0x24,0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24, +0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0,0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96, +0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34,0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6, +0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24,0x00,0x00,0xa2,0xa4,0x67,0x00,0x23,0x12, +0x00,0x00,0x00,0x00,0xa8,0x64,0x42,0x8e,0x14,0x65,0x50,0x8e,0x06,0x00,0x04,0x24, +0x00,0x00,0x62,0xae,0xac,0x64,0x42,0xae,0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c, +0x00,0x00,0x00,0x00,0x14,0x65,0x44,0x8e,0x18,0x65,0x43,0x8e,0x20,0x00,0x84,0x24, +0x3f,0x00,0x62,0x24,0x2b,0x10,0x44,0x00,0x0a,0x18,0x82,0x00,0x14,0x65,0x43,0xae, +0x14,0x65,0xe2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x02,0x80,0x02,0x3c, +0xff,0xff,0x10,0x32,0x25,0x80,0x02,0x02,0x00,0x00,0x70,0xae,0x0c,0x00,0x02,0x92, +0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xae,0x0c,0x00,0x11,0x92,0xff,0x00,0x02,0x24, +0x0d,0x00,0x22,0x12,0x00,0x12,0x11,0x00,0x20,0x10,0x03,0x3c,0x21,0x10,0x43,0x00, +0x66,0x00,0xc0,0x12,0xa8,0x64,0xe2,0xae,0x60,0x64,0xf1,0xa2,0x68,0x15,0xa2,0x26, +0xa8,0x64,0x46,0x8c,0x14,0x65,0x45,0x8c,0x06,0x00,0x04,0x24,0x20,0x00,0x07,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c, +0x04,0x00,0x03,0x8e,0x42,0x10,0x02,0x00,0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14, +0x1f,0x00,0x64,0x30,0x08,0x00,0x02,0x8e,0xff,0xe0,0x03,0x3c,0xff,0xff,0x63,0x34, +0x24,0x10,0x43,0x00,0x00,0x26,0x04,0x00,0x25,0x10,0x44,0x00,0x08,0x00,0x02,0xae, +0x00,0x00,0x04,0x96,0x1c,0x64,0xa3,0x8c,0x27,0x10,0x04,0x00,0x2b,0x10,0x62,0x00, +0x02,0x00,0x40,0x10,0x21,0x10,0x64,0x00,0x1c,0x64,0xa2,0xac,0x10,0x00,0x04,0x8e, +0x00,0x00,0x00,0x00,0x47,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x14,0x00,0x03,0x8e, +0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00,0x3f,0x00,0x42,0x30,0x0c,0x00,0x42,0x28, +0x96,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0xff,0xdf,0x03,0x3c, +0xff,0xff,0x63,0x34,0x24,0x10,0x43,0x00,0x00,0x40,0x04,0x3c,0x25,0x18,0x44,0x00, +0x82,0x11,0x03,0x00,0x01,0x00,0x42,0x30,0x99,0xff,0x40,0x10,0xc0,0xff,0x02,0x24, +0x2a,0xb0,0x07,0x3c,0x25,0x00,0xe2,0x34,0x08,0x00,0x03,0xae,0x04,0x00,0x43,0x24, +0x0b,0x10,0x76,0x00,0x01,0x00,0x04,0x24,0x02,0x00,0x03,0x24,0x00,0x00,0x44,0xa0, +0x00,0x00,0x43,0xa0,0x2a,0x7e,0x84,0x96,0x25,0xb0,0x06,0x3c,0x66,0x03,0xc5,0x34, +0x01,0x00,0x84,0x24,0x2a,0x7e,0x84,0xa6,0x2a,0x7e,0x82,0x96,0xff,0x00,0x03,0x24, +0x00,0x00,0xa2,0xa4,0x9b,0xff,0x23,0x16,0x00,0x00,0x00,0x00,0x2d,0x00,0xc0,0x12, +0x68,0x15,0xa2,0x26,0x60,0x64,0x43,0x90,0x47,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34, +0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x60,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27, +0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x77,0x06,0x00,0x08, +0x5c,0x64,0xf1,0xa2,0x14,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x42,0x12,0x03,0x00, +0x3f,0x00,0x42,0x30,0x14,0x00,0x42,0x28,0xb7,0xff,0x40,0x14,0x42,0x12,0x03,0x00, +0x9f,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x10,0x82,0x00,0x99,0x06,0x00,0x08, +0x10,0x00,0x02,0xae,0x5c,0x64,0x43,0x90,0x46,0x00,0xe4,0x34,0xb0,0x03,0xc5,0x34, +0x00,0x00,0x83,0xa0,0x00,0x00,0xa3,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x68,0x15,0xa5,0x26,0xfc,0x4a,0xa2,0x8c,0x38,0x00,0xbf,0x8f, +0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x60,0x00,0x03,0x3c,0x25,0x10,0x43,0x00,0x41,0xb0,0x04,0x3c,0x40,0x00,0xbd,0x27, +0x00,0x00,0x82,0xac,0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa2,0xac,0x00,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x1c,0x1c,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x05,0x3c, +0x68,0x15,0xa5,0x24,0x04,0x4b,0xa2,0x8c,0xfc,0x4a,0xa4,0x8c,0x00,0x08,0x03,0x3c, +0x24,0x10,0x43,0x00,0x25,0x20,0x82,0x00,0x41,0xb0,0x03,0x3c,0x00,0x00,0x64,0xac, +0x08,0x00,0xe0,0x03,0xfc,0x4a,0xa4,0xac,0x25,0xb0,0x04,0x3c,0x00,0x80,0x02,0x3c, +0xc0,0xff,0xbd,0x27,0x18,0x03,0x83,0x34,0x78,0x1c,0x42,0x24,0x3c,0x00,0xbf,0xaf, +0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf, +0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x2a,0xb0,0x03,0x3c,0x68,0x15,0x51,0x24, +0xb0,0x03,0x93,0x34,0x2c,0x00,0x77,0x34,0x02,0x80,0x15,0x3c,0x02,0x80,0x16,0x3c, +0x41,0x07,0x00,0x08,0x02,0x80,0x1e,0x3c,0x74,0x64,0x26,0x92,0x44,0x65,0x25,0x8e, +0x00,0x32,0x06,0x00,0x21,0x30,0xc2,0x00,0xd8,0x64,0x26,0xae,0x10,0x01,0x00,0x0c, +0x10,0x00,0xa0,0xaf,0x44,0x65,0x30,0x8e,0x0a,0x00,0x04,0x24,0x21,0x90,0x00,0x00, +0x00,0x00,0x70,0xae,0x4d,0x01,0x00,0x0c,0xff,0xff,0x10,0x32,0x02,0x80,0x02,0x3c, +0x25,0x80,0x02,0x02,0x0c,0x00,0x05,0x92,0x02,0x00,0x04,0x92,0xff,0x00,0x02,0x24, +0xff,0x00,0xa3,0x30,0x04,0x00,0x62,0x10,0x21,0x80,0x04,0x02,0x00,0x00,0x63,0xae, +0x01,0x00,0x12,0x24,0x74,0x64,0x25,0xa2,0x48,0xa4,0xb0,0xae,0x21,0x28,0x00,0x02, +0x02,0x00,0xa2,0x90,0x08,0x00,0x10,0x26,0x21,0x20,0x00,0x02,0xff,0x00,0x42,0x30, +0x00,0x00,0x62,0xae,0x03,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x7f,0x00,0x63,0x30, +0x00,0x00,0x63,0xae,0x00,0x00,0x72,0xae,0x03,0x00,0xa2,0x90,0x44,0xa4,0xc3,0x92, +0x02,0x00,0xa2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30,0x2f,0x00,0x42,0x28, +0x11,0x00,0x40,0x10,0x08,0x00,0x02,0x24,0x03,0x00,0xa2,0x90,0x00,0x00,0x00,0x00, +0x7f,0x00,0x42,0x30,0x44,0xa4,0xc2,0xa2,0x02,0x00,0xa3,0x90,0x02,0x80,0x02,0x3c, +0xf4,0x91,0x42,0x24,0xff,0x00,0x63,0x30,0xc0,0x18,0x03,0x00,0x21,0x18,0x62,0x00, +0x04,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x09,0xf8,0x40,0x00,0x40,0xa4,0xc2,0xaf, +0x21,0xa0,0x40,0x00,0x08,0x00,0x02,0x24,0x0a,0x00,0x04,0x24,0x05,0x00,0x82,0x12, +0x00,0x01,0x07,0x24,0x01,0x00,0x02,0x24,0x02,0x00,0x03,0x24,0x01,0x00,0xe2,0xa2, +0x01,0x00,0xe3,0xa2,0xbc,0xff,0x40,0x16,0x20,0x10,0x02,0x3c,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xfc,0x4a,0x22,0x8e, +0x00,0x04,0x03,0x3c,0x41,0xb0,0x04,0x3c,0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac, +0x3c,0x00,0xbf,0x8f,0xfc,0x4a,0x22,0xae,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x40,0x00,0xbd,0x27,0xc8,0xff,0xbd,0x27,0xff,0xff,0xa8,0x30,0x02,0x80,0x02,0x3c, +0x25,0x40,0x02,0x01,0x30,0x00,0xb6,0xaf,0x20,0x00,0xb2,0xaf,0x34,0x00,0xbf,0xaf, +0x2c,0x00,0xb5,0xaf,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x00,0x00,0x03,0x8d,0xff,0xff,0xd2,0x30,0x21,0xb0,0xa0,0x00, +0x00,0xc0,0x02,0x24,0x08,0x00,0x45,0x26,0x04,0x00,0x06,0x8d,0x24,0x18,0x62,0x00, +0xff,0x3f,0xa5,0x30,0xf0,0xff,0x02,0x3c,0x25,0x18,0x65,0x00,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0x00,0x80,0x05,0x3c,0x25,0x18,0x65,0x00,0xff,0x01,0xc6,0x34, +0x00,0x00,0x03,0xad,0x04,0x00,0x06,0xad,0x21,0x48,0x80,0x00,0xff,0xff,0xe7,0x30, +0x18,0x00,0x12,0xa5,0x1a,0x00,0x07,0xa1,0x18,0x00,0x03,0x8d,0xff,0x7f,0x02,0x3c, +0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x02,0x80,0x15,0x3c,0x18,0x00,0x03,0xad, +0x68,0x15,0xa5,0x26,0xe2,0x63,0xa3,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x62,0x24, +0xe2,0x63,0xa2,0xa0,0x18,0x00,0x04,0x8d,0xff,0x80,0x02,0x3c,0x20,0x00,0x45,0x26, +0xff,0xff,0x42,0x34,0x7f,0x00,0x63,0x30,0xff,0xff,0xb2,0x30,0x24,0x20,0x82,0x00, +0x00,0x1e,0x03,0x00,0x25,0xb0,0x02,0x3c,0xc0,0x00,0x42,0x34,0x25,0x20,0x83,0x00, +0x07,0x00,0x45,0x32,0x18,0x00,0x04,0xad,0x00,0x00,0x52,0xa4,0x03,0x00,0xa0,0x10, +0xff,0xff,0x42,0x32,0x08,0x00,0x42,0x26,0xff,0xff,0x42,0x30,0x68,0x15,0xb4,0x26, +0xb4,0x65,0x86,0x8e,0xb8,0x65,0x90,0x8e,0xf8,0xff,0x52,0x30,0x21,0x10,0xd2,0x00, +0x2b,0x10,0x02,0x02,0x31,0x00,0x40,0x10,0xff,0x00,0x33,0x31,0x23,0x80,0x06,0x02, +0x21,0x28,0xc0,0x02,0xff,0xff,0x07,0x32,0x01,0x00,0x11,0x24,0x21,0x20,0x60,0x02, +0x10,0x01,0x00,0x0c,0x10,0x00,0xb1,0xaf,0x23,0x18,0x50,0x02,0xff,0xff,0x72,0x30, +0x22,0x10,0x02,0x3c,0x21,0x10,0x42,0x02,0x21,0x20,0x60,0x02,0x4d,0x01,0x00,0x0c, +0xb4,0x65,0x82,0xae,0x21,0x28,0xd0,0x02,0x21,0x38,0x40,0x02,0x21,0x20,0x60,0x02, +0x10,0x00,0xb1,0xaf,0x22,0x10,0x06,0x3c,0x10,0x01,0x00,0x0c,0x68,0x15,0xb1,0x26, +0xb4,0x65,0x23,0x8e,0x25,0xb0,0x10,0x3c,0xb0,0x03,0x02,0x36,0x21,0x20,0x60,0x02, +0x00,0x00,0x43,0xac,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00,0xb4,0x65,0x25,0x8e, +0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,0x00,0x00,0x45,0xac,0x00,0x00,0x83,0x90, +0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,0x10,0x00,0x63,0x34,0x00,0x00,0x83,0xa0, +0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x21,0x28,0xc0,0x02, +0x21,0x20,0x60,0x02,0x21,0x38,0x40,0x02,0x01,0x00,0x02,0x24,0x10,0x01,0x00,0x0c, +0x10,0x00,0xa2,0xaf,0xb4,0x65,0x83,0x8e,0x68,0x15,0xb1,0x26,0x25,0xb0,0x10,0x3c, +0x21,0x18,0x72,0x00,0xb4,0x65,0x83,0xae,0xb4,0x65,0x23,0x8e,0xb0,0x03,0x02,0x36, +0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0x4d,0x01,0x00,0x0c,0x00,0x00,0x00,0x00, +0xb4,0x65,0x25,0x8e,0xec,0x00,0x02,0x36,0xbd,0x00,0x04,0x36,0x00,0x00,0x45,0xac, +0x00,0x00,0x83,0x90,0xc2,0x00,0x10,0x36,0x34,0x00,0xbf,0x8f,0x10,0x00,0x63,0x34, +0x00,0x00,0x83,0xa0,0x30,0x00,0xb6,0x8f,0x00,0x00,0x05,0xa6,0x2c,0x00,0xb5,0x8f, +0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f, +0x18,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27, +0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x14,0x00,0xb1,0xaf,0x18,0x00,0xbf,0xaf, +0x10,0x00,0xb0,0xaf,0xbf,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x21,0x28,0x00,0x00, +0x08,0x00,0x06,0x24,0x04,0x00,0x63,0x2c,0x12,0x00,0x60,0x14,0x21,0x88,0x80,0x00, +0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x02,0x80,0x03,0x3c,0x60,0x7b,0x63,0x24,0x04,0x00,0x64,0x8c,0x00,0x00,0x23,0xae, +0x04,0x00,0x71,0xac,0x00,0x00,0x91,0xac,0x04,0x00,0x24,0xae,0x00,0x60,0x82,0x40, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x08,0x00,0x82,0x94,0x02,0x80,0x04,0x3c,0x58,0x45,0x00,0x0c, +0x25,0x20,0x44,0x00,0x00,0x60,0x10,0x40,0x01,0x00,0x01,0x36,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x08,0x00,0x25,0x8e,0x0c,0x00,0x26,0x96,0x14,0x00,0x27,0x96, +0x95,0x07,0x00,0x0c,0x09,0x00,0x04,0x24,0x04,0x00,0x23,0x8e,0x00,0x00,0x22,0x8e, +0x21,0x20,0x20,0x02,0x00,0x00,0x62,0xac,0x04,0x00,0x43,0xac,0x00,0x00,0x31,0xae, +0x70,0x4f,0x00,0x0c,0x04,0x00,0x31,0xae,0x00,0x60,0x90,0x40,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x68,0x15,0x47,0x24,0xec,0x64,0xe3,0x90,0xff,0xff,0xa5,0x30, +0x09,0x00,0xa3,0x10,0x21,0x20,0xc0,0x00,0x5c,0x65,0xe2,0x8c,0x00,0x00,0x00,0x00, +0x08,0x00,0xc2,0xac,0x66,0x65,0xe3,0x94,0x0e,0x00,0x02,0x24,0x14,0x00,0xc2,0xac, +0x30,0x08,0x00,0x08,0x0c,0x00,0xc3,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x2a,0xb0,0x04,0x3c,0x28,0x00,0x85,0x34,0x03,0x00,0x82,0x90,0x04,0x00,0x84,0x24, +0x05,0x00,0x40,0x14,0x2b,0x18,0xa4,0x00,0xfb,0xff,0x60,0x10,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x10,0x22,0x63,0x24,0x18,0x03,0x42,0x34, +0xd0,0xff,0xbd,0x27,0x00,0x00,0x43,0xac,0x24,0x00,0xb3,0xaf,0x28,0x00,0xbf,0xaf, +0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x78,0x08,0x00,0x0c,0x18,0x00,0xb0,0xaf, +0x06,0x00,0x40,0x10,0x02,0x80,0x13,0x3c,0x68,0x15,0x63,0x26,0x76,0x4b,0x62,0x90, +0x00,0x00,0x00,0x00,0x9b,0x00,0x40,0x14,0x00,0xc0,0x04,0x34,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2a,0xb0,0x02,0x3c,0x36,0x00,0x42,0x34, +0x00,0x00,0x43,0x90,0x68,0x15,0x66,0x26,0xbc,0x65,0xc5,0x8c,0xc0,0x18,0x03,0x00, +0x23,0xb0,0x04,0x3c,0xf0,0x07,0x63,0x30,0xff,0x1f,0x02,0x3c,0x21,0x18,0x64,0x00, +0xff,0xff,0x42,0x34,0x24,0x20,0x62,0x00,0x23,0x88,0x85,0x00,0x2b,0x38,0x85,0x00, +0x00,0x04,0x22,0x26,0x60,0x65,0xc3,0x8c,0x0b,0x88,0x47,0x00,0x01,0x04,0x25,0x2e, +0x5c,0x65,0xc3,0xac,0xc0,0x65,0xc4,0xac,0x66,0x65,0xc0,0xa4,0x11,0x00,0xa0,0x14, +0x65,0x65,0xc0,0xa0,0x00,0xfc,0x83,0x24,0x23,0x10,0x02,0x3c,0x0b,0x18,0x87,0x00, +0xff,0x03,0x42,0x34,0x2b,0x10,0x43,0x00,0x33,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x23,0x88,0x83,0x00,0x2b,0x10,0x83,0x00,0xbc,0x65,0xc3,0xac,0x03,0x00,0x40,0x10, +0x01,0x04,0x25,0x2e,0x00,0x04,0x31,0x26,0x01,0x04,0x25,0x2e,0x0e,0x00,0xa0,0x10, +0x68,0x15,0x70,0x26,0x68,0x15,0x70,0x26,0xc0,0x65,0x03,0x8e,0xbc,0x65,0x04,0x8e, +0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x25,0x00,0x40,0x14,0x2b,0x10,0x64,0x00, +0x51,0x00,0x40,0x14,0x25,0xb0,0x02,0x3c,0x80,0x00,0x03,0x24,0xd0,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x68,0x15,0x70,0x26,0xbc,0x65,0x03,0x96,0x2a,0xb0,0x02,0x3c, +0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00,0x00,0x00,0x51,0xa0,0x8e,0x12,0x00,0x0c, +0x00,0x00,0x00,0x00,0x66,0x65,0x03,0x96,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0xfc,0x4a,0x02,0x8e,0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c, +0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,0x28,0x00,0xbf,0x8f,0xfc,0x4a,0x02,0xae, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,0xb8,0x08,0x00,0x08,0x00,0xfc,0x63,0x24, +0x5c,0x65,0x05,0x8e,0x21,0x30,0x80,0x00,0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x5c,0x65,0x03,0x8e,0x66,0x65,0x05,0x96, +0xbc,0x65,0x02,0x8e,0x21,0x18,0x71,0x00,0x21,0x28,0x25,0x02,0x21,0x10,0x51,0x00, +0x09,0x00,0x04,0x24,0xbc,0x65,0x02,0xae,0x5c,0x65,0x03,0xae,0x4d,0x01,0x00,0x0c, +0x66,0x65,0x05,0xa6,0x68,0x15,0x70,0x26,0xbc,0x65,0x03,0x96,0x2a,0xb0,0x02,0x3c, +0x35,0x00,0x42,0x34,0xc2,0x88,0x03,0x00,0x00,0x00,0x51,0xa0,0x8e,0x12,0x00,0x0c, +0x00,0x00,0x00,0x00,0x66,0x65,0x03,0x96,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0xfc,0x4a,0x02,0x8e,0x80,0x00,0x03,0x3c,0x41,0xb0,0x04,0x3c, +0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xac,0x28,0x00,0xbf,0x8f,0xfc,0x4a,0x02,0xae, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27,0xc4,0x65,0x02,0x8e,0x5c,0x65,0x05,0x8e, +0x21,0x30,0x80,0x00,0x23,0x88,0x44,0x00,0xff,0xff,0x27,0x32,0x09,0x00,0x04,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x5c,0x65,0x03,0x8e,0x66,0x65,0x02,0x96, +0xc0,0x65,0x12,0x96,0x21,0x18,0x71,0x00,0x21,0x10,0x22,0x02,0x23,0x10,0x11,0x3c, +0x5c,0x65,0x03,0xae,0x66,0x65,0x02,0xa6,0x0c,0x00,0x40,0x16,0xbc,0x65,0x11,0xae, +0x09,0x00,0x04,0x24,0x4d,0x01,0x00,0x0c,0x68,0x15,0x70,0x26,0xfe,0x08,0x00,0x08, +0x00,0x00,0x00,0x00,0x44,0x67,0x62,0x94,0x76,0x4b,0x60,0xa0,0xe3,0x18,0x00,0x0c, +0x21,0x20,0x44,0x00,0x97,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x4d,0x01,0x00,0x0c, +0x09,0x00,0x04,0x24,0x5c,0x65,0x05,0x8e,0x09,0x00,0x04,0x24,0x23,0x10,0x06,0x3c, +0x21,0x38,0x40,0x02,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x5c,0x65,0x03,0x8e, +0x66,0x65,0x02,0x96,0x21,0x20,0x51,0x02,0x21,0x18,0x72,0x00,0x21,0x10,0x42,0x02, +0xbc,0x65,0x04,0xae,0x09,0x00,0x04,0x24,0x5c,0x65,0x03,0xae,0x2d,0x09,0x00,0x08, +0x66,0x65,0x02,0xa6,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x05,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x02,0x80,0x09,0x3c, +0x68,0x15,0x28,0x25,0xe8,0x63,0x06,0x8d,0xff,0xff,0x02,0x34,0x3f,0x00,0xc2,0x10, +0x21,0x38,0x80,0x00,0x2b,0x10,0xc7,0x00,0x30,0x00,0x40,0x10,0x02,0x19,0x06,0x00, +0x21,0x10,0xc7,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0xe8,0x63,0x06,0xad, +0x68,0x15,0x26,0x25,0x04,0x40,0xc4,0x8c,0xec,0x63,0x02,0xad,0xff,0xff,0x02,0x34, +0x2f,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x87,0x00,0x1f,0x00,0x40,0x10, +0x02,0x19,0x04,0x00,0x21,0x10,0x87,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x44,0x24, +0x04,0x40,0xc4,0xac,0xec,0x63,0xc2,0xac,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x68,0x15,0x23,0x25,0x80,0x10,0x02,0x00, +0x21,0x28,0x43,0x00,0x74,0x51,0xa6,0x8c,0x00,0x21,0x07,0x00,0xff,0xff,0xc2,0x38, +0x0a,0x30,0x82,0x00,0x2b,0x18,0xc7,0x00,0x07,0x00,0x60,0x10,0x21,0x10,0xc7,0x00, +0x02,0x19,0x06,0x00,0x23,0x10,0x43,0x00,0x10,0x00,0x46,0x24,0x74,0x51,0xa6,0xac, +0x08,0x00,0xe0,0x03,0x78,0x51,0xa2,0xac,0x02,0x19,0x06,0x00,0x23,0x10,0x43,0x00, +0x74,0x51,0xa2,0xac,0x08,0x00,0xe0,0x03,0x78,0x51,0xa2,0xac,0x21,0x10,0x87,0x00, +0x23,0x10,0x43,0x00,0x69,0x09,0x00,0x08,0x04,0x40,0xc2,0xac,0x21,0x10,0xc7,0x00, +0x68,0x15,0x26,0x25,0x04,0x40,0xc4,0x8c,0x23,0x10,0x43,0x00,0xe8,0x63,0x02,0xad, +0xec,0x63,0x02,0xad,0xff,0xff,0x02,0x34,0xd4,0xff,0x82,0x14,0x2b,0x10,0x87,0x00, +0x00,0x21,0x07,0x00,0x62,0x09,0x00,0x08,0x04,0x40,0xc4,0xac,0x00,0x31,0x04,0x00, +0x55,0x09,0x00,0x08,0xe8,0x63,0x06,0xad,0x63,0x00,0x82,0x24,0x77,0x00,0x42,0x2c, +0x00,0x00,0x85,0x28,0x04,0x00,0x40,0x10,0x21,0x18,0x00,0x00,0x64,0x00,0x82,0x24, +0x64,0x00,0x03,0x24,0x0b,0x18,0x45,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x0c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30,0x04,0x00,0x42,0x28, +0x17,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c,0x24,0x08,0x42,0x34,0x00,0x00,0x43,0x8c, +0x00,0x00,0x00,0x00,0x00,0x02,0x63,0x30,0x16,0x00,0x60,0x14,0x01,0x00,0x02,0x24, +0x05,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x82,0x21,0x03,0x00,0x28,0x00,0x82,0x10, +0xf5,0xff,0x02,0x24,0x02,0x00,0x82,0x28,0x39,0x00,0x40,0x14,0x02,0x00,0x02,0x24, +0x2e,0x00,0x82,0x10,0xe9,0xff,0x02,0x24,0x03,0x00,0x02,0x24,0x24,0x00,0x82,0x10, +0x3e,0x00,0x63,0x30,0x05,0x00,0xc4,0x24,0x96,0x09,0x00,0x08,0x00,0x00,0x00,0x00, +0x04,0x00,0xa4,0x90,0x00,0x00,0x00,0x00,0x42,0x20,0x04,0x00,0x96,0x09,0x00,0x08, +0x96,0xff,0x84,0x24,0x05,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x60,0x00,0x64,0x30, +0x42,0x21,0x04,0x00,0x0e,0x00,0x82,0x10,0x1f,0x00,0x62,0x30,0x02,0x00,0x82,0x28, +0x1d,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x14,0x00,0x82,0x10,0x1f,0x00,0x62,0x30, +0x03,0x00,0x02,0x24,0xeb,0xff,0x82,0x14,0x1f,0x00,0x62,0x30,0x40,0x10,0x02,0x00, +0xdd,0xff,0x03,0x24,0x23,0x30,0x62,0x00,0xba,0x09,0x00,0x08,0x05,0x00,0xc4,0x24, +0x40,0x10,0x02,0x00,0xf5,0xff,0x03,0x24,0xd2,0x09,0x00,0x08,0x23,0x30,0x62,0x00, +0x3e,0x00,0x63,0x30,0x23,0x30,0x43,0x00,0xba,0x09,0x00,0x08,0x05,0x00,0xc4,0x24, +0xdd,0xff,0x02,0x24,0xda,0x09,0x00,0x08,0x23,0x30,0x43,0x00,0x40,0x10,0x02,0x00, +0xe9,0xff,0x03,0x24,0xd2,0x09,0x00,0x08,0x23,0x30,0x62,0x00,0x3e,0x00,0x63,0x30, +0xda,0x09,0x00,0x08,0x23,0x30,0x43,0x00,0xd2,0xff,0x80,0x14,0x1f,0x00,0x62,0x30, +0x40,0x10,0x02,0x00,0xf8,0xff,0x03,0x24,0xd2,0x09,0x00,0x08,0x23,0x30,0x62,0x00, +0xcc,0xff,0x80,0x14,0x3e,0x00,0x63,0x30,0xf8,0xff,0x02,0x24,0xda,0x09,0x00,0x08, +0x23,0x30,0x43,0x00,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf, +0x14,0x00,0xb1,0xaf,0x0c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30, +0x04,0x00,0x42,0x28,0x29,0x00,0x40,0x14,0x21,0x80,0xa0,0x00,0x00,0x00,0xa4,0x8c, +0x02,0x80,0x11,0x3c,0x3f,0x00,0x84,0x30,0x40,0x20,0x04,0x00,0x96,0x09,0x00,0x0c, +0x96,0xff,0x84,0x24,0x68,0x15,0x25,0x26,0xf0,0x63,0xa4,0x8c,0x21,0x18,0x40,0x00, +0xff,0xff,0x02,0x34,0x3c,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00, +0x27,0x00,0x40,0x10,0x21,0x10,0x83,0x00,0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00, +0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24,0xf0,0x63,0xa4,0xac,0x00,0x00,0x04,0x8e, +0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00,0x7e,0x00,0x84,0x30,0x96,0x09,0x00,0x0c, +0x96,0xff,0x84,0x24,0x68,0x15,0x25,0x26,0xf4,0x63,0xa4,0x8c,0x21,0x18,0x40,0x00, +0xff,0xff,0x02,0x34,0x25,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00, +0x0b,0x00,0x40,0x10,0x21,0x10,0x83,0x00,0x21,0x18,0x83,0x00,0x02,0x11,0x04,0x00, +0x23,0x20,0x62,0x00,0x10,0x00,0x84,0x24,0xf4,0x63,0xa4,0xac,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x19,0x04,0x00, +0x23,0x10,0x43,0x00,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0xf4,0x63,0xa2,0xac, +0x02,0x19,0x04,0x00,0x23,0x10,0x43,0x00,0xf0,0x63,0xa2,0xac,0x00,0x00,0x04,0x8e, +0x00,0x00,0x00,0x00,0xc2,0x21,0x04,0x00,0x7e,0x00,0x84,0x30,0x96,0x09,0x00,0x0c, +0x96,0xff,0x84,0x24,0x68,0x15,0x25,0x26,0xf4,0x63,0xa4,0x8c,0x21,0x18,0x40,0x00, +0xff,0xff,0x02,0x34,0xde,0xff,0x82,0x14,0x2b,0x10,0x83,0x00,0x00,0x21,0x03,0x00, +0x1b,0x0a,0x00,0x08,0xf4,0x63,0xa4,0xac,0x00,0x21,0x03,0x00,0x07,0x0a,0x00,0x08, +0xf0,0x63,0xa4,0xac,0x98,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x58,0x00,0xb6,0xaf, +0x64,0x00,0xbf,0xaf,0x60,0x00,0xbe,0xaf,0x5c,0x00,0xb7,0xaf,0x54,0x00,0xb5,0xaf, +0x50,0x00,0xb4,0xaf,0x4c,0x00,0xb3,0xaf,0x48,0x00,0xb2,0xaf,0x44,0x00,0xb1,0xaf, +0x40,0x00,0xb0,0xaf,0x68,0x15,0x56,0x24,0x25,0xb0,0x03,0x3c,0x04,0x01,0x62,0x34, +0x00,0x00,0x43,0x8c,0xa4,0x65,0xc7,0x8e,0x00,0x00,0x00,0x00,0x34,0x00,0xe3,0x10, +0xa8,0x65,0xc3,0xae,0x2b,0x10,0x67,0x00,0xaa,0x00,0x40,0x14,0x2b,0x10,0xe3,0x00, +0xd4,0x00,0x40,0x14,0x02,0x80,0x02,0x3c,0x68,0x15,0x44,0x24,0x78,0x65,0x83,0x94, +0x02,0x80,0x02,0x3c,0x21,0x88,0x00,0x00,0x19,0x00,0x40,0x1a,0x25,0x98,0x62,0x00, +0x21,0xf0,0x80,0x00,0x21,0xb8,0x80,0x00,0x01,0x00,0x15,0x24,0x21,0x20,0x00,0x00, +0x21,0x80,0x93,0x00,0x00,0x00,0x05,0x8e,0x00,0x00,0x00,0x00,0x07,0x00,0xa0,0x10, +0x01,0x00,0x22,0x26,0x04,0x00,0x02,0x8e,0x00,0xf0,0x03,0x3c,0x00,0x20,0x04,0x3c, +0x24,0x10,0x43,0x00,0x1f,0x00,0x44,0x10,0x06,0x00,0x22,0x26,0xff,0xff,0x51,0x30, +0x82,0x16,0x05,0x00,0x01,0x00,0x42,0x30,0x35,0x00,0x55,0x10,0x00,0x00,0x00,0x00, +0x80,0x20,0x11,0x00,0x2a,0x10,0x92,0x00,0xed,0xff,0x40,0x14,0x00,0x00,0x00,0x00, +0x38,0x00,0xa4,0x8f,0x70,0x4f,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x08,0x04,0x44,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,0xfe,0x1f,0x00,0x0c, +0x21,0x38,0x00,0x00,0x25,0xb0,0x03,0x3c,0x04,0x01,0x62,0x34,0x00,0x00,0x43,0x8c, +0xa4,0x65,0xc7,0x8e,0x00,0x00,0x00,0x00,0xce,0xff,0xe3,0x14,0xa8,0x65,0xc3,0xae, +0x25,0xb0,0x03,0x3c,0x00,0x01,0x62,0x34,0x00,0x00,0x47,0xac,0x7f,0x0a,0x00,0x08, +0xa4,0x65,0xc7,0xae,0xbc,0x4c,0xc2,0x8f,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xbc,0x4c,0xc2,0xaf,0x0c,0x00,0x04,0x8e,0x0c,0x00,0x02,0x24,0x3f,0x00,0x83,0x30, +0x65,0x00,0x62,0x10,0x21,0x28,0xc0,0x03,0x3f,0x00,0x83,0x30,0x0d,0x00,0x02,0x24, +0x5a,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x3f,0x00,0x83,0x30,0x0e,0x00,0x02,0x24, +0x04,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x8e,0x73,0x0a,0x00,0x08, +0x06,0x00,0x22,0x26,0xc8,0x4c,0xc2,0x8f,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24, +0xc8,0x4c,0xc2,0xaf,0x00,0x00,0x05,0x8e,0x73,0x0a,0x00,0x08,0x06,0x00,0x22,0x26, +0x00,0x40,0xe2,0x8e,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x0f,0x00,0x42,0x30, +0x05,0x00,0x55,0x10,0xc2,0x13,0x05,0x00,0x1e,0x00,0x42,0x30,0x21,0x10,0x51,0x00, +0x78,0x0a,0x00,0x08,0xff,0xff,0x51,0x30,0x02,0x40,0xe2,0x92,0x00,0x00,0x00,0x00, +0x1f,0x00,0x40,0x14,0x02,0x80,0x03,0x3c,0x04,0x00,0x03,0x8e,0x00,0x00,0x00,0x00, +0x02,0x14,0x03,0x00,0x0f,0x00,0x42,0x30,0x18,0x00,0x40,0x14,0x02,0x17,0x03,0x00, +0x03,0x00,0x44,0x30,0x08,0x00,0x80,0x10,0x00,0xc0,0x02,0x3c,0x24,0x10,0x62,0x00, +0x12,0x00,0x40,0x14,0x03,0x00,0x02,0x24,0x11,0x00,0x82,0x10,0x02,0x80,0x03,0x3c, +0x10,0x00,0x80,0x10,0x68,0x15,0x63,0x24,0x80,0x10,0x11,0x00,0x21,0xa0,0x53,0x00, +0xec,0xff,0x83,0x8e,0x25,0xb0,0x02,0x3c,0xd4,0x02,0x42,0x34,0x21,0x28,0x80,0x02, +0x21,0x20,0x00,0x02,0x00,0x00,0x43,0xac,0xa0,0x09,0x00,0x0c,0x00,0x00,0x00,0x00, +0x21,0x20,0x40,0x00,0x4f,0x09,0x00,0x0c,0x21,0x28,0x00,0x00,0x02,0x80,0x03,0x3c, +0x68,0x15,0x63,0x24,0x02,0x40,0x62,0x90,0x00,0x00,0x00,0x00,0x88,0x00,0x55,0x10, +0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0x02,0x40,0x83,0x90, +0x02,0x00,0x02,0x24,0x6a,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c, +0x4c,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30, +0x08,0x00,0x55,0x10,0x02,0x80,0x04,0x3c,0x00,0x00,0x05,0x8e,0x00,0x00,0x00,0x00, +0xc2,0x13,0x05,0x00,0x1e,0x00,0x42,0x30,0x21,0x10,0x51,0x00,0x78,0x0a,0x00,0x08, +0xff,0xff,0x51,0x30,0xd0,0x02,0x02,0x24,0x68,0x15,0x84,0x24,0xe8,0x63,0x82,0xac, +0x00,0x00,0x05,0x8e,0xed,0x0a,0x00,0x08,0xc2,0x13,0x05,0x00,0xc4,0x4c,0xa2,0x8c, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xc4,0x4c,0xa2,0xac,0x0c,0x00,0x04,0x8e, +0x9f,0x0a,0x00,0x08,0x3f,0x00,0x83,0x30,0xc0,0x4c,0xc2,0x8f,0x00,0x00,0x00,0x00, +0x01,0x00,0x42,0x24,0xc0,0x4c,0xc2,0xaf,0x0c,0x00,0x04,0x8e,0x9b,0x0a,0x00,0x08, +0x3f,0x00,0x83,0x30,0xac,0x65,0xc2,0x8e,0xff,0xff,0x71,0x30,0x23,0x10,0x47,0x00, +0xff,0xff,0x50,0x30,0x21,0x18,0x11,0x02,0xff,0xff,0x72,0x30,0x54,0x4f,0x00,0x0c, +0x21,0x20,0x40,0x02,0x7d,0x00,0x40,0x10,0x38,0x00,0xa2,0xaf,0x38,0x00,0xa3,0x8f, +0xa4,0x65,0xc6,0x8e,0x21,0x38,0x00,0x02,0x08,0x00,0x62,0x8c,0x08,0x00,0x04,0x24, +0x10,0x00,0xa0,0xaf,0x21,0x18,0x52,0x00,0x21,0x28,0x40,0x00,0x74,0x65,0xc3,0xae, +0x10,0x01,0x00,0x0c,0x78,0x65,0xc2,0xae,0x4d,0x01,0x00,0x0c,0x08,0x00,0x04,0x24, +0x78,0x65,0xc5,0x8e,0x25,0xb0,0x04,0x3c,0x24,0x10,0x02,0x3c,0x21,0x28,0xb0,0x00, +0x00,0x01,0x90,0x34,0x00,0x00,0x02,0xae,0x21,0x38,0x20,0x02,0x08,0x00,0x04,0x24, +0x24,0x10,0x06,0x3c,0xa4,0x65,0xc2,0xae,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0xa8,0x65,0xc3,0x8e,0x08,0x00,0x04,0x24,0x4d,0x01,0x00,0x0c,0xa4,0x65,0xc3,0xae, +0xa4,0x65,0xc2,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xae,0x5e,0x0a,0x00,0x08, +0x02,0x80,0x02,0x3c,0x23,0x10,0x67,0x00,0xff,0xff,0x52,0x30,0x54,0x4f,0x00,0x0c, +0x21,0x20,0x40,0x02,0x5c,0x00,0x40,0x10,0x38,0x00,0xa2,0xaf,0x38,0x00,0xa3,0x8f, +0xa4,0x65,0xc6,0x8e,0x08,0x00,0x04,0x24,0x08,0x00,0x62,0x8c,0x21,0x38,0x40,0x02, +0x10,0x00,0xa0,0xaf,0x21,0x18,0x52,0x00,0x21,0x28,0x40,0x00,0x74,0x65,0xc3,0xae, +0x10,0x01,0x00,0x0c,0x78,0x65,0xc2,0xae,0xa8,0x65,0xc3,0x8e,0x08,0x00,0x04,0x24, +0x4d,0x01,0x00,0x0c,0xa4,0x65,0xc3,0xae,0xa4,0x65,0xc3,0x8e,0x25,0xb0,0x04,0x3c, +0x00,0x01,0x82,0x34,0x00,0x00,0x43,0xac,0x5e,0x0a,0x00,0x08,0x02,0x80,0x02,0x3c, +0x04,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x03,0x00,0x0f,0x00,0x42,0x30, +0x08,0x00,0x42,0x28,0x91,0xff,0x40,0x10,0x02,0x17,0x03,0x00,0x03,0x00,0x42,0x30, +0x8e,0xff,0x40,0x14,0x80,0x10,0x11,0x00,0x21,0xa0,0x53,0x00,0xec,0xff,0x83,0x8e, +0x25,0xb0,0x02,0x3c,0xd4,0x02,0x42,0x34,0x21,0x28,0x80,0x02,0x21,0x20,0x00,0x02, +0x00,0x00,0x43,0xac,0xa0,0x09,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x20,0x40,0x00, +0x4f,0x09,0x00,0x0c,0x21,0x28,0x00,0x00,0xe4,0x0a,0x00,0x08,0x25,0xb0,0x03,0x3c, +0x04,0x00,0x03,0x8e,0x00,0x00,0x00,0x00,0x02,0x14,0x03,0x00,0x0f,0x00,0x42,0x30, +0x08,0x00,0x42,0x28,0x06,0x00,0x40,0x10,0x00,0xc0,0x02,0x3c,0x02,0x17,0x03,0x00, +0x03,0x00,0x42,0x30,0x0c,0x00,0x40,0x10,0x80,0x10,0x11,0x00,0x00,0xc0,0x02,0x3c, +0x24,0x10,0x62,0x00,0x6c,0xff,0x40,0x14,0x02,0x80,0x04,0x3c,0x02,0x17,0x03,0x00, +0x03,0x00,0x42,0x30,0x03,0x00,0x03,0x24,0x68,0xff,0x43,0x10,0x68,0x15,0x84,0x24, +0x64,0xff,0x40,0x10,0x80,0x10,0x11,0x00,0x21,0xa0,0x53,0x00,0xec,0xff,0x83,0x8e, +0x25,0xb0,0x02,0x3c,0xd4,0x02,0x42,0x34,0x21,0x20,0x00,0x02,0x21,0x28,0x80,0x02, +0x00,0x00,0x43,0xac,0xa0,0x09,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x20,0x40,0x00, +0x4f,0x09,0x00,0x0c,0x21,0x28,0x00,0x00,0x21,0x20,0x00,0x02,0xf1,0x09,0x00,0x0c, +0x21,0x28,0x80,0x02,0xde,0x0a,0x00,0x08,0x02,0x80,0x04,0x3c,0x25,0xb0,0x04,0x3c, +0x44,0x44,0x02,0x3c,0xbc,0x02,0x83,0x34,0x44,0x44,0x42,0x34,0x00,0x00,0x62,0xac, +0x80,0x0a,0x00,0x08,0x02,0x80,0x02,0x3c,0xa8,0x65,0xc5,0x8e,0x25,0xb0,0x02,0x3c, +0x00,0x01,0x43,0x34,0xbc,0x02,0x44,0x34,0x66,0x66,0x02,0x3c,0x66,0x66,0x42,0x34, +0x00,0x00,0x65,0xac,0x00,0x00,0x82,0xac,0x7f,0x0a,0x00,0x08,0xa4,0x65,0xc5,0xae, +0x25,0xb0,0x06,0x3c,0x00,0x80,0x02,0x3c,0x2a,0xb0,0x04,0x3c,0x18,0x03,0xc5,0x34, +0x70,0x2e,0x42,0x24,0x00,0x00,0xa2,0xac,0x22,0x00,0x83,0x34,0x1a,0x00,0x85,0x34, +0x00,0x00,0x67,0x94,0x06,0x00,0x84,0x34,0x00,0x00,0xa2,0x94,0x00,0x00,0x83,0x94, +0xff,0x00,0xed,0x30,0xff,0x00,0x42,0x30,0x21,0x68,0x4d,0x00,0xff,0x00,0x63,0x30, +0x21,0x68,0x6d,0x00,0x68,0x03,0xc2,0x34,0x02,0x80,0x07,0x3c,0x00,0x00,0x4d,0xa4, +0x68,0x15,0xe7,0x24,0xc6,0x00,0xc3,0x34,0xca,0x00,0xc4,0x34,0x00,0x00,0x6b,0x90, +0x60,0x4b,0xe5,0x8c,0x00,0x00,0x82,0x90,0xcc,0x00,0xc3,0x34,0x00,0x00,0x68,0x90, +0xd4,0x00,0xc4,0x34,0x64,0x4b,0xe3,0x8c,0x00,0x00,0x8a,0x90,0x61,0x4b,0xec,0x90, +0xff,0x00,0x04,0x3c,0x00,0x4a,0x0d,0x00,0x23,0x48,0x2d,0x01,0x24,0x28,0xa4,0x00, +0xff,0x00,0x6d,0x31,0xff,0x00,0x42,0x30,0x21,0x10,0xa2,0x01,0x24,0x18,0x64,0x00, +0x02,0x2c,0x05,0x00,0x69,0x4b,0xe4,0x90,0xff,0x00,0x08,0x31,0x21,0x60,0x85,0x01, +0x02,0x1c,0x03,0x00,0x21,0x10,0x48,0x00,0xff,0x00,0x4a,0x31,0x21,0x10,0x4a,0x00, +0x21,0x60,0x83,0x01,0x21,0x60,0x84,0x01,0xff,0xff,0x4d,0x30,0x23,0x18,0x8d,0x01, +0xff,0xff,0x6c,0x30,0xff,0xff,0x29,0x31,0x6a,0x03,0xc2,0x34,0x6c,0x03,0xc3,0x34, +0x1f,0x03,0xc5,0x34,0x2b,0x20,0x2c,0x01,0x6e,0x03,0xc6,0x34,0x00,0x00,0x49,0xa4, +0x00,0x00,0x6d,0xa4,0x00,0x00,0xcc,0xa4,0x05,0x00,0x80,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,0x25,0x18,0x62,0x00,0x00,0x00,0xa3,0xa0, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x03,0x3c,0x70,0x9a,0x64,0xac, +0x00,0x60,0x82,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x70,0x9a,0x45,0x8c,0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34, +0xac,0x2f,0x63,0x24,0x00,0x00,0x43,0xac,0x04,0x00,0x02,0x24,0x1e,0x00,0xa2,0x10, +0x05,0x00,0xa2,0x2c,0x10,0x00,0x40,0x10,0x05,0x00,0x02,0x24,0x03,0x00,0x02,0x24, +0x08,0x00,0xa2,0x10,0x00,0x19,0x04,0x00,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00, +0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00,0x21,0x10,0x44,0x00, +0x40,0x19,0x02,0x00,0xff,0xff,0x63,0x24,0xfe,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf3,0xff,0xa2,0x10,0x06,0x00,0x02,0x24, +0xf2,0xff,0xa2,0x14,0x80,0x10,0x04,0x00,0x40,0x11,0x04,0x00,0x23,0x10,0x44,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x00,0x19,0x02,0x00,0x23,0x18,0x62,0x00, +0x01,0x0c,0x00,0x08,0x00,0x19,0x03,0x00,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00, +0xc0,0x10,0x02,0x00,0x23,0x10,0x44,0x00,0x00,0x11,0x02,0x00,0x21,0x10,0x44,0x00, +0x01,0x0c,0x00,0x08,0x00,0x19,0x02,0x00,0x02,0x80,0x02,0x3c,0x70,0x9a,0x45,0x8c, +0x00,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x18,0x03,0x42,0x34,0x68,0x30,0x63,0x24, +0x00,0x00,0x43,0xac,0x05,0x00,0x02,0x24,0x10,0x00,0xa2,0x10,0x06,0x00,0xa2,0x2c, +0x09,0x00,0x40,0x14,0x04,0x00,0x02,0x24,0x06,0x00,0x02,0x24,0x0f,0x00,0xa2,0x10, +0x00,0x11,0x04,0x00,0xff,0xff,0x84,0x24,0xfe,0xff,0x80,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfa,0xff,0xa2,0x14,0x80,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0x29,0x0c,0x00,0x08,0x40,0x20,0x02,0x00,0x80,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0x29,0x0c,0x00,0x08,0x80,0x20,0x02,0x00,0x23,0x10,0x44,0x00, +0x29,0x0c,0x00,0x08,0x40,0x20,0x02,0x00,0xff,0xff,0x85,0x30,0x21,0x30,0x00,0x00, +0x25,0xb0,0x03,0x3c,0x2a,0xb0,0x04,0x3c,0xb4,0x00,0x63,0x34,0x01,0x00,0xa2,0x24, +0x31,0x00,0x84,0x34,0x00,0x00,0x65,0xa0,0x00,0x00,0x85,0xa0,0xff,0xff,0x45,0x30, +0x12,0x00,0xa0,0x10,0x01,0x00,0x03,0x24,0x28,0xb0,0x07,0x3c,0x4f,0x0c,0x00,0x08, +0xff,0xff,0x08,0x24,0x00,0x00,0x83,0xa0,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30, +0x2b,0x10,0xa3,0x00,0x09,0x00,0x40,0x14,0x08,0x00,0xc6,0x24,0xf9,0xff,0x65,0x14, +0x21,0x20,0xc7,0x00,0x01,0x00,0x63,0x24,0xff,0xff,0x63,0x30,0x2b,0x10,0xa3,0x00, +0x00,0x00,0x88,0xa0,0xf9,0xff,0x40,0x10,0x08,0x00,0xc6,0x24,0x00,0x01,0xa2,0x2c, +0x13,0x00,0x40,0x10,0x21,0x18,0xa0,0x00,0xff,0x00,0x08,0x24,0x28,0xb0,0x07,0x3c, +0x63,0x0c,0x00,0x08,0xff,0xff,0x09,0x24,0xff,0xff,0x43,0x30,0x00,0x00,0xa2,0xa0, +0x00,0x01,0x62,0x2c,0x0a,0x00,0x40,0x10,0x08,0x00,0xc6,0x24,0x01,0x00,0x62,0x24, +0xf9,0xff,0x68,0x14,0x21,0x28,0xc7,0x00,0x00,0x01,0x02,0x24,0xff,0xff,0x43,0x30, +0x00,0x01,0x62,0x2c,0x00,0x00,0xa9,0xa0,0xf8,0xff,0x40,0x14,0x08,0x00,0xc6,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd0,0xff,0xbd,0x27,0x28,0x00,0xbf,0xaf, +0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x12,0x40,0x01,0x00,0x41,0x36, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x42,0x00,0x15,0x36, +0xff,0xff,0x02,0x24,0x00,0x00,0xa2,0xa2,0xd8,0x00,0x05,0x36,0x40,0x00,0x11,0x36, +0xa8,0x00,0x14,0x36,0xa0,0x00,0x13,0x36,0x00,0x10,0x03,0x24,0xa4,0x00,0x10,0x36, +0x00,0x80,0x02,0x3c,0x00,0x00,0x23,0xa6,0x00,0x00,0xa0,0xa0,0x00,0x00,0x60,0xae, +0x00,0x00,0x00,0xae,0x00,0x00,0x82,0xae,0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24, +0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00,0xfc,0x17,0x02,0x24,0x00,0x00,0xa3,0xa0, +0x00,0x00,0x22,0xa6,0x3a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x68,0x15,0x42,0x24,0x68,0x4b,0x45,0x8c,0x60,0x4b,0x43,0x8c,0x64,0x4b,0x44,0x8c, +0xfc,0x37,0x02,0x24,0x00,0x00,0x63,0xae,0x00,0x00,0x04,0xae,0x00,0x00,0x85,0xae, +0x00,0x00,0x22,0xa6,0x00,0x00,0xa0,0xa2,0x00,0x60,0x92,0x40,0x28,0x00,0xbf,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0xc8,0xff,0xbd,0x27,0x34,0x00,0xbf,0xaf,0x30,0x00,0xbe,0xaf,0x2c,0x00,0xb7,0xaf, +0x28,0x00,0xb6,0xaf,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf, +0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x16,0x40, +0x01,0x00,0xc1,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x11,0x3c, +0x40,0x00,0x30,0x36,0xff,0xff,0x02,0x24,0x42,0x00,0x3e,0x36,0xfc,0x77,0x13,0x24, +0x00,0x00,0xc2,0xa3,0xfc,0x57,0x12,0x24,0x00,0x00,0x13,0xa6,0x1a,0x0c,0x00,0x0c, +0x32,0x00,0x04,0x24,0xfc,0x37,0x17,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6, +0x1a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x24,0x00,0x00,0x17,0xa6, +0x1a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xa6,0x1a,0x0c,0x00,0x0c, +0x32,0x00,0x04,0x24,0x32,0x00,0x04,0x24,0x00,0x00,0x12,0xa6,0x1a,0x0c,0x00,0x0c, +0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x96,0x24,0xfa,0x03,0x24,0xd8,0x00,0x25,0x36, +0x24,0x10,0x43,0x00,0x00,0x00,0x02,0xa6,0x00,0x00,0xa3,0x90,0xa0,0x00,0x34,0x36, +0xa4,0x00,0x35,0x36,0xa8,0x00,0x33,0x36,0x7f,0x00,0x63,0x30,0x00,0x80,0x02,0x3c, +0x00,0x00,0xa3,0xa0,0x00,0x00,0x80,0xae,0x00,0x00,0xa0,0xae,0x00,0x00,0x62,0xae, +0x00,0x00,0xa3,0x90,0x80,0xff,0x02,0x24,0xfd,0x00,0x04,0x24,0x25,0x18,0x62,0x00, +0x00,0x00,0xa3,0xa0,0x00,0x00,0x12,0xa6,0x3a,0x0c,0x00,0x0c,0x56,0x01,0x31,0x36, +0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0x68,0x4b,0x45,0x8c,0x60,0x4b,0x43,0x8c, +0x64,0x4b,0x44,0x8c,0xff,0x0f,0x02,0x24,0x00,0x00,0x83,0xae,0x00,0x00,0xa4,0xae, +0x00,0x00,0x65,0xae,0x00,0x00,0x17,0xa6,0x00,0x00,0x22,0xa6,0x00,0x00,0xc0,0xa3, +0x00,0x60,0x96,0x40,0x34,0x00,0xbf,0x8f,0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f, +0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x38,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf, +0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x10,0x3c,0x40,0x00,0x05,0x36, +0x00,0x00,0xa2,0x94,0xaf,0xff,0x03,0x24,0xa8,0x00,0x13,0x36,0x24,0x10,0x43,0x00, +0x00,0x00,0xa2,0xa4,0xa0,0x00,0x12,0x36,0xa4,0x00,0x10,0x36,0x00,0x00,0x55,0x8e, +0x00,0x00,0x16,0x8e,0x00,0x00,0x71,0x8e,0x00,0x80,0x14,0x3c,0xfc,0x37,0x02,0x24, +0x00,0x00,0x40,0xae,0xfd,0x00,0x04,0x24,0x00,0x00,0x00,0xae,0x21,0x88,0x34,0x02, +0x00,0x00,0x74,0xae,0x00,0x00,0xa2,0xa4,0x3a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00, +0x00,0x00,0x55,0xae,0x00,0x00,0x16,0xae,0x00,0x00,0x71,0xae,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x25,0xb0,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x82,0x94,0xd8,0xfd,0x03,0x24, +0x24,0x10,0x43,0x00,0xfc,0x37,0x03,0x24,0x00,0x00,0x82,0xa4,0x00,0x00,0x83,0xa4, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xff,0xff,0xc6,0x30,0x10,0x00,0x02,0x24,0x0c,0x00,0xc2,0x10,0x11,0x00,0xc3,0x28, +0x06,0x00,0x60,0x10,0x20,0x00,0x02,0x24,0x08,0x00,0x02,0x24,0x0d,0x00,0xc2,0x10, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x06,0x00,0xc2,0x10, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xa4, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0xff,0xff,0xa5,0x24, +0x00,0x2c,0x05,0x00,0xfd,0x00,0x63,0x30,0x03,0x2c,0x05,0x00,0xff,0xff,0x87,0x30, +0x00,0x00,0x43,0xa0,0x1a,0x00,0xa0,0x04,0x00,0x00,0x00,0x00,0x21,0x30,0x40,0x00, +0x07,0x10,0xa7,0x00,0x01,0x00,0x42,0x30,0xfd,0x00,0x64,0x30,0x00,0x00,0x42,0x38, +0x02,0x00,0x63,0x34,0x0a,0x18,0x82,0x00,0x00,0x00,0xc3,0xa0,0x04,0x00,0x63,0x34, +0x00,0x00,0xc3,0xa0,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04, +0xff,0xff,0x42,0x24,0xfb,0x00,0x63,0x30,0x00,0x00,0xc3,0xa0,0x04,0x00,0x02,0x24, +0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0xff,0xff,0xa2,0x24, +0x00,0x2c,0x02,0x00,0x03,0x2c,0x05,0x00,0xea,0xff,0xa1,0x04,0x07,0x10,0xa7,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34, +0x00,0x00,0x43,0x90,0xff,0xff,0x84,0x24,0x00,0x24,0x04,0x00,0x03,0x24,0x04,0x00, +0xff,0x00,0x65,0x30,0x1d,0x00,0x80,0x04,0x21,0x38,0x00,0x00,0x21,0x30,0x40,0x00, +0x01,0x00,0x08,0x24,0x04,0x00,0xa5,0x34,0x00,0x00,0xc5,0xa0,0x00,0x00,0xc2,0x90, +0x00,0x00,0x00,0x00,0xff,0x00,0x45,0x30,0x01,0x00,0xa3,0x30,0x05,0x00,0x60,0x10, +0x04,0x00,0x02,0x24,0x04,0x10,0x88,0x00,0x25,0x10,0x47,0x00,0xff,0xff,0x47,0x30, +0x04,0x00,0x02,0x24,0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24, +0xfb,0x00,0xa5,0x30,0x00,0x00,0xc5,0xa0,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24, +0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0xff,0xff,0x82,0x24,0x00,0x24,0x02,0x00, +0x03,0x24,0x04,0x00,0xe7,0xff,0x81,0x04,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0xe0,0x00,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x25,0xb0,0x10,0x3c, +0x0a,0x00,0x10,0x36,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x00,0x00,0x02,0x92, +0xff,0xff,0x91,0x30,0x03,0x00,0x05,0x24,0xc0,0x00,0x42,0x30,0x80,0x00,0x43,0x34, +0x00,0x00,0x03,0xa2,0x04,0x00,0x63,0x34,0x00,0x00,0x03,0xa2,0xfb,0x00,0x63,0x30, +0x00,0x00,0x03,0xa2,0x08,0x00,0x63,0x34,0x00,0x00,0x03,0xa2,0x04,0x00,0x63,0x34, +0x00,0x00,0x03,0xa2,0xfb,0x00,0x63,0x30,0x00,0x00,0x03,0xa2,0x64,0x0d,0x00,0x0c, +0x06,0x00,0x04,0x24,0x42,0x20,0x11,0x00,0x64,0x0d,0x00,0x0c,0x06,0x00,0x05,0x24, +0x8a,0x0d,0x00,0x0c,0x10,0x00,0x04,0x24,0x00,0x00,0x03,0x92,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0xc0,0x00,0x63,0x30,0x00,0x00,0x03,0xa2,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf, +0xff,0xff,0xb1,0x30,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf, +0x21,0x90,0xc0,0x00,0x0a,0x00,0x20,0x12,0xff,0xff,0x90,0x30,0xb1,0x0d,0x00,0x0c, +0x21,0x20,0x00,0x02,0xfe,0xff,0x23,0x26,0x02,0x00,0x04,0x26,0x00,0x00,0x42,0xa6, +0xff,0xff,0x71,0x30,0xff,0xff,0x90,0x30,0xf8,0xff,0x20,0x16,0x02,0x00,0x52,0x26, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x25,0xb0,0x03,0x3c,0x0a,0x00,0x68,0x34, +0x00,0x00,0x02,0x91,0xff,0xff,0xa5,0x30,0xff,0x00,0x84,0x30,0x1f,0x00,0xa0,0x10, +0xff,0x00,0x47,0x30,0x21,0x48,0x00,0x01,0x0c,0x00,0x6c,0x34,0x0b,0x00,0x6b,0x34, +0xc0,0xff,0x0a,0x24,0x21,0x68,0x00,0x01,0x25,0x10,0xea,0x00,0xff,0x00,0x47,0x30, +0x00,0x00,0x64,0xa1,0x00,0x00,0x27,0xa1,0x00,0x00,0x22,0x91,0x00,0x00,0x00,0x00, +0xff,0x00,0x47,0x30,0xc0,0x00,0xe3,0x30,0x08,0x00,0x60,0x10,0x00,0x00,0x00,0x00, +0x21,0x40,0xa0,0x01,0x00,0x00,0x02,0x91,0x00,0x00,0x00,0x00,0xff,0x00,0x47,0x30, +0xc0,0x00,0xe3,0x30,0xfb,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x8d, +0xfc,0xff,0xa3,0x24,0x04,0x00,0x84,0x24,0xff,0xff,0x65,0x30,0x00,0x00,0xc2,0xac, +0xff,0x00,0x84,0x30,0xe8,0xff,0xa0,0x14,0x04,0x00,0xc6,0x24,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xff,0x00,0x84,0x30,0x21,0x68,0xe0,0x00,0xff,0xff,0xa5,0x30, +0xc0,0x50,0x04,0x00,0x00,0x60,0x0c,0x40,0x01,0x00,0x81,0x35,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x00,0x00,0xc2,0x90,0x01,0x00,0xc3,0x90,0x25,0xb0,0x07,0x3c, +0x00,0x14,0x02,0x00,0x25,0x28,0xa2,0x00,0x00,0x1e,0x03,0x00,0x01,0x80,0x08,0x3c, +0x25,0x20,0xa3,0x00,0x40,0x02,0xe9,0x34,0x25,0x18,0x48,0x01,0x44,0x02,0xe7,0x34, +0x00,0x00,0xe4,0xac,0x00,0x00,0x23,0xad,0x03,0x00,0xc2,0x90,0x02,0x00,0xc4,0x90, +0x04,0x00,0xc3,0x90,0x05,0x00,0xc5,0x90,0x00,0x12,0x02,0x00,0x25,0x20,0x82,0x00, +0x00,0x1c,0x03,0x00,0x01,0x00,0x4a,0x25,0x25,0x20,0x83,0x00,0x00,0x2e,0x05,0x00, +0x25,0x40,0x48,0x01,0x25,0x20,0x85,0x00,0x00,0x00,0xe4,0xac,0x01,0x00,0x4a,0x25, +0x00,0x00,0x28,0xad,0x01,0x80,0x0b,0x3c,0x21,0x40,0x00,0x00,0x21,0x10,0xa8,0x01, +0x01,0x00,0x43,0x90,0x00,0x00,0x45,0x90,0x02,0x00,0x44,0x90,0x03,0x00,0x46,0x90, +0x00,0x1a,0x03,0x00,0x25,0x28,0xa3,0x00,0x00,0x24,0x04,0x00,0x25,0x28,0xa4,0x00, +0x00,0x36,0x06,0x00,0x04,0x00,0x08,0x25,0x25,0x10,0x4b,0x01,0x25,0x20,0xa6,0x00, +0x10,0x00,0x03,0x2d,0x00,0x00,0xe4,0xac,0x01,0x00,0x4a,0x25,0x00,0x00,0x22,0xad, +0xee,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x8c,0x40,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xff,0xff,0x84,0x30,0x42,0xb0,0x08,0x3c,0x80,0x10,0x04,0x00, +0x21,0x10,0x48,0x00,0x04,0x00,0x46,0xac,0x00,0x00,0x07,0x91,0x40,0x18,0x04,0x00, +0x03,0x00,0x06,0x24,0xff,0x00,0xe7,0x30,0x04,0x30,0x66,0x00,0x01,0x00,0x02,0x24, +0x04,0x10,0x62,0x00,0x25,0x30,0xc7,0x00,0xff,0xff,0xa5,0x30,0x25,0x10,0x47,0x00, +0x02,0x00,0xa0,0x14,0xff,0x00,0xc7,0x30,0xff,0x00,0x47,0x30,0x42,0xb0,0x02,0x3c, +0x00,0x00,0x47,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x42,0xb0,0x02,0x3c, +0x03,0x00,0x47,0x34,0x00,0x00,0xe3,0x90,0xff,0x00,0x84,0x30,0x04,0x00,0x84,0x24, +0xff,0x00,0x65,0x30,0x01,0x00,0x02,0x24,0x04,0x30,0x82,0x00,0x07,0x18,0x85,0x00, +0x25,0xb0,0x02,0x3c,0xe8,0x03,0x42,0x34,0x01,0x00,0x63,0x30,0x21,0x20,0xc0,0x00, +0x00,0x00,0x45,0xa0,0x02,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xe6,0xa0, +0x08,0x00,0xe0,0x03,0x24,0x10,0x85,0x00,0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x02,0x80,0x02,0x3c,0x74,0x9a,0x42,0x24, +0x04,0x00,0x45,0x8c,0x00,0x00,0x82,0xac,0x04,0x00,0x44,0xac,0x00,0x00,0xa4,0xac, +0x04,0x00,0x85,0xac,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x14,0x00,0x83,0x90,0x01,0x00,0x02,0x24,0x08,0x00,0x86,0xac,0x18,0x00,0x85,0xac, +0x00,0x00,0x84,0xac,0x03,0x00,0x62,0x10,0x04,0x00,0x84,0xac,0x7a,0x0e,0x00,0x08, +0x0c,0x00,0x80,0xac,0x0c,0x00,0x82,0x8c,0x7a,0x0e,0x00,0x08,0x10,0x00,0x82,0xac, +0x00,0x60,0x03,0x40,0x01,0x00,0x61,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x04,0x00,0x85,0x8c,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac, +0x04,0x00,0x45,0xac,0x00,0x00,0x84,0xac,0x04,0x00,0x84,0xac,0x00,0x60,0x83,0x40, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd0,0xff,0xbd,0x27,0x28,0x00,0xb6,0xaf, +0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x14,0x00,0xb1,0xaf,0x2c,0x00,0xbf,0xaf, +0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x80,0x16,0x3c, +0x02,0x80,0x14,0x3c,0x02,0x80,0x11,0x3c,0x02,0x80,0x15,0x3c,0x24,0x7e,0x24,0x8e, +0x25,0xb0,0x02,0x3c,0x88,0x3a,0xc3,0x26,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x74,0x9a,0x90,0x8e,0x18,0x00,0x80,0x10,0x74,0x9a,0x82,0x26,0x15,0x00,0x02,0x12, +0x00,0x00,0x00,0x00,0x21,0x98,0x40,0x00,0x01,0x00,0x12,0x24,0x14,0x00,0x02,0x92, +0x00,0x00,0x00,0x00,0x1d,0x00,0x52,0x10,0x00,0x00,0x00,0x00,0x09,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x8e,0x24,0x7e,0x22,0x8e,0x00,0x00,0x00,0x00, +0x23,0x20,0x62,0x00,0x2b,0x10,0x43,0x00,0x0e,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x0c,0x00,0x04,0xae,0x00,0x00,0x10,0x8e,0x00,0x00,0x00,0x00,0xef,0xff,0x13,0x16, +0x00,0x00,0x00,0x00,0x24,0x7e,0x20,0xae,0x08,0x0c,0xa4,0x26,0x21,0x28,0x00,0x00, +0x21,0x30,0x00,0x00,0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,0xaf,0x0e,0x00,0x08, +0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0x18,0x00,0x04,0x8e,0x09,0xf8,0x40,0x00, +0x00,0x00,0x00,0x00,0xc9,0x0e,0x00,0x08,0x0c,0x00,0x02,0xae,0x0c,0x00,0x03,0x8e, +0x24,0x7e,0x22,0x8e,0x00,0x00,0x00,0x00,0x23,0x20,0x62,0x00,0x2b,0x10,0x43,0x00, +0xe7,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0x02,0x8e,0x18,0x00,0x04,0x8e, +0x09,0xf8,0x40,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x03,0x8e,0xc9,0x0e,0x00,0x08, +0x0c,0x00,0x03,0xae,0x02,0x80,0x02,0x3c,0x60,0x79,0x43,0x8c,0xff,0x00,0xa5,0x30, +0x25,0xb0,0x02,0x3c,0x42,0x18,0x03,0x00,0x21,0x30,0xa2,0x00,0x01,0x00,0x63,0x30, +0x01,0x00,0x02,0x24,0x10,0x00,0xa7,0x2c,0x04,0x00,0x62,0x10,0xff,0x00,0x84,0x30, +0x60,0x01,0xc4,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x03,0x3c, +0x10,0x00,0xa2,0x34,0xfa,0xff,0xe0,0x10,0x21,0x40,0x43,0x00,0x60,0x01,0xc4,0xa0, +0x60,0x01,0x04,0xa1,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0x84,0x30, +0x01,0x00,0x03,0x24,0x10,0x00,0x02,0x3c,0x04,0x18,0x83,0x00,0xf0,0x70,0x42,0x34, +0x15,0x00,0x84,0x2c,0x06,0x00,0x80,0x10,0x24,0x28,0x62,0x00,0x0f,0x00,0x63,0x30, +0x04,0x00,0xa0,0x14,0x01,0x00,0x02,0x24,0x02,0x00,0x60,0x14,0x02,0x00,0x02,0x24, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xff,0x00,0xa5,0x30, +0x04,0x00,0xa2,0x2c,0x14,0x00,0x40,0x10,0xff,0x00,0x84,0x30,0x02,0x80,0x03,0x3c, +0xee,0x7d,0x62,0x90,0x00,0x00,0x00,0x00,0xef,0xff,0x42,0x24,0xff,0x00,0x42,0x30, +0x02,0x00,0x42,0x2c,0x0e,0x00,0x40,0x10,0x02,0x00,0x03,0x24,0x24,0x00,0x83,0x10, +0x0f,0x10,0x02,0x3c,0x03,0x00,0x82,0x28,0x14,0x00,0x40,0x10,0x03,0x00,0x02,0x24, +0x01,0x00,0x02,0x24,0x2f,0x00,0x82,0x10,0x00,0x00,0x00,0x00,0xff,0x1f,0x02,0x3c, +0x08,0x00,0xe0,0x03,0xff,0xff,0x42,0x34,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x35,0x00,0x83,0x10,0x0f,0x1f,0x02,0x3c,0x03,0x00,0x82,0x28,0x16,0x00,0x40,0x10, +0x03,0x00,0x02,0x24,0x01,0x00,0x02,0x24,0xf4,0xff,0x82,0x14,0x00,0x00,0x00,0x00, +0x0f,0x1f,0x02,0x3c,0x08,0x00,0xe0,0x03,0x00,0x80,0x42,0x34,0xf0,0xff,0x82,0x14, +0xff,0x1f,0x02,0x3c,0x01,0x00,0x02,0x24,0x29,0x00,0xa2,0x10,0x0f,0x10,0x02,0x3c, +0x02,0x00,0xa2,0x28,0x1f,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x28,0x00,0xa3,0x10, +0x00,0x00,0x00,0x00,0xe5,0xff,0xa4,0x14,0x00,0x00,0x00,0x00,0x0f,0x10,0x02,0x3c, +0x08,0x00,0xe0,0x03,0x00,0xf0,0x42,0x34,0xe1,0xff,0x82,0x14,0xff,0x1f,0x02,0x3c, +0x01,0x00,0x02,0x24,0x1c,0x00,0xa2,0x10,0x0f,0x00,0x02,0x3c,0x02,0x00,0xa2,0x28, +0x0b,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x1c,0x00,0xa3,0x10,0x00,0x00,0x00,0x00, +0xd6,0xff,0xa4,0x14,0x00,0x00,0x00,0x00,0x0f,0x00,0x02,0x3c,0x08,0x00,0xe0,0x03, +0x00,0xf0,0x42,0x34,0x0f,0x10,0x02,0x3c,0x08,0x00,0xe0,0x03,0x00,0x80,0x42,0x34, +0xce,0xff,0xa0,0x14,0x00,0x00,0x00,0x00,0x0f,0x00,0x02,0x3c,0x08,0x00,0xe0,0x03, +0x15,0xf0,0x42,0x34,0xc9,0xff,0xa0,0x14,0x00,0x00,0x00,0x00,0x0f,0x10,0x02,0x3c, +0x08,0x00,0xe0,0x03,0x15,0xf0,0x42,0x34,0x08,0x00,0xe0,0x03,0x00,0xf0,0x42,0x34, +0x08,0x00,0xe0,0x03,0x10,0xf0,0x42,0x34,0x08,0x00,0xe0,0x03,0x10,0xf0,0x42,0x34, +0x0f,0x10,0x02,0x3c,0x08,0x00,0xe0,0x03,0x05,0xf0,0x42,0x34,0x0f,0x00,0x02,0x3c, +0x08,0x00,0xe0,0x03,0x05,0xf0,0x42,0x34,0xc0,0x40,0x04,0x00,0x21,0x18,0x04,0x01, +0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,0x80,0x18,0x03,0x00, +0x68,0x15,0x42,0x24,0x21,0x18,0x62,0x00,0x80,0x51,0x66,0x8c,0x21,0x38,0x60,0x00, +0x86,0x51,0x60,0xa0,0x87,0x51,0x60,0xa0,0x1c,0x00,0x05,0x24,0x7b,0x0f,0x00,0x08, +0x01,0x00,0x03,0x24,0x08,0x00,0xa0,0x04,0x21,0x10,0x04,0x01,0x04,0x10,0xa3,0x00, +0x24,0x10,0xc2,0x00,0xfb,0xff,0x40,0x10,0xff,0xff,0xa5,0x24,0x01,0x00,0xa5,0x24, +0x86,0x51,0xe5,0xa0,0x21,0x10,0x04,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00, +0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x68,0x15,0x63,0x24,0x21,0x18,0x43,0x00, +0x80,0x51,0x66,0x8c,0x21,0x28,0x00,0x00,0x8f,0x0f,0x00,0x08,0x01,0x00,0x07,0x24, +0x1d,0x00,0xa2,0x28,0x08,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x04,0x10,0xa7,0x00, +0x24,0x10,0xc2,0x00,0xfa,0xff,0x40,0x10,0x01,0x00,0xa5,0x24,0xff,0xff,0xa5,0x24, +0x08,0x00,0xe0,0x03,0x87,0x51,0x65,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xc8,0xff,0xbd,0x27,0x28,0x00,0xb6,0xaf,0x02,0x80,0x16,0x3c,0x30,0x00,0xbe,0xaf, +0x2c,0x00,0xb7,0xaf,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x01,0x00,0x15,0x24,0x21,0x88,0x00,0x00,0x68,0x15,0xde,0x26, +0x21,0xa0,0x00,0x00,0x21,0x90,0x00,0x00,0x25,0xb0,0x17,0x3c,0x34,0x00,0xbf,0xaf, +0x1c,0x00,0xb3,0xaf,0xb0,0x0f,0x00,0x08,0x10,0x00,0xb0,0xaf,0x01,0x00,0x31,0x26, +0x20,0x00,0x22,0x2e,0x94,0x00,0x52,0x26,0x2e,0x00,0x40,0x10,0x94,0x00,0x94,0x26, +0x68,0x15,0xc2,0x26,0x21,0x30,0x42,0x02,0x84,0x51,0xc5,0x8c,0x00,0x00,0x00,0x00, +0x02,0x13,0x05,0x00,0x01,0x00,0x42,0x30,0xf4,0xff,0x55,0x14,0x42,0x1a,0x05,0x00, +0x74,0x51,0xc2,0x8c,0x07,0x00,0x64,0x30,0x02,0x11,0x02,0x00,0x7f,0x00,0x43,0x30, +0x2d,0x00,0x95,0x10,0x07,0x00,0xb3,0x30,0x02,0x00,0x82,0x28,0x3a,0x00,0x40,0x14, +0x02,0x00,0x02,0x24,0x30,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0x3c,0x00,0x82,0x10, +0x1a,0x00,0x62,0x2c,0x21,0x80,0x9e,0x02,0x84,0x51,0x02,0x8e,0x04,0x00,0x63,0x2e, +0x42,0x12,0x02,0x00,0x0a,0x00,0x60,0x10,0x07,0x00,0x44,0x30,0x0f,0x0f,0x00,0x0c, +0x21,0x28,0x60,0x02,0x80,0x20,0x13,0x00,0x7c,0x51,0x02,0xae,0x21,0x20,0x97,0x00, +0x84,0x01,0x83,0x8c,0x00,0x00,0x00,0x00,0x24,0x18,0x62,0x00,0x80,0x51,0x03,0xae, +0x6a,0x0f,0x00,0x0c,0x21,0x20,0x20,0x02,0x21,0x10,0x37,0x02,0x01,0x00,0x31,0x26, +0x60,0x01,0x43,0x90,0x20,0x00,0x22,0x2e,0x94,0x00,0x52,0x26,0xd4,0xff,0x40,0x14, +0x94,0x00,0x94,0x26,0x34,0x00,0xbf,0x8f,0x30,0x00,0xbe,0x8f,0x2c,0x00,0xb7,0x8f, +0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0x32,0x00,0x62,0x2c,0xda,0xff,0x40,0x10, +0x21,0x80,0x9e,0x02,0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0x00,0x04,0x42,0x34, +0xc5,0x0f,0x00,0x08,0x84,0x51,0xc2,0xac,0x38,0x00,0x62,0x2c,0x12,0x00,0x40,0x14, +0x14,0x00,0x62,0x2c,0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0x00,0x02,0x42,0x34, +0xc5,0x0f,0x00,0x08,0x84,0x51,0xc2,0xac,0xcb,0xff,0x80,0x14,0x21,0x80,0x9e,0x02, +0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0xc6,0x0f,0x00,0x08,0x84,0x51,0xc2,0xac, +0xc5,0xff,0x40,0x14,0x21,0x80,0x9e,0x02,0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00, +0xf0,0x0f,0x00,0x08,0x00,0x04,0x42,0x34,0xbf,0xff,0x40,0x10,0x21,0x80,0x9e,0x02, +0xff,0xf1,0x03,0x24,0x24,0x10,0xa3,0x00,0x00,0x06,0x42,0x34,0xc6,0x0f,0x00,0x08, +0x84,0x51,0xc2,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xd8,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02,0x80,0x80,0x10,0x00, +0x21,0x80,0x04,0x02,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0x80,0x80,0x10,0x00, +0x20,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x21,0x80,0x02,0x02, +0x14,0x00,0xb1,0xaf,0x84,0x51,0x03,0x8e,0x25,0xb0,0x02,0x3c,0x80,0x01,0x53,0x34, +0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x71,0x92, +0x7c,0x51,0x05,0x8e,0x84,0x01,0x62,0x8c,0x21,0x90,0x80,0x00,0xff,0x00,0x31,0x32, +0x24,0x10,0x45,0x00,0x6a,0x0f,0x00,0x0c,0x80,0x51,0x02,0xae,0x86,0x51,0x04,0x92, +0xe9,0x0e,0x00,0x0c,0xff,0x00,0x45,0x32,0x86,0x51,0x04,0x92,0xff,0x0e,0x00,0x0c, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x88,0x62,0x00, +0x00,0x00,0x71,0xa2,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27, +0xff,0xff,0x84,0x30,0x00,0x02,0x82,0x30,0x07,0x00,0x03,0x24,0x0d,0x00,0x40,0x14, +0x0b,0x00,0x84,0x30,0x0c,0x00,0x82,0x2c,0x0a,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x02,0x80,0x03,0x3c,0x80,0x10,0x04,0x00,0xa0,0x9f,0x63,0x24,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00, +0x07,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x06,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x05,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x04,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x03,0x00,0x03,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x02,0x00,0x03,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x01,0x00,0x03,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x21,0x18,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00, +0x90,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x68,0x00,0xbe,0xaf,0x64,0x00,0xb7,0xaf, +0x60,0x00,0xb6,0xaf,0x5c,0x00,0xb5,0xaf,0x54,0x00,0xb3,0xaf,0x50,0x00,0xb2,0xaf, +0x6c,0x00,0xbf,0xaf,0x58,0x00,0xb4,0xaf,0x4c,0x00,0xb1,0xaf,0x48,0x00,0xb0,0xaf, +0xd0,0x9f,0x42,0x24,0x00,0x00,0x54,0x8c,0x08,0x00,0x03,0x24,0x10,0x00,0xa3,0xaf, +0x21,0x98,0x00,0x00,0x21,0xa8,0x00,0x00,0x21,0xb8,0x00,0x00,0x21,0xf0,0x00,0x00, +0x14,0x00,0xa0,0xaf,0x18,0x00,0xa0,0xaf,0x1c,0x00,0xa0,0xaf,0x20,0x00,0xa0,0xaf, +0x21,0xb0,0x00,0x00,0x24,0x00,0xa0,0xaf,0x28,0x00,0xa0,0xaf,0x2c,0x00,0xa0,0xaf, +0x30,0x00,0xa0,0xaf,0x34,0x00,0xa0,0xaf,0x38,0x00,0xa0,0xaf,0x3c,0x00,0xa0,0xaf, +0x40,0x00,0xa0,0xaf,0x21,0x90,0x80,0x02,0x84,0x51,0x42,0x8e,0x00,0x00,0x00,0x00, +0x02,0x13,0x02,0x00,0x01,0x00,0x42,0x30,0x6c,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c, +0x21,0x10,0x62,0x02,0x60,0x01,0x44,0x90,0x6c,0x51,0x43,0x8e,0x68,0x51,0x46,0x8e, +0xff,0x00,0x91,0x30,0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0x21,0x10,0x24,0x02, +0x73,0x44,0x44,0x90,0x56,0x44,0x45,0x90,0x50,0x51,0x47,0x8e,0x18,0x00,0x64,0x00, +0x12,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xc5,0x00, +0x12,0x30,0x00,0x00,0x21,0x30,0xc3,0x00,0x2b,0x10,0xe6,0x00,0x25,0x01,0x40,0x14, +0x23,0x10,0xe6,0x00,0x50,0x51,0x42,0xae,0x6c,0x51,0x44,0x8e,0x68,0x51,0x47,0x8e, +0x54,0x51,0x48,0x8e,0x58,0x51,0x45,0x8e,0x60,0x51,0x46,0x8e,0x64,0x51,0x43,0x8e, +0x21,0x38,0xe4,0x00,0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0x21,0x10,0x24,0x02, +0x21,0x40,0x05,0x01,0x21,0x30,0xc3,0x00,0xca,0x44,0x42,0x90,0x50,0x51,0x4a,0x8e, +0x0c,0x00,0xe0,0x10,0x21,0x48,0x00,0x00,0x2b,0x48,0x47,0x00,0x0b,0x00,0x20,0x15, +0x02,0x80,0x02,0x3c,0x07,0x00,0x22,0x2e,0x93,0x01,0x40,0x14,0xc0,0x10,0x07,0x00, +0x0c,0x00,0x02,0x24,0x8f,0x01,0x22,0x12,0x0d,0x00,0x02,0x24,0x8e,0x01,0x22,0x12, +0xc0,0x10,0x07,0x00,0x81,0x00,0x20,0x11,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24, +0x80,0x18,0x11,0x00,0x21,0x18,0x62,0x00,0x21,0x20,0x51,0x02,0xc2,0x51,0x85,0x90, +0xec,0x44,0x62,0x8c,0x00,0x00,0x00,0x00,0x04,0x10,0xa2,0x00,0x2b,0x10,0x4a,0x00, +0x76,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xe0,0x51,0x42,0x8e,0x01,0x00,0x07,0x24, +0x04,0x18,0x27,0x02,0x24,0x10,0x43,0x00,0x04,0x01,0x40,0x10,0x1c,0x00,0x22,0x2e, +0x21,0x28,0x51,0x02,0x88,0x51,0xa6,0x90,0xc2,0x51,0xa2,0x90,0x0a,0x00,0x04,0x24, +0xff,0x00,0xc3,0x30,0x04,0x20,0x44,0x00,0x2a,0x18,0x64,0x00,0xfb,0x00,0x60,0x10, +0x1c,0x00,0x22,0x2e,0x01,0x00,0xc2,0x24,0xff,0x00,0x43,0x30,0x8c,0x01,0x64,0x10, +0x88,0x51,0xa2,0xa0,0x02,0x80,0x04,0x3c,0x68,0x15,0x85,0x24,0x80,0x10,0x11,0x00, +0x21,0x10,0x45,0x00,0x60,0x45,0x44,0x8c,0xec,0x44,0x43,0x8c,0x21,0x30,0xc5,0x02, +0x40,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x21,0x18,0x62,0x00,0x82,0x50,0x03,0x00, +0x50,0x51,0xca,0xac,0xec,0x65,0xa3,0x8c,0xff,0xff,0x02,0x34,0x03,0x00,0x62,0x10, +0x21,0x20,0x20,0x02,0xe9,0x0e,0x00,0x0c,0xff,0x00,0x65,0x32,0xff,0x0e,0x00,0x0c, +0x21,0x20,0x20,0x02,0x10,0x00,0xa4,0x8f,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24, +0x0a,0x20,0x62,0x00,0xbc,0x00,0x60,0x12,0x10,0x00,0xa4,0xaf,0x02,0x80,0x03,0x3c, +0x68,0x15,0x62,0x24,0x21,0x10,0xa2,0x02,0x64,0x51,0x40,0xac,0x68,0x51,0x40,0xac, +0x6c,0x51,0x40,0xac,0x54,0x51,0x40,0xac,0x58,0x51,0x40,0xac,0x5c,0x51,0x40,0xac, +0x60,0x51,0x40,0xac,0x40,0x00,0xa4,0x8f,0x3c,0x00,0xa2,0x8f,0x01,0x00,0x73,0x26, +0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x40,0x00,0xa4,0xaf,0x3c,0x00,0xa2,0xaf, +0x38,0x00,0xa4,0x8f,0x34,0x00,0xa2,0x8f,0x20,0x00,0x63,0x2a,0x94,0x00,0x84,0x24, +0x94,0x00,0x42,0x24,0x38,0x00,0xa4,0xaf,0x34,0x00,0xa2,0xaf,0x30,0x00,0xa4,0x8f, +0x2c,0x00,0xa2,0x8f,0x94,0x00,0x52,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24, +0x30,0x00,0xa4,0xaf,0x2c,0x00,0xa2,0xaf,0x28,0x00,0xa4,0x8f,0x24,0x00,0xa2,0x8f, +0x94,0x00,0xd6,0x26,0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x28,0x00,0xa4,0xaf, +0x24,0x00,0xa2,0xaf,0x20,0x00,0xa4,0x8f,0x1c,0x00,0xa2,0x8f,0x94,0x00,0xde,0x27, +0x94,0x00,0x84,0x24,0x94,0x00,0x42,0x24,0x20,0x00,0xa4,0xaf,0x1c,0x00,0xa2,0xaf, +0x18,0x00,0xa4,0x8f,0x14,0x00,0xa2,0x8f,0x94,0x00,0x94,0x26,0x94,0x00,0x84,0x24, +0x94,0x00,0x42,0x24,0x18,0x00,0xa4,0xaf,0x14,0x00,0xa2,0xaf,0x94,0x00,0xf7,0x26, +0x59,0xff,0x60,0x14,0x94,0x00,0xb5,0x26,0x10,0x00,0xa3,0x8f,0x6c,0x00,0xbf,0x8f, +0x68,0x00,0xbe,0x8f,0x64,0x00,0xb7,0x8f,0x60,0x00,0xb6,0x8f,0x5c,0x00,0xb5,0x8f, +0x58,0x00,0xb4,0x8f,0x54,0x00,0xb3,0x8f,0x50,0x00,0xb2,0x8f,0x4c,0x00,0xb1,0x8f, +0x48,0x00,0xb0,0x8f,0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34,0x70,0x00,0xbd,0x27, +0x00,0x00,0x43,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x87,0x00,0xe0,0x10, +0x00,0x00,0x00,0x00,0x87,0x00,0x20,0x15,0x02,0x80,0x03,0x3c,0x40,0x10,0x07,0x00, +0x21,0x10,0x47,0x00,0x82,0x10,0x02,0x00,0x2b,0x10,0x46,0x00,0xa7,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x20,0x00,0xa2,0x8f,0x02,0x80,0x04,0x3c,0x68,0x15,0x88,0x24, +0x21,0x20,0x48,0x00,0x21,0x30,0x91,0x00,0xe0,0x51,0x83,0x8c,0x01,0x00,0x05,0x24, +0x04,0x10,0x25,0x02,0xa5,0x51,0xc7,0x90,0x27,0x10,0x02,0x00,0x24,0x18,0x62,0x00, +0xe0,0x51,0x83,0xac,0x09,0x00,0xe5,0x10,0x88,0x51,0xc0,0xa0,0x1c,0x00,0xa3,0x8f, +0x21,0x38,0x00,0x00,0x21,0x20,0x68,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24, +0x1d,0x00,0xe2,0x28,0xfc,0xff,0x40,0x14,0xc2,0x51,0x60,0xa0,0x02,0x80,0x04,0x3c, +0x68,0x15,0x83,0x24,0x18,0x00,0xa4,0x8f,0x21,0x50,0x60,0x00,0x21,0x38,0x00,0x00, +0x21,0x10,0x83,0x00,0x21,0x10,0x51,0x00,0xa5,0x51,0x40,0xa0,0x02,0x80,0x03,0x3c, +0x02,0x80,0x02,0x3c,0xe4,0x9e,0x49,0x24,0x70,0x9e,0x68,0x24,0x80,0x18,0x07,0x00, +0x21,0x10,0x69,0x00,0x21,0x20,0x68,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c, +0x01,0x00,0xe7,0x24,0x21,0x18,0x6a,0x00,0x1d,0x00,0xe2,0x28,0xec,0x44,0x65,0xac, +0xf6,0xff,0x40,0x14,0x60,0x45,0x66,0xac,0x15,0x00,0x20,0x12,0x02,0x80,0x05,0x3c, +0x87,0x51,0x82,0x92,0xff,0xff,0x27,0x26,0x2a,0x10,0xe2,0x00,0x10,0x00,0x40,0x14, +0x02,0x80,0x03,0x3c,0x14,0x00,0xa4,0x8f,0x68,0x15,0x62,0x24,0x21,0x10,0x82,0x00, +0x87,0x51,0x45,0x90,0x80,0x51,0x44,0x8c,0x01,0x00,0x06,0x24,0x04,0x18,0xe6,0x00, +0x24,0x10,0x83,0x00,0x06,0x01,0x43,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0xe7,0x24, +0x2a,0x10,0xe5,0x00,0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,0x02,0x80,0x05,0x3c, +0xee,0x7d,0xa3,0x90,0x22,0x00,0x02,0x24,0xe8,0x00,0x62,0x10,0x02,0x80,0x03,0x3c, +0x02,0x80,0x04,0x3c,0x68,0x15,0x83,0x24,0x80,0x10,0x11,0x00,0x21,0x10,0x43,0x00, +0x60,0x45,0x44,0x8c,0xec,0x44,0x43,0x8c,0xee,0x7d,0xa5,0x90,0x40,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0x21,0x18,0x62,0x00,0x22,0x00,0x02,0x24,0xd6,0x00,0xa2,0x10, +0x82,0x50,0x03,0x00,0xe0,0x51,0x83,0x8e,0x01,0x00,0x02,0x24,0x04,0x10,0x22,0x02, +0x25,0x18,0x62,0x00,0xe0,0x51,0x83,0xae,0x02,0x80,0x02,0x3c,0x68,0x15,0x43,0x24, +0x21,0x10,0xe3,0x02,0x50,0x51,0x4a,0xac,0xec,0x65,0x64,0x8c,0xff,0xff,0x02,0x34, +0x44,0xff,0x82,0x14,0x21,0x20,0x20,0x02,0xff,0x0e,0x00,0x0c,0x21,0x20,0x20,0x02, +0x10,0x00,0xa4,0x8f,0x01,0x00,0x42,0x38,0x04,0x00,0x03,0x24,0x0a,0x20,0x62,0x00, +0x46,0xff,0x60,0x16,0x10,0x00,0xa4,0xaf,0x02,0x80,0x02,0x3c,0x68,0x15,0x50,0x24, +0x58,0x51,0x05,0x96,0x54,0x51,0x02,0x96,0x25,0xb0,0x11,0x3c,0x00,0x2c,0x05,0x00, +0x21,0x28,0x45,0x00,0x82,0x4f,0x00,0x0c,0x68,0x0c,0x24,0x36,0x64,0x51,0x02,0x8e, +0x60,0x51,0x05,0x8e,0x5c,0x51,0x03,0x96,0x6c,0x0c,0x24,0x36,0x21,0x28,0xa2,0x00, +0x00,0x2c,0x05,0x00,0x82,0x4f,0x00,0x0c,0x21,0x28,0x65,0x00,0xf8,0x10,0x00,0x08, +0x02,0x80,0x03,0x3c,0xa2,0x10,0x00,0x08,0x50,0x51,0x40,0xae,0x27,0xff,0x20,0x11, +0x02,0x80,0x03,0x3c,0x68,0x15,0x62,0x24,0x80,0x18,0x11,0x00,0x21,0x18,0x62,0x00, +0x60,0x45,0x64,0x8c,0x00,0x00,0x00,0x00,0x2b,0x20,0x44,0x01,0x1f,0xff,0x80,0x10, +0x00,0x00,0x00,0x00,0x49,0x11,0x00,0x08,0x00,0x00,0x00,0x00,0x0a,0xff,0x40,0x10, +0x02,0x80,0x04,0x3c,0x21,0x20,0x51,0x02,0xa5,0x51,0x83,0x90,0x01,0x00,0x02,0x24, +0x78,0x00,0x62,0x10,0x02,0x80,0x02,0x3c,0x40,0x00,0xa3,0x8f,0x68,0x15,0x42,0x24, +0x21,0x20,0x62,0x00,0x21,0x38,0x00,0x00,0x21,0x18,0x87,0x00,0x01,0x00,0xe7,0x24, +0x1d,0x00,0xe2,0x28,0xfc,0xff,0x40,0x14,0xc2,0x51,0x60,0xa0,0x3c,0x00,0xa2,0x8f, +0x02,0x80,0x04,0x3c,0x68,0x15,0x85,0x24,0x21,0x30,0x45,0x00,0xe0,0x51,0xc2,0x8c, +0x01,0x00,0x03,0x24,0x04,0x18,0x23,0x02,0x27,0x18,0x03,0x00,0x21,0x20,0xd1,0x00, +0x24,0x10,0x43,0x00,0xa5,0x51,0x80,0xa0,0xe0,0x51,0xc2,0xac,0x12,0x00,0x20,0x16, +0x88,0x51,0x80,0xa0,0x86,0x51,0xc2,0x90,0x00,0x00,0x00,0x00,0x0e,0x00,0x40,0x10, +0x01,0x00,0x07,0x24,0x38,0x00,0xa3,0x8f,0x01,0x00,0x06,0x24,0x21,0x10,0x65,0x00, +0x86,0x51,0x44,0x90,0x80,0x51,0x45,0x8c,0x04,0x18,0xe6,0x00,0x24,0x10,0xa3,0x00, +0x8d,0x00,0x43,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0xe7,0x24,0x2a,0x10,0x87,0x00, +0xfa,0xff,0x40,0x10,0x04,0x18,0xe6,0x00,0x02,0x80,0x02,0x3c,0x68,0x15,0x44,0x24, +0x34,0x00,0xa2,0x8f,0x01,0x00,0x27,0x26,0x21,0x18,0x44,0x00,0x86,0x51,0x62,0x90, +0x00,0x00,0x00,0x00,0x2a,0x10,0x47,0x00,0x0f,0x00,0x40,0x14,0x02,0x80,0x05,0x3c, +0x30,0x00,0xa3,0x8f,0x01,0x00,0x06,0x24,0x21,0x10,0x64,0x00,0x86,0x51,0x45,0x90, +0x80,0x51,0x44,0x8c,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00,0x73,0x00,0x43,0x10, +0x00,0x00,0x00,0x00,0x01,0x00,0xe7,0x24,0x2a,0x10,0xa7,0x00,0xfa,0xff,0x40,0x10, +0x04,0x18,0xe6,0x00,0x02,0x80,0x05,0x3c,0xee,0x7d,0xa3,0x90,0x22,0x00,0x02,0x24, +0x3e,0x00,0x62,0x10,0xee,0xff,0x22,0x26,0xee,0x7d,0xa3,0x90,0x22,0x00,0x02,0x24, +0xbd,0xfe,0x62,0x14,0x02,0x80,0x04,0x3c,0x28,0x00,0xa2,0x8f,0x68,0x15,0x86,0x24, +0x21,0x20,0x46,0x00,0x84,0x51,0x85,0x8c,0x01,0x00,0x03,0x24,0x42,0x13,0x05,0x00, +0x07,0x00,0x42,0x30,0xb3,0xfe,0x43,0x10,0x14,0x00,0x22,0x2e,0xb1,0xfe,0x40,0x14, +0x1c,0x00,0x22,0x2e,0xaf,0xfe,0x40,0x10,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34, +0x24,0x10,0xa2,0x00,0x00,0x20,0x42,0x34,0x84,0x51,0x82,0xac,0x87,0x51,0x83,0x90, +0xff,0xff,0x27,0x26,0x2a,0x18,0xe3,0x00,0xa6,0xfe,0x60,0x14,0x00,0x00,0x00,0x00, +0x24,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x21,0x10,0x66,0x00,0x87,0x51,0x45,0x90, +0x80,0x51,0x44,0x8c,0x42,0x12,0x00,0x08,0x01,0x00,0x06,0x24,0x2a,0x10,0xe5,0x00, +0x9c,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0x04,0x18,0xe6,0x00,0x24,0x10,0x83,0x00, +0xfa,0xff,0x43,0x14,0xff,0xff,0xe7,0x24,0x01,0x00,0xe7,0x24,0xdd,0x10,0x00,0x08, +0xff,0x00,0xf1,0x30,0xc0,0x10,0x07,0x00,0x23,0x10,0x47,0x00,0xc2,0x10,0x02,0x00, +0x2b,0x10,0x48,0x00,0x7c,0xfe,0x40,0x14,0x00,0x00,0x00,0x00,0xbd,0x10,0x00,0x08, +0x00,0x00,0x00,0x00,0x18,0x00,0x22,0x2e,0x17,0x00,0x40,0x14,0x05,0x00,0x22,0x2e, +0xc2,0x51,0x83,0x90,0x00,0x00,0x00,0x00,0x05,0x00,0x62,0x2c,0x8b,0xff,0x40,0x10, +0x01,0x00,0x62,0x24,0xe3,0x11,0x00,0x08,0xc2,0x51,0x82,0xa0,0xff,0x00,0x42,0x30, +0x02,0x00,0x42,0x2c,0xc0,0xff,0x40,0x10,0x02,0x80,0x04,0x3c,0x2c,0x00,0xa3,0x8f, +0x68,0x15,0x82,0x24,0x21,0x10,0x62,0x00,0x80,0x51,0x43,0x8c,0x00,0x01,0x04,0x3c, +0x18,0x00,0x02,0x24,0x24,0x18,0x64,0x00,0x1e,0x12,0x00,0x08,0x0b,0x88,0x43,0x00, +0xdd,0x10,0x00,0x08,0xa5,0x51,0xa7,0xa0,0x04,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0xc2,0x51,0x83,0x90,0x57,0x12,0x00,0x08,0x03,0x00,0x62,0x2c,0xc2,0x51,0x83,0x90, +0x57,0x12,0x00,0x08,0x04,0x00,0x62,0x2c,0x13,0x00,0x02,0x24,0x29,0xff,0x22,0x16, +0x02,0x80,0x02,0x3c,0xa4,0x11,0x00,0x08,0x68,0x15,0x43,0x24,0x68,0x15,0x62,0x24, +0x21,0x20,0xc2,0x03,0x84,0x51,0x83,0x8c,0x00,0x00,0x00,0x00,0x42,0x13,0x03,0x00, +0x07,0x00,0x42,0x30,0x12,0xff,0x40,0x10,0x14,0x00,0x22,0x2e,0x10,0xff,0x40,0x10, +0x0c,0x00,0x22,0x2e,0x0e,0xff,0x40,0x14,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34, +0x24,0x10,0x62,0x00,0x90,0x11,0x00,0x08,0x84,0x51,0x82,0xac,0xff,0x00,0xf1,0x30, +0x1a,0x12,0x00,0x08,0x02,0x80,0x05,0x3c,0x02,0x12,0x00,0x08,0xff,0x00,0xf1,0x30, +0x8b,0x11,0x00,0x08,0xff,0x00,0xf1,0x30,0xa8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x38,0x00,0xb2,0xaf,0x54,0x00,0xbf,0xaf,0x50,0x00,0xbe,0xaf,0x4c,0x00,0xb7,0xaf, +0x48,0x00,0xb6,0xaf,0x44,0x00,0xb5,0xaf,0x40,0x00,0xb4,0xaf,0x3c,0x00,0xb3,0xaf, +0x34,0x00,0xb1,0xaf,0x30,0x00,0xb0,0xaf,0x68,0x15,0x46,0x24,0x65,0x65,0xc4,0x90, +0x60,0x65,0xc3,0x8c,0x5c,0x65,0xc2,0x8c,0x21,0x90,0x64,0x00,0x2b,0x10,0x42,0x02, +0x7e,0x00,0x40,0x10,0x21,0x88,0xc0,0x00,0x02,0x80,0x1e,0x3c,0x02,0x80,0x17,0x3c, +0x21,0xa8,0xc0,0x00,0x21,0xb0,0xc0,0x00,0xad,0x12,0x00,0x08,0x01,0x00,0x14,0x24, +0x5c,0x65,0xc2,0x8e,0x10,0x00,0x52,0x26,0x2b,0x10,0x42,0x02,0x73,0x00,0x40,0x10, +0x21,0x88,0xc0,0x02,0x65,0x65,0x22,0x92,0xff,0xff,0x45,0x32,0x25,0x28,0xb7,0x00, +0x10,0x00,0x42,0x24,0x65,0x65,0x22,0xa2,0x38,0x79,0xc4,0x27,0x60,0x45,0x00,0x0c, +0x10,0x00,0x06,0x24,0xf8,0x63,0x23,0x8e,0x00,0x00,0x00,0x00,0x42,0x18,0x03,0x00, +0x01,0x00,0x63,0x30,0x71,0x00,0x74,0x10,0x02,0x80,0x03,0x3c,0x68,0x15,0x63,0x24, +0xd4,0x63,0x62,0x8c,0x00,0x00,0x00,0x00,0x42,0x84,0x02,0x00,0x1f,0x00,0x10,0x32, +0xc0,0x48,0x10,0x00,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x55,0x00,0x84,0x51,0x45,0x8c,0x00,0x00,0x00,0x00, +0x02,0x1b,0x05,0x00,0x01,0x00,0x63,0x30,0xdd,0xff,0x60,0x10,0x21,0x30,0xa0,0x02, +0x25,0xb0,0x02,0x3c,0x21,0x40,0x02,0x02,0xd0,0x63,0xa7,0x8e,0xf8,0x63,0xa2,0x8e, +0x60,0x01,0x03,0x91,0x82,0x25,0x07,0x00,0x01,0x00,0x42,0x30,0xff,0x00,0x6b,0x30, +0x9a,0x00,0x54,0x10,0x3f,0x00,0x8a,0x30,0x02,0x80,0x04,0x3c,0xd4,0x9f,0x84,0x24, +0x00,0x00,0x86,0x8c,0x04,0x00,0x04,0x24,0xd0,0x63,0xc3,0x8c,0x00,0x00,0x00,0x00, +0x82,0x15,0x03,0x00,0x3f,0x00,0x42,0x30,0x05,0x00,0x42,0x28,0x0a,0x00,0x60,0x04, +0x0a,0x50,0x82,0x00,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x70,0x51,0x43,0x8c,0x04,0x00,0x0a,0x24, +0x01,0x00,0x63,0x24,0x70,0x51,0x43,0xac,0xd4,0x63,0xc2,0x8c,0x00,0x00,0x00,0x00, +0x02,0x13,0x02,0x00,0x1f,0x00,0x42,0x30,0x08,0x00,0x42,0x28,0xb8,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0xd0,0x63,0xc2,0x8c,0x00,0x00,0x00,0x00,0x3f,0x00,0x42,0x30, +0xb3,0xff,0x4b,0x14,0x00,0x00,0x00,0x00,0x9f,0x00,0x40,0x11,0x21,0x10,0x30,0x01, +0xa8,0x00,0x54,0x11,0x80,0x10,0x02,0x00,0x02,0x00,0x02,0x24,0xb0,0x00,0x42,0x11, +0x21,0x10,0x30,0x01,0x03,0x00,0x02,0x24,0xb8,0x00,0x42,0x11,0x21,0x10,0x30,0x01, +0xc0,0x00,0x44,0x11,0x21,0x10,0x30,0x01,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00, +0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x28,0x46,0x00,0x74,0x51,0xa3,0x8c, +0x21,0x10,0x66,0x01,0x90,0x44,0x44,0x90,0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00, +0xc8,0x00,0x60,0x14,0x00,0x00,0x00,0x00,0x68,0x51,0xa3,0x8c,0x80,0x10,0x0b,0x00, +0x21,0x10,0x4b,0x00,0x01,0x00,0x63,0x24,0x21,0x10,0x46,0x00,0x68,0x51,0xa3,0xac, +0x21,0x10,0x4a,0x00,0x34,0x43,0x44,0x90,0x50,0x51,0xa3,0x8c,0x00,0x00,0x00,0x00, +0x21,0x18,0x64,0x00,0x50,0x51,0xa3,0xac,0x5c,0x65,0xc2,0x8e,0x10,0x00,0x52,0x26, +0x2b,0x10,0x42,0x02,0x8f,0xff,0x40,0x14,0x21,0x88,0xc0,0x02,0x54,0x00,0xbf,0x8f, +0x50,0x00,0xbe,0x8f,0x4c,0x00,0xb7,0x8f,0x48,0x00,0xb6,0x8f,0x44,0x00,0xb5,0x8f, +0x40,0x00,0xb4,0x8f,0x3c,0x00,0xb3,0x8f,0x38,0x00,0xb2,0x8f,0x34,0x00,0xb1,0x8f, +0x30,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x58,0x00,0xbd,0x27,0xd4,0x63,0x22,0x8e, +0x00,0x00,0x00,0x00,0x42,0x14,0x02,0x00,0x10,0x00,0x43,0x30,0x90,0xff,0x60,0x10, +0x0f,0x00,0x50,0x30,0x54,0x4f,0x00,0x0c,0x48,0x00,0x04,0x24,0x74,0xff,0x40,0x10, +0x21,0x98,0x40,0x00,0x14,0x00,0x02,0x24,0x28,0x00,0x04,0x24,0x14,0x00,0x62,0xae, +0x0c,0x00,0x64,0xae,0x14,0x00,0xa3,0x8f,0xe0,0xff,0x04,0x24,0x08,0x00,0x07,0x24, +0x80,0x00,0x63,0x34,0x14,0x00,0xa3,0xaf,0xd4,0x63,0x26,0x8e,0x24,0x18,0x64,0x00, +0xff,0xe0,0x04,0x24,0x42,0x14,0x06,0x00,0x1f,0x00,0x42,0x30,0x25,0x18,0x62,0x00, +0x14,0x00,0xa3,0xaf,0xd0,0x63,0x25,0x8e,0x24,0x18,0x64,0x00,0x02,0x23,0x06,0x00, +0x82,0x13,0x05,0x00,0x00,0x1f,0x42,0x30,0x25,0x18,0x62,0x00,0xff,0xff,0x02,0x3c, +0xff,0x7f,0x42,0x34,0xc2,0x2f,0x05,0x00,0x24,0x18,0x62,0x00,0xc0,0x2b,0x05,0x00, +0x0f,0x00,0x02,0x3c,0x25,0x18,0x65,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x00,0x35,0x06,0x00,0xf0,0xff,0x02,0x3c,0x25,0x18,0x66,0x00,0xff,0xff,0x42,0x34, +0x0f,0x00,0x84,0x30,0x24,0x18,0x62,0x00,0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00, +0x02,0x80,0x04,0x3c,0x10,0x00,0xa5,0x27,0x8c,0x79,0x84,0x24,0x02,0x00,0x06,0x24, +0x04,0x00,0x02,0x24,0x11,0x00,0xa7,0xa3,0x14,0x00,0xa3,0xaf,0x6c,0x45,0x00,0x0c, +0x10,0x00,0xa2,0xa3,0x08,0x00,0x64,0x96,0x10,0x00,0xa5,0x27,0x02,0x00,0x06,0x24, +0x25,0x20,0x97,0x00,0x6c,0x45,0x00,0x0c,0x20,0x00,0x84,0x24,0x30,0x08,0x00,0x0c, +0x21,0x20,0x60,0x02,0xc1,0x12,0x00,0x08,0xc0,0x48,0x10,0x00,0x02,0x12,0x05,0x00, +0x01,0x00,0x42,0x30,0x14,0x00,0x54,0x10,0xc2,0x10,0x05,0x00,0x01,0x00,0x42,0x30, +0x76,0x00,0x54,0x10,0x00,0x00,0x00,0x00,0x04,0x64,0xa2,0x96,0x60,0x01,0x03,0x91, +0xc2,0x27,0x07,0x00,0x21,0x10,0x42,0x01,0x20,0x64,0xa3,0xa2,0x13,0x00,0x80,0x10, +0x04,0x64,0xa2,0xa6,0x59,0xff,0x94,0x14,0x02,0x80,0x04,0x3c,0x00,0x64,0xa2,0x96, +0x0a,0x64,0xa3,0x96,0x01,0x00,0x42,0x24,0x01,0x00,0x63,0x24,0x00,0x64,0xa2,0xa6, +0xd7,0x12,0x00,0x08,0x0a,0x64,0xa3,0xa6,0x5d,0x00,0xe0,0x04,0x00,0x00,0x00,0x00, +0x02,0x64,0xa3,0x96,0x0e,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24, +0x0e,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x02,0x64,0xc3,0xa4,0x02,0x64,0xa3,0x96, +0x10,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24,0x10,0x64,0xa2,0xa6, +0xd6,0x12,0x00,0x08,0x02,0x64,0xc3,0xa4,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x54,0x51,0x43,0x8c,0x00,0x00,0x00,0x00, +0x01,0x00,0x63,0x24,0x5c,0xff,0x54,0x15,0x54,0x51,0x43,0xac,0x21,0x10,0x30,0x01, +0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00, +0x58,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x58,0x51,0x43,0xac, +0x02,0x00,0x02,0x24,0x54,0xff,0x42,0x15,0x03,0x00,0x02,0x24,0x21,0x10,0x30,0x01, +0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00, +0x5c,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x5c,0x51,0x43,0xac, +0x03,0x00,0x02,0x24,0x4a,0xff,0x42,0x15,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00, +0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x46,0x00,0x60,0x51,0x43,0x8c, +0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24,0x43,0xff,0x44,0x15,0x60,0x51,0x43,0xac, +0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x46,0x00,0x64,0x51,0x43,0x8c,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x24, +0x64,0x51,0x43,0xac,0x21,0x10,0x30,0x01,0x80,0x10,0x02,0x00,0x21,0x10,0x50,0x00, +0x80,0x10,0x02,0x00,0x21,0x28,0x46,0x00,0x74,0x51,0xa3,0x8c,0x21,0x10,0x66,0x01, +0x90,0x44,0x44,0x90,0x02,0x19,0x03,0x00,0x2b,0x18,0x64,0x00,0x3a,0xff,0x60,0x10, +0x00,0x00,0x00,0x00,0x6c,0x51,0xa3,0x8c,0x80,0x10,0x0b,0x00,0x02,0x80,0x04,0x3c, +0x68,0x15,0x84,0x24,0x21,0x10,0x4b,0x00,0x01,0x00,0x63,0x24,0x21,0x10,0x44,0x00, +0x6c,0x51,0xa3,0xac,0x21,0x10,0x4a,0x00,0xc5,0x43,0x44,0x90,0x50,0x51,0xa3,0x8c, +0x00,0x00,0x00,0x00,0x21,0x18,0x64,0x00,0x1a,0x13,0x00,0x08,0x50,0x51,0xa3,0xac, +0x00,0x64,0xa3,0x96,0x08,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24, +0x08,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x00,0x64,0xc3,0xa4,0x08,0x00,0xe0,0x04, +0x00,0x00,0x00,0x00,0x02,0x64,0xa3,0x96,0x0c,0x64,0xa2,0x96,0x01,0x00,0x63,0x24, +0x01,0x00,0x42,0x24,0x0c,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x02,0x64,0xc3,0xa4, +0x00,0x64,0xa3,0x96,0x06,0x64,0xa2,0x96,0x01,0x00,0x63,0x24,0x01,0x00,0x42,0x24, +0x06,0x64,0xa2,0xa6,0xd6,0x12,0x00,0x08,0x00,0x64,0xc3,0xa4,0x25,0xb0,0x05,0x3c, +0x4c,0x00,0xa2,0x34,0x02,0x80,0x07,0x3c,0x00,0x00,0x43,0x90,0x68,0x15,0xe4,0x24, +0xed,0x4a,0x82,0x90,0x03,0x00,0x66,0x30,0x24,0x00,0x46,0x10,0x00,0x00,0x00,0x00, +0x18,0x00,0xc0,0x14,0x25,0xb0,0x03,0x3c,0xe6,0x42,0x82,0x90,0x00,0x00,0x00,0x00, +0x15,0x00,0x40,0x14,0x58,0x00,0x62,0x34,0x1c,0x00,0x02,0x24,0x50,0x0c,0xa3,0x34, +0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c, +0x58,0x0c,0x42,0x34,0x1c,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x25,0xb0,0x03,0x3c,0x58,0x00,0x62,0x34,0x00,0x00,0x45,0x8c,0x29,0xb0,0x04,0x3c, +0x5c,0x00,0x63,0x34,0x00,0x00,0x85,0xac,0x00,0x00,0x65,0x8c,0x68,0x15,0xe2,0x24, +0x04,0x00,0x84,0x34,0xed,0x4a,0x46,0xa0,0x00,0x00,0x85,0xac,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x25,0xb0,0x02,0x3c,0xe8,0xff,0xbd,0x27,0x10,0x00,0xbf,0xaf, +0x2d,0x0a,0x46,0x34,0xa2,0x0d,0x43,0x34,0xa4,0x0d,0x44,0x34,0xa6,0x0d,0x45,0x34, +0xa8,0x0d,0x42,0x34,0x00,0x00,0x67,0x94,0x00,0x00,0x88,0x94,0x00,0x00,0xa9,0x94, +0x00,0x00,0x44,0x94,0x00,0x00,0xc3,0x90,0x02,0x80,0x0a,0x3c,0x68,0x15,0x42,0x25, +0x40,0x00,0x63,0x34,0xff,0x00,0x63,0x30,0xde,0x42,0x44,0xa4,0x00,0x00,0xc3,0xa0, +0xd8,0x42,0x47,0xa4,0xda,0x42,0x48,0xa4,0xdc,0x42,0x49,0xa4,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x25,0xb0,0x07,0x3c,0x5b,0x0a,0xe2,0x34,0x00,0x00,0x44,0x90, +0x68,0x15,0x46,0x25,0x5c,0x0a,0xe2,0x34,0x00,0x00,0x45,0x90,0xd8,0x42,0xc3,0x94, +0xda,0x42,0xc2,0x94,0xdc,0x42,0xc9,0x94,0xde,0x42,0xc8,0x94,0xff,0x00,0x84,0x30, +0x21,0x18,0x62,0x00,0x00,0x22,0x04,0x00,0xff,0x00,0xa5,0x30,0x21,0x20,0x85,0x00, +0x21,0x18,0x69,0x00,0xff,0xff,0x82,0x30,0x21,0x18,0x68,0x00,0x21,0x18,0x62,0x00, +0x64,0x0c,0xe7,0x34,0xff,0xff,0x42,0x30,0xe0,0x42,0xc3,0xac,0x00,0x00,0xe2,0xa4, +0xe4,0x42,0xc4,0xa4,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x45,0x25, +0x00,0x40,0xa2,0x8c,0x01,0x00,0x03,0x24,0x0f,0x00,0x44,0x30,0x07,0x00,0x83,0x10, +0x00,0x00,0x00,0x00,0x88,0x59,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0xe4,0x42,0xa2,0x8c, +0x00,0x00,0x00,0x00,0x02,0x17,0x02,0x00,0x01,0x00,0x42,0x30,0xf5,0xff,0x40,0x14, +0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00, +0x03,0x00,0x63,0x30,0x3f,0x00,0x64,0x10,0x68,0x15,0x44,0x25,0xe6,0x42,0x82,0x90, +0x00,0x00,0x00,0x00,0x07,0x00,0x40,0x14,0x01,0x00,0x03,0x24,0x00,0x40,0x82,0x8c, +0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x0f,0x00,0x42,0x30,0x3c,0x00,0x43,0x10, +0x25,0xb0,0x02,0x3c,0x68,0x15,0x45,0x25,0xe6,0x42,0xa3,0x90,0xff,0x00,0x02,0x24, +0xe0,0xff,0x62,0x14,0x25,0xb0,0x03,0x3c,0xc8,0x42,0xa2,0x94,0xe0,0x42,0xa6,0x8c, +0x50,0x0c,0x63,0x34,0x00,0x00,0x64,0x90,0x2b,0x10,0xc2,0x00,0x85,0x00,0x40,0x10, +0x7f,0x00,0x84,0x30,0xff,0xff,0x82,0x24,0xff,0x00,0x44,0x30,0x68,0x15,0x45,0x25, +0xd0,0x42,0xa3,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x64,0x00,0x78,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x21,0x20,0x60,0x00,0x68,0x15,0x43,0x25,0xe0,0x42,0x62,0x8c, +0x00,0x00,0x00,0x00,0x11,0x27,0x42,0x2c,0x6d,0x00,0x40,0x14,0x3a,0x00,0x82,0x2c, +0x32,0x00,0x04,0x24,0x44,0x00,0x03,0x24,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34, +0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c,0x50,0x0c,0x42,0x34,0x00,0x00,0x44,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x58,0x0c,0x42,0x34, +0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x69,0x14,0x00,0x08, +0x00,0x00,0x00,0x00,0xe6,0x42,0xa2,0x90,0x00,0x00,0x00,0x00,0xbf,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x24,0x7b,0x14,0x00,0x08,0xe6,0x42,0xa2,0xa0, +0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x63,0x30, +0xa4,0xff,0x60,0x10,0xff,0xff,0x02,0x34,0xe8,0x63,0x83,0x8c,0x00,0x00,0x00,0x00, +0xa0,0xff,0x62,0x10,0x00,0x00,0x00,0x00,0xe0,0x42,0x83,0x8c,0x00,0x00,0x00,0x00, +0x65,0x00,0x62,0x2c,0x59,0x00,0x40,0x14,0x28,0x00,0x62,0x2c,0xd2,0x42,0x83,0x90, +0x00,0x00,0x00,0x00,0x00,0x16,0x03,0x00,0x03,0x16,0x02,0x00,0xfe,0xff,0x42,0x24, +0xfc,0xff,0x42,0x28,0x02,0x00,0x40,0x10,0xfe,0xff,0x62,0x24,0xfc,0xff,0x02,0x24, +0xd2,0x42,0x82,0xa0,0x68,0x15,0x45,0x25,0xe8,0x63,0xa2,0x8c,0xd2,0x42,0xa3,0x90, +0xce,0x42,0xa6,0x90,0x02,0x11,0x02,0x00,0x7f,0x00,0x42,0x30,0x0a,0x00,0x44,0x24, +0x23,0x18,0x83,0x00,0x00,0x26,0x03,0x00,0x03,0x26,0x04,0x00,0xff,0x00,0xc2,0x30, +0x2a,0x10,0x44,0x00,0x4d,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x26,0x06,0x00, +0x03,0x26,0x04,0x00,0x68,0x15,0x43,0x25,0xe0,0x42,0x62,0x8c,0x00,0x00,0x00,0x00, +0x11,0x27,0x42,0x2c,0x33,0x00,0x40,0x14,0x3a,0x00,0x82,0x28,0x32,0x00,0x82,0x28, +0x30,0x00,0x40,0x10,0x3a,0x00,0x82,0x28,0x32,0x00,0x04,0x24,0x44,0x00,0x03,0x24, +0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,0x00,0x00,0x43,0xa0,0x25,0xb0,0x02,0x3c, +0x50,0x0c,0x42,0x34,0xff,0x00,0x84,0x30,0x00,0x00,0x44,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c,0x58,0x0c,0x42,0x34,0x00,0x00,0x44,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x69,0x14,0x00,0x08,0x00,0x00,0x00,0x00, +0x95,0xff,0x40,0x10,0x48,0x00,0x03,0x24,0xa2,0x14,0x00,0x08,0x44,0x00,0x03,0x24, +0xd1,0x42,0xa3,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x83,0x00,0x9a,0x14,0x00,0x08, +0x0b,0x20,0x62,0x00,0xca,0x42,0xa2,0x94,0x00,0x00,0x00,0x00,0x2b,0x10,0xc2,0x00, +0x7a,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0xcc,0x42,0xa2,0x94,0x00,0x00,0x00,0x00, +0x2b,0x10,0xc2,0x00,0x07,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x92,0x14,0x00,0x08, +0x01,0x00,0x82,0x24,0xd2,0xff,0x40,0x10,0x48,0x00,0x03,0x24,0xf4,0x14,0x00,0x08, +0x44,0x00,0x03,0x24,0x92,0x14,0x00,0x08,0x02,0x00,0x82,0x24,0xb2,0xff,0x40,0x10, +0x68,0x15,0x45,0x25,0xd2,0x42,0x83,0x90,0x00,0x00,0x00,0x00,0x00,0x16,0x03,0x00, +0x03,0x16,0x02,0x00,0x02,0x00,0x42,0x24,0x0d,0x00,0x42,0x28,0x09,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0xd8,0x14,0x00,0x08,0x0c,0x00,0x02,0x24,0xcf,0x42,0xa3,0x80, +0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x2a,0x10,0x82,0x00,0xe9,0x14,0x00,0x08, +0x0b,0x20,0x62,0x00,0xd8,0x14,0x00,0x08,0x02,0x00,0x62,0x24,0xc0,0xff,0xbd,0x27, +0x28,0x00,0xb4,0xaf,0x25,0xb0,0x14,0x3c,0x24,0x00,0xb3,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf, +0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x20,0x00,0xb2,0xaf,0xd8,0x00,0x86,0x36, +0x00,0x00,0xc3,0x90,0x02,0x80,0x02,0x3c,0x68,0x15,0x51,0x24,0x2a,0xb0,0x10,0x3c, +0xa0,0xff,0x02,0x24,0x25,0x18,0x62,0x00,0x34,0x00,0x05,0x36,0xfe,0xff,0x02,0x24, +0xbc,0x42,0x32,0x92,0x40,0x00,0x04,0x24,0x00,0x00,0xc3,0xa0,0x00,0x00,0xa2,0xa0, +0x54,0x4f,0x00,0x0c,0x00,0x96,0x12,0x00,0x21,0x98,0x40,0x00,0x8d,0x00,0x60,0x12, +0x00,0x40,0x02,0x3c,0x08,0x00,0x63,0x8e,0xb0,0x03,0x82,0x36,0x25,0xb0,0x1e,0x3c, +0x21,0x20,0x60,0x02,0x00,0x00,0x43,0xac,0xfb,0x44,0x00,0x0c,0x21,0xb8,0x20,0x02, +0x42,0x00,0xd5,0x37,0x03,0x0c,0xd1,0x37,0x17,0x0e,0xd6,0x37,0x04,0x00,0x14,0x24, +0x2a,0xb0,0x03,0x3c,0x06,0x00,0x63,0x34,0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00, +0x00,0xff,0x42,0x30,0x0a,0x00,0x40,0x18,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c, +0x94,0xa2,0x84,0x24,0x00,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x94, +0x00,0x00,0x00,0x00,0x00,0xff,0x42,0x30,0xfc,0xff,0x40,0x1c,0x00,0x00,0x00,0x00, +0x08,0x00,0x65,0x8e,0x20,0x10,0x06,0x3c,0x01,0x00,0x04,0x24,0x00,0xfe,0xc6,0x34, +0x40,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa4,0xaf,0x4d,0x01,0x00,0x0c, +0x01,0x00,0x04,0x24,0x02,0x80,0x02,0x3c,0x98,0xa2,0x42,0x24,0x00,0x00,0x45,0x8c, +0x01,0x00,0x03,0x24,0x21,0x20,0x00,0x00,0x00,0x00,0xa3,0xa0,0xff,0xff,0x03,0x24, +0x00,0x00,0xa3,0xa2,0x00,0x00,0x22,0x92,0x00,0x00,0x00,0x00,0xff,0x00,0x42,0x30, +0x40,0x00,0x42,0x34,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30, +0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x02,0x00,0x02,0x24, +0x02,0x80,0x04,0x3c,0x00,0x00,0xa2,0xa0,0x68,0x15,0x83,0x24,0xc1,0x42,0x62,0x90, +0x00,0x00,0xc4,0x92,0x21,0x28,0x00,0x00,0x00,0x00,0xc2,0xa2,0xff,0x00,0x90,0x30, +0x01,0x00,0xa2,0x24,0xff,0x00,0x45,0x30,0x06,0x00,0xa3,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0xa2,0x24,0xef,0xff,0x02,0x24,0x64,0x00,0x04,0x24,0x00,0x00,0xa2,0xa2, +0x1a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00, +0xbf,0x00,0x42,0x30,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30, +0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x1a,0x0c,0x00,0x0c, +0x84,0x03,0x04,0x24,0xf4,0x08,0xc2,0x37,0x00,0x00,0x43,0x8c,0x00,0x80,0x04,0x3c, +0xdf,0x07,0x84,0x34,0x00,0x00,0xd0,0xa2,0x21,0x10,0x00,0x00,0x24,0x28,0x64,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x00,0x00,0xa0,0xa2,0x00,0x00,0x22,0x92,0x21,0x20,0x00,0x00, +0xff,0x00,0x42,0x30,0x40,0x00,0x42,0x34,0x00,0x00,0x22,0xa2,0x01,0x00,0x82,0x24, +0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24, +0xbe,0x42,0xe2,0x92,0x1f,0x00,0xa3,0x30,0x2b,0x10,0x62,0x00,0x0a,0x00,0x40,0x10, +0x02,0x80,0x02,0x3c,0xbf,0x42,0xe2,0x92,0x00,0x00,0x00,0x00,0x2b,0x10,0x43,0x00, +0x05,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x01,0x00,0x02,0x3c,0x25,0x10,0x62,0x00, +0x21,0x90,0x42,0x02,0x02,0x80,0x02,0x3c,0xee,0x7d,0x43,0x90,0x22,0x00,0x02,0x24, +0x1c,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0x1b,0x00,0x62,0x10,0x02,0x80,0x03,0x3c, +0xff,0xff,0x94,0x26,0x1a,0x0c,0x00,0x0c,0xf4,0x01,0x04,0x24,0x89,0xff,0x81,0x06, +0x2a,0xb0,0x03,0x3c,0x04,0x00,0x60,0x12,0x25,0xb0,0x02,0x3c,0x70,0x4f,0x00,0x0c, +0x21,0x20,0x60,0x02,0x25,0xb0,0x02,0x3c,0xd8,0x02,0x42,0x34,0x00,0x00,0x52,0xac, +0x21,0x10,0x40,0x02,0x3c,0x00,0xbf,0x8f,0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x40,0x00,0xbd,0x27,0x02,0x80,0x03,0x3c,0x68,0x15,0x63,0x24,0xbe,0x42,0x62,0x90, +0xc0,0x07,0xa3,0x30,0x82,0x19,0x03,0x00,0x2b,0x10,0x62,0x00,0xe0,0xff,0x40,0x10, +0x02,0x80,0x04,0x3c,0x68,0x15,0x84,0x24,0xbf,0x42,0x82,0x90,0x00,0x00,0x00,0x00, +0x2b,0x10,0x43,0x00,0xda,0xff,0x40,0x10,0x00,0x12,0x03,0x00,0x10,0x00,0x03,0x3c, +0x25,0x10,0x43,0x00,0xd8,0x15,0x00,0x08,0x21,0x90,0x42,0x02,0xe0,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34, +0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x6a,0x44,0x00,0x0c, +0x14,0x00,0xb1,0xaf,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x02,0x80,0x12,0x3c, +0xff,0xff,0x05,0x36,0x56,0x30,0x06,0x24,0x6a,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24, +0x68,0x15,0x51,0x26,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x04,0x43,0x23,0x92, +0x04,0x00,0x02,0x24,0x20,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0x14,0x43,0x25,0x8e, +0x25,0xb0,0x10,0x3c,0x15,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e, +0x15,0x5a,0x00,0x0c,0x04,0x0e,0x04,0x36,0x18,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c, +0x08,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x10,0x0e,0x04,0x36, +0x14,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x14,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e, +0x15,0x5a,0x00,0x0c,0x18,0x0e,0x04,0x36,0x14,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c, +0x1c,0x0e,0x04,0x36,0x68,0x15,0x43,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x04,0x00,0x02,0x24,0x20,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x04,0x43,0x62,0xa0,0x00,0x0e,0x42,0x34,0x00,0x00,0x43,0x8c, +0x14,0x43,0x25,0x8e,0x00,0x00,0x00,0x00,0xde,0xff,0x65,0x14,0x25,0xb0,0x10,0x3c, +0x32,0x16,0x00,0x08,0x68,0x15,0x43,0x26,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf, +0x0f,0x00,0x10,0x3c,0xff,0xff,0x05,0x36,0xf0,0xf8,0x06,0x34,0x15,0x00,0x04,0x24, +0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x6a,0x44,0x00,0x0c,0x14,0x00,0xb1,0xaf, +0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x56,0x30,0x06,0x24, +0x6a,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0x02,0x80,0x10,0x3c,0x1a,0x0c,0x00,0x0c, +0x64,0x00,0x04,0x24,0x68,0x15,0x02,0x26,0x04,0x43,0x46,0x90,0x25,0xb0,0x11,0x3c, +0x10,0x10,0x12,0x3c,0x01,0x00,0x03,0x24,0x00,0x0e,0x24,0x36,0x1e,0x00,0xc3,0x10, +0x10,0x10,0x45,0x36,0x15,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x04,0x0e,0x24,0x36, +0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x08,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c, +0x10,0x10,0x05,0x24,0x10,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36, +0x14,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x18,0x0e,0x24,0x36, +0x15,0x5a,0x00,0x0c,0x10,0x10,0x45,0x36,0x1c,0x0e,0x24,0x36,0x15,0x5a,0x00,0x0c, +0x10,0x10,0x45,0x36,0x68,0x15,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x04,0x43,0x62,0xa0,0x00,0x00,0x86,0x8c,0x00,0x00,0x00,0x00, +0xe0,0xff,0xc5,0x14,0x68,0x15,0x03,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x20,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x04,0x43,0x62,0xa0,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf, +0x10,0x00,0xb0,0xaf,0x0f,0x00,0x11,0x3c,0x01,0x00,0x10,0x3c,0xff,0xff,0x25,0x36, +0xf4,0x98,0x06,0x36,0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf,0x6a,0x44,0x00,0x0c, +0x18,0x00,0xb2,0xaf,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x56,0x30,0x06,0x36, +0xff,0xff,0x25,0x36,0x1a,0x00,0x04,0x24,0x6a,0x44,0x00,0x0c,0x02,0x80,0x11,0x3c, +0x68,0x15,0x30,0x26,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x04,0x43,0x02,0x92, +0x25,0xb0,0x12,0x3c,0x08,0x00,0x40,0x14,0x08,0x0e,0x44,0x36,0x25,0xb0,0x02,0x3c, +0x00,0x0e,0x42,0x34,0x00,0x00,0x45,0x8c,0xec,0x42,0x03,0x8e,0x00,0x00,0x00,0x00, +0x17,0x00,0xa3,0x10,0x68,0x15,0x22,0x26,0xe8,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c, +0x00,0x00,0x00,0x00,0xec,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x00,0x0e,0x44,0x36, +0xf0,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x04,0x0e,0x44,0x36,0xf4,0x42,0x05,0x8e, +0x15,0x5a,0x00,0x0c,0x10,0x0e,0x44,0x36,0xf8,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c, +0x14,0x0e,0x44,0x36,0xfc,0x42,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x18,0x0e,0x44,0x36, +0x00,0x43,0x05,0x8e,0x15,0x5a,0x00,0x0c,0x1c,0x0e,0x44,0x36,0x68,0x15,0x22,0x26, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x04,0x43,0x40,0xa0,0xe0,0xff,0xbd,0x27, +0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x0f,0x00,0x11,0x3c,0x01,0x00,0x10,0x3c, +0xff,0xff,0x25,0x36,0xf4,0x98,0x06,0x36,0x15,0x00,0x04,0x24,0x1c,0x00,0xbf,0xaf, +0x6a,0x44,0x00,0x0c,0x18,0x00,0xb2,0xaf,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24, +0x02,0x80,0x12,0x3c,0xff,0xff,0x25,0x36,0x56,0x30,0x06,0x36,0x6a,0x44,0x00,0x0c, +0x1a,0x00,0x04,0x24,0x68,0x15,0x51,0x26,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24, +0x04,0x43,0x23,0x92,0x03,0x00,0x02,0x24,0x2c,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c, +0xec,0x42,0x25,0x8e,0x25,0xb0,0x10,0x3c,0x15,0x5a,0x00,0x0c,0x00,0x0e,0x04,0x36, +0xf0,0x42,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x04,0x0e,0x04,0x36,0xf4,0x42,0x25,0x8e, +0x15,0x5a,0x00,0x0c,0x10,0x0e,0x04,0x36,0xf8,0x42,0x25,0x8e,0x15,0x5a,0x00,0x0c, +0x14,0x0e,0x04,0x36,0xfc,0x42,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x18,0x0e,0x04,0x36, +0x00,0x43,0x25,0x8e,0x15,0x5a,0x00,0x0c,0x1c,0x0e,0x04,0x36,0x08,0x43,0x24,0x8e, +0xe8,0x42,0x22,0x8e,0x00,0x00,0x00,0x00,0x21,0x28,0x44,0x00,0x00,0xff,0xa3,0x30, +0xff,0xff,0x02,0x3c,0xff,0x00,0x42,0x34,0x01,0x3f,0x63,0x2c,0x24,0x10,0xa2,0x00, +0x0c,0x00,0x60,0x10,0x08,0x0e,0x04,0x36,0x15,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00, +0x68,0x15,0x43,0x26,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03, +0x04,0x43,0x62,0xa0,0xfa,0x16,0x00,0x08,0x00,0x3f,0x45,0x34,0x00,0x0e,0x42,0x34, +0x00,0x00,0x43,0x8c,0xec,0x42,0x25,0x8e,0x00,0x00,0x00,0x00,0xd2,0xff,0x65,0x14, +0x25,0xb0,0x10,0x3c,0xfd,0x16,0x00,0x08,0x68,0x15,0x43,0x26,0xd0,0xff,0xbd,0x27, +0x18,0x00,0xb2,0xaf,0x02,0x80,0x12,0x3c,0x24,0x00,0xb5,0xaf,0x20,0x00,0xb4,0xaf, +0x68,0x15,0x42,0x26,0x28,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf, +0x10,0x00,0xb0,0xaf,0xe8,0x63,0x43,0x8c,0x02,0x80,0x15,0x3c,0xee,0x7d,0xa4,0x92, +0x04,0x43,0x53,0x90,0x25,0xb0,0x02,0x3c,0x0f,0x0c,0x42,0x34,0x02,0x19,0x03,0x00, +0x00,0x00,0x44,0xa0,0x7f,0x00,0x74,0x30,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x68,0x15,0x42,0x26,0x00,0x40,0x43,0x8c,0x00,0x10,0x02,0x24,0xf0,0xf0,0x63,0x30, +0x98,0x00,0x62,0x10,0x01,0x00,0x02,0x24,0x25,0xb0,0x09,0x3c,0x4c,0x00,0x23,0x35, +0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30,0x3f,0x00,0x40,0x10, +0x68,0x15,0x45,0x26,0x68,0x15,0x4a,0x26,0x00,0x40,0x42,0x8d,0x00,0x00,0x00,0x00, +0x02,0x13,0x02,0x00,0x0f,0x00,0x42,0x30,0x38,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x00,0x0e,0x25,0x35,0x00,0x00,0xa2,0x8c,0x00,0x00,0x00,0x00,0x8c,0x00,0x40,0x10, +0x10,0x0e,0x26,0x35,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x08,0x0e,0x22,0x35,0x04,0x0e,0x24,0x35,0x00,0x00,0x43,0x8c, +0x00,0x00,0xa5,0x8c,0x00,0x00,0x82,0x8c,0xe8,0x42,0x43,0xad,0xec,0x42,0x45,0xad, +0xf0,0x42,0x42,0xad,0x14,0x0e,0x24,0x35,0x18,0x0e,0x22,0x35,0x1c,0x0e,0x25,0x35, +0x00,0x00,0xc6,0x8c,0x00,0x00,0x87,0x8c,0x00,0x00,0x48,0x8c,0x00,0x00,0xa4,0x8c, +0x00,0xff,0x63,0x30,0x9a,0x0c,0x22,0x35,0x02,0x1a,0x03,0x00,0x00,0x43,0x44,0xad, +0x00,0x00,0x43,0xa0,0xf4,0x42,0x46,0xad,0xf8,0x42,0x47,0xad,0xfc,0x42,0x48,0xad, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0xee,0x7d,0xa3,0x92,0x22,0x00,0x02,0x24, +0xac,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0xab,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x68,0x15,0x44,0x26, +0x00,0x40,0x83,0x8c,0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,0x24,0x18,0x62,0x00, +0x00,0x10,0x63,0x34,0x00,0x40,0x83,0xac,0x68,0x15,0x45,0x26,0x04,0x43,0xa2,0x8c, +0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0x0f,0x00,0x40,0x14,0x68,0x15,0x42,0x26, +0x25,0xb0,0x02,0x3c,0x84,0x01,0x42,0x34,0x00,0x00,0x44,0x8c,0x0d,0x00,0x03,0x24, +0x8c,0x00,0x83,0x10,0x3e,0x00,0x02,0x24,0x4a,0x00,0x03,0x24,0x1f,0x43,0xa2,0xa0, +0x45,0x00,0x02,0x24,0x1c,0x43,0xa3,0xa0,0x1d,0x43,0xa2,0xa0,0x43,0x00,0x03,0x24, +0x1e,0x43,0xa3,0xa0,0x68,0x15,0x42,0x26,0xe8,0x63,0x43,0x8c,0x25,0xb0,0x02,0x3c, +0x60,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30,0x00,0x00,0x43,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x42,0x26,0x04,0x40,0x43,0x8c, +0x25,0xb0,0x02,0x3c,0x98,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30, +0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x42,0x26, +0x1e,0x43,0x44,0x90,0x25,0xb0,0x03,0x3c,0x66,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x42,0x26,0x1c,0x43,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x67,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x44,0x26,0x00,0x40,0x85,0x8c,0x10,0x10,0x02,0x24, +0xf0,0xf0,0xa3,0x30,0x2b,0x00,0x62,0x10,0xff,0xff,0x02,0x34,0x28,0x00,0xbf,0x8f, +0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x30,0x00,0xbd,0x27,0x0d,0x00,0x62,0x12,0x04,0x00,0x02,0x24,0x0b,0x00,0x62,0x12, +0x68,0x15,0x43,0x26,0xff,0xff,0x02,0x24,0x2e,0x17,0x00,0x08,0x04,0x43,0x62,0xa0, +0x00,0x00,0xc3,0x8c,0x3f,0x3f,0x02,0x3c,0x3f,0x3f,0x42,0x34,0x71,0xff,0x62,0x14, +0x00,0x00,0x00,0x00,0x73,0x17,0x00,0x08,0x68,0x15,0x45,0x26,0x0f,0x00,0x10,0x3c, +0x01,0x00,0x11,0x3c,0xff,0xff,0x05,0x36,0xf4,0x98,0x26,0x36,0x6a,0x44,0x00,0x0c, +0x15,0x00,0x04,0x24,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0xff,0xff,0x05,0x36, +0x56,0x30,0x26,0x36,0x6a,0x44,0x00,0x0c,0x1a,0x00,0x04,0x24,0x1a,0x0c,0x00,0x0c, +0x64,0x00,0x04,0x24,0x68,0x15,0x43,0x26,0xff,0xff,0x02,0x24,0x2e,0x17,0x00,0x08, +0x04,0x43,0x62,0xa0,0xe8,0x63,0x83,0x8c,0x00,0x00,0x00,0x00,0xd3,0xff,0x62,0x10, +0x02,0x12,0x05,0x00,0x0f,0x00,0x45,0x30,0x01,0x00,0x03,0x24,0xcf,0xff,0xa3,0x14, +0x25,0xb0,0x02,0x3c,0x4c,0x00,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00, +0x03,0x00,0x63,0x30,0xc9,0xff,0x60,0x10,0x03,0x00,0x02,0x24,0x4d,0x00,0x62,0x12, +0x04,0x00,0x62,0x2a,0x2f,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x52,0x00,0x60,0x12, +0x00,0x00,0x00,0x00,0xc1,0xff,0x65,0x16,0x00,0x00,0x00,0x00,0x1c,0x43,0x82,0x90, +0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x3e,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x1f,0x43,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0x30,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x86,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08, +0x00,0x00,0x00,0x00,0x3b,0x00,0x02,0x24,0x46,0x00,0x03,0x24,0x1f,0x43,0xa2,0xa0, +0x1c,0x43,0xa3,0xa0,0x41,0x00,0x02,0x24,0x40,0x00,0x03,0x24,0x84,0x17,0x00,0x08, +0x1d,0x43,0xa2,0xa0,0x25,0xb0,0x02,0x3c,0x0d,0x08,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0x0f,0x00,0x63,0x30,0x08,0x00,0x62,0x2c,0x0f,0x00,0x63,0x38, +0x4f,0xff,0x40,0x14,0x01,0x00,0x65,0x24,0x00,0x1c,0x05,0x00,0x00,0x16,0x05,0x00, +0x25,0x10,0x43,0x00,0x00,0x22,0x05,0x00,0x25,0x10,0x44,0x00,0x68,0x15,0x43,0x26, +0x25,0x20,0x85,0x00,0x25,0x10,0x45,0x00,0x18,0x43,0x64,0xac,0x68,0x17,0x00,0x08, +0x14,0x43,0x62,0xac,0x04,0x00,0x02,0x24,0x11,0x00,0x62,0x12,0xff,0x00,0x02,0x24, +0x92,0xff,0x62,0x16,0x00,0x00,0x00,0x00,0x1e,0x43,0x82,0x90,0x00,0x00,0x00,0x00, +0x2b,0x10,0x82,0x02,0x21,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x1c,0x43,0x82,0x90, +0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02,0x0a,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x42,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08,0x00,0x00,0x00,0x00, +0x1d,0x43,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0xf8,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x03,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08, +0x00,0x00,0x00,0x00,0x20,0x43,0x82,0x90,0x00,0x00,0x00,0x00,0x2b,0x10,0x82,0x02, +0xc0,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0xc3,0x16,0x00,0x0c,0x00,0x00,0x00,0x00, +0xbb,0x17,0x00,0x08,0x00,0x00,0x00,0x00,0x1e,0x43,0x82,0x90,0x00,0x00,0x00,0x00, +0x2b,0x10,0x82,0x02,0xe6,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x21,0x43,0x82,0x90, +0x00,0x00,0x00,0x00,0x2b,0x10,0x54,0x00,0xb2,0xff,0x40,0x14,0x00,0x00,0x00,0x00, +0xc3,0x16,0x00,0x0c,0x00,0x00,0x00,0x00,0xbb,0x17,0x00,0x08,0x00,0x00,0x00,0x00, +0x02,0x80,0x08,0x3c,0x68,0x15,0x05,0x25,0xe8,0x63,0xa4,0x8c,0xe6,0x42,0xa3,0x90, +0x02,0x11,0x04,0x00,0x26,0x00,0x60,0x14,0x7f,0x00,0x46,0x30,0x25,0xb0,0x07,0x3c, +0x4c,0x00,0xe2,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x10, +0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x34,0x1d,0x00,0x82,0x10,0x00,0x00,0x00,0x00, +0x00,0x08,0xe3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30, +0x19,0x00,0x40,0x10,0x4b,0x00,0xc2,0x2c,0x3e,0x00,0x40,0x10,0x01,0x00,0x04,0x24, +0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x49,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c, +0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,0x00,0x00,0x00,0x00,0x44,0x00,0x40,0x10, +0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x87,0x0c,0x42,0x34,0x20,0x00,0x03,0x24, +0x00,0x00,0x43,0xa0,0xd3,0x42,0x80,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x17,0x00,0x40,0x10,0x01,0x00,0x04,0x24, +0xd8,0xff,0xc2,0x24,0x1e,0x00,0x42,0x2c,0x44,0x00,0x40,0x10,0x23,0x00,0xc2,0x2c, +0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,0x00,0x00,0x00,0x00,0x3f,0x00,0x40,0x10, +0x23,0x00,0xc2,0x2c,0x25,0xb0,0x02,0x3c,0x30,0x0c,0x42,0x34,0x44,0x00,0x03,0x24, +0x00,0x00,0x43,0xa0,0xd3,0x42,0x80,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xd3,0x42,0xa2,0x90,0x00,0x00,0x00,0x00, +0xe7,0xff,0x44,0x10,0x43,0x00,0x02,0x24,0x30,0x0c,0xe3,0x34,0xd3,0x42,0xa4,0xa0, +0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0xd3,0x42,0xa2,0x90,0x00,0x00,0x00,0x00,0xc0,0xff,0x44,0x10, +0x10,0x00,0x02,0x24,0x87,0x0c,0xe3,0x34,0xd3,0x42,0xa4,0xa0,0x00,0x00,0x62,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0xc7,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90, +0x02,0x00,0x03,0x24,0xc2,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c, +0x87,0x0c,0x42,0x34,0xd3,0x42,0x83,0xa0,0x00,0x00,0x40,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xb4,0xff,0x40,0x10, +0x00,0x00,0x00,0x00,0x68,0x15,0x04,0x25,0xd3,0x42,0x82,0x90,0x02,0x00,0x03,0x24, +0xaf,0xff,0x43,0x10,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xd3,0x42,0x83,0xa0, +0x30,0x0c,0x42,0x34,0x42,0x00,0x03,0x24,0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0xff,0xff,0x8d,0x30, +0x00,0x60,0x0f,0x40,0x01,0x00,0xe1,0x35,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x02,0x80,0x06,0x3c,0x68,0x15,0xce,0x24,0x76,0x4b,0xc2,0x91,0x00,0x00,0x00,0x00, +0x1d,0x00,0x40,0x10,0x25,0xb0,0x03,0x3c,0x38,0x02,0x64,0x34,0x80,0xff,0x02,0x24, +0x00,0x00,0x82,0xa0,0x34,0x02,0x6a,0x34,0xd2,0x01,0x65,0x34,0xd6,0x01,0x66,0x34, +0xda,0x01,0x67,0x34,0xde,0x01,0x63,0x34,0x00,0x00,0xa8,0x94,0x00,0x00,0xc9,0x94, +0x00,0x00,0xeb,0x94,0x00,0x00,0x6c,0x94,0x00,0x00,0x44,0x95,0xb0,0xfe,0xa2,0x25, +0xff,0xff,0x4d,0x30,0x74,0x4b,0xc4,0xa5,0x00,0x00,0xa0,0xa4,0x6c,0x4b,0xc8,0xa5, +0x00,0x00,0xc0,0xa4,0x6e,0x4b,0xc9,0xa5,0x00,0x00,0xe0,0xa4,0x70,0x4b,0xcb,0xa5, +0x00,0x00,0x60,0xa4,0x00,0x00,0x4d,0xa5,0x72,0x4b,0xcc,0xa5,0x00,0x60,0x8f,0x40, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x2a,0xb0,0x02,0x3c,0x0a,0x00,0x45,0x34, +0x63,0x00,0x03,0x24,0xff,0xff,0x04,0x34,0x00,0x00,0xa2,0x90,0x00,0x00,0x00,0x00, +0x0a,0x00,0x40,0x10,0x68,0x15,0xc2,0x24,0x64,0x00,0x02,0x24,0xff,0xff,0x42,0x24, +0xff,0xff,0x42,0x30,0xfe,0xff,0x40,0x14,0xff,0xff,0x42,0x24,0xff,0xff,0x62,0x24, +0xff,0xff,0x43,0x30,0xf4,0xff,0x64,0x14,0x68,0x15,0xc2,0x24,0x74,0x4b,0x48,0x94, +0x72,0x4b,0x47,0x94,0x6c,0x4b,0x49,0x94,0x6e,0x4b,0x4a,0x94,0x70,0x4b,0x4b,0x94, +0x25,0xb0,0x03,0x3c,0x38,0x02,0x6c,0x34,0x34,0x02,0x62,0x34,0xd2,0x01,0x64,0x34, +0xd6,0x01,0x65,0x34,0xda,0x01,0x66,0x34,0xde,0x01,0x63,0x34,0x00,0x00,0x48,0xa4, +0x00,0x00,0x89,0xa4,0x00,0x00,0xaa,0xa4,0x00,0x00,0xcb,0xa4,0x00,0x00,0x67,0xa4, +0x00,0x00,0x80,0xa1,0x00,0x60,0x8f,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x25,0xb0,0x02,0x3c,0x08,0x00,0x43,0x34,0x00,0x00,0x64,0x94,0x03,0x00,0x49,0x34, +0x40,0x00,0x45,0x34,0x00,0x24,0x04,0x00,0x03,0x24,0x04,0x00,0xfc,0x77,0x0a,0x24, +0x00,0x03,0x46,0x34,0x04,0x03,0x47,0x34,0x0f,0x00,0x80,0x04,0x23,0x00,0x48,0x34, +0x00,0x00,0x22,0x91,0xfe,0xff,0x03,0x24,0x24,0x10,0x43,0x00,0x00,0x00,0x22,0xa1, +0x22,0x00,0x02,0x24,0x00,0x00,0xc0,0xac,0x00,0x00,0xe0,0xac,0x00,0x00,0x02,0xa1, +0xfc,0x37,0x02,0x24,0x00,0x00,0xaa,0xa4,0x00,0x00,0xa2,0xa4,0x00,0x00,0xaa,0xa4, +0x00,0x00,0xa0,0xa4,0x00,0x00,0xa0,0xa4,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xd0,0xff,0xbd,0x27,0x1c,0x00,0xb1,0xaf,0x28,0x00,0xbf,0xaf,0x24,0x00,0xb3,0xaf, +0x20,0x00,0xb2,0xaf,0x18,0x00,0xb0,0xaf,0xff,0xff,0x11,0x24,0x02,0x80,0x13,0x3c, +0x41,0xb0,0x02,0x3c,0x68,0x15,0x66,0x26,0x04,0x00,0x42,0x34,0x00,0x00,0x47,0x8c, +0x00,0x4b,0xc5,0x8c,0x02,0x80,0x03,0x3c,0xf6,0x7d,0x64,0x90,0xfc,0x4a,0xc8,0x8c, +0x02,0x80,0x02,0x3c,0x18,0x7e,0x49,0x90,0x25,0xb0,0x0a,0x3c,0x25,0x90,0xa7,0x00, +0xb0,0x03,0x42,0x35,0x00,0x00,0x52,0xac,0x00,0x24,0x04,0x00,0x00,0x00,0x48,0xac, +0x84,0x02,0x43,0x35,0x8c,0x02,0x45,0x35,0x01,0x00,0x02,0x24,0x00,0x00,0x72,0xac, +0x00,0x00,0xa4,0xac,0x88,0x04,0x22,0x11,0x00,0x4b,0xd2,0xac,0x68,0x15,0x64,0x26, +0xfc,0x4a,0x82,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x52,0x00,0x01,0x00,0x42,0x30, +0x0e,0x00,0x40,0x10,0x68,0x15,0x66,0x26,0x25,0xb0,0x0b,0x3c,0xb0,0x03,0x63,0x35, +0x01,0x00,0x06,0x24,0x00,0x00,0x66,0xac,0x04,0x00,0x62,0x35,0x00,0x00,0x4a,0x8c, +0x00,0x4b,0x83,0x8c,0x40,0x00,0x02,0x3c,0x24,0x10,0x42,0x01,0x01,0x00,0x63,0x38, +0x47,0x04,0x40,0x10,0x00,0x4b,0x83,0xac,0x68,0x15,0x66,0x26,0xfc,0x4a,0xc2,0x8c, +0x00,0x00,0x00,0x00,0x24,0x28,0x52,0x00,0x04,0x00,0xa3,0x30,0x09,0x00,0x60,0x10, +0x08,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x25,0xb0,0x03,0x3c,0x04,0x00,0x04,0x24, +0x04,0x00,0x42,0x38,0xb0,0x03,0x63,0x34,0x00,0x00,0x64,0xac,0x00,0x4b,0xc2,0xac, +0x08,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,0x10,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c, +0x00,0x00,0x00,0x00,0x08,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,0x10,0x00,0xa2,0x30, +0x06,0x00,0x40,0x10,0x20,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00, +0x10,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,0x20,0x00,0xa2,0x30,0x06,0x00,0x40,0x10, +0x40,0x00,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x38, +0x00,0x4b,0xc2,0xac,0x40,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,0x80,0x00,0xa2,0x30, +0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac, +0x80,0x00,0xa2,0x30,0x06,0x00,0x40,0x10,0x00,0x01,0xa2,0x30,0x00,0x4b,0xc2,0x8c, +0x00,0x00,0x00,0x00,0x80,0x00,0x42,0x38,0x00,0x4b,0xc2,0xac,0x00,0x01,0xa2,0x30, +0x06,0x00,0x40,0x10,0x00,0x02,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00, +0x00,0x01,0x42,0x38,0x00,0x4b,0xc2,0xac,0x00,0x02,0xa2,0x30,0x06,0x00,0x40,0x10, +0x00,0x04,0xa2,0x30,0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x00,0x02,0x42,0x38, +0x00,0x4b,0xc2,0xac,0x00,0x04,0xa2,0x30,0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x00,0x4b,0xc2,0x8c,0x00,0x00,0x00,0x00,0x00,0x04,0x42,0x38,0x00,0x4b,0xc2,0xac, +0x00,0x08,0xa2,0x30,0x36,0x00,0x40,0x10,0x2a,0xb0,0x03,0x3c,0x00,0x00,0x6a,0x8c, +0xff,0x00,0x02,0x24,0xff,0x00,0x44,0x31,0x2c,0x00,0x82,0x10,0x00,0x80,0x42,0x31, +0x35,0x04,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01, +0x0b,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x68,0x64,0xc2,0x90,0x20,0xb0,0x03,0x3c, +0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,0x0c,0x00,0x4a,0x8c,0x25,0xb0,0x03,0x3c, +0xb0,0x03,0x63,0x34,0x00,0x00,0x6a,0xac,0xff,0x00,0x44,0x31,0xff,0x00,0x02,0x24, +0x1a,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0x20,0x65,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0xb4,0x64,0x03,0xae,0x21,0x20,0x00,0x00,0x68,0x64,0x0a,0xa2,0x20,0x00,0x07,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xfc,0x4a,0x05,0x8e,0x02,0x80,0x06,0x3c, +0xcc,0x7e,0xc4,0x8c,0xff,0xc7,0x02,0x24,0x24,0x28,0xa2,0x00,0x25,0xb0,0x02,0x3c, +0x04,0x00,0x84,0x34,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac, +0x00,0x00,0x65,0xac,0xcc,0x7e,0xc4,0xac,0xfc,0x4a,0x05,0xae,0x68,0x15,0x63,0x26, +0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,0x00,0x08,0x42,0x38,0x00,0x4b,0x62,0xac, +0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x52,0x00, +0x00,0x10,0x42,0x30,0x38,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c,0x08,0x00,0x43,0x34, +0x00,0x00,0x6a,0x8c,0xff,0x00,0x02,0x24,0xff,0x00,0x44,0x31,0x2c,0x00,0x82,0x10, +0x00,0x80,0x42,0x31,0xfb,0x03,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c, +0x24,0x10,0x42,0x01,0x0b,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x70,0x64,0xa2,0x90, +0x20,0xb0,0x03,0x3c,0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00,0x0c,0x00,0x4a,0x8c, +0x25,0xb0,0x03,0x3c,0xb0,0x03,0x63,0x34,0x00,0x00,0x6a,0xac,0xff,0x00,0x44,0x31, +0xff,0x00,0x02,0x24,0x1a,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31, +0x38,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x21,0x30,0x60,0x00,0xcc,0x64,0x03,0xae,0x01,0x00,0x04,0x24,0x70,0x64,0x0a,0xa2, +0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0xfc,0x4a,0x05,0x8e, +0x02,0x80,0x06,0x3c,0xcc,0x7e,0xc4,0x8c,0xff,0xc7,0x02,0x24,0x24,0x28,0xa2,0x00, +0x25,0xb0,0x02,0x3c,0x10,0x00,0x84,0x34,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c, +0x00,0x00,0x44,0xac,0x00,0x00,0x65,0xac,0xcc,0x7e,0xc4,0xac,0xfc,0x4a,0x05,0xae, +0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38, +0x00,0x4b,0x62,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x52,0x00,0x00,0x20,0x42,0x30,0x37,0x00,0x40,0x10,0x2a,0xb0,0x02,0x3c, +0x04,0x00,0x43,0x34,0x00,0x00,0x6a,0x8c,0xff,0x00,0x02,0x24,0xff,0x00,0x44,0x31, +0xe9,0x03,0x82,0x10,0x00,0x80,0x42,0x31,0xc1,0x03,0x40,0x14,0x00,0x80,0x02,0x3c, +0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x0b,0x00,0x40,0x10,0xff,0x00,0x02,0x24, +0x6c,0x64,0xa2,0x90,0x20,0xb0,0x03,0x3c,0x00,0x12,0x02,0x00,0x21,0x10,0x43,0x00, +0x0c,0x00,0x4a,0x8c,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x63,0x34,0x00,0x00,0x6a,0xac, +0xff,0x00,0x44,0x31,0xff,0x00,0x02,0x24,0x1a,0x00,0x82,0x10,0x68,0x15,0x70,0x26, +0xff,0x00,0x43,0x31,0x2c,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00, +0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0xc0,0x64,0x03,0xae,0x01,0x00,0x04,0x24, +0x6c,0x64,0x0a,0xa2,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0xfc,0x4a,0x05,0x8e,0x02,0x80,0x06,0x3c,0xcc,0x7e,0xc4,0x8c,0xff,0xc7,0x02,0x24, +0x24,0x28,0xa2,0x00,0x25,0xb0,0x02,0x3c,0x20,0x00,0x84,0x34,0x80,0x03,0x42,0x34, +0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x65,0xac,0xcc,0x7e,0xc4,0xac, +0xfc,0x4a,0x05,0xae,0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00, +0x00,0x20,0x42,0x38,0x00,0x4b,0x62,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c, +0x00,0x00,0x00,0x00,0x24,0x10,0x52,0x00,0x00,0x80,0x42,0x30,0x58,0x00,0x40,0x10, +0x2a,0xb0,0x06,0x3c,0x0c,0x00,0xc3,0x34,0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24, +0xff,0x00,0x44,0x31,0x9d,0x03,0x87,0x10,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14, +0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10, +0xff,0x00,0x02,0x24,0x40,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00, +0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x48,0x64,0xa4,0xa0, +0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10, +0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00, +0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,0x48,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26, +0x48,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31, +0x00,0x00,0x4a,0xac,0xa9,0x1a,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac, +0xff,0x00,0x02,0x24,0x24,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31, +0xf0,0x64,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x21,0x30,0x60,0x00,0x48,0x64,0x0a,0xa2,0x84,0x64,0x03,0xae,0x03,0x00,0x04,0x24, +0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x0a,0x3c, +0xdc,0x7e,0x47,0x91,0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,0xfc,0x4a,0x06,0x8e, +0x01,0x00,0x08,0x3c,0x80,0xff,0x02,0x24,0x25,0x38,0xe2,0x00,0x00,0x80,0x03,0x35, +0x80,0x00,0xa5,0x34,0x27,0x18,0x03,0x00,0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c, +0x24,0x30,0xc3,0x00,0x25,0x20,0x85,0x00,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c, +0x00,0x00,0x44,0xac,0x27,0x88,0x08,0x00,0x00,0x00,0x66,0xac,0xcc,0x7e,0x25,0xad, +0xdc,0x7e,0x47,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c, +0x00,0x00,0x00,0x00,0x00,0x80,0x42,0x38,0x00,0x4b,0x62,0xac,0x68,0x15,0x65,0x26, +0xfc,0x4a,0xa2,0x8c,0x01,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00, +0x24,0x10,0x43,0x00,0x56,0x00,0x40,0x10,0x2a,0xb0,0x06,0x3c,0x10,0x00,0xc3,0x34, +0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0x49,0x03,0x87,0x10, +0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c, +0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24, +0x41,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30, +0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x4c,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90, +0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00, +0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14, +0xff,0x00,0x44,0x30,0x4c,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x4c,0x64,0x43,0x90, +0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac, +0x08,0x1b,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24, +0x22,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0xf0,0x64,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0x84,0x64,0x03,0xae,0x03,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x4c,0x64,0x0a,0xa2, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,0xdc,0x7e,0x27,0x91, +0x02,0x80,0x08,0x3c,0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,0x01,0x00,0x02,0x3c, +0x00,0x80,0x42,0x34,0x40,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00, +0x80,0x00,0xa5,0x34,0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00, +0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac, +0xcc,0x7e,0x05,0xad,0xdc,0x7e,0x27,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26, +0x00,0x4b,0x43,0x8c,0x01,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac, +0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x02,0x00,0x03,0x3c,0x24,0x10,0x52,0x00, +0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,0x2a,0xb0,0x06,0x3c,0x14,0x00,0xc3,0x34, +0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0xcf,0x02,0x87,0x10, +0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c, +0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24, +0x42,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30, +0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x50,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90, +0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00, +0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14, +0xff,0x00,0x44,0x30,0x50,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x50,0x64,0x43,0x90, +0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac, +0x64,0x1b,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24, +0x25,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0xfc,0x64,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0x50,0x64,0x0a,0xa2,0x90,0x64,0x03,0xae,0x04,0x00,0x04,0x24,0x20,0x00,0x07,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x0a,0x3c,0xdc,0x7e,0x47,0x91, +0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,0xfc,0x4a,0x06,0x8e,0x06,0x00,0x02,0x3c, +0x20,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x01,0xa5,0x34, +0x25,0xb0,0x03,0x3c,0x04,0x00,0x02,0x3c,0x00,0x26,0x07,0x00,0x26,0x88,0x22,0x02, +0xb0,0x03,0x68,0x34,0x25,0x20,0x85,0x00,0x80,0x03,0x63,0x34,0x41,0xb0,0x02,0x3c, +0x00,0x00,0x64,0xac,0x00,0x00,0x46,0xac,0xcc,0x7e,0x25,0xad,0xdc,0x7e,0x47,0xa1, +0xfc,0x4a,0x06,0xae,0x00,0x00,0x11,0xad,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c, +0x02,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26, +0xfc,0x4a,0xa2,0x8c,0x04,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00, +0x24,0x10,0x43,0x00,0x58,0x00,0x40,0x10,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x62,0x34, +0x2a,0xb0,0x08,0x3c,0x00,0x00,0x51,0xac,0x18,0x00,0x06,0x35,0x00,0x00,0xca,0x8c, +0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0xa1,0x02,0x87,0x10,0x04,0x00,0x02,0x24, +0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c, +0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x43,0x00,0x06,0x35, +0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10, +0x68,0x15,0x62,0x26,0x54,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30, +0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00, +0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30, +0x54,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x54,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c, +0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c, +0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,0xc7,0x1b,0x00,0x08, +0xff,0x00,0x02,0x24,0x00,0x00,0xc2,0xac,0xff,0x00,0x02,0x24,0x21,0x00,0x82,0x10, +0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0xfc,0x64,0x05,0x8e,0x20,0x10,0x02,0x3c, +0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x90,0x64,0x03,0xae, +0x04,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x54,0x64,0x0a,0xa2,0x10,0x01,0x00,0x0c, +0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,0xdc,0x7e,0x27,0x91,0x02,0x80,0x08,0x3c, +0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,0x06,0x00,0x02,0x3c,0x10,0x00,0xe7,0x34, +0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x01,0xa5,0x34,0x00,0x26,0x07,0x00, +0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00,0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c, +0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac,0xcc,0x7e,0x05,0xad,0xdc,0x7e,0x27,0xa1, +0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,0x04,0x00,0x04,0x3c, +0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c, +0x08,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10, +0x2a,0xb0,0x06,0x3c,0x1c,0x00,0xc3,0x34,0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24, +0xff,0x00,0x44,0x31,0x3e,0x02,0x87,0x10,0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31, +0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01, +0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24,0x44,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90, +0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26, +0x58,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30, +0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90, +0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,0x58,0x64,0xe3,0xa0, +0x68,0x15,0x62,0x26,0x58,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00, +0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34, +0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac,0x22,0x1c,0x00,0x08,0xff,0x00,0x02,0x24, +0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24,0x25,0x00,0x82,0x10,0x68,0x15,0x70,0x26, +0xff,0x00,0x43,0x31,0x08,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00, +0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00,0x58,0x64,0x0a,0xa2,0x9c,0x64,0x03,0xae, +0x05,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf, +0x02,0x80,0x0a,0x3c,0xdc,0x7e,0x47,0x91,0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d, +0xfc,0x4a,0x06,0x8e,0x18,0x00,0x02,0x3c,0x08,0x00,0xe7,0x34,0x27,0x10,0x02,0x00, +0x24,0x30,0xc2,0x00,0x00,0x02,0xa5,0x34,0x25,0xb0,0x03,0x3c,0x10,0x00,0x02,0x3c, +0x00,0x26,0x07,0x00,0x26,0x88,0x22,0x02,0xb0,0x03,0x68,0x34,0x25,0x20,0x85,0x00, +0x80,0x03,0x63,0x34,0x41,0xb0,0x02,0x3c,0x00,0x00,0x64,0xac,0x00,0x00,0x46,0xac, +0xcc,0x7e,0x25,0xad,0xdc,0x7e,0x47,0xa1,0xfc,0x4a,0x06,0xae,0x00,0x00,0x11,0xad, +0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,0x08,0x00,0x04,0x3c,0x26,0x18,0x64,0x00, +0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x10,0x00,0x03,0x3c, +0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00,0x24,0x10,0x43,0x00,0x58,0x00,0x40,0x10, +0x25,0xb0,0x06,0x3c,0xb0,0x03,0xc2,0x34,0x2a,0xb0,0x08,0x3c,0x00,0x00,0x51,0xac, +0x20,0x00,0x03,0x35,0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31, +0xe0,0x01,0x87,0x10,0x90,0x03,0xc2,0x34,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14, +0x00,0x80,0x02,0x3c,0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10, +0xff,0x00,0x02,0x24,0x45,0x00,0x06,0x35,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00, +0xff,0x00,0x44,0x30,0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x64,0x64,0xa4,0xa0, +0x00,0x00,0xc2,0x90,0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10, +0x21,0x38,0xa0,0x00,0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00, +0xfd,0xff,0x62,0x14,0xff,0x00,0x44,0x30,0x64,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26, +0x64,0x64,0x43,0x90,0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x0c,0x00,0x6a,0x8c,0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31, +0x00,0x00,0x4a,0xac,0x85,0x1c,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac, +0xff,0x00,0x02,0x24,0x21,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31, +0x08,0x65,0x05,0x8e,0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00, +0x21,0x30,0x60,0x00,0x9c,0x64,0x03,0xae,0x05,0x00,0x04,0x24,0x20,0x00,0x07,0x24, +0x64,0x64,0x0a,0xa2,0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c, +0xdc,0x7e,0x27,0x91,0x02,0x80,0x08,0x3c,0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e, +0x18,0x00,0x02,0x3c,0x01,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00, +0x00,0x02,0xa5,0x34,0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00, +0x80,0x03,0x42,0x34,0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac, +0xcc,0x7e,0x05,0xad,0xdc,0x7e,0x27,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26, +0x00,0x4b,0x43,0x8c,0x10,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac, +0x68,0x15,0x65,0x26,0xfc,0x4a,0xa2,0x8c,0x20,0x00,0x03,0x3c,0x24,0x10,0x52,0x00, +0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,0x2a,0xb0,0x06,0x3c,0x24,0x00,0xc3,0x34, +0x00,0x00,0x6a,0x8c,0xff,0x00,0x07,0x24,0xff,0x00,0x44,0x31,0x58,0x01,0x87,0x10, +0x25,0xb0,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c, +0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24, +0x46,0x00,0xc6,0x34,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30, +0x0e,0x00,0x87,0x10,0x68,0x15,0x62,0x26,0x5c,0x64,0xa4,0xa0,0x00,0x00,0xc2,0x90, +0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x38,0xa0,0x00, +0x21,0x28,0xc0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14, +0xff,0x00,0x44,0x30,0x5c,0x64,0xe3,0xa0,0x68,0x15,0x62,0x26,0x5c,0x64,0x43,0x90, +0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac, +0xe0,0x1c,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24, +0x25,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0x14,0x65,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0x5c,0x64,0x0a,0xa2,0xa8,0x64,0x03,0xae,0x06,0x00,0x04,0x24,0x20,0x00,0x07,0x24, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x0a,0x3c,0xdc,0x7e,0x47,0x91, +0x02,0x80,0x09,0x3c,0xcc,0x7e,0x25,0x8d,0xfc,0x4a,0x06,0x8e,0x60,0x00,0x02,0x3c, +0x04,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x04,0xa5,0x34, +0x25,0xb0,0x03,0x3c,0x40,0x00,0x02,0x3c,0x00,0x26,0x07,0x00,0x26,0x88,0x22,0x02, +0xb0,0x03,0x68,0x34,0x25,0x20,0x85,0x00,0x80,0x03,0x63,0x34,0x41,0xb0,0x02,0x3c, +0x00,0x00,0x64,0xac,0x00,0x00,0x46,0xac,0xcc,0x7e,0x25,0xad,0xdc,0x7e,0x47,0xa1, +0xfc,0x4a,0x06,0xae,0x00,0x00,0x11,0xad,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c, +0x20,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x65,0x26, +0xfc,0x4a,0xa2,0x8c,0x40,0x00,0x03,0x3c,0x24,0x10,0x52,0x00,0x24,0x10,0x51,0x00, +0x24,0x10,0x43,0x00,0x5a,0x00,0x40,0x10,0x68,0x15,0x70,0x26,0x25,0xb0,0x02,0x3c, +0x2a,0xb0,0x07,0x3c,0xb0,0x03,0x42,0x34,0x00,0x00,0x51,0xac,0x28,0x00,0xe3,0x34, +0x00,0x00,0x6a,0x8c,0xff,0x00,0x06,0x24,0xff,0x00,0x44,0x31,0xfe,0x00,0x86,0x10, +0x25,0xbd,0x02,0x3c,0x00,0x80,0x42,0x31,0x23,0x00,0x40,0x14,0x00,0x80,0x02,0x3c, +0x00,0xff,0x02,0x3c,0x24,0x10,0x42,0x01,0x21,0x00,0x40,0x10,0xff,0x00,0x02,0x24, +0x47,0x00,0xe7,0x34,0x00,0x00,0xe2,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x44,0x30, +0x0e,0x00,0x86,0x10,0x68,0x15,0x62,0x26,0x60,0x64,0xa4,0xa0,0x00,0x00,0xe2,0x90, +0xff,0x00,0x83,0x30,0xff,0x00,0x44,0x30,0x07,0x00,0x83,0x10,0x21,0x30,0xa0,0x00, +0x21,0x28,0xe0,0x00,0x00,0x00,0xa2,0x90,0x21,0x18,0x80,0x00,0xfd,0xff,0x62,0x14, +0xff,0x00,0x44,0x30,0x60,0x64,0xc3,0xa0,0x68,0x15,0x62,0x26,0x60,0x64,0x43,0x90, +0x20,0xb0,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x0c,0x00,0x6a,0x8c, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0xff,0x00,0x44,0x31,0x00,0x00,0x4a,0xac, +0x44,0x1d,0x00,0x08,0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0xff,0x00,0x02,0x24, +0x21,0x00,0x82,0x10,0x68,0x15,0x70,0x26,0xff,0x00,0x43,0x31,0x14,0x65,0x05,0x8e, +0x20,0x10,0x02,0x3c,0x00,0x1a,0x03,0x00,0x21,0x18,0x62,0x00,0x21,0x30,0x60,0x00, +0xa8,0x64,0x03,0xae,0x06,0x00,0x04,0x24,0x20,0x00,0x07,0x24,0x60,0x64,0x0a,0xa2, +0x10,0x01,0x00,0x0c,0x10,0x00,0xa0,0xaf,0x02,0x80,0x09,0x3c,0xdc,0x7e,0x27,0x91, +0x02,0x80,0x08,0x3c,0xcc,0x7e,0x05,0x8d,0xfc,0x4a,0x06,0x8e,0x60,0x00,0x02,0x3c, +0x02,0x00,0xe7,0x34,0x27,0x10,0x02,0x00,0x24,0x30,0xc2,0x00,0x00,0x04,0xa5,0x34, +0x00,0x26,0x07,0x00,0x25,0xb0,0x02,0x3c,0x25,0x20,0x85,0x00,0x80,0x03,0x42,0x34, +0x41,0xb0,0x03,0x3c,0x00,0x00,0x44,0xac,0x00,0x00,0x66,0xac,0xcc,0x7e,0x05,0xad, +0xdc,0x7e,0x27,0xa1,0xfc,0x4a,0x06,0xae,0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c, +0x40,0x00,0x04,0x3c,0x26,0x18,0x64,0x00,0x00,0x4b,0x43,0xac,0x68,0x15,0x70,0x26, +0xfc,0x4a,0x06,0x8e,0x00,0x04,0x11,0x3c,0x24,0x10,0xd2,0x00,0x24,0x10,0x51,0x00, +0x77,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x24,0x28,0xd2,0x00,0x00,0x08,0x04,0x3c, +0x24,0x10,0xa4,0x00,0x08,0x00,0x40,0x10,0x80,0x00,0x07,0x3c,0x00,0x4b,0x03,0x8e, +0x25,0xb0,0x02,0x3c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00,0x00,0x00,0x44,0xac, +0x00,0x4b,0x03,0xae,0x80,0x00,0x07,0x3c,0x24,0x10,0xa7,0x00,0x21,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x00,0x4b,0x03,0x8e,0x25,0xb0,0x08,0x3c,0xb0,0x03,0x09,0x35, +0x2a,0xb0,0x02,0x3c,0x00,0x00,0x23,0xad,0x36,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x23,0xb0,0x04,0x3c,0xff,0x1f,0x02,0x3c,0xc0,0x18,0x03,0x00,0xf0,0x07,0x63,0x30, +0xbc,0x65,0x05,0x8e,0x21,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x84,0x00,0x65,0x10,0xc0,0x65,0x03,0xae,0x02,0x80,0x05,0x3c,0xcc,0x7e,0xa3,0x8c, +0x27,0x20,0x07,0x00,0x24,0x20,0xc4,0x00,0x00,0x08,0x63,0x34,0x41,0xb0,0x02,0x3c, +0x00,0x00,0x23,0xad,0x00,0x00,0x44,0xac,0xcc,0x7e,0xa3,0xac,0xfc,0x4a,0x04,0xae, +0x68,0x15,0x62,0x26,0x00,0x4b,0x43,0x8c,0x80,0x00,0x04,0x3c,0x26,0x18,0x64,0x00, +0x00,0x4b,0x43,0xac,0x68,0x15,0x66,0x26,0xfc,0x4a,0xc3,0x8c,0x00,0x01,0x04,0x3c, +0x24,0x28,0x72,0x00,0x24,0x10,0xa4,0x00,0x06,0x00,0x40,0x10,0x25,0xb0,0x02,0x3c, +0x00,0x4b,0xc3,0x8c,0xb0,0x03,0x42,0x34,0x26,0x18,0x64,0x00,0x00,0x00,0x44,0xac, +0x00,0x4b,0xc3,0xac,0x00,0x02,0x04,0x3c,0x24,0x10,0xa4,0x00,0x08,0x00,0x40,0x10, +0x02,0x80,0x02,0x3c,0x00,0x4b,0xc2,0x8c,0x25,0xb0,0x03,0x3c,0xb0,0x03,0x63,0x34, +0x26,0x10,0x44,0x00,0x00,0x4b,0xc2,0xac,0x00,0x00,0x64,0xac,0x02,0x80,0x02,0x3c, +0xea,0x7d,0x43,0x90,0x01,0x00,0x02,0x24,0x0f,0x00,0x63,0x30,0x3f,0x00,0x62,0x10, +0x00,0x00,0x00,0x00,0x28,0x00,0xbf,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f, +0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x30,0x00,0xbd,0x27, +0x20,0xbd,0x02,0x3c,0xec,0x02,0x65,0x35,0x4d,0x00,0x68,0x35,0xf1,0x02,0x69,0x35, +0x08,0x00,0x07,0x24,0x78,0x02,0x42,0x34,0x00,0x00,0x46,0xa4,0x00,0x00,0x00,0xa1, +0x00,0x00,0x27,0xa1,0x00,0x00,0xa0,0xac,0x00,0x00,0xa2,0x8c,0xff,0x00,0x03,0x3c, +0x80,0x00,0x04,0x3c,0xff,0x00,0x4a,0x30,0x25,0x50,0x43,0x01,0x24,0x20,0x44,0x01, +0xf2,0x02,0x66,0x35,0x0a,0x00,0x6a,0x35,0x80,0xff,0x02,0x24,0x00,0x00,0x00,0xa1, +0x00,0x00,0x27,0xa1,0x00,0x00,0xa3,0xac,0x00,0x00,0xa3,0xac,0x00,0x00,0xc0,0xa0, +0x00,0x00,0x42,0xa1,0x04,0x00,0x80,0x10,0x02,0x00,0x62,0x35,0x84,0xff,0x02,0x24, +0x00,0x00,0x42,0xa1,0x02,0x00,0x62,0x35,0x00,0x00,0x43,0x94,0xff,0xbf,0x04,0x24, +0x24,0x18,0x64,0x00,0x00,0x00,0x43,0xa4,0x7f,0x19,0x00,0x08,0x68,0x15,0x66,0x26, +0x0e,0x4f,0x00,0x0c,0x07,0x00,0x04,0x24,0x00,0x4b,0x03,0x8e,0xfc,0x4a,0x06,0x8e, +0x25,0xb0,0x02,0x3c,0x26,0x18,0x71,0x00,0xb0,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x72,0x1d,0x00,0x08,0x00,0x4b,0x03,0xae,0x56,0x01,0x42,0x35,0x00,0x00,0x43,0x94, +0x00,0x00,0x00,0x00,0x75,0xfb,0x60,0x10,0x00,0x00,0x00,0x00,0x0e,0x4f,0x00,0x0c, +0x07,0x00,0x04,0x24,0x6c,0x19,0x00,0x08,0x68,0x15,0x64,0x26,0x28,0x00,0xbf,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x30,0x19,0x00,0x08,0x30,0x00,0xbd,0x27,0x00,0x00,0x62,0xac,0xdc,0x19,0x00,0x08, +0xff,0x00,0x02,0x24,0x00,0x00,0x62,0xac,0x19,0x1a,0x00,0x08,0xff,0x00,0x02,0x24, +0x00,0x00,0x62,0xac,0x56,0x1a,0x00,0x08,0xff,0x00,0x02,0x24,0x05,0x00,0x03,0x24, +0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x8b,0x1b,0x00,0x08,0x68,0x15,0x62,0x26, +0x02,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x07,0x1d,0x00,0x08, +0x68,0x15,0x62,0x26,0xd0,0x03,0x03,0x35,0x80,0x00,0x02,0x24,0x00,0x00,0x62,0xac, +0x9d,0x1d,0x00,0x08,0x68,0x15,0x62,0x26,0x01,0x00,0x03,0x24,0x90,0x03,0x42,0x34, +0x00,0x00,0x43,0xac,0x67,0x1d,0x00,0x08,0x68,0x15,0x62,0x26,0x25,0xb0,0x02,0x3c, +0x07,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x68,0x15,0x63,0x26, +0x00,0x4b,0x62,0x8c,0x00,0x00,0x00,0x00,0x00,0x80,0x42,0x38,0xd3,0x1a,0x00,0x08, +0x00,0x4b,0x62,0xac,0x06,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x2c,0x1b,0x00,0x08,0x68,0x15,0x62,0x26,0x25,0xb0,0x02,0x3c,0x07,0x00,0x03,0x24, +0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x68,0x15,0x63,0x26,0x00,0x4b,0x62,0x8c, +0x00,0x00,0x00,0x00,0x00,0x20,0x42,0x38,0x76,0x1a,0x00,0x08,0x00,0x4b,0x62,0xac, +0x03,0x00,0x03,0x24,0x90,0x03,0x42,0x34,0x00,0x00,0x43,0xac,0x49,0x1c,0x00,0x08, +0x68,0x15,0x62,0x26,0x00,0x00,0x40,0xac,0xa8,0x1c,0x00,0x08,0x68,0x15,0x62,0x26, +0x90,0x03,0x63,0x34,0x00,0x00,0x62,0xac,0xea,0x1b,0x00,0x08,0x68,0x15,0x62,0x26, +0x25,0xb0,0x0d,0x3c,0x00,0x80,0x02,0x3c,0x18,0x03,0xa4,0x35,0x10,0x79,0x42,0x24, +0x02,0x80,0x03,0x3c,0x41,0xb0,0x08,0x3c,0x00,0x00,0x82,0xac,0x68,0x15,0x6a,0x24, +0x0a,0x00,0x02,0x35,0x00,0x00,0x44,0x94,0x0a,0x4b,0x43,0x95,0x08,0x4b,0x4b,0x95, +0x25,0x18,0x64,0x00,0xff,0xff,0x6c,0x30,0x24,0x10,0x8b,0x01,0x02,0x00,0x42,0x30, +0x53,0x00,0x40,0x10,0x02,0x00,0x64,0x38,0x02,0x00,0x02,0x24,0xc0,0x03,0xa3,0x35, +0x00,0x00,0x62,0xac,0x0a,0x4b,0x44,0xa5,0x24,0x38,0x8b,0x01,0x04,0x00,0xe2,0x30, +0x0a,0x00,0x40,0x10,0x08,0x00,0xe2,0x30,0x0a,0x4b,0x43,0x95,0x0c,0x00,0x04,0x35, +0xc0,0x03,0xa5,0x35,0x04,0x00,0x63,0x38,0x04,0x00,0x02,0x24,0x00,0x00,0x86,0x8c, +0x00,0x00,0xa2,0xac,0x0a,0x4b,0x43,0xa5,0x08,0x00,0xe2,0x30,0x08,0x00,0x40,0x10, +0x10,0x00,0xe2,0x30,0x0a,0x4b,0x42,0x95,0xc0,0x03,0xa4,0x35,0x08,0x00,0x03,0x24, +0x08,0x00,0x42,0x38,0x00,0x00,0x83,0xac,0x0a,0x4b,0x42,0xa5,0x10,0x00,0xe2,0x30, +0x08,0x00,0x40,0x10,0x20,0x00,0xe2,0x30,0x0a,0x4b,0x42,0x95,0xc0,0x03,0xa4,0x35, +0x10,0x00,0x03,0x24,0x10,0x00,0x42,0x38,0x00,0x00,0x83,0xac,0x0a,0x4b,0x42,0xa5, +0x20,0x00,0xe2,0x30,0x08,0x00,0x40,0x10,0x80,0x00,0xe2,0x30,0x0a,0x4b,0x42,0x95, +0xc0,0x03,0xa4,0x35,0x20,0x00,0x03,0x24,0x20,0x00,0x42,0x38,0x00,0x00,0x83,0xac, +0x0a,0x4b,0x42,0xa5,0x80,0x00,0xe2,0x30,0x15,0x00,0x40,0x10,0x24,0x10,0x8b,0x01, +0x02,0x80,0x09,0x3c,0x0a,0x4b,0x46,0x95,0xcc,0x7e,0x25,0x8d,0x08,0x00,0x02,0x3c, +0x7f,0xff,0x04,0x24,0x24,0x20,0x64,0x01,0x25,0x28,0xa2,0x00,0x80,0x00,0xc6,0x38, +0xb0,0x03,0xa7,0x35,0x08,0x00,0x08,0x35,0xc0,0x03,0xa3,0x35,0x80,0x00,0x02,0x24, +0x00,0x00,0x62,0xac,0x21,0x58,0x80,0x00,0x00,0x00,0xe5,0xac,0x0a,0x4b,0x46,0xa5, +0xcc,0x7e,0x25,0xad,0x00,0x00,0x04,0xa5,0x08,0x4b,0x44,0xa5,0x24,0x10,0x8b,0x01, +0x00,0x30,0x42,0x30,0x07,0x00,0x40,0x10,0x02,0x80,0x02,0x3c,0x0a,0x4b,0x42,0x95, +0x00,0x00,0x00,0x00,0x00,0x10,0x42,0x38,0x00,0x20,0x42,0x34,0x0a,0x4b,0x42,0xa5, +0x02,0x80,0x02,0x3c,0xea,0x7d,0x43,0x90,0x01,0x00,0x02,0x24,0x0f,0x00,0x63,0x30, +0x05,0x00,0x62,0x10,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x5a,0x1e,0x00,0x08,0x0a,0x4b,0x43,0xa5,0x30,0x19,0x00,0x08,0x00,0x00,0x00,0x00, +0xf8,0xff,0xbd,0x27,0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf,0x00,0x40,0x02,0x40, +0x00,0x68,0x08,0x40,0x00,0x70,0x02,0x40,0x00,0x60,0x09,0x40,0x25,0xb0,0x05,0x3c, +0x00,0x80,0x02,0x3c,0x18,0x03,0xa3,0x34,0xb0,0x7a,0x42,0x24,0x00,0x00,0x62,0xac, +0x80,0x00,0x87,0x8c,0x7c,0x02,0xa2,0x34,0x84,0x02,0xa3,0x34,0x88,0x02,0xa6,0x34, +0x00,0x00,0x47,0xac,0x00,0x00,0x68,0xac,0x00,0x00,0xc9,0xac,0x74,0x00,0x83,0x8c, +0x8c,0x02,0xa2,0x34,0x90,0x02,0xa7,0x34,0x00,0x00,0x43,0xac,0x08,0x00,0x86,0x8c, +0x94,0x02,0xa8,0x34,0x98,0x02,0xa9,0x34,0x00,0x00,0xe6,0xac,0x0c,0x00,0x82,0x8c, +0x9c,0x02,0xa6,0x34,0xa0,0x02,0xa7,0x34,0x00,0x00,0x02,0xad,0x10,0x00,0x83,0x8c, +0xa4,0x02,0xa8,0x34,0xa8,0x02,0xaa,0x34,0x00,0x00,0x23,0xad,0x14,0x00,0x82,0x8c, +0xac,0x02,0xa9,0x34,0xb0,0x02,0xab,0x34,0x00,0x00,0xc2,0xac,0x18,0x00,0x83,0x8c, +0xb4,0x02,0xa6,0x34,0xb8,0x02,0xac,0x34,0x00,0x00,0xe3,0xac,0x1c,0x00,0x82,0x8c, +0xbc,0x02,0xa7,0x34,0xc0,0x02,0xad,0x34,0x00,0x00,0x02,0xad,0x20,0x00,0x83,0x8c, +0xc4,0x02,0xa8,0x34,0xc8,0x02,0xae,0x34,0x00,0x00,0x43,0xad,0x24,0x00,0x82,0x8c, +0xcc,0x02,0xaa,0x34,0xd0,0x02,0xaf,0x34,0x00,0x00,0x22,0xad,0x28,0x00,0x83,0x8c, +0xd4,0x02,0xa9,0x34,0xd8,0x02,0xb0,0x34,0x00,0x00,0x63,0xad,0x2c,0x00,0x82,0x8c, +0x70,0x02,0xab,0x34,0x74,0x02,0xb1,0x34,0x00,0x00,0xc2,0xac,0x30,0x00,0x83,0x8c, +0x78,0x02,0xa5,0x34,0x00,0x00,0x83,0xad,0x34,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0xe2,0xac,0x38,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xad, +0x3c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xad,0x40,0x00,0x83,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xad,0x44,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x42,0xad,0x48,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xe3,0xad, +0x4c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0xad,0x50,0x00,0x83,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xae,0x54,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xad,0x58,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0xae, +0x5c,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xac,0x0f,0x1f,0x00,0x08, +0x00,0x00,0x00,0x00,0x00,0x80,0x1b,0x3c,0x44,0x7c,0x7b,0x27,0x25,0xb0,0x1a,0x3c, +0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00, +0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf, +0x0c,0x00,0x63,0xaf,0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf, +0x1c,0x00,0x67,0xaf,0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf, +0x2c,0x00,0x6b,0xaf,0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf, +0x3c,0x00,0x6f,0xaf,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40, +0x40,0x00,0x70,0xaf,0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf, +0x50,0x00,0x74,0xaf,0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf, +0x60,0x00,0x78,0xaf,0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf, +0x70,0x00,0x7e,0xaf,0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf, +0x80,0x00,0x6a,0xaf,0x00,0x68,0x1a,0x40,0x25,0xb0,0x1b,0x3c,0x1c,0x03,0x7b,0x37, +0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0xaf,0x7f,0x00,0x5b,0x33,0x30,0x00,0x60,0x13, +0x00,0x00,0x00,0x00,0x25,0xb0,0x1b,0x3c,0x30,0x03,0x7b,0x37,0x00,0x00,0x00,0x00, +0x00,0x00,0x7a,0xaf,0x00,0x00,0x00,0x00,0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00, +0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27,0x04,0x00,0x61,0xaf,0x08,0x00,0x62,0xaf, +0x0c,0x00,0x63,0xaf,0x10,0x00,0x64,0xaf,0x14,0x00,0x65,0xaf,0x18,0x00,0x66,0xaf, +0x1c,0x00,0x67,0xaf,0x20,0x00,0x68,0xaf,0x24,0x00,0x69,0xaf,0x28,0x00,0x6a,0xaf, +0x2c,0x00,0x6b,0xaf,0x30,0x00,0x6c,0xaf,0x34,0x00,0x6d,0xaf,0x38,0x00,0x6e,0xaf, +0x3c,0x00,0x6f,0xaf,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x00,0x70,0x0a,0x40, +0x40,0x00,0x70,0xaf,0x44,0x00,0x71,0xaf,0x48,0x00,0x72,0xaf,0x4c,0x00,0x73,0xaf, +0x50,0x00,0x74,0xaf,0x54,0x00,0x75,0xaf,0x58,0x00,0x76,0xaf,0x5c,0x00,0x77,0xaf, +0x60,0x00,0x78,0xaf,0x64,0x00,0x79,0xaf,0x68,0x00,0x7c,0xaf,0x6c,0x00,0x7d,0xaf, +0x70,0x00,0x7e,0xaf,0x74,0x00,0x7f,0xaf,0x78,0x00,0x68,0xaf,0x7c,0x00,0x69,0xaf, +0x80,0x00,0x6a,0xaf,0xac,0x1e,0x00,0x08,0x21,0x20,0x60,0x03,0x00,0x00,0x00,0x00, +0x25,0xb0,0x08,0x3c,0x20,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0xad, +0x00,0x04,0x5b,0x33,0x0a,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x3c, +0x30,0x65,0x08,0x25,0x00,0x00,0x00,0x00,0x25,0xb0,0x1b,0x3c,0x24,0x03,0x7b,0x37, +0x00,0x00,0x00,0x00,0x00,0x00,0x68,0xaf,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00, +0x00,0x08,0x5b,0x33,0x25,0xb0,0x08,0x3c,0x28,0x03,0x08,0x35,0x00,0x00,0x00,0x00, +0x00,0x00,0x1b,0xad,0x06,0x00,0x60,0x13,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x3c, +0x10,0x79,0x08,0x25,0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x01,0x00,0x00,0x00,0x00, +0x02,0x80,0x1a,0x3c,0xcc,0x7e,0x5a,0x27,0x04,0x00,0x5b,0x97,0x25,0xb0,0x08,0x3c, +0x30,0x03,0x08,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x1b,0xad,0x18,0x00,0x60,0x13, +0x00,0x00,0x00,0x00,0x08,0xec,0x9b,0x27,0x00,0x00,0x00,0x00,0x04,0x00,0x61,0x8f, +0xfc,0x03,0x70,0x7b,0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b, +0x3c,0x01,0x68,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b, +0xbc,0x01,0x6c,0x7b,0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b, +0xbc,0x02,0x74,0x7b,0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b, +0xbc,0x03,0x7e,0x7b,0x80,0x00,0x7b,0x8f,0xfc,0x1f,0x00,0x08,0x00,0x00,0x00,0x00, +0x21,0xd8,0xa0,0x03,0x82,0xda,0x1b,0x00,0x80,0xda,0x1b,0x00,0x08,0x00,0x7b,0x27, +0x08,0x00,0x5b,0xaf,0xfc,0xef,0x9d,0x27,0x00,0x00,0x4a,0x8f,0x00,0x00,0x00,0x00, +0x21,0x00,0x40,0x11,0x00,0x00,0x00,0x00,0x02,0x80,0x08,0x3c,0x2c,0x7e,0x08,0x25, +0x21,0x48,0x00,0x00,0x21,0x58,0x00,0x00,0x01,0x00,0x6b,0x25,0x1a,0x00,0x40,0x11, +0x24,0x70,0x4b,0x01,0x14,0x00,0xc0,0x11,0x01,0x00,0x04,0x24,0x00,0x00,0x00,0x00, +0x04,0x00,0x44,0xa3,0x26,0x50,0x4b,0x01,0x00,0x00,0x4a,0xaf,0x80,0x80,0x09,0x00, +0x21,0x80,0x08,0x02,0x00,0x00,0x10,0x8e,0x00,0x00,0x00,0x00,0x09,0xf8,0x00,0x02, +0x00,0x00,0x00,0x00,0x00,0x80,0x1b,0x3c,0x1c,0x7f,0x7b,0x27,0x25,0xb0,0x1a,0x3c, +0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0xcc,0x7e,0x5a,0x27, +0xe1,0xff,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x29,0x25,0x40,0x58,0x0b,0x00, +0xbf,0x1f,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x80,0x1b,0x3c,0xcc,0x7e,0x7b,0x27, +0x21,0x60,0x00,0x00,0x04,0x00,0x6c,0xa7,0x08,0x00,0x7a,0x8f,0x00,0x00,0x00,0x00, +0xf8,0xff,0x5a,0x27,0x00,0x00,0x5a,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x5a,0x27, +0x84,0x00,0x44,0x8f,0x00,0x00,0x00,0x00,0xf9,0xff,0x80,0x10,0x00,0x00,0x00,0x00, +0x04,0x00,0x41,0x8f,0xfc,0x03,0x50,0x7b,0x7c,0x00,0x42,0x7b,0xbc,0x00,0x44,0x7b, +0xfc,0x00,0x46,0x7b,0x3c,0x01,0x48,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02, +0x7c,0x01,0x4a,0x7b,0xbc,0x01,0x4c,0x7b,0xfc,0x01,0x4e,0x7b,0x3c,0x02,0x50,0x7b, +0x7c,0x02,0x52,0x7b,0xbc,0x02,0x54,0x7b,0xfc,0x02,0x56,0x7b,0x3c,0x03,0x58,0x7b, +0x7c,0x03,0x5c,0x7b,0xbc,0x03,0x5e,0x7b,0x80,0x00,0x5b,0x8f,0x00,0x00,0x00,0x00, +0x08,0x00,0x60,0x03,0x10,0x00,0x00,0x42,0x00,0x60,0x05,0x40,0x42,0x28,0x05,0x00, +0x40,0x28,0x05,0x00,0x00,0x60,0x85,0x40,0x04,0x00,0x81,0xac,0x08,0x00,0x82,0xac, +0x0c,0x00,0x83,0xac,0x20,0x00,0x88,0xac,0x24,0x00,0x89,0xac,0x28,0x00,0x8a,0xac, +0x2c,0x00,0x8b,0xac,0x30,0x00,0x8c,0xac,0x34,0x00,0x8d,0xac,0x38,0x00,0x8e,0xac, +0x3c,0x00,0x8f,0xac,0x12,0x40,0x00,0x00,0x10,0x48,0x00,0x00,0x40,0x00,0x90,0xac, +0x44,0x00,0x91,0xac,0x48,0x00,0x92,0xac,0x4c,0x00,0x93,0xac,0x50,0x00,0x94,0xac, +0x54,0x00,0x95,0xac,0x58,0x00,0x96,0xac,0x5c,0x00,0x97,0xac,0x60,0x00,0x98,0xac, +0x64,0x00,0x99,0xac,0x68,0x00,0x9c,0xac,0x6c,0x00,0x9d,0xac,0x70,0x00,0x9e,0xac, +0x74,0x00,0x9f,0xac,0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac,0x80,0x00,0x9f,0xac, +0xf8,0xff,0x84,0x24,0x00,0x00,0x84,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x84,0x24, +0x84,0x00,0x86,0x8c,0x00,0x00,0x00,0x00,0xf9,0xff,0xc0,0x10,0x00,0x00,0x00,0x00, +0x21,0xd8,0x80,0x00,0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f,0xfc,0x03,0x70,0x7b, +0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b,0x3c,0x01,0x68,0x7b, +0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b,0xbc,0x01,0x6c,0x7b, +0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b,0xbc,0x02,0x74,0x7b, +0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b,0xbc,0x03,0x7e,0x7b, +0x80,0x00,0x7b,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40, +0x00,0x60,0x05,0x40,0x42,0x28,0x05,0x00,0x40,0x28,0x05,0x00,0x00,0x60,0x85,0x40, +0x04,0x00,0x81,0xac,0x08,0x00,0x82,0xac,0x0c,0x00,0x83,0xac,0x20,0x00,0x88,0xac, +0x24,0x00,0x89,0xac,0x28,0x00,0x8a,0xac,0x2c,0x00,0x8b,0xac,0x30,0x00,0x8c,0xac, +0x34,0x00,0x8d,0xac,0x38,0x00,0x8e,0xac,0x3c,0x00,0x8f,0xac,0x12,0x40,0x00,0x00, +0x10,0x48,0x00,0x00,0x40,0x00,0x90,0xac,0x44,0x00,0x91,0xac,0x48,0x00,0x92,0xac, +0x4c,0x00,0x93,0xac,0x50,0x00,0x94,0xac,0x54,0x00,0x94,0xac,0x58,0x00,0x96,0xac, +0x5c,0x00,0x96,0xac,0x60,0x00,0x98,0xac,0x64,0x00,0x99,0xac,0x68,0x00,0x9c,0xac, +0x6c,0x00,0x9d,0xac,0x70,0x00,0x9e,0xac,0x78,0x00,0x88,0xac,0x7c,0x00,0x89,0xac, +0x80,0x00,0x9f,0xac,0x84,0x00,0x80,0xac,0xf8,0xff,0x84,0x24,0x00,0x00,0x84,0x8c, +0x00,0x00,0x00,0x00,0x08,0x00,0x84,0x24,0x84,0x00,0x86,0x8c,0xfa,0xff,0xc0,0x10, +0x00,0x00,0x00,0x00,0x21,0xd8,0x80,0x00,0x01,0x00,0xba,0x24,0x04,0x00,0x61,0x8f, +0xfc,0x03,0x70,0x7b,0x7c,0x00,0x62,0x7b,0xbc,0x00,0x64,0x7b,0xfc,0x00,0x66,0x7b, +0x3c,0x01,0x68,0x7b,0x13,0x00,0x00,0x02,0x11,0x00,0x20,0x02,0x7c,0x01,0x6a,0x7b, +0xbc,0x01,0x6c,0x7b,0xfc,0x01,0x6e,0x7b,0x3c,0x02,0x70,0x7b,0x7c,0x02,0x72,0x7b, +0xbc,0x02,0x74,0x7b,0xfc,0x02,0x76,0x7b,0x3c,0x03,0x78,0x7b,0x7c,0x03,0x7c,0x7b, +0xbc,0x03,0x7e,0x7b,0x80,0x00,0x7b,0x8f,0x08,0x00,0x60,0x03,0x00,0x60,0x9a,0x40, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x60,0xb9,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x1b,0x3c,0x00,0x00,0x7b,0x27, +0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf,0x00,0x00,0x05,0x24, +0x03,0x00,0xa4,0x24,0x00,0xa0,0x80,0x40,0x00,0xa0,0x84,0x40,0x01,0x80,0x04,0x3c, +0x98,0x03,0x84,0x24,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x80,0x1b,0x3c,0x98,0x03,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27, +0x00,0x00,0x5b,0xaf,0x02,0x80,0x1a,0x3c,0x00,0x00,0x5a,0x27,0xfc,0x03,0x5d,0x27, +0x02,0x80,0x1c,0x3c,0x00,0x14,0x9c,0x27,0x00,0xf0,0x08,0x3c,0x00,0x0c,0x08,0x35, +0x00,0x60,0x88,0x40,0x02,0x80,0x04,0x3c,0x00,0x00,0x84,0x24,0xff,0x7f,0x05,0x3c, +0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x20,0x84,0x4c,0xff,0xff,0x05,0x34, +0x21,0x28,0xa4,0x00,0x00,0x28,0x85,0x4c,0x00,0x80,0x04,0x3c,0x00,0x00,0x84,0x24, +0xff,0x7f,0x05,0x3c,0xff,0xff,0xa5,0x34,0x24,0x20,0x85,0x00,0x00,0x00,0x84,0x4c, +0xff,0xff,0x06,0x34,0x21,0x30,0xc4,0x00,0x24,0x30,0xc5,0x00,0x00,0x08,0x86,0x4c, +0x00,0xa0,0x04,0x40,0x10,0x00,0x84,0x34,0x00,0xa0,0x84,0x40,0x01,0x80,0x1b,0x3c, +0x24,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf, +0x00,0x00,0x00,0x00,0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x84, +0x20,0x00,0x06,0x24,0x25,0x28,0xa6,0x00,0x00,0x00,0x85,0xa4,0x01,0x80,0x1b,0x3c, +0x54,0x04,0x7b,0x27,0x25,0xb0,0x1a,0x3c,0x18,0x03,0x5a,0x27,0x00,0x00,0x5b,0xaf, +0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x85,0x8c,0x00,0x00,0x00,0x00, +0x10,0x00,0xa5,0x30,0xfc,0xff,0xa0,0x10,0x00,0x00,0x00,0x00,0xff,0x1f,0x07,0x3c, +0xff,0xff,0xe7,0x34,0x02,0x80,0x05,0x3c,0xe8,0x7d,0xa5,0x24,0xff,0xff,0xa5,0x30, +0x40,0xb0,0x04,0x3c,0x25,0x28,0xa4,0x00,0x24,0x28,0xa7,0x00,0x21,0x30,0x00,0x00, +0x43,0xb0,0x02,0x3c,0x00,0x80,0x04,0x3c,0x40,0x00,0x84,0x34,0x00,0x00,0x45,0xac, +0x04,0x00,0x46,0xac,0x08,0x00,0x44,0xac,0x8b,0x5b,0x00,0x08,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x24,0xff,0xff,0x42,0x24, +0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0x08,0x00,0xe0,0x03,0x01,0x00,0x42,0x24, +0x00,0x60,0x02,0x40,0x01,0x00,0x41,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x21,0x18,0x40,0x00,0x00,0x60,0x83,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x82,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x44,0x05,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x04,0x00,0x85,0x8c,0x00,0x80,0x03,0x3c,0x01,0x00,0x02,0x24,0x25,0x28,0xa3,0x00, +0x00,0x00,0xa4,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x74,0x05,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x04,0x00,0x82,0x8c,0x02,0x00,0x83,0x94,0x00,0x80,0x07,0x3c,0x25,0x28,0x47,0x00, +0x00,0x00,0xa2,0x8c,0x10,0x00,0x02,0x24,0x13,0x00,0x62,0x10,0x11,0x00,0x66,0x28, +0x06,0x00,0xc0,0x10,0x20,0x00,0x02,0x24,0x08,0x00,0x02,0x24,0x17,0x00,0x62,0x10, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0xfd,0xff,0x62,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0xac, +0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x25,0x10,0x47,0x00,0x00,0x00,0x42,0x8c, +0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0xa2,0xa4,0x04,0x00,0x83,0x8c,0x00,0x00,0x00,0x00,0x25,0x18,0x67,0x00, +0x00,0x00,0x62,0x94,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0xa0,0x04,0x00,0x83,0x8c,0x00,0x00,0x00,0x00, +0x25,0x18,0x67,0x00,0x00,0x00,0x62,0x90,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24, +0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,0x1c,0x00,0xbf,0xaf, +0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x68,0x15,0x31,0x26,0x44,0x65,0x30,0x96, +0x02,0x80,0x02,0x3c,0x01,0x80,0x03,0x3c,0x25,0x80,0x02,0x02,0x25,0xb0,0x02,0x3c, +0x38,0x06,0x63,0x24,0x18,0x03,0x42,0x34,0x60,0x00,0x04,0x26,0x80,0x00,0x05,0x26, +0x00,0x00,0x43,0xac,0x6c,0x45,0x00,0x0c,0x03,0x00,0x06,0x24,0x21,0x20,0x00,0x02, +0x21,0x28,0x00,0x00,0x58,0x45,0x00,0x0c,0x08,0x00,0x06,0x24,0x44,0x65,0x22,0x8e, +0x0c,0x00,0x03,0x24,0x0c,0x00,0x43,0xae,0x08,0x00,0x42,0xae,0x12,0x00,0x02,0x24, +0x14,0x00,0x42,0xae,0x21,0x20,0x40,0x02,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x30,0x08,0x00,0x08,0x20,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24, +0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24,0x02,0x80,0x02,0x3c,0x21,0x48,0x80,0x00, +0x68,0x15,0x48,0x24,0x21,0x38,0x00,0x00,0x21,0x28,0x27,0x01,0x00,0x00,0xa2,0x90, +0x21,0x20,0xe8,0x00,0x01,0x00,0xe7,0x24,0x44,0x4c,0x82,0xa0,0x1e,0x00,0xa3,0x90, +0x1e,0x00,0xe6,0x28,0x62,0x4c,0x83,0xa0,0x3c,0x00,0xa2,0x90,0x00,0x00,0x00,0x00, +0x80,0x4c,0x82,0xa0,0x5a,0x00,0xa3,0x90,0xf3,0xff,0xc0,0x14,0x9e,0x4c,0x83,0xa0, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x01,0x00,0x02,0x24, +0x20,0xbd,0x03,0x3c,0x58,0x00,0x63,0x34,0x00,0x00,0x62,0x90,0x0f,0x27,0x07,0x24, +0x20,0x00,0x42,0x34,0x00,0x00,0x62,0xa0,0xff,0xff,0xe7,0x24,0xff,0xff,0xe1,0x04, +0xff,0xff,0xe7,0x24,0x62,0xbd,0x04,0x3c,0x24,0x10,0x82,0x34,0x00,0x00,0x40,0xa0, +0x28,0x10,0x83,0x34,0x0c,0x11,0x86,0x34,0x0e,0x00,0x02,0x24,0x00,0x00,0x60,0xa0, +0x00,0x11,0x85,0x34,0x00,0x00,0xc2,0xa0,0x00,0x00,0xa7,0x8c,0xdf,0xff,0x02,0x24, +0x10,0x00,0x86,0x34,0x24,0x38,0xe2,0x00,0x49,0x0c,0x03,0x24,0xcf,0xff,0x02,0x24, +0x00,0x00,0xc3,0xac,0x04,0x00,0x84,0x34,0x00,0x00,0xa7,0xac,0x24,0x38,0xe2,0x00, +0x41,0x0c,0x02,0x24,0x00,0x00,0xa7,0xac,0x00,0x00,0x80,0xac,0x00,0x00,0xc2,0xac, +0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x25,0xb0,0x05,0x3c,0x01,0x80,0x03,0x3c,0x21,0x38,0x80,0x00,0x18,0x03,0xa2,0x34, +0xa8,0x08,0x63,0x24,0x01,0x00,0x04,0x24,0x00,0x00,0x43,0xac,0x35,0x00,0xe4,0x10, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x10,0x20,0x08,0xa2,0x34,0x02,0x00,0x02,0x24, +0x83,0x00,0xe2,0x10,0x03,0x00,0x02,0x24,0x5a,0x00,0xe2,0x10,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x03,0x3c,0x00,0x00,0x44,0x8c, +0x68,0x15,0x66,0x24,0x70,0x08,0x02,0x24,0xe0,0x08,0x03,0x24,0x80,0x4b,0xc2,0xac, +0x40,0x08,0x02,0x24,0x84,0x4b,0xc3,0xac,0x90,0x4b,0xc2,0xac,0x78,0x08,0x03,0x24, +0x0c,0x08,0x02,0x24,0x94,0x4b,0xc3,0xac,0x98,0x4b,0xc2,0xac,0x10,0x08,0x03,0x24, +0x20,0x08,0x02,0x24,0x9c,0x4b,0xc3,0xac,0xa0,0x4b,0xc2,0xac,0x24,0x08,0x03,0x24, +0x58,0x08,0x02,0x24,0xa4,0x4b,0xc3,0xac,0xa8,0x4b,0xc2,0xac,0x50,0x0c,0x03,0x24, +0x54,0x0c,0x02,0x24,0xac,0x4b,0xc3,0xac,0xb0,0x4b,0xc2,0xac,0x14,0x0c,0x03,0x24, +0x10,0x0c,0x02,0x24,0x60,0x08,0x05,0x24,0xb4,0x4b,0xc3,0xac,0xb8,0x4b,0xc2,0xac, +0x80,0x0c,0x03,0x24,0x84,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xc0,0x4b,0xc2,0xac, +0x8c,0x4b,0xc5,0xac,0xbc,0x4b,0xc3,0xac,0x7d,0x4b,0xc0,0xa0,0x88,0x4b,0xc5,0xac, +0x02,0x00,0x80,0x10,0xa0,0x08,0x02,0x24,0xb8,0x08,0x02,0x24,0x08,0x00,0xe0,0x03, +0xc4,0x4b,0xc2,0xac,0x28,0x08,0xa2,0x34,0x02,0x80,0x03,0x3c,0x00,0x00,0x44,0x8c, +0x68,0x15,0x66,0x24,0x70,0x08,0x02,0x24,0xe0,0x08,0x03,0x24,0x80,0x4b,0xc2,0xac, +0x44,0x08,0x02,0x24,0x84,0x4b,0xc3,0xac,0x90,0x4b,0xc2,0xac,0x78,0x08,0x03,0x24, +0x0c,0x08,0x02,0x24,0x94,0x4b,0xc3,0xac,0x98,0x4b,0xc2,0xac,0x14,0x08,0x03,0x24, +0x28,0x08,0x02,0x24,0x9c,0x4b,0xc3,0xac,0xa0,0x4b,0xc2,0xac,0x2c,0x08,0x03,0x24, +0x58,0x08,0x02,0x24,0xa4,0x4b,0xc3,0xac,0xa8,0x4b,0xc2,0xac,0x58,0x0c,0x03,0x24, +0x5c,0x0c,0x02,0x24,0xac,0x4b,0xc3,0xac,0xb0,0x4b,0xc2,0xac,0x1c,0x0c,0x03,0x24, +0x18,0x0c,0x02,0x24,0x64,0x08,0x05,0x24,0xb4,0x4b,0xc3,0xac,0xb8,0x4b,0xc2,0xac, +0x88,0x0c,0x03,0x24,0x8c,0x0c,0x02,0x24,0x00,0x01,0x84,0x30,0xc0,0x4b,0xc2,0xac, +0x7d,0x4b,0xc7,0xa0,0x8c,0x4b,0xc5,0xac,0xbc,0x4b,0xc3,0xac,0x88,0x4b,0xc5,0xac, +0xd6,0xff,0x80,0x10,0xa4,0x08,0x02,0x24,0xbc,0x08,0x02,0x24,0x08,0x00,0xe0,0x03, +0xc4,0x4b,0xc2,0xac,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0xac,0x08,0x03,0x24, +0xc4,0x4b,0x43,0xac,0x74,0x08,0x03,0x24,0xe4,0x08,0x04,0x24,0x80,0x4b,0x43,0xac, +0x4c,0x08,0x03,0x24,0x84,0x4b,0x44,0xac,0x90,0x4b,0x43,0xac,0x7c,0x08,0x04,0x24, +0x0c,0x08,0x03,0x24,0x94,0x4b,0x44,0xac,0x98,0x4b,0x43,0xac,0x1c,0x08,0x04,0x24, +0x38,0x08,0x03,0x24,0x9c,0x4b,0x44,0xac,0xa0,0x4b,0x43,0xac,0x3c,0x08,0x04,0x24, +0x5c,0x08,0x03,0x24,0xa4,0x4b,0x44,0xac,0xa8,0x4b,0x43,0xac,0x68,0x0c,0x04,0x24, +0x6c,0x0c,0x03,0x24,0xac,0x4b,0x44,0xac,0xb0,0x4b,0x43,0xac,0x2c,0x0c,0x04,0x24, +0x28,0x0c,0x03,0x24,0x6c,0x08,0x05,0x24,0xb4,0x4b,0x44,0xac,0xb8,0x4b,0x43,0xac, +0x98,0x0c,0x04,0x24,0x9c,0x0c,0x03,0x24,0x7d,0x4b,0x47,0xa0,0x8c,0x4b,0x45,0xac, +0xbc,0x4b,0x44,0xac,0xc0,0x4b,0x43,0xac,0x08,0x00,0xe0,0x03,0x88,0x4b,0x45,0xac, +0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0xa8,0x08,0x03,0x24,0xc4,0x4b,0x43,0xac, +0x74,0x08,0x03,0x24,0xe4,0x08,0x04,0x24,0x80,0x4b,0x43,0xac,0x48,0x08,0x03,0x24, +0x84,0x4b,0x44,0xac,0x90,0x4b,0x43,0xac,0x7c,0x08,0x04,0x24,0x0c,0x08,0x03,0x24, +0x94,0x4b,0x44,0xac,0x98,0x4b,0x43,0xac,0x18,0x08,0x04,0x24,0x30,0x08,0x03,0x24, +0x9c,0x4b,0x44,0xac,0xa0,0x4b,0x43,0xac,0x34,0x08,0x04,0x24,0x5c,0x08,0x03,0x24, +0xa4,0x4b,0x44,0xac,0xa8,0x4b,0x43,0xac,0x60,0x0c,0x04,0x24,0x64,0x0c,0x03,0x24, +0xac,0x4b,0x44,0xac,0xb0,0x4b,0x43,0xac,0x24,0x0c,0x04,0x24,0x20,0x0c,0x03,0x24, +0x68,0x08,0x05,0x24,0xb4,0x4b,0x44,0xac,0xb8,0x4b,0x43,0xac,0x90,0x0c,0x04,0x24, +0x94,0x0c,0x03,0x24,0x7d,0x4b,0x47,0xa0,0x8c,0x4b,0x45,0xac,0xbc,0x4b,0x44,0xac, +0xc0,0x4b,0x43,0xac,0x08,0x00,0xe0,0x03,0x88,0x4b,0x45,0xac,0xe6,0x42,0x00,0x08, +0x21,0x18,0x00,0x00,0x20,0x00,0x62,0x2c,0x06,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x06,0x10,0x64,0x00,0x01,0x00,0x42,0x30,0xfa,0xff,0x40,0x10,0x01,0x00,0x63,0x24, +0xff,0xff,0x63,0x24,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xd8,0xff,0xbd,0x27, +0x25,0xb0,0x02,0x3c,0x18,0x00,0xb2,0xaf,0x21,0x90,0x82,0x00,0xff,0xff,0x02,0x24, +0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf, +0x21,0x88,0xa0,0x00,0x21,0x20,0xa0,0x00,0x21,0x18,0x40,0x02,0x10,0x00,0xa2,0x10, +0x21,0x98,0xc0,0x00,0x00,0x00,0x50,0x8e,0xe1,0x42,0x00,0x0c,0x00,0x00,0x00,0x00, +0x04,0x10,0x53,0x00,0x27,0x18,0x11,0x00,0x25,0x18,0x62,0x00,0x24,0x18,0x70,0x00, +0x00,0x00,0x43,0xae,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27, +0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x28,0x00,0xbd,0x27,0x00,0x00,0x66,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x21,0x30,0x80,0x00,0xf8,0x60,0x44,0x8c, +0xed,0x42,0x00,0x08,0xff,0xff,0x05,0x24,0xe0,0xff,0xbd,0x27,0x25,0xb0,0x02,0x3c, +0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf,0x21,0x20,0x82,0x00, +0x00,0x00,0x90,0x8c,0x21,0x88,0xa0,0x00,0xe1,0x42,0x00,0x0c,0x21,0x20,0xa0,0x00, +0x24,0x80,0x11,0x02,0x06,0x10,0x50,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27, +0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c,0x28,0x00,0xbf,0xaf,0x20,0x00,0xb4,0xaf, +0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x24,0x00,0xb5,0xaf,0x10,0x00,0xb0,0xaf, +0x68,0x15,0x31,0x26,0xa4,0x4b,0x22,0x8e,0x25,0xb0,0x12,0x3c,0x24,0x08,0x53,0x36, +0x21,0x10,0x52,0x00,0x00,0x00,0x70,0x8e,0x00,0x00,0x55,0x8c,0x7f,0x80,0x03,0x3c, +0xff,0x7f,0x02,0x3c,0xff,0xff,0x63,0x34,0xff,0xff,0x42,0x34,0x24,0x10,0x02,0x02, +0x24,0x18,0xa3,0x02,0xc0,0x25,0x04,0x00,0x25,0x18,0x64,0x00,0x00,0x80,0x14,0x3c, +0x00,0x00,0x62,0xae,0x01,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,0x25,0xa8,0x74,0x00, +0xa4,0x4b,0x22,0x8e,0x25,0x80,0x14,0x02,0x01,0x00,0x04,0x24,0x21,0x10,0x52,0x00, +0x00,0x00,0x55,0xac,0xeb,0x0b,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xae, +0xeb,0x0b,0x00,0x0c,0x01,0x00,0x04,0x24,0xc4,0x4b,0x24,0x8e,0x0f,0x00,0x05,0x3c, +0x28,0x00,0xbf,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0xff,0xff,0xa5,0x34, +0x18,0x43,0x00,0x08,0x30,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf, +0x02,0x80,0x11,0x3c,0x10,0x00,0xb0,0xaf,0x18,0x00,0xbf,0xaf,0x68,0x15,0x27,0x26, +0x7f,0x4b,0xe5,0x90,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x70,0x0d,0x63,0x24, +0x18,0x03,0x42,0x34,0x02,0x00,0x06,0x24,0x00,0x00,0x43,0xac,0x34,0x00,0xa6,0x10, +0x21,0x80,0x80,0x00,0x03,0x00,0x03,0x24,0x3a,0x00,0xa3,0x10,0x2e,0x00,0x02,0x2e, +0x10,0x00,0x02,0x2e,0x07,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0xff,0x00,0x04,0x32, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x29,0x43,0x00,0x08, +0x20,0x00,0xbd,0x27,0xfa,0xff,0xa6,0x14,0xff,0x00,0x04,0x32,0x7d,0x4b,0xe4,0x90, +0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10,0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x38,0x00,0x85,0x10,0x68,0x15,0x22,0x26,0x2e,0x00,0x83,0x10, +0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24,0x18,0x43,0x00,0x0c,0xff,0xff,0x05,0x24, +0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34,0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24, +0xed,0x42,0x00,0x0c,0xff,0xff,0x05,0x24,0x68,0x15,0x22,0x26,0x7d,0x4b,0x44,0x90, +0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10,0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14, +0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10,0x03,0x00,0x02,0x24,0xdb,0xff,0x82,0x14, +0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c, +0xed,0x42,0x00,0x0c,0x21,0x30,0x00,0x00,0x72,0x43,0x00,0x08,0xff,0x00,0x04,0x32, +0x25,0x00,0x82,0x2c,0xcc,0xff,0x40,0x14,0x03,0x00,0x03,0x24,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xc7,0xff,0x40,0x14,0x10,0x00,0x02,0x2e,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c, +0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24,0x84,0x43,0x00,0x08,0x00,0x08,0x04,0x24, +0xcc,0xff,0x80,0x14,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x24, +0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24,0x84,0x43,0x00,0x08,0x00,0x08,0x04,0x24, +0xb2,0xff,0x80,0x14,0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c, +0x0f,0x00,0x05,0x24,0xed,0x42,0x00,0x0c,0x21,0x30,0x00,0x00,0x72,0x43,0x00,0x08, +0xff,0x00,0x04,0x32,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x02,0x80,0x11,0x3c, +0x68,0x15,0x28,0x26,0x7f,0x4b,0x06,0x91,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x1c,0x0f,0x63,0x24,0x18,0x03,0x42,0x34,0x02,0x00,0x07,0x24,0x18,0x00,0xb2,0xaf, +0x10,0x00,0xb0,0xaf,0x1c,0x00,0xbf,0xaf,0x00,0x00,0x43,0xac,0x21,0x90,0xa0,0x00, +0x39,0x00,0xc7,0x10,0xff,0x00,0x90,0x30,0x03,0x00,0x03,0x24,0x3f,0x00,0xc3,0x10, +0x2e,0x00,0x02,0x2e,0x10,0x00,0x02,0x2e,0x0c,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x0f,0x00,0x04,0x3c,0xff,0xff,0x84,0x34,0x24,0x20,0x44,0x02,0x00,0x15,0x10,0x00, +0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x25,0x20,0x44,0x00,0x13,0x43,0x00,0x08,0x20,0x00,0xbd,0x27,0xf5,0xff,0xc7,0x14, +0x0f,0x00,0x04,0x3c,0x7d,0x4b,0x04,0x91,0x01,0x00,0x02,0x24,0x33,0x00,0x82,0x10, +0x02,0x00,0x82,0x28,0x38,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x38,0x00,0x86,0x10, +0x68,0x15,0x22,0x26,0x2e,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x24, +0x18,0x43,0x00,0x0c,0xff,0xff,0x05,0x24,0xff,0xfc,0x06,0x3c,0xff,0xff,0xc6,0x34, +0x24,0x30,0x46,0x00,0x00,0x08,0x04,0x24,0xed,0x42,0x00,0x0c,0xff,0xff,0x05,0x24, +0x68,0x15,0x22,0x26,0x7d,0x4b,0x44,0x90,0x01,0x00,0x03,0x24,0x07,0x00,0x83,0x10, +0x02,0x00,0x82,0x28,0x2c,0x00,0x40,0x14,0x02,0x00,0x02,0x24,0x2c,0x00,0x82,0x10, +0x03,0x00,0x02,0x24,0xd6,0xff,0x82,0x14,0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26, +0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0xed,0x42,0x00,0x0c,0x21,0x30,0x00,0x00, +0xdf,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0x25,0x00,0x02,0x2e,0xc7,0xff,0x40,0x14, +0x03,0x00,0x03,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xc1,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x68,0x15,0x22,0x26, +0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x3c,0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24, +0xf6,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xcc,0xff,0x80,0x14,0x68,0x15,0x22,0x26, +0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x24,0xed,0x42,0x00,0x0c,0x0f,0x00,0x06,0x24, +0xf6,0x43,0x00,0x08,0x00,0x08,0x04,0x24,0xad,0xff,0x80,0x14,0x00,0x00,0x00,0x00, +0x68,0x15,0x22,0x26,0x80,0x4b,0x44,0x8c,0x0f,0x00,0x05,0x24,0xed,0x42,0x00,0x0c, +0x21,0x30,0x00,0x00,0xdf,0x43,0x00,0x08,0x0f,0x00,0x04,0x3c,0xe8,0xff,0xbd,0x27, +0x10,0x00,0xb0,0xaf,0x21,0x80,0x80,0x00,0x14,0x00,0xbf,0xaf,0x29,0x43,0x00,0x0c, +0x21,0x20,0x00,0x00,0x40,0x01,0x44,0x34,0x21,0x18,0x40,0x00,0x1f,0x00,0x02,0x2e, +0x00,0x23,0x04,0x00,0x10,0x00,0x40,0x10,0x10,0x00,0x05,0x2e,0x00,0x01,0x64,0x34, +0x06,0x00,0xa0,0x10,0x00,0x23,0x04,0x00,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x13,0x43,0x00,0x0c, +0xf1,0xff,0x10,0x26,0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x13,0x43,0x00,0x0c,0xe2,0xff,0x10,0x26, +0x21,0x10,0x00,0x02,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0x25,0xb0,0x02,0x3c,0x27,0x38,0x05,0x00,0x21,0x40,0x82,0x00, +0xff,0xff,0x02,0x24,0x07,0x00,0xa2,0x10,0x25,0x38,0xe6,0x00,0x00,0x00,0x02,0x8d, +0x00,0x00,0x00,0x00,0x24,0x10,0xe2,0x00,0x00,0x00,0x02,0xad,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xad,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xd8,0xff,0xbd,0x27,0xa8,0x11,0x42,0x24, +0x18,0x03,0x63,0x34,0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf, +0x24,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x62,0xac, +0x21,0x88,0xa0,0x00,0x21,0x98,0xc0,0x00,0x21,0xa0,0x80,0x00,0x00,0x60,0x12,0x40, +0x01,0x00,0x41,0x36,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x0f,0x00,0x02,0x3c, +0xff,0xff,0x42,0x34,0x0a,0x00,0x22,0x12,0x21,0x28,0xc0,0x00,0x5c,0x43,0x00,0x0c, +0x00,0x00,0x00,0x00,0x21,0x20,0x20,0x02,0xe1,0x42,0x00,0x0c,0x21,0x80,0x40,0x00, +0x04,0x10,0x53,0x00,0x27,0x28,0x11,0x00,0x25,0x28,0xa2,0x00,0x24,0x28,0xb0,0x00, +0xc7,0x43,0x00,0x0c,0xff,0x00,0x84,0x32,0x00,0x60,0x92,0x40,0x24,0x00,0xbf,0x8f, +0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x01,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0xe0,0xff,0xbd,0x27,0x54,0x12,0x63,0x24,0x18,0x03,0x42,0x34, +0x18,0x00,0xb2,0xaf,0x1c,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf, +0x00,0x00,0x43,0xac,0x21,0x90,0xa0,0x00,0x00,0x60,0x11,0x40,0x01,0x00,0x21,0x36, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x5c,0x43,0x00,0x0c,0x00,0x00,0x00,0x00, +0x21,0x80,0x40,0x00,0xe1,0x42,0x00,0x0c,0x21,0x20,0x40,0x02,0x24,0x80,0x12,0x02, +0x06,0x80,0x50,0x00,0x00,0x60,0x91,0x40,0x21,0x10,0x00,0x02,0x1c,0x00,0xbf,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xc8,0xff,0xbd,0x27,0x2c,0x00,0xb1,0xaf,0xff,0xff,0x05,0x24, +0x21,0x88,0x80,0x00,0x02,0x00,0x06,0x24,0x10,0x00,0xa4,0x27,0x34,0x00,0xbf,0xaf, +0x30,0x00,0xb2,0xaf,0x58,0x45,0x00,0x0c,0x28,0x00,0xb0,0xaf,0x08,0x00,0x30,0x96, +0x02,0x80,0x02,0x3c,0x21,0x28,0x00,0x00,0x25,0x80,0x02,0x02,0x21,0x20,0x00,0x02, +0x58,0x45,0x00,0x0c,0x10,0x00,0x06,0x24,0x20,0x00,0x02,0x96,0x24,0x00,0x04,0x26, +0x10,0x00,0xa5,0x27,0x03,0xff,0x42,0x30,0xc8,0x00,0x42,0x34,0x20,0x00,0x02,0xa6, +0x60,0x45,0x00,0x0c,0x06,0x00,0x06,0x24,0x25,0xb0,0x03,0x3c,0x50,0x00,0x62,0x34, +0x00,0x00,0x44,0x8c,0x54,0x00,0x65,0x34,0x58,0x00,0x66,0x34,0x18,0x00,0xa4,0xaf, +0x00,0x00,0xa2,0x8c,0x5c,0x00,0x63,0x34,0x2a,0x00,0x04,0x26,0x1c,0x00,0xa2,0xaf, +0x00,0x00,0xc7,0x8c,0x18,0x00,0xa5,0x27,0x06,0x00,0x06,0x24,0x20,0x00,0xa7,0xaf, +0x00,0x00,0x62,0x8c,0x1a,0x00,0x12,0x24,0x60,0x45,0x00,0x0c,0x24,0x00,0xa2,0xaf, +0x30,0x00,0x04,0x26,0x20,0x00,0xa5,0x27,0x60,0x45,0x00,0x0c,0x06,0x00,0x06,0x24, +0x13,0x00,0x03,0x24,0x14,0x00,0x23,0xae,0x0c,0x00,0x32,0xae,0x08,0x00,0x05,0x8e, +0x04,0x00,0x04,0x8e,0xff,0xdf,0x02,0x3c,0x14,0x00,0x06,0x8e,0xff,0xff,0x42,0x34, +0x10,0x00,0x07,0x8e,0xff,0xe0,0x03,0x24,0x24,0x28,0xa2,0x00,0x00,0x40,0x02,0x3c, +0x24,0x20,0x83,0x00,0x25,0x28,0xa2,0x00,0xff,0x81,0x03,0x24,0xfe,0xff,0x02,0x3c, +0x24,0x30,0xc3,0x00,0xff,0xff,0x42,0x34,0x00,0x12,0x84,0x34,0x00,0x80,0x03,0x3c, +0x24,0x20,0x82,0x00,0x25,0x38,0xe3,0x00,0x00,0x26,0xc6,0x34,0x80,0x00,0xa5,0x34, +0x20,0x00,0x02,0x24,0x00,0x00,0x12,0xa6,0x10,0x00,0x07,0xae,0x02,0x00,0x02,0xa2, +0x14,0x00,0x06,0xae,0x04,0x00,0x04,0xae,0x08,0x00,0x05,0xae,0x34,0x00,0xbf,0x8f, +0x30,0x00,0xb2,0x8f,0x2c,0x00,0xb1,0x8f,0x28,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x38,0x00,0xbd,0x27,0x54,0x45,0x00,0x08,0xff,0x00,0xa5,0x30,0x00,0x00,0x85,0xa0, +0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24,0xfc,0xff,0xc0,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x05,0x00,0xc0,0x10,0x00,0x00,0x00,0x00, +0x00,0x00,0x85,0xac,0xff,0xff,0xc6,0x24,0xfd,0xff,0xc0,0x14,0x04,0x00,0x84,0x24, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10, +0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24,0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24, +0x01,0x00,0xa5,0x24,0x00,0x00,0xe2,0xa0,0xfb,0xff,0x66,0x14,0x01,0x00,0xe7,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x21,0x38,0x80,0x00,0x08,0x00,0xc0,0x10, +0xff,0xff,0xc3,0x24,0xff,0xff,0x06,0x24,0x00,0x00,0xa2,0x8c,0xff,0xff,0x63,0x24, +0x04,0x00,0xa5,0x24,0x00,0x00,0xe2,0xac,0xfb,0xff,0x66,0x14,0x04,0x00,0xe7,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x2b,0x10,0xa4,0x00,0x0d,0x00,0x40,0x14, +0xff,0xff,0x02,0x24,0xff,0xff,0xc6,0x24,0x08,0x00,0xc2,0x10,0x21,0x18,0x80,0x00, +0xff,0xff,0x07,0x24,0x00,0x00,0xa2,0x90,0xff,0xff,0xc6,0x24,0x01,0x00,0xa5,0x24, +0x00,0x00,0x62,0xa0,0xfb,0xff,0xc7,0x14,0x01,0x00,0x63,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x80,0x00,0x21,0x28,0xa6,0x00,0x21,0x18,0x86,0x00,0xff,0xff,0xc6,0x24, +0xfa,0xff,0xc2,0x10,0x00,0x00,0x00,0x00,0xff,0xff,0x07,0x24,0xff,0xff,0xa5,0x24, +0x00,0x00,0xa2,0x90,0xff,0xff,0x63,0x24,0xff,0xff,0xc6,0x24,0xfb,0xff,0xc7,0x14, +0x00,0x00,0x62,0xa0,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0x0c,0x00,0xc0,0x10, +0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x90,0x00,0x00,0xa3,0x90,0x01,0x00,0x84,0x24, +0x23,0x10,0x43,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x04,0x00,0x40,0x14, +0x01,0x00,0xa5,0x24,0xff,0xff,0xc6,0x24,0xf6,0xff,0xc0,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x21,0x10,0xc0,0x00,0xab,0x45,0x00,0x08,0x21,0x18,0x86,0x00, +0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0x04,0x00,0x45,0x10,0x00,0x00,0x00,0x00, +0x01,0x00,0x84,0x24,0xfa,0xff,0x83,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x80,0x00,0x09,0x00,0xc0,0x10,0xff,0xff,0xc3,0x24,0xff,0x00,0xa5,0x30, +0xff,0xff,0x06,0x24,0x00,0x00,0x82,0x90,0xff,0xff,0x63,0x24,0x05,0x00,0x45,0x10, +0x01,0x00,0x84,0x24,0xfb,0xff,0x66,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0xff,0xff,0x82,0x24,0x21,0x38,0x00,0x00, +0x1f,0x00,0xc0,0x10,0x21,0x18,0x00,0x00,0x02,0x80,0x02,0x3c,0x40,0xa3,0x4b,0x24, +0x00,0x00,0x87,0x90,0x00,0x00,0xa3,0x90,0xff,0xff,0xc6,0x24,0x01,0x00,0x84,0x24, +0x21,0x10,0xeb,0x00,0x16,0x00,0xe0,0x10,0x01,0x00,0xa5,0x24,0x14,0x00,0x60,0x10, +0x21,0x48,0x6b,0x00,0x10,0x00,0xe3,0x10,0x20,0x00,0xe8,0x24,0x00,0x00,0x42,0x90, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x02,0x00,0x40,0x10,0x20,0x00,0x6a,0x24, +0xff,0x00,0x07,0x31,0x00,0x00,0x22,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30, +0x02,0x00,0x40,0x10,0xff,0x00,0xe7,0x30,0xff,0x00,0x43,0x31,0xff,0x00,0x63,0x30, +0x03,0x00,0xe3,0x14,0x00,0x00,0x00,0x00,0xe5,0xff,0xc0,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x23,0x10,0xe3,0x00,0x21,0x18,0x80,0x00,0x00,0x00,0xa2,0x90, +0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0xfc,0xff,0x40,0x14,0x01,0x00,0x84,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x21,0x38,0x80,0x00,0xff,0xff,0x03,0x24, +0xff,0xff,0xc6,0x24,0x06,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90, +0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0xf9,0xff,0x40,0x14,0x01,0x00,0x84,0x24, +0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00,0x00,0x00,0x82,0x80,0xfa,0x45,0x00,0x08, +0x21,0x18,0x80,0x00,0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00, +0xfc,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x01,0x00,0xa5,0x24, +0x00,0x00,0x82,0xa0,0xfc,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0x12,0x00,0xc0,0x10,0x21,0x18,0x80,0x00,0x00,0x00,0x82,0x80, +0x0b,0x46,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x80, +0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90, +0x01,0x00,0xa5,0x24,0x00,0x00,0x82,0xa0,0x05,0x00,0x40,0x10,0x01,0x00,0x84,0x24, +0xff,0xff,0xc6,0x24,0xf9,0xff,0xc0,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xa0, +0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0x00,0x00,0x83,0x90,0x00,0x00,0xa2,0x90, +0x01,0x00,0x84,0x24,0x23,0x10,0x62,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00, +0x03,0x00,0x40,0x14,0x01,0x00,0xa5,0x24,0xf7,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x21,0x10,0x00,0x00,0x0b,0x00,0xc0,0x10, +0x00,0x00,0x00,0x00,0x00,0x00,0xa2,0x90,0x00,0x00,0x83,0x90,0xff,0xff,0xc6,0x24, +0x23,0x10,0x62,0x00,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00,0x03,0x00,0x40,0x14, +0x01,0x00,0xa5,0x24,0xf5,0xff,0x60,0x14,0x01,0x00,0x84,0x24,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x80,0x00,0x2e,0x05,0x00,0x21,0x10,0x80,0x00, +0x3c,0x46,0x00,0x08,0x03,0x2e,0x05,0x00,0x07,0x00,0x60,0x10,0x01,0x00,0x42,0x24, +0x00,0x00,0x43,0x80,0x00,0x00,0x00,0x00,0xfb,0xff,0x65,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0x00,0x00, +0x00,0x00,0x82,0x80,0x48,0x46,0x00,0x08,0x21,0x18,0x80,0x00,0x01,0x00,0x63,0x24, +0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,0xfc,0xff,0x40,0x14,0x23,0x10,0x64,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf, +0x21,0x80,0xa0,0x00,0x14,0x00,0xb1,0xaf,0x18,0x00,0xbf,0xaf,0x21,0x88,0x80,0x00, +0x42,0x46,0x00,0x0c,0x00,0x86,0x10,0x00,0x21,0x18,0x51,0x00,0x03,0x86,0x10,0x00, +0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,0x0a,0x00,0x50,0x10,0x21,0x10,0x60,0x00, +0xff,0xff,0x63,0x24,0x2b,0x10,0x71,0x00,0xf9,0xff,0x40,0x10,0x21,0x10,0x00,0x00, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x21,0x30,0x80,0x00,0x0d,0x00,0xa0,0x10, +0xff,0xff,0xa3,0x24,0x00,0x00,0x82,0x80,0x00,0x00,0x00,0x00,0x09,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x24,0xff,0xff,0x63,0x24,0x05,0x00,0x65,0x10, +0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x80,0x00,0x00,0x00,0x00,0xfa,0xff,0x40,0x14, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x23,0x10,0xc4,0x00,0x00,0x00,0x82,0x90, +0x00,0x00,0x00,0x00,0x19,0x00,0x40,0x10,0x21,0x40,0x00,0x00,0x00,0x00,0xa9,0x80, +0x00,0x00,0x00,0x00,0x17,0x00,0x20,0x11,0x21,0x30,0xa0,0x00,0x00,0x3e,0x02,0x00, +0x03,0x3e,0x07,0x00,0x21,0x18,0x20,0x01,0x15,0x00,0xe3,0x10,0x00,0x00,0x00,0x00, +0x01,0x00,0xc6,0x24,0x00,0x00,0xc2,0x90,0x00,0x00,0x00,0x00,0x00,0x1e,0x02,0x00, +0x03,0x1e,0x03,0x00,0xf8,0xff,0x60,0x14,0x00,0x16,0x02,0x00,0x03,0x16,0x02,0x00, +0x06,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x84,0x24,0x00,0x00,0x82,0x90, +0x00,0x00,0x00,0x00,0xeb,0xff,0x40,0x14,0x01,0x00,0x08,0x25,0x08,0x00,0xe0,0x03, +0x21,0x10,0x00,0x01,0x00,0x00,0xa2,0x90,0x8d,0x46,0x00,0x08,0x00,0x16,0x02,0x00, +0x00,0x00,0xc2,0x90,0x8d,0x46,0x00,0x08,0x00,0x16,0x02,0x00,0x00,0x00,0x87,0x90, +0x00,0x00,0x00,0x00,0x14,0x00,0xe0,0x10,0x21,0x10,0x80,0x00,0x00,0x00,0xa4,0x90, +0x00,0x00,0x00,0x00,0x00,0x1e,0x04,0x00,0x03,0x1e,0x03,0x00,0x09,0x00,0x60,0x10, +0x21,0x30,0xa0,0x00,0x00,0x3e,0x07,0x00,0x03,0x3e,0x07,0x00,0x0b,0x00,0xe3,0x10, +0x01,0x00,0xc6,0x24,0x00,0x00,0xc3,0x80,0x00,0x00,0x00,0x00,0xfb,0xff,0x60,0x14, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0x00,0x00,0x47,0x90,0x00,0x00,0x00,0x00, +0xf0,0xff,0xe0,0x14,0x00,0x00,0x00,0x00,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf, +0x18,0x00,0xbf,0xaf,0x21,0x80,0x80,0x00,0x1d,0x00,0x80,0x10,0x21,0x88,0xa0,0x00, +0x79,0x46,0x00,0x0c,0x21,0x20,0x00,0x02,0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82, +0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,0x22,0x00,0x40,0x10,0x21,0x18,0x00,0x00, +0x9d,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x05,0x00,0x40,0x10,0x21,0x18,0x40,0x00, +0x00,0x00,0x42,0x80,0x00,0x00,0x00,0x00,0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0x02,0x80,0x02,0x3c,0x68,0xa4,0x43,0xac,0x21,0x18,0x00,0x02,0x18,0x00,0xbf,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x00,0x00,0x60,0xa0,0xce,0x46,0x00,0x08,0x01,0x00,0x63,0x24, +0x02,0x80,0x02,0x3c,0x68,0xa4,0x50,0x8c,0x00,0x00,0x00,0x00,0xf3,0xff,0x00,0x12, +0x21,0x18,0x00,0x00,0x79,0x46,0x00,0x0c,0x21,0x20,0x00,0x02,0x21,0x80,0x02,0x02, +0x00,0x00,0x02,0x82,0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,0xe0,0xff,0x40,0x14, +0x21,0x18,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x02,0x80,0x02,0x3c,0x68,0xa4,0x40,0xac,0x20,0x00,0xbd,0x27,0x08,0x00,0xe0,0x03, +0x21,0x10,0x60,0x00,0xe0,0xff,0xbd,0x27,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf, +0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x90,0x8c,0x21,0x90,0x80,0x00, +0x21,0x88,0xa0,0x00,0x21,0x18,0x00,0x00,0x0f,0x00,0x00,0x12,0x21,0x20,0x00,0x02, +0x79,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x80,0x02,0x02,0x00,0x00,0x02,0x82, +0x21,0x28,0x20,0x02,0x21,0x20,0x00,0x02,0x07,0x00,0x40,0x10,0x21,0x18,0x00,0x00, +0x9d,0x46,0x00,0x0c,0x00,0x00,0x00,0x00,0x21,0x18,0x40,0x00,0x09,0x00,0x40,0x14, +0x00,0x00,0x42,0xae,0x21,0x18,0x00,0x02,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x21,0x10,0x60,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x00,0x00,0x42,0x80,0x00,0x00,0x00,0x00,0xf5,0xff,0x40,0x10, +0x01,0x00,0x64,0x24,0x00,0x00,0x60,0xa0,0x07,0x47,0x00,0x08,0x00,0x00,0x44,0xae, +0xd8,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x21,0x88,0x80,0x00,0x21,0x20,0xa0,0x00, +0x1c,0x00,0xb3,0xaf,0x18,0x00,0xb2,0xaf,0x20,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf, +0x42,0x46,0x00,0x0c,0x21,0x98,0xa0,0x00,0x21,0x90,0x40,0x00,0x08,0x00,0x40,0x16, +0x21,0x10,0x20,0x02,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27, +0x42,0x46,0x00,0x0c,0x21,0x20,0x20,0x02,0x21,0x80,0x40,0x00,0x2a,0x10,0x52,0x00, +0x0a,0x00,0x40,0x14,0x00,0x00,0x00,0x00,0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x02, +0x21,0x30,0x40,0x02,0x95,0x45,0x00,0x0c,0xff,0xff,0x10,0x26,0x0b,0x00,0x40,0x10, +0x2a,0x18,0x12,0x02,0xf8,0xff,0x60,0x10,0x01,0x00,0x31,0x26,0x20,0x00,0xbf,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x23,0x47,0x00,0x08, +0x21,0x10,0x20,0x02,0x01,0x80,0x02,0x3c,0x0c,0x1d,0x43,0x24,0x25,0xb0,0x02,0x3c, +0xc0,0xff,0xbd,0x27,0x18,0x03,0x42,0x34,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf, +0x30,0x00,0xb6,0xaf,0x2c,0x00,0xb5,0xaf,0x3c,0x00,0xbf,0xaf,0x28,0x00,0xb4,0xaf, +0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf, +0x00,0x00,0x43,0xac,0x21,0xf0,0x00,0x00,0x02,0x80,0x15,0x3c,0x02,0x80,0x17,0x3c, +0x02,0x80,0x16,0x3c,0x25,0xb0,0x05,0x3c,0x01,0x80,0x04,0x3c,0x0c,0x1d,0x82,0x24, +0x18,0x03,0xa3,0x34,0x00,0x00,0x62,0xac,0xa0,0x02,0xa8,0x34,0x68,0x15,0xae,0x26, +0x00,0x00,0x04,0x8d,0xe4,0x63,0xc3,0x95,0xff,0x0f,0x02,0x3c,0xff,0xff,0x47,0x34, +0x24,0x98,0x87,0x00,0x01,0x00,0x06,0x3c,0x01,0x00,0x63,0x24,0x2b,0x10,0xd3,0x00, +0x07,0x00,0x40,0x10,0xe4,0x63,0xc3,0xa5,0xa4,0x02,0xa2,0x34,0x00,0x00,0x54,0x8c, +0x00,0xb0,0x03,0x3c,0x25,0x98,0x63,0x02,0x00,0x00,0x74,0xae,0x00,0x00,0x00,0xad, +0xb0,0x02,0xa4,0x34,0x00,0x00,0x82,0x8c,0x00,0x00,0x00,0x00,0x24,0x98,0x47,0x00, +0x2b,0x18,0xd3,0x00,0x08,0x00,0x60,0x10,0x25,0xb0,0x02,0x3c,0x00,0xb0,0x02,0x3c, +0x25,0x98,0x62,0x02,0x00,0x00,0x74,0x8e,0xb4,0x02,0xa2,0x34,0x00,0x00,0x54,0xac, +0x00,0x00,0x80,0xac,0x25,0xb0,0x02,0x3c,0xc0,0x02,0x4a,0x34,0x00,0x00,0x53,0x8d, +0xff,0x00,0x05,0x3c,0xff,0xff,0xa2,0x34,0x2b,0x10,0x53,0x00,0x4f,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x25,0xb0,0x11,0x3c,0x00,0x00,0x23,0x8e,0x00,0xff,0x09,0x3c, +0xff,0x00,0x22,0x35,0x00,0xfd,0x08,0x3c,0x01,0x00,0x66,0x24,0x24,0x38,0x62,0x02, +0xac,0x02,0x24,0x36,0xbc,0x02,0x23,0x36,0x05,0x00,0x02,0x35,0x00,0x00,0x86,0xac, +0x2b,0x10,0x47,0x00,0x00,0x00,0x73,0xac,0x00,0x00,0x86,0x8c,0xb7,0x00,0x40,0x14, +0xa6,0x00,0x02,0x35,0x04,0x00,0x02,0x35,0x2b,0x10,0xe2,0x00,0x39,0x00,0x40,0x10, +0x25,0xb0,0x02,0x3c,0x00,0xf8,0x03,0x3c,0x15,0x00,0x62,0x34,0x1d,0x04,0xe2,0x10, +0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x1e,0x01,0x40,0x14,0x00,0xf9,0x04,0x3c, +0x00,0xf1,0x04,0x3c,0x20,0x04,0xe4,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x87,0x00, +0x82,0x01,0x40,0x14,0x10,0x00,0x62,0x34,0x00,0xf0,0x03,0x3c,0x01,0x00,0x62,0x34, +0x5b,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x59,0x02,0x40,0x14, +0x03,0x00,0x62,0x34,0x00,0xd0,0x02,0x3c,0x36,0x04,0xe2,0x10,0x2b,0x10,0x47,0x00, +0x71,0x03,0x40,0x14,0x00,0xe0,0x02,0x3c,0x00,0xc0,0x02,0x3c,0x4b,0x05,0xe2,0x10, +0x00,0x00,0x00,0x00,0x00,0xf0,0x02,0x3c,0x24,0x38,0x62,0x02,0x18,0x00,0xe2,0x10, +0x0f,0x00,0x03,0x3c,0x00,0x70,0x09,0x3c,0x24,0x10,0x69,0x02,0x02,0x25,0x13,0x00, +0xff,0xff,0x63,0x34,0x00,0x50,0x08,0x3c,0x24,0x28,0x63,0x02,0x02,0x57,0x02,0x00, +0xff,0x00,0x84,0x30,0xa7,0x01,0xe8,0x10,0xff,0x00,0x66,0x32,0x2b,0x10,0x07,0x01, +0x9b,0x01,0x40,0x14,0x00,0x80,0x02,0x3c,0x00,0x20,0x02,0x3c,0xb5,0x03,0xe2,0x10, +0x2b,0x10,0x47,0x00,0xa3,0x02,0x40,0x14,0x00,0x30,0x02,0x3c,0xb2,0x03,0xe0,0x10, +0x80,0x10,0x04,0x00,0x00,0x10,0x02,0x3c,0xaf,0x03,0xe2,0x10,0x80,0x10,0x04,0x00, +0x25,0xb0,0x02,0x3c,0xc0,0x02,0x42,0x34,0x00,0x00,0x40,0xac,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x25,0xb0,0x07,0x3c, +0x64,0x03,0xe2,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0x28,0x7e,0xe3,0xa2, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x28,0x7e,0xe2,0x92, +0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x30,0x55,0x00,0x40,0x10,0x68,0x15,0xa5,0x26, +0x68,0x15,0xa6,0x26,0x00,0x40,0xc4,0x8c,0xe4,0x42,0xc5,0x8c,0xf0,0xff,0x02,0x24, +0x24,0x20,0x82,0x00,0x00,0x50,0x03,0x3c,0x01,0x00,0x84,0x34,0x24,0x28,0xa3,0x00, +0x00,0x10,0x02,0x3c,0x00,0x40,0xc4,0xac,0x95,0x03,0xa2,0x10,0xd6,0x42,0xc0,0xa0, +0x28,0x7e,0xe2,0x92,0x00,0x00,0x00,0x00,0x02,0x00,0x42,0x30,0x40,0x00,0x40,0x10, +0x68,0x15,0xa2,0x26,0x00,0x40,0x43,0x8c,0x0f,0xff,0x04,0x24,0x24,0x18,0x64,0x00, +0x10,0x00,0x63,0x34,0x00,0x40,0x43,0xac,0x28,0x7e,0xe2,0x92,0x00,0x00,0x00,0x00, +0x04,0x00,0x42,0x30,0x32,0x00,0x40,0x10,0x68,0x15,0xa2,0x26,0x00,0x40,0x43,0x8c, +0xff,0xf0,0x04,0x24,0x24,0x18,0x64,0x00,0x00,0x01,0x63,0x34,0x25,0xb0,0x05,0x3c, +0x00,0x40,0x43,0xac,0x4c,0x00,0xa3,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x03,0x00,0x42,0x30,0x06,0x00,0x40,0x14,0x68,0x15,0xa4,0x26,0x00,0x40,0x83,0x8c, +0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,0x24,0x18,0x62,0x00,0x00,0x40,0x83,0xac, +0x60,0x7b,0xc4,0x8e,0x01,0x80,0x06,0x3c,0x0c,0x1e,0xc2,0x24,0x18,0x03,0xa3,0x34, +0x60,0x7b,0xc6,0x26,0x00,0x00,0x62,0xac,0x11,0x00,0x86,0x10,0x02,0x80,0x02,0x3c, +0xbf,0x00,0xb2,0x34,0x68,0x15,0x51,0x24,0x21,0x80,0xc0,0x00,0x21,0xf0,0x00,0x00, +0x00,0x00,0x42,0x92,0x00,0x00,0x00,0x00,0x04,0x00,0x42,0x2c,0x09,0x00,0x40,0x10, +0x02,0x80,0x02,0x3c,0xf8,0x65,0x24,0x8e,0x30,0x08,0x00,0x0c,0x00,0x00,0x00,0x00, +0x60,0x7b,0xc2,0x8e,0x00,0x00,0x00,0x00,0xf5,0xff,0x50,0x14,0x00,0x00,0x00,0x00, +0x02,0x80,0x02,0x3c,0x08,0x08,0x44,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00, +0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,0x58,0x47,0x00,0x08,0x25,0xb0,0x05,0x3c, +0x00,0x40,0x43,0x8c,0xff,0xf0,0x04,0x24,0x01,0x48,0x00,0x08,0x24,0x18,0x64,0x00, +0x00,0x40,0x43,0x8c,0x0f,0xff,0x04,0x24,0xf7,0x47,0x00,0x08,0x24,0x18,0x64,0x00, +0x00,0x40,0xa4,0x8c,0xe4,0x42,0xa6,0x8c,0xf0,0xff,0x02,0x24,0x00,0x90,0x03,0x3c, +0x24,0x20,0x82,0x00,0x24,0x18,0xc3,0x00,0x00,0x10,0x02,0x3c,0xb0,0xff,0x62,0x14, +0x00,0x40,0xa4,0xac,0x50,0x0c,0xe3,0x34,0xff,0xbf,0x02,0x3c,0x00,0x00,0x64,0x90, +0xff,0xff,0x42,0x34,0x24,0x10,0xc2,0x00,0x00,0x80,0x03,0x3c,0x25,0x10,0x43,0x00, +0xe4,0x42,0xa2,0xac,0xee,0x47,0x00,0x08,0xd7,0x42,0xa4,0xa0,0x55,0x03,0xe2,0x10, +0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x18,0x00,0x40,0x14,0x00,0xfe,0x03,0x3c, +0x20,0x00,0x02,0x35,0x53,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,0x85,0x00,0x40,0x14, +0xa0,0x00,0x02,0x35,0x15,0x00,0x02,0x35,0x9d,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00, +0x17,0x01,0x40,0x14,0x17,0x00,0x02,0x35,0x08,0x00,0x02,0x35,0x16,0x04,0xe2,0x10, +0x64,0x03,0x23,0x36,0x2b,0x10,0x47,0x00,0x24,0x02,0x40,0x14,0x09,0x00,0x02,0x35, +0x07,0x00,0x02,0x35,0x53,0xff,0xe2,0x14,0x00,0x00,0x00,0x00,0xd9,0x58,0x00,0x0c, +0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x18,0x00,0x62,0x34, +0x42,0x03,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x95,0x00,0x40,0x14, +0x07,0x00,0x22,0x35,0xad,0x00,0x02,0x35,0x8c,0x03,0xe2,0x10,0x00,0x00,0x00,0x00, +0x2b,0x10,0x47,0x00,0xd2,0x00,0x40,0x14,0x10,0x00,0x62,0x34,0xaa,0x00,0x02,0x35, +0x75,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x6e,0x01,0x40,0x14, +0xab,0x00,0x02,0x35,0xa7,0x00,0x02,0x35,0x3b,0xff,0xe2,0x14,0x00,0xf0,0x02,0x3c, +0x00,0xff,0x62,0x32,0x02,0xa2,0x02,0x00,0x02,0x1c,0x13,0x00,0x01,0x00,0x02,0x24, +0xbd,0x05,0x82,0x12,0xff,0x00,0x65,0x30,0x02,0x00,0x02,0x24,0xae,0x05,0x82,0x12, +0xc0,0x10,0x05,0x00,0x03,0x00,0x02,0x24,0x9e,0x05,0x82,0x12,0xc0,0x10,0x05,0x00, +0x04,0x00,0x02,0x24,0xc5,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x08,0x00,0x02,0x24, +0x29,0x06,0x82,0x12,0xc0,0x10,0x05,0x00,0x09,0x00,0x02,0x24,0x19,0x06,0x82,0x12, +0xc0,0x10,0x05,0x00,0x0a,0x00,0x02,0x24,0x09,0x06,0x82,0x12,0xc0,0x10,0x05,0x00, +0x0b,0x00,0x02,0x24,0xf9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x0c,0x00,0x02,0x24, +0xe9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x0d,0x00,0x02,0x24,0xd9,0x05,0x82,0x12, +0xc0,0x10,0x05,0x00,0x0e,0x00,0x02,0x24,0xc9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00, +0x0f,0x00,0x02,0x24,0xb9,0x05,0x82,0x12,0xc0,0x10,0x05,0x00,0x10,0x00,0x02,0x24, +0x2b,0xff,0x82,0x16,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00, +0x58,0x51,0x44,0x94,0x54,0x51,0x45,0x94,0x25,0xb0,0x06,0x3c,0x00,0x24,0x04,0x00, +0xc4,0x02,0xc3,0x34,0x21,0x28,0xa4,0x00,0x00,0x00,0x65,0xac,0x64,0x51,0x47,0x8c, +0x60,0x51,0x43,0x8c,0x5c,0x51,0x44,0x94,0xc8,0x02,0xc6,0x34,0x21,0x18,0x67,0x00, +0x00,0x1c,0x03,0x00,0x21,0x20,0x83,0x00,0x00,0x00,0xc4,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x06,0x00,0x82,0x34,0xfe,0x02,0xe2,0x10,0x00,0x00,0x00,0x00, +0x2b,0x10,0x47,0x00,0x52,0x00,0x40,0x14,0x01,0x00,0x82,0x34,0x3b,0x03,0xe2,0x10, +0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x6a,0x01,0x40,0x14,0x03,0x00,0x82,0x34, +0x17,0x00,0x62,0x34,0xaa,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0xe2,0x00, +0x7d,0x04,0x40,0x14,0x00,0x00,0x00,0x00,0x18,0x00,0x62,0x34,0x40,0x05,0xe2,0x10, +0x00,0x00,0x00,0x00,0xe3,0xfe,0xe4,0x14,0x68,0x15,0xa2,0x26,0x64,0x64,0x44,0x90, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x0b,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,0xf8,0x00,0x40,0x14, +0xa3,0x00,0x02,0x35,0x22,0x00,0x02,0x35,0x8b,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00, +0xbb,0x01,0x40,0x14,0x68,0x15,0xa4,0x26,0x28,0x00,0x02,0x35,0xe7,0x04,0xe2,0x10, +0x0f,0x00,0x10,0x3c,0x29,0x00,0x02,0x35,0xcf,0xfe,0xe2,0x14,0x00,0xf0,0x02,0x3c, +0x02,0x1c,0x13,0x00,0x00,0x1f,0x62,0x32,0x68,0x15,0xb0,0x26,0x02,0xa2,0x02,0x00, +0x3f,0x00,0x66,0x30,0xc1,0x42,0x06,0xa2,0xbc,0x42,0x14,0xa2,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x3b,0x15,0x00,0x0c, +0x00,0x00,0x00,0x00,0x21,0xa0,0x40,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34, +0x00,0x00,0x54,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x03,0x40,0x02,0x92,0x00,0x00,0x00,0x00,0x01,0x00,0x42,0x24,0xce,0x47,0x00,0x08, +0x03,0x40,0x02,0xa2,0xf5,0x02,0xe2,0x10,0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00, +0x4d,0x00,0x40,0x14,0x0e,0x00,0x22,0x35,0x1a,0x00,0x62,0x34,0x43,0x03,0xe2,0x10, +0x2b,0x10,0xe2,0x00,0x38,0x01,0x40,0x14,0x00,0x00,0x00,0x00,0xf0,0x04,0xe9,0x10, +0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x35,0xa6,0xfe,0xe2,0x14,0x00,0x00,0x00,0x00, +0x0e,0x4f,0x00,0x0c,0x01,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0xfb,0x03,0x3c,0x02,0x00,0x62,0x34,0x14,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00, +0xd6,0x00,0x40,0x14,0x01,0x00,0x02,0x35,0x20,0x00,0x82,0x34,0xd2,0x03,0xe2,0x10, +0x2b,0x10,0x47,0x00,0x25,0x02,0x40,0x14,0x07,0x00,0x82,0x34,0x95,0xfe,0xe2,0x14, +0x68,0x15,0xa2,0x26,0x48,0x64,0x44,0x90,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34, +0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xea,0x02,0xe2,0x10, +0x2b,0x10,0x47,0x00,0xef,0x00,0x40,0x14,0x12,0x00,0x62,0x34,0x02,0x00,0x82,0x34, +0xa3,0xfe,0xe2,0x10,0x2b,0x10,0xe2,0x00,0xa4,0x01,0x40,0x14,0x00,0xff,0x62,0x32, +0x03,0x00,0x82,0x34,0xd6,0x04,0xe2,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x82,0x34, +0x81,0xfe,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x02,0x14,0x13,0x00,0xff,0x00,0x54,0x30, +0x00,0xff,0x63,0x32,0x07,0x00,0x82,0x2e,0x95,0xfe,0x40,0x10,0x02,0xf2,0x03,0x00, +0x02,0x80,0x04,0x3c,0x84,0x9f,0x83,0x24,0x80,0x10,0x14,0x00,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x8c,0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x00,0x00, +0xec,0x02,0xe2,0x10,0x2b,0x10,0x47,0x00,0x12,0x01,0x40,0x14,0x11,0x00,0x62,0x34, +0xae,0x00,0x02,0x35,0x9e,0x04,0xe2,0x10,0x02,0x24,0x13,0x00,0xaf,0x00,0x02,0x35, +0x68,0xfe,0xe2,0x14,0x00,0x00,0x00,0x00,0x76,0x50,0x00,0x0c,0x00,0x00,0x00,0x00, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x0d,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00, +0xfa,0x00,0x40,0x14,0x0f,0x00,0x22,0x35,0x0c,0x00,0x22,0x35,0xf6,0x03,0xe2,0x10, +0x68,0x15,0xa2,0x26,0x0d,0x00,0x22,0x35,0x5b,0xfe,0xe2,0x14,0x00,0xf0,0x02,0x3c, +0x68,0x15,0xa3,0x26,0x01,0x00,0x02,0x24,0xce,0x47,0x00,0x08,0x46,0x64,0x62,0xa4, +0x02,0x03,0xe2,0x10,0x2b,0x10,0x47,0x00,0x15,0x01,0x40,0x14,0x00,0xa0,0x02,0x3c, +0x00,0x60,0x02,0x3c,0x04,0x00,0xe2,0x10,0x80,0x10,0x04,0x00,0x69,0xfe,0xe9,0x14, +0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x68,0x15,0xa3,0x26, +0x21,0x10,0x43,0x00,0x21,0x10,0x4a,0x00,0xce,0x47,0x00,0x08,0xc1,0x43,0x46,0xa0, +0x07,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,0x37,0x01,0x40,0x14,0x00,0xff,0x62,0x32, +0x18,0x00,0x02,0x35,0xe3,0x03,0xe2,0x10,0x19,0x00,0x02,0x35,0x3e,0xfe,0xe2,0x14, +0x00,0xf0,0x02,0x3c,0x25,0xb0,0x03,0x3c,0xc0,0x02,0x62,0x34,0x00,0x00,0x40,0xac, +0x94,0x0e,0x64,0x34,0x9c,0x0e,0x62,0x34,0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34, +0x00,0x00,0x89,0x8c,0x68,0x15,0xaf,0x26,0x00,0x00,0x4b,0x8c,0x00,0x00,0xac,0x8c, +0x00,0x00,0xc4,0x8c,0xb4,0x0e,0x62,0x34,0x0c,0x40,0xe5,0x8d,0x10,0x40,0xe6,0x8d, +0x00,0x00,0x4a,0x8c,0xff,0x03,0x07,0x3c,0x00,0xfc,0x08,0x24,0xbc,0x0e,0x62,0x34, +0x24,0x48,0x27,0x01,0x24,0x20,0x87,0x00,0x00,0x00,0x4d,0x8c,0x24,0x30,0xc8,0x00, +0x02,0x4c,0x09,0x00,0x24,0x28,0xa8,0x00,0x02,0x24,0x04,0x00,0xcc,0x0e,0x68,0x34, +0xf0,0xff,0x02,0x3c,0xc4,0x0e,0x63,0x34,0xff,0x03,0x42,0x34,0x25,0x28,0xa9,0x00, +0x25,0x30,0xc4,0x00,0x00,0x00,0x69,0x8c,0x08,0x40,0xe4,0x8d,0x00,0x00,0x0e,0x8d, +0x24,0x58,0x67,0x01,0x24,0x50,0x47,0x01,0x24,0x30,0xc2,0x00,0x24,0x28,0xa2,0x00, +0x82,0x59,0x0b,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x03,0x3c,0xff,0x9f,0x02,0x3c, +0xff,0xff,0x63,0x34,0xff,0xff,0x42,0x34,0x25,0x28,0xab,0x00,0x25,0x30,0xca,0x00, +0x24,0x60,0x87,0x01,0x24,0x68,0xa7,0x01,0xff,0x00,0x08,0x3c,0x24,0x20,0x82,0x00, +0x24,0x30,0xc3,0x00,0x24,0x28,0xa3,0x00,0x24,0x70,0xc7,0x01,0x00,0x61,0x0c,0x00, +0x00,0x69,0x0d,0x00,0x24,0x48,0x27,0x01,0x00,0xff,0x03,0x35,0x00,0x20,0x02,0x3c, +0x25,0x20,0x82,0x00,0x25,0x28,0xac,0x00,0x25,0x30,0xcd,0x00,0x02,0x4c,0x09,0x00, +0x02,0x74,0x0e,0x00,0x24,0x18,0x63,0x02,0x08,0x40,0xe4,0xad,0x0c,0x40,0xe5,0xad, +0x10,0x40,0xe6,0xad,0x14,0x40,0xe9,0xa5,0x4d,0x04,0x60,0x10,0x16,0x40,0xee,0xa5, +0x24,0x10,0x68,0x02,0x02,0x14,0x02,0x00,0x02,0x1a,0x13,0x00,0xc7,0x42,0xe2,0xa1, +0xc3,0x42,0xe3,0xa1,0x68,0x15,0xa2,0x26,0xc3,0x42,0x44,0x90,0x25,0xb0,0x03,0x3c, +0x61,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0xfd,0x55,0x00,0x0c,0x10,0x00,0xa4,0x27,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x92,0x02,0xe2,0x10,0x2b,0x10,0x47,0x00,0xda,0x00,0x40,0x14,0xa4,0x00,0x02,0x35, +0xa1,0x00,0x02,0x35,0x26,0x03,0xe2,0x10,0x02,0x24,0x13,0x00,0xa2,0x00,0x02,0x35, +0xd8,0xfd,0xe2,0x14,0xc4,0x02,0x22,0x36,0x00,0xff,0xa3,0x34,0x24,0x18,0x63,0x02, +0x00,0x00,0x45,0x8c,0x02,0xf2,0x03,0x00,0xb2,0x51,0x00,0x0c,0x21,0x20,0xc0,0x03, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x11,0x04,0xe2,0x10,0x00,0x00,0x00,0x00, +0xac,0x00,0x02,0x35,0xcb,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x8b,0x4f,0x00,0x0c, +0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x46,0x03,0xe2,0x10, +0x00,0x00,0x00,0x00,0x2b,0x10,0x47,0x00,0x3e,0x01,0x40,0x14,0x02,0x00,0x02,0x35, +0x03,0x00,0x62,0x34,0xfb,0x03,0xe2,0x10,0x68,0x15,0xa3,0x26,0xbe,0xfd,0xe8,0x14, +0x00,0xf0,0x02,0x3c,0xcc,0x58,0x00,0x0c,0x21,0x20,0x60,0x02,0x00,0xff,0x63,0x32, +0x00,0xcc,0x02,0x34,0xd3,0xfd,0x62,0x14,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26, +0xe4,0x42,0x43,0x8c,0x00,0x10,0x04,0x3c,0x25,0x18,0x64,0x00,0xce,0x47,0x00,0x08, +0xe4,0x42,0x43,0xac,0x04,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,0x04,0x01,0x40,0x14, +0x24,0x10,0x65,0x02,0x08,0x00,0x62,0x34,0x7b,0x03,0xe2,0x10,0x20,0x00,0x62,0x34, +0xa8,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x07,0x52,0x00,0x0c,0x00,0x00,0x00,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x0c,0x03,0xe2,0x10,0x2b,0x10,0xe2,0x00,0x9e,0x00,0x40,0x14, +0x00,0xff,0x62,0x32,0x13,0x00,0x62,0x34,0x75,0x03,0xe2,0x10,0x14,0x00,0x62,0x34, +0x94,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x3a,0x0c,0x00,0x0c,0xfd,0x00,0x04,0x24, +0x25,0xb0,0x03,0x3c,0x10,0x10,0x02,0x3c,0xa0,0x00,0x64,0x34,0x10,0x10,0x42,0x34, +0x00,0x00,0x82,0xac,0x00,0xc0,0x02,0x3c,0xa8,0x00,0x65,0x34,0x00,0xa1,0x42,0x34, +0xa4,0x00,0x63,0x34,0x00,0x00,0x60,0xac,0x00,0x00,0xa2,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0xd2,0x02,0xe2,0x10,0xc4,0x02,0x23,0x36,0x2b,0x10,0xe2,0x00, +0x09,0x01,0x40,0x14,0x68,0x15,0xa2,0x26,0x04,0x00,0x82,0x34,0xaa,0x03,0xe2,0x10, +0x68,0x15,0xa2,0x26,0x05,0x00,0x82,0x34,0x7a,0xfd,0xe2,0x14,0x68,0x15,0xa2,0x26, +0x50,0x64,0x44,0x90,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x68,0x15,0xa2,0x26,0x76,0x4b,0x44,0x90, +0xc4,0x02,0x23,0x36,0x00,0x00,0x64,0xac,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xf2,0x02,0xe2,0x10, +0x10,0x00,0x22,0x35,0x64,0xfd,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x00,0xff,0x63,0x32, +0x00,0xff,0x02,0x34,0xbe,0x03,0x62,0x10,0x68,0x15,0xa2,0x26,0xce,0x47,0x00,0x08, +0xec,0x65,0x40,0xac,0x5c,0x03,0xe2,0x10,0x00,0x00,0x00,0x00,0x12,0x00,0x62,0x34, +0x58,0xfd,0xe2,0x14,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xff,0x00,0x02,0x3c,0x00,0xff,0x42,0x34, +0x24,0x10,0x62,0x02,0x02,0xf2,0x02,0x00,0x68,0x15,0xa3,0x26,0x77,0x4b,0x7e,0xa0, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x0f,0x01,0xe2,0x10,0x00,0x40,0x02,0x3c,0x61,0xfd,0xe2,0x14, +0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x68,0x15,0xa3,0x26, +0x21,0x10,0x43,0x00,0x21,0x10,0x4a,0x00,0xce,0x47,0x00,0x08,0xc1,0x43,0x46,0xa0, +0xc4,0x02,0xe2,0x10,0x2b,0x10,0x47,0x00,0xd3,0x00,0x40,0x14,0x00,0xb0,0x02,0x3c, +0x00,0x90,0x02,0x3c,0x53,0xfd,0xe2,0x14,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26, +0x21,0x10,0x82,0x00,0xce,0x47,0x00,0x08,0x73,0x44,0x46,0xa0,0xe0,0x02,0xe2,0x10, +0x25,0xb0,0x02,0x3c,0x14,0x00,0x02,0x35,0x2f,0xfd,0xe2,0x14,0x00,0xf0,0x02,0x3c, +0xff,0x00,0x04,0x3c,0x00,0xff,0x82,0x34,0x24,0x10,0x62,0x02,0x45,0xfd,0x40,0x10, +0x25,0xb0,0x02,0x3c,0x68,0x15,0xa3,0x26,0x04,0x43,0x66,0x90,0x24,0x20,0x64,0x02, +0x00,0xff,0x65,0x32,0x02,0x24,0x04,0x00,0x02,0x2a,0x05,0x00,0x00,0x01,0xc6,0x34, +0xfb,0xff,0x87,0x24,0xfb,0xff,0xa2,0x24,0x1f,0x43,0x62,0xa0,0x04,0x43,0x66,0xac, +0x1d,0x43,0x67,0xa0,0x1c,0x43,0x64,0xa0,0xce,0x47,0x00,0x08,0x1e,0x43,0x65,0xa0, +0x08,0x40,0x83,0x8c,0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x02,0x34,0x13,0x00,0x00,0x1f,0x65,0x32,0x00,0x20,0x02,0x3c,0x25,0x18,0x62,0x00, +0x02,0xa2,0x05,0x00,0x3f,0x00,0xc6,0x30,0xc1,0x42,0x86,0xa0,0x08,0x40,0x83,0xac, +0xce,0x47,0x00,0x08,0xbc,0x42,0x94,0xa0,0x02,0x22,0x02,0x00,0x03,0x00,0x83,0x2c, +0x24,0xfd,0x60,0x10,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,0xce,0x47,0x00,0x08, +0x02,0x40,0x44,0xa0,0xae,0x02,0xe2,0x10,0xa5,0x00,0x02,0x35,0x01,0xfd,0xe2,0x14, +0x00,0x00,0x00,0x00,0x02,0x24,0x13,0x00,0xec,0x51,0x00,0x0c,0xff,0x00,0x84,0x30, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0x22,0x02,0x00,0x21,0xa0,0x00,0x00, +0xbf,0x4a,0x00,0x08,0x27,0xb0,0x07,0x3c,0x00,0x01,0x82,0x2e,0x0b,0x00,0x40,0x10, +0x08,0x00,0xe7,0x24,0x00,0x00,0xe2,0x94,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0x30, +0xff,0x00,0xc3,0x33,0xf8,0xff,0x64,0x14,0x01,0x00,0x94,0x26,0xff,0xff,0x94,0x26, +0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0xa4,0xff,0x00,0x82,0x2e, +0x03,0xfd,0x40,0x14,0x25,0xb0,0x02,0x3c,0x12,0x87,0x03,0x3c,0xc4,0x02,0x42,0x34, +0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0xf2,0x02,0x00, +0x80,0x00,0xc0,0x13,0x00,0x00,0x00,0x00,0x94,0x00,0x22,0x36,0x00,0x00,0x43,0x94, +0xb0,0x03,0x25,0x36,0x68,0x15,0xa6,0x26,0xff,0xff,0x74,0x30,0x1b,0x00,0x9e,0x02, +0x02,0x00,0xc0,0x17,0x00,0x00,0x00,0x00,0x0d,0x00,0x07,0x00,0x00,0x00,0xb4,0xac, +0xe6,0x4a,0xc7,0x94,0xff,0xff,0xc3,0x27,0x01,0x00,0x02,0x24,0xe3,0x4a,0xc2,0xa0, +0x80,0xff,0x02,0x24,0x6a,0x03,0x2a,0x36,0x4f,0x00,0x2b,0x36,0x9e,0x00,0x2c,0x36, +0x44,0x00,0x28,0x36,0xd8,0x00,0x2d,0x36,0x12,0xa0,0x00,0x00,0x80,0x22,0x14,0x00, +0x00,0xf8,0x84,0x24,0x18,0x00,0xd4,0x03,0xff,0xff,0x7e,0x30,0x00,0x19,0x1e,0x00, +0x25,0x18,0x62,0x00,0x26,0xb0,0x02,0x3c,0x7c,0x00,0x42,0x34,0x12,0x48,0x00,0x00, +0x23,0x38,0xe9,0x00,0x00,0x00,0x47,0xa5,0x00,0x00,0xbe,0xac,0x00,0x00,0x63,0xa1, +0x00,0x00,0xb4,0xac,0x00,0x00,0x94,0xa5,0x42,0xa1,0x04,0x00,0x00,0x00,0xb4,0xac, +0x00,0x00,0x54,0xa4,0x00,0x00,0x03,0x95,0xff,0xfd,0x02,0x24,0xe8,0x4a,0xc7,0xa4, +0x24,0x18,0x62,0x00,0x00,0x00,0x03,0xa5,0x00,0x00,0x02,0x95,0x00,0x00,0x00,0x00, +0x00,0x02,0x42,0x34,0x00,0x00,0x02,0xa5,0x00,0x00,0xa3,0x91,0x00,0x00,0x00,0x00, +0x40,0x00,0x63,0x34,0x00,0x00,0xa3,0xa1,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0xcc,0x02,0x23,0x36,0x00,0xff,0x64,0x32,0x02,0xf4,0x02,0x00,0x00,0x00,0x73,0xac, +0x04,0x00,0xc0,0x13,0x02,0x9a,0x04,0x00,0x01,0x00,0x02,0x24,0x02,0x00,0xc2,0x13, +0x01,0x00,0x04,0x24,0x21,0x20,0x00,0x00,0x2a,0x42,0x00,0x0c,0x0f,0x00,0x10,0x3c, +0xff,0xff,0x05,0x36,0x95,0x44,0x00,0x0c,0x21,0x20,0x60,0x02,0xff,0xff,0x10,0x36, +0x24,0xa0,0x50,0x00,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x54,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xd6,0xfe,0xe2,0x10,0x00,0x00,0x00,0x00, +0x90,0xfc,0xe3,0x14,0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,0x02,0x9a,0x02,0x00, +0xcc,0x02,0x23,0x36,0x00,0x00,0x73,0xac,0x21,0x20,0x71,0x02,0x00,0x00,0x94,0x8c, +0xc4,0x02,0x22,0x36,0x00,0x00,0x54,0xac,0x00,0x00,0x94,0x8c,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x7c,0x02,0xe2,0x10,0x25,0xb0,0x02,0x3c,0x03,0x00,0x02,0x35, +0x81,0xfc,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x68,0x15,0xa4,0x26,0xe4,0x42,0x83,0x8c, +0xff,0xef,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xe4,0x42,0x83,0xac, +0xce,0x47,0x00,0x08,0xe6,0x42,0x80,0xa0,0x5c,0x64,0x44,0x90,0xc4,0x02,0x23,0x36, +0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x28,0x02,0xe3,0x10, +0x01,0x00,0x62,0x34,0x70,0xfc,0xe2,0x14,0x00,0xf0,0x02,0x3c,0x68,0x15,0xa2,0x26, +0xf8,0x63,0x43,0x8c,0xfd,0xff,0x04,0x24,0x24,0x18,0x64,0x00,0x01,0x00,0x63,0x34, +0xce,0x47,0x00,0x08,0xf8,0x63,0x43,0xac,0x82,0xfc,0xe2,0x14,0x25,0xb0,0x02,0x3c, +0x80,0x10,0x04,0x00,0x68,0x15,0xa3,0x26,0x21,0x10,0x43,0x00,0xce,0x47,0x00,0x08, +0x60,0x45,0x45,0xac,0x25,0xb0,0x05,0x3c,0x4f,0x00,0xa2,0x34,0x9e,0x00,0xa3,0x34, +0x00,0x00,0x40,0xa0,0x00,0x00,0x60,0xa4,0x94,0x00,0xa2,0x34,0x00,0x00,0x43,0x94, +0x9a,0x00,0xa4,0x34,0x98,0x00,0xa6,0x34,0xff,0xff,0x74,0x30,0x80,0x12,0x14,0x00, +0x00,0xf8,0x42,0x24,0x42,0xa1,0x02,0x00,0x00,0x14,0x02,0x24,0x00,0x00,0x82,0xa4, +0x26,0xb0,0x02,0x3c,0xb0,0x03,0xa7,0x34,0xa0,0x80,0x03,0x24,0x7c,0x00,0x42,0x34, +0x00,0x00,0xc3,0xa4,0x44,0x00,0xa4,0x34,0x00,0x00,0xf4,0xac,0x00,0x00,0x54,0xa4, +0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24,0xd8,0x00,0xa5,0x34,0x24,0x18,0x62,0x00, +0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94,0x68,0x15,0xa6,0x26,0x00,0x02,0x42,0x34, +0x00,0x00,0x82,0xa4,0x00,0x00,0xa3,0x90,0xbf,0xff,0x02,0x24,0xe8,0x4a,0xc0,0xa4, +0x24,0x18,0x62,0x00,0xe3,0x4a,0xc0,0xa0,0x00,0x00,0xa3,0xa0,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x68,0x15,0xa3,0x26, +0x21,0x10,0x43,0x00,0x21,0x10,0x4a,0x00,0xce,0x47,0x00,0x08,0x34,0x43,0x46,0xa0, +0xd7,0x42,0xc3,0x90,0x50,0x0c,0xe2,0x34,0x21,0x20,0x00,0x00,0x00,0x00,0x43,0xa0, +0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x82,0x24,0x68,0x15,0xa2,0x26,0xd7,0x42,0x44,0x90,0x25,0xb0,0x03,0x3c, +0x58,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24, +0x68,0x15,0xa5,0x26,0xe4,0x42,0xa3,0x8c,0x00,0x40,0x04,0x3c,0xff,0x7f,0x02,0x3c, +0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xee,0x47,0x00,0x08, +0xe4,0x42,0xa3,0xac,0xee,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x08,0x40,0xc3,0x8d,0xff,0x9f,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x18,0x62,0x00,0xce,0x47,0x00,0x08,0x08,0x40,0xc3,0xad,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x77,0x4b,0xc4,0x91, +0xc4,0x02,0x23,0x36,0xcc,0x02,0x22,0x36,0x00,0x00,0x53,0xac,0x00,0x00,0x64,0xac, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x6e,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x4c,0x64,0xc3,0x91,0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0xa5,0x34,0x24,0x28,0x65,0x02, +0x02,0x2a,0x05,0x00,0x40,0x11,0x05,0x00,0x26,0xb0,0x04,0x3c,0x94,0x00,0x23,0x36, +0x00,0x00,0x65,0xa4,0xc0,0xff,0x54,0x24,0x7c,0x00,0x8b,0x34,0x04,0x00,0x07,0x24, +0x7a,0x00,0x84,0x34,0x00,0x04,0x02,0x24,0xa0,0x80,0x03,0x24,0x9a,0x00,0x26,0x36, +0x98,0x00,0x28,0x36,0x96,0x00,0x29,0x36,0xb0,0x03,0x2a,0x36,0x00,0x00,0xc2,0xa4, +0x00,0x00,0x03,0xa5,0x00,0x00,0x27,0xa5,0x00,0x00,0x87,0xa0,0x00,0x00,0x54,0xad, +0x44,0x00,0x24,0x36,0x00,0x00,0x74,0xa5,0x00,0x00,0x83,0x94,0xff,0xfd,0x02,0x24, +0xe6,0x4a,0xc5,0xa5,0x24,0x18,0x62,0x00,0x00,0x00,0x83,0xa4,0x00,0x00,0x82,0x94, +0x00,0x00,0x00,0x00,0x00,0x02,0x42,0x34,0x00,0x00,0x82,0xa4,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x00,0x0f,0x62,0x32,0x02,0x22,0x02,0x00,0x01,0x00,0x03,0x24, +0xda,0x02,0x83,0x10,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x24,0xdb,0x02,0x82,0x10, +0x00,0x00,0x00,0x00,0x03,0x00,0x02,0x24,0xf7,0x00,0x82,0x10,0x00,0x00,0x00,0x00, +0xa6,0x50,0x00,0x0c,0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x04,0x43,0xc2,0x91,0xce,0x47,0x00,0x08,0x04,0x43,0xc2,0xad,0x0e,0x4f,0x00,0x0c, +0x07,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x9a,0x4f,0x00,0x0c, +0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x60,0x64,0xc3,0x91, +0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,0x02,0x9a,0x02,0x00,0xcc,0x02,0x23,0x36, +0x00,0x00,0x73,0xac,0xc4,0x02,0x24,0x36,0x00,0x00,0x94,0x8c,0x21,0x10,0x71,0x02, +0x00,0x00,0x54,0xac,0x00,0x00,0x54,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0xa0,0x00,0x00,0x16,0x4c,0x00,0x08, +0x27,0xb0,0x04,0x3c,0x00,0x01,0x82,0x2e,0x0c,0x00,0x40,0x10,0x08,0x00,0x84,0x24, +0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0xff,0x7e,0x30,0xff,0x00,0xc2,0x33, +0xf0,0x00,0x42,0x28,0xf7,0xff,0x40,0x14,0x01,0x00,0x94,0x26,0xff,0xff,0x94,0x26, +0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x5e,0xa4,0xff,0x00,0x82,0x2e, +0xab,0xfb,0x40,0x14,0x25,0xb0,0x02,0x3c,0x12,0x87,0x03,0x3c,0xc4,0x02,0x42,0x34, +0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xf8,0x63,0xc2,0x8d, +0xfe,0xff,0x03,0x24,0x02,0x00,0x42,0x34,0x24,0x10,0x43,0x00,0xce,0x47,0x00,0x08, +0xf8,0x63,0xc2,0xad,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x68,0x15,0xae,0x26,0x76,0x4b,0xc2,0x91,0x00,0x00,0x00,0x00, +0x97,0xfb,0x40,0x14,0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02,0x02,0xf2,0x02,0x00, +0xcc,0x02,0x22,0x36,0x00,0x00,0x5e,0xac,0xc8,0x02,0x25,0x36,0xff,0x00,0xc3,0x33, +0x01,0x00,0x02,0x24,0x00,0x00,0xa3,0xac,0x21,0x20,0xc0,0x03,0x76,0x4b,0xc2,0xa1, +0xe3,0x18,0x00,0x0c,0x77,0x4b,0xde,0xa1,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0xa2,0x34, +0x24,0x10,0x62,0x02,0x25,0xb0,0x05,0x3c,0x02,0xf2,0x02,0x00,0xcc,0x02,0xa3,0x34, +0x01,0x00,0x02,0x24,0x00,0x00,0x7e,0xac,0x01,0x01,0xc2,0x13,0x68,0x15,0xa2,0x26, +0x02,0x00,0xc2,0x2b,0x28,0x01,0x40,0x14,0x03,0x00,0x02,0x24,0x20,0x01,0xc2,0x13, +0xc4,0x02,0xa3,0x34,0x68,0x15,0xa2,0x26,0x70,0x4b,0x44,0x94,0x25,0xb0,0x03,0x3c, +0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xa2,0x26,0xce,0x47,0x00,0x08,0x46,0x64,0x40,0xa4,0x68,0x15,0xa2,0x26, +0x21,0x10,0x82,0x00,0xce,0x47,0x00,0x08,0x56,0x44,0x46,0xa0,0x68,0x15,0xa2,0x26, +0xce,0x47,0x00,0x08,0xec,0x65,0x40,0xac,0x00,0x1f,0x63,0x32,0x02,0x14,0x13,0x00, +0x02,0xa2,0x03,0x00,0x3f,0x00,0x46,0x30,0x68,0x15,0xa3,0x26,0xc1,0x42,0x66,0xa0, +0xce,0x47,0x00,0x08,0xbc,0x42,0x74,0xa0,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0xfd,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xae,0x26,0x08,0x40,0xc7,0x8d,0x00,0x00,0x40,0xad,0x42,0x17,0x07,0x00, +0x03,0x00,0x42,0x30,0x5c,0x00,0x40,0x14,0x68,0x15,0xa2,0x26,0x03,0x0d,0x22,0x36, +0x00,0x00,0x45,0x90,0x10,0x40,0xc6,0x8d,0xff,0x9f,0x03,0x3c,0xff,0xff,0x63,0x34, +0xff,0x3f,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0xe3,0x00,0x00,0x20,0x04,0x3c, +0x24,0x60,0xc2,0x00,0x25,0x18,0x64,0x00,0x00,0x40,0x02,0x3c,0x70,0x00,0xa5,0x30, +0x25,0x60,0x82,0x01,0x93,0x01,0xa0,0x10,0x08,0x40,0xc3,0xad,0x94,0x0e,0x22,0x36, +0x9c,0x0e,0x23,0x36,0xa4,0x0e,0x24,0x36,0xac,0x0e,0x27,0x36,0x00,0x00,0x45,0x8c, +0x00,0x00,0x69,0x8c,0x00,0x00,0x8b,0x8c,0x00,0x00,0xe6,0x8c,0x0c,0x40,0xc3,0x8d, +0xb4,0x0e,0x22,0x36,0x00,0x00,0x4a,0x8c,0xff,0x03,0x07,0x3c,0x00,0xfc,0x08,0x24, +0xbc,0x0e,0x22,0x36,0x24,0x28,0xa7,0x00,0x24,0x30,0xc7,0x00,0x24,0x20,0x88,0x01, +0x02,0x2c,0x05,0x00,0x00,0x00,0x4c,0x8c,0x24,0x18,0x68,0x00,0x02,0x34,0x06,0x00, +0xcc,0x0e,0x2d,0x36,0xc4,0x0e,0x28,0x36,0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34, +0x25,0x18,0x65,0x00,0x25,0x20,0x86,0x00,0x00,0x00,0x05,0x8d,0x24,0x48,0x27,0x01, +0x00,0x00,0xa6,0x8d,0x24,0x50,0x47,0x01,0x24,0x20,0x82,0x00,0x24,0x18,0x62,0x00, +0x82,0x49,0x09,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34, +0x25,0x18,0x69,0x00,0x25,0x20,0x8a,0x00,0x24,0x58,0x67,0x01,0x24,0x60,0x87,0x01, +0x24,0x20,0x82,0x00,0x24,0x30,0xc7,0x00,0x00,0x59,0x0b,0x00,0x24,0x18,0x62,0x00, +0x00,0x61,0x0c,0x00,0x24,0x28,0xa7,0x00,0x25,0x18,0x6b,0x00,0x25,0x20,0x8c,0x00, +0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0x16,0x40,0xc6,0xa5,0x0c,0x40,0xc3,0xad, +0x10,0x40,0xc4,0xad,0x14,0x40,0xc5,0xa5,0x68,0x15,0xa3,0x26,0x0c,0x40,0x62,0x8c, +0x00,0x00,0x00,0x00,0x53,0x01,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0xff,0x62,0x32, +0x29,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00,0xc3,0x42,0x62,0xa0, +0xfd,0x55,0x00,0x0c,0x10,0x00,0xa4,0x27,0x38,0x55,0x00,0x0c,0x00,0x00,0x00,0x00, +0x68,0x15,0xa2,0x26,0x0c,0x40,0x43,0x8c,0x00,0x80,0x04,0x3c,0x25,0x18,0x64,0x00, +0x0c,0x40,0x43,0xac,0x68,0x15,0xa2,0x26,0xc3,0x42,0x44,0x90,0x25,0xb0,0x03,0x3c, +0x61,0x0c,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24, +0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0x50,0x00,0x0c,0x03,0x00,0x04,0x24, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xd2,0x59,0x00,0x0c,0x00,0x00,0x00,0x00, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0xa2,0x34,0x24,0x10,0x62,0x02, +0x02,0xf2,0x02,0x00,0x07,0x00,0x03,0x24,0x25,0x01,0xc3,0x13,0x02,0x80,0x04,0x3c, +0x08,0x00,0xc2,0x2b,0x0a,0x01,0x40,0x10,0x20,0x00,0x02,0x24,0xd8,0xfa,0xc0,0x17, +0x02,0x80,0x02,0x3c,0xe8,0x7d,0x43,0x94,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34, +0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x02,0x24,0x13,0x00, +0x0f,0x10,0x00,0x0c,0xff,0x00,0x84,0x30,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xa2,0x26,0x58,0x64,0x44,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x24,0x10,0x65,0x02,0xcc,0x02,0x23,0x36, +0x00,0xff,0x64,0x32,0x02,0xf4,0x02,0x00,0x00,0x00,0x73,0xac,0x04,0x00,0xc0,0x13, +0x02,0x9a,0x04,0x00,0x01,0x00,0x02,0x24,0x02,0x00,0xc2,0x13,0x01,0x00,0x04,0x24, +0x21,0x20,0x00,0x00,0x25,0xb0,0x10,0x3c,0x2a,0x42,0x00,0x0c,0xc4,0x02,0x12,0x36, +0x00,0x00,0x54,0x8e,0x0f,0x00,0x11,0x3c,0x21,0x20,0x60,0x02,0x21,0x30,0x80,0x02, +0x6a,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0x20,0x60,0x02,0x95,0x44,0x00,0x0c, +0xff,0xff,0x25,0x36,0xc8,0x02,0x10,0x36,0x00,0x00,0x42,0xae,0x00,0x00,0x02,0xae, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x28,0xb0,0x02,0x3c,0x00,0x00,0x43,0x90, +0xff,0x00,0x02,0x24,0xff,0x00,0x73,0x30,0xa5,0xfa,0x62,0x12,0xff,0x00,0x04,0x24, +0x28,0xb0,0x05,0x3c,0xc0,0x10,0x13,0x00,0x21,0x10,0x45,0x00,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0xff,0x00,0x73,0x30,0xfa,0xff,0x64,0x16,0x25,0xb0,0x02,0x3c, +0xd0,0x47,0x00,0x08,0xc0,0x02,0x42,0x34,0x64,0x03,0x23,0x36,0x00,0x00,0x62,0x90, +0x00,0x00,0x00,0x00,0xfa,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x80,0x10,0x04,0x00,0x68,0x15,0xa3,0x26,0x21,0x10,0x43,0x00, +0xce,0x47,0x00,0x08,0xec,0x44,0x45,0xac,0x25,0xb0,0x03,0x3c,0xff,0x00,0x02,0x24, +0x56,0x01,0x63,0x34,0x01,0x00,0x04,0x24,0x02,0x80,0x06,0x3c,0x00,0x00,0x62,0xa4, +0xce,0x47,0x00,0x08,0x18,0x7e,0xc4,0xa0,0xa8,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x44,0x64,0x44,0x94,0x25,0xb0,0x03,0x3c, +0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xa4,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x6e,0x4b,0x44,0x94,0xc4,0x02,0xa3,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x68,0x15,0xa4,0x26,0x08,0x40,0x83,0x8c,0xff,0x9f,0x02,0x3c, +0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0xce,0x47,0x00,0x08,0x08,0x40,0x83,0xac, +0x68,0x15,0xa3,0x26,0xff,0xff,0x02,0x34,0xce,0x47,0x00,0x08,0xec,0x65,0x62,0xac, +0x64,0x03,0x42,0x34,0x00,0x00,0x43,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x74,0x30, +0x02,0x00,0x84,0x36,0x00,0x00,0x44,0xa0,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xa5,0x26,0xf8,0x63,0xa2,0x8c,0xfd,0xff,0x03,0x24,0xfe,0xff,0x04,0x24, +0x24,0x10,0x43,0x00,0x24,0x10,0x44,0x00,0xce,0x47,0x00,0x08,0xf8,0x63,0xa2,0xac, +0x34,0x0d,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xa2,0x26,0x72,0x4b,0x44,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xda,0xfe,0xc0,0x17,0xc4,0x02,0xa3,0x34, +0x68,0x15,0xa2,0x26,0x6c,0x4b,0x44,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0xff,0x63,0x32,0x25,0xb0,0x02,0x3c, +0x02,0x9a,0x03,0x00,0xcc,0x02,0x42,0x34,0x00,0x00,0x53,0xac,0xbf,0x00,0x60,0x12, +0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x24,0x59,0x01,0x62,0x12,0x00,0x00,0x00,0x00, +0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x28,0xb0,0x14,0x3c,0x00,0x00,0x82,0x96,0x02,0x1c,0x13,0x00,0xff,0x00,0x64,0x30, +0xff,0xff,0x5e,0x30,0xff,0x00,0xc3,0x33,0x0c,0x00,0x83,0x10,0xff,0x7f,0x03,0x3c, +0x08,0x00,0x94,0x26,0x00,0x00,0x82,0x96,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0x30, +0xff,0x00,0xc3,0x33,0x05,0x00,0x83,0x10,0xff,0x7f,0x03,0x3c,0xff,0xff,0x82,0x32, +0x00,0x08,0x42,0x2c,0xf6,0xff,0x40,0x14,0x00,0x00,0x00,0x00,0xff,0xff,0x63,0x34, +0x25,0xb0,0x02,0x3c,0x24,0x18,0x83,0x02,0xc4,0x02,0x42,0x34,0x00,0x00,0x43,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x64,0x03,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0xff,0x00,0x74,0x30,0x05,0x00,0x84,0x36,0x00,0x00,0x44,0xa0, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0xff,0x00,0x02,0x3c,0x00,0xff,0x42,0x34, +0x24,0x10,0x62,0x02,0x02,0xf2,0x02,0x00,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa3,0x26, +0xcc,0x02,0x42,0x34,0x76,0x4b,0x60,0xa0,0x21,0x20,0xc0,0x03,0x00,0x00,0x5e,0xac, +0xe3,0x18,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xff,0xff,0x05,0x36, +0x60,0x00,0x06,0x24,0x6a,0x44,0x00,0x0c,0x24,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c, +0xe8,0x03,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x24,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,0xff,0xff,0x05,0x36, +0x1f,0x00,0x54,0x30,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0xc4,0x02,0x22,0x36,0x00,0x00,0x54,0xa0, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x54,0x64,0x44,0x90,0x25,0xb0,0x03,0x3c, +0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0xff,0x65,0x32,0xff,0x00,0x84,0x30,0x28,0x50,0x00,0x0c,0x02,0x2a,0x05,0x00, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x62,0xa0,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0xf8,0x63,0x62,0x8c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x34, +0xce,0x47,0x00,0x08,0xf8,0x63,0x62,0xac,0xcd,0x4c,0x00,0x08,0x12,0x00,0x02,0x24, +0xb8,0x59,0x00,0x0c,0x21,0x20,0x60,0x02,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x0e,0x4f,0x00,0x0c,0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0xcf,0xf9,0xc2,0x17,0x02,0x80,0x06,0x3c,0x08,0x7e,0xc3,0x90,0x25,0xb0,0x02,0x3c, +0xc4,0x02,0x42,0x34,0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x49,0x09,0x00,0x0c,0x21,0x20,0xc0,0x03,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x12,0x00,0x02,0x24,0xc7,0x42,0xe2,0xa1,0xc3,0x49,0x00,0x08,0xc3,0x42,0xe2,0xa1, +0x01,0x0d,0x00,0x0c,0x00,0x00,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xa3,0x26,0xff,0xff,0x02,0x34,0xce,0x47,0x00,0x08,0xec,0x65,0x62,0xac, +0xef,0x7d,0x83,0x90,0xc4,0x02,0x22,0x36,0x00,0x00,0x43,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0xfd,0x55,0x00,0x0c,0x10,0x00,0xa4,0x27,0xd8,0x4c,0x00,0x08, +0x68,0x15,0xa2,0x26,0x07,0x52,0x00,0x0c,0x10,0x40,0xcc,0xad,0xc5,0x4c,0x00,0x08, +0x68,0x15,0xa3,0x26,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c, +0x21,0x10,0x45,0x00,0xec,0x66,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00, +0x80,0x51,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xc0,0x10,0x05,0x00,0x21,0x10,0x45,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00, +0x21,0x10,0x43,0x00,0x7c,0x51,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34, +0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x2a,0x42,0x00,0x0c, +0x21,0x20,0x00,0x00,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00, +0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x68,0x15,0xa3,0x26,0x80,0x10,0x02,0x00, +0x21,0x10,0x43,0x00,0xe0,0x51,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34, +0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00, +0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,0x21,0x10,0x45,0x00,0x0c,0x67,0x83,0x24, +0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c, +0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c, +0x08,0x67,0xc3,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c, +0x21,0x10,0x45,0x00,0x04,0x67,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c,0x00,0x67,0xc3,0x24,0x80,0x10,0x02,0x00, +0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34, +0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00, +0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c,0x21,0x10,0x45,0x00,0xfc,0x66,0x83,0x24, +0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c, +0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c, +0xf8,0x66,0xc3,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c, +0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x02,0x80,0x04,0x3c, +0x21,0x10,0x45,0x00,0xf4,0x66,0x83,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00, +0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34,0x00,0x00,0x64,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x45,0x00,0x02,0x80,0x06,0x3c,0xf0,0x66,0xc3,0x24,0x80,0x10,0x02,0x00, +0x21,0x10,0x43,0x00,0x00,0x00,0x44,0x8c,0x25,0xb0,0x03,0x3c,0xc4,0x02,0x63,0x34, +0x00,0x00,0x64,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0x50,0x00,0x0c, +0x01,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0xa6,0x50,0x00,0x0c, +0x02,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26, +0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,0x2c,0x43,0x64,0x94,0x25,0xb0,0x02,0x3c, +0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x00,0x11,0x1e,0x00,0x68,0x15,0xa3,0x26,0x21,0x10,0x43,0x00,0x28,0x43,0x44,0x8c, +0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x42,0x26,0x04,0x00,0x00,0x00,0x44,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x00,0x11,0x1e,0x00,0x68,0x15,0xa3,0x26, +0x21,0x10,0x43,0x00,0x2b,0x43,0x44,0x90,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34, +0x01,0x00,0x84,0x30,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x68,0x15,0xa2,0x26,0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,0x32,0x43,0x64,0x94, +0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08, +0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00, +0x31,0x43,0x64,0x90,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac, +0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26,0x00,0x19,0x1e,0x00, +0x21,0x18,0x62,0x00,0x30,0x43,0x64,0x90,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34, +0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c,0x68,0x15,0xa2,0x26, +0x00,0x19,0x1e,0x00,0x21,0x18,0x62,0x00,0x2e,0x43,0x64,0x94,0x25,0xb0,0x02,0x3c, +0xc4,0x02,0x42,0x34,0x00,0x00,0x44,0xac,0xcf,0x47,0x00,0x08,0x25,0xb0,0x02,0x3c, +0x25,0xb0,0x05,0x3c,0x01,0x00,0x06,0x24,0x01,0x80,0x02,0x3c,0x04,0x30,0x86,0x00, +0xf1,0x02,0xa7,0x34,0xed,0x02,0xa4,0x34,0x38,0x3c,0x42,0x24,0x18,0x03,0xa5,0x34, +0x08,0x00,0x03,0x24,0x00,0x00,0xa2,0xac,0x00,0x00,0xe3,0xa0,0x00,0x00,0x80,0xa0, +0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0, +0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0,0x00,0x00,0x86,0xa0,0x00,0x00,0x80,0xa0, +0x00,0x00,0xe0,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c, +0x25,0xb0,0x03,0x3c,0x94,0x3c,0x42,0x24,0x18,0x03,0x63,0x34,0x00,0x00,0x62,0xac, +0x00,0x00,0x83,0x90,0x30,0x00,0x02,0x24,0x05,0x00,0x62,0x10,0x21,0x20,0x00,0x00, +0x31,0x00,0x02,0x24,0x02,0x00,0x62,0x10,0x01,0x00,0x04,0x24,0x07,0x00,0x04,0x24, +0x0e,0x4f,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x25,0xb0,0x03,0x3c, +0xd0,0x3c,0x42,0x24,0x18,0x03,0x63,0x34,0x02,0x80,0x04,0x3c,0x00,0x00,0x62,0xac, +0x08,0x00,0xe0,0x03,0x24,0x7e,0x80,0xac,0x02,0x80,0x02,0x3c,0x68,0x7b,0x42,0x24, +0xc0,0x20,0x04,0x00,0x21,0x20,0x82,0x00,0x21,0x28,0x00,0x00,0x00,0x60,0x06,0x40, +0x01,0x00,0xc1,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x00,0x00,0x82,0x8c, +0x00,0x00,0x00,0x00,0x09,0x00,0x44,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x43,0x8c, +0x21,0x28,0x40,0x00,0x00,0x00,0x42,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0xac, +0x04,0x00,0x43,0xac,0x00,0x00,0xa5,0xac,0x04,0x00,0xa5,0xac,0x00,0x60,0x86,0x40, +0x08,0x00,0xe0,0x03,0x21,0x10,0xa0,0x00,0x21,0x18,0x80,0x00,0xe8,0xff,0xbd,0x27, +0x01,0x01,0x62,0x2c,0x10,0x00,0xbf,0xaf,0x01,0x00,0x04,0x24,0x01,0x02,0x65,0x2c, +0x0a,0x00,0x40,0x14,0x21,0x30,0x00,0x00,0x02,0x00,0x04,0x24,0x07,0x00,0xa0,0x14, +0x01,0x08,0x62,0x2c,0x05,0x00,0x40,0x14,0x03,0x00,0x04,0x24,0x10,0x00,0xbf,0x8f, +0x21,0x10,0xc0,0x00,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x3c,0x4f,0x00,0x0c, +0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f,0x21,0x30,0x40,0x00,0x21,0x10,0xc0,0x00, +0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x02,0x80,0x03,0x3c,0x80,0x7b,0x62,0x8c, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x06,0x40,0x01,0x00,0xc1,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x10,0x00,0x83,0x8c,0x02,0x80,0x02,0x3c, +0x68,0x7b,0x42,0x24,0xc0,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x00,0x00,0x65,0x8c, +0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac,0x04,0x00,0xa4,0xac,0x00,0x00,0x64,0xac, +0x04,0x00,0x83,0xac,0x00,0x60,0x86,0x40,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x00,0x00,0x85,0xac,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x02,0x24,0x04,0x00,0xff,0x00,0x84,0x30,0xc0,0x18,0x04,0x00, +0x21,0x18,0x64,0x00,0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c, +0x68,0x15,0x42,0x24,0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x84,0x51,0x64,0x8c, +0xff,0xf1,0x02,0x24,0x24,0x20,0x82,0x00,0x08,0x00,0xe0,0x03,0x84,0x51,0x64,0xac, +0x02,0x24,0x04,0x00,0xff,0x00,0x84,0x30,0xc0,0x18,0x04,0x00,0x21,0x18,0x64,0x00, +0x80,0x18,0x03,0x00,0x21,0x18,0x64,0x00,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24, +0x80,0x18,0x03,0x00,0x21,0x18,0x62,0x00,0x84,0x51,0x64,0x8c,0xff,0xf1,0x02,0x24, +0x24,0x20,0x82,0x00,0x00,0x02,0x84,0x34,0x08,0x00,0xe0,0x03,0x84,0x51,0x64,0xac, +0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0xc0,0x80,0x04,0x00,0x21,0x80,0x04,0x02, +0x80,0x80,0x10,0x00,0x21,0x80,0x04,0x02,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24, +0x80,0x80,0x10,0x00,0x21,0x80,0x02,0x02,0x1c,0x00,0xbf,0xaf,0x18,0x00,0xb2,0xaf, +0x14,0x00,0xb1,0xaf,0x84,0x51,0x05,0x8e,0xff,0x1f,0x02,0x3c,0x25,0xb0,0x12,0x3c, +0xff,0xff,0x42,0x34,0xf8,0xff,0x03,0x24,0x7c,0x51,0x02,0xae,0x84,0x01,0x46,0x36, +0x24,0x28,0xa3,0x00,0xff,0xfe,0x02,0x24,0x00,0x00,0xc7,0x8c,0x24,0x28,0xa2,0x00, +0xff,0xef,0x03,0x24,0xff,0xff,0x02,0x3c,0xff,0x1f,0x42,0x34,0x24,0x28,0xa3,0x00, +0x24,0x28,0xa2,0x00,0x80,0x51,0x07,0xae,0x84,0x51,0x05,0xae,0x6a,0x0f,0x00,0x0c, +0x21,0x88,0x80,0x00,0x86,0x51,0x02,0x92,0x21,0x88,0x32,0x02,0x1c,0x00,0xbf,0x8f, +0x60,0x01,0x22,0xa2,0x18,0x00,0xb2,0x8f,0x70,0x51,0x00,0xae,0x54,0x51,0x00,0xae, +0x58,0x51,0x00,0xae,0x5c,0x51,0x00,0xae,0x60,0x51,0x00,0xae,0x64,0x51,0x00,0xae, +0x68,0x51,0x00,0xae,0x6c,0x51,0x00,0xae,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xff,0x00,0xa5,0x30,0xc0,0x10,0x05,0x00, +0x21,0x10,0x45,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x45,0x00,0x02,0x80,0x03,0x3c, +0x68,0x15,0x63,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x84,0x51,0x43,0x8c, +0x25,0xb0,0x05,0x3c,0xff,0x00,0xc6,0x30,0x21,0x30,0xc5,0x00,0xaf,0x01,0xc2,0x90, +0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00,0x21,0x18,0x65,0x00,0xff,0x00,0x88,0x30, +0xff,0x00,0x49,0x30,0x84,0x01,0x66,0x8c,0x21,0x50,0x00,0x00,0x21,0x58,0x00,0x00, +0x2b,0x00,0x20,0x11,0x21,0x20,0x00,0x01,0x2b,0x00,0xc0,0x10,0x2b,0x10,0x09,0x01, +0x21,0x28,0x00,0x00,0xfd,0x4f,0x00,0x08,0x01,0x00,0x07,0x24,0xff,0x00,0x65,0x30, +0x1d,0x00,0xa2,0x2c,0x07,0x00,0x40,0x10,0xff,0xff,0x02,0x25,0x04,0x10,0xa7,0x00, +0x24,0x10,0x46,0x00,0xf9,0xff,0x40,0x10,0x01,0x00,0xa3,0x24,0x21,0x58,0xa0,0x00, +0xff,0xff,0x02,0x25,0xff,0x00,0x45,0x30,0x2b,0x18,0xab,0x00,0x0f,0x00,0x60,0x14, +0x2b,0x10,0x49,0x01,0x01,0x00,0x04,0x24,0x04,0x10,0xa4,0x00,0x24,0x10,0x46,0x00, +0xff,0xff,0xa7,0x24,0x04,0x00,0x40,0x10,0x01,0x00,0x43,0x25,0x17,0x00,0x49,0x11, +0xff,0x00,0x6a,0x30,0x21,0x40,0xa0,0x00,0xff,0x00,0xe5,0x30,0x2b,0x10,0xab,0x00, +0xf6,0xff,0x40,0x10,0x04,0x10,0xa4,0x00,0x2b,0x10,0x49,0x01,0x08,0x00,0x40,0x10, +0x21,0x20,0x00,0x01,0x23,0x10,0x2a,0x01,0x2a,0x10,0x62,0x01,0x04,0x00,0x40,0x14, +0x21,0x20,0x00,0x00,0x23,0x10,0x69,0x01,0x21,0x10,0x4a,0x00,0xff,0x00,0x44,0x30, +0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xfd,0xff,0x40,0x14,0x21,0x20,0x00,0x00, +0x23,0x10,0x09,0x01,0x1e,0x50,0x00,0x08,0xff,0x00,0x44,0x30,0x21,0x20,0x00,0x01, +0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00,0xff,0x00,0x84,0x30,0xc0,0x10,0x04,0x00, +0x21,0x10,0x44,0x00,0x80,0x10,0x02,0x00,0x21,0x10,0x44,0x00,0x02,0x80,0x03,0x3c, +0x68,0x15,0x63,0x24,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x25,0xb0,0x06,0x3c, +0x84,0x51,0x43,0x8c,0xff,0x00,0xa5,0x30,0x21,0x20,0x86,0x00,0x21,0x28,0xa6,0x00, +0x60,0x01,0x82,0x90,0xaf,0x01,0xa4,0x90,0x07,0x00,0x63,0x30,0x80,0x18,0x03,0x00, +0x21,0x18,0x66,0x00,0xff,0x00,0x48,0x30,0xff,0x00,0x89,0x30,0x84,0x01,0x66,0x8c, +0x21,0x50,0x00,0x00,0x21,0x58,0x00,0x00,0x2b,0x00,0x20,0x11,0x21,0x20,0x00,0x01, +0x2b,0x00,0xc0,0x10,0x2b,0x10,0x09,0x01,0x21,0x28,0x00,0x00,0x4b,0x50,0x00,0x08, +0x01,0x00,0x07,0x24,0xff,0x00,0x65,0x30,0x1d,0x00,0xa2,0x2c,0x07,0x00,0x40,0x10, +0xff,0xff,0x02,0x25,0x04,0x10,0xa7,0x00,0x24,0x10,0x46,0x00,0xf9,0xff,0x40,0x10, +0x01,0x00,0xa3,0x24,0x21,0x58,0xa0,0x00,0xff,0xff,0x02,0x25,0xff,0x00,0x45,0x30, +0x2b,0x18,0xab,0x00,0x0f,0x00,0x60,0x14,0x2b,0x10,0x49,0x01,0x01,0x00,0x04,0x24, +0x04,0x10,0xa4,0x00,0x24,0x10,0x46,0x00,0xff,0xff,0xa7,0x24,0x04,0x00,0x40,0x10, +0x01,0x00,0x43,0x25,0x17,0x00,0x49,0x11,0xff,0x00,0x6a,0x30,0x21,0x40,0xa0,0x00, +0xff,0x00,0xe5,0x30,0x2b,0x10,0xab,0x00,0xf6,0xff,0x40,0x10,0x04,0x10,0xa4,0x00, +0x2b,0x10,0x49,0x01,0x08,0x00,0x40,0x10,0x21,0x20,0x00,0x01,0x23,0x10,0x2a,0x01, +0x2a,0x10,0x62,0x01,0x04,0x00,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x69,0x01, +0x21,0x10,0x4a,0x00,0xff,0x00,0x44,0x30,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00, +0xfd,0xff,0x40,0x14,0x21,0x20,0x00,0x00,0x23,0x10,0x09,0x01,0x6c,0x50,0x00,0x08, +0xff,0x00,0x44,0x30,0x21,0x20,0x00,0x01,0x08,0x00,0xe0,0x03,0x21,0x10,0x80,0x00, +0xd8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x18,0x00,0xb2,0xaf,0xff,0xff,0x03,0x3c, +0x68,0x15,0x52,0x24,0x1c,0x00,0xb3,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf, +0x20,0x00,0xbf,0xaf,0xff,0x1f,0x73,0x34,0x21,0x88,0x00,0x00,0x21,0x80,0x40,0x02, +0xaa,0x4f,0x00,0x0c,0x21,0x20,0x20,0x02,0x84,0x51,0x02,0x8e,0x21,0x28,0x00,0x00, +0x24,0x10,0x53,0x00,0x00,0x20,0x42,0x34,0x84,0x51,0x02,0xae,0x86,0x51,0x03,0x92, +0x00,0x00,0x00,0x00,0x80,0x18,0x03,0x00,0x21,0x18,0x72,0x00,0xec,0x44,0x64,0x8c, +0x60,0x45,0x62,0x8c,0x00,0x00,0x00,0x00,0x21,0x10,0x44,0x00,0x42,0x10,0x02,0x00, +0x50,0x51,0x02,0xae,0x21,0x10,0x05,0x02,0x01,0x00,0xa5,0x24,0x1d,0x00,0xa3,0x28, +0xc2,0x51,0x40,0xa0,0x88,0x51,0x40,0xa0,0xfa,0xff,0x60,0x14,0xa5,0x51,0x40,0xa0, +0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0xe0,0x51,0x00,0xae,0xe4,0xff,0x40,0x14, +0x94,0x00,0x10,0x26,0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f, +0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27, +0xc0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x2c,0x00,0xb5,0xaf,0x68,0x15,0x46,0x24, +0x3c,0x00,0xbf,0xaf,0x38,0x00,0xbe,0xaf,0x34,0x00,0xb7,0xaf,0x30,0x00,0xb6,0xaf, +0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf, +0x18,0x00,0xb0,0xaf,0xec,0x65,0xc2,0x8c,0xff,0x00,0x03,0x24,0xff,0x00,0x8d,0x30, +0xff,0xff,0x42,0x38,0x0b,0x18,0x02,0x00,0xff,0xff,0x04,0x34,0x10,0x00,0xa3,0xaf, +0xec,0x65,0xc4,0xac,0xb9,0x00,0xa0,0x11,0x08,0x00,0x15,0x24,0x02,0x80,0x02,0x3c, +0x50,0x9e,0x45,0x24,0x90,0x44,0xc4,0x24,0xc7,0x50,0x00,0x08,0x21,0x88,0x00,0x00, +0x01,0x00,0x31,0x26,0x00,0x00,0x82,0xa0,0x1d,0x00,0x22,0x2a,0x0b,0x00,0x40,0x10, +0x01,0x00,0x84,0x24,0x21,0x10,0x25,0x02,0x00,0x00,0x42,0x90,0x00,0x00,0x00,0x00, +0xf7,0xff,0x40,0x10,0xfd,0xff,0x43,0x24,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a, +0x00,0x00,0x83,0xa0,0xf7,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c, +0x68,0x15,0x4a,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xe8,0x9b,0x6c,0x24, +0x70,0x9b,0x4b,0x24,0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00, +0x21,0x40,0x2a,0x01,0x21,0x38,0x2c,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90, +0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28, +0xc5,0x43,0x64,0xa0,0xf8,0xff,0x40,0x14,0x34,0x43,0x65,0xa0,0x21,0x10,0x2b,0x02, +0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26, +0x1d,0x00,0x22,0x2a,0x73,0x44,0x64,0xa0,0x56,0x44,0x65,0xa0,0xeb,0xff,0x40,0x14, +0x05,0x00,0x29,0x25,0xaf,0x00,0xa0,0x11,0x02,0x80,0x02,0x3c,0x68,0x15,0x48,0x24, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xe4,0x9e,0x69,0x24,0x70,0x9e,0x47,0x24, +0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00,0x21,0x10,0x69,0x00,0x21,0x20,0x67,0x00, +0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c,0x01,0x00,0x31,0x26,0x21,0x18,0x68,0x00, +0x04,0x00,0x22,0x2a,0xec,0x44,0x65,0xac,0xf6,0xff,0x40,0x14,0x60,0x45,0x66,0xac, +0x02,0x80,0x02,0x3c,0x68,0x15,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c, +0xe4,0x9e,0x68,0x24,0x70,0x9e,0x47,0x24,0x04,0x00,0x11,0x24,0x80,0x20,0x11,0x00, +0x21,0x10,0x88,0x00,0x21,0x30,0x87,0x00,0x00,0x00,0x45,0x8c,0x00,0x00,0xc3,0x8c, +0x01,0x00,0x31,0x26,0x21,0x20,0x89,0x00,0x82,0x28,0x05,0x00,0x82,0x18,0x03,0x00, +0x1d,0x00,0x22,0x2a,0xec,0x44,0x83,0xac,0xf4,0xff,0x40,0x14,0x60,0x45,0x85,0xac, +0x02,0x80,0x02,0x3c,0x68,0x15,0x56,0x24,0xff,0xff,0x02,0x3c,0x21,0xf0,0xc0,0x02, +0xff,0x1f,0x57,0x34,0x21,0x88,0x00,0x00,0x21,0xa0,0x00,0x00,0x24,0x51,0x00,0x08, +0x21,0x90,0xc0,0x02,0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0x94,0x00,0x52,0x26, +0x3d,0x00,0x40,0x10,0x94,0x00,0x94,0x26,0x84,0x51,0x44,0x8e,0x01,0x00,0x03,0x24, +0x02,0x13,0x04,0x00,0x01,0x00,0x53,0x30,0xf6,0xff,0x63,0x16,0x07,0x00,0x82,0x30, +0x25,0xb0,0x03,0x3c,0x80,0x10,0x02,0x00,0x21,0x10,0x43,0x00,0x84,0x01,0x45,0x8c, +0x7c,0x51,0x43,0x8e,0x21,0x20,0x20,0x02,0x24,0x28,0xa3,0x00,0x6a,0x0f,0x00,0x0c, +0x80,0x51,0x45,0xae,0x86,0x51,0x44,0x92,0xe9,0x0e,0x00,0x0c,0xff,0x00,0x25,0x32, +0x84,0x51,0x42,0x8e,0x00,0x00,0x00,0x00,0x24,0x10,0x57,0x00,0x00,0x20,0x42,0x34, +0x84,0x51,0x42,0xae,0x86,0x51,0x50,0x92,0x00,0x00,0x00,0x00,0x21,0x20,0x00,0x02, +0xff,0x0e,0x00,0x0c,0x80,0x80,0x10,0x00,0x21,0x80,0x16,0x02,0x54,0x51,0x40,0xae, +0x58,0x51,0x40,0xae,0x5c,0x51,0x40,0xae,0x60,0x51,0x40,0xae,0x64,0x51,0x40,0xae, +0x68,0x51,0x40,0xae,0x6c,0x51,0x40,0xae,0x70,0x51,0x40,0xae,0xec,0x44,0x04,0x8e, +0x60,0x45,0x03,0x8e,0x26,0x10,0x53,0x00,0x21,0x30,0x00,0x00,0x21,0x18,0x64,0x00, +0x42,0x18,0x03,0x00,0x04,0x00,0x04,0x24,0x0a,0xa8,0x82,0x00,0x50,0x51,0x43,0xae, +0x21,0x20,0x9e,0x02,0x21,0x10,0x86,0x00,0x01,0x00,0xc6,0x24,0x1d,0x00,0xc3,0x28, +0xc2,0x51,0x40,0xa0,0x88,0x51,0x40,0xa0,0xfa,0xff,0x60,0x14,0xa5,0x51,0x40,0xa0, +0x01,0x00,0x31,0x26,0x20,0x00,0x22,0x2a,0xe0,0x51,0x80,0xac,0x94,0x00,0x52,0x26, +0xc5,0xff,0x40,0x14,0x94,0x00,0x94,0x26,0x25,0xb0,0x02,0x3c,0x80,0x01,0x42,0x34, +0x00,0x00,0x55,0xa0,0x10,0x00,0xa3,0x8f,0x00,0x00,0x00,0x00,0x03,0x00,0x60,0x14, +0x02,0x80,0x03,0x3c,0x68,0x15,0x62,0x24,0xec,0x65,0x40,0xac,0x3c,0x00,0xbf,0x8f, +0x38,0x00,0xbe,0x8f,0x34,0x00,0xb7,0x8f,0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f, +0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f, +0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x50,0x9e,0x45,0x24,0x90,0x44,0xc4,0x24,0x21,0x88,0x00,0x00,0x21,0x10,0x25,0x02, +0x00,0x00,0x43,0x90,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x00,0x00,0x83,0xa0, +0xfa,0xff,0x40,0x14,0x01,0x00,0x84,0x24,0x02,0x80,0x02,0x3c,0x68,0x15,0x4a,0x24, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x0c,0x9d,0x6c,0x24,0xac,0x9b,0x4b,0x24, +0x21,0x88,0x00,0x00,0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01, +0x21,0x38,0x2c,0x01,0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90, +0x21,0x18,0x06,0x01,0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc5,0x43,0x64,0xa0, +0xf8,0xff,0x40,0x14,0x34,0x43,0x65,0xa0,0x21,0x10,0x2b,0x02,0x1d,0x00,0x44,0x90, +0x00,0x00,0x45,0x90,0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a, +0x73,0x44,0x64,0xa0,0x56,0x44,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25, +0x02,0x80,0x02,0x3c,0x68,0x15,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c, +0xe4,0x9e,0x68,0x24,0x70,0x9e,0x47,0x24,0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00, +0x21,0x10,0x68,0x00,0x21,0x20,0x67,0x00,0x00,0x00,0x46,0x8c,0x00,0x00,0x85,0x8c, +0x01,0x00,0x31,0x26,0x21,0x18,0x69,0x00,0x1d,0x00,0x22,0x2a,0xec,0x44,0x65,0xac, +0xf6,0xff,0x40,0x14,0x60,0x45,0x66,0xac,0x17,0x51,0x00,0x08,0x02,0x80,0x02,0x3c, +0xd8,0xff,0xbd,0x27,0xff,0xff,0x84,0x30,0x18,0x00,0xb2,0xaf,0xf0,0x01,0x92,0x30, +0x02,0x91,0x12,0x00,0x14,0x00,0xb1,0xaf,0xc0,0x88,0x12,0x00,0x21,0x88,0x32,0x02, +0x80,0x88,0x11,0x00,0x21,0x88,0x32,0x02,0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24, +0x80,0x88,0x11,0x00,0x21,0x88,0x22,0x02,0x20,0x00,0xbf,0xaf,0x1c,0x00,0xb3,0xaf, +0x10,0x00,0xb0,0xaf,0x84,0x51,0x30,0x8e,0x00,0x02,0x83,0x30,0xff,0xfe,0x02,0x24, +0x2b,0x18,0x03,0x00,0x00,0x10,0x10,0x36,0x24,0x80,0x02,0x02,0x00,0x1a,0x03,0x00, +0x00,0x04,0x82,0x30,0x25,0x80,0x03,0x02,0x2b,0x10,0x02,0x00,0xf7,0xff,0x03,0x24, +0x24,0x80,0x03,0x02,0xc0,0x10,0x02,0x00,0x25,0x80,0x02,0x02,0x7c,0x51,0x25,0xae, +0x84,0x51,0x30,0xae,0x3c,0x10,0x00,0x0c,0x21,0x98,0xa0,0x00,0xf8,0xff,0x03,0x24, +0x24,0x80,0x03,0x02,0x07,0x00,0x42,0x30,0x25,0x80,0x02,0x02,0x07,0x00,0x03,0x32, +0x25,0xb0,0x02,0x3c,0x80,0x18,0x03,0x00,0x84,0x51,0x30,0xae,0x21,0x18,0x62,0x00, +0x84,0x01,0x62,0x8c,0x21,0x20,0x40,0x02,0x24,0x10,0x53,0x00,0x6a,0x0f,0x00,0x0c, +0x80,0x51,0x22,0xae,0x86,0x51,0x24,0x92,0x21,0x28,0x40,0x02,0x20,0x00,0xbf,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0xe9,0x0e,0x00,0x08,0x28,0x00,0xbd,0x27,0xaa,0x4f,0x00,0x08,0xff,0x00,0x84,0x30, +0x02,0x80,0x02,0x3c,0x68,0x15,0x43,0x24,0x1f,0x00,0x04,0x24,0x84,0x51,0x62,0x8c, +0xff,0xff,0x84,0x24,0x00,0x10,0x42,0x34,0x84,0x51,0x62,0xac,0xfb,0xff,0x81,0x04, +0x94,0x00,0x63,0x24,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x85,0xac, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x23,0x10,0xa4,0x00,0x2b,0x18,0xa4,0x00,0x23,0x20,0x85,0x00,0x08,0x00,0xe0,0x03, +0x0b,0x10,0x83,0x00,0x20,0xff,0xbd,0x27,0xcc,0x00,0xb5,0xaf,0xdc,0x00,0xbf,0xaf, +0xd8,0x00,0xbe,0xaf,0xd4,0x00,0xb7,0xaf,0xd0,0x00,0xb6,0xaf,0xc8,0x00,0xb4,0xaf, +0xc4,0x00,0xb3,0xaf,0xc0,0x00,0xb2,0xaf,0xbc,0x00,0xb1,0xaf,0xb8,0x00,0xb0,0xaf, +0x21,0xa8,0x00,0x00,0x40,0x11,0x15,0x00,0x10,0x00,0xa3,0x27,0x21,0x10,0x43,0x00, +0x07,0x00,0x16,0x24,0xff,0xff,0xd6,0x26,0x00,0x00,0x40,0xac,0xfd,0xff,0xc1,0x06, +0x04,0x00,0x42,0x24,0x01,0x00,0xb5,0x26,0x03,0x00,0xa2,0x2e,0xf6,0xff,0x40,0x14, +0x40,0x11,0x15,0x00,0x25,0xb0,0x10,0x3c,0xc4,0x02,0x02,0x36,0x00,0x00,0x40,0xac, +0x04,0x00,0x03,0x36,0x00,0x00,0x62,0x8c,0x04,0x0c,0x03,0x36,0x00,0x00,0x63,0x8c, +0x08,0x0c,0x04,0x36,0x0f,0x00,0x11,0x3c,0xac,0x00,0xa3,0xaf,0x00,0x00,0x84,0x8c, +0x24,0x10,0x51,0x00,0x02,0xf4,0x02,0x00,0xb0,0x00,0xa4,0xaf,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00, +0x95,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x70,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24, +0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0x95,0x44,0x00,0x0c, +0xff,0xff,0x25,0x36,0x74,0x00,0xa2,0xaf,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c, +0x21,0x20,0x00,0x00,0xe0,0x0e,0x02,0x36,0x21,0x20,0x40,0x00,0x00,0x00,0x42,0x8c, +0xdc,0x0e,0x12,0x36,0x70,0x0e,0x13,0x36,0x78,0x00,0xa2,0xaf,0x00,0x00,0x42,0x8e, +0x74,0x0e,0x14,0x36,0x78,0x0e,0x15,0x36,0x7c,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8e, +0x7c,0x0e,0x16,0x36,0x80,0x0e,0x17,0x36,0x80,0x00,0xa3,0xaf,0x00,0x00,0x82,0x8e, +0xd4,0x0e,0x10,0x36,0xed,0x3f,0x11,0x3c,0x84,0x00,0xa2,0xaf,0x00,0x00,0xa3,0x8e, +0xfb,0x92,0x25,0x36,0x88,0x00,0xa3,0xaf,0x00,0x00,0xc2,0x8e,0x00,0x00,0x00,0x00, +0x8c,0x00,0xa2,0xaf,0x00,0x00,0xe3,0x8e,0x25,0xb0,0x02,0x3c,0x84,0x0e,0x42,0x34, +0x90,0x00,0xa3,0xaf,0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0x88,0x0e,0x63,0x34, +0x94,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8c,0x25,0xb0,0x02,0x3c,0x8c,0x0e,0x42,0x34, +0x98,0x00,0xa3,0xaf,0x00,0x00,0x42,0x8c,0x25,0xb0,0x03,0x3c,0xd0,0x0e,0x63,0x34, +0x9c,0x00,0xa2,0xaf,0x00,0x00,0x63,0x8c,0x00,0x00,0x00,0x00,0xa0,0x00,0xa3,0xaf, +0x00,0x00,0x02,0x8e,0x25,0xb0,0x03,0x3c,0xd8,0x0e,0x63,0x34,0xa4,0x00,0xa2,0xaf, +0x00,0x00,0x63,0x8c,0xf9,0x51,0x00,0x0c,0xa8,0x00,0xa3,0xaf,0x21,0x20,0x40,0x02, +0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0x60,0x02,0xf9,0x51,0x00,0x0c, +0xfb,0x92,0x25,0x36,0x21,0x20,0x80,0x02,0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36, +0x21,0x20,0xa0,0x02,0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xc0,0x02, +0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36,0x21,0x20,0xe0,0x02,0xf9,0x51,0x00,0x0c, +0xfb,0x92,0x25,0x36,0x02,0x80,0x02,0x3c,0xd8,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c, +0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c,0x25,0xb0,0x13,0x3c,0x02,0x80,0x03,0x3c, +0xdc,0x9f,0x63,0x24,0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c, +0x21,0xb0,0x00,0x00,0x02,0x80,0x02,0x3c,0xe0,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c, +0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c,0xff,0x03,0x14,0x3c,0x02,0x80,0x03,0x3c, +0xe4,0x9f,0x63,0x24,0x00,0x00,0x64,0x8c,0xfb,0x92,0x25,0x36,0xf9,0x51,0x00,0x0c, +0x10,0x00,0xb7,0x27,0x21,0x20,0x00,0x02,0xf9,0x51,0x00,0x0c,0xfb,0x92,0x25,0x36, +0x02,0x80,0x02,0x3c,0xe8,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c,0xf9,0x51,0x00,0x0c, +0xfb,0x92,0x25,0x36,0xe5,0x52,0x00,0x08,0x21,0xa8,0x00,0x00,0x6e,0x00,0xc2,0x13, +0x02,0x80,0x02,0x3c,0xac,0x0e,0x62,0x36,0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c, +0x00,0x00,0x64,0x8c,0xb4,0x0e,0x62,0x36,0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c, +0x00,0x00,0x66,0x8c,0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c, +0x24,0x20,0x94,0x00,0x00,0xd8,0x02,0x3c,0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00, +0x24,0x30,0xd4,0x00,0x24,0x38,0xf4,0x00,0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24, +0x01,0x00,0x42,0x2c,0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0xe8,0x00,0x83,0x10, +0x02,0x3c,0x07,0x00,0xe6,0x00,0xa3,0x10,0x20,0x00,0x03,0x24,0xe4,0x00,0xc3,0x10, +0x00,0x00,0x00,0x00,0xe2,0x00,0xe3,0x10,0x01,0x00,0x08,0x24,0x80,0x00,0x03,0x24, +0x08,0x00,0x83,0x10,0x21,0x20,0x00,0x00,0x06,0x00,0xa3,0x10,0x21,0x20,0x00,0x00, +0xe0,0x03,0x03,0x24,0x03,0x00,0xc3,0x10,0x00,0x00,0x00,0x00,0xdb,0x00,0xe3,0x10, +0x01,0x00,0x04,0x24,0x05,0x00,0x40,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x11, +0x00,0x00,0x00,0x00,0xd7,0x00,0x80,0x14,0x94,0x0e,0x63,0x36,0x01,0x00,0xb5,0x26, +0x0a,0x00,0xa2,0x2e,0x01,0x01,0x40,0x10,0x00,0x00,0x00,0x00,0xcb,0xff,0xc0,0x17, +0x01,0x00,0x02,0x24,0xa0,0x00,0x03,0x3c,0x30,0x54,0x65,0x34,0xf9,0x51,0x00,0x0c, +0x04,0x0c,0x64,0x36,0x08,0x00,0x05,0x3c,0xe4,0x00,0xa5,0x34,0xf9,0x51,0x00,0x0c, +0x08,0x0c,0x64,0x36,0x28,0x0e,0x64,0x36,0xf9,0x51,0x00,0x0c,0x80,0x80,0x05,0x3c, +0x14,0x02,0x02,0x3c,0x48,0x01,0x45,0x34,0xf9,0x51,0x00,0x0c,0x40,0x0e,0x64,0x36, +0x16,0x68,0x05,0x3c,0xa2,0x04,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x44,0x0e,0x64,0x36, +0x4c,0x0e,0x64,0x36,0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x24,0x14,0x02,0x03,0x3c, +0x4d,0x01,0x65,0x34,0xf9,0x51,0x00,0x0c,0x60,0x0e,0x64,0x36,0x16,0x28,0x05,0x3c, +0xba,0x08,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x64,0x0e,0x64,0x36,0x6c,0x0e,0x64,0x36, +0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x24,0x00,0xfb,0x05,0x3c,0x01,0x00,0xa5,0x34, +0xf9,0x51,0x00,0x0c,0x48,0x0e,0x64,0x36,0x00,0xf8,0x05,0x3c,0x01,0x00,0xa5,0x34, +0xf9,0x51,0x00,0x0c,0x48,0x0e,0x64,0x36,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24, +0xa0,0x00,0x02,0x3c,0x33,0x54,0x45,0x34,0xf9,0x51,0x00,0x0c,0x04,0x0c,0x64,0x36, +0x08,0x0c,0x64,0x36,0xf9,0x51,0x00,0x0c,0xe4,0x00,0x05,0x24,0x28,0x0e,0x64,0x36, +0xf9,0x51,0x00,0x0c,0x21,0x28,0x00,0x00,0x01,0x00,0x02,0x24,0x96,0xff,0xc2,0x17, +0xac,0x0e,0x62,0x36,0x02,0x80,0x02,0x3c,0xec,0x9f,0x42,0x24,0x25,0xb0,0x03,0x3c, +0x00,0x00,0x44,0x8c,0x20,0x08,0x63,0x34,0x00,0x00,0x71,0x8c,0x00,0x01,0x03,0x3c, +0x00,0x01,0x65,0x34,0xf9,0x51,0x00,0x0c,0x25,0xb0,0x12,0x3c,0x00,0x01,0x02,0x3c, +0x00,0x01,0x45,0x34,0xf9,0x51,0x00,0x0c,0x28,0x08,0x44,0x36,0xa0,0x00,0x03,0x3c, +0x30,0x54,0x65,0x34,0xf9,0x51,0x00,0x0c,0x04,0x0c,0x44,0x36,0x08,0x00,0x05,0x3c, +0xe4,0x00,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x08,0x0c,0x44,0x36,0x28,0x0e,0x44,0x36, +0xf9,0x51,0x00,0x0c,0x80,0x80,0x05,0x3c,0x00,0x01,0x02,0x3c,0x00,0x7c,0x45,0x34, +0xf9,0x51,0x00,0x0c,0x30,0x0e,0x44,0x36,0x00,0x01,0x03,0x3c,0x00,0x48,0x65,0x34, +0xf9,0x51,0x00,0x0c,0x34,0x0e,0x44,0x36,0x00,0x10,0x02,0x3c,0x1f,0xdc,0x45,0x34, +0xf9,0x51,0x00,0x0c,0x38,0x0e,0x44,0x36,0x00,0x10,0x03,0x3c,0x1f,0x8c,0x65,0x34, +0xf9,0x51,0x00,0x0c,0x3c,0x0e,0x44,0x36,0x14,0x02,0x02,0x3c,0x02,0x01,0x45,0x34, +0xf9,0x51,0x00,0x0c,0x40,0x0e,0x44,0x36,0x16,0x68,0x05,0x3c,0xc7,0x04,0xa5,0x34, +0xf9,0x51,0x00,0x0c,0x44,0x0e,0x44,0x36,0x4c,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c, +0xd1,0x28,0x05,0x24,0x6c,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x24, +0x00,0x01,0x03,0x3c,0x00,0x7c,0x65,0x34,0xf9,0x51,0x00,0x0c,0x50,0x0e,0x44,0x36, +0x00,0x01,0x02,0x3c,0x00,0x48,0x45,0x34,0xf9,0x51,0x00,0x0c,0x54,0x0e,0x44,0x36, +0x00,0x10,0x03,0x3c,0x23,0xdc,0x65,0x34,0xf9,0x51,0x00,0x0c,0x58,0x0e,0x44,0x36, +0x00,0x10,0x02,0x3c,0x23,0x8c,0x45,0x34,0xf9,0x51,0x00,0x0c,0x5c,0x0e,0x44,0x36, +0x14,0x02,0x03,0x3c,0x02,0x01,0x65,0x34,0xf9,0x51,0x00,0x0c,0x60,0x0e,0x44,0x36, +0x16,0x28,0x05,0x3c,0x07,0x0d,0xa5,0x34,0xf9,0x51,0x00,0x0c,0x64,0x0e,0x44,0x36, +0x48,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c, +0xf9,0x51,0x00,0x0c,0x48,0x0e,0x44,0x36,0x00,0x02,0x10,0x3c,0xeb,0x0b,0x00,0x0c, +0x03,0x00,0x04,0x24,0x4c,0x0e,0x44,0x36,0xf9,0x51,0x00,0x0c,0xd1,0x28,0x05,0x36, +0xd1,0x28,0x05,0x36,0xf9,0x51,0x00,0x0c,0x6c,0x0e,0x44,0x36,0x48,0x0e,0x44,0x36, +0xf9,0x51,0x00,0x0c,0x00,0xfb,0x05,0x3c,0x00,0xf8,0x05,0x3c,0xf9,0x51,0x00,0x0c, +0x48,0x0e,0x44,0x36,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,0xac,0x00,0xa5,0x8f, +0x04,0x0c,0x44,0x36,0xf9,0x51,0x00,0x0c,0x00,0x01,0x31,0x32,0xb0,0x00,0xa5,0x8f, +0x08,0x0c,0x44,0x36,0xf9,0x51,0x00,0x0c,0x2b,0x88,0x11,0x00,0x28,0x0e,0x44,0x36, +0xf9,0x51,0x00,0x0c,0x21,0x28,0x00,0x00,0x23,0xff,0x20,0x16,0xac,0x0e,0x62,0x36, +0x02,0x80,0x02,0x3c,0xec,0x9f,0x42,0x24,0x00,0x00,0x44,0x8c,0xf9,0x51,0x00,0x0c, +0x00,0x01,0x05,0x3c,0x28,0x08,0x44,0x36,0xf9,0x51,0x00,0x0c,0x00,0x01,0x05,0x3c, +0xac,0x0e,0x62,0x36,0x94,0x0e,0x63,0x36,0x00,0x00,0x48,0x8c,0x00,0x00,0x64,0x8c, +0xb4,0x0e,0x62,0x36,0x9c,0x0e,0x63,0x36,0x00,0x00,0x45,0x8c,0x00,0x00,0x66,0x8c, +0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x67,0x8c,0x24,0x20,0x94,0x00, +0x00,0xd8,0x02,0x3c,0x24,0x10,0x02,0x01,0x24,0x28,0xb4,0x00,0x24,0x30,0xd4,0x00, +0x24,0x38,0xf4,0x00,0x02,0x24,0x04,0x00,0x20,0x01,0x03,0x24,0x01,0x00,0x42,0x2c, +0x02,0x2c,0x05,0x00,0x02,0x34,0x06,0x00,0x1a,0xff,0x83,0x14,0x02,0x3c,0x07,0x00, +0x80,0x00,0x03,0x24,0x20,0xff,0x83,0x14,0x21,0x40,0x00,0x00,0xdb,0x52,0x00,0x08, +0x21,0x20,0x00,0x00,0x00,0x00,0x62,0x8c,0x9c,0x0e,0x65,0x36,0xa4,0x0e,0x66,0x36, +0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x00,0x00,0xe2,0xae,0x00,0x00,0xa4,0x8c, +0xac,0x0e,0x67,0x36,0xb4,0x0e,0x65,0x36,0x24,0x20,0x94,0x00,0x02,0x24,0x04,0x00, +0x04,0x00,0xe4,0xae,0x00,0x00,0xc3,0x8c,0xc4,0x0e,0x64,0x36,0x24,0x18,0x74,0x00, +0x02,0x1c,0x03,0x00,0x08,0x00,0xe3,0xae,0x00,0x00,0xe2,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x0c,0x00,0xe2,0xae,0x00,0x00,0xa3,0x8c, +0x00,0x00,0x00,0x00,0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x10,0x00,0xe3,0xae, +0x25,0xb0,0x03,0x3c,0xbc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x14,0x00,0xe2,0xae,0x00,0x00,0x83,0x8c, +0x00,0x00,0x00,0x00,0x24,0x18,0x74,0x00,0x02,0x1c,0x03,0x00,0x18,0x00,0xe3,0xae, +0x25,0xb0,0x03,0x3c,0xcc,0x0e,0x63,0x34,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x54,0x00,0x02,0x14,0x02,0x00,0x1c,0x00,0xe2,0xae,0x01,0x00,0xd6,0x26, +0x03,0x00,0xc2,0x2e,0xc7,0xfe,0x40,0x14,0x20,0x00,0xf7,0x26,0x10,0x00,0xb0,0x8f, +0x00,0x00,0x00,0x00,0x49,0x01,0x00,0x16,0x00,0x00,0x00,0x00,0x30,0x00,0xb1,0x8f, +0x00,0x00,0x00,0x00,0x06,0x00,0x20,0x16,0x21,0x20,0x00,0x02,0x50,0x00,0xa2,0x8f, +0x00,0x00,0x00,0x00,0x29,0x00,0x40,0x10,0xff,0x00,0x05,0x24,0x21,0x20,0x00,0x02, +0x02,0x52,0x00,0x0c,0x21,0x28,0x20,0x02,0x03,0x00,0x42,0x2c,0x08,0x00,0x40,0x10, +0x00,0x00,0x00,0x00,0x34,0x00,0xa5,0x8f,0x14,0x00,0xa4,0x8f,0x02,0x52,0x00,0x0c, +0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c,0x1c,0x00,0x40,0x14,0x21,0x28,0x00,0x00, +0x50,0x00,0xb2,0x8f,0x21,0x20,0x00,0x02,0x02,0x52,0x00,0x0c,0x21,0x28,0x40,0x02, +0x03,0x00,0x42,0x2c,0x09,0x00,0x40,0x10,0x21,0x20,0x20,0x02,0x54,0x00,0xa5,0x8f, +0x14,0x00,0xa4,0x8f,0x02,0x52,0x00,0x0c,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x2c, +0x0e,0x00,0x40,0x14,0x21,0x28,0x00,0x00,0x21,0x20,0x20,0x02,0x02,0x52,0x00,0x0c, +0x21,0x28,0x40,0x02,0x03,0x00,0x42,0x2c,0xe0,0x00,0x40,0x10,0x00,0x00,0x00,0x00, +0x54,0x00,0xa5,0x8f,0x34,0x00,0xa4,0x8f,0x02,0x52,0x00,0x0c,0x00,0x00,0x00,0x00, +0x03,0x00,0x42,0x2c,0xd9,0x00,0x40,0x10,0x01,0x00,0x05,0x24,0xff,0x00,0x02,0x24, +0xdb,0x00,0xa2,0x10,0x25,0xb0,0x03,0x3c,0x10,0x00,0xa2,0x27,0x40,0x29,0x05,0x00, +0x02,0x80,0x0f,0x3c,0x21,0x28,0xa2,0x00,0x68,0x15,0xec,0x25,0x00,0x00,0xa6,0x8c, +0x0c,0x00,0xa7,0x8c,0x0c,0x40,0x83,0x8d,0x10,0x40,0x84,0x8d,0x04,0x00,0xa8,0x8c, +0x10,0x00,0xa9,0x8c,0x00,0xfc,0x02,0x24,0x08,0x00,0xaa,0x8c,0x14,0x00,0xab,0x8c, +0x24,0x20,0x82,0x00,0xff,0x03,0xc6,0x30,0x24,0x18,0x62,0x00,0xff,0x03,0xe7,0x30, +0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34,0x25,0x18,0x66,0x00,0x25,0x20,0x87,0x00, +0xff,0x03,0x08,0x31,0xff,0x03,0x29,0x31,0x24,0x20,0x82,0x00,0x24,0x18,0x62,0x00, +0x80,0x42,0x08,0x00,0x80,0x4a,0x09,0x00,0x0f,0xc0,0x02,0x3c,0x1c,0x00,0xa6,0x8c, +0x18,0x00,0xa7,0x8c,0xff,0xff,0x42,0x34,0x25,0x18,0x68,0x00,0x25,0x20,0x89,0x00, +0xff,0x03,0x4a,0x31,0xff,0x03,0x6b,0x31,0x24,0x20,0x82,0x00,0x00,0x55,0x0a,0x00, +0x24,0x18,0x62,0x00,0x00,0x5d,0x0b,0x00,0x25,0x18,0x6a,0x00,0x25,0x20,0x8b,0x00, +0x16,0x40,0x86,0xa5,0x0c,0x40,0x83,0xad,0x10,0x40,0x84,0xad,0x14,0x40,0x87,0xa5, +0x68,0x15,0xf1,0x25,0x10,0x40,0x22,0x8e,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00, +0x4d,0x00,0x43,0x10,0x25,0xb0,0x12,0x3c,0x0c,0x40,0x23,0x8e,0x80,0x0c,0x44,0x36, +0x00,0x00,0x88,0x8c,0x00,0x02,0x62,0x30,0xc0,0xff,0x13,0x3c,0x82,0x6d,0x08,0x00, +0x03,0x00,0x40,0x10,0xff,0x03,0x65,0x30,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00, +0x18,0x00,0xad,0x00,0x82,0x62,0x03,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31, +0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30, +0x00,0xfc,0x02,0x24,0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x00,0xfc,0x74,0x36, +0x24,0x28,0x14,0x01,0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32, +0x00,0x14,0x02,0x00,0x25,0x28,0xa2,0x00,0xf9,0x51,0x00,0x0c,0x25,0x28,0xa6,0x00, +0x94,0x0c,0x44,0x36,0x00,0x00,0x85,0x8c,0xff,0x0f,0x02,0x3c,0xff,0xff,0x55,0x34, +0xc0,0x03,0x10,0x32,0x24,0x28,0xb5,0x00,0x80,0x85,0x10,0x00,0xf9,0x51,0x00,0x0c, +0x25,0x28,0xb0,0x00,0x10,0x40,0x2c,0x8e,0x88,0x0c,0x44,0x36,0x00,0x00,0x88,0x8c, +0x82,0x2a,0x0c,0x00,0xff,0x03,0xa5,0x30,0x24,0x10,0x13,0x01,0x00,0x02,0xa3,0x30, +0x03,0x00,0x60,0x10,0x82,0x6d,0x02,0x00,0x00,0xfc,0x02,0x24,0x25,0x28,0xa2,0x00, +0x18,0x00,0xad,0x00,0x02,0x65,0x0c,0x00,0xff,0x03,0x8c,0x31,0x00,0x02,0x83,0x31, +0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x46,0x30, +0x00,0xfc,0x02,0x24,0x25,0x60,0x82,0x01,0x18,0x00,0x8d,0x01,0x24,0x28,0x14,0x01, +0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00, +0x25,0x28,0xa2,0x00,0xf9,0x51,0x00,0x0c,0x25,0x28,0xa6,0x00,0x9c,0x0c,0x44,0x36, +0x00,0x00,0x85,0x8c,0xc0,0x03,0x10,0x32,0x80,0x85,0x10,0x00,0x24,0x28,0xb5,0x00, +0xf9,0x51,0x00,0x0c,0x25,0x28,0xb0,0x00,0x78,0x00,0xa5,0x8f,0x25,0xb0,0x10,0x3c, +0xf9,0x51,0x00,0x0c,0xe0,0x0e,0x04,0x36,0x7c,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c, +0xdc,0x0e,0x04,0x36,0x80,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x70,0x0e,0x04,0x36, +0x84,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x74,0x0e,0x04,0x36,0x88,0x00,0xa5,0x8f, +0xf9,0x51,0x00,0x0c,0x78,0x0e,0x04,0x36,0x8c,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c, +0x7c,0x0e,0x04,0x36,0x90,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x80,0x0e,0x04,0x36, +0x94,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0x84,0x0e,0x04,0x36,0x98,0x00,0xa5,0x8f, +0xf9,0x51,0x00,0x0c,0x88,0x0e,0x04,0x36,0x9c,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c, +0x8c,0x0e,0x04,0x36,0xa0,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0xd0,0x0e,0x04,0x36, +0xa4,0x00,0xa5,0x8f,0xf9,0x51,0x00,0x0c,0xd4,0x0e,0x04,0x36,0xa8,0x00,0xa5,0x8f, +0x88,0x0e,0x04,0x36,0xf9,0x51,0x00,0x0c,0x0f,0x00,0x10,0x3c,0x70,0x00,0xa6,0x8f, +0xff,0xff,0x05,0x36,0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c, +0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0x74,0x00,0xa6,0x8f, +0xff,0xff,0x05,0x36,0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c, +0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0xff,0xff,0x05,0x36, +0x95,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,0x21,0x88,0x40,0x00,0xfd,0xff,0x06,0x24, +0x01,0x00,0x42,0x34,0x24,0x30,0x46,0x00,0xff,0xff,0x05,0x36,0x6a,0x44,0x00,0x0c, +0x1e,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,0xff,0xff,0x05,0x36, +0x03,0x00,0x26,0x36,0x6a,0x44,0x00,0x0c,0x1e,0x00,0x04,0x24,0xdc,0x00,0xbf,0x8f, +0xd8,0x00,0xbe,0x8f,0xd4,0x00,0xb7,0x8f,0xd0,0x00,0xb6,0x8f,0xcc,0x00,0xb5,0x8f, +0xc8,0x00,0xb4,0x8f,0xc4,0x00,0xb3,0x8f,0xc0,0x00,0xb2,0x8f,0xbc,0x00,0xb1,0x8f, +0xb8,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0xe0,0x00,0xbd,0x27,0xff,0x00,0x05,0x24, +0xff,0x00,0x02,0x24,0x29,0xff,0xa2,0x14,0x10,0x00,0xa2,0x27,0x25,0xb0,0x03,0x3c, +0x94,0x0e,0x62,0x34,0x9c,0x0e,0x64,0x34,0xa4,0x0e,0x65,0x34,0xac,0x0e,0x66,0x34, +0x02,0x80,0x0f,0x3c,0x00,0x00,0x49,0x8c,0x68,0x15,0xed,0x25,0x00,0x00,0x8c,0x8c, +0x00,0x00,0xae,0x8c,0x00,0x00,0xc7,0x8c,0xb4,0x0e,0x62,0x34,0x0c,0x40,0xa4,0x8d, +0x10,0x40,0xa5,0x8d,0x00,0x00,0x4a,0x8c,0xff,0x03,0x06,0x3c,0x00,0xfc,0x08,0x24, +0xbc,0x0e,0x62,0x34,0x24,0x48,0x26,0x01,0x24,0x38,0xe6,0x00,0x00,0x00,0x4b,0x8c, +0x24,0x28,0xa8,0x00,0x24,0x20,0x88,0x00,0x02,0x3c,0x07,0x00,0xcc,0x0e,0x68,0x34, +0x02,0x4c,0x09,0x00,0xc4,0x0e,0x63,0x34,0xf0,0xff,0x02,0x3c,0xff,0x03,0x42,0x34, +0x25,0x28,0xa7,0x00,0x25,0x20,0x89,0x00,0x00,0x00,0x67,0x8c,0x24,0x60,0x86,0x01, +0x00,0x00,0x03,0x8d,0x24,0x50,0x46,0x01,0x24,0x28,0xa2,0x00,0x24,0x20,0x82,0x00, +0x82,0x61,0x0c,0x00,0x82,0x51,0x0a,0x00,0x0f,0xc0,0x02,0x3c,0xff,0xff,0x42,0x34, +0x25,0x20,0x8c,0x00,0x25,0x28,0xaa,0x00,0x24,0x70,0xc6,0x01,0x24,0x58,0x66,0x01, +0x24,0x28,0xa2,0x00,0x24,0x18,0x66,0x00,0x00,0x71,0x0e,0x00,0x24,0x20,0x82,0x00, +0x00,0x59,0x0b,0x00,0x24,0x38,0xe6,0x00,0x25,0x20,0x8e,0x00,0x25,0x28,0xab,0x00, +0x02,0x3c,0x07,0x00,0x02,0x1c,0x03,0x00,0x16,0x40,0xa3,0xa5,0x0c,0x40,0xa4,0xad, +0x10,0x40,0xa5,0xad,0x4e,0x54,0x00,0x08,0x14,0x40,0xa7,0xa5,0x30,0x00,0xb1,0x8f, +0xf6,0x53,0x00,0x08,0x21,0x20,0x00,0x02,0xe0,0xff,0xbd,0x27,0x44,0x00,0x02,0x24, +0x10,0x00,0xa2,0xa3,0x49,0x00,0x03,0x24,0x47,0x00,0x02,0x24,0x02,0x80,0x07,0x3c, +0x68,0xa5,0xe7,0x24,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0x10,0x27,0x03,0x24, +0x01,0x00,0x02,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00, +0xf4,0x57,0xc6,0x24,0x0c,0x00,0xe3,0xac,0x14,0x00,0xe2,0xa0,0x18,0x00,0xbf,0xaf, +0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd0,0xff,0xbd,0x27,0x25,0xb0,0x03,0x3c, +0x20,0x00,0xb4,0xaf,0x1c,0x00,0xb3,0xaf,0x2c,0x00,0xbf,0xaf,0x28,0x00,0xb6,0xaf, +0x24,0x00,0xb5,0xaf,0x18,0x00,0xb2,0xaf,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf, +0x03,0x0d,0x64,0x34,0x00,0x00,0x82,0x90,0x00,0x00,0x00,0x00,0xff,0x00,0x54,0x30, +0x70,0x00,0x93,0x32,0x63,0x00,0x60,0x12,0x42,0x00,0x63,0x34,0x8f,0x00,0x82,0x32, +0x00,0x00,0x82,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x5b,0x00,0x60,0x12, +0x00,0x00,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,0x21,0x20,0x00,0x00,0x95,0x44,0x00,0x0c, +0xff,0xff,0x25,0x36,0x21,0xa8,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c, +0x01,0x00,0x04,0x24,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x21,0x20,0x00,0x00,0x95,0x44,0x00,0x0c,0xff,0xff,0x25,0x36, +0x21,0xb0,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x64,0x00,0x04,0x24,0x1a,0x0c,0x00,0x0c,0x08,0x00,0x10,0x3c,0xff,0xff,0x10,0x36, +0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0x01,0x00,0x12,0x3c,0x24,0x30,0xb0,0x02, +0x25,0x30,0xd2,0x00,0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00, +0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x24,0x80,0xd0,0x02,0x2a,0x42,0x00,0x0c, +0x01,0x00,0x04,0x24,0x25,0x30,0x12,0x02,0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c, +0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x2a,0x42,0x00,0x0c, +0x21,0x20,0x00,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38, +0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c,0x18,0x00,0x04,0x24,0x95,0x44,0x00,0x0c, +0xff,0xff,0x25,0x36,0x21,0x80,0x40,0x00,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34, +0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24,0x18,0x00,0x04,0x24, +0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c,0x00,0x80,0x06,0x36,0xeb,0x0b,0x00,0x0c, +0x03,0x00,0x04,0x24,0x27,0x00,0x60,0x16,0x25,0xb0,0x02,0x3c,0x2c,0x00,0xbf,0x8f, +0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f,0x1c,0x00,0xb3,0x8f, +0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x25,0xb0,0x02,0x3c, +0x42,0x00,0x42,0x34,0x30,0x00,0xbd,0x27,0x00,0x00,0x40,0xa0,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x24,0x00,0x00,0x62,0xa0,0x00,0x60,0x01,0x40, +0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40,0x0f,0x00,0x11,0x3c, +0x18,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,0xff,0xff,0x25,0x36,0x21,0x80,0x40,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c, +0x64,0x00,0x04,0x24,0x18,0x00,0x04,0x24,0xff,0xff,0x25,0x36,0x6a,0x44,0x00,0x0c, +0x00,0x80,0x06,0x36,0xeb,0x0b,0x00,0x0c,0x03,0x00,0x04,0x24,0xdb,0xff,0x60,0x12, +0x25,0xb0,0x02,0x3c,0x03,0x0d,0x42,0x34,0x00,0x00,0x54,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x0f,0x00,0x10,0x3c,0x21,0x30,0xa0,0x02,0xff,0xff,0x05,0x36, +0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24, +0x2a,0x42,0x00,0x0c,0x01,0x00,0x04,0x24,0xff,0xff,0x05,0x36,0x21,0x30,0xc0,0x02, +0x6a,0x44,0x00,0x0c,0x21,0x20,0x00,0x00,0x1a,0x0c,0x00,0x0c,0x64,0x00,0x04,0x24, +0x2c,0x00,0xbf,0x8f,0x28,0x00,0xb6,0x8f,0x24,0x00,0xb5,0x8f,0x20,0x00,0xb4,0x8f, +0x1c,0x00,0xb3,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f, +0x21,0x20,0x00,0x00,0x2a,0x42,0x00,0x08,0x30,0x00,0xbd,0x27,0xc0,0xff,0xbd,0x27, +0x28,0x00,0xb4,0xaf,0x02,0x80,0x14,0x3c,0x30,0x00,0xb6,0xaf,0x38,0x00,0xbf,0xaf, +0x34,0x00,0xb7,0xaf,0x2c,0x00,0xb5,0xaf,0x24,0x00,0xb3,0xaf,0x20,0x00,0xb2,0xaf, +0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x68,0x15,0x85,0x26,0x0c,0x40,0xa2,0x8c, +0x00,0x00,0x00,0x00,0x82,0x17,0x02,0x00,0x01,0x00,0x42,0x30,0x08,0x00,0x40,0x14, +0x06,0x00,0x16,0x24,0x08,0x40,0xa2,0x8c,0x01,0x00,0x03,0x24,0x42,0x17,0x02,0x00, +0x03,0x00,0x42,0x30,0x5d,0x01,0x43,0x10,0x25,0xb0,0x02,0x3c,0x68,0x15,0x85,0x26, +0x0c,0x40,0xa2,0x8c,0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,0x01,0x00,0x44,0x30, +0x0d,0x00,0x83,0x10,0x00,0x00,0x00,0x00,0x38,0x00,0xbf,0x8f,0x34,0x00,0xb7,0x8f, +0x30,0x00,0xb6,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f,0x24,0x00,0xb3,0x8f, +0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x40,0x00,0xbd,0x27,0x08,0x40,0xa2,0x8c,0x00,0x00,0x00,0x00, +0x42,0x17,0x02,0x00,0x03,0x00,0x42,0x30,0xef,0xff,0x44,0x14,0x25,0xb0,0x02,0x3c, +0x0e,0x0c,0x44,0x34,0x00,0x00,0x83,0x90,0x00,0x01,0x02,0x24,0xff,0x00,0x63,0x30, +0x01,0x00,0x63,0x24,0x59,0x02,0x62,0x10,0xff,0x00,0x62,0x30,0x00,0x00,0x82,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x84,0x26,0x10,0x40,0x82,0x8c, +0x01,0x00,0x03,0x24,0x82,0x17,0x02,0x00,0x73,0x02,0x43,0x10,0x0f,0x00,0x10,0x3c, +0xc7,0x42,0x93,0x90,0x25,0xb0,0x02,0x3c,0x62,0x0c,0x42,0x34,0xff,0x00,0x63,0x32, +0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x90,0x26, +0xc6,0x42,0x02,0x92,0x00,0x00,0x00,0x00,0x79,0x01,0x40,0x10,0x01,0x00,0x02,0x24, +0x25,0xb0,0x11,0x3c,0x03,0x0d,0x23,0x36,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x70,0x00,0x42,0x30,0x9f,0x01,0x40,0x14,0xcc,0x00,0x02,0x24,0xc4,0x42,0x02,0x96, +0x00,0x00,0x00,0x00,0x23,0x20,0x53,0x00,0x2b,0x18,0x53,0x00,0x23,0x10,0x62,0x02, +0x0a,0x10,0x83,0x00,0x03,0x00,0x42,0x2c,0x6c,0x01,0x40,0x10,0x00,0x00,0x00,0x00, +0xc4,0x42,0x03,0x92,0x63,0x0c,0x22,0x36,0x21,0x20,0x00,0x00,0x00,0x00,0x43,0xa0, +0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x82,0x24,0x68,0x15,0x83,0x26,0xc3,0x42,0x62,0x90,0x08,0x40,0x66,0x8c, +0xc2,0x42,0x73,0xa0,0x23,0x20,0x53,0x00,0x2b,0x38,0x62,0x02,0x23,0x90,0x62,0x02, +0x02,0x2c,0x06,0x00,0x0b,0x90,0x87,0x00,0x3f,0x00,0xa5,0x30,0x3f,0x00,0xc4,0x30, +0x24,0x00,0x02,0x24,0x20,0x00,0x03,0x24,0x23,0x10,0x44,0x00,0x8a,0x01,0x40,0x16, +0x23,0x18,0x65,0x00,0x21,0x40,0x80,0x00,0x21,0xa8,0xa0,0x00,0x02,0x80,0x17,0x3c, +0x2b,0x28,0xc8,0x02,0x81,0x01,0xa0,0x10,0x68,0x15,0x82,0x26,0x80,0x10,0x08,0x00, +0x68,0x15,0x83,0x26,0x21,0x10,0x43,0x00,0x18,0x40,0x44,0x8c,0x00,0x00,0x00,0x00, +0x82,0x25,0x04,0x00,0x68,0x15,0x86,0x26,0x0c,0x40,0xc3,0x8c,0x00,0x00,0x00,0x00, +0xff,0x03,0x67,0x30,0xe9,0x01,0xe0,0x10,0x00,0x02,0x62,0x30,0x04,0x00,0x40,0x10, +0x18,0x00,0xe4,0x00,0x00,0xfc,0x02,0x24,0x25,0x38,0xe2,0x00,0x18,0x00,0xe4,0x00, +0x82,0x82,0x03,0x00,0xff,0x03,0x10,0x32,0x00,0x02,0x03,0x32,0x12,0x10,0x00,0x00, +0x02,0x12,0x02,0x00,0x03,0x00,0x60,0x10,0xff,0x03,0x45,0x30,0x00,0xfc,0x02,0x24, +0x25,0x80,0x02,0x02,0x18,0x00,0x04,0x02,0x80,0x1d,0x04,0x00,0x25,0xb0,0x11,0x3c, +0x80,0x0c,0x24,0x36,0x94,0x0c,0x31,0x36,0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00, +0x3f,0x00,0x02,0x32,0x00,0x14,0x02,0x00,0x25,0x18,0x62,0x00,0x25,0x18,0x65,0x00, +0x21,0x28,0x60,0x00,0xf9,0x51,0x00,0x0c,0x10,0x00,0xa3,0xaf,0x00,0x00,0x23,0x8e, +0xff,0x0f,0x02,0x3c,0xc0,0x03,0x10,0x32,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x80,0x85,0x10,0x00,0x25,0x18,0x70,0x00,0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x00, +0x10,0x00,0xa3,0xaf,0xf9,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0x68,0x15,0x83,0x26, +0x08,0x40,0x62,0x8c,0x00,0x00,0x00,0x00,0x5b,0x01,0x40,0x04,0xc0,0x28,0x15,0x00, +0x21,0x10,0xa3,0x00,0xac,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xad,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xae,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xaf,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xb0,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xb1,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xb2,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26, +0x21,0x10,0xa2,0x00,0xb3,0x40,0x44,0x90,0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34, +0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0xee,0x7d,0xe3,0x92, +0x22,0x00,0x02,0x24,0x03,0x00,0x62,0x10,0x92,0x00,0x02,0x24,0xfe,0xfe,0x62,0x14, +0x00,0x00,0x00,0x00,0x68,0x15,0x82,0x26,0x08,0x40,0x43,0x8c,0x01,0x00,0x44,0x3a, +0x24,0x00,0x02,0x24,0x02,0x1a,0x03,0x00,0x3f,0x00,0x63,0x30,0x01,0x00,0x84,0x30, +0x87,0x01,0x80,0x10,0x23,0x28,0x43,0x00,0x42,0x18,0x12,0x00,0x40,0x10,0x03,0x00, +0x21,0x90,0x43,0x00,0x68,0x15,0x83,0x26,0xc3,0x42,0x62,0x90,0x00,0x00,0x00,0x00, +0x2b,0x10,0x62,0x02,0x50,0x01,0x40,0x10,0x2b,0x10,0x45,0x02,0x06,0x00,0x40,0x10, +0x24,0x00,0x06,0x24,0x08,0x40,0x62,0x8c,0x00,0x00,0x00,0x00,0x02,0x12,0x02,0x00, +0x3f,0x00,0x42,0x30,0x21,0x30,0x52,0x00,0x2b,0x28,0xc6,0x02,0x50,0x01,0xa0,0x10, +0x68,0x15,0x82,0x26,0x80,0x10,0x06,0x00,0x68,0x15,0x83,0x26,0x21,0x10,0x43,0x00, +0x18,0x40,0x44,0x8c,0x00,0x00,0x00,0x00,0x82,0x25,0x04,0x00,0x68,0x15,0x83,0x26, +0x10,0x40,0x70,0x8c,0x00,0x00,0x00,0x00,0x82,0x3a,0x10,0x00,0xff,0x03,0xe7,0x30, +0x5a,0x01,0xe0,0x10,0x00,0x02,0xe2,0x30,0x04,0x00,0x40,0x10,0x18,0x00,0xe4,0x00, +0x00,0xfc,0x02,0x24,0x25,0x38,0xe2,0x00,0x18,0x00,0xe4,0x00,0x02,0x85,0x10,0x00, +0xff,0x03,0x10,0x32,0x00,0x02,0x03,0x32,0x12,0x10,0x00,0x00,0x02,0x12,0x02,0x00, +0x03,0x00,0x60,0x10,0xff,0x03,0x45,0x30,0x00,0xfc,0x02,0x24,0x25,0x80,0x02,0x02, +0x18,0x00,0x04,0x02,0x80,0x1d,0x04,0x00,0x25,0xb0,0x11,0x3c,0x88,0x0c,0x24,0x36, +0x9c,0x0c,0x31,0x36,0x12,0x80,0x00,0x00,0x02,0x82,0x10,0x00,0x3f,0x00,0x02,0x32, +0x00,0x14,0x02,0x00,0x25,0x18,0x62,0x00,0x25,0x18,0x65,0x00,0x21,0x28,0x60,0x00, +0xf9,0x51,0x00,0x0c,0x10,0x00,0xa3,0xaf,0x00,0x00,0x23,0x8e,0xff,0x0f,0x02,0x3c, +0xff,0xff,0x42,0x34,0xc0,0x03,0x10,0x32,0x24,0x18,0x62,0x00,0x80,0x85,0x10,0x00, +0x25,0x18,0x70,0x00,0x21,0x20,0x20,0x02,0x21,0x28,0x60,0x00,0xf9,0x51,0x00,0x0c, +0x10,0x00,0xa3,0xaf,0x1c,0x56,0x00,0x08,0x00,0x00,0x00,0x00,0x80,0x0c,0x42,0x34, +0x00,0x00,0x43,0x8c,0x21,0x30,0xa0,0x00,0xc0,0xff,0x02,0x3c,0x24,0x20,0x62,0x00, +0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c,0x7e,0x57,0x00,0x08,0x18,0x40,0xc3,0x24, +0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e,0x0d,0x00,0x40,0x10,0x02,0x80,0x17,0x3c, +0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00,0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14, +0x04,0x00,0x63,0x24,0x08,0x40,0xc2,0x8c,0xc0,0xff,0x03,0x24,0x3f,0x00,0x24,0x32, +0x24,0x10,0x43,0x00,0x25,0x10,0x44,0x00,0x08,0x40,0xc2,0xac,0x02,0x80,0x17,0x3c, +0xee,0x7d,0xe3,0x92,0x22,0x00,0x02,0x24,0x44,0x00,0x62,0x10,0x92,0x00,0x02,0x24, +0x43,0x00,0x62,0x10,0x25,0xb0,0x02,0x3c,0x25,0xb0,0x02,0x3c,0x24,0x0a,0x42,0x34, +0x00,0x00,0x44,0x8c,0x3f,0x3f,0x03,0x3c,0x3f,0x3f,0x63,0x34,0x24,0x20,0x83,0x00, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x16,0x56,0x53,0x24,0x1e,0x57,0x72,0x24, +0x21,0x88,0x00,0x00,0xa5,0x57,0x00,0x08,0x10,0x00,0xa4,0xaf,0x95,0x45,0x00,0x0c, +0x00,0x00,0x00,0x00,0x4d,0x00,0x40,0x10,0x68,0x15,0x85,0x26,0x01,0x00,0x31,0x26, +0x21,0x00,0x22,0x2e,0x17,0x00,0x40,0x10,0x68,0x15,0x84,0x26,0xc0,0x80,0x11,0x00, +0x10,0x00,0xa4,0x27,0x21,0x28,0x13,0x02,0x95,0x45,0x00,0x0c,0x04,0x00,0x06,0x24, +0x21,0x28,0x12,0x02,0x10,0x00,0xa4,0x27,0xf0,0xff,0x40,0x14,0x04,0x00,0x06,0x24, +0x68,0x15,0x85,0x26,0x08,0x40,0xa3,0x8c,0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34, +0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00,0x00,0x24,0x04,0x00,0xff,0x7f,0x02,0x3c, +0x25,0x18,0x64,0x00,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00,0x08,0x40,0xa3,0xac, +0x68,0x15,0x84,0x26,0x0c,0x40,0x83,0x8c,0x00,0x40,0x02,0x3c,0x25,0x18,0x62,0x00, +0x25,0xb0,0x02,0x3c,0x0e,0x0c,0x42,0x34,0x0c,0x40,0x83,0xac,0x00,0x00,0x40,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x16,0x56,0x00,0x08,0x68,0x15,0x85,0x26, +0xc6,0x42,0x02,0xa2,0x52,0x56,0x00,0x08,0xc4,0x42,0x13,0xa6,0x50,0x55,0x00,0x0c, +0x00,0x00,0x00,0x00,0x62,0x56,0x00,0x08,0xc4,0x42,0x13,0xa6,0x25,0xb0,0x02,0x3c, +0x88,0x0c,0x42,0x34,0x00,0x00,0x44,0x8c,0x02,0x80,0x03,0x3c,0x68,0x15,0x66,0x24, +0xc0,0xff,0x02,0x3c,0x24,0x20,0x82,0x00,0x21,0x88,0x00,0x00,0xc0,0xff,0x05,0x3c, +0xe0,0x57,0x00,0x08,0x18,0x40,0xc3,0x24,0x01,0x00,0x31,0x26,0x25,0x00,0x22,0x2e, +0xb2,0xff,0x40,0x10,0x25,0xb0,0x02,0x3c,0x00,0x00,0x62,0x8c,0x00,0x00,0x00,0x00, +0x24,0x10,0x45,0x00,0xf8,0xff,0x44,0x14,0x04,0x00,0x63,0x24,0x08,0x40,0xc2,0x8c, +0x3f,0x00,0x23,0x32,0xff,0xc0,0x04,0x24,0x24,0x10,0x44,0x00,0x00,0x1a,0x03,0x00, +0x25,0x10,0x43,0x00,0x90,0x57,0x00,0x08,0x08,0x40,0xc2,0xac,0x08,0x40,0xa3,0x8c, +0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x3f,0x00,0x24,0x32,0x24,0x18,0x62,0x00, +0x00,0x24,0x04,0x00,0x25,0x18,0x64,0x00,0x00,0x80,0x02,0x3c,0xb9,0x57,0x00,0x08, +0x25,0x18,0x62,0x00,0x63,0x0c,0x23,0x36,0x00,0x00,0x62,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x6c,0x56,0x00,0x08,0x68,0x15,0x83,0x26,0x30,0x40,0x43,0x8c, +0x87,0x56,0x00,0x08,0x82,0x25,0x03,0x00,0x91,0x00,0xe0,0x10,0x21,0x40,0x00,0x00, +0x2b,0x10,0x42,0x02,0x21,0x20,0x92,0x00,0x00,0x00,0x42,0x38,0x24,0x00,0x08,0x24, +0x2b,0x18,0x43,0x02,0x0b,0x40,0x82,0x00,0x70,0xfe,0x60,0x10,0x20,0x00,0x15,0x24, +0x68,0x15,0x83,0x26,0x0a,0x40,0x62,0x94,0x02,0x80,0x17,0x3c,0x3f,0x00,0x42,0x30, +0x7e,0x56,0x00,0x08,0x21,0xa8,0x52,0x00,0x21,0x10,0xa3,0x00,0xb4,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x22,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb5,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x23,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb6,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x24,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb7,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x25,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb8,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x26,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xb9,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x27,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xba,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x28,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x68,0x15,0x82,0x26,0x21,0x10,0xa2,0x00,0xbb,0x41,0x44,0x90, +0x25,0xb0,0x03,0x3c,0x29,0x0a,0x63,0x34,0x00,0x00,0x64,0xa0,0x21,0x10,0x00,0x00, +0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x42,0x24,0x19,0x57,0x00,0x08,0x00,0x00,0x00,0x00,0x28,0x00,0xa0,0x10, +0x80,0x10,0x08,0x00,0x21,0x10,0x46,0x00,0x18,0x40,0x45,0x8c,0x25,0xb0,0x04,0x3c, +0xf9,0x51,0x00,0x0c,0x80,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x94,0x0c,0x84,0x34, +0xb3,0x56,0x00,0x08,0x21,0x28,0x00,0x00,0x08,0x40,0x62,0x8c,0x00,0x00,0x00,0x00, +0x02,0x12,0x02,0x00,0x3f,0x00,0x42,0x30,0x2b,0x18,0x42,0x02,0xb2,0xfe,0x60,0x14, +0x23,0x30,0x52,0x00,0x21,0x30,0x00,0x00,0x21,0x28,0x00,0x00,0x68,0x15,0x82,0x26, +0x30,0x40,0x43,0x8c,0x41,0x57,0x00,0x08,0x82,0x25,0x03,0x00,0x00,0x00,0x80,0xa0, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x3d,0x56,0x00,0x08,0x68,0x15,0x84,0x26, +0x23,0x10,0x92,0x00,0x2b,0x18,0x44,0x02,0x2b,0x20,0x45,0x02,0x0b,0x40,0x43,0x00, +0xe2,0xfd,0x80,0x14,0x23,0xa8,0xb2,0x00,0x7d,0x56,0x00,0x08,0x21,0xa8,0x00,0x00, +0x30,0x40,0xc5,0x8c,0x7a,0x58,0x00,0x08,0x25,0xb0,0x04,0x3c,0x27,0x00,0xa0,0x10, +0x80,0x10,0x06,0x00,0x21,0x10,0x43,0x00,0x18,0x40,0x45,0x8c,0x25,0xb0,0x04,0x3c, +0xf9,0x51,0x00,0x0c,0x88,0x0c,0x84,0x34,0x25,0xb0,0x04,0x3c,0x9c,0x0c,0x84,0x34, +0xf9,0x51,0x00,0x0c,0x21,0x28,0x00,0x00,0x1c,0x56,0x00,0x08,0x00,0x00,0x00,0x00, +0xff,0xff,0x43,0x26,0x42,0x18,0x03,0x00,0x40,0x10,0x03,0x00,0x21,0x10,0x43,0x00, +0x2b,0x57,0x00,0x08,0x01,0x00,0x52,0x24,0xff,0xff,0x05,0x36,0x60,0x00,0x06,0x24, +0x6a,0x44,0x00,0x0c,0x24,0x00,0x04,0x24,0xeb,0x0b,0x00,0x0c,0xe8,0x03,0x04,0x24, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x24,0x00,0x04,0x24,0x95,0x44,0x00,0x0c,0xff,0xff,0x05,0x36,0x1f,0x00,0x53,0x30, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x1a,0x0c,0x00,0x0c, +0x64,0x00,0x04,0x24,0x44,0x56,0x00,0x08,0x25,0xb0,0x02,0x3c,0x30,0x40,0x65,0x8c, +0xa6,0x58,0x00,0x08,0x25,0xb0,0x04,0x3c,0x00,0xff,0x84,0x30,0x02,0x22,0x04,0x00, +0x08,0x00,0x80,0x10,0x02,0x80,0x02,0x3c,0xff,0x00,0x02,0x24,0x04,0x00,0x82,0x10, +0xcc,0xff,0x03,0x24,0x02,0x80,0x02,0x3c,0x08,0x00,0xe0,0x03,0x4e,0x58,0x43,0xa0, +0x02,0x80,0x02,0x3c,0x08,0x00,0xe0,0x03,0x4e,0x58,0x44,0xa0,0x02,0x24,0x04,0x00, +0xff,0x00,0x84,0x30,0xc0,0x10,0x04,0x00,0x21,0x10,0x44,0x00,0x80,0x10,0x02,0x00, +0x21,0x10,0x44,0x00,0x02,0x80,0x03,0x3c,0x80,0x10,0x02,0x00,0x68,0x15,0x63,0x24, +0x20,0x00,0x84,0x2c,0x09,0x00,0x80,0x10,0x21,0x10,0x43,0x00,0x74,0x51,0x43,0x8c, +0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00,0x7f,0x00,0x63,0x30, +0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c, +0x50,0x79,0x43,0x8c,0x25,0xb0,0x02,0x3c,0xc4,0x02,0x42,0x34,0x02,0x19,0x03,0x00, +0x7f,0x00,0x63,0x30,0x00,0x00,0x43,0xac,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xff,0x00,0x85,0x30,0xd2,0xff,0xa3,0x24,0xfe,0xff,0xa2,0x24,0xda,0xff,0xa4,0x24, +0x04,0x00,0x63,0x2c,0x08,0x00,0x84,0x2c,0x06,0x00,0x60,0x14,0xff,0x00,0x42,0x30, +0xf0,0xff,0xa2,0x24,0xfc,0xff,0xa3,0x24,0x16,0x00,0x46,0x2c,0x03,0x00,0x80,0x10, +0xff,0x00,0x62,0x30,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfa,0xff,0xa3,0x24, +0xfc,0xff,0xc0,0x10,0x21,0x10,0xa0,0x00,0x08,0x00,0xe0,0x03,0xff,0x00,0x62,0x30, +0xe0,0xff,0xbd,0x27,0x44,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3,0x49,0x00,0x03,0x24, +0x47,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x02,0x80,0x08,0x3c,0x30,0xa5,0xe7,0x24, +0x68,0x15,0x08,0x25,0xff,0xff,0x09,0x34,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3, +0xf4,0x01,0x03,0x24,0x01,0x00,0x02,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27, +0x21,0x20,0xe0,0x00,0x9c,0x64,0xc6,0x24,0xf4,0x63,0x09,0xad,0x0c,0x00,0xe3,0xac, +0x14,0x00,0xe2,0xa0,0xf0,0x63,0x09,0xad,0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf,0x14,0x00,0xb1,0xaf, +0x10,0x00,0xb0,0xaf,0x02,0x80,0x02,0x3c,0xee,0x7d,0x44,0x90,0x22,0x00,0x03,0x24, +0x07,0x00,0x83,0x10,0x25,0xb0,0x04,0x3c,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x4c,0x00,0x83,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0x30, +0xf5,0xff,0x40,0x10,0x02,0x80,0x11,0x3c,0x68,0x15,0x22,0x26,0xf0,0x63,0x43,0x8c, +0x98,0x0c,0x84,0x34,0x21,0x10,0x00,0x00,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30, +0x00,0x00,0x83,0xa0,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x22,0x26,0xf4,0x63,0x43,0x8c, +0x25,0xb0,0x02,0x3c,0x99,0x0c,0x42,0x34,0x02,0x19,0x03,0x00,0xff,0x00,0x63,0x30, +0x00,0x00,0x43,0xa0,0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30, +0x06,0x00,0x43,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x42,0x24,0x68,0x15,0x30,0x26, +0xf0,0x63,0x04,0x8e,0xff,0xff,0x02,0x34,0xd7,0xff,0x82,0x10,0x00,0x00,0x00,0x00, +0xe8,0x63,0x02,0x8e,0x00,0x00,0x00,0x00,0x02,0x11,0x02,0x00,0x7f,0x00,0x42,0x30, +0x3f,0x00,0x43,0x2c,0x12,0x00,0x60,0x14,0x3b,0x00,0x42,0x2c,0xf4,0x63,0x02,0x8e, +0x02,0x19,0x04,0x00,0x02,0x11,0x02,0x00,0x23,0x18,0x62,0x00,0x1e,0x00,0x60,0x18, +0x25,0xb0,0x04,0x3c,0x12,0x01,0x05,0x3c,0x0c,0x09,0x84,0x34,0x13,0x13,0xa5,0x34, +0xf9,0x51,0x00,0x0c,0x00,0x00,0x00,0x00,0x68,0x15,0x22,0x26,0xe4,0x42,0x43,0x8c, +0x00,0x20,0x04,0x3c,0x25,0x18,0x64,0x00,0x30,0x59,0x00,0x08,0xe4,0x42,0x43,0xac, +0xbd,0xff,0x40,0x10,0x01,0x00,0x03,0x24,0xe4,0x42,0x02,0x8e,0x00,0x00,0x00,0x00, +0x42,0x17,0x02,0x00,0x01,0x00,0x42,0x30,0xb7,0xff,0x43,0x14,0x25,0xb0,0x04,0x3c, +0x32,0x03,0x05,0x3c,0x0c,0x09,0x84,0x34,0xf9,0x51,0x00,0x0c,0x33,0x13,0xa5,0x34, +0xe4,0x42,0x03,0x8e,0xff,0xdf,0x02,0x3c,0xff,0xff,0x42,0x34,0x24,0x18,0x62,0x00, +0x30,0x59,0x00,0x08,0xe4,0x42,0x03,0xae,0x22,0x02,0x05,0x3c,0x0c,0x09,0x84,0x34, +0x6a,0x59,0x00,0x08,0x23,0x13,0xa5,0x34,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34, +0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xff,0x00,0x42,0x30,0x08,0x00,0x42,0x34, +0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c, +0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x03,0x0d,0x63,0x34, +0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00,0xf7,0x00,0x42,0x30,0x00,0x00,0x62,0xa0, +0x01,0x00,0x82,0x24,0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14, +0x01,0x00,0x82,0x24,0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90, +0x21,0x20,0x00,0x00,0x3f,0x00,0x42,0x30,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24, +0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfd,0xff,0x60,0x14,0x01,0x00,0x82,0x24, +0x25,0xb0,0x03,0x3c,0x2d,0x0a,0x63,0x34,0x00,0x00,0x62,0x90,0x21,0x20,0x00,0x00, +0xff,0x00,0x42,0x30,0x80,0x00,0x42,0x34,0x00,0x00,0x62,0xa0,0x01,0x00,0x82,0x24, +0xff,0x00,0x44,0x30,0x06,0x00,0x83,0x2c,0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x25,0xb0,0x02,0x3c,0xff,0x00,0x03,0x3c, +0x82,0x01,0x49,0x34,0x81,0x01,0x48,0x34,0x24,0x10,0x83,0x00,0x02,0x3c,0x02,0x00, +0x00,0xff,0x63,0x34,0x02,0x80,0x02,0x3c,0x68,0x15,0x45,0x24,0x02,0x32,0x04,0x00, +0x01,0x00,0x02,0x24,0x24,0x20,0x83,0x00,0xce,0x4c,0xa2,0xa0,0xbc,0x4c,0xa0,0xac, +0xc0,0x4c,0xa0,0xac,0xc4,0x4c,0xa0,0xac,0x06,0x00,0x80,0x14,0xc8,0x4c,0xa0,0xac, +0x00,0x00,0x02,0x91,0x00,0x00,0x23,0x91,0xcc,0x4c,0xa2,0xa0,0x08,0x00,0xe0,0x03, +0xcd,0x4c,0xa3,0xa0,0xcd,0x4c,0xa7,0xa0,0x08,0x00,0xe0,0x03,0xcc,0x4c,0xa6,0xa0, +0x02,0x80,0x03,0x3c,0x68,0x15,0x63,0x24,0xcd,0x4c,0x66,0x90,0xcc,0x4c,0x65,0x90, +0x25,0xb0,0x02,0x3c,0x82,0x01,0x44,0x34,0x81,0x01,0x42,0x34,0x00,0x00,0x45,0xa0, +0x00,0x00,0x86,0xa0,0x08,0x00,0xe0,0x03,0xce,0x4c,0x60,0xa0,0x02,0x80,0x08,0x3c, +0x68,0x15,0x04,0x25,0xce,0x4c,0x82,0x90,0x00,0x00,0x00,0x00,0x15,0x00,0x40,0x10, +0x21,0x18,0x00,0x00,0xc0,0x4c,0x82,0x8c,0xbc,0x4c,0x85,0x8c,0x25,0xb0,0x03,0x3c, +0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x82,0x01,0x67,0x34,0x0f,0x00,0x40,0x10, +0x81,0x01,0x66,0x34,0xcd,0x4c,0x83,0x90,0xcc,0x4c,0x82,0x90,0xf0,0x00,0x63,0x30, +0x1f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0,0x00,0x00,0xe3,0xa0,0x68,0x15,0x02,0x25, +0x01,0x00,0x03,0x24,0xc8,0x4c,0x40,0xac,0xbc,0x4c,0x40,0xac,0xc0,0x4c,0x40,0xac, +0xc4,0x4c,0x40,0xac,0x08,0x00,0xe0,0x03,0x21,0x10,0x60,0x00,0xc4,0x4c,0x82,0x8c, +0x25,0xb0,0x03,0x3c,0x82,0x01,0x69,0x34,0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00, +0x0e,0x00,0x40,0x14,0x81,0x01,0x66,0x34,0xc8,0x4c,0x82,0x8c,0x00,0x00,0x00,0x00, +0x40,0x11,0x02,0x00,0x2b,0x10,0xa2,0x00,0x08,0x00,0x40,0x14,0x00,0x00,0x00,0x00, +0xcd,0x4c,0x83,0x90,0xcc,0x4c,0x82,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0xa0, +0x00,0x00,0x23,0xa1,0xf2,0x59,0x00,0x08,0x68,0x15,0x02,0x25,0xcd,0x4c,0x83,0x90, +0xcc,0x4c,0x82,0x90,0xf0,0x00,0x63,0x30,0x7f,0x00,0x42,0x30,0x00,0x00,0xc2,0xa0, +0x00,0x00,0x23,0xa1,0xf2,0x59,0x00,0x08,0x68,0x15,0x02,0x25,0x00,0x00,0x85,0xac, +0x21,0x10,0x00,0x00,0x01,0x00,0x42,0x24,0xff,0x00,0x42,0x30,0x06,0x00,0x43,0x2c, +0xfc,0xff,0x60,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x25,0xb0,0x03,0x3c,0x33,0x02,0x65,0x34,0x00,0x11,0x04,0x00,0x00,0x00,0xa2,0xa0, +0x30,0x02,0x63,0x34,0x00,0x00,0x65,0x8c,0x0f,0x00,0x02,0x3c,0xff,0xff,0x42,0x34, +0x24,0x28,0xa2,0x00,0x01,0x00,0x03,0x24,0x04,0x18,0x83,0x00,0x02,0x00,0xa0,0x10, +0x21,0x10,0x00,0x00,0xff,0xff,0x62,0x30,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xe0,0xff,0xbd,0x27,0x14,0x00,0xb1,0xaf,0x25,0xb0,0x11,0x3c,0x18,0x00,0xb2,0xaf, +0x4c,0x00,0x22,0x36,0x1c,0x00,0xbf,0xaf,0x10,0x00,0xb0,0xaf,0x00,0x00,0x44,0x90, +0x02,0x80,0x03,0x3c,0x02,0x00,0x02,0x24,0xff,0x00,0x84,0x30,0x07,0x00,0x82,0x10, +0x68,0x15,0x72,0x24,0x1c,0x00,0xbf,0x8f,0x18,0x00,0xb2,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0x46,0x64,0x43,0x96, +0x01,0x00,0x02,0x24,0xf7,0xff,0x62,0x14,0x21,0x20,0x00,0x00,0x1e,0x5a,0x00,0x0c, +0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x24,0x1e,0x5a,0x00,0x0c,0x21,0x80,0x40,0x00, +0x25,0x80,0x02,0x02,0x33,0x02,0x23,0x36,0x08,0x00,0x02,0x24,0xff,0xff,0x10,0x32, +0x40,0x00,0x25,0x36,0x00,0x00,0x62,0xa0,0xea,0xff,0x00,0x16,0x00,0x00,0x00,0x00, +0x00,0x00,0xa2,0x94,0x44,0x64,0x43,0x96,0xff,0xdf,0x42,0x30,0x00,0x20,0x44,0x34, +0x01,0x00,0x63,0x24,0x44,0x64,0x43,0xa6,0x00,0x00,0xa2,0xa4,0x00,0x00,0xa4,0xa4, +0x3b,0x5a,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xb8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x3c,0x00,0xb1,0xaf,0x38,0x00,0xb0,0xaf,0x40,0x00,0xbf,0xaf,0x68,0x15,0x50,0x24, +0xf8,0x63,0x03,0x8e,0x02,0x80,0x11,0x3c,0x01,0x00,0x02,0x24,0x01,0x00,0x63,0x30, +0x10,0x00,0xa4,0x27,0x64,0x79,0x25,0x26,0x07,0x00,0x62,0x10,0x0a,0x00,0x06,0x24, +0x40,0x00,0xbf,0x8f,0x3c,0x00,0xb1,0x8f,0x38,0x00,0xb0,0x8f,0x21,0x10,0x00,0x00, +0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27,0x6c,0x45,0x00,0x0c,0x00,0x00,0x00,0x00, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x01,0x00,0x21,0x38,0x00,0x60,0x81,0x40, +0x21,0x28,0x00,0x00,0x64,0x79,0x24,0x26,0x58,0x45,0x00,0x0c,0x0a,0x00,0x06,0x24, +0x28,0x00,0x03,0x24,0x05,0x00,0x02,0x24,0xfd,0x63,0x03,0xa2,0xfc,0x63,0x02,0xa2, +0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40,0x54,0x4f,0x00,0x0c, +0x48,0x00,0x04,0x24,0x21,0x80,0x40,0x00,0x10,0x00,0xa5,0x27,0xe4,0xff,0x40,0x10, +0x0a,0x00,0x06,0x24,0x08,0x00,0x44,0x94,0x14,0x00,0x02,0x24,0x14,0x00,0x02,0xae, +0x02,0x80,0x02,0x3c,0x28,0x00,0x03,0x24,0x25,0x20,0x82,0x00,0x0c,0x00,0x03,0xae, +0x6c,0x45,0x00,0x0c,0x20,0x00,0x84,0x24,0x30,0x08,0x00,0x0c,0x21,0x20,0x00,0x02, +0x6e,0x5a,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x18,0x03,0x42,0x34,0x60,0x6a,0x63,0x24,0x00,0x00,0x43,0xac,0x63,0x00,0x02,0x24, +0xff,0xff,0x42,0x24,0xff,0xff,0x41,0x04,0xff,0xff,0x42,0x24,0x02,0x80,0x02,0x3c, +0xe8,0x7d,0x45,0x94,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0xeb,0x7d,0x66,0x90, +0xf8,0x7d,0x47,0x90,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x03,0x7e,0x69,0x90, +0x05,0x7e,0x4a,0x90,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x08,0x7e,0x6b,0x90, +0x0a,0x7e,0x4c,0x90,0x07,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0x25,0xb0,0x04,0x3c, +0xf5,0x7d,0x43,0xa0,0xb0,0x03,0x84,0x34,0x02,0x80,0x02,0x3c,0x02,0x80,0x18,0x3c, +0xea,0x7d,0x08,0x93,0x00,0x00,0x85,0xac,0xf6,0x7d,0x40,0xa0,0x02,0x80,0x02,0x3c, +0x00,0x00,0x86,0xac,0x02,0x80,0x0f,0x3c,0xf7,0x7d,0x40,0xa0,0x02,0x80,0x02,0x3c, +0x00,0x00,0x87,0xac,0x68,0x15,0xee,0x25,0x18,0x7e,0x40,0xa0,0xfd,0xff,0x02,0x24, +0xd5,0x4a,0xc2,0xa1,0x01,0x00,0x03,0x24,0x00,0x78,0x02,0x24,0xd4,0x4a,0xc3,0xa1, +0xd8,0x4a,0xc2,0xa5,0xff,0x07,0x03,0x24,0x0f,0x00,0x0d,0x31,0x02,0x00,0x02,0x24, +0xda,0x4a,0xc3,0xa5,0x00,0x00,0x88,0xac,0x00,0x00,0x89,0xac,0x00,0x00,0x8a,0xac, +0x00,0x00,0x8b,0xac,0x00,0x00,0x8c,0xac,0x17,0x00,0xa2,0x11,0x02,0x80,0x02,0x3c, +0xea,0x7d,0x02,0x93,0x01,0x00,0x03,0x24,0x0f,0x00,0x42,0x30,0x05,0x00,0x43,0x10, +0x00,0x00,0x00,0x00,0x02,0x80,0x02,0x3c,0x2a,0x7e,0x40,0xa4,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x3c,0x68,0x15,0xe4,0x25,0x02,0xbc,0x42,0x34, +0x68,0x4b,0x82,0xac,0x15,0x15,0x03,0x3c,0x02,0x02,0x02,0x3c,0x07,0x07,0x63,0x34, +0x64,0x4b,0x82,0xac,0x02,0x80,0x02,0x3c,0x60,0x4b,0x83,0xac,0x2a,0x7e,0x40,0xa4, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xef,0x7d,0x44,0x90,0x06,0x00,0x03,0x24, +0x15,0x00,0x83,0x10,0x0b,0x00,0x02,0x24,0x0a,0x00,0x82,0x10,0x00,0xe0,0x02,0x3c, +0x68,0x15,0xe4,0x25,0x00,0xb2,0x42,0x34,0x00,0x1c,0x03,0x3c,0x68,0x4b,0x82,0xac, +0x00,0x1c,0x63,0x34,0x00,0x04,0x02,0x24,0x60,0x4b,0x83,0xac,0xd2,0x5a,0x00,0x08, +0x64,0x4b,0x82,0xac,0x00,0x80,0x02,0x3c,0x00,0xbc,0x42,0x34,0x15,0x15,0x03,0x3c, +0x68,0x4b,0xc2,0xad,0x07,0x07,0x63,0x34,0x03,0x03,0x02,0x3c,0x60,0x4b,0xc3,0xad, +0xd2,0x5a,0x00,0x08,0x64,0x4b,0xc2,0xad,0x00,0xc0,0x02,0x3c,0x00,0xb2,0x42,0x34, +0x1c,0x1c,0x03,0x3c,0x68,0x4b,0xc2,0xad,0x07,0x07,0x63,0x34,0x00,0x04,0x02,0x24, +0x60,0x4b,0xc3,0xad,0xd2,0x5a,0x00,0x08,0x64,0x4b,0xc2,0xad,0x25,0xb0,0x02,0x3c, +0x4d,0x00,0x44,0x34,0xff,0x00,0x03,0x3c,0xec,0x02,0x42,0x34,0x00,0x00,0x43,0xac, +0x00,0x00,0x80,0xa0,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x44,0x6c,0x63,0x24,0x18,0x03,0x42,0x34,0x00,0x00,0x43,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7f,0x00,0x02,0x3c,0xfd,0xbf,0x45,0x34, +0x80,0x04,0x03,0x3c,0x25,0x28,0xa3,0x00,0x00,0x08,0x04,0x3c,0x02,0x80,0x02,0x3c, +0x68,0x15,0x42,0x24,0x25,0x28,0xa4,0x00,0x41,0xb0,0x03,0x3c,0x00,0x00,0x65,0xac, +0x04,0x4b,0x45,0xac,0xfc,0x4a,0x45,0xac,0x08,0x00,0x63,0x34,0x86,0x00,0x05,0x24, +0x00,0x00,0x65,0xa4,0x08,0x4b,0x45,0xa4,0x00,0x4b,0x40,0xac,0x0a,0x4b,0x40,0xa4, +0x0c,0x4b,0x45,0xa4,0x00,0x60,0x01,0x40,0x01,0x00,0x21,0x34,0x00,0x60,0x81,0x40, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x30,0x5b,0x00,0x08,0x00,0x00,0x00,0x00, +0x42,0xb0,0x02,0x3c,0xa0,0xff,0x03,0x24,0x01,0x00,0x42,0x34,0xe8,0xff,0xbd,0x27, +0x21,0x20,0x00,0x00,0x01,0x00,0x05,0x24,0x00,0x01,0x06,0x24,0x00,0x00,0x43,0xa0, +0x10,0x00,0xbf,0xaf,0x51,0x0e,0x00,0x0c,0x00,0x00,0x00,0x00,0x10,0x00,0xbf,0x8f, +0x03,0x00,0x04,0x24,0x01,0x00,0x05,0x24,0x40,0x1f,0x06,0x24,0x51,0x0e,0x00,0x08, +0x18,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x02,0x80,0x10,0x3c, +0x68,0x15,0x10,0x26,0x76,0x4b,0x00,0xa2,0x14,0x00,0xb1,0xaf,0x18,0x00,0xbf,0xaf, +0x5e,0x5e,0x00,0x0c,0x21,0x88,0x00,0x02,0x48,0x01,0x02,0x24,0xec,0x63,0x02,0xae, +0xe8,0x63,0x02,0xae,0x21,0x10,0x00,0x02,0x1f,0x00,0x03,0x24,0xff,0xff,0x63,0x24, +0xd0,0x4c,0x40,0xa4,0xd2,0x4c,0x40,0xa4,0xd4,0x4c,0x40,0xa4,0xd6,0x4c,0x40,0xa4, +0xd8,0x4c,0x40,0xa4,0xda,0x4c,0x40,0xa4,0xdc,0x4c,0x40,0xa4,0xde,0x4c,0x40,0xa4, +0xe0,0x4c,0x40,0xa4,0xf5,0xff,0x61,0x04,0x24,0x00,0x42,0x24,0x25,0xb0,0x02,0x3c, +0x10,0x00,0x03,0x24,0xb0,0x03,0x42,0x34,0x02,0x80,0x04,0x3c,0x8c,0x58,0x84,0x24, +0x00,0x00,0x43,0xac,0x21,0x28,0x00,0x00,0x58,0x45,0x00,0x0c,0x04,0x00,0x06,0x24, +0x2c,0x5f,0x00,0x0c,0x00,0x00,0x00,0x00,0xb4,0x5f,0x00,0x0c,0xec,0x65,0x20,0xae, +0xea,0x60,0x00,0x0c,0x00,0x00,0x00,0x00,0x0a,0x59,0x00,0x0c,0x00,0x00,0x00,0x00, +0x02,0x80,0x03,0x3c,0xee,0x7d,0x64,0x90,0x92,0x00,0x02,0x24,0x03,0x00,0x82,0x10, +0x00,0x00,0x00,0x00,0x49,0x61,0x00,0x0c,0x00,0x00,0x00,0x00,0x2f,0x61,0x00,0x0c, +0x00,0x00,0x00,0x00,0xce,0x5f,0x00,0x0c,0x00,0x00,0x00,0x00,0xb7,0x61,0x00,0x0c, +0x00,0x00,0x00,0x00,0x44,0x64,0x20,0xa6,0x9d,0x61,0x00,0x0c,0x46,0x64,0x20,0xa6, +0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f,0x10,0x00,0xb0,0x8f,0x02,0x80,0x04,0x3c, +0x02,0x80,0x05,0x3c,0x58,0x7b,0x82,0x24,0x60,0x7b,0xa3,0x24,0x20,0x00,0xbd,0x27, +0x04,0x00,0x42,0xac,0x58,0x7b,0x82,0xac,0x60,0x7b,0xa3,0xac,0x08,0x00,0xe0,0x03, +0x04,0x00,0x63,0xac,0xe8,0xff,0xbd,0x27,0x10,0x00,0xb0,0xaf,0x01,0x80,0x02,0x3c, +0x25,0xb0,0x10,0x3c,0x18,0x03,0x03,0x36,0x2c,0x6e,0x42,0x24,0x00,0x00,0x62,0xac, +0x14,0x00,0xbf,0xaf,0x98,0x5a,0x00,0x0c,0x00,0x00,0x00,0x00,0x12,0x5c,0x00,0x0c, +0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x24,0x02,0x80,0x02,0x3c,0x3a,0x5e,0x00,0x0c, +0xe7,0x60,0x43,0xa0,0x09,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x41,0x00,0x0c, +0x00,0x00,0x00,0x00,0x43,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x44,0x00,0x03,0x36, +0x00,0x00,0x62,0x94,0x00,0x00,0x00,0x00,0x40,0x00,0x42,0x34,0x00,0x00,0x62,0xa4, +0x11,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x32,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00, +0x06,0x5e,0x00,0x0c,0x00,0x00,0x00,0x00,0xcb,0x5d,0x00,0x0c,0x00,0x00,0x00,0x00, +0x00,0x80,0x04,0x3c,0x14,0x29,0x84,0x24,0x23,0x5e,0x00,0x0c,0x01,0x00,0x05,0x24, +0x01,0x80,0x04,0x3c,0x0c,0x1d,0x84,0x24,0x23,0x5e,0x00,0x0c,0x02,0x00,0x05,0x24, +0x34,0x4f,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x3c,0x88,0x3a,0x84,0x24, +0x23,0x5e,0x00,0x0c,0x03,0x00,0x05,0x24,0x02,0x80,0x02,0x3c,0xf8,0x7d,0x43,0x90, +0x43,0x00,0x04,0x36,0x29,0x00,0x60,0x10,0xd8,0x00,0x10,0x36,0x07,0x00,0x02,0x24, +0x2b,0x00,0x62,0x10,0x25,0xb0,0x04,0x3c,0x10,0x02,0x86,0x34,0x43,0x00,0x85,0x34, +0x03,0x00,0x02,0x24,0x10,0x00,0x03,0x24,0x00,0x00,0xa2,0xa0,0xd8,0x00,0x84,0x34, +0x00,0x00,0xc3,0xa0,0x00,0x00,0x82,0x90,0x80,0xff,0x03,0x24,0x42,0xb0,0x05,0x3c, +0x25,0x10,0x43,0x00,0x00,0x00,0x82,0xa0,0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34, +0x00,0x00,0x82,0x94,0x00,0x00,0x00,0x00,0xc0,0x00,0x42,0x34,0x00,0x00,0x82,0xa4, +0x00,0x00,0xa3,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x63,0x34,0x00,0x00,0xa3,0xa0, +0x18,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24, +0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00,0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00, +0x30,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00,0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f, +0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x18,0x00,0xbd,0x27,0x00,0x00,0x80,0xa0, +0x00,0x00,0x03,0x92,0x80,0xff,0x02,0x24,0x25,0x18,0x62,0x00,0x00,0x00,0x03,0xa2, +0x25,0xb0,0x04,0x3c,0x44,0x00,0x84,0x34,0x00,0x00,0x82,0x94,0x42,0xb0,0x05,0x3c, +0xc0,0x00,0x42,0x34,0x00,0x00,0x82,0xa4,0x00,0x00,0xa3,0x90,0x00,0x00,0x00,0x00, +0x01,0x00,0x63,0x34,0x00,0x00,0xa3,0xa0,0x18,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00, +0x02,0x80,0x04,0x3c,0x08,0x00,0x84,0x24,0x21,0x28,0x00,0x00,0x21,0x30,0x00,0x00, +0xfe,0x1f,0x00,0x0c,0x21,0x38,0x00,0x00,0x30,0x5b,0x00,0x0c,0x00,0x00,0x00,0x00, +0x14,0x00,0xbf,0x8f,0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03, +0x18,0x00,0xbd,0x27,0x21,0x20,0x00,0x00,0x20,0xb0,0x06,0x3c,0xff,0xff,0x05,0x34, +0x21,0x18,0x86,0x00,0x04,0x00,0x84,0x24,0x2a,0x10,0xa4,0x00,0x00,0x00,0x60,0xac, +0xfb,0xff,0x40,0x10,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0xb8,0xff,0xbd,0x27,0x25,0xb0,0x04,0x3c,0x44,0x00,0xbf,0xaf,0x40,0x00,0xbe,0xaf, +0x3c,0x00,0xb7,0xaf,0x38,0x00,0xb6,0xaf,0x34,0x00,0xb5,0xaf,0x30,0x00,0xb4,0xaf, +0x2c,0x00,0xb3,0xaf,0x28,0x00,0xb2,0xaf,0x24,0x00,0xb1,0xaf,0x20,0x00,0xb0,0xaf, +0x0a,0x00,0x83,0x34,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00,0x20,0x00,0x42,0x30, +0x0c,0x00,0x40,0x10,0x4c,0x87,0x02,0x3c,0x00,0x00,0x62,0x90,0x00,0x00,0x00,0x00, +0x10,0x00,0x42,0x30,0x66,0x01,0x40,0x10,0x4c,0x87,0x02,0x3c,0x54,0x00,0x83,0x34, +0x50,0x00,0x82,0x34,0x00,0x00,0x45,0xac,0x00,0x00,0x65,0xa4,0x36,0x5c,0x00,0x08, +0x02,0x80,0x03,0x3c,0x54,0x00,0x85,0x34,0x00,0xe0,0x42,0x34,0x50,0x00,0x84,0x34, +0x12,0x01,0x03,0x24,0x00,0x00,0x82,0xac,0x00,0x00,0xa3,0xac,0x02,0x80,0x03,0x3c, +0x68,0x15,0x62,0x24,0xd5,0x4a,0x43,0x90,0xda,0x4a,0x45,0x94,0x25,0xb0,0x1e,0x3c, +0x1c,0x00,0xa3,0xa3,0x60,0x4b,0x43,0x8c,0x58,0x00,0xc6,0x37,0xff,0xff,0x04,0x24, +0x10,0x00,0xa3,0xaf,0x64,0x4b,0x43,0x8c,0x5c,0x00,0xc7,0x37,0x60,0x00,0xc8,0x37, +0x14,0x00,0xa3,0xaf,0x68,0x4b,0x42,0x8c,0x64,0x00,0xc9,0x37,0x8a,0x00,0xca,0x37, +0x18,0x00,0xa2,0xaf,0x24,0x10,0x02,0x3c,0x21,0x28,0xa2,0x00,0x4c,0x81,0x02,0x3c, +0x00,0xe0,0x42,0x34,0x00,0x00,0xc2,0xac,0x96,0x01,0x03,0x24,0x28,0x28,0x02,0x24, +0x00,0x00,0xe3,0xac,0x89,0x00,0xcb,0x37,0x00,0x00,0x04,0xad,0x8c,0x00,0xcc,0x37, +0x00,0x00,0x24,0xad,0x09,0x00,0x03,0x24,0x00,0x00,0x42,0xa5,0x10,0x10,0x02,0x24, +0x00,0x00,0x63,0xa1,0x8e,0x00,0xcd,0x37,0x00,0x00,0x82,0xa5,0x0a,0x0a,0x03,0x24, +0x13,0x00,0x02,0x24,0x90,0x00,0xce,0x37,0x00,0x00,0xa3,0xa5,0x00,0x00,0xc2,0xa1, +0x25,0xb0,0x02,0x3c,0x40,0x00,0x03,0x24,0x91,0x00,0x42,0x34,0x00,0x00,0x43,0xa0, +0x25,0xb0,0x03,0x3c,0x3a,0x01,0x02,0x24,0x92,0x00,0x63,0x34,0x00,0x00,0x62,0xa4, +0xb5,0x00,0xd1,0x37,0x21,0x00,0x03,0x24,0x00,0x00,0x23,0xa2,0x10,0x00,0xa2,0x8f, +0xa0,0x00,0xd2,0x37,0xa4,0x00,0xd3,0x37,0x00,0x00,0x42,0xae,0x14,0x00,0xa3,0x8f, +0xa8,0x00,0xd4,0x37,0xac,0x00,0xd5,0x37,0x00,0x00,0x63,0xae,0x18,0x00,0xa2,0x8f, +0x25,0xb0,0x03,0x3c,0xb0,0x00,0x63,0x34,0x00,0x00,0x82,0xae,0x21,0x10,0x02,0x3c, +0xff,0x77,0x42,0x34,0x00,0x00,0xa2,0xae,0x25,0xb0,0x02,0x3c,0xd8,0x00,0x42,0x34, +0x00,0x00,0x65,0xac,0x00,0x00,0x40,0xa0,0x1c,0x00,0xa2,0x93,0x25,0xb0,0x03,0x3c, +0xb4,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,0x25,0xb0,0x03,0x3c,0x04,0x00,0x02,0x24, +0xb6,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,0x25,0xb0,0x03,0x3c,0x0f,0x00,0x02,0x24, +0xba,0x00,0x63,0x34,0xb9,0x00,0xdf,0x37,0x00,0x00,0xe4,0xa3,0x00,0x00,0x62,0xa4, +0x25,0xb0,0x02,0x3c,0x1a,0x01,0x42,0x34,0x16,0x01,0xd0,0x37,0x18,0x01,0xcf,0x37, +0x00,0x00,0x00,0xa6,0x25,0xb0,0x03,0x3c,0x00,0x00,0xe0,0xa5,0x00,0x00,0x40,0xa4, +0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34,0xdc,0x00,0x63,0x34,0x00,0x00,0x62,0xac, +0x2f,0x00,0x03,0x3c,0x25,0xb0,0x02,0x3c,0x32,0x32,0x63,0x34,0xd0,0x01,0x42,0x34, +0x00,0x00,0x43,0xac,0x5e,0x00,0x02,0x3c,0x25,0xb0,0x03,0x3c,0x32,0x43,0x42,0x34, +0xd4,0x01,0x63,0x34,0x00,0x00,0x62,0xac,0x08,0x00,0x03,0x3c,0x25,0xb0,0x02,0x3c, +0x30,0xa5,0x63,0x34,0xd8,0x01,0x42,0x34,0x00,0x00,0x43,0xac,0xdc,0x01,0xc4,0x37, +0x02,0x80,0x03,0x3c,0x49,0xa5,0x02,0x34,0xee,0x7d,0x6d,0x90,0x00,0x00,0x82,0xac, +0xc2,0x00,0x02,0x3c,0x1a,0x06,0x03,0x24,0x51,0x10,0x42,0x34,0xe0,0x01,0xc5,0x37, +0xf4,0x01,0xc6,0x37,0xf8,0x01,0xc7,0x37,0x07,0x07,0x04,0x24,0x00,0x00,0xa3,0xa4, +0x00,0x02,0xc8,0x37,0x00,0x00,0xc4,0xa4,0x26,0x00,0x03,0x24,0x00,0x00,0xe2,0xac, +0x03,0x02,0xc9,0x37,0x04,0x00,0x02,0x24,0x00,0x00,0x03,0xa5,0x36,0x02,0xca,0x37, +0x00,0x00,0x22,0xa1,0xc0,0x01,0x03,0x24,0x0c,0x00,0x02,0x24,0x34,0x02,0xcb,0x37, +0x00,0x00,0x42,0xa1,0x37,0x02,0xcc,0x37,0x00,0x00,0x63,0xa5,0x03,0x00,0x02,0x24, +0x22,0x00,0x03,0x24,0x00,0x00,0x82,0xa1,0xd6,0x00,0xa3,0x11,0x1b,0x1b,0x02,0x3c, +0x13,0x13,0x02,0x3c,0x13,0x13,0x42,0x34,0x60,0x01,0xc3,0x37,0x64,0x01,0xc4,0x37, +0x68,0x01,0xc5,0x37,0x7c,0x01,0xca,0x37,0x6c,0x01,0xc6,0x37,0x70,0x01,0xc7,0x37, +0x74,0x01,0xc8,0x37,0x78,0x01,0xc9,0x37,0x00,0x00,0x62,0xac,0x00,0x00,0x82,0xac, +0x02,0x80,0x03,0x3c,0x00,0x00,0xa2,0xac,0x00,0x00,0xc2,0xac,0x00,0x00,0xe2,0xac, +0x00,0x00,0x02,0xad,0x00,0x00,0x22,0xad,0x00,0x00,0x42,0xad,0xee,0x7d,0x65,0x90, +0x25,0xb0,0x0c,0x3c,0x01,0x70,0x03,0x3c,0x80,0x01,0x82,0x35,0x08,0x5f,0x63,0x34, +0x22,0x00,0x04,0x24,0x00,0x00,0x43,0xac,0xb5,0x00,0xa4,0x10,0x0f,0x1f,0x02,0x3c, +0x92,0x00,0x02,0x24,0xb2,0x00,0xa2,0x10,0x0f,0x1f,0x02,0x3c,0x0f,0x10,0x02,0x3c, +0x00,0xf0,0x51,0x34,0xf7,0x01,0x92,0x35,0x15,0xf0,0x4d,0x34,0x77,0x00,0x0e,0x24, +0x84,0x01,0x87,0x35,0x88,0x01,0x88,0x35,0x10,0xf0,0x44,0x34,0x8c,0x01,0x85,0x35, +0x05,0xf0,0x42,0x34,0x00,0x00,0xed,0xac,0x90,0x01,0x83,0x35,0x00,0x00,0x04,0xad, +0x94,0x01,0x86,0x35,0x00,0x00,0xa2,0xac,0xf5,0x0f,0x02,0x24,0x00,0x00,0x71,0xac, +0x25,0xb0,0x05,0x3c,0x00,0x00,0xc2,0xac,0x98,0x01,0x89,0x35,0x9c,0x01,0x8a,0x35, +0xf0,0x0f,0x03,0x24,0x0d,0x00,0x02,0x24,0x00,0x00,0x23,0xad,0xa0,0x01,0x8b,0x35, +0x00,0x00,0x42,0xad,0xa7,0x01,0xb7,0x34,0xf6,0x01,0x8c,0x35,0xff,0xff,0x02,0x24, +0x00,0x00,0x6d,0xad,0x00,0x00,0x8e,0xa1,0x00,0x00,0x4e,0xa2,0x00,0x00,0xe2,0xa2, +0x25,0xb0,0x02,0x3c,0xa8,0x01,0xb6,0x34,0xff,0xff,0x09,0x24,0xac,0x01,0x42,0x34, +0x00,0x00,0xc9,0xae,0x03,0x04,0x04,0x3c,0x00,0x00,0x49,0xac,0x07,0x08,0x03,0x3c, +0x25,0xb0,0x02,0x3c,0x01,0x02,0x84,0x34,0x05,0x06,0x63,0x34,0xb4,0x01,0xb1,0x34, +0xb8,0x01,0xb2,0x34,0xbc,0x01,0xb3,0x34,0xb0,0x01,0x42,0x34,0x00,0x00,0x44,0xac, +0x00,0x00,0x23,0xae,0x25,0xb0,0x02,0x3c,0x00,0x00,0x44,0xae,0x00,0x00,0x63,0xae, +0x25,0xb0,0x03,0x3c,0x0c,0x00,0x06,0x24,0xc0,0x01,0xb4,0x34,0xc1,0x01,0xb5,0x34, +0x0d,0x00,0x08,0x24,0xc2,0x01,0x63,0x34,0xc3,0x01,0x42,0x34,0x00,0x00,0x86,0xa2, +0xc4,0x01,0xab,0x34,0x00,0x00,0xa6,0xa2,0xc5,0x01,0xac,0x34,0x00,0x00,0x66,0xa0, +0x0e,0x00,0x07,0x24,0x00,0x00,0x48,0xa0,0xc6,0x01,0xaa,0x34,0xc7,0x01,0xad,0x34, +0x0f,0x00,0x02,0x24,0x00,0x00,0x68,0xa1,0x00,0x00,0x87,0xa1,0x00,0x00,0x47,0xa1, +0x00,0x00,0xa2,0xa1,0x57,0x01,0x02,0x3c,0x48,0x00,0xbf,0x34,0x46,0x00,0xae,0x34, +0x0e,0xe2,0x42,0x34,0x00,0x00,0xc0,0xa5,0x4c,0x00,0xbe,0x34,0x00,0x00,0xe2,0xaf, +0x4d,0x00,0xb9,0x34,0x80,0xff,0x02,0x24,0x00,0x00,0xc0,0xa3,0x00,0x00,0x22,0xa3, +0x25,0xb0,0x02,0x3c,0xbc,0x00,0x03,0x24,0x40,0x00,0x42,0x34,0x00,0x00,0x43,0xa4, +0x25,0xb0,0x03,0x3c,0x64,0x03,0xb8,0x34,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34, +0x00,0x00,0x00,0xa3,0xd8,0x00,0xa7,0x34,0x00,0x00,0x62,0xa4,0x00,0x00,0xe3,0x90, +0x80,0xff,0x02,0x24,0x2a,0xb0,0x04,0x3c,0x25,0x18,0x62,0x00,0x00,0x00,0xe3,0xa0, +0x26,0xb0,0x06,0x3c,0x30,0x00,0x89,0x34,0x20,0x20,0x02,0x24,0x38,0x00,0x84,0x34, +0x40,0x00,0x03,0x24,0x00,0x00,0x82,0xa4,0x79,0x00,0xc8,0x34,0x00,0x00,0x23,0xa1, +0x94,0x00,0xaa,0x34,0x16,0x00,0x02,0x24,0x64,0x00,0x03,0x24,0x00,0x00,0x02,0xa1, +0x7c,0x00,0xd2,0x34,0x00,0x00,0x43,0xa5,0x98,0x00,0xab,0x34,0x7a,0x00,0xc6,0x34, +0x22,0x00,0x02,0x24,0x04,0x00,0x03,0x24,0x00,0x00,0x62,0xa5,0x9c,0x00,0xac,0x34, +0x00,0x00,0xc3,0xa0,0x20,0x0c,0x02,0x24,0x0a,0x00,0x03,0x24,0x00,0x00,0x42,0xa6, +0x9a,0x00,0xad,0x34,0x00,0x00,0x83,0xa1,0x96,0x00,0xae,0x34,0xff,0x03,0x02,0x24, +0x02,0x00,0x03,0x24,0x00,0x00,0xa2,0xa5,0x00,0x00,0xc3,0xa5,0x25,0xb0,0x03,0x3c, +0x20,0x00,0x02,0x24,0xb7,0x00,0x63,0x34,0x00,0x00,0x62,0xa0,0x89,0x00,0xb1,0x34, +0x09,0x00,0x03,0x24,0x00,0x00,0x23,0xa2,0x44,0x00,0xa5,0x34,0x00,0x00,0xa3,0x94, +0x02,0x80,0x02,0x3c,0x68,0x15,0x46,0x24,0xff,0xfd,0x02,0x24,0x24,0x18,0x62,0x00, +0x00,0x00,0xa3,0xa4,0x00,0x00,0xa2,0x94,0xd5,0x4a,0xc4,0x90,0x04,0x02,0x03,0x24, +0x00,0x02,0x42,0x34,0x00,0x00,0xa2,0xa4,0x29,0xb0,0x02,0x3c,0x40,0x00,0x42,0x34, +0x00,0x00,0x43,0xa4,0x3a,0x0c,0x00,0x0c,0x00,0x00,0x00,0x00,0x44,0x00,0xbf,0x8f, +0x40,0x00,0xbe,0x8f,0x3c,0x00,0xb7,0x8f,0x38,0x00,0xb6,0x8f,0x34,0x00,0xb5,0x8f, +0x30,0x00,0xb4,0x8f,0x2c,0x00,0xb3,0x8f,0x28,0x00,0xb2,0x8f,0x24,0x00,0xb1,0x8f, +0x20,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x48,0x00,0xbd,0x27, +0x54,0x00,0x85,0x34,0x00,0xe0,0x42,0x34,0x50,0x00,0x84,0x34,0x12,0x01,0x03,0x24, +0x00,0x00,0x82,0xac,0x00,0x00,0xa3,0xa4,0x36,0x5c,0x00,0x08,0x02,0x80,0x03,0x3c, +0x00,0xf0,0x51,0x34,0xf7,0x01,0x92,0x35,0x15,0xf0,0x4d,0x34,0xea,0x5c,0x00,0x08, +0xff,0xff,0x0e,0x24,0xc8,0x5c,0x00,0x08,0x1b,0x1b,0x42,0x34,0x25,0xb0,0x03,0x3c, +0x25,0xb0,0x08,0x3c,0xfc,0x37,0x02,0x24,0x40,0x00,0x63,0x34,0x02,0x80,0x04,0x3c, +0x00,0x00,0x62,0xa4,0x94,0x8d,0x84,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35, +0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00, +0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24, +0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x25,0xb0,0x08,0x3c, +0x02,0x80,0x02,0x3c,0x8c,0x87,0x44,0x24,0xff,0x00,0x07,0x24,0xb0,0x03,0x06,0x35, +0x00,0x00,0x83,0x94,0x00,0x00,0x00,0x00,0xff,0x00,0x62,0x30,0x21,0x18,0x68,0x00, +0x0a,0x00,0x47,0x10,0xff,0x00,0x65,0x30,0x04,0x00,0x82,0x8c,0x00,0x00,0x00,0x00, +0x00,0x00,0x62,0xac,0x00,0x00,0xc3,0xac,0x04,0x00,0x82,0x8c,0x08,0x00,0x84,0x24, +0x00,0x00,0xc2,0xac,0xf2,0xff,0xa7,0x14,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x00,0x00,0x00,0x00,0x01,0x80,0x02,0x3c,0x02,0x80,0x05,0x3c,0x04,0x78,0x42,0x24, +0x02,0x80,0x03,0x3c,0x2c,0x7e,0xa2,0xac,0x00,0x80,0x02,0x3c,0xcc,0x7e,0x60,0xac, +0x2c,0x7e,0xa4,0x24,0x02,0x80,0x03,0x3c,0xc8,0x06,0x42,0x24,0xd0,0x7e,0x60,0xa4, +0x08,0x00,0x82,0xac,0x02,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0xd2,0x7e,0x60,0xa4, +0x02,0x80,0x06,0x3c,0xa4,0x0a,0x42,0x24,0x00,0x80,0x03,0x3c,0xd4,0x7e,0xc7,0x24, +0x14,0x00,0x82,0xac,0x54,0x08,0x63,0x24,0x02,0x80,0x02,0x3c,0xd4,0x7e,0xc0,0xac, +0x10,0x00,0x83,0xac,0x04,0x00,0xe0,0xac,0xdc,0x7e,0x40,0xa0,0x00,0x80,0x02,0x3c, +0x1c,0x1c,0x42,0x24,0x3c,0x00,0x82,0xac,0x00,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c, +0x38,0x0d,0x63,0x24,0xc8,0x10,0x42,0x24,0x1c,0x00,0x83,0xac,0x20,0x00,0x82,0xac, +0x00,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0x54,0x14,0x63,0x24,0x38,0x18,0x42,0x24, +0x24,0x00,0x83,0xac,0x28,0x00,0x82,0xac,0x00,0x80,0x03,0x3c,0x01,0x80,0x02,0x3c, +0x10,0x22,0x63,0x24,0xd0,0x04,0x42,0x24,0x2c,0x00,0x83,0xac,0x30,0x00,0x82,0xac, +0x00,0x80,0x03,0x3c,0x00,0x80,0x02,0x3c,0x78,0x1c,0x63,0x24,0x00,0x03,0x42,0x24, +0x38,0x00,0x83,0xac,0x08,0x00,0xe0,0x03,0x4c,0x00,0x82,0xac,0x25,0xb0,0x02,0x3c, +0x08,0x00,0x42,0x34,0x00,0x00,0x43,0x8c,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x02,0x80,0x0e,0x3c,0x02,0x80,0x08,0x3c,0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c, +0xf8,0x03,0x4d,0x24,0x00,0x14,0x6c,0x24,0x01,0x00,0x07,0x24,0x00,0x00,0xcb,0x25, +0xff,0xff,0x0a,0x24,0x00,0x04,0x09,0x25,0x80,0x1a,0x07,0x00,0x21,0x10,0x6b,0x00, +0x00,0x00,0x42,0xac,0x90,0x00,0x4a,0xac,0x00,0x04,0x04,0x8d,0x01,0x00,0xe7,0x24, +0x08,0x00,0x45,0x24,0x21,0x18,0x6d,0x00,0x05,0x00,0xe6,0x28,0x04,0x00,0x82,0xac, +0x00,0x00,0x44,0xac,0x04,0x00,0x49,0xac,0x00,0x04,0x02,0xad,0x8c,0x00,0x40,0xac, +0x6c,0x00,0xa3,0xac,0xf0,0xff,0xc0,0x14,0x68,0x00,0xac,0xac,0x08,0x00,0xe0,0x03, +0x00,0x00,0xc9,0xad,0x05,0x00,0xa2,0x2c,0x13,0x00,0x40,0x10,0xff,0xff,0x07,0x24, +0x02,0x80,0x02,0x3c,0x80,0x1a,0x05,0x00,0x00,0x00,0x42,0x24,0x0e,0x00,0xa0,0x10, +0x21,0x30,0x62,0x00,0x90,0x00,0xc3,0x8c,0xff,0xff,0x02,0x24,0x0a,0x00,0x62,0x14, +0x00,0x00,0x00,0x00,0x8c,0x00,0xc2,0x8c,0x00,0x00,0x00,0x00,0x06,0x00,0x40,0x14, +0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x24,0x88,0x00,0xc4,0xac,0x8c,0x00,0xc2,0xac, +0x90,0x00,0xc5,0xac,0x21,0x38,0xa0,0x00,0x08,0x00,0xe0,0x03,0x21,0x10,0xe0,0x00, +0x25,0xb0,0x04,0x3c,0x01,0x80,0x02,0x3c,0x18,0x03,0x85,0x34,0xe8,0x78,0x42,0x24, +0xe0,0xff,0xbd,0x27,0x00,0x00,0xa2,0xac,0x1b,0x00,0x86,0x34,0xdb,0xff,0x03,0x24, +0x27,0x00,0x84,0x34,0x07,0x00,0x02,0x24,0x14,0x00,0xb1,0xaf,0x10,0x00,0xb0,0xaf, +0x00,0x00,0x83,0xa0,0x18,0x00,0xbf,0xaf,0x00,0x00,0xc2,0xa0,0x01,0x00,0x11,0x24, +0x21,0x80,0x00,0x00,0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x02,0x01,0x00,0x02,0x26, +0xff,0x00,0x50,0x30,0x2b,0x18,0x30,0x02,0xfa,0xff,0x60,0x10,0x00,0x00,0x00,0x00, +0x2a,0x42,0x00,0x0c,0x21,0x20,0x00,0x00,0x18,0x00,0xbf,0x8f,0x14,0x00,0xb1,0x8f, +0x10,0x00,0xb0,0x8f,0x01,0x00,0x02,0x24,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x00,0x00,0x00,0x00, +0x02,0x80,0x02,0x3c,0x68,0x15,0x42,0x24,0x40,0x10,0x03,0x3c,0xff,0xff,0x44,0x30, +0x25,0xc0,0x83,0x00,0xf4,0x64,0x58,0xac,0x40,0x00,0x18,0x27,0x00,0x65,0x58,0xac, +0x40,0x00,0x18,0x27,0x0c,0x65,0x58,0xac,0x40,0x00,0x18,0x27,0x18,0x65,0x58,0xac, +0x40,0x00,0x18,0x27,0xe0,0xff,0xbd,0x27,0x24,0x65,0x58,0xac,0x40,0x00,0x18,0x27, +0x1c,0x00,0xb7,0xaf,0x18,0x00,0xb6,0xaf,0x14,0x00,0xb5,0xaf,0x10,0x00,0xb4,0xaf, +0x0c,0x00,0xb3,0xaf,0x08,0x00,0xb2,0xaf,0x04,0x00,0xb1,0xaf,0x00,0x00,0xb0,0xaf, +0x30,0x65,0x58,0xac,0x00,0x65,0x45,0x8c,0x0c,0x65,0x46,0x8c,0x18,0x65,0x47,0x8c, +0x24,0x65,0x48,0x8c,0x30,0x65,0x49,0x8c,0x40,0x00,0x18,0x27,0x3c,0x65,0x58,0xac, +0x21,0x50,0x00,0x03,0x25,0x20,0x83,0x00,0x40,0x00,0x18,0x27,0x20,0x10,0x03,0x3c, +0xf0,0x64,0x44,0xac,0xfc,0x64,0x45,0xac,0x08,0x65,0x46,0xac,0x14,0x65,0x47,0xac, +0x20,0x65,0x48,0xac,0x2c,0x65,0x49,0xac,0x25,0xb0,0x06,0x3c,0x88,0x64,0x43,0xac, +0x84,0x64,0x43,0xac,0x94,0x64,0x43,0xac,0x90,0x64,0x43,0xac,0xa0,0x64,0x43,0xac, +0x9c,0x64,0x43,0xac,0xac,0x64,0x43,0xac,0xa8,0x64,0x43,0xac,0x48,0x65,0x58,0xac, +0x00,0x02,0x18,0x27,0x38,0x65,0x4a,0xac,0x60,0x65,0x58,0xac,0xb8,0x64,0x43,0xac, +0xb4,0x64,0x43,0xac,0xc4,0x64,0x43,0xac,0xc0,0x64,0x43,0xac,0xd0,0x64,0x43,0xac, +0xcc,0x64,0x43,0xac,0xac,0x00,0xc4,0x34,0xb0,0x00,0xc5,0x34,0x00,0x00,0x92,0x8c, +0x48,0x65,0x50,0x8c,0x00,0x00,0xb3,0x8c,0x21,0x10,0x04,0x3c,0x23,0x10,0x09,0x3c, +0x22,0x10,0x0c,0x3c,0x02,0x80,0x14,0x3c,0x02,0x80,0x15,0x3c,0x02,0x80,0x16,0x3c, +0x02,0x80,0x17,0x3c,0x24,0x10,0x05,0x3c,0x21,0x88,0x00,0x03,0x68,0x7b,0x87,0x26, +0x00,0x04,0x18,0x27,0x70,0x7b,0xa8,0x26,0x78,0x7b,0xca,0x26,0x80,0x7b,0xeb,0x26, +0x00,0x04,0x2d,0x35,0x00,0x40,0x8e,0x34,0x00,0x80,0x8f,0x35,0x00,0x01,0xc6,0x34, +0x44,0x65,0x50,0xac,0x5c,0x65,0x51,0xac,0xc4,0x65,0x4d,0xac,0x88,0x65,0x52,0xac, +0x94,0x65,0x4e,0xac,0xb8,0x65,0x4f,0xac,0xac,0x65,0x53,0xac,0x00,0x00,0xc5,0xac, +0xa8,0x65,0x45,0xac,0xc8,0x65,0x43,0xac,0xd4,0x65,0x58,0xac,0xdc,0x64,0x43,0xac, +0xd8,0x64,0x43,0xac,0x66,0x65,0x40,0xa4,0x65,0x65,0x40,0xa0,0x64,0x65,0x40,0xa0, +0xbc,0x65,0x49,0xac,0xc0,0x65,0x49,0xac,0x80,0x65,0x44,0xac,0x84,0x65,0x44,0xac, +0x8c,0x65,0x44,0xac,0x90,0x65,0x44,0xac,0xb0,0x65,0x4c,0xac,0xb4,0x65,0x4c,0xac, +0xa4,0x65,0x45,0xac,0xcc,0x65,0x43,0xac,0xd8,0x65,0x58,0xac,0x04,0x00,0x08,0xad, +0x68,0x7b,0x87,0xae,0x04,0x00,0x4a,0xad,0x70,0x7b,0xa8,0xae,0x04,0x00,0x6b,0xad, +0x78,0x7b,0xca,0xae,0x80,0x7b,0xeb,0xae,0x04,0x00,0xe7,0xac,0x02,0x80,0x02,0x3c, +0x00,0x14,0x43,0x24,0x21,0x20,0xe0,0x00,0x03,0x00,0x06,0x24,0x21,0x10,0x80,0x00, +0xff,0xff,0xc6,0x24,0x08,0x00,0x78,0xac,0x00,0x00,0x63,0xac,0x10,0x00,0x60,0xac, +0x00,0x00,0x67,0xac,0x21,0x20,0x60,0x00,0x04,0x00,0x62,0xac,0x00,0x00,0x43,0xac, +0x00,0x01,0x18,0x27,0xf5,0xff,0xc1,0x04,0x18,0x00,0x63,0x24,0x02,0x80,0x02,0x3c, +0x70,0x7b,0x49,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x04,0x00,0x28,0x8d, +0x60,0x14,0x4b,0x24,0x04,0x00,0xe4,0xac,0x00,0x14,0x6a,0x24,0x01,0x00,0x07,0x24, +0x21,0x28,0x00,0x00,0x07,0x00,0x06,0x24,0x21,0x20,0xab,0x00,0x21,0x10,0xaa,0x00, +0xff,0xff,0xc6,0x24,0x68,0x00,0x58,0xac,0x70,0x00,0x47,0xac,0x18,0x00,0xa5,0x24, +0x00,0x00,0x89,0xac,0x04,0x00,0x88,0xac,0x00,0x00,0x04,0xad,0x00,0x01,0x18,0x27, +0xf5,0xff,0xc1,0x04,0x21,0x40,0x80,0x00,0x02,0x80,0x02,0x3c,0x78,0x7b,0x4a,0x24, +0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c,0x04,0x00,0x45,0x8d,0x20,0x15,0x4b,0x24, +0x04,0x00,0x24,0xad,0x02,0x00,0x07,0x24,0x00,0x14,0x69,0x24,0x21,0x20,0x00,0x00, +0x01,0x00,0x06,0x24,0x21,0x40,0x8b,0x00,0x21,0x10,0x89,0x00,0xff,0xff,0xc6,0x24, +0x28,0x01,0x58,0xac,0x30,0x01,0x47,0xac,0x18,0x00,0x84,0x24,0x00,0x00,0x0a,0xad, +0x04,0x00,0x05,0xad,0x00,0x00,0xa8,0xac,0x00,0x02,0x18,0x27,0xf5,0xff,0xc1,0x04, +0x21,0x28,0x00,0x01,0x02,0x80,0x05,0x3c,0x80,0x7b,0xa5,0x24,0x04,0x00,0xa6,0x8c, +0x1c,0x00,0xb7,0x8f,0x18,0x00,0xb6,0x8f,0x14,0x00,0xb5,0x8f,0x10,0x00,0xb4,0x8f, +0x0c,0x00,0xb3,0x8f,0x08,0x00,0xb2,0x8f,0x04,0x00,0xb1,0x8f,0x00,0x00,0xb0,0x8f, +0x02,0x80,0x07,0x3c,0x02,0x80,0x03,0x3c,0x50,0x15,0xe4,0x24,0x00,0x14,0x63,0x24, +0x03,0x00,0x02,0x24,0x20,0x00,0xbd,0x27,0x58,0x01,0x78,0xac,0x04,0x00,0x48,0xad, +0x04,0x00,0xa4,0xac,0x60,0x01,0x62,0xac,0x50,0x15,0xe5,0xac,0x04,0x00,0x86,0xac, +0x08,0x00,0xe0,0x03,0x00,0x00,0xc4,0xac,0xc8,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x02,0x80,0x03,0x3c,0x28,0x00,0xb4,0xaf,0x24,0x00,0xb3,0xaf,0x70,0x9e,0x74,0x24, +0xe4,0x9e,0x53,0x24,0x02,0x80,0x03,0x3c,0xff,0xff,0x02,0x3c,0x2c,0x00,0xb5,0xaf, +0x20,0x00,0xb2,0xaf,0x1c,0x00,0xb1,0xaf,0x18,0x00,0xb0,0xaf,0x30,0x00,0xbf,0xaf, +0xff,0x1f,0x55,0x34,0x68,0x15,0x70,0x24,0x21,0x88,0x00,0x00,0x02,0x80,0x12,0x3c, +0xaa,0x4f,0x00,0x0c,0x21,0x20,0x20,0x02,0x84,0x51,0x02,0x8e,0x6c,0x00,0x86,0x8e, +0x50,0x9e,0x43,0x26,0x6c,0x00,0x64,0x8e,0x1b,0x00,0x65,0x90,0x24,0x10,0x55,0x00, +0x00,0x20,0x42,0x34,0xff,0xf1,0x03,0x24,0x21,0x20,0x86,0x00,0x24,0x10,0x43,0x00, +0x00,0x29,0x05,0x00,0x42,0x20,0x04,0x00,0x00,0x02,0x42,0x34,0x50,0x51,0x04,0xae, +0x74,0x51,0x05,0xae,0x84,0x51,0x02,0xae,0x78,0x51,0x05,0xae,0x21,0x30,0x00,0x00, +0x21,0x10,0x06,0x02,0x01,0x00,0xc6,0x24,0x1d,0x00,0xc3,0x28,0xa5,0x51,0x40,0xa0, +0x88,0x51,0x40,0xa0,0xfa,0xff,0x60,0x14,0xc2,0x51,0x40,0xa0,0x01,0x00,0x31,0x26, +0x20,0x00,0x22,0x2a,0xe0,0x51,0x00,0xae,0xe1,0xff,0x40,0x14,0x94,0x00,0x10,0x26, +0x02,0x80,0x02,0x3c,0x02,0x80,0x03,0x3c,0x68,0x15,0x4b,0x24,0x02,0x80,0x02,0x3c, +0xe4,0x9e,0x6f,0x24,0x70,0x9e,0x4d,0x24,0x02,0x80,0x03,0x3c,0x02,0x80,0x02,0x3c, +0x50,0x9e,0x6e,0x24,0x30,0x9e,0x4c,0x24,0x21,0x88,0x00,0x00,0x80,0x18,0x11,0x00, +0x21,0x20,0x6d,0x00,0x21,0x10,0x6f,0x00,0x21,0x28,0x2e,0x02,0x21,0x30,0x2c,0x02, +0x00,0x00,0x88,0x8c,0x00,0x00,0xa9,0x90,0x00,0x00,0xc7,0x90,0x00,0x00,0x4a,0x8c, +0x21,0x10,0x2b,0x02,0x01,0x00,0x31,0x26,0x21,0x18,0x6b,0x00,0x1d,0x00,0x24,0x2a, +0xec,0x44,0x68,0xac,0xca,0x44,0x47,0xa0,0x60,0x45,0x6a,0xac,0xef,0xff,0x80,0x14, +0x90,0x44,0x49,0xa0,0x02,0x80,0x02,0x3c,0x68,0x15,0x4a,0x24,0x02,0x80,0x03,0x3c, +0x02,0x80,0x02,0x3c,0x0c,0x9d,0x6b,0x24,0xac,0x9b,0x4c,0x24,0x21,0x88,0x00,0x00, +0x21,0x48,0x00,0x00,0x21,0x30,0x00,0x00,0x21,0x40,0x2a,0x01,0x21,0x38,0x2b,0x01, +0x21,0x10,0xe6,0x00,0x91,0x00,0x44,0x90,0x00,0x00,0x45,0x90,0x21,0x18,0x06,0x01, +0x01,0x00,0xc6,0x24,0x05,0x00,0xc2,0x28,0xc5,0x43,0x64,0xa0,0xf8,0xff,0x40,0x14, +0x34,0x43,0x65,0xa0,0x21,0x10,0x2c,0x02,0x1d,0x00,0x44,0x90,0x00,0x00,0x45,0x90, +0x21,0x18,0x2a,0x02,0x01,0x00,0x31,0x26,0x1d,0x00,0x22,0x2a,0x73,0x44,0x64,0xa0, +0x56,0x44,0x65,0xa0,0xeb,0xff,0x40,0x14,0x05,0x00,0x29,0x25,0x52,0x00,0x02,0x24, +0x10,0x00,0xa2,0xa3,0x41,0x00,0x03,0x24,0x4d,0x00,0x02,0x24,0x02,0x80,0x07,0x3c, +0xdc,0xa4,0xe7,0x24,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3,0xe8,0x03,0x03,0x24, +0x01,0x00,0x02,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00, +0x60,0x3e,0xc6,0x24,0x0c,0x00,0xe3,0xac,0x14,0x00,0xe2,0xa0,0x88,0x0e,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x30,0x00,0xbf,0x8f,0x2c,0x00,0xb5,0x8f,0x28,0x00,0xb4,0x8f, +0x24,0x00,0xb3,0x8f,0x20,0x00,0xb2,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f, +0x08,0x00,0xe0,0x03,0x38,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c, +0x42,0x00,0x03,0x24,0x10,0x00,0xa3,0xa3,0x55,0x60,0x40,0xa0,0x4e,0x00,0x03,0x24, +0x43,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x14,0xa5,0xe7,0x24,0x11,0x00,0xa2,0xa3, +0x12,0x00,0xa3,0xa3,0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x00,0x80,0x06,0x3c, +0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0xec,0x4f,0xc6,0x24,0x0c,0x00,0xe2,0xac, +0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3, +0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27, +0x48,0xfd,0xbd,0x27,0xb4,0x02,0xb3,0xaf,0x02,0x80,0x02,0x3c,0x02,0x80,0x13,0x3c, +0xf0,0x9f,0x46,0x24,0x68,0x15,0x63,0x26,0xb0,0x02,0xb2,0xaf,0xac,0x02,0xb1,0xaf, +0xa8,0x02,0xb0,0xaf,0x03,0x40,0x60,0xa0,0x21,0x38,0xa0,0x03,0x90,0x00,0xc8,0x24, +0x00,0x00,0xc2,0x8c,0x04,0x00,0xc3,0x8c,0x08,0x00,0xc4,0x8c,0x0c,0x00,0xc5,0x8c, +0x10,0x00,0xc6,0x24,0x00,0x00,0xe2,0xac,0x04,0x00,0xe3,0xac,0x08,0x00,0xe4,0xac, +0x0c,0x00,0xe5,0xac,0xf6,0xff,0xc8,0x14,0x10,0x00,0xe7,0x24,0x00,0x00,0xc3,0x8c, +0x02,0x80,0x02,0x3c,0x84,0xa0,0x58,0x24,0x00,0x00,0xe3,0xac,0x98,0x00,0xb9,0x27, +0x00,0x01,0x12,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x09,0x00,0x04,0x93, +0x0d,0x00,0x05,0x93,0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93,0x04,0x00,0x10,0x93, +0x06,0x00,0x0c,0x93,0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93,0x0c,0x00,0x0e,0x93, +0x0e,0x00,0x06,0x93,0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93,0x0b,0x00,0x0a,0x93, +0x0f,0x00,0x0b,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x22,0x04,0x00, +0x00,0x2a,0x05,0x00,0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00,0x25,0x20,0x8f,0x00, +0x25,0x28,0xae,0x00,0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00,0x00,0x3c,0x07,0x00, +0x00,0x34,0x06,0x00,0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01,0x25,0x38,0xe4,0x00, +0x25,0x30,0xc5,0x00,0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00,0x00,0x56,0x0a,0x00, +0x00,0x5e,0x0b,0x00,0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01,0x25,0x50,0x47,0x01, +0x25,0x58,0x66,0x01,0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf,0x04,0x00,0x29,0xaf, +0x08,0x00,0x2a,0xaf,0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17,0x10,0x00,0x39,0x27, +0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93,0x02,0x00,0x04,0x93, +0x04,0x00,0x08,0x93,0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93,0x03,0x00,0x07,0x93, +0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00,0x25,0x18,0x68,0x00, +0x00,0x24,0x04,0x00,0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00,0x25,0x28,0xa3,0x00, +0x00,0x3e,0x07,0x00,0x00,0x36,0x06,0x00,0x02,0x80,0x02,0x3c,0x25,0x38,0xe4,0x00, +0x25,0x30,0xc5,0x00,0x8c,0xa1,0x58,0x24,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf, +0x00,0x01,0x12,0x27,0xa0,0x01,0xb9,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93, +0x09,0x00,0x04,0x93,0x0d,0x00,0x05,0x93,0x00,0x00,0x11,0x93,0x02,0x00,0x0d,0x93, +0x04,0x00,0x10,0x93,0x06,0x00,0x0c,0x93,0x08,0x00,0x0f,0x93,0x0a,0x00,0x07,0x93, +0x0c,0x00,0x0e,0x93,0x0e,0x00,0x06,0x93,0x03,0x00,0x08,0x93,0x07,0x00,0x09,0x93, +0x0b,0x00,0x0a,0x93,0x0f,0x00,0x0b,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00, +0x00,0x22,0x04,0x00,0x00,0x2a,0x05,0x00,0x25,0x10,0x51,0x00,0x25,0x18,0x70,0x00, +0x25,0x20,0x8f,0x00,0x25,0x28,0xae,0x00,0x00,0x6c,0x0d,0x00,0x00,0x64,0x0c,0x00, +0x00,0x3c,0x07,0x00,0x00,0x34,0x06,0x00,0x25,0x68,0xa2,0x01,0x25,0x60,0x83,0x01, +0x25,0x38,0xe4,0x00,0x25,0x30,0xc5,0x00,0x00,0x46,0x08,0x00,0x00,0x4e,0x09,0x00, +0x00,0x56,0x0a,0x00,0x00,0x5e,0x0b,0x00,0x25,0x40,0x0d,0x01,0x25,0x48,0x2c,0x01, +0x25,0x50,0x47,0x01,0x25,0x58,0x66,0x01,0x10,0x00,0x18,0x27,0x00,0x00,0x28,0xaf, +0x04,0x00,0x29,0xaf,0x08,0x00,0x2a,0xaf,0x0c,0x00,0x2b,0xaf,0xd2,0xff,0x12,0x17, +0x10,0x00,0x39,0x27,0x01,0x00,0x02,0x93,0x05,0x00,0x03,0x93,0x00,0x00,0x09,0x93, +0x02,0x00,0x04,0x93,0x04,0x00,0x08,0x93,0x06,0x00,0x05,0x93,0x07,0x00,0x06,0x93, +0x03,0x00,0x07,0x93,0x00,0x12,0x02,0x00,0x00,0x1a,0x03,0x00,0x25,0x10,0x49,0x00, +0x25,0x18,0x68,0x00,0x00,0x24,0x04,0x00,0x00,0x2c,0x05,0x00,0x25,0x20,0x82,0x00, +0x25,0x28,0xa3,0x00,0x00,0x3e,0x07,0x00,0x00,0x36,0x06,0x00,0x25,0x30,0xc5,0x00, +0x25,0x38,0xe4,0x00,0x02,0x80,0x02,0x3c,0x04,0x00,0x26,0xaf,0x00,0x00,0x27,0xaf, +0x68,0x15,0x46,0x24,0x21,0x50,0x00,0x00,0x80,0x20,0x0a,0x00,0x21,0x10,0x9d,0x00, +0x00,0x00,0x45,0x8c,0x01,0x00,0x43,0x25,0xff,0x00,0x6a,0x30,0x21,0x20,0x86,0x00, +0x25,0x00,0x42,0x2d,0xf8,0xff,0x40,0x14,0x18,0x40,0x85,0xac,0x02,0x80,0x02,0x3c, +0x68,0x15,0x4b,0x24,0x21,0x50,0x00,0x00,0xc0,0x10,0x0a,0x00,0x21,0x48,0x5d,0x00, +0x21,0x38,0x00,0x00,0x21,0x40,0x4b,0x00,0x21,0x10,0x27,0x01,0xa0,0x01,0x46,0x90, +0x98,0x00,0x45,0x90,0x01,0x00,0xe4,0x24,0x21,0x18,0x07,0x01,0xff,0x00,0x87,0x30, +0x08,0x00,0xe2,0x2c,0xb4,0x41,0x66,0xa0,0xf7,0xff,0x40,0x14,0xac,0x40,0x65,0xa0, +0x01,0x00,0x42,0x25,0xff,0x00,0x4a,0x30,0x21,0x00,0x43,0x2d,0xef,0xff,0x60,0x14, +0xc0,0x10,0x0a,0x00,0x25,0xb0,0x02,0x3c,0x0a,0x00,0x42,0x34,0x00,0x00,0x43,0x90, +0x00,0x00,0x00,0x00,0x20,0x00,0x63,0x30,0x42,0x00,0x60,0x10,0x68,0x15,0x64,0x26, +0x33,0x00,0x02,0x24,0xc1,0x42,0x62,0xa1,0x1c,0x00,0x03,0x24,0x0f,0x00,0x02,0x24, +0xbc,0x42,0x63,0xa1,0xbd,0x42,0x62,0xa1,0x68,0x15,0x65,0x26,0x08,0x40,0xa4,0x8c, +0xff,0x7f,0x08,0x3c,0xff,0xff,0x08,0x35,0xc0,0xff,0x02,0x24,0x24,0x20,0x88,0x00, +0x24,0x20,0x82,0x00,0x0c,0x00,0x84,0x34,0xff,0xc0,0x02,0x24,0x24,0x20,0x82,0x00, +0xc0,0xff,0x02,0x3c,0xff,0xff,0x42,0x34,0x00,0x18,0x84,0x34,0xbf,0xff,0x03,0x3c, +0x24,0x20,0x82,0x00,0xff,0xff,0x63,0x34,0x7f,0xff,0x02,0x3c,0x24,0x20,0x83,0x00, +0xff,0xff,0x42,0x34,0x24,0x20,0x82,0x00,0x0c,0x40,0xa6,0x8c,0x7f,0xff,0x03,0x24, +0x40,0x40,0x84,0x34,0xff,0xff,0x02,0x3c,0x24,0x20,0x83,0x00,0xff,0x7f,0x42,0x34, +0xff,0xbf,0x03,0x3c,0x10,0x40,0xa7,0x8c,0x24,0x20,0x82,0x00,0xff,0xff,0x63,0x34, +0xff,0x9f,0x02,0x3c,0x24,0x30,0xc3,0x00,0xff,0xff,0x42,0x34,0xff,0x3f,0x03,0x3c, +0x24,0x20,0x82,0x00,0xff,0xff,0x63,0x34,0x12,0x00,0x02,0x24,0xb4,0x02,0xb3,0x8f, +0xb0,0x02,0xb2,0x8f,0xac,0x02,0xb1,0x8f,0xa8,0x02,0xb0,0x8f,0x24,0x38,0xe3,0x00, +0xc7,0x42,0xa2,0xa0,0x1f,0x00,0x03,0x24,0x01,0x00,0x02,0x24,0x24,0x30,0xc8,0x00, +0xbe,0x42,0xa3,0xa0,0xc0,0x42,0xa2,0xa0,0xff,0x00,0x03,0x24,0xff,0xff,0x02,0x24, +0xb8,0x02,0xbd,0x27,0x08,0x40,0xa4,0xac,0x10,0x40,0xa7,0xac,0x0c,0x40,0xa6,0xac, +0xc2,0x42,0xa2,0xa0,0xc4,0x42,0xa3,0xa4,0xbf,0x42,0xa0,0xa0,0x08,0x00,0xe0,0x03, +0xc6,0x42,0xa0,0xa0,0x33,0x00,0x02,0x24,0xc1,0x42,0x82,0xa0,0x0d,0x00,0x03,0x24, +0x03,0x00,0x02,0x24,0xbc,0x42,0x83,0xa0,0xa8,0x60,0x00,0x08,0xbd,0x42,0x82,0xa0, +0x02,0x80,0x07,0x3c,0x68,0x15,0xe7,0x24,0xe0,0xff,0xbd,0x27,0x18,0x00,0xbf,0xaf, +0xe6,0x42,0xe0,0xa0,0xe4,0x42,0xe8,0x8c,0xff,0xef,0x02,0x3c,0xff,0xff,0x42,0x34, +0xff,0xbf,0x03,0x3c,0x00,0x40,0xe9,0x8c,0x24,0x40,0x02,0x01,0xff,0xff,0x63,0x34, +0xff,0x7f,0x02,0x3c,0x24,0x40,0x03,0x01,0xff,0xff,0x42,0x34,0xf0,0xff,0x04,0x24, +0x24,0x40,0x02,0x01,0xff,0xdf,0x02,0x3c,0x24,0x48,0x24,0x01,0xff,0xf0,0x03,0x24, +0xff,0xff,0x42,0x34,0x24,0x48,0x23,0x01,0x24,0x40,0x02,0x01,0x20,0x00,0x03,0x24, +0x0a,0x00,0x02,0x24,0xd2,0x42,0xe2,0xa0,0xd7,0x42,0xe3,0xa0,0x20,0x00,0x02,0x24, +0x00,0x01,0x03,0x24,0xc8,0x42,0xe2,0xa4,0xca,0x42,0xe3,0xa4,0x00,0x02,0x02,0x24, +0x49,0x00,0x03,0x24,0x02,0x80,0x0a,0x3c,0x00,0x40,0xe9,0xac,0xe4,0x42,0xe8,0xac, +0xf8,0xa4,0x4a,0x25,0xff,0xff,0x0c,0x34,0x3e,0x00,0x0d,0x24,0x1c,0x00,0x0e,0x24, +0x01,0x00,0x0b,0x24,0x11,0x00,0xa3,0xa3,0xcc,0x42,0xe2,0xa4,0xd0,0x07,0x03,0x24, +0x44,0x00,0x02,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa2,0xa3,0x10,0x00,0xa5,0x27, +0x47,0x00,0x02,0x24,0x21,0x20,0x40,0x01,0xa4,0x50,0xc6,0x24,0x04,0x40,0xec,0xac, +0xd0,0x42,0xed,0xa0,0xd1,0x42,0xee,0xa0,0x02,0x40,0xeb,0xa0,0x0c,0x00,0x43,0xad, +0x14,0x00,0x4b,0xa1,0xe8,0x63,0xec,0xac,0xce,0x42,0xed,0xa0,0xcf,0x42,0xee,0xa0, +0xd6,0x42,0xe0,0xa0,0xd4,0x42,0xe0,0xa0,0x12,0x00,0xa2,0xa3,0x88,0x0e,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x02,0x80,0x02,0x3c,0x50,0x00,0x03,0x24, +0x10,0x00,0xa3,0xa3,0x36,0x62,0x40,0xa0,0x41,0x00,0x03,0x24,0x52,0x00,0x02,0x24, +0x02,0x80,0x07,0x3c,0xa0,0xa5,0xe7,0x24,0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3, +0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27, +0x21,0x20,0xe0,0x00,0x74,0x67,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0, +0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xd8,0xff,0xbd,0x27, +0x18,0x00,0xb0,0xaf,0x02,0x80,0x10,0x3c,0x68,0x15,0x10,0x26,0x20,0x00,0xbf,0xaf, +0x1c,0x00,0xb1,0xaf,0x00,0x40,0x09,0x8e,0xff,0xff,0x02,0x24,0xff,0x00,0x4b,0x30, +0x0f,0xff,0x02,0x24,0x24,0x48,0x22,0x01,0xff,0xff,0x02,0x3c,0xff,0x0f,0x42,0x34, +0x24,0x48,0x22,0x01,0x01,0x00,0x07,0x3c,0x47,0x00,0x02,0x24,0x3b,0x00,0x03,0x24, +0x02,0x80,0x08,0x3c,0x10,0x00,0xa2,0xa3,0x11,0x00,0xa3,0xa3,0xbc,0xa5,0x08,0x25, +0x56,0x30,0xea,0x34,0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0xf4,0x98,0xe7,0x34, +0x00,0x80,0x06,0x3c,0x04,0x43,0x0b,0xae,0x00,0x40,0x09,0xae,0x43,0x00,0x11,0x24, +0x10,0x00,0xa5,0x27,0x0c,0x43,0x07,0xae,0x10,0x43,0x0a,0xae,0x0c,0x00,0x02,0xad, +0x14,0x00,0x03,0xa1,0x08,0x43,0x00,0xae,0x14,0x43,0x00,0xae,0x18,0x43,0x00,0xae, +0x21,0x20,0x00,0x01,0x3c,0x5c,0xc6,0x24,0x12,0x00,0xb1,0xa3,0x88,0x0e,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x1e,0x00,0x02,0x24,0x21,0x43,0x02,0xa2,0x4a,0x00,0x03,0x24, +0x45,0x00,0x02,0x24,0x1c,0x43,0x03,0xa2,0x1d,0x43,0x02,0xa2,0x23,0x00,0x03,0x24, +0x3e,0x00,0x02,0x24,0x1e,0x43,0x11,0xa2,0x1f,0x43,0x02,0xa2,0x20,0x43,0x03,0xa2, +0x20,0x00,0xbf,0x8f,0x1c,0x00,0xb1,0x8f,0x18,0x00,0xb0,0x8f,0x08,0x00,0xe0,0x03, +0x28,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27,0x3b,0x00,0x02,0x24,0x43,0x00,0x03,0x24, +0x10,0x00,0xa2,0xa3,0x11,0x00,0xa3,0xa3,0x36,0x00,0x02,0x24,0x02,0x80,0x03,0x3c, +0x02,0x80,0x07,0x3c,0xd8,0xa5,0xe7,0x24,0x12,0x00,0xa2,0xa3,0x3b,0x58,0x60,0xa0, +0xd0,0x07,0x02,0x24,0x01,0x00,0x03,0x24,0x00,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27, +0x21,0x20,0xe0,0x00,0x60,0x61,0xc6,0x24,0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0, +0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x20,0x00,0xbd,0x27,0xe0,0xff,0xbd,0x27, +0x02,0x80,0x02,0x3c,0x52,0x00,0x03,0x24,0x10,0x00,0xa3,0xa3,0xac,0x79,0x40,0xa4, +0x54,0x00,0x03,0x24,0x53,0x00,0x02,0x24,0x02,0x80,0x07,0x3c,0x10,0xa6,0xe7,0x24, +0x11,0x00,0xa2,0xa3,0x12,0x00,0xa3,0xa3,0xf4,0x01,0x02,0x24,0x01,0x00,0x03,0x24, +0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27,0x21,0x20,0xe0,0x00,0xb8,0x68,0xc6,0x24, +0x0c,0x00,0xe2,0xac,0x14,0x00,0xe3,0xa0,0x18,0x00,0xbf,0xaf,0x88,0x0e,0x00,0x0c, +0x13,0x00,0xa0,0xa3,0x18,0x00,0xbf,0x8f,0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03, +0x20,0x00,0xbd,0x27,0x02,0x80,0x04,0x3c,0xd8,0xff,0xbd,0x27,0x64,0x79,0x84,0x24, +0x21,0x28,0x00,0x00,0x20,0x00,0xbf,0xaf,0x58,0x45,0x00,0x0c,0x0a,0x00,0x06,0x24, +0x02,0x80,0x07,0x3c,0x68,0x15,0xe7,0x24,0xf8,0x63,0xe3,0x8c,0xfd,0xff,0x02,0x24, +0x02,0x80,0x08,0x3c,0x24,0x18,0x62,0x00,0xfe,0xff,0x02,0x24,0x24,0x18,0x62,0x00, +0x05,0x00,0x02,0x24,0xf8,0x63,0xe3,0xac,0xfc,0x63,0xe2,0xa0,0x28,0x00,0x03,0x24, +0x46,0x00,0x02,0x24,0x10,0x00,0xa2,0xa3,0xfd,0x63,0xe3,0xa0,0x4b,0x00,0x02,0x24, +0x42,0x00,0x03,0x24,0x2c,0xa6,0x08,0x25,0x11,0x00,0xa3,0xa3,0x12,0x00,0xa2,0xa3, +0xd0,0x07,0x03,0x24,0x01,0x00,0x02,0x24,0x01,0x80,0x06,0x3c,0x10,0x00,0xa5,0x27, +0x21,0x20,0x00,0x01,0x80,0x69,0xc6,0x24,0xfa,0x63,0xe0,0xa4,0x0c,0x00,0x03,0xad, +0x14,0x00,0x02,0xa1,0x88,0x0e,0x00,0x0c,0x13,0x00,0xa0,0xa3,0x20,0x00,0xbf,0x8f, +0x00,0x00,0x00,0x00,0x08,0x00,0xe0,0x03,0x28,0x00,0xbd,0x27,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x78,0x0c,0x00,0x00,0x01,0x00,0x00,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x01,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x02,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x03,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x04,0x5d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x05,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x06,0x59,0x78,0x0c,0x00,0x00, +0x01,0x00,0x07,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x08,0x55,0x78,0x0c,0x00,0x00, +0x01,0x00,0x09,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x0a,0x51,0x78,0x0c,0x00,0x00, +0x01,0x00,0x0b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x0c,0x4d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x0d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x0e,0x49,0x78,0x0c,0x00,0x00, +0x01,0x00,0x0f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x10,0x45,0x78,0x0c,0x00,0x00, +0x01,0x00,0x11,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x12,0x41,0x78,0x0c,0x00,0x00, +0x01,0x00,0x13,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x14,0x3d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x15,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x16,0x39,0x78,0x0c,0x00,0x00, +0x01,0x00,0x17,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x18,0x35,0x78,0x0c,0x00,0x00, +0x01,0x00,0x19,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x1a,0x31,0x78,0x0c,0x00,0x00, +0x01,0x00,0x1b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x1c,0x2d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x1d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x1e,0x29,0x78,0x0c,0x00,0x00, +0x01,0x00,0x1f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x20,0x25,0x78,0x0c,0x00,0x00, +0x01,0x00,0x21,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x22,0x21,0x78,0x0c,0x00,0x00, +0x01,0x00,0x23,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x24,0x1d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x25,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x26,0x19,0x78,0x0c,0x00,0x00, +0x01,0x00,0x27,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x28,0x15,0x78,0x0c,0x00,0x00, +0x01,0x00,0x29,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x2a,0x11,0x78,0x0c,0x00,0x00, +0x01,0x00,0x2b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x2c,0x0d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x2d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x2e,0x09,0x78,0x0c,0x00,0x00, +0x01,0x00,0x2f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x30,0x05,0x78,0x0c,0x00,0x00, +0x01,0x00,0x31,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x32,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x33,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x34,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x35,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x36,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x37,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x38,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x39,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3a,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x3b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3c,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x3d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x3e,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x3f,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x40,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x41,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x42,0x5e,0x78,0x0c,0x00,0x00, +0x01,0x00,0x43,0x5e,0x78,0x0c,0x00,0x00,0x01,0x00,0x44,0x5d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x45,0x5b,0x78,0x0c,0x00,0x00,0x01,0x00,0x46,0x59,0x78,0x0c,0x00,0x00, +0x01,0x00,0x47,0x57,0x78,0x0c,0x00,0x00,0x01,0x00,0x48,0x55,0x78,0x0c,0x00,0x00, +0x01,0x00,0x49,0x53,0x78,0x0c,0x00,0x00,0x01,0x00,0x4a,0x51,0x78,0x0c,0x00,0x00, +0x01,0x00,0x4b,0x4f,0x78,0x0c,0x00,0x00,0x01,0x00,0x4c,0x4d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x4d,0x4b,0x78,0x0c,0x00,0x00,0x01,0x00,0x4e,0x49,0x78,0x0c,0x00,0x00, +0x01,0x00,0x4f,0x47,0x78,0x0c,0x00,0x00,0x01,0x00,0x50,0x45,0x78,0x0c,0x00,0x00, +0x01,0x00,0x51,0x43,0x78,0x0c,0x00,0x00,0x01,0x00,0x52,0x41,0x78,0x0c,0x00,0x00, +0x01,0x00,0x53,0x3f,0x78,0x0c,0x00,0x00,0x01,0x00,0x54,0x3d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x55,0x3b,0x78,0x0c,0x00,0x00,0x01,0x00,0x56,0x39,0x78,0x0c,0x00,0x00, +0x01,0x00,0x57,0x37,0x78,0x0c,0x00,0x00,0x01,0x00,0x58,0x35,0x78,0x0c,0x00,0x00, +0x01,0x00,0x59,0x33,0x78,0x0c,0x00,0x00,0x01,0x00,0x5a,0x31,0x78,0x0c,0x00,0x00, +0x01,0x00,0x5b,0x2f,0x78,0x0c,0x00,0x00,0x01,0x00,0x5c,0x2d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x5d,0x2b,0x78,0x0c,0x00,0x00,0x01,0x00,0x5e,0x29,0x78,0x0c,0x00,0x00, +0x01,0x00,0x5f,0x27,0x78,0x0c,0x00,0x00,0x01,0x00,0x60,0x25,0x78,0x0c,0x00,0x00, +0x01,0x00,0x61,0x23,0x78,0x0c,0x00,0x00,0x01,0x00,0x62,0x21,0x78,0x0c,0x00,0x00, +0x01,0x00,0x63,0x1f,0x78,0x0c,0x00,0x00,0x01,0x00,0x64,0x1d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x65,0x1b,0x78,0x0c,0x00,0x00,0x01,0x00,0x66,0x19,0x78,0x0c,0x00,0x00, +0x01,0x00,0x67,0x17,0x78,0x0c,0x00,0x00,0x01,0x00,0x68,0x15,0x78,0x0c,0x00,0x00, +0x01,0x00,0x69,0x13,0x78,0x0c,0x00,0x00,0x01,0x00,0x6a,0x11,0x78,0x0c,0x00,0x00, +0x01,0x00,0x6b,0x0f,0x78,0x0c,0x00,0x00,0x01,0x00,0x6c,0x0d,0x78,0x0c,0x00,0x00, +0x01,0x00,0x6d,0x0b,0x78,0x0c,0x00,0x00,0x01,0x00,0x6e,0x09,0x78,0x0c,0x00,0x00, +0x01,0x00,0x6f,0x07,0x78,0x0c,0x00,0x00,0x01,0x00,0x70,0x05,0x78,0x0c,0x00,0x00, +0x01,0x00,0x71,0x03,0x78,0x0c,0x00,0x00,0x01,0x00,0x72,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x73,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x74,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x75,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x76,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x77,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x78,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x79,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7a,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x7b,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7c,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x7d,0x01,0x78,0x0c,0x00,0x00,0x01,0x00,0x7e,0x01,0x78,0x0c,0x00,0x00, +0x01,0x00,0x7f,0x01,0x78,0x0c,0x00,0x00,0x1e,0x00,0x00,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x01,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x02,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x03,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x04,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x05,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x06,0x30,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x07,0x30,0x78,0x0c,0x00,0x00,0x1e,0x00,0x08,0x3e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x09,0x40,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0a,0x42,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x0b,0x44,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0c,0x46,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x0d,0x48,0x78,0x0c,0x00,0x00,0x1e,0x00,0x0e,0x48,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x0f,0x4a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x10,0x4a,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x11,0x4c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x12,0x4c,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x13,0x4e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x14,0x50,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x15,0x50,0x78,0x0c,0x00,0x00,0x1e,0x00,0x16,0x50,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x17,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x18,0x52,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x19,0x52,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1a,0x54,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x1b,0x54,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1c,0x54,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x1d,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x1e,0x56,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x1f,0x56,0x78,0x0c,0x00,0x00,0x1e,0x00,0x20,0x56,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x21,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x22,0x58,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x23,0x58,0x78,0x0c,0x00,0x00,0x1e,0x00,0x24,0x58,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x25,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x26,0x5a,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x27,0x5a,0x78,0x0c,0x00,0x00,0x1e,0x00,0x28,0x5c,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x29,0x5c,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2a,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x2b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2c,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x2d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x2e,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x2f,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x30,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x31,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x32,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x33,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x34,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x35,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x36,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x37,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x38,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x39,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3a,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x3b,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3c,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x3d,0x5e,0x78,0x0c,0x00,0x00,0x1e,0x00,0x3e,0x5e,0x78,0x0c,0x00,0x00, +0x1e,0x00,0x3f,0x5e,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x08,0x00,0x00, +0x00,0x00,0x04,0x03,0x04,0x08,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x08,0x00,0x00, +0x00,0xfc,0x00,0x00,0x0c,0x08,0x00,0x00,0x0a,0x00,0x00,0x04,0x10,0x08,0x00,0x00, +0xff,0x10,0x10,0x80,0x14,0x08,0x00,0x00,0x10,0x3d,0x0c,0x02,0x18,0x08,0x00,0x00, +0xc5,0x03,0x00,0x00,0x1c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x24,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x28,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x2c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x30,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x34,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x38,0x08,0x00,0x00, +0x04,0x00,0x00,0x00,0x3c,0x08,0x00,0x00,0x00,0x02,0x69,0x00,0x40,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x44,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x4c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x54,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x08,0x00,0x00, +0x65,0xa9,0x65,0xa9,0x5c,0x08,0x00,0x00,0x65,0xa9,0x65,0xa9,0x60,0x08,0x00,0x00, +0x30,0x01,0x7f,0x0f,0x64,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x68,0x08,0x00,0x00, +0x30,0x01,0x7f,0x0f,0x6c,0x08,0x00,0x00,0x30,0x01,0x7f,0x0f,0x70,0x08,0x00,0x00, +0x00,0x03,0x00,0x03,0x74,0x08,0x00,0x00,0x00,0x03,0x00,0x03,0x78,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x7c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x94,0x08,0x00,0x00,0xfe,0xff,0xff,0xff,0x98,0x08,0x00,0x00, +0x10,0x20,0x30,0x40,0x9c,0x08,0x00,0x00,0x50,0x60,0x70,0x00,0xb0,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0xe0,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0xe4,0x08,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x04,0x0e,0x00,0x00, +0x03,0x03,0x03,0x03,0x08,0x0e,0x00,0x00,0x03,0x03,0x00,0x00,0x0c,0x0e,0x00,0x00, +0x00,0x00,0x00,0x00,0x10,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x14,0x0e,0x00,0x00, +0x03,0x03,0x03,0x03,0x18,0x0e,0x00,0x00,0x03,0x03,0x03,0x03,0x1c,0x0e,0x00,0x00, +0x03,0x03,0x03,0x03,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x09,0x00,0x00, +0x23,0x00,0x00,0x00,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x09,0x00,0x00, +0x33,0x13,0x32,0x03,0x08,0x0a,0x00,0x00,0x00,0x86,0x88,0x8f,0x2c,0x0a,0x00,0x00, +0x00,0x00,0x92,0x00,0x00,0x0c,0x00,0x00,0x80,0x00,0x00,0x00,0x04,0x0c,0x00,0x00, +0x33,0x54,0x00,0x00,0x08,0x0c,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x0c,0x00,0x00, +0x6c,0x6c,0x6c,0x6c,0x10,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x14,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x20,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x24,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x28,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,0x2c,0x0c,0x00,0x00, +0x00,0x01,0x00,0x40,0x30,0x0c,0x00,0x00,0x44,0x6a,0xe9,0x8d,0x34,0x0c,0x00,0x00, +0xcd,0x52,0x96,0x46,0x38,0x0c,0x00,0x00,0x90,0x5a,0x01,0x48,0x3c,0x0c,0x00,0x00, +0x64,0x97,0x97,0x1a,0x40,0x0c,0x00,0x00,0x3f,0x42,0x7c,0x1f,0x44,0x0c,0x00,0x00, +0xb7,0x00,0x01,0x00,0x48,0x0c,0x00,0x00,0x00,0x00,0x02,0xec,0x4c,0x0c,0x00,0x00, +0x03,0x03,0xfc,0x00,0x50,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x54,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x58,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x5c,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x60,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x64,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x68,0x0c,0x00,0x00,0x1c,0x34,0x54,0x69,0x6c,0x0c,0x00,0x00, +0x94,0x00,0x3c,0x43,0x70,0x0c,0x00,0x00,0x0d,0x00,0x5a,0x2c,0x74,0x0c,0x00,0x00, +0x1b,0x15,0x86,0x01,0x78,0x0c,0x00,0x00,0x1f,0x00,0x00,0x00,0x7c,0x0c,0x00,0x00, +0x12,0x16,0xb9,0x00,0x80,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x84,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0x88,0x0c,0x00,0x00,0x80,0x00,0x00,0x20,0x8c,0x0c,0x00,0x00, +0x00,0x00,0x20,0x08,0x90,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x94,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0x98,0x0c,0x00,0x00,0x00,0x01,0x00,0x40,0x9c,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xa0,0x0c,0x00,0x00,0x92,0x24,0x49,0x00,0xa4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xa8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xac,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xb0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xb4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xb8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xbc,0x0c,0x00,0x00, +0x92,0x24,0x49,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xc8,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xd0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0xd4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xd8,0x0c,0x00,0x00,0x27,0x24,0xb2,0x64,0xdc,0x0c,0x00,0x00, +0x32,0x69,0x76,0x00,0xe0,0x0c,0x00,0x00,0x22,0x22,0x22,0x00,0xe4,0x0c,0x00,0x00, +0x00,0x00,0x00,0x00,0xe8,0x0c,0x00,0x00,0x02,0x43,0x64,0x07,0x00,0x0d,0x00,0x00, +0x80,0x07,0x00,0x00,0x04,0x0d,0x00,0x00,0x03,0x04,0x00,0x00,0x08,0x0d,0x00,0x00, +0x7f,0x90,0x00,0x00,0x0c,0x0d,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x0d,0x00,0x00, +0x99,0x99,0x69,0xa0,0x14,0x0d,0x00,0x00,0x67,0x3c,0x99,0x99,0x18,0x0d,0x00,0x00, +0x6b,0x5b,0x8f,0x6a,0x1c,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x24,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x2c,0x0d,0x00,0x00,0x75,0x19,0x97,0xcc,0x30,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x34,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x3c,0x0d,0x00,0x00,0x93,0x72,0x02,0x00,0x40,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x44,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x0d,0x00,0x00, +0x00,0x00,0x00,0x00,0x50,0x0d,0x00,0x00,0x0a,0x14,0x37,0x64,0x54,0x0d,0x00,0x00, +0x02,0xbd,0x4d,0x02,0x58,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x0d,0x00,0x00, +0x64,0x20,0x03,0x30,0x60,0x0d,0x00,0x00,0x68,0xde,0x53,0x46,0x64,0x0d,0x00,0x00, +0x3c,0x8a,0x51,0x00,0x68,0x0d,0x00,0x00,0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00, +0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, +0x44,0x05,0x01,0x80,0x10,0x00,0x00,0x00,0x74,0x05,0x01,0x80,0x10,0x00,0x00,0x00, +0x14,0x35,0x00,0x80,0x10,0x00,0x00,0x00,0x20,0x35,0x00,0x80,0x10,0x00,0x00,0x00, +0xa0,0x08,0x01,0x80,0x10,0x00,0x00,0x00,0x2c,0x25,0x00,0x80,0x10,0x00,0x00,0x00, +0x24,0x25,0x00,0x80,0x10,0x00,0x00,0x00,0x34,0x25,0x00,0x80,0x08,0x00,0x00,0x00, +0x38,0x06,0x01,0x80,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00, +0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00, +0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00, +0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00, +0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00, +0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00, +0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00, +0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00, +0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00, +0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00, +0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00, +0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00, +0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00, +0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00, +0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00, +0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00, +0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00, +0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00, +0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00, +0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00, +0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00, +0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00, +0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00, +0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00, +0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00, +0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00, +0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00, +0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00, +0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00, +0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00, +0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00, +0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00, +0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00, +0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00, +0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00, +0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00, +0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00, +0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00, +0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00, +0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00, +0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00, +0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00, +0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00, +0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00, +0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00, +0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00, +0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00, +0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00, +0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00, +0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00, +0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00, +0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00, +0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00, +0xff,0xff,0xff,0x00,0x00,0xb7,0x00,0x00,0x01,0xe0,0x0e,0x00,0x02,0x4d,0x04,0x00, +0x03,0x41,0x04,0x00,0x04,0xc3,0x08,0x00,0x05,0x72,0x0c,0x00,0x06,0xe6,0x00,0x00, +0x07,0x2a,0x08,0x00,0x08,0x3f,0x00,0x00,0x09,0x35,0x03,0x00,0x0a,0xd4,0x09,0x00, +0x0b,0xbb,0x07,0x00,0x0c,0x50,0x08,0x00,0x0d,0xdf,0x0c,0x00,0x0e,0x2b,0x00,0x00, +0x0f,0x14,0x01,0x00,0x00,0xb7,0x01,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x04,0x00, +0x01,0x02,0x00,0x00,0x02,0x01,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x02,0x04,0x00, +0x01,0x04,0x00,0x00,0x02,0x03,0x04,0x00,0x01,0x05,0x00,0x00,0x02,0x04,0x04,0x00, +0x01,0x06,0x00,0x00,0x02,0x05,0x04,0x00,0x01,0x07,0x00,0x00,0x02,0x08,0x04,0x00, +0x01,0x08,0x00,0x00,0x02,0x09,0x04,0x00,0x01,0x09,0x00,0x00,0x02,0x0a,0x04,0x00, +0x01,0x0a,0x00,0x00,0x02,0x0b,0x04,0x00,0x01,0x0b,0x00,0x00,0x02,0x02,0x05,0x00, +0x01,0x0c,0x00,0x00,0x02,0x03,0x05,0x00,0x01,0x0d,0x00,0x00,0x02,0x04,0x05,0x00, +0x01,0x0e,0x00,0x00,0x02,0x05,0x05,0x00,0x01,0x0f,0x00,0x00,0x02,0x40,0x05,0x00, +0x01,0x10,0x00,0x00,0x02,0x41,0x05,0x00,0x01,0x11,0x00,0x00,0x02,0x42,0x05,0x00, +0x01,0x12,0x00,0x00,0x02,0x43,0x05,0x00,0x01,0x13,0x00,0x00,0x02,0x44,0x05,0x00, +0x01,0x14,0x00,0x00,0x02,0x45,0x05,0x00,0x01,0x15,0x00,0x00,0x02,0x80,0x05,0x00, +0x01,0x16,0x00,0x00,0x02,0x81,0x05,0x00,0x01,0x17,0x00,0x00,0x02,0x82,0x05,0x00, +0x01,0x18,0x00,0x00,0x02,0x83,0x05,0x00,0x01,0x19,0x00,0x00,0x02,0x84,0x05,0x00, +0x01,0x1a,0x00,0x00,0x02,0x85,0x05,0x00,0x01,0x1b,0x00,0x00,0x02,0x88,0x05,0x00, +0x01,0x1c,0x00,0x00,0x02,0x89,0x05,0x00,0x01,0x1d,0x00,0x00,0x02,0x8a,0x05,0x00, +0x01,0x1e,0x00,0x00,0x02,0x8b,0x05,0x00,0x01,0x1f,0x00,0x00,0x02,0x43,0x06,0x00, +0x01,0x20,0x00,0x00,0x02,0x44,0x06,0x00,0x01,0x21,0x00,0x00,0x02,0x45,0x06,0x00, +0x01,0x22,0x00,0x00,0x02,0x80,0x06,0x00,0x01,0x23,0x00,0x00,0x02,0x81,0x06,0x00, +0x01,0x24,0x00,0x00,0x02,0x82,0x06,0x00,0x01,0x25,0x00,0x00,0x02,0x83,0x06,0x00, +0x01,0x26,0x00,0x00,0x02,0x84,0x06,0x00,0x01,0x27,0x00,0x00,0x02,0x85,0x06,0x00, +0x01,0x28,0x00,0x00,0x02,0x88,0x06,0x00,0x01,0x29,0x00,0x00,0x02,0x89,0x06,0x00, +0x01,0x2a,0x00,0x00,0x02,0x8a,0x06,0x00,0x01,0x2b,0x00,0x00,0x02,0x8b,0x06,0x00, +0x01,0x2c,0x00,0x00,0x02,0x8c,0x06,0x00,0x01,0x2d,0x00,0x00,0x02,0x42,0x07,0x00, +0x01,0x2e,0x00,0x00,0x02,0x43,0x07,0x00,0x01,0x2f,0x00,0x00,0x02,0x44,0x07,0x00, +0x01,0x30,0x00,0x00,0x02,0x45,0x07,0x00,0x01,0x31,0x00,0x00,0x02,0x80,0x07,0x00, +0x01,0x32,0x00,0x00,0x02,0x81,0x07,0x00,0x01,0x33,0x00,0x00,0x02,0x82,0x07,0x00, +0x01,0x34,0x00,0x00,0x02,0x83,0x07,0x00,0x01,0x35,0x00,0x00,0x02,0x84,0x07,0x00, +0x01,0x36,0x00,0x00,0x02,0x85,0x07,0x00,0x01,0x37,0x00,0x00,0x02,0x88,0x07,0x00, +0x01,0x38,0x00,0x00,0x02,0x89,0x07,0x00,0x01,0x39,0x00,0x00,0x02,0x8a,0x07,0x00, +0x01,0x3a,0x00,0x00,0x02,0x8b,0x07,0x00,0x01,0x3b,0x00,0x00,0x02,0x8c,0x07,0x00, +0x01,0x3c,0x00,0x00,0x02,0x8d,0x07,0x00,0x01,0x3d,0x00,0x00,0x02,0x90,0x07,0x00, +0x01,0x3e,0x00,0x00,0x02,0x91,0x07,0x00,0x01,0x3f,0x00,0x00,0x02,0x92,0x07,0x00, +0x01,0x40,0x00,0x00,0x02,0x93,0x07,0x00,0x01,0x41,0x00,0x00,0x02,0x94,0x07,0x00, +0x01,0x42,0x00,0x00,0x02,0x95,0x07,0x00,0x01,0x43,0x00,0x00,0x02,0x98,0x07,0x00, +0x01,0x44,0x00,0x00,0x02,0x99,0x07,0x00,0x01,0x45,0x00,0x00,0x02,0x9a,0x07,0x00, +0x01,0x46,0x00,0x00,0x02,0x9b,0x07,0x00,0x01,0x47,0x00,0x00,0x02,0x9c,0x07,0x00, +0x01,0x48,0x00,0x00,0x02,0x9d,0x07,0x00,0x01,0x49,0x00,0x00,0x02,0xa0,0x07,0x00, +0x01,0x4a,0x00,0x00,0x02,0xa1,0x07,0x00,0x01,0x4b,0x00,0x00,0x02,0xa2,0x07,0x00, +0x01,0x4c,0x00,0x00,0x02,0xa3,0x07,0x00,0x01,0x4d,0x00,0x00,0x02,0xa4,0x07,0x00, +0x01,0x4e,0x00,0x00,0x02,0xa5,0x07,0x00,0x01,0x4f,0x00,0x00,0x02,0xa8,0x07,0x00, +0x01,0x50,0x00,0x00,0x02,0xa9,0x07,0x00,0x01,0x51,0x00,0x00,0x02,0xaa,0x03,0x00, +0x01,0x52,0x00,0x00,0x02,0xab,0x03,0x00,0x01,0x53,0x00,0x00,0x02,0xac,0x03,0x00, +0x01,0x54,0x00,0x00,0x02,0xad,0x03,0x00,0x01,0x55,0x00,0x00,0x02,0xb0,0x03,0x00, +0x01,0x56,0x00,0x00,0x02,0xb1,0x03,0x00,0x01,0x57,0x00,0x00,0x02,0xb2,0x03,0x00, +0x01,0x58,0x00,0x00,0x02,0xb3,0x03,0x00,0x01,0x59,0x00,0x00,0x02,0xb4,0x03,0x00, +0x01,0x5a,0x00,0x00,0x02,0xb5,0x03,0x00,0x01,0x5b,0x00,0x00,0x02,0xb8,0x03,0x00, +0x01,0x5c,0x00,0x00,0x02,0xb9,0x03,0x00,0x01,0x5d,0x00,0x00,0x02,0xba,0x03,0x00, +0x01,0x5e,0x00,0x00,0x02,0xbb,0x03,0x00,0x01,0x5f,0x00,0x00,0x02,0xbb,0x03,0x00, +0x03,0x80,0x00,0x00,0x05,0x04,0x00,0x00,0x00,0xb7,0x00,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x4d,0x0c,0x00,0xfe,0x00,0x00,0x00, +0xfe,0x00,0x00,0x00,0x02,0x4d,0x04,0x00,0x00,0xbf,0x02,0x00,0xff,0xff,0xff,0x00, +0xff,0xff,0xff,0x00,0x0a,0x00,0x00,0x00,0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52, +0x65,0x71,0x00,0x00,0x4f,0x6e,0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00, +0x4f,0x6e,0x52,0x65,0x41,0x73,0x73,0x6f,0x63,0x52,0x65,0x71,0x00,0x00,0x00,0x00, +0x4f,0x6e,0x52,0x65,0x41,0x73,0x73,0x6f,0x63,0x52,0x73,0x70,0x00,0x00,0x00,0x00, +0x4f,0x6e,0x50,0x72,0x6f,0x62,0x65,0x52,0x65,0x71,0x00,0x00,0x4f,0x6e,0x50,0x72, +0x6f,0x62,0x65,0x52,0x73,0x70,0x00,0x00,0x44,0x6f,0x52,0x65,0x73,0x65,0x72,0x76, +0x65,0x64,0x00,0x00,0x44,0x6f,0x52,0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x00,0x00, +0x4f,0x6e,0x42,0x65,0x61,0x63,0x6f,0x6e,0x00,0x00,0x00,0x00,0x4f,0x6e,0x41,0x54, +0x49,0x4d,0x00,0x00,0x4f,0x6e,0x44,0x69,0x73,0x61,0x73,0x73,0x6f,0x63,0x00,0x00, +0x4f,0x6e,0x41,0x75,0x74,0x68,0x00,0x00,0x4f,0x6e,0x44,0x65,0x41,0x75,0x74,0x68, +0x00,0x00,0x00,0x00,0x4f,0x6e,0x41,0x63,0x74,0x69,0x6f,0x6e,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x20,0x99,0x01,0x80,0x2c,0x13,0x01,0x80,0x10,0x00,0x00,0x00, +0x2c,0x99,0x01,0x80,0x34,0x13,0x01,0x80,0x20,0x00,0x00,0x00,0x38,0x99,0x01,0x80, +0x2c,0x13,0x01,0x80,0x30,0x00,0x00,0x00,0x48,0x99,0x01,0x80,0x34,0x13,0x01,0x80, +0x40,0x00,0x00,0x00,0x58,0x99,0x01,0x80,0x3c,0x13,0x01,0x80,0x50,0x00,0x00,0x00, +0x64,0x99,0x01,0x80,0x44,0x13,0x01,0x80,0x00,0x00,0x00,0x00,0x70,0x99,0x01,0x80, +0xac,0x13,0x01,0x80,0x00,0x00,0x00,0x00,0x7c,0x99,0x01,0x80,0xac,0x13,0x01,0x80, +0x80,0x00,0x00,0x00,0x88,0x99,0x01,0x80,0x4c,0x13,0x01,0x80,0x90,0x00,0x00,0x00, +0x94,0x99,0x01,0x80,0x54,0x13,0x01,0x80,0xa0,0x00,0x00,0x00,0x9c,0x99,0x01,0x80, +0x5c,0x13,0x01,0x80,0xb0,0x00,0x00,0x00,0xa8,0x99,0x01,0x80,0x94,0x13,0x01,0x80, +0xc0,0x00,0x00,0x00,0xb0,0x99,0x01,0x80,0x9c,0x13,0x01,0x80,0xd0,0x00,0x00,0x00, +0xbc,0x99,0x01,0x80,0xa4,0x13,0x01,0x80,0x00,0x00,0x00,0x00,0x74,0x9a,0x01,0x80, +0x74,0x9a,0x01,0x80,0x31,0x10,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x20,0x10,0x00, +0x00,0x30,0x00,0x00,0x31,0x28,0x10,0x00,0x00,0x30,0x00,0x00,0x31,0x2c,0x10,0x10, +0x00,0x30,0x00,0x00,0x31,0x2f,0x10,0x10,0x00,0x30,0x00,0x00,0x31,0x30,0x18,0x00, +0x00,0x30,0x00,0x00,0x31,0x30,0x20,0x10,0x00,0x30,0x00,0x00,0x22,0x20,0x18,0x08, +0x00,0x20,0x00,0x00,0x22,0x21,0x14,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x1c,0x08, +0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x08,0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x10, +0x00,0x20,0x00,0x00,0x22,0x21,0x20,0x18,0x00,0x20,0x00,0x00,0x1a,0x19,0x18,0x10, +0x00,0x18,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x10,0x00,0x00,0x0a,0x09,0x08,0x00, +0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x02,0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x04, +0x00,0x08,0x00,0x00,0x0a,0x09,0x08,0x06,0x00,0x08,0x00,0x00,0x08,0x07,0x06,0x04, +0x00,0x06,0x00,0x00,0x06,0x05,0x04,0x02,0x00,0x04,0x00,0x00,0x06,0x05,0x04,0x03, +0x00,0x04,0x00,0x00,0x05,0x04,0x03,0x02,0x00,0x03,0x00,0x00,0x09,0x08,0x07,0x06, +0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03, +0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x00,0x09,0x08,0x07,0x06,0x07,0x06,0x06, +0x05,0x05,0x04,0x04,0x03,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x04,0x03,0x03, +0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x10,0x10,0x20,0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x20,0x08,0x08,0x08,0x08, +0x08,0x20,0x20,0x20,0x30,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30, +0x30,0x10,0x20,0x20,0x20,0x20,0x20,0x30,0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30, +0x30,0x30,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20, +0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20,0x08,0x08,0x08,0x08,0x08,0x20,0x20,0x20, +0x20,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x20,0x30,0x30,0x10,0x20,0x20, +0x20,0x20,0x20,0x30,0x30,0x08,0x10,0x20,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00, +0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a, +0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09, +0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10, +0x08,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x0a,0x09,0x08,0x00, +0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00, +0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x1c,0x08,0x00,0x22, +0x20,0x18,0x08,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09, +0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20, +0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x1c,0x08,0x00,0x31,0x30,0x18,0x00, +0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00, +0x0a,0x09,0x08,0x04,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a, +0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x22,0x21, +0x20,0x08,0x00,0x31,0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00,0x00,0x12,0x11,0x10, +0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x08, +0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31,0x30,0x20,0x10,0x00, +0x31,0x2c,0x10,0x10,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11,0x10,0x08,0x00,0x22, +0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20,0x10,0x00,0x31,0x2f, +0x10,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00,0x00,0x31,0x2c,0x10, +0x10,0x00,0x00,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09, +0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08, +0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00, +0x00,0x12,0x11,0x10,0x08,0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00, +0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a, +0x09,0x08,0x00,0x00,0x0a,0x09,0x08,0x00,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21, +0x1c,0x08,0x00,0x22,0x21,0x14,0x08,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08, +0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x02,0x00,0x0a,0x09,0x08,0x00, +0x00,0x22,0x21,0x20,0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,0x08,0x00, +0x22,0x21,0x14,0x08,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x0a, +0x09,0x08,0x04,0x00,0x0a,0x09,0x08,0x04,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19, +0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18,0x10,0x00,0x1a,0x19,0x18, +0x10,0x00,0x22,0x21,0x20,0x08,0x00,0x31,0x2c,0x10,0x10,0x00,0x31,0x28,0x10,0x00, +0x00,0x12,0x11,0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00, +0x22,0x21,0x20,0x08,0x00,0x22,0x21,0x14,0x08,0x00,0x22,0x20,0x18,0x08,0x00,0x31, +0x30,0x20,0x10,0x00,0x31,0x2c,0x10,0x10,0x00,0x0a,0x09,0x08,0x00,0x00,0x12,0x11, +0x10,0x08,0x00,0x22,0x21,0x20,0x18,0x00,0x22,0x21,0x20,0x18,0x00,0x31,0x30,0x20, +0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x2f,0x10,0x10,0x00,0x31,0x10,0x10,0x00, +0x00,0x31,0x2c,0x10,0x10,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x02,0x04,0x08,0x0c, +0x10,0x18,0x20,0x30,0x02,0x04,0x08,0x0c,0x10,0x18,0x20,0x30,0x06,0x0c,0x10,0x18, +0x24,0x30,0x3c,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x25,0x27,0x2c,0x19,0x1b,0x1e,0x20,0x23,0x29,0x2a,0x2b,0x00,0x00,0x00,0x00, +0x25,0x29,0x2b,0x2e,0x2e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00, +0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00, +0x30,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x90,0x00,0x00,0x00, +0xc0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x78,0x00,0x00,0x00, +0xa0,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x90,0x01,0x00,0x00, +0xe0,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x2c,0x01,0x00,0x00,0x40,0x01,0x00,0x00, +0xe0,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x0c,0x00,0x00,0x80,0x0c,0x00,0x00, +0x80,0x0c,0x00,0x00,0xa0,0x0f,0x00,0x00,0xa0,0x0f,0x00,0x00,0x02,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00,0x00,0x00, +0x12,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x30,0x00,0x00,0x00, +0x48,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x28,0x00,0x00,0x00, +0x3c,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xa0,0x00,0x00,0x00, +0xc8,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x64,0x00,0x00,0x00, +0xa0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x40,0x06,0x00,0x00, +0x40,0x06,0x00,0x00,0x40,0x06,0x00,0x00,0xd0,0x07,0x00,0x00,0xd0,0x07,0x00,0x00, +0x2c,0x05,0x00,0x80,0x20,0x05,0x00,0x80,0x14,0x05,0x00,0x80,0x08,0x05,0x00,0x80, +0xfc,0x04,0x00,0x80,0xf0,0x04,0x00,0x80,0xe4,0x04,0x00,0x80,0xd8,0x04,0x00,0x80, +0xcc,0x04,0x00,0x80,0xc0,0x04,0x00,0x80,0x78,0x04,0x00,0x80,0x70,0x3b,0x01,0x80, +0x48,0x3b,0x01,0x80,0x24,0x3b,0x01,0x80,0x14,0x3c,0x01,0x80,0xf0,0x3b,0x01,0x80, +0xcc,0x3b,0x01,0x80,0xa8,0x3b,0x01,0x80,0x30,0x41,0x00,0x80,0x3c,0x41,0x00,0x80, +0x48,0x41,0x00,0x80,0x54,0x41,0x00,0x80,0x30,0x41,0x00,0x80,0x30,0x41,0x00,0x80, +0x30,0x41,0x00,0x80,0x30,0x41,0x00,0x80,0x60,0x41,0x00,0x80,0x6c,0x41,0x00,0x80, +0x78,0x41,0x00,0x80,0x84,0x41,0x00,0x80,0x68,0x15,0x02,0x80,0x68,0x15,0x02,0x80, +0x84,0x0e,0x25,0xb0,0x88,0x0e,0x25,0xb0,0x8c,0x0e,0x25,0xb0,0xd0,0x0e,0x25,0xb0, +0xd8,0x0e,0x25,0xb0,0x20,0x08,0x25,0xb0,0xfe,0x01,0x80,0x7f,0xe2,0x01,0x80,0x78, +0xc7,0x01,0xc0,0x71,0xae,0x01,0x80,0x6b,0x95,0x01,0x40,0x65,0x7f,0x01,0xc0,0x5f, +0x69,0x01,0x40,0x5a,0x55,0x01,0x40,0x55,0x42,0x01,0x80,0x50,0x30,0x01,0x00,0x4c, +0x1f,0x01,0xc0,0x47,0x0f,0x01,0xc0,0x43,0x00,0x01,0x00,0x40,0xf2,0x00,0x80,0x3c, +0xe4,0x00,0x00,0x39,0xd7,0x00,0xc0,0x35,0xcb,0x00,0xc0,0x32,0xc0,0x00,0x00,0x30, +0xb5,0x00,0x40,0x2d,0xab,0x00,0xc0,0x2a,0xa2,0x00,0x80,0x28,0x98,0x00,0x00,0x26, +0x90,0x00,0x00,0x24,0x88,0x00,0x00,0x22,0x80,0x00,0x00,0x20,0x79,0x00,0x40,0x1e, +0x72,0x00,0x80,0x1c,0x6c,0x00,0x00,0x1b,0x66,0x00,0x80,0x19,0x60,0x00,0x00,0x18, +0x5b,0x00,0xc0,0x16,0x56,0x00,0x80,0x15,0x51,0x00,0x40,0x14,0x4c,0x00,0x00,0x13, +0x48,0x00,0x00,0x12,0x44,0x00,0x00,0x11,0x40,0x00,0x00,0x10,0x36,0x35,0x2e,0x25, +0x1c,0x12,0x09,0x04,0x33,0x32,0x2b,0x23,0x1a,0x11,0x08,0x04,0x30,0x2f,0x29,0x21, +0x19,0x10,0x08,0x03,0x2d,0x2d,0x27,0x1f,0x18,0x0f,0x08,0x03,0x2b,0x2a,0x25,0x1e, +0x16,0x0e,0x07,0x03,0x28,0x28,0x22,0x1c,0x15,0x0d,0x07,0x03,0x26,0x25,0x21,0x1b, +0x14,0x0d,0x06,0x03,0x24,0x23,0x1f,0x19,0x13,0x0c,0x06,0x03,0x22,0x21,0x1d,0x18, +0x11,0x0b,0x06,0x02,0x20,0x20,0x1b,0x16,0x11,0x08,0x05,0x02,0x1f,0x1e,0x1a,0x15, +0x10,0x0a,0x05,0x02,0x1d,0x1c,0x18,0x14,0x0f,0x0a,0x05,0x02,0x1b,0x1a,0x17,0x13, +0x0e,0x09,0x04,0x02,0x1a,0x19,0x16,0x12,0x0d,0x09,0x04,0x02,0x18,0x17,0x15,0x11, +0x0c,0x08,0x04,0x02,0x17,0x16,0x13,0x10,0x0c,0x08,0x04,0x02,0x16,0x15,0x12,0x0f, +0x0b,0x07,0x04,0x01,0x14,0x14,0x11,0x0e,0x0b,0x07,0x03,0x02,0x13,0x13,0x10,0x0d, +0x0a,0x06,0x03,0x01,0x12,0x12,0x0f,0x0c,0x09,0x06,0x03,0x01,0x11,0x11,0x0f,0x0c, +0x09,0x06,0x03,0x01,0x10,0x10,0x0e,0x0b,0x08,0x05,0x03,0x01,0x0f,0x0f,0x0d,0x0b, +0x08,0x05,0x03,0x01,0x0e,0x0e,0x0c,0x0a,0x08,0x05,0x02,0x01,0x0d,0x0d,0x0c,0x0a, +0x07,0x05,0x02,0x01,0x0d,0x0c,0x0b,0x09,0x07,0x04,0x02,0x01,0x0c,0x0c,0x0a,0x09, +0x06,0x04,0x02,0x01,0x0b,0x0b,0x0a,0x08,0x06,0x04,0x02,0x01,0x0b,0x0a,0x09,0x08, +0x06,0x04,0x02,0x01,0x0a,0x0a,0x09,0x07,0x05,0x03,0x02,0x01,0x0a,0x09,0x08,0x07, +0x05,0x03,0x02,0x01,0x09,0x09,0x08,0x06,0x05,0x03,0x01,0x01,0x09,0x08,0x07,0x06, +0x04,0x03,0x01,0x01,0x36,0x35,0x2e,0x1b,0x00,0x00,0x00,0x00,0x33,0x32,0x2b,0x19, +0x00,0x00,0x00,0x00,0x30,0x2f,0x29,0x18,0x00,0x00,0x00,0x00,0x2d,0x2d,0x17,0x17, +0x00,0x00,0x00,0x00,0x2b,0x2a,0x25,0x15,0x00,0x00,0x00,0x00,0x28,0x28,0x24,0x14, +0x00,0x00,0x00,0x00,0x26,0x25,0x21,0x13,0x00,0x00,0x00,0x00,0x24,0x23,0x1f,0x12, +0x00,0x00,0x00,0x00,0x22,0x21,0x1d,0x11,0x00,0x00,0x00,0x00,0x20,0x20,0x1b,0x10, +0x00,0x00,0x00,0x00,0x1f,0x1e,0x1a,0x0f,0x00,0x00,0x00,0x00,0x1d,0x1c,0x18,0x0e, +0x00,0x00,0x00,0x00,0x1b,0x1a,0x17,0x0e,0x00,0x00,0x00,0x00,0x1a,0x19,0x16,0x0d, +0x00,0x00,0x00,0x00,0x18,0x17,0x15,0x0c,0x00,0x00,0x00,0x00,0x17,0x16,0x13,0x0b, +0x00,0x00,0x00,0x00,0x16,0x15,0x12,0x0b,0x00,0x00,0x00,0x00,0x14,0x14,0x11,0x0a, +0x00,0x00,0x00,0x00,0x13,0x13,0x10,0x0a,0x00,0x00,0x00,0x00,0x12,0x12,0x0f,0x09, +0x00,0x00,0x00,0x00,0x11,0x11,0x0f,0x09,0x00,0x00,0x00,0x00,0x10,0x10,0x0e,0x08, +0x00,0x00,0x00,0x00,0x0f,0x0f,0x0d,0x08,0x00,0x00,0x00,0x00,0x0e,0x0e,0x0c,0x07, +0x00,0x00,0x00,0x00,0x0d,0x0d,0x0c,0x07,0x00,0x00,0x00,0x00,0x0d,0x0c,0x0b,0x06, +0x00,0x00,0x00,0x00,0x0c,0x0c,0x0a,0x06,0x00,0x00,0x00,0x00,0x0b,0x0b,0x0a,0x06, +0x00,0x00,0x00,0x00,0x0b,0x0a,0x09,0x05,0x00,0x00,0x00,0x00,0x0a,0x0a,0x09,0x05, +0x00,0x00,0x00,0x00,0x0a,0x09,0x08,0x05,0x00,0x00,0x00,0x00,0x09,0x09,0x08,0x05, +0x00,0x00,0x00,0x00,0x09,0x08,0x07,0x04,0x00,0x00,0x00,0x00,0x06,0x00,0x2a,0xb0, +0x05,0x00,0x2a,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x28,0x28,0x28,0x28,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, +0x04,0x04,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x41,0x41,0x41,0x41,0x41,0x41,0x01, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, +0x01,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x42,0x42,0x42,0x42,0x42,0x42,0x02, +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, +0x02,0x02,0x02,0x10,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x10, +0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x10, +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0xa5,0x76,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x26,0x72,0xb0,0x00,0x26,0x72,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x26,0x65,0x60,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x02, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x5a,0x00,0xb8,0xff,0xff,0xff,0xff, +}; + +u8 Rtl8192SEFwMainArray[MainArrayLength] = { +0x0, }; + +u8 Rtl8192SEFwDataArray[DataArrayLength] = { +0x0, }; + +u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength] = { +0x01c,0x07000000, +0x800,0x00040000, +0x804,0x00008003, +0x808,0x0000fc00, +0x80c,0x0000000a, +0x810,0x10005088, +0x814,0x020c3d10, +0x818,0x00200185, +0x81c,0x00000000, +0x820,0x01000000, +0x824,0x00390004, +0x828,0x01000000, +0x82c,0x00390004, +0x830,0x00000004, +0x834,0x00690200, +0x838,0x00000004, +0x83c,0x00690200, +0x840,0x00010000, +0x844,0x00010000, +0x848,0x00000000, +0x84c,0x00000000, +0x850,0x00000000, +0x854,0x00000000, +0x858,0x48484848, +0x85c,0x65a965a9, +0x860,0x0f7f0130, +0x864,0x0f7f0130, +0x868,0x0f7f0130, +0x86c,0x0f7f0130, +0x870,0x03000700, +0x874,0x03000300, +0x878,0x00020002, +0x87c,0x004f0201, +0x880,0xa8300ac1, +0x884,0x00000058, +0x888,0x00000008, +0x88c,0x00000004, +0x890,0x00000000, +0x894,0xfffffffe, +0x898,0x40302010, +0x89c,0x00706050, +0x8b0,0x00000000, +0x8e0,0x00000000, +0x8e4,0x00000000, +0xe00,0x30333333, +0xe04,0x2a2d2e2f, +0xe08,0x00003232, +0xe10,0x30333333, +0xe14,0x2a2d2e2f, +0xe18,0x30333333, +0xe1c,0x2a2d2e2f, +0xe30,0x01007c00, +0xe34,0x01004800, +0xe38,0x1000dc1f, +0xe3c,0x10008c1f, +0xe40,0x021400a0, +0xe44,0x281600a0, +0xe48,0xf8000001, +0xe4c,0x00002910, +0xe50,0x01007c00, +0xe54,0x01004800, +0xe58,0x1000dc1f, +0xe5c,0x10008c1f, +0xe60,0x021400a0, +0xe64,0x281600a0, +0xe6c,0x00002910, +0xe70,0x31ed92fb, +0xe74,0x361536fb, +0xe78,0x361536fb, +0xe7c,0x361536fb, +0xe80,0x361536fb, +0xe84,0x000d92fb, +0xe88,0x000d92fb, +0xe8c,0x31ed92fb, +0xed0,0x31ed92fb, +0xed4,0x31ed92fb, +0xed8,0x000d92fb, +0xedc,0x000d92fb, +0xee0,0x000d92fb, +0xee4,0x015e5448, +0xee8,0x21555448, +0x900,0x00000000, +0x904,0x00000023, +0x908,0x00000000, +0x90c,0x01121313, +0xa00,0x00d047c8, +0xa04,0x80ff0008, +0xa08,0x8ccd8300, +0xa0c,0x2e62120f, +0xa10,0x9500bb78, +0xa14,0x11144028, +0xa18,0x00881117, +0xa1c,0x89140f00, +0xa20,0x1a1b0000, +0xa24,0x090e1317, +0xa28,0x00000204, +0xa2c,0x10d30000, +0xc00,0x40071d40, +0xc04,0x00a05633, +0xc08,0x000000e4, +0xc0c,0x6c6c6c6c, +0xc10,0x08800000, +0xc14,0x40000100, +0xc18,0x08000000, +0xc1c,0x40000100, +0xc20,0x08000000, +0xc24,0x40000100, +0xc28,0x08000000, +0xc2c,0x40000100, +0xc30,0x6de9ac44, +0xc34,0x469652cf, +0xc38,0x49795994, +0xc3c,0x0a979764, +0xc40,0x1f7c403f, +0xc44,0x000100b7, +0xc48,0xec020000, +0xc4c,0x007f037f, +0xc50,0x69543420, +0xc54,0x433c0094, +0xc58,0x69543420, +0xc5c,0x433c0094, +0xc60,0x69543420, +0xc64,0x433c0094, +0xc68,0x69543420, +0xc6c,0x433c0094, +0xc70,0x2c7f000d, +0xc74,0x0186155b, +0xc78,0x0000001f, +0xc7c,0x00b91612, +0xc80,0x40000100, +0xc84,0x20f60000, +0xc88,0x20000080, +0xc8c,0x20200000, +0xc90,0x40000100, +0xc94,0x00000000, +0xc98,0x40000100, +0xc9c,0x00000000, +0xca0,0x00492492, +0xca4,0x00000000, +0xca8,0x00000000, +0xcac,0x00000000, +0xcb0,0x00000000, +0xcb4,0x00000000, +0xcb8,0x00000000, +0xcbc,0x28000000, +0xcc0,0x00000000, +0xcc4,0x00000000, +0xcc8,0x00000000, +0xccc,0x00000000, +0xcd0,0x00000000, +0xcd4,0x00000000, +0xcd8,0x64b22427, +0xcdc,0x00766932, +0xce0,0x00222222, +0xce4,0x00000000, +0xce8,0x37644302, +0xcec,0x2f97d40c, +0xd00,0x00000750, +0xd04,0x00000403, +0xd08,0x0000907f, +0xd0c,0x00000001, +0xd10,0xa0633333, +0xd14,0x33333c63, +0xd18,0x6a8f5b6b, +0xd1c,0x00000000, +0xd20,0x00000000, +0xd24,0x00000000, +0xd28,0x00000000, +0xd2c,0xcc979975, +0xd30,0x00000000, +0xd34,0x00000000, +0xd38,0x00000000, +0xd3c,0x00027293, +0xd40,0x00000000, +0xd44,0x00000000, +0xd48,0x00000000, +0xd50,0x6437140a, +0xd54,0x024dbd02, +0xd58,0x00000000, +0xd5c,0x30032064, +0xd60,0x4653de68, +0xd64,0x00518a3c, +0xd68,0x00002101, +0xf14,0x00000003, +0xf4c,0x00000000, +0xf00,0x00000300, +}; + +u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength] = { +0x0, }; + +u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength] = { +0x844,0xffffffff,0x00010000, +0x804,0x0000000f,0x00000001, +0x824,0x00f0000f,0x00300004, +0x82c,0x00f0000f,0x00100002, +0x870,0x04000000,0x00000001, +0x864,0x00000400,0x00000000, +0x878,0x000f000f,0x00000002, +0xe74,0x0f000000,0x00000002, +0xe78,0x0f000000,0x00000002, +0xe7c,0x0f000000,0x00000002, +0xe80,0x0f000000,0x00000002, +0x90c,0x000000ff,0x00000011, +0xc04,0x000000ff,0x00000011, +0xd04,0x0000000f,0x00000001, +0x1f4,0xffff0000,0x00007777, +0x234,0xf8000000,0x0000000a, +}; + +u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength] = { +0x804,0x0000000f,0x00000003, +0x824,0x00f0000f,0x00300004, +0x82c,0x00f0000f,0x00300002, +0x870,0x04000000,0x00000001, +0x864,0x00000400,0x00000000, +0x878,0x000f000f,0x00000002, +0xe74,0x0f000000,0x00000002, +0xe78,0x0f000000,0x00000002, +0xe7c,0x0f000000,0x00000002, +0xe80,0x0f000000,0x00000002, +0x90c,0x000000ff,0x00000011, +0xc04,0x000000ff,0x00000033, +0xd04,0x0000000f,0x00000003, +0x1f4,0xffff0000,0x00007777, +0x234,0xf8000000,0x0000000a, +}; + +u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength] = { +0x804,0x0000000f,0x00000003, +0x824,0x00f0000f,0x00300004, +0x82c,0x00f0000f,0x00300004, +0x870,0x04000000,0x00000001, +0x864,0x00000400,0x00000001, +0x878,0x000f000f,0x00020002, +0xe74,0x0f000000,0x00000006, +0xe78,0x0f000000,0x00000006, +0xe7c,0x0f000000,0x00000006, +0xe80,0x0f000000,0x00000006, +0x90c,0x000000ff,0x00000033, +0xc04,0x000000ff,0x00000033, +0xd04,0x0000000f,0x00000003, +0x1f4,0xffff0000,0x0000ffff, +0x234,0xf8000000,0x00000013, +}; + +u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength] = { +0xe00,0xffffffff,0x06090909, +0xe04,0xffffffff,0x00030406, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x0a0c0d0e, +0xe14,0xffffffff,0x04070809, +0xe18,0xffffffff,0x0a0c0d0e, +0xe1c,0xffffffff,0x04070809, +0xe00,0xffffffff,0x04040404, +0xe04,0xffffffff,0x00020204, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x02040404, +0xe14,0xffffffff,0x00000002, +0xe18,0xffffffff,0x02040404, +0xe1c,0xffffffff,0x00000002, +0xe00,0xffffffff,0x04040404, +0xe04,0xffffffff,0x00020204, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x02040404, +0xe14,0xffffffff,0x00000002, +0xe18,0xffffffff,0x02040404, +0xe1c,0xffffffff,0x00000002, +0xe00,0xffffffff,0x02020202, +0xe04,0xffffffff,0x00020202, +0xe08,0x0000ff00,0x00000000, +0xe10,0xffffffff,0x02020202, +0xe14,0xffffffff,0x00000002, +0xe18,0xffffffff,0x02020202, +0xe1c,0xffffffff,0x00000002, +}; + +u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength] = { +0x000,0x00030159, +0x001,0x00030250, +0x002,0x00010000, +0x010,0x0008000f, +0x011,0x000231fc, +0x010,0x000c000f, +0x011,0x0003f9f8, +0x010,0x0002000f, +0x011,0x00020101, +0x014,0x0001093e, +0x014,0x0009093e, +0x015,0x0000f8f4, +0x017,0x000f6500, +0x01a,0x00013056, +0x01b,0x00060000, +0x01c,0x00000300, +0x01e,0x00031059, +0x021,0x00054000, +0x022,0x0000083c, +0x023,0x00001558, +0x024,0x00000060, +0x025,0x00022583, +0x026,0x0000f200, +0x027,0x000eacf1, +0x028,0x0009bd54, +0x029,0x00004582, +0x02a,0x00000001, +0x02b,0x00021334, +0x02a,0x00000000, +0x02b,0x0000000a, +0x02a,0x00000001, +0x02b,0x00000808, +0x02b,0x00053333, +0x02c,0x0000000c, +0x02a,0x00000002, +0x02b,0x00000808, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000003, +0x02b,0x00000808, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000004, +0x02b,0x00000808, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000005, +0x02b,0x00000709, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x00000006, +0x02b,0x00000709, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000007, +0x02b,0x00000709, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000008, +0x02b,0x00000709, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000009, +0x02b,0x0000060a, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000a, +0x02b,0x0000060a, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x0000000b, +0x02b,0x0000060a, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x0000000c, +0x02b,0x0000060a, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x0000000d, +0x02b,0x0000050b, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000e, +0x02b,0x0000050b, +0x02b,0x00066623, +0x02c,0x0000001a, +0x02a,0x000e4000, +0x030,0x00020000, +0x031,0x000b9631, +0x032,0x0000130d, +0x033,0x00000187, +0x013,0x00019e6c, +0x013,0x00015e94, +0x000,0x00010159, +0x018,0x0000f401, +0x0fe,0x00000000, +0x01e,0x0003105b, +0x0fe,0x00000000, +0x000,0x00030159, +0x010,0x0004000f, +0x011,0x000203f9, +}; + +u32 Rtl8192SERadioB_Array[RadioB_ArrayLength] = { +0x000,0x00030159, +0x001,0x00001041, +0x002,0x00011000, +0x005,0x00080fc0, +0x007,0x000fc803, +0x013,0x00017cb0, +0x013,0x00011cc0, +0x013,0x0000dc60, +0x013,0x00008c60, +0x013,0x00004450, +0x013,0x00000020, +}; + +u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength] = { +0x000,0x00030159, +0x001,0x00030250, +0x002,0x00010000, +0x010,0x0008000f, +0x011,0x000231fc, +0x010,0x000c000f, +0x011,0x0003f9f8, +0x014,0x0001093e, +0x014,0x0009093e, +0x015,0x000198f4, +0x017,0x000f6500, +0x01a,0x00013056, +0x01b,0x00060000, +0x01c,0x00000300, +0x01e,0x00031059, +0x021,0x00054000, +0x022,0x0000083c, +0x023,0x00001558, +0x024,0x00000060, +0x025,0x00022583, +0x026,0x0000f200, +0x027,0x000eacf1, +0x028,0x000dbd54, +0x029,0x00004582, +0x02a,0x00000001, +0x02b,0x00021334, +0x02a,0x00000000, +0x02b,0x0000000a, +0x02a,0x00000001, +0x02b,0x00000808, +0x02b,0x00053333, +0x02c,0x0000000c, +0x02a,0x00000002, +0x02b,0x00000808, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000003, +0x02b,0x00000808, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000004, +0x02b,0x00000808, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000005, +0x02b,0x00000709, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x00000006, +0x02b,0x00000709, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000007, +0x02b,0x00000709, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000008, +0x02b,0x00000709, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000009, +0x02b,0x0000060a, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000a, +0x02b,0x0000060a, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x0000000b, +0x02b,0x0000060a, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x0000000c, +0x02b,0x0000060a, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x0000000d, +0x02b,0x0000050b, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000e, +0x02b,0x0000050b, +0x02b,0x00066623, +0x02c,0x0000001a, +0x02a,0x000e4000, +0x030,0x00020000, +0x031,0x000b9631, +0x033,0x00000187, +0x013,0x00019e6c, +0x013,0x00015e94, +0x000,0x00010159, +0x018,0x0000f401, +0x0fe,0x00000000, +0x01e,0x0003105b, +0x0fe,0x00000000, +0x000,0x00030159, +0x010,0x0004000f, +0x011,0x000203f9, +}; + +u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength] = { +0x000,0x00030159, +0x001,0x00030250, +0x002,0x00010000, +0x010,0x0008000f, +0x011,0x000231fc, +0x010,0x000c000f, +0x011,0x0003f9f8, +0x014,0x0001093e, +0x014,0x0009093e, +0x015,0x000198f4, +0x017,0x000f6500, +0x01a,0x00013056, +0x01b,0x00060000, +0x01c,0x00000300, +0x01e,0x00031059, +0x021,0x00054000, +0x022,0x0000083c, +0x023,0x00001558, +0x024,0x00000060, +0x025,0x00022583, +0x026,0x0000f200, +0x027,0x000eacf1, +0x028,0x000dbd54, +0x029,0x00004582, +0x02a,0x00000001, +0x02b,0x00021334, +0x02a,0x00000000, +0x02b,0x0000000a, +0x02a,0x00000001, +0x02b,0x00000808, +0x02b,0x00053333, +0x02c,0x0000000c, +0x02a,0x00000002, +0x02b,0x00000808, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000003, +0x02b,0x00000808, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000004, +0x02b,0x00000808, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000005, +0x02b,0x00000709, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x00000006, +0x02b,0x00000709, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x00000007, +0x02b,0x00000709, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x00000008, +0x02b,0x00000709, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x00000009, +0x02b,0x0000060a, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000a, +0x02b,0x0000060a, +0x02b,0x0005b333, +0x02c,0x0000000d, +0x02a,0x0000000b, +0x02b,0x0000060a, +0x02b,0x00063333, +0x02c,0x0000000d, +0x02a,0x0000000c, +0x02b,0x0000060a, +0x02b,0x0006b333, +0x02c,0x0000000d, +0x02a,0x0000000d, +0x02b,0x0000050b, +0x02b,0x00053333, +0x02c,0x0000000d, +0x02a,0x0000000e, +0x02b,0x0000050b, +0x02b,0x00066623, +0x02c,0x0000001a, +0x02a,0x000e4000, +0x030,0x00020000, +0x031,0x000b9631, +0x033,0x00000187, +0x013,0x00019e6c, +0x013,0x00015e94, +0x000,0x00010159, +0x018,0x0000f401, +0x0fe,0x00000000, +0x01e,0x0003105b, +0x0fe,0x00000000, +0x000,0x00030159, +0x010,0x0004000f, +0x011,0x000203f9, +}; + +u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength] = { +0x000,0x00030159, +0x001,0x00001041, +0x002,0x00011000, +0x005,0x00080fc0, +0x007,0x000fc803, +}; + +u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength] = { +0x020,0x00000035, +0x048,0x0000000e, +0x049,0x000000f0, +0x04a,0x00000077, +0x04b,0x00000083, +0x0b5,0x00000021, +0x0dc,0x000000ff, +0x0dd,0x000000ff, +0x0de,0x000000ff, +0x0df,0x000000ff, +0x116,0x00000000, +0x117,0x00000000, +0x118,0x00000000, +0x119,0x00000000, +0x11a,0x00000000, +0x11b,0x00000000, +0x11c,0x00000000, +0x11d,0x00000000, +0x160,0x0000000b, +0x161,0x0000000b, +0x162,0x0000000b, +0x163,0x0000000b, +0x164,0x0000000b, +0x165,0x0000000b, +0x166,0x0000000b, +0x167,0x0000000b, +0x168,0x0000000b, +0x169,0x0000000b, +0x16a,0x0000000b, +0x16b,0x0000000b, +0x16c,0x0000000b, +0x16d,0x0000000b, +0x16e,0x0000000b, +0x16f,0x0000000b, +0x170,0x0000000b, +0x171,0x0000000b, +0x172,0x0000000b, +0x173,0x0000000b, +0x174,0x0000000b, +0x175,0x0000000b, +0x176,0x0000000b, +0x177,0x0000000b, +0x178,0x0000000b, +0x179,0x0000000b, +0x17a,0x0000000b, +0x17b,0x0000000b, +0x17c,0x0000000b, +0x17d,0x0000000b, +0x17e,0x0000000b, +0x17f,0x0000000b, +0x236,0x0000000c, +0x503,0x00000022, +0x560,0x00000000, +}; + +u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength] = { +0x0, }; + +u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength] = { +0xc78,0x7f000001, +0xc78,0x7f010001, +0xc78,0x7e020001, +0xc78,0x7d030001, +0xc78,0x7c040001, +0xc78,0x7b050001, +0xc78,0x7a060001, +0xc78,0x79070001, +0xc78,0x78080001, +0xc78,0x77090001, +0xc78,0x760a0001, +0xc78,0x750b0001, +0xc78,0x740c0001, +0xc78,0x730d0001, +0xc78,0x720e0001, +0xc78,0x710f0001, +0xc78,0x70100001, +0xc78,0x6f110001, +0xc78,0x6f120001, +0xc78,0x6e130001, +0xc78,0x6d140001, +0xc78,0x6d150001, +0xc78,0x6c160001, +0xc78,0x6b170001, +0xc78,0x6a180001, +0xc78,0x6a190001, +0xc78,0x691a0001, +0xc78,0x681b0001, +0xc78,0x671c0001, +0xc78,0x661d0001, +0xc78,0x651e0001, +0xc78,0x641f0001, +0xc78,0x63200001, +0xc78,0x4c210001, +0xc78,0x4b220001, +0xc78,0x4a230001, +0xc78,0x49240001, +0xc78,0x48250001, +0xc78,0x47260001, +0xc78,0x46270001, +0xc78,0x45280001, +0xc78,0x44290001, +0xc78,0x2c2a0001, +0xc78,0x2b2b0001, +0xc78,0x2a2c0001, +0xc78,0x292d0001, +0xc78,0x282e0001, +0xc78,0x272f0001, +0xc78,0x26300001, +0xc78,0x25310001, +0xc78,0x24320001, +0xc78,0x23330001, +0xc78,0x22340001, +0xc78,0x09350001, +0xc78,0x08360001, +0xc78,0x07370001, +0xc78,0x06380001, +0xc78,0x05390001, +0xc78,0x043a0001, +0xc78,0x033b0001, +0xc78,0x023c0001, +0xc78,0x013d0001, +0xc78,0x003e0001, +0xc78,0x003f0001, +0xc78,0x7f400001, +0xc78,0x7f410001, +0xc78,0x7e420001, +0xc78,0x7d430001, +0xc78,0x7c440001, +0xc78,0x7b450001, +0xc78,0x7a460001, +0xc78,0x79470001, +0xc78,0x78480001, +0xc78,0x77490001, +0xc78,0x764a0001, +0xc78,0x754b0001, +0xc78,0x744c0001, +0xc78,0x734d0001, +0xc78,0x724e0001, +0xc78,0x714f0001, +0xc78,0x70500001, +0xc78,0x6f510001, +0xc78,0x6f520001, +0xc78,0x6e530001, +0xc78,0x6d540001, +0xc78,0x6d550001, +0xc78,0x6c560001, +0xc78,0x6b570001, +0xc78,0x6a580001, +0xc78,0x6a590001, +0xc78,0x695a0001, +0xc78,0x685b0001, +0xc78,0x675c0001, +0xc78,0x665d0001, +0xc78,0x655e0001, +0xc78,0x645f0001, +0xc78,0x63600001, +0xc78,0x4c610001, +0xc78,0x4b620001, +0xc78,0x4a630001, +0xc78,0x49640001, +0xc78,0x48650001, +0xc78,0x47660001, +0xc78,0x46670001, +0xc78,0x45680001, +0xc78,0x44690001, +0xc78,0x2c6a0001, +0xc78,0x2b6b0001, +0xc78,0x2a6c0001, +0xc78,0x296d0001, +0xc78,0x286e0001, +0xc78,0x276f0001, +0xc78,0x26700001, +0xc78,0x25710001, +0xc78,0x24720001, +0xc78,0x23730001, +0xc78,0x22740001, +0xc78,0x09750001, +0xc78,0x08760001, +0xc78,0x07770001, +0xc78,0x06780001, +0xc78,0x05790001, +0xc78,0x047a0001, +0xc78,0x037b0001, +0xc78,0x027c0001, +0xc78,0x017d0001, +0xc78,0x007e0001, +0xc78,0x007f0001, +0xc78,0x3000001e, +0xc78,0x3001001e, +0xc78,0x3002001e, +0xc78,0x3003001e, +0xc78,0x3004001e, +0xc78,0x3405001e, +0xc78,0x3806001e, +0xc78,0x3e07001e, +0xc78,0x3e08001e, +0xc78,0x4409001e, +0xc78,0x460a001e, +0xc78,0x480b001e, +0xc78,0x480c001e, +0xc78,0x4e0d001e, +0xc78,0x560e001e, +0xc78,0x5a0f001e, +0xc78,0x5e10001e, +0xc78,0x6211001e, +0xc78,0x6c12001e, +0xc78,0x7213001e, +0xc78,0x7214001e, +0xc78,0x7215001e, +0xc78,0x7216001e, +0xc78,0x7217001e, +0xc78,0x7218001e, +0xc78,0x7219001e, +0xc78,0x721a001e, +0xc78,0x721b001e, +0xc78,0x721c001e, +0xc78,0x721d001e, +0xc78,0x721e001e, +0xc78,0x721f001e, +}; + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_phy.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_phy.h @@ -0,0 +1,202 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +/* Check to see if the file has been included already. */ +#ifndef _R8192S_PHY_H +#define _R8192S_PHY_H + + +/*--------------------------Define Parameters-------------------------------*/ +#define LOOP_LIMIT 5 +#define MAX_STALL_TIME 50 +#define AntennaDiversityValue 0x80 +#define MAX_TXPWR_IDX_NMODE_92S 63 +#define Reset_Cnt_Limit 3 + + +#define MAX_PRECMD_CNT 16 +#define MAX_RFDEPENDCMD_CNT 16 +#define MAX_POSTCMD_CNT 16 +#ifdef RTL8192SE +#define SET_RTL8192SE_RF_SLEEP(dev) \ +{ \ + u8 u1bTmp; \ + u1bTmp = read_nic_byte (dev, LDOV12D_CTRL); \ + u1bTmp |= BIT0; \ + write_nic_byte(dev, LDOV12D_CTRL, u1bTmp); \ + write_nic_byte(dev, SPS1_CTRL, 0x0); \ + write_nic_byte(dev, TXPAUSE, 0xFF); \ + write_nic_word(dev, CMDR, 0x57FC); \ + udelay(100); \ + write_nic_word(dev, CMDR, 0x77FC); \ + write_nic_byte(dev, PHY_CCA, 0x0); \ + udelay(10); \ + write_nic_word(dev, CMDR, 0x37FC); \ + udelay(10); \ + write_nic_word(dev, CMDR, 0x77FC); \ + udelay(10); \ + write_nic_word(dev, CMDR, 0x57FC); \ +} + + +#endif + +/*--------------------------Define Parameters-------------------------------*/ + + +/*------------------------------Define structure----------------------------*/ +typedef enum _SwChnlCmdID{ + CmdID_End, + CmdID_SetTxPowerLevel, + CmdID_BBRegWrite10, + CmdID_WritePortUlong, + CmdID_WritePortUshort, + CmdID_WritePortUchar, + CmdID_RF_WriteReg, +}SwChnlCmdID; + + +typedef struct _SwChnlCmd{ + SwChnlCmdID CmdID; + u32 Para1; + u32 Para2; + u32 msDelay; +}__attribute__ ((packed)) SwChnlCmd; + +extern u32 rtl819XMACPHY_Array_PG[]; +extern u32 rtl819XPHY_REG_1T2RArray[]; +extern u32 rtl819XAGCTAB_Array[]; +extern u32 rtl819XRadioA_Array[]; +extern u32 rtl819XRadioB_Array[]; +extern u32 rtl819XRadioC_Array[]; +extern u32 rtl819XRadioD_Array[]; + +typedef enum _HW90_BLOCK{ + HW90_BLOCK_MAC = 0, + HW90_BLOCK_PHY0 = 1, + HW90_BLOCK_PHY1 = 2, + HW90_BLOCK_RF = 3, + HW90_BLOCK_MAXIMUM = 4, +}HW90_BLOCK_E, *PHW90_BLOCK_E; + +typedef enum _RF90_RADIO_PATH{ + RF90_PATH_A = 0, + RF90_PATH_B = 1, + RF90_PATH_C = 2, + RF90_PATH_D = 3, +#ifndef _RTL8192_EXT_PATCH_ + RF90_PATH_MAX = 4, +#endif +}RF90_RADIO_PATH_E, *PRF90_RADIO_PATH_E; +#ifdef _RTL8192_EXT_PATCH_ +#define RF90_PATH_MAX 2 +#endif + +#define bMaskByte0 0xff +#define bMaskByte1 0xff00 +#define bMaskByte2 0xff0000 +#define bMaskByte3 0xff000000 +#define bMaskHWord 0xffff0000 +#define bMaskLWord 0x0000ffff +#define bMaskDWord 0xffffffff + +typedef enum _BaseBand_Config_Type{ + BaseBand_Config_PHY_REG = 0, + BaseBand_Config_AGC_TAB = 1, +}BaseBand_Config_Type, *PBaseBand_Config_Type; + +typedef enum _VERSION_8190{ + VERSION_8190_BD=0x3, + VERSION_8190_BE +}VERSION_8190,*PVERSION_8190; + + +typedef enum _VERSION_8192S{ + VERSION_8192S_ACUT, + VERSION_8192S_BCUT, + VERSION_8192S_CCUT +}VERSION_8192S,*PVERSION_8192S; + +typedef enum _PHY_Rate_Tx_Power_Offset_Area{ + RA_OFFSET_LEGACY_OFDM1, + RA_OFFSET_LEGACY_OFDM2, + RA_OFFSET_HT_OFDM1, + RA_OFFSET_HT_OFDM2, + RA_OFFSET_HT_OFDM3, + RA_OFFSET_HT_OFDM4, + RA_OFFSET_HT_CCK, +}RA_OFFSET_AREA,*PRA_OFFSET_AREA; +#if 0 +typedef enum _RATR_TABLE_MODE_8192S{ + RATR_INX_WIRELESS_NGB = 0, + RATR_INX_WIRELESS_NG = 1, + RATR_INX_WIRELESS_NB = 2, + RATR_INX_WIRELESS_N = 3, + RATR_INX_WIRELESS_GB = 4, + RATR_INX_WIRELESS_G = 5, + RATR_INX_WIRELESS_B = 6, + RATR_INX_WIRELESS_MC = 7, + RATR_INX_WIRELESS_A = 8, +}RATR_TABLE_MODE_8192S, *PRATR_TABLE_MODE_8192S; +#endif +/*------------------------------Define structure----------------------------*/ + + +/*------------------------Export global variable----------------------------*/ +/*------------------------Export global variable----------------------------*/ + + +/*------------------------Export Marco Definition---------------------------*/ +/*------------------------Export Marco Definition---------------------------*/ + + +/*--------------------------Exported Function prototype---------------------*/ + +extern u32 rtl8192_QueryBBReg(struct net_device* dev,u32 RegAddr, u32 BitMask); +extern void rtl8192_setBBreg(struct net_device* dev,u32 RegAddr, u32 BitMask,u32 Data); +extern u32 rtl8192_phy_QueryRFReg(struct net_device* dev,RF90_RADIO_PATH_E eRFPath, u32 RegAddr, u32 BitMask); +extern void rtl8192_phy_SetRFReg(struct net_device* dev,RF90_RADIO_PATH_E eRFPath, u32 RegAddr,u32 BitMask,u32 Data); + +bool rtl8192_phy_checkBBAndRF(struct net_device* dev, HW90_BLOCK_E CheckBlock, RF90_RADIO_PATH_E eRFPath); + + +extern bool PHY_MACConfig8192S(struct net_device* dev); +extern bool PHY_BBConfig8192S(struct net_device* dev); +extern bool PHY_RFConfig8192S(struct net_device* dev); + +extern u8 rtl8192_phy_ConfigRFWithHeaderFile(struct net_device* dev,RF90_RADIO_PATH_E eRFPath); +extern void rtl8192_SetBWMode(struct net_device* dev,HT_CHANNEL_WIDTH ChnlWidth,HT_EXTCHNL_OFFSET Offset ); +extern u8 rtl8192_phy_SwChnl(struct net_device* dev,u8 channel); +extern u8 rtl8192_phy_CheckIsLegalRFPath(struct net_device* dev,u32 eRFPath ); +extern void rtl8192_BBConfig(struct net_device* dev); +extern void PHY_IQCalibrateBcut(struct net_device* dev); +extern void PHY_IQCalibrate(struct net_device* dev); +extern void PHY_GetHWRegOriginalValue(struct net_device* dev); + +extern void InitialGainOperateWorkItemCallBack(void *data); +void rtl8192_phy_setTxPower(struct net_device* dev, u8 channel); + +/*--------------------------Exported Function prototype---------------------*/ +bool rtl8192se_set_fw_cmd(struct net_device* dev, FW_CMD_IO_TYPE FwCmdIO); +extern void PHY_SetBeaconHwReg( struct net_device* dev, u16 BeaconInterval); +void ChkFwCmdIoDone(struct net_device* dev); +void PHY_SwitchEphyParameter(struct net_device* dev); +bool PHY_SetRFPowerState(struct net_device* dev, RT_RF_POWER_STATE eRFPowerState); + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_led.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_led.c @@ -0,0 +1,1356 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "../rtl_core.h" +#ifdef RTL8192SE +#define LED_BLINK_NORMAL_INTERVAL 100 +#define LED_BLINK_SLOWLY_INTERVAL 200 + +#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX 100 +#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX 2000 + +#define LED_BLINK_SLOWLY_INTERVAL_PORNET 1000 +#define LED_BLINK_NORMAL_INTERVAL_PORNET 100 + + +#define LED_CM2_BLINK_ON_INTERVAL 250 +#define LED_CM2_BLINK_OFF_INTERVAL 4750 + +#define LED_CM8_BLINK_OFF_INTERVAL 3750 + +#define LED_RunTop_BLINK_INTERVAL 300 + +#define LED_CM3_BLINK_INTERVAL 1500 + + + +static void BlinkTimerCallback(unsigned long data); + + +void InitLed8190Pci(struct net_device *dev, PLED_8190 pLed,LED_PIN_8190 LedPin) +{ + pLed->dev = dev; + pLed->LedPin = LedPin; + + pLed->CurrLedState = LED_OFF; + pLed->bLedOn = false; + pLed->bLedBlinkInProgress = false; + pLed->BlinkTimes = 0; + pLed->BlinkingLedState = LED_OFF; + + setup_timer(&pLed->BlinkTimer, + BlinkTimerCallback, + (unsigned long) pLed); +} + +void DeInitLed8190Pci(PLED_8190 pLed) +{ + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = false; +} + +void SwLedOn( struct net_device *dev , PLED_8190 pLed) +{ + u8 LedCfg; + + LedCfg = read_nic_byte(dev, LEDCFG); + + switch(pLed->LedPin) + { + case LED_PIN_GPIO0: + break; + + case LED_PIN_LED0: + write_nic_byte(dev, LEDCFG, LedCfg&0xf0); + break; + + case LED_PIN_LED1: + write_nic_byte(dev, LEDCFG, LedCfg&0x0f); + break; + + default: + break; + } + + pLed->bLedOn = true; +} + +void SwLedOff(struct net_device *dev, PLED_8190 pLed) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 LedCfg; + + LedCfg = read_nic_byte(dev, LEDCFG); + + switch(pLed->LedPin) + { + case LED_PIN_GPIO0: + break; + + case LED_PIN_LED0: + LedCfg &= 0xf0; + + if(priv->bLedOpenDrain == true) + write_nic_byte(dev, LEDCFG, (LedCfg|BIT1)); + else + write_nic_byte(dev, LEDCFG, (LedCfg|BIT3)); + break; + + case LED_PIN_LED1: + LedCfg &= 0x0f; + write_nic_byte(dev, LEDCFG, (LedCfg|BIT7)); + break; + + default: + break; + } + + pLed->bLedOn = false; +} + + +void InitSwLeds(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + InitLed8190Pci( + dev, + &(priv->SwLed0), + LED_PIN_LED0); + + InitLed8190Pci( + dev, + &(priv->SwLed1), + LED_PIN_LED1); +} + + +void DeInitSwLeds(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + DeInitLed8190Pci( &(priv->SwLed0) ); + DeInitLed8190Pci( &(priv->SwLed1) ); +} + +void HwLedBlink(struct net_device *dev, PLED_8190 pLed) +{ + + + switch(pLed->LedPin) + { + case LED_PIN_GPIO0: + break; + + case LED_PIN_LED0: + break; + + case LED_PIN_LED1: + break; + + default: + break; + } + + pLed->bLedOn = true; +} + + + +void SwLedBlink(PLED_8190 pLed) +{ + struct net_device *dev = (struct net_device *)pLed->dev; + struct r8192_priv *priv = rtllib_priv(dev); + bool bStopBlinking = false; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + pLed->BlinkTimes--; + switch(pLed->CurrLedState) + { + case LED_BLINK_NORMAL: + case LED_BLINK_TXRX: + case LED_BLINK_RUNTOP: + if(pLed->BlinkTimes == 0) + { + bStopBlinking = true; + } + break; + + case LED_SCAN_BLINK: + if( (priv->rtllib->state == RTLLIB_LINKED) && + (!rtllib_act_scanning(priv->rtllib,true))&& + (pLed->BlinkTimes % 2 == 0)) + { + bStopBlinking = true; + } + break; + + case LED_NO_LINK_BLINK: + case LED_BLINK_StartToBlink: + if( (priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_INFRA)) + { + bStopBlinking = true; + } + else if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_ADHOC)) + { + bStopBlinking = true; + } + else if(pLed->BlinkTimes == 0) + { + bStopBlinking = true; + } + break; + + case LED_BLINK_CAMEO: + if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_INFRA)) + { + bStopBlinking = true; + } + else if((priv->rtllib->state == RTLLIB_LINKED) && (priv->rtllib->iw_mode == IW_MODE_ADHOC) ) + { + bStopBlinking = true; + } + break; + + default: + bStopBlinking = true; + break; + } + + if(bStopBlinking) + { + if( priv->rtllib->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if(pLed->CurrLedState == LED_BLINK_TXRX) + { + SwLedOff(dev, pLed); + } + else if(pLed->CurrLedState == LED_BLINK_RUNTOP) + { + SwLedOff(dev, pLed); + } + else if( (priv->rtllib->state == RTLLIB_LINKED) && (pLed->bLedOn == false)) + { + SwLedOn(dev, pLed); + } + else if( (priv->rtllib->state != RTLLIB_LINKED) && pLed->bLedOn == true) + { + SwLedOff(dev, pLed); + } + + pLed->BlinkTimes = 0; + pLed->bLedBlinkInProgress = false; + } + else + { + if( pLed->BlinkingLedState == LED_ON ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + + switch( pLed->CurrLedState ) + { + case LED_BLINK_NORMAL: + case LED_BLINK_TXRX: + case LED_BLINK_StartToBlink: + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + break; + + case LED_BLINK_SLOWLY: + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + break; + + case LED_SCAN_BLINK: + case LED_NO_LINK_BLINK: + if( pLed->bLedOn ) + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + else + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_OFF_INTERVAL)); + break; + + case LED_BLINK_RUNTOP: + mod_timer(&(pLed->BlinkTimer),jiffies + MSECS(LED_RunTop_BLINK_INTERVAL)); + break; + + case LED_BLINK_CAMEO: + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET)); + break; + + default: + RT_TRACE(COMP_ERR, "SwLedCm2Blink(): unexpected state!\n"); + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + break; + } + } +} + +void SwLedBlink5(PLED_8190 pLed) +{ + struct net_device *dev = (struct net_device *)pLed->dev; + struct r8192_priv *priv = rtllib_priv(dev); + bool bStopBlinking = false; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + switch(pLed->CurrLedState) + { + case LED_OFF: + SwLedOff(dev, pLed); + break; + + case LED_BLINK_SLOWLY: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX)); + break; + + case LED_BLINK_NORMAL: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = true; + } + if(bStopBlinking) + { + if( priv->rtllib->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + pLed->bLedSlowBlinkInProgress = true; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX)); + } + pLed->BlinkTimes = 0; + pLed->bLedBlinkInProgress = false; + } + else + { + if( priv->rtllib->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_NETTRONIX)); + } + } + break; + + default: + break; + } + +} + + +void SwLedBlink6(PLED_8190 pLed) +{ + struct net_device *dev = (struct net_device *)pLed->dev; + struct r8192_priv *priv = rtllib_priv(dev); + bool bStopBlinking = false; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + switch(pLed->CurrLedState) + { + case LED_OFF: + SwLedOff(dev, pLed); + break; + + case LED_BLINK_SLOWLY: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET)); + break; + + case LED_BLINK_NORMAL: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = true; + } + if(bStopBlinking) + { + if( priv->rtllib->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + pLed->bLedSlowBlinkInProgress = true; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET)); + } + pLed->BlinkTimes = 0; + pLed->bLedBlinkInProgress = false; + } + else + { + if( priv->rtllib->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_PORNET)); + } + } + break; + + default: + break; + } + +} + +void SwLedBlink7( PLED_8190 pLed) +{ + struct net_device *dev = (struct net_device *)pLed->dev; + + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); +} + +void BlinkTimerCallback(unsigned long data) +{ + PLED_8190 pLed = (PLED_8190)data; + struct net_device *dev = (struct net_device *)pLed->dev; + struct r8192_priv *priv = rtllib_priv(dev); + + switch(priv->LedStrategy) + { + case SW_LED_MODE1: + break; + case SW_LED_MODE2: + break; + case SW_LED_MODE3: + break; + case SW_LED_MODE5: + break; + case SW_LED_MODE6: + break; + + case SW_LED_MODE7: + SwLedBlink7(pLed); + break; + + default: + break; + } +} + +void SwLedControlMode0(struct net_device *dev,LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + PLED_8190 pLed1 = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_TX: + case LED_CTL_RX: + break; + + case LED_CTL_LINK: + pLed0->CurrLedState = LED_ON; + SwLedOn(dev, pLed0); + + pLed1->CurrLedState = LED_BLINK_NORMAL; + HwLedBlink(dev, pLed1); + break; + + case LED_CTL_POWER_ON: + pLed0->CurrLedState = LED_OFF; + SwLedOff(dev, pLed0); + + pLed1->CurrLedState = LED_BLINK_NORMAL; + HwLedBlink(dev, pLed1); + + break; + + case LED_CTL_POWER_OFF: + pLed0->CurrLedState = LED_OFF; + SwLedOff(dev, pLed0); + + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + break; + + case LED_CTL_SITE_SURVEY: + break; + + case LED_CTL_NO_LINK: + pLed0->CurrLedState = LED_OFF; + SwLedOff(dev, pLed0); + + pLed1->CurrLedState = LED_BLINK_NORMAL; + HwLedBlink(dev, pLed1); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "Led0 %d Led1 %d\n", pLed0->CurrLedState, pLed1->CurrLedState); +} + + +void SwLedControlMode1(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->bLedBlinkInProgress = true; + + pLed->CurrLedState = LED_BLINK_NORMAL; + pLed->BlinkTimes = 2; + + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_CTL_SITE_SURVEY: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->bLedBlinkInProgress = true; + + if(priv->rtllib->state == RTLLIB_LINKED) + { + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 4; + } + else + { + pLed->CurrLedState = LED_NO_LINK_BLINK; + pLed->BlinkTimes = 24; + } + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_OFF_INTERVAL)); + } + } + else + { + if(pLed->CurrLedState != LED_NO_LINK_BLINK) + { + if(priv->rtllib->state == RTLLIB_LINKED) + { + pLed->CurrLedState = LED_SCAN_BLINK; + } + else + { + pLed->CurrLedState = LED_NO_LINK_BLINK; + } + } + } + break; + + case LED_CTL_NO_LINK: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->bLedBlinkInProgress = true; + + pLed->CurrLedState = LED_NO_LINK_BLINK; + pLed->BlinkTimes = 24; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_OFF_INTERVAL)); + } + } + else + { + pLed->CurrLedState = LED_NO_LINK_BLINK; + } + break; + + case LED_CTL_LINK: + pLed->CurrLedState = LED_ON; + if( pLed->bLedBlinkInProgress == false ) + { + SwLedOn(dev, pLed); + } + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + if(pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "Led %d \n", pLed->CurrLedState); +} + +void SwLedControlMode2(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + PLED_8190 pLed1 = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_POWER_ON: + pLed0->CurrLedState = LED_OFF; + SwLedOff(dev, pLed0); + + pLed1->CurrLedState = LED_BLINK_CAMEO; + if( pLed1->bLedBlinkInProgress == false ) + { + pLed1->bLedBlinkInProgress = true; + + pLed1->BlinkTimes = 6; + + if( pLed1->bLedOn ) + pLed1->BlinkingLedState = LED_OFF; + else + pLed1->BlinkingLedState = LED_ON; + mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET)); + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed0->bLedBlinkInProgress == false ) + { + pLed0->bLedBlinkInProgress = true; + + pLed0->CurrLedState = LED_BLINK_TXRX; + pLed0->BlinkTimes = 2; + + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_CTL_NO_LINK: + pLed1->CurrLedState = LED_BLINK_CAMEO; + if( pLed1->bLedBlinkInProgress == false ) + { + pLed1->bLedBlinkInProgress = true; + + pLed1->BlinkTimes = 6; + + if( pLed1->bLedOn ) + pLed1->BlinkingLedState = LED_OFF; + else + pLed1->BlinkingLedState = LED_ON; + mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET)); + } + break; + + case LED_CTL_LINK: + pLed1->CurrLedState = LED_ON; + if( pLed1->bLedBlinkInProgress == false ) + { + SwLedOn(dev, pLed1); + } + break; + + case LED_CTL_POWER_OFF: + pLed0->CurrLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + if(pLed0->bLedBlinkInProgress) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedBlinkInProgress = false; + } + if(pLed1->bLedBlinkInProgress) + { + del_timer_sync(&(pLed1->BlinkTimer)); + pLed1->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed0); + SwLedOff(dev, pLed1); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "Led0 %d, Led1 %d \n", pLed0->CurrLedState, pLed1->CurrLedState); +} + + + +void SwLedControlMode3(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + PLED_8190 pLed1 = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_POWER_ON: + pLed0->CurrLedState = LED_ON; + SwLedOn(dev, pLed0); + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed1->bLedBlinkInProgress == false ) + { + pLed1->bLedBlinkInProgress = true; + + pLed1->CurrLedState = LED_BLINK_RUNTOP; + pLed1->BlinkTimes = 2; + + if( pLed1->bLedOn ) + pLed1->BlinkingLedState = LED_OFF; + else + pLed1->BlinkingLedState = LED_ON; + + mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_RunTop_BLINK_INTERVAL)); + } + break; + + case LED_CTL_POWER_OFF: + pLed0->CurrLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + if(pLed0->bLedBlinkInProgress) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedBlinkInProgress = false; + } + if(pLed1->bLedBlinkInProgress) + { + del_timer_sync(&(pLed1->BlinkTimer)); + pLed1->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed0); + SwLedOff(dev, pLed1); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "Led0 %d, Led1 %d \n", pLed0->CurrLedState, pLed1->CurrLedState); +} + + +void SwLedControlMode4(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + PLED_8190 pLed1 = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_POWER_ON: + pLed1->CurrLedState = LED_ON; + SwLedOn(dev, pLed1); + pLed0->CurrLedState = LED_OFF; + SwLedOff(dev, pLed0); + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed0->bLedBlinkInProgress == false ) + { + pLed0->bLedBlinkInProgress = true; + + pLed0->CurrLedState = LED_BLINK_RUNTOP; + pLed0->BlinkTimes = 2; + + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_RunTop_BLINK_INTERVAL)); + } + break; + + case LED_CTL_POWER_OFF: + pLed0->CurrLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + if(pLed0->bLedBlinkInProgress) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedBlinkInProgress = false; + } + if(pLed1->bLedBlinkInProgress) + { + del_timer_sync(&(pLed1->BlinkTimer)); + pLed1->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed0); + SwLedOff(dev, pLed1); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "Led0 %d, Led1 %d \n", pLed0->CurrLedState, pLed1->CurrLedState); +} + +void SwLedControlMode5(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + PLED_8190 pLed1 = &(priv->SwLed1); + switch(LedAction) + { + case LED_CTL_POWER_ON: + case LED_CTL_START_TO_LINK: + case LED_CTL_NO_LINK: + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + + + if( pLed0->bLedSlowBlinkInProgress == false ) + { + pLed0->bLedSlowBlinkInProgress = true; + pLed0->CurrLedState = LED_BLINK_SLOWLY; + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX)); + } + + break; + + case LED_CTL_TX: + case LED_CTL_RX: + pLed1->CurrLedState = LED_ON; + SwLedOn(dev, pLed1); + + if( pLed0->bLedBlinkInProgress == false ) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedSlowBlinkInProgress = false; + pLed0->bLedBlinkInProgress = true; + pLed0->CurrLedState = LED_BLINK_NORMAL; + pLed0->BlinkTimes = 2; + + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_NETTRONIX)); + } + break; + + case LED_CTL_LINK: + pLed1->CurrLedState = LED_ON; + SwLedOn(dev, pLed1); + + if( pLed0->bLedSlowBlinkInProgress == false ) + { + pLed0->bLedSlowBlinkInProgress = true; + pLed0->CurrLedState = LED_BLINK_SLOWLY; + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_NETTRONIX)); + } + break; + + + case LED_CTL_POWER_OFF: + pLed0->CurrLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + if( pLed0->bLedSlowBlinkInProgress == true ) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedSlowBlinkInProgress = false; + } + if(pLed0->bLedBlinkInProgress == true) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed0); + SwLedOff(dev, pLed1); + break; + + default: + break; + } + + +} + +void SwLedControlMode6(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + PLED_8190 pLed1 = &(priv->SwLed1); + + + switch(LedAction) + { + case LED_CTL_POWER_ON: + case LED_CTL_START_TO_LINK: + case LED_CTL_NO_LINK: + case LED_CTL_LINK: + case LED_CTL_SITE_SURVEY: + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + + if( pLed0->bLedSlowBlinkInProgress == false ) + { + pLed0->bLedSlowBlinkInProgress = true; + pLed0->CurrLedState = LED_BLINK_SLOWLY; + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL_PORNET)); + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + if( pLed0->bLedBlinkInProgress == false ) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedSlowBlinkInProgress = false; + pLed0->bLedBlinkInProgress = true; + pLed0->CurrLedState = LED_BLINK_NORMAL; + pLed0->BlinkTimes = 2; + if( pLed0->bLedOn ) + pLed0->BlinkingLedState = LED_OFF; + else + pLed0->BlinkingLedState = LED_ON; + mod_timer(&(pLed0->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL_PORNET)); + } + break; + + case LED_CTL_POWER_OFF: + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + + pLed0->CurrLedState = LED_OFF; + if( pLed0->bLedSlowBlinkInProgress == true ) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedSlowBlinkInProgress = false; + } + if(pLed0->bLedBlinkInProgress == true) + { + del_timer_sync(&(pLed0->BlinkTimer)); + pLed0->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed0); + break; + + default: + break; + + } +} + + +void SwLedControlMode7(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + + switch(LedAction) + { + case LED_CTL_POWER_ON: + case LED_CTL_LINK: + case LED_CTL_NO_LINK: + SwLedOn(dev, pLed0); + break; + + case LED_CTL_POWER_OFF: + SwLedOff(dev, pLed0); + break; + + default: + break; + + } +} + +void +SwLedControlMode8(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed = &(priv->SwLed0); + + switch(LedAction) + { + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed->bLedBlinkInProgress == false && priv->rtllib->state == RTLLIB_LINKED) + { + pLed->bLedBlinkInProgress = true; + + pLed->CurrLedState = LED_BLINK_NORMAL; + pLed->BlinkTimes = 2; + + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_CTL_SITE_SURVEY: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->bLedBlinkInProgress = true; + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 2; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL)); + } + } + else if(pLed->CurrLedState != LED_SCAN_BLINK) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 2; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL)); + } + } + break; + + case LED_CTL_POWER_ON: + case LED_CTL_NO_LINK: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->bLedBlinkInProgress = true; + + pLed->CurrLedState = LED_NO_LINK_BLINK; + pLed->BlinkTimes = 24; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL)); + } + } + else if(pLed->CurrLedState != LED_SCAN_BLINK && pLed->CurrLedState != LED_NO_LINK_BLINK) + { + pLed->CurrLedState = LED_NO_LINK_BLINK; + pLed->BlinkTimes = 24; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM2_BLINK_ON_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_CM8_BLINK_OFF_INTERVAL)); + } + } + break; + + case LED_CTL_LINK: + pLed->CurrLedState = LED_ON; + if(pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = false; + } + SwLedOn(dev, pLed); + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + if(pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed); + break; + + default: + break; + } +} + +void +SwLedControlMode9(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed = &(priv->SwLed0); + + switch(LedAction) + { + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->bLedBlinkInProgress = true; + + pLed->CurrLedState = LED_BLINK_NORMAL; + pLed->BlinkTimes = 2; + + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_CTL_SITE_SURVEY: + if(priv->rtllib->LinkDetectInfo.bBusyTraffic && priv->rtllib->state == RTLLIB_LINKED) + ; + else + { + if( pLed->bLedBlinkInProgress == true ) + del_timer_sync(&(pLed->BlinkTimer)); + else + pLed->bLedBlinkInProgress = true; + + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 24; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + } + break; + + case LED_CTL_POWER_ON: + case LED_CTL_NO_LINK: + case LED_CTL_LINK: + if( pLed->bLedBlinkInProgress == false ) + { + pLed->CurrLedState = LED_ON; + SwLedOn(dev, pLed); + } + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + if(pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = false; + } + SwLedOff(dev, pLed); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "LED9 CurrLedState %d\n", pLed->CurrLedState); + +} + + + +void LedControl8192SE(struct net_device *dev, LED_CTL_MODE LedAction) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(IS_NIC_DOWN(priv)) + return; + +#ifdef TO_DO_LIST + if(Adapter->bInHctTest) + return; +#endif + + if( priv->rtllib->eRFPowerState != eRfOn && + (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX || + LedAction == LED_CTL_SITE_SURVEY || + LedAction == LED_CTL_LINK || + LedAction == LED_CTL_NO_LINK|| + LedAction == LED_CTL_START_TO_LINK || + LedAction == LED_CTL_POWER_ON) ) + { + return; + } + + RT_TRACE(COMP_LED, "LedAction %d, \n", LedAction); + + switch(priv->LedStrategy) + { + case SW_LED_MODE0: + break; + case SW_LED_MODE1: + break; + case SW_LED_MODE2: + break; + case SW_LED_MODE3: + break; + case SW_LED_MODE4: + break; + case SW_LED_MODE5: + break; + + case SW_LED_MODE6: + break; + + case SW_LED_MODE7: + SwLedControlMode7(dev, LedAction); + break; + case SW_LED_MODE8: + SwLedControlMode8(dev, LedAction); + break; + + case SW_LED_MODE9: + SwLedControlMode9(dev, LedAction); + break; + + default: + break; + } +} + +#ifdef TO_DO_LIST +#ifdef NDIS50_MINIPORT +void LedBlinkTimerStallCheck(struct net_device *dev) +{ +} + + +void DoLedTimerStallCheck(PLED_8190 pLed) +{ +} +#endif +#endif +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_dev.c @@ -0,0 +1,5004 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "../rtl_core.h" +#include "../rtl_dm.h" +#include "../rtl_wx.h" +#include "r8192S_phy.h" +#include "r8192S_phyreg.h" +#include "r8192S_rtl6052.h" +#include "r8192S_Efuse.h" + +#ifdef _RTL8192_EXT_PATCH_ +#include "../../../mshclass/msh_class.h" +#include "../rtl_mesh.h" +#endif + +extern int WDCAPARA_ADD[]; + +void rtl8192se_start_beacon(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_network *net = &priv->rtllib->current_network; + u16 BcnTimeCfg = 0; + u16 BcnCW = 6; + u16 BcnIFS = 0xf; + + DMESG("Enabling beacon TX"); + rtl8192_irq_disable(dev); + + write_nic_word(dev, ATIMWND, 2); + + write_nic_word(dev, BCN_INTERVAL, net->beacon_interval); + PHY_SetBeaconHwReg(dev, net->beacon_interval); + +#ifdef RTL8192SE + write_nic_word(dev, BCN_DRV_EARLY_INT, 10<<4); +#else + write_nic_word(dev, BCN_DRV_EARLY_INT, 10); +#endif + write_nic_word(dev, BCN_DMATIME, 256); + + write_nic_byte(dev, BCN_ERR_THRESH, 100); + +#if 1 + switch(priv->rtllib->iw_mode) + { + case IW_MODE_ADHOC: + case IW_MODE_MESH: + BcnTimeCfg |= (BcnCW<beacon_interval); + write_nic_dword(dev, WFM5, 0xF1000000 |((u16)( u1Temp) << 8)); + ChkFwCmdIoDone(dev); + } +#else + BcnTimeCfg |= BcnCW<rtllib->iw_mode) { + case IW_MODE_INFRA: + if (priv->rtllib->state == RTLLIB_LINKED) + msr |= (MSR_LINK_MANAGED << MSR_LINK_SHIFT); + else + msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT); + LedAction = LED_CTL_LINK; + break; + case IW_MODE_ADHOC: + if (priv->rtllib->state == RTLLIB_LINKED) + msr |= (MSR_LINK_ADHOC << MSR_LINK_SHIFT); + else + msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT); + break; + case IW_MODE_MASTER: + if (priv->rtllib->state == RTLLIB_LINKED) + msr |= (MSR_LINK_MASTER << MSR_LINK_SHIFT); + else + msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT); + break; +#ifdef _RTL8192_EXT_PATCH_ + case IW_MODE_MESH: + printk("%s: iw_mode=%d state=%d only_mesh=%d mesh_state=%d\n", __FUNCTION__,priv->rtllib->iw_mode,priv->rtllib->state, priv->rtllib->only_mesh, priv->rtllib->mesh_state); + if (priv->rtllib->only_mesh) { + if (priv->rtllib->mesh_state == RTLLIB_MESH_LINKED) + msr |= (MSR_LINK_MASTER<rtllib->mesh_state == RTLLIB_MESH_LINKED) { + msr |= (MSR_LINK_ADHOC << MSR_LINK_SHIFT); + } else { + msr |= (MSR_LINK_NONE << MSR_LINK_SHIFT); + } + if (priv->rtllib->state == RTLLIB_LINKED) + msr |= (MSR_LINK_MANAGED << MSR_LINK_SHIFT); + } + break; +#endif + default: + break; + } + + write_nic_byte(dev, MSR, msr); + if(priv->rtllib->LedControlHandler) + priv->rtllib->LedControlHandler(dev, LedAction); +} + +static void rtl8192se_config_hw_for_load_fail(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u16 i; + u8 sMacAddr[6] = {0x00, 0xE0, 0x4C, 0x81, 0x92, 0x00}; + u8 rf_path, index; + u32 tmp1111 = 0; + u32 tmp2222 = 0; + + RT_TRACE(COMP_INIT, "====> rtl8192se_config_hw_for_load_fail\n"); + + for(;tmp2222<0xff;tmp2222+=4) + { + tmp1111= read_nic_dword(dev, tmp2222); + } + + write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); + mdelay(10); + write_nic_byte(dev, PMC_FSM, 0x02); + + priv->eeprom_vid= 0; + priv->eeprom_did= 0; + priv->eeprom_ChannelPlan= 0; + priv->eeprom_CustomerID= 0; + + get_random_bytes(&sMacAddr[5], 1); + for(i = 0; i < 6; i++) + dev->dev_addr[i] = sMacAddr[i]; + + + priv->rf_type= RTL819X_DEFAULT_RF_TYPE; + priv->rf_chip = RF_6052; + +#if (EEPROM_OLD_FORMAT_SUPPORT == 1) + for(i=0; i<14; i++) + { + priv->EEPROMTxPowerLevelCCK[i] = (u8)(EEPROM_Default_TxPower & 0xff); + RT_TRACE(COMP_INIT, "CCK 2.4G Tx Pwr Index %d = 0x%02x\n", + i, priv->EEPROMTxPowerLevelCCK[i]); + } + + for(i=0; i<14; i++) + { + priv->EEPROMTxPowerLevelOFDM24G[i] = (u8)(EEPROM_Default_TxPower & 0xff); + RT_TRACE(COMP_INIT, "OFDM 2.4G Tx Pwr Index %d = 0x%02x\n", + i, priv->EEPROMTxPowerLevelOFDM24G[i]); + } + + for(i=0; i<14; i++) + { + priv->TxPowerLevelOFDM24G[i] = priv->EEPROMTxPowerLevelOFDM24G[i]; + priv->TxPowerLevelCCK[i] = priv->EEPROMTxPowerLevelCCK[i]; + } + for(i=0; i<6; i++) + { + priv->EEPROMHT2T_TxPwr[i] = EEPROM_Default_HT2T_TxPwr; + } + +#else + for (rf_path = 0; rf_path < 2; rf_path++) + { + for (i = 0; i < 3; i++) + { + priv->RfCckChnlAreaTxPwr[rf_path][i] = + priv->RfOfdmChnlAreaTxPwr1T[rf_path][i] = + priv->RfOfdmChnlAreaTxPwr2T[rf_path][i] = + EEPROM_Default_TxPowerLevel; + } + } + + for (rf_path = 0; rf_path < 2; rf_path++) + { + for(i=0; i<14; i++) + { + if (i < 3) + index = 0; + else if (i < 8) + index = 1; + else + index = 2; + + priv->RfTxPwrLevelCck[rf_path][i] = + priv->RfCckChnlAreaTxPwr[rf_path][index] = + priv->RfTxPwrLevelOfdm1T[rf_path][i] = + priv->RfOfdmChnlAreaTxPwr1T[rf_path][index] = + priv->RfTxPwrLevelOfdm2T[rf_path][i] = + priv->RfOfdmChnlAreaTxPwr2T[rf_path][index] = + (u8)(EEPROM_Default_TxPower & 0xff); + + if (rf_path == 0) + { + priv->TxPowerLevelOFDM24G[i] = (u8)(EEPROM_Default_TxPower & 0xff); + priv->TxPowerLevelCCK[i] = (u8)(EEPROM_Default_TxPower & 0xff); + } + } + + } + + RT_TRACE(COMP_INIT, "All TxPwr = 0x%x\n", EEPROM_Default_TxPower); + + for(i=0; i<14; i++) + { + priv->TxPwrHt20Diff[RF90_PATH_A][i] = DEFAULT_HT20_TXPWR_DIFF; + priv->TxPwrHt20Diff[RF90_PATH_B][i] = DEFAULT_HT20_TXPWR_DIFF; + + priv->TxPwrLegacyHtDiff[0][i] = EEPROM_Default_LegacyHTTxPowerDiff; + priv->TxPwrLegacyHtDiff[1][i] = EEPROM_Default_LegacyHTTxPowerDiff; + } + + priv->TxPwrSafetyFlag = 0; +#endif + + priv->EEPROMTxPowerDiff = EEPROM_Default_LegacyHTTxPowerDiff; + priv->LegacyHTTxPowerDiff = priv->EEPROMTxPowerDiff; + RT_TRACE(COMP_INIT, "TxPowerDiff = %#x\n", priv->EEPROMTxPowerDiff); + + for (rf_path = 0; rf_path < 2; rf_path++) + { + for (i = 0; i < 3; i++) + { + priv->EEPROMPwrGroup[rf_path][i] = 0; + } + } + + for (rf_path = 0; rf_path < 2; rf_path++) + { + for(i=0; i<14; i++) + { + if (i < 3) + index = 0; + else if (i < 8) + index = 1; + else + index = 2; + priv->PwrGroupHT20[rf_path][i] = (priv->EEPROMPwrGroup[rf_path][index]&0xf); + priv->PwrGroupHT40[rf_path][i] = ((priv->EEPROMPwrGroup[rf_path][index]&0xf0)>>4); + } + } + priv->EEPROMRegulatory = 0; + + priv->EEPROMTSSI_A = EEPROM_Default_TSSI; + priv->EEPROMTSSI_B = EEPROM_Default_TSSI; + + for(i=0; i<6; i++) + { + priv->EEPROMHT2T_TxPwr[i] = EEPROM_Default_HT2T_TxPwr; + } + + + priv->EEPROMThermalMeter = EEPROM_Default_ThermalMeter; + priv->ThermalMeter[0] = (priv->EEPROMThermalMeter&0x1f); + priv->TSSI_13dBm = priv->EEPROMThermalMeter *100; + + priv->BluetoothCoexist = EEPROM_Default_BlueToothCoexist; + priv->EEPROMBluetoothType = EEPROM_Default_BlueToothType; + priv->EEPROMBluetoothAntNum = EEPROM_Default_BlueToothAntNum; + priv->EEPROMBluetoothAntIsolation = EEPROM_Default_BlueToothAntIso; + + priv->EEPROMCrystalCap = EEPROM_Default_CrystalCap; + priv->CrystalCap = priv->EEPROMCrystalCap; + + priv->eeprom_ChannelPlan = 0; + priv->eeprom_version = 1; + priv->bTXPowerDataReadFromEEPORM = false; + + priv->rf_type = RTL819X_DEFAULT_RF_TYPE; + priv->rf_chip = RF_6052; + priv->eeprom_CustomerID = 0; + RT_TRACE(COMP_INIT, "EEPROM Customer ID: 0x%2x\n", priv->eeprom_CustomerID); + + + priv->EEPROMBoardType = EEPROM_Default_BoardType; + RT_TRACE(COMP_INIT, "BoardType = %#x\n", priv->EEPROMBoardType); + + priv->LedStrategy = SW_LED_MODE7; + + + RT_TRACE(COMP_INIT,"<==== rtl8192se_config_hw_for_load_fail\n"); +} + +static void rtl8192se_get_IC_Inferiority(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 Efuse_ID; + + priv->IC_Class = IC_INFERIORITY_A; + if((priv->epromtype == EEPROM_BOOT_EFUSE) && !priv->AutoloadFailFlag) + { + Efuse_ID = EFUSE_Read1Byte(dev, EFUSE_IC_ID_OFFSET); + + if(Efuse_ID == 0xfe) + { + priv->IC_Class = IC_INFERIORITY_B; + + } + } +} + +void +HalCustomizedBehavior8192S(struct net_device* dev) +{ + struct r8192_priv* priv = rtllib_priv(dev); + priv->rtllib->bForcedShowRateStill = false; + switch(priv->CustomerID) + { + case RT_CID_DEFAULT: + priv->LedStrategy = SW_LED_MODE7; + if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A07) + { + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + priv->rtllib->bForcedShowRateStill = true; + } + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x1A3B && priv->eeprom_smid == 0x1A04) + { + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + priv->rtllib->bForcedShowRateStill = true; + } + else if(priv->eeprom_svid == 0x1A3B && (priv->eeprom_smid == 0x1104 || + priv->eeprom_smid == 0x1107)) + { + priv->rtllib->bForcedShowRateStill = true; + } + else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7171){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7174){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7150){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7172){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + }else if(priv->eeprom_vid == 0x10ec && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10ec && priv->eeprom_smid == 0x7186){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + break; + + break; + + case RT_CID_819x_Acer: + priv->LedStrategy = SW_LED_MODE7; + break; + + case RT_CID_TOSHIBA: + priv->rtllib->current_network.channel = 10; + priv->LedStrategy = SW_LED_MODE7; + priv->EEPROMRegulatory = 1; + if(priv->eeprom_smid >= 0x7000 && priv->eeprom_smid < 0x8000){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + priv->rtllib->bForcedBgMode = true; + } + break; + case RT_CID_CCX: + priv->DMFlag |= (HAL_DM_DIG_DISABLE | HAL_DM_HIPWR_DISABLE); + break; + + case RT_CID_819x_Lenovo: + priv->LedStrategy = SW_LED_MODE7; + if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + break; + + case RT_CID_819x_QMI: + priv->LedStrategy = SW_LED_MODE8; + if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A){ + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->RegWirelessMode = WIRELESS_MODE_G; + priv->rtllib->mode = WIRELESS_MODE_G; + } + break; + + case RT_CID_819x_MSI: + priv->LedStrategy = SW_LED_MODE9; + break; + + case RT_CID_819x_HP: + priv->LedStrategy = SW_LED_MODE7; + priv->bLedOpenDrain = true; + + case RT_CID_WHQL: + ; + break; + + default: + RT_TRACE(COMP_INIT,"Unkown hardware Type \n"); + break; + } +} + +static void rtl8192se_read_eeprom_info(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u16 i,usValue; + u16 EEPROMId; +#if (EEPROM_OLD_FORMAT_SUPPORT == 1) + u8 tmpBuffer[30]; +#endif + u8 tempval; + u8 hwinfo[HWSET_MAX_SIZE_92S]; + u8 rf_path, index; + + RT_TRACE(COMP_INIT, "====> rtl8192se_read_eeprom_info\n"); + + if (priv->epromtype== EEPROM_93C46) + { + write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); + mdelay(10); + write_nic_byte(dev, PMC_FSM, 0x02); + + RT_TRACE(COMP_INIT, "EEPROM\n"); + for(i = 0; i < HWSET_MAX_SIZE_92S; i += 2) + { + usValue = eprom_read(dev, (u16) (i>>1)); + *((u16*)(&hwinfo[i])) = usValue; + } + } + else if (priv->epromtype == EEPROM_BOOT_EFUSE) + { + RT_TRACE(COMP_INIT, "EFUSE\n"); + + EFUSE_ShadowMapUpdate(dev); + + memcpy( hwinfo, &priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + } + + + EEPROMId = *((u16 *)&hwinfo[0]); + if( EEPROMId != RTL8190_EEPROM_ID ) + { + RT_TRACE(COMP_ERR, "EEPROM ID(%#x) is invalid!!\n", EEPROMId); + priv->AutoloadFailFlag=true; + } + else + { + RT_TRACE(COMP_EPROM, "Autoload OK\n"); + priv->AutoloadFailFlag=false; + } + + if (priv->AutoloadFailFlag == true) + { + rtl8192se_config_hw_for_load_fail(dev); + return; + } + + rtl8192se_get_IC_Inferiority(dev); + + priv->eeprom_vid = *(u16 *)&hwinfo[EEPROM_VID]; + priv->eeprom_did = *(u16 *)&hwinfo[EEPROM_DID]; + priv->eeprom_svid = *(u16 *)&hwinfo[EEPROM_SVID]; + priv->eeprom_smid = *(u16 *)&hwinfo[EEPROM_SMID]; + priv->eeprom_version = *(u16 *)&hwinfo[EEPROM_Version]; + + RT_TRACE(COMP_EPROM, "EEPROMId = 0x%4x\n", EEPROMId); + RT_TRACE(COMP_EPROM, "EEPROM VID = 0x%4x\n", priv->eeprom_vid); + RT_TRACE(COMP_EPROM, "EEPROM DID = 0x%4x\n", priv->eeprom_did); + RT_TRACE(COMP_EPROM, "EEPROM SVID = 0x%4x\n", priv->eeprom_svid); + RT_TRACE(COMP_EPROM, "EEPROM SMID = 0x%4x\n", priv->eeprom_smid); + + priv->EEPROMOptional = *(u8 *)&hwinfo[EEPROM_Optional]; + priv->ShowRateMode = 2; + priv->rtllib->bForcedShowRxRate = false; + + if(priv->ShowRateMode == 0) { + if((priv->EEPROMOptional & BIT3) == 0x08/*0000_1000*/) { + priv->rtllib->bForcedShowRxRate = true; + } + } else if(priv->ShowRateMode == 2){ + priv->rtllib->bForcedShowRxRate = true; + } + + for(i = 0; i < 6; i += 2) + { + usValue = *(u16 *)&hwinfo[EEPROM_MAC_ADDR+i]; + *((u16*)(&dev->dev_addr[i])) = usValue; + } + for (i=0;i<6;i++) + write_nic_byte(dev, MACIDR0+i, dev->dev_addr[i]); + + RT_TRACE(COMP_EPROM, "ReadAdapterInfo8192S(), Permanent Address = %02x-%02x-%02x-%02x-%02x-%02x\n", + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], + dev->dev_addr[4], dev->dev_addr[5]); + +#if (EEPROM_OLD_FORMAT_SUPPORT == 1) + for(i = 0; i < EEPROM_TX_PWR_INDEX_RANGE; i += 2) + { + usValue = *(u16 *)&hwinfo[EEPROM_TxPowerBase+i]; + *((u16 *)(&tmpBuffer[i])) = usValue; + } + for(i=0; i<14; i++) + { + priv->EEPROMTxPowerLevelCCK[i] = (u8)tmpBuffer[i]; + priv->EEPROMTxPowerLevelOFDM24G[i] = (u8)tmpBuffer[i+14]; + } + + + for(i=0; i<14; i++) + { + priv->TxPowerLevelOFDM24G[i] = priv->EEPROMTxPowerLevelOFDM24G[i]; + priv->TxPowerLevelCCK[i] = priv->EEPROMTxPowerLevelCCK[i]; + + RT_TRACE(COMP_EPROM, "CH%d CCK Tx PWR IDX = 0x%02x\n", i, priv->EEPROMTxPowerLevelCCK[i]); + RT_TRACE(COMP_EPROM, "CH%d OFDM Tx PWR IDX = 0x%02x\n", i, priv->EEPROMTxPowerLevelOFDM24G[i]); + } + + for(i = 0; i < 6; i += 2) + { + usValue = *(u16 *)&hwinfo[EEPROM_HT2T_CH1_A+i]; + *((u16*)(&priv->EEPROMHT2T_TxPwr[i])) = usValue; + } + for(i=0; i<6; i++) + { + RT_TRACE(COMP_EPROM, "EEPROMHT2T_TxPwr, Index %d = 0x%02x\n", i, priv->EEPROMHT2T_TxPwr[i]); + } + +#else + + for (rf_path = 0; rf_path < 2; rf_path++) + { + for (i = 0; i < 3; i++) + { + priv->RfCckChnlAreaTxPwr[rf_path][i] = + hwinfo[EEPROM_TxPowerBase+rf_path*3+i]; + + priv->RfOfdmChnlAreaTxPwr1T[rf_path][i] = + hwinfo[EEPROM_TxPowerBase+6+rf_path*3+i]; + + priv->RfOfdmChnlAreaTxPwr2T[rf_path][i] = + hwinfo[EEPROM_TxPowerBase+12+rf_path*3+i]; + } + } + + for (rf_path = 0; rf_path < 2; rf_path++) + { + for (i = 0; i < 3; i++) + { + RT_TRACE(COMP_EPROM,"CCK RF-%d CHan_Area-%d = 0x%x\n", rf_path, i, + priv->RfCckChnlAreaTxPwr[rf_path][i]); + RT_TRACE(COMP_EPROM, "OFDM-1T RF-%d CHan_Area-%d = 0x%x\n", rf_path, i, + priv->RfOfdmChnlAreaTxPwr1T[rf_path][i]); + RT_TRACE(COMP_EPROM,"OFDM-2T RF-%d CHan_Area-%d = 0x%x\n", rf_path, i, + priv->RfOfdmChnlAreaTxPwr2T[rf_path][i]); + } + + for(i=0; i<14; i++) + { + if (i < 3) + index = 0; + else if (i < 8) + index = 1; + else + index = 2; + + priv->RfTxPwrLevelCck[rf_path][i] = + priv->RfCckChnlAreaTxPwr[rf_path][index]; + priv->RfTxPwrLevelOfdm1T[rf_path][i] = + priv->RfOfdmChnlAreaTxPwr1T[rf_path][index]; + priv->RfTxPwrLevelOfdm2T[rf_path][i] = + priv->RfOfdmChnlAreaTxPwr2T[rf_path][index]; + + if (rf_path == 0) + { + priv->TxPowerLevelOFDM24G[i] = priv->RfTxPwrLevelOfdm1T[rf_path][i] ; + priv->TxPowerLevelCCK[i] = priv->RfTxPwrLevelCck[rf_path][i]; + } + } + + for(i=0; i<14; i++) + { + RT_TRACE(COMP_EPROM, "Rf-%d TxPwr CH-%d CCK OFDM_1T OFDM_2T= 0x%x/0x%x/0x%x\n", + rf_path, i, priv->RfTxPwrLevelCck[rf_path][i], + priv->RfTxPwrLevelOfdm1T[rf_path][i] , + priv->RfTxPwrLevelOfdm2T[rf_path][i] ); + } + } + for (rf_path = 0; rf_path < 2; rf_path++) + { + for (i = 0; i < 3; i++) + { + priv->EEPROMPwrGroup[rf_path][i] = hwinfo[EEPROM_TxPWRGroup+rf_path*3+i]; + } + } + + for (rf_path = 0; rf_path < 2; rf_path++) + { + for(i=0; i<14; i++) + { + if (i < 3) + index = 0; + else if (i < 8) + index = 1; + else + index = 2; + priv->PwrGroupHT20[rf_path][i] = (priv->EEPROMPwrGroup[rf_path][index]&0xf); + priv->PwrGroupHT40[rf_path][i] = ((priv->EEPROMPwrGroup[rf_path][index]&0xf0)>>4); + RT_TRACE(COMP_INIT, "RF-%d PwrGroupHT20[%d] = 0x%x\n", rf_path, i, priv->PwrGroupHT20[rf_path][i]); + RT_TRACE(COMP_INIT, "RF-%d PwrGroupHT40[%d] = 0x%x\n", rf_path, i, priv->PwrGroupHT40[rf_path][i]); + } + } + + for(i=0; i<14; i++) + { + if (i < 3) + index = 0; + else if (i < 8) + index = 1; + else + index = 2; + + tempval = (*(u8 *)&hwinfo[EEPROM_TX_PWR_HT20_DIFF+index])&0xff; + priv->TxPwrHt20Diff[RF90_PATH_A][i] = (tempval&0xF); + priv->TxPwrHt20Diff[RF90_PATH_B][i] = ((tempval>>4)&0xF); + + if (i < 3) + index = 0; + else if (i < 8) + index = 0x11; + else + index = 1; + + tempval = (*(u8 *)&hwinfo[EEPROM_TX_PWR_OFDM_DIFF+index])&0xff; + priv->TxPwrLegacyHtDiff[RF90_PATH_A][i] = (tempval&0xF); + priv->TxPwrLegacyHtDiff[RF90_PATH_B][i] = ((tempval>>4)&0xF); + + tempval = (*(u8 *)&hwinfo[TX_PWR_SAFETY_CHK]); + priv->TxPwrSafetyFlag = (tempval&0x01); + } + + priv->EEPROMRegulatory = 0; + if(priv->eeprom_version >= 2) + { + if(priv->eeprom_version >= 4) + priv->EEPROMRegulatory = (hwinfo[EEPROM_Regulatory]&0x7); + else + priv->EEPROMRegulatory = (hwinfo[EEPROM_Regulatory]&0x1); + } + RT_TRACE(COMP_INIT, "EEPROMRegulatory = 0x%x\n", priv->EEPROMRegulatory); + + for(i=0; i<14; i++) + RT_TRACE(COMP_EPROM, "RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", i, priv->TxPwrHt20Diff[RF90_PATH_A][i]); + for(i=0; i<14; i++) + RT_TRACE(COMP_EPROM, "RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", i, priv->TxPwrLegacyHtDiff[RF90_PATH_A][i]); + for(i=0; i<14; i++) + RT_TRACE(COMP_EPROM, "RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", i, priv->TxPwrHt20Diff[RF90_PATH_B][i]); + for(i=0; i<14; i++) + RT_TRACE(COMP_EPROM, "RF-B Legacy to HT40 Diff[%d] = 0x%x\n", i, priv->TxPwrLegacyHtDiff[RF90_PATH_B][i]); +#endif + RT_TRACE(COMP_EPROM, "TxPwrSafetyFlag = %d\n", priv->TxPwrSafetyFlag); + + tempval = (*(u8 *)&hwinfo[EEPROM_RFInd_PowerDiff])&0xff; + priv->EEPROMTxPowerDiff = tempval; + priv->LegacyHTTxPowerDiff = priv->TxPwrLegacyHtDiff[RF90_PATH_A][0]; + + RT_TRACE(COMP_EPROM, "TxPowerDiff = %#x\n", priv->EEPROMTxPowerDiff); + + usValue = *(u16 *)&hwinfo[EEPROM_TSSI_A]; + priv->EEPROMTSSI_A = (u8)((usValue&0xff00)>>8); + usValue = *(u8 *)&hwinfo[EEPROM_TSSI_B]; + priv->EEPROMTSSI_B = (u8)(usValue&0xff); + RT_TRACE(COMP_EPROM, "TSSI_A = %#x, TSSI_B = %#x\n", + priv->EEPROMTSSI_A, priv->EEPROMTSSI_B); + + tempval = *(u8 *)&hwinfo[EEPROM_ThermalMeter]; + priv->EEPROMThermalMeter = tempval; + RT_TRACE(COMP_EPROM, "ThermalMeter = %#x\n", priv->EEPROMThermalMeter); + priv->ThermalMeter[0] =(priv->EEPROMThermalMeter&0x1f); + priv->TSSI_13dBm = priv->EEPROMThermalMeter *100; + + tempval = *(u8 *)&hwinfo[EEPROM_BLUETOOTH_COEXIST]; + priv->EEPROMBluetoothCoexist = ((tempval&0x2)>>1); + priv->BluetoothCoexist = priv->EEPROMBluetoothCoexist; + tempval = hwinfo[EEPROM_BLUETOOTH_TYPE]; + priv->EEPROMBluetoothType = ((tempval&0xe)>>1); + priv->EEPROMBluetoothAntNum = (tempval&0x1); + priv->EEPROMBluetoothAntIsolation = ((tempval&0x10)>>4); + RT_TRACE(COMP_EPROM, "BlueTooth Coexistance = %#x\n", priv->BluetoothCoexist); + +#ifdef MERGE_TO_DO + BT_VAR_INIT(Adapter); + + tempval = hwinfo[EEPROM_WoWLAN]; + priv->EEPROMSupportWoWLAN = ((tempval&0x4)>>2); + if (priv->EEPROMSupportWoWLAN) + priv->bHwSupportRemoteWakeUp = true; + else + priv->bHwSupportRemoteWakeUp = false; +#endif +#ifdef RTL8192S_WAPI_SUPPORT + tempval = *(u8 *)&hwinfo[EEPROM_WAPI_SUPPORT]; + priv->EEPROMWapiSupport = ((tempval&0x10)>>4); + priv->EEPROMWapiSupport = 1; + + priv->WapiSupport = priv->EEPROMWapiSupport; + priv->rtllib->WapiSupport = priv->WapiSupport; + RT_TRACE(COMP_EPROM, "WAPI Support = %#x\n", priv->WapiSupport); +#endif + + tempval = (*(u8 *)&hwinfo[EEPROM_CrystalCap])>>4; + priv->EEPROMCrystalCap =tempval; + RT_TRACE(COMP_EPROM, "CrystalCap = %#x\n", priv->EEPROMCrystalCap); + priv->CrystalCap = priv->EEPROMCrystalCap; + + priv->eeprom_ChannelPlan = *(u8 *)&hwinfo[EEPROM_ChannelPlan]; + priv->bTXPowerDataReadFromEEPORM = true; + RT_TRACE(COMP_EPROM, "EEPROM ChannelPlan = 0x%4x\n", priv->eeprom_ChannelPlan); + + tempval = *(u8*)&hwinfo[EEPROM_BoardType]; + if (tempval == 0) + priv->rf_type= RF_2T2R; + else if (tempval == 1) + priv->rf_type = RF_1T2R; + else if (tempval == 2) + priv->rf_type = RF_1T2R; + else if (tempval == 3) + priv->rf_type = RF_1T1R; + + priv->rtllib->RF_Type = priv->rf_type; + priv->rtllib->b1x1RecvCombine = false; + if (priv->rf_type == RF_1T2R) + { + tempval = read_nic_byte(dev, 0x07); + if (!(tempval & BIT0)) + { + priv->rtllib->b1x1RecvCombine = true; + RT_TRACE(COMP_INIT, "RF_TYPE=1T2R but only 1SS\n"); + } + } + priv->rtllib->b1SSSupport = priv->rtllib->b1x1RecvCombine; + + priv->rf_chip = RF_6052; + + priv->eeprom_CustomerID = *(u8 *)&hwinfo[EEPROM_CustomID]; + + RT_TRACE(COMP_EPROM, "EEPROM Customer ID: 0x%2x, rf_chip:%x\n", priv->eeprom_CustomerID, priv->rf_chip); + + priv->rtllib->b_customer_lenovo_id = false; + + switch(priv->eeprom_CustomerID) + { + case EEPROM_CID_DEFAULT: + if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE020){ + priv->CustomerID = RT_CID_819x_Lenovo; + priv->rtllib->b_customer_lenovo_id = true; + } + else if(priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE025) + priv->CustomerID = RT_CID_819x_Lenovo; + else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x4308) + priv->CustomerID = RT_CID_819x_QMI; + else if(priv->eeprom_svid == 0x1A32 && priv->eeprom_smid == 0x0311) + priv->CustomerID = RT_CID_819x_QMI; + else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x6897) + priv->CustomerID = RT_CID_819x_MSI; + else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x3821) + priv->CustomerID = RT_CID_819x_MSI; + else if(priv->eeprom_svid == 0x1462 && priv->eeprom_smid == 0x897A) + priv->CustomerID = RT_CID_819x_MSI; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8156) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8157) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE021) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0xE022) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8158) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8172 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8159) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8186) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8187) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8156) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8174 && + priv->eeprom_svid == 0x10EC && priv->eeprom_smid == 0x8157) + priv->CustomerID = RT_CID_819x_Acer; + else if( priv->eeprom_vid == 0x10EC && priv->eeprom_did == 0x8171 && + priv->eeprom_svid == 0x103C && priv->eeprom_smid == 0x1467) + priv->CustomerID = RT_CID_819x_HP; + else + priv->CustomerID = RT_CID_DEFAULT; + break; + + case EEPROM_CID_TOSHIBA: + priv->CustomerID = RT_CID_TOSHIBA; + break; + + case EEPROM_CID_QMI: + priv->CustomerID = RT_CID_819x_QMI; + break; + + case EEPROM_CID_WHQL: +#ifdef TO_DO_LIST + priv->bInHctTest = true; + priv->bSupportTurboMode = false; + priv->bAutoTurboBy8186 = false; + priv->PowerSaveControl.bInactivePs = false; + priv->PowerSaveControl.bIPSModeBackup = false; + priv->PowerSaveControl.bLeisurePs = false; + priv->keepAliveLevel = 0; + priv->bUnloadDriverwhenS3S4 = false; +#endif + break; + + default: + priv->CustomerID = RT_CID_DEFAULT; + break; + + } + +#if defined (RTL8192S_WAPI_SUPPORT) + if (priv->rtllib->WapiSupport) + { + WapiInit(priv->rtllib); + } +#endif + RT_TRACE(COMP_INIT, "<==== rtl8192se_read_eeprom_info\n"); +} + +void rtl8192se_get_eeprom_size(struct net_device* dev) +{ + struct r8192_priv* priv = rtllib_priv(dev); + u8 curCR = 0; + curCR = read_nic_byte(dev, EPROM_CMD); + PHY_RFShadowRefresh(dev); + if (curCR & BIT4){ + RT_TRACE(COMP_EPROM, "Boot from EEPROM\n"); + priv->epromtype = EEPROM_93C46; + } + else{ + RT_TRACE(COMP_EPROM, "Boot from EFUSE\n"); + priv->epromtype = EEPROM_BOOT_EFUSE; + } + if (curCR & BIT5){ + RT_TRACE(COMP_EPROM,"Autoload OK\n"); + priv->AutoloadFailFlag=false; + rtl8192se_read_eeprom_info(dev); + } + else{ + RT_TRACE(COMP_INIT, "AutoLoad Fail reported from CR9346!!\n"); + priv->AutoloadFailFlag=true; + rtl8192se_config_hw_for_load_fail(dev); + + if (priv->epromtype == EEPROM_BOOT_EFUSE) + { +#if (RTL92SE_FPGA_VERIFY == 0) + EFUSE_ShadowMapUpdate(dev); +#endif + } + } +#ifdef TO_DO_LIST + if(Adapter->bInHctTest) + { + pMgntInfo->PowerSaveControl.bInactivePs = false; + pMgntInfo->PowerSaveControl.bIPSModeBackup = false; + pMgntInfo->PowerSaveControl.bLeisurePs = false; + pMgntInfo->keepAliveLevel = 0; + } +#endif +#ifdef ENABLE_DOT11D + priv->ChannelPlan = COUNTRY_CODE_WORLD_WIDE_13; + + if(priv->ChannelPlan == COUNTRY_CODE_GLOBAL_DOMAIN) { + GET_DOT11D_INFO(priv->rtllib)->bEnabled = 1; + RT_TRACE(COMP_INIT, "%s: Enable dot11d when RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN!\n", __FUNCTION__); + } +#endif + + RT_TRACE(COMP_INIT, "RegChannelPlan(%d) EEPROMChannelPlan(%d)", \ + priv->RegChannelPlan, priv->eeprom_ChannelPlan); + RT_TRACE(COMP_INIT, "ChannelPlan = %d\n" , priv->ChannelPlan); + HalCustomizedBehavior8192S(dev); +} + +#if (RTL92SE_FPGA_VERIFY == 1) +static void MacConfigBeforeFwDownload(struct net_device* dev) +{ + struct r8192_priv* priv = rtllib_priv(dev); + u8 i; + u8 tmpU1b; + u16 tmpU2b; + u32 addr; + + RT_TRACE(COMP_INIT, "Set some register before enable NIC\r\n"); + + tmpU1b = read_nic_byte(dev, 0x562); + tmpU1b |= 0x08; + write_nic_byte(dev, 0x562, tmpU1b); + tmpU1b &= ~(BIT3); + write_nic_byte(dev, 0x562, tmpU1b); + + tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1); + tmpU1b &= 0x73; + write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b); + + tmpU1b = read_nic_byte(dev, SYS_CLKR); + tmpU1b &= 0xfa; + write_nic_byte(dev, SYS_CLKR, tmpU1b); + + RT_TRACE(COMP_INIT, "Delay 1000ms before reset NIC. I dont know how long should we delay!!!!!\r\n"); + ssleep(1); + + write_nic_byte(dev, SYS_CLKR, SYS_CLKSEL_80M); + + tmpU1b = read_nic_byte(dev, SPS1_CTRL); + write_nic_byte(dev, SPS1_CTRL, (tmpU1b|SPS1_LDEN)); + + tmpU1b = read_nic_byte(dev, AFE_MISC); + write_nic_byte(dev, AFE_MISC, (tmpU1b|AFE_BGEN)); + + tmpU1b = read_nic_byte(dev, LDOA15_CTRL); + write_nic_byte(dev, LDOA15_CTRL, (tmpU1b|LDA15_EN)); + + tmpU1b = read_nic_byte(dev, SPS1_CTRL); + write_nic_byte(dev, SPS1_CTRL, (tmpU1b|SPS1_SWEN)); + + tmpU1b = read_nic_byte(dev, AFE_MISC); + write_nic_byte(dev, AFE_MISC, (tmpU1b|AFE_MBEN)); + + tmpU2b = read_nic_word(dev, SYS_ISO_CTRL); + write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b|ISO_PWC_DV2RP)); + + tmpU2b = read_nic_word(dev, SYS_ISO_CTRL); + write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b &(~ISO_PWC_RV2RP))); + + tmpU2b = read_nic_word(dev, AFE_XTAL_CTRL); + write_nic_word(dev, AFE_XTAL_CTRL, (tmpU2b &(~XTAL_GATE_AFE))); + + tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL); + write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|APLL_EN)); + + write_nic_byte(dev, SYS_ISO_CTRL, 0xEE); + + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, (tmpU2b|SYS_MAC_CLK_EN)); + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|FEN_DCORE|FEN_MREGEN)); + + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, ((tmpU2b|SYS_FWHW_SEL)&(~SYS_SWHW_SEL))); + + write_nic_byte(dev, RF_CTRL, 0); + write_nic_byte(dev, RF_CTRL, 7); + + write_nic_word(dev, CMDR, 0x37FC); + +#if 1 + write_nic_byte(dev, 0x6, 0x30); + write_nic_byte(dev, 0x49, 0xf0); + + write_nic_byte(dev, 0x4b, 0x81); + + write_nic_byte(dev, 0xb5, 0x21); + + write_nic_byte(dev, 0xdc, 0xff); + write_nic_byte(dev, 0xdd, 0xff); + write_nic_byte(dev, 0xde, 0xff); + write_nic_byte(dev, 0xdf, 0xff); + + write_nic_byte(dev, 0x11a, 0x00); + write_nic_byte(dev, 0x11b, 0x00); + + for (i = 0; i < 32; i++) + write_nic_byte(dev, INIMCS_SEL+i, 0x1b); + + write_nic_byte(dev, 0x236, 0xff); + + write_nic_byte(dev, 0x503, 0x22); + + if(priv->bIntelBridgeExist) { + write_nic_byte(dev, 0x560, 0x40); + } else { + write_nic_byte(dev, 0x560, 0x00); + } + + write_nic_byte(dev, DBG_PORT, 0x91); +#endif + +#ifdef CONFIG_RX_CMD + write_nic_dword(dev, RCDA, priv->rx_ring_dma[RX_CMD_QUEUE]); +#endif + write_nic_dword(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]); + rtl8192_tx_enable(dev); + + RT_TRACE(COMP_INIT, "<---MacConfig8192SE()\n"); + +} /* MacConfigBeforeFwDownload */ +#else +void gen_RefreshLedState(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + PLED_8190 pLed0 = &(priv->SwLed0); + + if(priv->bfirst_init) + { + RT_TRACE(COMP_INIT, "gen_RefreshLedState first init\n"); + return; + } + + if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS ) + { + SwLedOn(dev, pLed0); + } + else + { + SwLedOff(dev, pLed0); + } + +} +void MacConfigBeforeFwDownload(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 i; + u8 tmpU1b; + u16 tmpU2b; + u8 PollingCnt = 20; + + RT_TRACE(COMP_INIT, "--->MacConfigBeforeFwDownload()\n"); + + if (priv->initialized_at_probe) { + return; + } + + if(priv->bfirst_init) + { + tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1); + tmpU1b &= 0xFE; + write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b); + udelay(1); + write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b|BIT0); + } + + tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1)); + if(tmpU1b & BIT7) + { + tmpU1b &= ~(BIT6 | BIT7); + if(!HalSetSysClk8192SE(dev, tmpU1b)) + return; + } + +#ifdef MERGE_TO_DO + if( (pHalData->bt_coexist.BluetoothCoexist) && + (pHalData->bt_coexist.BT_CoexistType == BT_CSR) ) + { + write_nic_byte(dev, AFE_PLL_CTRL, 0x0); + udelay(50); + write_nic_byte(dev, LDOA15_CTRL, 0x34); + udelay(50); + } + else +#endif + { + write_nic_byte(dev, AFE_PLL_CTRL, 0x0); + udelay(50); + write_nic_byte(dev, LDOA15_CTRL, 0x34); + udelay(50); + } + + + write_nic_byte(dev, RPWM, 0x0); + + tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1); + tmpU1b &= 0x73; + write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b); + mdelay(1); + + write_nic_byte(dev, CMDR, 0); + write_nic_byte(dev, TCR, 0); + +#if (DEMO_BOARD_SUPPORT == 0) + tmpU1b = read_nic_byte(dev, SPS1_CTRL); + tmpU1b &= 0xfc; + write_nic_byte(dev, SPS1_CTRL, tmpU1b); +#endif + + tmpU1b = read_nic_byte(dev, 0x562); + tmpU1b |= 0x08; + write_nic_byte(dev, 0x562, tmpU1b); + tmpU1b &= ~(BIT3); + write_nic_byte(dev, 0x562, tmpU1b); + + + + + + RT_TRACE(COMP_INIT, "Enable AFE clock source\r\n"); + tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL); + write_nic_byte(dev, AFE_XTAL_CTRL, (tmpU1b|0x01)); + udelay(2000); + tmpU1b = read_nic_byte(dev, AFE_XTAL_CTRL+1); + write_nic_byte(dev, AFE_XTAL_CTRL+1, (tmpU1b&0xfb)); + + + RT_TRACE(COMP_INIT, "Enable AFE Macro Block's Bandgap\r\n"); + tmpU1b = read_nic_byte(dev, AFE_MISC); + write_nic_byte(dev, AFE_MISC, (tmpU1b|BIT0)); + mdelay(1); + + RT_TRACE(COMP_INIT, "Enable AFE Mbias\r\n"); + tmpU1b = read_nic_byte(dev, AFE_MISC); + write_nic_byte(dev, AFE_MISC, (tmpU1b|0x02)); + mdelay(1); + + tmpU1b = read_nic_byte(dev, LDOA15_CTRL); + write_nic_byte(dev, LDOA15_CTRL, (tmpU1b|BIT0)); + + + + tmpU2b = read_nic_word(dev, SYS_ISO_CTRL); + write_nic_word(dev, SYS_ISO_CTRL, (tmpU2b|BIT11)); + + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b |BIT13)); + + + write_nic_byte(dev, SYS_ISO_CTRL+1, 0x68); + + udelay(200); + tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL); + write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4)); + +#if 1 + udelay(100); + write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4|BIT6)); + udelay(10); + write_nic_byte(dev, AFE_PLL_CTRL, (tmpU1b|BIT0|BIT4)); + udelay(10); +#endif + tmpU1b = read_nic_byte(dev, AFE_PLL_CTRL+1); + write_nic_byte(dev, AFE_PLL_CTRL+1, (tmpU1b|BIT0)); + mdelay(1); + + write_nic_byte(dev, SYS_ISO_CTRL, 0xA6); + + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, (tmpU2b|BIT12|BIT11)); + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11)); + + tmpU1b = read_nic_byte(dev, SYS_FUNC_EN+1); + write_nic_byte(dev, SYS_FUNC_EN+1, tmpU1b&~(BIT7)); + + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|BIT11|BIT15)); + + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, (tmpU2b&(~BIT2))); + + tmpU1b = read_nic_byte(dev, (SYS_CLKR + 1)); + tmpU1b = ((tmpU1b | BIT7) & (~BIT6)); + if(!HalSetSysClk8192SE(dev, tmpU1b)) + return; + +#if 0 + tmpU2b = read_nic_word(dev, SYS_CLKR); + write_nic_word(dev, SYS_CLKR, ((tmpU2b|BIT15)&(~BIT14))); +#endif + + write_nic_word(dev, CMDR, 0x07FC); + +#if 1 + write_nic_byte(dev, 0x6, 0x30); + write_nic_byte(dev, 0x49, 0xf0); + + write_nic_byte(dev, 0x4b, 0x81); + + write_nic_byte(dev, 0xb5, 0x21); + + write_nic_byte(dev, 0xdc, 0xff); + write_nic_byte(dev, 0xdd, 0xff); + write_nic_byte(dev, 0xde, 0xff); + write_nic_byte(dev, 0xdf, 0xff); + + write_nic_byte(dev, 0x11a, 0x00); + write_nic_byte(dev, 0x11b, 0x00); + + for (i = 0; i < 32; i++) + write_nic_byte(dev, INIMCS_SEL+i, 0x1b); + + write_nic_byte(dev, 0x236, 0xff); + + write_nic_byte(dev, 0x503, 0x22); + if (priv->pci_bridge_vendor & (PCI_BRIDGE_VENDOR_INTEL | PCI_BRIDGE_VENDOR_SIS)) { + write_nic_byte(dev, 0x560, 0x40); + } else { + write_nic_byte(dev, 0x560, 0x00); + } + + write_nic_byte(dev, DBG_PORT, 0x91); +#endif + + write_nic_dword(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]); +#ifdef CONFIG_RX_CMD + write_nic_dword(dev, RCDA, priv->rx_ring_dma[RX_CMD_QUEUE]); +#endif + rtl8192_tx_enable(dev); + + write_nic_word(dev, CMDR, 0x37FC); + do { + tmpU1b = read_nic_byte(dev, TCR); + if((tmpU1b & TXDMA_INIT_VALUE) == TXDMA_INIT_VALUE) + break; + + udelay(5); + } while(PollingCnt--); + + if(PollingCnt <= 0 ) + { + RT_TRACE(COMP_ERR, "MacConfigBeforeFwDownloadASIC(): Polling TXDMA_INIT_VALUE timeout!! Current TCR(%#x)\n", tmpU1b); + tmpU1b = read_nic_byte(dev, CMDR); + write_nic_byte(dev, CMDR, tmpU1b&(~TXDMA_EN)); + udelay(2); + write_nic_byte(dev, CMDR, tmpU1b|TXDMA_EN); + } + + gen_RefreshLedState(dev); + + RT_TRACE(COMP_INIT, "<---MacConfigBeforeFwDownload()\n"); + +} /* MacConfigBeforeFwDownload */ +#endif + +static void MacConfigAfterFwDownload(struct net_device* dev) +{ + u8 i; + u16 tmpU2b; + struct r8192_priv* priv = rtllib_priv(dev); + + + write_nic_byte(dev, CMDR, + (u8)(BBRSTn|BB_GLB_RSTn|SCHEDULE_EN|MACRXEN|MACTXEN|DDMA_EN|FW2HW_EN| + RXDMA_EN|TXDMA_EN|HCI_RXDMA_EN|HCI_TXDMA_EN)); + write_nic_dword(dev, TCR, + read_nic_dword(dev, TCR)|TXDMAPRE2FULL); + write_nic_dword(dev, RCR, priv->ReceiveConfig); + +#if 0 + for (i=0;i<6;i++) + write_nic_byte(dev, MACIDR0+i, dev->dev_addr[i]); +#endif + write_nic_word(dev, SIFS_CCK, 0x0a0a); + write_nic_word(dev, SIFS_OFDM, 0x1010); + write_nic_byte(dev, ACK_TIMEOUT, 0x40); + + write_nic_word(dev, BCN_INTERVAL, 100); + write_nic_word(dev, ATIMWND, 2); +#ifdef _ENABLE_SW_BEACON + write_nic_word(dev, BCN_DRV_EARLY_INT, BIT15); +#endif + +#if 0 + write_nic_dword(dev, RQPN1, + NUM_OF_PAGE_IN_FW_QUEUE_BK<<0 | NUM_OF_PAGE_IN_FW_QUEUE_BE<<8 |\ + NUM_OF_PAGE_IN_FW_QUEUE_VI<<16 | NUM_OF_PAGE_IN_FW_QUEUE_VO<<24); + write_nic_dword(dev, RQPN2, + NUM_OF_PAGE_IN_FW_QUEUE_HCCA << 0 | NUM_OF_PAGE_IN_FW_QUEUE_CMD << 8|\ + NUM_OF_PAGE_IN_FW_QUEUE_MGNT << 16 |NUM_OF_PAGE_IN_FW_QUEUE_HIGH << 24); + write_nic_dword(dev, RQPN3, + NUM_OF_PAGE_IN_FW_QUEUE_BCN<<0 | NUM_OF_PAGE_IN_FW_QUEUE_PUB<<8); + write_nic_byte(dev, LD_RQPN, BIT7); +#endif + + + + + write_nic_byte(dev, RXDMA, + read_nic_byte(dev, RXDMA)|BIT6); + + if (priv->card_8192_version== VERSION_8192S_ACUT) + write_nic_byte(dev, RRSR, 0xf0); + else if (priv->card_8192_version == VERSION_8192S_BCUT) + write_nic_byte(dev, RRSR, 0xff); + write_nic_byte(dev, RRSR+1, 0x01); + write_nic_byte(dev, RRSR+2, 0x00); + + for (i = 0; i < 8; i++) + { + + if (priv->card_8192_version == VERSION_8192S_ACUT) + write_nic_dword(dev, ARFR0+i*4, 0x1f0ff0f0); +#if 0 + else if (priv->card_8192_version == VERSION_8192S_BCUT) + write_nic_dword(dev, ARFR0+i*4, 0x1f0ff0f0); +#endif + } + + write_nic_byte(dev, AGGLEN_LMT_H, 0x0f); + write_nic_word(dev, AGGLEN_LMT_L, 0x7442); + write_nic_word(dev, AGGLEN_LMT_L+2, 0xddd7); + write_nic_word(dev, AGGLEN_LMT_L+4, 0xd772); + write_nic_word(dev, AGGLEN_LMT_L+6, 0xfffd); + + write_nic_dword(dev, DARFRC, 0x04010000); + write_nic_dword(dev, DARFRC+4, 0x09070605); + write_nic_dword(dev, RARFRC, 0x04010000); + write_nic_dword(dev, RARFRC+4, 0x09070605); + + + + write_nic_word(dev, SG_RATE, 0xFFFF); + + + write_nic_word(dev, NAV_PROT_LEN, 0x0080); + write_nic_byte(dev, CFEND_TH, 0xFF); + write_nic_byte(dev, AMPDU_MIN_SPACE, 0x07); + write_nic_byte(dev, TXOP_STALL_CTRL, 0x00); + + + /*write_nic_byte(dev, PCIF, ((MXDMA2_NoLimit<epromtype == EEPROM_BOOT_EFUSE) + { + u8 tempval; + + tempval = read_nic_byte(dev, SYS_ISO_CTRL+1); + tempval &= 0xFE; + write_nic_byte(dev, SYS_ISO_CTRL+1, tempval); + + + + write_nic_byte(dev, EFUSE_CTRL+3, 0x72); + RT_TRACE(COMP_INIT, "EFUSE CONFIG OK\n"); + } + RT_TRACE(COMP_INIT, "MacConfigAfterFwDownload OK\n"); + +} /* MacConfigAfterFwDownload */ + +static void rtl8192se_HalDetectPwrDownMode(struct net_device*dev) +{ + u8 tmpvalue; + struct r8192_priv *priv = rtllib_priv(dev); + EFUSE_ShadowRead(dev, 1, 0x78, (u32 *)&tmpvalue); + + if (tmpvalue & BIT0) { + priv->pwrdown = true; + } else { + priv->pwrdown = false; + } +} + +void HwConfigureRTL8192SE(struct net_device *dev) +{ + + struct r8192_priv* priv = rtllib_priv(dev); + + u8 regBwOpMode = 0; + u32 regRATR = 0, regRRSR = 0; + u8 regTmp = 0; + + + switch(priv->rtllib->mode) + { + case WIRELESS_MODE_B: + regBwOpMode = BW_OPMODE_20MHZ; + regRATR = RATE_ALL_CCK; + regRRSR = RATE_ALL_CCK; + break; + case WIRELESS_MODE_A: + regBwOpMode = BW_OPMODE_5G |BW_OPMODE_20MHZ; + regRATR = RATE_ALL_OFDM_AG; + regRRSR = RATE_ALL_OFDM_AG; + break; + case WIRELESS_MODE_G: + regBwOpMode = BW_OPMODE_20MHZ; + regRATR = RATE_ALL_CCK | RATE_ALL_OFDM_AG; + regRRSR = RATE_ALL_CCK | RATE_ALL_OFDM_AG; + break; + case WIRELESS_MODE_AUTO: + case WIRELESS_MODE_N_24G: + regBwOpMode = BW_OPMODE_20MHZ; + regRATR = RATE_ALL_CCK | RATE_ALL_OFDM_AG | RATE_ALL_OFDM_1SS | RATE_ALL_OFDM_2SS; + regRRSR = RATE_ALL_CCK | RATE_ALL_OFDM_AG; + break; + case WIRELESS_MODE_N_5G: + regBwOpMode = BW_OPMODE_5G; + regRATR = RATE_ALL_OFDM_AG | RATE_ALL_OFDM_1SS | RATE_ALL_OFDM_2SS; + regRRSR = RATE_ALL_OFDM_AG; + break; + default: + regBwOpMode = BW_OPMODE_20MHZ; + regRATR = RATE_ALL_CCK | RATE_ALL_OFDM_AG; + regRRSR = RATE_ALL_CCK | RATE_ALL_OFDM_AG; + break; + } + + regTmp = read_nic_byte(dev, INIRTSMCS_SEL); +#if (RTL8192SU_DISABLE_CCK_RATE == 1) + regRRSR = ((regRRSR & 0x000ffff0)<<8) | regTmp; +#else + regRRSR = ((regRRSR & 0x000fffff)<<8) | regTmp; +#endif + write_nic_dword(dev, INIRTSMCS_SEL, regRRSR); + + write_nic_byte(dev, BW_OPMODE, regBwOpMode); + priv->rtllib->SetHwRegHandler(dev, HW_VAR_RETRY_LIMIT, (u8*)(&priv->ShortRetryLimit)); + + write_nic_byte(dev, MLT, 0x8f); + + + +#if 1 + switch(priv->rf_type) + { + case RF_1T2R: + case RF_1T1R: + RT_TRACE(COMP_INIT, "Initializeadapter: RF_Type%s\n", priv->rf_type==RF_1T1R? "(1T1R)":"(1T2R)"); + priv->rtllib->MinSpaceCfg = (MAX_MSS_DENSITY_1T<<3); + break; + case RF_2T2R: + case RF_2T2R_GREEN: + RT_TRACE(COMP_INIT, "Initializeadapter:RF_Type(2T2R)\n"); + priv->rtllib->MinSpaceCfg = (MAX_MSS_DENSITY_2T<<3); + break; + } + write_nic_byte(dev, AMPDU_MIN_SPACE, priv->rtllib->MinSpaceCfg); +#else + priv->rtllib->MinSpaceCfg = 0x90; + SetHwReg8192SE(dev, HW_VAR_AMPDU_MIN_SPACE, (u8*)(&priv->rtllib->MinSpaceCfg)); +#endif +} + +void +RF_RECOVERY(struct net_device*dev ,u8 Start, u8 End) +{ + u8 offset; + u8 counter; + + + for(offset = Start; offsetbeing_init_adapter = true; +#ifdef CONFIG_ASPM_OR_D3 + RT_DISABLE_ASPM(dev); +#endif +start: + rtl8192_pci_resetdescring(dev); + MacConfigBeforeFwDownload(dev); + priv->initialized_at_probe = false; + + priv->card_8192_version = priv->rtllib->VersionID + = (VERSION_8192S)((read_nic_dword(dev, PMC_FSM)>>16)&0xF); + + RT_TRACE(COMP_INIT, "NIC version : %s\n", ((read_nic_dword(dev, PMC_FSM)>>15)&0x1)?"C-cut":"B-cut"); + + rtStatus = FirmwareDownload92S((struct net_device*)dev); + if(rtStatus != true) + { + if(fw_download_times <= 10){ + RT_TRACE(COMP_INIT, "rtl8192se_adapter_start(): Download Firmware failed %d times, Download again!!\n",fw_download_times); + fw_download_times = fw_download_times + 1; + goto start; + }else{ + RT_TRACE(COMP_INIT, "rtl8192se_adapter_start(): Download Firmware failed 10, end!!\n"); + goto end; + } + } + + MacConfigAfterFwDownload(dev); + + priv->FwCmdIOMap = read_nic_word(dev, LBUS_MON_ADDR); + priv->FwCmdIOParam = read_nic_dword(dev, LBUS_ADDR_MASK); + + +#if (RTL8192S_DISABLE_FW_DM == 1) + write_nic_dword(dev, WFM5, FW_DM_DISABLE); + ChkFwCmdIoDone(dev); + write_nic_dword(dev, WFM5, FW_TXANT_SWITCH_DISABLE); + ChkFwCmdIoDone(dev); +#endif + +#if (HAL_MAC_ENABLE == 1) + RT_TRACE(COMP_INIT, "MAC Config Start!\n"); + if (PHY_MACConfig8192S(dev) != true) + { + RT_TRACE(COMP_ERR, "MAC Config failed\n"); + return rtStatus; + } + RT_TRACE(COMP_INIT, "MAC Config Finished!\n"); +#endif + + write_nic_dword(dev, CMDR, 0x37FC); + +#if (HAL_BB_ENABLE == 1) + RT_TRACE(COMP_INIT, "BB Config Start!\n"); + if (PHY_BBConfig8192S(dev) != true) + { + RT_TRACE(COMP_INIT, "BB Config failed\n"); + return rtStatus; + } + RT_TRACE(COMP_INIT, "BB Config Finished!\n"); +#endif + + + priv->Rf_Mode = RF_OP_By_SW_3wire; +#if (HAL_RF_ENABLE == 1) + RT_TRACE(COMP_INIT, "RF Config started!\n"); + +#if (RTL92SE_FPGA_VERIFY == 0) + write_nic_byte(dev, AFE_XTAL_CTRL+1, 0xDB); + if(priv->card_8192_version== VERSION_8192S_ACUT) + write_nic_byte(dev, SPS1_CTRL+3, 0x07); + else + write_nic_byte(dev, RF_CTRL, 0x07); +#endif + if(PHY_RFConfig8192S(dev) != true) + { + RT_TRACE(COMP_ERR, "RF Config failed\n"); + return rtStatus; + } + RT_TRACE(COMP_INIT, "RF Config Finished!\n"); +#endif + + + priv->RfRegChnlVal[0] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask); + priv->RfRegChnlVal[1] = rtl8192_phy_QueryRFReg(dev, (RF90_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask); + + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn, 0x1); + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, 0x1); + + HwConfigureRTL8192SE(dev); + + if(priv->ResetProgress == RESET_TYPE_NORESET) + rtl8192_SetWirelessMode(dev, priv->rtllib->mode); + CamResetAllEntry(dev); + { + u8 SECR_value = 0x0; + SECR_value |= SCR_TxEncEnable; + SECR_value |= SCR_RxDecEnable; + SECR_value |= SCR_NoSKMC; + write_nic_byte(dev, SECR, SECR_value); + } + + { + int i; + for (i=0; i<4; i++) + write_nic_dword(dev, WDCAPARA_ADD[i], 0x5e4322); + } + { + PHY_GetHWRegOriginalValue(dev); +#ifndef CONFIG_MP + rtl8192_phy_setTxPower(dev, priv->chan); +#endif + } + + rtl8192se_HalDetectPwrDownMode(dev); +#if 1 + if(priv->RegRfOff == true) + { + RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): Turn off RF for RegRfOff ----------\n"); + MgntActSet_RF_State(dev, eRfOff, RF_CHANGE_BY_SW); + + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0); + + } + else if(priv->rtllib->RfOffReason > RF_CHANGE_BY_PS) + { + RT_TRACE((COMP_INIT|COMP_RF), "InitializeAdapter8190(): Turn off RF for RfOffReason(%d) ----------\n", priv->rtllib->RfOffReason); + MgntActSet_RF_State(dev, eRfOff, priv->rtllib->RfOffReason); + } + else + { + if(priv->bHwRadioOff == false){ + priv->rtllib->eRFPowerState = eRfOn; + priv->rtllib->RfOffReason = 0; + if(priv->rtllib->LedControlHandler) + priv->rtllib->LedControlHandler(dev, LED_CTL_POWER_ON); + } + } +#endif + + + + { + int i; + for (i=0;i<6;i++) + write_nic_byte(dev, MACIDR0+i, dev->dev_addr[i]); + } + + tmpU1b = read_nic_byte(dev, MAC_PINMUX_CFG); + write_nic_byte(dev, MAC_PINMUX_CFG, tmpU1b&(~BIT3)); + + if(priv->CustomerID == RT_CID_CCX) + { + RT_TRACE(COMP_INIT ,"InitializeAdapter8192SE(): Set FW Cmd FW_TX_FEEDBACK_CCX_ENABLE\n"); + write_nic_dword(dev, WFM5, FW_TX_FEEDBACK_CCX_ENABLE); + ChkFwCmdIoDone(dev); + + write_nic_dword(dev, WFM5, FW_HIGH_PWR_DISABLE); + ChkFwCmdIoDone(dev); + write_nic_dword(dev, WFM5, FW_DIG_HALT); + ChkFwCmdIoDone(dev); + + write_nic_byte(dev, 0xC50, 0x1C); + write_nic_byte(dev, 0xC58, 0x1C); + } + + if(priv->pFirmware->FirmwareVersion >= 0x49){ + u8 tmp_byte = 0; + + tmp_byte = read_nic_byte(dev, FW_RSVD_PG_CRTL) & (~BIT4); + tmp_byte = tmp_byte | BIT5; + write_nic_byte(dev, FW_RSVD_PG_CRTL, tmp_byte); + + write_nic_dword(dev, TXDESC_MSK, 0xFFFFCFFF); + } + + if(priv->pFirmware->FirmwareVersion >= 0x35) + { + priv->rtllib->SetFwCmdHandler(dev, FW_CMD_RA_INIT); + } + else if(priv->pFirmware->FirmwareVersion >= 0x34) + { + write_nic_dword(dev, WFM5, FW_RA_INIT); + ChkFwCmdIoDone(dev); + } + else + { + write_nic_dword(dev, WFM5, FW_RA_RESET); + ChkFwCmdIoDone(dev); + write_nic_dword(dev, WFM5, FW_RA_ACTIVE); + ChkFwCmdIoDone(dev); + write_nic_dword(dev, WFM5, FW_RA_REFRESH); + ChkFwCmdIoDone(dev); + } + + + + PHY_SwitchEphyParameter(dev); + RF_RECOVERY(dev, 0x25, 0x29); + + priv->SilentResetRxSlotIndex = 0; + for( i=0; i < MAX_SILENT_RESET_RX_SLOT_NUM; i++ ) + { + priv->SilentResetRxStuckEvent[i] = 0; + } + + if(priv->BluetoothCoexist) + { + printk("Write reg 0x%x = 1 for Bluetooth Co-existance\n", SYSF_CFG); + write_nic_byte(dev, SYSF_CFG, 0x1); + } + + priv->bIgnoreSilentReset = true; + +#ifdef CONFIG_FW_PARSEBEACON + if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + write_nic_dword(dev, RXFILTERMAP, 0x0100); + } +#endif + rtl8192_irq_enable(dev); +end: + priv->being_init_adapter = false; + return rtStatus; + + +} + +void rtl8192se_net_update(struct net_device *dev) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_network *net = &priv->rtllib->current_network; + u16 rate_config = 0; + u32 regTmp = 0; + u8 rateIndex = 0; + u8 RetryLimit = 0x30; + u16 cap = net->capability; + + priv->short_preamble = cap & WLAN_CAPABILITY_SHORT_PREAMBLE; + + { + rtl8192_config_rate(dev, &rate_config); + if (priv->card_8192_version== VERSION_8192S_ACUT) + priv->basic_rate = rate_config = rate_config & 0x150; + else if (priv->card_8192_version == VERSION_8192S_BCUT) + priv->basic_rate= rate_config = rate_config & 0x15f; + +#if 1 + if(priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_CISCO && ((rate_config &0x150)==0)) + { + rate_config |=0x010; + } + if(priv->rtllib->pHTInfo->IOTPeer & HT_IOT_ACT_WA_IOT_Broadcom) + { + rate_config &= 0x1f0; + printk("HW_VAR_BASIC_RATE, HT_IOT_ACT_WA_IOT_Broadcom, BrateCfg = 0x%x\n", rate_config); + } + + write_nic_byte(dev, RRSR, rate_config&0xff); + write_nic_byte(dev, RRSR+1, (rate_config>>8)&0xff); + + while(rate_config > 0x1) + { + rate_config = (rate_config>> 1); + rateIndex++; + } + write_nic_byte(dev, INIRTSMCS_SEL, rateIndex); + + regTmp = (priv->nCur40MhzPrimeSC) << 5; + if (priv->short_preamble) + regTmp |= 0x80; + write_nic_byte(dev, RRSR+2, regTmp); +#endif + } + + write_nic_dword(dev,BSSIDR,((u32*)net->bssid)[0]); + write_nic_word(dev,BSSIDR+4,((u16*)net->bssid)[2]); + + if (priv->rtllib->iw_mode == IW_MODE_ADHOC){ + RetryLimit = HAL_RETRY_LIMIT_AP_ADHOC; + } else { + RetryLimit = (priv->CustomerID == RT_CID_CCX) ? 7 : HAL_RETRY_LIMIT_INFRA; + } + priv->rtllib->SetHwRegHandler(dev, HW_VAR_RETRY_LIMIT, (u8*)(&RetryLimit)); + + if (priv->rtllib->iw_mode == IW_MODE_ADHOC){ + priv->rtllib->SetHwRegHandler( dev, HW_VAR_BEACON_INTERVAL, (u8*)(&net->beacon_interval)); + } + + rtl8192_update_cap(dev, cap); +} + +#ifdef _RTL8192_EXT_PATCH_ +void rtl8192se_mesh_net_update(struct net_device *dev) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_network *net = &priv->rtllib->current_mesh_network; + u16 rate_config = 0; + u32 regTmp = 0; + u8 rateIndex = 0; + u8 retrylimit = 0x7; + u16 cap = net->capability; + /* At the peer mesh mode, the peer MP shall recognize the short preamble */ + priv->short_preamble = 1; + + if (priv->card_8192_version== VERSION_8192S_ACUT) + priv->basic_rate = rate_config = 0x150; + else if (priv->card_8192_version == VERSION_8192S_BCUT) + priv->basic_rate= rate_config = 0x15f; + + write_nic_byte(dev, RRSR, rate_config&0xff); + write_nic_byte(dev, RRSR+1, (rate_config>>8)&0xff); + + while(rate_config > 0x1) + { + rate_config = (rate_config>> 1); + rateIndex++; + } + write_nic_byte(dev, INIRTSMCS_SEL, rateIndex); + + regTmp = (priv->nCur40MhzPrimeSC) << 5; + if (priv->short_preamble) + regTmp |= 0x80; + write_nic_byte(dev, RRSR+2, regTmp); + + + write_nic_word(dev, BCN_INTERVAL, net->beacon_interval); + PHY_SetBeaconHwReg( dev, net->beacon_interval); + rtl8192_update_cap(dev, cap); + + priv->ShortRetryLimit = + priv->LongRetryLimit = retrylimit; + + write_nic_word(dev,RETRY_LIMIT, \ + retrylimit << RETRY_LIMIT_SHORT_SHIFT | \ + retrylimit << RETRY_LIMIT_LONG_SHIFT); +} +#endif + +void rtl8192se_link_change(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + u32 reg = 0; + + if(IS_NIC_DOWN(priv)) + return; + + priv->rtllib->GetHwRegHandler(dev, HW_VAR_RCR, (u8*)(®)); + + printk("===>%s():ieee->iw_mode is %d\n",__FUNCTION__,ieee->iw_mode); + if (ieee->state == RTLLIB_LINKED) { +#ifdef CONFIG_FW_PARSEBEACON + if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + write_nic_dword(dev, RXFILTERMAP, 0x0000); + } +#endif + if(priv->DM_Type == DM_Type_ByFW) { + if(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_HIGH_POWER) + ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_DISABLE); + else + ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_ENABLE); + } + rtl8192se_net_update(dev); + + if(ieee->bUseRAMask){ + ieee->UpdateHalRAMaskHandler( + dev, + false, + 0, + ieee->pHTInfo->PeerMimoPs, + ieee->mode, + ieee->pHTInfo->bCurTxBW40MHz, + 0); + priv->rssi_level = 0; + }else{ + rtl8192se_update_ratr_table(dev,ieee->dot11HTOperationalRateSet,NULL); + } + if(ieee->IntelPromiscuousModeInfo.bPromiscuousOn) + ; + else + reg |= RCR_CBSSID; + } +#ifdef _RTL8192_EXT_PATCH_ + else if ((ieee->mesh_state == RTLLIB_MESH_LINKED) && ieee->only_mesh) { + rtl8192se_mesh_net_update(dev); + if(ieee->bUseRAMask){ + ieee->UpdateHalRAMaskHandler( + dev, + false, + 0, + ieee->pHTInfo->PeerMimoPs, + ieee->mode, + ieee->pHTInfo->bCurTxBW40MHz, + 0); + priv->rssi_level = 0; + }else{ + rtl8192se_update_ratr_table(dev,ieee->dot11HTOperationalRateSet,NULL); + } +#ifdef CONFIG_FW_PARSEBEACON + if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + write_nic_dword(dev, RXFILTERMAP, 0x0100); + } +#endif + reg &= ~RCR_CBSSID; + } +#endif + else{ +#ifdef CONFIG_FW_PARSEBEACON + if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + write_nic_dword(dev, RXFILTERMAP, 0x0100); + } +#endif + reg &= ~RCR_CBSSID; + } + priv->rtllib->SetHwRegHandler( dev, HW_VAR_RCR, (u8*)(®) ); + + rtl8192se_update_msr(dev); + { + u32 temp = read_nic_dword(dev, TCR); + write_nic_dword(dev, TCR, temp&(~BIT8)); + write_nic_dword(dev, TCR, temp|BIT8); + } +} + +void rtl8192se_AllowAllDestAddr(struct net_device* dev, + bool bAllowAllDA, bool WriteIntoReg) +{ + struct r8192_priv* priv = rtllib_priv(dev); + + if( bAllowAllDA ) + { + priv->ReceiveConfig |= RCR_AAP; + } + else + { + priv->ReceiveConfig &= ~RCR_AAP; + } + + if( WriteIntoReg ) + { + write_nic_dword( dev, RCR, priv->ReceiveConfig ); + } +} + + +u8 MRateToHwRate8192SE(struct net_device*dev, u8 rate) +{ + u8 ret = DESC92S_RATE1M; + u16 max_sg_rate; + static u16 multibss_sg_old = 0x1234; + u16 multibss_sg; + + switch(rate) + { + case MGN_1M: ret = DESC92S_RATE1M; break; + case MGN_2M: ret = DESC92S_RATE2M; break; + case MGN_5_5M: ret = DESC92S_RATE5_5M; break; + case MGN_11M: ret = DESC92S_RATE11M; break; + case MGN_6M: ret = DESC92S_RATE6M; break; + case MGN_9M: ret = DESC92S_RATE9M; break; + case MGN_12M: ret = DESC92S_RATE12M; break; + case MGN_18M: ret = DESC92S_RATE18M; break; + case MGN_24M: ret = DESC92S_RATE24M; break; + case MGN_36M: ret = DESC92S_RATE36M; break; + case MGN_48M: ret = DESC92S_RATE48M; break; + case MGN_54M: ret = DESC92S_RATE54M; break; + + case MGN_MCS0: ret = DESC92S_RATEMCS0; break; + case MGN_MCS1: ret = DESC92S_RATEMCS1; break; + case MGN_MCS2: ret = DESC92S_RATEMCS2; break; + case MGN_MCS3: ret = DESC92S_RATEMCS3; break; + case MGN_MCS4: ret = DESC92S_RATEMCS4; break; + case MGN_MCS5: ret = DESC92S_RATEMCS5; break; + case MGN_MCS6: ret = DESC92S_RATEMCS6; break; + case MGN_MCS7: ret = DESC92S_RATEMCS7; break; + case MGN_MCS8: ret = DESC92S_RATEMCS8; break; + case MGN_MCS9: ret = DESC92S_RATEMCS9; break; + case MGN_MCS10: ret = DESC92S_RATEMCS10; break; + case MGN_MCS11: ret = DESC92S_RATEMCS11; break; + case MGN_MCS12: ret = DESC92S_RATEMCS12; break; + case MGN_MCS13: ret = DESC92S_RATEMCS13; break; + case MGN_MCS14: ret = DESC92S_RATEMCS14; break; + case MGN_MCS15: ret = DESC92S_RATEMCS15; break; + + case MGN_MCS0_SG: + case MGN_MCS1_SG: + case MGN_MCS2_SG: + case MGN_MCS3_SG: + case MGN_MCS4_SG: + case MGN_MCS5_SG: + case MGN_MCS6_SG: + case MGN_MCS7_SG: + case MGN_MCS8_SG: + case MGN_MCS9_SG: + case MGN_MCS10_SG: + case MGN_MCS11_SG: + case MGN_MCS12_SG: + case MGN_MCS13_SG: + case MGN_MCS14_SG: + case MGN_MCS15_SG: + ret = DESC92S_RATEMCS15_SG; + max_sg_rate = rate&0xf; + multibss_sg = max_sg_rate | (max_sg_rate<<4) | (max_sg_rate<<8) | (max_sg_rate<<12); + if (multibss_sg_old != multibss_sg) + { + write_nic_dword(dev, SG_RATE, multibss_sg); + multibss_sg_old = multibss_sg; + } + break; + + + case (0x80|0x20): ret = DESC92S_RATEMCS32; break; + + default: ret = DESC92S_RATEMCS15; break; + + } + + return ret; +} + +u8 rtl8192se_MapHwQueueToFirmwareQueue(u8 QueueID, u8 priority) +{ + u8 QueueSelect = 0x0; + + switch(QueueID) { +#if defined RTL8192E || defined RTL8190P + case BE_QUEUE: + QueueSelect = QSLT_BE; + break; + + case BK_QUEUE: + QueueSelect = QSLT_BK; + break; + + case VO_QUEUE: + QueueSelect = QSLT_VO; + break; + + case VI_QUEUE: + QueueSelect = QSLT_VI; + break; + case MGNT_QUEUE: + QueueSelect = QSLT_MGNT; + break; + case BEACON_QUEUE: + QueueSelect = QSLT_BEACON; + break; + case TXCMD_QUEUE: + QueueSelect = QSLT_CMD; + break; + case HIGH_QUEUE: + QueueSelect = QSLT_HIGH; + break; +#elif defined RTL8192SE + case BE_QUEUE: + QueueSelect = priority; + break; + case BK_QUEUE: + QueueSelect = priority; + break; + case VO_QUEUE: + QueueSelect = priority; + break; + case VI_QUEUE: + QueueSelect = priority; + break; + case MGNT_QUEUE: + QueueSelect = QSLT_BE; + break; + case BEACON_QUEUE: + QueueSelect = QSLT_BEACON; + break; + case TXCMD_QUEUE: + QueueSelect = QSLT_CMD; + break; + case HIGH_QUEUE: + QueueSelect = QSLT_HIGH; + break; +#endif + default: + RT_TRACE(COMP_ERR, "TransmitTCB(): Impossible Queue Selection: %d \n", QueueID); + break; + } + return QueueSelect; +} + + +void rtl8192se_tx_fill_desc(struct net_device* dev, tx_desc * pDesc, cb_desc * cb_desc, struct sk_buff* skb) +{ + u8 *pSeq; + u16 Temp; + struct r8192_priv* priv = rtllib_priv(dev); + + struct rtllib_hdr_1addr * header = NULL; + + dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); + + u16 fc=0, stype=0; + header = (struct rtllib_hdr_1addr *)(((u8*)skb->data)); + fc = header->frame_ctl; + stype = WLAN_FC_GET_STYPE(fc); + memset((void*)pDesc, 0, 32); + + { + + if(priv->rtllib->bUseRAMask){ + if(cb_desc->macId < 32) + { + pDesc->MacID = cb_desc->macId; + pDesc->Rsvd_MacID = cb_desc->macId; + } + } + pDesc->TXHT = (cb_desc->data_rate&0x80)?1:0; + +#if (RTL92SE_FPGA_VERIFY == 0) + if (priv->card_8192_version== VERSION_8192S_ACUT) + { + if (cb_desc->data_rate== MGN_1M || cb_desc->data_rate == MGN_2M || + cb_desc->data_rate == MGN_5_5M || cb_desc->data_rate == MGN_11M) + { + cb_desc->data_rate = MGN_12M; + } + } +#endif + pDesc->TxRate = MRateToHwRate8192SE(dev,cb_desc->data_rate); + pDesc->TxShort = rtl8192se_QueryIsShort(((cb_desc->data_rate&0x80)?1:0), MRateToHwRate8192SE(dev,cb_desc->data_rate), cb_desc); + + if(cb_desc->bAMPDUEnable) + { + pDesc->AggEn = 1; + } + else + { + pDesc->AggEn = 0; + } + + { + pSeq = (u8 *)(skb->data+22); + Temp = pSeq[0]; + Temp <<= 12; + Temp |= (*(u16 *)pSeq)>>4; + pDesc->Seq = Temp; + } + + pDesc->RTSEn = (cb_desc->bRTSEnable && cb_desc->bCTSEnable==false)?1:0; + pDesc->CTS2Self = (cb_desc->bCTSEnable)?1:0; + pDesc->RTSSTBC = (cb_desc->bRTSSTBC)?1:0; + pDesc->RTSHT = (cb_desc->rts_rate&0x80)?1:0; + +#if (RTL92SE_FPGA_VERIFY == 0) + if (priv->card_8192_version== VERSION_8192S_ACUT) + { + if (cb_desc->rts_rate == MGN_1M || cb_desc->rts_rate == MGN_2M || + cb_desc->rts_rate == MGN_5_5M || cb_desc->rts_rate == MGN_11M) + { + cb_desc->rts_rate = MGN_12M; + } + } +#endif + pDesc->RTSRate = MRateToHwRate8192SE(dev,cb_desc->rts_rate); + pDesc->RTSRate = MRateToHwRate8192SE(dev,MGN_24M); + pDesc->RTSBW = 0; + pDesc->RTSSC = cb_desc->RTSSC; + pDesc->RTSShort = (pDesc->RTSHT==0)?(cb_desc->bRTSUseShortPreamble?1:0):(cb_desc->bRTSUseShortGI?1:0); + if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + if(cb_desc->bPacketBW) + { + pDesc->TxBw = 1; + pDesc->TXSC = 0; + } + else + { + pDesc->TxBw = 0; + pDesc->TXSC = priv->nCur40MhzPrimeSC; + } + } + else + { + pDesc->TxBw = 0; + pDesc->TXSC = 0; + } + + pDesc->LINIP = 0; + pDesc->Offset = 32; + pDesc->PktSize = (u16)skb->len; + + pDesc->RaBRSRID = cb_desc->RATRIndex; +#if 0 +printk("*************TXDESC:\n"); +printk("\tTxRate: %d\n", pDesc->TxRate); +printk("\tAMPDUEn: %d\n", pDesc->AggEn); +printk("\tTxBw: %d\n", pDesc->TxBw); +printk("\tTXSC: %d\n", pDesc->TXSC); +printk("\tPktSize: %d\n", pDesc->PktSize); +printk("\tRatrIdx: %d\n", pDesc->RaBRSRID); +#endif + if (cb_desc->bHwSec) { + static u8 tmp =0; + if (!tmp) { + tmp = 1; + } +#ifdef _RTL8192_EXT_PATCH_ + if(cb_desc->mesh_pkt == 0) +#endif + { + switch (priv->rtllib->pairwise_key_type) { + case KEY_TYPE_WEP40: + case KEY_TYPE_WEP104: + pDesc->SecType = 0x1; + break; + case KEY_TYPE_TKIP: + pDesc->SecType = 0x2; + break; + case KEY_TYPE_CCMP: + pDesc->SecType = 0x3; + break; + case KEY_TYPE_NA: + pDesc->SecType = 0x0; + break; + } + } +#ifdef _RTL8192_EXT_PATCH_ + else if(cb_desc->mesh_pkt == 1) + { + switch (priv->rtllib->mesh_pairwise_key_type) { + case KEY_TYPE_WEP40: + case KEY_TYPE_WEP104: + pDesc->SecType = 0x1; + break; + case KEY_TYPE_TKIP: + pDesc->SecType = 0x2; + break; + case KEY_TYPE_CCMP: + pDesc->SecType = 0x3; + break; + case KEY_TYPE_NA: + pDesc->SecType = 0x0; + break; + } + } +#endif + } + + pDesc->PktID = 0x0; + pDesc->QueueSel = rtl8192se_MapHwQueueToFirmwareQueue(cb_desc->queue_index, cb_desc->priority); + + pDesc->DataRateFBLmt = 0x1F; + pDesc->DISFB = cb_desc->bTxDisableRateFallBack; + pDesc->UserRate = cb_desc->bTxUseDriverAssingedRate; + + if (pDesc->UserRate == true && pDesc->TXHT == true) + RF_ChangeTxPath(dev, cb_desc->data_rate); + + } + + + pDesc->FirstSeg = 1; + pDesc->LastSeg = 1; + + pDesc->TxBufferSize= (u16)skb->len; + + pDesc->TxBuffAddr = cpu_to_le32(mapping); + +} + +void rtl8192se_tx_fill_cmd_desc(struct net_device* dev, tx_desc_cmd * entry, cb_desc * cb_desc, struct sk_buff* skb) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(cb_desc->bCmdOrInit == DESC_PACKET_TYPE_INIT) { + + dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); + + memset((void*)entry, 0, 32); + + entry->LINIP = cb_desc->bLastIniPkt; + + entry->FirstSeg = 1; + entry->LastSeg = 1; + + entry->TxBufferSize= (u16)(skb->len); + entry->TxBufferAddr = cpu_to_le32(mapping); + entry->PktSize = (u16)(skb->len); + + { + entry->OWN = 1; + } + } else { + + u8* pDesc = (u8*)entry; + + dma_addr_t mapping = pci_map_single(priv->pdev, skb->data, skb->len, PCI_DMA_TODEVICE); + + CLEAR_PCI_TX_DESC_CONTENT(pDesc, sizeof(tx_desc_cmd)); + + SET_TX_DESC_FIRST_SEG(pDesc, 1); + SET_TX_DESC_LAST_SEG(pDesc, 1); + + SET_TX_DESC_OFFSET(pDesc, 0x20); + + SET_TX_DESC_PKT_SIZE(pDesc, (u16)(skb->len)); + SET_TX_DESC_QUEUE_SEL(pDesc, 0x13); + + + SET_BITS_TO_LE_4BYTE(skb->data, 24, 7, priv->H2CTxCmdSeq); + + SET_TX_DESC_TX_BUFFER_SIZE(pDesc, (u16)(skb->len)); + SET_TX_DESC_TX_BUFFER_ADDRESS(pDesc, cpu_to_le32(mapping)); + + SET_TX_DESC_OWN(pDesc, 1); + + RT_TRACE(COMP_CMD, "TxFillCmdDesc8192SE(): H2C Tx Cmd Content ----->\n"); + } +} + +u8 HwRateToMRate92S(bool bIsHT, u8 rate) +{ + u8 ret_rate = 0x02; + + if (!bIsHT) { + switch (rate) { + case DESC92S_RATE1M: + ret_rate = MGN_1M; + break; + case DESC92S_RATE2M: + ret_rate = MGN_2M; + break; + case DESC92S_RATE5_5M: + ret_rate = MGN_5_5M; + break; + case DESC92S_RATE11M: + ret_rate = MGN_11M; + break; + case DESC92S_RATE6M: + ret_rate = MGN_6M; + break; + case DESC92S_RATE9M: + ret_rate = MGN_9M; + break; + case DESC92S_RATE12M: + ret_rate = MGN_12M; + break; + case DESC92S_RATE18M: + ret_rate = MGN_18M; + break; + case DESC92S_RATE24M: + ret_rate = MGN_24M; + break; + case DESC92S_RATE36M: + ret_rate = MGN_36M; + break; + case DESC92S_RATE48M: + ret_rate = MGN_48M; + break; + case DESC92S_RATE54M: + ret_rate = MGN_54M; + break; + default: + ret_rate = 0xff; + break; + } + } else { + switch (rate) { + case DESC92S_RATEMCS0: + ret_rate = MGN_MCS0; + break; + case DESC92S_RATEMCS1: + ret_rate = MGN_MCS1; + break; + case DESC92S_RATEMCS2: + ret_rate = MGN_MCS2; + break; + case DESC92S_RATEMCS3: + ret_rate = MGN_MCS3; + break; + case DESC92S_RATEMCS4: + ret_rate = MGN_MCS4; + break; + case DESC92S_RATEMCS5: + ret_rate = MGN_MCS5; + break; + case DESC92S_RATEMCS6: + ret_rate = MGN_MCS6; + break; + case DESC92S_RATEMCS7: + ret_rate = MGN_MCS7; + break; + case DESC92S_RATEMCS8: + ret_rate = MGN_MCS8; + break; + case DESC92S_RATEMCS9: + ret_rate = MGN_MCS9; + break; + case DESC92S_RATEMCS10: + ret_rate = MGN_MCS10; + break; + case DESC92S_RATEMCS11: + ret_rate = MGN_MCS11; + break; + case DESC92S_RATEMCS12: + ret_rate = MGN_MCS12; + break; + case DESC92S_RATEMCS13: + ret_rate = MGN_MCS13; + break; + case DESC92S_RATEMCS14: + ret_rate = MGN_MCS14; + break; + case DESC92S_RATEMCS15: + ret_rate = MGN_MCS15; + break; + case DESC92S_RATEMCS32: + ret_rate = (0x80|0x20); + break; + default: + ret_rate = 0xff; + break; + } + + } + return ret_rate; +} + +long +rtl8192se_signal_scale_mapping(struct r8192_priv * priv, + long currsig + ) +{ + long retsig; + +#if defined RTL8192SE || defined RTL8192CE + if(priv->CustomerID == RT_CID_819x_Lenovo) + { + return currsig; + } + else if(priv->CustomerID == RT_CID_819x_Netcore) + { + if(currsig >= 31 && currsig <= 100) + { + retsig = 100; + } + else if(currsig >= 21 && currsig <= 30) + { + retsig = 90 + ((currsig - 20) / 1); + } + else if(currsig >= 11 && currsig <= 20) + { + retsig = 80 + ((currsig - 10) / 1); + } + else if(currsig >= 7 && currsig <= 10) + { + retsig = 69 + (currsig - 7); + } + else if(currsig == 6) + { + retsig = 54; + } + else if(currsig == 5) + { + retsig = 45; + } + else if(currsig == 4) + { + retsig = 36; + } + else if(currsig == 3) + { + retsig = 27; + } + else if(currsig == 2) + { + retsig = 18; + } + else if(currsig == 1) + { + retsig = 9; + } + else + { + retsig = currsig; + } + return retsig; + } +#endif + + if(currsig >= 61 && currsig <= 100) + { + retsig = 90 + ((currsig - 60) / 4); + } + else if(currsig >= 41 && currsig <= 60) + { + retsig = 78 + ((currsig - 40) / 2); + } + else if(currsig >= 31 && currsig <= 40) + { + retsig = 66 + (currsig - 30); + } + else if(currsig >= 21 && currsig <= 30) + { + retsig = 54 + (currsig - 20); + } + else if(currsig >= 5 && currsig <= 20) + { + retsig = 42 + (((currsig - 5) * 2) / 3); + } + else if(currsig == 4) + { + retsig = 36; + } + else if(currsig == 3) + { + retsig = 27; + } + else if(currsig == 2) + { + retsig = 18; + } + else if(currsig == 1) + { + retsig = 9; + } + else + { + retsig = currsig; + } + + return retsig; +} + + +#define rx_hal_is_cck_rate(_pdesc)\ + (_pdesc->RxMCS == DESC92S_RATE1M ||\ + _pdesc->RxMCS == DESC92S_RATE2M ||\ + _pdesc->RxMCS == DESC92S_RATE5_5M ||\ + _pdesc->RxMCS == DESC92S_RATE11M) +#ifdef _RTL8192_EXT_PATCH_ +void rtl8192se_query_rxphystatus( + struct r8192_priv * priv, + struct rtllib_rx_stats * pstats, + prx_desc pdesc, + prx_fwinfo pDrvInfo, + bool bpacket_match_bssid, + bool bpacket_toself, + bool bPacketBeacon + ) +{ + bool is_cck_rate; + phy_sts_cck_8192s_t* cck_buf; + u8 rx_pwr_all=0, rx_pwr[4], rf_rx_num=0, EVM, PWDB_ALL; + u8 i, max_spatial_stream; + u32 rssi, total_rssi = 0; + u8 cck_highpwr = 0; + is_cck_rate = rx_hal_is_cck_rate(pdesc); + + pstats->bPacketMatchBSSID = bpacket_match_bssid; + pstats->bPacketToSelf = bpacket_toself; + pstats->bIsCCK = is_cck_rate; + pstats->bPacketBeacon = bPacketBeacon; + + pstats->RxMIMOSignalQuality[0] = -1; + pstats->RxMIMOSignalQuality[1] = -1; + + if (is_cck_rate){ + u8 report; + + cck_buf = (phy_sts_cck_8192s_t*)pDrvInfo; + + if(priv->rtllib->eRFPowerState == eRfOn) + cck_highpwr = (u8)priv->bCckHighPower; + else + cck_highpwr = false; + if (!cck_highpwr){ + report = cck_buf->cck_agc_rpt & 0xc0; + report = report >> 6; + switch(report){ + case 0x3: + rx_pwr_all = -40 - (cck_buf->cck_agc_rpt&0x3e); + break; + case 0x2: + rx_pwr_all = -20 - (cck_buf->cck_agc_rpt&0x3e); + break; + case 0x1: + rx_pwr_all = -2 - (cck_buf->cck_agc_rpt&0x3e); + break; + case 0x0: + rx_pwr_all = 14 - (cck_buf->cck_agc_rpt&0x3e); + break; + } + } + else{ + report = pDrvInfo->cfosho[0] & 0x60; + report = report >> 5; + switch(report){ + case 0x3: + rx_pwr_all = -40 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + case 0x2: + rx_pwr_all = -20 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + case 0x1: + rx_pwr_all = -2 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + case 0x0: + rx_pwr_all = 14 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + } + } + + PWDB_ALL= rtl819x_query_rxpwrpercentage(rx_pwr_all); + { + PWDB_ALL+=6; + if(PWDB_ALL > 100) + PWDB_ALL = 100; + if(PWDB_ALL > 34 && PWDB_ALL <= 42) + PWDB_ALL -= 2; + else if(PWDB_ALL > 26 && PWDB_ALL <= 34) + PWDB_ALL -= 6; + else if(PWDB_ALL > 14 && PWDB_ALL <= 26) + PWDB_ALL -= 8; + else if(PWDB_ALL > 4 && PWDB_ALL <= 14) + PWDB_ALL -= 4; + } + pstats->RxPWDBAll = PWDB_ALL; + pstats->RecvSignalPower = rx_pwr_all; + + if (bpacket_match_bssid){ + u8 sq; + if(priv->CustomerID == RT_CID_819x_Lenovo) + { + if(PWDB_ALL >= 50) + sq = 100; + else if(PWDB_ALL >= 35 && PWDB_ALL < 50) + sq = 80; + else if(PWDB_ALL >= 22 && PWDB_ALL < 35) + sq = 60; + else if(PWDB_ALL >= 18 && PWDB_ALL < 22) + sq = 40; + else + sq = 20; + } + else + { + if (pstats->RxPWDBAll > 40) + sq = 100; + else{ + sq = cck_buf->sq_rpt; + if (sq > 64) + sq = 0; + else if(sq < 20) + sq = 100; + else + sq = ((64-sq)*100)/44; + } + } + pstats->SignalQuality = sq; + pstats->RxMIMOSignalQuality[0] = sq; + pstats->RxMIMOSignalQuality[1] = -1; + } + } + else{ + priv->brfpath_rxenable[0] = priv->brfpath_rxenable[1] = true; + + for (i=RF90_PATH_A; ibrfpath_rxenable[i]) + rf_rx_num ++; + + rx_pwr[i] = ((pDrvInfo->gain_trsw[i]&0x3f)*2) - 110; + rssi = rtl819x_query_rxpwrpercentage(rx_pwr[i]); + total_rssi += rssi; + + priv->stats.rxSNRdB[i] = (long)(pDrvInfo->rxsnr[i]/2); + + if (bpacket_match_bssid){ + pstats->RxMIMOSignalStrength[i] = (u8)rssi; + if(priv->CustomerID == RT_CID_819x_Lenovo) + { + u8 SQ; + + if(i == 0) + { + if(rssi >= 50) + SQ = 100; + else if(rssi >= 35 && rssi < 50) + SQ = 80; + else if(rssi >= 22 && rssi < 35) + SQ = 60; + else if(rssi >= 18 && rssi < 22) + SQ = 40; + else + SQ = 20; + pstats->SignalQuality = SQ; + } + } + } + } + rx_pwr_all = ((pDrvInfo->pwdb_all >> 1) & 0x7f) - 106; + PWDB_ALL = rtl819x_query_rxpwrpercentage(rx_pwr_all); + + pstats->RxPWDBAll = PWDB_ALL; + pstats->RxPower = rx_pwr_all; + pstats->RecvSignalPower = rx_pwr_all; + + if(priv->CustomerID != RT_CID_819x_Lenovo){ + if (pdesc->RxHT && pdesc->RxMCS >= DESC92S_RATEMCS8 && pdesc->RxMCS <= DESC92S_RATEMCS15) + max_spatial_stream = 2; + else + max_spatial_stream = 1; + + for(i=0; irxevm[i]); + + if (bpacket_match_bssid) + { + if (i==0) + pstats->SignalQuality = (u8)(EVM & 0xff); + pstats->RxMIMOSignalQuality[i] = (u8)(EVM&0xff); + } + } + } +#if 1 + if (pdesc->BandWidth) + priv->stats.received_bwtype[1+pDrvInfo->rxsc]++; + else + priv->stats.received_bwtype[0]++; +#endif + } + + if (is_cck_rate){ + pstats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,PWDB_ALL)); + } + else { + if (rf_rx_num != 0) + pstats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,total_rssi/=rf_rx_num)); + } +} +#else +void rtl8192se_query_rxphystatus( + struct r8192_priv * priv, + struct rtllib_rx_stats * pstats, + prx_desc pdesc, + prx_fwinfo pDrvInfo, + struct rtllib_rx_stats * precord_stats, + bool bpacket_match_bssid, + bool bpacket_toself, + bool bPacketBeacon, + bool bToSelfBA + ) +{ + bool is_cck_rate; + phy_sts_cck_8192s_t* cck_buf; + s8 rx_pwr_all=0, rx_pwr[4]; + u8 rf_rx_num=0, EVM, PWDB_ALL; + u8 i, max_spatial_stream; + u32 rssi, total_rssi = 0; + + is_cck_rate = rx_hal_is_cck_rate(pdesc); + + memset(precord_stats, 0, sizeof(struct rtllib_rx_stats)); + pstats->bPacketMatchBSSID = precord_stats->bPacketMatchBSSID = bpacket_match_bssid; + pstats->bPacketToSelf = precord_stats->bPacketToSelf = bpacket_toself; + pstats->bIsCCK = precord_stats->bIsCCK = is_cck_rate; + pstats->bPacketBeacon = precord_stats->bPacketBeacon = bPacketBeacon; + pstats->bToSelfBA = precord_stats->bToSelfBA = bToSelfBA; + pstats->bIsCCK = precord_stats->bIsCCK = is_cck_rate; + + pstats->RxMIMOSignalQuality[0] = -1; + pstats->RxMIMOSignalQuality[1] = -1; + precord_stats->RxMIMOSignalQuality[0] = -1; + precord_stats->RxMIMOSignalQuality[1] = -1; + + if (is_cck_rate){ + u8 report, cck_highpwr; + + cck_buf = (phy_sts_cck_8192s_t*)pDrvInfo; + + if(!priv->bInPowerSaveMode) + cck_highpwr = (u8)rtl8192_QueryBBReg(priv->rtllib->dev, rFPGA0_XA_HSSIParameter2, BIT9); + else + cck_highpwr = false; + if (!cck_highpwr){ + report = cck_buf->cck_agc_rpt & 0xc0; + report = report >> 6; + switch(report){ + case 0x3: + rx_pwr_all = -35 - (cck_buf->cck_agc_rpt&0x3e); + break; + case 0x2: + rx_pwr_all = -23 - (cck_buf->cck_agc_rpt&0x3e); + break; + case 0x1: + rx_pwr_all = -11 - (cck_buf->cck_agc_rpt&0x3e); + break; + case 0x0: + rx_pwr_all = 8 - (cck_buf->cck_agc_rpt&0x3e); + break; + } + } + else{ + report = pDrvInfo->cfosho[0] & 0x60; + report = report >> 5; + switch(report){ + case 0x3: + rx_pwr_all = -35 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + case 0x2: + rx_pwr_all = -23 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + case 0x1: + rx_pwr_all = -11 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + case 0x0: + rx_pwr_all = -8 - ((cck_buf->cck_agc_rpt & 0x1f)<<1); + break; + } + } + + PWDB_ALL= rtl819x_query_rxpwrpercentage(rx_pwr_all); + pstats->RxPWDBAll = precord_stats->RxPWDBAll = PWDB_ALL; + pstats->RecvSignalPower = rx_pwr_all; + + if (bpacket_match_bssid){ + u8 sq; + if (pstats->RxPWDBAll > 40) + sq = 100; + else{ + sq = cck_buf->sq_rpt; + if (sq > 64) + sq = 0; + else if(sq < 20) + sq = 100; + else + sq = ((64-sq)*100)/44; + } + pstats->SignalQuality = precord_stats->SignalQuality = sq; + pstats->RxMIMOSignalQuality[0] = precord_stats->RxMIMOSignalQuality[0] = sq; + pstats->RxMIMOSignalQuality[1] = precord_stats->RxMIMOSignalQuality[1] = -1; + } + } + else{ + priv->brfpath_rxenable[0] = priv->brfpath_rxenable[1] = true; + + for (i=RF90_PATH_A; ibrfpath_rxenable[i]) + rf_rx_num ++; + + rx_pwr[i] = ((pDrvInfo->gain_trsw[i]&0x3f)*2) - 110; + rssi = rtl819x_query_rxpwrpercentage(rx_pwr[i]); + total_rssi += rssi; + + priv->stats.rxSNRdB[i] = (long)(pDrvInfo->rxsnr[i]/2); + + if (bpacket_match_bssid){ + pstats->RxMIMOSignalStrength[i] = (u8)rssi; + precord_stats->RxMIMOSignalStrength [i] = (u8)rssi; + } + } + + rx_pwr_all = ((pDrvInfo->pwdb_all >> 1) & 0x7f) - 0x106; + PWDB_ALL = rtl819x_query_rxpwrpercentage(rx_pwr_all); + + pstats->RxPWDBAll = precord_stats->RxPWDBAll = PWDB_ALL; + pstats->RxPower = precord_stats->RxPower = rx_pwr_all; + pstats->RecvSignalPower = precord_stats->RecvSignalPower = rx_pwr_all; + + if (pdesc->RxHT && pdesc->RxMCS >= DESC92S_RATEMCS8 && pdesc->RxMCS <= DESC92S_RATEMCS15) + max_spatial_stream = 2; + else + max_spatial_stream = 1; + + for(i=0; irxevm[i]); + + if (bpacket_match_bssid) + { + if (i==0) + pstats->SignalQuality = + precord_stats->SignalQuality = (u8)(EVM&0xff); + pstats->RxMIMOSignalQuality[i] = + precord_stats->RxMIMOSignalQuality[i] = (u8)(EVM&0xff); + } + } +#if 0 + if (pdesc->BW) + priv->stats.received_bwtype[1+pDrvInfo->rxsc]++; + else + priv->stats.received_bwtype[0]++; +#endif + } + + if (is_cck_rate) + pstats->SignalStrength = + precord_stats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,PWDB_ALL)); + else + if (rf_rx_num != 0) + pstats->SignalStrength = + precord_stats->SignalStrength = (u8)(rtl8192se_signal_scale_mapping(priv,total_rssi/=rf_rx_num)); + +} +#endif + +#ifdef _RTL8192_EXT_PATCH_ +void rtl819x_update_rxsignalstatistics8192S( + struct r8192_priv * priv, + struct rtllib_rx_stats * pstats + ) +{ + int weighting = 0; + + + if(priv->stats.recv_signal_power == 0) + priv->stats.recv_signal_power = pstats->RecvSignalPower; + + if(pstats->RecvSignalPower > priv->stats.recv_signal_power) + weighting = 5; + else if(pstats->RecvSignalPower < priv->stats.recv_signal_power) + weighting = (-5); + priv->stats.recv_signal_power = (priv->stats.recv_signal_power * 5 + pstats->RecvSignalPower + weighting) / 6; + +} + +void Process_UI_RSSI_8192S(struct r8192_priv * priv,struct rtllib_rx_stats * pstats) +{ + u8 rfPath; + u32 last_rssi, tmpVal; + + if(pstats->bPacketToSelf || pstats->bPacketBeacon) + { + priv->stats.RssiCalculateCnt++; + if(priv->stats.ui_rssi.TotalNum++ >= PHY_RSSI_SLID_WIN_MAX) + { + priv->stats.ui_rssi.TotalNum = PHY_RSSI_SLID_WIN_MAX; + last_rssi = priv->stats.ui_rssi.elements[priv->stats.ui_rssi.index]; + priv->stats.ui_rssi.TotalVal -= last_rssi; + } + priv->stats.ui_rssi.TotalVal += pstats->SignalStrength; + + priv->stats.ui_rssi.elements[priv->stats.ui_rssi.index++] = pstats->SignalStrength; + if(priv->stats.ui_rssi.index >= PHY_RSSI_SLID_WIN_MAX) + priv->stats.ui_rssi.index = 0; + + tmpVal = priv->stats.ui_rssi.TotalVal/priv->stats.ui_rssi.TotalNum; + priv->stats.signal_strength = rtl819x_translate_todbm(priv, (u8)tmpVal); + + } + + if(!pstats->bIsCCK && pstats->bPacketToSelf) + { + for (rfPath = RF90_PATH_A; rfPath < priv->NumTotalRFPath; rfPath++) + { + if (!rtl8192_phy_CheckIsLegalRFPath(priv->rtllib->dev, rfPath)) + continue; + RT_TRACE(COMP_DBG, "pstats->RxMIMOSignalStrength[%d] = %d \n", rfPath, pstats->RxMIMOSignalStrength[rfPath] ); + + if(priv->stats.rx_rssi_percentage[rfPath] == 0) + { + priv->stats.rx_rssi_percentage[rfPath] = pstats->RxMIMOSignalStrength[rfPath]; + } + + if(pstats->RxMIMOSignalStrength[rfPath] > priv->stats.rx_rssi_percentage[rfPath]) + { + priv->stats.rx_rssi_percentage[rfPath] = + ( (priv->stats.rx_rssi_percentage[rfPath]*(Rx_Smooth_Factor-1)) + + (pstats->RxMIMOSignalStrength[rfPath])) /(Rx_Smooth_Factor); + priv->stats.rx_rssi_percentage[rfPath] = priv->stats.rx_rssi_percentage[rfPath] + 1; + } + else + { + priv->stats.rx_rssi_percentage[rfPath] = + ( (priv->stats.rx_rssi_percentage[rfPath]*(Rx_Smooth_Factor-1)) + + (pstats->RxMIMOSignalStrength[rfPath])) /(Rx_Smooth_Factor); + } + RT_TRACE(COMP_DBG, "priv->stats.rx_rssi_percentage[%d] = %d \n",rfPath, priv->stats.rx_rssi_percentage[rfPath] ); + } + } + +} + +void Process_PWDB_8192S(struct r8192_priv * priv,struct rtllib_rx_stats * pstats,struct rtllib_network* pnet, struct sta_info *pEntry) +{ + long UndecoratedSmoothedPWDB=0; + + if(priv->rtllib->iw_mode == IW_MODE_MESH){ + if(pnet){ + if(priv->mshobj->ext_patch_get_peermp_rssi_param) + UndecoratedSmoothedPWDB = priv->mshobj->ext_patch_get_peermp_rssi_param(pnet); + }else + UndecoratedSmoothedPWDB = priv->undecorated_smoothed_pwdb; + } + else if(priv->rtllib->iw_mode == IW_MODE_ADHOC){ + if(pEntry){ + UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB; + } + }else + UndecoratedSmoothedPWDB = priv->undecorated_smoothed_pwdb; + + if(pstats->bPacketToSelf || pstats->bPacketBeacon){ + if(UndecoratedSmoothedPWDB < 0){ + UndecoratedSmoothedPWDB = pstats->RxPWDBAll; + } + + if(pstats->RxPWDBAll > (u32)UndecoratedSmoothedPWDB){ + UndecoratedSmoothedPWDB = + ( ((UndecoratedSmoothedPWDB)*(Rx_Smooth_Factor-1)) + + (pstats->RxPWDBAll)) /(Rx_Smooth_Factor); + UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB + 1; + }else{ + UndecoratedSmoothedPWDB = + ( ((UndecoratedSmoothedPWDB)*(Rx_Smooth_Factor-1)) + + (pstats->RxPWDBAll)) /(Rx_Smooth_Factor); + } + if(priv->rtllib->iw_mode == IW_MODE_MESH){ + if(pnet){ + if(priv->mshobj->ext_patch_set_peermp_rssi_param) + priv->mshobj->ext_patch_set_peermp_rssi_param(pnet,UndecoratedSmoothedPWDB); + }else + priv->undecorated_smoothed_pwdb = UndecoratedSmoothedPWDB; + }else if(priv->rtllib->iw_mode == IW_MODE_ADHOC){ + if(pEntry){ + pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB; + } + }else{ + priv->undecorated_smoothed_pwdb = UndecoratedSmoothedPWDB; + } + rtl819x_update_rxsignalstatistics8192S(priv, pstats); + } +} + +void Process_UiLinkQuality8192S(struct r8192_priv * priv,struct rtllib_rx_stats * pstats) +{ + u32 last_evm=0, nSpatialStream, tmpVal; + + if(pstats->SignalQuality != 0) + { + if (pstats->bPacketToSelf || pstats->bPacketBeacon) + { + if(priv->stats.ui_link_quality.TotalNum++ >= PHY_LINKQUALITY_SLID_WIN_MAX) + { + priv->stats.ui_link_quality.TotalNum = PHY_LINKQUALITY_SLID_WIN_MAX; + last_evm = priv->stats.ui_link_quality.elements[priv->stats.ui_link_quality.index]; + priv->stats.ui_link_quality.TotalVal -= last_evm; + } + priv->stats.ui_link_quality.TotalVal += pstats->SignalQuality; + + priv->stats.ui_link_quality.elements[priv->stats.ui_link_quality.index++] = pstats->SignalQuality; + if(priv->stats.ui_link_quality.index >= PHY_LINKQUALITY_SLID_WIN_MAX) + priv->stats.ui_link_quality.index = 0; + + + tmpVal = priv->stats.ui_link_quality.TotalVal/priv->stats.ui_link_quality.TotalNum; + priv->stats.signal_quality = tmpVal; + priv->stats.last_signal_strength_inpercent = tmpVal; + + for(nSpatialStream = 0; nSpatialStream<2 ; nSpatialStream++) + { + if(pstats->RxMIMOSignalQuality[nSpatialStream] != -1) + { + if(priv->stats.rx_evm_percentage[nSpatialStream] == 0) + { + priv->stats.rx_evm_percentage[nSpatialStream] = pstats->RxMIMOSignalQuality[nSpatialStream]; + } + priv->stats.rx_evm_percentage[nSpatialStream] = + ( (priv->stats.rx_evm_percentage[nSpatialStream]*(Rx_Smooth_Factor-1)) + + (pstats->RxMIMOSignalQuality[nSpatialStream]* 1)) /(Rx_Smooth_Factor); + } + } + } + } + else + ; + +} +#endif + + +#ifdef _RTL8192_EXT_PATCH_ +void rtl8192se_process_phyinfo(struct r8192_priv * priv, u8* buffer,struct rtllib_rx_stats * pcurrent_stats,struct rtllib_network * pnet, struct sta_info *pEntry) +#else +void rtl8192se_process_phyinfo(struct r8192_priv * priv, u8* buffer,struct rtllib_rx_stats * pprevious_stats, struct rtllib_rx_stats * pcurrent_stats) +#endif +{ +#ifdef _RTL8192_EXT_PATCH_ + if(!pcurrent_stats->bPacketMatchBSSID) + return; + Process_UI_RSSI_8192S(priv, pcurrent_stats); + Process_PWDB_8192S(priv, pcurrent_stats, pnet, pEntry); + Process_UiLinkQuality8192S(priv, pcurrent_stats); +#else + bool bcheck = false; + u8 rfpath; + u32 nspatial_stream, tmp_val; + static u32 slide_rssi_index=0, slide_rssi_statistics=0; + static u32 slide_evm_index=0, slide_evm_statistics=0; + static u32 last_rssi=0, last_evm=0; + static u32 slide_beacon_adc_pwdb_index=0, slide_beacon_adc_pwdb_statistics=0; + static u32 last_beacon_adc_pwdb=0; + + struct rtllib_hdr_3addr *hdr; + u16 sc ; + unsigned int frag,seq; + hdr = (struct rtllib_hdr_3addr *)buffer; + sc = le16_to_cpu(hdr->seq_ctl); + frag = WLAN_GET_SEQ_FRAG(sc); + seq = WLAN_GET_SEQ_SEQ(sc); + pcurrent_stats->Seq_Num = seq; + if(!pprevious_stats->bIsAMPDU) + { + bcheck = true; + }else { +#if 0 + if( !pcurrent_stats->bIsAMPDU || pcurrent_stats->bFirstMPDU) + bcheck = true; +#endif + } + + if(slide_rssi_statistics++ >= PHY_RSSI_SLID_WIN_MAX) + { + slide_rssi_statistics = PHY_RSSI_SLID_WIN_MAX; + last_rssi = priv->stats.slide_signal_strength[slide_rssi_index]; + priv->stats.slide_rssi_total -= last_rssi; + } + priv->stats.slide_rssi_total += pprevious_stats->SignalStrength; + + priv->stats.slide_signal_strength[slide_rssi_index++] = pprevious_stats->SignalStrength; + if(slide_rssi_index >= PHY_RSSI_SLID_WIN_MAX) + slide_rssi_index = 0; + + tmp_val = priv->stats.slide_rssi_total/slide_rssi_statistics; + priv->stats.signal_strength = rtl819x_translate_todbm(priv, (u8)tmp_val); + pcurrent_stats->rssi = priv->stats.signal_strength; + if(!pprevious_stats->bPacketMatchBSSID) + { + if(!pprevious_stats->bToSelfBA) + return; + } + + if(!bcheck) + return; + + rtl819x_process_cck_rxpathsel(priv,pprevious_stats); + + priv->stats.num_process_phyinfo++; +#if 0 + if(slide_rssi_statistics++ >= PHY_RSSI_SLID_WIN_MAX) + { + slide_rssi_statistics = PHY_RSSI_SLID_WIN_MAX; + last_rssi = priv->stats.slide_signal_strength[slide_rssi_index]; + priv->stats.slide_rssi_total -= last_rssi; + } + priv->stats.slide_rssi_total += pprevious_stats->SignalStrength; + + priv->stats.slide_signal_strength[slide_rssi_index++] = pprevious_stats->SignalStrength; + if(slide_rssi_index >= PHY_RSSI_SLID_WIN_MAX) + slide_rssi_index = 0; + + tmp_val = priv->stats.slide_rssi_total/slide_rssi_statistics; + priv->stats.signal_strength = rtl819x_translate_todbm(priv, (u8)tmp_val); + +#endif + if(!pprevious_stats->bIsCCK && pprevious_stats->bPacketToSelf) + { + for (rfpath = RF90_PATH_A; rfpath < RF90_PATH_C; rfpath++) + { + if (!rtl8192_phy_CheckIsLegalRFPath(priv->rtllib->dev, rfpath)) + continue; + RT_TRACE(COMP_DBG,"Jacken -> pPreviousstats->RxMIMOSignalStrength[rfpath] = %d \n" ,pprevious_stats->RxMIMOSignalStrength[rfpath] ); + if(priv->stats.rx_rssi_percentage[rfpath] == 0) + { + priv->stats.rx_rssi_percentage[rfpath] = pprevious_stats->RxMIMOSignalStrength[rfpath]; + } + if(pprevious_stats->RxMIMOSignalStrength[rfpath] > priv->stats.rx_rssi_percentage[rfpath]) + { + priv->stats.rx_rssi_percentage[rfpath] = + ( (priv->stats.rx_rssi_percentage[rfpath]*(Rx_Smooth_Factor-1)) + + (pprevious_stats->RxMIMOSignalStrength[rfpath])) /(Rx_Smooth_Factor); + priv->stats.rx_rssi_percentage[rfpath] = priv->stats.rx_rssi_percentage[rfpath] + 1; + } + else + { + priv->stats.rx_rssi_percentage[rfpath] = + ( (priv->stats.rx_rssi_percentage[rfpath]*(Rx_Smooth_Factor-1)) + + (pprevious_stats->RxMIMOSignalStrength[rfpath])) /(Rx_Smooth_Factor); + } + RT_TRACE(COMP_DBG,"Jacken -> priv->RxStats.RxRSSIPercentage[rfPath] = %d \n" ,priv->stats.rx_rssi_percentage[rfpath] ); + } + } + + + if(pprevious_stats->bPacketBeacon) + { + if(slide_beacon_adc_pwdb_statistics++ >= PHY_Beacon_RSSI_SLID_WIN_MAX) + { + slide_beacon_adc_pwdb_statistics = PHY_Beacon_RSSI_SLID_WIN_MAX; + last_beacon_adc_pwdb = priv->stats.Slide_Beacon_pwdb[slide_beacon_adc_pwdb_index]; + priv->stats.Slide_Beacon_Total -= last_beacon_adc_pwdb; + } + priv->stats.Slide_Beacon_Total += pprevious_stats->RxPWDBAll; + priv->stats.Slide_Beacon_pwdb[slide_beacon_adc_pwdb_index] = pprevious_stats->RxPWDBAll; + slide_beacon_adc_pwdb_index++; + if(slide_beacon_adc_pwdb_index >= PHY_Beacon_RSSI_SLID_WIN_MAX) + slide_beacon_adc_pwdb_index = 0; + pprevious_stats->RxPWDBAll = priv->stats.Slide_Beacon_Total/slide_beacon_adc_pwdb_statistics; + if(pprevious_stats->RxPWDBAll >= 3) + pprevious_stats->RxPWDBAll -= 3; + } + + RT_TRACE(COMP_RXDESC, "Smooth %s PWDB = %d\n", + pprevious_stats->bIsCCK? "CCK": "OFDM", + pprevious_stats->RxPWDBAll); + + if(pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) + { + if(priv->undecorated_smoothed_pwdb < 0) + { + priv->undecorated_smoothed_pwdb = pprevious_stats->RxPWDBAll; + } +#if 1 + if(pprevious_stats->RxPWDBAll > (u32)priv->undecorated_smoothed_pwdb) + { + priv->undecorated_smoothed_pwdb = + ( ((priv->undecorated_smoothed_pwdb)*(Rx_Smooth_Factor-1)) + + (pprevious_stats->RxPWDBAll)) /(Rx_Smooth_Factor); + priv->undecorated_smoothed_pwdb = priv->undecorated_smoothed_pwdb + 1; + } + else + { + priv->undecorated_smoothed_pwdb = + ( ((priv->undecorated_smoothed_pwdb)*(Rx_Smooth_Factor-1)) + + (pprevious_stats->RxPWDBAll)) /(Rx_Smooth_Factor); + } +#else + if(pPreviousRfd->Status.RxPWDBAll > (u32)pHalData->UndecoratedSmoothedPWDB) + { + pHalData->UndecoratedSmoothedPWDB = + ( ((pHalData->UndecoratedSmoothedPWDB)* 5) + (pPreviousRfd->Status.RxPWDBAll)) / 6; + pHalData->UndecoratedSmoothedPWDB = pHalData->UndecoratedSmoothedPWDB + 1; + } + else + { + pHalData->UndecoratedSmoothedPWDB = + ( ((pHalData->UndecoratedSmoothedPWDB)* 5) + (pPreviousRfd->Status.RxPWDBAll)) / 6; + } +#endif + rtl819x_update_rxsignalstatistics8190pci(priv,pprevious_stats); + } + + if(pprevious_stats->SignalQuality == 0) + { + } + else + { + if(pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA){ + if(slide_evm_statistics++ >= PHY_RSSI_SLID_WIN_MAX){ + slide_evm_statistics = PHY_RSSI_SLID_WIN_MAX; + last_evm = priv->stats.slide_evm[slide_evm_index]; + priv->stats.slide_evm_total -= last_evm; + } + + priv->stats.slide_evm_total += pprevious_stats->SignalQuality; + + priv->stats.slide_evm[slide_evm_index++] = pprevious_stats->SignalQuality; + if(slide_evm_index >= PHY_RSSI_SLID_WIN_MAX) + slide_evm_index = 0; + + tmp_val = priv->stats.slide_evm_total/slide_evm_statistics; + priv->stats.signal_quality = tmp_val; + priv->stats.last_signal_strength_inpercent = tmp_val; + } + + if(pprevious_stats->bPacketToSelf || pprevious_stats->bPacketBeacon || pprevious_stats->bToSelfBA) + { + for(nspatial_stream = 0; nspatial_stream<2 ; nspatial_stream++) + { + if(pprevious_stats->RxMIMOSignalQuality[nspatial_stream] != -1) + { + if(priv->stats.rx_evm_percentage[nspatial_stream] == 0) + { + priv->stats.rx_evm_percentage[nspatial_stream] = pprevious_stats->RxMIMOSignalQuality[nspatial_stream]; + } + priv->stats.rx_evm_percentage[nspatial_stream] = + ( (priv->stats.rx_evm_percentage[nspatial_stream]* (Rx_Smooth_Factor-1)) + + (pprevious_stats->RxMIMOSignalQuality[nspatial_stream]* 1)) / (Rx_Smooth_Factor); + } + } + } + } +#endif + +} + + + +void rtl8192se_TranslateRxSignalStuff(struct net_device *dev, + struct sk_buff *skb, + struct rtllib_rx_stats * pstats, + prx_desc pdesc, + prx_fwinfo pdrvinfo) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + bool bpacket_match_bssid, bpacket_toself; + bool bPacketBeacon=false; + struct rtllib_hdr_3addr *hdr; +#ifdef _RTL8192_EXT_PATCH_ + struct rtllib_network* pnet=NULL; + u8 *psaddr; + struct sta_info *pEntry = NULL; +#else + bool bToSelfBA=false; + static struct rtllib_rx_stats previous_stats; +#endif + u16 fc,type; + u8* tmp_buf; + u8 *praddr; + + tmp_buf = skb->data + pstats->RxDrvInfoSize + pstats->RxBufShift; + + hdr = (struct rtllib_hdr_3addr *)tmp_buf; + fc = le16_to_cpu(hdr->frame_ctl); + type = WLAN_FC_GET_TYPE(fc); + praddr = hdr->addr1; + +#ifdef _RTL8192_EXT_PATCH_ + psaddr = hdr->addr2; + if((priv->rtllib->iw_mode == IW_MODE_MESH) && (priv->mshobj->ext_patch_get_mpinfo)) + pnet = priv->mshobj->ext_patch_get_mpinfo(dev,psaddr); + if(priv->rtllib->iw_mode == IW_MODE_ADHOC){ + pEntry = GetStaInfo(priv->rtllib, psaddr); + } +#endif +#ifdef _RTL8192_EXT_PATCH_ + bpacket_match_bssid = ((RTLLIB_FTYPE_CTL != type) && (!pstats->bHwError) && (!pstats->bCRC)&& (!pstats->bICV)); + if(pnet){ + bpacket_match_bssid = bpacket_match_bssid; + } + else{ + bpacket_match_bssid = bpacket_match_bssid && + (!compare_ether_addr(priv->rtllib->current_network.bssid, + (fc & RTLLIB_FCTL_TODS)? hdr->addr1 : + (fc & RTLLIB_FCTL_FROMDS )? hdr->addr2 : hdr->addr3)); + } +#else + bpacket_match_bssid = ((RTLLIB_FTYPE_CTL != type) && + (!compare_ether_addr(priv->rtllib->current_network.bssid, + (fc & RTLLIB_FCTL_TODS)? hdr->addr1 : + (fc & RTLLIB_FCTL_FROMDS )? hdr->addr2 : hdr->addr3)) + && (!pstats->bHwError) && (!pstats->bCRC)&& (!pstats->bICV)); +#endif + bpacket_toself = bpacket_match_bssid & (!compare_ether_addr(praddr, priv->rtllib->dev->dev_addr)); + if(WLAN_FC_GET_FRAMETYPE(fc)== RTLLIB_STYPE_BEACON){ + bPacketBeacon = true; + } +#ifndef _RTL8192_EXT_PATCH_ + if(WLAN_FC_GET_FRAMETYPE(fc) == RTLLIB_STYPE_BLOCKACK){ + if ((!compare_ether_addr(praddr,dev->dev_addr))) + bToSelfBA = true; + } +#endif + if(bpacket_match_bssid){ + priv->stats.numpacket_matchbssid++; + } + if(bpacket_toself){ + priv->stats.numpacket_toself++; + } +#ifdef _RTL8192_EXT_PATCH_ + rtl8192se_query_rxphystatus(priv, pstats, pdesc, pdrvinfo, bpacket_match_bssid, + bpacket_toself ,bPacketBeacon); + rtl8192se_process_phyinfo(priv, tmp_buf,pstats,pnet, pEntry); + +#else + rtl8192se_process_phyinfo(priv, tmp_buf,&previous_stats, pstats); + rtl8192se_query_rxphystatus(priv, pstats, pdesc, pdrvinfo, &previous_stats, bpacket_match_bssid, + bpacket_toself ,bPacketBeacon, bToSelfBA); + rtl8192_record_rxdesc_forlateruse(pstats, &previous_stats); +#endif + +} + +void rtl8192se_UpdateReceivedRateHistogramStatistics( + struct net_device *dev, + struct rtllib_rx_stats* pstats + ) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u32 rcvType=1; + u32 rateIndex; + u32 preamble_guardinterval; + + #if 0 + if (pRfd->queue_id == CMPK_RX_QUEUE_ID) + return; + #endif + if(pstats->bCRC) + rcvType = 2; + else if(pstats->bICV) + rcvType = 3; + + if(pstats->bShortPreamble) + preamble_guardinterval = 1; + else + preamble_guardinterval = 0; + + switch(pstats->rate) + { + case MGN_1M: rateIndex = 0; break; + case MGN_2M: rateIndex = 1; break; + case MGN_5_5M: rateIndex = 2; break; + case MGN_11M: rateIndex = 3; break; + case MGN_6M: rateIndex = 4; break; + case MGN_9M: rateIndex = 5; break; + case MGN_12M: rateIndex = 6; break; + case MGN_18M: rateIndex = 7; break; + case MGN_24M: rateIndex = 8; break; + case MGN_36M: rateIndex = 9; break; + case MGN_48M: rateIndex = 10; break; + case MGN_54M: rateIndex = 11; break; + case MGN_MCS0: rateIndex = 12; break; + case MGN_MCS1: rateIndex = 13; break; + case MGN_MCS2: rateIndex = 14; break; + case MGN_MCS3: rateIndex = 15; break; + case MGN_MCS4: rateIndex = 16; break; + case MGN_MCS5: rateIndex = 17; break; + case MGN_MCS6: rateIndex = 18; break; + case MGN_MCS7: rateIndex = 19; break; + case MGN_MCS8: rateIndex = 20; break; + case MGN_MCS9: rateIndex = 21; break; + case MGN_MCS10: rateIndex = 22; break; + case MGN_MCS11: rateIndex = 23; break; + case MGN_MCS12: rateIndex = 24; break; + case MGN_MCS13: rateIndex = 25; break; + case MGN_MCS14: rateIndex = 26; break; + case MGN_MCS15: rateIndex = 27; break; + default: rateIndex = 28; break; + } + priv->stats.received_preamble_GI[preamble_guardinterval][rateIndex]++; + priv->stats.received_rate_histogram[0][rateIndex]++; + priv->stats.received_rate_histogram[rcvType][rateIndex]++; +} + +bool rtl8192se_rx_query_status_desc(struct net_device* dev, struct rtllib_rx_stats* stats, rx_desc *pdesc, struct sk_buff* skb) +{ + struct r8192_priv* priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + u32 PHYStatus = pdesc->PHYStatus; + rx_fwinfo* pDrvInfo; + stats->Length = (u16)pdesc->Length; + stats->RxDrvInfoSize = (u8)pdesc->DrvInfoSize*8; + stats->RxBufShift = (u8)((pdesc->Shift)&0x03); + stats->bICV = (u16)pdesc->ICVError; + stats->bCRC = (u16)pdesc->CRC32; + stats->bHwError = (u16)(pdesc->CRC32|pdesc->ICVError); + stats->Decrypted = !pdesc->SWDec; + stats->rate = (u8)pdesc->RxMCS; + stats->bShortPreamble= (u16)pdesc->SPLCP; + stats->bIsAMPDU = (bool)(pdesc->PAGGR==1); + stats->bFirstMPDU = (bool)((pdesc->PAGGR==1) && (pdesc->FAGGR==1)); + stats->TimeStampLow = pdesc->TSFL; + stats->RxIs40MHzPacket= (bool)pdesc->BandWidth; + if(IS_UNDER_11N_AES_MODE(ieee)) + { + if(stats->bICV && !stats->bCRC) + { + stats->bICV = false; + stats->bHwError = false; + } + } + + + if(stats->Length > 0x2000 || stats->Length < 24) + { + RT_TRACE(COMP_ERR, "Err RX pkt len = 0x%x\n", stats->Length); + stats->bHwError |= 1; + } + rtl8192se_UpdateReceivedRateHistogramStatistics(dev, stats); + + if(!stats->bHwError) + stats->rate = HwRateToMRate92S((bool)(pdesc->RxHT), (u8)(pdesc->RxMCS)); + else + { + stats->rate = MGN_1M; + return false; + } + + rtl819x_UpdateRxPktTimeStamp(dev, stats); + + if((stats->RxBufShift + stats->RxDrvInfoSize) > 0) + stats->bShift = 1; + + if (PHYStatus == true) + { + pDrvInfo = (rx_fwinfo*)(skb->data + stats->RxBufShift); + + rtl8192se_TranslateRxSignalStuff(dev, skb, stats, pdesc, pDrvInfo); + + } + return true; +} + +void rtl8192se_halt_adapter(struct net_device *dev, bool bReset) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int i; + u8 wait = 30; + + RT_TRACE(COMP_INIT, "==> rtl8192se_halt_adapter()\n"); + +#if 1 + while (wait-- >= 10 && priv->PwrDomainProtect == true) + { + if (priv->PwrDomainProtect == true) + { + RT_TRACE(COMP_INIT, "Delay 20ms to wait PwrDomainProtect\n"); + mdelay(20); + } + else + break; + } + + if (wait == 9) + RT_TRACE(COMP_INIT, "PwrDomainProtect FAIL\n"); +#endif + + priv->rtllib->state = RTLLIB_NOLINK; + rtl8192se_update_msr(dev); +#if 1 + PHY_SetRtl8192seRfHalt(dev); +#endif + udelay(100); + +#if 0 + udelay(20); + if (!bReset) { + mdelay(20); + } +#endif + for(i = 0; i < MAX_QUEUE_SIZE; i++) { + skb_queue_purge(&priv->rtllib->skb_waitQ [i]); + } + for(i = 0; i < MAX_QUEUE_SIZE; i++) { + skb_queue_purge(&priv->rtllib->skb_aggQ [i]); + } +#ifdef _RTL8192_EXT_PATCH_ + for(i = 0; i < MAX_QUEUE_SIZE; i++) { + skb_queue_purge(&priv->rtllib->skb_meshaggQ [i]); + } +#endif + + skb_queue_purge(&priv->skb_queue); + RT_TRACE(COMP_INIT, "<== HaltAdapter8192SE()\n"); + return; +} + +u8 GetFreeRATRIndex8192SE (struct net_device* dev) +{ + struct r8192_priv* priv = rtllib_priv(dev); + u8 bitmap = priv->RATRTableBitmap; + u8 ratr_index = 0; + for( ;ratr_index<7; ratr_index++) + { + if((bitmap & BIT0) == 0) + { + priv->RATRTableBitmap |= BIT0<>1; + } + return ratr_index; +} + +void rtl8192se_update_ratr_table(struct net_device* dev,u8* pMcsRate,struct sta_info* pEntry) +{ + struct r8192_priv* priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + u32 ratr_value = 0; + u8 ratr_index = 0; + u8 bNMode = 0; + u16 shortGI_rate = 0; + u32 tmp_ratr_value = 0; + u8 MimoPs; + WIRELESS_MODE WirelessMode; + u8 bCurTxBW40MHz, bCurShortGI40MHz, bCurShortGI20MHz; + + if(ieee->iw_mode == IW_MODE_ADHOC){ + if(pEntry == NULL){ + printk("Doesn't have match Entry\n"); + return; + } + + if(pEntry->ratr_index != 8) + ratr_index = pEntry->ratr_index; + else + ratr_index = GetFreeRATRIndex8192SE(dev); + + if(ratr_index == 7){ + RT_TRACE(COMP_RATE, "Ratrtable are full"); + return; + } + MimoPs = pEntry->htinfo.MimoPs; + + if((ieee->mode == WIRELESS_MODE_G) && (pEntry->wireless_mode == WIRELESS_MODE_N_24G)) + WirelessMode = ieee->mode; + else + WirelessMode = pEntry->wireless_mode; + + bCurTxBW40MHz = pEntry->htinfo.bCurTxBW40MHz; + bCurShortGI40MHz = pEntry->htinfo.bCurShortGI40MHz; + bCurShortGI20MHz = pEntry->htinfo.bCurShortGI20MHz; + pEntry->ratr_index = ratr_index; + } + else + { + ratr_index = 0; + WirelessMode = ieee->mode; + MimoPs = ieee->pHTInfo->PeerMimoPs; + bCurTxBW40MHz = ieee->pHTInfo->bCurTxBW40MHz; + bCurShortGI40MHz = ieee->pHTInfo->bCurShortGI40MHz; + bCurShortGI20MHz = ieee->pHTInfo->bCurShortGI20MHz; + } + + rtl8192_config_rate(dev, (u16*)(&ratr_value)); + ratr_value |= (*(u16*)(pMcsRate)) << 12; + switch (WirelessMode) + { + case IEEE_A: + ratr_value &= 0x00000FF0; + break; + case IEEE_B: + ratr_value &= 0x0000000D; + break; + case IEEE_G: + case IEEE_G|IEEE_B: + ratr_value &= 0x00000FF5; + break; + case IEEE_N_24G: + case IEEE_N_5G: + bNMode = 1; + if (MimoPs == 0) + ratr_value &= 0x0007F005; + else{ + if (priv->rf_type == RF_1T2R ||priv->rf_type == RF_1T1R || (ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_2SS)){ + if ((bCurTxBW40MHz) && !(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_40_MHZ)) + ratr_value &= 0x000FF015; + else + ratr_value &= 0x000ff005; + }else{ + if ((bCurTxBW40MHz) && !(ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_40_MHZ)) + ratr_value &= 0x0f0ff015; + else + ratr_value &= 0x0f0ff005; + } + } + break; + default: + printk("====>%s(), mode is not correct:%x\n", __FUNCTION__,WirelessMode); + break; + } + if (priv->card_8192_version>= VERSION_8192S_BCUT) + ratr_value &= 0x0FFFFFFF; + else if (priv->card_8192_version == VERSION_8192S_ACUT) + ratr_value &= 0x0FFFFFF0; + + if (((ieee->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_SHORT_GI)==0) && + bNMode && ((bCurTxBW40MHz && bCurShortGI40MHz) || + (!bCurTxBW40MHz && bCurShortGI20MHz))) + { + ratr_value |= 0x10000000; + tmp_ratr_value = (ratr_value>>12); + for(shortGI_rate=15; shortGI_rate>0; shortGI_rate--) + { + if((1<pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + ratr_value &= 0xfffffff0; + printk("UpdateHalRATRTable8192SE(), for HT_IOT_ACT_WA_IOT_Broadcom, ratr_value = 0x%x\n", ratr_value); + } + + write_nic_dword(dev, ARFR0+ratr_index*4, ratr_value); + RT_TRACE(COMP_RATE, "%s: ratr_index=%d ratr_table=0x%8.8x\n", __FUNCTION__,ratr_index, read_nic_dword(dev, ARFR0+ratr_index*4)); + if (ratr_value & 0xfffff000){ + rtl8192se_set_fw_cmd(dev, FW_CMD_RA_REFRESH_N); + } + else{ + rtl8192se_set_fw_cmd(dev, FW_CMD_RA_REFRESH_BG); + } +} + +int r8192se_resume_firm(struct net_device *dev) +{ + write_nic_byte(dev, 0x42, 0xFF); + write_nic_word(dev, 0x40, 0x77FC); + write_nic_word(dev, 0x40, 0x57FC); + write_nic_word(dev, 0x40, 0x37FC); + write_nic_word(dev, 0x40, 0x77FC); + + udelay(100); + + write_nic_word(dev, 0x40, 0x57FC); + write_nic_word(dev, 0x40, 0x37FC); + write_nic_byte(dev, 0x42, 0x00); + + return 0; +} +void PHY_SetRtl8192seRfHalt(struct net_device* dev) +{ + struct r8192_priv* priv = rtllib_priv(dev); + PRT_POWER_SAVE_CONTROL pPSC = (PRT_POWER_SAVE_CONTROL)(&(priv->rtllib->PowerSaveControl)); + u8 u1bTmp; + + if(priv->rtllib->RfOffReason == RF_CHANGE_BY_IPS && priv->LedStrategy == SW_LED_MODE8) + { + SET_RTL8192SE_RF_SLEEP(dev); + return; + } + +#ifdef LOW_DOWN_POWER + if(0) +#else + if(priv->bDriverIsGoingToUnload) +#endif + write_nic_byte(dev,0x560,0x0); + + RT_TRACE(COMP_PS, "PHY_SetRtl8192seRfHalt save BB/RF\n"); + u1bTmp = read_nic_byte(dev, LDOV12D_CTRL); + u1bTmp |= BIT0; + write_nic_byte(dev, LDOV12D_CTRL, u1bTmp); + write_nic_byte(dev, SPS1_CTRL, 0x0); + write_nic_byte(dev, TXPAUSE, 0xFF); + write_nic_word(dev, CMDR, 0x57FC); + udelay(100); + write_nic_word(dev, CMDR, 0x77FC); + write_nic_byte(dev, PHY_CCA, 0x0); + udelay(10); + write_nic_word(dev, CMDR, 0x37FC); + udelay(10); + write_nic_word(dev, CMDR, 0x77FC); + udelay(10); + write_nic_word(dev, CMDR, 0x57FC); + write_nic_word(dev, CMDR, 0x0000); + + +#ifdef LOW_DOWN_POWER + if(0) +#else + if(priv->bDriverIsGoingToUnload) +#endif + { + u1bTmp = read_nic_byte(dev, (SYS_FUNC_EN+ 1)); + u1bTmp &= ~(BIT0); + write_nic_byte(dev, SYS_FUNC_EN+1, u1bTmp); + } + + + u1bTmp = read_nic_byte(dev, (SYS_CLKR + 1)); + + if (u1bTmp & BIT7) { + u1bTmp &= ~(BIT6 | BIT7); + if(!HalSetSysClk8192SE(dev, u1bTmp)) { + printk("Switch ctrl path fail\n"); + return; + } + } + +#ifdef LOW_DOWN_POWER + if((priv->rtllib->RfOffReason & (RF_CHANGE_BY_IPS | RF_CHANGE_BY_HW)) && + !priv->bDriverIsGoingToUnload) +#else + if(priv->rtllib->RfOffReason==RF_CHANGE_BY_IPS && !priv->bDriverIsGoingToUnload) +#endif + { + write_nic_byte(dev, 0x03, 0xF9); + } else + { + write_nic_byte(dev, 0x03, 0xF9); + } + write_nic_byte(dev, SYS_CLKR+1, 0x70); + write_nic_byte(dev, AFE_PLL_CTRL+1, 0x68); + write_nic_byte(dev, AFE_PLL_CTRL, 0x00); + write_nic_byte(dev, LDOA15_CTRL, 0x34); + write_nic_byte(dev, AFE_XTAL_CTRL, 0x0E); + RT_SET_PS_LEVEL(pPSC, RT_RF_OFF_LEVL_HALT_NIC); +} + + +/* +* Description: +* Set RateAdaptive Mask +* /param Adapter Pionter to Adapter entity +* /param bMulticast TURE if broadcast or multicast, used for softAP basic rate +* /param macId macID to set +* /param wirelessMode wireless mode of associated AP/client +* /return void +* +*/ +void UpdateHalRAMask8192SE( + struct net_device* dev, + bool bMulticast, + u8 macId, + u8 MimoPs, + u8 WirelessMode, + u8 bCurTxBW40MHz, + u8 rssi_level){ + struct r8192_priv* priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + u8* pMcsRate = ieee->dot11HTOperationalRateSet; + u32 ratr_bitmap, RateSet, mask=0, band = 0, ratr_value = 0; + u8 shortGI_rate = 0, bShortGI = false; + + RT_TRACE(COMP_RATE, "%s: macid:%d MimoPs=%d WirelessMode=0x%x bCurTxBW40MHz=%d rssid_level=%d\n",__FUNCTION__, macId, MimoPs, WirelessMode,bCurTxBW40MHz, rssi_level); + rtl8192_config_rate(dev, (u16*)&RateSet); + RateSet |= (*(u16*)(pMcsRate)) << 12; + ratr_bitmap = RateSet; + + switch (WirelessMode){ + case WIRELESS_MODE_B: + band |= WIRELESS_11B; + ratr_bitmap &= 0x0000000d; + break; + case WIRELESS_MODE_G: + case (WIRELESS_MODE_G |WIRELESS_MODE_B): + band |= (WIRELESS_11G | WIRELESS_11B); + + if(rssi_level == 1) + ratr_bitmap &= 0x00000f00; + else if(rssi_level == 2) + ratr_bitmap &= 0x00000ff0; + else + ratr_bitmap &= 0x00000ff5; + break; + case WIRELESS_MODE_A: + band |= WIRELESS_11A; + ratr_bitmap &= 0x00000ff0; + break; + case WIRELESS_MODE_N_24G: + case WIRELESS_MODE_N_5G: + { + band |= (WIRELESS_11N| WIRELESS_11G| WIRELESS_11B); + if(MimoPs == MIMO_PS_STATIC){ + if(rssi_level == 1) + ratr_bitmap &= 0x00070000; + else if(rssi_level == 2) + ratr_bitmap &= 0x0007f000; + else + ratr_bitmap &= 0x0007f005; + }else{ + if (priv->rf_type == RF_1T2R || priv->rf_type == RF_1T1R){ + if (bCurTxBW40MHz){ + if(rssi_level == 1) + ratr_bitmap &= 0x000f0000; + else if(rssi_level == 2) + ratr_bitmap &= 0x000ff000; + else + ratr_bitmap &= 0x000ff015; + }else{ + if(rssi_level == 1) + ratr_bitmap &= 0x000f0000; + else if(rssi_level == 2) + ratr_bitmap &= 0x000ff000; + else + ratr_bitmap &= 0x000ff005; + } + }else{ + if (bCurTxBW40MHz){ + if(rssi_level == 1) + ratr_bitmap &= 0x0f0f0000; + else if(rssi_level == 2) + ratr_bitmap &= 0x0f0ff000; + else + ratr_bitmap &= 0x0f0ff015; + }else{ + if(rssi_level == 1) + ratr_bitmap &= 0x0f0f0000; + else if(rssi_level == 2) + ratr_bitmap &= 0x0f0ff000; + else + ratr_bitmap &= 0x0f0ff005; + } + } + } + if( (pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI40MHz) || + (!pHTInfo->bCurTxBW40MHz && pHTInfo->bCurShortGI20MHz)){ + if(macId == 0) + bShortGI = true; + else + bShortGI = false; + } + break; + } + default: + band |= (WIRELESS_11N| WIRELESS_11G| WIRELESS_11B); + + if(priv->rf_type == RF_1T2R) + ratr_bitmap &= 0x000ff0ff; + else + ratr_bitmap &= 0x0f0ff0ff; + break; + } + + if (priv->card_8192_version >= VERSION_8192S_BCUT) + ratr_bitmap &= 0x0FFFFFFF; + else if (priv->card_8192_version == VERSION_8192S_ACUT) + ratr_bitmap &= 0x0FFFFFF0; + + if(bShortGI){ + ratr_bitmap |= 0x10000000; + ratr_value = (ratr_bitmap>>12); + for(shortGI_rate=15; shortGI_rate>0; shortGI_rate--){ + if((1<rtllib->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + ratr_bitmap &= 0xfffffff0; + if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_DISABLE_SHORT_GI) + ratr_bitmap &=0x0fffffff; + } + mask |= (bMulticast ? 1 : 0)<<9 | (macId & 0x1f)<<4 | (band & 0xf); + + RT_TRACE(COMP_RATE, "%s(): mask = %x, bitmap = %x\n",__func__, mask, ratr_bitmap); + write_nic_dword(dev, 0x2c4, ratr_bitmap); + write_nic_dword(dev, WFM5, (FW_RA_UPDATE_MASK | (mask << 8))); +} + +u8 HalSetSysClk8192SE( struct net_device *dev, u8 Data) +{ +#if 0 + write_nic_byte(dev, (SYS_CLKR + 1), Data); + udelay(200);; + return 1; +#else + { + u8 WaitCount = 100; + bool bResult = false; + +#ifdef TO_DO_LIST + RT_DISABLE_FUNC(Adapter, DF_IO_BIT); + + do + { + if(pDevice->IOCount == 0) + break; + delay_us(10); + }while(WaitCount -- > 0); + + if(WaitCount == 0) + { + RT_ENABLE_FUNC(Adapter, DF_IO_BIT); + RT_TRACE(COMP_POWER, DBG_WARNING, ("HalSetSysClk8192SE(): Wait too long! Skip ....\n")); + return false; + } + #endif + write_nic_byte(dev,SYS_CLKR + 1,Data); + + udelay(400); + + + { + u8 TmpValue; + TmpValue=read_nic_byte(dev,SYS_CLKR + 1); + bResult = ((TmpValue&BIT7)== (Data & BIT7)); + if((Data &(BIT6|BIT7)) == false) + { + WaitCount = 100; + TmpValue = 0; + while(1) + { + WaitCount--; + TmpValue=read_nic_byte(dev, SYS_CLKR + 1); + if((TmpValue &BIT6)) + break; + printk("wait for BIT6 return value %x\n",TmpValue); + if(WaitCount==0) + break; + udelay(10); + } + if(WaitCount == 0) + bResult = false; + else + bResult = true; + } + } +#ifdef TO_DO_LIST + RT_ENABLE_FUNC(Adapter, DF_IO_BIT); +#endif + RT_TRACE(COMP_PS,"HalSetSysClk8192SE():Value = %02X, return: %d\n", Data, bResult); + return bResult; + } +#endif +} + +static u8 LegacyRateSet[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c}; +void GetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) +{ + struct r8192_priv* priv = rtllib_priv(dev); + switch(variable) + { + case HW_VAR_INIT_TX_RATE: + { + u8 RateIdx = read_nic_byte(dev, TX_RATE_REG); + if(RateIdx < 76) + *((u8*)(val)) = (RateIdx<12)?(LegacyRateSet[RateIdx]):((RateIdx-12)|0x80); + else + *((u8*)(val)) = 0; + } + break; + + case HW_VAR_RCR: + *((u32*)(val)) = priv->ReceiveConfig; + break; + + default: + break; + } +} + +void SetHwReg8192SE(struct net_device *dev,u8 variable,u8* val) +{ + struct r8192_priv* priv = rtllib_priv(dev); + switch(variable) + { + case HW_VAR_AMPDU_MIN_SPACE: + { + u8 MinSpacingToSet; + u8 SecMinSpace; + + MinSpacingToSet = *((u8*)val); + if(MinSpacingToSet <= 7) + { + if((priv->rtllib->current_network.capability & WLAN_CAPABILITY_PRIVACY) == 0) + SecMinSpace = 0; + else if (priv->rtllib->rtllib_ap_sec_type && + (priv->rtllib->rtllib_ap_sec_type(priv->rtllib) + & (SEC_ALG_WEP|SEC_ALG_TKIP))) + SecMinSpace = 7; + else + SecMinSpace = 1; + + if(MinSpacingToSet < SecMinSpace) + MinSpacingToSet = SecMinSpace; + priv->rtllib->MinSpaceCfg = ((priv->rtllib->MinSpaceCfg&0xf8) |MinSpacingToSet); + RT_TRACE(COMP_MLME, "Set HW_VAR_AMPDU_MIN_SPACE: %#x\n", priv->rtllib->MinSpaceCfg); + write_nic_byte(dev, AMPDU_MIN_SPACE, priv->rtllib->MinSpaceCfg); + } + } + break; + case HW_VAR_SHORTGI_DENSITY: + { + u8 DensityToSet; + + DensityToSet = *((u8*)val); + priv->rtllib->MinSpaceCfg|= (DensityToSet<<3); + RT_TRACE(COMP_MLME, "Set HW_VAR_SHORTGI_DENSITY: %#x\n", priv->rtllib->MinSpaceCfg); + write_nic_byte(dev, AMPDU_MIN_SPACE, priv->rtllib->MinSpaceCfg); + break; + } + case HW_VAR_AMPDU_FACTOR: + { + u8 FactorToSet; + u8 RegToSet; + u8 FactorLevel[18] = {2, 4, 4, 7, 7, 13, 13, 13, 2, 7, 7, 13, 13, 15, 15, 15, 15, 0}; + u8 index = 0; + + FactorToSet = *((u8*)val); + if(FactorToSet <= 3) + { + FactorToSet = (1<<(FactorToSet + 2)); + if(FactorToSet>0xf) + FactorToSet = 0xf; + + for(index=0; index<17; index++) + { + if(FactorLevel[index] > FactorToSet) + FactorLevel[index] = FactorToSet; + } + + for(index=0; index<8; index++) + { + RegToSet = ((FactorLevel[index*2]) | (FactorLevel[index*2+1]<<4)); + write_nic_byte(dev, AGGLEN_LMT_L+index, RegToSet); + } + RegToSet = ((FactorLevel[16]) | (FactorLevel[17]<<4)); + write_nic_byte(dev, AGGLEN_LMT_H, RegToSet); + + RT_TRACE(COMP_MLME, "Set HW_VAR_AMPDU_FACTOR: %#x\n", FactorToSet); + } + } + break; + case HW_VAR_BASIC_RATE: + { + u16 BrateCfg = 0; + u8 RateIndex = 0; + + + rtl8192_config_rate(dev, &BrateCfg); + + if (priv->card_8192_version == VERSION_8192S_ACUT) + priv->basic_rate = BrateCfg = BrateCfg & 0x150; + else if (priv->card_8192_version == VERSION_8192S_BCUT) + priv->basic_rate = BrateCfg = BrateCfg & 0x15f; + + if(priv->rtllib->pHTInfo->IOTPeer == HT_IOT_PEER_CISCO && ((BrateCfg &0x150)==0)) + { + BrateCfg |=0x010; + } + if(priv->rtllib->pHTInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) + { + BrateCfg &= 0x1f0; + printk("HW_VAR_BASIC_RATE, HT_IOT_ACT_WA_IOT_Broadcom, BrateCfg = 0x%x\n", BrateCfg); + } + write_nic_byte(dev, RRSR, BrateCfg&0xff); + write_nic_byte(dev, RRSR+1, (BrateCfg>>8)&0xff); + + while(BrateCfg > 0x1) + { + BrateCfg = (BrateCfg >> 1); + RateIndex++; + } + write_nic_byte(dev, INIRTSMCS_SEL, RateIndex); + } + break; + case HW_VAR_RETRY_LIMIT: + { + u8 RetryLimit = ((u8*)(val))[0]; + + priv->ShortRetryLimit = RetryLimit; + priv->LongRetryLimit = RetryLimit; + + write_nic_word(dev, RETRY_LIMIT, + RetryLimit << RETRY_LIMIT_SHORT_SHIFT | \ + RetryLimit << RETRY_LIMIT_LONG_SHIFT); + } + break; + case HW_VAR_BEACON_INTERVAL: + { + write_nic_word(dev, BCN_INTERVAL, *((u16*)val)); + PHY_SetBeaconHwReg(dev, *((u16*)val)); + } + break; + + case HW_VAR_BSSID: + write_nic_dword(dev, BSSIDR, ((u32*)(val))[0]); + write_nic_word(dev, BSSIDR+4, ((u16*)(val+4))[0]); + break; + + case HW_VAR_MEDIA_STATUS: + { + RT_OP_MODE OpMode = *((RT_OP_MODE *)(val)); + LED_CTL_MODE LedAction = LED_CTL_NO_LINK; + u8 btMsr = read_nic_byte(dev, MSR); + + btMsr &= 0xfc; + switch(OpMode) + { + case RT_OP_MODE_INFRASTRUCTURE: + btMsr |= MSR_INFRA; + LedAction = LED_CTL_LINK; + break; + + case RT_OP_MODE_IBSS: + btMsr |= MSR_ADHOC; + break; + + case RT_OP_MODE_AP: + btMsr |= MSR_AP; + LedAction = LED_CTL_LINK; + break; + + default: + btMsr |= MSR_NOLINK; + break; + } + + write_nic_byte(dev, MSR, btMsr); + + { + u32 temp = read_nic_dword(dev, TCR); + write_nic_dword(dev, TCR, temp&(~BIT8)); + write_nic_dword(dev, TCR, temp|BIT8); + } + priv->rtllib->LedControlHandler(dev, LedAction); + } + break; + + case HW_VAR_RCR: + { + write_nic_dword(dev, RCR,((u32*)(val))[0]); + priv->ReceiveConfig = ((u32*)(val))[0]; + } + break; + + case HW_VAR_CECHK_BSSID: + { + u32 RegRCR, Type; + + Type = ((u8*)(val))[0]; + priv->rtllib->GetHwRegHandler(dev, HW_VAR_RCR, (u8*)(&RegRCR)); + +#if (RTL92SE_FPGA_VERIFY == 1) + RegRCR &= (~RCR_CBSSID); +#else +#if 1 + if (Type == true) + RegRCR |= (RCR_CBSSID); + else if (Type == false) + RegRCR &= (~RCR_CBSSID); +#endif + priv->rtllib->SetHwRegHandler( dev, HW_VAR_RCR, (u8*)(&RegRCR) ); +#endif + } + break; + + case HW_VAR_SLOT_TIME: + { + + priv->slot_time = val[0]; + write_nic_byte(dev, SLOT_TIME, val[0]); + +#ifdef MERGE_TO_DO + if(priv->rtllib->current_network.qos_data.supported !=0) + { + for(eACI = 0; eACI < AC_MAX; eACI++) + { + priv->rtllib->SetHwRegHandler(dev, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, eACI) ); + } + } + else + { + u8 u1bAIFS = aSifsTime + (2 * priv->slot_time); + + write_nic_byte(dev, REG_EDCA_VO_PARAM, u1bAIFS); + write_nic_byte(dev, REG_EDCA_VI_PARAM, u1bAIFS); + write_nic_byte(dev, REG_EDCA_BE_PARAM, u1bAIFS); + write_nic_byte(dev, REG_EDCA_BK_PARAM, u1bAIFS); + } +#endif + } + break; + + case HW_VAR_ACK_PREAMBLE: + { + u8 regTmp; + priv->short_preamble = (bool)(*(u8*)val ); + regTmp = (priv->nCur40MhzPrimeSC)<<5; + if(priv->short_preamble) + regTmp |= 0x80; + + write_nic_byte(dev, RRSR+2, regTmp); + } + break; + + default: + break; + } +} + +void SetBeaconRelatedRegisters8192SE(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + struct rtllib_network *net = &priv->rtllib->current_network; + u16 BcnTimeCfg = 0; + u16 BcnCW = 6, BcnIFS = 0xf; + u16 AtimWindow = 2; + int OpMode = priv->rtllib->iw_mode; + u16 BcnInterval = net->beacon_interval; + write_nic_word(dev, ATIMWND, AtimWindow); + + write_nic_word(dev, BCN_INTERVAL, BcnInterval); + PHY_SetBeaconHwReg( dev, BcnInterval); + + write_nic_word(dev, BCN_DRV_EARLY_INT, 10<<4); + + write_nic_word(dev, BCN_DMATIME, 256); + + write_nic_byte(dev, BCN_ERR_THRESH, 100); + + + switch(OpMode) + { + case IW_MODE_ADHOC: + BcnTimeCfg |= (BcnCW<rtllib; + u8 bitmap = 0; + int i; + + for (i = 0; i < PEER_MAX_ASSOC; i++) { + if (NULL != ieee->peer_assoc_list[i]) { + bitmap |= BIT0 << ieee->peer_assoc_list[i]->ratr_index; + } + } + + priv->RATRTableBitmap = bitmap; + return; +} + +bool rtl8192se_check_ht_cap(struct net_device* dev, struct sta_info *sta, + struct rtllib_network* net) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + PHT_CAPABILITY_ELE pHTCapIE = NULL; + PHT_INFORMATION_ELE pPeerHTInfo = NULL; + u8 ExtChlOffset=0; + u8 *pMcsFilter = NULL; + u16 nMaxAMSDUSize = 0; + static u8 EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; + static u8 EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34}; + + if ((ieee->mode != WIRELESS_MODE_N_24G) && + (ieee->mode != WIRELESS_MODE_N_5G)) { + if (net->mode == IEEE_N_5G) + sta->wireless_mode = IEEE_A; + else if (net->mode == IEEE_N_24G) { + if (net->rates_ex_len > 0) + sta->wireless_mode = IEEE_G; + else + sta->wireless_mode = IEEE_B; + } else + sta->wireless_mode = net->mode; + printk("%s():i am G mode ,do not need to check Cap IE. wireless_mode=0x%x\n", + __FUNCTION__, sta->wireless_mode); + return false; + } + if ((ieee->mode ==WIRELESS_MODE_N_24G) + && ieee->pHTInfo->bRegSuppCCK== false) { + if(net->mode == IEEE_B){ + sta->wireless_mode = net->mode; + printk("%s(): peer is B MODE return\n", __FUNCTION__); + return false; + } + } + if(net->bssht.bdHTCapLen != 0) + { + sta->htinfo.bEnableHT = true; + sta->htinfo.bCurRxReorderEnable = ieee->pHTInfo->bRegRxReorderEnable; + if(net->mode == IEEE_A) + sta->wireless_mode = IEEE_N_5G; + else + sta->wireless_mode = IEEE_N_24G; + } else { + printk("%s(): have no HTCap IE, mode is %d\n",__FUNCTION__,net->mode); + sta->wireless_mode = net->mode; + sta->htinfo.bEnableHT = false; + return true; + } + + if (!memcmp(net->bssht.bdHTCapBuf ,EWC11NHTCap, sizeof(EWC11NHTCap))) + pHTCapIE = (PHT_CAPABILITY_ELE)(&(net->bssht.bdHTCapBuf[4])); + else + pHTCapIE = (PHT_CAPABILITY_ELE)(net->bssht.bdHTCapBuf); + + if (!memcmp(net->bssht.bdHTInfoBuf, EWC11NHTInfo, sizeof(EWC11NHTInfo))) + pPeerHTInfo = (PHT_INFORMATION_ELE)(&net->bssht.bdHTInfoBuf[4]); + else + pPeerHTInfo = (PHT_INFORMATION_ELE)(net->bssht.bdHTInfoBuf); + + ExtChlOffset=((ieee->pHTInfo->bRegBW40MHz == false)?HT_EXTCHNL_OFFSET_NO_EXT: + (ieee->current_network.channel<=6)? + HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + printk("******** STA wireless mode %d\n", sta->wireless_mode); + + if (ieee->pHTInfo->bRegSuppCCK) + sta->htinfo.bSupportCck = (pHTCapIE->DssCCk==1)?true:false; + else { + if(pHTCapIE->DssCCk==1) + return false; + } + + sta->htinfo.MimoPs= pHTCapIE->MimoPwrSave; + + printk("******** PEER MP MimoPs %d\n", sta->htinfo.MimoPs); + if(ieee->pHTInfo->bRegBW40MHz) + sta->htinfo.bBw40MHz= (pHTCapIE->ChlWidth==1)?true:false; + else + sta->htinfo.bBw40MHz = false; + + if((pPeerHTInfo->ExtChlOffset) != ExtChlOffset) + sta->htinfo.bBw40MHz = false; + + ieee->Peer_bCurBW40M = sta->htinfo.bBw40MHz; + printk("******** PEER MP bCurBW40M %d\n", sta->htinfo.bBw40MHz); + if(ieee->pHTInfo->bRegBW40MHz == true) + sta->htinfo.bCurTxBW40MHz = sta->htinfo.bBw40MHz; + + printk("******** PEER MP bCurTxBW40MHz %d\n", sta->htinfo.bCurTxBW40MHz); + sta->htinfo.bCurShortGI20MHz= + ((ieee->pHTInfo->bRegShortGI20MHz)?((pHTCapIE->ShortGI20Mhz==1)?true:false):false); + sta->htinfo.bCurShortGI40MHz= + ((ieee->pHTInfo->bRegShortGI40MHz)?((pHTCapIE->ShortGI40Mhz==1)?true:false):false); + + printk("******** PEER MP bCurShortGI20MHz %d, bCurShortGI40MHz %d\n",sta->htinfo.bCurShortGI20MHz,sta->htinfo.bCurShortGI40MHz); + nMaxAMSDUSize = (pHTCapIE->MaxAMSDUSize==0)?3839:7935; + if(ieee->pHTInfo->nAMSDU_MaxSize >= nMaxAMSDUSize) + sta->htinfo.AMSDU_MaxSize = nMaxAMSDUSize; + else + sta->htinfo.AMSDU_MaxSize = ieee->pHTInfo->nAMSDU_MaxSize; + + printk("****************AMSDU_MaxSize=%d\n",sta->htinfo.AMSDU_MaxSize); + + if(ieee->pHTInfo->AMPDU_Factor >= pHTCapIE->MaxRxAMPDUFactor) + sta->htinfo.AMPDU_Factor = pHTCapIE->MaxRxAMPDUFactor; + else + sta->htinfo.AMPDU_Factor = ieee->pHTInfo->AMPDU_Factor; + + if(ieee->pHTInfo->MPDU_Density >= pHTCapIE->MPDUDensity) + sta->htinfo.MPDU_Density = pHTCapIE->MPDUDensity; + else + sta->htinfo.MPDU_Density = ieee->pHTInfo->MPDU_Density; + + HTFilterMCSRate(ieee, pHTCapIE->MCS, sta->htinfo.McsRateSet); + if(sta->htinfo.MimoPs == 0) + pMcsFilter = MCS_FILTER_1SS; + else + pMcsFilter = MCS_FILTER_ALL; + + sta->htinfo.HTHighestOperaRate = HTGetHighestMCSRate(ieee, sta->htinfo.McsRateSet, pMcsFilter); + printk("******** PEER MP HTHighestOperaRate %x\n",sta->htinfo.HTHighestOperaRate); + + return true; + +} + +#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20) +void rtl8192se_check_tsf_wq(struct work_struct * work) +{ + struct delayed_work *dwork = container_of(work,struct delayed_work,work); + struct rtllib_device *ieee = container_of(dwork, struct rtllib_device, check_tsf_wq); + struct net_device *dev = ieee->dev; +#else +void rtl8192se_check_tsf_wq(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; +#endif + u32 CurrTsfHigh,CurrTsfLow; + u32 TargetTsfHigh,TargetTsfLow; + + CurrTsfHigh = read_nic_dword(dev, TSFR+4); + CurrTsfLow = (u32)(ieee->CurrTsf & 0xffff); + TargetTsfHigh = (u32)(ieee->TargetTsf >> 32); + TargetTsfLow = (u32)(ieee->TargetTsf & 0xffff); + + printk("Current TSF Low = %x, Hight = %x\n",CurrTsfLow,CurrTsfHigh); + printk("Target TSF Low = %x, Hight = %x\n",TargetTsfLow,TargetTsfHigh); + + ieee->CurrTsf |= (u64)CurrTsfHigh << 32; + + if(ieee->CurrTsf < ieee->TargetTsf) + { + down(&ieee->wx_sem); + + rtllib_stop_protocol(ieee,true); + + ieee->ssid_set = 1; + + rtllib_start_protocol(ieee); + + up(&ieee->wx_sem); + } +} + +#if LINUX_VERSION_CODE >=KERNEL_VERSION(2,6,20) +void rtl8192se_update_assoc_sta_info_wq(struct work_struct * work) +{ + struct delayed_work *dwork = container_of(work,struct delayed_work,work); + struct rtllib_device *ieee = container_of(dwork, struct rtllib_device, update_assoc_sta_info_wq); + struct net_device *dev = ieee->dev; +#else +void rtl8192se_update_assoc_sta_info_wq(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; +#endif + struct sta_info * pEntry = NULL; + int idx = 0; + for(idx=0; idxpeer_assoc_list[idx]; + if(NULL != pEntry) + { + u8 * addr = pEntry->macaddr; + + if(ieee->bUseRAMask){ + if((pEntry->wireless_mode & WIRELESS_MODE_N_24G) || (pEntry->wireless_mode & WIRELESS_MODE_N_5G)) + pEntry->ratr_index = RATR_INX_WIRELESS_NGB; + else if(pEntry->wireless_mode & WIRELESS_MODE_G) + pEntry->ratr_index = RATR_INX_WIRELESS_GB; + else if(pEntry->wireless_mode & WIRELESS_MODE_B) + pEntry->ratr_index = RATR_INX_WIRELESS_B; + ieee->UpdateHalRAMaskHandler(dev, + false, + pEntry->aid+1, + pEntry->htinfo.MimoPs, + pEntry->wireless_mode, + pEntry->htinfo.bCurTxBW40MHz, + 0); + } + else + rtl8192se_update_ratr_table(dev,pEntry->htinfo.McsRateSet,pEntry); + printk("%s: STA:"MAC_FMT", aid:%d, wireless_mode=0x%x ratr_index=%d\n",__FUNCTION__,MAC_ARG(addr), pEntry->aid, pEntry->wireless_mode, pEntry->ratr_index); + } + } + if(!ieee->bUseRAMask) + UpdateHalRATRTableIndex(dev); + + if(ieee->Peer_bCurBW40M) + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20_40, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + else + HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, (ieee->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); +} + +bool +rtl8192se_RxCommandPacketHandle( + struct net_device *dev, + struct sk_buff* skb, + rx_desc *pdesc) +{ + u8* pRxCmdHeader; + u8* pCmdContent; + u16 total_length, offset; + u16 RxCmdLen; + u8 RxCmdElementID, RxCmdSeq; + bool RxCmdContinue; + +#if 0 + if ((pRfd->queue_id != CMPK_RX_QUEUE_ID) || (pRfd == NULL)) + { + return 0; + } +#endif + + +#if 0 + if(pdesc->MACID == 0x1e) + { + return 0; + } +#endif + + total_length = pdesc->Length; + pRxCmdHeader = skb->data; + offset = 0; + + do + { + RxCmdLen = (u16)GET_C2H_CMD_CMD_LEN(pRxCmdHeader + offset); + RxCmdElementID = (u8)GET_C2H_CMD_ELEMENT_ID(pRxCmdHeader + offset); + RxCmdSeq = (u8)GET_C2H_CMD_CMD_SEQ(pRxCmdHeader + offset); + RxCmdContinue = (bool)GET_C2H_CMD_CONTINUE(pRxCmdHeader + offset); + pCmdContent = (u8*)GET_C2H_CMD_CONTENT(pRxCmdHeader + offset); + + if((offset + C2H_RX_CMD_HDR_LEN + RxCmdLen) > total_length) + { + printk("Wrong C2H Cmd length!\n"); + break; + } + + RT_TRACE(COMP_CMD, "RxCmdLen = 0x%x, RxCmdElementID = 0x%x, RxCmdSeq = 0x%x, RxCmdContinue = 0x%x\n", + RxCmdLen, RxCmdElementID, RxCmdSeq, RxCmdContinue); + RT_TRACE(COMP_CMD, "Rx CMD Packet Hex Data :%x\n", total_length); + RT_TRACE(COMP_CMD, "Rx CMD Content Hex Data :%x:%x\n", *pCmdContent, RxCmdLen); + + switch(RxCmdElementID) + { + case HAL_FW_C2H_CMD_C2HFEEDBACK: + { + switch(GET_C2H_CMD_FEEDBACK_ELEMENT_ID(pCmdContent)) + { + case HAL_FW_C2H_CMD_C2HFEEDBACK_CCX_PER_PKT_RPT: + { + RT_TRACE(COMP_CMD, "HAL_FW_C2H_CMD_C2HFEEDBACK_CCX_PER_PKT_RPT FW_DBG CMD Hex:%x\n", total_length); + } + break; + + case HAL_FW_C2H_CMD_C2HFEEDBACK_DTM_TX_STATISTICS_RPT: + break; + + default: + break; + } + } + break; + + case HAL_FW_C2H_CMD_C2HDBG: + RT_TRACE(COMP_CMD, "rtl8192se_RxCommandPacketHandle(): %x:%x<*** FW_DBG CMD String ***>\n", *pCmdContent, RxCmdLen); + break; + + case HAL_FW_C2H_CMD_BT_State: + { + } + break; + case HAL_FW_C2H_CMD_BT_Service: + { + } + break; + case HAL_FW_C2H_CMD_SurveyDone: + { + rtl8192se_rx_surveydone_cmd(dev); + } + break; + default: + RT_TRACE(COMP_CMD, "rtl8192se_RxCommandPacketHandle(): Receive unhandled C2H CMD (%d)\n", RxCmdElementID); + break; + } + + offset += (C2H_RX_CMD_HDR_LEN + N_BYTE_ALIGMENT(RxCmdLen, 8)); + + if(!RxCmdContinue || ((offset + C2H_RX_CMD_HDR_LEN) > total_length)) + { + break; + } + }while(true); + RT_TRACE(COMP_RECV, "RxCommandPacketHandle8190Pci(): It is a command packet\n"); + + return 1; +} + +void +rtl8192se_InitializeVariables(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if (priv->rf_type == RF_1T1R) + strcpy(priv->nick, "rtl8191SEVA1"); + else if (priv->rf_type == RF_1T2R) + strcpy(priv->nick, "rtl8191SEVA2"); + else + strcpy(priv->nick, "rtl8192SE"); + +#ifdef _ENABLE_SW_BEACON + priv->rtllib->softmac_features = IEEE_SOFTMAC_SCAN | + IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | + IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE | + IEEE_SOFTMAC_BEACONS; +#else +#ifdef _RTL8192_EXT_PATCH_ + priv->rtllib->softmac_features = IEEE_SOFTMAC_SCAN | + IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | + IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE /* | + IEEE_SOFTMAC_BEACONS*/; +#else + priv->rtllib->softmac_features = IEEE_SOFTMAC_SCAN | + IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | + IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE /* | + IEEE_SOFTMAC_BEACONS*/; +#endif +#endif + + priv->rtllib->tx_headroom = 0; + + priv->ShortRetryLimit = 0x30; + priv->LongRetryLimit = 0x30; + + priv->EarlyRxThreshold = 7; + priv->pwrGroupCnt = 0; + + priv->bIgnoreSilentReset = false; + priv->enable_gpio0 = 0; + + priv->TransmitConfig = 0; + + priv->ReceiveConfig = + RCR_APPFCS | RCR_APWRMGT | /*RCR_ADD3 |*/ + RCR_AMF | RCR_ADF | RCR_APP_MIC | RCR_APP_ICV | + RCR_AICV | RCR_ACRC32 | + RCR_AB | RCR_AM | + RCR_APM | + /*RCR_AAP |*/ + RCR_APP_PHYST_STAFF | RCR_APP_PHYST_RXFF | + (priv->EarlyRxThreshold<irq_mask[0] = + (IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK | \ + IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK | \ + IMR_BDOK | IMR_RXCMDOK | /*IMR_TIMEOUT0 |*/ IMR_RDU | IMR_RXFOVW/* | \ + IMR_BcnInt| IMR_TXFOVW | IMR_TBDOK | IMR_TBDER*/); +#else + priv->irq_mask[0] = + (IMR_ROK | IMR_VODOK | IMR_VIDOK | IMR_BEDOK | IMR_BKDOK | \ + IMR_HCCADOK | IMR_MGNTDOK | IMR_COMDOK | IMR_HIGHDOK | \ + IMR_BDOK | IMR_RXCMDOK | /*IMR_TIMEOUT0 |*/ IMR_RDU | IMR_RXFOVW | \ + IMR_BcnInt/*| IMR_TXFOVW*/ /*| IMR_TBDOK | IMR_TBDER*/); +#endif + priv->irq_mask[1] = 0;/* IMR_TBDOK | IMR_TBDER*/ + + + priv->MidHighPwrTHR_L1 = 0x3B; + priv->MidHighPwrTHR_L2 = 0x40; + priv->PwrDomainProtect = false; + + if (!(priv->rtllib->softmac_features & IEEE_SOFTMAC_SCAN)){ + if (!priv->scan_cmd) { + priv->scan_cmd = kmalloc(sizeof(H2C_SITESURVEY_PARA) + + RTL_MAX_SCAN_SIZE, GFP_KERNEL); + } + } +} + +void rtl8192se_EnableInterrupt(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + priv->irq_enabled = 1; + +#ifdef RTL8192CE + write_nic_dword(dev, REG_HIMR, priv->irq_mask[0]&0xFFFFFFFF); +#else + write_nic_dword(dev,INTA_MASK, priv->irq_mask[0]); +#endif + +#ifdef RTL8192SE + write_nic_dword(dev,INTA_MASK+4, priv->irq_mask[1]&0x3F); +#endif + +} + +void rtl8192se_DisableInterrupt(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + +#ifdef RTL8192CE + write_nic_dword(dev, REG_HIMR, IMR8190_DISABLED); +#else + write_nic_dword(dev,INTA_MASK,0); +#endif + +#ifdef RTL8192SE + write_nic_dword(dev,INTA_MASK + 4,0); +#endif + priv->irq_enabled = 0; +} + +void rtl8192se_ClearInterrupt(struct net_device *dev) +{ + u32 tmp = 0; +#ifdef RTL8192CE + tmp = read_nic_dword(dev, REG_HISR); + write_nic_dword(dev, REG_HISR, tmp); +#else + tmp = read_nic_dword(dev, ISR); + write_nic_dword(dev, ISR, tmp); +#endif + +#ifdef RTL8192SE + tmp = read_nic_dword(dev, ISR+4); + write_nic_dword(dev, ISR+4, tmp); +#endif +} + +void rtl8192se_enable_rx(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + write_nic_dword(dev, RDQDA,priv->rx_ring_dma[RX_MPDU_QUEUE]); +#ifdef CONFIG_RX_CMD + write_nic_dword(dev, RCDA, priv->rx_ring_dma[RX_CMD_QUEUE]); +#endif +} + +u32 TX_DESC_BASE[] = {TBKDA, TBEDA, TVIDA, TVODA, TBDA, TCDA, TMDA, THPDA, HDA}; +void rtl8192se_enable_tx(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u32 i; + + for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) + write_nic_dword(dev, TX_DESC_BASE[i], priv->tx_ring[i].dma); +} + + +void rtl8192se_beacon_disable(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u32 reg; + +#ifdef RTL8192CE + reg = read_nic_dword(priv->rtllib->dev,REG_HIMR); + + reg &= ~(IMR_BcnInt | IMR_BcnInt | IMR_TBDOK | IMR_TBDER); + write_nic_dword(priv->rtllib->dev, REG_HIMR, reg); +#else + reg = read_nic_dword(priv->rtllib->dev,INTA_MASK); + + reg &= ~(IMR_BcnInt | IMR_BcnInt | IMR_TBDOK | IMR_TBDER); + write_nic_dword(priv->rtllib->dev, INTA_MASK, reg); +#endif +} + +void rtl8192se_interrupt_recognized(struct net_device *dev, u32 *p_inta, u32 *p_intb) +{ +#ifdef RTL8192SE + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + *p_inta = read_nic_dword(dev, ISR) & priv->irq_mask[0]; +#else + *p_inta = read_nic_dword(dev, ISR) ; +#endif + write_nic_dword(dev,ISR,*p_inta); +#ifdef RTL8192SE + *p_intb = read_nic_dword(dev, ISR+4); + write_nic_dword(dev, ISR+4, *p_intb); +#endif +} + +bool rtl8192se_HalRxCheckStuck(struct net_device *dev) +{ + + struct r8192_priv *priv = rtllib_priv(dev); + u16 RegRxCounter = (u16)(priv->InterruptLog.nIMR_ROK&0xffff); + bool bStuck = false; + u32 SlotIndex = 0, TotalRxStuckCount = 0; + u8 i; + u8 SilentResetRxSoltNum = 4; + + + SlotIndex = (priv->SilentResetRxSlotIndex++)%SilentResetRxSoltNum; + + if(priv->RxCounter==RegRxCounter) + { + priv->SilentResetRxStuckEvent[SlotIndex] = 1; + + for( i = 0; i < SilentResetRxSoltNum ; i++ ) + TotalRxStuckCount += priv->SilentResetRxStuckEvent[i]; + + if(TotalRxStuckCount == SilentResetRxSoltNum) + { + bStuck = true; + for( i = 0; i < SilentResetRxSoltNum ; i++ ) + TotalRxStuckCount += priv->SilentResetRxStuckEvent[i]; + } + + + } else { + priv->SilentResetRxStuckEvent[SlotIndex] = 0; + } + + priv->RxCounter = RegRxCounter; + + return bStuck; +} + +bool rtl8192se_HalTxCheckStuck(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool bStuck = false; +#if defined(RTL8192E) || defined(RTL8190P) + u16 RegTxCounter = read_nic_word(dev, 0x128); +#elif defined (RTL8192SE) || defined (RTL8192CE) + u16 RegTxCounter = read_nic_word(dev, 0x366); +#else + u16 RegTxCounter = priv->TxCounter + 1; + WARN_ON(1); +#endif + + RT_TRACE(COMP_RESET, "%s():RegTxCounter is %d,TxCounter is %d\n", + __FUNCTION__,RegTxCounter,priv->TxCounter); + + if(priv->TxCounter == RegTxCounter) + bStuck = true; + + priv->TxCounter = RegTxCounter; + + return bStuck; +} + +bool rtl8192se_GetNmodeSupportBySecCfg(struct net_device *dev) +{ +#ifdef RTL8192SE + return true; +#else + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + if (ieee->rtllib_ap_sec_type && + (ieee->rtllib_ap_sec_type(priv->rtllib)&(SEC_ALG_WEP|SEC_ALG_TKIP))) { + return false; + } else { + return true; + } +#endif +} + +bool rtl8192se_GetHalfNmodeSupportByAPs(struct net_device* dev) +{ +#ifdef RTL8192SE + return false; +#else + bool Reval; + struct r8192_priv* priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + + if(ieee->bHalfWirelessN24GMode == true) + Reval = true; + else + Reval = false; + + return Reval; +#endif +} + +u8 rtl8192se_QueryIsShort(u8 TxHT, u8 TxRate, cb_desc *tcb_desc) +{ + u8 tmp_Short; + + tmp_Short = (TxHT==1)?((tcb_desc->bUseShortGI)?1:0):((tcb_desc->bUseShortPreamble)?1:0); +#if defined RTL8192SE || defined RTL8192CE + if(TxHT==1 && TxRate != DESC92S_RATEMCS15) +#elif defined RTL8192E || defined RTL8190P + if(TxHT==1 && TxRate != DESC90_RATEMCS15) +#endif + tmp_Short = 0; + + return tmp_Short; +} --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_scan.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_scan.c @@ -0,0 +1,413 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#include "../rtl_core.h" + +#define IWL_SCAN_CHECK_WATCHDOG (7 * HZ) + +void rtl8192se_hw_scan_simu(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,hw_scan_simu_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + + rtllib_update_active_chan_map(priv->rtllib); + + priv->rtllib->current_network.channel = (priv->rtllib->current_network.channel + 1) % 12; + if (priv->rtllib->scan_watch_dog++ > 12) + { + goto out; /* no good chans */ + } + + if ((!test_bit(STATUS_SCANNING, &priv->rtllib->status)) || + (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status))){ + goto out; + } + + if(priv->rtllib->current_network.channel != 0){ + priv->rtllib->set_chan(dev,priv->rtllib->current_network.channel); +#ifdef _RTL8192_EXT_PATCH_ + rtllib_send_probe_requests(priv->rtllib, 1); +#else + rtllib_send_probe_requests(priv->rtllib); +#endif + } + + queue_delayed_work_rsl(priv->priv_wq, &priv->hw_scan_simu_wq, MSECS(RTLLIB_SOFTMAC_SCAN_TIME)); + + return; +out: + priv->rtllib->scan_watch_dog =0; + rtl8192se_rx_surveydone_cmd(dev); + + if(priv->rtllib->state == RTLLIB_LINKED_SCANNING){ + priv->rtllib->current_network.channel = priv->rtllib->hwscan_ch_bk; + printk("%s():back to linked chan:%d\n", __func__,priv->rtllib->current_network.channel); + priv->rtllib->set_chan(dev,priv->rtllib->current_network.channel); + } +} + +void rtl8192se_before_hw_scan(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + HT_EXTCHNL_OFFSET chan_offset=0; + HT_CHANNEL_WIDTH bandwidth=0; + struct rtllib_device *ieee = priv->rtllib; + + if(priv->rtllib->state != RTLLIB_LINKED) + return; + + +#ifdef ENABLE_LPS + if (ieee->LeisurePSLeave) { + ieee->LeisurePSLeave(ieee->dev); + } + /* notify AP to be in PS mode */ + rtllib_sta_ps_send_null_frame(ieee, 1); + rtllib_sta_ps_send_null_frame(ieee, 1); +#endif + + rtllib_stop_all_queues(ieee); + + if (ieee->data_hard_stop) + ieee->data_hard_stop(ieee->dev); + rtllib_stop_send_beacons(ieee); + ieee->state = RTLLIB_LINKED_SCANNING; + ieee->link_change(ieee->dev); + /* wait for ps packet to be kicked out successfully */ + mdelay(50); + +#if(RTL8192S_DISABLE_FW_DM == 0) + if (ieee->SetFwCmdHandler) { + ieee->SetFwCmdHandler(ieee->dev, FW_CMD_PAUSE_DM_BY_SCAN); + } +#endif + + if (ieee->pHTInfo->bCurrentHTSupport && ieee->pHTInfo->bEnableHT && ieee->pHTInfo->bCurBW40MHz) { + priv->hwscan_bw_40 = 1; + priv->rtllib->chan_offset_bk = chan_offset = ieee->pHTInfo->CurSTAExtChnlOffset; + priv->rtllib->bandwidth_bk = bandwidth = (HT_CHANNEL_WIDTH)ieee->pHTInfo->bCurBW40MHz; + printk("before scan force BW to 20M:%d, %d\n", chan_offset, bandwidth); + ieee->SetBWModeHandler(ieee->dev, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); + } +} +void rtl8192se_after_hw_scan(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + HT_EXTCHNL_OFFSET chan_offset = priv->rtllib->chan_offset_bk; + HT_CHANNEL_WIDTH bandwidth = priv->rtllib->bandwidth_bk; + struct rtllib_device *ieee = priv->rtllib; + + if(priv->rtllib->state != RTLLIB_LINKED_SCANNING){ + goto out; + } + + if (ieee->LinkDetectInfo.NumRecvBcnInPeriod == 0 || + ieee->LinkDetectInfo.NumRecvDataInPeriod == 0 ) { + ieee->LinkDetectInfo.NumRecvBcnInPeriod = 1; + ieee->LinkDetectInfo.NumRecvDataInPeriod= 1; + } + + if (priv->hwscan_bw_40) { + priv->hwscan_bw_40 = 0; + printk("after scan back BW to 40M:%d, %d\n", chan_offset, bandwidth); +#if 1 + if (chan_offset == HT_EXTCHNL_OFFSET_UPPER){ + ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk + 2); + }else if (chan_offset == HT_EXTCHNL_OFFSET_LOWER){ + ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk - 2); + }else{ + priv->rtllib->current_network.channel = priv->rtllib->hwscan_ch_bk; + ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk); + } +#endif + ieee->SetBWModeHandler(ieee->dev, bandwidth, chan_offset); + } else { + ieee->set_chan(ieee->dev, priv->rtllib->hwscan_ch_bk); + } + +#if(RTL8192S_DISABLE_FW_DM == 0) + if (ieee->SetFwCmdHandler) { + ieee->SetFwCmdHandler(ieee->dev, FW_CMD_RESUME_DM_BY_SCAN); + } +#endif + ieee->state = RTLLIB_LINKED; + ieee->link_change(ieee->dev); + +#ifdef ENABLE_LPS + /* Notify AP that I wake up again */ + rtllib_sta_ps_send_null_frame(ieee, 0); +#endif + + if (ieee->data_hard_resume) + ieee->data_hard_resume(ieee->dev); + + if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER) + rtllib_start_send_beacons(ieee); + + rtllib_wake_all_queues(ieee); + +out: + return; +} +/* Service HAL_FW_C2H_CMD_SurveyDone (0x9) */ +void rtl8192se_rx_surveydone_cmd(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + + + cancel_delayed_work(&priv->check_hw_scan_wq); + + /* If a request to abort was given, or the scan did not succeed + * then we reset the scan state machine and terminate, + * re-queuing another scan if one has been requested */ + if (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) { + RT_TRACE(COMP_ERR, "Aborted scan completed.\n"); + clear_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status); + } + + rtl8192se_after_hw_scan(dev); + +#ifdef CONFIG_FW_PARSEBEACON + if(priv->rtllib->state < RTLLIB_LINKED) + write_nic_dword(dev, RXFILTERMAP, 0x0100); +#endif + + mdelay(1); + + clear_bit(STATUS_SCANNING, &priv->rtllib->status); + + { + union iwreq_data wrqu; + memset(&wrqu, 0, sizeof(wrqu)); + wireless_send_event(priv->rtllib->dev,SIOCGIWSCAN,&wrqu,NULL); + } + + if(priv->rtllib->hwscan_sem_up == 0){ + up(&priv->wx_sem); + priv->rtllib->hwscan_sem_up = 1; + } + + + return; +} + + +void rtl8192se_check_hw_scan(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,check_hw_scan_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + unsigned long flags; + + + spin_lock_irqsave(&priv->fw_scan_lock,flags); + printk("----------->%s()\n", __func__); + + if (test_bit(STATUS_SCANNING, &priv->rtllib->status) || + test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) { + printk("FW Scan long time without stop, stop hw scan\n"); + rtl8192se_send_scan_abort(dev); + } + + + if(priv->rtllib->hwscan_sem_up == 0){ + up(&priv->wx_sem); + priv->rtllib->hwscan_sem_up = 1; + } + + printk("<-----------%s()\n", __func__); + spin_unlock_irqrestore(&priv->fw_scan_lock,flags); +} + +void rtl8192se_start_hw_scan(void *data) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + struct r8192_priv *priv = container_of_dwork_rsl(data,struct r8192_priv,start_hw_scan_wq); + struct net_device *dev = priv->rtllib->dev; +#else + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = rtllib_priv(dev); +#endif + bool start_flag =true; + unsigned long flags; + + down(&priv->wx_sem); + priv->rtllib->hwscan_sem_up = 0; + + spin_lock_irqsave(&priv->fw_scan_lock,flags); + + + cancel_delayed_work(&priv->check_hw_scan_wq); + + /* Make sure the scan wasn't canceled before this queued work + * was given the chance to run... */ + if (!test_bit(STATUS_SCANNING, &priv->rtllib->status)){ + RT_TRACE(COMP_ERR,"scan was canceled."); + goto done; + } + + if (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) { + RT_TRACE(COMP_ERR, "Scan request while abort pending. Queuing."); + goto done; + } + + +#ifdef CONFIG_FW_PARSEBEACON + if(priv->rtllib->state < RTLLIB_LINKED) + write_nic_dword(dev, RXFILTERMAP, 0x0000); +#endif + + rtl8192se_before_hw_scan(dev); + rtl8192se_send_scan_cmd(dev,start_flag); + + queue_delayed_work_rsl(priv->priv_wq,&priv->check_hw_scan_wq,MSECS(7000)); + + + spin_unlock_irqrestore(&priv->fw_scan_lock,flags); + + return; + + done: + up(&priv->wx_sem); + priv->rtllib->hwscan_sem_up = 1; + /* Cannot perform scan. Make sure we clear scanning + * bits from status so next scan request can be performed. + * If we don't clear scanning status bit here all next scan + * will fail + */ + clear_bit(STATUS_SCANNING, &priv->rtllib->status); + + /* inform mac80211 scan aborted */ + + spin_unlock_irqrestore(&priv->fw_scan_lock,flags); + + return; +} + +void rtl8192se_hw_scan_initiate(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags; + + spin_lock_irqsave(&priv->fw_scan_lock,flags); + + + if (test_bit(STATUS_SCANNING, &priv->rtllib->status)) { + printk("Scan already in progress.\n"); + goto done; + } + + if (test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) { + printk("Scan request while abort pending\n"); + goto done; + } + + + set_bit(STATUS_SCANNING, &priv->rtllib->status); + + queue_delayed_work_rsl(priv->priv_wq,&priv->start_hw_scan_wq,0); + +done: + spin_unlock_irqrestore(&priv->fw_scan_lock,flags); + + return; +} + +void rtl8192se_send_scan_abort(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret = true; + bool start_flag =false; + + + /* If there isn't a scan actively going on in the hardware + * then we are in between scan bands and not actually + * actively scanning, so don't send the abort command */ + if (!test_bit(STATUS_SCANNING, &priv->rtllib->status)) { + goto done; + } + + ret = rtl8192se_send_scan_cmd(dev, start_flag); + mdelay(1); + +#ifdef CONFIG_FW_PARSEBEACON + if(priv->rtllib->state < RTLLIB_LINKED) + write_nic_dword(dev, RXFILTERMAP, 0x0100); +#endif + + if (ret) { + goto done; + } + + +done: + clear_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status); + clear_bit(STATUS_SCANNING, &priv->rtllib->status); + + return; +} + +/** + * rtl8192se_cancel_hw_scan - Cancel any currently executing HW scan + * + * NOTE: priv->mutex is not required before calling this function + */ +void rtl8192se_cancel_hw_scan(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + unsigned long flags; + + spin_lock_irqsave(&priv->fw_scan_lock,flags); + + if (test_bit(STATUS_SCANNING, &priv->rtllib->status)) { + if (!test_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status)) { + printk("====>%s stop HW scan\n", __func__); + cancel_delayed_work(&priv->check_hw_scan_wq); + + set_bit(STATUS_SCAN_ABORTING, &priv->rtllib->status); + rtl8192se_send_scan_abort(dev); + } else { + printk("-------------->%s()Scan abort already in progress.\n", __func__); + } + } + + if(priv->rtllib->hwscan_sem_up == 0){ + up(&priv->wx_sem); + priv->rtllib->hwscan_sem_up = 1; + } + + spin_unlock_irqrestore(&priv->fw_scan_lock,flags); + return; +} + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_rtl6052.c @@ -0,0 +1,974 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifdef RTL8192SE +#include "../rtl_core.h" +#include "../rtl_dm.h" +#include "r8192S_phyreg.h" +#include "r8192S_phy.h" +#include "r8192S_rtl6052.h" + +/*---------------------------Define Local Constant---------------------------*/ +typedef struct RF_Shadow_Compare_Map { + u32 Value; + u8 Compare; + u8 ErrorOrNot; + u8 Recorver; + u8 Driver_Write; +}RF_SHADOW_T; +/*---------------------------Define Local Constant---------------------------*/ + + +/*------------------------Define global variable-----------------------------*/ +/*------------------------Define global variable-----------------------------*/ + + + + +/*---------------------Define local function prototype-----------------------*/ +void phy_RF6052_Config_HardCode(struct net_device* dev); + +bool phy_RF6052_Config_ParaFile(struct net_device* dev); +/*---------------------Define local function prototype-----------------------*/ + +/*------------------------Define function prototype--------------------------*/ +extern void RF_ChangeTxPath(struct net_device* dev, u16 DataRate); + +/*------------------------Define function prototype--------------------------*/ + +/*------------------------Define local variable------------------------------*/ +static RF_SHADOW_T RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG]; +/*------------------------Define local variable------------------------------*/ + +/*------------------------Define function prototype--------------------------*/ +extern void RF_ChangeTxPath(struct net_device* dev, u16 DataRate) +{ +#if 0 + static u1Byte RF_Path_Type = 2; + static u4Byte tx_gain_tbl1[6] + = {0x17f50, 0x11f40, 0x0cf30, 0x08720, 0x04310, 0x00100}; + static u4Byte tx_gain_tbl2[6] + = {0x15ea0, 0x10e90, 0x0c680, 0x08250, 0x04040, 0x00030}; + u1Byte i; + + if (RF_Path_Type == 2 && (DataRate&0xF) <= 0x7) + { + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TXPA_G2, bMask20Bits, 0x0f000); + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TXPA_G3, bMask20Bits, 0xeacf1); + + for (i = 0; i < 6; i++) + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TX_AGC, bMask20Bits, tx_gain_tbl1[i]); + + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TXPA_G2, bMask20Bits, 0x01e39); + } + else if (RF_Path_Type == 1 && (DataRate&0xF) >= 0x8) + { + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TXPA_G2, bMask20Bits, 0x04440); + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TXPA_G3, bMask20Bits, 0xea4f1); + + for (i = 0; i < 6; i++) + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TX_AGC, bMask20Bits, tx_gain_tbl2[i]); + + PHY_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, + RF_TXPA_G2, bMask20Bits, 0x01e19); + } +#endif + +} /* RF_ChangeTxPath */ + + +void PHY_RF6052SetBandwidth(struct net_device* dev, HT_CHANNEL_WIDTH Bandwidth) +{ + u8 eRFPath; + struct r8192_priv *priv = rtllib_priv(dev); + + + if (IS_HARDWARE_TYPE_8192SE(dev)) + { +#if (RTL92SE_FPGA_VERIFY == 0) + switch(Bandwidth) + { + case HT_CHANNEL_WIDTH_20: +#if 1 + priv->RfRegChnlVal[0] = ((priv->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400); + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, priv->RfRegChnlVal[0]); +#else + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, BIT10|BIT11, 0x01); +#endif + break; + case HT_CHANNEL_WIDTH_20_40: +#if 1 + priv->RfRegChnlVal[0] = ((priv->RfRegChnlVal[0] & 0xfffff3ff)); + rtl8192_phy_SetRFReg(dev, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, priv->RfRegChnlVal[0]); +#else + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)RF90_PATH_A, RF_CHNLBW, BIT10|BIT11, 0x00); +#endif + break; + default: + RT_TRACE(COMP_DBG, "PHY_SetRF6052Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth); + break; + } +#endif + } + else + { + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + switch(Bandwidth) + { + case HT_CHANNEL_WIDTH_20: + break; + case HT_CHANNEL_WIDTH_20_40: + break; + default: + RT_TRACE(COMP_DBG, "PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth ); + break; + + } + } + } +} + + +extern void PHY_RF6052SetCckTxPower(struct net_device* dev, u8 powerlevel) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 TxAGC=0; + bool dontIncCCKOrTurboScanOff=false; + + if (((priv->eeprom_version >= 2) && (priv->TxPwrSafetyFlag == 1)) || + ((priv->eeprom_version >= 2) && (priv->EEPROMRegulatory != 0))) { + dontIncCCKOrTurboScanOff = true; + } + + if(rtllib_act_scanning(priv->rtllib,true) == true){ + TxAGC = 0x3f; + + if(dontIncCCKOrTurboScanOff ) + TxAGC = powerlevel; + } else { + TxAGC = powerlevel; + + if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) + TxAGC = 0x10; + else if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2) + TxAGC = 0x0; + } + + if(TxAGC > RF6052_MAX_TX_PWR) + TxAGC = RF6052_MAX_TX_PWR; + + rtl8192_setBBreg(dev, rTxAGC_CCK_Mcs32, bTxAGCRateCCK, TxAGC); + +} /* PHY_RF6052SetCckTxPower */ + + +#if 0 +extern void PHY_RF6052SetOFDMTxPower(struct net_device* dev, u8 powerlevel, u8 Channel) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 writeVal, powerBase0, powerBase1; + u8 index = 0; + u16 RegOffset[6] = {0xe00, 0xe04, 0xe10, 0xe14, 0xe18, 0xe1c}; + u8 rfa_pwr[4]; + u8 rfa_lower_bound = 0, rfa_upper_bound = 0; + u8 i; + u8 rf_pwr_diff = 0, chnlGroup = 0; + u8 Legacy_pwrdiff=0, HT20_pwrdiff=0; + + if (priv->eeprom_version < 2) + powerBase0 = powerlevel + (priv->LegacyHTTxPowerDiff & 0xf); + else if (priv->eeprom_version >= 2) + { + Legacy_pwrdiff = priv->TxPwrLegacyHtDiff[RF90_PATH_A][Channel-1]; + powerBase0 = powerlevel + Legacy_pwrdiff; + RT_TRACE(COMP_POWER, " [LagacyToHT40 pwr diff = %d]\n", Legacy_pwrdiff); + RT_TRACE(COMP_POWER, " [OFDM power base index = 0x%x]\n", powerBase0); + } + powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0; + + if(priv->eeprom_version >= 2) + { + + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20) + { + HT20_pwrdiff = priv->TxPwrHt20Diff[RF90_PATH_A][Channel-1]; + + if (HT20_pwrdiff < 8) + powerlevel += HT20_pwrdiff; + else + powerlevel -= (16-HT20_pwrdiff); + + RT_TRACE(COMP_POWER, " [HT20 to HT40 pwrdiff = %d]\n", HT20_pwrdiff); + RT_TRACE(COMP_POWER, " [MCS power base index = 0x%x]\n", powerlevel); + } + } + powerBase1 = powerlevel; + powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1; + + RT_TRACE(COMP_POWER, " [Legacy/HT power index= %x/%x]\n", powerBase0, powerBase1); + + for(index=0; index<6; index++) + { + + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + writeVal = ((index<2)?powerBase0:powerBase1); + } + else + { + if(priv->pwrGroupCnt == 0) + chnlGroup = 0; + if(priv->pwrGroupCnt >= 3) + { + if(Channel <= 3) + chnlGroup = 0; + else if(Channel >= 4 && Channel <= 9) + chnlGroup = 1; + else if(Channel >= 10) + chnlGroup = 2; + if(priv->pwrGroupCnt == 4) + chnlGroup ++; + } + else + chnlGroup = 0; + writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + + ((index<2)?powerBase0:powerBase1); + } + RT_TRACE(COMP_POWER, "Reg 0x%x, chnlGroup = %d, Original=%x writeVal=%x\n", + RegOffset[index], chnlGroup, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index], + writeVal); + + if (priv->rf_type == RF_2T2R) + { + rf_pwr_diff = priv->AntennaTxPwDiff[0]; + RT_TRACE(COMP_POWER, "2T2R RF-B to RF-A PWR DIFF=%d\n", rf_pwr_diff); + + if (rf_pwr_diff >= 8) + { + rfa_lower_bound = 0x10-rf_pwr_diff; + RT_TRACE(COMP_POWER, "rfa_lower_bound= %d\n", rfa_lower_bound); + } + else if (rf_pwr_diff >= 0) + { + rfa_upper_bound = RF6052_MAX_TX_PWR-rf_pwr_diff; + RT_TRACE(COMP_POWER, "rfa_upper_bound= %d\n", rfa_upper_bound); + } + } + + for (i= 0; i <4; i++) + { + rfa_pwr[i] = (u8)((writeVal & (0x7f<<(i*8)))>>(i*8)); + if (rfa_pwr[i] > RF6052_MAX_TX_PWR) + rfa_pwr[i] = RF6052_MAX_TX_PWR; + + if (priv->rf_type == RF_2T2R) + { + if (rf_pwr_diff >= 8) + { + if (rfa_pwr[i] = 1) + { + if (rfa_pwr[i] > rfa_upper_bound) + { + RT_TRACE(COMP_POWER, "Overflow"); + rfa_pwr[i] = rfa_upper_bound; + } + } + RT_TRACE(COMP_POWER, "rfa_pwr[%d]=%x\n", i, rfa_pwr[i]); + } + + } + +#if 1 + writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0]; + RT_TRACE(COMP_POWER, "WritePower=%08x\n", writeVal); +#else + if(priv->bDynamicTxHighPower == true) + { + if(index > 1) + { + writeVal = 0x03030303; + } + else + { + writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0]; + } + RT_TRACE(COMP_POWER, "HighPower=%08x\n", writeVal); + } + else + { + writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0]; + RT_TRACE(COMP_POWER, "NormalPower=%08x\n", writeVal); + } +#endif + rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal); + } + +} /* PHY_RF6052SetOFDMTxPower */ +#endif + +void getPowerBase( + struct net_device* dev, + u8* pPowerLevel, + u8 Channel, + u32* OfdmBase, + u32* MCSBase, + u8* pFinalPowerIndex + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 powerBase0, powerBase1; + u8 Legacy_pwrdiff=0, HT20_pwrdiff=0; + u8 i, powerlevel[4]; + + for(i=0; i<2; i++) + powerlevel[i] = pPowerLevel[i]; + if (priv->eeprom_version < 2) + powerBase0 = powerlevel[0] + (priv->LegacyHTTxPowerDiff & 0xf); + else if (priv->eeprom_version >= 2) + { + Legacy_pwrdiff = priv->TxPwrLegacyHtDiff[RF90_PATH_A][Channel-1]; + powerBase0 = powerlevel[0] + Legacy_pwrdiff; + } + powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0; + *OfdmBase = powerBase0; + RT_TRACE(COMP_POWER, " [OFDM power base index = 0x%x]\n", powerBase0); + + if(priv->eeprom_version >= 2) + { + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20) + { + for(i=0; i<2; i++) + { + HT20_pwrdiff = priv->TxPwrHt20Diff[i][Channel-1]; + if (HT20_pwrdiff < 8) + powerlevel[i] += HT20_pwrdiff; + else + powerlevel[i] -= (16-HT20_pwrdiff); + } + } + } + powerBase1 = powerlevel[0]; + powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1; + *MCSBase = powerBase1; + + RT_TRACE(COMP_POWER, " [MCS power base index = 0x%x]\n", powerBase1); + + pFinalPowerIndex[0] = powerlevel[0]; + pFinalPowerIndex[1] = powerlevel[1]; + switch(priv->EEPROMRegulatory) + { + case 3: + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + pFinalPowerIndex[0] += priv->PwrGroupHT40[RF90_PATH_A][Channel-1]; + pFinalPowerIndex[1] += priv->PwrGroupHT40[RF90_PATH_B][Channel-1]; + } + else + { + pFinalPowerIndex[0] += priv->PwrGroupHT20[RF90_PATH_A][Channel-1]; + pFinalPowerIndex[1] += priv->PwrGroupHT20[RF90_PATH_B][Channel-1]; + } + break; + default: + break; + } + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + RT_TRACE(COMP_POWER, "40MHz finalPowerIndex (A / B) = 0x%x / 0x%x\n", + pFinalPowerIndex[0], pFinalPowerIndex[1]); + } + else + { + RT_TRACE(COMP_POWER, "20MHz finalPowerIndex (A / B) = 0x%x / 0x%x\n", + pFinalPowerIndex[0], pFinalPowerIndex[1]); + } +} + +void getTxPowerWriteValByRegulatory( + struct net_device* dev, + u8 Channel, + u8 index, + u32 powerBase0, + u32 powerBase1, + u32* pOutWriteVal + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u8 i, chnlGroup, pwr_diff_limit[4]; + u32 writeVal, customer_limit; + + switch(priv->EEPROMRegulatory) + { + case 0: + chnlGroup = 0; + RT_TRACE(COMP_POWER,"MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n", + chnlGroup, index, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]); + writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + + ((index<2)?powerBase0:powerBase1); + RT_TRACE(COMP_POWER,"RTK better performance, writeVal = 0x%x\n", writeVal); + break; + case 1: + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + writeVal = ((index<2)?powerBase0:powerBase1); + RT_TRACE(COMP_POWER,"Realtek regulatory, 40MHz, writeVal = 0x%x\n", writeVal); + } + else + { + if(priv->pwrGroupCnt == 1) + chnlGroup = 0; + if(priv->pwrGroupCnt >= 3) + { + if(Channel <= 3) + chnlGroup = 0; + else if(Channel >= 4 && Channel <= 8) + chnlGroup = 1; + else if(Channel > 8) + chnlGroup = 2; + if(priv->pwrGroupCnt == 4) + chnlGroup++; + } + RT_TRACE(COMP_POWER,"MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n", + chnlGroup, index, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]); + writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + + ((index<2)?powerBase0:powerBase1); + RT_TRACE(COMP_POWER,"Realtek regulatory, 20MHz, writeVal = 0x%x\n", writeVal); + } + break; + case 2: + writeVal = ((index<2)?powerBase0:powerBase1); + RT_TRACE(COMP_POWER,"Better regulatory, writeVal = 0x%x\n", writeVal); + break; + case 3: + chnlGroup = 0; + RT_TRACE(COMP_POWER,"MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n", + chnlGroup, index, priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]); + + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + RT_TRACE(COMP_POWER,"customer's limit, 40MHz = 0x%x\n", + priv->PwrGroupHT40[RF90_PATH_A][Channel-1]); + } + else + { + RT_TRACE(COMP_POWER,"customer's limit, 20MHz = 0x%x\n", + priv->PwrGroupHT20[RF90_PATH_A][Channel-1]); + } + for (i=0; i<4; i++) + { + pwr_diff_limit[i] = (u8)((priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index]&(0x7f<<(i*8)))>>(i*8)); + if (priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40) + { + if(pwr_diff_limit[i] > priv->PwrGroupHT40[RF90_PATH_A][Channel-1]) + { + pwr_diff_limit[i] = priv->PwrGroupHT40[RF90_PATH_A][Channel-1]; + } + } + else + { + if(pwr_diff_limit[i] > priv->PwrGroupHT20[RF90_PATH_A][Channel-1]) + { + pwr_diff_limit[i] = priv->PwrGroupHT20[RF90_PATH_A][Channel-1]; + } + } + } + customer_limit = (pwr_diff_limit[3]<<24) | (pwr_diff_limit[2]<<16) | + (pwr_diff_limit[1]<<8) | (pwr_diff_limit[0]); + RT_TRACE(COMP_POWER,"Customer's limit = 0x%x\n", customer_limit); + + writeVal = customer_limit + ((index<2)?powerBase0:powerBase1); + RT_TRACE(COMP_POWER,"Customer, writeVal = 0x%x\n", writeVal); + break; + default: + chnlGroup = 0; + writeVal = priv->MCSTxPowerLevelOriginalOffset[chnlGroup][index] + + ((index<2)?powerBase0:powerBase1); + RT_TRACE(COMP_POWER,"RTK better performance, writeVal = 0x%x\n", writeVal); + break; + } + + if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) + writeVal = 0x10101010; + else if(priv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2) + writeVal = 0x0; + + *pOutWriteVal = writeVal; + +} + +void setAntennaDiff( + struct net_device* dev, + u8* pFinalPowerIndex + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + char ant_pwr_diff=0; + u32 u4RegValue=0; + + if (priv->rf_type == RF_2T2R) + { + ant_pwr_diff = pFinalPowerIndex[1] - pFinalPowerIndex[0]; + + if(ant_pwr_diff > 7) + ant_pwr_diff = 7; + if(ant_pwr_diff < -8) + ant_pwr_diff = -8; + RT_TRACE(COMP_POWER,"Antenna Diff from RF-B to RF-A = %d (0x%x)\n", + ant_pwr_diff, ant_pwr_diff&0xf); + ant_pwr_diff &= 0xf; + } + priv->AntennaTxPwDiff[2] = 0; + priv->AntennaTxPwDiff[1] = 0; + priv->AntennaTxPwDiff[0] = (u8)(ant_pwr_diff); + + u4RegValue = (priv->AntennaTxPwDiff[2]<<8 | + priv->AntennaTxPwDiff[1]<<4 | + priv->AntennaTxPwDiff[0] ); + + rtl8192_setBBreg(dev, rFPGA0_TxGainStage, + (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue); + + RT_TRACE(COMP_POWER,"Write BCD-Diff(0x%x) = 0x%x\n", + rFPGA0_TxGainStage, u4RegValue); +} + +void writeOFDMPowerReg( + struct net_device* dev, + u8 index, + u32 Value + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u16 RegOffset[6] = {0xe00, 0xe04, 0xe10, 0xe14, 0xe18, 0xe1c}; + u8 i, rfa_pwr[4]; + u8 rfa_lower_bound = 0, rfa_upper_bound = 0, rf_pwr_diff = 0; + u32 writeVal=Value; + if (priv->rf_type == RF_2T2R) + { + rf_pwr_diff = priv->AntennaTxPwDiff[0]; + + if (rf_pwr_diff >= 8) + { + rfa_lower_bound = 0x10-rf_pwr_diff; + RT_TRACE(COMP_POWER,"rfa_lower_bound= %d\n", rfa_lower_bound); + } + else + { + rfa_upper_bound = RF6052_MAX_TX_PWR-rf_pwr_diff; + RT_TRACE(COMP_POWER,"rfa_upper_bound= %d\n", rfa_upper_bound); + } + } + + for (i=0; i<4; i++) + { + rfa_pwr[i] = (u8)((writeVal & (0x7f<<(i*8)))>>(i*8)); + if (rfa_pwr[i] > RF6052_MAX_TX_PWR) + rfa_pwr[i] = RF6052_MAX_TX_PWR; + + if (priv->rf_type == RF_2T2R) + { + if (rf_pwr_diff >= 8) + { + if (rfa_pwr[i] = 1) + { + if (rfa_pwr[i] > rfa_upper_bound) + { + RT_TRACE(COMP_POWER,"Overflow"); + rfa_pwr[i] = rfa_upper_bound; + } + } + RT_TRACE(COMP_POWER,"rfa_pwr[%d]=%x\n", i, rfa_pwr[i]); + } + + } + + writeVal = (rfa_pwr[3]<<24) | (rfa_pwr[2]<<16) |(rfa_pwr[1]<<8) |rfa_pwr[0]; + + rtl8192_setBBreg(dev, RegOffset[index], 0x7f7f7f7f, writeVal); + RT_TRACE(COMP_POWER,"Set 0x%x = %08x\n",RegOffset[index], writeVal); +} + +/*----------------------------------------------------------------------------- + * Function: PHY_RF6052SetOFDMTxPower + * + * Overview: For legacy and HY OFDM, we must read EEPROM TX power index for + * different channel and read original value in TX power register area from + * 0xe00. We increase offset and original value to be correct tx pwr. + * + * Input: NONE + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 11/05/2008 MHC Simulate 8192 series method. + * 01/06/2009 MHC 1. Prevent Path B tx power overflow or underflow dure to + * A/B pwr difference or legacy/HT pwr diff. + * 2. We concern with path B legacy/HT OFDM difference. + * 01/22/2009 MHC Support new EPRO format from SD3. + * + *---------------------------------------------------------------------------*/ +extern void +PHY_RF6052SetOFDMTxPower(struct net_device* dev, u8* pPowerLevel, u8 Channel) +{ + u32 writeVal, powerBase0, powerBase1; + u8 index = 0; + u8 finalPowerIndex[4]; + + getPowerBase(dev, pPowerLevel, Channel, &powerBase0, &powerBase1, &finalPowerIndex[0]); + setAntennaDiff(dev, &finalPowerIndex[0] ); + + for(index=0; index<6; index++) + { + getTxPowerWriteValByRegulatory(dev, Channel, index, + powerBase0, powerBase1, &writeVal); + + writeOFDMPowerReg(dev, index, writeVal); + } +} + +bool PHY_RF6052_Config(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool rtStatus = true; + u8 bRegHwParaFile = 1; + + if(priv->rf_type == RF_1T1R) + priv->NumTotalRFPath = 1; + else + priv->NumTotalRFPath = 2; + + switch(bRegHwParaFile) + { + case 0: + phy_RF6052_Config_HardCode(dev); + break; + + case 1: + rtStatus = phy_RF6052_Config_ParaFile(dev); + break; + + case 2: + phy_RF6052_Config_HardCode(dev); + phy_RF6052_Config_ParaFile(dev); + break; + + default: + phy_RF6052_Config_HardCode(dev); + break; + } + return rtStatus; + +} + +void phy_RF6052_Config_HardCode(struct net_device* dev) +{ + + + +} + +bool phy_RF6052_Config_ParaFile(struct net_device* dev) +{ + u32 u4RegValue = 0; + u8 eRFPath; + bool rtStatus = true; + struct r8192_priv *priv = rtllib_priv(dev); + BB_REGISTER_DEFINITION_T *pPhyReg; + + + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + + pPhyReg = &priv->PHYRegDef[eRFPath]; + + switch(eRFPath) + { + case RF90_PATH_A: + case RF90_PATH_C: + u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV); + break; + case RF90_PATH_B : + case RF90_PATH_D: + u4RegValue = rtl8192_QueryBBReg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16); + break; + } + + rtl8192_setBBreg(dev, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1); + + rtl8192_setBBreg(dev, pPhyReg->rfintfo, bRFSI_RFENV, 0x1); + + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); + rtl8192_setBBreg(dev, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); + + + switch(eRFPath) + { + case RF90_PATH_A: +#if RTL8190_Download_Firmware_From_Header + rtStatus= rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath); +#else + rtStatus = PHY_ConfigRFWithParaFile(dev, (char* )&szRadioAFile, (RF90_RADIO_PATH_E)eRFPath); +#endif + break; + case RF90_PATH_B: +#if RTL8190_Download_Firmware_From_Header + rtStatus= rtl8192_phy_ConfigRFWithHeaderFile(dev,(RF90_RADIO_PATH_E)eRFPath); +#else + if(priv->rf_type == RF_2T2R_GREEN) + rtStatus = PHY_ConfigRFWithParaFile(dev, (char *)&szRadioBGMFile, (RF90_RADIO_PATH_E)eRFPath); + else + rtStatus = PHY_ConfigRFWithParaFile(dev, (char* )&szRadioBFile, (RF90_RADIO_PATH_E)eRFPath); +#endif + break; + case RF90_PATH_C: + break; + case RF90_PATH_D: + break; + } + + switch(eRFPath) + { + case RF90_PATH_A: + case RF90_PATH_C: + rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue); + break; + case RF90_PATH_B : + case RF90_PATH_D: + rtl8192_setBBreg(dev, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue); + break; + } + + if(rtStatus != true){ + printk("phy_RF6052_Config_ParaFile():Radio[%d] Fail!!", eRFPath); + goto phy_RF6052_Config_ParaFile_Fail; + } + + } + + RT_TRACE(COMP_INIT, "<---phy_RF6052_Config_ParaFile()\n"); + return rtStatus; + +phy_RF6052_Config_ParaFile_Fail: + return rtStatus; +} + + +extern u32 PHY_RFShadowRead( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset) +{ + return RF_Shadow[eRFPath][Offset].Value; + +} /* PHY_RFShadowRead */ + + +extern void PHY_RFShadowWrite( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u32 Data) +{ + RF_Shadow[eRFPath][Offset].Value = (Data & bMask20Bits); + RF_Shadow[eRFPath][Offset].Driver_Write = true; + +} /* PHY_RFShadowWrite */ + + +extern bool PHY_RFShadowCompare( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset) +{ + u32 reg; + + if (RF_Shadow[eRFPath][Offset].Compare == true) + { + reg = rtl8192_phy_QueryRFReg(dev, eRFPath, Offset, bMask20Bits); + if (RF_Shadow[eRFPath][Offset].Value != reg) + { + RF_Shadow[eRFPath][Offset].ErrorOrNot = true; + RT_TRACE(COMP_INIT, "PHY_RFShadowCompare RF-%d Addr%02xErr = %05x", eRFPath, Offset, reg); + } + else + { + RT_TRACE(COMP_INIT, "PHY_RFShadowCompare RF-%d Addr%02x Err = %05x return false\n", eRFPath, Offset, reg); + RF_Shadow[eRFPath][Offset].ErrorOrNot = false; + } + return RF_Shadow[eRFPath][Offset].ErrorOrNot; + } + return false; +} /* PHY_RFShadowCompare */ + +extern void PHY_RFShadowRecorver( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset) +{ + if (RF_Shadow[eRFPath][Offset].ErrorOrNot == true) + { + if (RF_Shadow[eRFPath][Offset].Recorver == true) + { + rtl8192_phy_SetRFReg(dev, eRFPath, Offset, bMask20Bits, RF_Shadow[eRFPath][Offset].Value); + RT_TRACE(COMP_INIT, "PHY_RFShadowRecorver RF-%d Addr%02x=%05x", + eRFPath, Offset, RF_Shadow[eRFPath][Offset].Value); + } + } + +} /* PHY_RFShadowRecorver */ + + +extern void PHY_RFShadowCompareAll(struct net_device * dev) +{ + u32 eRFPath; + u32 Offset; + + for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++) + { + for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++) + { + PHY_RFShadowCompare(dev, (RF90_RADIO_PATH_E)eRFPath, Offset); + } + } + +} /* PHY_RFShadowCompareAll */ + + +extern void PHY_RFShadowRecorverAll(struct net_device * dev) +{ + u32 eRFPath; + u32 Offset; + + for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++) + { + for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++) + { + PHY_RFShadowRecorver(dev, (RF90_RADIO_PATH_E)eRFPath, Offset); + } + } + +} /* PHY_RFShadowRecorverAll */ + + +extern void PHY_RFShadowCompareFlagSet( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u8 Type) +{ + RF_Shadow[eRFPath][Offset].Compare = Type; + +} /* PHY_RFShadowCompareFlagSet */ + + +extern void PHY_RFShadowRecorverFlagSet( + struct net_device * dev, + RF90_RADIO_PATH_E eRFPath, + u32 Offset, + u8 Type) +{ + RF_Shadow[eRFPath][Offset].Recorver= Type; + +} /* PHY_RFShadowRecorverFlagSet */ + + +extern void PHY_RFShadowCompareFlagSetAll(struct net_device * dev) +{ + u32 eRFPath; + u32 Offset; + + for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++) + { + for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++) + { + if (Offset != 0x26 && Offset != 0x27) + PHY_RFShadowCompareFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, false); + else + PHY_RFShadowCompareFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, true); + } + } + +} /* PHY_RFShadowCompareFlagSetAll */ + + +extern void PHY_RFShadowRecorverFlagSetAll(struct net_device * dev) +{ + u32 eRFPath; + u32 Offset; + + for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++) + { + for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++) + { + if (Offset != 0x26 && Offset != 0x27) + PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, false); + else + PHY_RFShadowRecorverFlagSet(dev, (RF90_RADIO_PATH_E)eRFPath, Offset, true); + } + } + +} /* PHY_RFShadowCompareFlagSetAll */ + + + +extern void PHY_RFShadowRefresh(struct net_device * dev) +{ + u32 eRFPath; + u32 Offset; + + for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++) + { + for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++) + { + RF_Shadow[eRFPath][Offset].Value = 0; + RF_Shadow[eRFPath][Offset].Compare = false; + RF_Shadow[eRFPath][Offset].Recorver = false; + RF_Shadow[eRFPath][Offset].ErrorOrNot = false; + RF_Shadow[eRFPath][Offset].Driver_Write = false; + } + } + +} /* PHY_RFShadowRead */ + +/* End of HalRf6052.c */ + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.h @@ -0,0 +1,419 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_FIRMWARE_H +#define __INC_FIRMWARE_H + +#include "r8192S_def.h" + +#define RTL8190_MAX_FIRMWARE_CODE_SIZE 64000 +#define RTL8190_CPU_START_OFFSET 0x80 +#define MAX_FIRMWARE_CODE_SIZE 0xFF00 + +#define H2C_TX_CMD_HDR_LEN 8 + +#define RTL8192S_FW_PKT_FRAG_SIZE 0x4000 + +#ifdef RTL8192SE +#define GET_COMMAND_PACKET_FRAG_THRESHOLD(v) 4*(v/4) - 8 +#else +#define GET_COMMAND_PACKET_FRAG_THRESHOLD(v) (4*(v/4) - 8 - USB_HWDESC_HEADER_LEN) +#endif + +typedef enum _DESC_PACKET_TYPE{ + DESC_PACKET_TYPE_INIT = 0, + DESC_PACKET_TYPE_NORMAL = 1, +}DESC_PACKET_TYPE; + + +#ifdef RTL8192S +typedef enum _firmware_init_step{ + FW_INIT_STEP0_IMEM = 0, + FW_INIT_STEP1_MAIN = 1, + FW_INIT_STEP2_DATA = 2, +}firmware_init_step_e; +#else +typedef enum _firmware_init_step{ + FW_INIT_STEP0_BOOT = 0, + FW_INIT_STEP1_MAIN = 1, + FW_INIT_STEP2_DATA = 2, +}firmware_init_step_e; +#endif + +typedef enum _firmware_source{ + FW_SOURCE_IMG_FILE = 0, + FW_SOURCE_HEADER_FILE = 1, +}firmware_source_e, *pfirmware_source_e; + +typedef enum _opt_rst_type{ + OPT_SYSTEM_RESET = 0, + OPT_FIRMWARE_RESET = 1, +}opt_rst_type_e; + +typedef enum _FIRMWARE_STATUS{ + FW_STATUS_0_INIT = 0, + FW_STATUS_1_MOVE_BOOT_CODE = 1, + FW_STATUS_2_MOVE_MAIN_CODE = 2, + FW_STATUS_3_TURNON_CPU = 3, + FW_STATUS_4_MOVE_DATA_CODE = 4, + FW_STATUS_5_READY = 5, +}FIRMWARE_STATUS; + +typedef enum _H2C_CMD{ + FW_H2C_SETPWRMODE = 0, + FW_H2C_JOINBSSRPT = 1, + FW_H2C_WoWLAN_UPDATE_GTK = 2, + FW_H2C_WoWLAN_UPDATE_IV = 3, + FW_H2C_WoWLAN_OFFLOAD = 4, + FW_H2C_SITESURVEY=5, +}H2C_CMD; + + typedef struct _H2C_SETPWRMODE_PARM { + u8 mode; + u8 flag_low_traffic_en; + u8 flag_lpnav_en; + u8 flag_rf_low_snr_en; + u8 flag_dps_en; + u8 bcn_rx_en; + u8 bcn_pass_cnt; + u8 bcn_to; // beacon TO (ms). ¡§=0¡¨ no limit. + u16 bcn_itv; + u8 app_itv; + u8 awake_bcn_itvl; + u8 smart_ps; + u8 bcn_pass_period; + }H2C_SETPWRMODE_PARM, *PH2C_SETPWRMODE_PARM; + +typedef struct _H2C_JOINBSSRPT_PARM { + u8 OpMode; + u8 Ps_Qos_Info; + u8 Bssid[6]; + u16 BcnItv; + u16 Aid; +}H2C_JOINBSSRPT_PARM, *PH2C_JOINBSSRPT_PARM; + +typedef struct _H2C_WPA_PTK { + u8 kck[16]; /* EAPOL-Key Key Confirmation Key (KCK) */ + u8 kek[16]; /* EAPOL-Key Key Encryption Key (KEK) */ + u8 tk1[16]; /* Temporal Key 1 (TK1) */ + union { + u8 tk2[16]; + struct { + u8 tx_mic_key[8]; + u8 rx_mic_key[8]; + }Athu; + }U; +}H2C_WPA_PTK; + +typedef struct _H2C_WPA_TWO_WAY_PARA{ + u8 pairwise_en_alg; + u8 group_en_alg; + H2C_WPA_PTK wpa_ptk_value; +}H2C_WPA_TWO_WAY_PARA, *PH2C_WPA_TWO_WAY_PARA; + +typedef struct _tx_desc_8192se_fw{ + + u32 PktSize:16; + u32 Offset:8; + u32 Type:2; + u32 LastSeg:1; + u32 FirstSeg:1; + u32 LINIP:1; + u32 AMSDU:1; + u32 GF:1; + u32 OWN:1; + + u32 MacID:5; + u32 MoreData:1; + u32 MoreFrag:1; + u32 PIFS:1; + u32 QueueSel:5; + u32 AckPolicy:2; + u32 NoACM:1; + u32 NonQos:1; + u32 KeyID:2; + u32 OUI:1; + u32 PktType:1; + u32 EnDescID:1; + u32 SecType:2; + u32 HTC:1; + u32 WDS:1; + u32 PktOffset:5; + u32 HWPC:1; + + u32 DataRetryLmt:6; + u32 RetryLmtEn:1; + u32 TSFL:5; + u32 RTSRC:6; + u32 DATARC:6; + + u32 Rsvd1:5; + u32 AggEn:1; + u32 BK:1; + u32 OwnMAC:1; + + u32 NextHeadPage:8; + u32 TailPage:8; + u32 Seq:12; + u32 Frag:4; + + u32 RTSRate:6; + u32 DisRTSFB:1; + u32 RTSRateFBLmt:4; + u32 CTS2Self:1; + u32 RTSEn:1; + u32 RaBRSRID:3; + u32 TXHT:1; + u32 TxShort:1; + u32 TxBw:1; + u32 TXSC:2; + u32 STBC:2; + u32 RD:1; + u32 RTSHT:1; + u32 RTSShort:1; + u32 RTSBW:1; + u32 RTSSC:2; + u32 RTSSTBC:2; + u32 UserRate:1; + + u32 PktID:9; + u32 TxRate:6; + u32 DISFB:1; + u32 DataRateFBLmt:5; + u32 TxAGC:11; + + u32 IPChkSum:16; + u32 TCPChkSum:16; + + u32 TxBufferSize:16; + u32 IPHdrOffset:8; + u32 Rsvd3:7; + u32 TCPEn:1; +} tx_desc_fw, *ptx_desc_fw; + +typedef struct _H2C_SITESURVEY_PARA { + u32 start_flag; + u32 probe_req_len; + tx_desc_fw desc; + u8 probe_req[0]; +}H2C_SITESURVEY_PARA, *PH2C_SITESURVEY_PARA; + + typedef enum _FIRMWARE_H2C_CMD{ + H2C_Read_MACREG_CMD , /*0*/ + H2C_Write_MACREG_CMD , + H2C_ReadBB_CMD , + H2C_WriteBB_CMD , + H2C_ReadRF_CMD , + H2C_WriteRF_CMD , /*5*/ + H2C_Read_EEPROM_CMD , + H2C_Write_EEPROM_CMD , + H2C_Read_EFUSE_CMD , + H2C_Write_EFUSE_CMD , + H2C_Read_CAM_CMD , /*10*/ + H2C_Write_CAM_CMD , + H2C_setBCNITV_CMD, + H2C_setMBIDCFG_CMD, + H2C_JoinBss_CMD , + H2C_DisConnect_CMD, /*15*/ + H2C_CreateBss_CMD , + H2C_SetOpMode_CMD, + H2C_SiteSurvey_CMD, + H2C_SetAuth_CMD, + H2C_SetKey_CMD , /*20*/ + H2C_SetStaKey_CMD , + H2C_SetAssocSta_CMD, + H2C_DelAssocSta_CMD , + H2C_SetStaPwrState_CMD , + H2C_SetBasicRate_CMD , /*25*/ + H2C_GetBasicRate_CMD , + H2C_SetDataRate_CMD , + H2C_GetDataRate_CMD , + H2C_SetPhyInfo_CMD , + H2C_GetPhyInfo_CMD , /*30*/ + H2C_SetPhy_CMD , + H2C_GetPhy_CMD , + H2C_readRssi_CMD , + H2C_readGain_CMD , + H2C_SetAtim_CMD , /*35*/ + H2C_SetPwrMode_CMD , + H2C_JoinbssRpt_CMD, + H2C_SetRaTable_CMD , + H2C_GetRaTable_CMD , + H2C_GetCCXReport_CMD, /*40*/ + H2C_GetDTMReport_CMD, + H2C_GetTXRateStatistics_CMD, + H2C_SetUsbSuspend_CMD, + H2C_SetH2cLbk_CMD , + H2C_tmp1 , /*45*/ + H2C_WoWLAN_UPDATE_GTK_CMD , + H2C_WoWLAN_FW_OFFLOAD , + H2C_tmp2 , + H2C_tmp3 , + H2C_WoWLAN_UPDATE_IV_CMD , /*50*/ + H2C_tmp4, + MAX_H2CCMD /*52*/ +}FIRMWARE_H2C_CMD; + + +typedef struct _RT_8192S_FIRMWARE_PRIV { + + u8 signature_0; + u8 signature_1; + u8 hci_sel; + u8 chip_version; + u8 customer_ID_0; + u8 customer_ID_1; + u8 rf_config; + u8 usb_ep_num; + + u8 regulatory_class_0; + u8 regulatory_class_1; + u8 regulatory_class_2; + u8 regulatory_class_3; + u8 rfintfs; + u8 def_nettype; + u8 rsvd010; + u8 rsvd011; + + + u8 lbk_mode; + u8 mp_mode; + u8 rsvd020; + u8 rsvd021; + u8 rsvd022; + u8 rsvd023; + u8 rsvd024; + u8 rsvd025; + + u8 qos_en; + u8 bw_40MHz_en; + u8 AMSDU2AMPDU_en; + u8 AMPDU_en; + u8 rate_control_offload; + u8 aggregation_offload; + u8 rsvd030; + u8 rsvd031; + + + unsigned char beacon_offload; + unsigned char MLME_offload; + unsigned char hwpc_offload; + unsigned char tcp_checksum_offload; + unsigned char tcp_offload; + unsigned char ps_control_offload; + unsigned char WWLAN_offload; + unsigned char rsvd040; + + u8 tcp_tx_frame_len_L; + u8 tcp_tx_frame_len_H; + u8 tcp_rx_frame_len_L; + u8 tcp_rx_frame_len_H; + u8 rsvd050; + u8 rsvd051; + u8 rsvd052; + u8 rsvd053; +}RT_8192S_FIRMWARE_PRIV, *PRT_8192S_FIRMWARE_PRIV; + +typedef struct _RT_8192S_FIRMWARE_HDR { + + u16 Signature; + u16 Version; + u32 DMEMSize; + + + u32 IMG_IMEM_SIZE; + u32 IMG_SRAM_SIZE; + + u32 FW_PRIV_SIZE; + u32 Rsvd0; + + u32 Rsvd1; + u32 Rsvd2; + + RT_8192S_FIRMWARE_PRIV FWPriv; + +}RT_8192S_FIRMWARE_HDR, *PRT_8192S_FIRMWARE_HDR; + +#define RT_8192S_FIRMWARE_HDR_SIZE 80 +#define RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE 32 + +typedef enum _FIRMWARE_8192S_STATUS{ + FW_STATUS_INIT = 0, + FW_STATUS_LOAD_IMEM = 1, + FW_STATUS_LOAD_EMEM = 2, + FW_STATUS_LOAD_DMEM = 3, + FW_STATUS_READY = 4, +}FIRMWARE_8192S_STATUS; + +typedef struct _rt_firmware{ + firmware_source_e eFWSource; + PRT_8192S_FIRMWARE_HDR pFwHeader; + FIRMWARE_8192S_STATUS FWStatus; + u16 FirmwareVersion; + u8 FwIMEM[RTL8190_MAX_FIRMWARE_CODE_SIZE]; + u8 FwEMEM[RTL8190_MAX_FIRMWARE_CODE_SIZE]; + u32 FwIMEMLen; + u32 FwEMEMLen; + u8 szFwTmpBuffer[164000]; + u32 szFwTmpBufferLen; + u16 CmdPacketFragThresold; +}rt_firmware, *prt_firmware; + +#define FW_DIG_ENABLE_CTL BIT0 +#define FW_HIGH_PWR_ENABLE_CTL BIT1 +#define FW_SS_CTL BIT2 +#define FW_RA_INIT_CTL BIT3 +#define FW_RA_BG_CTL BIT4 +#define FW_RA_N_CTL BIT5 +#define FW_PWR_TRK_CTL BIT6 +#define FW_IQK_CTL BIT7 +#define FW_FA_CTL BIT8 +#define FW_DRIVER_CTRL_DM_CTL BIT9 +#define FW_PAPE_CTL_BY_SW_HW BIT10 +#define FW_DISABLE_ALL_DM 0 + +#define FW_PWR_TRK_PARAM_CLR 0x0000ffff +#define FW_RA_PARAM_CLR 0xffff0000 + +#define FW_CMD_IO_CLR(priv, _Bit) \ + udelay(1000); \ + priv->FwCmdIOMap &= (~_Bit); + +#define FW_CMD_IO_UPDATE(priv, _val) \ + priv->FwCmdIOMap = _val; + +#define FW_CMD_IO_SET(priv, _val) \ + write_nic_word(priv->rtllib->dev, LBUS_MON_ADDR, (u16)_val); \ + FW_CMD_IO_UPDATE(priv, _val);\ + +#define FW_CMD_PARA_SET(priv, _val) \ + write_nic_dword(priv->rtllib->dev, LBUS_ADDR_MASK, _val); \ + priv->FwCmdIOParam = _val; + +#define FW_CMD_IO_QUERY(priv) (u16)(priv->FwCmdIOMap) +#define FW_CMD_IO_PARA_QUERY(priv) ((u32)(priv->FwCmdIOParam)) + +bool FirmwareEnableCPU(struct net_device *dev); +bool FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus); + +bool FirmwareDownload92S(struct net_device *dev); +int rtl8192se_send_scan_cmd(struct net_device *dev, bool start); + +void rtl8192se_dump_skb_data(struct sk_buff *skb); +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_dev.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_dev.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _RTL8192SE_H +#define _RTL8192SE_H + +#include "r8192S_def.h" + +u8 rtl8192se_QueryIsShort(u8 TxHT, u8 TxRate, cb_desc *tcb_desc); +bool rtl8192se_GetHalfNmodeSupportByAPs(struct net_device* dev); +bool rtl8192se_GetNmodeSupportBySecCfg(struct net_device *dev); +bool rtl8192se_HalTxCheckStuck(struct net_device *dev); +bool rtl8192se_HalRxCheckStuck(struct net_device *dev); +void rtl8192se_interrupt_recognized(struct net_device *dev, u32 *p_inta, u32 *p_intb); +void rtl8192se_enable_rx(struct net_device *dev); +void rtl8192se_enable_tx(struct net_device *dev); +void rtl8192se_EnableInterrupt(struct net_device *dev); +void rtl8192se_DisableInterrupt(struct net_device *dev); +void rtl8192se_ClearInterrupt(struct net_device *dev); +void rtl8192se_InitializeVariables(struct net_device *dev); +void rtl8192se_start_beacon(struct net_device *dev); +u8 MRateToHwRate8192SE(struct net_device*dev, u8 rate); +void rtl8192se_get_eeprom_size(struct net_device* dev); +void MacConfigBeforeFwDownload(struct net_device *dev); +bool rtl8192se_adapter_start(struct net_device* dev); +void rtl8192se_link_change(struct net_device *dev); +void rtl8192se_AllowAllDestAddr(struct net_device* dev, bool bAllowAllDA, bool WriteIntoReg); +void rtl8192se_tx_fill_desc(struct net_device *dev, tx_desc *pDesc, cb_desc *cb_desc, struct sk_buff *skb); +void rtl8192se_tx_fill_cmd_desc(struct net_device *dev, tx_desc_cmd *entry, cb_desc *cb_desc, + struct sk_buff *skb); +bool rtl8192se_rx_query_status_desc(struct net_device* dev, struct rtllib_rx_stats* stats, + rx_desc *pdesc, struct sk_buff* skb); +void rtl8192se_halt_adapter(struct net_device *dev, bool bReset); +void rtl8192se_update_ratr_table(struct net_device* dev,u8* pMcsRate,struct sta_info* pEntry); +int r8192se_resume_firm(struct net_device *dev); +void PHY_SetRtl8192seRfHalt(struct net_device* dev); +void UpdateHalRAMask8192SE(struct net_device* dev, bool bMulticast, u8 macId, u8 MimoPs, u8 WirelessMode, u8 bCurTxBW40MHz, u8 rssi_level); +u8 HalSetSysClk8192SE(struct net_device *dev, u8 Data); +bool rtl8192se_RxCommandPacketHandle(struct net_device *dev, struct sk_buff* skb,rx_desc *pdesc); +bool rtl8192se_check_ht_cap(struct net_device* dev, struct sta_info *sta, + struct rtllib_network* net); +u8 rtl8192se_MapHwQueueToFirmwareQueue(u8 QueueID, u8 priority); +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_led.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_led.h @@ -0,0 +1,84 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_HAL8192SELED_H +#define __INC_HAL8192SELED_H + + + +typedef enum _LED_STATE_8190{ + LED_UNKNOWN = 0, + LED_ON = 1, + LED_OFF = 2, + LED_BLINK_NORMAL = 3, + LED_BLINK_SLOWLY = 4, + LED_POWER_ON_BLINK = 5, + LED_SCAN_BLINK = 6, + LED_NO_LINK_BLINK = 7, + LED_BLINK_StartToBlink = 8, + LED_BLINK_TXRX = 9, + LED_BLINK_RUNTOP = 10, + LED_BLINK_CAMEO = 11, +}LED_STATE_8190; + +typedef enum _LED_PIN_8190{ + LED_PIN_GPIO0, + LED_PIN_LED0, + LED_PIN_LED1 +}LED_PIN_8190; + +typedef struct _LED_8190{ + void * dev; + + LED_PIN_8190 LedPin; + + LED_STATE_8190 CurrLedState; + bool bLedOn; + + bool bLedBlinkInProgress; + + bool bLedSlowBlinkInProgress; + u32 BlinkTimes; + LED_STATE_8190 BlinkingLedState; + + struct timer_list BlinkTimer; +} LED_8190, *PLED_8190; + + + + +typedef enum _LED_STRATEGY_8190{ + SW_LED_MODE0, + SW_LED_MODE1, + SW_LED_MODE2, + SW_LED_MODE3, + SW_LED_MODE4, + SW_LED_MODE5, + SW_LED_MODE6, + SW_LED_MODE7, + SW_LED_MODE8, + SW_LED_MODE9, + HW_LED, +}LED_STRATEGY_8190, *PLED_STRATEGY_8190; + + +void InitSwLeds(struct net_device *dev); +void DeInitSwLeds(struct net_device *dev); +void LedControl8192SE(struct net_device *dev, LED_CTL_MODE LedAction); + +#endif /*__INC_HAL8190PCILED_H*/ --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_scan.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_scan.h @@ -0,0 +1,38 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef _RTL8192SE_SCAN +#define _RTL8192SE_SCAN + +void rtl8192se_hw_scan_simu(void *data); +void rtl8192se_rx_surveydone_cmd(struct net_device *dev); +void rtl8192se_check_hw_scan(void *data); +void rtl8192se_start_hw_scan(void *data); +void rtl8192se_abort_hw_scan(struct net_device *dev); +void rtl8192se_hw_scan_initiate(struct net_device *dev); +void rtl8192se_send_scan_abort(struct net_device *dev); +void rtl8192se_cancel_hw_scan(struct net_device *dev); + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_phyreg.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_phyreg.h @@ -0,0 +1,954 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_HAL8192SPHYREG_H +#define __INC_HAL8192SPHYREG_H + + +/*--------------------------Define Parameters-------------------------------*/ + + + + +#define rPMAC_Reset 0x100 +#define rPMAC_TxStart 0x104 +#define rPMAC_TxLegacySIG 0x108 +#define rPMAC_TxHTSIG1 0x10c +#define rPMAC_TxHTSIG2 0x110 +#define rPMAC_PHYDebug 0x114 +#define rPMAC_TxPacketNum 0x118 +#define rPMAC_TxIdle 0x11c +#define rPMAC_TxMACHeader0 0x120 +#define rPMAC_TxMACHeader1 0x124 +#define rPMAC_TxMACHeader2 0x128 +#define rPMAC_TxMACHeader3 0x12c +#define rPMAC_TxMACHeader4 0x130 +#define rPMAC_TxMACHeader5 0x134 +#define rPMAC_TxDataType 0x138 +#define rPMAC_TxRandomSeed 0x13c +#define rPMAC_CCKPLCPPreamble 0x140 +#define rPMAC_CCKPLCPHeader 0x144 +#define rPMAC_CCKCRC16 0x148 +#define rPMAC_OFDMRxCRC32OK 0x170 +#define rPMAC_OFDMRxCRC32Er 0x174 +#define rPMAC_OFDMRxParityEr 0x178 +#define rPMAC_OFDMRxCRC8Er 0x17c +#define rPMAC_CCKCRxRC16Er 0x180 +#define rPMAC_CCKCRxRC32Er 0x184 +#define rPMAC_CCKCRxRC32OK 0x188 +#define rPMAC_TxStatus 0x18c + +#define RF_BB_CMD_ADDR 0x02c0 +#define RF_BB_CMD_DATA 0x02c4 + +#define rFPGA0_RFMOD 0x800 + +#define rFPGA0_TxInfo 0x804 +#define rFPGA0_PSDFunction 0x808 + +#define rFPGA0_TxGainStage 0x80c + +#define rFPGA0_RFTiming1 0x810 +#define rFPGA0_RFTiming2 0x814 + +#define rFPGA0_XA_HSSIParameter1 0x820 +#define rFPGA0_XA_HSSIParameter2 0x824 +#define rFPGA0_XB_HSSIParameter1 0x828 +#define rFPGA0_XB_HSSIParameter2 0x82c +#define rFPGA0_XC_HSSIParameter1 0x830 +#define rFPGA0_XC_HSSIParameter2 0x834 +#define rFPGA0_XD_HSSIParameter1 0x838 +#define rFPGA0_XD_HSSIParameter2 0x83c +#define rFPGA0_XA_LSSIParameter 0x840 +#define rFPGA0_XB_LSSIParameter 0x844 +#define rFPGA0_XC_LSSIParameter 0x848 +#define rFPGA0_XD_LSSIParameter 0x84c + +#define rFPGA0_RFWakeUpParameter 0x850 +#define rFPGA0_RFSleepUpParameter 0x854 + +#define rFPGA0_XAB_SwitchControl 0x858 +#define rFPGA0_XCD_SwitchControl 0x85c + +#define rFPGA0_XA_RFInterfaceOE 0x860 +#define rFPGA0_XB_RFInterfaceOE 0x864 +#define rFPGA0_XC_RFInterfaceOE 0x868 +#define rFPGA0_XD_RFInterfaceOE 0x86c + +#define rFPGA0_XAB_RFInterfaceSW 0x870 +#define rFPGA0_XCD_RFInterfaceSW 0x874 + +#define rFPGA0_XAB_RFParameter 0x878 +#define rFPGA0_XCD_RFParameter 0x87c + +#define rFPGA0_AnalogParameter1 0x880 +#define rFPGA0_AnalogParameter2 0x884 +#define rFPGA0_AnalogParameter3 0x888 +#define rFPGA0_AnalogParameter4 0x88c + +#define rFPGA0_XA_LSSIReadBack 0x8a0 +#define rFPGA0_XB_LSSIReadBack 0x8a4 +#define rFPGA0_XC_LSSIReadBack 0x8a8 +#define rFPGA0_XD_LSSIReadBack 0x8ac + +#define rFPGA0_PSDReport 0x8b4 +#define TransceiverA_HSPI_Readback 0x8b8 +#define TransceiverB_HSPI_Readback 0x8bc +#define rFPGA0_XAB_RFInterfaceRB 0x8e0 +#define rFPGA0_XCD_RFInterfaceRB 0x8e4 + +#define rFPGA1_RFMOD 0x900 + +#define rFPGA1_TxBlock 0x904 +#define rFPGA1_DebugSelect 0x908 +#define rFPGA1_TxInfo 0x90c + +#define rCCK0_System 0xa00 + +#define rCCK0_AFESetting 0xa04 +#define rCCK0_CCA 0xa08 + +#define rCCK0_RxAGC1 0xa0c +#define rCCK0_RxAGC2 0xa10 + +#define rCCK0_RxHP 0xa14 + +#define rCCK0_DSPParameter1 0xa18 +#define rCCK0_DSPParameter2 0xa1c + +#define rCCK0_TxFilter1 0xa20 +#define rCCK0_TxFilter2 0xa24 +#define rCCK0_DebugPort 0xa28 +#define rCCK0_FalseAlarmReport 0xa2c +#define rCCK0_TRSSIReport 0xa50 +#define rCCK0_RxReport 0xa54 +#define rCCK0_FACounterLower 0xa5c +#define rCCK0_FACounterUpper 0xa58 + +#define rOFDM0_LSTF 0xc00 + +#define rOFDM0_TRxPathEnable 0xc04 +#define rOFDM0_TRMuxPar 0xc08 +#define rOFDM0_TRSWIsolation 0xc0c + +#define rOFDM0_XARxAFE 0xc10 +#define rOFDM0_XARxIQImbalance 0xc14 +#define rOFDM0_XBRxAFE 0xc18 +#define rOFDM0_XBRxIQImbalance 0xc1c +#define rOFDM0_XCRxAFE 0xc20 +#define rOFDM0_XCRxIQImbalance 0xc24 +#define rOFDM0_XDRxAFE 0xc28 +#define rOFDM0_XDRxIQImbalance 0xc2c + +#define rOFDM0_RxDetector1 0xc30 +#define rOFDM0_RxDetector2 0xc34 +#define rOFDM0_RxDetector3 0xc38 +#define rOFDM0_RxDetector4 0xc3c + +#define rOFDM0_RxDSP 0xc40 +#define rOFDM0_CFOandDAGC 0xc44 +#define rOFDM0_CCADropThreshold 0xc48 +#define rOFDM0_ECCAThreshold 0xc4c + +#define rOFDM0_XAAGCCore1 0xc50 +#define rOFDM0_XAAGCCore2 0xc54 +#define rOFDM0_XBAGCCore1 0xc58 +#define rOFDM0_XBAGCCore2 0xc5c +#define rOFDM0_XCAGCCore1 0xc60 +#define rOFDM0_XCAGCCore2 0xc64 +#define rOFDM0_XDAGCCore1 0xc68 +#define rOFDM0_XDAGCCore2 0xc6c + +#define rOFDM0_AGCParameter1 0xc70 +#define rOFDM0_AGCParameter2 0xc74 +#define rOFDM0_AGCRSSITable 0xc78 +#define rOFDM0_HTSTFAGC 0xc7c + +#define rOFDM0_XATxIQImbalance 0xc80 +#define rOFDM0_XATxAFE 0xc84 +#define rOFDM0_XBTxIQImbalance 0xc88 +#define rOFDM0_XBTxAFE 0xc8c +#define rOFDM0_XCTxIQImbalance 0xc90 +#define rOFDM0_XCTxAFE 0xc94 +#define rOFDM0_XDTxIQImbalance 0xc98 +#define rOFDM0_XDTxAFE 0xc9c + +#define rOFDM0_RxHPParameter 0xce0 +#define rOFDM0_TxPseudoNoiseWgt 0xce4 +#define rOFDM0_FrameSync 0xcf0 +#define rOFDM0_DFSReport 0xcf4 +#define rOFDM0_TxCoeff1 0xca4 +#define rOFDM0_TxCoeff2 0xca8 +#define rOFDM0_TxCoeff3 0xcac +#define rOFDM0_TxCoeff4 0xcb0 +#define rOFDM0_TxCoeff5 0xcb4 +#define rOFDM0_TxCoeff6 0xcb8 + + +#define rOFDM1_LSTF 0xd00 +#define rOFDM1_TRxPathEnable 0xd04 + +#define rOFDM1_CFO 0xd08 +#define rOFDM1_CSI1 0xd10 +#define rOFDM1_SBD 0xd14 +#define rOFDM1_CSI2 0xd18 +#define rOFDM1_CFOTracking 0xd2c +#define rOFDM1_TRxMesaure1 0xd34 +#define rOFDM1_IntfDet 0xd3c +#define rOFDM1_PseudoNoiseStateAB 0xd50 +#define rOFDM1_PseudoNoiseStateCD 0xd54 +#define rOFDM1_RxPseudoNoiseWgt 0xd58 + +#define rOFDM_PHYCounter1 0xda0 +#define rOFDM_PHYCounter2 0xda4 +#define rOFDM_PHYCounter3 0xda8 + +#define rOFDM_ShortCFOAB 0xdac +#define rOFDM_ShortCFOCD 0xdb0 +#define rOFDM_LongCFOAB 0xdb4 +#define rOFDM_LongCFOCD 0xdb8 +#define rOFDM_TailCFOAB 0xdbc +#define rOFDM_TailCFOCD 0xdc0 +#define rOFDM_PWMeasure1 0xdc4 +#define rOFDM_PWMeasure2 0xdc8 +#define rOFDM_BWReport 0xdcc +#define rOFDM_AGCReport 0xdd0 +#define rOFDM_RxSNR 0xdd4 +#define rOFDM_RxEVMCSI 0xdd8 +#define rOFDM_SIGReport 0xddc + + +#define rTxAGC_Rate18_06 0xe00 +#define rTxAGC_Rate54_24 0xe04 +#define rTxAGC_CCK_Mcs32 0xe08 +#define rTxAGC_Mcs03_Mcs00 0xe10 +#define rTxAGC_Mcs07_Mcs04 0xe14 +#define rTxAGC_Mcs11_Mcs08 0xe18 +#define rTxAGC_Mcs15_Mcs12 0xe1c + +#define rZebra1_HSSIEnable 0x0 +#define rZebra1_TRxEnable1 0x1 +#define rZebra1_TRxEnable2 0x2 +#define rZebra1_AGC 0x4 +#define rZebra1_ChargePump 0x5 +#define rZebra1_Channel 0x7 + +#define rZebra1_TxGain 0x8 +#define rZebra1_TxLPF 0x9 +#define rZebra1_RxLPF 0xb +#define rZebra1_RxHPFCorner 0xc + +#define rGlobalCtrl 0 +#define rRTL8256_TxLPF 19 +#define rRTL8256_RxLPF 11 + +#define rRTL8258_TxLPF 0x11 +#define rRTL8258_RxLPF 0x13 +#define rRTL8258_RSSILPF 0xa + +#define RF_AC 0x00 + +#define RF_IQADJ_G1 0x01 +#define RF_IQADJ_G2 0x02 +#define RF_POW_TRSW 0x05 + +#define RF_GAIN_RX 0x06 +#define RF_GAIN_TX 0x07 + +#define RF_TXM_IDAC 0x08 +#define RF_BS_IQGEN 0x0F + +#define RF_MODE1 0x10 +#define RF_MODE2 0x11 + +#define RF_RX_AGC_HP 0x12 +#define RF_TX_AGC 0x13 +#define RF_BIAS 0x14 +#define RF_IPA 0x15 +#define RF_POW_ABILITY 0x17 +#define RF_MODE_AG 0x18 +#define rRfChannel 0x18 +#define RF_CHNLBW 0x18 +#define RF_TOP 0x19 + +#define RF_RX_G1 0x1A +#define RF_RX_G2 0x1B + +#define RF_RX_BB2 0x1C +#define RF_RX_BB1 0x1D + +#define RF_RCK1 0x1E +#define RF_RCK2 0x1F + +#define RF_TX_G1 0x20 +#define RF_TX_G2 0x21 +#define RF_TX_G3 0x22 + +#define RF_TX_BB1 0x23 + +#define RF_T_METER 0x24 + +#define RF_SYN_G1 0x25 +#define RF_SYN_G2 0x26 +#define RF_SYN_G3 0x27 +#define RF_SYN_G4 0x28 +#define RF_SYN_G5 0x29 +#define RF_SYN_G6 0x2A +#define RF_SYN_G7 0x2B +#define RF_SYN_G8 0x2C + +#define RF_RCK_OS 0x30 + +#define RF_TXPA_G1 0x31 +#define RF_TXPA_G2 0x32 +#define RF_TXPA_G3 0x33 + +#define bBBResetB 0x100 +#define bGlobalResetB 0x200 +#define bOFDMTxStart 0x4 +#define bCCKTxStart 0x8 +#define bCRC32Debug 0x100 +#define bPMACLoopback 0x10 +#define bTxLSIG 0xffffff +#define bOFDMTxRate 0xf +#define bOFDMTxReserved 0x10 +#define bOFDMTxLength 0x1ffe0 +#define bOFDMTxParity 0x20000 +#define bTxHTSIG1 0xffffff +#define bTxHTMCSRate 0x7f +#define bTxHTBW 0x80 +#define bTxHTLength 0xffff00 +#define bTxHTSIG2 0xffffff +#define bTxHTSmoothing 0x1 +#define bTxHTSounding 0x2 +#define bTxHTReserved 0x4 +#define bTxHTAggreation 0x8 +#define bTxHTSTBC 0x30 +#define bTxHTAdvanceCoding 0x40 +#define bTxHTShortGI 0x80 +#define bTxHTNumberHT_LTF 0x300 +#define bTxHTCRC8 0x3fc00 +#define bCounterReset 0x10000 +#define bNumOfOFDMTx 0xffff +#define bNumOfCCKTx 0xffff0000 +#define bTxIdleInterval 0xffff +#define bOFDMService 0xffff0000 +#define bTxMACHeader 0xffffffff +#define bTxDataInit 0xff +#define bTxHTMode 0x100 +#define bTxDataType 0x30000 +#define bTxRandomSeed 0xffffffff +#define bCCKTxPreamble 0x1 +#define bCCKTxSFD 0xffff0000 +#define bCCKTxSIG 0xff +#define bCCKTxService 0xff00 +#define bCCKLengthExt 0x8000 +#define bCCKTxLength 0xffff0000 +#define bCCKTxCRC16 0xffff +#define bCCKTxStatus 0x1 +#define bOFDMTxStatus 0x2 + +#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff)) + +#define bRFMOD 0x1 +#define bJapanMode 0x2 +#define bCCKTxSC 0x30 +#define bCCKEn 0x1000000 +#define bOFDMEn 0x2000000 + +#define bOFDMRxADCPhase 0x10000 +#define bOFDMTxDACPhase 0x40000 +#define bXATxAGC 0x3f + +#define bXBTxAGC 0xf00 +#define bXCTxAGC 0xf000 +#define bXDTxAGC 0xf0000 + +#define bPAStart 0xf0000000 +#define bTRStart 0x00f00000 +#define bRFStart 0x0000f000 +#define bBBStart 0x000000f0 +#define bBBCCKStart 0x0000000f +#define bPAEnd 0xf +#define bTREnd 0x0f000000 +#define bRFEnd 0x000f0000 +#define bCCAMask 0x000000f0 +#define bR2RCCAMask 0x00000f00 +#define bHSSI_R2TDelay 0xf8000000 +#define bHSSI_T2RDelay 0xf80000 +#define bContTxHSSI 0x400 +#define bIGFromCCK 0x200 +#define bAGCAddress 0x3f +#define bRxHPTx 0x7000 +#define bRxHPT2R 0x38000 +#define bRxHPCCKIni 0xc0000 +#define bAGCTxCode 0xc00000 +#define bAGCRxCode 0x300000 + +#define b3WireDataLength 0x800 +#define b3WireAddressLength 0x400 + +#define b3WireRFPowerDown 0x1 +#define b5GPAPEPolarity 0x40000000 +#define b2GPAPEPolarity 0x80000000 +#define bRFSW_TxDefaultAnt 0x3 +#define bRFSW_TxOptionAnt 0x30 +#define bRFSW_RxDefaultAnt 0x300 +#define bRFSW_RxOptionAnt 0x3000 +#define bRFSI_3WireData 0x1 +#define bRFSI_3WireClock 0x2 +#define bRFSI_3WireLoad 0x4 +#define bRFSI_3WireRW 0x8 +#define bRFSI_3Wire 0xf + +#define bRFSI_RFENV 0x10 + +#define bRFSI_TRSW 0x20 +#define bRFSI_TRSWB 0x40 +#define bRFSI_ANTSW 0x100 +#define bRFSI_ANTSWB 0x200 +#define bRFSI_PAPE 0x400 +#define bRFSI_PAPE5G 0x800 +#define bBandSelect 0x1 +#define bHTSIG2_GI 0x80 +#define bHTSIG2_Smoothing 0x01 +#define bHTSIG2_Sounding 0x02 +#define bHTSIG2_Aggreaton 0x08 +#define bHTSIG2_STBC 0x30 +#define bHTSIG2_AdvCoding 0x40 +#define bHTSIG2_NumOfHTLTF 0x300 +#define bHTSIG2_CRC8 0x3fc +#define bHTSIG1_MCS 0x7f +#define bHTSIG1_BandWidth 0x80 +#define bHTSIG1_HTLength 0xffff +#define bLSIG_Rate 0xf +#define bLSIG_Reserved 0x10 +#define bLSIG_Length 0x1fffe +#define bLSIG_Parity 0x20 +#define bCCKRxPhase 0x4 +#if (RTL92SE_FPGA_VERIFY == 1) +#define bLSSIReadAddress 0x3f000000 +#else +#define bLSSIReadAddress 0x7f800000 +#endif +#define bLSSIReadEdge 0x80000000 +#if (RTL92SE_FPGA_VERIFY == 1) +#define bLSSIReadBackData 0xfff +#else +#define bLSSIReadBackData 0xfffff +#endif +#define bLSSIReadOKFlag 0x1000 +#define bCCKSampleRate 0x8 +#define bRegulator0Standby 0x1 +#define bRegulatorPLLStandby 0x2 +#define bRegulator1Standby 0x4 +#define bPLLPowerUp 0x8 +#define bDPLLPowerUp 0x10 +#define bDA10PowerUp 0x20 +#define bAD7PowerUp 0x200 +#define bDA6PowerUp 0x2000 +#define bXtalPowerUp 0x4000 +#define b40MDClkPowerUP 0x8000 +#define bDA6DebugMode 0x20000 +#define bDA6Swing 0x380000 + +#define bADClkPhase 0x4000000 + +#define b80MClkDelay 0x18000000 +#define bAFEWatchDogEnable 0x20000000 + +#define bXtalCap01 0xc0000000 +#define bXtalCap23 0x3 +#define bXtalCap92x 0x0f000000 +#define bXtalCap 0x0f000000 + +#define bIntDifClkEnable 0x400 +#define bExtSigClkEnable 0x800 +#define bBandgapMbiasPowerUp 0x10000 +#define bAD11SHGain 0xc0000 +#define bAD11InputRange 0x700000 +#define bAD11OPCurrent 0x3800000 +#define bIPathLoopback 0x4000000 +#define bQPathLoopback 0x8000000 +#define bAFELoopback 0x10000000 +#define bDA10Swing 0x7e0 +#define bDA10Reverse 0x800 +#define bDAClkSource 0x1000 +#define bAD7InputRange 0x6000 +#define bAD7Gain 0x38000 +#define bAD7OutputCMMode 0x40000 +#define bAD7InputCMMode 0x380000 +#define bAD7Current 0xc00000 +#define bRegulatorAdjust 0x7000000 +#define bAD11PowerUpAtTx 0x1 +#define bDA10PSAtTx 0x10 +#define bAD11PowerUpAtRx 0x100 +#define bDA10PSAtRx 0x1000 +#define bCCKRxAGCFormat 0x200 +#define bPSDFFTSamplepPoint 0xc000 +#define bPSDAverageNum 0x3000 +#define bIQPathControl 0xc00 +#define bPSDFreq 0x3ff +#define bPSDAntennaPath 0x30 +#define bPSDIQSwitch 0x40 +#define bPSDRxTrigger 0x400000 +#define bPSDTxTrigger 0x80000000 +#define bPSDSineToneScale 0x7f000000 +#define bPSDReport 0xffff + +#define bOFDMTxSC 0x30000000 +#define bCCKTxOn 0x1 +#define bOFDMTxOn 0x2 +#define bDebugPage 0xfff +#define bDebugItem 0xff +#define bAntL 0x10 +#define bAntNonHT 0x100 +#define bAntHT1 0x1000 +#define bAntHT2 0x10000 +#define bAntHT1S1 0x100000 +#define bAntNonHTS1 0x1000000 + +#define bCCKBBMode 0x3 +#define bCCKTxPowerSaving 0x80 +#define bCCKRxPowerSaving 0x40 + +#define bCCKSideBand 0x10 + +#define bCCKScramble 0x8 +#define bCCKAntDiversity 0x8000 +#define bCCKCarrierRecovery 0x4000 +#define bCCKTxRate 0x3000 +#define bCCKDCCancel 0x0800 +#define bCCKISICancel 0x0400 +#define bCCKMatchFilter 0x0200 +#define bCCKEqualizer 0x0100 +#define bCCKPreambleDetect 0x800000 +#define bCCKFastFalseCCA 0x400000 +#define bCCKChEstStart 0x300000 +#define bCCKCCACount 0x080000 +#define bCCKcs_lim 0x070000 +#define bCCKBistMode 0x80000000 +#define bCCKCCAMask 0x40000000 +#define bCCKTxDACPhase 0x4 +#define bCCKRxADCPhase 0x20000000 +#define bCCKr_cp_mode0 0x0100 +#define bCCKTxDCOffset 0xf0 +#define bCCKRxDCOffset 0xf +#define bCCKCCAMode 0xc000 +#define bCCKFalseCS_lim 0x3f00 +#define bCCKCS_ratio 0xc00000 +#define bCCKCorgBit_sel 0x300000 +#define bCCKPD_lim 0x0f0000 +#define bCCKNewCCA 0x80000000 +#define bCCKRxHPofIG 0x8000 +#define bCCKRxIG 0x7f00 +#define bCCKLNAPolarity 0x800000 +#define bCCKRx1stGain 0x7f0000 +#define bCCKRFExtend 0x20000000 +#define bCCKRxAGCSatLevel 0x1f000000 +#define bCCKRxAGCSatCount 0xe0 +#define bCCKRxRFSettle 0x1f +#define bCCKFixedRxAGC 0x8000 +#define bCCKAntennaPolarity 0x2000 +#define bCCKTxFilterType 0x0c00 +#define bCCKRxAGCReportType 0x0300 +#define bCCKRxDAGCEn 0x80000000 +#define bCCKRxDAGCPeriod 0x20000000 +#define bCCKRxDAGCSatLevel 0x1f000000 +#define bCCKTimingRecovery 0x800000 +#define bCCKTxC0 0x3f0000 +#define bCCKTxC1 0x3f000000 +#define bCCKTxC2 0x3f +#define bCCKTxC3 0x3f00 +#define bCCKTxC4 0x3f0000 +#define bCCKTxC5 0x3f000000 +#define bCCKTxC6 0x3f +#define bCCKTxC7 0x3f00 +#define bCCKDebugPort 0xff0000 +#define bCCKDACDebug 0x0f000000 +#define bCCKFalseAlarmEnable 0x8000 +#define bCCKFalseAlarmRead 0x4000 +#define bCCKTRSSI 0x7f +#define bCCKRxAGCReport 0xfe +#define bCCKRxReport_AntSel 0x80000000 +#define bCCKRxReport_MFOff 0x40000000 +#define bCCKRxRxReport_SQLoss 0x20000000 +#define bCCKRxReport_Pktloss 0x10000000 +#define bCCKRxReport_Lockedbit 0x08000000 +#define bCCKRxReport_RateError 0x04000000 +#define bCCKRxReport_RxRate 0x03000000 +#define bCCKRxFACounterLower 0xff +#define bCCKRxFACounterUpper 0xff000000 +#define bCCKRxHPAGCStart 0xe000 +#define bCCKRxHPAGCFinal 0x1c00 +#define bCCKRxFalseAlarmEnable 0x8000 +#define bCCKFACounterFreeze 0x4000 +#define bCCKTxPathSel 0x10000000 +#define bCCKDefaultRxPath 0xc000000 +#define bCCKOptionRxPath 0x3000000 + +#define bNumOfSTF 0x3 +#define bShift_L 0xc0 +#define bGI_TH 0xc +#define bRxPathA 0x1 +#define bRxPathB 0x2 +#define bRxPathC 0x4 +#define bRxPathD 0x8 +#define bTxPathA 0x1 +#define bTxPathB 0x2 +#define bTxPathC 0x4 +#define bTxPathD 0x8 +#define bTRSSIFreq 0x200 +#define bADCBackoff 0x3000 +#define bDFIRBackoff 0xc000 +#define bTRSSILatchPhase 0x10000 +#define bRxIDCOffset 0xff +#define bRxQDCOffset 0xff00 +#define bRxDFIRMode 0x1800000 +#define bRxDCNFType 0xe000000 +#define bRXIQImb_A 0x3ff +#define bRXIQImb_B 0xfc00 +#define bRXIQImb_C 0x3f0000 +#define bRXIQImb_D 0xffc00000 +#define bDC_dc_Notch 0x60000 +#define bRxNBINotch 0x1f000000 +#define bPD_TH 0xf +#define bPD_TH_Opt2 0xc000 +#define bPWED_TH 0x700 +#define bIfMF_Win_L 0x800 +#define bPD_Option 0x1000 +#define bMF_Win_L 0xe000 +#define bBW_Search_L 0x30000 +#define bwin_enh_L 0xc0000 +#define bBW_TH 0x700000 +#define bED_TH2 0x3800000 +#define bBW_option 0x4000000 +#define bRatio_TH 0x18000000 +#define bWindow_L 0xe0000000 +#define bSBD_Option 0x1 +#define bFrame_TH 0x1c +#define bFS_Option 0x60 +#define bDC_Slope_check 0x80 +#define bFGuard_Counter_DC_L 0xe00 +#define bFrame_Weight_Short 0x7000 +#define bSub_Tune 0xe00000 +#define bFrame_DC_Length 0xe000000 +#define bSBD_start_offset 0x30000000 +#define bFrame_TH_2 0x7 +#define bFrame_GI2_TH 0x38 +#define bGI2_Sync_en 0x40 +#define bSarch_Short_Early 0x300 +#define bSarch_Short_Late 0xc00 +#define bSarch_GI2_Late 0x70000 +#define bCFOAntSum 0x1 +#define bCFOAcc 0x2 +#define bCFOStartOffset 0xc +#define bCFOLookBack 0x70 +#define bCFOSumWeight 0x80 +#define bDAGCEnable 0x10000 +#define bTXIQImb_A 0x3ff +#define bTXIQImb_B 0xfc00 +#define bTXIQImb_C 0x3f0000 +#define bTXIQImb_D 0xffc00000 +#define bTxIDCOffset 0xff +#define bTxQDCOffset 0xff00 +#define bTxDFIRMode 0x10000 +#define bTxPesudoNoiseOn 0x4000000 +#define bTxPesudoNoise_A 0xff +#define bTxPesudoNoise_B 0xff00 +#define bTxPesudoNoise_C 0xff0000 +#define bTxPesudoNoise_D 0xff000000 +#define bCCADropOption 0x20000 +#define bCCADropThres 0xfff00000 +#define bEDCCA_H 0xf +#define bEDCCA_L 0xf0 +#define bLambda_ED 0x300 +#define bRxInitialGain 0x7f +#define bRxAntDivEn 0x80 +#define bRxAGCAddressForLNA 0x7f00 +#define bRxHighPowerFlow 0x8000 +#define bRxAGCFreezeThres 0xc0000 +#define bRxFreezeStep_AGC1 0x300000 +#define bRxFreezeStep_AGC2 0xc00000 +#define bRxFreezeStep_AGC3 0x3000000 +#define bRxFreezeStep_AGC0 0xc000000 +#define bRxRssi_Cmp_En 0x10000000 +#define bRxQuickAGCEn 0x20000000 +#define bRxAGCFreezeThresMode 0x40000000 +#define bRxOverFlowCheckType 0x80000000 +#define bRxAGCShift 0x7f +#define bTRSW_Tri_Only 0x80 +#define bPowerThres 0x300 +#define bRxAGCEn 0x1 +#define bRxAGCTogetherEn 0x2 +#define bRxAGCMin 0x4 +#define bRxHP_Ini 0x7 +#define bRxHP_TRLNA 0x70 +#define bRxHP_RSSI 0x700 +#define bRxHP_BBP1 0x7000 +#define bRxHP_BBP2 0x70000 +#define bRxHP_BBP3 0x700000 +#define bRSSI_H 0x7f0000 +#define bRSSI_Gen 0x7f000000 +#define bRxSettle_TRSW 0x7 +#define bRxSettle_LNA 0x38 +#define bRxSettle_RSSI 0x1c0 +#define bRxSettle_BBP 0xe00 +#define bRxSettle_RxHP 0x7000 +#define bRxSettle_AntSW_RSSI 0x38000 +#define bRxSettle_AntSW 0xc0000 +#define bRxProcessTime_DAGC 0x300000 +#define bRxSettle_HSSI 0x400000 +#define bRxProcessTime_BBPPW 0x800000 +#define bRxAntennaPowerShift 0x3000000 +#define bRSSITableSelect 0xc000000 +#define bRxHP_Final 0x7000000 +#define bRxHTSettle_BBP 0x7 +#define bRxHTSettle_HSSI 0x8 +#define bRxHTSettle_RxHP 0x70 +#define bRxHTSettle_BBPPW 0x80 +#define bRxHTSettle_Idle 0x300 +#define bRxHTSettle_Reserved 0x1c00 +#define bRxHTRxHPEn 0x8000 +#define bRxHTAGCFreezeThres 0x30000 +#define bRxHTAGCTogetherEn 0x40000 +#define bRxHTAGCMin 0x80000 +#define bRxHTAGCEn 0x100000 +#define bRxHTDAGCEn 0x200000 +#define bRxHTRxHP_BBP 0x1c00000 +#define bRxHTRxHP_Final 0xe0000000 +#define bRxPWRatioTH 0x3 +#define bRxPWRatioEn 0x4 +#define bRxMFHold 0x3800 +#define bRxPD_Delay_TH1 0x38 +#define bRxPD_Delay_TH2 0x1c0 +#define bRxPD_DC_COUNT_MAX 0x600 +#define bRxPD_Delay_TH 0x8000 +#define bRxProcess_Delay 0xf0000 +#define bRxSearchrange_GI2_Early 0x700000 +#define bRxFrame_Guard_Counter_L 0x3800000 +#define bRxSGI_Guard_L 0xc000000 +#define bRxSGI_Search_L 0x30000000 +#define bRxSGI_TH 0xc0000000 +#define bDFSCnt0 0xff +#define bDFSCnt1 0xff00 +#define bDFSFlag 0xf0000 +#define bMFWeightSum 0x300000 +#define bMinIdxTH 0x7f000000 +#define bDAFormat 0x40000 +#define bTxChEmuEnable 0x01000000 +#define bTRSWIsolation_A 0x7f +#define bTRSWIsolation_B 0x7f00 +#define bTRSWIsolation_C 0x7f0000 +#define bTRSWIsolation_D 0x7f000000 +#define bExtLNAGain 0x7c00 + +#define bSTBCEn 0x4 +#define bAntennaMapping 0x10 +#define bNss 0x20 +#define bCFOAntSumD 0x200 +#define bPHYCounterReset 0x8000000 +#define bCFOReportGet 0x4000000 +#define bOFDMContinueTx 0x10000000 +#define bOFDMSingleCarrier 0x20000000 +#define bOFDMSingleTone 0x40000000 +#define bHTDetect 0x100 +#define bCFOEn 0x10000 +#define bCFOValue 0xfff00000 +#define bSigTone_Re 0x3f +#define bSigTone_Im 0x7f00 +#define bCounter_CCA 0xffff +#define bCounter_ParityFail 0xffff0000 +#define bCounter_RateIllegal 0xffff +#define bCounter_CRC8Fail 0xffff0000 +#define bCounter_MCSNoSupport 0xffff +#define bCounter_FastSync 0xffff +#define bShortCFO 0xfff +#define bShortCFOTLength 12 +#define bShortCFOFLength 11 +#define bLongCFO 0x7ff +#define bLongCFOTLength 11 +#define bLongCFOFLength 11 +#define bTailCFO 0x1fff +#define bTailCFOTLength 13 +#define bTailCFOFLength 12 +#define bmax_en_pwdB 0xffff +#define bCC_power_dB 0xffff0000 +#define bnoise_pwdB 0xffff +#define bPowerMeasTLength 10 +#define bPowerMeasFLength 3 +#define bRx_HT_BW 0x1 +#define bRxSC 0x6 +#define bRx_HT 0x8 +#define bNB_intf_det_on 0x1 +#define bIntf_win_len_cfg 0x30 +#define bNB_Intf_TH_cfg 0x1c0 +#define bRFGain 0x3f +#define bTableSel 0x40 +#define bTRSW 0x80 +#define bRxSNR_A 0xff +#define bRxSNR_B 0xff00 +#define bRxSNR_C 0xff0000 +#define bRxSNR_D 0xff000000 +#define bSNREVMTLength 8 +#define bSNREVMFLength 1 +#define bCSI1st 0xff +#define bCSI2nd 0xff00 +#define bRxEVM1st 0xff0000 +#define bRxEVM2nd 0xff000000 +#define bSIGEVM 0xff +#define bPWDB 0xff00 +#define bSGIEN 0x10000 + +#define bSFactorQAM1 0xf +#define bSFactorQAM2 0xf0 +#define bSFactorQAM3 0xf00 +#define bSFactorQAM4 0xf000 +#define bSFactorQAM5 0xf0000 +#define bSFactorQAM6 0xf0000 +#define bSFactorQAM7 0xf00000 +#define bSFactorQAM8 0xf000000 +#define bSFactorQAM9 0xf0000000 +#define bCSIScheme 0x100000 + +#define bNoiseLvlTopSet 0x3 +#define bChSmooth 0x4 +#define bChSmoothCfg1 0x38 +#define bChSmoothCfg2 0x1c0 +#define bChSmoothCfg3 0xe00 +#define bChSmoothCfg4 0x7000 +#define bMRCMode 0x800000 +#define bTHEVMCfg 0x7000000 + +#define bLoopFitType 0x1 +#define bUpdCFO 0x40 +#define bUpdCFOOffData 0x80 +#define bAdvUpdCFO 0x100 +#define bAdvTimeCtrl 0x800 +#define bUpdClko 0x1000 +#define bFC 0x6000 +#define bTrackingMode 0x8000 +#define bPhCmpEnable 0x10000 +#define bUpdClkoLTF 0x20000 +#define bComChCFO 0x40000 +#define bCSIEstiMode 0x80000 +#define bAdvUpdEqz 0x100000 +#define bUChCfg 0x7000000 +#define bUpdEqz 0x8000000 + +#define bTxAGCRate18_06 0x7f7f7f7f +#define bTxAGCRate54_24 0x7f7f7f7f +#define bTxAGCRateMCS32 0x7f +#define bTxAGCRateCCK 0x7f00 +#define bTxAGCRateMCS3_MCS0 0x7f7f7f7f +#define bTxAGCRateMCS7_MCS4 0x7f7f7f7f +#define bTxAGCRateMCS11_MCS8 0x7f7f7f7f +#define bTxAGCRateMCS15_MCS12 0x7f7f7f7f + +#define bRxPesudoNoiseOn 0x20000000 +#define bRxPesudoNoise_A 0xff +#define bRxPesudoNoise_B 0xff00 +#define bRxPesudoNoise_C 0xff0000 +#define bRxPesudoNoise_D 0xff000000 +#define bPesudoNoiseState_A 0xffff +#define bPesudoNoiseState_B 0xffff0000 +#define bPesudoNoiseState_C 0xffff +#define bPesudoNoiseState_D 0xffff0000 + +#define bZebra1_HSSIEnable 0x8 +#define bZebra1_TRxControl 0xc00 +#define bZebra1_TRxGainSetting 0x07f +#define bZebra1_RxCorner 0xc00 +#define bZebra1_TxChargePump 0x38 +#define bZebra1_RxChargePump 0x7 +#define bZebra1_ChannelNum 0xf80 +#define bZebra1_TxLPFBW 0x400 +#define bZebra1_RxLPFBW 0x600 + +#define bRTL8256RegModeCtrl1 0x100 +#define bRTL8256RegModeCtrl0 0x40 +#define bRTL8256_TxLPFBW 0x18 +#define bRTL8256_RxLPFBW 0x600 + +#define bRTL8258_TxLPFBW 0xc +#define bRTL8258_RxLPFBW 0xc00 +#define bRTL8258_RSSILPFBW 0xc0 + + + +#define bByte0 0x1 +#define bByte1 0x2 +#define bByte2 0x4 +#define bByte3 0x8 +#define bWord0 0x3 +#define bWord1 0xc +#define bDWord 0xf + +#define bMaskByte0 0xff +#define bMaskByte1 0xff00 +#define bMaskByte2 0xff0000 +#define bMaskByte3 0xff000000 +#define bMaskHWord 0xffff0000 +#define bMaskLWord 0x0000ffff +#define bMaskDWord 0xffffffff + +#if (RTL92SE_FPGA_VERIFY == 1) +#define bMask12Bits 0xfff +#define bMask20Bits 0xfff +#define bRFRegOffsetMask 0xfff +#else +#define bMask12Bits 0xfffff +#define bMask20Bits 0xfffff +#define bRFRegOffsetMask 0xfffff +#endif +#define bEnable 0x1 +#define bDisable 0x0 + +#define LeftAntenna 0x0 +#define RightAntenna 0x1 + +#define tCheckTxStatus 500 +#define tUpdateRxCounter 100 + +#define rateCCK 0 +#define rateOFDM 1 +#define rateHT 2 + +#define bPMAC_End 0x1ff +#define bFPGAPHY0_End 0x8ff +#define bFPGAPHY1_End 0x9ff +#define bCCKPHY0_End 0xaff +#define bOFDMPHY0_End 0xcff +#define bOFDMPHY1_End 0xdff + + +#define bPMACControl 0x0 +#define bWMACControl 0x1 +#define bWNICControl 0x2 + +#define PathA 0x0 +#define PathB 0x1 +#define PathC 0x2 +#define PathD 0x3 + +/*--------------------------Define Parameters-------------------------------*/ + + +#endif + + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_hw.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_hw.h @@ -0,0 +1,1070 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_HAL8192SREG_H +#define __INC_HAL8192SREG_H + + +#if 0 +typedef enum _RT_RF_TYPE_DEF +{ + RF_1T2R = 0, + RF_2T4R, + RF_2T2R, + RF_1T1R, + RF_2T2R_GREEN, + RF_819X_MAX_TYPE +}RT_RF_TYPE_DEF; +#endif + +#define SYS_ISO_CTRL 0x0000 +#define SYS_FUNC_EN 0x0002 +#define PMC_FSM 0x0004 +#define SYS_CLKR 0x0008 +#define EPROM_CMD 0x000A +#define EE_VPD 0x000C +#define AFE_MISC 0x0010 +#define SPS0_CTRL 0x0011 +#define SPS1_CTRL 0x0018 +#define RF_CTRL 0x001F +#define LDOA15_CTRL 0x0020 +#define LDOV12D_CTRL 0x0021 +#define LDOHCI12_CTRL 0x0022 +#define LDO_USB_SDIO 0x0023 +#define LPLDO_CTRL 0x0024 +#define AFE_XTAL_CTRL 0x0026 +#define AFE_PLL_CTRL 0x0028 +#define EFUSE_CTRL 0x0030 +#define EFUSE_TEST 0x0034 +#define PWR_DATA 0x0038 +#define DBG_PORT 0x003A +#define DPS_TIMER 0x003C +#define RCLK_MON 0x003E + +#define CMDR 0x0040 +#define TXPAUSE 0x0042 +#define LBKMD_SEL 0x0043 +#define TCR 0x0044 +#define RCR 0x0048 +#define MSR 0x004C +#define SYSF_CFG 0x004D +#define RX_PKY_LIMIT 0x004E +#define MBIDCTRL 0x004F + +#define MACIDR 0x0050 +#define MACIDR0 0x0050 +#define MACIDR4 0x0054 +#define BSSIDR 0x0058 +#define HWVID 0x005E +#define MAR 0x0060 +#define MBIDCAMCONTENT 0x0068 +#define MBIDCAMCFG 0x0070 +#define BUILDTIME 0x0074 +#define BUILDUSER 0x0078 + +#define IDR0 MACIDR0 +#define IDR4 MACIDR4 + +#define TSFR 0x0080 +#define SLOT_TIME 0x0089 +#define USTIME 0x008A +#define SIFS_CCK 0x008C +#define SIFS_OFDM 0x008E +#define PIFS_TIME 0x0090 +#define ACK_TIMEOUT 0x0091 +#define EIFSTR 0x0092 +#define BCN_INTERVAL 0x0094 +#define ATIMWND 0x0096 +#define BCN_DRV_EARLY_INT 0x0098 +#define BCN_DMATIME 0x009A +#define BCN_ERR_THRESH 0x009C +#define MLT 0x009D +#define RSVD_MAC_TUNE_US 0x009E + +#define RQPN 0x00A0 +#define RQPN1 0x00A0 +#define RQPN2 0x00A1 +#define RQPN3 0x00A2 +#define RQPN4 0x00A3 +#define RQPN5 0x00A4 +#define RQPN6 0x00A5 +#define RQPN7 0x00A6 +#define RQPN8 0x00A7 +#define RQPN9 0x00A8 +#define RQPN10 0x00A9 +#define LD_RQPN 0x00AB +#define RXFF_BNDY 0x00AC +#define RXRPT_BNDY 0x00B0 +#define TXPKTBUF_PGBNDY 0x00B4 +#define PBP 0x00B5 +#define RXDRVINFO_SZ 0x00B6 +#define TXFF_STATUS 0x00B7 +#define RXFF_STATUS 0x00B8 +#define TXFF_EMPTY_TH 0x00B9 +#define SDIO_RX_BLKSZ 0x00BC +#define RXDMA 0x00BD +#define RXPKT_NUM 0x00BE +#define C2HCMD_UDT_SIZE 0x00C0 +#define C2HCMD_UDT_ADDR 0x00C2 +#define FIFOPAGE1 0x00C4 +#define FIFOPAGE2 0x00C8 +#define FIFOPAGE3 0x00CC +#define FIFOPAGE4 0x00D0 +#define FIFOPAGE5 0x00D4 +#define FW_RSVD_PG_CRTL 0x00D8 +#define RXDMA_AGG_PG_TH 0x00D9 +#define TXDESC_MSK 0x00DC +#define TXRPTFF_RDPTR 0x00E0 +#define TXRPTFF_WTPTR 0x00E4 +#define C2HFF_RDPTR 0x00E8 +#define C2HFF_WTPTR 0x00EC +#define RXFF0_RDPTR 0x00F0 +#define RXFF0_WTPTR 0x00F4 +#define RXFF1_RDPTR 0x00F8 +#define RXFF1_WTPTR 0x00FC +#define RXRPT0_RDPTR 0x0100 +#define RXRPT0_WTPTR 0x0104 +#define RXRPT1_RDPTR 0x0108 +#define RXRPT1_WTPTR 0x010C +#define RX0_UDT_SIZE 0x0110 +#define RX1PKTNUM 0x0114 +#define RXFILTERMAP 0x0116 +#define RXFILTERMAP_GP1 0x0118 +#define RXFILTERMAP_GP2 0x011A +#define RXFILTERMAP_GP3 0x011C +#define BCNQ_CTRL 0x0120 +#define MGTQ_CTRL 0x0124 +#define HIQ_CTRL 0x0128 +#define VOTID7_CTRL 0x012c +#define VOTID6_CTRL 0x0130 +#define VITID5_CTRL 0x0134 +#define VITID4_CTRL 0x0138 +#define BETID3_CTRL 0x013c +#define BETID0_CTRL 0x0140 +#define BKTID2_CTRL 0x0144 +#define BKTID1_CTRL 0x0148 +#define CMDQ_CTRL 0x014c +#define TXPKT_NUM_CTRL 0x0150 +#define TXQ_PGADD 0x0152 +#define TXFF_PG_NUM 0x0154 +#define TRXDMA_STATUS 0x0156 + +#define INIMCS_SEL 0x0160 +#define TX_RATE_REG INIMCS_SEL +#define INIRTSMCS_SEL 0x0180 +#define RRSR 0x0181 +#define ARFR0 0x0184 +#define ARFR1 0x0188 +#define ARFR2 0x018C +#define ARFR3 0x0190 +#define ARFR4 0x0194 +#define ARFR5 0x0198 +#define ARFR6 0x019C +#define ARFR7 0x01A0 +#define AGGLEN_LMT_H 0x01A7 +#define AGGLEN_LMT_L 0x01A8 +#define DARFRC 0x01B0 +#define RARFRC 0x01B8 +#define MCS_TXAGC 0x01C0 +#define CCK_TXAGC 0x01C8 + +#define EDCAPARA_VO 0x01D0 +#define EDCAPARA_VI 0x01D4 +#define EDCAPARA_BE 0x01D8 +#define EDCAPARA_BK 0x01DC +#define BCNTCFG 0x01E0 +#define CWRR 0x01E2 +#define ACMAVG 0x01E4 +#define AcmHwCtrl 0x01E7 +#define VO_ADMTM 0x01E8 +#define VI_ADMTM 0x01EC +#define BE_ADMTM 0x01F0 +#define RETRY_LIMIT 0x01F4 +#define SG_RATE 0x01F6 + +#define NAV_CTRL 0x0200 +#define BW_OPMODE 0x0203 +#define BACAMCMD 0x0204 +#define BACAMCONTENT 0x0208 + +#define LBDLY 0x0210 +#define FWDLY 0x0211 +#define HWPC_RX_CTRL 0x0218 +#define MQIR 0x0220 +#define MAIR 0x0222 +#define MSIR 0x0224 +#define CLM_RESULT 0x0227 +#define NHM_RPI_CNT 0x0228 +#define RXERR_RPT 0x0230 +#define NAV_PROT_LEN 0x0234 +#define CFEND_TH 0x0236 +#define AMPDU_MIN_SPACE 0x0237 +#define TXOP_STALL_CTRL 0x0238 + +#define RWCAM 0x0240 +#define WCAMI 0x0244 +#define RCAMO 0x0248 +#define CAMDBG 0x024C +#define SECR 0x0250 + +#define WOW_CTRL 0x0260 +#define PSSTATUS 0x0261 +#define PSSWITCH 0x0262 +#define MIMOPS_WAIT_PERIOD 0x0263 +#define LPNAV_CTRL 0x0264 +#define WFM0 0x0270 +#define WFM1 0x0280 +#define WFM2 0x0290 +#define WFM3 0x02A0 +#define WFM4 0x02B0 +#define WFM5 0x02C0 +#define WFCRC 0x02D0 +#define FW_RPT_REG 0x02c4 + +#define PSTIME 0x02E0 +#define TIMER0 0x02E4 +#define TIMER1 0x02E8 +#define GPIO_CTRL 0x02EC +#define GPIO_IN 0x02EC +#define GPIO_OUT 0x02ED +#define GPIO_IO_SEL 0x02EE +#define GPIO_MOD 0x02EF +#define GPIO_INTCTRL 0x02F0 +#define MAC_PINMUX_CFG 0x02F1 +#define LEDCFG 0x02F2 +#define PHY_REG 0x02F3 +#define PHY_REG_DATA 0x02F4 +#define EFUSE_CLK 0x02F8 + +#define INTA_MASK 0x0300 +#define ISR 0x0308 + +#define DBG_PORT_SWITCH 0x003A +#define BIST 0x0310 +#define DBS 0x0314 +#define CPUINST 0x0318 +#define CPUCAUSE 0x031C +#define LBUS_ERR_ADDR 0x0320 +#define LBUS_ERR_CMD 0x0324 +#define LBUS_ERR_DATA_L 0x0328 +#define LBUS_ERR_DATA_H 0x032C +#define LX_EXCEPTION_ADDR 0x0330 +#define WDG_CTRL 0x0334 +#define INTMTU 0x0338 +#define INTM 0x033A +#define FDLOCKTURN0 0x033C +#define FDLOCKTURN1 0x033D +#define TRXPKTBUF_DBG_DATA 0x0340 +#define TRXPKTBUF_DBG_CTRL 0x0348 +#define DPLL 0x034A +#define CBUS_ERR_ADDR 0x0350 +#define CBUS_ERR_CMD 0x0354 +#define CBUS_ERR_DATA_L 0x0358 +#define CBUS_ERR_DATA_H 0x035C +#define USB_SIE_INTF_ADDR 0x0360 +#define USB_SIE_INTF_WD 0x0361 +#define USB_SIE_INTF_RD 0x0362 +#define USB_SIE_INTF_CTRL 0x0363 +#define LBUS_MON_ADDR 0x0364 +#define LBUS_ADDR_MASK 0x0368 + + +#define TPPoll 0x0500 +#define PM_CTRL 0x0502 +#define PCIF 0x0503 + +#define THPDA 0x0514 +#define TMDA 0x0518 +#define TCDA 0x051C +#define HDA 0x0520 +#define TVODA 0x0524 +#define TVIDA 0x0528 +#define TBEDA 0x052C +#define TBKDA 0x0530 +#define TBDA 0x0534 +#define RCDA 0x0538 +#define RDQDA 0x053C +#define DBI_WDATA 0x0540 +#define DBI_RDATA 0x0544 +#define DBI_CTRL 0x0548 +#define MDIO_DATA 0x0550 +#define MDIO_CTRL 0x0554 +#define PCI_RPWM 0x0561 +#define PCI_CPWM 0x0563 + + +#define PHY_CCA 0x803 + + +#define USB_RX_AGG_TIMEOUT 0xFE5B + +#define FW_OFFLOAD_EN BIT7 + +#define MAX_MSS_DENSITY_2T 0x13 +#define MAX_MSS_DENSITY_1T 0x0A + +#define RXDMA_AGG_EN BIT7 + +#define RXDMA_AGG_TIMEOUT_DISABLE 0x00 +#define RXDMA_AGG_TIMEOUT_17MS 0x01 +#define RXDMA_AGG_TIMEOUT_17_2_MS 0x02 +#define RXDMA_AGG_TIMEOUT_17_4_MS 0x04 +#define RXDMA_AGG_TIMEOUT_17_10_MS 0x0A + +#define InvalidBBRFValue 0x12345678 + +#define USB_RPWM 0xFE58 + +#ifdef RTL8192SE +#define RPWM PCI_RPWM +#endif +#ifdef RTL8192SU +#define RPWM USB_RPWM +#endif + +#if 1 +#define AFR 0x010 +#define BCN_TCFG 0x062 +#define RATR0 0x320 +#endif +#define UnusedRegister 0x0320 +#define PSR UnusedRegister +#define DCAM UnusedRegister +#define BBAddr UnusedRegister +#define PhyDataR UnusedRegister +#define UFWP UnusedRegister + + + +#define ISO_MD2PP BIT0 +#define ISO_PA2PCIE BIT3 +#define ISO_PLL2MD BIT4 +#define ISO_PWC_DV2RP BIT11 +#define ISO_PWC_RV2RP BIT12 + +#define FEN_MREGEN BIT15 +#define FEN_DCORE BIT11 +#define FEN_CPUEN BIT10 + +#define PAD_HWPD_IDN BIT22 + +#define SYS_CLKSEL_80M BIT0 +#define SYS_PS_CLKSEL BIT1 +#define SYS_CPU_CLKSEL BIT2 +#define SYS_MAC_CLK_EN BIT11 +#define SYS_SWHW_SEL BIT14 +#define SYS_FWHW_SEL BIT15 + + +#define CmdEEPROM_En BIT5 +#define CmdEERPOMSEL BIT4 +#define Cmd9346CR_9356SEL BIT4 +#define AutoLoadEEPROM (CmdEEPROM_En|CmdEERPOMSEL) +#define AutoLoadEFUSE CmdEEPROM_En +#define EPROM_CMD_OPERATING_MODE_SHIFT 6 +#define EPROM_CMD_OPERATING_MODE_MASK ((1<<7)|(1<<6)) +#define EPROM_CMD_CONFIG 0x3 +#define EPROM_CMD_NORMAL 0 +#define EPROM_CMD_LOAD 1 +#define EPROM_CMD_PROGRAM 2 +#define EPROM_CS_SHIFT 3 +#define EPROM_CK_SHIFT 2 +#define EPROM_W_SHIFT 1 +#define EPROM_R_SHIFT 0 + +#define AFE_MBEN BIT1 +#define AFE_BGEN BIT0 + +#define SPS1_SWEN BIT1 +#define SPS1_LDEN BIT0 + +#define RF_EN BIT0 +#define RF_RSTB BIT1 +#define RF_SDMRSTB BIT2 + +#define LDA15_EN BIT0 + +#define LDV12_EN BIT0 +#define LDV12_SDBY BIT1 + +#define XTAL_GATE_AFE BIT10 + +#define APLL_EN BIT0 + +#define AFR_CardBEn BIT0 +#define AFR_CLKRUN_SEL BIT1 +#define AFR_FuncRegEn BIT2 + +#define APSDOFF_STATUS BIT15 +#define APSDOFF BIT14 +#define BBRSTn BIT13 +#define BB_GLB_RSTn BIT12 +#define SCHEDULE_EN BIT10 +#define MACRXEN BIT9 +#define MACTXEN BIT8 +#define DDMA_EN BIT7 +#define FW2HW_EN BIT6 +#define RXDMA_EN BIT5 +#define TXDMA_EN BIT4 +#define HCI_RXDMA_EN BIT3 +#define HCI_TXDMA_EN BIT2 + +#define StopHCCA BIT6 +#define StopHigh BIT5 +#define StopMgt BIT4 +#define StopVO BIT3 +#define StopVI BIT2 +#define StopBE BIT1 +#define StopBK BIT0 + +#define LBK_NORMAL 0x00 +#define LBK_MAC_LB (BIT0|BIT1|BIT3) +#define LBK_MAC_DLB (BIT0|BIT1) +#define LBK_DMA_LB (BIT0|BIT1|BIT2) + +#define TCP_OFDL_EN BIT25 +#define HWPC_TX_EN BIT24 +#define TXDMAPRE2FULL BIT23 +#define DISCW BIT20 +#define TCRICV BIT19 +#define CfendForm BIT17 +#define TCRCRC BIT16 +#define FAKE_IMEM_EN BIT15 +#define TSFRST BIT9 +#define TSFEN BIT8 +#define FWALLRDY (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7) +#define FWRDY BIT7 +#define BASECHG BIT6 +#define IMEM BIT5 +#define DMEM_CODE_DONE BIT4 +#define EXT_IMEM_CHK_RPT BIT3 +#define EXT_IMEM_CODE_DONE BIT2 +#define IMEM_CHK_RPT BIT1 +#define IMEM_CODE_DONE BIT0 +#define IMEM_CODE_DONE BIT0 +#define IMEM_CHK_RPT BIT1 +#define EMEM_CODE_DONE BIT2 +#define EMEM_CHK_RPT BIT3 +#define DMEM_CODE_DONE BIT4 +#define IMEM_RDY BIT5 +#define BASECHG BIT6 +#define FWRDY BIT7 +#define LOAD_FW_READY (IMEM_CODE_DONE|IMEM_CHK_RPT|EMEM_CODE_DONE|\ + EMEM_CHK_RPT|DMEM_CODE_DONE|IMEM_RDY|BASECHG|\ + FWRDY) +#define TCR_TSFEN BIT8 +#define TCR_TSFRST BIT9 +#define TCR_FAKE_IMEM_EN BIT15 +#define TCR_CRC BIT16 +#define TCR_ICV BIT19 +#define TCR_DISCW BIT20 +#define TCR_HWPC_TX_EN BIT24 +#define TCR_TCP_OFDL_EN BIT25 +#define TXDMA_INIT_VALUE (IMEM_CHK_RPT|EXT_IMEM_CHK_RPT) + +#define RCR_APPFCS BIT31 +#define RCR_DIS_ENC_2BYTE BIT30 +#define RCR_DIS_AES_2BYTE BIT29 +#define RCR_HTC_LOC_CTRL BIT28 +#define RCR_ENMBID BIT27 +#define RCR_RX_TCPOFDL_EN BIT26 +#define RCR_APP_PHYST_RXFF BIT25 +#define RCR_APP_PHYST_STAFF BIT24 +#define RCR_CBSSID BIT23 +#define RCR_APWRMGT BIT22 +#define RCR_ADD3 BIT21 +#define RCR_AMF BIT20 +#define RCR_ACF BIT19 +#define RCR_ADF BIT18 +#define RCR_APP_MIC BIT17 +#define RCR_APP_ICV BIT16 +#define RCR_RXFTH BIT13 +#define RCR_AICV BIT12 +#define RCR_RXDESC_LK_EN BIT11 +#define RCR_APP_BA_SSN BIT6 +#define RCR_ACRC32 BIT5 +#define RCR_RXSHFT_EN BIT4 +#define RCR_AB BIT3 +#define RCR_AM BIT2 +#define RCR_APM BIT1 +#define RCR_AAP BIT0 +#define RCR_MXDMA_OFFSET 8 +#define RCR_FIFO_OFFSET 13 + +/* +Network Type +00: No link +01: Link in ad hoc network +10: Link in infrastructure network +11: AP mode +Default: 00b. +*/ +#define MSR_LINK_MASK ((1<<0)|(1<<1)) +#define MSR_LINK_MANAGED 2 +#define MSR_LINK_NONE 0 +#define MSR_LINK_SHIFT 0 +#define MSR_LINK_ADHOC 1 +#define MSR_LINK_MASTER 3 +#if 1 +#define MSR_NOLINK 0x00 +#define MSR_ADHOC 0x01 +#define MSR_INFRA 0x02 +#define MSR_AP 0x03 +#endif +#define ENUART BIT7 +#define ENJTAG BIT3 +#define BTMODE (BIT2|BIT1) +#define ENBT BIT0 + +#define ENMBID BIT7 +#define BCNUM (BIT6|BIT5|BIT4) + + +#define USTIME_EDCA 0xFF00 +#define USTIME_TSF 0x00FF + +#define SIFS_TRX 0xFF00 +#define SIFS_CTX 0x00FF + +#define ENSWBCN BIT15 +#define DRVERLY_TU 0x0FF0 +#define DRVERLY_US 0x000F +#define BCN_TCFG_CW_SHIFT 8 +#define BCN_TCFG_IFS 0 + + +#define RRSR_RSC_OFFSET 21 +#define RRSR_SHORT_OFFSET 23 +#define RRSR_RSC_BW_40M 0x600000 +#define RRSR_RSC_UPSUBCHNL 0x400000 +#define RRSR_RSC_LOWSUBCHNL 0x200000 +#define RRSR_SHORT 0x800000 +#define RRSR_1M BIT0 +#define RRSR_2M BIT1 +#define RRSR_5_5M BIT2 +#define RRSR_11M BIT3 +#define RRSR_6M BIT4 +#define RRSR_9M BIT5 +#define RRSR_12M BIT6 +#define RRSR_18M BIT7 +#define RRSR_24M BIT8 +#define RRSR_36M BIT9 +#define RRSR_48M BIT10 +#define RRSR_54M BIT11 +#define RRSR_MCS0 BIT12 +#define RRSR_MCS1 BIT13 +#define RRSR_MCS2 BIT14 +#define RRSR_MCS3 BIT15 +#define RRSR_MCS4 BIT16 +#define RRSR_MCS5 BIT17 +#define RRSR_MCS6 BIT18 +#define RRSR_MCS7 BIT19 +#define BRSR_AckShortPmb BIT23 + +#define RATR_1M 0x00000001 +#define RATR_2M 0x00000002 +#define RATR_55M 0x00000004 +#define RATR_11M 0x00000008 +#define RATR_6M 0x00000010 +#define RATR_9M 0x00000020 +#define RATR_12M 0x00000040 +#define RATR_18M 0x00000080 +#define RATR_24M 0x00000100 +#define RATR_36M 0x00000200 +#define RATR_48M 0x00000400 +#define RATR_54M 0x00000800 +#define RATR_MCS0 0x00001000 +#define RATR_MCS1 0x00002000 +#define RATR_MCS2 0x00004000 +#define RATR_MCS3 0x00008000 +#define RATR_MCS4 0x00010000 +#define RATR_MCS5 0x00020000 +#define RATR_MCS6 0x00040000 +#define RATR_MCS7 0x00080000 +#define RATR_MCS8 0x00100000 +#define RATR_MCS9 0x00200000 +#define RATR_MCS10 0x00400000 +#define RATR_MCS11 0x00800000 +#define RATR_MCS12 0x01000000 +#define RATR_MCS13 0x02000000 +#define RATR_MCS14 0x04000000 +#define RATR_MCS15 0x08000000 +#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M +#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\ + RATR_36M|RATR_48M|RATR_54M +#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\ + RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7 +#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\ + RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15 + +#define AC_PARAM_TXOP_LIMIT_OFFSET 16 +#define AC_PARAM_ECW_MAX_OFFSET 12 +#define AC_PARAM_ECW_MIN_OFFSET 8 +#define AC_PARAM_AIFS_OFFSET 0 + +#define AcmHw_HwEn BIT0 +#define AcmHw_BeqEn BIT1 +#define AcmHw_ViqEn BIT2 +#define AcmHw_VoqEn BIT3 +#define AcmHw_BeqStatus BIT4 +#define AcmHw_ViqStatus BIT5 +#define AcmHw_VoqStatus BIT6 + +#define RETRY_LIMIT_SHORT_SHIFT 8 +#define RETRY_LIMIT_LONG_SHIFT 0 + +#define NAV_UPPER_EN BIT16 +#define NAV_UPPER 0xFF00 +#define NAV_RTSRST 0xFF +#define BW_OPMODE_20MHZ BIT2 +#define BW_OPMODE_5G BIT1 +#define BW_OPMODE_11J BIT0 + +#define RXERR_RPT_RST BIT27 +#define RXERR_OFDM_PPDU 0 +#define RXERR_OFDM_FALSE_ALARM 1 +#define RXERR_OFDM_MPDU_OK 2 +#define RXERR_OFDM_MPDU_FAIL 3 +#define RXERR_CCK_PPDU 4 +#define RXERR_CCK_FALSE_ALARM 5 +#define RXERR_CCK_MPDU_OK 6 +#define RXERR_CCK_MPDU_FAIL 7 +#define RXERR_HT_PPDU 8 +#define RXERR_HT_FALSE_ALARM 9 +#define RXERR_HT_MPDU_TOTAL 10 +#define RXERR_HT_MPDU_OK 11 +#define RXERR_HT_MPDU_FAIL 12 +#define RXERR_RX_FULL_DROP 15 + + +#define CAM_CM_SecCAMPolling BIT31 +#define CAM_CM_SecCAMClr BIT30 +#define CAM_CM_SecCAMWE BIT16 +#define CAM_ADDR 0xFF + +#define Dbg_CAM_TXSecCAMInfo BIT31 +#define Dbg_CAM_SecKeyFound BIT30 + + +#define SCR_TxUseDK BIT0 +#define SCR_RxUseDK BIT1 +#define SCR_TxEncEnable BIT2 +#define SCR_RxDecEnable BIT3 +#define SCR_SKByA2 BIT4 +#define SCR_NoSKMC BIT5 +#define CAM_VALID BIT15 +#define CAM_NOTVALID 0x0000 +#define CAM_USEDK BIT5 + +#define CAM_NONE 0x0 +#define CAM_WEP40 0x01 +#define CAM_TKIP 0x02 +#define CAM_AES 0x04 +#define CAM_WEP104 0x05 + +#define TOTAL_CAM_ENTRY 32 +#define HALF_CAM_ENTRY 16 + +#define CAM_CONFIG_USEDK true +#define CAM_CONFIG_NO_USEDK false + +#define CAM_WRITE BIT16 +#define CAM_READ 0x00000000 +#define CAM_POLLINIG BIT31 + +#define SCR_UseDK 0x01 +#define SCR_TxSecEnable 0x02 +#define SCR_RxSecEnable 0x04 + +#define WOW_PMEN BIT0 +#define WOW_WOMEN BIT1 +#define WOW_MAGIC BIT2 +#define WOW_UWF BIT3 + +#define GPIOMUX_EN BIT3 +#define GPIOSEL_GPIO 0 +#define GPIOSEL_PHYDBG 1 +#define GPIOSEL_BT 2 +#define GPIOSEL_WLANDBG 3 +#define GPIOSEL_GPIO_MASK ~(BIT0|BIT1) + +#define HST_RDBUSY BIT0 +#define CPU_WTBUSY BIT1 + +#define IMR8190_DISABLED 0x0 +#define IMR_CPUERR BIT5 +#define IMR_ATIMEND BIT4 +#define IMR_TBDOK BIT3 +#define IMR_TBDER BIT2 +#define IMR_BCNDMAINT8 BIT1 +#define IMR_BCNDMAINT7 BIT0 +#define IMR_BCNDMAINT6 BIT31 +#define IMR_BCNDMAINT5 BIT30 +#define IMR_BCNDMAINT4 BIT29 +#define IMR_BCNDMAINT3 BIT28 +#define IMR_BCNDMAINT2 BIT27 +#define IMR_BCNDMAINT1 BIT26 +#define IMR_BCNDOK8 BIT25 +#define IMR_BCNDOK7 BIT24 +#define IMR_BCNDOK6 BIT23 +#define IMR_BCNDOK5 BIT22 +#define IMR_BCNDOK4 BIT21 +#define IMR_BCNDOK3 BIT20 +#define IMR_BCNDOK2 BIT19 +#define IMR_BCNDOK1 BIT18 +#define IMR_TIMEOUT2 BIT17 +#define IMR_TIMEOUT1 BIT16 +#define IMR_TXFOVW BIT15 +#define IMR_PSTIMEOUT BIT14 +#define IMR_BcnInt BIT13 +#define IMR_RXFOVW BIT12 +#define IMR_RDU BIT11 +#define IMR_RXCMDOK BIT10 +#define IMR_BDOK BIT9 +#define IMR_HIGHDOK BIT8 +#define IMR_COMDOK BIT7 +#define IMR_MGNTDOK BIT6 +#define IMR_HCCADOK BIT5 +#define IMR_BKDOK BIT4 +#define IMR_BEDOK BIT3 +#define IMR_VIDOK BIT2 +#define IMR_VODOK BIT1 +#define IMR_ROK BIT0 + + +#define TPPoll_BKQ BIT0 +#define TPPoll_BEQ BIT1 +#define TPPoll_VIQ BIT2 +#define TPPoll_VOQ BIT3 +#define TPPoll_BQ BIT4 +#define TPPoll_CQ BIT5 +#define TPPoll_MQ BIT6 +#define TPPoll_HQ BIT7 +#define TPPoll_HCCAQ BIT8 +#define TPPoll_StopBK BIT9 +#define TPPoll_StopBE BIT10 +#define TPPoll_StopVI BIT11 +#define TPPoll_StopVO BIT12 +#define TPPoll_StopMgt BIT13 +#define TPPoll_StopHigh BIT14 +#define TPPoll_StopHCCA BIT15 +#define TPPoll_SHIFT 8 + +#define MXDMA2_16bytes 0x000 +#define MXDMA2_32bytes 0x001 +#define MXDMA2_64bytes 0x010 +#define MXDMA2_128bytes 0x011 +#define MXDMA2_256bytes 0x100 +#define MXDMA2_512bytes 0x101 +#define MXDMA2_1024bytes 0x110 +#define MXDMA2_NoLimit 0x7 + +#define MULRW_SHIFT 3 +#define MXDMA2_RX_SHIFT 4 +#define MXDMA2_TX_SHIFT 0 + +#define CCX_CMD_CLM_ENABLE BIT0 +#define CCX_CMD_NHM_ENABLE BIT1 +#define CCX_CMD_FUNCTION_ENABLE BIT8 +#define CCX_CMD_IGNORE_CCA BIT9 +#define CCX_CMD_IGNORE_TXON BIT10 +#define CCX_CLM_RESULT_READY BIT16 +#define CCX_NHM_RESULT_READY BIT16 +#define CCX_CMD_RESET 0x0 + + +#define HWSET_MAX_SIZE_92S 128 + + + +#ifdef RTL8192SE +#define RTL8190_EEPROM_ID 0x8129 +#define EEPROM_HPON 0x02 +#define EEPROM_CLK 0x06 +#define EEPROM_TESTR 0x08 + +#define EEPROM_VID 0x0A +#define EEPROM_DID 0x0C +#define EEPROM_SVID 0x0E +#define EEPROM_SMID 0x10 + +#define EEPROM_MAC_ADDR 0x12 +#define EEPROM_NODE_ADDRESS_BYTE_0 0x12 + +#define EEPROM_PwDiff 0x54 + +#define EEPROM_TxPowerBase 0x50 +#define EEPROM_TX_PWR_INDEX_RANGE 28 + +#define EEPROM_TX_PWR_HT20_DIFF 0x62 +#define DEFAULT_HT20_TXPWR_DIFF 2 +#define EEPROM_TX_PWR_OFDM_DIFF 0x65 + +#define EEPROM_TxPWRGroup 0x67 +#define EEPROM_Regulatory 0x6D + +#define TX_PWR_SAFETY_CHK 0x6D +#define EEPROM_TxPwIndex_CCK_24G 0x5D +#define EEPROM_TxPwIndex_OFDM_24G 0x6B +#define EEPROM_HT2T_CH1_A 0x6c +#define EEPROM_HT2T_CH7_A 0x6d +#define EEPROM_HT2T_CH13_A 0x6e +#define EEPROM_HT2T_CH1_B 0x6f +#define EEPROM_HT2T_CH7_B 0x70 +#define EEPROM_HT2T_CH13_B 0x71 +#define EEPROM_TSSI_A 0x74 +#define EEPROM_TSSI_B 0x75 +#define EEPROM_RFInd_PowerDiff 0x76 +#define EEPROM_Default_LegacyHTTxPowerDiff 0x3 +#define EEPROM_ThermalMeter 0x77 +#define EEPROM_BLUETOOTH_COEXIST 0x78 +#define EEPROM_BLUETOOTH_TYPE 0x4f + +#define EEPROM_Optional 0x78 +#ifdef RTL8192S_WAPI_SUPPORT +#define EEPROM_WAPI_SUPPORT 0x78 +#endif +#define EEPROM_WoWLAN 0x78 + +#define EEPROM_CrystalCap 0x79 +#define EEPROM_ChannelPlan 0x7B +#define EEPROM_Version 0x7C +#define EEPROM_CustomID 0x7A +#define EEPROM_BoardType 0x7E + +#define EEPROM_Default_TSSI 0x0 +#define EEPROM_Default_TxPowerDiff 0x0 +#define EEPROM_Default_CrystalCap 0x5 +#define EEPROM_Default_BoardType 0x02 +#define EEPROM_Default_TxPower 0x1010 +#define EEPROM_Default_HT2T_TxPwr 0x10 + +#define EEPROM_Default_LegacyHTTxPowerDiff 0x3 +#define EEPROM_Default_ThermalMeter 0x12 +#define EEPROM_Default_BlueToothCoexist 0x0 +#define EEPROM_Default_BlueToothAntNum 0x0 +#define EEPROM_Default_BlueToothAntIso 0x0 +#define EEPROM_Default_BlueToothType 0x0 +#define EEPROM_Default_AntTxPowerDiff 0x0 +#define EEPROM_Default_TxPwDiff_CrystalCap 0x5 +#define EEPROM_Default_TxPowerLevel 0x22 + +#define EEPROM_CHANNEL_PLAN_FCC 0x0 +#define EEPROM_CHANNEL_PLAN_IC 0x1 +#define EEPROM_CHANNEL_PLAN_ETSI 0x2 +#define EEPROM_CHANNEL_PLAN_SPAIN 0x3 +#define EEPROM_CHANNEL_PLAN_FRANCE 0x4 +#define EEPROM_CHANNEL_PLAN_MKK 0x5 +#define EEPROM_CHANNEL_PLAN_MKK1 0x6 +#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7 +#define EEPROM_CHANNEL_PLAN_TELEC 0x8 +#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9 +#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA +#define EEPROM_CHANNEL_PLAN_NCC 0xB +#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80 + + +#define EEPROM_CID_DEFAULT 0x0 +#define EEPROM_CID_TOSHIBA 0x4 +#define EEPROM_CID_CCX 0x10 +#define EEPROM_CID_QMI 0x0D +#define EEPROM_CID_WHQL 0xFE + +#else +#define RTL8190_EEPROM_ID 0x8129 +#define EEPROM_HPON 0x02 +#define EEPROM_VID 0x08 +#define EEPROM_PID 0x0A +#define EEPROM_USB_OPTIONAL 0x0C +#define EEPROM_USB_PHY_PARA1 0x0D +#define EEPROM_NODE_ADDRESS_BYTE_0 0x12 +#define EEPROM_Version 0x50 +#define EEPROM_ChannelPlan 0x51 +#define EEPROM_CustomID 0x52 +#define EEPROM_SubCustomID 0x53 + +#if (EEPROM_OLD_FORMAT_SUPPORT ==1) +#define EEPROM_PwDiff 0x54 +#define EEPROM_ThermalMeter 0x55 +#define EEPROM_Reserved 0x56 +#define EEPROM_CrystalCap 0x57 +#define EEPROM_TxPowerBase 0x58 +#define EEPROM_TxPwIndex_CCK_24G 0x59 +#define EEPROM_TxPwIndex_OFDM_24G 0x67 +#define EEPROM_TSSI_A 0x75 +#define EEPROM_TSSI_B 0x76 +#define EEPROM_TxPwTkMode 0x77 +#define EEPROM_HT2T_CH1_A 0x78 +#define EEPROM_HT2T_CH7_A 0x79 +#define EEPROM_HT2T_CH13_A 0x7a +#define EEPROM_HT2T_CH1_B 0x7b +#define EEPROM_HT2T_CH7_B 0x7c +#define EEPROM_HT2T_CH13_B 0x7d +#define EEPROM_BoardType 0x7e +#else +#define EEPROM_BoardType 0x54 +#define EEPROM_TxPwIndex 0x55 +#define EEPROM_PwDiff 0x67 +#define EEPROM_ThermalMeter 0x68 +#define EEPROM_CrystalCap 0x69 +#define EEPROM_TxPowerBase 0x6a +#define EEPROM_TSSI_A 0x6b +#define EEPROM_TSSI_B 0x6c +#define EEPROM_TxPwTkMode 0x6d + +#define EEPROM_TX_PWR_HT20_DIFF 0x6e +#define DEFAULT_HT20_TXPWR_DIFF 2 +#define EEPROM_TX_PWR_OFDM_DIFF 0x71 +#define TX_PWR_SAFETY_CHK 0x79 +#endif +#define EEPROM_USB_Default_OPTIONAL_FUNC 0x8 +#define EEPROM_USB_Default_PHY_PARAM 0x0 +#define EEPROM_Default_TSSI 0x0 +#define EEPROM_Default_TxPwrTkMode 0x0 +#define EEPROM_Default_TxPowerDiff 0x0 +#define EEPROM_Default_TxPowerBase 0x0 +#define EEPROM_Default_ThermalMeter 0x7 +#define EEPROM_Default_PwDiff 0x4 +#define EEPROM_Default_CrystalCap 0x5 +#define EEPROM_Default_TxPower 0x1010 +#define EEPROM_Default_BoardType 0x02 +#define EEPROM_Default_HT2T_TxPwr 0x10 +#define EEPROM_USB_SN BIT0 +#define EEPROM_USB_REMOTE_WAKEUP BIT1 +#define EEPROM_USB_DEVICE_PWR BIT2 +#define EEPROM_EP_NUMBER (BIT3|BIT4) + + +#define EEPROM_CHANNEL_PLAN_FCC 0x0 +#define EEPROM_CHANNEL_PLAN_IC 0x1 +#define EEPROM_CHANNEL_PLAN_ETSI 0x2 +#define EEPROM_CHANNEL_PLAN_SPAIN 0x3 +#define EEPROM_CHANNEL_PLAN_FRANCE 0x4 +#define EEPROM_CHANNEL_PLAN_MKK 0x5 +#define EEPROM_CHANNEL_PLAN_MKK1 0x6 +#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7 +#define EEPROM_CHANNEL_PLAN_TELEC 0x8 +#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9 +#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA +#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80 + +#define EEPROM_CID_DEFAULT 0x0 +#define EEPROM_CID_ALPHA 0x1 +#define EEPROM_CID_TOSHIBA 0x4 +#define EEPROM_CID_WHQL 0xFE +#endif + + +#define FW_DIG_DISABLE 0xfd00cc00 +#define FW_DIG_ENABLE 0xfd000000 +#define FW_DIG_HALT 0xfd000001 +#define FW_DIG_RESUME 0xfd000002 +#define FW_HIGH_PWR_DISABLE 0xfd000008 +#define FW_HIGH_PWR_ENABLE 0xfd000009 +#define FW_ADD_A2_ENTRY 0xfd000016 +#define FW_TXPWR_TRACK_ENABLE 0xfd000017 +#define FW_TXPWR_TRACK_DISABLE 0xfd000018 +#define FW_TXPWR_TRACK_THERMAL 0xfd000019 +#define FW_TXANT_SWITCH_ENABLE 0xfd000023 +#define FW_TXANT_SWITCH_DISABLE 0xfd000024 +#define FW_RA_INIT 0xfd000026 +#define FW_CTRL_DM_BY_DRIVER 0Xfd00002a +#define FW_RA_IOT_BG_COMB 0xfd000030 +#define FW_RA_IOT_N_COMB 0xfd000031 +#define FW_RA_REFRESH 0xfd0000a0 +#define FW_RA_UPDATE_MASK 0xfd0000a2 +#define FW_RA_DISABLE 0xfd0000a4 +#define FW_RA_ACTIVE 0xfd0000a6 +#define FW_RA_DISABLE_RSSI_MASK 0xfd0000ac +#define FW_RA_ENABLE_RSSI_MASK 0xfd0000ad +#define FW_RA_RESET 0xfd0000af +#define FW_DM_DISABLE 0xfd00aa00 +#define FW_IQK_ENABLE 0xf0000020 +#define FW_IQK_SUCCESS 0x0000dddd +#define FW_IQK_FAIL 0x0000ffff +#define FW_OP_FAILURE 0xffffffff +#define FW_TX_FEEDBACK_NONE 0xfb000000 +#define FW_TX_FEEDBACK_DTM_ENABLE (FW_TX_FEEDBACK_NONE | 0x1) +#define FW_TX_FEEDBACK_CCX_ENABLE (FW_TX_FEEDBACK_NONE | 0x2) +#define FW_BB_RESET_ENABLE 0xff00000d +#define FW_BB_RESET_DISABLE 0xff00000e +#define FW_LPS_ENTER 0xfe000010 +#define FW_LPS_LEAVE 0xfe000011 +#define FW_INDIRECT_READ 0xf2000000 +#define FW_INDIRECT_WRITE 0xf2000001 +#define FW_CHAN_SET 0xf3000001 + + + + + + + +#define RFPC 0x5F +#define RCR_9356SEL BIT6 +#define TCR_LRL_OFFSET 0 +#define TCR_SRL_OFFSET 8 +#define TCR_MXDMA_OFFSET 21 +#define TCR_SAT BIT24 +#define RCR_MXDMA_OFFSET 8 +#define RCR_FIFO_OFFSET 13 +#define RCR_OnlyErlPkt BIT31 +#define CWR 0xDC +#define RetryCTR 0xDE + + +#define LED1Cfg UnusedRegister +#define LED0Cfg UnusedRegister +#define GPI UnusedRegister +#define BRSR UnusedRegister +#define CPU_GEN UnusedRegister +#define SIFS UnusedRegister + +#define CPU_GEN_SYSTEM_RESET 0x00000001 + + + + +#define CCX_COMMAND_REG 0x890 +#define CLM_PERIOD_REG 0x894 +#define NHM_PERIOD_REG 0x896 +#define NHM_THRESHOLD0 0x898 +#define NHM_THRESHOLD1 0x899 +#define NHM_THRESHOLD2 0x89A +#define NHM_THRESHOLD3 0x89B +#define NHM_THRESHOLD4 0x89C +#define NHM_THRESHOLD5 0x89D +#define NHM_THRESHOLD6 0x89E +#define CLM_RESULT_REG 0x8D0 +#define NHM_RESULT_REG 0x8D4 +#define NHM_RPI_COUNTER0 0x8D8 +#define NHM_RPI_COUNTER1 0x8D9 +#define NHM_RPI_COUNTER2 0x8DA +#define NHM_RPI_COUNTER3 0x8DB +#define NHM_RPI_COUNTER4 0x8DC +#define NHM_RPI_COUNTER5 0x8DD +#define NHM_RPI_COUNTER6 0x8DE +#define NHM_RPI_COUNTER7 0x8DF + + +#define HAL_8192S_HW_GPIO_OFF_BIT BIT3 +#define HAL_8192S_HW_GPIO_OFF_MASK 0xF7 +#define HAL_8192S_HW_GPIO_WPS_BIT BIT4 + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_hwimg.h @@ -0,0 +1,42 @@ +#ifndef __INC_HAL8192SE_FW_IMG_H +#define __INC_HAL8192SE_FW_IMG_H + +/*Created on 2010/ 2/24, 2:32*/ + +#include +#define ImgArrayLength 80976 +extern u8 Rtl8192SEFwImgArray[ImgArrayLength]; +#define MainArrayLength 1 +extern u8 Rtl8192SEFwMainArray[MainArrayLength]; +#define DataArrayLength 1 +extern u8 Rtl8192SEFwDataArray[DataArrayLength]; +#define PHY_REG_2T2RArrayLength 372 +extern u32 Rtl8192SEPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength]; +#define PHY_REG_1T2RArrayLength 1 +extern u32 Rtl8192SEPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength]; +#define PHY_ChangeTo_1T1RArrayLength 48 +extern u32 Rtl8192SEPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength]; +#define PHY_ChangeTo_1T2RArrayLength 45 +extern u32 Rtl8192SEPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength]; +#define PHY_ChangeTo_2T2RArrayLength 45 +extern u32 Rtl8192SEPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength]; +#define PHY_REG_Array_PGLength 84 +extern u32 Rtl8192SEPHY_REG_Array_PG[PHY_REG_Array_PGLength]; +#define RadioA_1T_ArrayLength 202 +extern u32 Rtl8192SERadioA_1T_Array[RadioA_1T_ArrayLength]; +#define RadioB_ArrayLength 22 +extern u32 Rtl8192SERadioB_Array[RadioB_ArrayLength]; +#define RadioA_to1T_ArrayLength 196 +extern u32 Rtl8192SERadioA_to1T_Array[RadioA_to1T_ArrayLength]; +#define RadioA_to2T_ArrayLength 196 +extern u32 Rtl8192SERadioA_to2T_Array[RadioA_to2T_ArrayLength]; +#define RadioB_GM_ArrayLength 10 +extern u32 Rtl8192SERadioB_GM_Array[RadioB_GM_ArrayLength]; +#define MAC_2T_ArrayLength 106 +extern u32 Rtl8192SEMAC_2T_Array[MAC_2T_ArrayLength]; +#define MACPHY_Array_PGLength 1 +extern u32 Rtl8192SEMACPHY_Array_PG[MACPHY_Array_PGLength]; +#define AGCTAB_ArrayLength 320 +extern u32 Rtl8192SEAGCTAB_Array[AGCTAB_ArrayLength]; + +#endif //__INC_HAL8192SE_FW_IMG_H --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/Makefile +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/Makefile @@ -0,0 +1,10 @@ +.PHONY:clean +clean: + rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~ + rm -fr .tmp_versions + rm -fr Modules.symvers + rm -fr Module.symvers + rm -fr Module.markers + rm -fr modules.order + rm -fr tags + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_mp.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_mp.c @@ -0,0 +1,1256 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifdef CONFIG_MP +#include "../rtl_core.h" +#include "r8192S_phy.h" +#include "r8192S_phyreg.h" +#include "r8192S_mp.h" + +void rtl8192_init_mp(struct net_device* dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + priv->chan_forced = false; + + priv->bSingleCarrier = false; + priv->RegBoard = 0; + priv->bCckContTx = false; + priv->bOfdmContTx = false; + priv->bStartContTx = false; + priv->RegPaModel = 0; + priv->btMpCckTxPower = 0; + priv->btMpOfdmTxPower = 0; +} + +static bool r8192_MgntIsRateValidForWirelessMode(u8 rate, u8 wirelessmode) +{ + bool bReturn = false; + + switch(wirelessmode) + { + case WIRELESS_MODE_A: + case WIRELESS_MODE_N_5G: + if((rate >= 12) && (rate <= 108) && (rate != 22) && (rate != 44)) + { + bReturn = true; + } + break; + + case WIRELESS_MODE_B: + if( ((rate <= 22) && (rate != 12) && (rate != 18)) || + (rate == 44) ) + { + bReturn = true; + } + break; + + case WIRELESS_MODE_G: + case WIRELESS_MODE_G | WIRELESS_MODE_B: + case WIRELESS_MODE_N_24G: + if((rate >= 2) && (rate <= 108)) + { + bReturn = true; + } + break; + + case WIRELESS_MODE_AUTO: + printk("MgntIsRateValidForWirelessMode(): wirelessmode should not be WIRELESS_MODE_AUTO\n"); + break; + + default: + printk("MgntIsRateValidForWirelessMode(): Unknown wirelessmode: %d\n", wirelessmode); + break; + } + + if(!bReturn) + { + if(wirelessmode&(WIRELESS_MODE_N_24G|WIRELESS_MODE_N_5G)) + { + if((rate>=0x80) && (rate<=MGN_MCS15_SG)) + bReturn = true; + } + } + return bReturn; +} + +inline u8 r8192_is_wireless_b_mode(u16 rate) +{ + if( ((rate <= 110) && (rate != 60) && (rate != 90)) || (rate == 220) ) + return 1; + else return 0; +} + +static void r8192_XmitOnePacket(struct net_device* dev) +{ + struct r8192_priv* priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + struct sk_buff* skb = rtllib_get_beacon(ieee); + + if (unlikely(!skb)){ + printk("========>error alloc skb\n"); + return; + } + + priv->rtllib->softmac_data_hard_start_xmit(skb, dev, ieee->rate); +} + +int r8192_wx_mp_set_chan(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + int ret = -1; + u8 channel; + + down(&priv->wx_sem); + + channel = *extra; + + rtllib_stop_scan(ieee); + + printk("####RTL819X MP####set channel[1-11] %d\n",channel); + + if((channel > 11) || (channel < 1)) { + up(&priv->wx_sem); + return ret; + } + + priv->rtllib->current_network.channel = channel; + priv->MptChannelToSw = channel; + + priv->chan_forced = false; + MPT_ProSwChannel(dev); + priv->chan_forced = true; + + ret = 0; + up(&priv->wx_sem); + + return ret; + +} + +int r8192_wx_mp_set_txrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device* ieee = priv->rtllib; + int ret = -1; + u32 data_rate_index = 0; + + down(&priv->wx_sem); + + data_rate_index = *extra; + + printk("####RTL819X MP####set tx rate index %d\n",data_rate_index); + + priv->MptRateIndex = data_rate_index; + + if((data_rate_index > 27) || (data_rate_index < 0)) { + up(&priv->wx_sem); + return ret; + } else if(data_rate_index <= 3) { + ieee->mode = WIRELESS_MODE_B; + } else if (data_rate_index <= 11) { + ieee->mode = WIRELESS_MODE_G; + } else { + ieee->mode = WIRELESS_MODE_N_24G; + } + + MPT_ProSetDataRate819x(dev); + + printk("####RTL819X MP####set tx rate %d\n",ieee->rate); + + ret = 0; + up(&priv->wx_sem); + + return ret; +} + +int r8192_wx_mp_set_txpower(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret = -1; + u8 power_index = 0; + + down(&priv->wx_sem); + + power_index = *extra; + + printk("####RTL819X MP####set tx power index %d\n",power_index); + + if((power_index > 0x3F) || (power_index < 0x00)) { + up(&priv->wx_sem); + return ret; + } + + mpt_ProSetTxPower(dev, power_index); + + ret = 0; + up(&priv->wx_sem); + + return ret; + +} + +int r8192_wx_mp_set_bw(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + int ret = -1; + u8 bw_index = 0; + + down(&priv->wx_sem); + + bw_index = *extra; + + printk("####RTL819X MP####set bandwith index %d [0: 20MHz 1: 40MHz]\n",bw_index); + + priv->MptBandWidth = bw_index; + +#if 0 + if((bw_index > 1) || (bw_index < 0)) { + up(&priv->wx_sem); + return ret; + } else if(bw_index == 1) { + HTSetConnectBwMode(priv->rtllib, HT_CHANNEL_WIDTH_20_40, + (priv->rtllib->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + } else { + HTSetConnectBwMode(priv->rtllib, HT_CHANNEL_WIDTH_20, + (priv->rtllib->current_network.channel<=6)?HT_EXTCHNL_OFFSET_UPPER:HT_EXTCHNL_OFFSET_LOWER); + } +#else + MPT_ProSetBandWidth819x(dev); +#endif + + ret = 0; + up(&priv->wx_sem); + + return ret; + +} + + + +int r8192_wx_mp_set_txstart(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + int ret = -1; + u8 start_flag = 0; + + down(&priv->wx_sem); + + start_flag = *extra; + + if(start_flag == 1) { + if (priv->bCckContTx || priv->bOfdmContTx) { + printk("####RTL819X MP####continious Tx is undergoing, please close it first\n"); + ret = -EBUSY; + up(&priv->wx_sem); + return ret; + } + + if(r8192_is_wireless_b_mode(ieee->rate)) { + printk("####RTL819X MP####start cck continious TX, rate:%d\n", ieee->rate); + mpt_StartCckContTx(dev, true); + r8192_XmitOnePacket(dev); + } else { + printk("####RTL819X MP####start ofdm continious TX, rate:%d\n", ieee->rate); + mpt_StartOfdmContTx(dev); + r8192_XmitOnePacket(dev); + } + } else if(start_flag == 2) { + bool bCckContTx = priv->bCckContTx; + bool bOfdmContTx = priv->bOfdmContTx; + + if(bCckContTx && !bOfdmContTx) { + printk("####RTL819X MP####stop cck continious TX\n"); + mpt_StopCckCoNtTx(dev); + } else if (!bCckContTx && bOfdmContTx) { + printk("####RTL819X MP####stop ofdm continious TX\n"); + mpt_StopOfdmContTx(dev); + } else if(!bCckContTx && !bOfdmContTx) { + ; + } else { + printk("####RTL819X MP#### Unexpected case! bCckContTx: %d , bOfdmContTx: %d\n", + bCckContTx, bOfdmContTx); +} + } else { + ret = -1; + up(&priv->wx_sem); + return ret; + } + + + ret = 0; + up(&priv->wx_sem); + + return ret; + +} + +int r8192_wx_mp_set_singlecarrier(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + struct rtllib_device *ieee = priv->rtllib; + int ret = -1; + u8 start_flag = 0; + + if((ieee->rate > 108) || (ieee->rate < 12)) + printk("####RTL819X MP#### we did not do singlecarrier when rate not in [6M-54M] tmp, see StartTesting_SingleCarrierTx to get more\n"); + + down(&priv->wx_sem); + + start_flag = *extra; + + if(start_flag == 1){ + if (priv->bCckContTx || priv->bOfdmContTx || priv->bSingleCarrier){ + printk("####RTL819X MP#### single carrier continious Tx is undergoing, please close it first\n"); + ret = -EBUSY; + up(&priv->wx_sem); + return ret; + } + + printk("####RTL819X MP####start single carrier cck continious TX\n"); + mpt_StartOfdmContTx(dev); + r8192_XmitOnePacket(dev); + + } else if(start_flag == 2) { + if (priv->bCckContTx) { + printk("####RTL819X MP####stop single cck continious TX\n"); + mpt_StopCckCoNtTx(dev); + } + if (priv->bOfdmContTx) { + printk("####RTL819X MP####stop single ofdm continious TX\n"); + mpt_StopOfdmContTx(dev); + } + if (priv->bSingleCarrier) { + printk("####RTL819X MP####stop single carrier mode\n"); + MPT_ProSetSingleCarrier(dev, false); + } + } else { + ret = -1; + up(&priv->wx_sem); + + return ret; + } + + ret = 0; + up(&priv->wx_sem); + + return ret; + +} +int r8192_wx_mp_write_rf(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 ulIoType, INulRegOffset, INulRegValue; + u32 *info_buf = (u32*)(&wrqu->freq.m); + u32 ulRegOffset = info_buf[0]; + u32 ulRegValue = info_buf[1]; + u32 RF_PATH = info_buf[2]; + + down(&priv->wx_sem); + printk("####RTL819X MP####%s :ulRegOffset %x, ulRegValue %x, RF_PATH:%x\n", + __func__, ulRegOffset, ulRegValue, RF_PATH); + + ulIoType = MPT_WRITE_RF; + INulRegOffset = ulRegOffset & bRFRegOffsetMask; + INulRegValue = ulRegValue & bRFRegOffsetMask; + + + priv->MptIoOffset = INulRegOffset; + priv->MptIoValue = INulRegValue; + priv->MptRfPath = RF_PATH; + priv->MptActType = ulIoType; + + mpt_Pro819xIoCallback(dev); + + up(&priv->wx_sem); + return 0; + +} + +int r8192_wx_mp_write_mac(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 *info_buf = (u32*)(&wrqu->freq.m); + u32 ulRegOffset = info_buf[0]; + u32 ulRegValue = info_buf[1]; + u32 ulRegDataWidth = info_buf[2]; + u32 ulIoType = 0; + + down(&priv->wx_sem); + + printk("####RTL819X MP####%s :ulRegOffset %x, ulRegValue %x, ulRegDataWidth:%x\n", + __func__, ulRegOffset, ulRegValue, ulRegDataWidth); + + switch(ulRegDataWidth) + { + case 1: + ulIoType = MPT_WRITE_MAC_1BYTE; + break; + + case 2: + ulIoType = MPT_WRITE_MAC_2BYTE; + break; + case 4: + ulIoType = MPT_WRITE_MAC_4BYTE; + break; + default: + printk("####RTL819X MP####%s :error ulRegDataWidth:%x\n", __func__, ulRegDataWidth); + break; + } + + if(ulIoType != 0){ + priv->MptIoOffset = ulRegOffset; + priv->MptIoValue = ulRegValue; + priv->MptActType = ulIoType; + mpt_Pro819xIoCallback(dev); + } + + up(&priv->wx_sem); + + return 0; + +} + +/*----------------------------------------------------------------------------- + * Function: mpt_StartCckContTx() + * + * Overview: Start CCK Continuous Tx. + * + * Input: PADAPTER pAdapter + * BOOLEAN bScrambleOn + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +void mpt_StartCckContTx(struct net_device *dev,bool bScrambleOn) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u32 cckrate; + + if(!rtl8192_QueryBBReg(dev, rFPGA0_RFMOD, bCCKEn)) + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bCCKEn, bEnable); + + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable); + switch(priv->rtllib->rate) + { + case 2: + cckrate = 0; + break; + case 4: + cckrate = 1; + break; + case 11: + cckrate = 2; + break; + case 22: + cckrate = 3; + break; + default: + cckrate = 0; + break; + } + rtl8192_setBBreg(dev, rCCK0_System, bCCKTxRate, cckrate); + + rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, 0x2); + rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, 0x1); + + priv->bCckContTx = true; + priv->bOfdmContTx = false; + +} /* mpt_StartCckContTx */ + +/*----------------------------------------------------------------------------- + * Function: mpt_StartOfdmContTx() + * + * Overview: Start OFDM Continuous Tx. + * + * Input: PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +void mpt_StartOfdmContTx(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + if(!rtl8192_QueryBBReg(dev, rFPGA0_RFMOD, bOFDMEn)) + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, bEnable); + + rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, bDisable); + + rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, bEnable); + + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bEnable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable); + + priv->bCckContTx = false; + priv->bOfdmContTx = true; + +} /* mpt_StartOfdmContTx */ + +/*----------------------------------------------------------------------------- + * Function: mpt_StopCckCoNtTx() + * + * Overview: Stop CCK Continuous Tx. + * + * Input: PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +void mpt_StopCckCoNtTx(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + priv->bCckContTx = false; + priv->bOfdmContTx = false; + + rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, 0x0); + rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, 0x1); + + rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x0); + rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x1); + +} /* mpt_StopCckCoNtTx */ + +/*----------------------------------------------------------------------------- + * Function: mpt_StopOfdmContTx() + * + * Overview: Stop 818xB OFDM Continuous Tx. + * + * Input: PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +void mpt_StopOfdmContTx(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + priv->bCckContTx = false; + priv->bOfdmContTx = false; + + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable); + mdelay(10); + rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x0); + rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x1); + +} /* mpt_StopOfdmContTx */ + +/*----------------------------------------------------------------------------- + * Function: mpt_SwitchRfSetting92S + * + * Overview: Change RF Setting when we siwthc channel/rate/BW for 92S series MP. + * + * Input: IN PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 01/08/2009 MHC Suggestion from SD3 Willis for 92S series. + * 01/09/2009 MHC Add CCK modification for 40MHZ. Suggestion from SD3. + * + *---------------------------------------------------------------------------*/ + void mpt_SwitchRfSetting92S(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 ChannelToSw = priv->MptChannelToSw; + u32 ulRateIdx = priv->MptRateIndex; + u32 ulbandwidth = priv->MptBandWidth; + + if (ulbandwidth == BAND_20MHZ_MODE) + { + if (ChannelToSw == 1) + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0A8F4); + } + else if (ChannelToSw == 11) + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F5); + } + else + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F4); + } + } + else + { + if (ChannelToSw == 3) + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0A8F4); + } + else if (ChannelToSw == 9 || ChannelToSw == 10 || ChannelToSw == 11) + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F5); + } + else + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_IPA, 0xFFFFF, 0x0F8F4); + } + } + + + if (ulRateIdx < MPT_RATE_6M) + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_SYN_G2, 0xFFFFF, 0x04440); + else + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)0, RF_SYN_G2, 0xFFFFF, 0x0F200); +} + +/*----------------------------------------------------------------------------- + * Function: mpt_ProSetTxPower() + * + * Overview: Change Tx Power of current channel for + * OID_RT_PRO_SET_TX_POWER_CONTROL. + * + * Input: NONE + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +bool mpt_ProSetTxPower( struct net_device *dev, u32 ulTxPower) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 CurrChannel = priv->rtllib->current_network.channel; + bool bResult = true; + + CurrChannel = priv->MptChannelToSw; + + if(CurrChannel > 11 || CurrChannel < 1) + { + printk("mpt_ProSetTxPower(): CurrentChannel:%d is not valid\n", CurrChannel); + return false; + } + + if(ulTxPower > MAX_TX_PWR_INDEX_N_MODE) + { + printk("mpt_ProSetTxPower(): TxPWR:%d is invalid\n", ulTxPower); + return false; + } + + if( priv->MptRateIndex >= MPT_RATE_1M && + priv->MptRateIndex <= MPT_RATE_11M ) + { + priv->TxPowerLevelCCK[CurrChannel-1] = (u8)ulTxPower; + + priv->RfTxPwrLevelCck[0][CurrChannel-1] = (u8)ulTxPower; + } + else if(priv->MptRateIndex >= MPT_RATE_6M && + priv->MptRateIndex <= MPT_RATE_MCS15 ) + { + priv->TxPowerLevelOFDM24G[CurrChannel-1] = (u8)ulTxPower; + + priv->RfTxPwrLevelOfdm1T[0][CurrChannel-1] = (u8)ulTxPower; + priv->RfTxPwrLevelOfdm2T[0][CurrChannel-1] = (u8)ulTxPower; + } + + rtl8192_phy_setTxPower(dev,CurrChannel); + + return bResult; + +} /* mpt_ProSetTxPower */ + +/*----------------------------------------------------------------------------- + * Function: mpt_ProSetTxAGCOffset() + * + * Overview: Change Tx AGC Offset + * OID_RT_PRO_SET_TX_AGC_OFFSET. + * + * Input: NONE + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 08/09/2007 Cosa Create Version 0. + * + *---------------------------------------------------------------------------*/ +bool mpt_ProSetTxAGCOffset(struct net_device *dev, u32 ulTxAGCOffset) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + bool bResult = true; + u32 TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D; + + TxAGCOffset_B = (ulTxAGCOffset&0x000000ff); + TxAGCOffset_C = ((ulTxAGCOffset&0x0000ff00)>>8); + TxAGCOffset_D = ((ulTxAGCOffset&0x00ff0000)>>16); + + if( TxAGCOffset_B > TxAGC_Offset_neg1 || + TxAGCOffset_C > TxAGC_Offset_neg1 || + TxAGCOffset_D > TxAGC_Offset_neg1 ) + { + printk("mpt_ProSetTxAGCOffset(): TxAGCOffset:%d is invalid\n", ulTxAGCOffset); + return false; + } + + priv->AntennaTxPwDiff[0] = TxAGCOffset_B; + priv->AntennaTxPwDiff[1] = TxAGCOffset_C; + priv->AntennaTxPwDiff[2] = TxAGCOffset_D; + + MPT_ProSetTxAGCOffset(dev); + + return bResult; + +} /* mpt_ProSetTxPower */ + +/*----------------------------------------------------------------------------- + * Function: mpt_ProSetTxAGCOffset() + * + * Overview: Change Tx AGC Offset + * OID_RT_PRO_SET_TX_AGC_OFFSET. + * + * Input: NONE + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 08/09/2007 Cosa Create Version 0. + * + *---------------------------------------------------------------------------*/ +bool mpt_ProSetRxFilter(struct net_device *dev, u32 RCRMode) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + if(RCRMode == 1) + { + priv->MptRCR &= ~(RCR_AAP|RCR_AM|RCR_AB); + priv->MptRCR |= RCR_APM; + write_nic_dword(dev, RCR, priv->MptRCR); + } + else + { + priv->MptRCR |= (RCR_AAP|RCR_APM|RCR_AM|RCR_AB); + write_nic_dword(dev, RCR, priv->MptRCR); + } + + return 1; +} /* mpt_ProSetTxPower */ + +/*----------------------------------------------------------------------------- + * Function: mpt_ProSetModulation() + * + * Overview: Switch wireless mode for OID_RT_PRO_SET_MODULATION. + * + * Input: PADAPTER pAdapter + * ULONG ulWirelessMode + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +bool mpt_ProSetModulation(struct net_device *dev, u32 ulWirelessMode) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + WIRELESS_MODE WirelessMode; + bool bResult = false; + + switch(ulWirelessMode) + { + case WIRELESS_MODE_A: + WirelessMode = WIRELESS_MODE_A; + break; + + case WIRELESS_MODE_B: + WirelessMode = WIRELESS_MODE_B; + break; + + case WIRELESS_MODE_G: + case WIRELESS_MODE_G |WIRELESS_MODE_B: + WirelessMode = WIRELESS_MODE_G; + break; + + case WIRELESS_MODE_N_24G: + WirelessMode = WIRELESS_MODE_N_24G; + break; + + case WIRELESS_MODE_N_5G: + WirelessMode = WIRELESS_MODE_N_5G; + break; + + case WIRELESS_MODE_AUTO: + default: + bResult = false; + return bResult; + break; + } + + priv->rtllib->mode = WirelessMode; + priv->RegWirelessMode = WirelessMode; + rtl8192_SetWirelessMode(dev, priv->rtllib->mode); + HTUseDefaultSetting(priv->rtllib); + + + if (IS_HARDWARE_TYPE_8192SE(dev)) + { + mpt_SwitchRfSetting92S(dev); + } + + bResult = true; + + return bResult; + +} + +/*----------------------------------------------------------------------------- + * Function: mpt_Pro819xIoCallback() + * + * Overview: Callback function of a workitem for IO. + * + * Input: NONE + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * + *---------------------------------------------------------------------------*/ +void mpt_Pro819xIoCallback(struct net_device *dev) +{ + + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u32 MptActType = priv->MptActType; + + printk("####RTL819X MP####%s :ulRegOffset %x, ulRegValue %x, MptActType:%x, MptRfPath:%x\n", + __func__, priv->MptIoOffset, priv->MptIoValue, MptActType, priv->MptRfPath); + + switch(MptActType) + { + case MPT_WRITE_MAC_1BYTE: + write_nic_byte(dev, priv->MptIoOffset, (u8)(priv->MptIoValue)); + break; + + case MPT_WRITE_MAC_2BYTE: + write_nic_word(dev, priv->MptIoOffset, (u16)(priv->MptIoValue)); + break; + + case MPT_WRITE_MAC_4BYTE: + write_nic_dword(dev, priv->MptIoOffset, (u32)(priv->MptIoValue)); + break; + + case MPT_WRITE_RF: + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)priv->MptRfPath, + priv->MptIoOffset, bRFRegOffsetMask, priv->MptIoValue); + break; + + default: + break; + } +} + +void MPT_ProSetSingleCarrier(struct net_device *dev, bool ulMode) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + + if(ulMode == 1) { + priv->bSingleCarrier = true; + } else { + priv->bSingleCarrier = false; + } + + if(priv->bSingleCarrier) + { + if(!rtl8192_QueryBBReg(dev, rFPGA0_RFMOD, bOFDMEn)) + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bOFDMEn, bEnable); + + rtl8192_setBBreg(dev, rCCK0_System, bCCKBBMode, bDisable); + + rtl8192_setBBreg(dev, rCCK0_System, bCCKScramble, bEnable); + + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bEnable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable); + } + else + { + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMContinueTx, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); + rtl8192_setBBreg(dev, rOFDM1_LSTF, bOFDMSingleTone, bDisable); + mdelay(10); + rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x0); + rtl8192_setBBreg(dev, rPMAC_Reset, bBBResetB, 0x1); + } +} + +/*----------------------------------------------------------------------------- + * Function: MPT_ProSetBandWidth819x() + * + * Overview: None + * + * Input: PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 01/03/2007 Cosa Create Version 0. + * + *---------------------------------------------------------------------------*/ +void MPT_ProSetBandWidth819x(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + PRT_HIGH_THROUGHPUT pHTInfo = priv->rtllib->pHTInfo; + u32 ulbandwidth = priv->MptBandWidth; + + printk("##################MPT_ProSetBandWidth819x() is start. \n"); + /* 2007/06/07 MH Call normal driver API and set 40MHZ mode. */ + if (ulbandwidth == BAND_20MHZ_MODE) { + /* 20 MHZ sub-carrier mode --> dont care. */ + pHTInfo->bCurBW40MHz = false; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_EXT; + priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20, pHTInfo->CurSTAExtChnlOffset); + } else if (ulbandwidth == BAND_40MHZ_DUPLICATE_MODE) { + /* Sub-Carrier mode is defined in MAC data sheet chapter 12.3. */ + /* 40MHX sub-carrier mode --> duplicate. */ + pHTInfo->bCurBW40MHz = true; + pHTInfo->bCurTxBW40MHz = true; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_NO_DEF; + + priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset); + } else if (ulbandwidth == BAND_40MHZ_LOWER_MODE) { + /* 40MHX sub-carrier mode --> lower mode */ + pHTInfo->bCurBW40MHz = true; + pHTInfo->bCurTxBW40MHz = true; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_LOWER; + + /* Extention channel is lower. Current channel must > 3. */ + /*if (pMgntInfo->dot11CurrentChannelNumber < 3) + DbgPrint("Illegal Current_Chl=%d\r\n", pMgntInfo->dot11CurrentChannelNumber); + else + pAdapter->HalFunc.SwChnlByTimerHandler(pAdapter, pMgntInfo->dot11CurrentChannelNumber-2);*/ + + priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset); + } else if (ulbandwidth == BAND_40MHZ_UPPER_MODE) { + /* 40MHX sub-carrier mode --> upper mode */ + pHTInfo->bCurBW40MHz = true; + pHTInfo->bCurTxBW40MHz = true; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_UPPER; + + /* Extention channel is upper. Current channel must < 12. */ + /*if (pMgntInfo->dot11CurrentChannelNumber > 12) + DbgPrint("Illegal Current_Chl=%d", pMgntInfo->dot11CurrentChannelNumber); + else + pAdapter->HalFunc.SwChnlByTimerHandler(pAdapter, pMgntInfo->dot11CurrentChannelNumber+2);*/ + + priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset); + } else if (ulbandwidth == BAND_40MHZ_DONTCARE_MODE) { + /* 40MHX sub-carrier mode --> dont care mode */ + pHTInfo->bCurBW40MHz = true; + pHTInfo->bCurTxBW40MHz = true; + pHTInfo->CurSTAExtChnlOffset = HT_EXTCHNL_OFFSET_LOWER; + + priv->rtllib->SetBWModeHandler(dev, HT_CHANNEL_WIDTH_20_40, pHTInfo->CurSTAExtChnlOffset); + } else { + printk("##################MPT_ProSetBandWidth819x() error BW. \n"); + return; + } + +{ + mpt_SwitchRfSetting92S(dev); + return; + } + + printk("##################MPT_ProSetBandWidth819x() is finished. \n"); +} + +/*----------------------------------------------------------------------------- + * Function: MPT_ProSwChannel() + * + * Overview: Callback function of a work item to switch channel for + * OID_RT_PRO_SET_CHANNEL_DIRECT_CALL + * + * Input: PVOID Context + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 05/16/2007 MHC Create Version 0. + * 06/07/2007 MHC Normal driver change switch channel handler. + * 09/03/2008 MHC RF channel register for 92S. + * 01/08/2008 MHC For MP verification for 92S,weneed to change setting according + * to SD3 Willis's document. + * + *---------------------------------------------------------------------------*/ +void MPT_ProSwChannel(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 ChannelToSw = priv->MptChannelToSw; + u8 eRFPath; + + priv->rtllib->current_network.channel = ChannelToSw; + priv->MptChannelToSw = ChannelToSw; + + if (IS_HARDWARE_TYPE_8192SE(dev)) + { + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0x3FF, ChannelToSw); + } + + if (IS_HARDWARE_TYPE_8192SE(dev)) + { + mpt_SwitchRfSetting92S(dev); + } + } + +#ifdef MP_DEVELOP_READY + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + if (IS_HARDWARE_TYPE_8192SE(dev)) + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0x3FF, ChannelToSw); + + udelay(100); + } + + + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + if (IS_HARDWARE_TYPE_8192SE(dev)) + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0x3FF, ChannelToSw); + + udelay(100); + } +#endif + + /* 2007/06/07 MH Normal driver change sw channel handler. It does not + support SwChnlByDelayHandler ans replace with SwChnlByTimerHandler. */ + priv->rtllib->set_chan(dev, ChannelToSw); + +#if 0 + if(pHalData->CurrentChannel == 14 && !pHalData->bCCKinCH14){ + pHalData->bCCKinCH14 = true; + MPT_CCKTxPowerAdjust(pAdapter,pHalData->bCCKinCH14); + } + else if(pHalData->CurrentChannel != 14 && pHalData->bCCKinCH14){ + pHalData->bCCKinCH14 = false; + MPT_CCKTxPowerAdjust(pAdapter,pHalData->bCCKinCH14); + } +#endif +} /* MPT_ProSwChannel */ + +/*----------------------------------------------------------------------------- + * Function: MPT_ProSetDataRate819x() + * + * Overview: None + * + * Input: PADAPTER pAdapter + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 01/03/2007 Cosa Create Version 0. + * + *---------------------------------------------------------------------------*/ +void MPT_ProSetDataRate819x(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u8 DataRate = 0xFF; + u32 ulRateIdx = priv->MptRateIndex; + + + printk("################MPT_ProSetDataRate819x():Rate=%d\n", ulRateIdx); + switch(ulRateIdx) + { + /* CCK rate. */ + case MPT_RATE_1M: DataRate = 2; break; + case MPT_RATE_2M: DataRate = 4; break; + case MPT_RATE_55M: DataRate = 11; break; + case MPT_RATE_11M: DataRate = 22; break; + + /* OFDM rate. */ + case MPT_RATE_6M: DataRate = 12; break; + case MPT_RATE_9M: DataRate = 18; break; + case MPT_RATE_12M: DataRate = 24; break; + case MPT_RATE_18M: DataRate = 36; break; + case MPT_RATE_24M: DataRate = 48; break; + case MPT_RATE_36M: DataRate = 72; break; + case MPT_RATE_48M: DataRate = 96; break; + case MPT_RATE_54M: DataRate = 108; break; + + /* HT rate. */ + case MPT_RATE_MCS0: DataRate = 0x80; break; + case MPT_RATE_MCS1: DataRate = 0x81; break; + case MPT_RATE_MCS2: DataRate = 0x82; break; + case MPT_RATE_MCS3: DataRate = 0x83; break; + case MPT_RATE_MCS4: DataRate = 0x84; break; + case MPT_RATE_MCS5: DataRate = 0x85; break; + case MPT_RATE_MCS6: DataRate = 0x86; break; + case MPT_RATE_MCS7: DataRate = 0x87; break; + case MPT_RATE_MCS8: DataRate = 0x88; break; + case MPT_RATE_MCS9: DataRate = 0x89; break; + case MPT_RATE_MCS10: DataRate = 0x8A; break; + case MPT_RATE_MCS11: DataRate = 0x8B; break; + case MPT_RATE_MCS12: DataRate = 0x8C; break; + case MPT_RATE_MCS13: DataRate = 0x8D; break; + case MPT_RATE_MCS14: DataRate = 0x8E; break; + case MPT_RATE_MCS15: DataRate = 0x8F; break; + case MPT_RATE_LAST: + break; + + default: + break; + } + + { + mpt_SwitchRfSetting92S(dev); + } + +#ifdef MP_DEVELOP_READY + if (IS_HARDWARE_TYPE_8192SE(dev)) + { + for(eRFPath = 0; eRFPath NumTotalRFPath; eRFPath++) + { + if (ulbandwidth == BAND_20MHZ_MODE) + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, (BIT11|BIT10), 0x01); + else + rtl8192_phy_SetRFReg(dev, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, (BIT11|BIT10), 0x00); + + delay_us(100); + } + } +#endif + + + if(!r8192_MgntIsRateValidForWirelessMode(DataRate, priv->rtllib->mode) && DataRate != 0 ) + { + printk("[MPT]: unknow wmode=%d", priv->rtllib->mode); + } + if (DataRate != 0xFF) + { + printk("[MPT]: Force rate=0x%02x", DataRate); + priv->rtllib->rate = (int)DataRate; + } + +} + +/*----------------------------------------------------------------------------- + * Function: MPT_ProSetTxAGCOffset() + * + * Overview: Set Tx power level for + * OID_RT_PRO_SET_TX_AGC_OFFSET + * + * Input: PVOID Context + * + * Output: NONE + * + * Return: NONE + * + * Revised History: + * When Who Remark + * 08/09/2007 Cosa Create Version 0. + * + *---------------------------------------------------------------------------*/ +void MPT_ProSetTxAGCOffset(struct net_device *dev) +{ + struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); + u32 u4RegValue, TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D; + + TxAGCOffset_B = priv->AntennaTxPwDiff[0]; + TxAGCOffset_C = priv->AntennaTxPwDiff[1]; + TxAGCOffset_D = priv->AntennaTxPwDiff[2]; + + + u4RegValue = (TxAGCOffset_D<<8 | TxAGCOffset_C<<4 | TxAGCOffset_B); + rtl8192_setBBreg(dev, rFPGA0_TxGainStage, (bXBTxAGC|bXCTxAGC|bXDTxAGC), u4RegValue); + printk("##################MPT_ProSetTxAGCOffset() is finished \n"); +} + +#endif + --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_def.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_def.h @@ -0,0 +1,756 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef R8192SE_DEF_H +#define R8192SE_DEF_H + +#include +#include "../rtl_endianfree.h" + +#define HAL_RETRY_LIMIT_INFRA 48 +#define HAL_RETRY_LIMIT_AP_ADHOC 7 + +#define HAL_DM_DIG_DISABLE BIT0 +#define HAL_DM_HIPWR_DISABLE BIT1 + +#define RX_DESC_SIZE 24 +#define RX_DRV_INFO_SIZE_UNIT 8 + + +#define TX_DESC_SIZE 32 + +#define SET_TX_DESC_PKT_SIZE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Value) +#define SET_TX_DESC_OFFSET(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value) +#define SET_TX_DESC_TYPE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 24, 2, __Value) +#define SET_TX_DESC_LAST_SEG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 26, 1, __Value) +#define SET_TX_DESC_FIRST_SEG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 27, 1, __Value) +#define SET_TX_DESC_LINIP(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 28, 1, __Value) +#define SET_TX_DESC_AMSDU(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 29, 1, __Value) +#define SET_TX_DESC_GREEN_FIELD(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 30, 1, __Value) +#define SET_TX_DESC_OWN(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) + +#define SET_TX_DESC_MACID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 5, __Value) +#define SET_TX_DESC_MORE_DATA(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 5, 1, __Value) +#define SET_TX_DESC_MORE_FRAG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 6, 1, __Value) +#define SET_TX_DESC_PIFS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 7, 1, __Value) +#define SET_TX_DESC_QUEUE_SEL(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 8, 5, __Value) +#define SET_TX_DESC_ACK_POLICY(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 13, 2, __Value) +#define SET_TX_DESC_NO_ACM(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 15, 1, __Value) +#define SET_TX_DESC_NON_QOS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 16, 1, __Value) +#define SET_TX_DESC_KEY_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 17, 2, __Value) +#define SET_TX_DESC_OUI(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 19, 1, __Value) +#define SET_TX_DESC_PKT_TYPE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 20, 1, __Value) +#define SET_TX_DESC_EN_DESC_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 21, 1, __Value) +#define SET_TX_DESC_SEC_TYPE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value) +#define SET_TX_DESC_WDS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 24, 1, __Value) +#define SET_TX_DESC_HTC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 25, 1, __Value) +#define SET_TX_DESC_PKT_OFFSET(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 26, 5, __Value) +#define SET_TX_DESC_HWPC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 27, 1, __Value) + +#define SET_TX_DESC_DATA_RETRY_LIMIT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 6, __Value) +#define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 6, 1, __Value) +#define SET_TX_DESC_TSFL(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 7, 5, __Value) +#define SET_TX_DESC_RTS_RETRY_COUNT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 12, 6, __Value) +#define SET_TX_DESC_DATA_RETRY_COUNT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 18, 6, __Value) +#define SET_TX_DESC_RSVD_MACID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(((__pTxDesc) + 8), 24, 5, __Value) +#define SET_TX_DESC_AGG_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 29, 1, __Value) +#define SET_TX_DESC_AGG_BREAK(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 30, 1, __Value) +#define SET_TX_DESC_OWN_MAC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 31, 1, __Value) + +#define SET_TX_DESC_NEXT_HEAP_PAGE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 0, 8, __Value) +#define SET_TX_DESC_TAIL_PAGE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 8, 8, __Value) +#define SET_TX_DESC_SEQ(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 16, 12, __Value) +#define SET_TX_DESC_FRAG(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 28, 4, __Value) + +#define SET_TX_DESC_RTS_RATE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 0, 6, __Value) +#define SET_TX_DESC_DISABLE_RTS_FB(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 6, 1, __Value) +#define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 7, 4, __Value) +#define SET_TX_DESC_CTS_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 11, 1, __Value) +#define SET_TX_DESC_RTS_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 12, 1, __Value) +#define SET_TX_DESC_RA_BRSR_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 13, 3, __Value) +#define SET_TX_DESC_TXHT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 16, 1, __Value) +#define SET_TX_DESC_TX_SHORT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 17, 1, __Value) +#define SET_TX_DESC_TX_BANDWIDTH(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 18, 1, __Value) +#define SET_TX_DESC_TX_SUB_CARRIER(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 19, 2, __Value) +#define SET_TX_DESC_TX_STBC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 21, 2, __Value) +#define SET_TX_DESC_TX_REVERSE_DIRECTION(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 23, 1, __Value) +#define SET_TX_DESC_RTS_HT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 24, 1, __Value) +#define SET_TX_DESC_RTS_SHORT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 25, 1, __Value) +#define SET_TX_DESC_RTS_BANDWIDTH(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 26, 1, __Value) +#define SET_TX_DESC_RTS_SUB_CARRIER(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 27, 2, __Value) +#define SET_TX_DESC_RTS_STBC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 29, 2, __Value) +#define SET_TX_DESC_USER_RATE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 31, 1, __Value) + +#define SET_TX_DESC_PACKET_ID(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 0, 9, __Value) +#define SET_TX_DESC_TX_RATE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 9, 6, __Value) +#define SET_TX_DESC_DISABLE_FB(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 15, 1, __Value) +#define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 16, 5, __Value) +#define SET_TX_DESC_TX_AGC(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 21, 11, __Value) + +#define SET_TX_DESC_IP_CHECK_SUM(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 0, 16, __Value) +#define SET_TX_DESC_TCP_CHECK_SUM(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 16, 16, __Value) + +#define SET_TX_DESC_TX_BUFFER_SIZE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value) +#define SET_TX_DESC_IP_HEADER_OFFSET(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 16, 8, __Value) +#define SET_TX_DESC_TCP_ENABLE(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 31, 1, __Value) + +#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+32, 0, 32, __Value) + + +#define TX_DESC_NEXT_DESC_OFFSET 36 +#define CLEAR_PCI_TX_DESC_CONTENT(__pTxDesc, _size) \ + { \ + if(_size > TX_DESC_NEXT_DESC_OFFSET) \ + memset((void*)__pTxDesc, 0, TX_DESC_NEXT_DESC_OFFSET); \ + else \ + memset((void*)__pTxDesc, 0, _size); \ + if(_size > (TX_DESC_NEXT_DESC_OFFSET + 4)) \ + memset((void*)(__pTxDesc + (TX_DESC_NEXT_DESC_OFFSET + 4)), 0, (_size - TX_DESC_NEXT_DESC_OFFSET)); \ + } + +#define C2H_RX_CMD_HDR_LEN 8 +#define GET_C2H_CMD_CMD_LEN(__pRxHeader) LE_BITS_TO_4BYTE((__pRxHeader), 0, 16) +#define GET_C2H_CMD_ELEMENT_ID(__pRxHeader) LE_BITS_TO_4BYTE((__pRxHeader), 16, 8) +#define GET_C2H_CMD_CMD_SEQ(__pRxHeader) LE_BITS_TO_4BYTE((__pRxHeader), 24, 7) +#define GET_C2H_CMD_CONTINUE(__pRxHeader) LE_BITS_TO_4BYTE((__pRxHeader), 31, 1) +#define GET_C2H_CMD_CONTENT(__pRxHeader) ((u8*)(__pRxHeader) + C2H_RX_CMD_HDR_LEN) + +#define GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pCmdFBHeader) LE_BITS_TO_4BYTE((__pCmdFBHeader), 0, 8) +#define GET_C2H_CMD_FEEDBACK_CCX_LEN(__pCmdFBHeader) LE_BITS_TO_4BYTE((__pCmdFBHeader), 8, 8) +#define GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pCmdFBHeader) LE_BITS_TO_4BYTE((__pCmdFBHeader), 16, 16) +#define GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 0, 5) +#define GET_C2H_CMD_FEEDBACK_CCX_VALID(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 7, 1) +#define GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 8, 5) +#define GET_C2H_CMD_FEEDBACK_CCX_TOK(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 15, 1) +#define GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 16, 4) +#define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pCmdFBHeader) LE_BITS_TO_4BYTE(((__pCmdFBHeader) + 4), 20, 12) + + +#if 0 +#define BK_QUEUE 0 +#define BE_QUEUE 1 +#define VI_QUEUE 2 +#define VO_QUEUE 3 +#define BEACON_QUEUE 4 +#define TXCMD_QUEUE 5 +#define MGNT_QUEUE 6 +#define HIGH_QUEUE 7 +#define HCCA_QUEUE 8 + +#define LOW_QUEUE BE_QUEUE +#define NORMAL_QUEUE MGNT_QUEUE +#endif + +#define RX_MPDU_QUEUE 0 +#define RX_CMD_QUEUE 1 +#define RX_MAX_QUEUE 2 + + +typedef enum _rtl819x_loopback{ + RTL819X_NO_LOOPBACK = 0, + RTL819X_MAC_LOOPBACK = 1, + RTL819X_DMA_LOOPBACK = 2, + RTL819X_CCK_LOOPBACK = 3, +}rtl819x_loopback_e; + +#define RESET_DELAY_8185 20 + +#define RT_IBSS_INT_MASKS 0 + +#define DESC92S_RATE1M 0x00 +#define DESC92S_RATE2M 0x01 +#define DESC92S_RATE5_5M 0x02 +#define DESC92S_RATE11M 0x03 +#define DESC92S_RATE6M 0x04 +#define DESC92S_RATE9M 0x05 +#define DESC92S_RATE12M 0x06 +#define DESC92S_RATE18M 0x07 +#define DESC92S_RATE24M 0x08 +#define DESC92S_RATE36M 0x09 +#define DESC92S_RATE48M 0x0a +#define DESC92S_RATE54M 0x0b +#define DESC92S_RATEMCS0 0x0c +#define DESC92S_RATEMCS1 0x0d +#define DESC92S_RATEMCS2 0x0e +#define DESC92S_RATEMCS3 0x0f +#define DESC92S_RATEMCS4 0x10 +#define DESC92S_RATEMCS5 0x11 +#define DESC92S_RATEMCS6 0x12 +#define DESC92S_RATEMCS7 0x13 +#define DESC92S_RATEMCS8 0x14 +#define DESC92S_RATEMCS9 0x15 +#define DESC92S_RATEMCS10 0x16 +#define DESC92S_RATEMCS11 0x17 +#define DESC92S_RATEMCS12 0x18 +#define DESC92S_RATEMCS13 0x19 +#define DESC92S_RATEMCS14 0x1a +#define DESC92S_RATEMCS15 0x1b +#define DESC92S_RATEMCS15_SG 0x1c +#define DESC92S_RATEMCS32 0x20 + +#define SHORT_SLOT_TIME 9 +#define NON_SHORT_SLOT_TIME 20 + + +#define MAX_LINES_HWCONFIG_TXT 1000 +#define MAX_BYTES_LINE_HWCONFIG_TXT 256 + +#define SW_THREE_WIRE 0 +#define HW_THREE_WIRE 2 + +#define BT_DEMO_BOARD 0 +#define BT_QA_BOARD 1 +#define BT_FPGA 2 + +#define Rx_Smooth_Factor 20 + +#define QSLT_BK 0x2 +#define QSLT_BE 0x0 +#define QSLT_VI 0x5 +#define QSLT_VO 0x7 +#define QSLT_BEACON 0x10 +#define QSLT_HIGH 0x11 +#define QSLT_MGNT 0x12 +#define QSLT_CMD 0x13 + +#define NUM_OF_FIRMWARE_QUEUE 10 +#define NUM_OF_PAGES_IN_FW 0x100 +#define NUM_OF_PAGE_IN_FW_QUEUE_BK 0x07 +#define NUM_OF_PAGE_IN_FW_QUEUE_BE 0x07 +#define NUM_OF_PAGE_IN_FW_QUEUE_VI 0x07 +#define NUM_OF_PAGE_IN_FW_QUEUE_VO 0x07 +#define NUM_OF_PAGE_IN_FW_QUEUE_HCCA 0x0 +#define NUM_OF_PAGE_IN_FW_QUEUE_CMD 0x0 +#define NUM_OF_PAGE_IN_FW_QUEUE_MGNT 0x02 +#define NUM_OF_PAGE_IN_FW_QUEUE_HIGH 0x02 +#define NUM_OF_PAGE_IN_FW_QUEUE_BCN 0x2 +#define NUM_OF_PAGE_IN_FW_QUEUE_PUB 0xA1 + +#define NUM_OF_PAGE_IN_FW_QUEUE_BK_DTM 0x026 +#define NUM_OF_PAGE_IN_FW_QUEUE_BE_DTM 0x048 +#define NUM_OF_PAGE_IN_FW_QUEUE_VI_DTM 0x048 +#define NUM_OF_PAGE_IN_FW_QUEUE_VO_DTM 0x026 +#define NUM_OF_PAGE_IN_FW_QUEUE_PUB_DTM 0x00 + +#define HAL_PRIME_CHNL_OFFSET_DONT_CARE 0 +#define HAL_PRIME_CHNL_OFFSET_LOWER 1 +#define HAL_PRIME_CHNL_OFFSET_UPPER 2 + + + +#define MAX_SILENT_RESET_RX_SLOT_NUM 10 +typedef enum tag_Rf_OpType +{ + RF_OP_By_SW_3wire = 0, + RF_OP_By_FW, + RF_OP_MAX +}RF_OpType_E; + + +typedef enum _POWER_SAVE_MODE +{ + POWER_SAVE_MODE_ACTIVE, + POWER_SAVE_MODE_SAVE, +}POWER_SAVE_MODE; + +typedef enum _INTERFACE_SELECT_8190PCI{ + INTF_SEL1_MINICARD = 0, + INTF_SEL0_PCIE = 1, + INTF_SEL2_RSV = 2, + INTF_SEL3_RSV = 3, +} INTERFACE_SELECT_8190PCI, *PINTERFACE_SELECT_8190PCI; + + +typedef struct _BB_REGISTER_DEFINITION{ + u32 rfintfs; + u32 rfintfi; + u32 rfintfo; + u32 rfintfe; + u32 rf3wireOffset; + u32 rfLSSI_Select; + u32 rfTxGainStage; + u32 rfHSSIPara1; + u32 rfHSSIPara2; + u32 rfSwitchControl; + u32 rfAGCControl1; + u32 rfAGCControl2; + u32 rfRxIQImbalance; + u32 rfRxAFE; + u32 rfTxIQImbalance; + u32 rfTxAFE; + u32 rfLSSIReadBack; + u32 rfLSSIReadBackPi; +}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T; + + + + +typedef struct _rx_fwinfo_8192s{ + + /*u32 gain_0:7; + u32 trsw_0:1; + u32 gain_1:7; + u32 trsw_1:1; + u32 gain_2:7; + u32 trsw_2:1; + u32 gain_3:7; + u32 trsw_3:1; */ + u8 gain_trsw[4]; + + /*u32 pwdb_all:8; + u32 cfosho_0:8; + u32 cfosho_1:8; + u32 cfosho_2:8;*/ + u8 pwdb_all; + u8 cfosho[4]; + + /*u32 cfosho_3:8; + u32 cfotail_0:8; + u32 cfotail_1:8; + u32 cfotail_2:8;*/ + u8 cfotail[4]; + + /*u32 cfotail_3:8; + u32 rxevm_0:8; + u32 rxevm_1:8; + u32 rxsnr_0:8;*/ + s8 rxevm[2]; + s8 rxsnr[4]; + + /*u32 rxsnr_1:8; + u32 rxsnr_2:8; + u32 rxsnr_3:8; + u32 pdsnr_0:8;*/ + u8 pdsnr[2]; + + /*u32 pdsnr_1:8; + u32 csi_current_0:8; + u32 csi_current_1:8; + u32 csi_target_0:8;*/ + u8 csi_current[2]; + u8 csi_target[2]; + + /*u32 csi_target_1:8; + u32 sigevm:8; + u32 max_ex_pwr:8; + u32 ex_intf_flag:1; + u32 sgi_en:1; + u32 rxsc:2; + u32 reserve:4;*/ + u8 sigevm; + u8 max_ex_pwr; + u8 ex_intf_flag:1; + u8 sgi_en:1; + u8 rxsc:2; + u8 reserve:4; + +}rx_fwinfo, *prx_fwinfo; + +typedef struct _LOG_INTERRUPT_8190 +{ + u32 nIMR_COMDOK; + u32 nIMR_MGNTDOK; + u32 nIMR_HIGH; + u32 nIMR_VODOK; + u32 nIMR_VIDOK; + u32 nIMR_BEDOK; + u32 nIMR_BKDOK; + u32 nIMR_ROK; + u32 nIMR_RCOK; + u32 nIMR_TBDOK; + u32 nIMR_BDOK; + u32 nIMR_RXFOVW; +} LOG_INTERRUPT_8190_T, *PLOG_INTERRUPT_8190_T; + +typedef struct _phy_cck_rx_status_report_819xpci +{ + u8 adc_pwdb_X[4]; + u8 sq_rpt; + u8 cck_agc_rpt; +}phy_sts_cck_819xpci_t, phy_sts_cck_8192s_t; + +#define PHY_RSSI_SLID_WIN_MAX 100 +#define PHY_LINKQUALITY_SLID_WIN_MAX 20 +#define PHY_Beacon_RSSI_SLID_WIN_MAX 10 + +typedef struct _tx_desc_8192se{ + + u32 PktSize:16; + u32 Offset:8; + u32 Type:2; + u32 LastSeg:1; + u32 FirstSeg:1; + u32 LINIP:1; + u32 AMSDU:1; + u32 GF:1; + u32 OWN:1; + + u32 MacID:5; + u32 MoreData:1; + u32 MoreFrag:1; + u32 PIFS:1; + u32 QueueSel:5; + u32 AckPolicy:2; + u32 NoACM:1; + u32 NonQos:1; + u32 KeyID:2; + u32 OUI:1; + u32 PktType:1; + u32 EnDescID:1; + u32 SecType:2; + u32 HTC:1; + u32 WDS:1; + u32 PktOffset:5; + u32 HWPC:1; + + u32 DataRetryLmt:6; + u32 RetryLmtEn:1; + u32 TSFL:5; + u32 RTSRC:6; + u32 DATARC:6; + u32 Rsvd_MacID:5; + u32 AggEn:1; + u32 BK:1; + u32 OwnMAC:1; + + u32 NextHeadPage:8; + u32 TailPage:8; + u32 Seq:12; + u32 Frag:4; + + u32 RTSRate:6; + u32 DisRTSFB:1; + u32 RTSRateFBLmt:4; + u32 CTS2Self:1; + u32 RTSEn:1; + u32 RaBRSRID:3; + u32 TXHT:1; + u32 TxShort:1; + u32 TxBw:1; + u32 TXSC:2; + u32 STBC:2; + u32 RD:1; + u32 RTSHT:1; + u32 RTSShort:1; + u32 RTSBW:1; + u32 RTSSC:2; + u32 RTSSTBC:2; + u32 UserRate:1; + + u32 PktID:9; + u32 TxRate:6; + u32 DISFB:1; + u32 DataRateFBLmt:5; + u32 TxAGC:11; + + u32 IPChkSum:16; + u32 TCPChkSum:16; + + u32 TxBufferSize:16; + u32 IPHdrOffset:8; + u32 Rsvd3:7; + u32 TCPEn:1; + + u32 TxBuffAddr; + + u32 NextDescAddress; + + u32 Reserve_Pass_92S_PCIE_MM_Limit[6]; + +} tx_desc, *ptx_desc; + + +typedef struct _tx_desc_cmd_8192se{ + u32 PktSize:16; + u32 Offset:8; + u32 Rsvd0:2; + u32 FirstSeg:1; + u32 LastSeg:1; + u32 LINIP:1; + u32 Rsvd1:2; + u32 OWN:1; + + u32 Rsvd2; + u32 Rsvd3; + u32 Rsvd4; + u32 Rsvd5; + u32 Rsvd6; + u32 Rsvd7; + + u32 TxBufferSize:16; + u32 Rsvd8:16; + + u32 TxBufferAddr; + + u32 NextTxDescAddress; + + u32 Reserve_Pass_92S_PCIE_MM_Limit[6]; + +}tx_desc_cmd, *ptx_desc_cmd; + + +typedef struct _tx_status_desc_8192se{ + + u32 PktSize:16; + u32 Offset:8; + u32 Type:2; + u32 LastSeg:1; + u32 FirstSeg:1; + u32 LINIP:1; + u32 AMSDU:1; + u32 GF:1; + u32 OWN:1; + + u32 MacID:5; + u32 MoreData:1; + u32 MoreFrag:1; + u32 PIFS:1; + u32 QueueSel:5; + u32 AckPolicy:2; + u32 NoACM:1; + u32 NonQos:1; + u32 KeyID:2; + u32 OUI:1; + u32 PktType:1; + u32 EnDescID:1; + u32 SecType:2; + u32 HTC:1; + u32 WDS:1; + u32 PktOffset:5; + u32 HWPC:1; + + u32 DataRetryLmt:6; + u32 RetryLmtEn:1; + u32 TSFL:5; + u32 RTSRC:6; + u32 DATARC:6; + u32 Rsvd1:5; + u32 AggEn:1; + u32 BK:1; + u32 OwnMAC:1; + + u32 NextHeadPage:8; + u32 TailPage:8; + u32 Seq:12; + u32 Frag:4; + + u32 RTSRate:6; + u32 DisRTSFB:1; + u32 RTSRateFBLmt:4; + u32 CTS2Self:1; + u32 RTSEn:1; + u32 RaBRSRID:3; + u32 TXHT:1; + u32 TxShort:1; + u32 TxBw:1; + u32 TXSC:2; + u32 STBC:2; + u32 RD:1; + u32 RTSHT:1; + u32 RTSShort:1; + u32 RTSBW:1; + u32 RTSSC:2; + u32 RTSSTBC:2; + u32 UserRate:1; + + u32 PktID:9; + u32 TxRate:6; + u32 DISFB:1; + u32 DataRateFBLmt:5; + u32 TxAGC:11; + + u32 IPChkSum:16; + u32 TCPChkSum:16; + + u32 TxBufferSize:16; + u32 IPHdrOffset:8; + u32 Rsvd2:7; + u32 TCPEn:1; + + u32 TxBufferAddr; + + u32 NextDescAddress; + + u32 Reserve_Pass_92S_PCIE_MM_Limit[6]; + +}tx_status_desc, *ptx_status_desc; + + +typedef struct _rx_desc_8192se{ + u32 Length:14; + u32 CRC32:1; + u32 ICVError:1; + u32 DrvInfoSize:4; + u32 Security:3; + u32 Qos:1; + u32 Shift:2; + u32 PHYStatus:1; + u32 SWDec:1; + u32 LastSeg:1; + u32 FirstSeg:1; + u32 EOR:1; + u32 OWN:1; + + u32 MACID:5; + u32 TID:4; + u32 HwRsvd:5; + u32 PAGGR:1; + u32 FAGGR:1; + u32 A1_FIT:4; + u32 A2_FIT:4; + u32 PAM:1; + u32 PWR:1; + u32 MoreData:1; + u32 MoreFrag:1; + u32 Type:2; + u32 MC:1; + u32 BC:1; + + u32 Seq:12; + u32 Frag:4; + u32 NextPktLen:14; + u32 NextIND:1; + u32 Rsvd:1; + + u32 RxMCS:6; + u32 RxHT:1; + u32 AMSDU:1; + u32 SPLCP:1; + u32 BandWidth:1; + u32 HTC:1; + u32 TCPChkRpt:1; + u32 IPChkRpt:1; + u32 TCPChkValID:1; + u32 HwPCErr:1; + u32 HwPCInd:1; + u32 IV0:16; + + u32 IV1; + + u32 TSFL; + + u32 BufferAddress; + + u32 NextRxDescAddress; + +#if 0 + u32 BA_SSN:12; + u32 BA_VLD:1; + u32 RSVD:19; +#endif + +} rx_desc, *prx_desc; + + + +typedef struct _rx_desc_status_8192se{ + u32 Length:14; + u32 CRC32:1; + u32 ICVError:1; + u32 DrvInfoSize:4; + u32 Security:3; + u32 Qos:1; + u32 Shift:2; + u32 PHYStatus:1; + u32 SWDec:1; + u32 LastSeg:1; + u32 FirstSeg:1; + u32 EOR:1; + u32 OWN:1; + + u32 MACID:5; + u32 TID:4; + u32 HwRsvd:5; + u32 PAGGR:1; + u32 FAGGR:1; + u32 A1_FIT:4; + u32 A2_FIT:4; + u32 PAM:1; + u32 PWR:1; + u32 MoreData:1; + u32 MoreFrag:1; + u32 Type:2; + u32 MC:1; + u32 BC:1; + + u32 Seq:12; + u32 Frag:4; + u32 NextPktLen:14; + u32 NextIND:1; + u32 Rsvd:1; + + u32 RxMCS:6; + u32 RxHT:1; + u32 AMSDU:1; + u32 SPLCP:1; + u32 BW:1; + u32 HTC:1; + u32 TCPChkRpt:1; + u32 IPChkRpt:1; + u32 TCPChkValID:1; + u32 HwPCErr:1; + u32 HwPCInd:1; + u32 IV0:16; + + u32 IV1; + + u32 TSFL; + + + u32 BufferAddress; + + u32 NextRxDescAddress; + +#if 0 + u32 BA_SSN:12; + u32 BA_VLD:1; + u32 RSVD:19; +#endif +}rx_desc_status, *prx_desc_status; + +typedef enum _HAL_FW_C2H_CMD_ID +{ + HAL_FW_C2H_CMD_Read_MACREG = 0, + HAL_FW_C2H_CMD_Read_BBREG = 1, + HAL_FW_C2H_CMD_Read_RFREG = 2, + HAL_FW_C2H_CMD_Read_EEPROM = 3, + HAL_FW_C2H_CMD_Read_EFUSE = 4, + HAL_FW_C2H_CMD_Read_CAM = 5, + HAL_FW_C2H_CMD_Get_BasicRate = 6, + HAL_FW_C2H_CMD_Get_DataRate = 7, + HAL_FW_C2H_CMD_Survey = 8 , + HAL_FW_C2H_CMD_SurveyDone = 9, + HAL_FW_C2H_CMD_JoinBss = 10, + HAL_FW_C2H_CMD_AddSTA = 11, + HAL_FW_C2H_CMD_DelSTA = 12, + HAL_FW_C2H_CMD_AtimDone = 13, + HAL_FW_C2H_CMD_TX_Report = 14, + HAL_FW_C2H_CMD_CCX_Report = 15, + HAL_FW_C2H_CMD_DTM_Report = 16, + HAL_FW_C2H_CMD_TX_Rate_Statistics = 17, + HAL_FW_C2H_CMD_C2HLBK = 18, + HAL_FW_C2H_CMD_C2HDBG = 19, + HAL_FW_C2H_CMD_C2HFEEDBACK = 20, + HAL_FW_C2H_CMD_BT_State = 25, + HAL_FW_C2H_CMD_BT_Service = 26, + HAL_FW_C2H_CMD_MAX +}HAL_FW_C2H_CMD_ID; + +#define HAL_FW_C2H_CMD_C2HFEEDBACK_CCX_PER_PKT_RPT 0x04 +#define HAL_FW_C2H_CMD_C2HFEEDBACK_DTM_TX_STATISTICS_RPT 0x05 +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_Efuse.h @@ -0,0 +1,98 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifndef __INC_EFUSE_H +#define __INC_EFUSE_H + +#define EFUSE_FOR_92SU 1 + +/*--------------------------Define Parameters-------------------------------*/ +#define EFUSE_REAL_CONTENT_LEN 512 +#define EFUSE_MAP_LEN 128 +#define EFUSE_MAX_SECTION 16 +#define EFUSE_MAX_WORD_UNIT 4 +#define EFUSE_IC_ID_OFFSET 506 + +#define EFUSE_INIT_MAP 0 +#define EFUSE_MODIFY_MAP 1 + +#define EFUSE_CLK_CTRL EFUSE_CTRL +#define EFUSE_BIT(x) (1 << (x)) + +#define PG_STATE_HEADER 0x01 +#define PG_STATE_WORD_0 0x02 +#define PG_STATE_WORD_1 0x04 +#define PG_STATE_WORD_2 0x08 +#define PG_STATE_WORD_3 0x10 +#define PG_STATE_DATA 0x20 + +#define PG_SWBYTE_H 0x01 +#define PG_SWBYTE_L 0x02 + +/*--------------------------Define Parameters-------------------------------*/ + + +/*------------------------------Define structure----------------------------*/ + +/*------------------------------Define structure----------------------------*/ + + +/*------------------------Export global variable----------------------------*/ +/*------------------------Export global variable----------------------------*/ + +/*------------------------Export Marco Definition---------------------------*/ + +/*------------------------Export Marco Definition---------------------------*/ + + +/*--------------------------Exported Function prototype---------------------*/ +extern void +EFUSE_Initialize(struct net_device* dev); +extern u8 +EFUSE_Read1Byte(struct net_device* dev,u16 Address); +extern void +EFUSE_Write1Byte(struct net_device* dev,u16 Address,u8 Value); + +#ifdef EFUSE_FOR_92SU +extern void +ReadEFuse(struct net_device* dev,u16 _offset,u16 _size_byte,u8* pbuf); +extern void +ReadEFuseByte(struct net_device* dev,u16 _offset,u8 *pbuf); +#endif + +extern void +EFUSE_ShadowRead(struct net_device* dev,unsigned char Type,unsigned short Offset,u32 *Value); +extern void +EFUSE_ShadowWrite(struct net_device* dev,unsigned char Type,unsigned short Offset,u32 Value); +extern bool +EFUSE_ShadowUpdate(struct net_device* dev); +extern bool +EFUSE_ShadowUpdateChk(struct net_device* dev); +extern void +EFUSE_ShadowMapUpdate(struct net_device* dev); +extern void +EFUSE_RePgSection1(struct net_device* dev); + +extern bool +EFUSE_ProgramMap(struct net_device* dev,char* pFileName, u8 TableType); +/*--------------------------Exported Function prototype---------------------*/ + +/* End of Efuse.h */ + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.c +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_firmware.c @@ -0,0 +1,856 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#if defined(RTL8192SE) +#include "../rtl_core.h" +#include "../rtl_endianfree.h" +#include "r8192S_hwimg.h" +#include "r8192S_dev.h" + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) && defined(USE_FW_SOURCE_IMG_FILE) +#include +#endif +#define byte(x,n) ( (x >> (8 * n)) & 0xff ) + +static void fw_SetRQPN(struct net_device *dev) +{ + + write_nic_dword(dev, RQPN, 0xffffffff); + write_nic_dword(dev, RQPN+4, 0xffffffff); + write_nic_byte(dev, RQPN+8, 0xff); + write_nic_byte(dev, RQPN+0xB, 0x80); + + +} /* fw_SetRQPN */ + +bool FirmwareDownloadCode(struct net_device *dev, u8 * code_virtual_address,u32 buffer_len) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool rt_status = true; + u16 frag_threshold = MAX_FIRMWARE_CODE_SIZE; + u16 frag_length, frag_offset = 0; + struct sk_buff *skb; + unsigned char *seg_ptr; + cb_desc *tcb_desc; + u8 bLastIniPkt = 0; + u16 ExtraDescOffset = 0; + +#ifdef RTL8192SE + fw_SetRQPN(dev); +#endif + + RT_TRACE(COMP_FIRMWARE, "--->FirmwareDownloadCode()\n" ); + + if(buffer_len >= MAX_FIRMWARE_CODE_SIZE) + { + RT_TRACE(COMP_ERR, "Size over FIRMWARE_CODE_SIZE! \n"); + goto cmdsend_downloadcode_fail; + } + + ExtraDescOffset = 0; + + do { + if((buffer_len-frag_offset) > frag_threshold) + { + frag_length = frag_threshold + ExtraDescOffset; + } + else + { + frag_length = (u16)(buffer_len - frag_offset + ExtraDescOffset); + bLastIniPkt = 1; + } + + skb = dev_alloc_skb(frag_length); + memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); + + tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE); + tcb_desc->queue_index = TXCMD_QUEUE; + tcb_desc->bCmdOrInit = DESC_PACKET_TYPE_INIT; + tcb_desc->bLastIniPkt = bLastIniPkt; + + skb_reserve(skb, ExtraDescOffset); + seg_ptr = (u8 *)skb_put(skb, (u32)(frag_length-ExtraDescOffset)); + memcpy(seg_ptr, code_virtual_address+frag_offset, (u32)(frag_length-ExtraDescOffset)); + + tcb_desc->txbuf_size= frag_length; + + if(!priv->rtllib->check_nic_enough_desc(dev,tcb_desc->queue_index)|| + (!skb_queue_empty(&priv->rtllib->skb_waitQ[tcb_desc->queue_index]))||\ + (priv->rtllib->queue_stop) ) + { + RT_TRACE(COMP_FIRMWARE,"=====================================================> tx full!\n"); + skb_queue_tail(&priv->rtllib->skb_waitQ[tcb_desc->queue_index], skb); + } + else + { + priv->rtllib->softmac_hard_start_xmit(skb,dev); + } + + frag_offset += (frag_length - ExtraDescOffset); + + }while(frag_offset < buffer_len); + write_nic_byte(dev, TPPoll, TPPoll_CQ); + return rt_status ; + + +cmdsend_downloadcode_fail: + rt_status = false; + RT_TRACE(COMP_ERR, "CmdSendDownloadCode fail !!\n"); + return rt_status; + +} + + + +bool +FirmwareEnableCPU(struct net_device *dev) +{ + + bool rtStatus = true; + u8 tmpU1b, CPUStatus = 0; + u16 tmpU2b; + u32 iCheckTime = 200; + + RT_TRACE(COMP_FIRMWARE, "-->FirmwareEnableCPU()\n" ); + + fw_SetRQPN(dev); + + tmpU1b = read_nic_byte(dev, SYS_CLKR); + write_nic_byte(dev, SYS_CLKR, (tmpU1b|SYS_CPU_CLKSEL)); + + tmpU2b = read_nic_word(dev, SYS_FUNC_EN); + write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|FEN_CPUEN)); + + do + { + CPUStatus = read_nic_byte(dev, TCR); + if(CPUStatus& IMEM_RDY) + { + RT_TRACE(COMP_FIRMWARE, "IMEM Ready after CPU has refilled.\n"); + break; + } + + udelay(100); + }while(iCheckTime--); + + if(!(CPUStatus & IMEM_RDY)) + return false; + + RT_TRACE(COMP_FIRMWARE, "<--FirmwareEnableCPU(): rtStatus(%#x)\n", rtStatus); + return rtStatus; +} + +FIRMWARE_8192S_STATUS +FirmwareGetNextStatus(FIRMWARE_8192S_STATUS FWCurrentStatus) +{ + FIRMWARE_8192S_STATUS NextFWStatus = 0; + + switch(FWCurrentStatus) + { + case FW_STATUS_INIT: + NextFWStatus = FW_STATUS_LOAD_IMEM; + break; + + case FW_STATUS_LOAD_IMEM: + NextFWStatus = FW_STATUS_LOAD_EMEM; + break; + + case FW_STATUS_LOAD_EMEM: + NextFWStatus = FW_STATUS_LOAD_DMEM; + break; + + case FW_STATUS_LOAD_DMEM: + NextFWStatus = FW_STATUS_READY; + break; + + default: + RT_TRACE(COMP_ERR,"Invalid FW Status(%#x)!!\n", FWCurrentStatus); + break; + } + return NextFWStatus; +} + +bool FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool rtStatus = true; + rt_firmware *pFirmware = priv->pFirmware; + short PollingCnt = 1000; + u8 CPUStatus = 0; + u32 tmpU4b; + + RT_TRACE(COMP_FIRMWARE, "--->%s(): LoadStaus(%d),", __FUNCTION__, LoadFWStatus); + + pFirmware->FWStatus = (FIRMWARE_8192S_STATUS)LoadFWStatus; + + switch (LoadFWStatus) { + case FW_STATUS_LOAD_IMEM: + do { + CPUStatus = read_nic_byte(dev, TCR); + if(CPUStatus& IMEM_CODE_DONE) + break; + udelay(5); + } while (PollingCnt--); + if (!(CPUStatus & IMEM_CHK_RPT) || (PollingCnt <= 0)) { + RT_TRACE(COMP_ERR, "FW_STATUS_LOAD_IMEM FAIL CPU, Status=%x\r\n", CPUStatus); + goto status_check_fail; + } + break; + + case FW_STATUS_LOAD_EMEM: + do { + CPUStatus = read_nic_byte(dev, TCR); + if(CPUStatus& EMEM_CODE_DONE) + break; + udelay(5); + } while(PollingCnt--); + if (!(CPUStatus & EMEM_CHK_RPT) || (PollingCnt <= 0)) { + RT_TRACE(COMP_ERR, "FW_STATUS_LOAD_EMEM FAIL CPU, Status=%x\r\n", CPUStatus); + goto status_check_fail; + } + + rtStatus = FirmwareEnableCPU(dev); + if (rtStatus != true) { + RT_TRACE(COMP_ERR, "Enable CPU fail ! \n" ); + goto status_check_fail; + } + break; + + case FW_STATUS_LOAD_DMEM: + do { + CPUStatus = read_nic_byte(dev, TCR); + if (CPUStatus& DMEM_CODE_DONE) + break; + udelay(5); + } while(PollingCnt--); + + if (!(CPUStatus & DMEM_CODE_DONE) || (PollingCnt <= 0)) { + RT_TRACE(COMP_ERR, "Polling DMEM code done fail ! CPUStatus(%#x)\n", CPUStatus); + goto status_check_fail; + } + + RT_TRACE(COMP_FIRMWARE, "DMEM code download success, CPUStatus(%#x)\n", CPUStatus); + PollingCnt = 2000; + do { + CPUStatus = read_nic_byte(dev, TCR); + if(CPUStatus & FWRDY) + break; + udelay(40); + } while(PollingCnt--); + + RT_TRACE(COMP_FIRMWARE, "Polling Load Firmware ready, CPUStatus(%x)\n", CPUStatus); + if (((CPUStatus & LOAD_FW_READY) != LOAD_FW_READY) || (PollingCnt <= 0)) { + RT_TRACE(COMP_ERR, "Polling Load Firmware ready fail ! CPUStatus(%x)\n", CPUStatus); + goto status_check_fail; + } + +#ifdef RTL8192SE +#endif + + tmpU4b = read_nic_dword(dev,TCR); + write_nic_dword(dev, TCR, (tmpU4b&(~TCR_ICV))); + + tmpU4b = read_nic_dword(dev, RCR); + write_nic_dword(dev, RCR, + (tmpU4b|RCR_APPFCS|RCR_APP_ICV|RCR_APP_MIC)); + + RT_TRACE(COMP_FIRMWARE, "FirmwareCheckReady(): Current RCR settings(%#x)\n", tmpU4b); + +#if 0 + priv->TransmitConfig = read_nic_dword_E(dev, TCR); + RT_TRACE(COMP_FIRMWARE, "FirmwareCheckReady(): Current TCR settings(%#x)\n", priv->TransmitConfig); +#endif + + write_nic_byte(dev, LBKMD_SEL, LBK_NORMAL); + break; + default : + RT_TRACE(COMP_FIRMWARE, "Unknown status check!\n"); + rtStatus = false; + break; + } + +status_check_fail: + RT_TRACE(COMP_FIRMWARE, "<---%s: LoadFWStatus(%d), rtStatus(%x)\n", __FUNCTION__, + LoadFWStatus, rtStatus); + return rtStatus; +} +u8 FirmwareHeaderMapRfType(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + switch(priv->rf_type) + { + case RF_1T1R: return 0x11; + case RF_1T2R: return 0x12; + case RF_2T2R: return 0x22; + case RF_2T2R_GREEN: return 0x92; + default: + RT_TRACE(COMP_INIT, "Unknown RF type(%x)\n",priv->rf_type); + break; + } + return 0x22; +} + + +void FirmwareHeaderPriveUpdate(struct net_device *dev, PRT_8192S_FIRMWARE_PRIV pFwPriv) +{ + pFwPriv->rf_config = FirmwareHeaderMapRfType(dev); +} + + + +bool FirmwareDownload92S(struct net_device *dev) +{ + struct r8192_priv *priv = rtllib_priv(dev); + bool rtStatus = true; + u8 *pucMappedFile = NULL; + u32 ulFileLength = 0; + u8 FwHdrSize = RT_8192S_FIRMWARE_HDR_SIZE; + rt_firmware *pFirmware = priv->pFirmware; + u8 FwStatus = FW_STATUS_INIT; + PRT_8192S_FIRMWARE_HDR pFwHdr = NULL; + PRT_8192S_FIRMWARE_PRIV pFwPriv = NULL; + + pFirmware->FWStatus = FW_STATUS_INIT; + + RT_TRACE(COMP_FIRMWARE, " --->FirmwareDownload92S()\n"); + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) && defined(USE_FW_SOURCE_IMG_FILE) + priv->firmware_source = FW_SOURCE_IMG_FILE; +#else + priv->firmware_source = FW_SOURCE_HEADER_FILE; +#endif + + switch( priv->firmware_source ) + { + case FW_SOURCE_IMG_FILE: +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) && defined(USE_FW_SOURCE_IMG_FILE) + if(pFirmware->szFwTmpBufferLen == 0) + { +#ifdef _RTL8192_EXT_PATCH_ + const char *pFwImageFileName[1] = {"RTL8191SE_MESH/rtl8192sfw.bin"}; +#else + const char *pFwImageFileName[1] = {"RTL8192SE/rtl8192sfw.bin"}; +#endif + const struct firmware *fw_entry = NULL; + u32 ulInitStep = 0; + int rc = 0; + u32 file_length = 0; + rc = request_firmware(&fw_entry, pFwImageFileName[ulInitStep],&priv->pdev->dev); + if(rc < 0 ) { + RT_TRACE(COMP_ERR, "request firmware fail!\n"); + goto DownloadFirmware_Fail; + } + + if(fw_entry->size > sizeof(pFirmware->szFwTmpBuffer)) { + RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n"); + release_firmware(fw_entry); + goto DownloadFirmware_Fail; + } + + memcpy(pFirmware->szFwTmpBuffer,fw_entry->data,fw_entry->size); + pFirmware->szFwTmpBufferLen = fw_entry->size; + release_firmware(fw_entry); + + pucMappedFile = pFirmware->szFwTmpBuffer; + file_length = pFirmware->szFwTmpBufferLen; + + pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile; + pFwHdr = pFirmware->pFwHeader; + RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \ + pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \ + pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE); + pFirmware->FirmwareVersion = byte(pFwHdr->Version ,0); + if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM))) + { + RT_TRACE(COMP_ERR, "%s: memory for data image is less than IMEM required\n",\ + __FUNCTION__); + goto DownloadFirmware_Fail; + } else { + pucMappedFile+=FwHdrSize; + + memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE); + pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE; + } + + if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM)) + { + RT_TRACE(COMP_ERR, "%s: memory for data image is less than EMEM required\n",\ + __FUNCTION__); + goto DownloadFirmware_Fail; + } + else + { + pucMappedFile += pFirmware->FwIMEMLen; + + memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE); + pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE; + } + } +#endif + break; + + case FW_SOURCE_HEADER_FILE: +#if 1 +#define Rtl819XFwImageArray Rtl8192SEFwImgArray + pucMappedFile = Rtl819XFwImageArray; + ulFileLength = ImgArrayLength; + + RT_TRACE(COMP_INIT,"Fw download from header.\n"); + pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile; + pFwHdr = pFirmware->pFwHeader; + RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \ + pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \ + pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE); + pFirmware->FirmwareVersion = byte(pFwHdr->Version ,0); + + if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM))) + { + printk("FirmwareDownload92S(): memory for data image is less than IMEM required\n"); + goto DownloadFirmware_Fail; + } + else + { + pucMappedFile+=FwHdrSize; + + memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE); + pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE; + } + + if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM)) + { + printk(" FirmwareDownload92S(): memory for data image is less than EMEM required\n"); + goto DownloadFirmware_Fail; + } else { + pucMappedFile+= pFirmware->FwIMEMLen; + + memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE); + pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE; + } +#endif + break; + default: + break; + } + + FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus); + while(FwStatus!= FW_STATUS_READY) + { + switch(FwStatus) + { + case FW_STATUS_LOAD_IMEM: + pucMappedFile = pFirmware->FwIMEM; + ulFileLength = pFirmware->FwIMEMLen; + break; + + case FW_STATUS_LOAD_EMEM: + pucMappedFile = pFirmware->FwEMEM; + ulFileLength = pFirmware->FwEMEMLen; + break; + + case FW_STATUS_LOAD_DMEM: + pFwHdr = pFirmware->pFwHeader; + pFwPriv = (PRT_8192S_FIRMWARE_PRIV)&pFwHdr->FWPriv; + FirmwareHeaderPriveUpdate(dev, pFwPriv); + pucMappedFile = (u8*)(pFirmware->pFwHeader)+RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE; + ulFileLength = FwHdrSize-RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE; + break; + + default: + RT_TRACE(COMP_ERR, "Unexpected Download step!!\n"); + goto DownloadFirmware_Fail; + break; + } + + rtStatus = FirmwareDownloadCode(dev, pucMappedFile, ulFileLength); + + if(rtStatus != true) + { + RT_TRACE(COMP_ERR, "FirmwareDownloadCode() fail ! \n" ); + goto DownloadFirmware_Fail; + } + + rtStatus = FirmwareCheckReady(dev, FwStatus); + + if(rtStatus != true) + { + RT_TRACE(COMP_ERR, "FirmwareDownloadCode() fail ! \n"); + goto DownloadFirmware_Fail; + } + + FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus); + } + + RT_TRACE(COMP_FIRMWARE, "Firmware Download Success!!\n"); + return rtStatus; + + DownloadFirmware_Fail: + RT_TRACE(COMP_ERR, "Firmware Download Fail!!%x\n",read_nic_word(dev, TCR)); + rtStatus = false; + return rtStatus; +} +void rtl8192se_dump_skb_data(struct sk_buff *skb) +{ + u8 i = 0; + u8 *arry = skb->data; + + printk("\nSCAN_CMD/PROBE_REQ==============>\n"); + for(i = 0; i < skb->len; i ++){ + if((i % 4 == 0)&&(i != 0)) + printk("\n"); + printk("%2.2x ", arry[i]); + } + printk("\nSCAN_CMD/PROBE_REQ<==============\n"); +} + +void rtl8192se_dump_cmd_para(u8*SiteSurveyPara) +{ + u8 i = 0; + u8 desc_size = sizeof(tx_desc_fw); + u8 para_size = 8+desc_size; + u8 *arry = SiteSurveyPara; + + printk("\nSCAN_CMD_PARA==============>\n"); + for(i = 0; i < para_size; i ++){ + if((i % 4 == 0)&&(i != 0)) + printk("\n"); + printk("%2.2x ", arry[i]); + } + printk("\nSCAN_CMD_PARA<==============\n"); +} +#if 1 +RT_STATUS +CmdSendPacket( + struct net_device *dev, + cb_desc *pTcb, + struct sk_buff *skb, + u32 BufferLen, + u32 PacketType, + bool bLastInitPacket + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + RT_STATUS rtStatus = RT_STATUS_SUCCESS; + + pTcb->queue_index = TXCMD_QUEUE; + pTcb->bCmdOrInit = PacketType; + pTcb->bLastIniPkt = bLastInitPacket; + pTcb->txbuf_size = BufferLen; + + + if(!priv->rtllib->check_nic_enough_desc(dev,pTcb->queue_index)|| + (!skb_queue_empty(&priv->rtllib->skb_waitQ[pTcb->queue_index]))||\ + (priv->rtllib->queue_stop) ) { + RT_TRACE(COMP_CMD,"=========================> tx full!\n"); + skb_queue_tail(&priv->rtllib->skb_waitQ[pTcb->queue_index], skb); + } else { + priv->rtllib->softmac_hard_start_xmit(skb,dev); + } + + return rtStatus; +} + +u32 +FillH2CCmd( + struct sk_buff *skb, + u32 H2CBufferLen, + u32 CmdNum, + u32* pElementID, + u32* pCmdLen, + u8** pCmbBuffer, + u8* CmdStartSeq + ) +{ + u8 i = 0; + u32 TotalLen = 0, Len = 0, TxDescLen = 0; + u32 preContinueOffset = 0; + + u8* pH2CBuffer; + + do + { + Len = H2C_TX_CMD_HDR_LEN + N_BYTE_ALIGMENT(pCmdLen[i], 8); + + if(H2CBufferLen < TotalLen + Len + TxDescLen) + break; + + pH2CBuffer = (u8 *) skb_put(skb, (u32)Len); + memset((pH2CBuffer + TotalLen + TxDescLen),0,Len); + + SET_BITS_TO_LE_4BYTE((pH2CBuffer + TotalLen + TxDescLen), 0, 16, pCmdLen[i]); + + SET_BITS_TO_LE_4BYTE((pH2CBuffer + TotalLen + TxDescLen), 16, 8, pElementID[i]); + + *CmdStartSeq = *CmdStartSeq % 0x80; + SET_BITS_TO_LE_4BYTE((pH2CBuffer + TotalLen + TxDescLen), 24, 7, *CmdStartSeq); + ++ *CmdStartSeq; + + memcpy((pH2CBuffer + TotalLen + TxDescLen + H2C_TX_CMD_HDR_LEN), pCmbBuffer[i], pCmdLen[i]); + + if(i < CmdNum - 1) + SET_BITS_TO_LE_4BYTE((pH2CBuffer + preContinueOffset), 31, 1, 1); + + preContinueOffset = TotalLen; + + TotalLen += Len; + }while(++ i < CmdNum); + + return TotalLen; +} + +u32 +GetH2CCmdLen( + u32 H2CBufferLen, + u32 CmdNum, + u32* pCmdLen + ) +{ + u8 i = 0; + u32 TotalLen = 0, Len = 0, TxDescLen = 0; + + do + { + Len = H2C_TX_CMD_HDR_LEN + N_BYTE_ALIGMENT(pCmdLen[i], 8); + + if(H2CBufferLen < TotalLen + Len + TxDescLen) + break; + + TotalLen += Len; + }while(++ i < CmdNum); + + return TotalLen + TxDescLen; +} + +/*----------------------------------------------------------------------------- + * Function: FirmwareSetH2CCmd() + * + * Overview: Set FW H2C command (Decide ElementID, cmd content length, and get FW buffer) + * + * Input: H2CCmd: H2C command type. + * pCmdBuffer: Pointer of the H2C command content. + * + * Output: NONE + * + * Return: RT_STATUS + * + * Revised History: + * When Who Remark + * 2009/1/12 tynli Create the version 0. + * + *---------------------------------------------------------------------------*/ +RT_STATUS +FirmwareSetH2CCmd( + struct net_device *dev, + u8 H2CCmd, + u8* pCmdBuffer + ) +{ + struct r8192_priv *priv = rtllib_priv(dev); + u32 ElementID; + u32 Cmd_Len; + cb_desc *pTcb; + struct sk_buff *skb; + u32 Len; + + RT_STATUS rtStatus; + + switch(H2CCmd){ + case FW_H2C_SETPWRMODE: + { + ElementID = H2C_SetPwrMode_CMD ; + Cmd_Len = sizeof(H2C_SETPWRMODE_PARM); + } + break; + case FW_H2C_JOINBSSRPT: + { + ElementID = H2C_JoinbssRpt_CMD; + Cmd_Len = sizeof(H2C_JOINBSSRPT_PARM); + } + break; + case FW_H2C_WoWLAN_UPDATE_GTK: + { + ElementID = H2C_WoWLAN_UPDATE_GTK_CMD; + Cmd_Len = sizeof(H2C_WPA_TWO_WAY_PARA); + } + break; + case FW_H2C_WoWLAN_UPDATE_IV: + { + ElementID = H2C_WoWLAN_UPDATE_IV_CMD; + Cmd_Len = sizeof(unsigned long long); + } + break; + + case FW_H2C_WoWLAN_OFFLOAD: + { + ElementID = H2C_WoWLAN_FW_OFFLOAD; + Cmd_Len = sizeof(u8); + } + break; + case FW_H2C_SITESURVEY: + { + ElementID = H2C_SiteSurvey_CMD; + Cmd_Len = sizeof(H2C_SITESURVEY_PARA) + ((PH2C_SITESURVEY_PARA)pCmdBuffer)->probe_req_len - sizeof(tx_desc_fw); + } + break; + default: + break; + } + + RT_TRACE(COMP_CMD, "FirmwareSetH2CCmd() HW_VAR_SET_TX_CMD: ElementID = %d, %d+%d=Cmd_Len = %d\n", ElementID, sizeof(H2C_SITESURVEY_PARA),((PH2C_SITESURVEY_PARA)pCmdBuffer)->probe_req_len, Cmd_Len); + + { + Len = GetH2CCmdLen(MAX_TRANSMIT_BUFFER_SIZE, 1, &Cmd_Len); + + RT_TRACE(COMP_CMD, "---------->%s(), cmdlen:%d,len:%d\n", __func__,Cmd_Len,Len); + skb = dev_alloc_skb(Len); + memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); + + pTcb = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE); + + FillH2CCmd(skb, MAX_TRANSMIT_BUFFER_SIZE, 1, &ElementID, &Cmd_Len, &pCmdBuffer, &priv->H2CTxCmdSeq); + + + rtStatus = CmdSendPacket(dev, pTcb, skb, Len, DESC_PACKET_TYPE_NORMAL, false); + + } + + write_nic_byte(dev, TPPoll, TPPoll_CQ); + + return RT_STATUS_SUCCESS; +} + + +void +rtl8192se_set_scan_cmd(struct net_device *dev, u32 start_flag) +{ + struct r8192_priv *priv = rtllib_priv(dev); + H2C_SITESURVEY_PARA *SiteSurveyPara; + + if (!priv->scan_cmd) { + priv->scan_cmd = kmalloc(sizeof(H2C_SITESURVEY_PARA) + + RTL_MAX_SCAN_SIZE, GFP_KERNEL); + if (!priv->scan_cmd) { + printk("----------->%s() Error!!!\n", __func__); + return; + } + } + + SiteSurveyPara = priv->scan_cmd; + memset(SiteSurveyPara, 0, sizeof(struct _H2C_SITESURVEY_PARA) + RTL_MAX_SCAN_SIZE); + + if(start_flag){ + struct sk_buff *skb = rtllib_probe_req(priv->rtllib); + cb_desc *tcb_desc = (cb_desc *)(skb->cb + 8); + + + tcb_desc->queue_index = MGNT_QUEUE; + tcb_desc->data_rate = MgntQuery_MgntFrameTxRate(priv->rtllib); + tcb_desc->RATRIndex = 7; + tcb_desc->bTxDisableRateFallBack = 1; + tcb_desc->bTxUseDriverAssingedRate = 1; + + + SiteSurveyPara->start_flag = start_flag; + SiteSurveyPara->probe_req_len = skb->len + sizeof(tx_desc_fw); + + SiteSurveyPara->desc.MacID = 0; + SiteSurveyPara->desc.TXHT = (tcb_desc->data_rate&0x80)?1:0; + SiteSurveyPara->desc.TxRate = MRateToHwRate8192SE(dev,tcb_desc->data_rate); + SiteSurveyPara->desc.TxShort = rtl8192se_QueryIsShort(((tcb_desc->data_rate&0x80)?1:0), MRateToHwRate8192SE(dev,tcb_desc->data_rate), tcb_desc); + + SiteSurveyPara->desc.AggEn = 0; + SiteSurveyPara->desc.Seq = 0; + SiteSurveyPara->desc.RTSEn = (tcb_desc->bRTSEnable && tcb_desc->bCTSEnable==false)?1:0; + SiteSurveyPara->desc.CTS2Self = (tcb_desc->bCTSEnable)?1:0; + SiteSurveyPara->desc.RTSSTBC = (tcb_desc->bRTSSTBC)?1:0; + SiteSurveyPara->desc.RTSHT = (tcb_desc->rts_rate&0x80)?1:0; + SiteSurveyPara->desc.RTSRate = MRateToHwRate8192SE(dev,tcb_desc->rts_rate); + SiteSurveyPara->desc.RTSRate = MRateToHwRate8192SE(dev,MGN_24M); + SiteSurveyPara->desc.RTSBW = 0; + SiteSurveyPara->desc.RTSSC = tcb_desc->RTSSC; + SiteSurveyPara->desc.RTSShort = (SiteSurveyPara->desc.RTSHT==0)?(tcb_desc->bRTSUseShortPreamble?1:0):(tcb_desc->bRTSUseShortGI?1:0); + + if(priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20_40){ + if(tcb_desc->bPacketBW) { + SiteSurveyPara->desc.TxBw = 1; + SiteSurveyPara->desc.TXSC = 0; + } else { + SiteSurveyPara->desc.TxBw = 0; + SiteSurveyPara->desc.TXSC = priv->nCur40MhzPrimeSC; + } + } else { + SiteSurveyPara->desc.TxBw = 0; + SiteSurveyPara->desc.TXSC = 0; + } + + SiteSurveyPara->desc.LINIP = 0; + SiteSurveyPara->desc.Offset = 32; + SiteSurveyPara->desc.PktSize = (u16)skb->len; + + SiteSurveyPara->desc.RaBRSRID = tcb_desc->RATRIndex; + + SiteSurveyPara->desc.PktID = 0x0; + SiteSurveyPara->desc.QueueSel = rtl8192se_MapHwQueueToFirmwareQueue(tcb_desc->queue_index, tcb_desc->priority); + + SiteSurveyPara->desc.DataRateFBLmt= 0x1F; + SiteSurveyPara->desc.DISFB = tcb_desc->bTxDisableRateFallBack; + SiteSurveyPara->desc.UserRate = tcb_desc->bTxUseDriverAssingedRate; + + + SiteSurveyPara->desc.FirstSeg = 1; + SiteSurveyPara->desc.LastSeg = 1; + + SiteSurveyPara->desc.TxBufferSize = (u16)skb->len; + + SiteSurveyPara->desc.OWN = 1; + + + memcpy(&SiteSurveyPara->probe_req[0], skb->data, (u16)skb->len); + + dev_kfree_skb_any(skb); + } else { + SiteSurveyPara->start_flag = start_flag; + SiteSurveyPara->probe_req_len = 0; + } + + FirmwareSetH2CCmd( dev ,FW_H2C_SITESURVEY, (u8*)SiteSurveyPara); +} + +int rtl8192se_send_scan_cmd(struct net_device *dev, bool start) +{ + struct r8192_priv *priv = rtllib_priv(dev); + + if(start){ + priv->rtllib->scan_watch_dog =0; +#if 0 + queue_delayed_work_rsl(priv->priv_wq,&priv->hw_scan_simu_wq,0); +#else + rtl8192se_set_scan_cmd(dev, start); +#endif + } else { +#if 0 + rtl8192se_rx_surveydone_cmd(dev); +#else + rtl8192se_set_scan_cmd(dev, start); +#endif + } + return true; +} +#endif + +#endif --- linux-2.6.32.orig/ubuntu/rtl8192se/rtl8192s/r8192S_mp.h +++ linux-2.6.32/ubuntu/rtl8192se/rtl8192s/r8192S_mp.h @@ -0,0 +1,185 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * Based on the r8180 driver, which is: + * Copyright 2004-2005 Andrea Merello , et al. + * 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 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ + +#ifndef __INC_HAL8192S_MP_H +#define __INC_HAL8192S_MP_H + +/*--------------------------Define Parameters-------------------------------*/ + +#define MPT_NOOP 0 +#define MPT_READ_MAC_1BYTE 1 +#define MPT_READ_MAC_2BYTE 2 +#define MPT_READ_MAC_4BYTE 3 +#define MPT_WRITE_MAC_1BYTE 4 +#define MPT_WRITE_MAC_2BYTE 5 +#define MPT_WRITE_MAC_4BYTE 6 +#define MPT_READ_BB_CCK 7 +#define MPT_WRITE_BB_CCK 8 +#define MPT_READ_BB_OFDM 9 +#define MPT_WRITE_BB_OFDM 10 +#define MPT_READ_RF 11 +#define MPT_WRITE_RF 12 +#define MPT_READ_EEPROM_1BYTE 13 +#define MPT_WRITE_EEPROM_1BYTE 14 +#define MPT_READ_EEPROM_2BYTE 15 +#define MPT_WRITE_EEPROM_2BYTE 16 +#define MPT_SET_CSTHRESHOLD 21 +#define MPT_SET_INITGAIN 22 +#define MPT_SWITCH_BAND 23 +#define MPT_SWITCH_CHANNEL 24 +#define MPT_SET_DATARATE 25 +#define MPT_SWITCH_ANTENNA 26 +#define MPT_SET_TX_POWER 27 +#define MPT_SET_CONT_TX 28 +#define MPT_SET_SINGLE_CARRIER 29 +#define MPT_SET_CARRIER_SUPPRESSION 30 + +#define MPT_SET_ANTENNA_GAIN_OFFSET 40 +#define MPT_SET_CRYSTAL_CAP 41 +#define MPT_TRIGGER_RF_THERMAL_METER 42 +#define MPT_SET_SINGLE_TONE 43 +#define MPT_READ_RF_THERMAL_METER 44 +#define MPT_SWITCH_BAND_WIDTH 45 +#define MPT_QUERY_TSSI_VALUE 46 +#define MPT_SET_TX_POWER_ADJUST 47 +#define MPT_DO_TX_POWER_TRACK 48 +#define MPT_QUERY_NIC_TYPE 49 +#define MPT_QUERY_WPS_PUSHED 50 +#define MPT_SET_LED_CONTROL 51 +#define MPT_TX_POWER_TRACK_CONTROL 52 + +#define MPT_WRITE_EFUSE_1BYTE 53 +#define MPT_READ_EFUSE_1BYTE 54 +#define MPT_READ_EFUSE_2BYTE 55 +#define MPT_READ_EFUSE_4BYTE 56 +#define MPT_UPDATE_EFUSE 57 +#define MPT_UPDATE_EFUSE_UTILIZE 58 +#define MPT_UPDATE_AUTOLOAD_STS 59 + +#define MAX_TX_PWR_INDEX_N_MODE 64 +/*--------------------------Define Parameters-------------------------------*/ + +/*------------------------------Define structure----------------------------*/ +/* MP set force data rate base on the definition. */ +typedef enum _MPT_RATE_INDEX{ + /* CCK rate. */ + MPT_RATE_1M = 1, + MPT_RATE_2M, + MPT_RATE_55M, + MPT_RATE_11M, + + /* OFDM rate. */ + MPT_RATE_6M, + MPT_RATE_9M, + MPT_RATE_12M, + MPT_RATE_18M, + MPT_RATE_24M, + MPT_RATE_36M, + MPT_RATE_48M, + MPT_RATE_54M, + + /* HT rate. */ + MPT_RATE_MCS0, + MPT_RATE_MCS1, + MPT_RATE_MCS2, + MPT_RATE_MCS3, + MPT_RATE_MCS4, + MPT_RATE_MCS5, + MPT_RATE_MCS6, + MPT_RATE_MCS7, + MPT_RATE_MCS8, + MPT_RATE_MCS9, + MPT_RATE_MCS10, + MPT_RATE_MCS11, + MPT_RATE_MCS12, + MPT_RATE_MCS13, + MPT_RATE_MCS14, + MPT_RATE_MCS15, + MPT_RATE_LAST + +}MPT_RATE_E, *PMPT_RATE_E; + +typedef enum _MPT_Bandwidth_Switch_Mode{ + BAND_20MHZ_MODE = 0, + BAND_40MHZ_DUPLICATE_MODE = 1, + BAND_40MHZ_LOWER_MODE = 2, + BAND_40MHZ_UPPER_MODE = 3, + BAND_40MHZ_DONTCARE_MODE = 4 +}MPT_BANDWIDTH_MODE_E, *PMPT_BANDWIDTH_MODE_E; + +typedef enum _TxAGC_Offset{ + TxAGC_Offset_0 = 0x00, + TxAGC_Offset_1, + TxAGC_Offset_2, + TxAGC_Offset_3, + TxAGC_Offset_4, + TxAGC_Offset_5, + TxAGC_Offset_6, + TxAGC_Offset_7, + TxAGC_Offset_neg8, + TxAGC_Offset_neg7, + TxAGC_Offset_neg6, + TxAGC_Offset_neg5, + TxAGC_Offset_neg4, + TxAGC_Offset_neg3, + TxAGC_Offset_neg2, + TxAGC_Offset_neg1 +} TxAGC_Offset; +/*------------------------------Define structure----------------------------*/ +void rtl8192_init_mp(struct net_device* dev); +int r8192_wx_mp_set_chan(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_set_txrate(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_set_txpower(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_set_bw(struct net_device *dev,struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_set_txstart(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_set_singlecarrier(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_write_rf(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); +int r8192_wx_mp_write_mac(struct net_device *dev, struct iw_request_info *info, + union iwreq_data *wrqu, char *extra); + +void mpt_StartCckContTx(struct net_device *dev,bool bScrambleOn); +void mpt_StartOfdmContTx(struct net_device *dev); +void mpt_StopCckCoNtTx(struct net_device *dev); +void mpt_StopOfdmContTx(struct net_device *dev); +void mpt_SwitchRfSetting92S(struct net_device *dev); +bool mpt_ProSetTxPower( struct net_device *dev, u32 ulTxPower); +bool mpt_ProSetTxAGCOffset(struct net_device *dev, u32 ulTxAGCOffset); +bool mpt_ProSetRxFilter(struct net_device *dev, u32 RCRMode); +bool mpt_ProSetRxFilter(struct net_device *dev, u32 RCRMode); +bool mpt_ProSetModulation(struct net_device *dev, u32 ulWirelessMode); +void mpt_Pro819xIoCallback(struct net_device *dev); +void MPT_ProSetSingleCarrier(struct net_device *dev, bool ulMode); +void MPT_ProSetBandWidth819x(struct net_device *dev); +void MPT_ProSwChannel(struct net_device *dev); +void MPT_ProSetDataRate819x(struct net_device *dev); +void MPT_ProSetTxAGCOffset(struct net_device *dev); +#endif --- linux-2.6.32.orig/ubuntu/compcache/GPL.txt +++ linux-2.6.32/ubuntu/compcache/GPL.txt @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS --- linux-2.6.32.orig/ubuntu/compcache/xvmalloc.c +++ linux-2.6.32/ubuntu/compcache/xvmalloc.c @@ -0,0 +1,557 @@ +/* + * xvmalloc.c + * + * Copyright (C) 2008, 2009 Nitin Gupta + * + * This code is released using a dual license strategy: GPL/LGPL + * You can choose the licence that better fits your requirements. + * + * Released under the terms of GNU General Public License Version 2.0 + * Released under the terms of GNU Lesser General Public License Version 2.1 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xvmalloc.h" +#include "xvmalloc_int.h" + +static void stat_inc(u64 *value) +{ + *value = *value + 1; +} + +static void stat_dec(u64 *value) +{ + *value = *value - 1; +} + +static int test_flag(struct block_header *block, enum blockflags flag) +{ + return block->prev & BIT(flag); +} + +static void set_flag(struct block_header *block, enum blockflags flag) +{ + block->prev |= BIT(flag); +} + +static void clear_flag(struct block_header *block, enum blockflags flag) +{ + block->prev &= ~BIT(flag); +} + +/* + * Given pair, provide a derefrencable pointer. + * This is called from xv_malloc/xv_free path, so it needs to be fast. + */ +static void *get_ptr_atomic(u32 pagenum, u16 offset, enum km_type type) +{ + unsigned char *base; + + base = kmap_atomic(pfn_to_page(pagenum), type); + return base + offset; +} + +static void put_ptr_atomic(void *ptr, enum km_type type) +{ + kunmap_atomic(ptr, type); +} + +static u32 get_blockprev(struct block_header *block) +{ + return block->prev & PREV_MASK; +} + +static void set_blockprev(struct block_header *block, u16 new_offset) +{ + block->prev = new_offset | (block->prev & FLAGS_MASK); +} + +static struct block_header *BLOCK_NEXT(struct block_header *block) +{ + return (struct block_header *)((char *)block + block->size + XV_ALIGN); +} + +/* + * Get index of free list containing blocks of maximum size + * which is less than or equal to given size. + */ +static u32 get_index_for_insert(u32 size) +{ + if (unlikely(size > XV_MAX_ALLOC_SIZE)) + size = XV_MAX_ALLOC_SIZE; + size &= ~FL_DELTA_MASK; + return (size - XV_MIN_ALLOC_SIZE) >> FL_DELTA_SHIFT; +} + +/* + * Get index of free list having blocks of size greater than + * or equal to requested size. + */ +static u32 get_index(u32 size) +{ + if (unlikely(size < XV_MIN_ALLOC_SIZE)) + size = XV_MIN_ALLOC_SIZE; + size = ALIGN(size, FL_DELTA); + return (size - XV_MIN_ALLOC_SIZE) >> FL_DELTA_SHIFT; +} + +/* + * Allocate a memory page. Called when a pool needs to grow. + */ +static u32 xv_alloc_page(gfp_t flags) +{ + struct page *page; + + //page = alloc_page(GFP_NOIO | __GFP_HIGHMEM); + page = alloc_page(flags); + if (unlikely(!page)) + return 0; + + return page_to_pfn(page); +} + +/* + * Called when all objects in a page are freed. + */ +static void xv_free_page(u32 pagenum) +{ + __free_page(pfn_to_page(pagenum)); +} + +/** + * find_block - find block of at least given size + * @pool: memory pool to search from + * @size: size of block required + * @pagenum: page no. containing required block + * @offset: offset within the page where block is located. + * + * Searches two level bitmap to locate block of at least + * the given size. If such a block is found, it provides + * to identify this block and returns index + * in freelist where we found this block. + * Otherwise, returns 0 and params are not touched. + */ +static u32 find_block(struct xv_pool *pool, u32 size, + u32 *pagenum, u32 *offset) +{ + ulong flbitmap, slbitmap; + u32 flindex, slindex, slbitstart; + + /* There are no free blocks in this pool */ + if (!pool->flbitmap) + return 0; + + /* Get freelist index correspoding to this size */ + slindex = get_index(size); + slbitmap = pool->slbitmap[slindex / BITS_PER_LONG]; + slbitstart = slindex % BITS_PER_LONG; + + /* + * If freelist is not empty at this index, we found the + * block - head of this list. This is approximate best-fit match. + */ + if (test_bit(slbitstart, &slbitmap)) { + *pagenum = pool->freelist[slindex].pagenum; + *offset = pool->freelist[slindex].offset; + return slindex; + } + + /* + * No best-fit found. Search a bit further in bitmap for a free block. + * Second level bitmap consists of series of 32-bit chunks. Search + * further in the chunk where we expected a best-fit, starting from + * index location found above. + */ + slbitstart++; + slbitmap >>= slbitstart; + + /* Skip this search if we were already at end of this bitmap chunk */ + if ((slbitstart != BITS_PER_LONG) && slbitmap) { + slindex += __ffs(slbitmap) + 1; + *pagenum = pool->freelist[slindex].pagenum; + *offset = pool->freelist[slindex].offset; + return slindex; + } + + /* Now do a full two-level bitmap search to find next nearest fit */ + flindex = slindex / BITS_PER_LONG; + + flbitmap = (pool->flbitmap) >> (flindex + 1); + if (!flbitmap) + return 0; + + flindex += __ffs(flbitmap) + 1; + slbitmap = pool->slbitmap[flindex]; + slindex = (flindex * BITS_PER_LONG) + __ffs(slbitmap); + *pagenum = pool->freelist[slindex].pagenum; + *offset = pool->freelist[slindex].offset; + + return slindex; +} + +/* + * Insert block at in freelist of given pool. + * freelist used depends on block size. + */ +static void insert_block(struct xv_pool *pool, u32 pagenum, u32 offset, + struct block_header *block) +{ + u32 flindex, slindex; + struct block_header *nextblock; + + slindex = get_index_for_insert(block->size); + flindex = slindex / BITS_PER_LONG; + + block->link.prev_pagenum = 0; + block->link.prev_offset = 0; + block->link.next_pagenum = pool->freelist[slindex].pagenum; + block->link.next_offset = pool->freelist[slindex].offset; + pool->freelist[slindex].pagenum = pagenum; + pool->freelist[slindex].offset = offset; + + if (block->link.next_pagenum) { + nextblock = get_ptr_atomic(block->link.next_pagenum, + block->link.next_offset, KM_USER1); + nextblock->link.prev_pagenum = pagenum; + nextblock->link.prev_offset = offset; + put_ptr_atomic(nextblock, KM_USER1); + } + + __set_bit(slindex % BITS_PER_LONG, &pool->slbitmap[flindex]); + __set_bit(flindex, &pool->flbitmap); +} + +/* + * Remove block from head of freelist. Index 'slindex' identifies the freelist. + */ +static void remove_block_head(struct xv_pool *pool, + struct block_header *block, u32 slindex) +{ + struct block_header *tmpblock; + u32 flindex = slindex / BITS_PER_LONG; + + pool->freelist[slindex].pagenum = block->link.next_pagenum; + pool->freelist[slindex].offset = block->link.next_offset; + block->link.prev_pagenum = 0; + block->link.prev_offset = 0; + + if (!pool->freelist[slindex].pagenum) { + __clear_bit(slindex % BITS_PER_LONG, &pool->slbitmap[flindex]); + if (!pool->slbitmap[flindex]) + __clear_bit(flindex, &pool->flbitmap); + } else { + /* + * DEBUG ONLY: We need not reinitialize freelist head previous + * pointer to 0 - we never depend on its value. But just for + * sanity, lets do it. + */ + tmpblock = get_ptr_atomic(pool->freelist[slindex].pagenum, + pool->freelist[slindex].offset, KM_USER1); + tmpblock->link.prev_pagenum = 0; + tmpblock->link.prev_offset = 0; + put_ptr_atomic(tmpblock, KM_USER1); + } +} + +/* + * Remove block from freelist. Index 'slindex' identifies the freelist. + */ +static void remove_block(struct xv_pool *pool, u32 pagenum, u32 offset, + struct block_header *block, u32 slindex) +{ + u32 flindex; + struct block_header *tmpblock; + + if (pool->freelist[slindex].pagenum == pagenum + && pool->freelist[slindex].offset == offset) { + remove_block_head(pool, block, slindex); + return; + } + + flindex = slindex / BITS_PER_LONG; + + if (block->link.prev_pagenum) { + tmpblock = get_ptr_atomic(block->link.prev_pagenum, + block->link.prev_offset, KM_USER1); + tmpblock->link.next_pagenum = block->link.next_pagenum; + tmpblock->link.next_offset = block->link.next_offset; + put_ptr_atomic(tmpblock, KM_USER1); + } + + if (block->link.next_pagenum) { + tmpblock = get_ptr_atomic(block->link.next_pagenum, + block->link.next_offset, KM_USER1); + tmpblock->link.prev_pagenum = block->link.prev_pagenum; + tmpblock->link.prev_offset = block->link.prev_offset; + put_ptr_atomic(tmpblock, KM_USER1); + } + + return; +} + +/* + * Allocate a page and add it freelist of given pool. + */ +static int grow_pool(struct xv_pool *pool, gfp_t flags) +{ + u32 pagenum; + struct block_header *block; + + pagenum = xv_alloc_page(flags); + if (unlikely(!pagenum)) + return -ENOMEM; + + stat_inc(&pool->total_pages); + + spin_lock(&pool->lock); + block = get_ptr_atomic(pagenum, 0, KM_USER0); + + block->size = PAGE_SIZE - XV_ALIGN; + set_flag(block, BLOCK_FREE); + clear_flag(block, PREV_FREE); + set_blockprev(block, 0); + + insert_block(pool, pagenum, 0, block); + + put_ptr_atomic(block, KM_USER0); + spin_unlock(&pool->lock); + + return 0; +} + +/* + * Create a memory pool. Allocates freelist, bitmaps and other + * per-pool metadata. + */ +struct xv_pool *xv_create_pool(void) +{ + u32 ovhd_size; + struct xv_pool *pool; + + ovhd_size = roundup(sizeof(*pool), PAGE_SIZE); + pool = kzalloc(ovhd_size, GFP_KERNEL); + if (!pool) + return NULL; + + spin_lock_init(&pool->lock); + + return pool; +} +EXPORT_SYMBOL_GPL(xv_create_pool); + +void xv_destroy_pool(struct xv_pool *pool) +{ + kfree(pool); +} +EXPORT_SYMBOL_GPL(xv_destroy_pool); + +/** + * xv_malloc - Allocate block of given size from pool. + * @pool: pool to allocate from + * @size: size of block to allocate + * @pagenum: page no. that holds the object + * @offset: location of object within pagenum + * + * On success, identifies block allocated + * and 0 is returned. On failure, is set to + * 0 and -ENOMEM is returned. + * + * Allocation requests with size > XV_MAX_ALLOC_SIZE will fail. + */ +int xv_malloc(struct xv_pool *pool, u32 size, u32 *pagenum, u32 *offset, + gfp_t flags) +{ + int error; + u32 index, tmpsize, origsize, tmpoffset; + struct block_header *block, *tmpblock; + + *pagenum = 0; + *offset = 0; + origsize = size; + + if (unlikely(!size || size > XV_MAX_ALLOC_SIZE)) + return -ENOMEM; + + size = ALIGN(size, XV_ALIGN); + + spin_lock(&pool->lock); + + index = find_block(pool, size, pagenum, offset); + + if (!*pagenum) { + spin_unlock(&pool->lock); + if (flags & GFP_NOWAIT) + return -ENOMEM; + error = grow_pool(pool, flags); + if (unlikely(error)) + return -ENOMEM; + + spin_lock(&pool->lock); + index = find_block(pool, size, pagenum, offset); + } + + if (!*pagenum) { + spin_unlock(&pool->lock); + return -ENOMEM; + } + + block = get_ptr_atomic(*pagenum, *offset, KM_USER0); + + remove_block_head(pool, block, index); + + /* Split the block if required */ + tmpoffset = *offset + size + XV_ALIGN; + tmpsize = block->size - size; + tmpblock = (struct block_header *)((char *)block + size + XV_ALIGN); + if (tmpsize) { + tmpblock->size = tmpsize - XV_ALIGN; + set_flag(tmpblock, BLOCK_FREE); + clear_flag(tmpblock, PREV_FREE); + + set_blockprev(tmpblock, *offset); + if (tmpblock->size >= XV_MIN_ALLOC_SIZE) + insert_block(pool, *pagenum, tmpoffset, tmpblock); + + if (tmpoffset + XV_ALIGN + tmpblock->size != PAGE_SIZE) { + tmpblock = BLOCK_NEXT(tmpblock); + set_blockprev(tmpblock, tmpoffset); + } + } else { + /* This block is exact fit */ + if (tmpoffset != PAGE_SIZE) + clear_flag(tmpblock, PREV_FREE); + } + + block->size = origsize; + clear_flag(block, BLOCK_FREE); + + put_ptr_atomic(block, KM_USER0); + spin_unlock(&pool->lock); + + *offset += XV_ALIGN; + + return 0; +} +EXPORT_SYMBOL_GPL(xv_malloc); + +/* + * Free block identified with + */ +void xv_free(struct xv_pool *pool, u32 pagenum, u32 offset) +{ + void *page; + struct block_header *block, *tmpblock; + + offset -= XV_ALIGN; + + spin_lock(&pool->lock); + + page = get_ptr_atomic(pagenum, 0, KM_USER0); + block = (struct block_header *)((char *)page + offset); + + /* Catch double free bugs */ + BUG_ON(test_flag(block, BLOCK_FREE)); + + block->size = ALIGN(block->size, XV_ALIGN); + + tmpblock = BLOCK_NEXT(block); + if (offset + block->size + XV_ALIGN == PAGE_SIZE) + tmpblock = NULL; + + /* Merge next block if its free */ + if (tmpblock && test_flag(tmpblock, BLOCK_FREE)) { + /* + * Blocks smaller than XV_MIN_ALLOC_SIZE + * are not inserted in any free list. + */ + if (tmpblock->size >= XV_MIN_ALLOC_SIZE) { + remove_block(pool, pagenum, + offset + block->size + XV_ALIGN, tmpblock, + get_index_for_insert(tmpblock->size)); + } + block->size += tmpblock->size + XV_ALIGN; + } + + /* Merge previous block if its free */ + if (test_flag(block, PREV_FREE)) { + tmpblock = (struct block_header *)((char *)(page) + + get_blockprev(block)); + offset = offset - tmpblock->size - XV_ALIGN; + + if (tmpblock->size >= XV_MIN_ALLOC_SIZE) + remove_block(pool, pagenum, offset, tmpblock, + get_index_for_insert(tmpblock->size)); + + tmpblock->size += block->size + XV_ALIGN; + block = tmpblock; + } + + /* No used objects in this page. Free it. */ + if (block->size == PAGE_SIZE - XV_ALIGN) { + put_ptr_atomic(page, KM_USER0); + spin_unlock(&pool->lock); + + xv_free_page(pagenum); + stat_dec(&pool->total_pages); + return; + } + + set_flag(block, BLOCK_FREE); + if (block->size >= XV_MIN_ALLOC_SIZE) + insert_block(pool, pagenum, offset, block); + + if (offset + block->size + XV_ALIGN != PAGE_SIZE) { + tmpblock = BLOCK_NEXT(block); + set_flag(tmpblock, PREV_FREE); + set_blockprev(tmpblock, offset); + } + + put_ptr_atomic(page, KM_USER0); + spin_unlock(&pool->lock); + + return; +} +EXPORT_SYMBOL_GPL(xv_free); + +u32 xv_get_object_size(void *obj) +{ + struct block_header *blk; + + blk = (struct block_header *)((char *)(obj) - XV_ALIGN); + return blk->size; +} +EXPORT_SYMBOL_GPL(xv_get_object_size); + +/* + * Returns total memory used by allocator (userdata + metadata) + */ +u64 xv_get_total_size_bytes(struct xv_pool *pool) +{ + return pool->total_pages << PAGE_SHIFT; +} +EXPORT_SYMBOL_GPL(xv_get_total_size_bytes); + +static int __init xv_malloc_init(void) +{ + return 0; +} + +static void __exit xv_malloc_exit(void) +{ + return; +} + +module_init(xv_malloc_init); +module_exit(xv_malloc_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Nitin Gupta "); +MODULE_DESCRIPTION("xvmalloc memory allocator"); --- linux-2.6.32.orig/ubuntu/compcache/xvmalloc.h +++ linux-2.6.32/ubuntu/compcache/xvmalloc.h @@ -0,0 +1,30 @@ +/* + * xvmalloc.h + * + * Copyright (C) 2008, 2009 Nitin Gupta + * + * This code is released using a dual license strategy: GPL/LGPL + * You can choose the licence that better fits your requirements. + * + * Released under the terms of GNU General Public License Version 2.0 + * Released under the terms of GNU Lesser General Public License Version 2.1 + */ + +#ifndef _XVMALLOC_H_ +#define _XVMALLOC_H_ + +#include + +struct xv_pool; + +struct xv_pool *xv_create_pool(void); +void xv_destroy_pool(struct xv_pool *pool); + +int xv_malloc(struct xv_pool *pool, u32 size, u32 *pagenum, u32 *offset, + gfp_t flags); +void xv_free(struct xv_pool *pool, u32 pagenum, u32 offset); + +u32 xv_get_object_size(void *obj); +u64 xv_get_total_size_bytes(struct xv_pool *pool); + +#endif --- linux-2.6.32.orig/ubuntu/compcache/LGPL-2.1.txt +++ linux-2.6.32/ubuntu/compcache/LGPL-2.1.txt @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + --- linux-2.6.32.orig/ubuntu/compcache/compat.h +++ linux-2.6.32/ubuntu/compcache/compat.h @@ -0,0 +1,34 @@ +#ifndef _CCACHE_COMPAT_H_ +#define _CCACHE_COMPAT_H_ + +#include + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,23) +#define BIO_IO_ERROR(bio) bio_io_error(bio, PAGE_SIZE) +#define BIO_ENDIO(bio, error) bio_endio(bio, PAGE_SIZE, error) +#else +#define BIO_IO_ERROR(bio) bio_io_error(bio) +#define BIO_ENDIO(bio, error) bio_endio(bio, error) +#endif + +#ifndef pr_err +#define pr_err(fmt, arg...) \ + printk(KERN_ERR fmt, ##arg) +#endif + +#ifndef pr_warning +#define pr_warning(fmt, arg...) \ + printk(KERN_WARNING fmt, ##arg) +#endif + +#ifndef pr_info +#define pr_info(fmt, arg...) \ + printk(KERN_ERR fmt, ##arg) +#endif + +#ifdef bio_discard +#define SWAP_DISCARD_SUPPORTED +#endif + +#endif + --- linux-2.6.32.orig/ubuntu/compcache/Kconfig +++ linux-2.6.32/ubuntu/compcache/Kconfig @@ -0,0 +1,31 @@ +menu "Compcache options" + +config BLK_DEV_COMPCACHE + tristate "Compressed RAM based swap device" + default m + select LZO_COMPRESS + select LZO_DECOMPRESS + depends on BLOCK + help + This creates RAM based block device which acts as swap disk. Pages + swapped to this disk are compressed and stored in memory itself. + Project Home: http://code.google.com/p/compcache/ + +config BLK_DEV_COMPCACHE_DEBUG + default n + depends on BLK_DEV_COMPCACHE + bool "Enable debugging" + help + This causes negligible performance loss and size increase. + If unsure, say Y. + +config BLK_DEV_COMPCACHE_STATS + default n + depends on BLK_DEV_COMPCACHE + bool "Enable statistics" + help + Creates /proc/compcache to export various statistics. + This adds about 4K to size with negligible performance loss. + If unsure, say Y. + +endmenu --- linux-2.6.32.orig/ubuntu/compcache/xvmalloc_int.h +++ linux-2.6.32/ubuntu/compcache/xvmalloc_int.h @@ -0,0 +1,86 @@ +/* + * xvmalloc_int.c + * + * Copyright (C) 2008, 2009 Nitin Gupta + * + * This code is released using a dual license strategy: GPL/LGPL + * You can choose the licence that better fits your requirements. + * + * Released under the terms of GNU General Public License Version 2.0 + * Released under the terms of GNU Lesser General Public License Version 2.1 + */ + +#ifndef _XVMALLOC_INT_H_ +#define _XVMALLOC_INT_H_ + +#include +#include + +/* User configurable params */ + +/* This must be greater than sizeof(LinkFree) */ +#define XV_MIN_ALLOC_SIZE 32 +#define XV_MAX_ALLOC_SIZE (PAGE_SIZE - XV_ALIGN) + +/* Must be power of two */ +#define XV_ALIGN_SHIFT 2 +#define XV_ALIGN (1 << XV_ALIGN_SHIFT) +#define XV_ALIGN_MASK (XV_ALIGN - 1) + +/* Free lists are separated by FL_DELTA bytes */ +#define FL_DELTA_SHIFT 3 +#define FL_DELTA (1 << FL_DELTA_SHIFT) +#define FL_DELTA_MASK (FL_DELTA - 1) +#define NUM_FREE_LISTS ((XV_MAX_ALLOC_SIZE - XV_MIN_ALLOC_SIZE) \ + / FL_DELTA + 1) + +#define MAX_FLI DIV_ROUND_UP(NUM_FREE_LISTS, BITS_PER_LONG) + +/* End of user params */ + +enum blockflags { + BLOCK_FREE, + PREV_FREE, + __NR_BLOCKFLAGS, +}; + +#define FLAGS_MASK XV_ALIGN_MASK +#define PREV_MASK (~FLAGS_MASK) + +struct freelist_entry { + u32 pagenum; + u16 offset; + u16 pad; +}; + +struct link_free { + u32 prev_pagenum; + u32 next_pagenum; + u16 prev_offset; + u16 next_offset; +}; + +struct block_header { + union { + /* This common header must be ALIGN bytes */ + u8 common[XV_ALIGN]; + struct { + u16 size; + u16 prev; + }; + }; + struct link_free link; +}; + +struct xv_pool { + ulong flbitmap; + ulong slbitmap[MAX_FLI]; + spinlock_t lock; + + struct freelist_entry freelist[NUM_FREE_LISTS]; + + /* stats */ + u64 total_pages; +}; + +#endif --- linux-2.6.32.orig/ubuntu/compcache/ramzswap.c +++ linux-2.6.32/ubuntu/compcache/ramzswap.c @@ -0,0 +1,1049 @@ +/* + * Compressed RAM based swap device + * + * Copyright (C) 2008, 2009 Nitin Gupta + * + * This RAM based block device acts as swap disk. + * Pages swapped to this device are compressed and + * stored in memory. + * + * Released under the terms of GNU General Public License Version 2.0 + * + * Project home: http://compcache.googlecode.com + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "compat.h" +#include "ramzswap.h" + +/* Globals */ +static struct ramzswap rzs; +static struct ramzswap_stats stats; +/* + * Pages that compress to larger than this size are + * forwarded to backing swap, if present or stored + * uncompressed in memory otherwise. + */ +static unsigned int MAX_CPAGE_SIZE; + +/* Module params (documentation at end) */ +static unsigned long disksize_kb; +static unsigned long memlimit_kb; +static char *backing_swap; + +static int __init ramzswap_init(void); +static struct block_device_operations ramzswap_devops = { + .owner = THIS_MODULE, +}; + +static int test_flag(u32 index, enum rzs_pageflags flag) +{ + return rzs.table[index].flags & BIT(flag); +} + +static void set_flag(u32 index, enum rzs_pageflags flag) +{ + rzs.table[index].flags |= BIT(flag); +} + +static void clear_flag(u32 index, enum rzs_pageflags flag) +{ + rzs.table[index].flags &= ~BIT(flag); +} + +static int page_zero_filled(void *ptr) +{ + u32 pos; + u64 *page; + + page = (u64 *)ptr; + + for (pos = 0; pos != PAGE_SIZE / sizeof(*page); pos++) { + if (page[pos]) + return 0; + } + + return 1; +} + +/* + * Given pair, provide a dereferencable pointer. + */ +static void *get_ptr_atomic(u32 pagenum, u16 offset, enum km_type type) +{ + unsigned char *page; + + page = kmap_atomic(pfn_to_page(pagenum), type); + return page + offset; +} + +static void put_ptr_atomic(void *ptr, enum km_type type) +{ + kunmap_atomic(ptr, type); +} + +#if defined(STATS) +static struct proc_dir_entry *proc; + +static int proc_ramzswap_read(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + int len; + size_t succ_writes, mem_used; + unsigned int good_compress_perc = 0, no_compress_perc = 0; + + mem_used = xv_get_total_size_bytes(rzs.mem_pool) + + (stats.pages_expand << PAGE_SHIFT); + + if (off > 0) { + *eof = 1; + return 0; + } + +#define K(x) ((x) >> 10) + /* Basic stats */ + len = sprintf(page, + "DiskSize: %8zu kB\n", + (size_t)(K(rzs.disksize))); + + if (rzs.backing_swap) { + /* This must always be less than ComprDataSize */ + len += sprintf(page + len, + "MemLimit: %8zu kB\n", + K(rzs.memlimit)); + } + + succ_writes = stats.num_writes - stats.failed_writes; + + if (succ_writes && stats.pages_stored) { + good_compress_perc = stats.good_compress * 100 + / stats.pages_stored; + no_compress_perc = stats.pages_expand * 100 + / stats.pages_stored; + } + + /* Extended stats */ + len += sprintf(page + len, + "NumReads: %8llu\n" + "NumWrites: %8llu\n" + "FailedReads: %8llu\n" + "FailedWrites: %8llu\n" + "InvalidIO: %8llu\n" + "PagesDiscard: %8llu\n" + "ZeroPages: %8u\n" + "GoodCompress: %8u %%\n" + "NoCompress: %8u %%\n" + "PagesStored: %8u\n" + "PagesUsed: %8zu\n" + "OrigDataSize: %8zu kB\n" + "ComprDataSize: %8zu kB\n" + "MemUsedTotal: %8zu kB\n", + stats.num_reads, + stats.num_writes, + stats.failed_reads, + stats.failed_writes, + stats.invalid_io, + stats.pages_discard, + stats.pages_zero, + good_compress_perc, + no_compress_perc, + stats.pages_stored, + mem_used >> PAGE_SHIFT, + (size_t)(K(stats.pages_stored << PAGE_SHIFT)), + (size_t)(K(stats.compr_size)), + (size_t)(K(mem_used))); + + if (rzs.backing_swap) { + /* This must always be less than ComprDataSize */ + len += sprintf(page + len, + "BDevNumReads: %8llu\n" + "BDevNumWrites: %8llu\n", + stats.bdev_num_reads, + stats.bdev_num_writes); + } + + return len; +} +#endif /* STATS */ + +/* + * Check if value of backing_swap module param is sane. + * Claim this device and set ramzswap size equal to + * size of this block device. + */ +static int setup_backing_swap(void) +{ + int error = 0; + struct inode *inode; + struct file *swap_file; + struct address_space *mapping; + struct block_device *bdev = NULL; + + if (backing_swap == NULL) { + pr_debug(C "backing_swap param not given\n"); + goto out; + } + + pr_info(C "Using backing swap device: %s\n", backing_swap); + + swap_file = filp_open(backing_swap, O_RDWR | O_LARGEFILE, 0); + if (IS_ERR(swap_file)) { + pr_err(C "Error opening backing device: %s\n", backing_swap); + error = -EINVAL; + goto out; + } + + mapping = swap_file->f_mapping; + inode = mapping->host; + + if (S_ISBLK(inode->i_mode)) { + bdev = I_BDEV(inode); + error = bd_claim(bdev, ramzswap_init); + if (error < 0) { + bdev = NULL; + goto bad_param; + } + rzs.old_block_size = block_size(bdev); + error = set_blocksize(bdev, PAGE_SIZE); + if (error < 0) + goto bad_param; + } else { + /* TODO: support for regular file as backing swap */ + pr_info(C "%s is not a block device.\n", backing_swap); + error = -EINVAL; + goto out; + } + + rzs.swap_file = swap_file; + rzs.backing_swap = bdev; + rzs.disksize = i_size_read(inode); + BUG_ON(!rzs.disksize); + + return 0; + +bad_param: + if (bdev) { + set_blocksize(bdev, rzs.old_block_size); + bd_release(bdev); + } + filp_close(swap_file, NULL); + +out: + rzs.backing_swap = NULL; + return error; +} + +/* + * Check if request is within bounds and page aligned. + */ +static inline int valid_swap_request(struct bio *bio) +{ + if (unlikely( + (bio->bi_sector >= (rzs.disksize >> SECTOR_SHIFT)) || + (bio->bi_sector & (SECTORS_PER_PAGE - 1)) || + (bio->bi_vcnt != 1) || + (bio->bi_size != PAGE_SIZE) || + (bio->bi_io_vec[0].bv_offset != 0))) { + + return 0; + } + + /* swap request is valid */ + return 1; +} + +static void ramzswap_free_page(size_t index) +{ + u32 clen; + void *obj; + + u32 pagenum = rzs.table[index].pagenum; + u32 offset = rzs.table[index].offset; + + if (unlikely(test_flag(index, RZS_UNCOMPRESSED))) { + clen = PAGE_SIZE; + __free_page(pfn_to_page(pagenum)); + clear_flag(index, RZS_UNCOMPRESSED); + stat_dec(stats.pages_expand); + goto out; + } + + obj = get_ptr_atomic(pagenum, offset, KM_USER0); + clen = xv_get_object_size(obj) - sizeof(struct zobj_header); + put_ptr_atomic(obj, KM_USER0); + + xv_free(rzs.mem_pool, pagenum, offset); + stat_dec_if_less(stats.good_compress, clen, PAGE_SIZE / 2 + 1); + +out: + stats.compr_size -= clen; + stat_dec(stats.pages_stored); + + rzs.table[index].pagenum = 0; + rzs.table[index].offset = 0; +} + +#ifdef SWAP_DISCARD_SUPPORTED +static int ramzswap_prepare_discard(struct request_queue *q, + struct request *req) +{ + return 0; +} + +/* + * Called by main I/O handler function. This helper + * function handles 'discard' I/O requests which means + * that some swap pages are no longer required, so + * swap device can take needed action -- we free memory + * allocated for these pages. + */ +static int ramzswap_discard(struct bio *bio) +{ + size_t index, start_page, num_pages; + + start_page = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT; + num_pages = bio->bi_size >> (SECTOR_SHIFT + SECTORS_PER_PAGE_SHIFT); + + for (index = start_page; index < start_page + num_pages; index++) { + if (rzs.table[index].pagenum) { + ramzswap_free_page(index); + stat_inc(stats.pages_discard); + } + } + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; +} +#endif + +int handle_zero_page(struct bio *bio) +{ + void *user_mem; + struct page *page = bio->bi_io_vec[0].bv_page; + + user_mem = get_ptr_atomic(page_to_pfn(page), 0, KM_USER0); + memset(user_mem, 0, PAGE_SIZE); + put_ptr_atomic(user_mem, KM_USER0); + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; +} + +int handle_uncompressed_page(struct bio *bio) +{ + u32 index; + struct page *page; + unsigned char *user_mem, *cmem; + + page = bio->bi_io_vec[0].bv_page; + index = bio->bi_sector >>SECTORS_PER_PAGE_SHIFT; + + user_mem = get_ptr_atomic(page_to_pfn(page), 0, KM_USER0); + cmem = get_ptr_atomic(rzs.table[index].pagenum, + rzs.table[index].offset, KM_USER1); + + memcpy(user_mem, cmem, PAGE_SIZE); + put_ptr_atomic(user_mem, KM_USER0); + put_ptr_atomic(cmem, KM_USER1); + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; +} + + +/* + * Called when request page is not present in ramzswap. + * Its either in backing swap device (if present) or + * this is an attempt to read before any previous write + * to this location - this happens due to readahead when + * swap device is read from user-space (e.g. during swapon) + */ +int handle_ramzswap_fault(struct bio *bio) +{ + void *user_mem; + struct page *page = bio->bi_io_vec[0].bv_page; + + /* + * Always forward such requests to backing swap + * device (if present) + */ + if (rzs.backing_swap) { + stat_dec(stats.num_reads); + stat_inc(stats.bdev_num_reads); + bio->bi_bdev = rzs.backing_swap; + return 1; + } + + /* + * Its unlikely event in case backing dev is + * not present + */ + pr_debug(C "Read before write on swap device: " + "sector=%lu, size=%u, offset=%u\n", + (ulong)(bio->bi_sector), bio->bi_size, + bio->bi_io_vec[0].bv_offset); + user_mem = kmap(page); + memset(user_mem, 0, PAGE_SIZE); + kunmap(page); + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; +} + +int ramzswap_read(struct bio *bio) +{ + int ret; + u32 index; + size_t clen; + struct page *page; + struct zobj_header *zheader; + unsigned char *user_mem, *cmem; + + stat_inc(stats.num_reads); + + page = bio->bi_io_vec[0].bv_page; + index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT; + + if (test_flag(index, RZS_ZERO)) + return handle_zero_page(bio); + + /* Requested page is not present in compressed area */ + if (!rzs.table[index].pagenum) + return handle_ramzswap_fault(bio); + + /* Page is stored uncompressed since its incompressible */ + if (unlikely(test_flag(index, RZS_UNCOMPRESSED))) + return handle_uncompressed_page(bio); + + user_mem = get_ptr_atomic(page_to_pfn(page), 0, KM_USER0); + clen = PAGE_SIZE; + + cmem = get_ptr_atomic(rzs.table[index].pagenum, + rzs.table[index].offset, KM_USER1); + + ret = lzo1x_decompress_safe( + cmem + sizeof(*zheader), + xv_get_object_size(cmem) - sizeof(*zheader), + user_mem, &clen); + + put_ptr_atomic(user_mem, KM_USER0); + put_ptr_atomic(cmem, KM_USER1); + + /* should NEVER happen */ + if (unlikely(ret != LZO_E_OK)) { + pr_err(C "Decompression failed! err=%d, page=%u\n", + ret, index); + stat_inc(stats.failed_reads); + goto out; + } + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; + +out: + BIO_IO_ERROR(bio); + return 0; +} + +int ramzswap_write(struct bio *bio) +{ + int ret, fwd_write_request = 0; + u32 offset; + size_t clen, index; + struct zobj_header *zheader; + struct page *page, *page_store; + unsigned char *user_mem, *cmem, *src; + + stat_inc(stats.num_writes); + + page = bio->bi_io_vec[0].bv_page; + index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT; + + src = rzs.compress_buffer; + + /* + * System swaps to same sector again when the stored page + * is no longer referenced by any process. So, its now safe + * to free the memory that was allocated for this page. + */ + if (rzs.table[index].pagenum) + ramzswap_free_page(index); + + /* + * No memory ia allocated for zero filled pages. + * Simply clear zero page flag. + */ + if (test_flag(index, RZS_ZERO)) { + stat_dec(stats.pages_zero); + clear_flag(index, RZS_ZERO); + } + + mutex_lock(&rzs.lock); + + user_mem = get_ptr_atomic(page_to_pfn(page), 0, KM_USER0); + if (page_zero_filled(user_mem)) { + put_ptr_atomic(user_mem, KM_USER0); + mutex_unlock(&rzs.lock); + stat_inc(stats.pages_zero); + set_flag(index, RZS_ZERO); + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; + } + + if (rzs.backing_swap && + (stats.compr_size > rzs.memlimit - PAGE_SIZE)) { + put_ptr_atomic(user_mem, KM_USER0); + mutex_unlock(&rzs.lock); + fwd_write_request = 1; + goto out; + } + + ret = lzo1x_1_compress(user_mem, PAGE_SIZE, src, &clen, + rzs.compress_workmem); + + put_ptr_atomic(user_mem, KM_USER0); + + if (unlikely(ret != LZO_E_OK)) { + mutex_unlock(&rzs.lock); + pr_err(C "Compression failed! err=%d\n", ret); + stat_inc(stats.failed_writes); + goto out; + } + + /* + * Page is incompressible. Forward it to backing swap + * if present. Otherwise, store it as-is (uncompressed) + * since we do not want to return too many swap write + * errors which has side effect of hanging the system. + */ + if (unlikely(clen > MAX_CPAGE_SIZE)) { + if (rzs.backing_swap) { + mutex_unlock(&rzs.lock); + fwd_write_request = 1; + goto out; + } + + clen = PAGE_SIZE; + page_store = alloc_page(GFP_NOIO | __GFP_HIGHMEM); + if (unlikely(!page_store)) { + mutex_unlock(&rzs.lock); + stat_inc(stats.failed_writes); + goto out; + } + + offset = 0; + set_flag(index, RZS_UNCOMPRESSED); + stat_inc(stats.pages_expand); + rzs.table[index].pagenum = page_to_pfn(page_store); + src = get_ptr_atomic(page_to_pfn(page), 0, KM_USER0); + goto memstore; + } + + if (xv_malloc(rzs.mem_pool, clen + sizeof(*zheader), + &rzs.table[index].pagenum, &offset, + GFP_NOIO | __GFP_HIGHMEM)) { + mutex_unlock(&rzs.lock); + pr_info(C "Error allocating memory for compressed " + "page: %zu, size=%zu\n", index, clen); + stat_inc(stats.failed_writes); + if (rzs.backing_swap) + fwd_write_request = 1; + goto out; + } + +memstore: + rzs.table[index].offset = offset; + + cmem = get_ptr_atomic(rzs.table[index].pagenum, + rzs.table[index].offset, KM_USER1); + +#if 0 + /* Back-reference needed for memory defragmentation */ + if (!test_flag(index, RZS_UNCOMPRESSED)) { + zheader = (struct zobj_header *)cmem; + zheader->table_idx = index; + cmem += sizeof(*zheader); + } +#endif + + memcpy(cmem, src, clen); + + put_ptr_atomic(cmem, KM_USER1); + if (unlikely(test_flag(index, RZS_UNCOMPRESSED))) + put_ptr_atomic(src, KM_USER0); + + /* Update stats */ + stats.compr_size += clen; + stat_inc(stats.pages_stored); + stat_inc_if_less(stats.good_compress, clen, PAGE_SIZE / 2 + 1); + + mutex_unlock(&rzs.lock); + + set_bit(BIO_UPTODATE, &bio->bi_flags); + BIO_ENDIO(bio, 0); + return 0; + +out: + if (fwd_write_request) { + stat_inc(stats.bdev_num_writes); + bio->bi_bdev = rzs.backing_swap; + return 1; + } + + BIO_IO_ERROR(bio); + return 0; +} + +/* + * Handler function for all ramzswap I/O requests. + */ +static int ramzswap_make_request(struct request_queue *queue, struct bio *bio) +{ + int ret = 0; + +#ifdef SWAP_DISCARD_SUPPORTED + if (bio_discard(bio)) + return ramzswap_discard(bio); +#endif + + if (!valid_swap_request(bio)) { + stat_inc(stats.invalid_io); + BIO_IO_ERROR(bio); + return 0; + } + + switch (bio_data_dir(bio)) { + case READ: + ret = ramzswap_read(bio); + break; + + case WRITE: + ret = ramzswap_write(bio); + break; + } + + return ret; +} + +/* + * Swap header (1st page of swap device) contains information + * to indentify it as a swap partition. Prepare such a header + * for ramzswap device (ramzswap0) so that swapon can identify + * it as swap partition. In case backing swap device is provided, + * copy its swap header. + */ +static int setup_swap_header(union swap_header *s) +{ + int ret = 0; + struct page *page; + struct address_space *mapping; + union swap_header *backing_swap_header; + + /* + * There is no backing swap device. Create a swap header + * that is acceptable by swapon. + */ + if (rzs.backing_swap == NULL) { + s->info.version = 1; + s->info.last_page = rzs.disksize >> PAGE_SHIFT; + s->info.nr_badpages = 0; + memcpy(s->magic.magic, "SWAPSPACE2", 10); + return 0; + } + + /* + * We have a backing swap device. Copy its swap header + * to ramzswap device header. If this header contains + * invalid information (backing device not a swap + * partition, etc.), swapon will fail for ramzswap + * which is correct behavior - we don't want to swap + * over filesystem partition! + */ + + /* Read the backing swap header (code from sys_swapon) */ + mapping = rzs.swap_file->f_mapping; + if (!mapping->a_ops->readpage) { + ret = -EINVAL; + goto out; + } + + page = read_mapping_page(mapping, 0, rzs.swap_file); + if (IS_ERR(page)) { + ret = PTR_ERR(page); + goto out; + } + + backing_swap_header = kmap(page); + *s = *backing_swap_header; + kunmap(page); + +out: + return ret; +} + +static void ramzswap_set_disksize(size_t totalram_bytes) +{ + rzs.disksize = disksize_kb << 10; + + if (!disksize_kb) { + pr_info(C + "disk size not provided. You can use disksize_kb module " + "param to specify size.\nUsing default: (%u%% of RAM).\n", + DEFAULT_DISKSIZE_PERC_RAM + ); + rzs.disksize = DEFAULT_DISKSIZE_PERC_RAM * + (totalram_bytes / 100); + } + + if (disksize_kb > 2 * (totalram_bytes >> 10)) { + pr_info(C + "There is little point creating a ramzswap of greater than " + "twice the size of memory since we expect a 2:1 compression " + "ratio. Note that ramzswap uses about 0.1%% of the size of " + "the swap device when not in use so a huge ramzswap is " + "wasteful.\n" + "\tMemory Size: %zu kB\n" + "\tSize you selected: %lu kB\n" + "Continuing anyway ...\n", + totalram_bytes >> 10, disksize_kb + ); + } + + rzs.disksize &= PAGE_MASK; + pr_info(C "disk size set to %zu kB\n", rzs.disksize >> 10); +} + +/* + * memlimit cannot be greater than backing disk size. + */ +static void ramzswap_set_memlimit(size_t totalram_bytes) +{ + int memlimit_valid = 1; + rzs.memlimit = memlimit_kb << 10; + + if (!rzs.memlimit) { + pr_info(C "memory limit not set. You can use " + "memlimit_kb module param to specify limit."); + memlimit_valid = 0; + } + + if (rzs.memlimit > rzs.disksize) { + pr_info(C "memory limit cannot be greater than " + "disksize: limit=%zu, disksize=%zu", + rzs.memlimit, rzs.disksize); + memlimit_valid = 0; + } + + if (!memlimit_valid) { + size_t mempart, disksize; + pr_info(C "\nUsing default: MIN[(%u%% of RAM), " + "(backing disk size)].\n", + DEFAULT_MEMLIMIT_PERC_RAM); + mempart = DEFAULT_MEMLIMIT_PERC_RAM * (totalram_bytes / 100); + disksize = rzs.disksize; + rzs.memlimit = mempart > disksize ? disksize : mempart; + } + + if (rzs.memlimit > totalram_bytes / 2) { + pr_info(C + "Its not advisable setting limit more than half of " + "size of memory since we expect a 2:1 compression ratio. " + "Limit represents amount of *compressed* data we can keep " + "in memory!\n" + "\tMemory Size: %zu kB\n" + "\tLimit you selected: %lu kB\n" + "Continuing anyway ...\n", + totalram_bytes >> 10, memlimit_kb + ); + } + + rzs.memlimit &= PAGE_MASK; + BUG_ON(!rzs.memlimit); + + pr_info(C "memory limit set to %zu kB\n", rzs.memlimit >> 10); +} + +static int __init ramzswap_init(void) +{ + int ret; + size_t num_pages, totalram_bytes; + struct sysinfo i; + struct page *page; + void *swap_header; + + mutex_init(&rzs.lock); + + ret = setup_backing_swap(); + if (ret) + goto fail; + + si_meminfo(&i); + /* Here is a trivia: guess unit used for i.totalram !! */ + totalram_bytes = i.totalram << PAGE_SHIFT; + + if (rzs.backing_swap) + ramzswap_set_memlimit(totalram_bytes); + else + ramzswap_set_disksize(totalram_bytes); + + rzs.compress_workmem = kmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL); + if (rzs.compress_workmem == NULL) { + pr_err(C "Error allocating compressor working memory\n"); + ret = -ENOMEM; + goto fail; + } + + rzs.compress_buffer = kmalloc(2 * PAGE_SIZE, GFP_KERNEL); + if (rzs.compress_buffer == NULL) { + pr_err(C "Error allocating compressor buffer space\n"); + ret = -ENOMEM; + goto fail; + } + + num_pages = rzs.disksize >> PAGE_SHIFT; + rzs.table = vmalloc(num_pages * sizeof(*rzs.table)); + if (rzs.table == NULL) { + pr_err(C "Error allocating ramzswap address table\n"); + ret = -ENOMEM; + goto fail; + } + memset(rzs.table, 0, num_pages * sizeof(*rzs.table)); + + page = alloc_page(__GFP_ZERO); + if (page == NULL) { + pr_err(C "Error allocating swap header page\n"); + ret = -ENOMEM; + goto fail; + } + rzs.table[0].pagenum = page_to_pfn(page); + set_flag(0, RZS_UNCOMPRESSED); + + swap_header = kmap(page); + ret = setup_swap_header((union swap_header *)(swap_header)); + kunmap(page); + if (ret) { + pr_err(C "Error setting swap header\n"); + goto fail; + } + + rzs.disk = alloc_disk(1); + if (rzs.disk == NULL) { + pr_err(C "Error allocating disk structure\n"); + ret = -ENOMEM; + goto fail; + } + + rzs.disk->first_minor = 0; + rzs.disk->fops = &ramzswap_devops; + /* + * It is named like this to prevent distro installers + * from offering ramzswap as installation target. They + * seem to ignore all devices beginning with 'ram' + */ + strcpy(rzs.disk->disk_name, "ramzswap0"); + + rzs.disk->major = register_blkdev(0, rzs.disk->disk_name); + if (rzs.disk->major < 0) { + pr_err(C "Cannot register block device\n"); + ret = -EFAULT; + goto fail; + } + + rzs.disk->queue = blk_alloc_queue(GFP_KERNEL); + if (rzs.disk->queue == NULL) { + pr_err(C "Cannot register disk queue\n"); + ret = -EFAULT; + goto fail; + } + + set_capacity(rzs.disk, rzs.disksize >> SECTOR_SHIFT); + blk_queue_make_request(rzs.disk->queue, ramzswap_make_request); + +#ifdef QUEUE_FLAG_NONROT + /* + * Assuming backing device is "rotational" type. + * TODO: check if its actually "non-rotational" (SSD). + * + * We have ident mapping of sectors for ramzswap and + * and the backing swap device. So, this queue flag + * should be according to backing dev. + */ + if (!rzs.backing_swap) + queue_flag_set_unlocked(QUEUE_FLAG_NONROT, rzs.disk->queue); +#endif +#ifdef SWAP_DISCARD_SUPPORTED + blk_queue_set_discard(rzs.disk->queue, ramzswap_prepare_discard); +#endif + blk_queue_logical_block_size(rzs.disk->queue, PAGE_SIZE); + add_disk(rzs.disk); + + rzs.mem_pool = xv_create_pool(); + if (!rzs.mem_pool) { + pr_err(C "Error creating memory pool\n"); + ret = -ENOMEM; + goto fail; + } + +#if defined(STATS) + proc = create_proc_entry("ramzswap", S_IRUGO, NULL); + if (proc) + proc->read_proc = &proc_ramzswap_read; + else { + ret = -ENOMEM; + pr_warning(C "Error creating proc entry\n"); + goto fail; + } +#endif + + /* + * Pages that compress to size greater than this are forwarded + * to physical swap disk (if backing dev is provided) + */ + if (rzs.backing_swap) + MAX_CPAGE_SIZE = MAX_CPAGE_SIZE_BDEV; + else + MAX_CPAGE_SIZE = MAX_CPAGE_SIZE_NOBDEV; + + pr_debug(C "Max compressed page size: %u bytes\n", MAX_CPAGE_SIZE); + + pr_debug(C "Initialization done!\n"); + return 0; + +fail: + if (rzs.disk != NULL) { + if (rzs.disk->major > 0) + unregister_blkdev(rzs.disk->major, rzs.disk->disk_name); + del_gendisk(rzs.disk); + } + + if (rzs.table && rzs.table[0].pagenum) + __free_page(pfn_to_page(rzs.table[0].pagenum)); + kfree(rzs.compress_workmem); + kfree(rzs.compress_buffer); + vfree(rzs.table); + xv_destroy_pool(rzs.mem_pool); +#if defined(STATS) + if (proc) + remove_proc_entry("ramzswap", proc->parent); +#endif + pr_err(C "Initialization failed: err=%d\n", ret); + return ret; +} + +static void __exit ramzswap_exit(void) +{ + size_t index, num_pages; + num_pages = rzs.disksize >> PAGE_SHIFT; + + unregister_blkdev(rzs.disk->major, rzs.disk->disk_name); + del_gendisk(rzs.disk); + + /* Close backing swap device (if present) */ + if (rzs.backing_swap) { + set_blocksize(rzs.backing_swap, rzs.old_block_size); + bd_release(rzs.backing_swap); + filp_close(rzs.swap_file, NULL); + } + + __free_page(pfn_to_page(rzs.table[0].pagenum)); + kfree(rzs.compress_workmem); + kfree(rzs.compress_buffer); + + /* Free all pages that are still in ramzswap */ + for (index = 1; index < num_pages; index++) { + u32 pagenum, offset; + + pagenum = rzs.table[index].pagenum; + offset = rzs.table[index].offset; + + if (!pagenum) + continue; + + if (unlikely(test_flag(index, RZS_UNCOMPRESSED))) + __free_page(pfn_to_page(pagenum)); + else + xv_free(rzs.mem_pool, pagenum, offset); + } + + vfree(rzs.table); + xv_destroy_pool(rzs.mem_pool); + +#if defined(STATS) + remove_proc_entry("ramzswap", proc->parent); +#endif + pr_debug(C "cleanup done!\n"); +} + +/* + * This param is applicable only when there is no backing swap device. + * We ignore this param in case backing dev is provided since then its + * always equal to size of the backing swap device. + * + * This size refers to amount of (uncompressed) data it can hold. + * For e.g. disksize_kb=1024 means it can hold 1024kb worth of + * uncompressed data even if this data compresses to just, say, 100kb. + * + * Default value is used if this param is missing or 0 (if its applicable). + * Default: [DEFAULT_DISKSIZE_PERC_RAM]% of RAM + */ +module_param(disksize_kb, ulong, 0); +MODULE_PARM_DESC(disksize_kb, "ramzswap device size (kB)"); + +/* + * This param is applicable only when backing swap device is provided. + * This refers to limit on amount of (compressed) data it can hold in + * memory. Note that total amount of memory used (MemUsedTotal) can + * exceed this memlimit since that includes memory wastage due to + * fragmentation and metadata overhead. + * + * Any additional data beyond this limit is forwarded to backing + * swap device. TODO: allow changing memlimit at runtime. + * + * Default value is used if this param is missing or 0 (if its applicable). + * Default: MIN([DEFAULT_MEMLIMIT_PERC_RAM]% of RAM, Backing Device Size) + */ +module_param(memlimit_kb, ulong, 0); +MODULE_PARM_DESC(memlimit_kb, "ramzswap memory limit (kB)"); + +/* + * This is block device to be used as backing store for ramzswap. + * When pages more than memlimit_kb as swapped to ramzswap, we store + * any additional pages in this device. We may also move some pages + * from ramzswap to this device in case system is really low on + * memory (TODO). + * + * This device is not directly visible to kernel as a swap device + * (/proc/swaps will only show /dev/ramzswap0 and not this device). + * Managing this backing device is the job of ramzswap module. + */ +module_param(backing_swap, charp, 0); +MODULE_PARM_DESC(backing_swap, "Backing swap partition"); + +module_init(ramzswap_init); +module_exit(ramzswap_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Nitin Gupta "); +MODULE_DESCRIPTION("Compressed RAM Based Swap Device"); --- linux-2.6.32.orig/ubuntu/compcache/BOM +++ linux-2.6.32/ubuntu/compcache/BOM @@ -0,0 +1,2 @@ +Downloaded from: http://code.google.com/p/compcache/ +Current Version: 0.5.3 --- linux-2.6.32.orig/ubuntu/compcache/Changelog +++ linux-2.6.32/ubuntu/compcache/Changelog @@ -0,0 +1,82 @@ +version 0.5.3 (8/4/2009) + - Major cleanups. + - Rename module: compcache.ko -> ramzswap.ko + - Rename params: backing_dev -> backing_swap + - Updated use_compcache.sh script with detailed + documentation on parameters. + - LZO de/compress modules are no longer packaged + with compcache. Most distros now include these. + +version 0.5.2 (11/3/2009) + - Can forward incompressible pages to physical swap disk. + - New module params: + - memlimit_kb + - disksize_kb + - backing_dev + See use_compcache.sh for documentation on these params. + - Modified use_compcache.sh script to handle new params. + - Detect zero-filled pages and don't allocate any memory + for them. + +version 0.5.1 (22/1/2009) + - Fix crash on x86 systems with higmem (mem > ~1G). + This required minor changes to atomic (un)map functions (see Issue #20). + +version 0.5 (16/1/2009) + - Fix crash in case compcache init fails. + +version 0.5pre4 (10/1/2009) + - Support discarding pages for freed swap blocks (requires 2.6.28-git14). + This feature will be disabled if compiled for older kernel. + - Mark ramzswap as "solid-state" block device (requires 2.6.26-git14). + - Fixed incorrect stats reporting in /proc/compcache (some + new stats added too). + +version 0.5pre3 (5/1/2009) + - Use kmap_atomic() in xvMalloc. This fixes issue #19 + - Remove xvMapPage() and xvUnmapMap() from xvMalloc. + +version 0.5pre2 (28/10/2008) + - Alloc full page for uncompressible pages instead + of returning I/O error. + - Warn users when using ramzswap > (2 x RAM size) + +version 0.5pre1 (15/10/2008) + - Replaced TLSF with xvMalloc memory allocator + http://code.google.com/p/compcache/wiki/xvMalloc + +version 0.4 (13/8/2008) + - Enable debug and stats option for compcache and tlsf by default + proc nodes: /proc/{tlsfinfo,compcache} + - Fix crash when reading /proc/tlsfinfo + - Lots of cleanups: clean compile on x64 + +version 0.3 (17/3/2008) + - Fix spurious swap read failures + - Better swap request filtering + - Swap device again renamed to /dev/ramzswap0 + This is to prevent Ubuntu installer from presenting + this device as possible installation target (see Issue #5) + - use_compcache.sh script now waits for disk node to be created + instead of arbitrary sleep (see Issue #6). + - Modified scripts: use_compcache.sh and unuse_compcache.sh + to now use new device name (compcache0 -> ramzswap0). + +version 0.2 (3/3/2008) + - Fixed bug on systems with highmem + - Better filtering-out of non-swap requests + - Export statistics through proc nodes: + - /proc/compcache + - /proc/tlsfinfo + - Debug and Statistics support for allocator + and compcache can now be individually turned + on/off by setting DEBUG, STATS to 0/1 in + respective header files + - Swap device now renamed to /dev/compcache0 + - Added scripts: use_compcache.sh and unuse_compcache.sh + See README for usage + - Default compcache size set to 25% of RAM + - Lots of code cleanups + - Updated README + - Created Changelog :) + --- linux-2.6.32.orig/ubuntu/compcache/ramzswap.h +++ linux-2.6.32/ubuntu/compcache/ramzswap.h @@ -0,0 +1,159 @@ +/* + * Compressed RAM based swap device + * + * Copyright (C) 2008, 2009 Nitin Gupta + * + * This RAM based block device acts as swap disk. + * Pages swapped to this device are compressed and + * stored in memory. + * + * Released under the terms of GNU General Public License Version 2.0 + * + * Project home: http://compcache.googlecode.com + */ + +#ifndef _RAMZSWAP_H_ +#define _RAMZSWAP_H_ + +#include "xvmalloc.h" + +/* + * Stored at beginning of each compressed object. + * + * It stores back-reference to table entry which points to this + * object. This is required to support memory defragmentation or + * migrating compressed pages to backing swap disk. + */ +struct zobj_header { +#if 0 + u32 table_idx; +#endif +}; + +/*-- Configurable parameters */ + +/* Default ramzswap disk size: 25% of total RAM */ +#define DEFAULT_DISKSIZE_PERC_RAM 25 +#define DEFAULT_MEMLIMIT_PERC_RAM 15 + +/* + * Max compressed page size when backing device is provided. + * Pages that compress to size greater than this are sent to + * physical swap disk. + */ +#define MAX_CPAGE_SIZE_BDEV (PAGE_SIZE / 2) + +/* + * Max compressed page size when there is no backing dev. + * Pages that compress to size greater than this are stored + * uncompressed in memory. + */ +#define MAX_CPAGE_SIZE_NOBDEV (PAGE_SIZE / 4 * 3) + +/* + * NOTE: MAX_CPAGE_SIZE_{BDEV,NOBDEV} sizes must be + * less than or equal to: + * XV_MAX_ALLOC_SIZE - sizeof(struct zobj_header) + * since otherwise xvMalloc would always return failure. + */ + +/*-- End of configurable params */ + +#define SECTOR_SHIFT 9 +#define SECTOR_SIZE (1 << SECTOR_SHIFT) +#define SECTORS_PER_PAGE_SHIFT (PAGE_SHIFT - SECTOR_SHIFT) +#define SECTORS_PER_PAGE (1 << SECTORS_PER_PAGE_SHIFT) + +/* Message prefix */ +#define C "ramzswap: " + +/* Debugging and Stats */ +#define NOP do { } while (0) + +#if defined(CONFIG_BLK_DEV_RAMZSWAP_STATS) +#define STATS +#endif + +#if defined(STATS) +#define stat_inc(stat) ((stat)++) +#define stat_dec(stat) ((stat)--) +#define stat_inc_if_less(stat, val1, val2) \ + ((stat) += ((val1) < (val2) ? 1 : 0)) +#define stat_dec_if_less(stat, val1, val2) \ + ((stat) -= ((val1) < (val2) ? 1 : 0)) +#else /* STATS */ +#define stat_inc(x) NOP +#define stat_dec(x) NOP +#define stat_inc_if_less(x, v1, v2) NOP +#define stat_dec_if_less(x, v1, v2) NOP +#endif /* STATS */ + +/* Flags for ramzswap pages (table[page_no].flags) */ +enum rzs_pageflags { + /* Page is stored uncompressed */ + RZS_UNCOMPRESSED, + + /* Page consists entirely of zeros */ + RZS_ZERO, + + __NR_RZS_PAGEFLAGS, +}; + +/*-- Data structures */ + +/* Indexed by page no. */ +struct table { + u32 pagenum; + u16 offset; + u8 count; /* object ref count (not yet used) */ + u8 flags; +}; + +struct ramzswap { + struct xv_pool *mem_pool; + void *compress_workmem; + void *compress_buffer; + struct table *table; + struct mutex lock; + struct gendisk *disk; + /* + * This is limit on compressed data size (stats.compr_size) + * Its applicable only when backing swap device is present. + */ + size_t memlimit; /* bytes */ + /* + * This is limit on amount of *uncompressed* worth of data + * we can hold. When backing swap device is provided, it is + * set equal to device size. + */ + size_t disksize; /* bytes */ + + /* backing swap device info */ + struct block_device *backing_swap; + struct file *swap_file; + int old_block_size; +}; + +struct ramzswap_stats { + /* basic stats */ + size_t compr_size; /* compressed size of pages stored - + * needed to enforce memlimit */ + /* more stats */ +#if defined(STATS) + u64 num_reads; /* failed + successful */ + u64 num_writes; /* --do-- */ + u64 failed_reads; /* can happen when memory is too low */ + u64 failed_writes; /* should NEVER! happen */ + u64 invalid_io; /* non-swap I/O requests */ + u64 pages_discard; /* no. of pages freed by discard callback */ + u32 pages_zero; /* no. of zero filled pages */ + u32 pages_stored; /* no. of pages currently stored */ + u32 good_compress; /* no. of pages with compression ratio<=50% */ + u32 pages_expand; /* no. of incompressible pages */ + u64 bdev_num_reads; /* no. of reads on backing dev */ + u64 bdev_num_writes; /* no. of writes on backing dev */ +#endif +}; +/*-- */ + +#endif --- linux-2.6.32.orig/ubuntu/compcache/Makefile +++ linux-2.6.32/ubuntu/compcache/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_BLK_DEV_COMPCACHE) := ramzswap.o xvmalloc.o --- linux-2.6.32.orig/ubuntu/compcache/README +++ linux-2.6.32/ubuntu/compcache/README @@ -0,0 +1,45 @@ +ramzswap: Compressed RAM based swap device +------------------------------------------- + +Project home: http://compcache.googlecode.com + +* Introduction +This is a RAM based block device which acts as swap disk. +Pages swapped to this device are compressed and stored in +memory itself. See project home for use cases, performance +numbers and lot more. + +* Compiling + - Run 'make': this will compile all modules against your kernel. + + - Following kernel modules are created: + - xvmalloc.ko + - ramzswap.ko + +* Using + - Following scipts are included + - use_ramzswap.sh [] [] + This loads all required modules and sets up swap device. + NOTE: script contains detailed documentation on parameters. + + - unuse_ramzswap.sh + Unloads all modules and turns off ramzswap swap device. + +* Common Problems + - If you get lots of compile errors, make sure you have package for + kernel source installed. For e.g., on Fedora its 'kernel-devel' package. + + - If (un)use_ramzswap scripts fail to work, refer to wiki: + http://code.google.com/p/compcache/wiki/CompilingAndUsing + +* Notes + - Statistics are exported via /proc/ramzswap + +Please consider using Issue Tracker: +http://code.google.com/p/compcache/issues/list +for reporting any bugs/feature requests. + +Cheers! +Nitin Gupta +EMail: ngupta at vflare dot org + --- linux-2.6.32.orig/ubuntu/rfkill/pbe5.c +++ linux-2.6.32/ubuntu/rfkill/pbe5.c @@ -0,0 +1,205 @@ +/******************************************************************************* + + 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 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. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Author: + Pedro Ramalhais + + Based on: + av5100.c from http://ipw2100.sourceforge.net/ + +*******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRV_NAME "pbe5" +#define DRV_VERSION "1.3" +#define DRV_DESCRIPTION "SW RF kill switch for Packard Bell EasyNote E5" +#define DRV_AUTHOR "Pedro Ramalhais" +#define DRV_LICENSE "GPL" + +static int radio = 1; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + +MODULE_PARM(radio, "i"); + +#else /* LINUX_VERSION_CODE < 2.6.0 */ + +#include +module_param(radio, int, 1); + +#endif /* LINUX_VERSION_CODE < 2.6.0 */ + +MODULE_PARM_DESC(radio, "controls state of radio (1=on, 0=off)"); + +MODULE_DESCRIPTION(DRV_DESCRIPTION); +MODULE_AUTHOR(DRV_AUTHOR); +MODULE_LICENSE(DRV_LICENSE); + +/* + * NOTE: These values were obtained from disassembling the Icon.exe program + * installed in the Packard Bell EasyNote E5 laptop. The names were guessed, + * so don't rely on them. + */ +#define PBE5_PORT_TOGGLE 0x0b3 +#define PBE5_VALUE_TOGGLE_ON 0x01 +#define PBE5_VALUE_TOGGLE_OFF 0x00 +#define PBE5_PORT_APPLY 0x0b2 +#define PBE5_VALUE_APPLY 0xef + +// Some "booleans" =;-) +#define PBE5_RADIO_OFF 0 +#define PBE5_RADIO_ON 1 + +static int pbe5_radio_status = PBE5_RADIO_ON; + +unsigned char pbe5_get_radio(void) +{ + unsigned char val = 0x00; + + val = inb(PBE5_PORT_TOGGLE); + + return val; +} + +static void pbe5_set_radio(int state_set) +{ + pbe5_radio_status = pbe5_get_radio(); + + if (pbe5_radio_status != state_set) { + // Set the radio toggle register + outb(PBE5_VALUE_TOGGLE_ON, PBE5_PORT_TOGGLE); + // Commit the radio toggle register value + outb(PBE5_VALUE_APPLY, PBE5_PORT_APPLY); + // Update the radio status + pbe5_radio_status = pbe5_get_radio(); + + printk(KERN_INFO DRV_NAME ": Radio turned %s\n", + (state_set == PBE5_RADIO_ON) ? "ON" : "OFF"); + } else { + printk(KERN_INFO DRV_NAME ": Radio already %s\n", + (state_set == PBE5_RADIO_ON) ? "ON" : "OFF"); + } +} + + +/* + * proc stuff + */ +static struct proc_dir_entry *dir_base = NULL; + +static int proc_set_radio(struct file *file, const char *buffer, + unsigned long count, void *data) +{ + pbe5_set_radio(buffer[0] == '0' ? PBE5_RADIO_OFF : PBE5_RADIO_ON); + + return count; +} + +static int proc_get_radio(char *page, char **start, off_t offset, + int count, int *eof, void *data) +{ + int len = 0; + + len += snprintf(page, count, DRV_NAME ": %d\n", + pbe5_radio_status == PBE5_RADIO_OFF ? 0 : 1); + + *eof = 1; + return len; +} + + +static void pbe5_proc_cleanup(void) +{ + if (dir_base) { + remove_proc_entry("radio", dir_base); + remove_proc_entry(DRV_NAME, NULL); + dir_base = NULL; + } +} + + +static int pbe5_proc_init(void) +{ + struct proc_dir_entry *ent; + int err = 0; + + dir_base = create_proc_entry(DRV_NAME, S_IFDIR, NULL); + if (dir_base == NULL) { + printk(KERN_ERR DRV_NAME ": Unable to initialise /proc/" + DRV_NAME "\n"); + err = -ENOMEM; + goto fail; + } + + + ent = create_proc_entry("radio", S_IFREG | S_IRUGO | S_IWUSR, + dir_base); + if (ent) { + ent->read_proc = proc_get_radio; + ent->write_proc = proc_set_radio; + } else { + printk(KERN_ERR + "Unable to initialize /proc/" DRV_NAME "/radio\n"); + err = -ENOMEM; + goto fail; + } + + return 0; + + fail: + pbe5_proc_cleanup(); + return err; +} + +/* + * module stuff + */ +static int __init pbe5_init(void) +{ + pbe5_proc_init(); + + pbe5_set_radio((radio == 1) ? PBE5_RADIO_ON : PBE5_RADIO_OFF); + + return 0; +} + +static void __exit pbe5_exit(void) +{ + pbe5_set_radio(PBE5_RADIO_OFF); + + pbe5_proc_cleanup(); +} + +module_init(pbe5_init); +module_exit(pbe5_exit); + +/* + 1 2 3 4 5 6 7 +12345678901234567890123456789012345678901234567890123456789012345678901234567890 +*/ --- linux-2.6.32.orig/ubuntu/rfkill/Kconfig +++ linux-2.6.32/ubuntu/rfkill/Kconfig @@ -0,0 +1,9 @@ +config AVERATEC_5100P + tristate "Software kill switch for Averatec 5100P" + depends on X86 + default m + +config PACKARDBELL_E5 + tristate "Software kill switch for Packard Bell EasyNote E5" + depends on X86 + default m --- linux-2.6.32.orig/ubuntu/rfkill/BOM +++ linux-2.6.32/ubuntu/rfkill/BOM @@ -0,0 +1,6 @@ +Downloaded from: http://sourceforge.net/project/showfiles.php?group_id=108766 +Current Version: 1.3 +Comments: + +Had to change &proc_root to NULL due to changes in create/remove proc +entry usage. --- linux-2.6.32.orig/ubuntu/rfkill/av5100.c +++ linux-2.6.32/ubuntu/rfkill/av5100.c @@ -0,0 +1,174 @@ +/******************************************************************************* + + Copyright(c) 2003 - 2004 Intel Corporation. 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 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. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Contact Information: + James P. Ketrenos + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + +*******************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define DRV_NAME "av5100" +#define DRV_VERSION "1.3" +#define DRV_DESCRIPTION "SW RF kill switch for Averatec 5100P" +#define DRV_COPYRIGHT "Copyright(c) 2003-2004 Intel Corporation" + +static int radio = 1; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + +MODULE_PARM(radio, "i"); + +#else /* LINUX_VERSION_CODE < 2.6.0 */ + +#include +module_param(radio, int, 1); + +#endif /* LINUX_VERSION_CODE < 2.6.0 */ + +MODULE_PARM_DESC(radio, "controls state of radio (1=on, 0=off)"); + +MODULE_DESCRIPTION(DRV_DESCRIPTION); +MODULE_AUTHOR(DRV_COPYRIGHT); +MODULE_LICENSE("GPL"); + +#define AV5100_RADIO_ON (0xe0) +#define AV5100_RADIO_OFF (0xe1) + +static int av5100_radio = AV5100_RADIO_OFF; + +static void av5100_set_radio(int state) +{ + printk(KERN_INFO DRV_NAME ": Radio being turned %s\n", + (state == AV5100_RADIO_ON) ? "ON" : "OFF"); + outl(0x80020800, 0xcf8); + outb(0x6f, 0x0072); + outl(0x1800ffff, 0x1184); + outb(state, 0x00b2); + av5100_radio = state; +} + + +/* + * proc stuff + */ +static struct proc_dir_entry *dir_base = NULL; + +static int proc_set_radio(struct file *file, const char *buffer, + unsigned long count, void *data) +{ + av5100_set_radio(buffer[0] == '0' ? AV5100_RADIO_OFF : AV5100_RADIO_ON); + + return count; +} + +static int proc_get_radio(char *page, char **start, off_t offset, + int count, int *eof, void *data) +{ + int len = 0; + + len += snprintf(page, count, DRV_NAME ": %d\n", + av5100_radio == AV5100_RADIO_OFF ? 0 : 1); + + *eof = 1; + return len; +} + + +static void av5100_proc_cleanup(void) +{ + if (dir_base) { + remove_proc_entry("radio", dir_base); + remove_proc_entry(DRV_NAME, NULL); + dir_base = NULL; + } +} + + +static int av5100_proc_init(void) +{ + struct proc_dir_entry *ent; + int err = 0; + + dir_base = create_proc_entry(DRV_NAME, S_IFDIR, NULL); + if (dir_base == NULL) { + printk(KERN_ERR DRV_NAME ": Unable to initialise /proc/" + DRV_NAME "\n"); + err = -ENOMEM; + goto fail; + } + + + ent = create_proc_entry("radio", S_IFREG | S_IRUGO | S_IWUSR, + dir_base); + if (ent) { + ent->read_proc = proc_get_radio; + ent->write_proc = proc_set_radio; + } else { + printk(KERN_ERR + "Unable to initialize /proc/" DRV_NAME "/radio\n"); + err = -ENOMEM; + goto fail; + } + + return 0; + + fail: + av5100_proc_cleanup(); + return err; +} + +/* + * module stuff + */ +static int __init av5100_init(void) +{ + av5100_proc_init(); + + av5100_set_radio((radio == 1) ? AV5100_RADIO_ON : AV5100_RADIO_OFF); + + return 0; +} + +static void __exit av5100_exit(void) +{ + av5100_set_radio(AV5100_RADIO_OFF); + + av5100_proc_cleanup(); +} + +module_init(av5100_init); +module_exit(av5100_exit); + +/* + 1 2 3 4 5 6 7 +12345678901234567890123456789012345678901234567890123456789012345678901234567890 +*/ --- linux-2.6.32.orig/ubuntu/rfkill/Makefile +++ linux-2.6.32/ubuntu/rfkill/Makefile @@ -0,0 +1,6 @@ +# +# Makefile for Ubuntu additional drivers +# + +obj-$(CONFIG_AVERATEC_5100P) += av5100.o +obj-$(CONFIG_PACKARDBELL_E5) += pbe5.o --- linux-2.6.32.orig/ubuntu/omnibook/lib.c +++ linux-2.6.32/ubuntu/omnibook/lib.c @@ -0,0 +1,81 @@ +/* + * lib.c -- Generic helpers functions + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include "hardware.h" +#include "compat.h" +#include + +/* + * Generic funtion for applying a mask on a value + * Hack: degenerate to omnibook_toggle if there is no read method + * of if the read address is 0, this is used in blank.c + */ +int __omnibook_apply_write_mask(const struct omnibook_operation *io_op, int toggle) +{ + int retval = 0; + int mask; + u8 data; + + if(!(io_op->backend->byte_read && io_op->read_addr)) + return __omnibook_toggle(io_op,toggle); + + if ((retval = __backend_byte_read(io_op, &data))) + return retval; + + if (toggle == 1) + mask = io_op->on_mask; + else if (toggle == 0) + mask = io_op->off_mask; + else + return -EINVAL; + + if (mask > 0) + data |= (u8) mask; + else if (mask < 0) + data &= ~((u8) (-mask)); + else + return -EINVAL; + + retval = __backend_byte_write(io_op, data); + + return retval; +} + +/* + * Helper for toggle like operations + */ +int __omnibook_toggle(const struct omnibook_operation *io_op, int toggle) +{ + int retval; + u8 data; + + data = toggle ? io_op->on_mask : io_op->off_mask; + retval = __backend_byte_write(io_op, data); + return retval; +} + +void omnibook_report_key( struct input_dev *dev, unsigned int keycode) +{ + input_report_key(dev, keycode, 1); + input_sync(dev); + input_report_key(dev, keycode, 0); + input_sync(dev); +} + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/nbsmi.c +++ linux-2.6.32/ubuntu/omnibook/nbsmi.c @@ -0,0 +1,968 @@ +/* + * nbsmi.c -- Toshiba SMI low-level acces code + * + * 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. + * + * Written by Mathieu Bérard , 2006 + * + * Sources of inspirations for this code were: + * -Toshiba via provided hardware specification + * -Thorsten Zachmann with the 's1bl' project + * -Frederico Munoz with the 'tecra_acpi' project + * Thanks to them + */ + +#include "omnibook.h" +#include "hardware.h" +#include +#include +#include +#include +#include +#include +#include + +/* copied from drivers/input/serio/i8042-io.h */ +#define I8042_KBD_PHYS_DESC "isa0060/serio0" + +/* + * ATI's IXP PCI-LPC bridge + */ +#define INTEL_PMBASE 0x40 +#define INTEL_GPE0_EN 0x2c + +#define BUFFER_SIZE 0x20 +#define INTEL_OFFSET 0x60 +#define INTEL_SMI_PORT 0xb2 /* APM_CNT port in INTEL ICH specs */ + +/* + * Toshiba Specs state 0xef here but: + * -this would overflow (ef + 19 > ff) + * -code from Toshiba use e0, which make much more sense + */ + +#define ATI_OFFSET 0xe0 +#define ATI_SMI_PORT 0xb0 + +#define EC_INDEX_PORT 0x300 +#define EC_DATA_PORT 0x301 + +/* Masks decode for GetAeral */ +#define WLEX_MASK 0x4 +#define WLAT_MASK 0x8 +#define BTEX_MASK 0x1 +#define BTAT_MASK 0x2 + +/* + * Private data of this backend + */ +struct nbsmi_backend_data { + struct pci_dev *lpc_bridge; /* Southbridge chip ISA bridge/LPC interface PCI device */ + u8 start_offset; /* Start offset in CMOS memory */ + struct input_dev *nbsmi_input_dev; + struct work_struct fnkey_work; +}; + +/* + * Possible list of supported southbridges + * Here mostly to implement a more or less clean PCI probing + * Works only because of previous DMI probing. + * It's in compal.c + */ +extern const struct pci_device_id lpc_bridge_table[]; + +/* + * Since we are going to trigger an SMI, all registers (I assume this does not + * include esp and maybe ebp) and eflags may be mangled in the + * process. + * We also disable preemtion and IRQs upon SMI call. + */ +static inline u32 ati_do_smi_call(u16 function) +{ + unsigned long flags; + u32 retval = 0; + + local_irq_save(flags); + preempt_disable(); + +/* + * eflags, eax, ebx, ecx, edx, esi and edi are clobbered upon writing to SMI_PORT + * thus the clobber list. + * + * Equivalent pseudocode: + * + * eax = function; [non null] + * outw(eax, ATI_SMI_PORT); <- This Trigger an SMI + * if( eax == 0 ) [success if eax has been cleared] + * goto out; + * if( inb(ATI_SMI_PORT + 1) == 0) [if not in eax, success maybe be stored here] + * goto out; + * retval = -EIO; [too bad] + * out: + */ + __asm__ __volatile__("outw %%ax, %2; \ + orw %%ax, %%ax; \ + jz 1f; \ + inw %3, %%ax; \ + orw %%ax, %%ax; \ + jz 1f; \ + movl %4, %0; \ + 1:;" + : "=m" (retval) + : "a"(function), "N"(ATI_SMI_PORT), "N"(ATI_SMI_PORT+1), "i"(-EIO) + : "memory", "ebx", "ecx", "edx", "esi", "edi", "cc"); + + local_irq_restore(flags); + preempt_enable_no_resched(); + return retval; +} + +static inline u32 intel_do_smi_call(u16 function, struct pci_dev *lpc_bridge) +{ + u32 state; + unsigned long flags; + u32 retval = 0; + u32 sci_en = 0; + + local_irq_save(flags); + preempt_disable(); + +/* + * We get the PMBASE offset ( bits 15:7 at 0x40 offset of PCI config space ) + * And we access offset 2c (GPE0_EN), save the state, disable all SCI + * and restore the state after the SMI call + */ + pci_read_config_dword(lpc_bridge, INTEL_PMBASE, &sci_en); + sci_en = sci_en & 0xff80; /* Keep bits 15:7 */ + sci_en += INTEL_GPE0_EN; /* GPEO_EN offset */ + state = inl(sci_en); + outl(0, sci_en); + +/* + * eflags, eax, ebx, ecx, edx, esi and edi are clobbered upon writing to SMI_PORT + * thus the clobber list. + * + * Equivalent pseudocode: + * + * eax = function; [non null] + * outw(eax, INTEL_SMI_PORT); <- This Trigger an SMI + * if( eax == 0 ) [success if eax has been cleared] + * goto out; + * retval = -EIO; [too bad] + * out: + */ + __asm__ __volatile__("outw %%ax, %2; \ + orw %%ax, %%ax; \ + jz 1f; \ + movl %3, %0; \ + 1:;" + : "=m" (retval) + : "a"(function), "N"(INTEL_SMI_PORT), "i"(-EIO) + : "memory", "ebx", "ecx", "edx", "esi", "edi", "cc"); + + outl(state, sci_en); + local_irq_restore(flags); + preempt_enable_no_resched(); + return retval; +} + +static int nbsmi_smi_command(u16 function, + const u8 * inputbuffer, + u8 * outputbuffer, + const struct nbsmi_backend_data *priv_data) +{ + int count; + u32 retval = 0; + + + for (count = 0; count < BUFFER_SIZE; count++) { + outb(count + priv_data->start_offset, RTC_PORT(2)); + outb(*(inputbuffer + count), RTC_PORT(3)); + } + +/* + * We have to write 0xe4XX to smi_port + * where XX is the SMI function code + */ + function = (function & 0xff) << 8; + function |= 0xe4; + + switch (priv_data->lpc_bridge->vendor) { + case PCI_VENDOR_ID_INTEL: + retval = intel_do_smi_call(function, priv_data->lpc_bridge); + break; + case PCI_VENDOR_ID_ATI: + retval = ati_do_smi_call(function); + break; + default: + BUG(); + } + + if (retval) + printk(O_ERR "smi_command failed with error %u.\n", retval); + + for (count = 0; count < BUFFER_SIZE; count++) { + outb(count + priv_data->start_offset, RTC_PORT(2)); + *(outputbuffer + count) = inb(RTC_PORT(3)); + } + + return retval; +} + +static int nbsmi_smi_read_command(const struct omnibook_operation *io_op, u8 * data) +{ + int retval; + u8 *inputbuffer; + u8 *outputbuffer; + struct nbsmi_backend_data *priv_data = io_op->backend->data; + + if (!priv_data) + return -ENODEV; + + inputbuffer = kcalloc(BUFFER_SIZE, sizeof(u8), GFP_KERNEL); + if (!inputbuffer) { + retval = -ENOMEM; + goto error1; + } + + outputbuffer = kcalloc(BUFFER_SIZE, sizeof(u8), GFP_KERNEL); + if (!outputbuffer) { + retval = -ENOMEM; + goto error2; + } + + retval = nbsmi_smi_command((u16) io_op->read_addr, inputbuffer, outputbuffer, priv_data); + if (retval) + goto out; + + *data = outputbuffer[0]; + + if (io_op->read_mask) + *data &= io_op->read_mask; + + out: + kfree(outputbuffer); + error2: + kfree(inputbuffer); + error1: + return retval; +} + +static int nbsmi_smi_write_command(const struct omnibook_operation *io_op, u8 data) +{ + int retval; + u8 *inputbuffer; + u8 *outputbuffer; + struct nbsmi_backend_data *priv_data = io_op->backend->data; + + if (!priv_data) + return -ENODEV; + + inputbuffer = kcalloc(BUFFER_SIZE, sizeof(u8), GFP_KERNEL); + if (!inputbuffer) { + retval = -ENOMEM; + goto error1; + } + + outputbuffer = kcalloc(BUFFER_SIZE, sizeof(u8), GFP_KERNEL); + if (!outputbuffer) { + retval = -ENOMEM; + goto error2; + } + + inputbuffer[0] = data; + + retval = nbsmi_smi_command((u16) io_op->write_addr, inputbuffer, outputbuffer, priv_data); + + kfree(outputbuffer); + error2: + kfree(inputbuffer); + error1: + return retval; +} + +/* + * Read/Write to INDEX/DATA interface at port 0x300 (SMSC Mailbox registers) + */ +static inline void nbsmi_ec_read_command(u8 index, u8 * data) +{ + outb(index, EC_INDEX_PORT); + *data = inb(EC_DATA_PORT); +} + +#if 0 +static inline void nbsmi_ec_write_command(u8 index, u8 data) +{ + outb(index, EC_INDEX_PORT); + outb(data, EC_DATA_PORT); +} +#endif + + +/* + * Hotkeys workflow: + * 1. Fn+Foo pressed + * 2. Scancode 0x6d generated by kbd controller + * 3. Scancode 0x6d caught by omnibook input handler + * 4. SMI Call issued -> Got keycode of last actually pressed Fn key + * 5. nbsmi_scan_table used to associate a detected keycode with a generated one + * 6. Generated keycode issued using the omnibook input device + */ + +/* + * The input handler should only bind with the standard AT keyboard. + * XXX: Scancode 0x6d won't be detected if the keyboard has already been + * grabbed (the Xorg event input driver do that) + */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) +static int hook_connect(struct input_handler *handler, + struct input_dev *dev, + const struct input_device_id *id) +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) +static struct input_handle *hook_connect(struct input_handler *handler, + struct input_dev *dev, + const struct input_device_id *id) +#else +static struct input_handle *hook_connect(struct input_handler *handler, + struct input_dev *dev, + struct input_device_id *id) +#endif +{ + struct input_handle *handle; + int error; + + /* the 0x0001 vendor magic number is found in atkbd.c */ + if(!(dev->id.bustype == BUS_I8042 && dev->id.vendor == 0x0001)) + goto out_nobind; + + if(!strstr(dev->phys, I8042_KBD_PHYS_DESC)) + goto out_nobind; + + dprintk("hook_connect for device %s.\n", dev->name); + + if(dev->grab) + printk(O_WARN "Input device is grabbed by %s, Fn hotkeys won't work.\n", + dev->grab->name); + + handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL); + if (!handle) +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + return -ENOMEM; +#else + return NULL; +#endif + + handle->dev = dev; + handle->handler = handler; + handle->name = "omnibook_scancode_hook"; + handle->private = handler->private; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + error = input_register_handle(handle); + if (error) { + dprintk("register_handle failed\n"); + goto out_nobind_free; + } + error = input_open_device(handle); + if (error) { + dprintk("register_handle failed\n"); + input_unregister_handle(handle); + goto out_nobind_free; + } + +#else + error = input_open_device(handle); + if (error==0) dprintk("Input device opened\n"); + else { + dprintk("opening input device failed\n"); + goto out_nobind_free; + } +#endif + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + return 0; +out_nobind_free: + kfree(handle); +out_nobind: + return -ENODEV; +#else + return handle; +out_nobind_free: + kfree(handle); +out_nobind: + return NULL; +#endif +} + +static void hook_disconnect(struct input_handle *handle) +{ + dprintk("hook_disconnect.\n"); + input_close_device(handle); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + input_unregister_handle(handle); +#endif + kfree(handle); +} + +/* + * Hook for scancode 0x6d. Actual handling is done in a workqueue as + * the nbsmi backend might sleep. + */ + +static void hook_event(struct input_handle *handle, unsigned int event_type, + unsigned int event_code, int value) +{ + if (event_type == EV_MSC && event_code == MSC_SCAN && value == SMI_FN_SCAN) + schedule_work(&((struct nbsmi_backend_data *)handle->private)->fnkey_work); +} + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) +static const struct input_device_id hook_ids[] = { +#else +static struct input_device_id hook_ids[] = { +#endif + { + .flags = INPUT_DEVICE_ID_MATCH_EVBIT, + .evbit = { BIT(EV_KEY) }, + }, + { }, /* Terminating entry */ +}; + +static struct input_handler hook_handler = { + .event = hook_event, + .connect = hook_connect, + .disconnect = hook_disconnect, + .name = OMNIBOOK_MODULE_NAME, + .id_table = hook_ids, +}; + +/* + * Define some KEY_ that may be missing in input.h for some kernel versions + */ +#ifndef KEY_WLAN +#define KEY_WLAN 238 +#endif + +/* + * Detected scancode to keycode table + */ +static const struct { + unsigned int scancode; + unsigned int keycode; +} nbsmi_scan_table[] = { + { KEY_ESC, KEY_MUTE}, + { KEY_F1, KEY_FN_F1}, + { KEY_F2, KEY_PROG1}, + { KEY_F3, KEY_SLEEP}, + { KEY_F4, KEY_SUSPEND}, + { KEY_F5, KEY_SWITCHVIDEOMODE}, + { KEY_F6, KEY_BRIGHTNESSDOWN}, + { KEY_F7, KEY_BRIGHTNESSUP}, + { KEY_F8, KEY_WLAN}, + { KEY_F9, KEY_FN_F9}, + { KEY_SPACE, KEY_ZOOM}, + { 0,0}, +}; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) +static void omnibook_handle_fnkey(struct work_struct *work); +#else +static void omnibook_handle_fnkey(void* data); +#endif + +/* + * Register the input handler and the input device in the input subsystem + */ +static int register_input_subsystem(struct nbsmi_backend_data *priv_data) +{ + int i, retval = 0; + struct input_dev *nbsmi_input_dev; + + nbsmi_input_dev = input_allocate_device(); + if (!nbsmi_input_dev) { + retval = -ENOMEM; + goto out; + } + + nbsmi_input_dev->name = "Omnibook NbSMI scancode generator"; + nbsmi_input_dev->phys = "omnibook/input0"; + nbsmi_input_dev->id.bustype = BUS_HOST; + + set_bit(EV_KEY, nbsmi_input_dev->evbit); + + for(i=0 ; i < ARRAY_SIZE(nbsmi_scan_table); i++) + set_bit(nbsmi_scan_table[i].keycode, nbsmi_input_dev->keybit); + + retval = input_register_device(nbsmi_input_dev); + if(retval) { + input_free_device(nbsmi_input_dev); + goto out; + } + + priv_data->nbsmi_input_dev = nbsmi_input_dev; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) + INIT_WORK(&priv_data->fnkey_work, *omnibook_handle_fnkey); +#else + INIT_WORK(&priv_data->fnkey_work, *omnibook_handle_fnkey, priv_data); +#endif + + + hook_handler.private = priv_data; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + retval = input_register_handler(&hook_handler); +#else + input_register_handler(&hook_handler); +#endif + + out: + return retval; +} + +/* + * Try to init the backend + * This function can be called blindly as it use a kref + * to check if the init sequence was already done. + */ +static int omnibook_nbsmi_init(const struct omnibook_operation *io_op) +{ + int retval = 0; + int i; + u8 ec_data; + u32 smi_port = 0; + struct nbsmi_backend_data *priv_data; + + /* ectypes other than TSM40 have no business with this backend */ + if (!(omnibook_ectype & TSM40)) + return -ENODEV; + + if (io_op->backend->already_failed) { + dprintk("NbSmi backend init already failed, skipping.\n"); + return -ENODEV; + } + + if (!io_op->backend->data) { + /* Fist use of the backend */ + dprintk("Try to init NbSmi\n"); + mutex_init(&io_op->backend->mutex); + mutex_lock(&io_op->backend->mutex); + kref_init(&io_op->backend->kref); + + priv_data = kzalloc(sizeof(struct nbsmi_backend_data), GFP_KERNEL); + if (!priv_data) { + retval = -ENOMEM; + goto error0; + } + + /* PCI probing: find the LPC Super I/O bridge PCI device */ + for (i = 0; !priv_data->lpc_bridge && lpc_bridge_table[i].vendor; ++i) + priv_data->lpc_bridge = + pci_get_device(lpc_bridge_table[i].vendor, lpc_bridge_table[i].device, + NULL); + + if (!priv_data->lpc_bridge) { + printk(O_ERR "Fail to find a supported LPC I/O bridge, please report\n"); + retval = -ENODEV; + goto error1; + } + + if ((retval = pci_enable_device(priv_data->lpc_bridge))) { + printk(O_ERR "Unable to enable PCI device.\n"); + goto error2; + } + + switch (priv_data->lpc_bridge->vendor) { + case PCI_VENDOR_ID_INTEL: + priv_data->start_offset = INTEL_OFFSET; + smi_port = INTEL_SMI_PORT; + break; + case PCI_VENDOR_ID_ATI: + priv_data->start_offset = ATI_OFFSET; + smi_port = ATI_SMI_PORT; + break; + default: + BUG(); + } + + if (!request_region(smi_port, 2, OMNIBOOK_MODULE_NAME)) { + printk(O_ERR "Request SMI I/O region error\n"); + retval = -ENODEV; + goto error2; + } + + if (!request_region(EC_INDEX_PORT, 2, OMNIBOOK_MODULE_NAME)) { + printk(O_ERR "Request EC I/O region error\n"); + retval = -ENODEV; + goto error3; + } + + /* + * Try some heuristic tests to avoid enabling this interface on unsuported laptops: + * See what a port 300h read index 8f gives. Guess there is nothing if read 0xff + */ + + nbsmi_ec_read_command(SMI_FN_PRESSED, &ec_data); + dprintk("NbSmi test probe read: %x\n", ec_data); + if (ec_data == 0xff) { + printk(O_ERR "Probing at SMSC Mailbox registers failed, disabling NbSmi\n"); + retval = -ENODEV; + goto error4; + } + + retval = register_input_subsystem(priv_data); + if(retval) + goto error4; + + io_op->backend->data = priv_data; + + dprintk("NbSmi init ok\n"); + mutex_unlock(&io_op->backend->mutex); + return 0; + } else { + dprintk("NbSmi has already been initialized\n"); + kref_get(&io_op->backend->kref); + return 0; + } + error4: + release_region(EC_INDEX_PORT, 2); + error3: + release_region(smi_port, 2); + error2: + pci_dev_put(priv_data->lpc_bridge); + error1: + kfree(priv_data); + io_op->backend->data = NULL; + error0: + io_op->backend->already_failed = 1; + mutex_unlock(&io_op->backend->mutex); + mutex_destroy(&io_op->backend->mutex); + return retval; +} + +/* + * Free all allocated stuff and unregister from the input subsystem + */ +static void nbsmi_free(struct kref *ref) +{ + u32 smi_port = 0; + struct omnibook_backend *backend; + struct nbsmi_backend_data *priv_data; + + dprintk("NbSmi not used anymore: disposing\n"); + + backend = container_of(ref, struct omnibook_backend, kref); + priv_data = backend->data; + + flush_scheduled_work(); + input_unregister_handler(&hook_handler); + input_unregister_device(priv_data->nbsmi_input_dev); + + mutex_lock(&backend->mutex); + + switch (priv_data->lpc_bridge->vendor) { + case PCI_VENDOR_ID_INTEL: + smi_port = INTEL_SMI_PORT; + break; + case PCI_VENDOR_ID_ATI: + smi_port = ATI_SMI_PORT; + break; + default: + BUG(); + } + + pci_dev_put(priv_data->lpc_bridge); + release_region(smi_port, 2); + release_region(EC_INDEX_PORT, 2); + kfree(priv_data); + backend->data = NULL; + mutex_unlock(&backend->mutex); + mutex_destroy(&backend->mutex); +} + +static void omnibook_nbsmi_exit(const struct omnibook_operation *io_op) +{ + /* ectypes other than TSM40 have no business with this backend */ + BUG_ON(!(omnibook_ectype & TSM40)); + dprintk("Trying to dispose NbSmi\n"); + kref_put(&io_op->backend->kref, nbsmi_free); +} + +/* + * Adjust the lcd backlight level by delta. + * Used for Fn+F6/F7 keypress + */ +static int adjust_brighness(int delta) +{ + struct omnibook_feature *lcd_feature = omnibook_find_feature("lcd"); + struct omnibook_operation *io_op; + int retval = 0; + u8 brgt; + + if(!lcd_feature) + return -ENODEV; + + io_op = lcd_feature->io_op; + + mutex_lock(&io_op->backend->mutex); + + if(( retval = __backend_byte_read(io_op, &brgt))) + goto out; + + dprintk("FnF6/F7 pressed: adjusting britghtnes.\n"); + + if (((int) brgt + delta) < 0) + brgt = 0; + else if ((brgt + delta) > omnibook_max_brightness) + brgt = omnibook_max_brightness; + else + brgt += delta; + + retval = __backend_byte_write(io_op, brgt); + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static const struct omnibook_operation last_scan_op = SIMPLE_BYTE(SMI,SMI_GET_FN_LAST_SCAN,0); + +/* + * Workqueue handler for Fn hotkeys + */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) +static void omnibook_handle_fnkey(struct work_struct *work) +#else +static void omnibook_handle_fnkey(void* data) +#endif +{ + int i; + u8 gen_scan; + struct input_dev *input_dev; + + if(backend_byte_read(&last_scan_op, &gen_scan)) + return; + + dprintk("detected scancode %x.\n", gen_scan); + switch(gen_scan) { + case KEY_F6: + adjust_brighness(-1); + break; + case KEY_F7: + adjust_brighness(+1); + break; + } + + for(i = 0 ; i < ARRAY_SIZE(nbsmi_scan_table); i++) { + if( gen_scan == nbsmi_scan_table[i].scancode) { + dprintk("generating keycode %i.\n", nbsmi_scan_table[i].keycode); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) + input_dev = container_of(work, struct nbsmi_backend_data, fnkey_work)->nbsmi_input_dev; +#else + input_dev = ((struct nbsmi_backend_data *) data)->nbsmi_input_dev; +#endif + omnibook_report_key(input_dev, nbsmi_scan_table[i].keycode); + break; + } + } +} + +static int omnibook_nbsmi_get_wireless(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval = 0; + struct omnibook_operation aerial_op = SIMPLE_BYTE(SMI, SMI_GET_KILL_SWITCH, 0); + u8 data; + + if ((retval = nbsmi_smi_read_command(&aerial_op, &data))) + goto out; + + dprintk("get_wireless (kill switch) raw_state: %x\n", data); + + *state = data ? KILLSWITCH : 0; + + aerial_op.read_addr = SMI_GET_AERIAL; + + if ((retval = nbsmi_smi_read_command(&aerial_op, &data))) + goto out; + + dprintk("get_wireless (aerial) raw_state: %x\n", data); + + *state |= (data & WLEX_MASK) ? WIFI_EX : 0; + *state |= (data & WLAT_MASK) ? WIFI_STA : 0; + *state |= (data & BTEX_MASK) ? BT_EX : 0; + *state |= (data & BTAT_MASK) ? BT_STA : 0; + + out: + return retval; +} + +static int omnibook_nbsmi_set_wireless(const struct omnibook_operation *io_op, unsigned int state) +{ + int retval = 0; + u8 data; + struct omnibook_operation aerial_op = SIMPLE_BYTE(SMI, SMI_SET_AERIAL, 0); + + data = !!(state & BT_STA); + data |= !!(state & WIFI_STA) << 0x1; + + dprintk("set_wireless raw_state: %x\n", data); + + retval = nbsmi_smi_write_command(&aerial_op, data); + + return retval; +} + +static int omnibook_nbmsi_hotkeys_get(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval; + u8 data = 0; + struct omnibook_operation hotkeys_op = SIMPLE_BYTE(SMI, SMI_GET_FN_INTERFACE, 0); + + retval = nbsmi_smi_read_command(&hotkeys_op, &data); + if (retval < 0) + return retval; + + dprintk("get_hotkeys raw_state: %x\n", data); + + *state = (data & SMI_FN_KEYS_MASK) ? HKEY_FN : 0; + *state |= (data & SMI_STICK_KEYS_MASK) ? HKEY_STICK : 0; + *state |= (data & SMI_FN_TWICE_LOCK_MASK) ? HKEY_TWICE_LOCK : 0; + *state |= (data & SMI_FN_DOCK_MASK) ? HKEY_DOCK : 0; + + return 0; +} + + +static int omnibook_nbmsi_hotkeys_set(const struct omnibook_operation *io_op, unsigned int state) +{ + int i, retval; + u8 data, rdata; + struct omnibook_operation hotkeys_op = SIMPLE_BYTE(SMI, SMI_SET_FN_F5_INTERFACE, 0); + u8* data_array; + + data = !!(state & HKEY_FNF5); + + dprintk("set_hotkeys (Fn F5) raw_state: %x\n", data); + + retval = nbsmi_smi_write_command(&hotkeys_op, data); + if (retval < 0) + return retval; + + hotkeys_op.write_addr = SMI_SET_FN_INTERFACE; + hotkeys_op.read_addr = SMI_GET_FN_INTERFACE; + + data = (state & HKEY_FN) ? SMI_FN_KEYS_MASK : 0; + data |= (state & HKEY_STICK) ? SMI_STICK_KEYS_MASK : 0; + data |= (state & HKEY_TWICE_LOCK) ? SMI_FN_TWICE_LOCK_MASK : 0; + data |= (state & HKEY_DOCK) ? SMI_FN_DOCK_MASK : 0; + + dprintk("set_hotkeys (Fn interface) raw_state: %x\n", data); + + /* + * Hardware seems to be quite stubborn and multiple retries may be + * required. The criteria here is simple: retry until probed state match + * the requested one (with timeout). + */ + + data_array = kcalloc(250, sizeof(u8), GFP_KERNEL); + if(!data_array) + return -ENODEV; + + for (i = 0; i < 250; i++) { + retval = nbsmi_smi_write_command(&hotkeys_op, data); + if (retval) + goto out; + mdelay(1); + retval = nbsmi_smi_read_command(&hotkeys_op, &rdata); + if(retval) + goto out; + data_array[i] = rdata; + if(rdata == data) { + dprintk("check loop ok after %i iters\n.",i); + retval = 0; + goto out; + } + } + dprintk("error or check loop timeout !!\n"); + dprintk("forensics datas: "); + for (i = 0; i < 250; i++) + dprintk_simple("%x ", data_array[i]); + dprintk_simple("\n"); +out: + kfree(data_array); + return retval; +} + +static const unsigned int nbsmi_display_mode_list[] = { + DISPLAY_LCD_ON, + DISPLAY_LCD_ON | DISPLAY_CRT_ON, + DISPLAY_CRT_ON, + DISPLAY_LCD_ON | DISPLAY_TVO_ON, + DISPLAY_TVO_ON, +}; + +static int omnibook_nbmsi_display_get(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval = 0; + u8 data; + + retval = nbsmi_smi_read_command(io_op, &data); + if (retval < 0) + return retval; + + if (data > (ARRAY_SIZE(nbsmi_display_mode_list) - 1)) + return -EIO; + + *state = nbsmi_display_mode_list[data]; + + return DISPLAY_LCD_ON | DISPLAY_CRT_ON | DISPLAY_TVO_ON; +} + +static int omnibook_nbmsi_display_set(const struct omnibook_operation *io_op, unsigned int state) +{ + int retval; + int i; + u8 matched = 255; + + for (i = 0; i < ARRAY_SIZE(nbsmi_display_mode_list); i++) { + if (nbsmi_display_mode_list[i] == state) { + matched = i; + break; + } + } + + if(matched == 255) { + printk(O_ERR "Display mode %x is unsupported.\n", state); + return -EINVAL; + } + + retval = nbsmi_smi_write_command(io_op, matched); + if (retval < 0) + return retval; + + return DISPLAY_LCD_ON | DISPLAY_CRT_ON | DISPLAY_TVO_ON; +} + +struct omnibook_backend nbsmi_backend = { + .name = "nbsmi", + .hotkeys_read_cap = HKEY_FN | HKEY_STICK | HKEY_TWICE_LOCK | HKEY_DOCK, + .hotkeys_write_cap = HKEY_FN | HKEY_STICK | HKEY_TWICE_LOCK | HKEY_DOCK | HKEY_FNF5, + .init = omnibook_nbsmi_init, + .exit = omnibook_nbsmi_exit, + .byte_read = nbsmi_smi_read_command, + .byte_write = nbsmi_smi_write_command, + .aerial_get = omnibook_nbsmi_get_wireless, + .aerial_set = omnibook_nbsmi_set_wireless, + .hotkeys_get = omnibook_nbmsi_hotkeys_get, + .hotkeys_set = omnibook_nbmsi_hotkeys_set, + .display_get = omnibook_nbmsi_display_get, + .display_set = omnibook_nbmsi_display_set, +}; --- linux-2.6.32.orig/ubuntu/omnibook/laptop.h +++ linux-2.6.32/ubuntu/omnibook/laptop.h @@ -0,0 +1,1077 @@ +/* + * laptop.h -- Various structures about supported hardware + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Written by Mathieu Bérard , 2006 + */ + + +#define HP_SIGNATURE "Hewlett-Packard" + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) +static int __init dmi_matched(struct dmi_system_id *dmi); +#else +static int __init dmi_matched(const struct dmi_system_id *dmi); +#endif + +static struct dmi_system_id omnibook_ids[] __initdata = { + { + .callback = dmi_matched, + .ident = "HP OmniBook XE3 GF", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook XE3 GF"), + }, + .driver_data = (void *) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook XT1000", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook XT1000"), + }, + .driver_data = (void *) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook XE2 DC", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook XE2 DC"), + }, + .driver_data = (void *) XE2 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook XE3 GC", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook XE3 GC"), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook XE3 GD / Pavilion N5430", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook XE3 GD"), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook XE3 GE / Pavilion N5415", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook XE3 GE"), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 500 FA", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 500 FA"), + }, + .driver_data = (void*) OB500 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 510 FB", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 510 FB"), + }, + .driver_data = (void*) OB510 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 4150", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 4150"), + }, + .driver_data = (void*) OB4150 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 900 B", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 900 B"), + }, + .driver_data = (void*) OB4150 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 6000 EA", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 6000 EA"), + }, + .driver_data = (void*) OB6000 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 6100 EB", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 6100 EB"), + }, + .driver_data = (void*) OB6100 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook xe4000/xe4100", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook xe4000"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook xe4400", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook xe4400"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook xe4500", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook xe4500"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP OmniBook 6200 EG / vt6200 / xt 6200", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook 6200 EG"), + }, + .driver_data = (void*) XE4500 + }, + /* There are no model specific strings of some HP OmniBook XT1500 */ + { + .callback = dmi_matched, + .ident = "HP OmniBook XT1500", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP OmniBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP OmniBook"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion ze4000 / ze4125", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP NoteBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP NoteBook ze4000"), + }, + .driver_data = (void*) XE4500 + }, + /* There are no model specific strings of some HP Pavilion xt155 and some HP Pavilion ze4100 + * There are no model specific strings of some HP nx9000 */ + { + .callback = dmi_matched, + .ident = "HP Pavilion xt155 / ze4100 / nx9000", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP NoteBook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP NoteBook PC"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion ZU1000 FA / ZU1000 FA / ZU1175", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion ZU1000 FA"), + }, + .driver_data = (void*) OB500 + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion Notebook XE3 GC / N5290", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook XE3 GC"), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion Notebook GD / N5441", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook Model GD"), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion Notebook GE / XH545", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook Model GE"), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion Notebook ZT1000 / ZT1141", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"), + }, + .driver_data = (void*) XE3GF + }, + /* There are no model specific strings of some HP Pavilion ZT1175 and ZT1195 notebooks */ + { + .callback = dmi_matched, + .ident = "HP Pavilion ZT1175 / ZT1195", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), + DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion ze4200 series", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ze4200"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion ze4300 series", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ze4300"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion ze4500 series", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ze4500"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP Pavilion ze8500 series", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ze8500"), + }, + .driver_data = (void*) XE4500 + }, + /* Compaq nx9000 */ + { + .callback = dmi_matched, + .ident = "HP Compaq nx9000", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP nx9000"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP Compaq nx9005", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP nx9005"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP Compaq nx9010", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP nx9010"), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1000", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1000"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1005", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1005"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1110", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1110"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1115", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1115"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1130", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1130"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1700-100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1700-100"), + }, + .driver_data = (void*) AMILOD + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1700-200", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1700-200"), + }, + .driver_data = (void*) AMILOD + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1700-300", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1700-300"), + }, + .driver_data = (void*) AMILOD + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1700-400", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1700-400"), + }, + .driver_data = (void*) AMILOD + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1700-500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1700-500"), + }, + .driver_data = (void*) AMILOD + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1900", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1900"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1905", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1905"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1950", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1950"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1955", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S1955"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 2430", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S2430"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 2435", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S2435"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 3000", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S3000"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 3005", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "S3005"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1000", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1000"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1005", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1005"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1110", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1110"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1115", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1115"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1115", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Toshiba 1115"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1900", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1900"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1905", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1905"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1950", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1950"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 1955", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 1955"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 2430", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 2430"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 2435", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 2435"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 3000", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 3000"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite 3005", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite 3005"), + }, + .driver_data = (void*) XE3GF, + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite A70", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A70"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite A75", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A75"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite A80", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A80"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite A105", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A105"), + }, + .driver_data = (void*) TSA105 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite A100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A100"), + }, + .driver_data = (void*) TSA105 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite P100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P100"), + }, + .driver_data = (void*) TSA105 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite P10", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"), + }, + .driver_data = (void*) TSP10 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite P15", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P15"), + }, + .driver_data = (void*) TSP10 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite P20", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P20"), + }, + .driver_data = (void*) TSP10 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite P25", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P25"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M30X", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M30X"), + }, + .driver_data = (void*) TSM30X + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M35X", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M35X"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M50", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M50"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M60", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M60"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M70", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M70"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE M100"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M100"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M115", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M115"), + }, + .driver_data = (void*) TSA105 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M40X", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M40X"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M40", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M40"), + }, + .driver_data = (void*) TSM40 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite M45", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M45"), + }, + .driver_data = (void*) TSM40 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Satellite X205-S9800", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite X205"), + }, + .driver_data = (void*) TSX205 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Tecra S1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "TECRA S1"), + }, + .driver_data = (void*) TSM40 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Tecra S1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Tecra S1"), + }, + .driver_data = (void*) TSM40 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Tecra S2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Tecra S2"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Tecra A4", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "Tecra A4"), + }, + .driver_data = (void*) TSM40 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Tecra A6", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "TECRA A6"), + }, + .driver_data = (void*) TSM70 + }, + { + .callback = dmi_matched, + .ident = "Toshiba Equium A110", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), + DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"), + }, + .driver_data = (void*) TSM30X /* FIXME: provisional */ + }, + { + .callback = dmi_matched, + .ident = "Compal ACL00", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"), + DMI_MATCH(DMI_BOARD_NAME, "ACL00"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Compal ACL10", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"), + DMI_MATCH(DMI_BOARD_NAME, "ACL10"), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "Fujitsu-Siemens Amilo D series", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), + DMI_MATCH(DMI_PRODUCT_NAME, "Amilo D-Series"), + }, + .driver_data = (void*) AMILOD + }, +/* HP Technology code Matching: + * Technology code appears in the first two chracters of BIOS version string + * ended by a dot, but it prefixed a space character on some models and BIOS + * versions. + * New HP/Compaq models use more characters (eg. KF_KH.). + */ + { + .callback = dmi_matched, + .ident = "HP model with technology code CI", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "CI."), + }, + .driver_data = (void*) OB4150 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code CL", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "CL."), + }, + .driver_data = (void*) OB4150 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code DC", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "DC."), + }, + .driver_data = (void*) XE2 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code EA", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "EA."), + }, + .driver_data = (void*) OB6000 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code EB", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "EB."), + }, + .driver_data = (void*) OB6100 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code EG", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "EG."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code FA", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "FA."), + }, + .driver_data = (void*) OB500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code FB", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "FB."), + }, + .driver_data = (void*) OB510 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code GC", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "GC."), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code GD", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "GD."), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code GE", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "GE."), + }, + .driver_data = (void*) XE3GC + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code GF", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "GF."), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code IB", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "IB."), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code IC", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "IC."), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code ID", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "ID."), + }, + .driver_data = (void*) XE3GF + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KA", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KA."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KB", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KB."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KC", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KC."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KD", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KD."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KE", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KE."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KE_KG", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KE_KG."), + }, + .driver_data = (void*) XE4500 + }, + { + .callback = dmi_matched, + .ident = "HP model with technology code KF_KH", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, HP_SIGNATURE), + DMI_MATCH(DMI_BIOS_VERSION, "KF_KH."), + }, + .driver_data = (void*) XE4500 + }, + { NULL, } +}; --- linux-2.6.32.orig/ubuntu/omnibook/fan.c +++ linux-2.6.32/ubuntu/omnibook/fan.c @@ -0,0 +1,183 @@ +/* + * fan.c -- fan status/control + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include +#include "hardware.h" + +static const struct omnibook_operation ctmp_io_op = { EC, XE3GF_CTMP, 0, 0, 0, 0 }; +static const struct omnibook_operation fot_io_op = { EC, XE3GF_FOT, XE3GF_FOT, 0, 0, 0 }; + +static int omnibook_get_fan(struct omnibook_operation *io_op) +{ + u8 fan; + int retval; + + if ((retval = backend_byte_read(io_op, &fan))) + return retval; + + /* + * For most models the reading is a bool + * It as to be inverted on all but OB6000|OB6100|OB4150|AMILOD + * TSP10|XE3GF|TSX205 return an integer + */ + + if (omnibook_ectype & (TSP10 | XE3GF | TSX205)) + retval = fan; + else if (omnibook_ectype & (OB6000 | OB6100 | OB4150 | AMILOD)) + retval = !!fan; + else + retval = !fan; + + return retval; +} + +static int omnibook_fan_on(struct omnibook_operation *io_op) +{ + return omnibook_apply_write_mask(io_op, 1); +} + +static int omnibook_fan_off(struct omnibook_operation *io_op) +{ + int i, retval = 0; + + if (!(omnibook_ectype & (XE3GF | TSP10 | TSX205))) { + retval = omnibook_apply_write_mask(io_op, 0); + return retval; + } else { + /* + * Special handling for XE3GF & TSP10 + */ + u8 fot, temp, fan; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + retval = __backend_byte_read(io_op, &fan); + + /* error or fan is already off */ + if (retval || !fan) + goto out; + + /* now we set FOT to current temp, then reset to initial value */ + if ((retval = __backend_byte_read(&fot_io_op, &fot))) + goto out; + if ((retval = __backend_byte_read(&ctmp_io_op, &temp))) + goto out; + + /* Wait for no longer than 250ms (this is arbitrary). */ + for (i = 0; i < 250; i++) { + __backend_byte_write(&fot_io_op, temp); + mdelay(1); + __backend_byte_read(io_op, &fan); + if (!fan) /* Fan is off */ + break; + } + __backend_byte_write(&fot_io_op, fot); + + if(i == 250 ) { + printk(O_ERR "Attempt to switch off the fan failed.\n"); + retval = -EIO; + } + + out: + mutex_unlock(&io_op->backend->mutex); + } + + + return retval; +} + +static int omnibook_fan_read(char *buffer, struct omnibook_operation *io_op) +{ + int fan; + int len = 0; + char *str; + + fan = omnibook_get_fan(io_op); + if (fan < 0) + return fan; + str = (fan) ? "on" : "off"; + + if (fan > 1) + len += sprintf(buffer + len, "Fan is %s (level %d)\n", str, fan); + else + len += sprintf(buffer + len, "Fan is %s\n", str); + + return len; +} + +static int omnibook_fan_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval; + + switch (*buffer) { + case '0': + retval = omnibook_fan_off(io_op); + break; + case '1': + retval = omnibook_fan_on(io_op); + break; + default: + retval = -EINVAL; + } + return retval; +} + +static struct omnibook_feature fan_driver; + +static int __init omnibook_fan_init(struct omnibook_operation *io_op) +{ + /* + * OB4150 + * XE2 + * AMILOD + * They only support fan reading + */ + if (omnibook_ectype & (OB4150 | XE2 | AMILOD)) + fan_driver.write = NULL; + return 0; +} + +static struct omnibook_tbl fan_table[] __initdata = { + {XE3GF | TSP10 | TSM70 | TSX205, {EC, XE3GF_FSRD, XE3GF_FSRD, 0, XE3GF_FAN_ON_MASK, 0}}, + {OB500, + {PIO, OB500_GPO1, OB500_GPO1, OB500_FAN_OFF_MASK, -OB500_FAN_ON_MASK, OB500_FAN_OFF_MASK}}, + {OB510, + {PIO, OB510_GPIO, OB510_GPIO, OB510_FAN_OFF_MASK, -OB510_FAN_ON_MASK, OB510_FAN_OFF_MASK}}, + {OB6000 | OB6100, + {EC, OB6000_STA1, OB6000_STA1, OB6000_FAN_MASK, OB6000_FAN_MASK, -OB6000_FAN_MASK}}, + {OB4150 | AMILOD, {EC, OB4150_STA1, 0, OB4150_FAN_MASK, 0, 0}}, + {XE2, {PIO, OB500_GPO1, 0, XE2_FAN_MASK, 0, 0}}, + {0,} +}; + +static struct omnibook_feature __declared_feature fan_driver = { + .name = "fan", + .enabled = 1, + .read = omnibook_fan_read, + .write = omnibook_fan_write, + .init = omnibook_fan_init, + .ectypes = XE3GF | OB500 | OB510 | OB6000 | OB6100 | OB4150 | XE2 | AMILOD | TSP10 | TSX205, + .tbl = fan_table, +}; + +module_param_named(fan, fan_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(fan, "Use 0 to disable, 1 to enable fan status monitor and control"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/throttling.c +++ linux-2.6.32/ubuntu/omnibook/throttling.c @@ -0,0 +1,83 @@ +/* + * throttling.c --CPU throttling control feature + * + * 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. + * + * Written by Mathieu Bérard , 2007 + */ + +#include "omnibook.h" +#include "hardware.h" + +/* + * Throttling level/rate mapping found in ICH6M datasheets + * the output is set to mimic the one of /proc/acpi/cpu/CPU0/throttling + * XXX: We always assume that there are 8 T-States and one processor. + */ +static const int trate[8] = { 0, 12, 25, 37, 50, 62, 75, 87 }; + +static int omnibook_throttle_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int tstate = 0; + int retval, i; + + retval = backend_throttle_get(io_op, &tstate); + if (retval < 0) + return retval; + + len += sprintf(buffer + len, "state count: 8\n"); + len += sprintf(buffer + len, "active state: T%d\n", tstate); + for (i = 0; i < 8; i += 1) + { + len += sprintf(buffer + len, " %cT%d: %02d%%\n", + (i == tstate ? '*' : ' '), + i, + trate[i]); + } + + return len; +} + +static int omnibook_throttle_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval = 0; + int data; + char *endp; + + data = simple_strtoul(buffer, &endp, 10); + if ((endp == buffer) || (data > 7)) /* There are 8 throttling levels */ + return -EINVAL; + else + retval = backend_throttle_set(io_op, data); + + return retval; +} + + +static struct omnibook_tbl throttle_table[] __initdata = { + {TSM70 | TSX205, {ACPI,}}, + {0,} +}; + +struct omnibook_feature __declared_feature throttle_driver = { + .name = "throttling", + .enabled = 1, + .read = omnibook_throttle_read, + .write = omnibook_throttle_write, + .ectypes = TSM70 | TSX205, + .tbl = throttle_table, +}; + +module_param_named(throttle, throttle_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(throttle, "Use 0 to disable, 1 to enable CPU throttling control"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/fan_policy.c +++ linux-2.6.32/ubuntu/omnibook/fan_policy.c @@ -0,0 +1,188 @@ +/* + * fan_policy.c -- fan policy support + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include "hardware.h" + +/* + * Default temperature limits. + * Danger! You may overheat your CPU! + * Do not change these values unless you exactly know what you do. + */ + +#define OMNIBOOK_FAN_LEVELS 8 +#define OMNIBOOK_FAN_MIN 25 /* Minimal value of fan off temperature */ +#define OMNIBOOK_FOT_MAX 75 /* Maximal value of fan off temperature */ +#define OMNIBOOK_FAN_MAX 95 /* Maximal value of fan on temperature */ +#define OMNIBOOK_FOT_DEFAULT 60 /* Default value of fan off temperature */ +#define OMNIBOOK_FAN1_DEFAULT 75 /* Default value of fan on temperature */ +#define OMNIBOOK_FAN2_DEFAULT 85 /* Default value of fan level 2 temperature */ +#define OMNIBOOK_FAN3_DEFAULT 90 /* Default value of fan level 3 temperature */ +#define OMNIBOOK_FAN4_DEFAULT 95 /* Default value of fan level 4 temperature */ +#define OMNIBOOK_FAN5_DEFAULT 95 /* Default value of fan level 5 temperature */ +#define OMNIBOOK_FAN6_DEFAULT 95 /* Default value of fan level 6 temperature */ +#define OMNIBOOK_FAN7_DEFAULT 95 /* Default value of fan level 7 temperature */ + +static const u8 fan_defaults[] = { + OMNIBOOK_FOT_DEFAULT, + OMNIBOOK_FAN1_DEFAULT, + OMNIBOOK_FAN2_DEFAULT, + OMNIBOOK_FAN3_DEFAULT, + OMNIBOOK_FAN4_DEFAULT, + OMNIBOOK_FAN5_DEFAULT, + OMNIBOOK_FAN6_DEFAULT, + OMNIBOOK_FAN7_DEFAULT, +}; + +static int omnibook_get_fan_policy(struct omnibook_operation *io_op, u8 *fan_policy) +{ + int retval ; + int i; + + for (i = 0; i < OMNIBOOK_FAN_LEVELS; i++) { + io_op->read_addr = XE3GF_FOT + i; + if ((retval = __backend_byte_read(io_op, &fan_policy[i]))) + return retval; + } + + return 0; +} + +static int omnibook_set_fan_policy(struct omnibook_operation *io_op, const u8 *fan_policy) +{ + int retval; + int i; + + if (fan_policy[0] > OMNIBOOK_FOT_MAX) + return -EINVAL; + + for (i = 0; i < OMNIBOOK_FAN_LEVELS; i++) { + if ((fan_policy[i] > fan_policy[i + 1]) + || (fan_policy[i] < OMNIBOOK_FAN_MIN) + || (fan_policy[i] > OMNIBOOK_FAN_MAX)) + return -EINVAL; + } + for (i = 0; i < OMNIBOOK_FAN_LEVELS; i++) { + io_op->write_addr = XE3GF_FOT + i; + if ((retval = __backend_byte_write(io_op, fan_policy[i]))) + return retval; + } + + return 0; +} + +static int omnibook_fan_policy_read(char *buffer, struct omnibook_operation *io_op) +{ + int retval; + int len = 0; + u8 i; + u8 fan_policy[OMNIBOOK_FAN_LEVELS]; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + retval = omnibook_get_fan_policy(io_op, &fan_policy[0]); + + mutex_unlock(&io_op->backend->mutex); + + if(retval) + return retval; + + len += sprintf(buffer + len, "Fan off temperature: %2d C\n", fan_policy[0]); + len += sprintf(buffer + len, "Fan on temperature: %2d C\n", fan_policy[1]); + for (i = 2; i < OMNIBOOK_FAN_LEVELS; i++) { + len += + sprintf(buffer + len, "Fan level %1d temperature: %2d C\n", i, + fan_policy[i]); + } + len += sprintf(buffer + len, "Minimal temperature to set: %2d C\n", OMNIBOOK_FAN_MIN); + len += sprintf(buffer + len, "Maximal temperature to set: %2d C\n", OMNIBOOK_FAN_MAX); + + return len; +} + +static int omnibook_fan_policy_write(char *buffer, struct omnibook_operation *io_op) +{ + int n = 0; + char *b; + char *endp; + int retval; + int temp; + u8 fan_policy[OMNIBOOK_FAN_LEVELS]; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + if ((retval = omnibook_get_fan_policy(io_op, &fan_policy[0]))) + goto out; + + /* + * Could also be done much simpler using sscanf(,"%u %u ... + * but this would hardcode OMNIBOOK_FAN_LEVELS. + * The parsed format is "%u " repeated OMNIBOOK_FAN_LEVELS+1 times + */ + + b = buffer; + do { + dprintk("n=[%i] b=[%s]\n", n, b); + if (n > OMNIBOOK_FAN_LEVELS) { + retval = -EINVAL; + goto out; + } + if (!isspace(*b)) { + temp = simple_strtoul(b, &endp, 10); + if (endp != b) { /* there was a match */ + fan_policy[n++] = temp; + b = endp; + } else { + retval = -EINVAL; + goto out; + } + } else + b++; + } while ((*b != '\0') && (*b != '\n')); + + /* A zero value set the defaults */ + if ((fan_policy[0] == 0) && (n == 1)) + retval = omnibook_set_fan_policy(io_op, &fan_defaults[0]); + else + retval = omnibook_set_fan_policy(io_op, &fan_policy[0]); + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static struct omnibook_tbl fan_policy_table[] __initdata = { + {XE3GF, {EC,}}, + {0,} +}; + +static struct omnibook_feature __declared_feature fan_policy_driver = { + .name = "fan_policy", + .enabled = 1, + .read = omnibook_fan_policy_read, + .write = omnibook_fan_policy_write, + .ectypes = XE3GF, + .tbl = fan_policy_table, +}; + +module_param_named(fan_policy, fan_policy_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(fan_policy, "Use 0 to disable, 1 to enable fan control policy support"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/blank.c +++ linux-2.6.32/ubuntu/omnibook/blank.c @@ -0,0 +1,138 @@ +/* + * blank.c -- blanking lcd console + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include "hardware.h" + +static struct omnibook_feature blank_driver; + +/* + * console_blank_hook pointer manipulation is lock protected + */ +extern int (*console_blank_hook) (int); +static DEFINE_SPINLOCK(blank_spinlock); + + +int omnibook_lcd_blank(int blank) +{ + struct omnibook_feature *blank_feature = omnibook_find_feature("blank"); + + if(!blank_feature) + return -ENODEV; + + return omnibook_apply_write_mask(blank_feature->io_op, blank); +} + +static int console_blank_register_hook(void) +{ + spin_lock(&blank_spinlock); + if (console_blank_hook != omnibook_lcd_blank) { + if (console_blank_hook == NULL) { + console_blank_hook = omnibook_lcd_blank; + printk(O_INFO "LCD backlight turn off at console blanking is enabled.\n"); + } else + printk(O_INFO "There is a console blanking solution already registered.\n"); + } + spin_unlock(&blank_spinlock); + return 0; +} + +static int console_blank_unregister_hook(void) +{ + int retval; + spin_lock(&blank_spinlock); + if (console_blank_hook == omnibook_lcd_blank) { + console_blank_hook = NULL; + printk(O_INFO "LCD backlight turn off at console blanking is disabled.\n"); + } else if (console_blank_hook) { + printk(O_WARN "You can not disable another console blanking solution.\n"); + retval = -EBUSY; + } else { + printk(O_INFO "Console blanking already disabled.\n"); + } + spin_unlock(&blank_spinlock); + return retval; +} + +static int omnibook_console_blank_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + spin_lock(&blank_spinlock); + + len += + sprintf(buffer + len, "LCD console blanking hook is %s\n", + (console_blank_hook == omnibook_lcd_blank) ? "enabled" : "disabled"); + + spin_unlock(&blank_spinlock); + + return len; +} + +static int omnibook_console_blank_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval; + + switch (*buffer) { + case '0': + retval = console_blank_unregister_hook(); + break; + case '1': + retval = console_blank_register_hook(); + break; + default: + retval = -EINVAL; + } + return retval; +} + +static int __init omnibook_console_blank_init(struct omnibook_operation *io_op) +{ + return console_blank_register_hook(); +} + +static void __exit omnibook_console_blank_cleanup(struct omnibook_operation *io_op) +{ + console_blank_unregister_hook(); +} + +static struct omnibook_tbl blank_table[] __initdata = { + {TSM70 | TSX205, {CDI, 0, TSM100_BLANK_INDEX, 0, TSM100_LCD_OFF, TSM100_LCD_ON}}, + {XE3GF | XE3GC | AMILOD | TSP10 | TSM70 | TSM30X, + COMMAND(KBC, OMNIBOOK_KBC_CMD_LCD_OFF, OMNIBOOK_KBC_CMD_LCD_ON)}, + {OB500 | OB6000 | XE2, {PIO, OB500_GPO1, OB500_GPO1, 0, -OB500_BKLT_MASK, OB500_BKLT_MASK}}, + {OB510 | OB6100, {PIO, OB510_GPO2, OB510_GPO2, 0, -OB510_BKLT_MASK, OB510_BKLT_MASK}}, + {0,} +}; + +static struct omnibook_feature __declared_feature blank_driver = { + .name = "blank", + .enabled = 1, + .read = omnibook_console_blank_read, + .write = omnibook_console_blank_write, + .init = omnibook_console_blank_init, + .exit = omnibook_console_blank_cleanup, + .ectypes = + XE3GF | XE3GC | OB500 | OB510 | OB6000 | OB6100 | XE2 | AMILOD | TSP10 | TSM70 | TSM30X | TSX205, + .tbl = blank_table, +}; + +module_param_named(blank, blank_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(blank, "Use 0 to disable, 1 to enable lcd console blanking"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/muteled.c +++ linux-2.6.32/ubuntu/omnibook/muteled.c @@ -0,0 +1,109 @@ +/* + * mutled.c -- MUTE LED control + * + * 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. + * + * Written by Thomas Perl , 2006 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_muteled_set(struct omnibook_operation *io_op, int status) +{ + int retval = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + if((retval = __omnibook_toggle(io_op, !!status))) { + printk(O_ERR "Failed muteled %s command.\n", status ? "on" : "off"); + goto out; + } + + io_op->backend->muteled_state = !!status; + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Hardware query is unsupported, reading is unreliable. + */ +static int omnibook_muteled_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + len += + sprintf(buffer + len, "Last mute LED action was an %s command.\n", + io_op->backend->touchpad_state ? "on" : "off"); + + mutex_unlock(&io_op->backend->mutex); + return len; +} + +static int omnibook_muteled_write(char *buffer, struct omnibook_operation *io_op) +{ + int cmd; + + if (*buffer == '0' || *buffer == '1') { + cmd = *buffer - '0'; + if (!omnibook_muteled_set(io_op, cmd)) { + dprintk("Switching mute LED to %s state.\n", cmd ? "on" : "off"); + } + } else { + return -EINVAL; + } + return 0; +} + +/* + * May re-enable muteled upon resume + */ +static int omnibook_muteled_resume(struct omnibook_operation *io_op) +{ + int retval; + mutex_lock(&io_op->backend->mutex); + retval = __omnibook_toggle(io_op, !!io_op->backend->touchpad_state); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Switch muteled off upon exit + */ +static void __exit omnibook_muteled_cleanup(struct omnibook_operation *io_op) +{ + omnibook_muteled_set(io_op, 0); +} + +static struct omnibook_tbl muteled_table[] __initdata = { + {XE4500, COMMAND(KBC, OMNIBOOK_KBC_CMD_MUTELED_ON, OMNIBOOK_KBC_CMD_MUTELED_OFF)}, + {0,} +}; + +static struct omnibook_feature __declared_feature muteled_driver = { + .name = "muteled", + .enabled = 1, + .read = omnibook_muteled_read, + .write = omnibook_muteled_write, + .exit = omnibook_muteled_cleanup, + .resume = omnibook_muteled_resume, + .ectypes = XE4500, + .tbl = muteled_table, +}; + +module_param_named(muteled, muteled_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(muteled, "Use 0 to disable, 1 to enable 'Audo Mute' LED control"); --- linux-2.6.32.orig/ubuntu/omnibook/hotkeys.c +++ linux-2.6.32/ubuntu/omnibook/hotkeys.c @@ -0,0 +1,193 @@ +/* + * hotkeys.c -- code to handling Hotkey/E-Key/EasyAccess buttons + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +/* Predefined convinient on/off states */ +#define HKEY_ON HKEY_ONETOUCH|HKEY_MULTIMEDIA|HKEY_FN|HKEY_DOCK|HKEY_FNF5 +#define HKEY_OFF 0 + +/* + * Set hotkeys status and update recorded saved state + */ +static int hotkeys_set_save(struct omnibook_operation *io_op, unsigned int state) +{ + int retval; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + retval = __backend_hotkeys_set(io_op, state); + if (retval < 0) + goto out; + + /* Update saved state */ + io_op->backend->hotkeys_state = state & io_op->backend->hotkeys_write_cap; + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Read hotkeys status, fallback to reading saved state if real probing is not + * supported. + */ +static int hotkeys_get_save(struct omnibook_operation *io_op, unsigned int *state) +{ + unsigned int read_state = 0; + int retval = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + if (io_op->backend->hotkeys_get) + retval = __backend_hotkeys_get(io_op, &read_state); + if (retval < 0) + goto out; + + /* Return previously set state for the fields that are write only */ + *state = (read_state & io_op->backend->hotkeys_read_cap) + + (io_op->backend->hotkeys_state & ~io_op->backend->hotkeys_read_cap); + + out: + mutex_unlock(&io_op->backend->mutex); + return 0; +} + +/* + * Power management handlers + */ + +/* + * Restore previously saved state + */ +static int omnibook_hotkeys_resume(struct omnibook_operation *io_op) +{ + int retval; + mutex_lock(&io_op->backend->mutex); + retval = __backend_hotkeys_set(io_op, io_op->backend->hotkeys_state); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Disable hotkeys upon suspend (FIXME is the disabling required ?) + */ +static int omnibook_hotkeys_suspend(struct omnibook_operation *io_op) +{ + int retval = 0; + retval = backend_hotkeys_set(io_op, HKEY_OFF); + return retval; +} + +static const char pretty_name[][27] = { + "Onetouch buttons are", + "Multimedia hotkeys are", + "Fn hotkeys are", + "Stick key is", + "Press Fn twice to lock is", + "Dock events are", + "Fn + F5 hotkey is", +}; + +static int omnibook_hotkeys_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int retval; + unsigned int read_state = 0; /* buggy gcc 4.1 warning fix */ + unsigned int shift, mask; + + retval = hotkeys_get_save(io_op, &read_state); + + if (retval < 0) + return retval; + + for (shift = 0; shift <= HKEY_LAST_SHIFT ; shift++) { + mask = 1 << shift; + /* we assume write capability or read capability imply support */ + if ((io_op->backend->hotkeys_read_cap | io_op->backend->hotkeys_write_cap) & mask) + len += + sprintf(buffer + len, "%s %s.\n", pretty_name[shift], + (read_state & mask) ? "enabled" : "disabled"); + } + + return len; +} + +static int omnibook_hotkeys_write(char *buffer, struct omnibook_operation *io_op) +{ + unsigned int state; + char *endp; + + if (strncmp(buffer, "off", 3) == 0) + hotkeys_set_save(io_op, HKEY_OFF); + else if (strncmp(buffer, "on", 2) == 0) + hotkeys_set_save(io_op, HKEY_ON); + else { + state = simple_strtoul(buffer, &endp, 16); + if (endp == buffer) + return -EINVAL; + else + hotkeys_set_save(io_op, state); + } + return 0; +} + +static int __init omnibook_hotkeys_init(struct omnibook_operation *io_op) +{ + int retval; + + printk(O_INFO "Enabling all hotkeys.\n"); + retval = hotkeys_set_save(io_op, HKEY_ON); + return retval < 0 ? retval : 0; +} + +static void __exit omnibook_hotkeys_cleanup(struct omnibook_operation *io_op) +{ + printk(O_INFO "Disabling all hotkeys.\n"); + hotkeys_set_save(io_op, HKEY_OFF); +} + +static struct omnibook_tbl hotkeys_table[] __initdata = { + {XE3GF | XE3GC | OB500 | OB510 | OB6000 | OB6100 | XE4500 | AMILOD | TSP10 | TSM30X, + COMMAND(KBC,OMNIBOOK_KBC_CMD_ONETOUCH_ENABLE,OMNIBOOK_KBC_CMD_ONETOUCH_DISABLE)}, + {TSM70, {CDI,}}, + {TSM40, {SMI,}}, + {TSX205, {ACPI,}}, + {0,} +}; + +static struct omnibook_feature __declared_feature hotkeys_driver = { + .name = "hotkeys", + .enabled = 1, + .read = omnibook_hotkeys_read, + .write = omnibook_hotkeys_write, + .init = omnibook_hotkeys_init, + .exit = omnibook_hotkeys_cleanup, + .suspend = omnibook_hotkeys_suspend, + .resume = omnibook_hotkeys_resume, + .ectypes = + XE3GF | XE3GC | OB500 | OB510 | OB6000 | OB6100 | XE4500 | AMILOD | TSP10 | TSM70 | TSM30X | + TSM40 | TSX205, + .tbl = hotkeys_table, +}; + +module_param_named(hotkeys, hotkeys_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(hotkeys, "Use 0 to disable, 1 to enable hotkeys handling"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/polling.c +++ linux-2.6.32/ubuntu/omnibook/polling.c @@ -0,0 +1,259 @@ +/* + * polling.c -- scancode emulation for volume buttons + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" +#include +#include + +/* + * XE3GC type key_polling polling: + * + * Polling interval for keys (100 ms) + */ + +#define OMNIBOOK_POLL msecs_to_jiffies(100) + +/* + * workqueue manipulations are mutex protected and thus kept in sync with key_polling_enabled + */ +static struct workqueue_struct *omnibook_wq; +static int key_polling_enabled; +static DEFINE_MUTEX(poll_mutex); + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) +static void omnibook_key_poller(struct work_struct *work); +DECLARE_DELAYED_WORK(omnibook_poll_work, *omnibook_key_poller); +#else +static void omnibook_key_poller(void *data); +DECLARE_WORK(omnibook_poll_work, *omnibook_key_poller, NULL); +#endif + +static struct omnibook_feature key_polling_driver; +static struct input_dev *poll_input_dev; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) + static void omnibook_key_poller(struct work_struct *work) +#else + static void omnibook_key_poller(void *data) +#endif +{ + u8 q0a; + int retval; + + mutex_lock(&key_polling_driver.io_op->backend->mutex); + __backend_byte_read(key_polling_driver.io_op, &q0a); + __backend_byte_write(key_polling_driver.io_op, 0); + mutex_unlock(&key_polling_driver.io_op->backend->mutex); + +#ifdef CONFIG_OMNIBOOK_DEBUG + if (unlikely(q0a & XE3GC_SLPB_MASK)) + dprintk("Sleep button pressed.\n"); + if (unlikely(q0a & XE3GC_F5_MASK)) + dprintk("Fn-F5 - LCD/CRT switch pressed.\n"); + if (unlikely(q0a & XE3GC_CNTR_MASK)) + dprintk("Fn+F3/Fn+F4 - Contrast up or down pressed.\n"); + if (unlikely(q0a & XE3GC_BRGT_MASK)) + dprintk("Fn+F1/Fn+F2 - Brightness up or down pressed.\n"); +#endif + + /* + * Volume button scancode emulaton + * It emulates a key press and a release without repeat as other OneTouch buttons do. + */ + + if (unlikely(q0a & XE3GC_VOLD_MASK)) { + dprintk("Fn-down arrow or Volume down pressed.\n"); + omnibook_report_key(poll_input_dev, KEY_VOLUMEDOWN); + } + if (unlikely(q0a & XE3GC_VOLU_MASK)) { + dprintk("Fn-up arrow or Volume up pressed.\n"); + omnibook_report_key(poll_input_dev, KEY_VOLUMEUP); + } + if (unlikely(q0a & XE3GC_MUTE_MASK)) { + dprintk("Fn+F7 - Volume mute pressed.\n"); + omnibook_report_key(poll_input_dev, KEY_MUTE); + } + + retval = queue_delayed_work(omnibook_wq, &omnibook_poll_work, OMNIBOOK_POLL); + if(unlikely(!retval)) /* here non-zero on success */ + printk(O_ERR "Key_poller failed to rearm.\n"); +} + +static int omnibook_key_polling_enable(void) +{ + int retval = 0; + + if(mutex_lock_interruptible(&poll_mutex)) + return -ERESTARTSYS; + + if(key_polling_enabled) + goto out; + + retval = !queue_delayed_work(omnibook_wq, &omnibook_poll_work, OMNIBOOK_POLL); + if(retval) + printk(O_ERR "Key_poller enabling failed.\n"); + else { + dprintk("Scancode emulation for volume buttons enabled.\n"); + key_polling_enabled = 1; + } + + out: + mutex_unlock(&poll_mutex); + return retval; +} + +static int omnibook_key_polling_disable(void) +{ + if(mutex_lock_interruptible(&poll_mutex)) + return -ERESTARTSYS; + + if(!key_polling_enabled) + goto out; + + cancel_rearming_delayed_workqueue(omnibook_wq, &omnibook_poll_work); + dprintk("Scancode emulation for volume buttons disabled.\n"); + key_polling_enabled = 0; + + out: + mutex_unlock(&poll_mutex); + return 0; +} + + +static int omnibook_key_polling_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + if(mutex_lock_interruptible(&poll_mutex)) + return -ERESTARTSYS; + + len += sprintf(buffer + len, "Volume buttons polling is %s.\n", + (key_polling_enabled) ? "enabled" : "disabled"); +#ifdef CONFIG_OMNIBOOK_DEBUG + if(key_polling_enabled) + len += sprintf(buffer + len, "Will poll in %i msec.\n", + jiffies_to_msecs(omnibook_poll_work.timer.expires - jiffies)); +#endif + mutex_unlock(&poll_mutex); + return len; +} + +static int omnibook_key_polling_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval; + switch (*buffer) { + case '0': + retval = omnibook_key_polling_disable(); + break; + case '1': + retval = omnibook_key_polling_enable(); + break; + default: + retval = -EINVAL; + } + return retval; +} + + +/* + * Stop polling upon suspend an restore it upon resume + */ +static int omnibook_key_polling_resume(struct omnibook_operation *io_op) +{ + int retval = 0; + + mutex_lock(&poll_mutex); + if(key_polling_enabled) + retval = !queue_delayed_work(omnibook_wq, &omnibook_poll_work, OMNIBOOK_POLL); + mutex_unlock(&poll_mutex); + return retval; +} + +static int omnibook_key_polling_suspend(struct omnibook_operation *io_op) +{ + mutex_lock(&poll_mutex); + if(key_polling_enabled) + cancel_rearming_delayed_workqueue(omnibook_wq, &omnibook_poll_work); + mutex_unlock(&poll_mutex); + return 0; +} + +static int __init omnibook_key_polling_init(struct omnibook_operation *io_op) +{ + int retval = 0; + + poll_input_dev = input_allocate_device(); + if (!poll_input_dev) { + retval = -ENOMEM; + goto out; + } + + poll_input_dev->name = "Omnibook legacy laptop scancode generator"; + poll_input_dev->phys = "omnibook/input0"; + poll_input_dev->id.bustype = BUS_HOST; + + /* this device has three keys */ + set_bit(EV_KEY, poll_input_dev->evbit); + set_bit(KEY_VOLUMEDOWN, poll_input_dev->keybit); + set_bit(KEY_VOLUMEUP, poll_input_dev->keybit); + set_bit(KEY_MUTE, poll_input_dev->keybit); + + retval = input_register_device(poll_input_dev); + if (retval) { + input_free_device(poll_input_dev); + goto out; + } + + omnibook_wq = create_singlethread_workqueue("omnibook"); + if(!omnibook_wq) + retval = -ENOMEM; + else + retval = omnibook_key_polling_enable(); + +out: + return retval; +} + +static void __exit omnibook_key_polling_cleanup(struct omnibook_operation *io_op) +{ + omnibook_key_polling_disable(); + destroy_workqueue(omnibook_wq); + input_unregister_device(poll_input_dev); +} + +static struct omnibook_tbl key_polling_table[] __initdata = { + {XE3GC, SIMPLE_BYTE(EC, XE3GC_Q0A, 0)}, + {0,} +}; + +static struct omnibook_feature __declared_feature key_polling_driver = { + .name = "key_polling", + .enabled = 0, /* dangerous */ + .read = omnibook_key_polling_read, + .write = omnibook_key_polling_write, + .init = omnibook_key_polling_init, + .exit = omnibook_key_polling_cleanup, + .suspend = omnibook_key_polling_suspend, + .resume = omnibook_key_polling_resume, + .ectypes = XE3GC, + .tbl = key_polling_table, +}; + +module_param_named(key_polling, key_polling_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(key_polling, "Use 0 to disable, 1 to enable key polling"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/cooling.c +++ linux-2.6.32/ubuntu/omnibook/cooling.c @@ -0,0 +1,97 @@ +/* + * colling.c -- cooling methods feature + * + * 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. + * + * Written by Mathieu Bérard , 2007 + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_cooling_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + len += sprintf(buffer + len, "Cooling method : %s\n", + io_op->backend->cooling_state ? "Performance" : "Powersave" ); + + mutex_unlock(&io_op->backend->mutex); + return len; +} + +static int omnibook_cooling_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + + if (*buffer == '0') { + retval = __backend_byte_write(io_op, + TSM70_COOLING_OFFSET + TSM70_COOLING_POWERSAVE); + } else if (*buffer == '1') { + retval = __backend_byte_write(io_op, + TSM70_COOLING_OFFSET + TSM70_COOLING_PERF); + } else { + retval = -EINVAL; + goto out; + } + + /* *buffer is either '0' or '1' here */ + if (!retval) + io_op->backend->cooling_state = *buffer - '0' ; + + mutex_unlock(&io_op->backend->mutex); + + out: + return retval; +} + +static int __init omnibook_cooling_init(struct omnibook_operation *io_op) +{ + mutex_lock(&io_op->backend->mutex); + /* XXX: Assumed default cooling method: performance */ + io_op->backend->cooling_state = TSM70_COOLING_PERF; + mutex_unlock(&io_op->backend->mutex); + return 0; +} + +static void __exit omnibook_cooling_exit(struct omnibook_operation *io_op) +{ + /* Set back cooling method to performance */ + backend_byte_write(io_op, TSM70_COOLING_OFFSET + TSM70_COOLING_PERF); +} + +static struct omnibook_tbl cooling_table[] __initdata = { + {TSM70 | TSX205, {CDI, 0, TSM70_FN_INDEX, 0, 0, 0 }}, + {0,} +}; + +struct omnibook_feature __declared_feature cooling_driver = { + .name = "cooling", + .enabled = 1, + .read = omnibook_cooling_read, + .write = omnibook_cooling_write, + .init = omnibook_cooling_init, + .exit = omnibook_cooling_exit, + .ectypes = TSM70 | TSX205, + .tbl = cooling_table, +}; + +module_param_named(cooling, cooling_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(cooling, "Use 0 to disable, 1 to enable CPU cooling method control"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/lcd.c +++ linux-2.6.32/ubuntu/omnibook/lcd.c @@ -0,0 +1,207 @@ +/* + * lcd.c -- LCD brightness and on/off + * + * 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. + * + * Written by Maciek Górniak , 2002 + * Modified by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include + +#ifdef CONFIG_OMNIBOOK_BACKLIGHT +#include +#endif + +#include "hardware.h" + +unsigned int omnibook_max_brightness; + +#ifdef CONFIG_OMNIBOOK_BACKLIGHT +static struct backlight_device *omnibook_backlight_device; + +static int omnibook_get_backlight(struct backlight_device *bd); +static int omnibook_set_backlight(struct backlight_device *bd); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) +static struct backlight_ops omnibookbl_ops = { +#else /* 2.6.21 */ +static struct backlight_properties omnibookbl_data = { + .owner = THIS_MODULE, +#endif /* 2.6.21 */ + .get_brightness = omnibook_get_backlight, + .update_status = omnibook_set_backlight, +}; + +static int omnibook_get_backlight(struct backlight_device *bd) +{ + int retval = 0; + struct omnibook_operation *io_op; + u8 brgt; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23) + io_op = bl_get_data(bd); +#else /* 2.6.23 */ + io_op = class_get_devdata(&bd->class_dev); +#endif /* 2.6.23 */ + retval = backend_byte_read(io_op, &brgt); + if (!retval) + retval = brgt; + + return retval; +} + +static int omnibook_set_backlight(struct backlight_device *bd) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) + u8 intensity = bd->props.brightness; +#else /* 2.6.21 */ + u8 intensity = bd->props->brightness; +#endif /* 2.6.21 */ + struct omnibook_operation *io_op; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23) + io_op = bl_get_data(bd); +#else /* 2.6.23 */ + io_op = class_get_devdata(&bd->class_dev); +#endif /* 2.6.23 */ + return backend_byte_write(io_op, intensity); +} +#endif /* CONFIG_OMNIBOOK_BACKLIGHT */ + +static int omnibook_brightness_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + u8 brgt; + + backend_byte_read(io_op, &brgt); + + len += + sprintf(buffer + len, "LCD brightness: %2d (max value: %d)\n", brgt, + omnibook_max_brightness); + + return len; +} + +static int omnibook_brightness_write(char *buffer, struct omnibook_operation *io_op) +{ + unsigned int brgt = 0; + char *endp; + + if (strncmp(buffer, "off", 3) == 0) + omnibook_lcd_blank(1); + else if (strncmp(buffer, "on", 2) == 0) + omnibook_lcd_blank(0); + else { + brgt = simple_strtoul(buffer, &endp, 10); + if ((endp == buffer) || (brgt > omnibook_max_brightness)) + return -EINVAL; + else { + backend_byte_write(io_op, brgt); +#ifdef CONFIG_OMNIBOOK_BACKLIGHT +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) + omnibook_backlight_device->props.brightness = brgt; +#else /* 2.6.21 */ + omnibookbl_data.brightness = brgt; +#endif +#endif + } + } + return 0; +} + +static int __init omnibook_brightness_init(struct omnibook_operation *io_op) +{ + /* + * FIXME: What is exactly the max value for each model ? + * I know that it's 7 for the TSM30X, TSM70, TSM40 and TSA105 + * and previous versions of this driver (wrongly) assumed it was 10 for + * all models. + * + * XE3GF + * TSM30X + * TSM70 + * TSM40 + * TSA105 + * TSX205 + */ + if (omnibook_ectype & (XE3GF | TSM70 | TSM30X | TSM40 | TSA105 | TSX205)) + omnibook_max_brightness = 7; + else { + omnibook_max_brightness = 10; + printk(O_WARN "Assuming that LCD brightness is between 0 and %i,\n", + omnibook_max_brightness); + printk(O_WARN + "please contact http://sourceforge.net/projects/omnibook to confirm.\n"); + } + +#ifdef CONFIG_OMNIBOOK_BACKLIGHT + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) + omnibook_backlight_device = + backlight_device_register(OMNIBOOK_MODULE_NAME, NULL, (void *)io_op, &omnibookbl_ops); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) + omnibook_backlight_device = + backlight_device_register(OMNIBOOK_MODULE_NAME, NULL, (void *)io_op, &omnibookbl_data); +#else /* < 2.6.20 */ + omnibook_backlight_device = + backlight_device_register(OMNIBOOK_MODULE_NAME, (void *)io_op, &omnibookbl_data); +#endif + if (IS_ERR(omnibook_backlight_device)) { + printk(O_ERR "Unable to register as backlight device.\n"); + return -ENODEV; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) + omnibook_backlight_device->props.max_brightness = omnibook_max_brightness; + backend_byte_read(io_op, (u8*) &omnibook_backlight_device->props.brightness); +#else /* < 2.6.21 */ + omnibookbl_data.max_brightness = omnibook_max_brightness; + backend_byte_read(io_op, (u8*) &omnibookbl_data.brightness); +#endif + +#endif /* CONFIG_OMNIBOOK_BACKLIGHT */ + return 0; +} +static void __exit omnibook_brightness_cleanup(struct omnibook_operation *io_op) +{ +#ifdef CONFIG_OMNIBOOK_BACKLIGHT + backlight_device_unregister(omnibook_backlight_device); +#endif +} + +static struct omnibook_tbl lcd_table[] __initdata = { + {TSM70 | TSX205, {CDI, TSM70_LCD_READ, TSM70_LCD_WRITE, 0, 0, 0}}, + {TSM40, {SMI, SMI_GET_LCD_BRIGHTNESS, SMI_SET_LCD_BRIGHTNESS, 0, 0, 0}}, + {XE3GF | TSP10 | TSM70 | TSM30X, SIMPLE_BYTE(EC, XE3GF_BRTS, XE3GF_BRTS_MASK)}, + {XE3GC, SIMPLE_BYTE(EC, XE3GC_BTVL, XE3GC_BTVL_MASK)}, + {AMILOD, SIMPLE_BYTE(EC, AMILOD_CBRG, XE3GC_BTVL_MASK)}, + {TSA105, SIMPLE_BYTE(EC, A105_BNDT, A105_BNDT_MASK)}, + {0,} +}; + +static struct omnibook_feature __declared_feature lcd_driver = { + .name = "lcd", + .enabled = 1, + .read = omnibook_brightness_read, + .write = omnibook_brightness_write, + .init = omnibook_brightness_init, + .exit = omnibook_brightness_cleanup, + .ectypes = XE3GF | XE3GC | AMILOD | TSP10 | TSM70 | TSM30X | TSM40 | TSA105 | TSX205, + .tbl = lcd_table, +}; + +module_param_named(lcd, lcd_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(lcd, "Use 0 to disable, 1 to enable to LCD brightness support"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/compat.h +++ linux-2.6.32/ubuntu/omnibook/compat.h @@ -0,0 +1,71 @@ +/* + * compat.h -- Older kernel (=> 2.6.11) support + * + * 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. + * + * Written by Mathieu Bérard , 2006 + */ + +#include + +/* + * For compatibility with kernel older than 2.6.16 + * Mutex to Semaphore fallback + */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) +#include +#define DEFINE_MUTEX(lock) DECLARE_MUTEX(lock) +#define mutex_init(lock) init_MUTEX(lock) +#define mutex_lock(lock) down(lock) +#define mutex_lock_interruptible(lock) down_interruptible(lock) +#define mutex_unlock(lock) up(lock) +#define mutex_destroy(lock) do { } while(0) +#else +#include +#endif + +/* + * For compatibility with kernel older than 2.6.14 + */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)) +static void inline *kzalloc(size_t size, int flags) +{ + void *ret = kmalloc(size, flags); + if (ret) + memset(ret, 0, size); + return ret; +} +#endif + +/* + * For compatibility with kernel older than 2.6.11 + */ + +#ifndef DEFINE_SPINLOCK +#define DEFINE_SPINLOCK(s) spinlock_t s = SPIN_LOCK_UNLOCKED +#endif + +/* + * Those kernel don't have ICH7 southbridge pcids + */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)) +#define PCI_DEVICE_ID_INTEL_ICH7_0 0x27b8 +#define PCI_DEVICE_ID_INTEL_ICH7_1 0x27b9 +#define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0 +#define PCI_DEVICE_ID_INTEL_ICH7_31 0x27bd +#endif + + + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/Kconfig +++ linux-2.6.32/ubuntu/omnibook/Kconfig @@ -0,0 +1,5 @@ +config OMNIBOOK + tristate "Kernel module for HP and Toshiba laptops" + depends on X86 + default m + ---help--- --- linux-2.6.32.orig/ubuntu/omnibook/dump.c +++ linux-2.6.32/ubuntu/omnibook/dump.c @@ -0,0 +1,107 @@ +/* + * dump.c - Raw dump of EC register, stolen from ibm_acpi.c + * + * + * Copyright (C) 2004-2005 Borislav Deianov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "omnibook.h" +#include "hardware.h" + +static u8 ecdump_regs[256]; + +static int ecdump_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int i, j; + u8 v; + + len += + sprintf(buffer + len, + "EC " " +00 +01 +02 +03 +04 +05 +06 +07" + " +08 +09 +0a +0b +0c +0d +0e +0f\n"); + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + for (i = 0; i < 255; i += 16) { + len += sprintf(buffer + len, "EC 0x%02x:", i); + for (j = 0; j < 16; j++) { + io_op->read_addr = i +j; + if (__backend_byte_read(io_op, &v)) + break; + if (v != ecdump_regs[i + j]) + len += sprintf(buffer + len, " *%02x", v); + else + len += sprintf(buffer + len, " %02x", v); + ecdump_regs[i + j] = v; + } + len += sprintf(buffer + len, "\n"); + if (j != 16) + break; + } + + mutex_unlock(&io_op->backend->mutex); + + /* These are way too dangerous to advertise openly... */ +#if 0 + len += + sprintf(buffer + len, + "commands:\t0x 0x" " ( is 00-ff, is 00-ff)\n"); + len += + sprintf(buffer + len, + "commands:\t0x " " ( is 00-ff, is 0-255)\n"); +#endif + return len; +} + +static int ecdump_write(char *buffer, struct omnibook_operation *io_op) +{ + + int i, v; + + if (sscanf(buffer, "0x%x 0x%x", &i, &v) == 2) { + /* i and v set */ + } else if (sscanf(buffer, "0x%x %u", &i, &v) == 2) { + /* i and v set */ + } else + return -EINVAL; + if (i >= 0 && i < 256 && v >= 0 && v < 256) { + io_op->write_addr = i; + return backend_byte_write(io_op, v); + } else + return -EINVAL; + + return 0; +} + +static struct omnibook_tbl dump_table[] __initdata = { + {ALL_ECTYPES, {EC,}}, + {0,} +}; + +static struct omnibook_feature __declared_feature dump_driver = { + .name = "dump", + .enabled = 0, + .read = ecdump_read, + .write = ecdump_write, + .tbl = dump_table, +}; + +module_param_named(dump, dump_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(dump, "Use 0 to disable, 1 to enable embedded controller register dump support"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/hardware.h +++ linux-2.6.32/ubuntu/omnibook/hardware.h @@ -0,0 +1,582 @@ +/* + * hardware.h -- low level definitions to access Embedded Controller and co. + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006-2007 + */ + +#include +#include "compat.h" + +/* + * Quite ugly: + * on_mask and off_maks are also used to store the i8042 data for kbc backend. + * an union seemed overkilled + */ + +struct omnibook_backend; + +struct omnibook_operation { + struct omnibook_backend *backend; + unsigned long read_addr; /* address for data reading */ + unsigned long write_addr; /* address for data writing */ + u8 read_mask; /* read mask */ + int on_mask; /* mask to set (pos value) or unset (neg value) to put feature in on state */ + int off_mask; /* mask to set (pos value) or unset (neg value) to put feature in off state */ +}; + +#define COMMAND(backend,data_on,data_off) { backend, 0, 0, 0, data_on, data_off } +#define SIMPLE_BYTE(backend,addr,mask) { backend, addr, addr, mask, 0, 0 } + +struct omnibook_tbl { + enum omnibook_ectype_t ectypes; + struct omnibook_operation io_op; +}; + +/* + * Backend interface definition + */ + +struct omnibook_backend { + const char *name; /* backend name */ + struct mutex mutex; /* serializes all access to backend functions */ + const unsigned int hotkeys_read_cap; /* hotkey probing mask */ + const unsigned int hotkeys_write_cap; /* hotkey setting mask */ + + /* Public data fields, access with mutex held */ + unsigned int hotkeys_state; /* saved hotkeys state */ + unsigned int touchpad_state; /* saved touchpad state */ + unsigned int muteled_state; /* saved muteled state */ + unsigned int cooling_state; /* saved cooling method state */ + + /* Public function pointers */ + int (*init) (const struct omnibook_operation *); + void (*exit) (const struct omnibook_operation *); + int (*byte_read) (const struct omnibook_operation *, u8 *); + int (*byte_write) (const struct omnibook_operation *, u8); + int (*aerial_get) (const struct omnibook_operation *, unsigned int *); + int (*aerial_set) (const struct omnibook_operation *, unsigned int); + int (*hotkeys_get) (const struct omnibook_operation *, unsigned int *); + int (*hotkeys_set) (const struct omnibook_operation *, unsigned int); + int (*display_get) (const struct omnibook_operation *, unsigned int *); + int (*display_set) (const struct omnibook_operation *, unsigned int); + int (*throttle_get) (const struct omnibook_operation *, unsigned int *); + int (*throttle_set) (const struct omnibook_operation *, unsigned int); + + /* Private fields, never to be accessed outside backend code */ + struct kref kref; /* Reference counter of this backend */ + void *data; /* private data pointer */ + int already_failed; /* Backend init already failed at least once */ +}; + +extern struct omnibook_backend kbc_backend; +extern struct omnibook_backend pio_backend; +extern struct omnibook_backend ec_backend; +extern struct omnibook_backend acpi_backend; +extern struct omnibook_backend nbsmi_backend; +extern struct omnibook_backend compal_backend; + +#define KBC &kbc_backend +#define PIO &pio_backend +#define EC &ec_backend +#define ACPI &acpi_backend +#define SMI &nbsmi_backend +#define CDI &compal_backend + +int __omnibook_apply_write_mask(const struct omnibook_operation *io_op, int toggle); +int __omnibook_toggle(const struct omnibook_operation *io_op, int toggle); + +/* + * Lock helper functions. Defines locking and __prefixed non locking variants. + */ + +#define helper_func(func) \ +static inline int backend_##func##_get(const struct omnibook_operation *io_op, unsigned int *data) \ +{ \ + int retval; \ + if(mutex_lock_interruptible(&io_op->backend->mutex)) \ + return -ERESTARTSYS; \ + retval = io_op->backend->func##_get(io_op, data); \ + mutex_unlock(&io_op->backend->mutex); \ + return retval; \ +} \ +static inline int backend_##func##_set(const struct omnibook_operation *io_op, unsigned int data) \ +{ \ + int retval; \ + if(mutex_lock_interruptible(&io_op->backend->mutex)) \ + return -ERESTARTSYS; \ + retval = io_op->backend->func##_set(io_op, data); \ + mutex_unlock(&io_op->backend->mutex); \ + return retval; \ +}\ +static inline int __backend_##func##_get(const struct omnibook_operation *io_op, unsigned int *data) \ +{ \ + int retval; \ + WARN_ON(!mutex_is_locked(&io_op->backend->mutex)); \ + retval = io_op->backend->func##_get(io_op, data); \ + return retval; \ +} \ +static inline int __backend_##func##_set(const struct omnibook_operation *io_op, unsigned int data) \ +{ \ + int retval; \ + WARN_ON(!mutex_is_locked(&io_op->backend->mutex)); \ + retval = io_op->backend->func##_set(io_op, data); \ + return retval; \ +} + +helper_func(aerial) +helper_func(hotkeys) +helper_func(display) +helper_func(throttle) + +static inline int backend_byte_read(const struct omnibook_operation *io_op, u8 *data) +{ + int retval; + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + retval = io_op->backend->byte_read(io_op, data); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static inline int backend_byte_write(const struct omnibook_operation *io_op, u8 data) +{ + int retval; + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + retval = io_op->backend->byte_write(io_op, data); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static inline int __backend_byte_read(const struct omnibook_operation *io_op, u8 *data) +{ + int retval; + WARN_ON(!mutex_is_locked(&io_op->backend->mutex)); + retval = io_op->backend->byte_read(io_op, data); + return retval; +} + +static inline int __backend_byte_write(const struct omnibook_operation *io_op, u8 data) +{ + int retval; + WARN_ON(!mutex_is_locked(&io_op->backend->mutex)); + retval = io_op->backend->byte_write(io_op, data); + return retval; +} + +static inline int omnibook_apply_write_mask(const struct omnibook_operation *io_op, int toggle) +{ + int retval; + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + retval = __omnibook_apply_write_mask(io_op, toggle); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static inline int omnibook_toggle(const struct omnibook_operation *io_op, int toggle) +{ + int retval; + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + retval = __omnibook_toggle(io_op, toggle); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Timeout in ms for sending to controller + */ + +#define OMNIBOOK_TIMEOUT 250 + + +/* + * Embedded controller adresses + */ + +#define XE3GF_CHGM 0x90 /* , 16 bit */ +#define XE3GF_CHGS 0x92 /* , 16 bit */ +#define XE3GF_CHGC 0x94 /* Current charge of board, 16 bit */ +#define XE3GF_CHGV 0x96 /* Current voltage, 16 bit */ +#define XE3GF_CHGA 0x98 /* Current intensity, 16 bit */ +#define XE3GF_BAL 0x9A /* Battery present status */ +#define XE3GF_STA1 0x9C /* Various status bits */ +#define XE3GF_CSPR 0xA1 /* Port replicator status, 1 bit */ +#define XE3GF_ADP 0xA3 /* AC acapter status, 1 bit */ +#define XE3GF_FOT 0xA5 /* Fan off temperature, 8 bit */ +#define XE3GF_FSD1 0xA6 /* Fan on temperature, 8 bit */ +#define XE3GF_FSD2 0xA7 /* Fan level 2 temperature, 8 bit */ +#define XE3GF_FSD3 0xA8 /* Fan level 3 temperature, 8 bit */ +#define XE3GF_FSD4 0xA9 /* Fan level 4 temperature, 8 bit */ +#define XE3GF_FSD5 0xAA /* Fan level 5 temperature, 8 bit */ +#define XE3GF_FSD6 0xAB /* Fan level 6 temperature, 8 bit */ +#define XE3GF_FSD7 0xAC /* Fan level 7 temperature, 8 bit */ +#define XE3GF_FSRD 0xAD /* Fan status, 8 bit */ +#define XE3GF_CTMP 0xB0 /* CPU tempetature, 8 bit */ +#define XE3GF_BRTS 0xB9 /* LCD brightness, 4 bit */ +#define XE3GF_BTY0 0xC0 /* Battery 0 type, 1 bit */ +#define XE3GF_BST0 0xC1 /* Battery 0 status, 3 bit */ +#define XE3GF_BRC0 0xC2 /* Battery 0 remaining capacity, 16 bit */ +#define XE3GF_BSN0 0xC4 /* Battery 0 serial number 16 bit */ +#define XE3GF_BPV0 0xC6 /* Battery 0 present voltage, 16 bit */ +#define XE3GF_BDV0 0xC8 /* Battery 0 design voltage 16 bit */ +#define XE3GF_BDC0 0xCA /* Battery 0 design capacity 16 bit */ +#define XE3GF_BFC0 0xCC /* Battery 0 last full capacity 16 bit */ +#define XE3GF_GAU0 0xCE /* Battery 0 gauge, 8 bit */ +#define XE3GF_BTY1 0xD0 /* Battery 1 type, 1 bit */ +#define XE3GF_BST1 0xD1 /* Battery 1 status, 3 bit */ +#define XE3GF_BRC1 0xD2 /* Battery 1 remaining capacity, 16 bit */ +#define XE3GF_BSN1 0xD4 /* Battery 1 serial number, 16 bit */ +#define XE3GF_BPV1 0xD6 /* Battery 1 present voltage, 16 bit */ +#define XE3GF_BDV1 0xD8 /* Battery 1 design voltage 16 bit */ +#define XE3GF_BDC1 0xDA /* Battery 1 design capacity 16 bit */ +#define XE3GF_BFC1 0xDC /* Battery 1 last full capacity 16 bit */ +#define XE3GF_GAU1 0xDE /* Battery 1 gauge, 8 bit */ + +/* + * Bitmasks for sub byte values + */ + +#define XE3GF_SHDD_MASK 0x40 /* External display status */ +#define XE3GF_CSPR_MASK 0x01 /* Port replicator status */ +#define XE3GF_ADP_MASK 0x20 /* AC acapter status */ +#define XE3GF_BAL0_MASK 0x01 /* Battery 0 present */ +#define XE3GF_BAL1_MASK 0x02 /* Battery 1 present */ +#define XE3GF_BMF_MASK 0x70 /* Model code */ +#define XE3GF_BTY_MASK 0x80 /* Type: Ni-MH or Li-Ion */ +#define XE3GF_BST_MASK_DSC 0x01 /* Discarging */ +#define XE3GF_BST_MASK_CHR 0x02 /* Charging */ +#define XE3GF_BST_MASK_CRT 0x04 /* Critical */ +#define XE3GF_FSRD_MASK_S1 0x01 /* Fan level 1 */ +#define XE3GF_FSRD_MASK_S2 0x02 /* Fan level 2 */ +#define XE3GF_FSRD_MASK_S3 0x04 /* Fan level 3 */ +#define XE3GF_FSRD_MASK_S4 0x08 /* Fan level 4 */ +#define XE3GF_FSRD_MASK_S5 0x10 /* Fan level 5 */ +#define XE3GF_FSRD_MASK_S6 0x20 /* Fan level 6 */ +#define XE3GF_FSRD_MASK_S7 0x40 /* Fan level 7 */ +#define XE3GF_BRTS_MASK 0x0F /* LCD brightness */ +#define XE3GF_FAN_ON_MASK 0x02 /* Fan on */ + +/* + * OmniBook XE3 GC values + */ + +#define XE3GC_CTMP 0x28 /* CPU tempetature, 8 bit */ +#define XE3GC_STA1 0x30 /* Various status bits */ +#define XE3GC_Q0A 0x31 /* Various status bits */ +#define XE3GC_CCUR 0x38 /* Current charge of board, 16 bit ? */ +#define XE3GC_CVOL 0x3A /* Current voltage, 16 bit ? */ +#define XE3GC_CARM 0x3C /* Current intensity, 16 bit ? */ +#define XE3GC_BAT 0x3E /* Battery present status */ +#define XE3GC_BST0 0x40 /* Battery 0 status, 3 bit */ +#define XE3GC_BPR0 0x41 /* Battery 0 present rate, 16 bit ? */ +#define XE3GC_BRC0 0x43 /* Battery 0 remaining capacity, 16 bit */ +#define XE3GC_BPV0 0x45 /* Battery 0 present voltage, 16 bit */ +#define XE3GC_BDV0 0x47 /* Battery 0 design voltage 16 bit */ +#define XE3GC_BDC0 0x49 /* Battery 0 design capacity 16 bit */ +#define XE3GC_BTY0 0x4A /* Battery 0 type, 1 bit ? */ +#define XE3GC_BTP0 0x4B /* Battery 0 ?, 1 bit */ +#define XE3GC_BSN0 0x4C /* Battery 0 serial number, 8 bit ? */ +#define XE3GC_BMF0 0x4D /* Battery 0 ?,8 bit */ +#define XE3GC_BST1 0x50 /* Battery 1 status, 3 bit */ +#define XE3GC_BPR1 0x51 /* Battery 1 present rate, 16 bit ? */ +#define XE3GC_BRC1 0x53 /* Battery 1 remaining capacity, 16 bit */ +#define XE3GC_BPV1 0x55 /* Battery 1 present voltage, 16 bit */ +#define XE3GC_BDV1 0x57 /* Battery 1 design voltage 16 bit */ +#define XE3GC_BDC1 0x59 /* Battery 1 design capacity 16 bit */ +#define XE3GC_BTY1 0x5A /* Battery 1 type, 1 bit ? */ +#define XE3GC_BTP1 0x5B /* Battery 1 ?, 1 bit */ +#define XE3GC_BSN1 0x5C /* Battery 1 serial number, 8 bit ? */ +#define XE3GC_BMF1 0x5D /* Battery 1 ?,8 bit */ +#define XE3GC_STA2 0x61 /* Various status bits */ +#define XE3GC_BTVL 0x6A /* LCD brightness, 4 bit */ + +/* + * Bitmasks for sub byte values + */ + +#define XE3GC_ADP_MASK 0x40 /* AC acapter status */ +#define XE3GC_BAT0_MASK 0x01 /* Battery 0 present */ +#define XE3GC_BAT1_MASK 0x02 /* Battery 1 present */ +#define XE3GC_BTY_MASK 0x01 /* Type: Ni-MH or Li-Ion */ +#define XE3GC_BST_MASK_DSC 0x01 /* Discarging */ +#define XE3GC_BST_MASK_CHR 0x02 /* Charging */ +#define XE3GC_BST_MASK_CRT 0x04 /* Critical */ +#define XE3GC_CRTI_MASK 0x04 /* External display status */ +#define XE3GC_SLPB_MASK 0x01 /* Sleep button pressed */ +#define XE3GC_F5_MASK 0x02 /* Fn-F5 - LCD/CRT switch pressed */ +#define XE3GC_VOLD_MASK 0x04 /* Fn-down arrow or Volume down pressed */ +#define XE3GC_VOLU_MASK 0x08 /* Fn-up arrow or Volume up pressed */ +#define XE3GC_MUTE_MASK 0x10 /* Fn+F7 - Volume mute pressed */ +#define XE3GC_CNTR_MASK 0x20 /* Fn+F3/Fn+F4 - Contrast up or down pressed */ +#define XE3GC_BRGT_MASK 0x40 /* Fn+F1/Fn+F2 - Brightness up or down pressed */ +#define XE3GC_BTVL_MASK 0x0F /* LCD brightness */ + +/* + * Toshiba Satellite A105 values and mask + */ + +#define A105_BNDT 0xA3 /* LCD brightness */ +#define A105_BNDT_MASK 0x0F + +/* + * Fujitsu Amilo D values + */ + +#define AMILOD_TMP 0x28 /* CPU tempetature, 8 bit */ +#define AMILOD_STA1 0x30 /* Various status bits */ +#define AMILOD_BAT 0x3E /* Battery present status */ +#define AMILOD_BDC0 0x40 /* Battery 0 design capacity 16 bit */ +#define AMILOD_BDV0 0x42 /* Battery 0 design voltage 16 bit */ +#define AMILOD_BTY0 0x44 /* Battery 0 type, 1 bit ? */ +#define AMILOD_BST0 0x45 /* Battery 0 status, 3 bit */ +#define AMILOD_BPR0 0x46 /* Battery 0 present rate, 16 bit ? */ +#define AMILOD_BRC0 0x48 /* Battery 0 remaining capacity, 16 bit */ +#define AMILOD_BPV0 0x4A /* Battery 0 present voltage, 16 bit */ +#define AMILOD_BTP0 0x4C /* Battery 0 ?, 1 bit */ +#define AMILOD_BDC1 0x50 /* Battery 1 design capacity 16 bit */ +#define AMILOD_BDV1 0x52 /* Battery 1 design voltage 16 bit */ +#define AMILOD_BTY1 0x54 /* Battery 1 type, 1 bit ? */ +#define AMILOD_BST1 0x55 /* Battery 1 status, 3 bit */ +#define AMILOD_BPR1 0x56 /* Battery 1 present rate, 16 bit ? */ +#define AMILOD_BRC1 0x58 /* Battery 1 remaining capacity, 16 bit */ +#define AMILOD_BPV1 0x5A /* Battery 1 present voltage, 16 bit */ +#define AMILOD_BTP1 0x5C /* Battery 1 ?, 1 bit */ +#define AMILOD_CBRG 0x6F /* LCD brightness, 4 bit */ + +/* + * Bitmasks for sub byte values + */ + +#define AMILOD_ADP_MASK 0x40 /* AC acapter status */ +#define AMILOD_BAT0_MASK 0x01 /* Battery 0 present */ +#define AMILOD_BAT1_MASK 0x02 /* Battery 1 present */ +#define AMILOD_BTY_MASK 0x01 /* Type: Ni-MH or Li-Ion */ +#define AMILOD_BST_MASK_DSC 0x01 /* Discarging */ +#define AMILOD_BST_MASK_CHR 0x02 /* Charging */ +#define AMILOD_BST_MASK_CRT 0x04 /* Critical */ +#define AMILOD_CBRG_MASK 0x0F /* LCD brightness */ + +/* + * OmniBook 500, 510, 6000, 6100, XE2 values + */ + +#define OB500_STA1 0x44 /* Various status bits */ +#define OB500_STA2 0x50 /* Various status bits */ +#define OB500_CTMP 0x55 /* CPU tempetature, 8 bit */ +#define OB500_BT1I 0x58 /* Battery 1 ? 16 bit */ +#define OB500_BT1C 0x5A /* Battery 1 remaining capacity 16 bit ? */ +#define OB500_BT1V 0x5C /* Battery 1 present voltage 16 bit ? */ +#define OB500_BT1S 0x5E /* Battery 1 status 3 bit ? */ +#define OB500_BT2I 0x6A /* Battery 2 ? 16 bit */ +#define OB500_BT2C 0x6C /* Battery 2 remaining capacity 16 bit ? */ +#define OB500_BT2V 0x6E /* Battery 2 present voltage 16 bit ? */ +#define OB500_BT2S 0x70 /* Battery 2 status 3 bit ? */ +#define OB500_BT3I 0x5F /* Battery 3 ? 16 bit */ +#define OB500_BT3C 0x61 /* Battery 3 remaining capacity 16 bit ? */ +#define OB500_BT3V 0x63 /* Battery 3 present voltage 16 bit ? */ +#define OB500_BT3S 0x65 /* Battery 3 status 3 bit ? */ + +#define OB6000_STA1 0x77 /* Various status bits */ + +#define XE2_STA1 0x50 /* Various status bits */ + +/* + * Bitmasks for sub byte values + */ + +#define OB500_LIDS_MASK 0x01 /* LID status */ +#define OB500_CRTS_MASK 0x20 /* External display status */ +#define OB500_SLPS_MASK 0x40 /* Sleep button status */ +#define OB500_DCKS_MASK 0x80 /* Docking status */ +#define OB500_ADP_MASK 0x02 /* AC acapter status */ +#define OB500_BST_MASK_DSC 0x01 /* Discarging */ +#define OB500_BST_MASK_CHR 0x02 /* Charging */ +#define OB500_BST_MASK_CRT 0x04 /* Critical */ + +#define OB6000_FAN_MASK 0x10 /* Fan status */ + +#define XE2_ADP_MASK 0x02 /* AC acapter status */ + +/* + * OmniBook 4150 + */ + +#define OB4150_TMP 0x28 /* CPU tempetature, 8 bit */ +#define OB4150_STA1 0x2E /* Various status bits */ +#define OB4150_STA2 0x2F /* Various status bits */ +#define OB4150_ADP 0x30 /* AC acapter status, 1 bit */ +#define OB4150_DCID 0x2C /* Port replicator */ + +/* + * Bitmasks for sub byte values + */ + +#define OB4150_FAN_MASK 0x01 /* Fan status */ +#define OB4150_ADP_MASK 0x40 /* AC acapter status */ +#define OB4150_CRST_MASK 0x20 /* External display status */ + +/* + * Keyboard controller command for some laptop functions + */ + +#define OMNIBOOK_KBC_CONTROL_CMD 0x59 + +/* + * Keyboard controller command parameters for functions available via kbc + */ + +#define OMNIBOOK_KBC_CMD_ONETOUCH_ENABLE 0x90 /* Enables OneTouch buttons */ +#define OMNIBOOK_KBC_CMD_ONETOUCH_DISABLE 0x91 /* Disables OneTouch buttons */ +#define OMNIBOOK_KBC_CMD_TOUCHPAD_ENABLE 0xAA /* Enables touchpad */ +#define OMNIBOOK_KBC_CMD_TOUCHPAD_DISABLE 0xA9 /* Disables touchpad */ +#define OMNIBOOK_KBC_CMD_LCD_ON 0xE1 /* Turns LCD display on */ +#define OMNIBOOK_KBC_CMD_LCD_OFF 0xE2 /* Turns LCD display off */ +#define OMNIBOOK_KBC_CMD_MUTELED_ON 0x94 /* Turns (xe4500) Mute LED on */ +#define OMNIBOOK_KBC_CMD_MUTELED_OFF 0x95 /* Turns (xe4500) Mute LED off */ +#define OMNIBOOK_KBC_CMD_AC_POWER_ENABLE 0xC2 /* Enable AC power */ +#define OMNIBOOK_KBC_CMD_AC_POWER_DISABLE 0xC1 /* Disable AC power */ + +/* + * Other I/O ports + */ + +#define ACL00_AC_STAT 0x11B9 /* AC adapter status on ACL00 */ +#define ACL00_AC_MASK 0x04 /* Bitmask for AC adapter status on ACL00 */ +#define TOSH3K_AC_STAT 0x102D /* AC adapter status on Toshiba 3000 */ +#define TOSH3K_AC_MASK 0x08 /* Bitmask for AC adapter status on Toshiba 3000 */ +#define XE3GF_AC_STAT 0x11B9 /* AC adapter status on XE3 GF */ +#define XE3GF_AC_MASK 0x04 /* Bitmask for AC adapter status on XE3 GF */ +#define XE3GF_LID_STAT 0x11AD /* LID switch status on XE3 GF */ +#define XE3GF_LID_MASK 0x20 /* Bitmask for LID switch status on XE3 GF */ +#define XE3GC_SMIC 0xFE00 + +#define OB500_GPO1 0x8034 /* Fan control */ +#define OB510_GPO2 0x11B9 /* LCD backlight */ +#define OB510_GPIO 0x118F /* Fan control */ + +#define OB500_FAN_ON_MASK 0x0A /* Turn fan on with zero bits */ +#define OB500_FAN_OFF_MASK 0x08 /* Fan status/off */ +#define OB500_BKLT_MASK 0x40 /* LCD backlight */ +#define OB510_FAN_ON_MASK 0x18 /* Turn fan on with zero bits */ +#define OB510_FAN_OFF_MASK 0x10 /* Turn fan on */ +#define OB510_BKLT_MASK 0x01 /* LCD backlight */ + +#define XE2_FAN_MASK 0x02 /* Turn fan on with zero bit */ + +/* + * Memory adresses + */ + +#define XE3GC_BCMD 0xFFFFEBC + +/* + * Toshiba Satellite A105 values and mask + */ + +#define A105_BNDT 0xA3 /* LCD brightness */ +#define A105_BNDT_MASK 0x0F + +/* + * Index and values for Command/Data/Index interface + * Notice similitudes with commands code for kbc + */ + +#define TSM70_FN_INDEX 0x45 +#define TSM70_FN_ENABLE 0x75 +#define TSM70_FN_DISABLE 0x74 +#define TSM70_HOTKEYS_INDEX 0x59 +#define TSM70_HOTKEYS_ENABLE 0x90 +#define TSM70_HOTKEYS_DISABLE 0x91 +#define TSM70_LCD_READ 0x5C +#define TSM70_LCD_WRITE 0x5D +#define TSM70_TOUCHPAD_ON 0x80 +#define TSM70_TOUCHPAD_OFF 0x81 +#define TSM100_BLANK_INDEX 0x59 +#define TSM100_LCD_ON 0xe1 +#define TSM100_LCD_OFF 0xe2 +#define TSM70_COOLING_OFFSET 0xb0 +#define TSM70_COOLING_POWERSAVE 0x0 +#define TSM70_COOLING_PERF 0x2 + +/* Toshiba SMI funtions and constants*/ +#define SMI_FN_PRESSED 0x8f +#define SMI_SET_LCD_BRIGHTNESS 0xa2 +#define SMI_GET_LCD_BRIGHTNESS 0xa3 +#define SMI_GET_KILL_SWITCH 0xa4 +#define SMI_SET_AERIAL 0xa5 +#define SMI_GET_AERIAL 0xa6 +#define SMI_SET_DISPLAY_STATE 0xa7 +#define SMI_GET_DISPLAY_STATE 0xa8 +#define SMI_SET_FN_INTERFACE 0xa9 +#define SMI_GET_FN_INTERFACE 0xaa +#define SMI_GET_FN_LAST_SCAN 0xab +#define SMI_SET_DOCK 0xac /* Undocumented */ +#define SMI_GET_DOCK 0xad /* Undocumented */ +#define SMI_SET_FN_F5_INTERFACE 0xc2 + +#define SMI_FN_KEYS_MASK 0x01 +#define SMI_STICK_KEYS_MASK 0x02 +#define SMI_FN_TWICE_LOCK_MASK 0x04 +#define SMI_FN_DOCK_MASK 0x08 + +#define SMI_FN_SCAN 0x6d /* Fn key scancode */ +#define SMI_DOCK_SCAN 0x6e /* Dock scancode */ + +/* Toshiba HCI method and constants */ +#define HCI_METHOD "SPFC" +#define HCI_WORDS 6 + +#define HCI_GET 0xfe00 +#define HCI_SET 0xff00 + +#define HCI_HOTKEY_EVENT 0x001e +#define HCI_RF_CONTROL 0x0056 + +#define HCI_ENABLE 0x0001 +#define HCI_DISABLE 0x0000 + +#define HCI_WIRELESS_CHECK 0x0001 +#define HCI_WIRELESS_POWER 0x0200 + +#define HCI_SUCCESS 0x0000 +#define HCI_FAILURE 0x1000 +#define HCI_NOT_SUPPORTED 0x8000 + +/* Toshiba Satellite X205 methods */ +#define TSX205_EVENTS_METHOD "INFO" +#define TSX205_NOTIFY_METHOD "NTFY" +#define TSX205_KILLSW_METHOD "KLSW" +#define TSX205_SLIVDO_METHOD "CSLI" + +#define ACPI_FN_MASK 0x01 +#define ACPI_FN_SCAN 0x6e /* Fn key scancode */ + +/* HCI key definitions */ +#define HCI_FN_RELEASED 0x100 +#define HCI_MUTE 0x101 +#define HCI_1 0x102 +#define HCI_2 0x103 +#define HCI_SPACE 0x139 +#define HCI_BREAK 0x13b +#define HCI_BSM 0x13c +#define HCI_SUSPEND 0x13d +#define HCI_HIBERNATE 0x13e +#define HCI_VIDEOOUT 0x13f +#define HCI_BRIGHTNESSDOWN 0x140 +#define HCI_BRIGHTNESSUP 0x141 +#define HCI_WLAN 0x142 +#define HCI_TOUCHPAD 0x143 +#define HCI_FN_PRESSED 0x17f --- linux-2.6.32.orig/ubuntu/omnibook/sections.lds +++ linux-2.6.32/ubuntu/omnibook/sections.lds @@ -0,0 +1,11 @@ +SECTIONS +{ + .data : + { + . = ALIGN(32); + _start_features_driver = .; + *(.features) + _end_features_driver = .; + *(.data) + } +} --- linux-2.6.32.orig/ubuntu/omnibook/temperature.c +++ linux-2.6.32/ubuntu/omnibook/temperature.c @@ -0,0 +1,55 @@ +/* + * temperature.c -- CPU temprature monitoring + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_temperature_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int retval; + u8 temp; + + if ((retval = backend_byte_read(io_op, &temp))) + return retval; + + len += sprintf(buffer + len, "CPU temperature: %2d C\n", temp); + + return len; +} + +static struct omnibook_tbl temp_table[] __initdata = { + {XE3GF | TSP10 | TSM70 | TSM30X | TSX205, SIMPLE_BYTE(EC, XE3GF_CTMP, 0)}, + {XE3GC | AMILOD, SIMPLE_BYTE(EC, XE3GC_CTMP, 0)}, + {OB500 | OB510 | OB6000 | OB6100 | XE4500 | XE2, SIMPLE_BYTE(EC, OB500_CTMP, 0)}, + {OB4150, SIMPLE_BYTE(EC, OB4150_TMP, 0)}, + {0,} +}; + +static struct omnibook_feature __declared_feature temperature_driver = { + .name = "temperature", + .enabled = 1, + .read = omnibook_temperature_read, + .ectypes = + XE3GF | XE3GC | OB500 | OB510 | OB6000 | OB6100 | XE4500 | OB4150 | XE2 | AMILOD | TSP10 + | TSM70 | TSM30X | TSX205, + .tbl = temp_table, +}; + +module_param_named(temperature, temperature_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(temperature, "Use 0 to disable, 1 to enable thermal status and policy support"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/wireless.c +++ linux-2.6.32/ubuntu/omnibook/wireless.c @@ -0,0 +1,108 @@ +/* + * wireless.c Wifi feature + * + * 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. + * + * Written by Mathieu Bérard , 2006 + * + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_wifi_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int retval; + unsigned int state; + + if ((retval = backend_aerial_get(io_op, &state))) + return retval; + + len += + sprintf(buffer + len, "Wifi adapter is %s", (state & WIFI_EX) ? "present" : "absent"); + if (state & WIFI_EX) + len += + sprintf(buffer + len, " and %s", (state & WIFI_STA) ? "enabled" : "disabled"); + len += sprintf(buffer + len, ".\n"); + len += + sprintf(buffer + len, "Wifi Kill switch is %s.\n", (state & KILLSWITCH) ? "on" : "off"); + + return len; + +} + +static int omnibook_wifi_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval = 0; + unsigned int state; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + if ((retval = __backend_aerial_get(io_op, &state))) + goto out; + + if (*buffer == '0') + state &= ~WIFI_STA; + else if (*buffer == '1') + state |= WIFI_STA; + else { + retval = -EINVAL; + goto out; + } + + if ((retval = __backend_aerial_set(io_op, state))) + return retval; + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static struct omnibook_feature wifi_driver; + +static int __init omnibook_wifi_init(struct omnibook_operation *io_op) +{ + int retval = 0; + unsigned int state; + +/* + * Refuse enabling/disabling a non-existent device + */ + + if ((retval = backend_aerial_get(io_op, &state))) + return retval; + + if (!(state & WIFI_EX)) + wifi_driver.write = NULL; + + return retval; +} + +static struct omnibook_tbl wireless_table[] __initdata = { + {TSM70 | TSX205, {ACPI,}}, /* stubs to select backend */ + {TSM40, {SMI,}}, /* stubs to select backend */ + {0,} +}; + +static struct omnibook_feature __declared_feature wifi_driver = { + .name = "wifi", + .enabled = 1, + .read = omnibook_wifi_read, + .write = omnibook_wifi_write, + .init = omnibook_wifi_init, + .ectypes = TSM70 | TSM40 | TSX205, + .tbl = wireless_table, +}; + +module_param_named(wifi, wifi_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(wifi, "Use 0 to disable, 1 to enable Wifi adapter control"); --- linux-2.6.32.orig/ubuntu/omnibook/ac.c +++ linux-2.6.32/ubuntu/omnibook/ac.c @@ -0,0 +1,60 @@ +/* + * ac.c -- AC adapter related functions + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_ac_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + u8 ac; + int retval; + + retval = backend_byte_read(io_op, &ac); + if (retval < 0) + return retval; + + len += sprintf(buffer + len, "AC %s\n", (!!ac) ? "on-line" : "off-line"); + + return len; +} + +static struct omnibook_tbl ac_table[] __initdata = { + {XE3GF | TSP10 | TSM30X | TSM70, SIMPLE_BYTE(EC, XE3GF_ADP, XE3GF_ADP_MASK)}, + {XE3GC | AMILOD, SIMPLE_BYTE(EC, XE3GC_STA1, XE3GC_ADP_MASK)}, + {OB500 | OB510 | OB6000 | OB6100 | XE4500, SIMPLE_BYTE(EC, OB500_STA2, OB500_ADP_MASK)}, + {OB4150, SIMPLE_BYTE(EC, OB4150_ADP, OB4150_ADP_MASK)}, + {XE2, SIMPLE_BYTE(EC, XE2_STA1, XE2_ADP_MASK)}, + {0,} +}; + +struct omnibook_feature __declared_feature ac_driver = { + .name = "ac", +#ifdef CONFIG_OMNIBOOK_LEGACY + .enabled = 1, +#else + .enabled = 0, +#endif + .read = omnibook_ac_read, + .ectypes = XE3GF | XE3GC | OB500 | OB510 | OB6000 | OB6100 | XE4500 | OB4150 | XE2 | AMILOD | TSP10 | TSM70 | TSM30X, + .tbl = ac_table, +}; + +module_param_named(ac, ac_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(ac, "Use 0 to disable, 1 to enable AC adapter status monitoring"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/kbc.c +++ linux-2.6.32/ubuntu/omnibook/kbc.c @@ -0,0 +1,152 @@ +/* + * kbc.c -- low level functions to access Keyboard Controller + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include +#include +#include +#include + +#include +#include "hardware.h" + +extern int omnibook_key_polling_enable(void); +extern int omnibook_key_polling_disable(void); + +/* + * Registers of the keyboard controller + */ + +#define OMNIBOOK_KBC_DATA 0x60 +#define OMNIBOOK_KBC_SC 0x64 + +/* + * Keyboard controller status register bits + */ + +#define OMNIBOOK_KBC_STAT_OBF 0x01 /* Output buffer full */ +#define OMNIBOOK_KBC_STAT_IBF 0x02 /* Input buffer full */ + + +/* + * Interrupt control + */ + +static DEFINE_SPINLOCK(omnibook_kbc_lock); + +/* + * Wait for keyboard buffer + */ + +static int omnibook_kbc_wait(u8 event) +{ + int timeout = OMNIBOOK_TIMEOUT; + + switch (event) { + case OMNIBOOK_KBC_STAT_OBF: + while (!(inb(OMNIBOOK_KBC_SC) & event) && timeout--) + mdelay(1); + break; + case OMNIBOOK_KBC_STAT_IBF: + while ((inb(OMNIBOOK_KBC_SC) & event) && timeout--) + mdelay(1); + break; + default: + return -EINVAL; + } + if (timeout > 0) + return 0; + return -ETIME; +} + +/* + * Write to the keyboard command register + */ + +static int omnibook_kbc_write_command(u8 cmd) +{ + int retval; + + spin_lock_irq(&omnibook_kbc_lock); + retval = omnibook_kbc_wait(OMNIBOOK_KBC_STAT_IBF); + if (retval) + goto end; + outb(cmd, OMNIBOOK_KBC_SC); + retval = omnibook_kbc_wait(OMNIBOOK_KBC_STAT_IBF); + end: + spin_unlock_irq(&omnibook_kbc_lock); + return retval; +} + +/* + * Write to the keyboard data register + */ + +static int omnibook_kbc_write_data(u8 data) +{ + int retval; + + spin_lock_irq(&omnibook_kbc_lock); + retval = omnibook_kbc_wait(OMNIBOOK_KBC_STAT_IBF); + if (retval) + goto end; + outb(data, OMNIBOOK_KBC_DATA); + retval = omnibook_kbc_wait(OMNIBOOK_KBC_STAT_IBF); + end: + spin_unlock_irq(&omnibook_kbc_lock); + return retval; +} + +/* + * Send a command to keyboard controller + */ + +static int omnibook_kbc_command(const struct omnibook_operation *io_op, u8 data) +{ + int retval; + + if ((retval = omnibook_kbc_write_command(OMNIBOOK_KBC_CONTROL_CMD))) + return retval; + + retval = omnibook_kbc_write_data(data); + return retval; +} + +/* + * Onetouch button hotkey handler + */ +static int omnibook_kbc_hotkeys(const struct omnibook_operation *io_op, unsigned int state) +{ + int retval; + + retval = __omnibook_toggle(io_op, !!(state & HKEY_ONETOUCH)); + return retval; +} + +/* + * Backend interface declarations + */ +struct omnibook_backend kbc_backend = { + .name = "i8042", + .hotkeys_write_cap = HKEY_ONETOUCH, + .byte_write = omnibook_kbc_command, + .hotkeys_set = omnibook_kbc_hotkeys, +}; + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/omnibook.h +++ linux-2.6.32/ubuntu/omnibook/omnibook.h @@ -0,0 +1,145 @@ +/* + * omnibook.h -- High level data structures and functions of omnibook + * support code + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006-2007 + */ + +#include +#include +#include +#include + +/* + * EC types + */ + +extern enum omnibook_ectype_t { + NONE = 0, /* 0 Default/unknown EC type */ + XE3GF = (1<<0), /* 1 HP OmniBook XE3 GF, most old Toshiba Satellites */ + XE3GC = (1<<1), /* 2 HP OmniBook XE3 GC, GD, GE and compatible */ + OB500 = (1<<2), /* 3 HP OmniBook 500 and compatible */ + OB510 = (1<<3), /* 4 HP OmniBook 510 */ + OB6000 = (1<<4), /* 5 HP OmniBook 6000 */ + OB6100 = (1<<5), /* 6 HP OmniBook 6100 */ + XE4500 = (1<<6), /* 7 HP OmniBook xe4500 and compatible */ + OB4150 = (1<<7), /* 8 HP OmniBook 4150 */ + XE2 = (1<<8), /* 9 HP OmniBook XE2 */ + AMILOD = (1<<9), /* 10 Fujitsu Amilo D */ + TSP10 = (1<<10), /* 11 Toshiba Satellite P10, P15, P20 and compatible */ + TSM70 = (1<<11), /* 12 Toshiba Satellite M40X, M70 and compatible */ + TSM40 = (1<<12), /* 13 Toshiba Satellite M40, M45 and Tecra S1 */ + TSA105 = (1<<13), /* 14 Toshiba Satellite A105 and compatible (Real support is MISSING) */ + TSM30X = (1<<14), /* 15 Toshiba Stallite M30X and compatible */ + TSX205 = (1<<15) /* 16 Toshiba Stallite X205 and compatible */ +} omnibook_ectype; + +#define ALL_ECTYPES XE3GF|XE3GC|OB500|OB510|OB6000|OB6100|XE4500|OB4150|XE2|AMILOD|TSP10|TSM70|TSM40|TSA105|TSM30X|TSX205 + +/* + * This represent a feature provided by this module + */ + +struct omnibook_operation; + +struct omnibook_feature { + char *name; /* Name */ + int enabled; /* Set from module parameter */ + int (*read) (char *,struct omnibook_operation *); /* Procfile read function */ + int (*write) (char *,struct omnibook_operation *); /* Procfile write function */ + int (*init) (struct omnibook_operation *); /* Specific Initialization function */ + void (*exit) (struct omnibook_operation *); /* Specific Cleanup function */ + int (*suspend) (struct omnibook_operation *); /* PM Suspend function */ + int (*resume) (struct omnibook_operation *); /* PM Resume function */ + int ectypes; /* Type(s) of EC we support for this feature (bitmask) */ + struct omnibook_tbl *tbl; + struct omnibook_operation *io_op; + struct list_head list; +}; + +/* + * State of a Wifi/Bluetooth adapter + */ +enum { + WIFI_EX = (1<<0), /* 1 1=present 0=absent */ + WIFI_STA = (1<<1), /* 2 1=enabled 0=disabled */ + KILLSWITCH = (1<<2), /* 4 1=radio on 0=radio off */ + BT_EX = (1<<3), /* 8 1=present 0=absent */ + BT_STA = (1<<4), /* 16 1=enabled 0=disabled */ +}; + +/* + * Hotkeys state backend neutral masks + */ +enum { + HKEY_ONETOUCH = (1<<0), /* 1 Ontetouch button scancode generation */ + HKEY_MULTIMEDIA = (1<<1), /* 2 "Multimedia hotkeys" scancode generation */ + HKEY_FN = (1<<2), /* 4 Fn + foo hotkeys scancode generation */ + HKEY_STICK = (1<<3), /* 8 Stick key (Fn locked/unlocked on keypress) */ + HKEY_TWICE_LOCK = (1<<4), /* 16 Press Fn twice to lock */ + HKEY_DOCK = (1<<5), /* 32 (Un)Dock events scancode generation */ + HKEY_FNF5 = (1<<6), /* 64 Fn + F5 (toggle display) is enabled */ +}; + +#define HKEY_LAST_SHIFT 6 + +/* + * Display state backend neutral masks + * _ON masks = port is powered up and running + * _DET masks = a plugged display have been detected + */ + +enum { + DISPLAY_LCD_ON = (1<<0), /* 1 Internal LCD panel */ + DISPLAY_CRT_ON = (1<<1), /* 2 External VGA port */ + DISPLAY_TVO_ON = (1<<2), /* 4 External TV-OUT port */ + DISPLAY_DVI_ON = (1<<3), /* 8 External DVI port */ + DISPLAY_LCD_DET = (1<<4), /* 16 Internal LCD panel */ + DISPLAY_CRT_DET = (1<<5), /* 32 External VGA port */ + DISPLAY_TVO_DET = (1<<6), /* 64 External TV-OUT port */ + DISPLAY_DVI_DET = (1<<7), /* 128 External DVI port */ +}; + +extern unsigned int omnibook_max_brightness; +int set_omnibook_param(const char *val, struct kernel_param *kp); +int omnibook_lcd_blank(int blank); +struct omnibook_feature *omnibook_find_feature(char *name); +void omnibook_report_key(struct input_dev *dev, unsigned int keycode); + +/* + * __attribute_used__ is not defined anymore in 2.6.24 + * but __used appeared only in 2.6.22 + */ +#ifndef __used +#define __used __attribute_used__ +#endif + +#define __declared_feature __attribute__ (( __section__(".features"), __aligned__(__alignof__ (struct omnibook_feature)))) __used + +/* + * yet another printk wrapper + */ +#define O_INFO KERN_INFO OMNIBOOK_MODULE_NAME ": " +#define O_WARN KERN_WARNING OMNIBOOK_MODULE_NAME ": " +#define O_ERR KERN_ERR OMNIBOOK_MODULE_NAME ": " + +#ifdef CONFIG_OMNIBOOK_DEBUG +#define dprintk(fmt, args...) printk(KERN_INFO "%s: " fmt, OMNIBOOK_MODULE_NAME, ## args) +#define dprintk_simple(fmt, args...) printk(fmt, ## args) +#else +#define dprintk(fmt, args...) do { } while(0) +#define dprintk_simple(fmt, args...) do { } while(0) +#endif + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/bluetooth.c +++ linux-2.6.32/ubuntu/omnibook/bluetooth.c @@ -0,0 +1,104 @@ +/* + * wireless.c Bluetooth feature + * + * 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. + * + * Written by Mathieu Bérard , 2006 + * + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_bt_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int retval; + unsigned int state; + + if ((retval = backend_aerial_get(io_op, &state))) + return retval; + + len += + sprintf(buffer + len, "Bluetooth adapter is %s", + (state & BT_EX) ? "present" : "absent"); + if (state & BT_EX) + len += sprintf(buffer + len, " and %s", (state & BT_STA) ? "enabled" : "disabled"); + len += sprintf(buffer + len, ".\n"); + return len; + +} + +static int omnibook_bt_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval = 0; + unsigned int state; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + if ((retval = __backend_aerial_get(io_op, &state))) + goto out; + + if (*buffer == '0') + state &= ~BT_STA; + else if (*buffer == '1') + state |= BT_STA; + else { + retval = -EINVAL; + goto out; + } + + retval = __backend_aerial_set(io_op, state); + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +static struct omnibook_feature bt_driver; + +static int __init omnibook_bt_init(struct omnibook_operation *io_op) +{ + int retval = 0; + unsigned int state; + +/* + * Refuse enabling/disabling a non-existent device + */ + + if ((retval = backend_aerial_get(io_op, &state))) + return retval; + + if (!(state & BT_EX)) + bt_driver.write = NULL; + + return retval; +} + +static struct omnibook_tbl wireless_table[] __initdata = { + {TSM70 | TSA105 | TSX205, {ACPI,}}, /* stubs to select backend */ + {TSM40, {SMI,}}, /* stubs to select backend */ + {0,} +}; + +static struct omnibook_feature __declared_feature bt_driver = { + .name = "bluetooth", + .enabled = 1, + .read = omnibook_bt_read, + .write = omnibook_bt_write, + .init = omnibook_bt_init, + .ectypes = TSM70 | TSM40 | TSA105 | TSX205, + .tbl = wireless_table, +}; + +module_param_named(bluetooth, bt_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(bluetooth, "Use 0 to disable, 1 to enable bluetooth adapter control"); --- linux-2.6.32.orig/ubuntu/omnibook/BOM +++ linux-2.6.32/ubuntu/omnibook/BOM @@ -0,0 +1,2 @@ +Downloaded from: http://sourceforge.net/projects/omke/ +Current Version: 2.20070211 --- linux-2.6.32.orig/ubuntu/omnibook/pio.c +++ linux-2.6.32/ubuntu/omnibook/pio.c @@ -0,0 +1,173 @@ +/* + * pio.c -- low level functions I/O ports + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include +#include +#include +#include + +#include +#include "hardware.h" + +/* + * IO port backend. Only support single or dual ports operations + * private data structure: it's the linked list of requested ports + * + * Race condition issue: omnibook_pio_init/exit functions are only called from + * omnibook_backend_match and omnibook_remove from init.c, this should happen + * only at module init/exit time so there is no need for a lock. + */ + +struct pio_priv_data_t { + unsigned long addr; + struct kref refcount; + struct list_head list; +}; + +static struct pio_priv_data_t pio_priv_data = { + .addr = 0, + .list = LIST_HEAD_INIT(pio_priv_data.list), +}; + +/* + * Match an entry in the linked list helper function: see if we have and entry + * whose addr field match maddr + */ +static struct pio_priv_data_t *omnibook_match_port(struct pio_priv_data_t *data, + unsigned long maddr) +{ + struct pio_priv_data_t *cursor; + + list_for_each_entry(cursor, &data->list, list) { + if (cursor->addr == maddr) { + return cursor; + } + } + return NULL; +} + +/* + * See if we have to request raddr + */ +static int omnibook_claim_port(struct pio_priv_data_t *data, unsigned long raddr) +{ + struct pio_priv_data_t *match, *new; + + match = omnibook_match_port(data, raddr); + if (match) { + /* Already requested by us: increment kref and quit */ + kref_get(&match->refcount); + return 0; + } + + /* there was no match: request the region and add to list */ + if (!request_region(raddr, 1, OMNIBOOK_MODULE_NAME)) { + printk(O_ERR "Request I/O port error\n"); + return -ENODEV; + } + + new = kmalloc(sizeof(struct pio_priv_data_t), GFP_KERNEL); + if (!new) { + release_region(raddr, 1); + return -ENOMEM; + } + + kref_init(&new->refcount); + new->addr = raddr; + list_add(&new->list, &data->list); + + return 0; +} + +/* + * Register read_addr and write_addr + */ +static int omnibook_pio_init(const struct omnibook_operation *io_op) +{ + int retval = 0; + + if (io_op->read_addr + && (retval = omnibook_claim_port(io_op->backend->data, io_op->read_addr))) + goto out; + + if (io_op->write_addr && (io_op->write_addr != io_op->read_addr)) + retval = omnibook_claim_port(io_op->backend->data, io_op->write_addr); + + out: + return retval; +} + +/* + * REALLY release a port + */ +static void omnibook_free_port(struct kref *ref) +{ + struct pio_priv_data_t *data; + + data = container_of(ref, struct pio_priv_data_t, refcount); + release_region(data->addr, 1); + list_del(&data->list); + kfree(data); +} + +/* + * Unregister read_addr and write_addr + */ +static void omnibook_pio_exit(const struct omnibook_operation *io_op) +{ + struct pio_priv_data_t *match; + + match = omnibook_match_port(io_op->backend->data, io_op->read_addr); + if (match) + kref_put(&match->refcount, omnibook_free_port); + + match = omnibook_match_port(io_op->backend->data, io_op->write_addr); + if (match) + kref_put(&match->refcount, omnibook_free_port); + +} + +static int omnibook_io_read(const struct omnibook_operation *io_op, u8 * value) +{ + *value = inb(io_op->read_addr); + if (io_op->read_mask) + *value &= io_op->read_mask; + return 0; +} + +static int omnibook_io_write(const struct omnibook_operation *io_op, u8 value) +{ + outb(io_op->write_addr, value); + return 0; +} + +/* + * Backend interface declarations + */ +struct omnibook_backend pio_backend = { + .name = "pio", + .data = &pio_priv_data, + .init = omnibook_pio_init, + .exit = omnibook_pio_exit, + .byte_read = omnibook_io_read, + .byte_write = omnibook_io_write, +}; + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/battery.c +++ linux-2.6.32/ubuntu/omnibook/battery.c @@ -0,0 +1,557 @@ +/* + * battery.c -- battery related functions + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +struct omnibook_battery_info { + u8 type; /* 1 - Li-Ion, 2 NiMH */ + u16 sn; /* Serial number */ + u16 dv; /* Design Voltage */ + u16 dc; /* Design Capacity */ +}; + +struct omnibook_battery_state { + u16 pv; /* Present Voltage */ + u16 rc; /* Remaining Capacity */ + u16 lc; /* Last Full Capacity */ + u8 gauge; /* Gauge in % */ + u8 status; /* 0 - unknown, 1 - charged, 2 - discharging, 3 - charging, 4 - critical) */ +}; + +enum { + OMNIBOOK_BATTSTAT_UNKNOWN, + OMNIBOOK_BATTSTAT_CHARGED, + OMNIBOOK_BATTSTAT_DISCHARGING, + OMNIBOOK_BATTSTAT_CHARGING, + OMNIBOOK_BATTSTAT_CRITICAL +}; + +#define BAT_OFFSET 0x10 + +static int __backend_u16_read(struct omnibook_operation *io_op, u16 *data) +{ + int retval; + u8 byte; + + retval = __backend_byte_read(io_op, &byte); + if (retval) + return retval; + *data = byte; + io_op->read_addr += 1; + retval = __backend_byte_read(io_op, &byte); + *data += (byte << 8); + return retval; +} + +static int omnibook_battery_present(struct omnibook_operation *io_op, int num) +{ + int retval; + u8 bat; + int i; + + /* + * XE3GF + * TSP10 + * TSM30X + * TSM70 + */ + if (omnibook_ectype & (XE3GF | TSP10 | TSM70 | TSM30X)) { + io_op->read_addr = XE3GF_BAL; + io_op->read_mask = XE3GF_BAL0_MASK; + for (i = 0; i < num; i++) + io_op->read_mask = io_op->read_mask << 1; + retval = __backend_byte_read(io_op, &bat); + /* + * XE3GC + * AMILOD + */ + } else if (omnibook_ectype & (XE3GC | AMILOD)) { + io_op->read_addr = XE3GC_BAT; + io_op->read_mask = XE3GC_BAT0_MASK; + for (i = 0; i < num; i++) + io_op->read_mask = io_op->read_mask << 1; + retval = __backend_byte_read(io_op, &bat); + } else + retval = -ENODEV; + + /* restore default read_mask */ + io_op->read_mask = 0; + + return !!bat; +} + +/* + * Get static battery information + * All info have to be reread every time because battery sould be cahnged + * when laptop is on AC power + * return values: + * < 0 - ERROR + * 0 - OK + * 1 - Battery is not present + * 2 - Not supported + */ +static int omnibook_get_battery_info(struct omnibook_operation *io_op, + int num, + struct omnibook_battery_info *battinfo) +{ + int retval; + /* + * XE3GF + * TSP10 + * TSM70 + * TSM30X + */ + if (omnibook_ectype & (XE3GF | TSP10 | TSM70 | TSM30X)) { + retval = omnibook_battery_present(io_op, num); + if (retval < 0) + return retval; + if (retval) { + io_op->read_addr = XE3GF_BTY0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &(*battinfo).type))) + return retval; + io_op->read_addr = XE3GF_BSN0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).sn))) + return retval; + io_op->read_addr = XE3GF_BDV0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).dv))) + return retval; + io_op->read_addr = XE3GF_BDC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).dc))) + return retval; + + (*battinfo).type = ((*battinfo).type & XE3GF_BTY_MASK) ? 1 : 0; + } else + return 1; + /* + * XE3GC + */ + } else if (omnibook_ectype & (XE3GC)) { + retval = omnibook_battery_present(io_op, num); + if (retval < 0) + return retval; + if (retval) { + io_op->read_addr = XE3GC_BDV0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).dv))) + return retval; + io_op->read_addr = XE3GC_BDC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).dc))) + return retval; + io_op->read_addr = XE3GC_BTY0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &(*battinfo).type))) + return retval; + + (*battinfo).type = ((*battinfo).type & XE3GC_BTY_MASK) ? 1 : 0; + (*battinfo).sn = 0; /* Unknown */ + } else + return 1; + /* + * AMILOD + */ + } else if (omnibook_ectype & (AMILOD)) { + retval = omnibook_battery_present(io_op, num); + if (retval < 0) + return retval; + if (retval) { + io_op->read_addr = AMILOD_BDV0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).dv))) + return retval; + io_op->read_addr = AMILOD_BDC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battinfo).dc))) + return retval; + io_op->read_addr = AMILOD_BTY0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &(*battinfo).type))) + return retval; + + (*battinfo).type = ((*battinfo).type & AMILOD_BTY_MASK) ? 1 : 0; + (*battinfo).sn = 0; /* Unknown */ + } else + return 1; + /* + * FIXME + * OB500 + * OB510 + */ + } else if (omnibook_ectype & (OB500 | OB510)) { + switch (num) { + case 0: + case 1: + case 2: + break; + default: + return -EINVAL; + } + /* + * OB6000 + * OB6100 + * XE4500 + */ + } else if (omnibook_ectype & (OB6000 | OB6100 | XE4500)) { + switch (num) { + case 0: + case 1: + break; + default: + return -EINVAL; + } + } else + return 2; + + return 0; +} + +/* + * Get battery status + * return values: + * < 0 - ERROR + * 0 - OK + * 1 - Battery is not present + * 2 - Not supported + */ +static int omnibook_get_battery_status(struct omnibook_operation *io_op, + int num, + struct omnibook_battery_state *battstat) +{ + int retval; + u8 status; + u16 dc; + int gauge; + + /* + * XE3GF + * TSP10 + * TSM70 + */ + if (omnibook_ectype & (XE3GF | TSP10 | TSM70 | TSM30X)) { + retval = omnibook_battery_present(io_op, num); + if (retval < 0) + return retval; + if (retval) { + io_op->read_addr = XE3GF_BST0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = XE3GF_BRC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = XE3GF_BPV0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + io_op->read_addr = XE3GF_BFC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).lc))) + return retval; + io_op->read_addr = XE3GF_GAU0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &(*battstat).gauge))) + return retval; + + if (status & XE3GF_BST_MASK_CRT) + (*battstat).status = OMNIBOOK_BATTSTAT_CRITICAL; + else if (status & XE3GF_BST_MASK_CHR) + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGING; + else if (status & XE3GF_BST_MASK_DSC) + (*battstat).status = OMNIBOOK_BATTSTAT_DISCHARGING; + else if (status & (XE3GF_BST_MASK_CHR | XE3GF_BST_MASK_DSC)) + (*battstat).status = OMNIBOOK_BATTSTAT_UNKNOWN; + else { + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGED; + } + } else + return 1; + /* + * XE3GC + */ + } else if (omnibook_ectype & (XE3GC)) { + retval = omnibook_battery_present(io_op, num); + if (retval < 0) + return retval; + if (retval) { + io_op->read_addr = XE3GC_BST0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = XE3GC_BRC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = XE3GC_BPV0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + io_op->read_addr = XE3GC_BDC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &dc))) + return retval; + + if (status & XE3GC_BST_MASK_CRT) + (*battstat).status = OMNIBOOK_BATTSTAT_CRITICAL; + else if (status & XE3GC_BST_MASK_CHR) + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGING; + else if (status & XE3GC_BST_MASK_DSC) + (*battstat).status = OMNIBOOK_BATTSTAT_DISCHARGING; + else if (status & (XE3GC_BST_MASK_CHR | XE3GC_BST_MASK_DSC)) + (*battstat).status = OMNIBOOK_BATTSTAT_UNKNOWN; + else { + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGED; + } + gauge = ((*battstat).rc * 100) / dc; + (*battstat).gauge = gauge; + (*battstat).lc = 0; /* Unknown */ + } else + return 1; + /* + * AMILOD + */ + } else if (omnibook_ectype & (AMILOD)) { + retval = omnibook_battery_present(io_op, num); + if (retval < 0) + return retval; + if (retval) { + io_op->read_addr = AMILOD_BST0 + (BAT_OFFSET * num); + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = AMILOD_BRC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = AMILOD_BPV0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + io_op->read_addr = AMILOD_BDC0 + (BAT_OFFSET * num); + if ((retval = __backend_u16_read(io_op, &dc))) + return retval; + + if (status & AMILOD_BST_MASK_CRT) + (*battstat).status = OMNIBOOK_BATTSTAT_CRITICAL; + else if (status & AMILOD_BST_MASK_CHR) + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGING; + else if (status & AMILOD_BST_MASK_DSC) + (*battstat).status = OMNIBOOK_BATTSTAT_DISCHARGING; + else if (status & (AMILOD_BST_MASK_CHR | AMILOD_BST_MASK_DSC)) + (*battstat).status = OMNIBOOK_BATTSTAT_UNKNOWN; + else { + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGED; + } + gauge = ((*battstat).rc * 100) / dc; + (*battstat).gauge = gauge; + (*battstat).lc = 0; /* Unknown */ + } else + return 1; + /* + * OB500 + * OB510 + */ + } else if (omnibook_ectype & (OB500 | OB510)) { + switch (num) { + case 0: + io_op->read_addr = OB500_BT1S; + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = OB500_BT1C; + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = OB500_BT1V; + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + break; + case 1: + io_op->read_addr = OB500_BT2S; + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = OB500_BT2C; + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = OB500_BT2V; + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + break; + case 2: + io_op->read_addr = OB500_BT3S; + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = OB500_BT3C; + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = OB500_BT3V; + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + break; + default: + return -EINVAL; + } + if (status & OB500_BST_MASK_CRT) + (*battstat).status = OMNIBOOK_BATTSTAT_CRITICAL; + else if (status & OB500_BST_MASK_CHR) + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGING; + else if (status & OB500_BST_MASK_DSC) + (*battstat).status = OMNIBOOK_BATTSTAT_DISCHARGING; + else if (status & (OB500_BST_MASK_CHR | OB500_BST_MASK_DSC)) + (*battstat).status = OMNIBOOK_BATTSTAT_UNKNOWN; + else { + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGED; + } + /* + * OB6000 + * OB6100 + * XE4500 + */ + } else if (omnibook_ectype & (OB6000 | OB6100 | XE4500)) { + switch (num) { + case 0: + io_op->read_addr = OB500_BT1S; + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = OB500_BT1C; + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = OB500_BT1V; + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + break; + case 1: + io_op->read_addr = OB500_BT3S; + if ((retval = __backend_byte_read(io_op, &status))) + return retval; + io_op->read_addr = OB500_BT3C; + if ((retval = __backend_u16_read(io_op, &(*battstat).rc))) + return retval; + io_op->read_addr = OB500_BT3V; + if ((retval = __backend_u16_read(io_op, &(*battstat).pv))) + return retval; + break; + default: + return -EINVAL; + } + if (status & OB500_BST_MASK_CRT) + (*battstat).status = OMNIBOOK_BATTSTAT_CRITICAL; + else if (status & OB500_BST_MASK_CHR) + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGING; + else if (status & OB500_BST_MASK_DSC) + (*battstat).status = OMNIBOOK_BATTSTAT_DISCHARGING; + else if (status & (OB500_BST_MASK_CHR | OB500_BST_MASK_DSC)) + (*battstat).status = OMNIBOOK_BATTSTAT_UNKNOWN; + else { + (*battstat).status = OMNIBOOK_BATTSTAT_CHARGED; + } + } else { + return 2; + } + return 0; +} + +static int omnibook_battery_read(char *buffer, struct omnibook_operation *io_op) +{ + char *statustr; + char *typestr; + int max = 0; + int num = 0; + int len = 0; + int retval; + int i; + struct omnibook_battery_info battinfo; + struct omnibook_battery_state battstat; + /* + * XE3GF + * XE3GC + * 0B6000 + * 0B6100 + * XE4500 + * AMILOD + * TSP10 + */ + if (omnibook_ectype & (XE3GF | XE3GC | OB6000 | OB6100 | XE4500 | AMILOD | TSP10)) + max = 2; + /* + * OB500 + * 0B510 + */ + else if (omnibook_ectype & (OB500 | OB510)) + max = 3; + /* + * TSM30X + * TSM70 + */ + else if (omnibook_ectype & (TSM70 | TSM30X)) + max = 1; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + for (i = 0; i < max; i++) { + retval = omnibook_get_battery_info(io_op, i, &battinfo); + if (retval == 0) { + num++; + omnibook_get_battery_status(io_op, i, &battstat); + typestr = (battinfo.type) ? "Li-Ion" : "NiMH"; + switch (battstat.status) { + case OMNIBOOK_BATTSTAT_CHARGED: + statustr = "charged"; + break; + case OMNIBOOK_BATTSTAT_DISCHARGING: + statustr = "discharging"; + break; + case OMNIBOOK_BATTSTAT_CHARGING: + statustr = "charging"; + break; + case OMNIBOOK_BATTSTAT_CRITICAL: + statustr = "critical"; + break; + default: + statustr = "unknown"; + } + + len += sprintf(buffer + len, "Battery: %11d\n", i); + len += sprintf(buffer + len, "Type: %11s\n", typestr); + if (battinfo.sn) + len += + sprintf(buffer + len, "Serial Number: %11d\n", + battinfo.sn); + len += sprintf(buffer + len, "Present Voltage: %11d mV\n", battstat.pv); + len += sprintf(buffer + len, "Design Voltage: %11d mV\n", battinfo.dv); + len += sprintf(buffer + len, "Remaining Capacity: %11d mAh\n", battstat.rc); + if (battstat.lc) + len += + sprintf(buffer + len, "Last Full Capacity: %11d mAh\n", + battstat.lc); + len += sprintf(buffer + len, "Design Capacity: %11d mAh\n", battinfo.dc); + len += + sprintf(buffer + len, "Gauge: %11d %%\n", battstat.gauge); + len += sprintf(buffer + len, "Status: %11s\n", statustr); + len += sprintf(buffer + len, "\n"); + } + } + if (num == 0) + len += sprintf(buffer + len, "No battery present\n"); + + mutex_unlock(&io_op->backend->mutex); + + return len; +} + +static struct omnibook_tbl battery_table[] __initdata = { + {XE3GF | XE3GC | AMILOD | TSP10 | TSM70 | TSM30X, {EC,}}, + {0,} +}; + +static struct omnibook_feature __declared_feature battery_driver = { + .name = "battery", +#ifdef CONFIG_OMNIBOOK_LEGACY + .enabled = 1, +#else + .enabled = 0, +#endif + .read = omnibook_battery_read, + .ectypes = XE3GF | XE3GC | AMILOD | TSP10 | TSM70 | TSM30X, /* FIXME: OB500|OB6000|OB6100|XE4500 */ + .tbl = battery_table, +}; + +module_param_named(battery, battery_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(battery, "Use 0 to disable, 1 to enable battery status monitoring"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/compal.c +++ linux-2.6.32/ubuntu/omnibook/compal.c @@ -0,0 +1,526 @@ +/* + * compal.c -- EC PIO Command/Data/Index mode low-level access code + * + * 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. + * + * Written by Mathieu Bérard , 2006 + * + */ + +#include "omnibook.h" + +#include +#include +#include +#include + +#include +#include "hardware.h" + +/* + * ATI's IXP PCI-LPC bridge + */ +#define PCI_DEVICE_ID_ATI_SB400 0x4377 + +/* + * PCI Config space regiser + * Laptop with Intel ICH Chipset + * See ICH6M and ICH7M spec + */ +#define INTEL_LPC_GEN1_DEC 0x84 +#define INTEL_LPC_GEN4_DEC 0x90 +#define INTEL_IOPORT_BASE 0xff2c + +/* + * PCI Config space regiser + * Laptop with ATI Chipset + * FIXME Untested, name unknown + */ +#define ATI_LPC_REG 0x4a +#define ATI_IOPORT_BASE 0xfd60 + +/* + *This interface uses 2 ports for command and 1 port for data + *These are relative to the ioport_base address + */ + +#define PIO_PORT_COMMAND1 0x1 +#define PIO_PORT_COMMAND2 0x2 +#define PIO_PORT_DATA 0x3 + +/* + * Private data of this backend + */ +static struct pci_dev *lpc_bridge; /* Southbridge chip ISA bridge/LPC interface PCI device */ +static u32 ioport_base; /* PIO base adress */ +static union { + u16 word; + u32 dword; +} pci_reg_state; /* Saved state of register in PCI config spave */ + +/* + * Possible list of supported southbridges + * Here mostly to implement a more or less clean PCI probing + * Works only because of previous DMI probing. + * Shared with nbsmi backend + */ +const struct pci_device_id lpc_bridge_table[] = { + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_10, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801E_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_30, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_31, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_4, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SB400, PCI_ANY_ID, PCI_ANY_ID, 0, 0,}, + {0,}, /* End of list */ +}; + +/* + * Low-level Read function: + * Write a 2-bytes wide command to the COMMAND ports + * Read the result in the DATA port + */ +static unsigned char lowlevel_read(u16 command) +{ + unsigned char data; + outb((command & 0xff00) >> 8, ioport_base + PIO_PORT_COMMAND1); + outb(command & 0x00ff, ioport_base + PIO_PORT_COMMAND2); + data = inb(ioport_base + PIO_PORT_DATA); + return data; +} + +/* + * Low-level Write function: + * Write a 2-bytes wide command to the COMMAND ports + * Write the result in the DATA port + */ +static void lowlevel_write(u16 command, u8 data) +{ + outb((command & 0xff00) >> 8, ioport_base + PIO_PORT_COMMAND1); + outb(command & 0x00ff, ioport_base + PIO_PORT_COMMAND2); + outb(data, ioport_base + PIO_PORT_DATA); +} + +/* + * Probe for a state of the PIO Command/Data/Index interface + * Give some time for the controler to settle in the desired state + * mode significance: + * 0: Waiting for command + * 1,2,3: I am confused FIXME + */ +static int check_cdimode_flag(unsigned int mode) +{ + int i; + int retval; + + /*dprintk("Index mode:");*/ + for (i = 1; i <= 250; i++) { + retval = lowlevel_read(0xfbfc); + /*dprintk_simple(" [%i]", retval);*/ + if (retval == mode) { + /*dprintk_simple(".\n"); + dprintk("Index Mode Ok (%i) after %i iter\n", mode, i);*/ + return 0; + } + udelay(100); + } + printk(O_ERR "check_cdimode_flag timeout.\n"); + return -ETIME; +} + +/* + * Check for conventional default (0xf432) state in Commad ports + */ +static int check_default_state(void) +{ + int i; + + for (i = 1; i <= 250; i++) { + if ((inb(ioport_base + PIO_PORT_COMMAND1) == 0xf4) + && (inb(ioport_base + PIO_PORT_COMMAND2) == 0x32)) + return 0; + udelay(100); + } + printk(O_ERR "check_default_state timeout.\n"); + return -ETIME; +} + +/* + * Enable EC Command/Data/Index PIO Access and then check EC state. + * Enabling is done in PCI config space of the LPC bridge. + * + * Just after Enabling, the EC should be in a precisly defined state: + * - PIO should be in a conventional default state (0xf432 in the Command ports) + * - Command/Data/Index interface waiting for command + * The EC is expected to be in that state prior to any attempt to use the interface. + * + */ +static int enable_cdimode(void) +{ + union { + u16 word; + u32 dword; + } value; + + switch (lpc_bridge->vendor) { + case PCI_VENDOR_ID_INTEL: + switch (lpc_bridge->device) { + case PCI_DEVICE_ID_INTEL_ICH7_0: /* ICH7 */ + case PCI_DEVICE_ID_INTEL_ICH7_1: + case PCI_DEVICE_ID_INTEL_ICH7_30: + case PCI_DEVICE_ID_INTEL_ICH7_31: + case PCI_DEVICE_ID_INTEL_ICH8_4: /* ICH8 */ + pci_read_config_dword(lpc_bridge, INTEL_LPC_GEN4_DEC, &(value.dword)); + pci_reg_state.dword = value.dword; + value.dword = 0x3CFF21; + pci_write_config_dword(lpc_bridge, INTEL_LPC_GEN4_DEC, value.dword); + break; + default: /* All other Intel chipset */ + pci_read_config_word(lpc_bridge, INTEL_LPC_GEN1_DEC, &(value.word)); + pci_reg_state.word = value.word; + value.word = (INTEL_IOPORT_BASE & 0xfff1) | 0x1; + pci_write_config_word(lpc_bridge, INTEL_LPC_GEN1_DEC, value.word); + } + break; + case PCI_VENDOR_ID_ATI: + pci_read_config_dword(lpc_bridge, ATI_LPC_REG, &(value.dword)); + pci_reg_state.dword = value.dword; + value.dword = ((pci_reg_state.dword & 0x7f) | 0x80) << 0x10; + pci_write_config_dword(lpc_bridge, ATI_LPC_REG, value.dword); + break; + default: + BUG(); + } + dprintk("Saved state of PCI register: [%x].\n", pci_reg_state.dword); + + if (check_default_state() || check_cdimode_flag(0)) { + printk(O_ERR "EC state check failure, please report.\n"); + return -EIO; + } + + return 0; + +} + +/* + * Send a write command and associated data code to be written + * Known commands an associated code significance: + * 0xfbfd: Select Index with 'code' ordinal + * 0xfbfe: Set to 'code' a previously selected Index + * 0xfbfc: Set CDI mode flag + */ +static int send_ec_cmd(unsigned int command, u8 code) +{ + lowlevel_write(0xfbfc, 0x2); + lowlevel_write(command, code); + lowlevel_write(0xfbfc, 0x1); + if (check_cdimode_flag(2)) + return -ETIME; + return 0; +} + +/* + * Send a read command + * Known commands an associated code significance: + * 0xfbfe: Read a previously selected Index + * 0xfbfc: Set CDI mode flag + */ +static int read_ec_cmd(unsigned int command, u8 * value) +{ + *value = lowlevel_read(command); + lowlevel_write(0xfbfc, 0x1); + if (check_cdimode_flag(2)) + return -ETIME; + return 0; +} + +/* + * Disable EC Command/Data/Index PIO Access + * Step 1: clear_cdimode + * Send Disable command + * Revert PIO interface to conventional default state (0xf432 in the Command ports) + * Step 2: clear_cdimode_pci + * Disable the interface in the PCI config space of the Southbridge + * These steps are separated due to constrains in error path treatement + */ +static void clear_cdimode(void) +{ + lowlevel_write(0xfbfc, 0x0); + outb(0xf4, ioport_base + PIO_PORT_COMMAND1); + outb(0x32, ioport_base + PIO_PORT_COMMAND2); +} + +static void clear_cdimode_pci(void) +{ + switch (lpc_bridge->vendor) { + case PCI_VENDOR_ID_INTEL: + switch (lpc_bridge->device) { + case PCI_DEVICE_ID_INTEL_ICH7_0: /* ICH7 */ + case PCI_DEVICE_ID_INTEL_ICH7_1: + case PCI_DEVICE_ID_INTEL_ICH7_30: + case PCI_DEVICE_ID_INTEL_ICH7_31: + case PCI_DEVICE_ID_INTEL_ICH8_4: /* ICH8 */ + pci_write_config_dword(lpc_bridge, INTEL_LPC_GEN4_DEC, pci_reg_state.dword); + break; + default: /* All other Intel chipset */ + pci_write_config_word(lpc_bridge, INTEL_LPC_GEN1_DEC, pci_reg_state.word); + } + break; + case PCI_VENDOR_ID_ATI: + pci_write_config_dword(lpc_bridge, ATI_LPC_REG, pci_reg_state.dword); + break; + default: + BUG(); + } +} + +/* + * Try to init the backend + * This function can be called blindly as it use a kref + * to check if the init sequence was already done. + */ +static int omnibook_cdimode_init(const struct omnibook_operation *io_op) +{ + int retval = 0; + int i; + + /* ectypes other than TSM70 have no business with this backend */ + if (!(omnibook_ectype & (TSM70 | TSX205))) + return -ENODEV; + + if (io_op->backend->already_failed) { + dprintk("CDI backend init already failed, skipping.\n"); + return -ENODEV; + } + + if (!lpc_bridge) { + /* Fist use of the backend */ + dprintk("Try to init cdimode\n"); + mutex_init(&io_op->backend->mutex); + mutex_lock(&io_op->backend->mutex); + kref_init(&io_op->backend->kref); + + /* PCI probing: find the LPC Super I/O bridge PCI device */ + for (i = 0; !lpc_bridge && lpc_bridge_table[i].vendor; ++i) + lpc_bridge = + pci_get_device(lpc_bridge_table[i].vendor, lpc_bridge_table[i].device, + NULL); + + if (!lpc_bridge) { + printk(O_ERR "Fail to find a supported LPC I/O bridge, please report\n"); + retval = -ENODEV; + goto error1; + } + + if ((retval = pci_enable_device(lpc_bridge))) { + printk(O_ERR "Unable to enable PCI device.\n"); + goto error2; + } + + switch (lpc_bridge->vendor) { + case PCI_VENDOR_ID_INTEL: + ioport_base = INTEL_IOPORT_BASE; + break; + case PCI_VENDOR_ID_ATI: + ioport_base = ATI_IOPORT_BASE; + break; + default: + BUG(); + } + + if (!request_region(ioport_base, 4, OMNIBOOK_MODULE_NAME)) { + printk(O_ERR "Request I/O region error\n"); + retval = -ENODEV; + goto error2; + } + + /* + * Make an enable-check disable cycle for testing purpose + */ + + retval = enable_cdimode(); + if (retval) + goto error3; + + clear_cdimode(); + clear_cdimode_pci(); + + dprintk("Cdimode init ok\n"); + mutex_unlock(&io_op->backend->mutex); + return 0; + } else { + dprintk("Cdimode has already been initialized\n"); + kref_get(&io_op->backend->kref); + return 0; + } + + error3: + clear_cdimode_pci(); + release_region(ioport_base, 4); + error2: + pci_dev_put(lpc_bridge); + lpc_bridge = NULL; + error1: + io_op->backend->already_failed = 1; + mutex_unlock(&io_op->backend->mutex); + mutex_destroy(&io_op->backend->mutex); + return retval; +} + +static void cdimode_free(struct kref *ref) +{ + struct omnibook_backend *backend; + + dprintk("Cdimode not used anymore: disposing\n"); + + backend = container_of(ref, struct omnibook_backend, kref); + + mutex_lock(&backend->mutex); + pci_dev_put(lpc_bridge); + release_region(ioport_base, 4); + lpc_bridge = NULL; + mutex_unlock(&backend->mutex); + mutex_destroy(&backend->mutex); +} + +static void omnibook_cdimode_exit(const struct omnibook_operation *io_op) +{ + /* ectypes other than TSM70 have no business with this backend */ + BUG_ON(!(omnibook_ectype & (TSM70 | TSX205))); + dprintk("Trying to dispose cdimode\n"); + kref_put(&io_op->backend->kref, cdimode_free); +} + +/* + * Read EC index and write result to value + * 'EC index' here is unrelated to an index in the EC registers + */ +static int omnibook_cdimode_read(const struct omnibook_operation *io_op, u8 * value) +{ + int retval = 0; + + if (!lpc_bridge) + return -ENODEV; + + retval = enable_cdimode(); + if (retval) + goto out; + retval = send_ec_cmd(0xfbfd, (unsigned int)io_op->read_addr); + if (retval) + goto error; + retval = read_ec_cmd(0xfbfe, value); + + if (io_op->read_mask) + *value &= io_op->read_mask; + + error: + clear_cdimode(); + out: + clear_cdimode_pci(); + return retval; +} + +/* + * Write value + * 'EC index' here is unrelated to an index in the EC registers + */ +static int omnibook_cdimode_write(const struct omnibook_operation *io_op, u8 value) +{ + int retval = 0; + + if (!lpc_bridge) + return -ENODEV; + + retval = enable_cdimode(); + if (retval) + goto out; + retval = send_ec_cmd(0xfbfd, (unsigned int)io_op->write_addr); + if (retval) + goto error; + retval = send_ec_cmd(0xfbfe, value); + error: + clear_cdimode(); + out: + clear_cdimode_pci(); + return retval; + +} + +/* + * Fn+foo and multimedia hotkeys handling + */ +static int omnibook_cdimode_hotkeys(const struct omnibook_operation *io_op, unsigned int state) +{ + int retval; + + struct omnibook_operation hotkeys_op = + { CDI, 0, TSM70_FN_INDEX, 0, TSM70_FN_ENABLE, TSM70_FN_DISABLE}; + + /* Fn+foo handling */ + retval = __omnibook_toggle(&hotkeys_op, !!(state & HKEY_FN)); + if (retval < 0) + return retval; + + /* Multimedia keys handling */ + hotkeys_op.write_addr = TSM70_HOTKEYS_INDEX; + hotkeys_op.on_mask = TSM70_HOTKEYS_ENABLE; + hotkeys_op.off_mask = TSM70_HOTKEYS_DISABLE; + retval = __omnibook_toggle(&hotkeys_op, !!(state & HKEY_MULTIMEDIA)); + + return retval; +} + +/* Scan index space, this hard locks my machine */ +#if 0 +static int compal_scan(char *buffer) +{ + int len = 0; + int i, j; + u8 v; + + for (i = 0; i < 255; i += 16) { + for (j = 0; j < 16; j++) { + omnibook_compal_read(i + j, &v); + len += sprintf(buffer + len, "Read index %02x: %02x\n", i + j, v); + mdelay(500); + } + if (j != 16) + break; + } + + return len; +} +#endif + +struct omnibook_backend compal_backend = { + .name = "compal", + .hotkeys_write_cap = HKEY_MULTIMEDIA | HKEY_FN, + .init = omnibook_cdimode_init, + .exit = omnibook_cdimode_exit, + .byte_read = omnibook_cdimode_read, + .byte_write = omnibook_cdimode_write, + .hotkeys_set = omnibook_cdimode_hotkeys, +}; + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/info.c +++ linux-2.6.32/ubuntu/omnibook/info.c @@ -0,0 +1,68 @@ +/* + * info.c -- trivial informational features + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include + +static int omnibook_version_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + len += sprintf(buffer + len, "%s\n", OMNIBOOK_MODULE_VERSION); + + return len; +} + +static int omnibook_dmi_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + len += sprintf(buffer + len, "BIOS Vendor: %s\n", dmi_get_system_info(DMI_BIOS_VENDOR)); + len += sprintf(buffer + len, "BIOS Version: %s\n", dmi_get_system_info(DMI_BIOS_VERSION)); + len += sprintf(buffer + len, "BIOS Release: %s\n", dmi_get_system_info(DMI_BIOS_DATE)); + len += sprintf(buffer + len, "System Vendor: %s\n", dmi_get_system_info(DMI_SYS_VENDOR)); + len += sprintf(buffer + len, "Product Name: %s\n", dmi_get_system_info(DMI_PRODUCT_NAME)); + len += + sprintf(buffer + len, "Version: %s\n", dmi_get_system_info(DMI_PRODUCT_VERSION)); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) + len += + sprintf(buffer + len, "Serial Number: %s\n", dmi_get_system_info(DMI_PRODUCT_SERIAL)); +#endif + len += sprintf(buffer + len, "Board Vendor: %s\n", dmi_get_system_info(DMI_BOARD_VENDOR)); + len += sprintf(buffer + len, "Board Name: %s\n", dmi_get_system_info(DMI_BOARD_VERSION)); + + return len; +} + +static struct omnibook_feature __declared_feature version_driver = { + .name = "version", + .enabled = 1, + .read = omnibook_version_read, +}; + +static struct omnibook_feature __declared_feature dmi_driver = { + .name = "dmi", + .enabled = 1, + .read = omnibook_dmi_read, +}; + +module_param_named(dmi, dmi_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(dmi, "Use 0 to disable, 1 to enable DMI informations display support"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/touchpad.c +++ linux-2.6.32/ubuntu/omnibook/touchpad.c @@ -0,0 +1,126 @@ +/* + * touchpad.c -- enable/disable touchpad + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_touchpad_set(struct omnibook_operation *io_op, int status) +{ + int retval = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + if ((retval = __omnibook_toggle(io_op, !!status))) { + printk(O_ERR "Failed touchpad %sable command.\n", status ? "en" : "dis"); + goto out; + } + + io_op->backend->touchpad_state = !!status; + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Power management handlers: redisable touchpad on resume (if necessary) + */ +static int omnibook_touchpad_resume(struct omnibook_operation *io_op) +{ + int retval; + mutex_lock(&io_op->backend->mutex); + retval = __omnibook_toggle(io_op, !!io_op->backend->touchpad_state); + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Hardware query is unsupported, so reading is unreliable. + */ +static int omnibook_touchpad_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + + if(mutex_lock_interruptible(&io_op->backend->mutex)) + return -ERESTARTSYS; + + len += + sprintf(buffer + len, "Last touchpad action was an %s command.\n", + io_op->backend->touchpad_state ? "enable" : "disable"); + + mutex_unlock(&io_op->backend->mutex); + return len; +} + +static int omnibook_touchpad_write(char *buffer, struct omnibook_operation *io_op) +{ + int cmd; + + if (*buffer == '0' || *buffer == '1') { + cmd = *buffer - '0'; + if (!omnibook_touchpad_set(io_op, cmd)) { + dprintk("%sabling touchpad.\n", cmd ? "En" : "Dis"); + } + } else { + return -EINVAL; + } + return 0; +} + + +static int __init omnibook_touchpad_init(struct omnibook_operation *io_op) +{ + mutex_lock(&io_op->backend->mutex); + /* Touchpad is assumed to be enabled by default */ + io_op->backend->touchpad_state = 1; + mutex_unlock(&io_op->backend->mutex); + return 0; +} + +/* + * Reenable touchpad upon exit + */ +static void __exit omnibook_touchpad_cleanup(struct omnibook_operation *io_op) +{ + omnibook_touchpad_set(io_op, 1); + printk(O_INFO "Enabling touchpad.\n"); +} + +static struct omnibook_tbl touchpad_table[] __initdata = { + {XE3GF | XE3GC | TSP10, + COMMAND(KBC, OMNIBOOK_KBC_CMD_TOUCHPAD_ENABLE, OMNIBOOK_KBC_CMD_TOUCHPAD_DISABLE)}, + {TSM70, {CDI, 0, TSM70_FN_INDEX, 0, TSM70_TOUCHPAD_ON, TSM70_TOUCHPAD_OFF}}, + {0,} +}; + +static struct omnibook_feature __declared_feature touchpad_driver = { + .name = "touchpad", + .enabled = 1, + .read = omnibook_touchpad_read, + .write = omnibook_touchpad_write, + .init = omnibook_touchpad_init, + .exit = omnibook_touchpad_cleanup, + .resume = omnibook_touchpad_resume, + .ectypes = XE3GF | XE3GC | TSP10 | TSM70, + .tbl = touchpad_table, +}; + +module_param_named(touchpad, touchpad_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(touchpad, "Use 0 to disable, 1 to enable touchpad handling"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/init.c +++ linux-2.6.32/ubuntu/omnibook/init.c @@ -0,0 +1,535 @@ +/* + * init.c -- module initialization code + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include +#include +#include + +#include "hardware.h" +#include "laptop.h" + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) +#include +#else +#include +#endif + +/* + * For compatibility with kernel older than 2.6.11 + */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)) +typedef u32 pm_message_t; +#endif + +static int __init omnibook_probe(struct platform_device *dev); +static int __exit omnibook_remove(struct platform_device *dev); +static int omnibook_suspend(struct platform_device *dev, pm_message_t state); +static int omnibook_resume(struct platform_device *dev); + +/* + * For compatibility with kernel older than 2.6.15 + */ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)) + +#define to_platform_device(x) container_of((x), struct platform_device, dev) + +static int __init compat_omnibook_probe(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + return omnibook_probe(pdev); +} + +static int __exit compat_omnibook_remove(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + return omnibook_remove(pdev); +} + +static int compat_omnibook_suspend(struct device *dev, pm_message_t state, u32 level) +{ + struct platform_device *pdev = to_platform_device(dev); + return omnibook_suspend(pdev, state); +} + +static int compat_omnibook_resume(struct device *dev, u32 level) +{ + struct platform_device *pdev = to_platform_device(dev); + return omnibook_resume(pdev); +} + +#endif + +static struct proc_dir_entry *omnibook_proc_root = NULL; + +enum omnibook_ectype_t omnibook_ectype = NONE; + +static const char *laptop_model __initdata; + +static int omnibook_userset = 0; + +/* + * The platform_driver interface was added in linux 2.6.15 + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) + +static struct platform_device *omnibook_device; + +static struct platform_driver omnibook_driver = { + .probe = omnibook_probe, + .remove = omnibook_remove, +#ifdef CONFIG_PM + .suspend = omnibook_suspend, + .resume = omnibook_resume, +#endif + .driver = { + .name = OMNIBOOK_MODULE_NAME, + .owner = THIS_MODULE, + }, +}; + +#else /* 2.6.15 */ + +static struct device_driver omnibook_driver = { + .name = OMNIBOOK_MODULE_NAME, + .bus = &platform_bus_type, + .probe = compat_omnibook_probe, + .remove = compat_omnibook_remove, +#ifdef CONFIG_PM + .suspend = compat_omnibook_suspend, + .resume = compat_omnibook_resume, +#endif +}; + +static struct platform_device omnibook_device = { + .name = OMNIBOOK_MODULE_NAME, +}; + +#endif /* 2.6.15 */ + +/* Linked list of all enabled features */ +static struct omnibook_feature *omnibook_available_feature; + +/* Delimiters of the .features section wich holds all the omnibook_feature structs */ +extern struct omnibook_feature _start_features_driver[]; +extern struct omnibook_feature _end_features_driver[]; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) +static int __init dmi_matched(struct dmi_system_id *dmi) +#else +static int __init dmi_matched(const struct dmi_system_id *dmi) +#endif +{ + omnibook_ectype = (enum omnibook_ectype_t)dmi->driver_data; + if (dmi->ident) + laptop_model = (char *)dmi->ident; + else + laptop_model = dmi_get_system_info(DMI_PRODUCT_VERSION); + return 1; /* return non zero means we stop the parsing selecting this entry */ +} + +/* + * Callback function for procfs file reading: the name of the file read was stored in *data + */ +static int procfile_read_dispatch(char *page, char **start, off_t off, int count, int *eof, + void *data) +{ + struct omnibook_feature *feature = (struct omnibook_feature *)data; + int len = 0; + + if (!feature || !feature->read) + return -EINVAL; + + if(off) + goto out; + + len = feature->read(page, feature->io_op); + if (len < 0) + return len; + + out: + *eof = 1; + return len; +} + +/* + * Callback function for procfs file writing: the name of the file written was stored in *data + */ +static int procfile_write_dispatch(struct file *file, const char __user * userbuf, + unsigned long count, void *data) +{ + struct omnibook_feature *feature = (struct omnibook_feature *)data; + char *kernbuf; + int retval; + + if (!feature || !feature->write) + return -EINVAL; + + kernbuf = kmalloc(count + 1, GFP_KERNEL); + if (!kernbuf) + return -ENOMEM; + + if (copy_from_user(kernbuf, userbuf, count)) { + kfree(kernbuf); + return -EFAULT; + } + + /* Make sure the string is \0 terminated */ + kernbuf[count] = '\0'; + + retval = feature->write(kernbuf, feature->io_op); + if (retval == 0) + retval = count; + + kfree(kernbuf); + + return retval; +} + +/* + * Match an ectype and return pointer to corresponding omnibook_operation. + * Also make corresponding backend initialisation if necessary, and skip + * to the next entry if it fails. + */ +static struct omnibook_operation *omnibook_backend_match(struct omnibook_tbl *tbl) +{ + int i; + struct omnibook_operation *matched = NULL; + + for (i = 0; tbl[i].ectypes; i++) { + if (omnibook_ectype & tbl[i].ectypes) { + if (tbl[i].io_op.backend->init && tbl[i].io_op.backend->init(&tbl[i].io_op)) { + dprintk("Backend %s init failed, skipping entry.\n", + tbl[i].io_op.backend->name); + continue; + } + matched = &tbl[i].io_op; + dprintk("Returning table entry nr %i.\n", i); + break; + } + } + return matched; +} + +/* + * Initialise a feature and add it to the linked list of active features + */ +static int __init omnibook_init(struct omnibook_feature *feature) +{ + int retval = 0; + mode_t pmode; + struct proc_dir_entry *proc_entry; + struct omnibook_operation *op; + + if (!feature) + return -EINVAL; + +/* + * Select appropriate backend for feature operations + * We copy the io_op field so the tbl can be initdata + */ + if (feature->tbl) { + dprintk("Begin table match of %s feature.\n", feature->name); + op = omnibook_backend_match(feature->tbl); + if (!op) { + dprintk("Match failed: disabling %s.\n", feature->name); + return -ENODEV; + } + feature->io_op = kmalloc(sizeof(struct omnibook_operation), GFP_KERNEL); + if (!feature->io_op) + return -ENOMEM; + memcpy(feature->io_op, op, sizeof(struct omnibook_operation)); + } else + dprintk("%s feature has no backend table, io_op not initialized.\n", feature->name); + +/* + * Specific feature init code + */ + if (feature->init && (retval = feature->init(feature->io_op))) { + printk(O_ERR "Init function of %s failed with error %i.\n", feature->name, retval); + goto err; + } +/* + * procfs file setup + */ + if (feature->name && feature->read) { + pmode = S_IFREG | S_IRUGO; + if (feature->write) { + pmode |= S_IWUSR; + if (omnibook_userset) + pmode |= S_IWUGO; + } + + proc_entry = create_proc_entry(feature->name, pmode, omnibook_proc_root); + + if (!proc_entry) { + printk(O_ERR "Unable to create proc entry %s\n", feature->name); + if (feature->exit) + feature->exit(feature->io_op); + retval = -ENOENT; + goto err; + } + proc_entry->data = feature; + proc_entry->read_proc = &procfile_read_dispatch; + if (feature->write) + proc_entry->write_proc = &procfile_write_dispatch; + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) + proc_entry->owner = THIS_MODULE; + #endif + } + list_add_tail(&feature->list, &omnibook_available_feature->list); + return 0; + err: + if (feature->io_op && feature->io_op->backend->exit) + feature->io_op->backend->exit(feature->io_op); + kfree(feature->io_op); + return retval; +} + +/* + * Callback function for driver registering : + * Initialize the linked list of enabled features and call omnibook_init to populate it + */ +static int __init omnibook_probe(struct platform_device *dev) +{ + int i; + struct omnibook_feature *feature; + + /* temporary hack */ + mutex_init(&kbc_backend.mutex); + mutex_init(&pio_backend.mutex); + mutex_init(&ec_backend.mutex); + + omnibook_available_feature = kzalloc(sizeof(struct omnibook_feature), GFP_KERNEL); + if (!omnibook_available_feature) + return -ENOMEM; + INIT_LIST_HEAD(&omnibook_available_feature->list); + + for (i = 0; i < _end_features_driver - _start_features_driver; i++) { + + feature = &_start_features_driver[i]; + + if (!feature->enabled) + continue; + + if ((omnibook_ectype & feature->ectypes) || (!feature->ectypes)) + omnibook_init(feature); + } + + printk(O_INFO "Enabled features:"); + list_for_each_entry(feature, &omnibook_available_feature->list, list) { + if (feature->name) + printk(" %s", feature->name); + } + printk(".\n"); + + return 0; +} + +/* + * Callback function for driver removal + */ +static int __exit omnibook_remove(struct platform_device *dev) +{ + struct omnibook_feature *feature, *temp; + + list_for_each_entry_safe(feature, temp, &omnibook_available_feature->list, list) { + list_del(&feature->list); + /* Feature specific cleanup */ + if (feature->exit) + feature->exit(feature->io_op); + /* Generic backend cleanup */ + if (feature->io_op && feature->io_op->backend->exit) + feature->io_op->backend->exit(feature->io_op); + if (feature->name) + remove_proc_entry(feature->name, omnibook_proc_root); + kfree(feature->io_op); + } + kfree(omnibook_available_feature); + + return 0; +} + +/* + * Callback function for system suspend + */ +static int omnibook_suspend(struct platform_device *dev, pm_message_t state) +{ + int retval; + struct omnibook_feature *feature; + + list_for_each_entry(feature, &omnibook_available_feature->list, list) { + if (feature->suspend) { + retval = feature->suspend(feature->io_op); + if (retval) + printk(O_ERR "Unable to suspend the %s feature (error %i).\n", feature->name, retval); + } + } + return 0; +} + +/* + * Callback function for system resume + */ +static int omnibook_resume(struct platform_device *dev) +{ + int retval; + struct omnibook_feature *feature; + + list_for_each_entry(feature, &omnibook_available_feature->list, list) { + if (feature->resume) { + retval = feature->resume(feature->io_op); + if (retval) + printk(O_ERR "Unable to resume the %s feature (error %i).\n", feature->name, retval); + } + } + return 0; +} + +/* + * Find a given available feature by its name + */ +struct omnibook_feature *omnibook_find_feature(char *name) +{ + struct omnibook_feature *feature; + + list_for_each_entry(feature, &omnibook_available_feature->list, list) { + if (!strcmp(feature->name, name)) + return feature; + } + return NULL; +} + +/* + * Maintain compatibility with the old ectype numbers: + * ex: The user set/get ectype=12 for TSM70=2^(12-1) + */ +static int __init set_ectype_param(const char *val, struct kernel_param *kp) +{ + char *endp; + int value; + + if (!val) + return -EINVAL; + + value = simple_strtol(val, &endp, 10); + if (endp == val) /* No match */ + return -EINVAL; + omnibook_ectype = 1 << (value - 1); + return 0; +} + +static int get_ectype_param(char *buffer, struct kernel_param *kp) +{ + return sprintf(buffer, "%i", ffs(omnibook_ectype)); +} + +static int __init omnibook_module_init(void) +{ + int retval; + + printk(O_INFO "Driver version %s.\n", OMNIBOOK_MODULE_VERSION); + + if (omnibook_ectype != NONE) + printk(O_WARN "Forced load with EC type %i.\n", ffs(omnibook_ectype)); + else if (dmi_check_system(omnibook_ids)) + printk(O_INFO "%s detected.\n", laptop_model); + else + printk(O_INFO "Unknown model.\n"); + + omnibook_proc_root = proc_mkdir(OMNIBOOK_MODULE_NAME, NULL); + if (!omnibook_proc_root) { + printk(O_ERR "Unable to create /proc/%s.\n", OMNIBOOK_MODULE_NAME); + return -ENOENT; + } + +/* + * The platform_driver interface was added in linux 2.6.15 + */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) + + retval = platform_driver_register(&omnibook_driver); + if (retval < 0) + return retval; + + omnibook_device = platform_device_alloc(OMNIBOOK_MODULE_NAME, -1); + if (!omnibook_device) { + platform_driver_unregister(&omnibook_driver); + return -ENOMEM; + } + + retval = platform_device_add(omnibook_device); + if (retval) { + platform_device_put(omnibook_device); + platform_driver_unregister(&omnibook_driver); + return retval; + } +#else /* 2.6.15 */ + + retval = driver_register(&omnibook_driver); + if (retval < 0) + return retval; + + retval = platform_device_register(&omnibook_device); + + if (retval) { + driver_unregister(&omnibook_driver); + return retval; + } +#endif + return 0; +} + +static void __exit omnibook_module_cleanup(void) +{ + +/* + * The platform_driver interface was added in linux 2.6.15 + */ + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) + platform_device_unregister(omnibook_device); + platform_driver_unregister(&omnibook_driver); +#else + platform_device_unregister(&omnibook_device); + driver_unregister(&omnibook_driver); +#endif + + if (omnibook_proc_root) + remove_proc_entry("omnibook", NULL); + printk(O_INFO "Module is unloaded.\n"); +} + +module_init(omnibook_module_init); +module_exit(omnibook_module_cleanup); + +MODULE_AUTHOR("Soós Péter, Mathieu Bérard"); +MODULE_VERSION(OMNIBOOK_MODULE_VERSION); +MODULE_DESCRIPTION + ("Kernel interface for HP OmniBook, HP Pavilion, Toshiba Satellite and Compal ACL00 laptops"); +MODULE_LICENSE("GPL"); +module_param_call(ectype, set_ectype_param, get_ectype_param, NULL, S_IRUGO); +module_param_named(userset, omnibook_userset, int, S_IRUGO); +MODULE_PARM_DESC(ectype, "Type of embedded controller firmware"); +MODULE_PARM_DESC(userset, "Use 0 to disable, 1 to enable users to set parameters"); + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/dock.c +++ linux-2.6.32/ubuntu/omnibook/dock.c @@ -0,0 +1,84 @@ +/* + * dock.c -- docking station/port replicator support + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +static int omnibook_dock_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + u8 dock; + int retval; + + if ((retval = backend_byte_read(io_op, &dock))) + return retval; + + len += sprintf(buffer + len, "Laptop is %s\n", (dock) ? "docked" : "undocked"); + + return len; +} + +static int omnibook_dock_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval; + + switch (*buffer) { + case '0': + retval = backend_byte_write(io_op, 0); + break; + case '1': + retval = backend_byte_write(io_op, 1); + break; + default: + retval = -EINVAL; + } + + return retval; +} + +static struct omnibook_feature dock_driver; + +static int __init omnibook_dock_init(struct omnibook_operation *io_op) +{ + /* writing is only supported on ectype 13 */ + if(!(omnibook_ectype & TSM40)) + dock_driver.write = NULL; + + return 0; +} + +static struct omnibook_tbl dock_table[] __initdata = { + {XE3GF, SIMPLE_BYTE(EC, XE3GF_CSPR, XE3GF_CSPR_MASK)}, + {OB500 | OB510 | OB6000 | OB6100, SIMPLE_BYTE(EC, OB500_STA1, OB500_DCKS_MASK)}, + {OB4150, SIMPLE_BYTE(EC, OB4150_DCID, 0)}, + {TSM40, {SMI, SMI_GET_DOCK, SMI_SET_DOCK, 0, 0, 0}}, + {0,} +}; + +static struct omnibook_feature __declared_feature dock_driver = { + .name = "dock", + .enabled = 0, + .init = omnibook_dock_init, + .read = omnibook_dock_read, + .write = omnibook_dock_write, + .ectypes = XE3GF | OB500 | OB510 | OB6000 | OB6100 | OB4150 | TSM40, + .tbl = dock_table, +}; + +module_param_named(dock, dock_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(dock, "Use 0 to disable, 1 to enable docking station support"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/ec.c +++ linux-2.6.32/ubuntu/omnibook/ec.c @@ -0,0 +1,188 @@ +/* + * ec.c -- low level functions to access Embedded Controller, + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" + +#include +#include +#include +#include +#include + +#include +#include "hardware.h" + +/* + * Interrupt control + */ + +static DEFINE_SPINLOCK(omnibook_ec_lock); + +/* + * Registers of the embedded controller + */ + +#define OMNIBOOK_EC_DATA 0x62 +#define OMNIBOOK_EC_SC 0x66 + +/* + * Embedded controller status register bits + */ + +#define OMNIBOOK_EC_STAT_OBF 0x01 /* Output buffer full */ +#define OMNIBOOK_EC_STAT_IBF 0x02 /* Input buffer full */ + + +/* + * Embedded controller commands + */ + +#define OMNIBOOK_EC_CMD_READ 0x80 +#define OMNIBOOK_EC_CMD_WRITE 0x81 + +/* + * Wait for embedded controller buffer + */ + +static int omnibook_ec_wait(u8 event) +{ + int timeout = OMNIBOOK_TIMEOUT; + + switch (event) { + case OMNIBOOK_EC_STAT_OBF: + while (!(inb(OMNIBOOK_EC_SC) & event) && timeout--) + mdelay(1); + break; + case OMNIBOOK_EC_STAT_IBF: + while ((inb(OMNIBOOK_EC_SC) & event) && timeout--) + mdelay(1); + break; + default: + return -EINVAL; + } + if (timeout > 0) + return 0; + return -ETIME; +} + +/* + * Read from the embedded controller + * Decide at run-time if we can use the much cleaner ACPI EC driver instead of + * this implementation, this is the case if ACPI has been compiled and is not + * disabled. + */ + +static int omnibook_ec_read(const struct omnibook_operation *io_op, u8 * data) +{ + int retval; + +#ifdef CONFIG_ACPI_EC + if (likely(!acpi_disabled)) { + retval = ec_read((u8) io_op->read_addr, data); + if (io_op->read_mask) + *data &= io_op->read_mask; +// dprintk("ACPI EC read at %lx success %i.\n", io_op->read_addr, retval); + return retval; + } +#endif + spin_lock_irq(&omnibook_ec_lock); + retval = omnibook_ec_wait(OMNIBOOK_EC_STAT_IBF); + if (retval) + goto end; + outb(OMNIBOOK_EC_CMD_READ, OMNIBOOK_EC_SC); + retval = omnibook_ec_wait(OMNIBOOK_EC_STAT_IBF); + if (retval) + goto end; + outb((u8) io_op->read_addr, OMNIBOOK_EC_DATA); + retval = omnibook_ec_wait(OMNIBOOK_EC_STAT_OBF); + if (retval) + goto end; + *data = inb(OMNIBOOK_EC_DATA); + if (io_op->read_mask) + *data &= io_op->read_mask; + end: + spin_unlock_irq(&omnibook_ec_lock); +// dprintk("Custom EC read at %lx success %i.\n", io_op->read_addr, retval); + return retval; +} + +/* + * Write to the embedded controller: + * If OMNIBOOK_LEGACY is set, decide at run-time if we can use the much cleaner + * ACPI EC driver instead of this legacy implementation. + * This is the case if ACPI has been compiled and is not + * disabled. + * If OMNIBOOK_LEGACY is unset, we drop our custoim implementation + */ + +static int omnibook_ec_write(const struct omnibook_operation *io_op, u8 data) +{ + int retval; + +#ifdef CONFIG_ACPI_EC + if (likely(!acpi_disabled)) { + retval = ec_write((u8) io_op->write_addr, data); +// dprintk("ACPI EC write at %lx success %i.\n", io_op->write_addr, retval); + return retval; + } +#endif + + spin_lock_irq(&omnibook_ec_lock); + retval = omnibook_ec_wait(OMNIBOOK_EC_STAT_IBF); + if (retval) + goto end; + outb(OMNIBOOK_EC_CMD_WRITE, OMNIBOOK_EC_SC); + retval = omnibook_ec_wait(OMNIBOOK_EC_STAT_IBF); + if (retval) + goto end; + outb((u8) io_op->write_addr, OMNIBOOK_EC_DATA); + retval = omnibook_ec_wait(OMNIBOOK_EC_STAT_IBF); + if (retval) + goto end; + outb(data, OMNIBOOK_EC_DATA); + end: + spin_unlock_irq(&omnibook_ec_lock); +// dprintk("Custom EC write at %lx success %i.\n", io_op->write_addr, retval); + return retval; +} + +static int omnibook_ec_display(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval; + u8 raw_state; + + retval = __backend_byte_read(io_op, &raw_state); + if (retval < 0) + return retval; + + *state = !!(raw_state) & DISPLAY_CRT_DET; + + return DISPLAY_CRT_DET; +} + +/* + * Backend interface declarations + */ + +struct omnibook_backend ec_backend = { + .name = "ec", + .byte_read = omnibook_ec_read, + .byte_write = omnibook_ec_write, + .display_get = omnibook_ec_display, +}; + +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/Makefile +++ linux-2.6.32/ubuntu/omnibook/Makefile @@ -0,0 +1,171 @@ +# +# Makefile -- makefile for the HP OmniBook support module +# +# 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. +# +# Written by Soós Péter , 2002-2004 +# Modified by Mathieu Bérard , 2006-2007 +# + +#Module informations + +MODULE_NAME = omnibook +MODULE_VERSION = 2.20090707 +MODULE_BRANCH = trunk + +# Out-of-tree configuration +ifndef CONFIG_OMNIBOOK +OMNIBOOK_STANDALONE=y +CONFIG_OMNIBOOK=m + +#Uncomment and set to force debug behavior +#NOTE: Default (commented) behavior is to enable debug in trunk or branch svn +# snapshot and to disable it for release +#OMNIBOOK_WANT_DEBUG=n + +#comment to disable backlight device support +OMNIBOOK_WANT_BACKLIGHT=y + +#Uncomment to force legacy (pre-ACPI system) features support +#OMNIBOOK_WANT_LEGACY=y + +endif + +ifeq ($(KERNELRELEASE),) +# Support for direct Makefile invocation + +DESTDIR = +MODDIR = $(DESTDIR)/lib/modules +KVERS = $(shell uname -r) +KVER = $(KVERS) +VMODDIR = $(MODDIR)/$(KVER) +INSTDIR = extra +#KSRC = /usr/src/linux +KSRC = $(VMODDIR)/build +KMODDIR = $(KSRC)/drivers/misc/omnibook +KDOCDIR = $(KSRC)/Documentation/omnibook +PWD = $(shell pwd) +TODAY = $(shell date +%Y%m%d) +DEPMOD = /sbin/depmod -aq +RMMOD = /sbin/modprobe -r +INSMOD = /sbin/modprobe +INSTALL = install -m 644 +MKDIR = mkdir -p +RM = rm -f +FIND = find + +all: $(MODULE_NAME).ko + +clean: + make -C $(KSRC) M=$(PWD) clean + $(RM) -r *~ "#*#" .swp + $(RM) -r debian/omnibook-source *-stamp + $(RM) -r Module.symvers Modules.symvers + +install: all + # Removing module from locations used by previous versions + $(RM) $(VMODDIR)/kernel/drivers/char/$(MODULE_NAME).ko + $(RM) $(VMODDIR)/kernel/drivers/misc/$(MODULE_NAME).ko + make INSTALL_MOD_PATH=$(DESTDIR) INSTALL_MOD_DIR=$(INSTDIR) -C $(KSRC) M=$(PWD) modules_install + +unload: + $(RMMOD) $(MODULE_NAME) || : + +load: install unload + $(DEPMOD) + $(INSMOD) $(MODULE_NAME) + +uninstall: unload + $(FIND) $(VMODDIR) -name "$(MODULE_NAME).ko" -exec $(RM) {} \; + $(DEPMOD) + +$(MODULE_NAME).ko: + $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules + +kinstall: + $(RM) -r $(KMODDIR) + $(MKDIR) $(KMODDIR) + $(INSTALL) *.h *.c sections.lds $(KMODDIR) + $(MKDIR) $(KDOCDIR) + $(INSTALL) doc/README $(KDOCDIR) + +kpatch: kinstall + (cd $(KSRC); patch -p1 < $(PWD)/misc/omnibook-integration.patch) + +version: + sed -i "s|^\(MODULE_VERSION = \).*|\1 2.$(TODAY)|" Makefile + sed -i "s|^\(MODULE_BRANCH = \).*|\1 release|" Makefile + sed -i "s|^\(2\.\)X\{8\}|\1$(TODAY)|" doc/ChangeLog + + +release: clean version + mkdir -p ../$(MODULE_NAME)-2.$(TODAY) + cp -a *.h *.c *.lds Makefile doc misc ../$(MODULE_NAME)-2.$(TODAY) + rm -f ../$(MODULE_NAME)-2.$(TODAY).tar ../$(MODULE_NAME)-2.$(TODAY).tar.gz + (cd ..; tar cvf $(MODULE_NAME)-2.$(TODAY).tar $(MODULE_NAME)-2.$(TODAY); gzip -9 $(MODULE_NAME)-2.$(TODAY).tar) + +else +# Support for kernel build system invocation + +ifneq ($(MODULE_BRANCH), release) +EXTRA_CFLAGS += -DOMNIBOOK_MODULE_VERSION='"$(MODULE_VERSION)-$(MODULE_BRANCH)"' +else +EXTRA_CFLAGS += -DOMNIBOOK_MODULE_VERSION='"$(MODULE_VERSION)"' +endif + +ifeq ($(OMNIBOOK_STANDALONE),y) + +ifeq ($(OMNIBOOK_WANT_BACKLIGHT),y) +ifdef CONFIG_BACKLIGHT_CLASS_DEVICE +# we support backlight interface only after 2.6.16 +ifeq ($(shell if [ $(SUBLEVEL) -gt 16 ] ; then echo -n 'y'; fi),y) +EXTRA_CFLAGS += -DCONFIG_OMNIBOOK_BACKLIGHT +else +$(warning "Backlight support in only supported for kernel version newer than 2.6.16") +$(warning "Disabling backlight sysfs interface") +endif +endif +endif + +ifeq ($(OMNIBOOK_WANT_LEGACY),y) +EXTRA_CFLAGS += -DCONFIG_OMNIBOOK_LEGACY +endif + +ifndef CONFIG_ACPI_EC +EXTRA_CFLAGS += -DCONFIG_OMNIBOOK_LEGACY +endif + +ifneq ($(MODULE_BRANCH), release) +ifneq ($(OMNIBOOK_WANT_DEBUG),n) +EXTRA_CFLAGS += -DCONFIG_OMNIBOOK_DEBUG # -Wa -g0 +endif +else +ifeq ($(OMNIBOOK_WANT_DEBUG),y) +EXTRA_CFLAGS += -DCONFIG_OMNIBOOK_DEBUG # -Wa -g0 +endif + +endif + +endif + +EXTRA_CFLAGS += -DOMNIBOOK_MODULE_NAME='"$(MODULE_NAME)"' +#EXTRA_LDFLAGS += $(src)/sections.lds +EXTRA_LDFLAGS += $(PWD)/ubuntu/omnibook/sections.lds + +obj-$(CONFIG_OMNIBOOK) += $(MODULE_NAME).o +omnibook-objs := init.o lib.o ec.o kbc.o pio.o compal.o acpi.o nbsmi.o \ + ac.o battery.o blank.o bluetooth.o cooling.o display.o dock.o \ + dump.o fan.o fan_policy.o hotkeys.o info.o lcd.o muteled.o \ + polling.o temperature.o touchpad.o wireless.o throttling.o + +endif # End of kernel build system part + +# End of file --- linux-2.6.32.orig/ubuntu/omnibook/display.c +++ linux-2.6.32/ubuntu/omnibook/display.c @@ -0,0 +1,114 @@ +/* + * display.c -- External display (LCD,VGA,TV-OUT) feature + * + * 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. + * + * Written by Soós Péter , 2002-2004 + * Modified by Mathieu Bérard , 2006 + */ + +#include "omnibook.h" +#include "hardware.h" + +static const char display_name[][16] = { + "Internal LCD", + "External VGA", + "External TV-OUT", + "External DVI", +}; + +static int omnibook_display_read(char *buffer, struct omnibook_operation *io_op) +{ + int len = 0; + int retval; + unsigned int sta, en_mask, det_mask; + + retval = backend_display_get(io_op, &sta); + if (retval < 0) + return retval; + + for (en_mask = DISPLAY_LCD_ON; en_mask <= DISPLAY_DVI_ON; en_mask = en_mask << 1) { + det_mask = en_mask << 4; /* see display masks in omnibook.h */ + if (!(retval & en_mask) && !(retval & det_mask)) + continue; /* not supported */ + len += sprintf(buffer + len, "%s:", display_name[ffs(en_mask) - 1]); + if (retval & det_mask) + len += + sprintf(buffer + len, " display %s", + (sta & det_mask) ? "present" : "absent"); + if (retval & en_mask) + len += + sprintf(buffer + len, " port %s", + (sta & en_mask) ? "enabled" : "disabled"); + len += sprintf(buffer + len, "\n"); + } + + return len; +} + +static int omnibook_display_write(char *buffer, struct omnibook_operation *io_op) +{ + int retval; + unsigned int state; + char *endp; + + state = simple_strtoul(buffer, &endp, 16); + if (endp == buffer) + return -EINVAL; + else + retval = backend_display_set(io_op, state); + + return retval; +} + +static struct omnibook_feature display_driver; + +static int __init omnibook_display_init(struct omnibook_operation *io_op) +{ + int retval; + unsigned int state; + + /* Disable file writing if unsuported by backend */ + if (!io_op->backend->display_set) + display_driver.write = NULL; + + retval = backend_display_get(io_op, &state); + if (retval < 0) + return retval; + else + return 0; +} + +static struct omnibook_tbl display_table[] __initdata = { + {TSM70 | TSX205, {ACPI,}}, + {TSM40, {SMI, SMI_GET_DISPLAY_STATE, SMI_SET_DISPLAY_STATE, 0, 0, 0}}, + {XE3GF | TSP10 | TSM70 | TSM30X | TSM40, SIMPLE_BYTE(EC, XE3GF_STA1, XE3GF_SHDD_MASK)}, + {XE3GC, SIMPLE_BYTE(EC, XE3GC_STA1, XE3GC_CRTI_MASK)}, + {OB500 | OB510 | OB6000 | OB6100 | XE4500, SIMPLE_BYTE(EC, OB500_STA1, OB500_CRTS_MASK)}, + {OB4150, SIMPLE_BYTE(EC, OB4150_STA2, OB4150_CRST_MASK)}, + {0,} +}; + +static struct omnibook_feature __declared_feature display_driver = { + .name = "display", + .enabled = 1, + .init = omnibook_display_init, + .read = omnibook_display_read, + .write = omnibook_display_write, + .ectypes = + XE3GF | XE3GC | OB500 | OB510 | OB6000 | OB6100 | XE4500 | OB4150 | TSP10 | TSM70 | TSM30X | + TSM40 | TSX205, + .tbl = display_table, +}; + +module_param_named(display, display_driver.enabled, int, S_IRUGO); +MODULE_PARM_DESC(display, "Use 0 to disable, 1 to enable display status handling"); +/* End of file */ --- linux-2.6.32.orig/ubuntu/omnibook/acpi.c +++ linux-2.6.32/ubuntu/omnibook/acpi.c @@ -0,0 +1,1158 @@ +/* + * acpi.c -- ACPI methods low-level access code for TSM70 class laptops + * + * 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. + * + * Written by Mathieu Bérard , 2006 + * + */ + +#include "omnibook.h" +#include "hardware.h" + +#ifdef CONFIG_ACPI + +#include +#include + +/* copied from drivers/input/serio/i8042-io.h */ +#define I8042_KBD_PHYS_DESC "isa0060/serio0" + +/* + * ACPI backend masks and strings + */ + +#define GET_WIRELESS_METHOD "ANTR" +#define SET_WIRELESS_METHOD "ANTW" +#define WLEX_MASK 0x4 +#define WLAT_MASK 0x1 +#define BTEX_MASK 0x8 +#define BTAT_MASK 0x2 +#define KLSW_MASK 0x10 + +#define GET_DISPLAY_METHOD "DOSS" +#define SET_DISPLAY_METHOD "DOSW" +/* Display reading masks CADL = detected, CSTE = enabled */ +#define LCD_CADL 0x10 +#define CRT_CADL 0x20 +#define TVO_CADL 0x40 +#define DVI_CADL 0x80 +#define LCD_CSTE 0x1 +#define CRT_CSTE 0x2 +#define TVO_CSTE 0x4 +#define DVI_CSTE 0x8 + +/* TSX205 Video-Out methods and return values */ +#define TSX205_SET_DISPLAY_METHOD "STBL" +#define TSX205_SLI_DISPLAY_METHOD "SL01.VGA1.STBL" +/* NOTE: Method DSSW seems to be some sort of auto-detect method */ +#define TSX205_AUTO_DISPLAY_METHOD "DSSW" +#define TSX205_DSPY_DE 0x1F /* DE - Detected and Enabled */ +#define TSX205_DSPY_DN 0x1D /* DN - Detected and Not enabled */ +#define TSX205_DSPY_NE 0x0F /* NE - Not detected and Enabled */ +#define TSX205_DSPY_NN 0x0D /* NN - Not detected and Not enabled */ + +#define GET_THROTTLE_METHOD "THRO" +#define SET_THROTTLE_METHOD "CLCK" + +static char ec_dev_list[][20] = { + "\\_SB.PCI0.LPCB.EC0", + "\\_SB.PCI0.LPC0.EC0", +}; + +/* TSX205 HCI and display handles */ +static char tsx205_dev_list[][20] = { + "\\_SB.VALZ", + "\\_SB.PCI0.PEGP.VGA" +}; + +/* TSX205 GET video-out methods */ +static char tsx205_video_list[][20] = { + "LCD._DCS", + "CRT._DCS", + "TV._DCS", + "DVI._DCS", + "SL01.VGA1.LCD._DCS", + "SL01.VGA1.CRT._DCS", + "SL01.VGA1.TV._DCS", + "SL01.VGA1.DVI._DCS", +}; + +#define TOSHIBA_ACPI_BT_CLASS "bluetooth" +#define TOSHIBA_ACPI_DEVICE_NAME "bluetooth adapter" + +#define TOSH_BT_ACTIVATE_USB "AUSB" +#define TOSH_BT_DISABLE_USB "DUSB" +#define TOSH_BT_POWER_ON "BTPO" +#define TOSH_BT_POWER_OFF "BTPF" +#define TOSH_BT_STATUS "BTST" +#define TOSH_BT_KSST_MASK 0x1 +#define TOSH_BT_USB_MASK 0x40 +#define TOSH_BT_POWER_MASK 0x80 + +/* + * ACPI driver for Toshiba Bluetooth device + */ +static int omnibook_acpi_bt_add(struct acpi_device *device); +static int omnibook_acpi_bt_remove(struct acpi_device *device, int type); + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23) +static const struct acpi_device_id omnibook_bt_ids[] = { + {"TOS6205", 0}, + {"", 0}, +}; + +static struct acpi_driver omnibook_bt_driver = { + .name = OMNIBOOK_MODULE_NAME, + .class = TOSHIBA_ACPI_BT_CLASS, + .ids = omnibook_bt_ids, + .ops = { + .add = omnibook_acpi_bt_add, + .remove = omnibook_acpi_bt_remove, + }, +}; +#else /* 2.6.23 */ +static struct acpi_driver omnibook_bt_driver = { + .name = OMNIBOOK_MODULE_NAME, + .class = TOSHIBA_ACPI_BT_CLASS, + .ids = "TOS6205", + .ops = { + .add = omnibook_acpi_bt_add, + .remove = omnibook_acpi_bt_remove, + }, +}; +#endif /* 2.6.23 */ + + +/* + * ACPI backend private data structure + */ +struct acpi_backend_data { + acpi_handle ec_handle; /* Handle on ACPI EC device */ + acpi_handle bt_handle; /* Handle on ACPI BT device */ + acpi_handle hci_handle; /* Handle on ACPI HCI device */ + acpi_handle dis_handle; /* Handle on ACPI Display device */ + unsigned has_antr_antw:1; /* Are there ANTR/ANTW methods in the EC device ? */ + unsigned has_doss_dosw:1; /* Are there DOSS/DOSW methods in the EC device ? */ + unsigned has_sli:1; /* Does the laptop has SLI enabled ? */ + struct input_dev *acpi_input_dev; + struct work_struct fnkey_work; +}; + +/* + * Hotkeys workflow: + * 1. Fn+Foo pressed + * 2. Scancode 0x6e generated by kbd controller + * 3. Scancode 0x6e caught by omnibook input handler + * 4. INFO method has keycode of last actually pressed Fn key + * 5. acpi_scan_table used to associate a detected keycode with a generated one + * 6. Generated keycode issued using the omnibook input device + */ + +/* + * The input handler should only bind with the standard AT keyboard. + * XXX: Scancode 0x6e won't be detected if the keyboard has already been + * grabbed (the Xorg event input driver do that) + */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) +static int hook_connect(struct input_handler *handler, + struct input_dev *dev, + const struct input_device_id *id) +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) +static struct input_handle *hook_connect(struct input_handler *handler, + struct input_dev *dev, + const struct input_device_id *id) +#else +static struct input_handle *hook_connect(struct input_handler *handler, + struct input_dev *dev, + struct input_device_id *id) +#endif +{ + struct input_handle *handle; + int error; + + /* the 0x0001 vendor magic number is found in atkbd.c */ + if(!(dev->id.bustype == BUS_I8042 && dev->id.vendor == 0x0001)) + goto out_nobind; + + if(!strstr(dev->phys, I8042_KBD_PHYS_DESC)) + goto out_nobind; + + dprintk("hook_connect for device %s.\n", dev->name); + + if(dev->grab) + printk(O_WARN "Input device is grabbed by %s, Fn hotkeys won't work.\n", + dev->grab->name); + + handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL); + if (!handle) +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + return -ENOMEM; +#else + return NULL; +#endif + + handle->dev = dev; + handle->handler = handler; + handle->name = "omnibook_scancode_hook"; + handle->private = handler->private; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + error = input_register_handle(handle); + if (error) { + dprintk("register_handle failed\n"); + goto out_nobind_free; + } + error = input_open_device(handle); + if (error) { + dprintk("register_handle failed\n"); + input_unregister_handle(handle); + goto out_nobind_free; + } + +#else + status=input_open_device(handle); + if (error==0) dprintk("Input device opened\n"); + else { + dprintk("opening input device failed\n"); + goto out_nobind_free; + } +#endif + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + return 0; +out_nobind_free: + kfree(handle); +out_nobind: + return -ENODEV; +#else + return handle; +out_nobind_free: + kfree(handle); +out_nobind: + return NULL; +#endif +} + +static void hook_disconnect(struct input_handle *handle) +{ + dprintk("hook_disconnect.\n"); + input_close_device(handle); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,21)) + input_unregister_handle(handle); +#endif + kfree(handle); +} + +/* + * Hook for scancode 0x6e. Actual handling is done in a workqueue. + */ +static void hook_event(struct input_handle *handle, unsigned int event_type, + unsigned int event_code, int value) +{ + if (event_type == EV_MSC && event_code == MSC_SCAN && value == ACPI_FN_SCAN) + schedule_work(&((struct acpi_backend_data *)handle->private)->fnkey_work); +} + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) +static const struct input_device_id hook_ids[] = { +#else +static struct input_device_id hook_ids[] = { +#endif + { + .flags = INPUT_DEVICE_ID_MATCH_EVBIT, + .evbit = { BIT(EV_KEY) }, + }, + { }, /* Terminating entry */ +}; + +static struct input_handler hook_handler = { + .event = hook_event, + .connect = hook_connect, + .disconnect = hook_disconnect, + .name = OMNIBOOK_MODULE_NAME, + .id_table = hook_ids, +}; + +/* + * Detected scancode to keycode table + */ +static const struct { + unsigned int scancode; + unsigned int keycode; +} acpi_scan_table[] = { + { HCI_FN_RELEASED, KEY_FN}, + { HCI_MUTE, KEY_MUTE}, + { HCI_BREAK, KEY_COFFEE}, + { HCI_1, KEY_ZOOMOUT}, + { HCI_2, KEY_ZOOMIN}, + { HCI_SPACE, KEY_ZOOMRESET}, + { HCI_BSM, KEY_BATTERY}, + { HCI_SUSPEND, KEY_SLEEP}, + { HCI_HIBERNATE, KEY_SUSPEND}, + { HCI_VIDEOOUT, KEY_SWITCHVIDEOMODE}, + { HCI_BRIGHTNESSDOWN, KEY_BRIGHTNESSDOWN}, + { HCI_BRIGHTNESSUP, KEY_BRIGHTNESSUP}, + { HCI_WLAN, KEY_WLAN}, + { HCI_TOUCHPAD, KEY_PROG1}, + { HCI_FN_PRESSED, KEY_FN}, + { 0, 0}, +}; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) +static void omnibook_handle_fnkey(struct work_struct *work); +#else +static void omnibook_handle_fnkey(void* data); +#endif + +/* + * Register the input handler and the input device in the input subsystem + */ +static int register_input_subsystem(struct acpi_backend_data *priv_data) +{ + int i, retval = 0; + struct input_dev *acpi_input_dev; + + acpi_input_dev = input_allocate_device(); + if (!acpi_input_dev) { + retval = -ENOMEM; + goto out; + } + + acpi_input_dev->name = "Omnibook ACPI scancode generator"; + acpi_input_dev->phys = "omnibook/input0"; + acpi_input_dev->id.bustype = BUS_HOST; + + set_bit(EV_KEY, acpi_input_dev->evbit); + + for(i=0 ; i < ARRAY_SIZE(acpi_scan_table); i++) + set_bit(acpi_scan_table[i].keycode, acpi_input_dev->keybit); + + retval = input_register_device(acpi_input_dev); + if (retval) { + input_free_device(acpi_input_dev); + goto out; + } + + priv_data->acpi_input_dev = acpi_input_dev; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) + INIT_WORK(&priv_data->fnkey_work, *omnibook_handle_fnkey); +#else + INIT_WORK(&priv_data->fnkey_work, *omnibook_handle_fnkey, priv_data); +#endif + + + hook_handler.private = priv_data; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + retval = input_register_handler(&hook_handler); +#else + input_register_handler(&hook_handler); +#endif + + out: + return retval; +} + +/* + * Execute an ACPI method which return either an integer or nothing + * and that require 0 or 1 numerical argument + * (acpi_evaluate_object wrapper) + */ +static int omnibook_acpi_execute(acpi_handle dev_handle, char *method, const int *param, int *result) +{ + + struct acpi_object_list args_list; + struct acpi_buffer buff; + union acpi_object arg, out_objs[1]; + + if (param) { + args_list.count = 1; + args_list.pointer = &arg; + arg.type = ACPI_TYPE_INTEGER; + arg.integer.value = *param; + } else + args_list.count = 0; + + buff.length = sizeof(out_objs); + buff.pointer = out_objs; + + if (acpi_evaluate_object(dev_handle, method, &args_list, &buff) != AE_OK) { + printk(O_ERR "ACPI method execution failed\n"); + return -EIO; + } + + if (!result) /* We don't care what the method returned here */ + return 0; + + if (out_objs[0].type != ACPI_TYPE_INTEGER) { + printk(O_ERR "ACPI method result is not a number\n"); + return -EINVAL; + } + + *result = out_objs[0].integer.value; + return 0; +} + +/* + * Probe for expected ACPI devices + */ +static int omnibook_acpi_init(const struct omnibook_operation *io_op) +{ + int retval = 0; + acpi_handle dev_handle, method_handle, hci_handle, dis_handle; + int i; + int has_sli = 0; + struct acpi_backend_data *priv_data; + + if (unlikely(acpi_disabled)) { + printk(O_ERR "ACPI is disabled: feature unavailable.\n"); + return -ENODEV; + } + + if (!io_op->backend->data) { + dprintk("Try to init ACPI backend\n"); + mutex_init(&io_op->backend->mutex); + mutex_lock(&io_op->backend->mutex); + kref_init(&io_op->backend->kref); + priv_data = kzalloc(sizeof(struct acpi_backend_data), GFP_KERNEL); + if (!priv_data) { + retval = -ENOMEM; + goto error0; + } + + /* Locate ACPI EC device, acpi_get_handle set dev_handle to NULL if not found */ + for (i = 0; i < ARRAY_SIZE(ec_dev_list); i++) { + if (acpi_get_handle(NULL, ec_dev_list[i], &dev_handle) == AE_OK) { + dprintk("ACPI EC device found\n"); + priv_data->ec_handle = dev_handle; + break; + } + } + + if (!dev_handle) { + printk(O_ERR "Can't get handle on ACPI EC device.\n"); + retval = -ENODEV; + goto error1; + } + + /* Probe for HCI and Display devices only on TSX205 models */ + if (omnibook_ectype & TSX205) { + if (acpi_get_handle(NULL, tsx205_dev_list[0], &hci_handle) == AE_OK) { + dprintk("Toshiba X205 HCI device found\n"); + priv_data->hci_handle = hci_handle; + } + + if (!hci_handle) { + printk(O_ERR "Couldn't get HCI handle.\n"); + retval = -ENODEV; + goto error1; + } + + if (acpi_get_handle(NULL, tsx205_dev_list[1], &dis_handle) == AE_OK) + priv_data->dis_handle = dis_handle; + + if (!dis_handle) { + printk(O_ERR "Couldn't get X205 Display handle.\n"); + retval = -ENODEV; + goto error1; + } + + /* Does the laptop has SLI enabled? */ + omnibook_acpi_execute(dis_handle, (char *)TSX205_SLIVDO_METHOD, NULL, &has_sli); + if (has_sli) + dprintk("Toshiba X205 Display device found (SLI).\n"); + else + dprintk("Toshiba X205 Display device found.\n"); + + priv_data->has_sli = has_sli; + } + + if ((acpi_get_handle( dev_handle, GET_WIRELESS_METHOD, &method_handle) == AE_OK) && + (acpi_get_handle( dev_handle, SET_WIRELESS_METHOD, &method_handle) == AE_OK)) + priv_data->has_antr_antw = 1; + + if (omnibook_ectype & TSX205) { + if ((acpi_get_handle(dis_handle, TSX205_AUTO_DISPLAY_METHOD, &method_handle) == AE_OK) && + (acpi_get_handle(dis_handle, TSX205_AUTO_DISPLAY_METHOD, &method_handle) == AE_OK)) + priv_data->has_doss_dosw = 1; + } else { + if ((acpi_get_handle( dev_handle, GET_DISPLAY_METHOD, &method_handle) == AE_OK) && + (acpi_get_handle( dev_handle, SET_DISPLAY_METHOD, &method_handle) == AE_OK)) + priv_data->has_doss_dosw = 1; + } + + retval = register_input_subsystem(priv_data); + if(retval) + goto error1; + + io_op->backend->data = (void *) priv_data; + + mutex_unlock(&io_op->backend->mutex); + + /* attempt to register Toshiba bluetooth ACPI driver */ + acpi_bus_register_driver(&omnibook_bt_driver); + + dprintk("ACPI backend init OK\n"); + + return 0; + + } else { + dprintk("ACPI backend has already been initialized\n"); + kref_get(&io_op->backend->kref); + return 0; + } + + error1: + kfree(priv_data); + io_op->backend->data = NULL; + error0: + mutex_unlock(&io_op->backend->mutex); + mutex_destroy(&io_op->backend->mutex); + return retval; +} + +static void omnibook_acpi_free(struct kref *ref) +{ + struct omnibook_backend *backend; + struct acpi_backend_data *priv_data; + + backend = container_of(ref, struct omnibook_backend, kref); + priv_data = backend->data; + + dprintk("ACPI backend not used anymore: disposing\n"); + + + dprintk("ptr addr: %p driver name: %s\n",&omnibook_bt_driver, omnibook_bt_driver.name); + acpi_bus_unregister_driver(&omnibook_bt_driver); + + flush_scheduled_work(); + input_unregister_handler(&hook_handler); + input_unregister_device(priv_data->acpi_input_dev); + + mutex_lock(&backend->mutex); + kfree(backend->data); + backend->data = NULL; + mutex_unlock(&backend->mutex); + mutex_destroy(&backend->mutex); +} + +static void omnibook_acpi_exit(const struct omnibook_operation *io_op) +{ + dprintk("Trying to dispose ACPI backend\n"); + kref_put(&io_op->backend->kref, omnibook_acpi_free); +} + +/* forward declaration */ +struct omnibook_backend acpi_backend; + +/* Function taken from toshiba_acpi */ +static acpi_status hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS]) +{ + struct acpi_backend_data *priv_data = acpi_backend.data; + struct acpi_object_list params; + union acpi_object in_objs[HCI_WORDS]; + struct acpi_buffer results; + union acpi_object out_objs[HCI_WORDS + 1]; + acpi_status status; + int i; + + params.count = HCI_WORDS; + params.pointer = in_objs; + for (i = 0; i < HCI_WORDS; ++i) { + in_objs[i].type = ACPI_TYPE_INTEGER; + in_objs[i].integer.value = in[i]; + } + + results.length = sizeof(out_objs); + results.pointer = out_objs; + + status = acpi_evaluate_object(priv_data->hci_handle, (char *)HCI_METHOD, ¶ms, + &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; + } + } + + return status; +} + +/* + * Set Bluetooth device state using the Toshiba BT device + */ +static int set_bt_status(const struct acpi_backend_data *priv_data, unsigned int state) +{ + int retval = 0; + + if (state) { + retval = omnibook_acpi_execute(priv_data->bt_handle, TOSH_BT_ACTIVATE_USB, NULL, NULL); + if (retval) + goto out; + retval = omnibook_acpi_execute(priv_data->bt_handle, TOSH_BT_POWER_ON, NULL, NULL); + if (retval) + goto out; + } else { + retval = omnibook_acpi_execute(priv_data->bt_handle, TOSH_BT_DISABLE_USB, NULL, NULL); + if (retval) + goto out; + retval = omnibook_acpi_execute(priv_data->bt_handle, TOSH_BT_POWER_OFF, NULL, NULL); + if (retval) + goto out; + } + out: + return retval; +} + +static int omnibook_acpi_bt_add(struct acpi_device *device) +{ + int retval; + struct acpi_backend_data *priv_data = acpi_backend.data; + + dprintk("Enabling Toshiba Bluetooth ACPI device.\n"); + strcpy(acpi_device_name(device), TOSHIBA_ACPI_DEVICE_NAME); + strcpy(acpi_device_class(device), TOSHIBA_ACPI_BT_CLASS); + + /* Save handle in backend private data structure. ugly. */ + + mutex_lock(&acpi_backend.mutex); + priv_data->bt_handle = device->handle; + retval = set_bt_status(priv_data, 1); + mutex_unlock(&acpi_backend.mutex); + + return retval; +} + +static int omnibook_acpi_bt_remove(struct acpi_device *device, int type) +{ + int retval; + struct acpi_backend_data *priv_data = acpi_backend.data; + + mutex_lock(&acpi_backend.mutex); + dprintk("Disabling Toshiba Bluetooth ACPI device.\n"); + retval = set_bt_status(priv_data, 0); + priv_data->bt_handle = NULL; + mutex_unlock(&acpi_backend.mutex); + + return retval; +} + +/* + * Get Bluetooth status using the BTST method + */ +static int get_bt_status(const struct acpi_backend_data *priv_data, unsigned int *state) +{ + int retval = 0; + int raw_state; + + if ((retval = omnibook_acpi_execute(priv_data->bt_handle, TOSH_BT_STATUS, NULL, &raw_state))) + return retval; + + dprintk("BTST raw_state: %x\n", raw_state); + + *state = BT_EX; + *state |= ((raw_state & TOSH_BT_USB_MASK) && (raw_state & TOSH_BT_POWER_MASK)) ? BT_STA : 0; + + return retval; +} + +/* + * Get the Bluetooth + Wireless status using the ANTR method + * FIXME: what if ANTR and BTST disagree ? we thrust ANTR for now + */ +static int get_wireless_status(const struct acpi_backend_data *priv_data, unsigned int *state) +{ + int retval = 0; + int raw_state; + + if ((retval = omnibook_acpi_execute(priv_data->ec_handle, GET_WIRELESS_METHOD, NULL, &raw_state))) + return retval; + + dprintk("get_wireless raw_state: %x\n", raw_state); + + *state = (raw_state & WLEX_MASK) ? WIFI_EX : 0; + *state |= (raw_state & WLAT_MASK) ? WIFI_STA : 0; + *state |= (raw_state & KLSW_MASK) ? KILLSWITCH : 0; + *state |= (raw_state & BTEX_MASK) ? BT_EX : 0; + *state |= (raw_state & BTAT_MASK) ? BT_STA : 0; + + return retval; +} + +static int get_tsx205_wireless_status(const struct acpi_backend_data *priv_data, unsigned int *state) +{ + int retval = 0; + int raw_state; + u32 in[HCI_WORDS] = { HCI_GET, HCI_RF_CONTROL, 0, HCI_WIRELESS_CHECK, 0, 0 }; + u32 out[HCI_WORDS]; + + hci_raw(in, out); + + /* Now let's check the killswitch */ + if ((retval = omnibook_acpi_execute(priv_data->ec_handle, TSX205_KILLSW_METHOD, NULL, &raw_state))) + return retval; + + dprintk("get_wireless raw_state: %x\n", out[2]); + + *state = ((out[2] & 0xff)) ? WIFI_EX : 0; + *state |= (raw_state) ? WIFI_STA : 0; + *state |= (!raw_state) ? KILLSWITCH : 0; + + /* And finally BT */ + if ((retval = omnibook_acpi_execute(priv_data->bt_handle, TOSH_BT_STATUS, NULL, &raw_state))) + return retval; + + *state |= BT_EX; + *state |= ((raw_state & TOSH_BT_USB_MASK) && (raw_state & TOSH_BT_POWER_MASK)) ? BT_STA : 0; + + return retval; +} + +static int omnibook_acpi_get_wireless(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval; + struct acpi_backend_data *priv_data = io_op->backend->data; + + /* use BTST (BT device) if we don't have ANTR/ANTW (EC device) */ + if (omnibook_ectype & TSX205) + retval = get_tsx205_wireless_status(priv_data, state); + else if (priv_data->has_antr_antw) + retval = get_wireless_status(priv_data, state); + else if(priv_data->bt_handle) + retval = get_bt_status(priv_data, state); + else + retval = -ENODEV; + + return retval; +} + +/* + * Set the Bluetooth + Wireless status using the ANTW method + */ +static int set_wireless_status(const struct acpi_backend_data *priv_data, unsigned int state) +{ + int retval; + int raw_state; + + raw_state = !!(state & WIFI_STA); /* bit 0 */ + raw_state |= !!(state & BT_STA) << 0x1; /* bit 1 */ + + dprintk("set_wireless raw_state: %x\n", raw_state); + + retval = omnibook_acpi_execute(priv_data->ec_handle, SET_WIRELESS_METHOD, &raw_state, NULL); + + return retval; +} + +static int set_tsx205_wireless_status(const struct acpi_backend_data *priv_data, unsigned int state) +{ + int retval; + int raw_state = !!(state & WIFI_STA); + + dprintk("set_wireless raw_state: %x\n", raw_state); + + u32 in[HCI_WORDS] = { HCI_SET, HCI_RF_CONTROL, raw_state, HCI_WIRELESS_POWER, 0, 0 }; + u32 out[HCI_WORDS]; + hci_raw(in, out); + + raw_state |= !!(state & BT_STA) << 0x1; /* bit 1 */ + + /* BT status */ + retval = set_bt_status(priv_data->bt_handle, state); + + return retval; +} + +static int omnibook_acpi_set_wireless(const struct omnibook_operation *io_op, unsigned int state) +{ + int retval = -ENODEV; + struct acpi_backend_data *priv_data = io_op->backend->data; + + /* First try the TSX205 methods */ + if(omnibook_ectype & TSX205) + retval = set_tsx205_wireless_status(priv_data, state); + + /* Then try the ANTR/ANTW methods */ + if(priv_data->has_antr_antw) + retval = set_wireless_status(priv_data, state); + + /* Then try the bluetooth ACPI device if present */ + if(priv_data->bt_handle) + retval = set_bt_status(priv_data, (state & BT_STA)); + + return retval; +} + +static int tsx205_get_display(const struct acpi_backend_data *priv_data, unsigned int *state, unsigned int device) +{ + int retval = 0; + int raw_state = 0; + + retval = omnibook_acpi_execute(priv_data->dis_handle, tsx205_video_list[device], NULL, &raw_state); + if (retval < 0) { + dprintk(O_ERR "Failed to get video device (%d) state.\n", device); + return retval; + } + + /* Ugly, but better than nothing... */ + switch (device) { + case 0: + case 4: /* LCD device */ + dprintk("get_display LCD (%d) raw_state: %x\n", device, raw_state); + if (raw_state == TSX205_DSPY_DE) { + *state |= DISPLAY_LCD_DET; + *state |= DISPLAY_LCD_ON; + } else + if (raw_state == TSX205_DSPY_DN) + *state |= DISPLAY_LCD_DET; + else if (raw_state == TSX205_DSPY_NE) + *state |= DISPLAY_LCD_ON; + break; + case 1: + case 5: /* CRT device */ + dprintk("get_display CRT (%d) raw_state: %x\n", device, raw_state); + if (raw_state == TSX205_DSPY_DE) { + *state |= DISPLAY_CRT_DET; + *state |= DISPLAY_CRT_ON; + } else + if (raw_state == TSX205_DSPY_DN) + *state |= DISPLAY_CRT_DET; + else if (raw_state == TSX205_DSPY_NE) + *state |= DISPLAY_CRT_ON; + break; + case 2: + case 6: /* TV-OUT device */ + dprintk("get_display TV-OUT (%d) raw_state: %x\n", device, raw_state); + if (raw_state == TSX205_DSPY_DE) { + *state |= DISPLAY_TVO_DET; + *state |= DISPLAY_TVO_ON; + } else + if (raw_state == TSX205_DSPY_DN) + *state |= DISPLAY_TVO_DET; + else if (raw_state == TSX205_DSPY_NE) + *state |= DISPLAY_TVO_ON; + break; + case 3: + case 7: /* DVI device */ + dprintk("get_display DVI (%d) raw_state: %x\n", device, raw_state); + if (raw_state == TSX205_DSPY_DE) { + *state |= DISPLAY_DVI_DET; + *state |= DISPLAY_DVI_ON; + } else + if (raw_state == TSX205_DSPY_DN) + *state |= DISPLAY_DVI_DET; + else if (raw_state == TSX205_DSPY_NE) + *state |= DISPLAY_DVI_ON; + break; + } + + return retval; +} + +static int omnibook_acpi_get_display(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval = 0; + int raw_state = 0; + struct acpi_backend_data *priv_data = io_op->backend->data; + + if(!priv_data->has_doss_dosw) + return -ENODEV; + + if (omnibook_ectype & TSX205) { + int i; + + /* Loop 'tru the different Video-Out devices */ + if (priv_data->has_sli) + for (i = 4; i < ARRAY_SIZE(tsx205_video_list); i++) + retval = tsx205_get_display(priv_data, state, i); + else + for (i = 0; i < 4; i++) + retval = tsx205_get_display(priv_data, state, i); + + if (retval < 0) + return -EIO; + + goto vidout; + } + + retval = omnibook_acpi_execute(priv_data->ec_handle, GET_DISPLAY_METHOD, NULL, &raw_state); + if (retval < 0) + return retval; + + dprintk("get_display raw_state: %x\n", raw_state); + + /* Backend specific to backend-neutral conversion */ + *state = (raw_state & LCD_CSTE) ? DISPLAY_LCD_ON : 0; + *state |= (raw_state & CRT_CSTE) ? DISPLAY_CRT_ON : 0; + *state |= (raw_state & TVO_CSTE) ? DISPLAY_TVO_ON : 0; + *state |= (raw_state & DVI_CSTE) ? DISPLAY_DVI_ON : 0; + + *state |= (raw_state & LCD_CADL) ? DISPLAY_LCD_DET : 0; + *state |= (raw_state & CRT_CADL) ? DISPLAY_CRT_DET : 0; + *state |= (raw_state & TVO_CADL) ? DISPLAY_TVO_DET : 0; + *state |= (raw_state & DVI_CADL) ? DISPLAY_DVI_DET : 0; + +vidout: + return DISPLAY_LCD_ON | DISPLAY_CRT_ON | DISPLAY_TVO_ON | DISPLAY_DVI_ON + | DISPLAY_LCD_DET | DISPLAY_CRT_DET | DISPLAY_TVO_DET | DISPLAY_DVI_DET; +} + +static const unsigned int acpi_display_mode_list[] = { + DISPLAY_LCD_ON, + DISPLAY_CRT_ON, + DISPLAY_LCD_ON | DISPLAY_CRT_ON, + DISPLAY_TVO_ON, + DISPLAY_LCD_ON | DISPLAY_TVO_ON, + DISPLAY_CRT_ON | DISPLAY_TVO_ON, + DISPLAY_LCD_ON | DISPLAY_CRT_ON | DISPLAY_TVO_ON, + DISPLAY_DVI_ON, + DISPLAY_LCD_ON | DISPLAY_DVI_ON, +}; + +static int omnibook_acpi_set_display(const struct omnibook_operation *io_op, unsigned int state) +{ + int retval = 0; + int i; + int matched = -1; + struct acpi_backend_data *priv_data = io_op->backend->data; + + if(!priv_data->has_doss_dosw) + return -ENODEV; + + for (i = 0; i < ARRAY_SIZE(acpi_display_mode_list); i++) { + if (acpi_display_mode_list[i] == state) { + matched = i + 1; /* raw state is array row number + 1 */ + break; + } + } + if (matched == -1) { + printk("Display mode %x is unsupported.\n", state); + return -EINVAL; + } + + dprintk("set_display raw_state: %x\n", matched); + + if (omnibook_ectype & TSX205) { + if (priv_data->has_sli) + retval = omnibook_acpi_execute(priv_data->dis_handle, TSX205_SLI_DISPLAY_METHOD, &matched, NULL); + else + retval = omnibook_acpi_execute(priv_data->dis_handle, TSX205_SET_DISPLAY_METHOD, &matched, NULL); + } else + retval = omnibook_acpi_execute(priv_data->ec_handle, SET_DISPLAY_METHOD, &matched, NULL); + if (retval < 0) + return retval; + + return DISPLAY_LCD_ON | DISPLAY_CRT_ON | DISPLAY_TVO_ON | DISPLAY_DVI_ON; +} + +static int omnibook_acpi_get_throttle(const struct omnibook_operation *io_op, unsigned int *state) +{ + int retval; + int thtl_en = 0, thtl_dty = 0; + int param; + struct acpi_backend_data *priv_data = io_op->backend->data; + + param = 0; + /* Read THEN aka THTL_EN in ICH6M datasheets */ + retval = omnibook_acpi_execute(priv_data->ec_handle, GET_THROTTLE_METHOD, ¶m, &thtl_en); + if ( thtl_en == 0 ) { + *state = 0; + return retval; + } + param = 1; + /* Read DUTY aka THTL_DTY in ICH6M datasheets */ + retval = omnibook_acpi_execute(priv_data->ec_handle, GET_THROTTLE_METHOD, ¶m, &thtl_dty); + WARN_ON(thtl_dty > 7); /* We shouldn't encounter more than 7 throttling level */ + *state = 8 - thtl_dty; /* THTL_DTY and ACPI T-state are reverse mapped */ + return retval; +} + +static int omnibook_acpi_set_throttle(const struct omnibook_operation *io_op, unsigned int state) +{ + struct acpi_backend_data *priv_data = io_op->backend->data; + /* THTL_DTY and ACPI T-state are reverse mapped */ + /* throttling.c already clamped state between 0 and 7 */ + if (state) + state = 8 - state; + + return omnibook_acpi_execute(priv_data->ec_handle, SET_THROTTLE_METHOD, &state, NULL); +} + +/* + * Fn+foo hotkeys handling + */ +static int omnibook_hci_get_hotkeys(const struct omnibook_operation *io_op, unsigned int *state) +{ + u32 in[HCI_WORDS] = { HCI_GET, HCI_HOTKEY_EVENT, 0, 0, 0, 0 }; + u32 out[HCI_WORDS]; + acpi_status status = hci_raw(in, out); + + if (status != AE_OK) + return HCI_FAILURE; + + dprintk("get_hotkeys raw_state: %x\n", out[2]); + + *state = (out[2] & ACPI_FN_MASK) ? HKEY_FN : 0; + + return 0; +} + +static int omnibook_hci_set_hotkeys(const struct omnibook_operation *io_op, unsigned int state) +{ + u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 }; + u32 out[HCI_WORDS]; + in[0] = HCI_SET; + in[1] = HCI_HOTKEY_EVENT; + in[2] = (state & HKEY_FN) ? 1 : 0; + acpi_status status = hci_raw(in, out); + + dprintk("set_hotkeys (Fn interface) raw_state: %x\n", in[2]); + + return (status == AE_OK) ? out[0] : HCI_FAILURE; +} + +static int omnibook_acpi_get_events(unsigned int *state) +{ + acpi_status status; + struct acpi_backend_data *priv_data = acpi_backend.data; + + /* We need to call the NTFY method first so it can activate the TECF variable */ + status = omnibook_acpi_execute(priv_data->ec_handle, TSX205_NOTIFY_METHOD, NULL, NULL); + if (status != AE_OK) { + dprintk(O_ERR "Failed to activate NTFY method.\n"); + return -EIO; + } + + /* Now we can poll the INFO method to get last pressed hotkey */ + status = omnibook_acpi_execute(priv_data->hci_handle, TSX205_EVENTS_METHOD, NULL, state); + if (status != AE_OK) { + dprintk(O_ERR "Failed to get Hotkey event.\n"); + return -EIO; + } + + /* We only care about a key press, so just report the Fn key Press/Release */ + if ( ((*state & ~0x80) == 0x100) || ((*state & ~0x80) == 0x17f) ) + *state &= ~0x80; + + return status; +} + +/* + * Adjust the lcd backlight level by delta. + * Used for Fn+F6/F7 keypress + */ +static int adjust_brighness(int delta) +{ + struct omnibook_feature *lcd_feature = omnibook_find_feature("lcd"); + struct omnibook_operation *io_op; + int retval = 0; + u8 brgt; + + if(!lcd_feature) + return -ENODEV; + + io_op = lcd_feature->io_op; + + mutex_lock(&io_op->backend->mutex); + + if(( retval = __backend_byte_read(io_op, &brgt))) + goto out; + + dprintk("Fn-F6/F7 pressed: adjusting brightness.\n"); + + if (((int) brgt + delta) < 0) + brgt = 0; + else if ((brgt + delta) > omnibook_max_brightness) + brgt = omnibook_max_brightness; + else + brgt += delta; + + retval = __backend_byte_write(io_op, brgt); + + out: + mutex_unlock(&io_op->backend->mutex); + return retval; +} + +/* + * Workqueue handler for Fn hotkeys + */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) +static void omnibook_handle_fnkey(struct work_struct *work) +#else +static void omnibook_handle_fnkey(void* data) +#endif +{ + int i; + u32 gen_scan; + struct input_dev *input_dev; + acpi_status status; + + status = omnibook_acpi_get_events(&gen_scan); + if (status != AE_OK) + return; + + dprintk("detected scancode 0x%x.\n", gen_scan); + switch(gen_scan) { + case HCI_BRIGHTNESSDOWN: + adjust_brighness(-1); + break; + case HCI_BRIGHTNESSUP: + adjust_brighness(+1); + break; + } + + for (i = 0 ; i < ARRAY_SIZE(acpi_scan_table); i++) { + if (gen_scan == acpi_scan_table[i].scancode) { + dprintk("generating keycode %i.\n", acpi_scan_table[i].keycode); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)) + input_dev = container_of(work, struct acpi_backend_data, fnkey_work)->acpi_input_dev; +#else + input_dev = ((struct acpi_backend_data *) data)->acpi_input_dev; +#endif + omnibook_report_key(input_dev, acpi_scan_table[i].keycode); + break; + } + } +} + +struct omnibook_backend acpi_backend = { + .name = "acpi", + .hotkeys_read_cap = HKEY_FN, + .hotkeys_write_cap = HKEY_FN, + .init = omnibook_acpi_init, + .exit = omnibook_acpi_exit, + .aerial_get = omnibook_acpi_get_wireless, + .aerial_set = omnibook_acpi_set_wireless, + .display_get = omnibook_acpi_get_display, + .display_set = omnibook_acpi_set_display, + .throttle_get = omnibook_acpi_get_throttle, + .throttle_set = omnibook_acpi_set_throttle, + .hotkeys_get = omnibook_hci_get_hotkeys, + .hotkeys_set = omnibook_hci_set_hotkeys, +}; + +#else /* CONFIG_ACPI */ + +/* dummy backend for non-ACPI systems */ +static int _fail_probe(const struct omnibook_operation *io_op) +{ + return -ENODEV; +} + +struct omnibook_backend acpi_backend = { + .name = "acpi", + .init = _fail_probe, +}; + +#endif /* CONFIG_ACPI */ --- linux-2.6.32.orig/ubuntu/omnibook/doc/ChangeLog +++ linux-2.6.32/ubuntu/omnibook/doc/ChangeLog @@ -0,0 +1,521 @@ +Changelog file for omnibook package: +------------------------------------ + +2.XXXXXXXX Mathieu Bérard +* DMI signature added: + Toshiba Satellite P25 (ectype 11) + Toshiba Satellite M60 (ectype 12) +* Applied patch from Danny Kukawka to + fix compiler warning about use uninitialized variable +* Applied patch from Danny Kukawka to + fix build the driver on older kernel versions +* Applied patches from Azael Avalos + to add support to Satellite X205 and other laptops based on + ICH8 +* Fix build with kernel >= 2.6.30 + +2.20070211 Mathieu Bérard +* Disable Acer support, acerhk module should provided better + support with a far more complete autodetection database + (see http://www2.informatik.hu-berlin.de/~tauber/acerhk/) +* Fix and improve bluetooth handling for TSM30X class laptops + bluetooth now also works for TSA105 +* Implement Volume down,up and Mute buttons polling for ectype 2 + It was the last missing part from the "omke" module which never + got ported to linux 2.6 +* Implement ectype 13 Fn hotkeys handling. +* DMI signature added: + HP Pavilion ze4500 (ectype 7) + Toshiba Satellite 1130 (ectype 1) + Toshiba Satellite A75 (ectype 12) + Toshiba Tecra A4 (ectype 13) + Toshiba Satellite A80 (ectype 12) + Toshiba Satellite P100 (ectype 14) +* Split TSM30X (ectype 12) : this ectype was reimplemented and if the + new implementation works with Toshiba M40X, M70, M100... it does not + (and will never, due to hardware) with Toshiba M30X, the only way + to fix this is to split TSM30X (ectype 12) in : + -TSM70 (ectype 12) => new implementation (compal.c & acpi.c backends) + -TSM30X (ectype 15) => old implementation (legacy backends) + This is done by renaming TSM30X to TSM40 and restore old TSM30X + The state of the Toshiba M35X is unknown and is assigned to TSM70, one + should send a bug report if that fail. + Fix bugs 1617818 and 1605278 +* New features for TSM70 class laptops: + -Cooling method control (can tune fan behaviour to 'Save power' or + to 'Maximize performance') provided in /proc/omnibook/cooling + -CPU Throttling status&control (also known as ACPI T-States) should + be supported out of the box via /proc/acpi/processor/CPU0/throttling + but at least Toshiba Satellite M70 as a deficient ACPI FADT table + which prevent than, thus a custom access to ACPI Throttling is + provided in /proc/omnibook/throttling + +2.20060921 Mathieu Bérard +* The minimal required kernel version is now 2.6.9 (kref API) +* Convert semaphore to mutex with fallback for pre 2.6.16 kernel +* Kill CONFIG_OMNIBOOK_APMEMU and introduce OMNIBOOK_LEGACY: + pre-ACPI features now depends on it. + Default enabling of ac and battery features also + depends on it. It is _disabled_ by default. +* Introduce ACPI methods execution backend: TSM70 needs it + for Display and Wifi/Bluetooth features +* Expand display and hotkeys features +* Introduce experimental NbSmi backend for TSM40. It is + based on technical documentation provided by Toshiba. + Thanks Toshiba ! +* Kill unused omnibook_mem_read/write function for mmio + access +* Cleanup in blank.c fan.c temperature.c +* Unbreak Pio backend: use request/release_region +* Introduce bluetooth and wifi frontend features : they allow + adapter state querry and control (existence probing, wifi + kill switch probing and adapter enabling/disabling). + Supported by TSM30X and TSM40 +* Introduce omnibook_backend struct as a uniform way of + communication between backend and frontend, this + kill omnibook_io_{read/write} and friends. +* Modify ombibook_feature struct to incorporate pointers + to an omnibook_table table and to a omnibook_operation + struct which is picked-up from the ectype matching + omnibook_table entry upon feature initialization +* Add muteled resume handler +* Add touchpad handling for TSM30X +* Add proper display handling for TSM30X +* Change all features struct name from foo_feature to + foo_driver to kept modpost section mismatch detection + silent. Put tbl, init and exit entries to their relevant + sections. +* Many bugfix and dock support for TSM40 by Holger Nelson. +* Add DMI Signature for Toshiba Satellite 1700-Series, with ectype 10. + LCD does not work. +* Add DMI Signature for Toshiba Equium A110, added with + ectype 1, until implementation of a better backend +* Add DMI Signature for Toshiba _Satellite_ M100, Satellite A70 + and Tecra S2. added with ectype 12 +* Add DMI Signature for Toshiba Tecra S1, added with + ectype 13 + +2.200608017 Mathieu Bérard +* Fix bug un omnibook_io_match +* Fix DMI handling behaviour: we stop on the FIRST matched + DMI entry. This is restoring pre-20060806 behaviour. + Invert M40 vs. M40X entry position. + +2.20060816 Mathieu Bérard +* Merge from the new-backend branch: Add new backend code + (in compal.c) used with TSM30X class laptops: + Used for lcd access + Used for hotkeys support: now most Fn+key generate a scancode, + as well as the wifi kill switch. + Warning: tested only on TSM40X an TSM70 laptops. +* Create omnibook_io_operation struct and omnibook_io_{read/write} + funtions to simplify implementation of some simple features. + Used with ac display dock and led features. +* Rename onetouch feature to "hotkeys" which is a vendor neutral name. +* The minimal required kernel version is now 2.6.9 (kref API) +* Convert semaphore to mutex with fallback for pre 2.6.16 kernel +* Kill CONFIG_OMNIBOOK_APMEMU and introduce OMNIBOOK_LEGACY: + pre-ACPI features now depends on it. + Default enabling of ac and battery features also + depends on it. It is _disabled_ by default. +* Introduce ACPI methods execution backend: TSM70 needs it + for Display and Wifi/Bluetooth features +* Expand display and hotkeys features +* Introduce experimental NbSmi backend for TSM40. It is + based on technical documentation provided by Toshiba. + Thanks Toshiba ! +* Kill unused omnibook_mem_read/write function for mmio + access +* Cleanup in blank.c fan.c temperature.c +* Unbreak Pio backend: use request/release_region +* Introduce bluetooth and wifi frontend features : they allow + adapter state querry and control (existence probing, wifi + kill switch probing and adapter enabling/disabling). + Supported by TSM30X and TSM40 +* Introduce omnibook_backend struct as a uniform way of + communication between backend and frontend, this + kill omnibook_io_{read/write} and friends. +* Modify ombibook_feature struct to incorporate pointers + to an omnibook_table table and to a omnibook_operation + struct which is picked-up from the ectype matching + omnibook_table entry upon feature initialization +* Add muteled resume handler +* Add touchpad handling for TSM30X +* Add proper display handling for TSM30X +* Change all features struct name from foo_feature to + foo_driver to kept modpost section mismatch detection + silent. Put tbl, init and exit entries to their relevant + sections. + +2.20060809 Mathieu Bérard +* Add dmi info for Toshiba Satellite M40X (Thanks Julien Valroff) +* Fix two brown paper bag bugs in Debian/Ubuntu support + +2.20060806 Mathieu Bérard +* Make the module linux 2.6 only + Kernel versions from 2.6.8 to a least 2.6.17 are supported + Code for compatibility with kernels older than 2.6.17 is + mostly implemented in compat.h +* Integrate with Driver Model: + register as a platform device and optional + registration as a backlight device (2.6.17+ required here) +* Get rid of deprecated pm_legacy functions +* Use kernel-provided DMI information: + Use kernel-provided dmi_check_system for system identification + omnibook_tc_t and omnibook_models_t are merged and converted into a + dmi_system_id struct and moved from init.c to laptop.h +* MODULE_PARAM -> 2.6-style module_parm_* +* Move some code from "feature".c files back to init.c + Interface is provided by the new omnibook_feature struct + Enabled features are now in placed in a linked list + This eliminate util.c + Rationale: Reduce code duplication and create a standard template for features +* Move dmi and version display into their own file: info.c +* Remove all (as unneeded) EXPORT_SYMBOL +* Misc fixes in Makefile + Also make more use of Kbuild +* Use sscanf and simple_stro{u}l for strings parsing instead of custom code +* Run lindent for better conformance with kernel coding style +* Add very limited support for some Toshiba M40 (more info needed) +* Use bitmasks for EC types matching, this change is transparent for the user + (e.g. one can still use ectype=num module parameter) + Rationale: Reduce the size of the omnibook_feature struct +* Polish Debian support: Use module-assistant and fix all Lintian warning + Fix building against non-running kernel (Thanks to Daniel Gimpelevich) +* Update documentation and omnibook-integration.patch +* Fix spinlock usage: they can be used unconditionally as they are automatically + optimized out at build-time on UP. This should improve PREEMPT safety +* Spinlock protect omnibook_mem_* and use ioread8 and iowrite8 +* Fix: Custom EC access function are also used if ACPI is compiled but disabled +* Cleanup: remove lots of unneeded #ifdef +* Add a new feature for testers: dump + Dump was stolen from the ibm_acpi driver + It is disabled by default +* Bump version to 2.YYYYMMDD + +2006-05-15 Thomas Perl +* Added support for xe4500's "audio mute" led + +2006-01-26 Soós Péter +* Added support for kernels >= 2.6.15 (pm_legacy.h) +* Added Toshiba Satellite M30X +* Added support for Toshiba Satellite M70 +* Added support for HP Pavilion ze4300 series +* Fixed module unloading on 2.6 series kernels (thanks to + math_b@users.sourceforge.net) +* Changed version number to +%Y%m%d format +* Added Debian support + +2005-02-17 Soós Péter +* Fixed Makefile +* Updated Toshiba 1115 information + +2004-12-15 Scott Barnes +* Added Toshiba Satellite M35X + +2004-09-16 Soós Péter +* Added INSTALL-2.6 file +* Little spelling fixes in documentation +* Little bugfixes +* Added Compal ACL10 + +2004-07-01 Soós Péter +* Added new technology codes +* Added some new HP nx9000 detection string +* Added Toshiba Satellite P20 + +2004-06-07 Chris Green +* Added Toshiba Satellite P15 + +2004-06-01 Soós Péter +* Added Toshiba Satellite 1955 +* Added Toshiba Satellite 2435 +* Added Toshiba Satellite P10 (new ectype) +* Acer Aspire 1350 + +2004-01-23 Soós Péter +* Added HP Pavilion ze8500 (HP nx9010) +* fixed PM handler for OneTouch keys and touchpad + +2004-01-20 Soós Péter +* Only fan status supported on HP OmniBook 4150, XE2 and + Fujitsu-Siemens Amilo D, fan control is unsupported +* #include fixes in ec.c + +2004-01-16 Soós Péter +* Added fan support for Fujitsu-Siemens Amilo D series laptops + +2004-01-14 Soós Péter +* Fixed Makefile for kernels 2.6 +* Added Fujitsu-Siemens Amilo D series laptops (new ectype) + +2003-12-08 Soós Péter + +* Fixed tecnology code detection +* Added HP/Compaq nx9005 +* Fixed Makefile for kernel 2.4 + +2003-11-12 Soós Péter + +* Fixed KERNEL_WARNING in init.c + +2003-11-10 Soós Péter + +* Fixed timeout bugs in ec.c +* Fixed touchpad dependency code for kernel 2.6 +* Added Compaq nx9000 + +2003-11-10 Mark Chappell + +* Added kernel 2.6 support to Makefile + +2003-10-23 Soós Péter + +* Totally removed key polling code for kernels >= 2.5.0 but 2.5/2.6 kernels + is unsuported yet +* proc_battery is static +* Added HP OmniBook 900 B support +* Added HP OmniBook XE2 support (added new ectype value for it) +* Added Compaq nx9010 +* Reversed ChangeLog +* Some documentation changes + +2003-08-28 Soós Péter + +* Added Toshiba Satellite 2430 +* Documentation enhancements + +2003-04-03 Soós Péter + +* Really fixed __init bug in user parameter code +* Fixed omnibook_dmi_ident (it was static) + +2003-03-31 Soós Péter + +* Fixed HP technology code detection +* Key polling is disabled by default on XE3GC style machines +* Fixed PM code in polling.c +* Added util.c +* Fixed __init bug in user parameter code +* Cleaned up ec.h +* Added Toshiba Satellite 1950 detection +* Documentation enhancements + +2003-03-13 Soós Péter + +* Added HP Pavilion ZU1155 and ZU1175 detection + +2003-03-11 Soós Péter + +* Fixed bogus version information + +2003-03-06 Ducrot Bruno + +* Fan off hack for XE3GF style machines + +2003-03-04 Ducrot Bruno + +* Fixed spinlock problem + +2003-02-28 Soós Péter + +* Added /proc/omnibook/version +* Added OMNIBOOK_ prefix to MODULE_NAME and MODULE_VERSION definitions +* Fixed bugs in lcd.c (thanks to Bernhard Kaindl ) +* Some code tuning and cosmetic changes +* Fixed OmniBook 4150 support + +2003-02-26 Soós Péter + +* Fixed kernel Oops in technology code identification +* Some minor changes in logging + +2003-02-25 Soós Péter + +* Try to identify HP laptops by technology code if machine is unsupported +* Fixed dmi identification code + +2003-02-14 Soós Péter + +* Added HP Pavilion ze4100 support +* Added HP Pavilion ze4200 support +* Fixed HP Pavilion xt155 detection +* Added Acer Aspire 1400 series laptop support +* Fixed APM status detection bug +* Cleaned up dmi identification code +* Removed "Asset Tag:" field from dmi string structure + +2003-01-27 Soós Péter + +* Added HP Pavilion N5430 support +* EC functions are work even if boot parameter acpi=off is given +* Improved error handling in externally callable functions +* Fixed kernel integration patch +* Removed unreliable undocking feature for OB500 +* Fixed HP Pavilion N5415 support +* Added new format hotkeys sample files + +2003-01-09 Ducrot Bruno + +* Added to use ACPI_EC if available + +2003-01-09 Soós Péter + +* Fixed reverse console blanking bug on OB5xx and OB6xxx +* Disabled unreliable undocking feature on OB500 + +2003-01-08 Ducrot Bruno + +* Added Toshiba Satellite 3000, 3005, 1000, 1005, 1110, 1115, 1900, 1905 + support + +2003-01-08 Soós Péter + +* The ectype values changed again! See the README! +* Fixed new ectypes detection bug +* Added OmniBook xe4400 support +* Added LCD display turn off at console blanking on OB5xx and OB6xxx +* Documentation fixes + +2003-01-07 Soós Péter + +* Fixed bit level negation bug in fan.c +* Added turn fan on for Toshiba 3000 +* Corrected OmniBook 4150 support code + +2003-01-06 Soós Péter + +* Changed ectype values! See the README! +* Fixed some bugs in obtest utility +* Fixed second battery status bug in battery.c +* Added textual descriptions to some functions in /proc/omnibook +* Fix APM emulation to work when APM support is present but APM power + status reporting flagged broken +* Added docking station support +* Added fan support +* Added module parameter: user +* Added OmniBook xe155, xe4100 and ze4125 support +* Fan policy moved to /proc/omnibook/fan_policy +* Reorganized scancode emulation code for XE3 GC +* Polling of volume buttons on XE3CG style models can be enabled/disabled + via /proc/omnibook/key_polling +* Finished abstraction layer +* Some minor changes in Rick's model detection code +* New kernel integration code + +2002-12-22 Rick Richardson + +* Added on and off as valid input to /proc/omnibook/lcd, to turn + the LCD backlight on and off. + +2002-12-15 Rick Richardson + +* Reimplemented model detection so you only have to modify one file + to add a new model. features.h is now deprecated. +* Added the Toshiba Satellite 1115/S103 to the supported models +* Fixed bug in apmemu.c which caused /proc/apm to report the battery + status as critical when the battery was charging. + +2002-10-16 Soós Péter + +* Added HP Pavilion N5415 support +* Corrected HP Pavilion N5441 support +* Fix values of OB500 type machines in ec.h +* LCD brightness support added for XE3GC and XE3GF style machines +* Added HP OmniBook 510 FB support +* AC adapter status monitoring is working on all machines +* External display status monitoring is working on all machines +* CPU temperature monitoring is working on all machines +* __init functions gone to init.h +* Added an abstraction layer between the low level, hardware dependent + functions and the applications (not yet finished). See omnibook.h for + details. + +2002-09-20 Soós Péter + +* Using save_flags()/cli() instead spinlocks in ec.c because of laptops do + not have more than one CPU (yet ;)). This improves performance and + eliminates packet loss in ppp stack +* The previous version of XE3 GC scancode emulation was buggy: it worked only + when ACPI enabled. Current version is working ACPI independent way + +2002-09-05 Soós Péter + +* Added secondary battery support (untested, please report!) +* Added ectype module parameter to specify the type of embedded + controller firmware +* Added some OmniBook XE3 GC support code +* Added some OmniBook 500 style embedded controller firmware support code + (OmniBook 5xx, 6xxx and some Pavilions) +* Reorganized features matrix (again): the features depends on the embedded + controller firmware, not the model +* Added external display status monitoring on some machine +* Added scancode emulation on OmniBook XE3 GC + +2002-08-14 Soós Péter + +* Added HP OmniBook 6000 EA support (OneTouch only) +* Added HP OmniBook 6100 EB support (OneTouch only) +* Fixed Toshiba Satellite 3000-100 detection +* Fixed timeout and locking bugs in ec.c +* Added HP Pavilion Notebook ZT1141 +* Reorganized the feature matrix and parameter detection code to make easy + to add new features differents machine by machine + +2002-08-11 Soós Péter + +* Fixed removing of procfs entries +* Fixed APM detection +* Added kernel source integration +* Fixed __initdata bugs +* Handling difference between untesed and unsupported features + +2002-08-09 Soós Péter + +* Added Compal ACL00 laptop support +* Updated documentation +* Added touchpad support +* Some bugfixes +* /proc/apm emulation added + +2002-08-06 Soós Péter + +* Corrected full charged battery info +* Added OneTouch handling via procfs +* Added console blank handling via procfs +* Added temperature policy handling via procfs +* Corrected the bug in DMI code to report the serial number +* Added module parameter support +* Added HP Pavilion Notebook N5490, ZT1195 (and probably other Pavilions) + +2002-07-17 Soós Péter + +* Improved error handling +* Some text corrections +* Added Toshiba Satellite 3000-100 support +* Some code tuning +* Added omnibook prefix for variables and functions to prevent conflicts + with another code +* Added /proc filesystem support +* Added battery status monitoring +* Added CPU temperature monitoring + +2002-06-03 Soós Péter + +* Some code tuning + +2002-05-07 Soós Péter + +* Added missing #include to main.c +* Some text corrections +* Added HP OmniBook 500 FA support (OneTouch only) + +2002-05-06 Soós Péter + +* LCD display turn off at console blanking added +* Code cleanup + +2002-05-02 Soós Péter + +* The first release of omnibook module +* OneTouch button support --- linux-2.6.32.orig/ubuntu/omnibook/doc/BUGS +++ linux-2.6.32/ubuntu/omnibook/doc/BUGS @@ -0,0 +1,17 @@ +Bugs and problems in omnibook module code +========================================= + +* Volume Control buttons on machine (not on docking station) do not generate + scancodes on OB500 style models. It is unhandled yet. +* Setting the LCD brightness on HP OmniBook XE3 GF via /proc/omnibook/lcd + is working if you press one of the brightness control keys once after + writing the value into /proc/omnibook/lcd. +* I'm not a native English speaker so text corrections are welcome. +* obtest can BADLY confuse the in-kernel ACPI code due to its racy + implementation. +* Reenabling wifi adapter after previous disabling is broken on + Toshiba Satellite M100 (ipw3945) +* Real support of ectype 14 is still missing +* See http://sourceforge.net/tracker/?atid=868542&group_id=174260&func=browse + for sf.net bug tracking system. + --- linux-2.6.32.orig/ubuntu/omnibook/doc/README +++ linux-2.6.32/ubuntu/omnibook/doc/README @@ -0,0 +1,42 @@ +=============================================================== +Kernel Support for HP OmniBooks, Pavilions and Compal laptops +=============================================================== + +This package is intended to provide Linux kernel support for many laptops such as: +- HP OmniBook and Pavilion +- Toshiba Satellite and Tecra which are not supported by the toshiba_acpi module +- Compal ACL00 +- Many laptops manufactured by Compal Electronics, Inc as ODM + +Supported features depends on the exact laptop model but may include: +- Enabling hotkey buttons +- Console (LCD display) blanking +- Battery status monitoring. +- Fan and fan policy support +- Touchpad control +- AC Adapter status monitoring +- External display monitors status monitoring and control +- LCD brightness (backlight) monitoring and control +- Docking station/port replicator status +- CPU temperature monitoring +- Mute LED monitoring and control +- Wifi and Bluetooth adapters monitoring and control +- Cooling method control +- CPU Throttling control + +Useful links: + +Full documentation (HOWTO, Installation instructions, Supported laptops list... ): +http://omnibook.sourceforge.net/doku.php?id=start + +Sourceforge project page: +http://sourceforge.net/projects/omnibook + +Other links not related to the project: + +For HP Omnibook specific issues ou can see the OmniBook mailing list: +http://zurich.ai.mit.edu/mailman/listinfo/omnibook + +or the Toshiba linux mailing list: +http://linux.toshiba-dme.co.jp/linux/ + --- linux-2.6.32.orig/ubuntu/omnibook/doc/COPYING +++ linux-2.6.32/ubuntu/omnibook/doc/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. --- linux-2.6.32.orig/ubuntu/omnibook/doc/CREDITS +++ linux-2.6.32/ubuntu/omnibook/doc/CREDITS @@ -0,0 +1,39 @@ +The module was originally written by + +* Soós Péter + +Special thanks to the following persons and/or organisations (without +particular order): + +* Al Stone and Linux Systems Operation at HP for lending + an HP OmniBook 500 for the project purposes. +* Pavel Mihaylov for his omke project discovering a lot of + OmniBook features, providing some code for XE3 GC machines and testing. +* Ducrot Bruno sharing lots of information about + embedded controller and related code, added lots of Toshiba support, + writing tosh3k code, sending patches etc. + +Thanks to the following people (without particular order): + +* Al Stone for sharing some programming information. +* Guido Guenther for initial OneTouch enabling code. +* Jens Thoms Toerring for initial + OneTouch power management code. +* Maciek Gorniak for initial HP Pavilion N5415 detecting + code and initial lcd brighness code. +* Rick Richardson for some bugfixes and useful patches. +* Bob McElrath for initial Compal ACL00 + code. +* Luisimi Moya for Acer Aspire 1400 support. +* Bernhard Kaindl for bugfixes and patches +* Gabriele Vivinetto for documentation + enhancements and testing. +* Mark Chappell for building on kernel 2.6. +* Massimo Dal Zotto for his i8k code. +* Jonathan A. Buzzard for his toshiba code. +* Some others on OmniBook mailing list at + http://zurich.ai.mit.edu/mailman/listinfo/omnibook + for providing information and testing. + +Last but not least thanks to Linus Torvald and more for creating and +maintaining the Linux kernel. --- linux-2.6.32.orig/ubuntu/omnibook/debian/rules +++ linux-2.6.32/ubuntu/omnibook/debian/rules @@ -0,0 +1,135 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +include /usr/share/dpatch/dpatch.make + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +# Name of the source package +psource := omnibook-source + +# The short upstream name, used for the module source directory +sname := omnibook + +# prefix of the target package name +PACKAGE=omnibook-module + +### end KERNEL SETUP + +configure: configure-stamp +configure-stamp: + dh_testdir + touch configure-stamp + + +build-arch: configure-stamp build-arch-stamp +build-arch-stamp: + dh_testdir + touch build-arch-stamp + +build-indep: patch configure-stamp build-indep-stamp +build-indep-stamp: + dh_testdir + + touch build-indep-stamp + +build: patch build-arch build-indep + +clean: unpatch + dh_testdir + rm -f build-arch-stamp build-indep-stamp configure-stamp + + dh_clean + +install: DH_OPTIONS= +install: patch build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + # Create the directories to install the source into + dh_installdirs -p$(psource) usr/src/modules/$(sname)/debian + cp debian/compat debian/rules debian/changelog \ + debian/control debian/copyright debian/*.modules.in \ + debian/$(psource)/usr/src/modules/$(sname)/debian + cp Makefile *.c *.h *.lds debian/$(psource)/usr/src/modules/$(sname) + + cd debian/$(psource)/usr/src && tar c modules | bzip2 -9 > $(sname).tar.bz2 && rm -rf modules + dh_install + +# Build architecture-independent files here. +# Pass -i to all debhelper commands in this target to reduce clutter. +binary-indep: build install + dh_testdir -i + dh_testroot -i + dh_installchangelogs -i doc/ChangeLog + dh_installdocs -i + dh_installexamples -i + dh_installman -i + dh_link -i + dh_compress -i + dh_fixperms -i + dh_installdeb -i + dh_installdeb -i + dh_shlibdeps -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +# Build architecture-dependent files here. +binary-arch: build install + +# modifieable for experiments or debugging m-a +MA_DIR ?= /usr/share/modass +# load generic variable handling +-include $(MA_DIR)/include/generic.make +# load default rules, including kdist, kdist_image, ... +-include $(MA_DIR)/include/common-rules.make + +ifndef KPKG_STEM +STEM:=linux +else +STEM:=${KPKG_STEM} +endif + +kdist_clean: prep-deb-files + [ ! -f Makefile ] || $(MAKE) KSRC=$(KSRC) clean + dh_clean + +kdist_config: prep-deb-files + sed -i -e 's/_STEM_/$(STEM)/g' debian/control + +binary-modules: kdist_config prep-deb-files + dh_testroot + dh_prep + dh_installdirs lib/modules/$(KVERS)/extra + + # Build the module + $(MAKE) KSRC=$(KSRC) KVERS=$(KVERS) + + # Install the module + $(MAKE) install KSRC=$(KSRC) DESTDIR=$(CURDIR)/debian/$(PKGNAME) INSTDIR=extra DEPMOD="/bin/true" + + dh_installdocs + dh_compress + dh_installmodules + dh_installchangelogs + dh_fixperms + dh_installdeb + dh_gencontrol -- -v$(VERSION) + dh_md5sums + dh_builddeb --destdir=$(DEB_DESTDIR) + dh_prep + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure binary-modules kdist kdist_config kdist_image kdist_clean --- linux-2.6.32.orig/ubuntu/omnibook/debian/copyright +++ linux-2.6.32/ubuntu/omnibook/debian/copyright @@ -0,0 +1,32 @@ +This package was debianized by Peter Soos on +Wed, 25 Jan 2006 21:06:28 +0100. +Debian package was improved by Julien Valroff + +It was downloaded from http://sourceforge.net/projects/omnibook + +Copyright Holder: 2006-2007 Mathieu Bérard + +dump.c: + Copyright (C) 2004-2005 Borislav Deianov + +License: + + This package 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 package 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. + +The Debian packaging is + Copyright (C) 2006 Peter Soos + Copyright (C) 2006-2009 Julien Valroff +It is licensed under the GPL, version 2. + +You should have received a copy of the GNU General Public License with +the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL-2; +if not, write to the Free Software Foundation, Inc., 51 Franklin St, +Fifth Floor, Boston, MA 02110-1301, USA. --- linux-2.6.32.orig/ubuntu/omnibook/debian/compat +++ linux-2.6.32/ubuntu/omnibook/debian/compat @@ -0,0 +1 @@ +7 --- linux-2.6.32.orig/ubuntu/omnibook/debian/control +++ linux-2.6.32/ubuntu/omnibook/debian/control @@ -0,0 +1,21 @@ +Source: omnibook +Section: misc +Priority: optional +Maintainer: Julien Valroff +Build-Depends: debhelper (>> 7.0.0), dpatch, bzip2 +Standards-Version: 3.8.2 +Homepage: http://omnibook.sf.net +Vcs-Svn: https://omnibook.svn.sourceforge.net/svnroot/omnibook/omnibook/trunk +Vcs-Browser: http://omnibook.svn.sourceforge.net/viewvc/omnibook/ + +Package: omnibook-source +Architecture: all +Depends: debhelper (>= 4.0.0), make, module-assistant, kernel-package, bzip2, dpatch +Description: Source for the omnibook driver + This package contains the loadable kernel modules for the HP OmniBooks, + Pavilions, Toshiba Satellites and some other laptops manufactured by + Compal Electronics, Inc as ODM. + . + This module is only compatible with Linux kernels >= 2.6.9 + . + Kernel source is required to compile this module. --- linux-2.6.32.orig/ubuntu/omnibook/debian/README.Debian +++ linux-2.6.32/ubuntu/omnibook/debian/README.Debian @@ -0,0 +1,30 @@ +omnibook for Debian +------------------- + +Please see docs/README for a description of the omnibook kernel module. + +The Debian omnibook source package provides omnibook-source, package +which provides the source for the kernel module. + +The omnibook-source package can be used in several ways, + + - Using the make-kpkg(1) command provided by the kernel-package Debian + package. This will produce a corresponding omnibook-modules package for + the Debian kernel-image package that you are using. + See the "modules_image" section of the make-kpkg(1) man page. + + - Using module-assistant. Simply issue the following command (as root): + $ module-assistant auto-install omnibook + Please see the module-assistant documentation for futher details. + + - Changing to the /usr/src/modules/omnibook/ directory and building as + the README file instructs using "make; make install". This will build + and install a module specific to the system you are building on and is + not under control of the packaging system. + +If your are not using module-assisatant, you have to unpack +/usr/src/omnibook-source.tar.bz2 to /usr/src. + + -- Peter Soos , Wed, 25 Jan 2006 21:06:28 +0100 + -- Julien Valroff Sun, 07 Oct 2007 10:38:07 +0200 + --- linux-2.6.32.orig/ubuntu/omnibook/debian/docs +++ linux-2.6.32/ubuntu/omnibook/debian/docs @@ -0,0 +1,4 @@ +doc/BUGS +doc/CREDITS +doc/README +misc/hotkeys --- linux-2.6.32.orig/ubuntu/omnibook/debian/control.modules.in +++ linux-2.6.32/ubuntu/omnibook/debian/control.modules.in @@ -0,0 +1,23 @@ +Source: omnibook +Section: misc +Priority: optional +Maintainer: Julien Valroff +Build-Depends: debhelper (>> 7.0.0) +Standards-Version: 3.8.2 + +Package: omnibook-module-_KVERS_ +Architecture: i386 amd64 +Recommends: _STEM_-image-_KVERS_ +Provides: omnibook-module +Description: omnibook module for Linux (kernel _KVERS_) + This package contains the loadable kernel modules for the HP OmniBooks, + Pavilions, Toshiba Satellites and some other laptops manufactured by + Compal Electronics, Inc as ODM. + . + This package contains the compiled kernel modules for _KVERS_ + . + If you have compiled your own kernel, you will most likely need to build + your own omnibook-module. The omnibook-source package has been + provided for use with the Debian kernel-package utility to produce a version + of omnibook-module for your kernel. + --- linux-2.6.32.orig/ubuntu/omnibook/debian/changelog +++ linux-2.6.32/ubuntu/omnibook/debian/changelog @@ -0,0 +1,170 @@ +omnibook (2:2.20070211+svn20090714b-1) unstable; urgency=low + + * New SVN snapshot: + + fix build issue induced by previous patches + + fix build with kernel >= 2.6.30 + + -- Julien Valroff Tue, 14 Jul 2009 18:17:49 +0200 + +omnibook (2:2.20070211+svn20090714-1) unstable; urgency=low + + * New SVN snapshot: + + Applied patches from Azael Avalos + to add support to Satellite X205 and other laptops based on + ICH8 + * New Standards version 3.8.2 + * Bumped DH compat to 7 + * Updated copyright information + * Now use dh_prep instead of dh_clean -k + + -- Julien Valroff Tue, 14 Jul 2009 10:03:00 +0200 + +omnibook (2:2.20070211+svn20090227-1) unstable; urgency=low + + * New SVN snapshot + + Applied patch from Danny Kukawka to + fix compiler warning about use uninitialized variable + + Applied patch from Danny Kukawka to + fix build the driver on older kernel versions + + * New Standards version 3.8.0 - no further changes needed + * Updated copryight information + + -- Julien Valroff Fri, 27 Feb 2009 19:57:35 +0100 + +omnibook (2:2.20070211+svn20071217-1) unstable; urgency=low + + * New SVN snapshot (r271) + * Added amd64 as a compatible architecture for the module + * New Standards version 3.7.3 - no further changes needed + + -- Julien Valroff Mon, 17 Dec 2007 18:00:29 +0100 + +omnibook (2:2.20070211+svn20071006-1) unstable; urgency=low + + * New SVN snapshot (r264): + + Update for acpi and backlight API changes in linux 2.6.23 + * First upload to Debian (Closes: #445602): + + Improved debian/copyright + + Bumped debhelper compat to version 5 + + Added myself as maintainer + + Updated README.Debian + * debian/control: + + Moved Homepage to own field (from pseudo-field in long description) + + Added Vcs-* fields + + -- Julien Valroff Thu, 29 Nov 2007 18:30:27 +0100 + +omnibook (2:2.20070211+svn20070905-1) unstable; urgency=low + + * Added dependency on dpatch + * [debian/rules]: + - Fixed lintian warning in the clean target + + -- Julien Valroff Wed, 05 Sep 2007 20:25:13 +0200 + +omnibook (2:2.20070211+svn20070526-1) unstable; urgency=low + + * New SVN snapshot (r259): + + Fixed compilation issue with kernel 2.6.21 + + DMI signature added: + Toshiba Satellite P25 (ectype 11) + Toshiba Satellite M60 (ectype 12) + * Added patch to disable debug for SVN snasphot + + -- Julien Valroff Sat, 26 May 2007 15:19:57 +0200 + +omnibook (2:2.20070211-1) unstable; urgency=low + + * New upstream release: + + For ectype 12 (Satellite M40X, M70, M100, ...): + - improved bluetooth control + - cooling method control + - CPU throttling ( ACPI T-States) + + Full hotkeys support for Tecra S1 + + Bluetooth control for Ectype 14 (Satellite A100, A105, M115, ...) + * Updated homepage in long description + + -- Julien Valroff Mon, 12 Feb 2007 18:50:05 +0100 + +omnibook (2:2.20060921+svn20061202-1) unstable; urgency=low + + * New SVN snapshot (r228) + + -- Julien Valroff Sat, 2 Dec 2006 10:17:07 +0100 + +omnibook (2:2.20060921+svn20061112-1) unstable; urgency=low + + * SVN snapshot: + + Disabled Acer support + + Fixed and improved bluetooth handling for TSM30X class laptop + + DMI signature added: + HP Pavilion ze4500 (ectype 7) + Toshiba Satellite 1130 (ectype 1) + Toshiba Satellite A75 (ectype 12) + Toshiba Tecra A4 (ectype 13) + + Implemented Volume down,up and Mute buttons polling for ectype 2 + + Implemented ectype 13 Fn hotkeys handling. + * changed compression of the sources in /usr/src/ to bzip2 + + -- Julien Valroff Sat, 11 Nov 2006 14:08:47 +0100 + +omnibook (2:2.20060921-1) unstable; urgency=low + + * New upstream release: + + Expand display and hotkeys features + + Added support for more laptops + + Code cleanups + + Minor bug fixes + + -- Julien Valroff Mon, 25 Sep 2006 08:14:59 +0200 + +omnibook (2:2.20060817-1) unstable; urgency=low + + * New upstream release + * [01_makfefile.dpatch] Removed - fixed upstream + * Changed defaut STEM value to linux (follows kernel-package) + * Uses dh_installmodules for maintainance scripts + + -- Julien Valroff Mon, 11 Sep 2006 18:00:50 +0200 + +omnibook (2:2.20060809-2) unstable; urgency=low + + * Include copyright and Debian changelog in omnibook-module + * Fix Makefile issue in a more elegant way + + -- Julien Valroff Thu, 10 Aug 2006 10:16:47 +0200 + +omnibook (2:2.20060809-1) unstable; urgency=low + + * New upstream release: + + Addeed autodetection of the Toshiba Satellite M40X laptop + + -- Julien Valroff Thu, 10 Aug 2006 09:40:45 +0200 + +omnibook (2:2.20060806-1) unstable; urgency=low + + * New upstream branch - Mathieu Bérard launched new project + * Added myself as co-maintainer + * Bumped upstream version and use epoch to ensure upgrades + * [debian/rules]: + + Clean-ups + + Recommends linux-image or kernel-image + * [debian/control] Improved long description + * [debian/post*.modules.in] Fixed bashisms + * Added patch to fix install target in Makefile + + -- Julien Valroff Thu, 10 Aug 2006 01:35:38 +0200 + +omnibook (20060126-1) unstable; urgency=low + + * Minor build inconveniences corrected. + + -- Daniel Gimpelevich Sun, 18 Jun 2006 12:28:55 -0700 + +omnibook (20060126-0) unstable; urgency=low + + * Locally built. + + -- Péter Soós Wed, 25 Jan 2006 21:06:28 +0100 + --- linux-2.6.32.orig/ubuntu/omnibook/misc/dmi_strings.txt +++ linux-2.6.32/ubuntu/omnibook/misc/dmi_strings.txt @@ -0,0 +1,857 @@ +HP OmniBook XT1000 ------------------------- + +BIOS Vendor: Insyde Software +BIOS Version: IB.M1.05 +BIOS Release: 02/28/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook XT1000 +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: HP OmniBook XT1000 + +--------------------------------------------- +HP OmniBook XT1500 -------------------------- + +BIOS Vendor: Insyde Software +BIOS Version: IC.M1.05 +BIOS Release: 08/13/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: HP OmniBook + +--------------------------------------------- +HP OmniBook XT1500 ------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: ID.M1.04 +BIOS Release: 08/14/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook XE3 GF +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook Zinfandel 4.5 + +--------------------------------------------- +HP OmniBook XE3 GC -------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GC.M1.63 +BIOS Release: 01/01/1992 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook XE3 GC +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-733 + +--------------------------------------------- +HP OmniBook XE3 GF -------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GF.M1.07 +BIOS Release: 03/05/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook XE3 GF +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-101 + +--------------------------------------------- +HP OmniBook 500 FA -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd +BIOS Version: FA.M2.62 +BIOS Release: 11/30/1999 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 500 FA +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 500 FA + +--------------------------------------------- +HP OmniBook 510 FB -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: FB.M1.20 +BIOS Release: 04/12/02 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 510 FB +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 510FB + +--------------------------------------------- +Toshiba Satellite 3000-100 ------------------ + +BIOS Vendor: TOSHIBA +BIOS Version: V2.20 +BIOS Release: 10/12/01 +System Vendor: TOSHIBA +Product Name: S3000-100 +Version: PS300E-03EKL-FR +Board Vendor: Null +Board Name: 888M1 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite 1115-s103------------------ + +BIOS Vendor: TOSHIBA +BIOS Version: V1.20 +BIOS Release: 09/11/2002 +System Vendor: TOSHIBA +Product Name: Satellite 1115 +Version: PS111U-001FUV +Board Vendor: TOSHIBA +Board Name: BTK20 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite 1110 ---------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.20 +BIOS Release: 09/11/2002 +System Vendor: TOSHIBA +Product Name: S1110 +Version: PS111E-003DN-GR +Board Vendor: TOSHIBA +Board Name: BTK20 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite 1130 ---------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.70A +BIOS Release: 09/02/2003 +System Vendor: TOSHIBA +Product Name: Satellite 1130 +Version: PS113E-05ZYF-GR +Board Vendor: TOSHIBA +Board Name: BTW30 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite 1900-704 ------------------ + +BIOS Vendor: TOSHIBA +BIOS Version: V1.50 +BIOS Release: 11/25/2002 +System Vendor: TOSHIBA +Product Name: Satellite 1950 +Version: PS195E-008QY-DU +Board Vendor: TOSHIBA +Board Name: ATR60 + +--------------------------------------------- +Toshiba Satellite 1955-s805 ----------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.00 +BIOS Release: 01/17/2003 +System Vendor: TOSHIBA +Product Name: Satellite 1955 +Version: PS197U-000LEV +Board Vendor: TOSHIBA +Board Name: BTR80 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite A70 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.50 +BIOS Release: 11/16/2004 +System Vendor: TOSHIBA +Product Name: Satellite A70 +Version: PSA70C-KL100E +Serial Number: X4451615K +Board Vendor: TOSHIBA +Board Name: EDW10 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite A80 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V2.50 +BIOS Release: 01/11/2006 +System Vendor: TOSHIBA +Product Name: Satellite A80 +Version: PSA80E-03T00JSP +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Satellite A105 ---------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: 1.30 +BIOS Release: 02/09/2006 +System Vendor: TOSHIBA +Product Name: Satellite A105 +Version: PSAA8U-02000U +Board Vendor: Intel Corporation +Board Name: Not Applicable + +--------------------------------------------- +Toshiba Satellite P10 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.20 +BIOS Release: 09/12/2003 +System Vendor: TOSHIBA +Product Name: Satellite P10 +Version: PSP10E-34FJR +Board Vendor: TOSHIBA +Board Name: DAL00 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite P15 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.20 +BIOS Release: 09/12/2003 +System Vendor: TOSHIBA +Product Name: Satellite P15 +Version: PSP10U-0DUJPV +Board Vendor: TOSHIBA +Board Name: DAL00 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite P25 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V2.10 +BIOS Release: 12/27/2004 +System Vendor: TOSHIBA +Product Name: Satellite P25 +Version: PSP20U-19PS8R +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Satellite P100 ---------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V3.30 +BIOS Release: 12/22/2006 +System Vendor: TOSHIBA +Product Name: Satellite P100 +Version: PSPA3E-02E013G3 +Board Vendor: TOSHIBA +Board Name: Not Applicable + +--------------------------------------------- +Toshiba Satellite M40 ----------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: 1.10 +BIOS Release: 08/24/05 +System Vendor: TOSHIBA +Product Name: Satellite M40 +Version: PSM44E-00U00EFR +Board Vendor: ATI +Board Name: SB400 +Board Version: Rev0.4b + +--------------------------------------------- +Toshiba Satellite M45 (S355) ---------------- + +BIOS Vendor: TOSHIBA +BIOS Version: Version 2.00 +BIOS Release: 02/07/2006 +System Vendor: TOSHIBA +Product Name: Satellite M45 +Version: PSM40U-073001 +Board Vendor: TOSHIBA +Board Name: Version A0 + +--------------------------------------------- +Toshiba Satellite M40X (-131)---------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.60 +BIOS Release: 06/09/2005 +System Vendor: TOSHIBA +Product Name: Satellite M40X +Version: PSM4XE-01400GFR +Board Vendor: TOSHIBA +Board Name: EAL30 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite M50------------------------ + +BIOS Vendor: TOSHIBA +BIOS Version: V2.10 +BIOS Release: 05/08/2006 +System Vendor: TOSHIBA +Product Name: Satellite M50 +Version: PSM51E-01C011IT +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Satellite M60 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.60 +BIOS Release: 03/16/2006 +System Vendor: TOSHIBA +Product Name: Satellite M60 +Version: PSM60E-0CD01FIT +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Satellite M70 ----------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.10 +BIOS Release: 09/15/2005 +System Vendor: TOSHIBA +Product Name: Satellite M70 +Version: PSM71E-01100KFR +Board Vendor: TOSHIBA +Board Name: HTW00 +Board Version: Null + +--------------------------------------------- +Toshiba Satellite A75 ----------------------- + +IOS Vendor: TOSHIBA +BIOS Version: V1.50 +BIOS Release: 11/16/2004 +System Vendor: TOSHIBA +Product Name: Satellite A75 +Version: PSA70U-004004B +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Satellite M100 ---------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.90 +BIOS Release: 07/20/2006 +System Vendor: TOSHIBA +Product Name: SATELLITE M100 +Version: PSMA0E-030019TE +Board Vendor: TOSHIBA +Board Name: HAQAA +Board Version: Null + +--------------------------------------------- +Toshiba Satellite M100 ---------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.00 +BIOS Release: 03/30/2006 +System Vendor: TOSHIBA +Product Name: Satellite M100 +Version: PSMA2U-00T00G +Board Vendor: TOSHIBA +Board Name: HAWAA +Board Version: None + +--------------------------------------------- +Toshiba Satellite M115 ---------------------- + +Bios vender: Phoenix Tech. LTD +Bios version: 1.00 +Bios release: 08/31/2006 +System Vendor: Toshiba +Product Name: Satellite M115 +Version: PSMBOU-015007 +Board vendor Intel +Board name: N/a + +--------------------------------------------- +Toshiba Equium A110 ------------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V1.30 +BIOS Release: 07/20/2006 +System Vendor: TOSHIBA +Product Name: EQUIUM A110 +Version: PSAB2E-002006AV +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Tecra A4 ---------------------------- + + +BIOS Vendor: TOSHIBA +BIOS Version: Version 1.70 +BIOS Release: 10/14/2005 +System Vendor: TOSHIBA +Product Name: Tecra A4 +Version: PTA40E-0UN00FSP +Board Vendor: TOSHIBA +Board Name: Version A0 + +--------------------------------------------- +Toshiba Tecra A6 ---------------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V2.70 +BIOS Release: 04/26/2007 +System Vendor: TOSHIBA +Product Name: TECRA A6 +Version: PTA60U-0FK00D +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Toshiba Tecra S2 ---------------------------- + +BIOS Vendor: TOSHIBA +BIOS Version: V2.50 +BIOS Release: 01/11/2006 +System Vendor: TOSHIBA +Product Name: Tecra S2 +Version: PTS20E-1FE04Q8M +Board Vendor: TOSHIBA +Board Name: Null + +--------------------------------------------- +Compal ACL00 -------------------------------- + +BIOS Vendor: COMPAL +BIOS Version: V2.10C +BIOS Release: 03/25/02 +System Vendor: COMPAL +Product Name: * +Version: * +Board Vendor: Null +Board Name: ACL00 +Board Version: Null + +--------------------------------------------- +Compal ACL10 -------------------------------- + +BIOS Vendor: COMPAL +BIOS Version: V1.10 +BIOS Release: 04/12/2001 +System Vendor: * +Product Name: * +Version: * +Board Vendor: COMPAL +Board Name: ACL10 +Board Version: Null + +--------------------------------------------- +HP Pavilion ZT1195 -------------------------- + +BIOS Vendor: Insyde Software +BIOS Version: IC.M1.00 +BIOS Release: 03/20/2002 +System Vendor: Hewlett-Packard +Product Name: HP Pavilion Notebook PC +Version: HP Pavilion Notebook +Board Vendor: Hewlett-Packard +Board Name: HP Pavilion Notebook PC +Board Version: HP Pavilion Notebook + +--------------------------------------------- +HP Pavilion ZT1141 -------------------------- + +BIOS Vendor: Insyde Software +BIOS Version: IB.M1.05 +BIOS Release: 02/28/2002 +System Vendor: Hewlett-Packard +Product Name: HP Pavilion Notebook PC +Version: HP Pavilion Notebook ZT1000 +Board Vendor: Hewlett-Packard +Board Name: HP Pavilion Notebook PC +Board Version: HP Pavilion Notebook ZT1000 + +--------------------------------------------- +HP OmniBook 6100 EB ------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: EB.M2.20 +BIOS Release: 02/27/02 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 6100 EB +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 6100EB + +--------------------------------------------- +HP OmniBook 6000 EA ------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: EA.M1.81 +BIOS Release: 02/22/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 6000 EA +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 6000EA + +--------------------------------------------- +HP OmniBook xe4500 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KB.M1.30 +BIOS Release: 08/05/20022 +System Vendor: Hewlett-Packard. +Product Name: HP OmniBook PC +Version: HP OmniBook xe4500 +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: xe4500 + +--------------------------------------------- +HP Pavilion N5441 --------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GD.M1.08 +BIOS Release: 09/27/2001 +System Vendor: Hewlett-Packard +Product Name: HP Pavilion Notebook PC +Version: HP Pavilion Notebook Model GD +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-736 + +--------------------------------------------- +HP Pavilion N5430 --------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GD.M1.08 +BIOS Release: 09/27/2001 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook XE3 GD +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-736 + +--------------------------------------------- +HP Pavilion N5415 --------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GE.M1.04 +BIOS Release: 07/30/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook XE3 GE +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-736 + +--------------------------------------------- +HP Pavilion N5290 --------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GC.M1.63 +BIOS Release: 01/01/1992 +System Vendor: Hewlett-Packard +Product Name: HP Pavilion Notebook PC +Version: HP Pavilion Notebook XE3 GC +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-733 + +--------------------------------------------- +HP OmniBook vt6200 ------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: EG.M2.10 +BIOS Release: 09/19/02 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 6200 EG +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 6200EG + +--------------------------------------------- +HP OmniBook 4150 ---------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: CI.M2.250 +BIOS Release: 06/10/99 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 4150 +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook TS32T2 + +--------------------------------------------- +HP OmniBook xt6200 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd +BIOS Version: EG.M2.10 +BIOS Release: 09/19/02 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 6200 EG +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 6200EG + +--------------------------------------------- +HP Pavilion ze4125 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd +BIOS Version: KA.M1.20 +BIOS Release: 09/13/2002 +System Vendor: Hewlett-Packard +Product Name: HP NoteBook PC +Version: HP NoteBook ze4000 +Board Vendor: Hewlett-Packard +Board Name: HP NoteBook PC +Board Version: HP NoteBook ze4000 + +--------------------------------------------- +HP OmniBook xt155 --------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KE.M1.40 +BIOS Release: 10/11/20022 +System Vendor: Hewlett-Packard +Product Name: HP NoteBook PC +Version: HP Notebook PC +Board Vendor: Hewlett-Packard +Board Name: HP NoteBook PC +Board Version: HP Notebook PC + +--------------------------------------------- +HP OmniBook xe4100 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KC.M1.10 +BIOS Release: 07/11/2002 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook xe4000 +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: 4000KC + +--------------------------------------------- +HP Omnibook xe4400 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KD.M1.60 +BIOS Release: 09/19/20022 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP Omnibook xe4400 +Board Vendor: Hewlett-Packard +Board Name: HP OmniBook PC +Board Version: xe4400 + +--------------------------------------------- +HP Pavilion ze4100 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KE.M1.40 +BIOS Release: 10/11/20022 +System Vendor: Hewlett-Packard +Product Name: HP NoteBook PC +Version: HP Notebook PC +Board Vendor: Hewlett-Packard +Board Name: HP NoteBook PC +Board Version: HP Notebook PC + +--------------------------------------------- +Acer Aspire 1350 ---------------------------- +BIOS Vendor: Acer +BIOS Version: 3A24 +BIOS Release: 12/01/2003 +System Vendor: Acer,Inc. +Product Name: Aspire 1350 +Version: 3A24 +Board Vendor: Acer,Inc. +Board Name: Aspire 1350 +Board Version: Rev.A + +--------------------------------------------- +Acer Aspire 1406 LC ------------------------- + +BIOS Vendor: Acer +BIOS Version: V2.30 +BIOS Release: 10/04/02 +System Vendor: Acer +Product Name: Aspire 1400 series +Version: * +Board Vendor: Null +Board Name: BR20 +Board Version: Null + +--------------------------------------------- +HP Pavilion ze4200 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KE.M1.53 +BIOS Release: 12/10/20022 +System Vendor: Hewlett-Packard +Product Name: Pavilion ze4200 +Version: KE.M1.53 +Board Vendor: Hewlett-Packard +Board Name: 002A +Board Version: NS570 Version PQ1A74 + +--------------------------------------------- +HP Pavilion ze4500 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KAM1.57 +BIOS Release: 02/19/2004 +System Vendor: Hewlett-Packard +Product Name: Pavilion ze4500 (DP793E) +Version: KAM1.57 +Board Vendor: Hewlett-Packard +Board Name: PQ1A83 + +--------------------------------------------- +HP Pavilion ZU1175 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: FA.M2.60 +BIOS Release: 11/30/1999 +System Vendor: Hewlett-Packard +Product Name: HP Pavilion Notebook PC +Version: HP Pavilion ZU1000 FA +Board Vendor: Hewlett-Packard +Board Name: HP Pavilion Notebook PC +Board Version: 1000FA + +--------------------------------------------- +HP Pavilion XH545 --------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: GE.M1.03 +BIOS Release: 11/08/2001 +System Vendor: Hewlett-Packard +Product Name: HP Pavilion Notebook PC +Version: HP Pavilion Notebook Model GE +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook N32N-736 + +--------------------------------------------- +Toshiba Satellite 2430-402 ------------------ + +BIOS Vendor: TOSHIBA +BIOS Version: V1.30 +BIOS Release: 01/16/2003 +System Vendor: TOSHIBA +Product Name: Satellite 2430 +Version: PS243E-06P4S-4V +Board Vendor: TOSHIBA +Board Name: BTS88 +Board Version: Null + +--------------------------------------------- +HP OmniBook 900 B --------------------------- + +BIOS Vendor: Phoenix Technologies LTD +BIOS Version: CL.M3.13 +BIOS Release: 11/11/99 +System Vendor: Hewlett-Packard +Product Name: HP OmniBook PC +Version: HP OmniBook 900 B +Board Vendor: Hewlett-Packard +Board Name: N/A +Board Version: OmniBook TS32U2 + +--------------------------------------------- +HP Compaq nx9000 ---------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KE_KG.M1.06 +BIOS Release: 05/16/2003 +System Vendor: Hewlett-Packard +Product Name: HP nx9000 (DG223T) +Version: KG.M1.06 +Board Vendor: Hewlett-Packard +Board Name: 002A +Board Version: NS570 Version PQ1A78 + +--------------------------------------------- +HP Compaq nx9000 ---------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KE_KG.M1.15 +BIOS Release: 12/19/2003 +System Vendor: Hewlett-Packard +Product Name: HP Notebook PC +Version: HP Notebook PC +Board Vendor: +Board Name: +Board Version: + +--------------------------------------------- +HP Compaq nx9005 ---------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KAM1.46 +BIOS Release: 07/21/200392 +System Vendor: Hewlett-Packard +Product Name: HP nx9005 (DJ163A) +Version: KAM1.46 +Board Vendor: Hewlett-Packard +Board Name: 0024 +Board Version: PQ1A78 + +---------------------------------------------- +HP Compaq nx9010 ----------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KF_KH.F.08 +BIOS Release: 06/06/2003 +System Vendor: Hewlett-Packard +Product Name: HP nx9010 (DJ123A) +Version: KH.F.08 +Board Vendor: Hewlett-Packard +Board Name: 0850 +Board Version: NS570 Version PQ1B56 + +---------------------------------------------- +HP Pavilion ze8500 -------------------------- + +BIOS Vendor: Phoenix Technologies Ltd. +BIOS Version: KF_KH.F.18 +BIOS Release: 11/13/2003 +System Vendor: Hewlett-Packard +Product Name: Pavilion ze8500 (DJ317A) +Version: KH.F.18 +Board Vendor: Hewlett-Packard +Board Name: 0850 +Board Version: NS570 Version PQ1B60 + +--------------------------------------------- +Fujitsu-Siemens Amilo D --------------------- + +BIOS Vendor: Phoenix +BIOS Version: V1.20 +BIOS Release: 11/14/2001 +System Vendor: FUJITSU SIEMENS +Product Name: Amilo D-Series +Version: DESKTOP CPU ONLY +Board Vendor: CY23 +Board Name: 8606-686B +Board Version: None + +--------------------------------------------- --- linux-2.6.32.orig/ubuntu/omnibook/misc/README.mmkeys +++ linux-2.6.32/ubuntu/omnibook/misc/README.mmkeys @@ -0,0 +1,9 @@ +This patch maps some extra Fn+key combinations to keycodes for multimedia +keyboards and only works for the nbsmi-backend. It might be useful if you +want to control some mediaplayer while working with other applications. + +Following combinations are mapped: +Fn+Y => Previous song +Fn+X => Play/pause +Fn+V => Stop CD +Fn+B => Next song \ No newline at end of file --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/nx9xxx.def +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/nx9xxx.def @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + Sound muted + + + + + Soos, Peter + sp@osb.hu + + --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/xt155.def +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/xt155.def @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + Soos, Peter + sp@osb.hu + + --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/xe4xxx.def +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/xe4xxx.def @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + Sound muted + + + + + Soos, Peter + sp@osb.hu + + --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/xe3gc.def +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/xe3gc.def @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + Sound muted + + + + + Soos, Peter + sp@osb.hu + + --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/ob5xx.def +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/ob5xx.def @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + Soos, Peter + sp@osb.hu + + --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/xe3gf.def +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/xe3gf.def @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + Sound muted + + + + + Soos, Peter + sp@osb.hu + + --- linux-2.6.32.orig/ubuntu/omnibook/misc/hotkeys/README.hotkeys +++ linux-2.6.32/ubuntu/omnibook/misc/hotkeys/README.hotkeys @@ -0,0 +1,22 @@ +HotKeys is a program to use the special keys on internet/multimedia +keyboards. + +The HotKeys daemon listens for the "special" hotkeys that you won't +normally use on your Internet/Multimedia keyboards. The buttons +perform their intended behaviors, such as volume up and down, mute the +speaker, or launch applications. It has On-screen display (OSD) to +show the volume, program that's being started, etc. It features an +XML-based keycode configuration file format, which makes it possible +to define the hotkeys to launch any programs you want. + +You may reach it at http://ypwong.org/hotkeys/ + +Files in this directory provide examles for hotkeys definition files +for certain laptop models supported by omnibook module: + +ob5xx.def: HP OmniBook 5xx +xe3gc.def: HP OmniBook XE3 GC, GD, GE and HP Pavilion N5xxx +xe3gf.def: HP OmniBook XE3 GF +xe4xxx.def: HP OmniBook xe4xxx and ze4xxx +xt155.def: HP OmniBook xt155 +nx9xxx.def: HP/Compaq nx9xxx --- linux-2.6.32.orig/ubuntu/fsam7400/Kconfig +++ linux-2.6.32/ubuntu/fsam7400/Kconfig @@ -0,0 +1,5 @@ +config FSAM7400 + tristate "SW RF kill switch for Fujitsu Siemens Amilo M 7400" + depends on CHECK_SIGNATURE + default m + ---help--- --- linux-2.6.32.orig/ubuntu/fsam7400/FILES +++ linux-2.6.32/ubuntu/fsam7400/FILES @@ -0,0 +1,6 @@ +CHANGELOG Recently changes logged +FILES This file +fsam7400.c The source code, what else... :) +INSTALL Installation instructions +Makefile Makefile to build, install, uninstall the module +README don't forget to read it --- linux-2.6.32.orig/ubuntu/fsam7400/INSTALL +++ linux-2.6.32/ubuntu/fsam7400/INSTALL @@ -0,0 +1,110 @@ +SW RF kill switch for Fujitsu Siemens Amilo M 7400 +Copyright (C) 2006, zwobbl +For additional information, contact Marcel Naziri + +COMPILER REQUIREMENTS +--------- ------ ---- --- -- -- - - + +You need to be using GCC v3.0 or higher in order to build the fsam7400 module. +Using older versions will result in several compilation errors. + + +INSTALLING THE BITS +------------ ----- ----- ---- --- -- - + +# Unpack the source tarball + +% tar xvzf fsam7400-0.x.y.tgz +% cd fsam7400-0.x.y + +Make sure to be root when performing the following operations. Also you must +have a kernel source tree installed under /usr/src/linux + +# Build the kernel module + +% make + +Debug output is enabled by default. This is a good idea if you use the fsam module for +the first time, so you get some nice information printed on kernel log. If you don't +need the messages anymore, you have to comment out the line CONFIG_IPW2100_DEBUG=y in +the Makefile. + +# Install the kernel module + +% make install + +Now you are ready for... + + +LOADING THE DRIVER +------------ ----- ----- ---- --- -- - + +Also easy to go... :) + +% modprobe fsam7400 + +If you have set "wireless device" enabled in your "Advanced" bios settings of +your Amilo M 7400 radio should be turned on at this point. So you're done! +Watch out your kernel log if supported hardware was found. :) + + +RADIO STATE AT LOADING + +You can override the wireless bios setting with + +% modprobe fsam7400 radio=[0|1] + + +PROC FILESYSTEM + +If your hardware is supported by the driver you will get an entry in /proc +called driver/wireless/radio which will give you state information by typing + +% cat /proc/driver/wireless/radio + +You can turn the radio on and off at your will with + +% echo [1|on] > /proc/driver/wireless/radio +% echo [0|off] > /proc/driver/wireless/radio + +The module also recognizes parameters to set the user- and/or group-ID to +something other than root, so you don't have to adjust it by hand. +Just select your favourite IDs and type + +% modprobe fsam7400 uid=1000 gid=500 + +Note, that /proc/driver/wireless/radio will only be read- and writeable by +user & group and only readable by others. + +If you want to see debug output on syslog use the following parameter when +loading the module + +% modprobe fsam7400 debug=1 + + +AUTOMATION FEATURES + +By default the driver will turn off the radio automatically short before the +module is unloaded. To override this behaviour load the module adding the +following parameter + +% modprobe fsam7400 autooff=0 + +Also since 0.4.0 the driver can automatically modprobe the ipw2100 module when +radio state changes to on and rmmods it when radio is turned off by fsam7400. +To enable autoload support, use + +% modprobe fsam7400 autoload=1 + + +HIBERNATION SUPPORT + +After hibernation and boot up of the system the wireless radio might be disabled +again. To revert to the radio state before hibernation just put the following +in the wakeup script + +% echo resume > /proc/driver/wireless/radio + + + +That's all for now. Have fun with the driver! --- linux-2.6.32.orig/ubuntu/fsam7400/BOM +++ linux-2.6.32/ubuntu/fsam7400/BOM @@ -0,0 +1,2 @@ +Downloaded from: http://www.iragan.com/linux/fsam7400/ +Current Version: 0.5.2 (2008 Nov 22) --- linux-2.6.32.orig/ubuntu/fsam7400/CHANGELOG +++ linux-2.6.32/ubuntu/fsam7400/CHANGELOG @@ -0,0 +1,34 @@ +Nov 22 2008 Changes in 0.5.2 by legolas558 +* fixed some missing include files + +Sep 22 2006 Changes in 0.5.1 +* Fix: possible null pointer dereference in proc code +* Fix: module exit code was mistakenly disabled + +Sep 22 2006 Changes in 0.5.0 +* fixed compilation problems with kernel 2.6.18 +* debug-output enabling via module parameter +* hibernation support: reconstruct last radio state on resume +* disabled autoload option by default + +Jul 16 2006 Changes in 0.4.1 +* new Makefile fixing problems with kernel 2.6.17 +* several bug fixes and compiler cleanups + +Aug 20 2004 Changes in 0.4.0 +* several bug fixes and compiler cleanups +* UID/GID for procfs entry selectable via module parameter +* Autoload support: fsam7400 modprobes and rmmods ipw2100 automatically + depending on radio state + +Apr 15 2004 Changes in 0.3.0 +* Fix: radio state was not displayed properly +* some proc improvements +* finished code for alternative routine address calculation +* debug-output selectable at compile-time with CONFIG_IPW2100_DEBUG define + for smaller module size if no debug is needed ;) + +Apr 9 2004 Changes in 0.2.1 +* Initial release +* Determines if wireless device is enabled by default Bios-settings +* Auto-off functionality --- linux-2.6.32.orig/ubuntu/fsam7400/LICENSE +++ linux-2.6.32/ubuntu/fsam7400/LICENSE @@ -0,0 +1,338 @@ +"This software program is licensed subject to the GNU General Public License +(GPL). Version 2, June 1991, available at +" + +GNU General Public License + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public License is intended +to guarantee your freedom to share and change free software--to make sure +the software is free for all its users. This General Public License applies +to most of the Free Software Foundation's software and to any other program +whose authors commit to using it. (Some other Free Software Foundation +software is covered by the GNU Library General Public License instead.) You +can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish), that you receive source code or can get it if you want it, that you +can change the software or use pieces of it in new free programs; and that +you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And you +must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If +the software is modified by someone else and passed on, we want its +recipients to know that what they have is not the original, so that any +problems introduced by others will not reflect on the original authors' +reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent must be +licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice + placed by the copyright holder saying it may be distributed under the + terms of this General Public License. The "Program", below, refers to any + such program or work, and a "work based on the Program" means either the + Program or any derivative work under copyright law: that is to say, a + work containing the Program or a portion of it, either verbatim or with + modifications and/or translated into another language. (Hereinafter, + translation is included without limitation in the term "modification".) + Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is covered + only if its contents constitute a work based on the Program (independent + of having been made by running the Program). Whether that is true depends + on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code + as you receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice and + disclaimer of warranty; keep intact all the notices that refer to this + License and to the absence of any warranty; and give any other recipients + of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and you + may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, + thus forming a work based on the Program, and copy and distribute such + modifications or work under the terms of Section 1 above, provided that + you also meet all of these conditions: + + * a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + + * b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + * c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive + use in the most ordinary way, to print or display an announcement + including an appropriate copyright notice and a notice that there is + no warranty (or else, saying that you provide a warranty) and that + users may redistribute the program under these conditions, and + telling the user how to view a copy of this License. (Exception: if + the Program itself is interactive but does not normally print such + an announcement, your work based on the Program is not required to + print an announcement.) + + These requirements apply to the modified work as a whole. If identifiable + sections of that work are not derived from the Program, and can be + reasonably considered independent and separate works in themselves, then + this License, and its terms, do not apply to those sections when you + distribute them as separate works. But when you distribute the same + sections as part of a whole which is a work based on the Program, the + distribution of the whole must be on the terms of this License, whose + permissions for other licensees extend to the entire whole, and thus to + each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under + Section 2) in object code or executable form under the terms of Sections + 1 and 2 above provided that you also do one of the following: + + * a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 + above on a medium customarily used for software interchange; or, + + * b) Accompany it with a written offer, valid for at least three years, + to give any third party, for a charge no more than your cost of + physically performing source distribution, a complete machine- + readable copy of the corresponding source code, to be distributed + under the terms of Sections 1 and 2 above on a medium customarily + used for software interchange; or, + + * c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on which + the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as + expressly provided under this License. Any attempt otherwise to copy, + modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will not + have their licenses terminated so long as such parties remain in full + compliance. + +5. You are not required to accept this License, since you have not signed + it. However, nothing else grants you permission to modify or distribute + the Program or its derivative works. These actions are prohibited by law + if you do not accept this License. Therefore, by modifying or + distributing the Program (or any work based on the Program), you + indicate your acceptance of this License to do so, and all its terms and + conditions for copying, distributing or modifying the Program or works + based on it. + +6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under any + particular circumstance, the balance of the section is intended to apply + and the section as a whole is intended to apply in other circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous contributions + to the wide range of software distributed through that system in + reliance on consistent application of that system; it is up to the + author/donor to decide if he or she is willing to distribute software + through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain + countries either by patents or by copyrighted interfaces, the original + copyright holder who places the Program under this License may add an + explicit geographical distribution limitation excluding those countries, + so that distribution is permitted only in or among countries not thus + excluded. In such case, this License incorporates the limitation as if + written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of + the General Public License from time to time. Such new versions will be + similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs + whose distribution conditions are different, write to the author to ask + for permission. For software which is copyrighted by the Free Software + Foundation, write to the Free Software Foundation; we sometimes make + exceptions for this. Our decision will be guided by the two goals of + preserving the free status of all derivatives of our free software and + of promoting the sharing and reuse of software generally. + + NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN + OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES + PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER + EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR + REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it free +software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey the +exclusion of warranty; and each file should have at least the "copyright" +line and a pointer to where the full notice is found. + +one line to give the program's name and an idea of what it does. +Copyright (C) yyyy name of author + +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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when +it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author Gnomovision comes +with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free +software, and you are welcome to redistribute it under certain conditions; +type 'show c' for details. + +The hypothetical commands 'show w' and 'show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than 'show w' and 'show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program +'Gnomovision' (which makes passes at compilers) written by James Hacker. + +signature of Ty Coon, 1 April 1989 +Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General Public +License instead of this License. --- linux-2.6.32.orig/ubuntu/fsam7400/Makefile +++ linux-2.6.32/ubuntu/fsam7400/Makefile @@ -0,0 +1,2 @@ + +obj-$(CONFIG_FSAM7400) += fsam7400.o --- linux-2.6.32.orig/ubuntu/fsam7400/README +++ linux-2.6.32/ubuntu/fsam7400/README @@ -0,0 +1,60 @@ +SW RF kill switch for Fujitsu Siemens Amilo M 7400 / Maxdata 7000DX +and compatible hardware. + +Please be sure that CONFIG_CHECK_SIGNATURE=y in your kernel configuration! +Otherwise this module will not compile. + +Nov 22, 2008 - Release 0.5.2 + +This package, with minor modifications from zwobbl's 0.5.1, was created +by legolas558. + +More information at: +http://legolas558.iragan.com/fsam7400 + +Sep 24, 2006 - Release 0.5.1 +------------ ----- ----- ---- --- -- - + +* Fix: possible null pointer dereference in proc code + +* Fix: module exit code was mistakenly disabled + + +for prior changes see CHANGELOG + + +TODO +------------ ----- ----- ---- --- -- - + +* Fix bugs (if there are any ;)) + + +------------ ----- ----- ---- --- -- - + +Have a look in INSTALL for further details to get things working! + + +License +------------ ----- ----- ---- --- -- - + + Copyright(c) 2006 zwobbl. All rights reserved. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., 59 + Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Contact Information: + Marcel Naziri --- linux-2.6.32.orig/ubuntu/fsam7400/fsam7400.c +++ linux-2.6.32/ubuntu/fsam7400/fsam7400.c @@ -0,0 +1,386 @@ +/******************************************************************************* + + 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. + + The full GNU General Public License is included in this distribution in the + file called LICENSE. + + Author: + Marcel Naziri + + Based on: + pbe5.c by Pedro Ramalhais + + Many thanks to: + Pedro Ramalhais for spending several nights with me on IRC + +*******************************************************************************/ + +#ifdef CONFIG_X86 +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#include +#else +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRV_NAME "fsam7400" +#define DRV_VERSION "0.5.2" +#define DRV_DESCRIPTION "SW RF kill switch for Fujitsu Siemens Amilo M 7400 / Maxdata 7000DX" +#define DRV_COPYRIGHT "Copyright(c) 2004 zwobbl" +#define DRV_AUTHOR "Marcel Naziri" +#define DRV_LICENSE "GPL" + +MODULE_DESCRIPTION(DRV_DESCRIPTION); +MODULE_AUTHOR(DRV_AUTHOR); +MODULE_LICENSE(DRV_LICENSE); + +#define RADIO_NONE 0xFFFFFFFF +#define RADIO_OFF 0x00000000 +#define RADIO_ON 0x00000010 + +static int radio = RADIO_NONE; +static int autooff = 1; +static int autoload = 0; +static int uid = 0; +static int gid = 0; +static int debug = 0; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +module_param(radio, int, 0444); +module_param(autooff, int, 0444); +module_param(autoload, int, 0444); +module_param(uid, int, 0444); +module_param(gid, int, 0444); +module_param(debug, int, 0444); +#else +MODULE_PARM(radio, "i"); +MODULE_PARM(autooff, "i"); +MODULE_PARM(autoload, "i"); +MODULE_PARM(uid, "i"); +MODULE_PARM(gid, "i"); +MODULE_PARM(debug, "i"); +#endif + +MODULE_PARM_DESC(radio, "desired radio state when loading module"); +MODULE_PARM_DESC(autooff, "turns radio off when unloading module (default)"); +MODULE_PARM_DESC(autoload, "load/unloads ipw2100 driver when toggling radio"); +MODULE_PARM_DESC(uid, "user ID for proc entry"); +MODULE_PARM_DESC(gid, "group ID for proc entry"); +MODULE_PARM_DESC(debug, "enables debug output on syslog"); + +/* some more or less useful macros */ + +#define DEBUG if (debug) +#define DEBUG_OUT0(a) DEBUG printk(KERN_INFO DRV_NAME ": " a) +#define DEBUG_OUT1(a,b) DEBUG printk(KERN_INFO DRV_NAME ": " a,b) +#define DEBUG_OUT2(a,b,c) DEBUG printk(KERN_INFO DRV_NAME ": " a,b,c) +#define DEBUG_OUT3(a,b,c,d) DEBUG printk(KERN_INFO DRV_NAME ": " a,b,c,d) + +#define ONOFF(x) (x) ? "ON" : "OFF" +#define RADIO_ONOFF(x) (x) == RADIO_ON ? "ON" : "OFF" +#define TOUL(x) (unsigned long) (x) + +/* + * NOTE: These values were obtained from disassembling the wbutton.sys driver + * installed in the Fujitsu Siemens Amilo M 7400 laptop. The names were guessed, + * so don't rely on them. + */ + +/*** hardware dependant stuff ***/ + +#define BIOS_CODE_ADDR 0x000F0000 +#define BIOS_CODE_ALT_MASK 0xFFFFC000 + +#define BIOS_CODE_MAPSIZE 0x010000 +#define BIOS_CODE_ALT_MAPSIZE 0x004000 + +#define BIOS_MAGIC_COMMAND 0x9610 +#define BIOS_MAGIC_OFF 0x0035 +#define BIOS_MAGIC_ON 0x0135 +#define BIOS_MAGIC_CHECK 0x0235 + +#define PTR_POSITION 5 +#define ALLIGNED_STEP 0x10 + +#define BIOS_SIGN_SIZE 4 +static const char bios_sign[] = { + 0x42, 0x21, 0x55, 0x30 +}; + +#define WLAN_DISABLED_IN_BIOS 0x01 +#define WLAN_ENABLED_IN_BIOS 0x03 + +static unsigned long bios_code = 0; + +static int fsam_bios_routine(int eax, int ebx) +{ + __asm__ __volatile__( + "call *%3 \t\n" + : "=a"(eax) + : "a"(eax), "b"(ebx), "c"(bios_code) + ); + return (eax & 0xFF); +} + +static int fsam_call_bios(int value) +{ + if (bios_code) { + int command = BIOS_MAGIC_COMMAND; + DEBUG_OUT2("bios routine gets parameter eax=%X and ebx=%X\n", + command, value); + value = fsam_bios_routine(command, value); + DEBUG_OUT1("bios routine results %X\n", value); + return value; + } + return ~0; +} + +/* pointer to mapped memory*/ +static void *mem_code = NULL; + +static inline void fsam_unmap_memory(void) +{ + bios_code = 0; + if (mem_code) { + iounmap(mem_code); + } +} + +static inline int fsam_map_memory(void) +{ + const unsigned long max_offset = BIOS_CODE_MAPSIZE - BIOS_SIGN_SIZE - PTR_POSITION; + unsigned long offset; + unsigned int addr; + mem_code = ioremap(BIOS_CODE_ADDR, BIOS_CODE_MAPSIZE); + if (!mem_code) + goto fail; + DEBUG_OUT3("physical memory %x-%x mapped to virtual address %p\n", + BIOS_CODE_ADDR, BIOS_CODE_ADDR+BIOS_CODE_MAPSIZE, mem_code); + for ( offset = 0; offset < max_offset; offset += ALLIGNED_STEP ) + if (check_signature((void*)TOUL(mem_code) + offset, bios_sign, BIOS_SIGN_SIZE)) + break; + if (offset >= max_offset) + goto fail; + DEBUG_OUT1("bios signature found at offset %lx\n", offset); + addr = readl((void*)TOUL(mem_code) + offset + PTR_POSITION); + if (addr < BIOS_CODE_ADDR) { + DEBUG_OUT0("bios routine out of memory range, " + "doing some new memory mapping...\n"); + iounmap(mem_code); + mem_code = NULL; + addr &= BIOS_CODE_ALT_MASK; + mem_code = ioremap(addr, BIOS_CODE_ALT_MAPSIZE); + if (!mem_code) + goto fail; + DEBUG_OUT3("physical memory %x-%x mapped to virtual address %p\n", + addr, addr+BIOS_CODE_ALT_MAPSIZE, mem_code); + addr &= 0x3FFF; + } else + addr &= 0xFFFF; + + bios_code = addr + TOUL(mem_code); + DEBUG_OUT1("supposed address of bios routine is %lx\n", bios_code); + return 1; + fail: + fsam_unmap_memory(); + return 0; +} + +/*** ipw2100 loading ***/ + +static inline void do_ipw2100_loading(int state) +{ + int status; + char *mode; + char *envp[] = { "HOME=/", + "TERM=linux", + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; + if (state == RADIO_ON) { + char *argv[] = { "/sbin/modprobe", "-s", "-k", "ipw2100", NULL }; + mode = "loading"; + status = call_usermodehelper(argv[0], argv, envp, 1); + } else { + char *argv[] = { "/sbin/rmmod", "ipw2100", NULL }; + mode = "removing"; + status = call_usermodehelper(argv[0], argv, envp, 1); + } + DEBUG_OUT2("%s of ipw2100 module %s\n", mode, status == 0 ? "successful" : "FAILED"); +} + +/*** interface stuff ***/ + +static void rfkill_set_radio(int value) +{ + radio = value == RADIO_ON ? fsam_call_bios(BIOS_MAGIC_ON) : + fsam_call_bios(BIOS_MAGIC_OFF); + if (autoload) do_ipw2100_loading(radio); +} + +static inline int rfkill_get_radio(void) +{ + return radio; +} + +static inline int rfkill_supported(void) +{ + return bios_code != 0; +} + +static inline void rfkill_initialize(void) { + fsam_map_memory(); + if (rfkill_supported()) { + radio = radio != RADIO_NONE + ? ( radio ? RADIO_ON : RADIO_OFF ) /*module parameter*/ + : ( fsam_call_bios(BIOS_MAGIC_CHECK) == WLAN_ENABLED_IN_BIOS + ? RADIO_ON : RADIO_OFF ); + } +} + +static inline void rfkill_uninitialize(void) { + fsam_unmap_memory(); +} + +/*** proc stuff ***/ + +static inline int common_proc_set_radio(struct file *file, const char *buffer, + unsigned long count, void *data) +{ + unsigned long len = 7; + char newstate[len]; + len = count < len ? count : len; + if ( copy_from_user(newstate, buffer, len) != 0 ) + return -EFAULT; + if ( (*newstate == '1' || *newstate == '0') && + (count == 1 || isspace(newstate[1])) ) + rfkill_set_radio(*newstate == '1' ? RADIO_ON : RADIO_OFF); + else + if ( !strncmp(newstate, "on", 2) && + (count == 2 || isspace(newstate[2])) ) + rfkill_set_radio(RADIO_ON); + else + if ( !strncmp(newstate, "off", 3) && + (count == 3 || isspace(newstate[3])) ) + rfkill_set_radio(RADIO_OFF); + else + if ( !strncmp(newstate, "resume", 6) && + (count == 6 || isspace(newstate[6])) ) + rfkill_set_radio(radio); + return count; +} + +static inline int common_proc_get_radio(char *page, char **start, off_t offset, + int count, int *eof, void *data) +{ + int len = snprintf(page, count, DRV_DESCRIPTION ", v" DRV_VERSION "\n" + " auto-off is %s, auto-load is %s\n", + ONOFF(autooff), ONOFF(autoload)); + len += snprintf(page+len, count-len, " radio state is %s\n", + RADIO_ONOFF(rfkill_get_radio())); + *eof = 1; + return len; +} + +#define PROC_DIR "driver/wireless" +#define PROC_RADIO "radio" + +static struct proc_dir_entry *dir_base = NULL; + +static inline void common_proc_cleanup(void) +{ + if (dir_base) { + remove_proc_entry(PROC_RADIO, dir_base); + remove_proc_entry(PROC_DIR, NULL); + dir_base = NULL; + } +} + +static inline int common_proc_init(void) +{ + struct proc_dir_entry *ent; + int err = 0; + dir_base = proc_mkdir(PROC_DIR, NULL); + if (dir_base == NULL) { + printk(KERN_ERR DRV_NAME ": Unable to initialize /proc/" PROC_DIR "\n"); + err = -ENOMEM; + goto fail; + } + ent = create_proc_entry(PROC_RADIO, + S_IFREG | S_IRUGO | S_IWUSR | S_IWGRP, + dir_base); + if (ent) { + ent->uid = uid; + ent->gid = gid; + ent->read_proc = common_proc_get_radio; + ent->write_proc = common_proc_set_radio; + } else { + printk(KERN_ERR DRV_NAME ": Unable to initialize /proc/" + PROC_DIR "/" PROC_RADIO "\n"); + err = -ENOMEM; + goto fail; + } + return 0; + fail: + common_proc_cleanup(); + return err; +} + +/*** module stuff ***/ + +static int __init common_init(void) +{ + printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION ", v" DRV_VERSION "\n"); + printk(KERN_INFO DRV_NAME ": " DRV_COPYRIGHT "\n"); + rfkill_initialize(); + if (rfkill_supported()) { + common_proc_init(); + if (radio != RADIO_NONE) + rfkill_set_radio(radio); + } else + printk(KERN_INFO DRV_NAME ": no supported wireless hardware found\n"); + return 0; +} + +static void __exit common_exit(void) +{ + if (rfkill_supported() && autooff) + rfkill_set_radio(RADIO_OFF); + common_proc_cleanup(); + rfkill_uninitialize(); + printk(KERN_INFO DRV_NAME ": module removed successfully\n"); +} + +module_init(common_init); +module_exit(common_exit); + +#else +#error This driver is only available for X86 architecture +#endif + +/* + 1 2 3 4 5 6 7 +12345678901234567890123456789012345678901234567890123456789012345678901234567890 +*/ --- linux-2.6.32.orig/net/bridge/netfilter/ebtables.c +++ linux-2.6.32/net/bridge/netfilter/ebtables.c @@ -1406,6 +1406,9 @@ { int ret; + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + switch(cmd) { case EBT_SO_SET_ENTRIES: ret = do_replace(sock_net(sk), user, len); @@ -1425,6 +1428,9 @@ struct ebt_replace tmp; struct ebt_table *t; + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + if (copy_from_user(&tmp, user, sizeof(tmp))) return -EFAULT; --- linux-2.6.32.orig/net/packet/af_packet.c +++ linux-2.6.32/net/packet/af_packet.c @@ -1028,8 +1028,20 @@ status = TP_STATUS_SEND_REQUEST; err = dev_queue_xmit(skb); - if (unlikely(err > 0 && (err = net_xmit_errno(err)) != 0)) - goto out_xmit; + if (unlikely(err > 0)) { + err = net_xmit_errno(err); + if (err && __packet_get_status(po, ph) == + TP_STATUS_AVAILABLE) { + /* skb was destructed already */ + skb = NULL; + goto out_status; + } + /* + * skb was dropped but not destructed yet; + * let's treat it like congestion or err < 0 + */ + err = 0; + } packet_increment_head(&po->tx_ring); len_sum += tp_len; } while (likely((ph != NULL) || ((!(msg->msg_flags & MSG_DONTWAIT)) @@ -1039,9 +1051,6 @@ err = len_sum; goto out_put; -out_xmit: - skb->destructor = sock_wfree; - atomic_dec(&po->tx_ring.pending); out_status: __packet_set_status(po, ph, status); kfree_skb(skb); --- linux-2.6.32.orig/net/wireless/reg.c +++ linux-2.6.32/net/wireless/reg.c @@ -1714,7 +1714,7 @@ request->wiphy_idx = WIPHY_IDX_STALE; request->alpha2[0] = alpha2[0]; request->alpha2[1] = alpha2[1]; - request->initiator = NL80211_REGDOM_SET_BY_USER, + request->initiator = NL80211_REGDOM_SET_BY_USER; queue_regulatory_request(request); --- linux-2.6.32.orig/net/wireless/sme.c +++ linux-2.6.32/net/wireless/sme.c @@ -655,6 +655,7 @@ memset(&wrqu, 0, sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL); + wdev->wext.connect.ssid_len = 0; #endif } --- linux-2.6.32.orig/net/wireless/mlme.c +++ linux-2.6.32/net/wireless/mlme.c @@ -94,7 +94,18 @@ } } - WARN_ON(!bss); + /* + * We might be coming here because the driver reported + * a successful association at the same time as the + * user requested a deauth. In that case, we will have + * removed the BSS from the auth_bsses list due to the + * deauth request when the assoc response makes it. If + * the two code paths acquire the lock the other way + * around, that's just the standard situation of a + * deauth being requested while connected. + */ + if (!bss) + goto out; } else if (wdev->conn) { cfg80211_sme_failed_assoc(wdev); need_connect_result = false; --- linux-2.6.32.orig/net/rose/rose_route.c +++ linux-2.6.32/net/rose/rose_route.c @@ -234,6 +234,8 @@ if ((s = rose_neigh_list) == rose_neigh) { rose_neigh_list = rose_neigh->next; + if (rose_neigh->ax25) + ax25_cb_put(rose_neigh->ax25); kfree(rose_neigh->digipeat); kfree(rose_neigh); return; @@ -242,6 +244,8 @@ while (s != NULL && s->next != NULL) { if (s->next == rose_neigh) { s->next = rose_neigh->next; + if (rose_neigh->ax25) + ax25_cb_put(rose_neigh->ax25); kfree(rose_neigh->digipeat); kfree(rose_neigh); return; @@ -810,6 +814,7 @@ if (rose_neigh != NULL) { rose_neigh->ax25 = NULL; + ax25_cb_put(ax25); rose_del_route_by_neigh(rose_neigh); rose_kill_by_neigh(rose_neigh); --- linux-2.6.32.orig/net/rose/rose_link.c +++ linux-2.6.32/net/rose/rose_link.c @@ -101,13 +101,17 @@ static int rose_send_frame(struct sk_buff *skb, struct rose_neigh *neigh) { ax25_address *rose_call; + ax25_cb *ax25s; if (ax25cmp(&rose_callsign, &null_ax25_address) == 0) rose_call = (ax25_address *)neigh->dev->dev_addr; else rose_call = &rose_callsign; + ax25s = neigh->ax25; neigh->ax25 = ax25_send_frame(skb, 260, rose_call, &neigh->callsign, neigh->digipeat, neigh->dev); + if (ax25s) + ax25_cb_put(ax25s); return (neigh->ax25 != NULL); } @@ -120,13 +124,17 @@ static int rose_link_up(struct rose_neigh *neigh) { ax25_address *rose_call; + ax25_cb *ax25s; if (ax25cmp(&rose_callsign, &null_ax25_address) == 0) rose_call = (ax25_address *)neigh->dev->dev_addr; else rose_call = &rose_callsign; + ax25s = neigh->ax25; neigh->ax25 = ax25_find_cb(rose_call, &neigh->callsign, neigh->digipeat, neigh->dev); + if (ax25s) + ax25_cb_put(ax25s); return (neigh->ax25 != NULL); } --- linux-2.6.32.orig/net/sctp/sm_make_chunk.c +++ linux-2.6.32/net/sctp/sm_make_chunk.c @@ -107,7 +107,7 @@ cpu_to_be16(sizeof(struct sctp_paramhdr)), }; -/* A helper to initialize to initialize an op error inside a +/* A helper to initialize an op error inside a * provided chunk, as most cause codes will be embedded inside an * abort chunk. */ @@ -124,6 +124,29 @@ chunk->subh.err_hdr = sctp_addto_chunk(chunk, sizeof(sctp_errhdr_t), &err); } +/* A helper to initialize an op error inside a + * provided chunk, as most cause codes will be embedded inside an + * abort chunk. Differs from sctp_init_cause in that it won't oops + * if there isn't enough space in the op error chunk + */ +int sctp_init_cause_fixed(struct sctp_chunk *chunk, __be16 cause_code, + size_t paylen) +{ + sctp_errhdr_t err; + __u16 len; + + /* Cause code constants are now defined in network order. */ + err.cause = cause_code; + len = sizeof(sctp_errhdr_t) + paylen; + err.length = htons(len); + + if (skb_tailroom(chunk->skb) < len) + return -ENOSPC; + chunk->subh.err_hdr = sctp_addto_chunk_fixed(chunk, + sizeof(sctp_errhdr_t), + &err); + return 0; +} /* 3.3.2 Initiation (INIT) (1) * * This chunk is used to initiate a SCTP association between two @@ -1125,6 +1148,24 @@ return retval; } +/* Create an Operation Error chunk of a fixed size, + * specifically, max(asoc->pathmtu, SCTP_DEFAULT_MAXSEGMENT) + * This is a helper function to allocate an error chunk for + * for those invalid parameter codes in which we may not want + * to report all the errors, if the incomming chunk is large + */ +static inline struct sctp_chunk *sctp_make_op_error_fixed( + const struct sctp_association *asoc, + const struct sctp_chunk *chunk) +{ + size_t size = asoc ? asoc->pathmtu : 0; + + if (!size) + size = SCTP_DEFAULT_MAXSEGMENT; + + return sctp_make_op_error_space(asoc, chunk, size); +} + /* Create an Operation Error chunk. */ struct sctp_chunk *sctp_make_op_error(const struct sctp_association *asoc, const struct sctp_chunk *chunk, @@ -1365,6 +1406,18 @@ return target; } +/* Append bytes to the end of a chunk. Returns NULL if there isn't sufficient + * space in the chunk + */ +void *sctp_addto_chunk_fixed(struct sctp_chunk *chunk, + int len, const void *data) +{ + if (skb_tailroom(chunk->skb) >= len) + return sctp_addto_chunk(chunk, len, data); + else + return NULL; +} + /* Append bytes from user space to the end of a chunk. Will panic if * chunk is not big enough. * Returns a kernel err value. @@ -1968,13 +2021,12 @@ * returning multiple unknown parameters. */ if (NULL == *errp) - *errp = sctp_make_op_error_space(asoc, chunk, - ntohs(chunk->chunk_hdr->length)); + *errp = sctp_make_op_error_fixed(asoc, chunk); if (*errp) { - sctp_init_cause(*errp, SCTP_ERROR_UNKNOWN_PARAM, + sctp_init_cause_fixed(*errp, SCTP_ERROR_UNKNOWN_PARAM, WORD_ROUND(ntohs(param.p->length))); - sctp_addto_chunk(*errp, + sctp_addto_chunk_fixed(*errp, WORD_ROUND(ntohs(param.p->length)), param.v); } else { --- linux-2.6.32.orig/net/mac80211/rx.c +++ linux-2.6.32/net/mac80211/rx.c @@ -1514,7 +1514,6 @@ mpp_path_add(mesh_hdr->eaddr2, hdr->addr4, sdata); } else { spin_lock_bh(&mppath->state_lock); - mppath->exp_time = jiffies; if (compare_ether_addr(mppath->mpp, hdr->addr4) != 0) memcpy(mppath->mpp, hdr->addr4, ETH_ALEN); spin_unlock_bh(&mppath->state_lock); @@ -1549,7 +1548,9 @@ memset(info, 0, sizeof(*info)); info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; info->control.vif = &rx->sdata->vif; - ieee80211_select_queue(local, fwd_skb); + skb_set_queue_mapping(skb, + ieee80211_select_queue(rx->sdata, fwd_skb)); + ieee80211_set_qos_hdr(local, skb); if (is_multicast_ether_addr(fwd_hdr->addr1)) IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh, fwded_mcast); @@ -1589,6 +1590,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx) { struct net_device *dev = rx->dev; + struct ieee80211_local *local = rx->local; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; __le16 fc = hdr->frame_control; int err; @@ -1611,6 +1613,13 @@ dev->stats.rx_packets++; dev->stats.rx_bytes += rx->skb->len; + if (ieee80211_is_data(hdr->frame_control) && + !is_multicast_ether_addr(hdr->addr1) && + local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) { + mod_timer(&local->dynamic_ps_timer, jiffies + + msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout)); + } + ieee80211_deliver_skb(rx); return RX_QUEUED; @@ -1809,6 +1818,10 @@ } break; default: + /* do not process rejected action frames */ + if (mgmt->u.action.category & 0x80) + return RX_DROP_MONITOR; + return RX_CONTINUE; } --- linux-2.6.32.orig/net/mac80211/tx.c +++ linux-2.6.32/net/mac80211/tx.c @@ -1401,6 +1401,7 @@ if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) && local->hw.conf.dynamic_ps_timeout > 0 && + !local->quiescing && !(local->scanning) && local->ps_sdata) { if (local->hw.conf.flags & IEEE80211_CONF_PS) { ieee80211_stop_queues_by_reason(&local->hw, @@ -1481,7 +1482,7 @@ return; } - ieee80211_select_queue(local, skb); + ieee80211_set_qos_hdr(local, skb); ieee80211_tx(sdata, skb, false); dev_put(sdata->dev); } @@ -1880,6 +1881,7 @@ void ieee80211_tx_pending(unsigned long data) { struct ieee80211_local *local = (struct ieee80211_local *)data; + struct ieee80211_sub_if_data *sdata; unsigned long flags; int i; bool txok; @@ -1920,6 +1922,11 @@ if (!txok) break; } + + if (skb_queue_empty(&local->pending[i])) + list_for_each_entry_rcu(sdata, &local->interfaces, list) + netif_tx_wake_queue( + netdev_get_tx_queue(sdata->dev, i)); } spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); @@ -2225,6 +2232,9 @@ if (!encrypt) info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; + /* send all internal mgmt frames on VO */ + skb_set_queue_mapping(skb, 0); + /* * The other path calling ieee80211_xmit is from the tasklet, * and while we can handle concurrent transmissions locking --- linux-2.6.32.orig/net/mac80211/mesh_hwmp.c +++ linux-2.6.32/net/mac80211/mesh_hwmp.c @@ -813,7 +813,7 @@ } if (mpath->flags & MESH_PATH_ACTIVE) { - if (time_after(jiffies, mpath->exp_time + + if (time_after(jiffies, mpath->exp_time - msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && !memcmp(sdata->dev->dev_addr, hdr->addr4, ETH_ALEN) --- linux-2.6.32.orig/net/mac80211/iface.c +++ linux-2.6.32/net/mac80211/iface.c @@ -15,12 +15,14 @@ #include #include #include +#include #include "ieee80211_i.h" #include "sta_info.h" #include "debugfs_netdev.h" #include "mesh.h" #include "led.h" #include "driver-ops.h" +#include "wme.h" /** * DOC: Interface list locking @@ -642,6 +644,12 @@ WARN_ON(flushed); } +static u16 ieee80211_netdev_select_queue(struct net_device *dev, + struct sk_buff *skb) +{ + return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb); +} + static const struct net_device_ops ieee80211_dataif_ops = { .ndo_open = ieee80211_open, .ndo_stop = ieee80211_stop, @@ -650,8 +658,35 @@ .ndo_set_multicast_list = ieee80211_set_multicast_list, .ndo_change_mtu = ieee80211_change_mtu, .ndo_set_mac_address = eth_mac_addr, + .ndo_select_queue = ieee80211_netdev_select_queue, }; +static u16 ieee80211_monitor_select_queue(struct net_device *dev, + struct sk_buff *skb) +{ + struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); + struct ieee80211_local *local = sdata->local; + struct ieee80211_hdr *hdr; + struct ieee80211_radiotap_header *rtap = (void *)skb->data; + + if (local->hw.queues < 4) + return 0; + + if (skb->len < 4 || + skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) + return 0; /* doesn't matter, frame will be dropped */ + + hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); + + if (!ieee80211_is_data(hdr->frame_control)) { + skb->priority = 7; + return ieee802_1d_to_ac[skb->priority]; + } + + skb->priority = 0; + return ieee80211_downgrade_queue(local, skb); +} + static const struct net_device_ops ieee80211_monitorif_ops = { .ndo_open = ieee80211_open, .ndo_stop = ieee80211_stop, @@ -660,6 +695,7 @@ .ndo_set_multicast_list = ieee80211_set_multicast_list, .ndo_change_mtu = ieee80211_change_mtu, .ndo_set_mac_address = eth_mac_addr, + .ndo_select_queue = ieee80211_monitor_select_queue, }; static void ieee80211_if_setup(struct net_device *dev) @@ -768,8 +804,8 @@ ASSERT_RTNL(); - ndev = alloc_netdev(sizeof(*sdata) + local->hw.vif_data_size, - name, ieee80211_if_setup); + ndev = alloc_netdev_mq(sizeof(*sdata) + local->hw.vif_data_size, + name, ieee80211_if_setup, local->hw.queues); if (!ndev) return -ENOMEM; dev_net_set(ndev, wiphy_net(local->hw.wiphy)); --- linux-2.6.32.orig/net/mac80211/scan.c +++ linux-2.6.32/net/mac80211/scan.c @@ -196,7 +196,8 @@ static void ieee80211_scan_ps_enable(struct ieee80211_sub_if_data *sdata) { struct ieee80211_local *local = sdata->local; - bool ps = false; + + local->scan_ps_enabled = false; /* FIXME: what to do when local->pspolling is true? */ @@ -204,12 +205,13 @@ cancel_work_sync(&local->dynamic_ps_enable_work); if (local->hw.conf.flags & IEEE80211_CONF_PS) { - ps = true; + local->scan_ps_enabled = true; local->hw.conf.flags &= ~IEEE80211_CONF_PS; ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); } - if (!ps || !(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)) + if (!(local->scan_ps_enabled) || + !(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)) /* * If power save was enabled, no need to send a nullfunc * frame because AP knows that we are sleeping. But if the @@ -230,7 +232,7 @@ if (!local->ps_sdata) ieee80211_send_nullfunc(local, sdata, 0); - else { + else if (local->scan_ps_enabled) { /* * In !IEEE80211_HW_PS_NULLFUNC_STACK case the hardware * will send a nullfunc frame with the powersave bit set @@ -246,6 +248,16 @@ */ local->hw.conf.flags |= IEEE80211_CONF_PS; ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); + } else if (local->hw.conf.dynamic_ps_timeout > 0) { + /* + * If IEEE80211_CONF_PS was not set and the dynamic_ps_timer + * had been running before leaving the operating channel, + * restart the timer now and send a nullfunc frame to inform + * the AP that we are awake. + */ + ieee80211_send_nullfunc(local, sdata, 0); + mod_timer(&local->dynamic_ps_timer, jiffies + + msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout)); } } @@ -264,10 +276,14 @@ mutex_lock(&local->scan_mtx); - if (WARN_ON(!local->scanning)) { - mutex_unlock(&local->scan_mtx); - return; - } + /* + * It's ok to abort a not-yet-running scan (that + * we have one at all will be verified by checking + * local->scan_req next), but not to complete it + * successfully. + */ + if (WARN_ON(!local->scanning && !aborted)) + aborted = true; if (WARN_ON(!local->scan_req)) { mutex_unlock(&local->scan_mtx); @@ -392,6 +408,16 @@ if (local->scan_req) return -EBUSY; + if (req != local->int_scan_req && + sdata->vif.type == NL80211_IFTYPE_STATION && + !list_empty(&ifmgd->work_list)) { + /* actually wait for the work it's doing to finish/time out */ + set_bit(IEEE80211_STA_REQ_SCAN, &ifmgd->request); + local->scan_req = req; + local->scan_sdata = sdata; + return 0; + } + if (local->ops->hw_scan) { u8 *ies; int ielen; @@ -412,14 +438,6 @@ local->scan_req = req; local->scan_sdata = sdata; - if (req != local->int_scan_req && - sdata->vif.type == NL80211_IFTYPE_STATION && - !list_empty(&ifmgd->work_list)) { - /* actually wait for the work it's doing to finish/time out */ - set_bit(IEEE80211_STA_REQ_SCAN, &ifmgd->request); - return 0; - } - if (local->ops->hw_scan) __set_bit(SCAN_HW_SCANNING, &local->scanning); else --- linux-2.6.32.orig/net/mac80211/util.c +++ linux-2.6.32/net/mac80211/util.c @@ -269,6 +269,7 @@ enum queue_stop_reason reason) { struct ieee80211_local *local = hw_to_local(hw); + struct ieee80211_sub_if_data *sdata; if (WARN_ON(queue >= hw->queues)) return; @@ -279,7 +280,12 @@ /* someone still has this queue stopped */ return; - if (!skb_queue_empty(&local->pending[queue])) + if (skb_queue_empty(&local->pending[queue])) { + rcu_read_lock(); + list_for_each_entry_rcu(sdata, &local->interfaces, list) + netif_tx_wake_queue(netdev_get_tx_queue(sdata->dev, queue)); + rcu_read_unlock(); + } else tasklet_schedule(&local->tx_pending_tasklet); } @@ -305,11 +311,17 @@ enum queue_stop_reason reason) { struct ieee80211_local *local = hw_to_local(hw); + struct ieee80211_sub_if_data *sdata; if (WARN_ON(queue >= hw->queues)) return; __set_bit(reason, &local->queue_stop_reasons[queue]); + + rcu_read_lock(); + list_for_each_entry_rcu(sdata, &local->interfaces, list) + netif_tx_stop_queue(netdev_get_tx_queue(sdata->dev, queue)); + rcu_read_unlock(); } void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, @@ -579,7 +591,7 @@ if (elen > left) break; - if (calc_crc && id < 64 && (filter & BIT(id))) + if (calc_crc && id < 64 && (filter & (1ULL << id))) crc = crc32_be(crc, pos - 2, elen + 2); switch (id) { @@ -1031,7 +1043,19 @@ /* restart hardware */ if (local->open_count) { + /* + * Upon resume hardware can sometimes be goofy due to + * various platform / driver / bus issues, so restarting + * the device may at times not work immediately. Propagate + * the error. + */ res = drv_start(local); + if (res) { + WARN(local->suspended, "Harware became unavailable " + "upon resume. This is could be a software issue" + "prior to suspend or a harware issue\n"); + return res; + } ieee80211_led_radio(local, true); } @@ -1113,6 +1137,14 @@ } } + rcu_read_lock(); + if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) { + list_for_each_entry_rcu(sta, &local->sta_list, list) { + ieee80211_sta_tear_down_BA_sessions(sta); + } + } + rcu_read_unlock(); + /* add back keys */ list_for_each_entry(sdata, &local->interfaces, list) if (netif_running(sdata->dev)) --- linux-2.6.32.orig/net/mac80211/wme.c +++ linux-2.6.32/net/mac80211/wme.c @@ -44,22 +44,62 @@ } -/* Indicate which queue to use. */ -static u16 classify80211(struct ieee80211_local *local, struct sk_buff *skb) +/* Indicate which queue to use. */ +u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, + struct sk_buff *skb) { - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; + struct ieee80211_local *local = sdata->local; + struct sta_info *sta = NULL; + u32 sta_flags = 0; + const u8 *ra = NULL; + bool qos = false; - if (!ieee80211_is_data(hdr->frame_control)) { - /* management frames go on AC_VO queue, but are sent - * without QoS control fields */ - return 0; + if (local->hw.queues < 4 || skb->len < 6) { + skb->priority = 0; /* required for correct WPA/11i MIC */ + return min_t(u16, local->hw.queues - 1, + ieee802_1d_to_ac[skb->priority]); + } + + rcu_read_lock(); + switch (sdata->vif.type) { + case NL80211_IFTYPE_AP_VLAN: + case NL80211_IFTYPE_AP: + ra = skb->data; + break; + case NL80211_IFTYPE_WDS: + ra = sdata->u.wds.remote_addr; + break; +#ifdef CONFIG_MAC80211_MESH + case NL80211_IFTYPE_MESH_POINT: + /* + * XXX: This is clearly broken ... but already was before, + * because ieee80211_fill_mesh_addresses() would clear A1 + * except for multicast addresses. + */ + break; +#endif + case NL80211_IFTYPE_STATION: + ra = sdata->u.mgd.bssid; + break; + case NL80211_IFTYPE_ADHOC: + ra = skb->data; + break; + default: + break; } - if (0 /* injected */) { - /* use AC from radiotap */ + if (!sta && ra && !is_multicast_ether_addr(ra)) { + sta = sta_info_get(local, ra); + if (sta) + sta_flags = get_sta_flags(sta); } - if (!ieee80211_is_data_qos(hdr->frame_control)) { + if (sta_flags & WLAN_STA_WME) + qos = true; + + rcu_read_unlock(); + + if (!qos) { skb->priority = 0; /* required for correct WPA/11i MIC */ return ieee802_1d_to_ac[skb->priority]; } @@ -68,6 +108,12 @@ * data frame has */ skb->priority = cfg80211_classify8021d(skb); + return ieee80211_downgrade_queue(local, skb); +} + +u16 ieee80211_downgrade_queue(struct ieee80211_local *local, + struct sk_buff *skb) +{ /* in case we are a client verify acm is not set for this ac */ while (unlikely(local->wmm_acm & BIT(skb->priority))) { if (wme_downgrade_ac(skb)) { @@ -85,24 +131,17 @@ return ieee802_1d_to_ac[skb->priority]; } -void ieee80211_select_queue(struct ieee80211_local *local, struct sk_buff *skb) +void ieee80211_set_qos_hdr(struct ieee80211_local *local, struct sk_buff *skb) { - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; - u16 queue; - u8 tid; - - queue = classify80211(local, skb); - if (unlikely(queue >= local->hw.queues)) - queue = local->hw.queues - 1; - - /* - * Now we know the 1d priority, fill in the QoS header if - * there is one (and we haven't done this before). - */ + struct ieee80211_hdr *hdr = (void *)skb->data; + + /* Fill in the QoS header if there is one. */ if (ieee80211_is_data_qos(hdr->frame_control)) { u8 *p = ieee80211_get_qos_ctl(hdr); - u8 ack_policy = 0; + u8 ack_policy = 0, tid; + tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; + if (unlikely(local->wifi_wme_noack_test)) ack_policy |= QOS_CONTROL_ACK_POLICY_NOACK << QOS_CONTROL_ACK_POLICY_SHIFT; @@ -110,6 +149,4 @@ *p++ = ack_policy | tid; *p = 0; } - - skb_set_queue_mapping(skb, queue); } --- linux-2.6.32.orig/net/mac80211/driver-trace.h +++ linux-2.6.32/net/mac80211/driver-trace.h @@ -655,7 +655,7 @@ __entry->ret = ret; __entry->action = action; __entry->tid = tid; - __entry->ssn = *ssn; + __entry->ssn = ssn ? *ssn : 0; ), TP_printk( --- linux-2.6.32.orig/net/mac80211/cfg.c +++ linux-2.6.32/net/mac80211/cfg.c @@ -338,7 +338,8 @@ sinfo->rx_packets = sta->rx_packets; sinfo->tx_packets = sta->tx_packets; - if (sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) { + if ((sta->local->hw.flags & IEEE80211_HW_SIGNAL_DBM) || + (sta->local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)) { sinfo->filled |= STATION_INFO_SIGNAL; sinfo->signal = (s8)sta->last_signal; } @@ -1305,6 +1306,9 @@ struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); struct ieee80211_conf *conf = &local->hw.conf; + if (sdata->vif.type != NL80211_IFTYPE_STATION) + return -EOPNOTSUPP; + if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) return -EOPNOTSUPP; --- linux-2.6.32.orig/net/mac80211/wme.h +++ linux-2.6.32/net/mac80211/wme.h @@ -20,7 +20,11 @@ extern const int ieee802_1d_to_ac[8]; -void ieee80211_select_queue(struct ieee80211_local *local, - struct sk_buff *skb); +u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, + struct sk_buff *skb); +void ieee80211_set_qos_hdr(struct ieee80211_local *local, struct sk_buff *skb); +u16 ieee80211_downgrade_queue(struct ieee80211_local *local, + struct sk_buff *skb); + #endif /* _WME_H */ --- linux-2.6.32.orig/net/mac80211/ieee80211_i.h +++ linux-2.6.32/net/mac80211/ieee80211_i.h @@ -264,6 +264,7 @@ IEEE80211_STA_DISABLE_11N = BIT(4), IEEE80211_STA_CSA_RECEIVED = BIT(5), IEEE80211_STA_MFP_ENABLED = BIT(6), + IEEE80211_STA_NULLFUNC_ACKED = BIT(7), }; /* flags for MLME request */ @@ -808,6 +809,7 @@ unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */ bool pspolling; + bool scan_ps_enabled; /* * PS can only be enabled when we have exactly one managed * interface (and monitors) in PS, this then points there. --- linux-2.6.32.orig/net/mac80211/mlme.c +++ linux-2.6.32/net/mac80211/mlme.c @@ -650,8 +650,11 @@ } else { if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) ieee80211_send_nullfunc(local, sdata, 1); - conf->flags |= IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); + + if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) { + conf->flags |= IEEE80211_CONF_PS; + ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); + } } } @@ -742,6 +745,7 @@ container_of(work, struct ieee80211_local, dynamic_ps_enable_work); struct ieee80211_sub_if_data *sdata = local->ps_sdata; + struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; /* can only happen when PS was just disabled anyway */ if (!sdata) @@ -750,11 +754,16 @@ if (local->hw.conf.flags & IEEE80211_CONF_PS) return; - if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) + if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) && + (!(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED))) ieee80211_send_nullfunc(local, sdata, 1); - local->hw.conf.flags |= IEEE80211_CONF_PS; - ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); + if (!(local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) || + (ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED)) { + ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED; + local->hw.conf.flags |= IEEE80211_CONF_PS; + ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); + } } void ieee80211_dynamic_ps_timer(unsigned long data) @@ -904,6 +913,14 @@ sdata->u.mgd.flags &= ~(IEEE80211_STA_CONNECTION_POLL | IEEE80211_STA_BEACON_POLL); + /* + * Always handle WMM once after association regardless + * of the first value the AP uses. Setting -1 here has + * that effect because the AP values is an unsigned + * 4-bit value. + */ + sdata->u.mgd.wmm_last_param_set = -1; + ieee80211_led_assoc(local, 1); sdata->vif.bss_conf.assoc = 1; @@ -1945,7 +1962,9 @@ rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len); break; case IEEE80211_STYPE_ACTION: - /* XXX: differentiate, can only happen for CSA now! */ + if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT) + break; + ieee80211_sta_process_chanswitch(sdata, &mgmt->u.action.u.chan_switch.sw_elem, ifmgd->associated); @@ -2448,6 +2467,7 @@ list_add(&wk->list, &ifmgd->work_list); ifmgd->flags &= ~IEEE80211_STA_DISABLE_11N; + ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED; for (i = 0; i < req->crypto.n_ciphers_pairwise; i++) if (req->crypto.ciphers_pairwise[i] == WLAN_CIPHER_SUITE_WEP40 || --- linux-2.6.32.orig/net/mac80211/agg-tx.c +++ linux-2.6.32/net/mac80211/agg-tx.c @@ -177,10 +177,10 @@ /* check if the TID waits for addBA response */ spin_lock_bh(&sta->lock); - if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) != + if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK | + HT_AGG_STATE_REQ_STOP_BA_MSK)) != HT_ADDBA_REQUESTED_MSK) { spin_unlock_bh(&sta->lock); - *state = HT_AGG_STATE_IDLE; #ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "timer expired on tid %d but we are not " "(or no longer) expecting addBA response there", --- linux-2.6.32.orig/net/mac80211/main.c +++ linux-2.6.32/net/mac80211/main.c @@ -441,6 +441,7 @@ rcu_read_lock(); sband = local->hw.wiphy->bands[info->band]; + fc = hdr->frame_control; sta = sta_info_get(local, hdr->addr1); @@ -522,6 +523,20 @@ local->dot11FailedCount++; } + if (ieee80211_is_nullfunc(fc) && ieee80211_has_pm(fc) && + (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) && + !(info->flags & IEEE80211_TX_CTL_INJECTED) && + local->ps_sdata && !(local->scanning)) { + if (info->flags & IEEE80211_TX_STAT_ACK) { + local->ps_sdata->u.mgd.flags |= + IEEE80211_STA_NULLFUNC_ACKED; + ieee80211_queue_work(&local->hw, + &local->dynamic_ps_enable_work); + } else + mod_timer(&local->dynamic_ps_timer, jiffies + + msecs_to_jiffies(10)); + } + /* this was a transmitted frame, but now we want to reuse it */ skb_orphan(skb); --- linux-2.6.32.orig/net/mac80211/ibss.c +++ linux-2.6.32/net/mac80211/ibss.c @@ -455,6 +455,10 @@ ieee80211_sta_expire(sdata, IEEE80211_IBSS_INACTIVITY_LIMIT); + if (time_before(jiffies, ifibss->last_scan_completed + + IEEE80211_IBSS_MERGE_INTERVAL)) + return; + if (ieee80211_sta_active_ibss(sdata)) return; @@ -639,7 +643,7 @@ } if (pos[1] != 0 && (pos[1] != ifibss->ssid_len || - !memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) { + memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) { /* Ignore ProbeReq for foreign SSID */ return; } --- linux-2.6.32.orig/net/mac80211/mesh.h +++ linux-2.6.32/net/mac80211/mesh.h @@ -186,8 +186,9 @@ */ #define MESH_PREQ_MIN_INT 10 #define MESH_DIAM_TRAVERSAL_TIME 50 -/* Paths will be refreshed if they are closer than PATH_REFRESH_TIME to their - * expiration +/* A path will be refreshed if it is used PATH_REFRESH_TIME milliseconds before + * timing out. This way it will remain ACTIVE and no data frames will be + * unnecesarily held in the pending queue. */ #define MESH_PATH_REFRESH_TIME 1000 #define MESH_MIN_DISCOVERY_TIMEOUT (2 * MESH_DIAM_TRAVERSAL_TIME) --- linux-2.6.32.orig/net/bluetooth/l2cap.c +++ linux-2.6.32/net/bluetooth/l2cap.c @@ -2813,6 +2813,11 @@ int len = cmd->len - sizeof(*rsp); char req[64]; + if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) { + l2cap_send_disconn_req(conn, sk); + goto done; + } + /* throw out any old stored conf requests */ result = L2CAP_CONF_SUCCESS; len = l2cap_parse_conf_rsp(sk, rsp->data, @@ -3885,16 +3890,24 @@ struct sock *sk; struct hlist_node *node; char *str = buf; + int size = PAGE_SIZE; read_lock_bh(&l2cap_sk_list.lock); sk_for_each(sk, node, &l2cap_sk_list.head) { struct l2cap_pinfo *pi = l2cap_pi(sk); + int len; - str += sprintf(str, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d\n", + len = snprintf(str, size, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d\n", batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst), sk->sk_state, __le16_to_cpu(pi->psm), pi->scid, pi->dcid, pi->imtu, pi->omtu, pi->sec_level); + + size -= len; + if (size <= 0) + break; + + str += len; } read_unlock_bh(&l2cap_sk_list.lock); --- linux-2.6.32.orig/net/bluetooth/sco.c +++ linux-2.6.32/net/bluetooth/sco.c @@ -957,13 +957,22 @@ struct sock *sk; struct hlist_node *node; char *str = buf; + int size = PAGE_SIZE; read_lock_bh(&sco_sk_list.lock); sk_for_each(sk, node, &sco_sk_list.head) { - str += sprintf(str, "%s %s %d\n", + int len; + + len = snprintf(str, size, "%s %s %d\n", batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst), sk->sk_state); + + size -= len; + if (size <= 0) + break; + + str += len; } read_unlock_bh(&sco_sk_list.lock); --- linux-2.6.32.orig/net/bluetooth/rfcomm/core.c +++ linux-2.6.32/net/bluetooth/rfcomm/core.c @@ -251,7 +251,6 @@ BT_DBG("session %p state %ld", s, s->state); set_bit(RFCOMM_TIMED_OUT, &s->flags); - rfcomm_session_put(s); rfcomm_schedule(RFCOMM_SCHED_TIMEO); } @@ -1917,6 +1916,7 @@ if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) { s->state = BT_DISCONN; rfcomm_send_disc(s, 0); + rfcomm_session_put(s); continue; } @@ -2096,6 +2096,7 @@ struct rfcomm_session *s; struct list_head *pp, *p; char *str = buf; + int size = PAGE_SIZE; rfcomm_lock(); @@ -2104,11 +2105,21 @@ list_for_each(pp, &s->dlcs) { struct sock *sk = s->sock->sk; struct rfcomm_dlc *d = list_entry(pp, struct rfcomm_dlc, list); + int len; - str += sprintf(str, "%s %s %ld %d %d %d %d\n", + len = snprintf(str, size, "%s %s %ld %d %d %d %d\n", batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst), d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits); + + size -= len; + if (size <= 0) + break; + + str += len; } + + if (size <= 0) + break; } rfcomm_unlock(); --- linux-2.6.32.orig/net/bluetooth/rfcomm/sock.c +++ linux-2.6.32/net/bluetooth/rfcomm/sock.c @@ -1065,13 +1065,22 @@ struct sock *sk; struct hlist_node *node; char *str = buf; + int size = PAGE_SIZE; read_lock_bh(&rfcomm_sk_list.lock); sk_for_each(sk, node, &rfcomm_sk_list.head) { - str += sprintf(str, "%s %s %d %d\n", + int len; + + len = snprintf(str, size, "%s %s %d %d\n", batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst), sk->sk_state, rfcomm_pi(sk)->channel); + + size -= len; + if (size <= 0) + break; + + str += len; } read_unlock_bh(&rfcomm_sk_list.lock); --- linux-2.6.32.orig/net/ipv4/udp.c +++ linux-2.6.32/net/ipv4/udp.c @@ -1292,6 +1292,9 @@ uh = udp_hdr(skb); ulen = ntohs(uh->len); + saddr = ip_hdr(skb)->saddr; + daddr = ip_hdr(skb)->daddr; + if (ulen > skb->len) goto short_packet; @@ -1305,9 +1308,6 @@ if (udp4_csum_init(skb, uh, proto)) goto csum_error; - saddr = ip_hdr(skb)->saddr; - daddr = ip_hdr(skb)->daddr; - if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST)) return __udp4_lib_mcast_deliver(net, skb, uh, saddr, daddr, udptable); --- linux-2.6.32.orig/net/ipv4/fib_frontend.c +++ linux-2.6.32/net/ipv4/fib_frontend.c @@ -251,6 +251,8 @@ if (in_dev) { no_addr = in_dev->ifa_list == NULL; rpf = IN_DEV_RPFILTER(in_dev); + if (mark && !IN_DEV_SRC_VMARK(in_dev)) + fl.mark = 0; } rcu_read_unlock(); --- linux-2.6.32.orig/net/ipv4/devinet.c +++ linux-2.6.32/net/ipv4/devinet.c @@ -1351,14 +1351,19 @@ { int *valp = ctl->data; int val = *valp; + loff_t pos = *ppos; int ret = proc_dointvec(ctl, write, buffer, lenp, ppos); if (write && *valp != val) { struct net *net = ctl->extra2; if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) { - if (!rtnl_trylock()) + if (!rtnl_trylock()) { + /* Restore the original values before restarting */ + *valp = val; + *ppos = pos; return restart_syscall(); + } if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING)) { inet_forward_change(net); } else if (*valp) { @@ -1450,6 +1455,7 @@ DEVINET_SYSCTL_RW_ENTRY(SEND_REDIRECTS, "send_redirects"), DEVINET_SYSCTL_RW_ENTRY(ACCEPT_SOURCE_ROUTE, "accept_source_route"), + DEVINET_SYSCTL_RW_ENTRY(SRC_VMARK, "src_valid_mark"), DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP, "proxy_arp"), DEVINET_SYSCTL_RW_ENTRY(MEDIUM_ID, "medium_id"), DEVINET_SYSCTL_RW_ENTRY(BOOTP_RELAY, "bootp_relay"), --- linux-2.6.32.orig/net/ipv4/tcp_input.c +++ linux-2.6.32/net/ipv4/tcp_input.c @@ -5699,11 +5699,9 @@ /* tcp_ack considers this ACK as duplicate * and does not calculate rtt. - * Fix it at least with timestamps. + * Force it here. */ - if (tp->rx_opt.saw_tstamp && - tp->rx_opt.rcv_tsecr && !tp->srtt) - tcp_ack_saw_tstamp(sk, 0); + tcp_ack_update_rtt(sk, 0, 0); if (tp->rx_opt.tstamp_ok) tp->advmss -= TCPOLEN_TSTAMP_ALIGNED; --- linux-2.6.32.orig/net/ipv4/igmp.c +++ linux-2.6.32/net/ipv4/igmp.c @@ -946,7 +946,6 @@ break; case IGMP_HOST_MEMBERSHIP_REPORT: case IGMPV2_HOST_MEMBERSHIP_REPORT: - case IGMPV3_HOST_MEMBERSHIP_REPORT: /* Is it our report looped back? */ if (skb_rtable(skb)->fl.iif == 0) break; @@ -960,6 +959,7 @@ in_dev_put(in_dev); return pim_rcv_v1(skb); #endif + case IGMPV3_HOST_MEMBERSHIP_REPORT: case IGMP_DVMRP: case IGMP_TRACE: case IGMP_HOST_LEAVE_MESSAGE: --- linux-2.6.32.orig/net/ipv4/ip_output.c +++ linux-2.6.32/net/ipv4/ip_output.c @@ -501,8 +501,8 @@ if (skb->sk) { frag->sk = skb->sk; frag->destructor = sock_wfree; - truesizes += frag->truesize; } + truesizes += frag->truesize; } /* Everything is OK. Generate! */ --- linux-2.6.32.orig/net/ipv4/netfilter/ip_tables.c +++ linux-2.6.32/net/ipv4/netfilter/ip_tables.c @@ -1132,10 +1132,10 @@ if (t && !IS_ERR(t)) { struct ipt_getinfo info; const struct xt_table_info *private = t->private; - #ifdef CONFIG_COMPAT + struct xt_table_info tmp; + if (compat) { - struct xt_table_info tmp; ret = compat_table_info(private, &tmp); xt_compat_flush_offsets(AF_INET); private = &tmp; --- linux-2.6.32.orig/net/ipv4/netfilter/arp_tables.c +++ linux-2.6.32/net/ipv4/netfilter/arp_tables.c @@ -925,10 +925,10 @@ if (t && !IS_ERR(t)) { struct arpt_getinfo info; const struct xt_table_info *private = t->private; - #ifdef CONFIG_COMPAT + struct xt_table_info tmp; + if (compat) { - struct xt_table_info tmp; ret = compat_table_info(private, &tmp); xt_compat_flush_offsets(NFPROTO_ARP); private = &tmp; --- linux-2.6.32.orig/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +++ linux-2.6.32/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c @@ -213,7 +213,7 @@ { .ctl_name = NET_IPV4_NF_CONNTRACK_BUCKETS, .procname = "ip_conntrack_buckets", - .data = &nf_conntrack_htable_size, + .data = &init_net.ct.htable_size, .maxlen = sizeof(unsigned int), .mode = 0444, .proc_handler = proc_dointvec, --- linux-2.6.32.orig/net/ipv4/netfilter/nf_nat_core.c +++ linux-2.6.32/net/ipv4/netfilter/nf_nat_core.c @@ -35,9 +35,6 @@ static struct nf_conntrack_l3proto *l3proto __read_mostly; -/* Calculated at init based on memory size */ -static unsigned int nf_nat_htable_size __read_mostly; - #define MAX_IP_NAT_PROTO 256 static const struct nf_nat_protocol *nf_nat_protos[MAX_IP_NAT_PROTO] __read_mostly; @@ -72,7 +69,7 @@ /* We keep an extra hash for each conntrack, for fast searching. */ static inline unsigned int -hash_by_src(const struct nf_conntrack_tuple *tuple) +hash_by_src(const struct net *net, const struct nf_conntrack_tuple *tuple) { unsigned int hash; @@ -80,7 +77,7 @@ hash = jhash_3words((__force u32)tuple->src.u3.ip, (__force u32)tuple->src.u.all, tuple->dst.protonum, 0); - return ((u64)hash * nf_nat_htable_size) >> 32; + return ((u64)hash * net->ipv4.nat_htable_size) >> 32; } /* Is this tuple already taken? (not by us) */ @@ -147,7 +144,7 @@ struct nf_conntrack_tuple *result, const struct nf_nat_range *range) { - unsigned int h = hash_by_src(tuple); + unsigned int h = hash_by_src(net, tuple); const struct nf_conn_nat *nat; const struct nf_conn *ct; const struct hlist_node *n; @@ -330,7 +327,7 @@ if (have_to_hash) { unsigned int srchash; - srchash = hash_by_src(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); + srchash = hash_by_src(net, &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); spin_lock_bh(&nf_nat_lock); /* nf_conntrack_alter_reply might re-allocate exntension aera */ nat = nfct_nat(ct); @@ -679,8 +676,10 @@ static int __net_init nf_nat_net_init(struct net *net) { - net->ipv4.nat_bysource = nf_ct_alloc_hashtable(&nf_nat_htable_size, - &net->ipv4.nat_vmalloced, 0); + /* Leave them the same for the moment. */ + net->ipv4.nat_htable_size = net->ct.htable_size; + net->ipv4.nat_bysource = nf_ct_alloc_hashtable(&net->ipv4.nat_htable_size, + &net->ipv4.nat_vmalloced, 0); if (!net->ipv4.nat_bysource) return -ENOMEM; return 0; @@ -703,7 +702,7 @@ nf_ct_iterate_cleanup(net, &clean_nat, NULL); synchronize_rcu(); nf_ct_free_hashtable(net->ipv4.nat_bysource, net->ipv4.nat_vmalloced, - nf_nat_htable_size); + net->ipv4.nat_htable_size); } static struct pernet_operations nf_nat_net_ops = { @@ -724,9 +723,6 @@ return ret; } - /* Leave them the same for the moment. */ - nf_nat_htable_size = nf_conntrack_htable_size; - ret = register_pernet_subsys(&nf_nat_net_ops); if (ret < 0) goto cleanup_extend; --- linux-2.6.32.orig/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c +++ linux-2.6.32/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c @@ -32,7 +32,7 @@ struct hlist_nulls_node *n; for (st->bucket = 0; - st->bucket < nf_conntrack_htable_size; + st->bucket < net->ct.htable_size; st->bucket++) { n = rcu_dereference(net->ct.hash[st->bucket].first); if (!is_a_nulls(n)) @@ -50,7 +50,7 @@ head = rcu_dereference(head->next); while (is_a_nulls(head)) { if (likely(get_nulls_value(head) == st->bucket)) { - if (++st->bucket >= nf_conntrack_htable_size) + if (++st->bucket >= net->ct.htable_size) return NULL; } head = rcu_dereference(net->ct.hash[st->bucket].first); --- linux-2.6.32.orig/net/ipv4/netfilter/nf_defrag_ipv4.c +++ linux-2.6.32/net/ipv4/netfilter/nf_defrag_ipv4.c @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -34,6 +35,20 @@ return err; } +static enum ip_defrag_users nf_ct_defrag_user(unsigned int hooknum, + struct sk_buff *skb) +{ +#ifdef CONFIG_BRIDGE_NETFILTER + if (skb->nf_bridge && + skb->nf_bridge->mask & BRNF_NF_BRIDGE_PREROUTING) + return IP_DEFRAG_CONNTRACK_BRIDGE_IN; +#endif + if (hooknum == NF_INET_PRE_ROUTING) + return IP_DEFRAG_CONNTRACK_IN; + else + return IP_DEFRAG_CONNTRACK_OUT; +} + static unsigned int ipv4_conntrack_defrag(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, @@ -50,10 +65,8 @@ #endif /* Gather fragments. */ if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) { - if (nf_ct_ipv4_gather_frags(skb, - hooknum == NF_INET_PRE_ROUTING ? - IP_DEFRAG_CONNTRACK_IN : - IP_DEFRAG_CONNTRACK_OUT)) + enum ip_defrag_users user = nf_ct_defrag_user(hooknum, skb); + if (nf_ct_ipv4_gather_frags(skb, user)) return NF_STOLEN; } return NF_ACCEPT; --- linux-2.6.32.orig/net/netrom/nr_route.c +++ linux-2.6.32/net/netrom/nr_route.c @@ -842,12 +842,13 @@ dptr = skb_push(skb, 1); *dptr = AX25_P_NETROM; - ax25s = ax25_send_frame(skb, 256, (ax25_address *)dev->dev_addr, &nr_neigh->callsign, nr_neigh->digipeat, nr_neigh->dev); - if (nr_neigh->ax25 && ax25s) { - /* We were already holding this ax25_cb */ + ax25s = nr_neigh->ax25; + nr_neigh->ax25 = ax25_send_frame(skb, 256, + (ax25_address *)dev->dev_addr, + &nr_neigh->callsign, + nr_neigh->digipeat, nr_neigh->dev); + if (ax25s) ax25_cb_put(ax25s); - } - nr_neigh->ax25 = ax25s; dev_put(dev); ret = (nr_neigh->ax25 != NULL); --- linux-2.6.32.orig/net/ax25/ax25_out.c +++ linux-2.6.32/net/ax25/ax25_out.c @@ -92,6 +92,12 @@ #endif } + /* + * There is one ref for the state machine; a caller needs + * one more to put it back, just like with the existing one. + */ + ax25_cb_hold(ax25); + ax25_cb_add(ax25); ax25->state = AX25_STATE_1; --- linux-2.6.32.orig/net/core/scm.c +++ linux-2.6.32/net/core/scm.c @@ -156,6 +156,8 @@ switch (cmsg->cmsg_type) { case SCM_RIGHTS: + if (!sock->ops || sock->ops->family != PF_UNIX) + goto error; err=scm_fp_copy(cmsg, &p->fp); if (err<0) goto error; --- linux-2.6.32.orig/net/core/rtnetlink.c +++ linux-2.6.32/net/core/rtnetlink.c @@ -1334,13 +1334,11 @@ case NETDEV_UNREGISTER: rtmsg_ifinfo(RTM_DELLINK, dev, ~0U); break; - case NETDEV_REGISTER: - rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U); - break; case NETDEV_UP: case NETDEV_DOWN: rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_UP|IFF_RUNNING); break; + case NETDEV_REGISTER: case NETDEV_CHANGE: case NETDEV_GOING_DOWN: break; --- linux-2.6.32.orig/net/core/net-sysfs.c +++ linux-2.6.32/net/core/net-sysfs.c @@ -366,7 +366,8 @@ const struct iw_statistics *iw; ssize_t ret = -EINVAL; - rtnl_lock(); + if (!rtnl_trylock()) + return restart_syscall(); if (dev_isalive(dev)) { iw = get_wireless_stats(dev); if (iw) --- linux-2.6.32.orig/net/core/ethtool.c +++ linux-2.6.32/net/core/ethtool.c @@ -309,6 +309,26 @@ return ret; } +static int ethtool_reset(struct net_device *dev, char __user *useraddr) +{ + struct ethtool_value reset; + int ret; + + if (!dev->ethtool_ops->reset) + return -EOPNOTSUPP; + + if (copy_from_user(&reset, useraddr, sizeof(reset))) + return -EFAULT; + + ret = dev->ethtool_ops->reset(dev, &reset.data); + if (ret) + return ret; + + if (copy_to_user(useraddr, &reset, sizeof(reset))) + return -EFAULT; + return 0; +} + static int ethtool_get_wol(struct net_device *dev, char __user *useraddr) { struct ethtool_wolinfo wol = { ETHTOOL_GWOL }; @@ -1127,6 +1147,9 @@ case ETHTOOL_FLASHDEV: rc = ethtool_flash_device(dev, useraddr); break; + case ETHTOOL_RESET: + rc = ethtool_reset(dev, useraddr); + break; default: rc = -EOPNOTSUPP; } --- linux-2.6.32.orig/net/core/dst.c +++ linux-2.6.32/net/core/dst.c @@ -17,6 +17,7 @@ #include #include #include +#include #include @@ -79,6 +80,7 @@ while ((dst = next) != NULL) { next = dst->next; prefetch(&next->next); + cond_resched(); if (likely(atomic_read(&dst->__refcnt))) { last->next = dst; last = dst; --- linux-2.6.32.orig/net/core/sock.c +++ linux-2.6.32/net/core/sock.c @@ -1181,6 +1181,10 @@ if (newsk->sk_prot->sockets_allocated) percpu_counter_inc(newsk->sk_prot->sockets_allocated); + + if (sock_flag(newsk, SOCK_TIMESTAMP) || + sock_flag(newsk, SOCK_TIMESTAMPING_RX_SOFTWARE)) + net_enable_timestamp(); } out: return newsk; --- linux-2.6.32.orig/net/core/pktgen.c +++ linux-2.6.32/net/core/pktgen.c @@ -3516,6 +3516,7 @@ wait_event_interruptible_timeout(t->queue, t->control != 0, HZ/10); + try_to_freeze(); continue; } --- linux-2.6.32.orig/net/core/dev.c +++ linux-2.6.32/net/core/dev.c @@ -2440,7 +2440,7 @@ } EXPORT_SYMBOL(napi_gro_flush); -int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) +enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) { struct sk_buff **pp = NULL; struct packet_type *ptype; @@ -2448,7 +2448,7 @@ struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK]; int same_flow; int mac_len; - int ret; + enum gro_result ret; if (!(skb->dev->features & NETIF_F_GRO)) goto normal; @@ -2532,7 +2532,8 @@ } EXPORT_SYMBOL(dev_gro_receive); -static int __napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) +static gro_result_t +__napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) { struct sk_buff *p; @@ -2549,24 +2550,25 @@ return dev_gro_receive(napi, skb); } -int napi_skb_finish(int ret, struct sk_buff *skb) +gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) { - int err = NET_RX_SUCCESS; - switch (ret) { case GRO_NORMAL: - return netif_receive_skb(skb); + if (netif_receive_skb(skb)) + ret = GRO_DROP; + break; case GRO_DROP: - err = NET_RX_DROP; - /* fall through */ - case GRO_MERGED_FREE: kfree_skb(skb); break; + + case GRO_HELD: + case GRO_MERGED: + break; } - return err; + return ret; } EXPORT_SYMBOL(napi_skb_finish); @@ -2586,7 +2588,7 @@ } EXPORT_SYMBOL(skb_gro_reset_offset); -int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) +gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb) { skb_gro_reset_offset(skb); @@ -2623,31 +2625,30 @@ } EXPORT_SYMBOL(napi_get_frags); -int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, int ret) +gro_result_t napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, + gro_result_t ret) { - int err = NET_RX_SUCCESS; - switch (ret) { case GRO_NORMAL: case GRO_HELD: - skb->protocol = eth_type_trans(skb, napi->dev); - - if (ret == GRO_NORMAL) - return netif_receive_skb(skb); + skb->protocol = eth_type_trans(skb, skb->dev); - skb_gro_pull(skb, -ETH_HLEN); + if (ret == GRO_HELD) + skb_gro_pull(skb, -ETH_HLEN); + else if (netif_receive_skb(skb)) + ret = GRO_DROP; break; case GRO_DROP: - err = NET_RX_DROP; - /* fall through */ - case GRO_MERGED_FREE: napi_reuse_skb(napi, skb); break; + + case GRO_MERGED: + break; } - return err; + return ret; } EXPORT_SYMBOL(napi_frags_finish); @@ -2688,12 +2689,12 @@ } EXPORT_SYMBOL(napi_frags_skb); -int napi_gro_frags(struct napi_struct *napi) +gro_result_t napi_gro_frags(struct napi_struct *napi) { struct sk_buff *skb = napi_frags_skb(napi); if (!skb) - return NET_RX_DROP; + return GRO_DROP; return napi_frags_finish(napi, skb, __napi_gro_receive(napi, skb)); } @@ -4860,6 +4861,11 @@ rollback_registered(dev); dev->reg_state = NETREG_UNREGISTERED; } + /* + * Prevent userspace races by waiting until the network + * device is fully setup before sending notifications. + */ + rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U); out: return ret; @@ -5398,6 +5404,12 @@ /* Notify protocols, that a new device appeared. */ call_netdevice_notifiers(NETDEV_REGISTER, dev); + /* + * Prevent userspace races by waiting until the network + * device is fully setup before sending notifications. + */ + rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U); + synchronize_net(); err = 0; out: --- linux-2.6.32.orig/net/8021q/vlan_core.c +++ linux-2.6.32/net/8021q/vlan_core.c @@ -74,8 +74,9 @@ } EXPORT_SYMBOL(vlan_dev_vlan_id); -static int vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp, - unsigned int vlan_tci, struct sk_buff *skb) +static gro_result_t +vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci, struct sk_buff *skb) { struct sk_buff *p; @@ -101,11 +102,12 @@ return GRO_DROP; } -int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, - unsigned int vlan_tci, struct sk_buff *skb) +gro_result_t vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci, struct sk_buff *skb) { if (netpoll_rx_on(skb)) - return vlan_hwaccel_receive_skb(skb, grp, vlan_tci); + return vlan_hwaccel_receive_skb(skb, grp, vlan_tci) + ? GRO_DROP : GRO_NORMAL; skb_gro_reset_offset(skb); @@ -113,17 +115,18 @@ } EXPORT_SYMBOL(vlan_gro_receive); -int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, - unsigned int vlan_tci) +gro_result_t vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, + unsigned int vlan_tci) { struct sk_buff *skb = napi_frags_skb(napi); if (!skb) - return NET_RX_DROP; + return GRO_DROP; if (netpoll_rx_on(skb)) { skb->protocol = eth_type_trans(skb, skb->dev); - return vlan_hwaccel_receive_skb(skb, grp, vlan_tci); + return vlan_hwaccel_receive_skb(skb, grp, vlan_tci) + ? GRO_DROP : GRO_NORMAL; } return napi_frags_finish(napi, skb, --- linux-2.6.32.orig/net/tipc/net.c +++ linux-2.6.32/net/tipc/net.c @@ -116,7 +116,8 @@ */ DEFINE_RWLOCK(tipc_net_lock); -struct network tipc_net = { NULL }; +struct _zone *tipc_zones[256] = { NULL, }; +struct network tipc_net = { tipc_zones }; struct tipc_node *tipc_net_select_remote_node(u32 addr, u32 ref) { @@ -158,28 +159,12 @@ } } -static int net_init(void) -{ - memset(&tipc_net, 0, sizeof(tipc_net)); - tipc_net.zones = kcalloc(tipc_max_zones + 1, sizeof(struct _zone *), GFP_ATOMIC); - if (!tipc_net.zones) { - return -ENOMEM; - } - return 0; -} - static void net_stop(void) { u32 z_num; - if (!tipc_net.zones) - return; - - for (z_num = 1; z_num <= tipc_max_zones; z_num++) { + for (z_num = 1; z_num <= tipc_max_zones; z_num++) tipc_zone_delete(tipc_net.zones[z_num]); - } - kfree(tipc_net.zones); - tipc_net.zones = NULL; } static void net_route_named_msg(struct sk_buff *buf) @@ -282,9 +267,7 @@ tipc_named_reinit(); tipc_port_reinit(); - if ((res = tipc_bearer_init()) || - (res = net_init()) || - (res = tipc_cltr_init()) || + if ((res = tipc_cltr_init()) || (res = tipc_bclink_init())) { return res; } --- linux-2.6.32.orig/net/tipc/bearer.h +++ linux-2.6.32/net/tipc/bearer.h @@ -114,7 +114,7 @@ struct link; -extern struct bearer *tipc_bearers; +extern struct bearer tipc_bearers[]; void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a); struct sk_buff *tipc_media_get_names(void); --- linux-2.6.32.orig/net/tipc/bearer.c +++ linux-2.6.32/net/tipc/bearer.c @@ -45,10 +45,10 @@ #define MAX_ADDR_STR 32 -static struct media *media_list = NULL; +static struct media media_list[MAX_MEDIA]; static u32 media_count = 0; -struct bearer *tipc_bearers = NULL; +struct bearer tipc_bearers[MAX_BEARERS]; /** * media_name_valid - validate media name @@ -108,9 +108,11 @@ int res = -EINVAL; write_lock_bh(&tipc_net_lock); - if (!media_list) - goto exit; + if (tipc_mode != TIPC_NET_MODE) { + warn("Media <%s> rejected, not in networked mode yet\n", name); + goto exit; + } if (!media_name_valid(name)) { warn("Media <%s> rejected, illegal name\n", name); goto exit; @@ -660,33 +662,10 @@ -int tipc_bearer_init(void) -{ - int res; - - write_lock_bh(&tipc_net_lock); - tipc_bearers = kcalloc(MAX_BEARERS, sizeof(struct bearer), GFP_ATOMIC); - media_list = kcalloc(MAX_MEDIA, sizeof(struct media), GFP_ATOMIC); - if (tipc_bearers && media_list) { - res = 0; - } else { - kfree(tipc_bearers); - kfree(media_list); - tipc_bearers = NULL; - media_list = NULL; - res = -ENOMEM; - } - write_unlock_bh(&tipc_net_lock); - return res; -} - void tipc_bearer_stop(void) { u32 i; - if (!tipc_bearers) - return; - for (i = 0; i < MAX_BEARERS; i++) { if (tipc_bearers[i].active) tipc_bearers[i].publ.blocked = 1; @@ -695,10 +674,6 @@ if (tipc_bearers[i].active) bearer_disable(tipc_bearers[i].publ.name); } - kfree(tipc_bearers); - kfree(media_list); - tipc_bearers = NULL; - media_list = NULL; media_count = 0; } --- linux-2.6.32.orig/net/netfilter/xt_recent.c +++ linux-2.6.32/net/netfilter/xt_recent.c @@ -142,6 +142,25 @@ t->entries--; } +/* + * Drop entries with timestamps older then 'time'. + */ +static void recent_entry_reap(struct recent_table *t, unsigned long time) +{ + struct recent_entry *e; + + /* + * The head of the LRU list is always the oldest entry. + */ + e = list_entry(t->lru_list.next, struct recent_entry, lru_list); + + /* + * The last time stamp is the most recent. + */ + if (time_after(time, e->stamps[e->index-1])) + recent_entry_remove(t, e); +} + static struct recent_entry * recent_entry_init(struct recent_table *t, const union nf_inet_addr *addr, u_int16_t family, u_int8_t ttl) @@ -173,10 +192,10 @@ static void recent_entry_update(struct recent_table *t, struct recent_entry *e) { + e->index %= ip_pkt_list_tot; e->stamps[e->index++] = jiffies; if (e->index > e->nstamps) e->nstamps = e->index; - e->index %= ip_pkt_list_tot; list_move_tail(&e->lru_list, &t->lru_list); } @@ -260,11 +279,15 @@ for (i = 0; i < e->nstamps; i++) { if (info->seconds && time_after(time, e->stamps[i])) continue; - if (++hits >= info->hit_count) { + if (!info->hit_count || ++hits >= info->hit_count) { ret = !ret; break; } } + + /* info->seconds must be non-zero */ + if (info->check_set & XT_RECENT_REAP) + recent_entry_reap(t, time); } if (info->check_set & XT_RECENT_SET || @@ -292,7 +315,10 @@ XT_RECENT_CHECK | XT_RECENT_UPDATE)) != 1) return false; if ((info->check_set & (XT_RECENT_SET | XT_RECENT_REMOVE)) && - (info->seconds || info->hit_count)) + (info->seconds || info->hit_count || + (info->check_set & XT_RECENT_MODIFIERS))) + return false; + if ((info->check_set & XT_RECENT_REAP) && !info->seconds) return false; if (info->hit_count > ip_pkt_list_tot) return false; --- linux-2.6.32.orig/net/netfilter/nf_conntrack_standalone.c +++ linux-2.6.32/net/netfilter/nf_conntrack_standalone.c @@ -51,7 +51,7 @@ struct hlist_nulls_node *n; for (st->bucket = 0; - st->bucket < nf_conntrack_htable_size; + st->bucket < net->ct.htable_size; st->bucket++) { n = rcu_dereference(net->ct.hash[st->bucket].first); if (!is_a_nulls(n)) @@ -69,7 +69,7 @@ head = rcu_dereference(head->next); while (is_a_nulls(head)) { if (likely(get_nulls_value(head) == st->bucket)) { - if (++st->bucket >= nf_conntrack_htable_size) + if (++st->bucket >= net->ct.htable_size) return NULL; } head = rcu_dereference(net->ct.hash[st->bucket].first); @@ -358,7 +358,7 @@ { .ctl_name = NET_NF_CONNTRACK_BUCKETS, .procname = "nf_conntrack_buckets", - .data = &nf_conntrack_htable_size, + .data = &init_net.ct.htable_size, .maxlen = sizeof(unsigned int), .mode = 0444, .proc_handler = proc_dointvec, @@ -429,6 +429,7 @@ goto out_kmemdup; table[1].data = &net->ct.count; + table[2].data = &net->ct.htable_size; table[3].data = &net->ct.sysctl_checksum; table[4].data = &net->ct.sysctl_log_invalid; --- linux-2.6.32.orig/net/netfilter/nf_conntrack_helper.c +++ linux-2.6.32/net/netfilter/nf_conntrack_helper.c @@ -192,7 +192,7 @@ /* Get rid of expecteds, set helpers to NULL. */ hlist_nulls_for_each_entry(h, nn, &net->ct.unconfirmed, hnnode) unhelp(h, me); - for (i = 0; i < nf_conntrack_htable_size; i++) { + for (i = 0; i < net->ct.htable_size; i++) { hlist_nulls_for_each_entry(h, nn, &net->ct.hash[i], hnnode) unhelp(h, me); } --- linux-2.6.32.orig/net/netfilter/nf_conntrack_netlink.c +++ linux-2.6.32/net/netfilter/nf_conntrack_netlink.c @@ -594,7 +594,7 @@ rcu_read_lock(); last = (struct nf_conn *)cb->args[1]; - for (; cb->args[0] < nf_conntrack_htable_size; cb->args[0]++) { + for (; cb->args[0] < init_net.ct.htable_size; cb->args[0]++) { restart: hlist_nulls_for_each_entry_rcu(h, n, &init_net.ct.hash[cb->args[0]], hnnode) { --- linux-2.6.32.orig/net/netfilter/nf_conntrack_core.c +++ linux-2.6.32/net/netfilter/nf_conntrack_core.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -63,8 +64,6 @@ struct nf_conn nf_conntrack_untracked __read_mostly; EXPORT_SYMBOL_GPL(nf_conntrack_untracked); -static struct kmem_cache *nf_conntrack_cachep __read_mostly; - static int nf_conntrack_hash_rnd_initted; static unsigned int nf_conntrack_hash_rnd; @@ -86,9 +85,10 @@ return ((u64)h * size) >> 32; } -static inline u_int32_t hash_conntrack(const struct nf_conntrack_tuple *tuple) +static inline u_int32_t hash_conntrack(const struct net *net, + const struct nf_conntrack_tuple *tuple) { - return __hash_conntrack(tuple, nf_conntrack_htable_size, + return __hash_conntrack(tuple, net->ct.htable_size, nf_conntrack_hash_rnd); } @@ -296,7 +296,7 @@ { struct nf_conntrack_tuple_hash *h; struct hlist_nulls_node *n; - unsigned int hash = hash_conntrack(tuple); + unsigned int hash = hash_conntrack(net, tuple); /* Disable BHs the entire time since we normally need to disable them * at least once for the stats anyway. @@ -366,10 +366,11 @@ void nf_conntrack_hash_insert(struct nf_conn *ct) { + struct net *net = nf_ct_net(ct); unsigned int hash, repl_hash; - hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); - repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple); + hash = hash_conntrack(net, &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); + repl_hash = hash_conntrack(net, &ct->tuplehash[IP_CT_DIR_REPLY].tuple); __nf_conntrack_hash_insert(ct, hash, repl_hash); } @@ -397,8 +398,8 @@ if (CTINFO2DIR(ctinfo) != IP_CT_DIR_ORIGINAL) return NF_ACCEPT; - hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); - repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple); + hash = hash_conntrack(net, &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); + repl_hash = hash_conntrack(net, &ct->tuplehash[IP_CT_DIR_REPLY].tuple); /* We're not in hash table, and we refuse to set up related connections for unconfirmed conns. But packet copies and @@ -468,7 +469,7 @@ struct net *net = nf_ct_net(ignored_conntrack); struct nf_conntrack_tuple_hash *h; struct hlist_nulls_node *n; - unsigned int hash = hash_conntrack(tuple); + unsigned int hash = hash_conntrack(net, tuple); /* Disable BHs the entire time since we need to disable them at * least once for the stats anyway. @@ -503,7 +504,7 @@ int dropped = 0; rcu_read_lock(); - for (i = 0; i < nf_conntrack_htable_size; i++) { + for (i = 0; i < net->ct.htable_size; i++) { hlist_nulls_for_each_entry_rcu(h, n, &net->ct.hash[hash], hnnode) { tmp = nf_ct_tuplehash_to_ctrack(h); @@ -517,7 +518,8 @@ ct = NULL; if (ct || cnt >= NF_CT_EVICTION_RANGE) break; - hash = (hash + 1) % nf_conntrack_htable_size; + + hash = (hash + 1) % net->ct.htable_size; } rcu_read_unlock(); @@ -551,7 +553,7 @@ if (nf_conntrack_max && unlikely(atomic_read(&net->ct.count) > nf_conntrack_max)) { - unsigned int hash = hash_conntrack(orig); + unsigned int hash = hash_conntrack(net, orig); if (!early_drop(net, hash)) { atomic_dec(&net->ct.count); if (net_ratelimit()) @@ -566,7 +568,7 @@ * Do not use kmem_cache_zalloc(), as this cache uses * SLAB_DESTROY_BY_RCU. */ - ct = kmem_cache_alloc(nf_conntrack_cachep, gfp); + ct = kmem_cache_alloc(net->ct.nf_conntrack_cachep, gfp); if (ct == NULL) { pr_debug("nf_conntrack_alloc: Can't alloc conntrack.\n"); atomic_dec(&net->ct.count); @@ -605,7 +607,7 @@ nf_ct_ext_destroy(ct); atomic_dec(&net->ct.count); nf_ct_ext_free(ct); - kmem_cache_free(nf_conntrack_cachep, ct); + kmem_cache_free(net->ct.nf_conntrack_cachep, ct); } EXPORT_SYMBOL_GPL(nf_conntrack_free); @@ -1008,7 +1010,7 @@ struct hlist_nulls_node *n; spin_lock_bh(&nf_conntrack_lock); - for (; *bucket < nf_conntrack_htable_size; (*bucket)++) { + for (; *bucket < net->ct.htable_size; (*bucket)++) { hlist_nulls_for_each_entry(h, n, &net->ct.hash[*bucket], hnnode) { ct = nf_ct_tuplehash_to_ctrack(h); if (iter(ct, data)) @@ -1107,9 +1109,12 @@ static void nf_conntrack_cleanup_init_net(void) { + /* wait until all references to nf_conntrack_untracked are dropped */ + while (atomic_read(&nf_conntrack_untracked.ct_general.use) > 1) + schedule(); + nf_conntrack_helper_fini(); nf_conntrack_proto_fini(); - kmem_cache_destroy(nf_conntrack_cachep); } static void nf_conntrack_cleanup_net(struct net *net) @@ -1121,15 +1126,14 @@ schedule(); goto i_see_dead_people; } - /* wait until all references to nf_conntrack_untracked are dropped */ - while (atomic_read(&nf_conntrack_untracked.ct_general.use) > 1) - schedule(); nf_ct_free_hashtable(net->ct.hash, net->ct.hash_vmalloc, - nf_conntrack_htable_size); + net->ct.htable_size); nf_conntrack_ecache_fini(net); nf_conntrack_acct_fini(net); nf_conntrack_expect_fini(net); + kmem_cache_destroy(net->ct.nf_conntrack_cachep); + kfree(net->ct.slabname); free_percpu(net->ct.stat); } @@ -1184,10 +1188,12 @@ { int i, bucket, vmalloced, old_vmalloced; unsigned int hashsize, old_size; - int rnd; struct hlist_nulls_head *hash, *old_hash; struct nf_conntrack_tuple_hash *h; + if (current->nsproxy->net_ns != &init_net) + return -EOPNOTSUPP; + /* On boot, we can set this without any fancy locking. */ if (!nf_conntrack_htable_size) return param_set_uint(val, kp); @@ -1200,33 +1206,29 @@ if (!hash) return -ENOMEM; - /* We have to rehahs for the new table anyway, so we also can - * use a newrandom seed */ - get_random_bytes(&rnd, sizeof(rnd)); - /* Lookups in the old hash might happen in parallel, which means we * might get false negatives during connection lookup. New connections * created because of a false negative won't make it into the hash * though since that required taking the lock. */ spin_lock_bh(&nf_conntrack_lock); - for (i = 0; i < nf_conntrack_htable_size; i++) { + for (i = 0; i < init_net.ct.htable_size; i++) { while (!hlist_nulls_empty(&init_net.ct.hash[i])) { h = hlist_nulls_entry(init_net.ct.hash[i].first, struct nf_conntrack_tuple_hash, hnnode); hlist_nulls_del_rcu(&h->hnnode); - bucket = __hash_conntrack(&h->tuple, hashsize, rnd); + bucket = __hash_conntrack(&h->tuple, hashsize, + nf_conntrack_hash_rnd); hlist_nulls_add_head_rcu(&h->hnnode, &hash[bucket]); } } - old_size = nf_conntrack_htable_size; + old_size = init_net.ct.htable_size; old_vmalloced = init_net.ct.hash_vmalloc; old_hash = init_net.ct.hash; - nf_conntrack_htable_size = hashsize; + init_net.ct.htable_size = nf_conntrack_htable_size = hashsize; init_net.ct.hash_vmalloc = vmalloced; init_net.ct.hash = hash; - nf_conntrack_hash_rnd = rnd; spin_unlock_bh(&nf_conntrack_lock); nf_ct_free_hashtable(old_hash, old_vmalloced, old_size); @@ -1265,15 +1267,6 @@ NF_CONNTRACK_VERSION, nf_conntrack_htable_size, nf_conntrack_max); - nf_conntrack_cachep = kmem_cache_create("nf_conntrack", - sizeof(struct nf_conn), - 0, SLAB_DESTROY_BY_RCU, NULL); - if (!nf_conntrack_cachep) { - printk(KERN_ERR "Unable to create nf_conn slab cache\n"); - ret = -ENOMEM; - goto err_cache; - } - ret = nf_conntrack_proto_init(); if (ret < 0) goto err_proto; @@ -1282,13 +1275,19 @@ if (ret < 0) goto err_helper; + /* Set up fake conntrack: to never be deleted, not in any hashes */ +#ifdef CONFIG_NET_NS + nf_conntrack_untracked.ct_net = &init_net; +#endif + atomic_set(&nf_conntrack_untracked.ct_general.use, 1); + /* - and look it like as a confirmed connection */ + set_bit(IPS_CONFIRMED_BIT, &nf_conntrack_untracked.status); + return 0; err_helper: nf_conntrack_proto_fini(); err_proto: - kmem_cache_destroy(nf_conntrack_cachep); -err_cache: return ret; } @@ -1310,7 +1309,24 @@ ret = -ENOMEM; goto err_stat; } - net->ct.hash = nf_ct_alloc_hashtable(&nf_conntrack_htable_size, + + net->ct.slabname = kasprintf(GFP_KERNEL, "nf_conntrack_%p", net); + if (!net->ct.slabname) { + ret = -ENOMEM; + goto err_slabname; + } + + net->ct.nf_conntrack_cachep = kmem_cache_create(net->ct.slabname, + sizeof(struct nf_conn), 0, + SLAB_DESTROY_BY_RCU, NULL); + if (!net->ct.nf_conntrack_cachep) { + printk(KERN_ERR "Unable to create nf_conn slab cache\n"); + ret = -ENOMEM; + goto err_cache; + } + + net->ct.htable_size = nf_conntrack_htable_size; + net->ct.hash = nf_ct_alloc_hashtable(&net->ct.htable_size, &net->ct.hash_vmalloc, 1); if (!net->ct.hash) { ret = -ENOMEM; @@ -1327,15 +1343,6 @@ if (ret < 0) goto err_ecache; - /* Set up fake conntrack: - - to never be deleted, not in any hashes */ -#ifdef CONFIG_NET_NS - nf_conntrack_untracked.ct_net = &init_net; -#endif - atomic_set(&nf_conntrack_untracked.ct_general.use, 1); - /* - and look it like as a confirmed connection */ - set_bit(IPS_CONFIRMED_BIT, &nf_conntrack_untracked.status); - return 0; err_ecache: @@ -1344,8 +1351,12 @@ nf_conntrack_expect_fini(net); err_expect: nf_ct_free_hashtable(net->ct.hash, net->ct.hash_vmalloc, - nf_conntrack_htable_size); + net->ct.htable_size); err_hash: + kmem_cache_destroy(net->ct.nf_conntrack_cachep); +err_cache: + kfree(net->ct.slabname); +err_slabname: free_percpu(net->ct.stat); err_stat: return ret; --- linux-2.6.32.orig/net/netfilter/nf_conntrack_ftp.c +++ linux-2.6.32/net/netfilter/nf_conntrack_ftp.c @@ -323,24 +323,24 @@ struct nf_ct_ftp_master *info, int dir, struct sk_buff *skb) { - unsigned int i, oldest = NUM_SEQ_TO_REMEMBER; + unsigned int i, oldest; /* Look for oldest: if we find exact match, we're done. */ for (i = 0; i < info->seq_aft_nl_num[dir]; i++) { if (info->seq_aft_nl[dir][i] == nl_seq) return; - - if (oldest == info->seq_aft_nl_num[dir] || - before(info->seq_aft_nl[dir][i], - info->seq_aft_nl[dir][oldest])) - oldest = i; } if (info->seq_aft_nl_num[dir] < NUM_SEQ_TO_REMEMBER) { info->seq_aft_nl[dir][info->seq_aft_nl_num[dir]++] = nl_seq; - } else if (oldest != NUM_SEQ_TO_REMEMBER && - after(nl_seq, info->seq_aft_nl[dir][oldest])) { - info->seq_aft_nl[dir][oldest] = nl_seq; + } else { + if (before(info->seq_aft_nl[dir][0], info->seq_aft_nl[dir][1])) + oldest = 0; + else + oldest = 1; + + if (after(nl_seq, info->seq_aft_nl[dir][oldest])) + info->seq_aft_nl[dir][oldest] = nl_seq; } } --- linux-2.6.32.orig/net/netfilter/xt_conntrack.c +++ linux-2.6.32/net/netfilter/xt_conntrack.c @@ -113,7 +113,8 @@ } static bool -conntrack_mt(const struct sk_buff *skb, const struct xt_match_param *par) +conntrack_mt(const struct sk_buff *skb, const struct xt_match_param *par, + u16 state_mask, u16 status_mask) { const struct xt_conntrack_mtinfo2 *info = par->matchinfo; enum ip_conntrack_info ctinfo; @@ -136,7 +137,7 @@ if (test_bit(IPS_DST_NAT_BIT, &ct->status)) statebit |= XT_CONNTRACK_STATE_DNAT; } - if (!!(info->state_mask & statebit) ^ + if (!!(state_mask & statebit) ^ !(info->invert_flags & XT_CONNTRACK_STATE)) return false; } @@ -172,7 +173,7 @@ return false; if ((info->match_flags & XT_CONNTRACK_STATUS) && - (!!(info->status_mask & ct->status) ^ + (!!(status_mask & ct->status) ^ !(info->invert_flags & XT_CONNTRACK_STATUS))) return false; @@ -192,11 +193,17 @@ static bool conntrack_mt_v1(const struct sk_buff *skb, const struct xt_match_param *par) { - const struct xt_conntrack_mtinfo2 *const *info = par->matchinfo; - struct xt_match_param newpar = *par; + const struct xt_conntrack_mtinfo1 *info = par->matchinfo; - newpar.matchinfo = *info; - return conntrack_mt(skb, &newpar); + return conntrack_mt(skb, par, info->state_mask, info->status_mask); +} + +static bool +conntrack_mt_v2(const struct sk_buff *skb, const struct xt_match_param *par) +{ + const struct xt_conntrack_mtinfo2 *info = par->matchinfo; + + return conntrack_mt(skb, par, info->state_mask, info->status_mask); } static bool conntrack_mt_check(const struct xt_mtchk_param *par) @@ -209,45 +216,11 @@ return true; } -static bool conntrack_mt_check_v1(const struct xt_mtchk_param *par) -{ - struct xt_conntrack_mtinfo1 *info = par->matchinfo; - struct xt_conntrack_mtinfo2 *up; - int ret = conntrack_mt_check(par); - - if (ret < 0) - return ret; - - up = kmalloc(sizeof(*up), GFP_KERNEL); - if (up == NULL) { - nf_ct_l3proto_module_put(par->family); - return -ENOMEM; - } - - /* - * The strategy here is to minimize the overhead of v1 matching, - * by prebuilding a v2 struct and putting the pointer into the - * v1 dataspace. - */ - memcpy(up, info, offsetof(typeof(*info), state_mask)); - up->state_mask = info->state_mask; - up->status_mask = info->status_mask; - *(void **)info = up; - return true; -} - static void conntrack_mt_destroy(const struct xt_mtdtor_param *par) { nf_ct_l3proto_module_put(par->family); } -static void conntrack_mt_destroy_v1(const struct xt_mtdtor_param *par) -{ - struct xt_conntrack_mtinfo2 **info = par->matchinfo; - kfree(*info); - conntrack_mt_destroy(par); -} - static struct xt_match conntrack_mt_reg[] __read_mostly = { { .name = "conntrack", @@ -255,8 +228,8 @@ .family = NFPROTO_UNSPEC, .matchsize = sizeof(struct xt_conntrack_mtinfo1), .match = conntrack_mt_v1, - .checkentry = conntrack_mt_check_v1, - .destroy = conntrack_mt_destroy_v1, + .checkentry = conntrack_mt_check, + .destroy = conntrack_mt_destroy, .me = THIS_MODULE, }, { @@ -264,7 +237,7 @@ .revision = 2, .family = NFPROTO_UNSPEC, .matchsize = sizeof(struct xt_conntrack_mtinfo2), - .match = conntrack_mt, + .match = conntrack_mt_v2, .checkentry = conntrack_mt_check, .destroy = conntrack_mt_destroy, .me = THIS_MODULE, --- linux-2.6.32.orig/net/netfilter/nf_conntrack_expect.c +++ linux-2.6.32/net/netfilter/nf_conntrack_expect.c @@ -569,7 +569,7 @@ #endif /* CONFIG_PROC_FS */ } -module_param_named(expect_hashsize, nf_ct_expect_hsize, uint, 0600); +module_param_named(expect_hashsize, nf_ct_expect_hsize, uint, 0400); int nf_conntrack_expect_init(struct net *net) { @@ -577,7 +577,7 @@ if (net_eq(net, &init_net)) { if (!nf_ct_expect_hsize) { - nf_ct_expect_hsize = nf_conntrack_htable_size / 256; + nf_ct_expect_hsize = net->ct.htable_size / 256; if (!nf_ct_expect_hsize) nf_ct_expect_hsize = 1; } --- linux-2.6.32.orig/net/netfilter/ipvs/ip_vs_ctl.c +++ linux-2.6.32/net/netfilter/ipvs/ip_vs_ctl.c @@ -2714,6 +2714,8 @@ if (!(nla_af && (nla_fwmark || (nla_port && nla_protocol && nla_addr)))) return -EINVAL; + memset(usvc, 0, sizeof(*usvc)); + usvc->af = nla_get_u16(nla_af); #ifdef CONFIG_IP_VS_IPV6 if (usvc->af != AF_INET && usvc->af != AF_INET6) @@ -2901,6 +2903,8 @@ if (!(nla_addr && nla_port)) return -EINVAL; + memset(udest, 0, sizeof(*udest)); + nla_memcpy(&udest->addr, nla_addr, sizeof(udest->addr)); udest->port = nla_get_u16(nla_port); --- linux-2.6.32.orig/net/dccp/probe.c +++ linux-2.6.32/net/dccp/probe.c @@ -164,7 +164,8 @@ if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &dccpprobe_fops)) goto err0; - ret = register_jprobe(&dccp_send_probe); + ret = try_then_request_module((register_jprobe(&dccp_send_probe) == 0), + "dccp"); if (ret) goto err1; --- linux-2.6.32.orig/net/sunrpc/svcauth_unix.c +++ linux-2.6.32/net/sunrpc/svcauth_unix.c @@ -655,23 +655,25 @@ return NULL; } -static int unix_gid_find(uid_t uid, struct group_info **gip, - struct svc_rqst *rqstp) +static struct group_info *unix_gid_find(uid_t uid, struct svc_rqst *rqstp) { - struct unix_gid *ug = unix_gid_lookup(uid); + struct unix_gid *ug; + struct group_info *gi; + int ret; + + ug = unix_gid_lookup(uid); if (!ug) - return -EAGAIN; - switch (cache_check(&unix_gid_cache, &ug->h, &rqstp->rq_chandle)) { + return ERR_PTR(-EAGAIN); + ret = cache_check(&unix_gid_cache, &ug->h, &rqstp->rq_chandle); + switch (ret) { case -ENOENT: - *gip = NULL; - return 0; + return ERR_PTR(-ENOENT); case 0: - *gip = ug->gi; - get_group_info(*gip); + gi = get_group_info(ug->gi); cache_put(&ug->h, &unix_gid_cache); - return 0; + return gi; default: - return -EAGAIN; + return ERR_PTR(-EAGAIN); } } @@ -681,6 +683,8 @@ struct sockaddr_in *sin; struct sockaddr_in6 *sin6, sin6_storage; struct ip_map *ipm; + struct group_info *gi; + struct svc_cred *cred = &rqstp->rq_cred; switch (rqstp->rq_addr.ss_family) { case AF_INET: @@ -722,6 +726,17 @@ ip_map_cached_put(rqstp, ipm); break; } + + gi = unix_gid_find(cred->cr_uid, rqstp); + switch (PTR_ERR(gi)) { + case -EAGAIN: + return SVC_DROP; + case -ENOENT: + break; + default: + put_group_info(cred->cr_group_info); + cred->cr_group_info = gi; + } return SVC_OK; } @@ -818,19 +833,11 @@ slen = svc_getnl(argv); /* gids length */ if (slen > 16 || (len -= (slen + 2)*4) < 0) goto badcred; - if (unix_gid_find(cred->cr_uid, &cred->cr_group_info, rqstp) - == -EAGAIN) + cred->cr_group_info = groups_alloc(slen); + if (cred->cr_group_info == NULL) return SVC_DROP; - if (cred->cr_group_info == NULL) { - cred->cr_group_info = groups_alloc(slen); - if (cred->cr_group_info == NULL) - return SVC_DROP; - for (i = 0; i < slen; i++) - GROUP_AT(cred->cr_group_info, i) = svc_getnl(argv); - } else { - for (i = 0; i < slen ; i++) - svc_getnl(argv); - } + for (i = 0; i < slen; i++) + GROUP_AT(cred->cr_group_info, i) = svc_getnl(argv); if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) { *authp = rpc_autherr_badverf; return SVC_DENIED; --- linux-2.6.32.orig/net/sunrpc/svc_xprt.c +++ linux-2.6.32/net/sunrpc/svc_xprt.c @@ -711,7 +711,10 @@ spin_unlock_bh(&pool->sp_lock); len = 0; - if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) { + if (test_bit(XPT_CLOSE, &xprt->xpt_flags)) { + dprintk("svc_recv: found XPT_CLOSE\n"); + svc_delete_xprt(xprt); + } else if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) { struct svc_xprt *newxpt; newxpt = xprt->xpt_ops->xpo_accept(xprt); if (newxpt) { @@ -737,7 +740,7 @@ svc_xprt_received(newxpt); } svc_xprt_received(xprt); - } else if (!test_bit(XPT_CLOSE, &xprt->xpt_flags)) { + } else { dprintk("svc: server %p, pool %u, transport %p, inuse=%d\n", rqstp, pool->sp_id, xprt, atomic_read(&xprt->xpt_ref.refcount)); @@ -750,11 +753,6 @@ dprintk("svc: got len=%d\n", len); } - if (test_bit(XPT_CLOSE, &xprt->xpt_flags)) { - dprintk("svc_recv: found XPT_CLOSE\n"); - svc_delete_xprt(xprt); - } - /* No data, incomplete (TCP) read, or accept() */ if (len == 0 || len == -EAGAIN) { rqstp->rq_res.len = 0; @@ -900,11 +898,8 @@ if (test_bit(XPT_TEMP, &xprt->xpt_flags)) serv->sv_tmpcnt--; - for (dr = svc_deferred_dequeue(xprt); dr; - dr = svc_deferred_dequeue(xprt)) { - svc_xprt_put(xprt); + while ((dr = svc_deferred_dequeue(xprt)) != NULL) kfree(dr); - } svc_xprt_put(xprt); spin_unlock_bh(&serv->sv_lock); --- linux-2.6.32.orig/net/sunrpc/xprtsock.c +++ linux-2.6.32/net/sunrpc/xprtsock.c @@ -1926,6 +1926,11 @@ case -EALREADY: xprt_clear_connecting(xprt); return; + case -EINVAL: + /* Happens, for instance, if the user specified a link + * local IPv6 address without a scope-id. + */ + goto out; } out_eagain: status = -EAGAIN; --- linux-2.6.32.orig/net/sunrpc/svcsock.c +++ linux-2.6.32/net/sunrpc/svcsock.c @@ -968,6 +968,7 @@ return len; err_delete: set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags); + svc_xprt_received(&svsk->sk_xprt); err_again: return -EAGAIN; } --- linux-2.6.32.orig/net/sunrpc/rpc_pipe.c +++ linux-2.6.32/net/sunrpc/rpc_pipe.c @@ -587,6 +587,8 @@ struct dentry *dentry; dentry = __rpc_lookup_create(parent, name); + if (IS_ERR(dentry)) + return dentry; if (dentry->d_inode == NULL) return dentry; dput(dentry); --- linux-2.6.32.orig/net/sunrpc/auth_gss/gss_krb5_mech.c +++ linux-2.6.32/net/sunrpc/auth_gss/gss_krb5_mech.c @@ -131,8 +131,10 @@ struct krb5_ctx *ctx; int tmp; - if (!(ctx = kzalloc(sizeof(*ctx), GFP_NOFS))) + if (!(ctx = kzalloc(sizeof(*ctx), GFP_NOFS))) { + p = ERR_PTR(-ENOMEM); goto out_err; + } p = simple_get_bytes(p, end, &ctx->initiate, sizeof(ctx->initiate)); if (IS_ERR(p)) --- linux-2.6.32.orig/net/sunrpc/auth_gss/auth_gss.c +++ linux-2.6.32/net/sunrpc/auth_gss/auth_gss.c @@ -485,7 +485,7 @@ dprintk("RPC: %5u gss_refresh_upcall for uid %u\n", task->tk_pid, cred->cr_uid); gss_msg = gss_setup_upcall(task->tk_client, gss_auth, cred); - if (IS_ERR(gss_msg) == -EAGAIN) { + if (PTR_ERR(gss_msg) == -EAGAIN) { /* XXX: warning on the first, under the assumption we * shouldn't normally hit this case on a refresh. */ warn_gssd(); @@ -644,7 +644,22 @@ p = gss_fill_context(p, end, ctx, gss_msg->auth->mech); if (IS_ERR(p)) { err = PTR_ERR(p); - gss_msg->msg.errno = (err == -EAGAIN) ? -EAGAIN : -EACCES; + switch (err) { + case -EACCES: + gss_msg->msg.errno = err; + err = mlen; + break; + case -EFAULT: + case -ENOMEM: + case -EINVAL: + case -ENOSYS: + gss_msg->msg.errno = -EAGAIN; + break; + default: + printk(KERN_CRIT "%s: bad return from " + "gss_fill_context: %ld\n", __func__, err); + BUG(); + } goto err_release_msg; } gss_msg->ctx = gss_get_ctx(ctx); @@ -1258,9 +1273,8 @@ rqstp->rq_release_snd_buf = priv_release_snd_buf; return 0; out_free: - for (i--; i >= 0; i--) { - __free_page(rqstp->rq_enc_pages[i]); - } + rqstp->rq_enc_pages_num = i; + priv_release_snd_buf(rqstp); out: return -EAGAIN; } --- linux-2.6.32.orig/net/sunrpc/auth_gss/gss_mech_switch.c +++ linux-2.6.32/net/sunrpc/auth_gss/gss_mech_switch.c @@ -252,7 +252,7 @@ struct gss_ctx **ctx_id) { if (!(*ctx_id = kzalloc(sizeof(**ctx_id), GFP_KERNEL))) - return GSS_S_FAILURE; + return -ENOMEM; (*ctx_id)->mech_type = gss_mech_get(mech); return mech->gm_ops --- linux-2.6.32.orig/net/ipv6/exthdrs.c +++ linux-2.6.32/net/ipv6/exthdrs.c @@ -559,6 +559,11 @@ return skb_dst(skb) ? ip6_dst_idev(skb_dst(skb)) : __in6_dev_get(skb->dev); } +static inline struct net *ipv6_skb_net(struct sk_buff *skb) +{ + return skb_dst(skb) ? dev_net(skb_dst(skb)->dev) : dev_net(skb->dev); +} + /* Router Alert as of RFC 2711 */ static int ipv6_hop_ra(struct sk_buff *skb, int optoff) @@ -580,8 +585,8 @@ static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff) { const unsigned char *nh = skb_network_header(skb); + struct net *net = ipv6_skb_net(skb); u32 pkt_len; - struct net *net = dev_net(skb_dst(skb)->dev); if (nh[optoff + 1] != 4 || (optoff & 3) != 2) { LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n", --- linux-2.6.32.orig/net/ipv6/addrconf.c +++ linux-2.6.32/net/ipv6/addrconf.c @@ -504,8 +504,11 @@ if (p == &net->ipv6.devconf_dflt->forwarding) return 0; - if (!rtnl_trylock()) + if (!rtnl_trylock()) { + /* Restore the original values before restarting */ + *p = old; return restart_syscall(); + } if (p == &net->ipv6.devconf_all->forwarding) { __s32 newf = net->ipv6.devconf_all->forwarding; @@ -3991,12 +3994,15 @@ { int *valp = ctl->data; int val = *valp; + loff_t pos = *ppos; int ret; ret = proc_dointvec(ctl, write, buffer, lenp, ppos); if (write) ret = addrconf_fixup_forwarding(ctl, valp, val); + if (ret) + *ppos = pos; return ret; } @@ -4075,8 +4081,11 @@ if (p == &net->ipv6.devconf_dflt->disable_ipv6) return 0; - if (!rtnl_trylock()) + if (!rtnl_trylock()) { + /* Restore the original values before restarting */ + *p = old; return restart_syscall(); + } if (p == &net->ipv6.devconf_all->disable_ipv6) { __s32 newf = net->ipv6.devconf_all->disable_ipv6; @@ -4095,12 +4104,15 @@ { int *valp = ctl->data; int val = *valp; + loff_t pos = *ppos; int ret; ret = proc_dointvec(ctl, write, buffer, lenp, ppos); if (write) ret = addrconf_disable_ipv6(ctl, valp, val); + if (ret) + *ppos = pos; return ret; } --- linux-2.6.32.orig/net/ipv6/reassembly.c +++ linux-2.6.32/net/ipv6/reassembly.c @@ -72,6 +72,7 @@ struct inet_frag_queue q; __be32 id; /* fragment id */ + u32 user; struct in6_addr saddr; struct in6_addr daddr; @@ -141,7 +142,7 @@ struct ip6_create_arg *arg = a; fq = container_of(q, struct frag_queue, q); - return (fq->id == arg->id && + return (fq->id == arg->id && fq->user == arg->user && ipv6_addr_equal(&fq->saddr, arg->src) && ipv6_addr_equal(&fq->daddr, arg->dst)); } @@ -163,6 +164,7 @@ struct ip6_create_arg *arg = a; fq->id = arg->id; + fq->user = arg->user; ipv6_addr_copy(&fq->saddr, arg->src); ipv6_addr_copy(&fq->daddr, arg->dst); } @@ -244,6 +246,7 @@ unsigned int hash; arg.id = id; + arg.user = IP6_DEFRAG_LOCAL_DELIVER; arg.src = src; arg.dst = dst; --- linux-2.6.32.orig/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +++ linux-2.6.32/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -187,6 +188,21 @@ return nf_conntrack_confirm(skb); } +static enum ip6_defrag_users nf_ct6_defrag_user(unsigned int hooknum, + struct sk_buff *skb) +{ +#ifdef CONFIG_BRIDGE_NETFILTER + if (skb->nf_bridge && + skb->nf_bridge->mask & BRNF_NF_BRIDGE_PREROUTING) + return IP6_DEFRAG_CONNTRACK_BRIDGE_IN; +#endif + if (hooknum == NF_INET_PRE_ROUTING) + return IP6_DEFRAG_CONNTRACK_IN; + else + return IP6_DEFRAG_CONNTRACK_OUT; + +} + static unsigned int ipv6_defrag(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, @@ -199,8 +215,7 @@ if (skb->nfct) return NF_ACCEPT; - reasm = nf_ct_frag6_gather(skb); - + reasm = nf_ct_frag6_gather(skb, nf_ct6_defrag_user(hooknum, skb)); /* queued */ if (reasm == NULL) return NF_STOLEN; --- linux-2.6.32.orig/net/ipv6/netfilter/nf_conntrack_reasm.c +++ linux-2.6.32/net/ipv6/netfilter/nf_conntrack_reasm.c @@ -63,6 +63,7 @@ struct inet_frag_queue q; __be32 id; /* fragment id */ + u32 user; struct in6_addr saddr; struct in6_addr daddr; @@ -170,13 +171,14 @@ /* Creation primitives. */ static __inline__ struct nf_ct_frag6_queue * -fq_find(__be32 id, struct in6_addr *src, struct in6_addr *dst) +fq_find(__be32 id, u32 user, struct in6_addr *src, struct in6_addr *dst) { struct inet_frag_queue *q; struct ip6_create_arg arg; unsigned int hash; arg.id = id; + arg.user = user; arg.src = src; arg.dst = dst; @@ -561,7 +563,7 @@ return 0; } -struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb) +struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb, u32 user) { struct sk_buff *clone; struct net_device *dev = skb->dev; @@ -607,7 +609,7 @@ if (atomic_read(&nf_init_frags.mem) > nf_init_frags.high_thresh) nf_ct_frag6_evictor(); - fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr); + fq = fq_find(fhdr->identification, user, &hdr->saddr, &hdr->daddr); if (fq == NULL) { pr_debug("Can't find and can't create new queue\n"); goto ret_orig; --- linux-2.6.32.orig/net/ipv6/netfilter/ip6_tables.c +++ linux-2.6.32/net/ipv6/netfilter/ip6_tables.c @@ -1164,10 +1164,10 @@ if (t && !IS_ERR(t)) { struct ip6t_getinfo info; const struct xt_table_info *private = t->private; - #ifdef CONFIG_COMPAT + struct xt_table_info tmp; + if (compat) { - struct xt_table_info tmp; ret = compat_table_info(private, &tmp); xt_compat_flush_offsets(AF_INET6); private = &tmp; --- linux-2.6.32.orig/debian/rules +++ linux-2.6.32/debian/rules @@ -0,0 +1,226 @@ +#!/usr/bin/make -f +# +# $(DEBIAN)/rules for Ubuntu linux +# +# Use this however you want, just give credit where credit is due. +# +# Copyright (c) 2007 Ben Collins +# + +DEBIAN=$(shell awk -F= '($$1 == "DEBIAN") { print $$2 }' $$new; \ + done + flavours="$(wildcard $(DEBIAN)/control.d/vars.* $(DEBIAN)/sub-flavours/*.vars)";\ + for i in $$flavours; do \ + $(SHELL) $(DROOT)/scripts/control-create $$i | \ + sed -e 's/PKGVER/$(release)/g' \ + -e 's/ABINUM/$(abinum)/g' \ + -e 's/SRCPKGNAME/$(src_pkg_name)/g' \ + >> $(DEBIAN)/control.stub; \ + done + cp $(DEBIAN)/control.stub $(DEBIAN)/control + +.PHONY: debian/control +debian/control: $(DEBIAN)/control.stub + rm -rf $(builddir)/modules $(builddir)/firmware \ + $(builddir)/kernel-versions $(builddir)/package-list \ + $(builddir)/$(DEBIAN) + mkdir -p $(builddir)/modules/$(arch)/ + cp $(DEBIAN)/d-i/modules/* $(builddir)/modules/$(arch)/ + mkdir -p $(builddir)/firmware/$(arch)/ + cp $(DEBIAN)/d-i/firmware/* $(builddir)/firmware/$(arch)/ + cp $(DEBIAN)/d-i/package-list $(DEBIAN)/d-i/kernel-versions $(builddir)/ + touch $(builddir)/modules/$(arch)/kernel-image + # kernel-wedge needs to poke around in $(DEBIAN)/ + ln -nsf $(CURDIR)/debian $(builddir)/debian + + # Some files may need to differ between architectures + if [ -d $(DEBIAN)/d-i/modules-$(arch) ]; then \ + cp $(DEBIAN)/d-i/modules-$(arch)/* \ + $(builddir)/modules/$(arch)/; \ + fi + if [ -d $(DEBIAN)/d-i/firmware-$(arch) ]; then \ + cp $(DEBIAN)/d-i/firmware-$(arch)/* \ + $(builddir)/firmware/$(arch)/; \ + fi + + # Remove unwanted stuff for this architecture + if [ -r "$(DEBIAN)/d-i/exclude-modules.$(arch)" ]; then \ + (cat $(DEBIAN)/d-i/exclude-modules.$(arch); \ + ls $(builddir)/modules/$(arch)/) | sort | uniq -d | \ + (cd $(builddir)/modules/$(arch)/; xargs rm -f); \ + fi + if [ -r "$(DEBIAN)/d-i/exclude-firmware.$(arch)" ]; then \ + (cat $(DEBIAN)/d-i/exclude-firmware.$(arch); \ + ls $(builddir)/firmware/$(arch)/) | sort | uniq -d | \ + (cd $(builddir)/firmware/$(arch)/; xargs rm -f); \ + fi + + # Per flavour module lists + flavour_modules=`ls $(DEBIAN)/d-i/modules.$(arch)-* 2>/dev/null` \ + || true; \ + if [ "$$flavour_modules" != "" ]; then \ + for flav in $$flavour_modules; do \ + name=`echo $$flav | sed 's/.*\/modules.$(arch)-//'`; \ + mkdir $(builddir)/modules/$(arch)-$$name; \ + (cd $(builddir)/modules/; tar cf - `cat ../$$flav`) | \ + (cd $(builddir)/modules/$(arch)-$$name/; tar xf -); \ + touch $(builddir)/modules/$(arch)-$$name/kernel-image; \ + done; \ + fi + flavour_firmware=`ls $(DEBIAN)/d-i/firmware.$(arch)-* 2>/dev/null` \ + || true; \ + if [ "$$flavour_firmware" != "" ]; then \ + for flav in $$flavour_firmware; do \ + name=`echo $$flav | sed 's/.*\/firmware.$(arch)-//'`; \ + mkdir $(builddir)/firmware/$(arch)-$$name; \ + (cd $(builddir)/firmware/; tar cf - `cat ../$$flav`) | \ + (cd $(builddir)/firmware/$(arch)-$$name/; tar xf -);\ + touch $(builddir)/firmware/$(arch)-$$name/kernel-image; \ + done; \ + fi + + # Some files may need to differ between flavours + flavour_module_dirs=`ls -d $(DEBIAN)/d-i/modules-$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_module_dirs" ]; then \ + for flav in $$flavour_module_dirs; do \ + name=`echo $$flav | sed 's/.*\/modules-$(arch)-//'`; \ + [ -d $(builddir)/modules/$(arch)-$$name ] || \ + cp -a $(builddir)/modules/$(arch) \ + modules/$(arch)-$$name; \ + cp $$flav/* $(builddir)/modules/$(arch)-$$name/; \ + done; \ + fi + flavour_firmware_dirs=`ls -d $(DEBIAN)/d-i/firmware-$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_firmware_dirs" ]; then \ + for flav in $$flavour_firmware_dirs; do \ + name=`echo $$flav | sed 's/.*\/firmware-$(arch)-//'`; \ + [ -d $(builddir)/firmware/$(arch)-$$name ] || \ + cp -a $(builddir)/firmware/$(arch) \ + firmware/$(arch)-$$name; \ + cp $$flav/* $(builddir)/firmware/$(arch)-$$name/; \ + done; \ + fi + + # Remove unwanted stuff for each flavour + flavour_exclude=`ls $(DEBIAN)/d-i/exclude-modules.$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_exclude" ]; then \ + for flav in $$flavour_exclude; do \ + name=`echo $$flav | sed 's/.*\/exclude-modules.$(arch)-//'`;\ + [ -d $(builddir)/modules/$(arch)-$$name ] || \ + cp -a $(builddir)/modules/$(arch) \ + $(builddir)/modules/$(arch)-$$name; \ + (cat $$flav; \ + ls $(builddir)/modules/$(arch)-$$name) | \ + sort | uniq -d | \ + (cd $(builddir)/modules/$(arch)-$$name/; \ + xargs rm -f); \ + done; \ + fi + flavour_exclude=`ls $(DEBIAN)/d-i/exclude-firmware.$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_exclude" ]; then \ + for flav in $$flavour_exclude; do \ + name=`echo $$flav | sed 's/.*\/exclude-firmware.$(arch)-//'`;\ + [ -d $(builddir)/firmware/$(arch)-$$name ] || \ + cp -a $(builddir)/firmware/$(arch) \ + $(builddir)/firmware/$(arch)-$$name; \ + (cat $$flav; \ + ls $(builddir)/firmware/$(arch)-$$name) | \ + sort | uniq -d | \ + (cd $(builddir)/firmware/$(arch)-$$name/; \ + xargs rm -f); \ + done; \ + fi + + if [ ! -d $(builddir)/modules/$(build_arch) ]; then \ + mkdir -p $(builddir)/modules/$(build_arch); \ + cp $(builddir)/modules/$(arch)/* \ + $(builddir)/modules/$(build_arch); \ + fi + if [ ! -d $(builddir)/firmware/$(build_arch) ]; then \ + mkdir -p $(builddir)/firmware/$(build_arch); \ + cp $(builddir)/firmware/$(arch)/* \ + $(builddir)/firmware/$(build_arch); \ + fi + + cp $(DEBIAN)/control.stub debian/control.stub + cd $(builddir) && kernel-wedge gen-control > $(CURDIR)/debian/control --- linux-2.6.32.orig/debian/copyright +++ linux-2.6.32/debian/copyright @@ -0,0 +1,29 @@ +This is the Ubuntu prepackaged version of the Linux kernel. +Linux was written by Linus Torvalds +and others. + +This package was put together by the Ubuntu Kernel Team, from +sources retrieved from upstream linux git. +The sources may be found at most Linux ftp sites, including +ftp://ftp.kernel.org/pub/linux/kernel/ + +This package is currently maintained by the +Ubuntu Kernel Team + +Linux is copyrighted by Linus Torvalds and others. + + 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 dated June, 1991. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Ubuntu Linux systems, the complete text of the GNU General +Public License v2 can be found in `/usr/share/common-licenses/GPL-2'. --- linux-2.6.32.orig/debian/debian.env +++ linux-2.6.32/debian/debian.env @@ -0,0 +1 @@ +DEBIAN=debian.master --- linux-2.6.32.orig/debian/compat +++ linux-2.6.32/debian/compat @@ -0,0 +1 @@ +5 --- linux-2.6.32.orig/debian/control +++ linux-2.6.32/debian/control @@ -0,0 +1,1558 @@ +Source: linux +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386 lpia], device-tree-compiler [powerpc], libelf-dev, binutils-dev, rsync +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-lucid.git + +Package: linux-source-2.6.32 +Architecture: all +Section: devel +Priority: optional +Provides: linux-source, linux-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version 2.6.32 with Ubuntu patches + This package provides the source code for the Linux kernel version + 2.6.32. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: linux-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: linux-doc-2.6 +Replaces: linux-doc-2.6 +Description: Linux kernel specific documentation for version 2.6.32 + This package provides the various documents in the 2.6.32 kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/linux-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-tools-common +Architecture: all +Section: admin +Priority: optional +Depends: ${misc:Depends} +Replaces: linux-tools (<= 2.6.32-16.25) +Description: Linux kernel specific tools for version 2.6.32 + This package provides the architecture independent parts for kernel + version locked tools in the 2.6.32 kernel source. + +Package: linux-headers-2.6.32-24 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version 2.6.32 + This package provides kernel header files for version 2.6.32, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details + +Package: linux-libc-dev +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Depends: ${misc:Depends} +Conflicts: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), amd64-libs-dev (<= 1.1), linux-kernel-headers +Replaces: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), linux-kernel-headers, libdrm-dev +Provides: linux-kernel-headers +Description: Linux Kernel Headers for development + This package provides headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system + libraries. They are NOT meant to be used to build third-party modules for + your kernel. Use linux-headers-* packages for that. + +Package: linux-tools-2.6.32-24 +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel tools for version 2.6.32-24 + This package provides the architecture dependant parts for kernel + version locked tools for version 2.6.32-24 on + DESC. + + +Package: linux-image-2.6.32-24-386 +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on i386 + This package contains the Linux kernel image for version 2.6.32 on + i386. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Alternate x86 (486 and better) processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-386 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-386 +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on i386 + This package provides kernel header files for version 2.6.32 on + i386. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-386-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on i386 + This package provides a kernel debug image for version 2.6.32 on + i386. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86/x86_64 + This package provides kernel header files for version 2.6.32 on + x86/x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-dbgsym +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86/x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86/x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic-pae +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86 + This package contains the Linux kernel image for version 2.6.32 on + x86. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward 32 bit desktop systems with more then 4GB RAM. + . + You likely do not want to install this package directly. Instead, install + the linux-generic-pae meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic-pae +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86 + This package provides kernel header files for version 2.6.32 on + x86. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-pae-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86 + This package provides a kernel debug image for version 2.6.32 on + x86. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-ia64 +Architecture: ia64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: elilo (>= 3.6-1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on IA-64 SMP + This package contains the Linux kernel image for version 2.6.32 on + IA-64 SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports IA-64 SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-ia64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-ia64 +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on IA-64 SMP + This package provides kernel header files for version 2.6.32 on + IA-64 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-ia64-dbgsym +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on IA-64 SMP + This package provides a kernel debug image for version 2.6.32 on + IA-64 SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-lpia +Architecture: lpia +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Intel Atom processors + This package contains the Linux kernel image for version 2.6.32 on + Intel Atom processors. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Intel Atom processors. + . + Geared toward LPIA-based mobile devices + . + You likely do not want to install this package directly. Instead, install + the linux-lpia meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-lpia +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Intel Atom processors + This package provides kernel header files for version 2.6.32 on + Intel Atom processors. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-lpia-dbgsym +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Intel Atom processors + This package provides a kernel debug image for version 2.6.32 on + Intel Atom processors. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc64-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-preempt +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Preempt processors. + . + Geared toward low latency systems. + . + You likely do not want to install this package directly. Instead, install + the linux-preempt meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-preempt +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-preempt-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-server +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, kvm-api-4, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Server processors. + . + Geared toward 64 bit server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-server meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-server +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-server-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64 +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64 +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64-smp +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64-smp +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-smp-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-versatile +Architecture: armel +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Versatile-based systems + This package contains the Linux kernel image for version 2.6.32 on + Versatile-based systems. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Versatile processors. + . + PB, AB, Qemu, etc. + . + You likely do not want to install this package directly. Instead, install + the linux-versatile meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-versatile +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Versatile-based systems + This package provides kernel header files for version 2.6.32 on + Versatile-based systems. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-versatile-dbgsym +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Versatile-based systems + This package provides a kernel debug image for version 2.6.32 on + Versatile-based systems. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-virtual +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1), linux-image-2.6.32-24-generic-pae, linux-image-2.6.32-24-server +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32 +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Virtual processors. + . + Geared toward virtual machine guests. + . + You likely do not want to install this package directly. Instead, install + the linux-virtual meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: kernel-image-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: kernel-image +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: extra +Description: Linux kernel binary image for the Debian installer + This package contains the Linux kernel image for the Debian installer + boot images. It does _not_ provide a usable kernel for your full + Debian system. + +Package: nic-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: nic-modules +Depends: kernel-image-2.6.32-24-generic-di, nic-shared-modules-2.6.32-24-generic-di, virtio-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Network interface support + +Package: nic-shared-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: nic-shared-modules +Depends: kernel-image-2.6.32-24-generic-di, crypto-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: nic shared modules + This package contains modules which support nic modules + +Package: serial-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: serial-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Serial port support + +Package: ppp-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: ppp-modules +Depends: kernel-image-2.6.32-24-generic-di, nic-shared-modules-2.6.32-24-generic-di, serial-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: PPP (serial port) networking support + +Package: firewire-core-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: firewire-core-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Firewire (IEEE-1394) Support + +Package: scsi-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: scsi-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: SCSI storage support + +Package: plip-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: plip-modules +Depends: kernel-image-2.6.32-24-generic-di, nic-shared-modules-2.6.32-24-generic-di, parport-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: PLIP (parallel port) networking support + +Package: floppy-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: floppy-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Floppy driver support + +Package: fat-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: fat-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: FAT filesystem support + This includes Windows FAT and VFAT support. + +Package: nfs-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: nfs-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: NFS filesystem drivers + Includes the NFS client driver, and supporting modules. + +Package: md-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: md-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Multi-device support (raid, device-mapper, lvm) + +Package: usb-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: usb-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Core USB support + +Package: pcmcia-storage-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: pcmcia-storage-modules +Depends: kernel-image-2.6.32-24-generic-di, scsi-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: PCMCIA storage support + +Package: fb-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: fb-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Framebuffer modules + +Package: input-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: input-modules +Depends: kernel-image-2.6.32-24-generic-di, usb-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Support for various input methods + +Package: mouse-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: mouse-modules +Depends: kernel-image-2.6.32-24-generic-di, input-modules-2.6.32-24-generic-di, usb-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: extra +Description: Mouse support + This package contains mouse drivers for the Linux kernel. + +Package: irda-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: irda-modules +Depends: kernel-image-2.6.32-24-generic-di, nic-shared-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Support for Infrared protocols + +Package: parport-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: parport-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Parallel port support + +Package: nic-pcmcia-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: nic-pcmcia-modules +Depends: kernel-image-2.6.32-24-generic-di, nic-shared-modules-2.6.32-24-generic-di, nic-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: PCMCIA network interface support + +Package: pcmcia-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: pcmcia-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: PCMCIA Modules + +Package: nic-usb-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: nic-usb-modules +Depends: kernel-image-2.6.32-24-generic-di, nic-shared-modules-2.6.32-24-generic-di, usb-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: USB network interface support + +Package: sata-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: sata-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: SATA storage support + +Package: crypto-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: crypto-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: extra +Description: crypto modules + This package contains crypto modules. + +Package: char-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: char-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Character module support + +Package: fs-core-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: fs-core-modules, jfs-modules, reiserfs-modules, xfs-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Base filesystem modules + This includes jfs, reiserfs and xfs. + +Package: fs-secondary-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: fs-secondary-modules, ntfs-modules, hfs-modules +Depends: kernel-image-2.6.32-24-generic-di, fat-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Extra filesystem modules + This includes support for Windows NTFS and MacOS HFS/HFSPlus + +Package: pata-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: pata-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: PATA support modules + +Package: storage-core-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: storage-core-modules, loop-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Core storage support + Includes core SCSI, LibATA, USB-Storage. Also includes related block + devices for CD, Disk and Tape medium (and IDE Floppy). + +Package: block-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: block-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di, parport-modules-2.6.32-24-generic-di, virtio-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Block storage devices + This package contains the block storage devices, including DAC960 and + paraide. + +Package: message-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: message-modules +Depends: kernel-image-2.6.32-24-generic-di, storage-core-modules-2.6.32-24-generic-di, scsi-modules-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: Fusion and i2o storage modules + This package containes the fusion and i2o storage modules. + +Package: virtio-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: virtio-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: standard +Description: VirtIO Modules + Includes modules for VirtIO (virtual machine, generally kvm guests) + +Package: squashfs-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: squashfs-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: extra +Description: squashfs modules + This package contains squashfs modules. + +Package: vlan-modules-2.6.32-24-generic-di +XC-Package-Type: udeb +Provides: vlan-modules +Depends: kernel-image-2.6.32-24-generic-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic +Section: debian-installer +Priority: extra +Description: vlan modules + This package contains vlan (8021.Q) modules. + +Package: kernel-image-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: kernel-image +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: extra +Description: Linux kernel binary image for the Debian installer + This package contains the Linux kernel image for the Debian installer + boot images. It does _not_ provide a usable kernel for your full + Debian system. + +Package: nic-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: nic-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, nic-shared-modules-2.6.32-24-generic-pae-di, virtio-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Network interface support + +Package: nic-shared-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: nic-shared-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, crypto-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: nic shared modules + This package contains modules which support nic modules + +Package: serial-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: serial-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Serial port support + +Package: ppp-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: ppp-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, nic-shared-modules-2.6.32-24-generic-pae-di, serial-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: PPP (serial port) networking support + +Package: firewire-core-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: firewire-core-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Firewire (IEEE-1394) Support + +Package: scsi-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: scsi-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: SCSI storage support + +Package: plip-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: plip-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, nic-shared-modules-2.6.32-24-generic-pae-di, parport-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: PLIP (parallel port) networking support + +Package: floppy-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: floppy-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Floppy driver support + +Package: fat-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: fat-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: FAT filesystem support + This includes Windows FAT and VFAT support. + +Package: nfs-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: nfs-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: NFS filesystem drivers + Includes the NFS client driver, and supporting modules. + +Package: md-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: md-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Multi-device support (raid, device-mapper, lvm) + +Package: usb-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: usb-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Core USB support + +Package: pcmcia-storage-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: pcmcia-storage-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, scsi-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: PCMCIA storage support + +Package: fb-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: fb-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Framebuffer modules + +Package: input-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: input-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, usb-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Support for various input methods + +Package: mouse-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: mouse-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, input-modules-2.6.32-24-generic-pae-di, usb-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: extra +Description: Mouse support + This package contains mouse drivers for the Linux kernel. + +Package: irda-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: irda-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, nic-shared-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Support for Infrared protocols + +Package: parport-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: parport-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Parallel port support + +Package: nic-pcmcia-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: nic-pcmcia-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, nic-shared-modules-2.6.32-24-generic-pae-di, nic-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: PCMCIA network interface support + +Package: pcmcia-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: pcmcia-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: PCMCIA Modules + +Package: nic-usb-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: nic-usb-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, nic-shared-modules-2.6.32-24-generic-pae-di, usb-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: USB network interface support + +Package: sata-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: sata-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: SATA storage support + +Package: crypto-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: crypto-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: extra +Description: crypto modules + This package contains crypto modules. + +Package: char-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: char-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Character module support + +Package: fs-core-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: fs-core-modules, jfs-modules, reiserfs-modules, xfs-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Base filesystem modules + This includes jfs, reiserfs and xfs. + +Package: fs-secondary-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: fs-secondary-modules, ntfs-modules, hfs-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, fat-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Extra filesystem modules + This includes support for Windows NTFS and MacOS HFS/HFSPlus + +Package: pata-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: pata-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: PATA support modules + +Package: storage-core-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: storage-core-modules, loop-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Core storage support + Includes core SCSI, LibATA, USB-Storage. Also includes related block + devices for CD, Disk and Tape medium (and IDE Floppy). + +Package: block-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: block-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di, parport-modules-2.6.32-24-generic-pae-di, virtio-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Block storage devices + This package contains the block storage devices, including DAC960 and + paraide. + +Package: message-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: message-modules +Depends: kernel-image-2.6.32-24-generic-pae-di, storage-core-modules-2.6.32-24-generic-pae-di, scsi-modules-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: Fusion and i2o storage modules + This package containes the fusion and i2o storage modules. + +Package: virtio-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: virtio-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: standard +Description: VirtIO Modules + Includes modules for VirtIO (virtual machine, generally kvm guests) + +Package: squashfs-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: squashfs-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: extra +Description: squashfs modules + This package contains squashfs modules. + +Package: vlan-modules-2.6.32-24-generic-pae-di +XC-Package-Type: udeb +Provides: vlan-modules +Depends: kernel-image-2.6.32-24-generic-pae-di +Architecture: i386 +XB-Kernel-Version: 2.6.32-24-generic-pae +Section: debian-installer +Priority: extra +Description: vlan modules + This package contains vlan (8021.Q) modules. --- linux-2.6.32.orig/debian/changelog +++ linux-2.6.32/debian/changelog @@ -0,0 +1,4869 @@ +linux (2.6.32-24.39) lucid-security; urgency=low + + [ Upstream Kernel Changes ] + + * sctp: Fix skb_over_panic resulting from multiple invalid parameter + errors (CVE-2010-1173) (v4) + - CVE-2010-1173 + * sctp: fix append error cause to ERROR chunk correctly + - CVE-2010-1173 + * GFS2: Fix writing to non-page aligned gfs2_quota structures + - CVE-2010-1436 + * KEYS: find_keyring_by_name() can gain access to a freed keyring + - CVE-2010-1437 + * GFS2: Fix permissions checking for setflags ioctl() + - CVE-2010-1641 + * Btrfs: should add a permission check for setfacl + - CVE-2010-2071 + * ecryptfs: Bugfix for error related to ecryptfs_hash_buckets + - CVE-2010-2492 + + -- Stefan Bader Wed, 21 Jul 2010 10:48:54 +0200 + +linux (2.6.32-24.38) lucid-proposed; urgency=low + + [ Keng-Yu Lin ] + + * SAUCE: dell-laptop: fire SMI when toggling hardware killswitch + (revised) + - LP: #590607 + + [ Upstream Kernel Changes ] + + * sfc: Wait at most 10ms for the MC to finish reading out MAC statistics + - LP: #590783 + * sfc: Always close net device at the end of a disabling reset + - LP: #590783 + * sfc: Change falcon_probe_board() to fail for unsupported boards + - LP: #590783 + * ext4: Fix potential quota deadlock + - LP: #588069 + * jbd: jbd-debug and jbd2-debug should be writable + - LP: #588069 + * ext4: replace BUG() with return -EIO in ext4_ext_get_blocks + - LP: #588069 + * ext4, jbd2: Add barriers for file systems with exernal journals + - LP: #588069 + * ext4: Eliminate potential double free on error path + - LP: #588069 + * ext4: return correct wbc.nr_to_write in ext4_da_writepages + - LP: #588069 + * ext4: Ensure zeroout blocks have no dirty metadata + - LP: #588069 + * ext4: Patch up how we claim metadata blocks for quota purposes + - LP: #588069 + * ext4: Fix accounting of reserved metadata blocks + - LP: #588069 + * ext4: Calculate metadata requirements more accurately + - LP: #588069 + * ext4: Handle -EDQUOT error on write + - LP: #588069 + * ext4: Fix quota accounting error with fallocate + - LP: #588069 + * ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag + - LP: #588069 + * ext4: Use bitops to read/modify EXT4_I(inode)->i_state + - LP: #588069 + * ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode + - LP: #588069 + * ext4: Add flag to files with blocks intentionally past EOF + - LP: #588069 + * ext4: Fix fencepost error in chosing choosing group vs file + preallocation. + - LP: #588069 + * ext4: fix error handling in migrate + - LP: #588069 + * ext4: explicitly remove inode from orphan list after failed direct io + - LP: #588069 + * ext4: Handle non empty on-disk orphan link + - LP: #588069 + * ext4: make "offset" consistent in ext4_check_dir_entry() + - LP: #588069 + * ext4: Fix insertion point of extent in mext_insert_across_blocks() + - LP: #588069 + * ext4: Fix the NULL reference in double_down_write_data_sem() + - LP: #588069 + * ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl + - LP: #588069 + * ext4: Fix estimate of # of blocks needed to write indirect-mapped files + - LP: #588069 + * ext4: Fixed inode allocator to correctly track a flex_bg's used_dirs + - LP: #588069 + * ext4: Fix possible lost inode write in no journal mode + - LP: #588069 + * ext4: Fix buffer head leaks after calls to ext4_get_inode_loc() + - LP: #588069 + * ext4: Issue the discard operation *before* releasing the blocks to be + reused + - LP: #588069 + * ext4: check missed return value in ext4_sync_file() + - LP: #588069 + * ext4: fix memory leaks in error path handling of ext4_ext_zeroout() + - LP: #588069 + * ext4: Remove unnecessary call to ext4_get_group_desc() in mballoc + - LP: #588069 + * ext4: rename ext4_mb_release_desc() to ext4_mb_unload_buddy() + - LP: #588069 + * ext4: allow defrag (EXT4_IOC_MOVE_EXT) in 32bit compat mode + - LP: #588069 + * ext4: fix quota accounting in case of fallocate + - LP: #588069 + * ext4: check s_log_groups_per_flex in online resize code + - LP: #588069 + * ext4: don't return to userspace after freezing the fs with a mutex held + - LP: #588069 + * ext4: stop issuing discards if not supported by device + - LP: #588069 + * ext4: don't scan/accumulate more pages than mballoc will allocate + - LP: #588069 + * ext4: Do not zero out uninitialized extents beyond i_size + - LP: #588069 + * ext4: clean up inode bitmaps manipulation in ext4_free_inode + - LP: #588069 + * ext4: init statistics after journal recovery + - LP: #588069 + * ext4: Remove extraneous newlines in ext4_msg() calls + - LP: #588069 + * ext4: Prevent creation of files larger than RLIMIT_FSIZE using + fallocate + - LP: #588069 + * ext4: check for a good block group before loading buddy pages + - LP: #588069 + * ext4: Show journal_checksum option + - LP: #588069 + * ext4: Use bitops to read/modify i_flags in struct ext4_inode_info + - LP: #588069 + * ext4: Avoid crashing on NULL ptr dereference on a filesystem error + - LP: #588069 + * ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted + - LP: #588069 + * ext4: restart ext4_ext_remove_space() after transaction restart + - LP: #588069 + * ext4: Conditionally define compat ioctl numbers + - LP: #588069 + * ext4: Fix compat EXT4_IOC_ADD_GROUP + - LP: #588069 + * ext4: Make fsync sync new parent directories in no-journal mode + - LP: #588069 + * (pre-stable) ahci,ata_generic: let ata_generic handle new MBP w/ MCP89 + - LP: #576601 + * (pre-stable) ata_generic: implement ATA_GEN_* flags and force enable + DMA on MBP 7,1 + - LP: #576601 + + -- Steve Conklin Fri, 2 Jul 2010 11:06:32 -0500 + +linux (2.6.32-23.37) lucid-proposed; urgency=low + + [ Alex Deucher ] + + * SAUCE: drm/radeon/kms/atom: fix dual-link DVI on DCE3.2/4.0 + - LP: #564559 + + [ Andy Whitcroft ] + + * [Config] ports -- build in dm-mod to enable LVM boot + - LP: #560717 + * tools -- fix perf version extraction for multi-part flavours + - LP: #555130 + * SAUCE: ACPI: EC: Allow multibyte access to EC (v3) + - LP: #526354 + * [Config] enforce -- ensure dm_mod is built-in for LVM + - LP: #560717 + * update to ubuntu-debian:7e708d33054c373faf41da23b73e8b48c342d958 + - LP: #570500, #576274 + + [ Chase Douglas ] + + * Revert "(pre-stable): input: ALPS - Add signature for HP Pavilion dm3 + laptops" + - LP: #550625 + * Enable ftrace function profiler + - LP: #570389 + * enforce CONFIG_TMPFS_POSIX_ACL=y + - LP: #575940 + + [ Leann Ogasawara ] + + * Revert "staging/comdi -- disable" + - LP: #563436 + * [Config] Enable multicast routing for sparc + - LP: #416266 + * [Config] Add ahci.ko to virtual sub-flavour + - LP: #570542 + + [ Stefan Bader ] + + * Revert "SAUCE: drm/i915: Disable FBC on 915GM and 945GM" + - LP: #588832 + + [ Tim Gardner ] + + * ubuntu: rtl8192se -- update to version 0015.0127.2010 + - LP: #567016 + * [Config] Add atl1c to nic-modules udeb + - LP: #557130 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) iwlwifi: fix nfreed--" + - LP: #575853 + * Revert "backlight: mbp_nvidia_bl - add five more MacBook variants" + - LP: #575853 + * Revert "(pre-stable) pata_via: Add VIA VX900 support" + - LP: #575853 + * Revert "(pre-stable) x86-32, resume: do a global tlb flush in S4 + resume" + - LP: #575853 + * Revert "x86: disable IOMMUs on kernel crash" + - LP: #575853 + * Revert "sunrpc: fix peername failed on closed listener" + - LP: #575853 + * Revert "sunrpc: move the close processing after do recvfrom method" + - LP: #575853 + * Revert "(pre-stable) drm/edid: allow certain bogus edids to hit a fixup + path rather than fail" + - LP: #575853 + * Revert "drm/radeon/kms: don't print error on -ERESTARTSYS." + - LP: #575853 + * Revert "ath9k: fix lockdep warning when unloading module" on stable + kernels + - LP: #588832 + * Staging: comedi: removed "depricated" from COMEDI_CB_BLOCK + - LP: #483343 + * fat: fix buffer overflow in vfat_create_shortname() + - LP: #575853 + * xfs: simplify inode teardown + - LP: #575853 + * xfs: fix mmap_sem/iolock inversion in xfs_free_eofblocks + - LP: #575853 + * xfs: I/O completion handlers must use NOFS allocations + - LP: #575853 + * xfs: Wrapped journal record corruption on read at recovery + - LP: #575853 + * xfs: Fix error return for fallocate() on XFS + - LP: #575853 + * xfs: check for not fully initialized inodes in xfs_ireclaim + - LP: #575853 + * xfs: fix timestamp handling in xfs_setattr + - LP: #575853 + * xfs: Don't flush stale inodes + - LP: #575853 + * xfs: Ensure we force all busy extents in range to disk + - LP: #575853 + * xfs: reclaim inodes under a write lock + - LP: #575853 + * xfs: Avoid inodes in reclaim when flushing from inode cache + - LP: #575853 + * xfs: reclaim all inodes by background tree walks + - LP: #575853 + * xfs: fix stale inode flush avoidance + - LP: #575853 + * xfs: xfs_swap_extents needs to handle dynamic fork offsets + - LP: #575853 + * xfs: quota limit statvfs available blocks + - LP: #575853 + * xfs: don't hold onto reserved blocks on remount, ro + - LP: #575853 + * xfs: remove invalid barrier optimization from xfs_fsync + - LP: #575853 + * xfs: Non-blocking inode locking in IO completion + - LP: #575853 + * xfs: fix locking for inode cache radix tree tag updates + - LP: #575853 + * sh: Enable the mmu in start_secondary() + - LP: #575853 + * sh: Fix FDPIC binary loader + - LP: #575853 + * libiscsi: Fix recovery slowdown regression + - LP: #575853 + * Freezer: Fix buggy resume test for tasks frozen with cgroup freezer + - LP: #575853 + * iwlwifi: counting number of tfds can be free for 4965 + - LP: #575853 + * iwlwifi: fix nfreed-- + - LP: #575853 + * iwlwifi: range checking issue + - LP: #575853 + * setup correct int pipe type in ar9170_usb_exec_cmd + - LP: #575853 + * mac80211: move netdev queue enabling to correct spot + - LP: #575853 + * mac80211: tear down all agg queues when restart/reconfig hw + - LP: #575853 + * WATCHDOG: hpwdt - fix lower timeout limit + - LP: #575853 + * WATCHDOG: iTCO_wdt: TCO Watchdog patch for additional Intel Cougar + Point DeviceIDs + - LP: #575853 + * genirq: Force MSI irq handlers to run with interrupts disabled + - LP: #575853 + * lis3: fix show rate for 8 bits chips + - LP: #575853 + * pata_ali: Fix regression with old devices + - LP: #575853 + * HID: fix oops in gyration_event() + - LP: #575853 + * raw: fsync method is now required + - LP: #575853 + * readahead: fix NULL filp dereference + - LP: #575853 + * ALSA: mixart: range checking proc file + - LP: #575853 + * ALSA: hda: Fix 0 dB offset for Lenovo Thinkpad models using AD1981 + - LP: #551606, #575853 + * x86, amd: Get multi-node CPU info from NodeId MSR instead of PCI config + space + - LP: #575853 + * resource: move kernel function inside __KERNEL__ + - LP: #575853 + * backlight: mbp_nvidia_bl - add five more MacBook variants + - LP: #575853 + * pata_via: Add VIA VX900 support + - LP: #575853 + * ext3: Don't update the superblock in ext3_statfs() + - LP: #575853 + * ext3: journal all modifications in ext3_xattr_set_handle + - LP: #575853 + * eeepc-laptop: disable cpu speed control on EeePC 701 + - LP: #575853 + * eeepc-laptop: dmi blacklist to disable pci hotplug code + - LP: #575853 + * eeepc-laptop: add hotplug_disable parameter + - LP: #575853 + * eeepc-laptop: disable wireless hotplug for 1201N + - LP: #575853 + * eeepc-laptop: disable wireless hotplug for 1005PE + - LP: #575853 + * libata: disable NCQ on Crucial C300 SSD + - LP: #575853 + * cifs: Fix a kernel BUG with remote OS/2 server (try #3) + - LP: #575853 + * CIFS: initialize nbytes at the beginning of CIFSSMBWrite() + - LP: #575853 + * iwlwifi: need check for valid qos packet before free + - LP: #575853 + * ARM: 6031/1: fix Thumb-2 decompressor + - LP: #575853 + * x86-32, resume: do a global tlb flush in S4 resume + - LP: #575853 + * x86: hpet: Make WARN_ON understandable + - LP: #575853 + * x86, hpet: Erratum workaround for read after write of HPET comparator + - LP: #575853 + * x86: Fix double enable_IR_x2apic() call on SMP kernel on !SMP boards + - LP: #575853 + * sched: sched_getaffinity(): Allow less than NR_CPUS length + - LP: #575853 + * sched: Fix sched_getaffinity() + - LP: #575853 + * NFSv4: Fall back to ordinary lookup if nfs4_atomic_open() returns + EISDIR + - LP: #575853 + * NFSv4: fix delegated locking + - LP: #575853 + * ALSA: hda - add a quirk for Clevo M570U laptop + - LP: #575853 + * ALSA: usb - Fix Oops after usb-midi disconnection + - LP: #575853 + * hwmon: (sht15) Fix sht15_calc_temp interpolation function + - LP: #575853 + * hwmon: (sht15) Properly handle the case CONFIG_REGULATOR=n + - LP: #575853 + * x86/amd-iommu: Use helper function to destroy domain + - LP: #575853 + * x86/amd-iommu: enable iommu before attaching devices + - LP: #575853 + * x86, lib: Add wbinvd smp helpers + - LP: #575853 + * x86, cacheinfo: Fix disabling of L3 cache indices + - LP: #575853 + * intel-agp: Switch to wbinvd_on_all_cpus + - LP: #575853 + * x86, cacheinfo: Add cache index disable sysfs attrs only to L3 caches + - LP: #575853 + * x86, cacheinfo: Calculate L3 indices + - LP: #575853 + * x86, cacheinfo: Remove NUMA dependency, fix for AMD Fam10h rev D1 + - LP: #575853 + * x86, cacheinfo: Enable L3 CID only on AMD + - LP: #575853 + * vgaarb: fix "target=default" passing + - LP: #575853 + * x86-32: clean up rwsem inline asm statements + - LP: #575853 + * x86: clean up rwsem type system + - LP: #575853 + * x86-64, rwsem: 64-bit xadd rwsem implementation + - LP: #575853 + * x86-64: support native xadd rwsem implementation + - LP: #575853 + * x86: Fix breakage of UML from the changes in the rwsem system + - LP: #575853 + * x86-64, rwsem: Avoid store forwarding hazard in __downgrade_write + - LP: #575853 + * fix NFS4 handling of mountpoint stat + - LP: #575853 + * dm mpath: fix stall when requeueing io + - LP: #575853 + * quota: Fix possible dq_flags corruption + - LP: #575853 + * Staging: comedi: fix usbdux timeout bug + - LP: #483343, #575853 + * Staging: comedi: usbdux.c: fix locking up of the driver when the comedi + ringbuffer runs empty + - LP: #483343, #575853 + * ocfs2: set i_mode on disk during acl operations + - LP: #575853 + * ocfs2: Change bg_chain check for ocfs2_validate_gd_parent. + - LP: #575853 + * 9p: Skip check for mandatory locks when unlocking + - LP: #575853 + * fc class: fail fast bsg requests + - LP: #575853 + * SCSI: add scsi target reset support to scsi ioctl + - LP: #575853 + * PCIe AER: prevent AER injection if hardware masks error reporting + - LP: #575853 + * vgaarb: Fix VGA arbiter to accept PCI domains other than 0 + - LP: #575853 + * SCSI: fc-transport: Use packed modifier for fc_bsg_request structure. + - LP: #575853 + * pci: Update pci_set_vga_state() to call arch functions + - LP: #575853 + * PCI: kill off pci_register_set_vga_state() symbol export. + - LP: #575853 + * PCI: fix nested spinlock hang in aer_inject + - LP: #575853 + * IPoIB: Fix TX queue lockup with mixed UD/CM traffic + - LP: #575853 + * x86/PCI: irq and pci_ids patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ALSA: hda_intel: ALSA HD Audio patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ALSA: hda - enable snoop for Intel Cougar Point + - LP: #575853 + * ata_piix: IDE Mode SATA patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ahci: AHCI and RAID mode SATA patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * i2c-i801: Add Intel Cougar Point device IDs + - LP: #575853 + * b43: Remove reset after fatal DMA error + - LP: #575853 + * b43: Allow PIO mode to be selected at module load + - LP: #575853 + * b43: fall back gracefully to PIO mode after fatal DMA errors + - LP: #575853 + * ALSA: hda - Add position_fix quirk for Biostar mobo + - LP: #575853 + * agp/hp: fixup hp agp after ACPI changes + - LP: #575853 + * b43: Optimize PIO scratchbuffer usage + - LP: #575853 + * ecryptfs: fix use with tmpfs by removing d_drop from + ecryptfs_destroy_inode + - LP: #575853 + * eCryptfs: Decrypt symlink target for stat size + - LP: #575853 + * ecryptfs: fix error code for missing xattrs in lower fs + - LP: #575853 + * sched: Fix a race between ttwu() and migrate_task() + - LP: #575853 + * USB: cdc-acm: Update to new autopm API + - LP: #575853 + * USB: cdc-acm: Fix stupid NULL pointer in resume() + - LP: #575853 + * iwlwifi: clear all tx queues when firmware ready + - LP: #575853 + * iwlwifi: fix scan race + - LP: #575853 + * e1000e: stop cleaning when we reach tx_ring->next_to_use + - LP: #575853 + * tcp: fix ICMP-RTO war + - LP: #575853 + * perf_events, x86: Implement Intel Westmere/Nehalem-EX support + - LP: #575853 + * Input: wacom - switch mode upon system resume + - LP: #575853 + * md: deal with merge_bvec_fn in component devices better. + - LP: #575853 + * nfsd4: don't try to map gid's in generic rpc code + - LP: #575853 + * nfsd: ensure sockets are closed on error + - LP: #575853 + * ALSA: hda: Set Front Mic to input vref 50% for Lenovo 3000 Y410 + - LP: #479373, #575853 + * mac80211: fix deferred hardware scan requests + - LP: #575853 + * fs-writeback: Add helper function to start writeback if idle + - LP: #575853 + * ext4: flush delalloc blocks when space is low + - LP: #575853 + * ext4: fix async i/o writes beyond 4GB to a sparse file + - LP: #575853 + * tpm: autoload tpm_tis based on system PnP IDs + - LP: #575853 + * IB/iser: Rewrite SG handling for RDMA logic + - LP: #575853 + * mptctl : Remove printk which floods unnecessary messages to + var/log/message + - LP: #575853 + * mptspi: Fix for incorrect data underrun errata + - LP: #575853 + * sched: Use proper type in sched_getaffinity() + - LP: #575853 + * KVM: SVM: Fix memory leaks that happen when svm_create_vcpu() fails + - LP: #575853 + * KVM: Don't spam kernel log when injecting exceptions due to bad cr + writes + - LP: #575853 + * KVM: allow bit 10 to be cleared in MSR_IA32_MC4_CTL + - LP: #575853 + * KVM: VMX: Save/restore rflags.vm correctly in real mode + - LP: #575853 + * KVM: MMU: fix kvm_mmu_zap_page() and its calling path + - LP: #575853 + * KVM: fix the handling of dirty bitmaps to avoid overflows + - LP: #575853 + * KVM: Increase NR_IOBUS_DEVS limit to 200 + - LP: #575853 + * KVM: x86: Fix TSS size check for 16-bit tasks + - LP: #575853 + * x86/gart: Disable GART explicitly before initialization + - LP: #575853 + * r8169: clean up my printk uglyness + - LP: #562742, #575853 + * Linux 2.6.32.12 + - LP: #575853 + * drm/edid: allow certain bogus edids to hit a fixup path rather than + fail + - LP: #575853 + * drm/radeon: add new RS880 pci id + - LP: #575853 + * drm: remove the EDID blob stored in the EDID property when it is + disconnected + - LP: #575853 + * drm/radeon/kms: never treat rs4xx as AGP + - LP: #575853 + * drm/radeon/kms: Fix NULL pointer dereference if memory allocation + failed in a simple way + - LP: #575853 + * drm/radeon/kms: don't print error on -ERESTARTSYS. + - LP: #575853 + * drm/radeon/kms: fix pal tv-out support on legacy IGP chips + - LP: #575853 + * drm: Return ENODEV if the inode mapping changes + - LP: #575853 + * drm/edid/quirks: Envision EN2028 + - LP: #575853 + * drm/radeon: R300 AD only has one quad pipe. + - LP: #575853 + * drm/radeon/kms: fix washed out image on legacy tv dac + - LP: #575853 + * drm/radeon/kms/combios: verify dac_adj values are valid + - LP: #575853 + * drm/i915: Add no_lvds entry for the Clientron U800 + - LP: #544671, #575853 + * drm/radeon/kms: more atom parser fixes (v2) + - LP: #575853 + * drm/radeon/kms: disable the tv encoder when tv/cv is not in use + - LP: #575853 + * drm/radeon/kms: fix tv dac conflict resolver + - LP: #575853 + * drm/radeon/kms: fix rs600 tlb flush + - LP: #575853 + * drm/radeon/kms: add FireMV 2400 PCI ID. + - LP: #575853 + * Linux 2.6.32.12+drm33.3 + - LP: #575853 + * USB: EHCI: defer reclamation of siTDs + - LP: #583414 + * p54usb: Add usbid for Corega CG-WLUSB2GT. + - LP: #583414 + * md/raid5: allow for more than 2^31 chunks. + - LP: #583414 + * md/raid5: fix previous patch. + - LP: #583414 + * libata: fix locking around blk_abort_request() + - LP: #583414 + * libata: ensure NCQ error result taskfile is fully initialized before + returning it via qc->result_tf. + - LP: #583414 + * w1: w1 temp: fix negative termperature calculation + - LP: #583414 + * memcg: fix prepare migration + - LP: #583414 + * mac80211: remove bogus TX agg state assignment + - LP: #583414 + * flex_array: fix the panic when calling flex_array_alloc() without + __GFP_ZERO + - LP: #583414 + * core, x86: make LIST_POISON less deadly + - LP: #583414 + * hugetlb: fix infinite loop in get_futex_key() when backed by huge pages + - LP: #583414 + * reiserfs: fix corruption during shrinking of xattrs + - LP: #583414 + * nfsd4: bug in read_buf + - LP: #583414 + * keys: the request_key() syscall should link an existing key to the dest + keyring + - LP: #583414 + * staging: usbip: Fix deadlock + - LP: #583414 + * USB: fix remote wakeup settings during system sleep + - LP: #583414 + * USB: Add id for HP ev2210 a.k.a Sierra MC5725 miniPCI-e Cell Modem. + - LP: #511066, #583414 + * USB: fix testing the wrong variable in fs_create_by_name() + - LP: #583414 + * USB: don't choose configs with no interfaces + - LP: #583414 + * USB: OHCI: don't look at the root hub to get the number of ports + - LP: #583414 + * USB: xhci: properly set the "Mult" field of the endpoint context. + - LP: #583414 + * USB: xhci: properly set endpoint context fields for periodic eps. + - LP: #583414 + * procfs: fix tid fdinfo + - LP: #583414 + * ocfs2: Update VFS inode's id info after reflink. + - LP: #583414 + * ocfs2: potential ERR_PTR dereference on error paths + - LP: #583414 + * ocfs2: Compute metaecc for superblocks during online resize. + - LP: #583414 + * ocfs2_dlmfs: Fix math error when reading LVB. + - LP: #583414 + * powernow-k8: Fix frequency reporting + - LP: #572348, #583414 + * nfs d_revalidate() is too trigger-happy with d_drop() + - LP: #583414 + * NFS: rsize and wsize settings ignored on v4 mounts + - LP: #583414 + * Staging: hv: Fix a bug affecting IPv6 + - LP: #583414 + * Staging: hv: Fix up memory leak on HvCleanup + - LP: #583414 + * Staging: hv: name network device ethX rather than sethX + - LP: #583414 + * i2c: Fix probing of FSC hardware monitoring chips + - LP: #583414 + * perf: Fix resource leak in failure path of perf_event_open() + - LP: #583414 + * raid6: fix recovery performance regression + - LP: #583414 + * serial: 8250_pnp - add Fujitsu Wacom device + - LP: #583414 + * block: ensure jiffies wrap is handled correctly in + blk_rq_timed_out_timer + - LP: #583414 + * dm9601: fix phy/eeprom write routine + - LP: #583414 + * p54pci: fix bugs in p54p_check_tx_ring + - LP: #583414 + * edac, mce: Fix wrong mask and macro usage + - LP: #583414 + * x86-64: Clear a 64-bit FS/GS base on fork if selector is nonzero + - LP: #583414 + * x86: Disable large pages on CPUs with Atom erratum AAE44 + - LP: #583414 + * x86, k8 nb: Fix boot crash: enable k8_northbridges unconditionally on + AMD systems + - LP: #583414 + * x86, AMD: Fix stale cpuid4_info shared_map data in shared_cpu_map + cpumasks + - LP: #583414 + * ALSA: hda: Use LPIB quirk for DG965OT board version AAD63733-203 + - LP: #459083, #583414 + * ALSA: hda - Add PCI quirk for HP dv6-1110ax. + - LP: #583414 + * ALSA: hda: Use STAC_DELL_M6_BOTH quirk for Dell Studio XPS 1645 + - LP: #553002, #583414 + * ALSA: hda: Use STAC_DELL_M6_BOTH quirk for Dell Studio 1558 + - LP: #568600, #583414 + * ALSA: hda: Use ALC880_F1734 quirk for Fujitsu Siemens AMILO Xi 1526 + - LP: #567494, #583414 + * ALSA: snd-meastro3: Add amp_gpio quirk for Compaq EVO N600C + - LP: #583414 + * ALSA: snd-meastro3: Ignore spurious HV interrupts during suspend / + resume + - LP: #583414 + * ALSA: hda: Fix max PCM level to 0 dB for Fujitsu-Siemens laptops using + CX20549 (Venice) + - LP: #583414 + * ALSA: hda: Fix 0 dB for Packard Bell models using Conexant CX20549 + (Venice) + - LP: #541802, #583414 + * ALSA: hda: Use olpc-xo-1_5 quirk for Toshiba Satellite Pro T130-15F + - LP: #573284, #583414 + * ALSA: hda: Use olpc-xo-1_5 quirk for Toshiba Satellite + P500-PSPGSC-01800T + - LP: #549267, #583414 + * libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2) + - LP: #583414 + * ext4: correctly calculate number of blocks for fiemap + - LP: #474597, #583414 + * initramfs: handle unrecognised decompressor when unpacking + - LP: #583414 + * CRED: Fix a race in creds_are_invalid() in credentials debugging + - LP: #583414 + * jfs: fix diAllocExt error in resizing filesystem + - LP: #583414 + * ACPI: introduce kernel parameter acpi_sleep=sci_force_enable + - LP: #553498, #583414 + * p54pci: rx frame length check + - LP: #583414 + * drivers/net/wireless/p54/txrx.c Fix off by one error + - LP: #583414 + * dccp_probe: Fix module load dependencies between dccp and dccp_probe + - LP: #583414 + * KVM: remove unused load_segment_descriptor_to_kvm_desct + - LP: #583414 + * kgdb: don't needlessly skip PAGE_USER test for Fsl booke + - LP: #583414 + * r8169: use correct barrier between cacheable and non-cacheable memory + - LP: #562742, #583414 + * r8169: fix broken register writes + - LP: #562742, #583414 + * r8169: more broken register writes workaround + - LP: #562742, #583414 + * PCI: Ensure we re-enable devices on resume + - LP: #566149, #583414 + * skip sense logging for some ATA PASS-THROUGH cdbs + - LP: #583128, #583414 + * tg3: Fix INTx fallback when MSI fails + - LP: #583414 + * xfs: add a shrinker to background inode reclaim + - LP: #583414 + * qla2xxx: Properly handle UNDERRUN completion statuses. + - LP: #583414 + * bnx2: Fix lost MSI-X problem on 5709 NICs. + - LP: #583414 + * tracing: Fix ftrace_event_call alignment for use with gcc 4.5 + - LP: #583414 + * security: testing the wrong variable in create_by_name() + - LP: #583414 + * md: restore ability of spare drives to spin down. + - LP: #583414 + * virtio: initialize earlier + - LP: #583414 + * md/raid6: Fix raid-6 read-error correction in degraded state + - LP: #583414 + * V4L/DVB: budget: Oops: "BUG: unable to handle kernel NULL pointer + dereference" + - LP: #583414 + * ACPI: DMI init_set_sci_en_on_resume for multiple Lenovo ThinkPads + - LP: #583414 + * power_meter: acpi_device_class "power_meter_resource" too long + - LP: #583414 + * ACPI: sleep: init_set_sci_en_on_resume for Dell Studio 155x + - LP: #553498, #583414 + * cpuidle: Fix incorrect optimization + - LP: #583414 + * pxa/colibri: fix missing #include in colibri.h + - LP: #583414 + * SCSI: fix locking around blk_abort_request() + - LP: #583414 + * SCSI: libiscsi: regression: fix header digest errors + - LP: #583414 + * scsi_debug: virtual_gb ignores sector_size + - LP: #583414 + * Enable retries for SYNCRONIZE_CACHE commands to fix I/O error + - LP: #583414 + * SCSI: Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 + I/O error + - LP: #583414 + * MIPS: Sibyte: Apply M3 workaround only on affected chip types and + versions. + - LP: #583414 + * Linux 2.6.32.13 + - LP: #583414 + * drm/i915: Add initial bits for VGA modesetting bringup on Sandybridge. + - LP: #583414 + * drm/i915: fix tiling limits for i915 class hw v2 + - LP: #583414 + * Linux 2.6.32.13+drm33.4 + - LP: #583414 + * (pre-stable) Input: psmouse - reset all types of mice before + reconnecting + - LP: #551234 + * ipv4: udp: fix short packet and bad checksum logging + - LP: #588832 + * hp_accel: fix race in device removal + - LP: #588832 + * fbdev: bfin-t350mcqb-fb: fix fbmem allocation with blanking lines + - LP: #588832 + * hugetlbfs: kill applications that use MAP_NORESERVE with SIGBUS instead + of OOM-killer + - LP: #588832 + * dma-mapping: fix dma_sync_single_range_* + - LP: #588832 + * ACPI: sleep: eliminate duplicate entries in acpisleep_dmi_table[] + - LP: #588832 + * mmc: atmel-mci: fix two parameters swapped + - LP: #588832 + * mmc: atmel-mci: prevent kernel oops while removing card + - LP: #588832 + * mmc: atmel-mci: remove data error interrupt after xfer + - LP: #588832 + * ptrace: fix return value of do_syscall_trace_enter() + - LP: #588832 + * powerpc/perf_event: Fix oops due to perf_event_do_pending call + - LP: #588832 + * cifs: guard against hardlinking directories + - LP: #588832 + * serial: imx.c: fix CTS trigger level lower to avoid lost chars + - LP: #588832 + * ALSA: ice1724 - Fix ESI Maya44 capture source control + - LP: #588832 + * ALSA: hda: Fix 0 dB for Lenovo models using Conexant CX20549 (Venice) + - LP: #588832 + * inotify: race use after free/double free in inotify inode marks + - LP: #588832 + * inotify: don't leak user struct on inotify release + - LP: #588832 + * profile: fix stats and data leakage + - LP: #588832 + * x86, k8: Fix build error when K8_NB is disabled + - LP: #588832 + * x86, cacheinfo: Turn off L3 cache index disable feature in virtualized + environments + - LP: #588832 + * x86, amd: Check X86_FEATURE_OSVW bit before accessing OSVW MSRs + - LP: #588832 + * Btrfs: check for read permission on src file in the clone ioctl + - LP: #588832 + * ALSA: hda - New Intel HDA controller + - LP: #588832 + * proc: partially revert "procfs: provide stack information for threads" + - LP: #588832 + * revert "procfs: provide stack information for threads" and its fixup + commits + - LP: #588832 + * iwlwifi: clear all the stop_queue flag after load firmware + - LP: #588832 + * p54: disable channels with incomplete calibration data sets + - LP: #588832 + * CacheFiles: Fix error handling in cachefiles_determine_cache_security() + - LP: #588832 + * megaraid_sas: fix for 32bit apps + - LP: #588832 + * mmap_min_addr check CAP_SYS_RAWIO only for write + - LP: #588832 + * nilfs2: fix sync silent failure + - LP: #588832 + * crypto: authenc - Add EINPROGRESS check + - LP: #588832 + * Linux 2.6.32.14 + - LP: #588832 + * drm/i915: use PIPE_CONTROL instruction on Ironlake and Sandy Bridge + - LP: #588832 + * drm/i915: fix non-Ironlake 965 class crashes + - LP: #588832 + * drm/i915: Disable FBC on 915GM and 945GM. + - LP: #492392, #588832 + * Linux 2.6.32.14+drm33.5 + - LP: #588832 + * Linux 2.6.32.15+drm33.5 + - LP: #588832 + * HID: remove MODULE_VERSION from new drivers + - LP: #583531 + * HID: fix N-trig touch panel with recent firmware + - LP: #583531 + * HID: ntrig: explain firmware quirk + - LP: #583531 + * HID: ntrig: Emit TOUCH with DOUBLETAP for single touch + - LP: #583531 + * HID: ntrig: TipSwitch for single touch mode touch. + - LP: #583531 + * HID: ntrig: Remove unused macro, TripleTap and QuadTap + - LP: #583531 + * (pre-stable) drm/radeon/kms: initialize set_surface_reg reg for rs600 + asic + - LP: #544590 + + -- Stefan Bader Wed, 09 Jun 2010 17:01:09 +0200 + +linux (2.6.32-22.36) lucid-security; urgency=low + + [ Andy Whitcroft ] + + * Revert "kvm: restrict writing of segment selectors to segment + registers" + - LP: #589223 + + -- Andy Whitcroft Thu, 03 Jun 2010 17:11:27 +0100 + +linux (2.6.32-22.35) lucid-security; urgency=low + + [ Leann Ogasawara ] + + * kvm: restrict writing of segment selectors to segment registers + - CVE-2010-0419 + + [ Upstream Kernel Changes ] + + * tty: release_one_tty() forgets to put pids + - CVE-2010-1162 + * oom: fix the unsafe usage of badness() in proc_oom_score() + - CVE-2010-1488 + * Attempt #2 to handle null nameidata + - CVE-2010-1148 + * reiserfs: fix permissions on .reiserfs_priv + - CVE-2010-1146 + * r8169: offical fix for CVE-2009-4537 (overlength frame DMAs) + - CVE-2009-4537 + + -- Stefan Bader Tue, 01 Jun 2010 11:44:28 +0200 + +linux (2.6.32-22.33) lucid-proposed; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: ACPI: EC: Allow multibyte access to EC (v3) + - LP: #526354 + + [ Tim Gardner ] + + * ubuntu: rtl8192se -- update to version 0015.0127.2010 + - LP: #567016 + + -- Andy Whitcroft Mon, 19 Apr 2010 11:06:35 +0100 + +linux (2.6.32-21.32) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: i915 KMS -- support disabling KMS for known broken devices + - LP: #563277 + * SAUCE: i915 KMS -- blacklist i830 + - LP: #542208, #563277 + * SAUCE: i915 KMS -- blacklist i845g + - LP: #541492, #563277 + * SAUCE: i915 KMS -- blacklist i855 + - LP: #511001, #541511, #563277 + * SAUCE: radeon KMS -- support disabling KMS for known broken devices + - LP: #546743 + * SAUCE: radeon KMS -- blacklist ES1000 + - LP: #546743 + + -- Andy Whitcroft Thu, 15 Apr 2010 17:18:49 +0100 + +linux (2.6.32-21.31) lucid; urgency=low + + [ Andy Whitcroft ] + + * allow modules.builtin to be optional + * d-i: add mpt2sas to the message-modules udeb + - LP: #530361 + + [ Christopher James Halse Rogers ] + + * SAUCE: Nouveau: Add quirk framework to disable acceleration + - LP: #544088, #546393 + * SAUCE: Nouveau: Disable acceleration on MacBook Pros + - LP: #546393 + * SAUCE: Nouveau: Disable acceleration on GeForce3 cards + - LP: #544088 + * SAUCE: Nouveau: Disable acceleration on 6100 cards + - LP: #542950 + + [ Stefan Bader ] + + * SAUCE: dma-mapping: Remove WARN_ON in dma_free_coherent + - LP: #458201 + + [ Surbhi Palande ] + + * SAUCE: sync before umount to reduce time taken by ext4 umount + - LP: #543617 + + [ Upstream Kernel Changes ] + + * tipc: Fix oops on send prior to entering networked mode (v3) + - CVE-2010-1187 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - LP: #561425 + * KVM: x86 emulator: fix memory access during x86 emulation + - LP: #561425 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - LP: #561425 + * KVM: x86 emulator: Fix popf emulation + - LP: #561425 + * KVM: Fix segment descriptor loading + - LP: #561425 + * KVM: VMX: Update instruction length on intercepted BP + - LP: #561425 + * KVM: VMX: Use macros instead of hex value on cr0 initialization + - LP: #561425 + * KVM: SVM: Reset cr0 properly on vcpu reset + - LP: #561425 + * KVM: VMX: Disable unrestricted guest when EPT disabled + - LP: #561425 + * KVM: x86: disable paravirt mmu reporting + - LP: #561425 + * AppArmor: Fix put of unassigned ns if aa_unpack fails + * AppArmor: Fix refcount bug when exec fails + - LP: #562063 + * AppArmor: Take refcount on cxt->profile to ensure it remains a valid + reference + - LP: #367499 + * AppArmor: fix typo in scrubbing environment variable warning + - LP: #562060 + * AppArmor: fix regression by setting default to mediate deleted files + - LP: #562056 + * AppArmor: fix refcount order bug that can trigger during replacement + - LP: #367499 + * AppArmor: Make sure to unmap aliases for vmalloced dfas before they are + live + - LP: #529288 + * AppArmor: address performance regression of replaced profile + - LP: #549428 + * AppArmor: make the global side the correct type + - LP: #562047 + * AppArmor: use the kernel shared workqueue to free vmalloc'ed dfas + * sky2: add register definitions for new chips + - LP: #537168 + * sky2: 88E8059 support + - LP: #537168 + * net: Fix Yukon-2 Optima TCP offload setup + - LP: #537168 + * net: Add missing TST_CFG_WRITE bits around sky2_pci_write + - LP: #537168 + * sky2: print Optima chip name + - LP: #537168 + * (Upstream) dell-laptop: defer dell_rfkill_update to worker thread + - LP: #555261 + * drm/nv40: add LVDS table quirk for Dell Latitude D620 + - LP: #539730 + + -- Andy Whitcroft Tue, 13 Apr 2010 18:50:58 +0100 + +linux (2.6.32-20.30) lucid; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) ACPI: EC: Allow multibyte access to EC" + - LP: #561151 + + -- Andy Whitcroft Mon, 12 Apr 2010 15:46:31 +0100 + +linux (2.6.32-20.29) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915" + - LP: #542251 + * add Breaks: against hardy lvm2 + - LP: #528155 + + [ Colin Watson ] + + * d-i -- enable udebs for generic-pae + - LP: #160366 + + [ Stefan Bader ] + + * [Config] Add xen netboot support + - LP: #160366 + + [ Takashi Iwai ] + + * (pre-stable): input: Support Clickpad devices in ClickZone mode + - LP: #516329 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) Bluetooth: Fix sleeping function in RFCOMM within + invalid context" + - LP: #553837 + * Revert "(pre-stable) USB: fix usbfs regression" + - LP: #553837 + * Revert "(pre-stable) softlockup: Stop spurious softlockup messages due + to overflow" + - LP: #553837 + * Revert "(pre-stable) drm/nouveau: report unknown connector state if lid + closed" + - LP: #553837 + * drivers/scsi/ses.c: eliminate double free + - LP: #553837 + * decompress: fix new decompressor for PIC + - LP: #553837 + * ARM: Fix decompressor's kernel size estimation for ROM=y + - LP: #553837 + * MIPS: Cleanup forgotten label_module_alloc in tlbex.c + - LP: #553837 + * tg3: Fix tg3_poll_controller() passing wrong pointer to tg3_interrupt() + - LP: #553837 + * tg3: Fix 5906 transmit hangs + - LP: #553837 + * ALSA: hda - Fix input source elements of secondary ADCs on Realtek + - LP: #553837 + * ALSA: hda: enable MSI for Gateway M-6866 + - LP: #538918, #553837 + * timekeeping: Prevent oops when GENERIC_TIME=n + - LP: #553837 + * Input: alps - add support for the touchpad on Toshiba Tecra A11-11L + - LP: #553837 + * Input: i8042 - add ALDI/MEDION netbook E1222 to qurik reset table + - LP: #553837 + * i2c-i801: Don't use the block buffer for I2C block writes + - LP: #553837 + * ath5k: dont use external sleep clock in AP mode + - LP: #553837 + * ath5k: fix setup for CAB queue + - LP: #553837 + * ring-buffer: Move disabled check into preempt disable section + - LP: #553837 + * function-graph: Init curr_ret_stack with ret_stack + - LP: #553837 + * Bluetooth: Fix sleeping function in RFCOMM within invalid context + - LP: #553837 + * tracing: Use same local variable when resetting the ring buffer + - LP: #553837 + * tracing: Disable buffer switching when starting or stopping trace + - LP: #553837 + * tracing: Do not record user stack trace from NMI context + - LP: #553837 + * PCI: unconditionally clear AER uncorr status register during cleanup + - LP: #553837 + * efifb: fix framebuffer handoff + - LP: #553837 + * coredump: suppress uid comparison test if core output files are pipes + - LP: #553837 + * V4L/DVB (13961): em28xx-dvb: fix memleak in dvb_fini() + - LP: #553837 + * hrtimer: Tune hrtimer_interrupt hang logic + - LP: #553837 + * x86, apic: Don't use logical-flat mode when CPU hotplug may exceed 8 + CPUs + - LP: #553837 + * mvsas: add support for Adaptec ASC-1045/1405 SAS/SATA HBA + - LP: #553837 + * pci: add support for 82576NS serdes to existing SR-IOV quirk + - LP: #553837 + * sched: Mark boot-cpu active before smp_init() + - LP: #553837 + * sparc64: Make prom entry spinlock NMI safe. + - LP: #553837 + * sysctl: require CAP_SYS_RAWIO to set mmap_min_addr + - LP: #553837 + * e1000e: enable new 82567V-3 device + - LP: #553837 + * ixgbe: add support for 82599 KR device 0x1517 + - LP: #553837 + * ath9k: fix lockdep warning when unloading module + - LP: #553837 + * mqueue: fix mq_open() file descriptor leak on user-space processes + - LP: #553837 + * virtio: fix out of range array access + - LP: #553837 + * sched: Fix SCHED_MC regression caused by change in sched cpu_power + - LP: #553837 + * readahead: add blk_run_backing_dev + - LP: #553837 + * ALSA: hda: Use LPIB and 6stack-dig for eMachines T5212 + - LP: #538895, #553837 + * ALSA: hda - Disable MSI for Nvidia controller + - LP: #553837 + * ALSA: hda - Fix secondary ADC of ALC260 basic model + - LP: #553837 + * ALSA: hda: Fix 0 dB offset for HP laptops using CX20551 (Waikiki) + - LP: #420578, #553837 + * ALSA: cmipci: work around invalid PCM pointer + - LP: #553837 + * gigaset: correct clearing of at_state strings on RING + - LP: #553837 + * gigaset: prune use of tty_buffer_request_room + - LP: #553837 + * perf: Make the install relative to DESTDIR if specified + - LP: #553837 + * perf_event: Fix oops triggered by cpu offline/online + - LP: #553837 + * tmpfs: fix oops on mounts with mpol=default + - LP: #553837 + * tmpfs: mpol=bind:0 don't cause mount error. + - LP: #553837 + * tmpfs: handle MPOL_LOCAL mount option properly + - LP: #553837 + * tmpfs: cleanup mpol_parse_str() + - LP: #553837 + * doc: add the documentation for mpol=local + - LP: #553837 + * SCSI: scsi_transport_fc: Fix synchronization issue while deleting vport + - LP: #553837 + * NFSv4: Don't ignore the NFS_INO_REVAL_FORCED flag in + nfs_revalidate_inode() + - LP: #553837 + * NFS: Avoid a deadlock in nfs_release_page + - LP: #553837 + * NFS: Prevent another deadlock in nfs_release_page() + - LP: #553837 + * tty: Keep the default buffering to sub-page units + - LP: #553837 + * tty: Take a 256 byte padding into account when buffering below sub-page + units + - LP: #553837 + * USB: fix usbfs regression + - LP: #553837 + * USB: EHCI: fix ITD list order + - LP: #553837 + * USB: EHCI: adjust ehci_iso_stream for changes in ehci_qh + - LP: #553837 + * USB: qcserial: add new device ids + - LP: #553837 + * USB: xHCI: re-initialize cmd_completion + - LP: #553837 + * USB: serial: ftdi: add CONTEC vendor and product id + - LP: #553837 + * USB: option: fix incorrect manufacturer name in usb/serial/option: + MAXON->CMOTECH + - LP: #553837 + * USB: option: move hardcoded PID to a macro in usb/serial/option + - LP: #553837 + * USB: option: add support for a new CMOTECH device to usb/serial/option + - LP: #553837 + * usb: r8a66597-hcd: fix removed from an attached hub + - LP: #553837 + * wl1251: fix potential crash + - LP: #553837 + * jme: Fix VLAN memory leak + - LP: #553837 + * jme: Protect vlgrp structure by pause RX actions. + - LP: #553837 + * edac, mce: Filter out invalid values + - LP: #553837 + * iwlwifi: use dma_alloc_coherent + - LP: #553837 + * iwlwifi: Silence tfds_in_queue message + - LP: #553837 + * SUNRPC: Fix a potential memory leak in auth_gss + - LP: #553837 + * sunrpc: handle allocation errors from __rpc_lookup_create() + - LP: #553837 + * if_tunnel.h: add missing ams/byteorder.h include + - LP: #553837 + * fs/partitions/msdos: add support for large disks + - LP: #553837 + * fs/partition/msdos: fix unusable extended partition for > 512B sector + - LP: #553837 + * PCI: fix return value from pcix_get_max_mmrbc() + - LP: #553837 + * PCI: fix access of PCI_X_CMD by pcix get and set mmrbc functions + - LP: #553837 + * PCI: cleanup error return for pcix get and set mmrbc functions + - LP: #553837 + * rt2860sta: Fix argument to linux_pci_unmap_single() + - LP: #553837 + * ath9k: fix BUG_ON triggered by PAE frames + - LP: #553837 + * cpuset: fix the problem that cpuset_mem_spread_node() returns an + offline node + - LP: #553837 + * softlockup: Stop spurious softlockup messages due to overflow + - LP: #553837 + * netfilter: xt_recent: fix regression in rules using a zero hit_count + - LP: #553837 + * x86: Fix placement of FIX_OHCI1394_BASE + - LP: #553837 + * x86, amd: Restrict usage of c1e_idle() + - LP: #553837 + * hwmon: (coretemp) Add missing newline to dev_warn() message + - LP: #553837 + * ALSA: hda: Use LPIB for ga-ma770-ud3 board + - LP: #553837 + * ALSA: ac97: Add Toshiba P500 to ac97 jack sense blacklist + - LP: #481058, #553837 + * ALSA: ac97: Add IBM ThinkPad R40e to Headphone/Line Jack Sense + blacklist + - LP: #303789, #553837 + * ALSA: hda: Use ALC260_WILL quirk for another Acer model (0x1025007f) + - LP: #418627, #553837 + * ath9k: Enable TIM timer interrupt only when needed. + - LP: #553837 + * mac80211: Retry null data frame for power save + - LP: #553837 + * ath9k: Enable IEEE80211_HW_REPORTS_TX_ACK_STATUS flag for ath9k + - LP: #553837 + * mac80211: Reset dynamic ps timer in Rx path. + - LP: #553837 + * leds-gpio: fix default state handling on OF platforms + - LP: #553837 + * quota: manage reserved space when quota is not active [v2] + - LP: #553837 + * quota: Fix warning when a delayed write happens before quota is enabled + - LP: #553837 + * ahci: use BIOS date in broken_suspend list + - LP: #553837 + * Bluetooth: Fix potential bad memory access with sysfs files + - LP: #553837 + * Bluetooth: Fix kernel crash on L2CAP stress tests + - LP: #553837 + * sh: Fix zImage boot using fixed PMB. + - LP: #553837 + * b43: Workaround circular locking in hw-tkip key update callback + - LP: #553837 + * block: Backport of various I/O topology fixes from 2.6.33 and 2.6.34 + - LP: #553837 + * s3cmci: initialize default platform data no_wprotect and no_detect with + 1 + - LP: #553837 + * x86: Fix sched_clock_cpu for systems with unsynchronized TSC + - LP: #553837 + * GFS2: Skip check for mandatory locks when unlocking + - LP: #553837 + * Linux 2.6.32.11 + - LP: #553837 + * drm/i915: fix small leak on overlay error path + - LP: #553837 + * drm/i915: Avoid NULL deref in get_pages() unwind after error. + - LP: #553837 + * drm/nouveau: report unknown connector state if lid closed + - LP: #553837 + * Linux-2.6.32.11+drm33.2 + - LP: #553837 + * mmc: add module parameter to set whether cards are assumed removable + - LP: #477106 + * (pre-stable) ACPI: EC: Allow multibyte access to EC + - LP: #526354 + * PCI quirks: disable msi on AMD rs4xx internal gfx bridges + - LP: #509273 + * drm/i915: Add dependency on the intel agp module + - LP: #542251 + * (pre-stable) drm/edid: allow certain bogus edids to hit a fixup path + rather than fail + - LP: #540632 + * drm/radeon/kms: rework pll algo selection + - LP: #538377 + * drm/radeon/kms: update new pll algo + - LP: #538377 + * PCI quirk: Disable MSI on VIA K8T890 systems + - LP: #544741 + * sched: update load count only once per cpu in 10 tick update window + - LP: #513848 + + -- Andy Whitcroft Fri, 09 Apr 2010 17:44:41 +0100 + +linux (2.6.32-19.28) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable various multitouch devices + - LP: #541453 + + [ Chase Douglas ] + + * (pre-stable): input: ALPS - Add signature for HP Pavilion dm3 laptops + - LP: #545307 + * SAUCE: Disable function tracing after hitting __schedule_bug + * SAUCE: Reduce ACPI resource conflict message to KERN_INFO, printf + cleanup + - LP: #440470 + + [ Jesse Barnes ] + + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + + [ John Johansen ] + + * SAUCE: AppArmor: Remove null_profile's use of PFLAG_NO_LIST_REF + - LP: #539437 + * SAUCE: AppArmor: Stop page allocation warnings that can occur on policy + load + - LP: #458299 + * SAUCE: AppArmor: Return string len rather than the allocation size + - LP: #551844 + * SAUCE: AppArmor: Fix oops in profile verification if profile unpack + fails. + + [ Luke Yelavich ] + + * [Config] Enable Nouveau DRM module on powerpc + + [ Stefan Bader ] + + * SAUCE: Pull in thinkpad-acpi from v2.6.34-rc1 + - LP: #357673 + * [Config] Enable thinkpad-acpi ALSA volume control + - LP: #357673 + + [ Steve Conklin ] + + * SAUCE: drm/i915: Disable FBC on 915GM and 945GM + - LP: #492392, #539609 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, + Dell Inspiron 700m" + - LP: #515246 + * (pre-stable) softlockup: Stop spurious softlockup messages due to + overflow + - LP: #551068 + * backlight: mbp_nvidia_bl - add five more MacBook variants + - LP: #511965 + * drm/nv04-nv40: Fix up the programmed horizontal sync pulse delay. + - LP: #529130 + * drm/nouveau: Fix fbcon corruption with font width not divisible by 8 + - LP: #544739 + * (pre-stable) USB: fix usbfs regression + * drm/radeon/bo: add some fallback placements for VRAM only objects. + - LP: #507148 + * drm/radeon/kms: don't print error on -ERESTARTSYS. + - LP: #507148 + * Input: add the ABS_MT_PRESSURE event + - LP: #541453 + * HID: Support for 3M multitouch panel + - LP: #541453 + * HID: make 3M PCT touchscreen driver standalone config option + - LP: #541453 + * HID: add support for Stantum multitouch panel + - LP: #541453 + * HID: make Stantum driver standalone config option + - LP: #541453 + * HID: add support for Acer T230H multitouch + - LP: #541453 + * HID: add support for Pixart Imaging Optical Touch Screen + - LP: #541453 + * HID: fixed bug in single-touch emulation on the stantum panel + - LP: #541453 + * HID: add pressure support for the Stantum multitouch panel + - LP: #541453 + * HID: Support for MosArt multitouch panel + - LP: #541453 + * HID: hid-ntrig add multi input quirk and clean up + - LP: #541453 + * HID: n-trig: remove unnecessary tool switching + - LP: #541453 + * HID: hid-ntrig: multitouch cleanup and fix + - LP: #541453 + * HID: hid-ntrig: Single touch mode tap + - LP: #541453 + * hid: ntrig touch events + - LP: #541453 + * (pre-stable) x86-32, resume: do a global tlb flush in S4 resume + - LP: #531309 + * drm/i915: Part of: Add initial bits for VGA modesetting bringup on + Sandybridge. + - LP: #515246 + * drm/i915: Stop trying to use ACPI lid status to determine LVDS + connection. + - LP: #515246 + + -- Andy Whitcroft Wed, 31 Mar 2010 15:14:32 +0100 + +linux (2.6.32-18.27) lucid; urgency=low + + [ Chase Douglas ] + + * SAUCE: Don't register vga16fb framebuffer if other framebuffers are + present + - LP: #527369 + + [ Loïc Minier ] + + * [Config] armel/versatile: Set CRAMFS=m + - LP: #524893 + * [Config] armel: Reset default command-line + - LP: #524893 + + [ Stefan Bader ] + + * build/modules: Update d-i to reflect recent config changes + - LP: #546929 + + [ Upstream Kernel Changes ] + + * (pre-stable) drm/nouveau: report unknown connector state if lid closed + - LP: #523072 + * (pre-stable) Staging: rt2870: Add USB ID for Buffalo Airstation + WLI-UC-GN + - LP: #441990 + * (pre-stable) iwlwifi: fix nfreed-- + - LP: #545585 + * (pre-stable) pata_via: Add VIA VX900 support + - LP: #548675 + + -- Stefan Bader Fri, 26 Mar 2010 18:39:42 +0100 + +linux (2.6.32-17.26) lucid; urgency=low + + [ Amit Kucheria ] + + * [Config] SECURITY_FILE_CAPABILITIES dissapeared in 2.6.33 + + [ Andy Whitcroft ] + + * rules -- allow architecture configurations to be missing + * SAUCE: cdrom -- default to not locking the tray when in use + - LP: #397734 + * expose the kernel EXTRAVERSION in dmesg and /proc/version_signature + * record the drm version in EXTRAVERSION + * linux-tools -- pull out the perf binary into a binary package + * [Config] enable MMIOTRACE for graphics debugging + * [Config] enable BLK_DEV_BSG + * debian -- fix builds when tools are disabled + * allow us to build default configs for automated builds + * config -- allow locally specified configuration overrides + * [Config] de-modularise PATA disk controllers + * [Config] de-modularise SATA disk controllers + + [ Stefan Bader ] + + * Revert "SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow" + - LP: #540231 + * Revert "SAUCE: (pre-stable) netfilter: xt_recent: fix false match" + - LP: #540231 + * [Config] Update configs for 2.6.32.10 + - LP: #540231 + + [ Tim Gardner ] + + * [Config] Add vmw_pvscsi and vmxnet3 to -virtual flavour + - LP: #531017 + * SAUCE: igb: Supress an upstream compiler complaint + * [Config] Fix sub-flavours package conflicts + - LP: #454827 + + [ Upstream Kernel Changes ] + + * Revert "tpm_tis: TPM_STS_DATA_EXPECT workaround" + - LP: #540231 + * Revert "(pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue()" + - LP: #540231 + * (pre-stable) Bluetooth: Fix sleeping function in RFCOMM within invalid + context + - LP: #534549 + * igb: remove unused temp variable from stats clearing path + * igb: update comments for serdes config and update to handle duplex + * igb: update the approach taken to acquiring and releasing the phy lock + * igb: add locking to reads of the i2c interface + * igb: add combined function for setting rar and pool bits + * igb: make use of the uta to allow for promiscous mode filter + * igb: add support for 82576NS SerDes adapter + * igb: add function to handle mailbox lock + * igb: fix a few items where weren't correctly setup for mbx timeout + * igb: change how we handle alternate mac addresses + * igb: remove microwire support from igb + * igb: move the generic copper link setup code into e1000_phy.c + * igb: add code to retry a phy read in the event of failure on link check + * igb: add additional error handling to the phy code + * igb: add flushes between RAR writes when setting mac address + * igb: Use the instance of net_device_stats from net_device. + * igb: Fix erroneous display of stats by ethtool -S + * igb: add new data structure for handling interrupts and NAPI + * igb: remove rx checksum good counter + * igb: increase minimum rx buffer size to 1K + * igb: move the tx and rx ring specific config into seperate functions + * igb: remove rx_ps_hdr_len + * igb: move SRRCTL register configuration into ring specific config + * igb: change the head and tail offsets into pointers + * igb: add pci device pointer to ring structure + * igb: move rx_buffer_len into the ring structure + * igb: move alloc_failed and csum_err stats into per rx-ring stat + * igb: add a flags value to the ring + * igb: place a pointer to the netdev struct in the ring itself + * igb: move the multiple receive queue configuration into seperate + function + * igb: delay VF reset notification until after interrupts are enabed + * igb: setup vlan tag replication stripping in igb_vmm_control + * igb: re-use ring configuration code in ethtool testing + * igb: make tx ring map and free functionality non-static + * igb: make ethtool use core xmit map and free functionality + * igb: add single vector msi-x testing to interrupt test + * igb: cleanup "todo" code found in igb_ethtool.c + * igb: add support for seperate tx-usecs setting in ethtool + * igb: cleanup some of the code related to hw timestamping + * igb: misc cleanups within igb_ethtool.c + * igb: use packet buffer sizes from RXPBS register + * igb: replace the VF clear_to_send with a flags value + * igb: rework use of VMOLR in regards to PF and VFs + * igb: rework handling of the vfta and vlvf registers in relation to + mng_vlan + * igb: move vf init into a seperate function + * igb: only process global stats in igb_update_stats + * igb: move global_quad_port_a from global into local static define + * igb: make tx hang check multiqueue, check eop descriptor + * igb: cleanup code related to ring resource allocation and free + * igb: change queue ordering for 82576 based adapters + * igb: cleanup interrupt enablement in regards to msix_other + * igb: Remove invalid stats counters + * igb: cleanup igb.h header whitespace and some structure formatting + * igb: cleanup igb xmit frame path + * igb: cleanup clean_rx_irq_adv and alloc_rx_buffers_adv + * igb: replace unecessary &adapter->hw with just hw where applicable + * igb: add pci_dev in few spots to clean up use of dev_err/info/warn + * igb: limit minimum mtu to 68 to keep ip bound to interface + * igb: open up SCTP checksum offloads to all MACs 82576 and newer + * igb: cleanup whitespace issues in igb_main.c + * igb: Fix warnings in igb_set_ringparam() + * igb: change type for ring sizes to u16 in igb_set_ring_param + * igb: move timesync init into a seperate function + * igb: when number of CPUs > 4 combine tx/rx queues to allow more queues + * igb: Rework how netdev->stats is handled + * igb: removed unused tx/rx total bytes/packets from adapter struct + * igb: check for packets on all tx rings when link is down + * igb: only recycle page if it is on our numa node + * igb: add support for the 82580 phy + * igb: add support for 82580 MAC + * igb: Add full support for 82580 devices + * igb: remove use of skb_dma_map from driver + * igb: fix handling of mailbox collisions between PF/VF + * igb: do not force pcs link when in KX mode + * igb: do not force retry count to 1 on 82580 phy + * igb: correctly offset 82575 flow control watermarks by 16 bytes + * igb: check both function bits in status register in wol exception + * igb: make certain to reassign legacy interrupt vectors after reset + * igb/igbvf: cleanup exception handling in tx_map_adv + * fix LOOKUP_FOLLOW on automount "symlinks" + - LP: #540231 + * ARM: 5944/1: scsi: fix timer setup in fas216.c + - LP: #540231 + * V4L/DVB: dvb: l64781.ko broken with gcc 4.5 + - LP: #540231 + * bfin: fix max timeout calculation + - LP: #540231 + * V4L/DVB: Video : pwc : Fix regression in pwc_set_shutter_speed caused + by bad constant => sizeof conversion. + - LP: #540231 + * V4L/DVB: bttv: Move I2C IR initialization + - LP: #540231 + * V4L/DVB: cxusb: Select all required frontend and tuner modules + - LP: #540231 + * memcg: fix oom killing a child process in an other cgroup + - LP: #540231 + * fs/exec.c: fix initial stack reservation + - LP: #540231 + * iwlwifi: error checking for number of tfds in queue + - LP: #540231 + * iwlwifi: set HT flags after channel in rxon + - LP: #540231 + * iwlwifi: sanity check before counting number of tfds can be free + - LP: #540231 + * netlabel: fix export of SELinux categories > 127 + - LP: #540231 + * ahci: disable FPDMA auto-activate optimization on NVIDIA AHCI + - LP: #540231 + * PCI hotplug: ibmphp: read the length of ebda and map entire ebda region + - LP: #540231 + * PCI hotplug: check ioremap() return value in ibmphp_ebda.c + - LP: #540231 + * ACPI: remove Asus P2B-DS from acpi=ht blacklist + - LP: #540231 + * ACPI: fix "acpi=ht" boot option + - LP: #540231 + * thinkpad-acpi: wrong thermal attribute_group removed in thermal_exit() + - LP: #540231 + * ACPI: Be in TS_POLLING state during mwait based C-state entry + - LP: #540231 + * mpt2sas: Delete volume before HBA detach. + - LP: #540231 + * slab: initialize unused alien cache entry as NULL at + alloc_alien_cache(). + - LP: #540231 + * mac80211: quit addba_resp_timer if Tx BA session is torn down + - LP: #540231 + * V4L/DVB (13991): gspca_mr973010a: Fix cif type 1 cameras not streaming + on UHCI controllers + - LP: #540231 + * vfs: take f_lock on modifying f_mode after open time + - LP: #540231 + * readahead: introduce FMODE_RANDOM for POSIX_FADV_RANDOM + - LP: #540231 + * HID: remove TENX iBuddy from blacklist + - LP: #540231 + * HID: add multi-input quirk for NextWindow Touchscreen. + - LP: #540231 + * HID: usbhid: introduce timeout for stuck ctrl/out URBs + - LP: #540231 + * airo: fix setting zero length WEP key + - LP: #540231 + * idr: fix a critical misallocation bug, take#2 + - LP: #540231 + * Switch proc/self to nd_set_link() + - LP: #540231 + * sparc: Align clone and signal stacks to 16 bytes. + - LP: #540231 + * sparc32: Fix page_to_phys(). + - LP: #540231 + * sparc32: Fix struct stat uid/gid types. + - LP: #540231 + * sparc: leds_resource.end assigned to itself in clock_board_probe() + - LP: #540231 + * sparc64: Fix sun4u execute bit check in TSB I-TLB load. + - LP: #540231 + * net: Fix sysctl restarts... + - LP: #540231 + * net-sysfs: Use rtnl_trylock in wireless sysfs methods. + - LP: #540231 + * net: bug fix for vlan + gro issue + - LP: #540231 + * inet: Remove bogus IGMPv3 report handling + - LP: #540231 + * ipv6: conntrack: Add member of user to nf_ct_frag6_queue structure + - LP: #540231 + * drivers/net: ks8851_mll ethernet network driver + - LP: #540231 + * sky2: fix transmit DMA map leakage + - LP: #540231 + * SCSI: qla2xxx: Obtain proper host structure during response-queue + processing. + - LP: #540231 + * rtc-core: fix memory leak + - LP: #540231 + * offb: Add support for framebuffer handoff to offb. + - LP: #540231 + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #540231 + * rndis_wlan: handle NL80211_AUTHTYPE_AUTOMATIC + - LP: #540231 + * rndis_wlan: fix buffer overflow in rndis_query_oid + - LP: #540231 + * rndis_wlan: disable stall workaround + - LP: #540231 + * net/via-rhine: Fix scheduling while atomic bugs + - LP: #540231 + * clocksource: Fix up a registration/IRQ race in the sh drivers. + - LP: #540231 + * SCSI: qla1280: Drop host_lock while requesting firmware + - LP: #540231 + * Staging: hv: add a pci device table + - LP: #540231 + * Staging: hv: match on DMI values to know if we should run. + - LP: #540231 + * Staging: mimio: remove the mimio driver + - LP: #540231 + * dvb-core: Fix DoS bug in ULE decapsulation code that can be triggered + by an invalid Payload Pointer + - LP: #540231 + * V4L/DVB (13148): uvcvideo: Handle V4L2_CTRL_TYPE_BUTTON control type in + VIDIOC_QUERYCTRL + - LP: #540231 + * PM / Hibernate: Fix preallocating of memory + - LP: #540231 + * macintosh/therm_adt746x: Fix sysfs attributes lifetime + - LP: #540231 + * macintosh/hwmon/ams: Fix device removal sequence + - LP: #540231 + * oprofile/x86: fix perfctr nmi reservation for mulitplexing + - LP: #540231 + * oprofile: remove tracing build dependency + - LP: #540231 + * oprofile/x86: remove node check in AMD IBS initialization + - LP: #540231 + * oprofile/x86: use kzalloc() instead of kmalloc() + - LP: #540231 + * oprofile/x86: fix msr access to reserved counters + - LP: #540231 + * ALSA: hda: Use 3stack quirk for Toshiba Satellite L40-10Q + - LP: #524948, #540231 + * ALSA: via82xx: add quirk for D1289 motherboard + - LP: #540231 + * ALSA: pcm core - fix fifo_size channels interval check + - LP: #540231 + * ALSA: USB MIDI support for Access Music VirusTI + - LP: #540231 + * ALSA: hda: Use LPIB for Dell Latitude 131L + - LP: #530346, #540231 + * ALSA: hda: Use LPIB for a Biostar Microtech board + - LP: #523953, #540231 + * ALSA: hda - Add a position_fix quirk for MSI Wind U115 + - LP: #540231 + * ALSA: hda - Add position_fix quirk for HP dv3 + - LP: #540231 + * ALSA: hda-intel: Add position_fix quirk for ASUS M2V-MX SE. + - LP: #540231 + * ASoC: fix ak4104 register array access + - LP: #540231 + * driver-core: fix race condition in get_device_parent() + - LP: #540231 + * Driver-Core: devtmpfs - reset inode permissions before unlinking + - LP: #540231 + * tty: Fix the ldisc hangup race + - LP: #540231 + * serial: imx: fix NULL dereference Oops when pdata == NULL + - LP: #540231 + * USB: serial: sierra driver indat_callback fix + - LP: #511157, #540231 + * USB: SIS USB2VGA DRIVER: support KAIREN's USB VGA adaptor + USB20SVGA-MB-PLUS + - LP: #540231 + * USB: fix I2C API usage in ohci-pnx4008. + - LP: #540231 + * p54usb: Add the USB ID for Belkin (Accton) FD7050E ver 1010ec + - LP: #540231 + * p54pci: handle dma mapping errors + - LP: #540231 + * gpiolib: Actually set output state in wm831x_gpio_direction_output() + - LP: #540231 + * hwmon: (tmp421) Fix temperature conversions + - LP: #540231 + * hwmon: (tmp421) Restore missing inputs + - LP: #540231 + * pata_hpt3x2n: always stretch UltraDMA timing + - LP: #540231 + * scm: Only support SCM_RIGHTS on unix domain sockets. + - LP: #540231 + * ath9k: fix beacon timer restart after a card reset + - LP: #540231 + * ath9k: fix rate control fallback rate selection + - LP: #540231 + * ath9k: disable RIFS search for AR91xx based chips + - LP: #540231 + * ath5k: use correct packet type when transmitting + - LP: #540231 + * b43/b43legacy: Wake queues in wireless_core_start + - LP: #540231 + * netfilter: xt_recent: fix buffer overflow + - LP: #540231 + * netfilter: xt_recent: fix false match + - LP: #540231 + * sunxvr500: Additional PCI id for sunxvr500 driver + - LP: #540231 + * thinkpad-acpi: fix poll thread auto-start + - LP: #540231 + * thinkpad-acpi: R52 brightness_mode has been confirmed + - LP: #540231 + * thinkpad-acpi: document HKEY event 3006 + - LP: #540231 + * thinkpad-acpi: make driver events work in NVRAM poll mode + - LP: #540231 + * thinkpad-acpi: fix bluetooth/wwan resume + - LP: #540231 + * ocfs2: Only bug out in direct io write for reflinked extent. + - LP: #540231 + * x86, ia32_aout: do not kill argument mapping + - LP: #540231 + * x86: Add iMac9,1 to pci_reboot_dmi_table + - LP: #540231 + * x86, xen: Disable highmem PTE allocation even when CONFIG_HIGHPTE=y + - LP: #540231 + * x86: Avoid race condition in pci_enable_msix() + - LP: #540231 + * x86: Fix SCI on IOAPIC != 0 + - LP: #540231 + * USB: xhci: Fix finding extended capabilities registers + - LP: #540231 + * USB: fix the idProduct value for USB-3.0 root hubs + - LP: #540231 + * USB: fix crash in uhci_scan_schedule + - LP: #540231 + * USB: remove debugging message for uevent constructions + - LP: #540231 + * USB: Move hcd free_dev call into usb_disconnect to fix oops + - LP: #540231 + * USB: ftdi_sio: isolate all device IDs to new ftdi_sio_ids.h header + - LP: #540231 + * USB: ftdi_sio: sort PID/VID entries in new ftdi_sio_ids.h header + - LP: #540231 + * USB: ftdi_sio: new device id for papouch AD4USB + - LP: #540231 + * USB: ftdi_sio: add device IDs (several ELV, one Mindstorms NXT) + - LP: #540231 + * USB: add new ftdi_sio device ids + - LP: #540231 + * USB: serial: ftdi: add CONTEC vendor and product id + - LP: #540231 + * USB: cp210x: Add 81E8 (Zephyr Bioharness) + - LP: #540231 + * USB: unusual_devs: Add support for multiple Option 3G sticks + - LP: #540231 + * sunrpc: remove unnecessary svc_xprt_put + - LP: #540231 + * SUNRPC: Handle EINVAL error returns from the TCP connect operation + - LP: #540231 + * s3cmci: s3cmci_card_present: Use no_detect to decide whether there is a + card detect pin + - LP: #540231 + * rtc-coh901331: fix braces in resume code + - LP: #540231 + * NFS: Fix an allocation-under-spinlock bug + - LP: #540231 + * dm: free dm_io before bio_endio not after + - LP: #540231 + * KVM: x86 emulator: Add group8 instruction decoding + - LP: #540231 + * KVM: x86 emulator: Forbid modifying CS segment register by mov + instruction + - LP: #540231 + * KVM: x86 emulator: Add group9 instruction decoding + - LP: #540231 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - LP: #540231 + * sched: Fix sched_mv_power_savings for !SMT + - LP: #540231 + * sched: Fix SMT scheduler regression in find_busiest_queue() + - LP: #540231 + * sched: Don't use possibly stale sched_class + - LP: #540231 + * x86, mm: Allow highmem user page tables to be disabled at boot time + - LP: #540231 + * Linux 2.6.32.10 + - LP: #540231 + * drm/i915: give up on 8xx lid status + - LP: #540231 + * drm/i915: Use a dmi quirk to skip a broken SDVO TV output. + - LP: #540231 + * drm/ttm: handle OOM in ttm_tt_swapout + - LP: #540231 + * drm/radeon/kms/atom: fix shr/shl ops + - LP: #540231 + * Linux 2.6.32.10+drm33.1 + - LP: #540231 + + -- Andy Whitcroft Fri, 19 Mar 2010 19:17:09 +0000 + +linux (2.6.32-16.25) lucid; urgency=low + + [ Andy Whitcroft ] + + * linux-tools -- move to Suggests: with explicit seeding + - LP: #534635 + + [ Tim Gardner ] + + * [Config] CONFIG_HID=m + + [ Upstream Kernel Changes ] + + * (pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue() + * KVM: introduce kvm_vcpu_on_spin + * KVM: VMX: Add support for Pause-Loop Exiting + + -- Andy Whitcroft Tue, 09 Mar 2010 14:13:51 +0000 + +linux (2.6.32-16.24) lucid; urgency=low + + [ Andy Whitcroft ] + + * armel -- perf userspace does not support arm + * ia64 -- libelf-dev/binutils-dev to not provide necessary libraries + + -- Andy Whitcroft Sat, 06 Mar 2010 11:42:12 +0000 + +linux (2.6.32-16.23) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: PM report driver and device suspend/resume times -- move config + * update to standards version 3.8.4.0 + * printenv -- expose all of the package selectors + * source package -- cleanup source content control + * doc package -- ensure we do build package content on buildd + * lintian -- correct the address in the debian/copyright + * lintian -- update debhelper package version dependancy + * lintian -- fix ghostscript dependancy + * lintian -- add required misc:Depends + * lintian -- move our debhelper compat level to debian/compat + * perf -- build the kernel carried tools + * perf -- add linux-tools carrying the version switches and manuals + * SAUCE: fix up Kconfig for staging drivers + * [Config] enable NOUVEAU etc following drm backport + * update DRM to mainline v2.6.33 + * [Config] Remove AppArmor config options that no longer exist (ports) + * [Config] updateportsconfigs following drm update + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-03-04 + * SAUCE: AppArmor: Reintroduce AppArmor 2.4 compatibility + * SAUCE: AppArmor: replace strim with strstrip for 2.6.32 kernels + * [Config] Remove AppArmor config options that no longer exist + + [ Manoj Iyer ] + + * ubuntu: rtl8192se -- version 2010-0115,0014 + - LP: #530275 + * [Config] added CONFIG_RTL8192SE module. + - LP: #530275 + + [ Tim Gardner ] + + * [Config] Added vmw_pvscsi to d-i/scsi-modules + - LP: #531017 + * [Upstream] netfilter: xt_recent: Add an entry reaper + + [ Upstream Kernel Changes ] + + * Revert "KVM: x86 emulator: Check CPL level during privilege instruction + emulation" + * Revert "KVM: x86 emulator: Fix popf emulation" + * Revert "KVM: x86 emulator: Check IOPL level during io instruction + emulation" + * Revert "KVM: x86 emulator: Add Virtual-8086 mode of emulation" + * Revert "KVM: fix memory access during x86 emulation." + * Add vlan (8021.Q) module package for d-i. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + * [Upstream] docbook: need xmldoclinks for all doc types + * x86: set_personality_ia32() misses force_personality32 + * lib: Introduce generic list_sort function + * drm/nv50: Implement ctxprog/state generation. + * drm/nv50: Remove redundant/incorrect ctxvals initialisation. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + + -- Andy Whitcroft Fri, 05 Mar 2010 15:40:38 +0000 + +linux (2.6.32-15.22) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT" + * Revert "SAUCE: PM report driver and device suspend/resume times." + * [Config] set CONFIG_SR_REPORT_TIME_LIMIT + + [ Manoj Iyer ] + + * SAUCE: PM report driver and device suspend/resume times. + + -- Andy Whitcroft Tue, 02 Mar 2010 01:35:37 +0000 + +linux (2.6.32-15.21) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/i915: Increase fb alignment to 64k" + * Revert "[Config] lenovo-sl-laptop -- enable" + * Revert "ubuntu: lenovo-sl-laptop -- git tip (b19a08f81f)" + * armel -- cramfs module will no longer be built + * d-i -- make all modules optional + * rename the debug packages to match archive standard + - LP: #527837 + * lenovo-sl-laptop is no longer built + + [ Colin Ian King ] + + * Disable 4MB page tables for Atom, work around errata AAE44 + - LP: #523112 + + [ Colin Watson ] + + * ubuntu: dm-raid4-5: Depend on XOR_BLOCKS + * ubuntu: fsam7400: Depend on CHECK_SIGNATURE + + [ Jesse Barnes ] + + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + + [ Loïc Minier ] + + * [Config] armel Update versatile initrd configs + - LP: #524893 + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + + [ Manoj Iyer ] + + * [Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT + + [ Mario Limonciello ] + + * SAUCE: v3 - Add Dell Business Class Netbook LED driver + + [ Rafael J. Wysocki ] + + * SAUCE: PM report driver and device suspend/resume times. + + [ Surbhi Palande ] + + * Revert "[Upstream] e1000e: enhance frame fragment detection" + - CVE-2009-4538 + * Revert "[Upstream] e1000: enhance frame fragment detection" + - CVE-2009-4536 + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_LEDS_DELL_NETBOOKS=m + * SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow + * SAUCE: (pre-stable) netfilter: xt_recent: fix false match + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) eCryptfs: Add getattr function" + * Fix potential crash with sys_move_pages + * futex_lock_pi() key refcnt fix + * futex: Handle user space corruption gracefully + * futex: Handle futex value corruption gracefully + * Fix race in tty_fasync() properly + * hwmon: (w83781d) Request I/O ports individually for probing + * hwmon: (lm78) Request I/O ports individually for probing + * hwmon: (adt7462) Wrong ADT7462_VOLT_COUNT + * ALSA: ctxfi - fix PTP address initialization + * drm/i915: disable hotplug detect before Ironlake CRT detect + * drm/i915: enable self-refresh on 965 + * drm/i915: Disable SR when more than one pipe is enabled + * drm/i915: Fix DDC on some systems by clearing BIOS GMBUS setup. + * drm/i915: Add HP nx9020/SamsungSX20S to ACPI LID quirk list + * drm/i915: Fix the incorrect DMI string for Samsung SX20S laptop + * drm/i915: Add MALATA PC-81005 to ACPI LID quirk list + * usb: r8a66597-hcd: Flush the D-cache for the pipe-in transfer buffers. + * i2c-tiny-usb: Fix on big-endian systems + * drm/i915: handle FBC and self-refresh better + * drm/i915: Increase fb alignment to 64k + * drm/i915: Update write_domains on active list after flush. + * regulator: Fix display of null constraints for regulators + * ALSA: hda-intel: Avoid divide by zero crash + * CPUFREQ: Fix use after free of struct powernow_k8_data + * freeze_bdev: don't deactivate successfully frozen MS_RDONLY sb + * cciss: Make cciss_seq_show handle holes in the h->drv[] array + * ioat: fix infinite timeout checking in ioat2_quiesce + * resource: add helpers for fetching rlimits + * fs/exec.c: restrict initial stack space expansion to rlimit + * cifs: fix length calculation for converted unicode readdir names + * NFS: Fix a reference leak in nfs_wb_cancel_page() + * NFS: Try to commit unstable writes in nfs_release_page() + * NFSv4: Don't allow posix locking against servers that don't support it + * NFSv4: Ensure that the NFSv4 locking can recover from stateid errors + * NFS: Fix an Oops when truncating a file + * NFS: Fix a umount race + * NFS: Fix a bug in nfs_fscache_release_page() + * NFS: Fix the mapping of the NFSERR_SERVERFAULT error + * md: fix 'degraded' calculation when starting a reshape. + * V4L/DVB: dvb-core: fix initialization of feeds list in demux filter + * Export the symbol of getboottime and mmonotonic_to_bootbased + * kvmclock: count total_sleep_time when updating guest clock + * KVM: PIT: control word is write-only + * tpm_infineon: fix suspend/resume handler for pnp_driver + * amd64_edac: Do not falsely trigger kerneloops + * netfilter: nf_conntrack: fix memory corruption with multiple namespaces + * netfilter: nf_conntrack: per netns nf_conntrack_cachep + * netfilter: nf_conntrack: restrict runtime expect hashsize modifications + * netfilter: xtables: compat out of scope fix + * netfilter: nf_conntrack: fix hash resizing with namespaces + * drm/i915: remove full registers dump debug + * drm/i915: add i915_lp_ring_sync helper + * drm/i915: Don't wait interruptible for possible plane buffer flush + * dasd: remove strings from s390dbf + * crypto: padlock-sha - Add import/export support + * wmi: Free the allocated acpi objects through wmi_get_event_data + * dell-wmi, hp-wmi, msi-wmi: check wmi_get_event_data() return value + * /dev/mem: introduce size_inside_page() + * devmem: check vmalloc address on kmem read/write + * devmem: fix kmem write bug on memory holes + * SCSI: mptfusion : mptscsih_abort return value should be SUCCESS instead + of value 0. + * sh: Couple kernel and user write page perm bits for CONFIG_X2TLB + * ALSA: hda - use WARN_ON_ONCE() for zero-division detection + * dst: call cond_resched() in dst_gc_task() + * ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support + * befs: fix leak + * rtc-fm3130: add missing braces + * Call flush_dcache_page after PIO data transfers in libata-sff.c + * ahci: add Acer G725 to broken suspend list + * pktgen: Fix freezing problem + * x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt + * x86/amd-iommu: Fix deassignment of a device from the pt_domain + * x86: Re-get cfg_new in case reuse/move irq_desc + * Staging: fix rtl8187se compilation errors with mac80211 + * ALSA: usb-audio - Avoid Oops after disconnect + * serial: 8250: add serial transmitter fully empty test + * sysfs: sysfs_sd_setattr set iattrs unconditionally + * class: Free the class private data in class_release + * USB: usbfs: only copy the actual data received + * USB: usbfs: properly clean up the as structure on error paths + * rtl8187: Add new device ID + * ACPI: Add NULL pointer check in acpi_bus_start + * ACPI: fix High cpu temperature with 2.6.32 + * drm/radeon/kms: use udelay for short delays + * NFS: Too many GETATTR and ACCESS calls after direct I/O + * eCryptfs: Add getattr function + * b43: Fix throughput regression + * ath9k: Fix sequence numbers for PAE frames + * mac80211: Fix probe request filtering in IBSS mode + * iwlwifi: Fix to set correct ht configuration + * dm stripe: avoid divide by zero with invalid stripe count + * dm log: userspace fix overhead_size calcuations + * Linux 2.6.32.9 + * sfc: Fix SFE4002 initialisation + * sfc: Fix sign of efx_mcdi_poll_reboot() error in efx_mcdi_poll() + * sfc: SFE4002/SFN4112F: Widen temperature and voltage tolerances + * (pre-stable) HID: handle joysticks with large number of buttons + - LP: #492056 + * (pre-stable) HID: extend mask for BUTTON usage page + - LP: #492056 + * PM: Measure device suspend and resume times + * e1000: enhance frame fragment detection + - CVE-2009-4536 + * e1000e: enhance frame fragment detection + - CVE-2009-4538 + * KVM: fix memory access during x86 emulation. + - CVE-2010-0306 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - CVE-2010-0306 + * KVM: x86 emulator: Fix popf emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - CVE-2010-0306 + * Input: wacom - ensure the device is initialized properly upon resume + * Input: wacom - add defines for packet lengths of various devices + * Input: wacom - add support for new LCD tablets + - LP: #516777 + + -- Andy Whitcroft Mon, 01 Mar 2010 22:56:28 +0000 + +linux (2.6.32-14.20) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebuild following the GCC update to match compiler for out of tree modules + * Revert "[Config] drbd -- enable" + * Revert "ubuntu: drbd -- version 8.3.1" + * SAUCE: khubd -- switch USB product/manufacturer/serial handling to RCU + - LP: #510937 + + -- Andy Whitcroft Fri, 19 Feb 2010 18:47:18 +0000 + +linux (2.6.32-14.19) lucid; urgency=low + + [ Andy Whitcroft ] + + * ensure we build the source package contents when enabled + - LP: #522308 + * [Config] enable CONFIG_X86_MCE_XEON75XX + * SAUCE: AppArmor -- add linux/kref.h for struct kref + * [Config] enable CONFIG_HID_ORTEK + * enable udeb generation for arm versatile flavour + - LP: #522515 + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-02-18 + - LP: #439560, #496110, #507069 + + [ Johnathon Harris ] + + * SAUCE: HID: add support for Ortek WKB-2000 + - LP: #405390 + + [ Upstream Kernel Changes ] + + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #490487 + * x86, mce: Xeon75xx specific interface to get corrected memory error + information + * x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll + * x86, mce: Make xeon75xx memory driver dependent on PCI + * drm/edid: Unify detailed block parsing between base and extension + blocks + - LP: #500999 + * (pre-stable) eCryptfs: Add getattr function + - LP: #390833 + + -- Andy Whitcroft Thu, 18 Feb 2010 19:22:02 +0000 + +linux (2.6.32-13.18) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "enforcer -- make the enforcement configuration common" + * Revert "(pre-stable) Input: ALPS - add interleaved protocol support + (Dell E6x00 series)" + * Revert "(pre-stable) driver-core: fix devtmpfs crash on s390" + * Revert "(pre-stable) Driver-Core: devtmpfs - set root directory mode to + 0755" + * Revert "SAUCE: Adds support for COMPAL JHL90 webcam" + * Revert "SAUCE: fix kernel oops in VirtualBox during paravirt patching" + * Revert "SAUCE: make fc transport removal of target configurable" + * enforcer -- make the enforcement configuration common + * getabis -- add preempt flavour to the list + * [Config] enforce DEVTMPFS options + * [Config] armel -- cleanup to-be builtin modules + * [Config] cleanup ports configs + * [Config] enable CRYPTO_GHASH_CLMUL_NI_INTEL + - LP: #485536 + * add printdebian target to find branch target + * distclean -- do not remove debian.env + * [Config] generic-pae switch to M586TSC + - LP: #519448 + * git-ubuntu-log -- commonise duplicated log handling + * git-ubuntu-log -- tighten up Bug: NNNN matching + * git-ubuntu-log -- sort the bug numbers + + [ Chris Wilson ] + + * (pre-stable) drm/i915: Increase fb alignment to 64k + - LP: #404064 + + [ Eric Miao ] + + * arm -- enable ubuntu/ directory + + [ Huang Ying ] + + * SAUCE: crypto: ghash - Add PCLMULQDQ accelerated implementation + * SAUCE: crypto: ghash-intel - Fix building failure on x86_32 + + [ Loïc Minier ] + + * [Config] cleanup preempt configuration + * [Config] versatile: Fix video output + - LP: #517594 + * [Config] armel DEFAULT_MMAP_MIN_ADDR=32768 + * [Config] Large update to armel/versatile + * [Config] versatile: Add RTC support + * [Config] armel: Enable NEON + * [Config] versatile: Builtin MMC support + * [Config] versatile Builtin SCSI controller + * [Config] armel Disable dma_cache_sync callers + * [Config] armel Disable asm/time.h users + * [Config] armel Disable out of range udelay() + * [Config] armel Disable flush_cache_range() users + * [Config] armel -- Enable ubuntu/ drivers + + [ Steve Conklin ] + + * SAUCE: drm/i915: Add display hotplug event on Ironlake + * SAUCE: drm/i915: Add ACPI OpRegion support for Ironlake + + [ Upstream Kernel Changes ] + + * Revert "[Upstream]: oprofile/x86: add Xeon 7500 series support" + * Revert "Revert "[Bluetooth] Eliminate checks for impossible conditions + in IRQ handler"" + * clockevent: Don't remove broadcast device when cpu is dead + * clockevents: Add missing include to pacify sparse + * ACPI: don't cond_resched if irq is disabled + * be2net: Add support for next generation of BladeEngine device. + * be2net: Add the new PCI IDs to PCI_DEVICE_TABLE. + * mpt2sas: New device SAS2208 support is added + * ar9170: Add support for D-Link DWA 160 A2 + * powerpc/fsl: Add PCI device ids for new QoirQ chips + * davinci: dm646x: Add support for 3.x silicon revision + * Input: ALPS - add interleaved protocol support (Dell E6x00 series) + * Driver-Core: devtmpfs - set root directory mode to 0755 + * driver-core: fix devtmpfs crash on s390 + * vfs: get_sb_single() - do not pass options twice + * ALSA: hda - Add PCI IDs for Nvidia G2xx-series + * V4L/DVB (13569): smsusb: add autodetection support for five additional + Hauppauge USB IDs + * USB: mos7840: add device IDs for B&B electronics devices + * USB: ftdi_sio: add USB device ID's for B&B Electronics line + * V4L/DVB (13168): Add support for Asus Europa Hybrid DVB-T card (SAA7134 + SubVendor ID: 0x1043 Device ID: 0x4847) + * iTCO_wdt: Add support for Intel Ibex Peak + * atl1c:use common_task instead of reset_task and link_chg_task + * atl1e:disable NETIF_F_TSO6 for hardware limit + * V4L/DVB (13680a): DocBook/media: copy images after building HTML + * V4L/DVB (13680b): DocBook/media: create links for included sources + * netfilter: xtables: fix conntrack match v1 ipt-save output + * partitions: read whole sector with EFI GPT header + * partitions: use sector size for EFI GPT + * ALSA: ice1724 - Patch for suspend/resume for ESI Juli@ + * sched: Fix isolcpus boot option + * sched: Fix missing sched tunable recalculation on cpu add/remove + * nohz: Prevent clocksource wrapping during idle + * nfsd: Fix sort_pacl in fs/nfsd/nf4acl.c to actually sort groups + * timers, init: Limit the number of per cpu calibration bootup messages + * PCI: Always set prefetchable base/limit upper32 registers + * iscsi class: modify handling of replacement timeout + * NFS: Revert default r/wsize behavior + * HID: fixup quirk for NCR devices + * scsi_devinfo: update Hitachi entries (v2) + * scsi_dh: create sysfs file, dh_state for all SCSI disk devices + * scsi_transport_fc: remove invalid BUG_ON + * lpfc: fix hang on SGI ia64 platform + * libfc: fix typo in retry check on received PRLI + * libfc: fix ddp in fc_fcp for 0 xid + * fcoe: remove redundant checking of netdev->netdev_ops + * libfc: Fix wrong scsi return status under FC_DATA_UNDRUN + * libfc: lport: fix minor documentation errors + * libfc: don't WARN_ON in lport_timeout for RESET state + * fcoe: initialize return value in fcoe_destroy + * libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data + * libfc: fix memory corruption caused by double frees and bad error + handling + * libfc: fix free of fc_rport_priv with timer pending + * libfc: remote port gets stuck in restart state without really + restarting + * fcoe, libfc: fix an libfc issue with queue ramp down in libfc + * fcoe: Fix checking san mac address + * fcoe: Fix getting san mac for VLAN interface + * qlge: Remove explicit setting of PCI Dev CTL reg. + * qlge: Set PCIE max read request size. + * qlge: Don't fail open when port is not initialized. + * qlge: Add handler for DCBX firmware event. + * qlge: Bonding fix for mode 6. + * PCI: AER: fix aer inject result in kernel oops + * DMI: allow omitting ident strings in DMI tables + * Input: i8042 - remove identification strings from DMI tables + * Input: i8042 - add Gigabyte M1022M to the noloop list + * Input: i8042 - add Dritek quirk for Acer Aspire 5610. + * ALSA: hda - select IbexPeak handler for Calpella + * ALSA: hda - Fix quirk for Maxdata obook4-1 + * ALSA: hda - Add missing Line-Out and PCM switches as slave + * iTCO_wdt.c - cleanup chipset documentation + * iTCO_wdt: add PCI ID for the Intel EP80579 (Tolapai) SoC + * iTCO_wdt: Add Intel Cougar Point and PCH DeviceIDs + * ahci: disable SNotification capability for ich8 + * ata_piix: fix MWDMA handling on PIIX3 + * md: fix small irregularity with start_ro module parameter + * V4L/DVB (13826): uvcvideo: Fix controls blacklisting + * cio: fix double free in case of probe failure + * cio: dont panic in non-fatal conditions + * netiucv: displayed TX bytes value much too high + * ipc ns: fix memory leak (idr) + * ALSA: hda - Fix HP T5735 automute + * hwmon: (fschmd) Fix a memleak on multiple opens of /dev/watchdog + * UBI: fix memory leak in update path + * UBI: initialise update marker + * ASoC: fix a memory-leak in wm8903 + * mac80211: check that ieee80211_set_power_mgmt only handles STA + interfaces. + * cfg80211: fix channel setting for wext + * KVM: S390: fix potential array overrun in intercept handling + * KVM: only allow one gsi per fd + * KVM: Fix race between APIC TMR and IRR + * KVM: MMU: bail out pagewalk on kvm_read_guest error + * KVM: x86: Fix host_mapping_level() + * KVM: x86: Fix probable memory leak of vcpu->arch.mce_banks + * KVM: x86: Fix leak of free lapic date in kvm_arch_vcpu_init() + * KVM: fix lock imbalance in kvm_*_irq_source_id() + * KVM: only clear irq_source_id if irqchip is present + * IPoIB: Clear ipoib_neigh.dgid in ipoib_neigh_alloc() + * x86: Reenable TSC sync check at boot, even with NONSTOP_TSC + * ACPI: enable C2 and Turbo-mode on Nehalem notebooks on A/C + - LP: #516325 + * iwlwifi: Fix throughput stall issue in HT mode for 5000 + * fnctl: f_modown should call write_lock_irqsave/restore + * x86, msr/cpuid: Pass the number of minors when unregistering MSR and + CPUID drivers. + * Linux 2.6.32.7 + * scsi_lib: Fix bug in completion of bidi commands + * mptsas: Fix issue with chain pools allocation on katmai + * mm: add new 'read_cache_page_gfp()' helper function + * drm/i915: Selectively enable self-reclaim + * firewire: ohci: fix crashes with TSB43AB23 on 64bit systems + * S390: fix single stepped svcs with TRACE_IRQFLAGS=y + * x86: Set hotpluggable nodes in nodes_possible_map + * x86: Remove "x86 CPU features in debugfs" (CONFIG_X86_CPU_DEBUG) + * libata: retry FS IOs even if it has failed with AC_ERR_INVALID + * zcrypt: Do not remove coprocessor for error 8/72 + * dasd: fix possible NULL pointer errors + * ACPI: Add a generic API for _OSC -v2 + * ACPI: Add platform-wide _OSC support. + * ACPI: fix OSC regression that caused aer and pciehp not to load + * ACPI: Advertise to BIOS in _OSC: _OST on _PPC changes + * UBI: fix volume creation input checking + * e1000/e1000e: don't use small hardware rx buffers + * drm/i915: Reload hangcheck timer too for Ironlake + * Fix a leak in affs_fill_super() + * Fix failure exits in bfs_fill_super() + * fix oops in fs/9p late mount failure + * fix leak in romfs_fill_super() + * Fix remount races with symlink handling in affs + * fix affs parse_options() + * Fix failure exit in ipathfs + * mm: fix migratetype bug which slowed swapping + * FDPIC: Respect PT_GNU_STACK exec protection markings when creating + NOMMU stack + * Split 'flush_old_exec' into two functions + * sparc: TIF_ABI_PENDING bit removal + * x86: get rid of the insane TIF_ABI_PENDING bit + * Input: winbond-cir - remove dmesg spam + * x86: Disable HPET MSI on ATI SB700/SB800 + * iwlwifi: set default aggregation frame count limit to 31 + * drm/i915: only enable hotplug for detected outputs + * firewire: core: add_descriptor size check + * SECURITY: selinux, fix update_rlimit_cpu parameter + * regulator: Specify REGULATOR_CHANGE_STATUS for WM835x LED constraints + * x86: Add Dell OptiPlex 760 reboot quirk + - LP: #488319 + * x86: Add quirk for Intel DG45FC board to avoid low memory corruption + * x86/amd-iommu: Fix possible integer overflow + * clocksource: fix compilation if no GENERIC_TIME + * tcp: update the netstamp_needed counter when cloning sockets + * sky2: Fix oops in sky2_xmit_frame() after TX timeout + * net: restore ip source validation + * af_packet: Don't use skb after dev_queue_xmit() + * ax25: netrom: rose: Fix timer oopses + * KVM: allow userspace to adjust kvmclock offset + * oprofile/x86: add Xeon 7500 series support + * oprofile/x86: fix crash when profiling more than 28 events + * libata: retry link resume if necessary + * mm: percpu-vmap fix RCU list walking + * mm: purge fragmented percpu vmap blocks + * block: fix bio_add_page for non trivial merge_bvec_fn case + * Fix 'flush_old_exec()/setup_new_exec()' split + * random: drop weird m_time/a_time manipulation + * random: Remove unused inode variable + * block: fix bugs in bio-integrity mempool usage + * usb: r8a66597-hdc disable interrupts fix + * connector: Delete buggy notification code. + * be2net: Bug fix to support newer generation of BE ASIC + * be2net: Fix memset() arg ordering. + * mm: flush dcache before writing into page to avoid alias + * mac80211: fix NULL pointer dereference when ftrace is enabled + * imxfb: correct location of callbacks in suspend and resume + * mx3fb: some debug and initialisation fixes + * starfire: clean up properly if firmware loading fails + * kernel/cred.c: use kmem_cache_free + * uartlite: fix crash when using as console + * pktcdvd: removing device does not remove its sysfs dir + * ath9k: fix eeprom INI values override for 2GHz-only cards + * ath9k: fix beacon slot/buffer leak + * powerpc: TIF_ABI_PENDING bit removal + * NET: fix oops at bootime in sysctl code + * Linux 2.6.32.8 + + -- Andy Whitcroft Wed, 10 Feb 2010 18:56:52 +0000 + +linux (2.6.32-12.17) lucid; urgency=low + + [ Andy Whitcroft ] + + * restore linux-image prefix -- master + * enforce -- we require SELINUX enabled -- master + * enforce -- ensure APPARMOR is our default LSM -- master + * make doc package completely optional -- master + * make source package completely optional -- master + * make linux-libc-dev completly optional -- master + * convert package disable to a deps list -- master + * allow common headers to switch from indep to arch -- master + * convert binary package disable to a deps list -- master + * add configuration option for a full source build tree -- master + * add support for uImage kernels in package control scripts + * getabis -- cleanup and parameterise repository list -- master + * getabis -- move configuration to etc/getabi -- master + * kernelconfig -- move configuration to etc -- master + * rules -- make debian/debian.env master for branch name + * set the current branch name -- master + * pull back common debian.master files into debian -- master + * enforcer -- make the enforcement configuration common + * insert-changes -- correctly link to debian/rules in DROOT + + [ Colin Watson ] + + * future-proof ddeb handling against buildd changes + + [ Eric Miao ] + + * SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} depend on + X86 + + [ Loïc Minier ] + + * Add modules.builtin.bin to prerm rm list + - LP: #516584 + + [ Tim Gardner ] + + * [Config] Implement the amd64 preempt flavour + + [ Upstream Kernel Changes ] + + * syslog: distinguish between /proc/kmsg and syscalls + - LP: #515623 + * sfc: Fix polling for slow MCDI operations + * sfc: Fix conditions for MDIO self-test + * sfc: QT202x: Remove unreliable MMD check at initialisation + * sfc: Add workspace for GMAC bug workaround to MCDI MAC_STATS buffer + * sfc: Use fixed-size buffers for MCDI NVRAM requests + + -- Andy Whitcroft Fri, 05 Feb 2010 07:09:31 +0000 + +linux (2.6.32-12.16) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: acpi battery -- delay first lookup of the battery until + first use" + * SAUCE: acpi battery -- move first lookup asynchronous + - LP: #507211 + * [Config] update configs to cleanup generic configs + * [Config] disable CONFIG_X86_CPU_DEBUG for amd64 + * [Config] enable USER_NS + - LP: #480739, #509808 + + [ Heiko Carstens ] + + * (pre-stable) driver-core: fix devtmpfs crash on s390 + - LP: #512370 + + [ John Johansen ] + + * [Config] for server and virtual flavours make CONFIG_SCSI_SYM53C8XX_2=y + - LP: #494565 + * [Config] VIRTIO=y for server/virtual flavours + - LP: #494565 + + [ Kay Sievers ] + + * (pre-stable) Driver-Core: devtmpfs - set root directory mode to 0755 + - LP: #512370 + + [ Kees Cook ] + + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + + [ Leann Ogasawara ] + + * [Upstream] e1000: enhance frame fragment detection + - CVE-2009-4536 + * [Upstream] e1000e: enhance frame fragment detection + - CVE-2009-4538 + + [ Sebastian Kapfer ] + + * (pre-stable) Input: ALPS - add interleaved protocol support (Dell E6x00 + series) + - LP: #296610 + + [ Upstream Kernel Changes ] + + * inotify: do not reuse watch descriptors + - LP: #485556 + * inotify: only warn once for inotify problems + * revert "drivers/video/s3c-fb.c: fix clock setting for Samsung SoC + Framebuffer" + * memcg: ensure list is empty at rmdir + * drm/i915: remove loop in Ironlake interrupt handler + * block: Fix incorrect reporting of partition alignment + * x86, mce: Thermal monitoring depends on APIC being enabled + * futexes: Remove rw parameter from get_futex_key() + * page allocator: update NR_FREE_PAGES only when necessary + * x86, apic: use physical mode for IBM summit platforms + * edac: i5000_edac critical fix panic out of bounds + * x86: SGI UV: Fix mapping of MMIO registers + * mfd: WM835x GPIO direction register is not locked + * mfd: Correct WM835x ISINK ramp time defines + * ALSA: hda - Fix missing capture mixer for ALC861/660 codecs + * V4L/DVB (13868): gspca - sn9c20x: Fix test of unsigned. + * reiserfs: truncate blocks not used by a write + * HID: add device IDs for new model of Apple Wireless Keyboard + * PCI/cardbus: Add a fixup hook and fix powerpc + * Input: pmouse - move Sentelic probe down the list + * asus-laptop: add Lenovo SL hotkey support + * sched: Fix cpu_clock() in NMIs, on !CONFIG_HAVE_UNSTABLE_SCHED_CLOCK + * sparc64: Fix NMI programming when perf events are active. + * sparc64: Fix Niagara2 perf event handling. + * i2c: Do not use device name after device_unregister + * i2c/pca: Don't use *_interruptible + * serial/8250_pnp: add a new Fujitsu Wacom Tablet PC device + * sched: Fix task priority bug + * vfs: Fix vmtruncate() regression + * Linux 2.6.32.5 + * x86, msr/cpuid: Register enough minors for the MSR and CPUID drivers + * V4L/DVB (13900): gspca - sunplus: Fix bridge exchanges. + * Staging: asus_oled: fix oops in 2.6.32.2 + * Staging: hv: fix smp problems in the hyperv core code + * tty: fix race in tty_fasync + * ecryptfs: use after free + * ecryptfs: initialize private persistent file before dereferencing + pointer + * nozomi: quick fix for the close/close bug + * serial: 8250_pnp: use wildcard for serial Wacom tablets + * usb: serial: fix memory leak in generic driver + * USB: fix bitmask merge error + * USB: Don't use GFP_KERNEL while we cannot reset a storage device + * USB: EHCI: fix handling of unusual interrupt intervals + * USB: EHCI & UHCI: fix race between root-hub suspend and port resume + * USB: add missing delay during remote wakeup + * USB: add speed values for USB 3.0 and wireless controllers + * ACPI: EC: Accelerate query execution + * ACPI: EC: Add wait for irq storm + * SCSI: enclosure: fix oops while iterating enclosure_status array + * drm/i915: Read the response after issuing DDC bus switch command + * drm/i915: try another possible DDC bus for the SDVO device with + multiple outputs + * block: bdev_stack_limits wrapper + * DM: Fix device mapper topology stacking + * x86/PCI/PAT: return EINVAL for pci mmap WC request for !pat_enabled + * USB: fix usbstorage for 2770:915d delivers no FAT + * vmalloc: remove BUG_ON due to racy counting of VM_LAZY_FREE + * perf timechart: Use tid not pid for COMM change + * perf events: Dont report side-band events on each cpu for + per-task-per-cpu events + * perf: Honour event state for aux stream data + * Linux 2.6.32.6 + + -- Andy Whitcroft Wed, 27 Jan 2010 16:40:23 +0000 + +linux (2.6.32-11.15) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/radeon/kms: fix crtc vblank update for r600" + * Revert "(pre-stable) sched: Fix balance vs hotplug race" + * Revert "[Upstream] acerhdf: Limit modalias matching to supported + boards" + * Revert "[Upstream] mmc: prevent dangling block device from accessing + stale queues" + * Revert "SAUCE: Fix nx_enable reporting" + * Revert "SAUCE: [x86] fix report of cs-limit nx-emulation" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: i915 -- disable powersave by default + - LP: #492392 + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Tim Gardner ] + + * [Upstream] b43: Declare all possible firmware files. + - LP: #488636 + * [Config] updateconfigs after adding pvscsi + - LP: #497156 + * [Config] CONFIG_BT=m + + [ Upstream Kernel Changes ] + + * Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu + for pre-Pentium" + * SCSI: ipr: fix EEH recovery + * SCSI: qla2xxx: dpc thread can execute before scsi host has been added + * SCSI: st: fix mdata->page_order handling + * SCSI: fc class: fix fc_transport_init error handling + * sched: Fix task_hot() test order + * x86, cpuid: Add "volatile" to asm in native_cpuid() + * sched: Select_task_rq_fair() must honour SD_LOAD_BALANCE + * clockevents: Prevent clockevent_devices list corruption on cpu hotplug + * pata_hpt3x2n: fix clock turnaround + * pata_cmd64x: fix overclocking of UDMA0-2 modes + * ASoC: wm8974: fix a wrong bit definition + * sound: sgio2audio/pdaudiocf/usb-audio: initialize PCM buffer + * ALSA: hda - Fix missing capsrc_nids for ALC88x + * acerhdf: limit modalias matching to supported + - LP: #435958 + * ACPI: EC: Fix MSI DMI detection + * ACPI: Use the return result of ACPI lid notifier chain correctly + * powerpc: Handle VSX alignment faults correctly in little-endian mode + * ASoC: Do not write to invalid registers on the wm9712. + * drm/radeon: fix build on 64-bit with some compilers. + * USB: emi62: fix crash when trying to load EMI 6|2 firmware + * USB: option: support hi speed for modem Haier CE100 + * USB: Fix a bug on appledisplay.c regarding signedness + * USB: musb: gadget_ep0: avoid SetupEnd interrupt + * Bluetooth: Prevent ill-timed autosuspend in USB driver + * USB: rename usb_configure_device + * USB: fix bugs in usb_(de)authorize_device + * drivers/net/usb: Correct code taking the size of a pointer + * x86: SGI UV: Fix writes to led registers on remote uv hubs + * md: Fix unfortunate interaction with evms + * dma: at_hdmac: correct incompatible type for argument 1 of + 'spin_lock_bh' + * dma-debug: Do not add notifier when dma debugging is disabled. + * dma-debug: Fix bug causing build warning + * cifs: NULL out tcon, pSesInfo, and srvTcp pointers when chasing DFS + referrals + * x86/amd-iommu: Fix initialization failure panic + * ioat3: fix p-disabled q-continuation + * ioat2,3: put channel hardware in known state at init + * KVM: MMU: remove prefault from invlpg handler + * KVM: LAPIC: make sure IRR bitmap is scanned after vm load + * Libertas: fix buffer overflow in lbs_get_essid() + * iwmc3200wifi: fix array out-of-boundary access + * mac80211: fix propagation of failed hardware reconfigurations + * mac80211: fix WMM AP settings application + * mac80211: Fix IBSS merge + * cfg80211: fix race between deauth and assoc response + * ath5k: fix SWI calibration interrupt storm + * ath9k: wake hardware for interface IBSS/AP/Mesh removal + * ath9k: Fix TX queue draining + * ath9k: fix missed error codes in the tx status check + * ath9k: wake hardware during AMPDU TX actions + * ath9k: fix suspend by waking device prior to stop + * ath9k_hw: Fix possible OOB array indexing in gen_timer_index[] on + 64-bit + * ath9k_hw: Fix AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB and its shift value + in 0x4054 + * iwl3945: disable power save + * iwl3945: fix panic in iwl3945 driver + * iwlwifi: fix EEPROM/OTP reading endian annotations and a bug + * iwlwifi: fix more eeprom endian bugs + * iwlwifi: fix 40MHz operation setting on cards that do not allow it + * mac80211: fix race with suspend and dynamic_ps_disable_work + * NOMMU: Optimise away the {dac_,}mmap_min_addr tests + * 'sysctl_max_map_count' should be non-negative + * kernel/sysctl.c: fix the incomplete part of + sysctl_max_map_count-should-be-non-negative.patch + * V4L/DVB (13596): ov511.c typo: lock => unlock + * x86/ptrace: make genregs[32]_get/set more robust + * memcg: avoid oom-killing innocent task in case of use_hierarchy + * e100: Fix broken cbs accounting due to missing memset. + * ipv6: reassembly: use seperate reassembly queues for conntrack and + local delivery + * netfilter: fix crashes in bridge netfilter caused by fragment jumps + * hwmon: (sht15) Off-by-one error in array index + incorrect constants + * b43: avoid PPC fault during resume + * Keys: KEYCTL_SESSION_TO_PARENT needs TIF_NOTIFY_RESUME architecture + support + * sched: Fix balance vs hotplug race + * drm/radeon/kms: fix crtc vblank update for r600 + * drm: disable all the possible outputs/crtcs before entering KMS mode + * S390: dasd: support DIAG access for read-only devices + * xen: fix is_disconnected_device/exists_disconnected_device + * xen: improvement to wait_for_devices() + * xen: wait up to 5 minutes for device connetion + * orinoco: fix GFP_KERNEL in orinoco_set_key with interrupts disabled + * udf: Try harder when looking for VAT inode + * Add unlocked version of inode_add_bytes() function + * quota: decouple fs reserved space from quota reservation + * ext4: Convert to generic reserved quota's space management. + * ext4: fix sleep inside spinlock issue with quota and dealloc (#14739) + * x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus + * cpumask: use modern cpumask style in drivers/edac/amd64_edac.c + * amd64_edac: unify MCGCTL ECC switching + * x86, msr: Add support for non-contiguous cpumasks + * x86, msr: msrs_alloc/free for CONFIG_SMP=n + * amd64_edac: fix driver instance freeing + * amd64_edac: make driver loading more robust + * amd64_edac: fix forcing module load/unload + * sched: Sched_rt_periodic_timer vs cpu hotplug + * ext4: Update documentation to correct the inode_readahead_blks option + name + * lguest: fix bug in setting guest GDT entry + * vmscan: do not evict inactive pages when skipping an active list scan + * ksm: fix mlockfreed to munlocked + * rt2x00: Disable powersaving for rt61pci and rt2800pci. + * generic_permission: MAY_OPEN is not write access + * Linux 2.6.32.3 + * untangle the do_mremap() mess + * fasync: split 'fasync_helper()' into separate add/remove functions + * ASoC: fix params_rate() macro use in several codecs + * modules: Skip empty sections when exporting section notes + * exofs: simple_write_end does not mark_inode_dirty + * nfsd: make sure data is on disk before calling ->fsync + * sunrpc: fix peername failed on closed listener + * SUNRPC: Fix up an error return value in + gss_import_sec_context_kerberos() + * SUNRPC: Fix the return value in gss_import_sec_context() + * sunrpc: on successful gss error pipe write, don't return error + * drm/i915: Update LVDS connector status when receiving ACPI LID event + * drm/i915: fix order of fence release wrt flushing + * drm/i915: Permit pinning whilst the device is 'suspended' + * drm: remove address mask param for drm_pci_alloc() + * drm/i915: Enable/disable the dithering for LVDS based on VBT setting + * drm/i915: Make the BPC in FDI rx/transcoder be consistent with that in + pipeconf on Ironlake + * drm/i915: Select the correct BPC for LVDS on Ironlake + * drm/i915: fix unused var + * rtc_cmos: convert shutdown to new pnp_driver->shutdown + * drivers/cpuidle/governors/menu.c: fix undefined reference to + `__udivdi3' + * cgroups: fix 2.6.32 regression causing BUG_ON() in cgroup_diput() + * lib/rational.c needs module.h + * dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with + DMA_FROM_DEVICE and + * kernel/signal.c: fix kernel information leak with print-fatal-signals=1 + * mmc_block: add dev_t initialization check + * mmc_block: fix probe error cleanup bug + * mmc_block: fix queue cleanup + * ALSA: hda - Fix ALC861-VD capture source mixer + * ALSA: ac97: Add Dell Dimension 2400 to Headphone/Line Jack Sense + blacklist + * ALSA: atiixp: Specify codec for Foxconn RC4107MA-RS2 + - LP: #498863 + * ASoC: Fix WM8350 DSP mode B configuration + * netfilter: ebtables: enforce CAP_NET_ADMIN + * netfilter: nf_ct_ftp: fix out of bounds read in update_nl_seq() + * hwmon: (coretemp) Fix TjMax for Atom N450/D410/D510 CPUs + * hwmon: (adt7462) Fix pin 28 monitoring + * quota: Fix dquot_transfer for filesystems different from ext4 + * xen: fix hang on suspend. + * iwlwifi: fix iwl_queue_used bug when read_ptr == write_ptr + * ath5k: Fix eeprom checksum check for custom sized eeproms + * cfg80211: fix syntax error on user regulatory hints + * iwl: off by one bug + * mac80211: add missing sanity checks for action frames + * drm/i915: remove render reclock support + * libertas: Remove carrier signaling from the scan code + * kernel/sysctl.c: fix stable merge error in NOMMU mmap_min_addr + * mac80211: fix skb buffering issue (and fixes to that) + * fix braindamage in audit_tree.c untag_chunk() + * fix more leaks in audit_tree.c tag_chunk() + * module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y + * ipv6: skb_dst() can be NULL in ipv6_hop_jumbo(). + * agp/intel-agp: Clear entire GTT on startup + * Linux 2.6.32.4 + * ethtool: Add reset operation + * gro: Name the GRO result enumeration type + * gro: Change all receive functions to return GRO result codes + * sfc: 10Xpress: Initialise pause advertising flags + * sfc: 10Xpress: Report support for pause frames + * sfc: Remove redundant header gmii.h + * sfc: Remove redundant hardware initialisation + * sfc: Rename Falcon-specific board code and types + * sfc: Remove boards.h, moving last remaining declaration to falcon.h + * sfc: Remove versioned bitfield macros + * sfc: Move RX data FIFO thresholds out of struct efx_nic_type + * sfc: Update hardware definitions for Siena + * sfc: Rename register I/O header and functions used by both Falcon and + Siena + * sfc: Eliminate indirect lookups of queue size constants + * sfc: Define DMA address mask explicitly in terms of descriptor field + width + * sfc: Move all TX DMA length limiting into tx.c + * sfc: Change order of device removal to reverse of probe order + * sfc: Remove declarations of nonexistent functions + * sfc: Move efx_xmit_done() declaration into correct stanza + * sfc: Move shared members of struct falcon_nic_data into struct efx_nic + * sfc: Maintain interrupt moderation values in ticks, not microseconds + * sfc: Removed kernel-doc for nonexistent member of efx_phy_operations + * sfc: Remove pointless abstraction of memory BAR number + * sfc: Remove incorrect assertion from efx_pci_remove_main() + * sfc: Remove unnecessary tests of efx->membase + * sfc: Move MTD probe after netdev registration and name allocation + * sfc: Remove unused code for non-autoneg speed/duplex switching + * sfc: Rename 'xfp' file and functions to reflect reality + * sfc: Really allow RX checksum offload to be disabled + * sfc: Feed GRO result into RX allocation policy and interrupt moderation + * sfc: Enable heuristic selection between page and skb RX buffers + * sfc: Remove pointless abstraction of memory BAR number (2) + * sfc: Remove redundant gotos from __efx_rx_packet() + * sfc: Remove ridiculously paranoid assertions + * sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro() + * sfc: Record RX queue number on GRO path + * sfc: SFT9001: Reset LED configuration correctly after blinking + * sfc: Use a single blink implementation + * sfc: Rename efx_board::init_leds to init_phy and use for SFN4111T + * sfc: Make board information explicitly Falcon-specific + * sfc: Move definition of struct falcon_nic_data into falcon.h + * sfc: Move struct falcon_board into struct falcon_nic_data + * sfc: Move all I2C stuff into struct falcon_board + * sfc: Gather link state fields in struct efx_nic into new struct + efx_link_state + * sfc: Remove unnecessary casts to struct sk_buff * + * sfc: Remove redundant efx_xmit() function + * sfc: Combine high-level header files + * sfc: Log interrupt and reset type names, not numbers + * sfc: Fix descriptor cache sizes + * sfc: Treat all MAC registers as 128-bit + * sfc: Strengthen EFX_ASSERT_RESET_SERIALISED + * sfc: Comment corrections + * sfc: Remove unused constant + * sfc: Clean up struct falcon_board and struct falcon_board_data + * sfc: Fix bugs in RX queue flushing + * sfc: Remove unused function efx_flush_queues() + * sfc: Only switch Falcon MAC clocks as necessary + * sfc: Hold MAC lock for longer in efx_init_port() + * sfc: Split MAC stats DMA initiation and completion + * sfc: Move Falcon board/PHY/MAC monitoring code to falcon.c + * sfc: Simplify XMAC link polling + * sfc: Change MAC promiscuity and multicast hash at the same time + * sfc: Move inline comment into kernel-doc + * sfc: Do not set net_device::trans_start in self-test + * sfc: Simplify PHY polling + * sfc: QT202x: Reset before reading PHY id + * sfc: Replace MDIO spinlock with mutex + * sfc: Always start Falcon using the XMAC + * sfc: Limit some hardware workarounds to Falcon + * sfc: Remove EFX_WORKAROUND_9141 macro + * sfc: Remove another unused workaround macro + * sfc: Remove some redundant whitespace + * sfc: Decouple NIC revision number from Falcon PCI revision number + * sfc: Move descriptor cache base addresses to struct efx_nic_type + * sfc: Clean up RX event handling + * sfc: Remove redundant writes to INT_ADR_KER + * sfc: Remove duplicate hardware structure definitions + * sfc: Turn pause frame generation on and off at the MAC, not the RX FIFO + * sfc: Move Falcon NIC operations to efx_nic_type + * sfc: Refactor link configuration + * sfc: Generalise link state monitoring + * sfc: Add power-management and wake-on-LAN support + * sfc: Implement ethtool reset operation + * sfc: Add efx_nic_type operation for register self-test + * sfc: Add efx_nic_type operation for NVRAM self-test + * sfc: Add efx_nic_type operation for identity LED control + * sfc: Separate shared NIC code from Falcon-specific and rename + accordingly + * sfc: Fold falcon_probe_nic_variant() into falcon_probe_nic() + * sfc: Extend loopback mode enumeration + * sfc: Remove static PHY data and enumerations + * sfc: Extend MTD driver for use with new NICs + * sfc: Allow for additional checksum offload features + * sfc: Rename falcon.h to nic.h + * sfc: Move shared NIC code from falcon.c to new source file nic.c + * sfc: Add firmware protocol definitions (MCDI) + * sfc: Add support for SFC9000 family (1) + * sfc: Add support for SFC9000 family (2) + * sfc: Implement TSO for TCP/IPv6 + * sfc: Update version, copyright dates, authors + * drivers/net/sfc: Correct code taking the size of a pointer + * sfc: Move PHY software state initialisation from init() into probe() + * sfc: Include XGXS in XMAC link status check except in XGMII loopback + * sfc: Fix DMA mapping cleanup in case of an error in TSO + * sfc: QT2025C: Work around PHY bug + * sfc: QT2025C: Switch into self-configure mode when not in loopback + * sfc: QT2025C: Work around PHY firmware initialisation bug + * sfc: QT2025C: Add error message for suspected bad SFP+ cables + * sfc: Disable TX descriptor prefetch watchdog + * [SCSI] vmw_pvscsi: SCSI driver for VMware's virtual HBA. + - LP: #497156 + + -- Andy Whitcroft Tue, 19 Jan 2010 16:12:47 +0000 + +linux (2.6.32-10.14) lucid; urgency=low + + [ Alex Deucher ] + + * SAUCE: drm/radeon/kms: fix LVDS setup on r4xx + - LP: #493795 + + [ Andy Whitcroft ] + + * Revert "(pre-stable) acpi: Use the ARB_DISABLE for the CPU which model + id is less than 0x0f." + * config-check -- ensure the checks get run at build time + * config-check -- check the processed config during updateconfigs + * config-check -- CONFIG_SECCOMP may not be present + * TUN is now built in ignore + * SAUCE: acpi battery -- delay first lookup of the battery until first + use + * SAUCE: async_populate_rootfs: move rootfs init earlier + * ubuntu: AppArmor -- update to mainline 2010-01-06 + * SAUCE: move RLIMIT_CORE pipe dumper marker to 1 + - LP: #498525 + + [ Dave Airlie ] + + * (pre-stable) drm/radeon/kms: fix crtc vblank update for r600 + + [ Leann Ogasawara ] + + * Add asix to nic-usb-modules file + - LP: #499785 + + [ Peter Zijlstra ] + + * (pre-stable) sched: Fix balance vs hotplug race + + [ Tim Gardner ] + + * [Config] Enable CONFIG_FUNCTION_TRACER + - LP: #497989 + * [Config] Drop lpia from getabis + * [Config] Build in TUN/TAP driver + - LP: #499491 + * [Config] DH_COMPAT=5 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) drm/i915: Avoid NULL dereference with + component_only tv_modes" + * Revert "(pre-stable) drm/i915: Fix sync to vblank when VGA output is + turned off" + * USB: usb-storage: fix bug in fill_inquiry + * USB: option: add pid for ZTE + * firewire: ohci: handle receive packets with a data length of zero + * rcu: Prepare for synchronization fixes: clean up for non-NO_HZ handling + of ->completed counter + * rcu: Fix synchronization for rcu_process_gp_end() uses of ->completed + counter + * rcu: Fix note_new_gpnum() uses of ->gpnum + * rcu: Remove inline from forward-referenced functions + * perf_event: Fix invalid type in ioctl definition + * perf_event: Initialize data.period in perf_swevent_hrtimer() + * perf: Don't free perf_mmap_data until work has been done + * PM / Runtime: Fix lockdep warning in __pm_runtime_set_status() + * sched: Check for an idle shared cache in select_task_rq_fair() + * sched: Fix affinity logic in select_task_rq_fair() + * sched: Rate-limit newidle + * sched: Fix and clean up rate-limit newidle code + * x86/amd-iommu: attach devices to pre-allocated domains early + * x86/amd-iommu: un__init iommu_setup_msi + * x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking + up the PCI tree + * x86: Fix iommu=nodac parameter handling + * x86: GART: pci-gart_64.c: Use correct length in strncmp + * x86: ASUS P4S800 reboot=bios quirk + - LP: #366682 + * x86, apic: Enable lapic nmi watchdog on AMD Family 11h + * ssb: Fix range check in sprom write + * ath5k: allow setting txpower to 0 + * ath5k: enable EEPROM checksum check + * hrtimer: Fix /proc/timer_list regression + * ALSA: hrtimer - Fix lock-up + * ALSA: hda - Terradici HDA controllers does not support 64-bit mode + * KVM: x86 emulator: limit instructions to 15 bytes + * KVM: s390: Fix prefix register checking in arch/s390/kvm/sigp.c + * KVM: s390: Make psw available on all exits, not just a subset + * KVM: fix irq_source_id size verification + * KVM: x86: include pvclock MSRs in msrs_to_save + * x86: Prevent GCC 4.4.x (pentium-mmx et al) function prologue wreckage + * x86: Use -maccumulate-outgoing-args for sane mcount prologues + * x86, mce: don't restart timer if disabled + * x86/mce: Set up timer unconditionally + * x86: SGI UV: Fix BAU initialization + * x86: Fix duplicated UV BAU interrupt vector + * x86: Add new Intel CPU cache size descriptors + * x86: Fix typo in Intel CPU cache size descriptor + * pata_hpt{37x|3x2n}: fix timing register masks (take 2) + * s390: clear high-order bits of registers after sam64 + * V4L/DVB: Fix test in copy_reg_bits() + * bsdacct: fix uid/gid misreporting + * UBI: flush wl before clearing update marker + * jbd2: don't wipe the journal on a failed journal checksum + * USB: xhci: Add correct email and files to MAINTAINERS entry. + * USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again + * USB: option.c: add support for D-Link DWM-162-U5 + * USB: usbtmc: repeat usb_bulk_msg until whole message is transfered + * USB: usb-storage: add BAD_SENSE flag + * USB: Close usb_find_interface race v3 + * pxa/em-x270: fix usb hub power up/reset sequence + * hfs: fix a potential buffer overflow + * SUNRPC: IS_ERR/PTR_ERR confusion + * NFS: Fix nfs_migrate_page() + * md/bitmap: protect against bitmap removal while being updated. + * futex: Take mmap_sem for get_user_pages in fault_in_user_writeable + * devpts_get_tty() should validate inode + * debugfs: fix create mutex racy fops and private data + * Driver core: fix race in dev_driver_string + * Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN + * mac80211: Fix bug in computing crc over dynamic IEs in beacon + * mac80211: Fixed bug in mesh portal paths + * mac80211: Revert 'Use correct sign for mesh active path refresh' + * mac80211: fix scan abort sanity checks + * wireless: correctly report signal value for IEEE80211_HW_SIGNAL_UNSPEC + * rtl8187: Fix wrong rfkill switch mask for some models + * x86: Fix bogus warning in apic_noop.apic_write() + * mm: hugetlb: fix hugepage memory leak in mincore() + * mm: hugetlb: fix hugepage memory leak in walk_page_range() + * powerpc/windfarm: Add detection for second cpu pump + * powerpc/therm_adt746x: Record pwm invert bit at module load time] + * powerpc: Fix usage of 64-bit instruction in 32-bit altivec code + * drm/radeon/kms: Add quirk for HIS X1300 board + * drm/radeon/kms: handle vblanks properly with dpms on + * drm/radeon/kms: fix legacy crtc2 dpms + * drm/radeon/kms: fix vram setup on rs600 + * drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size + * drm/ttm: Fix build failure due to missing struct page + * drm/i915: Set the error code after failing to insert new offset into mm + ht. + * drm/i915: Add the missing clonemask for display port on Ironlake + * xen/xenbus: make DEVICE_ATTR()s static + * xen: re-register runstate area earlier on resume. + * xen: restore runstate_info even if !have_vcpu_info_placement + * xen: correctly restore pfn_to_mfn_list_list after resume + * xen: register timer interrupt with IRQF_TIMER + * xen: register runstate on secondary CPUs + * xen: don't call dpm_resume_noirq() with interrupts disabled. + * xen: register runstate info for boot CPU early + * xen: call clock resume notifier on all CPUs + * xen: improve error handling in do_suspend. + * xen: don't leak IRQs over suspend/resume. + * xen: use iret for return from 64b kernel to 32b usermode + * xen: explicitly create/destroy stop_machine workqueues outside + suspend/resume region. + * Xen balloon: fix totalram_pages counting. + * xen: try harder to balloon up under memory pressure. + * dm exception store: free tmp_store on persistent flag error + * dm snapshot: only take lock for statustype info not table + * dm crypt: move private iv fields to structs + * dm crypt: restructure essiv error path + * dm: avoid _hash_lock deadlock + * dm snapshot: cope with chunk size larger than origin + * dm crypt: separate essiv allocation from initialisation + * dm crypt: make wipe message also wipe essiv key + * slc90e66: fix UDMA handling + * tcp: Stalling connections: Fix timeout calculation routine + * ip_fragment: also adjust skb->truesize for packets not owned by a + socket + * b44 WOL setup: one-bit-off stack corruption kernel panic fix + * sparc64: Don't specify IRQF_SHARED for LDC interrupts. + * sparc64: Fix overly strict range type matching for PCI devices. + * sparc64: Fix stack debugging IRQ stack regression. + * sparc: Set UTS_MACHINE correctly. + * b43legacy: avoid PPC fault during resume + * tracing: Fix event format export + * ath9k: Fix TX hang poll routine + * ath9k: fix processing of TX PS null data frames + * ath9k: Fix maximum tx fifo settings for single stream devices + * ath9k: fix tx status reporting + * mac80211: Fix dynamic power save for scanning. + * drm/i915: Fix sync to vblank when VGA output is turned off + * memcg: fix memory.memsw.usage_in_bytes for root cgroup + * thinkpad-acpi: fix default brightness_mode for R50e/R51 + * thinkpad-acpi: preserve rfkill state across suspend/resume + * ipw2100: fix rebooting hang with driver loaded + * matroxfb: fix problems with display stability + * acerhdf: add new BIOS versions + * asus-laptop: change light sens default values. + * vmalloc: conditionalize build of pcpu_get_vm_areas() + * ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f. + * net: Fix userspace RTM_NEWLINK notifications. + * ext3: Fix data / filesystem corruption when write fails to copy data + * V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added. + * bcm63xx_enet: fix compilation failure after get_stats_count removal + * x86: Under BIOS control, restore AP's APIC_LVTTHMR to the BSP value + * drm/i915: Avoid NULL dereference with component_only tv_modes + * drm/i915: PineView only has LVDS and CRT ports + * drm/i915: Fix LVDS stability issue on Ironlake + * mm: sigbus instead of abusing oom + * ipvs: zero usvc and udest + * jffs2: Fix long-standing bug with symlink garbage collection. + * intel-iommu: Detect DMAR in hyperspace at probe time. + * intel-iommu: Apply BIOS sanity checks for interrupt remapping too. + * intel-iommu: Check for an RMRR which ends before it starts. + * intel-iommu: Fix oops with intel_iommu=igfx_off + * intel-iommu: ignore page table validation in pass through mode + * netfilter: xtables: document minimal required version + * perf_event: Fix incorrect range check on cpu number + * implement early_io{re,un}map for ia64 + * Linux 2.6.32.2 + + -- Andy Whitcroft Thu, 07 Jan 2010 15:28:43 +0000 + +linux (2.6.32-9.13) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_B43_PHY_LP + - LP: #493059 + * include modules.builtin in the binary debs + * config-check -- add a configuration enforcer + * config-check -- add a unit-test suite to the checker + * [Config] Enable CONFIG_SYN_COOKIES for versatile + * [Config] Enable CONFIG_SECURITY_SMACK for ports + * [Config] Enable CONFIG_SECURITY_FILE_CAPABILITIES for ports + * [Config] Disable CONFIG_COMPAT_BRK for ports + * getabis -- add armel versatile to the list + + [ Brad Figg ] + + * SAUCE: Increase the default prealloc buffer for HDA audio devices + (non-modem) + + [ Manoj Iyer ] + + * ubuntu: onmibook -- Added missing BOM file + + [ Tim Gardner ] + + * ubuntu: fsam7400 -- Cleanup Makefile + + [ Upstream Kernel Changes ] + + * Revert "ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT" + * signal: Fix alternate signal stack check + * SCSI: scsi_lib_dma: fix bug with dma maps on nested scsi objects + * SCSI: osd_protocol.h: Add missing #include + * SCSI: megaraid_sas: fix 64 bit sense pointer truncation + * ext4: fix potential buffer head leak when add_dirent_to_buf() returns + ENOSPC + * ext4: avoid divide by zero when trying to mount a corrupted file system + * ext4: fix the returned block count if EXT4_IOC_MOVE_EXT fails + * ext4: fix lock order problem in ext4_move_extents() + * ext4: fix possible recursive locking warning in EXT4_IOC_MOVE_EXT + * ext4: plug a buffer_head leak in an error path of ext4_iget() + * ext4: make sure directory and symlink blocks are revoked + * ext4: fix i_flags access in ext4_da_writepages_trans_blocks() + * ext4: journal all modifications in ext4_xattr_set_handle + * ext4: don't update the superblock in ext4_statfs() + * ext4: fix uninit block bitmap initialization when s_meta_first_bg is + non-zero + * ext4: fix block validity checks so they work correctly with meta_bg + * ext4: avoid issuing unnecessary barriers + * ext4: fix error handling in ext4_ind_get_blocks() + * ext4: make trim/discard optional (and off by default) + * ext4: make "norecovery" an alias for "noload" + * ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT + * ext4: initialize moved_len before calling ext4_move_extents() + * ext4: move_extent_per_page() cleanup + * jbd2: Add ENOMEM checking in and for + jbd2_journal_write_metadata_buffer() + * ext4: Return the PTR_ERR of the correct pointer in + setup_new_group_blocks() + * ext4: Avoid data / filesystem corruption when write fails to copy data + * ext4: wait for log to commit when umounting + * ext4: remove blocks from inode prealloc list on failure + * ext4: ext4_get_reserved_space() must return bytes instead of blocks + * ext4: quota macros cleanup + * ext4: fix incorrect block reservation on quota transfer. + * ext4: Wait for proper transaction commit on fsync + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + * ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem) + * Linux 2.6.32.1 + * kbuild: generate modules.builtin + * (pre-stable) drm/i915: Fix sync to vblank when VGA output is turned off + - LP: #494461 + * (pre-stable) drm/i915: Avoid NULL dereference with component_only + tv_modes + - LP: #494045 + + [ Zhao Yakui ] + + * (pre-stable) acpi: Use the ARB_DISABLE for the CPU which model id is + less than 0x0f. + - LP: #481765 + + -- Andy Whitcroft Thu, 17 Dec 2009 15:41:21 +0000 + +linux (2.6.32-8.12) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: AppArmor -- add linux/err.h for ERR_PTR + + -- Andy Whitcroft Sat, 12 Dec 2009 10:56:16 +0000 + +linux (2.6.32-8.11) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches + up" + * Revert "SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition." + * Revert "SAUCE: AppArmor: Fix refcounting bug causing leak of creds" + * Revert "SAUCE: AppArmor: Fix cap audit_caching preemption disabling" + * Revert "SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds" + * Revert "SAUCE: AppArmor: Fix oops after profile removal" + * Revert "SAUCE: AppArmor: AppArmor disallows truncate of deleted files." + * Revert "SAUCE: AppArmor: AppArmor fails to audit change_hat correctly" + * Revert "SAUCE: AppArmor: Policy load and replacement can fail to alloc + mem" + * Revert "SAUCE: AppArmor: AppArmor wrongly reports allow perms as + denied" + * Revert "SAUCE: AppArmor: Fix mediation of "deleted" paths" + * Revert "SAUCE: AppArmor: Fix off by 2 error in getprocattr mem + allocation" + * Revert "SAUCE: AppArmor: Set error code after structure + initialization." + * Revert "AppArmor -- fix pstrace_may_access rename" + * Revert "ubuntu: AppArmor security module" + * Revert "SAUCE: Add config option to set a default LSM" + * Revert "ubuntu: fsam7400 -- sw kill switch driver" + * Revert "[Config] fsam7400 -- enable" + * Revert "[Config] AUFS -- enable" + * Revert "ubuntu: AUFS -- aufs2-30 20090727" + * Revert "ubuntu: AUFS -- export various core functions -- fixes" + * Revert "ubuntu: AUFS -- export various core functions" + * Revert "[Config] ubuntu/iscsitarget -- disable" + * Revert "[Config] iscsitarget -- enable" + * Revert "ubuntu: iscsitarget -- SVN revision r214" + * update Vcs-Git to point to the correct repository + - LP: #493589 + * update build environment overrides to lucid + - LP: #493589 + * [Config] enable CONFIG_DEVTMPFS + * [Config] update all configs following AppArmor 2009-12-08 update + * SAUCE: isapnp_init: make isa PNP scans occur async + * [Config] fsam7400 -- enable + * [Config] omnibook -- enable + * [Config] cleanup CONFIG_AUDIT + * ubuntu: AUFS -- export various core functions (aufs2-base.patch) + * ubuntu: AUFS -- export various core functions (aufs2-standalone.patch) + * ubuntu: AUFS -- aufs2 20091209 + * [Config] AUFS -- enable + * [Config] iscsitarget -- enable + + [ Arjan van de Ven ] + + * SAUCE: KMS: cache the EDID information of the LVDS + + [ Colin Watson ] + + * bnx2: update d-i firmware filenames + - LP: #494052 + * add cdc_ether to nic-usb-modules udeb + - LP: #495060 + + [ John Johansen ] + + * ubuntu: AppArmor -- mainline 2009-10-08 + + [ Manoj Iyer ] + + * ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M 7400 + * ubuntu: omnibook -- support Toshiba (HP) netbooks + * ubuntu: iscsitarget --- version 1.4.19 + - LP: #494693 + + [ Surbhi Palande ] + + * SAUCE: Make populate_rootfs asynchronous + + [ Tim Gardner ] + + * Parallelize flavour builds and packaging + * [Config] Enable CONFIG_KSM + + [ Upstream Kernel Changes ] + + * Config option to set a default LSM + * LSM: Add security_path_chroot(). + * LSM: Add security_path_chroot(). + * LSM: Move security_path_chmod()/security_path_chown() to after + mutex_lock(). + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + + -- Andy Whitcroft Fri, 11 Dec 2009 17:45:19 +0000 + +linux (2.6.32-7.10) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable CONFIG_THUMB2_KERNEL to fix arm FTBFS + + -- Andy Whitcroft Sun, 06 Dec 2009 12:56:48 +0000 + +linux (2.6.32-7.9) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: set /proc/acpi/video/*/DOS to 4 by default + - LP: #458982 + * SAUCE: ensure vga16fb loads if no other driver claims the VGA device + * [Config] update configs following versatile switch to V7 + * rebased to v2.6.32 + * [Config] update configs following rebase to v2.6.32 + * [Config] update ports configs following rebase to v2.6.32 + * SAUCE: default ATI Radeon KMS to off until userspace catches up + + [ Arjan van de Ven ] + + * SAUCE: vfs: Add a trace point in the mark_inode_dirty function + + [ Leann Ogasawara ] + + * [SCSI] megaraid_sas: remove sysfs poll_mode_io world writeable + permissions + - CVE-2009-3939 + + [ Loic Minier ] + + * SAUCE: select a v7 CPU for versatile + + [ Takashi Iwai ] + + * SAUCE: ALSA: hda - Add power on/off counter + + [ Upstream changes ] + + * rebased to v2.6.32 + + -- Andy Whitcroft Fri, 04 Dec 2009 10:44:50 +0000 + +linux (2.6.32-6.8) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable SSB devices for armel + + -- Andy Whitcroft Sat, 28 Nov 2009 12:16:40 +0000 + +linux (2.6.32-6.7) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches up" + * Revert "SAUCE: Dell XPS710 reboot quirk" + * Revert "SAUCE: Link acpi-cpufreq.o first" + * Revert "SAUCE: LPIA Logical reset of USB port on resume" + * Revert "SAUCE: LPIA Reboot fix for Intel Crownbeach development boards" + * Revert "SAUCE: Enable HDMI audio codec on Studio XPS 1340" + * Revert "SAUCE: Dell laptop digital mic does not work, PCI 1028:0271" + * Revert "Add Dell Dimension 9200 reboot quirk" + * Revert "SAUCE: Correctly blacklist Thinkpad r40e in ACPI" + * Revert "SAUCE: tulip: Define ULI PCI ID's" + * Revert "SAUCE: Lower warning level of some PCI messages" + * Revert "mac80211: fix two issues in debugfs" + Drop a number of known redundant commits as identified in the Ubuntu + delta review blueprint. + + * reenable armel versatile flavour + * [Config] disable CONFIG_USB_DEVICEFS + + [ Tim Gardner ] + + * [Config] udeb: Add squashfs to fs-core-modules + - LP: #352615 + * [Config] Create a real squashfs udeb + - LP: #352615 + + + -- Andy Whitcroft Fri, 27 Nov 2009 17:31:16 +0000 + +linux (2.6.32-5.6) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc8 + * update configs following rebase to v2.6.32-rc8 + * update ports configs since rebase to v2.6.32-rc8 + * [Config] enable cgroup options + - LP: #480739 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc8 + + -- Andy Whitcroft Mon, 23 Nov 2009 11:16:14 +0000 + +linux (2.6.32-4.5) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * rebase to v2.6.32-rc7 + * resync with Karmic proposed + + [ John Johansen ] + + * SAUCE: AppArmor: Fix oops after profile removal + - LP: #475619 + * SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds + - LP: #437258 + * SAUCE: AppArmor: Fix cap audit_caching preemption disabling + - LP: #479102 + * SAUCE: AppArmor: Fix refcounting bug causing leak of creds + - LP: #479115 + * SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition. + - LP: #480112 + + [ Ubuntu Changes ] + + * resync with Karmic proposed (ddbc670a86a3dee18541a3734149f250ff307adf) + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc7 + + -- Andy Whitcroft Fri, 13 Nov 2009 11:35:13 +0000 + +linux (2.6.32-3.4) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * [Upstream] add local prefix to oss local change_bits + + [ Upstream Kernel Changes ] + + * mtd/maps: gpio-addr-flash: pull in linux/ headers rather than asm/ + * mtd/maps: gpio-addr-flash: depend on GPIO arch support + + -- Andy Whitcroft Wed, 11 Nov 2009 14:47:04 +0000 + +linux (2.6.32-3.3) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc6 + * [Config] update configs following rebase to v2.6.32-rc6 + * [Config] update ports configs following rebase to v2.6.32-rc6 + * resync with Karmic Ubuntu-2.6.31-15.49 + * [Config] add module ignores for broken drivers + + [ John Johansen ] + + * SAUCE: AppArmor: AppArmor wrongly reports allow perms as denied + - LP: #453335 + * SAUCE: AppArmor: Policy load and replacement can fail to alloc mem + - LP: #458299 + * SAUCE: AppArmor: AppArmor fails to audit change_hat correctly + - LP: #462824 + * SAUCE: AppArmor: AppArmor disallows truncate of deleted files. + - LP: #451375 + + [ Kees Cook ] + + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Scott James Remnant ] + + * Revert "SAUCE: trace: add trace_event for the open() syscall" + * SAUCE: trace: add trace events for open(), exec() and uselib() + - LP: #462111 + + [ Stefan Bader ] + + * SAUCE: Fix sub-flavour script to not stop on missing directories + - LP: #453073 + + [ Ubuntu Changes ] + + * resync with Karmic Ubuntu-2.6.31-15.49 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc6 + - LP: #464552 + + -- Andy Whitcroft Tue, 10 Nov 2009 15:00:57 +0000 + +linux (2.6.32-2.2) lucid; urgency=low + + [ Andy Whitcroft ] + + * install the full changelog with the binary package + * changelog -- explicitly note rebases and clean history + * reinstate armel.mk with no flavours + - LP: #449637 + * [Upstream] block: silently error unsupported empty barriers too + - LP: #420423 + * [Config] udate configs following karmic resync + * [Config] update ports configs following karmic resync + * [Upstream] lirc -- follow removal of .id element + + [ Colin Watson ] + + * Use section 'admin' rather than 'base' + * Add more e100 firmware to nic-modules + - LP: #451872 + * Add qla1280 firmware to scsi-modules + - LP: #381037 + + [ John Johansen ] + + * SAUCE: AppArmor: Set error code after structure initialization. + - LP: #427948 + * SAUCE: AppArmor: Fix off by 2 error in getprocattr mem allocation + - LP: #446595 + * SAUCE: AppArmor: Fix mediation of "deleted" paths + + [ Kees Cook ] + + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + + [ Leann Ogasawara ] + + * SAUCE: (drop after 2.6.31) input: Add support for filtering input + events + - LP: #430809 + * SAUCE: (drop after 2.6.31) dell-laptop: Trigger rfkill updates on wifi + toggle switch press + - LP: #430809 + + [ Luke Yelavich ] + + * SAUCE: Add sr_mod to the scsi-modules udeb for powerpc + * [Config] Add sd_mod to scsi-modules udeb for powerpc + + [ Mario Limonciello ] + + * SAUCE: Update to LIRC 0.8.6 + - LP: #432678 + * SAUCE: dell-laptop: Store the HW switch status internally rather than + requerying every time + - LP: #430809 + * SAUCE: dell-laptop: Blacklist machines not supporting dell-laptop + - LP: #430809 + + [ Stefan Bader ] + + * [Upstream] acerhdf: Limit modalias matching to supported boards + - LP: #435958 + + [ Tim Gardner ] + + * [Upstream] i915: Fix i2c init message + - LP: #409361 + * [Config] Add sym53c8xx.ko to virtual sub-flavour + - LP: #439415 + * [Config] Add d101m_ucode.bin to d-i/firmware/nic-modules + - LP: #439456 + * [Config] Set default I/O scheduler back to CFQ for desktop flavours + - LP: #381300 + * SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros + - LP: #430694 + * SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915 + - LP: #430694 + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT + - LP: #430694 + * SAUCE: Raise the default console 'quiet' level to 2 + * [Config] CONFIG_X86_PAT=y + * [Config] Add armel arch to linux-libc-dev arches. + - LP: #449637 + * [Config] CONFIG_X86_MCE + * [Upstream] (drop after 2.6.31) Input: synaptics - add another Protege + M300 to rate blacklist + - LP: #433801 + + [ Upstream Kernel Changes ] + + * sgi-gru: Fix kernel stack buffer overrun, CVE-2009-2584 + * drm/i915: Fix FDI M/N setting according with correct color depth + - LP: #416792 + + -- Andy Whitcroft Thu, 22 Oct 2009 16:53:33 +0100 + +linux (2.6.32-1.1) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc3 + * [Config] update configs following rebase to 2.6.32-rc3 + * [Config] update ports configs following rebase to 2.6.32-rc3 + * AppArmor -- fix pstrace_may_access rename + * staging/android -- disable + * ubuntu: dm-raid-45 -- update to compile with 2.6.32 + * ubuntu: drbd -- disable + * staging/comdi -- disable + * staging/go7007 -- disable + * [Config] staging/winbond -- disable + * [Config] ubuntu/iscsitarget -- disable + * [d-i] cbc and ecb are builtin make them optional in udebs + * rebase to v2.6.32-rc5 + * [Config] update configs following rebase to v2.6.32-rc5 + * [Config] update ports configs following rebase to v2.6.31-rc5 + + [ Tim Gardner ] + + * [Config] Add cpio as a build dependency. + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc3 + * rebase to v2.6.32-rc5 + + -- Andy Whitcroft Mon, 05 Oct 2009 15:48:58 +0100 + +linux (2.6.31-11.37) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Increase kernel log buffer to 256K for amd64 flavours + - LP: #424810 + * [Config] Set HZ=100 for amd64 flavours + - LP: #438234 + * [Upstream] e1000e: Emit notice instead of an error when + pci_enable_pcie_error_reporting() fails + - LP: #436370 + + [ Upstream Kernel Changes ] + + * n_tty: honor opost flag for echoes + * n_tty: move echoctl check and clean up logic + - LP: #438310 + + * Revert "[Upstream] drm/i915: Check that the relocation points to within + the target" - Use upstream cherry-pick. + * drm/i915: Check that the relocation points to within the target + - LP: #429241 + + * drm/i915: fix tiling on IGDNG + * drm/i915: add B43 chipset support + * agp/intel: Add B43 chipset support + Intel request from kernel team mailing list. + + * HID: completely remove apple mightymouse from blacklist + - LP: #428111 + + -- Tim Gardner Mon, 28 Sep 2009 11:47:29 -0600 + +linux (2.6.31-11.36) karmic; urgency=low + + [ Brian Rogers ] + + * SAUCE: (drop after 2.6.31) em28xx: ir-kbd-i2c init data needs a + persistent object + * SAUCE: (drop after 2.6.31) saa7134: ir-kbd-i2c init data needs a + persistent object + + [ Takashi Iwai ] + + * [Upstream] ALSA: hda - Add another entry for Nvidia HDMI device + - LP: #416482 + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.31) eCryptfs: Prevent lower dentry from going + negative during unlink + + [ Upstream Kernel Changes ] + + * sg: fix oops in the error path in sg_build_indirect() + * mpt2sas : Rescan topology from Interrupt context instead of work thread + * mpt2sas: Prevent sending command to FW while Host Reset + * mpt2sas: setting SDEV into RUNNING state from Interrupt context + * mpt2sas: Raid 10 Volume is showing as Raid 1E in dmesg + * SCSI: fix oops during scsi scanning + * SCSI: libsrp: fix memory leak in srp_ring_free() + * cfg80211: fix looping soft lockup in find_ie() + * ath5k: write PCU registers on initial reset + * binfmt_elf: fix PT_INTERP bss handling + * TPM: Fixup boot probe timeout for tpm_tis driver + * md: Fix "strchr" [drivers/md/dm-log-userspace.ko] undefined! + * x86/amd-iommu: fix broken check in amd_iommu_flush_all_devices + * fix undefined reference to user_shm_unlock + * perf_counter: Fix buffer overflow in perf_copy_attr() + * perf_counter: Start counting time enabled when group leader gets + enabled + * powerpc/perf_counters: Reduce stack usage of power_check_constraints + * powerpc: Fix bug where perf_counters breaks oprofile + * powerpc/ps3: Workaround for flash memory I/O error + * block: don't assume device has a request list backing in nr_requests + store + * agp/intel: remove restore in resume + * ALSA: cs46xx - Fix minimum period size + * ASoC: Fix WM835x Out4 capture enumeration + * sound: oxygen: work around MCE when changing volume + * mlx4_core: Allocate and map sufficient ICM memory for EQ context + * perf stat: Change noise calculation to use stddev + * x86: Fix x86_model test in es7000_apic_is_cluster() + * x86/i386: Make sure stack-protector segment base is cache aligned + * PCI: apply nv_msi_ht_cap_quirk on resume too + * x86, pat: Fix cacheflush address in change_page_attr_set_clr() + * ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() + with highmem + * KVM guest: do not batch pte updates from interrupt context + * KVM: Fix coalesced interrupt reporting in IOAPIC + * KVM: VMX: Check cpl before emulating debug register access + * KVM guest: fix bogus wallclock physical address calculation + * KVM: x86: Disallow hypercalls for guest callers in rings > 0 + * KVM: VMX: Fix cr8 exiting control clobbering by EPT + * KVM: x86 emulator: Implement zero-extended immediate decoding + * KVM: MMU: make __kvm_mmu_free_some_pages handle empty list + * KVM: x86 emulator: fix jmp far decoding (opcode 0xea) + * KVM: limit lapic periodic timer frequency + * libata: fix off-by-one error in ata_tf_read_block() + * PCI quirk: update 82576 device ids in SR-IOV quirks list + * PCI: Unhide the SMBus on the Compaq Evo D510 USDT + * powerpc/pseries: Fix to handle slb resize across migration + * Linux 2.6.31.1 + + -- Tim Gardner Thu, 24 Sep 2009 13:04:28 -0600 + +linux (2.6.31-10.35) karmic; urgency=low + + [ Amit Kucheria ] + + * Disable CONFIG_UEVENT_HELPER_PATH + + [ Andy Whitcroft ] + + * [Config] Enable CONFIG_USB_GADGET_DUMMY_HCD + * remove the tlsup driver + * remove lmpcm logitech driver support + + [ Bryan Wu ] + + * Add 3 missing files to prerm remove file list + - LP: #345623, #415832 + + [ Chris Wilson ] + + * [Upstream] drm/i915: Check that the relocation points to within the + target + - LP: #429241 + + [ Luke Yelavich ] + + * [Config] Set CONFIG_EXT4_FS=y on ports architectures + + [ Manoj Iyer ] + + * SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + - LP: #348861 + + [ Tim Gardner ] + + * Revert "[Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) white-list" + Upstream suggests that this is not the right approach. + + * [Config] Set default I/O scheduler to DEADLINE + CFQ seems to have some load related problems which are often exacerbated by sreadahead. + - LP: #381300 + + [ ubuntu@tjworld.net ] + + * SAUCE: ipw2200: Enable LED by default + - LP: #21367 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Add support for new AMD HD audio devices + - LP: #430564 + + -- Andy Whitcroft Wed, 16 Sep 2009 15:37:49 +0100 + +linux (2.6.31-10.34) karmic; urgency=low + + [ Ted Tso ] + + * [Upstream] ext3: Don't update superblock write time when filesystem is + read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 16:00:45 -0600 + +linux (2.6.31-10.33) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] dvb-usb: fix tuning with Cinergy T2 + - LP: #421258 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + (really, really fix it this time) + - LP: #423426 + * [Config] Set CONFIG_CACHEFILES=m for all flavours + + [ Upstream Kernel Changes ] + + * ext4: Don't update superblock write time when filesystem is read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 07:50:21 -0600 + +linux (2.6.31-10.32) karmic; urgency=low + + [ Eric Miao ] + + * [Config] enable module support for memory stick + - LP: #159951 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + - LP: #423426 + + -- Tim Gardner Thu, 10 Sep 2009 15:57:55 -0600 + +linux (2.6.31-10.31) karmic; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.31 final + + [ Colin Watson ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + + [ Ike Panhc ] + + * [Upstream] Pull latest update of lenovo-sl-laptop + + [ Peter Feuerer ] + + * [Upstream] (drop after 2.6.31) acerhdf: fix fan control for AOA150 + model + - LP: #426691 + + [ Tim Gardner ] + + * [Config] De-macro some package names. + + [ Upstream Changes ] + + * rebase to 2.6.31 final. + + -- Andy Whitcroft Thu, 10 Sep 2009 09:38:10 +0100 + +linux (2.6.31-10.30) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Enable CONFIG_USB_DEVICEFS + - LP: #417748 + * [Config] Populate the config-update template a bit more + + [ Andy Whitcroft ] + + * rebase to v2.6.31-rc9 + * [Config] update configs following rebase to v2.6.31-rc9 + * [Config] update ports configs following rebase to v2.6.31-rc9 + + [ Colin Ian King ] + + * SAUCE: wireless: hostap, fix oops due to early probing interrupt + - LP: #254837 + + [ Jerone Young ] + + * [Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) + white-list + - LP: #281732 + + [ John Johansen ] + + * SAUCE: AppArmor: Fix profile attachment for regexp based profile names + - LP: #419308 + * SAUCE: AppArmor: Return the correct error codes on profile + addition/removal + - LP: #408473 + * SAUCE: AppArmor: Fix OOPS in profile listing, and display full list + - LP: #408454 + * SAUCE: AppArmor: Fix mapping of pux to new internal permission format + - LP: #419222 + * SAUCE: AppArmor: Fix change_profile failure + - LP: #401931 + * SAUCE: AppArmor: Tell git to ignore generated include files + - LP: #419505 + + [ Stefan Bader ] + + * [Upstream] acpi: video: Loosen strictness of video bus detection code + - LP: #333386 + * SAUCE: Remove ov511 driver from ubuntu subdirectory + + [ Tim Gardner ] + + * [Config] Exclude char-modules from non-x86 udeb creation + * SAUCE: Notify the ACPI call chain of AC events + * [Config] CONFIG_SATA_VIA=m + - LP: #403385 + * [Config] Build in all phylib support modules. + * [Config] Don't fail when sub-flavour files are missing + - LP: #423426 + * [Config] Set CONFIG_LSM_MMAP_MIN_ADDR=0 + - LP: #423513 + + [ Upstream ] + + * Rebased against v2.6.31-rc9 + + -- Andy Whitcroft Mon, 07 Sep 2009 11:33:45 +0100 + +linux (2.6.31-9.29) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] agp/intel: support for new chip variant of IGDNG mobile + - LP: #419993 + * [Config] d-i/modules: Add new char-modules file, initialize with + intel-agp + - LP: #420605 + + [ Upstream ] + + * Rebased against 2.6.31-rc8 plus some inotify regression patches: + up through git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git + adda766193ea1cf3137484a9521972d080d0b7af. + + -- Tim Gardner Fri, 28 Aug 2009 06:31:30 -0600 + +linux (2.6.31-8.28) karmic; urgency=low + + [ Ike Panhc ] + + * [Config] Let nic-shared-modules depends on crypto-modules + - LP: #360966 + + [ Leann Ogasawara ] + + * [Upstream] (drop after 2.6.31) drm/i915: increase default latency + constant + - LP: #412492 + + [ Mario Limonciello ] + + * [Upstream]: (drop after 2.6.31) dell-laptop: don't change softblock + status if HW switch is disabled + - LP: #418721 + * [Upstream]: (drop after 2.6.31) compal-laptop: Add support for known + Compal made Dell laptops + * [Upstream]: (drop after 2.6.31) compal-laptop: Replace sysfs support + with rfkill support + + [ Tim Gardner ] + + * [Config] Add acpiphp to virtual sub-flavour + - LP: #364916 + * Drop KSM patch set for now because of instabilities with encrypted swap. + - LP: #418781 + + -- Tim Gardner Wed, 26 Aug 2009 08:14:26 -0600 + +linux (2.6.31-7.27) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] updateconfigs updateportsconfigs after 2.6.31-rc7 rebase + * SAUCE: (drop after 2.6.31) Added KSM from mmotm-2009-08-20-19-18 + Replaces previous ksm patches from 2.6.31-6.25 + * [Config] KSM=y + + [ Upstream ] + + * Rebased against v2.6.31-rc7 + + -- Tim Gardner Sat, 22 Aug 2009 20:32:11 -0600 + +linux (2.6.31-6.26) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_BR_RAMFS + - LP: #414738 + * split out debian directory ready for abstraction + * add printdebian target to find branch target + * abstracted debian -- debian/files is not abstracted + * abstracted debian -- packages must be built in debian/ + * abstracted debian -- kernel-wedge needs to work in debian/ + * abstracted debian -- ensure we install the copyright file + * abstracted-debian -- drop the debian directories from headers + * abstracted-debian -- drop the debian directories from headers part 2 + * SAUCE: ubuntu-insert-changes -- follow abstracted debian + * [Upstream] aoe: ensure we initialise the request_queue correctly V2 + - LP: #410198 + + [ Luke Yelavich ] + + * [Config] Ports: Disable CONFIG_CPU_FREQ_DEBUG on powerpc-smp + * [Config] Ports: Re-enable windfarm modules on powerpc64-smp + - LP: #413150 + * [Config] Ports: Build all cpu frequency scaling governors into ports + kernels + * [Config] Ports: Build ext2 and ext3 modules into ports kernels + * [Config] Ports: CONFIG_PACKET=y for all ports kernels + * [Config] Ports: Enable PS3 network driver + + [ Stefan Bader ] + + * abstracted debian -- call $(DEBIAN)/rules using make + + [ Tim Gardner ] + + * [Config] Abstract the debian directory + * SAUCE: Improve error reporting in postinst + - LP: #358564 + + -- Tim Gardner Sun, 16 Aug 2009 20:33:28 -0600 + +linux (2.6.31-6.25) karmic; urgency=low + + [ Andy Whitcroft ] + + * script to generate Ubuntu changes from changelog + * [Config] standardise ANDROID options + * [Config] standardise CONFIG_ATM as module + * [Config] standardise CONFIG_LIB80211 as module + * [Config] disable CONFIG_PRINT_QUOTA_WARNING + * [Config] set CONFIG_CRAMFS as module + * [Config] enable CONFIG_DAB and modules + * [Config] set CONFIG_MAC80211_HWSIM as module + * [Config] set CONFIG_NET_CLS_FLOW as module + * [Config] set CONFIG_NF_CONNTRACK_SANE as module + * [Config] set CONFIG_NF_CT_PROTO_DCCP as module + * [Config] set CONFIG_RTC_DRV_DS1511 as module + * [Config] set CONFIG_RTC_DRV_R9701 as module + * [Config] set CONFIG_RTC_DRV_S35390A as module + * [Config] set CONFIG_TOIM3232_DONGLE as module + * [Config] standardise CONFIG_USB_MIDI_GADGET as module + * [Config] standardise CONFIG_USB_G_PRINTER as module + * [Config] standardise CONFIG_USB_SERIAL_IR as module + * [Config] set CONFIG_USB_SERIAL_IUU as module + * [Config] standardise CONFIG_USB_STORAGE_CYPRESS_ATACB as module + * [Config] standardise CONFIG_USB_STORAGE_ONETOUCH as module + * cleanup remains of dm-loop + * drop thinkpad ec and smapi support + * drop appleir + * [Config] update configs following rebase to v2.6.31-rc6 + * rebase to v2.6.31-rc6 + + [ Hugh Dickins ] + + * SAUCE: ksm patch 1, drop after 2.6.31 + * SAUCE: ksm patch 2, drop after 2.6.31 + * SAUCE: ksm patch 3, drop after 2.6.31 + * SAUCE: ksm patch 4, drop after 2.6.31 + * SAUCE: ksm patch 5, drop after 2.6.31 + * SAUCE: ksm patch 7, drop after 2.6.31 + + [ Izik Eidus ] + + * SAUCE: ksm patch 0, drop after 2.6.31 + * SAUCE: ksm patch 6, drop after 2.6.31 + * SAUCE: ksm patch 8, drop after 2.6.31 + * SAUCE: ksm patch 9, drop after 2.6.31 + + [ Luke Yelavich ] + + * [Config] Ports: Re-add PS3 modules to udebs + + [ Michael Casadevall ] + + * [Config] Update SPARC config and d-i files to reflect what can be built + + [ Tim Gardner ] + + * [Config] Removed armel package support + * [Config] Enabled CONFIG_KSM=y + + [ Upstream Kernel Changes ] + + * Rebased against v2.6.31-rc6 + * ARM: Cleanup: Revert "ARM: Add more cache memory types macros" + * ARM: Cleanup: Revert "Do not use OOB with MLC NAND" + * ARM: Cleanup: Revert "ARM: Make ARM arch aware of ubuntu/ drivers" + * ARM: Cleanup: Revert "ARM: IMX51: Make video capture drivers compile" + * ARM: Cleanup: Revert "ARM: IMX51: Fix isl29003 HWMON driver for i2c + changes" + * ARM: Cleanup: Revert "ARM: IMX51: IPU irq handler deadlock fix" + * ARM: Cleanup: Revert "ARM: IMX51: Babbage 2.5 needs a different system + revision" + * ARM: Cleanup: Revert "ARM: IMX51: Compile-in the IMX51 cpufreq driver + by default" + * ARM: Cleanup: Revert "ARM: IMX51: Enable ZONE_DMA for ARCH_MXC" + * ARM: Cleanup: Revert "ARM: IMX51: Make ARCH_MXC auto-enable + ARCH_MXC_CANONICAL" + * ARM: Cleanup: Revert "ARM: IMX51: Unconditionally disable + CONFIG_GPIOLIB" + * ARM: Cleanup: Revert "ARM: IMX51: Minimal changes for USB to work on + 2.6.31" + * ARM: Cleanup: Revert "ARM: IMX51: Fix plat-mxc/timer.c to handle imx51" + * ARM: Cleanup: Revert "ARM: IMX51: Make it compile." + * ARM: Cleanup: Revert "ARM: IMX51: Clean-up the craziness of including + mxc_uart.h _everywhere_" + * ARM: Cleanup: Revert "ARM: IMX51: Move board-mx51* header files to the + correct location" + * ARM: Cleanup: Revert "ARM: IMX51: Changed from snd_card_new to + snd_card_create" + * ARM: Cleanup: Revert "ARM: IMX51: Fix up merge error in Kconfig" + * ARM: Cleanup: Revert "ARM: IMX51: mxc_timer_init prototype" + * ARM: Cleanup: Revert "ARM: IMX51: Removed the mxc_gpio_port structure." + * ARM: Cleanup: Revert "ARM: IMX51: Added external declaration for + mxc_map_io." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: snd_soc_machine structure replaced + with snd_soc_card." + * ARM: Cleanup: Revert "ARM: IMX51: codec structure was moved to the card + structure" + * ARM: Cleanup: Revert "ARM: IMX51: Hack to add defines for + DMA_MODE_READ/WRITE/MASK" + * ARM: Cleanup: Revert "ARM: IMX51: Add SoC and board support for + Freescale mx51 platform" + * Driver core: add new device to bus's list before probing + * [Upstream] (drop after 2.6.31) ALSA: hda - Reduce click noise at + power-saving + - LP: #381693, #399750, #380892 + + -- Andy Whitcroft Fri, 14 Aug 2009 11:32:23 +0100 + +linux (2.6.31-5.24) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Make video capture drivers compile + * [Config] IMX51: Config updates + + [ Andy Whitcroft ] + + * remove leftovers of dm-bbr + + [ Leann Ogasawara ] + + * Add pata_cs5535 to pata-modules + - LP: #318805 + + [ Luke Yelavich ] + + * [Config] CONFIG_PPC64=y for powerpc64-smp + * [Config] Set the maximum number of CPUs to 1024 for powerpc64-smp + * [Config] CONFIG_PPC_PS3=y for powerpc64-smp + * [Config] CONFIG_PPC_MAPLE=y on powerpc64-smp + * [Config] CONFIG_PPC_PASEMI=y on powerpc64-smp + * [Config] CONFIG_CPU_FREQ_PMAC64=y on powerpc64-smp + * [Config] Enable all PS3 drivers in powerpc64-smp + + [ Mario Limonciello ] + + * LIRC -- fix lirc-i2c 2.6.31 compilation + + [ Matthew Garrett ] + + * [Upstream] dell-laptop: Fix rfkill state queries + + [ Tim Gardner ] + + * [Config] Ignore armel ABI and module changes + * [Config] Update configs after rebase against 2.6.31-rc5 + + [ Upstream ] + + * Rebased to 2.6.31-rc5 + + -- Andy Whitcroft Tue, 28 Jul 2009 10:10:09 +0100 + +linux (2.6.31-4.23) karmic; urgency=low + + [ Andy Whitcroft ] + + * AUFS -- update to aufs2-30 20090727 + * [Config] enable AUFS FUSE support + + [ Luke Yelavich ] + + * [Config] CONFIG_JFS_FS=m on sparc + + [ Tim Gardner ] + + * [Upstream] dell-laptop: Fix rfkill state setting. + + -- Andy Whitcroft Mon, 27 Jul 2009 11:11:47 +0100 + +linux (2.6.31-4.22) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Add SoC and board support for Freescale mx51 platform + * ARM: IMX51: Move board-mx51* header files to the correct location + * ARM: IMX51: Clean-up the craziness of including mxc_uart.h _everywhere_ + * ARM: IMX51: Make it compile. + * ARM: IMX51: Unconditionally disable CONFIG_GPIOLIB + * ARM: IMX51: Make ARCH_MXC auto-enable ARCH_MXC_CANONICAL + * ARM: IMX51: Enable ZONE_DMA for ARCH_MXC + * ARM: IMX51: Compile-in the IMX51 cpufreq driver by default + * ARM: IMX51: Fix isl29003 HWMON driver for i2c changes + * ARM: USB: musb: Refer to musb_otg_timer_func under correct #ifdef + * ARM: staging: udlfb: Add vmalloc.h include + * UBUNTU [Config]: Bring imx51 config upto date with other flavours + + [ Brad Figg ] + + * ARM: IMX51: Hack to add defines for DMA_MODE_READ/WRITE/MASK + * ARM: IMX51: codec structure was moved to the card structure + * ARM: IMX51: snd_soc_machine structure replaced with snd_soc_card. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Added external declaration for mxc_map_io. + * ARM: IMX51: Removed the mxc_gpio_port structure. + * ARM: IMX51: mxc_timer_init prototype + * ARM: IMX51: Fix up merge error in Kconfig + * ARM: IMX51: Changed from snd_card_new to snd_card_create + + [ Dinh Nguyen ] + + * ARM: IMX51: Fix plat-mxc/timer.c to handle imx51 + * ARM: IMX51: Minimal changes for USB to work on 2.6.31 + * ARM: IMX51: Babbage 2.5 needs a different system revision + * ARM: IMX51: IPU irq handler deadlock fix + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_CAN=m + - LP: #327243 + * [Config] Enabled CONFIG_SERIAL=m + - LP: #397189 + + -- Tim Gardner Fri, 24 Jul 2009 06:19:10 -0600 + +linux (2.6.31-4.21) karmic; urgency=low + + [ Amit Kucheria ] + + * dm-raid-4-5: Add missing brackets around test_bit() + + [ John Johansen ] + + * AppArmor: Fix change_profile failing lpn401931 + * AppArmor: Fix determination of forced AUDIT messages. + * AppArmor: Fix oops in auditing of the policy interface offset + + -- Andy Whitcroft Thu, 23 Jul 2009 19:18:30 +0100 + +linux (2.6.31-4.20) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: iscsitarget -- update to SVN revision r214 + * SAUCE: iscsitarget -- renable driver + * [Config] consolidate lpia/lpia and i386/generic configs + * [Config] enable CRYPTO modules for all architectures + * [Config] enable cryptoloop + * [Config] enable various filesystems for armel + * [Config] sync i386 generic and generic-pae + * [Config] add the 386 (486 processors and above) flavour + * [Config] re-set DEFAULT_MMAP_MIN_ADDR + - LP: #399914 + * add genconfigs/genportsconfigs to extract the built configs + * updateconfigs -- alter concatenation order allow easier updates + * intelfb -- INTELFB now conflicts with DRM_I915 + * printchanges -- rebase tree does not have stable tags use changelog + * AppArmor: fix argument size missmatch on 64 bit builds + + [ Ike Panhc ] + + * Ship bnx2x firmware in nic-modules udeb + - LP: #360966 + + [ Jeff Mahoney ] + + * AppArmor: fix build failure on ia64 + + [ John Johansen ] + + * AppArmour: ensure apparmor enabled parmater is off if AppArmor fails to + initialize. + * AppArmour: fix auditing of domain transitions to include target profile + information + * AppArmor: fix C99 violation + * AppArmor: revert reporting of create to write permission. + * SAUCE: Add config option to set a default LSM + * [Config] enable AppArmor by default + * AppArmor: Fix NULL pointer dereference oops in profile attachment. + + [ Keith Packard ] + + * SAUCE: drm/i915: Allow frame buffers up to 4096x4096 on 915/945 class + hardware + - LP: #351756 + + [ Luke Yelavich ] + + * [Config] add .o files found in arch/powerpc/lib to all powerpc kernel + header packages + - LP: #355344 + + [ Michael Casadevall ] + + * [Config] update SPARC config files to allow success build + + [ Scott James Remnant ] + + * SAUCE: trace: add trace_event for the open() syscall + + [ Stefan Bader ] + + * SAUCE: jfs: Fix early release of acl in jfs_get_acl + - LP: #396780 + + [ Tim Gardner ] + + * [Upstream] Fix Soltech TA12 volume hotkeys not sending key release + - LP: #397499 + * [Upstream] USB Option driver - Add USB ID for Novatel MC727/U727/USB727 + refresh + - LP: #365291 + * [Config] SSB/B44 are common across all arches/flavours. + + [ Upstream ] + + * Rebased to 2.6.31-rc4 + + -- Andy Whitcroft Thu, 23 Jul 2009 08:41:39 +0100 + +linux (2.6.31-3.19) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] Disabled NDISWRAPPER" + * ndiswrapper -- fix i386 compilation failures on cmpxchg8b + * AUFS -- export various core functions + * AUFS -- export various core functions -- fixes + * AUFS -- core filesystem + * AUFS -- track changes in v2.6.31 + * [Config] Enable AUFS + * droppped 'iwl3945: do not send scan command if channel count zero' as it + is already upstream but failed to auto-drop on rebase. + + [ Eric Paris ] + + * SAUCE: fsnotify: use def_bool in kconfig instead of letting the user + choose + * SAUCE: inotify: check filename before dropping repeat events + * SAUCE: fsnotify: fix inotify tail drop check with path entries + + -- Andy Whitcroft Tue, 14 Jul 2009 12:52:55 +0100 + +linux (2.6.31-3.18) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "Add splice-2.6.23.patch from AUFS to export a symbol needed by + AUFS" + * Revert "Add put_filp.patch from AUFS to export a symbol needed by AUFS" + * Revert "Add sec_perm-2.6.24.patch from AUFS - export + security_inode_permission" + * clear out left over AUFS files and modifications + + [ Luke Yelavich ] + + * [Config] Enable CONFIG_USB_ISP116X_HCD on sparc + * SAUCE: Explicitly include header files to allow apparmor to build on + powerpc + * [Config] Enable CONFIG_BLK_DEV_IDECD on powerpc + + [ Tim Gardner ] + + * [Config] Dropped ubuntu/misc/wireless/acx + * [Config] Disabled NDISWRAPPER until the compile issues are fixed. + + [ Upstream ] + + * Rebased to 2.6.31-rc3 + + -- Andy Whitcroft Fri, 10 Jul 2009 18:59:33 +0100 + +linux (2.6.31-2.17) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_BLK_DEV_CRYPTOLOOP=m for sparc + * compcache -- remove redundant Kconfig entries part 2 + * compcache -- clean up CCFLAGS declarations + * [Config] enable AppArmor + * AppArmor: fix operator precidence issue in as_path_link + + [ John Johansen ] + + * AppArmor security module + * AppArmor: Correct mapping of file permissions. + * AppArmor: Turn auditing of ptrace on + + [ Luke Yelavich ] + + * [Config] disable CONFIG_DM_RAID45 on powerpc + + -- Andy Whitcroft Fri, 10 Jul 2009 15:02:05 +0100 + +linux (2.6.31-2.16) karmic; urgency=low + + [ Andy Whitcroft ] + + * compcache -- remove redundant Kconfig entries + added ignore and ignore.modules for all arches since the compcache update + changes the modules names as well as some compcache ABI values. + + [ Manoj Iyer ] + + * SAUCE: updated dm-raid45 module version to 2009.04.24 (2.6.30-rc3) + * SAUCE: update compcache version to 0.5.3 + + [ Tim Gardner ] + + * [Config]: Fix sparc FTBS by adding ignore.modules + + -- Tim Gardner Mon, 06 Jul 2009 13:35:29 -0600 + +linux (2.6.31-2.15) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: default ATI Radeon KMS to off until userspace catches up + * [Config] Update configs following rebase to 2.6.31-rc2 + * [Config] update ports configs following update to 2.6.31-rc2 + + [ Luke Yelavich ] + + * [Config] powerpc - Disable CONFIG_RDS + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + [ Upstream Kernel Changes ] + + * rebased to mainline 2.6.31-rc2 + + -- Andy Whitcroft Sat, 04 Jul 2009 17:39:13 +0100 + +linux (2.6.31-1.14) karmic; urgency=low + + [ Andy Whitcroft ] + + * update ndiswrapper to 1.55 + * remove leftovers of gfs + * [Config] powerpc: enable CONFIG_PPC_DISABLE_WERROR + + [ Luke Yelavich ] + + * [Config] re-enable and build the ide-pmac driver into powerpc kernels + * [Config] Build the ServerWorks Frodo / Apple K2 SATA driver into the + kernel + + [ Manoj Iyer ] + + * Remove snd-bt-sco ubuntu driver + + [ Michael Casadevall ] + + * [Config] updates ia64 config and d-i folders to allow succesful build + * [Config] Update powerpc and sparc for 2.6.31 + + [ Upstream Kernel Changes ] + + * intel-iommu: fix Identity Mapping to be arch independent + - LP: #384695 + * ACPI: video: prevent NULL deref in acpi_get_pci_dev() + + -- Andy Whitcroft Tue, 30 Jun 2009 17:47:32 +0100 + +linux (2.6.31-1.13) karmic; urgency=low + + [ Andy Whitcroft ] + + * REBASE: rebased to mainline 2.6.31-rc1 + - "UBUNTU: SAUCE: UHCI USB quirk for resume" + no longer applies, using deprecated interfaces, LPIA only, dropped + - "UBUNTU: SAUCE: Mask off garbage in Dell WMI scan code data" + changes now upstream, dropped + * [Config] Update configs following rebase to 2.6.31-rc1 + * [Config] update ports configs following update to 2.6.31-rc1 + + * [Config] disable broken staging driver CONFIG_STLC45XX + * SAUCE: fix compcache to use updates accessors + * [Config] disable staging driver CONFIG_VT6655 + * SAUCE: fix DRDB to use updates accessors + * [Disable] ndiswrapper needs update + * [Disable] LIRC I2C needs update + * [Disable] CONFIG_LENOVO_SL_LAPTOP needs update + * [Config] disable I2C_DESIGNWARE does not compile + * [Config] disable CONFIG_TLSUP for lpia + * [Config] disable CONFIG_FB_UDL for arm + * SAUCE: disable adding scsi headers to linux-libc-dev + + [ Mario Limonciello ] + + * SAUCE: Add LIRC drivers + + -- Andy Whitcroft Thu, 25 Jun 2009 12:06:22 +0100 + +linux (2.6.30-10.12) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] split out the ports configs into their own family + * [Config] update configs following introduction of ports family + + [ Upstream Kernel Changes ] + + * Revert "Rename linux-doc-PKGVER to linux-doc and clean up its + description". Fixes linux-doc package name conflicts for now. + - LP: #382115 + + -- Tim Gardner Mon, 22 Jun 2009 09:17:14 -0600 + +linux (2.6.30-10.11) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Comment splitconfig.pl and misc cleanup + * [Config] Rename all configs to the new naming scheme + * [Config] Splitconfig rework + * [Config] Rename scripts/misc/oldconfig to kernelconfig + * [Config] Fix build system for new config split + * [Config] Run updateconfigs after the splitconfig rework + + [ Andy Whitcroft ] + + * Revert "SAUCE: Default to i915.modeset=0 if CONFIG_DRM_I915_KMS=y" + * [Config] standardise CONFIG_STAGING=y + * [Config] standardise CONFIG_RD_LZMA=y + * [Config] CONFIG_PCI_IOV=y + * [Config] CONFIG_PCI_STUB=m + * [Config] merge kernel configs more agressively + + [ Colin Watson ] + + * [Config] Run kernel-wedge in $(builddir) rather than at the top level + * [Config] Add support for including firmware in udebs + * [Config] Ship bnx2 firmware in nic-modules udeb + - LP: #384861 + + [ Luke Yelavich ] + + * [Config] ports - Import of ports architectures into kernel packaging + infrastructure + * [Config] ports - Do not update ports kernel configurations by default + * [Config] ports - Disable ABI checking for ports architectures + * [Config] ports - Build drivers in ubuntu sub-directory on powerpc + * [Config] ports - Add control.d/vars.* files for ports architectures + * [Config] ports - Add ports architectures for linux-libc-dev + * [Config] ports - Create powerpc specific message-modules and + block-modules udebs + * [Config] ports - Add configuration files for ports architectures + + [ Manoj Iyer ] + + * [Config] Enable CONFIG_BLK_DEV_AEC62XX=m for amd64 and i386 + - LP: #329864 + + [ Michael Casadevall ] + + * [Config] ports - Fix compression of kernels + + [ Stefan Bader ] + + * [Upstream] mmc: prevent dangling block device from accessing stale + queues + - LP: #383668 + + [ Tim Gardner ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + * [Config] Implement i386 generic and generic-pae flavours + * [Config] ports - Add control info after integrating ports arches + * [Config] Removed auto-generated files from git + * [Config] Added netxen_nic to nic-modules + - LP: #389603 + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + -- Tim Gardner Mon, 15 Jun 2009 14:38:26 -0600 + +linux (2.6.30-9.10) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_SECURITY_TOMOYO=y (amd64, i386, lpia) + * [Config] CONFIG_KEXEC_JUMP=y (amd64, lpia) + * [Config] CONFIG_LENOVO_SL_LAPTOP=m (amd64, lpia) + * [Config] CONFIG_POHMELFS_CRYPTO=y (i386, amd64) + * [Config] CONFIG_SERIAL_MAX3100=m (i386, amd64, lpia) + * [Config] CONFIG_VIDEO_GO7007=m (amd64, i386) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30 final + + -- Andy Whitcroft Fri, 05 Jun 2009 11:42:53 +0100 + +linux (2.6.30-8.9) karmic; urgency=low + + [ Andy Whitcroft ] + + * Config update removed the following options: + CONFIG_EDAC_AMD8111=m + CONFIG_EDAC_AMD8131=m + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc8 + + -- Andy Whitcroft Wed, 03 Jun 2009 09:21:13 +0100 + +linux (2.6.30-7.8) karmic; urgency=low + + [ Andy Whitcroft ] + + * Enabled NEW configration options: + Paravirtualization layer for spinlocks (PARAVIRT_SPINLOCKS) [N/y/?] Y + Cisco FNIC Driver (FCOE_FNIC) [N/m/y/?] M + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc7 + + -- Andy Whitcroft Sat, 23 May 2009 23:47:24 +0100 + +linux (2.6.30-6.7) karmic; urgency=low + + [ Andy Whitcroft ] + + * Dropped: UBUNTU: SAUCE: input: Blacklist digitizers from joydev.c (now + upstream) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc6 + + -- Andy Whitcroft Mon, 18 May 2009 18:05:54 +0100 + +linux (2.6.30-5.6) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enable Keyspan USB serial device firmware in kernel module + - LP: #334285 + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc5 + + -- Tim Gardner Mon, 11 May 2009 12:02:16 -0600 + +linux (2.6.30-4.5) karmic; urgency=low + + [ Colin Watson ] + + * Build-Conflict with findutils (= 4.4.1-1ubuntu1), to avoid + /usr/include/asm/* going missing + - LP: #373214 + + -- Stefan Bader Fri, 08 May 2009 11:09:08 +0200 + +linux (2.6.30-3.4) karmic; urgency=low + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + + [ Stefan Bader ] + + * SAUCE: input: Blacklist digitizers from joydev.c + - LP: #300143 + + -- Tim Gardner Fri, 01 May 2009 14:00:42 -0600 + +linux (2.6.30-2.3) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enabled CC_STACKPROTECTOR=y for all x86en + - LP: #369152 + * SAUCE: Default to i915_modeset=0 if CONFIG_DRM_I915_KMS=y + * [Config] CONFIG_DRM_I915_KMS=y + * [Config] Set CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR to appropriate ARCH + minimums + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc4 + + -- Tim Gardner Thu, 30 Apr 2009 09:17:05 -0600 + +linux (2.6.30-1.2) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] armel: disable staging drivers, fixes FTBS + * [Config] armel imx51: Disable CONFIG_MTD_NAND_MXC, fixes FTBS + + [ Upstream Kernel Changes ] + + * mpt2sas: Change reset_type enum to avoid namespace collision. + Submitted upstream. + + -- Tim Gardner Tue, 28 Apr 2009 16:54:41 -0600 + +linux (2.6.30-1.1) karmic; urgency=low + + * Initial release after rebasing against v2.6.30-rc3 + + -- Tim Gardner Thu, 12 Mar 2009 19:16:07 -0600 --- linux-2.6.32.orig/debian/control.stub +++ linux-2.6.32/debian/control.stub @@ -0,0 +1,844 @@ +Source: linux +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386 lpia], device-tree-compiler [powerpc], libelf-dev, binutils-dev, rsync +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-lucid.git + +Package: linux-source-2.6.32 +Architecture: all +Section: devel +Priority: optional +Provides: linux-source, linux-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version 2.6.32 with Ubuntu patches + This package provides the source code for the Linux kernel version + 2.6.32. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: linux-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: linux-doc-2.6 +Replaces: linux-doc-2.6 +Description: Linux kernel specific documentation for version 2.6.32 + This package provides the various documents in the 2.6.32 kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/linux-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-tools-common +Architecture: all +Section: admin +Priority: optional +Depends: ${misc:Depends} +Replaces: linux-tools (<= 2.6.32-16.25) +Description: Linux kernel specific tools for version 2.6.32 + This package provides the architecture independent parts for kernel + version locked tools in the 2.6.32 kernel source. + +Package: linux-headers-2.6.32-24 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version 2.6.32 + This package provides kernel header files for version 2.6.32, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details + +Package: linux-libc-dev +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Depends: ${misc:Depends} +Conflicts: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), amd64-libs-dev (<= 1.1), linux-kernel-headers +Replaces: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), linux-kernel-headers, libdrm-dev +Provides: linux-kernel-headers +Description: Linux Kernel Headers for development + This package provides headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system + libraries. They are NOT meant to be used to build third-party modules for + your kernel. Use linux-headers-* packages for that. + +Package: linux-tools-2.6.32-24 +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel tools for version 2.6.32-24 + This package provides the architecture dependant parts for kernel + version locked tools for version 2.6.32-24 on + DESC. + + +Package: linux-image-2.6.32-24-386 +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on i386 + This package contains the Linux kernel image for version 2.6.32 on + i386. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Alternate x86 (486 and better) processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-386 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-386 +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on i386 + This package provides kernel header files for version 2.6.32 on + i386. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-386-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on i386 + This package provides a kernel debug image for version 2.6.32 on + i386. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86/x86_64 + This package provides kernel header files for version 2.6.32 on + x86/x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-dbgsym +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86/x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86/x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic-pae +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86 + This package contains the Linux kernel image for version 2.6.32 on + x86. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward 32 bit desktop systems with more then 4GB RAM. + . + You likely do not want to install this package directly. Instead, install + the linux-generic-pae meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic-pae +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86 + This package provides kernel header files for version 2.6.32 on + x86. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-pae-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86 + This package provides a kernel debug image for version 2.6.32 on + x86. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-ia64 +Architecture: ia64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: elilo (>= 3.6-1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on IA-64 SMP + This package contains the Linux kernel image for version 2.6.32 on + IA-64 SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports IA-64 SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-ia64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-ia64 +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on IA-64 SMP + This package provides kernel header files for version 2.6.32 on + IA-64 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-ia64-dbgsym +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on IA-64 SMP + This package provides a kernel debug image for version 2.6.32 on + IA-64 SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-lpia +Architecture: lpia +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Intel Atom processors + This package contains the Linux kernel image for version 2.6.32 on + Intel Atom processors. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Intel Atom processors. + . + Geared toward LPIA-based mobile devices + . + You likely do not want to install this package directly. Instead, install + the linux-lpia meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-lpia +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Intel Atom processors + This package provides kernel header files for version 2.6.32 on + Intel Atom processors. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-lpia-dbgsym +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Intel Atom processors + This package provides a kernel debug image for version 2.6.32 on + Intel Atom processors. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc64-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-preempt +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Preempt processors. + . + Geared toward low latency systems. + . + You likely do not want to install this package directly. Instead, install + the linux-preempt meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-preempt +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-preempt-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-server +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, kvm-api-4, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Server processors. + . + Geared toward 64 bit server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-server meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-server +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-server-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64 +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64 +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64-smp +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64-smp +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-smp-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-versatile +Architecture: armel +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Versatile-based systems + This package contains the Linux kernel image for version 2.6.32 on + Versatile-based systems. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Versatile processors. + . + PB, AB, Qemu, etc. + . + You likely do not want to install this package directly. Instead, install + the linux-versatile meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-versatile +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Versatile-based systems + This package provides kernel header files for version 2.6.32 on + Versatile-based systems. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-versatile-dbgsym +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Versatile-based systems + This package provides a kernel debug image for version 2.6.32 on + Versatile-based systems. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-virtual +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1), linux-image-2.6.32-24-generic-pae, linux-image-2.6.32-24-server +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32 +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Virtual processors. + . + Geared toward virtual machine guests. + . + You likely do not want to install this package directly. Instead, install + the linux-virtual meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. --- linux-2.6.32.orig/debian/tools/perf +++ linux-2.6.32/debian/tools/perf @@ -0,0 +1,16 @@ +#!/bin/bash +full_version=`uname -r` + +# Removing flavour from version i.e. generic or server. +flavour_abi=${full_version#*-} +flavour=${flavour_abi#*-} +version=${full_version%-$flavour} +perf="perf_$version" + +if ! which "$perf" > /dev/null; then + echo "$perf not found" >&2 + echo "You may need to install linux-tools-$version" >&2 + exit 2 +fi + +exec "$perf" "$@" --- linux-2.6.32.orig/debian/rules.d/4-checks.mk +++ linux-2.6.32/debian/rules.d/4-checks.mk @@ -0,0 +1,34 @@ +# Check ABI for package against last release (if not same abinum) +abi-%: $(abidir)/% + @# Empty for make to be happy +$(abidir)/%: $(stampdir)/stamp-build-% + install -d $(abidir) + sed -e 's/^\(.\+\)[[:space:]]\+\(.\+\)[[:space:]]\(.\+\)$$/\3 \2 \1/' \ + $(builddir)/build-$*/Module.symvers | sort > $@ + +abi-check-%: $(abidir)/% + @perl -f $(DROOT)/scripts/abi-check "$*" "$(prev_abinum)" "$(abinum)" \ + "$(prev_abidir)" "$(abidir)" "$(skipabi)" + +# Check the module list against the last release (always) +module-%: $(abidir)/%.modules + @# Empty for make to be happy +$(abidir)/%.modules: $(stampdir)/stamp-build-% + install -d $(abidir) + find $(builddir)/build-$*/ -name \*.ko | \ + sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > $@ + +module-check-%: $(abidir)/%.modules + @perl -f $(DROOT)/scripts/module-check "$*" \ + "$(prev_abidir)" "$(abidir)" $(skipmodule) + +checks-%: abi-check-% module-check-% + @# Will be calling more stuff later + +# Check the config against the known options list. +config-prepare-check-%: $(stampdir)/stamp-prepare-tree-% + @perl -f $(DROOT)/scripts/config-check \ + $(builddir)/build-$*/.config "$(arch)" "$*" "$(sharedconfdir)" "$(skipconfig)" + +prepare-checks-%: config-prepare-check-% + @# Will be calling more stuff later --- linux-2.6.32.orig/debian/rules.d/3-binary-indep.mk +++ linux-2.6.32/debian/rules.d/3-binary-indep.mk @@ -0,0 +1,127 @@ +build-indep: + +docpkg = $(doc_pkg_name) +docdir = $(CURDIR)/debian/$(docpkg)/usr/share/doc/$(docpkg) +install-doc: + dh_testdir + dh_testroot + dh_clean -k -p$(docpkg) + + install -d $(docdir) +ifeq ($(do_doc_package_content),true) + # First the html docs. We skip these for autobuilds + if [ -z "$(AUTOBUILD)" ]; then \ + install -d $(docdir)/$(doc_pkg_name)-tmp; \ + $(kmake) O=$(docdir)/$(doc_pkg_name)-tmp htmldocs; \ + mv $(docdir)/$(doc_pkg_name)-tmp/Documentation/DocBook \ + $(docdir)/html; \ + rm -rf $(docdir)/$(doc_pkg_name)-tmp; \ + fi +endif + # Copy the rest + cp -a Documentation/* $(docdir) + rm -rf $(docdir)/DocBook + find $(docdir) -name .gitignore | xargs rm -f + +indep_hdrpkg = $(hdrs_pkg_name) +indep_hdrdir = $(CURDIR)/debian/$(indep_hdrpkg)/usr/src/$(indep_hdrpkg) +install-headers: + dh_testdir + dh_testroot + dh_clean -k -p$(indep_hdrpkg) + + install -d $(indep_hdrdir) + find . -path './debian' -prune -o -path './$(DEBIAN)' -prune \ + -o -path './include/*' -prune \ + -o -path './scripts/*' -prune -o -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ + -print | cpio -pd --preserve-modification-time $(indep_hdrdir) + cp -a drivers/media/dvb/dvb-core/*.h $(indep_hdrdir)/drivers/media/dvb/dvb-core + cp -a drivers/media/video/*.h $(indep_hdrdir)/drivers/media/video + cp -a drivers/media/dvb/frontends/*.h $(indep_hdrdir)/drivers/media/dvb/frontends + cp -a scripts include $(indep_hdrdir) + (find arch -name include -type d -print | \ + xargs -n1 -i: find : -type f) | \ + cpio -pd --preserve-modification-time $(indep_hdrdir) + +srcpkg = $(src_pkg_name)-source-$(release) +srcdir = $(CURDIR)/debian/$(srcpkg)/usr/src/$(srcpkg) +install-source: + dh_testdir + dh_testroot + dh_clean -k -p$(srcpkg) + + install -d $(srcdir) +ifeq ($(do_source_package_content),true) + find . -path './debian' -prune -o -path './$(DEBIAN)' -prune -o \ + -path './.*' -prune -o -print | \ + cpio -pd --preserve-modification-time $(srcdir) + (cd $(srcdir)/..; tar cf - $(srcpkg)) | bzip2 -9c > \ + $(srcdir).tar.bz2 + rm -rf $(srcdir) +endif + +install-tools: toolspkg = $(tools_common_pkg_name) +install-tools: toolsbin = $(CURDIR)/debian/$(toolspkg)/usr/bin +install-tools: toolsman = $(CURDIR)/debian/$(toolspkg)/usr/share/man +install-tools: + dh_testdir + dh_testroot + dh_clean -k -p$(toolspkg) + + install -d $(toolsbin) + install -d $(toolsman)/man1 + + install -m755 debian/tools/perf $(toolsbin)/perf + + install -d $(builddir)/tools + for i in *; do ln -s $(CURDIR)/$$i $(builddir)/tools/; done + rm $(builddir)/tools/tools + rsync -a tools/ $(builddir)/tools/tools/ + + cd $(builddir)/tools/tools/perf && make man + install -m644 $(builddir)/tools/tools/perf/Documentation/*.1 \ + $(toolsman)/man1 + +install-indep-deps = +ifeq ($(do_common_headers_indep),true) +install-indep-deps += install-headers +endif +ifeq ($(do_doc_package),true) +install-indep-deps += install-doc +endif +ifeq ($(do_source_package),true) +install-indep-deps += install-source +endif +ifeq ($(do_tools),true) +install-indep-deps += install-tools +endif +install-indep: $(install-indep-deps) + +# This is just to make it easy to call manually. Normally done in +# binary-indep target during builds. +binary-headers: install-headers + dh_testdir + dh_testroot + dh_installchangelogs -p$(indep_hdrpkg) + dh_installdocs -p$(indep_hdrpkg) + dh_compress -p$(indep_hdrpkg) + dh_fixperms -p$(indep_hdrpkg) + dh_installdeb -p$(indep_hdrpkg) + dh_gencontrol -p$(indep_hdrpkg) + dh_md5sums -p$(indep_hdrpkg) + dh_builddeb -p$(indep_hdrpkg) + +binary-indep: install-indep + dh_testdir + dh_testroot + + dh_installchangelogs -i + dh_installdocs -i + dh_compress -i + dh_fixperms -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i --- linux-2.6.32.orig/debian/rules.d/2-binary-arch.mk +++ linux-2.6.32/debian/rules.d/2-binary-arch.mk @@ -0,0 +1,392 @@ +# We don't want make removing intermediary stamps +.SECONDARY : + +# Prepare the out-of-tree build directory +ifeq ($(do_full_source),true) +build_cd = cd $(builddir)/build-$*; # +build_O = +else +build_cd = +build_O = O=$(builddir)/build-$* +endif + +prepare-%: $(stampdir)/stamp-prepare-% + @# Empty for make to be happy +$(stampdir)/stamp-prepare-%: $(stampdir)/stamp-prepare-tree-% prepare-checks-% + @touch $@ +$(stampdir)/stamp-prepare-tree-%: target_flavour = $* +$(stampdir)/stamp-prepare-tree-%: $(commonconfdir)/config.common.$(family) $(archconfdir)/config.common.$(arch) $(archconfdir)/config.flavour.% + @echo "Preparing $*..." + install -d $(builddir)/build-$* + touch $(builddir)/build-$*/ubuntu-build + [ "$(do_full_source)" != 'true' ] && true || \ + rsync -a --exclude debian --exclude debian.master --exclude $(DEBIAN) * $(builddir)/build-$* + cat $^ | sed -e 's/.*CONFIG_VERSION_SIGNATURE.*/CONFIG_VERSION_SIGNATURE="Ubuntu $(release)-$(revision)-$* $(release)$(extraversion)"/' > $(builddir)/build-$*/.config + find $(builddir)/build-$* -name "*.ko" | xargs rm -f + $(build_cd) $(kmake) $(build_O) silentoldconfig prepare scripts + touch $@ + +# Do the actual build, including image and modules +build-%: $(stampdir)/stamp-build-% + @# Empty for make to be happy +$(stampdir)/stamp-build-%: target_flavour = $* +$(stampdir)/stamp-build-%: prepare-% + @echo "Building $*..." + $(build_cd) $(kmake) $(build_O) $(conc_level) $(build_image) + $(build_cd) $(kmake) $(build_O) $(conc_level) modules + @touch $@ + +# Install the finished build +install-%: pkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$* +install-%: bindoc = $(pkgdir)/usr/share/doc/$(bin_pkg_name)-$* +install-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym +install-%: basepkg = $(hdrs_pkg_name) +install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$* +install-%: target_flavour = $* +install-%: $(stampdir)/stamp-build-% checks-% + dh_testdir + dh_testroot + dh_clean -k -p$(bin_pkg_name)-$* + dh_clean -k -p$(hdrs_pkg_name)-$* + dh_clean -k -p$(dbg_pkg_name)-$* + + # The main image + # compress_file logic required because not all architectures + # generate a zImage automatically out of the box +ifeq ($(compress_file),) + install -m644 -D $(builddir)/build-$*/$(kernel_file) \ + $(pkgdir)/boot/$(install_file)-$(abi_release)-$* +else + install -d $(pkgdir)/boot + gzip -c9v $(builddir)/build-$*/$(kernel_file) > \ + $(pkgdir)/boot/$(install_file)-$(abi_release)-$* + chmod 644 $(pkgdir)/boot/$(install_file)-$(abi_release)-$* +endif + + install -m644 $(builddir)/build-$*/.config \ + $(pkgdir)/boot/config-$(abi_release)-$* + install -m644 $(abidir)/$* \ + $(pkgdir)/boot/abi-$(abi_release)-$* + install -m644 $(builddir)/build-$*/System.map \ + $(pkgdir)/boot/System.map-$(abi_release)-$* +ifeq ($(no_dumpfile),) + makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \ + -x $(builddir)/build-$*/vmlinux +endif + + $(build_cd) $(kmake) $(build_O) modules_install \ + INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(pkgdir)/ \ + INSTALL_FW_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$* + + # + # Remove all modules not in the inclusion list. + # + if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \ + $(DROOT)/scripts/module-inclusion $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \ + $(DEBIAN)/control.d/$(target_flavour).inclusion-list 2>&1 | \ + tee $(target_flavour).inclusion-list.log; \ + /sbin/depmod -b $(pkgdir) -ea -F $(pkgdir)/boot/System.map-$(abi_release)-$* \ + $(abi_release)-$* 2>&1 |tee $(target_flavour).depmod.log; \ + fi + +ifeq ($(no_dumpfile),) + makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \ + -x $(builddir)/build-$*/vmlinux +endif + rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/build + rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/source + + # Some initramfs-tools specific modules + install -d $(pkgdir)/lib/modules/$(abi_release)-$*/initrd + if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko ]; then\ + ln -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko \ + $(pkgdir)/lib/modules/$(abi_release)-$*/initrd/; \ + fi + + # Now the image scripts + install -d $(pkgdir)/DEBIAN + for script in postinst postrm preinst prerm; do \ + sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \ + -e 's/=L/$(loader)/g' -e 's@=B@$(build_arch)@g' \ + $(DROOT)/control-scripts/$$script > $(pkgdir)/DEBIAN/$$script; \ + chmod 755 $(pkgdir)/DEBIAN/$$script; \ + done + + # Install the full changelog. +ifeq ($(do_doc_package),true) + install -d $(bindoc) + cat $(DEBIAN)/changelog $(DEBIAN)/changelog.historical | \ + gzip -9 >$(bindoc)/changelog.Debian.old.gz + chmod 644 $(bindoc)/changelog.Debian.old.gz +endif + +ifneq ($(skipsub),true) + for sub in $($(*)_sub); do \ + if ! (TO=$$sub FROM=$* ABI_RELEASE=$(abi_release) $(SHELL) \ + $(DROOT)/scripts/sub-flavour); then exit 1; fi; \ + /sbin/depmod -b debian/$(bin_pkg_name)-$$sub \ + -ea -F debian/$(bin_pkg_name)-$$sub/boot/System.map-$(abi_release)-$* \ + $(abi_release)-$*; \ + install -d debian/$(bin_pkg_name)-$$sub/DEBIAN; \ + for script in postinst postrm preinst prerm; do \ + sed -e 's/=V/$(abi_release)-$*/g' \ + -e 's/=K/$(install_file)/g' \ + -e 's/=L/$(loader)/g' \ + -e 's@=B@$(build_arch)@g' \ + $(DROOT)/control-scripts/$$script > \ + debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\ + chmod 755 debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\ + done; \ + done +endif + +ifneq ($(skipdbg),true) + # Debug image is simple + install -m644 -D $(builddir)/build-$*/vmlinux \ + $(dbgpkgdir)/usr/lib/debug/boot/vmlinux-$(abi_release)-$* + $(build_cd) $(kmake) $(build_O) modules_install \ + INSTALL_MOD_PATH=$(dbgpkgdir)/usr/lib/debug + rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/build + rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/source + rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/modules.* + rm -fr $(dbgpkgdir)/usr/lib/debug/lib/firmware +endif + + # The flavour specific headers image + # TODO: Would be nice if we didn't have to dupe the original builddir + install -d -m755 $(hdrdir) + cat $(builddir)/build-$*/.config | \ + sed -e 's/.*CONFIG_DEBUG_INFO=.*/# CONFIG_DEBUG_INFO is not set/g' > \ + $(hdrdir)/.config + chmod 644 $(hdrdir)/.config + $(kmake) O=$(hdrdir) silentoldconfig prepare scripts + # We'll symlink this stuff + rm -f $(hdrdir)/Makefile + rm -rf $(hdrdir)/include2 + # powerpc seems to need some .o files for external module linking. Add them in. +ifeq ($(arch),powerpc) + mkdir -p $(hdrdir)/arch/powerpc/lib + cp $(builddir)/build-$*/arch/powerpc/lib/*.o $(hdrdir)/arch/powerpc/lib +endif + # Script to symlink everything up + $(SHELL) $(DROOT)/scripts/link-headers "$(hdrdir)" "$(basepkg)" "$*" + # Setup the proper asm symlink + rm -f $(hdrdir)/include/asm + ln -s asm-$(asm_link) $(hdrdir)/include/asm + # The build symlink + install -d debian/$(basepkg)-$*/lib/modules/$(abi_release)-$* + ln -s /usr/src/$(basepkg)-$* \ + debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*/build + # And finally the symvers + install -m644 $(builddir)/build-$*/Module.symvers \ + $(hdrdir)/Module.symvers + + # Now the header scripts + install -d $(CURDIR)/debian/$(basepkg)-$*/DEBIAN + for script in postinst; do \ + sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \ + $(DROOT)/control-scripts/headers-$$script > \ + $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \ + chmod 755 $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \ + done + + # At the end of the package prep, call the tests + DPKG_ARCH="$(arch)" KERN_ARCH="$(build_arch)" FLAVOUR="$*" \ + VERSION="$(abi_release)" REVISION="$(revision)" \ + PREV_REVISION="$(prev_revision)" ABI_NUM="$(abinum)" \ + PREV_ABI_NUM="$(prev_abinum)" BUILD_DIR="$(builddir)/build-$*" \ + INSTALL_DIR="$(pkgdir)" SOURCE_DIR="$(CURDIR)" \ + run-parts -v $(DROOT)/tests + + # + # Remove files which are generated at installation by postinst, + # except for modules.order and modules.builtin + # + mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_ + mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.order \ + $(pkgdir)/lib/modules/$(abi_release)-$*/_ + if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin ] ; then \ + mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin \ + $(pkgdir)/lib/modules/$(abi_release)-$*/_; \ + fi + rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.* + mv $(pkgdir)/lib/modules/$(abi_release)-$*/_/* \ + $(pkgdir)/lib/modules/$(abi_release)-$* + rmdir $(pkgdir)/lib/modules/$(abi_release)-$*/_ + +headers_tmp := $(CURDIR)/debian/tmp-headers +headers_dir := $(CURDIR)/debian/linux-libc-dev + +hmake := $(MAKE) -C $(CURDIR) O=$(headers_tmp) SUBLEVEL=$(SUBLEVEL) \ + EXTRAVERSION=-$(abinum) INSTALL_HDR_PATH=$(headers_tmp)/install \ + SHELL="$(SHELL)" ARCH=$(header_arch) + +install-arch-headers: + dh_testdir + dh_testroot + dh_clean -k -plinux-libc-dev + + rm -rf $(headers_tmp) + install -d $(headers_tmp) $(headers_dir)/usr/include/ + + $(hmake) $(defconfig) + mv $(headers_tmp)/.config $(headers_tmp)/.config.old + sed -e 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \ + -e 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/' \ + $(headers_tmp)/.config.old > $(headers_tmp)/.config + $(hmake) silentoldconfig + $(hmake) headers_install + + ( cd $(headers_tmp)/install/include/ && \ + find . -name '.' -o -name '.*' -prune -o -print | \ + cpio -pvd --preserve-modification-time \ + $(headers_dir)/usr/include/ ) + + rm -rf $(headers_tmp) + +binary-arch-headers: install-arch-headers + dh_testdir + dh_testroot +ifeq ($(do_libc_dev_package),true) + dh_installchangelogs -plinux-libc-dev + dh_installdocs -plinux-libc-dev + dh_compress -plinux-libc-dev + dh_fixperms -plinux-libc-dev + dh_installdeb -plinux-libc-dev + dh_gencontrol -plinux-libc-dev + dh_md5sums -plinux-libc-dev + dh_builddeb -plinux-libc-dev +endif + +binary-%: pkgimg = $(bin_pkg_name)-$* +binary-%: pkghdr = $(hdrs_pkg_name)-$* +binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym +binary-%: install-% + dh_testdir + dh_testroot + + dh_installchangelogs -p$(pkgimg) + dh_installdocs -p$(pkgimg) + dh_compress -p$(pkgimg) + dh_fixperms -p$(pkgimg) + dh_installdeb -p$(pkgimg) + dh_shlibdeps -p$(pkgimg) + dh_gencontrol -p$(pkgimg) + dh_md5sums -p$(pkgimg) + dh_builddeb -p$(pkgimg) -- -Zbzip2 -z9 + + dh_installchangelogs -p$(pkghdr) + dh_installdocs -p$(pkghdr) + dh_compress -p$(pkghdr) + dh_fixperms -p$(pkghdr) + dh_shlibdeps -p$(pkghdr) + dh_installdeb -p$(pkghdr) + dh_gencontrol -p$(pkghdr) + dh_md5sums -p$(pkghdr) + dh_builddeb -p$(pkghdr) + +ifneq ($(skipsub),true) + @set -e; for sub in $($(*)_sub); do \ + pkg=$(bin_pkg_name)-$$sub; \ + dh_installchangelogs -p$$pkg; \ + dh_installdocs -p$$pkg; \ + dh_compress -p$$pkg; \ + dh_fixperms -p$$pkg; \ + dh_shlibdeps -p$$pkg; \ + dh_installdeb -p$$pkg; \ + dh_gencontrol -p$$pkg; \ + dh_md5sums -p$$pkg; \ + dh_builddeb -p$$pkg; \ + done +endif + +ifneq ($(skipdbg),true) + dh_installchangelogs -p$(dbgpkg) + dh_installdocs -p$(dbgpkg) + dh_compress -p$(dbgpkg) + dh_fixperms -p$(dbgpkg) + dh_installdeb -p$(dbgpkg) + dh_gencontrol -p$(dbgpkg) + dh_md5sums -p$(dbgpkg) + dh_builddeb -p$(dbgpkg) + + # Hokay...here's where we do a little twiddling... + # Renaming the debug package prevents it from getting into + # the primary archive, and therefore prevents this very large + # package from being mirrored. It is instead, through some + # archive admin hackery, copied to http://ddebs.ubuntu.com. + # + mv ../$(dbgpkg)_$(release)-$(revision)_$(arch).deb \ + ../$(dbgpkg)_$(release)-$(revision)_$(arch).ddeb + set -e; \ + if grep -qs '^Build-Debug-Symbols: yes$$' /CurrentlyBuilding; then \ + sed -i '/^$(dbgpkg)_/s/\.deb /.ddeb /' debian/files; \ + else \ + grep -v '^$(dbgpkg)_.*$$' debian/files > debian/files.new; \ + mv debian/files.new debian/files; \ + fi + # Now, the package wont get into the archive, but it will get put + # into the debug system. +endif + +$(stampdir)/stamp-flavours: + @echo $(flavours) > $@ + +# +# per-architecture packages +# +$(stampdir)/stamp-prepare-perarch: + @echo "Preparing perarch ..." +ifeq ($(do_tools),true) + install -d $(builddir)/tools-$* + for i in *; do ln -s $(CURDIR)/$$i $(builddir)/tools-$*/; done + rm $(builddir)/tools-$*/tools + rsync -a tools/ $(builddir)/tools-$*/tools/ +endif + touch $@ + +$(stampdir)/stamp-build-perarch: prepare-perarch +ifeq ($(do_tools),true) + cd $(builddir)/tools-$*/tools/perf && make +endif + @touch $@ + +install-perarch: toolspkgdir = $(CURDIR)/debian/$(tools_pkg_name) +install-perarch: $(stampdir)/stamp-build-perarch + # Add the tools. +ifeq ($(do_tools),true) + install -d $(toolspkgdir)/usr/bin + install -s -m755 $(builddir)/tools-$*/tools/perf/perf \ + $(toolspkgdir)/usr/bin/perf_$(abi_release) +endif + +binary-perarch: toolspkg = $(tools_pkg_name) +binary-perarch: install-perarch + @# Empty for make to be happy +ifeq ($(do_tools),true) + dh_installchangelogs -p$(toolspkg) + dh_installdocs -p$(toolspkg) + dh_compress -p$(toolspkg) + dh_fixperms -p$(toolspkg) + dh_shlibdeps -p$(toolspkg) + dh_installdeb -p$(toolspkg) + dh_gencontrol -p$(toolspkg) + dh_md5sums -p$(toolspkg) + dh_builddeb -p$(toolspkg) +endif + +binary-debs: binary-perarch $(stampdir)/stamp-flavours $(addprefix binary-,$(flavours)) + +build-arch: $(addprefix build-,$(flavours)) + +binary-arch-deps = binary-debs +ifeq ($(AUTOBUILD),) +binary-arch-deps += binary-udebs +endif +ifeq ($(do_libc_dev_package),true) +binary-arch-deps += binary-arch-headers +endif +ifneq ($(do_common_headers_indep),true) +binary-arch-deps += binary-headers +endif +binary-arch: $(binary-arch-deps) --- linux-2.6.32.orig/debian/rules.d/5-udebs.mk +++ linux-2.6.32/debian/rules.d/5-udebs.mk @@ -0,0 +1,38 @@ +# Do udebs if not disabled in the arch-specific makefile +binary-udebs: binary-debs debian/control +ifeq ($(disable_d_i),) + @$(MAKE) --no-print-directory -f $(DROOT)/rules DEBIAN=$(DEBIAN) \ + do-binary-udebs +endif + +do-binary-udebs: + dh_testdir + dh_testroot + + # unpack the kernels into a temporary directory + mkdir -p debian/d-i-${arch} + + imagelist=$$(cat $(builddir)/kernel-versions | grep ^${arch} | awk '{print $$4}') && \ + for i in $$imagelist; do \ + dpkg -x $$(ls ../linux-image-$$i\_$(release)-$(revision)_${arch}.deb) \ + debian/d-i-${arch}; \ + /sbin/depmod -b debian/d-i-${arch} $$i; \ + done + + # kernel-wedge will error if no modules unless this is touched + touch $(CURDIR)/debian/build/no-modules + + touch ignore-dups + export SOURCEDIR=$(CURDIR)/debian/d-i-${arch} && \ + cd $(builddir) && \ + kernel-wedge install-files && \ + kernel-wedge check + + # Build just the udebs + dilist=$$(dh_listpackages -s | grep "\-di$$") && \ + [ -z "$dilist" ] || \ + for i in $$dilist; do \ + dh_fixperms -p$$i; \ + dh_gencontrol -p$$i; \ + dh_builddeb -p$$i; \ + done --- linux-2.6.32.orig/debian/rules.d/1-maintainer.mk +++ linux-2.6.32/debian/rules.d/1-maintainer.mk @@ -0,0 +1,137 @@ +# The following targets are for the maintainer only! do not run if you don't +# know what they do. + +.PHONY: printenv updateconfigs printchanges insertchanges startnewrelease diffupstream help updateportsconfigs editportsconfigs + +help: + @echo "These are the targets in addition to the normal $(DEBIAN) ones:" + @echo + @echo " printenv : Print some variables used in the build" + @echo + @echo " updateconfigs : Update core arch configs" + @echo + @echo " editconfigs : Update core arch configs interractively" + @echo " genconfigs : Generate core arch configs in CONFIGS/*" + @echo + @echo " updateportsconfigs : Update ports arch configs" + @echo + @echo " editportsconfigs : Update ports arch configs interactivly" + @echo " genportconfigs : Generate ports arch configs in CONFIGS/*" + @echo + @echo " printchanges : Print the current changelog entries (from git)" + @echo + @echo " insertchanges : Insert current changelog entries (from git)" + @echo + @echo " startnewrelease : Start a new changelog set" + @echo + @echo " diffupstream : Diff stock kernel code against upstream (git)" + @echo + @echo " help : If you are kernel hacking, you need the professional" + @echo " version of this" + @echo + @echo "Environment variables:" + @echo + @echo " NOKERNLOG : Do not add upstream kernel commits to changelog" + @echo " CONCURRENCY_LEVEL=X" + @echo " : Use -jX for kernel compile" + @echo " PRINTSHAS : Include SHAs for commits in changelog" + +printdebian: + @echo "$(DEBIAN)" + +updateconfigs: + dh_testdir; + $(SHELL) $(DROOT)/scripts/misc/kernelconfig oldconfig + rm -rf build + +defaultconfigs: + dh_testdir; + yes "" | $(SHELL) $(DROOT)/scripts/misc/kernelconfig defaultconfig + rm -rf build + +editconfigs: + dh_testdir + $(SHELL) $(DROOT)/scripts/misc/kernelconfig editconfig + rm -rf build + +genconfigs: + dh_testdir + $(SHELL) $(DROOT)/scripts/misc/kernelconfig genconfig + rm -rf build + +updateportsconfigs: + dh_testdir; + $(SHELL) $(DROOT)/scripts/misc/kernelconfig oldconfig ports + rm -rf build + +editportsconfigs: + dh_testdir + $(SHELL) $(DROOT)/scripts/misc/kernelconfig editconfig ports + rm -rf build + +genportsconfigs: + dh_testdir + $(SHELL) $(DROOT)/scripts/misc/kernelconfig genconfig ports + rm -rf build + +printenv: + dh_testdir + @echo "src package name = $(src_pkg_name)" + @echo "release = $(release)" + @echo "revisions = $(revisions)" + @echo "revision = $(revision)" + @echo "uploadnum = $(uploadnum)" + @echo "prev_revisions = $(prev_revisions)" + @echo "prev_revision = $(prev_revision)" + @echo "abinum = $(abinum)" + @echo "gitver = $(gitver)" + @echo "flavours = $(flavours)" + @echo "skipabi = $(skipabi)" + @echo "skipmodule = $(skipmodule)" + @echo "skipdbg = $(skipdbg)" + @echo "ubuntu_log_opts = $(ubuntu_log_opts)" +ifneq ($(SUBLEVEL),) + @echo "SUBLEVEL = $(SUBLEVEL)" +endif + @echo "CONCURRENCY_LEVEL = $(CONCURRENCY_LEVEL)" + @echo "bin package name = $(bin_pkg_name)" + @echo "hdr package name = $(hdrs_pkg_name)" + @echo "doc package name = $(doc_pkg_name)" + @echo "do_doc_package = $(do_doc_package)" + @echo "do_doc_package_content = $(do_doc_package_content)" + @echo "do_source_package = $(do_source_package)" + @echo "do_source_package_content = $(do_source_package_content)" + @echo "do_libc_dev_package = $(do_libc_dev_package)" + @echo "do_common_headers_indep = $(do_common_headers_indep)" + @echo "do_full_source = $(do_full_source)" + @echo "do_tools = $(do_tools)" + +printchanges: + @baseCommit=$$(git log --pretty=format:'%H %s' | \ + awk '/UBUNTU: '".*Ubuntu-$(release)-$(prev_revision)"'$$/ { print $$1; exit }'); \ + git log "$$baseCommit"..HEAD | \ + perl -w -f $(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts) + +insertchanges: + @perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) + +diffupstream: + @git diff-tree -p refs/remotes/linux-2.6/master..HEAD $(shell ls | grep -vE '^(ubuntu|$(DEBIAN)|\.git.*)') + +startnewrelease: + dh_testdir + @nextminor=$(shell expr `echo $(revision) | awk -F. '{print $$2}'` + 1); \ + now="$(shell date -R)"; \ + echo "Creating new changelog set for $(abi_release).$$nextminor..."; \ + echo -e "$(src_pkg_name) ($(abi_release).$$nextminor) UNRELEASED; urgency=low\n" > $(DEBIAN)/changelog.new; \ + echo " CHANGELOG: Do not edit directly. Autogenerated at release." >> \ + $(DEBIAN)/changelog.new; \ + echo " CHANGELOG: Use the printchanges target to see the curent changes." \ + >> $(DEBIAN)/changelog.new; \ + echo " CHANGELOG: Use the insertchanges target to create the final log." \ + >> $(DEBIAN)/changelog.new; \ + echo -e "\n -- $$DEBFULLNAME <$$DEBEMAIL> $$now\n" >> \ + $(DEBIAN)/changelog.new ; \ + cat $(DEBIAN)/changelog >> $(DEBIAN)/changelog.new; \ + mv $(DEBIAN)/changelog.new $(DEBIAN)/changelog + --- linux-2.6.32.orig/debian/rules.d/0-common-vars.mk +++ linux-2.6.32/debian/rules.d/0-common-vars.mk @@ -0,0 +1,182 @@ +# +# The source package name will be the first token from $(DEBIAN)/changelog +# +src_pkg_name=$(shell sed -n '1s/^\(.*\) (.*).*$$/\1/p' $(DEBIAN)/changelog) + +# Get some version info +series := lucid +release := $(shell sed -n '1s/^$(src_pkg_name).*(\(.*\)-.*).*$$/\1/p' $(DEBIAN)/changelog) +revisions := $(shell sed -n 's/^$(src_pkg_name)\ .*($(release)-\(.*\)).*$$/\1/p' $(DEBIAN)/changelog | tac) +revision ?= $(word $(words $(revisions)),$(revisions)) +prev_revisions := $(filter-out $(revision),0.0 $(revisions)) +prev_revision := $(word $(words $(prev_revisions)),$(prev_revisions)) + +family=ubuntu + +# This is an internally used mechanism for the daily kernel builds. It +# creates packages whose ABI is suffixed with a minimal representation of +# the current git HEAD sha. If .git/HEAD is not present, then it uses the +# uuidgen program, +# +# AUTOBUILD can also be used by anyone wanting to build a custom kernel +# image, or rebuild the entire set of Ubuntu packages using custom patches +# or configs. +AUTOBUILD= + +# +# This is a way to support some external variables. A good example is +# a local setup for ccache and distcc See LOCAL_ENV_CC and +# LOCAL_ENV_DISTCC_HOSTS in the definition of kmake. +# For example: +# LOCAL_ENV_CC="ccache distcc" +# LOCAL_ENV_DISTCC_HOSTS="localhost 10.0.2.5 10.0.2.221" +# +-include $(CURDIR)/../.$(series)-env + +ifneq ($(AUTOBUILD),) +skipabi = true +skipmodule = true +skipdbg = true +gitver=$(shell if test -f .git/HEAD; then cat .git/HEAD; else uuidgen; fi) +gitverpre=$(shell echo $(gitver) | cut -b -3) +gitverpost=$(shell echo $(gitver) | cut -b 38-40) +abi_suffix = -$(gitverpre)$(gitverpost) +endif + +ifneq ($(NOKERNLOG),) +ubuntu_log_opts += --no-kern-log +endif +ifneq ($(PRINTSHAS),) +ubuntu_log_opts += --print-shas +endif + +# Get the kernels own extra version to be added to the release signature. +extraversion=$(shell awk '/EXTRAVERSION =/ { print $$3 }' in DEB_BUILD_OPTIONS (see #209008) +# +# These 2 environment variables set the -j value of the kernel build. For example, +# CONCURRENCY_LEVEL=16 fakeroot $(DEBIAN)/rules binary-debs +# or +# DEB_BUILD_OPTIONS=parallel=16 fakeroot $(DEBIAN)/rules binary-debs +# +# The default is to use the number of CPUs. +# +COMMA=, +DEB_BUILD_OPTIONS_PARA = $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) +ifneq (,$(DEB_BUILD_OPTIONS_PARA)) + CONCURRENCY_LEVEL := $(DEB_BUILD_OPTIONS_PARA) +endif + +ifeq ($(CONCURRENCY_LEVEL),) + # Check the environment + CONCURRENCY_LEVEL := $(shell echo $$CONCURRENCY_LEVEL) + # No? Then build with the number of CPUs on the host. + ifeq ($(CONCURRENCY_LEVEL),) + CONCURRENCY_LEVEL := $(shell expr `getconf _NPROCESSORS_ONLN` \* 1) + endif + # Oh hell, give 'em one + ifeq ($(CONCURRENCY_LEVEL),) + CONCURRENCY_LEVEL := 1 + endif +endif + +conc_level = -j$(CONCURRENCY_LEVEL) + +# target_flavour is filled in for each step +kmake = make ARCH=$(build_arch) \ + EXTRAVERSION=-$(abinum)-$(target_flavour) \ + CONFIG_DEBUG_SECTION_MISMATCH=y SUBLEVEL=$(SUBLEVEL) \ + KBUILD_BUILD_VERSION="$(uploadnum)" \ + LOCALVERSION= +ifneq ($(LOCAL_ENV_CC),) +kmake += CC=$(LOCAL_ENV_CC) DISTCC_HOSTS=$(LOCAL_ENV_DISTCC_HOSTS) +endif --- linux-2.6.32.orig/debian/scripts/sub-flavour +++ linux-2.6.32/debian/scripts/sub-flavour @@ -0,0 +1,67 @@ +#!/bin/bash + +. debian/debian.env + +echo "SUB_PROCESS $FROM => $TO" + +export from_pkg="linux-image-$ABI_RELEASE-$FROM" +export to_pkg="linux-image-$ABI_RELEASE-$TO" + +from_moddir="debian/$from_pkg/lib/modules/$ABI_RELEASE-$FROM" +to_moddir="debian/$to_pkg/lib/modules/$ABI_RELEASE-$FROM" + +install -d "debian/$to_pkg/boot" +install -m644 debian/$from_pkg/boot/{vmlinuz,System.map,config}-$ABI_RELEASE-$FROM \ + debian/$to_pkg/boot/ + +# +# Print some warnings if there are files in the sub-flavours list +# that do not actually exist. +# +cat ${DEBIAN}/sub-flavours/$TO.list | while read line +do +( + cd debian/$from_pkg/lib/modules/$ABI_RELEASE-$FROM/kernel; + # + # If its a wildcard, then check that there are files that match. + # + if echo "$line" | grep '\*' > /dev/null + then + if [ `eval find "$line" -name '*.ko' 2>/dev/null|wc -l` -lt 1 ] + then + echo SUB_INST Warning - No files in $line + fi + # + # Else it should be a single file reference. + # + elif [ ! -f "$line" ] + then + echo SUB_INST Warning - could not find "$line" + fi +) +done + +cat ${DEBIAN}/sub-flavours/$TO.list | while read line; do + ( + cd debian/$from_pkg/lib/modules/$ABI_RELEASE-$FROM/kernel; + if echo "$line" | grep '\*' > /dev/null + then + eval find "$line" -name '*.ko' 2>/dev/null || true + elif [ -f "$line" ] + then + echo "$line" + fi + ); +done | while read mod; do + echo "SUB_INST checking: $mod" + fromdir="/lib/modules/$ABI_RELEASE-$FROM/" + egrep "^($fromdir)?kernel/$mod:" \ + $from_moddir/modules.dep | sed -e "s|^$fromdir||" -e 's/://' -e 's/ /\n/g' | \ + while read m; do + m="${fromdir}$m" + test -f debian/$to_pkg/$m && continue + echo "SUB_INST installing: $m" + install -D -m644 debian/$from_pkg/$m \ + debian/$to_pkg/$m + done +done --- linux-2.6.32.orig/debian/scripts/abi-check +++ linux-2.6.32/debian/scripts/abi-check @@ -0,0 +1,210 @@ +#!/usr/bin/perl -w + +my $flavour = shift; +my $prev_abinum = shift; +my $abinum = shift; +my $prev_abidir = shift; +my $abidir = shift; +my $skipabi = shift; + +my $fail_exit = 1; +my $EE = "EE:"; +my $errors = 0; +my $abiskip = 0; + +my $count; + +print "II: Checking ABI for $flavour...\n"; + +if (-f "$prev_abidir/ignore" + or -f "$prev_abidir/$flavour.ignore" or "$skipabi" eq "true") { + print "WW: Explicitly asked to ignore ABI, running in no-fail mode\n"; + $fail_exit = 0; + $abiskip = 1; + $EE = "WW:"; +} + +if ($prev_abinum != $abinum) { + print "II: Different ABI's, running in no-fail mode\n"; + $fail_exit = 0; + $EE = "WW:"; +} + +if (not -f "$abidir/$flavour" or not -f "$prev_abidir/$flavour") { + print "EE: Previous or current ABI file missing!\n"; + print " $abidir/$flavour\n" if not -f "$abidir/$flavour"; + print " $prev_abidir/$flavour\n" if not -f "$prev_abidir/$flavour"; + + # Exit if the ABI files are missing, but return status based on whether + # skip ABI was indicated. + if ("$abiskip" eq "1") { + exit(0); + } else { + exit(1); + } +} + +my %symbols; +my %symbols_ignore; +my %modules_ignore; +my %module_syms; + +# See if we have any ignores +my $ignore = 0; +print " Reading symbols/modules to ignore..."; + +for $file ("$prev_abidir/../blacklist", "$prev_abidir/../../perm-blacklist") { + if (-f $file) { + open(IGNORE, "< $file") or + die "Could not open $file"; + while () { + chomp; + if ($_ =~ m/M: (.*)/) { + $modules_ignore{$1} = 1; + } else { + $symbols_ignore{$_} = 1; + } + $ignore++; + } + close(IGNORE); + } +} +print "read $ignore symbols/modules.\n"; + +sub is_ignored($$) { + my ($mod, $sym) = @_; + + die "Missing module name in is_ignored()" if not defined($mod); + die "Missing symbol name in is_ignored()" if not defined($sym); + + if (defined($symbols_ignore{$sym}) or defined($modules_ignore{$mod})) { + return 1; + } + return 0; +} + +# Read new syms first +print " Reading new symbols ($abinum)..."; +$count = 0; +open(NEW, "< $abidir/$flavour") or + die "Could not open $abidir/$flavour"; +while () { + chomp; + m/^(\S+)\s(.+)\s(0x[0-9a-f]+)\s(.+)$/; + $symbols{$4}{'type'} = $1; + $symbols{$4}{'loc'} = $2; + $symbols{$4}{'hash'} = $3; + $module_syms{$2} = 0; + $count++; +} +close(NEW); +print "read $count symbols.\n"; + +# Now the old symbols, checking for missing ones +print " Reading old symbols ($prev_abinum)..."; +$count = 0; +open(OLD, "< $prev_abidir/$flavour") or + die "Could not open $prev_abidir/$flavour"; +while () { + chomp; + m/^(\S+)\s(.+)\s(0x[0-9a-f]+)\s(.+)$/; + $symbols{$4}{'old_type'} = $1; + $symbols{$4}{'old_loc'} = $2; + $symbols{$4}{'old_hash'} = $3; + $count++; +} +close(OLD); + +print "read $count symbols.\n"; + +print "II: Checking for missing symbols in new ABI..."; +$count = 0; +foreach $sym (keys(%symbols)) { + if (!defined($symbols{$sym}{'type'})) { + print "\n" if not $count; + printf(" MISS : %s%s\n", $sym, + is_ignored($symbols{$sym}{'old_loc'}, $sym) ? " (ignored)" : ""); + $count++ if !is_ignored($symbols{$sym}{'old_loc'}, $sym); + } +} +print " " if $count; +print "found $count missing symbols\n"; +if ($count) { + print "$EE Symbols gone missing (what did you do!?!)\n"; + $errors++; +} + + +print "II: Checking for new symbols in new ABI..."; +$count = 0; +foreach $sym (keys(%symbols)) { + if (!defined($symbols{$sym}{'old_type'})) { + print "\n" if not $count; + print " NEW : $sym\n"; + $count++; + } +} +print " " if $count; +print "found $count new symbols\n"; +if ($count and $prev_abinum == $abinum) { + print "WW: Found new symbols within same ABI. Not recommended\n"; +} + +print "II: Checking for changes to ABI...\n"; +$count = 0; +my $moved = 0; +my $changed_type = 0; +my $changed_hash = 0; +foreach $sym (keys(%symbols)) { + if (!defined($symbols{$sym}{'old_type'}) or + !defined($symbols{$sym}{'type'})) { + next; + } + + # Changes in location don't hurt us, but log it anyway + if ($symbols{$sym}{'loc'} ne $symbols{$sym}{'old_loc'}) { + printf(" MOVE : %-40s : %s => %s\n", $sym, $symbols{$sym}{'old_loc'}, + $symbols{$sym}{'loc'}); + $moved++; + } + + # Changes to export type are only bad if new type isn't + # EXPORT_SYMBOL. Changing things to GPL are bad. + if ($symbols{$sym}{'type'} ne $symbols{$sym}{'old_type'}) { + printf(" TYPE : %-40s : %s => %s%s\n", $sym, $symbols{$sym}{'old_type'}. + $symbols{$sym}{'type'}, is_ignored($symbols{$sym}{'loc'}, $sym) + ? " (ignored)" : ""); + $changed_type++ if $symbols{$sym}{'type'} ne "EXPORT_SYMBOL" + and !is_ignored($symbols{$sym}{'loc'}, $sym); + } + + # Changes to the hash are always bad + if ($symbols{$sym}{'hash'} ne $symbols{$sym}{'old_hash'}) { + printf(" HASH : %-40s : %s => %s%s\n", $sym, $symbols{$sym}{'old_hash'}, + $symbols{$sym}{'hash'}, is_ignored($symbols{$sym}{'loc'}, $sym) + ? " (ignored)" : ""); + $changed_hash++ if !is_ignored($symbols{$sym}{'loc'}, $sym); + $module_syms{$symbols{$sym}{'loc'}}++; + } +} + +print "WW: $moved symbols changed location\n" if $moved; +print "$EE $changed_type symbols changed export type and weren't ignored\n" if $changed_type; +print "$EE $changed_hash symbols changed hash and weren't ignored\n" if $changed_hash; + +$errors++ if $changed_hash or $changed_type; +if ($changed_hash) { + print "II: Module hash change summary...\n"; + foreach $mod (sort { $module_syms{$b} <=> $module_syms{$a} } keys %module_syms) { + next if ! $module_syms{$mod}; + printf(" %-40s: %d\n", $mod, $module_syms{$mod}); + } +} + +print "II: Done\n"; + +if ($errors) { + exit($fail_exit); +} else { + exit(0); +} --- linux-2.6.32.orig/debian/scripts/link-headers +++ linux-2.6.32/debian/scripts/link-headers @@ -0,0 +1,42 @@ +#!/bin/bash -e + +. debian/debian.env + +hdrdir="$1" +symdir="$2" +flavour="$3" + +echo "Symlinking and copying headers for $flavour..." + +excludes="( -path ./debian -prune -o -path ./${DEBIAN} -prune -o -path ./.git ) -prune -o" + +( +find . $excludes -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) -print +find ./include ./scripts -name .gitignore -prune -o -type f -print +find ./include -mindepth 1 -maxdepth 1 $excludes -type d -print +) | ( +while read file; do + dir=$file + lastdir=$file + + if [ -e "$hdrdir/$file" -o -L "$hdrdir/$file" ]; then + continue + fi + + while [ ! -e "$hdrdir/$dir" -a ! -L "$hdrdir/$dir" ]; do + lastdir=$dir + dir=`dirname $dir` + done + # If the last item to exist is a symlink we assume all is good + if [ ! -L "$hdrdir/$dir" ]; then + # Turns things like "./foo" into "../" + deref="`echo -n $lastdir | sed -e 's/^\.//' -e's,/[^/]*,../,g'`" + item="`echo -n $lastdir | sed -e 's/^\.\///'`" + ln -s $deref$symdir/$item $hdrdir/$item + fi +done +) + +exit --- linux-2.6.32.orig/debian/scripts/config-check +++ linux-2.6.32/debian/scripts/config-check @@ -0,0 +1,389 @@ +#!/usr/bin/perl +# +# check-config -- check the current config for issues +# +use strict; + +my $P = 'check-config'; + +my $test = -1; +if ($ARGV[0] eq '--test') { + $test = $ARGV[1] + 0; +} elsif ($#ARGV != 4) { + die "Usage: $P \n"; +} + +my ($config, $arch, $flavour, $commonconfig, $warn_only) = @ARGV; + +my $checks = "$commonconfig/enforce"; +my %values = (); + +# If we are in overridden then still perform the checks and emit the messages +# but do not return failure. Those items marked FATAL will alway trigger +# failure. +my $fail_exit = 1; +$fail_exit = 0 if ($warn_only eq 'true' || $warn_only eq '1'); +my $exit_val = 0; + +# Predicate execution engine. +sub pred_first { + my ($rest) = @_; + my $depth = 0; + my $off; + my $char; + my $pred; + + for ($off = 0; $off <= length($rest); $off++) { + $char = substr($rest, $off, 1); + if ($char eq '(') { + $depth++; + } elsif ($char eq ')') { + $depth--; + } elsif ($depth == 0 && $char eq '&') { + last; + } elsif ($depth == 0 && $char eq '|') { + last; + } + } + if ($depth > 0) { + die "$P: $rest: missing close parenthesis ')'\n"; + } elsif ($depth < 0) { + die "$P: $rest: missing open parenthesis '('\n"; + } + + ($pred, $rest) = (substr($rest, 0, $off), substr($rest, $off + 1)); + + $pred =~ s/^\s*//; + $pred =~ s/\s*$//; + + #print "pred<$pred> rest<$rest> char<$char>\n"; + ($pred, $rest, $char); +} + +sub pred_do { + my ($pred) = @_; + my (@a) = split(' ', $pred); + + if ($a[0] eq 'arch') { + die "$P: $pred: malformed -- $pred \n" if ($#a != 1); + #print " *** ARCH<$arch ?? $a[1]>\n"; + return ($arch eq $a[1]) + } elsif ($a[0] eq 'flavour') { + die "$P: $pred: malformed -- $pred \n" if ($#a != 1); + #print " *** FLAVOUR<$flavour ?? $a[1]>\n"; + return ($flavour eq $a[1]) + } elsif ($a[0] eq 'value') { + die "$P: $pred: malformed -- $pred \n" if ($#a != 2); + #print " *** CHECK<$a[1] $a[2] ?? " . $values{$a[1]} . ">\n"; + return ($values{$a[1]} eq $a[2]); + } elsif ($a[0] eq 'exists') { + die "$P: $pred: malformed -- $pred \n" if ($#a != 1); + return (defined $values{$a[1]}); + } else { + die "$P: $pred: unknown predicate\n"; + } + return 1; +} +sub pred_exec { + my ($rest) = @_; + my $pred; + my $res; + my $sep; + + #print "pred_exec<$rest>\n"; + + ($pred, $rest, $sep) = pred_first($rest); + + # Leading ! implies inversion. + if ($pred =~ /^\s*!\s*(.*)$/) { + #print " invert<$1>\n"; + $res = !pred_exec($1); + + # Recurse left for complex expressions. + } elsif ($pred =~ /^\s*\((.*)\)\s*$/) { + #print " left<$1>\n"; + $res = pred_exec($1); + + # Check for common syntax issues. + } elsif ($pred eq '') { + if ($sep eq '&' || $sep eq '|') { + die "$P: $pred$rest: malformed binary operator\n"; + } else { + die "$P: $pred$rest: syntax error\n"; + } + + # A predicate, execute it. + } else { + #print " DO<$pred> sep<$sep>\n"; + $res = pred_do($pred); + } + + #print " pre-return res<$res> sep<$sep>\n"; + if ($sep eq '') { + # + + # Recurse right for binary operators -- note these are lazy. + } elsif ($sep eq '&' || $sep eq '|') { + #print " right<$rest> ? sep<$sep> res<$res>\n"; + if ($rest =~ /^\s*($|\||\&)/) { + die "$P: $pred$rest: malformed binary operator\n"; + } + if (($res && $sep eq '&') || (!$res && $sep eq '|')) { + #print " right<$rest>\n"; + $res = pred_exec($rest); + } + + } else { + die "$P: $pred$rest: malformed predicate\n"; + } + #print " return res<$res> sep<$sep>\n"; + return $res; +} + +# +# PREDICATE TESTS +# +my $test_total = 1; +my $test_good = 0; +sub pred_test { + my ($pred, $eres, $eerr) = @_; + my ($res, $err, $fail); + + $test_total++; + if ($test != 0 && $test != $test_total - 1) { + return; + } + + eval { + $res = pred_exec($pred); + }; + $err = $@; + chomp($err); + + $res = !!$res; + $eres = !!$eres; + + $fail = ''; + if (defined $eres && $res != $eres) { + $fail = "result missmatch, expected $eres returned $res"; + } + if (defined $eerr && $err eq '') { + $fail = "error missmatch, expected '$eerr' returned success"; + } elsif (defined $eerr && $err !~ /$eerr/) { + $fail = "error missmatch, expected '$eerr' returned '$err'"; + } elsif (!defined $eerr && $err ne '') { + $fail = "error missmatch, expected success returned '$err'"; + } + + if ($fail eq '') { + $test_good++; + } else { + print "$pred: $test_total: FAIL: $fail\n"; + } + #print "TEST<$pred> eres<$eres> eerr<$eerr> res<$res> err<$err>\n"; +} +if ($test >= 0) { + $arch = 'MYARCH'; + $flavour = 'MYFLAVOUR'; + %values = ( 'ENABLED' => 'y', 'DISABLED' => 'n' ); + + # Errors. + my $eunkn = 'unknown predicate'; + my $epred = 'malformed'; + my $eclose = 'missing close parenthesis'; + my $eopen = 'missing open parenthesis'; + my $ebinary = 'malformed binary operator'; + + # Basic predicate tests. + print "TEST: $test_total: basic predicate tests ...\n"; + + pred_test('nosuchcommand', undef, $eunkn); + pred_test('arch', undef, $epred); + pred_test('arch MYARCH MYARCH', undef, $epred); + pred_test('arch MYARCH', 1, undef); + pred_test('arch NOTMYARCH', 0, undef); + + pred_test('flavour', undef, $epred); + pred_test('flavour MYFLAVOUR myflavour', undef, $epred); + pred_test('flavour MYFLAVOUR', 1, undef); + pred_test('flavour NOTMYFLAVOUR', 0, undef); + + pred_test('value', undef, $epred); + pred_test('value ENABLED', undef, $epred); + pred_test('value ENABLED ENABLED ENABLED', undef, $epred); + pred_test('value ENABLED y', 1, undef); + pred_test('value ENABLED n', 0, undef); + pred_test('value DISABLED n', 1, undef); + pred_test('value DISABLED y', 0, undef); + + pred_test('exists', undef, $epred); + pred_test('exists ENABLED ENABLED', undef, $epred); + pred_test('exists ENABLED', 1, undef); + pred_test('exists DISABLED', 1, undef); + pred_test('exists MISSING', 0, undef); + + print "TEST: $test_total: inversion tests ...\n"; + pred_test('!exists ENABLED', 0, undef); + pred_test('!exists MISSING', 1, undef); + pred_test('!!exists ENABLED', 1, undef); + pred_test('!!exists MISSING', 0, undef); + pred_test('!!!exists ENABLED', 0, undef); + pred_test('!!!exists MISSING', 1, undef); + + print "TEST: $test_total: parentheses tests ...\n"; + pred_test('(exists ENABLED)', 1, undef); + pred_test('((exists ENABLED))', 1, undef); + pred_test('(((exists ENABLED)))', 1, undef); + pred_test('(exists MISSING)', 0, undef); + pred_test('((exists MISSING))', 0, undef); + pred_test('(((exists MISSING)))', 0, undef); + + pred_test('(!exists ENABLED)', 0, undef); + pred_test('((!exists ENABLED))', 0, undef); + pred_test('(((!exists ENABLED)))', 0, undef); + pred_test('(!exists MISSING)', 1, undef); + pred_test('((!exists MISSING))', 1, undef); + pred_test('(((!exists MISSING)))', 1, undef); + + pred_test('((!(exists ENABLED)))', 0, undef); + pred_test('((!(exists MISSING)))', 1, undef); + pred_test('(!((exists ENABLED)))', 0, undef); + pred_test('(!((exists MISSING)))', 1, undef); + pred_test('!(((exists ENABLED)))', 0, undef); + pred_test('!(((exists MISSING)))', 1, undef); + pred_test('!((!(exists ENABLED)))', 1, undef); + pred_test('!((!(exists MISSING)))', 0, undef); + pred_test('!(!(!(exists ENABLED)))', 0, undef); + pred_test('!(!(!(exists MISSING)))', 1, undef); + + pred_test('(', undef, $eclose); + pred_test('()(', undef, $eclose); + pred_test('(())(', undef, $eclose); + pred_test('((()))(', undef, $eclose); + pred_test('(()', undef, $eclose); + pred_test('((())', undef, $eclose); + pred_test('(((()))', undef, $eclose); + pred_test('(()()', undef, $eclose); + pred_test('((())()', undef, $eclose); + + pred_test(')', undef, $eopen); + pred_test('())', undef, $eopen); + pred_test('(()))', undef, $eopen); + pred_test('((())))', undef, $eopen); + + print "TEST: $test_total: binary and tests ...\n"; + + pred_test('exists ENABLED &', undef, $ebinary); + pred_test('& exists ENABLED', undef, $ebinary); + pred_test('exists ENABLED & & exists ENABLED', undef, $ebinary); + + pred_test('exists MISSING & exists MISSING', 0, undef); + pred_test('exists MISSING & exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists MISSING', 0, undef); + pred_test('exists ENABLED & exists ENABLED', 1, undef); + + pred_test('exists MISSING & exists MISSING & exists MISSING', 0, undef); + pred_test('exists MISSING & exists MISSING & exists ENABLED', 0, undef); + pred_test('exists MISSING & exists ENABLED & exists MISSING', 0, undef); + pred_test('exists MISSING & exists ENABLED & exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists MISSING & exists MISSING', 0, undef); + pred_test('exists ENABLED & exists MISSING & exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists ENABLED & exists MISSING', 0, undef); + pred_test('exists ENABLED & exists ENABLED & exists ENABLED', 1, undef); + + print "TEST: $test_total: binary or tests ...\n"; + + pred_test('exists ENABLED |', undef, $ebinary); + pred_test('| exists ENABLED', undef, $ebinary); + pred_test('exists ENABLED | | exists ENABLED', undef, $ebinary); + + pred_test('exists MISSING | exists MISSING', 0, undef); + pred_test('exists MISSING | exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists MISSING', 1, undef); + pred_test('exists ENABLED | exists ENABLED', 1, undef); + + pred_test('exists MISSING | exists MISSING | exists MISSING', 0, undef); + pred_test('exists MISSING | exists MISSING | exists ENABLED', 1, undef); + pred_test('exists MISSING | exists ENABLED | exists MISSING', 1, undef); + pred_test('exists MISSING | exists ENABLED | exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists MISSING | exists MISSING', 1, undef); + pred_test('exists ENABLED | exists MISSING | exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists ENABLED | exists MISSING', 1, undef); + pred_test('exists ENABLED | exists ENABLED | exists ENABLED', 1, undef); + + print "TEST: $test_total: binary or/and combination tests ...\n"; + + pred_test('exists MISSING | exists MISSING & exists MISSING', 0, undef); + pred_test('exists MISSING | exists MISSING & exists ENABLED', 0, undef); + pred_test('exists MISSING | exists ENABLED & exists MISSING', 0, undef); + pred_test('exists MISSING | exists ENABLED & exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists MISSING & exists MISSING', 1, undef); + pred_test('exists ENABLED | exists MISSING & exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists ENABLED & exists MISSING', 1, undef); + pred_test('exists ENABLED | exists ENABLED & exists ENABLED', 1, undef); + + print "TEST: $test_total: binary and/or combination tests ...\n"; + + pred_test('exists MISSING & exists MISSING | exists MISSING', 0, undef); + pred_test('exists MISSING & exists MISSING | exists ENABLED', 0, undef); + pred_test('exists MISSING & exists ENABLED | exists MISSING', 0, undef); + pred_test('exists MISSING & exists ENABLED | exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists MISSING | exists MISSING', 0, undef); + pred_test('exists ENABLED & exists MISSING | exists ENABLED', 1, undef); + pred_test('exists ENABLED & exists ENABLED | exists MISSING', 1, undef); + pred_test('exists ENABLED & exists ENABLED | exists ENABLED', 1, undef); + + $test_total--; + print "TEST: $test_good/$test_total succeeded\n"; + + exit $exit_val; +} + +# Load up the current configuration values -- FATAL if this fails +print "$P: $config: loading config\n"; +open(CONFIG, "<$config") || die "$P: $config: open failed -- $! -- aborting\n"; +while () { + # Pull out values. + /^#*\s*(CONFIG_\w+)[\s=](.*)$/ or next; + if ($2 eq 'is not set') { + $values{$1} = 'n'; + } else { + $values{$1} = $2; + } +} +close(CONFIG); + +# FATAL: Check if we have an enforcement list. +my $pass = 0; +my $total = 0; +my $line = ''; +print "$P: $checks: loading checks\n"; +open(CHECKS, "<$checks") || die "$P: $checks: open failed -- $! -- aborting\n"; +while () { + /^#/ && next; + chomp; + + $line .= $_; + if ($line =~ /\\$/) { + chop($line); + $line .= " "; + next; + } + $line =~ /^\s*$/ && next; + + #print "CHECK: <$line>\n"; + $total++; + my $result = pred_exec($line); + if (!$result) { + print "$P: FAIL: $line\n"; + $exit_val = $fail_exit; + } else { + $pass++; + } + + $line = ''; +} +close(CHECKS); + +print "$P: $pass/$total checks passed -- exit $exit_val\n"; +exit $exit_val; --- linux-2.6.32.orig/debian/scripts/control-create +++ linux-2.6.32/debian/scripts/control-create @@ -0,0 +1,25 @@ +#!/bin/bash + +. debian/debian.env + +vars=$1 + +. $vars + +if [ "$is_sub" = "" ]; then + flavour=$(basename $vars | sed 's/.*\.//') + stub=${DEBIAN}/control.d/flavour-control.stub +else + flavour=$(basename $vars .vars) + stub=${DEBIAN}/sub-flavours/control.stub +fi + +cat $stub | grep -v '^#' | sed \ + -e "s#FLAVOUR#$flavour#g" \ + -e "s#DESC#$desc#g" \ + -e "s#ARCH#$arch#g" \ + -e "s#SUPPORTED#$supported#g" \ + -e "s#TARGET#$target#g" \ + -e "s#BOOTLOADER#$bootloader#g" \ + -e "s#=PROVIDES=#$provides#g" \ + -e "s#=CONFLICTS=#$conflicts#g" --- linux-2.6.32.orig/debian/scripts/module-check +++ linux-2.6.32/debian/scripts/module-check @@ -0,0 +1,120 @@ +#!/usr/bin/perl -w + +$flavour = shift; +$prev_abidir = shift; +$abidir = shift; +$skipmodule = shift; + +print "II: Checking modules for $flavour..."; + +if (-f "$prev_abidir/ignore.modules" + or -f "$prev_abidir/$flavour.ignore.modules") { + print "explicitly ignoring modules\n"; + exit(0); +} + +if (not -f "$abidir/$flavour.modules" or not -f + "$prev_abidir/$flavour.modules") { + print "previous or current modules file missing!\n"; + print " $abidir/$flavour.modules\n"; + print " $prev_abidir/$flavour.modules\n"; + if (defined($skipmodule)) { + exit(0); + } else { + exit(1); + } +} + +print "\n"; + +my %modules; +my %modules_ignore; +my $missing = 0; +my $new = 0; +my $errors = 0; + +# See if we have any ignores +if (-f "$prev_abidir/../modules.ignore") { + my $ignore = 0; + open(IGNORE, "< $prev_abidir/../modules.ignore") or + die "Could not open $prev_abidir/../modules.ignore"; + print " reading modules to ignore..."; + while () { + chomp; + next if /\s*#/; + $modules_ignore{$_} = 1; + $ignore++; + } + close(IGNORE); + print "read $ignore modules.\n"; +} + +# Read new modules first +print " reading new modules..."; +$new_count = 0; +open(NEW, "< $abidir/$flavour.modules") or + die "Could not open $abidir/$flavour.modules"; +while () { + chomp; + $modules{$_} = 1; + $new_count++; +} +close(NEW); +print "read $new_count modules.\n"; + +# Now the old modules, checking for missing ones +print " reading old modules..."; +$old_count = 0; +open(OLD, "< $prev_abidir/$flavour.modules") or + die "Could not open $prev_abidir/$flavour.modules"; +while () { + chomp; + if (not defined($modules{$_})) { + print "\n" if not $missing; + $missing++; + if (not defined($modules_ignore{$_})) { + print " MISS: $_\n"; + $errors++; + } else { + print " MISS: $_ (ignored)\n"; + } + } else { + $modules{$_}++; + } + $old_count++; +} +close(OLD); +# Check for new modules +foreach $mod (keys(%modules)) { + if ($modules{$mod} < 2) { + print "\n" if not $missing and not $new; + print " NEW : $mod\n"; + $new++; + } +} +if ($new or $missing) { + print " read $old_count modules : new($new) missing($missing)\n"; +} else { + print "read $old_count modules.\n"; +} + + +# Let's see where we stand... +if ($errors) { + if (defined($skipmodule)) { + print "WW: Explicitly asked to ignore failures (probably not good)\n"; + } else { + print "EE: Missing modules (start begging for mercy)\n"; + exit 1 + } +} + +if ($new) { + print "II: New modules (you've been busy, wipe the poop off your nose)\n"; +} else { + print "II: No new modules (hope you're happy, slacker)\n"; +} + +print "II: Done\n"; + +exit(0); --- linux-2.6.32.orig/debian/scripts/module-inclusion +++ linux-2.6.32/debian/scripts/module-inclusion @@ -0,0 +1,51 @@ +#!/bin/bash + +# +# Build a new directory of modules based on an inclusion list. +# The includsion list format must be a bash regular expression. +# +# usage: $0 ROOT INCLUSION_LIST +# example: $0 debian/build/build-virtual debian.master/control.d/virtual.inclusion-list +ROOT=$1 +ILIST=$2 + +NROOT=${ROOT}.new + +# +# Prep a destination directory. +# +mkdir -p ${NROOT} +rsync -a --exclude="*.ko" ${ROOT}/ ${NROOT} + +cat ${ILIST} |while read i +do + # + # 'find' blurts a warning if it cannot find any ko files. + # + if echo "$i" | grep '\*' > /dev/null + then + (cd ${ROOT}; eval find "${i}" -name "*.ko") |while read f + do + mkdir -p ${NROOT}/`dirname $f` + cp ${ROOT}/$f ${NROOT}/$f + done + else + if [ -f "${ROOT}/$i" ] + then + mkdir -p ${NROOT}/`dirname $i` + cp ${ROOT}/$i ${NROOT}/$i + else + echo Warning: Could not find ${ROOT}/$i + fi + fi + +done + +# +# Cleanup +# +rm -rf ${ROOT} +mv ${NROOT} ${ROOT} + +exit 0 + --- linux-2.6.32.orig/debian/scripts/misc/insert-changes.pl +++ linux-2.6.32/debian/scripts/misc/insert-changes.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl -w + +my $debian; +$droot = $ARGV[0] if (defined $ARGV[0]); +$droot = 'debian' if (!defined $droot); +$debian = $ARGV[1] if (defined $ARGV[1]); +$debian = 'debian.master' if (!defined $debian); + +system("make -s -f $droot/rules printchanges > $debian/changes"); + +open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog"; +open(CHANGES, "< $debian/changes") or die "Cannot open new changes"; +open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog"; + +$printed = 0; + +while () { + if (/^ CHANGELOG: /) { + next if $printed; + + while () { + print NEW; + } + + $printed = 1; + } else { + print NEW; + } +} + +close(NEW); +close(CHANGES); +close(CHANGELOG); + +rename("$debian/changelog.new", "$debian/changelog"); +unlink("$debian/changes"); --- linux-2.6.32.orig/debian/scripts/misc/getabis +++ linux-2.6.32/debian/scripts/misc/getabis @@ -0,0 +1,76 @@ +#!/bin/bash + +. debian/debian.env + +if [ "$#" != "2" ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi + +ver=$1 +revision=$2 +abi=$(echo $revision | awk -F. '{print $1}') + +verabi=$ver-$abi +verfull=$ver-$revision + +WGET="wget --quiet -c" + +abidir="`pwd`/$DEBIAN/abi/$verfull" +tmpdir="`pwd`/abi-tmp-$verfull" +origdir="`pwd`" + +test -d $tmpdir || mkdir $tmpdir + +getall() { + arch=$1 + shift + + mkdir -p $abidir/$arch + + for sub in $@; do + if [ -f $abidir/$arch/$sub ]; then + echo "Exists: $sub" + continue + fi + echo -n "Fetching $sub..." + filename=linux-image-${verabi}-${sub}_${verfull}_${arch}.deb + cd $tmpdir + for r in "${repo_list[@]}" + do + if ! [ -f $filename ]; then + $WGET $r/$filename + fi + done + if [ "$?" = "0" ]; then + echo -n "extracting..." + dpkg-deb --extract $filename tmp + if [ -f tmp/boot/abi-* ]; then + mv tmp/boot/abi-* $abidir/$arch/$sub + else + echo -n "NO ABI FILE..." + fi + (cd tmp; find lib/modules/$verabi-$sub/kernel -name '*.ko') | \ + sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > \ + $abidir/$arch/$sub.modules + rm -rf tmp $filename + echo "done." + else + echo "FAILED." + fi + cd $origdir + done +} + +# MAIN + +# Setup abi directory +mkdir -p $abidir +echo $abi > $abidir/abiname + +# NOTE: The flavours are hardcoded, because they may have changed from the +# current build. + +. $DEBIAN/etc/getabis + +rmdir $tmpdir --- linux-2.6.32.orig/debian/scripts/misc/insert-ubuntu-changes +++ linux-2.6.32/debian/scripts/misc/insert-ubuntu-changes @@ -0,0 +1,58 @@ +#!/usr/bin/perl + +if ($#ARGV != 2) { + die "Usage: $0 \n"; +} +my ($changelog, $end, $start) = @ARGV; + +$end =~ s/.*\.//; +$start =~ s/.*\.//; + +my @changes = (); +my $output = 0; +open(CHG, ") { + if (/^\S+\s+\((.*\.(\d+))\)/) { + if ($2 <= $end) { + last; + } + if ($2 == $start) { + $output = 1; + } + if ($output) { + push(@changes, "\n [ Ubuntu: $1 ]\n\n"); + next; + } + } + next if ($output == 0); + + next if (/^\s*$/); + next if (/^\s--/); + next if (/^\s\s[^\*\s]/); + + push(@changes, $_); +} +close(CHG); + +open(CHANGELOG, "< $changelog") or die "Cannot open changelog"; +open(NEW, "> $changelog.new") or die "Cannot open new changelog"; + +$printed = 3; +while () { + if (/^ CHANGELOG: /) { + $printed--; + print NEW; + if ($printed == 0) { + print NEW @changes; + } + next; + } + print NEW; +} + +close(NEW); +close(CHANGELOG); + +rename("$changelog.new", "$changelog"); --- linux-2.6.32.orig/debian/scripts/misc/retag +++ linux-2.6.32/debian/scripts/misc/retag @@ -0,0 +1,34 @@ +#!/usr/bin/perl -w + +open(TAGS, "git tag -l |") or die "Could not get list of tags"; +@tags = ; +close(TAGS); + +open(LOGS, "git log --pretty=short |") or die "ERROR: Calling git log"; +my $commit = ""; + +while () { + my $origtag; + + if (m|^commit (.*)$|) { + $commit = $1; + next; + } + + m|\s*UBUNTU: (Ubuntu-2\.6\..*)| or next; + + $tag = $1; + + ($origtag) = grep(/^$tag.orig$/, @tags); + + if (!defined($origtag)) { + print "I: Adding original tag for $tag\n"; + system("git tag -m $tag $tag.orig $tag"); + } + + print "I: Tagging $tag => $commit\n"; + + system("git tag -f -m $tag $tag $commit"); +} + +close(LOGS); --- linux-2.6.32.orig/debian/scripts/misc/kernelconfig +++ linux-2.6.32/debian/scripts/misc/kernelconfig @@ -0,0 +1,171 @@ +#!/bin/bash + +. debian/debian.env + +# Script to merge all configs and run 'make silentoldconfig' on it to wade out bad juju. +# Then split the configs into distro-commmon and flavour-specific parts + +# We have to be in the top level kernel source directory +if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then + echo "This does not appear to be the kernel source directory." 1>&2 + exit 1 +fi + +mode=${1:?"Usage: $0 [oldconfig|editconfig]"} +case "$mode" in + oldconfig) ;; # All is good + defaultconfig) ;; # All is good + editconfig) ;; # All is good + genconfig) ;; # All is good + *) echo "$0 called with invalid mode" 1>&2 + exit 1 ;; +esac +kerneldir="`pwd`" +confdir="$kerneldir/${DEBIAN}/config" +sharedconfdir="$kerneldir/debian.master/config" +variant="$2" + +. $DEBIAN/etc/kernelconfig + +bindir="`pwd`/${DROOT}/scripts/misc" +common_conf="$confdir/config.common.$family" +tmpdir=`mktemp -d` +mkdir "$tmpdir/CONFIGS" + +if [ "$mode" = "genconfig" ]; then + keep=1 + mode="oldconfig" + test -d CONFIGS || mkdir CONFIGS +fi + +for arch in $archs; do + rm -rf build + mkdir build + + # Map debian archs to kernel archs + case "$arch" in + amd64) kernarch="x86_64" ;; + lpia) kernarch="x86" ;; + sparc) kernarch="sparc64" ;; + armel) kernarch="arm" ;; + *) kernarch="$arch" ;; + esac + + archconfdir=$confdir/$arch + flavourconfigs=$(cd $archconfdir && ls config.flavour.*) + + # Merge configs + # We merge config.common.ubuntu + config.common. + + # config.flavour. + + for config in $flavourconfigs; do + fullconf="$tmpdir/$arch-$config-full" + case $config in + *) + : >"$fullconf" + if [ -f $common_conf ]; then + cat $common_conf >> "$fullconf" + fi + if [ -f $archconfdir/config.common.$arch ]; then + cat $archconfdir/config.common.$arch >> "$fullconf" + fi + cat "$archconfdir/$config" >>"$fullconf" + if [ -f $confdir/OVERRIDES ]; then + cat $confdir/OVERRIDES >> "$fullconf" + fi + ;; + esac + done + + for config in $flavourconfigs; do + if [ -f $archconfdir/$config ]; then + fullconf="$tmpdir/$arch-$config-full" + cat "$fullconf" > build/.config + # Call oldconfig or menuconfig + case "$mode" in + oldconfig) + # Weed out incorrect config parameters + echo "* Run silentoldconfig on $arch/$config ..." + make O=`pwd`/build ARCH=$kernarch silentoldconfig ;; + defaultconfig) + # Weed out incorrect config parameters + echo "* Run oldconfig on $arch/$config ..." + make O=`pwd`/build ARCH=$kernarch oldconfig ;; + editconfig) + # Interactively edit config parameters + while : ; do + echo -n "Do you want to edit config: $arch/$config? [Y/n] " + read choice + + case "$choice" in + y* | Y* | "" ) + make O=`pwd`/build ARCH=$kernarch menuconfig + break ;; + n* | N* ) + break ;; + *) + echo "Entry not valid" + esac + done + ;; + *) # Bad! + exit 1 ;; + esac + cat build/.config > $archconfdir/$config + cat build/.config > "$tmpdir/CONFIGS/$arch-$config" + if [ "$keep" = "1" ]; then + cat build/.config > CONFIGS/$arch-$config + fi + else + echo "!! Config not found $archconfdir/$config..." + fi + done + + echo "Running splitconfig.pl for $arch" + echo + + # Can we make this more robust by avoiding $tmpdir completely? + # This approach was used for now because I didn't want to change + # splitconfig.pl + (cd $archconfdir; $bindir/splitconfig.pl; mv config.common \ + config.common.$arch; cp config.common.$arch $tmpdir) +done + +rm -f $common_conf + +# Now run splitconfig.pl on all the config.common. copied to +# $tmpdir +(cd $tmpdir; $bindir/splitconfig.pl) +( + cd $confdir; + rm -f *-full + grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf + for arch in $archs; do + grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \ + >$arch/config.common.$arch + done +) + +echo "" +echo "Running config-check for all configurations ..." +echo "" +fail=0 +for arch in $archs; do + archconfdir=$confdir/$arch + flavourconfigs=$(cd $archconfdir && ls config.flavour.*) + for config in $flavourconfigs; do + if [ -f $archconfdir/$config ]; then + fullconf="$tmpdir/CONFIGS/$arch-$config" + "$bindir/../config-check" "$fullconf" "$arch" "$config" "$sharedconfdir" "0" || let "fail=$fail+1" + fi + done +done + +if [ "$fail" != 0 ]; then + echo "" + echo "*** ERROR: $fail config-check failures detected" + echo "" +fi + +rm -rf build + --- linux-2.6.32.orig/debian/scripts/misc/splitconfig.pl +++ linux-2.6.32/debian/scripts/misc/splitconfig.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl -w + +%allconfigs = (); +%common = (); + +print "Reading config's ...\n"; + +opendir(DIR, "."); + +while (defined($config = readdir(DIR))) { + # Only config.* + next if $config !~ /^config\..*/; + # Nothing that is disabled, or remnant + next if $config =~ /.*\.(default|disabled|stub)$/; + + %{$allconfigs{$config}} = (); + + print " processing $config ... "; + + open(CONFIG, "< $config"); + + while () { + # Skip comments + /^#*\s*CONFIG_(\w+)[\s=](.*)$/ or next; + + ${$allconfigs{$config}}{$1} = $2; + + $common{$1} = $2; + } + + close(CONFIG); + + print "done.\n"; +} + +closedir(DIR); + +print "\n"; + +print "Merging lists ... \n"; + +# %options - pointer to flavour config inside the allconfigs array +for $config (keys(%allconfigs)) { + my %options = %{$allconfigs{$config}}; + + print " processing $config ... "; + + for $key (keys(%common)) { + next if not defined $common{$key}; + + # If we don't have the common option, then it isn't + # common. If we do have that option, it must have the same + # value. EXCEPT where this file does not have a value at all + # which may safely be merged with any other value; the value + # will be elided during recombination of the parts. + if (!defined($options{$key})) { + # Its ok really ... let it merge + } elsif (not defined($options{$key})) { + undef $common{$key}; + } elsif ($common{$key} ne $options{$key}) { + undef $common{$key}; + } + } + + print "done.\n"; +} + +print "\n"; + +print "Creating common config ... "; + +open(COMMON, "> config.common"); +print COMMON "#\n# Common config options automatically generated by splitconfig.pl\n#\n"; + +for $key (sort(keys(%common))) { + if (not defined $common{$key}) { + print COMMON "# CONFIG_$key is UNMERGABLE\n"; + } elsif ($common{$key} eq "is not set") { + print COMMON "# CONFIG_$key is not set\n"; + } else { + print COMMON "CONFIG_$key=$common{$key}\n"; + } +} +close(COMMON); + +print "done.\n\n"; + +print "Creating stub configs ...\n"; + +for $config (keys(%allconfigs)) { + my %options = %{$allconfigs{$config}}; + + print " processing $config ... "; + + open(STUB, "> $config"); + print STUB "#\n# Config options for $config automatically generated by splitconfig.pl\n#\n"; + + for $key (sort(keys(%options))) { + next if defined $common{$key}; + + if ($options{$key} =~ /^is /) { + print STUB "# CONFIG_$key $options{$key}\n"; + } else { + print STUB "CONFIG_$key=$options{$key}\n"; + } + } + + close(STUB); + + print "done.\n"; +} --- linux-2.6.32.orig/debian/scripts/misc/git-ubuntu-log +++ linux-2.6.32/debian/scripts/misc/git-ubuntu-log @@ -0,0 +1,232 @@ +#!/usr/bin/perl -w + +use strict; +use Text::Wrap; + +my $kernel_auth = "Upstream Kernel Changes"; + +my (%map, @reverts); +my $pstate = 1; +my $no_kern_log = 0; +my $print_shas = 0; +my $first_print = 1; + +while (@ARGV) { + my $opt = $ARGV[0]; + shift; + if ($opt eq "--no-kern-log") { + $no_kern_log = 1; + } elsif ($opt eq "--print-shas") { + $print_shas = 1; + } else { + print STDERR "Unknown options: $opt\n"; + exit(1); + } +} + +sub check_reverts($) { + my ($entry) = @_; + my ($check); + + foreach $check (reverse @reverts) { + my $desc = "Revert \"" . $entry->{'desc'} . "\""; + if ($check->{'desc'} eq $desc) { + @reverts = grep($_->{'desc'} ne $desc, @reverts); + return 1; + } + } + + return 0; +} + +sub add_entry($) { + my ($entry) = @_; + my $key = $entry->{'author'}; + + # store description in array, in email->{desc list} map + if (exists $map{$key}) { + # grab ref + my $obj = $map{$key}; + + # add desc to array + push(@$obj, $entry); + } else { + # create new array, containing 1 item + my @arr = ($entry); + + # store ref to array + $map{$key} = \@arr; + } +} + +sub shortlog_entry($$$$$) { + my ($name, $desc, $bug, $cve, $commit) = @_; + my $entry; + + $desc =~ s#/pub/scm/linux/kernel/git/#/.../#g; + $desc =~ s#\[PATCH\] ##g; + + $desc =~ s#^\s*##g; + $desc =~ s# *UBUNTU: ##g; + + $entry->{'desc'} = $desc; + if ($bug ne '') { + $entry->{'bugno'} = $bug; + } + $entry->{'cve'} = $cve; + $entry->{'commit'} = $commit; + $entry->{'author'} = $name; + + if ($desc =~ /^Revert "/) { + push(@reverts, $entry); + return; + } + + return if check_reverts($entry); + + add_entry($entry); +} + +# sort comparison function +sub by_name($$) { + my ($a, $b) = @_; + + uc($a) cmp uc($b); +} + +sub shortlog_output { + my ($obj, $key, $entry); + + foreach $key (sort by_name keys %map) { + next if $key eq $kernel_auth and $no_kern_log; + + print "\n" unless $first_print; + $first_print = 0; + + # output author + printf " [ %s ]\n\n", $key; + + # output author's 1-line summaries + $obj = $map{$key}; + foreach $entry (reverse @$obj) { + print wrap(" * ", " ", $entry->{'desc'}) . "\n"; + # For non upstream changes, add other info. + if ($key ne $kernel_auth) { + if ($print_shas) { + print " - GIT-SHA " . $entry->{'commit'} . + "\n"; + } + } + if (defined($entry->{'bugno'})) { + print " - LP: #" . $entry->{'bugno'} . "\n"; + } + if (defined($entry->{'cve'})) { + print " - " . $entry->{'cve'} . "\n"; + } + } + } +} + +sub changelog_input { + my ($author, $desc, $commit, $entry, $cve); + + while () { + # get commit + if ($pstate == 1) { + next unless /^commit (.*)/; + + $commit = $1; + + $pstate++; + } + + # get author and email + elsif ($pstate == 2) { + my ($email); + + next unless /^[Aa]uthor:?\s*(.*?)\s*<(.*)>/; + + $author = $1; + $email = $2; + $desc = undef; + $cve = undef; + + # cset author fixups + if (!$author) { + $author = $email; + } + $pstate++; + } + + # skip to blank line + elsif ($pstate == 3) { + next unless /^\s*$/; + $pstate++; + } + + # skip to non-blank line + elsif ($pstate == 4) { + next unless /^\s*?(.*)/; + my $ignore = 0; + my $do_ignore = 0; + my $bug = undef; + my %bugz = (); + my $k; + + # skip lines that are obviously not + # a 1-line cset description + next if /^\s*From: /; + + chomp; + $desc = $1; + + if ($desc =~ /^ *(Revert "|)UBUNTU:/) { + $do_ignore = 1; + } else { + $do_ignore = 0; + $author = $kernel_auth; + $ignore = 1 if $desc =~ /Merge /; + } + while () { + $ignore = 1 if ($do_ignore && /^ *Ignore: yes/i); + if (/^ *Bug: *(#|)([0-9#,\s]*)\s*$/i) { + foreach $k (split('(,|\s)\s*(#|)', $2)) { + $bugz{$k} = 1 if (($k ne '') and ($k =~ /[0-9]+/)); + } + } + elsif (/^ *BugLink: *http.*:\/\/.*\/([0-9]+)/i) { + $bugz{$1} = 1; + } + elsif (/^ *(CVE-.*)/) { + $cve = $1 + } + last if /^commit /; + } + + $bug = join(", #", sort keys(%bugz)); + if (!$ignore) { + &shortlog_entry($author, $desc, $bug, + $cve, $commit, 0); + } + + $pstate = 1; + if ($_ && /^commit (.*)/) { + $commit = $1; + $pstate++; + } + } + + else { + die "invalid parse state $pstate"; + } + } + + foreach $entry (@reverts) { + add_entry($entry); + } +} + +&changelog_input; +&shortlog_output; + +exit(0); --- linux-2.6.32.orig/debian/stamps/keep-dir +++ linux-2.6.32/debian/stamps/keep-dir @@ -0,0 +1 @@ +Place holder --- linux-2.6.32.orig/debian/docs/README.inclusion-list +++ linux-2.6.32/debian/docs/README.inclusion-list @@ -0,0 +1,51 @@ +This README describes the reason for, and the use of, module +inclusion lists. + +The original Hardy release had the notion of sub-flavours, +e.g., a flavour that was constructed as a subset of an existing flavour. +For example, the virtual flavour was extracted from the server flavour using +a subset of the server flavour modules. However, there were some difficult +mainteneance issues with regard to packaging, make rules, and scripts. This +re-implementation of the sub-flavours philosophy is hopefully simpler, +and retrofitable to all releases. + +A module inclusion list looks at the problem of of constructing a package +from the perspective of what modules do we _want_ in the package, as opposed +to what modules we _don't_ want. As the kernel matures, more and more devices are added +which makes the problem of configuration maintenance a real pain in the ass. +If we took the approach of disabling all of the config options that we don't want, +then the differences between flavours will quickly become quite large, making +it difficult to quickly compare the individual flavour configs. Each time a +new config option is added then we also have to make a decision about disabling in +order to continue to keep the minimal number of modules. + +A module inclusion list is applied on a per-flavour basis. For example, +debian./control.d/${flavour}.inclusion-list. For example, the +config for virtual is very close to server and generic, but the inclusion list +causes the virtual package to be constructed with _only_ the modules described +in the inclusion list. + +The inclusion list format is a simple bash regular expression list of files. For example, + +arch/*/{crypto,kernel,oprofile} +drivers/acpi/* +drivers/ata/ahci.ko + +These 3 regular expression forms are suitable for expansion by bash and as inputs to 'find'. +See debian/scripts/module-inclusion for details. + +There are 2 log files created as a side effect of the application of the module +inclusion list; $(flavour).inclusion-list.log and $(flavour).depmod.log. + +$(flavour).inclusion-list.log : This log is created while the inclusion list +modules are being copied. If any are missing, then those warnings go in this log. +While its not considered a fatal error, you should endevour to correct your inclusion +list such that there are no missing modules. + +$(flavour).depmod.log : The log is created as a result of running depmod on the +resulting set of modules. If there are missing symbols then you'll find that information +here. Again, you should modify your inclusion list such that there are no missing +symbols. + +Tim Gardner +June 2, 2010 --- linux-2.6.32.orig/debian/tests/check-aliases +++ linux-2.6.32/debian/tests/check-aliases @@ -0,0 +1,24 @@ +#!/usr/bin/perl -w + +my %map; + +print "Checking for dupe aliases in $ENV{'FLAVOUR'}...\n"; + +$aliases = + "$ENV{'INSTALL_DIR'}/lib/modules/$ENV{'VERSION'}-$ENV{'FLAVOUR'}/modules.alias"; + +open(ALIASES, "< $aliases") or die "Could not open $aliases"; + +while () { + chomp; + my ($junk, $alias, $module) = split; + + if (defined($map{$alias})) { + printf("%s %20s / %-20s : %s \n", ("$map{$alias}" eq "$module") + ? "INT" : " ", $map{$alias}, $module, $alias); + } else { + $map{$alias} = $module; + } +} + +exit(0); --- linux-2.6.32.orig/debian/tests/README +++ linux-2.6.32/debian/tests/README @@ -0,0 +1,21 @@ +Scripts placed in this directory get called one at a time by run-parts(8). +The scripts are expected to perform some sort of sanity checks on the +finished build. Scripts will be called once for each flavour. + +Some environment variables are exported to make life a little easier: + +DPKG_ARCH : The dpkg architecture (e.g. "amd64") +KERN_ARCH : The kernel architecture (e.g. "x86_64") +FLAVOUR : The specific flavour for this run (e.g. "generic") +VERSION : The full version of this build (e.g. 2.6.22-1) +REVISION : The exact revision of this build (e.g. 1.3) +PREV_REVISION : The revision prior to this one +ABI_NUM : The specific ABI number for this build (e.g. 2) +PREV_ABI_NUM : The previous ABI number. Can be the same as ABI_NUM. +BUILD_DIR : The directory where this build took place +INSTALL_DIR : The directory where the package is prepared +SOURCE_DIR : Where the main kernel source is + +Scripts are expected to have a zero exit status when no problems occur, +and non-zero when an error occurs that should stop the build. Scripts +should print whatever info they deem needed to deduce the problem. --- linux-2.6.32.orig/debian/commit-templates/sauce-patch +++ linux-2.6.32/debian/commit-templates/sauce-patch @@ -0,0 +1,40 @@ +# Ubuntu commit template. +# +# NOTE: This gets reformatted for debian/changelog +# +# +# SAUCE refers to the fact that this patch might not go upstream, but we need to +# carry it to successive releases. In most cases you DONOT want to use this +# template. +# +# An example of a SAUCE patch is the ACPI DSDT-in-initramfs patch which has been +# refused upstream, but still provides useful functionality to users with broken +# BIOSes. +# +#------------------------------------------------------------------------- +# +# The initial UBUNTU is a flag that this is an Ubuntu commit. It will be +# referenced to the Author in the debian/changelog entry. +# +# The text following is the short message that will be placed in the +# changelog. Extra text on the following lines will be ignored, but left +# in the git commit. Lines with # will be ignored in the commit. +# +# OriginalAuthor allows for alternate attribution. +# +# OriginalLocation allows for a URL or description of where the patch came +# from. +# +# BugLink is a URL to a Malone bug. +# +# Ignore: yes will keep this commit from showing up in the changelog. +# +UBUNTU: SAUCE: + + + +# OriginalAuthor: +# OriginalLocation: +# BugLink: http://bugs.launchpad.net/bugs/ +# Ignore: yes +# Other text below here. --- linux-2.6.32.orig/debian/commit-templates/config-updates +++ linux-2.6.32/debian/commit-templates/config-updates @@ -0,0 +1,15 @@ +# +# This template is used for commit messages that don't need to +# show up in debian/changelog. Administrative stuff like config +# updates, ABI bumps, etc. Setting 'Ignore: yes' prevents +# 'debian/rules insertchanges' from inserting this commit meesage +# as a changelog entry. +# +# Please give a one-line description of the config change followed +# by a detailed explanation if necessary + +UBUNTU: [Config] XXXX + +# BugLink: http://bugs.launchpad.net/bugs/ +# Ignore: yes +# Other text below here. --- linux-2.6.32.orig/debian/commit-templates/newrelease +++ linux-2.6.32/debian/commit-templates/newrelease @@ -0,0 +1,3 @@ +UBUNTU: Start new release + +Ignore: yes --- linux-2.6.32.orig/debian/commit-templates/external-driver +++ linux-2.6.32/debian/commit-templates/external-driver @@ -0,0 +1,20 @@ +# Ubuntu external driver commit. +# +# NOTE: This gets reformatted for README.Ubuntu-External-Drivers and +# debian/changelog. +# +# This is only needed when a driver is added, updated or removed. It is +# not needed when patches or fixes are applied to the driver. If the +# driver is being removed, add the line: +# +# Removing: yes +# +# to the commit, and you can remove all other tags (except UBUNTU:). +# +UBUNTU: + +ExternalDriver: +Description: +Url: +Mask: +Version: --- linux-2.6.32.orig/debian/commit-templates/missing-modules +++ linux-2.6.32/debian/commit-templates/missing-modules @@ -0,0 +1,3 @@ +UBUNTU: build/modules: Add modules that have intentionally gone missing + +Ignore: yes --- linux-2.6.32.orig/debian/commit-templates/upstream-patch +++ linux-2.6.32/debian/commit-templates/upstream-patch @@ -0,0 +1,27 @@ +# Ubuntu commit template. +# +# NOTE: This gets reformatted for debian/changelog +# +# The initial UBUNTU is a flag that this is an Ubuntu commit. It will be +# referenced to the Author in the debian/changelog entry. +# +# The text following is the short message that will be placed in the +# changelog. Extra text on the following lines will be ignored, but left +# in the git commit. Lines with # will be ignored in the commit. +# +# OriginalAuthor allows for alternate attribution. +# +# OriginalLocation allows for a URL or description of where the patch came +# from. +# +# BugLink is a URL to a Malone bug. +# +# Ignore: yes will keep this commit from showing up in the changelog. +# +UBUNTU: [Upstream] + +# OriginalAuthor: +# OriginalLocation: +# BugLink: http://bugs.launchpad.net/bugs/ +# Ignore: yes +# Other text below here. --- linux-2.6.32.orig/debian/commit-templates/bumpabi +++ linux-2.6.32/debian/commit-templates/bumpabi @@ -0,0 +1,3 @@ +UBUNTU: Bump ABI + +Ignore: yes --- linux-2.6.32.orig/debian/control-scripts/prerm +++ linux-2.6.32/debian/control-scripts/prerm @@ -0,0 +1,308 @@ +#! /usr/bin/perl +# -*- Mode: Perl -*- +# image.prerm --- +# Author : root ( root@melkor.pilgrim.umass.edu ) +# Created On : Fri May 17 03:28:59 1996 +# Created On Node : melkor.pilgrim.umass.edu +# Last Modified By : Manoj Srivastava +# Last Modified On : Sat Aug 5 13:14:17 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 85 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# +# $Id: image.prerm,v 1.22 2003/10/07 16:24:20 srivasta Exp $ +# +# +#use strict; + +$|=1; +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlinks = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, or nettrom +my $image_dir = "/boot"; # where the image is located +my $clobber_modules = ''; # target machine defined +my $initrd = "YES"; # initrd kernel +my $use_hard_links = ''; # hardlinks do not wirk across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; +my $package_name = "linux-image-$version"; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; + + +# This should not point to /tmp, because of security risks. +my $temp_file_name = "/var/log/$loader" . "_log.$$"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $CONF_LOC = '/etc/kernel-img.conf'; +my $relative_links = ''; +my $silent_loader = ''; +my $warn_reboot = 'Yes'; # Warn that we are installing a version of + # the kernel we are running + +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + +my $DEBUG = 0; + +# Variables used +my $image=''; +my $ret=0; +my $seen=''; +my $answer=''; +my $running = ''; +my $WouldInvalidate = 0; + +if ($ARGV[0] && ($ARGV[0] =~ /remove/ || $ARGV[0] =~ /upgrade/)) { + if (-l "/usr/doc/linux-image-$version") { + unlink "/usr/doc/linux-image-$version"; + } +} + +# Ignore all invocations uxcept when called on to remove +exit 0 unless ($ARGV[0] && $ARGV[0] =~ /remove/) ; + +# Paranoid check to make sure that the correct value is put in there +if (! $kimage) { $kimage = "vmlinuz";} # Hmm. empty +elsif ($kimage =~ m/^b?uImage$/o) { $kimage = "vmlinuz";} # these produce vmlinuz +elsif ($kimage =~ m/^b?zImage$/o) { $kimage = "vmlinuz";} # these produce vmlinuz +elsif ($kimage =~ m/^[iI]mage$/o) { my $nop = $kimage; } +elsif ($kimage =~ m/^vmlinux$/o) { my $nop = $kimage; } +else { $kimage = "vmlinuz";} # Default + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlinks\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $clobber_modules = '' if /^\s*clobber_modules\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $do_initrd = '' if /^\s*do_initrd\s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + $relink_build_link = '' if /^\s*relink_build_link\s*=\s*(no|false|0)\s*$/ig; + $force_build_link = '' if /^\s*force_build_link\s*=\s*(no|false|0)\s*$/ig; + + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $clobber_modules = "Yes" if /^\s*clobber_modules\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $do_initrd = "Yes" if /^\s*do_initrd\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + $relink_build_link = 'Yes' if /^\s*relink_build_link\s*=\s*(yes|true|1)\s*$/ig; + $force_build_link = 'Yes' if /^\s*force_build_link\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + } +} + + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + +#check to see if we are trying to remove a running kernel +# if so we abort right now. +chop($running=`uname -r`); +if ($running eq $version) { + print STDERR "WARN: Proceeding with removing running kernel image.\n"; +} + +#Now, they have an alternate kernel which they are currently running + +# This is just us being nice to lilo users. + +chdir("/") or die "could not chdir to /:$!\n"; + +if (-f "/etc/$loader.conf") { #I know, could be a link, but .. + open (LILO, "/etc/$loader.conf") || &success(); # this is not critical + while () { + chop; + s/\#.*//; # nix the comments + next unless /^\s*image\s*=\s(\S+)/o; + $image = $1; + if ($image && -e $image) { + while (defined($image) && -l $image) { + $image = readlink ($image); + } + if (defined($image) && -e $image) { + $WouldInvalidate |= $image =~ /$kimage-$version/; + } + else { + &success(); # invalid $loader.conf file + } + } + else { + &success(); # invalid $loader.conf file + } + } + close (LILO); + if ($WouldInvalidate) { + print STFERR "WARN: Proceeding with removing running kernel image.\n"; + &success(); + } +} + + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + + +## Run user hook script here, if any +if (-x "$prerm_hook") { + &run_hook("prerm", $prerm_hook); +} +if (-d "/etc/kernel/prerm.d") { + print STDERR "Examining /etc/kernel/prerm.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version /etc/kernel/prerm.d") && + die "Failed to process /etc/kernel/prerm.d"; +} +if (-d "/etc/kernel/prerm.d/$version") { + print STDERR "Examining /etc/kernel/prerm.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version " . + "/etc/kernel/prerm.d/$version") && + die "Failed to process /etc/kernel/prerm.d/$version"; +} + +sub success () { + my @files_to_remove = qw{ + modules.dep modules.isapnpmap modules.pcimap + modules.usbmap modules.parportmap + modules.generic_string modules.ieee1394map + modules.ieee1394map modules.pnpbiosmap + modules.alias modules.ccwmap modules.inputmap + modules.symbols modules.ofmap modules.seriomap + modules.alias.bin modules.builtin.bin modules.dep.bin modules.symbols.bin + }; + + foreach my $extra_file (@files_to_remove) { + if (-f "/lib/modules/$version/$extra_file") { + unlink "/lib/modules/$version/$extra_file"; + } + } + exit 0; +} + + + +&success(); +exit 0; +__END__ + + + + + --- linux-2.6.32.orig/debian/control-scripts/headers-postinst +++ linux-2.6.32/debian/control-scripts/headers-postinst @@ -0,0 +1,126 @@ +#!/usr/bin/perl +# -*- Mode: Cperl -*- +# debian.postinst --- +# Author : Manoj Srivastava ( srivasta@pilgrim.umass.edu ) +# Created On : Sat Apr 27 05:42:43 1996 +# Created On Node : melkor.pilgrim.umass.edu +# Last Modified By : Manoj Srivastava +# Last Modified On : Sat Aug 5 13:20:22 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 45 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# +# +# arch-tag: 1c716174-2f0a-476d-a626-a1322e62503a +# + + +$|=1; + +# Predefined values: +my $version = "=V"; +my $kimage = "=K"; +my $package_name = "linux-image-$version"; + + +# Ignore all invocations uxcept when called on to configure. +exit 0 unless ($ARGV[0] && $ARGV[0] =~ /configure/); + +#known variables +my $image_dest = "/"; +my $realimageloc = "/boot/"; +my $silent_modules = ''; +my $modules_base = '/lib/modules'; +my $CONF_LOC = '/etc/kernel-img.conf'; +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + +chdir '/usr/src' or die "Could not chdir to /usr/src:$!"; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $header_postinst_hook = "$1" if /^\s*header_postinst_hook\s*=\s*(\S+)/ig; + } + close CONF; + } +} + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +## Run user hook script here, if any +if (-x "$header_postinst_hook") { + &run_hook("postinst", $header_postinst_hook); +} + +if (-d "/etc/kernel/header_postinst.d") { + print STDERR "Examining /etc/kernel/header_postinst.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/header_postinst.d") && + die "Failed to process /etc/kernel/header_postinst.d"; +} + +if (-d "/etc/kernel/header_postinst.d/$version") { + print STDERR "Examining /etc/kernel/header_postinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/header_postinst.d/$version") && + die "Failed to process /etc/kernel/header_postinst.d/$version"; +} + +exit 0; + +__END__ --- linux-2.6.32.orig/debian/control-scripts/postinst +++ linux-2.6.32/debian/control-scripts/postinst @@ -0,0 +1,1088 @@ +#! /usr/bin/perl +# OriginalAuthor : Manoj Srivastava ( srivasta@pilgrim.umass.edu ) +# +# Customized for Ubuntu by: Ben Collins + +#use strict; #for debugging +use Cwd 'abs_path'; + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, nettrom, arcboot or delo +my $image_dir = "/boot"; # where the image is located +my $clobber_modules = ''; # target machine defined +my $relative_links = ""; # target machine defined +my $initrd = "YES"; # initrd kernel +my $do_initrd = ''; # Normally we do not +my $use_hard_links = ''; # hardlinks do not work across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; # List of tools to create initial ram fs. +my $notifier = "/usr/share/update-notifier/notify-reboot-required"; +my $package_name = "linux-image-$version"; +my $explicit_do_loader = 'Yes'; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; +$Loader = "ARCBOOT" if $loader =~ /^arcboot/io; +$Loader = "DELO" if $loader =~ /^delo/io; + +# This should not point to /tmp, because of security risks. +my $temp_file_name = "/var/log/$loader" . "_log.$$"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $silent_modules = ''; +my $silent_loader = ''; +my $warn_reboot = 'Yes'; # Warn that we are installing a version of + # the kernel we are running + +my $modules_base = '/lib/modules'; +my $CONF_LOC = '/etc/kernel-img.conf'; + +# Ignore all invocations except when called on to configure. +exit 0 unless $ARGV[0] =~ /configure/; + +my $DEBUG = 0; + +# Do some preliminary sanity checks here to ensure we actually have an +# valid image dir +chdir('/') or die "could not chdir to /:$!\n"; +die "Internal Error: ($image_dir) is not a directory!\n" + unless -d $image_dir; + +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; +die "Internal Error: ($realimageloc) is not a directory!\n" + unless -d $realimageloc; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlink\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $clobber_modules = '' if /^\s*clobber_modules\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $explicit_do_loader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $do_initrd = '' if /^\s*do_initrd\s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_modules = '' if /^\s*silent_modules\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $clobber_modules = "Yes" if /^\s*clobber_modules\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $explicit_do_loader = "YES" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $do_initrd = "Yes" if /^\s*do_initrd\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_modules = 'Yes' if /^\s*silent_modules\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + } +} + + + +# For some versions of kernel-package, we had this warning in the +# postinst, but the rules did not really interpolate the value in. +# Here is a sanity check. +my $pattern = "=" . "I"; +$initrd=~ s/^$pattern$//; + +if ($link_in_boot) { + $image_dest = "/$image_dir/"; # same as realimageloc +} + +# Tack on at least one trainling / +$image_dest = "$image_dest/"; +$image_dest =~ s|^/*|/|o; +$image_dest =~ s|/+$|/|o; + +if (! -d "$image_dest") { + die "Expected Image Destination dir ($image_dest) to be a valid directory!\n"; +} + +# sanity +if (!($do_bootfloppy || $do_bootloader)) { + $do_boot_enable = ''; +} +if ($do_symlink && $no_symlink) { + warn "Both do_symlinks and no_symlinks options enabled; disabling no_symlinks\n"; + $no_symlink = 0; +} + +# most of our work is done in $image_dest (nominally /) +chdir("$image_dest") or die "could not chdir to $image_dest:$!\n"; + +# Paranoid check to make sure that the correct value is put in there +if (! $kimage) { $kimage = "vmlinuz"; } # Hmm. empty +elsif ($kimage =~ m/^b?uImage$/o) { $kimage = "vmlinuz"; } # these produce vmlinuz +elsif ($kimage =~ m/^b?zImage$/o) { $kimage = "vmlinuz"; } # these produce vmlinuz +elsif ($kimage =~ m/^[iI]mage$/o) { my $nop = $kimage; } +elsif ($kimage =~ m/^vmlinux$/o) { my $nop = $kimage; } +else { $kimage = "vmlinuz"; } # Default + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +die "Internal Error: Could not find image (" . $realimageloc + . "$kimage-$version)\n" unless -e $realimageloc + . "$kimage-$version"; + +# search for the boot loader in the path +my $loader_exec; +($loader_exec = $loader) =~ s|.*/||; +my ($loaderloc) = grep -x, map "$_/$loader_exec", + map { length($_) ? $_ : "." } split /:/, $ENV{PATH}; + + +###################################################################### +###################################################################### +########### Test whether a relative symlinkwould be OK ####### +###################################################################### +###################################################################### +sub test_relative { + my %params = @_; + my $cwd; + + die "Internal Error: Missing Required paramater 'Old Dir' " + unless $params{'Old Dir'}; + die "Internal Error: Missing Required paramater New Dir' " + unless $params{'New Dir'}; + + + die "Internal Error: No such dir $params{'Old Dir'} " + unless -d $params{'Old Dir'}; + die "Internal Error: No such dir $params{'New Dir'} " + unless -d $params{'New Dir'}; + + warn "Test relative: testing $params{'Old Dir'} -> $params{'New Dir'}" + if $DEBUG; + chomp($cwd = `pwd`); + chdir ($params{'New Dir'}) or die "Could not chdir to $params{'New Dir'}:$!"; + my $ok = 0; + $params{'Old Dir'} =~ s|^/*||o; + if (-d $params{'Old Dir'} ) { + if (defined $params{'Test File'}) { + if (-e $params{'Old Dir'} . $params{'Test File'}) { + $ok = 1; + } + } else { + $ok = 1; # well, backward compatibility + } + } + chdir ($cwd) or die "Could not chdir to $params{'New Dir'}:$!"; + return $ok; +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +# sub CanonicalizePath { +# my $path = join '/', @_; +# my @work = split '/', $path; +# my @out; +# my $is_absolute; + +# if (@work && $work[0] eq "") { +# $is_absolute = 1; shift @work; +# } + +# while (@work) { +# my $seg = shift @work; +# if ($seg eq "." || $seg eq "") { +# } +# elsif ($seg eq "..") { +# if (@out && $out[-1] ne "..") { +# pop @out; +# } +# else { +# # Leading "..", or "../..", etc. +# push @out, $seg; +# } +# } +# else { +# push @out, $seg; +# } +# } + +# unshift @out, "" if $is_absolute; +# return join('/', @out); +# } +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### + +sub spath { + my %params = @_; + + die "Missing Required paramater 'Old'" unless $params{'Old'}; + die "Missing Required paramater 'New'" unless $params{'New'}; + + my @olddir = split '/', `readlink -q -m $params{'Old'}`; + my @newdir = split '/', `readlink -q -m $params{'New'}`; + my @outdir = @olddir; + + my $out = ''; + my $i; + for ($i = 0; $i <= $#olddir && $i <= $#newdir; $i++) { + $out++ if ($olddir[$i] ne $newdir[$i]); + shift @outdir unless $out; + unshift @outdir, ".." if $out; + } + if ($#newdir > $#olddir) { + for ($i=0; $i < $#newdir; $i++) { + unshift @outdir, ".."; + } + } + return join ('/', @outdir); +} +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### + + +# This routine actually moves the kernel image +# From: $realimageloc/$kimage-$version (/boot/vmlinuz-2.6.12) +# To: $image_dest/$kimage-$version (/vmlinuz-2.6.12) +# Note that the image is moved to a versioned destination, but ordinary +# symlinks we create otherwise are not normally versioned +sub really_move_image { + my $src_dir = $_[0]; + my $target = $_[1]; + my $dest_dir = $_[2]; + + warn "Really move image: src_dir=$src_dir, target=$target,\n destdir=$dest_dir" + if $DEBUG; + if (-e "$target") { + # we should be in dir $dest_dir == $image_dest /, normally + rename("$target", "$target.$$") || + die "failed to move " . $dest_dir . "$target:$!"; + warn "mv $target $target.$$" if $DEBUG; + } + warn "mv -f $src_dir$target $target" if $DEBUG; + my $ret = system("mv -f " . $src_dir . "$target " . + " $target"); + if ($ret) { + die("Failed to move " . $src_dir . "$target to " + . $dest_dir . "$target.\n"); + } + # Ok, now we may clobber the previous .old files + if (-e "$target.$$") { + rename("$target.$$", "$target.old") || + die "failed to move " . $dest_dir . "$target:$!"; + warn "mv $target.$$ $target " if $DEBUG; + } +} + +# Normally called after really_move_image; and only called if we asked for +# reversed link this routine reverses the symbolic link that is notmally +# created. Since the real kernel image has been moved over to +# $image_dest/$kimage-$version. So, this routine links +# From: $image_dest/$kimage-$version (/vmlinuz-2.6.12) +# To: $realimageloc/$kimage-$version (/boot/vmlinuz-2.6.12) +sub really_reverse_link { + my $src_dir = $_[0]; + my $link_name = $_[1]; + my $dest_dir = $_[2]; + warn "Really reverse link: src_dir=$src_dir, link name=$link_name\n" . + "\tdestdir=$dest_dir" if $DEBUG; + + my $Old = $dest_dir; + if (test_relative ('Old Dir' => $Old, 'New Dir' => $src_dir, + 'Test File' => "$link_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$src_dir" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + link($Old . "$link_name", $src_dir . "$link_name") || + die("Failed to link " . $dest_dir . "$link_name to " . $src_dir . + "$link_name .\n"); + warn "ln " . $Old . "$link_name " . $src_dir . "$link_name" if $DEBUG; + } + else { + symlink($Old . "$link_name", $src_dir . "$link_name") || + die("Failed to symbolic-link " . $dest_dir . "$link_name to " . $src_dir + . "$link_name : $!\n"); + warn "ln -s " . $Old . "$link_name " . $src_dir . "$link_name" if $DEBUG; + } +} + +# This routine is invoked if there is a symbolic link in place +# in $image_dest/$kimage -- so a symlink exists in the destination. +# What we are trying to determine is if we need to move the symbolic link over +# to the the .old location +sub move_p { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + my $force_move = 0; + warn "Move?: kimage=$kimage, image_dest=$image_dest, \n" . + "\timage_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if ($no_symlink || $reverse_symlink) { + # we do not want links, yet we have a symbolic link here! + warn "found a symbolic link in " . $image_dest . "$kimage \n" . + "even though no_symlink is defined\n" if $no_symlink; + warn "found a symbolic link in " . $image_dest . "$kimage \n" . + "even though reverse_symlink is defined\n" if $reverse_symlink; + # make sure we change this state of affairs + $force_move = 1; + return $force_move; + } + + warn "DEBUG: OK. We found symlink, and we should have a symlink here.\n" + if $DEBUG; + my $vmlinuz_target = readlink "$kimage"; + my $real_target = ''; + my $target = `readlink -q -m "${realimageloc}${kimage-$version}"`; + $real_target = abs_path($vmlinuz_target) if defined($vmlinuz_target); + + if (!defined($vmlinuz_target) || ! -f "$real_target") { + # what, a dangling symlink? + warn "The link " . $image_dest . "$kimage is a dangling link" . + "to $real_target\n"; + $force_move = 1; + return $force_move; + } + + + warn "DEBUG: The link $kimage points to ($vmlinuz_target)\n" if $DEBUG; + warn "DEBUG: ($vmlinuz_target) is really ($real_target)\n" if $DEBUG; + my $cwd; + chomp ($cwd=`pwd`); + if ($vmlinuz_target !~ m|^/|o) { + $vmlinuz_target = $cwd . "/" . $vmlinuz_target; + $vmlinuz_target =~ s|/+|/|o; + } + $vmlinuz_target = `readlink -q -m $vmlinuz_target`; + + if ("$vmlinuz_target" ne "$target") { + warn "DEBUG: We need to handle this.\n" if $DEBUG; + if ($minimal_swap) { + warn "DEBUG: Minimal swap.\n" if $DEBUG; + if (-l "$kimage.old") { + warn "DEBUG: There is an old link at $kimage.old\n" if $DEBUG; + my $old_target = readlink "$kimage.old"; + my $real_old_target = ''; + $real_old_target=abs_path($old_target) if defined ($old_target); + + if ($real_old_target && -f "$real_old_target") { + if ($old_target !~ m|^/|o) { + $old_target = $cwd . "/" . $old_target; + $old_target =~ s|/+|/|o; + } + $old_target = `readlink -q -m $old_target`; + if ("$old_target" ne "$target") { + $force_move = 1; + warn "DEBUG: Old link ($old_target) does not point to us ($target)\n" + if $DEBUG; + } + else { # The .old points to the current + warn "$kimage.old --> $target -- doing nothing"; + $force_move = 0; + } + } + else { + warn "DEBUG: Well, the old link does not exist -- so we move\n" + if $DEBUG; + $force_move = 1; + } + } + else { + warn "DEBUG: No .old link -- OK to move\n" + if $DEBUG; + $force_move = 1; + } + } + else { + warn "DEBUG: ok, minimal swap is no-- so we move.\n" + if $DEBUG; + $force_move = 1; + } + } + else { # already have proper link + warn "$kimage($vmlinuz_target) points to $target ($real_target) -- doing nothing"; + $force_move = 0; + } + return $force_move; +} + + +# This routine moves the symbolic link around (/vmlinuz -> /vmlinuz.old) +# It pays attention to whether we should the fact whether we should be using +# hard links or not. +sub really_move_link { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "really_move_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # don't clobber $kimage.old quite yet + rename("$kimage", "$kimage.$$") || + die "failed to move " . $image_dest . "$kimage:$!"; + warn "mv $kimage $kimage.$$" if $DEBUG; + my $Old = $src_dir; + my $cwd; + + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + warn "ln ${Old}${image_name} $kimage" if $DEBUG; + if (! link("${Old}${image_name}", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to link ${Old}${image_name} to " . + "${image_dest}${kimage}.\n"); + } + } + else { + warn "ln -s ${Old}${image_name} $kimage" if $DEBUG; + if (! symlink("${Old}${image_name}", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to symbolic-link ${Old}${image_name} to " . + "${image_dest}${kimage}: $!\n"); + } + } + + # Ok, now we may clobber the previous .old file + if (-l "$kimage.old" || ! -e "$kimage.old" ) { + rename("$kimage.$$", "$kimage.old"); + warn "mv $kimage.$$ $kimage.old" if $DEBUG; + } + else { + warn "$kimage.old is not a symlink, not clobbering\n"; + warn "rm $kimage.$$"; + unlink "$kimage.$$" if $DEBUG; + } +} + +# This routine handles a request to do symlinks, but there is no +# symlink file already there. Either we are supposed to use copy, or we are +# installing on a pristine system, or the user does not want symbolic links at +# all. We use a configuration file to tell the last two cases apart, creating +# a config file if needed. +sub handle_missing_link { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "handle_missing_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if ($no_symlink) { + warn "cp -a --backup=t $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("cp -a --backup=t " . $realimageloc . + "$image_name " . " $kimage"); + if ($ret) { + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + elsif ($reverse_symlink) { + warn "mv -f $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("mv -f " . $realimageloc . "$image_name " + . "$kimage"); + if ($ret) { + die("Failed to move " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + else { + if (! $have_conffile) { + my $ret; + my $answer=''; + $do_symlink = "Yes"; + + if (open(CONF, ">$CONF_LOC")) { + print CONF "# Kernel Image management overrides\n"; + print CONF "# See kernel-img.conf(5) for details\n"; + if ($loader =~ /palo/i) { + print CONF "link_in_boot = Yes\n"; + print CONF "do_symlinks = Yes\n"; + print CONF "relative_links = Yes\n"; + print CONF "do_bootloader = No\n"; + } else { + print CONF "do_symlinks = $do_symlink\n"; + } + close CONF; + } + $have_conffile = "Yes"; + } + } + + if (! $no_symlink && $do_symlink =~ /Yes/i) { + my $Old = $realimageloc; + my $New = $image_dest; + my $Name = "$image_name"; + my $Link_Dest = "$kimage"; + + if ($reverse_symlink) { + $Old = $image_dest; + $New = $realimageloc; + $Name = "$kimage"; + $Link_Dest = $realimageloc . "$image_name"; + } + if (test_relative ('Old Dir' => $Old, + 'New Dir' => $New, + 'Test File' => $Name)) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$New" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + symlink($Old . "$Name", "$Link_Dest") || + die("Failed to symbolic-link ${Old}$Name to $Link_Dest: $!\n"); + warn "ln -s ${Old}$Name $Link_Dest" if $DEBUG; + + } +} + +# This routine handles the rest of the cases, where the user has requested +# non-traditional handling, like using cp, or reverse symlinks, or hard links. +sub handle_non_symlinks { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "handle_non_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # Save the current image. We do this in all four cases + rename("$kimage", "$kimage.$$") || + die "failed to move " . $image_dest . "$kimage:$!"; + warn "mv $kimage $kimage.$$" if $DEBUG; + + ##,#### + # case One + #`#### + if ($no_symlink) { + # Maybe /$image_dest is on a dos system? + warn "cp -a --backup=t $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("cp -a --backup=t " . $realimageloc + . "$image_name " . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + rename("$kimage.$$", "$kimage"); + warn "mv $kimage.$$ $kimage" if $DEBUG; + } + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + ##,#### + # case Two + #`#### + elsif ($reverse_symlink) { # Maybe /$image_dest is on a dos system? + warn "mv -f $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("mv -f " . $realimageloc . "$image_name " + . $image_dest . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + rename("$kimage.$$", "$kimage"); + warn "mv $kimage.$$ $kimage" if $DEBUG; + } + die("Failed to move " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + my $Old = $image_dest; + if (test_relative ('Old Dir' => $Old, 'New Dir' => $realimageloc, + 'Test File' => "$kimage")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$realimageloc" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + warn "ln " . $Old . "$kimage " . $realimageloc . "$image_name" if $DEBUG; + if (! link($Old . "$kimage", $realimageloc . "$image_name")) { + warn "Could not link " . $image_dest . + "$kimage to $image_name :$!"; + } + } + else { + warn "ln -s " . $Old . "$kimage " . $realimageloc . "$image_name" if $DEBUG; + if (! symlink($Old . "$kimage", $realimageloc . "$image_name")) { + warn "Could not symlink " . $image_dest . + "$kimage to $image_name :$!"; + } + } + } + ##,#### + # case Three + #`#### + elsif ($use_hard_links =~ m/YES/i ) { + # Ok then. this ought to be a hard link, and hence fair game + # don't clobber $kimage.old quite yet + my $Old = $realimageloc; + my $cwd; + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + warn "ln " . $Old . "$image_name " . "$kimage" if $DEBUG; + if (! link($Old . "$image_name", "$kimage")) { + warn "mv $kimage.$$ $kimage" if $DEBUG; + rename("$kimage.$$", "$kimage"); + die("Failed to link " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + ##,#### + # case Four + #`#### + else { + # We just use cp + warn "cp -a --backup=t $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("cp -a --backup=t " . $realimageloc + . "$image_name " . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + warn "mv $kimage.$$ $kimage" if $DEBUG; + rename("$kimage.$$", "$kimage"); + } + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage .\n"); + } + } + # Ok, now we may clobber the previous .old file + warn "mv $kimage.$$ $kimage.old if -e $kimage.$$" if $DEBUG; + rename("$kimage.$$", "$kimage.old") if -e "$kimage.$$"; +} + +# This routine is responsible for setting up the symbolic links +# So, the actual kernel image lives in +# $realimageloc/$image_name (/boot/vmlinuz-2.6.12). +# This routine creates symbolic links in $image_dest/$kimage (/vmlinuz) +sub image_magic { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = "$kimage-$version"; + my $src_dir = $realimageloc; + warn "image_magic: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # Well, in any case, if the destination (the symlink we are trying + # to create) is a directory, we should do nothing, except throw a + # diagnostic. + if (-d "$kimage" ) { + die ("Hmm. $kimage is a directory, which I did not expect. I am\n" . + "trying to create a symbolic link with that name linked to \n" . + "$image_dest . Since a directory exists here, my assumptions \n" . + "are way off, and I am aborting.\n" ); + exit (3); + } + + if ($move_image) { # Maybe $image_dest is in on dos, or something? + # source dir, link name, dest dir + really_move_image( $realimageloc, $image_name, $image_dest); + really_reverse_link($realimageloc, $image_name, $image_dest) + if $reverse_symlink; + return; + } + + if (-l "$kimage") { # There is a symbolic link + warn "DEBUG: There is a symlink for $kimage\n" if $DEBUG; + my $force_move = move_p($kimage, $image_dest, $image_name, $src_dir); + + if ($force_move) { + really_move_link($kimage, $image_dest, $image_name, $src_dir); + } + } + elsif (! -e "$kimage") { + # Hmm. Pristine system? How can that be? Installing from scratch? + # Or maybe the user does not want a symbolic link here. + # Possibly they do not want a link here. (we should be in / + # here[$image_dest, really] + handle_missing_link($kimage, $image_dest, $image_name, $src_dir); + } + elsif (-e "$kimage" ) { + # OK, $kimage exists -- but is not a link + handle_non_symlinks($kimage, $image_dest, $image_name, $src_dir); + } +} + +###################################################################### +###################################################################### +###################################################################### +###################################################################### + +# We may not have any modules installed +if ( -d "$modules_base/$version" ) { + print STDERR "Running depmod.\n"; + my $ret = system("depmod -a $version"); + if ($ret) { + print STDERR "Failed to run depmod\n"; + exit(1); + } +} + + + +sub find_initrd_tool { + my $hostversion = shift; + my $version = shift; + print STDERR "Finding valid ramdisk creators.\n"; + my @ramdisks = + grep { + my $args = + "$_ " . + "--supported-host-version=$hostversion " . + "--supported-target-version=$version " . + "1>/dev/null 2>&1" + ; + system($args) == 0; + } + split (/[:,\s]+/, $ramdisk); +} + +# The initrd symlink should probably be in the same dir that the +# symlinks are in +if ($initrd) { + my $success = 0; + + # Update-initramfs is called slightly different than mkinitrd and + # mkinitramfs. XXX It should really be made compatible with this stuff + # some how. + my $upgrading = 1; + if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//og) { + $upgrading = 0; + } + my $ret = system("$ramdisk " . ($upgrading ? "-u" : "-c") . " -k " . $version . " >&2"); + $success = 1 unless $ret; + die "Failed to create initrd image.\n" unless $success; + if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//og) { + image_magic("initrd.img", $image_dest); + } + else { + if (! -e "initrd.img") { + handle_missing_link("initrd.img", $image_dest, "initrd.img-$version", + $realimageloc); + } + else { + print STDERR + "Not updating initrd symbolic links since we are being updated/reinstalled \n"; + print STDERR + "($ARGV[1] was configured last, according to dpkg)\n"; + } + } + + if ($initrd && -l "initrd" ) { + unlink "initrd"; + } + + if ($initrd && -l "$image_dir/initrd" && ! $link_in_boot) { + unlink "$image_dir/initrd"; + } +} +else { # Not making an initrd emage + if (-l "initrd.img") { + # Ooh, last image was an initrd image? in any case, we should move it. + my $target = readlink "initrd.img"; + my $real_target = ''; + $real_target = abs_path($target) if defined ($target); + + if (!defined($target) || ! -f "$real_target") { + # Eh. dangling link. can safely be removed. + unlink("initrd.img"); + } else { + if (-l "initrd.img.old" || ! -e "initrd.img.old" ) { + rename("initrd.img", "initrd.img.old"); + } else { + warn "initrd.img.old is not a symlink, not clobbering\n"; + unlink("initrd.img"); + } + } + } +} + +# Warn of a reboot +if (-x $notifier) { + system($notifier); +} + +# Let programs know not to hibernate if the kernel that would be used for +# resume-from-hibernate is likely to differ from the currently running kernel. +system("mountpoint -q /var/run"); +if ($? eq 0) { + system("touch /var/run/do-not-hibernate"); +} + +# Only change the symlinks if we are not being upgraded +if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//og) { + image_magic($kimage, $image_dest); +} +else { + if (! -e "$kimage") { + handle_missing_link($kimage, $image_dest, "$kimage-$version", + $realimageloc); + } + else { + print STDERR + "Not updating image symbolic links since we are being updated/reinstalled \n"; + print STDERR + "($ARGV[1] was configured last, according to dpkg)\n"; + } +} + +# We used to have System.* files in / +if (-e "/System.map" || -e "/System.old") { + unlink '/System.map' if -e '/System.map'; + unlink '/System.old' if -e '/System.old'; +} + +# creating some info about kernel and initrd +if ($DEBUG) { + my $ksize=sprintf("%.0f",(stat($realimageloc . + "$kimage-$version"))[7]/1024)."kB"; + my $initrdsize=''; + if ($initrd) { + $initrdsize=sprintf("%.0f",(stat($realimageloc . + "initrd.img-$version"))[7]/1024)."kB"; + } + + print STDERR <<"EOMSG"; +A new kernel image has been installed at $realimageloc$kimage-$version + (Size: $ksize) + +Symbolic links, unless otherwise specified, can be found in $image_dest + +EOMSG + ; + + if ($initrd) { + print STDERR <<"EOMSGA"; + + Initial rootdisk image: ${realimageloc}initrd.img-$version (Size: $initrdsize) +EOMSGA + ; + } +} + +# set the env var stem +$ENV{'STEM'} = "linux"; +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +## Run user hook script here, if any +if ($postinst_hook) { + &run_hook("postinst", $postinst_hook); +} + +if (-d "/etc/kernel/postinst.d") { + print STDERR "Examining /etc/kernel/postinst.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postinst.d") && + die "Failed to process /etc/kernel/postinst.d"; +} + +if (-d "/etc/kernel/postinst.d/$version") { + print STDERR "Examining /etc/kernel/postinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postinst.d/$version") && + die "Failed to process /etc/kernel/postinst.d/$version"; +} + +LOADER: { + last unless $do_boot_enable; # Exit if explicitly asked to + + last if $loader =~ /silo/i; # SILO does not have to be executed. + last if $loader =~ /yaboot/i; # yaboot does not have to be executed. + last if $loader =~ /milo/i; # MILO does not have to be executed. + last if $loader =~ /nettrom/i; # NETTROM does not have to be executed. + last if $loader =~ /arcboot/i; # ARCBOOT does not have to be executed. + last if $loader =~ /delo/i; # DELO does not have to be executed. + last if $loader =~ /quik/i; # maintainer asked quik invocation to be ignored + + last unless $loaderloc; + last unless -x $loaderloc; + last unless $do_bootloader; + + if (-T "/etc/$loader.conf") { + # Trust and use the existing lilo.conf. + print STDERR "You already have a $Loader configuration in /etc/$loader.conf\n"; + my $ret = &run_lilo(); + exit $ret if $ret; + } +} + + +sub run_lilo (){ + my $ret; + # Try and figure out if the user really wants lilo to be run -- + # since the default is to run the boot laoder, which is ! grub -- but + # the user may be using grub now, and not changed the default. + + # So, if the user has explicitly asked for the loader to be run, or + # if there is no postinst hook, or if there is no grub installed -- + # we are OK. Or else, we ask. + if ($explicit_do_loader || (! ($postinst_hook && -x '/usr/sbin/grub'))) { + print STDERR "Running boot loader as requested\n"; + } else { + print STDERR "Ok, not running $loader\n"; + } + if ($loader =~ /^lilo/io or $loader =~ /vmelilo/io) { + print STDERR "Testing $loader.conf ... \n"; + unlink $temp_file_name; # security + $ret = system("$loaderloc -t >$temp_file_name 2>&1"); + if ($ret) { + print STDERR "Boot loader test failed\n"; + return $ret; + } + unlink "$temp_file_name"; + print STDERR "Testing successful.\n"; + print STDERR "Installing the "; + print STDERR "partition " if $loader =~ /^lilo/io; + print STDERR "boot sector... \n"; + } + + print STDERR "Running $loaderloc ... \n"; + if ($loader =~ /^elilo/io) { + $ret = system("$loaderloc 2>&1 | tee $temp_file_name"); + } else { + $ret = system("$loaderloc >$temp_file_name 2>&1"); + } + if ($ret) { + print STDERR "Boot loader failed to run\n"; + return $ret; + } + unlink $temp_file_name; + print STDERR "Installation successful.\n"; + return 0; +} + +exit 0; + +__END__ + --- linux-2.6.32.orig/debian/control-scripts/preinst +++ linux-2.6.32/debian/control-scripts/preinst @@ -0,0 +1,299 @@ +#! /usr/bin/perl +# -*- Mode: Cperl -*- +# image.preinst --- +# Author : Manoj Srivastava ( srivasta@tiamat.datasync.com ) +# Created On : Sun Jun 14 03:38:02 1998 +# Created On Node : tiamat.datasync.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Sun Sep 24 14:04:42 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 99 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# + +# +#use strict; #for debugging + +use Debconf::Client::ConfModule qw(:all); +version('2.0'); +my $capb=capb("backup"); + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, nettrom + # or elilo +my $image_dir = "/boot"; # where the image is located +my $initrd = "YES"; # initrd kernel +my $use_hard_links = ''; # hardlinks do not wirk across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_src_link = 'YES'; # There is no harm in checking the link +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; # List of tools to create initial ram fs. +my $package_name = "linux-image-$version"; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; + + +#known variables +my @boilerplate = (); +my @silotemplate = (); +my @quiktemplate = (); +my @palotemplate = (); +my @vmelilotemplate = (); +my $bootdevice = ''; +my $rootdevice = ''; +my $rootdisk = ''; +my $rootpartition = ''; +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $CONF_LOC = '/etc/kernel-img.conf'; +my $relative_links = ''; +my $silent_loader = ''; +my $warn_reboot = ''; # Warn that we are installing a version of + # the kernel we are running + +my $modules_base = '/lib/modules'; + +die "Pre inst Internal error. Aborting." unless $version; + +exit 0 if $ARGV[0] =~ /abort-upgrade/; +exit 1 unless $ARGV[0] =~ /(install|upgrade)/; + +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlinks\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + $relink_src_link = '' if /^\s*relink_src_link\s*=\s*(no|false|0)\s*$/ig; + $relink_build_link = '' if /^\s*relink_build_link\s*=\s*(no|false|0)\s*$/ig; + $force_build_link = '' if /^\s*force_build_link\s*=\s*(no|false|0)\s*$/ig; + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + $relink_src_link = 'Yes' if /^\s*relink_src_link\s*=\s*(yes|true|1)\s*$/ig; + $relink_build_link = 'Yes' if /^\s*relink_build_link\s*=\s*(yes|true|1)\s*$/ig; + $force_build_link = 'Yes' if /^\s*force_build_link\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + $have_conffile = "Yes"; # stop perl complaining + } +} + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + +# About to upgrade this package from version $2 TO THIS VERSION. +# "prerm upgrade" has already been called for the old version of +# this package. + +sub find_initrd_tool { + my $hostversion = shift; + my $version = shift; + my @ramdisks = + grep { + my $args = + "$_ " . + "--supported-host-version=$hostversion " . + "--supported-target-version=$version " . + "1>/dev/null 2>&1" + ; + system($args) == 0; + } + split (/[:,\s]+/, $ramdisk); +} + +sub check { + my $version = shift; + my $lib_modules="$modules_base/$version"; + my $message = ''; + + if (-d "$lib_modules") { + opendir(DIR, $lib_modules) || die "can’t opendir $lib_modules: $!"; + my @children = readdir(DIR); + if ($#children > 1) { + my @dirs = grep { -d "$lib_modules/$_" } @children; + if ($#dirs > 1) { # we have subdirs + my $dir_message=''; + for my $dir (@dirs) { + if ($dir =~/kernel$/) { + $dir_message="An older install was detected.\n"; + } + else { + $dir_message="Module sub-directories were detected.\n" + unless $dir_message; + } + } + $message += $dir_message if $dir_message; + } + + my @links = grep { -l "$lib_modules/$_" } @children; + if ($#links > -1) { + my $links_message = ''; + for my $link (@links) { + next if ($link =~ /^build$/); + next if ($link =~ /^source$/); + $links_message = "Symbolic links were detected in $modules_base/$version.\n"; + } + $message += $links_message if $links_message; + } + my @files = grep { -f "$lib_modules/$_" } @children; + $message += "Additional files also exist in $modules_base/$version.\n" + if ($#files > -1); + } + } + else { $message .= "$lib_modules does not exist. ";} + return $message; +} + +if (-d "$modules_base/$version") { + my $errors=check($version); + warn "Info:\n$errors\n" if $errors; +} + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + + +## Run user hook script here, if any +if (-x "$preinst_hook") { + &run_hook("preinst", $preinst_hook); +} +if (-d "/etc/kernel/preinst.d") { + print STDERR "Examining /etc/kernel/preinst.d/\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version" . + " /etc/kernel/preinst.d") && + die "Failed to process /etc/kernel/preinst.d"; +} +if (-d "/etc/kernel/preinst.d/$version") { + print STDERR "Examining /etc/kernel/preinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version" . + " /etc/kernel/preinst.d/$version") && + die "Failed to process /etc/kernel/preinst.d/$version"; +} +print STDERR "Done.\n"; + +exit 0; + +__END__ + + --- linux-2.6.32.orig/debian/control-scripts/postrm +++ linux-2.6.32/debian/control-scripts/postrm @@ -0,0 +1,354 @@ +#! /usr/bin/perl +# -*- Mode: Cperl -*- +# image.postrm --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Sat May 15 11:05:13 1999 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Wed Sep 13 11:26:19 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 57 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# $Id: image.postrm,v 1.31 2003/10/07 16:24:20 srivasta Exp $ +# + + +# +#use strict; #for debugging +use Cwd 'abs_path'; + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, or nettrom +my $image_dir = "/boot"; # where the image is located +my $clobber_modules = ''; # target machine defined +my $initrd = "YES"; # initrd kernel +my $do_initrd = ''; # Normally, we don't +my $warn_initrd = 'YES'; # Normally we do +my $use_hard_links = ''; # hardlinks do not work across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # we shall not create a dangling link +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; +my $package_name = "linux-image-$version"; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; + + +# This should not point to /tmp, because of security risks. +my $temp_file_name = "/var/log/$loader" . "_log.$$"; + +#known variables +my @boilerplate = (); +my @silotemplate = (); +my @quiktemplate = (); +my @palotemplate = (); +my @vmelilotemplate = (); +my $bootdevice = ''; +my $rootdevice = ''; +my $rootdisk = ''; +my $rootpartition = ''; +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $CONF_LOC = '/etc/kernel-img.conf'; +my $relative_links = ''; +my $silent_modules = ''; +my $silent_loader = ''; +my $warn_reboot = 'Yes'; # Warn that we are installing a version of + # the kernel we are running + +chdir('/') or die "could not chdir to /:$!\n"; +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlinks\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $clobber_modules = '' if /^\s*clobber_modules\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $do_initrd = '' if /^\s*do_initrd\s*=\s*(no|false|0)\s*$/ig; + $warn_initrd = '' if /^\s*warn_initrd\s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_modules = '' if /^\s*silent_modules\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + $relink_build_link = '' if /^\s*relink_build_link\s*=\s*(no|false|0)\s*$/ig; + $force_build_link = '' if /^\s*force_build_link\s*=\s*(no|false|0)\s*$/ig; + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $clobber_modules = "Yes" if /^\s*clobber_modules\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $do_initrd = "Yes" if /^\s*do_initrd\s*=\s*(yes|true|1)\s*$/ig; + $warn_initrd = "Yes" if /^\s*warn_initrd\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_modules = 'Yes' if /^\s*silent_modules\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + $relink_build_link = 'Yes' if /^\s*relink_build_link\s*=\s*(yes|true|1)\s*$/ig; + $force_build_link = 'Yes' if /^\s*force_build_link\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + } +} + +if ($link_in_boot) { + $image_dest = "/$image_dir/"; + $image_dest =~ s|^/*|/|o; +} + +$image_dest = "$image_dest/"; +$image_dest =~ s|/+$|/|o; + +# The destdir may be gone by now. +if (-d "$image_dest") { + chdir("$image_dest") or die "could not chdir to $image_dest:$!\n"; +} + +# Paranoid check to make sure that the correct value is put in there +if (! $kimage) {$kimage = "vmlinuz"} # Hmm. empty +elsif ($kimage =~ m/^b?uImage$/o) {$kimage = "vmlinuz"} # these produce vmlinuz +elsif ($kimage =~ m/^b?zImage$/o) {$kimage = "vmlinuz"} # these produce vmlinuz +elsif ($kimage =~ m/^[iI]mage$/o) { my $nop = $kimage;} +elsif ($kimage =~ m/^vmlinux$/o) { my $nop = $kimage;} +else {$kimage = "vmlinuz"} # default + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +sub remove_sym_link { + my $bad_image = $_[0]; + + warn "Removing symbolic link $bad_image \n"; + if ($loader =~ /lilo/i) + { + warn "Unless you used the optional flag in lilo, \n"; + } + warn " you may need to re-run your boot loader" . ($loader ? "[$loader]":"") + . "\n"; + # Remove the dangling link + unlink "$bad_image"; +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +sub CanonicalizePath { + my $path = join '/', @_; + my @work = split '/', $path; + my @out; + my $is_absolute; + + if (@work && $work[0] eq "") { $is_absolute = 1; shift @work; } + + while (@work) { + my $seg = shift @work; + if ($seg eq "." || $seg eq "") { + } elsif ($seg eq "..") { + if (@out && $out[-1] ne "..") { + pop @out; + } else { + # Leading "..", or "../..", etc. + push @out, $seg; + } + } else { + push @out, $seg; + } + } + + unshift @out, "" if $is_absolute; + return join('/', @out); +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +# This removes dangling symlinks. What do we do about hard links? Surely a +# something with the nane $image_dest . "$kimage" ought not to be left behind? +sub image_magic { + my $kimage = $_[0]; + my $image_dest = $_[1]; + + if (-l "$kimage") { + # There is a symbolic link + my $force_move = 0; + my $vmlinuz_target = readlink "$kimage"; + my $real_target = ''; + $real_target = abs_path($vmlinuz_target) if defined ($vmlinuz_target); + if (!defined($vmlinuz_target) || ! -f "$real_target") { + # what, a dangling symlink? + warn "The link " . $image_dest . "$kimage is a damaged link\n"; + # Remove the dangling link + &remove_sym_link("$kimage"); + } + else { + my $canonical_target = CanonicalizePath("$vmlinuz_target"); + if (! -e $canonical_target) { + warn "The link " . $image_dest . "$kimage is a dangling link\n"; + &remove_sym_link("$kimage"); + } + } + } +} + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + warn "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + warn "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +## Run user hook script here, if any +if ($postrm_hook) { + &run_hook("postrm", $postrm_hook); +} +if (-d "/etc/kernel/postrm.d") { + warn "Examining /etc/kernel/postrm.d .\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postrm.d") && + die "Failed to process /etc/kernel/postrm.d"; +} +if (-d "/etc/kernel/postrm.d/$version") { + warn "Examining /etc/kernel/postrm.d/$version .\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postrm.d/$version") && + die "Failed to process /etc/kernel/postrm.d/$version"; +} + +# check and remove damaged and dangling symlinks +if ($ARGV[0] !~ /upgrade/) { + system("$ramdisk -d -k " . $version . " > /dev/null 2>&1"); + if (-f $realimageloc . "initrd.img-$version.bak") { + unlink $realimageloc . "initrd.img-$version.bak"; + } + image_magic($kimage, $image_dest); + image_magic($kimage . ".old", $image_dest); + image_magic("initrd.img", $image_dest) if $initrd; + image_magic("initrd.img.old", $image_dest) if $initrd; +} + +exit 0; + +__END__ + + + + + + --- linux-2.6.32.orig/sound/mips/sgio2audio.c +++ linux-2.6.32/sound/mips/sgio2audio.c @@ -609,7 +609,7 @@ /* alloc virtual 'dma' area */ if (runtime->dma_area) vfree(runtime->dma_area); - runtime->dma_area = vmalloc(size); + runtime->dma_area = vmalloc_user(size); if (runtime->dma_area == NULL) return -ENOMEM; runtime->dma_bytes = size; --- linux-2.6.32.orig/sound/pci/atiixp.c +++ linux-2.6.32/sound/pci/atiixp.c @@ -297,6 +297,7 @@ MODULE_DEVICE_TABLE(pci, snd_atiixp_ids); static struct snd_pci_quirk atiixp_quirks[] __devinitdata = { + SND_PCI_QUIRK(0x105b, 0x0c81, "Foxconn RC4107MA-RS2", 0), SND_PCI_QUIRK(0x15bd, 0x3100, "DFI RS482", 0), { } /* terminator */ }; --- linux-2.6.32.orig/sound/pci/via82xx.c +++ linux-2.6.32/sound/pci/via82xx.c @@ -1791,6 +1791,12 @@ .type = AC97_TUNE_HP_ONLY }, { + .subvendor = 0x110a, + .subdevice = 0x0079, + .name = "Fujitsu Siemens D1289", + .type = AC97_TUNE_HP_ONLY + }, + { .subvendor = 0x1019, .subdevice = 0x0a81, .name = "ECS K7VTA3", --- linux-2.6.32.orig/sound/pci/maestro3.c +++ linux-2.6.32/sound/pci/maestro3.c @@ -849,6 +849,7 @@ struct snd_kcontrol *master_switch; struct snd_kcontrol *master_volume; struct tasklet_struct hwvol_tq; + unsigned int in_suspend; #ifdef CONFIG_PM u16 *suspend_mem; @@ -884,6 +885,7 @@ MODULE_DEVICE_TABLE(pci, snd_m3_ids); static struct snd_pci_quirk m3_amp_quirk_list[] __devinitdata = { + SND_PCI_QUIRK(0x0E11, 0x0094, "Compaq Evo N600c", 0x0c), SND_PCI_QUIRK(0x10f7, 0x833e, "Panasonic CF-28", 0x0d), SND_PCI_QUIRK(0x10f7, 0x833d, "Panasonic CF-72", 0x0d), SND_PCI_QUIRK(0x1033, 0x80f1, "NEC LM800J/7", 0x03), @@ -1613,6 +1615,11 @@ outb(0x88, chip->iobase + SHADOW_MIX_REG_MASTER); outb(0x88, chip->iobase + HW_VOL_COUNTER_MASTER); + /* Ignore spurious HV interrupts during suspend / resume, this avoids + mistaking them for a mute button press. */ + if (chip->in_suspend) + return; + if (!chip->master_switch || !chip->master_volume) return; @@ -2424,6 +2431,7 @@ if (chip->suspend_mem == NULL) return 0; + chip->in_suspend = 1; snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); snd_pcm_suspend_all(chip->pcm); snd_ac97_suspend(chip->ac97); @@ -2497,6 +2505,7 @@ snd_m3_hv_init(chip); snd_power_change_state(card, SNDRV_CTL_POWER_D0); + chip->in_suspend = 0; return 0; } #endif /* CONFIG_PM */ --- linux-2.6.32.orig/sound/pci/cmipci.c +++ linux-2.6.32/sound/pci/cmipci.c @@ -941,13 +941,21 @@ struct snd_pcm_substream *substream) { size_t ptr; - unsigned int reg; + unsigned int reg, rem, tries; + if (!rec->running) return 0; #if 1 // this seems better.. reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2; - ptr = rec->dma_size - (snd_cmipci_read_w(cm, reg) + 1); - ptr >>= rec->shift; + for (tries = 0; tries < 3; tries++) { + rem = snd_cmipci_read_w(cm, reg); + if (rem < rec->dma_size) + goto ok; + } + printk(KERN_ERR "cmipci: invalid PCM pointer: %#x\n", rem); + return SNDRV_PCM_POS_XRUN; +ok: + ptr = (rec->dma_size - (rem + 1)) >> rec->shift; #else reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1; ptr = snd_cmipci_read(cm, reg) - rec->offset; --- linux-2.6.32.orig/sound/pci/ice1712/juli.c +++ linux-2.6.32/sound/pci/ice1712/juli.c @@ -504,6 +504,31 @@ } /* + * suspend/resume + * */ + +#ifdef CONFIG_PM +static int juli_resume(struct snd_ice1712 *ice) +{ + struct snd_akm4xxx *ak = ice->akm; + struct juli_spec *spec = ice->spec; + /* akm4358 un-reset, un-mute */ + snd_akm4xxx_reset(ak, 0); + /* reinit ak4114 */ + snd_ak4114_reinit(spec->ak4114); + return 0; +} + +static int juli_suspend(struct snd_ice1712 *ice) +{ + struct snd_akm4xxx *ak = ice->akm; + /* akm4358 reset and soft-mute */ + snd_akm4xxx_reset(ak, 1); + return 0; +} +#endif + +/* * initialize the chip */ @@ -646,6 +671,13 @@ ice->set_spdif_clock = juli_set_spdif_clock; ice->spdif.ops.open = juli_spdif_in_open; + +#ifdef CONFIG_PM + ice->pm_resume = juli_resume; + ice->pm_suspend = juli_suspend; + ice->pm_suspend_enabled = 1; +#endif + return 0; } --- linux-2.6.32.orig/sound/pci/ice1712/maya44.c +++ linux-2.6.32/sound/pci/ice1712/maya44.c @@ -347,7 +347,7 @@ /* known working input slots (0-4) */ #define MAYA_LINE_IN 1 /* in-2 */ -#define MAYA_MIC_IN 4 /* in-5 */ +#define MAYA_MIC_IN 3 /* in-4 */ static void wm8776_select_input(struct snd_maya44 *chip, int idx, int line) { @@ -393,8 +393,8 @@ int changed; mutex_lock(&chip->mutex); - changed = maya_set_gpio_bits(chip->ice, GPIO_MIC_RELAY, - sel ? GPIO_MIC_RELAY : 0); + changed = maya_set_gpio_bits(chip->ice, 1 << GPIO_MIC_RELAY, + sel ? (1 << GPIO_MIC_RELAY) : 0); wm8776_select_input(chip, 0, sel ? MAYA_MIC_IN : MAYA_LINE_IN); mutex_unlock(&chip->mutex); return changed; --- linux-2.6.32.orig/sound/pci/mixart/mixart.c +++ linux-2.6.32/sound/pci/mixart/mixart.c @@ -1161,13 +1161,15 @@ unsigned long count, unsigned long pos) { struct mixart_mgr *mgr = entry->private_data; + unsigned long maxsize; - count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ - if(count <= 0) + if (pos >= MIXART_BA0_SIZE) return 0; - if(pos + count > MIXART_BA0_SIZE) - count = (long)(MIXART_BA0_SIZE - pos); - if(copy_to_user_fromio(buf, MIXART_MEM( mgr, pos ), count)) + maxsize = MIXART_BA0_SIZE - pos; + if (count > maxsize) + count = maxsize; + count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ + if (copy_to_user_fromio(buf, MIXART_MEM(mgr, pos), count)) return -EFAULT; return count; } @@ -1180,13 +1182,15 @@ unsigned long count, unsigned long pos) { struct mixart_mgr *mgr = entry->private_data; + unsigned long maxsize; - count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ - if(count <= 0) + if (pos > MIXART_BA1_SIZE) return 0; - if(pos + count > MIXART_BA1_SIZE) - count = (long)(MIXART_BA1_SIZE - pos); - if(copy_to_user_fromio(buf, MIXART_REG( mgr, pos ), count)) + maxsize = MIXART_BA1_SIZE - pos; + if (count > maxsize) + count = maxsize; + count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ + if (copy_to_user_fromio(buf, MIXART_REG(mgr, pos), count)) return -EFAULT; return count; } --- linux-2.6.32.orig/sound/pci/ctxfi/ctatc.c +++ linux-2.6.32/sound/pci/ctxfi/ctatc.c @@ -166,18 +166,7 @@ static unsigned long atc_get_ptp_phys(struct ct_atc *atc, int index) { - struct ct_vm *vm; - void *kvirt_addr; - unsigned long phys_addr; - - vm = atc->vm; - kvirt_addr = vm->get_ptp_virt(vm, index); - if (kvirt_addr == NULL) - phys_addr = (~0UL); - else - phys_addr = virt_to_phys(kvirt_addr); - - return phys_addr; + return atc->vm->get_ptp_phys(atc->vm, index); } static unsigned int convert_format(snd_pcm_format_t snd_format) @@ -1669,7 +1658,7 @@ } /* Set up device virtual memory management object */ - err = ct_vm_create(&atc->vm); + err = ct_vm_create(&atc->vm, pci); if (err < 0) goto error1; --- linux-2.6.32.orig/sound/pci/ctxfi/ctvmem.c +++ linux-2.6.32/sound/pci/ctxfi/ctvmem.c @@ -138,7 +138,7 @@ return NULL; } - ptp = vm->ptp[0]; + ptp = (unsigned long *)vm->ptp[0].area; pte_start = (block->addr >> CT_PAGE_SHIFT); pages = block->size >> CT_PAGE_SHIFT; for (i = 0; i < pages; i++) { @@ -158,25 +158,25 @@ } /* * - * return the host (kmalloced) addr of the @index-th device - * page talbe page on success, or NULL on failure. - * The first returned NULL indicates the termination. + * return the host physical addr of the @index-th device + * page table page on success, or ~0UL on failure. + * The first returned ~0UL indicates the termination. * */ -static void * -ct_get_ptp_virt(struct ct_vm *vm, int index) +static dma_addr_t +ct_get_ptp_phys(struct ct_vm *vm, int index) { - void *addr; + dma_addr_t addr; - addr = (index >= CT_PTP_NUM) ? NULL : vm->ptp[index]; + addr = (index >= CT_PTP_NUM) ? ~0UL : vm->ptp[index].addr; return addr; } -int ct_vm_create(struct ct_vm **rvm) +int ct_vm_create(struct ct_vm **rvm, struct pci_dev *pci) { struct ct_vm *vm; struct ct_vm_block *block; - int i; + int i, err = 0; *rvm = NULL; @@ -188,23 +188,21 @@ /* Allocate page table pages */ for (i = 0; i < CT_PTP_NUM; i++) { - vm->ptp[i] = kmalloc(PAGE_SIZE, GFP_KERNEL); - if (!vm->ptp[i]) + err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, + snd_dma_pci_data(pci), + PAGE_SIZE, &vm->ptp[i]); + if (err < 0) break; } - if (!i) { + if (err < 0) { /* no page table pages are allocated */ - kfree(vm); + ct_vm_destroy(vm); return -ENOMEM; } vm->size = CT_ADDRS_PER_PAGE * i; - /* Initialise remaining ptps */ - for (; i < CT_PTP_NUM; i++) - vm->ptp[i] = NULL; - vm->map = ct_vm_map; vm->unmap = ct_vm_unmap; - vm->get_ptp_virt = ct_get_ptp_virt; + vm->get_ptp_phys = ct_get_ptp_phys; INIT_LIST_HEAD(&vm->unused); INIT_LIST_HEAD(&vm->used); block = kzalloc(sizeof(*block), GFP_KERNEL); @@ -242,7 +240,7 @@ /* free allocated page table pages */ for (i = 0; i < CT_PTP_NUM; i++) - kfree(vm->ptp[i]); + snd_dma_free_pages(&vm->ptp[i]); vm->size = 0; --- linux-2.6.32.orig/sound/pci/ctxfi/ctvmem.h +++ linux-2.6.32/sound/pci/ctxfi/ctvmem.h @@ -22,6 +22,8 @@ #include #include +#include +#include /* The chip can handle the page table of 4k pages * (emu20k1 can handle even 8k pages, but we don't use it right now) @@ -41,7 +43,7 @@ /* Virtual memory management object for card device */ struct ct_vm { - void *ptp[CT_PTP_NUM]; /* Device page table pages */ + struct snd_dma_buffer ptp[CT_PTP_NUM]; /* Device page table pages */ unsigned int size; /* Available addr space in bytes */ struct list_head unused; /* List of unused blocks */ struct list_head used; /* List of used blocks */ @@ -52,10 +54,10 @@ int size); /* Unmap device logical addr area. */ void (*unmap)(struct ct_vm *, struct ct_vm_block *block); - void *(*get_ptp_virt)(struct ct_vm *vm, int index); + dma_addr_t (*get_ptp_phys)(struct ct_vm *vm, int index); }; -int ct_vm_create(struct ct_vm **rvm); +int ct_vm_create(struct ct_vm **rvm, struct pci_dev *pci); void ct_vm_destroy(struct ct_vm *vm); #endif /* CTVMEM_H */ --- linux-2.6.32.orig/sound/pci/hda/hda_local.h +++ linux-2.6.32/sound/pci/hda/hda_local.h @@ -437,6 +437,15 @@ static inline int snd_hda_create_hwdep(struct hda_codec *codec) { return 0; } #endif +#ifdef CONFIG_SND_HDA_POWER_SAVE +int snd_hda_hwdep_add_power_sysfs(struct hda_codec *codec); +#else +static inline int snd_hda_hwdep_add_power_sysfs(struct hda_codec *codec) +{ + return 0; +} +#endif + #ifdef CONFIG_SND_HDA_RECONFIG int snd_hda_hwdep_add_sysfs(struct hda_codec *codec); #else --- linux-2.6.32.orig/sound/pci/hda/patch_realtek.c +++ linux-2.6.32/sound/pci/hda/patch_realtek.c @@ -400,6 +400,8 @@ unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id); if (mux_idx >= spec->num_mux_defs) mux_idx = 0; + if (!spec->input_mux[mux_idx].num_items && mux_idx > 0) + mux_idx = 0; return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo); } @@ -428,6 +430,8 @@ mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx; imux = &spec->input_mux[mux_idx]; + if (!imux->num_items && mux_idx > 0) + imux = &spec->input_mux[0]; type = get_wcaps_type(get_wcaps(codec, nid)); if (type == AC_WID_AUD_MIX) { @@ -2401,6 +2405,8 @@ "Speaker Playback Switch", "Mono Playback Switch", "IEC958 Playback Switch", + "Line-Out Playback Switch", + "PCM Playback Switch", NULL, }; @@ -3965,7 +3971,7 @@ SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG), SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734), SND_PCI_QUIRK(0x1734, 0x1094, "FSC Amilo M1451G", ALC880_FUJITSU), - SND_PCI_QUIRK(0x1734, 0x10ac, "FSC", ALC880_UNIWILL), + SND_PCI_QUIRK(0x1734, 0x10ac, "FSC AMILO Xi 1526", ALC880_F1734), SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU), SND_PCI_QUIRK(0x1854, 0x0018, "LG LW20", ALC880_LG_LW), SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_LG), @@ -6246,6 +6252,7 @@ static struct snd_pci_quirk alc260_cfg_tbl[] = { SND_PCI_QUIRK(0x1025, 0x007b, "Acer C20x", ALC260_ACER), + SND_PCI_QUIRK(0x1025, 0x007f, "Acer", ALC260_WILL), SND_PCI_QUIRK(0x1025, 0x008f, "Acer", ALC260_ACER), SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FAVORIT100), SND_PCI_QUIRK(0x103c, 0x2808, "HP d5700", ALC260_HP_3013), @@ -6275,7 +6282,7 @@ .num_dacs = ARRAY_SIZE(alc260_dac_nids), .dac_nids = alc260_dac_nids, .num_adc_nids = ARRAY_SIZE(alc260_dual_adc_nids), - .adc_nids = alc260_adc_nids, + .adc_nids = alc260_dual_adc_nids, .num_channel_mode = ARRAY_SIZE(alc260_modes), .channel_mode = alc260_modes, .input_mux = &alc260_capture_source, @@ -7040,8 +7047,8 @@ HDA_BIND_MUTE ("Surround Playback Switch", 0x0d, 0x02, HDA_INPUT), HDA_CODEC_VOLUME("LFE Playback Volume", 0x0e, 0x00, HDA_OUTPUT), HDA_BIND_MUTE ("LFE Playback Switch", 0x0e, 0x02, HDA_INPUT), - HDA_CODEC_VOLUME("HP Playback Volume", 0x0f, 0x00, HDA_OUTPUT), - HDA_BIND_MUTE ("HP Playback Switch", 0x0f, 0x02, HDA_INPUT), + HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0f, 0x00, HDA_OUTPUT), + HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT), HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), @@ -7428,6 +7435,7 @@ {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, {0x14, AC_VERB_SET_CONNECT_SEL, 0x03}, + {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, /* Front Mic pin: input vref at 80% */ {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, @@ -7552,6 +7560,27 @@ spec->autocfg.speaker_pins[0] = 0x14; } +static void alc885_mb5_automute(struct hda_codec *codec) +{ + unsigned int present; + + present = snd_hda_codec_read(codec, 0x14, 0, + AC_VERB_GET_PIN_SENSE, 0) & 0x80000000; + snd_hda_codec_amp_stereo(codec, 0x18, HDA_OUTPUT, 0, + HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0); + snd_hda_codec_amp_stereo(codec, 0x1a, HDA_OUTPUT, 0, + HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0); + +} + +static void alc885_mb5_unsol_event(struct hda_codec *codec, + unsigned int res) +{ + /* Headphone insertion or removal. */ + if ((res >> 26) == ALC880_HP_EVENT) + alc885_mb5_automute(codec); +} + static struct hda_verb alc882_targa_verbs[] = { {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, @@ -8839,7 +8868,7 @@ SND_PCI_QUIRK(0x1462, 0x040d, "MSI", ALC883_TARGA_2ch_DIG), SND_PCI_QUIRK(0x1462, 0x0579, "MSI", ALC883_TARGA_2ch_DIG), SND_PCI_QUIRK(0x1462, 0x28fb, "Targa T8", ALC882_TARGA), /* MSI-1049 T8 */ - SND_PCI_QUIRK(0x1462, 0x2fb3, "MSI", ALC883_TARGA_2ch_DIG), + SND_PCI_QUIRK(0x1462, 0x2fb3, "MSI", ALC882_AUTO), SND_PCI_QUIRK(0x1462, 0x6668, "MSI", ALC882_6ST_DIG), SND_PCI_QUIRK(0x1462, 0x3729, "MSI S420", ALC883_TARGA_DIG), SND_PCI_QUIRK(0x1462, 0x3783, "NEC S970", ALC883_TARGA_DIG), @@ -8866,6 +8895,7 @@ SND_PCI_QUIRK(0x1462, 0xaa08, "MSI", ALC883_TARGA_2ch_DIG), SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG), + SND_PCI_QUIRK(0x1558, 0x0571, "Clevo laptop M570U", ALC883_3ST_6ch_DIG), SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720), SND_PCI_QUIRK(0x1558, 0x0722, "Clevo laptop M720SR", ALC883_CLEVO_M720), SND_PCI_QUIRK(0x1558, 0x5409, "Clevo laptop M540R", ALC883_CLEVO_M540R), @@ -8893,7 +8923,7 @@ SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC889_INTEL), SND_PCI_QUIRK(0x8086, 0x0021, "Intel IbexPeak", ALC889A_INTEL), SND_PCI_QUIRK(0x8086, 0x3b56, "Intel IbexPeak", ALC889A_INTEL), - SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch), + SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC882_6ST_DIG), {} }; @@ -8994,6 +9024,8 @@ .input_mux = &mb5_capture_source, .dig_out_nid = ALC882_DIGOUT_NID, .dig_in_nid = ALC882_DIGIN_NID, + .unsol_event = alc885_mb5_unsol_event, + .init_hook = alc885_mb5_automute, }, [ALC885_MACPRO] = { .mixers = { alc882_macpro_mixer }, @@ -9141,6 +9173,8 @@ .dac_nids = alc883_dac_nids, .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), .adc_nids = alc889_adc_nids, + .capsrc_nids = alc889_capsrc_nids, + .capsrc_nids = alc889_capsrc_nids, .dig_out_nid = ALC883_DIGOUT_NID, .dig_in_nid = ALC883_DIGIN_NID, .slave_dig_outs = alc883_slave_dig_outs, @@ -9187,6 +9221,7 @@ .dac_nids = alc883_dac_nids, .adc_nids = alc883_adc_nids_alt, .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_alt), + .capsrc_nids = alc883_capsrc_nids, .dig_out_nid = ALC883_DIGOUT_NID, .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .channel_mode = alc883_3ST_2ch_modes, @@ -9333,6 +9368,7 @@ .dac_nids = alc883_dac_nids, .adc_nids = alc883_adc_nids_alt, .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_alt), + .capsrc_nids = alc883_capsrc_nids, .num_channel_mode = ARRAY_SIZE(alc883_sixstack_modes), .channel_mode = alc883_sixstack_modes, .input_mux = &alc883_capture_source, @@ -9394,6 +9430,7 @@ .dac_nids = alc883_dac_nids, .adc_nids = alc883_adc_nids_alt, .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_alt), + .capsrc_nids = alc883_capsrc_nids, .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), .channel_mode = alc883_3ST_2ch_modes, .input_mux = &alc883_lenovo_101e_capture_source, @@ -9573,6 +9610,7 @@ alc880_gpio1_init_verbs }, .adc_nids = alc883_adc_nids, .num_adc_nids = ARRAY_SIZE(alc883_adc_nids), + .capsrc_nids = alc883_capsrc_nids, .dac_nids = alc883_dac_nids, .num_dacs = ARRAY_SIZE(alc883_dac_nids), .channel_mode = alc889A_mb31_6ch_modes, @@ -9711,6 +9749,8 @@ continue; mux_idx = c >= spec->num_mux_defs ? 0 : c; imux = &spec->input_mux[mux_idx]; + if (!imux->num_items && mux_idx > 0) + imux = &spec->input_mux[0]; for (idx = 0; idx < conns; idx++) { /* if the current connection is the selected one, * unmute it as default - otherwise mute it @@ -10146,7 +10186,7 @@ struct alc_spec *spec = codec->spec; spec->autocfg.hp_pins[0] = 0x15; - spec->autocfg.speaker_pins[0] = 0x0c; /* HACK: not actually a pin */ + spec->autocfg.speaker_pins[0] = 0x14; } static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = { @@ -10581,6 +10621,13 @@ {} }; +static struct hda_verb alc262_lenovo_3000_init_verbs[] = { + /* Front Mic pin: input vref at 50% */ + {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50}, + {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, + {} +}; + static struct hda_input_mux alc262_fujitsu_capture_source = { .num_items = 3, .items = { @@ -11580,9 +11627,9 @@ .num_channel_mode = ARRAY_SIZE(alc262_modes), .channel_mode = alc262_modes, .input_mux = &alc262_capture_source, - .unsol_event = alc_automute_amp_unsol_event, + .unsol_event = alc_sku_unsol_event, .setup = alc262_hp_t5735_setup, - .init_hook = alc_automute_amp, + .init_hook = alc_inithook, }, [ALC262_HP_RP5700] = { .mixers = { alc262_hp_rp5700_mixer }, @@ -11648,7 +11695,8 @@ [ALC262_LENOVO_3000] = { .mixers = { alc262_lenovo_3000_mixer }, .init_verbs = { alc262_init_verbs, alc262_EAPD_verbs, - alc262_lenovo_3000_unsol_verbs }, + alc262_lenovo_3000_unsol_verbs, + alc262_lenovo_3000_init_verbs }, .num_dacs = ARRAY_SIZE(alc262_dac_nids), .dac_nids = alc262_dac_nids, .hp_nid = 0x03, @@ -14679,6 +14727,8 @@ spec->stream_digital_playback = &alc861_pcm_digital_playback; spec->stream_digital_capture = &alc861_pcm_digital_capture; + if (!spec->cap_mixer) + set_capture_mixer(codec); set_beep_amp(spec, 0x23, 0, HDA_OUTPUT); spec->vmaster_nid = 0x03; @@ -15317,7 +15367,7 @@ static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, const struct auto_pin_cfg *cfg) { - return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x09, 0); + return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x22, 0); } --- linux-2.6.32.orig/sound/pci/hda/hda_intel.c +++ linux-2.6.32/sound/pci/hda/hda_intel.c @@ -116,6 +116,7 @@ "{Intel, ICH9}," "{Intel, ICH10}," "{Intel, PCH}," + "{Intel, CPT}," "{Intel, SCH}," "{ATI, SB450}," "{ATI, SB600}," @@ -437,6 +438,7 @@ /* driver types */ enum { AZX_DRIVER_ICH, + AZX_DRIVER_PCH, AZX_DRIVER_SCH, AZX_DRIVER_ATI, AZX_DRIVER_ATIHDMI, @@ -451,6 +453,7 @@ static char *driver_short_names[] __devinitdata = { [AZX_DRIVER_ICH] = "HDA Intel", + [AZX_DRIVER_PCH] = "HDA Intel PCH", [AZX_DRIVER_SCH] = "HDA Intel MID", [AZX_DRIVER_ATI] = "HDA ATI SB", [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", @@ -1039,6 +1042,7 @@ 0x01, NVIDIA_HDA_ENABLE_COHBIT); break; case AZX_DRIVER_SCH: + case AZX_DRIVER_PCH: pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop); if (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) { pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, @@ -1858,6 +1862,9 @@ if (!bdl_pos_adj[chip->dev_index]) return 1; /* no delayed ack */ + if (WARN_ONCE(!azx_dev->period_bytes, + "hda-intel: zero azx_dev->period_bytes")) + return 0; /* this shouldn't happen! */ if (pos % azx_dev->period_bytes > azx_dev->period_bytes / 2) return 0; /* NG - it's below the period boundary */ return 1; /* OK, it's fine */ @@ -1944,6 +1951,7 @@ struct azx_pcm *apcm; int pcm_dev = cpcm->device; int s, err; + size_t prealloc_min = 64*1024; /* 64KB */ if (pcm_dev >= AZX_MAX_PCMS) { snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n", @@ -1977,10 +1985,21 @@ if (cpcm->stream[s].substreams) snd_pcm_set_ops(pcm, s, &azx_pcm_ops); } + /* buffer pre-allocation */ + + /* subtle, don't allocate a big buffer for modems... + * also, don't just test 32BIT_MASK, since azx supports + * 64-bit DMA in some cases. + */ + /* lennart wants a 2.2MB buffer for 2sec of 48khz */ + if (pcm->dev_class == SNDRV_PCM_CLASS_GENERIC && + chip->pci->dma_mask >= DMA_32BIT_MASK) + prealloc_min = 4 * 1024 * 1024; /* 4MB */ + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, snd_dma_pci_data(chip->pci), - 1024 * 64, 32 * 1024 * 1024); + prealloc_min, 32 * 1024 * 1024); return 0; } @@ -2221,7 +2240,16 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), + SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB), + SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB), + SND_PCI_QUIRK(0x8086, 0xd601, "eMachines T5212", POS_FIX_LPIB), {} }; @@ -2309,6 +2337,7 @@ static struct snd_pci_quirk msi_white_list[] __devinitdata = { SND_PCI_QUIRK(0x103c, 0x30f7, "HP Pavilion dv4t-1300", 1), SND_PCI_QUIRK(0x103c, 0x3607, "HP Compa CQ40", 1), + SND_PCI_QUIRK(0x107b, 0x0380, "Gateway M-6866", 1), {} }; @@ -2325,6 +2354,13 @@ "hda_intel: msi for device %04x:%04x set to %d\n", q->subvendor, q->subdevice, q->value); chip->msi = q->value; + return; + } + + /* NVidia chipsets seem to cause troubles with MSI */ + if (chip->driver_type == AZX_DRIVER_NVIDIA) { + printk(KERN_INFO "hda_intel: Disable MSI for Nvidia chipset\n"); + chip->msi = 0; } } @@ -2374,6 +2410,7 @@ if (bdl_pos_adj[dev] < 0) { switch (chip->driver_type) { case AZX_DRIVER_ICH: + case AZX_DRIVER_PCH: bdl_pos_adj[dev] = 1; break; default: @@ -2436,6 +2473,11 @@ } } + /* disable 64bit DMA address for Teradici */ + /* it does not work with device 6549:1200 subsys e4a2:040b */ + if (chip->driver_type == AZX_DRIVER_TERA) + gcap &= ~ICH6_GCAP_64OK; + /* allow 64bit DMA address if supported by H/W */ if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64))) pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64)); @@ -2643,6 +2685,9 @@ { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH }, /* PCH */ { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH }, + { PCI_DEVICE(0x8086, 0x3b57), .driver_data = AZX_DRIVER_ICH }, + /* CPT */ + { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH }, /* SCH */ { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH }, /* ATI SB 450/600 */ @@ -2689,6 +2734,9 @@ { PCI_DEVICE(0x10de, 0x0ac1), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0ac2), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0ac3), .driver_data = AZX_DRIVER_NVIDIA }, + { PCI_DEVICE(0x10de, 0x0be2), .driver_data = AZX_DRIVER_NVIDIA }, + { PCI_DEVICE(0x10de, 0x0be3), .driver_data = AZX_DRIVER_NVIDIA }, + { PCI_DEVICE(0x10de, 0x0be4), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0d94), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0d95), .driver_data = AZX_DRIVER_NVIDIA }, { PCI_DEVICE(0x10de, 0x0d96), .driver_data = AZX_DRIVER_NVIDIA }, --- linux-2.6.32.orig/sound/pci/hda/hda_codec.c +++ linux-2.6.32/sound/pci/hda/hda_codec.c @@ -515,6 +515,7 @@ struct hda_codec *codec; list_for_each_entry(codec, &bus->codec_list, list) { snd_hda_hwdep_add_sysfs(codec); + snd_hda_hwdep_add_power_sysfs(codec); } return 0; } @@ -2452,9 +2453,11 @@ codec->afg ? codec->afg : codec->mfg, AC_PWRST_D3); #ifdef CONFIG_SND_HDA_POWER_SAVE + snd_hda_update_power_acct(codec); cancel_delayed_work(&codec->power_work); codec->power_on = 0; codec->power_transition = 0; + codec->power_jiffies = jiffies; #endif } @@ -3207,6 +3210,17 @@ { codec->power_count++; codec->power_on = 1; + codec->power_jiffies = jiffies; +} + +void snd_hda_update_power_acct(struct hda_codec *codec) +{ + unsigned long delta = jiffies - codec->power_jiffies; + if (codec->power_on) + codec->power_on_acct += delta; + else + codec->power_off_acct += delta; + codec->power_jiffies += delta; } void snd_hda_power_up(struct hda_codec *codec) @@ -3217,7 +3231,9 @@ if (codec->power_on || codec->power_transition) return; + snd_hda_update_power_acct(codec); codec->power_on = 1; + codec->power_jiffies = jiffies; if (bus->ops.pm_notify) bus->ops.pm_notify(bus); hda_call_codec_resume(codec); --- linux-2.6.32.orig/sound/pci/hda/patch_analog.c +++ linux-2.6.32/sound/pci/hda/patch_analog.c @@ -1003,7 +1003,7 @@ SND_PCI_QUIRK(0x1043, 0x81cb, "ASUS M2N", AD1986A_3STACK), SND_PCI_QUIRK(0x1043, 0x8234, "ASUS M2N", AD1986A_3STACK), SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_3STACK), - SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba", AD1986A_LAPTOP_EAPD), + SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba Satellite L40-10Q", AD1986A_3STACK), SND_PCI_QUIRK(0x144d, 0xb03c, "Samsung R55", AD1986A_3STACK), SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_LAPTOP), SND_PCI_QUIRK(0x144d, 0xc024, "Samsung P50", AD1986A_SAMSUNG_P50), @@ -1789,6 +1789,14 @@ case AD1981_THINKPAD: spec->mixers[0] = ad1981_thinkpad_mixers; spec->input_mux = &ad1981_thinkpad_capture_source; + /* set the upper-limit for mixer amp to 0dB for avoiding the + * possible damage by overloading + */ + snd_hda_override_amp_caps(codec, 0x11, HDA_INPUT, + (0x17 << AC_AMPCAP_OFFSET_SHIFT) | + (0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) | + (0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) | + (1 << AC_AMPCAP_MUTE_SHIFT)); break; case AD1981_TOSHIBA: spec->mixers[0] = ad1981_hp_mixers; --- linux-2.6.32.orig/sound/pci/hda/patch_conexant.c +++ linux-2.6.32/sound/pci/hda/patch_conexant.c @@ -1175,9 +1175,12 @@ switch (codec->subsystem_id >> 16) { case 0x103c: - /* HP laptop has a really bad sound over 0dB on NID 0x17. - * Fix max PCM level to 0 dB - * (originall it has 0x2b steps with 0dB offset 0x14) + case 0x1631: + case 0x1734: + case 0x17aa: + /* HP, Packard Bell, Fujitsu-Siemens & Lenovo laptops have + * really bad sound over 0dB on NID 0x17. Fix max PCM level to + * 0 dB (originally it has 0x2b steps with 0dB offset 0x14) */ snd_hda_override_amp_caps(codec, 0x17, HDA_INPUT, (0x14 << AC_AMPCAP_OFFSET_SHIFT) | @@ -1581,6 +1584,21 @@ #endif } spec->vmaster_nid = 0x13; + + switch (codec->subsystem_id >> 16) { + case 0x103c: + /* HP laptops have really bad sound over 0 dB on NID 0x10. + * Fix max PCM level to 0 dB (originally it has 0x1e steps + * with 0 dB offset 0x17) + */ + snd_hda_override_amp_caps(codec, 0x10, HDA_INPUT, + (0x17 << AC_AMPCAP_OFFSET_SHIFT) | + (0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) | + (0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) | + (1 << AC_AMPCAP_MUTE_SHIFT)); + break; + } + return 0; } @@ -2333,6 +2351,8 @@ SND_PCI_QUIRK(0x1028, 0x02f5, "Dell", CXT5066_DELL_LAPTOP), SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT5066_OLPC_XO_1_5), + SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5), + SND_PCI_QUIRK(0x1179, 0xffe0, "Toshiba Satellite Pro T130-15F", CXT5066_OLPC_XO_1_5), {} }; --- linux-2.6.32.orig/sound/pci/hda/patch_intelhdmi.c +++ linux-2.6.32/sound/pci/hda/patch_intelhdmi.c @@ -684,7 +684,7 @@ { .id = 0x80862801, .name = "G45 DEVBLC", .patch = patch_intel_hdmi }, { .id = 0x80862802, .name = "G45 DEVCTG", .patch = patch_intel_hdmi }, { .id = 0x80862803, .name = "G45 DEVELK", .patch = patch_intel_hdmi }, - { .id = 0x80862804, .name = "G45 DEVIBX", .patch = patch_intel_hdmi }, + { .id = 0x80862804, .name = "G45 DEVIBX", .patch = patch_intel_hdmi_ibexpeak }, { .id = 0x80860054, .name = "Q57 DEVIBX", .patch = patch_intel_hdmi_ibexpeak }, { .id = 0x10951392, .name = "SiI1392 HDMI", .patch = patch_intel_hdmi }, {} /* terminator */ --- linux-2.6.32.orig/sound/pci/hda/patch_sigmatel.c +++ linux-2.6.32/sound/pci/hda/patch_sigmatel.c @@ -1592,6 +1592,10 @@ "Dell Studio 1555", STAC_DELL_M6_DMIC), SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02bd, "Dell Studio 1557", STAC_DELL_M6_DMIC), + SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02fe, + "Dell Studio XPS 1645", STAC_DELL_M6_BOTH), + SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0413, + "Dell Studio 1558", STAC_DELL_M6_BOTH), {} /* terminator */ }; @@ -1712,6 +1716,8 @@ "HP HDX", STAC_HP_HDX), /* HDX16 */ SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3620, "HP dv6", STAC_HP_DV5), + SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3061, + "HP dv6", STAC_HP_DV5), /* HP dv6-1110ax */ SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x7010, "HP", STAC_HP_DV5), SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0233, --- linux-2.6.32.orig/sound/pci/hda/hda_codec.h +++ linux-2.6.32/sound/pci/hda/hda_codec.h @@ -811,6 +811,9 @@ unsigned int power_transition :1; /* power-state in transition */ int power_count; /* current (global) power refcount */ struct delayed_work power_work; /* delayed task for powerdown */ + unsigned long power_on_acct; + unsigned long power_off_acct; + unsigned long power_jiffies; #endif /* codec-specific additional proc output */ @@ -933,6 +936,7 @@ void snd_hda_power_up(struct hda_codec *codec); void snd_hda_power_down(struct hda_codec *codec); #define snd_hda_codec_needs_resume(codec) codec->power_count +void snd_hda_update_power_acct(struct hda_codec *codec); #else static inline void snd_hda_power_up(struct hda_codec *codec) {} static inline void snd_hda_power_down(struct hda_codec *codec) {} --- linux-2.6.32.orig/sound/pci/hda/hda_hwdep.c +++ linux-2.6.32/sound/pci/hda/hda_hwdep.c @@ -154,6 +154,44 @@ return 0; } +#ifdef CONFIG_SND_HDA_POWER_SAVE +static ssize_t power_on_acct_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct snd_hwdep *hwdep = dev_get_drvdata(dev); + struct hda_codec *codec = hwdep->private_data; + snd_hda_update_power_acct(codec); + return sprintf(buf, "%u\n", jiffies_to_msecs(codec->power_on_acct)); +} + +static ssize_t power_off_acct_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct snd_hwdep *hwdep = dev_get_drvdata(dev); + struct hda_codec *codec = hwdep->private_data; + snd_hda_update_power_acct(codec); + return sprintf(buf, "%u\n", jiffies_to_msecs(codec->power_off_acct)); +} + +static struct device_attribute power_attrs[] = { + __ATTR_RO(power_on_acct), + __ATTR_RO(power_off_acct), +}; + +int snd_hda_hwdep_add_power_sysfs(struct hda_codec *codec) +{ + struct snd_hwdep *hwdep = codec->hwdep; + int i; + + for (i = 0; i < ARRAY_SIZE(power_attrs); i++) + snd_add_device_sysfs_file(SNDRV_DEVICE_TYPE_HWDEP, hwdep->card, + hwdep->device, &power_attrs[i]); + return 0; +} +#endif /* CONFIG_SND_HDA_POWER_SAVE */ + #ifdef CONFIG_SND_HDA_RECONFIG /* --- linux-2.6.32.orig/sound/pci/ac97/ac97_patch.c +++ linux-2.6.32/sound/pci/ac97/ac97_patch.c @@ -1867,11 +1867,14 @@ 0x10140523, /* Thinkpad R40 */ 0x10140534, /* Thinkpad X31 */ 0x10140537, /* Thinkpad T41p */ + 0x1014053e, /* Thinkpad R40e */ 0x10140554, /* Thinkpad T42p/R50p */ 0x10140567, /* Thinkpad T43p 2668-G7U */ 0x10140581, /* Thinkpad X41-2527 */ + 0x10280160, /* Dell Dimension 2400 */ 0x104380b0, /* Asus A7V8X-MX */ 0x11790241, /* Toshiba Satellite A-15 S127 */ + 0x1179ff10, /* Toshiba P500 */ 0x144dc01a, /* Samsung NP-X20C004/SEG */ 0 /* end */ }; --- linux-2.6.32.orig/sound/core/hrtimer.c +++ linux-2.6.32/sound/core/hrtimer.c @@ -37,14 +37,22 @@ struct snd_hrtimer { struct snd_timer *timer; struct hrtimer hrt; + atomic_t running; }; static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt) { struct snd_hrtimer *stime = container_of(hrt, struct snd_hrtimer, hrt); struct snd_timer *t = stime->timer; + + if (!atomic_read(&stime->running)) + return HRTIMER_NORESTART; + hrtimer_forward_now(hrt, ns_to_ktime(t->sticks * resolution)); snd_timer_interrupt(stime->timer, t->sticks); + + if (!atomic_read(&stime->running)) + return HRTIMER_NORESTART; return HRTIMER_RESTART; } @@ -58,6 +66,7 @@ hrtimer_init(&stime->hrt, CLOCK_MONOTONIC, HRTIMER_MODE_REL); stime->timer = t; stime->hrt.function = snd_hrtimer_callback; + atomic_set(&stime->running, 0); t->private_data = stime; return 0; } @@ -78,16 +87,18 @@ { struct snd_hrtimer *stime = t->private_data; + atomic_set(&stime->running, 0); + hrtimer_cancel(&stime->hrt); hrtimer_start(&stime->hrt, ns_to_ktime(t->sticks * resolution), HRTIMER_MODE_REL); + atomic_set(&stime->running, 1); return 0; } static int snd_hrtimer_stop(struct snd_timer *t) { struct snd_hrtimer *stime = t->private_data; - - hrtimer_cancel(&stime->hrt); + atomic_set(&stime->running, 0); return 0; } --- linux-2.6.32.orig/sound/core/pcm_native.c +++ linux-2.6.32/sound/core/pcm_native.c @@ -314,10 +314,10 @@ if (!params->info) params->info = hw->info & ~SNDRV_PCM_INFO_FIFO_IN_FRAMES; if (!params->fifo_size) { - if (snd_mask_min(¶ms->masks[SNDRV_PCM_HW_PARAM_FORMAT]) == - snd_mask_max(¶ms->masks[SNDRV_PCM_HW_PARAM_FORMAT]) && - snd_mask_min(¶ms->masks[SNDRV_PCM_HW_PARAM_CHANNELS]) == - snd_mask_max(¶ms->masks[SNDRV_PCM_HW_PARAM_CHANNELS])) { + m = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); + i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); + if (snd_mask_min(m) == snd_mask_max(m) && + snd_interval_min(i) == snd_interval_max(i)) { changed = substream->ops->ioctl(substream, SNDRV_PCM_IOCTL1_FIFO_SIZE, params); if (changed < 0) --- linux-2.6.32.orig/sound/usb/usbaudio.c +++ linux-2.6.32/sound/usb/usbaudio.c @@ -752,7 +752,7 @@ return 0; /* already large enough */ vfree(runtime->dma_area); } - runtime->dma_area = vmalloc(size); + runtime->dma_area = vmalloc_user(size); if (!runtime->dma_area) return -ENOMEM; runtime->dma_bytes = size; @@ -1936,7 +1936,7 @@ struct snd_usb_stream *as = snd_pcm_substream_chip(substream); struct snd_usb_substream *subs = &as->substream[direction]; - if (subs->interface >= 0) { + if (!as->chip->shutdown && subs->interface >= 0) { usb_set_interface(subs->dev, subs->interface, 0); subs->interface = -1; } @@ -3326,6 +3326,32 @@ } /* + * This call will put the synth in "USB send" mode, i.e it will send MIDI + * messages through USB (this is disabled at startup). The synth will + * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB + * sign on its LCD. Values here are chosen based on sniffing USB traffic + * under Windows. + */ +static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev) +{ + int err, actual_length; + + /* "midi send" enable */ + static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 }; + + void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL); + if (!buf) + return -ENOMEM; + err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf, + ARRAY_SIZE(seq), &actual_length, 1000); + kfree(buf); + if (err < 0) + return err; + + return 0; +} + +/* * Setup quirks */ #define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */ @@ -3616,6 +3642,12 @@ goto __err_val; } + /* Access Music VirusTI Desktop */ + if (id == USB_ID(0x133e, 0x0815)) { + if (snd_usb_accessmusic_boot_quirk(dev) < 0) + goto __err_val; + } + /* * found a config. now register to ALSA */ --- linux-2.6.32.orig/sound/usb/usbquirks.h +++ linux-2.6.32/sound/usb/usbquirks.h @@ -2050,6 +2050,33 @@ } }, +/* Access Music devices */ +{ + /* VirusTI Desktop */ + USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815), + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { + .ifnum = QUIRK_ANY_INTERFACE, + .type = QUIRK_COMPOSITE, + .data = &(const struct snd_usb_audio_quirk[]) { + { + .ifnum = 3, + .type = QUIRK_MIDI_FIXED_ENDPOINT, + .data = &(const struct snd_usb_midi_endpoint_info) { + .out_cables = 0x0003, + .in_cables = 0x0003 + } + }, + { + .ifnum = 4, + .type = QUIRK_IGNORE_INTERFACE + }, + { + .ifnum = -1 + } + } + } +}, + /* */ { /* aka. Serato Scratch Live DJ Box */ --- linux-2.6.32.orig/sound/usb/usbmidi.c +++ linux-2.6.32/sound/usb/usbmidi.c @@ -931,6 +931,8 @@ DEFINE_WAIT(wait); long timeout = msecs_to_jiffies(50); + if (ep->umidi->disconnected) + return; /* * The substream buffer is empty, but some data might still be in the * currently active URBs, so we have to wait for those to complete. @@ -1075,14 +1077,21 @@ * Frees an output endpoint. * May be called when ep hasn't been initialized completely. */ -static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint* ep) +static void snd_usbmidi_out_endpoint_clear(struct snd_usb_midi_out_endpoint *ep) { unsigned int i; for (i = 0; i < OUTPUT_URBS; ++i) - if (ep->urbs[i].urb) + if (ep->urbs[i].urb) { free_urb_and_buffer(ep->umidi, ep->urbs[i].urb, ep->max_transfer); + ep->urbs[i].urb = NULL; + } +} + +static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint *ep) +{ + snd_usbmidi_out_endpoint_clear(ep); kfree(ep); } @@ -1201,15 +1210,18 @@ usb_kill_urb(ep->out->urbs[j].urb); if (umidi->usb_protocol_ops->finish_out_endpoint) umidi->usb_protocol_ops->finish_out_endpoint(ep->out); + ep->out->active_urbs = 0; + if (ep->out->drain_urbs) { + ep->out->drain_urbs = 0; + wake_up(&ep->out->drain_wait); + } } if (ep->in) for (j = 0; j < INPUT_URBS; ++j) usb_kill_urb(ep->in->urbs[j]); /* free endpoints here; later call can result in Oops */ - if (ep->out) { - snd_usbmidi_out_endpoint_delete(ep->out); - ep->out = NULL; - } + if (ep->out) + snd_usbmidi_out_endpoint_clear(ep->out); if (ep->in) { snd_usbmidi_in_endpoint_delete(ep->in); ep->in = NULL; @@ -1360,6 +1372,12 @@ EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"), EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"), EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"), + /* Access Music Virus TI */ + EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"), + PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0, + SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | + SNDRV_SEQ_PORT_TYPE_HARDWARE | + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER), }; static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number) --- linux-2.6.32.orig/sound/oss/ad1848.c +++ linux-2.6.32/sound/oss/ad1848.c @@ -457,7 +457,7 @@ return mask; } -static void change_bits(ad1848_info * devc, unsigned char *regval, +static void __change_bits(ad1848_info * devc, unsigned char *regval, unsigned char *muteval, int dev, int chn, int newval) { unsigned char mask; @@ -515,10 +515,10 @@ if (muteregoffs != regoffs) { muteval = ad_read(devc, muteregoffs); - change_bits(devc, &val, &muteval, dev, channel, value); + __change_bits(devc, &val, &muteval, dev, channel, value); } else - change_bits(devc, &val, &val, dev, channel, value); + __change_bits(devc, &val, &val, dev, channel, value); spin_lock_irqsave(&devc->lock,flags); ad_write(devc, regoffs, val); --- linux-2.6.32.orig/sound/oss/sb_mixer.c +++ linux-2.6.32/sound/oss/sb_mixer.c @@ -230,7 +230,7 @@ return 1; } -static void change_bits(sb_devc * devc, unsigned char *regval, int dev, int chn, int newval) +static void __change_bits(sb_devc * devc, unsigned char *regval, int dev, int chn, int newval) { unsigned char mask; int shift; @@ -282,7 +282,7 @@ return -EINVAL; val = sb_getmixer(devc, regoffs); - change_bits(devc, &val, dev, LEFT_CHN, left); + __change_bits(devc, &val, dev, LEFT_CHN, left); if ((*devc->iomap)[dev][RIGHT_CHN].regno != regoffs) /* * Change register @@ -302,7 +302,7 @@ * Read the new one */ } - change_bits(devc, &val, dev, RIGHT_CHN, right); + __change_bits(devc, &val, dev, RIGHT_CHN, right); sb_setmixer(devc, regoffs, val); --- linux-2.6.32.orig/sound/soc/codecs/wm8974.c +++ linux-2.6.32/sound/soc/codecs/wm8974.c @@ -47,7 +47,7 @@ }; #define WM8974_POWER1_BIASEN 0x08 -#define WM8974_POWER1_BUFIOEN 0x10 +#define WM8974_POWER1_BUFIOEN 0x04 struct wm8974_priv { struct snd_soc_codec codec; @@ -480,23 +480,23 @@ /* filter coefficient */ switch (params_rate(params)) { - case SNDRV_PCM_RATE_8000: + case 8000: adn |= 0x5 << 1; break; - case SNDRV_PCM_RATE_11025: + case 11025: adn |= 0x4 << 1; break; - case SNDRV_PCM_RATE_16000: + case 16000: adn |= 0x3 << 1; break; - case SNDRV_PCM_RATE_22050: + case 22050: adn |= 0x2 << 1; break; - case SNDRV_PCM_RATE_32000: + case 32000: adn |= 0x1 << 1; break; - case SNDRV_PCM_RATE_44100: - case SNDRV_PCM_RATE_48000: + case 44100: + case 48000: break; } --- linux-2.6.32.orig/sound/soc/codecs/ak4104.c +++ linux-2.6.32/sound/soc/codecs/ak4104.c @@ -90,12 +90,10 @@ if (reg >= codec->reg_cache_size) return -EINVAL; - reg &= AK4104_REG_MASK; - reg |= AK4104_WRITE; - /* only write to the hardware if value has changed */ if (cache[reg] != value) { - u8 tmp[2] = { reg, value }; + u8 tmp[2] = { (reg & AK4104_REG_MASK) | AK4104_WRITE, value }; + if (spi_write(spi, tmp, sizeof(tmp))) { dev_err(&spi->dev, "SPI write failed\n"); return -EIO; --- linux-2.6.32.orig/sound/soc/codecs/wm8940.c +++ linux-2.6.32/sound/soc/codecs/wm8940.c @@ -379,23 +379,23 @@ iface |= (1 << 9); switch (params_rate(params)) { - case SNDRV_PCM_RATE_8000: + case 8000: addcntrl |= (0x5 << 1); break; - case SNDRV_PCM_RATE_11025: + case 11025: addcntrl |= (0x4 << 1); break; - case SNDRV_PCM_RATE_16000: + case 16000: addcntrl |= (0x3 << 1); break; - case SNDRV_PCM_RATE_22050: + case 22050: addcntrl |= (0x2 << 1); break; - case SNDRV_PCM_RATE_32000: + case 32000: addcntrl |= (0x1 << 1); break; - case SNDRV_PCM_RATE_44100: - case SNDRV_PCM_RATE_48000: + case 44100: + case 48000: break; } ret = snd_soc_write(codec, WM8940_ADDCNTRL, addcntrl); --- linux-2.6.32.orig/sound/soc/codecs/wm8350.c +++ linux-2.6.32/sound/soc/codecs/wm8350.c @@ -925,7 +925,7 @@ iface |= 0x3 << 8; break; case SND_SOC_DAIFMT_DSP_B: - iface |= 0x3 << 8; /* lg not sure which mode */ + iface |= 0x3 << 8 | WM8350_AIF_LRCLK_INV; break; default: return -EINVAL; --- linux-2.6.32.orig/sound/soc/codecs/wm9712.c +++ linux-2.6.32/sound/soc/codecs/wm9712.c @@ -464,7 +464,8 @@ { u16 *cache = codec->reg_cache; - soc_ac97_ops.write(codec->ac97, reg, val); + if (reg < 0x7c) + soc_ac97_ops.write(codec->ac97, reg, val); reg = reg >> 1; if (reg < (ARRAY_SIZE(wm9712_reg))) cache[reg] = val; --- linux-2.6.32.orig/sound/soc/codecs/wm8903.c +++ linux-2.6.32/sound/soc/codecs/wm8903.c @@ -1506,7 +1506,7 @@ struct i2c_client *i2c = codec->control_data; int i; u16 *reg_cache = codec->reg_cache; - u16 *tmp_cache = kmemdup(codec->reg_cache, sizeof(wm8903_reg_defaults), + u16 *tmp_cache = kmemdup(reg_cache, sizeof(wm8903_reg_defaults), GFP_KERNEL); /* Bring the codec back up to standby first to minimise pop/clicks */ @@ -1518,6 +1518,7 @@ for (i = 2; i < ARRAY_SIZE(wm8903_reg_defaults); i++) if (tmp_cache[i] != reg_cache[i]) snd_soc_write(codec, i, tmp_cache[i]); + kfree(tmp_cache); } else { dev_err(&i2c->dev, "Failed to allocate temporary cache\n"); } --- linux-2.6.32.orig/sound/soc/codecs/wm8510.c +++ linux-2.6.32/sound/soc/codecs/wm8510.c @@ -425,23 +425,23 @@ /* filter coefficient */ switch (params_rate(params)) { - case SNDRV_PCM_RATE_8000: + case 8000: adn |= 0x5 << 1; break; - case SNDRV_PCM_RATE_11025: + case 11025: adn |= 0x4 << 1; break; - case SNDRV_PCM_RATE_16000: + case 16000: adn |= 0x3 << 1; break; - case SNDRV_PCM_RATE_22050: + case 22050: adn |= 0x2 << 1; break; - case SNDRV_PCM_RATE_32000: + case 32000: adn |= 0x1 << 1; break; - case SNDRV_PCM_RATE_44100: - case SNDRV_PCM_RATE_48000: + case 44100: + case 48000: break; } --- linux-2.6.32.orig/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c +++ linux-2.6.32/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c @@ -51,7 +51,7 @@ return 0; /* already enough large */ vfree(runtime->dma_area); } - runtime->dma_area = vmalloc_32(size); + runtime->dma_area = vmalloc_32_user(size); if (! runtime->dma_area) return -ENOMEM; runtime->dma_bytes = size; --- linux-2.6.32.orig/ipc/sem.c +++ linux-2.6.32/ipc/sem.c @@ -129,6 +129,7 @@ void sem_exit_ns(struct ipc_namespace *ns) { free_ipcs(ns, &sem_ids(ns), freeary); + idr_destroy(&ns->ids[IPC_SEM_IDS].ipcs_idr); } #endif --- linux-2.6.32.orig/ipc/msg.c +++ linux-2.6.32/ipc/msg.c @@ -125,6 +125,7 @@ void msg_exit_ns(struct ipc_namespace *ns) { free_ipcs(ns, &msg_ids(ns), freeque); + idr_destroy(&ns->ids[IPC_MSG_IDS].ipcs_idr); } #endif --- linux-2.6.32.orig/ipc/shm.c +++ linux-2.6.32/ipc/shm.c @@ -101,6 +101,7 @@ void shm_exit_ns(struct ipc_namespace *ns) { free_ipcs(ns, &shm_ids(ns), do_shm_rmid); + idr_destroy(&ns->ids[IPC_SHM_IDS].ipcs_idr); } #endif @@ -290,28 +291,28 @@ unsigned long flags) { struct shm_file_data *sfd = shm_file_data(file); - return get_unmapped_area(sfd->file, addr, len, pgoff, flags); -} - -int is_file_shm_hugepages(struct file *file) -{ - int ret = 0; - - if (file->f_op == &shm_file_operations) { - struct shm_file_data *sfd; - sfd = shm_file_data(file); - ret = is_file_hugepages(sfd->file); - } - return ret; + return sfd->file->f_op->get_unmapped_area(sfd->file, addr, len, + pgoff, flags); } static const struct file_operations shm_file_operations = { .mmap = shm_mmap, .fsync = shm_fsync, .release = shm_release, +}; + +static const struct file_operations shm_file_operations_huge = { + .mmap = shm_mmap, + .fsync = shm_fsync, + .release = shm_release, .get_unmapped_area = shm_get_unmapped_area, }; +int is_file_shm_hugepages(struct file *file) +{ + return file->f_op == &shm_file_operations_huge; +} + static const struct vm_operations_struct shm_vm_ops = { .open = shm_open, /* callback for a new vm-area open */ .close = shm_close, /* callback for when the vm-area is released */ @@ -889,7 +890,10 @@ if (!sfd) goto out_put_dentry; - file = alloc_file(path.mnt, path.dentry, f_mode, &shm_file_operations); + file = alloc_file(path.mnt, path.dentry, f_mode, + is_file_hugepages(shp->shm_file) ? + &shm_file_operations_huge : + &shm_file_operations); if (!file) goto out_free; ima_counts_get(file); --- linux-2.6.32.orig/ipc/mqueue.c +++ linux-2.6.32/ipc/mqueue.c @@ -706,7 +706,7 @@ dentry = lookup_one_len(name, ipc_ns->mq_mnt->mnt_root, strlen(name)); if (IS_ERR(dentry)) { error = PTR_ERR(dentry); - goto out_err; + goto out_putfd; } mntget(ipc_ns->mq_mnt); @@ -744,7 +744,6 @@ mntput(ipc_ns->mq_mnt); out_putfd: put_unused_fd(fd); -out_err: fd = error; out_upsem: mutex_unlock(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex); --- linux-2.6.32.orig/debian.master/NOTES +++ linux-2.6.32/debian.master/NOTES @@ -0,0 +1,4 @@ +eSCO patch removed. Replaced upstream with a disable_esco module parm. +airprime: Module gone, use option driver instead +AppArmor: Patch is all there and ported. Ooops when enabled, so default + off (still can be enabled apparmor=1) --- linux-2.6.32.orig/debian.master/copyright +++ linux-2.6.32/debian.master/copyright @@ -0,0 +1,29 @@ +This is the Ubuntu prepackaged version of the Linux kernel. +Linux was written by Linus Torvalds +and others. + +This package was put together by the Ubuntu Kernel Team, from +sources retrieved from upstream linux git. +The sources may be found at most Linux ftp sites, including +ftp://ftp.kernel.org/pub/linux/kernel/ + +This package is currently maintained by the +Ubuntu Kernel Team + +Linux is copyrighted by Linus Torvalds and others. + + 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 dated June, 1991. + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Ubuntu Linux systems, the complete text of the GNU General +Public License v2 can be found in `/usr/share/common-licenses/GPL-2'. --- linux-2.6.32.orig/debian.master/changelog.historical +++ linux-2.6.32/debian.master/changelog.historical @@ -0,0 +1,4171 @@ + +linux (2.6.28-9.31) jaunty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: cpufreq-nforce2: probe failures are not errors + - LP: #332170 + * SAUCE: mmc: add MODALIAS linkage for MMC/SD devices + - LP: #30335 + * remove test-suspend script + - LP: #333856 + + [ Kees Cook ] + + * handle relative paths in modules.dep + Fixes 2.6.28-9.30 FTBS. + + [ Upstream Kernel Changes ] + + * ricoh_mmc: Handle newer models of Ricoh controllers + + -- Tim Gardner Wed, 11 Mar 2009 08:19:24 -0600 + +linux (2.6.28-9.30) jaunty; urgency=low + + [ Amit Kucheria ] + + * ARM:mx51 Add SoC and board support for mx51 platforms + * ARM:mx51 Add CONFIG_ARCH_MXC_CANONICAL to disable parts of Freescale's + code + * MMC: Add support for 8-bit cards + * Add ARM:MX51 SoC support to the build system + * ARM: Make ARM arch aware of ubuntu/ drivers + * ARM: Add imx51 configuration + * Disable d-i modules for imx51 and mv78xx0 + * Disable Apparmor on boot for ARM + * Updating imx51 config + + [ Jason Liu ] + + * Do not use OOB with MLC NAND + + [ Richard Zhu ] + + * Support the eMMC4.3 card + + [ Rob Herring ] + + * ARM: Add more cache memory types macros + + [ Tim Gardner ] + + * Set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y for i386/amd64/lpia + + [ Manoj Iyer ] + + * Enable CONFIG_RTL8187SE=m + + [ Upstream Kernel Changes ] + + * USB: EHCI: slow down ITD reuse + - LP: #329437 + + -- Tim Gardner Sun, 08 Mar 2009 14:14:15 -0600 + +linux (2.6.28-9.29) jaunty; urgency=low + + [ Andy Whitcroft ] + + * link-headers -- only link directories which do not already exist + - LP: #315252 + + [ Daniel Marjamäki ] + + * SAUCE: (drop after 2.6.28) netxen: fix memory leak in + drivers/net/netxen_nic_init.c + - LP: #330813 + + [ Dhananjay Phadke ] + + * SAUCE: (drop after 2.6.28) netxen: fix endianness in firmware commands + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix ipv6 offload and tx cleanup + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix link speed reporting for some + boards + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: firmware init fix + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: cleanup mac list on driver unload + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: hold tx lock while sending firmware + commands + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: handle dma mapping failures + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: avoid invalid iounmap + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: include ipv6.h (fixes build failure) + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix vlan tso/checksum offload + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: reduce memory footprint + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: revert jumbo ringsize + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix msi-x interrupt handling + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: remove pcie workaround + - LP: #330813 + + [ Hannes Eder ] + + * SAUCE: (drop after 2.6.28) drivers/net/netxen: fix sparse warnings: use + NULL pointer instead of plain integer + - LP: #330813 + + [ Huaxu Wan ] + + * SAUCE: report rfkill changes event if interface is down + - LP: #193970 + + [ Tim Gardner ] + + * MV78XX0 must specify a target in the vars definition. + + [ Upstream Kernel Changes ] + + * Revert "ext4: wait on all pending commits in ext4_sync_fs()" + * jbd2: Fix return value of jbd2_journal_start_commit() + * jbd2: Avoid possible NULL dereference in + jbd2_journal_begin_ordered_truncate() + * ext4: Fix to read empty directory blocks correctly in 64k + * ext4: Fix lockdep warning + * ext4: Initialize preallocation list_head's properly + * ext4: Implement range_cyclic in ext4_da_writepages instead of + write_cache_pages + * ext4: Fix NULL dereference in ext4_ext_migrate()'s error handling + * ext4: Add fallback for find_group_flex + * ext4: Fix deadlock in ext4_write_begin() and ext4_da_write_begin() + * Added mv78xx0 flavor + + -- Tim Gardner Fri, 06 Mar 2009 06:13:31 -0700 + +linux (2.6.28-8.28) jaunty; urgency=low + + [ Alexey Starikovskiy ] + + * SAUCE: ACPI: EC: Limit workaround for ASUS notebooks even more + - LP: #288385 + + [ Scott James Remnant ] + + * SAUCE: Auto-load esp module when device opened. + * SAUCE: Auto-load bridge module when socket opened. + * SAUCE: Auto-load af_netlink module when socket opened. + * SAUCE: Auto-load wanrouter module when socket opened. + * SAUCE: Auto-load ip_queue module when socket opened. + * SAUCE: Auto-load ip6_queue module when socket opened. + * SAUCE: Auto-load cn module when socket opened. + * SAUCE: Auto-load scsi_transport_iscsi module when socket opened. + * SAUCE: Auto-load ftl module when device opened. + * SAUCE: Auto-load pcd module when device opened. + * SAUCE: Auto-load pf module when device opened. + * SAUCE: Auto-load nftl module when device opened. + * SAUCE: Auto-load mousedev module when psaux device opened. + * SAUCE: Auto-load mousedev module when /dev/input/mice opened. + * SAUCE: Auto-load rng-core module when device opened. + * SAUCE: Auto-load openprom module when device opened. + * SAUCE: Auto-load applicom module when device opened. + * SAUCE: Auto-load toshiba module when device opened. + * SAUCE: Auto-load cyclades module when device opened. + * SAUCE: Auto-load riscom8 module when device opened. + * SAUCE: Auto-load specialix module when device opened. + * SAUCE: Auto-load videodev module when device opened. + * SAUCE: Auto-load i2c_dev module when device opened. + * SAUCE: Auto-load mtdchar module when device opened. + * SAUCE: Auto-load pt module when device opened. + * SAUCE: Auto-load pg module when device opened. + * SAUCE: Auto-load cdc_acm module when device opened. + * SAUCE: Auto-load msr module when device opened. + * SAUCE: Auto-load cpuid module when device opened. + * SAUCE: quickcam: Enable double-buffering by default + * SAUCE: libata: Ignore HPA by default. + * SAUCE: hostap: Change initial operation mode to managed (infra) + * SAUCE: floppy: Provide a PnP device table in the module. + - LP: #255651 + * SAUCE: Auto-load mwave module when device opened. + * Build CONFIG_FUSE_FS into kernel, not as module. + + [ Stefan Bader ] + + * Enable build of ext4 as a module on LPIA + - LP: #331848 + + [ Tim Gardner ] + + * Update configs to fix LPIA FTBS + + -- Tim Gardner Thu, 05 Mar 2009 10:43:24 -0700 + +linux (2.6.28-8.27) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs (arm:ixp4xx) + + [ Andy Whitcroft ] + + * SAUCE: enable Intel HDMI output + + [ Manoj Iyer ] + + * SAUCE: Added quirk for Linksys WUSB600N USB wifi-n networking adapter + - LP: #323473 + + [ Steve Beattie ] + + * fix apparmor memory leak on unlinked file ops + - LP: #329489 + + [ Tim Gardner ] + + * SAUCE: Dell XPS710 reboot quirk + - LP: #323592 + * SAUCE: (drop after 2.6.28) ieee80211: Add infrastructure to obsolete + scan results + - LP: #336055 + * Add modules.order to the linux-image package. + + [ Upstream Kernel Changes ] + + * iwlwifi: fix time interval misuse in iwl_poll_{direct_}bit + * x86: only scan the root bus in early PCI quirks + - LP: #267295 + * ALSA: hda - Intel HDMI audio support + * ALSA: hda - Fix unused function in patch_intelhdmi.c + * ALSA: handle SiI1392 HDMI codec in patch_intelhdmi.c + * ALSA: hda-intel: reorder HDMI audio enabling sequence + * ALSA: introduce snd_print_pcm_rates() + * ALSA: create hda_eld.c for ELD routines and proc interface + * ALSA: ELD proc interface for HDMI sinks + * ALSA: hda: make standalone hdmi_fill_audio_infoframe() + * ALSA: hda: make global snd_print_channel_allocation() + * ALSA: hda: HDMI channel allocations for audio infoframe + * ALSA: hda: HDMI channel mapping cleanups + * ALSA: hda: minor code cleanups + * ALSA: hda: rename sink_eld to hdmi_eld + * ALSA: hda - Release ELD proc file + * ALSA: hda - minor HDMI code cleanups + * ALSA: hda - report selected CA index for Audio InfoFrame + * ALSA: hda - Add Intel vendor id string + + -- Tim Gardner Wed, 25 Feb 2009 14:23:46 -0700 + +linux (2.6.28-8.26) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs (armel:ixp4xx) + - LP: #331510 + + [ Tim Gardner ] + + * Add more missing modules + + -- Tim Gardner Tue, 24 Feb 2009 06:58:53 -0700 + +linux (2.6.28-8.25) jaunty; urgency=low + + [ Scott James Remnant ] + + * SAUCE: Prefer powernow-k8 to acpi-cpufreq + * Change CONFIG_X86_P4_CLOCKMOD to be a module again. + + [ Tim Gardner ] + + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Initialize the new + group descriptor when resizing the filesystem" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add sanity check + to make_indexed_dir" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: only use + i_size_high for regular files" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add sanity checks + for the superblock before mounting the filesystem" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix + s_dirty_blocks_counter if block allocation failed with nodelalloc" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Init the complete + page while building buddy cache" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Don't allow new + groups to be added during block allocation" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: mark the + blocks/inode bitmap beyond end of group as used" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Use new + buffer_head flag to check uninit group bitmaps initialization" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix the race + between read_inode_bitmap() and ext4_new_inode()" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix race between + read_block_bitmap() and mark_diskspace_used()" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: don't use blocks + freed but not yet committed in buddy cache init" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: cleanup mballoc + header files" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Use + EXT4_GROUP_INFO_NEED_INIT_BIT during resize" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add blocks added + during resize to bitmap" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Don't overwrite + allocation_context ac_status" + * Revert "SAUCE: (revert before 2.6.28.y update) jbd2: Add barrier not + supported test to journal_wait_on_commit_record" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Widen type of + ext4_sb_info.s_mb_maxs[]" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: avoid ext4_error + when mounting a fs with a single bg" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix the delalloc + writepages to allocate blocks at the right offset." + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: tone down + ext4_da_writepages warnings" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add support for + non-native signed/unsigned htree hash algorithms" + * Enabled X86_ACPI_CPUFREQ=y + + [ Upstream Kernel Changes ] + + * ath9k: quiet harmless ForceXPAon messages + - LP: #321474 + * [WATCHDOG] iTCO_wdt: fix SMI_EN regression 2 + - LP: #314050 + * pid: implement ns_of_pid + * mqueue: fix si_pid value in mqueue do_notify() + * powerpc/vsx: Fix VSX alignment handler for regs 32-63 + * sata_nv: give up hardreset on nf2 + * Fix Intel IOMMU write-buffer flushing + * SCSI: libiscsi: fix iscsi pool leak + * x86/cpa: make sure cpa is safe to call in lazy mmu mode + * sched: SCHED_OTHER vs SCHED_IDLE isolation + * x86, vm86: fix preemption bug + * Add support for VT6415 PCIE PATA IDE Host Controller + * ext2/xip: refuse to change xip flag during remount with busy inodes + * 3c505: do not set pcb->data.raw beyond its size + * Bluetooth: Fix TX error path in btsdio driver + * ext4: Add support for non-native signed/unsigned htree hash algorithms + * ext4: tone down ext4_da_writepages warnings + * ext4: Fix the delalloc writepages to allocate blocks at the right + offset. + * ext4: avoid ext4_error when mounting a fs with a single bg + * ext4: Widen type of ext4_sb_info.s_mb_maxs[] + * jbd2: Add barrier not supported test to journal_wait_on_commit_record + * ext4: Don't overwrite allocation_context ac_status + * ext4: Add blocks added during resize to bitmap + * ext4: Use EXT4_GROUP_INFO_NEED_INIT_BIT during resize + * ext4: cleanup mballoc header files + * ext4: don't use blocks freed but not yet committed in buddy cache init + * ext4: Fix race between read_block_bitmap() and mark_diskspace_used() + * ext4: Fix the race between read_inode_bitmap() and ext4_new_inode() + * ext4: Use new buffer_head flag to check uninit group bitmaps + initialization + * ext4: mark the blocks/inode bitmap beyond end of group as used + * ext4: Don't allow new groups to be added during block allocation + * ext4: Init the complete page while building buddy cache + * ext4: Fix s_dirty_blocks_counter if block allocation failed with + nodelalloc + * ext4: Add sanity checks for the superblock before mounting the + filesystem + * ext4: only use i_size_high for regular files + * ext4: Add sanity check to make_indexed_dir + * ext4: Initialize the new group descriptor when resizing the filesystem + * Fix longstanding "error: storage size of '__mod_dmi_device_table' isn't + known" + * Linux 2.6.28.7 + + -- Tim Gardner Thu, 19 Feb 2009 06:45:55 -0700 + +linux (2.6.28-8.24) jaunty; urgency=low + + [ Scott James Remnant ] + + * Change CPU_FREQ_DEFAULT_GOV_ONDEMAND to y + * SAUCE: Link acpi-cpufreq.o first + + [ Tim Gardner ] + + * Build in CPU Frequency scaling drivers + + -- Tim Gardner Wed, 18 Feb 2009 06:12:24 -0700 + +linux (2.6.28-8.23) jaunty; urgency=low + + [ Andy Whitcroft ] + + * include the kernel configuration in the sub-flavour images + - LP: #328859 + + [ Tim Gardner ] + + * Revert "SAUCE: (drop after 2.6.28) [eCryptfs] Regression in unencrypted + filename symlinks" in favor of upstream commit. + * Fix compile issues with qc-usb + * SAUCE: (remove after 2.6.28) V4L/DVB (10216): saa7127: fix broken + S-Video with saa7129 + - LP: #329267 + + [ Upstream Kernel Changes ] + + * Subject:SAUCE: LP#193970 iwlagn: fix hw-rfkill while the interface is + down + - LP: #193970 + * x86, vmi: put a missing paravirt_release_pmd in pgd_dtor + * nbd: fix I/O hang on disconnected nbds + * mac80211: restrict to AP in outgoing interface heuristic + * w1: w1 temp calculation overflow fix + * zd1211rw: adding 0ace:0xa211 as a ZD1211 device + * zd1211rw: treat MAXIM_NEW_RF(0x08) as UW2453_RF(0x09) for TP-Link + WN322/422G + * parport: parport_serial, don't bind netmos ibm 0299 + * syscall define: fix uml compile bug + * kernel-doc: fix syscall wrapper processing + * Fix page writeback thinko, causing Berkeley DB slowdown + * write-back: fix nr_to_write counter + * writeback: fix break condition + * mm: rearrange exit_mmap() to unlock before arch_exit_mmap + * powerpc/fsl-booke: Fix mapping functions to use phys_addr_t + * lockd: fix regression in lockd's handling of blocked locks + * sctp: Fix crc32c calculations on big-endian arhes. + * sctp: Correctly start rtx timer on new packet transmissions. + * sctp: Properly timestamp outgoing data chunks for rtx purposes + * net: Fix frag_list handling in skb_seq_read + * net: Fix OOPS in skb_seq_read(). + * drivers/net/skfp: if !capable(CAP_NET_ADMIN): inverted logic + * ipv4: fix infinite retry loop in IP-Config + * net: Fix userland breakage wrt. linux/if_tunnel.h + * net: packet socket packet_lookup_frame fix + * packet: Avoid lock_sock in mmap handler + * sungem: Soft lockup in sungem on Netra AC200 when switching interface + up + * udp: Fix UDP short packet false positive + * udp: increments sk_drops in __udp_queue_rcv_skb() + * ipv6: Disallow rediculious flowlabel option sizes. + * ipv6: Copy cork options in ip6_append_data + * net: 4 bytes kernel memory disclosure in SO_BSDCOMPAT gsopt try #2 + * sky2: fix hard hang with netconsoling and iface going up + * tun: Add some missing TUN compat ioctl translations. + * tun: Fix unicast filter overflow + * virtio_net: Fix MAX_PACKET_LEN to support 802.1Q VLANs + * tcp: splice as many packets as possible at once + * tcp: Fix length tcp_splice_data_recv passes to skb_splice_bits. + * sparc: Enable syscall wrappers for 64-bit (CVE-2009-0029) + * sparc64: Annotate sparc64 specific syscalls with SYSCALL_DEFINEx() + * ALSA: hda - Add missing terminator in slave dig-out array + * ALSA: mtpav - Fix initial value for input hwport + * HID: adjust report descriptor fixup for MS 1028 receiver + * ide/libata: fix ata_id_is_cfa() (take 4) + * libata: fix EH device failure handling + * netfilter: fix tuple inversion for Node information request + * netfilter: xt_sctp: sctp chunk mapping doesn't work + * x86: microcode_amd: fix wrong handling of equivalent CPU id + * ide-cd: fix DMA for non bio-backed requests + * net: Fix data corruption when splicing from sockets. + * Linux 2.6.28.6 + * eCryptfs: Regression in unencrypted filename symlinks + + -- Tim Gardner Mon, 16 Feb 2009 06:43:51 -0700 + +linux (2.6.28-8.22) jaunty; urgency=low + + [ Amit Kucheria ] + + * Remove perm-blacklist + + [ Andy Whitcroft ] + + * SAUCE: psmouse/synaptics: ensure we reset the device on resume + - LP: #317270 + + [ Tim Gardner ] + + * Add lpia to getabi script + * SAUCE: tracer for sreadahead + + -- Amit Kucheria Fri, 13 Feb 2009 15:23:21 +0200 + +linux (2.6.28-8.21) jaunty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: switch the Asus Pundit P1-AH2 to old acpi sleep ordering + - LP: #327267 + + [ Tim Gardner ] + + * Added LPIA arch support + * Added libdrm-dev as a 'Replaces' to linux-libc-dev + * SAUCE: LPIA support for 9202 HDA Sigmatel codec + * SAUCE: Add an X86_LPIA Kconfig option + * SAUCE: UHCI USB quirk for resume + * SAUCE: LPIA Reboot fix for Intel Crownbeach development boards + * SAUCE: LPIA Logical reset of USB port on resume + * Set CONFIG_WIRELESS_OLD_REGULATORY=n, added wireless-crda + as an install dependency. + + [ Upstream Kernel Changes ] + + * Revert "Revert "x86, early_ioremap: fix fencepost error"" + - LP: #312554 + * drm/i915: capture last_vblank count at IRQ uninstall time too + - LP: #320813 + * drm/i915: add get_vblank_counter function for GM45 + - LP: #320813 + * Staging: comedi: fix Kbuild + * Staging: meilhaus: fix Kbuild + * Staging: android: binder: fix arm build errors + * Staging: android: timed_gpio: Fix build to build on kernels after + 2.6.25. + * Staging: android: fix build error on 64bit boxes + * Staging: android: Add lowmemorykiller documentation. + * Staging: android: task_get_unused_fd_flags: fix the wrong usage of + tsk->signal + * staging: agnx: drivers/staging/agnx/agnx.h needs + * Staging: usbip: usbip_start_threads(): handle kernel_thread failure + * Staging: poch: fix verification of memory area + * Documentation: move DMA-mapping.txt to Doc/PCI/ + * sgi-xp: fix writing past the end of kzalloc()'d space + * do_wp_page: fix regression with execute in place + * wait: prevent exclusive waiter starvation + * shm: fix shmctl(SHM_INFO) lockup with !CONFIG_SHMEM + * revert "rlimit: permit setting RLIMIT_NOFILE to RLIM_INFINITY" + * prevent kprobes from catching spurious page faults + * sound: usb-audio: handle wMaxPacketSize for FIXED_ENDPOINT devices + * md: Ensure an md array never has too many devices. + * md: Fix a bug in linear.c causing which_dev() to return the wrong + device. + * ACPI: Enable bit 11 in _PDC to advertise hw coord + * ACPI: dock: Don't eval _STA on every show_docked sysfs read + * ieee1394: ohci1394: increase AT req. retries, fix ack_busy_X from + Panasonic camcorders and others + * firewire: ohci: increase AT req. retries, fix ack_busy_X from Panasonic + camcorders and others + * firewire: sbp2: fix DMA mapping leak on the failure path + * firewire: sbp2: add workarounds for 2nd and 3rd generation iPods + * ieee1394: sbp2: add workarounds for 2nd and 3rd generation iPods + * module: remove over-zealous check in __module_get() + * x86: APIC: enable workaround on AMD Fam10h CPUs + * eeepc-laptop: fix oops when changing backlight brightness during + eeepc-laptop init + * eeepc-laptop: Add support for extended hotkeys + * e1000: fix bug with shared interrupt during reset + * e1000: Fix PCI enable to honor the need_ioport flag + * agp/intel: Fix broken ® symbol in device name. + * ALSA: hda - Add quirk for FSC Amilo Xi2550 + * ALSA: hda - Add missing COEF initialization for ALC887 + * ALSA: hda - Add missing initialization for ALC272 + * asus_acpi: Add R1F support + * panasonic-laptop: fix X[ ARRAY_SIZE(X) ] + * ACPI: Skip the first two elements in the _BCL package + * ACPI: proc_dir_entry 'video/VGA' already registered + * ACPI: disable ACPI cleanly when bad RSDP found + * ACPICA: Fix table entry truncation calculation + * PCI: properly clean up ASPM link state on device remove + * PCI: return error on failure to read PCI ROMs + * seq_file: move traverse so it can be used from seq_read + * seq_file: fix big-enough lseek() + read() + * serial: set correct baud_base for Oxford Semiconductor Ltd EXSYS + EX-41092 Dual 16950 Serial adapter + * Add support for '8-port RS-232 MIC-3620 from advantech' + * mm: fix error case in mlock downgrade reversion + * elf core dump: fix get_user use + * ACPI: video: Fix reversed brightness behavior on ThinkPad SL series + * ipw2200: fix scanning while associated + * XFS: set b_error from bio error in xfs_buf_bio_end_io + * Revert USB: option: add Pantech cards + * USB: option: New mobile broadband modems to be supported + * USB: new id for ti_usb_3410_5052 driver + * USB: two more usb ids for ti_usb_3410_5052 + * USB: usb-storage: add Pentax to the bad-vendor list + * sata_via: Add VT8261 support + * nbd: do not allow two clients at the same time + * sctp: Fix another socket race during accept/peeloff + * Linux 2.6.28.5 + + -- Tim Gardner Mon, 09 Feb 2009 16:11:28 -0700 + +linux (2.6.28-7.20) jaunty; urgency=low + + [ Tim Gardner ] + + * SAUCE: Input: atkbd - Samsung NC10 key repeat fix + + [ Upstream Kernel Changes ] + + * Manually revert "mlock: downgrade mmap sem while populating mlocked + regions" + * xen: make sysfs files behave as their names suggest + * sata_mv: fix 8-port timeouts on 508x/6081 chips + * m68knommu: set NO_DMA + * PCI/MSI: bugfix/utilize for msi_capability_init() + * x86: use early clobbers in usercopy*.c + * netfilter: ctnetlink: fix scheduling while atomic + * orinoco: move kmalloc(..., GFP_KERNEL) outside spinlock in + orinoco_ioctl_set_genie + * fbdev/atyfb: Fix DSP config on some PowerMacs & PowerBooks + * kmalloc: return NULL instead of link failure + * sata_nv: rename nv_nf2_hardreset() + * sata_nv: fix MCP5x reset + * sata_nv: ck804 has borked hardreset too + * Fix memory corruption in console selection + * Add enable_ms to jsm driver + * nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is + found + * nfsd: Ensure nfsv4 calls the underlying filesystem on LOCKT + * iwlwifi: fix rs_get_rate WARN_ON() + * p54: fix lm87 checksum endianness + * p54: fix p54_read_eeprom to cope with tx_hdr_len + * p54usb: rewriting rx/tx routines to make use of usb_anchor's facilities + * minstrel: fix warning if lowest supported rate index is not 0 + * PCI: irq and pci_ids patch for Intel Tigerpoint DeviceIDs + * cpuidle: Add decaying history logic to menu idle predictor + * ACPI: Avoid array address overflow when _CST MWAIT hint bits are set + * video: always update the brightness when poking "brightness" + * Newly inserted battery might differ from one just removed, so update of + battery info fields is required. + * ACPI: Do not modify SCI_EN directly + * dlm: initialize file_lock struct in GETLK before copying conflicting + lock + * sata_mv: Fix chip type for Hightpoint RocketRaid 1740/1742 + * ACPICA: Allow multiple backslash prefix in namepaths + * Linux 2.6.28.4 + + -- Tim Gardner Sat, 07 Feb 2009 18:53:42 -0700 + +linux (2.6.28-7.19) jaunty; urgency=low + + * Fix missing modules FTBS + + -- Tim Gardner Thu, 05 Feb 2009 15:28:15 -0700 + +linux (2.6.28-7.18) jaunty; urgency=low + + [ Alok Kataria ] + + * SAUCE: (drop after 2.6.29) x86: add a synthetic TSC_RELIABLE feature + bit + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: add X86_FEATURE_HYPERVISOR feature bit + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Hypervisor detection and get tsc_freq + from hypervisor + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Add a synthetic TSC_RELIABLE feature + bit. + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Skip verification by the watchdog for + TSC clocksource. + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: VMware: Fix vmware_get_tsc code + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: vmware: look for DMI string in the + product serial key + - LP: #319945 + + [ Andy Whitcroft ] + + * SAUCE: toshiba_acpi -- pull in current -dev version of driver + - LP: #269831 + * SAUCE: toshiba_acpi -- add acpi hotkey kernel thread + - LP: #269831 + * move toshiba laptops back from tlsup to toshiba_acpi + - LP: #269831 + + [ Aneesh Kumar K.V ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Fix the delalloc + writepages to allocate blocks at the right offset. + * SAUCE: (revert before 2.6.28.y update) ext4: avoid ext4_error when + mounting a fs with a single bg + * SAUCE: (revert before 2.6.28.y update) ext4: Don't overwrite + allocation_context ac_status + * SAUCE: (revert before 2.6.28.y update) ext4: Add blocks added during + resize to bitmap + * SAUCE: (revert before 2.6.28.y update) ext4: Use + EXT4_GROUP_INFO_NEED_INIT_BIT during resize + * SAUCE: (revert before 2.6.28.y update) ext4: cleanup mballoc header + files + * SAUCE: (revert before 2.6.28.y update) ext4: don't use blocks freed but + not yet committed in buddy cache init + * SAUCE: (revert before 2.6.28.y update) ext4: Fix race between + read_block_bitmap() and mark_diskspace_used() + * SAUCE: (revert before 2.6.28.y update) ext4: Fix the race between + read_inode_bitmap() and ext4_new_inode() + * SAUCE: (revert before 2.6.28.y update) ext4: Use new buffer_head flag + to check uninit group bitmaps initialization + * SAUCE: (revert before 2.6.28.y update) ext4: mark the blocks/inode + bitmap beyond end of group as used + * SAUCE: (revert before 2.6.28.y update) ext4: Don't allow new groups to + be added during block allocation + * SAUCE: (revert before 2.6.28.y update) ext4: Init the complete page + while building buddy cache + * SAUCE: (revert before 2.6.28.y update) ext4: Fix s_dirty_blocks_counter + if block allocation failed with nodelalloc + + [ Hannes Eder ] + + * SAUCE: (drop after 2.6.29) x86: vmware - fix sparse warnings + - LP: #319945 + + [ Luke Yelavich ] + + * hid modules have hyphens instead of underscores in their names + + [ Mark Fasheh ] + + * SAUCE: (revert before 2.6.28.y update) jbd2: Add BH_JBDPrivateStart + + [ Theodore Ts'o ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Add support for non-native + signed/unsigned htree hash algorithms + * SAUCE: (revert before 2.6.28.y update) ext4: tone down + ext4_da_writepages warnings + * SAUCE: (revert before 2.6.28.y update) jbd2: Add barrier not supported + test to journal_wait_on_commit_record + * SAUCE: (revert before 2.6.28.y update) ext4: Add sanity checks for the + superblock before mounting the filesystem + * SAUCE: (revert before 2.6.28.y update) ext4: only use i_size_high for + regular files + * SAUCE: (revert before 2.6.28.y update) ext4: Add sanity check to + make_indexed_dir + * SAUCE: (revert before 2.6.28.y update) jbd2: On a __journal_expect() + assertion failure printk "JBD2", not "EXT3-fs" + * SAUCE: (revert before 2.6.28.y update) ext4: Initialize the new group + descriptor when resizing the filesystem + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.28) [eCryptfs] Regression in unencrypted + filename symlinks + - LP: #322532 + + [ Upstream Kernel Changes ] + + * Input: atkbd - broaden the Dell DMI signatures + - LP: #261721 + * ti_usb_3410_5052: support alternate firmware + * ath5k: fix mesh point operation + * mac80211: decrement ref count to netdev after launching mesh discovery + * inotify: clean up inotify_read and fix locking problems + * fuse: destroy bdi on umount + * fuse: fix missing fput on error + * fuse: fix NULL deref in fuse_file_alloc() + * x86, mm: fix pte_free() + * klist.c: bit 0 in pointer can't be used as flag + * sysfs: fix problems with binary files + * x86: fix page attribute corruption with cpa() + * USB: fix toggle mismatch in disable_endpoint paths + * sound: virtuoso: enable UART on Xonar HDAV1.3 + * USB: usbmon: Implement compat_ioctl + * USB: fix char-device disconnect handling + * USB: storage: add unusual devs entry + * alpha: nautilus - fix compile failure with gcc-4.3 + * alpha: fix vmalloc breakage + * resources: skip sanity check of busy resources + * rtl8187: Add termination packet to prevent stall + * it821x: Add ultra_mask quirk for Vortex86SX + * libata: pata_via: support VX855, future chips whose IDE controller use + 0x0571 + * serial_8250: support for Sealevel Systems Model 7803 COMM+8 + * drm: stash AGP include under the do-we-have-AGP ifdef + * Fix OOPS in mmap_region() when merging adjacent VM_LOCKED file segments + * bnx2x: Block nvram access when the device is inactive + * ext3: Add sanity check to make_indexed_dir + * rtl8187: Fix error in setting OFDM power settings for RTL8187L + * epoll: drop max_user_instances and rely only on max_user_watches + * gpiolib: fix request related issue + * sgi-xpc: Remove NULL pointer dereference. + * sgi-xpc: ensure flags are updated before bte_copy + * include/linux: Add bsg.h to the Kernel exported headers + * ALSA: hda - Fix PCM reference NID for STAC/IDT analog outputs + * ALSA: hda - add another MacBook Pro 4, 1 subsystem ID + * ALSA: hda - Add quirk for HP DV6700 laptop + * crypto: authenc - Fix zero-length IV crash + * crypto: ccm - Fix handling of null assoc data + * x86, pat: fix reserve_memtype() for legacy 1MB range + * x86, pat: fix PTE corruption issue while mapping RAM using /dev/mem + * PCI hotplug: fix lock imbalance in pciehp + * dmaengine: fix dependency chaining + * NET: net_namespace, fix lock imbalance + * relay: fix lock imbalance in relay_late_setup_files + * Linux 2.6.28.3 + * ALSA: Enable SPDIF output on ALC655 + * ALSA: hda - Add ASUS V1Sn support + * ALSA: hda - support detecting HD Audio devices with PCI class code + * ALSA: hda: alc883 model for ASUS P5Q-EM boards + * ALSA: hda - Add quirk for MSI 7260 mobo + * ALSA: hda - Add quirk for Sony VAIO VGN-SR19XN + * ALSA: oxygen: add Claro halo support + * ALSA: hda - Add a new function to seek for a codec ID + * ALSA: patch_sigmatel: Add missing Gateway entries and autodetection + * ALSA: hda - More fixes on Gateway entries + * ALSA: hda - Add MCP67 HDMI support + * ALSA: hda - fix name for ALC1200 + * LSA: hda - Add HP Acacia detection + * ALSA: hda - Add quirk for HP 2230s + * ALSA: hda - Add quirk for Dell Inspiron Mini9 + * ALSA: hda - add support for Intel DX58SO board + * ALSA: hda - Fix silent headphone output on Panasonic CF-74 + * ALSA: USB quirk for Logitech Quickcam Pro 9000 name + * ALSA: hda - add quirks for some 82801H variants to use ALC883_MITAC + + [ Yasunori Goto ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Widen type of + ext4_sb_info.s_mb_maxs[] + + -- Tim Gardner Mon, 02 Feb 2009 23:07:13 -0700 + +linux (2.6.28-6.17) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs: ARMEL/versatile + + -- Amit Kucheria Fri, 30 Jan 2009 13:36:59 +0200 + +linux (2.6.28-6.16) jaunty; urgency=low + + [ Luke Yelavich ] + + * Add hid quirks to input-modules udeb + + [ Tim Gardner ] + + * Revert "[arm] Fix kexec on ARM by properly calling the relocation + function". This patch was deemed 'bogus' by Russell King on the + ARM mailing list. + + [ Upstream Kernel Changes ] + + * PCI: keep ASPM link state consistent throughout PCIe hierarchy + * security: introduce missing kfree + * rt2x00: add USB ID for the Linksys WUSB200. + * p54usb: Add USB ID for Thomson Speedtouch 121g + * lib/idr.c: use kmem_cache_zalloc() for the idr_layer cache + * sgi-xp: eliminate false detection of no heartbeat + * sched: fix update_min_vruntime + * IA64: Turn on CONFIG_HAVE_UNSTABLE_CLOCK + * sound: virtuoso: do not overwrite EEPROM on Xonar D2/D2X + * ALSA: hda - Add quirk for another HP dv5 + * ALSA: hda - Fix HP dv5 mic input + * ALSA: hda - Don't reset HP pinctl in patch_sigmatel.c + * ALSA: hda - make laptop-eapd model back for AD1986A + * drivers/net/irda/irda-usb.c: fix buffer overflow + * usb-storage: add last-sector hacks + * usb-storage: set CAPACITY_HEURISTICS flag for bad vendors + * pkt_sched: sch_htb: Fix deadlock in hrtimers triggered by HTB + * ipv6: Fix fib6_dump_table walker leak + * sctp: Avoid memory overflow while FWD-TSN chunk is received with bad + stream ID + * pkt_sched: cls_u32: Fix locking in u32_change() + * r6040: fix wrong logic in mdio code + * r6040: save and restore MIER correctly in the interrupt routine + * r6040: bump release number to 0.19 + * tcp: don't mask EOF and socket errors on nonblocking splice receive + * p54usb: fix traffic stalls / packet drop + * netfilter: x_tables: fix match/target revision lookup + * netfilter: ebtables: fix inversion in match code + * netfilter: nf_conntrack: fix ICMP/ICMPv6 timeout sysctls on big-endian + * dell_rbu: use scnprintf() instead of less secure sprintf() + * powerpc: is_hugepage_only_range() must account for both 4kB and 64kB + slices + * hwmon: (abituguru3) Fix CONFIG_DMI=n fallback to probe + * mm: write_cache_pages cyclic fix + * mm: write_cache_pages early loop termination + * mm: write_cache_pages writepage error fix + * mm: write_cache_pages integrity fix + * mm: write_cache_pages cleanups + * mm: write_cache_pages optimise page cleaning + * mm: write_cache_pages terminate quickly + * mm: write_cache_pages more terminate quickly + * mm: do_sync_mapping_range integrity fix + * mm: direct IO starvation improvement + * fs: remove WB_SYNC_HOLD + * fs: sync_sb_inodes fix + * fs: sys_sync fix + * Linux 2.6.28.2 + + -- Tim Gardner Sun, 25 Jan 2009 13:36:16 -0700 + +linux (2.6.28-5.15) jaunty; urgency=low + + [ Tim Gardner ] + + * Revert "Enabled CONFIG_PID_NS=y for i386/amd64" + Somehow this commit also reverted the 7 prior commits (which is bad). + * Enabled CONFIG_PID_NS=y for i386/amd64 (version 2) + + -- Tim Gardner Thu, 22 Jan 2009 13:48:34 -0700 + +linux (2.6.28-5.14) jaunty; urgency=low + + [ Ben Collins ] + + * lirc_gpio: Forward ported to current kernel (jaunty) + * configs: Enable LIRC_GPIO on 64-bit/32-bit x86 + - LP: #298791 + + [ Jeff Layton ] + + * SAUCE: cifs: make sure we allocate enough storage for socket address + - LP: #318565 + + [ Tim Gardner ] + + * check-abi: Return success when ABI skip is requested and no ABI files exist. + This ought to fix the armel FTBS. + + -- Tim Gardner Thu, 22 Jan 2009 06:42:49 -0700 + +linux (2.6.28-5.13) jaunty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: don't use buggy _BCL/_BCM/_BQC for backlight control" + + [ Tim Gardner ] + + * Fix udeb generation breakage caused by the previous armel versatile + flavour config update. + + -- Tim Gardner Wed, 21 Jan 2009 12:38:35 -0700 + +linux (2.6.28-5.12) jaunty; urgency=low + + [ Ante ] + + * Update drbd to 8.3.0 + + [ Dave Airlie ] + + * i915/drm: provide compat defines for userspace for certain struct + + [ Eric Anholt ] + + * drm/i915: Don't double-unpin buffers if we take a signal in + * drm/i915: Don't complain when interrupted while pinning in execbuffers. + * drm/i915: Don't allow objects to get bound while VT switched. + + [ Jani Monoses ] + + * Fix webcam having USB ID 0ac8:303b + - LP: #292086 + + [ Jesse Barnes ] + + * drm/i915: set vblank enabled flag correctly across IRQ + * drm/i915: don't enable vblanks on disabled pipes + + [ Michael Casadevall ] + + * [arm] Fix kexec on ARM by properly calling the relocation function + + [ Tim Gardner ] + + * Enabled CONFIG_PID_NS=y for i386/amd64 + * SAUCE: Increase ATA_TMOUT_PMP_SRST_WAIT to 5 seconds. + - LP: #318978 + * Update armel versatile config + - LP: #314789 + * Enabled CONFIG_RT2860=m for i386/amd64 + * Enabled CONFIG_RT2870=m for i386/amd64 + + [ Upstream Kernel Changes ] + + * Input: atkbd - add keyboard quirk for HP Pavilion ZV6100 laptop + - LP: #291878 + * ALSA: hda - Add quirk for another HP dv7 + * ALSA: hda - Add quirk for HP6730B laptop + * ALSA: caiaq - Fix Oops with MIDI + * ALSA: hda - Fix typos for AD1882 codecs + * x86: fix intel x86_64 llc_shared_map/cpu_llc_id anomolies + * x86: default to SWIOTLB=y on x86_64 + * CIFS: make sure that DFS pathnames are properly formed + * ring-buffer: prevent false positive warning + * ring-buffer: fix dangling commit race + * iwlwifi: use GFP_KERNEL to allocate Rx SKB memory + * tx493[89]ide: Fix length for __ide_flush_dcache_range + * tx4939ide: Do not use zero count PRD entry + * SCSI: eata: fix the data buffer accessors conversion regression + * USB: emi26: fix oops on load + * x86, UV: remove erroneous BAU initialization + * x86: fix incorrect __read_mostly on _boot_cpu_pda + * vmalloc.c: fix flushing in vmap_page_range() + * fs: symlink write_begin allocation context fix + * cgroups: fix a race between cgroup_clone and umount + * dm raid1: fix error count + * dm log: fix dm_io_client leak on error paths + * minix: fix add link's wrong position calculation + * md: fix bitmap-on-external-file bug. + * sched_clock: prevent scd->clock from moving backwards, take #2 + * devices cgroup: allow mkfifo + * SCSI: aha152x_cs: Fix regression that keeps driver from using shared + interrupts + * ioat: fix self test for multi-channel case + * USB: isp1760: use a specific PLX bridge instead of any bdridge + * USB: isp1760: Fix probe in PCI glue code + * USB: unusual_devs.h additions for Pentax K10D + * inotify: fix type errors in interfaces + * Move compat system call declarations to compat header file + * Convert all system calls to return a long + * Rename old_readdir to sys_old_readdir + * Remove __attribute__((weak)) from sys_pipe/sys_pipe2 + * Make sys_pselect7 static + * Make sys_syslog a conditional system call + * System call wrapper infrastructure + * powerpc: Enable syscall wrappers for 64-bit + * s390: enable system call wrappers + * System call wrapper special cases + * System call wrappers part 01 + * System call wrappers part 02 + * System call wrappers part 03 + * System call wrappers part 04 + * System call wrappers part 05 + * System call wrappers part 06 + * System call wrappers part 07 + * System call wrappers part 08 + * System call wrappers part 09 + * System call wrappers part 10 + * System call wrappers part 11 + * System call wrappers part 12 + * System call wrappers part 13 + * System call wrappers part 14 + * System call wrappers part 15 + * System call wrappers part 16 + * System call wrappers part 17 + * System call wrappers part 18 + * System call wrappers part 19 + * System call wrappers part 20 + * System call wrappers part 21 + * System call wrappers part 22 + * System call wrappers part 23 + * System call wrappers part 24 + * System call wrappers part 25 + * System call wrappers part 26 + * System call wrappers part 27 + * System call wrappers part 28 + * System call wrappers part 29 + * System call wrappers part 30 + * System call wrappers part 31 + * System call wrappers part 32 + * System call wrappers part 33 + * s390 specific system call wrappers + * x86: fix RIP printout in early_idt_handler + * Fix timeouts in sys_pselect7 + * USB: another unusual_devs entry for another bad Argosy storage device + * USB: storage: extend unusual range for 067b:3507 + * USB: storage: recognizing and enabling Nokia 5200 cell phoes + * HID: fix error condition propagation in hid-sony driver + * fix switch_names() breakage in short-to-short case + * nfs: remove redundant tests on reading new pages + * eCryptfs: check readlink result was not an error before using it + * mvsas: increase port type detection delay to suit Seagate's 10k6 drive ST3450856SS 0003 + * x86: avoid theoretical vmalloc fault loop + * ath9k: enable RXing of beacons on STA/IBSS + * mm lockless pagecache barrier fix + * powerpc: Disable Collaborative Memory Manager for kdump + * ibmvfc: Delay NPIV login retry and add retries + * ibmvfc: Improve async event handling + * getrusage: RUSAGE_THREAD should return ru_utime and ru_stime + * ath5k: ignore the return value of ath5k_hw_noise_floor_calibration + * mm: fix assertion + * XFS: truncate readdir offsets to signed 32 bit values + * Linux 2.6.28.1 + * eCryptfs: Filename Encryption: Tag 70 packets + * eCryptfs: Filename Encryption: Header updates + * eCryptfs: Filename Encryption: Encoding and encryption functions + * eCryptfs: Filename Encryption: filldir, lookup, and readlink + * eCryptfs: Filename Encryption: mount option + * eCryptfs: Replace %Z with %z + * eCryptfs: Fix data types (int/size_t) + * eCryptfs: kerneldoc for ecryptfs_parse_tag_70_packet() + * eCryptfs: Clean up ecryptfs_decode_from_filename() + * fs/ecryptfs/inode.c: cleanup kerneldoc + * staging-p80211: Kill directly reference of netdev->priv + * staging-slicoss: Kill directly reference of netdev->priv + * staging-winbond: Kill directly reference of netdev->priv + * Staging: go7007: fixes due to video_usercopy api change + * Staging: go7007: fixes due v4l2_file_operations api change + * staging: correct dubious use of !x & y + * Staging: w35und: make wb35_probe() and wb35_disconnect() funtions static + * Staging: w35und: remove unused wb35_open() and wb35_close() functions + * Staging: w35und: use msleep() and udelay() + * Staging: w35und: remove the no-op pa_stall_execution macro + * Staging: w35und: purb typedef removal + * Staging: w35und: reg queue struct typedef removal + * Staging: w35und: wb35reg struct typedef removal + * Staging: w35und: padapter struct typedef removal + * Staging: w35und: merge wblinux struct to adapter + * Staging: w35und: wb35_probe() cleanup + * Staging: w35und: remove usb_submit_urb wrapper function + * Staging: w35und: remove usb_alloc_urb wrapper function + * w35und: remove dead code from wbusb_f.h + * Staging: w35und: remove true/false boolean macros + * Staging: w35und: OS_MEMORY_ALLOC wrapper removal + * Staging: w35und: usb_put_dev() is missing from wb35_disconnect() + * Staging: w35und: remove macro magic from MLME_GetNextPacket() + * Staging: w35und: plug memory leak in wbsoft_tx() + * Staging: w35und: move supported band initialization out of wb35_probe() + * Staging: w35und: remove timer wrappers + * Staging: w35und: remove atomic op wrappers + * Staging: w35und: remove memcpy/memcmp wrappers + * Staging: w35und: remove abs() and BIT() macros + * Staging: w35und: remove unused macros from common.h + * Staging: w35und: remove unused link status code + * Staging: w35und: #include cleanup + * Staging: w35und: remove some dead code + * Staging: w35und: move source files to one directory + * Staging: w35und: move struct wbsoft_priv to core.h and use it + * Staging: w35und: remove ->adapter from struct _HW_DATA_T + * Staging: w35und: clean up adapter.h a bit + * Staging: w35und: merge struct wb35_adapter to struct wbsoft_priv + * Staging: w35und: remove global struct ieee80211_hw + * Staging: w35und: inline DRIVER_AUTHOR and DRIVER_DESC macros + * Staging: w35und: clean up wblinux.c a bit + * Staging: w35und: remove unused ->ShutDowned member from struct + LOCAL_PARA + * Staging: w35und: move global wbsoft_enabled to struct wbsoft_priv + * Staging: w35und: move packet_came() to wb35rx.c + * Staging: w35und: remove ->skb_array from struct wbsoft_priv + * Staging: w35und: remove ->shutdown from struct wbsoft_priv + * Staging: w35und: make functions local to mds.c static + * Staging: w35und: make functions local to mlmetxrx.c static + * Staging: w35und: remove dead code from mto.c + * Staging: w35und: make functions local to wb35rx.c static + * Staging: w35und: make functions local to wb35tx.c static + * Staging: w35und: remove dead code from wbhal.c + * Staging: w35und: remove rxisr.c as dead code + * Staging: w35und: fix Kconfig + * Staging: w35und: fix config build warnings + * Staging: wlan-ng: Remove PCI/PLX/PCMCIA files. + * Staging: wlan-ng: Update Help text to mention prism3 devices. + * Staging: wlan-ng: Delete PCI/PLX/PCMCIA-specific code. + * Staging: wlan-ng: Make wlan-ng use WEXT mode by default. + * Staging: wlan-ng: Eliminate more <2.6 kernel support. + * Staging: wlan-ng: Eliminate all backwards-compatibility for <2.6.13 kernels. + * Staging: wlan-ng: Eliminate a boatload of tertiaryAP-only code. + * Staging: wlan-ng: Remove AP-only code from MLME functions. + * Staging: wlan-ng: Get rid of the MTU tests in the rx conversion path. + * Staging: wlan-ng: Eliminate one more rx mtu test. + * Staging: wlan-ng: Eliminate local 'version.h' + * Staging: wlan-ng: Eliminate usage of procfs. + * Staging: wlan-ng: Use standard kernel integer (u32/s32/etc) types. + * Staging: wlan-ng: Eliminate all backwards-compatible kernel code. + * Staging: wlan-ng: Wireless Extension support is mandatory. + * Staging: wlan-ng: use WIRELESS_EXT, not CONFIG_WIRELESS_EXT + * Staging: wlan-ng: Delete a large pile of now-unused code. + * Staging: wlan-ng: Delete a pile of unused mibs. And fix WEXT SET_TXPOWER. + * Staging: wlan-ng: Consolidate wlan-ng into a single module. + * Staging: wlan-ng: Purge all MIBs not used internally. + * Staging: wlan-ng: p80211netdev.c fix netdev alloc to prevent oops on device start + * Staging: wlan-ng: prism2_usb.c always enable the card in probe_usb + * Staging: wlan-ng: hfa384x_usb.c use newest version of 384x_drvr_start + * Staging: wlan-ng: p80211wext.c add latest changes & remove extra nulls from wext_handlers + * Staging: wlan-ng: p80211wext don't set default key id twice + * Staging: wlan-ng: hfa384x_usbin_callback: check for hardware removed + * Staging: wlan-ng: p80211conv.c copy code from wlan-ng-devel branch to not drop packets + * Staging: wlan-ng: remove unused #include + * Staging: wlan-ng: p80211wext.c: use ARRAY_SIZE + * Staging: wlan-ng: fix compiler warnings + * Staging: wlan-ng: skb_p80211_to_ether() - payload_length is unsigned, check before subtraction + * Staging: at76_usb: update drivers/staging/at76_usb w/ mac80211 port + * Staging: at76_usb: fix build breakage + * Staging: at76_usb: remove compiler warnings + * Staging: at76_usb: fix up all remaining checkpatch.pl warnings + * Staging: at76_usb: cleanup dma on stack issues + * Staging: poch: Block size bug fix + * Staging: poch: Update TODO list + * Staging: poch: Correct pages from bytes. + * Staging: poch: minor fixes + * Staging: poch: Fix build warnings + * Staging: poch: Rx control register init + * Staging: poch: Fix user space protocol syncing + * Staging: poch: Fine grained locking + * Staging: sxg: remove typedefs + * Staging: sxg: break the build in a cleaner way when !x86 + * Staging: sxg: update README + * staging: struct device - replace bus_id with dev_name(), dev_set_name() + * Staging: echo: remove typedefs + * Staging: echo: Lindent drivers/staging/echo + * Staging: go7007: saa7134 updates + * Staging: go7007: add sensoray 2250/2251 support + * Staging: go7007: Convert driver to use video_ioctl2 + * Staging: go7007: annotate code pointers + * Staging: go7007: fix minor build warnings + * Staging: go7007: small cleanup + * Staging: go7007: add some more v4l2 ioctls + * Staging: et131x: Cleanup et131x_debug.h defines + * Staging: et131x: fix build failure + * Staging: et131x: remove unused variable in et1310_tx.c + * Staging: usbip: cleanup kerneldoc + * Staging: slicoss: use kzalloc + * Staging: slicoss: use correct type for memory allcations + * Staging: slicoss: use request_firmware + * Staging: add agnx wireless driver + * Staging: agnx: fix build errors due to ssid removal + * Staging: agnx: fix build errors due to rate control API changes + * Staging: agnx: fix build warnings + * Staging: add otus Atheros wireless network driver + * Staging: otus: fix netdev->priv usage + * Staging: otus: fix name clash + * Staging: otus: fix urb callback function type + * Staging: otus: remove dependence on kernel version + * Staging: add rt2860 wireless driver + * Staging: rt2860: disable root hack for reading files + * Staging: rt2860: fix up netdev->priv usage + * Staging: rt2860: use standard bit-reverse function + * Staging: rt2860: Fix minor compiler warnings + * Staging: rt2860: enable WPA_SUPPLICANT support + * Staging: Add ServerEngines benet 10Gb ethernet driver + * Staging: benet: fix netif api breakage + * Staging: benet: fix up netdev->priv change + * Staging: benet: build is broken unless CONFIG_NETPOLL is enabled + * Staging: benet: patch to remove subdirectories + * Staging: benet: fix build errors when CONFIG_NETPOLL is off + * Staging: benet: fix build error. + * Staging: benet: patch to use offsetof() instead of AMAP_BYTE_OFFSET() + * Staging: benet: fix problems reported by checkpatch + * Staging: benet: cleanup a check while posting rx buffers + * Staging: add comedi core + * Staging: comedi: fix up a lot of checkpatch.pl warnings + * Staging: comedi: fix checkpatch.pl errors in comedi_fops.c + * Staging: comedi: fix build error in comedilib.h + * Staging: comedi: add kcomedilib to the tree + * Staging: comedi: set up infrastructure for individual drivers + * Staging: comedi: add local copy of interrupt.h + * Staging: comedi: add pci and usb wrapper header files + * Staging: comedi: comedi driver common function module + * Staging: comedi: add mite comedi pci driver + * Staging: comedi: add usb usbdux driver + * Staging: comedi: add usb usbduxfast driver + * Staging: comedi: add usb dt9812 driver + * Staging: comedi: add comedi_bond driver + * Staging: comedi: add comedi_test driver + * Staging: comedi: add comedi_parport driver + * Staging: comedi: dt9812: fix up a lot of coding style issues + * Staging: comedi: dt9812: remove dt9812.h + * Staging: comedi: dt9812: remove typedefs + * Staging: comedi: dt9812: fix sparse warnings + * Staging: comedi: usbdux: remove kernel version checks + * Staging: comedi: usbdux: code style cleanups + * Staging: comedi: usbdux: remove // comments + * Staging: comedi: usbdux: fix up printk calls + * Staging: comedi: usbdux: remove checkpatch.pl warnings + * Staging: comedi: usbdux: remove typedef + * Staging: comedi: usbdux: remove comedi usb wrappers + * Staging: comedi: usbduxfast: remove comedi usb wrappers + * Staging: comedi: dt9812: remove #ifdef that is not needed + * Staging: comedi: remove usb wrappers + * Staging: comedi: remove PCI wrappers + * Staging: comedi: add icp_multi driver + * Staging: comedi: add me4000 driver + * Staging: comedi: fix checkpatch.pl issues in comedi_bond.c + * Staging: comedi: fix checkpatch.pl issues in comedi_fc.c + * Staging: comedi: remove typedefs from comedi_bond.c + * Staging: comedi: fix sparse issues in comedi_bond.c + * Staging: comedi: fix checkpatch.pl issues in comedi_test.c + * Staging: comedi: fix sparse issues in comedi_test.c + * Staging: comedi: remove typedefs from comedi_test.c + * Staging: comedi: fix comedi_parport.c checkpatch.pl issues. + * Staging: comedi: fix comedi_fc.h checkpatch.pl issues. + * Staging: comedi: fix comedi_pci.h checkpatch.pl issues. + * Staging: comedi: comedi_pci.h: remove unneeded wrapper + * Staging: comedi: comedi_pci.h: remove comedi_pci_enable_no_regions + * Staging: comedi: comedi_pci.h: remove comedi_pci_disable_no_regions + * Staging: comedi: add s626 driver + * Staging: comedi: add rtd520 driver + * Staging: comedi: add me_daq driver + * Staging: comedi: me_daq: fix checkpatch.pl issues + * Staging: comedi: me_daq: remove typedefs + * Staging: comedi: me_daq: fix sparse issues + * Staging: comedi: fix checkpatch.pl warning in interrupt.h + * Staging: comedi: fix build if CONFIG_PROC_FS is not set + * Staging: add asus_oled driver + * Staging: asus_oled: fix build dependancy + * Staging: Add the Meilhaus ME-IDS driver package + * Staging: meilhaus: fix __symbol_get problems + * Staging: add lcd-panel driver + * Staging: panel: major checkpatch cleanup + * Staging: panel: remove ifdefs and code for pre-2.6 kernels + * Staging: panel: remove support for smartcards + * Staging: add Driver for Altera PCI Express Chaining DMA reference design + * Staging: add rtl8187se driver + * Staging: rtl8187se: remove unneeded files + * Staging: rtl8187se: make the built module be the proper name + * Staging: rtl8187se: remove duplicate pci ids + * Staging: me4000: switch to list_for_each*() + * Staging: usbip: switch to list_for_each_entry() + * Staging: add princeton instruments usb camera driver + * Staging: add mimio xi driver + * Staging: add rt2870 wireless driver + * Staging: rt2870: disable root hack for reading files + * Staging: rt2870: fix up netdev->priv usage + * Staging: add frontier tranzport and alphatrack drivers + * Staging: frontier: remove unused alphatrack_sysfs.c file + * Staging: frontier: fix compiler warnings + * Staging: add epl stack + * Staging: epl: run Lindent on all kernel/*.h files + * Staging: epl: run Lindent on all user/*.h files + * Staging: epl: run Lindent on *.h files + * Staging: epl: run Lindent on *.c files + * Staging: epl: hr timers all run in hard irq context now + * Staging: epl: fix netdev->priv b0rkage + * Staging: add android framework + * Staging: android: add binder driver + * Staging: android: binder: Fix gcc warnings about improper format specifiers for size_t in printk + * staging: android: binder: Fix use of euid + * Staging: android: add logging driver + * Staging: android: add ram_console driver + * Staging: android: add timed_gpio driver + * Staging: android: timed_gpio: Rename android_timed_gpio to timed_gpio + * Staging: android: remove dummy android.c driver + * Staging: android: add lowmemorykiller driver + * Staging: android: binder: fix build errors + * staging: __FUNCTION__ is gcc-specific, use __func__ + * V4L/DVB (10176a): Switch remaining clear_user_page users over to + clear_user_highpage + + [ Zhenyu Wang ] + + * agp/intel: add support for G41 chipset + + -- Tim Gardner Sun, 18 Jan 2009 20:22:54 -0700 + +linux (2.6.28-4.11) jaunty; urgency=low + + [ Mario Limonciello ] + + * SAUCE: Enable HDMI audio codec on Studio XPS 1340 + - LP: #309508 + + [ Tim Gardner ] + + * Fix armel d-i FTBSs + + [ Upstream Kernel Changes ] + + * USB: re-enable interface after driver unbinds + + -- Tim Gardner Tue, 13 Jan 2009 16:33:08 -0700 + +linux (2.6.28-4.10) jaunty; urgency=low + + [ Andy Whitcroft ] + + * update kernel bootloader recommends: to prefer grub + - LP: #314004 + * SAUCE: don't use buggy _BCL/_BCM/_BQC for backlight control + - LP: #311716 + * SAUCE: test-suspend -- add the suspend test scripts + - LP: #316419 + + [ Colin Watson ] + + * Enable udebs for armel + + [ Tim Gardner ] + + * SAUCE: Dell laptop digital mic does not work, PCI 1028:0271 + - LP: #309508 + * Enable CIFS_XATTR=y and CONFIG_CIFS_POSIX=y + - LP: #220658 + + -- Tim Gardner Thu, 08 Jan 2009 10:38:22 -0700 + +linux (2.6.28-4.9) jaunty; urgency=low + + [ Tim Gardner ] + + * Restore DM_CRYPT, AES, ECB, and CBC as modules. This fixes + some installer issues with encrypted /home and Private directories. + * Take one more stab at building armel without module or ABI errors. + + -- Tim Gardner Tue, 06 Jan 2009 08:38:23 -0700 + +linux (2.6.28-4.8) jaunty; urgency=low + + * Fix i386/amd64 FTBS by ignoring all module and ABI changes, + not something you would normally do, but I'm sure the ABI + has not changed. This will probably also allow the ARM builds to complete. + + -- Tim Gardner Mon, 05 Jan 2009 14:42:58 -0700 + +linux (2.6.28-4.7) jaunty; urgency=low + + [ Tim Gardner ] + + * Enable CONFIG_ATH5K=m for i386/amd64 + - LP: #306719 + * Build all i386/amd64 AGP/DRM components as modules. + - LP: #312721 + * git commands are now installed outside the default $PATH + Use 'git CMD' instead of 'git-CMD'. + * Build in most PATA/SATA drivers. This should allow most i386/amd64 systems to boot + without an initramfs, though some support work is still required in initramfs-tools + and grub. + - LP: #311730 + + -- Tim Gardner Fri, 02 Jan 2009 07:33:09 -0700 + +linux (2.6.28-4.6) jaunty; urgency=low + + [ Tim Gardner ] + + * Enable CONFIG_X86_E_POWERSAVER=m for i386 generic + - LP: #237405 + * Build i386 AGP drivers as modules + - LP: #312721 + * Build i386 DRM as a module + - LP: #312721 + + [ Upstream Kernel Changes ] + + * drm/i915: Add missing userland definitions for gem init/execbuffer. + - LP: #308387 + + -- Tim Gardner Mon, 29 Dec 2008 09:16:47 -0700 + +linux (2.6.28-4.5) jaunty; urgency=low + + [ Andy Whitcroft ] + + * clean up module dependancy information on package removal/purge + - LP: #300773 + + [ Tim Gardner ] + + * Update iscsitarget to 0.4.17 + * Build in ext{234} + * Build in Crypto modules AES, CBC, ECB + * Build in ACPI AC,BATTERY,BUTTON,FAN,PCI_SLOT,PROCESSOR,SBS,THERMAL,WMI + * Build in AGP intel,via,sis,ali,amd,amd64,efficeon,nvidia,sworks + * Build in ata,dev_dm,dev_loop,dev_md,dev_sd,dev_sr + * Build in BT l2cap,rfcomm,sco + * Reduce CONFIG_LEGACY_PTY_COUNT to 0 + * Build in CDROM_PKTCDVD and CHR_DEV_SG + * Build in CPU_FREQ + GOV_CONSERVATIVE,GOV_ONDEMAND,GOV_POWERSAVE,GOV_USERSPACE,STAT,TABLE + * Build in DM CRYPT,MIRROR,MULTIPATH,SNAPSHOT + * Build in DRM + * Build in HID + * Build in HOTPLUG PCI,PCIE + * Build in I2C + * Build in IEEE1394 OHCI1394 + * Build in INPUT EVDEV + * Build in IPV6 + * Build in MMC + * Build in PACKET + * Enable both IEEE1394 (Firewire) stacks as modules + - LP: #276463 + * Disable SUNRPC_REGISTER_V4 + - LP: #306016 + * Enable dm-raid4-5 + - LP: #309378 + * Build in PPP + * Build in RFKILL + * Build in USB SERIAL + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28 + + -- Tim Gardner Thu, 18 Dec 2008 21:18:44 -0700 + +linux (2.6.28-3.4) jaunty; urgency=low + + [ Tim Gardner ] + + * Build ecryptfs into the kernel + - LP: #302870 + * Deprecated gnbd + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28-rc8 + + -- Tim Gardner Wed, 10 Dec 2008 22:45:13 -0700 + +linux (2.6.28-2.3) jaunty; urgency=low + + [ Andy Whitcroft ] + + * update the templates so that we have spaces following the title line + + [ Tim Gardner ] + + * Add upload number to kernel version signature. This has the side effect + of renaming kernel packages back to the original way, e.g., without '-ub' + in the name. + + -- Tim Gardner Thu, 04 Dec 2008 12:18:31 -0700 + +linux (2.6.28-2.2) jaunty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: (no-up) version: Implement version_signature proc file." + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: serial: RS485 ioctl structure uses __u32 include linux/types.h + - LP: #303711 + + [ Tim Gardner ] + + * UBUNTU: Removed CONFIG_DRM_VIA_CHROME9 since it is upstream. + * UBUNTU: Removed ubuntu/via_chrome9 + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28-rc7 + + -- Tim Gardner Tue, 02 Dec 2008 07:33:32 -0700 + +linux (2.6.28-1.1) jaunty; urgency=low + + [ Amit Kucheria ] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + * SAUCE: Adds support for COMPAL JHL90 webcam + * Map armel to arm to all editconfigs to work correctly + * Add armel to getabis for completeness sake + * Add -ub to our versioning to allow kerneloops.org to identify us + + [ Andy Whitcroft ] + + * Fix Vcs-Git path for the kernel repository. + - LP: #296915 + + [ Ben Collins ] + + * SAUCE: Lower warning level of some PCI messages + - LP: #159241 + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: (no-up) connector.h: Add idx/val for drbd + * SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache + * SAUCE: drivers: Remove some duplicate device entries in various modules + * SAUCE: (no-up) [AppArmor] merge with upstream subversion r1291 + * SAUCE: (no-up) Enable ubuntu extra subdirectory + * SAUCE: (no-up) ACPI: initramfs DSDT override support + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add BOM for iscsitarget + * ubuntu: Add squashfs driver + * SAUCE: (no-up) Check for squashfs superblock in initramfs mounting. + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Added et131x driver + * ubuntu: Add dm-raid4-5 driver + * ubuntu: Add ndiswrapper driver + * ubuntu: Added ram backed compressed swap module (compcache) + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add ov511 and bt-sco drivers + * ubuntu: Add acx, prism2_usb wireless drivers + * ubuntu: Add at76 driver to build + * ubuntu: Add fsam7400 sw kill switch driver + * ubuntu: Added qc-usb driver + * ubuntu: e1000e: Upgraded module to 0.4.1.7 + * ubuntu: Added rfkill drivers + * ubuntu: VIA - Add VIA DRM Chrome9 3D engine + * ubuntu: unionfs: Added v1.4 module from hardy + * ubuntu: Add LIRC driver + * ubuntu: Add GFS driver + * ubuntu: New tlsup driver for toshiba laptops + * SAUCE: (no-up) Export lookup_has for aufs + * SAUCE: (no-up) Modularize vesafb + * ubuntu: Config files + * Disable some modules that need porting to 2.6.28 + * ubuntu: Fixup headers creation to include arch/*/include + * ubuntu/module-check: Ignore comment lines + + [ Chuck Short ] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + + [ cking ] + + * SAUCE: Enable speedstep for sonoma processors. + + [ Colin Ian King ] + + * ubuntu: Add dm-loop + * SAUCE: cx88: Support Leadtek WinFast DTV2000 H version J. + * SAUCE: fix kernel oops in VirtualBox during paravirt patching + * SAUCE: qc-usb: Enable Logitech QuickCam Messenger + * SAUCE: appleir: Enable driver for new MacBook Pro + + [ Colin Watson ] + + * Enable configfs, fuse, jfs, reiserfs, and xfs for armel + * Extend debian/d-i/ modules handling to make armel easier to support + * Create udebs for armel + + [ Fabio M. Di Nitto ] + + * ubuntu: update GFS Cluster File System + + [ Kees Cook ] + + * SAUCE: AppArmor: update to upstream subversion r1302 + + [ Leann Ogasawara ] + + * Add automatic model setting for Samsung Q45 + * Add Dell Dimension 9200 reboot quirk + + [ Mackenzie Morgan ] + + * SAUCE: Add quirk for ASUS Z37E to make sound audible after resume + + [ Matthew Garrett ] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + + [ Michael Haas ] + + * add proper aufs source tree from 20080922 + * Fix AUFS compilation in vfsub.c + * Add splice-2.6.23.patch from AUFS to export a symbol needed by AUFS + * Add put_filp.patch from AUFS to export a symbol needed by AUFS + * Add deny_write_access.patch from AUFS - export deny_write_access + * Add sec_perm-2.6.24.patch from AUFS - export security_inode_permission + * make sure TMPFS_MAGIC is defined in AUFS Makefile + * SAUCE: Revert aufs changes from AppArmor merge + + [ Mohamed Abbas ] + + * SAUCE: iwlagn -- fix rfkill when on when driver loaded + + [ Phillip Lougher ] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [ Stefan Bader ] + + * SAUCE: (no-up) Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: mmc: Increase power_up deleay to fix TI readers + * gfs1: GFS1 can't create more than 4kb file + * uvcvideo: Commit streaming parameters when enabling the video stream. + + [ Tim Gardner ] + + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: (no-up) Take care of orinoco_cs overlap with hostap_cs + * ubuntu: Add GNBD driver + * SAUCE: e1000e: Map NV RAM dynamically only when needed. + * SAUCE: Correctly blacklist Thinkpad r40e in ACPI + * SAUCE: Update Wacom tablet driver to 1.49 + * SAUCE: Fix Wacom tablet 1.49 porting errors + * SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit controller + * SAUCE: Fix Oops in wlan_setup + * SAUCE: ipw2200: change default policy for auto-associate + * Dell Wireless 365 needs BTUSB_RESET quirk. + * ndiswrapper remote buffer overflows on long ESSIDs (CVE 2008-4395) + * Disabled ubuntu/e1000e config + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + * Revert "x86, early_ioremap: fix fencepost error" + * mac80211: fix two issues in debugfs + * iwl3945: do not send scan command if channel count zero + + -- Ben Collins Fri, 07 Nov 2008 09:37:42 -0700 + +linux (2.6.27-8.17) intrepid-proposed; urgency=low + + [ John W. Linville ] + + * SAUCE: iwlagn: avoid sleep in softirq context + -LP: #286285 + + [ Tim Gardner ] + + * Dell Wireless 365 needs BTUSB_RESET quirk. + - LP: #293670 + * SAUCE: ALSA: hda: make a STAC_DELL_EQ option (version 2) + - LP: #293271 + + [ Upstream Kernel Changes ] + + * iwlagn: downgrade BUG_ON in interrupt + * Input: atkbd - expand Latitude's force release quirk to other Dells + * fbcon_set_all_vcs: fix kernel crash when switching the rotated consoles + * modules: fix module "notes" kobject leak + * Driver core: Fix cleanup in device_create_vargs(). + * Driver core: Clarify device cleanup. + * ath9k/mac80211: disallow fragmentation in ath9k, report to userspace + * md: Fix rdev_size_store with size == 0 + * xfs: fix remount rw with unrecognized options + * OHCI: Allow broken controllers to auto-stop + * USB: OHCI: fix endless polling behavior + * USB: Fix s3c2410_udc usb speed handling + * USB: EHCI: log a warning if ehci-hcd is not loaded first + * usb gadget: cdc ethernet notification bugfix + * usb: musb_hdrc build fixes + * drm/i915: fix ioremap of a user address for non-root (CVE-2008-3831) + * DVB: au0828: add support for another USB id for Hauppauge HVR950Q + * DVB: sms1xxx: support two new revisions of the Hauppauge WinTV + MiniStick + * security: avoid calling a NULL function pointer in + drivers/video/tvaudio.c + * Linux 2.6.27.3 + -LP: #294152 + + * gpiolib: fix oops in gpio_get_value_cansleep() + * edac cell: fix incorrect edac_mode + * x86 ACPI: fix breakage of resume on 64-bit UP systems with SMP kernel + * sched: fix the wrong mask_len + * USB: cdc-wdm: make module autoload work + * USB: don't rebind drivers after failed resume or reset + * USB: fix memory leak in cdc-acm + * USB: Speedtouch: add pre_reset and post_reset routines + * dm kcopyd: avoid queue shuffle + * dm snapshot: fix primary_pe race + * amd_iommu: fix nasty bug that caused ILLEGAL_DEVICE_TABLE_ENTRY errors + * CIFS: fix saving of resume key before CIFSFindNext + * netfilter: xt_iprange: fix range inversion match + * netfilter: snmp nat leaks memory in case of failure + * netfilter: restore lost ifdef guarding defrag exception + * anon_vma_prepare: properly lock even newly allocated entries + * hvc_console: Fix free_irq in spinlocked section + * ACPI Suspend: Enable ACPI during resume if SCI_EN is not set + * ACPI suspend: Blacklist HP xw4600 Workstation for old code ordering + * ACPI suspend: Always use the 32-bit waking vector + * proc: fix vma display mismatch between /proc/pid/{maps,smaps} + * SCSI: scsi_dh: add Dell product information into rdac device handler + * PCI hotplug: cpqphp: fix kernel NULL pointer dereference + * V4L/DVB (9300): pvrusb2: Fix deadlock problem + * Linux 2.6.27.4 + -LP: #294155 + + -- Tim Gardner Tue, 04 Nov 2008 12:16:07 -0700 + +linux (2.6.27-7.16) intrepid-security; urgency=low + + [ Tim Gardner ] + + * ndiswrapper remote buffer overflows on long ESSIDs (CVE 2008-4395) + - LP: #275860 + + [ Upstream Kernel Changes ] + + * ext[234]: Avoid printk floods in the face of directory corruption + (CVE-2008-3528) + + -- Tim Gardner Mon, 03 Nov 2008 13:34:42 -0700 + +linux (2.6.27-7.15) intrepid-security; urgency=low + + [ Upstream Kernel Changes ] + + * tcp: Restore ordering of TCP options for the sake of inter-operability + - LP: #264019 + + -- Tim Gardner Mon, 27 Oct 2008 19:28:06 -0600 + +linux (2.6.27-7.14) intrepid; urgency=low + + [ Tim Gardner ] + + * Disable ath5k in 2.6.27 + - LP: #288148 + + -- Tim Gardner Thu, 23 Oct 2008 07:40:43 -0600 + +linux (2.6.27-7.13) intrepid; urgency=low + + [ Stefan Bader ] + + * gfs1: GFS1 can't create more than 4kb file + + [ Tim Gardner ] + + * Revert "SAUCE: x86: Reserve FIRST_DEVICE_VECTOR in used_vectors + bitmap.". Use upstream commit to avoid future conflicts. + * Revert "STABLE queue: mac80211: fix two issues in debugfs". + Use upstream commit to avoid future conflicts. + * Revert "x86, early_ioremap: fix fencepost error" + Use upstream commit to avoid future conflicts. + + [ Upstream Kernel Changes ] + + * sched_rt.c: resch needed in rt_rq_enqueue() for the root rt_rq + * x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + * mac80211: fix two issues in debugfs + * Fix barrier fail detection in XFS + * tty: Termios locking - sort out real_tty confusions and lock reads + * CIFS: make sure we have the right resume info before calling + CIFSFindNext + * rfkill: update LEDs for all state changes + * libertas: clear current command on card removal + * b43legacy: Fix failure in rate-adjustment mechanism + * x86, early_ioremap: fix fencepost error + * x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC + * x86: improve UP kernel when CPU-hotplug and SMP is enabled + * sky2: Fix WOL regression + * netdrvr: atl1e: Don't take the mdio_lock in atl1e_probe + * Linux 2.6.27.2 + + [ Amit Kucheria ] + + * Ubuntu: agp: Fix stolen memory counting on G4X. + -LP: 285572 + + [ Scott Remnant ] + + * add MODULE_ALIAS to load ipmi_devintf with ipmi_si + + -- Tim Gardner Sun, 19 Oct 2008 10:06:21 -0600 + +linux (2.6.27-7.12) intrepid; urgency=low + + [ Chuck Short ] + + * xen: Add xen modules to virtual flavours. + + [ Mario Limonciello ] + + * SAUCE: Add back in lost commit for Apple BT Wireless Keyboard + - LP: #162083 + + [ Tim Gardner ] + + * Remove depmod created files from packages. + - LP: #250511 + * Changed default TCP congestion algorithm to 'cubic' (again) + - LP: #278801 + * Update configs for 'disable CONFIG_DYNAMIC_FTRACE' + - LP: #263555 + + [ Upstream Kernel Changes ] + + * x86: register a platform RTC device if PNP doesn't describe it + * disable CONFIG_DYNAMIC_FTRACE due to possible memory corruption on + module unload + + -- Tim Gardner Fri, 17 Oct 2008 11:25:39 -0600 + +linux (2.6.27-7.11) intrepid; urgency=low + + [ Amit Kucheria ] + + * STABLE queue: mac80211: fix two issues in debugfs + - LP: #275227 + * SAUCE: Adds support for COMPAL JHL90 webcam + + [ Ben Collins ] + + * SAUCE: (no-up) x86: Quiet "Kernel alive" messages + - LP: #39985 + * SAUCE: (no-up) Modularize vesafb + * build/config: Enable vesafb module + * build: Switch to vesafb as preferred. + + [ Leann Ogasawara ] + + * Add Dell Dimension 9200 reboot quirk + - LP: #271370 + + [ Michael Haas ] + + * SAUCE: Revert aufs changes from AppArmor merge + + [ Tim Gardner ] + + * fix virtio udeb layout + - LP: #257739 + * Enabled CONFIG_EXT4DEV_FS=m + * Changed default TCP congestion algorithm to 'cubic' + - LP: #278801 + * SAUCE: ipw2200: change default policy for auto-associate + - LP: #264104 + + [ Upstream Kernel Changes ] + + * x86, early_ioremap: fix fencepost error + - LP: #263543 + + -- Tim Gardner Sat, 11 Oct 2008 08:07:42 -0600 + +linux (2.6.27-7.10) intrepid; urgency=low + + [ Alexey Starikovskiy ] + + * SAUCE: ACPI: EC: do transaction from interrupt context + - LP: #277802 + + [ Ben Collins ] + + * build/d-i: Change virtio-modules udeb to prio standard + + [ Colin Ian King ] + + * SAUCE: Blacklist IBM 2656 in serio/i8042 + - LP: #21558 + + [ Henrik Rydberg ] + + * Revert "SAUCE: applesmc: Add MacBookAir" + * SAUCE: [PATCH 1/5] hwmon: applesmc: Specified number of bytes to read + should match actual + * SAUCE: [PATCH 2/5] hwmon: applesmc: Fix the 'wait status failed: c != + 8' problem + * SAUCE: [PATCH 3/5] hwmon: applesmc: Prolong status wait + * SAUCE: [PATCH 4/5] hwmon: applesmc: Allow for variable ALV0 and ALV1 + package length + * SAUCE: [PATCH 5/5] hwmon: applesmc: Add support for Macbook Air + * SAUCE: hwmon: applesmc: Add support for Macbook Pro 4 + * SAUCE: hwmon: applesmc: Add support for Macbook Pro 3 + * SAUCE: hwmon: applesmc: Lighter wait mechanism, drastic improvement + + [ Leann Ogasawara ] + + * Add automatic model setting for Samsung Q45 + - LP: #200210 + + [ Tim Gardner ] + + * SAUCE: Correctly blacklist Thinkpad r40e in ACPI + - LP: #278794 + * SAUCE: Update Wacom tablet driver to 1.49 + - LP: #260675 + * SAUCE: ALPS touchpad for Dell Latitude E6500/E6400 + - LP: #270643 + * SAUCE: Fix Wacom tablet 1.49 porting errors + * SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit controller + * SAUCE: Fix Oops in wlan_setup + - LP: #263309 + + [ Upstream Kernel Changes ] + + * ath9k: fix oops on trying to hold the wrong spinlock + * [Bluetooth] Fix double frees on error paths of btusb and bpa10x drivers + * [Bluetooth] Add reset quirk for new Targus and Belkin dongles + * [Bluetooth] Add reset quirk for A-Link BlueUSB21 dongle + * Revert "ax25: Fix std timer socket destroy handling." + * ax25: Quick fix for making sure unaccepted sockets get destroyed. + * netrom: Fix sock_orphan() use in nr_release + * Revert "V4L/DVB (8904): cx88: add missing unlock_kernel" + * SLOB: fix bogus ksize calculation + * net: only invoke dev->change_rx_flags when device is UP + * tcp: Fix possible double-ack w/ user dma + * net: Fix netdev_run_todo dead-lock + * tcp: Fix tcp_hybla zero congestion window growth with small rho and large cwnd. + * [MIPS] Sibyte: Register PIO PATA device only for Swarm and Litte Sur + * eeepc-laptop: Fix hwmon interface + * hwmon: (it87) Prevent power-off on Shuttle SN68PT + * hwmon: Define sysfs interface for energy consumption register + * hwmon: (adt7473) Fix some bogosity in documentation file + * hwmon: (abituguru3) Enable reading from AUX3 fan on Abit AT8 32X + * hwmon: (abituguru3) Enable DMI probing feature on Abit AT8 32X + * [CPUFREQ] correct broken links and email addresses + * SLOB: fix bogus ksize calculation fix + * Don't allow splice() to files opened with O_APPEND + * Linux 2.6.27 + + -- Tim Gardner Wed, 08 Oct 2008 21:19:34 -0600 + +linux (2.6.27-6.9) intrepid; urgency=low + + [ Kees Cook ] + + * SAUCE: AppArmor: update to upstream subversion r1302 + - LP: #269921 + + [ Stefan Bader ] + + * Update configuration files to be compliant to desktop specs + - LP: #279019 + + [ Tim Gardner ] + + * Add support in e1000e for a couple of ICH10 PCI IDs + * Enable CONFIG_INPUT_PCSPKR=m + - LP: #275453 + + [ Upstream Kernel Changes ] + + * V4L/DVB (8559a): Fix a merge conflict at gspca/sonixb + * V4L/DVB (8789): wm8739: remove wrong kfree + * V4L/DVB (8883): w9968cf: Fix order of usb_alloc_urb validation + * V4L/DVB (8884): em28xx-audio: fix memory leak + * V4L/DVB (8885): cpia2_usb: fix memory leak + * V4L/DVB (8886): ov511: fix memory leak + * V4L/DVB (8887): gspca: fix memory leak + * V4L/DVB (8892): pvrusb2: Handle USB ID 2040:2950 same as 2040:2900 + * V4L/DVB (8904): cx88: add missing unlock_kernel + * V4L/DVB (8905): ov511: fix exposure sysfs attribute bug + * V4L/DVB (8909): gspca: PAC 7302 webcam 093a:262a added. + * hrtimer: migrate pending list on cpu offline + * hrtimer: fix migration of CB_IRQSAFE_NO_SOFTIRQ hrtimers + * hrtimer: mark migration state + * hrtimer: prevent migration of per CPU hrtimers + * [IA64] Put the space for cpu0 per-cpu area into .data section + * powerpc: Fix PCI in Holly device tree + * powerpc: Fix failure to shutdown with CPU hotplug + * mfd: Fix Kconfig accroding to the new gpiolib symbols + * mfd: Fix asic3 compilation + * x86: fix typo in enable_mtrr_cleanup early parameter + * ipsec: Fix pskb_expand_head corruption in xfrm_state_check_space + * iucv: Fix mismerge again. + * ALSA: ASoC: Fix cs4270 error path + * ALSA: hda - Fix model for Dell Inspiron 1525 + * sctp: Fix kernel panic while process protocol violation parameter + * x86: Fix broken LDT access in VMI + * x86, vmi: fix broken LDT access + * tcp: Fix NULL dereference in tcp_4_send_ack() + * ipv6: NULL pointer dereferrence in tcp_v6_send_ack + * XFRM,IPv6: initialize ip6_dst_blackhole_ops.kmem_cachep + * af_key: Free dumping state on socket close + * dm: always allow one page in dm_merge_bvec + * dm: cope with access beyond end of device in dm_merge_bvec + * dm mpath: add missing path switching locking + * MN10300: Fix IRQ handling + * pxa2xx_spi: fix build breakage + * e1000e: write protect ICHx NVM to prevent malicious write/erase + * powerpc: Fix boot hang regression on MPC8544DS + * ASoC: Set correct name for WM8753 rec mixer output + * ALSA: snd-powermac: mixers for PowerMac G4 AGP + * ALSA: snd-powermac: HP detection for 1st iMac G3 SL + * fbcon: fix monochrome color value calculation + * inotify: fix lock ordering wrt do_page_fault's mmap_sem + * braille_console: only register notifiers when the braille console is used + * fix error-path NULL deref in alloc_posix_timer() + * memory hotplug: missing zone->lock in test_pages_isolated() + * mm: tiny-shmem nommu fix + * mm: handle initialising compound pages at orders greater than MAX_ORDER + * e1000e: reset swflag after resetting hardware + * e1000e: do not ever sleep in interrupt context + * e1000e: remove phy read from inside spinlock + * e1000e: drop stats lock + * e1000e: debug contention on NVM SWFLAG + * e1000e: update version from k4 to k6 + * Check mapped ranges on sysfs resource files + * e1000e: Fix incorrect debug warning + * [MIPS] Build fix: Fix irq flags type + * [MIPS] SMTC: Build fix: Fix filename in Makefile + * [MIPS] SMTC: Fix holes in SMTC and FPU affinity support. + * [MIPS] SMTC: Close tiny holes in the SMTC IPI replay system. + * [MIPS] SMTC: Fix SMTC dyntick support. + * [S390] nohz: Fix __udelay. + * [S390] qdio: prevent stack clobber + * Fix init/main.c to use regular printk with '%pF' for initcall fn + * x86 setup: correct segfault in generation of 32-bit reloc kernel + * selinux: Fix an uninitialized variable BUG/panic in selinux_secattr_to_sid() + * rtc: fix kernel panic on second use of SIGIO nofitication + * fbdev: fix recursive notifier and locking when fbdev console is blanked + * orion_spi: fix handling of default transfer speed + * include/linux/stacktrace.h: declare struct task_struct + * cpusets: remove pj from cpuset maintainers + * MAINTAINERS: add mailing list for man-pages + * SubmitChecklist: interfaces changes should CC linux-api@ + * Documentation/HOWTO: info about interface changes should CC linux-api@vger + * dw_dmac: fix copy/paste bug in tasklet + * leds-fsg: change order of initialization and deinitialization + * leds-pca955x: add proper error handling and fix bogus memory handling + * ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again) + * clockevents: check broadcast tick device not the clock events device + * V4L/DVB (8919): cx18: Fix tuner audio input for Compro H900 cards + * V4L/DVB (8926): gspca: Bad fix of leak memory (changeset 43d2ead315b1). + * V4L/DVB (8933): gspca: Disable light frquency for zc3xx cs2102 Kokom. + * V4L/DVB (8935): em28xx-cards: Remove duplicate entry (EM2800_BOARD_KWORLD_USB2800) + * V4L/DVB (8955): bttv: Prevent NULL pointer dereference in radio_open + * V4L/DVB (8957): zr36067: Restore the default pixel format + * V4L/DVB (8958): zr36067: Return proper bytes-per-line value + * V4L/DVB (8960): drivers/media/video/cafe_ccic.c needs mm.h + * V4L/DVB (8961): zr36067: Fix RGBR pixel format + * V4L/DVB (8963): s2255drv field count fix + * V4L/DVB (8967): Use correct XC3028L firmware for AMD ATI TV Wonder 600 + * V4L/DVB (8978): sms1xxx: fix product name for Hauppauge WinTV MiniStick + * V4L/DVB (8979): sms1xxx: Add new USB product ID for Hauppauge WinTV MiniStick + * V4L/DVB (9029): Fix deadlock in demux code + * V4L/DVB (9037): Fix support for Hauppauge Nova-S SE + * V4L/DVB (9043): S5H1420: Fix size of shadow-array to avoid overflow + * V4L/DVB (9053): fix buffer overflow in uvc-video + * V4L/DVB (9075): gspca: Bad check of returned status in i2c_read() spca561. + * V4L/DVB (9080): gspca: Add a delay after writing to the sonixj sensors. + * V4L/DVB (9092): gspca: Bad init values for sonixj ov7660. + * V4L/DVB (9099): em28xx: Add detection for K-WORLD DVB-T 310U + * V4L/DVB (9103): em28xx: HVR-900 B3C0 - fix audio clicking issue + * x86: gart iommu have direct mapping when agp is present too + * ide-cd: temporary tray close fix + * ide-dma: fix ide_build_dmatable() for TRM290 + * IDE: Fix platform device registration in Swarm IDE driver (v2) + * ide-cd: Optiarc DVD RW AD-7200A does play audio + * ide: workaround for bogus gcc warning in ide_sysfs_register_port() + * [MIPS] Fix CMP Kconfig configuration and mark as broken. + * [MIPS] IP27: Fix build errors if CONFIG_MAPPED_KERNEL=y + * x86 ACPI: Blacklist two HP machines with buggy BIOSes + * kgdb, x86: Avoid invoking kgdb_nmicallback twice per NMI + * kgdb: call touch_softlockup_watchdog on resume + * atmel-mci: Initialize BLKR before sending data transfer command + * Marker depmod fix core kernel list + * Linux 2.6.27-rc9 + + -- Tim Gardner Sun, 05 Oct 2008 21:27:49 -0600 + +linux (2.6.27-5.8) intrepid; urgency=low + + [ Amit Kucheria ] + + * Update AUFS-related Kconfig + - LP: #264048 + + [ Michael Haas ] + + * add proper aufs source tree from 20080922 + * Fix AUFS compilation in vfsub.c + * Add splice-2.6.23.patch from AUFS to export a symbol needed by AUFS + * Add put_filp.patch from AUFS to export a symbol needed by AUFS + * apply (modified) lhash.patch from AUFS to export __lookup_hash() + * Add deny_write_access.patch from AUFS - export deny_write_access + * Add sec_perm-2.6.24.patch from AUFS - export security_inode_permission + * make sure TMPFS_MAGIC is defined in AUFS Makefile + + [ Tim Gardner ] + + * Enabled CONFIG_IPWIRELESS + - LP: #274748 + * Enabled CONFIG_E1000E, disabled CONFIG_E1000E_NEW + This takes advantage of the upstream NVM protection fix in + commit 4a7703582836f55a1cbad0e2c1c6ebbee3f9b3a7. + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + * [SCSI] qla2xxx: Defer enablement of RISC interrupts until ISP + initialization completes. + * PCI: Fix pcie_aspm=force + * PCI: fix compiler warnings in pci_get_subsys() + * UBIFS: create the name of the background thread in every case + * UBIFS: TNC / GC race fixes + * UBIFS: remove incorrect assert + * UBIFS: fix printk format warnings + * AMD IOMMU: set iommu sunc flag after command queuing + * AMD IOMMU: protect completion wait loop with iommu lock + * sparc64: Fix disappearing PCI devices on e3500. + * x86, oprofile: BUG scheduling while atomic + * ALSA: ASoC: Fix at32-pcm build breakage with PM enabled + * ath9k: connectivity is lost after Group rekeying is done + * wireless: zd1211rw: add device ID fix wifi dongle "trust nw-3100" + * [IA64] Ski simulator doesn't need check_sal_cache_flush + * [IA64] kexec fails on systems with blocks of uncached memory + * ath9k: Fix IRQ nobody cared issue with ath9k + * [Bluetooth] Fix I/O errors on MacBooks with Broadcom chips + * [Bluetooth] Fix wrong URB handling of btusb driver + * [Bluetooth] Fix USB disconnect handling of btusb driver + * sparc64: Fix missing devices due to PCI bridge test in + of_create_pci_dev(). + * [WATCHDOG] ibmasr: remove unnecessary spin_unlock() + * [WATCHDOG] wdt285: fix sparse warnings + * [WATCHDOG] unlocked_ioctl changes + * x86: fix 27-rc crash on vsmp due to paravirt during module load + * sched: fix init_hrtick() section mismatch warning + * clockevents: prevent cpu online to interfere with nohz + * x86: prevent stale state of c1e_mask across CPU offline/online + * clockevents: prevent stale tick_next_period for onlining CPUs + * clockevents: check broadcast device not tick device + * clockevents: prevent mode mismatch on cpu online + * x86: prevent C-states hang on AMD C1E enabled machines + * x86: c1e_idle: don't mark TSC unstable if CPU has invariant TSC + * timers: fix build error in !oneshot case + * ALSA: ASoC: maintainers - update email address for Liam Girdwood + * ibmasr: remove unnecessary spin_unlock() + * smb.h: do not include linux/time.h in userspace + * kernel-doc: allow structs whose members are all private + * kexec: fix segmentation fault in kimage_add_entry + * Documentation/DMA-mapping.txt: update for pci_dma_mapping_error() + changes + * sys_paccept: disable paccept() until API design is resolved + * mm: tiny-shmem fix lock ordering: mmap_sem vs i_mutex + * Documentation/sysctl/kernel.txt: fix softlockup_thresh description + * memcg: check under limit at shrink_usage + * atmel_serial: update the powersave handler to match serial core + * [SCSI] Fix hang with split requests + * USB Storage: Sierra: Non-configurable TRU-Install + * USB Serial: Sierra: Device addition & version rev + * USB: ehci: fix some ehci hangs and crashes + * USB: Fix the Nokia 6300 storage-mode. + * USB: Correct Sierra Wireless USB EVDO Modem Device ID + * USB: fix hcd interrupt disabling + * USB: update of Documentation/usb/anchors.txt + * usb gadget: fix omap_udc DMA regression + * USB: Fixing Nokia 3310c in storage mode + * usb: musb: fix include path + * USB: fix EHCI periodic transfers + * usb-serial: Add Siemens EF81 to PL-2303 hack triggers + * USB: SERIAL CP2101 add device IDs + * USB: unusual_devs addition for RockChip MP3 player + * USB: fsl_usb2_udc: fix VDBG() format string + * usb serial: ti_usb_3410_5052 obviously broken by firmware changes + * USB: ftdi_sio: Add 0x5050/0x0900 USB IDs (Papouch Quido USB 4/4) + * USB: serial: add ZTE CDMA Tech id to option driver + * USB Serial: Sierra: Add MC8785 VID/PID + * USB: drivers/usb/musb/: disable it on SuperH + * usb: ftdi_sio: add support for Domintell devices + * usb: unusual devs patch for Nokia 5310 Music Xpress + * USB: revert recovery from transient errors + * [MIPS] au1000: Fix gpio direction + * [MIPS] Fixe the definition of PTRS_PER_PGD + * x86: prevent stale state of c1e_mask across CPU offline/online, fix + * x86: disable apm on the olpc + * i2c-powermac: Fix section for probe and remove functions + * i2c-dev: Return correct error code on class_create() failure + * i2c: Fix mailing lists in two MAINTAINERS entries + * ath9k: disable MIB interrupts to fix interrupt storm + * 9p: implement proper trans module refcounting and unregistration + * 9p-trans_fd: fix trans_fd::p9_conn_destroy() + * 9p-trans_fd: clean up p9_conn_create() + * 9p-trans_fd: don't do fs segment mangling in p9_fd_poll() + * 9p-trans_fd: fix and clean up module init/exit paths + * 9p: introduce missing kfree + * 9p: use an IS_ERR test rather than a NULL test + * 9p: fix put_data error handling + * netfilter: ip6t_{hbh,dst}: Rejects not-strict mode on rule insertion + * MN10300: Move asm-arm/cnt32_to_63.h to include/linux/ + * MN10300: Make sched_clock() report time since boot + * ALSA: fix locking in snd_pcm_open*() and snd_rawmidi_open*() + * ALSA: remove unneeded power_mutex lock in snd_pcm_drop + * IPoIB: Fix crash when path record fails after path flush + * [XFS] Fix extent list corruption in xfs_iext_irec_compact_full(). + * [XFS] Remove xfs_iext_irec_compact_full() + * kgdb: could not write to the last of valid memory with kgdb + * kgdb, x86, arm, mips, powerpc: ignore user space single stepping + * kgdb, x86_64: gdb serial has BX and DX reversed + * kgdb, x86_64: fix PS CS SS registers in gdb serial + * kgdboc,tty: Fix tty polling search to use name correctly + * ARM: Delete ARM's own cnt32_to_63.h + * m32r: remove the unused NOHIGHMEM option + * m32r: don't offer CONFIG_ISA + * m32r: export empty_zero_page + * m32r: export __ndelay + * m32r/kernel/: cleanups + * [MIPS] au1000: Make sure GPIO value is zero or one + * [MIPS] IP27: Switch to dynamic interrupt routing avoding panic on + error. + * [MIPS] BCM47xx: Fix build error due to missing PCI functions + * [SSB] Initialise dma_mask for SSB_BUSTYPE_SSB devices + * Swarm: Fix crash due to missing initialization + * ide-tape: fix vendor strings + * ide: note that IDE generic may prevent other drivers from attaching + * cdrom: update ioctl documentation + * [SCSI] qlogicpti: fix sg list traversal error in continuation entries + * sata_nv: reinstate nv_hardreset() for non generic controllers + * scsi: fix fall out of sg-chaining patch in qlogicpti + * ALSA: make the CS4270 driver a new-style I2C driver + * ALSA: ASoC: Fix another cs4270 error path + * Fix NULL pointer dereference in proc_sys_compare + * kconfig: fix silentoldconfig + * kconfig: readd lost change count + * mm owner: fix race between swapoff and exit + * Linux 2.6.27-rc8 + * e1000e: write protect ICHx NVM to prevent malicious write/erase + + -- Amit Kucheria Tue, 30 Sep 2008 18:22:35 +0300 + +linux (2.6.27-4.7) intrepid; urgency=low + + [ Ben Collins ] + + * build/abi: Add gfs1 to perm blacklist + * build/abi: Ignored changes in gfs2 symbols + + [ Fabio M. Di Nitto ] + + * Revert "SAUCE: Export gfs2 symbols required for gfs1 kernel module" + * ubuntu: update GFS Cluster File System + + [ Stefan Bader ] + + * SAUCE: x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + - LP: #276334 + + [ Tim Gardner ] + + * Revert "Disable e1000e until the NVRAM corruption problem is found." + * Add atl1e and atl2 to Debian installer bits + - LP: #273904 + * SAUCE: e1000e: Map NV RAM dynamically only when needed. + - LP: #263555 + + -- Tim Gardner Fri, 26 Sep 2008 20:51:22 -0600 + +linux (2.6.27-4.6) intrepid; urgency=low + + [ Tim Gardner ] + + * Disable e1000e until the NVRAM corruption problem is found. + - LP: #263555 + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + + -- Ben Collins Tue, 23 Sep 2008 09:53:57 -0400 + +linux (2.6.27-4.5) intrepid; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "b43/b43legacy: add RFKILL_STATE_HARD_BLOCKED support" + * udf: Fix lock inversion between iprune_mutex and alloc_mutex (v2) + * udf: Fix error paths in udf_new_inode() + * [SCSI] sd: select CRC_T10DIF only when necessary + * [SCSI] zfcp: Fix request queue locking + * [SCSI] zfcp: Correctly query end flag in gpn_ft response + * [SCSI] zfcp: Simplify ccw notify handler + * [SCSI] zfcp: Fix reference counter for remote ports + * [SCSI] zfcp: channel cannot be detached due to refcount imbalance + * [SCSI] zfcp: Remove duplicated unlikely() macros. + * [SCSI] scsi_dh: make check_sense return ADD_TO_MLQUEUE + * [SCSI] make scsi_check_sense HARDWARE_ERROR return ADD_TO_MLQUEUE on + retry + * [SCSI] fix check of PQ and PDT bits for WLUNs + * pcm037: add rts/cts support for serial port + * i.MX serial: fix init failure + * imx serial: set RXD mux bit on i.MX27 and i.MX31 + * imx serial: fix rts handling for non imx1 based hardware + * mlx4_core: Set RAE and init mtt_sz field in FRMR MPT entries + * udf: add llseek method + * PCI/iommu: blacklist DMAR on Intel G31/G33 chipsets + * PCI: Fix printk warnings in probe.c + * PCI: Fix printk warnings in setup-bus.c + * PCI Hotplug: fakephp: fix deadlock... again + * clockevents: remove WARN_ON which was used to gather information + * ocfs2: Fix a bug in direct IO read. + * arch/x86/kernel/kdebugfs.c: introduce missing kfree + * [IA64] fix compile failure with non modular builds + * [IA64] fix up bte.h + * [IA64] arch/ia64/sn/pci/tioca_provider.c: introduce missing kfree + * PCI: fix pciehp_free_irq() + * [IA64] prevent ia64 from invoking irq handlers on offline CPUs + * ide: Fix pointer arithmetic in hpt3xx driver code (3rd try) + * add deprecated ide-scsi to feature-removal-schedule.txt + * swiotlb: fix back-off path when memory allocation fails + * sparc64: Fix interrupt register calculations on Psycho and Sabre. + * VIDEO_SH_MOBILE_CEU should depend on HAS_DMA + * m68k: Update defconfigs for 2.6.27-rc6 + * sparc32: Fix function signature of of_bus_sbus_get_flags(). + * sched: fix 2.6.27-rc5 couldn't boot on tulsa machine randomly + * sched: fix deadlock in setting scheduler parameter to zero + * KVM: SVM: fix random segfaults with NPT enabled + * KVM: SVM: fix guest global tlb flushes with NPT + * KVM: VMX: Always return old for clear_flush_young() when using EPT + * clocksource, acpi_pm.c: fix check for monotonicity + * [ARM] OMAP: Fix MMC device data + * block: disable sysfs parts of the disk command filter + * ath9k: Assign seq# when mac80211 requests this + * sg: disable interrupts inside sg_copy_buffer + * MN10300: Change the fault handler to check in_atomic() not + in_interrupt() + * [Bluetooth] Fix regression from using default link policy + * netlink: fix overrun in attribute iteration + * x86: fix possible x86_64 and EFI regression + * sparc64: Fix PCI error interrupt registry on PSYCHO. + * sparc: Fix user_regset 'n' field values. + * niu: panic on reset + * PCI: re-add debug prints for unmodified BARs + * [ARM] 5245/1: Fix warning about unused return value in drivers/pcmcia + * [ARM] 5246/1: tosa: add proper clock alias for tc6393xb clock + * [ARM] 5247/1: tosa: SW_EAR_IN support + * [ARM] Fix PCI_DMA_BUS_IS_PHYS for ARM + * ata: duplicate variable sparse warning + * sata_inic162x: enable LED blinking + * [libata] LBA28/LBA48 off-by-one bug in ata.h + * proc: more debugging for "already registered" case + * include/linux/ioport.h: add missing macro argument for devm_release_* + family + * cpuset: avoid changing cpuset's cpus when -errno returned + * cpuset: hotplug documentation fix + * coredump_filter: add description of bit 4 + * bfs: fix Lockdep warning + * mm: ifdef Quicklists in /proc/meminfo + * spi_mpc83xx: fix clockrate calculation for low speed + * spi_mpc83xx: reject invalid transfer sizes + * pxa2xx_spi: chipselect bugfixes + * pxa2xx_spi: dma bugfixes + * mm: mark the correct zone as full when scanning zonelists + * Documentation/ABI: /sys/class/gpio + * MAINTAINERS: fix USB VIDEO CLASS mail list address + * ia64: fix panic during `modprobe -r xpc' + * atmel_lcdfb: disable LCD and DMA engines when suspending + * spi_s3c24xx: fix section warning + * rescan_partitions(): make device capacity errors non-fatal + * memstick: fix MSProHG 8-bit interface mode support + * Add Uwe Kleine-König to .mailmap + * xen: fix for xen guest with mem > 3.7G + * x86/paravirt: Remove duplicate paravirt_pagetable_setup_{start, done}() + * crypto: talitos - Avoid consecutive packets going out with same IV + * slub: fixed uninitialized counter in struct kmem_cache_node + * udp: Fix rcv socket locking + * IB/mlx4: Fix up fast register page list format + * [MIPS] VR41xx: unsigned irq cannot be negative + * x86: completely disable NOPL on 32 bits + * [S390] cio: Fix driver_data handling for ccwgroup devices. + * [S390] cio: fix orb initialization in cio_start_key + * sparc64: Fix OOPS in psycho_pcierr_intr_other(). + * sparc64: Fix SMP bootup with CONFIG_STACK_DEBUG or ftrace. + * RDMA/nes: Fix client side QP destroy + * IPoIB: Fix deadlock on RTNL between bcast join comp and ipoib_stop() + * clockevents: make device shutdown robust + * powerpc: Fix interrupt values for DMA2 in MPC8610 HPCD device tree + * hpplus: fix build regression + * Fix PNP build failure, bugzilla #11276 + * warn: Turn the netdev timeout WARN_ON() into a WARN() + * [XFS] Move memory allocations for log tracing out of the critical path + * [XFS] Fix regression introduced by remount fixup + * [XFS] Prevent direct I/O from mapping extents beyond eof + * [XFS] Fix barrier status change detection. + * [XFS] Prevent lockdep false positives when locking two inodes. + * [XFS] Fix use-after-free with buffers + * [XFS] Don't do I/O beyond eof when unreserving space + * powerpc: Holly board needs dtbImage target + * Fix compile failure with non modular builds + * [ARM] 5249/1: davinci: remove redundant check in davinci_psc_config() + * [ARM] omap: back out 'internal_clock' support + * sctp: set the skb->ip_summed correctly when sending over loopback. + * [ARM] 5255/1: Update jornada ssp to remove build errors/warnings + * sctp: do not enable peer features if we can't do them. + * sctp: Fix oops when INIT-ACK indicates that peer doesn't support AUTH + * bnx2: Promote vector field in bnx2_irq structure from u16 to unsigned + int + * forcedeth: call restore mac addr in nv_shutdown path + * e1000: prevent corruption of EEPROM/NVM + * e100: Use pci_pme_active to clear PME_Status and disable PME# + * md: Don't wait UNINTERRUPTIBLE for other resync to finish + * atstk1000: fix build breakage with BOARD_ATSTK100X_SW2_CUSTOM=y + * avr32: add .gitignore files + * avr32: add generic_find_next_le_bit bit function + * avr32: fix sys_sync_file_range() call convention + * avr32: nmi_enter() without nmi_exit() + * KVM: ia64: 'struct fdesc' build fix + * hwmon: (atxp1) Fix device detection logic + * hwmon: (it87) Fix fan tachometer reading in IT8712F rev 0x7 (I) + * hwmon: (ad7414) Make ad7414_update_device() static + * tmio_mmc: fix compilation with debug enabled + * atmel-mci: debugfs: enable clock before dumping regs + * atmel-mci: Fix memory leak in atmci_regs_show + * atmel-mci: Fix bogus debugfs file size + * atmel-mci: Set MMC_CAP_NEEDS_POLL if no detect_pin + * mmc_block: handle error from mmc_register_driver() + * mmc_test: initialize mmc_test_lock statically + * [MIPS] Fix 64-bit IP checksum code + * [MIPS] SMTC: Clear TIF_FPUBOUND on clone / fork. + * [MIPS] Fix potential latency problem due to non-atomic cpu_wait. + * [MIPS] vmlinux.lds.S: handle .text.* + * MAINTAINERS: Trivial whitespace cleanups + * MAINTAINERS: Various fixes + * Linux 2.6.27-rc7 + + -- Tim Gardner Sun, 21 Sep 2008 21:49:28 -0600 + +linux (2.6.27-3.4) intrepid; urgency=low + + [ Colin Ian King ] + + * SAUCE: fix kernel oops in VirtualBox during paravirt patching + - LP: #246067 + * SAUCE: qc-usb: Enable Logitech QuickCam Messenger + - LP: #209901 + * SAUCE: appleir: Enable driver for new MacBook Pro + - LP: #157919 + + [ Tim Gardner ] + + * Enabled CONFIG_DEBUG_RODATA=y + + [ Upstream Kernel Changes ] + + * Revert "ALSA: hda - Added model selection for iMac 24"" + * Revert "x86: fix HPET regression in 2.6.26 versus 2.6.25, check hpet + against BAR, v3" + * Revert "[ARM] use the new byteorder headers" + * Revert "mac80211: Use IWEVASSOCREQIE instead of IWEVCUSTOM" + * Revert "crypto: camellia - Use kernel-provided bitops, unaligned access + helpers" + * svcrdma: Fix race between svc_rdma_recvfrom thread and the dto_tasklet + * sched, cpuset: rework sched domains and CPU hotplug handling (v4) + * ACPI: Fix now signed module parameter. + * ACPI: Change package length error to warning + * ACPI: Fix now signed module parameter. + * ACPI: Fix typo in "Disable MWAIT via DMI on broken Compal board" + * acpi: add checking for NULL early param + * UBIFS: fix zero-length truncations + * Input: bcm5974 - add maintainer entry + * sh64: re-add the __strnlen_user() prototype + * sh: fix ptrace_64.c:user_disable_single_step() + * PNPACPI: ignore the producer/consumer bit for extended IRQ descriptors + * UBIFS: always read hashed-key nodes under TNC mutex + * UBIFS: allow for racing between GC and TNC + * [CIFS] Fix plaintext authentication + * sparc32: Implement smp_call_function_single(). + * sh: crash kernel resource fix + * sh: fix kexec entry point for crash kernels + * sh: fix platform_resource_setup_memory() section mismatch + * sh: update Migo-R defconfig + * sh: update AP325RXA defconfig + * sh: fix semtimedop syscall + * cifs: fix O_APPEND on directio mounts + * [CIFS] update cifs change log + * [CIFS] Turn off Unicode during session establishment for plaintext + authentication + * ACPI: thinkpad-acpi: wan radio control is not experimental + * sparc: Fix resource flags for PCI children in OF device tree. + * remove blk_register_filter and blk_unregister_filter in gendisk + * ALSA: oxygen: fix distorted output on AK4396-based cards + * ipv6: When we droped a packet, we should return NET_RX_DROP instead of + 0 + * pkt_sched: Fix locking of qdisc_root with qdisc_root_sleeping_lock() + * net: Unbreak userspace usage of linux/mroute.h + * Don't trigger softlockup detector on network fs blocked tasks + * Resource handling: add 'insert_resource_expand_to_fit()' function + * sparc64: setup_valid_addr_bitmap_from_pavail() should be __init + * UBIFS: do not update min_idx_lebs in stafs + * UBIFS: push empty flash hack down + * UBIFS: remove incorrect index space check + * UBIFS: improve statfs reporting + * UBIFS: fix assertion + * UBIFS: add forgotten gc_idx_lebs component + * UBIFS: introduce LEB overhead + * UBIFS: improve statfs reporting even more + * UBIFS: fill f_fsid + * drm/radeon: downgrade debug message from info to debug. + * Remove invalidate_partition call from do_md_stop. + * Fix problem with waiting while holding rcu read lock in md/bitmap.c + * ALSA: hda: Distortion fix for dell_m6_core_init + * ALSA: ASoC: fix pxa2xx-i2s clk_get call + * block: restore original behavior of /proc/partition when there's no + partition + * debugobjects: fix lockdep warning + * avr32: Fix lockup after Java stack underflow in user mode + * avr32: pm_standby low-power ram bug fix + * nfsd: fix compound state allocation error handling + * sunrpc: fix possible overrun on read of /proc/sys/sunrpc/transports + * nfsd: fix buffer overrun decoding NFSv4 acl + * audit: Moved variable declaration to beginning of function + * Fix modules_install on RO nfs-exported trees. + * Remove '#include ' from mm/page_isolation.c + * dabusb_fpga_download(): fix a memory leak + * [MTD] mtdchar.c: Fix regression in MEMGETREGIONINFO ioctl() + * ALSA: hda - Fix ALC663 auto-probe + * ALSA: hda - Add mic-boost controls to ALC662/663 auto configuration + * Un-break printk strings in x86 PCI probing code + * kernel/resource.c: fix new kernel-doc warning + * softlockup: minor cleanup, don't check task->state twice + * fix typo in arch/parisc/hpux/fs.c + * m68k: atari_keyb_init operator precedence fix + * ACPI: Fix typo in "Disable MWAIT via DMI on broken Compal board" + * don't diff generated firmware files + * IDE: compile fix for sff_dma_ops + * IDE: palm_bk3710: fix compile warning for unused variable + * ide: fix hwif_to_node() + * palm_bk3710: improve IDE registration + * ide-disk: remove stale init_idedisk_capacity() documentation + * ide/Kconfig: mark ide-scsi as deprecated + * net/wireless/Kconfig: clarify the description for + CONFIG_WIRELESS_EXT_SYSFS + * iwlwifi: do not use GFP_DMA in iwl_tx_queue_init + * iwlwifi: workaround interrupt handling no some platforms + * iwlwifi: fix apm_stop (wrong bit polarity for FLAG_INIT_DONE) + * iwlwifi: fix 64bit platform firmware loading + * orinoco: Multicast to the specified addresses + * wireless/libertas/if_cs.c: fix memory leaks + * mac80211: Fix debugfs union misuse and pointer corruption + * rt2x00: Compiler warning unmasked by fix of BUILD_BUG_ON + * ath9k: Incorrect key used when group and pairwise ciphers are + different. + * ath9: Fix ath_rx_flush_tid() for IRQs disabled kernel warning message. + * net/xfrm: Use an IS_ERR test rather than a NULL test + * ipv: Re-enable IP when MTU > 68 + * NTFS: update homepage + * mm: make setup_zone_migrate_reserve() aware of overlapping nodes + * VFS: fix dio write returning EIO when try_to_release_page fails + * acer-wmi: remove debugfs entries upon unloading + * mm/bootmem: silence section mismatch warning - + contig_page_data/bootmem_node_data + * MAINTAINERS: add a maintainer for the BCM5974 multitouch driver + * 8250: improve workaround for UARTs that don't re-assert THRE correctly + * mmc: at91_mci: don't use coherent dma buffers + * pid_ns: zap_pid_ns_processes: fix the ->child_reaper changing + * pid_ns: (BUG 11391) change ->child_reaper when init->group_leader exits + * cirrusfb: check_par fixes + * devcgroup: fix race against rmdir() + * mm: show quicklist usage in /proc/meminfo + * mm: size of quicklists shouldn't be proportional to the number of CPUs + * ipc: document the new auto_msgmni proc file + * hp-wmi: update to match current rfkill semantics + * hp-wmi: add proper hotkey support + * tdfxfb: fix SDRAM memory size detection + * tdfxfb: fix frame buffer name overrun + * rtc_time_to_tm: fix signed/unsigned arithmetic + * ibft: fix target info parsing in ibft module + * sysfs: document files in /sys/firmware/sgi_uv/ + * rtc-cmos: wake again from S5 + * pm_qos_requirement might sleep + * drivers/char/random.c: fix a race which can lead to a bogus BUG() + * ipsec: Fix deadlock in xfrm_state management. + * [x86] Fix TSC calibration issues + * tipc: Don't use structure names which easily globally conflict. + * sparc64: Fix IPI call locking. + * [ARM] omap: fix gpio.c build error + * sparc64: Prevent sparc64 from invoking irq handlers on offline CPUs + * powerpc: Fix uninitialised variable in VSX alignment code + * powerpc: Only make kernel text pages of linear mapping executable + * powerpc: Make sure _etext is after all kernel text + * powerpc: Work around gcc's -fno-omit-frame-pointer bug + * powerpc: Fix build error with 64K pages and !hugetlbfs + * powerpc: Fix for getting CPU number in power_save_ppc32_restore() + * UBIFS: amend f_fsid + * net/usb/pegasus: avoid hundreds of diagnostics + * ixgbe: initialize interrupt throttle rate + * pcnet-cs, axnet_cs: add new IDs, remove dup ID with less info + * netxen: Remove workaround for chipset quirk + * Split up PIT part of TSC calibration from native_calibrate_tsc + * iwlwifi: W/A for the TSF correction in IBSS + * iwlwifi: fix hidden ssid discovery in passive channels + * iwlwifi: remove false rxon if rx chain changes + * iwlwifi: fix station mimo power save values + * iwlwifi: fix rx_chain computation + * iwlwifi: fix Tx cmd memory allocation failure handling + * iwlwifi: call apm stop on exit + * iwlwifi: fix STATUS_EXIT_PENDING is not set on pci_remove + * ath9k: Fix TX status reporting + * ath9k: Fix TX control flag use for no ACK and RTS/CTS + * V4L/DVB (8555): au8522: add mechanism to configure IF frequency for vsb + and qam + * V4L/DVB (8556): au0828: add support for Hauppauge Woodbury + * V4L/DVB (8598): au8522: clean up function au8522_set_if + * V4L/DVB (8599): au8522: remove if frequency settings from vsb/qam + modulation tables + * V4L/DVB (8600): au0828: explicitly set 6 MHz IF frequency in + hauppauge_hvr950q_config + * V4L/DVB (8629): v4l2-ioctl: do not try to handle private V4L1 ioctls + * V4L/DVB (8633): ivtv: update ivtv version number + * V4L/DVB (8648): ivtv: improve CC support + * V4L/DVB (8660): gspca: Simplify the scan of URB packets in pac7311. + * V4L/DVB (8661): gspca: Bug in the previous changeset about pac7311. + * V4L/DVB (8663): gspca: Webcam 0c45:6128 added in sonixj. + * V4L/DVB (8664): gspca: The bridge/sensor of the webcam 093a:2621 is a + PAC 7302. + * V4L/DVB (8665): gspca: Fix the 640x480 resolution of the webcam + 093a:2621. + * V4L/DVB (8666): gspca: Bad scanning of frames in pac7311. + * V4L/DVB (8667): gspca: Bad probe of Z-Star/Vimicro webcams with pas106 + sensor. + * V4L/DVB (8668): gspca: Conflict GSPCA / ET61X251 for the webcam + 102c:6251. + * V4L/DVB (8669): gspca: Add white balance control for spca561 rev 012A. + * V4L/DVB (8671): gspca: Remove the unused field 'dev_name' of the device + structure. + * V4L/DVB (8672): gspca: Big rewrite of spca561. + * V4L/DVB (8673): gspca: Bad frame scanning again and bad init in + pac7311. + * V4L/DVB (8674): gspca: Webcam 0c45:612e added in sonixj. + * V4L/DVB (8675): gspca: Pixmap PJPG (Pixart 73xx JPEG) added, generated + by pac7311. + * V4L/DVB (8678): Remove the dead CONFIG_RADIO_MIROPCM20{,_RDS} code + * V4L/DVB (8681): v4l2-ioctl.c: fix warning + * V4L/DVB (8682): V4L: fix return value of register video func + * V4L/DVB (8701): cx18: Add missing lock for when the irq handler + manipulates the queues + * V4L/DVB (8703): gspca: Do controls work for spca561 revision 12a. + * V4L/DVB (8705): gspca: Adjust some control limits in spca561. + * V4L/DVB (8706): Make contrast and brightness work for pac7302. + * V4L/DVB (8707): gspca: Colors, hflip and vflip controls added for + pac7302. + * V4L/DVB (8709): gspca: Fix initialization and controls of sn9x110 - + ov7630. + * V4L/DVB (8710): gspca: Bad color control in sonixj. + * V4L/DVB (8711): gspca: Bad controls and quantization table of pac7311. + * V4L/DVB (8712): gspca: Bad start of sonixj webcams since changeset + a8779025e7e8. + * V4L/DVB (8713): gspca: Bad color control again in sonixj. + * V4L/DVB (8714): gspca: Bad start of sn9c110 and sensor om6802. + * V4L/DVB (8715): gspca: Change the name of some webcam in the gspca doc. + * V4L/DVB (8716): gspca: Bad start of sn9c110 and sensor ov7630. + * V4L/DVB (8717): gspca: Frame buffer too small for small resolutions + (sonixj and t613). + * V4L/DVB (8718): gspca: suspend/resume added. + * V4L/DVB (8719): gspca: Have VIDIOC_QUERYCTRL more compliant to the + spec. + * V4L/DVB (8720): gspca: V4L2_CAP_SENSOR_UPSIDE_DOWN added as a cap for + some webcams. + * V4L/DVB (8722): sms1xxx: fix typo in license header + * V4L/DVB (8726): link tuner before saa7134 + * V4L/DVB (8727): V4L1: make PMS not autoprobe when builtin. + * V4L/DVB (8728): 1-make-pms-not-autoprobe-when-builtin update + * V4L/DVB (8749): Fix error code, when camera is not turned on by sonypi + * V4L/DVB (8750): V4L: check inval in video_register_device_index() + * V4L/DVB (8751): vivi: Fix some issues at vivi register routine + * V4L/DVB (8757): v4l-dvb: fix a bunch of sparse warnings + * V4L/DVB (8769): cx18: Simplify queue flush logic to prevent oops in + cx18_flush_queues() + * V4L/DVB (8778): radio: fix incorrect video_register_device result check + * V4L/DVB (8779): v4l: fix more incorrect video_register_device result + checks + * V4L/DVB (8790): saa7115: call i2c_set_clientdata only when state != + NULL + * V4L/DVB (8803): s5h1409: Enable QAM_AUTO mode + * V4L/DVB (8804): s5h1411: Enable QAM_AUTO mode + * V4L/DVB (8805): Steven Toth email address change + * V4L/DVB (8809): gspca: Revert commit + 9a9335776548d01525141c6e8f0c12e86bbde982 + * V4L/DVB (8810): gspca: Compile error when CONFIG_PM not defined. + * V4L/DVB (8812): gspca: Do pac73xx webcams work. + * V4L/DVB (8813): gspca: Adjust SOF detection for pac73xx. + * V4L/DVB (8814): gspca: Set DISABLED the disabled controls at query + control time. + * V4L/DVB (8815): gspca: Fix problems with disabled controls. + * V4L/DVB (8816): gspca: Set disabled ctrls and fix a register pb with + ovxxxx in sonixb. + * V4L/DVB (8817): gspca: LED and proble changes in sonixb. + * V4L/DVB (8818): gspca: Reinitialize the device on resume. + * V4L/DVB (8819): gspca: Initialize the ov519 at open time and source + cleanup. + * V4L/DVB (8820): gspca: Change initialization and gamma of zc3xx - + pas106. + * V4L/DVB (8822): gspca: Change some subdriver functions for + suspend/resume. + * V4L/DVB (8823): gspca: H and V flips work for ov7670 only in ov519. + * V4L/DVB (8824): gspca: Too much code removed in the suspend/resume + changeset. + * V4L/DVB (8825): gspca: More controls for pac73xx and new webcam + 093a:2624. + * V4L/DVB (8826): gspca: Webcam Labtec 2200 (093a:2626) added in pac7311. + * V4L/DVB (8827): gspca: Stop pac7302 autogain oscillation. + * V4L/DVB (8828): gspca: Set the clock at the end of initialization in + sonixj. + * V4L/DVB (8829): gspca: Have a clean kmalloc-ated buffer for USB + exchanges. + * V4L/DVB (8830): gspca: Move some probe code to the new init function. + * V4L/DVB (8831): gspca: Resolve webcam conflicts between some drivers. + * V4L/DVB (8832): gspca: Bad pixelformat of vc0321 webcams. + * V4L/DVB (8833): gspca: Cleanup the sonixb code. + * V4L/DVB (8834): gspca: Have a bigger buffer for sn9c10x compressed + images. + * V4L/DVB (8835): gspca: Same pixfmt as the sn9c102 driver and raw Bayer + added in sonixb. + * V4L/DVB (8837): dvb: fix I2C adapters name size + * V4L/DVB (8839): dib0700: add comment to identify 35th USB id pair + * V4L/DVB (8840): dib0700: add basic support for Hauppauge Nova-TD-500 + (84xxx) + * V4L/DVB (8842): vivi_release(): fix use-after-free + * V4L/DVB (8843): tda10048_firmware_upload(): fix a memory leak + * V4L/DVB (8844): dabusb_fpga_download(): fix a memory leak + * bnx2x: Accessing un-mapped page + * SELinux: memory leak in security_context_to_sid_core + * x86: add io delay quirk for Presario F700 + * mmap: fix petty bug in anonymous shared mmap offset handling + * x86: Change warning message in TSC calibration. + * PCI: fix pbus_size_mem() resource alignment for CardBus controllers + * [ARM] omap: fix build error in ohci-omap.c + * [ARM] remove unused #include + * ACPI: Make Len Brown the ACPI maintainer again + * fujitsu-laptop: fix regression for P8010 in 2.6.27-rc + * ACPI: Avoid bogus timeout about SMbus check + * acer-wmi: remove debugfs entries upon unloading + * forgotten refcount on sysctl root table + * V4L/DVB (8868): gspca: Support for vga modes with sif sensors in + sonixb. + * V4L/DVB (8869): gspca: Move the Sonix webcams with TAS5110C1B from + sn9c102 to gspca. + * V4L/DVB (8870): gspca: Fix dark room problem with sonixb. + * V4L/DVB (8872): gspca: Bad image format and offset with rev072a of + spca561. + * V4L/DVB (8873): gspca: Bad image offset with rev012a of spca561 and + adjust exposure. + * V4L/DVB (8874): gspca: Adjust hstart for sn9c103/ov7630 and update + usb-id's. + * [ARM] omap: fix virtual vs physical address space confusions + * V4L/DVB (8876): budget: udelay changed to mdelay + * V4L/DVB (8877): b2c2 and bt8xx: udelay to mdelay + * V4L/DVB (8880): PATCH: Fix parents on some webcam drivers + * V4L/DVB (8881): gspca: After 'while (retry--) {...}', retry will be -1 + but not 0. + * powerpc/spufs: Fix multiple get_spu_context() + * powerpc/spufs: Fix race for a free SPU + * Input: bcm5974 - small formatting cleanup + * Input: bcm5974 - improve finger tracking and counting + * Input: bcm5974 - add BTN_TOUCH event for mousedev benefit + * Input: i8042 - make Lenovo 3000 N100 blacklist entry more specific + * sh: resume_kernel fix for kernel oops built with CONFIG_BKL_PREEMPT=y. + * sh64: resume_kernel fix for kernel oops built with + CONFIG_BKL_PREEMPT=y. + * i2c: fix i2c-sh_mobile timing issues + * clockevents: prevent clockevent event_handler ending up handler_noop + * clockevents: prevent endless loop in periodic broadcast handler + * clockevents: enforce reprogram in oneshot setup + * clockevents: prevent multiple init/shutdown + * clockevents: prevent endless loop lockup + * HPET: make minimum reprogramming delta useful + * [MTD] [NAND] tmio_nand: fix base address programming + * Fix conditional export of kvh.h and a.out.h to userspace. + * async_tx: fix the bug in async_tx_run_dependencies + * sched_clock: fix NOHZ interaction + * sched: fix process time monotonicity + * UBIFS: fix division by zero + * UBIFS: make minimum fanout 3 + * [MIPS] Fix data bus error recovery + * [MIPS] Fix WARNING: at kernel/smp.c:290 + * [MIPS] TXx9: Fix txx9_pcode initialization + * [MIPS] TX39xx: Add missing local_flush_icache_range initialization + * [MIPS] Probe initrd header only if explicitly specified + * res_counter: fix off-by-one bug in setting limit + * forcedeth: fix kexec regression + * atmel_lcdfb: fix oops in rmmod when framebuffer fails to register + * tracehook: comment pasto fixes + * drivers/mmc/card/block.c: fix refcount leak in mmc_block_open() + * x86: boot: stub out unimplemented CPU feature words + * x86: add NOPL as a synthetic CPU feature bit + * x86: use X86_FEATURE_NOPL in alternatives + * clockevents: broadcast fixup possible waiters + * x86: HPET fix moronic 32/64bit thinko + * x86: HPET: read back compare register before reading counter + * Fix CONFIG_AC97_BUS dependency + * [ARM] 5241/1: provide ioremap_wc() + * ntp: fix calculation of the next jiffie to trigger RTC sync + * clocksource, acpi_pm.c: use proper read function also in errata mode + * clocksource, acpi_pm.c: check for monotonicity + * x86: delay early cpu initialization until cpuid is done + * x86: move mtrr cpu cap setting early in early_init_xxxx + * sched: arch_reinit_sched_domains() must destroy domains to force + rebuild + * x86, xen: Use native_pte_flags instead of native_pte_val for .pte_flags + * x86: pda_init(): fix memory leak when using CPU hotplug + * x86: cpu_init(): fix memory leak when using CPU hotplug + * powerpc/spufs: Fix possible scheduling of a context to multiple SPEs + * netfilter: nf_conntrack_sip: de-static helper pointers + * netfilter: nf_conntrack_gre: more locking around keymap list + * netfilter: nf_conntrack_gre: nf_ct_gre_keymap_flush() fixlet + * netfilter: nf_conntrack_irc: make sure string is terminated before + calling simple_strtoul + * pkt_sched: Fix qdisc state in net_tx_action() + * powerpc: Fix rare boot build breakage + * ahci, pata_marvell: play nicely together + * sata_mv: add RocketRaid 1720 PCI ID to driver + * ahci: disable PMP for marvell ahcis + * sata_nv: disable hardreset for generic + * libata-sff: kill spurious WARN_ON() in ata_hsm_move() + * pata_sil680: remove duplicate pcim_enable_device + * ahci: RAID mode SATA patch for Intel Ibex Peak DeviceIDs + * [MIPS] IP22: Fix detection of second HPC3 on Challenge S + * xen: fix 2.6.27-rc5 xen balloon driver warnings + * x86: disable static NOPLs on 32 bits + * netns : fix kernel panic in timewait socket destruction + * bridge: don't allow setting hello time to zero + * NFS: Restore missing hunk in NFS mount option parser + * usb: fix null deferences in low level usb serial + * Fix format of MAINTAINERS + * sparc64: Disable timer interrupts in fixup_irqs(). + * [Bluetooth] Fix reference counting during ACL config stage + * [Bluetooth] Enforce correct authentication requirements + * [Bluetooth] Reject L2CAP connections on an insecure ACL link + * [S390] CVE-2008-1514: prevent ptrace padding area read/write in 31-bit + mode + * [S390] cio: Correct cleanup on error. + * [S390] cio: handle ssch() return codes correctly. + * [S390] cio: allow offline processing for disconnected devices + * ipsec: Restore larval states and socket policies in dump + * update Documentation/filesystems/Locking for 2.6.27 changes + * MAINTAINERS: add Atheros maintainer for atlx + * lib: Correct printk %pF to work on all architectures + * x86: fix memmap=exactmap boot argument + * clockevents: remove WARN_ON which was used to gather information + * ipv6: Fix OOPS in ip6_dst_lookup_tail(). + * Linux 2.6.27-rc6 + + -- Ben Collins Tue, 02 Sep 2008 12:45:56 -0400 + +linux (2.6.27-2.3) intrepid; urgency=low + + [ Ben Collins ] + + * build/retag: Make script save .orig of tags for later use + * ubuntu/lirc: Fix device_create call + * build/firmware: Put in-kernel firmware into version specific subdir + - LP: #262115 + * Rebase on linux-2.6 git. + * ABI bump + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: (no-up) Apparmor warning fixes + + [ John Johansen ] + + * SAUCE: (no-up) Proper AppArmor ptrace updates for newer lsm API + + [ Mackenzie Morgan ] + + * SAUCE: Add quirk for ASUS Z37E to make sound audible after resume + - LP: #25896 + + -- Ben Collins Wed, 27 Aug 2008 14:03:05 -0400 + +linux (2.6.27-1.2) intrepid; urgency=low + + [ Amit Kucheria ] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [ Ben Collins ] + + * SAUCE: Lower warning level of some PCI messages + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: (no-up) connector.h: Add idx/val for drbd + * SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache + * SAUCE: drivers: Remove some duplicate device entries in various modules + * SAUCE: (no-up) [AppArmor] merge with upstream subversion r1291 + * SAUCE: apparmor: Update for changes to ptrace lsm hooks + * SAUCE: (no-up) Enable ubuntu extra subdirectory + * SAUCE: applesmc: Add MacBookAir + * SAUCE: (no-up) ACPI: initramfs DSDT override support + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add BOM for iscsitarget + * ubuntu: Add squashfs driver + * SAUCE: (no-up) Check for squashfs superblock in initramfs mounting. + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Added et131x driver + * ubuntu: Add dm-raid4-5 driver + * ubuntu: Add ndiswrapper driver + * ubuntu: Added ram backed compressed swap module (compcache) + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add ov511 and bt-sco drivers + * ubuntu: Add acx, prism2_usb wireless drivers + * ubuntu: Add at76 driver to build + * ubuntu: Add fsam7400 sw kill switch driver + * ubuntu: Added qc-usb driver + * ubuntu: e1000e: Upgraded module to 0.4.1.7 + * ubuntu: Added rfkill drivers + * ubuntu: VIA - Add VIA DRM Chrome9 3D engine + * ubuntu: unionfs: Added v1.4 module from hardy + * ubuntu: Add LIRC driver + * ubuntu: Add GFS driver + * ubuntu: New tlsup driver for toshiba laptops + * Update config files + * build/d-i: Remove obsolete dm modules + + [ Chuck Short ] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + + [ Colin Ian King ] + + * ubuntu: Add dm-loop + * SAUCE: Enable speedstep for sonoma processors. + + [ Dennis Noordsij ] + + * SAUCE: Work around ACPI corruption upon suspend on some Dell machines. + + [ Fabio M. Di Nitto ] + + * SAUCE: Export gfs2 symbols required for gfs1 kernel module + + [ Matthew Garrett ] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + + [ Phillip Lougher ] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [ Stefan Bader ] + + * SAUCE: (no-up) Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: mmc: Increase power_up deleay to fix TI readers + + [ Tim Gardner ] + + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: (no-up) Take care of orinoco_cs overlap with hostap_cs + * ubuntu: Add GNBD driver + + -- Ben Collins Sat, 23 Aug 2008 15:48:35 -0400 + +linux (2.6.27-0.0) intrepid; urgency=low + + * Not uploaded, placeholder for new release + + -- Ben Collins Sat, 23 Aug 2008 15:48:35 -0400 + +linux (2.6.26-5.17) intrepid; urgency=low + + [ Ben Collins ] + + * build/abi: Add tosh_smm symbol to blacklist + + -- Ben Collins Fri, 15 Aug 2008 09:29:34 -0400 + +linux (2.6.26-5.16) intrepid; urgency=low + + [ Ben Collins ] + + * Revert "SAUCE: toshiba_acpi: Rewrote most of the proc entry bits." + * Revert "SAUCE: Update toshiba_acpi.c to version 0.19a" + * build/config: Disable in-kernel toshiba driver(s) + * ubuntu/tlsup: New driver for toshiba laptops + * build/config: Enable TLSUP driver + * SAUCE: e1000e: Fix E1000E_ENABLED logic to check for our E1000E_NEW + driver as well + * ubuntu/e1000e: Remove E1000E_ENABLED option in local config + * build/config: Update configs to have E1000E_ENABLED set + * ubuntu/prism2: Remove duplicate device + + [ Fabio M. Di Nitto ] + + * SAUCE: Export gfs2 symbols required for gfs1 kernel module + + [ Stefan Bader ] + + * SAUCE: x86: HPET rework for SB700 + - LP: #255910 + + [ Tim Gardner ] + + * Add GNBD driver + * Enable GNBD driver + * SAUCE: Add GFS driver + * SAUCE: Enable gfs driver configs + * b43: Linksys WMP54G (BCM4306/3) card in a PCI format has an SPROM + coding + + [ Upstream Kernel Changes ] + + * KVM: x86 emulator: emulate clflush + * USB: quirk PLL power down mode + + -- Ben Collins Mon, 11 Aug 2008 13:19:28 -0400 + +linux (2.6.26-5.15) intrepid; urgency=low + + [ Ben Collins ] + + * Revert "SAUCE: Add blacklist support to fix Belkin bluetooth dongle." + - Superceded by upstream changes. + * build/config: New option enabled for uvcvideo + * build/control: Add Vcs-Git meta data to control file + * SAUCE: toshiba_acpi: Rewrote most of the new code + * abi/perm-blacklist: Add emu10k1 driver to blacklist + + [ Upstream Kernel Changes ] + + * pxamci: trivial fix of DMA alignment register bit clearing + * udplite: Protection against coverage value wrap-around + * ipv6: use timer pending + * ipv6: __KERNEL__ ifdef struct ipv6_devconf + * hdlcdrv: Fix CRC calculation. + * quota: fix possible infinite loop in quota code + * isofs: fix minor filesystem corruption + * KVM: VMX: Fix a wrong usage of vmcs_config + * KVM: SVM: fix suspend/resume support + * KVM: mmu_shrink: kvm_mmu_zap_page requires slots_lock to be held + * KVM: VMX: Add ept_sync_context in flush_tlb + * KVM: x86 emulator: Fix HLT instruction + * KVM: MMU: nuke shadowed pgtable pages and ptes on memslot destruction + * KVM: MMU: Fix potential race setting upper shadow ptes on nonpae hosts + * Patch Upstream: x86 ptrace: fix PTRACE_GETFPXREGS error + * rcu: fix rcu_try_flip_waitack_needed() to prevent grace-period stall + * Fix typos from signal_32/64.h merge + * x86 reboot quirks: add Dell Precision WorkStation T5400 + * USB: fix usb serial pm counter decrement for disconnected interfaces + * x86, suspend, acpi: enter Big Real Mode + * markers: fix duplicate modpost entry + * Fix build on COMPAT platforms when CONFIG_EPOLL is disabled + * proc: fix /proc/*/pagemap some more + * cpusets: fix wrong domain attr updates + * x86: fix crash due to missing debugctlmsr on AMD K6-3 + * ide-cd: fix oops when using growisofs + * rtc-at91rm9200: avoid spurious irqs + * vmlinux.lds: move __attribute__((__cold__)) functions back into final + .text section + * ARM: fix fls() for 64-bit arguments + * tcp: Clear probes_out more aggressively in tcp_ack(). + * sparc64: Fix lockdep issues in LDC protocol layer. + * sparc64: Fix cpufreq notifier registry. + * sparc64: Do not define BIO_VMERGE_BOUNDARY. + * iop-adma: fix platform driver hotplug/coldplug + * myri10ge: do not forget to setup the single slice pointers + * myri10ge: do not use mgp->max_intr_slots before loading the firmware + * ALSA: trident - pause s/pdif output + * V4L: cx18: Upgrade to newer firmware & update documentation + * DVB: dib0700: add support for Hauppauge Nova-TD Stick 52009 + * V4L: uvcvideo: Fix a buffer overflow in format descriptor parsing + * V4L: uvcvideo: Use GFP_NOIO when allocating memory during resume + * V4L: uvcvideo: Don't free URB buffers on suspend + * V4L: uvcvideo: Make input device support optional + * V4L: uvcvideo: Add support for Medion Akoya Mini E1210 integrated + webcam + * V4L: saa7134: Copy tuner data earlier to avoid overwriting manual tuner + type + * V4L: cx23885: Bugfix for concurrent use of /dev/video0 and /dev/video1 + * DVB: cx23885: Ensure PAD_CTRL is always reset to a sensible default + * DVB: cx23885: DVB Transport cards using DVB port VIDB/TS1 did not + stream + * DVB: cx23885: Reallocated the sram to avoid concurrent VIDB/C issues + * DVB: cx23885: SRAM changes for the 885 and 887 silicon parts + * x86: fix kernel_physical_mapping_init() for large x86 systems + * eCryptfs: use page_alloc not kmalloc to get a page of memory + * UML - Fix boot crash + * ixgbe: remove device ID for unsupported device + * mpc52xx_psc_spi: fix block transfer + * tmpfs: fix kernel BUG in shmem_delete_inode + * markers: fix markers read barrier for multiple probes + * VFS: increase pseudo-filesystem block size to PAGE_SIZE + * cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called + already + * b43legacy: Release mutex in error handling code + * ath5k: don't enable MSI, we cannot handle it yet + * Fix off-by-one error in iov_iter_advance() + * Linux 2.6.26.1 + * ftrace: remove unneeded documentation + * romfs_readpage: don't report errors for pages beyond i_size + * netfilter: nf_nat_sip: c= is optional for session + * SCSI: bsg: fix bsg_mutex hang with device removal + * x86: idle process - add checking for NULL early param + * x86: io delay - add checking for NULL early param + * Close race in md_probe + * Kprobe smoke test lockdep warning + * netfilter: xt_time: fix time's time_mt()'s use of do_div() + * linear: correct disk numbering error check + * SCSI: ch: fix ch_remove oops + * NFS: Ensure we zap only the access and acl caches when setting new acls + * jbd: fix race between free buffer and commit transaction + * Input: i8042 - add Intel D845PESV to nopnp list + * Input: i8042 - add Gericom Bellagio to nomux blacklist + * Input: i8042 - add Acer Aspire 1360 to nomux blacklist + * Bluetooth: Signal user-space for HIDP and BNEP socket errors + * Add compat handler for PTRACE_GETSIGINFO + * ALSA: hda - Fix wrong volumes in AD1988 auto-probe mode + * ALSA: hda - Fix DMA position inaccuracy + * ALSA: hda - Add missing Thinkpad Z60m support + * ALSA: emu10k1 - Fix inverted Analog/Digital mixer switch on Audigy2 + * vfs: fix lookup on deleted directory + * Ath5k: fix memory corruption + * Ath5k: kill tasklets on shutdown + * sound: ensure device number is valid in snd_seq_oss_synth_make_info + * Linux 2.6.26.2 + + -- Ben Collins Sun, 03 Aug 2008 13:25:02 -0400 + +linux (2.6.26-5.14) intrepid; urgency=low + + [ Ben Collins ] + + * SAUCE: applesmc: Add MacBookAir + * build: Do not build ddeb unless we are on the buildd + * build: control: Consistency in arch fields. + * SAUCE: Update toshiba_acpi.c to version 0.19a + - LP: #77026 + * build: Added perm blacklist support and per-module support to abi-check + - Blacklist p80211 module from abi checks + * ubuntu/lirc: Get rid of drivers symlink and use real include stuff + + + [ Colin Ian King ] + + * SAUCE: acerhk module - add support for Amilo A1650g keyboard + - LP: #84159 + * SAUCE: rt2x00: Fix OOPS on failed creation of rt2x00lib workqueue + - LP: #249242 + + [ Mario Limonciello ] + + * Add LIRC back in + + [ Tim Gardner ] + + * Makefile race condition can lead to ndiswrapper build failure + - LP: #241547 + * update linux-wlan-ng (prism2_usb) to upstream version 1861 + - LP: #245026 + + [ Upstream Kernel Changes ] + + * Fix typos from signal_32/64.h merge + + -- Ben Collins Fri, 01 Aug 2008 00:05:01 -0400 + +linux (2.6.26-5.13) intrepid; urgency=low + + [ Ben Collins ] + + * build: Make makedumpfile an amd64/i386 only build-dep + * ubuntu/acerhk: Fixup assembly to compile with newer binutils + + -- Ben Collins Sat, 26 Jul 2008 16:41:50 -0400 + +linux (2.6.26-4.12) intrepid; urgency=low + + [ Ben Collins ] + + * e1000e: Upgraded module to 0.4.1.7 upstream. Placed in ubuntu/, + in-kernel driver disabled + * config: Disable e1000e in-kernel, and enable newer driver in ubuntu/ + * rfkill: Update to 1.3 drivers, and move to common location + * ubuntu: Actually link kconfig/kbuild into rfkill subdir + * config: Enable loading dsdt from initramfs + - LP: #246222 + * ubuntu: [compcache] Update to fix crashes in improper BUG() + * build: Create a retag scripts to recover tags from rebases + * build: Updates for dbg pkg + * build: Make sure no empty lines show up in debian/files + * ubuntu: atl1e: Add new driver from 2.6.27-pre-rc1 + - LP: #243894 + * sys_getcwd: Fix some brokeness introduced by AppArmor __d_path + changes + - LP: #251223 + * ubuntu: unionfs: Added v1.4 module from hardy + * build: Add sub-flavour infrastructure, and virtual subflav + + [ Eric Piel ] + + * ACPI: Allow custom DSDT tables to be loaded from initramfs + + [ Kees Cook ] + + * AppArmor: Smack VFS patches + + [ Mario Limonciello ] + + * Work around ACPI corruption upon suspend on some Dell machines. + - LP: #183033 + + [ Tim Gardner ] + + * Export usbhid_modify_dquirk for LBM module bcm5974 + - LP: #250838 + * VIA - Add VIA DRM Chrome9 3D engine + - LP: #251862 + * Define TRUE/FALSE for VIA DRM driver. + + -- Ben Collins Tue, 15 Jul 2008 12:51:39 -0400 + +linux (2.6.26-4.11) intrepid; urgency=low + + [ Ben Collins ] + + * config: Enable bcm5974 driver in all configs + + [ 2.6.26-4.10 ] + + [ Amit Kucheria ] + + * Fix typo in GSPCA Makefile and make it compile + + [ Ben Collins ] + + * ubuntu: Remove UVC driver in favor of in-kernel one (-rc9) + * config: Updates for -rc9 + * ubuntu: Add acx, prism2_usb wireless drivers + * config: Enable prism2_usb and acx drivers. + * ubuntu: Add at76 driver to build + * config: Enable at76_usb driver. + * iscsitarget: Fix prototype for bi_end_io callback. + * acx: Fix section type mismatch warnings + * fsam7400: Add sw kill switch driver + * config: Enable fsam7400 driver + * qc-usb: Added new driver + * config: Enable qc-usb driver + * drbd: Remove built-in connector usage + * drbd: Do not define idx/val for connector here + * connector.h: Add idx/val for drbd + * bcm5974: Added new driver + + [ Kees Cook ] + + * SAUCE: [AppArmor] merge with upstream subversion r1291 + * SAUCE: [AppArmor] fix typo in selinux_inode_link + * SAUCE: [AppArmor] aufs patches + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + - LP: #241749 + + [ Tim Gardner ] + + * SAUCE: Medion Akoya Mini E1210 + + [ Upstream Kernel Changes ] + + * Revert "BAST: Remove old IDE driver" + * ARM: OMAP: DMA: Don't mark channel active in omap_enable_channel_irq + * ARM: OMAP: Correcting the gpmc prefetch control register address + * debugobjects: fix lockdep warning + * [ARM] 5115/1: pxafb: fix ifdef for command line option handling + * [ARM] 5116/1: pxafb: cleanup and fix order of failure handling + * [ARM] 5109/1: Mark rtc sa1100 driver as wakeup source before + registering it + * [ARM] Export dma_sync_sg_for_device() + * fix cgroup-inflicted breakage in block_dev.c + * [patch for 2.6.26 2/4] vfs: utimensat(): be consistent with utime() for + immutable and append-only files + * [patch for 2.6.26 1/4] vfs: utimensat(): ignore tv_sec if tv_nsec == + UTIME_OMIT or UTIME_NOW + * [patch for 2.6.26 3/4] vfs: utimensat(): fix error checking for + {UTIME_NOW,UTIME_OMIT} case + * [patch for 2.6.26 4/4] vfs: utimensat(): fix write access check for + futimens() + * [patch 1/4] vfs: path_{get,put}() cleanups + * [patch 2/4] fs: make struct file arg to d_path const + * [patch 3/4] vfs: fix ERR_PTR abuse in generic_readlink + * [patch 4/4] flock: remove unused fields from file_lock_operations + * [patch 3/3] vfs: make d_path() consistent across mount operations + * [patch 1/3] vfs: dcache sparse fixes + * [patch 2/3] vfs: dcache cleanups + * udf: Fix regression in UDF anchor block detection + * [SCSI] ses: Fix timeout + * netfilter: ip6table_mangle: don't reroute in LOCAL_IN + * [SCSI] esp: Fix OOPS in esp_reset_cleanup(). + * kernel/audit.c: nlh->nlmsg_type is gotten more than once + * audit: fix kernel-doc parameter notation + * remove useless argument type in audit_filter_user() + * Blackfin arch: fix bug - kernel boot fails when Spinlock and rw-lock + debugging enabled + * Blackfin arch: fix up section mismatch warning + * mac80211: implement EU regulatory domain + * b43: Do not return TX_BUSY from op_tx + * b43legacy: Do not return TX_BUSY from op_tx + * b43: Fix possible MMIO access while device is down + * b43legacy: Fix possible NULL pointer dereference in DMA code + * rt2x00: Fix unbalanced mutex locking + * iwlwifi: improve scanning band selection management + * [SCSI] esp: tidy up target reference counting + * [ARM] 5117/1: pxafb: fix __devinit/exit annotations + * thermal: Create CONFIG_THERMAL_HWMON=n + * ACPI: don't walk tables if ACPI was disabled + * dock: bay: Don't call acpi_walk_namespace() when ACPI is disabled. + * x86: shift bits the right way in native_read_tscp + * x86: section/warning fixes + * V4L/DVB (8004): Fix INPUT dependency at budget-ci + * V4L/DVB (8005): Fix OOPS if frontend is null + * V4L/DVB (8007): cx18/cx25840: the S-Video LUMA input can use all + In1-In8 inputs + * V4L/DVB (8008): cx18: remove duplicate audio and video input enums + * V4L/DVB (8010): em28xx: Properly register extensions for already + attached devices + * V4L/DVB (8011): em28xx: enable DVB for HVR-900 + * V4L/DVB (8012): gl861: sleep a little to avoid I2C errors + * V4L/DVB (8013): gl861: remove useless identify_state + * V4L/DVB (8015): gl861: replace non critical msleep(0) with msleep(1) to + be on the safe side + * V4L/DVB (8017): Ensure em28xx extensions only get run against devs that + support them + * V4L/DVB (8018): Add em2860 chip ID + * V4L/DVB (8020): Fix callbacks functions of saa7134_empress + * V4L/DVB (8022): saa7134: fix race between opening and closing the + device + * V4L/DVB (8026): Avoids an OOPS if dev struct can't be successfully + recovered + * V4L/DVB (8027): saa7134: Avermedia A700: only s-video and composite + input are working + * V4L/DVB (8028): Improve error messages for tda1004x attach + * V4L/DVB (8029): Improve error message at tda1004x_attach + * V4L/DVB (8034): tda18271: fix IF notch frequency handling + * V4L/DVB (8035): tda18271: dont touch EB14 if rf_cal lookup is out of + range + * V4L/DVB (8036): tda18271: toggle rf agc speed mode on TDA18271HD/C2 + only + * V4L/DVB (8037): tda18271: ensure that the thermometer is off during + channel configuration + * V4L/DVB (8039): pxa-camera: fix platform_get_irq() error handling. + * V4L/DVB (8040): soc-camera: remove soc_camera_host_class class + * V4L/DVB (8042): DVB-USB UMT-010 channel scan oops + * V4L/DVB (8043): au0828: add support for additional USB device id's + * V4L/DVB (8044): au8522: tuning optimizations + * V4L/DVB (8048): saa7134: Fix entries for Avermedia A16d and Avermedia + E506 + * V4L/DVB (8061): cx18: only select tuner / frontend modules if + !DVB_FE_CUSTOMISE + * V4L/DVB (8063): cx18: Fix unintended auto configurations in + cx18-av-core + * V4L/DVB (8066): cx18: Fix audio mux input definitions for HVR-1600 Line + In 2 and FM radio + * V4L/DVB (8067): cx18: Fix firmware load for case when digital capture + happens first + * V4L/DVB (8068): cx18: Add I2C slave reset via GPIO upon initialization + * V4L/DVB (8069): cx18: Fix S-Video and Compsite inputs for the Yuan + MPC718 and enable card entry + * V4L/DVB (8071): tda10023: Fix possible kernel oops during + initialisation + * V4L/DVB (8073): av7110: Catch another type of ARM crash + * V4L/DVB (8074): av7110: OSD transfers should not be interrupted + * V4L/DVB (8075): stv0299: Uncorrected block count and bit error rate + fixed + * V4L/DVB (8092): videodev: simplify and fix standard enumeration + * V4L/DVB (8096): au8522: prevent false-positive lock status + * V4L/DVB (8097): xc5000: check device hardware state to determine if + firmware download is needed + * V4L/DVB (8100): V4L/vivi: fix possible memory leak in vivi_fillbuff + * V4L/DVB (8108): Fix open/close race in saa7134 + * s2io: fix documentation about intr_type + * tc35815: Mark carrier-off before starting PHY + * tc35815: Fix receiver hangup on Rx FIFO overflow + * ixgbe: fix EEH recovery during reset on PPC + * igb: fix EEH recovery during reset on PPC + * e1000e: fix EEH recovery during reset on PPC + * pcnet_cs, axnet_cs: clear bogus interrupt before request_irq + * drivers/net/r6040.c: Eliminate double sizeof + * ipg: fix jumbo frame compilation + * ipg: use NULL, not zero, for pointers + * [netdrvr] 3c59x: remove irqs_disabled warning from local_bh_enable + * [netdrvr] netxen: fix netxen_pci_tbl[] breakage + * e100: Do pci_dma_sync after skb_alloc for proper operation on ixp4xx + * e1000: only enable TSO6 via ethtool when using correct hardware + * [netdrvr] Fix IOMMU overflow checking in s2io.c + * qla3xxx: Hold RTNL while calling dev_close() + * Hold RTNL while calling dev_close() + * sata_uli: hardreset is broken + * rt2x00: Fix lock dependency errror + * prism: islpci_eth.c endianness fix + * mac80211: fix an oops in several failure paths in key allocation + * firewire: fw-sbp2: fix parsing of logical unit directories + * kbuild: fix a.out.h export to userspace with O= build. + * Ensure interrupted recovery completed properly (v1 metadata plus + bitmap) + * Don't acknowlege that stripe-expand is complete until it really is. + * Fix error paths if md_probe fails. + * hamradio: remove unused variable + * tcp: calculate tcp_mem based on low memory instead of all memory + * tcp: fix for splice receive when used with software LRO + * af_unix: fix 'poll for write'/connected DGRAM sockets + * netdevice: Fix typo of dev_unicast_add() comment + * pkt_sched: ERR_PTR() ususally encodes an negative errno, not positive. + * pkt_sched: Remove CONFIG_NET_SCH_RR + * include/linux/netdevice.h: don't export MAX_HEADER to userspace + * tcp: /proc/net/tcp rto,ato values not scaled properly (v2) + * netlink: Fix some doc comments in net/netlink/attr.c + * CONNECTOR: add a proc entry to list connectors + * inet fragments: fix race between inet_frag_find and + inet_frag_secret_rebuild + * net/inet_lro: remove setting skb->ip_summed when not LRO-able + * netlabel: Fix a problem when dumping the default IPv6 static labels + * ipv6 route: Convert rt6_device_match() to use RT6_LOOKUP_F_xxx flags. + * sched: fix cpu hotplug + * Fix and clean top .gitignore + * x86: fix cpu hotplug crash + * ptrace GET/SET FPXREGS broken + * Input: add KEY_MEDIA_REPEAT definition + * Input: fix locking in force-feedback core + * [ARM] 5131/1: Annotate platform_secondary_init with trace_hardirqs_off + * ide: fix /proc/ide/ide?/mate reporting + * netfilter: nf_conntrack_tcp: fixing to check the lower bound of valid + ACK + * textsearch: fix Boyer-Moore text search bug + * hostap: don't report useless WDS frames by default + * hostap: fix sparse warnings + * mac80211: don't accept WEP keys other than WEP40 and WEP104 + * V4L/DVB (8145a): USB Video Class driver + * [IA64] Bugfix for system with 32 cpus + * [IA64] export account_system_vtime + * sched: fix divide error when trying to configure rt_period to zero + * x86: fix NODES_SHIFT Kconfig range + * block: Fix the starving writes bug in the anticipatory IO scheduler + * Properly notify block layer of sync writes + * rcu: fix hotplug vs rcu race + * I2C: S3C2410: Check ACK on byte transmission + * I2C: S3C2410: Fixup error codes returned rom a transfer. + * I2C: S3C2410: Add MODULE_ALIAS() for s3c2440 device. + * PCI: Restrict VPD read permission to root + * powerpc/bootwrapper: update for initrd with simpleImage + * i2c: Documentation: fix device matching description + * i2c: Fix bad hint about irqs in i2c.h + * powerpc/legacy_serial: Bail if reg-offset/shift properties are present + * powerpc/mpc5200: Fix lite5200b suspend/resume + * ipv4: fix sysctl documentation of time related values + * net-sched: change tcf_destroy_chain() to clear start of filter list + * net-sched: fix filter destruction in atm/hfsc qdisc destruction + * netlink: Unneeded local variable + * net: Tyop of sk_filter() comment + * netdevice: Fix wrong string handle in kernel command line parsing + * net: fib_rules: fix error code for unsupported families + * dm crypt: use cond_resched + * V4L/DVB (8178): uvc: Fix compilation breakage for the other drivers, if + uvc is selected + * PCI: Limit VPD read/write lengths for Broadcom 5706, 5708, 5709 rev. + * PCI: acpiphp: cleanup notify handler on all root bridges + * drivers/input/ff-core.c needs + * DRM/i915: only use tiled blits on 965+ + * tty: Fix inverted logic in send_break + * x86: fix Intel Mac booting with EFI + * arch/x86/mm/init_64.c: early_memtest(): fix types + * 9p: fix O_APPEND in legacy mode + * slub: Do not use 192 byte sized cache if minimum alignment is 128 byte + * Do not overwrite nr_zones on !NUMA when initialising zlcache_ptr + * [MIPS] IP32: Fix unexpected irq 71 + * [MIPS] IP22: Fix crashes due to wrong L1_CACHE_BYTES + * [MIPS] cevt-txx9: Reset timer counter on initialization + * hrtimer: prevent migration for raising softirq + * svcrpc: fix handling of garbage args + * OHCI: Fix problem if SM501 and another platform driver is selected + * USB: fix cdc-acm resume() + * USB: ehci - fix timer regression + * USB: ohci - record data toggle after unlink + * USB: mass storage: new id for US_SC_CYP_ATACB + * sisusbvga: Fix oops on disconnect. + * USB: New device ID for ftdi_sio driver + * USB: fix interrupt disabling for HCDs with shared interrupt handlers + * USB: don't lose disconnections during suspend + * USB: another option device id + * USB: add a pl2303 device id + * USB: fix Oops on loading ipaq module since 2.6.26 + * USB: adding comment for ipaq forcing number of ports + * [MIPS] Fix bug in atomic_sub_if_positive. + * xen: fix address truncation in pte mfn<->pfn conversion + * sata_sil24: add DID for another adaptec flavor + * ahci: always clear all bits in irq_stat + * libata-sff: improve HSM violation reporting + * sata_mv: safer logic for limit_warnings + * Update maintainers for powerpc + * Christoph has moved + * mm: dirty page accounting vs VM_MIXEDMAP + * rtc: rtc_read_alarm() handles wraparound + * firmware: fix the request_firmware() dummy + * serial: fix serial_match_port() for dynamic major tty-device numbers + * get_user_pages(): fix possible page leak on oom + * rtc-x1205: Fix alarm set + * rtc: fix CMOS time error after writing /proc/acpi/alarm + * pci: VT3336 can't do MSI either + * Miguel Ojeda has moved + * ext3: add missing unlock to error path in ext3_quota_write() + * ext4: add missing unlock to an error path in ext4_quota_write() + * reiserfs: add missing unlock to an error path in reiserfs_quota_write() + * ecryptfs: remove unnecessary mux from ecryptfs_init_ecryptfs_miscdev() + * lib: taint kernel in common report_bug() WARN path. + * gpio: pca953x (i2c) handles max7310 too + * fsl_diu_fb: fix build with CONFIG_PM=y, plus fix some warnings + * Update taskstats-struct document for scaled time accounting + * cciss: fix regression that no device nodes are created if no logical + drives are configured. + * delay accounting: maintainer update + * Doc*/kernel-parameters.txt: fix stale references + * hdaps: add support for various newer Lenovo thinkpads + * mn10300: export certain arch symbols required to build allmodconfig + * mn10300: provide __ucmpdi2() for MN10300 + * Introduce rculist.h + * man-pages is supported + * ntfs: update help text + * add kernel-doc for simple_read_from_buffer and memory_read_from_buffer + * w100fb: do not depend on SHARPSL + * w100fb: add 80 MHz modeline + * MFD maintainer + * cgroups: document the effect of attaching PID 0 to a cgroup + * spi: fix the read path in spidev + * doc: doc maintainers + * security: filesystem capabilities: fix fragile setuid fixup code + * security: filesystem capabilities: fix CAP_SETPCAP handling + * Alpha Linux kernel fails with inconsistent kallsyms data + * cpusets: document proc status cpus and mems allowed lists + * MAINTAINERS: update the email address of Andreas Dilger + * cciss: read config to obtain max outstanding commands per controller + * olpc: sdhci: add quirk for the Marvell CaFe's vdd/powerup issue + * olpc: sdhci: add quirk for the Marvell CaFe's interrupt timeout + * cpumask: introduce new APIs + * mm: switch node meminfo Active & Inactive pages to Kbytes + * Update MAINTAINERS file for the TPM device driver + * devcgroup: fix odd behaviour when writing 'a' to devices.allow + * doc: document the relax_domain_level kernel boot argument + * mmc: don't use DMA on newer ENE controllers + * mempolicy: mask off internal flags for userspace API + * x86 ACPI: normalize segment descriptor register on resume + * x86 ACPI: fix resume from suspend to RAM on uniprocessor x86-64 + * softlockup: print a module list on being stuck + * ide: fix hwif->gendev refcounting + * ide: ide_unregister() warm-plug bugfix + * ide: ide_unregister() locking bugfix + * ahci: give another shot at clearing all bits in irq_stat + * Fix clear_refs_write() use of struct mm_walk + * Move _RET_IP_ and _THIS_IP_ to include/linux/kernel.h + * Fix pagemap_read() use of struct mm_walk + * Linux 2.6.26-rc9 + * Revert "USB: don't explicitly reenable root-hub status interrupts" + * Revert "PCI: Correct last two HP entries in the bfsort whitelist" + * iwlwifi: fix incorrect 5GHz rates reported in monitor mode + * iwlwifi: drop skb silently for Tx request in monitor mode + * libertas: support USB persistence on suspend/resume (resend) + * tcp: net/ipv4/tcp.c needs linux/scatterlist.h + * tcp: fix a size_t < 0 comparison in tcp_read_sock + * bridge: fix use-after-free in br_cleanup_bridges() + * Add missing skb->dev assignment in Frame Relay RX code + * forcedeth: fix lockdep warning on ethtool -s + * ehea: fix might sleep problem + * ehea: add MODULE_DEVICE_TABLE + * ehea: fix race condition + * ehea: Access iph->tot_len with correct endianness + * pasemi_mac: Access iph->tot_len with correct endianness + * ibm_newemac: Fixes kernel crashes when speed of cable connected changes + * ibm_newemac: Fixes entry of short packets + * fs_enet: restore promiscuous and multicast settings in restart() + * can: add sanity checks + * x86: KVM guest: Add memory clobber to hypercalls + * KVM: IOAPIC: Fix level-triggered irq injection hang + * [SCSI] erase invalid data returned by device + * pxamci: fix byte aligned DMA transfers + * vsprintf: split out '%s' handling logic + * vsprintf: split out '%p' handling logic + * vsprintf: add infrastructure support for extended '%p' specifiers + * vsprintf: add support for '%pS' and '%pF' pointer formats + * powerpc: Fix unterminated of_device_id array in legacy_serial.c + * [UML] fix gcc ICEs and unresolved externs + * ocfs2/dlm: Fixes oops in dlm_new_lockres() + * hostap_cs: correct poor NULL checks in suspend/resume routines + * drivers/net/wireless/iwlwifi/iwl-3945.c Fix type issue on 64bit + * mac80211: move netif_carrier_on to after + ieee80211_bss_info_change_notify + * mac80211: Only flush workqueue when last interface was removed + * zd1211rw: add ID for AirTies WUS-201 + * ssb-pcicore: Fix IRQ-vector init on embedded devices + * mac80211: don't report selected IBSS when not found + * crypto: tcrypt - Fix memory leak in test_cipher + * sctp: Mark the tsn as received after all allocations finish + * [S390] protect _PAGE_SPECIAL bit against mprotect + * irda: via-ircc proper dma freeing + * irda: New device ID for nsc-ircc + * irda: Fix netlink error path return value + * [SCSI] mptspi: fix oops in mptspi_dv_renegotiate_work() + * Correct hash flushing from huge_ptep_set_wrprotect() + * ide: add __ide_default_irq() inline helper + * palm_bk3710: fix IDECLK period calculation + * it8213: fix return value in it8213_init_one() + * [MIPS] Atlas, decstation: Fix section mismatches triggered by + defconfigs + * [MIPS] Fix 32bit kernels on R4k with 128 byte cache line size + * NFS: Fix readdir cache invalidation + * SUNRPC: Fix a double-free in rpcbind + * SUNRPC: Fix an rpcbind breakage for the case of IPv6 lookups + * reiserfs: discard prealloc in reiserfs_delete_inode + * Fix broken fix for fsl-diu-db + * RDMA/cxgb3: Fix regression caused by class_device -> device conversion + * ipv6: fix race between ipv6_del_addr and DAD timer + * sctp: Add documentation for sctp sysctl variable + * kernel/printk.c: Made printk_recursion_bug_msg static. + * powerpc: Add missing reference to coherent_dma_mask + * rc80211_pid: Fix fast_start parameter handling + * rt2x00: Disable synchronization during initialization + * zd1211rw: stop beacons on remove_interface + * libertas: fix memory alignment problems on the blackfin + * netfilter: nf_conntrack_tcp: fix endless loop + * netfilter: nf_nat_snmp_basic: fix a range check in NAT for SNMP + * md: ensure all blocks are uptodate or locked when syncing + * sched: fix cpu hotplug + * x86: fix /dev/mem compatibility under PAT + * crypto: chainiv - Invoke completion function + * ocfs2: Fix flags in ocfs2_file_lock + * kernel/kprobes.c: Made kprobe_blacklist static. + * arch/x86/kernel/.gitignore: Added vmlinux.lds to .gitignore file + because it shouldn't be tracked. + * ftrace: Documentation + * Fix PREEMPT_RCU without HOTPLUG_CPU + * sched: fix cpu hotplug, cleanup + * exec: fix stack excutability without PT_GNU_STACK + * slub: Fix use-after-preempt of per-CPU data structure + * Documentation: clarify tcp_{r,w}mem sysctl docs + * ip: sysctl documentation cleanup + * tcp: correct kcalloc usage + * ipv4: fib_trie: Fix lookup error return + * netlabel: netlink_unicast calls kfree_skb on error path by itself + * ipv6: missed namespace context in ipv6_rthdr_rcv + * xfrm: Add a XFRM_STATE_AF_UNSPEC flag to xfrm_usersa_info + * tun: Persistent devices can get stuck in xoff state + * tpm: add Intel TPM TIS device HID + * rapidio: fix device reference counting + * Fix name of Russell King in various comments + * rtc: fix reported IRQ rate for when HPET is enabled + * libata-acpi: filter out DIPM enable + * Added Targa Visionary 1000 IDE adapter to pata_sis.c + * libata-acpi: don't call sleeping function from invalid context + * Fix reference counting race on log buffers + * [SCSI] ipr: Fix HDIO_GET_IDENTITY oops for SATA devices + * IPMI: return correct value from ipmi_write + * x86: fix ldt limit for 64 bit + * [SCSI] fusion: default MSI to disabled for SPI and FC controllers + * [SCSI] bsg: fix oops on remove + * drivers/char/pcmcia/ipwireless/hardware.c fix resource leak + * drivers/isdn/i4l/isdn_common.c fix small resource leak + * fbdev: bugfix for multiprocess defio + * serial8250: sanity check nr_uarts on all paths. + * ov7670: clean up ov7670_read semantics + * rtc-fm3130: fix chip naming + * rtc-pcf8563: add chip id + * OProfile kernel maintainership changes + * frv: fix irqs_disabled() to return an int, not an unsigned long + * cifs: fix inode leak in cifs_get_inode_info_unix + * cifs: fix wksidarr declaration to be big-endian friendly + * cpusets, hotplug, scheduler: fix scheduler domain breakage + * Documentation/HOWTO: correct wrong kernel bugzilla FAQ URL + * devcgroup: always show positive major/minor num + * devcgroup: fix permission check when adding entry to child cgroup + * Linux 2.6.26 + + -- Ben Collins Mon, 14 Jul 2008 13:41:50 -0400 + +linux (2.6.26-3.9) intrepid; urgency=low + + * abi: Add dca and ioatdma to modules.ignore + + [ 2.6.26-3.8 ] + + [ Ben Collins ] + + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add heci to kconfig/kbuild + * config: Enable heci module on all flavours + * dm-bbr: Update to get it to compile with 2.6.26 + * config: Enable dm-bbr + * ubuntu: Add some media drivers + * config: Enable misc media drivers + * udeb: Switch to uvesafb in fb-modules + * abi: Add more modules to ignore (known) + + [ 2.6.26-3.7 ] + + [Amit Kucheria] + + * SAUCE: make fc transport removal of target configurable + - LP: #163075 + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [Ben Collins] + + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: irda: Default to dongle type 9 on IBM hardware + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: version: Implement version_signature proc file. + * build: Cleanup arches + * build: Remove remnants of unused binary-custom infrastructure + * build: Remove disable_d_i (not needed) and cleanup ppa build stuff + * ubuntu: New modules, acer-acpi + * build: Remove -virtual, and rebuild configs + * ubuntu: Add drbd module + * acer-acpi: Fix makefile + * x86/Kconfig: Fix missing quote for ubuntu Kconfig source + * ubuntu: Add iscsitarget module + * ubuntu: Added Amiga FS driver + * ubuntu: Add squashfs driver + * ubuntu: Remove asfs (Amiga FS). Need to be in linux-ports instead + * squashfs: Move headers to real include directory + * build/configs: The Great Config Consistency Check of 2008 + * ubuntu: Move third-party includes to ubuntu/include + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Add dm-radi4-5 driver + * build: Add CONFIG_DEBUG_SECTION_MISMATCH=y to get old style warnings + from build + * ubuntu/Makefile: Fixup dm-raid4-5 and add kludge for kbuild + * squashfs: Fixes for VFS changes + * ubuntu/dm-raid4-5: Fixups for moved/renamed headers/functions in core + md + * ubuntu: Add ndiswrapper driver + * d-i: Update module listings + * build: Disable xd block device (ancient) + * ndiswrapper: Fixup makefile + * d-i: Remove efi-modules. The only module, efivars, is built-in + * build: Remove install-source, obsolete and caused build failure + * Ubuntu-2.6.26-1.3 + * build: linux-doc rules got broken when disabling html side. Fixed now. + * Ubuntu-2.6.26-1.4 + * x86: Update to -rc6 allows CONFIG_PCI_OLPC to work with PCI_GOANY + * d-i: Make virtio-ring optional (it's built-in on i386) + * Ubuntu-2.6.26-1.4 + * Ubuntu-2.6.26-1.5 + * config: Enable DVB devices + * ubuntu/aufs: Make aufs a bool config, since it needs to be built-in + * config: Build aufs into the kernels + * build: Fix arguments passed to link-headers script + * config: Disable early printk + * d-i: Move isofs to storage-core and kill st (scsi tape) from list + * config: Enable non-promiscuous access to /dev/mem + * x86: Add option to disable decompression info messages + * config: Enable no-bz-chatter config options + * build: Re-add linux-source package + * d-i: Re-add socket-modules. Accidentally removed + - LP: #241295 + * Ubuntu-2.6.26-2.6 + * Use makedumpfile to generate a vmcoreinfo file. + * build: Build-Depend on makedumpfile for vmcoreinfo generation + * build: Remove debug print from git-ubuntu-log + * Updated configs for -rc7 + * build: postinst, do not call depmod with -F + * config: Enable rtc-cmos as a built-in driver. + * control: Provide ndiswrapper-modules-1.9 + * build: Generate vmcoreinfo in image build for crashdumps without debug + image + * config: Disable vesafb, since we'll prefer uvesafb + * build: Copy uvesafb module to initrd mod directory + * abi-check: New, more robust script + * config: Enable heap randomization by default + * abi-check: Cleanup output and call with perl (not $SHELL) + * abi: Ignore missing vesafb (known) + * config: Disable pcspkr (in favor of snd-pcsp) + * swap: Add notify_swap_entry_free callback for compcache + * compcache: Added ram backed compressed swap module + * ubuntu: Enable kbuild and kconfig for compcache + * config: Enable compcache and tlsf allocator as modules + * config: Updated for -rc8. Disables XEN on i386 + * config: Switch i386-server to 64G, enable PAE, 64-bit res, and XEN + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Enable build of misc/ subdir + * config: Enable misc drivers + * aufs: Fix warning about single non-string-literal arg to printf style + function + * drivers: Remove some duplicate device entries in various modules + * config: Disable some duplicate drivers + * keyspan: Remove duplicate device ID's + * check-aliases: Cleanup output, and fix rolling checks + * ubuntu: Disable dm-bbr for now + * dm-bbr: First cut at forward portiong. Still needs work. + * ubuntu: Disable dm-bbr in kbuild/kconfig + + [Chuck Short] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + - LP: #175834 + * SAUCE: [USB]: add ASUS LCM to the blacklist + + [Colin Ian King] + + * SAUCE: airprime.c supports more devices + - LP: #208250 + * SAUCE: Enable speedstep for sonoma processors. + - LP: #132271 + * Add dm-loop + * Add dm-loop BOM + + [Kyle McMartin] + + * SAUCE: fix orinoco_cs oops + + [Mario Limonciello] + + * SAUCE: Enable Reset and SCO workaround on Dell 410 BT adapter + + [Matthew Garrett] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [Phillip Lougher] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [Stefan Bader] + + * SAUCE: Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: Always use SCO protocol (disable eSCO support) Bug: #39414 + * SAUCE: mmc: Increase power_up deleay to fix TI readers OriginalAuthor: + Pascal Terjan Bug: #137686 + * SAUCE: Add blacklist support to fix Belkin bluetooth dongle. Bug: + #140511 + * SAUCE: Lower warning level of pci resource allocation messages. Bug: + 159241 + * SAUCE: Lower message level for PCI memory and I/O allocation. + - LP: #159241 + * Modify log generation to catch bug numbers when adding with git-am. + + [Tim Gardner] + + * Added the debian directory. Ignore: yes + * Add support for UBUNTUINCLUDE Ignore: yes + * LUM headers go in /usr/src Ignore: yes + * First pass at 2.6.25 configs Ignore: yes + * i386 -generic builds. Ignore: yes + * SAUCE: Increase CONFIG_IDE_MAX_HWIFS to 8 (from 4) + * SAUCE: Add extra headers to linux-libc-dev OriginalAuthor: Soren Hansen + OriginalLocation: + https://lists.ubuntu.com/archives/kernel-team/2007-November/001891.html + * Set CONFIG_DEVKMEM=n Ignore: yes + * Enabled ALSA and CGROUPS for i386 Ignore: yes + * Enabled amd64 configs. Ignore: yes + * CONFIG_STANDALONE=n Ignore: yes + * CONFIG_BLK_DEV_4DRIVES=n for i386 Ignore: yes + * CONFIG: CONFIG_DEFAULT_RELATIME=y for all flavours. Ignore: yes + * Set CONFIG_EDD_OFF=y Ignore: yes + * SAUCE: Blacklist Bluetooth Dell Wireless 370 for SCO MTU + OriginalAuthor: Mario Limonciello Bug: + #209715 + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: frame buffer regression - screen blank except for blinking + cursor after fbcon vtswitch OriginalAuthor: Matthew Garrett + Bug: #201591 + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + OriginalAuthor: Klaus S. Madsen + OriginalAuthor: Chuck Short + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: orinoco_cs.ko missing + * Set CONFIG_FB_VESA=m for i386/amd64 Ignore: yes + * Set CONFIG_PM_DISABLE_CONSOLE=y for all flavours Ignore: yes + * Thorough review of amd64 -generic config Ignore: yes + * Build PPA packages for Hardy until the Intrepid archive is opened. + * Deleted obsolete flavours Ignore: yes + * Don't build docs for PPA Ignore: yes + * Build all standard packages in PPA. Ignore: yes + * Remove duplicate USB ids + * SAUCE: DVB-USB UMT-010 driver oops on install Bug: #115284 + * Update configs after rebase to 2.6.26-rc1 Ignore: yes + * Update configs after rebase Ignore: yes + * Disable V4L until the build issues get ironed out. Ignore: yes + * Update configs after rebase. Ignore: yes + * Another device enable pass Ignore: yes + * Update configs after merge. Ignore: yes + * SAUCE: fn key doesn't work in hardy with macbook pro fourth generation + (4,1) + - LP: #207127 + * Enabled CONFIG_CIFS_DFS_UPCALL=y and CONFIG_CIFS_UPCALL=y + - LP: #236830 + + [Upstream Kernel Changes] + + * Revert "[WATCHDOG] hpwdt: Add CFLAGS to get driver working" + * mac80211: detect driver tx bugs + * hwmon: (lm85) Fix function RANGE_TO_REG() + * hwmon: (adt7473) Initialize max_duty_at_overheat before use + * hwmon: Update the sysfs interface documentation + * hwmon: (abituguru3) Identify Abit AW8D board as such + * hwmon: (w83791d) new maintainer + * hwmon: (abituguru3) update driver detection + * hwmon: (lm75) sensor reading bugfix + * ipv6: Remove options header when setsockopt's optlen is 0 + * ipv6: Drop packets for loopback address from outside of the box. + * sched: rt: dont stop the period timer when there are tasks wanting to + run + * sched: fix wait_for_completion_timeout() spurious failure under heavy + load + * x86: fix NULL pointer deref in __switch_to + * xen: Use wmb instead of rmb in xen_evtchn_do_upcall(). + * xen: mask unwanted pte bits in __supported_pte_mask + * xen: don't drop NX bit + * sched: refactor wait_for_completion_timeout() + * Ext4: Fix online resize block group descriptor corruption + * [IA64] SN2: security hole in sn2_ptc_proc_write + * alpha: fix module load failures on smp (bug #10926) + * alpha: link failure fix + * alpha: fix compile failures with gcc-4.3 (bug #10438) + * alpha: resurrect Cypress IDE quirk + * pppoe: warning fix + * sctp: Make sure N * sizeof(union sctp_addr) does not overflow. + * netns: Don't receive new packets in a dead network namespace. + * Add return value to reserve_bootmem_node() + * Slab: Fix memory leak in fallback_alloc() + * Fix performance regression on lmbench select benchmark + * ALSA: aw2 - Fix Oops at initialization + * ALSA: sb - Fix wrong assertions + * futexes: fix fault handling in futex_lock_pi + * IB/mthca: Clear ICM pages before handing to FW + * tty_driver: Update required method documentation + * removed unused var real_tty on n_tty_ioctl() + * Fix ZERO_PAGE breakage with vmware + * mm: fix race in COW logic + * NFS: Reduce the NFS mount code stack usage. + * NFS: Fix filehandle size comparisons in the mount code + * NFS: nfs_updatepage(): don't mark page as dirty if an error occurred + * alpha: fix compile error in arch/alpha/mm/init.c + * KVM: Fix race between timer migration and vcpu migration + * KVM: close timer injection race window in __vcpu_run + * KVM: MMU: Fix rmap_write_protect() hugepage iteration bug + * KVM: MMU: large page update_pte issue with non-PAE 32-bit guests + (resend) + * KVM: MMU: Fix oops on guest userspace access to guest pagetable + * KVM: ioapic: fix lost interrupt when changing a device's irq + * KVM: VMX: Fix host msr corruption with preemption enabled + * [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000 + * xen: remove support for non-PAE 32-bit + * kgdb: documentation update - remove kgdboe + * kgdb: sparse fix + * [IA64] Fix boot failure on ia64/sn2 + * [IA64] Handle count==0 in sn2_ptc_proc_write() + * [IA64] Eliminate NULL test after alloc_bootmem in iosapic_alloc_rte() + * [GFS2] fix gfs2 block allocation (cleaned up) + * x86: Add structs and functions for paravirt clocksource + * x86: Make xen use the paravirt clocksource structs and functions + * KVM: Make kvm host use the paravirt clocksource structs + * x86: KVM guest: Use the paravirt clocksource structs and functions + * KVM: Remove now unused structs from kvm_para.h + * enable bus mastering on i915 at resume time + * Linux 2.6.26-rc8 + * # Ubuntu external driver commit. + * # Ubuntu commit template. + + -- Ben Collins Sat, 21 Jun 2008 09:05:15 -0400 + +linux (2.6.26-2.6) intrepid; urgency=low + + [Ben Collins] + + * Revert "SAUCE: Export symbols for aufs (in lum) (not needed) + * config: Enable DVB devices + * ubuntu/aufs: Make aufs a bool config, since it needs to be built-in + * config: Build aufs into the kernels + * build: Fix arguments passed to link-headers script + * config: Disable early printk + * d-i: Move isofs to storage-core and kill st (scsi tape) from list + * config: Enable non-promiscuous access to /dev/mem + * x86: Add option to disable decompression info messages + * config: Enable no-bz-chatter config options + * build: Re-add linux-source package + * d-i: Re-add socket-modules. Accidentally removed + - LP: #241295 + + [Colin Ian King] + + * Add dm-loop + + [Tim Gardner] + + * Revert "SAUCE: USB bluetooth device 0x0e5e:0x6622 floods errors to + syslog (merged upstream) + + -- Ben Collins Mon, 16 Jun 2008 10:56:01 -0400 + +linux (2.6.26-1.5) intrepid; urgency=low + + * d-i: Make virtio-ring optional (it's built-in on i386) + * Rebased on 2.6.26-rc6 + + [Ubuntu-2.6.26-1.4 Changes below] + + * build: linux-doc rules got broken when disabling html side. Fixed now. + + [Ubuntu-2.6.26-1.3 Changes below] + + * build: Remove install-source, obsolete and caused build failure + + [Ubuntu-2.6.26-1.2 Changes below] + + * Remove efi-modules from d-i module list (efivars is built-in). Caused a + build failure. + * Patch to arch/x86/xen/time.c to remove __divdi3 usage (build failure on + i386). + + [Ubuntu-2.6.26-1.1 Changes below] + + [Amit Kucheria] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: Add AGP support for Radeon Mobility 9000 chipset + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [Ben Collins] + + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: irda: Default to dongle type 9 on IBM hardware + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: version: Implement version_signature proc file. + * build: Remove remnants of unused binary-custom infrastructure + * mmc_block: Fix bad allocation on 64-bit (zero len array) + * ubuntu: New modules, acer-acpi + * build: Remove -virtual, and rebuild configs + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add squashfs driver + * build/configs: The Great Config Consistency Check of 2008 + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Add dm-radi4-5 driver + * build: Add CONFIG_DEBUG_SECTION_MISMATCH=y to get old style warnings + from build + * squashfs: Fixes for VFS changes + * ubuntu/dm-raid4-5: Fixups for moved/renamed headers/functions in core + md + * ubuntu: Add ndiswrapper driver + * d-i: Update module listings + + [Chuck Short] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + * SAUCE: [USB]: add ASUS LCM to the blacklist + + [Colin Ian King] + + * SAUCE: Enable speedstep for sonoma processors. + * SAUCE: airprime.c supports more devices + + [Kyle McMartin] + + * SAUCE: fix orinoco_cs oops + + [Mario Limonciello] + + * SAUCE: Enable Reset and SCO workaround on Dell 410 BT adapter + + [Matthew Garrett] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [Phillip Lougher] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [Stefan Bader] + + * SAUCE: Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: Always use SCO protocol (disable eSCO support) Bug: #39414 + * SAUCE: mmc: Increase power_up deleay to fix TI readers + * SAUCE: Add blacklist support to fix Belkin bluetooth dongle. + * SAUCE: Lower warning level of pci resource allocation messages. + * SAUCE: Lower message level for PCI memory and I/O allocation. + - LP: #159241 + * Modify log generation to catch bug numbers when adding with git-am. + + [Tim Gardner] + + * SAUCE: hdaps module does not load on Thinkpad T61P + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Export symbols for aufs (in lum). + * SAUCE: USB bluetooth device 0x0e5e:0x6622 floods errors to syslog + * SAUCE: Blacklist Bluetooth Dell Wireless 370 for SCO MTU + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: frame buffer regression - screen blank except for blinking + cursor after fbcon vtswitch + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: Modualrize vesafb + * SAUCE: DVB-USB UMT-010 driver oops on install + * SAUCE: fn key doesn't work in hardy with macbook pro fourth generation + (4,1) + - LP: #207127 + + -- Ben Collins Wed, 11 Jun 2008 05:28:35 -0400 --- linux-2.6.32.orig/debian.master/control.stub.in +++ linux-2.6.32/debian.master/control.stub.in @@ -0,0 +1,90 @@ +Source: linux +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386 lpia], device-tree-compiler [powerpc], libelf-dev, binutils-dev, rsync +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-lucid.git + +Package: SRCPKGNAME-source-PKGVER +Architecture: all +Section: devel +Priority: optional +Provides: SRCPKGNAME-source, SRCPKGNAME-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version PKGVER with Ubuntu patches + This package provides the source code for the Linux kernel version + PKGVER. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: SRCPKGNAME-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: SRCPKGNAME-doc-2.6 +Replaces: SRCPKGNAME-doc-2.6 +Description: Linux kernel specific documentation for version PKGVER + This package provides the various documents in the PKGVER kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/SRCPKGNAME-doc/00-INDEX for a list of what is + contained in each file. + +Package: SRCPKGNAME-tools-common +Architecture: all +Section: admin +Priority: optional +Depends: ${misc:Depends} +Replaces: SRCPKGNAME-tools (<= 2.6.32-16.25) +Description: Linux kernel specific tools for version PKGVER + This package provides the architecture independent parts for kernel + version locked tools in the PKGVER kernel source. + +Package: linux-headers-PKGVER-ABINUM +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Provides: SRCPKGNAME-headers, SRCPKGNAME-headers-2.6 +Description: Header files related to Linux kernel version PKGVER + This package provides kernel header files for version PKGVER, for sites + that want the latest kernel headers. Please read + /usr/share/doc/SRCPKGNAME-headers-PKGVER-ABINUM/debian.README.gz for details + +Package: SRCPKGNAME-libc-dev +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Depends: ${misc:Depends} +Conflicts: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), amd64-libs-dev (<= 1.1), SRCPKGNAME-kernel-headers +Replaces: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), SRCPKGNAME-kernel-headers, libdrm-dev +Provides: SRCPKGNAME-kernel-headers +Description: Linux Kernel Headers for development + This package provides headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system + libraries. They are NOT meant to be used to build third-party modules for + your kernel. Use SRCPKGNAME-headers-* packages for that. + +Package: linux-tools-PKGVER-ABINUM +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools for version PKGVER-ABINUM on + DESC. + --- linux-2.6.32.orig/debian.master/control +++ linux-2.6.32/debian.master/control @@ -0,0 +1,844 @@ +Source: linux +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386 lpia], device-tree-compiler [powerpc], libelf-dev, binutils-dev, rsync +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-lucid.git + +Package: linux-source-2.6.32 +Architecture: all +Section: devel +Priority: optional +Provides: linux-source, linux-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version 2.6.32 with Ubuntu patches + This package provides the source code for the Linux kernel version + 2.6.32. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: linux-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: linux-doc-2.6 +Replaces: linux-doc-2.6 +Description: Linux kernel specific documentation for version 2.6.32 + This package provides the various documents in the 2.6.32 kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/linux-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-tools-common +Architecture: all +Section: admin +Priority: optional +Depends: ${misc:Depends} +Replaces: linux-tools (<= 2.6.32-16.25) +Description: Linux kernel specific tools for version 2.6.32 + This package provides the architecture independent parts for kernel + version locked tools in the 2.6.32 kernel source. + +Package: linux-headers-2.6.32-24 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version 2.6.32 + This package provides kernel header files for version 2.6.32, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details + +Package: linux-libc-dev +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Depends: ${misc:Depends} +Conflicts: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), amd64-libs-dev (<= 1.1), linux-kernel-headers +Replaces: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), linux-kernel-headers, libdrm-dev +Provides: linux-kernel-headers +Description: Linux Kernel Headers for development + This package provides headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system + libraries. They are NOT meant to be used to build third-party modules for + your kernel. Use linux-headers-* packages for that. + +Package: linux-tools-2.6.32-24 +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel tools for version 2.6.32-24 + This package provides the architecture dependant parts for kernel + version locked tools for version 2.6.32-24 on + DESC. + + +Package: linux-image-2.6.32-24-386 +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on i386 + This package contains the Linux kernel image for version 2.6.32 on + i386. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Alternate x86 (486 and better) processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-386 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-386 +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on i386 + This package provides kernel header files for version 2.6.32 on + i386. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-386-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on i386 + This package provides a kernel debug image for version 2.6.32 on + i386. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86/x86_64 + This package provides kernel header files for version 2.6.32 on + x86/x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-dbgsym +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86/x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86/x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic-pae +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86 + This package contains the Linux kernel image for version 2.6.32 on + x86. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward 32 bit desktop systems with more then 4GB RAM. + . + You likely do not want to install this package directly. Instead, install + the linux-generic-pae meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic-pae +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86 + This package provides kernel header files for version 2.6.32 on + x86. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-pae-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86 + This package provides a kernel debug image for version 2.6.32 on + x86. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-ia64 +Architecture: ia64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: elilo (>= 3.6-1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on IA-64 SMP + This package contains the Linux kernel image for version 2.6.32 on + IA-64 SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports IA-64 SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-ia64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-ia64 +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on IA-64 SMP + This package provides kernel header files for version 2.6.32 on + IA-64 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-ia64-dbgsym +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on IA-64 SMP + This package provides a kernel debug image for version 2.6.32 on + IA-64 SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-lpia +Architecture: lpia +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Intel Atom processors + This package contains the Linux kernel image for version 2.6.32 on + Intel Atom processors. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Intel Atom processors. + . + Geared toward LPIA-based mobile devices + . + You likely do not want to install this package directly. Instead, install + the linux-lpia meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-lpia +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Intel Atom processors + This package provides kernel header files for version 2.6.32 on + Intel Atom processors. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-lpia-dbgsym +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Intel Atom processors + This package provides a kernel debug image for version 2.6.32 on + Intel Atom processors. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc64-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-preempt +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Preempt processors. + . + Geared toward low latency systems. + . + You likely do not want to install this package directly. Instead, install + the linux-preempt meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-preempt +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-preempt-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-server +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, kvm-api-4, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Server processors. + . + Geared toward 64 bit server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-server meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-server +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-server-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64 +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64 +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64-smp +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64-smp +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-smp-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-versatile +Architecture: armel +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Versatile-based systems + This package contains the Linux kernel image for version 2.6.32 on + Versatile-based systems. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Versatile processors. + . + PB, AB, Qemu, etc. + . + You likely do not want to install this package directly. Instead, install + the linux-versatile meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-versatile +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Versatile-based systems + This package provides kernel header files for version 2.6.32 on + Versatile-based systems. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-versatile-dbgsym +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Versatile-based systems + This package provides a kernel debug image for version 2.6.32 on + Versatile-based systems. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-virtual +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1), linux-image-2.6.32-24-generic-pae, linux-image-2.6.32-24-server +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32 +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Virtual processors. + . + Geared toward virtual machine guests. + . + You likely do not want to install this package directly. Instead, install + the linux-virtual meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. --- linux-2.6.32.orig/debian.master/changelog +++ linux-2.6.32/debian.master/changelog @@ -0,0 +1,4869 @@ +linux (2.6.32-24.39) lucid-security; urgency=low + + [ Upstream Kernel Changes ] + + * sctp: Fix skb_over_panic resulting from multiple invalid parameter + errors (CVE-2010-1173) (v4) + - CVE-2010-1173 + * sctp: fix append error cause to ERROR chunk correctly + - CVE-2010-1173 + * GFS2: Fix writing to non-page aligned gfs2_quota structures + - CVE-2010-1436 + * KEYS: find_keyring_by_name() can gain access to a freed keyring + - CVE-2010-1437 + * GFS2: Fix permissions checking for setflags ioctl() + - CVE-2010-1641 + * Btrfs: should add a permission check for setfacl + - CVE-2010-2071 + * ecryptfs: Bugfix for error related to ecryptfs_hash_buckets + - CVE-2010-2492 + + -- Stefan Bader Wed, 21 Jul 2010 10:48:54 +0200 + +linux (2.6.32-24.38) lucid-proposed; urgency=low + + [ Keng-Yu Lin ] + + * SAUCE: dell-laptop: fire SMI when toggling hardware killswitch + (revised) + - LP: #590607 + + [ Upstream Kernel Changes ] + + * sfc: Wait at most 10ms for the MC to finish reading out MAC statistics + - LP: #590783 + * sfc: Always close net device at the end of a disabling reset + - LP: #590783 + * sfc: Change falcon_probe_board() to fail for unsupported boards + - LP: #590783 + * ext4: Fix potential quota deadlock + - LP: #588069 + * jbd: jbd-debug and jbd2-debug should be writable + - LP: #588069 + * ext4: replace BUG() with return -EIO in ext4_ext_get_blocks + - LP: #588069 + * ext4, jbd2: Add barriers for file systems with exernal journals + - LP: #588069 + * ext4: Eliminate potential double free on error path + - LP: #588069 + * ext4: return correct wbc.nr_to_write in ext4_da_writepages + - LP: #588069 + * ext4: Ensure zeroout blocks have no dirty metadata + - LP: #588069 + * ext4: Patch up how we claim metadata blocks for quota purposes + - LP: #588069 + * ext4: Fix accounting of reserved metadata blocks + - LP: #588069 + * ext4: Calculate metadata requirements more accurately + - LP: #588069 + * ext4: Handle -EDQUOT error on write + - LP: #588069 + * ext4: Fix quota accounting error with fallocate + - LP: #588069 + * ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag + - LP: #588069 + * ext4: Use bitops to read/modify EXT4_I(inode)->i_state + - LP: #588069 + * ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode + - LP: #588069 + * ext4: Add flag to files with blocks intentionally past EOF + - LP: #588069 + * ext4: Fix fencepost error in chosing choosing group vs file + preallocation. + - LP: #588069 + * ext4: fix error handling in migrate + - LP: #588069 + * ext4: explicitly remove inode from orphan list after failed direct io + - LP: #588069 + * ext4: Handle non empty on-disk orphan link + - LP: #588069 + * ext4: make "offset" consistent in ext4_check_dir_entry() + - LP: #588069 + * ext4: Fix insertion point of extent in mext_insert_across_blocks() + - LP: #588069 + * ext4: Fix the NULL reference in double_down_write_data_sem() + - LP: #588069 + * ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl + - LP: #588069 + * ext4: Fix estimate of # of blocks needed to write indirect-mapped files + - LP: #588069 + * ext4: Fixed inode allocator to correctly track a flex_bg's used_dirs + - LP: #588069 + * ext4: Fix possible lost inode write in no journal mode + - LP: #588069 + * ext4: Fix buffer head leaks after calls to ext4_get_inode_loc() + - LP: #588069 + * ext4: Issue the discard operation *before* releasing the blocks to be + reused + - LP: #588069 + * ext4: check missed return value in ext4_sync_file() + - LP: #588069 + * ext4: fix memory leaks in error path handling of ext4_ext_zeroout() + - LP: #588069 + * ext4: Remove unnecessary call to ext4_get_group_desc() in mballoc + - LP: #588069 + * ext4: rename ext4_mb_release_desc() to ext4_mb_unload_buddy() + - LP: #588069 + * ext4: allow defrag (EXT4_IOC_MOVE_EXT) in 32bit compat mode + - LP: #588069 + * ext4: fix quota accounting in case of fallocate + - LP: #588069 + * ext4: check s_log_groups_per_flex in online resize code + - LP: #588069 + * ext4: don't return to userspace after freezing the fs with a mutex held + - LP: #588069 + * ext4: stop issuing discards if not supported by device + - LP: #588069 + * ext4: don't scan/accumulate more pages than mballoc will allocate + - LP: #588069 + * ext4: Do not zero out uninitialized extents beyond i_size + - LP: #588069 + * ext4: clean up inode bitmaps manipulation in ext4_free_inode + - LP: #588069 + * ext4: init statistics after journal recovery + - LP: #588069 + * ext4: Remove extraneous newlines in ext4_msg() calls + - LP: #588069 + * ext4: Prevent creation of files larger than RLIMIT_FSIZE using + fallocate + - LP: #588069 + * ext4: check for a good block group before loading buddy pages + - LP: #588069 + * ext4: Show journal_checksum option + - LP: #588069 + * ext4: Use bitops to read/modify i_flags in struct ext4_inode_info + - LP: #588069 + * ext4: Avoid crashing on NULL ptr dereference on a filesystem error + - LP: #588069 + * ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted + - LP: #588069 + * ext4: restart ext4_ext_remove_space() after transaction restart + - LP: #588069 + * ext4: Conditionally define compat ioctl numbers + - LP: #588069 + * ext4: Fix compat EXT4_IOC_ADD_GROUP + - LP: #588069 + * ext4: Make fsync sync new parent directories in no-journal mode + - LP: #588069 + * (pre-stable) ahci,ata_generic: let ata_generic handle new MBP w/ MCP89 + - LP: #576601 + * (pre-stable) ata_generic: implement ATA_GEN_* flags and force enable + DMA on MBP 7,1 + - LP: #576601 + + -- Steve Conklin Fri, 2 Jul 2010 11:06:32 -0500 + +linux (2.6.32-23.37) lucid-proposed; urgency=low + + [ Alex Deucher ] + + * SAUCE: drm/radeon/kms/atom: fix dual-link DVI on DCE3.2/4.0 + - LP: #564559 + + [ Andy Whitcroft ] + + * [Config] ports -- build in dm-mod to enable LVM boot + - LP: #560717 + * tools -- fix perf version extraction for multi-part flavours + - LP: #555130 + * SAUCE: ACPI: EC: Allow multibyte access to EC (v3) + - LP: #526354 + * [Config] enforce -- ensure dm_mod is built-in for LVM + - LP: #560717 + * update to ubuntu-debian:7e708d33054c373faf41da23b73e8b48c342d958 + - LP: #570500, #576274 + + [ Chase Douglas ] + + * Revert "(pre-stable): input: ALPS - Add signature for HP Pavilion dm3 + laptops" + - LP: #550625 + * Enable ftrace function profiler + - LP: #570389 + * enforce CONFIG_TMPFS_POSIX_ACL=y + - LP: #575940 + + [ Leann Ogasawara ] + + * Revert "staging/comdi -- disable" + - LP: #563436 + * [Config] Enable multicast routing for sparc + - LP: #416266 + * [Config] Add ahci.ko to virtual sub-flavour + - LP: #570542 + + [ Stefan Bader ] + + * Revert "SAUCE: drm/i915: Disable FBC on 915GM and 945GM" + - LP: #588832 + + [ Tim Gardner ] + + * ubuntu: rtl8192se -- update to version 0015.0127.2010 + - LP: #567016 + * [Config] Add atl1c to nic-modules udeb + - LP: #557130 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) iwlwifi: fix nfreed--" + - LP: #575853 + * Revert "backlight: mbp_nvidia_bl - add five more MacBook variants" + - LP: #575853 + * Revert "(pre-stable) pata_via: Add VIA VX900 support" + - LP: #575853 + * Revert "(pre-stable) x86-32, resume: do a global tlb flush in S4 + resume" + - LP: #575853 + * Revert "x86: disable IOMMUs on kernel crash" + - LP: #575853 + * Revert "sunrpc: fix peername failed on closed listener" + - LP: #575853 + * Revert "sunrpc: move the close processing after do recvfrom method" + - LP: #575853 + * Revert "(pre-stable) drm/edid: allow certain bogus edids to hit a fixup + path rather than fail" + - LP: #575853 + * Revert "drm/radeon/kms: don't print error on -ERESTARTSYS." + - LP: #575853 + * Revert "ath9k: fix lockdep warning when unloading module" on stable + kernels + - LP: #588832 + * Staging: comedi: removed "depricated" from COMEDI_CB_BLOCK + - LP: #483343 + * fat: fix buffer overflow in vfat_create_shortname() + - LP: #575853 + * xfs: simplify inode teardown + - LP: #575853 + * xfs: fix mmap_sem/iolock inversion in xfs_free_eofblocks + - LP: #575853 + * xfs: I/O completion handlers must use NOFS allocations + - LP: #575853 + * xfs: Wrapped journal record corruption on read at recovery + - LP: #575853 + * xfs: Fix error return for fallocate() on XFS + - LP: #575853 + * xfs: check for not fully initialized inodes in xfs_ireclaim + - LP: #575853 + * xfs: fix timestamp handling in xfs_setattr + - LP: #575853 + * xfs: Don't flush stale inodes + - LP: #575853 + * xfs: Ensure we force all busy extents in range to disk + - LP: #575853 + * xfs: reclaim inodes under a write lock + - LP: #575853 + * xfs: Avoid inodes in reclaim when flushing from inode cache + - LP: #575853 + * xfs: reclaim all inodes by background tree walks + - LP: #575853 + * xfs: fix stale inode flush avoidance + - LP: #575853 + * xfs: xfs_swap_extents needs to handle dynamic fork offsets + - LP: #575853 + * xfs: quota limit statvfs available blocks + - LP: #575853 + * xfs: don't hold onto reserved blocks on remount, ro + - LP: #575853 + * xfs: remove invalid barrier optimization from xfs_fsync + - LP: #575853 + * xfs: Non-blocking inode locking in IO completion + - LP: #575853 + * xfs: fix locking for inode cache radix tree tag updates + - LP: #575853 + * sh: Enable the mmu in start_secondary() + - LP: #575853 + * sh: Fix FDPIC binary loader + - LP: #575853 + * libiscsi: Fix recovery slowdown regression + - LP: #575853 + * Freezer: Fix buggy resume test for tasks frozen with cgroup freezer + - LP: #575853 + * iwlwifi: counting number of tfds can be free for 4965 + - LP: #575853 + * iwlwifi: fix nfreed-- + - LP: #575853 + * iwlwifi: range checking issue + - LP: #575853 + * setup correct int pipe type in ar9170_usb_exec_cmd + - LP: #575853 + * mac80211: move netdev queue enabling to correct spot + - LP: #575853 + * mac80211: tear down all agg queues when restart/reconfig hw + - LP: #575853 + * WATCHDOG: hpwdt - fix lower timeout limit + - LP: #575853 + * WATCHDOG: iTCO_wdt: TCO Watchdog patch for additional Intel Cougar + Point DeviceIDs + - LP: #575853 + * genirq: Force MSI irq handlers to run with interrupts disabled + - LP: #575853 + * lis3: fix show rate for 8 bits chips + - LP: #575853 + * pata_ali: Fix regression with old devices + - LP: #575853 + * HID: fix oops in gyration_event() + - LP: #575853 + * raw: fsync method is now required + - LP: #575853 + * readahead: fix NULL filp dereference + - LP: #575853 + * ALSA: mixart: range checking proc file + - LP: #575853 + * ALSA: hda: Fix 0 dB offset for Lenovo Thinkpad models using AD1981 + - LP: #551606, #575853 + * x86, amd: Get multi-node CPU info from NodeId MSR instead of PCI config + space + - LP: #575853 + * resource: move kernel function inside __KERNEL__ + - LP: #575853 + * backlight: mbp_nvidia_bl - add five more MacBook variants + - LP: #575853 + * pata_via: Add VIA VX900 support + - LP: #575853 + * ext3: Don't update the superblock in ext3_statfs() + - LP: #575853 + * ext3: journal all modifications in ext3_xattr_set_handle + - LP: #575853 + * eeepc-laptop: disable cpu speed control on EeePC 701 + - LP: #575853 + * eeepc-laptop: dmi blacklist to disable pci hotplug code + - LP: #575853 + * eeepc-laptop: add hotplug_disable parameter + - LP: #575853 + * eeepc-laptop: disable wireless hotplug for 1201N + - LP: #575853 + * eeepc-laptop: disable wireless hotplug for 1005PE + - LP: #575853 + * libata: disable NCQ on Crucial C300 SSD + - LP: #575853 + * cifs: Fix a kernel BUG with remote OS/2 server (try #3) + - LP: #575853 + * CIFS: initialize nbytes at the beginning of CIFSSMBWrite() + - LP: #575853 + * iwlwifi: need check for valid qos packet before free + - LP: #575853 + * ARM: 6031/1: fix Thumb-2 decompressor + - LP: #575853 + * x86-32, resume: do a global tlb flush in S4 resume + - LP: #575853 + * x86: hpet: Make WARN_ON understandable + - LP: #575853 + * x86, hpet: Erratum workaround for read after write of HPET comparator + - LP: #575853 + * x86: Fix double enable_IR_x2apic() call on SMP kernel on !SMP boards + - LP: #575853 + * sched: sched_getaffinity(): Allow less than NR_CPUS length + - LP: #575853 + * sched: Fix sched_getaffinity() + - LP: #575853 + * NFSv4: Fall back to ordinary lookup if nfs4_atomic_open() returns + EISDIR + - LP: #575853 + * NFSv4: fix delegated locking + - LP: #575853 + * ALSA: hda - add a quirk for Clevo M570U laptop + - LP: #575853 + * ALSA: usb - Fix Oops after usb-midi disconnection + - LP: #575853 + * hwmon: (sht15) Fix sht15_calc_temp interpolation function + - LP: #575853 + * hwmon: (sht15) Properly handle the case CONFIG_REGULATOR=n + - LP: #575853 + * x86/amd-iommu: Use helper function to destroy domain + - LP: #575853 + * x86/amd-iommu: enable iommu before attaching devices + - LP: #575853 + * x86, lib: Add wbinvd smp helpers + - LP: #575853 + * x86, cacheinfo: Fix disabling of L3 cache indices + - LP: #575853 + * intel-agp: Switch to wbinvd_on_all_cpus + - LP: #575853 + * x86, cacheinfo: Add cache index disable sysfs attrs only to L3 caches + - LP: #575853 + * x86, cacheinfo: Calculate L3 indices + - LP: #575853 + * x86, cacheinfo: Remove NUMA dependency, fix for AMD Fam10h rev D1 + - LP: #575853 + * x86, cacheinfo: Enable L3 CID only on AMD + - LP: #575853 + * vgaarb: fix "target=default" passing + - LP: #575853 + * x86-32: clean up rwsem inline asm statements + - LP: #575853 + * x86: clean up rwsem type system + - LP: #575853 + * x86-64, rwsem: 64-bit xadd rwsem implementation + - LP: #575853 + * x86-64: support native xadd rwsem implementation + - LP: #575853 + * x86: Fix breakage of UML from the changes in the rwsem system + - LP: #575853 + * x86-64, rwsem: Avoid store forwarding hazard in __downgrade_write + - LP: #575853 + * fix NFS4 handling of mountpoint stat + - LP: #575853 + * dm mpath: fix stall when requeueing io + - LP: #575853 + * quota: Fix possible dq_flags corruption + - LP: #575853 + * Staging: comedi: fix usbdux timeout bug + - LP: #483343, #575853 + * Staging: comedi: usbdux.c: fix locking up of the driver when the comedi + ringbuffer runs empty + - LP: #483343, #575853 + * ocfs2: set i_mode on disk during acl operations + - LP: #575853 + * ocfs2: Change bg_chain check for ocfs2_validate_gd_parent. + - LP: #575853 + * 9p: Skip check for mandatory locks when unlocking + - LP: #575853 + * fc class: fail fast bsg requests + - LP: #575853 + * SCSI: add scsi target reset support to scsi ioctl + - LP: #575853 + * PCIe AER: prevent AER injection if hardware masks error reporting + - LP: #575853 + * vgaarb: Fix VGA arbiter to accept PCI domains other than 0 + - LP: #575853 + * SCSI: fc-transport: Use packed modifier for fc_bsg_request structure. + - LP: #575853 + * pci: Update pci_set_vga_state() to call arch functions + - LP: #575853 + * PCI: kill off pci_register_set_vga_state() symbol export. + - LP: #575853 + * PCI: fix nested spinlock hang in aer_inject + - LP: #575853 + * IPoIB: Fix TX queue lockup with mixed UD/CM traffic + - LP: #575853 + * x86/PCI: irq and pci_ids patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ALSA: hda_intel: ALSA HD Audio patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ALSA: hda - enable snoop for Intel Cougar Point + - LP: #575853 + * ata_piix: IDE Mode SATA patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ahci: AHCI and RAID mode SATA patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * i2c-i801: Add Intel Cougar Point device IDs + - LP: #575853 + * b43: Remove reset after fatal DMA error + - LP: #575853 + * b43: Allow PIO mode to be selected at module load + - LP: #575853 + * b43: fall back gracefully to PIO mode after fatal DMA errors + - LP: #575853 + * ALSA: hda - Add position_fix quirk for Biostar mobo + - LP: #575853 + * agp/hp: fixup hp agp after ACPI changes + - LP: #575853 + * b43: Optimize PIO scratchbuffer usage + - LP: #575853 + * ecryptfs: fix use with tmpfs by removing d_drop from + ecryptfs_destroy_inode + - LP: #575853 + * eCryptfs: Decrypt symlink target for stat size + - LP: #575853 + * ecryptfs: fix error code for missing xattrs in lower fs + - LP: #575853 + * sched: Fix a race between ttwu() and migrate_task() + - LP: #575853 + * USB: cdc-acm: Update to new autopm API + - LP: #575853 + * USB: cdc-acm: Fix stupid NULL pointer in resume() + - LP: #575853 + * iwlwifi: clear all tx queues when firmware ready + - LP: #575853 + * iwlwifi: fix scan race + - LP: #575853 + * e1000e: stop cleaning when we reach tx_ring->next_to_use + - LP: #575853 + * tcp: fix ICMP-RTO war + - LP: #575853 + * perf_events, x86: Implement Intel Westmere/Nehalem-EX support + - LP: #575853 + * Input: wacom - switch mode upon system resume + - LP: #575853 + * md: deal with merge_bvec_fn in component devices better. + - LP: #575853 + * nfsd4: don't try to map gid's in generic rpc code + - LP: #575853 + * nfsd: ensure sockets are closed on error + - LP: #575853 + * ALSA: hda: Set Front Mic to input vref 50% for Lenovo 3000 Y410 + - LP: #479373, #575853 + * mac80211: fix deferred hardware scan requests + - LP: #575853 + * fs-writeback: Add helper function to start writeback if idle + - LP: #575853 + * ext4: flush delalloc blocks when space is low + - LP: #575853 + * ext4: fix async i/o writes beyond 4GB to a sparse file + - LP: #575853 + * tpm: autoload tpm_tis based on system PnP IDs + - LP: #575853 + * IB/iser: Rewrite SG handling for RDMA logic + - LP: #575853 + * mptctl : Remove printk which floods unnecessary messages to + var/log/message + - LP: #575853 + * mptspi: Fix for incorrect data underrun errata + - LP: #575853 + * sched: Use proper type in sched_getaffinity() + - LP: #575853 + * KVM: SVM: Fix memory leaks that happen when svm_create_vcpu() fails + - LP: #575853 + * KVM: Don't spam kernel log when injecting exceptions due to bad cr + writes + - LP: #575853 + * KVM: allow bit 10 to be cleared in MSR_IA32_MC4_CTL + - LP: #575853 + * KVM: VMX: Save/restore rflags.vm correctly in real mode + - LP: #575853 + * KVM: MMU: fix kvm_mmu_zap_page() and its calling path + - LP: #575853 + * KVM: fix the handling of dirty bitmaps to avoid overflows + - LP: #575853 + * KVM: Increase NR_IOBUS_DEVS limit to 200 + - LP: #575853 + * KVM: x86: Fix TSS size check for 16-bit tasks + - LP: #575853 + * x86/gart: Disable GART explicitly before initialization + - LP: #575853 + * r8169: clean up my printk uglyness + - LP: #562742, #575853 + * Linux 2.6.32.12 + - LP: #575853 + * drm/edid: allow certain bogus edids to hit a fixup path rather than + fail + - LP: #575853 + * drm/radeon: add new RS880 pci id + - LP: #575853 + * drm: remove the EDID blob stored in the EDID property when it is + disconnected + - LP: #575853 + * drm/radeon/kms: never treat rs4xx as AGP + - LP: #575853 + * drm/radeon/kms: Fix NULL pointer dereference if memory allocation + failed in a simple way + - LP: #575853 + * drm/radeon/kms: don't print error on -ERESTARTSYS. + - LP: #575853 + * drm/radeon/kms: fix pal tv-out support on legacy IGP chips + - LP: #575853 + * drm: Return ENODEV if the inode mapping changes + - LP: #575853 + * drm/edid/quirks: Envision EN2028 + - LP: #575853 + * drm/radeon: R300 AD only has one quad pipe. + - LP: #575853 + * drm/radeon/kms: fix washed out image on legacy tv dac + - LP: #575853 + * drm/radeon/kms/combios: verify dac_adj values are valid + - LP: #575853 + * drm/i915: Add no_lvds entry for the Clientron U800 + - LP: #544671, #575853 + * drm/radeon/kms: more atom parser fixes (v2) + - LP: #575853 + * drm/radeon/kms: disable the tv encoder when tv/cv is not in use + - LP: #575853 + * drm/radeon/kms: fix tv dac conflict resolver + - LP: #575853 + * drm/radeon/kms: fix rs600 tlb flush + - LP: #575853 + * drm/radeon/kms: add FireMV 2400 PCI ID. + - LP: #575853 + * Linux 2.6.32.12+drm33.3 + - LP: #575853 + * USB: EHCI: defer reclamation of siTDs + - LP: #583414 + * p54usb: Add usbid for Corega CG-WLUSB2GT. + - LP: #583414 + * md/raid5: allow for more than 2^31 chunks. + - LP: #583414 + * md/raid5: fix previous patch. + - LP: #583414 + * libata: fix locking around blk_abort_request() + - LP: #583414 + * libata: ensure NCQ error result taskfile is fully initialized before + returning it via qc->result_tf. + - LP: #583414 + * w1: w1 temp: fix negative termperature calculation + - LP: #583414 + * memcg: fix prepare migration + - LP: #583414 + * mac80211: remove bogus TX agg state assignment + - LP: #583414 + * flex_array: fix the panic when calling flex_array_alloc() without + __GFP_ZERO + - LP: #583414 + * core, x86: make LIST_POISON less deadly + - LP: #583414 + * hugetlb: fix infinite loop in get_futex_key() when backed by huge pages + - LP: #583414 + * reiserfs: fix corruption during shrinking of xattrs + - LP: #583414 + * nfsd4: bug in read_buf + - LP: #583414 + * keys: the request_key() syscall should link an existing key to the dest + keyring + - LP: #583414 + * staging: usbip: Fix deadlock + - LP: #583414 + * USB: fix remote wakeup settings during system sleep + - LP: #583414 + * USB: Add id for HP ev2210 a.k.a Sierra MC5725 miniPCI-e Cell Modem. + - LP: #511066, #583414 + * USB: fix testing the wrong variable in fs_create_by_name() + - LP: #583414 + * USB: don't choose configs with no interfaces + - LP: #583414 + * USB: OHCI: don't look at the root hub to get the number of ports + - LP: #583414 + * USB: xhci: properly set the "Mult" field of the endpoint context. + - LP: #583414 + * USB: xhci: properly set endpoint context fields for periodic eps. + - LP: #583414 + * procfs: fix tid fdinfo + - LP: #583414 + * ocfs2: Update VFS inode's id info after reflink. + - LP: #583414 + * ocfs2: potential ERR_PTR dereference on error paths + - LP: #583414 + * ocfs2: Compute metaecc for superblocks during online resize. + - LP: #583414 + * ocfs2_dlmfs: Fix math error when reading LVB. + - LP: #583414 + * powernow-k8: Fix frequency reporting + - LP: #572348, #583414 + * nfs d_revalidate() is too trigger-happy with d_drop() + - LP: #583414 + * NFS: rsize and wsize settings ignored on v4 mounts + - LP: #583414 + * Staging: hv: Fix a bug affecting IPv6 + - LP: #583414 + * Staging: hv: Fix up memory leak on HvCleanup + - LP: #583414 + * Staging: hv: name network device ethX rather than sethX + - LP: #583414 + * i2c: Fix probing of FSC hardware monitoring chips + - LP: #583414 + * perf: Fix resource leak in failure path of perf_event_open() + - LP: #583414 + * raid6: fix recovery performance regression + - LP: #583414 + * serial: 8250_pnp - add Fujitsu Wacom device + - LP: #583414 + * block: ensure jiffies wrap is handled correctly in + blk_rq_timed_out_timer + - LP: #583414 + * dm9601: fix phy/eeprom write routine + - LP: #583414 + * p54pci: fix bugs in p54p_check_tx_ring + - LP: #583414 + * edac, mce: Fix wrong mask and macro usage + - LP: #583414 + * x86-64: Clear a 64-bit FS/GS base on fork if selector is nonzero + - LP: #583414 + * x86: Disable large pages on CPUs with Atom erratum AAE44 + - LP: #583414 + * x86, k8 nb: Fix boot crash: enable k8_northbridges unconditionally on + AMD systems + - LP: #583414 + * x86, AMD: Fix stale cpuid4_info shared_map data in shared_cpu_map + cpumasks + - LP: #583414 + * ALSA: hda: Use LPIB quirk for DG965OT board version AAD63733-203 + - LP: #459083, #583414 + * ALSA: hda - Add PCI quirk for HP dv6-1110ax. + - LP: #583414 + * ALSA: hda: Use STAC_DELL_M6_BOTH quirk for Dell Studio XPS 1645 + - LP: #553002, #583414 + * ALSA: hda: Use STAC_DELL_M6_BOTH quirk for Dell Studio 1558 + - LP: #568600, #583414 + * ALSA: hda: Use ALC880_F1734 quirk for Fujitsu Siemens AMILO Xi 1526 + - LP: #567494, #583414 + * ALSA: snd-meastro3: Add amp_gpio quirk for Compaq EVO N600C + - LP: #583414 + * ALSA: snd-meastro3: Ignore spurious HV interrupts during suspend / + resume + - LP: #583414 + * ALSA: hda: Fix max PCM level to 0 dB for Fujitsu-Siemens laptops using + CX20549 (Venice) + - LP: #583414 + * ALSA: hda: Fix 0 dB for Packard Bell models using Conexant CX20549 + (Venice) + - LP: #541802, #583414 + * ALSA: hda: Use olpc-xo-1_5 quirk for Toshiba Satellite Pro T130-15F + - LP: #573284, #583414 + * ALSA: hda: Use olpc-xo-1_5 quirk for Toshiba Satellite + P500-PSPGSC-01800T + - LP: #549267, #583414 + * libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2) + - LP: #583414 + * ext4: correctly calculate number of blocks for fiemap + - LP: #474597, #583414 + * initramfs: handle unrecognised decompressor when unpacking + - LP: #583414 + * CRED: Fix a race in creds_are_invalid() in credentials debugging + - LP: #583414 + * jfs: fix diAllocExt error in resizing filesystem + - LP: #583414 + * ACPI: introduce kernel parameter acpi_sleep=sci_force_enable + - LP: #553498, #583414 + * p54pci: rx frame length check + - LP: #583414 + * drivers/net/wireless/p54/txrx.c Fix off by one error + - LP: #583414 + * dccp_probe: Fix module load dependencies between dccp and dccp_probe + - LP: #583414 + * KVM: remove unused load_segment_descriptor_to_kvm_desct + - LP: #583414 + * kgdb: don't needlessly skip PAGE_USER test for Fsl booke + - LP: #583414 + * r8169: use correct barrier between cacheable and non-cacheable memory + - LP: #562742, #583414 + * r8169: fix broken register writes + - LP: #562742, #583414 + * r8169: more broken register writes workaround + - LP: #562742, #583414 + * PCI: Ensure we re-enable devices on resume + - LP: #566149, #583414 + * skip sense logging for some ATA PASS-THROUGH cdbs + - LP: #583128, #583414 + * tg3: Fix INTx fallback when MSI fails + - LP: #583414 + * xfs: add a shrinker to background inode reclaim + - LP: #583414 + * qla2xxx: Properly handle UNDERRUN completion statuses. + - LP: #583414 + * bnx2: Fix lost MSI-X problem on 5709 NICs. + - LP: #583414 + * tracing: Fix ftrace_event_call alignment for use with gcc 4.5 + - LP: #583414 + * security: testing the wrong variable in create_by_name() + - LP: #583414 + * md: restore ability of spare drives to spin down. + - LP: #583414 + * virtio: initialize earlier + - LP: #583414 + * md/raid6: Fix raid-6 read-error correction in degraded state + - LP: #583414 + * V4L/DVB: budget: Oops: "BUG: unable to handle kernel NULL pointer + dereference" + - LP: #583414 + * ACPI: DMI init_set_sci_en_on_resume for multiple Lenovo ThinkPads + - LP: #583414 + * power_meter: acpi_device_class "power_meter_resource" too long + - LP: #583414 + * ACPI: sleep: init_set_sci_en_on_resume for Dell Studio 155x + - LP: #553498, #583414 + * cpuidle: Fix incorrect optimization + - LP: #583414 + * pxa/colibri: fix missing #include in colibri.h + - LP: #583414 + * SCSI: fix locking around blk_abort_request() + - LP: #583414 + * SCSI: libiscsi: regression: fix header digest errors + - LP: #583414 + * scsi_debug: virtual_gb ignores sector_size + - LP: #583414 + * Enable retries for SYNCRONIZE_CACHE commands to fix I/O error + - LP: #583414 + * SCSI: Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 + I/O error + - LP: #583414 + * MIPS: Sibyte: Apply M3 workaround only on affected chip types and + versions. + - LP: #583414 + * Linux 2.6.32.13 + - LP: #583414 + * drm/i915: Add initial bits for VGA modesetting bringup on Sandybridge. + - LP: #583414 + * drm/i915: fix tiling limits for i915 class hw v2 + - LP: #583414 + * Linux 2.6.32.13+drm33.4 + - LP: #583414 + * (pre-stable) Input: psmouse - reset all types of mice before + reconnecting + - LP: #551234 + * ipv4: udp: fix short packet and bad checksum logging + - LP: #588832 + * hp_accel: fix race in device removal + - LP: #588832 + * fbdev: bfin-t350mcqb-fb: fix fbmem allocation with blanking lines + - LP: #588832 + * hugetlbfs: kill applications that use MAP_NORESERVE with SIGBUS instead + of OOM-killer + - LP: #588832 + * dma-mapping: fix dma_sync_single_range_* + - LP: #588832 + * ACPI: sleep: eliminate duplicate entries in acpisleep_dmi_table[] + - LP: #588832 + * mmc: atmel-mci: fix two parameters swapped + - LP: #588832 + * mmc: atmel-mci: prevent kernel oops while removing card + - LP: #588832 + * mmc: atmel-mci: remove data error interrupt after xfer + - LP: #588832 + * ptrace: fix return value of do_syscall_trace_enter() + - LP: #588832 + * powerpc/perf_event: Fix oops due to perf_event_do_pending call + - LP: #588832 + * cifs: guard against hardlinking directories + - LP: #588832 + * serial: imx.c: fix CTS trigger level lower to avoid lost chars + - LP: #588832 + * ALSA: ice1724 - Fix ESI Maya44 capture source control + - LP: #588832 + * ALSA: hda: Fix 0 dB for Lenovo models using Conexant CX20549 (Venice) + - LP: #588832 + * inotify: race use after free/double free in inotify inode marks + - LP: #588832 + * inotify: don't leak user struct on inotify release + - LP: #588832 + * profile: fix stats and data leakage + - LP: #588832 + * x86, k8: Fix build error when K8_NB is disabled + - LP: #588832 + * x86, cacheinfo: Turn off L3 cache index disable feature in virtualized + environments + - LP: #588832 + * x86, amd: Check X86_FEATURE_OSVW bit before accessing OSVW MSRs + - LP: #588832 + * Btrfs: check for read permission on src file in the clone ioctl + - LP: #588832 + * ALSA: hda - New Intel HDA controller + - LP: #588832 + * proc: partially revert "procfs: provide stack information for threads" + - LP: #588832 + * revert "procfs: provide stack information for threads" and its fixup + commits + - LP: #588832 + * iwlwifi: clear all the stop_queue flag after load firmware + - LP: #588832 + * p54: disable channels with incomplete calibration data sets + - LP: #588832 + * CacheFiles: Fix error handling in cachefiles_determine_cache_security() + - LP: #588832 + * megaraid_sas: fix for 32bit apps + - LP: #588832 + * mmap_min_addr check CAP_SYS_RAWIO only for write + - LP: #588832 + * nilfs2: fix sync silent failure + - LP: #588832 + * crypto: authenc - Add EINPROGRESS check + - LP: #588832 + * Linux 2.6.32.14 + - LP: #588832 + * drm/i915: use PIPE_CONTROL instruction on Ironlake and Sandy Bridge + - LP: #588832 + * drm/i915: fix non-Ironlake 965 class crashes + - LP: #588832 + * drm/i915: Disable FBC on 915GM and 945GM. + - LP: #492392, #588832 + * Linux 2.6.32.14+drm33.5 + - LP: #588832 + * Linux 2.6.32.15+drm33.5 + - LP: #588832 + * HID: remove MODULE_VERSION from new drivers + - LP: #583531 + * HID: fix N-trig touch panel with recent firmware + - LP: #583531 + * HID: ntrig: explain firmware quirk + - LP: #583531 + * HID: ntrig: Emit TOUCH with DOUBLETAP for single touch + - LP: #583531 + * HID: ntrig: TipSwitch for single touch mode touch. + - LP: #583531 + * HID: ntrig: Remove unused macro, TripleTap and QuadTap + - LP: #583531 + * (pre-stable) drm/radeon/kms: initialize set_surface_reg reg for rs600 + asic + - LP: #544590 + + -- Stefan Bader Wed, 09 Jun 2010 17:01:09 +0200 + +linux (2.6.32-22.36) lucid-security; urgency=low + + [ Andy Whitcroft ] + + * Revert "kvm: restrict writing of segment selectors to segment + registers" + - LP: #589223 + + -- Andy Whitcroft Thu, 03 Jun 2010 17:11:27 +0100 + +linux (2.6.32-22.35) lucid-security; urgency=low + + [ Leann Ogasawara ] + + * kvm: restrict writing of segment selectors to segment registers + - CVE-2010-0419 + + [ Upstream Kernel Changes ] + + * tty: release_one_tty() forgets to put pids + - CVE-2010-1162 + * oom: fix the unsafe usage of badness() in proc_oom_score() + - CVE-2010-1488 + * Attempt #2 to handle null nameidata + - CVE-2010-1148 + * reiserfs: fix permissions on .reiserfs_priv + - CVE-2010-1146 + * r8169: offical fix for CVE-2009-4537 (overlength frame DMAs) + - CVE-2009-4537 + + -- Stefan Bader Tue, 01 Jun 2010 11:44:28 +0200 + +linux (2.6.32-22.33) lucid-proposed; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: ACPI: EC: Allow multibyte access to EC (v3) + - LP: #526354 + + [ Tim Gardner ] + + * ubuntu: rtl8192se -- update to version 0015.0127.2010 + - LP: #567016 + + -- Andy Whitcroft Mon, 19 Apr 2010 11:06:35 +0100 + +linux (2.6.32-21.32) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: i915 KMS -- support disabling KMS for known broken devices + - LP: #563277 + * SAUCE: i915 KMS -- blacklist i830 + - LP: #542208, #563277 + * SAUCE: i915 KMS -- blacklist i845g + - LP: #541492, #563277 + * SAUCE: i915 KMS -- blacklist i855 + - LP: #511001, #541511, #563277 + * SAUCE: radeon KMS -- support disabling KMS for known broken devices + - LP: #546743 + * SAUCE: radeon KMS -- blacklist ES1000 + - LP: #546743 + + -- Andy Whitcroft Thu, 15 Apr 2010 17:18:49 +0100 + +linux (2.6.32-21.31) lucid; urgency=low + + [ Andy Whitcroft ] + + * allow modules.builtin to be optional + * d-i: add mpt2sas to the message-modules udeb + - LP: #530361 + + [ Christopher James Halse Rogers ] + + * SAUCE: Nouveau: Add quirk framework to disable acceleration + - LP: #544088, #546393 + * SAUCE: Nouveau: Disable acceleration on MacBook Pros + - LP: #546393 + * SAUCE: Nouveau: Disable acceleration on GeForce3 cards + - LP: #544088 + * SAUCE: Nouveau: Disable acceleration on 6100 cards + - LP: #542950 + + [ Stefan Bader ] + + * SAUCE: dma-mapping: Remove WARN_ON in dma_free_coherent + - LP: #458201 + + [ Surbhi Palande ] + + * SAUCE: sync before umount to reduce time taken by ext4 umount + - LP: #543617 + + [ Upstream Kernel Changes ] + + * tipc: Fix oops on send prior to entering networked mode (v3) + - CVE-2010-1187 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - LP: #561425 + * KVM: x86 emulator: fix memory access during x86 emulation + - LP: #561425 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - LP: #561425 + * KVM: x86 emulator: Fix popf emulation + - LP: #561425 + * KVM: Fix segment descriptor loading + - LP: #561425 + * KVM: VMX: Update instruction length on intercepted BP + - LP: #561425 + * KVM: VMX: Use macros instead of hex value on cr0 initialization + - LP: #561425 + * KVM: SVM: Reset cr0 properly on vcpu reset + - LP: #561425 + * KVM: VMX: Disable unrestricted guest when EPT disabled + - LP: #561425 + * KVM: x86: disable paravirt mmu reporting + - LP: #561425 + * AppArmor: Fix put of unassigned ns if aa_unpack fails + * AppArmor: Fix refcount bug when exec fails + - LP: #562063 + * AppArmor: Take refcount on cxt->profile to ensure it remains a valid + reference + - LP: #367499 + * AppArmor: fix typo in scrubbing environment variable warning + - LP: #562060 + * AppArmor: fix regression by setting default to mediate deleted files + - LP: #562056 + * AppArmor: fix refcount order bug that can trigger during replacement + - LP: #367499 + * AppArmor: Make sure to unmap aliases for vmalloced dfas before they are + live + - LP: #529288 + * AppArmor: address performance regression of replaced profile + - LP: #549428 + * AppArmor: make the global side the correct type + - LP: #562047 + * AppArmor: use the kernel shared workqueue to free vmalloc'ed dfas + * sky2: add register definitions for new chips + - LP: #537168 + * sky2: 88E8059 support + - LP: #537168 + * net: Fix Yukon-2 Optima TCP offload setup + - LP: #537168 + * net: Add missing TST_CFG_WRITE bits around sky2_pci_write + - LP: #537168 + * sky2: print Optima chip name + - LP: #537168 + * (Upstream) dell-laptop: defer dell_rfkill_update to worker thread + - LP: #555261 + * drm/nv40: add LVDS table quirk for Dell Latitude D620 + - LP: #539730 + + -- Andy Whitcroft Tue, 13 Apr 2010 18:50:58 +0100 + +linux (2.6.32-20.30) lucid; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) ACPI: EC: Allow multibyte access to EC" + - LP: #561151 + + -- Andy Whitcroft Mon, 12 Apr 2010 15:46:31 +0100 + +linux (2.6.32-20.29) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915" + - LP: #542251 + * add Breaks: against hardy lvm2 + - LP: #528155 + + [ Colin Watson ] + + * d-i -- enable udebs for generic-pae + - LP: #160366 + + [ Stefan Bader ] + + * [Config] Add xen netboot support + - LP: #160366 + + [ Takashi Iwai ] + + * (pre-stable): input: Support Clickpad devices in ClickZone mode + - LP: #516329 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) Bluetooth: Fix sleeping function in RFCOMM within + invalid context" + - LP: #553837 + * Revert "(pre-stable) USB: fix usbfs regression" + - LP: #553837 + * Revert "(pre-stable) softlockup: Stop spurious softlockup messages due + to overflow" + - LP: #553837 + * Revert "(pre-stable) drm/nouveau: report unknown connector state if lid + closed" + - LP: #553837 + * drivers/scsi/ses.c: eliminate double free + - LP: #553837 + * decompress: fix new decompressor for PIC + - LP: #553837 + * ARM: Fix decompressor's kernel size estimation for ROM=y + - LP: #553837 + * MIPS: Cleanup forgotten label_module_alloc in tlbex.c + - LP: #553837 + * tg3: Fix tg3_poll_controller() passing wrong pointer to tg3_interrupt() + - LP: #553837 + * tg3: Fix 5906 transmit hangs + - LP: #553837 + * ALSA: hda - Fix input source elements of secondary ADCs on Realtek + - LP: #553837 + * ALSA: hda: enable MSI for Gateway M-6866 + - LP: #538918, #553837 + * timekeeping: Prevent oops when GENERIC_TIME=n + - LP: #553837 + * Input: alps - add support for the touchpad on Toshiba Tecra A11-11L + - LP: #553837 + * Input: i8042 - add ALDI/MEDION netbook E1222 to qurik reset table + - LP: #553837 + * i2c-i801: Don't use the block buffer for I2C block writes + - LP: #553837 + * ath5k: dont use external sleep clock in AP mode + - LP: #553837 + * ath5k: fix setup for CAB queue + - LP: #553837 + * ring-buffer: Move disabled check into preempt disable section + - LP: #553837 + * function-graph: Init curr_ret_stack with ret_stack + - LP: #553837 + * Bluetooth: Fix sleeping function in RFCOMM within invalid context + - LP: #553837 + * tracing: Use same local variable when resetting the ring buffer + - LP: #553837 + * tracing: Disable buffer switching when starting or stopping trace + - LP: #553837 + * tracing: Do not record user stack trace from NMI context + - LP: #553837 + * PCI: unconditionally clear AER uncorr status register during cleanup + - LP: #553837 + * efifb: fix framebuffer handoff + - LP: #553837 + * coredump: suppress uid comparison test if core output files are pipes + - LP: #553837 + * V4L/DVB (13961): em28xx-dvb: fix memleak in dvb_fini() + - LP: #553837 + * hrtimer: Tune hrtimer_interrupt hang logic + - LP: #553837 + * x86, apic: Don't use logical-flat mode when CPU hotplug may exceed 8 + CPUs + - LP: #553837 + * mvsas: add support for Adaptec ASC-1045/1405 SAS/SATA HBA + - LP: #553837 + * pci: add support for 82576NS serdes to existing SR-IOV quirk + - LP: #553837 + * sched: Mark boot-cpu active before smp_init() + - LP: #553837 + * sparc64: Make prom entry spinlock NMI safe. + - LP: #553837 + * sysctl: require CAP_SYS_RAWIO to set mmap_min_addr + - LP: #553837 + * e1000e: enable new 82567V-3 device + - LP: #553837 + * ixgbe: add support for 82599 KR device 0x1517 + - LP: #553837 + * ath9k: fix lockdep warning when unloading module + - LP: #553837 + * mqueue: fix mq_open() file descriptor leak on user-space processes + - LP: #553837 + * virtio: fix out of range array access + - LP: #553837 + * sched: Fix SCHED_MC regression caused by change in sched cpu_power + - LP: #553837 + * readahead: add blk_run_backing_dev + - LP: #553837 + * ALSA: hda: Use LPIB and 6stack-dig for eMachines T5212 + - LP: #538895, #553837 + * ALSA: hda - Disable MSI for Nvidia controller + - LP: #553837 + * ALSA: hda - Fix secondary ADC of ALC260 basic model + - LP: #553837 + * ALSA: hda: Fix 0 dB offset for HP laptops using CX20551 (Waikiki) + - LP: #420578, #553837 + * ALSA: cmipci: work around invalid PCM pointer + - LP: #553837 + * gigaset: correct clearing of at_state strings on RING + - LP: #553837 + * gigaset: prune use of tty_buffer_request_room + - LP: #553837 + * perf: Make the install relative to DESTDIR if specified + - LP: #553837 + * perf_event: Fix oops triggered by cpu offline/online + - LP: #553837 + * tmpfs: fix oops on mounts with mpol=default + - LP: #553837 + * tmpfs: mpol=bind:0 don't cause mount error. + - LP: #553837 + * tmpfs: handle MPOL_LOCAL mount option properly + - LP: #553837 + * tmpfs: cleanup mpol_parse_str() + - LP: #553837 + * doc: add the documentation for mpol=local + - LP: #553837 + * SCSI: scsi_transport_fc: Fix synchronization issue while deleting vport + - LP: #553837 + * NFSv4: Don't ignore the NFS_INO_REVAL_FORCED flag in + nfs_revalidate_inode() + - LP: #553837 + * NFS: Avoid a deadlock in nfs_release_page + - LP: #553837 + * NFS: Prevent another deadlock in nfs_release_page() + - LP: #553837 + * tty: Keep the default buffering to sub-page units + - LP: #553837 + * tty: Take a 256 byte padding into account when buffering below sub-page + units + - LP: #553837 + * USB: fix usbfs regression + - LP: #553837 + * USB: EHCI: fix ITD list order + - LP: #553837 + * USB: EHCI: adjust ehci_iso_stream for changes in ehci_qh + - LP: #553837 + * USB: qcserial: add new device ids + - LP: #553837 + * USB: xHCI: re-initialize cmd_completion + - LP: #553837 + * USB: serial: ftdi: add CONTEC vendor and product id + - LP: #553837 + * USB: option: fix incorrect manufacturer name in usb/serial/option: + MAXON->CMOTECH + - LP: #553837 + * USB: option: move hardcoded PID to a macro in usb/serial/option + - LP: #553837 + * USB: option: add support for a new CMOTECH device to usb/serial/option + - LP: #553837 + * usb: r8a66597-hcd: fix removed from an attached hub + - LP: #553837 + * wl1251: fix potential crash + - LP: #553837 + * jme: Fix VLAN memory leak + - LP: #553837 + * jme: Protect vlgrp structure by pause RX actions. + - LP: #553837 + * edac, mce: Filter out invalid values + - LP: #553837 + * iwlwifi: use dma_alloc_coherent + - LP: #553837 + * iwlwifi: Silence tfds_in_queue message + - LP: #553837 + * SUNRPC: Fix a potential memory leak in auth_gss + - LP: #553837 + * sunrpc: handle allocation errors from __rpc_lookup_create() + - LP: #553837 + * if_tunnel.h: add missing ams/byteorder.h include + - LP: #553837 + * fs/partitions/msdos: add support for large disks + - LP: #553837 + * fs/partition/msdos: fix unusable extended partition for > 512B sector + - LP: #553837 + * PCI: fix return value from pcix_get_max_mmrbc() + - LP: #553837 + * PCI: fix access of PCI_X_CMD by pcix get and set mmrbc functions + - LP: #553837 + * PCI: cleanup error return for pcix get and set mmrbc functions + - LP: #553837 + * rt2860sta: Fix argument to linux_pci_unmap_single() + - LP: #553837 + * ath9k: fix BUG_ON triggered by PAE frames + - LP: #553837 + * cpuset: fix the problem that cpuset_mem_spread_node() returns an + offline node + - LP: #553837 + * softlockup: Stop spurious softlockup messages due to overflow + - LP: #553837 + * netfilter: xt_recent: fix regression in rules using a zero hit_count + - LP: #553837 + * x86: Fix placement of FIX_OHCI1394_BASE + - LP: #553837 + * x86, amd: Restrict usage of c1e_idle() + - LP: #553837 + * hwmon: (coretemp) Add missing newline to dev_warn() message + - LP: #553837 + * ALSA: hda: Use LPIB for ga-ma770-ud3 board + - LP: #553837 + * ALSA: ac97: Add Toshiba P500 to ac97 jack sense blacklist + - LP: #481058, #553837 + * ALSA: ac97: Add IBM ThinkPad R40e to Headphone/Line Jack Sense + blacklist + - LP: #303789, #553837 + * ALSA: hda: Use ALC260_WILL quirk for another Acer model (0x1025007f) + - LP: #418627, #553837 + * ath9k: Enable TIM timer interrupt only when needed. + - LP: #553837 + * mac80211: Retry null data frame for power save + - LP: #553837 + * ath9k: Enable IEEE80211_HW_REPORTS_TX_ACK_STATUS flag for ath9k + - LP: #553837 + * mac80211: Reset dynamic ps timer in Rx path. + - LP: #553837 + * leds-gpio: fix default state handling on OF platforms + - LP: #553837 + * quota: manage reserved space when quota is not active [v2] + - LP: #553837 + * quota: Fix warning when a delayed write happens before quota is enabled + - LP: #553837 + * ahci: use BIOS date in broken_suspend list + - LP: #553837 + * Bluetooth: Fix potential bad memory access with sysfs files + - LP: #553837 + * Bluetooth: Fix kernel crash on L2CAP stress tests + - LP: #553837 + * sh: Fix zImage boot using fixed PMB. + - LP: #553837 + * b43: Workaround circular locking in hw-tkip key update callback + - LP: #553837 + * block: Backport of various I/O topology fixes from 2.6.33 and 2.6.34 + - LP: #553837 + * s3cmci: initialize default platform data no_wprotect and no_detect with + 1 + - LP: #553837 + * x86: Fix sched_clock_cpu for systems with unsynchronized TSC + - LP: #553837 + * GFS2: Skip check for mandatory locks when unlocking + - LP: #553837 + * Linux 2.6.32.11 + - LP: #553837 + * drm/i915: fix small leak on overlay error path + - LP: #553837 + * drm/i915: Avoid NULL deref in get_pages() unwind after error. + - LP: #553837 + * drm/nouveau: report unknown connector state if lid closed + - LP: #553837 + * Linux-2.6.32.11+drm33.2 + - LP: #553837 + * mmc: add module parameter to set whether cards are assumed removable + - LP: #477106 + * (pre-stable) ACPI: EC: Allow multibyte access to EC + - LP: #526354 + * PCI quirks: disable msi on AMD rs4xx internal gfx bridges + - LP: #509273 + * drm/i915: Add dependency on the intel agp module + - LP: #542251 + * (pre-stable) drm/edid: allow certain bogus edids to hit a fixup path + rather than fail + - LP: #540632 + * drm/radeon/kms: rework pll algo selection + - LP: #538377 + * drm/radeon/kms: update new pll algo + - LP: #538377 + * PCI quirk: Disable MSI on VIA K8T890 systems + - LP: #544741 + * sched: update load count only once per cpu in 10 tick update window + - LP: #513848 + + -- Andy Whitcroft Fri, 09 Apr 2010 17:44:41 +0100 + +linux (2.6.32-19.28) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable various multitouch devices + - LP: #541453 + + [ Chase Douglas ] + + * (pre-stable): input: ALPS - Add signature for HP Pavilion dm3 laptops + - LP: #545307 + * SAUCE: Disable function tracing after hitting __schedule_bug + * SAUCE: Reduce ACPI resource conflict message to KERN_INFO, printf + cleanup + - LP: #440470 + + [ Jesse Barnes ] + + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + + [ John Johansen ] + + * SAUCE: AppArmor: Remove null_profile's use of PFLAG_NO_LIST_REF + - LP: #539437 + * SAUCE: AppArmor: Stop page allocation warnings that can occur on policy + load + - LP: #458299 + * SAUCE: AppArmor: Return string len rather than the allocation size + - LP: #551844 + * SAUCE: AppArmor: Fix oops in profile verification if profile unpack + fails. + + [ Luke Yelavich ] + + * [Config] Enable Nouveau DRM module on powerpc + + [ Stefan Bader ] + + * SAUCE: Pull in thinkpad-acpi from v2.6.34-rc1 + - LP: #357673 + * [Config] Enable thinkpad-acpi ALSA volume control + - LP: #357673 + + [ Steve Conklin ] + + * SAUCE: drm/i915: Disable FBC on 915GM and 945GM + - LP: #492392, #539609 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, + Dell Inspiron 700m" + - LP: #515246 + * (pre-stable) softlockup: Stop spurious softlockup messages due to + overflow + - LP: #551068 + * backlight: mbp_nvidia_bl - add five more MacBook variants + - LP: #511965 + * drm/nv04-nv40: Fix up the programmed horizontal sync pulse delay. + - LP: #529130 + * drm/nouveau: Fix fbcon corruption with font width not divisible by 8 + - LP: #544739 + * (pre-stable) USB: fix usbfs regression + * drm/radeon/bo: add some fallback placements for VRAM only objects. + - LP: #507148 + * drm/radeon/kms: don't print error on -ERESTARTSYS. + - LP: #507148 + * Input: add the ABS_MT_PRESSURE event + - LP: #541453 + * HID: Support for 3M multitouch panel + - LP: #541453 + * HID: make 3M PCT touchscreen driver standalone config option + - LP: #541453 + * HID: add support for Stantum multitouch panel + - LP: #541453 + * HID: make Stantum driver standalone config option + - LP: #541453 + * HID: add support for Acer T230H multitouch + - LP: #541453 + * HID: add support for Pixart Imaging Optical Touch Screen + - LP: #541453 + * HID: fixed bug in single-touch emulation on the stantum panel + - LP: #541453 + * HID: add pressure support for the Stantum multitouch panel + - LP: #541453 + * HID: Support for MosArt multitouch panel + - LP: #541453 + * HID: hid-ntrig add multi input quirk and clean up + - LP: #541453 + * HID: n-trig: remove unnecessary tool switching + - LP: #541453 + * HID: hid-ntrig: multitouch cleanup and fix + - LP: #541453 + * HID: hid-ntrig: Single touch mode tap + - LP: #541453 + * hid: ntrig touch events + - LP: #541453 + * (pre-stable) x86-32, resume: do a global tlb flush in S4 resume + - LP: #531309 + * drm/i915: Part of: Add initial bits for VGA modesetting bringup on + Sandybridge. + - LP: #515246 + * drm/i915: Stop trying to use ACPI lid status to determine LVDS + connection. + - LP: #515246 + + -- Andy Whitcroft Wed, 31 Mar 2010 15:14:32 +0100 + +linux (2.6.32-18.27) lucid; urgency=low + + [ Chase Douglas ] + + * SAUCE: Don't register vga16fb framebuffer if other framebuffers are + present + - LP: #527369 + + [ Loïc Minier ] + + * [Config] armel/versatile: Set CRAMFS=m + - LP: #524893 + * [Config] armel: Reset default command-line + - LP: #524893 + + [ Stefan Bader ] + + * build/modules: Update d-i to reflect recent config changes + - LP: #546929 + + [ Upstream Kernel Changes ] + + * (pre-stable) drm/nouveau: report unknown connector state if lid closed + - LP: #523072 + * (pre-stable) Staging: rt2870: Add USB ID for Buffalo Airstation + WLI-UC-GN + - LP: #441990 + * (pre-stable) iwlwifi: fix nfreed-- + - LP: #545585 + * (pre-stable) pata_via: Add VIA VX900 support + - LP: #548675 + + -- Stefan Bader Fri, 26 Mar 2010 18:39:42 +0100 + +linux (2.6.32-17.26) lucid; urgency=low + + [ Amit Kucheria ] + + * [Config] SECURITY_FILE_CAPABILITIES dissapeared in 2.6.33 + + [ Andy Whitcroft ] + + * rules -- allow architecture configurations to be missing + * SAUCE: cdrom -- default to not locking the tray when in use + - LP: #397734 + * expose the kernel EXTRAVERSION in dmesg and /proc/version_signature + * record the drm version in EXTRAVERSION + * linux-tools -- pull out the perf binary into a binary package + * [Config] enable MMIOTRACE for graphics debugging + * [Config] enable BLK_DEV_BSG + * debian -- fix builds when tools are disabled + * allow us to build default configs for automated builds + * config -- allow locally specified configuration overrides + * [Config] de-modularise PATA disk controllers + * [Config] de-modularise SATA disk controllers + + [ Stefan Bader ] + + * Revert "SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow" + - LP: #540231 + * Revert "SAUCE: (pre-stable) netfilter: xt_recent: fix false match" + - LP: #540231 + * [Config] Update configs for 2.6.32.10 + - LP: #540231 + + [ Tim Gardner ] + + * [Config] Add vmw_pvscsi and vmxnet3 to -virtual flavour + - LP: #531017 + * SAUCE: igb: Supress an upstream compiler complaint + * [Config] Fix sub-flavours package conflicts + - LP: #454827 + + [ Upstream Kernel Changes ] + + * Revert "tpm_tis: TPM_STS_DATA_EXPECT workaround" + - LP: #540231 + * Revert "(pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue()" + - LP: #540231 + * (pre-stable) Bluetooth: Fix sleeping function in RFCOMM within invalid + context + - LP: #534549 + * igb: remove unused temp variable from stats clearing path + * igb: update comments for serdes config and update to handle duplex + * igb: update the approach taken to acquiring and releasing the phy lock + * igb: add locking to reads of the i2c interface + * igb: add combined function for setting rar and pool bits + * igb: make use of the uta to allow for promiscous mode filter + * igb: add support for 82576NS SerDes adapter + * igb: add function to handle mailbox lock + * igb: fix a few items where weren't correctly setup for mbx timeout + * igb: change how we handle alternate mac addresses + * igb: remove microwire support from igb + * igb: move the generic copper link setup code into e1000_phy.c + * igb: add code to retry a phy read in the event of failure on link check + * igb: add additional error handling to the phy code + * igb: add flushes between RAR writes when setting mac address + * igb: Use the instance of net_device_stats from net_device. + * igb: Fix erroneous display of stats by ethtool -S + * igb: add new data structure for handling interrupts and NAPI + * igb: remove rx checksum good counter + * igb: increase minimum rx buffer size to 1K + * igb: move the tx and rx ring specific config into seperate functions + * igb: remove rx_ps_hdr_len + * igb: move SRRCTL register configuration into ring specific config + * igb: change the head and tail offsets into pointers + * igb: add pci device pointer to ring structure + * igb: move rx_buffer_len into the ring structure + * igb: move alloc_failed and csum_err stats into per rx-ring stat + * igb: add a flags value to the ring + * igb: place a pointer to the netdev struct in the ring itself + * igb: move the multiple receive queue configuration into seperate + function + * igb: delay VF reset notification until after interrupts are enabed + * igb: setup vlan tag replication stripping in igb_vmm_control + * igb: re-use ring configuration code in ethtool testing + * igb: make tx ring map and free functionality non-static + * igb: make ethtool use core xmit map and free functionality + * igb: add single vector msi-x testing to interrupt test + * igb: cleanup "todo" code found in igb_ethtool.c + * igb: add support for seperate tx-usecs setting in ethtool + * igb: cleanup some of the code related to hw timestamping + * igb: misc cleanups within igb_ethtool.c + * igb: use packet buffer sizes from RXPBS register + * igb: replace the VF clear_to_send with a flags value + * igb: rework use of VMOLR in regards to PF and VFs + * igb: rework handling of the vfta and vlvf registers in relation to + mng_vlan + * igb: move vf init into a seperate function + * igb: only process global stats in igb_update_stats + * igb: move global_quad_port_a from global into local static define + * igb: make tx hang check multiqueue, check eop descriptor + * igb: cleanup code related to ring resource allocation and free + * igb: change queue ordering for 82576 based adapters + * igb: cleanup interrupt enablement in regards to msix_other + * igb: Remove invalid stats counters + * igb: cleanup igb.h header whitespace and some structure formatting + * igb: cleanup igb xmit frame path + * igb: cleanup clean_rx_irq_adv and alloc_rx_buffers_adv + * igb: replace unecessary &adapter->hw with just hw where applicable + * igb: add pci_dev in few spots to clean up use of dev_err/info/warn + * igb: limit minimum mtu to 68 to keep ip bound to interface + * igb: open up SCTP checksum offloads to all MACs 82576 and newer + * igb: cleanup whitespace issues in igb_main.c + * igb: Fix warnings in igb_set_ringparam() + * igb: change type for ring sizes to u16 in igb_set_ring_param + * igb: move timesync init into a seperate function + * igb: when number of CPUs > 4 combine tx/rx queues to allow more queues + * igb: Rework how netdev->stats is handled + * igb: removed unused tx/rx total bytes/packets from adapter struct + * igb: check for packets on all tx rings when link is down + * igb: only recycle page if it is on our numa node + * igb: add support for the 82580 phy + * igb: add support for 82580 MAC + * igb: Add full support for 82580 devices + * igb: remove use of skb_dma_map from driver + * igb: fix handling of mailbox collisions between PF/VF + * igb: do not force pcs link when in KX mode + * igb: do not force retry count to 1 on 82580 phy + * igb: correctly offset 82575 flow control watermarks by 16 bytes + * igb: check both function bits in status register in wol exception + * igb: make certain to reassign legacy interrupt vectors after reset + * igb/igbvf: cleanup exception handling in tx_map_adv + * fix LOOKUP_FOLLOW on automount "symlinks" + - LP: #540231 + * ARM: 5944/1: scsi: fix timer setup in fas216.c + - LP: #540231 + * V4L/DVB: dvb: l64781.ko broken with gcc 4.5 + - LP: #540231 + * bfin: fix max timeout calculation + - LP: #540231 + * V4L/DVB: Video : pwc : Fix regression in pwc_set_shutter_speed caused + by bad constant => sizeof conversion. + - LP: #540231 + * V4L/DVB: bttv: Move I2C IR initialization + - LP: #540231 + * V4L/DVB: cxusb: Select all required frontend and tuner modules + - LP: #540231 + * memcg: fix oom killing a child process in an other cgroup + - LP: #540231 + * fs/exec.c: fix initial stack reservation + - LP: #540231 + * iwlwifi: error checking for number of tfds in queue + - LP: #540231 + * iwlwifi: set HT flags after channel in rxon + - LP: #540231 + * iwlwifi: sanity check before counting number of tfds can be free + - LP: #540231 + * netlabel: fix export of SELinux categories > 127 + - LP: #540231 + * ahci: disable FPDMA auto-activate optimization on NVIDIA AHCI + - LP: #540231 + * PCI hotplug: ibmphp: read the length of ebda and map entire ebda region + - LP: #540231 + * PCI hotplug: check ioremap() return value in ibmphp_ebda.c + - LP: #540231 + * ACPI: remove Asus P2B-DS from acpi=ht blacklist + - LP: #540231 + * ACPI: fix "acpi=ht" boot option + - LP: #540231 + * thinkpad-acpi: wrong thermal attribute_group removed in thermal_exit() + - LP: #540231 + * ACPI: Be in TS_POLLING state during mwait based C-state entry + - LP: #540231 + * mpt2sas: Delete volume before HBA detach. + - LP: #540231 + * slab: initialize unused alien cache entry as NULL at + alloc_alien_cache(). + - LP: #540231 + * mac80211: quit addba_resp_timer if Tx BA session is torn down + - LP: #540231 + * V4L/DVB (13991): gspca_mr973010a: Fix cif type 1 cameras not streaming + on UHCI controllers + - LP: #540231 + * vfs: take f_lock on modifying f_mode after open time + - LP: #540231 + * readahead: introduce FMODE_RANDOM for POSIX_FADV_RANDOM + - LP: #540231 + * HID: remove TENX iBuddy from blacklist + - LP: #540231 + * HID: add multi-input quirk for NextWindow Touchscreen. + - LP: #540231 + * HID: usbhid: introduce timeout for stuck ctrl/out URBs + - LP: #540231 + * airo: fix setting zero length WEP key + - LP: #540231 + * idr: fix a critical misallocation bug, take#2 + - LP: #540231 + * Switch proc/self to nd_set_link() + - LP: #540231 + * sparc: Align clone and signal stacks to 16 bytes. + - LP: #540231 + * sparc32: Fix page_to_phys(). + - LP: #540231 + * sparc32: Fix struct stat uid/gid types. + - LP: #540231 + * sparc: leds_resource.end assigned to itself in clock_board_probe() + - LP: #540231 + * sparc64: Fix sun4u execute bit check in TSB I-TLB load. + - LP: #540231 + * net: Fix sysctl restarts... + - LP: #540231 + * net-sysfs: Use rtnl_trylock in wireless sysfs methods. + - LP: #540231 + * net: bug fix for vlan + gro issue + - LP: #540231 + * inet: Remove bogus IGMPv3 report handling + - LP: #540231 + * ipv6: conntrack: Add member of user to nf_ct_frag6_queue structure + - LP: #540231 + * drivers/net: ks8851_mll ethernet network driver + - LP: #540231 + * sky2: fix transmit DMA map leakage + - LP: #540231 + * SCSI: qla2xxx: Obtain proper host structure during response-queue + processing. + - LP: #540231 + * rtc-core: fix memory leak + - LP: #540231 + * offb: Add support for framebuffer handoff to offb. + - LP: #540231 + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #540231 + * rndis_wlan: handle NL80211_AUTHTYPE_AUTOMATIC + - LP: #540231 + * rndis_wlan: fix buffer overflow in rndis_query_oid + - LP: #540231 + * rndis_wlan: disable stall workaround + - LP: #540231 + * net/via-rhine: Fix scheduling while atomic bugs + - LP: #540231 + * clocksource: Fix up a registration/IRQ race in the sh drivers. + - LP: #540231 + * SCSI: qla1280: Drop host_lock while requesting firmware + - LP: #540231 + * Staging: hv: add a pci device table + - LP: #540231 + * Staging: hv: match on DMI values to know if we should run. + - LP: #540231 + * Staging: mimio: remove the mimio driver + - LP: #540231 + * dvb-core: Fix DoS bug in ULE decapsulation code that can be triggered + by an invalid Payload Pointer + - LP: #540231 + * V4L/DVB (13148): uvcvideo: Handle V4L2_CTRL_TYPE_BUTTON control type in + VIDIOC_QUERYCTRL + - LP: #540231 + * PM / Hibernate: Fix preallocating of memory + - LP: #540231 + * macintosh/therm_adt746x: Fix sysfs attributes lifetime + - LP: #540231 + * macintosh/hwmon/ams: Fix device removal sequence + - LP: #540231 + * oprofile/x86: fix perfctr nmi reservation for mulitplexing + - LP: #540231 + * oprofile: remove tracing build dependency + - LP: #540231 + * oprofile/x86: remove node check in AMD IBS initialization + - LP: #540231 + * oprofile/x86: use kzalloc() instead of kmalloc() + - LP: #540231 + * oprofile/x86: fix msr access to reserved counters + - LP: #540231 + * ALSA: hda: Use 3stack quirk for Toshiba Satellite L40-10Q + - LP: #524948, #540231 + * ALSA: via82xx: add quirk for D1289 motherboard + - LP: #540231 + * ALSA: pcm core - fix fifo_size channels interval check + - LP: #540231 + * ALSA: USB MIDI support for Access Music VirusTI + - LP: #540231 + * ALSA: hda: Use LPIB for Dell Latitude 131L + - LP: #530346, #540231 + * ALSA: hda: Use LPIB for a Biostar Microtech board + - LP: #523953, #540231 + * ALSA: hda - Add a position_fix quirk for MSI Wind U115 + - LP: #540231 + * ALSA: hda - Add position_fix quirk for HP dv3 + - LP: #540231 + * ALSA: hda-intel: Add position_fix quirk for ASUS M2V-MX SE. + - LP: #540231 + * ASoC: fix ak4104 register array access + - LP: #540231 + * driver-core: fix race condition in get_device_parent() + - LP: #540231 + * Driver-Core: devtmpfs - reset inode permissions before unlinking + - LP: #540231 + * tty: Fix the ldisc hangup race + - LP: #540231 + * serial: imx: fix NULL dereference Oops when pdata == NULL + - LP: #540231 + * USB: serial: sierra driver indat_callback fix + - LP: #511157, #540231 + * USB: SIS USB2VGA DRIVER: support KAIREN's USB VGA adaptor + USB20SVGA-MB-PLUS + - LP: #540231 + * USB: fix I2C API usage in ohci-pnx4008. + - LP: #540231 + * p54usb: Add the USB ID for Belkin (Accton) FD7050E ver 1010ec + - LP: #540231 + * p54pci: handle dma mapping errors + - LP: #540231 + * gpiolib: Actually set output state in wm831x_gpio_direction_output() + - LP: #540231 + * hwmon: (tmp421) Fix temperature conversions + - LP: #540231 + * hwmon: (tmp421) Restore missing inputs + - LP: #540231 + * pata_hpt3x2n: always stretch UltraDMA timing + - LP: #540231 + * scm: Only support SCM_RIGHTS on unix domain sockets. + - LP: #540231 + * ath9k: fix beacon timer restart after a card reset + - LP: #540231 + * ath9k: fix rate control fallback rate selection + - LP: #540231 + * ath9k: disable RIFS search for AR91xx based chips + - LP: #540231 + * ath5k: use correct packet type when transmitting + - LP: #540231 + * b43/b43legacy: Wake queues in wireless_core_start + - LP: #540231 + * netfilter: xt_recent: fix buffer overflow + - LP: #540231 + * netfilter: xt_recent: fix false match + - LP: #540231 + * sunxvr500: Additional PCI id for sunxvr500 driver + - LP: #540231 + * thinkpad-acpi: fix poll thread auto-start + - LP: #540231 + * thinkpad-acpi: R52 brightness_mode has been confirmed + - LP: #540231 + * thinkpad-acpi: document HKEY event 3006 + - LP: #540231 + * thinkpad-acpi: make driver events work in NVRAM poll mode + - LP: #540231 + * thinkpad-acpi: fix bluetooth/wwan resume + - LP: #540231 + * ocfs2: Only bug out in direct io write for reflinked extent. + - LP: #540231 + * x86, ia32_aout: do not kill argument mapping + - LP: #540231 + * x86: Add iMac9,1 to pci_reboot_dmi_table + - LP: #540231 + * x86, xen: Disable highmem PTE allocation even when CONFIG_HIGHPTE=y + - LP: #540231 + * x86: Avoid race condition in pci_enable_msix() + - LP: #540231 + * x86: Fix SCI on IOAPIC != 0 + - LP: #540231 + * USB: xhci: Fix finding extended capabilities registers + - LP: #540231 + * USB: fix the idProduct value for USB-3.0 root hubs + - LP: #540231 + * USB: fix crash in uhci_scan_schedule + - LP: #540231 + * USB: remove debugging message for uevent constructions + - LP: #540231 + * USB: Move hcd free_dev call into usb_disconnect to fix oops + - LP: #540231 + * USB: ftdi_sio: isolate all device IDs to new ftdi_sio_ids.h header + - LP: #540231 + * USB: ftdi_sio: sort PID/VID entries in new ftdi_sio_ids.h header + - LP: #540231 + * USB: ftdi_sio: new device id for papouch AD4USB + - LP: #540231 + * USB: ftdi_sio: add device IDs (several ELV, one Mindstorms NXT) + - LP: #540231 + * USB: add new ftdi_sio device ids + - LP: #540231 + * USB: serial: ftdi: add CONTEC vendor and product id + - LP: #540231 + * USB: cp210x: Add 81E8 (Zephyr Bioharness) + - LP: #540231 + * USB: unusual_devs: Add support for multiple Option 3G sticks + - LP: #540231 + * sunrpc: remove unnecessary svc_xprt_put + - LP: #540231 + * SUNRPC: Handle EINVAL error returns from the TCP connect operation + - LP: #540231 + * s3cmci: s3cmci_card_present: Use no_detect to decide whether there is a + card detect pin + - LP: #540231 + * rtc-coh901331: fix braces in resume code + - LP: #540231 + * NFS: Fix an allocation-under-spinlock bug + - LP: #540231 + * dm: free dm_io before bio_endio not after + - LP: #540231 + * KVM: x86 emulator: Add group8 instruction decoding + - LP: #540231 + * KVM: x86 emulator: Forbid modifying CS segment register by mov + instruction + - LP: #540231 + * KVM: x86 emulator: Add group9 instruction decoding + - LP: #540231 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - LP: #540231 + * sched: Fix sched_mv_power_savings for !SMT + - LP: #540231 + * sched: Fix SMT scheduler regression in find_busiest_queue() + - LP: #540231 + * sched: Don't use possibly stale sched_class + - LP: #540231 + * x86, mm: Allow highmem user page tables to be disabled at boot time + - LP: #540231 + * Linux 2.6.32.10 + - LP: #540231 + * drm/i915: give up on 8xx lid status + - LP: #540231 + * drm/i915: Use a dmi quirk to skip a broken SDVO TV output. + - LP: #540231 + * drm/ttm: handle OOM in ttm_tt_swapout + - LP: #540231 + * drm/radeon/kms/atom: fix shr/shl ops + - LP: #540231 + * Linux 2.6.32.10+drm33.1 + - LP: #540231 + + -- Andy Whitcroft Fri, 19 Mar 2010 19:17:09 +0000 + +linux (2.6.32-16.25) lucid; urgency=low + + [ Andy Whitcroft ] + + * linux-tools -- move to Suggests: with explicit seeding + - LP: #534635 + + [ Tim Gardner ] + + * [Config] CONFIG_HID=m + + [ Upstream Kernel Changes ] + + * (pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue() + * KVM: introduce kvm_vcpu_on_spin + * KVM: VMX: Add support for Pause-Loop Exiting + + -- Andy Whitcroft Tue, 09 Mar 2010 14:13:51 +0000 + +linux (2.6.32-16.24) lucid; urgency=low + + [ Andy Whitcroft ] + + * armel -- perf userspace does not support arm + * ia64 -- libelf-dev/binutils-dev to not provide necessary libraries + + -- Andy Whitcroft Sat, 06 Mar 2010 11:42:12 +0000 + +linux (2.6.32-16.23) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: PM report driver and device suspend/resume times -- move config + * update to standards version 3.8.4.0 + * printenv -- expose all of the package selectors + * source package -- cleanup source content control + * doc package -- ensure we do build package content on buildd + * lintian -- correct the address in the debian/copyright + * lintian -- update debhelper package version dependancy + * lintian -- fix ghostscript dependancy + * lintian -- add required misc:Depends + * lintian -- move our debhelper compat level to debian/compat + * perf -- build the kernel carried tools + * perf -- add linux-tools carrying the version switches and manuals + * SAUCE: fix up Kconfig for staging drivers + * [Config] enable NOUVEAU etc following drm backport + * update DRM to mainline v2.6.33 + * [Config] Remove AppArmor config options that no longer exist (ports) + * [Config] updateportsconfigs following drm update + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-03-04 + * SAUCE: AppArmor: Reintroduce AppArmor 2.4 compatibility + * SAUCE: AppArmor: replace strim with strstrip for 2.6.32 kernels + * [Config] Remove AppArmor config options that no longer exist + + [ Manoj Iyer ] + + * ubuntu: rtl8192se -- version 2010-0115,0014 + - LP: #530275 + * [Config] added CONFIG_RTL8192SE module. + - LP: #530275 + + [ Tim Gardner ] + + * [Config] Added vmw_pvscsi to d-i/scsi-modules + - LP: #531017 + * [Upstream] netfilter: xt_recent: Add an entry reaper + + [ Upstream Kernel Changes ] + + * Revert "KVM: x86 emulator: Check CPL level during privilege instruction + emulation" + * Revert "KVM: x86 emulator: Fix popf emulation" + * Revert "KVM: x86 emulator: Check IOPL level during io instruction + emulation" + * Revert "KVM: x86 emulator: Add Virtual-8086 mode of emulation" + * Revert "KVM: fix memory access during x86 emulation." + * Add vlan (8021.Q) module package for d-i. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + * [Upstream] docbook: need xmldoclinks for all doc types + * x86: set_personality_ia32() misses force_personality32 + * lib: Introduce generic list_sort function + * drm/nv50: Implement ctxprog/state generation. + * drm/nv50: Remove redundant/incorrect ctxvals initialisation. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + + -- Andy Whitcroft Fri, 05 Mar 2010 15:40:38 +0000 + +linux (2.6.32-15.22) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT" + * Revert "SAUCE: PM report driver and device suspend/resume times." + * [Config] set CONFIG_SR_REPORT_TIME_LIMIT + + [ Manoj Iyer ] + + * SAUCE: PM report driver and device suspend/resume times. + + -- Andy Whitcroft Tue, 02 Mar 2010 01:35:37 +0000 + +linux (2.6.32-15.21) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/i915: Increase fb alignment to 64k" + * Revert "[Config] lenovo-sl-laptop -- enable" + * Revert "ubuntu: lenovo-sl-laptop -- git tip (b19a08f81f)" + * armel -- cramfs module will no longer be built + * d-i -- make all modules optional + * rename the debug packages to match archive standard + - LP: #527837 + * lenovo-sl-laptop is no longer built + + [ Colin Ian King ] + + * Disable 4MB page tables for Atom, work around errata AAE44 + - LP: #523112 + + [ Colin Watson ] + + * ubuntu: dm-raid4-5: Depend on XOR_BLOCKS + * ubuntu: fsam7400: Depend on CHECK_SIGNATURE + + [ Jesse Barnes ] + + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + + [ Loïc Minier ] + + * [Config] armel Update versatile initrd configs + - LP: #524893 + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + + [ Manoj Iyer ] + + * [Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT + + [ Mario Limonciello ] + + * SAUCE: v3 - Add Dell Business Class Netbook LED driver + + [ Rafael J. Wysocki ] + + * SAUCE: PM report driver and device suspend/resume times. + + [ Surbhi Palande ] + + * Revert "[Upstream] e1000e: enhance frame fragment detection" + - CVE-2009-4538 + * Revert "[Upstream] e1000: enhance frame fragment detection" + - CVE-2009-4536 + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_LEDS_DELL_NETBOOKS=m + * SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow + * SAUCE: (pre-stable) netfilter: xt_recent: fix false match + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) eCryptfs: Add getattr function" + * Fix potential crash with sys_move_pages + * futex_lock_pi() key refcnt fix + * futex: Handle user space corruption gracefully + * futex: Handle futex value corruption gracefully + * Fix race in tty_fasync() properly + * hwmon: (w83781d) Request I/O ports individually for probing + * hwmon: (lm78) Request I/O ports individually for probing + * hwmon: (adt7462) Wrong ADT7462_VOLT_COUNT + * ALSA: ctxfi - fix PTP address initialization + * drm/i915: disable hotplug detect before Ironlake CRT detect + * drm/i915: enable self-refresh on 965 + * drm/i915: Disable SR when more than one pipe is enabled + * drm/i915: Fix DDC on some systems by clearing BIOS GMBUS setup. + * drm/i915: Add HP nx9020/SamsungSX20S to ACPI LID quirk list + * drm/i915: Fix the incorrect DMI string for Samsung SX20S laptop + * drm/i915: Add MALATA PC-81005 to ACPI LID quirk list + * usb: r8a66597-hcd: Flush the D-cache for the pipe-in transfer buffers. + * i2c-tiny-usb: Fix on big-endian systems + * drm/i915: handle FBC and self-refresh better + * drm/i915: Increase fb alignment to 64k + * drm/i915: Update write_domains on active list after flush. + * regulator: Fix display of null constraints for regulators + * ALSA: hda-intel: Avoid divide by zero crash + * CPUFREQ: Fix use after free of struct powernow_k8_data + * freeze_bdev: don't deactivate successfully frozen MS_RDONLY sb + * cciss: Make cciss_seq_show handle holes in the h->drv[] array + * ioat: fix infinite timeout checking in ioat2_quiesce + * resource: add helpers for fetching rlimits + * fs/exec.c: restrict initial stack space expansion to rlimit + * cifs: fix length calculation for converted unicode readdir names + * NFS: Fix a reference leak in nfs_wb_cancel_page() + * NFS: Try to commit unstable writes in nfs_release_page() + * NFSv4: Don't allow posix locking against servers that don't support it + * NFSv4: Ensure that the NFSv4 locking can recover from stateid errors + * NFS: Fix an Oops when truncating a file + * NFS: Fix a umount race + * NFS: Fix a bug in nfs_fscache_release_page() + * NFS: Fix the mapping of the NFSERR_SERVERFAULT error + * md: fix 'degraded' calculation when starting a reshape. + * V4L/DVB: dvb-core: fix initialization of feeds list in demux filter + * Export the symbol of getboottime and mmonotonic_to_bootbased + * kvmclock: count total_sleep_time when updating guest clock + * KVM: PIT: control word is write-only + * tpm_infineon: fix suspend/resume handler for pnp_driver + * amd64_edac: Do not falsely trigger kerneloops + * netfilter: nf_conntrack: fix memory corruption with multiple namespaces + * netfilter: nf_conntrack: per netns nf_conntrack_cachep + * netfilter: nf_conntrack: restrict runtime expect hashsize modifications + * netfilter: xtables: compat out of scope fix + * netfilter: nf_conntrack: fix hash resizing with namespaces + * drm/i915: remove full registers dump debug + * drm/i915: add i915_lp_ring_sync helper + * drm/i915: Don't wait interruptible for possible plane buffer flush + * dasd: remove strings from s390dbf + * crypto: padlock-sha - Add import/export support + * wmi: Free the allocated acpi objects through wmi_get_event_data + * dell-wmi, hp-wmi, msi-wmi: check wmi_get_event_data() return value + * /dev/mem: introduce size_inside_page() + * devmem: check vmalloc address on kmem read/write + * devmem: fix kmem write bug on memory holes + * SCSI: mptfusion : mptscsih_abort return value should be SUCCESS instead + of value 0. + * sh: Couple kernel and user write page perm bits for CONFIG_X2TLB + * ALSA: hda - use WARN_ON_ONCE() for zero-division detection + * dst: call cond_resched() in dst_gc_task() + * ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support + * befs: fix leak + * rtc-fm3130: add missing braces + * Call flush_dcache_page after PIO data transfers in libata-sff.c + * ahci: add Acer G725 to broken suspend list + * pktgen: Fix freezing problem + * x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt + * x86/amd-iommu: Fix deassignment of a device from the pt_domain + * x86: Re-get cfg_new in case reuse/move irq_desc + * Staging: fix rtl8187se compilation errors with mac80211 + * ALSA: usb-audio - Avoid Oops after disconnect + * serial: 8250: add serial transmitter fully empty test + * sysfs: sysfs_sd_setattr set iattrs unconditionally + * class: Free the class private data in class_release + * USB: usbfs: only copy the actual data received + * USB: usbfs: properly clean up the as structure on error paths + * rtl8187: Add new device ID + * ACPI: Add NULL pointer check in acpi_bus_start + * ACPI: fix High cpu temperature with 2.6.32 + * drm/radeon/kms: use udelay for short delays + * NFS: Too many GETATTR and ACCESS calls after direct I/O + * eCryptfs: Add getattr function + * b43: Fix throughput regression + * ath9k: Fix sequence numbers for PAE frames + * mac80211: Fix probe request filtering in IBSS mode + * iwlwifi: Fix to set correct ht configuration + * dm stripe: avoid divide by zero with invalid stripe count + * dm log: userspace fix overhead_size calcuations + * Linux 2.6.32.9 + * sfc: Fix SFE4002 initialisation + * sfc: Fix sign of efx_mcdi_poll_reboot() error in efx_mcdi_poll() + * sfc: SFE4002/SFN4112F: Widen temperature and voltage tolerances + * (pre-stable) HID: handle joysticks with large number of buttons + - LP: #492056 + * (pre-stable) HID: extend mask for BUTTON usage page + - LP: #492056 + * PM: Measure device suspend and resume times + * e1000: enhance frame fragment detection + - CVE-2009-4536 + * e1000e: enhance frame fragment detection + - CVE-2009-4538 + * KVM: fix memory access during x86 emulation. + - CVE-2010-0306 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - CVE-2010-0306 + * KVM: x86 emulator: Fix popf emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - CVE-2010-0306 + * Input: wacom - ensure the device is initialized properly upon resume + * Input: wacom - add defines for packet lengths of various devices + * Input: wacom - add support for new LCD tablets + - LP: #516777 + + -- Andy Whitcroft Mon, 01 Mar 2010 22:56:28 +0000 + +linux (2.6.32-14.20) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebuild following the GCC update to match compiler for out of tree modules + * Revert "[Config] drbd -- enable" + * Revert "ubuntu: drbd -- version 8.3.1" + * SAUCE: khubd -- switch USB product/manufacturer/serial handling to RCU + - LP: #510937 + + -- Andy Whitcroft Fri, 19 Feb 2010 18:47:18 +0000 + +linux (2.6.32-14.19) lucid; urgency=low + + [ Andy Whitcroft ] + + * ensure we build the source package contents when enabled + - LP: #522308 + * [Config] enable CONFIG_X86_MCE_XEON75XX + * SAUCE: AppArmor -- add linux/kref.h for struct kref + * [Config] enable CONFIG_HID_ORTEK + * enable udeb generation for arm versatile flavour + - LP: #522515 + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-02-18 + - LP: #439560, #496110, #507069 + + [ Johnathon Harris ] + + * SAUCE: HID: add support for Ortek WKB-2000 + - LP: #405390 + + [ Upstream Kernel Changes ] + + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #490487 + * x86, mce: Xeon75xx specific interface to get corrected memory error + information + * x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll + * x86, mce: Make xeon75xx memory driver dependent on PCI + * drm/edid: Unify detailed block parsing between base and extension + blocks + - LP: #500999 + * (pre-stable) eCryptfs: Add getattr function + - LP: #390833 + + -- Andy Whitcroft Thu, 18 Feb 2010 19:22:02 +0000 + +linux (2.6.32-13.18) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "enforcer -- make the enforcement configuration common" + * Revert "(pre-stable) Input: ALPS - add interleaved protocol support + (Dell E6x00 series)" + * Revert "(pre-stable) driver-core: fix devtmpfs crash on s390" + * Revert "(pre-stable) Driver-Core: devtmpfs - set root directory mode to + 0755" + * Revert "SAUCE: Adds support for COMPAL JHL90 webcam" + * Revert "SAUCE: fix kernel oops in VirtualBox during paravirt patching" + * Revert "SAUCE: make fc transport removal of target configurable" + * enforcer -- make the enforcement configuration common + * getabis -- add preempt flavour to the list + * [Config] enforce DEVTMPFS options + * [Config] armel -- cleanup to-be builtin modules + * [Config] cleanup ports configs + * [Config] enable CRYPTO_GHASH_CLMUL_NI_INTEL + - LP: #485536 + * add printdebian target to find branch target + * distclean -- do not remove debian.env + * [Config] generic-pae switch to M586TSC + - LP: #519448 + * git-ubuntu-log -- commonise duplicated log handling + * git-ubuntu-log -- tighten up Bug: NNNN matching + * git-ubuntu-log -- sort the bug numbers + + [ Chris Wilson ] + + * (pre-stable) drm/i915: Increase fb alignment to 64k + - LP: #404064 + + [ Eric Miao ] + + * arm -- enable ubuntu/ directory + + [ Huang Ying ] + + * SAUCE: crypto: ghash - Add PCLMULQDQ accelerated implementation + * SAUCE: crypto: ghash-intel - Fix building failure on x86_32 + + [ Loïc Minier ] + + * [Config] cleanup preempt configuration + * [Config] versatile: Fix video output + - LP: #517594 + * [Config] armel DEFAULT_MMAP_MIN_ADDR=32768 + * [Config] Large update to armel/versatile + * [Config] versatile: Add RTC support + * [Config] armel: Enable NEON + * [Config] versatile: Builtin MMC support + * [Config] versatile Builtin SCSI controller + * [Config] armel Disable dma_cache_sync callers + * [Config] armel Disable asm/time.h users + * [Config] armel Disable out of range udelay() + * [Config] armel Disable flush_cache_range() users + * [Config] armel -- Enable ubuntu/ drivers + + [ Steve Conklin ] + + * SAUCE: drm/i915: Add display hotplug event on Ironlake + * SAUCE: drm/i915: Add ACPI OpRegion support for Ironlake + + [ Upstream Kernel Changes ] + + * Revert "[Upstream]: oprofile/x86: add Xeon 7500 series support" + * Revert "Revert "[Bluetooth] Eliminate checks for impossible conditions + in IRQ handler"" + * clockevent: Don't remove broadcast device when cpu is dead + * clockevents: Add missing include to pacify sparse + * ACPI: don't cond_resched if irq is disabled + * be2net: Add support for next generation of BladeEngine device. + * be2net: Add the new PCI IDs to PCI_DEVICE_TABLE. + * mpt2sas: New device SAS2208 support is added + * ar9170: Add support for D-Link DWA 160 A2 + * powerpc/fsl: Add PCI device ids for new QoirQ chips + * davinci: dm646x: Add support for 3.x silicon revision + * Input: ALPS - add interleaved protocol support (Dell E6x00 series) + * Driver-Core: devtmpfs - set root directory mode to 0755 + * driver-core: fix devtmpfs crash on s390 + * vfs: get_sb_single() - do not pass options twice + * ALSA: hda - Add PCI IDs for Nvidia G2xx-series + * V4L/DVB (13569): smsusb: add autodetection support for five additional + Hauppauge USB IDs + * USB: mos7840: add device IDs for B&B electronics devices + * USB: ftdi_sio: add USB device ID's for B&B Electronics line + * V4L/DVB (13168): Add support for Asus Europa Hybrid DVB-T card (SAA7134 + SubVendor ID: 0x1043 Device ID: 0x4847) + * iTCO_wdt: Add support for Intel Ibex Peak + * atl1c:use common_task instead of reset_task and link_chg_task + * atl1e:disable NETIF_F_TSO6 for hardware limit + * V4L/DVB (13680a): DocBook/media: copy images after building HTML + * V4L/DVB (13680b): DocBook/media: create links for included sources + * netfilter: xtables: fix conntrack match v1 ipt-save output + * partitions: read whole sector with EFI GPT header + * partitions: use sector size for EFI GPT + * ALSA: ice1724 - Patch for suspend/resume for ESI Juli@ + * sched: Fix isolcpus boot option + * sched: Fix missing sched tunable recalculation on cpu add/remove + * nohz: Prevent clocksource wrapping during idle + * nfsd: Fix sort_pacl in fs/nfsd/nf4acl.c to actually sort groups + * timers, init: Limit the number of per cpu calibration bootup messages + * PCI: Always set prefetchable base/limit upper32 registers + * iscsi class: modify handling of replacement timeout + * NFS: Revert default r/wsize behavior + * HID: fixup quirk for NCR devices + * scsi_devinfo: update Hitachi entries (v2) + * scsi_dh: create sysfs file, dh_state for all SCSI disk devices + * scsi_transport_fc: remove invalid BUG_ON + * lpfc: fix hang on SGI ia64 platform + * libfc: fix typo in retry check on received PRLI + * libfc: fix ddp in fc_fcp for 0 xid + * fcoe: remove redundant checking of netdev->netdev_ops + * libfc: Fix wrong scsi return status under FC_DATA_UNDRUN + * libfc: lport: fix minor documentation errors + * libfc: don't WARN_ON in lport_timeout for RESET state + * fcoe: initialize return value in fcoe_destroy + * libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data + * libfc: fix memory corruption caused by double frees and bad error + handling + * libfc: fix free of fc_rport_priv with timer pending + * libfc: remote port gets stuck in restart state without really + restarting + * fcoe, libfc: fix an libfc issue with queue ramp down in libfc + * fcoe: Fix checking san mac address + * fcoe: Fix getting san mac for VLAN interface + * qlge: Remove explicit setting of PCI Dev CTL reg. + * qlge: Set PCIE max read request size. + * qlge: Don't fail open when port is not initialized. + * qlge: Add handler for DCBX firmware event. + * qlge: Bonding fix for mode 6. + * PCI: AER: fix aer inject result in kernel oops + * DMI: allow omitting ident strings in DMI tables + * Input: i8042 - remove identification strings from DMI tables + * Input: i8042 - add Gigabyte M1022M to the noloop list + * Input: i8042 - add Dritek quirk for Acer Aspire 5610. + * ALSA: hda - select IbexPeak handler for Calpella + * ALSA: hda - Fix quirk for Maxdata obook4-1 + * ALSA: hda - Add missing Line-Out and PCM switches as slave + * iTCO_wdt.c - cleanup chipset documentation + * iTCO_wdt: add PCI ID for the Intel EP80579 (Tolapai) SoC + * iTCO_wdt: Add Intel Cougar Point and PCH DeviceIDs + * ahci: disable SNotification capability for ich8 + * ata_piix: fix MWDMA handling on PIIX3 + * md: fix small irregularity with start_ro module parameter + * V4L/DVB (13826): uvcvideo: Fix controls blacklisting + * cio: fix double free in case of probe failure + * cio: dont panic in non-fatal conditions + * netiucv: displayed TX bytes value much too high + * ipc ns: fix memory leak (idr) + * ALSA: hda - Fix HP T5735 automute + * hwmon: (fschmd) Fix a memleak on multiple opens of /dev/watchdog + * UBI: fix memory leak in update path + * UBI: initialise update marker + * ASoC: fix a memory-leak in wm8903 + * mac80211: check that ieee80211_set_power_mgmt only handles STA + interfaces. + * cfg80211: fix channel setting for wext + * KVM: S390: fix potential array overrun in intercept handling + * KVM: only allow one gsi per fd + * KVM: Fix race between APIC TMR and IRR + * KVM: MMU: bail out pagewalk on kvm_read_guest error + * KVM: x86: Fix host_mapping_level() + * KVM: x86: Fix probable memory leak of vcpu->arch.mce_banks + * KVM: x86: Fix leak of free lapic date in kvm_arch_vcpu_init() + * KVM: fix lock imbalance in kvm_*_irq_source_id() + * KVM: only clear irq_source_id if irqchip is present + * IPoIB: Clear ipoib_neigh.dgid in ipoib_neigh_alloc() + * x86: Reenable TSC sync check at boot, even with NONSTOP_TSC + * ACPI: enable C2 and Turbo-mode on Nehalem notebooks on A/C + - LP: #516325 + * iwlwifi: Fix throughput stall issue in HT mode for 5000 + * fnctl: f_modown should call write_lock_irqsave/restore + * x86, msr/cpuid: Pass the number of minors when unregistering MSR and + CPUID drivers. + * Linux 2.6.32.7 + * scsi_lib: Fix bug in completion of bidi commands + * mptsas: Fix issue with chain pools allocation on katmai + * mm: add new 'read_cache_page_gfp()' helper function + * drm/i915: Selectively enable self-reclaim + * firewire: ohci: fix crashes with TSB43AB23 on 64bit systems + * S390: fix single stepped svcs with TRACE_IRQFLAGS=y + * x86: Set hotpluggable nodes in nodes_possible_map + * x86: Remove "x86 CPU features in debugfs" (CONFIG_X86_CPU_DEBUG) + * libata: retry FS IOs even if it has failed with AC_ERR_INVALID + * zcrypt: Do not remove coprocessor for error 8/72 + * dasd: fix possible NULL pointer errors + * ACPI: Add a generic API for _OSC -v2 + * ACPI: Add platform-wide _OSC support. + * ACPI: fix OSC regression that caused aer and pciehp not to load + * ACPI: Advertise to BIOS in _OSC: _OST on _PPC changes + * UBI: fix volume creation input checking + * e1000/e1000e: don't use small hardware rx buffers + * drm/i915: Reload hangcheck timer too for Ironlake + * Fix a leak in affs_fill_super() + * Fix failure exits in bfs_fill_super() + * fix oops in fs/9p late mount failure + * fix leak in romfs_fill_super() + * Fix remount races with symlink handling in affs + * fix affs parse_options() + * Fix failure exit in ipathfs + * mm: fix migratetype bug which slowed swapping + * FDPIC: Respect PT_GNU_STACK exec protection markings when creating + NOMMU stack + * Split 'flush_old_exec' into two functions + * sparc: TIF_ABI_PENDING bit removal + * x86: get rid of the insane TIF_ABI_PENDING bit + * Input: winbond-cir - remove dmesg spam + * x86: Disable HPET MSI on ATI SB700/SB800 + * iwlwifi: set default aggregation frame count limit to 31 + * drm/i915: only enable hotplug for detected outputs + * firewire: core: add_descriptor size check + * SECURITY: selinux, fix update_rlimit_cpu parameter + * regulator: Specify REGULATOR_CHANGE_STATUS for WM835x LED constraints + * x86: Add Dell OptiPlex 760 reboot quirk + - LP: #488319 + * x86: Add quirk for Intel DG45FC board to avoid low memory corruption + * x86/amd-iommu: Fix possible integer overflow + * clocksource: fix compilation if no GENERIC_TIME + * tcp: update the netstamp_needed counter when cloning sockets + * sky2: Fix oops in sky2_xmit_frame() after TX timeout + * net: restore ip source validation + * af_packet: Don't use skb after dev_queue_xmit() + * ax25: netrom: rose: Fix timer oopses + * KVM: allow userspace to adjust kvmclock offset + * oprofile/x86: add Xeon 7500 series support + * oprofile/x86: fix crash when profiling more than 28 events + * libata: retry link resume if necessary + * mm: percpu-vmap fix RCU list walking + * mm: purge fragmented percpu vmap blocks + * block: fix bio_add_page for non trivial merge_bvec_fn case + * Fix 'flush_old_exec()/setup_new_exec()' split + * random: drop weird m_time/a_time manipulation + * random: Remove unused inode variable + * block: fix bugs in bio-integrity mempool usage + * usb: r8a66597-hdc disable interrupts fix + * connector: Delete buggy notification code. + * be2net: Bug fix to support newer generation of BE ASIC + * be2net: Fix memset() arg ordering. + * mm: flush dcache before writing into page to avoid alias + * mac80211: fix NULL pointer dereference when ftrace is enabled + * imxfb: correct location of callbacks in suspend and resume + * mx3fb: some debug and initialisation fixes + * starfire: clean up properly if firmware loading fails + * kernel/cred.c: use kmem_cache_free + * uartlite: fix crash when using as console + * pktcdvd: removing device does not remove its sysfs dir + * ath9k: fix eeprom INI values override for 2GHz-only cards + * ath9k: fix beacon slot/buffer leak + * powerpc: TIF_ABI_PENDING bit removal + * NET: fix oops at bootime in sysctl code + * Linux 2.6.32.8 + + -- Andy Whitcroft Wed, 10 Feb 2010 18:56:52 +0000 + +linux (2.6.32-12.17) lucid; urgency=low + + [ Andy Whitcroft ] + + * restore linux-image prefix -- master + * enforce -- we require SELINUX enabled -- master + * enforce -- ensure APPARMOR is our default LSM -- master + * make doc package completely optional -- master + * make source package completely optional -- master + * make linux-libc-dev completly optional -- master + * convert package disable to a deps list -- master + * allow common headers to switch from indep to arch -- master + * convert binary package disable to a deps list -- master + * add configuration option for a full source build tree -- master + * add support for uImage kernels in package control scripts + * getabis -- cleanup and parameterise repository list -- master + * getabis -- move configuration to etc/getabi -- master + * kernelconfig -- move configuration to etc -- master + * rules -- make debian/debian.env master for branch name + * set the current branch name -- master + * pull back common debian.master files into debian -- master + * enforcer -- make the enforcement configuration common + * insert-changes -- correctly link to debian/rules in DROOT + + [ Colin Watson ] + + * future-proof ddeb handling against buildd changes + + [ Eric Miao ] + + * SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} depend on + X86 + + [ Loïc Minier ] + + * Add modules.builtin.bin to prerm rm list + - LP: #516584 + + [ Tim Gardner ] + + * [Config] Implement the amd64 preempt flavour + + [ Upstream Kernel Changes ] + + * syslog: distinguish between /proc/kmsg and syscalls + - LP: #515623 + * sfc: Fix polling for slow MCDI operations + * sfc: Fix conditions for MDIO self-test + * sfc: QT202x: Remove unreliable MMD check at initialisation + * sfc: Add workspace for GMAC bug workaround to MCDI MAC_STATS buffer + * sfc: Use fixed-size buffers for MCDI NVRAM requests + + -- Andy Whitcroft Fri, 05 Feb 2010 07:09:31 +0000 + +linux (2.6.32-12.16) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: acpi battery -- delay first lookup of the battery until + first use" + * SAUCE: acpi battery -- move first lookup asynchronous + - LP: #507211 + * [Config] update configs to cleanup generic configs + * [Config] disable CONFIG_X86_CPU_DEBUG for amd64 + * [Config] enable USER_NS + - LP: #480739, #509808 + + [ Heiko Carstens ] + + * (pre-stable) driver-core: fix devtmpfs crash on s390 + - LP: #512370 + + [ John Johansen ] + + * [Config] for server and virtual flavours make CONFIG_SCSI_SYM53C8XX_2=y + - LP: #494565 + * [Config] VIRTIO=y for server/virtual flavours + - LP: #494565 + + [ Kay Sievers ] + + * (pre-stable) Driver-Core: devtmpfs - set root directory mode to 0755 + - LP: #512370 + + [ Kees Cook ] + + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + + [ Leann Ogasawara ] + + * [Upstream] e1000: enhance frame fragment detection + - CVE-2009-4536 + * [Upstream] e1000e: enhance frame fragment detection + - CVE-2009-4538 + + [ Sebastian Kapfer ] + + * (pre-stable) Input: ALPS - add interleaved protocol support (Dell E6x00 + series) + - LP: #296610 + + [ Upstream Kernel Changes ] + + * inotify: do not reuse watch descriptors + - LP: #485556 + * inotify: only warn once for inotify problems + * revert "drivers/video/s3c-fb.c: fix clock setting for Samsung SoC + Framebuffer" + * memcg: ensure list is empty at rmdir + * drm/i915: remove loop in Ironlake interrupt handler + * block: Fix incorrect reporting of partition alignment + * x86, mce: Thermal monitoring depends on APIC being enabled + * futexes: Remove rw parameter from get_futex_key() + * page allocator: update NR_FREE_PAGES only when necessary + * x86, apic: use physical mode for IBM summit platforms + * edac: i5000_edac critical fix panic out of bounds + * x86: SGI UV: Fix mapping of MMIO registers + * mfd: WM835x GPIO direction register is not locked + * mfd: Correct WM835x ISINK ramp time defines + * ALSA: hda - Fix missing capture mixer for ALC861/660 codecs + * V4L/DVB (13868): gspca - sn9c20x: Fix test of unsigned. + * reiserfs: truncate blocks not used by a write + * HID: add device IDs for new model of Apple Wireless Keyboard + * PCI/cardbus: Add a fixup hook and fix powerpc + * Input: pmouse - move Sentelic probe down the list + * asus-laptop: add Lenovo SL hotkey support + * sched: Fix cpu_clock() in NMIs, on !CONFIG_HAVE_UNSTABLE_SCHED_CLOCK + * sparc64: Fix NMI programming when perf events are active. + * sparc64: Fix Niagara2 perf event handling. + * i2c: Do not use device name after device_unregister + * i2c/pca: Don't use *_interruptible + * serial/8250_pnp: add a new Fujitsu Wacom Tablet PC device + * sched: Fix task priority bug + * vfs: Fix vmtruncate() regression + * Linux 2.6.32.5 + * x86, msr/cpuid: Register enough minors for the MSR and CPUID drivers + * V4L/DVB (13900): gspca - sunplus: Fix bridge exchanges. + * Staging: asus_oled: fix oops in 2.6.32.2 + * Staging: hv: fix smp problems in the hyperv core code + * tty: fix race in tty_fasync + * ecryptfs: use after free + * ecryptfs: initialize private persistent file before dereferencing + pointer + * nozomi: quick fix for the close/close bug + * serial: 8250_pnp: use wildcard for serial Wacom tablets + * usb: serial: fix memory leak in generic driver + * USB: fix bitmask merge error + * USB: Don't use GFP_KERNEL while we cannot reset a storage device + * USB: EHCI: fix handling of unusual interrupt intervals + * USB: EHCI & UHCI: fix race between root-hub suspend and port resume + * USB: add missing delay during remote wakeup + * USB: add speed values for USB 3.0 and wireless controllers + * ACPI: EC: Accelerate query execution + * ACPI: EC: Add wait for irq storm + * SCSI: enclosure: fix oops while iterating enclosure_status array + * drm/i915: Read the response after issuing DDC bus switch command + * drm/i915: try another possible DDC bus for the SDVO device with + multiple outputs + * block: bdev_stack_limits wrapper + * DM: Fix device mapper topology stacking + * x86/PCI/PAT: return EINVAL for pci mmap WC request for !pat_enabled + * USB: fix usbstorage for 2770:915d delivers no FAT + * vmalloc: remove BUG_ON due to racy counting of VM_LAZY_FREE + * perf timechart: Use tid not pid for COMM change + * perf events: Dont report side-band events on each cpu for + per-task-per-cpu events + * perf: Honour event state for aux stream data + * Linux 2.6.32.6 + + -- Andy Whitcroft Wed, 27 Jan 2010 16:40:23 +0000 + +linux (2.6.32-11.15) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/radeon/kms: fix crtc vblank update for r600" + * Revert "(pre-stable) sched: Fix balance vs hotplug race" + * Revert "[Upstream] acerhdf: Limit modalias matching to supported + boards" + * Revert "[Upstream] mmc: prevent dangling block device from accessing + stale queues" + * Revert "SAUCE: Fix nx_enable reporting" + * Revert "SAUCE: [x86] fix report of cs-limit nx-emulation" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: i915 -- disable powersave by default + - LP: #492392 + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Tim Gardner ] + + * [Upstream] b43: Declare all possible firmware files. + - LP: #488636 + * [Config] updateconfigs after adding pvscsi + - LP: #497156 + * [Config] CONFIG_BT=m + + [ Upstream Kernel Changes ] + + * Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu + for pre-Pentium" + * SCSI: ipr: fix EEH recovery + * SCSI: qla2xxx: dpc thread can execute before scsi host has been added + * SCSI: st: fix mdata->page_order handling + * SCSI: fc class: fix fc_transport_init error handling + * sched: Fix task_hot() test order + * x86, cpuid: Add "volatile" to asm in native_cpuid() + * sched: Select_task_rq_fair() must honour SD_LOAD_BALANCE + * clockevents: Prevent clockevent_devices list corruption on cpu hotplug + * pata_hpt3x2n: fix clock turnaround + * pata_cmd64x: fix overclocking of UDMA0-2 modes + * ASoC: wm8974: fix a wrong bit definition + * sound: sgio2audio/pdaudiocf/usb-audio: initialize PCM buffer + * ALSA: hda - Fix missing capsrc_nids for ALC88x + * acerhdf: limit modalias matching to supported + - LP: #435958 + * ACPI: EC: Fix MSI DMI detection + * ACPI: Use the return result of ACPI lid notifier chain correctly + * powerpc: Handle VSX alignment faults correctly in little-endian mode + * ASoC: Do not write to invalid registers on the wm9712. + * drm/radeon: fix build on 64-bit with some compilers. + * USB: emi62: fix crash when trying to load EMI 6|2 firmware + * USB: option: support hi speed for modem Haier CE100 + * USB: Fix a bug on appledisplay.c regarding signedness + * USB: musb: gadget_ep0: avoid SetupEnd interrupt + * Bluetooth: Prevent ill-timed autosuspend in USB driver + * USB: rename usb_configure_device + * USB: fix bugs in usb_(de)authorize_device + * drivers/net/usb: Correct code taking the size of a pointer + * x86: SGI UV: Fix writes to led registers on remote uv hubs + * md: Fix unfortunate interaction with evms + * dma: at_hdmac: correct incompatible type for argument 1 of + 'spin_lock_bh' + * dma-debug: Do not add notifier when dma debugging is disabled. + * dma-debug: Fix bug causing build warning + * cifs: NULL out tcon, pSesInfo, and srvTcp pointers when chasing DFS + referrals + * x86/amd-iommu: Fix initialization failure panic + * ioat3: fix p-disabled q-continuation + * ioat2,3: put channel hardware in known state at init + * KVM: MMU: remove prefault from invlpg handler + * KVM: LAPIC: make sure IRR bitmap is scanned after vm load + * Libertas: fix buffer overflow in lbs_get_essid() + * iwmc3200wifi: fix array out-of-boundary access + * mac80211: fix propagation of failed hardware reconfigurations + * mac80211: fix WMM AP settings application + * mac80211: Fix IBSS merge + * cfg80211: fix race between deauth and assoc response + * ath5k: fix SWI calibration interrupt storm + * ath9k: wake hardware for interface IBSS/AP/Mesh removal + * ath9k: Fix TX queue draining + * ath9k: fix missed error codes in the tx status check + * ath9k: wake hardware during AMPDU TX actions + * ath9k: fix suspend by waking device prior to stop + * ath9k_hw: Fix possible OOB array indexing in gen_timer_index[] on + 64-bit + * ath9k_hw: Fix AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB and its shift value + in 0x4054 + * iwl3945: disable power save + * iwl3945: fix panic in iwl3945 driver + * iwlwifi: fix EEPROM/OTP reading endian annotations and a bug + * iwlwifi: fix more eeprom endian bugs + * iwlwifi: fix 40MHz operation setting on cards that do not allow it + * mac80211: fix race with suspend and dynamic_ps_disable_work + * NOMMU: Optimise away the {dac_,}mmap_min_addr tests + * 'sysctl_max_map_count' should be non-negative + * kernel/sysctl.c: fix the incomplete part of + sysctl_max_map_count-should-be-non-negative.patch + * V4L/DVB (13596): ov511.c typo: lock => unlock + * x86/ptrace: make genregs[32]_get/set more robust + * memcg: avoid oom-killing innocent task in case of use_hierarchy + * e100: Fix broken cbs accounting due to missing memset. + * ipv6: reassembly: use seperate reassembly queues for conntrack and + local delivery + * netfilter: fix crashes in bridge netfilter caused by fragment jumps + * hwmon: (sht15) Off-by-one error in array index + incorrect constants + * b43: avoid PPC fault during resume + * Keys: KEYCTL_SESSION_TO_PARENT needs TIF_NOTIFY_RESUME architecture + support + * sched: Fix balance vs hotplug race + * drm/radeon/kms: fix crtc vblank update for r600 + * drm: disable all the possible outputs/crtcs before entering KMS mode + * S390: dasd: support DIAG access for read-only devices + * xen: fix is_disconnected_device/exists_disconnected_device + * xen: improvement to wait_for_devices() + * xen: wait up to 5 minutes for device connetion + * orinoco: fix GFP_KERNEL in orinoco_set_key with interrupts disabled + * udf: Try harder when looking for VAT inode + * Add unlocked version of inode_add_bytes() function + * quota: decouple fs reserved space from quota reservation + * ext4: Convert to generic reserved quota's space management. + * ext4: fix sleep inside spinlock issue with quota and dealloc (#14739) + * x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus + * cpumask: use modern cpumask style in drivers/edac/amd64_edac.c + * amd64_edac: unify MCGCTL ECC switching + * x86, msr: Add support for non-contiguous cpumasks + * x86, msr: msrs_alloc/free for CONFIG_SMP=n + * amd64_edac: fix driver instance freeing + * amd64_edac: make driver loading more robust + * amd64_edac: fix forcing module load/unload + * sched: Sched_rt_periodic_timer vs cpu hotplug + * ext4: Update documentation to correct the inode_readahead_blks option + name + * lguest: fix bug in setting guest GDT entry + * vmscan: do not evict inactive pages when skipping an active list scan + * ksm: fix mlockfreed to munlocked + * rt2x00: Disable powersaving for rt61pci and rt2800pci. + * generic_permission: MAY_OPEN is not write access + * Linux 2.6.32.3 + * untangle the do_mremap() mess + * fasync: split 'fasync_helper()' into separate add/remove functions + * ASoC: fix params_rate() macro use in several codecs + * modules: Skip empty sections when exporting section notes + * exofs: simple_write_end does not mark_inode_dirty + * nfsd: make sure data is on disk before calling ->fsync + * sunrpc: fix peername failed on closed listener + * SUNRPC: Fix up an error return value in + gss_import_sec_context_kerberos() + * SUNRPC: Fix the return value in gss_import_sec_context() + * sunrpc: on successful gss error pipe write, don't return error + * drm/i915: Update LVDS connector status when receiving ACPI LID event + * drm/i915: fix order of fence release wrt flushing + * drm/i915: Permit pinning whilst the device is 'suspended' + * drm: remove address mask param for drm_pci_alloc() + * drm/i915: Enable/disable the dithering for LVDS based on VBT setting + * drm/i915: Make the BPC in FDI rx/transcoder be consistent with that in + pipeconf on Ironlake + * drm/i915: Select the correct BPC for LVDS on Ironlake + * drm/i915: fix unused var + * rtc_cmos: convert shutdown to new pnp_driver->shutdown + * drivers/cpuidle/governors/menu.c: fix undefined reference to + `__udivdi3' + * cgroups: fix 2.6.32 regression causing BUG_ON() in cgroup_diput() + * lib/rational.c needs module.h + * dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with + DMA_FROM_DEVICE and + * kernel/signal.c: fix kernel information leak with print-fatal-signals=1 + * mmc_block: add dev_t initialization check + * mmc_block: fix probe error cleanup bug + * mmc_block: fix queue cleanup + * ALSA: hda - Fix ALC861-VD capture source mixer + * ALSA: ac97: Add Dell Dimension 2400 to Headphone/Line Jack Sense + blacklist + * ALSA: atiixp: Specify codec for Foxconn RC4107MA-RS2 + - LP: #498863 + * ASoC: Fix WM8350 DSP mode B configuration + * netfilter: ebtables: enforce CAP_NET_ADMIN + * netfilter: nf_ct_ftp: fix out of bounds read in update_nl_seq() + * hwmon: (coretemp) Fix TjMax for Atom N450/D410/D510 CPUs + * hwmon: (adt7462) Fix pin 28 monitoring + * quota: Fix dquot_transfer for filesystems different from ext4 + * xen: fix hang on suspend. + * iwlwifi: fix iwl_queue_used bug when read_ptr == write_ptr + * ath5k: Fix eeprom checksum check for custom sized eeproms + * cfg80211: fix syntax error on user regulatory hints + * iwl: off by one bug + * mac80211: add missing sanity checks for action frames + * drm/i915: remove render reclock support + * libertas: Remove carrier signaling from the scan code + * kernel/sysctl.c: fix stable merge error in NOMMU mmap_min_addr + * mac80211: fix skb buffering issue (and fixes to that) + * fix braindamage in audit_tree.c untag_chunk() + * fix more leaks in audit_tree.c tag_chunk() + * module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y + * ipv6: skb_dst() can be NULL in ipv6_hop_jumbo(). + * agp/intel-agp: Clear entire GTT on startup + * Linux 2.6.32.4 + * ethtool: Add reset operation + * gro: Name the GRO result enumeration type + * gro: Change all receive functions to return GRO result codes + * sfc: 10Xpress: Initialise pause advertising flags + * sfc: 10Xpress: Report support for pause frames + * sfc: Remove redundant header gmii.h + * sfc: Remove redundant hardware initialisation + * sfc: Rename Falcon-specific board code and types + * sfc: Remove boards.h, moving last remaining declaration to falcon.h + * sfc: Remove versioned bitfield macros + * sfc: Move RX data FIFO thresholds out of struct efx_nic_type + * sfc: Update hardware definitions for Siena + * sfc: Rename register I/O header and functions used by both Falcon and + Siena + * sfc: Eliminate indirect lookups of queue size constants + * sfc: Define DMA address mask explicitly in terms of descriptor field + width + * sfc: Move all TX DMA length limiting into tx.c + * sfc: Change order of device removal to reverse of probe order + * sfc: Remove declarations of nonexistent functions + * sfc: Move efx_xmit_done() declaration into correct stanza + * sfc: Move shared members of struct falcon_nic_data into struct efx_nic + * sfc: Maintain interrupt moderation values in ticks, not microseconds + * sfc: Removed kernel-doc for nonexistent member of efx_phy_operations + * sfc: Remove pointless abstraction of memory BAR number + * sfc: Remove incorrect assertion from efx_pci_remove_main() + * sfc: Remove unnecessary tests of efx->membase + * sfc: Move MTD probe after netdev registration and name allocation + * sfc: Remove unused code for non-autoneg speed/duplex switching + * sfc: Rename 'xfp' file and functions to reflect reality + * sfc: Really allow RX checksum offload to be disabled + * sfc: Feed GRO result into RX allocation policy and interrupt moderation + * sfc: Enable heuristic selection between page and skb RX buffers + * sfc: Remove pointless abstraction of memory BAR number (2) + * sfc: Remove redundant gotos from __efx_rx_packet() + * sfc: Remove ridiculously paranoid assertions + * sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro() + * sfc: Record RX queue number on GRO path + * sfc: SFT9001: Reset LED configuration correctly after blinking + * sfc: Use a single blink implementation + * sfc: Rename efx_board::init_leds to init_phy and use for SFN4111T + * sfc: Make board information explicitly Falcon-specific + * sfc: Move definition of struct falcon_nic_data into falcon.h + * sfc: Move struct falcon_board into struct falcon_nic_data + * sfc: Move all I2C stuff into struct falcon_board + * sfc: Gather link state fields in struct efx_nic into new struct + efx_link_state + * sfc: Remove unnecessary casts to struct sk_buff * + * sfc: Remove redundant efx_xmit() function + * sfc: Combine high-level header files + * sfc: Log interrupt and reset type names, not numbers + * sfc: Fix descriptor cache sizes + * sfc: Treat all MAC registers as 128-bit + * sfc: Strengthen EFX_ASSERT_RESET_SERIALISED + * sfc: Comment corrections + * sfc: Remove unused constant + * sfc: Clean up struct falcon_board and struct falcon_board_data + * sfc: Fix bugs in RX queue flushing + * sfc: Remove unused function efx_flush_queues() + * sfc: Only switch Falcon MAC clocks as necessary + * sfc: Hold MAC lock for longer in efx_init_port() + * sfc: Split MAC stats DMA initiation and completion + * sfc: Move Falcon board/PHY/MAC monitoring code to falcon.c + * sfc: Simplify XMAC link polling + * sfc: Change MAC promiscuity and multicast hash at the same time + * sfc: Move inline comment into kernel-doc + * sfc: Do not set net_device::trans_start in self-test + * sfc: Simplify PHY polling + * sfc: QT202x: Reset before reading PHY id + * sfc: Replace MDIO spinlock with mutex + * sfc: Always start Falcon using the XMAC + * sfc: Limit some hardware workarounds to Falcon + * sfc: Remove EFX_WORKAROUND_9141 macro + * sfc: Remove another unused workaround macro + * sfc: Remove some redundant whitespace + * sfc: Decouple NIC revision number from Falcon PCI revision number + * sfc: Move descriptor cache base addresses to struct efx_nic_type + * sfc: Clean up RX event handling + * sfc: Remove redundant writes to INT_ADR_KER + * sfc: Remove duplicate hardware structure definitions + * sfc: Turn pause frame generation on and off at the MAC, not the RX FIFO + * sfc: Move Falcon NIC operations to efx_nic_type + * sfc: Refactor link configuration + * sfc: Generalise link state monitoring + * sfc: Add power-management and wake-on-LAN support + * sfc: Implement ethtool reset operation + * sfc: Add efx_nic_type operation for register self-test + * sfc: Add efx_nic_type operation for NVRAM self-test + * sfc: Add efx_nic_type operation for identity LED control + * sfc: Separate shared NIC code from Falcon-specific and rename + accordingly + * sfc: Fold falcon_probe_nic_variant() into falcon_probe_nic() + * sfc: Extend loopback mode enumeration + * sfc: Remove static PHY data and enumerations + * sfc: Extend MTD driver for use with new NICs + * sfc: Allow for additional checksum offload features + * sfc: Rename falcon.h to nic.h + * sfc: Move shared NIC code from falcon.c to new source file nic.c + * sfc: Add firmware protocol definitions (MCDI) + * sfc: Add support for SFC9000 family (1) + * sfc: Add support for SFC9000 family (2) + * sfc: Implement TSO for TCP/IPv6 + * sfc: Update version, copyright dates, authors + * drivers/net/sfc: Correct code taking the size of a pointer + * sfc: Move PHY software state initialisation from init() into probe() + * sfc: Include XGXS in XMAC link status check except in XGMII loopback + * sfc: Fix DMA mapping cleanup in case of an error in TSO + * sfc: QT2025C: Work around PHY bug + * sfc: QT2025C: Switch into self-configure mode when not in loopback + * sfc: QT2025C: Work around PHY firmware initialisation bug + * sfc: QT2025C: Add error message for suspected bad SFP+ cables + * sfc: Disable TX descriptor prefetch watchdog + * [SCSI] vmw_pvscsi: SCSI driver for VMware's virtual HBA. + - LP: #497156 + + -- Andy Whitcroft Tue, 19 Jan 2010 16:12:47 +0000 + +linux (2.6.32-10.14) lucid; urgency=low + + [ Alex Deucher ] + + * SAUCE: drm/radeon/kms: fix LVDS setup on r4xx + - LP: #493795 + + [ Andy Whitcroft ] + + * Revert "(pre-stable) acpi: Use the ARB_DISABLE for the CPU which model + id is less than 0x0f." + * config-check -- ensure the checks get run at build time + * config-check -- check the processed config during updateconfigs + * config-check -- CONFIG_SECCOMP may not be present + * TUN is now built in ignore + * SAUCE: acpi battery -- delay first lookup of the battery until first + use + * SAUCE: async_populate_rootfs: move rootfs init earlier + * ubuntu: AppArmor -- update to mainline 2010-01-06 + * SAUCE: move RLIMIT_CORE pipe dumper marker to 1 + - LP: #498525 + + [ Dave Airlie ] + + * (pre-stable) drm/radeon/kms: fix crtc vblank update for r600 + + [ Leann Ogasawara ] + + * Add asix to nic-usb-modules file + - LP: #499785 + + [ Peter Zijlstra ] + + * (pre-stable) sched: Fix balance vs hotplug race + + [ Tim Gardner ] + + * [Config] Enable CONFIG_FUNCTION_TRACER + - LP: #497989 + * [Config] Drop lpia from getabis + * [Config] Build in TUN/TAP driver + - LP: #499491 + * [Config] DH_COMPAT=5 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) drm/i915: Avoid NULL dereference with + component_only tv_modes" + * Revert "(pre-stable) drm/i915: Fix sync to vblank when VGA output is + turned off" + * USB: usb-storage: fix bug in fill_inquiry + * USB: option: add pid for ZTE + * firewire: ohci: handle receive packets with a data length of zero + * rcu: Prepare for synchronization fixes: clean up for non-NO_HZ handling + of ->completed counter + * rcu: Fix synchronization for rcu_process_gp_end() uses of ->completed + counter + * rcu: Fix note_new_gpnum() uses of ->gpnum + * rcu: Remove inline from forward-referenced functions + * perf_event: Fix invalid type in ioctl definition + * perf_event: Initialize data.period in perf_swevent_hrtimer() + * perf: Don't free perf_mmap_data until work has been done + * PM / Runtime: Fix lockdep warning in __pm_runtime_set_status() + * sched: Check for an idle shared cache in select_task_rq_fair() + * sched: Fix affinity logic in select_task_rq_fair() + * sched: Rate-limit newidle + * sched: Fix and clean up rate-limit newidle code + * x86/amd-iommu: attach devices to pre-allocated domains early + * x86/amd-iommu: un__init iommu_setup_msi + * x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking + up the PCI tree + * x86: Fix iommu=nodac parameter handling + * x86: GART: pci-gart_64.c: Use correct length in strncmp + * x86: ASUS P4S800 reboot=bios quirk + - LP: #366682 + * x86, apic: Enable lapic nmi watchdog on AMD Family 11h + * ssb: Fix range check in sprom write + * ath5k: allow setting txpower to 0 + * ath5k: enable EEPROM checksum check + * hrtimer: Fix /proc/timer_list regression + * ALSA: hrtimer - Fix lock-up + * ALSA: hda - Terradici HDA controllers does not support 64-bit mode + * KVM: x86 emulator: limit instructions to 15 bytes + * KVM: s390: Fix prefix register checking in arch/s390/kvm/sigp.c + * KVM: s390: Make psw available on all exits, not just a subset + * KVM: fix irq_source_id size verification + * KVM: x86: include pvclock MSRs in msrs_to_save + * x86: Prevent GCC 4.4.x (pentium-mmx et al) function prologue wreckage + * x86: Use -maccumulate-outgoing-args for sane mcount prologues + * x86, mce: don't restart timer if disabled + * x86/mce: Set up timer unconditionally + * x86: SGI UV: Fix BAU initialization + * x86: Fix duplicated UV BAU interrupt vector + * x86: Add new Intel CPU cache size descriptors + * x86: Fix typo in Intel CPU cache size descriptor + * pata_hpt{37x|3x2n}: fix timing register masks (take 2) + * s390: clear high-order bits of registers after sam64 + * V4L/DVB: Fix test in copy_reg_bits() + * bsdacct: fix uid/gid misreporting + * UBI: flush wl before clearing update marker + * jbd2: don't wipe the journal on a failed journal checksum + * USB: xhci: Add correct email and files to MAINTAINERS entry. + * USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again + * USB: option.c: add support for D-Link DWM-162-U5 + * USB: usbtmc: repeat usb_bulk_msg until whole message is transfered + * USB: usb-storage: add BAD_SENSE flag + * USB: Close usb_find_interface race v3 + * pxa/em-x270: fix usb hub power up/reset sequence + * hfs: fix a potential buffer overflow + * SUNRPC: IS_ERR/PTR_ERR confusion + * NFS: Fix nfs_migrate_page() + * md/bitmap: protect against bitmap removal while being updated. + * futex: Take mmap_sem for get_user_pages in fault_in_user_writeable + * devpts_get_tty() should validate inode + * debugfs: fix create mutex racy fops and private data + * Driver core: fix race in dev_driver_string + * Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN + * mac80211: Fix bug in computing crc over dynamic IEs in beacon + * mac80211: Fixed bug in mesh portal paths + * mac80211: Revert 'Use correct sign for mesh active path refresh' + * mac80211: fix scan abort sanity checks + * wireless: correctly report signal value for IEEE80211_HW_SIGNAL_UNSPEC + * rtl8187: Fix wrong rfkill switch mask for some models + * x86: Fix bogus warning in apic_noop.apic_write() + * mm: hugetlb: fix hugepage memory leak in mincore() + * mm: hugetlb: fix hugepage memory leak in walk_page_range() + * powerpc/windfarm: Add detection for second cpu pump + * powerpc/therm_adt746x: Record pwm invert bit at module load time] + * powerpc: Fix usage of 64-bit instruction in 32-bit altivec code + * drm/radeon/kms: Add quirk for HIS X1300 board + * drm/radeon/kms: handle vblanks properly with dpms on + * drm/radeon/kms: fix legacy crtc2 dpms + * drm/radeon/kms: fix vram setup on rs600 + * drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size + * drm/ttm: Fix build failure due to missing struct page + * drm/i915: Set the error code after failing to insert new offset into mm + ht. + * drm/i915: Add the missing clonemask for display port on Ironlake + * xen/xenbus: make DEVICE_ATTR()s static + * xen: re-register runstate area earlier on resume. + * xen: restore runstate_info even if !have_vcpu_info_placement + * xen: correctly restore pfn_to_mfn_list_list after resume + * xen: register timer interrupt with IRQF_TIMER + * xen: register runstate on secondary CPUs + * xen: don't call dpm_resume_noirq() with interrupts disabled. + * xen: register runstate info for boot CPU early + * xen: call clock resume notifier on all CPUs + * xen: improve error handling in do_suspend. + * xen: don't leak IRQs over suspend/resume. + * xen: use iret for return from 64b kernel to 32b usermode + * xen: explicitly create/destroy stop_machine workqueues outside + suspend/resume region. + * Xen balloon: fix totalram_pages counting. + * xen: try harder to balloon up under memory pressure. + * dm exception store: free tmp_store on persistent flag error + * dm snapshot: only take lock for statustype info not table + * dm crypt: move private iv fields to structs + * dm crypt: restructure essiv error path + * dm: avoid _hash_lock deadlock + * dm snapshot: cope with chunk size larger than origin + * dm crypt: separate essiv allocation from initialisation + * dm crypt: make wipe message also wipe essiv key + * slc90e66: fix UDMA handling + * tcp: Stalling connections: Fix timeout calculation routine + * ip_fragment: also adjust skb->truesize for packets not owned by a + socket + * b44 WOL setup: one-bit-off stack corruption kernel panic fix + * sparc64: Don't specify IRQF_SHARED for LDC interrupts. + * sparc64: Fix overly strict range type matching for PCI devices. + * sparc64: Fix stack debugging IRQ stack regression. + * sparc: Set UTS_MACHINE correctly. + * b43legacy: avoid PPC fault during resume + * tracing: Fix event format export + * ath9k: Fix TX hang poll routine + * ath9k: fix processing of TX PS null data frames + * ath9k: Fix maximum tx fifo settings for single stream devices + * ath9k: fix tx status reporting + * mac80211: Fix dynamic power save for scanning. + * drm/i915: Fix sync to vblank when VGA output is turned off + * memcg: fix memory.memsw.usage_in_bytes for root cgroup + * thinkpad-acpi: fix default brightness_mode for R50e/R51 + * thinkpad-acpi: preserve rfkill state across suspend/resume + * ipw2100: fix rebooting hang with driver loaded + * matroxfb: fix problems with display stability + * acerhdf: add new BIOS versions + * asus-laptop: change light sens default values. + * vmalloc: conditionalize build of pcpu_get_vm_areas() + * ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f. + * net: Fix userspace RTM_NEWLINK notifications. + * ext3: Fix data / filesystem corruption when write fails to copy data + * V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added. + * bcm63xx_enet: fix compilation failure after get_stats_count removal + * x86: Under BIOS control, restore AP's APIC_LVTTHMR to the BSP value + * drm/i915: Avoid NULL dereference with component_only tv_modes + * drm/i915: PineView only has LVDS and CRT ports + * drm/i915: Fix LVDS stability issue on Ironlake + * mm: sigbus instead of abusing oom + * ipvs: zero usvc and udest + * jffs2: Fix long-standing bug with symlink garbage collection. + * intel-iommu: Detect DMAR in hyperspace at probe time. + * intel-iommu: Apply BIOS sanity checks for interrupt remapping too. + * intel-iommu: Check for an RMRR which ends before it starts. + * intel-iommu: Fix oops with intel_iommu=igfx_off + * intel-iommu: ignore page table validation in pass through mode + * netfilter: xtables: document minimal required version + * perf_event: Fix incorrect range check on cpu number + * implement early_io{re,un}map for ia64 + * Linux 2.6.32.2 + + -- Andy Whitcroft Thu, 07 Jan 2010 15:28:43 +0000 + +linux (2.6.32-9.13) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_B43_PHY_LP + - LP: #493059 + * include modules.builtin in the binary debs + * config-check -- add a configuration enforcer + * config-check -- add a unit-test suite to the checker + * [Config] Enable CONFIG_SYN_COOKIES for versatile + * [Config] Enable CONFIG_SECURITY_SMACK for ports + * [Config] Enable CONFIG_SECURITY_FILE_CAPABILITIES for ports + * [Config] Disable CONFIG_COMPAT_BRK for ports + * getabis -- add armel versatile to the list + + [ Brad Figg ] + + * SAUCE: Increase the default prealloc buffer for HDA audio devices + (non-modem) + + [ Manoj Iyer ] + + * ubuntu: onmibook -- Added missing BOM file + + [ Tim Gardner ] + + * ubuntu: fsam7400 -- Cleanup Makefile + + [ Upstream Kernel Changes ] + + * Revert "ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT" + * signal: Fix alternate signal stack check + * SCSI: scsi_lib_dma: fix bug with dma maps on nested scsi objects + * SCSI: osd_protocol.h: Add missing #include + * SCSI: megaraid_sas: fix 64 bit sense pointer truncation + * ext4: fix potential buffer head leak when add_dirent_to_buf() returns + ENOSPC + * ext4: avoid divide by zero when trying to mount a corrupted file system + * ext4: fix the returned block count if EXT4_IOC_MOVE_EXT fails + * ext4: fix lock order problem in ext4_move_extents() + * ext4: fix possible recursive locking warning in EXT4_IOC_MOVE_EXT + * ext4: plug a buffer_head leak in an error path of ext4_iget() + * ext4: make sure directory and symlink blocks are revoked + * ext4: fix i_flags access in ext4_da_writepages_trans_blocks() + * ext4: journal all modifications in ext4_xattr_set_handle + * ext4: don't update the superblock in ext4_statfs() + * ext4: fix uninit block bitmap initialization when s_meta_first_bg is + non-zero + * ext4: fix block validity checks so they work correctly with meta_bg + * ext4: avoid issuing unnecessary barriers + * ext4: fix error handling in ext4_ind_get_blocks() + * ext4: make trim/discard optional (and off by default) + * ext4: make "norecovery" an alias for "noload" + * ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT + * ext4: initialize moved_len before calling ext4_move_extents() + * ext4: move_extent_per_page() cleanup + * jbd2: Add ENOMEM checking in and for + jbd2_journal_write_metadata_buffer() + * ext4: Return the PTR_ERR of the correct pointer in + setup_new_group_blocks() + * ext4: Avoid data / filesystem corruption when write fails to copy data + * ext4: wait for log to commit when umounting + * ext4: remove blocks from inode prealloc list on failure + * ext4: ext4_get_reserved_space() must return bytes instead of blocks + * ext4: quota macros cleanup + * ext4: fix incorrect block reservation on quota transfer. + * ext4: Wait for proper transaction commit on fsync + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + * ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem) + * Linux 2.6.32.1 + * kbuild: generate modules.builtin + * (pre-stable) drm/i915: Fix sync to vblank when VGA output is turned off + - LP: #494461 + * (pre-stable) drm/i915: Avoid NULL dereference with component_only + tv_modes + - LP: #494045 + + [ Zhao Yakui ] + + * (pre-stable) acpi: Use the ARB_DISABLE for the CPU which model id is + less than 0x0f. + - LP: #481765 + + -- Andy Whitcroft Thu, 17 Dec 2009 15:41:21 +0000 + +linux (2.6.32-8.12) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: AppArmor -- add linux/err.h for ERR_PTR + + -- Andy Whitcroft Sat, 12 Dec 2009 10:56:16 +0000 + +linux (2.6.32-8.11) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches + up" + * Revert "SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition." + * Revert "SAUCE: AppArmor: Fix refcounting bug causing leak of creds" + * Revert "SAUCE: AppArmor: Fix cap audit_caching preemption disabling" + * Revert "SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds" + * Revert "SAUCE: AppArmor: Fix oops after profile removal" + * Revert "SAUCE: AppArmor: AppArmor disallows truncate of deleted files." + * Revert "SAUCE: AppArmor: AppArmor fails to audit change_hat correctly" + * Revert "SAUCE: AppArmor: Policy load and replacement can fail to alloc + mem" + * Revert "SAUCE: AppArmor: AppArmor wrongly reports allow perms as + denied" + * Revert "SAUCE: AppArmor: Fix mediation of "deleted" paths" + * Revert "SAUCE: AppArmor: Fix off by 2 error in getprocattr mem + allocation" + * Revert "SAUCE: AppArmor: Set error code after structure + initialization." + * Revert "AppArmor -- fix pstrace_may_access rename" + * Revert "ubuntu: AppArmor security module" + * Revert "SAUCE: Add config option to set a default LSM" + * Revert "ubuntu: fsam7400 -- sw kill switch driver" + * Revert "[Config] fsam7400 -- enable" + * Revert "[Config] AUFS -- enable" + * Revert "ubuntu: AUFS -- aufs2-30 20090727" + * Revert "ubuntu: AUFS -- export various core functions -- fixes" + * Revert "ubuntu: AUFS -- export various core functions" + * Revert "[Config] ubuntu/iscsitarget -- disable" + * Revert "[Config] iscsitarget -- enable" + * Revert "ubuntu: iscsitarget -- SVN revision r214" + * update Vcs-Git to point to the correct repository + - LP: #493589 + * update build environment overrides to lucid + - LP: #493589 + * [Config] enable CONFIG_DEVTMPFS + * [Config] update all configs following AppArmor 2009-12-08 update + * SAUCE: isapnp_init: make isa PNP scans occur async + * [Config] fsam7400 -- enable + * [Config] omnibook -- enable + * [Config] cleanup CONFIG_AUDIT + * ubuntu: AUFS -- export various core functions (aufs2-base.patch) + * ubuntu: AUFS -- export various core functions (aufs2-standalone.patch) + * ubuntu: AUFS -- aufs2 20091209 + * [Config] AUFS -- enable + * [Config] iscsitarget -- enable + + [ Arjan van de Ven ] + + * SAUCE: KMS: cache the EDID information of the LVDS + + [ Colin Watson ] + + * bnx2: update d-i firmware filenames + - LP: #494052 + * add cdc_ether to nic-usb-modules udeb + - LP: #495060 + + [ John Johansen ] + + * ubuntu: AppArmor -- mainline 2009-10-08 + + [ Manoj Iyer ] + + * ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M 7400 + * ubuntu: omnibook -- support Toshiba (HP) netbooks + * ubuntu: iscsitarget --- version 1.4.19 + - LP: #494693 + + [ Surbhi Palande ] + + * SAUCE: Make populate_rootfs asynchronous + + [ Tim Gardner ] + + * Parallelize flavour builds and packaging + * [Config] Enable CONFIG_KSM + + [ Upstream Kernel Changes ] + + * Config option to set a default LSM + * LSM: Add security_path_chroot(). + * LSM: Add security_path_chroot(). + * LSM: Move security_path_chmod()/security_path_chown() to after + mutex_lock(). + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + + -- Andy Whitcroft Fri, 11 Dec 2009 17:45:19 +0000 + +linux (2.6.32-7.10) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable CONFIG_THUMB2_KERNEL to fix arm FTBFS + + -- Andy Whitcroft Sun, 06 Dec 2009 12:56:48 +0000 + +linux (2.6.32-7.9) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: set /proc/acpi/video/*/DOS to 4 by default + - LP: #458982 + * SAUCE: ensure vga16fb loads if no other driver claims the VGA device + * [Config] update configs following versatile switch to V7 + * rebased to v2.6.32 + * [Config] update configs following rebase to v2.6.32 + * [Config] update ports configs following rebase to v2.6.32 + * SAUCE: default ATI Radeon KMS to off until userspace catches up + + [ Arjan van de Ven ] + + * SAUCE: vfs: Add a trace point in the mark_inode_dirty function + + [ Leann Ogasawara ] + + * [SCSI] megaraid_sas: remove sysfs poll_mode_io world writeable + permissions + - CVE-2009-3939 + + [ Loic Minier ] + + * SAUCE: select a v7 CPU for versatile + + [ Takashi Iwai ] + + * SAUCE: ALSA: hda - Add power on/off counter + + [ Upstream changes ] + + * rebased to v2.6.32 + + -- Andy Whitcroft Fri, 04 Dec 2009 10:44:50 +0000 + +linux (2.6.32-6.8) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable SSB devices for armel + + -- Andy Whitcroft Sat, 28 Nov 2009 12:16:40 +0000 + +linux (2.6.32-6.7) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches up" + * Revert "SAUCE: Dell XPS710 reboot quirk" + * Revert "SAUCE: Link acpi-cpufreq.o first" + * Revert "SAUCE: LPIA Logical reset of USB port on resume" + * Revert "SAUCE: LPIA Reboot fix for Intel Crownbeach development boards" + * Revert "SAUCE: Enable HDMI audio codec on Studio XPS 1340" + * Revert "SAUCE: Dell laptop digital mic does not work, PCI 1028:0271" + * Revert "Add Dell Dimension 9200 reboot quirk" + * Revert "SAUCE: Correctly blacklist Thinkpad r40e in ACPI" + * Revert "SAUCE: tulip: Define ULI PCI ID's" + * Revert "SAUCE: Lower warning level of some PCI messages" + * Revert "mac80211: fix two issues in debugfs" + Drop a number of known redundant commits as identified in the Ubuntu + delta review blueprint. + + * reenable armel versatile flavour + * [Config] disable CONFIG_USB_DEVICEFS + + [ Tim Gardner ] + + * [Config] udeb: Add squashfs to fs-core-modules + - LP: #352615 + * [Config] Create a real squashfs udeb + - LP: #352615 + + + -- Andy Whitcroft Fri, 27 Nov 2009 17:31:16 +0000 + +linux (2.6.32-5.6) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc8 + * update configs following rebase to v2.6.32-rc8 + * update ports configs since rebase to v2.6.32-rc8 + * [Config] enable cgroup options + - LP: #480739 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc8 + + -- Andy Whitcroft Mon, 23 Nov 2009 11:16:14 +0000 + +linux (2.6.32-4.5) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * rebase to v2.6.32-rc7 + * resync with Karmic proposed + + [ John Johansen ] + + * SAUCE: AppArmor: Fix oops after profile removal + - LP: #475619 + * SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds + - LP: #437258 + * SAUCE: AppArmor: Fix cap audit_caching preemption disabling + - LP: #479102 + * SAUCE: AppArmor: Fix refcounting bug causing leak of creds + - LP: #479115 + * SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition. + - LP: #480112 + + [ Ubuntu Changes ] + + * resync with Karmic proposed (ddbc670a86a3dee18541a3734149f250ff307adf) + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc7 + + -- Andy Whitcroft Fri, 13 Nov 2009 11:35:13 +0000 + +linux (2.6.32-3.4) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * [Upstream] add local prefix to oss local change_bits + + [ Upstream Kernel Changes ] + + * mtd/maps: gpio-addr-flash: pull in linux/ headers rather than asm/ + * mtd/maps: gpio-addr-flash: depend on GPIO arch support + + -- Andy Whitcroft Wed, 11 Nov 2009 14:47:04 +0000 + +linux (2.6.32-3.3) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc6 + * [Config] update configs following rebase to v2.6.32-rc6 + * [Config] update ports configs following rebase to v2.6.32-rc6 + * resync with Karmic Ubuntu-2.6.31-15.49 + * [Config] add module ignores for broken drivers + + [ John Johansen ] + + * SAUCE: AppArmor: AppArmor wrongly reports allow perms as denied + - LP: #453335 + * SAUCE: AppArmor: Policy load and replacement can fail to alloc mem + - LP: #458299 + * SAUCE: AppArmor: AppArmor fails to audit change_hat correctly + - LP: #462824 + * SAUCE: AppArmor: AppArmor disallows truncate of deleted files. + - LP: #451375 + + [ Kees Cook ] + + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Scott James Remnant ] + + * Revert "SAUCE: trace: add trace_event for the open() syscall" + * SAUCE: trace: add trace events for open(), exec() and uselib() + - LP: #462111 + + [ Stefan Bader ] + + * SAUCE: Fix sub-flavour script to not stop on missing directories + - LP: #453073 + + [ Ubuntu Changes ] + + * resync with Karmic Ubuntu-2.6.31-15.49 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc6 + - LP: #464552 + + -- Andy Whitcroft Tue, 10 Nov 2009 15:00:57 +0000 + +linux (2.6.32-2.2) lucid; urgency=low + + [ Andy Whitcroft ] + + * install the full changelog with the binary package + * changelog -- explicitly note rebases and clean history + * reinstate armel.mk with no flavours + - LP: #449637 + * [Upstream] block: silently error unsupported empty barriers too + - LP: #420423 + * [Config] udate configs following karmic resync + * [Config] update ports configs following karmic resync + * [Upstream] lirc -- follow removal of .id element + + [ Colin Watson ] + + * Use section 'admin' rather than 'base' + * Add more e100 firmware to nic-modules + - LP: #451872 + * Add qla1280 firmware to scsi-modules + - LP: #381037 + + [ John Johansen ] + + * SAUCE: AppArmor: Set error code after structure initialization. + - LP: #427948 + * SAUCE: AppArmor: Fix off by 2 error in getprocattr mem allocation + - LP: #446595 + * SAUCE: AppArmor: Fix mediation of "deleted" paths + + [ Kees Cook ] + + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + + [ Leann Ogasawara ] + + * SAUCE: (drop after 2.6.31) input: Add support for filtering input + events + - LP: #430809 + * SAUCE: (drop after 2.6.31) dell-laptop: Trigger rfkill updates on wifi + toggle switch press + - LP: #430809 + + [ Luke Yelavich ] + + * SAUCE: Add sr_mod to the scsi-modules udeb for powerpc + * [Config] Add sd_mod to scsi-modules udeb for powerpc + + [ Mario Limonciello ] + + * SAUCE: Update to LIRC 0.8.6 + - LP: #432678 + * SAUCE: dell-laptop: Store the HW switch status internally rather than + requerying every time + - LP: #430809 + * SAUCE: dell-laptop: Blacklist machines not supporting dell-laptop + - LP: #430809 + + [ Stefan Bader ] + + * [Upstream] acerhdf: Limit modalias matching to supported boards + - LP: #435958 + + [ Tim Gardner ] + + * [Upstream] i915: Fix i2c init message + - LP: #409361 + * [Config] Add sym53c8xx.ko to virtual sub-flavour + - LP: #439415 + * [Config] Add d101m_ucode.bin to d-i/firmware/nic-modules + - LP: #439456 + * [Config] Set default I/O scheduler back to CFQ for desktop flavours + - LP: #381300 + * SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros + - LP: #430694 + * SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915 + - LP: #430694 + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT + - LP: #430694 + * SAUCE: Raise the default console 'quiet' level to 2 + * [Config] CONFIG_X86_PAT=y + * [Config] Add armel arch to linux-libc-dev arches. + - LP: #449637 + * [Config] CONFIG_X86_MCE + * [Upstream] (drop after 2.6.31) Input: synaptics - add another Protege + M300 to rate blacklist + - LP: #433801 + + [ Upstream Kernel Changes ] + + * sgi-gru: Fix kernel stack buffer overrun, CVE-2009-2584 + * drm/i915: Fix FDI M/N setting according with correct color depth + - LP: #416792 + + -- Andy Whitcroft Thu, 22 Oct 2009 16:53:33 +0100 + +linux (2.6.32-1.1) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc3 + * [Config] update configs following rebase to 2.6.32-rc3 + * [Config] update ports configs following rebase to 2.6.32-rc3 + * AppArmor -- fix pstrace_may_access rename + * staging/android -- disable + * ubuntu: dm-raid-45 -- update to compile with 2.6.32 + * ubuntu: drbd -- disable + * staging/comdi -- disable + * staging/go7007 -- disable + * [Config] staging/winbond -- disable + * [Config] ubuntu/iscsitarget -- disable + * [d-i] cbc and ecb are builtin make them optional in udebs + * rebase to v2.6.32-rc5 + * [Config] update configs following rebase to v2.6.32-rc5 + * [Config] update ports configs following rebase to v2.6.31-rc5 + + [ Tim Gardner ] + + * [Config] Add cpio as a build dependency. + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc3 + * rebase to v2.6.32-rc5 + + -- Andy Whitcroft Mon, 05 Oct 2009 15:48:58 +0100 + +linux (2.6.31-11.37) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Increase kernel log buffer to 256K for amd64 flavours + - LP: #424810 + * [Config] Set HZ=100 for amd64 flavours + - LP: #438234 + * [Upstream] e1000e: Emit notice instead of an error when + pci_enable_pcie_error_reporting() fails + - LP: #436370 + + [ Upstream Kernel Changes ] + + * n_tty: honor opost flag for echoes + * n_tty: move echoctl check and clean up logic + - LP: #438310 + + * Revert "[Upstream] drm/i915: Check that the relocation points to within + the target" - Use upstream cherry-pick. + * drm/i915: Check that the relocation points to within the target + - LP: #429241 + + * drm/i915: fix tiling on IGDNG + * drm/i915: add B43 chipset support + * agp/intel: Add B43 chipset support + Intel request from kernel team mailing list. + + * HID: completely remove apple mightymouse from blacklist + - LP: #428111 + + -- Tim Gardner Mon, 28 Sep 2009 11:47:29 -0600 + +linux (2.6.31-11.36) karmic; urgency=low + + [ Brian Rogers ] + + * SAUCE: (drop after 2.6.31) em28xx: ir-kbd-i2c init data needs a + persistent object + * SAUCE: (drop after 2.6.31) saa7134: ir-kbd-i2c init data needs a + persistent object + + [ Takashi Iwai ] + + * [Upstream] ALSA: hda - Add another entry for Nvidia HDMI device + - LP: #416482 + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.31) eCryptfs: Prevent lower dentry from going + negative during unlink + + [ Upstream Kernel Changes ] + + * sg: fix oops in the error path in sg_build_indirect() + * mpt2sas : Rescan topology from Interrupt context instead of work thread + * mpt2sas: Prevent sending command to FW while Host Reset + * mpt2sas: setting SDEV into RUNNING state from Interrupt context + * mpt2sas: Raid 10 Volume is showing as Raid 1E in dmesg + * SCSI: fix oops during scsi scanning + * SCSI: libsrp: fix memory leak in srp_ring_free() + * cfg80211: fix looping soft lockup in find_ie() + * ath5k: write PCU registers on initial reset + * binfmt_elf: fix PT_INTERP bss handling + * TPM: Fixup boot probe timeout for tpm_tis driver + * md: Fix "strchr" [drivers/md/dm-log-userspace.ko] undefined! + * x86/amd-iommu: fix broken check in amd_iommu_flush_all_devices + * fix undefined reference to user_shm_unlock + * perf_counter: Fix buffer overflow in perf_copy_attr() + * perf_counter: Start counting time enabled when group leader gets + enabled + * powerpc/perf_counters: Reduce stack usage of power_check_constraints + * powerpc: Fix bug where perf_counters breaks oprofile + * powerpc/ps3: Workaround for flash memory I/O error + * block: don't assume device has a request list backing in nr_requests + store + * agp/intel: remove restore in resume + * ALSA: cs46xx - Fix minimum period size + * ASoC: Fix WM835x Out4 capture enumeration + * sound: oxygen: work around MCE when changing volume + * mlx4_core: Allocate and map sufficient ICM memory for EQ context + * perf stat: Change noise calculation to use stddev + * x86: Fix x86_model test in es7000_apic_is_cluster() + * x86/i386: Make sure stack-protector segment base is cache aligned + * PCI: apply nv_msi_ht_cap_quirk on resume too + * x86, pat: Fix cacheflush address in change_page_attr_set_clr() + * ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() + with highmem + * KVM guest: do not batch pte updates from interrupt context + * KVM: Fix coalesced interrupt reporting in IOAPIC + * KVM: VMX: Check cpl before emulating debug register access + * KVM guest: fix bogus wallclock physical address calculation + * KVM: x86: Disallow hypercalls for guest callers in rings > 0 + * KVM: VMX: Fix cr8 exiting control clobbering by EPT + * KVM: x86 emulator: Implement zero-extended immediate decoding + * KVM: MMU: make __kvm_mmu_free_some_pages handle empty list + * KVM: x86 emulator: fix jmp far decoding (opcode 0xea) + * KVM: limit lapic periodic timer frequency + * libata: fix off-by-one error in ata_tf_read_block() + * PCI quirk: update 82576 device ids in SR-IOV quirks list + * PCI: Unhide the SMBus on the Compaq Evo D510 USDT + * powerpc/pseries: Fix to handle slb resize across migration + * Linux 2.6.31.1 + + -- Tim Gardner Thu, 24 Sep 2009 13:04:28 -0600 + +linux (2.6.31-10.35) karmic; urgency=low + + [ Amit Kucheria ] + + * Disable CONFIG_UEVENT_HELPER_PATH + + [ Andy Whitcroft ] + + * [Config] Enable CONFIG_USB_GADGET_DUMMY_HCD + * remove the tlsup driver + * remove lmpcm logitech driver support + + [ Bryan Wu ] + + * Add 3 missing files to prerm remove file list + - LP: #345623, #415832 + + [ Chris Wilson ] + + * [Upstream] drm/i915: Check that the relocation points to within the + target + - LP: #429241 + + [ Luke Yelavich ] + + * [Config] Set CONFIG_EXT4_FS=y on ports architectures + + [ Manoj Iyer ] + + * SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + - LP: #348861 + + [ Tim Gardner ] + + * Revert "[Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) white-list" + Upstream suggests that this is not the right approach. + + * [Config] Set default I/O scheduler to DEADLINE + CFQ seems to have some load related problems which are often exacerbated by sreadahead. + - LP: #381300 + + [ ubuntu@tjworld.net ] + + * SAUCE: ipw2200: Enable LED by default + - LP: #21367 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Add support for new AMD HD audio devices + - LP: #430564 + + -- Andy Whitcroft Wed, 16 Sep 2009 15:37:49 +0100 + +linux (2.6.31-10.34) karmic; urgency=low + + [ Ted Tso ] + + * [Upstream] ext3: Don't update superblock write time when filesystem is + read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 16:00:45 -0600 + +linux (2.6.31-10.33) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] dvb-usb: fix tuning with Cinergy T2 + - LP: #421258 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + (really, really fix it this time) + - LP: #423426 + * [Config] Set CONFIG_CACHEFILES=m for all flavours + + [ Upstream Kernel Changes ] + + * ext4: Don't update superblock write time when filesystem is read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 07:50:21 -0600 + +linux (2.6.31-10.32) karmic; urgency=low + + [ Eric Miao ] + + * [Config] enable module support for memory stick + - LP: #159951 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + - LP: #423426 + + -- Tim Gardner Thu, 10 Sep 2009 15:57:55 -0600 + +linux (2.6.31-10.31) karmic; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.31 final + + [ Colin Watson ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + + [ Ike Panhc ] + + * [Upstream] Pull latest update of lenovo-sl-laptop + + [ Peter Feuerer ] + + * [Upstream] (drop after 2.6.31) acerhdf: fix fan control for AOA150 + model + - LP: #426691 + + [ Tim Gardner ] + + * [Config] De-macro some package names. + + [ Upstream Changes ] + + * rebase to 2.6.31 final. + + -- Andy Whitcroft Thu, 10 Sep 2009 09:38:10 +0100 + +linux (2.6.31-10.30) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Enable CONFIG_USB_DEVICEFS + - LP: #417748 + * [Config] Populate the config-update template a bit more + + [ Andy Whitcroft ] + + * rebase to v2.6.31-rc9 + * [Config] update configs following rebase to v2.6.31-rc9 + * [Config] update ports configs following rebase to v2.6.31-rc9 + + [ Colin Ian King ] + + * SAUCE: wireless: hostap, fix oops due to early probing interrupt + - LP: #254837 + + [ Jerone Young ] + + * [Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) + white-list + - LP: #281732 + + [ John Johansen ] + + * SAUCE: AppArmor: Fix profile attachment for regexp based profile names + - LP: #419308 + * SAUCE: AppArmor: Return the correct error codes on profile + addition/removal + - LP: #408473 + * SAUCE: AppArmor: Fix OOPS in profile listing, and display full list + - LP: #408454 + * SAUCE: AppArmor: Fix mapping of pux to new internal permission format + - LP: #419222 + * SAUCE: AppArmor: Fix change_profile failure + - LP: #401931 + * SAUCE: AppArmor: Tell git to ignore generated include files + - LP: #419505 + + [ Stefan Bader ] + + * [Upstream] acpi: video: Loosen strictness of video bus detection code + - LP: #333386 + * SAUCE: Remove ov511 driver from ubuntu subdirectory + + [ Tim Gardner ] + + * [Config] Exclude char-modules from non-x86 udeb creation + * SAUCE: Notify the ACPI call chain of AC events + * [Config] CONFIG_SATA_VIA=m + - LP: #403385 + * [Config] Build in all phylib support modules. + * [Config] Don't fail when sub-flavour files are missing + - LP: #423426 + * [Config] Set CONFIG_LSM_MMAP_MIN_ADDR=0 + - LP: #423513 + + [ Upstream ] + + * Rebased against v2.6.31-rc9 + + -- Andy Whitcroft Mon, 07 Sep 2009 11:33:45 +0100 + +linux (2.6.31-9.29) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] agp/intel: support for new chip variant of IGDNG mobile + - LP: #419993 + * [Config] d-i/modules: Add new char-modules file, initialize with + intel-agp + - LP: #420605 + + [ Upstream ] + + * Rebased against 2.6.31-rc8 plus some inotify regression patches: + up through git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git + adda766193ea1cf3137484a9521972d080d0b7af. + + -- Tim Gardner Fri, 28 Aug 2009 06:31:30 -0600 + +linux (2.6.31-8.28) karmic; urgency=low + + [ Ike Panhc ] + + * [Config] Let nic-shared-modules depends on crypto-modules + - LP: #360966 + + [ Leann Ogasawara ] + + * [Upstream] (drop after 2.6.31) drm/i915: increase default latency + constant + - LP: #412492 + + [ Mario Limonciello ] + + * [Upstream]: (drop after 2.6.31) dell-laptop: don't change softblock + status if HW switch is disabled + - LP: #418721 + * [Upstream]: (drop after 2.6.31) compal-laptop: Add support for known + Compal made Dell laptops + * [Upstream]: (drop after 2.6.31) compal-laptop: Replace sysfs support + with rfkill support + + [ Tim Gardner ] + + * [Config] Add acpiphp to virtual sub-flavour + - LP: #364916 + * Drop KSM patch set for now because of instabilities with encrypted swap. + - LP: #418781 + + -- Tim Gardner Wed, 26 Aug 2009 08:14:26 -0600 + +linux (2.6.31-7.27) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] updateconfigs updateportsconfigs after 2.6.31-rc7 rebase + * SAUCE: (drop after 2.6.31) Added KSM from mmotm-2009-08-20-19-18 + Replaces previous ksm patches from 2.6.31-6.25 + * [Config] KSM=y + + [ Upstream ] + + * Rebased against v2.6.31-rc7 + + -- Tim Gardner Sat, 22 Aug 2009 20:32:11 -0600 + +linux (2.6.31-6.26) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_BR_RAMFS + - LP: #414738 + * split out debian directory ready for abstraction + * add printdebian target to find branch target + * abstracted debian -- debian/files is not abstracted + * abstracted debian -- packages must be built in debian/ + * abstracted debian -- kernel-wedge needs to work in debian/ + * abstracted debian -- ensure we install the copyright file + * abstracted-debian -- drop the debian directories from headers + * abstracted-debian -- drop the debian directories from headers part 2 + * SAUCE: ubuntu-insert-changes -- follow abstracted debian + * [Upstream] aoe: ensure we initialise the request_queue correctly V2 + - LP: #410198 + + [ Luke Yelavich ] + + * [Config] Ports: Disable CONFIG_CPU_FREQ_DEBUG on powerpc-smp + * [Config] Ports: Re-enable windfarm modules on powerpc64-smp + - LP: #413150 + * [Config] Ports: Build all cpu frequency scaling governors into ports + kernels + * [Config] Ports: Build ext2 and ext3 modules into ports kernels + * [Config] Ports: CONFIG_PACKET=y for all ports kernels + * [Config] Ports: Enable PS3 network driver + + [ Stefan Bader ] + + * abstracted debian -- call $(DEBIAN)/rules using make + + [ Tim Gardner ] + + * [Config] Abstract the debian directory + * SAUCE: Improve error reporting in postinst + - LP: #358564 + + -- Tim Gardner Sun, 16 Aug 2009 20:33:28 -0600 + +linux (2.6.31-6.25) karmic; urgency=low + + [ Andy Whitcroft ] + + * script to generate Ubuntu changes from changelog + * [Config] standardise ANDROID options + * [Config] standardise CONFIG_ATM as module + * [Config] standardise CONFIG_LIB80211 as module + * [Config] disable CONFIG_PRINT_QUOTA_WARNING + * [Config] set CONFIG_CRAMFS as module + * [Config] enable CONFIG_DAB and modules + * [Config] set CONFIG_MAC80211_HWSIM as module + * [Config] set CONFIG_NET_CLS_FLOW as module + * [Config] set CONFIG_NF_CONNTRACK_SANE as module + * [Config] set CONFIG_NF_CT_PROTO_DCCP as module + * [Config] set CONFIG_RTC_DRV_DS1511 as module + * [Config] set CONFIG_RTC_DRV_R9701 as module + * [Config] set CONFIG_RTC_DRV_S35390A as module + * [Config] set CONFIG_TOIM3232_DONGLE as module + * [Config] standardise CONFIG_USB_MIDI_GADGET as module + * [Config] standardise CONFIG_USB_G_PRINTER as module + * [Config] standardise CONFIG_USB_SERIAL_IR as module + * [Config] set CONFIG_USB_SERIAL_IUU as module + * [Config] standardise CONFIG_USB_STORAGE_CYPRESS_ATACB as module + * [Config] standardise CONFIG_USB_STORAGE_ONETOUCH as module + * cleanup remains of dm-loop + * drop thinkpad ec and smapi support + * drop appleir + * [Config] update configs following rebase to v2.6.31-rc6 + * rebase to v2.6.31-rc6 + + [ Hugh Dickins ] + + * SAUCE: ksm patch 1, drop after 2.6.31 + * SAUCE: ksm patch 2, drop after 2.6.31 + * SAUCE: ksm patch 3, drop after 2.6.31 + * SAUCE: ksm patch 4, drop after 2.6.31 + * SAUCE: ksm patch 5, drop after 2.6.31 + * SAUCE: ksm patch 7, drop after 2.6.31 + + [ Izik Eidus ] + + * SAUCE: ksm patch 0, drop after 2.6.31 + * SAUCE: ksm patch 6, drop after 2.6.31 + * SAUCE: ksm patch 8, drop after 2.6.31 + * SAUCE: ksm patch 9, drop after 2.6.31 + + [ Luke Yelavich ] + + * [Config] Ports: Re-add PS3 modules to udebs + + [ Michael Casadevall ] + + * [Config] Update SPARC config and d-i files to reflect what can be built + + [ Tim Gardner ] + + * [Config] Removed armel package support + * [Config] Enabled CONFIG_KSM=y + + [ Upstream Kernel Changes ] + + * Rebased against v2.6.31-rc6 + * ARM: Cleanup: Revert "ARM: Add more cache memory types macros" + * ARM: Cleanup: Revert "Do not use OOB with MLC NAND" + * ARM: Cleanup: Revert "ARM: Make ARM arch aware of ubuntu/ drivers" + * ARM: Cleanup: Revert "ARM: IMX51: Make video capture drivers compile" + * ARM: Cleanup: Revert "ARM: IMX51: Fix isl29003 HWMON driver for i2c + changes" + * ARM: Cleanup: Revert "ARM: IMX51: IPU irq handler deadlock fix" + * ARM: Cleanup: Revert "ARM: IMX51: Babbage 2.5 needs a different system + revision" + * ARM: Cleanup: Revert "ARM: IMX51: Compile-in the IMX51 cpufreq driver + by default" + * ARM: Cleanup: Revert "ARM: IMX51: Enable ZONE_DMA for ARCH_MXC" + * ARM: Cleanup: Revert "ARM: IMX51: Make ARCH_MXC auto-enable + ARCH_MXC_CANONICAL" + * ARM: Cleanup: Revert "ARM: IMX51: Unconditionally disable + CONFIG_GPIOLIB" + * ARM: Cleanup: Revert "ARM: IMX51: Minimal changes for USB to work on + 2.6.31" + * ARM: Cleanup: Revert "ARM: IMX51: Fix plat-mxc/timer.c to handle imx51" + * ARM: Cleanup: Revert "ARM: IMX51: Make it compile." + * ARM: Cleanup: Revert "ARM: IMX51: Clean-up the craziness of including + mxc_uart.h _everywhere_" + * ARM: Cleanup: Revert "ARM: IMX51: Move board-mx51* header files to the + correct location" + * ARM: Cleanup: Revert "ARM: IMX51: Changed from snd_card_new to + snd_card_create" + * ARM: Cleanup: Revert "ARM: IMX51: Fix up merge error in Kconfig" + * ARM: Cleanup: Revert "ARM: IMX51: mxc_timer_init prototype" + * ARM: Cleanup: Revert "ARM: IMX51: Removed the mxc_gpio_port structure." + * ARM: Cleanup: Revert "ARM: IMX51: Added external declaration for + mxc_map_io." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: snd_soc_machine structure replaced + with snd_soc_card." + * ARM: Cleanup: Revert "ARM: IMX51: codec structure was moved to the card + structure" + * ARM: Cleanup: Revert "ARM: IMX51: Hack to add defines for + DMA_MODE_READ/WRITE/MASK" + * ARM: Cleanup: Revert "ARM: IMX51: Add SoC and board support for + Freescale mx51 platform" + * Driver core: add new device to bus's list before probing + * [Upstream] (drop after 2.6.31) ALSA: hda - Reduce click noise at + power-saving + - LP: #381693, #399750, #380892 + + -- Andy Whitcroft Fri, 14 Aug 2009 11:32:23 +0100 + +linux (2.6.31-5.24) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Make video capture drivers compile + * [Config] IMX51: Config updates + + [ Andy Whitcroft ] + + * remove leftovers of dm-bbr + + [ Leann Ogasawara ] + + * Add pata_cs5535 to pata-modules + - LP: #318805 + + [ Luke Yelavich ] + + * [Config] CONFIG_PPC64=y for powerpc64-smp + * [Config] Set the maximum number of CPUs to 1024 for powerpc64-smp + * [Config] CONFIG_PPC_PS3=y for powerpc64-smp + * [Config] CONFIG_PPC_MAPLE=y on powerpc64-smp + * [Config] CONFIG_PPC_PASEMI=y on powerpc64-smp + * [Config] CONFIG_CPU_FREQ_PMAC64=y on powerpc64-smp + * [Config] Enable all PS3 drivers in powerpc64-smp + + [ Mario Limonciello ] + + * LIRC -- fix lirc-i2c 2.6.31 compilation + + [ Matthew Garrett ] + + * [Upstream] dell-laptop: Fix rfkill state queries + + [ Tim Gardner ] + + * [Config] Ignore armel ABI and module changes + * [Config] Update configs after rebase against 2.6.31-rc5 + + [ Upstream ] + + * Rebased to 2.6.31-rc5 + + -- Andy Whitcroft Tue, 28 Jul 2009 10:10:09 +0100 + +linux (2.6.31-4.23) karmic; urgency=low + + [ Andy Whitcroft ] + + * AUFS -- update to aufs2-30 20090727 + * [Config] enable AUFS FUSE support + + [ Luke Yelavich ] + + * [Config] CONFIG_JFS_FS=m on sparc + + [ Tim Gardner ] + + * [Upstream] dell-laptop: Fix rfkill state setting. + + -- Andy Whitcroft Mon, 27 Jul 2009 11:11:47 +0100 + +linux (2.6.31-4.22) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Add SoC and board support for Freescale mx51 platform + * ARM: IMX51: Move board-mx51* header files to the correct location + * ARM: IMX51: Clean-up the craziness of including mxc_uart.h _everywhere_ + * ARM: IMX51: Make it compile. + * ARM: IMX51: Unconditionally disable CONFIG_GPIOLIB + * ARM: IMX51: Make ARCH_MXC auto-enable ARCH_MXC_CANONICAL + * ARM: IMX51: Enable ZONE_DMA for ARCH_MXC + * ARM: IMX51: Compile-in the IMX51 cpufreq driver by default + * ARM: IMX51: Fix isl29003 HWMON driver for i2c changes + * ARM: USB: musb: Refer to musb_otg_timer_func under correct #ifdef + * ARM: staging: udlfb: Add vmalloc.h include + * UBUNTU [Config]: Bring imx51 config upto date with other flavours + + [ Brad Figg ] + + * ARM: IMX51: Hack to add defines for DMA_MODE_READ/WRITE/MASK + * ARM: IMX51: codec structure was moved to the card structure + * ARM: IMX51: snd_soc_machine structure replaced with snd_soc_card. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Added external declaration for mxc_map_io. + * ARM: IMX51: Removed the mxc_gpio_port structure. + * ARM: IMX51: mxc_timer_init prototype + * ARM: IMX51: Fix up merge error in Kconfig + * ARM: IMX51: Changed from snd_card_new to snd_card_create + + [ Dinh Nguyen ] + + * ARM: IMX51: Fix plat-mxc/timer.c to handle imx51 + * ARM: IMX51: Minimal changes for USB to work on 2.6.31 + * ARM: IMX51: Babbage 2.5 needs a different system revision + * ARM: IMX51: IPU irq handler deadlock fix + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_CAN=m + - LP: #327243 + * [Config] Enabled CONFIG_SERIAL=m + - LP: #397189 + + -- Tim Gardner Fri, 24 Jul 2009 06:19:10 -0600 + +linux (2.6.31-4.21) karmic; urgency=low + + [ Amit Kucheria ] + + * dm-raid-4-5: Add missing brackets around test_bit() + + [ John Johansen ] + + * AppArmor: Fix change_profile failing lpn401931 + * AppArmor: Fix determination of forced AUDIT messages. + * AppArmor: Fix oops in auditing of the policy interface offset + + -- Andy Whitcroft Thu, 23 Jul 2009 19:18:30 +0100 + +linux (2.6.31-4.20) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: iscsitarget -- update to SVN revision r214 + * SAUCE: iscsitarget -- renable driver + * [Config] consolidate lpia/lpia and i386/generic configs + * [Config] enable CRYPTO modules for all architectures + * [Config] enable cryptoloop + * [Config] enable various filesystems for armel + * [Config] sync i386 generic and generic-pae + * [Config] add the 386 (486 processors and above) flavour + * [Config] re-set DEFAULT_MMAP_MIN_ADDR + - LP: #399914 + * add genconfigs/genportsconfigs to extract the built configs + * updateconfigs -- alter concatenation order allow easier updates + * intelfb -- INTELFB now conflicts with DRM_I915 + * printchanges -- rebase tree does not have stable tags use changelog + * AppArmor: fix argument size missmatch on 64 bit builds + + [ Ike Panhc ] + + * Ship bnx2x firmware in nic-modules udeb + - LP: #360966 + + [ Jeff Mahoney ] + + * AppArmor: fix build failure on ia64 + + [ John Johansen ] + + * AppArmour: ensure apparmor enabled parmater is off if AppArmor fails to + initialize. + * AppArmour: fix auditing of domain transitions to include target profile + information + * AppArmor: fix C99 violation + * AppArmor: revert reporting of create to write permission. + * SAUCE: Add config option to set a default LSM + * [Config] enable AppArmor by default + * AppArmor: Fix NULL pointer dereference oops in profile attachment. + + [ Keith Packard ] + + * SAUCE: drm/i915: Allow frame buffers up to 4096x4096 on 915/945 class + hardware + - LP: #351756 + + [ Luke Yelavich ] + + * [Config] add .o files found in arch/powerpc/lib to all powerpc kernel + header packages + - LP: #355344 + + [ Michael Casadevall ] + + * [Config] update SPARC config files to allow success build + + [ Scott James Remnant ] + + * SAUCE: trace: add trace_event for the open() syscall + + [ Stefan Bader ] + + * SAUCE: jfs: Fix early release of acl in jfs_get_acl + - LP: #396780 + + [ Tim Gardner ] + + * [Upstream] Fix Soltech TA12 volume hotkeys not sending key release + - LP: #397499 + * [Upstream] USB Option driver - Add USB ID for Novatel MC727/U727/USB727 + refresh + - LP: #365291 + * [Config] SSB/B44 are common across all arches/flavours. + + [ Upstream ] + + * Rebased to 2.6.31-rc4 + + -- Andy Whitcroft Thu, 23 Jul 2009 08:41:39 +0100 + +linux (2.6.31-3.19) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] Disabled NDISWRAPPER" + * ndiswrapper -- fix i386 compilation failures on cmpxchg8b + * AUFS -- export various core functions + * AUFS -- export various core functions -- fixes + * AUFS -- core filesystem + * AUFS -- track changes in v2.6.31 + * [Config] Enable AUFS + * droppped 'iwl3945: do not send scan command if channel count zero' as it + is already upstream but failed to auto-drop on rebase. + + [ Eric Paris ] + + * SAUCE: fsnotify: use def_bool in kconfig instead of letting the user + choose + * SAUCE: inotify: check filename before dropping repeat events + * SAUCE: fsnotify: fix inotify tail drop check with path entries + + -- Andy Whitcroft Tue, 14 Jul 2009 12:52:55 +0100 + +linux (2.6.31-3.18) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "Add splice-2.6.23.patch from AUFS to export a symbol needed by + AUFS" + * Revert "Add put_filp.patch from AUFS to export a symbol needed by AUFS" + * Revert "Add sec_perm-2.6.24.patch from AUFS - export + security_inode_permission" + * clear out left over AUFS files and modifications + + [ Luke Yelavich ] + + * [Config] Enable CONFIG_USB_ISP116X_HCD on sparc + * SAUCE: Explicitly include header files to allow apparmor to build on + powerpc + * [Config] Enable CONFIG_BLK_DEV_IDECD on powerpc + + [ Tim Gardner ] + + * [Config] Dropped ubuntu/misc/wireless/acx + * [Config] Disabled NDISWRAPPER until the compile issues are fixed. + + [ Upstream ] + + * Rebased to 2.6.31-rc3 + + -- Andy Whitcroft Fri, 10 Jul 2009 18:59:33 +0100 + +linux (2.6.31-2.17) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_BLK_DEV_CRYPTOLOOP=m for sparc + * compcache -- remove redundant Kconfig entries part 2 + * compcache -- clean up CCFLAGS declarations + * [Config] enable AppArmor + * AppArmor: fix operator precidence issue in as_path_link + + [ John Johansen ] + + * AppArmor security module + * AppArmor: Correct mapping of file permissions. + * AppArmor: Turn auditing of ptrace on + + [ Luke Yelavich ] + + * [Config] disable CONFIG_DM_RAID45 on powerpc + + -- Andy Whitcroft Fri, 10 Jul 2009 15:02:05 +0100 + +linux (2.6.31-2.16) karmic; urgency=low + + [ Andy Whitcroft ] + + * compcache -- remove redundant Kconfig entries + added ignore and ignore.modules for all arches since the compcache update + changes the modules names as well as some compcache ABI values. + + [ Manoj Iyer ] + + * SAUCE: updated dm-raid45 module version to 2009.04.24 (2.6.30-rc3) + * SAUCE: update compcache version to 0.5.3 + + [ Tim Gardner ] + + * [Config]: Fix sparc FTBS by adding ignore.modules + + -- Tim Gardner Mon, 06 Jul 2009 13:35:29 -0600 + +linux (2.6.31-2.15) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: default ATI Radeon KMS to off until userspace catches up + * [Config] Update configs following rebase to 2.6.31-rc2 + * [Config] update ports configs following update to 2.6.31-rc2 + + [ Luke Yelavich ] + + * [Config] powerpc - Disable CONFIG_RDS + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + [ Upstream Kernel Changes ] + + * rebased to mainline 2.6.31-rc2 + + -- Andy Whitcroft Sat, 04 Jul 2009 17:39:13 +0100 + +linux (2.6.31-1.14) karmic; urgency=low + + [ Andy Whitcroft ] + + * update ndiswrapper to 1.55 + * remove leftovers of gfs + * [Config] powerpc: enable CONFIG_PPC_DISABLE_WERROR + + [ Luke Yelavich ] + + * [Config] re-enable and build the ide-pmac driver into powerpc kernels + * [Config] Build the ServerWorks Frodo / Apple K2 SATA driver into the + kernel + + [ Manoj Iyer ] + + * Remove snd-bt-sco ubuntu driver + + [ Michael Casadevall ] + + * [Config] updates ia64 config and d-i folders to allow succesful build + * [Config] Update powerpc and sparc for 2.6.31 + + [ Upstream Kernel Changes ] + + * intel-iommu: fix Identity Mapping to be arch independent + - LP: #384695 + * ACPI: video: prevent NULL deref in acpi_get_pci_dev() + + -- Andy Whitcroft Tue, 30 Jun 2009 17:47:32 +0100 + +linux (2.6.31-1.13) karmic; urgency=low + + [ Andy Whitcroft ] + + * REBASE: rebased to mainline 2.6.31-rc1 + - "UBUNTU: SAUCE: UHCI USB quirk for resume" + no longer applies, using deprecated interfaces, LPIA only, dropped + - "UBUNTU: SAUCE: Mask off garbage in Dell WMI scan code data" + changes now upstream, dropped + * [Config] Update configs following rebase to 2.6.31-rc1 + * [Config] update ports configs following update to 2.6.31-rc1 + + * [Config] disable broken staging driver CONFIG_STLC45XX + * SAUCE: fix compcache to use updates accessors + * [Config] disable staging driver CONFIG_VT6655 + * SAUCE: fix DRDB to use updates accessors + * [Disable] ndiswrapper needs update + * [Disable] LIRC I2C needs update + * [Disable] CONFIG_LENOVO_SL_LAPTOP needs update + * [Config] disable I2C_DESIGNWARE does not compile + * [Config] disable CONFIG_TLSUP for lpia + * [Config] disable CONFIG_FB_UDL for arm + * SAUCE: disable adding scsi headers to linux-libc-dev + + [ Mario Limonciello ] + + * SAUCE: Add LIRC drivers + + -- Andy Whitcroft Thu, 25 Jun 2009 12:06:22 +0100 + +linux (2.6.30-10.12) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] split out the ports configs into their own family + * [Config] update configs following introduction of ports family + + [ Upstream Kernel Changes ] + + * Revert "Rename linux-doc-PKGVER to linux-doc and clean up its + description". Fixes linux-doc package name conflicts for now. + - LP: #382115 + + -- Tim Gardner Mon, 22 Jun 2009 09:17:14 -0600 + +linux (2.6.30-10.11) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Comment splitconfig.pl and misc cleanup + * [Config] Rename all configs to the new naming scheme + * [Config] Splitconfig rework + * [Config] Rename scripts/misc/oldconfig to kernelconfig + * [Config] Fix build system for new config split + * [Config] Run updateconfigs after the splitconfig rework + + [ Andy Whitcroft ] + + * Revert "SAUCE: Default to i915.modeset=0 if CONFIG_DRM_I915_KMS=y" + * [Config] standardise CONFIG_STAGING=y + * [Config] standardise CONFIG_RD_LZMA=y + * [Config] CONFIG_PCI_IOV=y + * [Config] CONFIG_PCI_STUB=m + * [Config] merge kernel configs more agressively + + [ Colin Watson ] + + * [Config] Run kernel-wedge in $(builddir) rather than at the top level + * [Config] Add support for including firmware in udebs + * [Config] Ship bnx2 firmware in nic-modules udeb + - LP: #384861 + + [ Luke Yelavich ] + + * [Config] ports - Import of ports architectures into kernel packaging + infrastructure + * [Config] ports - Do not update ports kernel configurations by default + * [Config] ports - Disable ABI checking for ports architectures + * [Config] ports - Build drivers in ubuntu sub-directory on powerpc + * [Config] ports - Add control.d/vars.* files for ports architectures + * [Config] ports - Add ports architectures for linux-libc-dev + * [Config] ports - Create powerpc specific message-modules and + block-modules udebs + * [Config] ports - Add configuration files for ports architectures + + [ Manoj Iyer ] + + * [Config] Enable CONFIG_BLK_DEV_AEC62XX=m for amd64 and i386 + - LP: #329864 + + [ Michael Casadevall ] + + * [Config] ports - Fix compression of kernels + + [ Stefan Bader ] + + * [Upstream] mmc: prevent dangling block device from accessing stale + queues + - LP: #383668 + + [ Tim Gardner ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + * [Config] Implement i386 generic and generic-pae flavours + * [Config] ports - Add control info after integrating ports arches + * [Config] Removed auto-generated files from git + * [Config] Added netxen_nic to nic-modules + - LP: #389603 + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + -- Tim Gardner Mon, 15 Jun 2009 14:38:26 -0600 + +linux (2.6.30-9.10) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_SECURITY_TOMOYO=y (amd64, i386, lpia) + * [Config] CONFIG_KEXEC_JUMP=y (amd64, lpia) + * [Config] CONFIG_LENOVO_SL_LAPTOP=m (amd64, lpia) + * [Config] CONFIG_POHMELFS_CRYPTO=y (i386, amd64) + * [Config] CONFIG_SERIAL_MAX3100=m (i386, amd64, lpia) + * [Config] CONFIG_VIDEO_GO7007=m (amd64, i386) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30 final + + -- Andy Whitcroft Fri, 05 Jun 2009 11:42:53 +0100 + +linux (2.6.30-8.9) karmic; urgency=low + + [ Andy Whitcroft ] + + * Config update removed the following options: + CONFIG_EDAC_AMD8111=m + CONFIG_EDAC_AMD8131=m + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc8 + + -- Andy Whitcroft Wed, 03 Jun 2009 09:21:13 +0100 + +linux (2.6.30-7.8) karmic; urgency=low + + [ Andy Whitcroft ] + + * Enabled NEW configration options: + Paravirtualization layer for spinlocks (PARAVIRT_SPINLOCKS) [N/y/?] Y + Cisco FNIC Driver (FCOE_FNIC) [N/m/y/?] M + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc7 + + -- Andy Whitcroft Sat, 23 May 2009 23:47:24 +0100 + +linux (2.6.30-6.7) karmic; urgency=low + + [ Andy Whitcroft ] + + * Dropped: UBUNTU: SAUCE: input: Blacklist digitizers from joydev.c (now + upstream) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc6 + + -- Andy Whitcroft Mon, 18 May 2009 18:05:54 +0100 + +linux (2.6.30-5.6) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enable Keyspan USB serial device firmware in kernel module + - LP: #334285 + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc5 + + -- Tim Gardner Mon, 11 May 2009 12:02:16 -0600 + +linux (2.6.30-4.5) karmic; urgency=low + + [ Colin Watson ] + + * Build-Conflict with findutils (= 4.4.1-1ubuntu1), to avoid + /usr/include/asm/* going missing + - LP: #373214 + + -- Stefan Bader Fri, 08 May 2009 11:09:08 +0200 + +linux (2.6.30-3.4) karmic; urgency=low + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + + [ Stefan Bader ] + + * SAUCE: input: Blacklist digitizers from joydev.c + - LP: #300143 + + -- Tim Gardner Fri, 01 May 2009 14:00:42 -0600 + +linux (2.6.30-2.3) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enabled CC_STACKPROTECTOR=y for all x86en + - LP: #369152 + * SAUCE: Default to i915_modeset=0 if CONFIG_DRM_I915_KMS=y + * [Config] CONFIG_DRM_I915_KMS=y + * [Config] Set CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR to appropriate ARCH + minimums + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc4 + + -- Tim Gardner Thu, 30 Apr 2009 09:17:05 -0600 + +linux (2.6.30-1.2) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] armel: disable staging drivers, fixes FTBS + * [Config] armel imx51: Disable CONFIG_MTD_NAND_MXC, fixes FTBS + + [ Upstream Kernel Changes ] + + * mpt2sas: Change reset_type enum to avoid namespace collision. + Submitted upstream. + + -- Tim Gardner Tue, 28 Apr 2009 16:54:41 -0600 + +linux (2.6.30-1.1) karmic; urgency=low + + * Initial release after rebasing against v2.6.30-rc3 + + -- Tim Gardner Thu, 12 Mar 2009 19:16:07 -0600 --- linux-2.6.32.orig/debian.master/control.stub +++ linux-2.6.32/debian.master/control.stub @@ -0,0 +1,844 @@ +Source: linux +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386 lpia], device-tree-compiler [powerpc], libelf-dev, binutils-dev, rsync +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-lucid.git + +Package: linux-source-2.6.32 +Architecture: all +Section: devel +Priority: optional +Provides: linux-source, linux-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version 2.6.32 with Ubuntu patches + This package provides the source code for the Linux kernel version + 2.6.32. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: linux-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: linux-doc-2.6 +Replaces: linux-doc-2.6 +Description: Linux kernel specific documentation for version 2.6.32 + This package provides the various documents in the 2.6.32 kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/linux-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-tools-common +Architecture: all +Section: admin +Priority: optional +Depends: ${misc:Depends} +Replaces: linux-tools (<= 2.6.32-16.25) +Description: Linux kernel specific tools for version 2.6.32 + This package provides the architecture independent parts for kernel + version locked tools in the 2.6.32 kernel source. + +Package: linux-headers-2.6.32-24 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version 2.6.32 + This package provides kernel header files for version 2.6.32, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details + +Package: linux-libc-dev +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Depends: ${misc:Depends} +Conflicts: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), amd64-libs-dev (<= 1.1), linux-kernel-headers +Replaces: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), linux-kernel-headers, libdrm-dev +Provides: linux-kernel-headers +Description: Linux Kernel Headers for development + This package provides headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system + libraries. They are NOT meant to be used to build third-party modules for + your kernel. Use linux-headers-* packages for that. + +Package: linux-tools-2.6.32-24 +Architecture: i386 amd64 lpia ia64 powerpc sparc armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel tools for version 2.6.32-24 + This package provides the architecture dependant parts for kernel + version locked tools for version 2.6.32-24 on + DESC. + + +Package: linux-image-2.6.32-24-386 +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on i386 + This package contains the Linux kernel image for version 2.6.32 on + i386. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Alternate x86 (486 and better) processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-386 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-386 +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on i386 + This package provides kernel header files for version 2.6.32 on + i386. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-386-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on i386 + This package provides a kernel debug image for version 2.6.32 on + i386. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86/x86_64 + This package provides kernel header files for version 2.6.32 on + x86/x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-dbgsym +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86/x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86/x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-generic-pae +Architecture: i386 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86 + This package contains the Linux kernel image for version 2.6.32 on + x86. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward 32 bit desktop systems with more then 4GB RAM. + . + You likely do not want to install this package directly. Instead, install + the linux-generic-pae meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-generic-pae +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86 + This package provides kernel header files for version 2.6.32 on + x86. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-generic-pae-dbgsym +Architecture: i386 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86 + This package provides a kernel debug image for version 2.6.32 on + x86. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-ia64 +Architecture: ia64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: elilo (>= 3.6-1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on IA-64 SMP + This package contains the Linux kernel image for version 2.6.32 on + IA-64 SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports IA-64 SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-ia64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-ia64 +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on IA-64 SMP + This package provides kernel header files for version 2.6.32 on + IA-64 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-ia64-dbgsym +Architecture: ia64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on IA-64 SMP + This package provides a kernel debug image for version 2.6.32 on + IA-64 SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-lpia +Architecture: lpia +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Intel Atom processors + This package contains the Linux kernel image for version 2.6.32 on + Intel Atom processors. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Intel Atom processors. + . + Geared toward LPIA-based mobile devices + . + You likely do not want to install this package directly. Instead, install + the linux-lpia meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-lpia +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Intel Atom processors + This package provides kernel header files for version 2.6.32 on + Intel Atom processors. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-lpia-dbgsym +Architecture: lpia +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Intel Atom processors + This package provides a kernel debug image for version 2.6.32 on + Intel Atom processors. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 32-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 32-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 32-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 32-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 32-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 32-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: yaboot +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit PowerPC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit PowerPC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit PowerPC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-powerpc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-powerpc64-smp +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit PowerPC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-powerpc64-smp-dbgsym +Architecture: powerpc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit PowerPC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit PowerPC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-preempt +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Preempt processors. + . + Geared toward low latency systems. + . + You likely do not want to install this package directly. Instead, install + the linux-preempt meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-preempt +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-preempt-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-server +Architecture: amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, kvm-api-4, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Server processors. + . + Geared toward 64 bit server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-server meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-server +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on x86_64 + This package provides kernel header files for version 2.6.32 on + x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-server-dbgsym +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64 +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64 +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-sparc64-smp +Architecture: sparc +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules, ivtv-modules +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: silo +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on 64-bit UltraSPARC SMP + This package contains the Linux kernel image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports 64-bit UltraSPARC SMP processors. + . + Geared toward desktop or server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-sparc64-smp meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-sparc64-smp +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides kernel header files for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-sparc64-smp-dbgsym +Architecture: sparc +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on 64-bit UltraSPARC SMP + This package provides a kernel debug image for version 2.6.32 on + 64-bit UltraSPARC SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-versatile +Architecture: armel +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32, linux-tools +Description: Linux kernel image for version 2.6.32 on Versatile-based systems + This package contains the Linux kernel image for version 2.6.32 on + Versatile-based systems. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Versatile processors. + . + PB, AB, Qemu, etc. + . + You likely do not want to install this package directly. Instead, install + the linux-versatile meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-24-versatile +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-24, ${shlibs:Depends} +Provides: linux-headers, linux-headers-2.6 +Description: Linux kernel headers for version 2.6.32 on Versatile-based systems + This package provides kernel header files for version 2.6.32 on + Versatile-based systems. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-24/debian.README.gz for details. + +Package: linux-image-2.6.32-24-versatile-dbgsym +Architecture: armel +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on Versatile-based systems + This package provides a kernel debug image for version 2.6.32 on + Versatile-based systems. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-image-2.6.32-24-virtual +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, redhat-cluster-modules +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1), linux-image-2.6.32-24-generic-pae, linux-image-2.6.32-24-server +Recommends: grub-pc | grub | lilo (>= 19.1) +Suggests: fdutils, linux-doc-2.6.32 | linux-source-2.6.32 +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Virtual processors. + . + Geared toward virtual machine guests. + . + You likely do not want to install this package directly. Instead, install + the linux-virtual meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. --- linux-2.6.32.orig/debian.master/d-i/kernel-versions +++ linux-2.6.32/debian.master/d-i/kernel-versions @@ -0,0 +1,18 @@ +# arch version flavour installedname suffix bdep +amd64 2.6.32-24 generic 2.6.32-24-generic - + +i386 2.6.32-24 generic 2.6.32-24-generic - +i386 2.6.32-24 generic-pae 2.6.32-24-generic-pae - + +lpia 2.6.32-24 lpia 2.6.32-24-lpia + +armel 2.6.32-24 versatile 2.6.32-24-versatile - + +# Ports +# arch version flavour installedname suffix bdep +ia64 2.6.32-24 ia64 2.6.32-24-ia64 - + +powerpc 2.6.32-24 powerpc 2.6.32-24-powerpc - +powerpc 2.6.32-24 powerpc64-smp 2.6.32-24-powerpc64-smp - + +sparc 2.6.32-24 sparc64 2.6.32-24-sparc64 - --- linux-2.6.32.orig/debian.master/d-i/package-list +++ linux-2.6.32/debian.master/d-i/package-list @@ -0,0 +1,190 @@ +Package: kernel-image + +Package: char-modules +Depends: kernel-image +Priority: standard +Description: Character module support + +Package: fat-modules +Depends: kernel-image +Priority: standard +Description: FAT filesystem support + This includes Windows FAT and VFAT support. + +Package: fb-modules +Depends: kernel-image +Priority: standard +Description: Framebuffer modules + +Package: firewire-core-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: Firewire (IEEE-1394) Support + +Package: floppy-modules +Depends: kernel-image +Priority: standard +Description: Floppy driver support + +Package: fs-core-modules +Depends: kernel-image +Priority: standard +Provides: jfs-modules, reiserfs-modules, xfs-modules +Description: Base filesystem modules + This includes jfs, reiserfs and xfs. + +Package: fs-secondary-modules +Depends: kernel-image, fat-modules +Priority: standard +Provides: ntfs-modules, hfs-modules +Description: Extra filesystem modules + This includes support for Windows NTFS and MacOS HFS/HFSPlus + +Package: input-modules +Depends: kernel-image, usb-modules +Priority: standard +Description: Support for various input methods + +Package: irda-modules +Depends: kernel-image, nic-shared-modules +Priority: standard +Description: Support for Infrared protocols + +Package: md-modules +Depends: kernel-image +Priority: standard +Description: Multi-device support (raid, device-mapper, lvm) + +Package: nic-modules +Depends: kernel-image, nic-shared-modules, virtio-modules +Priority: standard +Description: Network interface support + +Package: nic-pcmcia-modules +Depends: kernel-image, nic-shared-modules, nic-modules +Priority: standard +Description: PCMCIA network interface support + +Package: nic-usb-modules +Depends: kernel-image, nic-shared-modules, usb-modules +Priority: standard +Description: USB network interface support + +Package: nic-shared-modules +Depends: kernel-image, crypto-modules +Priority: standard +Description: nic shared modules + This package contains modules which support nic modules + +Package: parport-modules +Depends: kernel-image +Priority: standard +Description: Parallel port support + +Package: pata-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: PATA support modules + +Package: pcmcia-modules +Depends: kernel-image +Priority: standard +Description: PCMCIA Modules + +Package: pcmcia-storage-modules +Depends: kernel-image, scsi-modules +Priority: standard +Description: PCMCIA storage support + +Package: plip-modules +Depends: kernel-image, nic-shared-modules, parport-modules +Priority: standard +Description: PLIP (parallel port) networking support + +Package: ppp-modules +Depends: kernel-image, nic-shared-modules, serial-modules +Priority: standard +Description: PPP (serial port) networking support + +Package: sata-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: SATA storage support + +Package: scsi-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: SCSI storage support + +Package: serial-modules +Depends: kernel-image +Priority: standard +Description: Serial port support + +Package: storage-core-modules +Depends: kernel-image +Priority: standard +Provides: loop-modules +Description: Core storage support + Includes core SCSI, LibATA, USB-Storage. Also includes related block + devices for CD, Disk and Tape medium (and IDE Floppy). + +Package: usb-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: Core USB support + +Package: nfs-modules +Priority: standard +Depends: kernel-image +Description: NFS filesystem drivers + Includes the NFS client driver, and supporting modules. + +Package: block-modules +Priority: standard +Depends: kernel-image, storage-core-modules, parport-modules, virtio-modules +Description: Block storage devices + This package contains the block storage devices, including DAC960 and + paraide. + +Package: message-modules +Priority: standard +Depends: kernel-image, storage-core-modules, scsi-modules +Description: Fusion and i2o storage modules + This package containes the fusion and i2o storage modules. + +Package: crypto-modules +Priority: extra +Depends: kernel-image +Description: crypto modules + This package contains crypto modules. + +Package: virtio-modules +Priority: standard +Depends: kernel-image +Description: VirtIO Modules + Includes modules for VirtIO (virtual machine, generally kvm guests) + +Package: socket-modules +Depends: kernel-image +Priority: standard +Description: Unix socket support + +Package: mouse-modules +Depends: kernel-image, input-modules, usb-modules +Priority: extra +Description: Mouse support + This package contains mouse drivers for the Linux kernel. + +Package: squashfs-modules +Depends: kernel-image +Priority: extra +Description: squashfs modules + This package contains squashfs modules. + +Package: vlan-modules +Depends: kernel-image +Priority: extra +Description: vlan modules + This package contains vlan (8021.Q) modules. + --- linux-2.6.32.orig/debian.master/d-i/kernel-versions.in +++ linux-2.6.32/debian.master/d-i/kernel-versions.in @@ -0,0 +1,18 @@ +# arch version flavour installedname suffix bdep +amd64 PKGVER-ABINUM generic PKGVER-ABINUM-generic - + +i386 PKGVER-ABINUM generic PKGVER-ABINUM-generic - +i386 PKGVER-ABINUM generic-pae PKGVER-ABINUM-generic-pae - + +lpia PKGVER-ABINUM lpia PKGVER-ABINUM-lpia + +armel PKGVER-ABINUM versatile PKGVER-ABINUM-versatile - + +# Ports +# arch version flavour installedname suffix bdep +ia64 PKGVER-ABINUM ia64 PKGVER-ABINUM-ia64 - + +powerpc PKGVER-ABINUM powerpc PKGVER-ABINUM-powerpc - +powerpc PKGVER-ABINUM powerpc64-smp PKGVER-ABINUM-powerpc64-smp - + +sparc PKGVER-ABINUM sparc64 PKGVER-ABINUM-sparc64 - --- linux-2.6.32.orig/debian.master/d-i/exclude-modules.armel +++ linux-2.6.32/debian.master/d-i/exclude-modules.armel @@ -0,0 +1,20 @@ +crypto-modules +fb-modules +fs-core-modules +fs-secondary-modules +nic-modules +nic-pcmcia-modules +nic-usb-modules +scsi-modules +storage-core-modules +nfs-modules +pcmcia-modules +parport-modules +serial-modules +plip-modules +pcmcia-storage-modules +mouse-modules +irda-modules +floppy-modules +char-modules +virtio-modules --- linux-2.6.32.orig/debian.master/d-i/exclude-modules.ia64 +++ linux-2.6.32/debian.master/d-i/exclude-modules.ia64 @@ -0,0 +1,5 @@ +irda-modules +floppy-modules +fb-modules +virtio-modules +char-modules --- linux-2.6.32.orig/debian.master/d-i/exclude-modules.powerpc +++ linux-2.6.32/debian.master/d-i/exclude-modules.powerpc @@ -0,0 +1,5 @@ +efi-modules +fb-modules +acpi-modules +virtio-modules +char-modules --- linux-2.6.32.orig/debian.master/d-i/exclude-modules.sparc +++ linux-2.6.32/debian.master/d-i/exclude-modules.sparc @@ -0,0 +1,10 @@ +efi-modules +nic-pcmcia-modules +pcmcia-modules +pcmcia-storage-modules +irda-modules +floppy-modules +fb-modules +acpi-modules +virtio-modules +char-modules --- linux-2.6.32.orig/debian.master/d-i/firmware/README.txt +++ linux-2.6.32/debian.master/d-i/firmware/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-2.6.32.orig/debian.master/d-i/firmware/nic-modules +++ linux-2.6.32/debian.master/d-i/firmware/nic-modules @@ -0,0 +1,10 @@ +bnx2/bnx2-mips-06-5.0.0.j3.fw ? +bnx2/bnx2-rv2p-06-5.0.0.j3.fw ? +bnx2/bnx2-mips-09-5.0.0.j3.fw ? +bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw ? +bnx2/bnx2-rv2p-09-5.0.0.j3.fw ? +bnx2x-e1-5.0.21.0.fw ? +bnx2x-e1h-5.0.21.0.fw ? +e100/d101m_ucode.bin +e100/d101s_ucode.bin +e100/d102e_ucode.bin --- linux-2.6.32.orig/debian.master/d-i/firmware/scsi-modules +++ linux-2.6.32/debian.master/d-i/firmware/scsi-modules @@ -0,0 +1,3 @@ +qlogic/1040.bin +qlogic/12160.bin +qlogic/1280.bin --- linux-2.6.32.orig/debian.master/d-i/modules-sparc/block-modules +++ linux-2.6.32/debian.master/d-i/modules-sparc/block-modules @@ -0,0 +1,9 @@ +aoe +cciss +comm +cpqarray ? +DAC960 +nbd +sx8 +umem +virtio_blk ? --- linux-2.6.32.orig/debian.master/d-i/modules-sparc/message-modules +++ linux-2.6.32/debian.master/d-i/modules-sparc/message-modules @@ -0,0 +1,13 @@ +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +i2o_block +i2o_bus +i2o_config ? +i2o_core +i2o_proc +i2o_scsi --- linux-2.6.32.orig/debian.master/d-i/modules/fs-core-modules +++ linux-2.6.32/debian.master/d-i/modules/fs-core-modules @@ -0,0 +1,3 @@ +jfs ? +reiserfs ? +xfs ? --- linux-2.6.32.orig/debian.master/d-i/modules/plip-modules +++ linux-2.6.32/debian.master/d-i/modules/plip-modules @@ -0,0 +1 @@ +plip ? --- linux-2.6.32.orig/debian.master/d-i/modules/crypto-modules +++ linux-2.6.32/debian.master/d-i/modules/crypto-modules @@ -0,0 +1,8 @@ +aes_generic ? +blowfish ? +twofish ? +serpent ? +sha256_generic ? +cbc ? +ecb ? +crc32c ? --- linux-2.6.32.orig/debian.master/d-i/modules/mouse-modules +++ linux-2.6.32/debian.master/d-i/modules/mouse-modules @@ -0,0 +1,2 @@ +psmouse ? +usbmouse ? --- linux-2.6.32.orig/debian.master/d-i/modules/ppp-modules +++ linux-2.6.32/debian.master/d-i/modules/ppp-modules @@ -0,0 +1,6 @@ +ppp_async ? +ppp_deflate ? +ppp_mppe ? +pppoe ? +pppox ? +ppp_synctty ? --- linux-2.6.32.orig/debian.master/d-i/modules/parport-modules +++ linux-2.6.32/debian.master/d-i/modules/parport-modules @@ -0,0 +1,2 @@ +parport ? +parport_pc ? --- linux-2.6.32.orig/debian.master/d-i/modules/vlan-modules +++ linux-2.6.32/debian.master/d-i/modules/vlan-modules @@ -0,0 +1,3 @@ +slp ? +garp ? +8021q ? --- linux-2.6.32.orig/debian.master/d-i/modules/fs-secondary-modules +++ linux-2.6.32/debian.master/d-i/modules/fs-secondary-modules @@ -0,0 +1,4 @@ +fuse ? +ntfs ? +hfs ? +hfsplus ? --- linux-2.6.32.orig/debian.master/d-i/modules/floppy-modules +++ linux-2.6.32/debian.master/d-i/modules/floppy-modules @@ -0,0 +1 @@ +floppy ? --- linux-2.6.32.orig/debian.master/d-i/modules/pcmcia-modules +++ linux-2.6.32/debian.master/d-i/modules/pcmcia-modules @@ -0,0 +1,8 @@ +i82092 ? +i82365 ? +pcmcia ? +pcmcia_core ? +pd6729 ? +rsrc_nonstatic ? +tcic ? +yenta_socket ? --- linux-2.6.32.orig/debian.master/d-i/modules/input-modules +++ linux-2.6.32/debian.master/d-i/modules/input-modules @@ -0,0 +1,21 @@ +hid-a4tech ? +hid-apple ? +hid-belkin ? +hid-bright ? +hid-cherry ? +hid-chicony ? +hid-cypress ? +hid-dell ? +hid-ezkey ? +hid-gyration ? +hid-logitech ? +hid-microsoft ? +hid-monterey ? +hid-petalynx ? +hid-pl ? +hid-samsung ? +hid-sony ? +hid-sunplus ? +hid-tmff ? +hid-zpff ? +usbhid ? --- linux-2.6.32.orig/debian.master/d-i/modules/firewire-core-modules +++ linux-2.6.32/debian.master/d-i/modules/firewire-core-modules @@ -0,0 +1,4 @@ +ieee1394 ? +ohci1394 ? +sbp2 ? +eth1394 ? --- linux-2.6.32.orig/debian.master/d-i/modules/irda-modules +++ linux-2.6.32/debian.master/d-i/modules/irda-modules @@ -0,0 +1,30 @@ +act200l-sir ? +actisys-sir ? +ali-ircc ? +donauboe ? +esi-sir ? +girbil-sir ? +ircomm ? +ircomm-tty ? +irda ? +irda-usb ? +irlan ? +irnet ? +irport ? +irtty-sir ? +kingsun-sir ? +ks959-sir ? +ksdazzle-sir ? +litelink-sir ? +ma600-sir ? +mcp2120-sir ? +mcs7780 ? +nsc-ircc ? +old_belkin-sir ? +sir-dev ? +smsc-ircc2 ? +stir4200 ? +tekram-sir ? +via-ircc ? +vlsi_ir ? +w83977af_ir ? --- linux-2.6.32.orig/debian.master/d-i/modules/nic-modules +++ linux-2.6.32/debian.master/d-i/modules/nic-modules @@ -0,0 +1,155 @@ +3c359 ? +3c501 ? +3c503 ? +3c505 ? +3c507 ? +3c509 ? +3c515 ? +3c523 ? +3c527 ? +3c59x ? +8139cp ? +8139too ? +82596 ? +abyss ? +ac3200 ? +adm8211 ? +airo ? +airport ? +amd8111e ? +arc4 ? +arcnet ? +arc-rawmode ? +arc-rimi ? +arlan ? +at1700 ? +atl1 ? +atl1c ? +atl1e ? +atl2 ? +atmel ? +atmel_pci ? +b44 ? +bcm43xx ? +bcm43xx-mac80211 ? +bmac ? +bnx2 ? +bnx2x ? +bonding ? +cassini ? +com20020 ? +com20020-pci ? +com90io ? +com90xx ? +cs89x0 ? +de2104x ? +de4x5 ? +de600 ? +de620 ? +defxx ? +depca ? +dl2k ? +dmfe ? +dummy ? +e100 ? +e1000 ? +e1000e ? +e2100 ? +eepro ? +eepro100 ? +eexpress ? +epic100 ? +eql ? +es3210 ? +eth16i ? +ewrk3 ? +fealnx ? +forcedeth ? +igb ? +ps3_gelic ? +hamachi ? +hermes ? +hp ? +hp100 ? +hp-plus ? +ibmtr ? +ipddp ? +ipw2100 ? +ipw2200 ? +ipw3945 ? +ixgb ? +lance ? +lanstreamer ? +lasi_82596 ? +lne390 ? +lp486e ? +mace ? +mv643xx_eth ? +myri_sbus ? +natsemi ? +ne ? +ne2 ? +ne2k-pci ? +ne3210 ? +netconsole ? +netxen_nic ? +ni5010 ? +ni52 ? +ni65 ? +niu ? +ns83820 ? +olympic ? +orinoco ? +orinoco_pci ? +orinoco_plx ? +orinoco_tmd ? +pcnet32 ? +prism54 ? +r8169 ? +rate_control ? +rfc1051 ? +rfc1201 ? +rrunner ? +rt2400 ? +rt2500 ? +rt61pci ? +s2io ? +shaper ? +sis190 ? +sis900 ? +spidernet ? +skfp ? +skge ? +sk98lin ? +sky2 ? +smc9194 ? +smc-ultra ? +smc-ultra32 ? +starfire ? +strip ? +sunbmac ? +sundance ? +sungem ? +sungem_phy ? +sunhme ? +sunlance ? +sunqe ? +sunvnet ? +tg3 ? +tlan ? +tms380tr ? +tmspci ? +tulip ? +tun ? +typhoon ? +uli526x ? +via-rhine ? +via-velocity ? +virtio_net ? +wavelan ? +wd ? +winbond-840 ? +yellowfin ? +znet ? +vmxnet3 ? +xen-netfront ? --- linux-2.6.32.orig/debian.master/d-i/modules/block-modules +++ linux-2.6.32/debian.master/d-i/modules/block-modules @@ -0,0 +1,30 @@ +aoe ? +aten ? +bpck ? +bpck6 ? +cciss ? +comm ? +cpqarray ? +DAC960 +dstr ? +epat ? +epia ? +fit2 ? +fit3 ? +friq ? +frpw ? +kbic ? +ktti ? +nbd ? +on20 ? +on26 ? +paride ? +pcd ? +pd ? +pf ? +pg ? +pt ? +sx8 ? +umem ? +virtio_blk ? +xen-blkfront ? --- linux-2.6.32.orig/debian.master/d-i/modules/pcmcia-storage-modules +++ linux-2.6.32/debian.master/d-i/modules/pcmcia-storage-modules @@ -0,0 +1,6 @@ +pata_pcmcia ? +qlogic_cs ? +fdomain_cs ? +aha152x_cs ? +nsp_cs ? +sym53c500_cs ? --- linux-2.6.32.orig/debian.master/d-i/modules/message-modules +++ linux-2.6.32/debian.master/d-i/modules/message-modules @@ -0,0 +1,14 @@ +mptbase ? +mptctl ? +mptfc ? +mptlan ? +mptsas ? +mpt2sas ? +mptscsih ? +mptspi ? +i2o_block ? +i2o_bus ? +i2o_config ? +i2o_core ? +i2o_proc ? +i2o_scsi ? --- linux-2.6.32.orig/debian.master/d-i/modules/scsi-modules +++ linux-2.6.32/debian.master/d-i/modules/scsi-modules @@ -0,0 +1,115 @@ +# SCSI +raid_class ? +scsi_transport_spi ? +scsi_transport_fc ? +scsi_transport_iscsi ? +scsi_transport_sas ? +iscsi_tcp ? +libiscsi ? +amiga7xx ? +a3000 ? +a2091 ? +gvp11 ? +mvme147 ? +sgiwd93 ? +cyberstorm ? +cyberstormII ? +blz2060 ? +blz1230 ? +fastlane ? +oktagon_esp_mod ? +atari_scsi ? +mac_scsi ? +mac_esp ? +sun3_scsi ? +mvme16x ? +bvme6000 ? +sim710 ? +advansys ? +psi240i ? +BusLogic ? +dpt_i2o ? +u14-34f ? +ultrastor ? +aha152x ? +aha1542 ? +aha1740 ? +aic7xxx_old ? +ips ? +fd_mcs ? +fdomain ? +in2000 ? +g_NCR5380 ? +g_NCR5380_mmio ? +NCR53c406a ? +NCR_D700 ? +NCR_Q720_mod ? +sym53c416 ? +qlogicfas408 ? +qla1280 ? +pas16 ? +seagate ? +seagate ? +t128 ? +dmx3191d ? +dtc ? +zalon7xx ? +eata_pio ? +wd7000 ? +mca_53c9x ? +ibmmca ? +eata ? +dc395x ? +tmscsim ? +megaraid ? +atp870u ? +esp ? +gdth ? +initio ? +a100u2w ? +qlogicpti ? +ide-scsi ? +mesh ? +mac53c94 ? +pluto ? +dec_esp ? +3w-xxxx ? +3w-9xxx ? +ppa ? +imm ? +jazz_esp ? +sun3x_esp ? +fcal ? +lasi700 ? +nsp32 ? +ipr ? +hptiop ? +stex ? +osst ? +sg ? +ch ? +scsi_debug ? +aacraid ? +aic7xxx ? +aic79xx ? +aic94xx ? +arcmsr ? +acornscsi_mod ? +arxescsi ? +cumana_1 ? +cumana_2 ? +ecoscsi ? +oak ? +powertec ? +eesox ? +ibmvscsic ? +libsas ? +lpfc ? +megaraid_mm ? +megaraid_mbox ? +megaraid_sas ? +qla2xxx ? +sym53c8xx ? +qla4xxx ? +mvsas ? +vmw_pvscsi ? --- linux-2.6.32.orig/debian.master/d-i/modules/nic-usb-modules +++ linux-2.6.32/debian.master/d-i/modules/nic-usb-modules @@ -0,0 +1,13 @@ +catc ? +kaweth ? +pegasus ? +prism2_usb ? +rtl8150 ? +usbnet ? +zd1211rw ? +zd1201 ? +rt2500usb ? +rt73usb ? +rt2570 ? +cdc_ether ? +asix ? --- linux-2.6.32.orig/debian.master/d-i/modules/virtio-modules +++ linux-2.6.32/debian.master/d-i/modules/virtio-modules @@ -0,0 +1,4 @@ +virtio_balloon ? +virtio_pci ? +virtio_ring ? +virtio-rng ? --- linux-2.6.32.orig/debian.master/d-i/modules/squashfs-modules +++ linux-2.6.32/debian.master/d-i/modules/squashfs-modules @@ -0,0 +1 @@ +squashfs ? --- linux-2.6.32.orig/debian.master/d-i/modules/nic-pcmcia-modules +++ linux-2.6.32/debian.master/d-i/modules/nic-pcmcia-modules @@ -0,0 +1,19 @@ +3c574_cs ? +3c589_cs ? +airo_cs ? +atmel_cs ? +axnet_cs ? +com20020_cs ? +fmvj18x_cs ? +ibmtr_cs ? +netwave_cs ? +nmclan_cs ? +orinoco_cs ? +pcnet_cs ? +ray_cs ? +smc91c92_cs ? +wavelan_cs ? +wl3501_cs ? +xirc2ps_cs ? +xircom_cb ? +xircom_tulip_cb ? --- linux-2.6.32.orig/debian.master/d-i/modules/usb-modules +++ linux-2.6.32/debian.master/d-i/modules/usb-modules @@ -0,0 +1,9 @@ +ehci-hcd ? +isp116x-hcd ? +isp1760 ? +ohci-hcd ? +r8a66597-hcd ? +sl811_cs ? +sl811-hcd ? +u132-hcd ? +uhci-hcd ? --- linux-2.6.32.orig/debian.master/d-i/modules/sata-modules +++ linux-2.6.32/debian.master/d-i/modules/sata-modules @@ -0,0 +1,14 @@ +ahci.ko ? +sata_inic162x.ko ? +sata_mv.ko ? +sata_nv.ko ? +sata_promise.ko ? +sata_qstor.ko ? +sata_sil24.ko ? +sata_sil.ko ? +sata_sis.ko ? +sata_svw.ko ? +sata_sx4.ko ? +sata_uli.ko ? +sata_via.ko ? +sata_vsc.ko ? --- linux-2.6.32.orig/debian.master/d-i/modules/char-modules +++ linux-2.6.32/debian.master/d-i/modules/char-modules @@ -0,0 +1 @@ +intel-agp ? --- linux-2.6.32.orig/debian.master/d-i/modules/nfs-modules +++ linux-2.6.32/debian.master/d-i/modules/nfs-modules @@ -0,0 +1,4 @@ +nfs ? +nfs_acl ? +lockd ? +sunrpc ? --- linux-2.6.32.orig/debian.master/d-i/modules/fat-modules +++ linux-2.6.32/debian.master/d-i/modules/fat-modules @@ -0,0 +1,7 @@ +fat ? +vfat ? + +# Supporting modules ? +nls_cp437 ? +nls_iso8859-1 ? +nls_utf8 ? --- linux-2.6.32.orig/debian.master/d-i/modules/fb-modules +++ linux-2.6.32/debian.master/d-i/modules/fb-modules @@ -0,0 +1,3 @@ +fbcon ? +vesafb ? +vga16fb ? --- linux-2.6.32.orig/debian.master/d-i/modules/storage-core-modules +++ linux-2.6.32/debian.master/d-i/modules/storage-core-modules @@ -0,0 +1,10 @@ +# Core stacks +usb-storage ? + +# Block level + +# Loop modules +cryptoloop ? + +# Needs to be here for better cdrom initrd layout +isofs ? --- linux-2.6.32.orig/debian.master/d-i/modules/serial-modules +++ linux-2.6.32/debian.master/d-i/modules/serial-modules @@ -0,0 +1,3 @@ +generic_serial ? +serial_cs ? +synclink_cs ? --- linux-2.6.32.orig/debian.master/d-i/modules/md-modules +++ linux-2.6.32/debian.master/d-i/modules/md-modules @@ -0,0 +1,13 @@ +dm-crypt ? +dm-zero ? +faulty ? +linear ? +multipath ? +raid0 ? +raid1 ? +raid10 ? +raid456 ? + +# Extras +dm-raid4-5 ? +dm-loop ? --- linux-2.6.32.orig/debian.master/d-i/modules/nic-shared-modules +++ linux-2.6.32/debian.master/d-i/modules/nic-shared-modules @@ -0,0 +1,22 @@ +# PHY +8390 ? +mii ? + +# CRC modules +crc-ccitt ? +crc-itu-t ? +libcrc32c ? + +# mac80211 stuff +mac80211 ? +cfg80211 ? + +# rt2x00 lib (since rt2x00 is split across usb/pci/cb +rt2x00lib ? + +# Wireless 802.11 modules +lib80211 ? +cfg80211 ? +lib80211_crypt_ccmp ? +lib80211_crypt_tkip ? +lib80211_crypt_wep ? --- linux-2.6.32.orig/debian.master/d-i/modules/pata-modules +++ linux-2.6.32/debian.master/d-i/modules/pata-modules @@ -0,0 +1,46 @@ +pata_ali.ko ? +pata_amd.ko ? +pata_artop.ko ? +pata_atiixp.ko ? +pata_atp867x.ko ? +pata_cmd640.ko ? +pata_cmd64x.ko ? +pata_cs5520.ko ? +pata_cs5530.ko ? +pata_cs5535.ko ? +pata_cs5536.ko ? +pata_cypress.ko ? +pata_efar.ko ? +pata_hpt366.ko ? +pata_hpt37x.ko ? +pata_hpt3x2n.ko ? +pata_hpt3x3.ko ? +pata_isapnp.ko ? +pata_it8213.ko ? +pata_it821x.ko ? +pata_jmicron.ko ? +pata_legacy.ko ? +pata_marvell.ko ? +pata_mpiix.ko ? +pata_netcell.ko ? +pata_ninja32.ko ? +pata_ns87410.ko ? +pata_ns87415.ko ? +pata_oldpiix.ko ? +pata_optidma.ko ? +pata_opti.ko ? +pata_pcmcia.ko ? +pata_pdc2027x.ko ? +pata_pdc202xx_old.ko ? +pata_qdi.ko ? +pata_radisys.ko ? +pata_rdc.ko ? +pata_rz1000.ko ? +pata_sc1200.ko ? +pata_sch.ko ? +pata_serverworks.ko ? +pata_sil680.ko ? +pata_sl82c105.ko ? +pata_triflex.ko ? +pata_via.ko ? +pata_winbond.ko ? --- linux-2.6.32.orig/debian.master/d-i/modules-powerpc/nic-modules +++ linux-2.6.32/debian.master/d-i/modules-powerpc/nic-modules @@ -0,0 +1,152 @@ +3c359 ? +3c501 ? +3c503 ? +3c505 ? +3c507 ? +3c509 ? +3c515 ? +3c523 ? +3c527 ? +3c59x ? +8139cp ? +8139too ? +82596 ? +abyss ? +ac3200 ? +adm8211 ? +airo ? +airport ? +amd8111e ? +arc4 ? +arcnet ? +arc-rawmode ? +arc-rimi ? +arlan ? +at1700 ? +atl1 ? +atl1e ? +atl2 ? +atmel ? +atmel_pci ? +b44 ? +bcm43xx ? +bcm43xx-mac80211 ? +bmac ? +bnx2 ? +bnx2x ? +bonding ? +cassini ? +com20020 ? +com20020-pci ? +com90io ? +com90xx ? +cs89x0 ? +de2104x ? +de4x5 ? +de600 ? +de620 ? +defxx ? +depca ? +dl2k ? +dmfe ? +dummy ? +e100 ? +e1000 ? +e1000e ? +e2100 ? +eepro ? +eepro100 ? +eexpress ? +epic100 ? +eql ? +es3210 ? +eth16i ? +ewrk3 ? +fealnx ? +forcedeth ? +igb ? +hamachi ? +hermes ? +hp ? +hp100 ? +hp-plus ? +ibmtr ? +ipddp ? +ipw2100 ? +ipw2200 ? +ipw3945 ? +ixgb ? +lance ? +lanstreamer ? +lasi_82596 ? +lne390 ? +lp486e ? +mace ? +mv643xx_eth ? +myri_sbus ? +natsemi ? +ne ? +ne2 ? +ne2k-pci ? +ne3210 ? +netconsole ? +netxen_nic ? +ni5010 ? +ni52 ? +ni65 ? +niu ? +ns83820 ? +olympic ? +orinoco ? +orinoco_pci ? +orinoco_plx ? +orinoco_tmd ? +pcnet32 ? +prism54 ? +ps3_gelic ? +r8169 ? +rate_control ? +rfc1051 ? +rfc1201 ? +rrunner ? +rt2400 ? +rt2500 ? +rt61pci ? +s2io ? +shaper ? +sis190 ? +sis900 ? +spidernet ? +skfp ? +skge ? +sk98lin ? +sky2 ? +smc9194 ? +smc-ultra ? +smc-ultra32 ? +starfire ? +strip ? +sunbmac ? +sundance ? +sungem ? +sungem_phy ? +sunhme ? +sunlance ? +sunqe ? +sunvnet ? +tg3 ? +tlan ? +tms380tr ? +tmspci ? +tulip ? +tun ? +typhoon ? +uli526x ? +via-rhine ? +via-velocity ? +virtio_net ? +wavelan ? +wd ? +winbond-840 ? +yellowfin ? +znet ? --- linux-2.6.32.orig/debian.master/d-i/modules-powerpc/block-modules +++ linux-2.6.32/debian.master/d-i/modules-powerpc/block-modules @@ -0,0 +1,31 @@ +aoe +aten +bpck +bpck6 ? +cciss +comm +cpqarray ? +DAC960 +dstr +epat +epia +fit2 +fit3 +friq +frpw +kbic +ktti +nbd +on20 +on26 +paride +pcd +pd +pf +pg +ps3disk ? +ps3vram ? +pt +sx8 +umem +virtio_blk ? --- linux-2.6.32.orig/debian.master/d-i/modules-powerpc/message-modules +++ linux-2.6.32/debian.master/d-i/modules-powerpc/message-modules @@ -0,0 +1,13 @@ +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +i2o_block +i2o_bus +i2o_config ? +i2o_core +i2o_proc +i2o_scsi --- linux-2.6.32.orig/debian.master/d-i/modules-powerpc/scsi-modules +++ linux-2.6.32/debian.master/d-i/modules-powerpc/scsi-modules @@ -0,0 +1,116 @@ +# SCSI +raid_class ? +scsi_transport_spi ? +scsi_transport_fc ? +scsi_transport_iscsi ? +scsi_transport_sas ? +iscsi_tcp ? +libiscsi ? +amiga7xx ? +a3000 ? +a2091 ? +gvp11 ? +mvme147 ? +sgiwd93 ? +cyberstorm ? +cyberstormII ? +blz2060 ? +blz1230 ? +fastlane ? +oktagon_esp_mod ? +atari_scsi ? +mac_scsi ? +mac_esp ? +sun3_scsi ? +mvme16x ? +bvme6000 ? +sim710 ? +advansys ? +psi240i ? +BusLogic ? +dpt_i2o ? +u14-34f ? +ultrastor ? +aha152x ? +aha1542 ? +aha1740 ? +aic7xxx_old ? +ips ? +fd_mcs ? +fdomain ? +in2000 ? +g_NCR5380 ? +g_NCR5380_mmio ? +NCR53c406a ? +NCR_D700 ? +NCR_Q720_mod ? +sym53c416 ? +qlogicfas408 ? +qla1280 ? +pas16 ? +seagate ? +seagate ? +t128 ? +dmx3191d ? +dtc ? +zalon7xx ? +eata_pio ? +wd7000 ? +mca_53c9x ? +ibmmca ? +eata ? +dc395x ? +tmscsim ? +megaraid ? +atp870u ? +esp ? +gdth ? +initio ? +a100u2w ? +qlogicpti ? +ide-scsi ? +mesh ? +mac53c94 ? +pluto ? +dec_esp ? +3w-xxxx ? +3w-9xxx ? +ppa ? +imm ? +jazz_esp ? +sun3x_esp ? +fcal ? +lasi700 ? +nsp32 ? +ipr ? +hptiop ? +stex ? +osst ? +sg ? +ch ? +scsi_debug ? +aacraid ? +aic7xxx ? +aic79xx ? +aic94xx ? +arcmsr ? +acornscsi_mod ? +arxescsi ? +cumana_1 ? +cumana_2 ? +ecoscsi ? +oak ? +powertec ? +eesox ? +ibmvscsic ? +libsas ? +lpfc ? +megaraid_mm ? +megaraid_mbox ? +megaraid_sas ? +qla2xxx ? +sym53c8xx ? +qla4xxx ? +mvsas ? +sr_mod ? +sd_mod ? --- linux-2.6.32.orig/debian.master/d-i/modules-powerpc/storage-core-modules +++ linux-2.6.32/debian.master/d-i/modules-powerpc/storage-core-modules @@ -0,0 +1,13 @@ +# Core stacks +usb-storage ? + +# Block level + +# Loop modules +cryptoloop + +# Needs to be here for better cdrom initrd layout +isofs + +ps3stor_lib ? +ps3rom ? --- linux-2.6.32.orig/debian.master/rules.d/lpia.mk +++ linux-2.6.32/debian.master/rules.d/lpia.mk @@ -0,0 +1,10 @@ +build_arch = i386 +header_arch = i386 +asm_link = x86 +defconfig = defconfig +flavours = lpia +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +do_debug_image = true +loader = grub --- linux-2.6.32.orig/debian.master/rules.d/amd64.mk +++ linux-2.6.32/debian.master/rules.d/amd64.mk @@ -0,0 +1,12 @@ +build_arch = x86_64 +header_arch = $(build_arch) +asm_link = x86 +defconfig = defconfig +flavours = generic server preempt +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz + +server_sub = virtual + +loader = grub --- linux-2.6.32.orig/debian.master/rules.d/powerpc.mk +++ linux-2.6.32/debian.master/rules.d/powerpc.mk @@ -0,0 +1,19 @@ +build_arch = powerpc +header_arch = $(build_arch) +asm_link = $(build_arch) +defconfig = pmac32_defconfig +flavours = powerpc powerpc-smp powerpc64-smp +build_image = vmlinux +kernel_file = $(build_image) +install_file = $(build_image) + +loader = yaboot + +custom_flavours = + +no_dumpfile = true +skipdbg = true +skipabi = true +skipmodule = true + +family=ports --- linux-2.6.32.orig/debian.master/rules.d/ia64.mk +++ linux-2.6.32/debian.master/rules.d/ia64.mk @@ -0,0 +1,21 @@ +build_arch = ia64 +header_arch = $(build_arch) +asm_link = $(build_arch) +defconfig = defconfig +flavours = ia64 +build_image = vmlinux +kernel_file = $(build_image) +install_file = vmlinuz +compress_file = yes + +loader = elilo + +skipdbg = true +no_dumpfile = true +skipabi = true +skipmodule = true + +# XXX: ia64 libelf-dev/binutils-dev dependancy does not supply libraries?!? +do_tools = false + +family=ports --- linux-2.6.32.orig/debian.master/rules.d/armel.mk +++ linux-2.6.32/debian.master/rules.d/armel.mk @@ -0,0 +1,13 @@ +build_arch = arm +header_arch = arm +asm_link = arm +defconfig = defconfig +flavours = versatile +build_image = zImage +kernel_file = arch/$(build_arch)/boot/zImage +install_file = vmlinuz +no_dumpfile = true +# ARM is not a supported architecture in perf userspace +do_tools = false + +loader = grub --- linux-2.6.32.orig/debian.master/rules.d/i386.mk +++ linux-2.6.32/debian.master/rules.d/i386.mk @@ -0,0 +1,12 @@ +build_arch = i386 +header_arch = x86_64 +asm_link = x86 +defconfig = defconfig +flavours = generic generic-pae 386 +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz + +generic-pae_sub = virtual + +loader = grub --- linux-2.6.32.orig/debian.master/rules.d/sparc.mk +++ linux-2.6.32/debian.master/rules.d/sparc.mk @@ -0,0 +1,18 @@ +build_arch = sparc64 +header_arch = $(build_arch) +asm_link = $(build_arch) +defconfig = defconfig +flavours = sparc64 sparc64-smp +build_image = image +kernel_file = arch/sparc/boot/image +install_file = vmlinuz +compress_file = Yes + +loader = silo + +skipdbg = true +no_dumpfile = true +skipabi = true +skipmodule = true + +family=ports --- linux-2.6.32.orig/debian.master/config/config.common.ubuntu +++ linux-2.6.32/debian.master/config/config.common.ubuntu @@ -0,0 +1,4557 @@ +# +# Common config options automatically generated by splitconfig.pl +# +CONFIG_3C359=m +CONFIG_3C515=m +# CONFIG_4KSTACKS is not set +CONFIG_60XX_WDT=m +CONFIG_6PACK=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_8129=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_9P_FS=m +# CONFIG_9P_FSCACHE is not set +CONFIG_AB3100_CORE=m +CONFIG_AB3100_OTP=m +CONFIG_ABYSS=m +CONFIG_AC3200=m +CONFIG_AC97_BUS=m +# CONFIG_ACCESSIBILITY is not set +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_ACERHDF=m +CONFIG_ACER_WMI=m +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_ACPI=y +CONFIG_ACPI_AC=y +# CONFIG_ACPI_ASUS is not set +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_CONTAINER=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_CUSTOM_DSDT_FILE="" +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_FAN=y +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_HOTPLUG_MEMORY=m +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_PCI_SLOT=y +CONFIG_ACPI_POWER_METER=m +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_PROCFS=y +CONFIG_ACPI_PROCFS_POWER=y +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_SBS=y +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_SYSFS_POWER=y +CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_TOSHIBA=m +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_WMI=y +CONFIG_ACQUIRE_WDT=m +CONFIG_ACT200L_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_ADM8211=m +CONFIG_ADVANTECH_WDT=m +CONFIG_AEABI=y +CONFIG_AFFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FS=m +# CONFIG_AFS_FSCACHE is not set +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +CONFIG_AGP_ALI=m +CONFIG_AGP_AMD=m +CONFIG_AGP_ATI=m +CONFIG_AGP_EFFICEON=m +CONFIG_AGP_INTEL=m +CONFIG_AGP_NVIDIA=m +CONFIG_AGP_SIS=m +CONFIG_AGP_SWORKS=m +CONFIG_AGP_VIA=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_AIC79XX_RESET_DELAY_MS=5000 +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_AIO=y +CONFIG_AIRO=m +CONFIG_AIRO_CS=m +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_ALI_FIR=m +CONFIG_ALTERA_PCIE_CHDMA=m +CONFIG_AMD8111_ETH=m +CONFIG_AMD_IOMMU=y +CONFIG_AMD_IOMMU_STATS=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ANON_INODES=y +CONFIG_APM=m +# CONFIG_APM_ALLOW_INTS is not set +# CONFIG_APM_CPU_IDLE is not set +# CONFIG_APM_DISPLAY_BLANK is not set +# CONFIG_APM_DO_ENABLE is not set +CONFIG_APM_EMULATION=m +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +CONFIG_APM_POWER=m +CONFIG_APPLICOM=m +CONFIG_APRICOT=m +CONFIG_AR9170_LEDS=y +CONFIG_AR9170_USB=m +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_BCMRING is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_EBSA110 is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +# CONFIG_ARCH_EP93XX is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_GEMINI is not set +# CONFIG_ARCH_H720X is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_KIRKWOOD is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_LOKI is not set +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MEMORY_PROBE=y +# CONFIG_ARCH_MMP is not set +# CONFIG_ARCH_MSM is not set +# CONFIG_ARCH_MV78XX0 is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_NOMADIK is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_OMAP is not set +# CONFIG_ARCH_ORION5X is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_S3C64XX is not set +# CONFIG_ARCH_S5PC1XX is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set +CONFIG_ARCH_SPARSEMEM_ENABLE=y +# CONFIG_ARCH_STMP3XXX is not set +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ARCH_U300 is not set +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_VERSATILE=y +CONFIG_ARCH_VERSATILE_PB=y +# CONFIG_ARCH_W90X900 is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_ARCNET=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_CS=m +CONFIG_ARCNET_COM20020_ISA=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARLAN=m +CONFIG_ARM=y +CONFIG_ARM_AMBA=y +# CONFIG_ARM_ERRATA_430973 is not set +# CONFIG_ARM_ERRATA_458693 is not set +# CONFIG_ARM_ERRATA_460075 is not set +CONFIG_ARM_L1_CACHE_SHIFT=5 +CONFIG_ARM_THUMB=y +# CONFIG_ARM_THUMBEE is not set +CONFIG_ARM_UNWIND=y +CONFIG_ARM_VIC=y +CONFIG_ARM_VIC_NR=2 +# CONFIG_ARPD is not set +CONFIG_ASK_IP_FIB_HASH=y +CONFIG_ASUS_LAPTOP=m +CONFIG_ASUS_OLED=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_ASYNC_RAID6_TEST=m +CONFIG_ASYNC_TX_DISABLE_CHANNEL_SWITCH=y +CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y +CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y +CONFIG_ASYNC_XOR=m +CONFIG_AT1700=m +CONFIG_AT76C50X_USB=m +CONFIG_ATA=y +CONFIG_ATAGS_PROC=y +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_ACPI=y +CONFIG_ATA_GENERIC=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=y +CONFIG_ATA_SFF=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +CONFIG_ATH9K=m +CONFIG_ATH9K_DEBUG=y +CONFIG_ATH_COMMON=m +CONFIG_ATL1=m +CONFIG_ATL1C=m +CONFIG_ATL1E=m +CONFIG_ATL2=m +CONFIG_ATMEL=m +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_FORE200E=m +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_FORE200E_TX_RETRY=16 +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_LANAI=m +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_NICSTAR=m +# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set +# CONFIG_ATM_NICSTAR_USE_SUNI is not set +CONFIG_ATM_SOLOS=m +CONFIG_ATM_TCP=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATP=m +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_GENERIC=y +CONFIG_AUDIT_TREE=y +CONFIG_AUFS_BDEV_LOOP=y +# CONFIG_AUFS_BRANCH_MAX_1023 is not set +CONFIG_AUFS_BRANCH_MAX_127=y +# CONFIG_AUFS_BRANCH_MAX_32767 is not set +# CONFIG_AUFS_BRANCH_MAX_511 is not set +CONFIG_AUFS_BR_FUSE=y +CONFIG_AUFS_BR_RAMFS=y +# CONFIG_AUFS_DEBUG is not set +# CONFIG_AUFS_EXPORT is not set +CONFIG_AUFS_FS=m +CONFIG_AUFS_HINOTIFY=y +CONFIG_AUFS_POLL=y +# CONFIG_AUFS_RDU is not set +# CONFIG_AUFS_SHWH is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_AVERATEC_5100P=m +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_AX88796=m +# CONFIG_AX88796_93CX6 is not set +CONFIG_B3DFG=m +CONFIG_B43LEGACY_DEBUG=y +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +CONFIG_B43LEGACY_HWRNG=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PIO=y +# CONFIG_B43LEGACY_PIO_MODE is not set +# CONFIG_B43_DEBUG is not set +CONFIG_B43_HWRNG=y +CONFIG_B43_LEDS=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PCI_AUTOSELECT=y +# CONFIG_B43_PCMCIA is not set +CONFIG_B43_PHY_LP=y +# CONFIG_B43_SDIO is not set +CONFIG_B44_PCI=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_BACKLIGHT_CARILLO_RANCH=m +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DA903X=m +CONFIG_BACKLIGHT_GENERIC=m +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_MBP_NVIDIA=m +CONFIG_BACKLIGHT_PROGEAR=m +CONFIG_BACKLIGHT_SAHARA=m +CONFIG_BACKLIGHT_WM831X=m +# CONFIG_BACKTRACE_SELF_TEST is not set +CONFIG_BASE_FULL=y +CONFIG_BASE_SMALL=0 +CONFIG_BATTERY_BQ27x00=m +CONFIG_BATTERY_DA9030=m +CONFIG_BATTERY_DS2760=m +CONFIG_BATTERY_DS2782=m +CONFIG_BATTERY_MAX17040=m +CONFIG_BATTERY_OLPC=m +CONFIG_BAYCOM_EPP=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BE2ISCSI=m +CONFIG_BE2NET=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BINARY_PRINTF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_BITREVERSE=y +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_COMPCACHE=m +# CONFIG_BLK_DEV_COMPCACHE_DEBUG is not set +# CONFIG_BLK_DEV_COMPCACHE_STATS is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_DM=y +CONFIG_BLK_DEV_FD=m +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_MD=y +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_OSD=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_UMEM=m +# CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_XIP is not set +CONFIG_BLOCK=y +CONFIG_BLOCK_COMPAT=y +CONFIG_BNX2=m +CONFIG_BNX2X=m +CONFIG_BONDING=m +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_BOOT_TRACER is not set +CONFIG_BOUNCE=y +CONFIG_BPQETHER=m +CONFIG_BRANCH_PROFILE_NONE=y +CONFIG_BRIDGE=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_ULOG=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_NETFILTER=y +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BROADCOM_PHY=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_BSD_DISKLABEL=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIVHCI=m +CONFIG_BT_HIDP=m +CONFIG_BT_L2CAP=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_SCO=m +CONFIG_BUG=y +CONFIG_C101=m +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set +CONFIG_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_CAN=m +CONFIG_CAN_BCM=m +# CONFIG_CAN_CALC_BITTIMING is not set +# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEV=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_PM_TRACE=y +CONFIG_CAN_RAW=m +CONFIG_CAN_SJA1000=m +CONFIG_CAN_SJA1000_ISA=m +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_VCAN=m +CONFIG_CAPI_AVM=y +CONFIG_CAPI_EICON=y +CONFIG_CAPI_TRACE=y +CONFIG_CARDBUS=y +CONFIG_CARDMAN_4000=m +CONFIG_CARDMAN_4040=m +# CONFIG_CARMINE_DRAM_CUSTOM is not set +CONFIG_CASSINI=m +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +CONFIG_CC_STACKPROTECTOR=y +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_CFG80211=m +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_DEFAULT_PS=y +CONFIG_CFG80211_DEFAULT_PS_VALUE=1 +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +CONFIG_CFG80211_REG_DEBUG=y +CONFIG_CGROUPS=y +CONFIG_CGROUP_CPUACCT=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +CONFIG_CGROUP_NS=y +CONFIG_CGROUP_SCHED=y +CONFIG_CHARGER_PCF50633=m +CONFIG_CHECK_SIGNATURE=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T3_DEPENDS=y +CONFIG_CHR_DEV_OSST=m +CONFIG_CHR_DEV_SCH=m +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_ST=m +CONFIG_CICADA_PHY=y +CONFIG_CIFS=m +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_EXPERIMENTAL=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CISS_SCSI_TAPE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_CLS_U32_MARK=y +# CONFIG_CLS_U32_PERF is not set +CONFIG_CMDLINE="" +# CONFIG_CMDLINE_BOOL is not set +CONFIG_CNIC=m +CONFIG_CODA_FS=m +# CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_PCI_DRIVERS=m +CONFIG_COMEDI_PCMCIA_DRIVERS=m +CONFIG_COMEDI_USB_DRIVERS=m +CONFIG_COMMON_CLKDEV=y +CONFIG_COMPAL_LAPTOP=m +CONFIG_COMPAT=y +CONFIG_COMPAT_BINFMT_ELF=y +# CONFIG_COMPAT_BRK is not set +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +# CONFIG_COMPAT_VDSO is not set +CONFIG_COMPUTONE=m +CONFIG_CONFIGFS_FS=m +CONFIG_CONNECTOR=y +CONFIG_CONSOLE_POLL=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_CONSTRUCTORS=y +CONFIG_CONTEXT_SWITCH_TRACER=y +# CONFIG_COPS is not set +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_COSA=m +# CONFIG_CPA_DEBUG is not set +CONFIG_CPU5_WDT=m +CONFIG_CPUSETS=y +CONFIG_CPU_32=y +CONFIG_CPU_32v6K=y +CONFIG_CPU_32v7=y +CONFIG_CPU_ABRT_EV7=y +# CONFIG_CPU_BPREDICT_DISABLE is not set +CONFIG_CPU_CACHE_V7=y +CONFIG_CPU_CACHE_VIPT=y +CONFIG_CPU_COPY_V6=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y +# CONFIG_CPU_DCACHE_DISABLE is not set +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_HAS_ASID=y +# CONFIG_CPU_ICACHE_DISABLE is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_PABRT_V7=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_CYRIX_32=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_CPU_SUP_UMC_32=y +CONFIG_CPU_TLB_V7=y +CONFIG_CPU_V7=y +CONFIG_CRAMFS=m +CONFIG_CRASH_DUMP=y +CONFIG_CRC16=y +CONFIG_CRC32=y +CONFIG_CRC7=m +CONFIG_CRC_CCITT=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC_T10DIF=y +CONFIG_CRYPTO=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_AES_X86_64=m +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CRC32C_INTEL=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_CTR=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DEV_GEODE=m +CONFIG_CRYPTO_DEV_HIFN_795X=m +CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y +CONFIG_CRYPTO_DEV_PADLOCK=y +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_FIPS=y +CONFIG_CRYPTO_FPU=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_PCOMP=y +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_RNG=m +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SALSA20_586=m +CONFIG_CRYPTO_SALSA20_X86_64=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_586=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_X86_64=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_ZLIB=m +CONFIG_CS5535_GPIO=m +CONFIG_CS89x0=m +CONFIG_CUSE=m +CONFIG_CYCLADES=m +CONFIG_CYCLADES_SYNC=m +CONFIG_CYCLOMX_X25=y +# CONFIG_CYZ_INTR is not set +CONFIG_DAB=y +CONFIG_DAVICOM_PHY=y +CONFIG_DCA=m +CONFIG_DCB=y +CONFIG_DCDBAS=m +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_DE4X5=m +CONFIG_DE600=m +CONFIG_DE620=m +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_CREDENTIALS is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_DRIVER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FS=y +# CONFIG_DEBUG_GPIO is not set +# CONFIG_DEBUG_HIGHMEM is not set +# CONFIG_DEBUG_ICEDCC is not set +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_NX_TEST is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_DEBUG_PREEMPT=y +CONFIG_DEBUG_RODATA=y +# CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DECNET=m +CONFIG_DECNET_NF_GRABULATOR=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_BIC is not set +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_HTCP is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=1 +# CONFIG_DEFAULT_NOOP is not set +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_SECURITY="apparmor" +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_DEFAULT_VEGAS is not set +# CONFIG_DEFAULT_WESTWOOD is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_DELL_LAPTOP=m +CONFIG_DELL_RBU=m +CONFIG_DELL_WMI=m +CONFIG_DEPCA=m +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_DEVKMEM is not set +CONFIG_DEVPORT=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEV_APPLETALK=m +CONFIG_DE_AOC=y +CONFIG_DIGIEPCA=m +CONFIG_DIRECT_GBPAGES=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +CONFIG_DISPLAY_SUPPORT=m +# CONFIG_DL2K is not set +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set +# CONFIG_DM9000 is not set +CONFIG_DM9102=m +CONFIG_DMADEVICES=y +# CONFIG_DMAR is not set +# CONFIG_DMATEST is not set +# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMA_ENGINE=y +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DM_CRYPT=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_LOG_USERSPACE is not set +CONFIG_DM_MIRROR=y +CONFIG_DM_MULTIPATH=y +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_RAID45=m +CONFIG_DM_SNAPSHOT=y +CONFIG_DM_UEVENT=y +CONFIG_DM_ZERO=m +CONFIG_DNET=m +CONFIG_DNOTIFY=y +CONFIG_DONGLE=y +CONFIG_DOUBLEFAULT=y +CONFIG_DRAGONRISE_FF=y +CONFIG_DRM=m +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I810=m +CONFIG_DRM_I830=m +CONFIG_DRM_I915=m +CONFIG_DRM_I915_KMS=y +CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_MGA=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +CONFIG_DRM_NOUVEAU_DEBUG=y +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON_KMS=y +CONFIG_DRM_SAVAGE=m +CONFIG_DRM_SIS=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_TTM=m +CONFIG_DRM_VIA=m +CONFIG_DS1682=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DST=m +# CONFIG_DST_DEBUG is not set +CONFIG_DTLK=m +CONFIG_DUMMY=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_DVB_AF9013=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_B2C2_FLEXCOP=m +# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_BT8XX=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET_PATCH=m +CONFIG_DVB_CAPTURE_DRIVERS=y +CONFIG_DVB_CORE=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_DIB8000=m +CONFIG_DVB_DM1105=m +CONFIG_DVB_DYNAMIC_MINORS=y +# CONFIG_DVB_FE_CUSTOMISE is not set +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_IEEE1394=y +CONFIG_DVB_FIREDTV_INPUT=y +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_L64781=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_MT312=m +CONFIG_DVB_MT352=m +CONFIG_DVB_NXT200X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_PLL=m +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_PT1=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_S5H1411=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STV0297=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA8261=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_USB=m +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_CXUSB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_DIBUSB_MB=m +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_FRIIO=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_VES1820=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_ZL10353=m +CONFIG_DX_SEP=m +# CONFIG_DYNAMIC_DEBUG is not set +CONFIG_DYNAMIC_FTRACE=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E2100=m +CONFIG_EARLY_PRINTK=y +# CONFIG_EARLY_PRINTK_DBGP is not set +CONFIG_ECHO=m +CONFIG_ECONET=m +CONFIG_ECONET_AUNUDP=y +CONFIG_ECONET_NATIVE=y +CONFIG_ECRYPT_FS=y +CONFIG_EDAC=y +CONFIG_EDAC_AMD64=m +# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set +CONFIG_EDAC_AMD76X=m +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_E7XXX=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I5100=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I82860=m +CONFIG_EDAC_I82875P=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_MM_EDAC=m +CONFIG_EDAC_R82600=m +CONFIG_EDAC_X38=m +CONFIG_EDD=y +CONFIG_EDD_OFF=y +CONFIG_EEEPC_LAPTOP=m +CONFIG_EEPROM_93CX6=m +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_EFI=y +CONFIG_EFI_PARTITION=y +CONFIG_EFI_VARS=y +CONFIG_EFS_FS=m +CONFIG_EISA=y +CONFIG_EISA_NAMES=y +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +CONFIG_EISA_VLB_PRIMING=y +CONFIG_EL1=m +CONFIG_EL16=m +CONFIG_EL2=m +CONFIG_EL3=m +CONFIG_ELF_CORE=y +CONFIG_ELMC=m +CONFIG_ELMC_II=m +CONFIG_ELPLUS=m +# CONFIG_EMBEDDED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENC28J60 is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ENIC=m +CONFIG_EPIC100=m +CONFIG_EPOLL=y +CONFIG_EQUALIZER=m +CONFIG_ES3210=m +CONFIG_ESI_DONGLE=m +CONFIG_ET131X=m +# CONFIG_ET131X_DEBUG is not set +CONFIG_ETH16I=m +CONFIG_ETHOC=m +CONFIG_EUROTECH_WDT=m +CONFIG_EVENTFD=y +CONFIG_EVENT_PROFILE=y +CONFIG_EVENT_TRACING=y +CONFIG_EWRK3=m +# CONFIG_EXOFS_DEBUG is not set +CONFIG_EXOFS_FS=m +CONFIG_EXPERIMENTAL=y +CONFIG_EXPORTFS=m +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_DEFAULTS_TO_ORDERED=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_EZX_PCAP is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FARSYNC=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_FAT_FS=m +# CONFIG_FAULT_INJECTION is not set +CONFIG_FB=y +CONFIG_FB_3DFX=m +# CONFIG_FB_3DFX_ACCEL is not set +CONFIG_FB_3DFX_I2C=y +CONFIG_FB_ARC=m +CONFIG_FB_ARK=m +CONFIG_FB_ARMCLCD=y +CONFIG_FB_ASILIANT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_BROADSHEET=m +CONFIG_FB_CARILLO_RANCH=m +CONFIG_FB_CARMINE=m +CONFIG_FB_CARMINE_DRAM_EVAL=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_CIRRUS=m +CONFIG_FB_CYBER2000=m +CONFIG_FB_DDC=m +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_EFI=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_GX=m +CONFIG_FB_GEODE_GX1=m +CONFIG_FB_GEODE_LX=m +CONFIG_FB_HECUBA=m +CONFIG_FB_HGA=m +# CONFIG_FB_HGA_ACCEL is not set +CONFIG_FB_I810=m +# CONFIG_FB_I810_GTF is not set +CONFIG_FB_IMSTT=y +CONFIG_FB_KYRO=m +CONFIG_FB_LE80578=m +# CONFIG_FB_MACMODES is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_METRONOME=m +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_N411=m +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_PM3=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RIVA=m +CONFIG_FB_RIVA_BACKLIGHT=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_I2C=y +CONFIG_FB_S3=m +CONFIG_FB_SAVAGE_ACCEL=y +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_SM501=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_TMIO=m +CONFIG_FB_TMIO_ACCELL=y +CONFIG_FB_TRIDENT=m +CONFIG_FB_UDL=m +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=m +CONFIG_FB_VGA16=m +CONFIG_FB_VIA=m +# CONFIG_FB_VIRTUAL is not set +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIB_RULES=y +CONFIG_FILE_LOCKING=y +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NET=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_OHCI_DEBUG=y +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIRMWARE_EDID=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_FIXED_PHY=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_FONT_10x18 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y +CONFIG_FONT_ACORN_8x8=y +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_SUN8x16 is not set +CONFIG_FORCEDETH=m +# CONFIG_FORCEDETH_NAPI is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FRAME_POINTER=y +CONFIG_FRAME_WARN=1024 +CONFIG_FREEZER=y +CONFIG_FSCACHE=m +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +# CONFIG_FSCACHE_STATS is not set +CONFIG_FSNOTIFY=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FTRACE=y +CONFIG_FTRACE_MCOUNT_RECORD=y +CONFIG_FTRACE_NMI_ENTER=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_FTRACE_SYSCALLS is not set +CONFIG_FUJITSU_LAPTOP=m +# CONFIG_FUJITSU_LAPTOP_DEBUG is not set +CONFIG_FUNCTION_GRAPH_TRACER=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_FUNCTION_TRACER=y +CONFIG_FUSE_FS=y +CONFIG_FUSION=y +CONFIG_FUSION_CTL=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_LAN=m +CONFIG_FUSION_LOGGING=y +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_SAS=m +CONFIG_FUSION_SPI=m +CONFIG_FUTEX=y +CONFIG_FW_LOADER=y +CONFIG_GACT_PROB=y +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GARP=m +CONFIG_GART_IOMMU=y +# CONFIG_GCOV_KERNEL is not set +CONFIG_GENERIC_ACL=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_TRACER=y +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +CONFIG_GIGASET_BASE=m +# CONFIG_GIGASET_DEBUG is not set +CONFIG_GIGASET_M101=m +CONFIG_GIGASET_M105=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_GPIOLIB=y +# CONFIG_GPIO_BT8XX is not set +CONFIG_GPIO_LANGWELL=y +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MAX732X=m +CONFIG_GPIO_MC33880=m +CONFIG_GPIO_MCP23S08=m +CONFIG_GPIO_PCA953X=m +CONFIG_GPIO_PCF857X=m +# CONFIG_GPIO_PL061 is not set +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_UCB1400=y +CONFIG_GPIO_WM831X=m +CONFIG_GREENASIA_FF=y +CONFIG_GROUP_SCHED=y +CONFIG_HAMACHI=m +CONFIG_HAMRADIO=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_HAPPYMEAL=m +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_TLS_REG=y +CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FTRACE_NMI_ENTER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_IDE=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_KVM=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_MLOCKED_PAGE_BIT=y +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_HAVE_MTD_OTP=y +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_HDLC=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_X25=m +# CONFIG_HEADERS_CHECK is not set +CONFIG_HERMES=m +CONFIG_HERMES_CACHE_FW_ON_INIT=y +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +CONFIG_HIBERNATION=y +CONFIG_HIBERNATION_NVS=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_3M_PCT=m +CONFIG_HID_A4TECH=m +CONFIG_HID_APPLE=m +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_HID_EZKEY=m +CONFIG_HID_GREENASIA=m +CONFIG_HID_GYRATION=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_KYE=m +CONFIG_HID_LOGITECH=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MOSART=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_HID_PETALYNX=m +CONFIG_HID_PID=y +CONFIG_HID_QUANTA=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_HID_SONY=m +CONFIG_HID_STANTUM=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID_THRUSTMASTER=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_WACOM=m +CONFIG_HID_ZEROPLUS=m +CONFIG_HIGHMEM=y +CONFIG_HIGHPTE=y +CONFIG_HIPPI=y +CONFIG_HISAX_16_0=y +CONFIG_HISAX_16_3=y +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_ASUSCOM=y +CONFIG_HISAX_AVM_A1=y +CONFIG_HISAX_AVM_A1_CS=m +CONFIG_HISAX_AVM_A1_PCMCIA=y +CONFIG_HISAX_BKM_A4T=y +# CONFIG_HISAX_DEBUG is not set +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_ELSA_CS=m +CONFIG_HISAX_ENTERNOW_PCI=y +CONFIG_HISAX_EURO=y +CONFIG_HISAX_FRITZPCI=y +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_HFC4S8S=m +CONFIG_HISAX_HFCS=y +CONFIG_HISAX_HFCUSB=m +CONFIG_HISAX_HFC_PCI=y +CONFIG_HISAX_HFC_SX=y +CONFIG_HISAX_HSTSAPHIR=y +CONFIG_HISAX_ISURF=y +CONFIG_HISAX_IX1MICROR2=y +CONFIG_HISAX_MAX_CARDS=8 +CONFIG_HISAX_MIC=y +CONFIG_HISAX_NETJET=y +CONFIG_HISAX_NETJET_U=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_NICCY=y +# CONFIG_HISAX_NO_KEYPAD is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_SEDLBAUER_CS=m +CONFIG_HISAX_SPORTSTER=y +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_TELEINT=y +CONFIG_HISAX_TELESPCI=y +CONFIG_HISAX_TELES_CS=m +CONFIG_HISAX_W6692=y +CONFIG_HOSTAP=m +CONFIG_HOSTAP_CS=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PCI=m +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTESS_SV11=m +CONFIG_HOTPLUG=y +CONFIG_HOTPLUG_CPU=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=m +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_COMPAQ=m +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_FAKE=m +CONFIG_HOTPLUG_PCI_IBM=m +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_HOTPLUG_PCI_SHPC=m +CONFIG_HP100=m +CONFIG_HPET=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_HPET_MMAP=y +CONFIG_HPET_TIMER=y +CONFIG_HPFS_FS=m +CONFIG_HPLAN=m +CONFIG_HPLAN_PLUS=m +CONFIG_HP_ILO=m +# CONFIG_HP_WATCHDOG is not set +CONFIG_HP_WMI=m +# CONFIG_HTC_EGPIO is not set +CONFIG_HTC_PASIC3=m +CONFIG_HT_IRQ=y +CONFIG_HUGETLBFS=y +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_HWMON_VID=m +# CONFIG_HWPOISON_INJECT is not set +CONFIG_HW_CONSOLE=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_AMD=m +CONFIG_HW_RANDOM_GEODE=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_VIA=m +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_HYPERV=m +CONFIG_HYPERV_BLOCK=m +CONFIG_HYPERV_NET=m +CONFIG_HYPERV_STORAGE=m +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +# CONFIG_HZ_300 is not set +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_COMPAT=y +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set +# CONFIG_I2C_DEBUG_CORE is not set +CONFIG_I2C_DESIGNWARE=m +CONFIG_I2C_GPIO=m +# CONFIG_I2C_HELPER_AUTO is not set +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PCA_ISA=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_SCMI=m +CONFIG_I2C_SI470X=m +CONFIG_I2C_SI4713=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_STUB=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VERSATILE=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VOODOO3=m +CONFIG_I2O=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_BUS=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_CONFIG_OLD_IOCTL=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_EXT_ADAPTEC_DMA64=y +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_PROC=m +CONFIG_I2O_SCSI=m +CONFIG_I6300ESB_WDT=m +CONFIG_I7300_IDLE=m +CONFIG_I7300_IDLE_IOAT_CHANNEL=y +CONFIG_I82092=m +CONFIG_I82365=m +CONFIG_I8K=m +# CONFIG_IA32_AOUT is not set +CONFIG_IA32_EMULATION=y +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_IBMLANA=m +CONFIG_IBMLS=m +# CONFIG_IBMMCA_SCSI_DEV_RESET is not set +CONFIG_IBMMCA_SCSI_ORDER_STANDARD=y +CONFIG_IBMOL=m +CONFIG_IBMTR=m +CONFIG_IBM_ASM=m +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +CONFIG_ICPLUS_PHY=y +CONFIG_ICS932S401=m +CONFIG_ICST307=y +# CONFIG_IDE is not set +CONFIG_IDE_PHISON=m +CONFIG_IEEE1394=m +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_ETH1394=m +CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y +CONFIG_IEEE1394_OHCI1394=m +CONFIG_IEEE1394_PCILYNX=m +CONFIG_IEEE1394_RAWIO=m +CONFIG_IEEE1394_SBP2=m +# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set +# CONFIG_IEEE1394_VERBOSEDEBUG is not set +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE802154=m +CONFIG_IEEE802154_DRIVERS=m +# CONFIG_IEEE802154_FAKEHARD is not set +CONFIG_IFB=m +CONFIG_IGB=m +CONFIG_IGBVF=m +CONFIG_IGB_DCA=y +CONFIG_IIO=m +# CONFIG_IIO_RING_BUFFER is not set +# CONFIG_IIO_TRIGGER is not set +# CONFIG_IKCONFIG is not set +# CONFIG_IMA is not set +CONFIG_INET=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET_AH=m +CONFIG_INET_DCCP_DIAG=m +CONFIG_INET_DIAG=y +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_LRO=y +CONFIG_INET_TCP_DIAG=y +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_AMSO1100=m +CONFIG_INFINIBAND_AMSO1100_DEBUG=y +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_IPATH=m +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y +# CONFIG_INFINIBAND_NES is not set +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFTL=m +CONFIG_INITRAMFS_SOURCE="" +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_INPUT=y +# CONFIG_INPUT_APANEL is not set +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_EVBUG=m +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_GPIO=m +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +CONFIG_INPUT_KEYBOARD=y +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MOUSE=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_PCF50633_PMU=m +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TWL4030_PWRBUTTON=m +CONFIG_INPUT_UINPUT=m +CONFIG_INPUT_WINBOND_CIR=m +CONFIG_INPUT_WISTRON_BTNS=m +CONFIG_INPUT_WM831X_ON=m +CONFIG_INPUT_YEALINK=m +CONFIG_INTEL_IOATDMA=m +CONFIG_INTEL_MENLOW=m +# CONFIG_INTR_REMAP is not set +# CONFIG_IOMMU_DEBUG is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_CFQ=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_NOOP=y +# CONFIG_IO_DELAY_0X80 is not set +CONFIG_IO_DELAY_0XED=y +# CONFIG_IO_DELAY_NONE is not set +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +# CONFIG_IO_DELAY_UDELAY is not set +CONFIG_IP1000=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IPC_NS=y +CONFIG_IPDDP=m +CONFIG_IPDDP_DECAP=y +CONFIG_IPDDP_ENCAP=y +CONFIG_IPMI_DEVICE_INTERFACE=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_POWEROFF=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPPP_FILTER=y +CONFIG_IPV6=y +# CONFIG_IPV6_MIP6 is not set +# CONFIG_IPV6_MROUTE is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_IPV6_PRIVACY=y +# CONFIG_IPV6_ROUTER_PREF is not set +CONFIG_IPV6_SIT=m +# CONFIG_IPV6_SUBTREES is not set +CONFIG_IPV6_TUNNEL=m +CONFIG_IPW2100=m +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2100_MONITOR=y +CONFIG_IPW2200=m +# CONFIG_IPW2200_DEBUG is not set +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPWIRELESS=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_DCCP=m +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +CONFIG_IP_DCCP_CCID3=y +# CONFIG_IP_DCCP_CCID3_DEBUG is not set +CONFIG_IP_DCCP_CCID3_RTO=100 +# CONFIG_IP_DCCP_DEBUG is not set +CONFIG_IP_DCCP_TFRC_LIB=y +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_FIB_TRIE is not set +CONFIG_IP_MROUTE=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_IP_PNP is not set +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_SCTP=m +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_IPV6=y +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_TAB_BITS=12 +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_WRR=m +CONFIG_IRCOMM=m +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_DEBUG=y +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_ULTRA=y +CONFIG_IRLAN=m +CONFIG_IRNET=m +# CONFIG_IRQSOFF_TRACER is not set +CONFIG_IRTTY_SIR=m +CONFIG_ISA=y +CONFIG_ISAPNP=y +CONFIG_ISA_DMA_API=y +CONFIG_ISCSI_IBFT=m +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_TCP=m +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m +CONFIG_ISDN_CAPI_CAPIFS=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_MAINT=m +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVERSION=m +CONFIG_ISDN_DRV_ACT2000=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_C4=m +CONFIG_ISDN_DRV_AVMB1_T1ISA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_ISDN_DRV_HISAX=m +CONFIG_ISDN_DRV_ICN=m +CONFIG_ISDN_DRV_PCBIT=m +CONFIG_ISDN_DRV_SC=m +CONFIG_ISDN_HDLC=m +CONFIG_ISDN_I4L=m +CONFIG_ISDN_MPP=y +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_BSDCOMP=m +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_TTY_FAX=y +CONFIG_ISDN_X25=y +# CONFIG_ISI is not set +CONFIG_ISL29003=m +CONFIG_ISO9660_FS=m +CONFIG_ISTALLION=m +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_ITCO_WDT=m +CONFIG_IWL3945=m +CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y +CONFIG_IWL4965=y +CONFIG_IWL5000=y +CONFIG_IWLAGN=m +CONFIG_IWLWIFI=m +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_LEDS=y +# CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT is not set +CONFIG_IWM=m +# CONFIG_IWM_DEBUG is not set +CONFIG_IXGB=m +CONFIG_IXGBE=m +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_JBD=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_JFFS2_CMODE_FAVOURLZO=y +# CONFIG_JFFS2_CMODE_NONE is not set +# CONFIG_JFFS2_CMODE_PRIORITY is not set +# CONFIG_JFFS2_CMODE_SIZE is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_SUMMARY is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFS_DEBUG is not set +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +CONFIG_JFS_STATISTICS=y +CONFIG_JME=m +CONFIG_JOLIET=y +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_232=y +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_WALKERA0701=m +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_K8_NB=y +CONFIG_K8_NUMA=y +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_KARMA_PARTITION=y +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +CONFIG_KEXEC=y +CONFIG_KEXEC_JUMP=y +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_LM8323=m +CONFIG_KEYBOARD_MATRIX=m +CONFIG_KEYBOARD_MAX7359=m +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_TWL4030=m +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +CONFIG_KGDB=y +CONFIG_KGDB_SERIAL_CONSOLE=y +# CONFIG_KGDB_TESTS is not set +CONFIG_KINGSUN_DONGLE=m +# CONFIG_KMEMTRACE is not set +CONFIG_KPROBES=y +# CONFIG_KPROBES_SANITY_TEST is not set +CONFIG_KRETPROBES=y +CONFIG_KS0108=m +CONFIG_KS0108_DELAY=2 +CONFIG_KS0108_PORT=0x378 +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_KS959_DONGLE=m +CONFIG_KSDAZZLE_DONGLE=m +CONFIG_KSM=y +CONFIG_KVM=m +CONFIG_KVM_AMD=m +CONFIG_KVM_APIC_ARCHITECTURE=y +CONFIG_KVM_CLOCK=y +CONFIG_KVM_GUEST=y +CONFIG_KVM_INTEL=m +CONFIG_KXSD9=m +CONFIG_LANCE=m +CONFIG_LANMEDIA=m +CONFIG_LAPBETHER=m +CONFIG_LATENCYTOP=y +CONFIG_LBDAF=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_PLATFORM=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +# CONFIG_LDM_DEBUG is not set +CONFIG_LDM_PARTITION=y +CONFIG_LEDS=y +CONFIG_LEDS_ALIX2=m +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_CLASS=m +# CONFIG_LEDS_CLEVO_MAIL is not set +CONFIG_LEDS_CPU=y +CONFIG_LEDS_DA903X=m +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_DELL_NETBOOKS=m +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_GPIO_PLATFORM=y +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_NET48XX=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_WRAP=m +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=0 +# CONFIG_LGUEST is not set +# CONFIG_LGUEST_GUEST is not set +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +CONFIG_LIB80211_CRYPT_WEP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_LIBCRC32C=m +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_CS=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_SPI=m +CONFIG_LIBERTAS_THINFIRM=m +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_LIBIPW=m +CONFIG_LIBIPW_DEBUG=y +CONFIG_LINE6_USB=m +CONFIG_LIRC_ATIUSB=m +CONFIG_LIRC_BT829=m +CONFIG_LIRC_CONFIG_LIRC_WPC8769L=m +CONFIG_LIRC_DEV=m +CONFIG_LIRC_ENE0100=m +# CONFIG_LIRC_GPIO is not set +CONFIG_LIRC_I2C=m +CONFIG_LIRC_IGORPLUGUSB=m +CONFIG_LIRC_IMON=m +CONFIG_LIRC_IT87=m +CONFIG_LIRC_ITE8709=m +CONFIG_LIRC_MCEUSB=m +# CONFIG_LIRC_PARALLEL is not set +CONFIG_LIRC_SASEM=m +CONFIG_LIRC_SERIAL=m +CONFIG_LIRC_SIR=m +CONFIG_LIRC_STREAMZAP=m +CONFIG_LIRC_TTUSBIR=m +CONFIG_LIS3L02DQ=m +CONFIG_LITELINK_DONGLE=m +# CONFIG_LKDTM is not set +CONFIG_LLC=y +CONFIG_LNE390=m +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_LOCKD=m +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_LOCKD_V4=y +CONFIG_LOCK_KERNEL=y +# CONFIG_LOCK_STAT is not set +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGITECH_FF=y +# CONFIG_LOGO is not set +CONFIG_LP486E=m +# CONFIG_LP_CONSOLE is not set +CONFIG_LSI_ET1011C_PHY=y +CONFIG_LSM_MMAP_MIN_ADDR=0 +CONFIG_LTPC=m +CONFIG_LXT_PHY=y +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_M25PXX_USE_FAST_READ=y +# CONFIG_M386 is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +CONFIG_MA600_DONGLE=m +CONFIG_MAC80211=m +CONFIG_MAC80211_DEBUGFS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_HWSIM=m +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_RC_DEFAULT="minstrel" +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +# CONFIG_MAC80211_RC_DEFAULT_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MACHZ_WDT=m +CONFIG_MACH_VERSATILE_AB=y +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MACVLAN=m +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_MAC_PARTITION=y +CONFIG_MADGEMC=m +CONFIG_MAGIC_SYSRQ=y +CONFIG_MARVELL_PHY=y +# CONFIG_MATH_EMULATION is not set +# CONFIG_MATOM is not set +CONFIG_MAX1363=m +# CONFIG_MAXSMP is not set +CONFIG_MAX_RAW_DEVS=256 +CONFIG_MCA=y +CONFIG_MCA_LEGACY=y +# CONFIG_MCA_PROC_FS is not set +# CONFIG_MCORE2 is not set +CONFIG_MCP2120_DONGLE=m +# CONFIG_MCRUSOE is not set +CONFIG_MCS_FIR=m +# CONFIG_MCYRIXIII is not set +CONFIG_MD=y +CONFIG_MDA_CONSOLE=m +CONFIG_MDIO=m +CONFIG_MDIO_BITBANG=y +CONFIG_MDIO_GPIO=y +CONFIG_MD_AUTODETECT=y +CONFIG_MD_FAULTY=m +CONFIG_MD_LINEAR=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_RAID6_PQ=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_TUNER=m +# CONFIG_MEDIA_TUNER_CUSTOMISE is not set +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA18271=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC5000=m +# CONFIG_MEFFICEON is not set +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY_FAILURE=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_TIFM_MS=m +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +# CONFIG_MEMTEST is not set +# CONFIG_MFD_ASIC3 is not set +CONFIG_MFD_CORE=m +CONFIG_MFD_MC13783=m +CONFIG_MFD_PCF50633=m +CONFIG_MFD_SM501=m +# CONFIG_MFD_SM501_GPIO is not set +# CONFIG_MFD_T7L66XB is not set +# CONFIG_MFD_TC6387XB is not set +# CONFIG_MFD_TC6393XB is not set +# CONFIG_MFD_TMIO is not set +CONFIG_MFD_WM831X=m +CONFIG_MFD_WM8350=m +CONFIG_MFD_WM8350_I2C=m +CONFIG_MFD_WM8400=m +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +CONFIG_MG_DISK=m +CONFIG_MG_DISK_RES=0 +CONFIG_MICROCODE=m +CONFIG_MICROCODE_AMD=y +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_MIGRATION=y +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MISC_DEVICES=y +CONFIG_MISC_FILESYSTEMS=y +CONFIG_MISDN=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m +CONFIG_MISDN_L1OIP=m +CONFIG_MISDN_NETJET=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_W6692=m +CONFIG_MIXCOMWD=m +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +CONFIG_MKISS=m +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_MLX4_EN=m +CONFIG_MLX4_INFINIBAND=m +CONFIG_MMC=y +CONFIG_MMC_ARMMMCI=y +# CONFIG_MMC_AT91 is not set +# CONFIG_MMC_ATMELMCI is not set +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_MMC_CB710=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_RICOH_MMC=m +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_SPI=m +# CONFIG_MMC_TEST is not set +CONFIG_MMC_TIFM_SD=m +# CONFIG_MMC_UNSAFE_RESUME is not set +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_WBSD=m +CONFIG_MMIOTRACE=y +# CONFIG_MMIOTRACE_TEST is not set +CONFIG_MMU=y +CONFIG_MMU_NOTIFIER=y +CONFIG_MM_OWNER=y +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MOUSE_APPLETOUCH=m +# CONFIG_MOUSE_ATIXL is not set +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_GPIO=m +CONFIG_MOUSE_INPORT=m +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_OLPC=y +CONFIG_MOUSE_PS2_SENTELIC=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +# CONFIG_MPENTIUM4 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPSC is not set +CONFIG_MSDOS_FS=m +CONFIG_MSDOS_PARTITION=y +CONFIG_MSI_LAPTOP=m +CONFIG_MSNDCLAS_INIT_FILE="/etc/sound/msndinit.bin" +CONFIG_MSNDCLAS_PERM_FILE="/etc/sound/msndperm.bin" +CONFIG_MSNDPIN_INIT_FILE="/etc/sound/pndspini.bin" +CONFIG_MSNDPIN_PERM_FILE="/etc/sound/pndsperm.bin" +CONFIG_MSPRO_BLOCK=m +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTDRAM_TOTAL_SIZE=4096 +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_ALAUDA=m +CONFIG_MTD_AMD76XROM=m +CONFIG_MTD_AR7_PARTS=m +CONFIG_MTD_ARM_INTEGRATOR=y +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_BLOCK_RO=m +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY 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_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_NOSWAP=y +CONFIG_MTD_CK804XROM=m +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_DATAFLASH_OTP=y +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_DOCECC=m +CONFIG_MTD_DOCPROBE=m +CONFIG_MTD_DOCPROBE_ADDRESS=0 +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +CONFIG_MTD_ESB2ROM=m +CONFIG_MTD_GPIO_ADDR=m +CONFIG_MTD_ICHXROM=m +CONFIG_MTD_INTEL_VR_NOR=m +CONFIG_MTD_L440GX=m +CONFIG_MTD_LPDDR=m +CONFIG_MTD_M25P80=m +CONFIG_MTD_MAP_BANK_WIDTH_1=y +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +CONFIG_MTD_NAND_CAFE=m +CONFIG_MTD_NAND_CS553X=m +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND_IDS=m +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_PLATFORM=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +CONFIG_MTD_NETSC520=m +CONFIG_MTD_NETtel=m +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_ONENAND_GENERIC=m +# CONFIG_MTD_ONENAND_OTP is not set +CONFIG_MTD_ONENAND_SIM=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_OOPS=m +# CONFIG_MTD_OTP is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_PCI=m +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_QINFO_PROBE=m +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +CONFIG_MTD_SBC_GXX=m +CONFIG_MTD_SC520CDP=m +CONFIG_MTD_SCB2_FLASH=m +CONFIG_MTD_SCx200_DOCFLASH=m +CONFIG_MTD_SST25L=m +CONFIG_MTD_TESTS=m +CONFIG_MTD_TS5500=m +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_BEB_RESERVE=1 +# CONFIG_MTD_UBI_DEBUG is not set +CONFIG_MTD_UBI_GLUEBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +# CONFIG_MULTICORE_RAID456 is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +CONFIG_MWAVE=m +# CONFIG_MWINCHIP3D is not set +# CONFIG_MWINCHIPC6 is not set +CONFIG_MWL8K=m +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_N2=m +CONFIG_NAMESPACES=y +CONFIG_NATIONAL_PHY=y +CONFIG_NATSEMI=m +CONFIG_NCPFS_EXTRAS=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_PACKET_SIGNING=y +# CONFIG_NCPFS_SMALLDOS is not set +CONFIG_NCPFS_STRONG=y +CONFIG_NCP_FS=m +CONFIG_NE2000=m +CONFIG_NE2K_PCI=m +CONFIG_NE2_MCA=m +CONFIG_NE3210=m +CONFIG_NEED_MULTIPLE_NODES=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_NEON=y +CONFIG_NET=y +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETDEVICES=y +CONFIG_NETDEV_1000=y +CONFIG_NETDEV_10000=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETLABEL=y +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NETROM=m +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NETWORK_SECMARK=y +CONFIG_NETXEN_NIC=m +CONFIG_NET_9P=m +# CONFIG_NET_9P_DEBUG is not set +CONFIG_NET_9P_RDMA=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_ACT_GACT=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_CLS=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_CGROUP=y +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_FW=m +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_DCCPPROBE=m +CONFIG_NET_DMA=y +# CONFIG_NET_DROP_MONITOR is not set +CONFIG_NET_DSA=y +CONFIG_NET_DSA_MV88E6060=y +CONFIG_NET_DSA_MV88E6123_61_65=y +CONFIG_NET_DSA_MV88E6131=y +CONFIG_NET_DSA_MV88E6XXX=y +CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y +CONFIG_NET_DSA_TAG_DSA=y +CONFIG_NET_DSA_TAG_EDSA=y +CONFIG_NET_DSA_TAG_TRAILER=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_ETHERNET=y +CONFIG_NET_FC=y +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_NET_IPIP=m +CONFIG_NET_ISA=y +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_NET_NS=y +CONFIG_NET_PCI=y +CONFIG_NET_PCMCIA=y +CONFIG_NET_PKTGEN=m +CONFIG_NET_POCKET=y +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_NET_SB1000=m +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_FIFO=y +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_TCPPROBE=m +CONFIG_NET_TULIP=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NET_VENDOR_SMC=y +CONFIG_NEW_LEDS=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_NFS_FS=m +# CONFIG_NFS_FSCACHE is not set +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +CONFIG_NFTL_RW=y +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_PROTO_DCCP=m +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_PROTO_DCCP=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PROTO_SCTP=m +CONFIG_NF_NAT_PROTO_UDPLITE=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NI52=m +CONFIG_NI65=m +CONFIG_NILFS2_FS=m +CONFIG_NIU=m +CONFIG_NL80211_TESTMODE=y +CONFIG_NLATTR=y +CONFIG_NLS=y +CONFIG_NLS_ASCII=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +CONFIG_NODES_SHIFT=6 +CONFIG_NODES_SPAN_OTHER_NODES=y +# CONFIG_NOHIGHMEM is not set +CONFIG_NOP_TRACER=y +CONFIG_NOP_USB_XCEIV=m +CONFIG_NORTEL_HERMES=m +CONFIG_NOZOMI=m +CONFIG_NS83820=m +CONFIG_NSC_FIR=m +CONFIG_NSC_GPIO=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_FS=m +# CONFIG_NTFS_RW is not set +CONFIG_NUMA=y +# CONFIG_NUMA_EMU is not set +CONFIG_NUMA_IRQ_DESC=y +CONFIG_NVRAM=m +CONFIG_N_HDLC=m +CONFIG_OABI_COMPAT=y +# CONFIG_OCFS2_DEBUG_FS is not set +CONFIG_OCFS2_DEBUG_MASKLOG=y +CONFIG_OCFS2_FS=m +CONFIG_OCFS2_FS_O2CB=m +CONFIG_OCFS2_FS_POSIX_ACL=y +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_OLPC=y +CONFIG_OMFS_FS=m +CONFIG_OMNIBOOK=m +CONFIG_OPROFILE=m +CONFIG_OPROFILE_ARMV7=y +# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set +CONFIG_OPROFILE_IBS=y +CONFIG_OPTIMIZE_INLINING=y +CONFIG_OSF_PARTITION=y +# CONFIG_OTUS is not set +CONFIG_P54_COMMON=m +CONFIG_P54_LEDS=y +CONFIG_P54_PCI=m +CONFIG_P54_SPI=m +CONFIG_P54_USB=m +CONFIG_PACKARDBELL_E5=m +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_PAGE_POISONING is not set +CONFIG_PANASONIC_LAPTOP=m +CONFIG_PANEL=m +# CONFIG_PANEL_CHANGE_MESSAGE is not set +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +CONFIG_PANTHERLORD_FF=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_GUEST=y +CONFIG_PARAVIRT_SPINLOCKS=y +CONFIG_PARIDE=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_EPAT=m +# CONFIG_PARIDE_EPATC8 is not set +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_PT=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_AX88796=m +# CONFIG_PARPORT_GSC is not set +CONFIG_PARPORT_NOT_PC=y +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_FIFO=y +CONFIG_PARPORT_PC_PCMCIA=m +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_SERIAL=m +CONFIG_PARTITION_ADVANCED=y +CONFIG_PATA_ACPI=y +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD640_PCI=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_CS5535=m +CONFIG_PATA_CS5536=m +CONFIG_PATA_CYPRESS=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +CONFIG_PATA_HPT3X2N=m +CONFIG_PATA_HPT3X3=m +# CONFIG_PATA_HPT3X3_DMA is not set +CONFIG_PATA_ISAPNP=m +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_LEGACY=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +CONFIG_PATA_NS87410=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_OPTI=m +CONFIG_PATA_OPTIDMA=m +CONFIG_PATA_PCMCIA=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_QDI=m +CONFIG_PATA_RADISYS=m +CONFIG_PATA_RDC=m +CONFIG_PATA_RZ1000=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=y +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_WINBOND=m +CONFIG_PATA_WINBOND_VLB=m +# CONFIG_PC300TOO is not set +CONFIG_PC8736x_GPIO=m +CONFIG_PC87413_WDT=m +CONFIG_PCCARD_NONSTATIC=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_PCI=y +CONFIG_PCI200SYN=m +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +# CONFIG_PCIEASPM is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_ATMEL=m +CONFIG_PCI_BIOS=y +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_DIRECT=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_GOANY=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GODIRECT is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GOOLPC is not set +CONFIG_PCI_HERMES=m +CONFIG_PCI_IOV=y +CONFIG_PCI_LEGACY=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_MSI=y +CONFIG_PCI_OLPC=y +CONFIG_PCI_QUIRKS=y +CONFIG_PCI_STUB=m +CONFIG_PCI_SYSCALL=y +CONFIG_PCMCIA=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_PCMCIA_AXNET=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_IBMTR=m +CONFIG_PCMCIA_IOCTL=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_NETWAVE=m +CONFIG_PCMCIA_NINJA_SCSI=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_PROBE=y +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_PCMCIA_WAVELAN=m +CONFIG_PCMCIA_WL3501=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_XIRCOM=m +CONFIG_PCNET32=m +CONFIG_PCSPKR_PLATFORM=y +CONFIG_PCWATCHDOG=m +CONFIG_PD6729=m +CONFIG_PDA_POWER=m +CONFIG_PDC_ADMA=y +CONFIG_PERF_COUNTERS=y +CONFIG_PERF_EVENTS=y +CONFIG_PHANTOM=m +CONFIG_PHONE=m +CONFIG_PHONET=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m +CONFIG_PHYLIB=y +CONFIG_PID_NS=y +CONFIG_PLAN9AUTH=m +CONFIG_PLIP=m +CONFIG_PLX_HERMES=m +CONFIG_PM=y +CONFIG_PMIC_DA903X=y +CONFIG_PM_DISABLE_CONSOLE=y +CONFIG_PM_RUNTIME=y +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_TEST_SUSPEND=y +CONFIG_PM_TRACE=y +CONFIG_PM_TRACE_RTC=y +# CONFIG_PM_VERBOSE is not set +CONFIG_PNP=y +CONFIG_PNPACPI=y +CONFIG_PNPBIOS=y +CONFIG_PNPBIOS_PROC_FS=y +CONFIG_PNP_DEBUG_MESSAGES=y +CONFIG_POHMELFS=m +CONFIG_POHMELFS_CRYPTO=y +# CONFIG_POHMELFS_DEBUG is not set +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_POWER_TRACER is not set +CONFIG_PPDEV=m +CONFIG_PPP=y +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set +CONFIG_PREEMPT_NOTIFIERS=y +# CONFIG_PREEMPT_TRACER is not set +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_PRINTER=m +CONFIG_PRINTK=y +CONFIG_PRINTK_TIME=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_PRISM2_USB=m +CONFIG_PRISM54=m +CONFIG_PROC_EVENTS=y +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_VMCORE=y +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +CONFIG_PROFILING=y +CONFIG_PROTEON=m +# CONFIG_PROVE_LOCKING is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_PSS_HAVE_BOOT is not set +CONFIG_PSS_MIXER=y +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m +CONFIG_QLA3XXX=m +CONFIG_QLGE=m +CONFIG_QNX4FS_FS=m +CONFIG_QSEMI_PHY=y +CONFIG_QT2160=m +CONFIG_QUOTA=y +CONFIG_QUOTACTL=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QUOTA_TREE=m +# CONFIG_R6040 is not set +CONFIG_R8169=m +CONFIG_R8169_VLAN=y +CONFIG_RADIO_ADAPTERS=y +CONFIG_RADIO_AZTECH=m +CONFIG_RADIO_CADET=m +CONFIG_RADIO_GEMTEK=m +CONFIG_RADIO_GEMTEK_PCI=m +CONFIG_RADIO_MAESTRO=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_RTRACK=m +CONFIG_RADIO_RTRACK2=m +CONFIG_RADIO_SF16FMI=m +CONFIG_RADIO_SF16FMR2=m +CONFIG_RADIO_SI470X=y +CONFIG_RADIO_SI4713=m +CONFIG_RADIO_TEA5764=m +CONFIG_RADIO_TERRATEC=m +CONFIG_RADIO_TRUST=m +CONFIG_RADIO_TYPHOON=m +CONFIG_RADIO_ZOLTRIX=m +CONFIG_RAR_REGISTER=m +CONFIG_RAW_DRIVER=m +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RDS=m +# CONFIG_RDS_DEBUG is not set +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +CONFIG_RD_BZIP2=y +CONFIG_RD_GZIP=y +CONFIG_RD_LZMA=y +CONFIG_REALTEK_PHY=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_AB3100=m +CONFIG_REGULATOR_BQ24022=m +CONFIG_REGULATOR_DA903X=m +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MC13783=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TWL4030=y +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_WM831X=m +CONFIG_REGULATOR_WM8350=m +CONFIG_REGULATOR_WM8400=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_FS=m +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_REISERFS_FS_XATTR=y +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_RELAY=y +CONFIG_RELOCATABLE=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_RFKILL=y +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_LEDS=y +CONFIG_RING_BUFFER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +# CONFIG_RING_BUFFER_BENCHMARK is not set +CONFIG_RISCOM8=m +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_ROCKETPORT=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +# CONFIG_ROMFS_BACKED_BY_MTD is not set +CONFIG_ROMFS_FS=m +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_ROSE=m +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT2500USB=m +CONFIG_RT2800USB=m +CONFIG_RT2860=m +CONFIG_RT2870=m +CONFIG_RT2X00=m +# CONFIG_RT2X00_DEBUG is not set +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_CRYPTO=y +# CONFIG_RT2X00_LIB_DEBUGFS is not set +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_HT=y +CONFIG_RT2X00_LIB_LEDS=y +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT3090=m +CONFIG_RT61PCI=m +CONFIG_RT73USB=m +CONFIG_RTC_CLASS=y +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_DRV_AB3100=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +# CONFIG_RTC_DRV_PL030 is not set +CONFIG_RTC_DRV_PL031=y +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_TEST=m +CONFIG_RTC_DRV_TWL4030=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_WM831X=m +CONFIG_RTC_DRV_WM8350=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_LIB=y +CONFIG_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187SE=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL8192E=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192SU=m +CONFIG_RT_GROUP_SCHED=y +CONFIG_RT_MUTEXES=y +# CONFIG_RT_MUTEX_TESTER is not set +CONFIG_RXKAD=m +CONFIG_S2IO=m +# CONFIG_SAMPLES is not set +CONFIG_SATA_AHCI=m +CONFIG_SATA_INIC162X=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PMP=y +CONFIG_SATA_PROMISE=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIL24=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_SX4=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_SBC7240_WDT=m +CONFIG_SBC8360_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_SBNI=m +# CONFIG_SBNI_MULTILINE is not set +CONFIG_SC1200_WDT=m +CONFIG_SC520_WDT=m +CONFIG_SC6600=y +CONFIG_SC6600_CDROM=4 +CONFIG_SC6600_CDROMBASE=0 +CONFIG_SC6600_JOY=y +CONFIG_SC92031=m +CONFIG_SCC=m +# CONFIG_SCC_DELAY is not set +# CONFIG_SCC_TRXECHO is not set +CONFIG_SCHEDSTATS=y +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_HRTICK=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_SCHED_SMT=y +# CONFIG_SCHED_TRACER is not set +CONFIG_SCSI=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_7000FASST=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AHA1740=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +# CONFIG_SCSI_AIC7XXX_OLD is not set +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ARCMSR_AER=y +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_DTC3280=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_FD_MCS=m +# CONFIG_SCSI_FLASHPOINT is not set +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_GENERIC_NCR5380=m +CONFIG_SCSI_GENERIC_NCR5380_MMIO=m +CONFIG_SCSI_GENERIC_NCR53C400=y +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_IBMMCA=m +CONFIG_SCSI_IMM=m +CONFIG_SCSI_IN2000=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_DUMP is not set +# CONFIG_SCSI_IPR_TRACE is not set +CONFIG_SCSI_IPS=m +CONFIG_SCSI_ISCSITARGET=m +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +CONFIG_SCSI_LPFC=m +CONFIG_SCSI_LPFC_DEBUG_FS=y +CONFIG_SCSI_MPT2SAS=m +# CONFIG_SCSI_MPT2SAS_LOGGING is not set +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVSAS_DEBUG=y +CONFIG_SCSI_NCR53C406A=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=4 +CONFIG_SCSI_NCR53C8XX_SYNC=5 +CONFIG_SCSI_NCR_D700=m +CONFIG_SCSI_NCR_Q720=m +CONFIG_SCSI_NETLINK=y +# CONFIG_SCSI_OSD_DEBUG is not set +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_PAS16=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_PROC_FS=y +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SAS_LIBSAS=m +# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_SIM710=m +CONFIG_SCSI_SRP=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_T128=m +CONFIG_SCSI_TGT=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_WAIT_SCAN=m +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +CONFIG_SCTP_HMAC_MD5=y +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SCx200=m +CONFIG_SCx200HR_TIMER=m +CONFIG_SCx200_ACB=m +CONFIG_SCx200_GPIO=m +CONFIG_SCx200_I2C=m +CONFIG_SCx200_I2C_SCL=12 +CONFIG_SCx200_I2C_SDA=13 +CONFIG_SCx200_WDT=m +CONFIG_SDIO_UART=m +CONFIG_SDLA=m +CONFIG_SEALEVEL_4021=m +CONFIG_SECCOMP=y +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 +CONFIG_SECURITY_APPARMOR_COMPAT_24=y +CONFIG_SECURITY_FILE_CAPABILITIES=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +CONFIG_SECURITY_PATH=y +# CONFIG_SECURITY_ROOTPLUG is not set +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_DISABLE=y +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +CONFIG_SECURITY_SMACK=y +CONFIG_SECURITY_TOMOYO=y +CONFIG_SEEQ8005=m +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADS7828=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7473=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ATK0110=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_HDAPS=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_MAX1111=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_WM831X=m +CONFIG_SENSORS_WM8350=m +CONFIG_SERIAL_8250_ACCENT=m +CONFIG_SERIAL_8250_BOCA=m +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_EXAR_ST16C554=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_FOURPORT=m +CONFIG_SERIAL_8250_HUB6=m +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_MCA=m +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIO=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_I8042=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_RAW=m +CONFIG_SERIO_SERPORT=m +CONFIG_SFC=m +CONFIG_SFC_MTD=y +CONFIG_SFI=y +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +CONFIG_SHMEM=y +CONFIG_SIGMATEL_FIR=m +CONFIG_SIGNALFD=y +CONFIG_SIS190=m +CONFIG_SIS900=m +CONFIG_SKFP=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKISA=m +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +CONFIG_SLABINFO=y +CONFIG_SLHC=y +CONFIG_SLICOSS=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_SLIP_SMART=y +# CONFIG_SLOB is not set +CONFIG_SLOW_WORK=y +# CONFIG_SLOW_WORK_DEBUG is not set +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_SMC911X=m +CONFIG_SMC9194=m +CONFIG_SMC91X=y +CONFIG_SMCTR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_SMP=y +CONFIG_SMSC37B787_WDT=m +CONFIG_SMSC911X=m +CONFIG_SMSC9420=m +CONFIG_SMSC_PHY=y +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMS_SDIO_DRV=m +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_USB_DRV=m +CONFIG_SND=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 +CONFIG_SND_AD1816A=m +CONFIG_SND_AD1848=m +CONFIG_SND_AD1889=m +CONFIG_SND_ADLIB=m +CONFIG_SND_ALS100=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_ARM=y +CONFIG_SND_ARMAACI=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AW2=m +CONFIG_SND_AZT2320=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMI8330=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4231=m +CONFIG_SND_CS4236=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_DARLA24=m +# CONFIG_SND_DEBUG is not set +CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_DRIVERS=y +CONFIG_SND_DT019X=m +CONFIG_SND_DUMMY=m +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_ECHO3G=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1688=m +CONFIG_SND_ES18XX=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_ES968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_GINA20=m +CONFIG_SND_GINA24=m +CONFIG_SND_GUSCLASSIC=m +CONFIG_SND_GUSEXTREME=m +CONFIG_SND_GUSMAX=m +CONFIG_SND_HDA_CODEC_ANALOG=y +CONFIG_SND_HDA_CODEC_ATIHDMI=y +CONFIG_SND_HDA_CODEC_CA0110=y +CONFIG_SND_HDA_CODEC_CIRRUS=y +CONFIG_SND_HDA_CODEC_CMEDIA=y +CONFIG_SND_HDA_CODEC_CONEXANT=y +CONFIG_SND_HDA_CODEC_INTELHDMI=y +CONFIG_SND_HDA_CODEC_NVHDMI=y +CONFIG_SND_HDA_CODEC_REALTEK=y +CONFIG_SND_HDA_CODEC_SI3054=y +CONFIG_SND_HDA_CODEC_SIGMATEL=y +CONFIG_SND_HDA_CODEC_VIA=y +CONFIG_SND_HDA_ELD=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_JACK=y +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_HIFIER=m +CONFIG_SND_HRTIMER=m +CONFIG_SND_HWDEP=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_INTERWAVE=m +CONFIG_SND_INTERWAVE_STB=m +CONFIG_SND_ISA=y +CONFIG_SND_JACK=y +CONFIG_SND_KORG1212=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIA=m +CONFIG_SND_MIRO=m +CONFIG_SND_MIXART=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_MONA=m +CONFIG_SND_MPU401_UART=m +CONFIG_SND_MSND_CLASSIC=m +CONFIG_SND_MSND_PINNACLE=m +CONFIG_SND_MTS64=m +CONFIG_SND_NM256=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL4_LIB=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_OSSEMUL=y +CONFIG_SND_OXYGEN=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_PCI=y +CONFIG_SND_PCM=m +CONFIG_SND_PCMCIA=y +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_PCSP=m +CONFIG_SND_PCXHR=m +CONFIG_SND_PDAUDIOCF=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SB16=m +CONFIG_SND_SB16_CSP=y +CONFIG_SND_SB16_DSP=m +CONFIG_SND_SB8=m +CONFIG_SND_SB8_DSP=m +CONFIG_SND_SBAWE=m +CONFIG_SND_SB_COMMON=m +CONFIG_SND_SC6000=m +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_SGALAXY=m +CONFIG_SND_SIS7019=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_AD1836=m +CONFIG_SND_SOC_AD1938=m +CONFIG_SND_SOC_AD73311=m +CONFIG_SND_SOC_AK4104=m +CONFIG_SND_SOC_AK4535=m +CONFIG_SND_SOC_AK4642=m +CONFIG_SND_SOC_ALL_CODECS=m +CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_L3=m +CONFIG_SND_SOC_MAX9877=m +CONFIG_SND_SOC_PCM3008=m +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_TLV320AIC23=m +CONFIG_SND_SOC_TLV320AIC26=m +CONFIG_SND_SOC_TLV320AIC3X=m +CONFIG_SND_SOC_TWL4030=m +CONFIG_SND_SOC_UDA134X=m +CONFIG_SND_SOC_UDA1380=m +CONFIG_SND_SOC_WM8350=m +CONFIG_SND_SOC_WM8400=m +CONFIG_SND_SOC_WM8510=m +CONFIG_SND_SOC_WM8523=m +CONFIG_SND_SOC_WM8580=m +CONFIG_SND_SOC_WM8728=m +CONFIG_SND_SOC_WM8731=m +CONFIG_SND_SOC_WM8750=m +CONFIG_SND_SOC_WM8753=m +CONFIG_SND_SOC_WM8776=m +CONFIG_SND_SOC_WM8900=m +CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8940=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8961=m +CONFIG_SND_SOC_WM8971=m +CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8988=m +CONFIG_SND_SOC_WM8990=m +CONFIG_SND_SOC_WM8993=m +CONFIG_SND_SOC_WM9081=m +CONFIG_SND_SOC_WM_HUBS=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_SPI=y +CONFIG_SND_SSCAPE=m +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_TIMER=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_USX2Y=m +# CONFIG_SND_VERBOSE_PRINTK is not set +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_VIRTUOSO=m +CONFIG_SND_VMASTER=y +CONFIG_SND_VX222=m +CONFIG_SND_VXPOCKET=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_WAVEFRONT=m +CONFIG_SND_WSS_LIB=m +CONFIG_SND_YMFPCI=m +CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_MT9M001=m +CONFIG_SOC_CAMERA_MT9M111=m +CONFIG_SOC_CAMERA_MT9T031=m +CONFIG_SOC_CAMERA_MT9V022=m +CONFIG_SOC_CAMERA_OV772X=m +CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_SOC_CAMERA_TW9910=m +CONFIG_SOFT_WATCHDOG=m +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SONYPI=m +CONFIG_SONYPI_COMPAT=y +CONFIG_SONY_LAPTOP=m +CONFIG_SOUND=m +CONFIG_SOUND_AEDSP16=m +CONFIG_SOUND_DMAP=y +CONFIG_SOUND_KAHLUA=m +CONFIG_SOUND_MPU401=m +CONFIG_SOUND_MSNDCLAS=m +CONFIG_SOUND_MSNDPIN=m +CONFIG_SOUND_MSS=m +CONFIG_SOUND_OSS=m +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y +CONFIG_SOUND_PAS=m +CONFIG_SOUND_PRIME=m +CONFIG_SOUND_PSS=m +CONFIG_SOUND_SB=m +CONFIG_SOUND_SSCAPE=m +# CONFIG_SOUND_TRACEINIT is not set +CONFIG_SOUND_TRIX=m +CONFIG_SOUND_UART6850=m +CONFIG_SOUND_VMIDI=m +CONFIG_SOUND_YM3812=m +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSE_IRQ=y +CONFIG_SPECIALIX=m +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_GPIO=m +CONFIG_SPI_LM70_LLP=m +CONFIG_SPI_MASTER=y +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_SR_REPORT_TIME_LIMIT=100 +CONFIG_SSB=m +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +# CONFIG_SSB_PCMCIAHOST is not set +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SPROM=y +CONFIG_SSFDC=m +CONFIG_STACKTRACE=y +CONFIG_STACKTRACE_SUPPORT=y +# CONFIG_STACK_TRACER is not set +CONFIG_STAGING=y +# CONFIG_STAGING_EXCLUDE_BUILD is not set +CONFIG_STALDRV=y +CONFIG_STALLION=m +CONFIG_STE10XP=y +CONFIG_STOP_MACHINE=y +CONFIG_STP=m +CONFIG_STRICT_DEVMEM=y +CONFIG_STRIP=m +# CONFIG_STRIP_ASM_SYMS is not set +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_SUN_PARTITION=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_SWAP=y +CONFIG_SWIOTLB=y +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_CS=m +CONFIG_SYNCLINK_GT=m +CONFIG_SYN_COOKIES=y +CONFIG_SYSCTL=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_SYSCTL_SYSCALL_CHECK=y +CONFIG_SYSFS=y +# CONFIG_SYSFS_DEPRECATED_V2 is not set +# CONFIG_SYSPROF_TRACER is not set +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSV_FS=m +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_WACOM=m +CONFIG_TASKSTATS=y +# CONFIG_TASK_DELAY_ACCT is not set +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_TASK_XACCT=y +CONFIG_TC1100_WMI=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m +CONFIG_TCG_NSC=m +CONFIG_TCG_TIS=m +CONFIG_TCIC=m +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_MD5SIG=y +CONFIG_TEHUTI=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TELCLOCK=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_TEXTSEARCH_KMP=m +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_THINKPAD_ACPI=m +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y +# CONFIG_THINKPAD_ACPI_DEBUG is not set +CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_THINKPAD_ACPI_VIDEO=y +CONFIG_THRUSTMASTER_FF=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_TICK_ONESHOT=y +CONFIG_TIFM_7XX1=m +CONFIG_TIFM_CORE=m +CONFIG_TIGON3=m +CONFIG_TIMERFD=y +CONFIG_TIMER_STATS=y +# CONFIG_TIPC_ADVANCED is not set +# CONFIG_TIPC_DEBUG is not set +CONFIG_TLAN=m +CONFIG_TMD_HERMES=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMS380TR=m +CONFIG_TMSPCI=m +CONFIG_TOIM3232_DONGLE=m +CONFIG_TOPSTAR_LAPTOP=m +# CONFIG_TOSHIBA is not set +CONFIG_TOSHIBA_FIR=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_DA9034=m +CONFIG_TOUCHSCREEN_EETI=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_HTCPEN=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_MCS5000=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_TSC2007=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TPS65010=m +CONFIG_TR=y +CONFIG_TRACEPOINTS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACING=y +CONFIG_TRACING_SUPPORT=y +CONFIG_TRANZPORT=m +# CONFIG_TREE_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_TSL2561=m +CONFIG_TTPCI_EEPROM=m +CONFIG_TULIP=m +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_TUN=y +CONFIG_TWL4030_CORE=y +# CONFIG_TWL4030_POWER is not set +CONFIG_TWL4030_USB=m +CONFIG_TWL4030_WATCHDOG=m +CONFIG_TYPHOON=m +# CONFIG_UACCESS_WITH_MEMCPY is not set +CONFIG_UBIFS_FS=m +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +# CONFIG_UBIFS_FS_DEBUG is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_UCB1400_CORE=m +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y +CONFIG_UEVENT_HELPER_PATH="" +# CONFIG_UFS_DEBUG is not set +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +CONFIG_UID16=y +CONFIG_UIO=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_SMX=m +CONFIG_ULI526X=m +CONFIG_ULTRA=m +CONFIG_ULTRA32=m +CONFIG_ULTRAMCA=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIX=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNUSED_SYMBOLS=y +CONFIG_USBPCWATCHDOG=m +CONFIG_USB_ACM=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_ATM=m +CONFIG_USB_AUDIO=m +CONFIG_USB_BELKIN=y +CONFIG_USB_BERRY_CHARGE=m +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_CATC=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_CXACRU=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_DABUSB=m +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_DSBR=m +CONFIG_USB_DUMMY_HCD=m +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EMI26=m +CONFIG_USB_EMI62=m +CONFIG_USB_EPSON2888=y +CONFIG_USB_ET61X251=m +CONFIG_USB_ETH=m +# CONFIG_USB_ETH_EEM is not set +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_EZUSB=y +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_GADGETFS=m +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_CI13XXX is not set +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_DUALSPEED=y +CONFIG_USB_GADGET_DUMMY_HCD=y +# CONFIG_USB_GADGET_FSL_QE is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_IMX is not set +# CONFIG_USB_GADGET_LANGWELL is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_MUSB_HDRC is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_PXA25X is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_R8A66597 is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_S3C_HSOTG is not set +CONFIG_USB_GADGET_SELECTED=y +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GL860=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_USB_GSPCA=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SN9C20X=m +# CONFIG_USB_GSPCA_SN9C20X_EVDEV is not set +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_HID=m +CONFIG_USB_HIDDEV=y +CONFIG_USB_HSO=m +CONFIG_USB_HWA_HCD=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_IP_COMMON=m +CONFIG_USB_IP_HOST=m +CONFIG_USB_IP_VHCI_HCD=m +CONFIG_USB_IRDA=m +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1760_HCD=m +CONFIG_USB_KAWETH=m +CONFIG_USB_KC2190=y +CONFIG_USB_KONICAWC=m +CONFIG_USB_LCD=m +CONFIG_USB_LD=m +CONFIG_USB_LED=m +CONFIG_USB_LEGOTOWER=m +# CONFIG_USB_LIBUSUAL is not set +CONFIG_USB_M5602=m +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MIDI_GADGET=m +CONFIG_USB_MR800=m +# CONFIG_USB_MUSB_HDRC is not set +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_ZAURUS=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +# CONFIG_USB_OHCI_HCD_SSB is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_OTG is not set +CONFIG_USB_OTG_UTILS=y +# CONFIG_USB_OV511 is not set +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_PRINTER=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_USB_QUICKCAM_MESSENGER=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_RIO500=m +CONFIG_USB_RTL8150=m +CONFIG_USB_S2255=m +CONFIG_USB_SE401=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_DEBUG=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_QUATECH2=m +CONFIG_USB_SERIAL_QUATECH_USB2=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIEMENS_MPI=m +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_SI470X=m +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_SISUSBVGA_CON is not set +CONFIG_USB_SL811_CS=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SN9C102=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_STKWEBCAM=m +CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_DATAFAB=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STV06XX=m +CONFIG_USB_STV680=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_SUSPEND=y +CONFIG_USB_TEST=m +CONFIG_USB_TMC=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_U132_HCD=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=m +CONFIG_USB_VICAM=m +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_VST=m +CONFIG_USB_W9968CF=m +CONFIG_USB_WDM=m +CONFIG_USB_WHCI_HCD=m +CONFIG_USB_WUSB=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set +CONFIG_USB_XHCI_HCD=m +# CONFIG_USB_XHCI_HCD_DEBUGGING is not set +CONFIG_USB_XUSBATM=m +CONFIG_USB_ZC0301=m +CONFIG_USB_ZD1201=m +CONFIG_USB_ZERO=m +CONFIG_USB_ZR364XX=m +CONFIG_USER_NS=y +# CONFIG_USER_SCHED is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_UTS_NS=y +CONFIG_UWB=m +CONFIG_UWB_HWA=m +CONFIG_UWB_I1480U=m +CONFIG_UWB_I1480U_WLP=m +CONFIG_UWB_WHCI=m +CONFIG_UWB_WLP=m +CONFIG_V4L_USB_DRIVERS=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_VERSION_SIGNATURE="" +CONFIG_VETH=m +CONFIG_VFAT_FS=m +CONFIG_VFP=y +CONFIG_VFPv3=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VGASTATE=m +CONFIG_VGA_ARB=y +CONFIG_VGA_CONSOLE=y +CONFIG_VIA_FIR=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_VELOCITY=m +CONFIG_VIDEOBUF_DMA_SG=m +CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEOBUF_GEN=m +CONFIG_VIDEOBUF_VMALLOC=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_ALLOW_V4L1=y +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT848_DVB=y +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CAFE_CCIC=m +CONFIG_VIDEO_CAPTURE_DRIVERS=y +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA2=m +CONFIG_VIDEO_CPIA_PP=m +CONFIG_VIDEO_CPIA_USB=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_CX23885=m +CONFIG_VIDEO_CX25821=m +CONFIG_VIDEO_CX25821_ALSA=m +CONFIG_VIDEO_CX25840=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_FB_IVTV=m +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_OV7640=m +CONFIG_VIDEO_GO7007_SAA7113=m +CONFIG_VIDEO_GO7007_SAA7115=m +CONFIG_VIDEO_GO7007_SONY_TUNER=m +CONFIG_VIDEO_GO7007_TW2804=m +CONFIG_VIDEO_GO7007_TW9903=m +CONFIG_VIDEO_GO7007_UDA1342=m +CONFIG_VIDEO_GO7007_USB=m +CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m +CONFIG_VIDEO_HDPVR=m +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_MEDIA=m +CONFIG_VIDEO_MEYE=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_MT9V011=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_OVCAMCHIP=m +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_PVRUSB2=m +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_PVRUSB2_DVB=y +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA5249=m +CONFIG_VIDEO_SAA6588=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_SAA7164=m +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_STRADIS=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_USBVIDEO=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_V4L1=m +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_V4L2_COMMON=m +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_VP27SMPX=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_W9966=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_AVS6EYES=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +CONFIG_VIDEO_ZORAN_ZR36060=m +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_CONSOLE=m +CONFIG_VIRTUALIZATION=y +CONFIG_VIRT_TO_BUS=y +CONFIG_VITESSE_PHY=y +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLSI_FIR=m +CONFIG_VM86=y +CONFIG_VME_BUS=m +CONFIG_VME_USER=m +CONFIG_VMI=y +# CONFIG_VMSPLIT_1G is not set +# CONFIG_VMSPLIT_2G is not set +CONFIG_VMSPLIT_3G=y +CONFIG_VMWARE_PVSCSI=m +CONFIG_VMXNET3=m +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_VORTEX=m +CONFIG_VT=y +# CONFIG_VT6655 is not set +CONFIG_VT_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_VXFS_FS=m +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_W1=m +CONFIG_W1_CON=y +CONFIG_W1_MASTER_DS1WM=m +CONFIG_W1_MASTER_DS2482=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_GPIO=m +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_SLAVE_BQ27000=m +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2760=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_THERM=m +CONFIG_W35UND=m +CONFIG_W83627HF_WDT=m +CONFIG_W83697HF_WDT=m +CONFIG_W83697UG_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_WAFER_WDT=m +CONFIG_WANXL=m +CONFIG_WAN_ROUTER_DRIVERS=m +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WAVELAN=m +CONFIG_WD80x3=m +CONFIG_WDT=m +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_WIMAX_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M=m +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M_SDIO=m +CONFIG_WIMAX_I2400M_USB=m +CONFIG_WINBOND_840=m +CONFIG_WINBOND_FIR=m +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +# CONFIG_WIRELESS_OLD_REGULATORY is not set +CONFIG_WL1251=m +CONFIG_WL1251_SDIO=m +CONFIG_WL1251_SPI=m +CONFIG_WL1271=m +CONFIG_WL12XX=m +CONFIG_WLAN=y +CONFIG_WLAN_80211=y +CONFIG_WLAN_PRE80211=y +CONFIG_WM831X_POWER=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WM8350_POWER=m +CONFIG_WM8350_WATCHDOG=m +# CONFIG_WORKQUEUE_TRACER is not set +CONFIG_X25_ASY=m +CONFIG_X86=y +# CONFIG_X86_32_NON_STANDARD is not set +CONFIG_X86_32_SMP=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_X86_64_SMP=y +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ALIGNMENT_16=y +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_APM_BOOT=y +# CONFIG_X86_BIGSMP is not set +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +CONFIG_X86_BSWAP=y +CONFIG_X86_CHECK_BIOS_CORRUPTION=y +CONFIG_X86_CMOV=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CPU=y +CONFIG_X86_CPUFREQ_NFORCE2=y +CONFIG_X86_CPUID=m +CONFIG_X86_DEBUGCTLMSR=y +# CONFIG_X86_DS is not set +# CONFIG_X86_ELAN is not set +CONFIG_X86_EXTENDED_PLATFORM=y +CONFIG_X86_E_POWERSAVER=m +CONFIG_X86_F00F_BUG=y +CONFIG_X86_GENERIC=y +CONFIG_X86_GX_SUSPMOD=y +CONFIG_X86_HT=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_INTERNODE_CACHE_BYTES=64 +CONFIG_X86_INVLPG=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_L1_CACHE_BYTES=64 +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_LONGHAUL=y +CONFIG_X86_LONGRUN=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_INJECT=m +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MCE_XEON75XX=m +CONFIG_X86_MPPARSE=y +CONFIG_X86_MRST=y +CONFIG_X86_MSR=m +CONFIG_X86_NEED_RELOCS=y +CONFIG_X86_P4_CLOCKMOD=m +CONFIG_X86_PAE=y +CONFIG_X86_PAT=y +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_X86_PM_TIMER=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_POWERNOW_K6=y +CONFIG_X86_POWERNOW_K7=y +CONFIG_X86_POWERNOW_K7_ACPI=y +CONFIG_X86_POWERNOW_K8=y +CONFIG_X86_PPRO_FENCE=y +# CONFIG_X86_PTDUMP is not set +# CONFIG_X86_RDC321X is not set +CONFIG_X86_REBOOTFIXUPS=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_RESERVE_LOW_64K=y +CONFIG_X86_SPEEDSTEP_CENTRINO=y +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y +CONFIG_X86_SPEEDSTEP_ICH=y +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y +CONFIG_X86_SPEEDSTEP_SMI=y +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_X86_TSC=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_X86_VSMP is not set +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_XADD=y +CONFIG_XEN=y +CONFIG_XENFS=m +CONFIG_XEN_BALLOON=y +CONFIG_XEN_BLKDEV_FRONTEND=m +CONFIG_XEN_COMPAT_XENFS=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XEN_FBDEV_FRONTEND=m +CONFIG_XEN_KBDDEV_FRONTEND=m +CONFIG_XEN_MAX_DOMAIN_MEMORY=32 +CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_XEN_SAVE_RESTORE=y +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XFRM=y +CONFIG_XFRM_IPCOMP=m +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_USER=m +# CONFIG_XFS_DEBUG is not set +CONFIG_XFS_FS=m +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_RT=y +# CONFIG_XIP_KERNEL is not set +CONFIG_XOR_BLOCKS=m +CONFIG_YAM=m +CONFIG_YELLOWFIN=m +CONFIG_YENTA=m +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +CONFIG_ZEROPLUS_FF=y +CONFIG_ZISOFS=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZNET=m +CONFIG_ZONE_DMA=y --- linux-2.6.32.orig/debian.master/config/config.common.ports +++ linux-2.6.32/debian.master/config/config.common.ports @@ -0,0 +1,3926 @@ +# +# Common config options automatically generated by splitconfig.pl +# +CONFIG_3C359=m +# CONFIG_40x is not set +# CONFIG_44x is not set +CONFIG_64BIT=y +CONFIG_6PACK=m +CONFIG_6xx=y +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_8129=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_9P_FS=m +# CONFIG_9P_FSCACHE is not set +CONFIG_A11Y_BRAILLE_CONSOLE=y +CONFIG_AB3100_CORE=m +CONFIG_AB3100_OTP=m +CONFIG_ABYSS=m +CONFIG_AC97_BUS=m +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_ACPI=y +CONFIG_ACPI_BLACKLIST_YEAR=0 +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_CONTAINER=m +# CONFIG_ACPI_CUSTOM_DSDT is not set +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_FAN=m +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_PCI_SLOT=m +CONFIG_ACPI_POWER_METER=m +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_PROCFS=y +CONFIG_ACPI_PROCFS_POWER=y +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_SYSFS_POWER=y +CONFIG_ACPI_THERMAL=m +CONFIG_ACT200L_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADB=y +CONFIG_ADB_CUDA=y +CONFIG_ADB_MACIO=y +CONFIG_ADB_PMU=y +CONFIG_ADB_PMU_LED=y +# CONFIG_ADB_PMU_LED_IDE is not set +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_ADM8211=m +# CONFIG_ADVANCED_OPTIONS is not set +CONFIG_AFFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FS=m +# CONFIG_AFS_FSCACHE is not set +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +CONFIG_AGP=m +# CONFIG_AGP_HP_ZX1 is not set +# CONFIG_AGP_I460 is not set +# CONFIG_AGP_SGI_TIOCA is not set +CONFIG_AGP_UNINORTH=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_AIO=y +CONFIG_AIRO=m +CONFIG_AIRO_CS=m +CONFIG_ALI_FIR=m +# CONFIG_ALTERA_PCIE_CHDMA is not set +CONFIG_ALTIVEC=y +# CONFIG_AMIGAONE is not set +CONFIG_ANON_INODES=y +CONFIG_ANSLCD=m +CONFIG_APM_EMULATION=m +CONFIG_APM_POWER=m +CONFIG_APPLE_AIRPORT=m +CONFIG_APPLICOM=m +CONFIG_AR9170_LEDS=y +CONFIG_AR9170_USB=m +CONFIG_ARCH_DEFCONFIG="arch/sparc/configs/sparc64_defconfig" +CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y +CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_HAS_ILOG2_U32=y +CONFIG_ARCH_HAS_ILOG2_U64=y +CONFIG_ARCH_HAS_WALK_MEMORY=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_WANTS_FREEZER_CONTROL=y +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_CS=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_RIM_I=m +# CONFIG_ARPD is not set +CONFIG_ASK_IP_FIB_HASH=y +# CONFIG_ASUS_OLED is not set +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_ASYNC_RAID6_TEST=m +CONFIG_ASYNC_XOR=m +CONFIG_AT76C50X_USB=m +CONFIG_ATALK=m +CONFIG_ATA_ACPI=y +CONFIG_ATA_GENERIC=m +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=m +CONFIG_ATA_SFF=y +CONFIG_ATA_VERBOSE_ERROR=y +# CONFIG_ATH5K is not set +CONFIG_ATH9K=m +CONFIG_ATH9K_DEBUG=y +CONFIG_ATH_COMMON=m +CONFIG_ATL1=m +CONFIG_ATL1C=m +CONFIG_ATL1E=m +CONFIG_ATL2=m +CONFIG_ATM=m +CONFIG_ATMEL=m +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_FORE200E=m +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_FORE200E_TX_RETRY=16 +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_LANAI=m +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_NICSTAR=m +# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set +# CONFIG_ATM_NICSTAR_USE_SUNI is not set +CONFIG_ATM_SOLOS=m +CONFIG_ATM_TCP=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_ARCH=y +CONFIG_AUDIT_TREE=y +CONFIG_AUFS_BDEV_LOOP=y +# CONFIG_AUFS_BRANCH_MAX_1023 is not set +CONFIG_AUFS_BRANCH_MAX_127=y +# CONFIG_AUFS_BRANCH_MAX_32767 is not set +# CONFIG_AUFS_BRANCH_MAX_511 is not set +CONFIG_AUFS_BR_FUSE=y +CONFIG_AUFS_BR_RAMFS=y +# CONFIG_AUFS_DEBUG is not set +# CONFIG_AUFS_EXPORT is not set +CONFIG_AUFS_FS=m +CONFIG_AUFS_HINOTIFY=y +CONFIG_AUFS_POLL=y +# CONFIG_AUFS_RDU is not set +# CONFIG_AUFS_SHWH is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUTOFS_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +# CONFIG_B3DFG is not set +CONFIG_B43=m +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_DEBUG=y +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +CONFIG_B43LEGACY_HWRNG=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PIO=y +# CONFIG_B43LEGACY_PIO_MODE is not set +# CONFIG_B43_DEBUG is not set +CONFIG_B43_HWRNG=y +CONFIG_B43_LEDS=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PCI_AUTOSELECT=y +# CONFIG_B43_PCMCIA is not set +CONFIG_B43_PHY_LP=y +# CONFIG_B43_SDIO is not set +CONFIG_B44=m +CONFIG_B44_PCI=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DA903X=m +CONFIG_BACKLIGHT_GENERIC=m +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_WM831X=m +# CONFIG_BACKTRACE_SELF_TEST is not set +CONFIG_BASE_FULL=y +CONFIG_BASE_SMALL=0 +CONFIG_BATTERY_BQ27x00=m +CONFIG_BATTERY_DA9030=m +CONFIG_BATTERY_DS2760=m +CONFIG_BATTERY_DS2782=m +CONFIG_BATTERY_MAX17040=m +CONFIG_BATTERY_PMU=m +CONFIG_BAYCOM_EPP=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BBC_I2C=m +# CONFIG_BDI_SWITCH is not set +CONFIG_BE2ISCSI=m +CONFIG_BE2NET=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_BITREVERSE=y +CONFIG_BITS=64 +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_3W_XXXX_RAID=m +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +CONFIG_BLK_DEV_BSG=y +# CONFIG_BLK_DEV_CMD64X is not set +CONFIG_BLK_DEV_COMPCACHE=m +# CONFIG_BLK_DEV_COMPCACHE_DEBUG is not set +# CONFIG_BLK_DEV_COMPCACHE_STATS is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_CRYPTOLOOP=m +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +CONFIG_BLK_DEV_DAC960=m +# CONFIG_BLK_DEV_DELKIN is not set +CONFIG_BLK_DEV_DM=y +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_HPT366 is not set +CONFIG_BLK_DEV_IDECD=y +CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDEDMA=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +CONFIG_BLK_DEV_IDEDMA_SFF=y +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_BLK_DEV_IDE_PMAC=y +CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_IO_TRACE=y +# CONFIG_BLK_DEV_IT8172 is not set +# CONFIG_BLK_DEV_IT8213 is not set +# CONFIG_BLK_DEV_IT821X is not set +# CONFIG_BLK_DEV_JMICRON is not set +CONFIG_BLK_DEV_MD=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_OSD=m +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_PLATFORM is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_SD=m +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SL82C105 is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SVWKS is not set +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_TC86C001 is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_UMEM=m +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_XIP is not set +CONFIG_BLOCK=y +CONFIG_BLOCK_COMPAT=y +CONFIG_BMAC=m +CONFIG_BNX2=m +# CONFIG_BNX2X is not set +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOTX_TEXT is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_BOOT_TRACER is not set +CONFIG_BOUNCE=y +CONFIG_BPQETHER=m +CONFIG_BRANCH_PROFILE_NONE=y +CONFIG_BRIDGE=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_ULOG=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_NETFILTER=y +CONFIG_BRIQ_PANEL=m +CONFIG_BROADCOM_PHY=m +CONFIG_BROKEN_ON_SMP=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +# CONFIG_BT_CMTP is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIVHCI=m +CONFIG_BT_HIDP=m +CONFIG_BT_L2CAP=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_SCO=m +CONFIG_BUG=y +CONFIG_C2PORT=m +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set +CONFIG_CAN=m +CONFIG_CAN_BCM=m +# CONFIG_CAN_CALC_BITTIMING is not set +# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEV=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_RAW=m +CONFIG_CAN_SJA1000=m +CONFIG_CAN_SJA1000_OF_PLATFORM=m +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_VCAN=m +# CONFIG_CAPI_AVM is not set +# CONFIG_CAPI_EICON is not set +CONFIG_CAPI_TRACE=y +CONFIG_CARDBUS=y +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_CARMINE_DRAM_CUSTOM is not set +CONFIG_CASSINI=m +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +CONFIG_CBE_CPUFREQ_SPU_GOVERNOR=m +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_CFG80211=m +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_DEFAULT_PS=y +CONFIG_CFG80211_DEFAULT_PS_VALUE=1 +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +CONFIG_CGROUPS=y +# CONFIG_CGROUP_CPUACCT is not set +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_NS=y +# CONFIG_CGROUP_SCHED is not set +CONFIG_CHARGER_PCF50633=m +CONFIG_CHECK_SIGNATURE=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T3_DEPENDS=y +CONFIG_CHR_DEV_OSST=m +CONFIG_CHR_DEV_SG=m +CONFIG_CHR_DEV_ST=m +CONFIG_CICADA_PHY=m +CONFIG_CIFS=m +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_DFS_UPCALL=y +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +CONFIG_CISS_SCSI_TAPE=y +CONFIG_CLS_U32_MARK=y +# CONFIG_CLS_U32_PERF is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_CNIC=m +CONFIG_CODA_FS=m +# CONFIG_CODE_PATCHING_SELFTEST is not set +# CONFIG_COMEDI is not set +CONFIG_COMPAT=y +CONFIG_COMPAT_BINFMT_ELF=y +# CONFIG_COMPAT_BRK is not set +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_COMPUTONE=m +CONFIG_CONFIGFS_FS=m +CONFIG_CONNECTOR=m +CONFIG_CONSOLE_POLL=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_CONSTRUCTORS=y +CONFIG_CONTEXT_SWITCH_TRACER=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_CPUSETS=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_PMAC=y +CONFIG_CPU_FREQ_STAT=m +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CRAMFS=m +# CONFIG_CRASH_DUMP is not set +CONFIG_CRC16=y +CONFIG_CRC32=y +CONFIG_CRC7=m +CONFIG_CRC_CCITT=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC_T10DIF=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_CBC=m +# CONFIG_CRYPTO_CCM is not set +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CRYPTD=m +# CONFIG_CRYPTO_CTR is not set +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_DEV_HIFN_795X is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_FIPS=y +# CONFIG_CRYPTO_GCM is not set +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_PCOMP=y +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_RNG=m +CONFIG_CRYPTO_RNG2=y +# CONFIG_CRYPTO_SALSA20 is not set +CONFIG_CRYPTO_SEED=m +# CONFIG_CRYPTO_SEQIV is not set +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_ZLIB=m +CONFIG_CUSE=m +CONFIG_CYCLADES=m +CONFIG_CYCLADES_SYNC=m +CONFIG_CYCLOMX_X25=y +# CONFIG_CYZ_INTR is not set +CONFIG_DAVICOM_PHY=m +CONFIG_DCB=y +CONFIG_DE2104X_DSL=0 +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_DEBUGGER=y +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_CREDENTIALS is not set +# CONFIG_DEBUG_DCFLUSH is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FS=y +# CONFIG_DEBUG_GPIO is not set +# CONFIG_DEBUG_HIGHMEM is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DECNET=m +CONFIG_DECNET_NF_GRABULATOR=m +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_BIC is not set +CONFIG_DEFAULT_CFQ=y +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_HTCP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_DEFAULT_NOOP is not set +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_SECURITY="apparmor" +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_DEFAULT_UIMAGE is not set +# CONFIG_DEFAULT_VEGAS is not set +# CONFIG_DEFAULT_WESTWOOD is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +# CONFIG_DEFXX_MMIO is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_DEVKMEM is not set +CONFIG_DEVPORT=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DIGIEPCA=m +# CONFIG_DISABLE_VHPT is not set +CONFIG_DISCONTIGMEM=y +CONFIG_DISPLAY7SEG=m +CONFIG_DISPLAY_SUPPORT=m +CONFIG_DL2K=m +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set +CONFIG_DMAR=y +# CONFIG_DMAR_DEFAULT_ON is not set +# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DM_CRYPT=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_LOG_USERSPACE is not set +CONFIG_DM_MIRROR=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +# CONFIG_DM_RAID45 is not set +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_UEVENT=y +CONFIG_DM_ZERO=m +CONFIG_DNET=m +CONFIG_DNOTIFY=y +CONFIG_DONGLE=y +CONFIG_DRAGONRISE_FF=y +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_MGA=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +CONFIG_DRM_NOUVEAU_DEBUG=y +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_RADEON_KMS=y +CONFIG_DRM_SAVAGE=m +CONFIG_DRM_SIS=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_TTM=m +CONFIG_DRM_VIA=m +CONFIG_DS1682=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +# CONFIG_DST is not set +CONFIG_DTC=y +CONFIG_DUMMY=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_DVB_AF9013=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_B2C2_FLEXCOP=m +# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_BT8XX=m +# CONFIG_DVB_BUDGET_CORE is not set +CONFIG_DVB_CAPTURE_DRIVERS=y +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_DIB8000=m +CONFIG_DVB_DM1105=m +CONFIG_DVB_DYNAMIC_MINORS=y +# CONFIG_DVB_FE_CUSTOMISE is not set +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_IEEE1394=y +CONFIG_DVB_FIREDTV_INPUT=y +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_L64781=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_MT312=m +CONFIG_DVB_MT352=m +CONFIG_DVB_NXT200X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_PLL=m +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_PT1=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_S5H1411=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STV0297=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_USB=m +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_CXUSB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_DIBUSB_MB=m +CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_FRIIO=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_VES1820=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_ZL10353=m +# CONFIG_DYNAMIC_DEBUG is not set +CONFIG_DYNAMIC_FTRACE=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +# CONFIG_E200 is not set +CONFIG_EARLY_PRINTK=y +# CONFIG_ECHO is not set +CONFIG_ECONET_AUNUDP=y +CONFIG_ECONET_NATIVE=y +CONFIG_ECRYPT_FS=m +CONFIG_EDAC=y +# CONFIG_EDAC_AMD8111 is not set +# CONFIG_EDAC_AMD8131 is not set +# CONFIG_EDAC_CPC925 is not set +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_MM_EDAC=m +# CONFIG_EDAC_PASEMI is not set +CONFIG_EEH=y +CONFIG_EEPROM_93CX6=m +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EFI=y +CONFIG_EFI_PARTITION=y +CONFIG_EFI_PCDP=y +CONFIG_EFI_VARS=m +CONFIG_EFS_FS=m +# CONFIG_ELECTRA_CF is not set +CONFIG_ELF_CORE=y +# CONFIG_EMBEDDED is not set +# CONFIG_EMBEDDED6xx is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENC28J60 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +CONFIG_ENIC=m +CONFIG_ENVCTRL=m +CONFIG_EPIC100=m +CONFIG_EPOLL=y +CONFIG_EQUALIZER=m +CONFIG_ESI_DONGLE=m +# CONFIG_ET131X is not set +CONFIG_ETHOC=m +CONFIG_EVENTFD=y +CONFIG_EVENT_PROFILE=y +CONFIG_EVENT_TRACING=y +# CONFIG_EXOFS_DEBUG is not set +CONFIG_EXOFS_FS=m +CONFIG_EXPERIMENTAL=y +CONFIG_EXPORTFS=m +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_DEFAULTS_TO_ORDERED=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_EXTRA_TARGETS="" +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FARSYNC=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_FAT_FS=m +# CONFIG_FAULT_INJECTION is not set +CONFIG_FB=y +# CONFIG_FB_3DFX_ACCEL is not set +CONFIG_FB_3DFX_I2C=y +CONFIG_FB_ARK=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_BACKLIGHT=y +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +CONFIG_FB_BROADSHEET=m +# CONFIG_FB_BW2 is not set +CONFIG_FB_CARMINE=m +CONFIG_FB_CARMINE_DRAM_EVAL=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_CG14 is not set +# CONFIG_FB_CG3 is not set +CONFIG_FB_CG6=y +CONFIG_FB_CONTROL=y +CONFIG_FB_CT65550=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_DDC=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_FFB=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_IBM_GXT4500=m +# CONFIG_FB_LEO is not set +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_METRONOME=m +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_OF=y +# CONFIG_FB_P9100 is not set +CONFIG_FB_PLATINUM=y +CONFIG_FB_PM3=m +CONFIG_FB_PS3_DEFAULT_SIZE_M=9 +CONFIG_FB_RADEON=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RIVA_BACKLIGHT=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_I2C=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_S3=m +CONFIG_FB_SAVAGE=m +CONFIG_FB_SAVAGE_ACCEL=y +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SBUS=y +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_SM501=m +CONFIG_FB_SVGALIB=m +# CONFIG_FB_TCX is not set +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_TMIO=m +CONFIG_FB_TMIO_ACCELL=y +# CONFIG_FB_UDL is not set +CONFIG_FB_UVESA=m +CONFIG_FB_VALKYRIE=y +# CONFIG_FB_VGA16 is not set +CONFIG_FB_VIA=m +# CONFIG_FB_VIRTUAL is not set +CONFIG_FB_VT8623=m +CONFIG_FB_XVR2500=y +CONFIG_FB_XVR500=y +CONFIG_FCOE=m +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIB_RULES=y +CONFIG_FILE_LOCKING=y +# CONFIG_FIREWIRE is not set +CONFIG_FIRMWARE_EDID=y +CONFIG_FIRMWARE_IN_KERNEL=y +# CONFIG_FIRMWARE_MEMMAP is not set +CONFIG_FIXED_PHY=y +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_SUN12x22 is not set +CONFIG_FONT_SUN8x16=y +# CONFIG_FORCEDETH_NAPI is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FRAME_POINTER=y +CONFIG_FRAME_WARN=1024 +CONFIG_FREEZER=y +# CONFIG_FSAM7400 is not set +CONFIG_FSCACHE=m +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +# CONFIG_FSCACHE_STATS is not set +# CONFIG_FSL_ULI1575 is not set +CONFIG_FSNOTIFY=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FTL=m +CONFIG_FTRACE=y +CONFIG_FTRACE_MCOUNT_RECORD=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_FTR_FIXUP_SELFTEST is not set +CONFIG_FUNCTION_GRAPH_TRACER=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_FUNCTION_TRACER=y +CONFIG_FUSE_FS=y +CONFIG_FUSION=y +CONFIG_FUSION_CTL=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_LAN=m +CONFIG_FUSION_LOGGING=y +CONFIG_FUSION_SAS=m +CONFIG_FUSION_SPI=m +CONFIG_FUTEX=y +CONFIG_FW_LOADER=y +CONFIG_GACT_PROB=y +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GARP=m +# CONFIG_GCOV_KERNEL is not set +CONFIG_GELIC_WIRELESS=y +# CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE is not set +CONFIG_GENERIC_ACL=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_GENERIC_ATOMIC64=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_ISA_DMA=y +# CONFIG_GENERIC_LOCKBREAK is not set +CONFIG_GENERIC_NVRAM=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_TRACER=y +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +# CONFIG_GIGASET_BASE is not set +# CONFIG_GIGASET_DEBUG is not set +# CONFIG_GIGASET_M101 is not set +# CONFIG_GIGASET_M105 is not set +CONFIG_GIRBIL_DONGLE=m +CONFIG_GPIOLIB=y +CONFIG_GPIO_BT8XX=m +CONFIG_GPIO_LANGWELL=y +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MAX732X=m +CONFIG_GPIO_MC33880=m +CONFIG_GPIO_MCP23S08=m +CONFIG_GPIO_PCA953X=m +CONFIG_GPIO_PCF857X=m +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_UCB1400=y +CONFIG_GPIO_WM831X=m +CONFIG_GPIO_XILINX=y +CONFIG_GREENASIA_FF=y +CONFIG_GROUP_SCHED=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +# CONFIG_HAS_RAPIDIO is not set +# CONFIG_HAVE_AOUT is not set +# CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_NODEDATA_EXTENSION=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HAVE_IDE=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_KVM=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_HAVE_LEGACY_PER_CPU_AREA=y +CONFIG_HAVE_LMB=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_MLOCKED_PAGE_BIT=y +CONFIG_HAVE_MTD_OTP=y +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_HAVE_SYSCALL_WRAPPERS=y +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +# CONFIG_HCALL_STATS is not set +CONFIG_HDLC=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_X25=m +# CONFIG_HEADERS_CHECK is not set +CONFIG_HERMES=m +CONFIG_HERMES_CACHE_FW_ON_INIT=y +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +CONFIG_HIBERNATE_32=y +CONFIG_HIBERNATE_64=y +CONFIG_HIBERNATION=y +CONFIG_HIBERNATION_NVS=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_3M_PCT=m +CONFIG_HID_A4TECH=m +CONFIG_HID_APPLE=m +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_HID_EZKEY=m +CONFIG_HID_GREENASIA=m +CONFIG_HID_GYRATION=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_KYE=m +CONFIG_HID_LOGITECH=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MOSART=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_HID_PETALYNX=m +CONFIG_HID_PID=y +CONFIG_HID_QUANTA=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_HID_SONY=m +CONFIG_HID_STANTUM=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID_THRUSTMASTER=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_WACOM=m +CONFIG_HID_ZEROPLUS=m +CONFIG_HIGHMEM=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_HOLES_IN_ZONE=y +CONFIG_HOSTAP=m +CONFIG_HOSTAP_CS=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PCI=m +CONFIG_HOSTAP_PLX=m +CONFIG_HOTPLUG=y +CONFIG_HOTPLUG_CPU=y +# CONFIG_HOTPLUG_PCI is not set +CONFIG_HPET=y +CONFIG_HPET_MMAP=y +CONFIG_HPFS_FS=m +# CONFIG_HP_SIMETH is not set +# CONFIG_HP_SIMSERIAL is not set +CONFIG_HTC_PASIC3=m +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE_SIZE_4MB=y +# CONFIG_HUGETLB_PAGE_SIZE_512K is not set +# CONFIG_HUGETLB_PAGE_SIZE_64K is not set +CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y +# CONFIG_HVCS is not set +# CONFIG_HVC_CONSOLE is not set +CONFIG_HVC_DRIVER=y +CONFIG_HVC_RTAS=y +CONFIG_HVC_UDBG=y +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_HWMON_VID=m +CONFIG_HW_CONSOLE=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_N2RNG=y +CONFIG_HW_RANDOM_PASEMI=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_VIRTIO=m +# CONFIG_HYSDN is not set +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +CONFIG_I2C_ALGOPCA=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_COMPAT=y +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set +# CONFIG_I2C_DEBUG_CORE is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_HYDRA=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_MPC=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +# CONFIG_I2C_PASEMI is not set +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_POWERMAC=y +CONFIG_I2C_SCMI=m +CONFIG_I2C_SI470X=m +CONFIG_I2C_SI4713=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_STUB=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2O=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_BUS=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_CONFIG_OLD_IOCTL=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_EXT_ADAPTEC_DMA64=y +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_PROC=m +CONFIG_I2O_SCSI=m +CONFIG_I82092=m +CONFIG_IA32_SUPPORT=y +CONFIG_IA64=y +# CONFIG_IA64_ACPI_CPUFREQ is not set +# CONFIG_IA64_CYCLONE is not set +# CONFIG_IA64_DEBUG_CMPXCHG is not set +# CONFIG_IA64_DEBUG_IRQ is not set +# CONFIG_IA64_DIG is not set +# CONFIG_IA64_DIG_VTD is not set +# CONFIG_IA64_ESI is not set +CONFIG_IA64_GENERIC=y +CONFIG_IA64_GRANULE_16MB=y +# CONFIG_IA64_GRANULE_64MB is not set +# CONFIG_IA64_HP_AML_NFW is not set +# CONFIG_IA64_HP_SIM is not set +# CONFIG_IA64_HP_ZX1 is not set +# CONFIG_IA64_HP_ZX1_SWIOTLB is not set +CONFIG_IA64_L1_CACHE_SHIFT=7 +# CONFIG_IA64_MCA_RECOVERY is not set +# CONFIG_IA64_MC_ERR_INJECT is not set +CONFIG_IA64_PAGE_SIZE_16KB=y +# CONFIG_IA64_PAGE_SIZE_4KB is not set +# CONFIG_IA64_PAGE_SIZE_64KB is not set +# CONFIG_IA64_PAGE_SIZE_8KB is not set +# CONFIG_IA64_PALINFO is not set +# CONFIG_IA64_PRINT_HAZARDS is not set +# CONFIG_IA64_SGI_SN2 is not set +# CONFIG_IA64_SGI_UV is not set +CONFIG_IA64_UNCACHED_ALLOCATOR=y +# CONFIG_IA64_XEN_GUEST is not set +# CONFIG_IBMEBUS is not set +CONFIG_IBMLS=m +CONFIG_IBMOL=m +# CONFIG_IBMVETH is not set +CONFIG_IBMVIO=y +# CONFIG_IBM_BSR is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +CONFIG_ICPLUS_PHY=m +CONFIG_ICS932S401=m +CONFIG_IDEPCI_PCIBUS_ORDER=y +CONFIG_IDE_ATAPI=y +CONFIG_IDE_GD=y +CONFIG_IDE_GD_ATA=y +# CONFIG_IDE_GD_ATAPI is not set +# CONFIG_IDE_PHISON is not set +CONFIG_IDE_PROC_FS=y +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_TIMINGS=y +CONFIG_IDE_XFER_MODE=y +CONFIG_IEEE1394=m +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_ETH1394=m +CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y +CONFIG_IEEE1394_OHCI1394=m +CONFIG_IEEE1394_RAWIO=m +CONFIG_IEEE1394_SBP2=m +# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set +# CONFIG_IEEE1394_VERBOSEDEBUG is not set +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE802154=m +CONFIG_IEEE802154_DRIVERS=m +# CONFIG_IEEE802154_FAKEHARD is not set +CONFIG_IFB=m +# CONFIG_IGB is not set +CONFIG_IGBVF=m +# CONFIG_IIO is not set +# CONFIG_IKCONFIG_PROC is not set +# CONFIG_IMA is not set +CONFIG_INET=y +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET_AH=m +CONFIG_INET_DCCP_DIAG=m +CONFIG_INET_DIAG=y +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_LRO=y +CONFIG_INET_TCP_DIAG=y +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_AMSO1100_DEBUG=y +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y +# CONFIG_INFINIBAND_NES is not set +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_INPUT=y +CONFIG_INPUT_ADBHID=y +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_EVDEV=m +CONFIG_INPUT_FF_MEMLESS=m +# CONFIG_INPUT_GPIO is not set +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +CONFIG_INPUT_KEYBOARD=y +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MOUSE=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_PCAP=m +CONFIG_INPUT_PCF50633_PMU=m +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_SPARCSPKR=y +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_INPUT_TWL4030_PWRBUTTON=m +CONFIG_INPUT_WM831X_ON=m +CONFIG_INPUT_YEALINK=m +CONFIG_IOMMU_API=y +CONFIG_IOMMU_HELPER=y +CONFIG_IOMMU_VMERGE=y +CONFIG_IOSAPIC=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_CFQ=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +# CONFIG_IPC_NS is not set +CONFIG_IPDDP=m +CONFIG_IPDDP_DECAP=y +CONFIG_IPDDP_ENCAP=y +# CONFIG_IPIC is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPV6=m +# CONFIG_IPV6_MIP6 is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_IPV6_ROUTER_PREF is not set +CONFIG_IPV6_SIT=m +CONFIG_IPW2100=m +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2100_MONITOR=y +CONFIG_IPW2200=m +# CONFIG_IPW2200_DEBUG is not set +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +CONFIG_IPW2200_RADIOTAP=y +# CONFIG_IPWIRELESS is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_IP_ADVANCED_ROUTER=y +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +CONFIG_IP_DCCP_CCID3=y +# CONFIG_IP_DCCP_CCID3_DEBUG is not set +CONFIG_IP_DCCP_CCID3_RTO=100 +# CONFIG_IP_DCCP_DEBUG is not set +CONFIG_IP_DCCP_TFRC_LIB=y +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_FIB_TRIE is not set +CONFIG_IP_MROUTE=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_RARP=y +CONFIG_IP_SCTP=m +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_IPV6=y +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_TAB_BITS=12 +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_WRR=m +CONFIG_IRCOMM=m +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_DEBUG=y +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_ULTRA=y +CONFIG_IRLAN=m +CONFIG_IRNET=m +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_IRQSTACKS is not set +# CONFIG_IRQ_ALL_CPUS is not set +CONFIG_IRQ_PER_CPU=y +CONFIG_IRTTY_SIR=m +# CONFIG_ISA is not set +CONFIG_ISA_DMA_API=y +CONFIG_ISCSI_TCP=m +# CONFIG_ISDN_AUDIO is not set +CONFIG_ISDN_CAPI=m +# CONFIG_ISDN_CAPI_CAPI20 is not set +# CONFIG_ISDN_CAPI_CAPIDRV is not set +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +# CONFIG_ISDN_DIVERSION is not set +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +# CONFIG_ISDN_DRV_HISAX is not set +# CONFIG_ISDN_DRV_LOOP is not set +CONFIG_ISDN_HDLC=m +CONFIG_ISDN_I4L=m +# CONFIG_ISDN_PPP is not set +# CONFIG_ISDN_X25 is not set +# CONFIG_ISI is not set +CONFIG_ISL29003=m +CONFIG_ISO9660_FS=m +CONFIG_ISTALLION=m +# CONFIG_ITANIUM is not set +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_ITCO_WDT=m +# CONFIG_IWL3945 is not set +# CONFIG_IWL4965 is not set +CONFIG_IWL5000=y +CONFIG_IWLAGN=m +CONFIG_IWLWIFI=m +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_LEDS=y +# CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT is not set +CONFIG_IWM=m +# CONFIG_IWM_DEBUG is not set +CONFIG_IXGB=m +CONFIG_IXGBE=m +CONFIG_IXGBE_DCB=y +CONFIG_JBD=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_JFFS2_CMODE_FAVOURLZO=y +# CONFIG_JFFS2_CMODE_NONE is not set +# CONFIG_JFFS2_CMODE_PRIORITY is not set +# CONFIG_JFFS2_CMODE_SIZE is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_SUMMARY is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFS_DEBUG is not set +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +CONFIG_JFS_STATISTICS=y +CONFIG_JME=m +CONFIG_JOLIET=y +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_232=y +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_WALKERA0701=m +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_KARMA_PARTITION=y +CONFIG_KEXEC=y +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_LM8323=m +CONFIG_KEYBOARD_MATRIX=m +CONFIG_KEYBOARD_MAX7359=m +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_TWL4030=m +CONFIG_KEYS=y +CONFIG_KEYS_COMPAT=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +CONFIG_KGDB_SERIAL_CONSOLE=y +# CONFIG_KGDB_TESTS is not set +CONFIG_KINGSUN_DONGLE=m +# CONFIG_KMEMTRACE is not set +CONFIG_KPROBES=y +# CONFIG_KPROBES_SANITY_TEST is not set +CONFIG_KRETPROBES=y +CONFIG_KS0108=m +CONFIG_KS0108_DELAY=2 +CONFIG_KS0108_PORT=0x378 +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_KS959_DONGLE=m +CONFIG_KSDAZZLE_DONGLE=m +CONFIG_KSM=y +CONFIG_LANMEDIA=m +CONFIG_LAPBETHER=m +CONFIG_LBDAF=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_ILI9320=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_PLATFORM=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +# CONFIG_LDM_DEBUG is not set +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_DA903X=m +CONFIG_LEDS_DAC124S085=m +# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_SUNFIRE=m +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_GPIO=m +# CONFIG_LEDS_TRIGGER_IDE_DISK is not set +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_WM8350=m +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=0 +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +CONFIG_LIB80211_CRYPT_WEP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_LIBCRC32C=m +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_CS=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_SPI=m +CONFIG_LIBERTAS_THINFIRM=m +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +# CONFIG_LINE6_USB is not set +CONFIG_LIRC_ATIUSB=m +CONFIG_LIRC_BT829=m +CONFIG_LIRC_CONFIG_LIRC_WPC8769L=m +CONFIG_LIRC_DEV=m +CONFIG_LIRC_ENE0100=m +# CONFIG_LIRC_GPIO is not set +CONFIG_LIRC_I2C=m +CONFIG_LIRC_IGORPLUGUSB=m +CONFIG_LIRC_IMON=m +CONFIG_LIRC_IT87=m +CONFIG_LIRC_ITE8709=m +CONFIG_LIRC_MCEUSB=m +# CONFIG_LIRC_PARALLEL is not set +CONFIG_LIRC_SASEM=m +CONFIG_LIRC_SERIAL=m +CONFIG_LIRC_SIR=m +CONFIG_LIRC_STREAMZAP=m +CONFIG_LIRC_TTUSBIR=m +CONFIG_LITELINK_DONGLE=m +# CONFIG_LKDTM is not set +CONFIG_LLC2=m +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_LOCKD=m +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_LOCKD_V4=y +CONFIG_LOCK_KERNEL=y +# CONFIG_LOCK_STAT is not set +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGITECH_FF=y +# CONFIG_LOGO is not set +CONFIG_LOWMEM_SIZE=0x30000000 +# CONFIG_LPARCFG is not set +# CONFIG_LP_CONSOLE is not set +CONFIG_LSI_ET1011C_PHY=m +CONFIG_LSM_MMAP_MIN_ADDR=0 +CONFIG_LXT_PHY=m +CONFIG_M25PXX_USE_FAST_READ=y +CONFIG_MA600_DONGLE=m +CONFIG_MAC80211=m +CONFIG_MAC80211_DEBUGFS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_HWSIM=m +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_RC_DEFAULT="minstrel" +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +# CONFIG_MAC80211_RC_DEFAULT_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MACE=m +# CONFIG_MACE_AAUI_PORT is not set +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_MAC_FLOPPY=m +CONFIG_MAGIC_SYSRQ=y +CONFIG_MARVELL_PHY=m +CONFIG_MAX_RAW_DEVS=256 +CONFIG_MCKINLEY=y +CONFIG_MCOUNT=y +CONFIG_MCP2120_DONGLE=m +CONFIG_MCS_FIR=m +CONFIG_MD=y +CONFIG_MDIO=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_GPIO=m +CONFIG_MD_FAULTY=m +CONFIG_MD_LINEAR=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_RAID6_PQ=m +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_TUNER=m +# CONFIG_MEDIA_TUNER_CUSTOMISE is not set +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA18271=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC5000=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +# CONFIG_MEMORY_HOTREMOVE is not set +# CONFIG_MEMSTICK is not set +CONFIG_MFD_CORE=m +CONFIG_MFD_MC13783=m +CONFIG_MFD_PCF50633=m +CONFIG_MFD_SM501=m +# CONFIG_MFD_TMIO is not set +CONFIG_MFD_WM831X=m +CONFIG_MFD_WM8350=m +CONFIG_MFD_WM8350_I2C=m +CONFIG_MFD_WM8400=m +CONFIG_MIGRATION=y +CONFIG_MII=m +CONFIG_MINIX_FS=m +CONFIG_MISC_DEVICES=y +CONFIG_MISC_FILESYSTEMS=y +CONFIG_MISDN=m +CONFIG_MISDN_AVMFRITZ=m +# CONFIG_MISDN_DSP is not set +# CONFIG_MISDN_HFCMULTI is not set +# CONFIG_MISDN_HFCPCI is not set +# CONFIG_MISDN_HFCUSB is not set +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m +# CONFIG_MISDN_L1OIP is not set +CONFIG_MISDN_NETJET=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_W6692=m +CONFIG_MKISS=m +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_MLX4_EN=m +CONFIG_MLX4_INFINIBAND=m +CONFIG_MMC=m +# CONFIG_MMC_AT91 is not set +# CONFIG_MMC_ATMELMCI is not set +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_MMC_CB710=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_RICOH_MMC=m +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_OF=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_SPI=m +# CONFIG_MMC_TEST is not set +CONFIG_MMC_TIFM_SD=m +# CONFIG_MMC_UNSAFE_RESUME is not set +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_WBSD=m +CONFIG_MMTIMER=y +CONFIG_MMU=y +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_GPIO=m +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SENTELIC=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_MOXA_INTELLIO=m +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_MPC5121_ADS is not set +# CONFIG_MPC5121_GENERIC is not set +CONFIG_MPIC=y +CONFIG_MPIC_BROKEN_REGREAD=y +CONFIG_MPIC_U3_HT_IRQS=y +# CONFIG_MPIC_WEIRD is not set +CONFIG_MSDOS_FS=m +CONFIG_MSDOS_PARTITION=y +# CONFIG_MSI_BITMAP_SELFTEST is not set +# CONFIG_MSPEC is not set +CONFIG_MTD=m +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTD_ABSENT=m +CONFIG_MTD_ALAUDA=m +CONFIG_MTD_AR7_PARTS=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_AMDSTD=m +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=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_CHAR=m +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_CONCAT=m +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_DATAFLASH_OTP=y +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_DOCECC=m +CONFIG_MTD_DOCPROBE=m +CONFIG_MTD_DOCPROBE_ADDRESS=0 +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +CONFIG_MTD_GEN_PROBE=m +CONFIG_MTD_GPIO_ADDR=m +CONFIG_MTD_INTEL_VR_NOR=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_LPDDR=m +CONFIG_MTD_M25P80=m +CONFIG_MTD_MAP_BANK_WIDTH_1=y +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +CONFIG_MTD_MTDRAM=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_CAFE=m +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_FSL_ELBC is not set +CONFIG_MTD_NAND_IDS=m +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_NANDSIM=m +# CONFIG_MTD_NAND_PASEMI is not set +CONFIG_MTD_NAND_PLATFORM=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_OF_PARTS is not set +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_ONENAND_GENERIC=m +# CONFIG_MTD_ONENAND_OTP is not set +CONFIG_MTD_ONENAND_SIM=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_OOPS=m +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_PCI=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_PHYSMAP=m +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PHYSMAP_OF=m +CONFIG_MTD_PLATRAM=m +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_QINFO_PROBE=m +CONFIG_MTD_RAM=m +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +CONFIG_MTD_REDBOOT_PARTS=m +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +CONFIG_MTD_ROM=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_SST25L=m +CONFIG_MTD_SUN_UFLASH=m +CONFIG_MTD_TESTS=m +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_BEB_RESERVE=1 +# CONFIG_MTD_UBI_DEBUG is not set +CONFIG_MTD_UBI_GLUEBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +# CONFIG_MULTICORE_RAID456 is not set +CONFIG_MV643XX_ETH=m +CONFIG_MWL8K=m +CONFIG_MYRI10GE=m +CONFIG_MYRI_SBUS=m +CONFIG_NAMESPACES=y +CONFIG_NATIONAL_PHY=m +CONFIG_NATSEMI=m +CONFIG_NCPFS_EXTRAS=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_PACKET_SIGNING=y +CONFIG_NCPFS_STRONG=y +CONFIG_NCP_FS=m +# CONFIG_NDISWRAPPER is not set +CONFIG_NE2K_PCI=m +CONFIG_NEED_MULTIPLE_NODES=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_NET=y +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETDEVICES=y +CONFIG_NETDEV_1000=y +CONFIG_NETDEV_10000=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_TPROXY=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETLABEL=y +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NETROM=m +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NETWORK_SECMARK=y +CONFIG_NETXEN_NIC=m +CONFIG_NET_9P=m +# CONFIG_NET_9P_DEBUG is not set +CONFIG_NET_9P_RDMA=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_ACT_GACT=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_CLS=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_CGROUP=y +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_FW=m +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_DCCPPROBE=m +# CONFIG_NET_DROP_MONITOR is not set +CONFIG_NET_DSA=y +CONFIG_NET_DSA_MV88E6060=y +CONFIG_NET_DSA_MV88E6123_61_65=y +CONFIG_NET_DSA_MV88E6131=y +CONFIG_NET_DSA_MV88E6XXX=y +CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y +CONFIG_NET_DSA_TAG_DSA=y +CONFIG_NET_DSA_TAG_EDSA=y +CONFIG_NET_DSA_TAG_TRAILER=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_ETHERNET=y +CONFIG_NET_FC=y +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_NET_IPIP=m +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_NET_NS=y +CONFIG_NET_PCI=y +CONFIG_NET_PCMCIA=y +CONFIG_NET_POCKET=y +CONFIG_NET_POLL_CONTROLLER=y +# CONFIG_NET_SB1000 is not set +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_FIFO=y +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_TCPPROBE=m +CONFIG_NET_TULIP=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NEW_LEDS=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_NFS_FS=m +# CONFIG_NFS_FSCACHE is not set +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_PROTO_DCCP=m +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_PROTO_DCCP=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PROTO_SCTP=m +CONFIG_NF_NAT_PROTO_UDPLITE=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NILFS2_FS=m +CONFIG_NL80211_TESTMODE=y +CONFIG_NLATTR=y +CONFIG_NLS=y +CONFIG_NLS_ASCII=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +CONFIG_NODES_SPAN_OTHER_NODES=y +CONFIG_NOP_TRACER=y +CONFIG_NOP_USB_XCEIV=m +# CONFIG_NORTEL_HERMES is not set +# CONFIG_NOZOMI is not set +CONFIG_NO_HZ=y +CONFIG_NR_QUICK=1 +CONFIG_NS83820=m +CONFIG_NSC_FIR=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_FS=m +# CONFIG_NTFS_RW is not set +CONFIG_NUMA=y +CONFIG_NVRAM=y +CONFIG_N_HDLC=m +CONFIG_OBP_FLASH=m +# CONFIG_OCFS2_DEBUG_FS is not set +CONFIG_OCFS2_DEBUG_MASKLOG=y +CONFIG_OCFS2_FS=m +CONFIG_OCFS2_FS_O2CB=m +CONFIG_OCFS2_FS_POSIX_ACL=y +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m +CONFIG_OF=y +CONFIG_OF_DEVICE=y +CONFIG_OF_GPIO=y +CONFIG_OF_I2C=y +CONFIG_OF_MDIO=y +CONFIG_OF_SPI=y +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_OMFS_FS=m +CONFIG_OPROFILE=m +# CONFIG_OTUS is not set +CONFIG_P54_COMMON=m +CONFIG_P54_LEDS=y +CONFIG_P54_PCI=m +CONFIG_P54_SPI=m +CONFIG_P54_USB=m +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_PAGEFLAGS_EXTENDED=y +# CONFIG_PAGE_POISONING is not set +# CONFIG_PANEL is not set +CONFIG_PANTHERLORD_FF=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_GUEST=y +CONFIG_PARIDE=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_EPAT=m +# CONFIG_PARIDE_EPATC8 is not set +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_PT=m +CONFIG_PARPORT=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_AX88796=m +# CONFIG_PARPORT_GSC is not set +CONFIG_PARPORT_NOT_PC=y +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_FIFO=y +CONFIG_PARPORT_PC_PCMCIA=m +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_SERIAL=m +CONFIG_PARPORT_SUNBPP=m +CONFIG_PARTITION_ADVANCED=y +# CONFIG_PASEMI_MAC is not set +CONFIG_PATA_ACPI=m +# CONFIG_PATA_ALI is not set +CONFIG_PATA_AMD=m +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +CONFIG_PATA_ATP867X=m +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +CONFIG_PATA_CS5520=m +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +CONFIG_PATA_EFAR=m +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_NS87415 is not set +CONFIG_PATA_OF_PLATFORM=m +CONFIG_PATA_OLDPIIX=m +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +CONFIG_PATA_PCMCIA=m +CONFIG_PATA_PDC2027X=m +# CONFIG_PATA_PDC_OLD is not set +CONFIG_PATA_PLATFORM=m +# CONFIG_PATA_RADISYS is not set +CONFIG_PATA_RDC=m +CONFIG_PATA_RZ1000=m +# CONFIG_PATA_SC1200 is not set +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_WINBOND=m +# CONFIG_PC300TOO is not set +CONFIG_PCCARD=m +CONFIG_PCCARD_NONSTATIC=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_PCI=y +CONFIG_PCI200SYN=m +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +# CONFIG_PCIEASPM_DEBUG is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_ATMEL=m +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_HERMES is not set +# CONFIG_PCI_IOV is not set +CONFIG_PCI_LEGACY=y +CONFIG_PCI_QUIRKS=y +# CONFIG_PCI_STUB is not set +CONFIG_PCI_SYSCALL=y +CONFIG_PCMCIA=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_PCMCIA_AXNET=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_IBMTR=m +CONFIG_PCMCIA_IOCTL=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_NETWAVE=m +CONFIG_PCMCIA_NINJA_SCSI=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_PCMCIA_WAVELAN=m +CONFIG_PCMCIA_WL3501=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_XIRCOM=m +CONFIG_PCNET32=m +CONFIG_PCSPKR_PLATFORM=y +CONFIG_PD6729=m +CONFIG_PDA_POWER=m +CONFIG_PDC_ADMA=m +# CONFIG_PERFMON is not set +CONFIG_PERF_COUNTERS=y +CONFIG_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y +# CONFIG_PERMIT_BSP_REMOVE is not set +CONFIG_PGTABLE_3=y +# CONFIG_PGTABLE_4 is not set +CONFIG_PHANTOM=m +CONFIG_PHONE=m +CONFIG_PHONET=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m +CONFIG_PHYLIB=y +# CONFIG_PHYP_DUMP is not set +CONFIG_PHYSICAL_START=0x00000000 +# CONFIG_PID_NS is not set +# CONFIG_PLAN9AUTH is not set +CONFIG_PLIP=m +# CONFIG_PLX_HERMES is not set +CONFIG_PM=y +CONFIG_PMAC_APM_EMU=m +CONFIG_PMAC_BACKLIGHT=y +CONFIG_PMAC_BACKLIGHT_LEGACY=y +CONFIG_PMAC_MEDIABAY=y +CONFIG_PMAC_RACKMETER=m +CONFIG_PMIC_DA903X=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_DISABLE_CONSOLE=y +CONFIG_PM_RUNTIME=y +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PNP=y +CONFIG_PNPACPI=y +# CONFIG_PNP_DEBUG_MESSAGES is not set +# CONFIG_POCH is not set +# CONFIG_POHMELFS is not set +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_POWER3=y +CONFIG_POWER4=y +# CONFIG_POWER4_ONLY is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PPC=y +CONFIG_PPC32=y +# CONFIG_PPC601_SYNC_FIX is not set +# CONFIG_PPC_16K_PAGES is not set +# CONFIG_PPC_256K_PAGES is not set +CONFIG_PPC_4K_PAGES=y +# CONFIG_PPC_64K_PAGES is not set +# CONFIG_PPC_82xx is not set +# CONFIG_PPC_83xx is not set +# CONFIG_PPC_85xx is not set +# CONFIG_PPC_86xx is not set +# CONFIG_PPC_8xx is not set +# CONFIG_PPC_BOOK3E_64 is not set +CONFIG_PPC_BOOK3S=y +CONFIG_PPC_BOOK3S_32=y +CONFIG_PPC_BOOK3S_64=y +# CONFIG_PPC_CELLEB is not set +# CONFIG_PPC_CELL_NATIVE is not set +# CONFIG_PPC_CELL_QPACE is not set +CONFIG_PPC_CHRP=y +# CONFIG_PPC_CLOCK is not set +# CONFIG_PPC_DCR_MMIO is not set +# CONFIG_PPC_DCR_NATIVE is not set +CONFIG_PPC_DISABLE_WERROR=y +# CONFIG_PPC_EARLY_DEBUG is not set +# CONFIG_PPC_EMULATED_STATS is not set +CONFIG_PPC_FPU=y +CONFIG_PPC_HAVE_PMU_SUPPORT=y +CONFIG_PPC_I8259=y +# CONFIG_PPC_IBM_CELL_BLADE is not set +# CONFIG_PPC_INDIRECT_IO is not set +# CONFIG_PPC_ISERIES is not set +# CONFIG_PPC_MPC52xx is not set +CONFIG_PPC_MSI_BITMAP=y +CONFIG_PPC_NATIVE=y +CONFIG_PPC_OF=y +CONFIG_PPC_OF_BOOT_TRAMPOLINE=y +# CONFIG_PPC_OF_PLATFORM_PCI is not set +CONFIG_PPC_PASEMI_CPUFREQ=y +CONFIG_PPC_PASEMI_IOMMU=y +# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set +CONFIG_PPC_PASEMI_MDIO=y +CONFIG_PPC_PCI_CHOICE=y +CONFIG_PPC_PERF_CTRS=y +CONFIG_PPC_PMAC=y +CONFIG_PPC_PMAC64=y +CONFIG_PPC_PSERIES=y +CONFIG_PPC_RTAS=y +# CONFIG_PPC_SMLPAR is not set +# CONFIG_PPC_SPLPAR is not set +CONFIG_PPC_STD_MMU=y +CONFIG_PPC_STD_MMU_32=y +CONFIG_PPC_STD_MMU_64=y +CONFIG_PPC_UDBG_16550=y +CONFIG_PPDEV=m +CONFIG_PPP=m +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set +# CONFIG_PQ2ADS is not set +# CONFIG_PREEMPT is not set +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_PRINTER=m +CONFIG_PRINTK=y +CONFIG_PRINTK_TIME=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_PRINT_STACK_DEPTH=64 +# CONFIG_PRISM2_USB is not set +CONFIG_PROC_DEVICETREE=y +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_PROC_SYSCTL=y +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_PS3_ADVANCED is not set +CONFIG_PS3_DISK=m +# CONFIG_PS3_DYNAMIC_DMA is not set +CONFIG_PS3_FLASH=m +CONFIG_PS3_HTAB_SIZE=20 +CONFIG_PS3_LPM=m +CONFIG_PS3_PS3AV=y +CONFIG_PS3_ROM=m +CONFIG_PS3_STORAGE=m +CONFIG_PS3_SYS_MANAGER=y +CONFIG_PS3_VUART=y +CONFIG_PSERIES_MSI=y +CONFIG_PSS_MIXER=y +CONFIG_QFMT_V2=m +CONFIG_QLA3XXX=m +CONFIG_QLGE=m +CONFIG_QNX4FS_FS=m +CONFIG_QSEMI_PHY=m +CONFIG_QT2160=m +CONFIG_QUICKLIST=y +CONFIG_QUOTA=y +CONFIG_QUOTACTL=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QUOTA_TREE=m +CONFIG_R3964=m +# CONFIG_R6040 is not set +CONFIG_R8169_VLAN=y +CONFIG_RADIO_ADAPTERS=y +CONFIG_RADIO_GEMTEK_PCI=m +CONFIG_RADIO_MAESTRO=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_SI470X=y +CONFIG_RADIO_SI4713=m +CONFIG_RADIO_TEA5764=m +CONFIG_RAID_ATTRS=m +# CONFIG_RAR_REGISTER is not set +CONFIG_RAW_DRIVER=m +# CONFIG_RCU_CPU_STALL_DETECTOR is not set +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_RDS_DEBUG is not set +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +CONFIG_RD_BZIP2=y +CONFIG_RD_GZIP=y +CONFIG_RD_LZMA=y +# CONFIG_REALTEK_PHY is not set +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_AB3100=m +CONFIG_REGULATOR_BQ24022=m +CONFIG_REGULATOR_DA903X=m +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MC13783=m +CONFIG_REGULATOR_PCAP=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TWL4030=y +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_WM831X=m +CONFIG_REGULATOR_WM8350=m +CONFIG_REGULATOR_WM8400=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_FS=m +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_REISERFS_FS_XATTR=y +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_RELAY=y +# CONFIG_RELOCATABLE is not set +# CONFIG_RESOURCE_COUNTERS is not set +CONFIG_RFD_FTL=m +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_LEDS=y +CONFIG_RING_BUFFER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +# CONFIG_RING_BUFFER_BENCHMARK is not set +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_ROCKETPORT=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +# CONFIG_ROMFS_BACKED_BY_MTD is not set +CONFIG_ROMFS_FS=m +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_ROSE=m +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_RPCSEC_GSS_SPKM3=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT2500USB=m +CONFIG_RT2800USB=m +CONFIG_RT2X00=m +# CONFIG_RT2X00_DEBUG is not set +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_CRYPTO=y +# CONFIG_RT2X00_LIB_DEBUGFS is not set +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_HT=y +CONFIG_RT2X00_LIB_LEDS=y +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT61PCI=m +CONFIG_RT73USB=m +# CONFIG_RTAS_FLASH is not set +CONFIG_RTAS_PROC=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_DRV_AB3100=m +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_EFI=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_GENERIC=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_PCAP=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_STARFIRE=y +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_SUN4V=y +CONFIG_RTC_DRV_TWL4030=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_WM831X=m +CONFIG_RTC_DRV_WM8350=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_LIB=y +# CONFIG_RTL8180 is not set +CONFIG_RTL8187=m +# CONFIG_RTL8187SE is not set +CONFIG_RTL8187_LEDS=y +# CONFIG_RTL8192E is not set +# CONFIG_RTL8192SU is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_RT_MUTEXES=y +# CONFIG_RT_MUTEX_TESTER is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_RXKAD=m +CONFIG_S2IO=m +# CONFIG_SAMPLES is not set +CONFIG_SATA_AHCI=m +CONFIG_SATA_INIC162X=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PMP=y +CONFIG_SATA_PROMISE=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIL24=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SX4=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_SBUS=y +CONFIG_SBUSCHAR=y +CONFIG_SC6600=y +CONFIG_SC6600_CDROM=4 +CONFIG_SC6600_CDROMBASE=0 +CONFIG_SC6600_JOY=y +CONFIG_SC92031=m +# CONFIG_SCANLOG is not set +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_SCHED_SMT=y +# CONFIG_SCHED_TRACER is not set +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +# CONFIG_SCSI_AIC7XXX_OLD is not set +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ARCMSR_AER=y +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DH=m +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_HPTIOP=m +# CONFIG_SCSI_IBMVFC is not set +# CONFIG_SCSI_IBMVSCSI is not set +# CONFIG_SCSI_IBMVSCSIS is not set +CONFIG_SCSI_IMM=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_DUMP is not set +# CONFIG_SCSI_IPR_TRACE is not set +CONFIG_SCSI_ISCSITARGET=m +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_LOWLEVEL=y +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +CONFIG_SCSI_LPFC=m +CONFIG_SCSI_MAC53C94=m +CONFIG_SCSI_MESH=m +CONFIG_SCSI_MESH_RESET_DELAY_MS=4000 +CONFIG_SCSI_MESH_SYNC_RATE=5 +CONFIG_SCSI_MPT2SAS=m +# CONFIG_SCSI_MPT2SAS_LOGGING is not set +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_MVSAS is not set +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_NSP32=m +# CONFIG_SCSI_OSD_DEBUG is not set +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_PROC_FS=y +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGICPTI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SAS_LIBSAS=m +# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SRP=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SUNESP=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_TGT=m +CONFIG_SCSI_WAIT_SCAN=m +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +CONFIG_SCTP_HMAC_MD5=y +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SDIO_UART=m +CONFIG_SECCOMP=y +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 +CONFIG_SECURITY_APPARMOR_COMPAT_24=y +CONFIG_SECURITY_FILE_CAPABILITIES=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +CONFIG_SECURITY_PATH=y +# CONFIG_SECURITY_ROOTPLUG is not set +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_DISABLE=y +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +CONFIG_SECURITY_SMACK=y +CONFIG_SECURITY_TOMOYO=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM9240=m +# CONFIG_SENSORS_ADS7828 is not set +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +# CONFIG_SENSORS_ADT7473 is not set +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_AMS=m +CONFIG_SENSORS_AMS_I2C=y +CONFIG_SENSORS_AMS_PMU=y +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_SENSORS_LIS3_SPI=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_MAX1111=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_ULTRA45=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +# CONFIG_SENSORS_W83L786NG is not set +CONFIG_SENSORS_WM831X=m +CONFIG_SENSORS_WM8350=m +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_PCI=m +CONFIG_SERIAL_8250_PNP=m +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_ICOM is not set +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_OF_PLATFORM=m +CONFIG_SERIAL_PMACZILOG=m +# CONFIG_SERIAL_PMACZILOG_TTYS is not set +# CONFIG_SERIAL_SGI_IOC3 is not set +# CONFIG_SERIAL_SGI_IOC4 is not set +# CONFIG_SERIAL_SGI_L1_CONSOLE is not set +CONFIG_SERIAL_SUNCORE=y +CONFIG_SERIAL_SUNHV=y +CONFIG_SERIAL_SUNSAB=y +CONFIG_SERIAL_SUNSAB_CONSOLE=y +CONFIG_SERIAL_SUNSU=y +CONFIG_SERIAL_SUNSU_CONSOLE=y +CONFIG_SERIAL_SUNZILOG=y +CONFIG_SERIAL_SUNZILOG_CONSOLE=y +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_XILINX_XPS_PS2=m +CONFIG_SFC=m +CONFIG_SFC_MTD=y +CONFIG_SGI_IOC3=m +CONFIG_SGI_IOC4=m +CONFIG_SGI_SN=y +# CONFIG_SGI_SNSC is not set +# CONFIG_SGI_TIOCX is not set +CONFIG_SGI_XP=m +CONFIG_SHMEM=y +CONFIG_SIGMATEL_FIR=m +CONFIG_SIGNALFD=y +CONFIG_SIMPLE_GPIO=y +CONFIG_SIS190=m +CONFIG_SIS900=m +CONFIG_SKFP=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +# CONFIG_SLAB is not set +CONFIG_SLABINFO=y +CONFIG_SLHC=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +# CONFIG_SLOB is not set +CONFIG_SLOW_WORK=y +# CONFIG_SLOW_WORK_DEBUG is not set +CONFIG_SLUB=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_SMC_IRCC_FIR=m +CONFIG_SMSC9420=m +CONFIG_SMSC_PHY=m +CONFIG_SMS_SDIO_DRV=m +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_USB_DRV=m +CONFIG_SND=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 +CONFIG_SND_AD1889=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_AOA=m +CONFIG_SND_AOA_FABRIC_LAYOUT=m +CONFIG_SND_AOA_ONYX=m +CONFIG_SND_AOA_SOUNDBUS=m +CONFIG_SND_AOA_SOUNDBUS_I2S=m +CONFIG_SND_AOA_TAS=m +CONFIG_SND_AOA_TOONIE=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AW2=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +CONFIG_SND_BT87X_OVERCLOCK=y +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_DARLA24=m +# CONFIG_SND_DEBUG is not set +CONFIG_SND_DRIVERS=y +CONFIG_SND_DUMMY=m +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_ECHO3G=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_GINA20=m +CONFIG_SND_GINA24=m +CONFIG_SND_HDA_CODEC_ANALOG=y +CONFIG_SND_HDA_CODEC_ATIHDMI=y +CONFIG_SND_HDA_CODEC_CA0110=y +CONFIG_SND_HDA_CODEC_CIRRUS=y +CONFIG_SND_HDA_CODEC_CMEDIA=y +CONFIG_SND_HDA_CODEC_CONEXANT=y +CONFIG_SND_HDA_CODEC_INTELHDMI=y +CONFIG_SND_HDA_CODEC_NVHDMI=y +CONFIG_SND_HDA_CODEC_REALTEK=y +CONFIG_SND_HDA_CODEC_SI3054=y +CONFIG_SND_HDA_CODEC_SIGMATEL=y +CONFIG_SND_HDA_CODEC_VIA=y +CONFIG_SND_HDA_ELD=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_JACK=y +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +# CONFIG_SND_HIFIER is not set +CONFIG_SND_HRTIMER=m +CONFIG_SND_HWDEP=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_JACK=y +CONFIG_SND_KORG1212=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MIA=m +CONFIG_SND_MIXART=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_MONA=m +CONFIG_SND_MPU401=m +CONFIG_SND_MPU401_UART=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_NM256=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL3_LIB_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_OSSEMUL=y +# CONFIG_SND_OXYGEN is not set +CONFIG_SND_PCI=y +CONFIG_SND_PCM=m +CONFIG_SND_PCMCIA=y +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_PCXHR=m +CONFIG_SND_PDAUDIOCF=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_POWERMAC=m +CONFIG_SND_POWERMAC_AUTO_DRC=y +CONFIG_SND_PPC=y +CONFIG_SND_PS3=m +CONFIG_SND_PS3_DEFAULT_START_DELAY=2000 +CONFIG_SND_RAWMIDI=m +CONFIG_SND_RAWMIDI_SEQ=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SB16_DSP=m +# CONFIG_SND_SBAWE_SEQ is not set +CONFIG_SND_SB_COMMON=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_AD1836=m +CONFIG_SND_SOC_AD1938=m +CONFIG_SND_SOC_AD73311=m +CONFIG_SND_SOC_AK4104=m +CONFIG_SND_SOC_AK4535=m +CONFIG_SND_SOC_AK4642=m +CONFIG_SND_SOC_ALL_CODECS=m +CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_L3=m +CONFIG_SND_SOC_MAX9877=m +CONFIG_SND_SOC_PCM3008=m +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_TLV320AIC23=m +CONFIG_SND_SOC_TLV320AIC26=m +CONFIG_SND_SOC_TLV320AIC3X=m +CONFIG_SND_SOC_TWL4030=m +CONFIG_SND_SOC_UDA134X=m +CONFIG_SND_SOC_UDA1380=m +CONFIG_SND_SOC_WM8350=m +CONFIG_SND_SOC_WM8400=m +CONFIG_SND_SOC_WM8510=m +CONFIG_SND_SOC_WM8523=m +CONFIG_SND_SOC_WM8580=m +CONFIG_SND_SOC_WM8728=m +CONFIG_SND_SOC_WM8731=m +CONFIG_SND_SOC_WM8750=m +CONFIG_SND_SOC_WM8753=m +CONFIG_SND_SOC_WM8776=m +CONFIG_SND_SOC_WM8900=m +CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8940=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8961=m +CONFIG_SND_SOC_WM8971=m +CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8988=m +CONFIG_SND_SOC_WM8990=m +CONFIG_SND_SOC_WM8993=m +CONFIG_SND_SOC_WM9081=m +CONFIG_SND_SOC_WM_HUBS=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_SPARC=y +CONFIG_SND_SPI=y +CONFIG_SND_SUN_AMD7930=m +CONFIG_SND_SUN_CS4231=m +CONFIG_SND_SUN_DBRI=m +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_TIMER=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_USX2Y=m +# CONFIG_SND_VERBOSE_PRINTK is not set +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRMIDI=m +# CONFIG_SND_VIRTUOSO is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_VX222=m +CONFIG_SND_VXPOCKET=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_YMFPCI=m +CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_MT9M001=m +CONFIG_SOC_CAMERA_MT9M111=m +CONFIG_SOC_CAMERA_MT9T031=m +CONFIG_SOC_CAMERA_MT9V022=m +CONFIG_SOC_CAMERA_OV772X=m +CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_SOC_CAMERA_TW9910=m +CONFIG_SOFT_WATCHDOG=m +CONFIG_SOUND=m +CONFIG_SOUND_AEDSP16=m +CONFIG_SOUND_DMAP=y +CONFIG_SOUND_KAHLUA=m +CONFIG_SOUND_MPU401=m +CONFIG_SOUND_MSS=m +CONFIG_SOUND_OSS=m +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y +CONFIG_SOUND_PAS=m +CONFIG_SOUND_PRIME=m +CONFIG_SOUND_PSS=m +CONFIG_SOUND_SB=m +CONFIG_SOUND_SSCAPE=m +# CONFIG_SOUND_TRACEINIT is not set +CONFIG_SOUND_TRIX=m +CONFIG_SOUND_UART6850=m +CONFIG_SOUND_VMIDI=m +CONFIG_SOUND_YM3812=m +CONFIG_SPARC=y +# CONFIG_SPARC32 is not set +CONFIG_SPARC64=y +# CONFIG_SPARC64_PAGE_SIZE_64KB is not set +CONFIG_SPARC64_PAGE_SIZE_8KB=y +CONFIG_SPARC64_PCI=y +CONFIG_SPARC64_SMP=y +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPI=y +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_GPIO=m +CONFIG_SPI_LM70_LLP=m +CONFIG_SPI_MASTER=y +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SPU_BASE=y +CONFIG_SPU_FS=m +CONFIG_SPU_FS_64K_LS=y +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_SR_REPORT_TIME_LIMIT=100 +CONFIG_SSB=m +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +# CONFIG_SSB_PCMCIAHOST is not set +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SPROM=y +CONFIG_SSFDC=m +CONFIG_STACKTRACE=y +CONFIG_STACKTRACE_SUPPORT=y +# CONFIG_STACK_DEBUG is not set +# CONFIG_STACK_TRACER is not set +CONFIG_STAGING=y +CONFIG_STALDRV=y +CONFIG_STALLION=m +CONFIG_STANDALONE=y +CONFIG_STE10XP=m +CONFIG_STOP_MACHINE=y +CONFIG_STP=m +CONFIG_STRIP=m +# CONFIG_STRIP_ASM_SYMS is not set +CONFIG_SUNBMAC=m +CONFIG_SUNDANCE=m +CONFIG_SUNLANCE=m +CONFIG_SUNQE=m +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_SUNVDC=m +CONFIG_SUNVNET=m +CONFIG_SUN_LDOMS=y +CONFIG_SUN_OPENPROMFS=m +CONFIG_SUN_OPENPROMIO=y +CONFIG_SUN_PARTITION=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_SWAP=y +CONFIG_SWIOTLB=y +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_CS=m +CONFIG_SYNCLINK_GT=m +CONFIG_SYN_COOKIES=y +CONFIG_SYSCTL=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_SYSCTL_SYSCALL_CHECK=y +CONFIG_SYSFS=y +# CONFIG_SYSFS_DEPRECATED_V2 is not set +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSV_FS=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_SYS_SUPPORTS_HUGETLBFS=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TADPOLE_TS102_UCTRL=m +CONFIG_TASKSTATS=y +# CONFIG_TASK_DELAY_ACCT is not set +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_TASK_SIZE=0xc0000000 +CONFIG_TASK_XACCT=y +CONFIG_TAU=y +# CONFIG_TAU_AVERAGE is not set +# CONFIG_TAU_INT is not set +CONFIG_TCG_ATMEL=m +# CONFIG_TCG_INFINEON is not set +CONFIG_TCG_NSC=m +# CONFIG_TCG_TIS is not set +CONFIG_TCG_TPM=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_MD5SIG=y +CONFIG_TEHUTI=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_TEXTSEARCH_KMP=m +CONFIG_THERMAL_HWMON=y +CONFIG_THERM_ADT746X=m +CONFIG_THERM_WINDTUNNEL=m +CONFIG_THRUSTMASTER_FF=y +CONFIG_TICK_ONESHOT=y +CONFIG_TIFM_7XX1=m +CONFIG_TIFM_CORE=m +CONFIG_TIGON3=m +CONFIG_TIMERFD=y +CONFIG_TIMER_STATS=y +CONFIG_TIPC=m +# CONFIG_TIPC_ADVANCED is not set +# CONFIG_TIPC_DEBUG is not set +CONFIG_TLAN=m +# CONFIG_TMD_HERMES is not set +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMS380TR=m +CONFIG_TMSPCI=m +CONFIG_TOIM3232_DONGLE=m +CONFIG_TOSHIBA_FIR=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_DA9034=m +CONFIG_TOUCHSCREEN_EETI=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_MCS5000=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_PCAP=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_TSC2007=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TRACEPOINTS=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACING=y +CONFIG_TRACING_SUPPORT=y +# CONFIG_TRANZPORT is not set +# CONFIG_TREE_PREEMPT_RCU is not set +CONFIG_TREE_RCU=y +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_TTPCI_EEPROM=m +CONFIG_TULIP=m +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_MWI is not set +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_TUN=y +# CONFIG_TUNE_CELL is not set +CONFIG_TWL4030_CORE=y +CONFIG_TWL4030_USB=m +CONFIG_TWL4030_WATCHDOG=m +CONFIG_TYPHOON=m +CONFIG_U3_DART=y +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +# CONFIG_UBIFS_FS_DEBUG is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_UCB1400_CORE=m +CONFIG_UDBG_RTAS_CONSOLE=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y +CONFIG_UEVENT_HELPER_PATH="" +# CONFIG_UFS_DEBUG is not set +# CONFIG_UFS_FS_WRITE is not set +CONFIG_UID16=y +CONFIG_UIO=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_SMX=m +CONFIG_ULI526X=m +CONFIG_UNIX=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNUSED_SYMBOLS=y +CONFIG_US3_MC=m +CONFIG_USBPCWATCHDOG=m +CONFIG_USB_ACM=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_ATM=m +CONFIG_USB_AUDIO=m +CONFIG_USB_BELKIN=y +CONFIG_USB_BERRY_CHARGE=m +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_CATC=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_CXACRU=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_DSBR=m +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y +CONFIG_USB_EHCI_HCD_PPC_OF=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EMI26=m +CONFIG_USB_EMI62=m +CONFIG_USB_EPSON2888=y +CONFIG_USB_ET61X251=m +CONFIG_USB_ETH=m +# CONFIG_USB_ETH_EEM is not set +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_EZUSB=y +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_GADGETFS=m +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_CI13XXX is not set +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_FSL_QE is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_IMX is not set +# CONFIG_USB_GADGET_LANGWELL is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_MUSB_HDRC is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_PXA25X is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_R8A66597 is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_S3C_HSOTG is not set +CONFIG_USB_GADGET_SELECTED=y +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GL860=m +CONFIG_USB_GOKU=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_USB_GSPCA=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SN9C20X=m +# CONFIG_USB_GSPCA_SN9C20X_EVDEV is not set +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_HID=m +CONFIG_USB_HSO=m +CONFIG_USB_HWA_HCD=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_IP_COMMON is not set +CONFIG_USB_IRDA=m +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_ISP1760_HCD=m +CONFIG_USB_KAWETH=m +CONFIG_USB_KC2190=y +CONFIG_USB_LCD=m +CONFIG_USB_LD=m +CONFIG_USB_LED=m +CONFIG_USB_LEGOTOWER=m +# CONFIG_USB_LIBUSUAL is not set +CONFIG_USB_M5602=m +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MIDI_GADGET=m +CONFIG_USB_MR800=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_RNDIS_HOST=m +# CONFIG_USB_NET_RNDIS_WLAN is not set +CONFIG_USB_NET_SMSC95XX=m +# CONFIG_USB_NET_ZAURUS is not set +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PPC_OF=y +CONFIG_USB_OHCI_HCD_PPC_OF_BE=y +# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +# CONFIG_USB_OHCI_HCD_SSB is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_OTG is not set +CONFIG_USB_OTG_UTILS=y +# CONFIG_USB_OV511 is not set +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_PRINTER=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_RIO500=m +CONFIG_USB_RTL8150=m +CONFIG_USB_S2255=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_DEBUG=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MOTOROLA=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_QUALCOMM=m +# CONFIG_USB_SERIAL_QUATECH2 is not set +# CONFIG_USB_SERIAL_QUATECH_USB2 is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIEMENS_MPI=m +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SEVSEG=m +# CONFIG_USB_SI470X is not set +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_SISUSBVGA_CON is not set +CONFIG_USB_SL811_CS=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SN9C102=m +CONFIG_USB_SPEEDTOUCH=m +# CONFIG_USB_STKWEBCAM is not set +CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_DATAFAB=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STV06XX=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_SUSPEND=y +CONFIG_USB_TEST=m +CONFIG_USB_TMC=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_U132_HCD=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=m +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_VST=m +CONFIG_USB_W9968CF=m +CONFIG_USB_WDM=m +CONFIG_USB_WHCI_HCD=m +CONFIG_USB_WUSB=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set +CONFIG_USB_XHCI_HCD=m +# CONFIG_USB_XHCI_HCD_DEBUGGING is not set +CONFIG_USB_XUSBATM=m +CONFIG_USB_ZC0301=m +CONFIG_USB_ZD1201=m +CONFIG_USB_ZERO=m +CONFIG_USB_ZR364XX=m +# CONFIG_USER_NS is not set +CONFIG_USER_SCHED=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +# CONFIG_UTS_NS is not set +CONFIG_UWB=m +CONFIG_UWB_HWA=m +CONFIG_UWB_I1480U=m +CONFIG_UWB_I1480U_WLP=m +CONFIG_UWB_WHCI=m +CONFIG_UWB_WLP=m +CONFIG_V4L_USB_DRIVERS=y +CONFIG_VERSION_SIGNATURE="" +CONFIG_VETH=m +CONFIG_VFAT_FS=m +CONFIG_VGASTATE=m +CONFIG_VGA_ARB=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_VIA_FIR=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_VELOCITY=m +CONFIG_VIDEOBUF_DMA_SG=m +CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEOBUF_GEN=m +CONFIG_VIDEOBUF_VMALLOC=m +CONFIG_VIDEO_ADV7180=m +CONFIG_VIDEO_ADV7343=m +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_ALLOW_V4L1=y +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_BT848_DVB=y +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_CAFE_CCIC=m +CONFIG_VIDEO_CAPTURE_DRIVERS=y +CONFIG_VIDEO_CPIA_PP=m +CONFIG_VIDEO_CPIA_USB=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_CX23885=m +# CONFIG_VIDEO_CX25821 is not set +CONFIG_VIDEO_CX25840=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_DEV=m +# CONFIG_VIDEO_EM28XX_ALSA is not set +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_FB_IVTV=m +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +# CONFIG_VIDEO_GO7007 is not set +CONFIG_VIDEO_HDPVR=m +# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_MEDIA=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_MT9V011=m +# CONFIG_VIDEO_MXB is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_PVRUSB2=m +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_PVRUSB2_DVB=y +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA6588=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_SAA7164=m +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_STRADIS=m +CONFIG_VIDEO_TCM825X=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_THS7303=m +CONFIG_VIDEO_TLV320AIC23B=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_VIDEO_TVP514X=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_USBVIDEO=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_V4L1=m +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_V4L2_COMMON=m +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_VP27SMPX=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_AVS6EYES=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +CONFIG_VIDEO_ZORAN_ZR36060=m +# CONFIG_VIRQ_DEBUG is not set +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_CONSOLE=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m +CONFIG_VIRTUAL_MEM_MAP=y +CONFIG_VIRT_CPU_ACCOUNTING=y +CONFIG_VIRT_TO_BUS=y +CONFIG_VITESSE_PHY=m +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLSI_FIR=m +# CONFIG_VME_BUS is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_VORTEX=m +# CONFIG_VSX is not set +CONFIG_VT=y +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set +CONFIG_VT_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_VXFS_FS=m +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_W1=m +CONFIG_W1_CON=y +CONFIG_W1_MASTER_DS2482=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_GPIO=m +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_SLAVE_BQ27000=m +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2760=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_THERM=m +# CONFIG_W35UND is not set +CONFIG_WANXL=m +CONFIG_WAN_ROUTER_DRIVERS=m +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CP1XXX=m +CONFIG_WATCHDOG_RIO=m +CONFIG_WATCHDOG_RTAS=m +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_WIMAX_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M=m +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M_SDIO=m +CONFIG_WIMAX_I2400M_USB=m +CONFIG_WINBOND_840=m +CONFIG_WINBOND_FIR=m +CONFIG_WINDFARM=m +CONFIG_WINDFARM_PM112=m +CONFIG_WINDFARM_PM121=m +CONFIG_WINDFARM_PM81=m +CONFIG_WINDFARM_PM91=m +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WIRELESS_EXT_SYSFS=y +# CONFIG_WIRELESS_OLD_REGULATORY is not set +CONFIG_WL1251=m +CONFIG_WL1251_SDIO=m +CONFIG_WL1251_SPI=m +CONFIG_WL1271=m +CONFIG_WL12XX=m +CONFIG_WLAN=y +CONFIG_WLAN_80211=y +CONFIG_WLAN_PRE80211=y +CONFIG_WM831X_POWER=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WM8350_POWER=m +CONFIG_WM8350_WATCHDOG=m +# CONFIG_WORKQUEUE_TRACER is not set +CONFIG_X25_ASY=m +# CONFIG_XEN is not set +CONFIG_XFRM=y +CONFIG_XFRM_IPCOMP=m +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_USER=m +# CONFIG_XFS_DEBUG is not set +CONFIG_XFS_FS=m +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_RT=y +CONFIG_XICS=y +CONFIG_XILINX_EMACLITE=m +# CONFIG_XMON is not set +CONFIG_XOR_BLOCKS=m +CONFIG_YAM=m +CONFIG_YELLOWFIN=m +CONFIG_YENTA=m +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +CONFIG_ZEROPLUS_FF=y +CONFIG_ZISOFS=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZONE_DMA=y --- linux-2.6.32.orig/debian.master/config/enforce +++ linux-2.6.32/debian.master/config/enforce @@ -0,0 +1,40 @@ +# +# SECURITY items +# +# Ensure this option is enabled. +value CONFIG_COMPAT_BRK n +value CONFIG_DEVKMEM n +value CONFIG_LSM_MMAP_MIN_ADDR 0 +value CONFIG_SECURITY y +!exists CONFIG_SECURITY_FILE_CAPABILITIES | value CONFIG_SECURITY_FILE_CAPABILITIES y +value CONFIG_SECURITY_SELINUX y +value CONFIG_SECURITY_SMACK y +value CONFIG_SYN_COOKIES y +value CONFIG_DEFAULT_SECURITY_APPARMOR y +# For architectures which support this option ensure it is enabled. +!exists CONFIG_SECCOMP | value CONFIG_SECCOMP y +!exists CONFIG_CC_STACKPROTECTOR | value CONFIG_CC_STACKPROTECTOR y +!exists CONFIG_DEBUG_RODATA | value CONFIG_DEBUG_RODATA y +!exists CONFIG_STRICT_DEVMEM | value CONFIG_STRICT_DEVMEM y +# For architectures which support this option ensure it is disabled. +!exists CONFIG_COMPAT_VDSO | value CONFIG_COMPAT_VDSO n +# Default to 32768 for armel, 65536 for everything else. +(( arch armel | arch sparc ) & value CONFIG_DEFAULT_MMAP_MIN_ADDR 32768 ) | \ + ( value CONFIG_DEFAULT_MMAP_MIN_ADDR 65536) + +# CONFIG_USB_DEVICE_FS breaks udev USB firmware loading and is deprecated +# ensure it is disabled. +value CONFIG_USB_DEVICEFS n + +# upstart requires DEVTMPFS be enabled and mounted by default. +value CONFIG_DEVTMPFS y +value CONFIG_DEVTMPFS_MOUNT y + +# some /dev nodes require POSIX ACLs, like /dev/dsp +value CONFIG_TMPFS_POSIX_ACL y + +# Ramdisk size should be a minimum of 64M +value CONFIG_BLK_DEV_RAM_SIZE 65536 + +# LVM requires dm_mod built in to activate correctly (LP: #560717) +value CONFIG_BLK_DEV_DM y --- linux-2.6.32.orig/debian.master/config/amd64/config.flavour.preempt +++ linux-2.6.32/debian.master/config/amd64/config.flavour.preempt @@ -0,0 +1,20 @@ +# +# Config options for config.flavour.preempt automatically generated by splitconfig.pl +# +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_HZ=1000 +# CONFIG_HZ_100 is not set +CONFIG_HZ_1000=y +# CONFIG_MEMORY_HOTPLUG is not set +CONFIG_PREEMPT=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m --- linux-2.6.32.orig/debian.master/config/amd64/config.flavour.server +++ linux-2.6.32/debian.master/config/amd64/config.flavour.server @@ -0,0 +1,20 @@ +# +# Config options for config.flavour.server automatically generated by splitconfig.pl +# +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_DEADLINE=y +CONFIG_DEFAULT_IOSCHED="deadline" +CONFIG_HZ=100 +CONFIG_HZ_100=y +# CONFIG_HZ_1000 is not set +CONFIG_MEMORY_HOTPLUG=y +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_NET=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_RING=y --- linux-2.6.32.orig/debian.master/config/amd64/config.common.amd64 +++ linux-2.6.32/debian.master/config/amd64/config.common.amd64 @@ -0,0 +1,165 @@ +# +# Config options for config.common.amd64 automatically generated by splitconfig.pl +# +CONFIG_64BIT=y +CONFIG_ACPI_BLACKLIST_YEAR=0 +CONFIG_AGP=y +CONFIG_AGP_AMD64=y +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SUPPORTS_MSI=y +# CONFIG_ASYNC_TX_DMA is not set +CONFIG_ATALK=m +CONFIG_ATM=m +CONFIG_AUDIT_ARCH=y +CONFIG_B43=m +CONFIG_B43LEGACY=m +CONFIG_B44=m +CONFIG_BT=m +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CDROM_PKTCDVD=y +CONFIG_COMEDI=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DRM_RADEON=m +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_SAVAGE=m +# CONFIG_FLATMEM_MANUAL is not set +# CONFIG_FONTS is not set +CONFIG_FRAMEBUFFER_CONSOLE=m +CONFIG_FSAM7400=m +CONFIG_FTL=m +CONFIG_GAMEPORT=m +CONFIG_GENERIC_CPU=y +CONFIG_GENERIC_TIME_VSYSCALL=y +# CONFIG_HAVE_AOUT is not set +CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +# CONFIG_HZ_250 is not set +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_IOMMU_API=y +CONFIG_IOMMU_HELPER=y +CONFIG_IPMI_HANDLER=m +CONFIG_IRDA=m +CONFIG_ISDN=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m +# CONFIG_KTIME_SCALAR is not set +CONFIG_LAPB=m +CONFIG_LCD_ILI9320=m +CONFIG_LLC2=m +CONFIG_LOG_BUF_SHIFT=18 +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +CONFIG_MII=m +CONFIG_MMC_BLOCK=m +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_VSXXXAA=m +CONFIG_MTD=m +CONFIG_MTD_ABSENT=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_CHAR=m +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_CONCAT=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_GEN_PROBE=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTD_NAND=m +CONFIG_MTD_ONENAND=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PLATRAM=m +CONFIG_MTD_RAM=m +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_ROM=m +CONFIG_MTD_SLRAM=m +CONFIG_NDISWRAPPER=m +CONFIG_NFTL=m +CONFIG_NO_HZ=y +CONFIG_NR_CPUS=64 +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_PARPORT=m +CONFIG_PCCARD=m +CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_PHYSICAL_START=0x200000 +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_PM_DEBUG=y +CONFIG_POCH=m +CONFIG_R3964=m +CONFIG_RAID_ATTRS=m +CONFIG_RCU_FANOUT=64 +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_RFD_FTL=m +CONFIG_RPCSEC_GSS_SPKM3=m +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_PCI=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +CONFIG_SND_ALI5451=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_MPU401=m +CONFIG_SND_MTPAV=m +CONFIG_SND_OPL3_LIB_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_RAWMIDI_SEQ=m +# CONFIG_SND_SBAWE_SEQ is not set +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPI=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_STANDALONE is not set +CONFIG_SUNGEM=m +CONFIG_SYS_HYPERVISOR=y +CONFIG_TCG_TPM=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TIPC=m +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_VIDEO_DEV=m +CONFIG_VME_CA91CX42=m +CONFIG_VME_TSI148=m +CONFIG_VT6656=m +CONFIG_WAN=y +CONFIG_WAN_ROUTER=m +CONFIG_WATCHDOG=y +CONFIG_X25=m +# CONFIG_X86_32 is not set +CONFIG_X86_64=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_ZONE_DMA32=y +CONFIG_ZONE_DMA_FLAG=1 --- linux-2.6.32.orig/debian.master/config/amd64/config.flavour.generic +++ linux-2.6.32/debian.master/config/amd64/config.flavour.generic @@ -0,0 +1,20 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_HZ=100 +CONFIG_HZ_100=y +# CONFIG_HZ_1000 is not set +# CONFIG_MEMORY_HOTPLUG is not set +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m --- linux-2.6.32.orig/debian.master/config/lpia/config.common.lpia +++ linux-2.6.32/debian.master/config/lpia/config.common.lpia @@ -0,0 +1,183 @@ +# +# Config options for config.common.lpia automatically generated by splitconfig.pl +# +# CONFIG_64BIT is not set +CONFIG_ACPI_BLACKLIST_YEAR=2000 +CONFIG_AGP=m +CONFIG_AGP_AMD64=m +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_ASYNC_TX_DMA=y +CONFIG_ATALK=m +CONFIG_ATM=m +# CONFIG_AUDIT_ARCH is not set +CONFIG_B43=m +CONFIG_B43LEGACY=m +CONFIG_B44=m +CONFIG_BT=m +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CDROM_PKTCDVD=y +CONFIG_COMEDI=m +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DRM_RADEON=m +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_SAVAGE=m +CONFIG_FLATMEM_MANUAL=y +# CONFIG_FONTS is not set +CONFIG_FRAMEBUFFER_CONSOLE=m +CONFIG_FSAM7400=m +CONFIG_FTL=m +CONFIG_GAMEPORT=m +# CONFIG_GENERIC_CPU is not set +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_HAVE_AOUT=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HIGHMEM4G=y +# CONFIG_HIGHMEM64G is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_IOMMU_API is not set +# CONFIG_IOMMU_HELPER is not set +CONFIG_IPMI_HANDLER=m +CONFIG_IRDA=m +CONFIG_ISDN=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KTIME_SCALAR=y +CONFIG_LAPB=m +CONFIG_LCD_ILI9320=m +CONFIG_LLC2=m +CONFIG_LOG_BUF_SHIFT=17 +# CONFIG_M486 is not set +CONFIG_M586=y +# CONFIG_M586TSC is not set +CONFIG_MII=m +CONFIG_MMC_BLOCK=m +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_VSXXXAA=m +CONFIG_MTD=m +CONFIG_MTD_ABSENT=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_CHAR=m +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_CONCAT=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_GEN_PROBE=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTD_NAND=m +CONFIG_MTD_ONENAND=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PLATRAM=m +CONFIG_MTD_RAM=m +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_ROM=m +CONFIG_MTD_SLRAM=m +CONFIG_NDISWRAPPER=m +CONFIG_NFTL=m +CONFIG_NO_HZ=y +CONFIG_NR_CPUS=8 +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_PARPORT=m +CONFIG_PCCARD=m +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_PM_DEBUG=y +CONFIG_POCH=m +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_R3964=m +CONFIG_RAID_ATTRS=m +CONFIG_RCU_FANOUT=32 +CONFIG_REGULATOR_DEBUG=y +CONFIG_RFD_FTL=m +CONFIG_RPCSEC_GSS_SPKM3=m +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_NSP32=m +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_PCI=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +CONFIG_SND_ALI5451=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_MPU401=m +CONFIG_SND_MTPAV=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_OPL4_LIB_SEQ=m +CONFIG_SND_RAWMIDI_SEQ=m +CONFIG_SND_SBAWE_SEQ=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SERIAL_U16550=m +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_SPI=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_STANDALONE is not set +CONFIG_SUNGEM=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_TCG_TPM=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TIPC=m +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_VIDEO_DEV=m +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m +CONFIG_VME_CA91CX42=m +CONFIG_VME_TSI148=m +CONFIG_VT6656=m +CONFIG_WAN=y +CONFIG_WAN_ROUTER=m +CONFIG_WATCHDOG=y +CONFIG_X25=m +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86_L1_CACHE_SHIFT=5 +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +CONFIG_X86_SPEEDSTEP_LIB=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ZONE_DMA_FLAG=1 --- linux-2.6.32.orig/debian.master/config/lpia/config.flavour.lpia +++ linux-2.6.32/debian.master/config/lpia/config.flavour.lpia @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.lpia automatically generated by splitconfig.pl +# --- linux-2.6.32.orig/debian.master/config/i386/config.flavour.generic-pae +++ linux-2.6.32/debian.master/config/i386/config.flavour.generic-pae @@ -0,0 +1,23 @@ +# +# Config options for config.flavour.generic-pae automatically generated by splitconfig.pl +# +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_HIGHMEM4G is not set +CONFIG_HIGHMEM64G=y +# CONFIG_M486 is not set +# CONFIG_M586 is not set +CONFIG_M586TSC=y +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_SYS_HYPERVISOR=y +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_NET=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_RING=y +CONFIG_X86_L1_CACHE_SHIFT=5 +CONFIG_X86_MINIMUM_CPU_FAMILY=5 --- linux-2.6.32.orig/debian.master/config/i386/config.common.i386 +++ linux-2.6.32/debian.master/config/i386/config.common.i386 @@ -0,0 +1,163 @@ +# +# Config options for config.common.i386 automatically generated by splitconfig.pl +# +# CONFIG_64BIT is not set +CONFIG_ACPI_BLACKLIST_YEAR=2000 +CONFIG_AGP=m +CONFIG_AGP_AMD64=m +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_ASYNC_TX_DMA=y +CONFIG_ATALK=m +CONFIG_ATM=m +# CONFIG_AUDIT_ARCH is not set +CONFIG_B43=m +CONFIG_B43LEGACY=m +CONFIG_B44=m +CONFIG_BT=m +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CDROM_PKTCDVD=y +CONFIG_COMEDI=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DRM_RADEON=m +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_SAVAGE=m +CONFIG_FLATMEM_MANUAL=y +# CONFIG_FONTS is not set +CONFIG_FRAMEBUFFER_CONSOLE=m +CONFIG_FSAM7400=m +CONFIG_FTL=m +CONFIG_GAMEPORT=m +# CONFIG_GENERIC_CPU is not set +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_HAVE_AOUT=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_IOMMU_API is not set +# CONFIG_IOMMU_HELPER is not set +CONFIG_IPMI_HANDLER=m +CONFIG_IRDA=m +CONFIG_ISDN=y +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KTIME_SCALAR=y +CONFIG_LAPB=m +CONFIG_LCD_ILI9320=m +CONFIG_LLC2=m +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_MII=m +CONFIG_MMC_BLOCK=m +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_VSXXXAA=m +CONFIG_MTD=m +CONFIG_MTD_ABSENT=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_CHAR=m +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_CONCAT=m +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_GEN_PROBE=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTD_NAND=m +CONFIG_MTD_ONENAND=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PLATRAM=m +CONFIG_MTD_RAM=m +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_ROM=m +CONFIG_MTD_SLRAM=m +CONFIG_NDISWRAPPER=m +CONFIG_NFTL=m +CONFIG_NO_HZ=y +CONFIG_NR_CPUS=8 +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_PARPORT=m +CONFIG_PCCARD=m +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_PHYSICAL_START=0x100000 +CONFIG_PM_DEBUG=y +CONFIG_POCH=m +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_R3964=m +CONFIG_RAID_ATTRS=m +CONFIG_RCU_FANOUT=32 +CONFIG_REGULATOR_DEBUG=y +CONFIG_RFD_FTL=m +CONFIG_RPCSEC_GSS_SPKM3=m +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_NSP32=m +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_PCI=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +CONFIG_SND_ALI5451=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_MPU401=m +CONFIG_SND_MTPAV=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_OPL4_LIB_SEQ=m +CONFIG_SND_RAWMIDI_SEQ=m +CONFIG_SND_SBAWE_SEQ=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SERIAL_U16550=m +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_SPI=y +CONFIG_SSB_B43_PCI_BRIDGE=y +# CONFIG_STANDALONE is not set +CONFIG_SUNGEM=m +CONFIG_TCG_TPM=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TIPC=m +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_MON=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_UHCI_HCD=y +CONFIG_VIDEO_DEV=m +CONFIG_VME_CA91CX42=m +CONFIG_VME_TSI148=m +CONFIG_VT6656=m +CONFIG_WAN=y +CONFIG_WAN_ROUTER=m +CONFIG_WATCHDOG=y +CONFIG_X25=m +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86_SPEEDSTEP_LIB=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ZONE_DMA_FLAG=1 --- linux-2.6.32.orig/debian.master/config/i386/config.flavour.386 +++ linux-2.6.32/debian.master/config/i386/config.flavour.386 @@ -0,0 +1,23 @@ +# +# Config options for config.flavour.386 automatically generated by splitconfig.pl +# +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_DEADLINE=y +CONFIG_DEFAULT_IOSCHED="deadline" +CONFIG_HIGHMEM4G=y +# CONFIG_HIGHMEM64G is not set +CONFIG_M486=y +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SYM53C8XX_2=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m +CONFIG_X86_L1_CACHE_SHIFT=4 +CONFIG_X86_MINIMUM_CPU_FAMILY=4 --- linux-2.6.32.orig/debian.master/config/i386/config.flavour.generic +++ linux-2.6.32/debian.master/config/i386/config.flavour.generic @@ -0,0 +1,23 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_HIGHMEM4G=y +# CONFIG_HIGHMEM64G is not set +# CONFIG_M486 is not set +CONFIG_M586=y +# CONFIG_M586TSC is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SYM53C8XX_2=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m +CONFIG_X86_L1_CACHE_SHIFT=5 +CONFIG_X86_MINIMUM_CPU_FAMILY=4 --- linux-2.6.32.orig/debian.master/config/armel/config.common.armel +++ linux-2.6.32/debian.master/config/armel/config.common.armel @@ -0,0 +1,151 @@ +# +# Config options for config.common.armel automatically generated by splitconfig.pl +# +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_ATALK is not set +# CONFIG_ATM is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +# CONFIG_B44 is not set +# CONFIG_BT is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_COMEDI is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +# CONFIG_DRM_RADEON is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_SAVAGE is not set +CONFIG_FLATMEM_MANUAL=y +CONFIG_FONTS=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FSAM7400 is not set +# CONFIG_FTL is not set +# CONFIG_GAMEPORT is not set +CONFIG_HAVE_AOUT=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +# CONFIG_HIGH_RES_TIMERS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_HWMON is not set +CONFIG_HZ=100 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IRDA is not set +# CONFIG_ISDN is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_LAPB is not set +# CONFIG_LCD_ILI9320 is not set +# CONFIG_LLC2 is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_MII=y +CONFIG_MMC_BLOCK=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_VSXXXAA is not set +CONFIG_MTD=y +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +# CONFIG_MTD_CFI_AMDSTD is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +CONFIG_MTD_CHAR=y +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_CONCAT is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_JEDECPROBE is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_PLATRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_NDISWRAPPER is not set +# CONFIG_NFTL is not set +# CONFIG_NO_HZ is not set +# CONFIG_PARPORT is not set +# CONFIG_PCCARD is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_POCH is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_R3964 is not set +# CONFIG_RAID_ATTRS is not set +CONFIG_RCU_FANOUT=32 +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_RFD_FTL is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_OSD_INITIATOR is not set +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_PCI=m +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_MPU401 is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_RAWMIDI_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SPARSEMEM_MANUAL is not set +# CONFIG_SPI is not set +# CONFIG_SSB_B43_PCI_BRIDGE is not set +CONFIG_STANDALONE=y +# CONFIG_SUNGEM is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TCP_CONG_ADVANCED is not set +# CONFIG_TIPC is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_USB=m +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_GADGET is not set +# CONFIG_USB_ISP1362_HCD is not set +CONFIG_USB_MON=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m +# CONFIG_VIDEO_DEV is not set +CONFIG_VIRTIO=m +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_RING=m +# CONFIG_VME_CA91CX42 is not set +# CONFIG_VME_TSI148 is not set +# CONFIG_VT6656 is not set +# CONFIG_WAN is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_WATCHDOG is not set +# CONFIG_X25 is not set +CONFIG_ZONE_DMA_FLAG=0 --- linux-2.6.32.orig/debian.master/config/armel/config.flavour.versatile +++ linux-2.6.32/debian.master/config/armel/config.flavour.versatile @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.versatile automatically generated by splitconfig.pl +# --- linux-2.6.32.orig/debian.master/config/ia64/config.flavour.ia64 +++ linux-2.6.32/debian.master/config/ia64/config.flavour.ia64 @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.ia64 automatically generated by splitconfig.pl +# --- linux-2.6.32.orig/debian.master/config/ia64/config.common.ia64 +++ linux-2.6.32/debian.master/config/ia64/config.common.ia64 @@ -0,0 +1,294 @@ +# +# Config options for config.common.ia64 automatically generated by splitconfig.pl +# +CONFIG_ACCESSIBILITY=y +CONFIG_ACORN_PARTITION=y +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +# CONFIG_ALIM7101_WDT is not set +CONFIG_AMD8111_ETH=m +CONFIG_AMIGA_PARTITION=y +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +CONFIG_ARCNET=m +CONFIG_ATA=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_NONSTANDARD=y +# CONFIG_BINARY_PRINTF is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +# CONFIG_BONDING is not set +# CONFIG_BRIDGE_NF_EBTABLES is not set +CONFIG_BSD_DISKLABEL=y +CONFIG_BT=m +# CONFIG_CFG80211_REG_DEBUG is not set +# CONFIG_CGROUP_DEVICE is not set +CONFIG_CHR_DEV_SCH=m +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_PMAC64 is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_TEST=m +CONFIG_DAB=y +CONFIG_DE2104X=m +CONFIG_DE4X5=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DEFXX=m +CONFIG_DEV_APPLETALK=m +CONFIG_DISCONTIGMEM_MANUAL=y +CONFIG_DM9102=m +CONFIG_DMADEVICES=y +CONFIG_DRM=m +CONFIG_DVB_CORE=m +CONFIG_ECONET=m +CONFIG_EZX_PCAP=y +CONFIG_FB_3DFX=y +CONFIG_FB_ASILIANT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY128=m +CONFIG_FB_CIRRUS=m +CONFIG_FB_IMSTT=y +CONFIG_FB_KYRO=m +# CONFIG_FB_MACMODES is not set +CONFIG_FB_MATROX=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +# CONFIG_FB_PS3 is not set +CONFIG_FB_RIVA=m +CONFIG_FB_SIS=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_VOODOO1=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_FORCEDETH=m +CONFIG_FORCE_MAX_ZONEORDER=17 +CONFIG_FUSION_MAX_SGE=128 +CONFIG_GAMEPORT=m +# CONFIG_GELIC_NET is not set +CONFIG_GENERIC_IOMAP=y +CONFIG_HAMACHI=m +CONFIG_HAMRADIO=y +CONFIG_HAPPYMEAL=m +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HIPPI=y +CONFIG_HP100=m +CONFIG_HP_ILO=m +CONFIG_HUGETLB_PAGE=y +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VOODOO3=m +# CONFIG_IDE is not set +# CONFIG_IEEE1394_PCILYNX is not set +CONFIG_IKCONFIG=y +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INFINIBAND_AMSO1100 is not set +# CONFIG_INFINIBAND_IPATH is not set +# CONFIG_INFINIBAND_IPOIB_CM is not set +# CONFIG_INFINIBAND_ISER is not set +# CONFIG_INFINIBAND_SRP is not set +# CONFIG_INFINIBAND_USER_ACCESS is not set +# CONFIG_INFINIBAND_USER_MAD is not set +# CONFIG_INFTL is not set +CONFIG_INPUT_EVBUG=m +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_UINPUT=m +# CONFIG_IP1000 is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_PNP is not set +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IRDA=m +CONFIG_ISDN=y +# CONFIG_ISDN_DRV_GIGASET is not set +CONFIG_KERNEL_START=0xc0000000 +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_LAPB=m +CONFIG_LDM_PARTITION=y +CONFIG_LEDS_CLASS=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LLC=y +CONFIG_LOG_BUF_SHIFT=20 +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_MAC80211_MESH=y +# CONFIG_MACVLAN is not set +CONFIG_MAC_PARTITION=y +# CONFIG_MARKERS is not set +CONFIG_MINIX_SUBPARTITION=y +# CONFIG_MMIO_NVRAM is not set +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_VSXXXAA=m +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_NCPFS_SMALLDOS is not set +CONFIG_NET_IPGRE=m +CONFIG_NET_PKTGEN=m +# CONFIG_NIU is not set +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NODES_SHIFT=4 +CONFIG_NR_CPUS=4096 +CONFIG_OSF_PARTITION=y +CONFIG_PAGE_OFFSET=0xc0000000 +# CONFIG_PCIEASPM is not set +CONFIG_PCI_MSI=y +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PPC64 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_CELL is not set +# CONFIG_PPC_HAS_HASH_64K is not set +CONFIG_PPC_INDIRECT_PCI=y +# CONFIG_PPC_MAPLE is not set +# CONFIG_PPC_MM_SLICES is not set +CONFIG_PPC_MPC106=y +# CONFIG_PPC_PASEMI is not set +# CONFIG_PPC_PS3 is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PRISM54=m +CONFIG_PROFILING=y +# CONFIG_PS3_VRAM is not set +CONFIG_QFMT_V1=m +CONFIG_R8169=m +CONFIG_RCU_FANOUT=64 +CONFIG_RDS=m +CONFIG_RISCOM8=m +# CONFIG_RTAS_ERROR_LOGGING is not set +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_M48T59=m +# CONFIG_RTC_DRV_PS3 is not set +# CONFIG_RTC_DRV_TEST is not set +CONFIG_SATA_SVW=m +# CONFIG_SCHEDSTATS is not set +# CONFIG_SCHED_HRTICK is not set +CONFIG_SCSI=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LOGGING=y +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_CORE=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SGI_PARTITION=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_SMP=y +CONFIG_SOLARIS_X86_PARTITION=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_SPECIALIX=m +CONFIG_STAGING_EXCLUDE_BUILD=y +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_SUNGEM=m +CONFIG_TABLET_USB_WACOM=m +CONFIG_THERMAL=m +CONFIG_TR=y +# CONFIG_TULIP_NAPI is not set +CONFIG_UBIFS_FS=m +# CONFIG_UFS_FS is not set +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=m +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_GADGET_GOKU is not set +CONFIG_USB_GADGET_NET2280=y +CONFIG_USB_HIDDEV=y +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +CONFIG_USB_MON=y +CONFIG_USB_NET2280=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_PWC=m +CONFIG_USB_QUICKCAM_MESSENGER=m +CONFIG_USB_SE401=m +CONFIG_USB_STV680=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_VICAM=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA2=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_OVCAMCHIP=m +CONFIG_VIDEO_SAA5249=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_SAA7191=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9875=m +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_W9966=m +# CONFIG_VIRTUALIZATION is not set +CONFIG_WAN=y +CONFIG_WAN_ROUTER=m +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WORD_SIZE=32 +CONFIG_X25=m +CONFIG_ZONE_DMA_FLAG=1 --- linux-2.6.32.orig/debian.master/config/sparc/config.flavour.sparc64 +++ linux-2.6.32/debian.master/config/sparc/config.flavour.sparc64 @@ -0,0 +1,4 @@ +# +# Config options for config.flavour.sparc64 automatically generated by splitconfig.pl +# +# CONFIG_SMP is not set --- linux-2.6.32.orig/debian.master/config/sparc/config.flavour.sparc64-smp +++ linux-2.6.32/debian.master/config/sparc/config.flavour.sparc64-smp @@ -0,0 +1,4 @@ +# +# Config options for config.flavour.sparc64-smp automatically generated by splitconfig.pl +# +CONFIG_SMP=y --- linux-2.6.32.orig/debian.master/config/sparc/config.common.sparc +++ linux-2.6.32/debian.master/config/sparc/config.common.sparc @@ -0,0 +1,302 @@ +# +# Config options for config.common.sparc automatically generated by splitconfig.pl +# +CONFIG_ACCESSIBILITY=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set +CONFIG_ALIM7101_WDT=m +# CONFIG_AMD8111_ETH is not set +# CONFIG_AMIGA_PARTITION is not set +CONFIG_ARCH_NO_VIRT_TO_BUS=y +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCNET is not set +CONFIG_ATA=m +# CONFIG_ATARI_PARTITION is not set +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_BINARY_PRINTF=y +CONFIG_BLK_DEV_FD=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_BONDING=m +CONFIG_BRIDGE_NF_EBTABLES=m +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_BT is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CGROUP_DEVICE=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_FREQ_PMAC64 is not set +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_LZO=m +# CONFIG_CRYPTO_TEST is not set +# CONFIG_DAB is not set +# CONFIG_DE2104X is not set +# CONFIG_DE4X5 is not set +CONFIG_DECNET_ROUTER=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +# CONFIG_DEFXX is not set +# CONFIG_DEV_APPLETALK is not set +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_DM9102 is not set +CONFIG_DMADEVICES=y +CONFIG_DRM=y +# CONFIG_DVB_CORE is not set +# CONFIG_ECONET is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_ASILIANT is not set +CONFIG_FB_ATY=y +CONFIG_FB_ATY128=y +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_NEOMAGIC is not set +CONFIG_FB_PM2=y +# CONFIG_FB_PM2_FIFO_DISCONNECT is not set +# CONFIG_FB_PS3 is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_SIS is not set +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FLATMEM_MANUAL is not set +# CONFIG_FORCEDETH is not set +CONFIG_FUSION_MAX_SGE=40 +# CONFIG_GAMEPORT is not set +# CONFIG_GELIC_NET is not set +CONFIG_GPIO_SYSFS=y +# CONFIG_HAMACHI is not set +# CONFIG_HAMRADIO is not set +CONFIG_HAPPYMEAL=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +# CONFIG_HIPPI is not set +# CONFIG_HP100 is not set +# CONFIG_HP_ILO is not set +CONFIG_HUGETLB_PAGE=y +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_GPIO=m +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set +# CONFIG_IDE is not set +CONFIG_IEEE1394_PCILYNX=m +# CONFIG_IKCONFIG is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INFINIBAND_AMSO1100=m +CONFIG_INFINIBAND_IPATH=m +CONFIG_INFINIBAND_IPOIB_CM=y +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFTL=m +# CONFIG_INPUT_EVBUG is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_UINPUT is not set +CONFIG_IP1000=m +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_POWEROFF is not set +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IP_DCCP=m +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_PNP=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +# CONFIG_IRDA is not set +CONFIG_ISDN=y +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_KERNEL_START=0xc0000000 +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_KEYBOARD_SUNKBD=y +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KGDB is not set +# CONFIG_LAPB is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_LDM_PARTITION is not set +CONFIG_LEDS_CLASS=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA955X=m +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LLC=m +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +# CONFIG_MAC80211_MESH is not set +CONFIG_MACVLAN=m +# CONFIG_MAC_PARTITION is not set +CONFIG_MARKERS=y +CONFIG_MFD_SM501_GPIO=y +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_MMIO_NVRAM is not set +CONFIG_MOUSE_SERIAL=y +# CONFIG_MOUSE_VSXXXAA is not set +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y +CONFIG_NCPFS_SMALLDOS=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +# CONFIG_NET_IPGRE is not set +# CONFIG_NET_PKTGEN is not set +CONFIG_NIU=m +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NODES_SHIFT=4 +CONFIG_NR_CPUS=256 +# CONFIG_OSF_PARTITION is not set +CONFIG_PAGE_OFFSET=0xc0000000 +# CONFIG_PCI_MSI is not set +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PMAC_SMU is not set +# CONFIG_PPC64 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_CELL is not set +# CONFIG_PPC_HAS_HASH_64K is not set +CONFIG_PPC_INDIRECT_PCI=y +# CONFIG_PPC_MAPLE is not set +# CONFIG_PPC_MM_SLICES is not set +CONFIG_PPC_MPC106=y +# CONFIG_PPC_PASEMI is not set +# CONFIG_PPC_PS3 is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PRISM54 is not set +# CONFIG_PROFILING is not set +# CONFIG_PS3_VRAM is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_R8169 is not set +CONFIG_RCU_FANOUT=64 +CONFIG_RDS=m +# CONFIG_RISCOM8 is not set +# CONFIG_RTAS_ERROR_LOGGING is not set +CONFIG_RTC_DRV_BQ4802=y +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_M48T59=y +# CONFIG_RTC_DRV_PS3 is not set +CONFIG_RTC_DRV_TEST=m +CONFIG_SATA_SVW=m +# CONFIG_SCHEDSTATS is not set +CONFIG_SCHED_HRTICK=y +CONFIG_SCSI=m +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_IT87 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_LM90 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83L785TS is not set +CONFIG_SERIAL_8250_DETECT_IRQ=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_CORE=y +# CONFIG_SERIO_PARKBD is not set +CONFIG_SERIO_PCIPS2=y +# CONFIG_SGI_PARTITION is not set +# CONFIG_SLIP_MODE_SLIP6 is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +CONFIG_SPARSEMEM_MANUAL=y +# CONFIG_SPECIALIX is not set +CONFIG_STAGING_EXCLUDE_BUILD=y +CONFIG_SUNDANCE_MMIO=y +CONFIG_SUNGEM=y +# CONFIG_TABLET_USB_WACOM is not set +# CONFIG_THERMAL is not set +# CONFIG_THERM_PM72 is not set +CONFIG_TPS65010=m +# CONFIG_TR is not set +CONFIG_TULIP_NAPI=y +CONFIG_UBIFS_FS=m +CONFIG_UFS_FS=m +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +CONFIG_USB=m +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_GADGET_GOKU is not set +CONFIG_USB_GADGET_NET2280=y +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +CONFIG_USB_MON=m +CONFIG_USB_NET2280=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_PWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_STV680 is not set +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_VICAM is not set +# CONFIG_VIDEO_ADV7170 is not set +# CONFIG_VIDEO_ADV7175 is not set +# CONFIG_VIDEO_BT819 is not set +# CONFIG_VIDEO_BT848 is not set +# CONFIG_VIDEO_BT856 is not set +# CONFIG_VIDEO_BT866 is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CS5345 is not set +# CONFIG_VIDEO_CX88 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_IVTV is not set +# CONFIG_VIDEO_KS0127 is not set +# CONFIG_VIDEO_M52790 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_VIDEO_SAA7110 is not set +# CONFIG_VIDEO_SAA7185 is not set +# CONFIG_VIDEO_SAA7191 is not set +# CONFIG_VIDEO_TDA7432 is not set +# CONFIG_VIDEO_TDA9875 is not set +# CONFIG_VIDEO_TVAUDIO is not set +# CONFIG_VIDEO_VPX3220 is not set +# CONFIG_VIDEO_W9966 is not set +# CONFIG_WAN is not set +# CONFIG_WAN_ROUTER is not set +CONFIG_WATCHDOG_NOWAYOUT=y +CONFIG_WORD_SIZE=32 +# CONFIG_X25 is not set +CONFIG_ZONE_DMA_FLAG=0 --- linux-2.6.32.orig/debian.master/config/powerpc/config.flavour.powerpc +++ linux-2.6.32/debian.master/config/powerpc/config.flavour.powerpc @@ -0,0 +1,50 @@ +# +# Config options for config.flavour.powerpc automatically generated by splitconfig.pl +# +# CONFIG_ARCH_NO_VIRT_TO_BUS is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CRYPTO_LZO=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FLATMEM_MANUAL=y +CONFIG_FORCE_MAX_ZONEORDER=11 +# CONFIG_GENERIC_TBSYNC is not set +# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +CONFIG_HP_ILO=m +# CONFIG_HUGETLB_PAGE is not set +CONFIG_I2C_GPIO=m +CONFIG_KERNEL_START=0xc0000000 +CONFIG_KGDB=y +CONFIG_LATENCYTOP=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_MAX_ACTIVE_REGIONS=32 +# CONFIG_MMIO_NVRAM is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set +CONFIG_PAGE_OFFSET=0xc0000000 +# CONFIG_PCIEASPM is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +# CONFIG_PPC64 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_CELL is not set +CONFIG_PPC_INDIRECT_PCI=y +# CONFIG_PPC_MM_SLICES is not set +CONFIG_PPC_MPC106=y +CONFIG_RCU_FANOUT=32 +CONFIG_RISCOM8=m +# CONFIG_RTAS_ERROR_LOGGING is not set +CONFIG_SCHEDSTATS=y +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +# CONFIG_SMP is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_TPS65010=m +CONFIG_UBIFS_FS=m +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_GADGET_GOKU is not set +CONFIG_USB_GADGET_NET2280=y +CONFIG_WORD_SIZE=32 --- linux-2.6.32.orig/debian.master/config/powerpc/config.common.powerpc +++ linux-2.6.32/debian.master/config/powerpc/config.common.powerpc @@ -0,0 +1,260 @@ +# +# Config options for config.common.powerpc automatically generated by splitconfig.pl +# +# CONFIG_ACCESSIBILITY is not set +CONFIG_ACORN_PARTITION=y +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +# CONFIG_ALIM7101_WDT is not set +CONFIG_AMD8111_ETH=m +CONFIG_AMIGA_PARTITION=y +CONFIG_ARCNET=m +CONFIG_ATA=y +CONFIG_ATARI_PARTITION=y +CONFIG_BINARY_PRINTF=y +CONFIG_BLK_DEV_FD=m +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BONDING=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BSD_DISKLABEL=y +CONFIG_BT=m +CONFIG_CGROUP_DEVICE=y +CONFIG_CHR_DEV_SCH=m +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_PMAC64=y +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_TEST=m +# CONFIG_DAB is not set +CONFIG_DE2104X=m +CONFIG_DE4X5=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DEFXX=m +CONFIG_DEV_APPLETALK=m +# CONFIG_DISCONTIGMEM_MANUAL is not set +CONFIG_DM9102=m +# CONFIG_DMADEVICES is not set +CONFIG_DRM=m +CONFIG_DVB_CORE=m +CONFIG_ECONET=m +# CONFIG_EZX_PCAP is not set +CONFIG_FB_3DFX=y +CONFIG_FB_ASILIANT=y +CONFIG_FB_ATY=y +CONFIG_FB_ATY128=y +CONFIG_FB_CIRRUS=m +CONFIG_FB_IMSTT=y +CONFIG_FB_KYRO=m +CONFIG_FB_MACMODES=y +CONFIG_FB_MATROX=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_PS3=y +CONFIG_FB_RIVA=m +CONFIG_FB_SIS=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_VOODOO1=y +CONFIG_FORCEDETH=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_GAMEPORT=m +CONFIG_GELIC_NET=m +# CONFIG_GENERIC_IOMAP is not set +# CONFIG_GPIO_SYSFS is not set +CONFIG_HAMACHI=m +CONFIG_HAMRADIO=y +CONFIG_HAPPYMEAL=m +CONFIG_HIPPI=y +CONFIG_HP100=m +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VOODOO3=m +CONFIG_IDE=y +CONFIG_IEEE1394_PCILYNX=m +# CONFIG_IKCONFIG is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INFINIBAND_AMSO1100=m +# CONFIG_INFINIBAND_IPATH is not set +CONFIG_INFINIBAND_IPOIB_CM=y +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFTL=m +CONFIG_INPUT_EVBUG=m +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_UINPUT=m +CONFIG_IP1000=m +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_POWEROFF=m +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IP_DCCP=m +CONFIG_IP_NF_QUEUE=m +# CONFIG_IP_PNP is not set +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IRDA=m +# CONFIG_ISDN is not set +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_LAPB=m +CONFIG_LDM_PARTITION=y +CONFIG_LEDS_CLASS=y +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_PCA955X is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LLC=y +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_MAC80211_MESH=y +CONFIG_MACVLAN=m +CONFIG_MAC_PARTITION=y +CONFIG_MARKERS=y +# CONFIG_MFD_SM501_GPIO is not set +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_VSXXXAA=m +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_NCPFS_SMALLDOS is not set +CONFIG_NET_IPGRE=m +CONFIG_NET_PKTGEN=m +# CONFIG_NIU is not set +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NODES_SHIFT=8 +CONFIG_OSF_PARTITION=y +CONFIG_PCI_MSI=y +CONFIG_PMAC_SMU=y +CONFIG_PPC_HAS_HASH_64K=y +CONFIG_PPC_MAPLE=y +CONFIG_PPC_PASEMI=y +CONFIG_PPC_PS3=y +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PRISM54=m +CONFIG_PROFILING=y +CONFIG_PS3_VRAM=m +CONFIG_QFMT_V1=m +CONFIG_R8169=m +# CONFIG_RDS is not set +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_PS3=m +# CONFIG_RTC_DRV_TEST is not set +CONFIG_SATA_SVW=y +CONFIG_SCHED_HRTICK=y +CONFIG_SCSI=y +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LOGGING=y +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_CORE=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SGI_PARTITION=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SPECIALIX=m +# CONFIG_STAGING_EXCLUDE_BUILD is not set +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_SUNGEM=m +# CONFIG_TABLET_USB_WACOM is not set +# CONFIG_THERMAL is not set +CONFIG_THERM_PM72=m +CONFIG_TR=y +# CONFIG_TULIP_NAPI is not set +CONFIG_UFS_FS=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_GADGET=m +CONFIG_USB_HIDDEV=y +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +CONFIG_USB_MON=y +CONFIG_USB_NET2280=m +CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y +CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_PWC=m +CONFIG_USB_QUICKCAM_MESSENGER=m +CONFIG_USB_SE401=m +CONFIG_USB_STV680=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_VICAM=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA2=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_OVCAMCHIP=m +CONFIG_VIDEO_SAA5249=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_SAA7191=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9875=m +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_W9966=m +CONFIG_VIRTUALIZATION=y +CONFIG_WAN=y +CONFIG_WAN_ROUTER=m +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_X25=m +CONFIG_ZONE_DMA_FLAG=1 --- linux-2.6.32.orig/debian.master/config/powerpc/config.flavour.powerpc-smp +++ linux-2.6.32/debian.master/config/powerpc/config.flavour.powerpc-smp @@ -0,0 +1,51 @@ +# +# Config options for config.flavour.powerpc-smp automatically generated by splitconfig.pl +# +# CONFIG_ARCH_NO_VIRT_TO_BUS is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_CFG80211_REG_DEBUG=y +# CONFIG_CRYPTO_LZO is not set +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FLATMEM_MANUAL=y +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_GENERIC_TBSYNC=y +# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +# CONFIG_HP_ILO is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_I2C_GPIO=m +CONFIG_KERNEL_START=0xc0000000 +# CONFIG_KGDB is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_MAX_ACTIVE_REGIONS=32 +# CONFIG_MMIO_NVRAM is not set +# CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set +CONFIG_NR_CPUS=4 +CONFIG_PAGE_OFFSET=0xc0000000 +CONFIG_PCIEASPM=y +# CONFIG_PHYS_ADDR_T_64BIT is not set +# CONFIG_PPC64 is not set +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_CELL is not set +CONFIG_PPC_INDIRECT_PCI=y +# CONFIG_PPC_MM_SLICES is not set +CONFIG_PPC_MPC106=y +CONFIG_RCU_FANOUT=32 +# CONFIG_RISCOM8 is not set +# CONFIG_RTAS_ERROR_LOGGING is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_SCSI_LPFC_DEBUG_FS=y +CONFIG_SMP=y +# CONFIG_SPARSEMEM_MANUAL is not set +# CONFIG_TPS65010 is not set +# CONFIG_UBIFS_FS is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_GADGET_GOKU=y +# CONFIG_USB_GADGET_NET2280 is not set +CONFIG_WORD_SIZE=32 --- linux-2.6.32.orig/debian.master/config/powerpc/config.flavour.powerpc64-smp +++ linux-2.6.32/debian.master/config/powerpc/config.flavour.powerpc64-smp @@ -0,0 +1,51 @@ +# +# Config options for config.flavour.powerpc64-smp automatically generated by splitconfig.pl +# +CONFIG_ARCH_NO_VIRT_TO_BUS=y +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ATA_NONSTANDARD=y +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CRYPTO_LZO=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_FOPS=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_FORCE_MAX_ZONEORDER=13 +CONFIG_GENERIC_TBSYNC=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HP_ILO=m +CONFIG_HUGETLB_PAGE=y +# CONFIG_I2C_GPIO is not set +CONFIG_KERNEL_START=0xc000000000000000 +CONFIG_KGDB=y +CONFIG_LATENCYTOP=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_MAX_ACTIVE_REGIONS=256 +CONFIG_MMIO_NVRAM=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NR_CPUS=1024 +CONFIG_PAGE_OFFSET=0xc000000000000000 +# CONFIG_PCIEASPM is not set +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_PPC64=y +CONFIG_PPC_970_NAP=y +CONFIG_PPC_CELL=y +# CONFIG_PPC_INDIRECT_PCI is not set +CONFIG_PPC_MM_SLICES=y +# CONFIG_PPC_MPC106 is not set +CONFIG_RCU_FANOUT=64 +CONFIG_RISCOM8=m +CONFIG_RTAS_ERROR_LOGGING=y +CONFIG_SCHEDSTATS=y +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SMP=y +CONFIG_SPARSEMEM_MANUAL=y +# CONFIG_TPS65010 is not set +CONFIG_UBIFS_FS=m +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_GADGET_GOKU is not set +CONFIG_USB_GADGET_NET2280=y +CONFIG_WORD_SIZE=64 --- linux-2.6.32.orig/debian.master/etc/getabis +++ linux-2.6.32/debian.master/etc/getabis @@ -0,0 +1,15 @@ +repo_list=( + "http://archive.ubuntu.com/ubuntu/pool/main/l/linux" + "http://ports.ubuntu.com/ubuntu-ports/pool/main/l/linux" + "http://archive.ubuntu.com/ubuntu/pool/universe/l/linux" + "http://ports.ubuntu.com/ubuntu-ports/pool/universe/l/linux" +) + +getall armel versatile +getall amd64 generic server preempt +getall i386 generic generic-pae 386 + +# Ports arches and flavours. +getall powerpc powerpc powerpc-smp powerpc64-smp +getall ia64 ia64 +getall sparc sparc64 sparc64-smp --- linux-2.6.32.orig/debian.master/etc/kernelconfig +++ linux-2.6.32/debian.master/etc/kernelconfig @@ -0,0 +1,7 @@ +if [ "$variant" = "ports" ]; then + archs="sparc powerpc ia64" + family='ports' +else + archs="amd64 i386 lpia armel" + family='ubuntu' +fi --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/abiname +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/abiname @@ -0,0 +1 @@ +24 --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/amd64/server +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/amd64/server @@ -0,0 +1,10345 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x6ff1111c kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/kvm/kvm 0xd6e51bcb kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0x09ddaa0b suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x034f17ea uPD98402_init +EXPORT_SYMBOL drivers/block/paride/paride 0x1426b359 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x168859ad pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x2828c5b7 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x3a436db0 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x4988b71e pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x6a53d8e2 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x7513a2bf pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xa5521eec pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xb649e7c2 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0xe07de5a9 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xf5414989 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0xf562e3a9 paride_register +EXPORT_SYMBOL drivers/char/agp/intel-agp 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x07ab7260 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x249d11ee ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2896b33a ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x290b13dc ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x316e23c6 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3ae7f0da ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3dc261ca ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3ddf96a5 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x443fd50d ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7b1d674f ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7cc791c0 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8a1a58f8 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9a5c7c25 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9ed66850 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa8925d0e ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xaf7db3c1 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbbb02b1f ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbe9d765a ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc81ce89d ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xca61002d ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd70fa0ca ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf3ef28bc ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfd654030 ipmi_request_settime +EXPORT_SYMBOL drivers/char/nsc_gpio 0x0aeb9a91 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nsc_gpio 0x52336830 nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0x706ce0ec nsc_gpio_read +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/edac/edac_core 0x592284d2 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0x86f5add4 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/edac/edac_core 0xe3bb4899 edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x167b6f57 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1d38e1b4 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x3729a874 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x415ec4cd fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x41c0e141 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x46eb7f07 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x49a29946 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4e86dd83 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x51291767 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x670ce74f fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x73b296b6 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x80b2eb7e fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8326cdb4 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x852b2ef4 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x91fb9e62 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x955bb4c5 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x98d40ca8 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x9c55c93e fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcc3d2505 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xce9354ae fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0xd3963269 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdb8794c3 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdf54e5ab fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe3b79042 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf12f61ba fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00ed5ddd drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04a63cc7 drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06477f76 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0709da4e drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x076b04aa drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07f64ac2 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0886ec37 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0bc6f878 drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1307a60f drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14ac359a drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1ad49858 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1af8247b drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b861cc0 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d8361e5 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1da009c8 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1dfdcfc9 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21e0c20c drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24fba3ff drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25931fd5 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x26037b8d drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a2bc899 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c98b74f drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ef7273e drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34e20fda drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3666a24a drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b1740d5 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3d874f02 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3dc027d2 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3e379ef6 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f70f33c drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4010eb64 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x414d5a78 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x41874d99 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x430aedda drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43409364 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44055dbb drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x46e19b6c drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47922f3a drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47ceb232 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x49820efb drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4a7b1a09 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4b79fdf1 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4e42d669 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4f33f27f drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x503c2c03 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5722d86b drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5999c3a4 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5cf6c94d drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e92421a drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5fb6d32e drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x61845e26 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x623c2147 drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x631214c6 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x636a2ff5 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x64e85e18 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x676ecf33 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6790c1ea drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x68597be2 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6cc7b49d drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d0da6f5 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f546720 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f719046 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x703f9bbb drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x726ae36d drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x738da63d drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x73ae09f0 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x74186612 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7500c69a drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x75e44286 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77bed803 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78b8ee5c drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78bbc624 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7aec7bb9 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e1fb6c3 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x801e42ba drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x820f7131 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x82112077 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8318aeb8 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x852e3e79 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x858c6e4c drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x89ac3449 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8ba30a7e drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8cb41008 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x90e52d4c drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9246bf17 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x929685f2 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x940ed2b5 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x972401dc drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c75dca5 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa21e4dbb drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa63ac168 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa777127d drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa7d5dee9 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xabb4c031 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb07e2283 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0a0a14e drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb208d7d9 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4279afe drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4aefeb7 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb5db9493 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7be359b drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7f7c03a drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc070ff6d drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc333b509 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd04552e drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd09c97e8 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd29fd8cb drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd46af24b drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4dc8d1a drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4ec3ec0 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd5ef29f6 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd626e714 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdaf705a9 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdafac48f drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdc667be5 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdcfa4cc2 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe206b96e drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe72e6436 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7c35aa6 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xedc7d1b0 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee290644 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xefaf2041 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf06bf3dd drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf26ec049 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf48a9fb2 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf51d96a8 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf66002cc drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf69ff15f drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6dc8038 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6f68ccc drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x02358699 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x07b9f449 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0f7617a0 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1072fd77 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x463c7e46 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4df1d736 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5222414e i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5a970634 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5c32ad01 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x630897c0 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x64fc652e drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x688bb98d drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6e9650ca drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x780aee75 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x80f38d42 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x87c45448 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x896ee91a drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8cb052cf drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9db73010 drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9e739a27 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbcc21f2f drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc9bfcda4 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd1739039 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xed662ebd drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfec96d15 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x46cb9dc1 intelfb_resize +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xa593091a intelfb_remove +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xe76ba6ef intelfb_probe +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x346f94d6 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x6c14a712 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0033d843 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x01c99cb0 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x099535b1 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x146e26c6 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1815f0e1 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ba8c0ef ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1d455396 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1f7a00fc ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x29f32c12 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d673efd ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x30794c54 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x30b02b7e ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3ade5cfc ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3df39355 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x40e196e7 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x499c506f ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x516a1e06 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x52ba9bf0 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x54dd6995 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x56c42d22 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x599456c0 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x63a1d902 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x69d81dd8 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6f993516 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x765cbc82 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7cad6bfb ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f8879de ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7faf2a0e ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8a4519a8 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8db796d4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8f9903a0 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x93b7a28d ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x941942ce ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x97d5ca21 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9b3d4533 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa40603b9 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa5437f2e ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xad38f21f ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5cf2fe9 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb64dd919 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbba2ecf9 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc068469b ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2058ac0 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64bcec1 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc90d2e2e ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf05d4eb ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf9a2b18 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd629b93a ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe4aa5715 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe53536cb ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf024e712 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcfb7931 ttm_bo_device_release +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x67062ce8 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xfb6a4352 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xb635d5cd i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xfd9e9c9d i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0x1f0f39a2 i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0xab941caf amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x07aac004 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b234c4e dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0e4ccd83 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x11e8ec92 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x158ac548 dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x168ac4e1 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1ea3a58e hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x26b9914e hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2908760e hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ebf6e5a dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x32a052a4 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3493104a hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x37341c02 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4214f2f6 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4315e345 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x440f20bc hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4631b17b hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x498e9a1a hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4aa279cd hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x550fe143 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5678de1b hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x568034da hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x575ed70a hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x591f17da hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5a9ab593 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5fccb44f dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x601fc35c hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x623534dd hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6507d623 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x697cc07d hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6c9e9006 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6eb88005 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7a917102 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x80d3cb8b hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x85fa25cf hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x89857db6 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x900732e8 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9139120b hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x96407136 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9f7ee043 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa3fd3e1b hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa5edea42 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa6a8426d hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa8c0f857 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xabb6914a hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb55d61e4 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb6199af7 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb8286c50 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbc3ccff6 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbc4f6c2c hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbcd1f05d hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbd501460 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbdf02258 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbf741b60 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc1125fa1 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc7b022c7 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcd9e772b dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd0582459 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd09912bd hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1aa4da0 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd66f1dbe hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdc62be58 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdf8b2306 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xeb739e90 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xedaa41ad hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf7661676 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfefe4363 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x8b759533 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x9e50bfd4 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xc99a183b ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x03ae7a8f rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x1c9ed3f3 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8a721ed9 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc91bb9d3 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xeea7435f rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xf9a2982b rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1561d589 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1a617e68 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x23bdf49e ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x38d11aa6 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x410acd1d ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6951e4ff ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9c315af1 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xac04ddb4 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb16229d8 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xcee12cab ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xcfb21a3d ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd75427fe ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe263b5b4 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe8b42cb8 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf74dce9c ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf7d0882e ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xfea95e47 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x05281cd9 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0a314363 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0e60fa25 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x128aaa72 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x14216908 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x17ada164 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x180b8545 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x182a5d80 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bbc8d7e ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bc196ac ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1cf2f4bb ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1eef0a5c ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27be86bb ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x296d808f ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2a998390 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2f478e84 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2fd65b77 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x36eff056 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3a642dac ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3ab6a2a9 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4cbc07dc ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4d97a012 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4ff2572a ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5277c441 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5727b685 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5a4c6203 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5d25bf9e ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64687bbc ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67c1bfdd ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x69da71a8 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6af86082 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6b50a707 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7c0099fe ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7dddba92 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7de0035e ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x80d08c96 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x84ebc46d ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x88856873 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cd558ab ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9089a353 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x933447de ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9999c9e5 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9bbccc0e ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e1b301f ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa479c06b ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xac9dc602 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xade765f4 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb3a89dcd ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb4e42095 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb501761e ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbbd3d94f ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc10562f9 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc38e3a11 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc5385072 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd12edd67 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3149162 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe0de730e ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe15a691f ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe326deaf ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe55bc32a ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9d062e6 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xea9740d3 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf06bc25c ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf52b6597 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf991bca2 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf9bf7337 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x1bd0b8cc ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2118b914 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2e55045e ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4c675b7c ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x60a72f2e ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x689d50aa ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7af7b0f5 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x820919a7 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa2883118 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa64e2bb6 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc62738bf ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xca839858 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x0c194960 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x20dd4adb ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x29844e41 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x34220159 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5c18ccfe ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9c56fd34 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc1c9866b ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xcfc214e8 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf520d09e ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x10d454a8 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x394f5db7 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x4b8be22e iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x59e42a20 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xad95421a iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbd90925f iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xdbdd9452 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xec344520 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0e17e43f rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x32dc506f rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3d3f4cc5 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3d8b1c4e rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4e0e8198 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x643dc2e7 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6f222bc0 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6fd5bac1 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x77f11aa3 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x84a2cd68 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8906040e rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x98dbedca rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xbfbd5bcd rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xca4fa8c0 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xcadd3a50 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xdec8ed0c rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe088ca44 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf4ebc3f4 rdma_set_ib_paths +EXPORT_SYMBOL drivers/input/gameport/gameport 0x118172b6 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x43e0fcc4 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x6435249b gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8540846a __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x898e3328 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x9c1a64e8 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xbc74c997 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc8548370 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0xfd92d6d4 gameport_open +EXPORT_SYMBOL drivers/input/input-polldev 0x1a979e26 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x4408196a input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x8a2deba0 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xb925c8c8 input_unregister_polled_device +EXPORT_SYMBOL drivers/isdn/capi/capifs 0x2c54c957 capifs_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/capifs 0xd0bc06ce capifs_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x1f0762a3 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x310f6d03 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x476175ed capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47dbfa0a capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5aaf3ef2 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5c77c2b1 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5df7521e capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x788d398c capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x917558c7 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc1eb33cf capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd1eb0ebd capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe9f62f29 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xefe3704e capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xfab7beeb capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x0db193ac b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x261469d8 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x2eaf1620 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x336db6da b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x36b188d8 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x495a75fb b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x6044996e b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x8d6e980f b1ctl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xab67ef22 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb2fec798 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb35e9dd7 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xba941e35 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xc3934bfc b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd1cf1852 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xda177358 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdcc73c8f b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x1b470448 b1dmactl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x233ca0dc b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x28539486 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x2891a0f9 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x36b7a287 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x4f15182d b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x503f8626 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xb049092f b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xc8340f13 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xf0ab33b0 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0xa7dc60ee proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x05f2bdc2 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x4b892b9d mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x7eec0ec3 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xbb831b08 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x44fc849b mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xe24e0c97 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x2844a899 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x4b228114 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc0c558f9 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd94696e8 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x18fdca49 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x25134bd4 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xc4139e15 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xe8bb11af isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xf2f6d059 isac_irq +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x333e7a2d isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x7e06fe3a register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xdfbfd7da isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2dfc75d8 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3285cc5e recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x390ee5bb create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x57dd028b mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x72b88447 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x75d6693c recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x89158e59 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x964c1e1e get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa2a2cd3c mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xba071b7f recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xbc687415 confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc7e2d7f0 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xce0751d3 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5ebc131 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdcd86921 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xddb7dda2 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe030a42a mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xec6d13df mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf0df4e9c recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf109448f dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf29b5a6c mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9c0455d l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xa895f197 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xcd509d16 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xd6d8f0f6 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0xf0ff999c mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x0e35396a mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0xb9de7375 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x8ef24c07 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x22ff819c xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0a5b1564 flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3696447a flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x46ee6149 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x586ed3a9 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x666e3673 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6b976af1 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6dc5a3dd flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x83d765ed flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x919b3db2 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9d49836e flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9e087373 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9f886075 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa1900461 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa6811a1b flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xbec5c015 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc46b0d6f flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd7d527c1 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe6e65291 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf69900f7 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfd8f0662 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x5f78d80a bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x6aa21537 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xcbe50edb bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xf8443ef8 bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x01e32f53 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x0e7e06db dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x3e727ba4 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x57c03709 rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x5f087ee2 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x70b48609 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x96d1b21f dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xba3e9a9c dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd0a22f68 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0xf028a577 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c457c5c dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0cbeeab2 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x11c5619d dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x239b683e dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x281f7e86 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2897b01b dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2c28335d dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3ad63f80 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4ad25e71 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x51f3767c dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x54a08c8d dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6767ef6d dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6988f784 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6be43ea8 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x70410b6f dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x718bc0e6 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x808727cc dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x83045615 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x93fc69bb dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xaae347b8 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xab0abf5f dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb1da3ad5 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb5c54920 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcb89fc7d dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcca08cb5 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcce0eeed dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd639b9bc dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd7765e69 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe025b8a7 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8668b4b dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8dd0a52 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf3181adf dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf5fc66bb dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x81a00306 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8a412dc2 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcbcf8f6d dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xce623662 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcffc0325 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xe71fd000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xfac77664 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x494de9ca af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0e803868 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x1c72fe49 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2d78dd9c dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2ee2fd40 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x53a29dfe dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5f356ec5 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5ffaa18d dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x81c7801e dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xa098aef6 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xba5d2146 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdbc0c8d3 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xe8ae4e1b af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0xfda54672 au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x4e59b366 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x02d0ee56 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0xf8fb82d9 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0xf0613c99 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x352e6676 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xba6c55f5 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0xf9803020 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x853ae976 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xbc8e7c04 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x42874d36 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x8863e696 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x9223345d dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x34f0f86b dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x10f2a2f0 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x18ce038e dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x24f062a2 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x67042e6e dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa883391d dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xaa58fe71 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x2f2c5073 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xb21dccb0 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x1f387a2d dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x25014d21 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x750f0eeb dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x77766cb0 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xb84241df dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xccd865dc dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x2f63c31f dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x6ee76331 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x722db8d2 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xaee4647a dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xe5d46df8 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x10345583 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x73e25fb6 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x7e8d948a dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xe9ea436c dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0xdab1b204 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0x36f34153 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0xbfeaed30 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x140dc352 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xfd398e60 l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0xec44d5b2 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x9e511490 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0xec371b7f lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xc865bfd6 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xe3171da3 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x5a10d670 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0x034bc75b mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0x6618dd88 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x826d3c1e nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0x765176c9 or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0x4e10131d or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0x0fcee4ac s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xe6ac092e s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x56a310cb s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xc709d85c s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0xf6272f72 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x8ade3bff sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0x5c567383 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0xe7e731f9 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xe2a418b3 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0x0df1e714 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0xf7f6cb00 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x4facfe0d stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0x2fc5b187 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x399f004d stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0x67a297a7 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x5c0bfd92 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0xbb048232 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0xc019e6c7 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x7719f667 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x7da20307 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x143000fb tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x2d16e763 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8261 0xc53aa390 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0xffb88052 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tua6100 0x39a83bcd tua6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x86c4212d ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x7bc132a4 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x4ec09cee zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0xa23c0ccb zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x4741da26 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xe3f385f7 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xd1dad07e ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xfa1dd1b4 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x534cf512 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x6b980fe1 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x79330c0d bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x600fd7ad btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xf267d65f btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/cpia 0x161518e5 cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xbffba4b2 cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xb3b35366 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xebe4b8fa cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x4126e602 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x4cd6ae0e vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x1447dbbc cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x144963d5 cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x4e404588 cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x585ef895 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x7f786893 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xe5cd563f cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x11443a54 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x537fb994 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x646af89a cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x7398d3c8 cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xb0dcf72e cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xddc97722 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xe83e7f0f cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x04d9bc0d cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1f783e48 cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x24e7007b cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x306dcd66 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x319f981f cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x33d5439f cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x34aa77e9 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4871d3e2 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x490a4d70 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x742a8797 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x743bffc7 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x755ef3fc cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x80de61f0 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x91c545a7 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9aefb35d cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa31d615c cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc2a6449d cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc9232608 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xcb920e51 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xccd7d248 cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd19ace3b cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd9948934 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xb76ebf3d em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xc4d835de em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x1a6090e9 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xaa630557 gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xb1409db5 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xbcdf2987 gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xd600634f gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xe0170329 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xf478f061 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0f2bf329 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x865f4621 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8f650f6f ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa1f2313d ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xc3c14859 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd067dc95 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd4f61033 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xeb2ef714 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf023c2bc ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf5677705 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf81a8cb2 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x034c5e8a saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x07646f79 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0d9e6c58 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x2739a705 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x33512755 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x3984f535 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x4fa437bd saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x57bb10df saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7c390f77 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xb28ee717 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd8c37471 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe7910144 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/soc_camera 0x0b9aa2d2 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x14b901bd soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x5fbec039 soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x84650cc0 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xa59be336 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/tveeprom 0x74f61c6a tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0xf46dffc3 tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x03ad981a usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x16a2915c RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x38733f27 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x407a321c RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x4b05d94d usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x9b6a67dd usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xddecac6d RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf5011f67 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xfa863c66 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xfdd287f8 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x5aebf557 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xb946dd91 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xe6948d10 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x0c217400 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x2bfc5a02 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x51867333 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x71f713c8 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xa858ca32 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xc8dbd580 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videodev 0x00895fd3 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x233100b2 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x8682d558 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xa84db9de video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xa98d17f1 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0xb69c1baf video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xd3640fe0 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf266a29c video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xf9290d00 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x1614552d videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x4e8e259b videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x9fd9c1a4 videocodec_attach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xeb068661 videocodec_register +EXPORT_SYMBOL drivers/memstick/core/memstick 0x20513fe9 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x3f25aeb4 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x4e1d69c7 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5b392d71 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d820a02 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x70e61b7b memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x71bacaf2 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x90810e8a memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x99c0ae61 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa5c4f45d memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa6803e7c memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xc145c619 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xcf794ea2 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xdafb83ab memstick_resume_host +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x13790360 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1a95ad10 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1c2e03dc mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x22b1db0d mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x33f4221f mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x40bd3ae7 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4430ed5a mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4b4fb096 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x52ae89cb mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5432bef2 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x58f406af mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5d9a1a6c mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9286b536 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x95023f61 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x97f3676b mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa062e27f mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa5c189d6 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa751b828 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xacaeb4c7 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb7c77f9c mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc9b49625 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd32e1054 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xda83db37 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdbeb8ebf mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xde91c0a7 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe24b2642 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf6d74a00 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xffd03214 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x178f747e mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2b3369fa mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4311c24b mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4831a04e mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4d50a5c5 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x605e5184 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x61ab331f mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x698e9811 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6b90860b mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7860ef03 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7dcf9870 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x869acb21 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x871c3b37 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8b39e087 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8bae9aa0 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x90df5a73 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x920c4b94 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x96f38049 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb8538036 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xce995229 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd2909b94 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd3f646ff mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xdc7a0219 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe61a9877 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf1dc457c mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf9bbb6c4 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x083c78ff i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x24be12b6 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2d73b01a i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3490d7f3 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x35187aac i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x38f9cac1 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6d74cf9d i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x715df54d i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x72247fcc i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x729560c0 i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x833bfdc1 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x88818020 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x93c1bc49 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x957aaf6f i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x99409d73 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x997a07ae i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc76a79fc i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcc70ac4c i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdd0331e8 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xde120df6 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdfde2c96 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf1fc72b0 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x04f3d134 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x2cc2413d ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x5e9f9795 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x82e561f6 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc050b125 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xcbf862cc ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xdd298092 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xf0c238c1 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x03888060 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xa7756534 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0xa6e9d06e mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0xb3c9a67e mfd_add_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0x3ca4dc8d c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0x48831fba c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0xae33e037 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xef021fa5 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x34f91b95 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x3fd292ee tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x49be84bc tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x4bfa6006 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x5aad1c12 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x629a44c6 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x97ad452b tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0xa3ea03da tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xb5e53e7a tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xc30f58a0 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xc3e19998 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xe83b805c tifm_map_sg +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x60347bba mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x2e0f07f4 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x4bdedc70 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xb930ae88 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x4ac80313 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x50034f9c map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xb4cfe262 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xc9611e42 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x1286aa20 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x604bc55f lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x443ea61d simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x4088585d add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xe9ce2acf del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x485df4ac mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x5ef8ebc9 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/nand 0x6506f560 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x947076fd nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x68d35fec nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xf7485e59 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x01027fdc onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x3b6b40c6 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x49b4fcf6 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xe3475f00 onenand_scan_bbt +EXPORT_SYMBOL drivers/net/8390 0x06e7e134 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x48c51a23 ei_poll +EXPORT_SYMBOL drivers/net/8390 0x4cc44295 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0x4f5e2c5f ei_close +EXPORT_SYMBOL drivers/net/8390 0x61d50dbf ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x83e1a80f ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0x8e3593f2 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x90508060 ei_open +EXPORT_SYMBOL drivers/net/8390 0xad6b536c ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xb2d0bc59 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x1a0c7f1e arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x2e2474ba arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x813a9a15 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x96f1b5f5 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa42d418f arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa7ee8063 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa7f6d4c4 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd1165d70 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xda656b10 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xfce9ba02 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x14a68795 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x2d562397 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x93de8312 com20020_check +EXPORT_SYMBOL drivers/net/bnx2 0xf286d844 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xc9c6f118 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x038524e3 t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x03bce2d2 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x049fda98 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x21902677 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x29a31b5c t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3a267bae cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x54869323 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6c668d3f t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6fc87046 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x7f814cf5 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x879e9dd3 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb59887cb dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe0c2bcea t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe2ebe367 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe7d097c7 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfef428fd cxgb3_free_stid +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x149bea90 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x40498dd0 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xa348947a hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xca53ed21 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xde1df17c hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x0274f555 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x0553ccde sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1a53f906 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x27204b2b sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x5eff3e9e sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x60c0cf9f sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xae830b41 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xaf217736 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb3813517 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb9c5a476 sirdev_put_instance +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x10c4cb6e mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x17b80d18 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x4f1ff44f mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x5b1da042 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x5c868c8a mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x74727f12 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0xb8f1742f generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0xc855ad76 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/pppox 0x18389953 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0x26d9b488 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe75ea245 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/sungem_phy 0xe27050da mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x374a3888 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x6766b136 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xc0acb952 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd85c26e0 tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xe789d736 tms380tr_open +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x05b48dc0 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x13e534a1 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x3e76a2f6 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x73a2ad2c detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8b486f44 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8d76f952 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa66fd22d attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb1890435 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb6172b56 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0xbd35a2cf hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0xca9a9f5c hdlc_close +EXPORT_SYMBOL drivers/net/wireless/airo 0x8d93a09c reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xb9f8f4c6 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xfacbb2a2 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x24611076 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x2ced6ad9 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd729b160 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0xd14346bc stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xe80c9de0 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xe987207b atmel_open +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1d2231c8 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2811018e hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2b0d05c2 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2e981f14 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3d38c974 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4aabc991 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x58ce829f prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x600d1c39 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x609b38b1 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x878e8268 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x91109cc4 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x97040d1e hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb30dc5f1 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb72146ae hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbbd6094d hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbc47525b hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbd1d871f hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbdbd8539 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcafdba80 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd7e4c062 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xea59d6e6 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xecb19e54 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xed10faba hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfcf11857 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xff097247 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3f505e79 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x42d1985b libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x49cdbc2f libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5958be38 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7a2fbb90 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7f96d414 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8678f9f2 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8c0f47f4 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9730e6ab libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9a445960 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9bae8a0c free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9ed3b7c5 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9fed28b2 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa1837d89 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xab21d63d libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb68462c2 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xbc34e809 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc63cd1af libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xde6b9836 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xeb003f4d libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfe13d05a libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x00ddba9f iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x00f5fa5f iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x01492f62 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x04ba6004 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05472739 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x062e5f02 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x084b95cc iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0a9d4c53 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c325416 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c60fc89 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e7be668 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e80df71 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f25b5e7 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f53397f iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1216742e iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x122785ee iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1386fa00 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x171a65a2 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1adca7cc iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d43276a iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e681778 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2087a989 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x225e27fd iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x23b827a5 iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24e32240 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2c8a660d iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x32f79039 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x396e020c iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3a948c6f iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3cd66a71 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x407d60c4 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41eca744 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42a1409f iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42c3cc9e iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x452b6f06 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4565fe33 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x462daf02 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46a32762 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x471e117f iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4819c12e iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49172a0a iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49afbe72 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4d515b16 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5012c7f8 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5035e4a2 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x51d3e1de iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52ad50e6 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53f8053f iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5758dfa0 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5835a547 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5944a4b2 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60774702 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x623866f7 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x658685f7 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6e953116 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6f70c5ae iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6fe839fc iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x705700b5 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75a0c6ef iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7615a222 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x764921f8 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78f83492 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7d69c07e iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7dbe2f46 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7ee8bdbd iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x846929ee iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8710de63 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a806e7f iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x90dc9a19 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x932d94fc iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93e27136 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x95dce55e iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9695e204 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x975ff291 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x97c609a6 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99712c10 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e307aac iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ff49e4a iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2754ea1 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2bed937 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa42b164e iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa487b894 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa0c09c5 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xacc35487 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xada107c4 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xae1583d1 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf457439 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf4b27f3 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb0be52b4 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb154b693 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb6b2b0c8 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xba921fb0 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbaf2ba1c iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbbc23f87 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbcf3e9be iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd4c5d91 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe7da5a3 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1ae76a6 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fae7b9 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fb508a iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4096b3a iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4a4fad8 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc50412d0 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xca9bed6e iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb24d261 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcf9bcbc3 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd1edab26 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd31fb4ae iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd3615fd8 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd427e91e iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd5508262 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd6a4842a iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd79ac26a iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd8322246 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda7277fd iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda873bd6 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe069ccb3 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0d3b070 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe13470f8 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe26d0815 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe3797d22 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4397c1f iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe67c8387 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe8a9f856 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xead6ba66 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf08bec8a iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf08ddc2b iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf1f44885 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf43c551d iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf56d6ed5 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf86a8846 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8dc2841 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb25d9ba iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb6d3629 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfca5e7c0 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfcb78454 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfee582cf iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x36f14e31 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x75bdc40d orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbea3677b alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd49d0a3f orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe4b6a5ac orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xecaf7d65 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xfc1a61af free_orinocodev +EXPORT_SYMBOL drivers/parport/parport 0x049cc2bb parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x0b8e4309 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x1b27b416 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x1c3fce43 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x1e32d284 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x1f9a8495 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x2ecfd81e parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x32416463 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x32844347 parport_write +EXPORT_SYMBOL drivers/parport/parport 0x33c1d07d parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x41b8ddcf parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x42e6a809 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x44ddcd18 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x54fe4373 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x5c824005 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x5d9bb3ce parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x61c8f533 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x62bc0238 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x6a77cb58 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x6fe8e0d2 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x7c002b91 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x800f1d9e parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x974b3f72 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x975dee16 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x9d013207 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x9fbdab9c parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xd4103435 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0xe2685530 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0xe4f4127e parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xee6799ca parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport_pc 0x5c448b2b parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x722d22ca parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x06b2911c pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1e743405 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x29bf7e78 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2a7be3b5 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2fecb511 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3a32c0c3 pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6dc9bee3 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6e228d0c pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x873faa5b pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8bf7547f pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x90c42878 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9a8a7c64 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd9a134d5 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe69a6040 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf1b6029d pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x124d6717 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x34b8775b pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x39cfbb87 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3f11f6f6 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x47dc6c03 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x59768eef pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f42a69d pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x63f033d4 pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x66c73ea9 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6a36214f pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6e0bb03d pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6fb9658b pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x75edb84f pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7e364a0b pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8cc1df68 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa95d4495 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb8451fab pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbccb146d pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbeda1bb2 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc06445c4 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc16bd6fd pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc210ce34 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc9c165cf pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcfaabcb7 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd200e47c release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd5e25310 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd62c18a7 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdcae4bdb pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdf6f40c5 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe811ffd6 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xeac643e8 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xed46e620 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfc46800f pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0xf5fd989e pccard_nonstatic_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x576292fa pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x0545d6d5 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x14bf3899 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x207dc205 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x52328e58 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9bdcf468 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xaaed736d fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xdb9791fd fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x05ac2fa2 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x077a5060 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x12f0ab10 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2491fbe7 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x28665c74 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2c4a33fd fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x340ad3d8 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x37308271 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x374e1dee fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x37eee2c9 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x38e450c3 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x391a5940 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x45e5eead fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4a78e776 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4c2931e2 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x615e51f6 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x72d26462 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x78345d0d fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b5df165 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x951a0ff9 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x970b31d6 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9845b9e6 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x988414e4 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9b4a49de fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9d76a6ae fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa0b190bc fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa46527ea fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa5dccfe5 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb7d86469 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbff54c98 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc85707dd fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc8be1146 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbc35a0b fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbe97dc5 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe2f70421 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeb6b61ba fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xedfa2b49 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf62187fa fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf87cc621 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfcc129a9 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfcd22f30 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xff49ef87 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x9df2940a mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x044a83b4 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x27e619d6 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x290f0b5a osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x335eb847 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3b723f38 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x43818369 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x465f9978 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x58ca31e8 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x67772984 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x71d9aaa4 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x74e67bc0 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x78d4fb68 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7c2f26dc osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8518c6f9 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x86b43d28 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x891cdf29 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8ed46dff osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa0c242c0 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa0cb6c7e osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xab5b40fb osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb20c52b4 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb5597a2d osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb9b8e0b5 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xba8f472f osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbde47496 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xce903563 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd104ab10 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd6dbedbf osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe40bbad2 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe5c54813 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf78ecff5 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfcd33118 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/osd 0x4cdb9786 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6264b223 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xf0331a12 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x0e3cc56a qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x51ada454 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5e825bfc qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xa8af9892 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xbddda1a6 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xebcf016d qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x322a9dc0 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x4de7b83d raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0xee45d649 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1fc4f778 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x50377a0c scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5c87afc1 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6862d8b7 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x72747013 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb235dc68 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd0247b95 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd25ef7fa fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd5ca58d5 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd8f7f328 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe90c5815 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xee31afb9 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0557afad sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0da5d1c9 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x106b93d4 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x10d14f7f sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x17defe5b sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x20ad6413 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x30bb649f sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x35c58488 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x39176fe0 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x52522aaf sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x66d34bf3 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6b0b0377 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x85c3f321 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x89ce3094 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8b0a03c8 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8e9d80e4 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8f5ccb4d sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x911d6015 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9a784fc9 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb0ab63b6 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcc9f58f4 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd8915479 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe0275117 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe287ba1f sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe45fea84 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xeee49143 sas_port_alloc +EXPORT_SYMBOL drivers/ssb/ssb 0x03b73391 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x11436f13 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x1426f8d6 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x1bbd06af ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x25575d38 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x395662f7 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x3cf01961 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4a45fa31 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x4aa36156 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4fd08b5e ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x535b4162 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x7406817e ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x97420c45 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x980a6c4d ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc8d6391b ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xda3079de ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xe4748dd6 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xe58f3bee ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xf3f94c2b ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xf84f5727 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xf994a447 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0xfa35a7a1 ssb_device_disable +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x195cf162 check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2c242af0 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x3123c4f9 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x491418e3 comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fd9d954 comedi_set_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x56f8a5a7 comedi_reset_async_buf +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x786160f4 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8531c662 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x9380a2b5 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x93a09c29 comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x97320e03 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x992b10e4 comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xaca2c440 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb2d558a9 comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb83f6ad comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xcb92918a comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xe9021ffe comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x333224f8 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb102fbe4 subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb5aa36bf subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xf8d6c38a subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x4b43044a cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xc344be4c cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xe6764634 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x10577858 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1442d280 mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1ce69558 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x32c0f471 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x38d024e0 mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x47d81326 mite_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4bd9d705 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4df37c4f mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x57c58c49 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6e5e8073 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6fdbc8a4 mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x86ce6cd7 mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x8ff0e43c mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x917097c4 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa0d81e90 mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa52d4af0 mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xad55e4f5 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd70543d3 mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe867f53f mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfb3ba025 mite_list_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfd5776f3 mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x12258da6 subdev_700_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x8ae2ee89 subdev_700_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xcb81a3f9 subdev_700_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xe8d0e594 subdev_700_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x54fd0d6d comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x042d55f4 comedi_loglevel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0488ce0e comedi_get_n_ranges +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cad1c36 comedi_get_subdevice_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x13e3042c comedi_command +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x194eb4ae comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1c5555d9 comedi_cancel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1ec0e2d3 comedi_get_buf_head_pos +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x22318694 comedi_set_user_int_count +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x262e9c18 comedi_dio_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x370d69d5 comedi_dio_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3cb614fc comedi_data_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3db41e4f comedi_poll +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3de6a4a3 comedi_get_buffer_offset +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x409d3263 comedi_do_insn +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x51da786d comedi_register_callback +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x52769094 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x628ed463 comedi_get_n_subdevices +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x671c2623 comedi_get_buffer_size +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x696272c9 comedi_unlock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x826bd656 comedi_data_read_delayed +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8e199bbf comedi_perror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8fb4413e comedi_data_read_hint +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9b266320 comedi_get_krange +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9dde39b5 comedi_strerror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa0334b40 comedi_get_driver_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa094eab0 comedi_get_board_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa7c55c52 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xaa456501 comedi_mark_buffer_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb45b8b7b comedi_mark_buffer_written +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5396dad comedi_get_maxdata +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5c3ac2a comedi_map +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc4ec62b3 comedi_get_len_chanlist +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc7d949df comedi_lock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd2a9a259 comedi_get_version_code +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd46a9468 comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd48facbb comedi_command_test +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xddd89421 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe2208940 comedi_data_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe38c6fb4 comedi_unmap +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xed5731a4 comedi_get_subdevice_flags +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xefd0c778 comedi_fileno +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf17e03df comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf71581db comedi_get_buffer_contents +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x4849dfc9 cx25821_dev_unregister +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x55bffca6 cx25821_dev_get +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x5f3007e1 cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x84ef4777 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x8565e922 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd33be137 cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xdda2b874 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xf95d3ea0 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x253f3d14 vmbus_get_interface +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x6730ff1e vmbus_child_driver_register +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x91a1e345 vmbus_child_driver_unregister +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xdf1a5ef6 vmbus_loglevel +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x00e1205e iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x05f60456 iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x16850c5b iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x4975b94b iio_class +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x649e4bdc iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x68e561a8 iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x8754ee15 iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xa9f4b08e iio_free_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb72c3726 __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xbc3c2cef iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcb842df9 __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe9cef7c8 iio_allocate_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xea831a6b iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xedd114db iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xfcfb4aae iio_free_idr_val +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x155f13fc variax_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x32b88d66 variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x50bec3d7 pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xb3006079 pod_remove_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x1a6d286b vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x1d1cf354 vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x1f9ad68b vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x3d8eb322 vme_new_dma_list +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x3fc897ab vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x43e2f154 vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x6666140f vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x677bbaf0 vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7754663b vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x779fceb4 vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0x77bca410 vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x9060dc47 vme_bus_type +EXPORT_SYMBOL drivers/staging/vme/vme 0x92c9748a vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x936e4d67 vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x9750ab84 vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0x9d279035 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xa0675185 vme_unregister_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0xa09d045f vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xb9ab5933 vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xcc5b0af0 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe61b1e0b vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xedaf8f68 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0xf1b1bb11 vme_free_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0xf415424c vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xff3a8dc0 vme_unregister_driver +EXPORT_SYMBOL drivers/telephony/ixj 0xf317821c ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x0668f13e phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xae05bf9a phone_register_device +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x573019ee usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x60f5c0e0 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xfb2939e5 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x71b8039d sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x50c1ff84 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xb85582c9 usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x445669b5 lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0xb6ca68ea lcd_device_register +EXPORT_SYMBOL drivers/video/console/bitblit 0xef7e812b fbcon_set_bitops +EXPORT_SYMBOL drivers/video/console/font 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL drivers/video/console/font 0xbb99125c get_default_font +EXPORT_SYMBOL drivers/video/console/font 0xf7584a9c find_font +EXPORT_SYMBOL drivers/video/console/softcursor 0x9a417d5e soft_cursor +EXPORT_SYMBOL drivers/video/console/tileblit 0x1a8e8220 fbcon_set_tileops +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x8e84bb30 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x9a0c8b95 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xbab3a0cb cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xdc680a39 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/display/display 0x4a368e2d display_device_unregister +EXPORT_SYMBOL drivers/video/display/display 0x4d297708 display_device_register +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0xdf4a67b1 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xb0910d2c g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xd827c4e1 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xfe5868e3 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x358c5f17 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x8483ce06 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x9e56a990 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xbc3925ba DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x8d972141 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x7b261626 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x04c2b68a matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x16acef85 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x2ece801d matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x57ac6bb1 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x41883ef8 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xf05e9176 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x0a5f42b7 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x3ee00ee6 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x578f8252 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xa427c7e6 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xfa611a47 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/output 0xb6246a13 video_output_unregister +EXPORT_SYMBOL drivers/video/output 0xda86c6dc video_output_register +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x075e9a91 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x2c9cd06a svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x2cc899bb svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x2e7e48fc svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0x37d9160e svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xb85fa5c6 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xbfb27638 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0x18323d91 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x677019fa sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xbb00e687 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x13b00025 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x5be93165 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0261b073 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0ed22a33 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x17543457 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x5918c1d5 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x33f429ac w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0x45249a4c w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x4a849437 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xa931732e w1_register_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x02b180d6 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x07ae6098 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x6030c8ff config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x7994fd20 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x969742f2 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0xa0683287 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0xa9468e4c config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xa94e67ec configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xb2bf4352 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xe2ea1113 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xf11e92b0 config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xf17ac4dd config_item_init +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x101abdb0 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x10c27fdd fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x1806a96b fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x2db1c1be fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x2dbac499 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x3ddf9970 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x3e1472bc fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x3fd6b21e __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x527c04ff __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x535832c7 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x5c7fd832 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x5d29f90e __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x5e98b453 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x63f96884 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6660a3d6 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x688381ba __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x72ec38c5 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x7a70dd12 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x9e4c0a34 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xa212b32a __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa397884b __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa6a4b698 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xb671cbd0 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xe1fdd0b9 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xe83420fd fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xf07794d7 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0xf8796eb9 __fscache_unregister_netfs +EXPORT_SYMBOL fs/nfsd/nfsd 0x1f573533 nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x96ce9bb4 nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0xdb389aec nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/quota/quota_tree 0x310b8baa qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x367284e0 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x7b58cbe5 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x88e499e2 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xe2324631 qtree_entry_unused +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x5ead7ad3 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xd16f648b make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x1a2a2624 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x201c6144 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x244c6d40 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x2b560613 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x38f39f72 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x3da35774 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x3e84e9ef p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x3ecba9e3 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x44077666 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x49905c52 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x5689b7b2 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x5e0ef374 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x61852dea p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x683efc21 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x6c5e479c p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x8e088d6b p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x9054fcd5 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9f6bbd89 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xafe03423 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xb4f26c81 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0xbaa17b44 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xd0af5654 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xea21f917 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xf19f0f14 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xf7244f2f p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xfd064a1d p9_client_auth +EXPORT_SYMBOL net/appletalk/appletalk 0x72d372e6 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x8ec47fe6 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0xd77612ca atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0xf63120e0 aarp_send_ddp +EXPORT_SYMBOL net/atm/atm 0x17b9ed86 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x25edc931 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x36bcb63e atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x50b18ef9 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x6d1ced27 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xb3b97e81 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0xbc325ea1 atm_charge +EXPORT_SYMBOL net/atm/atm 0xbf1dadb3 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xd6d14090 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0xe2e13859 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xfaa1da35 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xfbdad4d1 register_atm_ioctl +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x5fc6280f ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x773f8490 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x77a5c84a ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x81f13e31 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x820bbce5 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xa02b53ea ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0xb33ffbca ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0xb525bb9a ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xd6967387 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0xffe5c99f ax25_linkfail_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x046aab65 hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0b7dd1be hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x12ddf2d6 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x15891727 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2dc6bae1 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3e2baae9 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x67af465f hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6cc6036b hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6d9e94c9 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x71887347 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7404d8fc bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x85143a49 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e02db61 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e54a85f hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9523aab5 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa9a691fa hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb7846c1d hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc72397ee hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc7ebf33c bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xca3bef88 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xce9873e9 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xda65b393 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0xda8d84c5 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe4ccee6e hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0xed0c9778 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xeededbe5 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0xef23d1e6 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf2af6105 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf6602c18 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf89d3ca6 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfbec2d63 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x5b0939ff br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x26f8e87c ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x9a13867e ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xce26b16a ebt_do_table +EXPORT_SYMBOL net/can/can 0x0e6404e2 can_proto_register +EXPORT_SYMBOL net/can/can 0x43080ba3 can_send +EXPORT_SYMBOL net/can/can 0xa54c0046 can_proto_unregister +EXPORT_SYMBOL net/can/can 0xd490d849 can_rx_register +EXPORT_SYMBOL net/can/can 0xd723a6aa can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x3a36523f ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x87cdb72e ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x989c068b ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xa6220518 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xbd444545 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xcaee2828 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xd67e1f7f ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x1b336e25 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x4704c32d wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0xc79cd1b5 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xd5ea0441 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xefe53f83 wpan_phy_find +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x03c39c96 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x34649365 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x602d03ff arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x7e6825cd ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xa1e3ac59 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xd4e31bc3 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x01f89bad nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x28e58e95 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x512b0771 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8be4b337 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8f931492 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xbf1011ca nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xeb79fb24 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x18e36929 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xdaedbe22 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00588bc5 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa6b485cd ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa780e5e2 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xed8479fd ip6t_register_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x4d7dbb5e xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0xa3cb7422 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x11ee72c5 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x3872ea93 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7f3a0a85 ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb48fe63f ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb5277c7a ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xda5cd1bc ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xe0997301 ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xf168c5c3 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x01d1fcdb hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x072e026f irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x149a413c irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x17b09e20 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x25661947 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x28aa2c4f irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x2f426016 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x30faa334 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x3462950f hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46be7fbc irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x52d0b315 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x5a3e7d73 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x5dbb2212 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x6758f8ac irias_new_object +EXPORT_SYMBOL net/irda/irda 0x68b7447c hashbin_find +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6cb30def iriap_close +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x747d6779 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x7621e908 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x76243bc9 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x76e70979 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x77dd8654 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x781e2db5 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7a57b6f3 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x81cc8f08 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x84a4ec1e proc_irda +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x950c25dd iriap_open +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x996ee52b iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc07de997 irlap_close +EXPORT_SYMBOL net/irda/irda 0xc14e9b6a hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xc589f916 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xc622e9f8 irlap_open +EXPORT_SYMBOL net/irda/irda 0xcd41236c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xcf968b39 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0xd6a274ea irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xd7172ff4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xd8bfb6d4 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe5260e0e irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xe6c621d5 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0xec41fe7f irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf84526d4 irttp_dup +EXPORT_SYMBOL net/irda/irda 0xf95afb1d async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xfbc3538a irttp_connect_response +EXPORT_SYMBOL net/lapb/lapb 0x1aaa1067 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x4b399865 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x4f97a6a3 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x90c3e5ce lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x927cc3e7 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x943adaec lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x9dca436c lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0xee113465 lapb_data_request +EXPORT_SYMBOL net/mac80211/mac80211 0x0aa617e0 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x0b2b4fd4 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x11c06658 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x14005c7e ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x16263738 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x18ed58e6 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x31840b52 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x3a92b0af ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x47675f8f ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x48d89aea ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x608a7aba ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x67276eca ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x6a401d76 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x6c9f12e8 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x6cd798c2 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x72b9e248 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x899141c8 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x8a80e9ec ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x8add7fd8 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x8c22b01f ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xa09cdacc ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xa6c86ee0 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xb19ce503 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xc3845997 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc545b0de wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xce00c3be ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xcfb3ac93 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xd383f021 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd50c7b8c ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd8dae7e3 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xdd4ab08b ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xdf7d250b ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0xe7974b09 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xe97cd627 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xee7fd0e5 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xef970cd5 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf383dda6 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xf8004953 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf83c0d5e ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xfc3386ce ieee80211_wake_queues +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x236b906f register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x30423f2f register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x47e771f4 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4ab9e154 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x594ffcfc ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x752a8c92 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x82c2ab91 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x99c34913 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd70e3373 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd7916025 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe6d027ed ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x851ff45e __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x94817f50 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x5b477cf2 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x1d74a21f xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x34ddae10 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x6c127121 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x7854a06a xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x85204710 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x9b4a69af xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xaf98022e xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc239f80e xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcc3f9666 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xf04e2902 xt_register_targets +EXPORT_SYMBOL net/phonet/phonet 0x2d605c8c phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x383b0b4c phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x38647342 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0x5f706732 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x67043f9e pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x9e9feb6d phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xa0ac7f72 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xabcc49c0 pn_skb_send +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x03c7a4ff rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x05275bf4 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1dc56949 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1e72e239 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x21673b15 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x24e75972 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x36d44633 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x55cb227a rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x664d324f rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6b1c66c5 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x75f3dd20 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8e5c26de rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa63af943 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe7669fdf rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfcd68ca3 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/sunrpc/sunrpc 0x48413c54 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x0b248682 tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x2ef57bc5 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x302e2d64 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x327b2c2f tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x384de290 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x50c98777 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x56e52bc1 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x632cd006 tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xa936a24b tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xc1f5f4b1 tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0xc28a104c tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xd9ae96c1 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe2213f14 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0c504324 register_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wimax/wimax 0xe2a0b0d2 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xf70c172d wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x072e3651 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x192c332d cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x293d3809 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x345de8d3 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x43cad34b cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x4825662f cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x4b5718a7 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x4f3f7fad __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x54e66fb2 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x58d8e67b wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x5cd74554 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x5ce8ddbc cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x60b26dbc wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6cadd6ae cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x731aea55 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x73a38180 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x74fb442b ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x77665565 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x7b27db17 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x7c74c301 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x9815cb0a cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa591490a cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xabb76d0a wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xbbbdc7d2 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xbf2dfc70 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xcdc1591a cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xce4176b1 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xd5b061be cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xd8d510ba wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xdbb77ff5 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xe3c6ad8e wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xec0719fd cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xed761bd8 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0xf8d1b06b regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xfbff9402 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xfc9cdb9b cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/lib80211 0x1bbff969 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x264ac0f8 lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x8c877de4 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x8d1d7491 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x8e671760 lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x9af551b7 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xbb8a17ee lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xf49a15c2 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0xf8f9396b ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x7f39d310 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8471b3e4 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x855d3b19 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8a021c52 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xd336e781 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x231a1e00 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x7a50a3fb snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x17c15809 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x4ad3f518 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x62384d3a snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8a348811 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9df7af8b snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc482499d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd9072e1a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe6df29c7 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0xd92c2b22 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x124b795a snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x12ae0031 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x1458f2d7 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x22d7a9c3 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x29e10e98 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x2adb9bf7 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x316d9d78 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x4111dffa snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x47c95979 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x574d143d snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x5782b328 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x5a2dcbab snd_info_register +EXPORT_SYMBOL sound/core/snd 0x5d24cbb4 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x5dd2c175 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x5e1e0994 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x5e8b5c2b snd_device_register +EXPORT_SYMBOL sound/core/snd 0x678de0a4 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x6e928d7f snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x703c58b5 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x72e814cb snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x799b36ed snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x80a03360 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x85df3974 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x8958d67c snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x89fa91c2 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x8af7e0bd snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x8c1642e9 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x94796797 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9fc99832 snd_component_add +EXPORT_SYMBOL sound/core/snd 0xa3d68b83 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xa6d28387 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xadeb8289 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xb185f7dc snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xb2102669 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbbc7fa13 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xbdb905af snd_cards +EXPORT_SYMBOL sound/core/snd 0xbf852022 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0xce1848dc snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xd398fee9 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xd668cdd6 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0xd8f13875 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xe908f171 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xedd6f4ae snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xefdfef7b snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xf05fa561 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xf3a8d1fd snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xffe4bc24 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd-hwdep 0x72b0a704 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x36766598 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x59186e2f snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8cf0413f snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x935d8f7c snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc01bdc60 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x05303fbc snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x07660525 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x07de3b7f snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x08075792 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x15234f30 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x1785ea3c snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x22c8d27e snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x2f264bb3 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x43e803ce snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x4e3a76fb snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x61b1da8f snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x64b6a431 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x67b69a72 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x699db44a snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x6b68ef74 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x6e8f04e5 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x7538f6a7 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x7efc9076 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x823a35ba snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x84f2a8d8 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x88cc66cc snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x8d1a61d6 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x951742e3 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x9689dfc2 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x987a7872 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x988992f0 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa6e124f4 snd_pcm_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbb7f4784 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xc3dff191 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0xc42401c7 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xc94e3e54 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd1f38939 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0xd3024ef5 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xd4b7fe93 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd6ae6942 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0xd74db5b0 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xed908718 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf3a2c085 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0xfa0318e0 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xff1359ab snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x005d8dad snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1bbcf93c snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2b6ee3f1 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x44908c8e snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x57f7d284 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6552d92f snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x72dade30 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7ac98320 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x80945298 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81da3e30 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81e0ffba snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8890c32d snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x890f2a9c snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa6ba2fc4 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcc3e445d snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdf56a5ab snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdff22b88 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-timer 0x2156e8fe snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x42cc5d83 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x4a8ecfa1 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x5d319a42 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x662ece18 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x719a7580 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0xb17be768 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xb27a24bd snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xb8d25857 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xc1623df0 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xcb0afa45 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0xd938754c snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xf26641eb snd_timer_pause +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x566a6150 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00f81126 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x35c3670e snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3b8f6a67 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x45d13899 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa2daad62 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa5d79340 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb17ce3bb snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xe1a712e0 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf7a73b9f snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x03aeee43 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x21b58c19 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x25c282db snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x38f541c3 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4ae72ed1 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4ef17e91 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x74d8a607 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x948848dc snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb7d21dd6 snd_vx_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00aca6be snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x025067cb snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x61c87e42 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x68b4f5a9 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x7be5987e snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x971e041a snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x104e1551 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1cd770ee snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2fecb286 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x3a89173f snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x4842da5b snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xd3b52022 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x4030abb8 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xaa2c31b1 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd1f84aad snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xe9df5cab snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xa81760a5 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xe232d5ab snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x42f56667 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xc90ddaeb snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x02d4a90c snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x3a656663 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x4f2eb9d2 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x8a9a683c snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xad195bdb snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1fea64bb snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x625f4b49 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x8865c1c3 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xce244789 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdb8096b7 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdc542f16 snd_i2c_bus_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x0f3529d7 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x16708041 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x349927a0 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x415e41bc snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x447c98f9 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5ec4a8a8 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x878d5360 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xdec8ef83 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe5c56d50 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xf65236f5 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x2fcc205f snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x56024e5f snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xd9a180da snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/oss/ad1848 0x26c427ee ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x55262c70 probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/ad1848 0xc90eba24 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xee4618f2 ad1848_init +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd84422f7 attach_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd9ec5db4 probe_mpu401 +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x669ccc14 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sb_lib 0xee76d070 sb_dsp_init +EXPORT_SYMBOL sound/oss/sound 0x04072388 mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1871a34a sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x380fcc06 audio_devs +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x58e1ebc0 midi_devs +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xc7de6f7c synth_devs +EXPORT_SYMBOL sound/oss/sound 0xca5050ab sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xe8ba6221 sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x8bd8fd0d probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x31e28dd3 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x31ee2e99 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x45484a54 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x45da3c01 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x47ad350a snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x57b2de7a snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6fd1846c snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7b689200 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7cb20e5f snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7cee8a5d snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x86596315 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x900d650a snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9c0de725 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9dc11608 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd3fe5904 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd8f9a6e0 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe97c0a6a snd_ac97_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x053ba370 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x761a20e7 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x87a72723 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x94e4fc30 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9628f8ed snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xaf6dd64b snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb451792c snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd25307a3 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xec6423a9 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x3f84d2ac snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x29658af6 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x66bfee40 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xe287bf5c snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x0ff7ad7c oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x265a22cd oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x308fdf5d oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x4eaa68ae oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x60e6e4ec oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x687f6c35 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x693cb778 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x75b52039 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x8986b5c0 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x932b225d oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9fd6dfa9 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xae74dece oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb7d09ca3 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb9e1aae5 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xca10025a oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xd319cd00 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xeedcd625 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xef136c67 oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xefd06474 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf8d53d9f oxygen_write_spi +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9f3a543e snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9f98c5d3 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa194b82b snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa66f4d04 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xd9db6dba snd_trident_alloc_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x2c9a3ecb uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x4f42020c register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x525753af register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x538927c9 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x82dfb309 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xe369d930 sound_class +EXPORT_SYMBOL sound/soundcore 0xf8edc3d2 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x3ea829aa snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x4e0a8b39 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x7834e559 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xbed9c9f5 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xdc9299fa snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xf7c0728e snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/snd-util-mem 0x098f91ce __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x51d36bb0 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5b52f579 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x97a0df3e snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xabbc5c85 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xc5576c35 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xd3e077d4 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xeba0a034 snd_util_memhdr_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x4332e3b7 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x0f85f924 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x53894771 dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x54a2537e dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x979e4403 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xc3023783 dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xe652cf9b dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x470777f4 lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xea135a15 lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0008e931 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x002c1e8e tcp_disconnect +EXPORT_SYMBOL vmlinux 0x003fafdc inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x005b6baa jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x0067d01a scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x0073b751 set_pages_x +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x009d258f _write_lock +EXPORT_SYMBOL vmlinux 0x00a4af22 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00b00999 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00b8282c unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00bae3fb pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x00c4a6dd migrate_page +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00dfe1af jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00ea03ce mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00f46562 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00f8e357 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x00fe4f3f key_link +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x0111b3b2 __scm_send +EXPORT_SYMBOL vmlinux 0x01144d60 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x013e1c4c blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x0159be64 blk_remove_plug +EXPORT_SYMBOL vmlinux 0x01681d48 generic_setlease +EXPORT_SYMBOL vmlinux 0x01693cde pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x016a08fd rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x0186d073 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01b1d9ac mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x01c17f7d journal_destroy +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e0e4e3 skb_over_panic +EXPORT_SYMBOL vmlinux 0x01e5172b uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x0216287e skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x023b8839 arp_create +EXPORT_SYMBOL vmlinux 0x023c3969 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x0256389f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0278d455 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x0284228e pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x02872eb5 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x028b2e49 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x0298d368 kobject_init +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02b3ffea dm_table_get_size +EXPORT_SYMBOL vmlinux 0x02c068d6 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x02c40853 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x02c99064 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x031d38eb generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x033f8e69 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x035ca601 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x036c0e6f bioset_free +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x037e90c5 set_disk_ro +EXPORT_SYMBOL vmlinux 0x03942016 d_alloc_name +EXPORT_SYMBOL vmlinux 0x03b01bd8 pci_enable_device +EXPORT_SYMBOL vmlinux 0x03b22a3b vfs_mkdir +EXPORT_SYMBOL vmlinux 0x03b56d2e swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03c5c0a3 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x03fe5336 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x0417fe32 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x041dd881 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x041dd9a7 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0429743b lock_fb_info +EXPORT_SYMBOL vmlinux 0x04369e19 netpoll_setup +EXPORT_SYMBOL vmlinux 0x04403792 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x04648d83 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x049434a0 may_umount_tree +EXPORT_SYMBOL vmlinux 0x04ae0224 pci_set_master +EXPORT_SYMBOL vmlinux 0x04b85123 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x04d073c5 get_io_context +EXPORT_SYMBOL vmlinux 0x04d4b8e3 poll_initwait +EXPORT_SYMBOL vmlinux 0x04d73aa9 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x053f46cf register_netdev +EXPORT_SYMBOL vmlinux 0x0553945e __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x058c2635 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x05916e54 misc_deregister +EXPORT_SYMBOL vmlinux 0x05bc543c handle_sysrq +EXPORT_SYMBOL vmlinux 0x05e28d43 __first_cpu +EXPORT_SYMBOL vmlinux 0x05ebb931 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x05fb383f seq_open +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x067457db __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x068c7263 ioremap_cache +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06c5fe6e scsi_device_put +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06eac31c vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x0710bd95 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x072c70a9 mntput_no_expire +EXPORT_SYMBOL vmlinux 0x073dfa12 generate_resume_trace +EXPORT_SYMBOL vmlinux 0x0745c706 scsi_host_put +EXPORT_SYMBOL vmlinux 0x077cd77c skb_dequeue +EXPORT_SYMBOL vmlinux 0x0796c6b9 skb_put +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07bb3697 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07e06587 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x080e6700 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x0817b25d scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x0824d939 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x082e06dc vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x08770b46 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x08810708 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x088227f4 sk_filter +EXPORT_SYMBOL vmlinux 0x0890779c ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x08ca5b89 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08f2498c qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x08f61d1d cont_write_begin +EXPORT_SYMBOL vmlinux 0x09000d7f invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x09253410 mmc_release_host +EXPORT_SYMBOL vmlinux 0x0933aae1 efi_enabled +EXPORT_SYMBOL vmlinux 0x09408568 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x094e7858 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x098431ba acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c64582 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09db5c4c kset_unregister +EXPORT_SYMBOL vmlinux 0x09e89daa ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x09ef9b44 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x0a1665db kthread_stop +EXPORT_SYMBOL vmlinux 0x0a170151 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a2a3890 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x0a512320 pipe_unlock +EXPORT_SYMBOL vmlinux 0x0a5436e0 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x0a5aa16e neigh_table_clear +EXPORT_SYMBOL vmlinux 0x0a5d2120 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x0a9b102c framebuffer_release +EXPORT_SYMBOL vmlinux 0x0ac62342 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0aee7aba kill_pgrp +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b3af3ef netif_carrier_off +EXPORT_SYMBOL vmlinux 0x0b52eb65 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x0b53967b blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x0b5fd193 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x0b6f8f08 tty_register_driver +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b83e30f kmem_cache_size +EXPORT_SYMBOL vmlinux 0x0bb5074c inet_shutdown +EXPORT_SYMBOL vmlinux 0x0bbecd93 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x0bcbb434 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x0be44b3a blk_integrity_register +EXPORT_SYMBOL vmlinux 0x0beb3dac uart_match_port +EXPORT_SYMBOL vmlinux 0x0becda0c phy_device_create +EXPORT_SYMBOL vmlinux 0x0c3efe93 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x0c502002 rwsem_wake +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c776f38 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x0c85af11 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb27116 sock_i_ino +EXPORT_SYMBOL vmlinux 0x0cf5d82d dm_table_put +EXPORT_SYMBOL vmlinux 0x0cf905a9 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x0d13c946 ht_create_irq +EXPORT_SYMBOL vmlinux 0x0d15356c linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x0d26a76d _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0d2bc420 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x0d3925ab agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d547642 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dae9f06 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x0e249988 block_truncate_page +EXPORT_SYMBOL vmlinux 0x0e3d72ad atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e7d05f0 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x0e83fea1 del_timer_sync +EXPORT_SYMBOL vmlinux 0x0e95ecfb scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x0ee0d396 read_cache_page +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f4399eb alloc_disk +EXPORT_SYMBOL vmlinux 0x0f6d7b28 freeze_bdev +EXPORT_SYMBOL vmlinux 0x0f7734fc fifo_set_limit +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fe2b361 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x0ff5ffad mmc_detect_change +EXPORT_SYMBOL vmlinux 0x100824dc neigh_destroy +EXPORT_SYMBOL vmlinux 0x10122b04 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x101461f6 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x1016faaa generic_write_end +EXPORT_SYMBOL vmlinux 0x102237e9 mutex_unlock +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x1070c0f5 register_exec_domain +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x107d5757 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10daeadb journal_init_inode +EXPORT_SYMBOL vmlinux 0x10dbfe10 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f01f44 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x110e3d76 __breadahead +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x112bf23c bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x1144cf1c neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x11746e1f flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x118b424f proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a18b14 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x11a5f610 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x11cec3af dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x11ed082a acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0x124be00d dcache_readdir +EXPORT_SYMBOL vmlinux 0x128cb519 proc_symlink +EXPORT_SYMBOL vmlinux 0x12b2d6c4 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x12d3a7c6 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x12ef3330 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x12f10736 udplite_table +EXPORT_SYMBOL vmlinux 0x130bb067 lock_may_read +EXPORT_SYMBOL vmlinux 0x1328ec48 simple_fill_super +EXPORT_SYMBOL vmlinux 0x133abaf5 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x134816fa kset_register +EXPORT_SYMBOL vmlinux 0x1366f59f locks_init_lock +EXPORT_SYMBOL vmlinux 0x1378e714 acpi_video_display_switch_support +EXPORT_SYMBOL vmlinux 0x137dccbb __scsi_put_command +EXPORT_SYMBOL vmlinux 0x138a78d1 set_current_groups +EXPORT_SYMBOL vmlinux 0x13f3090c journal_abort +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x13f6e7eb sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x13fd0fe4 vfs_link +EXPORT_SYMBOL vmlinux 0x13fdd87f security_path_rmdir +EXPORT_SYMBOL vmlinux 0x140b4605 set_anon_super +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x1439573c set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x14492533 km_report +EXPORT_SYMBOL vmlinux 0x14a2116a compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x14af0cf7 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x14d38fd1 km_state_notify +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1552efad neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x15d2d132 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x15d4ef31 d_delete +EXPORT_SYMBOL vmlinux 0x15ef2dd9 kfifo_free +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x1632472a tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x1675606f bad_dma_address +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x16c8bd99 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x1706713c genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x171002ef __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x171e324a scsi_register_driver +EXPORT_SYMBOL vmlinux 0x17a2c3a2 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17d05689 create_mnt_ns +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x1803b3e8 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x1817dcca elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x181b6ff2 mempool_resize +EXPORT_SYMBOL vmlinux 0x18251c09 netlink_set_err +EXPORT_SYMBOL vmlinux 0x183f9e93 scsi_device_get +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x18407883 find_vma +EXPORT_SYMBOL vmlinux 0x18439b1d jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x185dbd52 acpi_bus_add +EXPORT_SYMBOL vmlinux 0x186d64a4 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x1878da50 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x18818029 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18a26ea1 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x18a949a7 end_page_writeback +EXPORT_SYMBOL vmlinux 0x18b72573 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x18bb68d1 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x18be65b8 backlight_device_register +EXPORT_SYMBOL vmlinux 0x18d34965 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x18d76cd5 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x18dae924 request_key_async +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x18feac05 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x190c3d2b dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x1955215d __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x1958503e tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x196b7d24 audit_log_start +EXPORT_SYMBOL vmlinux 0x196faf24 generic_write_sync +EXPORT_SYMBOL vmlinux 0x19718dad xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1985ed3c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19b37ae9 __ht_create_irq +EXPORT_SYMBOL vmlinux 0x19bc4268 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x1a15874b qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x1a2188d7 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x1a3e2a1f kernel_listen +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a73d440 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x1a75caa3 _read_lock +EXPORT_SYMBOL vmlinux 0x1a7d08c5 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x1a84a1ca con_copy_unimap +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1a8ab648 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x1ab15135 bmap +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b3056f5 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x1b60c76e ip_route_output_key +EXPORT_SYMBOL vmlinux 0x1b62fdc8 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b84585e set_bh_page +EXPORT_SYMBOL vmlinux 0x1b89419f add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bb643d6 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x1c0e89c3 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c25fabb jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x1c3817af uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x1c5eb33a kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x1c73c4c7 kill_litter_super +EXPORT_SYMBOL vmlinux 0x1c75d8b8 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c918759 neigh_table_init +EXPORT_SYMBOL vmlinux 0x1c994a38 backlight_force_update +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce56af7 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x1cefe352 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1d06e6d4 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x1d079d26 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d31cffe nf_afinfo +EXPORT_SYMBOL vmlinux 0x1d663b7a agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x1db7706b __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1de87f71 lock_rename +EXPORT_SYMBOL vmlinux 0x1de8d686 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x1df0a1b9 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x1df8e7d2 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x1e046719 iunique +EXPORT_SYMBOL vmlinux 0x1e0c2be4 ioremap_wc +EXPORT_SYMBOL vmlinux 0x1e0c463e insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x1e278b10 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x1e2e427f cpumask_next_and +EXPORT_SYMBOL vmlinux 0x1e381251 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x1e482980 per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e7dbbc7 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x1e884aea phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x1eaeea81 vfs_fsync +EXPORT_SYMBOL vmlinux 0x1eb36c32 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x1ebfa598 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x1ec94d6a bio_copy_user +EXPORT_SYMBOL vmlinux 0x1eee222f nobh_writepage +EXPORT_SYMBOL vmlinux 0x1efdde60 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f18579e mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x1f208040 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x1f351c6b blk_recount_segments +EXPORT_SYMBOL vmlinux 0x1f590b5f swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x1f62b436 skb_clone +EXPORT_SYMBOL vmlinux 0x1f6f63f0 cad_pid +EXPORT_SYMBOL vmlinux 0x1f75e552 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x1f7907d0 follow_up +EXPORT_SYMBOL vmlinux 0x1f7f72d6 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x1f8d0c6f __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x1fb8fdb5 set_device_ro +EXPORT_SYMBOL vmlinux 0x1fbd3fcd tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x1ff8fd08 do_munmap +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x20092385 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x200effc8 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x2054901c should_remove_suid +EXPORT_SYMBOL vmlinux 0x2055042d tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x207aaefd sock_no_connect +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x20b1458b __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x20eadeb6 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x20f9322a idr_pre_get +EXPORT_SYMBOL vmlinux 0x2123f7b2 generic_make_request +EXPORT_SYMBOL vmlinux 0x21420853 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x216cd286 __blk_end_request +EXPORT_SYMBOL vmlinux 0x2183b118 get_disk +EXPORT_SYMBOL vmlinux 0x218564fd is_bad_inode +EXPORT_SYMBOL vmlinux 0x21c3e4f2 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x21d50a51 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21e5679c copy_user_generic +EXPORT_SYMBOL vmlinux 0x21fdcf1f bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x22134664 nf_reinject +EXPORT_SYMBOL vmlinux 0x22191195 posix_test_lock +EXPORT_SYMBOL vmlinux 0x22220e04 create_proc_entry +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x22689f65 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x226d4cd2 unload_nls +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b5ea0b elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22e2bc9e dm_exception_store_create +EXPORT_SYMBOL vmlinux 0x22eaa879 simple_write_end +EXPORT_SYMBOL vmlinux 0x23070b65 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x2342628c ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x23542918 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x235a5afd pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x235eb306 mutex_lock +EXPORT_SYMBOL vmlinux 0x236c8c64 memcpy +EXPORT_SYMBOL vmlinux 0x2373cb14 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x2374f44a bio_init +EXPORT_SYMBOL vmlinux 0x2385e61c mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x239c787a tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x23b99e92 node_states +EXPORT_SYMBOL vmlinux 0x23c5a266 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23ca89be default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x23cab0b3 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x23d6ea45 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x23f5422d dma_pool_free +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x241536d0 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0x2427e7dc tty_check_change +EXPORT_SYMBOL vmlinux 0x2437d309 da903x_query_status +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x2467b6f8 proto_register +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x24765260 input_free_device +EXPORT_SYMBOL vmlinux 0x2490dc2f tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x24a0dce2 __break_lease +EXPORT_SYMBOL vmlinux 0x24d3f093 dev_driver_string +EXPORT_SYMBOL vmlinux 0x24e4bb01 down_write_trylock +EXPORT_SYMBOL vmlinux 0x24ead969 noop_qdisc +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250b70b0 tcp_prot +EXPORT_SYMBOL vmlinux 0x250fb172 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x25250aac blk_insert_request +EXPORT_SYMBOL vmlinux 0x25266d9c dst_discard +EXPORT_SYMBOL vmlinux 0x2530d3a2 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x2534f4b5 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x255097f3 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x256dae49 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25cef4c1 security_inode_permission +EXPORT_SYMBOL vmlinux 0x25ec1b28 strlen +EXPORT_SYMBOL vmlinux 0x2632393b blk_run_queue +EXPORT_SYMBOL vmlinux 0x266e4c9d dm_register_target +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x2694f44b nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x26d1ee01 alloc_trdev +EXPORT_SYMBOL vmlinux 0x26df231c fb_show_logo +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f46016 phy_start +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2727da5d _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x274a3ec1 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x27784fd2 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27aeea2b set_security_override +EXPORT_SYMBOL vmlinux 0x27b25349 cdev_add +EXPORT_SYMBOL vmlinux 0x27b35c51 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c33efe csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x27c4850a key_alloc +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27cf117f iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x2829e242 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x282c9cfe ip6_frag_init +EXPORT_SYMBOL vmlinux 0x285135e6 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x2877cad3 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x28a25eea xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28aa9d5e jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x28e205ce vfs_quota_on +EXPORT_SYMBOL vmlinux 0x2901035b neigh_parms_release +EXPORT_SYMBOL vmlinux 0x2906c21e set_page_dirty +EXPORT_SYMBOL vmlinux 0x291c72f6 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x292093f4 native_rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x294f35c5 sync_blockdev +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x2957695a compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x295b9a4b i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x296356c9 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x29738f44 get_phy_id +EXPORT_SYMBOL vmlinux 0x297dc4df slow_work_register_user +EXPORT_SYMBOL vmlinux 0x29ab08f9 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x29ad2e86 prepare_binprm +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29c484d2 blk_make_request +EXPORT_SYMBOL vmlinux 0x29db5c48 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x29f6ce63 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x2a25ca34 inet_frag_find +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a53a207 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x2a5cc228 d_alloc +EXPORT_SYMBOL vmlinux 0x2a88487e netdev_state_change +EXPORT_SYMBOL vmlinux 0x2a8efb83 agp_copy_info +EXPORT_SYMBOL vmlinux 0x2aa30ea0 iget_locked +EXPORT_SYMBOL vmlinux 0x2aeb2800 mempool_create_node +EXPORT_SYMBOL vmlinux 0x2af46b5d __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x2b0427fe generic_file_mmap +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b43df9a pci_request_regions +EXPORT_SYMBOL vmlinux 0x2b91e7b6 arp_xmit +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2ba73482 vfs_readv +EXPORT_SYMBOL vmlinux 0x2bb14624 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb6fde2 __kfifo_put +EXPORT_SYMBOL vmlinux 0x2bdb82a9 read_cache_pages +EXPORT_SYMBOL vmlinux 0x2bdfc8c2 sock_register +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c285cbf arp_tbl +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c61368e ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x2c73d3f9 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x2c7fbe94 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x2c817ca2 module_refcount +EXPORT_SYMBOL vmlinux 0x2c830677 seq_path +EXPORT_SYMBOL vmlinux 0x2c842502 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x2c9aa804 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x2cdc56bd ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x2ceccda7 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x2cf53ba8 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x2d10b122 km_policy_expired +EXPORT_SYMBOL vmlinux 0x2d12c518 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x2d47b060 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x2d5528c9 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x2d5fa01f i2c_master_send +EXPORT_SYMBOL vmlinux 0x2d7530e1 save_mount_options +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2da1dcb1 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x2da80e2f starget_for_each_device +EXPORT_SYMBOL vmlinux 0x2dbafbe3 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x2dc4af0b input_unregister_handle +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2e06111d cpu_present_mask +EXPORT_SYMBOL vmlinux 0x2e1261fb ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e4281fe blk_put_request +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e89216f sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x2e8d9b44 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x2e92729c jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x2e97a729 idr_remove +EXPORT_SYMBOL vmlinux 0x2e9b9f73 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x2eb9a0e8 _read_lock_irq +EXPORT_SYMBOL vmlinux 0x2edb13f0 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x2f004d06 bio_map_kern +EXPORT_SYMBOL vmlinux 0x2f097a9b get_sb_ns +EXPORT_SYMBOL vmlinux 0x2f1f51b8 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x2f57a875 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x2f96387c tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x2fa5a500 memcmp +EXPORT_SYMBOL vmlinux 0x2fb0cd60 input_get_keycode +EXPORT_SYMBOL vmlinux 0x2ff063b5 acpi_get_name +EXPORT_SYMBOL vmlinux 0x2ff387d4 security_path_symlink +EXPORT_SYMBOL vmlinux 0x2ffedf25 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x30226ddf agp_device_command +EXPORT_SYMBOL vmlinux 0x302b7c8f call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x3045168d sockfd_lookup +EXPORT_SYMBOL vmlinux 0x30530858 generic_write_checks +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x308427c4 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x30941924 vfs_write +EXPORT_SYMBOL vmlinux 0x309cb62a blk_unplug +EXPORT_SYMBOL vmlinux 0x30afa589 pskb_copy +EXPORT_SYMBOL vmlinux 0x30c5e4e5 load_nls_default +EXPORT_SYMBOL vmlinux 0x30cf4b33 find_get_page +EXPORT_SYMBOL vmlinux 0x30df17d6 tr_type_trans +EXPORT_SYMBOL vmlinux 0x30e13ffd ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30f08754 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x30f62e85 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x310ca048 neigh_for_each +EXPORT_SYMBOL vmlinux 0x310dbe90 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x311fd4ba d_instantiate +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x314f6e8d scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x318fe945 nla_reserve +EXPORT_SYMBOL vmlinux 0x319a2a3d vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x31adac5c ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31ebadcd in_group_p +EXPORT_SYMBOL vmlinux 0x3218f806 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x32419890 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x32430f90 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x325155ac nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32d8e627 bio_put +EXPORT_SYMBOL vmlinux 0x32dca277 scsi_print_command +EXPORT_SYMBOL vmlinux 0x32e29e48 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x32fc0f81 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x334319f3 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x3350db80 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x3360d261 vfs_llseek +EXPORT_SYMBOL vmlinux 0x336cbe1d ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x337ad9e4 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x33813829 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x33835761 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x3396ce02 cdrom_open +EXPORT_SYMBOL vmlinux 0x3398c0b2 stop_tty +EXPORT_SYMBOL vmlinux 0x339e93ab thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0x33b15fb6 ip6_xmit +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x33c055a0 module_put +EXPORT_SYMBOL vmlinux 0x33d92f9a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x33e2e5ce ___pskb_trim +EXPORT_SYMBOL vmlinux 0x34269ed5 dev_change_flags +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x3468d610 arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34b46624 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x34b575e8 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x34c978ae get_fs_type +EXPORT_SYMBOL vmlinux 0x34e58e20 inet6_getname +EXPORT_SYMBOL vmlinux 0x34e6010e fail_migrate_page +EXPORT_SYMBOL vmlinux 0x35264aef elevator_exit +EXPORT_SYMBOL vmlinux 0x353bbc9c __bforget +EXPORT_SYMBOL vmlinux 0x3556df7a neigh_lookup +EXPORT_SYMBOL vmlinux 0x3582ed17 vfs_stat +EXPORT_SYMBOL vmlinux 0x359c42fb compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35f00c85 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x35f4dcf5 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x3616071e xfrm_register_type +EXPORT_SYMBOL vmlinux 0x3618879e eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x36281959 init_file +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x366493f1 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x3665108f acpi_bus_start +EXPORT_SYMBOL vmlinux 0x366e5c9e blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x3686ea09 spi_print_msg +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x3699fe27 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x36a28012 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x36a4b0e5 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x36be3dab poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x36dc863e vc_cons +EXPORT_SYMBOL vmlinux 0x36e02cd0 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x3701a196 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x37151b3d alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x3736c67a dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x376b7c6b xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x37b02f15 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37cd4bd6 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37debfbd scsi_scan_target +EXPORT_SYMBOL vmlinux 0x37f6924b sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x37f9cfc4 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x38002b33 misc_register +EXPORT_SYMBOL vmlinux 0x380897e5 simple_statfs +EXPORT_SYMBOL vmlinux 0x38620105 mpage_readpage +EXPORT_SYMBOL vmlinux 0x3868ebb7 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x3872021d blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x3893a3a3 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x389ea5b3 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x38a9af09 send_sig +EXPORT_SYMBOL vmlinux 0x38b1d102 inet_listen +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38cab31c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x38cc7ad0 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x38f33bed dump_fpu +EXPORT_SYMBOL vmlinux 0x3929b805 single_open +EXPORT_SYMBOL vmlinux 0x393329f8 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x395b3700 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x3a066d96 thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x3a1190ef loop_register_transfer +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a39c214 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x3a3c6a8e simple_write_begin +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa1dbcf _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x3aaecb02 devm_free_irq +EXPORT_SYMBOL vmlinux 0x3abf2a14 d_validate +EXPORT_SYMBOL vmlinux 0x3ac0bc2c xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3afbd807 sock_i_uid +EXPORT_SYMBOL vmlinux 0x3b149ed0 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x3b1e79a7 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b5028ea mmc_add_host +EXPORT_SYMBOL vmlinux 0x3b628b1f napi_complete +EXPORT_SYMBOL vmlinux 0x3b647c2d inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x3bc3807c swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x3bc8f6a4 i2c_transfer +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c0116f2 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x3c01d351 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c4432ca writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x3c4e5783 generic_removexattr +EXPORT_SYMBOL vmlinux 0x3c55375c pci_reenable_device +EXPORT_SYMBOL vmlinux 0x3c7227bf complete_all +EXPORT_SYMBOL vmlinux 0x3c8146e2 journal_errno +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cb8043f neigh_create +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cd5e89a journal_wipe +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cf20b6d __serio_register_port +EXPORT_SYMBOL vmlinux 0x3cf7c0e1 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x3d1963ff mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x3d1f89c2 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x3d4031ca __devm_release_region +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3d8bdce1 put_disk +EXPORT_SYMBOL vmlinux 0x3d8dd9e4 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x3d914580 inode_init_always +EXPORT_SYMBOL vmlinux 0x3d9ee9f0 clear_page +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da5eb6d kfifo_alloc +EXPORT_SYMBOL vmlinux 0x3da8dd61 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3de1793f ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x3e1ab7b4 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x3e1e3d7b inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x3e1f073d wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x3e219de6 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e337bc6 netlink_ack +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e7b79b1 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x3e9d1157 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x3eae64c5 mddev_congested +EXPORT_SYMBOL vmlinux 0x3ebfdbc8 fb_set_var +EXPORT_SYMBOL vmlinux 0x3ec1d14e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef41173 sock_wake_async +EXPORT_SYMBOL vmlinux 0x3ef61383 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x3f023ffa nf_log_unregister +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f0bb115 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x3f1899f1 up +EXPORT_SYMBOL vmlinux 0x3f269c2d tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x3f2b17b5 phy_driver_register +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f45cf4f scsi_execute +EXPORT_SYMBOL vmlinux 0x3f4a5670 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x3f50d091 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x3f78c614 unregister_netdev +EXPORT_SYMBOL vmlinux 0x3f88a4a1 security_path_mknod +EXPORT_SYMBOL vmlinux 0x3fa3b5d5 __destroy_inode +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fbd96a3 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x3fd8f600 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x3fda7aca md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x3fdde376 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x3fe7bf95 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x3fea569a ppp_input_error +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff2797d skb_pull +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x4011a055 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x4023f884 nf_register_hook +EXPORT_SYMBOL vmlinux 0x40470292 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x40523c92 agp_free_memory +EXPORT_SYMBOL vmlinux 0x4056d5dd lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x407ad4e2 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x4085d039 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x408e6002 sock_no_poll +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40b55b4b complete_request_key +EXPORT_SYMBOL vmlinux 0x40c350cc eth_validate_addr +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40cdb3d2 mutex_trylock +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x4113b67c rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41252516 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x416a35c5 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x41721052 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x41797065 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41937b36 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x41986722 __dst_free +EXPORT_SYMBOL vmlinux 0x41999109 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x419cfada sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x419d5893 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x41a9c68d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x41cf8e4a skb_unlink +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x4221f8ae netdev_set_master +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x4222adb5 blkdev_put +EXPORT_SYMBOL vmlinux 0x42420306 tty_write_room +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x42a4bdf2 in_egroup_p +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42c8de35 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x42d71be2 kobject_set_name +EXPORT_SYMBOL vmlinux 0x42fe4b78 eth_type_trans +EXPORT_SYMBOL vmlinux 0x4300343e kthread_bind +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4303e67a find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x4327f0d5 memset_io +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x4350fc96 check_disk_change +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x437153dd rfkill_register +EXPORT_SYMBOL vmlinux 0x4380493b netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43c0f8ce skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43feb202 cdev_init +EXPORT_SYMBOL vmlinux 0x4415c43d __seq_open_private +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x441671aa ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x443240f9 uart_register_driver +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x44615c6a dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x4463ad56 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x449739f5 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44b9bceb page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x44ca5541 set_trace_device +EXPORT_SYMBOL vmlinux 0x44d560e3 init_level4_pgt +EXPORT_SYMBOL vmlinux 0x44deed08 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x44e81f0b phy_print_status +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f4c408 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x45023668 cdrom_release +EXPORT_SYMBOL vmlinux 0x45195bf2 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x451b978e input_release_device +EXPORT_SYMBOL vmlinux 0x4522468a spi_release_transport +EXPORT_SYMBOL vmlinux 0x45284637 get_agp_version +EXPORT_SYMBOL vmlinux 0x4529a512 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x453368c9 fb_find_mode +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x453d8161 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x45450063 mod_timer +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4568495c prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x458a8e3f devm_ioremap +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x459612f6 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x45d11c43 down_interruptible +EXPORT_SYMBOL vmlinux 0x45d55543 down_write +EXPORT_SYMBOL vmlinux 0x45e50f1f nf_log_packet +EXPORT_SYMBOL vmlinux 0x45fbf73d sock_rfree +EXPORT_SYMBOL vmlinux 0x46066e47 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x46085e4f add_timer +EXPORT_SYMBOL vmlinux 0x4621a691 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x465d5157 filemap_fault +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x466d0b8f bdevname +EXPORT_SYMBOL vmlinux 0x469cbf7f ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x46b0dc6f inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x46c47fb6 __node_distance +EXPORT_SYMBOL vmlinux 0x46da982b f_setown +EXPORT_SYMBOL vmlinux 0x46e67e04 submit_bio +EXPORT_SYMBOL vmlinux 0x46ea8cc2 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x46efdfc0 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0x472e9b7d rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x4747b0fe agp_generic_enable +EXPORT_SYMBOL vmlinux 0x47483a0d tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x4748a2c7 file_remove_suid +EXPORT_SYMBOL vmlinux 0x474e4821 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x476c17ad xfrm_lookup +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a17d1a dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x47e0e232 dm_get_device +EXPORT_SYMBOL vmlinux 0x47e12960 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x47ef1088 llc_add_pack +EXPORT_SYMBOL vmlinux 0x48133b5f xfrm_input +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x484ae8bc dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x484c5a1d km_new_mapping +EXPORT_SYMBOL vmlinux 0x4851fdf9 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48739af4 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x487c210e tty_kref_put +EXPORT_SYMBOL vmlinux 0x48d09828 force_sig +EXPORT_SYMBOL vmlinux 0x48f7a8f8 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x48fa1a5f __netif_schedule +EXPORT_SYMBOL vmlinux 0x490a5097 security_path_rename +EXPORT_SYMBOL vmlinux 0x493a5e6a bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x494e3393 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x494f2d02 vga_put +EXPORT_SYMBOL vmlinux 0x4957b6fd sk_free +EXPORT_SYMBOL vmlinux 0x495ca37a netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49da9a9a _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x49ddd9c6 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x49df39ce con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e5aebf pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x4a0b7189 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x4a210057 pci_get_device +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a727ace pci_scan_slot +EXPORT_SYMBOL vmlinux 0x4a87bd40 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x4ac2cf64 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4adeb27f blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x4af710e6 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b07e779 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x4b1f0a60 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x4b8b262e __neigh_event_send +EXPORT_SYMBOL vmlinux 0x4b8d21ee tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4ba5baa0 load_gs_index +EXPORT_SYMBOL vmlinux 0x4bb492b5 arp_find +EXPORT_SYMBOL vmlinux 0x4bb8bb00 scsi_print_result +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bda4fe6 d_path +EXPORT_SYMBOL vmlinux 0x4bdf028e idr_find +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1b965c gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x4c20ab11 task_nice +EXPORT_SYMBOL vmlinux 0x4c298b01 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x4c43b617 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x4c45d41f key_type_keyring +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4c55555d __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x4c5dc1a1 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x4c6c0fe2 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x4c6e8501 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x4c8c1276 register_quota_format +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4ce02f51 replace_mount_options +EXPORT_SYMBOL vmlinux 0x4ce0c3eb compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x4d0a9bc2 set_user_nice +EXPORT_SYMBOL vmlinux 0x4d0c1234 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x4d3e904c deny_write_access +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dd6ce0d set_pages_uc +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e96d772 unlock_buffer +EXPORT_SYMBOL vmlinux 0x4e99c301 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x4eaa206a inode_permission +EXPORT_SYMBOL vmlinux 0x4ec3ddea bio_endio +EXPORT_SYMBOL vmlinux 0x4edc5a0f bio_add_page +EXPORT_SYMBOL vmlinux 0x4edccf72 is_container_init +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4edf8824 otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x4f00501b no_llseek +EXPORT_SYMBOL vmlinux 0x4f075c5a ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x4f1846f9 keyring_search +EXPORT_SYMBOL vmlinux 0x4f1b5978 remove_inode_hash +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f26b58d setup_new_exec +EXPORT_SYMBOL vmlinux 0x4f3e82a1 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x4f448dbd nf_register_hooks +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f7ef3c4 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x4f8194f6 proto_unregister +EXPORT_SYMBOL vmlinux 0x4f8888b3 block_commit_write +EXPORT_SYMBOL vmlinux 0x4fa02c98 input_close_device +EXPORT_SYMBOL vmlinux 0x4fb01ade call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x4fc84c90 netif_rx +EXPORT_SYMBOL vmlinux 0x4fcdefff blk_peek_request +EXPORT_SYMBOL vmlinux 0x4fd96ea1 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4ffe79c1 ilookup +EXPORT_SYMBOL vmlinux 0x5013c611 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x502dd74d xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x50405b06 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x5044a040 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x505a9239 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x505bb58e journal_update_format +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506bb98d bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x50866716 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x50b5cb2d idr_get_new_above +EXPORT_SYMBOL vmlinux 0x50c610d3 cdev_alloc +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x510de4d1 security_path_unlink +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x511f9230 alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x514ce354 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x517fa1ef scsi_remove_host +EXPORT_SYMBOL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51f41a7b kfree_skb +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x52165f42 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x5232f908 blk_rq_init +EXPORT_SYMBOL vmlinux 0x524f4a0c dev_set_mtu +EXPORT_SYMBOL vmlinux 0x5252f304 __memcpy_toio +EXPORT_SYMBOL vmlinux 0x525b7da7 tcp_check_req +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527f6186 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x5281f478 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x529c2129 mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52c185b4 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x52d5564d rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x530a641a i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x530da75d pci_get_slot +EXPORT_SYMBOL vmlinux 0x531347eb ppp_input +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x53264641 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x533f1d27 md_register_thread +EXPORT_SYMBOL vmlinux 0x535ed247 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x5393dcb5 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x5396c3ef tty_port_init +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53fd045a pcim_iounmap +EXPORT_SYMBOL vmlinux 0x540ff5df iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x5499d396 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x549c3cb3 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54b21796 dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0x54b74b39 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x55113583 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x552c9d55 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x5531234c thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x5535dff1 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x554099fc clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x554f0a48 groups_alloc +EXPORT_SYMBOL vmlinux 0x5553872c console_stop +EXPORT_SYMBOL vmlinux 0x5586005d get_sb_bdev +EXPORT_SYMBOL vmlinux 0x558e2e79 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x5592161b tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55aa23ef scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x55b2cef2 open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x55bb2604 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x55e133ee bdev_read_only +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x56164644 skb_copy +EXPORT_SYMBOL vmlinux 0x562599fc drop_super +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x56383341 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x5661ba33 dquot_acquire +EXPORT_SYMBOL vmlinux 0x5661ed64 clear_inode +EXPORT_SYMBOL vmlinux 0x5687e4c6 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x56954da1 tcf_register_action +EXPORT_SYMBOL vmlinux 0x56b133b4 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x56bb9fd2 pci_save_state +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d8de46 bio_map_user +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x572a64c1 ip6_route_output +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57345947 bio_free +EXPORT_SYMBOL vmlinux 0x575257e0 register_cdrom +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x5762fa1b vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x577c626c pipe_lock +EXPORT_SYMBOL vmlinux 0x57adf756 per_cpu__this_cpu_off +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57bcca48 journal_init_dev +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57ffde8c skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x5815f6b1 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x582636ef jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x5837e574 vmap +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x583c99f6 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x584a7119 nla_append +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x585dc23a cdev_del +EXPORT_SYMBOL vmlinux 0x586ecf19 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x589748b1 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x58a0eb92 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x58bcb5cb ether_setup +EXPORT_SYMBOL vmlinux 0x58d0ec96 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x5900ff8f agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x591d67a3 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x594cde62 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x5955de59 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59c7ad42 spi_schedule_dv_device +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59e70283 tcp_child_process +EXPORT_SYMBOL vmlinux 0x59e7e922 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x5a2191ac i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x5a26e9f8 pnp_is_active +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a57d155 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x5a5b137e nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a6252cf dm_table_event +EXPORT_SYMBOL vmlinux 0x5a71bd9b pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a91ebf0 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x5aa9cbe9 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x5ab1efb9 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x5abc9f87 __scm_destroy +EXPORT_SYMBOL vmlinux 0x5ac2a911 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5ad461f9 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x5adecb22 write_cache_pages +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b5a2a32 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x5b5c36ed scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x5b6a326c fb_set_suspend +EXPORT_SYMBOL vmlinux 0x5bae2eac acpi_extract_package +EXPORT_SYMBOL vmlinux 0x5bb80a00 generic_writepages +EXPORT_SYMBOL vmlinux 0x5bbda4e4 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x5bbfafb9 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x5be2936c genphy_resume +EXPORT_SYMBOL vmlinux 0x5c26421c acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x5c2f7baa i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x5c5b2d12 per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0x5c72df8f tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x5c8670d3 scsi_add_device +EXPORT_SYMBOL vmlinux 0x5cb5e848 pci_choose_state +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5cc93a4f unregister_key_type +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d55a821 vfs_writev +EXPORT_SYMBOL vmlinux 0x5d5823f4 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x5d61bddb eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5da60073 __kill_fasync +EXPORT_SYMBOL vmlinux 0x5daef1fe revert_creds +EXPORT_SYMBOL vmlinux 0x5dde7598 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x5e04efbb nf_ct_attach +EXPORT_SYMBOL vmlinux 0x5e21f413 kobject_get +EXPORT_SYMBOL vmlinux 0x5e2463a2 proc_create_data +EXPORT_SYMBOL vmlinux 0x5e4307a0 kobject_add +EXPORT_SYMBOL vmlinux 0x5e4bdf6c blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x5e7fd4c0 simple_sync_file +EXPORT_SYMBOL vmlinux 0x5e83610d qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ef3e9cb generic_show_options +EXPORT_SYMBOL vmlinux 0x5f1c7d3c arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x5f2bca91 fd_install +EXPORT_SYMBOL vmlinux 0x5f2c3735 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x5f56db66 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x5f5cc954 tty_throttle +EXPORT_SYMBOL vmlinux 0x5f6b5c5d d_move +EXPORT_SYMBOL vmlinux 0x5f7457b1 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x5f799af0 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x5fb82a3e console_start +EXPORT_SYMBOL vmlinux 0x5fc1ab48 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x5fce596e vfs_readdir +EXPORT_SYMBOL vmlinux 0x5fd49593 invalidate_partition +EXPORT_SYMBOL vmlinux 0x5fd7b790 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x6003902d path_put +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x6040242a swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x60766a22 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60e38137 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x60e8192d xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x60ec13c4 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x60eeb930 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x6103c4c7 per_cpu__irq_stat +EXPORT_SYMBOL vmlinux 0x611c280d inode_change_ok +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x614c21e1 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x617604c4 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x61761b7f get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x6177d1a1 netdev_features_change +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61cad767 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x61caff8f inet_stream_connect +EXPORT_SYMBOL vmlinux 0x61db9e05 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x61f32905 mdiobus_free +EXPORT_SYMBOL vmlinux 0x62036ee5 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x62277d38 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x62451b04 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x6255abff dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x62574617 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62748e70 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x6286f298 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x62899b6a tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x629919d0 vga_get +EXPORT_SYMBOL vmlinux 0x629cfaab i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x62a53ec2 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x62acb68b bio_pair_release +EXPORT_SYMBOL vmlinux 0x62ba4b14 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x62c7cd75 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x62e8422f block_invalidatepage +EXPORT_SYMBOL vmlinux 0x62f04c83 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x6307fc98 del_timer +EXPORT_SYMBOL vmlinux 0x631ecc14 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x634875cd register_qdisc +EXPORT_SYMBOL vmlinux 0x634c69b9 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x63572393 dquot_drop +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x6379e6dd __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x63906414 devm_iounmap +EXPORT_SYMBOL vmlinux 0x6396a98c task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x63a9ddd5 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63fc232f strlen_user +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x6419a998 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x642e54ac __wake_up +EXPORT_SYMBOL vmlinux 0x6466a1e6 mempool_alloc +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64d2519d udp_disconnect +EXPORT_SYMBOL vmlinux 0x64ddd2e4 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x65040d3f icmpv6_send +EXPORT_SYMBOL vmlinux 0x650fb346 add_wait_queue +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65279fb4 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x652877e7 i2c_release_client +EXPORT_SYMBOL vmlinux 0x653723ed __bio_clone +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x657b11d8 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x65889d72 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x658fe830 mdiobus_read +EXPORT_SYMBOL vmlinux 0x6597c30a __put_cred +EXPORT_SYMBOL vmlinux 0x65a4f9be skb_find_text +EXPORT_SYMBOL vmlinux 0x65dd9d00 elv_rb_del +EXPORT_SYMBOL vmlinux 0x65e3b554 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x66020665 ip_route_input +EXPORT_SYMBOL vmlinux 0x660f508e __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x66511c68 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x666b9a13 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x666c1a9f fb_pan_display +EXPORT_SYMBOL vmlinux 0x6676dbd5 dentry_unhash +EXPORT_SYMBOL vmlinux 0x668058fc i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x669b79a5 kthread_create +EXPORT_SYMBOL vmlinux 0x66aad8d5 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x66ed4d95 set_blocksize +EXPORT_SYMBOL vmlinux 0x66faca88 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x6726f377 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x673f815e agp_bridges +EXPORT_SYMBOL vmlinux 0x6740ec3d __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x67590269 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x677905ee vfs_mknod +EXPORT_SYMBOL vmlinux 0x67916d0e cfb_copyarea +EXPORT_SYMBOL vmlinux 0x67985855 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x67a5a28b lease_get_mtime +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67e47159 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x67ebacf6 ipv4_specific +EXPORT_SYMBOL vmlinux 0x681ff4be sk_stop_timer +EXPORT_SYMBOL vmlinux 0x683835a4 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x68432bf0 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x684b200d page_put_link +EXPORT_SYMBOL vmlinux 0x68556e33 register_con_driver +EXPORT_SYMBOL vmlinux 0x68785aad nla_put +EXPORT_SYMBOL vmlinux 0x688e1c64 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x68a24a67 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x68a4c30f genphy_config_advert +EXPORT_SYMBOL vmlinux 0x68b22f0d __bread +EXPORT_SYMBOL vmlinux 0x68b566c7 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x6907d4e9 idr_for_each +EXPORT_SYMBOL vmlinux 0x6928828c agp_flush_chipset +EXPORT_SYMBOL vmlinux 0x694ed30d d_prune_aliases +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69b5a983 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69d3621f dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69deefbd register_framebuffer +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69ff3e69 genl_register_ops +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a31f2bf unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a477cf5 start_tty +EXPORT_SYMBOL vmlinux 0x6a5f98a0 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a89f054 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x6a9f26c9 init_timer_key +EXPORT_SYMBOL vmlinux 0x6ac35fb1 sk_run_filter +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad14b4b cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6ae32125 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x6af296ae jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x6b01b6e7 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b792d31 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x6b91eb15 ndisc_build_skb +EXPORT_SYMBOL vmlinux 0x6b948863 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x6b99b53a __alloc_skb +EXPORT_SYMBOL vmlinux 0x6b9b88f3 sleep_on +EXPORT_SYMBOL vmlinux 0x6bb155a5 put_tty_driver +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bf48745 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x6c09230f __napi_schedule +EXPORT_SYMBOL vmlinux 0x6c166a14 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x6c25bfea xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x6c341a2b mmc_resume_host +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c7a13b2 kernel_read +EXPORT_SYMBOL vmlinux 0x6c8b8872 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x6c9c3f0d swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x6cac123e sock_no_accept +EXPORT_SYMBOL vmlinux 0x6caf7d96 inet_ioctl +EXPORT_SYMBOL vmlinux 0x6cca9981 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x6ce02d36 dst_release +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d0e3039 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x6d132bf0 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d334118 __get_user_8 +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d3de10b tty_register_device +EXPORT_SYMBOL vmlinux 0x6d5ad323 __nla_put +EXPORT_SYMBOL vmlinux 0x6d669328 skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d861138 mpage_readpages +EXPORT_SYMBOL vmlinux 0x6d9e4b13 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x6dc0c24b complete_and_exit +EXPORT_SYMBOL vmlinux 0x6dc9a132 security_path_truncate +EXPORT_SYMBOL vmlinux 0x6dcaeb88 per_cpu__kernel_stack +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df4cfba journal_start +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e1b6866 spi_attach_transport +EXPORT_SYMBOL vmlinux 0x6e20a374 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x6e688525 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x6e6d11d8 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e7f8839 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb0fdf3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x6ebcd97f vfs_rmdir +EXPORT_SYMBOL vmlinux 0x6ebd3200 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x6f37e658 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f70070a scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x6fa53b2e generic_file_open +EXPORT_SYMBOL vmlinux 0x6fca5238 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fde0293 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0x6fe127a3 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x6feab351 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6ff6a9dd register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x700936f7 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x70168f51 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x701b2a44 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x704438f1 mpage_writepage +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x70574ed6 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x7065b411 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x706a3c5f slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x70765d1c vfs_lstat +EXPORT_SYMBOL vmlinux 0x707990ed blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x70900ca9 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x7096e7a0 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70e0d61f cpu_all_bits +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x712aa29b _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x71356fba remove_wait_queue +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x718e45b4 dump_trace +EXPORT_SYMBOL vmlinux 0x71946341 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x719b0236 simple_readpage +EXPORT_SYMBOL vmlinux 0x71a13afd phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0x71a43334 pci_dev_get +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71ab356f dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x71b013f3 pci_find_bus +EXPORT_SYMBOL vmlinux 0x71b9ea29 bdget_disk +EXPORT_SYMBOL vmlinux 0x71bb41e4 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x71d2a65b tty_mutex +EXPORT_SYMBOL vmlinux 0x71d95e02 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x71f6eb38 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x7209736e abort_creds +EXPORT_SYMBOL vmlinux 0x723e177d inet_frag_kill +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x728e4a4a sync_inode +EXPORT_SYMBOL vmlinux 0x729335e4 pci_restore_state +EXPORT_SYMBOL vmlinux 0x7294c53c filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x72a27332 ilookup5 +EXPORT_SYMBOL vmlinux 0x72ab49da kill_anon_super +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72b57deb dquot_destroy +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x731c08cc kernel_accept +EXPORT_SYMBOL vmlinux 0x731fc263 init_net +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x735da84a acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0x736d0d9e gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x73745f28 seq_bitmap +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x7393c70b dquot_commit +EXPORT_SYMBOL vmlinux 0x739ee22d gen_pool_add +EXPORT_SYMBOL vmlinux 0x73a07012 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x73d47708 inet_frags_init +EXPORT_SYMBOL vmlinux 0x73d8d669 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x741f6cd7 arp_broken_ops +EXPORT_SYMBOL vmlinux 0x742dc105 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74880518 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x748caf40 down +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x749e6468 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x74acf1a5 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d3757b rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x74d5c77c blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x74e5651e scsi_print_sense +EXPORT_SYMBOL vmlinux 0x74e8fd3c block_write_begin +EXPORT_SYMBOL vmlinux 0x74ee6ec8 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x74fd826c dma_ops +EXPORT_SYMBOL vmlinux 0x75094a4a tcf_action_exec +EXPORT_SYMBOL vmlinux 0x750c6157 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x751306ec seq_release_private +EXPORT_SYMBOL vmlinux 0x7538b132 agp_off +EXPORT_SYMBOL vmlinux 0x75518f8b pci_find_capability +EXPORT_SYMBOL vmlinux 0x75676dc2 dquot_free_space +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c17747 journal_restart +EXPORT_SYMBOL vmlinux 0x75c62cd0 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x75df62c3 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x75f3f23f jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b2ef2 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x760c2983 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x764d4b38 wireless_send_event +EXPORT_SYMBOL vmlinux 0x767b1c50 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x767dd8fd acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76e404ae cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x76f3eaea blk_init_tags +EXPORT_SYMBOL vmlinux 0x76f3f8a5 num_k8_northbridges +EXPORT_SYMBOL vmlinux 0x7718ff21 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x771fd03d sock_setsockopt +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x77582aa5 md_integrity_register +EXPORT_SYMBOL vmlinux 0x77632af3 unregister_snap_client +EXPORT_SYMBOL vmlinux 0x776bb0d1 per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0x776c5939 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x77719d70 ps2_command +EXPORT_SYMBOL vmlinux 0x77a108df _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f53abc acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fc753d xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x782acba5 crc_t10dif +EXPORT_SYMBOL vmlinux 0x785148a3 idr_destroy +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x78764f4e pv_irq_ops +EXPORT_SYMBOL vmlinux 0x78a484c9 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78e7f96a scsi_block_requests +EXPORT_SYMBOL vmlinux 0x78f0e3ab bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x7913784b genphy_update_link +EXPORT_SYMBOL vmlinux 0x795b7b6a free_buffer_head +EXPORT_SYMBOL vmlinux 0x795e135e blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x796db5c2 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x797840fe put_mnt_ns +EXPORT_SYMBOL vmlinux 0x79859c55 fb_blank +EXPORT_SYMBOL vmlinux 0x798ee852 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79aa8a00 sk_dst_check +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79ae3ffb tty_devnum +EXPORT_SYMBOL vmlinux 0x79ecd235 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x79f63da5 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x79f82ed1 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x7a2a4ad5 prepare_creds +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a3d06d9 do_splice_to +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a61a6da skb_append +EXPORT_SYMBOL vmlinux 0x7a73e5c5 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x7a848702 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x7a9559b0 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x7acd6809 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x7adc4059 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7ae7ac52 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7aede056 simple_empty +EXPORT_SYMBOL vmlinux 0x7b0197b8 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x7b05f2cb call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b15aa47 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b675f89 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x7b6ce00f pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7ba30eaf inet_add_protocol +EXPORT_SYMBOL vmlinux 0x7bc31490 bd_release +EXPORT_SYMBOL vmlinux 0x7bf9b4aa md_error +EXPORT_SYMBOL vmlinux 0x7bfe315e dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c117eb2 phy_disconnect +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c7401ec d_add_ci +EXPORT_SYMBOL vmlinux 0x7c76ecf7 tcf_em_register +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9084fd mmc_register_driver +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cb320e6 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x7cf522c4 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d299237 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x7d3bc7d2 nobh_write_end +EXPORT_SYMBOL vmlinux 0x7d6bb587 cpu_online_mask +EXPORT_SYMBOL vmlinux 0x7d77e4d8 have_submounts +EXPORT_SYMBOL vmlinux 0x7d9462ca serio_close +EXPORT_SYMBOL vmlinux 0x7d94f746 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x7d9e0daa agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x7daf7486 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd554fc unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x7deb52e3 audit_log_format +EXPORT_SYMBOL vmlinux 0x7e1c0f16 bdi_destroy +EXPORT_SYMBOL vmlinux 0x7e418e92 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x7e524b1a scsi_dma_map +EXPORT_SYMBOL vmlinux 0x7e561da6 dev_get_stats +EXPORT_SYMBOL vmlinux 0x7e71a483 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7ea650ad pagevec_lookup +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7ed09b36 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x7ee01bc6 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x7ee91c1d _spin_trylock +EXPORT_SYMBOL vmlinux 0x7f14c0b7 lookup_bdev +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f43c9c1 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x7f4f4ae0 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x7f5ca7be sg_miter_stop +EXPORT_SYMBOL vmlinux 0x7f76d751 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x7f94c243 lro_flush_all +EXPORT_SYMBOL vmlinux 0x7f9c19fe tty_unthrottle +EXPORT_SYMBOL vmlinux 0x7fc93890 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x7ff6ae43 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x8040ed30 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x805e75bb dev_mc_add +EXPORT_SYMBOL vmlinux 0x808476b3 simple_rmdir +EXPORT_SYMBOL vmlinux 0x80a33392 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x80c81df3 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x80ceb147 generic_getxattr +EXPORT_SYMBOL vmlinux 0x80d16f17 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x80d31286 vfs_create +EXPORT_SYMBOL vmlinux 0x80d5c5c0 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x80d5cff0 per_cpu__irq_regs +EXPORT_SYMBOL vmlinux 0x80e36042 skb_dma_map +EXPORT_SYMBOL vmlinux 0x80e89b81 d_rehash +EXPORT_SYMBOL vmlinux 0x8100fb01 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x811ff112 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x81390c59 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x81474d67 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x81571313 udp_proc_register +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x816022cf dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x8163dee5 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x81794662 elv_add_request +EXPORT_SYMBOL vmlinux 0x8181224b find_lock_page +EXPORT_SYMBOL vmlinux 0x819486bf sock_recvmsg +EXPORT_SYMBOL vmlinux 0x81971b6e __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x81a10ce7 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x81a2d9f3 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x81aa82f7 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x81bb0ab4 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x81c0ab1f skb_push +EXPORT_SYMBOL vmlinux 0x81e28443 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820fc63c vfsmount_lock +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x821b54dc lock_may_write +EXPORT_SYMBOL vmlinux 0x82306178 inet_addr_type +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8260bc2b security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82d3e07d gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x830c4a30 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x830e547b ioremap_prot +EXPORT_SYMBOL vmlinux 0x8317e13f input_register_device +EXPORT_SYMBOL vmlinux 0x8317e20a completion_done +EXPORT_SYMBOL vmlinux 0x8318ee14 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x831b6472 seq_lseek +EXPORT_SYMBOL vmlinux 0x834a1470 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x83620d49 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x836e8d00 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x838cdaa7 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a75417 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83c46141 mmc_request_done +EXPORT_SYMBOL vmlinux 0x83cd0118 set_pages_wb +EXPORT_SYMBOL vmlinux 0x83e70e14 dqput +EXPORT_SYMBOL vmlinux 0x83f44492 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x84105ed4 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x84762838 bdi_init +EXPORT_SYMBOL vmlinux 0x847b9601 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x84895a1e eth_header_cache +EXPORT_SYMBOL vmlinux 0x848fdb20 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x84ae440c serio_reconnect +EXPORT_SYMBOL vmlinux 0x84b49c1b input_grab_device +EXPORT_SYMBOL vmlinux 0x84c3f9f8 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x84cc3632 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x851ae06c ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x85351942 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x853614ca redraw_screen +EXPORT_SYMBOL vmlinux 0x854c71f8 filp_open +EXPORT_SYMBOL vmlinux 0x855f7ca9 register_netdevice +EXPORT_SYMBOL vmlinux 0x8563508a follow_down +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x857d8b5c pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x857dc29a md_check_recovery +EXPORT_SYMBOL vmlinux 0x85948d66 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85d994f6 deactivate_super +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85ed74ea fasync_helper +EXPORT_SYMBOL vmlinux 0x85f87e07 dm_put_device +EXPORT_SYMBOL vmlinux 0x85f9d7f1 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x8635dbf3 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x86436841 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x864e1a32 spi_dv_device +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x8683867e phy_attach_direct +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86c7146d vfs_fstat +EXPORT_SYMBOL vmlinux 0x86d3535c ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x86d3ec8f input_inject_event +EXPORT_SYMBOL vmlinux 0x86f60ba3 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x87139591 mapping_tagged +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x8725b236 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x8733e9a3 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x87521827 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x8752df26 skb_make_writable +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x878add06 unlock_super +EXPORT_SYMBOL vmlinux 0x878e4c40 vm_insert_page +EXPORT_SYMBOL vmlinux 0x879117bd try_to_release_page +EXPORT_SYMBOL vmlinux 0x879a1cc7 generic_listxattr +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87d7de27 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x87e95f00 input_set_keycode +EXPORT_SYMBOL vmlinux 0x87f21f11 key_revoke +EXPORT_SYMBOL vmlinux 0x87f5c937 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x87f7ed0d __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x8802563e d_obtain_alias +EXPORT_SYMBOL vmlinux 0x8802b9ad bio_sector_offset +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x884545af swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x88512d34 make_bad_inode +EXPORT_SYMBOL vmlinux 0x885cf6b6 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x885dd267 dev_load +EXPORT_SYMBOL vmlinux 0x8866ddf8 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x889da329 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x88d1c5c3 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x88d4ee74 ps2_drain +EXPORT_SYMBOL vmlinux 0x88e07584 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x88f465c3 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x88fc880a vfs_quota_off +EXPORT_SYMBOL vmlinux 0x88fdf70b pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x898c2251 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x89949018 down_timeout +EXPORT_SYMBOL vmlinux 0x89ad1ba4 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x89b4bf77 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x8a01519c vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3eabf0 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a7fe4a4 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aaf61aa pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x8abbdb5b __devm_request_region +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8b03eaaa sock_kfree_s +EXPORT_SYMBOL vmlinux 0x8b04d453 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x8b0f3e82 ip_defrag +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b371110 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x8b3ceb73 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x8b40ad13 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b6d3c39 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x8b7b1c29 blkdev_get +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b86950d skb_store_bits +EXPORT_SYMBOL vmlinux 0x8b888e0a inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x8b922c0f __strnlen_user +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8ba1a1f9 block_write_end +EXPORT_SYMBOL vmlinux 0x8bacdd06 register_nls +EXPORT_SYMBOL vmlinux 0x8bc005af mnt_unpin +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bdc8a7a netif_receive_skb +EXPORT_SYMBOL vmlinux 0x8be3314a elv_abort_queue +EXPORT_SYMBOL vmlinux 0x8beb8e16 alloc_file +EXPORT_SYMBOL vmlinux 0x8bface0f inode_add_bytes +EXPORT_SYMBOL vmlinux 0x8c08e059 kernel_bind +EXPORT_SYMBOL vmlinux 0x8c183a8a pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c34c53f qdisc_reset +EXPORT_SYMBOL vmlinux 0x8c3610a2 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x8c41f72b __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c59bd58 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x8c65230d acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x8c8b3424 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x8c9ac94b register_md_personality +EXPORT_SYMBOL vmlinux 0x8caff4a1 mmc_host_enable +EXPORT_SYMBOL vmlinux 0x8cbb2bd7 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cef1ad5 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x8cfd4255 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x8cff7c15 thaw_bdev +EXPORT_SYMBOL vmlinux 0x8d1a735e fsync_bdev +EXPORT_SYMBOL vmlinux 0x8d36a168 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d3c580a blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d6906d4 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x8d72c0d5 dm_io +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8db37ad7 skb_checksum +EXPORT_SYMBOL vmlinux 0x8dca832f __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0637ba i8253_lock +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e0cf7c5 __register_binfmt +EXPORT_SYMBOL vmlinux 0x8e2f7654 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x8e3c545c sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e549d3e unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x8e5deaa7 journal_get_create_access +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8ec1a23c override_creds +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8eeb4de3 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x8f12f8ea __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x8f228096 pci_map_rom +EXPORT_SYMBOL vmlinux 0x8f230b80 pci_pme_active +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f28ff91 qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x8f33d8ef locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x8f378b90 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f6eb53f igrab +EXPORT_SYMBOL vmlinux 0x8f786b32 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x8f7c545f ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x8f824f02 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8fa841be journal_create +EXPORT_SYMBOL vmlinux 0x8fc37be0 lock_super +EXPORT_SYMBOL vmlinux 0x8fe545dc dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x8fe8601e pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x8fe86767 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x8fe8ad1a rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x8ff08052 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x90260fc8 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x9070c78b iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x908435df inet6_release +EXPORT_SYMBOL vmlinux 0x90937727 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x9098195d pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90ac7412 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x90b010ae tcp_shutdown +EXPORT_SYMBOL vmlinux 0x90bb5170 key_task_permission +EXPORT_SYMBOL vmlinux 0x90c59e1a tc_classify +EXPORT_SYMBOL vmlinux 0x90d47e04 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x90f0c233 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x90fb097b security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x910812bd tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x913f6109 kill_fasync +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x914e7971 key_unlink +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x9162bf00 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x916a076f follow_pfn +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x919676d5 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x91aeedbd km_query +EXPORT_SYMBOL vmlinux 0x91fa5dd9 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x9200deb3 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x9217348a serial8250_register_port +EXPORT_SYMBOL vmlinux 0x921a92e1 block_sync_page +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x924916fd input_flush_device +EXPORT_SYMBOL vmlinux 0x926b65c5 netpoll_poll +EXPORT_SYMBOL vmlinux 0x9270547d simple_fsync +EXPORT_SYMBOL vmlinux 0x92797f1a send_sig_info +EXPORT_SYMBOL vmlinux 0x927e989f gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x92b5bfd0 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x92c7920e blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x93095fee iget_failed +EXPORT_SYMBOL vmlinux 0x9341119b current_fs_time +EXPORT_SYMBOL vmlinux 0x9348beba mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x935c5881 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x9385667d down_read_trylock +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93acb59d simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93c792b9 generic_permission +EXPORT_SYMBOL vmlinux 0x93cbd1ec _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x93ff59ad do_sync_write +EXPORT_SYMBOL vmlinux 0x942eabd1 inet_accept +EXPORT_SYMBOL vmlinux 0x94361e05 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x9439e825 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x943e868f ida_get_new +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x944de2ae jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x945bc6a7 copy_from_user +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x949ffd8e ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x94c00e62 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x94eb1e77 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x94f66943 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x950737fc napi_frags_skb +EXPORT_SYMBOL vmlinux 0x95352ea9 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x953e4106 inode_setattr +EXPORT_SYMBOL vmlinux 0x953fbb6b dma_pool_create +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x95482d5c __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x955dd6f5 touch_atime +EXPORT_SYMBOL vmlinux 0x9570b00d pci_do_scan_bus +EXPORT_SYMBOL vmlinux 0x9575b45d acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x95b1083d fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x95c3997b open_by_devnum +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95d918ed neigh_event_ns +EXPORT_SYMBOL vmlinux 0x95e0a369 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x961c4988 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x9629486a per_cpu__cpu_number +EXPORT_SYMBOL vmlinux 0x96476765 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x9669e50e mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x96af8109 netif_napi_add +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96ec1850 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x9709a889 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x972e0a5f dev_disable_lro +EXPORT_SYMBOL vmlinux 0x973873ab _spin_lock +EXPORT_SYMBOL vmlinux 0x9748bc58 ll_rw_block +EXPORT_SYMBOL vmlinux 0x974f867d del_gendisk +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x978f18a2 phy_detach +EXPORT_SYMBOL vmlinux 0x97acb59b i2c_register_driver +EXPORT_SYMBOL vmlinux 0x97c93177 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x97cd1727 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97e5930f llc_sap_find +EXPORT_SYMBOL vmlinux 0x97ed042b pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x97f43eb8 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x9808cf73 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x9815597e path_lookup +EXPORT_SYMBOL vmlinux 0x984fd7f7 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x989865db dm_table_get +EXPORT_SYMBOL vmlinux 0x98abcf82 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x98ae5650 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x98ba3b81 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x98d94dd4 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x98fa0611 unregister_nls +EXPORT_SYMBOL vmlinux 0x992a3e4e pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x996643fb jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x996c5ef6 __getblk +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99b0a88e dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99f95e68 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a37efd1 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x9a462957 dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0x9a55e708 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x9a9985be percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9af1b3e0 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x9af7172e register_filesystem +EXPORT_SYMBOL vmlinux 0x9b221362 block_read_full_page +EXPORT_SYMBOL vmlinux 0x9b30410d blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b388f0b try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x9b3ccc64 dev_trans_start +EXPORT_SYMBOL vmlinux 0x9b592a58 vc_resize +EXPORT_SYMBOL vmlinux 0x9b7e5904 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x9b882706 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x9b941789 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bcf86c8 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x9bdbcf4d pagecache_write_end +EXPORT_SYMBOL vmlinux 0x9beecd88 generic_fillattr +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c20e18f ip_dev_find +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c5268c5 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9caf02ed put_io_context +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cbee6cd pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x9ccb2622 finish_wait +EXPORT_SYMBOL vmlinux 0x9ced38aa down_trylock +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d108b61 xrlim_allow +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3a77a1 aio_put_req +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d57531d pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x9d59fb4a tty_port_close +EXPORT_SYMBOL vmlinux 0x9d7a3c77 init_task +EXPORT_SYMBOL vmlinux 0x9d85c068 commit_creds +EXPORT_SYMBOL vmlinux 0x9d87770d d_lookup +EXPORT_SYMBOL vmlinux 0x9d911609 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x9d957ea8 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x9da764e1 mdiobus_write +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e877f94 page_readlink +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ea28ec7 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x9eb1a26e input_set_capability +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f0d6caa neigh_seq_next +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f243ece security_inode_readlink +EXPORT_SYMBOL vmlinux 0x9f255c53 install_exec_creds +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f4c2bc5 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x9f59a16e dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x9f6f6ee7 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x9f92efc4 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa274b4 dq_data_lock +EXPORT_SYMBOL vmlinux 0x9fb97cea ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xa00124a7 uart_update_timeout +EXPORT_SYMBOL vmlinux 0xa00a4a7a kmem_cache_free +EXPORT_SYMBOL vmlinux 0xa00a61ff may_umount +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa039b466 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xa041382d kernel_sendpage +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07a8d34 datagram_poll +EXPORT_SYMBOL vmlinux 0xa07f2e1f ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xa08c0410 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0xa0a4ac21 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b0e609 journal_revoke +EXPORT_SYMBOL vmlinux 0xa0b3d04a key_negate_and_link +EXPORT_SYMBOL vmlinux 0xa0b6af21 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xa0b8b0d6 simple_link +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0d96963 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xa0e098a4 phy_stop +EXPORT_SYMBOL vmlinux 0xa0f3f5fb xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa1107952 bdget +EXPORT_SYMBOL vmlinux 0xa11644de vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xa1170356 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa12f23bc inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa13d7f38 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xa13f47cd pci_get_subsys +EXPORT_SYMBOL vmlinux 0xa16d7889 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0xa1710706 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa1ee360a netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xa2047dc8 elv_rb_find +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa20cf43a sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xa21a38db fb_get_mode +EXPORT_SYMBOL vmlinux 0xa2649e8f xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xa2805be1 dev_addr_add +EXPORT_SYMBOL vmlinux 0xa28d14bd mmc_alloc_host +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a1e5c9 _write_lock_bh +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b8a2ba __init_rwsem +EXPORT_SYMBOL vmlinux 0xa2bb9e65 alloc_disk_node +EXPORT_SYMBOL vmlinux 0xa2bcdbdc udplite_prot +EXPORT_SYMBOL vmlinux 0xa2cdaf27 __brelse +EXPORT_SYMBOL vmlinux 0xa300c7e0 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0xa31e5762 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xa31f172d __copy_from_user_inatomic +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3826aeb udp_prot +EXPORT_SYMBOL vmlinux 0xa39ab218 napi_skb_finish +EXPORT_SYMBOL vmlinux 0xa3a5be95 memmove +EXPORT_SYMBOL vmlinux 0xa3b06834 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xa3b1a54d security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3cc6ef3 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xa3df9560 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xa3ed12d5 inet_getname +EXPORT_SYMBOL vmlinux 0xa3fc059a ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xa401f37b xfrm_state_add +EXPORT_SYMBOL vmlinux 0xa40d8154 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0xa415b384 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xa42e8d2f block_fsync +EXPORT_SYMBOL vmlinux 0xa445c0eb simple_transaction_release +EXPORT_SYMBOL vmlinux 0xa44ad274 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xa4565bd2 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xa492c62b scsi_free_command +EXPORT_SYMBOL vmlinux 0xa49dbdd7 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xa4a99aef vfs_statfs +EXPORT_SYMBOL vmlinux 0xa4b30946 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4c86dc9 skb_recycle_check +EXPORT_SYMBOL vmlinux 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL vmlinux 0xa4e1daf8 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xa510da20 blk_start_request +EXPORT_SYMBOL vmlinux 0xa54786c9 nlmsg_notify +EXPORT_SYMBOL vmlinux 0xa56de4dc bh_submit_read +EXPORT_SYMBOL vmlinux 0xa56f1315 mempool_free +EXPORT_SYMBOL vmlinux 0xa57aed6e find_or_create_page +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa5922bb1 kfifo_init +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5adbe8c ida_destroy +EXPORT_SYMBOL vmlinux 0xa5b06e96 __secpath_destroy +EXPORT_SYMBOL vmlinux 0xa5b5240f compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0xa5f7a75b jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xa60ac1d8 pci_target_state +EXPORT_SYMBOL vmlinux 0xa61055ce dma_find_channel +EXPORT_SYMBOL vmlinux 0xa6157aed I_BDEV +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa64eab99 vfs_readlink +EXPORT_SYMBOL vmlinux 0xa663b4a4 do_sync_read +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa68743da ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xa69c66ec xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0xa6c24332 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa70913e8 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa72066ff dcache_dir_open +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa72f9ade per_cpu__current_task +EXPORT_SYMBOL vmlinux 0xa77002b7 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xa771213c lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xa77525bb vfs_getattr +EXPORT_SYMBOL vmlinux 0xa7bcb079 proc_mkdir +EXPORT_SYMBOL vmlinux 0xa7c8f18b dma_set_mask +EXPORT_SYMBOL vmlinux 0xa7db1b6c pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xa7e2db50 flush_signals +EXPORT_SYMBOL vmlinux 0xa7e6e461 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0xa7f6b854 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xa8063a34 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0xa80fb5b5 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xa8262f53 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xa8379442 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa8920539 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0xa8961ae4 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8e3f6e3 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xa8f1f441 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xa8fbf582 idr_replace +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa902719a ip_ct_attach +EXPORT_SYMBOL vmlinux 0xa91a440c lookup_hash +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa91c5162 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xa93a9eea skb_split +EXPORT_SYMBOL vmlinux 0xa9882e14 __kfree_skb +EXPORT_SYMBOL vmlinux 0xa9bd2676 __vmalloc +EXPORT_SYMBOL vmlinux 0xa9d20ba7 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0xa9e0fb29 sock_init_data +EXPORT_SYMBOL vmlinux 0xa9fcf31d wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xaa302b2a do_splice_from +EXPORT_SYMBOL vmlinux 0xaa63d2e1 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0xaa84a8ae acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0xaa8b1330 new_inode +EXPORT_SYMBOL vmlinux 0xaab06af8 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xaabf142a __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xaacda319 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0xaad268a5 file_fsync +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafba571 ppp_register_channel +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab42e46b user_revoke +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab86c436 pci_set_mwi +EXPORT_SYMBOL vmlinux 0xab8f2c02 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0xab9ef6d6 input_register_handler +EXPORT_SYMBOL vmlinux 0xaba27983 hippi_type_trans +EXPORT_SYMBOL vmlinux 0xaba97015 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb83d08 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xabb9f4d4 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabe3f06b seq_open_private +EXPORT_SYMBOL vmlinux 0xabe7c43a __serio_register_driver +EXPORT_SYMBOL vmlinux 0xabe85a21 idr_init +EXPORT_SYMBOL vmlinux 0xabf73372 agp_free_page_array +EXPORT_SYMBOL vmlinux 0xabfc4088 bdput +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6794a7 seq_write +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac6b036f unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xac7853d0 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0xacaa4e91 sock_release +EXPORT_SYMBOL vmlinux 0xacc20d04 consume_skb +EXPORT_SYMBOL vmlinux 0xacca11a1 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacf565ba load_nls +EXPORT_SYMBOL vmlinux 0xacfdcf12 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad061d29 netlink_unicast +EXPORT_SYMBOL vmlinux 0xad07434f give_up_console +EXPORT_SYMBOL vmlinux 0xad0d0619 acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad25fb12 __memcpy +EXPORT_SYMBOL vmlinux 0xad2afe31 vga_tryget +EXPORT_SYMBOL vmlinux 0xad49c702 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0xad7570c8 bdi_unregister +EXPORT_SYMBOL vmlinux 0xad8de1b3 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0xad8e97f7 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadad3394 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xadefe95f kernel_connect +EXPORT_SYMBOL vmlinux 0xadf710cf acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0xae11a17b __find_get_block +EXPORT_SYMBOL vmlinux 0xae155bc8 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xae21ae6b single_release +EXPORT_SYMBOL vmlinux 0xae2aedb9 netlink_broadcast +EXPORT_SYMBOL vmlinux 0xae5ab2f1 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xae5ac311 seq_release +EXPORT_SYMBOL vmlinux 0xae6d6178 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0xaec06d63 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaedcf9f8 inet_stream_ops +EXPORT_SYMBOL vmlinux 0xaedde1cf scsi_execute_req +EXPORT_SYMBOL vmlinux 0xaeecf911 nonseekable_open +EXPORT_SYMBOL vmlinux 0xaef0f4f1 pci_select_bars +EXPORT_SYMBOL vmlinux 0xaefddf21 agp_put_bridge +EXPORT_SYMBOL vmlinux 0xaf04ff94 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf6e5e61 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xaf7906d6 blk_init_queue +EXPORT_SYMBOL vmlinux 0xaf9ed901 agp_find_bridge +EXPORT_SYMBOL vmlinux 0xafbec06e dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xafef437f skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0xafef8fa9 register_memory_notifier +EXPORT_SYMBOL vmlinux 0xb00d7dfa skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb011206f __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xb0209357 request_firmware +EXPORT_SYMBOL vmlinux 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL vmlinux 0xb051909f ida_init +EXPORT_SYMBOL vmlinux 0xb0529305 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb07b0f8a mmc_host_disable +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb0b18c56 register_key_type +EXPORT_SYMBOL vmlinux 0xb0b5d23c mmc_card_awake +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c6cd86 skb_queue_purge +EXPORT_SYMBOL vmlinux 0xb0cf558d read_dev_sector +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0fbfb61 unregister_console +EXPORT_SYMBOL vmlinux 0xb10dac9a aio_complete +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb12f1311 bdi_register +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb16bffa3 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb1928a05 __rta_fill +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a06041 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0xb1aac218 vfs_rename +EXPORT_SYMBOL vmlinux 0xb1beea51 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1da31ea netpoll_send_udp +EXPORT_SYMBOL vmlinux 0xb1ea2eca input_filter_device +EXPORT_SYMBOL vmlinux 0xb1f1d6e5 get_user_pages +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb20ecf88 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb21f071a jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb23240ec dst_alloc +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb279da12 pv_lock_ops +EXPORT_SYMBOL vmlinux 0xb2a321aa agp_create_memory +EXPORT_SYMBOL vmlinux 0xb2bb86b8 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xb2e34c97 lease_modify +EXPORT_SYMBOL vmlinux 0xb2e55898 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xb2f059a1 napi_gro_frags +EXPORT_SYMBOL vmlinux 0xb2f53985 scsi_init_io +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb312eb46 sock_no_bind +EXPORT_SYMBOL vmlinux 0xb3205415 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb3401123 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xb343222e iget5_locked +EXPORT_SYMBOL vmlinux 0xb34c4791 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb374a6cc bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xb3874c09 journal_dirty_data +EXPORT_SYMBOL vmlinux 0xb38b5292 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3c42c94 per_cpu__x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xb3c7589e jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xb3cdd5af mb_cache_shrink +EXPORT_SYMBOL vmlinux 0xb3d2a08b tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xb3e0a0cb tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb40a9271 dqget +EXPORT_SYMBOL vmlinux 0xb41bc081 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4279ab7 downgrade_write +EXPORT_SYMBOL vmlinux 0xb42c6c61 file_permission +EXPORT_SYMBOL vmlinux 0xb43534ed sock_create +EXPORT_SYMBOL vmlinux 0xb4380903 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb44b5dec remove_proc_entry +EXPORT_SYMBOL vmlinux 0xb44f53bb inet6_ioctl +EXPORT_SYMBOL vmlinux 0xb45b24f6 k8_nb_ids +EXPORT_SYMBOL vmlinux 0xb46477d7 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xb469b8a1 sk_common_release +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4870848 pci_enable_wake +EXPORT_SYMBOL vmlinux 0xb4aed2d8 find_inode_number +EXPORT_SYMBOL vmlinux 0xb4b0ee4e down_read +EXPORT_SYMBOL vmlinux 0xb4ca9447 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb4cd1bfd bd_claim +EXPORT_SYMBOL vmlinux 0xb4d36f81 km_state_expired +EXPORT_SYMBOL vmlinux 0xb4daf5e3 con_is_bound +EXPORT_SYMBOL vmlinux 0xb4dc9d95 check_disk_size_change +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb5159b4a __scsi_add_device +EXPORT_SYMBOL vmlinux 0xb523aa10 vfs_unlink +EXPORT_SYMBOL vmlinux 0xb523ecaa seq_printf +EXPORT_SYMBOL vmlinux 0xb52f18ec pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xb541dab3 d_splice_alias +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb563c405 __napi_complete +EXPORT_SYMBOL vmlinux 0xb57d1ce3 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xb5804861 nobh_write_begin +EXPORT_SYMBOL vmlinux 0xb5879532 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0xb5986c77 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0xb5a12392 spi_display_xfer_agreement +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb5da6794 skb_under_panic +EXPORT_SYMBOL vmlinux 0xb5ece21e __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xb5f28b5f __any_online_cpu +EXPORT_SYMBOL vmlinux 0xb601def0 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb6353555 per_cpu__x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0xb6556261 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb683cbca flush_old_exec +EXPORT_SYMBOL vmlinux 0xb6994a91 journal_clear_err +EXPORT_SYMBOL vmlinux 0xb69e33db pipe_to_file +EXPORT_SYMBOL vmlinux 0xb6a3b0e4 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xb6a3dd7c llc_sap_close +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c489b7 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6cbe886 acpi_get_node +EXPORT_SYMBOL vmlinux 0xb6e227aa rtc_lock +EXPORT_SYMBOL vmlinux 0xb7114cd6 napi_gro_flush +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb75d8fcc scsi_is_host_device +EXPORT_SYMBOL vmlinux 0xb7694780 pci_get_class +EXPORT_SYMBOL vmlinux 0xb7734fd6 blk_end_request +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7dd0700 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0xb7e150e5 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0xb7f0c6be free_task +EXPORT_SYMBOL vmlinux 0xb7f6b17c inet_register_protosw +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb84b0db5 journal_force_commit +EXPORT_SYMBOL vmlinux 0xb84ef909 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xb864d79c security_file_permission +EXPORT_SYMBOL vmlinux 0xb86d5f8e set_binfmt +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8b1094d tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xb8bc7fce inet_put_port +EXPORT_SYMBOL vmlinux 0xb8c42908 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xb8c606a7 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xb8d66c93 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0xb8e0d489 __register_chrdev +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb8e80845 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0xb8fabbc9 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0xb90f78a0 devm_ioport_map +EXPORT_SYMBOL vmlinux 0xb9112b2d d_find_alias +EXPORT_SYMBOL vmlinux 0xb9335db3 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xb9458190 posix_lock_file +EXPORT_SYMBOL vmlinux 0xb9879171 journal_stop +EXPORT_SYMBOL vmlinux 0xb989c12e tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9a54500 rfkill_unregister +EXPORT_SYMBOL vmlinux 0xb9d499c3 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba0afdad fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xba18330a wait_on_page_bit +EXPORT_SYMBOL vmlinux 0xba2c9b49 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba809f26 iput +EXPORT_SYMBOL vmlinux 0xbaa10b52 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xbaa1a746 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbaca1c48 sg_miter_start +EXPORT_SYMBOL vmlinux 0xbad0b7cd jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xbad60ff0 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xbadb4216 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb2c871b netif_device_attach +EXPORT_SYMBOL vmlinux 0xbb53e8a1 uart_resume_port +EXPORT_SYMBOL vmlinux 0xbb567420 md_done_sync +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb6a125f journal_start_commit +EXPORT_SYMBOL vmlinux 0xbb6f9ee6 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xbb89946d names_cachep +EXPORT_SYMBOL vmlinux 0xbb982aa9 do_truncate +EXPORT_SYMBOL vmlinux 0xbb99068b inet6_del_protocol +EXPORT_SYMBOL vmlinux 0xbba38c39 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xbbba2039 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xbbc0f8c2 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xbbd18d94 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xbbdbfefa neigh_connected_output +EXPORT_SYMBOL vmlinux 0xbbe0aefc dmam_free_coherent +EXPORT_SYMBOL vmlinux 0xbbe26fb7 pci_dev_put +EXPORT_SYMBOL vmlinux 0xbc03ce97 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0xbc4d8363 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xbc7be682 pcim_enable_device +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbccbb49c idr_remove_all +EXPORT_SYMBOL vmlinux 0xbcd1c5d3 get_phy_device +EXPORT_SYMBOL vmlinux 0xbcea121b scsi_ioctl +EXPORT_SYMBOL vmlinux 0xbcfdbbfe pv_cpu_ops +EXPORT_SYMBOL vmlinux 0xbd332df1 sock_create_kern +EXPORT_SYMBOL vmlinux 0xbd4560c6 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xbd668fe0 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0xbd71b957 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0xbdaf5b07 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0xbdb6b102 bioset_create +EXPORT_SYMBOL vmlinux 0xbdc5daf4 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xbddf11c9 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0xbdf35957 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbdfabd57 dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0xbdfadd1e ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xbe0ff4e0 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xbe1cc4c5 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xbe4646f5 simple_release_fs +EXPORT_SYMBOL vmlinux 0xbe499d81 copy_to_user +EXPORT_SYMBOL vmlinux 0xbe6b17f7 textsearch_prepare +EXPORT_SYMBOL vmlinux 0xbe8bd16d generic_block_bmap +EXPORT_SYMBOL vmlinux 0xbebdf9ce arp_send +EXPORT_SYMBOL vmlinux 0xbec3d7f0 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xbecdce74 ida_pre_get +EXPORT_SYMBOL vmlinux 0xbed7552b pnp_start_dev +EXPORT_SYMBOL vmlinux 0xbedfd1a5 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf330e2b scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xbf5e355a tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0xbf638af3 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xbf6688fc disk_stack_limits +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8ce7a2 boot_cpu_data +EXPORT_SYMBOL vmlinux 0xbf96a8f0 bio_unmap_user +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbf9e766f bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xbfa91d7f __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfd746dd inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xbff1d626 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0xbfffc6c8 dput +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc011ec72 textsearch_register +EXPORT_SYMBOL vmlinux 0xc02536a8 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xc02536db pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xc0318b01 free_netdev +EXPORT_SYMBOL vmlinux 0xc04124c4 init_special_inode +EXPORT_SYMBOL vmlinux 0xc0460acf get_super +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc05ef80e cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xc07d43ae acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0b45a92 dev_addr_del +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc1037d96 input_open_device +EXPORT_SYMBOL vmlinux 0xc10eab7b blk_queue_bounce +EXPORT_SYMBOL vmlinux 0xc11a9c09 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xc12abb08 filp_close +EXPORT_SYMBOL vmlinux 0xc1333b4c phy_device_free +EXPORT_SYMBOL vmlinux 0xc1385da1 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0xc14612c8 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0xc172456b netif_device_detach +EXPORT_SYMBOL vmlinux 0xc185bcc9 ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0xc1a5e8dc redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xc1b4a47f blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xc1b6e488 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0xc1c849d3 inet_bind +EXPORT_SYMBOL vmlinux 0xc1d154e4 lro_receive_skb +EXPORT_SYMBOL vmlinux 0xc1d1d904 tcp_parse_options +EXPORT_SYMBOL vmlinux 0xc2013223 user_path_at +EXPORT_SYMBOL vmlinux 0xc22900bb register_gifconf +EXPORT_SYMBOL vmlinux 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0xc249959c ps2_end_command +EXPORT_SYMBOL vmlinux 0xc254af48 dcache_lock +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc262058e request_key +EXPORT_SYMBOL vmlinux 0xc2a13b41 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0xc2a35b4a init_buffer +EXPORT_SYMBOL vmlinux 0xc2b7e1ce register_snap_client +EXPORT_SYMBOL vmlinux 0xc2be9086 copy_io_context +EXPORT_SYMBOL vmlinux 0xc2ca1bae blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f1b238 skb_tx_hash +EXPORT_SYMBOL vmlinux 0xc3210f88 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xc328c50f dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xc337ad6c tty_hangup +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc353e26d log_start_commit +EXPORT_SYMBOL vmlinux 0xc3641edf scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xc3a27ca4 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3fd4f85 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc4090afc skb_queue_tail +EXPORT_SYMBOL vmlinux 0xc411f381 pci_match_id +EXPORT_SYMBOL vmlinux 0xc42f4f65 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0xc4413c75 get_sb_single +EXPORT_SYMBOL vmlinux 0xc447f8c1 neigh_update +EXPORT_SYMBOL vmlinux 0xc47630f0 key_put +EXPORT_SYMBOL vmlinux 0xc4829c43 generic_ro_fops +EXPORT_SYMBOL vmlinux 0xc4838c31 genphy_suspend +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4b5ad67 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xc4bf56c1 rtnl_create_link +EXPORT_SYMBOL vmlinux 0xc4cd99c3 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xc4d39686 mnt_pin +EXPORT_SYMBOL vmlinux 0xc4e9c01c cpu_active_mask +EXPORT_SYMBOL vmlinux 0xc4ebabee dquot_initialize +EXPORT_SYMBOL vmlinux 0xc4ec0036 sock_create_lite +EXPORT_SYMBOL vmlinux 0xc52ec429 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc53c882d idr_get_new +EXPORT_SYMBOL vmlinux 0xc54d576e pci_fixup_device +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc557f9e2 llc_sap_open +EXPORT_SYMBOL vmlinux 0xc558530d profile_pc +EXPORT_SYMBOL vmlinux 0xc55f7dc7 _write_trylock +EXPORT_SYMBOL vmlinux 0xc5844fb8 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0xc5aca629 input_event +EXPORT_SYMBOL vmlinux 0xc5ba5a05 uart_get_divisor +EXPORT_SYMBOL vmlinux 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0xc5ea1fa9 dev_close +EXPORT_SYMBOL vmlinux 0xc60619fc dev_mc_sync +EXPORT_SYMBOL vmlinux 0xc6085c3b scsi_finish_command +EXPORT_SYMBOL vmlinux 0xc646e72f hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0xc683fb61 journal_load +EXPORT_SYMBOL vmlinux 0xc6b6db3b input_unfilter_device +EXPORT_SYMBOL vmlinux 0xc6be6d24 serio_rescan +EXPORT_SYMBOL vmlinux 0xc701dde9 log_wait_commit +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72d6c75 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7aeabc8 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xc7b59c3c pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0xc7d8dacf agp_backend_release +EXPORT_SYMBOL vmlinux 0xc819f8ce pnp_possible_config +EXPORT_SYMBOL vmlinux 0xc8271c59 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xc82fc069 release_sock +EXPORT_SYMBOL vmlinux 0xc83c3850 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xc8405c99 node_data +EXPORT_SYMBOL vmlinux 0xc846e95a blk_sync_queue +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc89c699f alloc_fcdev +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8d17a65 thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xc8e8a083 __lock_buffer +EXPORT_SYMBOL vmlinux 0xc8ed1411 eth_header +EXPORT_SYMBOL vmlinux 0xc8f3bed1 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xc922dae2 ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0xc959c4b9 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xc962d592 blk_plug_device +EXPORT_SYMBOL vmlinux 0xc96d7ff2 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xc97d88af dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xc98f0bfe dquot_release +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9cf5a76 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0xc9d0e56a key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0xc9ec8704 udp_table +EXPORT_SYMBOL vmlinux 0xc9f564ef simple_unlink +EXPORT_SYMBOL vmlinux 0xca0308c6 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xca33514e key_validate +EXPORT_SYMBOL vmlinux 0xca3f5ce4 dma_supported +EXPORT_SYMBOL vmlinux 0xca45a11c poll_freewait +EXPORT_SYMBOL vmlinux 0xca4d023f tty_port_close_start +EXPORT_SYMBOL vmlinux 0xca513e75 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0xca590228 search_binary_handler +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca653ddf seq_read +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xca923e2c journal_extend +EXPORT_SYMBOL vmlinux 0xca99c79f kern_path +EXPORT_SYMBOL vmlinux 0xcaa3c6aa simple_lookup +EXPORT_SYMBOL vmlinux 0xcac589e0 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xcae8523f tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xcaf24253 inode_init_once +EXPORT_SYMBOL vmlinux 0xcb284aac xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xcb4f6cc0 __page_symlink +EXPORT_SYMBOL vmlinux 0xcb5ca75b sk_wait_data +EXPORT_SYMBOL vmlinux 0xcb625b1f pci_disable_device +EXPORT_SYMBOL vmlinux 0xcb67d850 serio_open +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcb80a6a2 simple_rename +EXPORT_SYMBOL vmlinux 0xcbb5fc7d rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xcbb9d7db groups_free +EXPORT_SYMBOL vmlinux 0xcbbf8b77 path_get +EXPORT_SYMBOL vmlinux 0xcbdfb2a4 tcp_ioctl +EXPORT_SYMBOL vmlinux 0xcbec37aa set_pages_nx +EXPORT_SYMBOL vmlinux 0xcbeedf57 pci_iomap +EXPORT_SYMBOL vmlinux 0xcc0499dd dquot_transfer +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc193922 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc305800 setup_arg_pages +EXPORT_SYMBOL vmlinux 0xcc34fa84 agp_bind_memory +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc3975d2 bio_clone +EXPORT_SYMBOL vmlinux 0xcc3f176f per_cpu__x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51ee50 dma_spin_lock +EXPORT_SYMBOL vmlinux 0xcc52d4e8 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0xcc66abf3 agp_enable +EXPORT_SYMBOL vmlinux 0xcc753d90 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc87d662 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xcc8b584d sk_alloc +EXPORT_SYMBOL vmlinux 0xcc9b3c59 dquot_free_inode +EXPORT_SYMBOL vmlinux 0xcca82a2e slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0xccbf7798 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xccc9f935 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0xccd596fa agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0xccd9a252 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0xcd3acb2f input_allocate_device +EXPORT_SYMBOL vmlinux 0xcd45fc24 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xcd639a63 fput +EXPORT_SYMBOL vmlinux 0xcddeb301 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xcdf2ffd2 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xce00c3e4 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xce1951a9 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce4297f7 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xce43a3c4 phy_connect +EXPORT_SYMBOL vmlinux 0xce4428cb mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce7994d5 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xcea5997b rtnl_notify +EXPORT_SYMBOL vmlinux 0xced89a16 file_update_time +EXPORT_SYMBOL vmlinux 0xcee0eed4 __sk_dst_check +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf37be5e filemap_flush +EXPORT_SYMBOL vmlinux 0xcf3eced4 pci_request_region +EXPORT_SYMBOL vmlinux 0xcf40b308 d_genocide +EXPORT_SYMBOL vmlinux 0xcf4c8eb5 mdiobus_register +EXPORT_SYMBOL vmlinux 0xcf66b3b1 __invalidate_device +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf79d40e copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xcfac2a0a icmp_send +EXPORT_SYMBOL vmlinux 0xcfadd723 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd00de69d __pci_register_driver +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd03636df blk_complete_request +EXPORT_SYMBOL vmlinux 0xd060b985 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xd07adf6e netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0992cfb km_policy_notify +EXPORT_SYMBOL vmlinux 0xd0aae5e2 dcache_dir_close +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL vmlinux 0xd12823f1 sock_wmalloc +EXPORT_SYMBOL vmlinux 0xd13e3830 destroy_EII_client +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd1763eee unlock_page +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd19bb294 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0xd19dbd92 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xd1b043a1 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xd1c98040 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0xd1f1a146 md_write_start +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd1f7e7a6 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xd1f91bcd dev_base_lock +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd25ff902 blk_register_region +EXPORT_SYMBOL vmlinux 0xd267d42c down_killable +EXPORT_SYMBOL vmlinux 0xd287bccd request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a2dcec vfs_read +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2ab4660 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xd2cd5859 elv_queue_empty +EXPORT_SYMBOL vmlinux 0xd2cf35d4 llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0xd30d1275 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0xd3141b80 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xd31c6703 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xd31d3a10 genphy_read_status +EXPORT_SYMBOL vmlinux 0xd33a3558 netif_napi_del +EXPORT_SYMBOL vmlinux 0xd34f0c62 gen_pool_create +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd399a098 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xd3a415a3 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0xd3a5f496 fb_class +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3b1d45d agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0xd3bbf1f6 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xd3c1f125 pci_bus_type +EXPORT_SYMBOL vmlinux 0xd3ca29e1 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xd3cca2b5 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xd3e97dbb mpage_writepages +EXPORT_SYMBOL vmlinux 0xd3f74cf1 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd4012ba0 lookup_one_len +EXPORT_SYMBOL vmlinux 0xd4056715 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0xd42b7232 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xd442180d dentry_open +EXPORT_SYMBOL vmlinux 0xd44d8473 pci_iounmap +EXPORT_SYMBOL vmlinux 0xd45ca134 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xd4a2aac0 fb_set_cmap +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd5241268 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd5484e45 vmtruncate +EXPORT_SYMBOL vmlinux 0xd556d891 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xd5739686 dquot_claim_space +EXPORT_SYMBOL vmlinux 0xd57c28f3 set_create_files_as +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5ab4b3c i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd5d4c7f3 mark_info_dirty +EXPORT_SYMBOL vmlinux 0xd5e904bc mb_cache_create +EXPORT_SYMBOL vmlinux 0xd60ce8ac scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0xd60cf763 mmc_remove_host +EXPORT_SYMBOL vmlinux 0xd60d7af4 ida_remove +EXPORT_SYMBOL vmlinux 0xd612a413 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xd6240a9b pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xd62bc363 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd68d07ad skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b03483 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f2832d napi_frags_finish +EXPORT_SYMBOL vmlinux 0xd6f7a26e tcp_poll +EXPORT_SYMBOL vmlinux 0xd74e5021 registered_fb +EXPORT_SYMBOL vmlinux 0xd76b9a5a pcim_iomap +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd77dec59 mmc_free_host +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a6fafa panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd7b8ea3a unregister_netdevice +EXPORT_SYMBOL vmlinux 0xd7d06220 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7ff8394 keyring_clear +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd851af78 up_write +EXPORT_SYMBOL vmlinux 0xd86f30ac dquot_scan_active +EXPORT_SYMBOL vmlinux 0xd87f28d3 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xd882300d tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xd88be65d clocksource_register +EXPORT_SYMBOL vmlinux 0xd89334d6 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0xd89c5d8f udp_proc_unregister +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a8343d dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xd8b25230 sock_map_fd +EXPORT_SYMBOL vmlinux 0xd8b55f8c dm_io_client_create +EXPORT_SYMBOL vmlinux 0xd8b89a0b thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0xd8bcbd0c delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0xd8c0daf9 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xd8d2863e input_unregister_device +EXPORT_SYMBOL vmlinux 0xd8dc42e6 sk_stream_error +EXPORT_SYMBOL vmlinux 0xd8e20085 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8e7b297 blk_start_queue +EXPORT_SYMBOL vmlinux 0xd8f23b5e brioctl_set +EXPORT_SYMBOL vmlinux 0xd8fda936 __elv_add_request +EXPORT_SYMBOL vmlinux 0xd8ffff21 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd917c158 per_cpu__node_number +EXPORT_SYMBOL vmlinux 0xd91a6044 register_8022_client +EXPORT_SYMBOL vmlinux 0xd92e3d96 set_irq_chip +EXPORT_SYMBOL vmlinux 0xd966d3b0 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xd968de5e wake_up_process +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd986cd7f agp_collect_device_status +EXPORT_SYMBOL vmlinux 0xd9a47484 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xd9b5f84a block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xd9c6441e revalidate_disk +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3e95de set_pages_array_uc +EXPORT_SYMBOL vmlinux 0xda4292b1 write_inode_now +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda5708c1 dquot_commit_info +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda928914 nmi_watchdog +EXPORT_SYMBOL vmlinux 0xdab50a1b swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0xdaf0908b skb_queue_head +EXPORT_SYMBOL vmlinux 0xdaf5dc1b dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xdb14249e notify_change +EXPORT_SYMBOL vmlinux 0xdb3807b3 elv_rb_add +EXPORT_SYMBOL vmlinux 0xdb4b2878 thaw_process +EXPORT_SYMBOL vmlinux 0xdb92467e bio_split +EXPORT_SYMBOL vmlinux 0xdb94240a jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xdba3acb4 ndisc_send_skb +EXPORT_SYMBOL vmlinux 0xdbb5ad5c node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbe139af bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xdbe7e490 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xdbea560d sg_miter_next +EXPORT_SYMBOL vmlinux 0xdbeacb78 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc07a4c9 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xdc0924f7 ip_fragment +EXPORT_SYMBOL vmlinux 0xdc11f761 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc446a5e pid_task +EXPORT_SYMBOL vmlinux 0xdc4be7ee tty_set_operations +EXPORT_SYMBOL vmlinux 0xdc5a813e acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0xdc873a70 screen_info +EXPORT_SYMBOL vmlinux 0xdc90f2ab pci_find_device +EXPORT_SYMBOL vmlinux 0xdc9bc234 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb67ad0 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0xdccadd21 skb_pad +EXPORT_SYMBOL vmlinux 0xdcd03ec1 secpath_dup +EXPORT_SYMBOL vmlinux 0xdce30c92 skb_seq_read +EXPORT_SYMBOL vmlinux 0xdd5bea18 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xdd6e1e33 dquot_alloc +EXPORT_SYMBOL vmlinux 0xdd91d4c0 serio_interrupt +EXPORT_SYMBOL vmlinux 0xdd924b58 dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0xdd961b28 dget_locked +EXPORT_SYMBOL vmlinux 0xdd9cf09f unregister_md_personality +EXPORT_SYMBOL vmlinux 0xddb1e6f1 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xddb92166 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xddc204f4 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xddd8e42a pskb_expand_head +EXPORT_SYMBOL vmlinux 0xde0bdcff memset +EXPORT_SYMBOL vmlinux 0xde16b546 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xde1814f9 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xde2a2461 acpi_device_hid +EXPORT_SYMBOL vmlinux 0xde4ab25f tcp_splice_read +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xde975513 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0xde9aa12f __inet6_hash +EXPORT_SYMBOL vmlinux 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0xdeb3261b md_write_end +EXPORT_SYMBOL vmlinux 0xdef05880 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xdef7958b vga_client_register +EXPORT_SYMBOL vmlinux 0xdf007423 register_sysrq_key +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf502221 bio_kmalloc +EXPORT_SYMBOL vmlinux 0xdf563aaf register_sysctl_table +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf7570d0 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfb7bada acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfdff17b seq_putc +EXPORT_SYMBOL vmlinux 0xe0296ab9 journal_flush +EXPORT_SYMBOL vmlinux 0xe0478d7d vm_map_ram +EXPORT_SYMBOL vmlinux 0xe04e947b dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0xe061ed2f neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xe06aeff1 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe096a17b scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0d403d6 generic_readlink +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe140b795 cdev_index +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe19a16a5 blk_free_tags +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1ae0f20 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xe1dd65d8 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xe1e910a2 skb_trim +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe23d7acb up_read +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe2700259 phy_connect_direct +EXPORT_SYMBOL vmlinux 0xe2933e02 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xe29b04e9 acpi_set_firmware_waking_vector64 +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e894a6 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xe2f22225 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xe317f064 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xe353feb8 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xe35d11da sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3b1c94c agp_bridge +EXPORT_SYMBOL vmlinux 0xe3bb2745 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0xe3d15315 tcp_connect +EXPORT_SYMBOL vmlinux 0xe3e9981d generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe43e135e scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xe456bd3a complete +EXPORT_SYMBOL vmlinux 0xe47f2482 get_empty_filp +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4870354 _read_trylock +EXPORT_SYMBOL vmlinux 0xe49b24b7 add_disk +EXPORT_SYMBOL vmlinux 0xe4a46fcc pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0xe4a58ba4 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0xe4add98e open_exec +EXPORT_SYMBOL vmlinux 0xe4b24b8c __next_cpu +EXPORT_SYMBOL vmlinux 0xe4c1df3e _read_lock_bh +EXPORT_SYMBOL vmlinux 0xe4c46679 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0xe4c5380d call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xe4cf9a7e pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xe4e4b282 generic_unplug_device +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe508c183 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0xe50ec0e9 rt6_lookup +EXPORT_SYMBOL vmlinux 0xe512b13d tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe52947e7 __phys_addr +EXPORT_SYMBOL vmlinux 0xe52ef77d __nla_reserve +EXPORT_SYMBOL vmlinux 0xe575cffc tty_name +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5e9dbef nf_log_register +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5ee6d82 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xe63c3a61 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xe63d8ca3 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xe64e568c blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xe65062f0 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0xe68dceea __f_setown +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6b9e10a bio_phys_segments +EXPORT_SYMBOL vmlinux 0xe6c46616 netlink_dump_start +EXPORT_SYMBOL vmlinux 0xe6d47709 journal_forget +EXPORT_SYMBOL vmlinux 0xe6e9ee6c scsi_unregister +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe72d9305 kill_pid +EXPORT_SYMBOL vmlinux 0xe786168c rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xe7917b84 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xe7a0a8f6 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xe7baeb1d acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xe7c8fac2 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d307aa block_write_full_page +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7e2d6c9 phy_device_register +EXPORT_SYMBOL vmlinux 0xe7f02625 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0xe7f79e93 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xe7fc8123 block_prepare_write +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe8116e08 __kmalloc_node +EXPORT_SYMBOL vmlinux 0xe826d58f alloc_pages_current +EXPORT_SYMBOL vmlinux 0xe85060c1 kobject_del +EXPORT_SYMBOL vmlinux 0xe85e8bc1 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe892d71e scsi_put_command +EXPORT_SYMBOL vmlinux 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL vmlinux 0xe8a67736 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xe8c08c61 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe94456df i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xe949cadf __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xe9683539 dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe9ec1209 make_EII_client +EXPORT_SYMBOL vmlinux 0xea042cf4 cfb_imageblit +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea241dd4 skb_insert +EXPORT_SYMBOL vmlinux 0xea3b748b dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0xea6dd50e journal_set_features +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xea9de9c4 scsi_target_resume +EXPORT_SYMBOL vmlinux 0xeab8449e dev_get_flags +EXPORT_SYMBOL vmlinux 0xeac094b1 blk_get_request +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeaf63b7b tty_shutdown +EXPORT_SYMBOL vmlinux 0xeb1fabf6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xeb2b3d98 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xeb37694e bd_set_size +EXPORT_SYMBOL vmlinux 0xeb446a11 ps2_init +EXPORT_SYMBOL vmlinux 0xeb64cf26 journal_ack_err +EXPORT_SYMBOL vmlinux 0xeb833b42 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeb9bdf04 pci_release_regions +EXPORT_SYMBOL vmlinux 0xebb053d3 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xebb394c2 kick_iocb +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebc8f256 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xec088802 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xec560e99 __ps2_command +EXPORT_SYMBOL vmlinux 0xec62b635 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xecab6802 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xecd4f024 inet6_bind +EXPORT_SYMBOL vmlinux 0xecde1418 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0xecded3fb page_symlink +EXPORT_SYMBOL vmlinux 0xed0aad6d tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xed3067ea d_alloc_root +EXPORT_SYMBOL vmlinux 0xed895b3f update_region +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xeda4c0b9 bio_integrity_free +EXPORT_SYMBOL vmlinux 0xedb40e38 input_register_handle +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedf9fcaf module_layout +EXPORT_SYMBOL vmlinux 0xedfca8ee tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0xedfd0e30 kernel_getsockname +EXPORT_SYMBOL vmlinux 0xee141733 i2c_use_client +EXPORT_SYMBOL vmlinux 0xee148d91 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3f9b25 sock_no_getname +EXPORT_SYMBOL vmlinux 0xee45e535 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xee7d1f28 audit_log_end +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee90da00 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeae3dca xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0xeef02ed7 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xef1090b3 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xef3da69d acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0xef458902 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef554890 eth_mac_addr +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef78cd82 unlock_rename +EXPORT_SYMBOL vmlinux 0xef99bc9d scsi_host_get +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xef9e55cb udp_ioctl +EXPORT_SYMBOL vmlinux 0xefaafb7e lro_receive_frags +EXPORT_SYMBOL vmlinux 0xefb96bcc __free_pages +EXPORT_SYMBOL vmlinux 0xefd522aa scsi_register +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xeff16439 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf0408743 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xf04ee821 ip_setsockopt +EXPORT_SYMBOL vmlinux 0xf062fe50 qdisc_list_del +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf06c814f fget +EXPORT_SYMBOL vmlinux 0xf0727bdc xfrm_init_state +EXPORT_SYMBOL vmlinux 0xf0afcb58 vfs_symlink +EXPORT_SYMBOL vmlinux 0xf0b5518e mdiobus_scan +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf106ecb3 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xf106f917 read_cache_page_async +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf10f165a simple_dir_operations +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf116d4b5 copy_in_user +EXPORT_SYMBOL vmlinux 0xf12621f7 sget +EXPORT_SYMBOL vmlinux 0xf12dd110 pci_clear_master +EXPORT_SYMBOL vmlinux 0xf13517ce __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf1835960 __mutex_init +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf19665d1 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xf1a000e6 default_llseek +EXPORT_SYMBOL vmlinux 0xf1b7e360 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xf1c5983d dev_gro_receive +EXPORT_SYMBOL vmlinux 0xf1d64416 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1fd1807 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf217020f submit_bh +EXPORT_SYMBOL vmlinux 0xf221b71e free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xf28a3304 phy_attach +EXPORT_SYMBOL vmlinux 0xf28dbcd8 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0xf2904fe2 tcp_proc_register +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2b2b8fd inet_release +EXPORT_SYMBOL vmlinux 0xf2dd9c3e tty_free_termios +EXPORT_SYMBOL vmlinux 0xf30636dd mark_page_accessed +EXPORT_SYMBOL vmlinux 0xf309ea05 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf32a9426 register_console +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf34d9cf1 __lock_page +EXPORT_SYMBOL vmlinux 0xf370d2d6 tcp_sendpage +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf4240c37 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4502fc5 take_over_console +EXPORT_SYMBOL vmlinux 0xf4528073 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0xf459b9cc balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xf4607155 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0xf47dd620 posix_acl_permission +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4c3ebbc pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xf4eae356 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xf4eeea77 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf501e883 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xf506874e generic_read_dir +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf527e171 sock_wfree +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf5be2f78 put_page +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f5b299 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xf61f3fb5 i2c_clients_command +EXPORT_SYMBOL vmlinux 0xf6223687 write_one_page +EXPORT_SYMBOL vmlinux 0xf6642bf1 simple_getattr +EXPORT_SYMBOL vmlinux 0xf666cbb3 __memcpy_fromio +EXPORT_SYMBOL vmlinux 0xf67a6595 i2c_del_driver +EXPORT_SYMBOL vmlinux 0xf684e636 unregister_8022_client +EXPORT_SYMBOL vmlinux 0xf6996858 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6f6213d xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xf6fb2b9c k8_northbridges +EXPORT_SYMBOL vmlinux 0xf73150cf ps2_begin_command +EXPORT_SYMBOL vmlinux 0xf737fbf5 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xf749534a gen_pool_free +EXPORT_SYMBOL vmlinux 0xf74a63b5 x86_mce_decode_callback +EXPORT_SYMBOL vmlinux 0xf7709a83 ip_getsockopt +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79a0f5e do_SAK +EXPORT_SYMBOL vmlinux 0xf79bb9cf nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xf7ca8d4d bio_alloc +EXPORT_SYMBOL vmlinux 0xf7e142fe cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xf7e26597 __pagevec_release +EXPORT_SYMBOL vmlinux 0xf7fcb4b1 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0xf7fdd61a napi_get_frags +EXPORT_SYMBOL vmlinux 0xf8066cdf read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0xf80c4f20 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf820e5d2 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xf829ffc8 dst_destroy +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf8341911 seq_puts +EXPORT_SYMBOL vmlinux 0xf85a848d kill_block_super +EXPORT_SYMBOL vmlinux 0xf867864a simple_transaction_set +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8ae57f8 security_path_link +EXPORT_SYMBOL vmlinux 0xf8af2d86 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xf8b30e93 mempool_create +EXPORT_SYMBOL vmlinux 0xf8cf9ee5 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xf98872bd ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0xf9899664 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xf996ad06 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b50079 kobject_put +EXPORT_SYMBOL vmlinux 0xf9c99659 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0xf9cb8962 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xf9f7e6f1 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xfa0564fc __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfa18cedc udp_poll +EXPORT_SYMBOL vmlinux 0xfa1d545c xfrm_state_update +EXPORT_SYMBOL vmlinux 0xfa299045 scsi_get_command +EXPORT_SYMBOL vmlinux 0xfa4475e1 sock_no_listen +EXPORT_SYMBOL vmlinux 0xfa544966 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xfa77572f get_write_access +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfaca791b seq_escape +EXPORT_SYMBOL vmlinux 0xfade665f pnp_device_attach +EXPORT_SYMBOL vmlinux 0xfae7bc57 dev_open +EXPORT_SYMBOL vmlinux 0xfaf6b235 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb2fad12 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xfb4eebce jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xfb65dd39 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfb6902b3 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb89aac4 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0xfba0c2e0 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xfbad7828 phy_register_fixup +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc04fc4e sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xfc20295d ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xfc27afd9 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xfc2da239 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc5b0b3c blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xfc6256b9 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfc6e3b78 tcp_close +EXPORT_SYMBOL vmlinux 0xfc9ec0b8 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc4d4e4 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcefd18a mem_section +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd13d929 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xfd1e47b4 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0xfd24ae6e pci_release_region +EXPORT_SYMBOL vmlinux 0xfd3486a1 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0xfd6f4850 native_wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdad0f00 dev_add_pack +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdbd38c4 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xfdceccc3 acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0xfdd0da4f mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xfde3ae39 dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0xfdf0f504 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe047ce6 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xfe195de8 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xfe1a6162 dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfe24c0e8 input_unregister_handler +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe2b8b22 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe69bffc set_groups +EXPORT_SYMBOL vmlinux 0xfe6e88f8 elevator_init +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe872dfc tty_vhangup +EXPORT_SYMBOL vmlinux 0xfe96c4ce pnp_get_resource +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfede01c7 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0xfee9bc01 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xfeeeb18b dev_get_by_flags +EXPORT_SYMBOL vmlinux 0xfef347d3 blk_end_request_all +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff52c232 d_invalidate +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6b2c2f generic_setxattr +EXPORT_SYMBOL vmlinux 0xff708fd3 mempool_destroy +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffb65794 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xffbc59b1 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xffc7c184 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xffcaf79b inet_select_addr +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xfffb8adb pci_set_dma_seg_boundary +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0x16836e04 speedstep_detect_processor +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0x2af90271 speedstep_get_frequency +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0xd494ee54 speedstep_get_freqs +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x058df8ed kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0920ad34 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094ac8f4 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0e64d5bd kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12d1b23b kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x16a7d5ec kvm_load_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x17c788a6 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a9df35f __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e4580bb kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2322e039 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x24f10771 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x29752d3e __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x299acd33 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2fda1070 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317c055d kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x327c0c1b emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x37d4ed45 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b7706d2 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x45cb5ac2 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x47afdcbd kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4a7cbe69 is_error_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4ac397c9 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4b894efa kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4e71d1e7 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x500ff23a kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x50481980 kvm_put_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x52775e0d kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x560813af kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5bb06198 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x605cbffb kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x621387f6 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x69897c8f kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6b4b6182 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6bc038e2 kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6e393887 kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x72c4a892 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x73ef6353 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7a2ba468 fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7d1b650d kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7eda06fc gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x85aee1e8 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x86d07efe kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e7f9b47 segment_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x984bbc70 is_error_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa0f3ae39 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa361bc65 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa7dd29c7 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaa2bca42 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaab13875 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaabf53a3 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xae2c2f8e kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb2a5b560 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb46438bd kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb548b6d8 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd377dc9 kvm_mmu_set_nonpresent_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd86163a kvm_handle_fault_on_reboot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd94103b kvm_mmu_set_base_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc3e442ab kvm_emulate_pio_string +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc6f69404 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb2bb2b2 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb34a4a2 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcc3917ff gfn_to_memslot_unaliased +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xce400988 emulator_write_emulated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcea5bf57 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcecafb6f kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd296def9 kvm_is_error_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd3c0a6da __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdd74592d kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdead7e81 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe2ae5098 kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe5d53aee kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xeacb2de1 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xec785360 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xed8c9068 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xef28082d kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf4414029 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf46d8388 kvm_emulate_pio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf5827c82 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xfecc267b kvm_report_emulation_failure +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xff0cee2c crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x750f7cf8 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xdbf72ec4 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xde55d148 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x7953e14e async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xa42b5b15 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x2fd504b2 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x7ad2cc39 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x9f9f77d9 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xb3523910 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xbccb5ab6 async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xd3fca047 async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x198d3243 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x1f401cc2 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x21bd0be3 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x874b5529 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x999bff59 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xbc5288b4 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xcb401a89 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x68da9166 twofish_setkey +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x0fbf8d51 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x459df113 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x5f1f8844 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb0d0734e btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xd93a743d btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xf3736631 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x010d8d61 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x032b3930 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x04ef3709 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x22a511c8 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x295c6aa9 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x29bf60ed tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2c46ea7c tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x318f155f tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x381f95a6 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x42c965be tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x44e8667b tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x47d51449 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x486a7342 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4909ef81 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4a6344fa tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4b44a7cd tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x51f23d70 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6b959e8d tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6fd776db tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x966985f5 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc0fe5baa tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd68a1b2d tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf6a9f938 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x1fbd89e2 tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0xfc968257 tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/dca/dca 0x0ccb465b dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2ebb035f unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x6a72ced2 dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0xc82b32d0 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xd33880dd dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0xddbf4f00 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xe616c173 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x70a6277a amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x018e722c edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x02c8c137 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x062f92f0 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0a33a3f6 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0ac1bc48 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x114b6f0d edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x183644ed edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x32d66211 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x36f8e0e6 edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5c542826 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6f11f8e2 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6fcb3ad8 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8845f0c6 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8ce600c0 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x92a249ef edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa15a3134 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa2b33490 edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa5c72b32 edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa8a9c2db edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xae02f77d edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb569a053 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc47e93c3 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc6b164f3 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc8341223 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0f0ba55e ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1823885a amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x4b01887d pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x7509830f to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x955c1f76 amd_decode_nb_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb98537cb rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xc2e765d2 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xd0f094a0 ext_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xe6ff7e0c ll_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xf8dec080 tt_msgs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xb8b4e3bf drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xc1f16166 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x10a2c906 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1c9248d6 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2cbd0026 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x30f8b991 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3752dd1e hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x551c6f5e hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6acc1bb9 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6d4f361c hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7b85aad7 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x804bc0e6 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8cb196ad hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8f2cae09 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x907e49a8 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x95abc0d9 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x97641ad5 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa3453429 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa70edf2c hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xac466302 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbaadf419 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xcb54079b hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd3d34f65 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd5f92d80 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdc958c79 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xeba745fb hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xec6c0fb6 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x2740ae8f usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xc0bc66ce hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xcd3286d9 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x136b2942 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xa1e28f6a lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xc5212f3c lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xcae0db4a lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xd198c865 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x75a37706 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x173ac276 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x95a2e683 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/infiniband/hw/ipath/ib_ipath 0x1514b2b2 ipath_debug +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xbbfd5c83 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0df375e3 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x19f60f57 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x227185ef wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x3fcf98b5 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x56fdd785 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x606ee97b wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x72cc0625 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7a713de1 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd9d533cd wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe288ade2 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xec7ea7b9 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf365982b wm9713_codec +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2c0979ce gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x3746ea13 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x392f3caa gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e5b4265 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x63184547 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x65c377a0 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6838b74e gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6f942acc gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x79e6ad13 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x85347e7e gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9c7e7954 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb57f2c48 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc9a8c3ec gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe5409f5c gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xf6b8faee gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xff2ddd5c gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x87400e7f led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xe1b7c35e led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xeb1d3441 led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xfd2270df led_classdev_resume +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x300cebfd ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcd407bb1 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdb76f88c ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x0a0d620b saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x14a8f5e3 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x3170c6fa saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x367fb512 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x4b6e7437 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5d5625f2 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x78c0fb58 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xaa7fcf78 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb0926d38 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd94e8821 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe2f9d6bb saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x02b06381 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4899c680 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4e8a6e49 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x527da9ea saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x5b8a681d saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x7391f800 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xaaaa34cf saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xdfd10451 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x4e105e31 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x9724e547 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x6c9b01ac tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xc6f5ed0d tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xeaafb738 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x1dcacee8 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x83c4b941 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x879b8c02 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x62f56f80 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xb98c47eb tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0xddd9659b simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x03871b6f sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1cb7aab4 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x27647f47 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4c499235 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5c79e409 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x611d88af smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x64d2b32f smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x740e6706 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x799d296f smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8993dec3 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xa27c77f2 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb515462f smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xce744b65 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd0d33d7b smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd35a04b2 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe0b74e9e smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe424a9db sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xea49a02c sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xee715cb4 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x06cce735 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x69f68c72 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xc3ed2aa6 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xd893a733 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xdc74ab7f ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe000b2ca ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe318ca04 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x118187b1 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x3acda7d5 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x50e6ec40 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x935a2418 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9e2629cd cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xa9f76b04 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xbeb07272 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xc76d9dc3 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xcb16a9bd cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xec67ab4e cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xecf1335d cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0xc0ab27a7 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x45238323 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x5227aec1 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x53563afd em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x8c5418b1 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xb7e5b4ae em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xf5bc1f16 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x0ba6c02d saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x52175c54 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x5dbca04c saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x7f7ebd0e saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xc0379827 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x30a01d5b v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x33553a07 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x625a40b7 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x732f4e17 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0xba7f342b v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x2d22e054 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x40f3af06 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x854b312a v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xe9899e3a v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x049227c9 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x07a11ad4 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1a4f0fbd __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1e3b7ba6 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x21e365b4 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x265822ec videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2ce9b1b8 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2e0a437d videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x30c32e54 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3f82194a videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x447cc7f4 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4e2e9ab7 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x5f21bdb6 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74723895 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7a5576b7 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x801f61e5 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x83ec5a12 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9018cee6 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa247f61c videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xada441f9 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb258523c videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc5e9b073 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdc72c1a1 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe0c80a5e videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xed4cb87c videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0b972e18 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0f36ad49 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x17d20dcb videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x3b18470f videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x4829eea7 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x537a45e9 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5931aaff videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5a16d621 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x933dfb43 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc7e6dd1e videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe75b76c8 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf04da62b videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf9639757 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x173f1d0e videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x23cc345d videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xfeb6a329 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x058a458c v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x55045888 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x5fe2a802 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x64e3e33c v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xbdc157e7 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xc8cf5420 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0d371681 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x158e9cbc i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x17c084c3 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x1d5bfe44 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x20220e36 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x497f0e67 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x5535d7f2 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc755b261 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x0019c9a9 mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x41e442b9 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5259475f mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x55afd13d mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x86cef259 mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xc532891c mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xdda368ba mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x79b4c656 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe81e333b pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x05d8c519 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x206206e7 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x2a228ac9 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x379ecd4d pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x3cbeee49 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4a6b2a8d pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4ce858fc pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5fe0e94f pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7e57cad0 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa8ffa26b pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe5b7e0eb pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x1cdb7e57 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x23722e5f pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x321001a0 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x41b69d0d pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x9a997415 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x01a42ef6 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x2bfb0971 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x3c93a11c sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x4eb83e53 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xc0c1d7d2 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x373feb27 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3e6fed95 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x51c77fe5 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6b96ab5e wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x701814d0 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x83486d9a wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x96786498 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa31488ad wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc5c4d0c0 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd8f55a60 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd9f49a00 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xefb0e7c6 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf6eadeea wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x15f2c4f0 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x38aecdc4 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x3c21dd82 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x46c4e4fc wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x512dfb75 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x576992fb wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x578b2107 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9de1c876 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xaba18630 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc33d3039 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd3b247ce wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd5e2d6ec wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd83a0e07 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xdffd3b74 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xe81d3047 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf0cf5f29 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x40274d7a wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x57bc070a wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x6128bc5a wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x840c053b wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x040346a9 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x279a1522 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xf15d8600 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xfff1e0e6 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x03e69bb3 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0f68ded9 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x1f2f1489 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x29cda097 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x5e787db4 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x788c9b53 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xb6143123 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x0656d16d sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xa95ff4c5 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xb047a98e sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc1b36fb5 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc3281bcb sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc997f9fb sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x3def07fa cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x4285ef0c cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x6b9f14af cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xbbb011fd cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xdd5c02f7 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x25538bba cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x3b4fe4ff cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x667b1c40 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xcabbdf4c DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x7dfdcb61 DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x2478d4b9 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0f4f8b4a mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1a024833 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1f218d2c mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x56039660 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6301c2f3 parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6a7bfa99 get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x74019900 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7494e1ad register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x75fd062c mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7ec9c3a2 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x86c78726 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa6bf273e add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc8e4b325 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xcf0be395 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdc490e08 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe10d132a get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xc10c903d register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xf80e5b3c add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfdb15ded del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfdbf87c0 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x3abb7cbc nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x5071b295 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x95d1d788 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc565ff6b nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe7a8a214 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x1d5034ab onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x1d7e91f4 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x18511383 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5e6fe872 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9df87b63 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9f41cbcb ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa3af0d8d ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xab26e3fe ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc2a7181e ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc445be67 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc70cfe2e ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdb7ec8c5 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf498f8fb ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf5f3940a ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x19b6140e free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1ffc1404 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x362ec24f alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x65aa9266 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa13f028a open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb79b2acf can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xbbda8899 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc9d7cfe0 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xda381587 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xfd25b00d can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x1f97d7b1 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x89d2f99a free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdb1cb531 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xee56de15 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0cf252a6 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x116b3a23 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1dfb5f8a mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x202c8e42 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x324748db mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3261e7c6 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3606fb0e mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3d3d75a8 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x41c11aa1 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4476fa35 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x46c3dad5 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x554484a4 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x588da9d7 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x58b3ffdc mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5ac5968a mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5b4782b9 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5fb4e686 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x62f7b193 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6421bb2e mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6676cff8 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6a214c51 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6c1168c4 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6cfdce89 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6fe3cefc mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x70314502 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x73458f8e mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x77d627f5 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x828bb4ee mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x895901c8 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8d0b95a2 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x924a0b12 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x92d65c5f mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x955fe6de mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa4bf5f9f mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa6782273 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa8c9df9a mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab951086 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab97a960 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb61567b6 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb8b24bb3 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbb52c0bd mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc18be36c mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc74e7656 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd6bd5b23 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdd857da0 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe16020e5 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe6dd5d46 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe9631c37 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe9b90e10 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf209c613 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf351f579 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf452db79 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf7ba294d mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x69caf166 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x76a738cb usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4319128e rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x43219e15 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4f784702 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x68168b2a rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x6cccadbb generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xdad3d042 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0b3eefb1 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0e642864 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x21297c73 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x33246ef3 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3fd815d3 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x40369b82 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x51023ef7 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6f0d4f0e usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ce322b8 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ffccee1 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x97f1edb3 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbf4446c2 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc30f733b usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc5286533 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc54241f8 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd209f6c5 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd84069ba usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdc3e72d7 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdf777212 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe0697dfe usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xefaf7688 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf151a1ed usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfd0b47be usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfed518b5 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00ea46a0 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x012ee05c i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x069ce730 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x14901273 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2f3c4704 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x56cc98ba i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5a12b5fa i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x66426fd2 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8e87b2bf i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xaf37086d i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb807d7f8 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd18a99ce i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf7aa494e i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xfddd043e libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x06929b39 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3ba8e2c8 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5240782d __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5565f421 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x67f16482 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x695dca30 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6e2e97a4 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7d9285ee lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa411cfc0 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb17c0763 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb5777122 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb8b78d19 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xeaecb2f5 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf9367f06 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfa8ec553 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x0942d048 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x16dc8c2c lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x240a386b lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3edbc5e0 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6d2093db lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x7e407da6 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd126a35c lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfa432413 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x9183b85d if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xa8e9b25c if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x137d1d38 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x1e21a52c p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x402527dd p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7218ee46 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9056f924 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xbc2572b1 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xd10d9de7 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf3b514e7 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf7d1b77b p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x24ae589b rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x341a2f27 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x386d2312 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x402ec92c rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x56b7a8ca rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f5b6b82 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f6307a1 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6d5811ba rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x70f54e43 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7b94e3ad rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7d0ff2b6 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x864aabc8 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8815b769 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8f8440bb rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x93f3c8ca rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9ea29050 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa363a063 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb4a05b7c rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb703671b rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb883c985 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbcc1f761 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xce06b685 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf4dfe773 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf9790082 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x076a43c6 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x93002d81 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x941c5e13 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xa44eb8ed rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbcf8ae24 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbd57edc8 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xcfc5934e rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xddd70c73 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf6968bd5 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x091265cf rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x170c0a4d rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1cbe6471 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2a4f26af rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x34a38b0e rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3dcae9c9 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x45d16f5d rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5673fc9d rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x61fef3a8 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x772624b8 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x8ec3de52 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x93fe16f1 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9a582d9d rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9c61edb8 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf4dc2279 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xfcadb988 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x34423a0b wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x388e707a wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x8c7b1c62 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x0f147aba acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x3a8937fb acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x2f20979f pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x871e8735 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x18981f40 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x362a69dc wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x4ce6f141 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x5bec364a wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x7dc126e5 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x846f49f8 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x6ef1f94b wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x50781c15 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00fc3290 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0233f349 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x03412f5e iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0aa6c603 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1401fa03 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x181dc7eb iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1af1d7e3 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1bbea3f2 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x218978d8 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x23581acd iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x28a732ac iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x297a4264 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x375b4981 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3e91d39d iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41ba1d14 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x43b612cf iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x49f8eadd iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4b1ea838 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x525b0f4e iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5368d3b2 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x53d90b8b iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5c3b5472 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x625e3f3f iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x65822ef6 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6b2a2212 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7304f5fc iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7620cc56 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7caf147e iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7d589794 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9ef589ad iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa1af0fa2 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa3e4d834 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb1bd31ad iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbc408d42 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcaffd20b iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcec27f25 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd11510f3 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd6be343f __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd88489af iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdf173404 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe52d4194 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfb5c72b5 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x061ceea5 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0d58789f iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1c73252b iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1f9ebee2 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x434e531c iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x52ce0316 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8af4f9c7 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x96c2fd44 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xadbbcbb8 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc77a191f iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdeca3ab8 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdf7cd71c iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe211eead iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe934c5e8 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf021d871 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xffc4253b iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0c7b07cd sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1b401d96 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1bb151d6 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x27e8a481 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2ed5350e sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x39ec8aff __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x42f521c2 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x43bd4b59 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6982959c sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7926d9ee sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9581982b sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9626c6c9 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9b308edf sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9cae671b sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa3a22082 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb33733e5 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb81337d1 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbe10279f sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xce0415c5 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd5f4b989 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe8228505 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xedf73b98 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfb504ef6 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x15728b8c srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x5de1a81a srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x7a54e574 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9a51a59c srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa3d3b197 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xf8edfa12 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x16a1f91e scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x2eb883cc scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x482d0c47 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x5f870f60 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x65e0bcaa scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x92b629bf scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9c7c19d3 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb33ffb29 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xe3475400 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x054f8b74 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0b8c61d8 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2da591ae iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2f19517a iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2f704ced iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3a41d367 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4fbdfb8b iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6c7fd4a7 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x77cc0aa2 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7a2ebbac iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7a6d1e30 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8a46a6df iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9757c497 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9ac98c4d iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb524840a iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcbd899f1 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe623bd8b iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf0a9bd57 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf2f7ec47 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf626c97d iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfa364ae2 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfc373a6b iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2bc93ecd srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x3fa7289c srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x6f206250 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb1f2506c srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf654ceb5 srp_rport_add +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x466cc29d spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4a96c561 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x655ced4a spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xc18d11a7 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xdb59fc02 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xff163e8b spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4740fc22 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4e4b42d1 comedi_free_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x656c3316 comedi_alloc_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x813c41b0 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xa940cf72 comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xb5725623 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc57fdaf4 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x86fcde20 das08_cs_boards +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xa8403a06 das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xbd5c7f77 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x10252a12 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xb2df656a labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x72d1ecfc ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x88e18c67 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x8de73efb ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xbc603c7b ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xcb918584 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xda8e3743 ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xe7bb07e7 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf63a1706 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x041a6990 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x0d030da6 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x75fe69d5 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x7a33e872 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xd0da81d3 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xe475d2e7 ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x0a1ee779 osd_WaitEventWait +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x4cc1b61c osd_WaitEventCreate +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x5432d87a osd_WaitEventSet +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x746d1786 osd_PageAlloc +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x83911c38 osd_PageFree +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0xa1b8d1ad osd_WaitEventWaitEx +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x09adb13c usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1edc7e95 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1f764eb6 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x3181fb72 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x3ba07cbe usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x5a713978 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x6521300b usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7d0df17c sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9d31817f usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9df45949 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xa8066df3 usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xbad58801 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd8adfb96 usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf41ebf29 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf99092d6 usbip_start_threads +EXPORT_SYMBOL_GPL drivers/uio/uio 0x7fbff4f2 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xaab7cd02 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0xdd75aa7e uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x2ee9b132 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x9e4c1e08 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x207b4c69 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2f5c125b usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x3479c9c1 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x462141a8 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x709019f6 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9895bc22 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb8cc7a02 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xd0f12b11 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xe39e5d35 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x036ee78a usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0ffea7b8 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2451d2b6 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3f398e35 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4372e8a3 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5469c628 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6174524e usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6eff1b0a usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x721f8d89 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x9973180f ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa3cb0960 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd47bff3d usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe3803de1 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf0a04a54 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xfbda7877 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x08e6bd13 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x13d1e0e2 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x141b526a usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1eec9a71 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2f3cbac6 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3559963a usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x41e24ec7 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4b099ac9 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x57e16579 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x58b9e99d usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x601834c0 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x62e1ffd9 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x64f887d4 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7d6101d5 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x822cebe3 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x82c64433 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x865ae128 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbfabe9fe usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc7e5d45d usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdaca1213 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe27535c5 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe29a714a usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf0046871 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x2d9bc240 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x41c8251d wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x4a6f65a6 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xe0597a4d __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xfb6f0266 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x221d73cc wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x276b4e5b wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2a4a12cc wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2e684639 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x31e8cbf0 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x38051fb8 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x498600e4 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x516ca9ea wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x59a7b691 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x8be661cd wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc395d9e0 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc56e0ad4 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc64ac49a wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xcad3b5a3 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdb4206db wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf2b2755c __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x1ec38ee5 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x4fa3fc9c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xea7f0e2a i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1d6ab147 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x3f60b0bb uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x58957fea uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x63eef89f uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x811a693d uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x8ada1319 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x9309d4a6 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xee2f6f61 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x113eb73a umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x3862039e umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xa9470df0 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb3c183b2 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xbe705fa5 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc458ba3a umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xde2af4c3 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xfd65029d umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x02e16a09 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x05f05757 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x128ae03e uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1d0f80a8 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1f5b3129 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x22dc0c80 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x235bb961 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2cb8fcbf uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3be6af41 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4445d150 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x449cac9b uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x469c5f2d uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5596a9f6 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58554226 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58eff876 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x63dce779 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x66a7fa13 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6bcd28f0 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6dd7d926 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7f1e50ca uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x85417e20 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x86182077 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x94ebdbe2 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x95e56d59 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9cbf319b uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa1603bfe uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xaa2bbc89 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb0a09251 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb29ee199 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb56d816f uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb94bcc7e uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbbb96d89 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbc96fded uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd15729f4 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf420eea1 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf89040fe uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xfa22f860 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x5408e067 whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1bd0ba38 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x26020e96 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x331f028f wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3459c71a wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3eb6bdbe wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x48264069 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4bbdbcbe wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4c56f4d5 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5ac970a3 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x63fe50a3 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x74b2cb67 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7587bd1f wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7a228099 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7fdab437 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x82ba0175 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x897398bc wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8ab0e2ed wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8c4ae332 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8d8f8b93 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa015dd8d wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xad8f92e8 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb0c77224 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbe888230 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc0283ee4 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc2a8add4 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xca1f1ff5 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xccc90bc4 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe6502840 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xefaed086 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf5e4764a wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf83de28a wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf94396b6 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x47194978 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x48896660 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x75a0d478 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x965c4ef1 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xb8daa854 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xca39db31 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xe71dbc03 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0xc7fd4933 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x6e04f31d fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x8f32f2c2 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x8ad14ae6 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xbd228acd sis_free_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/w1/wire 0x03d3d720 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x05f85617 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x1e04bf02 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x9db4ab79 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe63ddb0e w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xee7f1cce w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0xf19fb0d9 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xfbebaec5 w1_write_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x27dab7f9 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x56c22ad1 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x6b5892ed dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x4a92652e exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x6869afba exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x19df3d2d fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x1c2b51ba fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0x3949de69 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x3aa2141e fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x43ddffc9 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x4447d0b3 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x464e42d9 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x49ab924e fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0x7218317b fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x792e0021 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x7e05a007 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x86da8301 fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0x9e74a0e9 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0xbad6ef33 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xbc9fde18 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xbfa8b22c fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xdf23526d fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0xe6c15431 fat_sync_inode +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x01620192 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x2ca0f297 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x48e91760 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xd82a4457 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xfed63651 nlmclnt_init +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x0376174d nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x370e8d50 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x08dac197 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x10b5e79f o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x472fe45a o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x694f2db0 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x79e6316d o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xb8531f37 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xeee10928 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x15c8841d dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x30b01492 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3f8cc354 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x76a87989 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xb74e64cd dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xc3921f31 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x43348859 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x905d3da3 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x994a207f ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x15aa1401 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x4cc4b7b7 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0xd5435b12 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xdf5d40f3 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xfb1fe553 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0xfef48530 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/stp 0x0aa38868 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xc2f2bdb1 stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0x72abf9eb ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0xcf343ff9 bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x04e421e2 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x105ba97a dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x16a94e67 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x177fa0ca dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x17826b16 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1c796904 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3316f655 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3db90816 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ec51f96 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5f200175 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x63634133 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x648cdd77 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x68e9c35c dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70b1d967 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7f9d5237 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x90370e96 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x93913e6f dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x95ca924d dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x976788ba dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa4330539 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa841b91b dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa90e8607 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbc2d1284 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbd3e4a72 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbecd7326 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc352453a dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcb94ae69 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcbd13e24 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcd3d42d6 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcf43977f dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd01a12c7 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd22287fc dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe4961610 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf07d0f85 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf990d79d dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfd56190f dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x03e2ce46 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x153fda9a dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x35432fc1 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x69db306c dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9b880c1c dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xfe0a566f dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xe0cc7d8b nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x219af900 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x4a3a2999 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x521efad3 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x6334fc01 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x73ab4eef nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xbcc12d22 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xe87ca123 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x3b117d88 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x4673b9a9 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x6a0c48de tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xbd14c909 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcdfa5f27 tcp_vegas_init +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x3e4f2b0e ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xad3e0877 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x02fe692b nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x041013fd nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0ed4c615 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0ffe2fc7 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x15cbb5f0 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x22b18f41 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2bd4b7ad nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2e2b3990 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3c3ff797 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3ebd7280 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4186c002 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4281c02e nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x43acfac2 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4ecfdd97 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5640ded9 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x572b8f80 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x59318c46 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a265a7a nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5b5b2f91 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5d7df9ab __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5e5b4a41 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x620e5686 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a94738e nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b07eec4 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x73310307 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x773763b3 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7cf9bf15 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7dcfdde0 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7ebd9381 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8167479d nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x850523a8 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ad29008 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8dc0ac0c nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x957321bd nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x99207d2a nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa19aee2d print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa215b290 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaa7a30f9 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xae0f6178 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb1145224 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb234a7ca nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb297498a nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbc45d13a nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc772395f nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd0e199d1 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdb1d3c36 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbcce4b8 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdd7e42c9 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe16585c6 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe2c51876 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe40975d5 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7038b47 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7d60a44 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe9fd0b70 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef38e566 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef721507 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf9fe4ff0 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfaf0a779 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfbeca5c9 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd7e9388 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfe2d5c25 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xdfa109fa nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x1cfe0a36 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3913aefb set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x47385569 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x650b3f91 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x93825196 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcf4c2b17 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe3a90e5a get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe62fdc2e nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf7920c6d nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf9b70b00 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xfe395997 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x05bb9756 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x1998babe nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3b121259 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x53f0a72c nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xb1df76ed nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x2436cdb5 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xb3da17b9 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1cbfe3ca nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x24aa4668 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4766e999 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x62a1bc12 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69968714 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69972f05 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6eaf8457 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x8f7e7440 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x980a6c07 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xbaf4f496 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xbdb1fa14 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdb30313d ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x55339d24 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x3335b490 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x683a3400 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x2883e78c nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x31a1a3c7 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x944cdea9 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa1b7b9b4 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xee5101bf nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x189153a4 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x192c1159 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x19cad5a6 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x273e892d xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x28cfdb73 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x46d2c699 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x497f1140 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4c24f5b1 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f432b51 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x72465be4 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x736854d5 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7accdc1f xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb67e5511 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xba3d0f90 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xcb5779de xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd6d1f6aa xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xed3bde16 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc2429b63 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xfc852663 xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x01944013 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x0d68cb92 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x14ab243d rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x1e07dafb rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x30ae6c95 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3593a6b1 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x3909f067 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x3c099c66 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x42e7c85d rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x59b6b5e0 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x5cbedc21 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x5e141acb rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x6518ed74 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x885b03db rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x897ed897 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x8b8a8bdb rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x90c983c8 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x932ecf7a rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x9d2de78d rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xbe7ba4af rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xc2da8e38 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xd3006760 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xe14a236a rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xedbfef19 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x2df1446c rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xf677eb54 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1a7f95b4 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x367098c9 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8a6d8253 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x900d0b92 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x97d2a378 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc7295a54 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xdfbb39df gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe3379d47 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf643b956 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf7048913 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xfbc5a1e7 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x012f9e7c csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x01bdcf35 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x028b2c9c rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0493dfbe xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x064fd685 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b78ddd5 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ea6af41 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x10fb2e33 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1268b489 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x133d56d6 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x162f4c87 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x175d56b9 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x18f9cd36 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x194260d8 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x19a555db rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b0da2de svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1e96ec77 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f0ea5e1 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f59eae6 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2046ccac xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23dc7e22 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2588bae9 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2650f614 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x281aca02 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x29df3277 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b3bdd24 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2bb90536 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2cbbaad5 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2e674891 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x335448d7 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x364f0b9c xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x36a1f002 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3785a46f svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37917473 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38d86ecd svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d728bb3 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3e8344ed rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f75c2f3 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x435f44b7 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x441ba759 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45d2e6e8 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47306835 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4eef552f xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f2342fc rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f5ad8f9 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5028565b rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x51c7d104 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x521f81f5 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x52729404 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53e21499 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550547a3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550a89a9 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x571fbea1 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59b8f724 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ab32fb7 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5c469e89 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fa63647 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fe10c02 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6043a657 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6356ec29 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a0d8504 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a2c1384 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a4f6478 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a9e481f rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6cbd4667 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x707f8581 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73e55b5f xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x742c068e rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76e3c6bf sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7793710c rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x782e4c8c rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de86616 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8019572c xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80f7a659 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8626526a rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a1840a2 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a3f3782 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b71f69e unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c2a7e8e xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8ebb0781 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90d0ea0d svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x921ce38a xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x93d3743a svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x941ffa03 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9594acb5 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x95a9e4e4 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96f2e2b7 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9cb559d2 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0965217 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1894397 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa4b26340 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaa9399d5 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xabc4fabd auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac004a57 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xadff7b7a xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaee9f192 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafd37a10 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb387b246 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb58c712f svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdfb9b72 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6574a5c xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6e6639b rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc88fd896 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc95af866 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc96628bc rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc25d2dc xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd07fd42 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd5444d3 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce3f7f8e svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf4e936b xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd1203634 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd19af8c7 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5b0029f sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82c728e rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc4dd9e0 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde82a5c9 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe03ccbe5 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe0b2021e svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1c6144c svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe25bec18 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe26f1d47 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe38a4a8a rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe40ec383 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe44ccf1a rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe501b5b1 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6edc1da xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7ebca82 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe89ce2d1 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeaa8c1df xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xebeaa9b0 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedbdf049 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd1ba52 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee1d1244 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf47c43eb xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf7f16f5e xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf98f8d70 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9cc2763 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa8234e8 rpc_restart_call +EXPORT_SYMBOL_GPL net/wimax/wimax 0x38860368 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3957607e wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3c981fca wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x44547244 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x5f38dce4 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x6e495632 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa262ef2e wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc66fe36b wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc71dd468 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcc2e0b5e wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcd4aa5de wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcda189fd wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcdb0d665 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x02c7ad01 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x127c8ead cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x22b93af8 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2302a9d2 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2f0cbc6e cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x30b6e659 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x37aad21a cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3afd1d95 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3bf0c0ab cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3d297d3e cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4c602493 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6c1eb36a cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x80086f30 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c067a8c cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c3b8bf7 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8d3656c9 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x900db966 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x94a014f8 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x95a0b0b5 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9696d865 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x97508608 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa9c65e46 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb852f83e cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc6dade52 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcb34ff91 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdb073927 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdd8f165e cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdd943911 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe39e0a4e cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xea167af9 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfbeaa692 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfdd15faf cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x533eda12 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x6029bf31 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x75f7b6e3 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x84f2f291 ipcomp_init_state +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x03d78257 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x050bc5f4 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0792da4d snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0a3d8a62 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0aff74f0 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x11b89f04 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x134ba7a5 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x143d2196 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x147daffd snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x25f2eb0d snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b568699 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2cfc8410 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3234cee6 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x32c02fe8 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x37207eb6 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a683220 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3affbaa4 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3dad195e snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4317f02b snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4af29854 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c844c0b snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4f7a6da6 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x517f633b snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5e3fd240 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6648f00f snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x696dc2d6 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ae7167f snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6dcad730 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7118d1bc query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x71e3ed42 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7233714d snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7378a0d1 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x76891b8b snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7af8050f snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x82ff8f17 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8309c43d snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x86486573 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8c555131 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e8e24dd snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x935f7e88 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94707259 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94ba72d2 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9edafa46 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa9ebd6c9 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab7db011 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xac5b8e55 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xacc3844c snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xadcd210b snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb0c56901 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb57dfac8 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb6115ddb snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbc729afa snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbd0a4871 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe4da11d snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbeda2999 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc0b07069 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc5ceb134 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc68a19ec snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xceb5e6ca snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd02d0766 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd20b8fec snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd3944b50 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe0c9c7be snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1f0a811 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe2144297 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe607211c snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe72ddff4 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe8274940 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeab82a09 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xebb869bb snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed567a89 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeddfd96f snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3a76cda snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf7ebfb7a snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfe4a1eb6 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x5ba54575 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xe7e941c4 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x1149202a ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x7d9a0f9e soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x3e47082a soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xc31742c2 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xf0231bb6 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x41e43879 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xbb54f3ce soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x17c931ac ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xe3efdc62 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x83b6fc1d cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xfbaff606 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0xdc72b213 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x24515210 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xdc50bdcc pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xe2fc04b0 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x2fe457db soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x75b79555 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x04cab54d tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x334807ae soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x3eedb552 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xdaa24765 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0619d75f soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x06ebd1aa aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x299b6808 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x63fb7278 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x6eda514b aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xadc8d5fa aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xeda0172c aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x60e33f1b twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x8069dfd3 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x41d1b9d6 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x706b85bf soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xd2a34acc uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x20922bd3 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xc27518ae wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x3ecdbb8c soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x44fcf986 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x4efdc55d wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x1c01df38 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xa5d141de soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x2bdf3538 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xd200740d soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x9ca35d0b wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xfb6b9997 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xddd14f82 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xf710fbae wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb29688d7 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb441aab5 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3539f0c9 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x629659a9 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x7f00145a soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x9db51656 wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x542d4799 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xddd0cdbb wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x2ade67b2 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x85cde1b0 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x9914a182 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xda072bc3 wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x5c93596d wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xb239f241 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x2e480fd0 wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x9e1d095e soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x9d99dd30 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xb9d71ef9 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x728bcd5c wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x8482ec71 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x85408646 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xd4fcc6e8 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x8431575b wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xf8377203 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x05bbe7c9 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x5fde7a32 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x4f9f6e10 wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x96c59a0d soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xbde8c9ce soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xc90b1cbe wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x2a80b969 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xce74a741 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x067780a7 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0703f840 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0d6ac57a snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0dd257ec snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x10cba148 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x10ff62a1 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1116dbf1 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x13af6d20 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x151dcaef snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1cd1f372 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fad6351 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fc50325 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x22e516e2 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x252fcceb snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a93437a snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2db642c7 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x36918a63 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x37287296 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4081bcba snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4a8a5d10 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4ecb0fcc snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x51769f7e snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5351e71f snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x539230b8 snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x56f51efd snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5b7bad0b snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5bc33f9d snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5d72da21 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x61c16587 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69d348a5 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c9e414e snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6e56e54a snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7054ea2a snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x713c36de snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x739f128f snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75a61151 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75e22ac8 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7fe80530 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87ba0983 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8c17c984 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8f7305ec snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8fc3eeba snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x94d043cb snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9bd6ad6a snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa0798ed8 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa571f7c1 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6200b88 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa7bb6448 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa9293caa snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa6cb144 snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xab758198 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xacccb21d snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb08049d7 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb6885e7d snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb701e946 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb78f0693 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc1ddb555 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc2a967f8 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcc0ac04c snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd7d27972 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd9f35890 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdfc76b67 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe2f00c57 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe325b179 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe7eacc9f snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe90a8d0d snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef4a1869 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf7636166 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf82a4e7e snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf8be5be1 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa466f04 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x15e0620c xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x4803223f xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x57e771ba xv_get_total_size_bytes +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x88072f01 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xe878f8f2 xv_free +EXPORT_SYMBOL_GPL vmlinux 0x000aef94 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x001adae3 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x003dbce0 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x003ed6a6 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0058d2cf apic +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x009a5a62 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00a592c3 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00a5cbe1 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00f94fde register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x013db8ac destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01863f17 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x019006ec register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x0190f062 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01bf2e74 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x023d39d8 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x0243a3fd __class_register +EXPORT_SYMBOL_GPL vmlinux 0x0263d425 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x028c6811 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x02a74275 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x02b91105 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x033269d2 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x035a0e3a usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x03a3f86d unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x03aa2804 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x03b2ef7d crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x03b34c01 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x03d9615d skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x03e25bef inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0414bddc ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x044598fd tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x0473958d remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x04ae9fc2 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04dff538 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x04f8e715 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x05288d5f inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x068aca56 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x071f1ed6 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x075ffe8c power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0779ca1c __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x077c0c1a inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x07888f4e sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x078e03cd ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x07994b28 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x07a17fe5 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x07e72e56 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x07ff4aea xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x080206fb vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x08119536 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x0846d8f1 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x085db0e4 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x086e52bd __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x088b2802 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x088c1e43 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x0899da9f bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x08baad78 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x090a4ebf ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x090d4e7e ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09dc4765 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x09f2cf38 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x0a1a2ef4 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x0a8e09c5 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x0ad752ec da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x0afc0f13 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b4ead67 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x0bc320da i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x0bddb693 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x0bec2b6c __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x0bfaa3a5 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c32503b usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x0c701753 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x0c7798de mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0ca3ecf9 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cd5129c usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x0d3d4646 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x0dac466d ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x0e15421e dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x0e280bc7 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x0e30a086 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x0e69726b xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x0e77d09e bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x0e7dab97 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0ec210b8 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x0ec249af ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x0ecaf541 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL vmlinux 0x0f73520f klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x0f8bfa2a dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x100c13c6 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x10621889 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x10ab9644 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x1176d0d0 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x117f5982 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x11d0f444 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x11f1af50 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x12140ce1 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x121d28d4 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x124bb3b4 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x128cb99d ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x129445f1 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x12c9d44f device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x13731022 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x13748759 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x137fc85e securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x1381a048 iommu_map_range +EXPORT_SYMBOL_GPL vmlinux 0x139ee9c8 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x13ab173c usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13c0b6a0 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x13e05aae __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x141a30c3 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x143edc5a uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1440e647 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14b2392b devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x15238e27 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x162012fb fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x1640954a class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x16788d5b bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x1697136d hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x16bb853b __remove_pages +EXPORT_SYMBOL_GPL vmlinux 0x16eb9102 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x16f26444 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x174bcda7 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x17996987 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x179cdb19 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x17a5d124 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x17cdf383 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x17d6f62a ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x17ea1290 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x181ec9e8 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x186f0d2c crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x188b47ff security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x18951544 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x18969b91 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x18d317f4 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x196c7b25 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19c7fc19 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x1a121a56 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a3dd20a cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a5424fa crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x1a938737 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x1a9875f4 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x1a9b538e ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x1acda5b2 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1ad94a98 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x1b1c32ff __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x1b8b86e3 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bbe7be9 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x1be409eb sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x1c2a5354 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x1c2cd0ae usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x1c309769 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c487a9d inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x1c5d0e9f eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x1c7b6c2a eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c8b0961 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x1c8e9b69 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x1cc5fbab ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x1d18a795 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x1d29e89d md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x1d32761b ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x1d7e724b usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1d9a1136 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1ddb3ea5 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e2f9f23 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x1e3745e7 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x1e4990cb usb_string +EXPORT_SYMBOL_GPL vmlinux 0x1e5f82de platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ec2f809 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x1ef5e83e led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x1f02fc79 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1f19d1cb usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x1f29b226 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x1f2cfcad sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1f3d1b77 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x1f5ffa2f ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x1f77ffbf per_cpu__gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fae7955 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fe42b6d rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x1ff26911 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x201e2c25 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x205dcd7a klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20d22764 iommu_found +EXPORT_SYMBOL_GPL vmlinux 0x210b84ad aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x210bd51b usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21d17748 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x21da516f class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x21e7f588 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x21f336ae inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x21f76b18 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x21faecc8 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x2215763e regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x22722d73 acpi_smbus_write +EXPORT_SYMBOL_GPL vmlinux 0x2285e98d ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22c3c2e7 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x234e4c9d transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x2352a46f tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x2356ecd6 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x235ac6ca platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x235b9d1d rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x2362a680 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23d95412 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x243aa0b4 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x246f4153 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x248aae08 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24cb5d5e bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x24d969fb usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x24e0d0e8 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x25b53b6e __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x25e95115 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x261004f0 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x26639e02 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x268bb556 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x270838f7 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x277fad7c inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x2785e5be raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x278e51ac ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27bd87ad sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x27c3f73f crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x27c628ff scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x28160aad usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x2844a516 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x2850f2e6 get_device +EXPORT_SYMBOL_GPL vmlinux 0x285e7e89 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28fe92d2 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x291ab4e5 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x29501527 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x297d6ba9 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x2993ba17 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x29b50d25 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x29e7acee ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2a0a4724 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2ba91862 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x2bb02aa3 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bd1c048 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c03b46b usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x2c164804 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c2cb9c6 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x2c764f69 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d3302cc inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x2d43fada scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x2d5dbeec crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x2d8e8f1a swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2e3937d9 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2ea013e1 pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x2ec92012 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x2eed2630 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2f0f795b bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f7fc7eb ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2fc00029 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2fd41090 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x2fdd8439 dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0x2fdf4fd3 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x2fe363b8 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x2ffc25a2 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3019a7c0 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x30373e50 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x30702f96 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x30b31352 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x30be18dc simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x30e8396d ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x311e7ddc proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x3156a638 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x317a86c6 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x3188e442 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x31a2a10d regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x31b37197 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x326badda crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x32725f3a nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x3274abbb crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x32a88e24 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32e15360 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x33401562 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x33a6d8b2 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x33c8e4d3 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x33d4bfa1 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x33ec66ef kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x340558fc regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3447683c flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x346835bc devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3493ab9b sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x34a8ea36 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x34a9a0f4 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x34c24076 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x34cba128 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x34dc79ff led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x35213407 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x35c24030 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35fd0312 per_cpu__injectm +EXPORT_SYMBOL_GPL vmlinux 0x36147dab ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362944b1 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x372ca969 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x373bc17b ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x373d6121 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x37953253 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x37abfea7 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x38225c25 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x3824dd5a crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x382775da invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x382d2634 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x387c312a ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x387c34ac power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x38833a5d pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x38b9fd01 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x38ea936e __memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x392a643e sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x398027a1 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x398a9d85 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0x39956f26 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x39b64e26 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x39b9ee05 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x39e59997 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x39f10126 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x3a2ec487 dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0x3a664fe6 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x3a6de86a power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x3a804621 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x3a85fbc9 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3b09fdc3 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3ba31059 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x3bbe9a9c sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x3bccf8db sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c59edee dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c6f0513 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x3c7d8eda devres_add +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cb3950a class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x3cc42d71 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x3ccb6c30 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cd5652e dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d5acc58 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3d5f392d acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x3d6d0225 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3d8d9c0e tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x3d983c9f put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x3dc16ae5 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x3dd5d829 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3ded27af ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x3df0f251 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x3e4c6249 scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0x3e6eaa33 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f0348ec crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x3f093a1f spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3f970379 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x402286a8 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x405397b9 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x40599182 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x40626177 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x4090a9c9 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x409613e2 mmput +EXPORT_SYMBOL_GPL vmlinux 0x40a9f3b9 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x40ae4dbb single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40be2c41 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x40c31806 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x40eb7312 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x40efbb1c crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x410c3b78 ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x4207fecc blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x4228fa74 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x426f13b9 e820_all_mapped +EXPORT_SYMBOL_GPL vmlinux 0x426f4cbc trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x428fe803 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x42a18c66 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x42cc3a5c ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x42eee679 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x434e62dc __module_address +EXPORT_SYMBOL_GPL vmlinux 0x437b4ba0 sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0x43eeef87 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x4437e418 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x4462348a ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x44637f5f usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44abb265 device_create +EXPORT_SYMBOL_GPL vmlinux 0x44bb2400 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x451813c5 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x451c497d usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454d5c01 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d14bdf hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x4627a83e rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x4653c6dc relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x466a71a3 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46c8e1c5 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x46f52220 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x46f66e6b __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x4713ef34 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x4724de0f i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x472740da xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x4750c99d __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x475c3565 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x47b71623 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x47d6b5db ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x47efcb51 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x4860a1bb crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4884140a br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x48efb035 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x4970a1cc regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4995f903 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x49ed802d skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x49f3c442 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x4a077834 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x4a237102 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x4a87a493 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x4abcce26 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x4acd3bf5 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x4af27df7 pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0x4af9d82c class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4b759823 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4b762828 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x4baa4629 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x4bd8c7eb relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x4bdc33ec usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x4bfb25de inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x4c04ec35 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x4c338dba sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x4c3f5384 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c99fa1d hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x4cec82ee crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4cff5e3f sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d12155c xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x4d3970eb power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4e1c3c82 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x4e25839a rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x4e689bb9 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x4eb0c7b0 sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4ec5a1da macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x4ed085bd fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x4ed4d7c5 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x4f502ba6 device_del +EXPORT_SYMBOL_GPL vmlinux 0x4f552a1b ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x4fc56cce iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fe9860c simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x5035ab68 usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x50373106 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x506e12df platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x507de8c6 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x508a5385 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x50b319ce cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x50c4d586 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x50d1f870 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x511cc279 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x5129d12d fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x51549500 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x517bf66f ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x5189e6b8 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51946009 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x51f0dc15 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x5234c0ef scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x5255894b clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x527e7bec blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x52bf425a pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52ec60eb dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0x531d1c4d rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x5324d04f bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x532739ed rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x53723334 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53aa3387 find_module +EXPORT_SYMBOL_GPL vmlinux 0x53b158c7 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x53dcf28d usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x5404ca04 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x541f96d4 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x5449c5ab ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x547b8f2d usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x5486e169 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x549fe6a9 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x55124695 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x555f1410 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x556d11df gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x55dc0a63 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x55f2580b __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x55fb5be9 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x561c634a wmi_evaluate_method +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x566f0057 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x56dda56c blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x56de907c ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x57174166 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x5770189b register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x5798085b agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x580fd343 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x5852451a fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x58bca723 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x5906fa40 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x59497847 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x59819bcc __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x599b1774 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x59c3e4cc blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x5a0acc22 dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x5a0ae43d attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a48fba2 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a76b652 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5ac78036 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x5ae1937c ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5af3808a kick_process +EXPORT_SYMBOL_GPL vmlinux 0x5b1dbb87 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5b435139 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x5b5c9711 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x5b98e017 ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c0c2e15 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x5c396e9c ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x5c8cb862 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x5ccaae29 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x5cd1db01 xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d12ee2b ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x5d276faa blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x5d297383 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d73542b regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x5d846fcc ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d9ca9bc usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x5db1725a rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x5dc616be eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x5dd46994 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5de1686a class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x5dede1bd register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x5df32a65 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x5e7abbc9 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0x5eab0ecf tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x5ef5b714 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5fb90d24 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x5fbad331 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x601fee29 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x603ab8dd devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x605a018f __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x606e9731 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60cdc135 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x60fa50f9 put_device +EXPORT_SYMBOL_GPL vmlinux 0x612db4f9 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x61519c09 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x61747e09 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x6194ffea do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x619f70b9 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x61a1808a sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x61b28ce4 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x61bb6cd1 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x61c6f8bf power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x61d89ca4 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x61fde9e6 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x62688c7c usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x626987c2 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x62849521 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x628dd1a1 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62a53252 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x62c55d6f ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x6301d114 device_add +EXPORT_SYMBOL_GPL vmlinux 0x630492bd sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x630e7061 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x6321ef24 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x6326807e ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x63583f91 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x6377b961 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x63a96790 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x63b5e1e7 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x63dbe800 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x63ea5555 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x63f4dc09 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x6408368d crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x6471eb94 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x6473dc8d usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x648f3ed7 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x64bb5f03 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x652f4059 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x65501d80 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x6565b802 device_register +EXPORT_SYMBOL_GPL vmlinux 0x65b3ae79 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x65b43038 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x667e4758 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x668d2276 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e04672 dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0x678cbb2e dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x679e30fa da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x67d4ee29 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x6875ccfb part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x688b7e72 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a668cb hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x68c71d40 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x68c855a6 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x68f3cca1 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x691b8d3d device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x691fdbc9 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x695533ad crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x695b1c56 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x697628ed rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x697ce653 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x69b81e2a usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x69d81264 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a66cdbb inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x6a67280a ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6ab424f6 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x6b23fbf2 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x6b3987e6 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6b540a06 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x6b6ff422 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x6b80ac6e sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x6b9178b3 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x6ba7f27a handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x6bd20edf dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x6bdb5006 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x6bdc5b84 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x6be56852 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6c2f4aba usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x6c404e4c led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c60946c crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c9bb9bc ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x6ca6c67a gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x6ced3887 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x6d12a543 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6d209d7f scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x6d2a466a ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d95f83c skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6dac1f9a led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x6dded357 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x6df514df ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x6e0854a4 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x6e0ad976 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x6e234c3a inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x6e5497a3 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6eb787ee klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6f7cba43 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x6fbed5b4 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x6fd710b1 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6fee55b4 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7005a163 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x700fab88 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x7037d79d k8_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x70451fbc ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x7049318f ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x704af067 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70ad3fc6 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x70d311c7 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x70f306df lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x712fc320 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71875763 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x71c2e989 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x71d3e5ea usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x7227cda0 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x722c4f65 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x72744e59 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x7274601c fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72799e4b debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x72a96a10 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x72c55186 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x72f10a28 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7304fc97 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x731433ee unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x7318e779 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x733e4a90 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x733e9b00 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x73645832 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73f043d8 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x742701a7 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x7458ed76 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x746bb95c rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x74a20c58 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x7544b472 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x757dc815 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x75abb4ac ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x7648ee0c cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x7664bb98 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x766d2e7c user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x7697efb1 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x76a95683 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x76face7f crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x775f067b usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x77b0ebeb driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x77bef1cd ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x77bfff38 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x77d3391a kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x77e47f71 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x7813c0d1 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x78546758 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x7888d712 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x78a09307 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78f7ffcc ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79576a0e sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7962ba60 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x79879bcc input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x79a61002 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x79bc6fc8 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x79d66d78 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x79d894bd crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x7a3231b8 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x7a3679fa pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x7a40ad4e hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x7a47cf8a device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7a4f6334 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x7a52dcc6 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x7a86f36a fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x7aa24be1 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7acf3089 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x7ad06a0c ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7ae32e2e synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x7aecbc13 input_class +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b356f8e ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x7b80d41f user_match +EXPORT_SYMBOL_GPL vmlinux 0x7bcd2ded klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x7bd7c566 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x7bee2635 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x7c050754 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x7c821c56 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x7c972da8 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x7cac82b7 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x7cad0ade drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x7cdca2a7 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x7cf7a255 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7d13da27 dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0x7d2ec030 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x7d94d064 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x7da38d14 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e009831 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e5e301f unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e93918c pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x7ea43313 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x7ec614fa uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x7ed7b3fe fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x7eef5eb5 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f1d0df5 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0x7f7b8caa regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x7fa7354a pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x7fbe01cf anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x7fd9c1d9 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ffc40e0 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x802ae7b7 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x802cd2c9 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x804cbd8e ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x8085c9d3 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80c6e9ee spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x80f5ba48 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x8110d6f9 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x81517998 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x818f2418 usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x81c12355 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x81f7d3c0 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x81f97860 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x82178219 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x8220b053 inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x8241d30e pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x827f83ad crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82af8b9a devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82e085e6 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x83428ad6 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x8353bfc9 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x83e52c00 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x83f240e4 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x842a07ae crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x843b3cd8 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x848eb892 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x84b149e9 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x84bd9e00 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x8532a2d0 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d4dc4a register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x860f8c7e d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x863ecb43 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x864839a9 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x866e4528 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x86753346 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x867a579f skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x867c684a setup_APIC_eilvt_ibs +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x868d2e88 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x8691ad34 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x869b4ce9 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x86a056bc unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86a66bb0 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86bf7595 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x8766c0d5 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x876d29f1 wmi_get_event_data +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87909441 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x879f00b6 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x87b40149 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x87cf675c __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x87d7d9dd usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x880b189a __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x881cc809 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88a62d7a alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x88f8be1e sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x8941c03f rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x89428348 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8954ef75 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x89b0f062 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x8a48e223 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x8a72be8e power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8a85ddb5 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x8a8db827 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x8ac3afae pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x8ae8f1f9 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8b1ba7a1 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x8b39cf9d unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b9200fd lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x8be3c75b ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c4bff78 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x8c95f83d dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0x8c9d686d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x8cc66953 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x8cfbd1e8 dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d109544 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x8d66490d pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x8db1a37e cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x8db89810 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x8dbb36a8 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x8dd9d7f4 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x8e3492e2 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x8e4da5db ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x8eb58c6e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x8ed61464 user_update +EXPORT_SYMBOL_GPL vmlinux 0x8efe0116 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8f501857 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x8f68a22c set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f705085 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x8f8932fa xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fb0a6a8 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x9008cd6c inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x900ef362 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0x9048bfe1 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x905b1dab tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x9078bc46 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90a581e9 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x90ab1d6c aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x90f0abb4 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x910a2316 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x9112152e ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x91482eef usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x9154cc24 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x91dac80e scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x91dacaa2 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x91f09504 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x91ff1264 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x92051102 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x9222cc31 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x92306c81 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x9244c614 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x9260c5fd __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x93260715 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x942a41f4 iommu_unmap_range +EXPORT_SYMBOL_GPL vmlinux 0x94356e16 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x9462f218 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x9492f89c add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x9503aed8 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x952391e8 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x957323d7 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x95758050 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x957c73df alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x95bb5171 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x95e0153a srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x964d5c39 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x96b1c1c2 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x96b25824 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96ec3f3f scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0x97027221 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x970c8daa fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x975b3ead usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x975b8070 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x976c9982 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x97982542 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x98215d8d device_rename +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x989ba138 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x992443f2 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x99429186 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x995d38f8 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9984c858 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x99b3b5b6 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x99cafaf5 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x99cba3f7 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x99e52a5b task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x99ead1cd rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x99f9bd28 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a4d1034 idle_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x9b0a49ac user_read +EXPORT_SYMBOL_GPL vmlinux 0x9b15bee1 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x9b1f546d unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x9b8cf883 dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9c17b7dc sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x9c2de449 memory_add_physaddr_to_nid +EXPORT_SYMBOL_GPL vmlinux 0x9c6103f8 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d2ac309 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x9d2b6a58 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x9d308c4d hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d4287a7 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x9d7f68a1 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x9dbee6a1 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x9df30aef ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x9e01f6d4 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x9e414073 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x9e5f910b ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e95459a transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f4e05f1 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x9f723906 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f9809b9 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x9fab1dce tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x9fb073e5 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fe47e28 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xa004e9ab blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa04e8199 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0xa057ceba dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xa07c1ebc pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0xa08e9278 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL vmlinux 0xa0cdedeb ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0xa157ae34 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0xa1596d98 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa18e2df8 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xa1e18a68 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xa1f34990 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0xa20398b5 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa223e7db acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0xa28d8527 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2b2734e ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xa2db37cd scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0xa2ddd3b9 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa307bd10 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa3c75f88 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0xa3cf59ab usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa422b70b __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0xa43782e4 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0xa44f0003 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa4a42813 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0xa4b4a6b7 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0xa4cc5425 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xa4d58669 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xa50c2f9f class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa510b834 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xa51105bf spi_async +EXPORT_SYMBOL_GPL vmlinux 0xa519a3eb xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0xa558a84c fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xa5597e1c cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xa5855a2d dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xa59b6c3a ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5cf251b map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa60926cc platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xa6283056 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xa653e39b ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xa6981d51 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0xa708bae3 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0xa7500f18 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xa7555d5c blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xa78a2da9 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xa8084454 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0xa8535a9b pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0xa8769184 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xa87ae87e bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa8a183b9 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa96496c9 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0xa98154f4 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9d19fdc rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0xa9dbe745 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xaa17bd94 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xaa3e3aea __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa7823ba crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaddf6ca blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xaaf253a0 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xaaf5f73a ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab1691b9 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab2d2f9d sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab67f0f3 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab78750e pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0xabc2690c __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xabdf39fb tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc19485 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xaced6744 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xad020372 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0xad096363 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0xad2329dd usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xad91164f mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xadfe8e31 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae21a0f4 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xae2f5298 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xae980049 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0xaeaf2872 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xaec862ca dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0xaed934c1 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf620493 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xaf694ef6 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xafb0eb94 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0xafc7c996 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xafe845e8 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0xaff8f3b8 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xaffbbaaa srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xb0223109 klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb09850f6 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0ac5ea0 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xb0cf522f devres_get +EXPORT_SYMBOL_GPL vmlinux 0xb0eedea9 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb126118c inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1a8c0f4 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb2814e59 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb3390166 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xb38e9a9c class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb39b4a29 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0xb3d3ee6f rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xb4166741 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xb41c3379 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xb42941ee dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0xb4787c42 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0xb4861908 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xb49488e2 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb5004ae8 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xb5080ff3 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb525fbf6 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb5494966 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb5781097 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a0275b devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0xb5f9b620 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0xb5ffc79a inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xb60d46c7 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb62b5a41 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0xb64e4efc acpi_smbus_register_callback +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb68550af ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xb6a37769 dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6e12d64 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xb6f1a712 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb73e2d41 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2eb91 mce_cpu_specific_poll +EXPORT_SYMBOL_GPL vmlinux 0xb7e56895 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0xb7fdd0df eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xb87dd3df kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xb886111b pci_intx +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb9248321 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xb9292e07 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xb92d5c88 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb94db510 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb9954774 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9ea052b __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xb9ece983 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xba8979e4 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0xbaa92815 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0xbaba43ca rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbae55148 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xbb3507a9 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0xbb41edea debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xbb4a1408 klist_init +EXPORT_SYMBOL_GPL vmlinux 0xbb802181 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0xbb8d3c78 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xbba00578 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbc5e8d5 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xbbcc8be3 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xbc2898a9 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xbc29d792 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xbc3af6c5 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0xbc6324d0 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0xbc920041 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xbceae503 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd9fb818 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbe005d0d fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0xbe072482 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe58601a inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xbe8d4de5 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbeb4cb93 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0xbec7b9b8 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0xbeda71b4 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xbef8a262 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xbf4c5170 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xbf99ba3d mce_chrdev_ops +EXPORT_SYMBOL_GPL vmlinux 0xbfd94bb0 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xc0026e29 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0xc00f413d driver_register +EXPORT_SYMBOL_GPL vmlinux 0xc06e819f usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0xc0a4bff0 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xc0beff6f lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0xc0c9b355 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xc0d61ca4 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc1538963 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc1c01c67 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xc1c1cb2d blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0xc1c7399c crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc1cac646 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc2ee1ee6 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc3773a1b regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xc37d1abe disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3ce019e ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xc3e5f29b smp_ops +EXPORT_SYMBOL_GPL vmlinux 0xc4034caa enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc42f2f94 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xc4575399 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xc46a79e2 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4ce6189 idle_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc512626a __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc5a94579 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc6252011 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc63730ad relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xc6485b7d ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0xc64f7419 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xc663e68c inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xc6724081 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc6789608 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xc6886564 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xc69ac489 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xc6a90252 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xc6db5721 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0xc71a24ce dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xc76ca8d2 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc78984e3 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xc7c0c681 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xc7c410c4 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc7d06b99 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xc7dd51f2 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xc7ec11f6 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc7f1e88f regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xc8451ec3 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc889798a swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0xc89fce0e hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xc8f11420 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0xc92c32f1 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xc92de4f8 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xc94bb94f inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9b349fb scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL vmlinux 0xc9dd30a2 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca01ef5e __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xca01f51c tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0xca0701e4 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xca295f03 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xca745cfd udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xcaa5d20b ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0xcab642a5 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xcabd97b6 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcade9de8 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0xcb31af65 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xcb47700a queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xcb49fff8 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xcbf202df driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xcc15647b xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc29ff99 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0xcc57c0f5 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc99938f screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd1a336a usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xcd1ca2cb iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdd79cab bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xcdf7c10e do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xce094044 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xce1b626c invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xce34fd32 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xce4cb094 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xcebc8a5b sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xcf04c5ae usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcf94b57a relay_open +EXPORT_SYMBOL_GPL vmlinux 0xcfac0188 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfe4f7a8 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03fdcc0 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd054873c crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0f4737c ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xd0f85d32 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd134fd42 get_driver +EXPORT_SYMBOL_GPL vmlinux 0xd153136f setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1c17ce0 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xd1cee293 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd3100fb6 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xd3446d7f usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xd349c577 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0xd3956528 dm_put +EXPORT_SYMBOL_GPL vmlinux 0xd3b2cbbf dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xd3c23a08 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0xd41bf688 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xd43537d4 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xd4520f6e ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0xd45f2880 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd463f16e cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0xd46f3e8d crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xd4744d02 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xd488097f input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd4964ab3 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0xd49f3f00 put_pid +EXPORT_SYMBOL_GPL vmlinux 0xd4e6dea7 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xd5082cc1 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0xd53284b3 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0xd544707f fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0xd59351de platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xd5c8ad5f class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd5ca1fb5 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0xd5ff0c51 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xd6133c44 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xd62b6993 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0xd64e73b2 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xd66e8890 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0xd69a2da4 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xd6c1caf6 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xd6c8d0de regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0xd6f85b47 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd7171e39 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd7893db1 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd7b348e7 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd7f61198 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xd836521b inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xd84c62fe usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xd8af3a05 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xd8c1af97 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xd8d9e6ef acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xd9042fa8 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xd92fbcd4 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xd9580daa crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xd9dda9bc usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0xd9f924f6 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda29f8b0 wmi_set_block +EXPORT_SYMBOL_GPL vmlinux 0xda316e6e device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0xda3bdd9c sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0xda4162c6 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0xda7dd7bc queue_work +EXPORT_SYMBOL_GPL vmlinux 0xda87adbf dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdba64f1c eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xdbd4cf1b __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xdbd848ed spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0xdbf2ee5f gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0xdc1f8f2e register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xdc3c085d vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xdc7ae9ef sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0xdccafa8e generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xdd058497 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0xdd122d33 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xdd473014 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xdd82fafd crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0xdd8787ab regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xddfac67a crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xde19a53b inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0xde1f9129 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xde389ca9 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde46dcf7 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xde6f3873 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xde9e4975 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xdec0f1bd ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xdedc3d34 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0xdeff4cbd disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xdf01ff1c pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xdf22b0ef dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0xdf44612a rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdf8cdd6b relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xdf938eb2 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xdffec1e4 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0xe0a23ab1 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0dcdaa8 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xe10a18b6 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xe145aed8 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xe1bd74b3 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0xe1d86223 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xe1fed6a4 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xe247343b hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe2592232 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0xe28d68cf crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe2ef9767 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xe2f63e1e skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xe326480b ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xe36811a1 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0xe3ac3f11 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0xe3ac6078 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xe4428977 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xe4591651 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xe49cb4b1 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4aaa66f pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0xe4c18159 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xe4c858c2 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xe4d66365 acpi_smbus_read +EXPORT_SYMBOL_GPL vmlinux 0xe4e76787 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe4fa70c9 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xe513afc0 cache_k8_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe53a5088 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xe5b01aa9 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0xe5b9f8c5 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0xe5c6ecfa blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xe5c92112 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0xe612ffa5 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe630203b device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6886891 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xe6e8f340 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe71c60fb use_module +EXPORT_SYMBOL_GPL vmlinux 0xe71e565e rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe7a29673 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0xe7dfb3e2 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0xe7f51daa ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe820c472 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xe855bcba kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe9073af3 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe994e7b6 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9b8ece7 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe9dcebef shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xe9e0b191 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea548d52 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0xea87b546 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0xeac438e8 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xeae01e45 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb1f636c da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb4c5744 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xeb68c290 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xeb99807e agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec1b385c ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xec69c73e rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xec83e87f virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0xec94f968 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0xeca40cb4 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xeca68672 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0xecc5b49f fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0xecd6ca1d input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xed3d4536 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xed9c7a81 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xedbab50f usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedef43c6 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xee321d88 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xee56b738 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xee5e6c12 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xef570c48 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0xef5ad0e4 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0xef65883b platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef7164fa ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xefae9cbc platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xefb7c31f transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xefd8b632 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xf010680e bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf01e986b ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf04624a6 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xf0469f04 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf0a9b13e ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xf0e7cc52 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1c4a403 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0xf279d99c get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xf2a8c0bf usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xf2bc822e bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xf2c0535f crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xf2f41f2a mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf31f6128 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xf325ae50 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xf33ebce6 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xf34612b7 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf389558e tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0xf39cae32 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0xf3c1c0a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf44c39f7 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xf4988656 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf49e9920 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0xf4a8385f iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0xf523a6e8 swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf540b5aa devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf5a291bb kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5c01ddf driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf5c84e5d __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf5d4d484 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0xf611dd7e sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0xf618f4c0 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xf61e43bf class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xf63d2952 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6c13d10 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0xf6c5f396 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf6cb53aa ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf71c7bd5 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0xf72ae3f2 dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xf73c0e47 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0xf743ce79 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0xf750cde4 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xf758a676 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xf79bc8ec __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xf812e1d3 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xf87be6e0 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0xf87d27c2 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8ac7e2e fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xf8f09d20 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf9642b4f __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9924426 arch_add_memory +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xfa0c1c84 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa22c3c2 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xfa796fd9 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0xfa7ba3ef key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xfade1acc rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xfb7962e6 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xfb882fb7 wmi_query_block +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc2b6a9f spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0xfc43cf24 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0xfc480535 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xfc891a55 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0xfcc8f6fe inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xfcef4631 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0xfd1e1d6f init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0xfd3ad1b1 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd64dbf8 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe20ef5b usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xfe54cce7 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xfe727411 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfedb5327 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xfee6341b ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0xfeef9f6f bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0xff4123d7 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xff468492 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff875a25 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xffb8b325 __rtnl_link_register +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/amd64/generic.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/amd64/generic.modules @@ -0,0 +1,2602 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8255 +8390 +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abituguru +abituguru3 +abyss +ac97_bus +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_pad +acpiphp +acpiphp_ibm +acquirewdt +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +addi_apci_035 +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2016 +addi_apci_2032 +addi_apci_2200 +addi_apci_3001 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +adfs +adi +adl_pci6208 +adl_pci7296 +adl_pci7432 +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +adq12b +ads7828 +ads7846 +adt7462 +adt7470 +adt7473 +adt7475 +adutux +adv7170 +adv7175 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +aedsp16 +aes_generic +aesni-intel +aes-x86_64 +af_802154 +af9013 +affs +af_key +af-rxrpc +ah4 +ah6 +ahci +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +alauda +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altpciechdma +ambassador +amd64_edac_mod +amd76xrom +amd8111e +amd-rng +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +analog +ansi_cprng +anubis +aoe +appledisplay +applesmc +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcfb +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asb100 +asix +asus_atk0110 +asus-laptop +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +aten +ath +ath5k +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +av5100 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +b43 +b43legacy +b44 +bas_gigaset +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +bitblit +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bnx2x +bonding +bpa10x +bpck +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capi +capidrv +capifs +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcidio +cb_pcimdas +cb_pcimdda +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cifs +cirrusfb +ck804xrom +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +core +coretemp +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpu5wdt +cpuid +c-qcam +cramfs +cr_bllcd +crc32c +crc32c-intel +crc7 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +ct82c710 +ctr +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +dabusb +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +divacapi +divadidd +diva_idi +diva_mnt +divas +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dmm32at +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt9812 +dtl1_cs +dummy +dummy_hcd +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +e752x_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +edac_core +edac_mce_amd +eeepc-laptop +eeprom +eeprom_93cx6 +eeti_ts +efs +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +enclosure +eni +enic +epat +epca +epia +epic100 +eql +esb2rom +esi-sir +esp4 +esp6 +et131x +et61x251 +eth1394 +ethoc +eurotechwdt +evbug +evtchn +exofs +exportfs +f71805f +f71882fg +f75375s +fakephp +farsync +fat +faulty +fbcon +fb_ddc +fb_sys_fops +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +fit2 +fit3 +fl512 +floppy +fm801-gp +fmvj18x_cs +fnic +font +forcedeth +fore_200e +fpu +freevxfs +friq +frpw +fsam7400 +fscache +fschmd +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu_ts +funsoft +g450_pll +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +gdth +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-clmulni-intel +ghash-generic +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +gsc_hpdi +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gx1fb +gxfb +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hifn_795x +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hp_accel +hpfs +hpilo +hptiop +hp-wmi +hso +htc-pasic3 +hv_blkvsc +hv_netvsc +hv_storvsc +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hysdn +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i7300_idle +i810 +i82092 +i82975x_edac +i830 +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipath +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmcam +ibmpex +ib_mthca +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ichxrom +icp_multi +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igb +igbvf +ii_pci20kc +ili9320 +imm +industrialio +inexio +inftl +initio +input-polldev +int51x1 +intel-agp +intel_menlow +intel-rng +intel_vr_nor +interact +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_ibft +iscsi_tcp +iscsi_trgt +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +it8712f_wdt +it87_wdt +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k8temp +kafs +kahlua +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kvm +kvm-amd +kvm-intel +kxsd9 +kyrofb +l1oip +l2cap +l440gx +l64781 +lanai +lapb +lapbether +lcd +ldusb +lec +led-class +leds-alix2 +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-gpio +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3l02dq +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lockd +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxfb +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +machzwd +macmodes +macvlan +magellan +map_absent +map_funcs +map_ram +map_rom +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max1363 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mbp_nvidia_bl +mc13783 +mc13783-core +mc33880 +mc44s803 +mce-inject +mce-xeon75xx +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +meye +mfd-core +mga +michael_mic +microcode +microtek +mii +minix +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msi-laptop +msp3400 +mspro_block +msr +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +multiq3 +mvsas +mwave +mwl8k +mxb +mxl5005s +mxl5007t +mxser +myri10ge +n411 +nand +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +ncpfs +ndiswrapper +ne2k-pci +neofb +net1080 +netconsole +netjet +netrom +netsc520 +nettel +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nst +ntfs +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olympic +omfs +omnibook +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8023 +p9auth +padlock-aes +padlock-sha +panasonic-laptop +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas2 +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pbe5 +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pegasus +penmount +pf +pg +phantom +phison +phonedev +phonet +phram +physmap +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pn_pep +poc +poch +pohmelfs +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +progear_bl +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qt1010 +quatech_daqp_cs +quatech_usb2 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192se_pci +r8192s_usb +r8a66597-hcd +radeon +radeonfb +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +radio-usb-si470x +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +rar_driver +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2860sta +rt2870sta +rt2x00lib +rt2x00pci +rt2x00usb +rt3090sta +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s626 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +safe_serial +salsa20_generic +salsa20-x86_64 +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb1000 +sbc60xxwdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sb_lib +sbni +sbp2 +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +scb2_flash +sch311x_wdt +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sdricoh_cs +se401 +sedlbauer_cs +seed +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +shpchp +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_platform +skel +skfp +skge +sky2 +sl811_cs +sl811-hcd +slicoss +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softcursor +softdog +solos-pci +sony-laptop +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedstep-lib +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +ssb +sscape +ssfdc +sst25l +sstfb +ssv_dnp +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stinger +stir4200 +stkwebcam +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +teles_cs +tg3 +tgr192 +thinkpad_acpi +thmc50 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tileblit +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tle62x0 +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +topstar-laptop +toshiba_acpi +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_infineon +tpm_nsc +tpm_tis +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +trix +ts5500_flash +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tua6100 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +twofish-x86_64 +typhoon +u132-hcd +uart401 +uart6850 +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +udlfb +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +unioxx5 +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usb_gigaset +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +ves1820 +ves1x93 +vesafb +veth +vfat +vga16fb +vgastate +vgg2432a4 +vhci-hcd +via +via686a +via-agp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +vicam +video +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vivi +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_tsi148 +vme_user +v_midi +vmk80xx +vmlfb +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt6656_stage +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +w9968cf +wacom +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wavelan_cs +wbsd +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +winbond-cir +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc5000 +xcbc +xen-blkfront +xen-fbfront +xenfs +xen-kbdfront +xen-netfront +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +zatm +zaurus +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/amd64/server.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/amd64/server.modules @@ -0,0 +1,2596 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8255 +8390 +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abituguru +abituguru3 +abyss +ac97_bus +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_memhotplug +acpi_pad +acpiphp +acpiphp_ibm +acquirewdt +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +addi_apci_035 +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2016 +addi_apci_2032 +addi_apci_2200 +addi_apci_3001 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +adfs +adi +adl_pci6208 +adl_pci7296 +adl_pci7432 +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +adq12b +ads7828 +ads7846 +adt7462 +adt7470 +adt7473 +adt7475 +adutux +adv7170 +adv7175 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +aedsp16 +aes_generic +aesni-intel +aes-x86_64 +af_802154 +af9013 +affs +af_key +af-rxrpc +ah4 +ah6 +ahci +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +alauda +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altpciechdma +ambassador +amd64_edac_mod +amd76xrom +amd8111e +amd-rng +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +analog +ansi_cprng +anubis +aoe +appledisplay +applesmc +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcfb +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asb100 +asix +asus_atk0110 +asus-laptop +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +aten +ath +ath5k +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +av5100 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +b43 +b43legacy +b44 +bas_gigaset +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +bitblit +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bnx2x +bonding +bpa10x +bpck +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capi +capidrv +capifs +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcidio +cb_pcimdas +cb_pcimdda +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cifs +cirrusfb +ck804xrom +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +core +coretemp +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpu5wdt +cpuid +c-qcam +cramfs +cr_bllcd +crc32c +crc32c-intel +crc7 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +ct82c710 +ctr +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +dabusb +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +divacapi +divadidd +diva_idi +diva_mnt +divas +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dmm32at +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt9812 +dtl1_cs +dummy +dummy_hcd +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +e752x_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +edac_core +edac_mce_amd +eeepc-laptop +eeprom +eeprom_93cx6 +eeti_ts +efs +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +enclosure +eni +enic +epat +epca +epia +epic100 +eql +esb2rom +esi-sir +esp4 +esp6 +et131x +et61x251 +eth1394 +ethoc +eurotechwdt +evbug +evtchn +exofs +exportfs +f71805f +f71882fg +f75375s +fakephp +farsync +fat +faulty +fbcon +fb_ddc +fb_sys_fops +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +fit2 +fit3 +fl512 +floppy +fm801-gp +fmvj18x_cs +fnic +font +forcedeth +fore_200e +fpu +freevxfs +friq +frpw +fsam7400 +fscache +fschmd +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu_ts +funsoft +g450_pll +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +gdth +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-clmulni-intel +ghash-generic +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +gsc_hpdi +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gx1fb +gxfb +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hifn_795x +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hp_accel +hpfs +hpilo +hptiop +hp-wmi +hso +htc-pasic3 +hv_blkvsc +hv_netvsc +hv_storvsc +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hysdn +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i7300_idle +i810 +i82092 +i82975x_edac +i830 +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipath +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmcam +ibmpex +ib_mthca +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ichxrom +icp_multi +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igb +igbvf +ii_pci20kc +ili9320 +imm +industrialio +inexio +inftl +initio +input-polldev +int51x1 +intel-agp +intel_menlow +intel-rng +intel_vr_nor +interact +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_ibft +iscsi_tcp +iscsi_trgt +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +it8712f_wdt +it87_wdt +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k8temp +kafs +kahlua +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kvm +kvm-amd +kvm-intel +kxsd9 +kyrofb +l1oip +l2cap +l440gx +l64781 +lanai +lapb +lapbether +lcd +ldusb +lec +led-class +leds-alix2 +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-gpio +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3l02dq +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lockd +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxfb +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +machzwd +macmodes +macvlan +magellan +map_absent +map_funcs +map_ram +map_rom +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max1363 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mbp_nvidia_bl +mc13783 +mc13783-core +mc33880 +mc44s803 +mce-inject +mce-xeon75xx +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +meye +mfd-core +mga +michael_mic +microcode +microtek +mii +minix +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msi-laptop +msp3400 +mspro_block +msr +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +multiq3 +mvsas +mwave +mwl8k +mxb +mxl5005s +mxl5007t +mxser +myri10ge +n411 +nand +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +ncpfs +ndiswrapper +ne2k-pci +neofb +net1080 +netconsole +netjet +netrom +netsc520 +nettel +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nst +ntfs +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olympic +omfs +omnibook +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8023 +p9auth +padlock-aes +padlock-sha +panasonic-laptop +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas2 +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pbe5 +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pegasus +penmount +pf +pg +phantom +phison +phonedev +phonet +phram +physmap +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pn_pep +poc +poch +pohmelfs +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +progear_bl +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qt1010 +quatech_daqp_cs +quatech_usb2 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192se_pci +r8192s_usb +r8a66597-hcd +radeon +radeonfb +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +radio-usb-si470x +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +rar_driver +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2860sta +rt2870sta +rt2x00lib +rt2x00pci +rt2x00usb +rt3090sta +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s626 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +safe_serial +salsa20_generic +salsa20-x86_64 +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb1000 +sbc60xxwdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sb_lib +sbni +sbp2 +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +scb2_flash +sch311x_wdt +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sdricoh_cs +se401 +sedlbauer_cs +seed +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +shpchp +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_platform +skel +skfp +skge +sky2 +sl811_cs +sl811-hcd +slicoss +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softcursor +softdog +solos-pci +sony-laptop +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedstep-lib +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +ssb +sscape +ssfdc +sst25l +sstfb +ssv_dnp +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stinger +stir4200 +stkwebcam +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sx8 +sym53c500_cs +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +teles_cs +tg3 +tgr192 +thinkpad_acpi +thmc50 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tileblit +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tle62x0 +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +topstar-laptop +toshiba_acpi +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_infineon +tpm_nsc +tpm_tis +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +trix +ts5500_flash +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tua6100 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +twofish-x86_64 +typhoon +u132-hcd +uart401 +uart6850 +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +udlfb +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +unioxx5 +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usb_gigaset +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +ves1820 +ves1x93 +vesafb +veth +vfat +vga16fb +vgastate +vgg2432a4 +vhci-hcd +via +via686a +via-agp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +vicam +video +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio_balloon +virtio_console +virtio-rng +virtual +visor +vivi +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_tsi148 +vme_user +v_midi +vmk80xx +vmlfb +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt6656_stage +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +w9968cf +wacom +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wavelan_cs +wbsd +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +winbond-cir +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc5000 +xcbc +xen-blkfront +xen-fbfront +xenfs +xen-kbdfront +xen-netfront +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +zatm +zaurus +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/amd64/preempt +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/amd64/preempt @@ -0,0 +1,10347 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x6ff1111c kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/kvm/kvm 0xd6e51bcb kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0x09ddaa0b suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x034f17ea uPD98402_init +EXPORT_SYMBOL drivers/block/paride/paride 0x1426b359 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x168859ad pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x2828c5b7 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x3a436db0 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x4988b71e pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x6a53d8e2 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x7513a2bf pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xa5521eec pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xb649e7c2 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0xe07de5a9 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xf5414989 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0xf562e3a9 paride_register +EXPORT_SYMBOL drivers/char/agp/intel-agp 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x07ab7260 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x249d11ee ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2896b33a ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x290b13dc ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x316e23c6 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3ae7f0da ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3dc261ca ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3ddf96a5 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x443fd50d ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7b1d674f ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7cc791c0 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8a1a58f8 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9a5c7c25 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9ed66850 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa8925d0e ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xaf7db3c1 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbbb02b1f ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbe9d765a ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc81ce89d ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xca61002d ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd70fa0ca ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf3ef28bc ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfd654030 ipmi_request_settime +EXPORT_SYMBOL drivers/char/nsc_gpio 0x0aeb9a91 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nsc_gpio 0x52336830 nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0x706ce0ec nsc_gpio_read +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/edac/edac_core 0x592284d2 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0x86f5add4 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/edac/edac_core 0xe3bb4899 edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x167b6f57 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1d38e1b4 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x3729a874 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x415ec4cd fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x41c0e141 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x46eb7f07 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x49a29946 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4e86dd83 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x51291767 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x670ce74f fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x73b296b6 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x80b2eb7e fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8326cdb4 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x852b2ef4 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x91fb9e62 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x955bb4c5 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x98d40ca8 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x9c55c93e fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcc3d2505 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xce9354ae fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0xd3963269 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdb8794c3 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdf54e5ab fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe3b79042 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf12f61ba fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00ed5ddd drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04a63cc7 drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06477f76 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0709da4e drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x076b04aa drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07f64ac2 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0886ec37 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0bc6f878 drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1307a60f drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14ac359a drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1ad49858 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1af8247b drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b861cc0 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d8361e5 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1da009c8 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1dfdcfc9 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21e0c20c drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24fba3ff drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25931fd5 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x26037b8d drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a2bc899 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c98b74f drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ef7273e drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34e20fda drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3666a24a drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b1740d5 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3d874f02 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3dc027d2 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3e379ef6 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f70f33c drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4010eb64 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x414d5a78 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x41874d99 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x430aedda drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43409364 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44055dbb drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x46e19b6c drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47922f3a drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47ceb232 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x49820efb drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4a7b1a09 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4b79fdf1 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4e42d669 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4f33f27f drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x503c2c03 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5722d86b drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5999c3a4 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5cf6c94d drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e92421a drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5fb6d32e drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x61845e26 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x623c2147 drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x631214c6 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x636a2ff5 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x64e85e18 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x676ecf33 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6790c1ea drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x68597be2 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6cc7b49d drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d0da6f5 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f546720 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f719046 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x703f9bbb drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x726ae36d drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x738da63d drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x73ae09f0 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x74186612 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7500c69a drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x75e44286 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77bed803 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78b8ee5c drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78bbc624 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7aec7bb9 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e1fb6c3 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x801e42ba drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x820f7131 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x82112077 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8318aeb8 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x852e3e79 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x858c6e4c drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x89ac3449 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8ba30a7e drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8cb41008 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x90e52d4c drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9246bf17 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x929685f2 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x940ed2b5 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x972401dc drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c75dca5 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa21e4dbb drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa63ac168 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa777127d drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa7d5dee9 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xabb4c031 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb07e2283 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0a0a14e drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb208d7d9 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4279afe drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4aefeb7 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb5db9493 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7be359b drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7f7c03a drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc070ff6d drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc333b509 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd04552e drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd09c97e8 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd29fd8cb drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd46af24b drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4dc8d1a drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4ec3ec0 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd5ef29f6 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd626e714 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdaf705a9 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdafac48f drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdc667be5 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdcfa4cc2 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe206b96e drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe72e6436 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7c35aa6 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xedc7d1b0 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee290644 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xefaf2041 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf06bf3dd drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf26ec049 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf48a9fb2 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf51d96a8 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf66002cc drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf69ff15f drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6dc8038 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6f68ccc drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x02358699 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x07b9f449 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0f7617a0 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1072fd77 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x463c7e46 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4df1d736 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5222414e i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5a970634 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5c32ad01 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x630897c0 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x64fc652e drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x688bb98d drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6e9650ca drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x780aee75 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x80f38d42 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x87c45448 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x896ee91a drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8cb052cf drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9db73010 drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9e739a27 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbcc21f2f drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc9bfcda4 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd1739039 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xed662ebd drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfec96d15 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x46cb9dc1 intelfb_resize +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xa593091a intelfb_remove +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xe76ba6ef intelfb_probe +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x346f94d6 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x6c14a712 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0033d843 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x01c99cb0 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x099535b1 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x146e26c6 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1815f0e1 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ba8c0ef ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1d455396 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1f7a00fc ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x29f32c12 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d673efd ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x30794c54 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x30b02b7e ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3ade5cfc ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3df39355 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x40e196e7 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x499c506f ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x516a1e06 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x52ba9bf0 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x54dd6995 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x56c42d22 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x599456c0 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x63a1d902 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x69d81dd8 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6f993516 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x765cbc82 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7cad6bfb ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f8879de ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7faf2a0e ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8a4519a8 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8db796d4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8f9903a0 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x93b7a28d ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x941942ce ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x97d5ca21 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9b3d4533 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa40603b9 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa5437f2e ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xad38f21f ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5cf2fe9 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb64dd919 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbba2ecf9 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc068469b ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2058ac0 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64bcec1 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc90d2e2e ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf05d4eb ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf9a2b18 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd629b93a ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe4aa5715 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe53536cb ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf024e712 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcfb7931 ttm_bo_device_release +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x67062ce8 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xfb6a4352 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xb635d5cd i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xfd9e9c9d i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0x1f0f39a2 i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0xab941caf amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x07aac004 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b234c4e dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0e4ccd83 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x11e8ec92 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x158ac548 dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x168ac4e1 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1ea3a58e hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x26b9914e hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2908760e hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ebf6e5a dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x32a052a4 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3493104a hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x37341c02 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4214f2f6 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4315e345 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x440f20bc hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4631b17b hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x498e9a1a hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4aa279cd hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x550fe143 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5678de1b hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x568034da hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x575ed70a hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x591f17da hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5a9ab593 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5fccb44f dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x601fc35c hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x623534dd hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6507d623 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x697cc07d hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6c9e9006 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6eb88005 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7a917102 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x80d3cb8b hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x85fa25cf hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x89857db6 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x900732e8 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9139120b hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x96407136 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9f7ee043 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa3fd3e1b hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa5edea42 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa6a8426d hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa8c0f857 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xabb6914a hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb55d61e4 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb6199af7 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb8286c50 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbc3ccff6 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbc4f6c2c hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbcd1f05d hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbd501460 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbdf02258 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbf741b60 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc1125fa1 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc7b022c7 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcd9e772b dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd0582459 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd09912bd hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1aa4da0 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd66f1dbe hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdc62be58 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdf8b2306 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xeb739e90 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xedaa41ad hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf7661676 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfefe4363 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x4a2fc2cc ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x7c805a1f ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x98afa81d ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x03ae7a8f rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x1c9ed3f3 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8a721ed9 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc91bb9d3 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xeea7435f rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xf9a2982b rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0b03b6b3 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0cdf6226 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1837a98f ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x30848bf9 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x404d5a1e ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x40d9e441 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4cc9f61e ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6beb33f4 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x70025643 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x77fd8970 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x7aefdf99 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x825adbf0 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa16e80a0 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb097b35a ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb6e2dd9a ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc4a7a34f ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xfb144841 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x05281cd9 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0a314363 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0e60fa25 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x128aaa72 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x14216908 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x17ada164 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x180b8545 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x182a5d80 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bbc8d7e ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bc196ac ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1cf2f4bb ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1eef0a5c ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27be86bb ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x296d808f ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2a998390 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2f478e84 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2fd65b77 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x36eff056 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3a642dac ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3ab6a2a9 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4cbc07dc ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4d97a012 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4ff2572a ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5277c441 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5727b685 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5a4c6203 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5d25bf9e ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64687bbc ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67c1bfdd ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x69da71a8 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6af86082 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6b50a707 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7c0099fe ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7dddba92 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7de0035e ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x80d08c96 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x84ebc46d ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x88856873 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cd558ab ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9089a353 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x933447de ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9999c9e5 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9bbccc0e ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e1b301f ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa479c06b ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xac9dc602 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xade765f4 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb3a89dcd ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb4e42095 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb501761e ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbbd3d94f ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc10562f9 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc38e3a11 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc5385072 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd12edd67 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3149162 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe0de730e ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe15a691f ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe326deaf ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe55bc32a ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9d062e6 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xea9740d3 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf06bc25c ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf52b6597 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf991bca2 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf9bf7337 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x1bd0b8cc ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2118b914 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2e55045e ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4c675b7c ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x60a72f2e ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x689d50aa ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7af7b0f5 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x820919a7 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa2883118 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa64e2bb6 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc62738bf ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xca839858 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x29844e41 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x34220159 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x457eb42c ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x4e81e35e ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5c18ccfe ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9c56fd34 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xb436127d ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xcfc214e8 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf520d09e ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x10d454a8 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x394f5db7 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x4b8be22e iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x59e42a20 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xad95421a iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbd90925f iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xdbdd9452 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xec344520 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0e17e43f rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x32dc506f rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3d3f4cc5 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3d8b1c4e rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4e0e8198 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x643dc2e7 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6f222bc0 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6fd5bac1 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x77f11aa3 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x84a2cd68 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8906040e rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x98dbedca rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xbfbd5bcd rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xca4fa8c0 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xcadd3a50 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xdec8ed0c rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe088ca44 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf4ebc3f4 rdma_set_ib_paths +EXPORT_SYMBOL drivers/input/gameport/gameport 0x118172b6 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x43e0fcc4 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x6435249b gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8540846a __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x898e3328 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x9c1a64e8 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xbc74c997 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc8548370 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0xfd92d6d4 gameport_open +EXPORT_SYMBOL drivers/input/input-polldev 0x1a979e26 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x4408196a input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x8a2deba0 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xb925c8c8 input_unregister_polled_device +EXPORT_SYMBOL drivers/isdn/capi/capifs 0x2c54c957 capifs_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/capifs 0xd0bc06ce capifs_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x1f0762a3 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x310f6d03 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x476175ed capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47dbfa0a capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5aaf3ef2 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5c77c2b1 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5df7521e capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x788d398c capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x917558c7 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc1eb33cf capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd1eb0ebd capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe9f62f29 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xefe3704e capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xfab7beeb capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x0f82b665 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x14ad65a2 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x19a2c5b5 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x26ee96c1 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x35e87bc0 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x36b188d8 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x5a2f7a38 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x7288069d b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x9dc573ec b1ctl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xa624c2b0 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb2c19900 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb4bd0d2f b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd44d244c b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xf3fb5f8d b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xf6f115bb b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xff7017f6 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x233ca0dc b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x270a4e27 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x3a22c948 b1dmactl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x47c8b10f b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x558b4838 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x5e534692 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xae40fa3f b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xc9eee4cd b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xd864b307 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xe27a14c6 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0xa7dc60ee proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x05f2bdc2 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x4b892b9d mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x7eec0ec3 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xbb831b08 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x44fc849b mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xe24e0c97 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x2844a899 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc0c558f9 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd5d27610 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd94696e8 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x25d5c12a isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x4af3550f isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x8f2c455e isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xa5154a85 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xdd788d3a isacsx_irq +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x333e7a2d isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x7e06fe3a register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xdfbfd7da isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2dfc75d8 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3285cc5e recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x390ee5bb create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x57dd028b mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x72b88447 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x75d6693c recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x89158e59 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x964c1e1e get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa2a2cd3c mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xba071b7f recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xbc687415 confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc7e2d7f0 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xce0751d3 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5ebc131 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdcd86921 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xddb7dda2 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe030a42a mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xec6d13df mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf0df4e9c recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf109448f dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf29b5a6c mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9c0455d l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xa895f197 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xcd509d16 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xd6d8f0f6 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0xf0ff999c mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x0e35396a mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0xb9de7375 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x8ef24c07 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x22ff819c xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0a5b1564 flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3696447a flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x46ee6149 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x586ed3a9 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x666e3673 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6b976af1 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6dc5a3dd flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x83d765ed flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x919b3db2 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9d49836e flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9e087373 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9f886075 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa1900461 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa6811a1b flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xbec5c015 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc46b0d6f flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd7d527c1 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe6e65291 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf69900f7 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfd8f0662 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x5f78d80a bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x6aa21537 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xcbe50edb bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xf8443ef8 bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x01e32f53 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x0e7e06db dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x3e727ba4 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x57c03709 rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x5f087ee2 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x70b48609 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x96d1b21f dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xba3e9a9c dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd0a22f68 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0xf028a577 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c457c5c dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0cbeeab2 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x11c5619d dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x239b683e dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x281f7e86 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2897b01b dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2c28335d dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3ad63f80 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4ad25e71 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x51f3767c dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x54a08c8d dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6767ef6d dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6988f784 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6be43ea8 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x70410b6f dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x718bc0e6 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x808727cc dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x83045615 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x93fc69bb dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xaae347b8 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xab0abf5f dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb1da3ad5 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb5c54920 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcb89fc7d dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcca08cb5 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcce0eeed dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd639b9bc dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd7765e69 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe025b8a7 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8668b4b dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8dd0a52 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf3181adf dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf5fc66bb dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x81a00306 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8a412dc2 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcbcf8f6d dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xce623662 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcffc0325 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xe71fd000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xfac77664 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x494de9ca af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0e803868 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x1c72fe49 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2d78dd9c dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2ee2fd40 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x53a29dfe dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5f356ec5 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5ffaa18d dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x81c7801e dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xa098aef6 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xba5d2146 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdbc0c8d3 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xe8ae4e1b af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0xfda54672 au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x4e59b366 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x02d0ee56 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0xf8fb82d9 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0xf0613c99 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x352e6676 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xba6c55f5 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0xf9803020 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x853ae976 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xbc8e7c04 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x42874d36 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x8863e696 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x9223345d dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x34f0f86b dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x10f2a2f0 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x18ce038e dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x24f062a2 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x67042e6e dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa883391d dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xaa58fe71 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x2f2c5073 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xb21dccb0 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x1f387a2d dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x25014d21 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x750f0eeb dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x77766cb0 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xb84241df dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xccd865dc dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x2f63c31f dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x6ee76331 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x722db8d2 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xaee4647a dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xe5d46df8 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x10345583 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x73e25fb6 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x7e8d948a dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xe9ea436c dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0xdab1b204 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0x36f34153 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0xbfeaed30 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x140dc352 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xfd398e60 l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0xec44d5b2 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x9e511490 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0xec371b7f lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xc865bfd6 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xe3171da3 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x5a10d670 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0x034bc75b mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0x6618dd88 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x826d3c1e nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0x765176c9 or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0x4e10131d or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0x0fcee4ac s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xe6ac092e s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x56a310cb s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xc709d85c s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0xf6272f72 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x8ade3bff sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0x5c567383 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0xe7e731f9 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xe2a418b3 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0x0df1e714 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0xf7f6cb00 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x4facfe0d stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0x2fc5b187 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x399f004d stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0x67a297a7 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x5c0bfd92 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0xbb048232 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0xc019e6c7 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x7719f667 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x7da20307 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x143000fb tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x2d16e763 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8261 0xc53aa390 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0xffb88052 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tua6100 0x39a83bcd tua6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x86c4212d ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x7bc132a4 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x4ec09cee zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0xa23c0ccb zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x4741da26 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xe3f385f7 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xd1dad07e ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xfa1dd1b4 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x534cf512 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x6b980fe1 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x79330c0d bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x0ee7120a btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xb8f321fe btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0x161518e5 cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xbffba4b2 cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xb3b35366 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xebe4b8fa cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x4126e602 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x4cd6ae0e vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x1447dbbc cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x144963d5 cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x4e404588 cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x585ef895 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x7f786893 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xe5cd563f cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x11443a54 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x537fb994 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x646af89a cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x7398d3c8 cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xb0dcf72e cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xddc97722 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xe83e7f0f cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x04d9bc0d cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1f783e48 cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x24e7007b cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x306dcd66 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x319f981f cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x33d5439f cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x34aa77e9 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4871d3e2 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x490a4d70 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x742a8797 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x743bffc7 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x755ef3fc cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x80de61f0 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x91c545a7 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9aefb35d cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa31d615c cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc2a6449d cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc9232608 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xcb920e51 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xccd7d248 cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd19ace3b cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd9948934 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xb76ebf3d em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xc4d835de em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x1a6090e9 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xaa630557 gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xb1409db5 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xbcdf2987 gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xd600634f gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xe0170329 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xf478f061 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0f2bf329 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x865f4621 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8f650f6f ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa1f2313d ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xc3c14859 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd067dc95 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd4f61033 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xeb2ef714 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf023c2bc ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf5677705 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf81a8cb2 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x034c5e8a saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x07646f79 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0d9e6c58 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x2739a705 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x33512755 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x3984f535 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x4fa437bd saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x57bb10df saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7c390f77 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xb28ee717 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd8c37471 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe7910144 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/soc_camera 0x0b9aa2d2 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x14b901bd soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x5fbec039 soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x84650cc0 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xa59be336 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/tveeprom 0x74f61c6a tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0xf46dffc3 tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x03ad981a usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x16a2915c RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x38733f27 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x407a321c RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x4b05d94d usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x9b6a67dd usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xddecac6d RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf5011f67 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xfa863c66 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xfdd287f8 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x5aebf557 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xb946dd91 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xe6948d10 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x0c217400 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x2bfc5a02 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x51867333 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x71f713c8 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xa858ca32 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xc8dbd580 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videodev 0x00895fd3 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x233100b2 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x8682d558 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xa84db9de video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xa98d17f1 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0xb69c1baf video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xd3640fe0 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf266a29c video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xf9290d00 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x1614552d videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x4e8e259b videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x9fd9c1a4 videocodec_attach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xeb068661 videocodec_register +EXPORT_SYMBOL drivers/memstick/core/memstick 0x20513fe9 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x3f25aeb4 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x4e1d69c7 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5b392d71 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d820a02 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x70e61b7b memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x71bacaf2 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x90810e8a memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x99c0ae61 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa5c4f45d memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa6803e7c memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xc145c619 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xcf794ea2 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xdafb83ab memstick_resume_host +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x13790360 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1a95ad10 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1c2e03dc mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x22b1db0d mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x33f4221f mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x40bd3ae7 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4430ed5a mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4b4fb096 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x52ae89cb mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5432bef2 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x58f406af mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5d9a1a6c mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9286b536 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x95023f61 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x97f3676b mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa062e27f mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa5c189d6 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa751b828 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xacaeb4c7 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb7c77f9c mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc9b49625 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd32e1054 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xda83db37 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdbeb8ebf mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xde91c0a7 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe24b2642 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf6d74a00 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xffd03214 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x178f747e mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2b3369fa mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4311c24b mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4831a04e mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4d50a5c5 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x605e5184 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x61ab331f mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x698e9811 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6b90860b mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7860ef03 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7dcf9870 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x869acb21 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x871c3b37 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8b39e087 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8bae9aa0 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x90df5a73 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x920c4b94 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x96f38049 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb8538036 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xce995229 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd2909b94 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd3f646ff mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xdc7a0219 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe61a9877 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf1dc457c mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf9bbb6c4 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x083c78ff i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x24be12b6 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2d73b01a i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3490d7f3 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x35187aac i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x38f9cac1 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6d74cf9d i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x715df54d i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x72247fcc i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x729560c0 i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x833bfdc1 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x88818020 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x93c1bc49 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x957aaf6f i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x99409d73 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x997a07ae i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc76a79fc i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcc70ac4c i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdd0331e8 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xde120df6 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdfde2c96 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf1fc72b0 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x04f3d134 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x2cc2413d ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x5e9f9795 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x82e561f6 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc050b125 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xcbf862cc ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xdd298092 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xf0c238c1 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xb2b8bbc7 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xedfd6a4b pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0xa6e9d06e mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0xb3c9a67e mfd_add_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0x3ca4dc8d c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0x48831fba c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x68e26007 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xf4d5a225 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x0c081303 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x46d9a940 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x867a38f7 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x8e0bdf09 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x9084e070 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xb79c4017 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xb867d74c tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xbe39b469 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0xc690c043 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xd3c32ed4 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xe692b8b2 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xf7318862 tifm_eject +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x60347bba mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x2e0f07f4 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x4bdedc70 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xb930ae88 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x4ac80313 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x50034f9c map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xb4cfe262 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xc9611e42 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x1286aa20 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x604bc55f lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x443ea61d simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x4088585d add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xe9ce2acf del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x485df4ac mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x5ef8ebc9 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/nand 0x6506f560 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x947076fd nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x68d35fec nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xf7485e59 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x01027fdc onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x3b6b40c6 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x49b4fcf6 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xe3475f00 onenand_scan_bbt +EXPORT_SYMBOL drivers/net/8390 0x136c5c10 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x34c6ede9 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x60e1ef4c ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0x65c9c5c0 ei_poll +EXPORT_SYMBOL drivers/net/8390 0x87079e2f ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xa7d6d86b ei_open +EXPORT_SYMBOL drivers/net/8390 0xc5edb5aa ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xc8ccdf3f ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0xd536cb14 ei_close +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xe547ea25 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x022cf044 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x27bcc714 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x647fab82 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x8eac1890 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x9d92541b arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xbf0c28ce arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xccbd9cf6 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd142d2cf arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xde4ae968 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe92e92ab alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x97147b0d com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xa3ee50e0 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xe5edb1f5 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/bnx2 0xf286d844 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xc9c6f118 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x038524e3 t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x03bce2d2 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x049fda98 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x21902677 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x29a31b5c t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3a267bae cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x54869323 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6c668d3f t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6fc87046 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x7f814cf5 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x879e9dd3 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb59887cb dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe0c2bcea t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe2ebe367 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe7d097c7 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfef428fd cxgb3_free_stid +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x465cde5d hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x653487d0 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x75236adb hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xb69d13e0 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xbcfa2153 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x076f6088 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3eb64724 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xbcdd00d9 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xbe4e4372 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xc625cf0d sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xcbc4f78c sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd62b1c1d sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd7310fb7 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xee57a8a4 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xfee23883 sirdev_raw_write +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x0df1ab75 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x0eb05931 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x2b0e6788 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x372d6767 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x70d61dfc mii_check_media +EXPORT_SYMBOL drivers/net/mii 0xb5aab49b mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0xc7a462c8 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0xdb952b60 mii_nway_restart +EXPORT_SYMBOL drivers/net/pppox 0x18389953 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0x26d9b488 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe75ea245 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/sungem_phy 0x2f9077b3 mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x374a3888 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x6766b136 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xc0acb952 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd85c26e0 tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xe789d736 tms380tr_open +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x13add505 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x210b0399 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x2db6baa5 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x3a0b43c1 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x61c96ec2 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x65a38bdd alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x6b2f6666 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x6b3231ea hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x7420839a hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8c85e5de unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xf742ba03 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wireless/airo 0x8d93a09c reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xb9f8f4c6 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xfacbb2a2 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x24611076 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x2ced6ad9 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd729b160 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0xd14346bc stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xe80c9de0 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xe987207b atmel_open +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1d2231c8 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2811018e hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2b0d05c2 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2e981f14 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3d38c974 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4aabc991 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x58ce829f prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x600d1c39 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x609b38b1 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x878e8268 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x91109cc4 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x97040d1e hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb30dc5f1 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb72146ae hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbbd6094d hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbc47525b hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbd1d871f hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbdbd8539 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcafdba80 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd7e4c062 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xea59d6e6 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xecb19e54 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xed10faba hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfcf11857 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xff097247 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3f505e79 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x42d1985b libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x49cdbc2f libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5958be38 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7a2fbb90 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7f96d414 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8678f9f2 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8c0f47f4 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9730e6ab libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9a445960 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9bae8a0c free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9ed3b7c5 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9fed28b2 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa1837d89 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xab21d63d libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb68462c2 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xbc34e809 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc63cd1af libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xde6b9836 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xeb003f4d libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfe13d05a libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x00ddba9f iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x00f5fa5f iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x01492f62 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x04ba6004 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05472739 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x062e5f02 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x084b95cc iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0a9d4c53 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c325416 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c60fc89 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e7be668 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e80df71 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f25b5e7 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f53397f iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1216742e iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x122785ee iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1386fa00 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x171a65a2 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1adca7cc iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d43276a iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e681778 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2087a989 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x225e27fd iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x23b827a5 iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24e32240 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2c8a660d iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x32f79039 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x396e020c iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3a948c6f iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3cd66a71 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x407d60c4 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41eca744 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42a1409f iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42c3cc9e iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x452b6f06 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4565fe33 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x462daf02 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46a32762 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x471e117f iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4819c12e iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49172a0a iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49afbe72 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4d515b16 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5012c7f8 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5035e4a2 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x51d3e1de iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52ad50e6 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53f8053f iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5758dfa0 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5835a547 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5944a4b2 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60774702 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x623866f7 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x658685f7 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6e953116 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6f70c5ae iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6fe839fc iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x705700b5 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75a0c6ef iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7615a222 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x764921f8 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78f83492 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7d69c07e iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7dbe2f46 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7ee8bdbd iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x846929ee iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8710de63 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a806e7f iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x90dc9a19 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x932d94fc iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93e27136 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x95dce55e iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9695e204 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x975ff291 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x97c609a6 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99712c10 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e307aac iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ff49e4a iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2754ea1 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2bed937 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa42b164e iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa487b894 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa0c09c5 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xacc35487 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xada107c4 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xae1583d1 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf457439 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf4b27f3 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb0be52b4 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb154b693 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb6b2b0c8 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xba921fb0 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbaf2ba1c iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbbc23f87 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbcf3e9be iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd4c5d91 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe7da5a3 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1ae76a6 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fae7b9 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fb508a iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4096b3a iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4a4fad8 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc50412d0 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xca9bed6e iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb24d261 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcf9bcbc3 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd1edab26 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd31fb4ae iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd3615fd8 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd427e91e iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd5508262 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd6a4842a iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd79ac26a iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd8322246 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda7277fd iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda873bd6 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe069ccb3 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0d3b070 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe13470f8 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe26d0815 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe3797d22 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4397c1f iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe67c8387 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe8a9f856 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xead6ba66 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf08bec8a iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf08ddc2b iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf1f44885 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf43c551d iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf56d6ed5 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf86a8846 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8dc2841 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb25d9ba iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb6d3629 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfca5e7c0 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfcb78454 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfee582cf iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x36f14e31 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x75bdc40d orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbea3677b alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd49d0a3f orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe4b6a5ac orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xecaf7d65 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xfc1a61af free_orinocodev +EXPORT_SYMBOL drivers/parport/parport 0x049cc2bb parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x0b8e4309 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x1b27b416 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x1c3fce43 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x1e32d284 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x1f9a8495 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x2ecfd81e parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x32416463 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x32844347 parport_write +EXPORT_SYMBOL drivers/parport/parport 0x33c1d07d parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x41b8ddcf parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x42e6a809 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x44ddcd18 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x54fe4373 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x5c824005 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x5d9bb3ce parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x61c8f533 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x62bc0238 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x6a77cb58 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x6fe8e0d2 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x7c002b91 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x800f1d9e parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x974b3f72 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x975dee16 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x9d013207 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x9fbdab9c parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xd4103435 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0xe2685530 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0xe4f4127e parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xee6799ca parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport_pc 0x5c448b2b parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x722d22ca parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x06b2911c pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1e743405 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x29bf7e78 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2a7be3b5 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2fecb511 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3a32c0c3 pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6dc9bee3 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6e228d0c pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x873faa5b pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8bf7547f pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x90c42878 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9a8a7c64 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd9a134d5 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe69a6040 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf1b6029d pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x124d6717 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x34b8775b pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x39cfbb87 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3f11f6f6 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x47dc6c03 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x59768eef pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f42a69d pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x63f033d4 pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x66c73ea9 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6a36214f pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6e0bb03d pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6fb9658b pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x75edb84f pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7e364a0b pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8cc1df68 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa95d4495 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb8451fab pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbccb146d pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbeda1bb2 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc06445c4 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc16bd6fd pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc210ce34 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc9c165cf pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcfaabcb7 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd200e47c release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd5e25310 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd62c18a7 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdcae4bdb pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdf6f40c5 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe811ffd6 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xeac643e8 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xed46e620 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfc46800f pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0xf5fd989e pccard_nonstatic_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x576292fa pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x0545d6d5 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x14bf3899 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x207dc205 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x52328e58 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9bdcf468 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xaaed736d fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xdb9791fd fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x05ac2fa2 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x077a5060 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x12f0ab10 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2491fbe7 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x28665c74 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2c4a33fd fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x340ad3d8 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x37308271 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x374e1dee fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x37eee2c9 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x38e450c3 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x391a5940 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x45e5eead fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4a78e776 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4c2931e2 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x615e51f6 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x72d26462 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x78345d0d fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b5df165 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x951a0ff9 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x970b31d6 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9845b9e6 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x988414e4 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9b4a49de fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9d76a6ae fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa0b190bc fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa46527ea fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa5dccfe5 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb7d86469 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbff54c98 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc85707dd fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc8be1146 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbc35a0b fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbe97dc5 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe2f70421 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeb6b61ba fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xedfa2b49 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf62187fa fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf87cc621 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfcc129a9 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfcd22f30 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xff49ef87 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x9df2940a mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x044a83b4 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x27e619d6 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x290f0b5a osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x335eb847 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3b723f38 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x43818369 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x465f9978 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x58ca31e8 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x67772984 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x71d9aaa4 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x74e67bc0 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x78d4fb68 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7c2f26dc osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8518c6f9 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x86b43d28 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x891cdf29 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8ed46dff osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa0c242c0 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa0cb6c7e osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xab5b40fb osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb20c52b4 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb5597a2d osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb9b8e0b5 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xba8f472f osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbde47496 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xce903563 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd104ab10 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd6dbedbf osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe40bbad2 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe5c54813 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf78ecff5 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfcd33118 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/osd 0x4cdb9786 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6264b223 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xf0331a12 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x0e3cc56a qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x51ada454 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5e825bfc qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xa8af9892 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xbddda1a6 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xebcf016d qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x322a9dc0 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x4de7b83d raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0xee45d649 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1fc4f778 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x50377a0c scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5c87afc1 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6862d8b7 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x72747013 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb235dc68 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd0247b95 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd25ef7fa fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd5ca58d5 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd8f7f328 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe90c5815 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xee31afb9 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0557afad sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0da5d1c9 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x106b93d4 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x10d14f7f sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x17defe5b sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x20ad6413 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x30bb649f sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x35c58488 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x39176fe0 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x52522aaf sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x66d34bf3 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6b0b0377 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x85c3f321 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x89ce3094 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8b0a03c8 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8e9d80e4 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8f5ccb4d sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x911d6015 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9a784fc9 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb0ab63b6 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcc9f58f4 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd8915479 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe0275117 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe287ba1f sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe45fea84 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xeee49143 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x4522468a spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x59c7ad42 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x6e1b6866 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x864e1a32 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xb5a12392 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/ssb/ssb 0x03b73391 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x11436f13 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x1426f8d6 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x1bbd06af ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x25575d38 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x395662f7 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x3cf01961 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4a45fa31 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x4aa36156 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4fd08b5e ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x535b4162 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x7406817e ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x97420c45 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x980a6c4d ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc8d6391b ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xda3079de ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xe4748dd6 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xe58f3bee ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xf3f94c2b ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xf84f5727 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xf994a447 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0xfa35a7a1 ssb_device_disable +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x195cf162 check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2c242af0 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x3123c4f9 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x491418e3 comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fd9d954 comedi_set_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x56f8a5a7 comedi_reset_async_buf +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x786160f4 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8531c662 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x9380a2b5 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x93a09c29 comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x97320e03 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x992b10e4 comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xaca2c440 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb2d558a9 comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb83f6ad comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xcb92918a comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xe9021ffe comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x333224f8 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb102fbe4 subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb5aa36bf subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xf8d6c38a subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x4b43044a cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xc344be4c cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xe6764634 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x10577858 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1442d280 mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1ce69558 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x32c0f471 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x38d024e0 mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x47d81326 mite_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4bd9d705 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4df37c4f mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x57c58c49 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6e5e8073 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6fdbc8a4 mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x86ce6cd7 mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x8ff0e43c mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x917097c4 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa0d81e90 mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa52d4af0 mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xad55e4f5 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd70543d3 mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe867f53f mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfb3ba025 mite_list_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfd5776f3 mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x12258da6 subdev_700_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x8ae2ee89 subdev_700_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xcb81a3f9 subdev_700_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xe8d0e594 subdev_700_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x54fd0d6d comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x042d55f4 comedi_loglevel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0488ce0e comedi_get_n_ranges +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cad1c36 comedi_get_subdevice_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x13e3042c comedi_command +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x194eb4ae comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1c5555d9 comedi_cancel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1ec0e2d3 comedi_get_buf_head_pos +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x22318694 comedi_set_user_int_count +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x262e9c18 comedi_dio_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x370d69d5 comedi_dio_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3cb614fc comedi_data_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3db41e4f comedi_poll +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3de6a4a3 comedi_get_buffer_offset +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x409d3263 comedi_do_insn +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x51da786d comedi_register_callback +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x52769094 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x628ed463 comedi_get_n_subdevices +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x671c2623 comedi_get_buffer_size +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x696272c9 comedi_unlock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x826bd656 comedi_data_read_delayed +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8e199bbf comedi_perror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8fb4413e comedi_data_read_hint +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9b266320 comedi_get_krange +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9dde39b5 comedi_strerror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa0334b40 comedi_get_driver_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa094eab0 comedi_get_board_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa7c55c52 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xaa456501 comedi_mark_buffer_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb45b8b7b comedi_mark_buffer_written +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5396dad comedi_get_maxdata +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5c3ac2a comedi_map +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc4ec62b3 comedi_get_len_chanlist +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc7d949df comedi_lock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd2a9a259 comedi_get_version_code +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd46a9468 comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd48facbb comedi_command_test +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xddd89421 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe2208940 comedi_data_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe38c6fb4 comedi_unmap +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xed5731a4 comedi_get_subdevice_flags +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xefd0c778 comedi_fileno +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf17e03df comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf71581db comedi_get_buffer_contents +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x4849dfc9 cx25821_dev_unregister +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x55bffca6 cx25821_dev_get +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x5f3007e1 cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x84ef4777 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x8565e922 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd33be137 cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xdda2b874 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xf95d3ea0 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x253f3d14 vmbus_get_interface +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x44635f6a vmbus_child_driver_register +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xdf1a5ef6 vmbus_loglevel +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xf96bb3e6 vmbus_child_driver_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x00e1205e iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x05f60456 iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x16850c5b iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x4975b94b iio_class +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x649e4bdc iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x68e561a8 iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x8754ee15 iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xa9f4b08e iio_free_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb72c3726 __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xbc3c2cef iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcb842df9 __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe9cef7c8 iio_allocate_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xea831a6b iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xedd114db iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xfcfb4aae iio_free_idr_val +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x155f13fc variax_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x32b88d66 variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x50bec3d7 pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xb3006079 pod_remove_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ac15740 vme_new_dma_list +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x18c61a45 vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0x20313cfa vme_unregister_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x3ac85565 vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x3e79508a vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x42697360 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0x43e2f154 vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x441f8dcf vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x5c9113e0 vme_bus_type +EXPORT_SYMBOL drivers/staging/vme/vme 0x6666140f vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7754663b vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x828f3fcb vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x87026fd7 vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0x9d279035 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xa09d045f vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xacafb748 vme_unregister_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xb024aabf vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0xb182c22e vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xb4b22e63 vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xbc632e43 vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xcc5b0af0 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0xce6dea9f vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xda8644df vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe61b1e0b vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xf1b1bb11 vme_free_consistent +EXPORT_SYMBOL drivers/telephony/ixj 0xf317821c ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x0668f13e phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xae05bf9a phone_register_device +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x573019ee usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x60f5c0e0 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xfb2939e5 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x71b8039d sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x50c1ff84 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xb85582c9 usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x445669b5 lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0xb6ca68ea lcd_device_register +EXPORT_SYMBOL drivers/video/console/bitblit 0xef7e812b fbcon_set_bitops +EXPORT_SYMBOL drivers/video/console/font 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL drivers/video/console/font 0xbb99125c get_default_font +EXPORT_SYMBOL drivers/video/console/font 0xf7584a9c find_font +EXPORT_SYMBOL drivers/video/console/softcursor 0x9a417d5e soft_cursor +EXPORT_SYMBOL drivers/video/console/tileblit 0x1a8e8220 fbcon_set_tileops +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x8e84bb30 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x9a0c8b95 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xbab3a0cb cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xdc680a39 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/display/display 0x4a368e2d display_device_unregister +EXPORT_SYMBOL drivers/video/display/display 0x4d297708 display_device_register +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0xdf4a67b1 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xb0910d2c g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xd827c4e1 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xfe5868e3 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x358c5f17 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x8483ce06 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x9e56a990 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xbc3925ba DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x8d972141 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x7b261626 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x04c2b68a matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x16acef85 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x2ece801d matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x57ac6bb1 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x41883ef8 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xf05e9176 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x0a5f42b7 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x3ee00ee6 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x578f8252 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xa427c7e6 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xfa611a47 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/output 0xb6246a13 video_output_unregister +EXPORT_SYMBOL drivers/video/output 0xda86c6dc video_output_register +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x075e9a91 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x2c9cd06a svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x2cc899bb svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x2e7e48fc svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0x37d9160e svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xb85fa5c6 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xbfb27638 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0x18323d91 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x677019fa sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xbb00e687 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x13b00025 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x5be93165 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0261b073 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0ed22a33 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x17543457 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x5918c1d5 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x33f429ac w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0x45249a4c w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x4a849437 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xa931732e w1_register_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x02b180d6 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x07ae6098 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x6030c8ff config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x7994fd20 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x969742f2 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0xa0683287 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0xa9468e4c config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xa94e67ec configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xb2bf4352 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xe2ea1113 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xf11e92b0 config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xf17ac4dd config_item_init +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x101abdb0 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x10c27fdd fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x1806a96b fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x2db1c1be fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x2dbac499 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x3ddf9970 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x3e1472bc fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x3fd6b21e __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x527c04ff __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x535832c7 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x5c7fd832 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x5d29f90e __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x5e98b453 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x63f96884 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6660a3d6 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x688381ba __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x72ec38c5 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x7a70dd12 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x9e4c0a34 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xa212b32a __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa397884b __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa6a4b698 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xb671cbd0 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xe1fdd0b9 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xe83420fd fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xf07794d7 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0xf8796eb9 __fscache_unregister_netfs +EXPORT_SYMBOL fs/nfsd/nfsd 0x1f573533 nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x96ce9bb4 nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0xdb389aec nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/quota/quota_tree 0x310b8baa qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x367284e0 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x7b58cbe5 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x88e499e2 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xe2324631 qtree_entry_unused +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x5e62e13f make_8023_client +EXPORT_SYMBOL net/802/p8023 0x9150e1f2 destroy_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x1a2a2624 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x201c6144 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x244c6d40 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x2b560613 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x38f39f72 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x3da35774 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x3e84e9ef p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x3ecba9e3 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x44077666 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x49905c52 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x5689b7b2 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x5e0ef374 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x61852dea p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x683efc21 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x6c5e479c p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x8e088d6b p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x9054fcd5 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9f6bbd89 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xafe03423 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xb4f26c81 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0xbaa17b44 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xd0af5654 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xea21f917 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xf19f0f14 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xf7244f2f p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xfd064a1d p9_client_auth +EXPORT_SYMBOL net/appletalk/appletalk 0x22258d27 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x8ec47fe6 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0xd77612ca atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0xf63120e0 aarp_send_ddp +EXPORT_SYMBOL net/atm/atm 0x17b9ed86 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x25edc931 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x36bcb63e atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x50b18ef9 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x6d1ced27 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xb3b97e81 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0xbc325ea1 atm_charge +EXPORT_SYMBOL net/atm/atm 0xbf1dadb3 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xd6d14090 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0xe2e13859 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xfaa1da35 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xfbdad4d1 register_atm_ioctl +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x5fc6280f ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x773f8490 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x77a5c84a ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x81f13e31 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x820bbce5 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xa02b53ea ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0xb33ffbca ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0xb525bb9a ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xd6967387 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0xffe5c99f ax25_linkfail_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x046aab65 hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0b7dd1be hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x12ddf2d6 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x15891727 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2dc6bae1 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3e2baae9 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x67af465f hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6cc6036b hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6d9e94c9 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x71887347 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7404d8fc bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x85143a49 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e02db61 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e54a85f hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9523aab5 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa9a691fa hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb7846c1d hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc72397ee hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc7ebf33c bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xca3bef88 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xce9873e9 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xda65b393 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0xda8d84c5 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe4ccee6e hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0xed0c9778 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xeededbe5 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0xef23d1e6 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf2af6105 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf6602c18 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf89d3ca6 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfbec2d63 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x5b0939ff br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x26f8e87c ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x9a13867e ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xce26b16a ebt_do_table +EXPORT_SYMBOL net/can/can 0x0e6404e2 can_proto_register +EXPORT_SYMBOL net/can/can 0x43080ba3 can_send +EXPORT_SYMBOL net/can/can 0xa54c0046 can_proto_unregister +EXPORT_SYMBOL net/can/can 0xd490d849 can_rx_register +EXPORT_SYMBOL net/can/can 0xd723a6aa can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x3a36523f ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x87cdb72e ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x989c068b ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xa6220518 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xbd444545 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xcaee2828 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xd67e1f7f ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x0f420a44 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0x48cc4b29 wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0x7936d00d wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0xaa0b2f80 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0xeb37047a wpan_phy_alloc +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x03c39c96 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x34649365 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x602d03ff arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x7e6825cd ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xa1e3ac59 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xd4e31bc3 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x01f89bad nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x28e58e95 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x512b0771 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8be4b337 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8f931492 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xbf1011ca nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xeb79fb24 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x18e36929 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xdaedbe22 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00588bc5 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa6b485cd ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa780e5e2 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xed8479fd ip6t_register_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x4d7dbb5e xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0xa3cb7422 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x1ef52eb7 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x64edc30d ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x667ae229 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7a780314 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xacfa0e64 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xe3473166 ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xee940080 ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xfb0bc07e ircomm_data_request +EXPORT_SYMBOL net/irda/irda 0x01d1fcdb hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x05555e7a irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x072e026f irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x13f32063 irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x2e19da70 irttp_dup +EXPORT_SYMBOL net/irda/irda 0x300ced22 iriap_open +EXPORT_SYMBOL net/irda/irda 0x3462950f hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x4ea6dec6 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x54dbb92e iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x5eeff5fe irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x6758f8ac irias_new_object +EXPORT_SYMBOL net/irda/irda 0x68b7447c hashbin_find +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6cd2053b async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0x6e9902d3 irlap_close +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x74494592 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x747d6779 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x7621e908 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x76243bc9 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x781e2db5 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7a57b6f3 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x7ba9df42 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0x8b64734b irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x8bf86bf6 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x8cb815a3 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x8f9652b7 irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x955b5c30 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9ac0813b irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x9c4aaac0 iriap_close +EXPORT_SYMBOL net/irda/irda 0xa92845d5 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xaf81ee32 irlap_open +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbcd69308 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc14334f9 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0xc14e9b6a hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xca1ec2eb irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0xcd41236c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xd7172ff4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xd8bfb6d4 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe4867829 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xe5260e0e irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xec41fe7f irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf7071d73 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xfaefc5ca proc_irda +EXPORT_SYMBOL net/lapb/lapb 0x1aaa1067 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x4b399865 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x4f97a6a3 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x90c3e5ce lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x927cc3e7 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x943adaec lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x9dca436c lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0xee113465 lapb_data_request +EXPORT_SYMBOL net/mac80211/mac80211 0x0aa617e0 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x0b2b4fd4 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x11c06658 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x14005c7e ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x16263738 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x18ed58e6 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x31840b52 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x3a92b0af ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x47675f8f ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x48d89aea ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x608a7aba ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x67276eca ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x6a401d76 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x6c9f12e8 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x6cd798c2 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x72b9e248 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x899141c8 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x8a80e9ec ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x8add7fd8 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x8c22b01f ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xa09cdacc ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xa6c86ee0 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xb19ce503 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xc3845997 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc545b0de wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xce00c3be ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xcfb3ac93 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xd383f021 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd50c7b8c ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd8dae7e3 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xdd4ab08b ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xdf7d250b ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0xe7974b09 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xe97cd627 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xee7fd0e5 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xef970cd5 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf383dda6 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xf8004953 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf83c0d5e ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xfc3386ce ieee80211_wake_queues +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x236b906f register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x30423f2f register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x47e771f4 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4ab9e154 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x594ffcfc ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x752a8c92 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x82c2ab91 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x99c34913 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd70e3373 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd7916025 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe6d027ed ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x851ff45e __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x94817f50 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x5b477cf2 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x1d74a21f xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x34ddae10 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x6c127121 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x7854a06a xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x85204710 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x9b4a69af xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xaf98022e xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc239f80e xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcc3f9666 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xf04e2902 xt_register_targets +EXPORT_SYMBOL net/phonet/phonet 0x2d605c8c phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x383b0b4c phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x38647342 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0x5f706732 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x67043f9e pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x9e9feb6d phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xa0ac7f72 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xabcc49c0 pn_skb_send +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x03c7a4ff rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x05275bf4 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1dc56949 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1e72e239 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x21673b15 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x24e75972 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x36d44633 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x55cb227a rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x664d324f rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6b1c66c5 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x75f3dd20 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8e5c26de rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa63af943 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe7669fdf rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfcd68ca3 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/sunrpc/sunrpc 0x48413c54 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x1b51330f tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x2c99d72e tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x36955035 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x3c063c6d tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x56e52bc1 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x76d3708e tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9adee8fa tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xa1f01af7 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xa936a24b tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xb565126a tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd12e6fc2 tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe48f2c93 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xfcd97799 tipc_reject_msg +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0c504324 register_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wimax/wimax 0xe2a0b0d2 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xf70c172d wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x072e3651 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x192c332d cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x293d3809 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x345de8d3 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x43cad34b cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x4825662f cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x4b5718a7 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x4f3f7fad __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x54e66fb2 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x58d8e67b wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x5cd74554 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x5ce8ddbc cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x60b26dbc wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6cadd6ae cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x731aea55 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x73a38180 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x74fb442b ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x77665565 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x7b27db17 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x7c74c301 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x9815cb0a cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa591490a cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xabb76d0a wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xbbbdc7d2 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xbf2dfc70 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xcdc1591a cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xce4176b1 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xd5b061be cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xd8d510ba wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xdbb77ff5 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xe3c6ad8e wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xec0719fd cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xed761bd8 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0xf8d1b06b regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xfbff9402 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xfc9cdb9b cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/lib80211 0x1bbff969 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x264ac0f8 lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x8c877de4 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x8d1d7491 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x8e671760 lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x9af551b7 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xbb8a17ee lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xf49a15c2 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0xf8f9396b ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x7f39d310 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8471b3e4 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x855d3b19 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8a021c52 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xd336e781 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x231a1e00 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x7a50a3fb snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x17c15809 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x4ad3f518 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x62384d3a snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8a348811 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9df7af8b snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc482499d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd9072e1a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe6df29c7 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0xd92c2b22 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x124b795a snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x12ae0031 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x1458f2d7 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x22d7a9c3 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x29e10e98 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x2adb9bf7 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x316d9d78 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x4111dffa snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x47c95979 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x574d143d snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x5782b328 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x5a2dcbab snd_info_register +EXPORT_SYMBOL sound/core/snd 0x5d24cbb4 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x5dd2c175 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x5e1e0994 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x5e8b5c2b snd_device_register +EXPORT_SYMBOL sound/core/snd 0x678de0a4 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x6e928d7f snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x703c58b5 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x72e814cb snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x799b36ed snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x80a03360 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x85df3974 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x8958d67c snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x89fa91c2 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x8af7e0bd snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x8c1642e9 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x94796797 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9fc99832 snd_component_add +EXPORT_SYMBOL sound/core/snd 0xa3d68b83 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xa6d28387 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xadeb8289 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xb185f7dc snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xb2102669 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbbc7fa13 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xbdb905af snd_cards +EXPORT_SYMBOL sound/core/snd 0xbf852022 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0xce1848dc snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xd398fee9 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xd668cdd6 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0xd8f13875 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xe908f171 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xedd6f4ae snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xefdfef7b snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xf05fa561 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xf3a8d1fd snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xffe4bc24 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd-hwdep 0x72b0a704 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x36766598 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x59186e2f snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8cf0413f snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x935d8f7c snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc01bdc60 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x05303fbc snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x07660525 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x07de3b7f snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x08075792 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x15234f30 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x1785ea3c snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x22c8d27e snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x2f264bb3 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x43e803ce snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x4e3a76fb snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x61b1da8f snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x64b6a431 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x67b69a72 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x699db44a snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x6b68ef74 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x6e8f04e5 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x7538f6a7 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x7efc9076 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x823a35ba snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x84f2a8d8 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x88cc66cc snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x8d1a61d6 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x951742e3 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x9689dfc2 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x987a7872 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x988992f0 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa6e124f4 snd_pcm_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbb7f4784 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xc3dff191 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0xc42401c7 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xc94e3e54 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd1f38939 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0xd3024ef5 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xd4b7fe93 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd6ae6942 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0xd74db5b0 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xed908718 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf3a2c085 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0xfa0318e0 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xff1359ab snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x005d8dad snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1bbcf93c snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2b6ee3f1 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x44908c8e snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x57f7d284 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6552d92f snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x72dade30 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7ac98320 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x80945298 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81da3e30 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81e0ffba snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8890c32d snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x890f2a9c snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa6ba2fc4 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcc3e445d snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdf56a5ab snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdff22b88 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-timer 0x2156e8fe snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x42cc5d83 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x4a8ecfa1 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x5d319a42 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x662ece18 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x719a7580 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0xb17be768 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xb27a24bd snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xb8d25857 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xc1623df0 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xcb0afa45 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0xd938754c snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xf26641eb snd_timer_pause +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x566a6150 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00f81126 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x35c3670e snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3b8f6a67 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x45d13899 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa2daad62 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa5d79340 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb17ce3bb snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xe1a712e0 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf7a73b9f snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x03aeee43 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x21b58c19 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x25c282db snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x38f541c3 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4ae72ed1 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4ef17e91 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x74d8a607 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x948848dc snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb7d21dd6 snd_vx_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00aca6be snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x025067cb snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x61c87e42 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x68b4f5a9 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x7be5987e snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x971e041a snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x104e1551 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1cd770ee snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2fecb286 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x3a89173f snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x4842da5b snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xd3b52022 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x4030abb8 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xaa2c31b1 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd1f84aad snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xe9df5cab snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xa81760a5 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xe232d5ab snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x42f56667 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xc90ddaeb snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x02d4a90c snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x3a656663 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x4f2eb9d2 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x8a9a683c snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xad195bdb snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1fea64bb snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x625f4b49 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x8865c1c3 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xce244789 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdb8096b7 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdc542f16 snd_i2c_bus_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x0f3529d7 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x16708041 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x349927a0 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x415e41bc snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x447c98f9 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5ec4a8a8 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x878d5360 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xdec8ef83 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe5c56d50 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xf65236f5 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x2fcc205f snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x56024e5f snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xd9a180da snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/oss/ad1848 0x26c427ee ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x55262c70 probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/ad1848 0xc90eba24 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xee4618f2 ad1848_init +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd84422f7 attach_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd9ec5db4 probe_mpu401 +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x669ccc14 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sb_lib 0xee76d070 sb_dsp_init +EXPORT_SYMBOL sound/oss/sound 0x04072388 mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1871a34a sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x380fcc06 audio_devs +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x58e1ebc0 midi_devs +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xc7de6f7c synth_devs +EXPORT_SYMBOL sound/oss/sound 0xca5050ab sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xe8ba6221 sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x8bd8fd0d probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x31e28dd3 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x31ee2e99 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x45484a54 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x45da3c01 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x47ad350a snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x57b2de7a snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6fd1846c snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7b689200 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7cb20e5f snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7cee8a5d snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x86596315 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x900d650a snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9c0de725 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9dc11608 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd3fe5904 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd8f9a6e0 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe97c0a6a snd_ac97_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x053ba370 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x761a20e7 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x87a72723 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x94e4fc30 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9628f8ed snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xaf6dd64b snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb451792c snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd25307a3 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xec6423a9 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x3f84d2ac snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x29658af6 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x66bfee40 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xe287bf5c snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x0ff7ad7c oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x265a22cd oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x308fdf5d oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x4eaa68ae oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x60e6e4ec oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x687f6c35 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x693cb778 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x75b52039 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x8986b5c0 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x932b225d oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9fd6dfa9 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xae74dece oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb7d09ca3 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb9e1aae5 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xca10025a oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xd319cd00 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xeedcd625 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xef136c67 oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xefd06474 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf8d53d9f oxygen_write_spi +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9f3a543e snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9f98c5d3 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa194b82b snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa66f4d04 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xd9db6dba snd_trident_alloc_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x2c9a3ecb uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x4f42020c register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x525753af register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x538927c9 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x82dfb309 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xe369d930 sound_class +EXPORT_SYMBOL sound/soundcore 0xf8edc3d2 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x3ea829aa snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x4e0a8b39 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x7834e559 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xbed9c9f5 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xdc9299fa snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xf7c0728e snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/snd-util-mem 0x098f91ce __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x51d36bb0 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5b52f579 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x97a0df3e snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xabbc5c85 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xc5576c35 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xd3e077d4 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xeba0a034 snd_util_memhdr_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x4332e3b7 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x0f85f924 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x53894771 dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x54a2537e dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x979e4403 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xc3023783 dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xe652cf9b dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x470777f4 lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xea135a15 lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0008e931 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x002c1e8e tcp_disconnect +EXPORT_SYMBOL vmlinux 0x003fafdc inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x005b6baa jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x0067d01a scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x0073b751 set_pages_x +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x009d258f _write_lock +EXPORT_SYMBOL vmlinux 0x00a4af22 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00b00999 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00b8282c unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00bae3fb pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x00c4a6dd migrate_page +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00dfe1af jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00ea03ce mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00f46562 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00f8e357 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x00fe4f3f key_link +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x0111b3b2 __scm_send +EXPORT_SYMBOL vmlinux 0x01144d60 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x013e1c4c blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x0159be64 blk_remove_plug +EXPORT_SYMBOL vmlinux 0x01681d48 generic_setlease +EXPORT_SYMBOL vmlinux 0x01693cde pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x016a08fd rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x0186d073 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x019ed3d2 pci_find_device +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01b1d9ac mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x01c17f7d journal_destroy +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e0e4e3 skb_over_panic +EXPORT_SYMBOL vmlinux 0x01e5172b uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x0216287e skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x023b8839 arp_create +EXPORT_SYMBOL vmlinux 0x023c3969 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x0256389f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0278d455 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x02872eb5 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x0298d368 kobject_init +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02b3ffea dm_table_get_size +EXPORT_SYMBOL vmlinux 0x02c068d6 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x02c40853 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x02c99064 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x031d38eb generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x033f8e69 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x036c0e6f bioset_free +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x037e90c5 set_disk_ro +EXPORT_SYMBOL vmlinux 0x03942016 d_alloc_name +EXPORT_SYMBOL vmlinux 0x03b22a3b vfs_mkdir +EXPORT_SYMBOL vmlinux 0x03b56d2e swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03c5c0a3 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x03fe5336 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x0417fe32 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x041dd881 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x041dd9a7 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0429743b lock_fb_info +EXPORT_SYMBOL vmlinux 0x04369e19 netpoll_setup +EXPORT_SYMBOL vmlinux 0x04403792 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x04648d83 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x049434a0 may_umount_tree +EXPORT_SYMBOL vmlinux 0x04b85123 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x04d073c5 get_io_context +EXPORT_SYMBOL vmlinux 0x04d4b8e3 poll_initwait +EXPORT_SYMBOL vmlinux 0x04d73aa9 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x053f46cf register_netdev +EXPORT_SYMBOL vmlinux 0x0553945e __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x05625922 dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0x05664c22 phy_print_status +EXPORT_SYMBOL vmlinux 0x058c2635 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x05916e54 misc_deregister +EXPORT_SYMBOL vmlinux 0x05bc543c handle_sysrq +EXPORT_SYMBOL vmlinux 0x05e28d43 __first_cpu +EXPORT_SYMBOL vmlinux 0x05ebb931 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x05fb383f seq_open +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x06560429 ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0x067457db __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x068c7263 ioremap_cache +EXPORT_SYMBOL vmlinux 0x06a3d21f pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06c5fe6e scsi_device_put +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06eac31c vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x0710bd95 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x072c70a9 mntput_no_expire +EXPORT_SYMBOL vmlinux 0x073dfa12 generate_resume_trace +EXPORT_SYMBOL vmlinux 0x0745c706 scsi_host_put +EXPORT_SYMBOL vmlinux 0x077cd77c skb_dequeue +EXPORT_SYMBOL vmlinux 0x0796c6b9 skb_put +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07bb3697 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x080e6700 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x0817b25d scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x0824d939 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x082e06dc vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x08770b46 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x08810708 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x088227f4 sk_filter +EXPORT_SYMBOL vmlinux 0x08ca5b89 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08f2498c qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x08f61d1d cont_write_begin +EXPORT_SYMBOL vmlinux 0x09000d7f invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x09253410 mmc_release_host +EXPORT_SYMBOL vmlinux 0x0933aae1 efi_enabled +EXPORT_SYMBOL vmlinux 0x09408568 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x094e7858 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x098431ba acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c64582 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09db5c4c kset_unregister +EXPORT_SYMBOL vmlinux 0x09e89daa ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x09ef9b44 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x0a1665db kthread_stop +EXPORT_SYMBOL vmlinux 0x0a170151 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a2a3890 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x0a4c45c4 phy_detach +EXPORT_SYMBOL vmlinux 0x0a512320 pipe_unlock +EXPORT_SYMBOL vmlinux 0x0a5436e0 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x0a5aa16e neigh_table_clear +EXPORT_SYMBOL vmlinux 0x0a5d2120 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x0a9b102c framebuffer_release +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0aee7aba kill_pgrp +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b3af3ef netif_carrier_off +EXPORT_SYMBOL vmlinux 0x0b52eb65 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x0b53967b blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x0b5fd193 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x0b6f8f08 tty_register_driver +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b83e30f kmem_cache_size +EXPORT_SYMBOL vmlinux 0x0b969dbb phy_start +EXPORT_SYMBOL vmlinux 0x0bb5074c inet_shutdown +EXPORT_SYMBOL vmlinux 0x0bbecd93 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x0bcbb434 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x0be44b3a blk_integrity_register +EXPORT_SYMBOL vmlinux 0x0beb3dac uart_match_port +EXPORT_SYMBOL vmlinux 0x0c3723ec tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x0c3efe93 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x0c502002 rwsem_wake +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c776f38 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x0c85af11 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c977ec3 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb27116 sock_i_ino +EXPORT_SYMBOL vmlinux 0x0cb8dce3 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x0cf5d82d dm_table_put +EXPORT_SYMBOL vmlinux 0x0cf905a9 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x0d13c946 ht_create_irq +EXPORT_SYMBOL vmlinux 0x0d15356c linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x0d26a76d _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0d2bc420 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x0d3925ab agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d547642 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dae9f06 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x0e0f48f9 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x0e249988 block_truncate_page +EXPORT_SYMBOL vmlinux 0x0e3d72ad atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e5d4492 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x0e670921 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x0e7d05f0 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x0e83fea1 del_timer_sync +EXPORT_SYMBOL vmlinux 0x0e95ecfb scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x0ee0d396 read_cache_page +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f4399eb alloc_disk +EXPORT_SYMBOL vmlinux 0x0f5ccb9b genphy_suspend +EXPORT_SYMBOL vmlinux 0x0f6d7b28 freeze_bdev +EXPORT_SYMBOL vmlinux 0x0fc3444e phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fe2b361 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x0ff5ffad mmc_detect_change +EXPORT_SYMBOL vmlinux 0x100824dc neigh_destroy +EXPORT_SYMBOL vmlinux 0x10122b04 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x101461f6 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x1016faaa generic_write_end +EXPORT_SYMBOL vmlinux 0x102237e9 mutex_unlock +EXPORT_SYMBOL vmlinux 0x1037876b mdiobus_write +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x1070c0f5 register_exec_domain +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x107d5757 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10c85768 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x10daeadb journal_init_inode +EXPORT_SYMBOL vmlinux 0x10dbfe10 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f01f44 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x110e3d76 __breadahead +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x112bf23c bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x113afb6d phy_register_fixup +EXPORT_SYMBOL vmlinux 0x1144cf1c neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x115c0d1b nla_reserve +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x11746e1f flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x118b424f proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a18b14 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x11a5f610 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x11cec3af dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x11ed082a acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0x124be00d dcache_readdir +EXPORT_SYMBOL vmlinux 0x128cb519 proc_symlink +EXPORT_SYMBOL vmlinux 0x12d3a7c6 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x12ef3330 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x12f10736 udplite_table +EXPORT_SYMBOL vmlinux 0x130bb067 lock_may_read +EXPORT_SYMBOL vmlinux 0x1328ec48 simple_fill_super +EXPORT_SYMBOL vmlinux 0x133abaf5 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x134816fa kset_register +EXPORT_SYMBOL vmlinux 0x1366f59f locks_init_lock +EXPORT_SYMBOL vmlinux 0x1378e714 acpi_video_display_switch_support +EXPORT_SYMBOL vmlinux 0x137dccbb __scsi_put_command +EXPORT_SYMBOL vmlinux 0x138a78d1 set_current_groups +EXPORT_SYMBOL vmlinux 0x13f3090c journal_abort +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x13f6e7eb sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x13fd0fe4 vfs_link +EXPORT_SYMBOL vmlinux 0x13fdd87f security_path_rmdir +EXPORT_SYMBOL vmlinux 0x140b4605 set_anon_super +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x1439573c set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x14492533 km_report +EXPORT_SYMBOL vmlinux 0x14a2116a compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x14af0cf7 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x14d38fd1 km_state_notify +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1552efad neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x15949a77 tr_type_trans +EXPORT_SYMBOL vmlinux 0x15d2d132 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x15d4ef31 d_delete +EXPORT_SYMBOL vmlinux 0x15e374ce nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x15ef2dd9 kfifo_free +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x1632472a tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x1661c569 pci_release_regions +EXPORT_SYMBOL vmlinux 0x1675606f bad_dma_address +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x16a35878 _read_unlock +EXPORT_SYMBOL vmlinux 0x16c8bd99 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x1706713c genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x171002ef __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x171e324a scsi_register_driver +EXPORT_SYMBOL vmlinux 0x17a2c3a2 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17d05689 create_mnt_ns +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x1803b3e8 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x1817dcca elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x181b6ff2 mempool_resize +EXPORT_SYMBOL vmlinux 0x18251c09 netlink_set_err +EXPORT_SYMBOL vmlinux 0x183f9e93 scsi_device_get +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x18407883 find_vma +EXPORT_SYMBOL vmlinux 0x18439b1d jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x1850849c pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x185dbd52 acpi_bus_add +EXPORT_SYMBOL vmlinux 0x186d64a4 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x1878da50 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x18818029 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18a26ea1 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x18a949a7 end_page_writeback +EXPORT_SYMBOL vmlinux 0x18b46266 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x18b72573 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x18bb68d1 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x18be65b8 backlight_device_register +EXPORT_SYMBOL vmlinux 0x18d34965 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x18d76cd5 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x18dae924 request_key_async +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x18feac05 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x190c3d2b dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x1955215d __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x1958503e tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x196b7d24 audit_log_start +EXPORT_SYMBOL vmlinux 0x196faf24 generic_write_sync +EXPORT_SYMBOL vmlinux 0x19718dad xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1985ed3c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x19997e7d genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19b37ae9 __ht_create_irq +EXPORT_SYMBOL vmlinux 0x19bc4268 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x1a15874b qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x1a2188d7 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x1a33fee1 pci_disable_device +EXPORT_SYMBOL vmlinux 0x1a3e2a1f kernel_listen +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a73d440 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x1a75caa3 _read_lock +EXPORT_SYMBOL vmlinux 0x1a7d08c5 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x1a84a1ca con_copy_unimap +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1a8ab648 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x1ab15135 bmap +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b3056f5 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x1b60c76e ip_route_output_key +EXPORT_SYMBOL vmlinux 0x1b62fdc8 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b84585e set_bh_page +EXPORT_SYMBOL vmlinux 0x1b89419f add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1beed42b pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x1bf1acb6 destroy_EII_client +EXPORT_SYMBOL vmlinux 0x1c0e89c3 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c25fabb jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x1c3817af uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x1c5eb33a kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x1c73c4c7 kill_litter_super +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c918759 neigh_table_init +EXPORT_SYMBOL vmlinux 0x1c994a38 backlight_force_update +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce56af7 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x1ced4407 genphy_read_status +EXPORT_SYMBOL vmlinux 0x1cefe352 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1d06e6d4 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x1d079d26 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x1d1d34fb agp_bridge +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d31cffe nf_afinfo +EXPORT_SYMBOL vmlinux 0x1d663b7a agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x1d77785b phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x1db7706b __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1de87f71 lock_rename +EXPORT_SYMBOL vmlinux 0x1de8d686 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x1df0a1b9 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x1e046719 iunique +EXPORT_SYMBOL vmlinux 0x1e0c2be4 ioremap_wc +EXPORT_SYMBOL vmlinux 0x1e0c463e insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x1e278b10 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x1e2e427f cpumask_next_and +EXPORT_SYMBOL vmlinux 0x1e381251 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x1e482980 per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e7dbbc7 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x1eaeea81 vfs_fsync +EXPORT_SYMBOL vmlinux 0x1eb36c32 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x1ebfa598 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x1ec94d6a bio_copy_user +EXPORT_SYMBOL vmlinux 0x1eee222f nobh_writepage +EXPORT_SYMBOL vmlinux 0x1efdde60 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f18579e mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x1f208040 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x1f27d6d7 _write_unlock +EXPORT_SYMBOL vmlinux 0x1f351c6b blk_recount_segments +EXPORT_SYMBOL vmlinux 0x1f590b5f swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x1f62b436 skb_clone +EXPORT_SYMBOL vmlinux 0x1f6f63f0 cad_pid +EXPORT_SYMBOL vmlinux 0x1f757a2d pci_enable_wake +EXPORT_SYMBOL vmlinux 0x1f75e552 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x1f7907d0 follow_up +EXPORT_SYMBOL vmlinux 0x1f7f72d6 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x1f8d0c6f __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x1fb8fdb5 set_device_ro +EXPORT_SYMBOL vmlinux 0x1fbd3fcd tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x1ff8fd08 do_munmap +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x20092385 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x200effc8 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x20421c1a pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x2054901c should_remove_suid +EXPORT_SYMBOL vmlinux 0x2055042d tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x207aaefd sock_no_connect +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x20b1458b __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x20eadeb6 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x20f9322a idr_pre_get +EXPORT_SYMBOL vmlinux 0x2123f7b2 generic_make_request +EXPORT_SYMBOL vmlinux 0x21420853 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x216cd286 __blk_end_request +EXPORT_SYMBOL vmlinux 0x2183b118 get_disk +EXPORT_SYMBOL vmlinux 0x218564fd is_bad_inode +EXPORT_SYMBOL vmlinux 0x21c3e4f2 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x21d50a51 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21e5679c copy_user_generic +EXPORT_SYMBOL vmlinux 0x22134664 nf_reinject +EXPORT_SYMBOL vmlinux 0x22191195 posix_test_lock +EXPORT_SYMBOL vmlinux 0x22220e04 create_proc_entry +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x22689f65 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x226d4cd2 unload_nls +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b5ea0b elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22e2bc9e dm_exception_store_create +EXPORT_SYMBOL vmlinux 0x22eaa879 simple_write_end +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x2342628c ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x23542918 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x235a5afd pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x235eb306 mutex_lock +EXPORT_SYMBOL vmlinux 0x236c8c64 memcpy +EXPORT_SYMBOL vmlinux 0x2373cb14 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x2374f44a bio_init +EXPORT_SYMBOL vmlinux 0x2385e61c mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x239c787a tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x23a4126e ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0x23b99e92 node_states +EXPORT_SYMBOL vmlinux 0x23c5a266 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23ca89be default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x23cab0b3 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x23d6ea45 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x23f5422d dma_pool_free +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x241536d0 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0x2427e7dc tty_check_change +EXPORT_SYMBOL vmlinux 0x2437d309 da903x_query_status +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x2467b6f8 proto_register +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x24765260 input_free_device +EXPORT_SYMBOL vmlinux 0x2490dc2f tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x24a0dce2 __break_lease +EXPORT_SYMBOL vmlinux 0x24d3f093 dev_driver_string +EXPORT_SYMBOL vmlinux 0x24e4bb01 down_write_trylock +EXPORT_SYMBOL vmlinux 0x24ead969 noop_qdisc +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250b70b0 tcp_prot +EXPORT_SYMBOL vmlinux 0x250fb172 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x25250aac blk_insert_request +EXPORT_SYMBOL vmlinux 0x25266d9c dst_discard +EXPORT_SYMBOL vmlinux 0x2530d3a2 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x2534f4b5 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x255097f3 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x256dae49 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25cef4c1 security_inode_permission +EXPORT_SYMBOL vmlinux 0x25ec1b28 strlen +EXPORT_SYMBOL vmlinux 0x2632393b blk_run_queue +EXPORT_SYMBOL vmlinux 0x266e4c9d dm_register_target +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x2694f44b nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x26d08e32 ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x26df231c fb_show_logo +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2727da5d _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x273f066e _write_unlock_irq +EXPORT_SYMBOL vmlinux 0x274a3ec1 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27aeea2b set_security_override +EXPORT_SYMBOL vmlinux 0x27b25349 cdev_add +EXPORT_SYMBOL vmlinux 0x27b35c51 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c33efe csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x27c4850a key_alloc +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27cf117f iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x2829e242 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x282c9cfe ip6_frag_init +EXPORT_SYMBOL vmlinux 0x285135e6 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x2877cad3 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x28a25eea xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28aa9d5e jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x28e205ce vfs_quota_on +EXPORT_SYMBOL vmlinux 0x2901035b neigh_parms_release +EXPORT_SYMBOL vmlinux 0x2906c21e set_page_dirty +EXPORT_SYMBOL vmlinux 0x291c72f6 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x292093f4 native_rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x294f35c5 sync_blockdev +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x2957695a compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x296356c9 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x297dc4df slow_work_register_user +EXPORT_SYMBOL vmlinux 0x29ab08f9 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x29ad2e86 prepare_binprm +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29c484d2 blk_make_request +EXPORT_SYMBOL vmlinux 0x29db5c48 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x29f6ce63 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x2a1d23ed pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x2a25ca34 inet_frag_find +EXPORT_SYMBOL vmlinux 0x2a2a440c unregister_filesystem +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a5cc228 d_alloc +EXPORT_SYMBOL vmlinux 0x2a88487e netdev_state_change +EXPORT_SYMBOL vmlinux 0x2a8efb83 agp_copy_info +EXPORT_SYMBOL vmlinux 0x2aa30ea0 iget_locked +EXPORT_SYMBOL vmlinux 0x2aeb2800 mempool_create_node +EXPORT_SYMBOL vmlinux 0x2af46b5d __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x2b0427fe generic_file_mmap +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b364359 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x2b91e7b6 arp_xmit +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2ba73482 vfs_readv +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb6fde2 __kfifo_put +EXPORT_SYMBOL vmlinux 0x2bdb82a9 read_cache_pages +EXPORT_SYMBOL vmlinux 0x2bdfc8c2 sock_register +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c285cbf arp_tbl +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c61368e ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x2c73d3f9 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x2c7fbe94 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x2c817ca2 module_refcount +EXPORT_SYMBOL vmlinux 0x2c830677 seq_path +EXPORT_SYMBOL vmlinux 0x2c842502 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x2c8d1980 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x2c9aa804 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x2cdc56bd ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x2cf53ba8 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x2d10b122 km_policy_expired +EXPORT_SYMBOL vmlinux 0x2d12c518 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x2d47b060 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x2d5528c9 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x2d5fa01f i2c_master_send +EXPORT_SYMBOL vmlinux 0x2d7530e1 save_mount_options +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2da1dcb1 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x2da80e2f starget_for_each_device +EXPORT_SYMBOL vmlinux 0x2dbafbe3 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x2dc4af0b input_unregister_handle +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2e06111d cpu_present_mask +EXPORT_SYMBOL vmlinux 0x2e1261fb ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e4281fe blk_put_request +EXPORT_SYMBOL vmlinux 0x2e448481 get_phy_device +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e89216f sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x2e8d9b44 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x2e92729c jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x2e97a729 idr_remove +EXPORT_SYMBOL vmlinux 0x2e9b9f73 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x2eb9a0e8 _read_lock_irq +EXPORT_SYMBOL vmlinux 0x2edb13f0 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x2f004d06 bio_map_kern +EXPORT_SYMBOL vmlinux 0x2f097a9b get_sb_ns +EXPORT_SYMBOL vmlinux 0x2f1082e6 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x2f1f51b8 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x2f57a875 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x2f96387c tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x2fa5a500 memcmp +EXPORT_SYMBOL vmlinux 0x2fb0cd60 input_get_keycode +EXPORT_SYMBOL vmlinux 0x2ff063b5 acpi_get_name +EXPORT_SYMBOL vmlinux 0x2ff387d4 security_path_symlink +EXPORT_SYMBOL vmlinux 0x2ffedf25 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x30226ddf agp_device_command +EXPORT_SYMBOL vmlinux 0x302b7c8f call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x3045168d sockfd_lookup +EXPORT_SYMBOL vmlinux 0x30530858 generic_write_checks +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x308427c4 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x30941924 vfs_write +EXPORT_SYMBOL vmlinux 0x309cb62a blk_unplug +EXPORT_SYMBOL vmlinux 0x30afa589 pskb_copy +EXPORT_SYMBOL vmlinux 0x30c5e4e5 load_nls_default +EXPORT_SYMBOL vmlinux 0x30cf4b33 find_get_page +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30f08754 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x30f62e85 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x310ca048 neigh_for_each +EXPORT_SYMBOL vmlinux 0x310dbe90 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x311fd4ba d_instantiate +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x314f6e8d scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x319a2a3d vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x31adac5c ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31ebadcd in_group_p +EXPORT_SYMBOL vmlinux 0x32029c8d register_8022_client +EXPORT_SYMBOL vmlinux 0x3218f806 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x32419890 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x32430f90 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x325155ac nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32d8e627 bio_put +EXPORT_SYMBOL vmlinux 0x32dca277 scsi_print_command +EXPORT_SYMBOL vmlinux 0x32e29e48 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x32fc0f81 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x334319f3 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x3350db80 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x3360d261 vfs_llseek +EXPORT_SYMBOL vmlinux 0x337ad9e4 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x3396ce02 cdrom_open +EXPORT_SYMBOL vmlinux 0x3398c0b2 stop_tty +EXPORT_SYMBOL vmlinux 0x339e93ab thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0x33b15fb6 ip6_xmit +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x33c055a0 module_put +EXPORT_SYMBOL vmlinux 0x33d92f9a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x33e2e5ce ___pskb_trim +EXPORT_SYMBOL vmlinux 0x34269ed5 dev_change_flags +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x3468d610 arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0x34777c69 genphy_resume +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34b46624 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x34b575e8 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x34e58e20 inet6_getname +EXPORT_SYMBOL vmlinux 0x34e6010e fail_migrate_page +EXPORT_SYMBOL vmlinux 0x35264aef elevator_exit +EXPORT_SYMBOL vmlinux 0x353bbc9c __bforget +EXPORT_SYMBOL vmlinux 0x3556df7a neigh_lookup +EXPORT_SYMBOL vmlinux 0x3582ed17 vfs_stat +EXPORT_SYMBOL vmlinux 0x359c42fb compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35dab00a pci_request_region +EXPORT_SYMBOL vmlinux 0x35f00c85 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x35f4dcf5 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x3616071e xfrm_register_type +EXPORT_SYMBOL vmlinux 0x3618879e eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x36281959 init_file +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x366493f1 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x3665108f acpi_bus_start +EXPORT_SYMBOL vmlinux 0x366e5c9e blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x368bcc06 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x3699fe27 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x36a28012 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x36a4b0e5 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x36be3dab poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x36da59fe ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x36dc863e vc_cons +EXPORT_SYMBOL vmlinux 0x36e02cd0 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x3701a196 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x37151b3d alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x3736c67a dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x376b7c6b xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x37b02f15 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37cd4bd6 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37debfbd scsi_scan_target +EXPORT_SYMBOL vmlinux 0x37f6924b sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x37f90953 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x37f9cfc4 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x38002b33 misc_register +EXPORT_SYMBOL vmlinux 0x380897e5 simple_statfs +EXPORT_SYMBOL vmlinux 0x38620105 mpage_readpage +EXPORT_SYMBOL vmlinux 0x3868ebb7 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x3872021d blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x3893a3a3 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x389ea5b3 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x38a9af09 send_sig +EXPORT_SYMBOL vmlinux 0x38b1d102 inet_listen +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38cab31c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x38cc7ad0 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x38f33bed dump_fpu +EXPORT_SYMBOL vmlinux 0x3929b805 single_open +EXPORT_SYMBOL vmlinux 0x3972e40c tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x3a066d96 thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x3a1190ef loop_register_transfer +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a39c214 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x3a3c6a8e simple_write_begin +EXPORT_SYMBOL vmlinux 0x3a59e38e llc_add_pack +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa1dbcf _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x3abf2a14 d_validate +EXPORT_SYMBOL vmlinux 0x3ac0bc2c xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3afbd807 sock_i_uid +EXPORT_SYMBOL vmlinux 0x3b149ed0 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x3b1e79a7 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b34f962 pci_select_bars +EXPORT_SYMBOL vmlinux 0x3b39e9e6 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x3b5028ea mmc_add_host +EXPORT_SYMBOL vmlinux 0x3b628b1f napi_complete +EXPORT_SYMBOL vmlinux 0x3b647c2d inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x3b6a20e2 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x3bc3807c swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x3bc8f6a4 i2c_transfer +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c0116f2 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c4432ca writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x3c4e5783 generic_removexattr +EXPORT_SYMBOL vmlinux 0x3c7227bf complete_all +EXPORT_SYMBOL vmlinux 0x3c8146e2 journal_errno +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cb8043f neigh_create +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cd5e89a journal_wipe +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cf20b6d __serio_register_port +EXPORT_SYMBOL vmlinux 0x3cf7c0e1 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x3d1963ff mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x3d1f89c2 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x3d24d3f4 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x3d4031ca __devm_release_region +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3d8bdce1 put_disk +EXPORT_SYMBOL vmlinux 0x3d8dd9e4 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x3d914580 inode_init_always +EXPORT_SYMBOL vmlinux 0x3d9ee9f0 clear_page +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da5eb6d kfifo_alloc +EXPORT_SYMBOL vmlinux 0x3da8dd61 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3dc0b361 mdiobus_register +EXPORT_SYMBOL vmlinux 0x3de1793f ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x3e1ab7b4 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x3e1bba00 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x3e1e3d7b inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x3e1f073d wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x3e219de6 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e337bc6 netlink_ack +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e7b79b1 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x3e9d1157 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x3eae64c5 mddev_congested +EXPORT_SYMBOL vmlinux 0x3ebfdbc8 fb_set_var +EXPORT_SYMBOL vmlinux 0x3ec1d14e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef41173 sock_wake_async +EXPORT_SYMBOL vmlinux 0x3ef61383 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x3f023ffa nf_log_unregister +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f0bb115 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x3f1899f1 up +EXPORT_SYMBOL vmlinux 0x3f269c2d tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f45cf4f scsi_execute +EXPORT_SYMBOL vmlinux 0x3f4a5670 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x3f50d091 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x3f78c614 unregister_netdev +EXPORT_SYMBOL vmlinux 0x3f88a4a1 security_path_mknod +EXPORT_SYMBOL vmlinux 0x3fa3b5d5 __destroy_inode +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fbd96a3 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x3fd8f600 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x3fda7aca md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x3fdde376 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x3fe7bf95 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x3fea569a ppp_input_error +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff2797d skb_pull +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x400f64f2 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x4011a055 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x4023f884 nf_register_hook +EXPORT_SYMBOL vmlinux 0x40470292 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x404bb846 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x40523c92 agp_free_memory +EXPORT_SYMBOL vmlinux 0x4056d5dd lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x405ff678 pci_enable_device +EXPORT_SYMBOL vmlinux 0x4085d039 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x408e6002 sock_no_poll +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40acc112 genphy_update_link +EXPORT_SYMBOL vmlinux 0x40b55b4b complete_request_key +EXPORT_SYMBOL vmlinux 0x40c350cc eth_validate_addr +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40cdb3d2 mutex_trylock +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x4113b67c rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x411858ce pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x41252516 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x416a35c5 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x41721052 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x41797065 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41937b36 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x41986722 __dst_free +EXPORT_SYMBOL vmlinux 0x41999109 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x419cfada sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x419d5893 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x41a9c68d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x41b45f7e pci_restore_state +EXPORT_SYMBOL vmlinux 0x41cf8e4a skb_unlink +EXPORT_SYMBOL vmlinux 0x41f91b25 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x4221f8ae netdev_set_master +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x4222adb5 blkdev_put +EXPORT_SYMBOL vmlinux 0x42420306 tty_write_room +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x42a4bdf2 in_egroup_p +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42c8de35 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x42d27676 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x42d71be2 kobject_set_name +EXPORT_SYMBOL vmlinux 0x42f695c8 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x42fe4b78 eth_type_trans +EXPORT_SYMBOL vmlinux 0x4300343e kthread_bind +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4303e67a find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x4327f0d5 memset_io +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x4350fc96 check_disk_change +EXPORT_SYMBOL vmlinux 0x435b566d _spin_unlock +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x437153dd rfkill_register +EXPORT_SYMBOL vmlinux 0x4380493b netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43b0c9c3 preempt_schedule +EXPORT_SYMBOL vmlinux 0x43c0f8ce skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43feb202 cdev_init +EXPORT_SYMBOL vmlinux 0x4415c43d __seq_open_private +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x441671aa ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x443240f9 uart_register_driver +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x44615c6a dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x4463ad56 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x449739f5 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44b9bceb page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x44d560e3 init_level4_pgt +EXPORT_SYMBOL vmlinux 0x44d6cf75 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x44deed08 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f4c408 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x45023668 cdrom_release +EXPORT_SYMBOL vmlinux 0x45195bf2 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x451b978e input_release_device +EXPORT_SYMBOL vmlinux 0x45284637 get_agp_version +EXPORT_SYMBOL vmlinux 0x453368c9 fb_find_mode +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x453d8161 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x45450063 mod_timer +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4568495c prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x458a8e3f devm_ioremap +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x459612f6 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x45d11c43 down_interruptible +EXPORT_SYMBOL vmlinux 0x45d55543 down_write +EXPORT_SYMBOL vmlinux 0x45e50f1f nf_log_packet +EXPORT_SYMBOL vmlinux 0x45fbf73d sock_rfree +EXPORT_SYMBOL vmlinux 0x46066e47 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x46085e4f add_timer +EXPORT_SYMBOL vmlinux 0x4621c021 pci_request_regions +EXPORT_SYMBOL vmlinux 0x465d5157 filemap_fault +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x466d0b8f bdevname +EXPORT_SYMBOL vmlinux 0x46805030 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0x46b0dc6f inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x46c47fb6 __node_distance +EXPORT_SYMBOL vmlinux 0x46da982b f_setown +EXPORT_SYMBOL vmlinux 0x46e67e04 submit_bio +EXPORT_SYMBOL vmlinux 0x46ea8cc2 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x46efdfc0 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0x472e9b7d rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x4747b0fe agp_generic_enable +EXPORT_SYMBOL vmlinux 0x47483a0d tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x4748a2c7 file_remove_suid +EXPORT_SYMBOL vmlinux 0x474e4821 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x476c17ad xfrm_lookup +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a17d1a dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x47e0e232 dm_get_device +EXPORT_SYMBOL vmlinux 0x47e12960 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x48133b5f xfrm_input +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x484ae8bc dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x484c5a1d km_new_mapping +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48739af4 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x487c210e tty_kref_put +EXPORT_SYMBOL vmlinux 0x48d09828 force_sig +EXPORT_SYMBOL vmlinux 0x48f7a8f8 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x48fa1a5f __netif_schedule +EXPORT_SYMBOL vmlinux 0x490a5097 security_path_rename +EXPORT_SYMBOL vmlinux 0x493a5e6a bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x494e3393 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x494f2d02 vga_put +EXPORT_SYMBOL vmlinux 0x4957b6fd sk_free +EXPORT_SYMBOL vmlinux 0x495ca37a netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x497cb038 pci_get_device +EXPORT_SYMBOL vmlinux 0x49da9a9a _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x49ddd9c6 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x49df39ce con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e5aebf pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x4a0b7189 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a727ace pci_scan_slot +EXPORT_SYMBOL vmlinux 0x4a87bd40 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x4ac2cf64 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4adeb27f blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x4af710e6 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b07e779 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x4b1f0a60 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x4b8b262e __neigh_event_send +EXPORT_SYMBOL vmlinux 0x4b8d21ee tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4ba5baa0 load_gs_index +EXPORT_SYMBOL vmlinux 0x4bb492b5 arp_find +EXPORT_SYMBOL vmlinux 0x4bb8bb00 scsi_print_result +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bda4fe6 d_path +EXPORT_SYMBOL vmlinux 0x4bdf028e idr_find +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1b965c gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x4c20ab11 task_nice +EXPORT_SYMBOL vmlinux 0x4c298b01 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x4c43b617 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x4c45d41f key_type_keyring +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4c55555d __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x4c6c0fe2 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x4c6e8501 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x4c6ff041 add_preempt_count +EXPORT_SYMBOL vmlinux 0x4c8c1276 register_quota_format +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4ce02f51 replace_mount_options +EXPORT_SYMBOL vmlinux 0x4ce0c3eb compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x4cfea5a8 mdiobus_free +EXPORT_SYMBOL vmlinux 0x4d0a9bc2 set_user_nice +EXPORT_SYMBOL vmlinux 0x4d0c1234 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x4d3e904c deny_write_access +EXPORT_SYMBOL vmlinux 0x4d7fa211 unregister_8022_client +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dd6ce0d set_pages_uc +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e08bd4e phy_attach_direct +EXPORT_SYMBOL vmlinux 0x4e100f60 _spin_unlock_irq +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e96d772 unlock_buffer +EXPORT_SYMBOL vmlinux 0x4e99c301 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x4eaa206a inode_permission +EXPORT_SYMBOL vmlinux 0x4ec3ddea bio_endio +EXPORT_SYMBOL vmlinux 0x4edc5a0f bio_add_page +EXPORT_SYMBOL vmlinux 0x4edccf72 is_container_init +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4edf8824 otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x4f00501b no_llseek +EXPORT_SYMBOL vmlinux 0x4f075c5a ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x4f1846f9 keyring_search +EXPORT_SYMBOL vmlinux 0x4f1b5978 remove_inode_hash +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f26b58d setup_new_exec +EXPORT_SYMBOL vmlinux 0x4f3e82a1 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x4f448dbd nf_register_hooks +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f7ef3c4 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x4f8194f6 proto_unregister +EXPORT_SYMBOL vmlinux 0x4f8888b3 block_commit_write +EXPORT_SYMBOL vmlinux 0x4fa02c98 input_close_device +EXPORT_SYMBOL vmlinux 0x4fb01ade call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x4fc84c90 netif_rx +EXPORT_SYMBOL vmlinux 0x4fcdefff blk_peek_request +EXPORT_SYMBOL vmlinux 0x4fd96ea1 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4ffe79c1 ilookup +EXPORT_SYMBOL vmlinux 0x5013c611 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x502dd74d xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x50405b06 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x5044a040 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x505a9239 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x505bb58e journal_update_format +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506bb98d bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x50866716 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x50b5cb2d idr_get_new_above +EXPORT_SYMBOL vmlinux 0x50c610d3 cdev_alloc +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x510060c8 llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0x510de4d1 security_path_unlink +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x511f9230 alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x514ce354 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x517fa1ef scsi_remove_host +EXPORT_SYMBOL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51f41a7b kfree_skb +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x52165f42 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x5232f908 blk_rq_init +EXPORT_SYMBOL vmlinux 0x524f4a0c dev_set_mtu +EXPORT_SYMBOL vmlinux 0x5252f304 __memcpy_toio +EXPORT_SYMBOL vmlinux 0x525b7da7 tcp_check_req +EXPORT_SYMBOL vmlinux 0x525d4565 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527f6186 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x5281f478 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x529c2129 mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52c185b4 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x52d5564d rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x530a641a i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x531347eb ppp_input +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x53264641 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x533f1d27 md_register_thread +EXPORT_SYMBOL vmlinux 0x535ed247 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x5393dcb5 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x5396c3ef tty_port_init +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53fd045a pcim_iounmap +EXPORT_SYMBOL vmlinux 0x540ff5df iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x5499d396 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x549c3cb3 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54b21796 dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0x54b74b39 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x55113583 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x552c9d55 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x5531234c thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x5535dff1 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x554099fc clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x554f0a48 groups_alloc +EXPORT_SYMBOL vmlinux 0x5553872c console_stop +EXPORT_SYMBOL vmlinux 0x5586005d get_sb_bdev +EXPORT_SYMBOL vmlinux 0x558e2e79 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55aa23ef scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x55b2cef2 open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x55bb2604 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x55e133ee bdev_read_only +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x56164644 skb_copy +EXPORT_SYMBOL vmlinux 0x562599fc drop_super +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x56383341 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x5661ba33 dquot_acquire +EXPORT_SYMBOL vmlinux 0x5661ed64 clear_inode +EXPORT_SYMBOL vmlinux 0x56954da1 tcf_register_action +EXPORT_SYMBOL vmlinux 0x56b133b4 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d8de46 bio_map_user +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x572a64c1 ip6_route_output +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57345947 bio_free +EXPORT_SYMBOL vmlinux 0x575257e0 register_cdrom +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x577c626c pipe_lock +EXPORT_SYMBOL vmlinux 0x57adf756 per_cpu__this_cpu_off +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57bcca48 journal_init_dev +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57ffde8c skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x5815f6b1 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x582636ef jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x5837e574 vmap +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x583c99f6 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x585dc23a cdev_del +EXPORT_SYMBOL vmlinux 0x586ecf19 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x58a0eb92 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x58bcb5cb ether_setup +EXPORT_SYMBOL vmlinux 0x58d0ec96 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x58e5c065 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x591d67a3 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x594cde62 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x5955de59 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59e70283 tcp_child_process +EXPORT_SYMBOL vmlinux 0x59e7e922 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x5a2191ac i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x5a26e9f8 pnp_is_active +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a57d155 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a6252cf dm_table_event +EXPORT_SYMBOL vmlinux 0x5a71bd9b pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a91ebf0 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x5aa9cbe9 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x5ab1efb9 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x5abc9f87 __scm_destroy +EXPORT_SYMBOL vmlinux 0x5ac2a911 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5ad461f9 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x5adecb22 write_cache_pages +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b27bf00 devm_free_irq +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b5a2a32 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x5b5c36ed scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x5b6a326c fb_set_suspend +EXPORT_SYMBOL vmlinux 0x5bae2eac acpi_extract_package +EXPORT_SYMBOL vmlinux 0x5bb80a00 generic_writepages +EXPORT_SYMBOL vmlinux 0x5bbda4e4 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x5bbfafb9 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x5c26421c acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x5c2f7baa i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x5c5b2d12 per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0x5c72df8f tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x5c8670d3 scsi_add_device +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5cc93a4f unregister_key_type +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d55a821 vfs_writev +EXPORT_SYMBOL vmlinux 0x5d5823f4 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x5d61bddb eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5da60073 __kill_fasync +EXPORT_SYMBOL vmlinux 0x5daef1fe revert_creds +EXPORT_SYMBOL vmlinux 0x5dde7598 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x5e04efbb nf_ct_attach +EXPORT_SYMBOL vmlinux 0x5e21f413 kobject_get +EXPORT_SYMBOL vmlinux 0x5e2463a2 proc_create_data +EXPORT_SYMBOL vmlinux 0x5e4307a0 kobject_add +EXPORT_SYMBOL vmlinux 0x5e4bdf6c blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x5e7fd4c0 simple_sync_file +EXPORT_SYMBOL vmlinux 0x5e83610d qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ef3e9cb generic_show_options +EXPORT_SYMBOL vmlinux 0x5f1c7d3c arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x5f219f5c phy_device_create +EXPORT_SYMBOL vmlinux 0x5f2bca91 fd_install +EXPORT_SYMBOL vmlinux 0x5f56db66 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x5f5cc954 tty_throttle +EXPORT_SYMBOL vmlinux 0x5f6b5c5d d_move +EXPORT_SYMBOL vmlinux 0x5f7457b1 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x5fb82a3e console_start +EXPORT_SYMBOL vmlinux 0x5fc1ab48 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x5fce596e vfs_readdir +EXPORT_SYMBOL vmlinux 0x5fd49593 invalidate_partition +EXPORT_SYMBOL vmlinux 0x5fd7b790 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x6003902d path_put +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x6040242a swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x60766a22 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x608bfb59 pci_find_bus +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60e38137 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x60e7f085 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x60e8192d xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x60ec13c4 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x60eeb930 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x6103c4c7 per_cpu__irq_stat +EXPORT_SYMBOL vmlinux 0x611c280d inode_change_ok +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x614c21e1 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x617604c4 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x61761b7f get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x6177d1a1 netdev_features_change +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x6199c314 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61cad767 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x61caff8f inet_stream_connect +EXPORT_SYMBOL vmlinux 0x61db9e05 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x61e96368 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x62036ee5 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x62277d38 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x62451b04 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x6255abff dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62748e70 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x6286f298 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x62899b6a tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x629919d0 vga_get +EXPORT_SYMBOL vmlinux 0x629cfaab i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x62a53ec2 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x62acb68b bio_pair_release +EXPORT_SYMBOL vmlinux 0x62ba4b14 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x62c7cd75 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x62e8422f block_invalidatepage +EXPORT_SYMBOL vmlinux 0x62f04c83 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x6307fc98 del_timer +EXPORT_SYMBOL vmlinux 0x631ecc14 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x634875cd register_qdisc +EXPORT_SYMBOL vmlinux 0x634c69b9 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x63572393 dquot_drop +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x63906414 devm_iounmap +EXPORT_SYMBOL vmlinux 0x6396a98c task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x63a9ddd5 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x63e9b02a ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63fc232f strlen_user +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x642e54ac __wake_up +EXPORT_SYMBOL vmlinux 0x6466a1e6 mempool_alloc +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64d2519d udp_disconnect +EXPORT_SYMBOL vmlinux 0x64ddd2e4 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x65040d3f icmpv6_send +EXPORT_SYMBOL vmlinux 0x65064915 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x650fb346 add_wait_queue +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65279fb4 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x652877e7 i2c_release_client +EXPORT_SYMBOL vmlinux 0x653723ed __bio_clone +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x65889d72 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x6597c30a __put_cred +EXPORT_SYMBOL vmlinux 0x65a4f9be skb_find_text +EXPORT_SYMBOL vmlinux 0x65dd9d00 elv_rb_del +EXPORT_SYMBOL vmlinux 0x65e3b554 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x66020665 ip_route_input +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x661ec23a devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x666b9a13 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x666c1a9f fb_pan_display +EXPORT_SYMBOL vmlinux 0x6676dbd5 dentry_unhash +EXPORT_SYMBOL vmlinux 0x668058fc i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x669b79a5 kthread_create +EXPORT_SYMBOL vmlinux 0x66aad8d5 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x66ed4d95 set_blocksize +EXPORT_SYMBOL vmlinux 0x66faca88 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x6726f377 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x673f815e agp_bridges +EXPORT_SYMBOL vmlinux 0x6740ec3d __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x67590269 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x677905ee vfs_mknod +EXPORT_SYMBOL vmlinux 0x67916d0e cfb_copyarea +EXPORT_SYMBOL vmlinux 0x67a5a28b lease_get_mtime +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67e47159 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x67ebacf6 ipv4_specific +EXPORT_SYMBOL vmlinux 0x681ff4be sk_stop_timer +EXPORT_SYMBOL vmlinux 0x683835a4 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x68432bf0 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x684b200d page_put_link +EXPORT_SYMBOL vmlinux 0x68556e33 register_con_driver +EXPORT_SYMBOL vmlinux 0x688e1c64 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x68a24a67 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x68b22f0d __bread +EXPORT_SYMBOL vmlinux 0x68b566c7 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x6907d4e9 idr_for_each +EXPORT_SYMBOL vmlinux 0x6928828c agp_flush_chipset +EXPORT_SYMBOL vmlinux 0x694ed30d d_prune_aliases +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x6979914e agp_backend_release +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x698dcaee llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69b5a983 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x69ba4242 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69deefbd register_framebuffer +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69ff3e69 genl_register_ops +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a31f2bf unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a477cf5 start_tty +EXPORT_SYMBOL vmlinux 0x6a5f98a0 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a89f054 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x6a9f26c9 init_timer_key +EXPORT_SYMBOL vmlinux 0x6ac35fb1 sk_run_filter +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6af296ae jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x6b01b6e7 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b792d31 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x6b91eb15 ndisc_build_skb +EXPORT_SYMBOL vmlinux 0x6b948863 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x6b99b53a __alloc_skb +EXPORT_SYMBOL vmlinux 0x6b9b88f3 sleep_on +EXPORT_SYMBOL vmlinux 0x6bb155a5 put_tty_driver +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bf48745 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x6c09230f __napi_schedule +EXPORT_SYMBOL vmlinux 0x6c166a14 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x6c25bfea xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x6c341a2b mmc_resume_host +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c7a13b2 kernel_read +EXPORT_SYMBOL vmlinux 0x6c9c3f0d swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x6cac123e sock_no_accept +EXPORT_SYMBOL vmlinux 0x6caf7d96 inet_ioctl +EXPORT_SYMBOL vmlinux 0x6cca9981 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x6ce02d36 dst_release +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d0e3039 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x6d132bf0 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d334118 __get_user_8 +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d3de10b tty_register_device +EXPORT_SYMBOL vmlinux 0x6d669328 skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d861138 mpage_readpages +EXPORT_SYMBOL vmlinux 0x6d9e4b13 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x6dc0c24b complete_and_exit +EXPORT_SYMBOL vmlinux 0x6dc9a132 security_path_truncate +EXPORT_SYMBOL vmlinux 0x6dcaeb88 per_cpu__kernel_stack +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df4cfba journal_start +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e20a374 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x6e688525 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x6e6d11d8 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e7f8839 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb0fdf3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x6ebcd97f vfs_rmdir +EXPORT_SYMBOL vmlinux 0x6ebd3200 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x6f37e658 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f70070a scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x6fa53b2e generic_file_open +EXPORT_SYMBOL vmlinux 0x6fba99ce agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x6fca5238 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fda5f6f bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x6fde0293 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0x6fe127a3 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x6feab351 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6ff6a9dd register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x700936f7 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x70168f51 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x701b2a44 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x704438f1 mpage_writepage +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x7065b411 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x706a3c5f slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x70765d1c vfs_lstat +EXPORT_SYMBOL vmlinux 0x707990ed blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x70900ca9 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x7096e7a0 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x709a5dc2 llc_sap_close +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70e0d61f cpu_all_bits +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x712aa29b _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x71356fba remove_wait_queue +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x718e45b4 dump_trace +EXPORT_SYMBOL vmlinux 0x71946341 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x719b0236 simple_readpage +EXPORT_SYMBOL vmlinux 0x71a43334 pci_dev_get +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71ab356f dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x71b9ea29 bdget_disk +EXPORT_SYMBOL vmlinux 0x71bb41e4 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x71c8b452 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0x71d2a65b tty_mutex +EXPORT_SYMBOL vmlinux 0x71d95e02 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x71f6eb38 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x7209736e abort_creds +EXPORT_SYMBOL vmlinux 0x723e177d inet_frag_kill +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x728e4a4a sync_inode +EXPORT_SYMBOL vmlinux 0x7294c53c filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x72a27332 ilookup5 +EXPORT_SYMBOL vmlinux 0x72ab49da kill_anon_super +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72b57deb dquot_destroy +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x731c08cc kernel_accept +EXPORT_SYMBOL vmlinux 0x731fc263 init_net +EXPORT_SYMBOL vmlinux 0x73446d21 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x735da84a acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0x736d0d9e gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x73745f28 seq_bitmap +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x7393c70b dquot_commit +EXPORT_SYMBOL vmlinux 0x739ee22d gen_pool_add +EXPORT_SYMBOL vmlinux 0x73a07012 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x73d47708 inet_frags_init +EXPORT_SYMBOL vmlinux 0x73d8d669 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x741f6cd7 arp_broken_ops +EXPORT_SYMBOL vmlinux 0x742dc105 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74880518 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x748caf40 down +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x749e6468 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x74acf1a5 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d3757b rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x74d5c77c blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x74e5651e scsi_print_sense +EXPORT_SYMBOL vmlinux 0x74e8fd3c block_write_begin +EXPORT_SYMBOL vmlinux 0x74ee6ec8 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x74f79c87 phy_device_register +EXPORT_SYMBOL vmlinux 0x74fd826c dma_ops +EXPORT_SYMBOL vmlinux 0x75094a4a tcf_action_exec +EXPORT_SYMBOL vmlinux 0x750c6157 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x751306ec seq_release_private +EXPORT_SYMBOL vmlinux 0x7538b132 agp_off +EXPORT_SYMBOL vmlinux 0x75676dc2 dquot_free_space +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c17747 journal_restart +EXPORT_SYMBOL vmlinux 0x75c62cd0 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x75df62c3 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x75f3f23f jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b2ef2 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x760c2983 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x764d4b38 wireless_send_event +EXPORT_SYMBOL vmlinux 0x767b1c50 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x767dd8fd acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76e404ae cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x76f3eaea blk_init_tags +EXPORT_SYMBOL vmlinux 0x76f3f8a5 num_k8_northbridges +EXPORT_SYMBOL vmlinux 0x7718ff21 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x771fd03d sock_setsockopt +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x77582aa5 md_integrity_register +EXPORT_SYMBOL vmlinux 0x776bb0d1 per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0x776c5939 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x77719d70 ps2_command +EXPORT_SYMBOL vmlinux 0x77a108df _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f53abc acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fc753d xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x782acba5 crc_t10dif +EXPORT_SYMBOL vmlinux 0x785148a3 idr_destroy +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x78764f4e pv_irq_ops +EXPORT_SYMBOL vmlinux 0x78a484c9 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78e7f96a scsi_block_requests +EXPORT_SYMBOL vmlinux 0x78f0e3ab bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x795b7b6a free_buffer_head +EXPORT_SYMBOL vmlinux 0x795e135e blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x796db5c2 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x797840fe put_mnt_ns +EXPORT_SYMBOL vmlinux 0x79859c55 fb_blank +EXPORT_SYMBOL vmlinux 0x798ee852 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79aa8a00 sk_dst_check +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79ae3ffb tty_devnum +EXPORT_SYMBOL vmlinux 0x79ecd235 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x79f63da5 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x79f82ed1 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x7a2a4ad5 prepare_creds +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a3d06d9 do_splice_to +EXPORT_SYMBOL vmlinux 0x7a410a9f pci_disable_msi +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a61a6da skb_append +EXPORT_SYMBOL vmlinux 0x7a73e5c5 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x7a848702 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x7a9559b0 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x7acd6809 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x7adc4059 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7ae7ac52 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7aede056 simple_empty +EXPORT_SYMBOL vmlinux 0x7b0197b8 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x7b05f2cb call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b675f89 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x7b6ce00f pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7ba30eaf inet_add_protocol +EXPORT_SYMBOL vmlinux 0x7bc31490 bd_release +EXPORT_SYMBOL vmlinux 0x7bf9b4aa md_error +EXPORT_SYMBOL vmlinux 0x7bfe315e dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c7401ec d_add_ci +EXPORT_SYMBOL vmlinux 0x7c780ea6 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9084fd mmc_register_driver +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cb320e6 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x7cf522c4 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d3bc7d2 nobh_write_end +EXPORT_SYMBOL vmlinux 0x7d597d7f pci_disable_msix +EXPORT_SYMBOL vmlinux 0x7d6bb587 cpu_online_mask +EXPORT_SYMBOL vmlinux 0x7d77e4d8 have_submounts +EXPORT_SYMBOL vmlinux 0x7d9462ca serio_close +EXPORT_SYMBOL vmlinux 0x7d94f746 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x7d9e0daa agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x7daf7486 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x7dbfd43f alloc_fcdev +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd554fc unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x7deb52e3 audit_log_format +EXPORT_SYMBOL vmlinux 0x7e1c0f16 bdi_destroy +EXPORT_SYMBOL vmlinux 0x7e418e92 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x7e524b1a scsi_dma_map +EXPORT_SYMBOL vmlinux 0x7e561da6 dev_get_stats +EXPORT_SYMBOL vmlinux 0x7e71a483 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7ea650ad pagevec_lookup +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7ed09b36 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x7ee01bc6 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x7ee91c1d _spin_trylock +EXPORT_SYMBOL vmlinux 0x7f14c0b7 lookup_bdev +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f43c9c1 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x7f4f4ae0 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x7f5ca7be sg_miter_stop +EXPORT_SYMBOL vmlinux 0x7f76d751 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x7f94c243 lro_flush_all +EXPORT_SYMBOL vmlinux 0x7f9c19fe tty_unthrottle +EXPORT_SYMBOL vmlinux 0x7fc93890 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x7ff6ae43 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x8040ed30 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x805e75bb dev_mc_add +EXPORT_SYMBOL vmlinux 0x808476b3 simple_rmdir +EXPORT_SYMBOL vmlinux 0x80a33392 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x80c81df3 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x80ceb147 generic_getxattr +EXPORT_SYMBOL vmlinux 0x80d31286 vfs_create +EXPORT_SYMBOL vmlinux 0x80d5c5c0 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x80d5cff0 per_cpu__irq_regs +EXPORT_SYMBOL vmlinux 0x80e36042 skb_dma_map +EXPORT_SYMBOL vmlinux 0x80e89b81 d_rehash +EXPORT_SYMBOL vmlinux 0x8100fb01 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x811ff112 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x81390c59 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x81474d67 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x81571313 udp_proc_register +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x816022cf dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x8163dee5 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x81794662 elv_add_request +EXPORT_SYMBOL vmlinux 0x8181224b find_lock_page +EXPORT_SYMBOL vmlinux 0x819486bf sock_recvmsg +EXPORT_SYMBOL vmlinux 0x81971b6e __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x81a2d9f3 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x81bb0ab4 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x81c0ab1f skb_push +EXPORT_SYMBOL vmlinux 0x81e28443 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x81f759d5 make_EII_client +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820fc63c vfsmount_lock +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x821b54dc lock_may_write +EXPORT_SYMBOL vmlinux 0x82306178 inet_addr_type +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8260bc2b security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82a5c614 phy_attach +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82d3e07d gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x830c4a30 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x830e547b ioremap_prot +EXPORT_SYMBOL vmlinux 0x8317e13f input_register_device +EXPORT_SYMBOL vmlinux 0x8317e20a completion_done +EXPORT_SYMBOL vmlinux 0x8318ee14 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x831b6472 seq_lseek +EXPORT_SYMBOL vmlinux 0x8327b1ed ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0x834a1470 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x83620d49 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x837ba98e pci_get_slot +EXPORT_SYMBOL vmlinux 0x838cdaa7 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a75417 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83c46141 mmc_request_done +EXPORT_SYMBOL vmlinux 0x83cd0118 set_pages_wb +EXPORT_SYMBOL vmlinux 0x83e70e14 dqput +EXPORT_SYMBOL vmlinux 0x83f44492 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x844352a9 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x84762838 bdi_init +EXPORT_SYMBOL vmlinux 0x847b9601 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x84895a1e eth_header_cache +EXPORT_SYMBOL vmlinux 0x848fdb20 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x84ae440c serio_reconnect +EXPORT_SYMBOL vmlinux 0x84b49c1b input_grab_device +EXPORT_SYMBOL vmlinux 0x84cc3632 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x851ae06c ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x85351942 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x853614ca redraw_screen +EXPORT_SYMBOL vmlinux 0x854c71f8 filp_open +EXPORT_SYMBOL vmlinux 0x855f7ca9 register_netdevice +EXPORT_SYMBOL vmlinux 0x8563508a follow_down +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x857dc29a md_check_recovery +EXPORT_SYMBOL vmlinux 0x85948d66 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85d994f6 deactivate_super +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85ed74ea fasync_helper +EXPORT_SYMBOL vmlinux 0x85f87e07 dm_put_device +EXPORT_SYMBOL vmlinux 0x85f9d7f1 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x8635dbf3 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x86436841 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86c7146d vfs_fstat +EXPORT_SYMBOL vmlinux 0x86d3535c ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x86d3ec8f input_inject_event +EXPORT_SYMBOL vmlinux 0x86f60ba3 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x87139591 mapping_tagged +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x8725b236 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x8733e9a3 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x87521827 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x8752df26 skb_make_writable +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x878add06 unlock_super +EXPORT_SYMBOL vmlinux 0x878e4c40 vm_insert_page +EXPORT_SYMBOL vmlinux 0x879117bd try_to_release_page +EXPORT_SYMBOL vmlinux 0x879a1cc7 generic_listxattr +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87d7de27 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x87e95f00 input_set_keycode +EXPORT_SYMBOL vmlinux 0x87f21f11 key_revoke +EXPORT_SYMBOL vmlinux 0x87f5c937 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x87f7ed0d __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x8802563e d_obtain_alias +EXPORT_SYMBOL vmlinux 0x8802b9ad bio_sector_offset +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x881bbd2f ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x8824e388 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x884545af swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x88512d34 make_bad_inode +EXPORT_SYMBOL vmlinux 0x885cf6b6 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x885dd267 dev_load +EXPORT_SYMBOL vmlinux 0x8866ddf8 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x889da329 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x88d1c5c3 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x88d4ee74 ps2_drain +EXPORT_SYMBOL vmlinux 0x88e07584 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x88f465c3 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x88fc880a vfs_quota_off +EXPORT_SYMBOL vmlinux 0x88fdf70b pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x89949018 down_timeout +EXPORT_SYMBOL vmlinux 0x89b4bf77 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x8a01519c vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3eabf0 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a7fe4a4 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x8a8302de pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aaf61aa pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x8abbdb5b __devm_request_region +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8b03eaaa sock_kfree_s +EXPORT_SYMBOL vmlinux 0x8b04d453 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x8b0f3e82 ip_defrag +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b371110 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x8b3ceb73 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x8b40ad13 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b6d3c39 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x8b7b1c29 blkdev_get +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b86950d skb_store_bits +EXPORT_SYMBOL vmlinux 0x8b888e0a inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x8b922c0f __strnlen_user +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8ba1a1f9 block_write_end +EXPORT_SYMBOL vmlinux 0x8bacdd06 register_nls +EXPORT_SYMBOL vmlinux 0x8bc005af mnt_unpin +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bdc8a7a netif_receive_skb +EXPORT_SYMBOL vmlinux 0x8be3314a elv_abort_queue +EXPORT_SYMBOL vmlinux 0x8beb8e16 alloc_file +EXPORT_SYMBOL vmlinux 0x8bface0f inode_add_bytes +EXPORT_SYMBOL vmlinux 0x8c08e059 kernel_bind +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c34c53f qdisc_reset +EXPORT_SYMBOL vmlinux 0x8c3610a2 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x8c41f72b __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c59bd58 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x8c65230d acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x8c8b3424 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x8c9ac94b register_md_personality +EXPORT_SYMBOL vmlinux 0x8caff4a1 mmc_host_enable +EXPORT_SYMBOL vmlinux 0x8cbb2bd7 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8ce50b1a dma_async_device_register +EXPORT_SYMBOL vmlinux 0x8cef1ad5 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x8cfd4255 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x8cff7c15 thaw_bdev +EXPORT_SYMBOL vmlinux 0x8d1a735e fsync_bdev +EXPORT_SYMBOL vmlinux 0x8d36a168 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d3c580a blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x8d4acf9f tcf_em_register +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d5e1b76 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x8d72c0d5 dm_io +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8db37ad7 skb_checksum +EXPORT_SYMBOL vmlinux 0x8db3e260 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x8dca832f __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0637ba i8253_lock +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e0cf7c5 __register_binfmt +EXPORT_SYMBOL vmlinux 0x8e2b7f9c __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x8e2f7654 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x8e3c545c sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e549d3e unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x8e5deaa7 journal_get_create_access +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8ec1a23c override_creds +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8eeb4de3 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x8f12f8ea __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x8f228096 pci_map_rom +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f28ff91 qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x8f33d8ef locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x8f378b90 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f6eb53f igrab +EXPORT_SYMBOL vmlinux 0x8f786b32 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x8f7c545f ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x8f7dbdb5 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x8f824f02 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8fa841be journal_create +EXPORT_SYMBOL vmlinux 0x8fc37be0 lock_super +EXPORT_SYMBOL vmlinux 0x8fe545dc dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x8fe8601e pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x8fe86767 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x8fe8ad1a rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x90260fc8 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x9070c78b iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x908435df inet6_release +EXPORT_SYMBOL vmlinux 0x90937727 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x9098195d pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90ac7412 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x90af7d5c phy_connect_direct +EXPORT_SYMBOL vmlinux 0x90b010ae tcp_shutdown +EXPORT_SYMBOL vmlinux 0x90bb5170 key_task_permission +EXPORT_SYMBOL vmlinux 0x90c59e1a tc_classify +EXPORT_SYMBOL vmlinux 0x90d47e04 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x90f0c233 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x90fb097b security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x910812bd tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x913f6109 kill_fasync +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x914e7971 key_unlink +EXPORT_SYMBOL vmlinux 0x91589ece pci_find_capability +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x9162bf00 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x91654a3d pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x916a076f follow_pfn +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x919676d5 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x91aeedbd km_query +EXPORT_SYMBOL vmlinux 0x91fa5dd9 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x9200deb3 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x9217348a serial8250_register_port +EXPORT_SYMBOL vmlinux 0x921a92e1 block_sync_page +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x924916fd input_flush_device +EXPORT_SYMBOL vmlinux 0x926b65c5 netpoll_poll +EXPORT_SYMBOL vmlinux 0x9270547d simple_fsync +EXPORT_SYMBOL vmlinux 0x92797f1a send_sig_info +EXPORT_SYMBOL vmlinux 0x927e989f gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x92b5bfd0 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x92c7920e blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x92deafa6 phy_device_free +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x93095fee iget_failed +EXPORT_SYMBOL vmlinux 0x9341119b current_fs_time +EXPORT_SYMBOL vmlinux 0x9348beba mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x935c5881 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x9385667d down_read_trylock +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93acb59d simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93c792b9 generic_permission +EXPORT_SYMBOL vmlinux 0x93cbd1ec _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x93e5930c phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x93f253a1 alloc_trdev +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x93ff59ad do_sync_write +EXPORT_SYMBOL vmlinux 0x942eabd1 inet_accept +EXPORT_SYMBOL vmlinux 0x94361e05 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x9439e825 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x943e868f ida_get_new +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x944de2ae jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x945bc6a7 copy_from_user +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94855351 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x949ffd8e ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x94eb1e77 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x94f66943 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x950737fc napi_frags_skb +EXPORT_SYMBOL vmlinux 0x95352ea9 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x953e4106 inode_setattr +EXPORT_SYMBOL vmlinux 0x953fbb6b dma_pool_create +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x95482d5c __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x955dd6f5 touch_atime +EXPORT_SYMBOL vmlinux 0x9570b00d pci_do_scan_bus +EXPORT_SYMBOL vmlinux 0x9575b45d acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x9588a2b3 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x95b1083d fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x95c3997b open_by_devnum +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95d918ed neigh_event_ns +EXPORT_SYMBOL vmlinux 0x961c4988 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x9629486a per_cpu__cpu_number +EXPORT_SYMBOL vmlinux 0x96476765 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x9669e50e mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x967c2a92 pci_target_state +EXPORT_SYMBOL vmlinux 0x96af8109 netif_napi_add +EXPORT_SYMBOL vmlinux 0x96bad1aa set_trace_device +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96ec1850 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x9709a889 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x972e0a5f dev_disable_lro +EXPORT_SYMBOL vmlinux 0x973873ab _spin_lock +EXPORT_SYMBOL vmlinux 0x9748bc58 ll_rw_block +EXPORT_SYMBOL vmlinux 0x974f867d del_gendisk +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x97acb59b i2c_register_driver +EXPORT_SYMBOL vmlinux 0x97c93177 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x97cd1727 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x97d33bf9 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97ed042b pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x97f43eb8 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x9808cf73 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x9815597e path_lookup +EXPORT_SYMBOL vmlinux 0x984fd7f7 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x989865db dm_table_get +EXPORT_SYMBOL vmlinux 0x98abcf82 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x98ae5650 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x98ba3b81 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x98fa0611 unregister_nls +EXPORT_SYMBOL vmlinux 0x98fd912c nla_append +EXPORT_SYMBOL vmlinux 0x992a3e4e pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x996643fb jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x996c5ef6 __getblk +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99b0a88e dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99f95e68 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a37efd1 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x9a462957 dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0x9a55e708 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x9a9985be percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9b221362 block_read_full_page +EXPORT_SYMBOL vmlinux 0x9b30410d blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b388f0b try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x9b3ccc64 dev_trans_start +EXPORT_SYMBOL vmlinux 0x9b592a58 vc_resize +EXPORT_SYMBOL vmlinux 0x9b7e5904 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x9b882706 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x9b941789 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bcf86c8 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x9bdbcf4d pagecache_write_end +EXPORT_SYMBOL vmlinux 0x9beecd88 generic_fillattr +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c20e18f ip_dev_find +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c5268c5 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9caf02ed put_io_context +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cbee6cd pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x9ccb2622 finish_wait +EXPORT_SYMBOL vmlinux 0x9ced38aa down_trylock +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d108b61 xrlim_allow +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3a77a1 aio_put_req +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d57531d pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x9d57dd4f pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x9d59fb4a tty_port_close +EXPORT_SYMBOL vmlinux 0x9d7a3c77 init_task +EXPORT_SYMBOL vmlinux 0x9d85c068 commit_creds +EXPORT_SYMBOL vmlinux 0x9d87770d d_lookup +EXPORT_SYMBOL vmlinux 0x9d911609 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x9d957ea8 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e877f94 page_readlink +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ea28ec7 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x9eb1a26e input_set_capability +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f0d6caa neigh_seq_next +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f11b874 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x9f243ece security_inode_readlink +EXPORT_SYMBOL vmlinux 0x9f255c53 install_exec_creds +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f4c2bc5 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x9f6f6ee7 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x9f8784cb __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x9f92efc4 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa274b4 dq_data_lock +EXPORT_SYMBOL vmlinux 0x9fb97cea ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x9fbcf707 get_fs_type +EXPORT_SYMBOL vmlinux 0xa00124a7 uart_update_timeout +EXPORT_SYMBOL vmlinux 0xa00a4a7a kmem_cache_free +EXPORT_SYMBOL vmlinux 0xa00a61ff may_umount +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa039b466 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xa041382d kernel_sendpage +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07a8d34 datagram_poll +EXPORT_SYMBOL vmlinux 0xa07f2e1f ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xa08c0410 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0xa08f0d1c llc_sap_find +EXPORT_SYMBOL vmlinux 0xa0a4ac21 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b0e609 journal_revoke +EXPORT_SYMBOL vmlinux 0xa0b3d04a key_negate_and_link +EXPORT_SYMBOL vmlinux 0xa0b6af21 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xa0b8b0d6 simple_link +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0d96963 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xa0e96a9d nla_put +EXPORT_SYMBOL vmlinux 0xa0f3f5fb xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa1107952 bdget +EXPORT_SYMBOL vmlinux 0xa11644de vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xa1170356 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa12f23bc inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa13d7f38 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xa14ce1a6 agp_put_bridge +EXPORT_SYMBOL vmlinux 0xa151372c dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0xa16d7889 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0xa16fd880 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa1ee360a netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xa2047dc8 elv_rb_find +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa20cf43a sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xa21a38db fb_get_mode +EXPORT_SYMBOL vmlinux 0xa2649e8f xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xa2805be1 dev_addr_add +EXPORT_SYMBOL vmlinux 0xa28d14bd mmc_alloc_host +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a1e5c9 _write_lock_bh +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b8a2ba __init_rwsem +EXPORT_SYMBOL vmlinux 0xa2bb9e65 alloc_disk_node +EXPORT_SYMBOL vmlinux 0xa2bcdbdc udplite_prot +EXPORT_SYMBOL vmlinux 0xa2cdaf27 __brelse +EXPORT_SYMBOL vmlinux 0xa300c7e0 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0xa31e5762 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xa31f172d __copy_from_user_inatomic +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3826aeb udp_prot +EXPORT_SYMBOL vmlinux 0xa39ab218 napi_skb_finish +EXPORT_SYMBOL vmlinux 0xa3a5be95 memmove +EXPORT_SYMBOL vmlinux 0xa3b06834 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xa3b1a54d security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3cc6ef3 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xa3df9560 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xa3ed12d5 inet_getname +EXPORT_SYMBOL vmlinux 0xa3fc059a ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xa401f37b xfrm_state_add +EXPORT_SYMBOL vmlinux 0xa40d8154 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0xa415b384 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xa42e8d2f block_fsync +EXPORT_SYMBOL vmlinux 0xa445c0eb simple_transaction_release +EXPORT_SYMBOL vmlinux 0xa44ad274 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xa4565bd2 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xa492c62b scsi_free_command +EXPORT_SYMBOL vmlinux 0xa49dbdd7 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xa4a99aef vfs_statfs +EXPORT_SYMBOL vmlinux 0xa4b30946 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4c86dc9 skb_recycle_check +EXPORT_SYMBOL vmlinux 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL vmlinux 0xa4e1daf8 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xa510da20 blk_start_request +EXPORT_SYMBOL vmlinux 0xa54786c9 nlmsg_notify +EXPORT_SYMBOL vmlinux 0xa56de4dc bh_submit_read +EXPORT_SYMBOL vmlinux 0xa56f1315 mempool_free +EXPORT_SYMBOL vmlinux 0xa57aed6e find_or_create_page +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa5922bb1 kfifo_init +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5adbe8c ida_destroy +EXPORT_SYMBOL vmlinux 0xa5b06e96 __secpath_destroy +EXPORT_SYMBOL vmlinux 0xa5b5240f compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0xa5f7a75b jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xa6157aed I_BDEV +EXPORT_SYMBOL vmlinux 0xa617326a pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa64eab99 vfs_readlink +EXPORT_SYMBOL vmlinux 0xa663b4a4 do_sync_read +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa69c66ec xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0xa6c24332 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa70913e8 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa72066ff dcache_dir_open +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa72f9ade per_cpu__current_task +EXPORT_SYMBOL vmlinux 0xa734ebc7 pci_reenable_device +EXPORT_SYMBOL vmlinux 0xa741c88b pci_get_subsys +EXPORT_SYMBOL vmlinux 0xa77002b7 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xa771213c lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xa77525bb vfs_getattr +EXPORT_SYMBOL vmlinux 0xa7bcb079 proc_mkdir +EXPORT_SYMBOL vmlinux 0xa7c8f18b dma_set_mask +EXPORT_SYMBOL vmlinux 0xa7db1b6c pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xa7e2db50 flush_signals +EXPORT_SYMBOL vmlinux 0xa7e6e461 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0xa7f6b854 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xa8063a34 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0xa80fb5b5 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xa8262f53 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xa8379442 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xa863b2e0 pci_get_class +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa8920539 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0xa8961ae4 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8ce89a6 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8e3f6e3 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xa8f1f441 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xa8fbf582 idr_replace +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa902719a ip_ct_attach +EXPORT_SYMBOL vmlinux 0xa91a440c lookup_hash +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa91c5162 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xa93a9eea skb_split +EXPORT_SYMBOL vmlinux 0xa9882e14 __kfree_skb +EXPORT_SYMBOL vmlinux 0xa9bd2676 __vmalloc +EXPORT_SYMBOL vmlinux 0xa9d20ba7 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0xa9e0fb29 sock_init_data +EXPORT_SYMBOL vmlinux 0xa9fcf31d wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xaa09093c genphy_config_advert +EXPORT_SYMBOL vmlinux 0xaa302b2a do_splice_from +EXPORT_SYMBOL vmlinux 0xaa63d2e1 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0xaa84a8ae acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0xaa8b1330 new_inode +EXPORT_SYMBOL vmlinux 0xaab06af8 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xaabf142a __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xaacda319 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0xaad268a5 file_fsync +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafba571 ppp_register_channel +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab42e46b user_revoke +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab8f2c02 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0xab9ef6d6 input_register_handler +EXPORT_SYMBOL vmlinux 0xaba27983 hippi_type_trans +EXPORT_SYMBOL vmlinux 0xaba97015 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb83d08 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd42dcb get_phy_id +EXPORT_SYMBOL vmlinux 0xabe3f06b seq_open_private +EXPORT_SYMBOL vmlinux 0xabe7c43a __serio_register_driver +EXPORT_SYMBOL vmlinux 0xabe85a21 idr_init +EXPORT_SYMBOL vmlinux 0xabf73372 agp_free_page_array +EXPORT_SYMBOL vmlinux 0xabfc4088 bdput +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6794a7 seq_write +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac6b036f unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xac7853d0 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0xacaa4e91 sock_release +EXPORT_SYMBOL vmlinux 0xacc20d04 consume_skb +EXPORT_SYMBOL vmlinux 0xacca11a1 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacd37175 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacf565ba load_nls +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad061d29 netlink_unicast +EXPORT_SYMBOL vmlinux 0xad07434f give_up_console +EXPORT_SYMBOL vmlinux 0xad0d0619 acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad25fb12 __memcpy +EXPORT_SYMBOL vmlinux 0xad2afe31 vga_tryget +EXPORT_SYMBOL vmlinux 0xad49c702 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0xad5ff536 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0xad7570c8 bdi_unregister +EXPORT_SYMBOL vmlinux 0xad8de1b3 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0xad8e97f7 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadad3394 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xadefe95f kernel_connect +EXPORT_SYMBOL vmlinux 0xadf710cf acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0xae11a17b __find_get_block +EXPORT_SYMBOL vmlinux 0xae155bc8 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xae21ae6b single_release +EXPORT_SYMBOL vmlinux 0xae2aedb9 netlink_broadcast +EXPORT_SYMBOL vmlinux 0xae5ab2f1 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xae5ac311 seq_release +EXPORT_SYMBOL vmlinux 0xaec06d63 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaedcf9f8 inet_stream_ops +EXPORT_SYMBOL vmlinux 0xaedde1cf scsi_execute_req +EXPORT_SYMBOL vmlinux 0xaeecf911 nonseekable_open +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf6e5e61 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xaf7906d6 blk_init_queue +EXPORT_SYMBOL vmlinux 0xafbec06e dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xafef437f skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0xb00d7dfa skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb011206f __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xb0209357 request_firmware +EXPORT_SYMBOL vmlinux 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL vmlinux 0xb051909f ida_init +EXPORT_SYMBOL vmlinux 0xb0529305 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb07b0f8a mmc_host_disable +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb0b18c56 register_key_type +EXPORT_SYMBOL vmlinux 0xb0b5d23c mmc_card_awake +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c6cd86 skb_queue_purge +EXPORT_SYMBOL vmlinux 0xb0cf558d read_dev_sector +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0fbfb61 unregister_console +EXPORT_SYMBOL vmlinux 0xb10dac9a aio_complete +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb12f1311 bdi_register +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb16bffa3 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb1928a05 __rta_fill +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a06041 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0xb1aac218 vfs_rename +EXPORT_SYMBOL vmlinux 0xb1beea51 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1da31ea netpoll_send_udp +EXPORT_SYMBOL vmlinux 0xb1ea2eca input_filter_device +EXPORT_SYMBOL vmlinux 0xb1f1d6e5 get_user_pages +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb20ecf88 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb21f071a jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb23240ec dst_alloc +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb279da12 pv_lock_ops +EXPORT_SYMBOL vmlinux 0xb2a321aa agp_create_memory +EXPORT_SYMBOL vmlinux 0xb2bb86b8 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xb2e34c97 lease_modify +EXPORT_SYMBOL vmlinux 0xb2e55898 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xb2f059a1 napi_gro_frags +EXPORT_SYMBOL vmlinux 0xb2f53985 scsi_init_io +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb312eb46 sock_no_bind +EXPORT_SYMBOL vmlinux 0xb3205415 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb3401123 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xb343222e iget5_locked +EXPORT_SYMBOL vmlinux 0xb34c4791 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb374a6cc bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xb3874c09 journal_dirty_data +EXPORT_SYMBOL vmlinux 0xb38b5292 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3c42c94 per_cpu__x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xb3c7589e jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xb3cdd5af mb_cache_shrink +EXPORT_SYMBOL vmlinux 0xb3d2a08b tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xb3e0a0cb tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb4019b47 register_snap_client +EXPORT_SYMBOL vmlinux 0xb40a9271 dqget +EXPORT_SYMBOL vmlinux 0xb41bc081 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4279ab7 downgrade_write +EXPORT_SYMBOL vmlinux 0xb42c6c61 file_permission +EXPORT_SYMBOL vmlinux 0xb4343da5 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xb43534ed sock_create +EXPORT_SYMBOL vmlinux 0xb4380903 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb44b5dec remove_proc_entry +EXPORT_SYMBOL vmlinux 0xb44f53bb inet6_ioctl +EXPORT_SYMBOL vmlinux 0xb45b24f6 k8_nb_ids +EXPORT_SYMBOL vmlinux 0xb46477d7 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xb469b8a1 sk_common_release +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4aed2d8 find_inode_number +EXPORT_SYMBOL vmlinux 0xb4b0ee4e down_read +EXPORT_SYMBOL vmlinux 0xb4ca9447 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb4cd1bfd bd_claim +EXPORT_SYMBOL vmlinux 0xb4d36f81 km_state_expired +EXPORT_SYMBOL vmlinux 0xb4daf5e3 con_is_bound +EXPORT_SYMBOL vmlinux 0xb4dc9d95 check_disk_size_change +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb5159b4a __scsi_add_device +EXPORT_SYMBOL vmlinux 0xb523aa10 vfs_unlink +EXPORT_SYMBOL vmlinux 0xb523ecaa seq_printf +EXPORT_SYMBOL vmlinux 0xb52f18ec pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xb541dab3 d_splice_alias +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb563c405 __napi_complete +EXPORT_SYMBOL vmlinux 0xb5804861 nobh_write_begin +EXPORT_SYMBOL vmlinux 0xb5879532 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0xb5986c77 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb5da6794 skb_under_panic +EXPORT_SYMBOL vmlinux 0xb5ece21e __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xb5f28b5f __any_online_cpu +EXPORT_SYMBOL vmlinux 0xb601def0 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb6353555 per_cpu__x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0xb6556261 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb683cbca flush_old_exec +EXPORT_SYMBOL vmlinux 0xb6994a91 journal_clear_err +EXPORT_SYMBOL vmlinux 0xb69e33db pipe_to_file +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c489b7 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6cbe886 acpi_get_node +EXPORT_SYMBOL vmlinux 0xb6e227aa rtc_lock +EXPORT_SYMBOL vmlinux 0xb7114cd6 napi_gro_flush +EXPORT_SYMBOL vmlinux 0xb734f34c phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb75d8fcc scsi_is_host_device +EXPORT_SYMBOL vmlinux 0xb7734fd6 blk_end_request +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7dd0700 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0xb7e150e5 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0xb7f0c6be free_task +EXPORT_SYMBOL vmlinux 0xb7f6b17c inet_register_protosw +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb84b0db5 journal_force_commit +EXPORT_SYMBOL vmlinux 0xb84ef909 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xb864d79c security_file_permission +EXPORT_SYMBOL vmlinux 0xb86d5f8e set_binfmt +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8b1094d tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xb8bc7fce inet_put_port +EXPORT_SYMBOL vmlinux 0xb8c42908 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xb8c606a7 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xb8d66c93 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0xb8e0d489 __register_chrdev +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb8e80845 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0xb8fabbc9 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0xb90f78a0 devm_ioport_map +EXPORT_SYMBOL vmlinux 0xb9112b2d d_find_alias +EXPORT_SYMBOL vmlinux 0xb9335db3 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xb9458190 posix_lock_file +EXPORT_SYMBOL vmlinux 0xb9879171 journal_stop +EXPORT_SYMBOL vmlinux 0xb989c12e tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9a54500 rfkill_unregister +EXPORT_SYMBOL vmlinux 0xb9b2c2b0 __nla_put +EXPORT_SYMBOL vmlinux 0xb9d499c3 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba0afdad fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xba18330a wait_on_page_bit +EXPORT_SYMBOL vmlinux 0xba2c9b49 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba809f26 iput +EXPORT_SYMBOL vmlinux 0xbaa10b52 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xbaa1a746 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbaca1c48 sg_miter_start +EXPORT_SYMBOL vmlinux 0xbad0b7cd jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xbad56710 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0xbad60ff0 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xbadb4216 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb2c871b netif_device_attach +EXPORT_SYMBOL vmlinux 0xbb53e8a1 uart_resume_port +EXPORT_SYMBOL vmlinux 0xbb567420 md_done_sync +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb6a125f journal_start_commit +EXPORT_SYMBOL vmlinux 0xbb6f9ee6 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xbb89946d names_cachep +EXPORT_SYMBOL vmlinux 0xbb982aa9 do_truncate +EXPORT_SYMBOL vmlinux 0xbb99068b inet6_del_protocol +EXPORT_SYMBOL vmlinux 0xbba38c39 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xbbba2039 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xbbc0f8c2 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xbbd18d94 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xbbdbfefa neigh_connected_output +EXPORT_SYMBOL vmlinux 0xbbe0aefc dmam_free_coherent +EXPORT_SYMBOL vmlinux 0xbbe26fb7 pci_dev_put +EXPORT_SYMBOL vmlinux 0xbc03ce97 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0xbc4d8363 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbccbb49c idr_remove_all +EXPORT_SYMBOL vmlinux 0xbcea121b scsi_ioctl +EXPORT_SYMBOL vmlinux 0xbcfdbbfe pv_cpu_ops +EXPORT_SYMBOL vmlinux 0xbd332df1 sock_create_kern +EXPORT_SYMBOL vmlinux 0xbd4560c6 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xbd71b957 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0xbdaf5b07 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0xbdb6b102 bioset_create +EXPORT_SYMBOL vmlinux 0xbdc5daf4 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xbddf11c9 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbdfabd57 dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0xbdfadd1e ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xbe0ff4e0 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xbe1cc4c5 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xbe3b856c pci_set_power_state +EXPORT_SYMBOL vmlinux 0xbe4646f5 simple_release_fs +EXPORT_SYMBOL vmlinux 0xbe499d81 copy_to_user +EXPORT_SYMBOL vmlinux 0xbe6b17f7 textsearch_prepare +EXPORT_SYMBOL vmlinux 0xbe8bd16d generic_block_bmap +EXPORT_SYMBOL vmlinux 0xbebdf9ce arp_send +EXPORT_SYMBOL vmlinux 0xbec3d7f0 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xbecdce74 ida_pre_get +EXPORT_SYMBOL vmlinux 0xbed60566 sub_preempt_count +EXPORT_SYMBOL vmlinux 0xbed7552b pnp_start_dev +EXPORT_SYMBOL vmlinux 0xbedfd1a5 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf330e2b scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xbf5e355a tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0xbf638af3 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xbf6688fc disk_stack_limits +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8ce7a2 boot_cpu_data +EXPORT_SYMBOL vmlinux 0xbf96a8f0 bio_unmap_user +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbf9e766f bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xbfa91d7f __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfd746dd inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xbff1d626 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0xbfffc6c8 dput +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc011ec72 textsearch_register +EXPORT_SYMBOL vmlinux 0xc02536a8 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xc02536db pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xc0318b01 free_netdev +EXPORT_SYMBOL vmlinux 0xc04124c4 init_special_inode +EXPORT_SYMBOL vmlinux 0xc0460acf get_super +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc05ef80e cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xc07d43ae acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0b45a92 dev_addr_del +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc1037d96 input_open_device +EXPORT_SYMBOL vmlinux 0xc10eab7b blk_queue_bounce +EXPORT_SYMBOL vmlinux 0xc11a9c09 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xc12abb08 filp_close +EXPORT_SYMBOL vmlinux 0xc1385da1 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0xc14612c8 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0xc172456b netif_device_detach +EXPORT_SYMBOL vmlinux 0xc180ac24 phy_start_aneg +EXPORT_SYMBOL vmlinux 0xc185bcc9 ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0xc1a5e8dc redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xc1b20f09 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0xc1b4a47f blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xc1b6e488 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0xc1c849d3 inet_bind +EXPORT_SYMBOL vmlinux 0xc1d154e4 lro_receive_skb +EXPORT_SYMBOL vmlinux 0xc1d1d904 tcp_parse_options +EXPORT_SYMBOL vmlinux 0xc2013223 user_path_at +EXPORT_SYMBOL vmlinux 0xc22900bb register_gifconf +EXPORT_SYMBOL vmlinux 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0xc249959c ps2_end_command +EXPORT_SYMBOL vmlinux 0xc254af48 dcache_lock +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc262058e request_key +EXPORT_SYMBOL vmlinux 0xc2a13b41 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0xc2a35b4a init_buffer +EXPORT_SYMBOL vmlinux 0xc2be9086 copy_io_context +EXPORT_SYMBOL vmlinux 0xc2ca1bae blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f1b238 skb_tx_hash +EXPORT_SYMBOL vmlinux 0xc3210f88 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xc328c50f dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xc337ad6c tty_hangup +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc353e26d log_start_commit +EXPORT_SYMBOL vmlinux 0xc3641edf scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xc3a27ca4 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3fd4f85 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc4090afc skb_queue_tail +EXPORT_SYMBOL vmlinux 0xc411f381 pci_match_id +EXPORT_SYMBOL vmlinux 0xc42f4f65 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0xc4413c75 get_sb_single +EXPORT_SYMBOL vmlinux 0xc447f8c1 neigh_update +EXPORT_SYMBOL vmlinux 0xc47630f0 key_put +EXPORT_SYMBOL vmlinux 0xc4829c43 generic_ro_fops +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4b5ad67 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xc4bf56c1 rtnl_create_link +EXPORT_SYMBOL vmlinux 0xc4cd99c3 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xc4d39686 mnt_pin +EXPORT_SYMBOL vmlinux 0xc4e9c01c cpu_active_mask +EXPORT_SYMBOL vmlinux 0xc4ebabee dquot_initialize +EXPORT_SYMBOL vmlinux 0xc4ec0036 sock_create_lite +EXPORT_SYMBOL vmlinux 0xc52ec429 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc53c882d idr_get_new +EXPORT_SYMBOL vmlinux 0xc54d576e pci_fixup_device +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc558530d profile_pc +EXPORT_SYMBOL vmlinux 0xc55f7dc7 _write_trylock +EXPORT_SYMBOL vmlinux 0xc5844fb8 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0xc5aca629 input_event +EXPORT_SYMBOL vmlinux 0xc5ba5a05 uart_get_divisor +EXPORT_SYMBOL vmlinux 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0xc5ea1fa9 dev_close +EXPORT_SYMBOL vmlinux 0xc60619fc dev_mc_sync +EXPORT_SYMBOL vmlinux 0xc6085c3b scsi_finish_command +EXPORT_SYMBOL vmlinux 0xc646e72f hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0xc683fb61 journal_load +EXPORT_SYMBOL vmlinux 0xc6b6db3b input_unfilter_device +EXPORT_SYMBOL vmlinux 0xc6be6d24 serio_rescan +EXPORT_SYMBOL vmlinux 0xc6e3e21f phy_connect +EXPORT_SYMBOL vmlinux 0xc701dde9 log_wait_commit +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72d6c75 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc79eb1a1 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7ad2de8 pci_set_mwi +EXPORT_SYMBOL vmlinux 0xc7aeabc8 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xc7b59c3c pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0xc8271c59 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xc82fc069 release_sock +EXPORT_SYMBOL vmlinux 0xc83c3850 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xc846e95a blk_sync_queue +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8d17a65 thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xc8e8a083 __lock_buffer +EXPORT_SYMBOL vmlinux 0xc8ed1411 eth_header +EXPORT_SYMBOL vmlinux 0xc8f3bed1 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xc917e655 debug_smp_processor_id +EXPORT_SYMBOL vmlinux 0xc959c4b9 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xc962d592 blk_plug_device +EXPORT_SYMBOL vmlinux 0xc96d7ff2 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xc97d88af dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xc98f0bfe dquot_release +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9d0e56a key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0xc9ec8704 udp_table +EXPORT_SYMBOL vmlinux 0xc9f564ef simple_unlink +EXPORT_SYMBOL vmlinux 0xca0308c6 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xca33514e key_validate +EXPORT_SYMBOL vmlinux 0xca3f5ce4 dma_supported +EXPORT_SYMBOL vmlinux 0xca45a11c poll_freewait +EXPORT_SYMBOL vmlinux 0xca4d023f tty_port_close_start +EXPORT_SYMBOL vmlinux 0xca513e75 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0xca590228 search_binary_handler +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca653ddf seq_read +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xca923e2c journal_extend +EXPORT_SYMBOL vmlinux 0xca99c79f kern_path +EXPORT_SYMBOL vmlinux 0xcaa3c6aa simple_lookup +EXPORT_SYMBOL vmlinux 0xcac589e0 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xcae8523f tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xcaf24253 inode_init_once +EXPORT_SYMBOL vmlinux 0xcb23ad06 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0xcb284aac xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xcb4f6cc0 __page_symlink +EXPORT_SYMBOL vmlinux 0xcb5ca75b sk_wait_data +EXPORT_SYMBOL vmlinux 0xcb67d850 serio_open +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcb80a6a2 simple_rename +EXPORT_SYMBOL vmlinux 0xcbb5fc7d rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xcbb9d7db groups_free +EXPORT_SYMBOL vmlinux 0xcbbf8b77 path_get +EXPORT_SYMBOL vmlinux 0xcbdfb2a4 tcp_ioctl +EXPORT_SYMBOL vmlinux 0xcbec37aa set_pages_nx +EXPORT_SYMBOL vmlinux 0xcbeedf57 pci_iomap +EXPORT_SYMBOL vmlinux 0xcc0499dd dquot_transfer +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc193922 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc305800 setup_arg_pages +EXPORT_SYMBOL vmlinux 0xcc34fa84 agp_bind_memory +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc3975d2 bio_clone +EXPORT_SYMBOL vmlinux 0xcc3f176f per_cpu__x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51ee50 dma_spin_lock +EXPORT_SYMBOL vmlinux 0xcc52d4e8 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0xcc66abf3 agp_enable +EXPORT_SYMBOL vmlinux 0xcc753d90 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8b584d sk_alloc +EXPORT_SYMBOL vmlinux 0xcc9b3c59 dquot_free_inode +EXPORT_SYMBOL vmlinux 0xcca82a2e slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0xccbf7798 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xccc9f935 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0xccd596fa agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0xccd9a252 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0xccfe6109 pci_clear_master +EXPORT_SYMBOL vmlinux 0xcd3acb2f input_allocate_device +EXPORT_SYMBOL vmlinux 0xcd45fc24 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xcd54dade phy_stop +EXPORT_SYMBOL vmlinux 0xcd639a63 fput +EXPORT_SYMBOL vmlinux 0xcd8b805b vlan_gro_frags +EXPORT_SYMBOL vmlinux 0xcddeb301 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xcdf2ffd2 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xce00c3e4 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xce1951a9 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce4297f7 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xce4428cb mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce7994d5 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xcea5997b rtnl_notify +EXPORT_SYMBOL vmlinux 0xced89a16 file_update_time +EXPORT_SYMBOL vmlinux 0xcee0eed4 __sk_dst_check +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf37be5e filemap_flush +EXPORT_SYMBOL vmlinux 0xcf40b308 d_genocide +EXPORT_SYMBOL vmlinux 0xcf66b3b1 __invalidate_device +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf79d40e copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xcfac2a0a icmp_send +EXPORT_SYMBOL vmlinux 0xcfadd723 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfddd2b8 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xcff47c05 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd00de69d __pci_register_driver +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd03636df blk_complete_request +EXPORT_SYMBOL vmlinux 0xd060b985 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xd075d2f2 pci_choose_state +EXPORT_SYMBOL vmlinux 0xd07adf6e netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0992cfb km_policy_notify +EXPORT_SYMBOL vmlinux 0xd0aae5e2 dcache_dir_close +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL vmlinux 0xd12823f1 sock_wmalloc +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd1763eee unlock_page +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd19bb294 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0xd19dbd92 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xd1f1a146 md_write_start +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd1f7e7a6 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xd1f91bcd dev_base_lock +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd25ff902 blk_register_region +EXPORT_SYMBOL vmlinux 0xd267d42c down_killable +EXPORT_SYMBOL vmlinux 0xd287bccd request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a2dcec vfs_read +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2ab4660 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xd2cd5859 elv_queue_empty +EXPORT_SYMBOL vmlinux 0xd30d1275 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0xd3141b80 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xd31c6703 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xd33a3558 netif_napi_del +EXPORT_SYMBOL vmlinux 0xd34f0c62 gen_pool_create +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd399a098 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xd3a5f496 fb_class +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3b1d45d agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0xd3bbf1f6 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xd3c1f125 pci_bus_type +EXPORT_SYMBOL vmlinux 0xd3ca29e1 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xd3cca2b5 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xd3e97dbb mpage_writepages +EXPORT_SYMBOL vmlinux 0xd3f74cf1 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd4012ba0 lookup_one_len +EXPORT_SYMBOL vmlinux 0xd4056715 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0xd42b7232 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xd43f7be4 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0xd442180d dentry_open +EXPORT_SYMBOL vmlinux 0xd44d8473 pci_iounmap +EXPORT_SYMBOL vmlinux 0xd45ca134 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xd4a2aac0 fb_set_cmap +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd5241268 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd5484e45 vmtruncate +EXPORT_SYMBOL vmlinux 0xd556d891 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xd5739686 dquot_claim_space +EXPORT_SYMBOL vmlinux 0xd57c28f3 set_create_files_as +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd59d5add fifo_create_dflt +EXPORT_SYMBOL vmlinux 0xd5ab4b3c i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd5d4c7f3 mark_info_dirty +EXPORT_SYMBOL vmlinux 0xd5e904bc mb_cache_create +EXPORT_SYMBOL vmlinux 0xd60ce8ac scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0xd60cf763 mmc_remove_host +EXPORT_SYMBOL vmlinux 0xd60d7af4 ida_remove +EXPORT_SYMBOL vmlinux 0xd62bc363 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd6611791 dma_sync_wait +EXPORT_SYMBOL vmlinux 0xd66a2f08 llc_sap_open +EXPORT_SYMBOL vmlinux 0xd68d07ad skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b03483 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f2832d napi_frags_finish +EXPORT_SYMBOL vmlinux 0xd6f7a26e tcp_poll +EXPORT_SYMBOL vmlinux 0xd74e5021 registered_fb +EXPORT_SYMBOL vmlinux 0xd76b9a5a pcim_iomap +EXPORT_SYMBOL vmlinux 0xd76ec38b dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd77dec59 mmc_free_host +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a6fafa panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd7b8ea3a unregister_netdevice +EXPORT_SYMBOL vmlinux 0xd7d06220 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7ff8394 keyring_clear +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd851af78 up_write +EXPORT_SYMBOL vmlinux 0xd86f30ac dquot_scan_active +EXPORT_SYMBOL vmlinux 0xd87f28d3 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xd882300d tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xd88be65d clocksource_register +EXPORT_SYMBOL vmlinux 0xd89334d6 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0xd89c5d8f udp_proc_unregister +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a8343d dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xd8b25230 sock_map_fd +EXPORT_SYMBOL vmlinux 0xd8b55f8c dm_io_client_create +EXPORT_SYMBOL vmlinux 0xd8b89a0b thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0xd8bcbd0c delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0xd8d2863e input_unregister_device +EXPORT_SYMBOL vmlinux 0xd8dc42e6 sk_stream_error +EXPORT_SYMBOL vmlinux 0xd8e20085 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8e7b297 blk_start_queue +EXPORT_SYMBOL vmlinux 0xd8f23b5e brioctl_set +EXPORT_SYMBOL vmlinux 0xd8fda936 __elv_add_request +EXPORT_SYMBOL vmlinux 0xd8ffff21 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd917c158 per_cpu__node_number +EXPORT_SYMBOL vmlinux 0xd92e3d96 set_irq_chip +EXPORT_SYMBOL vmlinux 0xd966d3b0 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xd968de5e wake_up_process +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd986cd7f agp_collect_device_status +EXPORT_SYMBOL vmlinux 0xd9a47484 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xd9b5f84a block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xd9ba3d9c pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xd9c6441e revalidate_disk +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3e95de set_pages_array_uc +EXPORT_SYMBOL vmlinux 0xda4292b1 write_inode_now +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda5708c1 dquot_commit_info +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda928914 nmi_watchdog +EXPORT_SYMBOL vmlinux 0xdab50a1b swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0xdae37297 pcim_enable_device +EXPORT_SYMBOL vmlinux 0xdaf0908b skb_queue_head +EXPORT_SYMBOL vmlinux 0xdaf5dc1b dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xdb14249e notify_change +EXPORT_SYMBOL vmlinux 0xdb3807b3 elv_rb_add +EXPORT_SYMBOL vmlinux 0xdb4b2878 thaw_process +EXPORT_SYMBOL vmlinux 0xdb92467e bio_split +EXPORT_SYMBOL vmlinux 0xdb94240a jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xdba3acb4 ndisc_send_skb +EXPORT_SYMBOL vmlinux 0xdbb5ad5c node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbe139af bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xdbe7e490 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xdbea560d sg_miter_next +EXPORT_SYMBOL vmlinux 0xdbeacb78 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc07a4c9 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xdc0924f7 ip_fragment +EXPORT_SYMBOL vmlinux 0xdc11f761 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc446a5e pid_task +EXPORT_SYMBOL vmlinux 0xdc4be7ee tty_set_operations +EXPORT_SYMBOL vmlinux 0xdc5a813e acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0xdc873a70 screen_info +EXPORT_SYMBOL vmlinux 0xdc9bc234 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb67ad0 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0xdccadd21 skb_pad +EXPORT_SYMBOL vmlinux 0xdcd03ec1 secpath_dup +EXPORT_SYMBOL vmlinux 0xdce30c92 skb_seq_read +EXPORT_SYMBOL vmlinux 0xdd5bea18 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xdd6e1e33 dquot_alloc +EXPORT_SYMBOL vmlinux 0xdd91d4c0 serio_interrupt +EXPORT_SYMBOL vmlinux 0xdd924b58 dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0xdd961b28 dget_locked +EXPORT_SYMBOL vmlinux 0xdd9cf09f unregister_md_personality +EXPORT_SYMBOL vmlinux 0xddb1e6f1 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xddb92166 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xddc204f4 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xddd8e42a pskb_expand_head +EXPORT_SYMBOL vmlinux 0xddec0f6f pci_pme_capable +EXPORT_SYMBOL vmlinux 0xde0bdcff memset +EXPORT_SYMBOL vmlinux 0xde16b546 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xde1814f9 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xde2a2461 acpi_device_hid +EXPORT_SYMBOL vmlinux 0xde2d80fa node_data +EXPORT_SYMBOL vmlinux 0xde4ab25f tcp_splice_read +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xde975513 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0xde9aa12f __inet6_hash +EXPORT_SYMBOL vmlinux 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0xdeb3261b md_write_end +EXPORT_SYMBOL vmlinux 0xdef05880 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xdef7958b vga_client_register +EXPORT_SYMBOL vmlinux 0xdf007423 register_sysrq_key +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf502221 bio_kmalloc +EXPORT_SYMBOL vmlinux 0xdf563aaf register_sysctl_table +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf7570d0 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfb7bada acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfdff17b seq_putc +EXPORT_SYMBOL vmlinux 0xe02131e1 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0xe0296ab9 journal_flush +EXPORT_SYMBOL vmlinux 0xe0478d7d vm_map_ram +EXPORT_SYMBOL vmlinux 0xe04e947b dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0xe061ed2f neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xe06aeff1 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe093b637 unregister_snap_client +EXPORT_SYMBOL vmlinux 0xe096a17b scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0d403d6 generic_readlink +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe140b795 cdev_index +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe19a16a5 blk_free_tags +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1dd65d8 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xe1e910a2 skb_trim +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe23d7acb up_read +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe2933e02 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xe29b04e9 acpi_set_firmware_waking_vector64 +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e894a6 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xe2f22225 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xe2fc6783 dma_find_channel +EXPORT_SYMBOL vmlinux 0xe317f064 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xe353feb8 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xe35d11da sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3bb2745 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0xe3d15315 tcp_connect +EXPORT_SYMBOL vmlinux 0xe3e9981d generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe43e135e scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xe456bd3a complete +EXPORT_SYMBOL vmlinux 0xe47f2482 get_empty_filp +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4870354 _read_trylock +EXPORT_SYMBOL vmlinux 0xe49b24b7 add_disk +EXPORT_SYMBOL vmlinux 0xe4a46fcc pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0xe4add98e open_exec +EXPORT_SYMBOL vmlinux 0xe4b24b8c __next_cpu +EXPORT_SYMBOL vmlinux 0xe4c1df3e _read_lock_bh +EXPORT_SYMBOL vmlinux 0xe4c46679 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0xe4c5380d call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xe4e4b282 generic_unplug_device +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe508c183 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0xe50ec0e9 rt6_lookup +EXPORT_SYMBOL vmlinux 0xe512b13d tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe52947e7 __phys_addr +EXPORT_SYMBOL vmlinux 0xe575cffc tty_name +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5e9dbef nf_log_register +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5ee6d82 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xe63c3a61 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xe63d8ca3 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xe64e568c blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xe65062f0 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0xe68dceea __f_setown +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6b9e10a bio_phys_segments +EXPORT_SYMBOL vmlinux 0xe6c46616 netlink_dump_start +EXPORT_SYMBOL vmlinux 0xe6d47709 journal_forget +EXPORT_SYMBOL vmlinux 0xe6e9ee6c scsi_unregister +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe72d9305 kill_pid +EXPORT_SYMBOL vmlinux 0xe786168c rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xe7a0a8f6 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xe7baeb1d acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xe7c8fac2 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d307aa block_write_full_page +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7f02625 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0xe7f79e93 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xe7fc8123 block_prepare_write +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe8116e08 __kmalloc_node +EXPORT_SYMBOL vmlinux 0xe826d58f alloc_pages_current +EXPORT_SYMBOL vmlinux 0xe85060c1 kobject_del +EXPORT_SYMBOL vmlinux 0xe85e8bc1 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe892d71e scsi_put_command +EXPORT_SYMBOL vmlinux 0xe899d482 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL vmlinux 0xe8a67736 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xe8c08c61 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe94456df i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xe949cadf __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xe9683539 dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xea042cf4 cfb_imageblit +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea241dd4 skb_insert +EXPORT_SYMBOL vmlinux 0xea5e1dd2 register_filesystem +EXPORT_SYMBOL vmlinux 0xea6dd50e journal_set_features +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xea9de9c4 scsi_target_resume +EXPORT_SYMBOL vmlinux 0xeab8449e dev_get_flags +EXPORT_SYMBOL vmlinux 0xeac094b1 blk_get_request +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeaf63b7b tty_shutdown +EXPORT_SYMBOL vmlinux 0xeb1fabf6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xeb37694e bd_set_size +EXPORT_SYMBOL vmlinux 0xeb446a11 ps2_init +EXPORT_SYMBOL vmlinux 0xeb64cf26 journal_ack_err +EXPORT_SYMBOL vmlinux 0xeb833b42 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xebb053d3 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xebb394c2 kick_iocb +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebc8f256 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xec088802 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xec48d7f7 __nla_reserve +EXPORT_SYMBOL vmlinux 0xec560e99 __ps2_command +EXPORT_SYMBOL vmlinux 0xec62b635 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xecab6802 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xecd4f024 inet6_bind +EXPORT_SYMBOL vmlinux 0xecde1418 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0xecded3fb page_symlink +EXPORT_SYMBOL vmlinux 0xecf7a7f8 phy_driver_register +EXPORT_SYMBOL vmlinux 0xed0aad6d tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xed3067ea d_alloc_root +EXPORT_SYMBOL vmlinux 0xed371648 pci_pme_active +EXPORT_SYMBOL vmlinux 0xed895b3f update_region +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xeda4c0b9 bio_integrity_free +EXPORT_SYMBOL vmlinux 0xedb40e38 input_register_handle +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedf9fcaf module_layout +EXPORT_SYMBOL vmlinux 0xedfca8ee tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0xedfd0e30 kernel_getsockname +EXPORT_SYMBOL vmlinux 0xee141733 i2c_use_client +EXPORT_SYMBOL vmlinux 0xee148d91 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3f9b25 sock_no_getname +EXPORT_SYMBOL vmlinux 0xee45e535 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xee51254e pci_set_master +EXPORT_SYMBOL vmlinux 0xee7d1f28 audit_log_end +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee90da00 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeae3dca xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0xeef02ed7 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xef1090b3 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xef3da69d acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0xef458902 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef554890 eth_mac_addr +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef78cd82 unlock_rename +EXPORT_SYMBOL vmlinux 0xef99bc9d scsi_host_get +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xef9e55cb udp_ioctl +EXPORT_SYMBOL vmlinux 0xefaafb7e lro_receive_frags +EXPORT_SYMBOL vmlinux 0xefb96bcc __free_pages +EXPORT_SYMBOL vmlinux 0xefd522aa scsi_register +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xeff16439 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf00fe07d mdiobus_read +EXPORT_SYMBOL vmlinux 0xf01437c1 pci_release_region +EXPORT_SYMBOL vmlinux 0xf0408743 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xf04ee821 ip_setsockopt +EXPORT_SYMBOL vmlinux 0xf062fe50 qdisc_list_del +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf06c814f fget +EXPORT_SYMBOL vmlinux 0xf0727bdc xfrm_init_state +EXPORT_SYMBOL vmlinux 0xf0afcb58 vfs_symlink +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf106ecb3 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xf106f917 read_cache_page_async +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf10f165a simple_dir_operations +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf116d4b5 copy_in_user +EXPORT_SYMBOL vmlinux 0xf12621f7 sget +EXPORT_SYMBOL vmlinux 0xf13517ce __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf1835960 __mutex_init +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf19665d1 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xf1a000e6 default_llseek +EXPORT_SYMBOL vmlinux 0xf1b7e360 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xf1c5983d dev_gro_receive +EXPORT_SYMBOL vmlinux 0xf1d64416 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1fd1807 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf217020f submit_bh +EXPORT_SYMBOL vmlinux 0xf221b71e free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xf28dbcd8 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0xf2904fe2 tcp_proc_register +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2b2b8fd inet_release +EXPORT_SYMBOL vmlinux 0xf2dd9c3e tty_free_termios +EXPORT_SYMBOL vmlinux 0xf30636dd mark_page_accessed +EXPORT_SYMBOL vmlinux 0xf309ea05 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf32a9426 register_console +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf34d9cf1 __lock_page +EXPORT_SYMBOL vmlinux 0xf370d2d6 tcp_sendpage +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf4240c37 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4502fc5 take_over_console +EXPORT_SYMBOL vmlinux 0xf4528073 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0xf459b9cc balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xf4607155 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0xf47dd620 posix_acl_permission +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4eae356 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xf4eeea77 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf501e883 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xf506874e generic_read_dir +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf527e171 sock_wfree +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf5be2f78 put_page +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f5b299 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xf61f3fb5 i2c_clients_command +EXPORT_SYMBOL vmlinux 0xf6223687 write_one_page +EXPORT_SYMBOL vmlinux 0xf6642bf1 simple_getattr +EXPORT_SYMBOL vmlinux 0xf666cbb3 __memcpy_fromio +EXPORT_SYMBOL vmlinux 0xf67a6595 i2c_del_driver +EXPORT_SYMBOL vmlinux 0xf6996858 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6f6213d xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xf6fb2b9c k8_northbridges +EXPORT_SYMBOL vmlinux 0xf73150cf ps2_begin_command +EXPORT_SYMBOL vmlinux 0xf737fbf5 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xf749534a gen_pool_free +EXPORT_SYMBOL vmlinux 0xf74a63b5 x86_mce_decode_callback +EXPORT_SYMBOL vmlinux 0xf7709a83 ip_getsockopt +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79a0f5e do_SAK +EXPORT_SYMBOL vmlinux 0xf79bb9cf nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xf7b10dd9 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xf7ca8d4d bio_alloc +EXPORT_SYMBOL vmlinux 0xf7e142fe cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xf7e26597 __pagevec_release +EXPORT_SYMBOL vmlinux 0xf7edec5f pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xf7fcb4b1 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0xf7fdd61a napi_get_frags +EXPORT_SYMBOL vmlinux 0xf8066cdf read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0xf80c4f20 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf820e5d2 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xf829ffc8 dst_destroy +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf8341911 seq_puts +EXPORT_SYMBOL vmlinux 0xf85a848d kill_block_super +EXPORT_SYMBOL vmlinux 0xf867864a simple_transaction_set +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8ae57f8 security_path_link +EXPORT_SYMBOL vmlinux 0xf8af2d86 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xf8b30e93 mempool_create +EXPORT_SYMBOL vmlinux 0xf8cf9ee5 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xf9899664 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xf996ad06 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b50079 kobject_put +EXPORT_SYMBOL vmlinux 0xf9cb8962 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xf9f7e6f1 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xfa0564fc __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfa18cedc udp_poll +EXPORT_SYMBOL vmlinux 0xfa1a8a06 pci_save_state +EXPORT_SYMBOL vmlinux 0xfa1d545c xfrm_state_update +EXPORT_SYMBOL vmlinux 0xfa299045 scsi_get_command +EXPORT_SYMBOL vmlinux 0xfa4475e1 sock_no_listen +EXPORT_SYMBOL vmlinux 0xfa544966 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xfa77572f get_write_access +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfaca791b seq_escape +EXPORT_SYMBOL vmlinux 0xfade665f pnp_device_attach +EXPORT_SYMBOL vmlinux 0xfae7bc57 dev_open +EXPORT_SYMBOL vmlinux 0xfaf6b235 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb2fad12 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xfb4eebce jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xfb57869c ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0xfb65dd39 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfb6902b3 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb6e3920 phy_disconnect +EXPORT_SYMBOL vmlinux 0xfb89aac4 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0xfba0c2e0 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc04fc4e sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xfc20295d ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xfc27afd9 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xfc290b3c mdio_bus_type +EXPORT_SYMBOL vmlinux 0xfc2da239 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc5b0b3c blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xfc6256b9 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfc6e3b78 tcp_close +EXPORT_SYMBOL vmlinux 0xfc9ec0b8 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc4d4e4 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcefd18a mem_section +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd13d929 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xfd6f4850 native_wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdad0f00 dev_add_pack +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdbd38c4 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xfdc4388a pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0xfdceccc3 acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0xfdd0da4f mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xfde3ae39 dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0xfdf0f504 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe047ce6 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xfe195de8 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xfe1a6162 dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfe24c0e8 input_unregister_handler +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe2b8b22 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe61a139 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xfe69bffc set_groups +EXPORT_SYMBOL vmlinux 0xfe6e88f8 elevator_init +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe872dfc tty_vhangup +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfee9bc01 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xfeeeb18b dev_get_by_flags +EXPORT_SYMBOL vmlinux 0xfef347d3 blk_end_request_all +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff52c232 d_invalidate +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6b2c2f generic_setxattr +EXPORT_SYMBOL vmlinux 0xff708fd3 mempool_destroy +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffafdc5c _read_unlock_irq +EXPORT_SYMBOL vmlinux 0xffb65794 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xffbc59b1 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xffc7c184 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xffcaf79b inet_select_addr +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0x16836e04 speedstep_detect_processor +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0x2af90271 speedstep_get_frequency +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0xd494ee54 speedstep_get_freqs +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x058df8ed kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0920ad34 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094ac8f4 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0e64d5bd kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12d1b23b kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x16a7d5ec kvm_load_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x17c788a6 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a9df35f __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e4580bb kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2322e039 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x24f10771 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x29752d3e __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x299acd33 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2fda1070 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317c055d kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x327c0c1b emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x37d4ed45 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b7706d2 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x45cb5ac2 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x47afdcbd kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4a7cbe69 is_error_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4ac397c9 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4b894efa kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4e71d1e7 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x500ff23a kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x50481980 kvm_put_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x52775e0d kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x560813af kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5bb06198 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x605cbffb kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x621387f6 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x69897c8f kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6b4b6182 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6bc038e2 kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6e393887 kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x72c4a892 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x73ef6353 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7a2ba468 fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7d1b650d kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7eda06fc gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x85aee1e8 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x86d07efe kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e7f9b47 segment_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x984bbc70 is_error_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa0f3ae39 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa361bc65 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa7dd29c7 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaa2bca42 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaab13875 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaabf53a3 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xae2c2f8e kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb2a5b560 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb46438bd kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb548b6d8 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd377dc9 kvm_mmu_set_nonpresent_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd86163a kvm_handle_fault_on_reboot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd94103b kvm_mmu_set_base_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc3e442ab kvm_emulate_pio_string +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc6f69404 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb2bb2b2 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb34a4a2 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcc3917ff gfn_to_memslot_unaliased +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xce400988 emulator_write_emulated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcea5bf57 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcecafb6f kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd296def9 kvm_is_error_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd3c0a6da __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdd74592d kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdead7e81 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe2ae5098 kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe5d53aee kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xeacb2de1 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xec785360 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xed8c9068 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xef28082d kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf4414029 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf46d8388 kvm_emulate_pio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf5827c82 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xfecc267b kvm_report_emulation_failure +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xff0cee2c crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x4c32e5ae async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xdbf72ec4 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xde55d148 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x7953e14e async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xa42b5b15 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x02e1bf22 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xa028ba4a async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xc1105f15 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xf35db534 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xbb19bf95 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xe4b1cb17 async_xor_val +EXPORT_SYMBOL_GPL crypto/cryptd 0x198d3243 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x1f401cc2 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x21bd0be3 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x874b5529 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x999bff59 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xbc5288b4 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xcb401a89 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x68da9166 twofish_setkey +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x0fbf8d51 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x459df113 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x5f1f8844 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb0d0734e btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xd93a743d btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xf3736631 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x010d8d61 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x032b3930 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x04ef3709 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x22a511c8 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x295c6aa9 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x29bf60ed tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2c46ea7c tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x318f155f tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x381f95a6 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x42c965be tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x44e8667b tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x47d51449 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x486a7342 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4909ef81 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4a6344fa tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4b44a7cd tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x51f23d70 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6b959e8d tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6fd776db tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x966985f5 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc0fe5baa tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd68a1b2d tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf6a9f938 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x1fbd89e2 tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0xfc968257 tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/dca/dca 0x0ccb465b dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2ebb035f unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x6a72ced2 dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0xc82b32d0 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xd33880dd dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0xddbf4f00 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xe616c173 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x70a6277a amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x018e722c edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x02c8c137 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x062f92f0 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0a33a3f6 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0ac1bc48 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x114b6f0d edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x183644ed edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x32d66211 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x36f8e0e6 edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5c542826 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6f11f8e2 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6fcb3ad8 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8845f0c6 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8ce600c0 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x92a249ef edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa15a3134 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa2b33490 edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa5c72b32 edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa8a9c2db edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xae02f77d edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb569a053 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc47e93c3 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc6b164f3 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc8341223 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0f0ba55e ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1823885a amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x4b01887d pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x7509830f to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x955c1f76 amd_decode_nb_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb98537cb rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xc2e765d2 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xd0f094a0 ext_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xe6ff7e0c ll_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xf8dec080 tt_msgs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xb8b4e3bf drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xc1f16166 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x10a2c906 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1c9248d6 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2cbd0026 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x30f8b991 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3752dd1e hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x551c6f5e hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6acc1bb9 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6d4f361c hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7b85aad7 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x804bc0e6 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8cb196ad hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8f2cae09 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x907e49a8 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x95abc0d9 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x97641ad5 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa3453429 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa70edf2c hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xac466302 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbaadf419 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xcb54079b hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd3d34f65 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd5f92d80 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdc958c79 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xeba745fb hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xec6c0fb6 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x2740ae8f usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xc0bc66ce hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xcd3286d9 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x136b2942 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xa1e28f6a lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xc5212f3c lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xcae0db4a lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xd198c865 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x75a37706 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x0a8dd0eb hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x67715726 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/infiniband/hw/ipath/ib_ipath 0x1514b2b2 ipath_debug +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xbbfd5c83 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0df375e3 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x19f60f57 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x227185ef wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x3fcf98b5 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x56fdd785 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x606ee97b wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x72cc0625 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7a713de1 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd9d533cd wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe288ade2 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xec7ea7b9 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf365982b wm9713_codec +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2c0979ce gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x3746ea13 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x392f3caa gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e5b4265 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x63184547 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x65c377a0 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6838b74e gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6f942acc gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x79e6ad13 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x85347e7e gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9c7e7954 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb57f2c48 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc9a8c3ec gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe5409f5c gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xf6b8faee gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xff2ddd5c gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x87400e7f led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xe1b7c35e led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xeb1d3441 led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xfd2270df led_classdev_resume +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6f0898ff ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xafb5d6a0 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3cd237b ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x0a0d620b saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x14a8f5e3 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x3170c6fa saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x367fb512 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x4b6e7437 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5d5625f2 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x78c0fb58 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xaa7fcf78 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb0926d38 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd94e8821 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe2f9d6bb saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x02b06381 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4899c680 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4e8a6e49 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x527da9ea saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x5b8a681d saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x7391f800 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xaaaa34cf saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xdfd10451 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x4e105e31 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x9724e547 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x6c9b01ac tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xc6f5ed0d tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xeaafb738 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x1dcacee8 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x83c4b941 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x879b8c02 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x62f56f80 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xb98c47eb tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0xddd9659b simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x03871b6f sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1cb7aab4 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x27647f47 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4c499235 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5c79e409 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x611d88af smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x64d2b32f smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x740e6706 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x799d296f smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8993dec3 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xa27c77f2 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb515462f smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xce744b65 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd0d33d7b smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd35a04b2 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe0b74e9e smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe424a9db sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xea49a02c sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xee715cb4 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x06cce735 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x69f68c72 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xc3ed2aa6 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xd893a733 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xdc74ab7f ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe000b2ca ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe318ca04 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x118187b1 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x3acda7d5 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x50e6ec40 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x935a2418 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9e2629cd cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xa9f76b04 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xbeb07272 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xc76d9dc3 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xcb16a9bd cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xec67ab4e cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xecf1335d cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0xc0ab27a7 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x45238323 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x5227aec1 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x53563afd em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x8c5418b1 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xb7e5b4ae em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xf5bc1f16 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x0ba6c02d saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x52175c54 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x5dbca04c saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x7f7ebd0e saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xc0379827 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x30a01d5b v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x33553a07 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x625a40b7 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x732f4e17 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0xba7f342b v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x2d22e054 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x40f3af06 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x854b312a v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xe9899e3a v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x049227c9 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x07a11ad4 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1a4f0fbd __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1e3b7ba6 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x21e365b4 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x265822ec videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2ce9b1b8 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2e0a437d videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x30c32e54 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3f82194a videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x447cc7f4 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4e2e9ab7 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x5f21bdb6 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74723895 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7a5576b7 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x801f61e5 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x83ec5a12 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9018cee6 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa247f61c videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xada441f9 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb258523c videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc5e9b073 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdc72c1a1 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe0c80a5e videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xed4cb87c videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0b972e18 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0f36ad49 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x17d20dcb videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x3b18470f videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x4829eea7 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x537a45e9 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5931aaff videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5a16d621 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x933dfb43 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc7e6dd1e videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe75b76c8 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf04da62b videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf9639757 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x1c1c4864 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x720dace5 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x7903b7a0 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x058a458c v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x55045888 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x5fe2a802 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x64e3e33c v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xbdc157e7 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xc8cf5420 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0d371681 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x158e9cbc i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x17c084c3 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x1d5bfe44 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x20220e36 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x497f0e67 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x5535d7f2 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc755b261 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x1be23c3e mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x339efa18 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3523fa4e mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3ed200b4 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5f296884 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xa252cf6d mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xddd79773 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x79b4c656 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe81e333b pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x05d8c519 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x206206e7 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x2a228ac9 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x379ecd4d pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x3cbeee49 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4a6b2a8d pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4ce858fc pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5fe0e94f pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7e57cad0 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa8ffa26b pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe5b7e0eb pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x1cdb7e57 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x23722e5f pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x321001a0 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x41b69d0d pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x9a997415 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x01a42ef6 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x2bfb0971 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x3c93a11c sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x4eb83e53 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xc0c1d7d2 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x373feb27 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3e6fed95 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x51c77fe5 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6b96ab5e wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x701814d0 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x83486d9a wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x96786498 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa31488ad wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc5c4d0c0 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd8f55a60 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd9f49a00 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xefb0e7c6 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf6eadeea wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x15f2c4f0 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x38aecdc4 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x3c21dd82 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x46c4e4fc wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x512dfb75 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x576992fb wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x578b2107 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9de1c876 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xaba18630 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc33d3039 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd3b247ce wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd5e2d6ec wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd83a0e07 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xdffd3b74 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xe81d3047 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf0cf5f29 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x40274d7a wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x57bc070a wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x6128bc5a wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x840c053b wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x040346a9 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x279a1522 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xf15d8600 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xfff1e0e6 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x03e69bb3 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0f68ded9 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x1f2f1489 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x29cda097 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x5e787db4 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x788c9b53 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xb6143123 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x0656d16d sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xa95ff4c5 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xb047a98e sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc1b36fb5 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc3281bcb sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc997f9fb sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x3def07fa cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x4285ef0c cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x6b9f14af cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xbbb011fd cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xdd5c02f7 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x25538bba cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x3b4fe4ff cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x667b1c40 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xcabbdf4c DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x7dfdcb61 DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x2478d4b9 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0f4f8b4a mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1a024833 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1f218d2c mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x56039660 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6301c2f3 parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6a7bfa99 get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x74019900 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7494e1ad register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x75fd062c mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7ec9c3a2 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x86c78726 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa6bf273e add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc8e4b325 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xcf0be395 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdc490e08 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe10d132a get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xc10c903d register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xf80e5b3c add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfdb15ded del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfdbf87c0 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x3abb7cbc nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x5071b295 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x95d1d788 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc565ff6b nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe7a8a214 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x1d5034ab onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x1d7e91f4 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x18511383 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5e6fe872 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9df87b63 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9f41cbcb ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa3af0d8d ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xab26e3fe ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc2a7181e ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc445be67 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc70cfe2e ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdb7ec8c5 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf498f8fb ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf5f3940a ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x283549e5 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x389c44d4 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x67abd6ee open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x6b15ebcb can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x7d82fed5 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x8ca41a4d close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x961f140e can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xe278a345 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xf2385bc9 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xfd9dcbc5 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x1f97d7b1 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x89d2f99a free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdb1cb531 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xee56de15 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x06ba27ea mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x116b3a23 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1dfb5f8a mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x202c8e42 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x324748db mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3261e7c6 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3606fb0e mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3adf6575 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3d3d75a8 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x41c11aa1 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4476fa35 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x46c3dad5 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4e2a29e8 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x554484a4 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x588da9d7 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x58b3ffdc mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5ac5968a mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5b4782b9 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x62f7b193 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6421bb2e mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6676cff8 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6a214c51 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6c1168c4 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6cfdce89 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6fe3cefc mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x70314502 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x73458f8e mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x77d627f5 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x828bb4ee mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x895901c8 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8d0b95a2 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x924a0b12 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x92d65c5f mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x955fe6de mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa4bf5f9f mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa6782273 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa8c9df9a mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab951086 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab97a960 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb8b24bb3 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbb52c0bd mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc18be36c mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc460bdc6 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc74e7656 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd6bd5b23 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdd857da0 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe6dd5d46 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe9631c37 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe9b90e10 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf209c613 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf351f579 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf452db79 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf7ba294d mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x69caf166 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x76a738cb usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4319128e rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x43219e15 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4f784702 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x68168b2a rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x6cccadbb generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xdad3d042 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0b3eefb1 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0e642864 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x21297c73 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x33246ef3 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3fd815d3 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x40369b82 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x51023ef7 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6f0d4f0e usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ce322b8 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ffccee1 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x97f1edb3 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbf4446c2 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc30f733b usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc5286533 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc54241f8 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd209f6c5 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd84069ba usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdc3e72d7 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdf777212 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe0697dfe usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xefaf7688 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf151a1ed usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfd0b47be usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfed518b5 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00ea46a0 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x012ee05c i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x069ce730 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x14901273 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2f3c4704 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x56cc98ba i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5a12b5fa i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x66426fd2 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8e87b2bf i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xaf37086d i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb807d7f8 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd18a99ce i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf7aa494e i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xfddd043e libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x06929b39 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3ba8e2c8 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5240782d __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5565f421 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x67f16482 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x695dca30 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6e2e97a4 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7d9285ee lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa411cfc0 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb17c0763 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb5777122 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb8b78d19 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xeaecb2f5 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf9367f06 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfa8ec553 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x0942d048 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x16dc8c2c lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x240a386b lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3edbc5e0 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6d2093db lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x7e407da6 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd126a35c lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfa432413 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x9183b85d if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xa8e9b25c if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x137d1d38 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x1e21a52c p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x402527dd p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7218ee46 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9056f924 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xbc2572b1 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xd10d9de7 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf3b514e7 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf7d1b77b p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x24ae589b rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x341a2f27 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x386d2312 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x402ec92c rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x56b7a8ca rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f5b6b82 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f6307a1 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6d5811ba rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x70f54e43 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7b94e3ad rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7d0ff2b6 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x864aabc8 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8815b769 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8f8440bb rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x93f3c8ca rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9ea29050 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa363a063 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb4a05b7c rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb703671b rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb883c985 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbcc1f761 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xce06b685 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf4dfe773 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf9790082 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x076a43c6 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x93002d81 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x941c5e13 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xa44eb8ed rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbcf8ae24 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbd57edc8 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xcfc5934e rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xddd70c73 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf6968bd5 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x091265cf rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x170c0a4d rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1cbe6471 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2a4f26af rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x34a38b0e rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3dcae9c9 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x45d16f5d rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5673fc9d rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x61fef3a8 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x772624b8 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x8ec3de52 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x93fe16f1 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9a582d9d rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9c61edb8 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf4dc2279 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xfcadb988 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x34423a0b wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x388e707a wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x8c7b1c62 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x0f147aba acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x3a8937fb acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x2f20979f pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x871e8735 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x18981f40 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x362a69dc wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x4ce6f141 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x5bec364a wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x7dc126e5 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x846f49f8 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x6ef1f94b wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x50781c15 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00fc3290 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0233f349 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x03412f5e iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0aa6c603 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1401fa03 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x181dc7eb iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1af1d7e3 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1bbea3f2 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x218978d8 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x23581acd iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x28a732ac iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x297a4264 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x375b4981 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3e91d39d iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41ba1d14 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x43b612cf iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x49f8eadd iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4b1ea838 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x525b0f4e iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5368d3b2 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x53d90b8b iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5c3b5472 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x625e3f3f iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x65822ef6 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6b2a2212 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7304f5fc iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7620cc56 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7caf147e iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7d589794 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9ef589ad iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa1af0fa2 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa3e4d834 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb1bd31ad iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbc408d42 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcaffd20b iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcec27f25 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd11510f3 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd6be343f __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd88489af iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdf173404 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe52d4194 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfb5c72b5 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x061ceea5 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0d58789f iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1c73252b iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1f9ebee2 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x434e531c iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x52ce0316 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8af4f9c7 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x96c2fd44 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xadbbcbb8 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc77a191f iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdeca3ab8 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdf7cd71c iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe211eead iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe934c5e8 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf021d871 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xffc4253b iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0c7b07cd sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1b401d96 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1bb151d6 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x27e8a481 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2ed5350e sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x39ec8aff __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x42f521c2 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x43bd4b59 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6982959c sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7926d9ee sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9581982b sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9626c6c9 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9b308edf sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9cae671b sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa3a22082 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb33733e5 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb81337d1 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbe10279f sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xce0415c5 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd5f4b989 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe8228505 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xedf73b98 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfb504ef6 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x15728b8c srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x5de1a81a srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x7a54e574 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9a51a59c srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa3d3b197 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xf8edfa12 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x16a1f91e scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x2eb883cc scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x482d0c47 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x5f870f60 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x65e0bcaa scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x92b629bf scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9c7c19d3 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb33ffb29 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xe3475400 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x054f8b74 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0b8c61d8 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2da591ae iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2f19517a iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2f704ced iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3a41d367 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4fbdfb8b iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6c7fd4a7 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x77cc0aa2 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7a2ebbac iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7a6d1e30 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8a46a6df iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9757c497 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9ac98c4d iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb524840a iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcbd899f1 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe623bd8b iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf0a9bd57 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf2f7ec47 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf626c97d iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfa364ae2 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfc373a6b iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2bc93ecd srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x3fa7289c srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x6f206250 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb1f2506c srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf654ceb5 srp_rport_add +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x2aeb523f spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4505528e spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4b4ad6d8 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x67ec8136 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x712ef9c3 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xc4ce9af9 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4740fc22 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4e4b42d1 comedi_free_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x656c3316 comedi_alloc_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x813c41b0 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xa940cf72 comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xb5725623 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc57fdaf4 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x86fcde20 das08_cs_boards +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xa8403a06 das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xbd5c7f77 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25078a11 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x7a703598 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x72d1ecfc ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x88e18c67 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x8de73efb ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xbc603c7b ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xcb918584 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xda8e3743 ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xe7bb07e7 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf63a1706 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x041a6990 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x0d030da6 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x75fe69d5 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x7a33e872 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xd0da81d3 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xe475d2e7 ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x0a1ee779 osd_WaitEventWait +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x4cc1b61c osd_WaitEventCreate +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x5432d87a osd_WaitEventSet +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x746d1786 osd_PageAlloc +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x83911c38 osd_PageFree +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0xa1b8d1ad osd_WaitEventWaitEx +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x09adb13c usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1edc7e95 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1f764eb6 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x3181fb72 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x3ba07cbe usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x5a713978 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x6521300b usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7d0df17c sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9d31817f usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9df45949 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xa8066df3 usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xbad58801 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd8adfb96 usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf41ebf29 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf99092d6 usbip_start_threads +EXPORT_SYMBOL_GPL drivers/uio/uio 0x7fbff4f2 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xaab7cd02 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0xdd75aa7e uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x2ee9b132 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x9e4c1e08 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x207b4c69 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2f5c125b usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x3479c9c1 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x462141a8 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x709019f6 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9895bc22 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb8cc7a02 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xd0f12b11 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xe39e5d35 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x036ee78a usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0ffea7b8 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2451d2b6 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3f398e35 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4372e8a3 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5469c628 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6174524e usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6eff1b0a usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x721f8d89 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x9973180f ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa3cb0960 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd47bff3d usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe3803de1 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf0a04a54 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xfbda7877 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x08e6bd13 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x13d1e0e2 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x141b526a usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1eec9a71 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2f3cbac6 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3559963a usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x41e24ec7 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4b099ac9 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x57e16579 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x58b9e99d usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x601834c0 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x62e1ffd9 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x64f887d4 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7d6101d5 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x822cebe3 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x82c64433 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x865ae128 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbfabe9fe usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc7e5d45d usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdaca1213 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe27535c5 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe29a714a usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf0046871 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x2d9bc240 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x41c8251d wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x4a6f65a6 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xe0597a4d __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xfb6f0266 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x221d73cc wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x276b4e5b wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2a4a12cc wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2e684639 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x31e8cbf0 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x38051fb8 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x498600e4 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x516ca9ea wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x59a7b691 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x8be661cd wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc395d9e0 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc56e0ad4 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc64ac49a wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xcad3b5a3 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdb4206db wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf2b2755c __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x1ec38ee5 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x4fa3fc9c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xea7f0e2a i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1d6ab147 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x3f60b0bb uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x58957fea uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x63eef89f uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x811a693d uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x8ada1319 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x9309d4a6 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xee2f6f61 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x113eb73a umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x3862039e umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xa9470df0 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb3c183b2 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xbe705fa5 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc458ba3a umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xde2af4c3 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xfd65029d umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x02e16a09 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x05f05757 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x128ae03e uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1d0f80a8 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1f5b3129 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x22dc0c80 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x235bb961 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2cb8fcbf uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3be6af41 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4445d150 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x449cac9b uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x469c5f2d uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5596a9f6 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58554226 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58eff876 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x63dce779 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x66a7fa13 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6bcd28f0 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6dd7d926 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7f1e50ca uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x85417e20 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x86182077 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x94ebdbe2 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x95e56d59 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa1603bfe uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xaa2bbc89 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb0a09251 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb56d816f uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb94bcc7e uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbbb96d89 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbc96fded uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd15729f4 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xda1efcb1 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf357ec3e uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf420eea1 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf89040fe uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xfa22f860 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x5408e067 whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x02522944 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x058181b1 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x10a4e6eb wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x23bb9132 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2c893fc1 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2d75a271 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x31fcd39e wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x32bf7e39 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3f232d74 wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x47a8b07c wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4e90b98f wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x67e7305e wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7b394ddc wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7eb393b4 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x849ab351 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8aa24139 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8d0663d3 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x98fe0aef wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9f911ddb wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa95e39ca wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb1046b9d wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb6541a25 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb70d74e8 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc04a76d1 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc2494691 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcb5dd581 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd0456547 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd54677dc wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xeabb1ff9 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf70d1568 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfbf7c1fa wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfd3241cc wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x47194978 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x48896660 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x75a0d478 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x965c4ef1 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xb8daa854 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xca39db31 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xe71dbc03 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0xc7fd4933 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x6e04f31d fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x8f32f2c2 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x8ad14ae6 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xbd228acd sis_free_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x541f96d4 register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x612db4f9 unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x866e4528 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x8dd9d7f4 unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xec83e87f virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x667e4758 vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x668d2276 vring_transport_features +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x68c71d40 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/w1/wire 0x03d3d720 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x05f85617 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x1e04bf02 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x9db4ab79 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe63ddb0e w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xee7f1cce w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0xf19fb0d9 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xfbebaec5 w1_write_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x27dab7f9 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x56c22ad1 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x6b5892ed dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x4a92652e exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x6869afba exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x087d6e0d fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0x19df3d2d fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x1c2b51ba fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0x390c8f9a fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x3949de69 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x3aa2141e fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x43ddffc9 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x4447d0b3 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x49ab924e fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0x7218317b fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x792e0021 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x7e05a007 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x9e74a0e9 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0xbad6ef33 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xbc9fde18 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xbfa8b22c fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xdf23526d fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0xe6c15431 fat_sync_inode +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x01620192 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x2ca0f297 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x48e91760 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xd82a4457 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xfed63651 nlmclnt_init +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x0376174d nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x370e8d50 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x08dac197 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x10b5e79f o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x472fe45a o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x694f2db0 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x79e6316d o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xb8531f37 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xeee10928 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x15c8841d dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x30b01492 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3f8cc354 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x76a87989 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xb74e64cd dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xc3921f31 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x43348859 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x905d3da3 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x994a207f ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x0def94b0 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x2db04c40 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x3b848271 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x5303ba43 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x92232eae garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0xd15a68aa garp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x24c0636d stp_proto_unregister +EXPORT_SYMBOL_GPL net/802/stp 0x99d538a5 stp_proto_register +EXPORT_SYMBOL_GPL net/ax25/ax25 0x72abf9eb ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0xcf343ff9 bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x04e421e2 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x105ba97a dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x16a94e67 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x177fa0ca dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x17826b16 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1c796904 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3316f655 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3db90816 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ec51f96 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5f200175 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x63634133 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x648cdd77 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x68e9c35c dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70b1d967 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7f9d5237 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x90370e96 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x93913e6f dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x95ca924d dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x976788ba dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa4330539 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa841b91b dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa90e8607 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbc2d1284 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbd3e4a72 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbecd7326 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc352453a dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcb94ae69 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcbd13e24 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcd3d42d6 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcf43977f dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd01a12c7 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd22287fc dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe4961610 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf07d0f85 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf990d79d dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfd56190f dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x03e2ce46 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x153fda9a dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x35432fc1 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x69db306c dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9b880c1c dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xfe0a566f dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xe0cc7d8b nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x219af900 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x4a3a2999 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x521efad3 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x6334fc01 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x73ab4eef nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xbcc12d22 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xe87ca123 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x3b117d88 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x4673b9a9 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x6a0c48de tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xbd14c909 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcdfa5f27 tcp_vegas_init +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x3e4f2b0e ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xad3e0877 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x02fe692b nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x041013fd nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0ed4c615 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0ffe2fc7 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x15cbb5f0 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x22b18f41 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2bd4b7ad nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2e2b3990 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3c3ff797 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3ebd7280 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4186c002 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4281c02e nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x43acfac2 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4ecfdd97 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5640ded9 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x572b8f80 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x59318c46 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a265a7a nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5b5b2f91 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5d7df9ab __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5e5b4a41 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x620e5686 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a94738e nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b07eec4 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x73310307 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x773763b3 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7cf9bf15 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7dcfdde0 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7ebd9381 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8167479d nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x850523a8 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ad29008 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8dc0ac0c nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x957321bd nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x99207d2a nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa19aee2d print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa215b290 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaa7a30f9 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xae0f6178 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb1145224 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb234a7ca nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb297498a nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbc45d13a nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc772395f nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd0e199d1 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdb1d3c36 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbcce4b8 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdd7e42c9 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe16585c6 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe2c51876 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe40975d5 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7038b47 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7d60a44 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe9fd0b70 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef38e566 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef721507 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf9fe4ff0 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfaf0a779 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfbeca5c9 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd7e9388 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfe2d5c25 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xdfa109fa nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x1cfe0a36 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3913aefb set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x47385569 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x650b3f91 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x93825196 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcf4c2b17 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe3a90e5a get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe62fdc2e nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf7920c6d nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf9b70b00 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xfe395997 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x05bb9756 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x1998babe nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3b121259 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x53f0a72c nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xb1df76ed nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x2436cdb5 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xb3da17b9 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1cbfe3ca nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x24aa4668 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4766e999 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x62a1bc12 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69968714 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69972f05 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6eaf8457 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x8f7e7440 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x980a6c07 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xbaf4f496 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xbdb1fa14 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdb30313d ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x55339d24 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x3335b490 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x683a3400 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x2883e78c nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x31a1a3c7 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x944cdea9 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa1b7b9b4 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xee5101bf nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x189153a4 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x192c1159 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x19cad5a6 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x273e892d xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x28cfdb73 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x46d2c699 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x497f1140 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4c24f5b1 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f432b51 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x72465be4 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x736854d5 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7accdc1f xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb67e5511 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xba3d0f90 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xcb5779de xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd6d1f6aa xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xed3bde16 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc2429b63 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xfc852663 xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x01944013 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x0d68cb92 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x14ab243d rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x1e07dafb rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x30ae6c95 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3593a6b1 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x3909f067 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x3c099c66 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x42e7c85d rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x59b6b5e0 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x5cbedc21 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x5e141acb rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x6518ed74 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x885b03db rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x897ed897 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x8b8a8bdb rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x90c983c8 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x932ecf7a rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x9d2de78d rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xbe7ba4af rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xc2da8e38 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xd3006760 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xe14a236a rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xedbfef19 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x2df1446c rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xf677eb54 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1a7f95b4 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x367098c9 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8a6d8253 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x900d0b92 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x97d2a378 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc7295a54 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xdfbb39df gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe3379d47 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf643b956 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf7048913 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xfbc5a1e7 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0054f8ce xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x012f9e7c csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x01bdcf35 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x028b2c9c rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ea6af41 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x10fb2e33 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1268b489 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x162f4c87 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x18f9cd36 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x194260d8 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x19a555db rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b0da2de svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1e96ec77 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f0ea5e1 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f59eae6 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2046ccac xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23dc7e22 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2588bae9 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x25c0d0ed xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2650f614 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x281aca02 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x29df3277 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b3bdd24 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2bb90536 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2cbbaad5 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2e674891 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x335448d7 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x364f0b9c xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x36a1f002 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3785a46f svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37917473 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38d86ecd svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3bfa8cc4 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c3f8eac xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d728bb3 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3e8344ed rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x435f44b7 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x441ba759 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45d2e6e8 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47306835 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4eef552f xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f2342fc rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f5ad8f9 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5028565b rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x51887098 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x51c7d104 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x521f81f5 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53873190 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53e21499 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550547a3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550a89a9 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x571fbea1 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59b8f724 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ab32fb7 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5c469e89 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fa63647 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fe10c02 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6043a657 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6356ec29 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x661d2fe9 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a0d8504 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a2c1384 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a4f6478 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a82d253 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a9e481f rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6cbd4667 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x707f8581 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73e55b5f xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x742c068e rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76e3c6bf sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7793710c rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x782e4c8c rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de86616 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8019572c xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80f7a659 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8626526a rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a1840a2 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a3f3782 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b71f69e unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8ebb0781 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90d0ea0d svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x921ce38a xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x93d3743a svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x941ffa03 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x95a9e4e4 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96f2e2b7 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9cb559d2 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0965217 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1894397 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa4b26340 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xabc4fabd auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac004a57 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaee9f192 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafd37a10 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb387b246 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb58c712f svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb6860a34 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbd763218 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdfb9b72 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc02247f0 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6e6639b rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc88fd896 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc95af866 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc96628bc rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcbbfdde0 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd07fd42 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd5444d3 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce3f7f8e svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf4e936b xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd0802805 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd19af8c7 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd41f1cfc xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5b0029f sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82c728e rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9844f01 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc4dd9e0 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdff1ac68 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe03ccbe5 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe0b2021e svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1c38f11 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1c6144c svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe259ee09 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe25bec18 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe26f1d47 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe38a4a8a rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe40ec383 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe44ccf1a rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe501b5b1 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6e60b3d xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7ebca82 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe89ce2d1 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeaa8c1df xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xebeaa9b0 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedbdf049 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd1ba52 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee1d1244 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf98f8d70 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa8234e8 rpc_restart_call +EXPORT_SYMBOL_GPL net/wimax/wimax 0x04c2057d wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x20ead66b wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x23e922c2 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x38860368 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3957607e wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x44547244 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x6e495632 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x90969a5a wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc445c7c4 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc71dd468 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcc2e0b5e wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcda189fd wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcdb0d665 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x02c7ad01 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x127c8ead cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x22b93af8 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2302a9d2 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2f0cbc6e cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x30b6e659 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x37aad21a cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3afd1d95 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3bf0c0ab cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3d297d3e cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4c602493 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6c1eb36a cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x80086f30 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c067a8c cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c3b8bf7 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8d3656c9 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x900db966 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x94a014f8 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x95a0b0b5 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9696d865 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x97508608 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa9c65e46 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb852f83e cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc6dade52 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcb34ff91 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdb073927 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdd8f165e cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdd943911 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe39e0a4e cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xea167af9 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfbeaa692 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfdd15faf cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x533eda12 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x6029bf31 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x75f7b6e3 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x84f2f291 ipcomp_init_state +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x03d78257 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x050bc5f4 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0792da4d snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0a3d8a62 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0aff74f0 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x11b89f04 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x134ba7a5 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x143d2196 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x147daffd snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x25f2eb0d snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b568699 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2cfc8410 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3234cee6 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x32c02fe8 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x37207eb6 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a683220 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3affbaa4 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3dad195e snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4317f02b snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4af29854 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c844c0b snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4f7a6da6 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x517f633b snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5e3fd240 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6648f00f snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x696dc2d6 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ae7167f snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6dcad730 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7118d1bc query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x71e3ed42 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7233714d snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7378a0d1 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x76891b8b snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7af8050f snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x82ff8f17 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8309c43d snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x86486573 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8c555131 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e8e24dd snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x935f7e88 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94707259 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94ba72d2 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9edafa46 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa9ebd6c9 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab7db011 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xac5b8e55 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xacc3844c snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xadcd210b snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb0c56901 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb57dfac8 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb6115ddb snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbc729afa snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbd0a4871 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe4da11d snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbeda2999 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc0b07069 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc5ceb134 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc68a19ec snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xceb5e6ca snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd02d0766 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd20b8fec snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd3944b50 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe0c9c7be snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1f0a811 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe2144297 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe607211c snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe72ddff4 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe8274940 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeab82a09 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xebb869bb snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed567a89 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeddfd96f snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3a76cda snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf7ebfb7a snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfe4a1eb6 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x5ba54575 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xe7e941c4 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x1149202a ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x7d9a0f9e soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x3e47082a soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xc31742c2 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xf0231bb6 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x41e43879 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xbb54f3ce soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x17c931ac ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xe3efdc62 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x83b6fc1d cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xfbaff606 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0xdc72b213 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x24515210 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xdc50bdcc pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xe2fc04b0 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x2fe457db soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x75b79555 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x04cab54d tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x334807ae soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x3eedb552 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xdaa24765 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0619d75f soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x06ebd1aa aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x299b6808 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x63fb7278 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x6eda514b aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xadc8d5fa aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xeda0172c aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x60e33f1b twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x8069dfd3 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x41d1b9d6 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x706b85bf soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xd2a34acc uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x20922bd3 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xc27518ae wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x3ecdbb8c soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x44fcf986 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x4efdc55d wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x1c01df38 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xa5d141de soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x2bdf3538 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xd200740d soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x9ca35d0b wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xfb6b9997 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xddd14f82 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xf710fbae wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb29688d7 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb441aab5 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3539f0c9 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x629659a9 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x7f00145a soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x9db51656 wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x542d4799 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xddd0cdbb wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x2ade67b2 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x85cde1b0 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x9914a182 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xda072bc3 wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x5c93596d wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xb239f241 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x2e480fd0 wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x9e1d095e soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x9d99dd30 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xb9d71ef9 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x728bcd5c wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x8482ec71 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x85408646 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xd4fcc6e8 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x8431575b wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xf8377203 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x05bbe7c9 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x5fde7a32 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x4f9f6e10 wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x96c59a0d soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xbde8c9ce soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xc90b1cbe wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x2a80b969 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xce74a741 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x067780a7 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0703f840 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0d6ac57a snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0dd257ec snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x10cba148 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x10ff62a1 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1116dbf1 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x13af6d20 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x151dcaef snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1cd1f372 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fad6351 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fc50325 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x22e516e2 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x252fcceb snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a93437a snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2db642c7 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x36918a63 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x37287296 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4081bcba snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4a8a5d10 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4ecb0fcc snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x51769f7e snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5351e71f snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x539230b8 snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x56f51efd snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5b7bad0b snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5bc33f9d snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5d72da21 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x61c16587 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69d348a5 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c9e414e snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6e56e54a snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7054ea2a snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x713c36de snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x739f128f snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75a61151 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75e22ac8 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7fe80530 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87ba0983 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8c17c984 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8f7305ec snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8fc3eeba snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x94d043cb snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9bd6ad6a snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa0798ed8 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa571f7c1 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6200b88 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa7bb6448 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa9293caa snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa6cb144 snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xab758198 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xacccb21d snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb08049d7 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb6885e7d snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb701e946 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb78f0693 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc1ddb555 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc2a967f8 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcc0ac04c snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd7d27972 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd9f35890 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdfc76b67 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe2f00c57 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe325b179 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe7eacc9f snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe90a8d0d snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef4a1869 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf7636166 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf82a4e7e snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf8be5be1 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa466f04 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x15e0620c xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x4803223f xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x57e771ba xv_get_total_size_bytes +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x88072f01 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xe878f8f2 xv_free +EXPORT_SYMBOL_GPL vmlinux 0x000aef94 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x001adae3 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x003dbce0 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x003ed6a6 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0058d2cf apic +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x009a5a62 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00a592c3 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00a5cbe1 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00f94fde register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x013db8ac destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01863f17 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x019006ec register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x0190f062 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01bf2e74 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x023d39d8 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x0243a3fd __class_register +EXPORT_SYMBOL_GPL vmlinux 0x0263d425 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x028c6811 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x02a74275 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x02b91105 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x033269d2 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x035a0e3a usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x03a3f86d unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x03b34c01 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x03d9615d skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x03e25bef inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x03f1f93e debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0414bddc ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x044598fd tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x0473958d remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x04ae9fc2 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04dff538 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x04f8e715 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x05288d5f inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x068aca56 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x071f1ed6 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x075ffe8c power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0779ca1c __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x077c0c1a inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x07888f4e sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x078e03cd ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x07994b28 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x07e72e56 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x07ff4aea xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x080206fb vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x08119536 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x0846d8f1 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x085db0e4 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x086e52bd __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x088b2802 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x088c1e43 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x0899da9f bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x08b8a94b pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x08baad78 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x090a4ebf ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x090d4e7e ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09dc4765 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x09f2cf38 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x0a1a2ef4 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x0a8e09c5 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x0ad752ec da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x0afc0f13 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b4ead67 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x0bc320da i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x0bddb693 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x0bec2b6c __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x0bfaa3a5 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c32503b usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x0c701753 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x0c7798de mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0ca3ecf9 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cccfd48 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x0cd5129c usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x0d3d4646 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x0dac466d ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x0e15421e dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x0e280bc7 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x0e30a086 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x0e64872e sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x0e69726b xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x0e77d09e bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x0e7dab97 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0ec210b8 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x0ec249af ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x0f73520f klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x100c13c6 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x10621889 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x10ab9644 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x1176d0d0 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x117f5982 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x11d0f444 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x11f1af50 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x12140ce1 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x121d28d4 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x124bb3b4 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x128cb99d ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x129445f1 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x12c9d44f device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x13731022 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x13748759 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x137fc85e securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x1381a048 iommu_map_range +EXPORT_SYMBOL_GPL vmlinux 0x139ee9c8 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x13ab173c usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13c0b6a0 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x13e05aae __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x141a30c3 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x143edc5a uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1440e647 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14b2392b devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x15238e27 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x162012fb fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x1640954a class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x16788d5b bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x1697136d hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x16ac8cba dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x16eb9102 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x16f26444 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x174bcda7 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x176fa0bd dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x177e4c28 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x179cdb19 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x17a5d124 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x17cdf383 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x17d6f62a ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x17ea1290 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x181ec9e8 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x188b47ff security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x18951544 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x18969b91 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x18d317f4 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18e5bd5e pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x196c7b25 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19c7fc19 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x19f9b033 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x1a121a56 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a3dd20a cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a938737 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x1a9875f4 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x1a9b538e ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x1acda5b2 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1ad94a98 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x1b1c32ff __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x1b8b86e3 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bbe7be9 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x1be409eb sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x1c2a5354 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x1c2cd0ae usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x1c309769 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c487a9d inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x1c4a8f41 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x1c5d0e9f eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x1c7b6c2a eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c8e9b69 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x1cc5fbab ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x1d18a795 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x1d29e89d md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x1d32761b ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x1d7e724b usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1d9a1136 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1ddb3ea5 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e2f9f23 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x1e3745e7 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x1e4990cb usb_string +EXPORT_SYMBOL_GPL vmlinux 0x1e5f82de platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ec2f809 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x1ef5e83e led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x1f02fc79 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1f19d1cb usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x1f29b226 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x1f2cfcad sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1f3d1b77 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x1f5ffa2f ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x1f77ffbf per_cpu__gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fae7955 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fde3405 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x1fe42b6d rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x1ff26911 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x201e2c25 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x205dcd7a klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20d22764 iommu_found +EXPORT_SYMBOL_GPL vmlinux 0x210b84ad aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x210bd51b usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21d17748 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x21da516f class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x21e7f588 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x21f336ae inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x21f76b18 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x21faecc8 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x2215763e regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x22722d73 acpi_smbus_write +EXPORT_SYMBOL_GPL vmlinux 0x2285e98d ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22c3c2e7 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x234e4c9d transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x2352a46f tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x2356ecd6 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x235ac6ca platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x235b9d1d rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x2362a680 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23d95412 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x243aa0b4 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x246f4153 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x248aae08 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24cb5d5e bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x24d969fb usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x24e0d0e8 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x25e95115 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x261004f0 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x265809ef pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x26639e02 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x268bb556 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x26b4c19d __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x270838f7 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x27482eed gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0x277fad7c inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x2785e5be raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x278e51ac ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27c3f73f crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x27c628ff scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x28160aad usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x2844a516 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x2850f2e6 get_device +EXPORT_SYMBOL_GPL vmlinux 0x285e7e89 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28fe92d2 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x291ab4e5 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x29501527 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x297d6ba9 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x2993ba17 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x29e7acee ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2a0a4724 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2ba91862 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x2bb02aa3 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bd1c048 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c03b46b usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x2c164804 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c2cb9c6 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x2c764f69 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x2c8d7e58 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d3302cc inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x2d43fada scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x2d5dbeec crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x2d8e8f1a swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2e3937d9 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2ea013e1 pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x2eb0b03d cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x2ec92012 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x2eed2630 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2f0f795b bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f7fc7eb ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2fc00029 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2fd62ceb xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x2fdd8439 dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0x2fdf4fd3 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x2fe363b8 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x2ffc25a2 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3019a7c0 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x30373e50 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x30702f96 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x30b31352 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x30be18dc simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x30e8396d ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x311e7ddc proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x3156a638 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x317a86c6 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x3188e442 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x31a2a10d regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x31b37197 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x326badda crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x32725f3a nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x32a88e24 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32e15360 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x33401562 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x33a6d8b2 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x33c8e4d3 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x33d4bfa1 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x33ec66ef kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x340558fc regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3447683c flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x346835bc devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3493ab9b sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x34a8ea36 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x34a9a0f4 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x34c24076 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x34cba128 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x34dc79ff led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x35213407 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x35c24030 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35ecf20e __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x35fd0312 per_cpu__injectm +EXPORT_SYMBOL_GPL vmlinux 0x36147dab ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362944b1 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x372ca969 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x373bc17b ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x373d6121 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x37953253 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x37abfea7 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37e5f0db debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x3824dd5a crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x382775da invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x382d2634 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x387c312a ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x387c34ac power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x38833a5d pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x38b9fd01 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x38ea936e __memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x398027a1 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x398a9d85 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0x39956f26 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x39b9ee05 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x39e59997 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x39f10126 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x3a2ec487 dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0x3a664fe6 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x3a6de86a power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x3a804621 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x3a85fbc9 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3b09fdc3 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3ba31059 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x3bccf8db sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c42506e crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x3c59edee dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c6f0513 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x3c7d8eda devres_add +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cb3950a class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x3ccb6c30 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cd5652e dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d5f392d acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x3d6d0225 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3d8d9c0e tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x3d983c9f put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x3dc16ae5 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x3dd5d829 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3ded27af ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x3df0f251 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x3e4c6249 scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0x3e6eaa33 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x3e7349d1 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x3e927ca0 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f093a1f spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3f970379 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x3ff1c3da xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x402286a8 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x405397b9 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x40599182 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x40626177 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x4090a9c9 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x409613e2 mmput +EXPORT_SYMBOL_GPL vmlinux 0x40a9f3b9 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x40ae4dbb single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40be2c41 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x40c31806 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x40eb7312 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x40efbb1c crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x410c3b78 ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x4207fecc blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x4228fa74 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x426f13b9 e820_all_mapped +EXPORT_SYMBOL_GPL vmlinux 0x426f4cbc trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x428fe803 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x42cc3a5c ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x42eee679 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x434e62dc __module_address +EXPORT_SYMBOL_GPL vmlinux 0x43eeef87 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x4437e418 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x4462348a ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x44637f5f usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44abb265 device_create +EXPORT_SYMBOL_GPL vmlinux 0x44bb2400 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x451813c5 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x451c497d usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454d5c01 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45a228a4 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d14bdf hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x4627a83e rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x4653c6dc relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x466a71a3 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46c8e1c5 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x46f52220 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x46f66e6b __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x4713ef34 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x4724de0f i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x472740da xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x4750c99d __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x475c3565 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x47b71623 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x47d6b5db ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x47efcb51 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x4860a1bb crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4884140a br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x48af83cd crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x48efb035 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x4970a1cc regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4995f903 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x49ed802d skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x49f3c442 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x4a077834 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x4a237102 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x4a87a493 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x4abcce26 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x4acd3bf5 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x4af27df7 pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0x4af9d82c class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4b37fc3f xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x4b759823 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4b762828 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x4baa4629 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x4bd8c7eb relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x4bdc33ec usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x4bfb25de inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x4c04ec35 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x4c3f5384 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c99fa1d hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x4cec82ee crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4d12155c xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x4d3970eb power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4db28ee4 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x4e1c3c82 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x4e25839a rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x4e689bb9 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x4ec5a1da macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x4ed085bd fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x4ed4d7c5 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x4f502ba6 device_del +EXPORT_SYMBOL_GPL vmlinux 0x4f552a1b ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x4fc56cce iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fe9860c simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x5034416d xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x5035ab68 usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x50373106 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x506e12df platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x508a5385 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x50b319ce cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x50c4d586 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x50d1f870 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x511cc279 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x5129d12d fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x51549500 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x517bf66f ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x5189e6b8 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51946009 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x51f0dc15 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x5234c0ef scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x5255894b clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x527e7bec blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52ec60eb dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0x5324d04f bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x532739ed rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x53723334 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53aa3387 find_module +EXPORT_SYMBOL_GPL vmlinux 0x53b158c7 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x53dcf28d usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x5404ca04 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x5449c5ab ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x547b8f2d usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x5486e169 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x549fe6a9 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x55124695 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x555f1410 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x55f2580b __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x55fb5be9 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x561c634a wmi_evaluate_method +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x566f0057 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x56dda56c blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x56de907c ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x57174166 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x5770189b register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x580fd343 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x5852451a fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x58bca723 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x59497847 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x59819bcc __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x599b1774 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x59a95b22 xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x59c3e4cc blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x59f626ac sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x5a0acc22 dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x5a0ae43d attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a48fba2 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a76b652 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5ac78036 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x5ae1937c ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5af3808a kick_process +EXPORT_SYMBOL_GPL vmlinux 0x5b1dbb87 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5b435139 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x5b5c9711 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x5b98e017 ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0x5bf44e72 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c0c2e15 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x5c396e9c ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x5c4d453f debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x5ccaae29 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d12ee2b ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x5d276faa blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d73542b regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x5d846fcc ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d8f40d0 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x5d9ca9bc usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x5db1725a rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x5dc616be eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5de1686a class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x5dede1bd register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x5e7abbc9 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0x5eab0ecf tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x5ef5b714 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5fb90d24 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x5fbad331 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x601fee29 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x603ab8dd devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x605a018f __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x606e9731 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60cdc135 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x60fa50f9 put_device +EXPORT_SYMBOL_GPL vmlinux 0x61519c09 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x61747e09 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x6194ffea do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x619f70b9 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x61b28ce4 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x61bb6cd1 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x61c6f8bf power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x61d89ca4 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x61fde9e6 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x62688c7c usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x626987c2 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x62849521 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x628dd1a1 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62a53252 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x62c55d6f ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x6301d114 device_add +EXPORT_SYMBOL_GPL vmlinux 0x630492bd sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x630e7061 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x6321ef24 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x6326807e ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x63583f91 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x6377b961 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x63a96790 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x63b5e1e7 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x63f4dc09 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x6471eb94 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x6473dc8d usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x648f3ed7 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x64bb5f03 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x652f4059 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x65501d80 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x6565b802 device_register +EXPORT_SYMBOL_GPL vmlinux 0x659ddd6b handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x65b3ae79 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x65b43038 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e04672 dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0x678cbb2e dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x679e30fa da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x67d4ee29 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x6875ccfb part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x688b7e72 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a668cb hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x68c855a6 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x68d1b8fd pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x68f3cca1 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x691b8d3d device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x691fdbc9 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x695b1c56 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x697628ed rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x697ce653 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x69b81e2a usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x69d81264 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a66cdbb inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x6a67280a ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6ab424f6 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x6b23fbf2 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x6b3987e6 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6b540a06 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x6b6ff422 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x6b80ac6e sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x6b9178b3 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x6bd20edf dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x6bdb5006 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x6bdc5b84 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x6be56852 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6c2f4aba usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x6c404e4c led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c60946c crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c9bb9bc ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x6ced3887 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x6d12a543 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6d209d7f scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x6d2a466a ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d95f83c skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6dac1f9a led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x6dded357 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x6df514df ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x6e0854a4 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x6e0ad976 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x6e234c3a inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x6e5497a3 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6eb787ee klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6f7cba43 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x6fbed5b4 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x6fd710b1 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6fee55b4 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x700fab88 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x7037d79d k8_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x70451fbc ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x7049318f ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x704af067 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70d311c7 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x70f306df lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x71207602 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x712fc320 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71875763 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x71c2e989 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x71c88cd3 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x71d3e5ea usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x7227cda0 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x722c4f65 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x72744e59 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x7274601c fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72a96a10 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x72f10a28 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7304fc97 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x731433ee unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x7318e779 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x733e4a90 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x733e9b00 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73f043d8 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x741baa7c pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x74218fc9 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x742701a7 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x746bb95c rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x74a20c58 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x74aa383e crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x7544b472 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x757dc815 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x758fb87e agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x75abb4ac ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x7648ee0c cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x7664bb98 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x766d2e7c user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x7697efb1 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x76a95683 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x76face7f crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x775f067b usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x77b0ebeb driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x77bef1cd ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x77bfff38 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x77d3391a kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x77e47f71 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x7813c0d1 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x783c02d6 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7888d712 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x78a09307 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78f7ffcc ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79576a0e sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7962ba60 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x797a631c debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x79879bcc input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x79a61002 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x79bc6fc8 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x79d894bd crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x7a3231b8 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x7a3679fa pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x7a40ad4e hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x7a47cf8a device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7a4f6334 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x7a52dcc6 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x7a86f36a fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x7aa24be1 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7acf3089 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x7ad06a0c ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7ae32e2e synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x7aecbc13 input_class +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b356f8e ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x7b650d45 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x7b80d41f user_match +EXPORT_SYMBOL_GPL vmlinux 0x7bcd2ded klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x7bd7c566 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x7bee2635 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x7c050754 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x7c972da8 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x7cac82b7 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x7cad0ade drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x7cdca2a7 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x7cf7a255 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7d13da27 dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0x7d2ec030 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x7d94d064 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x7da38d14 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e009831 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e5e301f unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e93918c pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x7ea43313 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x7ec614fa uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x7ed7b3fe fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x7eef5eb5 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f1d0df5 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0x7f7b8caa regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x7fa7354a pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x7fbe01cf anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x7fd9c1d9 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ffc40e0 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x802ae7b7 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x802cd2c9 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x804cbd8e ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80c6e9ee spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x80f5ba48 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x81517998 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x818f2418 usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x81aff5d8 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x81c12355 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x81f7d3c0 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x81f97860 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x82178219 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x8220b053 inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x8241d30e pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x827f83ad crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82af8b9a devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82e085e6 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x83428ad6 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x8353bfc9 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x83e52c00 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x842a07ae crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x843b3cd8 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x84b149e9 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x84bd9e00 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x8532a2d0 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d4dc4a register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x860f8c7e d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x863ecb43 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x864839a9 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x86753346 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x867a579f skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x867c684a setup_APIC_eilvt_ibs +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x868d2e88 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x869b4ce9 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x86a056bc unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86a66bb0 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86bf7595 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x8766c0d5 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x876d29f1 wmi_get_event_data +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87909441 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x879f00b6 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x87b40149 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x87cf675c __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x87d7d9dd usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x880b189a __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x881cc809 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88a62d7a alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x88bfbe25 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x88dddff3 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x8941c03f rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x89428348 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8954ef75 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x89b0f062 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x8a48e223 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x8a72be8e power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8a85ddb5 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x8a8db827 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x8ac3afae pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x8ae8f1f9 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8b1ba7a1 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x8b39cf9d unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b9200fd lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x8be3c75b ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c4bff78 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x8c95f83d dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0x8c9d686d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x8cc66953 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x8cd21277 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x8cfbd1e8 dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d109544 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x8d66490d pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x8db1a37e cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x8db89810 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x8dbb36a8 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x8e3492e2 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x8e4da5db ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x8eb58c6e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x8ed61464 user_update +EXPORT_SYMBOL_GPL vmlinux 0x8efe0116 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8f501857 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x8f68a22c set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f705085 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fb0a6a8 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x9008cd6c inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x900ef362 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0x9048bfe1 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x905b1dab tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90a581e9 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x90ab1d6c aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x910a2316 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x9112152e ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x91482eef usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x9154cc24 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x91dac80e scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x91dacaa2 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x91f09504 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x91ff1264 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x92051102 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x9222cc31 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x92306c81 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x9244c614 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x924a067f crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x9260c5fd __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9314d7de rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x93260715 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x942a41f4 iommu_unmap_range +EXPORT_SYMBOL_GPL vmlinux 0x94356e16 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x9462f218 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x9492f89c add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x9503aed8 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x951a71cd crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95758050 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x957c73df alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x95bb5171 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x95e0153a srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x964d5c39 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x96b1c1c2 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x96b25824 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96ec3f3f scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0x97027221 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x970c8daa fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x975b3ead usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x975b8070 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x976c9982 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x97982542 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x97ed0ac8 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x98215d8d device_rename +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x989ba138 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x992443f2 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x99429186 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x995d38f8 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9984c858 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x99b3b5b6 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x99cafaf5 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x99cba3f7 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x99e52a5b task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x99ead1cd rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x99f9bd28 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a4d1034 idle_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x9ac80c34 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x9b0a49ac user_read +EXPORT_SYMBOL_GPL vmlinux 0x9b15bee1 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x9b1f546d unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x9b8cf883 dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9c17b7dc sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x9c6103f8 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9cca86a0 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d2ac309 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x9d2b6a58 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x9d308c4d hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d4287a7 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x9d7f68a1 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x9dbee6a1 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x9df30aef ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x9e01f6d4 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x9e414073 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x9e5f910b ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e95459a transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x9ea523f8 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x9ecdc116 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f4e05f1 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x9f723906 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f9809b9 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x9fab1dce tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fe47e28 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xa004e9ab blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa04e8199 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0xa057ceba dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xa07c1ebc pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0xa08e9278 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xa0cdedeb ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0xa0e2a2fe __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0xa1596d98 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa18e2df8 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xa1e18a68 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xa1f34990 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0xa20398b5 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa20d354a crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xa223e7db acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0xa28d8527 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2938f71 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0xa2b2734e ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xa2db37cd scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0xa2ddd3b9 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa307bd10 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa3c75f88 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0xa3cf59ab usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa419c739 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0xa422b70b __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0xa43782e4 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0xa44f0003 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa4a42813 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0xa4b4a6b7 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0xa4cc5425 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xa4d58669 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xa50c2f9f class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa51105bf spi_async +EXPORT_SYMBOL_GPL vmlinux 0xa558a84c fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xa5597e1c cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xa5855a2d dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xa59b6c3a ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5cf251b map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa60926cc platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xa6283056 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xa653e39b ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xa6981d51 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0xa708bae3 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0xa7500f18 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xa7555d5c blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xa78a2da9 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xa8084454 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0xa8535a9b pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0xa8769184 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xa87ae87e bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa8a183b9 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa959f919 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0xa96496c9 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0xa98154f4 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9d19fdc rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0xa9dbe745 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xaa17bd94 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xaa3e3aea __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa7823ba crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaddf6ca blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xaaf253a0 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xaaf5f73a ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab1691b9 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab2d2f9d sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab67f0f3 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab78750e pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0xabc2690c __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xabdf39fb tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xac8bc13d crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc19485 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xaced6744 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xad020372 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0xad096363 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0xad2329dd usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xad91164f mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xadc2d7b2 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xadfe8e31 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae21a0f4 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xae2f5298 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xae980049 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0xaeaf2872 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xaec862ca dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0xaed934c1 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf620493 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xaf694ef6 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xafb0eb94 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0xafc7c996 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xafe845e8 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0xaff8f3b8 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xaffbbaaa srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xb0223109 klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb08c32e8 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xb09850f6 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0ac5ea0 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xb0cf522f devres_get +EXPORT_SYMBOL_GPL vmlinux 0xb0eedea9 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb126118c inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1a8c0f4 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb2814e59 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xb2aefe9b cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb3390166 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xb38e9a9c class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb39b4a29 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0xb3d3ee6f rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xb4166741 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xb41c3379 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xb4787c42 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0xb4861908 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xb49488e2 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb4ff44ab gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0xb5004ae8 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xb5080ff3 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb525fbf6 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb5494966 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb5781097 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a0275b devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0xb5f9b620 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0xb5ffc79a inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xb60d46c7 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb62b5a41 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0xb64e4efc acpi_smbus_register_callback +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb66d79ca pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0xb68550af ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xb6a37769 dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6e12d64 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xb6f1a712 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb73e2d41 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2eb91 mce_cpu_specific_poll +EXPORT_SYMBOL_GPL vmlinux 0xb7e56895 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0xb7fdd0df eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xb87dd3df kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb9248321 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xb9292e07 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xb92d5c88 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb94db510 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb9954774 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9ea052b __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba8979e4 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0xbaa92815 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbae55148 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xbb4a1408 klist_init +EXPORT_SYMBOL_GPL vmlinux 0xbb802181 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0xbb8d3c78 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbc5e8d5 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xbbcc8be3 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xbc2898a9 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xbc29d792 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xbc3af6c5 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0xbc6324d0 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0xbc920041 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xbc926141 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xbceae503 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd9fb818 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbe005d0d fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0xbe072482 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe58601a inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xbe8d4de5 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbeb4cb93 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0xbec7b9b8 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0xbed81d11 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xbef8a262 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xbefa6c3f crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xbf4c5170 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xbf99ba3d mce_chrdev_ops +EXPORT_SYMBOL_GPL vmlinux 0xbfd94bb0 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xc0026e29 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0xc00f413d driver_register +EXPORT_SYMBOL_GPL vmlinux 0xc06e819f usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0xc0a4bff0 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xc0beff6f lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0xc0c9b355 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xc0d61ca4 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc1538963 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc17df988 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc1c01c67 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xc1c1cb2d blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0xc1c7399c crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc1cac646 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc2ee1ee6 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc3773a1b regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xc37d1abe disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3ce019e ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xc3e5f29b smp_ops +EXPORT_SYMBOL_GPL vmlinux 0xc4034caa enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc42f2f94 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xc4575399 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4ce6189 idle_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc512626a __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc5a94579 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc6252011 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc63730ad relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xc6485b7d ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0xc64f7419 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xc663e68c inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xc6724081 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc6789608 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xc6886564 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xc69ac489 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xc6a90252 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xc6db5721 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0xc70bd04c sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0xc71a24ce dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xc76ca8d2 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc78984e3 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xc7c0c681 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xc7c410c4 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc7d06b99 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xc7dd51f2 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xc7ec11f6 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc7f1e88f regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xc8451ec3 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc889798a swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0xc89fce0e hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xc8f11420 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0xc92de4f8 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xc94bb94f inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9b349fb scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL vmlinux 0xc9dd30a2 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca01f51c tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0xca0701e4 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xca295f03 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xca745cfd udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xcaa5d20b ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0xcab642a5 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xcabd97b6 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcade9de8 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0xcb31af65 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xcb47700a queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xcb49fff8 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xcbf202df driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc29ff99 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0xcc57c0f5 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc99938f screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd1a336a usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xcd1ca2cb iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdd79cab bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xcdf7c10e do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xce094044 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xce1b626c invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xce34fd32 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xcebc8a5b sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xcee83dd3 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0xcf04c5ae usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcf94b57a relay_open +EXPORT_SYMBOL_GPL vmlinux 0xcfac0188 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfe4f7a8 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03fdcc0 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0f4737c ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xd0f85d32 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd134fd42 get_driver +EXPORT_SYMBOL_GPL vmlinux 0xd153136f setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xd1609e25 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1c17ce0 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xd1cee293 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd297fcd4 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd3100fb6 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xd3446d7f usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xd349c577 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0xd3956528 dm_put +EXPORT_SYMBOL_GPL vmlinux 0xd3b2cbbf dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xd3c23a08 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0xd40a7282 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xd41bf688 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xd43537d4 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xd4520f6e ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0xd45f2880 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd463f16e cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0xd4744d02 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xd488097f input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd4964ab3 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0xd49f3f00 put_pid +EXPORT_SYMBOL_GPL vmlinux 0xd4da9b7d sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0xd4e6dea7 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xd53284b3 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0xd544707f fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0xd59351de platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xd5a2e771 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xd5c8ad5f class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd5ca1fb5 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0xd6133c44 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xd62b6993 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0xd64e73b2 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xd66e8890 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0xd69a2da4 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xd6c1caf6 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xd6c8d0de regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd7171e39 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0xd72bf991 sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd7893db1 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd7b348e7 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd7f61198 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xd836521b inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xd84c62fe usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xd8af3a05 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xd8c1af97 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xd8d9e6ef acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xd9042fa8 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xd92fbcd4 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xd9580daa crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xd974f33b sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xd9dda9bc usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0xd9f924f6 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda29f8b0 wmi_set_block +EXPORT_SYMBOL_GPL vmlinux 0xda316e6e device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0xda4162c6 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0xda7dd7bc queue_work +EXPORT_SYMBOL_GPL vmlinux 0xda87adbf dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdba64f1c eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xdbd4cf1b __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xdbd848ed spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0xdbeea6c0 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0xdc1c3527 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0xdc1f8f2e register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xdc3c085d vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xdc7ae9ef sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0xdccafa8e generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xdd058497 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0xdd122d33 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xdd473014 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xdd82fafd crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0xdd8787ab regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xde19a53b inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0xde1f9129 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xde389ca9 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde5f4045 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xde9e4975 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xdec0f1bd ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xdedc3d34 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0xdeff4cbd disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xdf01ff1c pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xdf22b0ef dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0xdf44612a rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdf8cdd6b relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xdf938eb2 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xdffec1e4 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0xe0a23ab1 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0dcdaa8 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xe10a18b6 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xe145aed8 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xe1bd74b3 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0xe1d0045c agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0xe1d86223 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xe1fed6a4 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xe24439e2 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0xe247343b hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe2592232 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0xe28d68cf crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe2ef9767 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xe2f63e1e skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xe326480b ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xe36811a1 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0xe3ac3f11 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0xe3ac6078 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xe4428977 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xe4591651 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xe49cb4b1 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4aaa66f pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0xe4c18159 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xe4c858c2 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xe4d66365 acpi_smbus_read +EXPORT_SYMBOL_GPL vmlinux 0xe4e76787 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe4fa70c9 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xe513afc0 cache_k8_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe53a5088 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xe5b01aa9 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0xe5b9f8c5 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0xe5c6ecfa blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xe5c92112 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0xe5d4b33e crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0xe612ffa5 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe630203b device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6886891 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xe6e8f340 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe6ed5480 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0xe71c60fb use_module +EXPORT_SYMBOL_GPL vmlinux 0xe71e565e rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe7a29673 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0xe7f51daa ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe820c472 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xe855bcba kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe9073af3 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe994e7b6 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9b8ece7 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe9dcebef shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea548d52 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0xea87b546 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0xeac438e8 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xeae01e45 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb1f636c da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb4c5744 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xeb68c290 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec1b385c ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xec69c73e rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xec94f968 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0xeca68672 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0xecc5b49f fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0xecd6ca1d input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xed3d4536 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xed9c7a81 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xedbab50f usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedef43c6 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xee321d88 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xee56b738 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xee5e6c12 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xee92f655 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xef5ad0e4 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0xef65883b platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef7164fa ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xefae9cbc platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xefb7c31f transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xefd8b632 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xf010680e bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf01e986b ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf04624a6 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xf0469f04 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf0a9b13e ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xf0e7cc52 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0xf1190928 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1c4a403 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0xf279d99c get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xf2a8c0bf usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xf2bc822e bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xf2f41f2a mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf31f6128 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xf325ae50 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xf34612b7 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf389558e tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0xf3c1c0a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf44c39f7 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xf4988656 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf49e9920 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0xf4a8385f iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0xf523a6e8 swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf540b5aa devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf5a291bb kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5c01ddf driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf5c84e5d __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf5d4d484 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0xf611dd7e sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0xf618f4c0 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xf61e43bf class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xf63d2952 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6c13d10 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0xf6c5f396 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf6cb53aa ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf71c7bd5 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0xf72ae3f2 dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xf73c0e47 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0xf743ce79 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0xf750cde4 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xf758a676 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xf79bc8ec __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xf812e1d3 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xf87be6e0 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0xf87d27c2 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8ac7e2e fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xf8f09d20 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf92990b5 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0xf9642b4f __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xfa0c1c84 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa22c3c2 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xfa372800 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0xfa796fd9 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0xfa7ba3ef key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xfad4391c cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0xfade1acc rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xfb074bf6 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xfb7962e6 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xfb882fb7 wmi_query_block +EXPORT_SYMBOL_GPL vmlinux 0xfbf59450 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc2b6a9f spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0xfc43cf24 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0xfc480535 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xfc891a55 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0xfcc8f6fe inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xfce18980 sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xfcef4631 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0xfd1e1d6f init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd64dbf8 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfdebb980 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xfe13a12f debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0xfe20ef5b usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xfe54cce7 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xfe727411 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfedb5327 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xfee6341b ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0xfeef9f6f bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0xff3e4b78 sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xff4123d7 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xff468492 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff875a25 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xffb8b325 __rtnl_link_register +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/amd64/preempt.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/amd64/preempt.modules @@ -0,0 +1,2602 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8255 +8390 +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abituguru +abituguru3 +abyss +ac97_bus +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_pad +acpiphp +acpiphp_ibm +acquirewdt +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +addi_apci_035 +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2016 +addi_apci_2032 +addi_apci_2200 +addi_apci_3001 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +adfs +adi +adl_pci6208 +adl_pci7296 +adl_pci7432 +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +adq12b +ads7828 +ads7846 +adt7462 +adt7470 +adt7473 +adt7475 +adutux +adv7170 +adv7175 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +aedsp16 +aes_generic +aesni-intel +aes-x86_64 +af_802154 +af9013 +affs +af_key +af-rxrpc +ah4 +ah6 +ahci +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +alauda +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altpciechdma +ambassador +amd64_edac_mod +amd76xrom +amd8111e +amd-rng +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +analog +ansi_cprng +anubis +aoe +appledisplay +applesmc +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcfb +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asb100 +asix +asus_atk0110 +asus-laptop +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +aten +ath +ath5k +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +av5100 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +b43 +b43legacy +b44 +bas_gigaset +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +bitblit +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bnx2x +bonding +bpa10x +bpck +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capi +capidrv +capifs +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcidio +cb_pcimdas +cb_pcimdda +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cifs +cirrusfb +ck804xrom +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +core +coretemp +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpu5wdt +cpuid +c-qcam +cramfs +cr_bllcd +crc32c +crc32c-intel +crc7 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +ct82c710 +ctr +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +dabusb +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +divacapi +divadidd +diva_idi +diva_mnt +divas +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dmm32at +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt9812 +dtl1_cs +dummy +dummy_hcd +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +e752x_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +edac_core +edac_mce_amd +eeepc-laptop +eeprom +eeprom_93cx6 +eeti_ts +efs +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +enclosure +eni +enic +epat +epca +epia +epic100 +eql +esb2rom +esi-sir +esp4 +esp6 +et131x +et61x251 +eth1394 +ethoc +eurotechwdt +evbug +evtchn +exofs +exportfs +f71805f +f71882fg +f75375s +fakephp +farsync +fat +faulty +fbcon +fb_ddc +fb_sys_fops +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +fit2 +fit3 +fl512 +floppy +fm801-gp +fmvj18x_cs +fnic +font +forcedeth +fore_200e +fpu +freevxfs +friq +frpw +fsam7400 +fscache +fschmd +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu_ts +funsoft +g450_pll +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +gdth +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-clmulni-intel +ghash-generic +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +gsc_hpdi +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gx1fb +gxfb +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hifn_795x +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hp_accel +hpfs +hpilo +hptiop +hp-wmi +hso +htc-pasic3 +hv_blkvsc +hv_netvsc +hv_storvsc +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hysdn +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i7300_idle +i810 +i82092 +i82975x_edac +i830 +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipath +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmcam +ibmpex +ib_mthca +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ichxrom +icp_multi +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igb +igbvf +ii_pci20kc +ili9320 +imm +industrialio +inexio +inftl +initio +input-polldev +int51x1 +intel-agp +intel_menlow +intel-rng +intel_vr_nor +interact +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_ibft +iscsi_tcp +iscsi_trgt +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +it8712f_wdt +it87_wdt +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k8temp +kafs +kahlua +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kvm +kvm-amd +kvm-intel +kxsd9 +kyrofb +l1oip +l2cap +l440gx +l64781 +lanai +lapb +lapbether +lcd +ldusb +lec +led-class +leds-alix2 +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-gpio +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3l02dq +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lockd +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxfb +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +machzwd +macmodes +macvlan +magellan +map_absent +map_funcs +map_ram +map_rom +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max1363 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mbp_nvidia_bl +mc13783 +mc13783-core +mc33880 +mc44s803 +mce-inject +mce-xeon75xx +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +meye +mfd-core +mga +michael_mic +microcode +microtek +mii +minix +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msi-laptop +msp3400 +mspro_block +msr +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +multiq3 +mvsas +mwave +mwl8k +mxb +mxl5005s +mxl5007t +mxser +myri10ge +n411 +nand +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +ncpfs +ndiswrapper +ne2k-pci +neofb +net1080 +netconsole +netjet +netrom +netsc520 +nettel +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nst +ntfs +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olympic +omfs +omnibook +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8023 +p9auth +padlock-aes +padlock-sha +panasonic-laptop +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas2 +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pbe5 +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pegasus +penmount +pf +pg +phantom +phison +phonedev +phonet +phram +physmap +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pn_pep +poc +poch +pohmelfs +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +progear_bl +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qt1010 +quatech_daqp_cs +quatech_usb2 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192se_pci +r8192s_usb +r8a66597-hcd +radeon +radeonfb +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +radio-usb-si470x +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +rar_driver +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2860sta +rt2870sta +rt2x00lib +rt2x00pci +rt2x00usb +rt3090sta +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s626 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +safe_serial +salsa20_generic +salsa20-x86_64 +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb1000 +sbc60xxwdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sb_lib +sbni +sbp2 +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +scb2_flash +sch311x_wdt +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sdricoh_cs +se401 +sedlbauer_cs +seed +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +shpchp +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_platform +skel +skfp +skge +sky2 +sl811_cs +sl811-hcd +slicoss +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softcursor +softdog +solos-pci +sony-laptop +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedstep-lib +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +ssb +sscape +ssfdc +sst25l +sstfb +ssv_dnp +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stinger +stir4200 +stkwebcam +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +teles_cs +tg3 +tgr192 +thinkpad_acpi +thmc50 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tileblit +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tle62x0 +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +topstar-laptop +toshiba_acpi +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_infineon +tpm_nsc +tpm_tis +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +trix +ts5500_flash +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tua6100 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +twofish-x86_64 +typhoon +u132-hcd +uart401 +uart6850 +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +udlfb +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +unioxx5 +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usb_gigaset +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +ves1820 +ves1x93 +vesafb +veth +vfat +vga16fb +vgastate +vgg2432a4 +vhci-hcd +via +via686a +via-agp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +vicam +video +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vivi +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_tsi148 +vme_user +v_midi +vmk80xx +vmlfb +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt6656_stage +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +w9968cf +wacom +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wavelan_cs +wbsd +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +winbond-cir +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc5000 +xcbc +xen-blkfront +xen-fbfront +xenfs +xen-kbdfront +xen-netfront +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +zatm +zaurus +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/amd64/generic +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/amd64/generic @@ -0,0 +1,10337 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x6ff1111c kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/kvm/kvm 0xd6e51bcb kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0x09ddaa0b suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x034f17ea uPD98402_init +EXPORT_SYMBOL drivers/block/paride/paride 0x1426b359 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x168859ad pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x2828c5b7 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x3a436db0 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x4988b71e pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x6a53d8e2 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x7513a2bf pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xa5521eec pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xb649e7c2 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0xe07de5a9 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xf5414989 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0xf562e3a9 paride_register +EXPORT_SYMBOL drivers/char/agp/intel-agp 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x07ab7260 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x249d11ee ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2896b33a ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x290b13dc ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x316e23c6 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3ae7f0da ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3dc261ca ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3ddf96a5 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x443fd50d ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7b1d674f ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7cc791c0 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8a1a58f8 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9a5c7c25 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9ed66850 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa8925d0e ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xaf7db3c1 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbbb02b1f ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbe9d765a ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc81ce89d ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xca61002d ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd70fa0ca ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf3ef28bc ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfd654030 ipmi_request_settime +EXPORT_SYMBOL drivers/char/nsc_gpio 0x0aeb9a91 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nsc_gpio 0x52336830 nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0x706ce0ec nsc_gpio_read +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/edac/edac_core 0x592284d2 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0x86f5add4 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/edac/edac_core 0xe3bb4899 edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x167b6f57 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1d38e1b4 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x3729a874 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x415ec4cd fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x41c0e141 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x46eb7f07 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x49a29946 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4e86dd83 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x51291767 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x670ce74f fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x73b296b6 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x80b2eb7e fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8326cdb4 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x852b2ef4 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x91fb9e62 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x955bb4c5 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x98d40ca8 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x9c55c93e fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcc3d2505 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xce9354ae fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0xd3963269 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdb8794c3 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdf54e5ab fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe3b79042 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf12f61ba fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00ed5ddd drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04a63cc7 drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06477f76 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0709da4e drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x076b04aa drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07f64ac2 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0886ec37 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0bc6f878 drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1307a60f drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14ac359a drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1ad49858 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1af8247b drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b861cc0 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d8361e5 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1da009c8 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1dfdcfc9 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21e0c20c drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24fba3ff drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25931fd5 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x26037b8d drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a2bc899 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c98b74f drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ef7273e drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34e20fda drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3666a24a drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b1740d5 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3d874f02 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3dc027d2 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3e379ef6 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f70f33c drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4010eb64 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x414d5a78 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x41874d99 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x430aedda drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43409364 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44055dbb drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x46e19b6c drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47922f3a drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47ceb232 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x49820efb drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4a7b1a09 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4b79fdf1 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4e42d669 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4f33f27f drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x503c2c03 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5722d86b drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5999c3a4 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5cf6c94d drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e92421a drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5fb6d32e drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x61845e26 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x623c2147 drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x631214c6 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x636a2ff5 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x64e85e18 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x676ecf33 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6790c1ea drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x68597be2 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6cc7b49d drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d0da6f5 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f546720 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f719046 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x703f9bbb drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x726ae36d drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x738da63d drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x73ae09f0 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x74186612 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7500c69a drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x75e44286 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77bed803 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78b8ee5c drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78bbc624 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7aec7bb9 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e1fb6c3 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x801e42ba drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x820f7131 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x82112077 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8318aeb8 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x852e3e79 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x858c6e4c drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x89ac3449 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8ba30a7e drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8cb41008 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x90e52d4c drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9246bf17 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x929685f2 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x940ed2b5 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x972401dc drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c75dca5 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa21e4dbb drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa63ac168 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa777127d drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa7d5dee9 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xabb4c031 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb07e2283 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0a0a14e drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb208d7d9 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4279afe drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4aefeb7 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb5db9493 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7be359b drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7f7c03a drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc070ff6d drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc333b509 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd04552e drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd09c97e8 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd29fd8cb drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd46af24b drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4dc8d1a drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4ec3ec0 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd5ef29f6 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd626e714 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdaf705a9 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdafac48f drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdc667be5 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdcfa4cc2 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe206b96e drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe72e6436 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7c35aa6 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xedc7d1b0 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee290644 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xefaf2041 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf06bf3dd drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf26ec049 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf48a9fb2 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf51d96a8 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf66002cc drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf69ff15f drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6dc8038 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6f68ccc drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x02358699 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x07b9f449 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0f7617a0 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1072fd77 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x463c7e46 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4df1d736 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5222414e i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5a970634 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5c32ad01 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x630897c0 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x64fc652e drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x688bb98d drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6e9650ca drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x780aee75 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x80f38d42 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x87c45448 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x896ee91a drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8cb052cf drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9db73010 drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9e739a27 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbcc21f2f drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc9bfcda4 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd1739039 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xed662ebd drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfec96d15 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x46cb9dc1 intelfb_resize +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xa593091a intelfb_remove +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xe76ba6ef intelfb_probe +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x346f94d6 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x6c14a712 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0033d843 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x01c99cb0 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x099535b1 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x146e26c6 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1815f0e1 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ba8c0ef ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1d455396 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1f7a00fc ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x29f32c12 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d673efd ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x30794c54 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x30b02b7e ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3ade5cfc ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3df39355 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x40e196e7 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x499c506f ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x516a1e06 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x52ba9bf0 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x54dd6995 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x56c42d22 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x599456c0 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x63a1d902 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x69d81dd8 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6f993516 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x765cbc82 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7cad6bfb ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f8879de ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7faf2a0e ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8a4519a8 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8db796d4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8f9903a0 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x93b7a28d ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x941942ce ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x97d5ca21 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9b3d4533 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa40603b9 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa5437f2e ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xad38f21f ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5cf2fe9 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb64dd919 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbba2ecf9 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc068469b ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2058ac0 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64bcec1 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc90d2e2e ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf05d4eb ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf9a2b18 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd629b93a ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe4aa5715 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe53536cb ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf024e712 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcfb7931 ttm_bo_device_release +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x67062ce8 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xfb6a4352 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xb635d5cd i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xfd9e9c9d i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0x1f0f39a2 i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0xab941caf amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x07aac004 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b234c4e dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0e4ccd83 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x11e8ec92 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x158ac548 dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x168ac4e1 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1ea3a58e hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x26b9914e hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2908760e hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ebf6e5a dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x32a052a4 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3493104a hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x37341c02 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4214f2f6 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4315e345 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x440f20bc hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4631b17b hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x498e9a1a hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4aa279cd hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x550fe143 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5678de1b hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x568034da hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x575ed70a hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x591f17da hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5a9ab593 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5fccb44f dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x601fc35c hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x623534dd hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6507d623 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x697cc07d hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6c9e9006 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6eb88005 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7a917102 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x80d3cb8b hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x85fa25cf hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x89857db6 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x900732e8 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9139120b hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x96407136 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9f7ee043 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa3fd3e1b hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa5edea42 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa6a8426d hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa8c0f857 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xabb6914a hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb55d61e4 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb6199af7 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb8286c50 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbc3ccff6 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbc4f6c2c hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbcd1f05d hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbd501460 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbdf02258 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbf741b60 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc1125fa1 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc7b022c7 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcd9e772b dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd0582459 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd09912bd hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1aa4da0 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd66f1dbe hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdc62be58 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdf8b2306 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xeb739e90 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xedaa41ad hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf7661676 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfefe4363 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x8b759533 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x9e50bfd4 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xc99a183b ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x03ae7a8f rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x1c9ed3f3 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8a721ed9 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc91bb9d3 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xeea7435f rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xf9a2982b rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1561d589 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1a617e68 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x23bdf49e ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x38d11aa6 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x410acd1d ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6951e4ff ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9c315af1 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xac04ddb4 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb16229d8 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xcee12cab ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xcfb21a3d ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd75427fe ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe263b5b4 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe8b42cb8 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf74dce9c ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf7d0882e ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xfea95e47 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x05281cd9 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0a314363 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0e60fa25 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x128aaa72 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x14216908 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x17ada164 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x180b8545 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x182a5d80 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bbc8d7e ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bc196ac ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1cf2f4bb ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1eef0a5c ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27be86bb ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x296d808f ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2a998390 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2f478e84 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2fd65b77 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x36eff056 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3a642dac ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3ab6a2a9 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4cbc07dc ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4d97a012 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4ff2572a ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5277c441 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5727b685 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5a4c6203 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5d25bf9e ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64687bbc ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67c1bfdd ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x69da71a8 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6af86082 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6b50a707 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7c0099fe ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7dddba92 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7de0035e ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x80d08c96 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x84ebc46d ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x88856873 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cd558ab ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9089a353 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x933447de ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9999c9e5 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9bbccc0e ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e1b301f ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa479c06b ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xac9dc602 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xade765f4 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb3a89dcd ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb4e42095 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb501761e ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbbd3d94f ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc10562f9 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc38e3a11 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc5385072 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd12edd67 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3149162 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe0de730e ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe15a691f ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe326deaf ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe55bc32a ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9d062e6 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xea9740d3 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf06bc25c ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf52b6597 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf991bca2 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf9bf7337 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x1bd0b8cc ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2118b914 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2e55045e ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4c675b7c ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x60a72f2e ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x689d50aa ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7af7b0f5 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x820919a7 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa2883118 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa64e2bb6 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc62738bf ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xca839858 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x0c194960 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x20dd4adb ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x29844e41 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x34220159 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5c18ccfe ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9c56fd34 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc1c9866b ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xcfc214e8 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf520d09e ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x10d454a8 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x394f5db7 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x4b8be22e iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x59e42a20 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xad95421a iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbd90925f iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xdbdd9452 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xec344520 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0e17e43f rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x32dc506f rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3d3f4cc5 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3d8b1c4e rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4e0e8198 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x643dc2e7 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6f222bc0 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6fd5bac1 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x77f11aa3 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x84a2cd68 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8906040e rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x98dbedca rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xbfbd5bcd rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xca4fa8c0 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xcadd3a50 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xdec8ed0c rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe088ca44 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf4ebc3f4 rdma_set_ib_paths +EXPORT_SYMBOL drivers/input/gameport/gameport 0x118172b6 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x43e0fcc4 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x6435249b gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8540846a __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x898e3328 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x9c1a64e8 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xbc74c997 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc8548370 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0xfd92d6d4 gameport_open +EXPORT_SYMBOL drivers/input/input-polldev 0x1a979e26 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x4408196a input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x8a2deba0 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xb925c8c8 input_unregister_polled_device +EXPORT_SYMBOL drivers/isdn/capi/capifs 0x2c54c957 capifs_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/capifs 0xd0bc06ce capifs_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x1f0762a3 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x310f6d03 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x476175ed capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47dbfa0a capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5aaf3ef2 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5c77c2b1 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x5df7521e capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x788d398c capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x917558c7 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc1eb33cf capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd1eb0ebd capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe9f62f29 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xefe3704e capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xfab7beeb capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x0db193ac b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x261469d8 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x2eaf1620 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x336db6da b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x36b188d8 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x495a75fb b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x6044996e b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x8d6e980f b1ctl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xab67ef22 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb2fec798 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb35e9dd7 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xba941e35 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xc3934bfc b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd1cf1852 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xda177358 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdcc73c8f b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x1b470448 b1dmactl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x233ca0dc b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x28539486 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x2891a0f9 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x36b7a287 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x4f15182d b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x503f8626 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xb049092f b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xc8340f13 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xf0ab33b0 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0xa7dc60ee proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x05f2bdc2 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x4b892b9d mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x7eec0ec3 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xbb831b08 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x44fc849b mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xe24e0c97 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x2844a899 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x4b228114 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc0c558f9 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd94696e8 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x18fdca49 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x25134bd4 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xc4139e15 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xe8bb11af isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xf2f6d059 isac_irq +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x333e7a2d isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x7e06fe3a register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xdfbfd7da isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2dfc75d8 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3285cc5e recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x390ee5bb create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x57dd028b mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x72b88447 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x75d6693c recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x89158e59 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x964c1e1e get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa2a2cd3c mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xba071b7f recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xbc687415 confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc7e2d7f0 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xce0751d3 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5ebc131 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdcd86921 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xddb7dda2 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe030a42a mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xec6d13df mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf0df4e9c recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf109448f dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf29b5a6c mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9c0455d l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xa895f197 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xcd509d16 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xd6d8f0f6 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0xf0ff999c mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x0e35396a mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0xb9de7375 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x8ef24c07 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x22ff819c xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0a5b1564 flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3696447a flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x46ee6149 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x586ed3a9 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x666e3673 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6b976af1 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6dc5a3dd flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x83d765ed flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x919b3db2 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9d49836e flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9e087373 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9f886075 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa1900461 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa6811a1b flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xbec5c015 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc46b0d6f flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd7d527c1 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe6e65291 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf69900f7 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfd8f0662 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x5f78d80a bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x6aa21537 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xcbe50edb bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xf8443ef8 bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x01e32f53 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x0e7e06db dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x3e727ba4 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x57c03709 rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x5f087ee2 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x70b48609 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x96d1b21f dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xba3e9a9c dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd0a22f68 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0xf028a577 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c457c5c dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0cbeeab2 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x11c5619d dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x239b683e dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x281f7e86 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2897b01b dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2c28335d dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3ad63f80 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4ad25e71 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x51f3767c dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x54a08c8d dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6767ef6d dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6988f784 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6be43ea8 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x70410b6f dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x718bc0e6 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x808727cc dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x83045615 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x93fc69bb dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xaae347b8 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xab0abf5f dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb1da3ad5 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb5c54920 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcb89fc7d dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcca08cb5 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcce0eeed dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd639b9bc dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd7765e69 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe025b8a7 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8668b4b dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8dd0a52 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf3181adf dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf5fc66bb dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x81a00306 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8a412dc2 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcbcf8f6d dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xce623662 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcffc0325 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xe71fd000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xfac77664 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x494de9ca af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0e803868 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x1c72fe49 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2d78dd9c dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2ee2fd40 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x53a29dfe dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5f356ec5 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5ffaa18d dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x81c7801e dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xa098aef6 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xba5d2146 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdbc0c8d3 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xe8ae4e1b af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0xfda54672 au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x4e59b366 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x02d0ee56 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0xf8fb82d9 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0xf0613c99 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x352e6676 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xba6c55f5 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0xf9803020 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x853ae976 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xbc8e7c04 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x42874d36 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x8863e696 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x9223345d dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x34f0f86b dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x10f2a2f0 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x18ce038e dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x24f062a2 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x67042e6e dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa883391d dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xaa58fe71 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x2f2c5073 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xb21dccb0 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x1f387a2d dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x25014d21 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x750f0eeb dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x77766cb0 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xb84241df dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xccd865dc dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x2f63c31f dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x6ee76331 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x722db8d2 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xaee4647a dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xe5d46df8 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x10345583 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x73e25fb6 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x7e8d948a dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xe9ea436c dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0xdab1b204 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0x36f34153 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0xbfeaed30 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x140dc352 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xfd398e60 l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0xec44d5b2 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x9e511490 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0xec371b7f lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xc865bfd6 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xe3171da3 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x5a10d670 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0x034bc75b mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0x6618dd88 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x826d3c1e nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0x765176c9 or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0x4e10131d or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0x0fcee4ac s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xe6ac092e s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x56a310cb s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xc709d85c s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0xf6272f72 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x8ade3bff sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0x5c567383 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0xe7e731f9 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xe2a418b3 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0x0df1e714 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0xf7f6cb00 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x4facfe0d stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0x2fc5b187 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x399f004d stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0x67a297a7 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x5c0bfd92 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0xbb048232 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0xc019e6c7 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x7719f667 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x7da20307 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x143000fb tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x2d16e763 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8261 0xc53aa390 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0xffb88052 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tua6100 0x39a83bcd tua6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x86c4212d ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x7bc132a4 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x4ec09cee zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0xa23c0ccb zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x4741da26 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xe3f385f7 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xd1dad07e ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xfa1dd1b4 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x534cf512 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x6b980fe1 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x79330c0d bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x600fd7ad btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xf267d65f btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/cpia 0x161518e5 cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xbffba4b2 cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xb3b35366 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xebe4b8fa cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x4126e602 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x4cd6ae0e vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x1447dbbc cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x144963d5 cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x4e404588 cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x585ef895 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x7f786893 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xe5cd563f cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x11443a54 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x537fb994 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x646af89a cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x7398d3c8 cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xb0dcf72e cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xddc97722 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xe83e7f0f cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x04d9bc0d cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1f783e48 cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x24e7007b cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x306dcd66 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x319f981f cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x33d5439f cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x34aa77e9 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4871d3e2 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x490a4d70 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x742a8797 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x743bffc7 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x755ef3fc cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x80de61f0 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x91c545a7 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9aefb35d cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa31d615c cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc2a6449d cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc9232608 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xcb920e51 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xccd7d248 cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd19ace3b cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd9948934 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xb76ebf3d em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xc4d835de em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x1a6090e9 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xaa630557 gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xb1409db5 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xbcdf2987 gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xd600634f gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xe0170329 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xf478f061 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0f2bf329 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x865f4621 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8f650f6f ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa1f2313d ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xc3c14859 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd067dc95 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd4f61033 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xeb2ef714 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf023c2bc ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf5677705 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf81a8cb2 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x034c5e8a saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x07646f79 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0d9e6c58 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x2739a705 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x33512755 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x3984f535 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x4fa437bd saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x57bb10df saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7c390f77 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xb28ee717 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd8c37471 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe7910144 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/soc_camera 0x0b9aa2d2 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x14b901bd soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x5fbec039 soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x84650cc0 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xa59be336 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/tveeprom 0x74f61c6a tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0xf46dffc3 tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x03ad981a usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x16a2915c RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x38733f27 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x407a321c RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x4b05d94d usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x9b6a67dd usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xddecac6d RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf5011f67 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xfa863c66 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xfdd287f8 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x5aebf557 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xb946dd91 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xe6948d10 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x0c217400 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x2bfc5a02 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x51867333 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x71f713c8 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xa858ca32 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xc8dbd580 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videodev 0x00895fd3 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x233100b2 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x8682d558 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xa84db9de video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xa98d17f1 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0xb69c1baf video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xd3640fe0 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf266a29c video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xf9290d00 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x1614552d videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x4e8e259b videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x9fd9c1a4 videocodec_attach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xeb068661 videocodec_register +EXPORT_SYMBOL drivers/memstick/core/memstick 0x20513fe9 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x3f25aeb4 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x4e1d69c7 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5b392d71 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d820a02 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x70e61b7b memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x71bacaf2 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x90810e8a memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x99c0ae61 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa5c4f45d memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa6803e7c memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xc145c619 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xcf794ea2 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xdafb83ab memstick_resume_host +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x13790360 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1a95ad10 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1c2e03dc mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x22b1db0d mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x33f4221f mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x40bd3ae7 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4430ed5a mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4b4fb096 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x52ae89cb mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5432bef2 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x58f406af mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5d9a1a6c mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9286b536 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x95023f61 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x97f3676b mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa062e27f mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa5c189d6 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa751b828 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xacaeb4c7 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb7c77f9c mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc9b49625 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd32e1054 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xda83db37 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdbeb8ebf mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xde91c0a7 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe24b2642 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf6d74a00 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xffd03214 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x178f747e mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2b3369fa mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4311c24b mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4831a04e mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4d50a5c5 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x605e5184 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x61ab331f mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x698e9811 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6b90860b mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7860ef03 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7dcf9870 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x869acb21 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x871c3b37 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8b39e087 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8bae9aa0 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x90df5a73 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x920c4b94 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x96f38049 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb8538036 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xce995229 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd2909b94 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd3f646ff mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xdc7a0219 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe61a9877 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf1dc457c mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf9bbb6c4 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x083c78ff i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x24be12b6 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2d73b01a i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3490d7f3 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x35187aac i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x38f9cac1 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6d74cf9d i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x715df54d i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x72247fcc i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x729560c0 i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x833bfdc1 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x88818020 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x93c1bc49 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x957aaf6f i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x99409d73 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x997a07ae i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc76a79fc i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcc70ac4c i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdd0331e8 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xde120df6 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdfde2c96 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf1fc72b0 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x04f3d134 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x2cc2413d ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x5e9f9795 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x82e561f6 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc050b125 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xcbf862cc ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xdd298092 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xf0c238c1 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x03888060 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xa7756534 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0xa6e9d06e mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0xb3c9a67e mfd_add_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0x3ca4dc8d c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0x48831fba c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0xae33e037 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xef021fa5 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x34f91b95 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x3fd292ee tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x49be84bc tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x4bfa6006 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x5aad1c12 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x629a44c6 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x97ad452b tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0xa3ea03da tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xb5e53e7a tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xc30f58a0 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xc3e19998 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xe83b805c tifm_map_sg +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x60347bba mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x2e0f07f4 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x4bdedc70 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xb930ae88 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x4ac80313 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x50034f9c map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xb4cfe262 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xc9611e42 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x1286aa20 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x604bc55f lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x443ea61d simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x4088585d add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xe9ce2acf del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x485df4ac mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x5ef8ebc9 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/nand 0x6506f560 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x947076fd nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x68d35fec nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xf7485e59 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x01027fdc onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x3b6b40c6 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x49b4fcf6 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xe3475f00 onenand_scan_bbt +EXPORT_SYMBOL drivers/net/8390 0x06e7e134 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x48c51a23 ei_poll +EXPORT_SYMBOL drivers/net/8390 0x4cc44295 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0x4f5e2c5f ei_close +EXPORT_SYMBOL drivers/net/8390 0x61d50dbf ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x83e1a80f ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0x8e3593f2 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x90508060 ei_open +EXPORT_SYMBOL drivers/net/8390 0xad6b536c ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xb2d0bc59 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x1a0c7f1e arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x2e2474ba arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x813a9a15 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x96f1b5f5 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa42d418f arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa7ee8063 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa7f6d4c4 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd1165d70 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xda656b10 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xfce9ba02 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x14a68795 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x2d562397 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x93de8312 com20020_check +EXPORT_SYMBOL drivers/net/bnx2 0xf286d844 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xc9c6f118 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x038524e3 t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x03bce2d2 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x049fda98 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x21902677 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x29a31b5c t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3a267bae cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x54869323 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6c668d3f t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6fc87046 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x7f814cf5 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x879e9dd3 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb59887cb dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe0c2bcea t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe2ebe367 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe7d097c7 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfef428fd cxgb3_free_stid +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x149bea90 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x40498dd0 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xa348947a hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xca53ed21 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xde1df17c hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x0274f555 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x0553ccde sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1a53f906 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x27204b2b sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x5eff3e9e sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x60c0cf9f sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xae830b41 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xaf217736 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb3813517 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb9c5a476 sirdev_put_instance +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x10c4cb6e mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x17b80d18 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x4f1ff44f mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x5b1da042 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x5c868c8a mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x74727f12 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0xb8f1742f generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0xc855ad76 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/pppox 0x18389953 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0x26d9b488 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe75ea245 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/sungem_phy 0xe27050da mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x374a3888 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x6766b136 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xc0acb952 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd85c26e0 tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xe789d736 tms380tr_open +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x05b48dc0 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x13e534a1 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x3e76a2f6 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x73a2ad2c detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8b486f44 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8d76f952 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa66fd22d attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb1890435 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb6172b56 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0xbd35a2cf hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0xca9a9f5c hdlc_close +EXPORT_SYMBOL drivers/net/wireless/airo 0x8d93a09c reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xb9f8f4c6 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xfacbb2a2 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x24611076 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x2ced6ad9 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd729b160 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0xd14346bc stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xe80c9de0 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xe987207b atmel_open +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1d2231c8 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2811018e hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2b0d05c2 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2e981f14 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3d38c974 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4aabc991 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x58ce829f prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x600d1c39 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x609b38b1 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x878e8268 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x91109cc4 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x97040d1e hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb30dc5f1 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb72146ae hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbbd6094d hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbc47525b hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbd1d871f hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbdbd8539 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcafdba80 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd7e4c062 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xea59d6e6 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xecb19e54 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xed10faba hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfcf11857 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xff097247 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3f505e79 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x42d1985b libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x49cdbc2f libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5958be38 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7a2fbb90 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7f96d414 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8678f9f2 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8c0f47f4 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9730e6ab libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9a445960 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9bae8a0c free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9ed3b7c5 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9fed28b2 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa1837d89 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xab21d63d libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb68462c2 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xbc34e809 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc63cd1af libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xde6b9836 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xeb003f4d libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfe13d05a libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x00ddba9f iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x00f5fa5f iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x01492f62 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x04ba6004 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05472739 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x062e5f02 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x084b95cc iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0a9d4c53 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c325416 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c60fc89 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e7be668 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e80df71 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f25b5e7 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f53397f iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1216742e iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x122785ee iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1386fa00 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x171a65a2 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1adca7cc iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d43276a iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e681778 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2087a989 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x225e27fd iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x23b827a5 iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24e32240 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2c8a660d iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x32f79039 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x396e020c iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3a948c6f iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3cd66a71 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x407d60c4 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41eca744 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42a1409f iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42c3cc9e iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x452b6f06 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4565fe33 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x462daf02 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46a32762 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x471e117f iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4819c12e iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49172a0a iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49afbe72 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4d515b16 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5012c7f8 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5035e4a2 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x51d3e1de iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52ad50e6 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53f8053f iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5758dfa0 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5835a547 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5944a4b2 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60774702 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x623866f7 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x658685f7 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6e953116 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6f70c5ae iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6fe839fc iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x705700b5 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75a0c6ef iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7615a222 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x764921f8 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78f83492 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7d69c07e iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7dbe2f46 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7ee8bdbd iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x846929ee iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8710de63 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a806e7f iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x90dc9a19 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x932d94fc iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93e27136 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x95dce55e iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9695e204 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x975ff291 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x97c609a6 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99712c10 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e307aac iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ff49e4a iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2754ea1 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2bed937 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa42b164e iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa487b894 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa0c09c5 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xacc35487 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xada107c4 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xae1583d1 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf457439 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf4b27f3 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb0be52b4 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb154b693 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb6b2b0c8 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xba921fb0 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbaf2ba1c iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbbc23f87 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbcf3e9be iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd4c5d91 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe7da5a3 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1ae76a6 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fae7b9 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fb508a iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4096b3a iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4a4fad8 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc50412d0 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xca9bed6e iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb24d261 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcf9bcbc3 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd1edab26 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd31fb4ae iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd3615fd8 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd427e91e iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd5508262 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd6a4842a iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd79ac26a iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd8322246 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda7277fd iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda873bd6 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe069ccb3 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0d3b070 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe13470f8 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe26d0815 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe3797d22 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4397c1f iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe67c8387 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe8a9f856 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xead6ba66 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf08bec8a iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf08ddc2b iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf1f44885 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf43c551d iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf56d6ed5 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf86a8846 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8dc2841 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb25d9ba iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb6d3629 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfca5e7c0 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfcb78454 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfee582cf iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x36f14e31 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x75bdc40d orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbea3677b alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd49d0a3f orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe4b6a5ac orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xecaf7d65 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xfc1a61af free_orinocodev +EXPORT_SYMBOL drivers/parport/parport 0x049cc2bb parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x0b8e4309 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x1b27b416 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x1c3fce43 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x1e32d284 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x1f9a8495 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x2ecfd81e parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x32416463 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x32844347 parport_write +EXPORT_SYMBOL drivers/parport/parport 0x33c1d07d parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x41b8ddcf parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x42e6a809 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x44ddcd18 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x54fe4373 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x5c824005 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x5d9bb3ce parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x61c8f533 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x62bc0238 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x6a77cb58 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x6fe8e0d2 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x7c002b91 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x800f1d9e parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x974b3f72 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x975dee16 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x9d013207 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x9fbdab9c parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xd4103435 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0xe2685530 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0xe4f4127e parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xee6799ca parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport_pc 0x5c448b2b parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x722d22ca parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x06b2911c pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1e743405 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x29bf7e78 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2a7be3b5 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2fecb511 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3a32c0c3 pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6dc9bee3 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6e228d0c pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x873faa5b pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8bf7547f pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x90c42878 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9a8a7c64 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd9a134d5 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe69a6040 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf1b6029d pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x124d6717 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x34b8775b pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x39cfbb87 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3f11f6f6 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x47dc6c03 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x59768eef pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f42a69d pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x63f033d4 pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x66c73ea9 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6a36214f pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6e0bb03d pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6fb9658b pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x75edb84f pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7e364a0b pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8cc1df68 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa95d4495 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb8451fab pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbccb146d pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbeda1bb2 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc06445c4 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc16bd6fd pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc210ce34 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc9c165cf pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcfaabcb7 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd200e47c release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd5e25310 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd62c18a7 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdcae4bdb pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdf6f40c5 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe811ffd6 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xeac643e8 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xed46e620 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfc46800f pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0xf5fd989e pccard_nonstatic_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x576292fa pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x0545d6d5 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x14bf3899 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x207dc205 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x52328e58 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9bdcf468 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xaaed736d fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xdb9791fd fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x05ac2fa2 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x077a5060 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x12f0ab10 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2491fbe7 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x28665c74 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2c4a33fd fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x340ad3d8 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x37308271 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x374e1dee fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x37eee2c9 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x38e450c3 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x391a5940 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x45e5eead fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4a78e776 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4c2931e2 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x615e51f6 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x72d26462 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x78345d0d fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b5df165 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x951a0ff9 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x970b31d6 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9845b9e6 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x988414e4 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9b4a49de fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9d76a6ae fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa0b190bc fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa46527ea fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa5dccfe5 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb7d86469 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbff54c98 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc85707dd fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc8be1146 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbc35a0b fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbe97dc5 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe2f70421 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeb6b61ba fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xedfa2b49 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf62187fa fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf87cc621 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfcc129a9 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfcd22f30 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xff49ef87 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x9df2940a mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x044a83b4 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x27e619d6 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x290f0b5a osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x335eb847 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3b723f38 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x43818369 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x465f9978 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x58ca31e8 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x67772984 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x71d9aaa4 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x74e67bc0 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x78d4fb68 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7c2f26dc osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8518c6f9 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x86b43d28 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x891cdf29 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8ed46dff osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa0c242c0 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa0cb6c7e osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xab5b40fb osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb20c52b4 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb5597a2d osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb9b8e0b5 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xba8f472f osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbde47496 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xce903563 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd104ab10 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd6dbedbf osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe40bbad2 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe5c54813 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf78ecff5 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfcd33118 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/osd 0x4cdb9786 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6264b223 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xf0331a12 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x0e3cc56a qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x51ada454 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5e825bfc qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xa8af9892 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xbddda1a6 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xebcf016d qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x322a9dc0 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x4de7b83d raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0xee45d649 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1fc4f778 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x50377a0c scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5c87afc1 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6862d8b7 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x72747013 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb235dc68 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd0247b95 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd25ef7fa fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd5ca58d5 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd8f7f328 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe90c5815 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xee31afb9 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0557afad sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0da5d1c9 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x106b93d4 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x10d14f7f sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x17defe5b sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x20ad6413 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x30bb649f sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x35c58488 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x39176fe0 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x52522aaf sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x66d34bf3 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6b0b0377 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x85c3f321 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x89ce3094 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8b0a03c8 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8e9d80e4 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8f5ccb4d sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x911d6015 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9a784fc9 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb0ab63b6 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcc9f58f4 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd8915479 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe0275117 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe287ba1f sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe45fea84 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xeee49143 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x4522468a spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x59c7ad42 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x6e1b6866 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x864e1a32 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xb5a12392 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/ssb/ssb 0x03b73391 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x11436f13 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x1426f8d6 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x1bbd06af ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x25575d38 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x395662f7 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x3cf01961 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4a45fa31 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x4aa36156 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4fd08b5e ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x535b4162 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x7406817e ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x97420c45 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x980a6c4d ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc8d6391b ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xda3079de ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xe4748dd6 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xe58f3bee ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xf3f94c2b ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xf84f5727 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xf994a447 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0xfa35a7a1 ssb_device_disable +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x195cf162 check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2c242af0 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x3123c4f9 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x491418e3 comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fd9d954 comedi_set_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x56f8a5a7 comedi_reset_async_buf +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x786160f4 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8531c662 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x9380a2b5 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x93a09c29 comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x97320e03 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x992b10e4 comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xaca2c440 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb2d558a9 comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb83f6ad comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xcb92918a comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xe9021ffe comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x333224f8 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb102fbe4 subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb5aa36bf subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xf8d6c38a subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x4b43044a cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xc344be4c cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xe6764634 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x10577858 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1442d280 mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1ce69558 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x32c0f471 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x38d024e0 mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x47d81326 mite_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4bd9d705 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4df37c4f mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x57c58c49 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6e5e8073 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6fdbc8a4 mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x86ce6cd7 mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x8ff0e43c mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x917097c4 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa0d81e90 mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa52d4af0 mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xad55e4f5 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd70543d3 mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe867f53f mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfb3ba025 mite_list_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfd5776f3 mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x12258da6 subdev_700_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x8ae2ee89 subdev_700_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xcb81a3f9 subdev_700_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xe8d0e594 subdev_700_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x54fd0d6d comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x042d55f4 comedi_loglevel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0488ce0e comedi_get_n_ranges +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cad1c36 comedi_get_subdevice_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x13e3042c comedi_command +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x194eb4ae comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1c5555d9 comedi_cancel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1ec0e2d3 comedi_get_buf_head_pos +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x22318694 comedi_set_user_int_count +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x262e9c18 comedi_dio_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x370d69d5 comedi_dio_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3cb614fc comedi_data_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3db41e4f comedi_poll +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3de6a4a3 comedi_get_buffer_offset +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x409d3263 comedi_do_insn +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x51da786d comedi_register_callback +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x52769094 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x628ed463 comedi_get_n_subdevices +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x671c2623 comedi_get_buffer_size +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x696272c9 comedi_unlock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x826bd656 comedi_data_read_delayed +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8e199bbf comedi_perror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8fb4413e comedi_data_read_hint +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9b266320 comedi_get_krange +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9dde39b5 comedi_strerror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa0334b40 comedi_get_driver_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa094eab0 comedi_get_board_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa7c55c52 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xaa456501 comedi_mark_buffer_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb45b8b7b comedi_mark_buffer_written +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5396dad comedi_get_maxdata +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5c3ac2a comedi_map +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc4ec62b3 comedi_get_len_chanlist +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc7d949df comedi_lock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd2a9a259 comedi_get_version_code +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd46a9468 comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd48facbb comedi_command_test +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xddd89421 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe2208940 comedi_data_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe38c6fb4 comedi_unmap +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xed5731a4 comedi_get_subdevice_flags +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xefd0c778 comedi_fileno +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf17e03df comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf71581db comedi_get_buffer_contents +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x4849dfc9 cx25821_dev_unregister +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x55bffca6 cx25821_dev_get +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x5f3007e1 cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x84ef4777 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x8565e922 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd33be137 cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xdda2b874 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xf95d3ea0 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x253f3d14 vmbus_get_interface +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x6730ff1e vmbus_child_driver_register +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x91a1e345 vmbus_child_driver_unregister +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xdf1a5ef6 vmbus_loglevel +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x00e1205e iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x05f60456 iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x16850c5b iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x4975b94b iio_class +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x649e4bdc iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x68e561a8 iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x8754ee15 iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xa9f4b08e iio_free_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb72c3726 __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xbc3c2cef iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcb842df9 __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe9cef7c8 iio_allocate_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xea831a6b iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xedd114db iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xfcfb4aae iio_free_idr_val +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x155f13fc variax_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x32b88d66 variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x50bec3d7 pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xb3006079 pod_remove_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x1a6d286b vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x1d1cf354 vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x1f9ad68b vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x3d8eb322 vme_new_dma_list +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x3fc897ab vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x43e2f154 vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x6666140f vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x677bbaf0 vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7754663b vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x779fceb4 vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0x77bca410 vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x9060dc47 vme_bus_type +EXPORT_SYMBOL drivers/staging/vme/vme 0x92c9748a vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x936e4d67 vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x9750ab84 vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0x9d279035 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xa0675185 vme_unregister_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0xa09d045f vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xb9ab5933 vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xcc5b0af0 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe61b1e0b vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xedaf8f68 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0xf1b1bb11 vme_free_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0xf415424c vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xff3a8dc0 vme_unregister_driver +EXPORT_SYMBOL drivers/telephony/ixj 0xf317821c ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x0668f13e phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xae05bf9a phone_register_device +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x573019ee usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x60f5c0e0 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xfb2939e5 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x71b8039d sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x50c1ff84 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xb85582c9 usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x445669b5 lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0xb6ca68ea lcd_device_register +EXPORT_SYMBOL drivers/video/console/bitblit 0xef7e812b fbcon_set_bitops +EXPORT_SYMBOL drivers/video/console/font 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL drivers/video/console/font 0xbb99125c get_default_font +EXPORT_SYMBOL drivers/video/console/font 0xf7584a9c find_font +EXPORT_SYMBOL drivers/video/console/softcursor 0x9a417d5e soft_cursor +EXPORT_SYMBOL drivers/video/console/tileblit 0x1a8e8220 fbcon_set_tileops +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x8e84bb30 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x9a0c8b95 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xbab3a0cb cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xdc680a39 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/display/display 0x4a368e2d display_device_unregister +EXPORT_SYMBOL drivers/video/display/display 0x4d297708 display_device_register +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0xdf4a67b1 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xb0910d2c g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xd827c4e1 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xfe5868e3 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x358c5f17 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x8483ce06 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x9e56a990 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xbc3925ba DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x8d972141 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x7b261626 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x04c2b68a matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x16acef85 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x2ece801d matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x57ac6bb1 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x41883ef8 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xf05e9176 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x0a5f42b7 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x3ee00ee6 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x578f8252 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xa427c7e6 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xfa611a47 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/output 0xb6246a13 video_output_unregister +EXPORT_SYMBOL drivers/video/output 0xda86c6dc video_output_register +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x075e9a91 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x2c9cd06a svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x2cc899bb svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x2e7e48fc svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0x37d9160e svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xb85fa5c6 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xbfb27638 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0x18323d91 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x677019fa sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xbb00e687 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x13b00025 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x5be93165 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0261b073 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0ed22a33 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x17543457 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x5918c1d5 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x33f429ac w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0x45249a4c w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x4a849437 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xa931732e w1_register_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x02b180d6 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x07ae6098 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x6030c8ff config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x7994fd20 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x969742f2 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0xa0683287 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0xa9468e4c config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xa94e67ec configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xb2bf4352 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xe2ea1113 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xf11e92b0 config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xf17ac4dd config_item_init +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x101abdb0 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x10c27fdd fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x1806a96b fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x2db1c1be fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x2dbac499 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x3ddf9970 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x3e1472bc fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x3fd6b21e __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x527c04ff __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x535832c7 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x5c7fd832 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x5d29f90e __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x5e98b453 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x63f96884 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6660a3d6 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x688381ba __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x72ec38c5 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x7a70dd12 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x9e4c0a34 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xa212b32a __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa397884b __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa6a4b698 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xb671cbd0 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xe1fdd0b9 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xe83420fd fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xf07794d7 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0xf8796eb9 __fscache_unregister_netfs +EXPORT_SYMBOL fs/nfsd/nfsd 0x1f573533 nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x96ce9bb4 nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0xdb389aec nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/quota/quota_tree 0x310b8baa qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x367284e0 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x7b58cbe5 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x88e499e2 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xe2324631 qtree_entry_unused +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x5ead7ad3 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xd16f648b make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x1a2a2624 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x201c6144 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x244c6d40 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x2b560613 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x38f39f72 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x3da35774 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x3e84e9ef p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x3ecba9e3 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x44077666 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x49905c52 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x5689b7b2 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x5e0ef374 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x61852dea p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x683efc21 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x6c5e479c p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x8e088d6b p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x9054fcd5 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9f6bbd89 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xafe03423 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xb4f26c81 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0xbaa17b44 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xd0af5654 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xea21f917 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xf19f0f14 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xf7244f2f p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xfd064a1d p9_client_auth +EXPORT_SYMBOL net/appletalk/appletalk 0x72d372e6 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x8ec47fe6 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0xd77612ca atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0xf63120e0 aarp_send_ddp +EXPORT_SYMBOL net/atm/atm 0x17b9ed86 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x25edc931 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x36bcb63e atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x50b18ef9 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x6d1ced27 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xb3b97e81 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0xbc325ea1 atm_charge +EXPORT_SYMBOL net/atm/atm 0xbf1dadb3 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xd6d14090 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0xe2e13859 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xfaa1da35 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xfbdad4d1 register_atm_ioctl +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x5fc6280f ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x773f8490 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x77a5c84a ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x81f13e31 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x820bbce5 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xa02b53ea ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0xb33ffbca ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0xb525bb9a ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xd6967387 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0xffe5c99f ax25_linkfail_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x046aab65 hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0b7dd1be hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x12ddf2d6 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x15891727 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2dc6bae1 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3e2baae9 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x67af465f hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6cc6036b hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6d9e94c9 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x71887347 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7404d8fc bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x85143a49 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e02db61 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e54a85f hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9523aab5 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa9a691fa hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb7846c1d hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc72397ee hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc7ebf33c bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xca3bef88 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xce9873e9 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xda65b393 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0xda8d84c5 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe4ccee6e hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0xed0c9778 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xeededbe5 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0xef23d1e6 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf2af6105 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf6602c18 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf89d3ca6 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfbec2d63 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x5b0939ff br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x26f8e87c ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x9a13867e ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xce26b16a ebt_do_table +EXPORT_SYMBOL net/can/can 0x0e6404e2 can_proto_register +EXPORT_SYMBOL net/can/can 0x43080ba3 can_send +EXPORT_SYMBOL net/can/can 0xa54c0046 can_proto_unregister +EXPORT_SYMBOL net/can/can 0xd490d849 can_rx_register +EXPORT_SYMBOL net/can/can 0xd723a6aa can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x3a36523f ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x87cdb72e ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x989c068b ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xa6220518 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xbd444545 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xcaee2828 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xd67e1f7f ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x1b336e25 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x4704c32d wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0xc79cd1b5 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xd5ea0441 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xefe53f83 wpan_phy_find +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x03c39c96 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x34649365 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x602d03ff arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x7e6825cd ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xa1e3ac59 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xd4e31bc3 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x01f89bad nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x28e58e95 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x512b0771 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8be4b337 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8f931492 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xbf1011ca nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xeb79fb24 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x18e36929 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xdaedbe22 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00588bc5 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa6b485cd ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa780e5e2 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xed8479fd ip6t_register_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x4d7dbb5e xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0xa3cb7422 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x11ee72c5 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x3872ea93 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7f3a0a85 ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb48fe63f ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb5277c7a ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xda5cd1bc ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xe0997301 ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xf168c5c3 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x01d1fcdb hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x072e026f irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x149a413c irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x17b09e20 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x25661947 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x28aa2c4f irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x2f426016 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x30faa334 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x3462950f hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46be7fbc irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x52d0b315 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x5a3e7d73 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x5dbb2212 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x6758f8ac irias_new_object +EXPORT_SYMBOL net/irda/irda 0x68b7447c hashbin_find +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6cb30def iriap_close +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x747d6779 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x7621e908 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x76243bc9 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x76e70979 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x77dd8654 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x781e2db5 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7a57b6f3 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x81cc8f08 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x84a4ec1e proc_irda +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x950c25dd iriap_open +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x996ee52b iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc07de997 irlap_close +EXPORT_SYMBOL net/irda/irda 0xc14e9b6a hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xc589f916 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xc622e9f8 irlap_open +EXPORT_SYMBOL net/irda/irda 0xcd41236c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xcf968b39 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0xd6a274ea irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xd7172ff4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xd8bfb6d4 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe5260e0e irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xe6c621d5 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0xec41fe7f irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf84526d4 irttp_dup +EXPORT_SYMBOL net/irda/irda 0xf95afb1d async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xfbc3538a irttp_connect_response +EXPORT_SYMBOL net/lapb/lapb 0x1aaa1067 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x4b399865 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x4f97a6a3 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x90c3e5ce lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x927cc3e7 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x943adaec lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x9dca436c lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0xee113465 lapb_data_request +EXPORT_SYMBOL net/mac80211/mac80211 0x0aa617e0 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x0b2b4fd4 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x11c06658 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x14005c7e ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x16263738 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x18ed58e6 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x31840b52 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x3a92b0af ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x47675f8f ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x48d89aea ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x608a7aba ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x67276eca ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x6a401d76 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x6c9f12e8 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x6cd798c2 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x72b9e248 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x899141c8 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x8a80e9ec ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x8add7fd8 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x8c22b01f ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xa09cdacc ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xa6c86ee0 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xb19ce503 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xc3845997 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc545b0de wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xce00c3be ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xcfb3ac93 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xd383f021 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd50c7b8c ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd8dae7e3 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xdd4ab08b ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xdf7d250b ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0xe7974b09 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xe97cd627 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xee7fd0e5 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xef970cd5 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf383dda6 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xf8004953 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf83c0d5e ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xfc3386ce ieee80211_wake_queues +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x236b906f register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x30423f2f register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x47e771f4 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4ab9e154 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x594ffcfc ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x752a8c92 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x82c2ab91 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x99c34913 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd70e3373 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd7916025 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe6d027ed ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x851ff45e __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x94817f50 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x5b477cf2 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x1d74a21f xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x34ddae10 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x6c127121 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x7854a06a xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x85204710 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x9b4a69af xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xaf98022e xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc239f80e xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcc3f9666 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xf04e2902 xt_register_targets +EXPORT_SYMBOL net/phonet/phonet 0x2d605c8c phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x383b0b4c phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x38647342 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0x5f706732 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x67043f9e pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x9e9feb6d phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xa0ac7f72 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xabcc49c0 pn_skb_send +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x03c7a4ff rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x05275bf4 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1dc56949 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1e72e239 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x21673b15 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x24e75972 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x36d44633 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x55cb227a rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x664d324f rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6b1c66c5 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x75f3dd20 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8e5c26de rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa63af943 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe7669fdf rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfcd68ca3 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/sunrpc/sunrpc 0x48413c54 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x0b248682 tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x2ef57bc5 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x302e2d64 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x327b2c2f tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x384de290 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x50c98777 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x56e52bc1 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x632cd006 tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xa936a24b tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xc1f5f4b1 tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0xc28a104c tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xd9ae96c1 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe2213f14 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0c504324 register_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wimax/wimax 0xe2a0b0d2 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xf70c172d wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x072e3651 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x192c332d cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x293d3809 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x345de8d3 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x43cad34b cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x4825662f cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x4b5718a7 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x4f3f7fad __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x54e66fb2 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x58d8e67b wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x5cd74554 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x5ce8ddbc cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x60b26dbc wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6cadd6ae cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x731aea55 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x73a38180 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x74fb442b ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x77665565 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x7b27db17 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x7c74c301 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x9815cb0a cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa591490a cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xabb76d0a wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xbbbdc7d2 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xbf2dfc70 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xcdc1591a cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xce4176b1 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xd5b061be cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xd8d510ba wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xdbb77ff5 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xe3c6ad8e wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xec0719fd cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xed761bd8 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0xf8d1b06b regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xfbff9402 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xfc9cdb9b cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/lib80211 0x1bbff969 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x264ac0f8 lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x8c877de4 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x8d1d7491 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x8e671760 lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x9af551b7 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xbb8a17ee lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xf49a15c2 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0xf8f9396b ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x7f39d310 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8471b3e4 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x855d3b19 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8a021c52 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xd336e781 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x231a1e00 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x7a50a3fb snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x17c15809 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x4ad3f518 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x62384d3a snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8a348811 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9df7af8b snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc482499d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd9072e1a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe6df29c7 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0xd92c2b22 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x124b795a snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x12ae0031 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x1458f2d7 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x22d7a9c3 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x29e10e98 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x2adb9bf7 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x316d9d78 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x4111dffa snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x47c95979 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x574d143d snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x5782b328 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x5a2dcbab snd_info_register +EXPORT_SYMBOL sound/core/snd 0x5d24cbb4 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x5dd2c175 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x5e1e0994 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x5e8b5c2b snd_device_register +EXPORT_SYMBOL sound/core/snd 0x678de0a4 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x6e928d7f snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x703c58b5 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x72e814cb snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x799b36ed snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x80a03360 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x85df3974 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x8958d67c snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x89fa91c2 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x8af7e0bd snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x8c1642e9 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x94796797 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9fc99832 snd_component_add +EXPORT_SYMBOL sound/core/snd 0xa3d68b83 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xa6d28387 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xadeb8289 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xb185f7dc snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xb2102669 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbbc7fa13 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xbdb905af snd_cards +EXPORT_SYMBOL sound/core/snd 0xbf852022 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0xce1848dc snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xd398fee9 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xd668cdd6 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0xd8f13875 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xe908f171 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xedd6f4ae snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xefdfef7b snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xf05fa561 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xf3a8d1fd snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xffe4bc24 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd-hwdep 0x72b0a704 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x36766598 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x59186e2f snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8cf0413f snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x935d8f7c snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc01bdc60 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x05303fbc snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x07660525 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x07de3b7f snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x08075792 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x15234f30 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x1785ea3c snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x22c8d27e snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x2f264bb3 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x43e803ce snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x4e3a76fb snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x61b1da8f snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x64b6a431 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x67b69a72 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x699db44a snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x6b68ef74 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x6e8f04e5 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x7538f6a7 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x7efc9076 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x823a35ba snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x84f2a8d8 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x88cc66cc snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x8d1a61d6 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x951742e3 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x9689dfc2 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x987a7872 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x988992f0 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa6e124f4 snd_pcm_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbb7f4784 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xc3dff191 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0xc42401c7 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xc94e3e54 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd1f38939 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0xd3024ef5 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xd4b7fe93 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd6ae6942 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0xd74db5b0 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xed908718 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf3a2c085 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0xfa0318e0 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xff1359ab snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x005d8dad snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1bbcf93c snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2b6ee3f1 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x44908c8e snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x57f7d284 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6552d92f snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x72dade30 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7ac98320 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x80945298 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81da3e30 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81e0ffba snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8890c32d snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x890f2a9c snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa6ba2fc4 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcc3e445d snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdf56a5ab snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdff22b88 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-timer 0x2156e8fe snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x42cc5d83 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x4a8ecfa1 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x5d319a42 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x662ece18 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x719a7580 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0xb17be768 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xb27a24bd snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xb8d25857 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xc1623df0 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xcb0afa45 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0xd938754c snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xf26641eb snd_timer_pause +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x566a6150 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00f81126 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x35c3670e snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3b8f6a67 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x45d13899 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa2daad62 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa5d79340 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb17ce3bb snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xe1a712e0 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf7a73b9f snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x03aeee43 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x21b58c19 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x25c282db snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x38f541c3 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4ae72ed1 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4ef17e91 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x74d8a607 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x948848dc snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb7d21dd6 snd_vx_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00aca6be snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x025067cb snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x61c87e42 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x68b4f5a9 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x7be5987e snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x971e041a snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x104e1551 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1cd770ee snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2fecb286 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x3a89173f snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x4842da5b snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xd3b52022 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x4030abb8 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xaa2c31b1 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd1f84aad snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xe9df5cab snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xa81760a5 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xe232d5ab snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x42f56667 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xc90ddaeb snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x02d4a90c snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x3a656663 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x4f2eb9d2 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x8a9a683c snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xad195bdb snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1fea64bb snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x625f4b49 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x8865c1c3 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xce244789 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdb8096b7 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdc542f16 snd_i2c_bus_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x0f3529d7 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x16708041 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x349927a0 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x415e41bc snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x447c98f9 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5ec4a8a8 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x878d5360 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xdec8ef83 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe5c56d50 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xf65236f5 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x2fcc205f snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x56024e5f snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xd9a180da snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/oss/ad1848 0x26c427ee ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x55262c70 probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/ad1848 0xc90eba24 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xee4618f2 ad1848_init +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd84422f7 attach_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd9ec5db4 probe_mpu401 +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x669ccc14 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sb_lib 0xee76d070 sb_dsp_init +EXPORT_SYMBOL sound/oss/sound 0x04072388 mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1871a34a sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x380fcc06 audio_devs +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x58e1ebc0 midi_devs +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xc7de6f7c synth_devs +EXPORT_SYMBOL sound/oss/sound 0xca5050ab sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xe8ba6221 sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x8bd8fd0d probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x31e28dd3 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x31ee2e99 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x45484a54 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x45da3c01 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x47ad350a snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x57b2de7a snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6fd1846c snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7b689200 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7cb20e5f snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7cee8a5d snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x86596315 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x900d650a snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9c0de725 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9dc11608 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd3fe5904 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd8f9a6e0 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe97c0a6a snd_ac97_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x053ba370 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x761a20e7 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x87a72723 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x94e4fc30 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9628f8ed snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xaf6dd64b snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb451792c snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd25307a3 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xec6423a9 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x3f84d2ac snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x29658af6 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x66bfee40 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xe287bf5c snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x0ff7ad7c oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x265a22cd oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x308fdf5d oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x4eaa68ae oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x60e6e4ec oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x687f6c35 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x693cb778 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x75b52039 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x8986b5c0 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x932b225d oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9fd6dfa9 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xae74dece oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb7d09ca3 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb9e1aae5 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xca10025a oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xd319cd00 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xeedcd625 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xef136c67 oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xefd06474 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf8d53d9f oxygen_write_spi +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9f3a543e snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9f98c5d3 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa194b82b snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa66f4d04 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xd9db6dba snd_trident_alloc_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x2c9a3ecb uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x4f42020c register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x525753af register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x538927c9 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x82dfb309 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xe369d930 sound_class +EXPORT_SYMBOL sound/soundcore 0xf8edc3d2 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x3ea829aa snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x4e0a8b39 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x7834e559 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xbed9c9f5 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xdc9299fa snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xf7c0728e snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/snd-util-mem 0x098f91ce __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x51d36bb0 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5b52f579 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x97a0df3e snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xabbc5c85 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xc5576c35 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xd3e077d4 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xeba0a034 snd_util_memhdr_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x4332e3b7 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x0f85f924 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x53894771 dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x54a2537e dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x979e4403 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xc3023783 dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xe652cf9b dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x470777f4 lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xea135a15 lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0008e931 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x002c1e8e tcp_disconnect +EXPORT_SYMBOL vmlinux 0x003fafdc inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x005b6baa jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x0067d01a scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x0073b751 set_pages_x +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x009d258f _write_lock +EXPORT_SYMBOL vmlinux 0x00a4af22 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00b00999 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00b8282c unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00bae3fb pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x00c4a6dd migrate_page +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00dfe1af jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00ea03ce mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00f46562 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00f8e357 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x00fe4f3f key_link +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x0111b3b2 __scm_send +EXPORT_SYMBOL vmlinux 0x01144d60 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x013e1c4c blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x0159be64 blk_remove_plug +EXPORT_SYMBOL vmlinux 0x01681d48 generic_setlease +EXPORT_SYMBOL vmlinux 0x01693cde pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x016a08fd rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x0186d073 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01b1d9ac mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x01c17f7d journal_destroy +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e0e4e3 skb_over_panic +EXPORT_SYMBOL vmlinux 0x01e5172b uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x0216287e skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x023b8839 arp_create +EXPORT_SYMBOL vmlinux 0x023c3969 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x0256389f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0278d455 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x0284228e pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x02872eb5 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x028b2e49 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x0298d368 kobject_init +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02b3ffea dm_table_get_size +EXPORT_SYMBOL vmlinux 0x02c068d6 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x02c40853 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x02c99064 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x031d38eb generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x033f8e69 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x035ca601 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x036c0e6f bioset_free +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x037e90c5 set_disk_ro +EXPORT_SYMBOL vmlinux 0x03942016 d_alloc_name +EXPORT_SYMBOL vmlinux 0x03b01bd8 pci_enable_device +EXPORT_SYMBOL vmlinux 0x03b22a3b vfs_mkdir +EXPORT_SYMBOL vmlinux 0x03b56d2e swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03c5c0a3 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x03fe5336 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x0417fe32 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x041dd881 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x041dd9a7 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0429743b lock_fb_info +EXPORT_SYMBOL vmlinux 0x04369e19 netpoll_setup +EXPORT_SYMBOL vmlinux 0x04403792 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x04648d83 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x049434a0 may_umount_tree +EXPORT_SYMBOL vmlinux 0x04ae0224 pci_set_master +EXPORT_SYMBOL vmlinux 0x04b85123 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x04d073c5 get_io_context +EXPORT_SYMBOL vmlinux 0x04d4b8e3 poll_initwait +EXPORT_SYMBOL vmlinux 0x04d73aa9 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x053f46cf register_netdev +EXPORT_SYMBOL vmlinux 0x0553945e __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x058c2635 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x05916e54 misc_deregister +EXPORT_SYMBOL vmlinux 0x05bc543c handle_sysrq +EXPORT_SYMBOL vmlinux 0x05e28d43 __first_cpu +EXPORT_SYMBOL vmlinux 0x05ebb931 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x05fb383f seq_open +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x067457db __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x068c7263 ioremap_cache +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06c5fe6e scsi_device_put +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06eac31c vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x0710bd95 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x072c70a9 mntput_no_expire +EXPORT_SYMBOL vmlinux 0x073dfa12 generate_resume_trace +EXPORT_SYMBOL vmlinux 0x0745c706 scsi_host_put +EXPORT_SYMBOL vmlinux 0x077cd77c skb_dequeue +EXPORT_SYMBOL vmlinux 0x0796c6b9 skb_put +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07bb3697 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07e06587 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x080e6700 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x0817b25d scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x0824d939 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x082e06dc vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x08770b46 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x08810708 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x088227f4 sk_filter +EXPORT_SYMBOL vmlinux 0x0890779c ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x08ca5b89 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08f2498c qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x08f61d1d cont_write_begin +EXPORT_SYMBOL vmlinux 0x09000d7f invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x09253410 mmc_release_host +EXPORT_SYMBOL vmlinux 0x0933aae1 efi_enabled +EXPORT_SYMBOL vmlinux 0x09408568 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x094e7858 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x098431ba acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c64582 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09db5c4c kset_unregister +EXPORT_SYMBOL vmlinux 0x09e89daa ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x09ef9b44 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x0a1665db kthread_stop +EXPORT_SYMBOL vmlinux 0x0a170151 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a2a3890 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x0a512320 pipe_unlock +EXPORT_SYMBOL vmlinux 0x0a5436e0 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x0a5aa16e neigh_table_clear +EXPORT_SYMBOL vmlinux 0x0a5d2120 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x0a9b102c framebuffer_release +EXPORT_SYMBOL vmlinux 0x0ac62342 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0aee7aba kill_pgrp +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b3af3ef netif_carrier_off +EXPORT_SYMBOL vmlinux 0x0b52eb65 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x0b53967b blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x0b5fd193 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x0b6f8f08 tty_register_driver +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b83e30f kmem_cache_size +EXPORT_SYMBOL vmlinux 0x0bb5074c inet_shutdown +EXPORT_SYMBOL vmlinux 0x0bbecd93 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x0bcbb434 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x0be44b3a blk_integrity_register +EXPORT_SYMBOL vmlinux 0x0beb3dac uart_match_port +EXPORT_SYMBOL vmlinux 0x0becda0c phy_device_create +EXPORT_SYMBOL vmlinux 0x0c3efe93 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x0c502002 rwsem_wake +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c776f38 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x0c85af11 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb27116 sock_i_ino +EXPORT_SYMBOL vmlinux 0x0cf5d82d dm_table_put +EXPORT_SYMBOL vmlinux 0x0cf905a9 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x0d13c946 ht_create_irq +EXPORT_SYMBOL vmlinux 0x0d15356c linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x0d26a76d _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0d2bc420 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x0d3925ab agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d547642 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dae9f06 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x0e249988 block_truncate_page +EXPORT_SYMBOL vmlinux 0x0e3d72ad atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e7d05f0 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x0e83fea1 del_timer_sync +EXPORT_SYMBOL vmlinux 0x0e95ecfb scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x0ee0d396 read_cache_page +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f4399eb alloc_disk +EXPORT_SYMBOL vmlinux 0x0f6d7b28 freeze_bdev +EXPORT_SYMBOL vmlinux 0x0f7734fc fifo_set_limit +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fe2b361 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x0ff5ffad mmc_detect_change +EXPORT_SYMBOL vmlinux 0x100824dc neigh_destroy +EXPORT_SYMBOL vmlinux 0x10122b04 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x101461f6 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x1016faaa generic_write_end +EXPORT_SYMBOL vmlinux 0x102237e9 mutex_unlock +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x1070c0f5 register_exec_domain +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x107d5757 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10daeadb journal_init_inode +EXPORT_SYMBOL vmlinux 0x10dbfe10 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f01f44 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x110e3d76 __breadahead +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x112bf23c bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x1144cf1c neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x11746e1f flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x118b424f proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a18b14 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x11a5f610 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x11cec3af dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x11ed082a acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0x124be00d dcache_readdir +EXPORT_SYMBOL vmlinux 0x128cb519 proc_symlink +EXPORT_SYMBOL vmlinux 0x12b2d6c4 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x12d3a7c6 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x12ef3330 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x12f10736 udplite_table +EXPORT_SYMBOL vmlinux 0x130bb067 lock_may_read +EXPORT_SYMBOL vmlinux 0x1328ec48 simple_fill_super +EXPORT_SYMBOL vmlinux 0x133abaf5 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x134816fa kset_register +EXPORT_SYMBOL vmlinux 0x1366f59f locks_init_lock +EXPORT_SYMBOL vmlinux 0x1378e714 acpi_video_display_switch_support +EXPORT_SYMBOL vmlinux 0x137dccbb __scsi_put_command +EXPORT_SYMBOL vmlinux 0x138a78d1 set_current_groups +EXPORT_SYMBOL vmlinux 0x13f3090c journal_abort +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x13f6e7eb sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x13fd0fe4 vfs_link +EXPORT_SYMBOL vmlinux 0x13fdd87f security_path_rmdir +EXPORT_SYMBOL vmlinux 0x140b4605 set_anon_super +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x1439573c set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x14492533 km_report +EXPORT_SYMBOL vmlinux 0x14a2116a compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x14af0cf7 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x14d38fd1 km_state_notify +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1552efad neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x15d2d132 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x15d4ef31 d_delete +EXPORT_SYMBOL vmlinux 0x15ef2dd9 kfifo_free +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x1632472a tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x1675606f bad_dma_address +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x16c8bd99 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x1706713c genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x171002ef __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x171e324a scsi_register_driver +EXPORT_SYMBOL vmlinux 0x17a2c3a2 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17d05689 create_mnt_ns +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x1803b3e8 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x1817dcca elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x181b6ff2 mempool_resize +EXPORT_SYMBOL vmlinux 0x18251c09 netlink_set_err +EXPORT_SYMBOL vmlinux 0x183f9e93 scsi_device_get +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x18407883 find_vma +EXPORT_SYMBOL vmlinux 0x18439b1d jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x185dbd52 acpi_bus_add +EXPORT_SYMBOL vmlinux 0x186d64a4 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x1878da50 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x18818029 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18a26ea1 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x18a949a7 end_page_writeback +EXPORT_SYMBOL vmlinux 0x18b72573 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x18bb68d1 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x18be65b8 backlight_device_register +EXPORT_SYMBOL vmlinux 0x18d34965 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x18d76cd5 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x18dae924 request_key_async +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x18feac05 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x190c3d2b dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x1955215d __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x1958503e tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x196b7d24 audit_log_start +EXPORT_SYMBOL vmlinux 0x196faf24 generic_write_sync +EXPORT_SYMBOL vmlinux 0x19718dad xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1985ed3c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19b37ae9 __ht_create_irq +EXPORT_SYMBOL vmlinux 0x19bc4268 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x1a15874b qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x1a2188d7 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x1a3e2a1f kernel_listen +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a73d440 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x1a75caa3 _read_lock +EXPORT_SYMBOL vmlinux 0x1a7d08c5 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x1a84a1ca con_copy_unimap +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1a8ab648 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x1ab15135 bmap +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b3056f5 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x1b60c76e ip_route_output_key +EXPORT_SYMBOL vmlinux 0x1b62fdc8 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b84585e set_bh_page +EXPORT_SYMBOL vmlinux 0x1b89419f add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bb643d6 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x1c0e89c3 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c25fabb jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x1c3817af uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x1c5eb33a kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x1c73c4c7 kill_litter_super +EXPORT_SYMBOL vmlinux 0x1c75d8b8 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c918759 neigh_table_init +EXPORT_SYMBOL vmlinux 0x1c994a38 backlight_force_update +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce56af7 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x1cefe352 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1d06e6d4 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x1d079d26 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d31cffe nf_afinfo +EXPORT_SYMBOL vmlinux 0x1d663b7a agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x1db7706b __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1de87f71 lock_rename +EXPORT_SYMBOL vmlinux 0x1de8d686 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x1df0a1b9 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x1df8e7d2 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x1e046719 iunique +EXPORT_SYMBOL vmlinux 0x1e0c2be4 ioremap_wc +EXPORT_SYMBOL vmlinux 0x1e0c463e insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x1e278b10 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x1e2e427f cpumask_next_and +EXPORT_SYMBOL vmlinux 0x1e381251 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x1e482980 per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e7dbbc7 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x1e884aea phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x1eaeea81 vfs_fsync +EXPORT_SYMBOL vmlinux 0x1eb36c32 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x1ebfa598 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x1ec94d6a bio_copy_user +EXPORT_SYMBOL vmlinux 0x1eee222f nobh_writepage +EXPORT_SYMBOL vmlinux 0x1efdde60 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f18579e mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x1f208040 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x1f351c6b blk_recount_segments +EXPORT_SYMBOL vmlinux 0x1f590b5f swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x1f62b436 skb_clone +EXPORT_SYMBOL vmlinux 0x1f6f63f0 cad_pid +EXPORT_SYMBOL vmlinux 0x1f75e552 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x1f7907d0 follow_up +EXPORT_SYMBOL vmlinux 0x1f7f72d6 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x1f8d0c6f __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x1fb8fdb5 set_device_ro +EXPORT_SYMBOL vmlinux 0x1fbd3fcd tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x1ff8fd08 do_munmap +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x20092385 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x200effc8 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x2054901c should_remove_suid +EXPORT_SYMBOL vmlinux 0x2055042d tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x207aaefd sock_no_connect +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x20b1458b __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x20eadeb6 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x20f9322a idr_pre_get +EXPORT_SYMBOL vmlinux 0x2123f7b2 generic_make_request +EXPORT_SYMBOL vmlinux 0x21420853 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x216cd286 __blk_end_request +EXPORT_SYMBOL vmlinux 0x2183b118 get_disk +EXPORT_SYMBOL vmlinux 0x218564fd is_bad_inode +EXPORT_SYMBOL vmlinux 0x21c3e4f2 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x21d50a51 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21e5679c copy_user_generic +EXPORT_SYMBOL vmlinux 0x21fdcf1f bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x22134664 nf_reinject +EXPORT_SYMBOL vmlinux 0x22191195 posix_test_lock +EXPORT_SYMBOL vmlinux 0x22220e04 create_proc_entry +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x22689f65 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x226d4cd2 unload_nls +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b5ea0b elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22e2bc9e dm_exception_store_create +EXPORT_SYMBOL vmlinux 0x22eaa879 simple_write_end +EXPORT_SYMBOL vmlinux 0x23070b65 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x2342628c ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x23542918 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x235a5afd pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x235eb306 mutex_lock +EXPORT_SYMBOL vmlinux 0x236c8c64 memcpy +EXPORT_SYMBOL vmlinux 0x2373cb14 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x2374f44a bio_init +EXPORT_SYMBOL vmlinux 0x2385e61c mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x239c787a tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x23b99e92 node_states +EXPORT_SYMBOL vmlinux 0x23c5a266 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23ca89be default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x23cab0b3 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x23d6ea45 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x23f5422d dma_pool_free +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x241536d0 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0x2427e7dc tty_check_change +EXPORT_SYMBOL vmlinux 0x2437d309 da903x_query_status +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x2467b6f8 proto_register +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x24765260 input_free_device +EXPORT_SYMBOL vmlinux 0x2490dc2f tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x24a0dce2 __break_lease +EXPORT_SYMBOL vmlinux 0x24d3f093 dev_driver_string +EXPORT_SYMBOL vmlinux 0x24e4bb01 down_write_trylock +EXPORT_SYMBOL vmlinux 0x24ead969 noop_qdisc +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250b70b0 tcp_prot +EXPORT_SYMBOL vmlinux 0x250fb172 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x25250aac blk_insert_request +EXPORT_SYMBOL vmlinux 0x25266d9c dst_discard +EXPORT_SYMBOL vmlinux 0x2530d3a2 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x2534f4b5 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x255097f3 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x256dae49 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25cef4c1 security_inode_permission +EXPORT_SYMBOL vmlinux 0x25ec1b28 strlen +EXPORT_SYMBOL vmlinux 0x2632393b blk_run_queue +EXPORT_SYMBOL vmlinux 0x266e4c9d dm_register_target +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x2694f44b nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x26d1ee01 alloc_trdev +EXPORT_SYMBOL vmlinux 0x26df231c fb_show_logo +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f46016 phy_start +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2727da5d _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x274a3ec1 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x27784fd2 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27aeea2b set_security_override +EXPORT_SYMBOL vmlinux 0x27b25349 cdev_add +EXPORT_SYMBOL vmlinux 0x27b35c51 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c33efe csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x27c4850a key_alloc +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27cf117f iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x2829e242 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x282c9cfe ip6_frag_init +EXPORT_SYMBOL vmlinux 0x285135e6 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x2877cad3 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x28a25eea xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28aa9d5e jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x28e205ce vfs_quota_on +EXPORT_SYMBOL vmlinux 0x2901035b neigh_parms_release +EXPORT_SYMBOL vmlinux 0x2906c21e set_page_dirty +EXPORT_SYMBOL vmlinux 0x291c72f6 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x292093f4 native_rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x294f35c5 sync_blockdev +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x2957695a compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x295b9a4b i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x296356c9 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x29738f44 get_phy_id +EXPORT_SYMBOL vmlinux 0x297dc4df slow_work_register_user +EXPORT_SYMBOL vmlinux 0x29ab08f9 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x29ad2e86 prepare_binprm +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29c484d2 blk_make_request +EXPORT_SYMBOL vmlinux 0x29db5c48 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x29f6ce63 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x2a25ca34 inet_frag_find +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a53a207 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x2a5cc228 d_alloc +EXPORT_SYMBOL vmlinux 0x2a88487e netdev_state_change +EXPORT_SYMBOL vmlinux 0x2a8efb83 agp_copy_info +EXPORT_SYMBOL vmlinux 0x2aa30ea0 iget_locked +EXPORT_SYMBOL vmlinux 0x2aeb2800 mempool_create_node +EXPORT_SYMBOL vmlinux 0x2af46b5d __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x2b0427fe generic_file_mmap +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b43df9a pci_request_regions +EXPORT_SYMBOL vmlinux 0x2b91e7b6 arp_xmit +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2ba73482 vfs_readv +EXPORT_SYMBOL vmlinux 0x2bb14624 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb6fde2 __kfifo_put +EXPORT_SYMBOL vmlinux 0x2bdb82a9 read_cache_pages +EXPORT_SYMBOL vmlinux 0x2bdfc8c2 sock_register +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c285cbf arp_tbl +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c61368e ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x2c73d3f9 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x2c7fbe94 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x2c817ca2 module_refcount +EXPORT_SYMBOL vmlinux 0x2c830677 seq_path +EXPORT_SYMBOL vmlinux 0x2c842502 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x2c9aa804 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x2cdc56bd ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x2ceccda7 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x2cf53ba8 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x2d10b122 km_policy_expired +EXPORT_SYMBOL vmlinux 0x2d12c518 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x2d47b060 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x2d5528c9 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x2d5fa01f i2c_master_send +EXPORT_SYMBOL vmlinux 0x2d7530e1 save_mount_options +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2da1dcb1 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x2da80e2f starget_for_each_device +EXPORT_SYMBOL vmlinux 0x2dbafbe3 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x2dc4af0b input_unregister_handle +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2e06111d cpu_present_mask +EXPORT_SYMBOL vmlinux 0x2e1261fb ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e4281fe blk_put_request +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e89216f sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x2e8d9b44 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x2e92729c jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x2e97a729 idr_remove +EXPORT_SYMBOL vmlinux 0x2e9b9f73 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x2eb9a0e8 _read_lock_irq +EXPORT_SYMBOL vmlinux 0x2edb13f0 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x2f004d06 bio_map_kern +EXPORT_SYMBOL vmlinux 0x2f097a9b get_sb_ns +EXPORT_SYMBOL vmlinux 0x2f1f51b8 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x2f57a875 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x2f96387c tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x2fa5a500 memcmp +EXPORT_SYMBOL vmlinux 0x2fb0cd60 input_get_keycode +EXPORT_SYMBOL vmlinux 0x2ff063b5 acpi_get_name +EXPORT_SYMBOL vmlinux 0x2ff387d4 security_path_symlink +EXPORT_SYMBOL vmlinux 0x2ffedf25 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x30226ddf agp_device_command +EXPORT_SYMBOL vmlinux 0x302b7c8f call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x3045168d sockfd_lookup +EXPORT_SYMBOL vmlinux 0x30530858 generic_write_checks +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x308427c4 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x30941924 vfs_write +EXPORT_SYMBOL vmlinux 0x309cb62a blk_unplug +EXPORT_SYMBOL vmlinux 0x30afa589 pskb_copy +EXPORT_SYMBOL vmlinux 0x30c5e4e5 load_nls_default +EXPORT_SYMBOL vmlinux 0x30cf4b33 find_get_page +EXPORT_SYMBOL vmlinux 0x30df17d6 tr_type_trans +EXPORT_SYMBOL vmlinux 0x30e13ffd ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30f08754 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x30f62e85 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x310ca048 neigh_for_each +EXPORT_SYMBOL vmlinux 0x310dbe90 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x311fd4ba d_instantiate +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x314f6e8d scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x318fe945 nla_reserve +EXPORT_SYMBOL vmlinux 0x319a2a3d vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x31adac5c ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31ebadcd in_group_p +EXPORT_SYMBOL vmlinux 0x3218f806 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x32419890 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x32430f90 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x325155ac nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32d8e627 bio_put +EXPORT_SYMBOL vmlinux 0x32dca277 scsi_print_command +EXPORT_SYMBOL vmlinux 0x32e29e48 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x32fc0f81 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x334319f3 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x3350db80 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x3360d261 vfs_llseek +EXPORT_SYMBOL vmlinux 0x336cbe1d ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x337ad9e4 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x33813829 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x33835761 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x3396ce02 cdrom_open +EXPORT_SYMBOL vmlinux 0x3398c0b2 stop_tty +EXPORT_SYMBOL vmlinux 0x339e93ab thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0x33b15fb6 ip6_xmit +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x33c055a0 module_put +EXPORT_SYMBOL vmlinux 0x33d92f9a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x33e2e5ce ___pskb_trim +EXPORT_SYMBOL vmlinux 0x34269ed5 dev_change_flags +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x3468d610 arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34b46624 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x34b575e8 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x34c978ae get_fs_type +EXPORT_SYMBOL vmlinux 0x34e58e20 inet6_getname +EXPORT_SYMBOL vmlinux 0x34e6010e fail_migrate_page +EXPORT_SYMBOL vmlinux 0x35264aef elevator_exit +EXPORT_SYMBOL vmlinux 0x353bbc9c __bforget +EXPORT_SYMBOL vmlinux 0x3556df7a neigh_lookup +EXPORT_SYMBOL vmlinux 0x3582ed17 vfs_stat +EXPORT_SYMBOL vmlinux 0x359c42fb compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35f00c85 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x35f4dcf5 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x3616071e xfrm_register_type +EXPORT_SYMBOL vmlinux 0x3618879e eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x36281959 init_file +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x366493f1 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x3665108f acpi_bus_start +EXPORT_SYMBOL vmlinux 0x366e5c9e blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x3699fe27 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x36a28012 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x36a4b0e5 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x36be3dab poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x36dc863e vc_cons +EXPORT_SYMBOL vmlinux 0x36e02cd0 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x3701a196 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x37151b3d alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x3736c67a dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x376b7c6b xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x37b02f15 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37cd4bd6 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37debfbd scsi_scan_target +EXPORT_SYMBOL vmlinux 0x37f6924b sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x37f9cfc4 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x38002b33 misc_register +EXPORT_SYMBOL vmlinux 0x380897e5 simple_statfs +EXPORT_SYMBOL vmlinux 0x38620105 mpage_readpage +EXPORT_SYMBOL vmlinux 0x3868ebb7 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x3872021d blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x3893a3a3 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x389ea5b3 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x38a9af09 send_sig +EXPORT_SYMBOL vmlinux 0x38b1d102 inet_listen +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38cab31c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x38cc7ad0 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x38f33bed dump_fpu +EXPORT_SYMBOL vmlinux 0x3929b805 single_open +EXPORT_SYMBOL vmlinux 0x393329f8 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x395b3700 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x3a066d96 thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x3a1190ef loop_register_transfer +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a39c214 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x3a3c6a8e simple_write_begin +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa1dbcf _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x3aaecb02 devm_free_irq +EXPORT_SYMBOL vmlinux 0x3abf2a14 d_validate +EXPORT_SYMBOL vmlinux 0x3ac0bc2c xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3afbd807 sock_i_uid +EXPORT_SYMBOL vmlinux 0x3b149ed0 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x3b1e79a7 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b5028ea mmc_add_host +EXPORT_SYMBOL vmlinux 0x3b628b1f napi_complete +EXPORT_SYMBOL vmlinux 0x3b647c2d inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x3bc3807c swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x3bc8f6a4 i2c_transfer +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c0116f2 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x3c01d351 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c4432ca writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x3c4e5783 generic_removexattr +EXPORT_SYMBOL vmlinux 0x3c55375c pci_reenable_device +EXPORT_SYMBOL vmlinux 0x3c7227bf complete_all +EXPORT_SYMBOL vmlinux 0x3c8146e2 journal_errno +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cb8043f neigh_create +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cd5e89a journal_wipe +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cf20b6d __serio_register_port +EXPORT_SYMBOL vmlinux 0x3cf7c0e1 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x3d1963ff mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x3d1f89c2 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x3d4031ca __devm_release_region +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3d8bdce1 put_disk +EXPORT_SYMBOL vmlinux 0x3d8dd9e4 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x3d914580 inode_init_always +EXPORT_SYMBOL vmlinux 0x3d9ee9f0 clear_page +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da5eb6d kfifo_alloc +EXPORT_SYMBOL vmlinux 0x3da8dd61 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3de1793f ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x3e1ab7b4 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x3e1e3d7b inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x3e1f073d wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x3e219de6 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e337bc6 netlink_ack +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e7b79b1 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x3e9d1157 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x3eae64c5 mddev_congested +EXPORT_SYMBOL vmlinux 0x3ebfdbc8 fb_set_var +EXPORT_SYMBOL vmlinux 0x3ec1d14e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef41173 sock_wake_async +EXPORT_SYMBOL vmlinux 0x3ef61383 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x3f023ffa nf_log_unregister +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f0bb115 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x3f1899f1 up +EXPORT_SYMBOL vmlinux 0x3f269c2d tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x3f2b17b5 phy_driver_register +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f45cf4f scsi_execute +EXPORT_SYMBOL vmlinux 0x3f4a5670 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x3f50d091 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x3f78c614 unregister_netdev +EXPORT_SYMBOL vmlinux 0x3f88a4a1 security_path_mknod +EXPORT_SYMBOL vmlinux 0x3fa3b5d5 __destroy_inode +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fbd96a3 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x3fd8f600 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x3fda7aca md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x3fdde376 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x3fe7bf95 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x3fea569a ppp_input_error +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff2797d skb_pull +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x4011a055 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x4023f884 nf_register_hook +EXPORT_SYMBOL vmlinux 0x40470292 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x40523c92 agp_free_memory +EXPORT_SYMBOL vmlinux 0x4056d5dd lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x407ad4e2 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x4085d039 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x408e6002 sock_no_poll +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40b55b4b complete_request_key +EXPORT_SYMBOL vmlinux 0x40c350cc eth_validate_addr +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40cdb3d2 mutex_trylock +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x4113b67c rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41252516 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x416a35c5 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x41721052 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x41797065 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41937b36 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x41986722 __dst_free +EXPORT_SYMBOL vmlinux 0x41999109 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x419cfada sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x419d5893 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x41a9c68d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x41cf8e4a skb_unlink +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x4221f8ae netdev_set_master +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x4222adb5 blkdev_put +EXPORT_SYMBOL vmlinux 0x42420306 tty_write_room +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x42a4bdf2 in_egroup_p +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42c8de35 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x42d71be2 kobject_set_name +EXPORT_SYMBOL vmlinux 0x42fe4b78 eth_type_trans +EXPORT_SYMBOL vmlinux 0x4300343e kthread_bind +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4303e67a find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x4327f0d5 memset_io +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x4350fc96 check_disk_change +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x437153dd rfkill_register +EXPORT_SYMBOL vmlinux 0x4380493b netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43c0f8ce skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43feb202 cdev_init +EXPORT_SYMBOL vmlinux 0x4415c43d __seq_open_private +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x441671aa ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x443240f9 uart_register_driver +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x44615c6a dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x4463ad56 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x449739f5 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44b9bceb page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x44ca5541 set_trace_device +EXPORT_SYMBOL vmlinux 0x44d560e3 init_level4_pgt +EXPORT_SYMBOL vmlinux 0x44deed08 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x44e81f0b phy_print_status +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f4c408 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x45023668 cdrom_release +EXPORT_SYMBOL vmlinux 0x45195bf2 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x451b978e input_release_device +EXPORT_SYMBOL vmlinux 0x45284637 get_agp_version +EXPORT_SYMBOL vmlinux 0x4529a512 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x453368c9 fb_find_mode +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x453d8161 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x45450063 mod_timer +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4568495c prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x458a8e3f devm_ioremap +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x459612f6 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x45d11c43 down_interruptible +EXPORT_SYMBOL vmlinux 0x45d55543 down_write +EXPORT_SYMBOL vmlinux 0x45e50f1f nf_log_packet +EXPORT_SYMBOL vmlinux 0x45fbf73d sock_rfree +EXPORT_SYMBOL vmlinux 0x46066e47 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x46085e4f add_timer +EXPORT_SYMBOL vmlinux 0x4621a691 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x465d5157 filemap_fault +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x466d0b8f bdevname +EXPORT_SYMBOL vmlinux 0x469cbf7f ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x46b0dc6f inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x46c47fb6 __node_distance +EXPORT_SYMBOL vmlinux 0x46da982b f_setown +EXPORT_SYMBOL vmlinux 0x46e67e04 submit_bio +EXPORT_SYMBOL vmlinux 0x46ea8cc2 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x46efdfc0 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0x472e9b7d rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x4747b0fe agp_generic_enable +EXPORT_SYMBOL vmlinux 0x47483a0d tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x4748a2c7 file_remove_suid +EXPORT_SYMBOL vmlinux 0x474e4821 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x476c17ad xfrm_lookup +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a17d1a dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x47e0e232 dm_get_device +EXPORT_SYMBOL vmlinux 0x47e12960 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x47ef1088 llc_add_pack +EXPORT_SYMBOL vmlinux 0x48133b5f xfrm_input +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x484ae8bc dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x484c5a1d km_new_mapping +EXPORT_SYMBOL vmlinux 0x4851fdf9 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48739af4 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x487c210e tty_kref_put +EXPORT_SYMBOL vmlinux 0x48d09828 force_sig +EXPORT_SYMBOL vmlinux 0x48f7a8f8 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x48fa1a5f __netif_schedule +EXPORT_SYMBOL vmlinux 0x490a5097 security_path_rename +EXPORT_SYMBOL vmlinux 0x493a5e6a bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x494e3393 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x494f2d02 vga_put +EXPORT_SYMBOL vmlinux 0x4957b6fd sk_free +EXPORT_SYMBOL vmlinux 0x495ca37a netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49da9a9a _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x49ddd9c6 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x49df39ce con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e5aebf pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x4a0b7189 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x4a210057 pci_get_device +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a727ace pci_scan_slot +EXPORT_SYMBOL vmlinux 0x4a87bd40 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x4ac2cf64 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4adeb27f blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x4af710e6 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b07e779 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x4b1f0a60 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x4b8b262e __neigh_event_send +EXPORT_SYMBOL vmlinux 0x4b8d21ee tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4ba5baa0 load_gs_index +EXPORT_SYMBOL vmlinux 0x4bb492b5 arp_find +EXPORT_SYMBOL vmlinux 0x4bb8bb00 scsi_print_result +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bda4fe6 d_path +EXPORT_SYMBOL vmlinux 0x4bdf028e idr_find +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1b965c gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x4c20ab11 task_nice +EXPORT_SYMBOL vmlinux 0x4c298b01 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x4c43b617 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x4c45d41f key_type_keyring +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4c55555d __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x4c5dc1a1 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x4c6c0fe2 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x4c6e8501 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x4c8c1276 register_quota_format +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4ce02f51 replace_mount_options +EXPORT_SYMBOL vmlinux 0x4ce0c3eb compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x4d0a9bc2 set_user_nice +EXPORT_SYMBOL vmlinux 0x4d0c1234 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x4d3e904c deny_write_access +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dd6ce0d set_pages_uc +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e96d772 unlock_buffer +EXPORT_SYMBOL vmlinux 0x4e99c301 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x4eaa206a inode_permission +EXPORT_SYMBOL vmlinux 0x4ec3ddea bio_endio +EXPORT_SYMBOL vmlinux 0x4edc5a0f bio_add_page +EXPORT_SYMBOL vmlinux 0x4edccf72 is_container_init +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4edf8824 otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x4f00501b no_llseek +EXPORT_SYMBOL vmlinux 0x4f075c5a ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x4f1846f9 keyring_search +EXPORT_SYMBOL vmlinux 0x4f1b5978 remove_inode_hash +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f26b58d setup_new_exec +EXPORT_SYMBOL vmlinux 0x4f3e82a1 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x4f448dbd nf_register_hooks +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f7ef3c4 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x4f8194f6 proto_unregister +EXPORT_SYMBOL vmlinux 0x4f8888b3 block_commit_write +EXPORT_SYMBOL vmlinux 0x4fa02c98 input_close_device +EXPORT_SYMBOL vmlinux 0x4fb01ade call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x4fc84c90 netif_rx +EXPORT_SYMBOL vmlinux 0x4fcdefff blk_peek_request +EXPORT_SYMBOL vmlinux 0x4fd96ea1 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4ffe79c1 ilookup +EXPORT_SYMBOL vmlinux 0x5013c611 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x502dd74d xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x50405b06 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x5044a040 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x505a9239 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x505bb58e journal_update_format +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506bb98d bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x50866716 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x50b5cb2d idr_get_new_above +EXPORT_SYMBOL vmlinux 0x50c610d3 cdev_alloc +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x510de4d1 security_path_unlink +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x511f9230 alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x514ce354 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x517fa1ef scsi_remove_host +EXPORT_SYMBOL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51f41a7b kfree_skb +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x52165f42 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x5232f908 blk_rq_init +EXPORT_SYMBOL vmlinux 0x524f4a0c dev_set_mtu +EXPORT_SYMBOL vmlinux 0x5252f304 __memcpy_toio +EXPORT_SYMBOL vmlinux 0x525b7da7 tcp_check_req +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527f6186 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x5281f478 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x529c2129 mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52c185b4 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x52d5564d rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x530a641a i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x530da75d pci_get_slot +EXPORT_SYMBOL vmlinux 0x531347eb ppp_input +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x53264641 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x533f1d27 md_register_thread +EXPORT_SYMBOL vmlinux 0x535ed247 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x5393dcb5 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x5396c3ef tty_port_init +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53fd045a pcim_iounmap +EXPORT_SYMBOL vmlinux 0x540ff5df iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x5499d396 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x549c3cb3 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54b21796 dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0x54b74b39 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x55113583 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x552c9d55 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x5531234c thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x5535dff1 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x554099fc clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x554f0a48 groups_alloc +EXPORT_SYMBOL vmlinux 0x5553872c console_stop +EXPORT_SYMBOL vmlinux 0x5586005d get_sb_bdev +EXPORT_SYMBOL vmlinux 0x558e2e79 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x5592161b tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55aa23ef scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x55b2cef2 open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x55bb2604 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x55e133ee bdev_read_only +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x56164644 skb_copy +EXPORT_SYMBOL vmlinux 0x562599fc drop_super +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x56383341 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x5661ba33 dquot_acquire +EXPORT_SYMBOL vmlinux 0x5661ed64 clear_inode +EXPORT_SYMBOL vmlinux 0x5687e4c6 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x56954da1 tcf_register_action +EXPORT_SYMBOL vmlinux 0x56b133b4 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x56bb9fd2 pci_save_state +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d8de46 bio_map_user +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x572a64c1 ip6_route_output +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57345947 bio_free +EXPORT_SYMBOL vmlinux 0x575257e0 register_cdrom +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x5762fa1b vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x577c626c pipe_lock +EXPORT_SYMBOL vmlinux 0x57adf756 per_cpu__this_cpu_off +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57bcca48 journal_init_dev +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57ffde8c skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x5815f6b1 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x582636ef jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x5837e574 vmap +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x583c99f6 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x584a7119 nla_append +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x585dc23a cdev_del +EXPORT_SYMBOL vmlinux 0x586ecf19 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x589748b1 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x58a0eb92 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x58bcb5cb ether_setup +EXPORT_SYMBOL vmlinux 0x58d0ec96 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x5900ff8f agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x591d67a3 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x594cde62 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x5955de59 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59e70283 tcp_child_process +EXPORT_SYMBOL vmlinux 0x59e7e922 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x5a2191ac i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x5a26e9f8 pnp_is_active +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a57d155 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x5a5b137e nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a6252cf dm_table_event +EXPORT_SYMBOL vmlinux 0x5a71bd9b pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a91ebf0 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x5aa9cbe9 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x5ab1efb9 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x5abc9f87 __scm_destroy +EXPORT_SYMBOL vmlinux 0x5ac2a911 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5ad461f9 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x5adecb22 write_cache_pages +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b5a2a32 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x5b5c36ed scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x5b6a326c fb_set_suspend +EXPORT_SYMBOL vmlinux 0x5bae2eac acpi_extract_package +EXPORT_SYMBOL vmlinux 0x5bb80a00 generic_writepages +EXPORT_SYMBOL vmlinux 0x5bbda4e4 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x5bbfafb9 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x5be2936c genphy_resume +EXPORT_SYMBOL vmlinux 0x5c26421c acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x5c2f7baa i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x5c5b2d12 per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0x5c72df8f tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x5c8670d3 scsi_add_device +EXPORT_SYMBOL vmlinux 0x5cb5e848 pci_choose_state +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5cc93a4f unregister_key_type +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d55a821 vfs_writev +EXPORT_SYMBOL vmlinux 0x5d5823f4 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x5d61bddb eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5da60073 __kill_fasync +EXPORT_SYMBOL vmlinux 0x5daef1fe revert_creds +EXPORT_SYMBOL vmlinux 0x5dde7598 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x5e04efbb nf_ct_attach +EXPORT_SYMBOL vmlinux 0x5e21f413 kobject_get +EXPORT_SYMBOL vmlinux 0x5e2463a2 proc_create_data +EXPORT_SYMBOL vmlinux 0x5e4307a0 kobject_add +EXPORT_SYMBOL vmlinux 0x5e4bdf6c blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x5e7fd4c0 simple_sync_file +EXPORT_SYMBOL vmlinux 0x5e83610d qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ef3e9cb generic_show_options +EXPORT_SYMBOL vmlinux 0x5f1c7d3c arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x5f2bca91 fd_install +EXPORT_SYMBOL vmlinux 0x5f56db66 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x5f5cc954 tty_throttle +EXPORT_SYMBOL vmlinux 0x5f6b5c5d d_move +EXPORT_SYMBOL vmlinux 0x5f7457b1 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x5f799af0 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x5fb82a3e console_start +EXPORT_SYMBOL vmlinux 0x5fc1ab48 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x5fce596e vfs_readdir +EXPORT_SYMBOL vmlinux 0x5fd49593 invalidate_partition +EXPORT_SYMBOL vmlinux 0x5fd7b790 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x6003902d path_put +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x6040242a swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x60766a22 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60e38137 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x60e8192d xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x60ec13c4 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x60eeb930 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x6103c4c7 per_cpu__irq_stat +EXPORT_SYMBOL vmlinux 0x611c280d inode_change_ok +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x614c21e1 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x617604c4 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x61761b7f get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x6177d1a1 netdev_features_change +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61cad767 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x61caff8f inet_stream_connect +EXPORT_SYMBOL vmlinux 0x61db9e05 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x61f32905 mdiobus_free +EXPORT_SYMBOL vmlinux 0x62036ee5 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x62277d38 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x62451b04 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x6255abff dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x62574617 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62748e70 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x6286f298 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x62899b6a tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x629919d0 vga_get +EXPORT_SYMBOL vmlinux 0x629cfaab i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x62a53ec2 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x62acb68b bio_pair_release +EXPORT_SYMBOL vmlinux 0x62ba4b14 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x62c7cd75 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x62e8422f block_invalidatepage +EXPORT_SYMBOL vmlinux 0x62f04c83 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x6307fc98 del_timer +EXPORT_SYMBOL vmlinux 0x631ecc14 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x634875cd register_qdisc +EXPORT_SYMBOL vmlinux 0x634c69b9 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x63572393 dquot_drop +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x6379e6dd __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x63906414 devm_iounmap +EXPORT_SYMBOL vmlinux 0x6396a98c task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x63a9ddd5 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63fc232f strlen_user +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x6419a998 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x642e54ac __wake_up +EXPORT_SYMBOL vmlinux 0x6466a1e6 mempool_alloc +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64d2519d udp_disconnect +EXPORT_SYMBOL vmlinux 0x64ddd2e4 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x65040d3f icmpv6_send +EXPORT_SYMBOL vmlinux 0x650fb346 add_wait_queue +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65279fb4 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x652877e7 i2c_release_client +EXPORT_SYMBOL vmlinux 0x653723ed __bio_clone +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x657b11d8 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x65889d72 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x658fe830 mdiobus_read +EXPORT_SYMBOL vmlinux 0x6597c30a __put_cred +EXPORT_SYMBOL vmlinux 0x65a4f9be skb_find_text +EXPORT_SYMBOL vmlinux 0x65dd9d00 elv_rb_del +EXPORT_SYMBOL vmlinux 0x65e3b554 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x66020665 ip_route_input +EXPORT_SYMBOL vmlinux 0x660f508e __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x66511c68 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x666b9a13 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x666c1a9f fb_pan_display +EXPORT_SYMBOL vmlinux 0x6676dbd5 dentry_unhash +EXPORT_SYMBOL vmlinux 0x668058fc i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x669b79a5 kthread_create +EXPORT_SYMBOL vmlinux 0x66aad8d5 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x66ed4d95 set_blocksize +EXPORT_SYMBOL vmlinux 0x66faca88 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x6726f377 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x673f815e agp_bridges +EXPORT_SYMBOL vmlinux 0x6740ec3d __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x67590269 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x677905ee vfs_mknod +EXPORT_SYMBOL vmlinux 0x67916d0e cfb_copyarea +EXPORT_SYMBOL vmlinux 0x67985855 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x67a5a28b lease_get_mtime +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67e47159 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x67ebacf6 ipv4_specific +EXPORT_SYMBOL vmlinux 0x681ff4be sk_stop_timer +EXPORT_SYMBOL vmlinux 0x683835a4 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x68432bf0 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x684b200d page_put_link +EXPORT_SYMBOL vmlinux 0x68556e33 register_con_driver +EXPORT_SYMBOL vmlinux 0x68785aad nla_put +EXPORT_SYMBOL vmlinux 0x688e1c64 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x68a24a67 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x68a4c30f genphy_config_advert +EXPORT_SYMBOL vmlinux 0x68b22f0d __bread +EXPORT_SYMBOL vmlinux 0x68b566c7 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x6907d4e9 idr_for_each +EXPORT_SYMBOL vmlinux 0x6928828c agp_flush_chipset +EXPORT_SYMBOL vmlinux 0x694ed30d d_prune_aliases +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69b5a983 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69d3621f dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69deefbd register_framebuffer +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69ff3e69 genl_register_ops +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a31f2bf unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a477cf5 start_tty +EXPORT_SYMBOL vmlinux 0x6a5f98a0 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a89f054 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x6a9f26c9 init_timer_key +EXPORT_SYMBOL vmlinux 0x6ac35fb1 sk_run_filter +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad14b4b cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6ae32125 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x6af296ae jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x6b01b6e7 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b792d31 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x6b91eb15 ndisc_build_skb +EXPORT_SYMBOL vmlinux 0x6b948863 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x6b99b53a __alloc_skb +EXPORT_SYMBOL vmlinux 0x6b9b88f3 sleep_on +EXPORT_SYMBOL vmlinux 0x6bb155a5 put_tty_driver +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bf48745 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x6c09230f __napi_schedule +EXPORT_SYMBOL vmlinux 0x6c166a14 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x6c25bfea xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x6c341a2b mmc_resume_host +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c7a13b2 kernel_read +EXPORT_SYMBOL vmlinux 0x6c8b8872 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x6c9c3f0d swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x6cac123e sock_no_accept +EXPORT_SYMBOL vmlinux 0x6caf7d96 inet_ioctl +EXPORT_SYMBOL vmlinux 0x6cca9981 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x6ce02d36 dst_release +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d0e3039 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x6d132bf0 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d334118 __get_user_8 +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d3de10b tty_register_device +EXPORT_SYMBOL vmlinux 0x6d5ad323 __nla_put +EXPORT_SYMBOL vmlinux 0x6d669328 skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d861138 mpage_readpages +EXPORT_SYMBOL vmlinux 0x6d9e4b13 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x6dc0c24b complete_and_exit +EXPORT_SYMBOL vmlinux 0x6dc9a132 security_path_truncate +EXPORT_SYMBOL vmlinux 0x6dcaeb88 per_cpu__kernel_stack +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df4cfba journal_start +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e20a374 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x6e688525 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x6e6d11d8 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e7f8839 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb0fdf3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x6ebcd97f vfs_rmdir +EXPORT_SYMBOL vmlinux 0x6ebd3200 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x6f37e658 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f70070a scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x6fa53b2e generic_file_open +EXPORT_SYMBOL vmlinux 0x6fca5238 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fde0293 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0x6fe127a3 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x6feab351 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6ff6a9dd register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x700936f7 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x70168f51 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x701b2a44 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x704438f1 mpage_writepage +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x70574ed6 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x7065b411 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x706a3c5f slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x70765d1c vfs_lstat +EXPORT_SYMBOL vmlinux 0x707990ed blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x70900ca9 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x7096e7a0 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70e0d61f cpu_all_bits +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x712aa29b _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x71356fba remove_wait_queue +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x718e45b4 dump_trace +EXPORT_SYMBOL vmlinux 0x71946341 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x719b0236 simple_readpage +EXPORT_SYMBOL vmlinux 0x71a13afd phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0x71a43334 pci_dev_get +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71ab356f dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x71b013f3 pci_find_bus +EXPORT_SYMBOL vmlinux 0x71b9ea29 bdget_disk +EXPORT_SYMBOL vmlinux 0x71bb41e4 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x71d2a65b tty_mutex +EXPORT_SYMBOL vmlinux 0x71d95e02 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x71f6eb38 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x7209736e abort_creds +EXPORT_SYMBOL vmlinux 0x723e177d inet_frag_kill +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x728e4a4a sync_inode +EXPORT_SYMBOL vmlinux 0x729335e4 pci_restore_state +EXPORT_SYMBOL vmlinux 0x7294c53c filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x72a27332 ilookup5 +EXPORT_SYMBOL vmlinux 0x72ab49da kill_anon_super +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72b57deb dquot_destroy +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x731c08cc kernel_accept +EXPORT_SYMBOL vmlinux 0x731fc263 init_net +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x735da84a acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0x736d0d9e gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x73745f28 seq_bitmap +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x7393c70b dquot_commit +EXPORT_SYMBOL vmlinux 0x739ee22d gen_pool_add +EXPORT_SYMBOL vmlinux 0x73a07012 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x73d47708 inet_frags_init +EXPORT_SYMBOL vmlinux 0x73d8d669 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x741f6cd7 arp_broken_ops +EXPORT_SYMBOL vmlinux 0x742dc105 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74880518 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x748caf40 down +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x749e6468 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x74acf1a5 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d3757b rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x74d5c77c blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x74e5651e scsi_print_sense +EXPORT_SYMBOL vmlinux 0x74e8fd3c block_write_begin +EXPORT_SYMBOL vmlinux 0x74ee6ec8 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x74fd826c dma_ops +EXPORT_SYMBOL vmlinux 0x75094a4a tcf_action_exec +EXPORT_SYMBOL vmlinux 0x750c6157 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x751306ec seq_release_private +EXPORT_SYMBOL vmlinux 0x7538b132 agp_off +EXPORT_SYMBOL vmlinux 0x75518f8b pci_find_capability +EXPORT_SYMBOL vmlinux 0x75676dc2 dquot_free_space +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c17747 journal_restart +EXPORT_SYMBOL vmlinux 0x75c62cd0 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x75df62c3 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x75f3f23f jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b2ef2 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x760c2983 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x764d4b38 wireless_send_event +EXPORT_SYMBOL vmlinux 0x767b1c50 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x767dd8fd acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76e404ae cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x76f3eaea blk_init_tags +EXPORT_SYMBOL vmlinux 0x76f3f8a5 num_k8_northbridges +EXPORT_SYMBOL vmlinux 0x7718ff21 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x771fd03d sock_setsockopt +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x77582aa5 md_integrity_register +EXPORT_SYMBOL vmlinux 0x77632af3 unregister_snap_client +EXPORT_SYMBOL vmlinux 0x776bb0d1 per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0x776c5939 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x77719d70 ps2_command +EXPORT_SYMBOL vmlinux 0x77a108df _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f53abc acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fc753d xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x782acba5 crc_t10dif +EXPORT_SYMBOL vmlinux 0x785148a3 idr_destroy +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x78764f4e pv_irq_ops +EXPORT_SYMBOL vmlinux 0x78a484c9 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78e7f96a scsi_block_requests +EXPORT_SYMBOL vmlinux 0x78f0e3ab bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x7913784b genphy_update_link +EXPORT_SYMBOL vmlinux 0x795b7b6a free_buffer_head +EXPORT_SYMBOL vmlinux 0x795e135e blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x796db5c2 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x797840fe put_mnt_ns +EXPORT_SYMBOL vmlinux 0x79859c55 fb_blank +EXPORT_SYMBOL vmlinux 0x798ee852 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79aa8a00 sk_dst_check +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79ae3ffb tty_devnum +EXPORT_SYMBOL vmlinux 0x79ecd235 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x79f63da5 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x79f82ed1 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x7a2a4ad5 prepare_creds +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a3d06d9 do_splice_to +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a61a6da skb_append +EXPORT_SYMBOL vmlinux 0x7a73e5c5 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x7a848702 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x7a9559b0 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x7acd6809 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x7adc4059 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7ae7ac52 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7aede056 simple_empty +EXPORT_SYMBOL vmlinux 0x7b0197b8 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x7b05f2cb call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b15aa47 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b675f89 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x7b6ce00f pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7ba30eaf inet_add_protocol +EXPORT_SYMBOL vmlinux 0x7bc31490 bd_release +EXPORT_SYMBOL vmlinux 0x7bf9b4aa md_error +EXPORT_SYMBOL vmlinux 0x7bfe315e dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c117eb2 phy_disconnect +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c7401ec d_add_ci +EXPORT_SYMBOL vmlinux 0x7c76ecf7 tcf_em_register +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9084fd mmc_register_driver +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cb320e6 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x7cf522c4 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d299237 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x7d3bc7d2 nobh_write_end +EXPORT_SYMBOL vmlinux 0x7d6bb587 cpu_online_mask +EXPORT_SYMBOL vmlinux 0x7d77e4d8 have_submounts +EXPORT_SYMBOL vmlinux 0x7d9462ca serio_close +EXPORT_SYMBOL vmlinux 0x7d94f746 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x7d9e0daa agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x7daf7486 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd554fc unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x7deb52e3 audit_log_format +EXPORT_SYMBOL vmlinux 0x7e1c0f16 bdi_destroy +EXPORT_SYMBOL vmlinux 0x7e418e92 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x7e524b1a scsi_dma_map +EXPORT_SYMBOL vmlinux 0x7e561da6 dev_get_stats +EXPORT_SYMBOL vmlinux 0x7e71a483 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7ea650ad pagevec_lookup +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7ed09b36 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x7ee01bc6 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x7ee91c1d _spin_trylock +EXPORT_SYMBOL vmlinux 0x7f14c0b7 lookup_bdev +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f43c9c1 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x7f4f4ae0 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x7f5ca7be sg_miter_stop +EXPORT_SYMBOL vmlinux 0x7f76d751 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x7f94c243 lro_flush_all +EXPORT_SYMBOL vmlinux 0x7f9c19fe tty_unthrottle +EXPORT_SYMBOL vmlinux 0x7fc93890 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x7ff6ae43 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x8040ed30 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x805e75bb dev_mc_add +EXPORT_SYMBOL vmlinux 0x808476b3 simple_rmdir +EXPORT_SYMBOL vmlinux 0x80a33392 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x80c81df3 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x80ceb147 generic_getxattr +EXPORT_SYMBOL vmlinux 0x80d16f17 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x80d31286 vfs_create +EXPORT_SYMBOL vmlinux 0x80d5c5c0 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x80d5cff0 per_cpu__irq_regs +EXPORT_SYMBOL vmlinux 0x80e36042 skb_dma_map +EXPORT_SYMBOL vmlinux 0x80e89b81 d_rehash +EXPORT_SYMBOL vmlinux 0x8100fb01 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x811ff112 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x81390c59 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x81474d67 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x81571313 udp_proc_register +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x816022cf dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x8163dee5 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x81794662 elv_add_request +EXPORT_SYMBOL vmlinux 0x8181224b find_lock_page +EXPORT_SYMBOL vmlinux 0x819486bf sock_recvmsg +EXPORT_SYMBOL vmlinux 0x81971b6e __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x81a10ce7 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x81a2d9f3 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x81aa82f7 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x81bb0ab4 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x81c0ab1f skb_push +EXPORT_SYMBOL vmlinux 0x81e28443 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820fc63c vfsmount_lock +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x821b54dc lock_may_write +EXPORT_SYMBOL vmlinux 0x82306178 inet_addr_type +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8260bc2b security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82d3e07d gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x830c4a30 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x830e547b ioremap_prot +EXPORT_SYMBOL vmlinux 0x8317e13f input_register_device +EXPORT_SYMBOL vmlinux 0x8317e20a completion_done +EXPORT_SYMBOL vmlinux 0x8318ee14 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x831b6472 seq_lseek +EXPORT_SYMBOL vmlinux 0x834a1470 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x83620d49 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x836e8d00 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x838cdaa7 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a75417 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83c46141 mmc_request_done +EXPORT_SYMBOL vmlinux 0x83cd0118 set_pages_wb +EXPORT_SYMBOL vmlinux 0x83e70e14 dqput +EXPORT_SYMBOL vmlinux 0x83f44492 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x84105ed4 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x84762838 bdi_init +EXPORT_SYMBOL vmlinux 0x847b9601 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x84895a1e eth_header_cache +EXPORT_SYMBOL vmlinux 0x848fdb20 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x84ae440c serio_reconnect +EXPORT_SYMBOL vmlinux 0x84b49c1b input_grab_device +EXPORT_SYMBOL vmlinux 0x84c3f9f8 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x84cc3632 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x851ae06c ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x85351942 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x853614ca redraw_screen +EXPORT_SYMBOL vmlinux 0x854c71f8 filp_open +EXPORT_SYMBOL vmlinux 0x855f7ca9 register_netdevice +EXPORT_SYMBOL vmlinux 0x8563508a follow_down +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x857d8b5c pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x857dc29a md_check_recovery +EXPORT_SYMBOL vmlinux 0x85948d66 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85d994f6 deactivate_super +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85ed74ea fasync_helper +EXPORT_SYMBOL vmlinux 0x85f87e07 dm_put_device +EXPORT_SYMBOL vmlinux 0x85f9d7f1 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x8635dbf3 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x86436841 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x8683867e phy_attach_direct +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86c7146d vfs_fstat +EXPORT_SYMBOL vmlinux 0x86d3535c ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x86d3ec8f input_inject_event +EXPORT_SYMBOL vmlinux 0x86f60ba3 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x87139591 mapping_tagged +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x8725b236 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x8733e9a3 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x87521827 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x8752df26 skb_make_writable +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x878add06 unlock_super +EXPORT_SYMBOL vmlinux 0x878e4c40 vm_insert_page +EXPORT_SYMBOL vmlinux 0x879117bd try_to_release_page +EXPORT_SYMBOL vmlinux 0x879a1cc7 generic_listxattr +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87d7de27 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x87e95f00 input_set_keycode +EXPORT_SYMBOL vmlinux 0x87f21f11 key_revoke +EXPORT_SYMBOL vmlinux 0x87f5c937 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x87f7ed0d __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x8802563e d_obtain_alias +EXPORT_SYMBOL vmlinux 0x8802b9ad bio_sector_offset +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x884545af swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x88512d34 make_bad_inode +EXPORT_SYMBOL vmlinux 0x885cf6b6 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x885dd267 dev_load +EXPORT_SYMBOL vmlinux 0x8866ddf8 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x889da329 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x88d1c5c3 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x88d4ee74 ps2_drain +EXPORT_SYMBOL vmlinux 0x88e07584 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x88f465c3 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x88fc880a vfs_quota_off +EXPORT_SYMBOL vmlinux 0x88fdf70b pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x898c2251 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x89949018 down_timeout +EXPORT_SYMBOL vmlinux 0x89ad1ba4 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x89b4bf77 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x8a01519c vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3eabf0 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a7fe4a4 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aaf61aa pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x8abbdb5b __devm_request_region +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8b03eaaa sock_kfree_s +EXPORT_SYMBOL vmlinux 0x8b04d453 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x8b0f3e82 ip_defrag +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b371110 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x8b3ceb73 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x8b40ad13 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b6d3c39 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x8b7b1c29 blkdev_get +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b86950d skb_store_bits +EXPORT_SYMBOL vmlinux 0x8b888e0a inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x8b922c0f __strnlen_user +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8ba1a1f9 block_write_end +EXPORT_SYMBOL vmlinux 0x8bacdd06 register_nls +EXPORT_SYMBOL vmlinux 0x8bc005af mnt_unpin +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bdc8a7a netif_receive_skb +EXPORT_SYMBOL vmlinux 0x8be3314a elv_abort_queue +EXPORT_SYMBOL vmlinux 0x8beb8e16 alloc_file +EXPORT_SYMBOL vmlinux 0x8bface0f inode_add_bytes +EXPORT_SYMBOL vmlinux 0x8c08e059 kernel_bind +EXPORT_SYMBOL vmlinux 0x8c183a8a pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c34c53f qdisc_reset +EXPORT_SYMBOL vmlinux 0x8c3610a2 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x8c41f72b __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c59bd58 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x8c65230d acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x8c8b3424 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x8c9ac94b register_md_personality +EXPORT_SYMBOL vmlinux 0x8caff4a1 mmc_host_enable +EXPORT_SYMBOL vmlinux 0x8cbb2bd7 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cef1ad5 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x8cfd4255 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x8cff7c15 thaw_bdev +EXPORT_SYMBOL vmlinux 0x8d1a735e fsync_bdev +EXPORT_SYMBOL vmlinux 0x8d36a168 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d3c580a blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d72c0d5 dm_io +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8db37ad7 skb_checksum +EXPORT_SYMBOL vmlinux 0x8dca832f __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0637ba i8253_lock +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e0cf7c5 __register_binfmt +EXPORT_SYMBOL vmlinux 0x8e2f7654 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x8e3c545c sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e549d3e unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x8e5deaa7 journal_get_create_access +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8ec1a23c override_creds +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8eeb4de3 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x8f12f8ea __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x8f228096 pci_map_rom +EXPORT_SYMBOL vmlinux 0x8f230b80 pci_pme_active +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f28ff91 qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x8f33d8ef locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x8f378b90 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f6eb53f igrab +EXPORT_SYMBOL vmlinux 0x8f786b32 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x8f7c545f ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x8f824f02 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8fa841be journal_create +EXPORT_SYMBOL vmlinux 0x8fc37be0 lock_super +EXPORT_SYMBOL vmlinux 0x8fe545dc dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x8fe8601e pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x8fe86767 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x8fe8ad1a rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x8ff08052 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x90260fc8 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x9070c78b iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x908435df inet6_release +EXPORT_SYMBOL vmlinux 0x90937727 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x9098195d pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90ac7412 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x90b010ae tcp_shutdown +EXPORT_SYMBOL vmlinux 0x90bb5170 key_task_permission +EXPORT_SYMBOL vmlinux 0x90c59e1a tc_classify +EXPORT_SYMBOL vmlinux 0x90d47e04 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x90f0c233 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x90fb097b security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x910812bd tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x913f6109 kill_fasync +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x914e7971 key_unlink +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x9162bf00 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x916a076f follow_pfn +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x919676d5 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x91aeedbd km_query +EXPORT_SYMBOL vmlinux 0x91fa5dd9 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x9200deb3 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x9217348a serial8250_register_port +EXPORT_SYMBOL vmlinux 0x921a92e1 block_sync_page +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x924916fd input_flush_device +EXPORT_SYMBOL vmlinux 0x926b65c5 netpoll_poll +EXPORT_SYMBOL vmlinux 0x9270547d simple_fsync +EXPORT_SYMBOL vmlinux 0x92797f1a send_sig_info +EXPORT_SYMBOL vmlinux 0x927e989f gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x92b5bfd0 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x92c7920e blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x93095fee iget_failed +EXPORT_SYMBOL vmlinux 0x9341119b current_fs_time +EXPORT_SYMBOL vmlinux 0x9348beba mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x935c5881 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x9385667d down_read_trylock +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93acb59d simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93c792b9 generic_permission +EXPORT_SYMBOL vmlinux 0x93cbd1ec _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x93ff59ad do_sync_write +EXPORT_SYMBOL vmlinux 0x942eabd1 inet_accept +EXPORT_SYMBOL vmlinux 0x94361e05 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x9439e825 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x943e868f ida_get_new +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x944de2ae jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x945bc6a7 copy_from_user +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x949ffd8e ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x94eb1e77 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x94f66943 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x950737fc napi_frags_skb +EXPORT_SYMBOL vmlinux 0x95352ea9 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x953e4106 inode_setattr +EXPORT_SYMBOL vmlinux 0x953fbb6b dma_pool_create +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x95482d5c __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x955dd6f5 touch_atime +EXPORT_SYMBOL vmlinux 0x9570b00d pci_do_scan_bus +EXPORT_SYMBOL vmlinux 0x9575b45d acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x9588a2b3 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x95b1083d fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x95c3997b open_by_devnum +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95d918ed neigh_event_ns +EXPORT_SYMBOL vmlinux 0x95e0a369 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x961c4988 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x9629486a per_cpu__cpu_number +EXPORT_SYMBOL vmlinux 0x96476765 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x9669e50e mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x96af8109 netif_napi_add +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96ec1850 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x9709a889 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x972e0a5f dev_disable_lro +EXPORT_SYMBOL vmlinux 0x973873ab _spin_lock +EXPORT_SYMBOL vmlinux 0x9748bc58 ll_rw_block +EXPORT_SYMBOL vmlinux 0x974f867d del_gendisk +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x978f18a2 phy_detach +EXPORT_SYMBOL vmlinux 0x97acb59b i2c_register_driver +EXPORT_SYMBOL vmlinux 0x97c93177 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x97cd1727 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97e5930f llc_sap_find +EXPORT_SYMBOL vmlinux 0x97ed042b pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x97f43eb8 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x9808cf73 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x9815597e path_lookup +EXPORT_SYMBOL vmlinux 0x984fd7f7 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x989865db dm_table_get +EXPORT_SYMBOL vmlinux 0x98abcf82 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x98ae5650 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x98ba3b81 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x98d94dd4 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x98fa0611 unregister_nls +EXPORT_SYMBOL vmlinux 0x992a3e4e pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x996643fb jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x996c5ef6 __getblk +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99b0a88e dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99f95e68 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a37efd1 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x9a462957 dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0x9a55e708 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x9a9985be percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9af1b3e0 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x9af7172e register_filesystem +EXPORT_SYMBOL vmlinux 0x9b221362 block_read_full_page +EXPORT_SYMBOL vmlinux 0x9b30410d blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b388f0b try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x9b3ccc64 dev_trans_start +EXPORT_SYMBOL vmlinux 0x9b592a58 vc_resize +EXPORT_SYMBOL vmlinux 0x9b7e5904 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x9b882706 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x9b941789 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bcf86c8 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x9bdbcf4d pagecache_write_end +EXPORT_SYMBOL vmlinux 0x9beecd88 generic_fillattr +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c20e18f ip_dev_find +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c5268c5 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9caf02ed put_io_context +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cbee6cd pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x9ccb2622 finish_wait +EXPORT_SYMBOL vmlinux 0x9ced38aa down_trylock +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d108b61 xrlim_allow +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3a77a1 aio_put_req +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d57531d pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x9d59fb4a tty_port_close +EXPORT_SYMBOL vmlinux 0x9d7a3c77 init_task +EXPORT_SYMBOL vmlinux 0x9d85c068 commit_creds +EXPORT_SYMBOL vmlinux 0x9d87770d d_lookup +EXPORT_SYMBOL vmlinux 0x9d911609 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x9d957ea8 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x9da764e1 mdiobus_write +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e877f94 page_readlink +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ea28ec7 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x9eb1a26e input_set_capability +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f0d6caa neigh_seq_next +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f243ece security_inode_readlink +EXPORT_SYMBOL vmlinux 0x9f255c53 install_exec_creds +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f4c2bc5 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x9f59a16e dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x9f6f6ee7 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x9f92efc4 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa274b4 dq_data_lock +EXPORT_SYMBOL vmlinux 0x9fb97cea ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xa00124a7 uart_update_timeout +EXPORT_SYMBOL vmlinux 0xa00a4a7a kmem_cache_free +EXPORT_SYMBOL vmlinux 0xa00a61ff may_umount +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa039b466 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xa041382d kernel_sendpage +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07a8d34 datagram_poll +EXPORT_SYMBOL vmlinux 0xa07f2e1f ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xa08c0410 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0xa0a4ac21 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b0e609 journal_revoke +EXPORT_SYMBOL vmlinux 0xa0b3d04a key_negate_and_link +EXPORT_SYMBOL vmlinux 0xa0b6af21 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xa0b8b0d6 simple_link +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0d96963 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xa0e098a4 phy_stop +EXPORT_SYMBOL vmlinux 0xa0f3f5fb xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa1107952 bdget +EXPORT_SYMBOL vmlinux 0xa11644de vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xa1170356 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa12f23bc inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa13d7f38 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xa13f47cd pci_get_subsys +EXPORT_SYMBOL vmlinux 0xa16d7889 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0xa1710706 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa1ee360a netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xa2047dc8 elv_rb_find +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa20cf43a sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xa21a38db fb_get_mode +EXPORT_SYMBOL vmlinux 0xa2649e8f xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xa2805be1 dev_addr_add +EXPORT_SYMBOL vmlinux 0xa28d14bd mmc_alloc_host +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a1e5c9 _write_lock_bh +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b8a2ba __init_rwsem +EXPORT_SYMBOL vmlinux 0xa2bb9e65 alloc_disk_node +EXPORT_SYMBOL vmlinux 0xa2bcdbdc udplite_prot +EXPORT_SYMBOL vmlinux 0xa2cdaf27 __brelse +EXPORT_SYMBOL vmlinux 0xa300c7e0 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0xa31e5762 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xa31f172d __copy_from_user_inatomic +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3826aeb udp_prot +EXPORT_SYMBOL vmlinux 0xa39ab218 napi_skb_finish +EXPORT_SYMBOL vmlinux 0xa3a5be95 memmove +EXPORT_SYMBOL vmlinux 0xa3b06834 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xa3b1a54d security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3cc6ef3 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xa3df9560 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xa3ed12d5 inet_getname +EXPORT_SYMBOL vmlinux 0xa3fc059a ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xa401f37b xfrm_state_add +EXPORT_SYMBOL vmlinux 0xa40d8154 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0xa415b384 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xa42e8d2f block_fsync +EXPORT_SYMBOL vmlinux 0xa445c0eb simple_transaction_release +EXPORT_SYMBOL vmlinux 0xa44ad274 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xa4565bd2 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xa492c62b scsi_free_command +EXPORT_SYMBOL vmlinux 0xa49dbdd7 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xa4a99aef vfs_statfs +EXPORT_SYMBOL vmlinux 0xa4b30946 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4c86dc9 skb_recycle_check +EXPORT_SYMBOL vmlinux 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL vmlinux 0xa4e1daf8 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xa510da20 blk_start_request +EXPORT_SYMBOL vmlinux 0xa54786c9 nlmsg_notify +EXPORT_SYMBOL vmlinux 0xa56de4dc bh_submit_read +EXPORT_SYMBOL vmlinux 0xa56f1315 mempool_free +EXPORT_SYMBOL vmlinux 0xa57aed6e find_or_create_page +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa5922bb1 kfifo_init +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5adbe8c ida_destroy +EXPORT_SYMBOL vmlinux 0xa5b06e96 __secpath_destroy +EXPORT_SYMBOL vmlinux 0xa5b5240f compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0xa5f7a75b jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xa60ac1d8 pci_target_state +EXPORT_SYMBOL vmlinux 0xa61055ce dma_find_channel +EXPORT_SYMBOL vmlinux 0xa6157aed I_BDEV +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa64eab99 vfs_readlink +EXPORT_SYMBOL vmlinux 0xa663b4a4 do_sync_read +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa68743da ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xa69c66ec xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0xa6c24332 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa70913e8 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa72066ff dcache_dir_open +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa72f9ade per_cpu__current_task +EXPORT_SYMBOL vmlinux 0xa77002b7 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xa771213c lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xa77525bb vfs_getattr +EXPORT_SYMBOL vmlinux 0xa7bcb079 proc_mkdir +EXPORT_SYMBOL vmlinux 0xa7c8f18b dma_set_mask +EXPORT_SYMBOL vmlinux 0xa7db1b6c pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xa7e2db50 flush_signals +EXPORT_SYMBOL vmlinux 0xa7e6e461 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0xa7f6b854 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xa8063a34 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0xa80fb5b5 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xa8262f53 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xa8379442 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa8920539 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0xa8961ae4 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8e3f6e3 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xa8f1f441 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xa8fbf582 idr_replace +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa902719a ip_ct_attach +EXPORT_SYMBOL vmlinux 0xa91a440c lookup_hash +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa91c5162 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xa93a9eea skb_split +EXPORT_SYMBOL vmlinux 0xa9882e14 __kfree_skb +EXPORT_SYMBOL vmlinux 0xa9bd2676 __vmalloc +EXPORT_SYMBOL vmlinux 0xa9d20ba7 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0xa9e0fb29 sock_init_data +EXPORT_SYMBOL vmlinux 0xa9fcf31d wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xaa302b2a do_splice_from +EXPORT_SYMBOL vmlinux 0xaa63d2e1 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0xaa84a8ae acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0xaa8b1330 new_inode +EXPORT_SYMBOL vmlinux 0xaab06af8 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xaabf142a __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xaacda319 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0xaad268a5 file_fsync +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafba571 ppp_register_channel +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab42e46b user_revoke +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab86c436 pci_set_mwi +EXPORT_SYMBOL vmlinux 0xab8f2c02 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0xab9ef6d6 input_register_handler +EXPORT_SYMBOL vmlinux 0xaba27983 hippi_type_trans +EXPORT_SYMBOL vmlinux 0xaba97015 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb83d08 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xabb9f4d4 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabe3f06b seq_open_private +EXPORT_SYMBOL vmlinux 0xabe7c43a __serio_register_driver +EXPORT_SYMBOL vmlinux 0xabe85a21 idr_init +EXPORT_SYMBOL vmlinux 0xabf73372 agp_free_page_array +EXPORT_SYMBOL vmlinux 0xabfc4088 bdput +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6794a7 seq_write +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac6b036f unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xac7853d0 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0xacaa4e91 sock_release +EXPORT_SYMBOL vmlinux 0xacc20d04 consume_skb +EXPORT_SYMBOL vmlinux 0xacca11a1 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacf565ba load_nls +EXPORT_SYMBOL vmlinux 0xacfdcf12 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad061d29 netlink_unicast +EXPORT_SYMBOL vmlinux 0xad07434f give_up_console +EXPORT_SYMBOL vmlinux 0xad0d0619 acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad25fb12 __memcpy +EXPORT_SYMBOL vmlinux 0xad2afe31 vga_tryget +EXPORT_SYMBOL vmlinux 0xad49c702 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0xad7570c8 bdi_unregister +EXPORT_SYMBOL vmlinux 0xad8de1b3 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0xad8e97f7 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadad3394 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xadefe95f kernel_connect +EXPORT_SYMBOL vmlinux 0xadf710cf acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0xae11a17b __find_get_block +EXPORT_SYMBOL vmlinux 0xae155bc8 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xae21ae6b single_release +EXPORT_SYMBOL vmlinux 0xae2aedb9 netlink_broadcast +EXPORT_SYMBOL vmlinux 0xae5ab2f1 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xae5ac311 seq_release +EXPORT_SYMBOL vmlinux 0xae6d6178 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0xaec06d63 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaedcf9f8 inet_stream_ops +EXPORT_SYMBOL vmlinux 0xaedde1cf scsi_execute_req +EXPORT_SYMBOL vmlinux 0xaeecf911 nonseekable_open +EXPORT_SYMBOL vmlinux 0xaef0f4f1 pci_select_bars +EXPORT_SYMBOL vmlinux 0xaefddf21 agp_put_bridge +EXPORT_SYMBOL vmlinux 0xaf04ff94 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf6e5e61 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xaf7906d6 blk_init_queue +EXPORT_SYMBOL vmlinux 0xaf9ed901 agp_find_bridge +EXPORT_SYMBOL vmlinux 0xafbec06e dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xafef437f skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0xb00d7dfa skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb011206f __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xb0209357 request_firmware +EXPORT_SYMBOL vmlinux 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL vmlinux 0xb051909f ida_init +EXPORT_SYMBOL vmlinux 0xb0529305 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb07b0f8a mmc_host_disable +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb0b18c56 register_key_type +EXPORT_SYMBOL vmlinux 0xb0b5d23c mmc_card_awake +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c6cd86 skb_queue_purge +EXPORT_SYMBOL vmlinux 0xb0cf558d read_dev_sector +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0fbfb61 unregister_console +EXPORT_SYMBOL vmlinux 0xb10dac9a aio_complete +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb12f1311 bdi_register +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb16bffa3 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb1928a05 __rta_fill +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a06041 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0xb1aac218 vfs_rename +EXPORT_SYMBOL vmlinux 0xb1beea51 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1da31ea netpoll_send_udp +EXPORT_SYMBOL vmlinux 0xb1ea2eca input_filter_device +EXPORT_SYMBOL vmlinux 0xb1f1d6e5 get_user_pages +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb20ecf88 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb21f071a jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb23240ec dst_alloc +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb279da12 pv_lock_ops +EXPORT_SYMBOL vmlinux 0xb2a321aa agp_create_memory +EXPORT_SYMBOL vmlinux 0xb2bb86b8 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xb2e34c97 lease_modify +EXPORT_SYMBOL vmlinux 0xb2e55898 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xb2f059a1 napi_gro_frags +EXPORT_SYMBOL vmlinux 0xb2f53985 scsi_init_io +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb312eb46 sock_no_bind +EXPORT_SYMBOL vmlinux 0xb3205415 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb3401123 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xb343222e iget5_locked +EXPORT_SYMBOL vmlinux 0xb34c4791 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb374a6cc bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xb3874c09 journal_dirty_data +EXPORT_SYMBOL vmlinux 0xb38b5292 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3c42c94 per_cpu__x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xb3c7589e jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xb3cdd5af mb_cache_shrink +EXPORT_SYMBOL vmlinux 0xb3d2a08b tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xb3e0a0cb tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb40a9271 dqget +EXPORT_SYMBOL vmlinux 0xb41bc081 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4279ab7 downgrade_write +EXPORT_SYMBOL vmlinux 0xb42c6c61 file_permission +EXPORT_SYMBOL vmlinux 0xb43534ed sock_create +EXPORT_SYMBOL vmlinux 0xb4380903 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb44b5dec remove_proc_entry +EXPORT_SYMBOL vmlinux 0xb44f53bb inet6_ioctl +EXPORT_SYMBOL vmlinux 0xb45b24f6 k8_nb_ids +EXPORT_SYMBOL vmlinux 0xb46477d7 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xb469b8a1 sk_common_release +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4870848 pci_enable_wake +EXPORT_SYMBOL vmlinux 0xb4aed2d8 find_inode_number +EXPORT_SYMBOL vmlinux 0xb4b0ee4e down_read +EXPORT_SYMBOL vmlinux 0xb4ca9447 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb4cd1bfd bd_claim +EXPORT_SYMBOL vmlinux 0xb4d36f81 km_state_expired +EXPORT_SYMBOL vmlinux 0xb4daf5e3 con_is_bound +EXPORT_SYMBOL vmlinux 0xb4dc9d95 check_disk_size_change +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb5159b4a __scsi_add_device +EXPORT_SYMBOL vmlinux 0xb523aa10 vfs_unlink +EXPORT_SYMBOL vmlinux 0xb523ecaa seq_printf +EXPORT_SYMBOL vmlinux 0xb52f18ec pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xb541dab3 d_splice_alias +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb563c405 __napi_complete +EXPORT_SYMBOL vmlinux 0xb57d1ce3 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xb5804861 nobh_write_begin +EXPORT_SYMBOL vmlinux 0xb5879532 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0xb5986c77 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb5da6794 skb_under_panic +EXPORT_SYMBOL vmlinux 0xb5ece21e __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xb5f28b5f __any_online_cpu +EXPORT_SYMBOL vmlinux 0xb601def0 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb6353555 per_cpu__x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0xb6556261 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb683cbca flush_old_exec +EXPORT_SYMBOL vmlinux 0xb6994a91 journal_clear_err +EXPORT_SYMBOL vmlinux 0xb69e33db pipe_to_file +EXPORT_SYMBOL vmlinux 0xb6a3b0e4 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xb6a3dd7c llc_sap_close +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c489b7 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6cbe886 acpi_get_node +EXPORT_SYMBOL vmlinux 0xb6e227aa rtc_lock +EXPORT_SYMBOL vmlinux 0xb7114cd6 napi_gro_flush +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb75d8fcc scsi_is_host_device +EXPORT_SYMBOL vmlinux 0xb7694780 pci_get_class +EXPORT_SYMBOL vmlinux 0xb7734fd6 blk_end_request +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7dd0700 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0xb7e150e5 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0xb7f0c6be free_task +EXPORT_SYMBOL vmlinux 0xb7f6b17c inet_register_protosw +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb84b0db5 journal_force_commit +EXPORT_SYMBOL vmlinux 0xb84ef909 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xb864d79c security_file_permission +EXPORT_SYMBOL vmlinux 0xb86d5f8e set_binfmt +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8b1094d tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xb8bc7fce inet_put_port +EXPORT_SYMBOL vmlinux 0xb8c42908 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xb8c606a7 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xb8d66c93 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0xb8e0d489 __register_chrdev +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb8e80845 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0xb8fabbc9 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0xb90f78a0 devm_ioport_map +EXPORT_SYMBOL vmlinux 0xb9112b2d d_find_alias +EXPORT_SYMBOL vmlinux 0xb9335db3 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xb9458190 posix_lock_file +EXPORT_SYMBOL vmlinux 0xb9879171 journal_stop +EXPORT_SYMBOL vmlinux 0xb989c12e tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9a54500 rfkill_unregister +EXPORT_SYMBOL vmlinux 0xb9d499c3 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba0afdad fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xba18330a wait_on_page_bit +EXPORT_SYMBOL vmlinux 0xba2c9b49 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba809f26 iput +EXPORT_SYMBOL vmlinux 0xbaa10b52 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xbaa1a746 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbaca1c48 sg_miter_start +EXPORT_SYMBOL vmlinux 0xbad0b7cd jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xbad60ff0 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xbadb4216 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb2c871b netif_device_attach +EXPORT_SYMBOL vmlinux 0xbb53e8a1 uart_resume_port +EXPORT_SYMBOL vmlinux 0xbb567420 md_done_sync +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb6a125f journal_start_commit +EXPORT_SYMBOL vmlinux 0xbb6f9ee6 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xbb89946d names_cachep +EXPORT_SYMBOL vmlinux 0xbb982aa9 do_truncate +EXPORT_SYMBOL vmlinux 0xbb99068b inet6_del_protocol +EXPORT_SYMBOL vmlinux 0xbba38c39 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xbbba2039 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xbbc0f8c2 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xbbd18d94 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xbbdbfefa neigh_connected_output +EXPORT_SYMBOL vmlinux 0xbbe0aefc dmam_free_coherent +EXPORT_SYMBOL vmlinux 0xbbe26fb7 pci_dev_put +EXPORT_SYMBOL vmlinux 0xbc03ce97 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0xbc4d8363 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xbc7be682 pcim_enable_device +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbccbb49c idr_remove_all +EXPORT_SYMBOL vmlinux 0xbcd1c5d3 get_phy_device +EXPORT_SYMBOL vmlinux 0xbcea121b scsi_ioctl +EXPORT_SYMBOL vmlinux 0xbcfdbbfe pv_cpu_ops +EXPORT_SYMBOL vmlinux 0xbd332df1 sock_create_kern +EXPORT_SYMBOL vmlinux 0xbd4560c6 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xbd668fe0 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0xbd71b957 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0xbdaf5b07 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0xbdb6b102 bioset_create +EXPORT_SYMBOL vmlinux 0xbdc5daf4 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xbddf11c9 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0xbdf35957 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbdfabd57 dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0xbdfadd1e ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xbe0ff4e0 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xbe1cc4c5 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xbe4646f5 simple_release_fs +EXPORT_SYMBOL vmlinux 0xbe499d81 copy_to_user +EXPORT_SYMBOL vmlinux 0xbe6b17f7 textsearch_prepare +EXPORT_SYMBOL vmlinux 0xbe8bd16d generic_block_bmap +EXPORT_SYMBOL vmlinux 0xbebdf9ce arp_send +EXPORT_SYMBOL vmlinux 0xbec3d7f0 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xbecdce74 ida_pre_get +EXPORT_SYMBOL vmlinux 0xbed7552b pnp_start_dev +EXPORT_SYMBOL vmlinux 0xbedfd1a5 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf330e2b scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xbf5e355a tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0xbf638af3 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xbf6688fc disk_stack_limits +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8ce7a2 boot_cpu_data +EXPORT_SYMBOL vmlinux 0xbf96a8f0 bio_unmap_user +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbf9e766f bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xbfa91d7f __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfd746dd inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xbff1d626 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0xbfffc6c8 dput +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc011ec72 textsearch_register +EXPORT_SYMBOL vmlinux 0xc02536a8 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xc02536db pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xc0318b01 free_netdev +EXPORT_SYMBOL vmlinux 0xc04124c4 init_special_inode +EXPORT_SYMBOL vmlinux 0xc0460acf get_super +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc05ef80e cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xc07d43ae acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0b45a92 dev_addr_del +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc1037d96 input_open_device +EXPORT_SYMBOL vmlinux 0xc10eab7b blk_queue_bounce +EXPORT_SYMBOL vmlinux 0xc11a9c09 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xc12abb08 filp_close +EXPORT_SYMBOL vmlinux 0xc1333b4c phy_device_free +EXPORT_SYMBOL vmlinux 0xc1385da1 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0xc14612c8 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0xc172456b netif_device_detach +EXPORT_SYMBOL vmlinux 0xc185bcc9 ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0xc1a5e8dc redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xc1b4a47f blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xc1b6e488 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0xc1c849d3 inet_bind +EXPORT_SYMBOL vmlinux 0xc1d154e4 lro_receive_skb +EXPORT_SYMBOL vmlinux 0xc1d1d904 tcp_parse_options +EXPORT_SYMBOL vmlinux 0xc2013223 user_path_at +EXPORT_SYMBOL vmlinux 0xc22900bb register_gifconf +EXPORT_SYMBOL vmlinux 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0xc249959c ps2_end_command +EXPORT_SYMBOL vmlinux 0xc254af48 dcache_lock +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc262058e request_key +EXPORT_SYMBOL vmlinux 0xc2a13b41 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0xc2a35b4a init_buffer +EXPORT_SYMBOL vmlinux 0xc2b7e1ce register_snap_client +EXPORT_SYMBOL vmlinux 0xc2be9086 copy_io_context +EXPORT_SYMBOL vmlinux 0xc2ca1bae blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f1b238 skb_tx_hash +EXPORT_SYMBOL vmlinux 0xc3210f88 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xc328c50f dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xc337ad6c tty_hangup +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc353e26d log_start_commit +EXPORT_SYMBOL vmlinux 0xc3641edf scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xc3a27ca4 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3fd4f85 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc4090afc skb_queue_tail +EXPORT_SYMBOL vmlinux 0xc411f381 pci_match_id +EXPORT_SYMBOL vmlinux 0xc42f4f65 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0xc4413c75 get_sb_single +EXPORT_SYMBOL vmlinux 0xc447f8c1 neigh_update +EXPORT_SYMBOL vmlinux 0xc47630f0 key_put +EXPORT_SYMBOL vmlinux 0xc4829c43 generic_ro_fops +EXPORT_SYMBOL vmlinux 0xc4838c31 genphy_suspend +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4b5ad67 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xc4bf56c1 rtnl_create_link +EXPORT_SYMBOL vmlinux 0xc4cd99c3 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xc4d39686 mnt_pin +EXPORT_SYMBOL vmlinux 0xc4e9c01c cpu_active_mask +EXPORT_SYMBOL vmlinux 0xc4ebabee dquot_initialize +EXPORT_SYMBOL vmlinux 0xc4ec0036 sock_create_lite +EXPORT_SYMBOL vmlinux 0xc52ec429 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc53c882d idr_get_new +EXPORT_SYMBOL vmlinux 0xc54d576e pci_fixup_device +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc557f9e2 llc_sap_open +EXPORT_SYMBOL vmlinux 0xc558530d profile_pc +EXPORT_SYMBOL vmlinux 0xc55f7dc7 _write_trylock +EXPORT_SYMBOL vmlinux 0xc5844fb8 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0xc5aca629 input_event +EXPORT_SYMBOL vmlinux 0xc5ba5a05 uart_get_divisor +EXPORT_SYMBOL vmlinux 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0xc5ea1fa9 dev_close +EXPORT_SYMBOL vmlinux 0xc60619fc dev_mc_sync +EXPORT_SYMBOL vmlinux 0xc6085c3b scsi_finish_command +EXPORT_SYMBOL vmlinux 0xc646e72f hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0xc683fb61 journal_load +EXPORT_SYMBOL vmlinux 0xc6b6db3b input_unfilter_device +EXPORT_SYMBOL vmlinux 0xc6be6d24 serio_rescan +EXPORT_SYMBOL vmlinux 0xc701dde9 log_wait_commit +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72d6c75 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7aeabc8 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xc7b59c3c pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0xc7d8dacf agp_backend_release +EXPORT_SYMBOL vmlinux 0xc819f8ce pnp_possible_config +EXPORT_SYMBOL vmlinux 0xc8271c59 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xc82fc069 release_sock +EXPORT_SYMBOL vmlinux 0xc83c3850 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xc846e95a blk_sync_queue +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc89c699f alloc_fcdev +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8d17a65 thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xc8e8a083 __lock_buffer +EXPORT_SYMBOL vmlinux 0xc8ed1411 eth_header +EXPORT_SYMBOL vmlinux 0xc8f3bed1 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xc922dae2 ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0xc959c4b9 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xc962d592 blk_plug_device +EXPORT_SYMBOL vmlinux 0xc96d7ff2 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xc97d88af dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xc98f0bfe dquot_release +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9cf5a76 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0xc9d0e56a key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0xc9ec8704 udp_table +EXPORT_SYMBOL vmlinux 0xc9f564ef simple_unlink +EXPORT_SYMBOL vmlinux 0xca0308c6 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xca33514e key_validate +EXPORT_SYMBOL vmlinux 0xca3f5ce4 dma_supported +EXPORT_SYMBOL vmlinux 0xca45a11c poll_freewait +EXPORT_SYMBOL vmlinux 0xca4d023f tty_port_close_start +EXPORT_SYMBOL vmlinux 0xca513e75 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0xca590228 search_binary_handler +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca653ddf seq_read +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xca923e2c journal_extend +EXPORT_SYMBOL vmlinux 0xca99c79f kern_path +EXPORT_SYMBOL vmlinux 0xcaa3c6aa simple_lookup +EXPORT_SYMBOL vmlinux 0xcac589e0 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xcae8523f tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xcaf24253 inode_init_once +EXPORT_SYMBOL vmlinux 0xcb284aac xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xcb4f6cc0 __page_symlink +EXPORT_SYMBOL vmlinux 0xcb5ca75b sk_wait_data +EXPORT_SYMBOL vmlinux 0xcb625b1f pci_disable_device +EXPORT_SYMBOL vmlinux 0xcb67d850 serio_open +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcb80a6a2 simple_rename +EXPORT_SYMBOL vmlinux 0xcbb5fc7d rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xcbb9d7db groups_free +EXPORT_SYMBOL vmlinux 0xcbbf8b77 path_get +EXPORT_SYMBOL vmlinux 0xcbdfb2a4 tcp_ioctl +EXPORT_SYMBOL vmlinux 0xcbec37aa set_pages_nx +EXPORT_SYMBOL vmlinux 0xcbeedf57 pci_iomap +EXPORT_SYMBOL vmlinux 0xcc0499dd dquot_transfer +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc193922 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc305800 setup_arg_pages +EXPORT_SYMBOL vmlinux 0xcc34fa84 agp_bind_memory +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc3975d2 bio_clone +EXPORT_SYMBOL vmlinux 0xcc3f176f per_cpu__x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51ee50 dma_spin_lock +EXPORT_SYMBOL vmlinux 0xcc52d4e8 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0xcc66abf3 agp_enable +EXPORT_SYMBOL vmlinux 0xcc753d90 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8b584d sk_alloc +EXPORT_SYMBOL vmlinux 0xcc9b3c59 dquot_free_inode +EXPORT_SYMBOL vmlinux 0xcca82a2e slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0xccbf7798 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xccc9f935 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0xccd596fa agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0xccd9a252 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0xcd3acb2f input_allocate_device +EXPORT_SYMBOL vmlinux 0xcd45fc24 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xcd639a63 fput +EXPORT_SYMBOL vmlinux 0xcddeb301 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xcdf2ffd2 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xce00c3e4 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xce1951a9 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce4297f7 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xce43a3c4 phy_connect +EXPORT_SYMBOL vmlinux 0xce4428cb mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce7994d5 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xcea5997b rtnl_notify +EXPORT_SYMBOL vmlinux 0xced89a16 file_update_time +EXPORT_SYMBOL vmlinux 0xcee0eed4 __sk_dst_check +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf37be5e filemap_flush +EXPORT_SYMBOL vmlinux 0xcf3eced4 pci_request_region +EXPORT_SYMBOL vmlinux 0xcf40b308 d_genocide +EXPORT_SYMBOL vmlinux 0xcf4c8eb5 mdiobus_register +EXPORT_SYMBOL vmlinux 0xcf66b3b1 __invalidate_device +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf79d40e copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xcfac2a0a icmp_send +EXPORT_SYMBOL vmlinux 0xcfadd723 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd00de69d __pci_register_driver +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd03636df blk_complete_request +EXPORT_SYMBOL vmlinux 0xd060b985 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xd07adf6e netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0992cfb km_policy_notify +EXPORT_SYMBOL vmlinux 0xd0aae5e2 dcache_dir_close +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL vmlinux 0xd12823f1 sock_wmalloc +EXPORT_SYMBOL vmlinux 0xd13e3830 destroy_EII_client +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd1763eee unlock_page +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd19bb294 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0xd19dbd92 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xd1b043a1 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xd1c98040 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0xd1f1a146 md_write_start +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd1f7e7a6 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xd1f91bcd dev_base_lock +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd25ff902 blk_register_region +EXPORT_SYMBOL vmlinux 0xd267d42c down_killable +EXPORT_SYMBOL vmlinux 0xd287bccd request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a2dcec vfs_read +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2ab4660 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xd2cd5859 elv_queue_empty +EXPORT_SYMBOL vmlinux 0xd2cf35d4 llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0xd30d1275 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0xd3141b80 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xd31c6703 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xd31d3a10 genphy_read_status +EXPORT_SYMBOL vmlinux 0xd33a3558 netif_napi_del +EXPORT_SYMBOL vmlinux 0xd34f0c62 gen_pool_create +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd399a098 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xd3a415a3 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0xd3a5f496 fb_class +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3b1d45d agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0xd3bbf1f6 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xd3c1f125 pci_bus_type +EXPORT_SYMBOL vmlinux 0xd3ca29e1 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xd3cca2b5 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xd3e97dbb mpage_writepages +EXPORT_SYMBOL vmlinux 0xd3f74cf1 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd4012ba0 lookup_one_len +EXPORT_SYMBOL vmlinux 0xd4056715 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0xd42b7232 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xd442180d dentry_open +EXPORT_SYMBOL vmlinux 0xd44d8473 pci_iounmap +EXPORT_SYMBOL vmlinux 0xd45ca134 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xd4a2aac0 fb_set_cmap +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd5241268 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd5484e45 vmtruncate +EXPORT_SYMBOL vmlinux 0xd556d891 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xd5739686 dquot_claim_space +EXPORT_SYMBOL vmlinux 0xd57c28f3 set_create_files_as +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5ab4b3c i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd5d4c7f3 mark_info_dirty +EXPORT_SYMBOL vmlinux 0xd5e904bc mb_cache_create +EXPORT_SYMBOL vmlinux 0xd60ce8ac scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0xd60cf763 mmc_remove_host +EXPORT_SYMBOL vmlinux 0xd60d7af4 ida_remove +EXPORT_SYMBOL vmlinux 0xd612a413 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xd6240a9b pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xd62bc363 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd68d07ad skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b03483 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f2832d napi_frags_finish +EXPORT_SYMBOL vmlinux 0xd6f7a26e tcp_poll +EXPORT_SYMBOL vmlinux 0xd74e5021 registered_fb +EXPORT_SYMBOL vmlinux 0xd76b9a5a pcim_iomap +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd77dec59 mmc_free_host +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a6fafa panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd7b8ea3a unregister_netdevice +EXPORT_SYMBOL vmlinux 0xd7d06220 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7ff8394 keyring_clear +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd851af78 up_write +EXPORT_SYMBOL vmlinux 0xd86f30ac dquot_scan_active +EXPORT_SYMBOL vmlinux 0xd87f28d3 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xd882300d tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xd88be65d clocksource_register +EXPORT_SYMBOL vmlinux 0xd89334d6 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0xd89c5d8f udp_proc_unregister +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a8343d dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xd8b25230 sock_map_fd +EXPORT_SYMBOL vmlinux 0xd8b55f8c dm_io_client_create +EXPORT_SYMBOL vmlinux 0xd8b89a0b thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0xd8bcbd0c delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0xd8c0daf9 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xd8d2863e input_unregister_device +EXPORT_SYMBOL vmlinux 0xd8dc42e6 sk_stream_error +EXPORT_SYMBOL vmlinux 0xd8e20085 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8e7b297 blk_start_queue +EXPORT_SYMBOL vmlinux 0xd8f23b5e brioctl_set +EXPORT_SYMBOL vmlinux 0xd8fda936 __elv_add_request +EXPORT_SYMBOL vmlinux 0xd8ffff21 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd917c158 per_cpu__node_number +EXPORT_SYMBOL vmlinux 0xd91a6044 register_8022_client +EXPORT_SYMBOL vmlinux 0xd92e3d96 set_irq_chip +EXPORT_SYMBOL vmlinux 0xd966d3b0 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xd968de5e wake_up_process +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd986cd7f agp_collect_device_status +EXPORT_SYMBOL vmlinux 0xd9a47484 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xd9b5f84a block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xd9c6441e revalidate_disk +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3e95de set_pages_array_uc +EXPORT_SYMBOL vmlinux 0xda4292b1 write_inode_now +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda5708c1 dquot_commit_info +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda928914 nmi_watchdog +EXPORT_SYMBOL vmlinux 0xdab50a1b swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0xdaf0908b skb_queue_head +EXPORT_SYMBOL vmlinux 0xdaf5dc1b dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xdb14249e notify_change +EXPORT_SYMBOL vmlinux 0xdb3807b3 elv_rb_add +EXPORT_SYMBOL vmlinux 0xdb4b2878 thaw_process +EXPORT_SYMBOL vmlinux 0xdb92467e bio_split +EXPORT_SYMBOL vmlinux 0xdb94240a jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xdba3acb4 ndisc_send_skb +EXPORT_SYMBOL vmlinux 0xdbb5ad5c node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbe139af bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xdbe7e490 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xdbea560d sg_miter_next +EXPORT_SYMBOL vmlinux 0xdbeacb78 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc07a4c9 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xdc0924f7 ip_fragment +EXPORT_SYMBOL vmlinux 0xdc11f761 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc446a5e pid_task +EXPORT_SYMBOL vmlinux 0xdc4be7ee tty_set_operations +EXPORT_SYMBOL vmlinux 0xdc5a813e acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0xdc873a70 screen_info +EXPORT_SYMBOL vmlinux 0xdc90f2ab pci_find_device +EXPORT_SYMBOL vmlinux 0xdc9bc234 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb67ad0 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0xdccadd21 skb_pad +EXPORT_SYMBOL vmlinux 0xdcd03ec1 secpath_dup +EXPORT_SYMBOL vmlinux 0xdce30c92 skb_seq_read +EXPORT_SYMBOL vmlinux 0xdd5bea18 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xdd6e1e33 dquot_alloc +EXPORT_SYMBOL vmlinux 0xdd91d4c0 serio_interrupt +EXPORT_SYMBOL vmlinux 0xdd924b58 dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0xdd961b28 dget_locked +EXPORT_SYMBOL vmlinux 0xdd9cf09f unregister_md_personality +EXPORT_SYMBOL vmlinux 0xddb1e6f1 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xddb92166 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xddc204f4 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xddd8e42a pskb_expand_head +EXPORT_SYMBOL vmlinux 0xde0bdcff memset +EXPORT_SYMBOL vmlinux 0xde16b546 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xde1814f9 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xde2a2461 acpi_device_hid +EXPORT_SYMBOL vmlinux 0xde2d80fa node_data +EXPORT_SYMBOL vmlinux 0xde4ab25f tcp_splice_read +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xde975513 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0xde9aa12f __inet6_hash +EXPORT_SYMBOL vmlinux 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0xdeb3261b md_write_end +EXPORT_SYMBOL vmlinux 0xdef05880 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xdef7958b vga_client_register +EXPORT_SYMBOL vmlinux 0xdf007423 register_sysrq_key +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf502221 bio_kmalloc +EXPORT_SYMBOL vmlinux 0xdf563aaf register_sysctl_table +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf7570d0 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfb7bada acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfdff17b seq_putc +EXPORT_SYMBOL vmlinux 0xe0296ab9 journal_flush +EXPORT_SYMBOL vmlinux 0xe0478d7d vm_map_ram +EXPORT_SYMBOL vmlinux 0xe04e947b dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0xe061ed2f neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xe06aeff1 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe096a17b scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0d403d6 generic_readlink +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe140b795 cdev_index +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe19a16a5 blk_free_tags +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1ae0f20 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xe1dd65d8 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xe1e910a2 skb_trim +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe23d7acb up_read +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe2700259 phy_connect_direct +EXPORT_SYMBOL vmlinux 0xe2933e02 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xe29b04e9 acpi_set_firmware_waking_vector64 +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e894a6 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xe2f22225 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xe317f064 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xe353feb8 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xe35d11da sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3b1c94c agp_bridge +EXPORT_SYMBOL vmlinux 0xe3bb2745 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0xe3d15315 tcp_connect +EXPORT_SYMBOL vmlinux 0xe3e9981d generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe43e135e scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xe456bd3a complete +EXPORT_SYMBOL vmlinux 0xe47f2482 get_empty_filp +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4870354 _read_trylock +EXPORT_SYMBOL vmlinux 0xe49b24b7 add_disk +EXPORT_SYMBOL vmlinux 0xe4a46fcc pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0xe4a58ba4 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0xe4add98e open_exec +EXPORT_SYMBOL vmlinux 0xe4b24b8c __next_cpu +EXPORT_SYMBOL vmlinux 0xe4c1df3e _read_lock_bh +EXPORT_SYMBOL vmlinux 0xe4c46679 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0xe4c5380d call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xe4cf9a7e pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xe4e4b282 generic_unplug_device +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe508c183 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0xe50ec0e9 rt6_lookup +EXPORT_SYMBOL vmlinux 0xe512b13d tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe52947e7 __phys_addr +EXPORT_SYMBOL vmlinux 0xe52ef77d __nla_reserve +EXPORT_SYMBOL vmlinux 0xe575cffc tty_name +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5e9dbef nf_log_register +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5ee6d82 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xe63c3a61 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xe63d8ca3 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xe64e568c blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xe65062f0 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0xe68dceea __f_setown +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6b9e10a bio_phys_segments +EXPORT_SYMBOL vmlinux 0xe6c46616 netlink_dump_start +EXPORT_SYMBOL vmlinux 0xe6d47709 journal_forget +EXPORT_SYMBOL vmlinux 0xe6e9ee6c scsi_unregister +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe72d9305 kill_pid +EXPORT_SYMBOL vmlinux 0xe786168c rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xe7917b84 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xe7a0a8f6 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xe7baeb1d acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xe7c8fac2 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d307aa block_write_full_page +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7e2d6c9 phy_device_register +EXPORT_SYMBOL vmlinux 0xe7f02625 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0xe7f79e93 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xe7fc8123 block_prepare_write +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe8116e08 __kmalloc_node +EXPORT_SYMBOL vmlinux 0xe826d58f alloc_pages_current +EXPORT_SYMBOL vmlinux 0xe85060c1 kobject_del +EXPORT_SYMBOL vmlinux 0xe85e8bc1 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe892d71e scsi_put_command +EXPORT_SYMBOL vmlinux 0xe899d482 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL vmlinux 0xe8a67736 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xe8c08c61 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe94456df i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xe949cadf __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xe9683539 dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe9ec1209 make_EII_client +EXPORT_SYMBOL vmlinux 0xea042cf4 cfb_imageblit +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea241dd4 skb_insert +EXPORT_SYMBOL vmlinux 0xea3b748b dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0xea6dd50e journal_set_features +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xea9de9c4 scsi_target_resume +EXPORT_SYMBOL vmlinux 0xeab8449e dev_get_flags +EXPORT_SYMBOL vmlinux 0xeac094b1 blk_get_request +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeaf63b7b tty_shutdown +EXPORT_SYMBOL vmlinux 0xeb1fabf6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xeb2b3d98 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xeb37694e bd_set_size +EXPORT_SYMBOL vmlinux 0xeb446a11 ps2_init +EXPORT_SYMBOL vmlinux 0xeb64cf26 journal_ack_err +EXPORT_SYMBOL vmlinux 0xeb833b42 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeb9bdf04 pci_release_regions +EXPORT_SYMBOL vmlinux 0xebb053d3 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xebb394c2 kick_iocb +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebc8f256 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xec088802 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xec560e99 __ps2_command +EXPORT_SYMBOL vmlinux 0xec62b635 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xecab6802 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xecd4f024 inet6_bind +EXPORT_SYMBOL vmlinux 0xecde1418 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0xecded3fb page_symlink +EXPORT_SYMBOL vmlinux 0xed0aad6d tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xed3067ea d_alloc_root +EXPORT_SYMBOL vmlinux 0xed895b3f update_region +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xeda4c0b9 bio_integrity_free +EXPORT_SYMBOL vmlinux 0xedb40e38 input_register_handle +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedf9fcaf module_layout +EXPORT_SYMBOL vmlinux 0xedfca8ee tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0xedfd0e30 kernel_getsockname +EXPORT_SYMBOL vmlinux 0xee141733 i2c_use_client +EXPORT_SYMBOL vmlinux 0xee148d91 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3f9b25 sock_no_getname +EXPORT_SYMBOL vmlinux 0xee45e535 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xee7d1f28 audit_log_end +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee90da00 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeae3dca xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0xeef02ed7 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xef1090b3 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xef3da69d acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0xef458902 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef554890 eth_mac_addr +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef78cd82 unlock_rename +EXPORT_SYMBOL vmlinux 0xef99bc9d scsi_host_get +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xef9e55cb udp_ioctl +EXPORT_SYMBOL vmlinux 0xefaafb7e lro_receive_frags +EXPORT_SYMBOL vmlinux 0xefb96bcc __free_pages +EXPORT_SYMBOL vmlinux 0xefd522aa scsi_register +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xeff16439 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf0408743 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xf04ee821 ip_setsockopt +EXPORT_SYMBOL vmlinux 0xf062fe50 qdisc_list_del +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf06c814f fget +EXPORT_SYMBOL vmlinux 0xf0727bdc xfrm_init_state +EXPORT_SYMBOL vmlinux 0xf0afcb58 vfs_symlink +EXPORT_SYMBOL vmlinux 0xf0b5518e mdiobus_scan +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf106ecb3 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xf106f917 read_cache_page_async +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf10f165a simple_dir_operations +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf116d4b5 copy_in_user +EXPORT_SYMBOL vmlinux 0xf12621f7 sget +EXPORT_SYMBOL vmlinux 0xf12dd110 pci_clear_master +EXPORT_SYMBOL vmlinux 0xf13517ce __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf1835960 __mutex_init +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf19665d1 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xf1a000e6 default_llseek +EXPORT_SYMBOL vmlinux 0xf1b7e360 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xf1c5983d dev_gro_receive +EXPORT_SYMBOL vmlinux 0xf1d64416 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1fd1807 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf217020f submit_bh +EXPORT_SYMBOL vmlinux 0xf221b71e free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xf28a3304 phy_attach +EXPORT_SYMBOL vmlinux 0xf28dbcd8 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0xf2904fe2 tcp_proc_register +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2b2b8fd inet_release +EXPORT_SYMBOL vmlinux 0xf2dd9c3e tty_free_termios +EXPORT_SYMBOL vmlinux 0xf30636dd mark_page_accessed +EXPORT_SYMBOL vmlinux 0xf309ea05 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf32a9426 register_console +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf34d9cf1 __lock_page +EXPORT_SYMBOL vmlinux 0xf370d2d6 tcp_sendpage +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf4240c37 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4502fc5 take_over_console +EXPORT_SYMBOL vmlinux 0xf4528073 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0xf459b9cc balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xf4607155 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0xf47dd620 posix_acl_permission +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4c3ebbc pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xf4eae356 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xf4eeea77 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf501e883 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xf506874e generic_read_dir +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf527e171 sock_wfree +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf5be2f78 put_page +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f5b299 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xf61f3fb5 i2c_clients_command +EXPORT_SYMBOL vmlinux 0xf6223687 write_one_page +EXPORT_SYMBOL vmlinux 0xf6642bf1 simple_getattr +EXPORT_SYMBOL vmlinux 0xf666cbb3 __memcpy_fromio +EXPORT_SYMBOL vmlinux 0xf67a6595 i2c_del_driver +EXPORT_SYMBOL vmlinux 0xf684e636 unregister_8022_client +EXPORT_SYMBOL vmlinux 0xf6996858 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6f6213d xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xf6fb2b9c k8_northbridges +EXPORT_SYMBOL vmlinux 0xf73150cf ps2_begin_command +EXPORT_SYMBOL vmlinux 0xf737fbf5 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xf749534a gen_pool_free +EXPORT_SYMBOL vmlinux 0xf74a63b5 x86_mce_decode_callback +EXPORT_SYMBOL vmlinux 0xf7709a83 ip_getsockopt +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79a0f5e do_SAK +EXPORT_SYMBOL vmlinux 0xf79bb9cf nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xf7ca8d4d bio_alloc +EXPORT_SYMBOL vmlinux 0xf7e142fe cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xf7e26597 __pagevec_release +EXPORT_SYMBOL vmlinux 0xf7fcb4b1 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0xf7fdd61a napi_get_frags +EXPORT_SYMBOL vmlinux 0xf8066cdf read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0xf80c4f20 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf820e5d2 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xf829ffc8 dst_destroy +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf8341911 seq_puts +EXPORT_SYMBOL vmlinux 0xf85a848d kill_block_super +EXPORT_SYMBOL vmlinux 0xf867864a simple_transaction_set +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8ae57f8 security_path_link +EXPORT_SYMBOL vmlinux 0xf8af2d86 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xf8b30e93 mempool_create +EXPORT_SYMBOL vmlinux 0xf8cf9ee5 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xf98872bd ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0xf9899664 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xf996ad06 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b50079 kobject_put +EXPORT_SYMBOL vmlinux 0xf9c99659 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0xf9cb8962 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xf9f7e6f1 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xfa0564fc __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfa18cedc udp_poll +EXPORT_SYMBOL vmlinux 0xfa1d545c xfrm_state_update +EXPORT_SYMBOL vmlinux 0xfa299045 scsi_get_command +EXPORT_SYMBOL vmlinux 0xfa4475e1 sock_no_listen +EXPORT_SYMBOL vmlinux 0xfa544966 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xfa77572f get_write_access +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfaca791b seq_escape +EXPORT_SYMBOL vmlinux 0xfade665f pnp_device_attach +EXPORT_SYMBOL vmlinux 0xfae7bc57 dev_open +EXPORT_SYMBOL vmlinux 0xfaf6b235 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb2fad12 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xfb4eebce jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xfb65dd39 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfb6902b3 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb89aac4 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0xfba0c2e0 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xfbad7828 phy_register_fixup +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc04fc4e sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xfc20295d ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xfc27afd9 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xfc2da239 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc5b0b3c blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xfc6256b9 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfc6e3b78 tcp_close +EXPORT_SYMBOL vmlinux 0xfc9ec0b8 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc4d4e4 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcefd18a mem_section +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd13d929 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xfd1e47b4 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0xfd24ae6e pci_release_region +EXPORT_SYMBOL vmlinux 0xfd3486a1 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0xfd6f4850 native_wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdad0f00 dev_add_pack +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdbd38c4 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xfdceccc3 acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0xfdd0da4f mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xfde3ae39 dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0xfdf0f504 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe047ce6 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xfe195de8 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xfe1a6162 dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfe24c0e8 input_unregister_handler +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe2b8b22 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe61a139 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xfe69bffc set_groups +EXPORT_SYMBOL vmlinux 0xfe6e88f8 elevator_init +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe872dfc tty_vhangup +EXPORT_SYMBOL vmlinux 0xfe96c4ce pnp_get_resource +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfede01c7 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0xfee9bc01 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xfeeeb18b dev_get_by_flags +EXPORT_SYMBOL vmlinux 0xfef347d3 blk_end_request_all +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff52c232 d_invalidate +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6b2c2f generic_setxattr +EXPORT_SYMBOL vmlinux 0xff708fd3 mempool_destroy +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffb65794 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xffbc59b1 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xffc7c184 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xffcaf79b inet_select_addr +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xfffb8adb pci_set_dma_seg_boundary +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0x16836e04 speedstep_detect_processor +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0x2af90271 speedstep_get_frequency +EXPORT_SYMBOL_GPL arch/x86/kernel/cpu/cpufreq/speedstep-lib 0xd494ee54 speedstep_get_freqs +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x058df8ed kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0920ad34 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094ac8f4 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0e64d5bd kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12d1b23b kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x16a7d5ec kvm_load_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x17c788a6 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a9df35f __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e4580bb kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2322e039 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x24f10771 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x29752d3e __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x299acd33 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2fda1070 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317c055d kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x327c0c1b emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x37d4ed45 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b7706d2 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x45cb5ac2 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x47afdcbd kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4a7cbe69 is_error_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4ac397c9 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4b894efa kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4e71d1e7 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x500ff23a kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x50481980 kvm_put_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x52775e0d kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x560813af kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5bb06198 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x605cbffb kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x621387f6 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x69897c8f kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6b4b6182 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6bc038e2 kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6e393887 kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x72c4a892 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x73ef6353 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7a2ba468 fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7d1b650d kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7eda06fc gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x85aee1e8 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x86d07efe kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e7f9b47 segment_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x984bbc70 is_error_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa0f3ae39 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa361bc65 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa7dd29c7 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaa2bca42 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaab13875 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaabf53a3 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xae2c2f8e kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb2a5b560 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb46438bd kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb548b6d8 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd377dc9 kvm_mmu_set_nonpresent_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd86163a kvm_handle_fault_on_reboot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd94103b kvm_mmu_set_base_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc3e442ab kvm_emulate_pio_string +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc6f69404 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb2bb2b2 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb34a4a2 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcc3917ff gfn_to_memslot_unaliased +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xce400988 emulator_write_emulated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcea5bf57 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcecafb6f kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd296def9 kvm_is_error_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd3c0a6da __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdd74592d kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdead7e81 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe2ae5098 kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe5d53aee kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xeacb2de1 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xec785360 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xed8c9068 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xef28082d kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf4414029 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf46d8388 kvm_emulate_pio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf5827c82 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xfecc267b kvm_report_emulation_failure +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xff0cee2c crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x750f7cf8 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xdbf72ec4 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xde55d148 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x7953e14e async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xa42b5b15 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x2fd504b2 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x7ad2cc39 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x9f9f77d9 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xb3523910 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xbccb5ab6 async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xd3fca047 async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x198d3243 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x1f401cc2 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x21bd0be3 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x874b5529 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x999bff59 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xbc5288b4 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xcb401a89 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x68da9166 twofish_setkey +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x0fbf8d51 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x459df113 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x5f1f8844 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb0d0734e btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xd93a743d btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xf3736631 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x010d8d61 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x032b3930 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x04ef3709 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x22a511c8 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x295c6aa9 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x29bf60ed tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2c46ea7c tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x318f155f tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x381f95a6 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x42c965be tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x44e8667b tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x47d51449 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x486a7342 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4909ef81 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4a6344fa tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4b44a7cd tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x51f23d70 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6b959e8d tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6fd776db tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x966985f5 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc0fe5baa tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd68a1b2d tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf6a9f938 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x1fbd89e2 tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0xfc968257 tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/dca/dca 0x0ccb465b dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2ebb035f unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x6a72ced2 dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0xc82b32d0 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xd33880dd dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0xddbf4f00 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xe616c173 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x70a6277a amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x018e722c edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x02c8c137 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x062f92f0 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0a33a3f6 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0ac1bc48 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x114b6f0d edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x183644ed edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x32d66211 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x36f8e0e6 edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5c542826 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6f11f8e2 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6fcb3ad8 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8845f0c6 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8ce600c0 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x92a249ef edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa15a3134 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa2b33490 edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa5c72b32 edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa8a9c2db edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xae02f77d edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb569a053 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc47e93c3 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc6b164f3 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc8341223 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0f0ba55e ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1823885a amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x4b01887d pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x7509830f to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x955c1f76 amd_decode_nb_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb98537cb rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xc2e765d2 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xd0f094a0 ext_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xe6ff7e0c ll_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xf8dec080 tt_msgs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xb8b4e3bf drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xc1f16166 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x10a2c906 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1c9248d6 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2cbd0026 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x30f8b991 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3752dd1e hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x551c6f5e hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6acc1bb9 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6d4f361c hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7b85aad7 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x804bc0e6 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8cb196ad hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8f2cae09 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x907e49a8 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x95abc0d9 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x97641ad5 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa3453429 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa70edf2c hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xac466302 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbaadf419 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xcb54079b hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd3d34f65 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd5f92d80 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdc958c79 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xeba745fb hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xec6c0fb6 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x2740ae8f usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xc0bc66ce hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xcd3286d9 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x136b2942 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xa1e28f6a lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xc5212f3c lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xcae0db4a lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xd198c865 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x75a37706 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x173ac276 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x95a2e683 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/infiniband/hw/ipath/ib_ipath 0x1514b2b2 ipath_debug +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xbbfd5c83 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0df375e3 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x19f60f57 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x227185ef wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x3fcf98b5 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x56fdd785 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x606ee97b wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x72cc0625 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7a713de1 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd9d533cd wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe288ade2 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xec7ea7b9 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf365982b wm9713_codec +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2c0979ce gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x3746ea13 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x392f3caa gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e5b4265 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x63184547 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x65c377a0 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6838b74e gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6f942acc gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x79e6ad13 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x85347e7e gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9c7e7954 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb57f2c48 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc9a8c3ec gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe5409f5c gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xf6b8faee gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xff2ddd5c gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x87400e7f led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xe1b7c35e led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xeb1d3441 led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xfd2270df led_classdev_resume +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x300cebfd ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcd407bb1 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdb76f88c ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x0a0d620b saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x14a8f5e3 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x3170c6fa saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x367fb512 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x4b6e7437 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5d5625f2 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x78c0fb58 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xaa7fcf78 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb0926d38 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd94e8821 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe2f9d6bb saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x02b06381 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4899c680 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4e8a6e49 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x527da9ea saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x5b8a681d saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x7391f800 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xaaaa34cf saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xdfd10451 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x4e105e31 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x9724e547 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x6c9b01ac tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xc6f5ed0d tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xeaafb738 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x1dcacee8 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x83c4b941 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x879b8c02 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x62f56f80 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xb98c47eb tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0xddd9659b simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x03871b6f sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1cb7aab4 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x27647f47 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4c499235 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5c79e409 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x611d88af smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x64d2b32f smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x740e6706 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x799d296f smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8993dec3 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xa27c77f2 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb515462f smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xce744b65 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd0d33d7b smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd35a04b2 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe0b74e9e smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe424a9db sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xea49a02c sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xee715cb4 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x06cce735 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x69f68c72 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xc3ed2aa6 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xd893a733 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xdc74ab7f ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe000b2ca ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe318ca04 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x118187b1 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x3acda7d5 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x50e6ec40 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x935a2418 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9e2629cd cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xa9f76b04 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xbeb07272 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xc76d9dc3 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xcb16a9bd cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xec67ab4e cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xecf1335d cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0xc0ab27a7 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x45238323 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x5227aec1 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x53563afd em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x8c5418b1 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xb7e5b4ae em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xf5bc1f16 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x0ba6c02d saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x52175c54 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x5dbca04c saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x7f7ebd0e saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xc0379827 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x30a01d5b v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x33553a07 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x625a40b7 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x732f4e17 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0xba7f342b v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x2d22e054 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x40f3af06 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x854b312a v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xe9899e3a v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x049227c9 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x07a11ad4 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1a4f0fbd __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1e3b7ba6 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x21e365b4 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x265822ec videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2ce9b1b8 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2e0a437d videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x30c32e54 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3f82194a videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x447cc7f4 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4e2e9ab7 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x5f21bdb6 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74723895 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7a5576b7 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x801f61e5 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x83ec5a12 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9018cee6 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa247f61c videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xada441f9 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb258523c videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc5e9b073 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdc72c1a1 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe0c80a5e videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xed4cb87c videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0b972e18 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0f36ad49 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x17d20dcb videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x3b18470f videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x4829eea7 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x537a45e9 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5931aaff videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5a16d621 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x933dfb43 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc7e6dd1e videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe75b76c8 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf04da62b videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf9639757 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x173f1d0e videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x23cc345d videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xfeb6a329 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x058a458c v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x55045888 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x5fe2a802 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x64e3e33c v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xbdc157e7 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xc8cf5420 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0d371681 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x158e9cbc i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x17c084c3 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x1d5bfe44 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x20220e36 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x497f0e67 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x5535d7f2 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc755b261 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x0019c9a9 mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x41e442b9 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5259475f mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x55afd13d mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x86cef259 mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xc532891c mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xdda368ba mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x79b4c656 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe81e333b pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x05d8c519 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x206206e7 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x2a228ac9 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x379ecd4d pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x3cbeee49 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4a6b2a8d pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4ce858fc pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5fe0e94f pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7e57cad0 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa8ffa26b pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe5b7e0eb pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x1cdb7e57 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x23722e5f pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x321001a0 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x41b69d0d pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x9a997415 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x01a42ef6 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x2bfb0971 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x3c93a11c sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x4eb83e53 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xc0c1d7d2 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x373feb27 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3e6fed95 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x51c77fe5 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6b96ab5e wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x701814d0 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x83486d9a wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x96786498 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa31488ad wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc5c4d0c0 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd8f55a60 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd9f49a00 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xefb0e7c6 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf6eadeea wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x15f2c4f0 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x38aecdc4 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x3c21dd82 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x46c4e4fc wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x512dfb75 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x576992fb wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x578b2107 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9de1c876 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xaba18630 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc33d3039 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd3b247ce wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd5e2d6ec wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd83a0e07 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xdffd3b74 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xe81d3047 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf0cf5f29 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x40274d7a wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x57bc070a wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x6128bc5a wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x840c053b wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x040346a9 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x279a1522 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xf15d8600 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xfff1e0e6 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x03e69bb3 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0f68ded9 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x1f2f1489 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x29cda097 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x5e787db4 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x788c9b53 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xb6143123 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x0656d16d sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xa95ff4c5 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xb047a98e sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc1b36fb5 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc3281bcb sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc997f9fb sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x3def07fa cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x4285ef0c cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x6b9f14af cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xbbb011fd cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xdd5c02f7 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x25538bba cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x3b4fe4ff cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x667b1c40 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xcabbdf4c DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x7dfdcb61 DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x2478d4b9 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0f4f8b4a mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1a024833 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1f218d2c mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x56039660 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6301c2f3 parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6a7bfa99 get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x74019900 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7494e1ad register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x75fd062c mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7ec9c3a2 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x86c78726 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa6bf273e add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc8e4b325 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xcf0be395 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdc490e08 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe10d132a get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xc10c903d register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xf80e5b3c add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfdb15ded del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfdbf87c0 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x3abb7cbc nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x5071b295 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x95d1d788 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc565ff6b nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe7a8a214 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x1d5034ab onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x1d7e91f4 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x18511383 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5e6fe872 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9df87b63 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9f41cbcb ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa3af0d8d ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xab26e3fe ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc2a7181e ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc445be67 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc70cfe2e ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdb7ec8c5 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf498f8fb ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf5f3940a ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x19b6140e free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1ffc1404 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x362ec24f alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x65aa9266 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa13f028a open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb79b2acf can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xbbda8899 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc9d7cfe0 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xda381587 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xfd25b00d can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x1f97d7b1 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x89d2f99a free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdb1cb531 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xee56de15 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0cf252a6 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x116b3a23 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1dfb5f8a mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x202c8e42 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x324748db mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3261e7c6 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3606fb0e mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3d3d75a8 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x41c11aa1 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4476fa35 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x46c3dad5 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x554484a4 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x588da9d7 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x58b3ffdc mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5ac5968a mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5b4782b9 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5fb4e686 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x62f7b193 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6421bb2e mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6676cff8 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6a214c51 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6c1168c4 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6cfdce89 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6fe3cefc mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x70314502 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x73458f8e mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x77d627f5 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x828bb4ee mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x895901c8 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8d0b95a2 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x924a0b12 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x92d65c5f mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x955fe6de mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa4bf5f9f mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa6782273 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa8c9df9a mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab951086 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab97a960 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb61567b6 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb8b24bb3 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbb52c0bd mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc18be36c mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc74e7656 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd6bd5b23 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdd857da0 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe16020e5 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe6dd5d46 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe9631c37 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe9b90e10 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf209c613 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf351f579 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf452db79 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf7ba294d mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x69caf166 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x76a738cb usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4319128e rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x43219e15 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4f784702 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x68168b2a rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x6cccadbb generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xdad3d042 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0b3eefb1 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0e642864 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x21297c73 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x33246ef3 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3fd815d3 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x40369b82 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x51023ef7 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6f0d4f0e usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ce322b8 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ffccee1 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x97f1edb3 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbf4446c2 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc30f733b usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc5286533 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc54241f8 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd209f6c5 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd84069ba usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdc3e72d7 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdf777212 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe0697dfe usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xefaf7688 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf151a1ed usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfd0b47be usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfed518b5 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00ea46a0 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x012ee05c i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x069ce730 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x14901273 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2f3c4704 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x56cc98ba i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5a12b5fa i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x66426fd2 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8e87b2bf i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xaf37086d i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb807d7f8 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd18a99ce i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf7aa494e i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xfddd043e libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x06929b39 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3ba8e2c8 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5240782d __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5565f421 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x67f16482 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x695dca30 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6e2e97a4 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7d9285ee lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa411cfc0 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb17c0763 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb5777122 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb8b78d19 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xeaecb2f5 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf9367f06 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfa8ec553 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x0942d048 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x16dc8c2c lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x240a386b lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3edbc5e0 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6d2093db lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x7e407da6 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd126a35c lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfa432413 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x9183b85d if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xa8e9b25c if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x137d1d38 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x1e21a52c p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x402527dd p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7218ee46 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9056f924 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xbc2572b1 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xd10d9de7 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf3b514e7 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf7d1b77b p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x24ae589b rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x341a2f27 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x386d2312 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x402ec92c rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x56b7a8ca rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f5b6b82 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f6307a1 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6d5811ba rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x70f54e43 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7b94e3ad rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7d0ff2b6 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x864aabc8 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8815b769 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8f8440bb rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x93f3c8ca rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9ea29050 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa363a063 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb4a05b7c rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb703671b rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb883c985 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbcc1f761 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xce06b685 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf4dfe773 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf9790082 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x076a43c6 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x93002d81 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x941c5e13 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xa44eb8ed rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbcf8ae24 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbd57edc8 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xcfc5934e rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xddd70c73 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf6968bd5 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x091265cf rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x170c0a4d rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1cbe6471 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2a4f26af rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x34a38b0e rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3dcae9c9 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x45d16f5d rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5673fc9d rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x61fef3a8 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x772624b8 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x8ec3de52 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x93fe16f1 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9a582d9d rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9c61edb8 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf4dc2279 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xfcadb988 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x34423a0b wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x388e707a wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x8c7b1c62 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x0f147aba acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x3a8937fb acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x2f20979f pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x871e8735 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x18981f40 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x362a69dc wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x4ce6f141 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x5bec364a wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x7dc126e5 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x846f49f8 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x6ef1f94b wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x50781c15 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00fc3290 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0233f349 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x03412f5e iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0aa6c603 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1401fa03 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x181dc7eb iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1af1d7e3 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1bbea3f2 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x218978d8 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x23581acd iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x28a732ac iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x297a4264 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x375b4981 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3e91d39d iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41ba1d14 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x43b612cf iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x49f8eadd iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4b1ea838 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x525b0f4e iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5368d3b2 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x53d90b8b iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5c3b5472 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x625e3f3f iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x65822ef6 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6b2a2212 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7304f5fc iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7620cc56 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7caf147e iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7d589794 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9ef589ad iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa1af0fa2 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa3e4d834 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb1bd31ad iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbc408d42 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcaffd20b iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcec27f25 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd11510f3 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd6be343f __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd88489af iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdf173404 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe52d4194 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfb5c72b5 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x061ceea5 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0d58789f iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1c73252b iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1f9ebee2 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x434e531c iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x52ce0316 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8af4f9c7 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x96c2fd44 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xadbbcbb8 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc77a191f iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdeca3ab8 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdf7cd71c iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe211eead iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe934c5e8 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf021d871 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xffc4253b iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0c7b07cd sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1b401d96 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1bb151d6 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x27e8a481 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2ed5350e sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x39ec8aff __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x42f521c2 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x43bd4b59 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6982959c sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7926d9ee sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9581982b sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9626c6c9 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9b308edf sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9cae671b sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa3a22082 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb33733e5 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb81337d1 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbe10279f sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xce0415c5 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd5f4b989 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe8228505 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xedf73b98 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfb504ef6 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x15728b8c srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x5de1a81a srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x7a54e574 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9a51a59c srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa3d3b197 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xf8edfa12 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x16a1f91e scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x2eb883cc scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x482d0c47 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x5f870f60 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x65e0bcaa scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x92b629bf scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9c7c19d3 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb33ffb29 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xe3475400 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x054f8b74 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0b8c61d8 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2da591ae iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2f19517a iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2f704ced iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3a41d367 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4fbdfb8b iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6c7fd4a7 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x77cc0aa2 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7a2ebbac iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7a6d1e30 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8a46a6df iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9757c497 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9ac98c4d iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb524840a iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcbd899f1 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe623bd8b iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf0a9bd57 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf2f7ec47 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf626c97d iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfa364ae2 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfc373a6b iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2bc93ecd srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x3fa7289c srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x6f206250 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb1f2506c srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf654ceb5 srp_rport_add +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x466cc29d spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4a96c561 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x655ced4a spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xc18d11a7 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xdb59fc02 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xff163e8b spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4740fc22 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4e4b42d1 comedi_free_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x656c3316 comedi_alloc_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x813c41b0 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xa940cf72 comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xb5725623 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc57fdaf4 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x86fcde20 das08_cs_boards +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xa8403a06 das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xbd5c7f77 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x10252a12 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xb2df656a labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x72d1ecfc ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x88e18c67 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x8de73efb ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xbc603c7b ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xcb918584 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xda8e3743 ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xe7bb07e7 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf63a1706 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x041a6990 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x0d030da6 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x75fe69d5 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x7a33e872 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xd0da81d3 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xe475d2e7 ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x0a1ee779 osd_WaitEventWait +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x4cc1b61c osd_WaitEventCreate +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x5432d87a osd_WaitEventSet +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x746d1786 osd_PageAlloc +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x83911c38 osd_PageFree +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0xa1b8d1ad osd_WaitEventWaitEx +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x09adb13c usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1edc7e95 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1f764eb6 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x3181fb72 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x3ba07cbe usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x5a713978 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x6521300b usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7d0df17c sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9d31817f usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9df45949 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xa8066df3 usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xbad58801 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd8adfb96 usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf41ebf29 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf99092d6 usbip_start_threads +EXPORT_SYMBOL_GPL drivers/uio/uio 0x7fbff4f2 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xaab7cd02 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0xdd75aa7e uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x2ee9b132 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x9e4c1e08 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x207b4c69 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2f5c125b usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x3479c9c1 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x462141a8 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x709019f6 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9895bc22 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb8cc7a02 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xd0f12b11 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xe39e5d35 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x036ee78a usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0ffea7b8 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2451d2b6 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3f398e35 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4372e8a3 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5469c628 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6174524e usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6eff1b0a usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x721f8d89 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x9973180f ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa3cb0960 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd47bff3d usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe3803de1 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf0a04a54 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xfbda7877 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x08e6bd13 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x13d1e0e2 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x141b526a usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1eec9a71 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2f3cbac6 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3559963a usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x41e24ec7 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4b099ac9 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x57e16579 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x58b9e99d usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x601834c0 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x62e1ffd9 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x64f887d4 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7d6101d5 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x822cebe3 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x82c64433 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x865ae128 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbfabe9fe usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc7e5d45d usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdaca1213 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe27535c5 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe29a714a usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf0046871 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x2d9bc240 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x41c8251d wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x4a6f65a6 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xe0597a4d __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xfb6f0266 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x221d73cc wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x276b4e5b wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2a4a12cc wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2e684639 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x31e8cbf0 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x38051fb8 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x498600e4 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x516ca9ea wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x59a7b691 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x8be661cd wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc395d9e0 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc56e0ad4 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc64ac49a wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xcad3b5a3 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdb4206db wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf2b2755c __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x1ec38ee5 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x4fa3fc9c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xea7f0e2a i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1d6ab147 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x3f60b0bb uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x58957fea uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x63eef89f uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x811a693d uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x8ada1319 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x9309d4a6 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xee2f6f61 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x113eb73a umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x3862039e umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xa9470df0 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb3c183b2 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xbe705fa5 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc458ba3a umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xde2af4c3 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xfd65029d umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x02e16a09 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x05f05757 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x128ae03e uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1d0f80a8 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1f5b3129 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x22dc0c80 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x235bb961 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2cb8fcbf uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3be6af41 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4445d150 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x449cac9b uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x469c5f2d uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5596a9f6 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58554226 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58eff876 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x63dce779 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x66a7fa13 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6bcd28f0 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6dd7d926 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7f1e50ca uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x85417e20 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x86182077 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x94ebdbe2 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x95e56d59 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9cbf319b uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa1603bfe uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xaa2bbc89 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb0a09251 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb29ee199 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb56d816f uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb94bcc7e uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbbb96d89 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbc96fded uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd15729f4 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf420eea1 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf89040fe uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xfa22f860 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x5408e067 whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1bd0ba38 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x26020e96 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x331f028f wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3459c71a wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3eb6bdbe wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x48264069 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4bbdbcbe wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4c56f4d5 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5ac970a3 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x63fe50a3 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x74b2cb67 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7587bd1f wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7a228099 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7fdab437 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x82ba0175 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x897398bc wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8ab0e2ed wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8c4ae332 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8d8f8b93 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa015dd8d wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xad8f92e8 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb0c77224 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbe888230 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc0283ee4 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc2a8add4 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xca1f1ff5 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xccc90bc4 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe6502840 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xefaed086 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf5e4764a wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf83de28a wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf94396b6 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x47194978 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x48896660 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x75a0d478 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x965c4ef1 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xb8daa854 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xca39db31 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xe71dbc03 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0xc7fd4933 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x6e04f31d fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x8f32f2c2 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x8ad14ae6 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xbd228acd sis_free_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x541f96d4 register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x612db4f9 unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x866e4528 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x8dd9d7f4 unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xec83e87f virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x667e4758 vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x668d2276 vring_transport_features +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x68c71d40 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/w1/wire 0x03d3d720 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x05f85617 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x1e04bf02 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x9db4ab79 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe63ddb0e w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xee7f1cce w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0xf19fb0d9 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xfbebaec5 w1_write_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x27dab7f9 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x56c22ad1 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x6b5892ed dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x4a92652e exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x6869afba exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x19df3d2d fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x1c2b51ba fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0x3949de69 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x3aa2141e fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x43ddffc9 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x4447d0b3 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x464e42d9 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x49ab924e fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0x7218317b fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x792e0021 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x7e05a007 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x86da8301 fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0x9e74a0e9 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0xbad6ef33 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xbc9fde18 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xbfa8b22c fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xdf23526d fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0xe6c15431 fat_sync_inode +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x01620192 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x2ca0f297 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x48e91760 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xd82a4457 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xfed63651 nlmclnt_init +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x0376174d nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x370e8d50 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x08dac197 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x10b5e79f o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x472fe45a o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x694f2db0 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x79e6316d o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xb8531f37 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xeee10928 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x15c8841d dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x30b01492 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3f8cc354 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x76a87989 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xb74e64cd dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xc3921f31 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x43348859 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x905d3da3 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x994a207f ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x15aa1401 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x4cc4b7b7 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0xd5435b12 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xdf5d40f3 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xfb1fe553 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0xfef48530 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/stp 0x0aa38868 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xc2f2bdb1 stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0x72abf9eb ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0xcf343ff9 bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x04e421e2 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x105ba97a dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x16a94e67 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x177fa0ca dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x17826b16 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1c796904 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3316f655 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3db90816 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ec51f96 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5f200175 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x63634133 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x648cdd77 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x68e9c35c dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70b1d967 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7f9d5237 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x90370e96 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x93913e6f dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x95ca924d dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x976788ba dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa4330539 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa841b91b dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa90e8607 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbc2d1284 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbd3e4a72 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbecd7326 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc352453a dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcb94ae69 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcbd13e24 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcd3d42d6 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcf43977f dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd01a12c7 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd22287fc dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe4961610 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf07d0f85 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf990d79d dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfd56190f dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x03e2ce46 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x153fda9a dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x35432fc1 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x69db306c dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9b880c1c dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xfe0a566f dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xe0cc7d8b nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x219af900 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x4a3a2999 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x521efad3 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x6334fc01 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x73ab4eef nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xbcc12d22 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xe87ca123 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x3b117d88 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x4673b9a9 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x6a0c48de tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xbd14c909 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcdfa5f27 tcp_vegas_init +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x3e4f2b0e ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xad3e0877 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x02fe692b nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x041013fd nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0ed4c615 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0ffe2fc7 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x15cbb5f0 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x22b18f41 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2bd4b7ad nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2e2b3990 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3c3ff797 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3ebd7280 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4186c002 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4281c02e nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x43acfac2 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4ecfdd97 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5640ded9 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x572b8f80 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x59318c46 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a265a7a nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5b5b2f91 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5d7df9ab __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5e5b4a41 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x620e5686 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a94738e nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b07eec4 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x73310307 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x773763b3 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7cf9bf15 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7dcfdde0 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7ebd9381 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8167479d nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x850523a8 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ad29008 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8dc0ac0c nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x957321bd nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x99207d2a nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa19aee2d print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa215b290 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaa7a30f9 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xae0f6178 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb1145224 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb234a7ca nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb297498a nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbc45d13a nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc772395f nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd0e199d1 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdb1d3c36 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbcce4b8 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdd7e42c9 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe16585c6 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe2c51876 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe40975d5 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7038b47 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7d60a44 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe9fd0b70 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef38e566 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef721507 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf9fe4ff0 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfaf0a779 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfbeca5c9 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd7e9388 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfe2d5c25 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xdfa109fa nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x1cfe0a36 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3913aefb set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x47385569 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x650b3f91 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x93825196 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcf4c2b17 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe3a90e5a get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe62fdc2e nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf7920c6d nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf9b70b00 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xfe395997 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x05bb9756 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x1998babe nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3b121259 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x53f0a72c nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xb1df76ed nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x2436cdb5 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xb3da17b9 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1cbfe3ca nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x24aa4668 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4766e999 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x62a1bc12 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69968714 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69972f05 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6eaf8457 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x8f7e7440 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x980a6c07 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xbaf4f496 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xbdb1fa14 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdb30313d ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x55339d24 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x3335b490 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x683a3400 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x2883e78c nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x31a1a3c7 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x944cdea9 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa1b7b9b4 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xee5101bf nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x189153a4 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x192c1159 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x19cad5a6 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x273e892d xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x28cfdb73 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x46d2c699 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x497f1140 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4c24f5b1 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f432b51 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x72465be4 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x736854d5 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7accdc1f xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb67e5511 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xba3d0f90 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xcb5779de xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd6d1f6aa xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xed3bde16 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc2429b63 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xfc852663 xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x01944013 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x0d68cb92 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x14ab243d rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x1e07dafb rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x30ae6c95 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3593a6b1 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x3909f067 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x3c099c66 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x42e7c85d rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x59b6b5e0 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x5cbedc21 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x5e141acb rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x6518ed74 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x885b03db rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x897ed897 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x8b8a8bdb rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x90c983c8 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x932ecf7a rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x9d2de78d rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xbe7ba4af rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xc2da8e38 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xd3006760 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xe14a236a rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xedbfef19 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x2df1446c rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xf677eb54 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1a7f95b4 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x367098c9 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8a6d8253 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x900d0b92 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x97d2a378 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc7295a54 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xdfbb39df gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe3379d47 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf643b956 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf7048913 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xfbc5a1e7 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x012f9e7c csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x01bdcf35 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x028b2c9c rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0493dfbe xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x064fd685 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b78ddd5 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ea6af41 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x10fb2e33 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1268b489 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x133d56d6 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x162f4c87 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x175d56b9 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x18f9cd36 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x194260d8 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x19a555db rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b0da2de svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1e96ec77 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f0ea5e1 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f59eae6 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2046ccac xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23dc7e22 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2588bae9 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2650f614 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x281aca02 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x29df3277 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b3bdd24 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2bb90536 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2cbbaad5 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2e674891 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x335448d7 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x364f0b9c xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x36a1f002 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3785a46f svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37917473 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38d86ecd svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d728bb3 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3e8344ed rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f75c2f3 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x435f44b7 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x441ba759 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45d2e6e8 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47306835 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4eef552f xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f2342fc rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f5ad8f9 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5028565b rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x51c7d104 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x521f81f5 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x52729404 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53e21499 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550547a3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550a89a9 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x571fbea1 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59b8f724 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ab32fb7 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5c469e89 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fa63647 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fe10c02 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6043a657 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6356ec29 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a0d8504 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a2c1384 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a4f6478 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a9e481f rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6cbd4667 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x707f8581 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73e55b5f xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x742c068e rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76e3c6bf sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7793710c rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x782e4c8c rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de86616 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8019572c xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80f7a659 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8626526a rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a1840a2 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a3f3782 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b71f69e unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c2a7e8e xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8ebb0781 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90d0ea0d svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x921ce38a xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x93d3743a svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x941ffa03 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9594acb5 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x95a9e4e4 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96f2e2b7 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9cb559d2 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0965217 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1894397 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa4b26340 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaa9399d5 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xabc4fabd auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac004a57 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xadff7b7a xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaee9f192 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafd37a10 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb387b246 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb58c712f svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdfb9b72 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6574a5c xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6e6639b rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc88fd896 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc95af866 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc96628bc rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc25d2dc xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd07fd42 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd5444d3 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce3f7f8e svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf4e936b xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd1203634 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd19af8c7 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5b0029f sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82c728e rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc4dd9e0 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde82a5c9 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe03ccbe5 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe0b2021e svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1c6144c svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe25bec18 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe26f1d47 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe38a4a8a rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe40ec383 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe44ccf1a rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe501b5b1 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6edc1da xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7ebca82 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe89ce2d1 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeaa8c1df xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xebeaa9b0 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedbdf049 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd1ba52 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee1d1244 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf47c43eb xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf7f16f5e xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf98f8d70 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9cc2763 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa8234e8 rpc_restart_call +EXPORT_SYMBOL_GPL net/wimax/wimax 0x38860368 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3957607e wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3c981fca wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x44547244 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x5f38dce4 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x6e495632 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa262ef2e wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc66fe36b wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc71dd468 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcc2e0b5e wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcd4aa5de wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcda189fd wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcdb0d665 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x02c7ad01 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x127c8ead cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x22b93af8 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2302a9d2 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2f0cbc6e cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x30b6e659 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x37aad21a cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3afd1d95 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3bf0c0ab cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3d297d3e cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4c602493 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6c1eb36a cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x80086f30 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c067a8c cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c3b8bf7 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8d3656c9 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x900db966 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x94a014f8 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x95a0b0b5 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9696d865 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x97508608 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa9c65e46 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb852f83e cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc6dade52 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcb34ff91 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdb073927 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdd8f165e cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdd943911 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe39e0a4e cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xea167af9 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfbeaa692 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfdd15faf cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x533eda12 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x6029bf31 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x75f7b6e3 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x84f2f291 ipcomp_init_state +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x03d78257 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x050bc5f4 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0792da4d snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0a3d8a62 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0aff74f0 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x11b89f04 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x134ba7a5 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x143d2196 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x147daffd snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x25f2eb0d snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b568699 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2cfc8410 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3234cee6 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x32c02fe8 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x37207eb6 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a683220 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3affbaa4 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3dad195e snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4317f02b snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4af29854 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c844c0b snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4f7a6da6 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x517f633b snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5e3fd240 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6648f00f snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x696dc2d6 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ae7167f snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6dcad730 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7118d1bc query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x71e3ed42 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7233714d snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7378a0d1 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x76891b8b snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7af8050f snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x82ff8f17 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8309c43d snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x86486573 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8c555131 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e8e24dd snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x935f7e88 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94707259 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94ba72d2 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9edafa46 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa9ebd6c9 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab7db011 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xac5b8e55 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xacc3844c snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xadcd210b snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb0c56901 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb57dfac8 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb6115ddb snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbc729afa snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbd0a4871 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe4da11d snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbeda2999 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc0b07069 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc5ceb134 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc68a19ec snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xceb5e6ca snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd02d0766 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd20b8fec snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd3944b50 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe0c9c7be snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1f0a811 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe2144297 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe607211c snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe72ddff4 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe8274940 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeab82a09 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xebb869bb snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed567a89 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeddfd96f snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3a76cda snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf7ebfb7a snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfe4a1eb6 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x5ba54575 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xe7e941c4 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x1149202a ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x7d9a0f9e soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x3e47082a soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xc31742c2 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xf0231bb6 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x41e43879 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xbb54f3ce soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x17c931ac ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xe3efdc62 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x83b6fc1d cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xfbaff606 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0xdc72b213 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x24515210 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xdc50bdcc pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xe2fc04b0 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x2fe457db soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x75b79555 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x04cab54d tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x334807ae soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x3eedb552 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xdaa24765 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0619d75f soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x06ebd1aa aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x299b6808 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x63fb7278 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x6eda514b aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xadc8d5fa aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xeda0172c aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x60e33f1b twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x8069dfd3 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x41d1b9d6 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x706b85bf soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xd2a34acc uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x20922bd3 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xc27518ae wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x3ecdbb8c soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x44fcf986 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x4efdc55d wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x1c01df38 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xa5d141de soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x2bdf3538 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xd200740d soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x9ca35d0b wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xfb6b9997 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xddd14f82 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xf710fbae wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb29688d7 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb441aab5 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3539f0c9 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x629659a9 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x7f00145a soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x9db51656 wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x542d4799 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xddd0cdbb wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x2ade67b2 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x85cde1b0 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x9914a182 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xda072bc3 wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x5c93596d wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xb239f241 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x2e480fd0 wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x9e1d095e soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x9d99dd30 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xb9d71ef9 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x728bcd5c wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x8482ec71 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x85408646 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xd4fcc6e8 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x8431575b wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xf8377203 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x05bbe7c9 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x5fde7a32 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x4f9f6e10 wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x96c59a0d soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xbde8c9ce soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xc90b1cbe wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x2a80b969 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xce74a741 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x067780a7 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0703f840 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0d6ac57a snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0dd257ec snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x10cba148 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x10ff62a1 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1116dbf1 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x13af6d20 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x151dcaef snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1cd1f372 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fad6351 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fc50325 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x22e516e2 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x252fcceb snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a93437a snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2db642c7 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x36918a63 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x37287296 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4081bcba snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4a8a5d10 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4ecb0fcc snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x51769f7e snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5351e71f snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x539230b8 snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x56f51efd snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5b7bad0b snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5bc33f9d snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5d72da21 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x61c16587 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69d348a5 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c9e414e snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6e56e54a snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7054ea2a snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x713c36de snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x739f128f snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75a61151 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75e22ac8 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7fe80530 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87ba0983 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8c17c984 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8f7305ec snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8fc3eeba snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x94d043cb snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9bd6ad6a snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa0798ed8 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa571f7c1 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6200b88 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa7bb6448 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa9293caa snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa6cb144 snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xab758198 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xacccb21d snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb08049d7 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb6885e7d snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb701e946 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb78f0693 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc1ddb555 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc2a967f8 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcc0ac04c snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd7d27972 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd9f35890 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdfc76b67 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe2f00c57 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe325b179 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe7eacc9f snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe90a8d0d snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef4a1869 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf7636166 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf82a4e7e snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf8be5be1 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa466f04 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x15e0620c xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x4803223f xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x57e771ba xv_get_total_size_bytes +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x88072f01 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xe878f8f2 xv_free +EXPORT_SYMBOL_GPL vmlinux 0x000aef94 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x001adae3 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x003dbce0 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x003ed6a6 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0058d2cf apic +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x009a5a62 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00a592c3 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00a5cbe1 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00f94fde register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x013db8ac destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01863f17 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x019006ec register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x0190f062 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01bf2e74 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x023d39d8 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x0243a3fd __class_register +EXPORT_SYMBOL_GPL vmlinux 0x0263d425 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x028c6811 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x02a74275 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x02b91105 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x033269d2 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x035a0e3a usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x03a3f86d unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x03aa2804 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x03b2ef7d crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x03b34c01 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x03d9615d skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x03e25bef inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0414bddc ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x044598fd tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x0473958d remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x04ae9fc2 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04dff538 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x04f8e715 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x05288d5f inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x068aca56 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x071f1ed6 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x075ffe8c power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0779ca1c __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x077c0c1a inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x07888f4e sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x078e03cd ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x07994b28 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x07a17fe5 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x07e72e56 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x07ff4aea xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x080206fb vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x08119536 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x0846d8f1 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x085db0e4 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x086e52bd __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x088b2802 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x088c1e43 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x0899da9f bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x08baad78 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x090a4ebf ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x090d4e7e ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09dc4765 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x09f2cf38 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x0a1a2ef4 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x0a8e09c5 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x0ad752ec da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x0afc0f13 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b4ead67 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x0bc320da i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x0bddb693 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x0bec2b6c __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x0bfaa3a5 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c32503b usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x0c701753 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x0c7798de mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0ca3ecf9 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cd5129c usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x0d3d4646 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x0dac466d ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x0e15421e dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x0e280bc7 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x0e30a086 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x0e69726b xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x0e77d09e bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x0e7dab97 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0ec210b8 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x0ec249af ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x0ecaf541 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x0f73520f klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x0f8bfa2a dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x100c13c6 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x10621889 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x10ab9644 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x1176d0d0 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x117f5982 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x11d0f444 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x11f1af50 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x12140ce1 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x121d28d4 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x124bb3b4 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x128cb99d ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x129445f1 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x12c9d44f device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x13731022 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x13748759 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x137fc85e securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x1381a048 iommu_map_range +EXPORT_SYMBOL_GPL vmlinux 0x139ee9c8 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x13ab173c usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13c0b6a0 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x13e05aae __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x141a30c3 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x143edc5a uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1440e647 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14b2392b devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x15238e27 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x162012fb fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x1640954a class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x16788d5b bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x1697136d hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x16eb9102 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x16f26444 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x174bcda7 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x17996987 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x179cdb19 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x17a5d124 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x17cdf383 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x17d6f62a ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x17ea1290 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x181ec9e8 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x186f0d2c crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x188b47ff security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x18951544 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x18969b91 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x18d317f4 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x196c7b25 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19c7fc19 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x1a121a56 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a3dd20a cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a5424fa crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x1a938737 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x1a9875f4 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x1a9b538e ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x1acda5b2 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1ad94a98 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x1b1c32ff __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x1b8b86e3 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bbe7be9 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x1be409eb sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x1c2a5354 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x1c2cd0ae usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x1c309769 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c487a9d inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x1c5d0e9f eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x1c7b6c2a eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c8b0961 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x1c8e9b69 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x1cc5fbab ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x1d18a795 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x1d29e89d md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x1d32761b ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x1d7e724b usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1d9a1136 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1ddb3ea5 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e2f9f23 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x1e3745e7 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x1e4990cb usb_string +EXPORT_SYMBOL_GPL vmlinux 0x1e5f82de platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ec2f809 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x1ef5e83e led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x1f02fc79 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1f19d1cb usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x1f29b226 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x1f2cfcad sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1f3d1b77 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x1f5ffa2f ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x1f77ffbf per_cpu__gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fae7955 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fe42b6d rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x1ff26911 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x201e2c25 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x205dcd7a klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20d22764 iommu_found +EXPORT_SYMBOL_GPL vmlinux 0x210b84ad aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x210bd51b usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21d17748 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x21da516f class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x21e7f588 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x21f336ae inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x21f76b18 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x21faecc8 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x2215763e regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x22722d73 acpi_smbus_write +EXPORT_SYMBOL_GPL vmlinux 0x2285e98d ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22c3c2e7 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x234e4c9d transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x2352a46f tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x2356ecd6 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x235ac6ca platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x235b9d1d rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x2362a680 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23d95412 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x243aa0b4 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x246f4153 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x248aae08 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24cb5d5e bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x24d969fb usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x24e0d0e8 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x25b53b6e __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x25e95115 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x261004f0 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x26639e02 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x268bb556 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x270838f7 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x277fad7c inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x2785e5be raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x278e51ac ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27bd87ad sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x27c3f73f crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x27c628ff scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x28160aad usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x2844a516 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x2850f2e6 get_device +EXPORT_SYMBOL_GPL vmlinux 0x285e7e89 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28fe92d2 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x291ab4e5 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x29501527 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x297d6ba9 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x2993ba17 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x29b50d25 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x29e7acee ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2a0a4724 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2ba91862 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x2bb02aa3 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bd1c048 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c03b46b usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x2c164804 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c2cb9c6 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x2c764f69 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d3302cc inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x2d43fada scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x2d5dbeec crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x2d8e8f1a swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2e3937d9 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2ea013e1 pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x2ec92012 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x2eed2630 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2f0f795b bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f7fc7eb ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2fc00029 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2fd41090 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x2fdd8439 dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0x2fdf4fd3 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x2fe363b8 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x2ffc25a2 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3019a7c0 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x30373e50 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x30702f96 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x30b31352 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x30be18dc simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x30e8396d ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x311e7ddc proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x3156a638 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x317a86c6 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x3188e442 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x31a2a10d regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x31b37197 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x326badda crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x32725f3a nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x3274abbb crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x32a88e24 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32e15360 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x33401562 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x33a6d8b2 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x33c8e4d3 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x33d4bfa1 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x33ec66ef kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x340558fc regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3447683c flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x346835bc devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3493ab9b sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x34a8ea36 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x34a9a0f4 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x34c24076 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x34cba128 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x34dc79ff led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x35213407 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x35c24030 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35fd0312 per_cpu__injectm +EXPORT_SYMBOL_GPL vmlinux 0x36147dab ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362944b1 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x372ca969 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x373bc17b ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x373d6121 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x37953253 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x37abfea7 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x38225c25 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x3824dd5a crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x382775da invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x382d2634 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x387c312a ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x387c34ac power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x38833a5d pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x38b9fd01 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x38ea936e __memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x392a643e sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x398027a1 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x398a9d85 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0x39956f26 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x39b64e26 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x39b9ee05 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x39e59997 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x39f10126 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x3a2ec487 dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0x3a664fe6 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x3a6de86a power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x3a804621 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x3a85fbc9 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3b09fdc3 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3ba31059 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x3bbe9a9c sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x3bccf8db sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c59edee dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c6f0513 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x3c7d8eda devres_add +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cb3950a class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x3cc42d71 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x3ccb6c30 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cd5652e dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d5acc58 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3d5f392d acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x3d6d0225 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3d8d9c0e tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x3d983c9f put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x3dc16ae5 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x3dd5d829 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3ded27af ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x3df0f251 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x3e4c6249 scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0x3e6eaa33 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f0348ec crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x3f093a1f spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3f970379 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x402286a8 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x405397b9 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x40599182 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x40626177 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x4090a9c9 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x409613e2 mmput +EXPORT_SYMBOL_GPL vmlinux 0x40a9f3b9 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x40ae4dbb single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40be2c41 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x40c31806 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x40eb7312 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x40efbb1c crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x410c3b78 ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x4207fecc blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x4228fa74 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x426f13b9 e820_all_mapped +EXPORT_SYMBOL_GPL vmlinux 0x426f4cbc trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x428fe803 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x42a18c66 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x42cc3a5c ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x42eee679 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x434e62dc __module_address +EXPORT_SYMBOL_GPL vmlinux 0x437b4ba0 sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0x43eeef87 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x4437e418 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x4462348a ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x44637f5f usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44abb265 device_create +EXPORT_SYMBOL_GPL vmlinux 0x44bb2400 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x451813c5 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x451c497d usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454d5c01 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d14bdf hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x4627a83e rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x4653c6dc relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x466a71a3 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46c8e1c5 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x46f52220 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x46f66e6b __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x4713ef34 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x4724de0f i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x472740da xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x4750c99d __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x475c3565 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x47b71623 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x47d6b5db ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x47efcb51 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x4860a1bb crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4884140a br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x48efb035 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x4970a1cc regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4995f903 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x49ed802d skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x49f3c442 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x4a077834 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x4a237102 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x4a87a493 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x4abcce26 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x4acd3bf5 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x4af27df7 pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0x4af9d82c class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4b759823 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4b762828 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x4baa4629 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x4bd8c7eb relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x4bdc33ec usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x4bfb25de inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x4c04ec35 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x4c338dba sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x4c3f5384 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c99fa1d hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x4cec82ee crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4cff5e3f sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d12155c xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x4d3970eb power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4e1c3c82 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x4e25839a rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x4e689bb9 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x4eb0c7b0 sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4ec5a1da macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x4ed085bd fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x4ed4d7c5 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x4f502ba6 device_del +EXPORT_SYMBOL_GPL vmlinux 0x4f552a1b ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x4fc56cce iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fe9860c simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x5035ab68 usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x50373106 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x506e12df platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x508a5385 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x50b319ce cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x50c4d586 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x50d1f870 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x511cc279 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x5129d12d fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x51549500 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x517bf66f ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x5189e6b8 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51946009 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x51f0dc15 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x5234c0ef scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x5255894b clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x527e7bec blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x52bf425a pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52ec60eb dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0x531d1c4d rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x5324d04f bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x532739ed rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x53723334 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53aa3387 find_module +EXPORT_SYMBOL_GPL vmlinux 0x53b158c7 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x53dcf28d usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x5404ca04 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x5449c5ab ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x547b8f2d usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x5486e169 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x549fe6a9 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x55124695 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x555f1410 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x556d11df gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x55dc0a63 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x55f2580b __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x55fb5be9 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x561c634a wmi_evaluate_method +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x566f0057 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x56dda56c blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x56de907c ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x57174166 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x5770189b register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x5798085b agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x580fd343 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x5852451a fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x58bca723 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x5906fa40 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x59497847 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x59819bcc __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x599b1774 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x59c3e4cc blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x5a0acc22 dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x5a0ae43d attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a48fba2 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a76b652 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5ac78036 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x5ae1937c ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5af3808a kick_process +EXPORT_SYMBOL_GPL vmlinux 0x5b1dbb87 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5b435139 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x5b5c9711 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x5b98e017 ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c0c2e15 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x5c396e9c ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x5c8cb862 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x5ccaae29 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x5cd1db01 xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d12ee2b ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x5d276faa blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x5d297383 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d73542b regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x5d846fcc ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d9ca9bc usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x5db1725a rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x5dc616be eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x5dd46994 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5de1686a class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x5dede1bd register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x5df32a65 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x5e7abbc9 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0x5eab0ecf tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x5ef5b714 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5fb90d24 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x5fbad331 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x601fee29 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x603ab8dd devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x605a018f __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x606e9731 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60cdc135 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x60fa50f9 put_device +EXPORT_SYMBOL_GPL vmlinux 0x61519c09 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x61747e09 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x6194ffea do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x619f70b9 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x61a1808a sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x61b28ce4 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x61bb6cd1 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x61c6f8bf power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x61d89ca4 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x61fde9e6 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x62688c7c usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x626987c2 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x62849521 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x628dd1a1 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62a53252 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x62c55d6f ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x6301d114 device_add +EXPORT_SYMBOL_GPL vmlinux 0x630492bd sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x630e7061 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x6321ef24 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x6326807e ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x63583f91 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x6377b961 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x63a96790 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x63b5e1e7 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x63dbe800 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x63ea5555 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x63f4dc09 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x6408368d crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x6471eb94 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x6473dc8d usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x648f3ed7 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x64bb5f03 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x652f4059 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x65501d80 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x6565b802 device_register +EXPORT_SYMBOL_GPL vmlinux 0x65b3ae79 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x65b43038 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e04672 dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0x678cbb2e dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x679e30fa da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x67d4ee29 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x6875ccfb part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x688b7e72 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a668cb hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x68c855a6 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x68f3cca1 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x691b8d3d device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x691fdbc9 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x695533ad crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x695b1c56 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x697628ed rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x697ce653 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x69b81e2a usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x69d81264 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a66cdbb inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x6a67280a ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6ab424f6 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x6b23fbf2 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x6b3987e6 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6b540a06 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x6b6ff422 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x6b80ac6e sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x6b9178b3 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x6ba7f27a handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x6bd20edf dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x6bdb5006 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x6bdc5b84 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x6be56852 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6c2f4aba usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x6c404e4c led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c60946c crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c9bb9bc ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x6ca6c67a gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x6ced3887 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x6d12a543 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6d209d7f scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x6d2a466a ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d95f83c skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6dac1f9a led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x6dded357 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x6df514df ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x6e0854a4 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x6e0ad976 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x6e234c3a inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x6e5497a3 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6eb787ee klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6f7cba43 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x6fbed5b4 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x6fd710b1 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6fee55b4 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7005a163 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x700fab88 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x7037d79d k8_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x70451fbc ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x7049318f ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x704af067 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70d311c7 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x70f306df lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x712fc320 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71875763 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x71c2e989 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x71d3e5ea usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x7227cda0 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x722c4f65 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x72744e59 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x7274601c fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72799e4b debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x72a96a10 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x72c55186 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x72f10a28 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7304fc97 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x731433ee unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x7318e779 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x733e4a90 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x733e9b00 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x73645832 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73f043d8 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x742701a7 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x7458ed76 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x746bb95c rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x74a20c58 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x7544b472 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x757dc815 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x75abb4ac ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x7648ee0c cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x7664bb98 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x766d2e7c user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x7697efb1 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x76a95683 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x76face7f crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x775f067b usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x77b0ebeb driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x77bef1cd ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x77bfff38 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x77d3391a kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x77e47f71 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x7813c0d1 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x78546758 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x7888d712 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x78a09307 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78f7ffcc ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79576a0e sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7962ba60 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x79879bcc input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x79a61002 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x79bc6fc8 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x79d66d78 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x79d894bd crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x7a3231b8 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x7a3679fa pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x7a40ad4e hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x7a47cf8a device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7a4f6334 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x7a52dcc6 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x7a86f36a fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x7aa24be1 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7acf3089 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x7ad06a0c ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7ae32e2e synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x7aecbc13 input_class +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b356f8e ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x7b80d41f user_match +EXPORT_SYMBOL_GPL vmlinux 0x7bcd2ded klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x7bd7c566 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x7bee2635 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x7c050754 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x7c821c56 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x7c972da8 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x7cac82b7 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x7cad0ade drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x7cdca2a7 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x7cf7a255 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7d13da27 dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0x7d2ec030 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x7d94d064 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x7da38d14 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e009831 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e5e301f unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e93918c pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x7ea43313 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x7ec614fa uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x7ed7b3fe fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x7eef5eb5 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f1d0df5 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0x7f7b8caa regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x7fa7354a pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x7fbe01cf anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x7fd9c1d9 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ffc40e0 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x802ae7b7 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x802cd2c9 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x804cbd8e ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x8085c9d3 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80c6e9ee spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x80f5ba48 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x8110d6f9 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x81517998 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x818f2418 usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x81c12355 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x81f7d3c0 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x81f97860 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x82178219 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x8220b053 inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x8241d30e pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x827f83ad crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82af8b9a devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82e085e6 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x83428ad6 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x8353bfc9 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x83e52c00 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x83f240e4 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x842a07ae crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x843b3cd8 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x848eb892 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x84b149e9 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x84bd9e00 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x8532a2d0 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d4dc4a register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x860f8c7e d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x863ecb43 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x864839a9 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x86753346 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x867a579f skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x867c684a setup_APIC_eilvt_ibs +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x868d2e88 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x8691ad34 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x869b4ce9 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x86a056bc unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86a66bb0 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86bf7595 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x8766c0d5 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x876d29f1 wmi_get_event_data +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87909441 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x879f00b6 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x87b40149 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x87cf675c __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x87d7d9dd usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x880b189a __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x881cc809 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88a62d7a alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x88f8be1e sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x8941c03f rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x89428348 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8954ef75 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x89b0f062 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x8a48e223 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x8a72be8e power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8a85ddb5 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x8a8db827 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x8ac3afae pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x8ae8f1f9 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8b1ba7a1 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x8b39cf9d unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b9200fd lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x8be3c75b ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c4bff78 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x8c95f83d dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0x8c9d686d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x8cc66953 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x8cfbd1e8 dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d109544 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x8d66490d pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x8db1a37e cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x8db89810 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x8dbb36a8 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x8e3492e2 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x8e4da5db ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x8eb58c6e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x8ed61464 user_update +EXPORT_SYMBOL_GPL vmlinux 0x8efe0116 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8f501857 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x8f68a22c set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f705085 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x8f8932fa xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fb0a6a8 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x9008cd6c inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x900ef362 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0x9048bfe1 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x905b1dab tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x9078bc46 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90a581e9 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x90ab1d6c aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x90f0abb4 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x910a2316 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x9112152e ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x91482eef usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x9154cc24 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x91dac80e scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x91dacaa2 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x91f09504 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x91ff1264 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x92051102 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x9222cc31 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x92306c81 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x9244c614 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x9260c5fd __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x93260715 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x942a41f4 iommu_unmap_range +EXPORT_SYMBOL_GPL vmlinux 0x94356e16 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x9462f218 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x9492f89c add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x9503aed8 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x952391e8 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x957323d7 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x95758050 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x957c73df alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x95bb5171 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x95e0153a srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x964d5c39 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x96b1c1c2 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x96b25824 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96ec3f3f scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0x97027221 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x970c8daa fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x975b3ead usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x975b8070 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x976c9982 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x97982542 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x98215d8d device_rename +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x989ba138 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x992443f2 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x99429186 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x995d38f8 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9984c858 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x99b3b5b6 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x99cafaf5 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x99cba3f7 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x99e52a5b task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x99ead1cd rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x99f9bd28 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a4d1034 idle_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x9b0a49ac user_read +EXPORT_SYMBOL_GPL vmlinux 0x9b15bee1 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x9b1f546d unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x9b8cf883 dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9c17b7dc sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x9c6103f8 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d2ac309 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x9d2b6a58 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x9d308c4d hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d4287a7 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x9d7f68a1 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x9dbee6a1 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x9df30aef ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x9e01f6d4 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x9e414073 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x9e5f910b ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e95459a transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f4e05f1 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x9f723906 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f9809b9 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x9fab1dce tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x9fb073e5 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fe47e28 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xa004e9ab blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa04e8199 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0xa057ceba dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xa07c1ebc pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0xa08e9278 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xa0cdedeb ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0xa157ae34 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0xa1596d98 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa18e2df8 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xa1e18a68 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xa1f34990 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0xa20398b5 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa223e7db acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0xa28d8527 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2b2734e ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xa2db37cd scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0xa2ddd3b9 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa307bd10 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa3c75f88 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0xa3cf59ab usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa422b70b __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0xa43782e4 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0xa44f0003 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa4a42813 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0xa4b4a6b7 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0xa4cc5425 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xa4d58669 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xa50c2f9f class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa510b834 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xa51105bf spi_async +EXPORT_SYMBOL_GPL vmlinux 0xa519a3eb xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0xa558a84c fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xa5597e1c cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xa5855a2d dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xa59b6c3a ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5cf251b map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa60926cc platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xa6283056 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xa653e39b ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xa6981d51 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0xa708bae3 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0xa7500f18 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xa7555d5c blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xa78a2da9 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xa8084454 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0xa8535a9b pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0xa8769184 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xa87ae87e bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa8a183b9 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa96496c9 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0xa98154f4 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9d19fdc rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0xa9dbe745 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xaa17bd94 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xaa3e3aea __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa7823ba crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaddf6ca blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xaaf253a0 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xaaf5f73a ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab1691b9 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab2d2f9d sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab67f0f3 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab78750e pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0xabc2690c __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xabdf39fb tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc19485 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xaced6744 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xad020372 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0xad096363 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0xad2329dd usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xad91164f mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xadfe8e31 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae21a0f4 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xae2f5298 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xae980049 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0xaeaf2872 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xaec862ca dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0xaed934c1 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf620493 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xaf694ef6 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xafb0eb94 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0xafc7c996 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xafe845e8 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0xaff8f3b8 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xaffbbaaa srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xb0223109 klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb09850f6 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0ac5ea0 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xb0cf522f devres_get +EXPORT_SYMBOL_GPL vmlinux 0xb0eedea9 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb126118c inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1a8c0f4 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb2814e59 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb3390166 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xb38e9a9c class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb39b4a29 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0xb3d3ee6f rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xb4166741 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xb41c3379 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xb42941ee dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0xb4787c42 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0xb4861908 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xb49488e2 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb5004ae8 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xb5080ff3 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb525fbf6 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb5494966 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb5781097 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a0275b devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0xb5f9b620 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0xb5ffc79a inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xb60d46c7 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb62b5a41 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0xb64e4efc acpi_smbus_register_callback +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb68550af ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xb6a37769 dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6e12d64 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xb6f1a712 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb73e2d41 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2eb91 mce_cpu_specific_poll +EXPORT_SYMBOL_GPL vmlinux 0xb7e56895 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0xb7fdd0df eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xb87dd3df kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xb886111b pci_intx +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb9248321 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xb9292e07 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xb92d5c88 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb94db510 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb9954774 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9ea052b __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xb9ece983 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xba8979e4 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0xbaa92815 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0xbaba43ca rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbae55148 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xbb3507a9 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0xbb41edea debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xbb4a1408 klist_init +EXPORT_SYMBOL_GPL vmlinux 0xbb802181 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0xbb8d3c78 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xbba00578 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbc5e8d5 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xbbcc8be3 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xbc2898a9 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xbc29d792 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xbc3af6c5 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0xbc6324d0 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0xbc920041 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xbceae503 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd9fb818 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbe005d0d fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0xbe072482 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe58601a inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xbe8d4de5 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbeb4cb93 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0xbec7b9b8 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0xbeda71b4 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xbef8a262 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xbf4c5170 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xbf99ba3d mce_chrdev_ops +EXPORT_SYMBOL_GPL vmlinux 0xbfd94bb0 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xc0026e29 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0xc00f413d driver_register +EXPORT_SYMBOL_GPL vmlinux 0xc06e819f usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0xc0a4bff0 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xc0beff6f lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0xc0c9b355 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xc0d61ca4 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc1538963 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc1c01c67 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xc1c1cb2d blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0xc1c7399c crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc1cac646 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc2ee1ee6 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc3773a1b regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xc37d1abe disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3ce019e ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xc3e5f29b smp_ops +EXPORT_SYMBOL_GPL vmlinux 0xc4034caa enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc42f2f94 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xc4575399 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xc46a79e2 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4ce6189 idle_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc512626a __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc5a94579 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc6252011 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc63730ad relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xc6485b7d ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0xc64f7419 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xc663e68c inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xc6724081 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc6789608 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xc6886564 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xc69ac489 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xc6a90252 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xc6db5721 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0xc71a24ce dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xc76ca8d2 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc78984e3 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xc7c0c681 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xc7c410c4 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc7d06b99 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xc7dd51f2 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xc7ec11f6 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc7f1e88f regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xc8451ec3 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc889798a swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0xc89fce0e hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xc8f11420 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0xc92c32f1 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xc92de4f8 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xc94bb94f inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9b349fb scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL vmlinux 0xc9dd30a2 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca01ef5e __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xca01f51c tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0xca0701e4 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xca295f03 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xca745cfd udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xcaa5d20b ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0xcab642a5 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xcabd97b6 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcade9de8 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0xcb31af65 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xcb47700a queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xcb49fff8 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xcbf202df driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xcc15647b xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc29ff99 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0xcc57c0f5 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc99938f screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd1a336a usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xcd1ca2cb iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdd79cab bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xcdf7c10e do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xce094044 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xce1b626c invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xce34fd32 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xce4cb094 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xcebc8a5b sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xcf04c5ae usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcf94b57a relay_open +EXPORT_SYMBOL_GPL vmlinux 0xcfac0188 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfe4f7a8 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03fdcc0 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd054873c crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0f4737c ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xd0f85d32 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd134fd42 get_driver +EXPORT_SYMBOL_GPL vmlinux 0xd153136f setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1c17ce0 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xd1cee293 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd3100fb6 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xd3446d7f usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xd349c577 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0xd3956528 dm_put +EXPORT_SYMBOL_GPL vmlinux 0xd3b2cbbf dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xd3c23a08 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0xd41bf688 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xd43537d4 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xd4520f6e ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0xd45f2880 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd463f16e cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0xd46f3e8d crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xd4744d02 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xd488097f input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd4964ab3 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0xd49f3f00 put_pid +EXPORT_SYMBOL_GPL vmlinux 0xd4e6dea7 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xd53284b3 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0xd544707f fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0xd59351de platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xd5c8ad5f class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd5ca1fb5 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0xd5ff0c51 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xd6133c44 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xd62b6993 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0xd64e73b2 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xd66e8890 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0xd69a2da4 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xd6c1caf6 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xd6c8d0de regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0xd6f85b47 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd7171e39 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd7893db1 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd7b348e7 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd7f61198 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xd836521b inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xd84c62fe usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xd8af3a05 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xd8c1af97 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xd8d9e6ef acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xd9042fa8 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xd92fbcd4 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xd9580daa crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xd9dda9bc usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0xd9f924f6 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda29f8b0 wmi_set_block +EXPORT_SYMBOL_GPL vmlinux 0xda316e6e device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0xda3bdd9c sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0xda4162c6 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0xda7dd7bc queue_work +EXPORT_SYMBOL_GPL vmlinux 0xda87adbf dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdba64f1c eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xdbd4cf1b __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xdbd848ed spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0xdbf2ee5f gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0xdc1f8f2e register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xdc3c085d vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xdc7ae9ef sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0xdccafa8e generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xdd058497 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0xdd122d33 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xdd473014 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xdd82fafd crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0xdd8787ab regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xddfac67a crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xde19a53b inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0xde1f9129 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xde389ca9 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde46dcf7 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xde6f3873 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xde9e4975 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xdec0f1bd ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xdedc3d34 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0xdeff4cbd disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xdf01ff1c pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xdf22b0ef dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0xdf44612a rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdf8cdd6b relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xdf938eb2 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xdffec1e4 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0xe0a23ab1 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0dcdaa8 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xe10a18b6 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xe145aed8 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xe1bd74b3 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0xe1d86223 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xe1fed6a4 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xe247343b hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe2592232 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0xe28d68cf crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe2ef9767 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xe2f63e1e skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xe326480b ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xe36811a1 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0xe3ac3f11 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0xe3ac6078 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xe4428977 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xe4591651 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xe49cb4b1 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4aaa66f pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0xe4c18159 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xe4c858c2 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xe4d66365 acpi_smbus_read +EXPORT_SYMBOL_GPL vmlinux 0xe4e76787 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe4fa70c9 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xe513afc0 cache_k8_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe53a5088 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xe5b01aa9 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0xe5b9f8c5 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0xe5c6ecfa blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xe5c92112 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0xe612ffa5 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe630203b device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6886891 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xe6e8f340 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe71c60fb use_module +EXPORT_SYMBOL_GPL vmlinux 0xe71e565e rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe7a29673 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0xe7dfb3e2 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0xe7f51daa ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe820c472 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xe855bcba kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe9073af3 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe994e7b6 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9b8ece7 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe9dcebef shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xe9e0b191 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea548d52 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0xea87b546 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0xeac438e8 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xeae01e45 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb1f636c da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb4c5744 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xeb68c290 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xeb99807e agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec1b385c ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xec69c73e rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xec94f968 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0xeca40cb4 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xeca68672 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0xecc5b49f fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0xecd6ca1d input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xed3d4536 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xed9c7a81 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xedbab50f usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedef43c6 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xee321d88 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xee56b738 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xee5e6c12 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xef570c48 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0xef5ad0e4 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0xef65883b platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef7164fa ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xefae9cbc platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xefb7c31f transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xefd8b632 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xf010680e bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf01e986b ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf04624a6 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xf0469f04 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf0a9b13e ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xf0e7cc52 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1c4a403 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0xf279d99c get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xf2a8c0bf usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xf2bc822e bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xf2c0535f crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xf2f41f2a mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf31f6128 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xf325ae50 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xf33ebce6 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xf34612b7 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf389558e tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0xf39cae32 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0xf3c1c0a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf44c39f7 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xf4988656 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf49e9920 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0xf4a8385f iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0xf523a6e8 swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf540b5aa devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf5a291bb kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5c01ddf driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf5c84e5d __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf5d4d484 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0xf611dd7e sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0xf618f4c0 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xf61e43bf class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xf63d2952 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6c13d10 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0xf6c5f396 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf6cb53aa ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf71c7bd5 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0xf72ae3f2 dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xf73c0e47 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0xf743ce79 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0xf750cde4 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xf758a676 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xf79bc8ec __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xf812e1d3 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xf87be6e0 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0xf87d27c2 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8ac7e2e fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xf8f09d20 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf9642b4f __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xfa0c1c84 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa22c3c2 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xfa796fd9 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0xfa7ba3ef key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xfade1acc rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xfb7962e6 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xfb882fb7 wmi_query_block +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc2b6a9f spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0xfc43cf24 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0xfc480535 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xfc891a55 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0xfcc8f6fe inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xfcef4631 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0xfd1e1d6f init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0xfd3ad1b1 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd64dbf8 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe20ef5b usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xfe54cce7 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xfe727411 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfedb5327 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xfee6341b ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0xfeef9f6f bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0xff4123d7 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xff468492 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff875a25 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xffb8b325 __rtnl_link_register +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/i386/generic-pae +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/i386/generic-pae @@ -0,0 +1,10480 @@ +EXPORT_SYMBOL arch/x86/kernel/scx200 0x254e5667 scx200_gpio_base +EXPORT_SYMBOL arch/x86/kernel/scx200 0x35a3c008 scx200_gpio_configure +EXPORT_SYMBOL arch/x86/kernel/scx200 0x8cfa375c scx200_gpio_shadow +EXPORT_SYMBOL arch/x86/kernel/scx200 0x907665bd scx200_cb_base +EXPORT_SYMBOL arch/x86/kvm/kvm 0xb9745c0b kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/kvm/kvm 0xff69f5a0 kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0xe6602d6b suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0xba86b0c7 uPD98402_init +EXPORT_SYMBOL drivers/block/paride/paride 0x1d56b677 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x29b9724a pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x2a10df1d pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x494af7eb paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x783bb81c paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x7f691cfb pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x9bd02e44 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xd2d2595d pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xd85938bc pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xec355622 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xedc9dab6 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xfd121499 pi_do_claimed +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0c95ce24 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0x128ab6ed agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x21061d22 agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x226e950f agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x25b77430 agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x313a9c9a agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3b0cf228 agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3c64cebe agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4677c521 agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x484670f7 agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x53934ff5 agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5e32a327 agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x62b00aac agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x68dacb64 agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7503c3f2 agp_backend_release +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7af44047 agp_generic_alloc_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7c877431 agp_alloc_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x86401769 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0x8750c85c agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0x8f9e1c1d agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9e360948 agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9faf73d4 agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xae18925c agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb532295e agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbd188c55 agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbd468e41 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2acd9eb agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xcbdef9c3 agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd16e698a agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd2457a66 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd3c05a5e agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xdf4534cb agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf217adab agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/intel-agp 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x04898a41 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1291c1cd ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x14fa42aa ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3c2012c2 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x430cd225 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4f48f2b4 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x676667da ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x6ad4a135 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x776d995e ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7e00b1c7 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x838d7326 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8486f9ba ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x91d5fd72 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9efe6387 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa4bb1222 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd9c3d541 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe22956c2 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe5a8cbdd ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf0aec87f ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf31b0985 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf78a8de3 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfb927e0a ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfe413461 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/nsc_gpio 0x1308d7cf nsc_gpio_read +EXPORT_SYMBOL drivers/char/nsc_gpio 0x52012cdc nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0xfcf53484 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/edac/edac_core 0x52edac59 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/edac/edac_core 0x92dbc22f edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0xe87b867c edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04d1d985 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04dd92ce fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x10597624 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x176c2c2f fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4198316b fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4cb64e67 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d5d4eca fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4f867f74 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x673fd899 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x80bac374 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x876cc33a fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa611c28d fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa7d385ad fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xc065a58b fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xc5df607e fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcbae3056 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcd94dfa5 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0xdac1ff5a fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe2a7bbee fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe3cb1e8b fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0xeb9cb740 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0xebe23645 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0xefec2c04 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf530e72e fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0xfec66161 fw_send_request +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04df6e66 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07495d03 drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x076b04aa drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x08fbd01e drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0add691a drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1322c415 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x158e2630 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x16444213 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b2c4456 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20a43d58 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x22ae5cf0 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2351ba8f drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24a32461 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2515c01c drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x27329e2a drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ea459dc drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ef1f6b6 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x30607a03 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34a2664e drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x39a5f954 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3bd7648a drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f087eae drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x40dfe7a5 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x430aedda drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x449a8267 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4556a518 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x460dfa82 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x497775aa drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4ace949e drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4af01365 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x520bbaf2 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x526cd9b3 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x54d9bbd8 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5722d86b drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x57c63632 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x590dceec drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x59313065 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x59517327 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x597cee4f drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5999c3a4 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x59ea7d61 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5b0ba38a drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e6bca75 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5f0f2f54 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5fb347e5 drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60ac16d5 drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60d18677 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x61746bf0 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x658aa1fc drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x66b79351 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6703795f drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x682147b2 drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x69574b44 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x69f063ca drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6bbdd813 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6bd0807d drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6bfa3385 drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6c31005e drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d26e7b3 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d9a682b drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f546720 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x72e75288 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x74e6a268 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77bed803 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x806b4820 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x813d3331 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x82ceed3f drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x84439f45 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85e27c70 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c7f0e49 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8e25dc64 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x941f716f drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x94f2c578 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x95e57ad9 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x972401dc drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x99c9d433 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9ca92200 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9d8097c8 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f042e4f drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1b38e13 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa28ed2fc drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa2e32d86 drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa92be102 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa9f6a312 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaa79fd5f drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0xad81ce52 drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb145df93 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb406c13b drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbc0c5c38 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbcff3669 drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbd20b9b6 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe9cd706 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf40f568 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc134f020 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc21de6ed drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6761ed3 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcf4773f5 drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd2737e6f drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4df471b drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd71781a8 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd8121a4f drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd9cea5b1 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdc257c43 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe206b96e drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2c3c673 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe4073b89 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe62738f3 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe724c1a0 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe72e6436 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7c35aa6 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9d4089e drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xea5f3d8a drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xec65a379 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0xed323b6d drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xed852282 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xedee3c93 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xef51596c drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1791a0f drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1e55c34 drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf5ead105 drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf8cca033 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf8e53772 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf8e5de51 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf9073eb8 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfae65e16 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfae7651b drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfbc0c54f drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfbc32c21 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfd3d40ed drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x05e4935a drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0f344b5d drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x334b4f3c drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3c5aa3e4 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3d3e73d2 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4c73b11f drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x65c343d5 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x69f6e06e drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7ff92419 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9228f94b drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x95f6fa1f drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9ab8d8e5 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d76d540 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xab9babc2 drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb06a0dff drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb810b323 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc5ea2374 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xcc765baa i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd8b871f5 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xdb08b40b drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xde1698b2 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xecadb42f drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf2be3d2d drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf3d2b2e3 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf9d81a2b drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x4b66d173 intelfb_remove +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x915f14fc intelfb_probe +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xd02babda intelfb_resize +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x1e44ac76 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xe81f8868 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x01c99cb0 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07787990 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x08fadd42 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0a7ff61d ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0e6d8f41 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0f1d3be2 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0f785515 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x104300e8 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x161262d6 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x178dbecf ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17a98fa2 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ba8c0ef ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d673efd ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x33c68659 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34704ea7 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3b191e2e ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c3c3af1 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44873f23 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x484f295c ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x49fd9a24 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x55c7aa6a ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x55ce8bcf ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x56c42d22 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x594f03fe ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6277c681 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66666d70 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x67f77fc5 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x68938b5c ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x74d2762c ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x765cbc82 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7bf61b3b ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7e19694c ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f8879de ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x837d23e9 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8db796d4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8e2256bd ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8f47f230 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x939113ea ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa44b9771 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa4b0ba5e ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa4b2fcf3 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaa3a30a2 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5cf2fe9 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb9e927c4 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbba2ecf9 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbf69f5ca ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc5a160a5 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcaa65099 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcc12bef9 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd2b834ff ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdb8ebd91 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdeeb7800 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe3df3f3b ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xef6407fd ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf3e0bb91 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf60c4915 ttm_io_prot +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x5fe76328 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xc2b8a501 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x47a250f6 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x972891be i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0xa8f43976 i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x0721c11b amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x060219e1 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b234c4e dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0ed50b09 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0eef6cb2 hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0f705d11 hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x158ac548 dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1800bc31 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a67f5fc hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1ac720d4 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1e6d94fc hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x226aaa58 hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2484da1c hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2557930e hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x25fbe619 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x273b5c53 hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2947faa7 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a79818e hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ebf6e5a dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ffca78f hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x32f34868 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x38cdc98e hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3ba59c5d hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3bfa68ba hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x45f88d3e hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4d656d7b hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4d66491a hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x50fa3897 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f3fd80d hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x63a284d8 hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x688b3201 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6f0dd19e hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x744bca1f hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7a9ace09 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7c555b02 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x834fabdb hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x83ce439a __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x85d7e650 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8622b9dd hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x882c1366 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8a9fafbf hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x94bce230 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x974a552d hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x977beae4 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9896e2d2 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa0985bc2 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa3b1047a hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa4de4db0 hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa929bf4f dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xab445375 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xad833627 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xae3b5c17 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaefbd374 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb97f947c hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbbec3578 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbd3dd5e0 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbdc97316 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc12c6314 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcc381a6a hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcd9e772b dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd78ccfe8 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd86d0a9b hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe46ab547 hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe4780540 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe726529c hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe92aac64 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xee3b5ea9 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf3dedacc hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf5f4cae4 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf6c71fdc hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfab27536 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x4d743df8 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x9a227ee9 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xd846498f ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x0d40bae5 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x19d5e1d7 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x1ac3de6a rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x55c7d72b rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8a721ed9 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc91bb9d3 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0d5434d2 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0d9eae8a ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x12ddbd94 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x313c823d cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x50bb8185 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x63685108 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x80f9ed55 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa258da2b ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa3794545 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa629491b ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xaf0e79db ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb7081fd7 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb8e2a4d2 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xbc8f0e45 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xce4b3fd1 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe2b06a37 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe8e87fe5 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x09c4af73 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0b345e61 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0c46aba8 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0e879f66 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x14f7bccd ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1910899d ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1b4f99ce ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3bee9f3a ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3ca80e04 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x42561a99 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4416264f ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x45286385 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4a4c583a ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4df90f63 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x541d6968 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5b9252c5 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x71e4f94c ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x72c9ef4d ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x752274b0 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x756fc3cc ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x789986bf ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7c0440bb ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7cf318fb ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x80a6be3d ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x83e47305 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x84a7fc0c ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x86f4549e ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8931bb65 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8a4fdd27 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8ae2fd1a ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8bddfbee ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8dc7ca21 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8f95f566 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8fefaf17 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x90799649 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x90d672c1 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9b7d67e5 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9c24a643 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d9701c7 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9da7ae3a ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e8e7f76 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa6f093dc ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa7ec4254 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xacd26400 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb349aa2e ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbc14ea4d ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc3855b74 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc674b8b7 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcdc16f19 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcdf15eb6 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd227e62b ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd2646a45 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd2b87fa5 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd34ba7b1 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdb7ed557 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe39dd3a2 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe701b04a ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xec240e24 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xef19b51f ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf27c83fe ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf5c6d09f ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf91f485a ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfae3eefe ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfbd963e9 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xff32811a ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xff9d7274 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x08ba296d ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x190538bc ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x38040e65 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x3e852ca3 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x3eded1d0 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x44840c66 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x46c1d747 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4e5c95f6 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7d1ad373 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x984dca86 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xe24d2521 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xee0f28c5 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x750ace95 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7f669a57 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9b164586 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9c56fd34 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xb637e50c ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xdabed954 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe500cce6 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xedc4f5ee ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf520d09e ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x157c416d iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x2a10fcc2 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x35d8a041 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x75b7f4e8 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x80eb1f9b iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xa598dea1 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xb29f3d4c iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xc472a747 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x322fa85c rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3454e99e rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x409f9f29 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4b7f5b5b rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x515d90a9 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x52b37d94 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5710f7e8 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x60d1c019 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x62738ebc rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6d42aaa5 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x77269423 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7b7179dd rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x845f4e9d rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x88e67e67 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x972d5307 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xddaad85f rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfa6cfe83 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfddc9aa9 rdma_set_ib_paths +EXPORT_SYMBOL drivers/input/gameport/gameport 0x3ecb246c gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x5c82e637 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x68e87d0f gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x762bec43 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x78ccb398 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8b553322 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x98e20c0b gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0xa916ec5b gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc4c30b26 gameport_set_phys +EXPORT_SYMBOL drivers/input/input-polldev 0x398a0a09 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x5b8b9864 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x78cb70bd input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xd5bc5fe2 input_register_polled_device +EXPORT_SYMBOL drivers/isdn/capi/capifs 0x2c54c957 capifs_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/capifs 0xd0bc06ce capifs_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00e6c18a detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x0bd1cdd8 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x16afa8b9 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2c436edb capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x63421b83 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x931e0ff0 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9a5d280d attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa3bbb99e capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa7c4fd6c capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xbd255c33 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc10fe128 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe8ad9bd1 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xf3580e24 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xf412253c capi20_set_callback +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x04478ebf b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x17b9cb99 b1ctl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x1ca21f50 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x2b424c4a b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x36b188d8 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x4a75d42d b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x78700bd3 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x7d8e7e7c b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x81814414 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x9f4fa7db b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xaa77827e b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xbd1acd3c b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xc07b4894 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xe35ca92b b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xeec801f8 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xf4c00600 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x20dcb875 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x2125decb t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x233ca0dc b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x279d5fcd b1dmactl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x3c69c236 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x4c3e26a1 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x6bf302a7 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x8b705bca b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xe11188a7 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xe41de321 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x9ca9b694 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x0f2ea444 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x1e1f0e31 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x5292130a mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xd534f951 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x11e38845 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x83c320d1 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x2844a899 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xb922091d hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc0c558f9 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd94696e8 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x160e0a69 isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x8e3cb27f isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xd8f221a2 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xea5cdef7 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xfcc07e5b isac_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x7c996186 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xbda2bea5 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xc179d32a isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1c6b8445 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1d979476 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1f1f0fb9 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x30f9c4d2 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3d1686f9 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x48c04668 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5733f524 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x681c0eab confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6fe06513 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x711121e4 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x945c7703 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9975f9d1 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa17f8d45 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xab20d2ca queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xadeaef13 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc2166eca mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc29a374a l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xcec0bb35 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd884ab96 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a2de4b mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xec5260fe mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9dbe134 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0x5d3324ab mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xc9653028 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xd2ed5dc8 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0x7f906ff0 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x487c0b26 mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0x36b18519 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0xf3385d96 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0xc92499bf xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x072841ce flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x1568c2f0 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x22ecac7d flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x2646e33e flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x322b33fa flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x41d80e96 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6e9712b3 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x76bfb8b5 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x88d6f5f2 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9252138c flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9c5af1a3 flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa02a085d flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xb41450e2 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xb7cc6c9a flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd2f25b5e flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xdca67226 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe0992742 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe6f1a951 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xec719bf7 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf524ccbb flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x43b37213 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x91dead0f bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xa83dce0e bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xb4766faa bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x370886c3 dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x3c9913fd rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x8d84f192 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x906d46d8 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xa65942ce dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xa7cb9aaa write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd22e4aee dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe560c6a9 dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xed2f2aeb read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0xf2447f58 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x03cff2dc dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x05ed4da6 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0e7a85d2 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x14eb630c dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x16f953b3 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1d1bbe4a dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2aacc68a dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2cfc6c65 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3d373228 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x45ff4801 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4abc8de4 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5b0a44a8 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f6caf4e dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f7f7d73 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f9c72e3 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x7df9e677 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x860c83c7 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x87340e2c dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x923aa88e dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x953a4d8c dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x99b99ecb dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa1005d5b dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa4354561 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa6b4bcf1 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb28d97f3 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb2db2592 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb5b95805 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xc2810fd7 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xc3be9051 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcf662ce4 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe7949e59 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xea215a60 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xeb7daf80 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x62ad06d1 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x63183975 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x72f9c163 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8a9d998f usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8e9ffebf dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xd970bfe5 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xdef048ee dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xac662867 af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x16f22f3e dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x19a00632 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x7c088709 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8f01391f dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8f06acf4 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x9a583e58 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x9ea3ae32 dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xa8b833ab dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xb5cc874f dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdc6c4135 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdf01d01f dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xf15ca13e af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0x03b63dcc au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x2b2b1722 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x281b0cc4 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0x26dd8ae0 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0xdaaade0b cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x718e66dd cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xdba54df0 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0x7737d4b6 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x13fb1a5c cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xdda36893 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x342dacf5 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x7a085eff dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x8416988f dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0xf927b1e0 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x31df028f dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x32752393 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x684149f3 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x9f8e28c5 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xc384c348 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xc97eb4b6 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x49d04227 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xc1e186d9 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x0c13c67a dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x13f31cbf dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x4dedd9f6 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x74f5ef6e dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xb955311a dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xfcf8cbf2 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x1ffdf322 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x51d73204 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x57d13be7 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x5c3a8768 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xb6a06ed5 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x00aee81a dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x24f6d7d0 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x3e864cf2 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xccb6f53b dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0xd0da3ca6 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xb007e3cc isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x391e4faf isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x899b3fbf itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xe5fb1806 l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0x1c3dd678 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0xc09d4f58 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0xa0833b3d lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x10d5ebc0 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xc4675673 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x758a0c22 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0xa55873e3 mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0xa2a63f84 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0xcc301d3c nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0xb2ef94c5 or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0x83c75a96 or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0x4b05935a s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0x0f68e087 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x0e3a912e s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x99ef529c s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0x2801274b si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x20a3c443 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0xf62b8c3f sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0x7975f716 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0x0bef4f0f stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0x88bb4d16 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0x7b712d6f stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x90044af4 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0xe8c2e324 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x244f3036 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0xa1f4fdbb stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x5c54263c tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0x6685791d tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x01939501 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xa554553a tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xafefa05a tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0xeb40e220 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x07dd05f1 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8261 0xa0250f30 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0xf2a57494 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tua6100 0xd0e36c71 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x92032b08 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0xd2d059f3 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x147332d4 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0x8ace85cd zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x3b86c1d6 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xbd725242 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xd9a2adcb ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xf265ac01 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xd11a2ff7 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xd798ff7f bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xfe9632fb bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x24b05566 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x45d72342 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0x09ee6294 cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cpia 0x8a7e996d cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x2dd3a7ad cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xddbef021 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x2874c4ad vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x54ad3a86 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x62bdb103 cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x85c3e8c6 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x85fb2855 cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x9eeb1aa1 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xae88ea08 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xee42524f cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x0f19bf93 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x3c4b1acf cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x7849e486 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x88b66a2b cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xa54071da cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xceb18740 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xd6c0e80c cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x0db4eb41 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x126804fb cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x15337a1d cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x268ea2dc cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x3f139fb4 cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x493b2ae7 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4b1a2fcf cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x50e8aa9d cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x5b0c3cf9 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x67f59209 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x68dce020 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7197b4f9 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7351ba19 cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x75e50241 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x844915bc cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b1f445e cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa64d26cf cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb359b6c6 cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xcffeaeae cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd27fa553 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd8952557 cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xeaf3f141 cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x06c049b3 em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x32cb2feb em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x0ab2c0d7 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x173aad97 gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x26288623 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x26998493 gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x4afdc0f9 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x6c5eba7a gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xf76821e1 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0329938e ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x2c733c2f ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x32142e82 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x36bac73e ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x3d7a9048 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x52038376 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x5b3be2f5 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x609ebe2e ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x71ceba71 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd799e75d ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf5a5d0c0 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0b1c56ef saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1996eb63 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x2034707c saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x49677d6d saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x5e21354c saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7143814d saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x779f58f5 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xaf83c154 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xbea4e49b saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xc68eb1d4 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xea217e13 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xec0c5867 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/soc_camera 0x0fce78a2 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xc252e753 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/soc_camera 0xc6cd0b3b soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0xe419b041 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0xf0891752 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/tveeprom 0x1b4c3118 tveeprom_read +EXPORT_SYMBOL drivers/media/video/tveeprom 0xa7a294e1 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x1500fadc usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x16a2915c RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x24b97fae usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x2acfa282 usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x407a321c RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x8543bb40 usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xd0de4344 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xddecac6d RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xde64a569 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf5011f67 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0xfd8d5eeb v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x0d6baa23 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x37be0e25 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x02e25557 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x23957cf1 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x3da517f9 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x9c3c3713 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xc91b3a30 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xff2b57ac videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x108c4595 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x4e2ab6e7 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x73285a65 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x8e2baca6 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x985db7bf video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0x9abddea0 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xd51f54b5 video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xddf959cd video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xf72572b3 video_device_release +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x7e11e12e videocodec_register +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xcc8b396d videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xcebadbd3 videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xecac1f82 videocodec_attach +EXPORT_SYMBOL drivers/memstick/core/memstick 0x0833e86f memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x22f44f43 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d820a02 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x69a2966f memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x6cb45744 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x786fe982 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x83373082 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x961ee98b memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa56f26a3 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa5987a36 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xcb7b17c4 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xe4f41da0 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xf260ba5f memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xf88b306f memstick_alloc_host +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x04004cce mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0e04154c mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x112e25f4 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x34a92a16 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3686603c mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3b4dbb93 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x409018a4 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x473e7a30 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5ab3223d mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7c254f53 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x861549fc mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x873e3465 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x97439b3d mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa0a87ac2 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xbae514d9 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xbdac8f87 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc1ff9a0f mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xcc35b82f mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd452bed3 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd73cf108 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd82f8773 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe0dd3773 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe5fe71e4 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe6769445 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xec6e5011 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf4e05f7f mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf8c70eef mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfd97bfae mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0f9dd02f mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x194501b4 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1eb36e2c mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2bf90b5b mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2ef3a510 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2ffedf03 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x36baa663 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x48403505 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4a1419d5 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4c75a4ef mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5dca2143 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x71772732 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7a4c9f03 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7e6b548a mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8f8bb654 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x90ce4f27 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9113ea17 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa05c8a79 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa9e89e0c mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb3647c7a mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb75a6233 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xba91f6d1 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbc92cbc6 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xcf26e6f3 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd6a1b851 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfb168ac7 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x001550f2 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x12b42c3d i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1633ef0a i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x16bcd37b i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x220da3de i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x59a168a7 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x60a1b6ff i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x690acc08 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x85a4acd1 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x8739aa36 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9331a45e i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x96d2ebcf i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb099adac i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbca57c65 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc263933c i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe6b84931 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf9284922 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xfa11313c i2o_exec_lct_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x459df656 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x72cbf7d6 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x8e76d354 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x96dedfcd ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xb71ac5f9 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xb8573268 ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xd999b1e9 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xe8e48107 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x7a5af6e0 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x9595f403 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x5e2789bc mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x80914636 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0xae658f6b c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xf2b2f92f c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x8d2c8e1a ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xec7e34f0 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x026bf296 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x17d421ca tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x4a0aacd2 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x4e4397c0 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x54d1eb87 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x5f9ab970 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x6785ebc5 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x8bb9ceab tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xa08947d6 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xbc4aba30 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xbdc0630a tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xedfff24b tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xfac9875d tifm_free_device +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0xf0105e3d mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x28be446c cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x7dd55ceb cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xcbb9bdfc cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x0c04e1dd map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x708679f6 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xad38c1ce register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xc7e1cd22 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x13812346 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0xb35dc42d lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x85fb4cfc simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x0bbcd7b4 del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0x7a5cf52b add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x292efabf mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xcc83ca45 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/nand 0x5e6330da nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x7afd7405 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x37dc752a nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x83ad91d1 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x78410787 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x7e693961 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x859169bf flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xf764e776 onenand_default_bbt +EXPORT_SYMBOL drivers/net/8390 0x281714d7 ei_close +EXPORT_SYMBOL drivers/net/8390 0x2d44cebc __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0x2e49287e ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x44067a1a NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x45b71e79 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0x46bf6798 ei_poll +EXPORT_SYMBOL drivers/net/8390 0xbce0a50c ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0xc2cab582 ei_open +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xe7226a35 ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0xff786f74 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390p 0x01b54a4a __alloc_eip_netdev +EXPORT_SYMBOL drivers/net/8390p 0x4c7868e9 eip_tx_timeout +EXPORT_SYMBOL drivers/net/8390p 0x4c9284d8 eip_open +EXPORT_SYMBOL drivers/net/8390p 0x548c93c5 eip_poll +EXPORT_SYMBOL drivers/net/8390p 0x63837ff6 eip_netdev_ops +EXPORT_SYMBOL drivers/net/8390p 0x777df96a eip_start_xmit +EXPORT_SYMBOL drivers/net/8390p 0x8ba0b9f9 eip_get_stats +EXPORT_SYMBOL drivers/net/8390p 0xa327f40c eip_close +EXPORT_SYMBOL drivers/net/8390p 0xb04bf3f9 NS8390p_init +EXPORT_SYMBOL drivers/net/8390p 0xb663e226 eip_interrupt +EXPORT_SYMBOL drivers/net/8390p 0xf1b23943 eip_set_multicast_list +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00f1b510 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x12137295 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x1980fc9e arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x64778d3a alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa8594953 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xc226078d arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xceb284c0 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd208fb78 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe54f047d arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xea9c412c arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x2b796212 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x30449ef3 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x3f2e6f0a com20020_check +EXPORT_SYMBOL drivers/net/bnx2 0x5249a5e4 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x257f1fb2 cnic_register_driver +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x0c505c41 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x0ecabf72 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x137ed82a dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x2bd6a21d t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x40d78b26 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5fe4b908 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x7bb7136f t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8594e873 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8e74f15f t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x9bcc51d0 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa23048cc cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xab3f40c1 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb6fa1797 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb70a6bf8 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xca52b27a cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xdafcb26d cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x7d6c3d8e hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x90e75723 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xa751603b hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xdf88111b hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xe465c734 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x0dde50a4 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x18084328 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x22eb315d irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x35de8d93 sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3af327f9 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x80049519 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xa3ec7a3b sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xaee3073a sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd0a107ba sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xda786bbc sirdev_write_complete +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x026acbac mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x11db2e7c mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x2cd1c53c mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x625ae9cb mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x64faa82f mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x7bc1db27 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0xa7755eeb mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0xcd770d94 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x1f4beafb pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x8a009e02 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0xb17da3c3 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0xc07e0dab mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x0380228e tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x0c5e6ed2 tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x19cf997f tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xbe050e71 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xed267d74 tmsdev_term +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x1c2def5e unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x3684f3ce hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x435b99d4 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x789bd5a1 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x85e2fcf7 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa0f08411 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0xae966e29 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb413b48b alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb9ce016f hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0xcfe7f293 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0xea71ab5c hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0x0039e781 z8530_shutdown +EXPORT_SYMBOL drivers/net/wan/z85230 0x0730e5a9 z8530_sync +EXPORT_SYMBOL drivers/net/wan/z85230 0x0d4fd7a9 z8530_null_rx +EXPORT_SYMBOL drivers/net/wan/z85230 0x10c78988 z8530_dead_port +EXPORT_SYMBOL drivers/net/wan/z85230 0x204a8462 z8530_queue_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0x213abac6 z8530_interrupt +EXPORT_SYMBOL drivers/net/wan/z85230 0x547841f8 z8530_describe +EXPORT_SYMBOL drivers/net/wan/z85230 0x57e33cc5 z8530_channel_load +EXPORT_SYMBOL drivers/net/wan/z85230 0x5cd24d29 z8530_hdlc_kilostream +EXPORT_SYMBOL drivers/net/wan/z85230 0x63c0ee8f z8530_sync_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x9bd4c071 z8530_sync_dma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x9dfac54b z8530_sync_open +EXPORT_SYMBOL drivers/net/wan/z85230 0xa5ca1938 z8530_sync_dma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0xd307bf77 z8530_nop +EXPORT_SYMBOL drivers/net/wan/z85230 0xd5d8970f z8530_init +EXPORT_SYMBOL drivers/net/wan/z85230 0xd9661e81 z8530_sync_txdma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0xe3d80064 z8530_hdlc_kilostream_85230 +EXPORT_SYMBOL drivers/net/wan/z85230 0xeb3ccebf z8530_sync_txdma_open +EXPORT_SYMBOL drivers/net/wireless/airo 0x3f463a3d stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x7dece208 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xc2f48652 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xafe820b1 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xc7503ab2 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd4087dcd ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0x252f9a9c atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0x38606f6b init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x937fa582 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x01615048 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0a4a47ef prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1224011a hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x13a93658 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x15e1be1f hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x15eba94f hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x217f0092 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x291160cd hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2b0c8f7b hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4c92ae39 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x58a1f52f hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5cc86a3c hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x77863d8d hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7f55a924 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8e6225b5 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x984bfe5f hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9abd70b8 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xab87eb70 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc42f7bab hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcf19e8d0 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd07d6097 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xdc7c4b5a hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xdd25ea26 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf2ca49b3 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf4d6e626 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfc81caae hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0607b777 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0e97790f libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x19650ce5 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x2861ffdc libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5b6cc11d libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x64548918 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x870b2140 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x90d436a3 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x910fe533 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x94b4bb10 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x99287aff libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x998f1a60 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9aba3d85 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9d417a84 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa1d779a8 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd2a3b123 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xda15071a libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xdb83a8d4 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe1526377 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xeaf6c549 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xed12722d libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x02c50081 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0667c7f9 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x08c51c1b iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f802e49 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x106c3701 iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11190063 iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1354b424 iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x14411e52 iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x16550aa3 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x169fd2e4 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x16b14163 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x17de2e97 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x191e6fe8 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1da25af7 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e0cb677 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e32e88b iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24439aff iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24b8cd12 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x27cc0a78 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x28196207 iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2895851c iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2f0eac39 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x342aa93a iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x350334a4 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x35c81152 iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3640ea63 iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x37540931 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3759a581 iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x375cc423 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x381359f7 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3b79e10a iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d0bc5b4 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3f02a969 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3ff6f18e iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x403cb351 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41bdf209 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4569f3f5 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x45fe9663 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x47441677 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4a990b8a iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4d0496e9 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4df2b6c7 iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4ee54e26 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f4f70d5 iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52aefaa3 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x563ddcc3 iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x56502d9b iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x581d852a iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5b9333a9 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5c72d6c1 iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60774702 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x61b4b482 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62727d56 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x657e7f68 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x678bb661 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x682b7a8b iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6aad9ee9 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ae7641e iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6bf819a1 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6df5bffe iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6eabadb5 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ff9d596 iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x724eda7f iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75a44bb7 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75db4b8c iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x77b965d5 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x77c47472 iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x79abb782 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7a75125a iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7abb5d23 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7b014901 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7c2c60bc iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7e689578 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x83c01cc7 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x87db9c6c iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x89027c45 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x89a9fb88 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a59de10 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8bfa4c08 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8c7dad02 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9464ad2c iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x95c418fc iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x975f03f8 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a60af0b iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a792029 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ac50d72 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9b0b9ddf iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ce5af2f iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9d996f80 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e212cec iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e86e8e0 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ee64a68 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa20b12db iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa230966b iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2fac817 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa3ce3091 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa99e24be iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaad0846e iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xab00e2ba iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xae505681 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb13d9c77 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb1ce6a18 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbb276140 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbc4de553 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe6e2e6a iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbfb42f30 iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc176f822 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc21ec160 iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc614fe44 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc68803e1 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc902add2 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xca26b9a9 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb0e082c iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb956091 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcc2927fc iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xccb1f775 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd0eb4c81 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd3397e70 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdb1a1b42 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdb20eb2d iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd1a36ac iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd2feae4 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde0a5d86 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde456e09 iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdfcd4d69 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe00822df iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0c6502c iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe21291f5 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe2caceed iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe5aabdcf iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe5fc8680 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7c06ca2 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe9bd9110 iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeb2b2b81 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xed473b6f iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xee538ad6 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf4823f9d iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf79cfff0 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb18930c iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfd727937 iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfdbe5363 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x2f3ac1a5 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x5cbc2816 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x97f56e35 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xb6e69241 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbb0f1c4e orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf773af7f orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xfd364f05 orinoco_down +EXPORT_SYMBOL drivers/parport/parport 0x1dcecf3a parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x537ac91b parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x5602f956 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x59a990a2 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x5e198200 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x67ee9ff0 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x6f6b87d8 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x787f3547 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x7b758916 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x8c03ac82 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x90212dee parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x923273a2 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x93cd8015 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xa9a6b429 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0xb66898be parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0xbc291f78 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0xc4d4e194 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0xc530e897 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0xc895288f parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0xcbea0d3d parport_write +EXPORT_SYMBOL drivers/parport/parport 0xccd6dbc4 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xd365cc3d parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xd47521df parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0xdb8964fa parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0xdd44fe1d parport_claim +EXPORT_SYMBOL drivers/parport/parport 0xe27c93d1 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0xe4a7a4cb parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0xee727369 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xf14408ce parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0xf49c9ff4 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x1aac9760 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x902ff10b parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x0a237246 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x0b3e66de pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x33728539 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3e4c767b pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x41bc2531 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5da56649 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x667a0dc3 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x66f6242c pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x88871560 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa38e21ab pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa3fe97b2 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc9af0900 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd7914e44 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe4595b97 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xfbaed2e2 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x14d12a24 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x16adf0a6 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1bd98c9b pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3d67b2d1 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x418a95b2 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x426c1398 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x47985679 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4aaab87a pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x520cea54 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x527bd7e6 pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x566b96e0 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5984f05a pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f42a69d pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x62635d2b pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6f74e275 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7a09bf6f pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8492b49a pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x84d7dbd2 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8ee37308 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa445e92a pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa765c66a pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa78a986a pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa932fa45 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb353a6c1 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc4129571 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd381cee3 pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd6fc201c destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe2af7675 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe4c7e3e1 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe706452e pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe7fb3462 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xebd001fa pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf18a6854 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x4d3db6ef pccard_nonstatic_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xd9a47548 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/53c700 0x55b92610 NCR_700_detect +EXPORT_SYMBOL drivers/scsi/53c700 0x761e7739 NCR_700_release +EXPORT_SYMBOL drivers/scsi/53c700 0xf13d9adc NCR_700_intr +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x12b4ac53 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x1685416c fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x23f43de6 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x5783b813 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x6f0593d2 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x876a612e fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xf7d1ffe1 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x028ba6d7 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x03612dc3 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x08344367 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x09304699 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0bda63ae fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x15378a4d fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2193efdc fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x25166212 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2777b17f fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x27ae3b80 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x28c4f7c7 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x29117115 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2e149314 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2ff343d5 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x379e8203 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x44dc0017 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4f86822a fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x598e49aa fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x59ca661d fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5b941bbf fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x83db5fab fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x99424d85 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x99cc5878 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9f55dd7f fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa379cfb1 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa6d4a9eb fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xab341b05 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac909348 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb0e4105a fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb4f3588a __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb6c78af6 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb8f216f8 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb93ed7b9 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xba195b61 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbfca6167 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc1b245a8 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcd19cb78 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdafbb9e8 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdb9c7b32 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe57ad938 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf424c404 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfa4c3233 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x43808bba mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1379eacc osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1515173d osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2041c1f9 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2665a27d osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2ce1c809 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3822aa0e osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x40f27b15 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x51838d5c osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5af15d21 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x64758ae8 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x64b4de48 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x67132f9d osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x71e20853 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x75ca594e osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x764ba5c8 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7ec28f7f osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8c5d20f7 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8fde5e72 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8ff92931 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa2277b8a osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xaa43adcb osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb0527ace osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb4b6aa20 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbb3dbc24 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbc096982 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc1d669bd osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc1e07752 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc607a26a osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xcbd2a3b5 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xde62d1dc osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe9b610fb osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf12b37b3 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5e4d002c osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x8525bbe1 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x9a96532f osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x103af4bf qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x4ece3194 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x4ff1fcfe qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x9bf71842 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xafa6d36a qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe90c1643 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x477525e7 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x7f4893b2 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0xedd3c00a raid_class_release +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x175ff078 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1819e4fd scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x2045f904 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x54baab65 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x56b231d9 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6974e664 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6ddfa7b4 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xbd18a34f fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd1f11dec fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd2a12a90 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe0da03fd fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe37bd92e fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0d57e7c9 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1b726383 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x28cc0b76 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2d427572 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2e12da0a sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x33be4f93 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x46907850 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4e399dea sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5798ba10 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x59979f84 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x71575a66 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7d7c6a3b sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x81ae5128 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9a393a8d sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9c2b1117 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9d6d639f sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa8f81c10 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb45ef455 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb84ea1c8 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc5ebaa12 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc7a26ae2 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcadcb645 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcca58323 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd7e66222 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdee16636 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdf8ff6e9 sas_port_alloc_num +EXPORT_SYMBOL drivers/ssb/ssb 0x0936d17e ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x0b77b376 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0x30954933 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x35734628 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x5411b7e6 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x5aad473b ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x6103f9a1 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x6f0e97c5 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x786a62fc ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x96a05d4a ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x9b13ad22 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x9fa793ca ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xb5f35bf9 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0xb61be89b ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xca312463 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0xcdf27b8b ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xd19a3a17 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xdb88f5c6 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0xe1bdfa74 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xe970e121 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0xec4e0720 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xfca64e56 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x031a824e comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0c5d211a comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4054f339 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x44af2230 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4f5d3c86 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x62f51b76 check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x68669e1e comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x7110ea46 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x816a4fc2 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa1152d0c comedi_set_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb1409587 comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb3d0db62 comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb8b31765 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbe128fe1 comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdad7e588 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdfbddb64 comedi_reset_async_buf +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xe30a56d0 comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x35434005 subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x575099e6 subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x721e53e1 subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xf850659f subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x090d251e cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x9aff4b5e cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xec528100 cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x0bb1bdfd mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x0dfe4229 mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x0e59bab0 mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x2fcfc7d8 mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x47ebf6e7 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x49372139 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x5c67ff25 mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6845827a mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6928a17e mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6e3a80f3 mite_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x70d3aff4 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x717a14fc mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x790047c9 mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa827dcf5 mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xabaa5eb2 mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xae9a5861 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xb0eda003 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd8c97760 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xdcf3a3cb mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe3e4b121 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfb3ba025 mite_list_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x1fcdb029 subdev_700_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x4b126068 subdev_700_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x657e178c subdev_700_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xbff4bb8d subdev_700_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x7ddd7675 comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x042d55f4 comedi_loglevel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0488ce0e comedi_get_n_ranges +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cad1c36 comedi_get_subdevice_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x13e3042c comedi_command +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x194eb4ae comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1c5555d9 comedi_cancel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1ec0e2d3 comedi_get_buf_head_pos +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x22318694 comedi_set_user_int_count +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x262e9c18 comedi_dio_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x370d69d5 comedi_dio_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3cb614fc comedi_data_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3db41e4f comedi_poll +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3de6a4a3 comedi_get_buffer_offset +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x409d3263 comedi_do_insn +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x51da786d comedi_register_callback +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x52769094 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x628ed463 comedi_get_n_subdevices +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x671c2623 comedi_get_buffer_size +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x696272c9 comedi_unlock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x826bd656 comedi_data_read_delayed +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8e199bbf comedi_perror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8fb4413e comedi_data_read_hint +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9b266320 comedi_get_krange +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9dde39b5 comedi_strerror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa0334b40 comedi_get_driver_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa094eab0 comedi_get_board_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa7c55c52 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xaa456501 comedi_mark_buffer_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb45b8b7b comedi_mark_buffer_written +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5396dad comedi_get_maxdata +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5c3ac2a comedi_map +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc4ec62b3 comedi_get_len_chanlist +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc7d949df comedi_lock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd2a9a259 comedi_get_version_code +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd46a9468 comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd48facbb comedi_command_test +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xddd89421 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe2208940 comedi_data_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe38c6fb4 comedi_unmap +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xed5731a4 comedi_get_subdevice_flags +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xefd0c778 comedi_fileno +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf17e03df comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf71581db comedi_get_buffer_contents +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x1e6f738c cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x31d1c4e3 cx25821_dev_unregister +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x440a14e5 cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x55bf65f7 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x7132993e cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x9839acc9 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd86c861b cx25821_dev_get +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xdaefd751 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x1cb36e36 vmbus_child_driver_register +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x1f07d908 vmbus_child_driver_unregister +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x253f3d14 vmbus_get_interface +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xdf1a5ef6 vmbus_loglevel +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x05ed09d7 iio_free_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x104fe173 iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x237df211 iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x2a154eaf iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x57cb0549 iio_class +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x60f7253a iio_free_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x6ff701ec iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x71c0124b iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xa9dd9d00 iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xaafbec0b iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb6edaf14 iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb87b0bb0 __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcb842df9 __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe8e3edae iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xeece632e iio_allocate_device +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x0a8d02c1 variax_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x3bf07bd6 variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xc49e0f63 pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xd3b28e34 pod_remove_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x1253add4 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0x1ebe2dbe vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x330a1231 vme_new_dma_list +EXPORT_SYMBOL drivers/staging/vme/vme 0x3c78bde5 vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x3de595e0 vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x41862ad4 vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x43c02741 vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x5721b610 vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x5af57424 vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x6025034e vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x6666140f vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x6845416f vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7736e05f vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x7fde2edb vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x90695906 vme_free_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x9322a099 vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8856ca8 vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0xcc5b0af0 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0xd797b9a5 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe0a1f753 vme_bus_type +EXPORT_SYMBOL drivers/staging/vme/vme 0xe31ffafa vme_unregister_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe61b1e0b vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe693a6ce vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xee36386d vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0xf91faf27 vme_unregister_bridge +EXPORT_SYMBOL drivers/telephony/ixj 0x76279010 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x70caeb4a phone_register_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xd7c3bc0c phone_unregister_device +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x21e9e47b usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x3f111e33 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x6ac97306 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x5fe08141 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x3df97084 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x83da626b usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x56e890ad lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0xf7f12b44 lcd_device_unregister +EXPORT_SYMBOL drivers/video/console/bitblit 0xe52de121 fbcon_set_bitops +EXPORT_SYMBOL drivers/video/console/font 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL drivers/video/console/font 0xbb99125c get_default_font +EXPORT_SYMBOL drivers/video/console/font 0xf7584a9c find_font +EXPORT_SYMBOL drivers/video/console/softcursor 0xbda2c2f7 soft_cursor +EXPORT_SYMBOL drivers/video/console/tileblit 0x438da8ea fbcon_set_tileops +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x196adaa8 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x6f3b15bc cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x7080d561 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0xfbe83dbd cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/display/display 0x2e01e3c5 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0xfe40e88e display_device_unregister +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0x85a37a85 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x1be64fd4 g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x78170111 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xdf14e62b matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x005a8e02 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x33372a76 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x8e2e3ce3 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xdabbe680 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x09e07cc7 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x125f1de7 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x8506809e matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xb892837a matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xbba93648 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xc489052e matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xc5b00085 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xe8cd1a5f matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x6e343695 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x7ece06ff matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xc5968b0a matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xd4e32e28 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xdbfeb543 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/output 0x3f513bd4 video_output_register +EXPORT_SYMBOL drivers/video/output 0x4d3898c4 video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x72e94b22 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x9eec4191 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x9f296bc4 svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0xa2a5d0f4 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xc4fd49ce svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xc560dbbd svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xd880cf22 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0x3702acbf sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xe426b35c sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xccf12c06 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x71ed0080 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x988a849a w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x041b1f1d w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4b42af54 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x672561b1 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb8befa67 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/wire 0x0d4cd5a4 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x552ef363 w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0xd4c99c04 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xf6b78529 w1_add_master_device +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x07058d0a config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x0f1fd5d4 configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x122b8c11 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x16d51693 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0x1ace8327 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x426ba3fb config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x445b2b2f config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0x6ee6b40e configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x825887c3 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x9928b718 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0xde330c9f config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xf3be71a3 config_group_init +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x0898b625 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x0938764e fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x0f0c2891 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x103b266f __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x1b1b5eca fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x1c12c986 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x2292ce82 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x325cea56 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x34f6a6ec fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x3a2bf0fb __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x3c5aad07 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x5c387b89 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x5f01d6c9 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x63f96884 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6665c523 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x6a2fbd47 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x7af5fd95 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x9ede4b27 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xa9f0d19c __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xb15ab439 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xb9012088 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xbf6ce671 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xcda3ecae __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0xde32e088 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0xea91ea9d fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0xf9f96781 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0xfd857ac3 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x03e9e506 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x21530869 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x53190fdd qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xb86f3af9 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0xcef2f0e1 qtree_write_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x76938bf9 make_8023_client +EXPORT_SYMBOL net/802/p8023 0x9e5c2e77 destroy_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x0dbdb2c3 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x196a152d v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x200589d5 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x25eb5640 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x3455711e p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x48049074 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x4d0ef50b p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x68651574 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x6b754e6f p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x719c88d0 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x740a064e p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x78f6d503 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x8da1ddd5 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x963d3dac v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xa5b15abd p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0xa9c27fdf p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xa9f47f4e p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0xaab8671a p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0xb362cf30 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xb8e39195 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xb9e1d0f8 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0xcae61af3 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xd0faf92e p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0xd331fc1d p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0xdf490988 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe78cfc2b v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0xef7127b0 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0xf1f5fd53 p9_client_destroy +EXPORT_SYMBOL net/appletalk/appletalk 0x11d2c148 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x607ef768 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x6a117150 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0xba5aa3c9 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x1e80c07a atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x4bfb1d0e atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x5f71480b atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x6d1ced27 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x8111d9ed atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x8580c122 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xaf526828 atm_charge +EXPORT_SYMBOL net/atm/atm 0xb44224a8 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xbc9d0261 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0xd3d5dee1 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0xdb0834c7 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xe70adda1 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/ax25/ax25 0x1becf1ec ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x5f17d8be ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x653ca68b ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x7379eb8e ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x82a5e109 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xa3be9d82 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0xa44b93ed ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0xb31f6527 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd2b2a068 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0ec56d6c hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x16400409 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1797b3db bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1ef9f749 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1fad3524 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2a1f7e9b hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2a56cec6 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0x32fc7ced hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3d543a56 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7b8039b7 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0x81b3cf6e hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x89846a13 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9f303703 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa33a198e bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa8aff60f hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb57ecf4f hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc1f33e21 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcd2bacc9 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd16fe762 hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd54faa0b hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd82a760f hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0xdc98abee bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xdf704671 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xdfcd22dd hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe3e6ffa4 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe49bdfa1 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe8a41adb bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xee47f9bf hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0xef5be4f2 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf54cba3e bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf96dfdb5 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x422597a5 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x0ed4ee90 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xc4c9a4ce ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xfa47c90d ebt_unregister_table +EXPORT_SYMBOL net/can/can 0x1bdb4b37 can_rx_register +EXPORT_SYMBOL net/can/can 0x7631cbd3 can_rx_unregister +EXPORT_SYMBOL net/can/can 0xa5c2c0c7 can_proto_register +EXPORT_SYMBOL net/can/can 0xd41dda09 can_send +EXPORT_SYMBOL net/can/can 0xeedd60f2 can_proto_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x183cd298 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x49963eb2 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x6ac4f9ef ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x734e93a5 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x7c58e849 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xdb9c11f0 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xf0664a4d ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/wpan-class 0x21427a32 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0x4416f6cb wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x9d540708 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xc46790e6 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xf21c3ecf wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x1b0696df arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xdeb9cfe8 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xf0c68ebe arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x10fed9d9 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xb914e6f1 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xc268f7fa ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x13f5229b nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x17550e76 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x1e693af6 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2a2e5876 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2cb2aece nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x345e4482 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x9590ae02 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/tunnel4 0x3a5063b4 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x5aeb4015 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x182b8899 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x6f8d5af8 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x75b2d1e0 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xd9a24931 ip6t_do_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x101c174d xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x2f27863a xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x083a862e ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x2495805e ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x4fb883e9 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x567aa65c ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7b1b2572 ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7b6e467f ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8f42f423 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xdb6177c4 ircomm_control_request +EXPORT_SYMBOL net/irda/irda 0x01d1fcdb hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x027d8577 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07088b18 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x072e026f irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x0ea6e536 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x1de89ff6 irlap_close +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x3462950f hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x3f1a320e irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x421bac13 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x45e2f43e irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x5d7e5fa0 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x6758f8ac irias_new_object +EXPORT_SYMBOL net/irda/irda 0x68b7447c hashbin_find +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6e40aeb8 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x747d6779 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x753e4f84 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x7621e908 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x76243bc9 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x781e2db5 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7a57b6f3 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x80d19d75 iriap_close +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x9379a576 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9fafb98e irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xa1c26cb7 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0xa1f099b2 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0xa7d9b1aa alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0xb4dfa323 async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xb5613e3c irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0xb677fd50 irlap_open +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc00d3d7a iriap_open +EXPORT_SYMBOL net/irda/irda 0xc14e9b6a hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xcd41236c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xd7172ff4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xd8bfb6d4 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe5260e0e irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xe5d1955a irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0xe8e601fb proc_irda +EXPORT_SYMBOL net/irda/irda 0xe927dcaf irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xe9cd1f3a irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0xec41fe7f irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xee1c149c irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xf751a6c9 irttp_dup +EXPORT_SYMBOL net/lapb/lapb 0x38239232 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x51e793cc lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x59838017 lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0x8fbdccd2 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x92e542d6 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0xac10a899 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0xbb817891 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0xcaf011c5 lapb_register +EXPORT_SYMBOL net/mac80211/mac80211 0x050dec04 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x0c833cb1 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x0fb9ca06 ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x111fc3c6 ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x1a9742c2 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x1cbfdd46 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x1d00b873 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x21f3138d ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x22b9683f ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x2b73507f ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x2eeeef16 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x32ab1c32 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x3664b47c rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x48a798fb ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x531fb233 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x53691bae ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x57d90b29 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x5880353a __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x5c48d1a5 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x80383fc0 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x84e92077 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x8a127010 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x8fcf9ce0 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x923e06f1 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xa045d687 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xa09d05fb ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xae05f7f9 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xb05d2713 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xb346e2dd ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xb70c268e ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xbadb5915 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xc1db7294 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xcca82b24 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xcda10e51 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xd739f975 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0xe47abd16 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0xe70b6911 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xe7d65b06 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xec362dea ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xf8052917 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x07fd7038 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x108623a4 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x18218ab3 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x23044608 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x43cef41d ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x54a86ec3 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x5d255923 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x7706e289 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x82b3e8d2 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x8d6369da ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe199eabd ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x40a7d65f __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x921faac4 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0xcafcf35c nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x14874c58 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x21a4f966 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x26425a63 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x3bb15687 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x3c2e6344 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x7c55964a xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x84ab6130 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xad05fd86 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xb0155000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xe1aebcd8 xt_unregister_match +EXPORT_SYMBOL net/phonet/phonet 0x1856ace2 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0x2dc1d2a4 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x33e2fd4a pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x8fd052bc pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x9917709f phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x9e338850 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0xba5675c5 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xdc8a52c9 phonet_proto_register +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0bb1fbcf rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x18112746 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x1f76cbc5 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x22d2bf08 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x28a78b31 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x46c55fa9 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4e1d8475 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4e6c38be rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x51761d56 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x59db972d rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7ee3ae57 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8084736a rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb4fc465c rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xdfd20ce7 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe311f028 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/sunrpc/sunrpc 0x4411f12a svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x27d8bb58 tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x29b9919b tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x328e7c34 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x40b8cc2b tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4ba3cfc8 tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x56e52bc1 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x64357d3c tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x66aff4c9 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x8001e3d7 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x94010a90 tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa936a24b tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xadd7991e tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb01ffc2c tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xb0e1e26a tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0xb2c5bcea tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xbb2b2504 tipc_send +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcfceefe4 tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe4e3db02 tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xe9bc51aa tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x32d09012 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x282ead4d wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x778a547b wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0adb3a33 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x0c869c51 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x12054c96 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x15e8c4d1 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x174b47ae cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x1dd2853e wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x24fed17f cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x349228b6 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x39a2b583 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x3c8278b6 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x5453dce5 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x5c840cce regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x69fc8e8b cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x77692357 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x82528fc3 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x84a5d819 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x8805ff0f freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x885808cf ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x90eb5e02 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x919d4665 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0x987ddf3b wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0xa4e60521 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0xa881f993 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0xb4ded7b7 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0xbbdab883 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xc187763f cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc4ffb13b cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xc569cc6d cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xc931a03d ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xcd59155e cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xd35e4e77 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xd88621e7 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xe3d348d7 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xf4ec280b cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xf6259b4c cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0xf6fd386a cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0xfa1434c6 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xfa67da82 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/lib80211 0x0297697a lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x1b52ae1c lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x29032852 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0xb41b6f19 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xbb86eb8e lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xbc6ad4ff lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xecbaa1e6 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xf1c559a6 lib80211_register_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x0ed108f5 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x29d9e332 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x4a59982f snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x71808e2b snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe4dc6031 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0xf168e790 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6c43b78f snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb84e1d1e snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x17c15809 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x4ad3f518 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x62384d3a snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8a348811 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9df7af8b snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc482499d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd9072e1a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe6df29c7 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0xec10df7f snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x1538b82f snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x17858764 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1a583829 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x1cccc76b snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x1e40ab80 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x2174f29b snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x2c0f822c snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x2e646ea9 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x33477d52 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x35f63fe5 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x4277bda4 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x432b32e0 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x47cf2431 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x549cb054 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x5b293ed2 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x5c5582ec snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x5cc63352 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x5dbb55c1 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x630b0410 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x725bba84 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0x807979fb snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x811afa12 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x88831377 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x98e23cff snd_device_register +EXPORT_SYMBOL sound/core/snd 0x9934fff5 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x9dd569b3 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x9e6795b7 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa5f67d6a snd_cards +EXPORT_SYMBOL sound/core/snd 0xaaaa22e8 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb45a2526 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xb4efa45f snd_card_free +EXPORT_SYMBOL sound/core/snd 0xb7041e40 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0xbb8b7cd2 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0xbcc1e997 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0xc3258b4a snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0xc32bd18b snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xd5955edd snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xd98b738b snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xd9debfd5 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xe1c9cc14 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xea7e5f4c snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0xed8b07ef snd_device_new +EXPORT_SYMBOL sound/core/snd 0xf58304c5 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0xfab63bf0 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0xfd86fe94 snd_card_register +EXPORT_SYMBOL sound/core/snd-hwdep 0xebcae46e snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x083f5f26 snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3e1ab74b snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x551e5d0f snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x67ed0b2b snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xee1a907f snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0dff607f snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x1285d264 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x14186a72 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x172c23db snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x20b2142f snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x20cf7556 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x21417896 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x2ae39c45 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x2ba1ffc1 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x2df80d4f snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x2fb368ec snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x339aa264 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3b3083bd snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x4227d44a snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x44673d5a snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x453d738c snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x46ab223e snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x4941cdca snd_pcm_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4a55c911 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x4a648b56 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x78174fe7 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x88cc66cc snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x8b136742 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x8f879af7 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x93780ea9 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x9c0293ac snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xadd1f2d9 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0xb11216ee snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xb6ed2e98 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xb7bf9ca3 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbeb3610b snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xc2b50d73 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd4ef3084 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0xd6150826 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xdc1cdc20 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xdfda0786 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xe390bd4d snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe5836fe6 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xef61f319 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf62a1ef1 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1546075d snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x29465c57 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2abfb035 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2ce31f7e snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x370e1a5c snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x39165083 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4ceeec31 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x611b8c1f snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x668f0a64 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x970bf008 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb857e1b5 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcc2b0567 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcd31fcd1 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xda27ea6b snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdd7fca5b snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdd88075f snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe3dbc457 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-timer 0x1b614600 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x35222d1a snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x7b19eba2 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x8131afe2 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x92cfe528 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x9bd8be97 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xbe846393 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xc05db0ca snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xc80ee2bc snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xe1be58b2 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0xe97aa95b snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xfab82b12 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0xff5c5fe8 snd_timer_notify +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x5b7888f6 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x0aba9305 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x1af37d10 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x2ca6802d snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x385678bb snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x388f8260 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x7f18305d snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xeaf5af91 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xefcfd38c snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xfac4f91f snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x12c6f7b3 snd_opl4_create +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x2735fd56 snd_opl4_read_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x8fcd1bb9 snd_opl4_write +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xe119a559 snd_opl4_read +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xe97fe089 snd_opl4_write_memory +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x1ec828e0 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x226455aa snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x3f5f5c4f snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x5522c05f snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x7457c1ed snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb80347c3 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xca72352b snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xcf54eeab snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xf125d57f snd_vx_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x0eb98191 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x13aae1ef snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x26aa0a34 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x3c106eb1 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x3da3a3cc snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xf4dee83f snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2d25733c snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x8bf3dd42 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xa40d727b snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xac97b885 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xbda735b3 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xbea08b24 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x003ea408 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x783f6876 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xae1b8dda snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xbecbc25d snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x650dd672 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xcc75ba33 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x35930262 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x3740119f snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x5c512788 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x81003621 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x8eeddd2f snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xce2c4d50 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xf040d9bf snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-i2c 0x377b8273 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x57dd31a5 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x75d88a0f snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x8ac37e2b snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xcbcb47d1 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0xe644a0b6 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x1d07becd snd_tea6330t_update_mixer +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0xded2ae01 snd_tea6330t_detect +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x118c59fb snd_es1688_pcm +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xc78f637c snd_es1688_create +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xd19d066b snd_es1688_mixer_write +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xffa23abc snd_es1688_mixer +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x097b8891 snd_gf1_alloc_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x0aaff383 snd_gf1_ctrl_stop +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x0c6304a0 snd_gf1_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x18858f08 snd_gus_dram_read +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x2e7e0257 snd_gf1_stop_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x32fedf0c snd_gus_dram_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x36eaf8c1 snd_gf1_rawmidi_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x39a4ef88 snd_gf1_poke +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x3a5d61e0 snd_gf1_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x46db8d67 snd_gf1_lvol_to_gvol_raw +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x475b3fe3 snd_gf1_mem_lock +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x47c584cd snd_gf1_mem_alloc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x516e630a snd_gus_use_inc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x584d4a89 snd_gf1_mem_free +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x5f6f01d5 snd_gf1_mem_xfree +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x6645148e snd_gus_use_dec +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x7072f607 snd_gf1_i_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x74bdddf8 snd_gf1_i_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x81918fde snd_gf1_i_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x896ce4c5 snd_gus_interrupt +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x9758c671 snd_gf1_peek +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x975d000e snd_gf1_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xa2ef0934 snd_gf1_pcm_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xa80d9052 snd_gf1_free_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xaff8fd63 snd_gf1_dram_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xb7646ff8 snd_gf1_write_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xbd4d4077 snd_gf1_translate_freq +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc047d24f snd_gf1_delay +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc43a5527 snd_gf1_atten_table +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xca6bea8a snd_gf1_new_mixer +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe2946f88 snd_gus_initialize +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe3c54876 snd_gus_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xf580c2ee snd_gf1_write16 +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x08ab1eca snd_msnd_DAPQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x0e096be3 snd_msnd_init_queue +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x3ee34cf9 snd_msnd_DARQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x4b6211a8 snd_msndmix_setup +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x75026b24 snd_msndmidi_input_read +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x779a9e01 snd_msnd_send_dsp_cmd +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x9372fb37 snd_msnd_disable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x9f1cac69 snd_msnd_dsp_halt +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xa4b101a0 snd_msndmix_new +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb2727259 snd_msnd_send_word +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb4775f99 snd_msndmix_force_recsrc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xd2735b30 snd_msnd_upload_host +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xf54db9df snd_msnd_pcm +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xfb79fa6a snd_msnd_enable_irq +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x06b26ff3 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x11f7d47b snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x1b739b1d snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x2b7ed562 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x3b2bdc9b snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x4e953ead snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5476d9a1 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x57c7d338 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5a673e2e snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x6f364b2a snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb16-csp 0x8241425b snd_sb_csp_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x705cbb63 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x864c22d5 snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xfdf17716 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x11015e89 snd_sb8dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x34510780 snd_sb8dsp_midi_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x9cdd6784 snd_sb8dsp_midi +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0xda50cbfe snd_sb8dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x26762df8 snd_emu8000_peek_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x3f0e6dd2 snd_emu8000_update_equalizer +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x8dee8074 snd_emu8000_load_reverb_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x9990c106 snd_emu8000_dma_chan +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xc3f1e0a8 snd_emu8000_update_chorus_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xcb8452f2 snd_emu8000_peek +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xcfa08120 snd_emu8000_update_reverb_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xdb13027e snd_emu8000_poke +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xe2533fd9 snd_emu8000_init_fm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xe2cd1162 snd_emu8000_poke_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xfcfd22fe snd_emu8000_load_chorus_fx +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x127ab3e8 snd_wss_put_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x3b7854a7 snd_cs4236_ext_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x44a8f836 snd_wss_mce_down +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x521496d7 snd_wss_create +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x535f8b5b snd_wss_overrange +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x56e08692 snd_wss_free +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x5c610657 snd_wss_chip_id +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x7b3fb501 snd_wss_get_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x8e067093 snd_wss_mce_up +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xa4ace9b5 snd_wss_pcm +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xac1b246f snd_wss_get_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xb5e06884 snd_wss_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xb8cba151 snd_wss_timer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xc3a47fbc snd_wss_info_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xc4cf601d snd_wss_get_pcm_ops +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xc55e2286 snd_wss_put_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xd0cc97b1 snd_wss_mixer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xeae7ff5d snd_wss_info_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xedbab760 snd_cs4236_ext_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xee5023e5 snd_wss_interrupt +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xfdcf023e snd_wss_in +EXPORT_SYMBOL sound/oss/ad1848 0x015a1b4f ad1848_init +EXPORT_SYMBOL sound/oss/ad1848 0x26c427ee ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x55262c70 probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xbacd06c9 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/mpu401 0x07039e0d attach_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xd9ec5db4 probe_mpu401 +EXPORT_SYMBOL sound/oss/msnd 0x1186f48f msnd_fifo_read +EXPORT_SYMBOL sound/oss/msnd 0x234f64e0 msnd_register +EXPORT_SYMBOL sound/oss/msnd 0x340a3ddf msnd_init_queue +EXPORT_SYMBOL sound/oss/msnd 0x54230dc1 msnd_fifo_write +EXPORT_SYMBOL sound/oss/msnd 0x5fb94ecb msnd_unregister +EXPORT_SYMBOL sound/oss/msnd 0x6587640b msnd_disable_irq +EXPORT_SYMBOL sound/oss/msnd 0x6601493b msnd_fifo_make_empty +EXPORT_SYMBOL sound/oss/msnd 0x8e3c524b msnd_send_dsp_cmd +EXPORT_SYMBOL sound/oss/msnd 0x9274d677 msnd_fifo_free +EXPORT_SYMBOL sound/oss/msnd 0x95d37486 msnd_upload_host +EXPORT_SYMBOL sound/oss/msnd 0xa1bcc420 msnd_send_word +EXPORT_SYMBOL sound/oss/msnd 0xade99e25 msnd_fifo_alloc +EXPORT_SYMBOL sound/oss/msnd 0xb3520772 msnd_fifo_init +EXPORT_SYMBOL sound/oss/msnd 0xdf0f59eb msnd_fifo_write_io +EXPORT_SYMBOL sound/oss/msnd 0xefdd1843 msnd_enable_irq +EXPORT_SYMBOL sound/oss/msnd 0xf4c4f662 msnd_fifo_read_io +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xc4a6710c sb_dsp_init +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sb_lib 0xe1a6fded probe_sbmpu +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1ac7e8c9 midi_devs +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x354619fc synth_devs +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xaf805224 sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xb545eb0b sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe0f7af63 mixer_devs +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xe610a667 sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf5b23f9a audio_devs +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x025b5236 probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0085a5ed snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0a10989f snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1460f046 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1ccde868 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x25bcab4f snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x262ac9b6 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x37c9830f snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4b60b9db snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7b4f96d2 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x99f2d70d snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xac4ae6a2 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb6b6de57 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd8632532 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xdbfcae4a snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xee827042 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf8005b41 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xfe787831 snd_ac97_update +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x05013982 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x0f52074b snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x1f100884 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x26e09ba0 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x70e1a149 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb31107d1 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb3a2c845 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb7290d90 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd149dcbd snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x6f8cb18c snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x45fb2bf4 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x6e125892 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x8ac5f1c1 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x04d7b154 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x3013e2af oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x39c148fa oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x3b9891fe oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x4ba9e7b9 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x60e7f2d4 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x739ec4fc oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x843471b6 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x847d5e43 oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x8f099428 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x99f19965 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9a7add60 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9f133532 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9f2a8973 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa6676762 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xaece87f5 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb8bbb5d7 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xc2f71642 oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xe0db9e11 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf5255431 oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x062d78e7 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x167bf45c snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x47a7c897 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x57090b8b snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xbfaf8160 snd_trident_free_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x7112579c uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x0e70e333 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x0f150517 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x211d458c register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x3864db3c sound_class +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xc8471a06 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xcdb69f26 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x01271571 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x31efe740 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x6a165c97 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x71cb021c snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x9fdafa37 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xe39ae88c snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/snd-util-mem 0x07bea361 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x38b923e5 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x7062f9c3 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb55887de __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xcc196ddb snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xcf67f86b snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xf3294d75 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xf7955876 snd_util_mem_avail +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x760179a9 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x031b2d0d dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x18212a1f dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x34e9b3bc dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x576d932b dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x62a437bc dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xef9c4666 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x08d0e7d9 lirc_register_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x3bcb08f6 lirc_get_pdata +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x001bf0c7 input_unregister_device +EXPORT_SYMBOL vmlinux 0x0024e8c1 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x00546468 put_io_context +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x009b7371 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x009d258f _write_lock +EXPORT_SYMBOL vmlinux 0x00a00ae8 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00ad6b67 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00db454e phy_connect +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x00e82c30 pci_restore_state +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x011df097 pci_request_regions +EXPORT_SYMBOL vmlinux 0x01471ea2 kset_unregister +EXPORT_SYMBOL vmlinux 0x01596951 unlock_rename +EXPORT_SYMBOL vmlinux 0x0167bb47 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x016de8a7 poll_initwait +EXPORT_SYMBOL vmlinux 0x0186d073 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01c19697 mca_device_status +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e9e1b5 pci_find_device +EXPORT_SYMBOL vmlinux 0x01ff9f49 kmap_atomic_to_page +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x025069ea dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x02521f42 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x0256389f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x025f84c1 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x02610fcc blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x02724e21 elv_rb_add +EXPORT_SYMBOL vmlinux 0x028eda7c invalidate_bdev +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02a828c3 scsi_print_result +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02c072e1 setup_new_exec +EXPORT_SYMBOL vmlinux 0x02cbdeef xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02e61aec simple_transaction_read +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x02fe0816 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x0324a01a eth_type_trans +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x036d4c9a pci_iounmap +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x03961767 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x03ac1e0e phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03cf77f9 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x03da3561 filemap_flush +EXPORT_SYMBOL vmlinux 0x03e2e13b eth_mac_addr +EXPORT_SYMBOL vmlinux 0x03e4c002 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x03e510a3 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x040c8ee5 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x040de881 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x04729801 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x047a45b7 secpath_dup +EXPORT_SYMBOL vmlinux 0x0480dad6 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x04859754 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x0489177f dev_get_stats +EXPORT_SYMBOL vmlinux 0x0496fa4f ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x04d23a96 dquot_transfer +EXPORT_SYMBOL vmlinux 0x04d36012 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x05147f4e skb_checksum_help +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x052f05bd sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x0543e953 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x05453ae0 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x05590cea scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x05a98dc4 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x05dae851 update_region +EXPORT_SYMBOL vmlinux 0x05ebfb1b scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x05fbaf98 I_BDEV +EXPORT_SYMBOL vmlinux 0x060bf58c scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x065f2f86 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x06677d47 put_page +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x068c7263 ioremap_cache +EXPORT_SYMBOL vmlinux 0x06931acb dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06e75725 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x06fe605f d_lookup +EXPORT_SYMBOL vmlinux 0x070f934c vfs_quota_sync +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x073625f2 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x07365942 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x073dfa12 generate_resume_trace +EXPORT_SYMBOL vmlinux 0x07608604 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x0763c67c sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x07866593 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07b9eb7d slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d50a24 csum_partial +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07e7b489 input_release_device +EXPORT_SYMBOL vmlinux 0x07f8e5a3 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x080f3267 eth_header_cache +EXPORT_SYMBOL vmlinux 0x0816b6c8 ip_dev_find +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x082e8bca vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x084ab9a3 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x0853e60b spi_release_transport +EXPORT_SYMBOL vmlinux 0x086b049f skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x086be556 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x086c7b1d lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x087772c1 sk_free +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08d87f56 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x08f5dedc dev_add_pack +EXPORT_SYMBOL vmlinux 0x09144253 sysctl_string +EXPORT_SYMBOL vmlinux 0x0933aae1 efi_enabled +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x09693176 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x096c9eea bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09ba1ca7 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09de1dcc i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x09ff94e3 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x0a00fd80 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x0a0e09b0 llc_sap_find +EXPORT_SYMBOL vmlinux 0x0a1e87f9 atomic64_add_negative +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a4244ca generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x0a77646f dst_alloc +EXPORT_SYMBOL vmlinux 0x0a812bd8 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x0a9ec97a km_report +EXPORT_SYMBOL vmlinux 0x0ab63c85 dev_load +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0b0c2dd5 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b146111 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b5b15b1 km_new_mapping +EXPORT_SYMBOL vmlinux 0x0b61a01b bio_add_page +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b75b9e2 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x0b961c82 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x0b9fb6f6 bdi_unregister +EXPORT_SYMBOL vmlinux 0x0bb2be92 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x0bc1c2d9 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x0bc89e61 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x0be910ee input_register_handle +EXPORT_SYMBOL vmlinux 0x0c09dc26 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x0c0dd7a3 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x0c0f7690 netif_napi_del +EXPORT_SYMBOL vmlinux 0x0c13275b filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c68aade __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x0c7125cd pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x0c7eb2f6 proto_unregister +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cbade9e dput +EXPORT_SYMBOL vmlinux 0x0cbebb5e pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x0cc7f37c blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x0ccb3013 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x0d21a96b submit_bh +EXPORT_SYMBOL vmlinux 0x0d232d3b netpoll_poll +EXPORT_SYMBOL vmlinux 0x0d26a76d _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0d335f67 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x0d392a7d sk_wait_data +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d4b77b7 gen_pool_add +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d6c963c copy_from_user +EXPORT_SYMBOL vmlinux 0x0d73cccf init_file +EXPORT_SYMBOL vmlinux 0x0d7ba36a i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x0d899474 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0da68f60 unlock_buffer +EXPORT_SYMBOL vmlinux 0x0dbde066 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x0e2cde27 proc_dostring +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e7e5436 sock_create +EXPORT_SYMBOL vmlinux 0x0e83fea1 del_timer_sync +EXPORT_SYMBOL vmlinux 0x0e90a4f2 remove_inode_hash +EXPORT_SYMBOL vmlinux 0x0ea4d4d8 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x0eaa9400 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x0eb91b92 module_refcount +EXPORT_SYMBOL vmlinux 0x0ebc9885 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x0ed1787d qdisc_list_del +EXPORT_SYMBOL vmlinux 0x0ed4fea4 get_phy_device +EXPORT_SYMBOL vmlinux 0x0ef889ae blk_execute_rq +EXPORT_SYMBOL vmlinux 0x0f0ce76e set_create_files_as +EXPORT_SYMBOL vmlinux 0x0f1e50b2 posix_acl_permission +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f7b1246 ps2_drain +EXPORT_SYMBOL vmlinux 0x0f8b0d29 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x0faf7d17 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x0fc07b6f sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fe14064 dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x10148cc1 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x101677e4 nf_log_packet +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10c7e226 skb_pull +EXPORT_SYMBOL vmlinux 0x10c9af5e rtnl_unicast +EXPORT_SYMBOL vmlinux 0x10dc5bb3 search_binary_handler +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10ff42a4 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x10ffef58 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x11162f69 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a17e51 neigh_lookup +EXPORT_SYMBOL vmlinux 0x11a18b14 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x11b2bbc5 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x11c7fc0f fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x1200e4e0 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x1204e758 dquot_commit +EXPORT_SYMBOL vmlinux 0x120507ac idr_get_new +EXPORT_SYMBOL vmlinux 0x12062ffc find_or_create_page +EXPORT_SYMBOL vmlinux 0x124b8851 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x1263a461 dentry_open +EXPORT_SYMBOL vmlinux 0x127a3448 __register_binfmt +EXPORT_SYMBOL vmlinux 0x12826688 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x129f4287 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12f10736 udplite_table +EXPORT_SYMBOL vmlinux 0x1302ec21 free_buffer_head +EXPORT_SYMBOL vmlinux 0x130b4fc9 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x131b92b8 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x13499374 nla_reserve +EXPORT_SYMBOL vmlinux 0x1357fd97 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x1378e714 acpi_video_display_switch_support +EXPORT_SYMBOL vmlinux 0x13e7ac1f pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x13fed778 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x14162868 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x14669ae3 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0x146d5450 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x1471a03e tcp_parse_options +EXPORT_SYMBOL vmlinux 0x14778cad proc_dointvec +EXPORT_SYMBOL vmlinux 0x1497ccaa scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x14a04e10 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x14a53b65 scsi_init_io +EXPORT_SYMBOL vmlinux 0x14af0cf7 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x14c7d052 netdev_set_master +EXPORT_SYMBOL vmlinux 0x14eecb18 prepare_binprm +EXPORT_SYMBOL vmlinux 0x151103dd key_type_keyring +EXPORT_SYMBOL vmlinux 0x15488dfa cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x157972a4 kfree_skb +EXPORT_SYMBOL vmlinux 0x159845ed __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x1599f0a0 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x15b6416c acpi_root_dir +EXPORT_SYMBOL vmlinux 0x15c28526 input_filter_device +EXPORT_SYMBOL vmlinux 0x15de86e4 mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x15e33e32 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x15ef2dd9 kfifo_free +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x164cac51 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x1675606f bad_dma_address +EXPORT_SYMBOL vmlinux 0x167d559c dquot_drop +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x1716a2a7 sock_init_data +EXPORT_SYMBOL vmlinux 0x173f7fb2 simple_readpage +EXPORT_SYMBOL vmlinux 0x174702da wireless_spy_update +EXPORT_SYMBOL vmlinux 0x17508cdd fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x17748aed security_file_permission +EXPORT_SYMBOL vmlinux 0x177eb727 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x1780bcab seq_puts +EXPORT_SYMBOL vmlinux 0x17994661 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x17a56cb0 __kill_fasync +EXPORT_SYMBOL vmlinux 0x17c7451e alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x17f502ac alloc_fddidev +EXPORT_SYMBOL vmlinux 0x17f76485 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x181b6ff2 mempool_resize +EXPORT_SYMBOL vmlinux 0x1828341c inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x1842ae20 genphy_config_advert +EXPORT_SYMBOL vmlinux 0x1845e7c5 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x184fa514 neigh_create +EXPORT_SYMBOL vmlinux 0x185c4e1c pnp_register_driver +EXPORT_SYMBOL vmlinux 0x1866ef65 mmc_request_done +EXPORT_SYMBOL vmlinux 0x187212f4 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x187ab29e bio_integrity_split +EXPORT_SYMBOL vmlinux 0x18c55c40 commit_creds +EXPORT_SYMBOL vmlinux 0x18ed9303 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x1913bdc0 __breadahead +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x197c8016 bio_integrity_free +EXPORT_SYMBOL vmlinux 0x1985ed3c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x199bde1e blk_start_request +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19d0f227 alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x19e3f82c call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x1a0bde12 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x1a15b8ce inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a75caa3 _read_lock +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad6ad94 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x1ad87304 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x1af51629 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b18dac9 inet_frags_init +EXPORT_SYMBOL vmlinux 0x1b1d9119 do_truncate +EXPORT_SYMBOL vmlinux 0x1b213f8e pci_dev_driver +EXPORT_SYMBOL vmlinux 0x1b36e8fd inet_stream_connect +EXPORT_SYMBOL vmlinux 0x1b41c714 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b89419f add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b90deae lro_flush_all +EXPORT_SYMBOL vmlinux 0x1b95d841 skb_find_text +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bb3c30f journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x1bc72f69 acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0x1be0ba1f sock_no_connect +EXPORT_SYMBOL vmlinux 0x1beafadf md_done_sync +EXPORT_SYMBOL vmlinux 0x1c03fedd __f_setown +EXPORT_SYMBOL vmlinux 0x1c193854 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c5892de pci_target_state +EXPORT_SYMBOL vmlinux 0x1c667912 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x1c696ade dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c8f62b8 mpage_writepages +EXPORT_SYMBOL vmlinux 0x1c925188 __brelse +EXPORT_SYMBOL vmlinux 0x1cb49be5 misc_deregister +EXPORT_SYMBOL vmlinux 0x1cb725a4 journal_stop +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ccbe566 sg_miter_start +EXPORT_SYMBOL vmlinux 0x1ce7ec4c rwsem_wake +EXPORT_SYMBOL vmlinux 0x1cefe352 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1d0c8463 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x1d2958f0 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d88f02f tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x1da3a2f5 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x1da3a86e blk_rq_init +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dcffa4f inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x1dd0e637 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1dea43ad shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x1e08c22a do_splice_from +EXPORT_SYMBOL vmlinux 0x1e0c2be4 ioremap_wc +EXPORT_SYMBOL vmlinux 0x1e28c7f2 elv_add_request +EXPORT_SYMBOL vmlinux 0x1e35c987 kernel_bind +EXPORT_SYMBOL vmlinux 0x1e4e3d07 pci_dev_put +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e7ebba8 ndisc_send_skb +EXPORT_SYMBOL vmlinux 0x1e7ef7a8 __alloc_skb +EXPORT_SYMBOL vmlinux 0x1e8c260f generic_make_request +EXPORT_SYMBOL vmlinux 0x1e8f2f1c serio_interrupt +EXPORT_SYMBOL vmlinux 0x1e8ffa37 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x1ecb9943 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x1ed13814 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x1ed3cd54 ip_route_input +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f12abee nf_register_hooks +EXPORT_SYMBOL vmlinux 0x1f1c614d i2c_master_send +EXPORT_SYMBOL vmlinux 0x1f29d046 deactivate_super +EXPORT_SYMBOL vmlinux 0x1f2e1570 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x1f305993 kobject_set_name +EXPORT_SYMBOL vmlinux 0x1f67c85c vfs_follow_link +EXPORT_SYMBOL vmlinux 0x1f69573a kset_register +EXPORT_SYMBOL vmlinux 0x1f701038 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x1f8c6164 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x1f933e3b __mutex_init +EXPORT_SYMBOL vmlinux 0x1f94d9aa genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x1f9ef376 phy_driver_register +EXPORT_SYMBOL vmlinux 0x1fc846dd elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x1fdb1293 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x1feb6553 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x1ff69dd8 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x1ffda91d uart_update_timeout +EXPORT_SYMBOL vmlinux 0x1ffdad89 cdrom_open +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x203b4e2c __napi_complete +EXPORT_SYMBOL vmlinux 0x205ae737 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x20629365 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x20750ce9 unregister_nls +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x20a50fb2 simple_empty +EXPORT_SYMBOL vmlinux 0x20af5901 proto_register +EXPORT_SYMBOL vmlinux 0x20b0c1d8 open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x20b8a536 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x20fa4f3d generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x2106e50a serio_rescan +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x218ffd31 pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x21b2ca5d jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x21d50a51 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x21da7165 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21f8b265 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x2218fe26 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x22272d32 md_error +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x227cd54e pci_enable_device +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x2288715c i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22aab33f nla_append +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22ba9ec2 default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x22c64ab5 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x22fc7ca3 igrab +EXPORT_SYMBOL vmlinux 0x230a0460 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x2332154f slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x233e70ac sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x233ec347 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x234518a7 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x23568ee9 d_add_ci +EXPORT_SYMBOL vmlinux 0x2360e3e5 simple_link +EXPORT_SYMBOL vmlinux 0x237bfc46 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x2387b747 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x23b8e7bc splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x23bcc016 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23d2f604 phy_attach +EXPORT_SYMBOL vmlinux 0x23dbc219 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x23e5fa32 ps2_init +EXPORT_SYMBOL vmlinux 0x23f1418c i2c_del_driver +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x240ee02c mca_device_read_pos +EXPORT_SYMBOL vmlinux 0x242801e6 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x2431fde7 find_lock_page +EXPORT_SYMBOL vmlinux 0x243890c3 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x243ffddc idr_destroy +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2451aba6 register_exec_domain +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x24862862 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x2489929a skb_insert +EXPORT_SYMBOL vmlinux 0x2494b41f init_task +EXPORT_SYMBOL vmlinux 0x24c11342 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x24d3798d cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x24e4bb01 down_write_trylock +EXPORT_SYMBOL vmlinux 0x24f5e147 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x2528684d i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x2531fcab pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x253c71ba i2c_use_client +EXPORT_SYMBOL vmlinux 0x256921fd get_empty_filp +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25b3ba52 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x25c868c8 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x25d39a68 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x25d3e2a3 atomic64_dec_return +EXPORT_SYMBOL vmlinux 0x25d6d8bf rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x25e365b2 set_pages_x +EXPORT_SYMBOL vmlinux 0x25fbfab5 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x260820c7 pci_match_id +EXPORT_SYMBOL vmlinux 0x26329c92 dm_table_event +EXPORT_SYMBOL vmlinux 0x265aef21 cdrom_release +EXPORT_SYMBOL vmlinux 0x266ba213 module_put +EXPORT_SYMBOL vmlinux 0x267827a5 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x268cc6a2 sys_close +EXPORT_SYMBOL vmlinux 0x26c34f4c current_fs_time +EXPORT_SYMBOL vmlinux 0x26d57472 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f14efe redraw_screen +EXPORT_SYMBOL vmlinux 0x26f4fa6f generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x26f9209a default_llseek +EXPORT_SYMBOL vmlinux 0x270657ed dquot_destroy +EXPORT_SYMBOL vmlinux 0x27162a50 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2727da5d _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x272d4474 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x2731ce56 dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0x2752ffdf sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x276799b1 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x278aebd6 read_cache_page_async +EXPORT_SYMBOL vmlinux 0x27b35c51 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x28076fa8 scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x28088a27 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x280e7e97 sock_release +EXPORT_SYMBOL vmlinux 0x281bb04f skb_copy_bits +EXPORT_SYMBOL vmlinux 0x281dc612 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x281e71e5 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x286b5045 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x287f1059 unregister_key_type +EXPORT_SYMBOL vmlinux 0x28832396 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x288648bf acpi_device_hid +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28aed5a4 register_cdrom +EXPORT_SYMBOL vmlinux 0x28b715a6 isapnp_cfg_end +EXPORT_SYMBOL vmlinux 0x28e50853 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x29062b39 tty_register_device +EXPORT_SYMBOL vmlinux 0x29202388 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x292093f4 native_rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x29621365 cdev_del +EXPORT_SYMBOL vmlinux 0x297f0864 add_disk +EXPORT_SYMBOL vmlinux 0x29a31baf arp_send +EXPORT_SYMBOL vmlinux 0x29b67e82 ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29cac5f5 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x29ffeaf4 kunmap +EXPORT_SYMBOL vmlinux 0x2a13dcc1 mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a4765d3 dst_destroy +EXPORT_SYMBOL vmlinux 0x2a4e5484 tty_check_change +EXPORT_SYMBOL vmlinux 0x2a69d595 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x2a6a690c jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x2a9c8ba0 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x2a9f1ab1 cdev_init +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2aeb2800 mempool_create_node +EXPORT_SYMBOL vmlinux 0x2af8ce31 scsi_register +EXPORT_SYMBOL vmlinux 0x2b05f1e8 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x2b0a56da simple_transaction_release +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b17c31e i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x2b21f75e vfs_readdir +EXPORT_SYMBOL vmlinux 0x2b455424 iget5_locked +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb6fde2 __kfifo_put +EXPORT_SYMBOL vmlinux 0x2bbd9a88 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x2bc95bd4 memset +EXPORT_SYMBOL vmlinux 0x2bcabbdd pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x2be8dcd8 mca_register_driver_integrated +EXPORT_SYMBOL vmlinux 0x2bfea914 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c10d285 phy_device_register +EXPORT_SYMBOL vmlinux 0x2c1cd70c freeze_bdev +EXPORT_SYMBOL vmlinux 0x2c213375 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c794617 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x2c7d5b71 inode_init_once +EXPORT_SYMBOL vmlinux 0x2c8472e2 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x2c8a8aff scsi_host_put +EXPORT_SYMBOL vmlinux 0x2c8f5989 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x2c9101c8 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x2c9874fe ida_remove +EXPORT_SYMBOL vmlinux 0x2c9c3f03 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x2cba7752 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x2cc43161 serio_reconnect +EXPORT_SYMBOL vmlinux 0x2ce10b33 vfs_link +EXPORT_SYMBOL vmlinux 0x2ce12b41 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x2cfcd86c vm_insert_page +EXPORT_SYMBOL vmlinux 0x2d37342e cpu_online_mask +EXPORT_SYMBOL vmlinux 0x2d4aac26 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x2d74c89b override_creds +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2d8a0a5c pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x2daa2be0 get_write_access +EXPORT_SYMBOL vmlinux 0x2dac35aa scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x2dba37a5 get_phy_id +EXPORT_SYMBOL vmlinux 0x2dbafbe3 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x2dcb0123 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2dd8ce35 nf_reinject +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2e0161ad jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x2e07f920 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x2e2a9e65 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e561730 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x2e60bace memcpy +EXPORT_SYMBOL vmlinux 0x2e8e959c sock_kfree_s +EXPORT_SYMBOL vmlinux 0x2ea1cf66 new_inode +EXPORT_SYMBOL vmlinux 0x2eb0a44e kmap +EXPORT_SYMBOL vmlinux 0x2eb9a0e8 _read_lock_irq +EXPORT_SYMBOL vmlinux 0x2ed42b03 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x2ee374fe jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x2efe5e09 atomic64_xchg +EXPORT_SYMBOL vmlinux 0x2f287f0d copy_to_user +EXPORT_SYMBOL vmlinux 0x2f31dddd free_netdev +EXPORT_SYMBOL vmlinux 0x2f4c3bef set_page_dirty +EXPORT_SYMBOL vmlinux 0x2f4d48a0 sync_blockdev +EXPORT_SYMBOL vmlinux 0x2f82afe6 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x2fa05775 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x2fa060de pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x2fb2a190 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x2fdcc246 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x3047d9fe scsi_block_requests +EXPORT_SYMBOL vmlinux 0x3077353c scm_detach_fds +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x30821594 dm_get_device +EXPORT_SYMBOL vmlinux 0x3085d059 seq_read +EXPORT_SYMBOL vmlinux 0x309e009b fb_find_mode +EXPORT_SYMBOL vmlinux 0x30b827e2 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x3123df4f nf_log_register +EXPORT_SYMBOL vmlinux 0x312d89f3 blk_complete_request +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x316e4804 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x3173ede7 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x3176bc63 dquot_initialize +EXPORT_SYMBOL vmlinux 0x317bb017 bdi_init +EXPORT_SYMBOL vmlinux 0x317bf0c0 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x317c2da2 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x3191e041 __rta_fill +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x31954e7a bio_copy_user +EXPORT_SYMBOL vmlinux 0x31a84da6 contig_page_data +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31f07eb9 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x3207e37a mpage_writepage +EXPORT_SYMBOL vmlinux 0x32080822 set_trace_device +EXPORT_SYMBOL vmlinux 0x32129059 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x321ffc6d pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x326df9e1 vfs_stat +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32bb6466 put_tty_driver +EXPORT_SYMBOL vmlinux 0x32bca38f __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x32f44684 udp_proc_register +EXPORT_SYMBOL vmlinux 0x33267316 dma_supported +EXPORT_SYMBOL vmlinux 0x332b28eb dev_driver_string +EXPORT_SYMBOL vmlinux 0x3344d88f tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x3375cb45 dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0x337ed270 lock_may_read +EXPORT_SYMBOL vmlinux 0x3385304e blk_sync_queue +EXPORT_SYMBOL vmlinux 0x3391c047 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x33a5b634 do_splice_to +EXPORT_SYMBOL vmlinux 0x33d92f9a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x33eeeb7e tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x340f5bcc pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x3421d2d2 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x342f60fe apm_info +EXPORT_SYMBOL vmlinux 0x343c0c5a neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x343dc667 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x348d2e55 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34b0276a vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x34c28c26 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x35045bdf neigh_event_ns +EXPORT_SYMBOL vmlinux 0x35293be8 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x3542ed81 __inet6_hash +EXPORT_SYMBOL vmlinux 0x355e1428 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x356894e2 vfs_statfs +EXPORT_SYMBOL vmlinux 0x357908fc key_task_permission +EXPORT_SYMBOL vmlinux 0x35a7d239 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35c7a441 seq_write +EXPORT_SYMBOL vmlinux 0x35d2864d pci_release_regions +EXPORT_SYMBOL vmlinux 0x35da2e61 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x35f053ad bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x35f0faa2 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x36094629 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x36104124 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x3653d1e2 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x365f2d3c bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x367b37fd posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x36861f49 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x3686ea09 spi_print_msg +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36b57dc9 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x36c73b96 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x36cc41fe bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x36e2fd84 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x3711e8a3 posix_lock_file +EXPORT_SYMBOL vmlinux 0x371b65d6 generic_show_options +EXPORT_SYMBOL vmlinux 0x37365548 skb_store_bits +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x37483ffa bioset_create +EXPORT_SYMBOL vmlinux 0x374ed073 scnprintf +EXPORT_SYMBOL vmlinux 0x375e75bb __nla_reserve +EXPORT_SYMBOL vmlinux 0x37960cbf do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0x379d65f5 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x37a361a3 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x37be6f9b inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37d864c1 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x3816ded0 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x381c4bb1 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x3850c5fd phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x38656326 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x3883b793 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x388799f6 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x388d4624 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x3895ab44 tcp_prot +EXPORT_SYMBOL vmlinux 0x38b830d0 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38bd00e7 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x38cab31c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x38e404ab d_find_alias +EXPORT_SYMBOL vmlinux 0x38f3045c scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x38f60eed key_put +EXPORT_SYMBOL vmlinux 0x3903bdf5 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x39078f05 wireless_send_event +EXPORT_SYMBOL vmlinux 0x393f0404 mmc_card_awake +EXPORT_SYMBOL vmlinux 0x394623ed pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x396baaff generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x396f80e8 security_path_rmdir +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x398b81a4 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x39f700d1 bdi_register +EXPORT_SYMBOL vmlinux 0x39fb044e xfrm_init_state +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a2422d5 km_state_expired +EXPORT_SYMBOL vmlinux 0x3a602d17 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x3a64a712 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x3a6ab353 blk_end_request +EXPORT_SYMBOL vmlinux 0x3a78108f inet_select_addr +EXPORT_SYMBOL vmlinux 0x3a7ffe40 vfs_writev +EXPORT_SYMBOL vmlinux 0x3a88e866 napi_frags_skb +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa1dbcf _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x3aa62ea1 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0x3aa652f6 revalidate_disk +EXPORT_SYMBOL vmlinux 0x3acb0fcc shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x3ad3fc86 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x3adb1dfb rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x3adc15b9 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3af5e108 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b32f6dd ppp_input_error +EXPORT_SYMBOL vmlinux 0x3b470a18 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x3b5e8d70 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x3b909a73 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x3bafffa7 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x3bb52f8b elv_rb_find +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bbb771f jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x3bca0ef1 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x3bcd1a59 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bd6d6ec jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x3c09548f kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x3c1bfb2b misc_register +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c36a73e neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x3c5338d2 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x3c53d1a5 phy_detach +EXPORT_SYMBOL vmlinux 0x3c7227bf complete_all +EXPORT_SYMBOL vmlinux 0x3c7893dd ip_route_output_key +EXPORT_SYMBOL vmlinux 0x3c89f4ba ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3ca0b2ab unregister_8022_client +EXPORT_SYMBOL vmlinux 0x3cb3931b sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cd2ee58 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x3cd60e8c ll_rw_block +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cec51aa set_device_ro +EXPORT_SYMBOL vmlinux 0x3cefc807 pipe_lock +EXPORT_SYMBOL vmlinux 0x3cfdabf5 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x3d1b4b19 xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0x3d1dfa85 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x3d1ed40e dev_get_by_name +EXPORT_SYMBOL vmlinux 0x3d214ee8 bio_split +EXPORT_SYMBOL vmlinux 0x3d3df278 unlock_super +EXPORT_SYMBOL vmlinux 0x3d5aae8d bio_alloc +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d77861a block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d9995af devm_free_irq +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da5eb6d kfifo_alloc +EXPORT_SYMBOL vmlinux 0x3daa69da vfs_lstat +EXPORT_SYMBOL vmlinux 0x3db0e323 __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0x3db26416 fb_set_var +EXPORT_SYMBOL vmlinux 0x3db2eb7c kmap_high +EXPORT_SYMBOL vmlinux 0x3dbb71ab genphy_read_status +EXPORT_SYMBOL vmlinux 0x3dbe2c2d bio_copy_kern +EXPORT_SYMBOL vmlinux 0x3e1f073d wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x3e219de6 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x3e274ba4 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e4ed738 pci_get_device +EXPORT_SYMBOL vmlinux 0x3e5ecbe4 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x3e6cd502 sock_rfree +EXPORT_SYMBOL vmlinux 0x3e6e07ff call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x3e7fe256 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x3e863807 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x3e8872c4 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x3ec1d14e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x3ed40a16 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3eeae697 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x3ef78d80 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f08e9b8 journal_clear_err +EXPORT_SYMBOL vmlinux 0x3f0a6f26 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x3f1899f1 up +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f541b75 follow_up +EXPORT_SYMBOL vmlinux 0x3f8c856a clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x3f8e39a4 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff43718 inet_release +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x4010aadf security_path_mknod +EXPORT_SYMBOL vmlinux 0x40189f68 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x40292082 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x4047e284 ps2_command +EXPORT_SYMBOL vmlinux 0x404d773c thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x40691047 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x40820617 audit_log_format +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x40984f65 del_gendisk +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40d37d54 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x40f1baf0 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x4134e074 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x41375c13 blkdev_put +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x416e8379 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x4185cf4b radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x419639cd bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x419692d8 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x41a9c68d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x41c2a9dc tty_throttle +EXPORT_SYMBOL vmlinux 0x41e63a00 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x41e9fd1a scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42139ef1 seq_printf +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x42362e96 find_inode_number +EXPORT_SYMBOL vmlinux 0x424439f7 phy_stop +EXPORT_SYMBOL vmlinux 0x42455c1f dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x424f7e58 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x4278c516 sget +EXPORT_SYMBOL vmlinux 0x42793577 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x4292364c schedule +EXPORT_SYMBOL vmlinux 0x42ae9d26 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x42b3a6e2 phy_device_create +EXPORT_SYMBOL vmlinux 0x42b740b6 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x42c8de35 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x42e5c383 mpage_readpage +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x43415c85 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x435e3704 udp_poll +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x4385be3b gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x43a035fd journal_lock_updates +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43b8f388 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x43ea1532 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x4413d804 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x44276255 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x44314efb radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x446ca709 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x4484e2fa ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x448987df tty_devnum +EXPORT_SYMBOL vmlinux 0x449a3b75 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44ba23a8 md_write_start +EXPORT_SYMBOL vmlinux 0x44c2ef15 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x44d09a75 __bio_clone +EXPORT_SYMBOL vmlinux 0x44dd3c37 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f21bea idr_for_each +EXPORT_SYMBOL vmlinux 0x45293657 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x45450063 mod_timer +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45d11c43 down_interruptible +EXPORT_SYMBOL vmlinux 0x45d55543 down_write +EXPORT_SYMBOL vmlinux 0x45e81127 genphy_resume +EXPORT_SYMBOL vmlinux 0x46008ef9 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x46085e4f add_timer +EXPORT_SYMBOL vmlinux 0x461b90cd napi_skb_finish +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x46593d4a sock_map_fd +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x46de988a pci_bus_type +EXPORT_SYMBOL vmlinux 0x471a5a96 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x472d2a9a radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x4744df77 inet_getname +EXPORT_SYMBOL vmlinux 0x474965b5 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x474aff39 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x476e65ad pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x478a43ba security_path_unlink +EXPORT_SYMBOL vmlinux 0x478a79da pci_get_class +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47cd48d1 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x47d1e3b8 set_anon_super +EXPORT_SYMBOL vmlinux 0x47d44708 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x47e31c47 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x47f338bc ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x48656e8e set_pages_uc +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48d607a9 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x48d65e39 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x48d9e09e kobject_init +EXPORT_SYMBOL vmlinux 0x49167b8c pci_get_subsys +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x4953a762 user_revoke +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49699d36 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x49850cc2 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x498fd189 register_con_driver +EXPORT_SYMBOL vmlinux 0x499fa553 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x49b3907d put_mnt_ns +EXPORT_SYMBOL vmlinux 0x49bd28e6 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x49da9a9a _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x4a0af3bf skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a6c8ece skb_put +EXPORT_SYMBOL vmlinux 0x4a6f29fc md_check_recovery +EXPORT_SYMBOL vmlinux 0x4a7f819e eth_change_mtu +EXPORT_SYMBOL vmlinux 0x4a971ec7 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b07e779 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b359cb7 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x4b363349 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x4b480361 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x4b65a699 scsi_host_get +EXPORT_SYMBOL vmlinux 0x4b6a90a3 hippi_type_trans +EXPORT_SYMBOL vmlinux 0x4b6c210f tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x4b8d21ee tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4b93a481 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x4b9bdd34 tr_type_trans +EXPORT_SYMBOL vmlinux 0x4ba8e948 acpi_bus_start +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bc4fe0b do_munmap +EXPORT_SYMBOL vmlinux 0x4bef7dcc seq_lseek +EXPORT_SYMBOL vmlinux 0x4bfee15a atomic64_set +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c11fd57 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x4c1b965c gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x4c1eebdb sk_filter +EXPORT_SYMBOL vmlinux 0x4c27f031 __ps2_command +EXPORT_SYMBOL vmlinux 0x4c326f7a dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x4c518c8f ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x4c67505c end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x4c8ae179 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4d0f6749 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x4d37d2cd unregister_snap_client +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4da04bc9 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x4dae70ed arp_tbl +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e0ad55f d_obtain_alias +EXPORT_SYMBOL vmlinux 0x4e0b0253 simple_release_fs +EXPORT_SYMBOL vmlinux 0x4e1afb8c acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0x4e25f45b nf_hook_slow +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e7e91cc brioctl_set +EXPORT_SYMBOL vmlinux 0x4e81d3ed thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e90f967 seq_escape +EXPORT_SYMBOL vmlinux 0x4ebbfccd nf_getsockopt +EXPORT_SYMBOL vmlinux 0x4ebf2611 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x4ee76065 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x4ef446dd blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x4f167ebc tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f33cb9e __blk_run_queue +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f5c82cc kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x4f645046 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f7aae4d read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x4fcf57bb console_start +EXPORT_SYMBOL vmlinux 0x4fd2574a end_page_writeback +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x500d2d6b sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x5012525a ppp_input +EXPORT_SYMBOL vmlinux 0x5018b3eb lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x5075a88d wake_up_process +EXPORT_SYMBOL vmlinux 0x50b3aa21 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x50bdd470 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x50c868d5 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x50cd09f8 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x50db96f1 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x50f0a6ca pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x51386d37 udp_disconnect +EXPORT_SYMBOL vmlinux 0x5140832b set_groups +EXPORT_SYMBOL vmlinux 0x5152e605 memcmp +EXPORT_SYMBOL vmlinux 0x51556063 scsi_unregister +EXPORT_SYMBOL vmlinux 0x517035dd qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x5171a6e0 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x51749933 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x51812be3 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x518408c7 sock_register +EXPORT_SYMBOL vmlinux 0x5186518f profile_pc +EXPORT_SYMBOL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x52000cda tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x52244be4 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x52299304 cont_write_begin +EXPORT_SYMBOL vmlinux 0x523fcacc ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x528d70de vfs_quota_on +EXPORT_SYMBOL vmlinux 0x52993623 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x529a84ee inet_addr_type +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52ccb16a dst_release +EXPORT_SYMBOL vmlinux 0x52d4f043 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x530769b1 mmc_host_disable +EXPORT_SYMBOL vmlinux 0x530b1e4c rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x53160607 kill_pid +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x532fb2ad journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x533540f7 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x533c8c53 prepare_creds +EXPORT_SYMBOL vmlinux 0x53408f0b bio_pair_release +EXPORT_SYMBOL vmlinux 0x5344a2df scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x534bf76d mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x535900dd mutex_unlock +EXPORT_SYMBOL vmlinux 0x53709c1d lock_rename +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x53954799 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x539856e1 load_nls +EXPORT_SYMBOL vmlinux 0x53ba7743 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x53be86a7 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53c698b8 acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0x53cc128d jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x541daf70 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x541dfef4 atomic64_inc +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x54474003 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x544b17c2 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x544b3e87 isapnp_protocol +EXPORT_SYMBOL vmlinux 0x544d1fdd phy_start_aneg +EXPORT_SYMBOL vmlinux 0x545371e8 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x54542f67 mca_device_set_name +EXPORT_SYMBOL vmlinux 0x5455ea97 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x545c76f4 tty_set_operations +EXPORT_SYMBOL vmlinux 0x54744d2b pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x547a1677 phy_disconnect +EXPORT_SYMBOL vmlinux 0x54805f44 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x548bac98 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x5492d65a xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x54935666 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x5493f4ba bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x54a6d074 atomic64_dec +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54fa3be9 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x551b11ff __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x551c6f05 bio_map_kern +EXPORT_SYMBOL vmlinux 0x554e1ec1 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x557bd65d sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55951b96 ip_defrag +EXPORT_SYMBOL vmlinux 0x559540b9 register_filesystem +EXPORT_SYMBOL vmlinux 0x55b3133e dma_release_from_coherent +EXPORT_SYMBOL vmlinux 0x55d5b8c1 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x55e4c34a send_sig_info +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5607d18c set_bdi_congested +EXPORT_SYMBOL vmlinux 0x56100d4e blk_make_request +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x56189e4d dm_put_device +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x563dc90b pci_scan_slot +EXPORT_SYMBOL vmlinux 0x56410ba4 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x5650625e neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x566564ac mca_device_set_claim +EXPORT_SYMBOL vmlinux 0x56b43c08 dqget +EXPORT_SYMBOL vmlinux 0x56c4fcf3 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56c9b8d2 bioset_free +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56e90495 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x56e9876a mmc_remove_host +EXPORT_SYMBOL vmlinux 0x56f04ddd simple_unlink +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x5705088a __vmalloc +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x576cf844 tty_vhangup +EXPORT_SYMBOL vmlinux 0x579fbcd2 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x57a6504e vsnprintf +EXPORT_SYMBOL vmlinux 0x57ac6616 set_pages_wb +EXPORT_SYMBOL vmlinux 0x57adf756 per_cpu__this_cpu_off +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57c0e041 register_netdev +EXPORT_SYMBOL vmlinux 0x57d67662 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57ef3feb bdev_read_only +EXPORT_SYMBOL vmlinux 0x57f6880a vmap +EXPORT_SYMBOL vmlinux 0x580ac692 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x5842c789 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x5844a0f7 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x5859b1a7 seq_bitmap +EXPORT_SYMBOL vmlinux 0x58720980 napi_get_frags +EXPORT_SYMBOL vmlinux 0x58fd509c napi_gro_receive +EXPORT_SYMBOL vmlinux 0x58fef6f8 ist_info +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x5952efe5 bio_sector_offset +EXPORT_SYMBOL vmlinux 0x595f1e9b register_md_personality +EXPORT_SYMBOL vmlinux 0x598e0a99 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x599e00e1 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x59aadd22 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59e78f90 file_update_time +EXPORT_SYMBOL vmlinux 0x5a24b66d __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a57d155 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x5a5f34f6 d_instantiate +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a856df4 inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x5a9cbf22 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x5a9e55ff destroy_EII_client +EXPORT_SYMBOL vmlinux 0x5aab81e0 generic_removexattr +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5ac5c86a sock_no_accept +EXPORT_SYMBOL vmlinux 0x5acca93c cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b1a534c mark_info_dirty +EXPORT_SYMBOL vmlinux 0x5b3795e9 bh_submit_read +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b556ed8 journal_ack_err +EXPORT_SYMBOL vmlinux 0x5b9ac799 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x5c0a17c7 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x5c1cc0a3 vfs_readlink +EXPORT_SYMBOL vmlinux 0x5c471e51 key_alloc +EXPORT_SYMBOL vmlinux 0x5c475774 filemap_fault +EXPORT_SYMBOL vmlinux 0x5c55b722 skb_append +EXPORT_SYMBOL vmlinux 0x5c6334ae dget_locked +EXPORT_SYMBOL vmlinux 0x5c6682c1 dev_trans_start +EXPORT_SYMBOL vmlinux 0x5c68705b mca_read_pos +EXPORT_SYMBOL vmlinux 0x5c7ecc4e flush_old_exec +EXPORT_SYMBOL vmlinux 0x5c7f3645 generic_file_open +EXPORT_SYMBOL vmlinux 0x5c960a0b con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x5cb6d034 scsi_add_device +EXPORT_SYMBOL vmlinux 0x5cbc58c1 bio_clone +EXPORT_SYMBOL vmlinux 0x5cc66d51 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d292ea6 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x5d60bdc7 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5d76d505 kill_pgrp +EXPORT_SYMBOL vmlinux 0x5d861414 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x5dadecd7 mutex_trylock +EXPORT_SYMBOL vmlinux 0x5dc14bcf udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x5dd8d0ed sk_dst_check +EXPORT_SYMBOL vmlinux 0x5e1f2d09 tcp_poll +EXPORT_SYMBOL vmlinux 0x5e3370c1 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x5e4c3499 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x5e51f8a0 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x5e5a8fa4 page_put_link +EXPORT_SYMBOL vmlinux 0x5e5ba516 should_remove_suid +EXPORT_SYMBOL vmlinux 0x5e624618 blk_peek_request +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ea6ed28 sock_i_ino +EXPORT_SYMBOL vmlinux 0x5ebc6d6c abort_creds +EXPORT_SYMBOL vmlinux 0x5ecadba2 bio_free +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ed7f3b1 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ef993e7 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x5f1297de __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x5f1bd579 mca_find_adapter +EXPORT_SYMBOL vmlinux 0x5f2c6bc6 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x5f439fc5 dm_table_get +EXPORT_SYMBOL vmlinux 0x5f56db66 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x5f5d3e2c tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x5f8db3ef inode_change_ok +EXPORT_SYMBOL vmlinux 0x5fc6cb4f dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x5ff4d235 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x5ffe55e1 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x602f8f28 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x603e4c7e scsi_put_command +EXPORT_SYMBOL vmlinux 0x6043092c atomic64_dec_and_test +EXPORT_SYMBOL vmlinux 0x604a4064 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x605dff9e dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x607f99ec dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x609c027f ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60bea734 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x60c03297 dm_register_target +EXPORT_SYMBOL vmlinux 0x60d0fd33 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x60e13506 kill_fasync +EXPORT_SYMBOL vmlinux 0x60f5b5ae pnp_find_dev +EXPORT_SYMBOL vmlinux 0x6117cd7f input_flush_device +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x612a2d03 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x614a460f tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x615cf250 tty_kref_put +EXPORT_SYMBOL vmlinux 0x6160bc84 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x623f7d7d scsi_device_put +EXPORT_SYMBOL vmlinux 0x6241a2ab __copy_from_user_ll_nocache +EXPORT_SYMBOL vmlinux 0x6241fd2c acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x6258166d blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x625a9a8f dev_mc_sync +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x627f5afe vfs_readv +EXPORT_SYMBOL vmlinux 0x6281af21 input_set_capability +EXPORT_SYMBOL vmlinux 0x6281cc31 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62855119 tcf_register_action +EXPORT_SYMBOL vmlinux 0x62aae182 phy_start +EXPORT_SYMBOL vmlinux 0x630399a9 __seq_open_private +EXPORT_SYMBOL vmlinux 0x6307fc98 del_timer +EXPORT_SYMBOL vmlinux 0x6340992e rfkill_destroy +EXPORT_SYMBOL vmlinux 0x6354fcee unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x635b6f53 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x6365f597 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x63869380 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x639b139a udplite_prot +EXPORT_SYMBOL vmlinux 0x63dab758 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x63db0089 alloc_disk_node +EXPORT_SYMBOL vmlinux 0x63e11754 d_invalidate +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63efc536 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x64000815 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x640a7078 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x642e54ac __wake_up +EXPORT_SYMBOL vmlinux 0x644fd7df cad_pid +EXPORT_SYMBOL vmlinux 0x64526a93 atomic64_sub_return +EXPORT_SYMBOL vmlinux 0x645c2fac cfb_fillrect +EXPORT_SYMBOL vmlinux 0x6466a1e6 mempool_alloc +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64b4ce03 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x650756a0 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x650fb346 add_wait_queue +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x652c2a38 input_grab_device +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x6565d33f scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x65bbb856 skb_unlink +EXPORT_SYMBOL vmlinux 0x65d1ef49 read_dev_sector +EXPORT_SYMBOL vmlinux 0x66017e6e pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x6605a1d8 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x66073cef pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x661e9764 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x6645c30d __napi_schedule +EXPORT_SYMBOL vmlinux 0x66513bbe write_one_page +EXPORT_SYMBOL vmlinux 0x6658de20 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x665f9b7d unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x666a8d99 generic_permission +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66947a7d __blk_end_request +EXPORT_SYMBOL vmlinux 0x66c14a43 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x66e1a826 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x66e76b92 inet_put_port +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x6708f9b8 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x670e132c filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x6717c8bb eth_header_parse +EXPORT_SYMBOL vmlinux 0x6726fc72 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x675251a6 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x6755f7da key_unlink +EXPORT_SYMBOL vmlinux 0x67672d58 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x67804a19 __any_online_cpu +EXPORT_SYMBOL vmlinux 0x6783cc51 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x680f3282 bd_release +EXPORT_SYMBOL vmlinux 0x6817fa45 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x682ab1c3 input_register_handler +EXPORT_SYMBOL vmlinux 0x68332af2 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x68477a3b i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x68b10319 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x68d4d2ad inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x69138633 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x6913e3dc do_SAK +EXPORT_SYMBOL vmlinux 0x6918349f generic_unplug_device +EXPORT_SYMBOL vmlinux 0x691e36d9 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x6953e87a thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x69722453 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x69794485 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x69903c93 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69cf66f6 vfs_read +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69d6de37 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69e54276 eth_header +EXPORT_SYMBOL vmlinux 0x69ee3696 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x69f3b0f7 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x69f474aa journal_revoke +EXPORT_SYMBOL vmlinux 0x69f613da skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a11e59a block_write_begin +EXPORT_SYMBOL vmlinux 0x6a27bfce csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a4beb37 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x6a4dde33 acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0x6a4f6c0b __ip_select_ident +EXPORT_SYMBOL vmlinux 0x6a62510a journal_extend +EXPORT_SYMBOL vmlinux 0x6a66e9bc tcp_ioctl +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a9f26c9 init_timer_key +EXPORT_SYMBOL vmlinux 0x6ab03500 kthread_bind +EXPORT_SYMBOL vmlinux 0x6ab9dfee clocksource_unregister +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b28395b sysctl_jiffies +EXPORT_SYMBOL vmlinux 0x6b2a0b50 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b8020c0 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x6b937ffb mca_mark_as_used +EXPORT_SYMBOL vmlinux 0x6b9b88f3 sleep_on +EXPORT_SYMBOL vmlinux 0x6bb812e7 atomic64_add_return +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bdf965f dma_find_channel +EXPORT_SYMBOL vmlinux 0x6be44b99 security_path_rename +EXPORT_SYMBOL vmlinux 0x6c020878 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x6c07d693 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x6c0b101d journal_create +EXPORT_SYMBOL vmlinux 0x6c0b10b6 ilookup5 +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c2e3320 strncmp +EXPORT_SYMBOL vmlinux 0x6c3235e7 touch_atime +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c3a97a8 __register_chrdev +EXPORT_SYMBOL vmlinux 0x6c4365f5 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x6c57d132 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c8ec3ea sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x6c97067b lock_sock_nested +EXPORT_SYMBOL vmlinux 0x6cb8a02b elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x6cc5486c d_alloc_root +EXPORT_SYMBOL vmlinux 0x6ccfedda scsi_register_interface +EXPORT_SYMBOL vmlinux 0x6cd1bc32 nonseekable_open +EXPORT_SYMBOL vmlinux 0x6cd431ab d_alloc +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d288375 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d4201e7 blk_plug_device +EXPORT_SYMBOL vmlinux 0x6d4df450 tcf_em_register +EXPORT_SYMBOL vmlinux 0x6d549854 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x6d55e3f2 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d83700d d_move +EXPORT_SYMBOL vmlinux 0x6d8fbd4b udp_prot +EXPORT_SYMBOL vmlinux 0x6db7909c pci_disable_device +EXPORT_SYMBOL vmlinux 0x6dbde593 is_bad_inode +EXPORT_SYMBOL vmlinux 0x6dc043d6 user_path_at +EXPORT_SYMBOL vmlinux 0x6dc0c24b complete_and_exit +EXPORT_SYMBOL vmlinux 0x6dcb53ed eisa_bus_type +EXPORT_SYMBOL vmlinux 0x6deed881 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e0f44f8 simple_statfs +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6ea68539 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x6eabe1c0 scsi_print_command +EXPORT_SYMBOL vmlinux 0x6eb0fdf3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x6ed62bcf mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x6efed7a3 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x6f357f70 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x6f51eb94 simple_sync_file +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f825212 get_sb_ns +EXPORT_SYMBOL vmlinux 0x6fc10c97 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fd9a09f xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x6fe96915 journal_restart +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x701d0ebd snprintf +EXPORT_SYMBOL vmlinux 0x7044322e tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x7063f659 path_lookup +EXPORT_SYMBOL vmlinux 0x706c20bc neigh_seq_start +EXPORT_SYMBOL vmlinux 0x70a944de dev_alloc_skb +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70c2cd6f __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x70d1f8f3 strncat +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70da2e44 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x70dc114f pnp_device_attach +EXPORT_SYMBOL vmlinux 0x70dd1869 neigh_update +EXPORT_SYMBOL vmlinux 0x710a180c i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x710ce80f have_submounts +EXPORT_SYMBOL vmlinux 0x7127b356 bdput +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x712aa29b _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x71356fba remove_wait_queue +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71b89b5a create_mnt_ns +EXPORT_SYMBOL vmlinux 0x71c5a596 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x71c5d761 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x71ce9905 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x71db7b34 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x72104bdb cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x722501ed make_EII_client +EXPORT_SYMBOL vmlinux 0x7229902c tcp_connect +EXPORT_SYMBOL vmlinux 0x725289d8 fsync_bdev +EXPORT_SYMBOL vmlinux 0x727bf748 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72dda130 pnp_is_active +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x730368cb simple_fill_super +EXPORT_SYMBOL vmlinux 0x730c2348 path_put +EXPORT_SYMBOL vmlinux 0x732dcbec jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x73390586 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x733ebcb7 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x7348f759 sg_miter_next +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x7362dd1e vfs_fstat +EXPORT_SYMBOL vmlinux 0x73869e3e cdev_add +EXPORT_SYMBOL vmlinux 0x738803e6 strnlen +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x738d31d9 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x73a4b3c6 log_wait_commit +EXPORT_SYMBOL vmlinux 0x73c6f8aa md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x73d384d8 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x73d54e17 kernel_read +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x7413793a EISA_bus +EXPORT_SYMBOL vmlinux 0x741b882c mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x742e4310 console_stop +EXPORT_SYMBOL vmlinux 0x743c22fb bio_init +EXPORT_SYMBOL vmlinux 0x7448e2df locks_init_lock +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x745a30d5 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x748caf40 down +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74e38ca2 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x750f08cd netdev_state_change +EXPORT_SYMBOL vmlinux 0x750f1e55 i2c_transfer +EXPORT_SYMBOL vmlinux 0x751ba539 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x7524dfe1 simple_rename +EXPORT_SYMBOL vmlinux 0x75271716 save_processor_state +EXPORT_SYMBOL vmlinux 0x752e105d blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x753d85bf udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x75b4be0f tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x75d76f06 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x75e1b400 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x75edb30c sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x75f1f501 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x75f9f8b3 set_irq_chip +EXPORT_SYMBOL vmlinux 0x75fc05f3 simple_fsync +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x765ce515 unregister_netdevice +EXPORT_SYMBOL vmlinux 0x766185ec ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x76836901 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x76891d1a page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x769c4771 blk_get_request +EXPORT_SYMBOL vmlinux 0x76ae3862 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x76b10048 register_gifconf +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76c64e7c kill_anon_super +EXPORT_SYMBOL vmlinux 0x76c6e897 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76d9bece nobh_write_end +EXPORT_SYMBOL vmlinux 0x76f3f8a5 num_k8_northbridges +EXPORT_SYMBOL vmlinux 0x76f71c77 set_binfmt +EXPORT_SYMBOL vmlinux 0x770a0036 isapnp_cfg_begin +EXPORT_SYMBOL vmlinux 0x770e9450 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x77125260 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x77175652 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x772e8868 bio_put +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x773e4337 dqput +EXPORT_SYMBOL vmlinux 0x7798a9ff acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x77a108df _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fc80ae pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x7823641e sock_setsockopt +EXPORT_SYMBOL vmlinux 0x7856414f inet_listen +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x785fa85b vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x78891581 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x788a2503 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x788a71aa bio_unmap_user +EXPORT_SYMBOL vmlinux 0x78a484c9 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x78b3d7cd bio_endio +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78e68ddb pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x78e8fd17 udp_ioctl +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x79416b11 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x794487ee disable_hlt +EXPORT_SYMBOL vmlinux 0x7969956c cdev_index +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x79a116ad blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x79a50a8a mmc_free_host +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79d144ae vm_map_ram +EXPORT_SYMBOL vmlinux 0x7a0c3f6e file_remove_suid +EXPORT_SYMBOL vmlinux 0x7a107d23 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x7a16c4d8 block_prepare_write +EXPORT_SYMBOL vmlinux 0x7a1bcbc6 genl_register_ops +EXPORT_SYMBOL vmlinux 0x7a26d3cd skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a2cfd21 generic_setxattr +EXPORT_SYMBOL vmlinux 0x7a436a6a tty_register_driver +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a511307 vga_tryget +EXPORT_SYMBOL vmlinux 0x7a848702 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x7a861024 proc_mkdir +EXPORT_SYMBOL vmlinux 0x7ab56816 read_cache_page +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b10478e ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0x7b134ddf acpi_get_name +EXPORT_SYMBOL vmlinux 0x7b2b0e41 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x7b3ba69d clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b8a835b neigh_for_each +EXPORT_SYMBOL vmlinux 0x7b8afb01 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x7bc80f0e scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x7bd4c3b7 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x7bd508ca pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x7be335a9 journal_forget +EXPORT_SYMBOL vmlinux 0x7bef88f8 inet_bind +EXPORT_SYMBOL vmlinux 0x7bf0d894 dev_addr_del +EXPORT_SYMBOL vmlinux 0x7c0ca90f arp_find +EXPORT_SYMBOL vmlinux 0x7c44cdf0 __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c5d9742 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c6b9602 __scm_destroy +EXPORT_SYMBOL vmlinux 0x7c6d72a9 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x7c862f10 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c93291d serio_open +EXPORT_SYMBOL vmlinux 0x7c9b6087 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x7ca11c50 open_exec +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cf33818 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x7d0a23bd generic_file_llseek +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d33a625 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x7d4fe7b9 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x7d5e1e94 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x7dbc38b4 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd9d681 register_key_type +EXPORT_SYMBOL vmlinux 0x7ddf19cb consume_skb +EXPORT_SYMBOL vmlinux 0x7ddf8a98 napi_frags_finish +EXPORT_SYMBOL vmlinux 0x7df8d4b4 acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0x7e1c2e15 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x7e38229e inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x7e3d5ecd d_delete +EXPORT_SYMBOL vmlinux 0x7e59dc80 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x7e83f2e8 kick_iocb +EXPORT_SYMBOL vmlinux 0x7e8d3bae fb_set_cmap +EXPORT_SYMBOL vmlinux 0x7e8d887b block_fsync +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7eb70846 get_sb_single +EXPORT_SYMBOL vmlinux 0x7ec6c22c sock_recvmsg +EXPORT_SYMBOL vmlinux 0x7ecb001b __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x7ed71945 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x7ee91c1d _spin_trylock +EXPORT_SYMBOL vmlinux 0x7eeac2c6 path_get +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f5e0d0b dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x7f6066dd inet_ioctl +EXPORT_SYMBOL vmlinux 0x7f71b555 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x7f9236da __lock_buffer +EXPORT_SYMBOL vmlinux 0x7febafbe qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x7ff71d83 ht_create_irq +EXPORT_SYMBOL vmlinux 0x80178f69 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x8038d45f slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x803cf5e2 devm_iounmap +EXPORT_SYMBOL vmlinux 0x804d00e7 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x8063f83d radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x8082a737 pci_save_state +EXPORT_SYMBOL vmlinux 0x80b4f468 dm_table_put +EXPORT_SYMBOL vmlinux 0x80c0233f blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x80da3a40 uart_match_port +EXPORT_SYMBOL vmlinux 0x80f30009 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x8103d973 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x811d8a69 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x814984fe __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x81519470 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815bf415 d_splice_alias +EXPORT_SYMBOL vmlinux 0x815c56d0 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x815c9ff7 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x81799cee vscnprintf +EXPORT_SYMBOL vmlinux 0x817bca17 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x818b25ec inet_accept +EXPORT_SYMBOL vmlinux 0x819a9a76 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x81a25ee1 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x81a9bde0 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x81b56e14 tc_classify +EXPORT_SYMBOL vmlinux 0x81c7d27d pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x81d8f575 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x81deb18f simple_write_end +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x81f5d9dc mdiobus_read +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820fc63c vfsmount_lock +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x82330a91 follow_down +EXPORT_SYMBOL vmlinux 0x8235805b memmove +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82590c5f pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82777727 scsi_finish_command +EXPORT_SYMBOL vmlinux 0x828012cb acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82bb72ab __serio_register_driver +EXPORT_SYMBOL vmlinux 0x82c3f286 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x82c41736 clocksource_register +EXPORT_SYMBOL vmlinux 0x82e02f20 simple_getattr +EXPORT_SYMBOL vmlinux 0x830333a6 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x8308d511 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x830e547b ioremap_prot +EXPORT_SYMBOL vmlinux 0x8317e20a completion_done +EXPORT_SYMBOL vmlinux 0x833ed0db remove_arg_zero +EXPORT_SYMBOL vmlinux 0x834f9b70 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x83500120 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x835740b2 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x837b73ee grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x837fd197 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x838f4d3c input_unregister_handler +EXPORT_SYMBOL vmlinux 0x83904ad4 per_cpu__irq_regs +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83ad637f arp_create +EXPORT_SYMBOL vmlinux 0x83eee4cc journal_start_commit +EXPORT_SYMBOL vmlinux 0x83f2f94a loop_register_transfer +EXPORT_SYMBOL vmlinux 0x83f8ea49 keyring_search +EXPORT_SYMBOL vmlinux 0x848e0f90 init_net +EXPORT_SYMBOL vmlinux 0x84cbaba8 kthread_create +EXPORT_SYMBOL vmlinux 0x84d2ac13 dquot_release +EXPORT_SYMBOL vmlinux 0x84dea14a generic_write_checks +EXPORT_SYMBOL vmlinux 0x84ea6129 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x853e2b10 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x856b6744 block_sync_page +EXPORT_SYMBOL vmlinux 0x85717aeb journal_load +EXPORT_SYMBOL vmlinux 0x8579c48c ether_setup +EXPORT_SYMBOL vmlinux 0x85ac7f10 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x86040978 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x8611d11b call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x8663002c iput +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86a8649b __kfree_skb +EXPORT_SYMBOL vmlinux 0x86d9aa40 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x870fa633 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x8733e9a3 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87a4b07a __devm_release_region +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87ad397b xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x87afde0a pci_assign_resource +EXPORT_SYMBOL vmlinux 0x87ca1b49 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x87d13454 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x87d4315a __netif_schedule +EXPORT_SYMBOL vmlinux 0x87f438a2 sysctl_intvec +EXPORT_SYMBOL vmlinux 0x87f45ab9 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x88025b11 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x8837ca88 ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x8875a499 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x88cc88a6 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x88e7e074 netdev_features_change +EXPORT_SYMBOL vmlinux 0x890ac905 submit_bio +EXPORT_SYMBOL vmlinux 0x8914fda5 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x8921c143 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x89267d95 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x8929f950 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x8936375e skb_trim +EXPORT_SYMBOL vmlinux 0x893ed33e generic_ro_fops +EXPORT_SYMBOL vmlinux 0x8955137e tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x8957ec83 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x895af11d dev_open +EXPORT_SYMBOL vmlinux 0x8969b997 ida_get_new +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x898cd8b1 mca_device_claimed +EXPORT_SYMBOL vmlinux 0x89949018 down_timeout +EXPORT_SYMBOL vmlinux 0x89a098f9 __destroy_inode +EXPORT_SYMBOL vmlinux 0x89bafdf9 dentry_unhash +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89e93db2 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a1bc572 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x8a23f20f pnp_possible_config +EXPORT_SYMBOL vmlinux 0x8a2ba2e2 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3eabf0 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8a466eb5 flush_signals +EXPORT_SYMBOL vmlinux 0x8a6bf422 journal_flush +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a9590e3 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aa3bee0 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x8aa58c14 find_get_page +EXPORT_SYMBOL vmlinux 0x8ac6395b per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0x8acfdea4 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x8ae77528 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x8ae9426d netlink_dump_start +EXPORT_SYMBOL vmlinux 0x8b00e22e generic_write_end +EXPORT_SYMBOL vmlinux 0x8b040f3c scsi_register_driver +EXPORT_SYMBOL vmlinux 0x8b13fbed kunmap_high +EXPORT_SYMBOL vmlinux 0x8b18496f __copy_to_user_ll +EXPORT_SYMBOL vmlinux 0x8b201a42 single_open +EXPORT_SYMBOL vmlinux 0x8b2ae519 pci_dev_get +EXPORT_SYMBOL vmlinux 0x8b2dfd52 key_link +EXPORT_SYMBOL vmlinux 0x8b337154 thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b5037ed xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b79fc9e vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0x8b7d1626 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8baf1684 simple_rmdir +EXPORT_SYMBOL vmlinux 0x8bb2f9ea scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c348277 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x8c3a1758 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x8caccac8 netlink_unicast +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cfd511d dev_mc_add +EXPORT_SYMBOL vmlinux 0x8d0ed39f skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x8d12b3e9 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x8d193fbc dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x8d2e3f96 inet_frag_find +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d53b3c5 skb_tx_hash +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d6f81b4 __div64_32 +EXPORT_SYMBOL vmlinux 0x8d7ba8d3 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x8d7fae19 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8d9c1ab6 pci_request_region +EXPORT_SYMBOL vmlinux 0x8dc6e564 restore_processor_state +EXPORT_SYMBOL vmlinux 0x8dca832f __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x8df95c0d rfkill_alloc +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e039ec0 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x8e0637ba i8253_lock +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e386a87 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x8e571572 keyring_clear +EXPORT_SYMBOL vmlinux 0x8e5857fa fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e888ec3 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x8e8abadc bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x8ea14484 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x8ec5dfe6 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x8ee04184 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f3b54ac skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6183f7 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f8cc3d3 set_disk_ro +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8fb5a05b journal_start +EXPORT_SYMBOL vmlinux 0x8fdfff08 generic_fillattr +EXPORT_SYMBOL vmlinux 0x8ff327cd __secpath_destroy +EXPORT_SYMBOL vmlinux 0x8ff4079b pv_irq_ops +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x901cb30e __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x9024918b ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x90299073 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0x9038f717 unregister_netdev +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x90466c40 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x905ae566 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x907b9914 lease_modify +EXPORT_SYMBOL vmlinux 0x909c3354 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90ad34df inode_init_always +EXPORT_SYMBOL vmlinux 0x90dfd164 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x91009452 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x910d1336 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x91131295 dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x912d213f uart_add_one_port +EXPORT_SYMBOL vmlinux 0x91319c6a inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x9154dad0 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x9178c1e4 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x91cea7af vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x91d0bb1c handle_sysrq +EXPORT_SYMBOL vmlinux 0x91e244e4 genphy_update_link +EXPORT_SYMBOL vmlinux 0x92118e15 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x921ea44e is_container_init +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x9247b966 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x92897e3d default_idle +EXPORT_SYMBOL vmlinux 0x92c98889 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x92d11ef8 genphy_suspend +EXPORT_SYMBOL vmlinux 0x92e235ac sk_receive_skb +EXPORT_SYMBOL vmlinux 0x92ffa7e5 generic_readlink +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x934d0176 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x93646209 module_layout +EXPORT_SYMBOL vmlinux 0x9385667d down_read_trylock +EXPORT_SYMBOL vmlinux 0x93a68346 may_umount_tree +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93b07653 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x93c206c2 netpoll_setup +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93cbd1ec _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x93fe7c19 alloc_disk +EXPORT_SYMBOL vmlinux 0x93ff4338 phy_device_free +EXPORT_SYMBOL vmlinux 0x940381f2 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94910570 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x94932ccd pnp_find_card +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a6467e kobject_put +EXPORT_SYMBOL vmlinux 0x94b35486 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x94b541b5 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x94c438ad tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x94d2e480 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x94ffeed6 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x950db601 set_bh_page +EXPORT_SYMBOL vmlinux 0x951eac7d input_unfilter_device +EXPORT_SYMBOL vmlinux 0x95352ea9 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x95377459 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x95e911df blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x9609db83 netlink_ack +EXPORT_SYMBOL vmlinux 0x960e2626 fb_blank +EXPORT_SYMBOL vmlinux 0x9629486a per_cpu__cpu_number +EXPORT_SYMBOL vmlinux 0x962c5cfb textsearch_unregister +EXPORT_SYMBOL vmlinux 0x96529e56 check_disk_change +EXPORT_SYMBOL vmlinux 0x965327f3 ilookup +EXPORT_SYMBOL vmlinux 0x965905c3 blk_insert_request +EXPORT_SYMBOL vmlinux 0x96630a95 simple_lookup +EXPORT_SYMBOL vmlinux 0x9687af58 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x96a98bc7 pci_clear_master +EXPORT_SYMBOL vmlinux 0x96cb4419 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96d3948a lookup_bdev +EXPORT_SYMBOL vmlinux 0x96dab55c dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x973873ab _spin_lock +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x975f3523 invalidate_partition +EXPORT_SYMBOL vmlinux 0x97667cb5 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x977a2b32 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x9800fd83 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x980552af tcp_proc_register +EXPORT_SYMBOL vmlinux 0x984bf3f0 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x98614983 km_policy_expired +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x9896293d tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x9897aba5 register_snap_client +EXPORT_SYMBOL vmlinux 0x98b5e7fe blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x98ba3b81 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x98c1dc0d tty_unregister_device +EXPORT_SYMBOL vmlinux 0x99052a84 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x991b0888 inet_shutdown +EXPORT_SYMBOL vmlinux 0x991e861f simple_pin_fs +EXPORT_SYMBOL vmlinux 0x993c6c3e pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x998d3b38 blk_unplug +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99ada676 icmpv6_send +EXPORT_SYMBOL vmlinux 0x99b232e0 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cd1fb4 seq_release_private +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99d74c93 tty_hangup +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99fb5533 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x99ff87d4 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x9a0432d1 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x9a1b2140 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a3dba05 get_user_pages +EXPORT_SYMBOL vmlinux 0x9a6a83f9 cmos_lock +EXPORT_SYMBOL vmlinux 0x9a6cfdce vfs_create +EXPORT_SYMBOL vmlinux 0x9a726535 read_cache_pages +EXPORT_SYMBOL vmlinux 0x9a9863da set_blocksize +EXPORT_SYMBOL vmlinux 0x9a9985be percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x9b074241 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x9b188c92 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x9b2ea78d nf_ct_attach +EXPORT_SYMBOL vmlinux 0x9b36f690 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b4de8eb idr_replace +EXPORT_SYMBOL vmlinux 0x9b532269 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x9b54d2d3 sock_no_listen +EXPORT_SYMBOL vmlinux 0x9b667be8 default_file_splice_read +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b8ec2e7 qdisc_reset +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bb6adcd __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x9bf6c547 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c2c944a __copy_from_user_ll_nocache_nozero +EXPORT_SYMBOL vmlinux 0x9c458567 netif_rx +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c7077bd enable_hlt +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9ca9ac59 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x9cb05a97 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9ccb2622 finish_wait +EXPORT_SYMBOL vmlinux 0x9ce353b7 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9ced38aa down_trylock +EXPORT_SYMBOL vmlinux 0x9cf183b8 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d2a956f textsearch_register +EXPORT_SYMBOL vmlinux 0x9d317b68 elevator_exit +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d6cb4ca vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0x9d748d63 register_qdisc +EXPORT_SYMBOL vmlinux 0x9d7e721f tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x9d82df60 dump_trace +EXPORT_SYMBOL vmlinux 0x9d8bf2c5 aio_put_req +EXPORT_SYMBOL vmlinux 0x9dd45fbd vfs_getattr +EXPORT_SYMBOL vmlinux 0x9dda62fa generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e3b528a mutex_lock +EXPORT_SYMBOL vmlinux 0x9e48c4b4 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x9e4b3747 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x9e571101 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e70d378 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x9e780793 llc_add_pack +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e84f308 lro_receive_frags +EXPORT_SYMBOL vmlinux 0x9e9d3dbc nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9ee49f88 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x9ee5ce5b bdget_disk +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9eeebafc skb_push +EXPORT_SYMBOL vmlinux 0x9eefa6a0 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f10c1c2 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x9f159b3a pskb_copy +EXPORT_SYMBOL vmlinux 0x9f1e14c0 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f38d929 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x9f403021 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f4b9105 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x9f59da53 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x9f7a12ac ip6_frag_match +EXPORT_SYMBOL vmlinux 0x9f92efc4 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa274b4 dq_data_lock +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fcc2e82 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x9feacecd tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x9ff524c1 audit_log_end +EXPORT_SYMBOL vmlinux 0xa02a2916 spi_dv_device +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa039ce75 dma_pool_free +EXPORT_SYMBOL vmlinux 0xa0496426 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa04c04ee km_query +EXPORT_SYMBOL vmlinux 0xa0525a2c mca_unregister_driver +EXPORT_SYMBOL vmlinux 0xa05aabd1 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa05f8505 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xa06db96f linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0xa07c4cba inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xa0963999 tty_port_hangup +EXPORT_SYMBOL vmlinux 0xa0a4ac21 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0e27b51 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa186b5a6 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0xa19124d7 send_sig +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1d86b8f pnp_request_card_device +EXPORT_SYMBOL vmlinux 0xa1e18c07 dst_discard +EXPORT_SYMBOL vmlinux 0xa1f03173 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa22c67a2 d_path +EXPORT_SYMBOL vmlinux 0xa2305419 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xa2419d37 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xa295c571 sk_run_filter +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a0c8f5 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xa2a1e5c9 _write_lock_bh +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b850c4 inet6_release +EXPORT_SYMBOL vmlinux 0xa2b8a2ba __init_rwsem +EXPORT_SYMBOL vmlinux 0xa2d62a0a netif_carrier_on +EXPORT_SYMBOL vmlinux 0xa2e4cbfb k8_northbridges +EXPORT_SYMBOL vmlinux 0xa2fccc58 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0xa2ff3bc9 iunique +EXPORT_SYMBOL vmlinux 0xa31f7895 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0xa320baf0 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xa32549c6 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa3493608 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xa34c350d replace_mount_options +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35c1f05 acpi_extract_package +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3ab9b04 register_sysctl_table +EXPORT_SYMBOL vmlinux 0xa3b4aee9 journal_abort +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3d5f05c save_mount_options +EXPORT_SYMBOL vmlinux 0xa415b384 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xa41c08d4 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0xa420c179 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0xa438e550 sk_common_release +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa44ad274 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xa45df4ee rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xa45f0f2f redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xa4815551 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xa4883f19 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0xa4b108ee pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0xa4b84230 filp_close +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4ca23a4 generic_delete_inode +EXPORT_SYMBOL vmlinux 0xa4cc94a5 scsi_remove_host +EXPORT_SYMBOL vmlinux 0xa51cdfe8 __FIXADDR_TOP +EXPORT_SYMBOL vmlinux 0xa535d511 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xa566642a elv_rb_del +EXPORT_SYMBOL vmlinux 0xa56a03a3 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xa56e3db1 qdisc_destroy +EXPORT_SYMBOL vmlinux 0xa56f1315 mempool_free +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa58e99d8 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xa591199d mca_device_transform_ioport +EXPORT_SYMBOL vmlinux 0xa5922bb1 kfifo_init +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5ad3424 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0xa5bbb17e proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0xa5c4a136 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xa5cb5d6e blk_put_request +EXPORT_SYMBOL vmlinux 0xa5da0abd acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0xa5eed80f arp_xmit +EXPORT_SYMBOL vmlinux 0xa62eb6c1 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xa6356a30 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa66c1997 follow_pfn +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6babac5 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0xa6bac564 security_inode_readlink +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6e9fb85 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xa7012c33 hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xa7046549 vprintk +EXPORT_SYMBOL vmlinux 0xa70be681 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa71102fa skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0xa71e7463 __first_cpu +EXPORT_SYMBOL vmlinux 0xa751f9ed mdio_bus_type +EXPORT_SYMBOL vmlinux 0xa787393a blk_init_tags +EXPORT_SYMBOL vmlinux 0xa78a1150 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0xa791d013 journal_get_write_access +EXPORT_SYMBOL vmlinux 0xa79a5bac bio_map_user +EXPORT_SYMBOL vmlinux 0xa7cbe0b2 iget_failed +EXPORT_SYMBOL vmlinux 0xa7d5cc43 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xa7f52a95 init_special_inode +EXPORT_SYMBOL vmlinux 0xa7fa347f task_nice +EXPORT_SYMBOL vmlinux 0xa7fb56e8 no_llseek +EXPORT_SYMBOL vmlinux 0xa7ff7082 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xa80b441e request_key_async +EXPORT_SYMBOL vmlinux 0xa8428def blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0xa84f8e37 kmap_atomic +EXPORT_SYMBOL vmlinux 0xa85543ab fb_class +EXPORT_SYMBOL vmlinux 0xa8884968 register_netdevice +EXPORT_SYMBOL vmlinux 0xa89acbb3 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8bfbc82 dev_get_flags +EXPORT_SYMBOL vmlinux 0xa8d22a7d set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa9014694 poll_freewait +EXPORT_SYMBOL vmlinux 0xa90fcffc tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0xa9146adb sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa9588c71 file_fsync +EXPORT_SYMBOL vmlinux 0xa95bcc67 block_commit_write +EXPORT_SYMBOL vmlinux 0xa9651c02 nobh_writepage +EXPORT_SYMBOL vmlinux 0xa988e836 tty_port_close_end +EXPORT_SYMBOL vmlinux 0xa99f15c2 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0xa9c0c0e8 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0xa9f5afef bio_integrity_endio +EXPORT_SYMBOL vmlinux 0xa9fcf31d wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xaa1a06b8 spi_display_xfer_agreement +EXPORT_SYMBOL vmlinux 0xaa1aefbb sock_no_getname +EXPORT_SYMBOL vmlinux 0xaa1c9964 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xaa695e48 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xaa84a8ae acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0xaa94c605 blk_fetch_request +EXPORT_SYMBOL vmlinux 0xaaae9b4e seq_path +EXPORT_SYMBOL vmlinux 0xaab06af8 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xaab15a20 thaw_process +EXPORT_SYMBOL vmlinux 0xaabfef43 noop_qdisc +EXPORT_SYMBOL vmlinux 0xaac17e31 vc_resize +EXPORT_SYMBOL vmlinux 0xaac346e4 blk_remove_plug +EXPORT_SYMBOL vmlinux 0xaae509ca give_up_console +EXPORT_SYMBOL vmlinux 0xaae53ea1 sock_no_bind +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaebe34f mca_write_pos +EXPORT_SYMBOL vmlinux 0xaaefcb71 force_sig +EXPORT_SYMBOL vmlinux 0xaaf41dc9 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab5171e2 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb9406d cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0xabc6f575 md_write_end +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabebb442 pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0xabee888a sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac0ca6b5 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0xac104116 input_event +EXPORT_SYMBOL vmlinux 0xac10ea87 may_umount +EXPORT_SYMBOL vmlinux 0xac1e0e50 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac5c422a splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac6db297 mem_map +EXPORT_SYMBOL vmlinux 0xac7341f5 nf_register_hook +EXPORT_SYMBOL vmlinux 0xac964a4d cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0xacb542c5 scm_fp_dup +EXPORT_SYMBOL vmlinux 0xacb6478e neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0xacbe0eed rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0xacc91e29 rtnl_notify +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacd37de3 scsi_execute +EXPORT_SYMBOL vmlinux 0xacdd4244 acpi_bus_add +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacef633a __find_get_block +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacfa4850 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xad0293ed __starget_for_each_device +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad1dd993 open_by_devnum +EXPORT_SYMBOL vmlinux 0xad2c3667 request_key +EXPORT_SYMBOL vmlinux 0xad38dfe0 get_sb_bdev +EXPORT_SYMBOL vmlinux 0xad3e8096 pci_select_bars +EXPORT_SYMBOL vmlinux 0xad4b3a3b vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0xad5fa703 dquot_alloc +EXPORT_SYMBOL vmlinux 0xad68eda5 eisa_driver_unregister +EXPORT_SYMBOL vmlinux 0xad72c250 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0xad7e77f6 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xad81cae6 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0xad88ca85 blk_init_queue +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xade8fb58 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xadf33907 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0xae1b7923 __bforget +EXPORT_SYMBOL vmlinux 0xae1f03d4 sock_wake_async +EXPORT_SYMBOL vmlinux 0xae271fd4 kmem_cache_free +EXPORT_SYMBOL vmlinux 0xae2d73b5 pipe_to_file +EXPORT_SYMBOL vmlinux 0xae2e7fb9 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xae38616c d_rehash +EXPORT_SYMBOL vmlinux 0xae5aaddb fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xae75f004 ida_destroy +EXPORT_SYMBOL vmlinux 0xae8c2827 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xae8effed __sk_dst_check +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaf0b984e free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xaf11f0f1 key_negate_and_link +EXPORT_SYMBOL vmlinux 0xaf12c42a inet_stream_ops +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf4b1540 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xaf57e11e textsearch_destroy +EXPORT_SYMBOL vmlinux 0xaf760ff4 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xaf7c237e __nla_put +EXPORT_SYMBOL vmlinux 0xafc2eea0 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xafe36015 mca_device_read_stored_pos +EXPORT_SYMBOL vmlinux 0xb00300c9 sock_wfree +EXPORT_SYMBOL vmlinux 0xb010ccbd slow_work_register_user +EXPORT_SYMBOL vmlinux 0xb027a0a0 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xb03897e2 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xb077ef32 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb07f6797 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0xb08f76ad gen_pool_free +EXPORT_SYMBOL vmlinux 0xb09c04e8 start_tty +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0d88a85 skb_clone +EXPORT_SYMBOL vmlinux 0xb0dec233 skb_dma_map +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb1153f14 tcf_action_exec +EXPORT_SYMBOL vmlinux 0xb11a3154 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb1221a24 dev_gro_receive +EXPORT_SYMBOL vmlinux 0xb126c60f sockfd_lookup +EXPORT_SYMBOL vmlinux 0xb12fefc0 do_sync_read +EXPORT_SYMBOL vmlinux 0xb1396af8 truncate_pagecache +EXPORT_SYMBOL vmlinux 0xb13c3328 key_validate +EXPORT_SYMBOL vmlinux 0xb14200aa get_super +EXPORT_SYMBOL vmlinux 0xb142c23b netif_device_attach +EXPORT_SYMBOL vmlinux 0xb1530422 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xb15d448d disk_stack_limits +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb16e1268 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xb182baac fput +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1ba208a dcache_dir_open +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1d93902 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb20e86c6 skb_split +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb2253c28 __put_cred +EXPORT_SYMBOL vmlinux 0xb22afe71 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb231f5e2 bd_claim +EXPORT_SYMBOL vmlinux 0xb2355fdb get_fs_type +EXPORT_SYMBOL vmlinux 0xb249b08d rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0xb24e2e5f pskb_expand_head +EXPORT_SYMBOL vmlinux 0xb25ea62b create_proc_entry +EXPORT_SYMBOL vmlinux 0xb2633f4c ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb26acf9f per_cpu__current_task +EXPORT_SYMBOL vmlinux 0xb272fd2a proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0xb27510ef atomic64_inc_return +EXPORT_SYMBOL vmlinux 0xb279da12 pv_lock_ops +EXPORT_SYMBOL vmlinux 0xb2848878 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0xb29bc8bd idr_remove +EXPORT_SYMBOL vmlinux 0xb2c429c7 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0xb2efb6be mca_read_stored_pos +EXPORT_SYMBOL vmlinux 0xb2f9eca0 __elv_add_request +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb30abf8d idr_get_new_above +EXPORT_SYMBOL vmlinux 0xb313b0f5 write_cache_pages +EXPORT_SYMBOL vmlinux 0xb3193819 mapping_tagged +EXPORT_SYMBOL vmlinux 0xb3205415 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb330e1ff registered_fb +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb376d79d radix_tree_tagged +EXPORT_SYMBOL vmlinux 0xb38cf1a5 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3a1bd98 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3c42c94 per_cpu__x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xb3e0590d acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0xb3f30a9f dquot_commit_info +EXPORT_SYMBOL vmlinux 0xb3fe7efc ilookup5_nowait +EXPORT_SYMBOL vmlinux 0xb4027891 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0xb405a2f5 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xb413053c request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xb41deda8 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4279ab7 downgrade_write +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb43e3320 sk_alloc +EXPORT_SYMBOL vmlinux 0xb4436a0e xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xb45578b8 memscan +EXPORT_SYMBOL vmlinux 0xb45b24f6 k8_nb_ids +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb47500a3 datagram_poll +EXPORT_SYMBOL vmlinux 0xb4b0ee4e down_read +EXPORT_SYMBOL vmlinux 0xb4ca9447 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb4df9304 napi_gro_frags +EXPORT_SYMBOL vmlinux 0xb504110b input_get_keycode +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb51bdc26 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0xb533e36f pagevec_lookup +EXPORT_SYMBOL vmlinux 0xb5418861 atomic64_add +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb59b8bad tcp_recvmsg +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5ad8fd3 deny_write_access +EXPORT_SYMBOL vmlinux 0xb5afe234 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0xb5bd2cf4 security_path_link +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb601bd75 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0xb60a0da1 sock_create_lite +EXPORT_SYMBOL vmlinux 0xb6165cfc alloc_file +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb62eefca __break_lease +EXPORT_SYMBOL vmlinux 0xb6353555 per_cpu__x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0xb654da44 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xb65ba6ef inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb67ce1a0 serio_close +EXPORT_SYMBOL vmlinux 0xb6896671 crc_t10dif +EXPORT_SYMBOL vmlinux 0xb68ac812 cdev_alloc +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6ab3c7c install_exec_creds +EXPORT_SYMBOL vmlinux 0xb6b794ac try_to_release_page +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6c6b60f dev_alloc_name +EXPORT_SYMBOL vmlinux 0xb6ca758b i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0xb6cd4e8d bio_kmalloc +EXPORT_SYMBOL vmlinux 0xb6e227aa rtc_lock +EXPORT_SYMBOL vmlinux 0xb6e5adef security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0xb6ed1e53 strncpy +EXPORT_SYMBOL vmlinux 0xb6f9bcd3 journal_init_inode +EXPORT_SYMBOL vmlinux 0xb703911e release_firmware +EXPORT_SYMBOL vmlinux 0xb72397d5 printk +EXPORT_SYMBOL vmlinux 0xb74c62d3 pci_write_vpd +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb75928d5 skb_dequeue +EXPORT_SYMBOL vmlinux 0xb7690530 register_8022_client +EXPORT_SYMBOL vmlinux 0xb7745be6 sync_inode +EXPORT_SYMBOL vmlinux 0xb778304f cfb_copyarea +EXPORT_SYMBOL vmlinux 0xb77fe139 ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xb7953e5d tty_name +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7cab144 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7d4006c blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xb7e6927b dma_ops +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb81ea5b8 posix_test_lock +EXPORT_SYMBOL vmlinux 0xb82ff522 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0xb84ed32f proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0xb853ea84 block_invalidatepage +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb872c5f4 ip6_route_output +EXPORT_SYMBOL vmlinux 0xb877406f __page_symlink +EXPORT_SYMBOL vmlinux 0xb88bf062 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8a92a29 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xb8bfc2f3 skb_over_panic +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb9076a40 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0xb908c1aa phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0xb90de31d vfs_dq_drop +EXPORT_SYMBOL vmlinux 0xb924b75b tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xb9326dff request_firmware +EXPORT_SYMBOL vmlinux 0xb9367e03 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0xb936839b pci_unmap_rom +EXPORT_SYMBOL vmlinux 0xb942b513 smp_call_function_many +EXPORT_SYMBOL vmlinux 0xb94e0ae4 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xb9556052 input_register_device +EXPORT_SYMBOL vmlinux 0xb9734c67 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb98ef804 vm_stat +EXPORT_SYMBOL vmlinux 0xb99b9c93 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xb9bb7196 sock_no_poll +EXPORT_SYMBOL vmlinux 0xb9cdf4e8 proc_symlink +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba147986 xrlim_allow +EXPORT_SYMBOL vmlinux 0xba2c0e54 uart_register_driver +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba539caa pci_map_rom +EXPORT_SYMBOL vmlinux 0xba69cd25 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0xba6c5267 xfrm_input +EXPORT_SYMBOL vmlinux 0xba844af5 dmam_pool_create +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbab4fa2e fasync_helper +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb2e3162 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xbb506e00 kernel_listen +EXPORT_SYMBOL vmlinux 0xbb597007 sg_miter_stop +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb5f0669 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0xbb62f9ba dquot_free_space +EXPORT_SYMBOL vmlinux 0xbb89de17 ida_init +EXPORT_SYMBOL vmlinux 0xbbd374a5 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0xbbe357a5 dm_io +EXPORT_SYMBOL vmlinux 0xbc2c31c9 remove_proc_entry +EXPORT_SYMBOL vmlinux 0xbc2c33c5 inet_del_protocol +EXPORT_SYMBOL vmlinux 0xbc8164a7 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0xbc8718ea scsi_is_host_device +EXPORT_SYMBOL vmlinux 0xbc8c14ee cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbd06fbb4 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0xbd109dc8 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xbd18c919 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0xbd2af0cc audit_log_start +EXPORT_SYMBOL vmlinux 0xbd34094d jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xbd56bbd6 dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0xbd618cae netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0xbd767f6b inode_permission +EXPORT_SYMBOL vmlinux 0xbd88beea starget_for_each_device +EXPORT_SYMBOL vmlinux 0xbd9297ba __invalidate_device +EXPORT_SYMBOL vmlinux 0xbdb50170 seq_putc +EXPORT_SYMBOL vmlinux 0xbdb6500e per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe114ddb llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0xbec93873 xfrm_register_type +EXPORT_SYMBOL vmlinux 0xbedf20c6 inode_setattr +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf255a7f mca_device_write_pos +EXPORT_SYMBOL vmlinux 0xbf6daf47 __pagevec_release +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8b39e9 isapnp_present +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfa0b9cd pci_get_slot +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfd45541 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xbfe1f7c5 mpage_readpages +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc0118b1c sk_stop_timer +EXPORT_SYMBOL vmlinux 0xc01eed33 __copy_from_user_ll_nozero +EXPORT_SYMBOL vmlinux 0xc0262c00 pci_do_scan_bus +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc061ddc7 uart_resume_port +EXPORT_SYMBOL vmlinux 0xc07d0343 generic_listxattr +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0abe7a4 bd_set_size +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0f59f17 sk_stream_error +EXPORT_SYMBOL vmlinux 0xc0f65988 machine_real_restart +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc13942d3 ps2_handle_response +EXPORT_SYMBOL vmlinux 0xc139a5c5 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xc19c8163 atomic64_cmpxchg +EXPORT_SYMBOL vmlinux 0xc1cf2551 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xc20293ba generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xc205a996 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xc2097498 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0xc2112197 llc_sap_close +EXPORT_SYMBOL vmlinux 0xc228c0a7 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0xc251cabc zero_fill_bio +EXPORT_SYMBOL vmlinux 0xc254af48 dcache_lock +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc26af45f truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0xc26d91ca scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0xc26e0cca ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0xc27de8ec scsi_execute_req +EXPORT_SYMBOL vmlinux 0xc280a525 __copy_from_user_ll +EXPORT_SYMBOL vmlinux 0xc29ad0c1 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xc2ab9a87 rfkill_set_states +EXPORT_SYMBOL vmlinux 0xc2acfff6 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0xc2c1bb65 km_state_notify +EXPORT_SYMBOL vmlinux 0xc2c21eeb dma_set_mask +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc30b2bd8 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0xc30e25be set_security_override +EXPORT_SYMBOL vmlinux 0xc319e3c8 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xc32b581d security_path_truncate +EXPORT_SYMBOL vmlinux 0xc336a90b unregister_md_personality +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc3504506 d_validate +EXPORT_SYMBOL vmlinux 0xc371be94 phy_print_status +EXPORT_SYMBOL vmlinux 0xc372ee62 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0xc3899416 __ht_create_irq +EXPORT_SYMBOL vmlinux 0xc38e5754 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0xc390515e neigh_compat_output +EXPORT_SYMBOL vmlinux 0xc39f039e dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0xc3a58a2e __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xc3a5d919 set_pages_nx +EXPORT_SYMBOL vmlinux 0xc3aab9cf fddi_type_trans +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3ae7460 phy_connect_direct +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc3d140e1 register_console +EXPORT_SYMBOL vmlinux 0xc3d53d03 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0xc3dcded0 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0xc3e8bb8f complete_request_key +EXPORT_SYMBOL vmlinux 0xc3fa6a59 memchr +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc4061152 lock_may_write +EXPORT_SYMBOL vmlinux 0xc4065553 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xc407d0cb __serio_register_port +EXPORT_SYMBOL vmlinux 0xc430abb2 flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4b59b41 mddev_congested +EXPORT_SYMBOL vmlinux 0xc4b884a7 __free_pages +EXPORT_SYMBOL vmlinux 0xc50038a4 blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc5588e38 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xc55f7dc7 _write_trylock +EXPORT_SYMBOL vmlinux 0xc5622fc1 __getblk +EXPORT_SYMBOL vmlinux 0xc5a2681f journal_dirty_data +EXPORT_SYMBOL vmlinux 0xc5cac37b pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xc61204a3 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0xc618ef28 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0xc623c081 neigh_ifdown +EXPORT_SYMBOL vmlinux 0xc62761ec page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0xc633495b schedule_work +EXPORT_SYMBOL vmlinux 0xc64b8442 copy_io_context +EXPORT_SYMBOL vmlinux 0xc64d1489 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0xc6759ace xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xc6a15605 file_permission +EXPORT_SYMBOL vmlinux 0xc6a5d9f2 netlink_set_err +EXPORT_SYMBOL vmlinux 0xc6b3300f lookup_one_len +EXPORT_SYMBOL vmlinux 0xc6eda802 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0xc6f096dc bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0xc701c3ac page_readlink +EXPORT_SYMBOL vmlinux 0xc707ac11 kill_block_super +EXPORT_SYMBOL vmlinux 0xc70a76d5 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xc71d2b5a jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc768de19 cpu_all_bits +EXPORT_SYMBOL vmlinux 0xc769aaa9 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0xc769cfcd xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc79c4908 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7aa5e43 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0xc7d6fd6b jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xc7d9c5b4 load_nls_default +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc8516172 dm_exception_store_create +EXPORT_SYMBOL vmlinux 0xc86c70c7 blk_start_queue +EXPORT_SYMBOL vmlinux 0xc881007c simple_dir_operations +EXPORT_SYMBOL vmlinux 0xc88906b7 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc898625d atomic64_inc_and_test +EXPORT_SYMBOL vmlinux 0xc89a9d86 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0xc8a444ed sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xc8aea757 nf_setsockopt +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8c3b36d jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8df17b0 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0xc8fb60e1 setup_arg_pages +EXPORT_SYMBOL vmlinux 0xc93497d9 kmem_cache_create +EXPORT_SYMBOL vmlinux 0xc9495f66 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xc9699f2b ndisc_mc_map +EXPORT_SYMBOL vmlinux 0xc97cc577 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9e0304e block_write_full_page +EXPORT_SYMBOL vmlinux 0xc9e07649 acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0xc9e17631 generic_write_sync +EXPORT_SYMBOL vmlinux 0xc9ec8704 udp_table +EXPORT_SYMBOL vmlinux 0xca2b152e dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0xca3fa43c md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xcabb56c5 input_inject_event +EXPORT_SYMBOL vmlinux 0xcacb555b ndisc_build_skb +EXPORT_SYMBOL vmlinux 0xcadcbf41 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0xcae2b256 ip_ct_attach +EXPORT_SYMBOL vmlinux 0xcb1c2e9f scsi_scan_host +EXPORT_SYMBOL vmlinux 0xcb4727db dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcb7b584b mdiobus_write +EXPORT_SYMBOL vmlinux 0xcb86b942 proc_create_data +EXPORT_SYMBOL vmlinux 0xcbb25ad6 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0xcbb46672 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0xcbca280f vfs_rename +EXPORT_SYMBOL vmlinux 0xcbf89255 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0xcc0376c7 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51ee50 dma_spin_lock +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8cc844 log_start_commit +EXPORT_SYMBOL vmlinux 0xccc01def dquot_claim_space +EXPORT_SYMBOL vmlinux 0xccccbee8 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0xccd1f45f vfs_fsync +EXPORT_SYMBOL vmlinux 0xcd3b883a mdiobus_free +EXPORT_SYMBOL vmlinux 0xcdf87af9 kobject_add +EXPORT_SYMBOL vmlinux 0xce0b181e tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xce0d78a4 skb_checksum +EXPORT_SYMBOL vmlinux 0xce1760a9 alloc_trdev +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce57b07e kern_path +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce6bc4bb tty_shutdown +EXPORT_SYMBOL vmlinux 0xce8a95de aio_complete +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf072d60 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf2da6ee unregister_quota_format +EXPORT_SYMBOL vmlinux 0xcf351127 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf77fd38 lookup_hash +EXPORT_SYMBOL vmlinux 0xcfadd723 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xcfb32a12 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfcd4d84 spi_schedule_dv_device +EXPORT_SYMBOL vmlinux 0xcfe05d4d register_kmmio_probe +EXPORT_SYMBOL vmlinux 0xcfeeb0ba revert_creds +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd0076883 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd02e6546 dquot_acquire +EXPORT_SYMBOL vmlinux 0xd037e855 mca_register_driver +EXPORT_SYMBOL vmlinux 0xd05e5240 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0xd06a5733 skb_queue_purge +EXPORT_SYMBOL vmlinux 0xd071dcc2 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0953db6 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xd0afa20a kernel_getsockname +EXPORT_SYMBOL vmlinux 0xd0d3786e wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xd0d8621b strlen +EXPORT_SYMBOL vmlinux 0xd0e7daec backlight_device_register +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0f94ae9 pid_task +EXPORT_SYMBOL vmlinux 0xd10fb055 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0xd117622b kernel_connect +EXPORT_SYMBOL vmlinux 0xd124b467 vga_client_register +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd15a15e3 skb_under_panic +EXPORT_SYMBOL vmlinux 0xd168a125 skb_queue_head +EXPORT_SYMBOL vmlinux 0xd16cc35f backlight_force_update +EXPORT_SYMBOL vmlinux 0xd1700dc8 xfrm_state_add +EXPORT_SYMBOL vmlinux 0xd17178f4 vc_cons +EXPORT_SYMBOL vmlinux 0xd17ac994 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0xd17ecc22 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd18c3c4e i2c_master_recv +EXPORT_SYMBOL vmlinux 0xd1907a8f seq_release +EXPORT_SYMBOL vmlinux 0xd1a2a3a9 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0xd1d1883e vlan_gro_frags +EXPORT_SYMBOL vmlinux 0xd1d71033 elv_queue_empty +EXPORT_SYMBOL vmlinux 0xd1e890f9 kunmap_atomic +EXPORT_SYMBOL vmlinux 0xd1ea2849 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xd1f0972b put_disk +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd1f91bcd dev_base_lock +EXPORT_SYMBOL vmlinux 0xd1fb24d1 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd24ce533 blk_free_tags +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd25f36fe vmtruncate +EXPORT_SYMBOL vmlinux 0xd267d42c down_killable +EXPORT_SYMBOL vmlinux 0xd28be756 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a68761 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2dff796 journal_wipe +EXPORT_SYMBOL vmlinux 0xd32e52c7 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0xd34f0c62 gen_pool_create +EXPORT_SYMBOL vmlinux 0xd369a0b2 journal_force_commit +EXPORT_SYMBOL vmlinux 0xd379839b skb_pad +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd399d32f splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0xd3b964a7 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0xd3c87d69 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xd3e0c5d1 take_over_console +EXPORT_SYMBOL vmlinux 0xd3f74cf1 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd3f91bb9 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xd4171afc pci_find_capability +EXPORT_SYMBOL vmlinux 0xd42b7232 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xd4645c65 eisa_driver_register +EXPORT_SYMBOL vmlinux 0xd48efe00 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0xd4a76d6f init_buffer +EXPORT_SYMBOL vmlinux 0xd4cac148 tty_port_close +EXPORT_SYMBOL vmlinux 0xd4f6e658 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd51178c3 fb_show_logo +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd53658d9 tcf_hash_create +EXPORT_SYMBOL vmlinux 0xd54343d2 pnp_device_detach +EXPORT_SYMBOL vmlinux 0xd54cf102 serial8250_register_port +EXPORT_SYMBOL vmlinux 0xd5688a7a radix_tree_insert +EXPORT_SYMBOL vmlinux 0xd56a5794 drop_super +EXPORT_SYMBOL vmlinux 0xd57b1f16 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xd5a91cb6 __bread +EXPORT_SYMBOL vmlinux 0xd5d57aac uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0xd5dff32e sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xd5e5a8e7 tcp_check_req +EXPORT_SYMBOL vmlinux 0xd5f31531 __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd6556c97 pcim_enable_device +EXPORT_SYMBOL vmlinux 0xd66774f3 block_write_end +EXPORT_SYMBOL vmlinux 0xd68f47bd inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xd699bc4d nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b15e21 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6e411f5 nf_afinfo +EXPORT_SYMBOL vmlinux 0xd6e84591 ip6_xmit +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd71885b1 unregister_qdisc +EXPORT_SYMBOL vmlinux 0xd724042d journal_get_create_access +EXPORT_SYMBOL vmlinux 0xd72d7f82 pci_iomap +EXPORT_SYMBOL vmlinux 0xd73407dc pci_find_bus +EXPORT_SYMBOL vmlinux 0xd739f420 ps2_end_command +EXPORT_SYMBOL vmlinux 0xd74b37e8 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xd7736c13 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd781ddea sock_create_kern +EXPORT_SYMBOL vmlinux 0xd78a3870 ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xd799fc24 pnpbios_protocol +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a6fafa panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd7d2e83e acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xd7d36d1a idr_find +EXPORT_SYMBOL vmlinux 0xd7d67687 get_io_context +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7e1d085 tty_port_init +EXPORT_SYMBOL vmlinux 0xd8033e5c journal_errno +EXPORT_SYMBOL vmlinux 0xd804135b d_alloc_name +EXPORT_SYMBOL vmlinux 0xd815d9ad unlock_page +EXPORT_SYMBOL vmlinux 0xd82613c0 atomic64_sub_and_test +EXPORT_SYMBOL vmlinux 0xd8282ff0 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd851af78 up_write +EXPORT_SYMBOL vmlinux 0xd8656de2 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8a65c38 atomic64_sub +EXPORT_SYMBOL vmlinux 0xd8a8d74f da903x_query_status +EXPORT_SYMBOL vmlinux 0xd8b55078 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xd8b9f30b pci_reenable_device +EXPORT_SYMBOL vmlinux 0xd8c7d01d generic_setlease +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8f0bb57 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd94125f1 seq_open_private +EXPORT_SYMBOL vmlinux 0xd941dd90 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xd941f6f5 simple_write_begin +EXPORT_SYMBOL vmlinux 0xd94f51db make_bad_inode +EXPORT_SYMBOL vmlinux 0xd963a74a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xd97713f3 netif_device_detach +EXPORT_SYMBOL vmlinux 0xd9838978 tty_write_room +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9861e53 tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0xd996d859 idr_pre_get +EXPORT_SYMBOL vmlinux 0xd99bdd7e inet6_add_protocol +EXPORT_SYMBOL vmlinux 0xd9a05ed8 stop_tty +EXPORT_SYMBOL vmlinux 0xd9b70528 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0xd9c272aa mca_mark_as_unused +EXPORT_SYMBOL vmlinux 0xd9c8f9c5 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xd9e29995 kernel_getpeername +EXPORT_SYMBOL vmlinux 0xda08c0d7 pcibios_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda11ef67 fb_pan_display +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda2ca22f tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0xda3863ca inet_frag_kill +EXPORT_SYMBOL vmlinux 0xda4a95b1 register_framebuffer +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8fd495 isapnp_write_byte +EXPORT_SYMBOL vmlinux 0xda928914 nmi_watchdog +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdab295e1 vfs_symlink +EXPORT_SYMBOL vmlinux 0xdad68854 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0xdaeaa770 dquot_scan_active +EXPORT_SYMBOL vmlinux 0xdaffc3ae generic_block_bmap +EXPORT_SYMBOL vmlinux 0xdb1b24bb ip_setsockopt +EXPORT_SYMBOL vmlinux 0xdb244213 ipv4_specific +EXPORT_SYMBOL vmlinux 0xdb3aa778 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0xdb4a3cb4 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdb9ab993 scsi_ioctl +EXPORT_SYMBOL vmlinux 0xdbc10121 seq_open +EXPORT_SYMBOL vmlinux 0xdbc9ffeb mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbea1431 fifo_set_limit +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc3a30cc d_genocide +EXPORT_SYMBOL vmlinux 0xdc40d06a clear_inode +EXPORT_SYMBOL vmlinux 0xdc4288ac unregister_cdrom +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc50cfee gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xdc6dd528 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0xdc873a70 screen_info +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcccf3f2 pipe_unlock +EXPORT_SYMBOL vmlinux 0xdcef5da2 do_sync_write +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd16622c pci_release_region +EXPORT_SYMBOL vmlinux 0xdd248f29 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0xdd39f700 bitmap_unplug +EXPORT_SYMBOL vmlinux 0xdd4d6f4b filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xdd6bfccd radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0xdd70b6d7 framebuffer_release +EXPORT_SYMBOL vmlinux 0xdd777fe7 nla_put +EXPORT_SYMBOL vmlinux 0xdd786880 write_inode_now +EXPORT_SYMBOL vmlinux 0xdde5051c devm_ioremap +EXPORT_SYMBOL vmlinux 0xde139893 ip_fragment +EXPORT_SYMBOL vmlinux 0xde1fd694 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0xde27249c sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xde6645c8 journal_set_features +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde8332e9 i2c_release_client +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdec8c343 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xdee6d204 bmap +EXPORT_SYMBOL vmlinux 0xdef39cbe bdi_destroy +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfa2edf4 dcache_readdir +EXPORT_SYMBOL vmlinux 0xdfb7bada acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xdfc0c0cd mmc_release_host +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfc75c92 elv_abort_queue +EXPORT_SYMBOL vmlinux 0xdfca8293 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xdffc6dda mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xe008c8e7 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0xe01de268 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0xe03ec55f mb_cache_shrink +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe0771921 filp_open +EXPORT_SYMBOL vmlinux 0xe07bc163 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0xe07f87e9 vga_put +EXPORT_SYMBOL vmlinux 0xe0a0f4b8 kill_litter_super +EXPORT_SYMBOL vmlinux 0xe0a501e3 idr_remove_all +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0e6ebac balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xe0f105a3 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0xe1237f4e __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0xe128d805 con_is_bound +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe1546df9 neigh_seq_next +EXPORT_SYMBOL vmlinux 0xe1596872 per_cpu__irq_stat +EXPORT_SYMBOL vmlinux 0xe16086f8 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xe171d83d pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe17dd6f7 free_task +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1da669b ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0xe1f43062 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xe200c514 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0xe2270bab inet6_getname +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe23d7acb up_read +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe263a434 tcp_disconnect +EXPORT_SYMBOL vmlinux 0xe2738389 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2eaedef xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xe2ee3f7b inode_add_bytes +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe306922c skb_recycle_check +EXPORT_SYMBOL vmlinux 0xe3167d7e set_pages_array_wb +EXPORT_SYMBOL vmlinux 0xe32e4f28 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xe3690e24 register_nls +EXPORT_SYMBOL vmlinux 0xe3847388 generic_getxattr +EXPORT_SYMBOL vmlinux 0xe38594aa phy_start_interrupts +EXPORT_SYMBOL vmlinux 0xe3bbfebe pcim_iomap +EXPORT_SYMBOL vmlinux 0xe3d58cc7 key_payload_reserve +EXPORT_SYMBOL vmlinux 0xe3d89c76 skb_seq_read +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe40aa0df bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe436c3ae simple_transaction_set +EXPORT_SYMBOL vmlinux 0xe43b65db md_register_thread +EXPORT_SYMBOL vmlinux 0xe4431cc2 pci_choose_state +EXPORT_SYMBOL vmlinux 0xe445b57a scsi_free_command +EXPORT_SYMBOL vmlinux 0xe456bd3a complete +EXPORT_SYMBOL vmlinux 0xe47c4bc6 sock_kmalloc +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4870354 _read_trylock +EXPORT_SYMBOL vmlinux 0xe488d772 skb_make_writable +EXPORT_SYMBOL vmlinux 0xe48bec4d journal_update_format +EXPORT_SYMBOL vmlinux 0xe48f3039 ida_get_new_above +EXPORT_SYMBOL vmlinux 0xe4ac7acf pci_enable_device_io +EXPORT_SYMBOL vmlinux 0xe4b1ec67 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0xe4c1df3e _read_lock_bh +EXPORT_SYMBOL vmlinux 0xe4dd4a39 sysctl_data +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe5414546 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xe5415040 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5837f30 blk_register_region +EXPORT_SYMBOL vmlinux 0xe58538ee block_truncate_page +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe58ac1da dev_unicast_sync +EXPORT_SYMBOL vmlinux 0xe5a223d6 call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5d6e825 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0xe5d7de73 vfs_write +EXPORT_SYMBOL vmlinux 0xe5eb474c otg_get_transceiver +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe63b58ad kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0xe64c80c6 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0xe667fda9 arp_broken_ops +EXPORT_SYMBOL vmlinux 0xe66be02f tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xe684eab6 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0xe68ed3c4 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6a623f5 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xe6b4be11 napi_complete +EXPORT_SYMBOL vmlinux 0xe6e4ee63 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe71b81c4 security_path_mkdir +EXPORT_SYMBOL vmlinux 0xe7205a56 blkdev_get +EXPORT_SYMBOL vmlinux 0xe7992fa2 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xe79f8a24 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe8260d74 inet_add_protocol +EXPORT_SYMBOL vmlinux 0xe84c74a3 dma_alloc_from_coherent +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL vmlinux 0xe8b68849 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0xe8ca74cd get_disk +EXPORT_SYMBOL vmlinux 0xe8cb53b3 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8d64b93 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xe8ec4782 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0xe8f4f36d mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe9225856 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xe92c76d1 pci_enable_wake +EXPORT_SYMBOL vmlinux 0xe939ac5e __scm_send +EXPORT_SYMBOL vmlinux 0xe95ec312 mca_bus_type +EXPORT_SYMBOL vmlinux 0xe95f0691 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xe95f80ac mca_device_transform_memory +EXPORT_SYMBOL vmlinux 0xe962f4c2 page_address +EXPORT_SYMBOL vmlinux 0xe97711d9 security_path_symlink +EXPORT_SYMBOL vmlinux 0xe996841a thaw_bdev +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe9b4162c mdiobus_register +EXPORT_SYMBOL vmlinux 0xe9b7c318 pci_set_master +EXPORT_SYMBOL vmlinux 0xe9b9bb46 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0xea043c8a rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea264398 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xea285696 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xea2d33a2 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0xea30a28c block_read_full_page +EXPORT_SYMBOL vmlinux 0xea4a121e lock_fb_info +EXPORT_SYMBOL vmlinux 0xea50e14f names_cachep +EXPORT_SYMBOL vmlinux 0xea610d3a tty_free_termios +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea852925 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0xea858cb5 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xea90c763 mmc_resume_host +EXPORT_SYMBOL vmlinux 0xea95b988 mmc_add_host +EXPORT_SYMBOL vmlinux 0xea9e70ec dma_sync_wait +EXPORT_SYMBOL vmlinux 0xeaa09bb5 dev_change_flags +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeae4e711 neigh_destroy +EXPORT_SYMBOL vmlinux 0xeb1fabf6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xeb7e28b0 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xebb5e3ce tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebd57da5 vfs_quota_off +EXPORT_SYMBOL vmlinux 0xebd668df input_close_device +EXPORT_SYMBOL vmlinux 0xebee7433 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0xebf32f2b tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xebf6f1f9 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xebf9c23e inet6_register_protosw +EXPORT_SYMBOL vmlinux 0xebfc52c3 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0xec1798a6 sock_no_mmap +EXPORT_SYMBOL vmlinux 0xec4fdeb0 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xec54c483 scsi_device_get +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec884e85 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xec94fe50 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0xec957a8e per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0xecaa0191 vga_get +EXPORT_SYMBOL vmlinux 0xecde1418 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0xed49d7d5 cfb_imageblit +EXPORT_SYMBOL vmlinux 0xed4e88b0 input_open_device +EXPORT_SYMBOL vmlinux 0xed63cc9c unbind_con_driver +EXPORT_SYMBOL vmlinux 0xed6c1dc8 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedc6d948 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xedd4a73c neigh_table_init +EXPORT_SYMBOL vmlinux 0xedeff9ac pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0xedf01078 vfs_llseek +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee5e27da tcp_close +EXPORT_SYMBOL vmlinux 0xee76d312 kmem_cache_size +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee959dea sock_i_uid +EXPORT_SYMBOL vmlinux 0xee9e9405 register_quota_format +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xef06cc46 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0xef0f07ab tty_mutex +EXPORT_SYMBOL vmlinux 0xef11b5b3 mb_cache_create +EXPORT_SYMBOL vmlinux 0xef1f3ea2 __devm_request_region +EXPORT_SYMBOL vmlinux 0xef1fb0e3 unregister_filesystem +EXPORT_SYMBOL vmlinux 0xef2c565f jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xef3bd862 mca_find_unused_adapter +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef88294e fget +EXPORT_SYMBOL vmlinux 0xef97199b input_free_device +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xefd2e629 fb_get_mode +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xeff6bd13 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf000ede5 pcibios_set_irq_routing +EXPORT_SYMBOL vmlinux 0xf01e7fd6 pci_claim_resource +EXPORT_SYMBOL vmlinux 0xf038d64e pci_fixup_device +EXPORT_SYMBOL vmlinux 0xf04a1008 arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf09a1bd5 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xf0b3b5fd __dst_free +EXPORT_SYMBOL vmlinux 0xf0b6f79c tcf_hash_check +EXPORT_SYMBOL vmlinux 0xf0d360f2 skb_copy +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f08e1c dm_io_client_resize +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf1093d79 rfkill_register +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf113b106 rt6_lookup +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf120a6bf inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xf1721b7c dev_addr_add +EXPORT_SYMBOL vmlinux 0xf1748d0e __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1d4a941 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0xf1d64416 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1eeacbe xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xf1f9ffe3 dev_close +EXPORT_SYMBOL vmlinux 0xf204c5c3 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xf20595e4 iget_locked +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf21570eb gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0xf227c979 release_sock +EXPORT_SYMBOL vmlinux 0xf2346172 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0xf23a6243 dev_unicast_add +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2a52eb1 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0xf2ba65b7 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xf2c3c86e kernel_accept +EXPORT_SYMBOL vmlinux 0xf2d79fbd copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xf2e74040 mca_set_adapter_name +EXPORT_SYMBOL vmlinux 0xf2f88ac0 inet6_ioctl +EXPORT_SYMBOL vmlinux 0xf30a6797 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf3292671 journal_init_dev +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf34b3b3a mnt_pin +EXPORT_SYMBOL vmlinux 0xf356ab3d dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0xf36d3ef8 tcp_child_process +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39bf4d9 put_cmsg +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf41f9874 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0xf4273f93 km_policy_notify +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf460a261 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xf48a2c4c MCA_bus +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4ae9d51 ida_pre_get +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf502d273 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf57b730a dma_pool_alloc +EXPORT_SYMBOL vmlinux 0xf593d1cf input_set_keycode +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5d01cdf mca_device_transform_irq +EXPORT_SYMBOL vmlinux 0xf5e312a2 page_symlink +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf60fdc95 blk_run_queue +EXPORT_SYMBOL vmlinux 0xf6263667 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xf67ca1c0 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xf6b0b074 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6c4142f blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0xf6d27d68 journal_destroy +EXPORT_SYMBOL vmlinux 0xf6e1dea4 pci_pme_active +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf74a63b5 x86_mce_decode_callback +EXPORT_SYMBOL vmlinux 0xf7533668 kobject_get +EXPORT_SYMBOL vmlinux 0xf7623914 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xf7801013 set_user_nice +EXPORT_SYMBOL vmlinux 0xf78235b2 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xf786ef5e idr_init +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf796ae62 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xf79cf9c7 mntput_no_expire +EXPORT_SYMBOL vmlinux 0xf7ac3032 unload_nls +EXPORT_SYMBOL vmlinux 0xf7d5b3e8 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xf7ea2f19 __scsi_put_command +EXPORT_SYMBOL vmlinux 0xf7f1fda1 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0xf8021a70 __lock_page +EXPORT_SYMBOL vmlinux 0xf80fd877 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf8189f1f scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xf8198f72 input_allocate_device +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf85f3715 dma_pool_create +EXPORT_SYMBOL vmlinux 0xf864b0e2 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf88ff42f key_revoke +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf89158f6 notify_change +EXPORT_SYMBOL vmlinux 0xf8a3d1ab dev_set_drvdata +EXPORT_SYMBOL vmlinux 0xf8b30e93 mempool_create +EXPORT_SYMBOL vmlinux 0xf8cb0d81 icmp_send +EXPORT_SYMBOL vmlinux 0xf8cf9ee5 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xf8e294f1 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xf916c59b ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xf940a328 __next_cpu +EXPORT_SYMBOL vmlinux 0xf94c0e76 bdevname +EXPORT_SYMBOL vmlinux 0xf94e938b kobject_del +EXPORT_SYMBOL vmlinux 0xf983cdd0 dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0xf9899664 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xfa0564fc __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfa21b73f acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0xfa297512 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0xfa39074e seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xfa693fb1 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0xfa94df4e tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0xfac217ab kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xfac8567d single_release +EXPORT_SYMBOL vmlinux 0xfae0f3a7 md_unregister_thread +EXPORT_SYMBOL vmlinux 0xfae177f7 md_integrity_register +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb35d312 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xfb42ec73 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xfb435348 inet6_bind +EXPORT_SYMBOL vmlinux 0xfb5c0f05 unregister_console +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb6de7c4 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xfb8e1251 f_setown +EXPORT_SYMBOL vmlinux 0xfb8ed03b bitmap_start_sync +EXPORT_SYMBOL vmlinux 0xfb9552ba lock_super +EXPORT_SYMBOL vmlinux 0xfba0c2e0 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xfba740f8 rfkill_blocked +EXPORT_SYMBOL vmlinux 0xfbde2335 fb_set_suspend +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfbe29232 slow_work_cancel +EXPORT_SYMBOL vmlinux 0xfbe5ca77 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc4c48a5 fd_install +EXPORT_SYMBOL vmlinux 0xfc533f85 schedule_work_on +EXPORT_SYMBOL vmlinux 0xfc55b2c2 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0xfc562165 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xfc6256b9 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfc6279cd mmc_register_driver +EXPORT_SYMBOL vmlinux 0xfc8b9478 bdget +EXPORT_SYMBOL vmlinux 0xfc956ba8 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xfc9a6939 vfs_unlink +EXPORT_SYMBOL vmlinux 0xfc9ffccf spi_attach_transport +EXPORT_SYMBOL vmlinux 0xfca76f0e scsi_get_command +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcacf6b4 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc4d4e4 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xfcd81814 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcdbabb2 netif_napi_add +EXPORT_SYMBOL vmlinux 0xfce6a255 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcf08157 generic_writepages +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd118b9c vfs_rmdir +EXPORT_SYMBOL vmlinux 0xfd1caf2a qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0xfd41e054 mmc_host_enable +EXPORT_SYMBOL vmlinux 0xfd481c48 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xfd4b6ccb thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xfd6f4850 native_wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xfd79eba0 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfd87541a mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0xfd8878d4 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0xfd93a46e dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfda95cb1 mnt_unpin +EXPORT_SYMBOL vmlinux 0xfdb6ed06 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0xfdb873fe vfs_mknod +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe15aa65 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xfe1927c6 xfrm_state_update +EXPORT_SYMBOL vmlinux 0xfe303910 skb_copy_expand +EXPORT_SYMBOL vmlinux 0xfe551e55 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe674b74 find_vma +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe79d253 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfee81230 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xfefd1e69 kthread_stop +EXPORT_SYMBOL vmlinux 0xff0ab1a3 elevator_init +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff366526 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xff480992 dump_fpu +EXPORT_SYMBOL vmlinux 0xff636db1 security_inode_permission +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff708fd3 mempool_destroy +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffa5312e scsi_mode_sense +EXPORT_SYMBOL vmlinux 0xffc7c184 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffdc5d66 generic_read_dir +EXPORT_SYMBOL vmlinux 0xffedca56 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xfff01d8a llc_sap_open +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x03e737d8 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x04bed327 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094ac8f4 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094e5632 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0ba417c6 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12d1b23b kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x16ea3262 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x18a0e2e9 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a9df35f __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e4580bb kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2322e039 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x246b649c kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x24ac8e66 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2df12e01 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2efeeab6 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x30d4e6f4 kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x32c572d5 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x32ff0b7e kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x34e734be kvm_report_emulation_failure +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x38a9d116 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3998e449 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3a5565d2 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b7706d2 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x44e4ec53 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4a7cbe69 is_error_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x51c6f87c kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x58894383 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x599086dd kvm_handle_fault_on_reboot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6360d7a2 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7523f749 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x815c8e6e kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x84337021 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x84b06fe7 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x87d9b512 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8850c930 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x886eb769 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8a0fc974 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e7f9b47 segment_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8fc9cf80 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x90a362f6 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x91e37d6c kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x946a671b __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9cdb6623 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa1a210ba kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa361bc65 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa5fc6b9a kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa7a14386 kvm_emulate_pio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xac42d25d kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xad7fd10e kvm_put_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaf83b2bd kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xafd113fa kvm_emulate_pio_string +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb541b45b kvm_load_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb62e4944 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xba193e46 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbce3a3ee emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd377dc9 kvm_mmu_set_nonpresent_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd94103b kvm_mmu_set_base_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc21f0645 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc37000cb kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc40f8d6d kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc5ce1791 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc64da288 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcbf70388 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcea5bf57 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd296def9 kvm_is_error_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd3c0a6da __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdac5a4eb gfn_to_memslot_unaliased +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdbe05fb9 kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdc5acb7c kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdead7e81 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdf51124c kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdffb9d7b emulator_write_emulated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe23f5d9c is_error_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe29e8928 fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe8977636 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe8f78d7c kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xec2fa591 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf1115fd8 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf79b08ee kvm_vcpu_init +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x67502576 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xd41f30e9 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x0cbf95c8 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xdb899cc8 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x1010bebd async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x8955130e async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x2c10c4c9 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x62543a72 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xba80560c async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xf3da8aef async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x6292813b async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xdb1e43b3 async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x33ddc389 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x597cfde8 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x9a14374c cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xabeaa43b cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xc2968a87 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xc8654acd cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xf66f4679 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x13ee602f twofish_setkey +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x1b0f9e9d btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x273ba52f btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x79c16056 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xae3e1899 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xe74ac092 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xec6c0897 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x9dc82b79 agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xc98449da agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/scx200_gpio 0xe000f579 scx200_gpio_ops +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x117e7cc9 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x287373d7 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3126d590 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x39625e47 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3a44ab94 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3eb13f88 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4a0d4845 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x507b810b tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x5bec261a tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x630b1d93 tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6c733a04 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7606091c tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x8c14949d tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9aa16e0d tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa1e92255 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa2382263 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xb50619ca tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd0930daf tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd36b2283 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd8e941df tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe4af75de tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe6e17cf7 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf266e35e tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x359cabd6 tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0xfd77f39a tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/dca/dca 0x0e2d7723 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x62bf850c free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x6456b131 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0xbfc94adb dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xd30e7c55 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xf64d8d24 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xf92f96b5 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c8556b1 edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0eb5198b edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x10f1ac2c edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x1391eceb edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x211e87e3 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x230dd1a5 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2401f22c edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2668c97d edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x29259e8e edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x31ff5340 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x37aa30e9 edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3e3b7f28 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6fdd6976 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x845bcfa8 edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x86d354d1 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8f7609e6 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9523bf28 edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9a53c2a8 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa52d091e edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xaaf47f2a edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb38af106 edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xcc861de8 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf929c301 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf951972b edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0f0ba55e ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1823885a amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x4b01887d pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x7509830f to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x955c1f76 amd_decode_nb_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb98537cb rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xc2e765d2 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xd0f094a0 ext_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xe6ff7e0c ll_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xf8dec080 tt_msgs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x55605edb drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xc9e1b0b3 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x07a1791a hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x15458f60 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x19d05500 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x23bcd189 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2cabbf76 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2d2fa869 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2eea8d5e hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x318917f3 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x36e4cc33 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x53c19451 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x62cb8412 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x632b7fed hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x65fe94b3 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6ad78aa6 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x794f3f85 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7aa9b044 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7e33b22f hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7e7f38f5 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb09de82c hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb1b06532 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb5b0972c hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbadb1a05 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbf14d312 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc863b78e hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe30fa59c hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x3d570654 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x7dae07b6 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xdcb1534b hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x029c463f lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x3bc3c2ff lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x56aba3bf lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x8692fc36 lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xd1c98b4a lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x3869dd37 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xb3cb2980 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xb8e0229a hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xc8cca9aa input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0ef92637 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x105c92d1 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x13473b6d wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1bcf1763 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x4ffad4d7 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x5bb9354c wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x772dd5de wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x77b4e786 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xa000fc0c wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb90d78c3 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd6bb0d88 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xdfed3bf3 wm9713_codec +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x0a762c7f gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x269f616a gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2d9bb33b gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x356d3d26 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x3b699cd0 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e2bbddc gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e792275 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6f2fa305 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x7314278f gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x87066b9f gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x894de36c gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x90ac5708 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xa0b13b56 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xa8cc19d7 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xcc4b4928 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xf51ab537 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x86d2618c led_classdev_resume +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xdcfd9303 led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xf258cf55 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xf796213e led_classdev_register +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x0b8ef590 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x4a48d81c raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbc86fef0 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbe7aea13 ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbff7421c ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x2a70a6f4 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x4a63debe saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x7e5303cf saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x7eab5f68 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x9f375416 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd105a50d saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe7417817 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xedd1adfe saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xf8a9b685 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xfb93386c saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xfe6b7b68 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x25851c1e saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x2bf9c00f saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x2edf4a3e saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x74352fdb saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x8b949bd4 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xdd359497 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xfe09255b saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0x1defb0a1 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0xd129faff mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x6339b0a8 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x734b95b0 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x024b0f01 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x1227e578 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x777fafde tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xab363047 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xb58614aa tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x59214684 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x917eceed tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x6713f21d simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x22d9a5bd smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x3c37ba77 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x411db32d smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45b8ca1c sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x49dc91fd sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4d60602e sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5c135b95 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x667b67ea smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7af1c370 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x94b840c4 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x94bf3fc4 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x9e8fe519 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xbffab129 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc086669d smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc7a22860 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd60df784 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xde065235 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe429ca67 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xf034ee32 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x008f32fd ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x22a3b1f1 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x99320e40 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xa190347f ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xa320a13c ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xc0e40b8a ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe89b05ae ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x2a72ae0a cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x466369b0 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x789d4b5e cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x8ab8a27b cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x8c8011a9 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xa050cdd3 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xd78a89fd cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xddca7806 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xef6d7459 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xf95e4583 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfae3b1a2 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0xe18e0600 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x10568982 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x1f2c5310 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7515a283 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x78134661 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xb7bd9205 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xbf52d6d0 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x3773b6a5 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x7954446a saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x9021099f saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xa899eee6 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xee1c38ba saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x0e9dcf36 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x9732f1e6 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xcaa946d3 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xfd33ca6a v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x0e5bb3c9 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x1fbf7b0a v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x32ac9481 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xcce29c1c v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0e14a980 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x18be766e videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x261860db videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2b91e4bb videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x35023883 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3f8eb4bc videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3f8fe05d videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4176bc37 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4488c36d videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4939ed51 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x60cd2f5e videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x630d97cc videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x676b0e91 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6c72fce4 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x726b3dc8 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7df5846e videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7ead1517 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x90a915e8 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x911d16de __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9bd125e0 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9f6a6bb2 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa4c929fc videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa826e17c videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb7237954 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc851f09e videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x02bdf400 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x0c19c259 videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x2bec987d videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x35f12d1b videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x933dfb43 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x975900d7 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa7f549c8 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa825c75b videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb22f623f videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xcb1770b1 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xd4ee9872 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xd6d558b7 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe9da51c7 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xfc11ed01 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x1c648dfd videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x3d55c5e9 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xea21f894 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x06d1a6fa v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x52e14145 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x7e7bafd9 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x9d12fc36 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xa347cfc7 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xea569e76 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x12806222 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x49df3d18 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x768d3f6d i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x93eb2092 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x96997c56 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xaccace75 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc24ede98 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xece605fb i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x01155b36 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x6c97dca5 mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x7fcf6efa mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xa1c6e8a7 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xb6525bd6 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xcbbecda4 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xed5fe09f mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x7b650024 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xba91a34a pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x06e6d74e pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x134b0c40 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x787242d3 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x87057b72 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xbcb11ebe pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xcff70960 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xd4cd9fc6 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xd5b7d1af pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xd92d4318 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf4e83acc pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf986cc87 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x2ed68a92 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x6f260df7 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x8be1f541 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xdaac1b9a pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xede5408a pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x1b3aacc5 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x29ad2230 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x6807b1b7 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x80c58e78 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x8d9f7ddc sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x4bc759a5 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x0057623a wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3ab8ee52 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3d5b9b3a wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x51487801 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x56fae55b wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x5c59540e wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x783212ea wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x9cece5ea wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa51cbe82 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xb051d6df wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd5f02e6f wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe9ecce6d wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x34a5c6c2 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x48ed5dc2 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x49177fb9 wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5264b796 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x536fc8be wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5d22e67e wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5e2a4af4 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x65b67ec2 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x69da369b wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x8516726d wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xa8ca6532 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xabadb314 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xae803987 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xbd9f6e25 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc73851e9 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xcbcd3a79 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x6c5ebf0a wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x83cee7d8 wm8400_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x8b262e09 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xf9a2ff19 wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x1921cf11 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x784ec614 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x833c9862 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xef39260a cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x37ba2c32 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x82f72eae enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xa6ac9afa enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xcc1afc0d enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xe217de0b enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf01665be enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf4cde7fb enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x23c11837 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x31b86a7f sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x38ef9fa1 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x929406d2 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xa0997190 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xbe614da0 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x15fee903 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x3ce412a0 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x438efa56 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xc5d1ec51 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xa33dff5b cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x08568ece cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xbee80991 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xc714c448 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0x1ef3e46e DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0xfa286fcb DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xa86f0b00 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x008c6427 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0b7093f8 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3636e708 mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5dfb2b16 add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x61141289 parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x64c41855 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x67aba8e3 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x803c3242 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x86438e73 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x996a7d43 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa6311028 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xac219a05 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc42262a3 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdd69c41f get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xed0632bf deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfd423f8d mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x143e4b12 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x3cda1363 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xc4fa8f16 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xdea8472d del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x207f4785 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x2b6eb9be nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x7ec48e65 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x89aeb367 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xb0ec3a9f nand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x0f7fe15d onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0xafce2cca onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x0024586e ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x28978593 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x2f60050e ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x32246d5a ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x75de5b6c ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8f3e7510 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xabee2515 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb196cecc ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xceeb486e ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdc2dfef4 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xe7189efa ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xee525d93 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x262fac13 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x38bbe973 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x577b7844 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x6c7056b4 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x8915591b register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x900c421e alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb54a5be4 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xbb12ddc6 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xd40a09a8 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xd6719674 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x029514e4 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x0f3e6666 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x24fcdef2 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xcc1a9347 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0fd5568e mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x12a5c441 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x15477255 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x162702c0 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1aa369b1 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1bfd31c2 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2f44728c mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x30dc39f2 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x34fdc91a mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x43f9fa97 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x45651dc3 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4667a991 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4bb5da70 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4f3a3ef4 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x54a5d445 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x54cfe935 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5f6982a1 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x622f30af mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x62f016e1 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x64f49d28 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x65575f1f mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x681b4701 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6a93c858 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6b310bbf mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x78b568c6 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7cc66f50 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8491e96e mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x91b2ab0f mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x93f2f7e1 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x97174de1 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x975a2f2a mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9a36cef9 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9b57025b mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xabfe4b95 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf0ac8b6 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb2b4e18b mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb4b96178 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb6f90964 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb89ad911 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbd5d76b9 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbfe8af1e mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc3a5fbd7 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc61524ab mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcba12226 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd07a5558 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd425a6bf mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xddd69182 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe3983fc4 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xede589f6 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf7358e10 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfa31f239 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfb7b9f08 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xff697ff6 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x21796ce8 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x617ad41a usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x32187372 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4d083111 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x6783fd9f rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x855af94c rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x8959f499 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xfc6d21cd rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0d576cf4 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1e50f23e usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x24f1048d usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x33cf8cd2 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3cdc2625 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4f11bd6a usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x529f9fc9 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x55e173d1 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x618463c4 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6254efea usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x79414fe4 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7f31b0cc usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8b55db1c usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8d2fe313 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x91660d27 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9426b588 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9b39d71b usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa7435ee6 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc54d92c2 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd55f7ec6 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd7dce9b1 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe681bf68 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf78204ad usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf8a6b366 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x03491b5b i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x17f7a149 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3584af27 i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x57659630 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7687d7da i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x9ba39ff6 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa8831656 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xab1b81ce i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xbd0f9985 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc85aeaba i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xdb781fd9 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf8246b20 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf9c0ca2d i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xa2cc3b94 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x011cb893 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x18239984 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x2105ae30 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x2b391b28 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3335eea0 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x418a67f7 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x46f06524 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5a792a30 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x8af92d6a lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x94cf827b lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xc67a0de8 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xc9866ed5 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd1294740 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xdd05bbd3 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf083e327 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x098c6f67 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x28e223a5 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x36e7312a lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x77d46fff lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xa27a410a lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xaa58bde4 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc2758562 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd586e79a lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x396d62b5 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xf0905f0c if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x107c36ce p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x3b144ce4 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x5f3281fa p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x706eb3e7 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7419506b p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x86fddeee p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xb183a499 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xb9d2e009 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xda3ae152 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0fbca0c9 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x15369929 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x16d2e6f4 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x266e435b rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2d37edf8 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2f940aaf rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x37706b86 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3f04b05f rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5eade6d7 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5f94bd6e rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6bbee26b rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8020ab7c rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9585549f rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaad14c7c rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xad1bc17b rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbe13cd4d rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc69ea50a rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcd75ae4e rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcf69c2d0 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd36ee51f rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd42b5cca rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf60a42d0 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf625fc7a rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf9927e6e rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1e992068 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x579af299 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x5a085224 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x69696b1b rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x73be8e94 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x98543aaa rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xd10638ad rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf385b647 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf8274149 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x04ea4131 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1ead195d rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2020a1b4 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x210a5ea2 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x38c9c701 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x578e371c rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5e000b5e rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x667515f8 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x73a74610 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x886ff44a rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x93e2fdcb rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbba6258d rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xce02b8f0 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe153ed36 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe3a51594 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe8520b98 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x2e290571 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x36a54688 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x798f5d82 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x1a1a3c90 acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0xd2b9fb58 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xf4f54add pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xf6103d55 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x0f073a82 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x5185828b wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x8bb26a6e wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xa1b9fb84 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xb6057911 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xe779c608 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x977e5b08 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xd1b323bd fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x017d09da iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0233f349 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0b3b2473 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0d64e372 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x14312acf iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x152c5203 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x17107ef1 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x20cd4b17 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2fe484f2 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x32173987 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x32dcd8f8 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x372d43f9 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3b49754b iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41ba1d14 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4a815fe7 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4def6b8b __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4fd147e6 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x577511aa iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x59904f37 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x655813cf iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x665d2777 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x67fd707a iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6943a387 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6df788ba iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6f84373e iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x71da2bf6 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x736309bc iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76c92269 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9eb51239 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa869a3bc iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb2f1fd6b iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc5822c48 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcc527bf6 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd3cdd501 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd3fe3f6f iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe5db9dd2 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xeb0071bb iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xec24d7ac iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xef48e78d iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf460ba83 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf76a06f6 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf8a0a86a iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x13dc1918 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4b93efb5 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4c4e889e iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x623d0b72 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x6291ac6f iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x7c873535 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8a05557f iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x9ad821f6 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa6d6ddbc iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb1e6193a iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc1f462e6 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xda48a50e iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf0593f45 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf159371e iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf428795a iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf48fcba3 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00f35737 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x07687d3f sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x14f2b1c4 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1af2d886 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1d5b0742 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1ee97d69 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x26899583 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2ad034e4 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x323d4b5e sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x4aa87a20 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x52c07642 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x52c37570 sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x53cec68a sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x70ba12c2 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x75e46132 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x787c0cef sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x805a7aca sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9cb3b8f0 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbab1f29e __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbe865150 sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc0a660d4 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd917108a sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xdaf969d0 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x0bc0d583 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x17588623 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x22f8a633 srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x8ed1bcf2 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xde1876df srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xe5e676f8 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x0c2635ac scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x22227d8a scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x302f8831 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x4a26b8f0 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x77587a92 scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x7e6477d8 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x82c3d579 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9dcbb55b scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xfcde3872 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x083b6fb6 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0f220a0a iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x189e9a4f iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x29092305 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2a5090f3 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x43e68427 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4a6b5c3e iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x58016fac iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5b3e5459 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x640da5d3 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x65fe42d8 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x72a55a8e iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x73667c34 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7d6a5fe1 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x960548bf iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xaea92fab iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xaed8e781 iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc5af6815 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xca73ad70 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdb04582f iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdba10819 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf50adf75 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x04d085f4 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x1805cee2 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x379a3bd3 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x889a7ad4 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb10af048 srp_rport_del +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x02934974 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x40b0d6f8 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x7cd19ab2 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xd2fc1512 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xe9aa9053 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xfc9e5388 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4740fc22 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4e4b42d1 comedi_free_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x813c41b0 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xb5725623 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xbb210ec9 comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc57fdaf4 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xf5e55497 comedi_alloc_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x86fcde20 das08_cs_boards +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xc7d72661 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xe7ed141e das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x2f738acf labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x3ab92428 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x173ac314 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x1dc4e4ea ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x5738ca1b ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x5beb083b ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x6bfc29d0 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xa35b6365 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xeab587ea ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf2a2a6e8 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x42f88583 ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x5869be24 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x59313f6e ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xaa50b132 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xb907f5e5 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xba78af9f ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x0a1ee779 osd_WaitEventWait +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x4cc1b61c osd_WaitEventCreate +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x5432d87a osd_WaitEventSet +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x746d1786 osd_PageAlloc +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x83911c38 osd_PageFree +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0xa1b8d1ad osd_WaitEventWaitEx +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x125329d6 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1572c74f usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x249fae8a usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x33c07043 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x44c05faa usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x4e252d96 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7e1c2351 sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x88c0c6de usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9697cfeb usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xad25b722 usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xc7faa303 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xcc77b48e usbip_start_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xdf820951 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xdf904bc9 usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xf5633b1b usbip_start_eh +EXPORT_SYMBOL_GPL drivers/uio/uio 0x0e570816 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x70ce96b2 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xe6ac6ff5 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x52dbd86f usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x95639958 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x0c15c0a2 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2dd5b80e usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x62982d86 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x810813bf usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x87185833 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x94f46084 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x98f7c693 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xbc56aaa4 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xe39d337f usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x30c15fa1 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5ee71cc0 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6eaf9036 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x72b738c2 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xab16d6a6 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xabf69f5f usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb0238678 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb91fb738 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xbe1a9714 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xcd886a51 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xdb16ad9d usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xde20e41f usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe35d8477 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe843347f usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf3eef8a2 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0aee3493 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0f317ebf usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0f81e83e usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x19f8a17c usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2d5a2e1b usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x48aecfe6 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5741c815 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5dda2029 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5de85cbe usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x616546b4 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x80494457 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8ff549b9 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x91d73854 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x986336b8 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9e74366c usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa004db9e usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa6fb6c90 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb44455df usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xcf663cd4 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe9718d15 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xebedd787 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf15f6de9 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf79e15a4 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x09f3c921 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x1702efbf wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x3ea7c281 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x701752c2 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xaf260db2 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xec7c32cd rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x067e1065 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0f895d63 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2b122b93 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2e6ba43b wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x3cb29089 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x52d6b050 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x57d7a66d wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x5a0e9251 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x61486fc0 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9573d648 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9b001a65 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xab0bbf23 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc17489f6 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xd6777e34 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xde550e15 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf52f9612 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x04611d0b i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xac91732c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xb8f0517c i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x00e9670a uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x409f2365 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x4b3a9856 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x4f44aede uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x64661994 uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xb053d3f5 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xd313e02f uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xfc556972 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x1ca01107 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x1f5f5ca9 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x436e36dd umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x7d7e2ea6 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb607dc7a umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc7fb1d28 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd22d5987 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xda74c053 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0fdae85c uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x15b21b9e uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1e457d85 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1fa6e437 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x207ee15f uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x27d324f2 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2b396073 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2db69f55 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x43ebe71f uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4898a9ab uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4c46a6e2 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4ea5aec9 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x519e6d7d uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58af0e20 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5cbb4758 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6057079a uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6759db8d uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6de3b541 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6ec81fbc uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8667eb45 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x870e2a3a uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x905e13d9 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98a99a68 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9f3e3f32 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa2bac660 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa9a9be96 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb061f05b uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcbb92d34 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce3be8ad uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce84850e uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd0e2c78a uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd77737f8 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe05b986e uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xea1f7ffb uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf24c2da2 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf784b2c1 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xffdd866c uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xaea7983d whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x02fe1446 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x21309fd2 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x226343b8 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x24b65f21 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x28fbb03a wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x36120e4d wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4eb64264 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x51b65625 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x51b688b6 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x520d9d25 wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x59c1a5fc wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5a958ea3 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5b5d44c1 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6addff4a wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6bce3336 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7959deea wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x82412c17 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x931d429a wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x97af0c2b wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9bfb3b64 wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9d60e2f0 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xac17e9e0 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbae67a12 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc836fa7b wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd51272dc wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdc197c68 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdc30f223 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe62e953a wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xeb79c587 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf01d2400 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf5956976 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf6433117 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x2aba6354 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x37da5091 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x8ed5fe31 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa4484676 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xd7526e27 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xdd474cb9 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xe5ea9cd9 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0x1b7b0c67 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x7be9c708 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x9b6a2b16 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xe1eed688 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xff17e093 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/w1/wire 0x29f97589 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x577e0726 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x98ccea54 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa7e840c2 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xdda4e3b1 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe31e0d41 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe67a8f40 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xee12e119 w1_reset_bus +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x098e08bf dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x7fa478cd dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x8cb9b9b0 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xd4032fbc exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xe6c543db exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x09635362 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x16e5481f fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0x37809257 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x3bed8bc9 fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x67824137 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x687e728e fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x7487d931 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0x80313e2a fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0x8f933584 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x956da195 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xa3d89356 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0xbb40fe96 fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0xbd437598 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0xcad68c8b fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0xdea491a8 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xdfaab1ef fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xe8da5be7 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xfe4016b8 fat_add_entries +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x15ecde42 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x646739d6 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x9ba33216 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xce26be1a nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xe18c69cd nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x0d263916 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xda3f4a9a nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x20c3c42d o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x29c5c478 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x92a17bfb o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x9d27980e o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x9ecef9c8 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbcffca0e o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbf94f851 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x29787d0d dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3cd791cd dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x5c1d99ef dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xc0fa6ac3 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xc850bfa1 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfc2b86e3 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x3ed27fc7 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdead7939 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xed7469c1 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x2b73bd45 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x30b6497e garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x337036e2 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x4fb378cf garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x7577fcdd garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0xc8edd5ce garp_request_join +EXPORT_SYMBOL_GPL net/802/stp 0x0421293b stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x152d7a1d stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0x0c385af8 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x8d158174 bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x087777e7 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0c610c28 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1113227a dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x22b6b311 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x24ec1ca1 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x303fc480 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x31b60af3 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x378fc676 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x386c8d1e dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3b48c681 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3f4b20ea dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x45bda769 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5627f90e dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x61d99453 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x62abb211 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70b1d967 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x75254b1c dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7e3a240b dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x884721d5 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b716887 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9f5c7672 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xab4a33ad dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xad71ebf1 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xad81e64d dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcecca9b0 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd40d58b3 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdac450f3 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdba63e08 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdbc5e281 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdcffaa6d dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe0bfdc18 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe6d370ba dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe83f2dd0 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0xeef54a2a dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x278b967d dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x3ac2bf41 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x5bbe02f6 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x7ef2e365 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9fa54b8c dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xecf252a4 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x1d3470b9 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x2ec1b429 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x50670b60 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x82846243 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x852097ed nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xb04a73fb nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xc4edd4a3 nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xd2efcb85 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x4a554172 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x5ba9d690 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xb69b0a77 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xc9d612a6 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xfe913cdd tcp_vegas_init +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x0b1190f5 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x30b8c1fd ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x015fe218 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x041013fd nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0440abd2 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x08507341 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0cb068b6 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0f40ce3a nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0fa11fe1 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1024b0dd nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x179b9f3d nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1810057f nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1c55ca25 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x25adfdbf nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2e00c0c1 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3100b162 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x38028131 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x39e598dc nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x41cf427b __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4a613911 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4d5f0b11 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4fc533ba nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x520df0f1 nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x533b8557 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x594e0e25 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6287db6c nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x64457757 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b9a844c nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e8e1d2a nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x71ce63b2 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x72ef56c9 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x76f23830 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78d412a1 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7d236bad nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7df35138 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7e6b7e9a nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x81325c35 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x83c52e41 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8606ba69 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8a194ec2 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8b916b70 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9572bec8 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x99388e4e nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x995eb83b nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa0553f10 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa0735b5a nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa1d9ca1c nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa30a2198 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa5b02950 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaa926d69 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb151e9d9 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb68f685e nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc53e8e2e nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc9a09bb9 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdaa3ead2 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xddb4b614 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7e67627 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xec1b04d2 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef93fd8e nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf2b3b4d9 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf9d4f5f6 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd50f869 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfe9d5768 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xa7e594af nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x35e37592 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x15276744 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x290be4d1 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3259c0ab nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3c0bbfc7 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3cf53bc9 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x5f3f6751 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x614a02a5 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xa2463b85 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xc2d7a9e9 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xc41d07f1 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xbde54364 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x18a8767b nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x4fafd524 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xd18d4e53 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xda17d4e5 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x1445760d nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x17a12f83 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1b164280 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1d3907af nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4448b8f6 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x57a2be39 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x627a9f1b nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6b211b4a nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6dfa4387 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x7d35a475 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xc0d4a7f4 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xc771e709 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdca877ef ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xe77e42c7 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0xd0e4fcdd nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x18ad6923 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xcf69bdf7 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x549e4a5b nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x5b428da8 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x76fe1406 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x9a55f0a0 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x2e9f25dd nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x01a85b3c xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x02ccdf26 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x02ed152a xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0e749087 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1a582d63 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1d7408b8 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f432b51 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x75aebf0e xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x79d9f1b4 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xcf99fc26 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf85fc73b xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc2429b63 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xfc852663 xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x10a22f78 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x18ea85ea rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x4b8bfe9a rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x4e7eb800 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x5140905d rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x52efa405 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x5ee7e811 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x64c3ec72 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x71c0b64b rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x8230b2b6 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x885b03db rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x901cc1ac rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x959346ab rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x96fafe85 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x982d0386 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x9bdb5625 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x9d793ff9 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x9dc97860 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0xb89f3ae7 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0xc7fc82fc rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0xc88d0b1b rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0xea263903 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0xec021902 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0xef50760d rds_conn_drop +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x73ce3f79 rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xee68dc07 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x064bf5a5 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x18547c1a gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x22b76988 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x3d6a5533 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x60170f69 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x71be09af gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8105c008 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x97822e58 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe8b13d8b gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xebdbd5c0 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf22346b8 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x038e7976 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05cd8f76 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05fce36f csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x06d24563 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0d5b7eaa xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ee87300 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f827626 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f9fd9c0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14c7ee53 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14ca68a8 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1683a025 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16c0d747 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b2593d6 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c30d931 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1d05eaf0 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1fdae978 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2004dbf5 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x236630db svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23d50bfb sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x25d1f1a3 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x25d657ab rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x26bb439e rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x28f28cf5 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x290c9e24 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b673494 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2bb6446e sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2fc617b9 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x32c133ce svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3639665f cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x389faa4c rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x39769b59 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3bb73975 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3ce811f1 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x41c7d9a4 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x42750178 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43ba4dff rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4460c933 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45042b43 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x473f66f8 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4bce6f39 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4c2b3a2f rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4db044ae svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4dd20ae1 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x52c6a117 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550547a3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5582c703 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x57fa6376 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x57fe8dbf xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59b717af put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5cea93ef rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ee8d566 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5fc6dcbb svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x60d34ff8 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x626c9d0c rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65019bc3 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x66ebb847 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x66f8f97f rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67590951 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6805b403 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x68d9d461 rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x698599b2 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6bb5a5aa xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6cca2cb0 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7291b51e xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x739c8c90 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76177703 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7d3b2618 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e8ea4ea svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x81b96b31 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82a7b460 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83a0e9fd svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86ed282a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x882a2bf8 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8d375d13 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9987d400 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9b71bdba xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9d42b6f3 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ddf0d69 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0276d4b rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa027dd3f auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3347429 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3b3d0b6 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3c0bd12 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3e26496 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa42c22ac xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa453e2c4 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa99c8e09 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xab9ab345 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xacfa9e44 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad5c4a28 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb387b246 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb9faa1b2 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb9fb2974 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbbd653f6 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbbdf1eb1 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbd1f334e xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc11c81c0 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc1c2c58d rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc2cb75ac xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3a2086f rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc5add586 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc5eae836 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc793b504 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9fb4fa5 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xca2d8ac8 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcb41c35a svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcca8984b xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccc2372e rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd61832c svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce0b87e8 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf10b71d xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd0f9fa76 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd17ffa5f rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5f17829 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82c728e rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd87d2189 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd8fd357e rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xda35eea4 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xda53522d xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcb14c3b rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde5785a8 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf76191f xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfbfa1f2 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe02f025b xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe2533e9b auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6f281cf rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7a0e7b5 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe9c7d07c svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea451a65 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea727737 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeae685b9 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeb5a8440 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xed075000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd1ba52 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf11f93e2 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf4054926 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf885c9d4 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfb59c15c svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfb8b3c8d rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xffca8408 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xffd523e6 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/wimax/wimax 0x221b2007 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2ae44ece wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7c7aa8fa wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0x8dae389f wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x99e637c2 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa0d6d34f wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb4818a91 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc7a6ac9c wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xdf3bedb6 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe527e676 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xed4ab056 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf7218b47 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xfc517cde wimax_msg_send +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x09fdbbed cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0d91896a cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x17aa9cf2 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x19d9a26e cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1f4dee87 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x22bf0c67 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x28de1a5a cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x31379094 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x325458e0 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x36b77a03 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x39ea224b cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4d69df8b cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4ff3adf1 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x57368b2c cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5961a9ef cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5d828b0c cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x65e94158 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x68716207 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6adca844 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7f7dafb8 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x829409b1 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8d67d7bf cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x90395acb cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x98e4e814 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9b9d6208 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9edfddff cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xabcba737 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xba27db74 cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcc3a39d8 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf0ac09b4 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf87bd029 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfd41d5df cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x1e78c75d ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x52b2c930 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xb065d5cd ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc2cb6313 ipcomp_output +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x01755549 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x02bfcc3c snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x02f1d9e7 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x05ae9343 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0dc62686 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0f95fb89 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0faea92c snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x17da90a4 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1eb67f1b snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x22bad262 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x240ed8f0 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x25f13b06 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2af0bcf3 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b4d7efb snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2db6362c snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2f435075 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x322b0ba2 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x322c8265 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x350d1343 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a10453c snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a95e605 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3b58d640 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3d4ec356 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3d50b3bf snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4514cba4 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x45d655ba snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x470d4c68 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x49e8ce5e snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c14fcb9 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x532d8596 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x568e76ce snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5b89a975 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x607681ba snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x616d28c3 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x619604e6 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x63462c5d snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6930eaac snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x699f0e5c snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6aa3b4d1 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ba8a6d3 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6c56e965 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x78ae75f1 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x872c87f7 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x911b457b snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x93085d06 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9de5d1a6 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa118cc0c snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa591744b snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab61b87d snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab79ebd5 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb2e4dd64 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb5b56e3b snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb9ceec42 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbf7d65fb snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc6c24ddd snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc876c7d1 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xca0c9656 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcaa6a04d snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcc8c02f2 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcf27d551 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd56e0f7b snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd76a805b snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xde2c0039 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe0f60626 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1d8630f snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe2c95ce7 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe3dee429 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe4bfe69c snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeead13cd snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf146ca61 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf1e3450a snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf30a174e snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf415d64b snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf761cb2f snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf7f08db5 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x079b143e ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xd135fe9c soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0xf13b75d0 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0xf70ab477 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x9e9f2b95 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xe71bc24d soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xa12e1424 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x31c44827 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xa1966d83 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x697f678b soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xf7bb6456 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x63c4a9e7 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xaaa2f994 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x6c74633c max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x81d8d49b pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xfd0d9877 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0x17ae488e dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x283ffc02 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xf6b89dbc soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xe080a3aa soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xf3964df3 tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x2fd0427e aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x99515158 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0a7431f0 aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x13923814 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x380c6619 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x4df532ae aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xad6d3b43 aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xbc3d2ee3 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xf36bd244 soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x593515b4 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xa9c3315f twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x988d73b1 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x1b834488 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xa9374fd8 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x5142d795 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x569a5e15 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x025d5a4c wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x34dca5d7 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xc11df6a5 soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x5a010cf7 soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x5aa07cf2 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x5890cfe4 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xcbad60c2 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x71fb227e soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x7cd108f1 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x5741f46b soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xc9bf183a wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x3806333e soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x5433ff4f wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xd54ba533 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xe806e240 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x7dc743ac wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0xf590afb3 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xdebdfc70 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xf1fe0fc8 wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0xa04edc5b soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0xbb620224 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x13841a6b soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x3a757e39 wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x38a949a8 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xbce10c97 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x148db2b7 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xce3a5a2a wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x170966d9 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x59a54b03 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x0e125798 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x92f998a6 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x0fd03daf soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x348e9312 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x644302a1 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x72a7c9ea soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xd54ec1db soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xe5c9b233 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x1c5521e4 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xafed3bea wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x29794944 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x37787227 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x44e41ca8 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xcaf2ec93 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00a0b901 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0241150e snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x05093d97 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x05cd5c7d snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x122f7cf0 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x131a2b42 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x14597d99 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x146888ed snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1545ebd8 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x164fd7e6 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x17c53dc1 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x17c67a20 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1a080ac6 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2202108f snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x239bebb5 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x26f4b2fd snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x29551731 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2efe107b snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2fab4568 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x31c1dc94 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x439679fe snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4cc596c3 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x597894bd snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5e0aab7a snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x60683e00 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x614257ff snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x65d851d7 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x673b6db5 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6860690c snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6bd09011 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x71e710d0 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x76e6b34f snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7988ba2b snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7aee9b28 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7b339033 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7ed5e74a snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8241cebf snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x89fba4fc snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x94e0519e snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x951118eb snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9995cd02 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9cf02375 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa3b4e710 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa3b8e21a snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa81ed247 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa8b85261 snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa5bb4a3 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb982033a snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb9a25435 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xba57b46f snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xba70afeb snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc4b793ac snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcecf5b8a snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd098568f snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd16738e1 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd7897134 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdd0c33a5 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe0ab63b9 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe0e7edb9 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe17f4812 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe3eb2b02 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe4069c8e snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe6f14a97 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xec7410b9 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xed19f6b5 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xee51e214 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeee8881d snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf109970e snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf3bf3950 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf8bb4acd snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa7101ec snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x2e0a0be5 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x51958fac xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x7e80b9f6 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x9a79aa81 xv_free +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xc1f55d16 xv_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x000b65d3 dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0x002ff5a3 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x003ed6a6 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x010b3618 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x0134456c skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x015ed959 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x017d7eeb register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01ab1652 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x01cb4883 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x01d7c947 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x022c4112 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x025ae5e5 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x0276c254 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x02ef32e6 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x03029b5c input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x03268efd queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x032a90da clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x037ed956 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x03b93f5d sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x03c3b3ee platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0408240e invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x0441b774 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04b4a333 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x04ba5292 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0x04c14e41 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04cfc4bf rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x056dbd0e bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0x05700c86 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x057c34d2 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x05c22489 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x05d81a4f led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x05dd52b6 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x05e674eb sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x06734576 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x0682fcb6 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x06d61f87 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x0709503b usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x074c7a3a crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x07770290 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x079b8834 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x07ff4aea xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x096c5239 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x09a16518 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x09c5b95a tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x09d60450 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x0a0d9c25 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x0a50222b dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x0a6cb76f cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x0a89077d usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b07fbf0 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0b6e4637 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x0b99570f net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0ce17487 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x0d186d6b hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0d75441c preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x0da8ed69 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x0dc5a1c0 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x0dd103c8 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x0de216ea dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x0deb0ade register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x0e109316 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x0e256e44 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x0e2cf931 usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x0e413b78 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x0e483ed1 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x0e5674d2 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x0e5d2e65 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x0e89d53e sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x0eb60fa7 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x0ec210b8 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL vmlinux 0x0f2f8d7b ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x0f365876 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x0f385eac da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x0f44362b blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x0f710a43 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x0f73520f klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x0fb90c0a debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x0fc0a386 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x100c13c6 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x10621889 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x106913bb pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x107efbe6 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x10865d00 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x10c5f808 get_driver +EXPORT_SYMBOL_GPL vmlinux 0x10da02cd sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1101d9df pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x114e28ef init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x11571210 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x1175c3a0 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x11f6ab8c tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x11fa2598 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x1226c9e3 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x1232dd52 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x12f22f50 pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x130f64ea dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x13854473 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x13a1f0ea mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13cd25ce drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x13d97cd4 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x13e12df8 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x13feae03 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x14103757 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x143b835f usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14a03064 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x14ed9d3f platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x14feff20 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x153888c8 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x153c062a rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x15568631 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x156257e3 apic +EXPORT_SYMBOL_GPL vmlinux 0x157030fb rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x15b14a7e ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x15b1ac26 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x15cdbc38 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x16554152 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x166415f4 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x1671f5ea locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x167332f5 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x16836e04 speedstep_detect_processor +EXPORT_SYMBOL_GPL vmlinux 0x1697136d hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x16c3eaa8 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x16c57b0c unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x16d0959a regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x16f76869 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x16fba6f9 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x16fbb486 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x171b577b unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x172717c4 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x172e72d4 vdso_enabled +EXPORT_SYMBOL_GPL vmlinux 0x17c7adcd usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x1800f920 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x180a6cfe __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x182b4539 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x183733a4 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x18b55ec7 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18f7226f relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x19609135 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x197dbe54 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x1a01909f scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a6b4b0c regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x1a8cd5f8 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x1a938737 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x1a9b538e ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x1aa4bdeb relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x1aafa0cd ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x1abc6ff0 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x1ac3036f ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x1acda5b2 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1acff966 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1b9bb970 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x1bb90a6f ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x1be87165 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x1c151546 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x1c1e2e9c usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x1c7b6c2a eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x1c7cfeb5 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x1c7febee __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c868857 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c91538f da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x1ced3c76 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x1d02ded1 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x1d03c190 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x1d1b1c0e __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x1d302d0b task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1daded97 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e60a721 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e87fee5 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1eb8e160 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1f3d1b77 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x1f41e789 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fa2f0c2 sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x1fa6acbf __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x1fbd3725 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fd08d88 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x2006889a crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x20079b23 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x20253d01 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x205aac2e pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x205dcd7a klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x207ce128 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x20b70ff7 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20e01bc9 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x20f03b2a inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x21367c88 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x21578e54 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21a0933d __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x21a6d51d fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x21fc9742 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x2279ce4f alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22f639d5 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x23253735 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x235600f7 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23869dc7 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x23cab4c6 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x2405ef3f spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x241d2b09 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x2422d87a ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x244020fd fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x246f4153 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x2474ac81 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x251464d5 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x2599de5b fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x25ab9be7 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x25ad0ea5 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x267cd1c0 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x269cc114 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x269d86dc fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x26b5ddb2 dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x27117f6a crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x2714a01f device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27d8880e scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x2834aff6 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x287a5983 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x288db99d scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x288de21c iomap_atomic_prot_pfn +EXPORT_SYMBOL_GPL vmlinux 0x28b39e19 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x28cb183f xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28e38852 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x28f692f7 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x29282156 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x293f4f7c ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x294510ce usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x29501527 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x295d4e36 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x29607472 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x29763af4 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x2980c410 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x29a05ed6 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x2a0a4724 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x2a394044 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x2a476d28 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a8f0357 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0x2ad3424c ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x2af90271 speedstep_get_frequency +EXPORT_SYMBOL_GPL vmlinux 0x2b05d022 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x2b3191b0 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x2b5c1fb1 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x2b7d155f d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2bdcd488 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x2be7fb8e disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c333ffb crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x2c43ad16 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x2c53fee8 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x2c88cbdf page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d047fc6 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x2d341499 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x2d53afee anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dd11777 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e4c06cb scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x2ed21cfe da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x2edc37bb pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x2efb8cdb __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2f91a0e0 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x2fb2b303 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x2fb3aa12 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x3040794a regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30fe4082 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3189d4df driver_register +EXPORT_SYMBOL_GPL vmlinux 0x31a5679f __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x31c54454 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x321b3c99 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x32924a4d scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32eaa15e pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x32f1e309 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x3304c145 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x33607d36 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x33697f3b platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x338853ec regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x342deef9 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x34a3a67d init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x34d9777c trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x358ec8d6 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x35bc8d38 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x35be5708 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x35ce1960 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35fd0312 per_cpu__injectm +EXPORT_SYMBOL_GPL vmlinux 0x361b8930 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x36309d5e sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x3637428c usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x365990ad hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x3660915a inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x3714af78 put_device +EXPORT_SYMBOL_GPL vmlinux 0x372c9ba3 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x374a690c device_create +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37e19128 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0x37e2949d debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3804374e ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x3841ab01 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x385461fc blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x385dc32d bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x386deec5 ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38b3ee3e mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x38ea936e __memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x39287f45 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x394dab43 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x39530a09 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x3959195c raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x396329e8 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x3968d9f0 device_del +EXPORT_SYMBOL_GPL vmlinux 0x39b02e6b usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x39df9107 inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x3a2ae292 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x3a7b88e4 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x3a849754 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x3a8b1125 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x3ac2ef70 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3ae03ee4 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x3ae09e9d usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x3ae84503 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x3b0558c0 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x3b12c75a vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x3b1c14ba ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x3b295481 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x3b434fe8 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x3b890af3 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x3bd04670 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c2044f6 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3c2fa2d3 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x3c482e0f preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d1697ce user_match +EXPORT_SYMBOL_GPL vmlinux 0x3d1c850f fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x3d1fc150 find_module +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d517b3c fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x3d7b6623 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3d997f1e xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3dd5d829 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3e0b2a7b security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x3e51c6a0 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x3e64df79 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x3e757637 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x3e9573ff dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0x3ef01caf debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f01570a probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x3f0e7a1c crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f465553 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3f59be64 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x3f5a1050 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3f942af7 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x3fa24016 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x3fbefd25 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x3ff309c2 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x401f9087 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x4029e565 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x402e5d1d proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x40a6312f scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40be2c41 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x41365241 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x413c9b2a spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x4147672d __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x414a560b crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x4168de93 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x41de36d6 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x41df8239 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x41eb1f20 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x42623c69 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x4269928b usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x426f13b9 e820_all_mapped +EXPORT_SYMBOL_GPL vmlinux 0x427e0746 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x42f86b5d do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x4335fb20 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x435c24a4 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x43796ab9 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x438322bb ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x439a5f5f xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x442939fc ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x445b7b9e queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x447b2c51 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454b261a uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x454d5c01 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45763e99 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d14bdf hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x45dc3aad ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x4648a74f driver_find +EXPORT_SYMBOL_GPL vmlinux 0x465be0b9 dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0x46619c7f ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x4677da1f crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x46977cc9 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x46bf20a8 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x46c7aef6 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x4701ac46 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x473b8649 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x47899231 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x47c04976 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x48154b93 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x4830a49d rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x483971c0 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x4843d8ee pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x4872f69a dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x4876b1c3 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x495a4ba3 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4995b134 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x49aad759 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x49db8db4 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x4a198a75 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x4a5411fe sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x4a63bb57 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x4a68d9bc pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x4a6fdae3 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x4a83980e usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x4aa84a68 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x4ad32e7f crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x4b798284 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x4b9b4efd aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x4c21ad7d br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x4c2f30d4 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c80c28b rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x4cec82ee crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4d3b7584 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d4c7ade usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d57ea58 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4de4debd ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x4eae8ea4 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x4f0bce29 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x4f6a0c11 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x4f95f211 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x4fac6781 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x4fce2101 dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fead1dc ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x4ff5324c usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x500c7a7e __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x504feaad simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x5073273c filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x50c89f23 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x5108b3fc acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x513b7bd8 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x516d21cc __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x517e75dc dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51b43493 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x51d739f1 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x51da37a2 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x51de744e debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x5209b953 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x52201d82 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x523a5dec inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x52496c50 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x52683b52 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x52a128ee sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x5349396a sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x536068e8 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x5370f0c7 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53806ede usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x538da9ff skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53a385e1 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x53c042e4 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x53c4d33b ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x53d82a13 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x545ac9a6 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x5492ef1b kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x549e65dd srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x54a7e4bd usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x54cfe1c7 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x54d155ce hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x54feee25 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x55749ea2 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x5598fd71 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x55dc6805 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x56042dda ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x5612b7f8 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x56a4953d inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x56ccfba2 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x5768ad68 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x57944662 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x58286771 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x582df84f console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x585efa2c blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x589b5f0b inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x58b7c17b inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x5914b528 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x5916acb3 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x5957a9d1 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x59aadc75 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x59ca3224 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x59d26f28 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x59f4a05c part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x59fad59d free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x5a010a85 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a478369 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x5a60a7c1 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x5a6ec452 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5a86a41e ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5afaf616 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x5afe4d20 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x5b28c419 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x5bfb4033 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c11b85d spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x5c3e7099 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5c9b768d attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5dc78542 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e1af4dc ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x5e2cdee6 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x5e5c1c0a debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x5eb6b3c4 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x5ecb9d45 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5f8d178a shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x5fbd03ea tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x5fcee70e crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x5fda62c7 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x60056618 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x60158594 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x601e090a scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x609b4b9f skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x609ffdf7 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60cf9c78 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x60e5f765 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x613c35fc inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x61552d39 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x61627941 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x616c50ef dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x61747e09 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x617abf02 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x617b5405 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x618b45ed anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x61ab649e cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x6248e402 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62f8f16a simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x6325f322 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x632652a0 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x63583f91 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x636ddabd ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x63931250 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x63c97af6 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x6423088d ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x642ba8c0 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x64ebe677 wmi_query_block +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x665d9420 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x6681cf42 lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x668c7998 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66c42ce2 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x66c6329f ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66fab731 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x66fc6128 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x67582388 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67aad12d sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x67e032ac power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x680528d5 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x6826946f put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x684f86c5 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x686f312a ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x68770c0e crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x688fa032 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a668cb hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x68a9b369 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x69084bb8 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x6927650c usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x69370657 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x694e3773 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x695e945a ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x6996b44d relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x69ad0034 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x69c62f0e register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x69eef475 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x69fc6de4 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x6a2a7758 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x6a7e7f43 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6aa0dbd3 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x6ad2337e devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x6ad59b24 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x6b26ae1c sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x6b30a33a apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x6b42a923 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x6b78a1bf ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x6b87c658 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x6b9178b3 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x6b94c408 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x6ba09880 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x6bbb9e64 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6c04c092 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x6c19e73b led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c9a2eb5 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x6c9e9505 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x6cc1661b sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x6d0b6a2c sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d5f6281 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x6dca5dba sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x6df58756 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e59e8c8 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e782c23 iomap_create_wc +EXPORT_SYMBOL_GPL vmlinux 0x6e943491 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x6eb787ee klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6ec586af crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x6ece833b alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x6ee48d37 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x6f149bba generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x6fa52906 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x6fb7ba5b fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7015b73c transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x7037d79d k8_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70abf7d0 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x70b96e85 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x70c2541d regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x70ce30fb ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x71557125 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x716356b8 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x719fbab2 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x71fed16f key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x72151c10 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x721df5da unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x722c4f65 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x723dcec8 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x727f0978 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x7285f84f unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x728d9344 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x72de3c79 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x731f690d ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x7345ba1c crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x73495c6c unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x736c6bda __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x739adef0 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x739eb524 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73df6488 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x73e6cb4f sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x73e901fb input_class +EXPORT_SYMBOL_GPL vmlinux 0x73ff4175 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x745465d0 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x75996e99 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x75b3b92e dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x75c99f5d invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x760e21fc dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x76115130 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x763166c0 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7645b9eb dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x7677101f ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x769df13d acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x76ad995c device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x77a5307f vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x77fdf5d0 dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x7854e9a6 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x78589591 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL vmlinux 0x78930408 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x78b2983a crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x78c4a9e7 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x78e3874b ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78ee0f53 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x7906acdd blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x7929091d platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x798df37a regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x79bcecaf usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x79d86533 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x7a325dbf __put_net +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7a5a8e07 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x7a7311b3 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x7a753538 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x7aab2c45 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7ab39aa9 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7ae17cf3 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b03c956 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7bb39690 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x7bcd2ded klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x7c34275e dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0x7c7e8684 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x7c92265a pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x7cce39a3 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x7ceec0bf da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7d3d3598 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x7d431f75 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e10d025 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e236976 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e29a538 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x7e2b3467 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e7a3398 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x7ece46f3 pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0x7ee35b05 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f220180 gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0x7f2d82ac ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x7f9115bb crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x7fa6325e regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x7fcfe827 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x7fd6e315 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x7ff0dffa spi_async +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x80305599 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80c9076b page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x810c8c44 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x8111225f platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x81397648 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x814d7a28 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x816587c5 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x816faeb3 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x81a08e97 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL vmlinux 0x81c41632 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x81c74c77 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x8216f101 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x823ba170 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x825888a2 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x82806b8d sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x829d0b11 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x82c1192a usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d3df41 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x8313b5d4 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x832b243d tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x834c5ecd acpi_smbus_read +EXPORT_SYMBOL_GPL vmlinux 0x834d8eee attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x83d2a646 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x8442a557 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x848aa98a set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x848b638d inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x84baafc4 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x853499f5 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x853ed638 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x85bd2012 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x85db9cbf shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x8640a258 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x867c684a setup_APIC_eilvt_ibs +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x868bbde3 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x86958305 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86bc71ae ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x87086dbb fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x871e41e6 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x8745fda6 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87891c05 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x879b0fc0 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x87b45979 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x87dab61e platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x87ecd101 register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x880b189a __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88660137 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x886736fc olpc_platform_info +EXPORT_SYMBOL_GPL vmlinux 0x886e48ca vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x88a42ba7 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x88b4a90f crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x8923257b dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0x8953a5be da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x897fd962 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x89886d8a __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x8998d8b8 inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x89b4e1b2 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x89bb1092 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x89e1027a sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x8a52706c inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8ae8f1f9 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b7db255 device_register +EXPORT_SYMBOL_GPL vmlinux 0x8b95b4be crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x8ba3bc3b unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x8bdcd44e crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c11089d kick_process +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c39fc05 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x8c681003 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8c801a78 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x8c9d686d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x8cd7a730 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x8ced1c05 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x8cf48b72 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d17bd66 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x8e2e50ae __class_register +EXPORT_SYMBOL_GPL vmlinux 0x8e32d6db cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x8e91fe13 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x8eae69ba kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x8eb58c6e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x8ed72ac9 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x8f01c258 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x8f0cc814 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x8f659c7a regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f7824f6 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x8f810b80 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x8f943015 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fc78a4a usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x8fd92183 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x8ffb53a3 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x904be910 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x90843240 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x9085f917 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90ecf709 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0x910b7995 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x91102f82 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x91482eef usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x9188bdb2 pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x91dacaa2 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x91ed3eb6 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x922cdf6c usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x92732398 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x928cdf87 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x92997b17 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x92b9c400 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x92d2b9ed ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92d74e64 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x92db3d35 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x92f046d7 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9304c95e usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x930ddb44 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x931bd144 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x9347ec04 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x9349077e usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x937782ee inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x937ba1f7 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x93ac86af ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x93b596d9 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x93b81758 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x93bf114b cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x942bd2fa regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x946269e0 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94aa8400 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x94c4d63e usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x94de3391 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x950d0eb5 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x9543bc5d device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x9550a4e4 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x95555298 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x9563491d mmput +EXPORT_SYMBOL_GPL vmlinux 0x95642ffd udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95758050 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9595195b uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x95b892bf platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x966ab3ee usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x96785bde usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96d3044d debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x96e49ae0 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x96f1355a fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x97084c19 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x975c56a3 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x977df4a1 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x977e491c ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x97982542 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x97c68536 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x97e75a8a inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x982825ba debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x98742cf0 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x98aca729 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x98b42839 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x991570c9 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x991a5e54 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x994de747 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x997f8037 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x9984c858 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x99a4183b debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x99b247be pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x99c3775c kmap_atomic_pfn +EXPORT_SYMBOL_GPL vmlinux 0x99cf2801 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x99cf4a0f rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x99e739bd regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a1444dc transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x9a27fdcd get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x9a59b0b0 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x9a75738e ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9a7ac861 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x9a95d243 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x9ac8d80e sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x9b2ab6f7 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x9b2d12da root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9b31d285 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x9b6adcf3 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bab1cf0 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x9bb1cb0b rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x9bc8c8a7 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x9bcc678b usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x9c3ddc03 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x9c54e18f ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x9ca77557 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9ccd4693 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x9cf9779a proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x9d030b99 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d2b6a58 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x9d308c4d hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d82d7a2 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x9dcc9216 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x9e01f6d4 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9ebff902 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x9ed1dd1e elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9edf10f8 get_device +EXPORT_SYMBOL_GPL vmlinux 0x9f1f0f36 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f7192a2 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f8ab86e regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fd74f1e inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x9ff02869 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL vmlinux 0xa1596d98 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa17eda21 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0xa185e466 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xa18f3d5c iounmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xa1bd0e78 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xa28d8527 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2906165 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xa29e8488 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0xa2a78dc4 pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xa2b7e7c3 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xa2ccfc4a do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa2f71244 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa33d4e3d blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa3765fce ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xa3dd4121 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xa3eeed48 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xa3f75a2c usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa44d41c7 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa49b1dd0 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0xa4d78d10 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0xa51ed1fd crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0xa53e96f6 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0xa56ab247 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0xa5beaecf raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5cb60c4 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa66ca854 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xa6795cbe dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0xa67c29d6 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0xa68381e6 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa6852407 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa68bc6b7 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xa6db5f9d scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xa7c272aa crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xa7c72507 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xa7e1e2a1 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0xa7fba1aa get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0xa81bb815 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xa8548f2d inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xa868a59a vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xa8974dc1 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xa8b5adf2 inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xa8c753ea tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa91ca024 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0xa9381bfc ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xa94633de ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0xa9715f3a remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xa9ab16df ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0xa9b7afd8 wmi_set_block +EXPORT_SYMBOL_GPL vmlinux 0xa9b9643e uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa12b499 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa3c030a sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0xaa3e3aea __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa485032 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa73cccd ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaad40f0 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0xaaddf6ca blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xaae1b747 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab410444 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xab41bd91 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xabc130b4 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xac1ffe46 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0xac4b33c4 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc19485 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xacc8b52e driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xad096363 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0xad3ba9f0 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xad493d09 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xad543801 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0xadbc3638 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae2ccfd0 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xae461d64 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0xae970ce6 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xae973dcb acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0xaef305f3 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xaf127dd0 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0xaf3f448c tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf4b702c pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xafad410f user_destroy +EXPORT_SYMBOL_GPL vmlinux 0xafc7c996 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xb0223109 klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb09f07fa ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0xb0a33983 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0eedea9 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb1204b6c ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xb14b0aed fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0xb166be9b ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0xb171af04 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1bea11d ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xb2795473 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xb2d969ae ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb35d9a99 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xb3627341 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb39963e4 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xb3cdd7a8 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0xb3f100ba ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xb458aefc regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xb48f65af pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb4eedd27 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0xb4ef0d32 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb5314225 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb54b50c9 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0xb54f9fbd driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb578975e regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a15897 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0xb5d7d41f generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0xb5d8913d register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb60e0c9d crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb67d27e9 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6af52e0 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0xb6bb98af inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0xb6bc49a9 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xb6bc7970 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb71ab880 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7be75df scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2eb91 mce_cpu_specific_poll +EXPORT_SYMBOL_GPL vmlinux 0xb7ea9356 relay_open +EXPORT_SYMBOL_GPL vmlinux 0xb7fdd0df eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xb80a917a ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb83bc227 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0xb850ae7e inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0xb8777ef9 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xb8857caf class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xb8d9e789 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xb8de734f mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb8fc8446 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xb90045b4 device_add +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb909f674 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0xb956f9f3 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9cd7ecb sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xb9e3e93f tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xb9f123f6 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xba3163e5 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0xba68a0be sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xba690e41 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbaa52d5d led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbb109a6c crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0xbb1e85ea bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbb4a1408 klist_init +EXPORT_SYMBOL_GPL vmlinux 0xbb58b814 iomap_free +EXPORT_SYMBOL_GPL vmlinux 0xbb9ba106 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0xbbab8f61 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0xbbaf0dd0 sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbc05feed aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xbc23014a ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xbc9a1cad pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xbce234a4 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xbd0cb321 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xbd3c9cc2 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd576d98 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xbd579fc2 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0xbdacd6a8 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdf624af virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe556e89 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xbe584033 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0xbefafa37 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0xbf2e957c sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0xbf5d6287 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0xbfd4f70e inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xbfd94bb0 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xbfec24f6 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xc0522170 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xc0af3afd usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xc107869d ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0xc1139676 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xc1139695 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xc1144e37 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc1822f5f page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc24403bd sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc29b42f1 dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0xc2bee00b pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0xc2f2063f usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc3495362 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc36e3147 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3da888a register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xc3e5e70d tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc42f2f94 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4bdd05a crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xc5001c57 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc502e617 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0xc51b5f4d transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc54fc83c blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0xc5e2e9fd dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xc5e3dddf wmi_get_event_data +EXPORT_SYMBOL_GPL vmlinux 0xc605d977 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc63454ff unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xc64eb6c7 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc759cb78 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0xc75d6022 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xc7bf351b skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0xc7c63d39 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0xc7e5712b pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0xc7ec11f6 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc885c121 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0xc88a486a inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc895726f ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xc8cdfff6 scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0xc918ab24 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xc9366a39 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc964f8c7 user_read +EXPORT_SYMBOL_GPL vmlinux 0xc996dba9 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xc9aece13 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xc9be09ec regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL vmlinux 0xc9e6ccdf cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca01f51c tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0xca5d35b9 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0xca771941 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca8eb935 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcad6bdf1 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xcb02579e devres_find +EXPORT_SYMBOL_GPL vmlinux 0xcb10dcdb __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xcb156cfc __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0xcb38df6e raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0xcb454c16 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0xcb759cbb xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0xcba265a6 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xcbb634be ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0xcbc62451 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc252073 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc81e91b fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0xcc9984ec ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd2f83d3 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0xcd3b0bf5 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0xcd4b7b98 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0xcd5d7863 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xcdc18ca5 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xce154cf8 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xce1b4c53 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0xce33b02c bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xce493b94 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0xce9b42da ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0xcee29577 use_module +EXPORT_SYMBOL_GPL vmlinux 0xcefb8ffb tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0xcf076a4b tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xcf1982e8 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xcf3b3cac find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xcf5cf2b3 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0xcf748e13 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfee2ad9 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL vmlinux 0xd017330b rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03fdcc0 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd04031ff shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xd0427ad8 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0xd04df0b3 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xd096c482 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0c383ad pci_intx +EXPORT_SYMBOL_GPL vmlinux 0xd103bef5 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0xd11c9a4b ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xd12ac59b olpc_ec_cmd +EXPORT_SYMBOL_GPL vmlinux 0xd137168a driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd148b6b2 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0xd151759c register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xd1568727 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd179bdde sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xd19bbcea devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd1bbcdae fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xd1c2c081 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xd1de00ae pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xd1f9c26c tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xd24ca564 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2734e4d queue_work +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2f65821 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd308f6ed skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xd3203f96 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0xd329c941 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0xd35b8e9c usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0xd363ded0 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0xd38d192b cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0xd3b418a6 acpi_smbus_write +EXPORT_SYMBOL_GPL vmlinux 0xd3c230b4 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xd3c442b4 put_pid +EXPORT_SYMBOL_GPL vmlinux 0xd3c5a8d3 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xd3e96fc7 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xd3f065cc device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xd457b0f4 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xd4774d2e ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0xd494ee54 speedstep_get_freqs +EXPORT_SYMBOL_GPL vmlinux 0xd49f211c device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd4b24bd2 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xd4fa655d da903x_write +EXPORT_SYMBOL_GPL vmlinux 0xd5051eb7 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd512c07f save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0xd523bd80 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xd5242386 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0xd52824f2 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0xd544e902 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0xd54bfe4f eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0xd57da570 xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xd5b1550a __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xd5b15602 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0xd5b89c2b class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd6310649 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xd6690628 mce_chrdev_ops +EXPORT_SYMBOL_GPL vmlinux 0xd69d4715 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xd6b7b67d debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xd6faa33f ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0xd703ad10 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd757577f sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd7d2192e scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd8457f31 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xd878d7c6 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0xd8c36f1c usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0xd8d0d638 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0xd9042fa8 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xd96043f1 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0xd96bc907 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0xd9921571 ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0xd9b037de handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0xda000346 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda6e04bd ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0xda70c567 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xdae066a0 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdafa0010 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb29abf6 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0xdb926e55 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0xdba64f1c eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xdbd32ca1 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xdbe1aaad vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0xdbf99b42 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xdc15007d class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xdc33e0b0 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xdc3bc370 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0xdc622dd3 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xdc714560 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xdc7c5ef7 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xdcd3f7db kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xdd21618e sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0xdd596929 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0xdd63ad9d add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xddcec63a pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0xde1a336e ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde48df18 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xde573e47 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0xde59349e driver_attach +EXPORT_SYMBOL_GPL vmlinux 0xdec589d4 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xdecf7081 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xdecf9e47 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0xdf4e8987 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xdf800229 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xdfa13ef4 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0xdfafb983 per_cpu__gdt_page +EXPORT_SYMBOL_GPL vmlinux 0xe00ad593 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0xe0263e8d ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0xe0996f05 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0e7784b scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0xe0f36f81 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xe113c9b9 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0xe118f713 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xe1451d7b kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0xe175865e sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0xe1830c89 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xe1b795b2 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0xe2172a92 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xe23ab314 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0xe2408e30 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0xe2426710 wmi_evaluate_method +EXPORT_SYMBOL_GPL vmlinux 0xe247343b hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe27551b7 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe337939e xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xe34c44ae class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xe400d119 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0xe40abc7a pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xe431cc4c ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0xe48fb1a1 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4bfeb72 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xe4c331b6 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0xe4dcdcf0 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xe4ee50f9 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0xe513afc0 cache_k8_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe566144c cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0xe5cb6719 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0xe5f712c7 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0xe607f4f4 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0xe60d91f2 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0xe60dd306 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe64223f0 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe681c6b9 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0xe684c198 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0xe6aca20f dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0xe6ad918b __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xe6b4e6f6 device_attach +EXPORT_SYMBOL_GPL vmlinux 0xe6d40536 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xe6d97989 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0xe72d2423 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0xe7498087 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xe77378a3 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe8044076 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xe861d720 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe895a19c br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0xe8cb45b6 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0xe8fcc4df __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe90fd066 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0xe9206023 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0xe939f467 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe948c6aa sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe96b04fe dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0xea0540c5 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea729526 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xeaa2d895 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xeac48159 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb154918 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb58fab0 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0xebcf95ef led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xebe85301 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xebfb39a0 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec3524d5 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0xec9af0a5 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0xecab0eb3 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0xecd440c8 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0xece7adce dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xed5b5786 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0xed710b08 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedf3f1f1 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0xee60c9e7 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xee6c72d3 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xee7cba73 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0xeea89005 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xeee9e8dd crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe21106 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xefef0909 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xf03520b2 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf06c1cc7 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xf07fc70c inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0xf10fa1b3 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0xf11d4e2e dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0xf133406d ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xf1463412 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf1509d08 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf27b8dd1 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf2910c52 device_move +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf3754947 ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0xf39cd689 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0xf3ace8bc ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf3c10e90 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0xf3c1c0a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf3c4837f kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xf3fa08d4 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf420a2b1 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xf4443e37 dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0xf44617f1 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0xf463814b ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0xf486b326 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4a30aa3 scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xf52c3efe inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf53ed33d device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf55418c5 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0xf554844d inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xf55cddca securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf59dadf2 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5cbbf95 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xf60a8a73 ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xf60f0321 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0xf6271092 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xf648ec57 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0xf6975931 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xf69d11c7 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf712264d ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf715732b ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf71814a1 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xf73291da xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0xf7c4be52 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0xf863e82a flush_work +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf8fcba9e seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xf9663346 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf974a168 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0xf974d681 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9945569 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9bda8d3 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9eced12 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa228f8b task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xfa2eb9ec __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0xfa4c1c2a pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xfa9e9f1a module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xfb072362 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xfb0948a9 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0xfb24bfc6 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xfb2a3293 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xfb5c3a0c ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0xfb69281a kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xfb8c9507 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc920413 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xfcb2cc1f usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0xfcce8a14 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xfce8f444 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xfd02947c blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xfd02e89a spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd6b7152 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xfd91c2e2 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0xfdc7fa08 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0xfdcb3417 dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe4cb951 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0xfe727411 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfee8e9d1 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0xfefbd163 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xff1e9f1d usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0xff3a67a6 user_update +EXPORT_SYMBOL_GPL vmlinux 0xff43c86b single_open_net +EXPORT_SYMBOL_GPL vmlinux 0xff55e75e ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xffc503d2 spi_alloc_master +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/i386/generic-pae.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/i386/generic-pae.modules @@ -0,0 +1,2795 @@ +3c359 +3c501 +3c503 +3c505 +3c507 +3c509 +3c515 +3c523 +3c527 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +53c700 +6pack +8021q +8139cp +8139too +8250_accent +8250_boca +8250_exar_st16c554 +8250_fourport +8250_hub6 +8250_mca +8255 +82596 +8390 +8390p +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abituguru +abituguru3 +abyss +ac3200 +ac97_bus +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_pad +acpiphp +acpiphp_ibm +acquirewdt +act2000 +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +addi_apci_035 +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2016 +addi_apci_2032 +addi_apci_2200 +addi_apci_3001 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +adfs +adi +adl_pci6208 +adl_pci7296 +adl_pci7432 +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +adq12b +ads7828 +ads7846 +adt7462 +adt7470 +adt7473 +adt7475 +adutux +adv7170 +adv7175 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +aedsp16 +aes_generic +aes-i586 +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ah6 +aha152x +aha152x_cs +aha1542 +aha1740 +ahci +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +alauda +ali-agp +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altpciechdma +ambassador +amd64-agp +amd76x_edac +amd76xrom +amd8111e +amd-k7-agp +amd-rng +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +analog +ansi_cprng +anubis +aoe +apm +appledisplay +applesmc +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcfb +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arlan +arptable_filter +arp_tables +arpt_mangle +asb100 +asix +asus_atk0110 +asus-laptop +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at1700 +at24 +at25 +at76c50x-usb +aten +ath +ath5k +ath9k +ati-agp +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +av5100 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1isa +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +b43 +b43legacy +b44 +bas_gigaset +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_aout +binfmt_misc +bitblit +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bnx2x +bonding +bpa10x +bpck +bpck6 +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +c101 +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capi +capidrv +capifs +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcidio +cb_pcimdas +cb_pcimdda +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cifs +cirrusfb +ck804xrom +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-isa +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +core +coretemp +cosa +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpqphp +cpu5wdt +cpuid +c-qcam +cramfs +cr_bllcd +crc32c +crc32c-intel +crc7 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cs5535_gpio +cs553x_nand +cs89x0 +ct82c710 +ctr +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +dabusb +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +depca +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +divacapi +divadidd +diva_idi +diva_mnt +divas +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dmm32at +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +donauboe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt9812 +dtc +dtl1_cs +dtlk +dummy +dummy_hcd +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +e2100 +e752x_edac +e7xxx_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +edac_core +edac_mce_amd +eeepc-laptop +eepro +eeprom +eeprom_93cx6 +eeti_ts +eexpress +efficeon-agp +efs +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +enclosure +eni +enic +epat +epca +epia +epic100 +e_powersaver +eql +es3210 +esb2rom +esi-sir +esp4 +esp6 +et131x +et61x251 +eth1394 +eth16i +ethoc +eurotechwdt +evbug +evtchn +ewrk3 +exofs +exportfs +f71805f +f71882fg +f75375s +fakephp +farsync +fat +faulty +fbcon +fb_ddc +fb_sys_fops +fcoe +fcrypt +fd_mcs +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +fit2 +fit3 +fl512 +floppy +fm801-gp +fmvj18x_cs +fnic +font +forcedeth +fore_200e +freevxfs +friq +frpw +fsam7400 +fscache +fschmd +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu_ts +funsoft +g450_pll +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +gdth +generic +generic_bl +gen_probe +geode-aes +geode-rng +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +g_NCR5380 +g_NCR5380_mmio +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +gsc_hpdi +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gx1fb +gxfb +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hifn_795x +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hostess_sv11 +hp +hp100 +hp4x +hp_accel +hpfs +hpilo +hp-plus +hptiop +hp-wmi +hso +htc-pasic3 +htcpen +hv_blkvsc +hv_netvsc +hv_storvsc +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hysdn +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-isa +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i810 +i810fb +i82092 +i82365 +i82860_edac +i82875p_edac +i82975x_edac +i830 +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmcam +ibmlana +ibmmca +ibmpex +ibmphp +ib_mthca +ibmtr +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ichxrom +icn +icp_multi +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igb +igbvf +ii_pci20kc +ili9320 +imm +in2000 +industrialio +inexio +inftl +initio +inport +input-polldev +int51x1 +intel-agp +intel_menlow +intel-rng +intel_vr_nor +interact +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_ibft +iscsi_tcp +iscsi_trgt +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +it8712f_wdt +it87_wdt +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k8temp +kafs +kahlua +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kvm +kvm-amd +kvm-intel +kxsd9 +kyrofb +l1oip +l2cap +l440gx +l64781 +lanai +lance +lanstreamer +lapb +lapbether +lcd +ldusb +lec +led-class +leds-alix2 +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-gpio +leds-lp3944 +leds-net48xx +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +leds-wrap +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3l02dq +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lne390 +lockd +logibm +lp +lp3971 +lp486e +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltpc +ltv350qv +lxfb +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +machzwd +macmodes +macvlan +madgemc +magellan +map_absent +map_funcs +map_ram +map_rom +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max1363 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mbp_nvidia_bl +mc13783 +mc13783-core +mc33880 +mc44s803 +mce-inject +mce-xeon75xx +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdacon +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +meye +mfd-core +mga +michael_mic +microcode +microtek +mii +minix +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mixcomwd +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msi-laptop +msnd +msnd_classic +msnd_pinnacle +msp3400 +mspro_block +msr +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +multiq3 +mvsas +mwave +mwl8k +mxb +mxl5005s +mxl5007t +mxser +myri10ge +n2 +n411 +nand +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +ncpfs +NCR53c406a +NCR_D700 +NCR_Q720_mod +ndiswrapper +ne +ne2 +ne2k-pci +ne3210 +neofb +net1080 +netconsole +netjet +netrom +netsc520 +nettel +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +ni52 +ni65 +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +nicstar +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nsp32 +nsp_cs +nst +ntfs +nvidia-agp +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olpc_battery +olympic +omfs +omnibook +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8023 +p9auth +padlock-aes +padlock-sha +panasonic-laptop +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas16 +pas2 +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cs5535 +pata_cs5536 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_isapnp +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_qdi +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pata_winbond +pbe5 +pc110pad +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pca953x +pcbc +pcbit +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcspkr +pcwd +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pegasus +penmount +pf +pg +phantom +phison +phonedev +phonet +phram +physmap +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pms +pn_pep +poc +poch +pohmelfs +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +progear_bl +proteon +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas +qlogicfas408 +qnx4 +qt1010 +quatech_daqp_cs +quatech_usb2 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192se_pci +r8192s_usb +r82600_edac +r8a66597-hcd +radeon +radeonfb +radio-aimslab +radio-aztech +radio-cadet +radio-gemtek +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-rtrack2 +radio-sf16fmi +radio-sf16fmr2 +radio-si4713 +radio-tea5764 +radio-terratec +radio-trust +radio-typhoon +radio-usb-si470x +radio-zoltrix +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +rar_driver +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2860sta +rt2870sta +rt2x00lib +rt2x00pci +rt2x00usb +rt3090sta +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s626 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +safe_serial +salsa20_generic +salsa20-i586 +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb1000 +sbc60xxwdt +sbc7240_wdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sb_lib +sbni +sbp2 +sc +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +scb2_flash +scc +sch311x_wdt +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_srp +scsi_wait_scan +sctp +scx200 +scx200_acb +scx200_docflash +scx200_gpio +scx200_hrt +scx200_i2c +scx200_wdt +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sdla +sdricoh_cs +se401 +sealevel +sedlbauer_cs +seed +seeq8005 +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +shpchp +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sim710 +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skel +skfp +skge +skisa +sky2 +sl811_cs +sl811-hcd +slicoss +slip +slram +sm501 +sm501fb +smbfs +smc9194 +smc91c92_cs +smc-mca +smctr +smc-ultra +smc-ultra32 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1816a +snd-ad1848 +snd-ad1889 +snd-adlib +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als100 +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt2320 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmi8330 +snd-cmipci +snd-cs4231 +snd-cs4236 +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dt019x +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emu8000-synth +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1688 +snd-es1688-lib +snd-es18xx +snd-es1938 +snd-es1968 +snd-es968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-gusclassic +snd-gusextreme +snd-gus-lib +snd-gusmax +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-interwave +snd-interwave-stb +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-miro +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-msnd-classic +snd-msnd-lib +snd-msnd-pinnacle +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3sa2 +snd-opl3-synth +snd-opl4-lib +snd-opl4-synth +snd-opti92x-ad1848 +snd-opti92x-cs4231 +snd-opti93x +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16 +snd-sb16-csp +snd-sb16-dsp +snd-sb8 +snd-sb8-dsp +snd-sbawe +snd-sb-common +snd-sc6000 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-sgalaxy +snd-sis7019 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-sscape +snd-tea575x-tuner +snd-tea6330t +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-wavefront +snd-wss-lib +snd-ymfpci +soc_camera +soc_camera_platform +softcursor +softdog +solos-pci +sony-laptop +sonypi +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +ssb +sscape +ssfdc +sst25l +sstfb +ssv_dnp +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stinger +stir4200 +stkwebcam +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sworks-agp +sx8 +sym53c416 +sym53c500_cs +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t128 +t1isa +t1pci +tc1100-wmi +tcic +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +teles_cs +tg3 +tgr192 +thinkpad_acpi +thmc50 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tileblit +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tle62x0 +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +topstar-laptop +toshiba_acpi +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_infineon +tpm_nsc +tpm_tis +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +trix +ts5500_flash +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tua6100 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +twofish-i586 +typhoon +u132-hcd +u14-34f +uart401 +uart6850 +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +udlfb +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +ultrastor +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +unioxx5 +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usb_gigaset +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-int-device +vcan +ves1820 +ves1x93 +vesafb +veth +vfat +vga16fb +vgastate +vgg2432a4 +vhci-hcd +via +via686a +via-agp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +vicam +video +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio_balloon +virtio_console +virtio-rng +virtual +visor +vivi +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_tsi148 +vme_user +v_midi +vmk80xx +vmlfb +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt6656_stage +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +w9968cf +wacom +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wavelan +wavelan_cs +wbsd +wd +wd7000 +wdt +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +winbond-cir +wire +wistron_btns +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc5000 +xcbc +xen-blkfront +xen-fbfront +xenfs +xen-kbdfront +xen-netfront +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +z85230 +zatm +zaurus +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +znet +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/i386/generic.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/i386/generic.modules @@ -0,0 +1,2796 @@ +3c359 +3c501 +3c503 +3c505 +3c507 +3c509 +3c515 +3c523 +3c527 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +53c700 +6pack +8021q +8139cp +8139too +8250_accent +8250_boca +8250_exar_st16c554 +8250_fourport +8250_hub6 +8250_mca +8255 +82596 +8390 +8390p +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abituguru +abituguru3 +abyss +ac3200 +ac97_bus +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_pad +acpiphp +acpiphp_ibm +acquirewdt +act2000 +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +addi_apci_035 +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2016 +addi_apci_2032 +addi_apci_2200 +addi_apci_3001 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +adfs +adi +adl_pci6208 +adl_pci7296 +adl_pci7432 +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +adq12b +ads7828 +ads7846 +adt7462 +adt7470 +adt7473 +adt7475 +adutux +adv7170 +adv7175 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +aedsp16 +aes_generic +aes-i586 +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ah6 +aha152x +aha152x_cs +aha1542 +aha1740 +ahci +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +alauda +ali-agp +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altpciechdma +ambassador +amd64-agp +amd76x_edac +amd76xrom +amd8111e +amd-k7-agp +amd-rng +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +analog +ansi_cprng +anubis +aoe +apm +appledisplay +applesmc +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcfb +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arlan +arptable_filter +arp_tables +arpt_mangle +asb100 +asix +asus_atk0110 +asus-laptop +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at1700 +at24 +at25 +at76c50x-usb +aten +ath +ath5k +ath9k +ati-agp +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +av5100 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1isa +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +b43 +b43legacy +b44 +bas_gigaset +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_aout +binfmt_misc +bitblit +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bnx2x +bonding +bpa10x +bpck +bpck6 +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +c101 +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capi +capidrv +capifs +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcidio +cb_pcimdas +cb_pcimdda +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cifs +cirrusfb +ck804xrom +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-isa +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +core +coretemp +cosa +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpqphp +cpu5wdt +cpuid +c-qcam +cramfs +cr_bllcd +crc32c +crc32c-intel +crc7 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cs5535_gpio +cs553x_nand +cs89x0 +ct82c710 +ctr +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +dabusb +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +depca +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +divacapi +divadidd +diva_idi +diva_mnt +divas +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dmm32at +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +donauboe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt9812 +dtc +dtl1_cs +dtlk +dummy +dummy_hcd +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +e2100 +e752x_edac +e7xxx_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +edac_core +edac_mce_amd +eeepc-laptop +eepro +eeprom +eeprom_93cx6 +eeti_ts +eexpress +efficeon-agp +efs +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +enclosure +eni +enic +epat +epca +epia +epic100 +e_powersaver +eql +es3210 +esb2rom +esi-sir +esp4 +esp6 +et131x +et61x251 +eth1394 +eth16i +ethoc +eurotechwdt +evbug +ewrk3 +exofs +exportfs +f71805f +f71882fg +f75375s +fakephp +farsync +fat +faulty +fbcon +fb_ddc +fb_sys_fops +fcoe +fcrypt +fd_mcs +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +fit2 +fit3 +fl512 +floppy +fm801-gp +fmvj18x_cs +fnic +font +forcedeth +fore_200e +freevxfs +friq +frpw +fsam7400 +fscache +fschmd +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu_ts +funsoft +g450_pll +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +gdth +generic +generic_bl +gen_probe +geode-aes +geode-rng +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +g_NCR5380 +g_NCR5380_mmio +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +gsc_hpdi +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gx1fb +gxfb +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hifn_795x +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hostess_sv11 +hp +hp100 +hp4x +hp_accel +hpfs +hpilo +hp-plus +hptiop +hp-wmi +hso +htc-pasic3 +htcpen +hv_blkvsc +hv_netvsc +hv_storvsc +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hysdn +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-isa +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i810 +i810fb +i82092 +i82365 +i82860_edac +i82875p_edac +i82975x_edac +i830 +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmcam +ibmlana +ibmmca +ibmpex +ibmphp +ib_mthca +ibmtr +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ichxrom +icn +icp_multi +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igb +igbvf +ii_pci20kc +ili9320 +imm +in2000 +industrialio +inexio +inftl +initio +inport +input-polldev +int51x1 +intel-agp +intel_menlow +intel-rng +intel_vr_nor +interact +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_ibft +iscsi_tcp +iscsi_trgt +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +it8712f_wdt +it87_wdt +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k8temp +kafs +kahlua +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kvm +kvm-amd +kvm-intel +kxsd9 +kyrofb +l1oip +l2cap +l440gx +l64781 +lanai +lance +lanstreamer +lapb +lapbether +lcd +ldusb +lec +led-class +leds-alix2 +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-gpio +leds-lp3944 +leds-net48xx +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +leds-wrap +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3l02dq +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lne390 +lockd +logibm +lp +lp3971 +lp486e +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltpc +ltv350qv +lxfb +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +machzwd +macmodes +macvlan +madgemc +magellan +map_absent +map_funcs +map_ram +map_rom +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max1363 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mbp_nvidia_bl +mc13783 +mc13783-core +mc33880 +mc44s803 +mce-inject +mce-xeon75xx +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdacon +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +meye +mfd-core +mga +michael_mic +microcode +microtek +mii +minix +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mixcomwd +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msi-laptop +msnd +msnd_classic +msnd_pinnacle +msp3400 +mspro_block +msr +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +multiq3 +mvsas +mwave +mwl8k +mxb +mxl5005s +mxl5007t +mxser +myri10ge +n2 +n411 +nand +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +ncpfs +NCR53c406a +NCR_D700 +NCR_Q720_mod +ndiswrapper +ne +ne2 +ne2k-pci +ne3210 +neofb +net1080 +netconsole +netjet +netrom +netsc520 +nettel +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +ni52 +ni65 +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +nicstar +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nsp32 +nsp_cs +nst +ntfs +nvidia-agp +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olpc_battery +olympic +omfs +omnibook +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8023 +p9auth +padlock-aes +padlock-sha +panasonic-laptop +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas16 +pas2 +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cs5535 +pata_cs5536 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_isapnp +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_qdi +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pata_winbond +pbe5 +pc110pad +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pca953x +pcbc +pcbit +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcspkr +pcwd +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pegasus +penmount +pf +pg +phantom +phison +phonedev +phonet +phram +physmap +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pms +pn_pep +poc +poch +pohmelfs +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +progear_bl +proteon +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas +qlogicfas408 +qnx4 +qt1010 +quatech_daqp_cs +quatech_usb2 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192se_pci +r8192s_usb +r82600_edac +r8a66597-hcd +radeon +radeonfb +radio-aimslab +radio-aztech +radio-cadet +radio-gemtek +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-rtrack2 +radio-sf16fmi +radio-sf16fmr2 +radio-si4713 +radio-tea5764 +radio-terratec +radio-trust +radio-typhoon +radio-usb-si470x +radio-zoltrix +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +rar_driver +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2860sta +rt2870sta +rt2x00lib +rt2x00pci +rt2x00usb +rt3090sta +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s626 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +safe_serial +salsa20_generic +salsa20-i586 +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb1000 +sbc60xxwdt +sbc7240_wdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sb_lib +sbni +sbp2 +sc +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +scb2_flash +scc +sch311x_wdt +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +scx200 +scx200_acb +scx200_docflash +scx200_gpio +scx200_hrt +scx200_i2c +scx200_wdt +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sdla +sdricoh_cs +se401 +sealevel +sedlbauer_cs +seed +seeq8005 +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +shpchp +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sim710 +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skel +skfp +skge +skisa +sky2 +sl811_cs +sl811-hcd +slicoss +slip +slram +sm501 +sm501fb +smbfs +smc9194 +smc91c92_cs +smc-mca +smctr +smc-ultra +smc-ultra32 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1816a +snd-ad1848 +snd-ad1889 +snd-adlib +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als100 +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt2320 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmi8330 +snd-cmipci +snd-cs4231 +snd-cs4236 +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dt019x +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emu8000-synth +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1688 +snd-es1688-lib +snd-es18xx +snd-es1938 +snd-es1968 +snd-es968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-gusclassic +snd-gusextreme +snd-gus-lib +snd-gusmax +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-interwave +snd-interwave-stb +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-miro +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-msnd-classic +snd-msnd-lib +snd-msnd-pinnacle +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3sa2 +snd-opl3-synth +snd-opl4-lib +snd-opl4-synth +snd-opti92x-ad1848 +snd-opti92x-cs4231 +snd-opti93x +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16 +snd-sb16-csp +snd-sb16-dsp +snd-sb8 +snd-sb8-dsp +snd-sbawe +snd-sb-common +snd-sc6000 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-sgalaxy +snd-sis7019 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-sscape +snd-tea575x-tuner +snd-tea6330t +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-wavefront +snd-wss-lib +snd-ymfpci +soc_camera +soc_camera_platform +softcursor +softdog +solos-pci +sony-laptop +sonypi +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +ssb +sscape +ssfdc +sst25l +sstfb +ssv_dnp +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stinger +stir4200 +stkwebcam +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sworks-agp +sx8 +sym53c416 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t128 +t1isa +t1pci +tc1100-wmi +tcic +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +teles_cs +tg3 +tgr192 +thinkpad_acpi +thmc50 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tileblit +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tle62x0 +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +topstar-laptop +toshiba_acpi +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_infineon +tpm_nsc +tpm_tis +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +trix +ts5500_flash +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tua6100 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +twofish-i586 +typhoon +u132-hcd +u14-34f +uart401 +uart6850 +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +udlfb +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +ultrastor +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +unioxx5 +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usb_gigaset +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-int-device +vcan +ves1820 +ves1x93 +vesafb +veth +vfat +vga16fb +vgastate +vgg2432a4 +vhci-hcd +via +via686a +via-agp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +vicam +video +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vivi +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_tsi148 +vme_user +v_midi +vmk80xx +vmlfb +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt6656_stage +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +w9968cf +wacom +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wavelan +wavelan_cs +wbsd +wd +wd7000 +wdt +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +winbond-cir +wire +wistron_btns +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +z85230 +zatm +zaurus +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +znet +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/i386/generic +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/i386/generic @@ -0,0 +1,10417 @@ +EXPORT_SYMBOL arch/x86/kernel/scx200 0x254e5667 scx200_gpio_base +EXPORT_SYMBOL arch/x86/kernel/scx200 0x35a3c008 scx200_gpio_configure +EXPORT_SYMBOL arch/x86/kernel/scx200 0x8cfa375c scx200_gpio_shadow +EXPORT_SYMBOL arch/x86/kernel/scx200 0x907665bd scx200_cb_base +EXPORT_SYMBOL arch/x86/kvm/kvm 0x19ce0efe kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/kvm/kvm 0xc6e7c6ea kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0x81386c8d suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x05a834a8 uPD98402_init +EXPORT_SYMBOL drivers/block/paride/paride 0x061c4533 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x43ef5d2b pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x4d7dcb18 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x61f2bbba pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x828a6122 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x9260e4e3 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xa2eea685 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xac1ef11c pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xb9c162b7 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0xc3475762 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0xd592c03f paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xf80cdffc pi_do_claimed +EXPORT_SYMBOL drivers/char/agp/agpgart 0x12e0642e agp_alloc_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1dde4020 agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x233f7dec agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0x29502e61 agp_generic_alloc_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x29d21739 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x331ff10a agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x359fe743 agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3b8b1794 agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x44f0a4cc agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4ceb48e3 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4d6905d3 agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x525b682e agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0x588a2143 agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0x58f9b193 agp_backend_release +EXPORT_SYMBOL drivers/char/agp/agpgart 0x611e5e9e agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x621a9efa agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x6f350b2a agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7820478f agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x90ecb86b agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9ab445ad agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa17d8629 agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa1c3c0a3 agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa7d64418 agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa944abae agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb5e462b6 agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbc985f70 agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5c76176 agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xcdde0198 agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde88bbd4 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xdfd78890 agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf00d98e7 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf1870593 agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf1d08adb agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/intel-agp 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x102a345d ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x10d516e7 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1b1dac40 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1e3a5873 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2b2f0fa9 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3a934060 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x55a02181 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x568d46b2 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x738b005a ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7dd1e87e ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x81a00162 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x86da3199 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x89c739a2 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8eb8f05c ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9766b758 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9c844bc8 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xac9d9488 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xaf919372 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb1f8ac76 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb7ddea9d ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbe49e832 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xca4dbde8 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf2942356 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/nsc_gpio 0x17155f37 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nsc_gpio 0x52012cdc nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0xfae0706c nsc_gpio_read +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/edac/edac_core 0x1c89ae76 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0xc8fe8f5f edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/edac/edac_core 0xcbb14b3d edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04dd92ce fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x13fbb464 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1e47c914 fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1e4b4060 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x2c906371 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x455b857c fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x47876b3f fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d5d4eca fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x51674cd4 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x594ab6f1 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x692c046b fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x6bb7c021 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x6e42e6c7 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x77ed1a62 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x79522c9d fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8a1d2065 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa7e9ecac fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb31a46b9 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcc8d3a33 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe55215ac fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0xeb9cb740 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0xec809fb4 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf29b2cfd fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xfc9601f2 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xfe0a418f fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0430fc28 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0509f340 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x059bb42f drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05b8c201 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0758ed55 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x076b04aa drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0780a719 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x09ac90da drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x09e7e66f drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0e75a41a drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ec55b47 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x12c775b5 drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1429195f drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14299c0d drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14a048cb drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x15b7889e drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x18290878 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1892b937 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a83aa11 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b3c20d1 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2009f4f8 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x215d1aea drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23aab9cd drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25be3812 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x26e73431 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2705bfc9 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x276cfa5a drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x27d68361 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2be9d611 drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x30ff4a5a drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x31b3ed31 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x320d5b12 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34b1e822 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3715dfeb drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38e543a9 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x39feff8f drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x411c8257 drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4153e361 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x424ace40 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x430aedda drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47b594d2 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47c998c6 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47e1a1f7 drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x49caa83b drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4b470d2e drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4cbe0f15 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4ec72333 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x50410abc drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x52b5e1ff drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x54ea78af drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5722d86b drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x57793da5 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x57bcf6c1 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5868866f drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5999c3a4 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5a0381b1 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5f54a25d drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60791e22 drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60d22dfc drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x617c388d drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x639c339c drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x665ff6ef drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x66787517 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x672475d5 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6855edab drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6aee853b drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d8c31bc drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f170a44 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f546720 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x75ae598b drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x75f0a9cd drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77bed803 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77e515de drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7934f404 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7ab9ee86 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x831fe164 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8e44a84f drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x91289c91 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x91faf95b drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9382def5 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x963a8de7 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x972401dc drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x986ff165 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x996fe5ae drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9a4da883 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9e51670f drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9fa6509f drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa07a5ad2 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa2e28d99 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa34c0c23 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa36ecee2 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa494e6ea drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa6cc1dc0 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa756c580 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa98ba8bb drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf55b385 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf7a4b3f drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb695960e drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7b656e1 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba625daa drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbad40126 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbbf88a2c drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbea6136b drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc64e1d2e drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6794f16 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc7fc9604 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc90c7184 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0xca8ad8ec drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcba5a579 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd006ad50 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd1b70de2 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd21314c5 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4f2dfff drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd6db8eb0 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd92bbfba drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd77197a drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe0c1b7db drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe163ea50 drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe206b96e drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6b8c96b drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe72e6436 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7311fa4 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7c35aa6 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeae8c219 drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xec7e097f drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee164669 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xefac05cb drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf0cfd6a4 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf129fb9d drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xff78aa07 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x012834c9 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x01af85cc drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x04e82442 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x13fd5465 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x14bb8d37 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1adde9b4 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3a57f631 drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x491cbc46 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4b595b24 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6a23e57e i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6bd972c1 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x77e610b2 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x83d7695d drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x852d98c8 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x867bffce drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x897d5b1c drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8f7baa44 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x94af9785 drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9df02f43 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa6905cc8 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb0bb6cab drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbdd9dbf8 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xdf415657 drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xefcba80a drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfbcc7dc4 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x07cf5553 intelfb_remove +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xa22f6950 intelfb_probe +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xaffd14f9 intelfb_resize +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x91a23eab radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xf7170ee3 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x01c99cb0 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07340ef7 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07787990 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x104300e8 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x10d0334e ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x139af7b3 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x161262d6 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17a98fa2 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1aab1a9f ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ba8c0ef ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1c91d749 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x222a0993 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x233b52c5 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x23bb7c2a ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x29d584ca ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2c0836b4 ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d673efd ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2ede83c8 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3437844d ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34704ea7 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c3c3af1 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3deb7e25 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4332fb76 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x49fd9a24 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x56c42d22 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x594f03fe ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6277c681 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66132ac6 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66666d70 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x69c7ffc8 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6c443229 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x765cbc82 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7b601505 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f8879de ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x81d5a1be ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8db796d4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9b421a35 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9ef11573 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa4b0ba5e ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa6559794 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa70d5e4b ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5cf2fe9 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb8d8d79a ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb9e927c4 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbba2ecf9 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbf69f5ca ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2058ac0 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc95fb325 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcc3037c1 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xce16142f ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd4528427 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd6cb6cc9 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe23a67cb ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf68575ba ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf6d54806 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfb9c03a5 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xbe7f48c5 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xcbc8b3c6 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x5559bf6d i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xb1f46986 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0x1edec76e i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x3d036d92 amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0860420f hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0ce53a2f hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x107a465a hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x15333257 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1afb9d87 hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1b208e14 hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2380f15a hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x26c2dcb4 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ea06b91 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3e5108a4 hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x413e3bcd hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x449c8685 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4c9f527f hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4d82d74d dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4e7f7cc8 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x501dd37c hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x544e53d5 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x58ac087a hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x59cb96d0 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f41c81f hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x61873c36 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6875e80f hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6b946942 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6f76060f hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6fc5b469 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7711c1a3 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7ca2b194 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7ee7d71d hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x81bd2547 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x877f2466 hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8d5bbeb9 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8e1e1ffd hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x94bce230 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x95e9e320 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x965a6617 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x99abca86 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9a058c09 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9aeb1219 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9c9de062 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9e8095a9 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9f8f1031 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa13537dc hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa51ad615 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa7ae8f17 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaefbd374 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb2f080ff hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb3a3b1a1 hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb97b99c0 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb9e4d9f5 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xce4d931c hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcea15a1f hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcea9ec10 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd0ad09d0 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd26990c1 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd478727b hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd564f579 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd8095194 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd9d82714 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdd3a3020 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe151a341 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe65318f5 hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xec2f54fc hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xedd1a31b hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfab27536 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfc7e4b54 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfd75f3e1 hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x2b34ff53 ohci1394_stop_context +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x402dfb5e ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x6189da6b ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x418fa879 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x6309751f rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x73a8c291 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8a721ed9 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc91bb9d3 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xe1cce89e rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x05ce056d ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x123f78b1 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1c32488d ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x313c823d cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x315e5233 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x365eacdd ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4b9b9be3 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x528d9981 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6c98c539 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x7f785841 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x8856d93f ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa6b0b606 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xac840b25 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xaca5dc13 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb7d2bf5f ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc60a45b2 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc955ddb3 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x006d3592 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00ab72fa ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x03202990 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x069d8de7 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0710d9ca ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x09cd7488 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0cbc828b ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0de458d0 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0f79c513 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1f5e7f70 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2293f2fa ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x24d9df6c ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27c77c10 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2949227c ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2e0feb30 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x32d1c9bc ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x36e753c4 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x39e44743 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3e0ad943 ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x400b1d16 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x40dab17b ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x48ecd4fa ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x51e6d6fd ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x524088bf ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x528dd816 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x57e47b39 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x63a7701c ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67c74037 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x696518e0 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6dcf69dd ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x74c8e299 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x78bb1d3e ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7a676a2b ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7f3d0c5e ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8737ffaa ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x88b434e1 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cc18263 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8fb1c0de ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x90ec6e1f ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9816d564 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x981dffd6 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9b247f32 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa35cdae0 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb602639f ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb9f3a54e ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbe318e3e ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc1cf463a ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc70d50d1 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc879ae13 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcabd7989 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcb62e8a7 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd2c473bb ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd5a8576a ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xda581f53 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdb0dba36 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xddc75fc0 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe459e9d9 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9cfffe1 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xedb9a13f ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xedf591b0 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf2796857 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf6ab792b ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf90d10be ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfb38cadd ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfb43e4ad ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfbe32ff8 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x0c709e27 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x74584649 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7abec68f ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x8137359f ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x87964424 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x91574bb6 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb706bf62 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xbe6bbdac ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xce0da080 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xed4d8331 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xf21d51cb ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xf82f375d ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x1feba011 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x26f507f0 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x43751d6d ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x59ea6388 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9c56fd34 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc0c80357 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf520d09e ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xfa2414a1 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xfb5fc850 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x0024c1e2 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x382961f8 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x39b7d57b iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x963f27b8 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x9a7eb0a3 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbd801c23 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xec29b33b iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xecfc2da8 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0c4457d1 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2c624963 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3b2ef0f8 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x562ae60c rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5fd1de18 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6ece683b rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7b1b22ab rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8c802f2b rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9f30e3b4 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xad4d4e1f rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xadcf83a1 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc00907e0 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xd7b27af5 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe4f4017c rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf08fd7c6 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf99532c1 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfa42d801 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfd8b702b rdma_notify +EXPORT_SYMBOL drivers/input/gameport/gameport 0x01f449b4 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x0f0e0e73 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x331b0970 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x3b0a8dc1 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x5bb3904f gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x6943c0bb gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x76cf9a6c gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0xa65e9fd7 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0xe3103166 __gameport_register_port +EXPORT_SYMBOL drivers/input/input-polldev 0x1c770157 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x2bd8dc9c input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x304e6364 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xda237804 input_allocate_polled_device +EXPORT_SYMBOL drivers/isdn/capi/capifs 0x2c54c957 capifs_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/capifs 0xd0bc06ce capifs_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x351b01af capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x36b68c83 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x4a6fbc65 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50ac7960 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9099b896 capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa7c4fd6c capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa897d161 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa950d167 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc10fe128 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xcd9df9c0 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd367c0aa capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe8ad9bd1 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xef862aa0 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xff1d0bac capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x22b8df15 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x36b188d8 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x46b6852f avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x4cf05c05 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x54d51868 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x5c875c34 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xacf8c6b8 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xbd4be812 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd2493e66 b1ctl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xea1b8bd2 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xeaa169e5 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xebab7fdf b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xefc2ae28 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xf780c246 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xf92bb6ca b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xfdffa0ed b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x18a567b1 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x22d1ff1a b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x233ca0dc b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x41e31561 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x46bdf405 b1dmactl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x4ec2b19c b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x60a3facb t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x6b13b32e b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x83b3e9e6 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x8c6f8c42 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0xbc2251c0 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x12fa774c mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x5fea970c mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xcb5f9fb7 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xf284aa8a mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x09cc0581 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x55773c78 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x2844a899 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xa8d17fa6 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc0c558f9 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd94696e8 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x1b1da889 isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x260163ba isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x4cc14e28 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x7e3b2046 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xe4728412 isac_init +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x35c9e274 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xa5a523cd isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xd8520676 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x01353c60 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x01eeb454 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x03c227ba get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1f4b8e61 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2e940e5c mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3e06c5ee bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4a984010 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4e1e21ea mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5ca2c2df mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5f787686 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x64c93e59 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x69c59052 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x86316858 confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9749b0bf create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa2bbaf9d mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb3d69f3f get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc6b44fba recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xce10f466 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd1d08d19 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd35286d0 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xed50b110 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xff43b46d recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xab292afb mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xec05bf72 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xf78dd292 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0x627864a5 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x525db872 mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0x2b598e4c qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x31f8771e xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0xe3b5f169 xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x138e802e flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3f7bba03 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x481c634b flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x4a203b47 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x585d2468 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x5bb9ed0e flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x696fe373 flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x792691a3 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8b61b17d flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9170e230 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9e145428 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa622e0f5 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xaecefa4a flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xaf40da4c flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xba01f6fc flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xca2dc942 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xcf159bf6 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd266e566 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe07a0c6c flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xe583ec91 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x22608937 bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x2902a368 bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x98927460 bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xf1ee886c bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x27134668 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x2ee56040 dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x4468c6fb write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x96428b9f read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xa0eea68b rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xaf8c5af5 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xc4ae92d8 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xcfc11db1 dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xf7c25c38 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0x8909402b dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x02ca80fa dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x063b4be6 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x11e12618 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x129df19d dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x12e20184 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x14eb630c dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x183b7215 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x198b41ec dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x27a14a65 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x40c48bb1 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x40dbc64e dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x466eed37 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x48fa98c9 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x54edc7db dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5b5f0278 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x67b6f91a dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f7f7d73 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f9c72e3 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8299cc38 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8a5f54fb dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8edb1bd3 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8f5a5058 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x90f85bbe dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x923aa88e dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9bf00b7b dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9e8f4921 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb2db2592 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb5b95805 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb6f98591 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xc6bea974 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xdcaab2b4 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe7949e59 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xeb7daf80 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x321eb3e8 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x49f97beb dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x4e9f6090 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x62ad06d1 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x97c74e5b dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x997c20b1 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xb39bfc5d dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x665f5bb9 af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x06dc9b03 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0ab64a67 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2058b9bd dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x32744beb dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x43310462 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x462717e0 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x77079487 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x7b71e7ba dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x90b39b0a dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xb53b4204 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xfca759ad dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0x7135885f af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0xda45e7ef au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x5f32a78a bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x866daa96 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0x018fd527 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0x74dc7859 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x55ba59ef cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xd4f8b742 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0x9c48b42f cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x06f1490a cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x85f81e73 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x10ef98df dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x81e7b622 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0xdd6bce9c dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x9fee26f6 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x066a8aee dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x263b953e dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x31d8ea6c dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa98c6bbc dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xae7e93d3 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xbca56afb dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x926f24dc dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xc4f6d495 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x0a56a238 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xa176ef98 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xbc04fc60 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xbed6aae9 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xc84c7a44 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xd7d96630 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x1b52de08 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x2eb95d04 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x4db31c97 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x89c460f9 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xadb25990 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x1fc1bdd9 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x90c8a34f dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xae4350c5 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xae82456d dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0x1fd09c59 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xc44bfa72 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x4d525611 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0xd98552ce itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0x4ec591e2 l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0x1a79a5c3 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x67d18651 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0x0b438f10 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x1b15fe7d lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x39ac72f0 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x1e1747d8 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0xc0100018 mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0x8a198185 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x5b6990a4 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0x9a502ac4 or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0xe50ecd80 or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0x49ad842f s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xc7fbd15a s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x5661e7ce s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x9b9b60f8 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0x0f53788c si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x254e12ee sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0xf3c65a92 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0xd76ef96f stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0x53e896bf stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0xd5b8cb5f stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0xaaea27b3 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x2d02d5cc stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0xcd4e90fb stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x1515109a stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0xc11ec701 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x233b0c82 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0xe9317ce8 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x5ce8e212 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xa3605ed8 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xa9dbabb8 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x7b50a2f4 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0xa9aba3a3 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8261 0x2238f1a2 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0x93f23d78 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tua6100 0x88e4b5c1 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0xb9d79ba0 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x71f85226 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x4ec75d4b zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0xe55b24f0 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0xe885630b zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xf6c34459 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x1d3b871c ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x36fc86d6 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x056a5279 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x6b081524 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xb09ab87b bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x638179b1 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc66b10c1 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0xb9962a80 cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xfd02e6fb cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x17f2f38d cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x7119d003 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0xbc9c156c vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0xd15ac5d9 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x053a660d cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x0d9ff7ec cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x1a611368 cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x3b3e5382 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x524ecdec cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xad363379 cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x08b8c2a3 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x18bec3ee cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x4333bcb2 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x47f0cc73 cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x6b6d175d cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x71b430b4 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x75b8f36d cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x19e26ad3 cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x2235fea2 cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x2464d33e cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x3eb5ea7e cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x5857b475 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7682c1db cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7927fdde cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x8184e04a cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x8781da94 cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x955ae983 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9f8b57a2 cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xad4ea26c cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb79d69f1 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc24d6085 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc9486474 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xce540839 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd4ae4ab9 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd6a8a1fe cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xdf5d72f4 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xe544e5d5 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xe68255ed cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xe984b01d cx88_reset +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xf4970b61 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xfd0fb8e9 em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x33abe0f3 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x5c3452e4 gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x62e81e9d gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x767cbdd3 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x986b6994 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xcca38b3c gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xdd363161 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0c30dadb ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x15e75491 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x1df1172e ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x22a8b427 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x3cc4a97a ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x4dc6b81e ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x72ae2ab6 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x7a8ba937 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xbd3fe848 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xc1421a03 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xc23db105 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0c815396 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0fd9ea01 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1b7f8891 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x2e91c8a3 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x410cd5ee saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x4f5c8969 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x54e81821 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x55876389 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x56cb9546 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7d0e1937 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x97a848c7 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xee30c4dc saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x4820e335 soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x86545374 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xa1b9cf1d soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xd41c62cb soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0xee14aeaf soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/tveeprom 0x3dc6492e tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0x76b39cc1 tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x16a2915c RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x3504f2e5 usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x407a321c RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x4e7e1235 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x9eab2b84 usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xb94bb96a usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xcf98c723 usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xddecac6d RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xeb7fd47d usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf5011f67 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x2da5decc v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x18064654 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x383bbda7 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x006564cd videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x5132aa52 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x72cf8166 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x80ca4b62 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xb8c836fe videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xd460b468 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x2198e037 video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0x27b31ec1 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x48854ddc video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x7648c477 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0x94732e96 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x95114e66 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xb9057d8b video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0xc242a684 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xc49b07f9 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x7e11e12e videocodec_register +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xcc8b396d videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xcebadbd3 videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xecac1f82 videocodec_attach +EXPORT_SYMBOL drivers/memstick/core/memstick 0x0ebebda3 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x334ded89 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x3ef1254e memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x40fea5a4 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x45e8648f memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5b5c17c8 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x805913cf memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x8925d443 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x8c9b5da4 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xaf7dc262 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xb1cc5438 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xb705ab51 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0xc8beef40 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xde2a48bf memstick_free_host +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x047def7e mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0c2416cc mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x209f498a mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x22290772 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x25ef3efd mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x332161aa mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3508014f mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x36e8b4fc mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3aed112b mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4dff0146 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x58ba816b mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5e32cfdb mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x63ea7d21 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6d35897c mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x82450d27 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x84a9e203 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x876a135e mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x92691727 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9af77927 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa29a5aa4 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa9f9e527 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb212b40a mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb643e49d mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb7bd39e6 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb8c6ea2a mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xbb2c1df9 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdc4ed764 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf5ed35b3 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x08013798 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x370fe183 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x384ce1a6 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3a375dc7 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4ee629a4 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x51266c47 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x527f9cec mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x56e33236 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x583e373d mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5e4faf78 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6eb2b81c mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6fa6a63b mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7be01b68 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7cf9f0de mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x803d3a96 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa82923b3 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa8a3ddbe mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xba35379a mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc0a62ea1 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc0d2cd14 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd4cbb985 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe1c726eb mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe52d1a60 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe8c1d1e3 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xeb1b1148 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfe4b2b63 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x0a55bb1d i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2ebe527b i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x30caa4a5 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x31715b46 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3c137cb3 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3efae584 i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5b792524 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x71543b9b i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x717b3e08 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x73a773cd i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x7d4b5b3e i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x7e3ef000 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9c252abe i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbe3320a8 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcae7b972 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd09cf51a i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd97ba829 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf475f78b i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x05c4f9b1 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x2122f854 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x2b0e9438 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x2c865087 ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x3c1ff105 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xa49ed32a ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xda3137c2 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xdc2aa311 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x7a5af6e0 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x9595f403 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x7d99472e mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x80914636 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0x5f85655a c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xfbf4ed62 c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x53bb83c4 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xf720c647 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x026bf296 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x17d421ca tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x4a0aacd2 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x4e4397c0 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x54d1eb87 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x5f9ab970 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x8bb9ceab tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xa08947d6 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xaef175e7 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xbc4aba30 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xbdc0630a tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xeec23b69 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xfac9875d tifm_free_device +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x9b90407b mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x5d36de0e cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x73e7cf37 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xe5197328 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x417dd822 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7a2c7d38 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7aed2d12 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7d67f82a unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x3ee347b4 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0xe8d5acac lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x69305298 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x9a6c7bad del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xebbdc6e9 add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x33a9b537 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x6fbc01c9 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/nand 0x6a6877de nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x782bddb5 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xaea16757 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xd6d0fd3a nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x661bf766 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x96be1358 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xf4c04898 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xf9b26544 flexonenand_region +EXPORT_SYMBOL drivers/net/8390 0x0f3bc3b4 ei_close +EXPORT_SYMBOL drivers/net/8390 0x4b796b39 ei_poll +EXPORT_SYMBOL drivers/net/8390 0x65f7a14f ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0x79b2eae7 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x83bc5491 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0x88ad292d ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xa34b0b32 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0xa647e1cd NS8390_init +EXPORT_SYMBOL drivers/net/8390 0xa8537029 ei_open +EXPORT_SYMBOL drivers/net/8390 0xba2a36e3 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390p 0x0ef86a65 eip_close +EXPORT_SYMBOL drivers/net/8390p 0x44c4eea5 __alloc_eip_netdev +EXPORT_SYMBOL drivers/net/8390p 0x5db4a925 eip_set_multicast_list +EXPORT_SYMBOL drivers/net/8390p 0x65a7de55 eip_tx_timeout +EXPORT_SYMBOL drivers/net/8390p 0x79af22d3 eip_poll +EXPORT_SYMBOL drivers/net/8390p 0x7c944cf8 eip_get_stats +EXPORT_SYMBOL drivers/net/8390p 0xb08ba768 eip_open +EXPORT_SYMBOL drivers/net/8390p 0xb663e226 eip_interrupt +EXPORT_SYMBOL drivers/net/8390p 0xd3d1321f eip_netdev_ops +EXPORT_SYMBOL drivers/net/8390p 0xed5fc464 NS8390p_init +EXPORT_SYMBOL drivers/net/8390p 0xeffddb79 eip_start_xmit +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x3717a742 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x398f271f arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x50c0f9f9 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6a9bdab6 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x72b30db6 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x753d4221 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x7dce76e3 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x9f60a51d arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xc46ee17a alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xfa895107 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x69b9adef com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xab0f450b com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xf703efdb com20020_netdev_ops +EXPORT_SYMBOL drivers/net/bnx2 0x42a68805 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xc8055eb0 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x0a5b69f5 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x20891b10 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x2922f52b cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x29bf6105 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x55e57ed5 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5cae6282 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6cceddd0 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x7221ec9f t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x73339afe cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xac83b531 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbd9c0a75 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xc8111c0f cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xd61c15c6 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xddd8f691 dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe7215792 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf7a40a22 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x3a64d6c8 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x3d048e12 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x47957fe2 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x63caeb11 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xf21304ea hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1943c829 sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x28768095 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x2a989bc1 sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x2eb64858 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3932f784 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x660dd3b2 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x6e7ce3d5 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xa979d109 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xab55d3f6 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xef3a9a20 sirdev_get_instance +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x2794df44 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x440197c9 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x5244349c mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x96afea3d mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x98f6e03a mii_check_link +EXPORT_SYMBOL drivers/net/mii 0xcfad5476 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0xde00956d mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0xf13d2243 mii_check_media +EXPORT_SYMBOL drivers/net/pppox 0x4c8a51c3 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xbaf44380 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0xd1513a62 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x14e42063 mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x2b756830 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x380beecd tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x62045af3 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xb39886a2 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xedc7b37d tmsdev_term +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x217e26f0 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x413816a4 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x482d54d9 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x5d6c1042 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x621ed542 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x6d8deb01 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x76eafafb hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x785890dd alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xc4181fb3 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xec542b79 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xf14aa400 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/z85230 0x076ae0cb z8530_sync_dma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x0b3e60e7 z8530_init +EXPORT_SYMBOL drivers/net/wan/z85230 0x10c78988 z8530_dead_port +EXPORT_SYMBOL drivers/net/wan/z85230 0x213abac6 z8530_interrupt +EXPORT_SYMBOL drivers/net/wan/z85230 0x25499418 z8530_sync +EXPORT_SYMBOL drivers/net/wan/z85230 0x3a5bbcef z8530_sync_txdma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x3bd98173 z8530_queue_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0x5cd24d29 z8530_hdlc_kilostream +EXPORT_SYMBOL drivers/net/wan/z85230 0x72595bb5 z8530_null_rx +EXPORT_SYMBOL drivers/net/wan/z85230 0x76a7d163 z8530_sync_txdma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x8659fa73 z8530_describe +EXPORT_SYMBOL drivers/net/wan/z85230 0x8d7fd3ec z8530_sync_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x9f6e2206 z8530_sync_dma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0xa33e8947 z8530_shutdown +EXPORT_SYMBOL drivers/net/wan/z85230 0xa860b7c1 z8530_nop +EXPORT_SYMBOL drivers/net/wan/z85230 0xc4bc4422 z8530_channel_load +EXPORT_SYMBOL drivers/net/wan/z85230 0xe3d80064 z8530_hdlc_kilostream_85230 +EXPORT_SYMBOL drivers/net/wan/z85230 0xef94e91d z8530_sync_open +EXPORT_SYMBOL drivers/net/wireless/airo 0xa69ea110 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xc73aa885 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xe8cf3140 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x21cd4f78 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x5e318b1d ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd4087dcd ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0x0fb1ae29 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x1eeb2c7f stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x21e8ecf2 atmel_open +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x06bfccc6 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3348de44 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x453f9a15 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4d9aa7d5 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6369cf18 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6656e905 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x665c79a4 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6c275098 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x750fa392 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7b8d28a6 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7d083e0d prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7f55a924 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8a7b99ac hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x99e2742b hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9ce51f43 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa334fdce hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xab43e4bf hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xac5cfe1c hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xade2511e hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xafcd2fdd hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbac3f86b hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd1cec8e3 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xdae6ee42 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe06b0a8d hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xec9fc490 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xee337837 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x193aef53 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1f5c2d4a alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x2f9b017b libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3925d658 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3c4aaf6d libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3c739490 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x504ddd35 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5f39d47e libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7fa48329 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x859dcd0a libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9242ebf9 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x92612f36 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x993e03f4 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa70bf408 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb534ff55 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc420f384 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc629da2c libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd5393953 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe44af3b5 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xecae6a3c libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfaa8dd52 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0284b97c iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x03f611b9 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x043abdd9 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05caf247 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0bd3c318 iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0d186f66 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x13bf56e1 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x17576275 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x180d758a iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1932fcd1 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1a5eac3d iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1fb74f93 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1fc1cc92 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2044de4a iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x20e005c2 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x20fb6b7f iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x21820130 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x239e7d07 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x246266f7 iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x25e76e88 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2672d8a8 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2ac092f6 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2e28f97a iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2e64b95b iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x31635c29 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x31d0da84 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x342571ef iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x359f844e iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3ae87ed6 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3dc9def5 iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4170262e iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x420be256 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x434dca92 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4371af49 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x43e99b03 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x440ea080 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x453b2a64 iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x45a91f3e iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x47b42cac iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4ae1da2a iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4e697679 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4e9b2907 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4fa18d14 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5107ce3f iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x51565db8 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x56a005d0 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57546436 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x58ca8d37 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x59022b2e iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5e5b9a62 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5edde6af iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60275e21 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x621b480b iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62727d56 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6376ab2e iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x65f90f9d iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x67e0c88c iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x688a9ca9 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6c6585a3 iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6cf9eb11 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6d015c53 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6e08f631 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x714daadb iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x722ad2bb iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x73acb213 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7437fc4f iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x74f4ff5d iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7753e70b iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x790a0456 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7c4ef9c0 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7ef3142d iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7f485494 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8011b44a iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x818fab2c iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x81f349b4 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x82da2c22 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x837d6f37 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x83902170 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x845b2d39 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x84792694 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x853d38d4 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x85e1a7db iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x87024a9d iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x89816dd7 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a4a39fc iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x91376524 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x926c009b iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93563aa9 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93fea40b iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x940de021 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x947d637f iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x96624d6e iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99d5d17a iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a60af0b iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9bdc5814 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e41dd0c iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e42619c iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e86e8e0 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9efba20a iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa36f4d5d iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa55613e9 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa6a6817d iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa9ee25e7 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaad0846e iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaea44181 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb2e60afb iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb2fb3527 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb30a2933 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb33fcd14 iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb79ee483 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbba3a304 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbc717010 iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbf3c62b1 iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc13f052f iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc39ebb49 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc3c16441 iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4d75340 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4ec1bbd iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc872d462 iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcaf2250e iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcc615610 iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd0a2cc48 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd630a182 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd6a2608c iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd90a5307 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdb5d6cfb iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdc8df1dd iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd76ebb3 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe2115cee iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe2b30c08 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe3367cb8 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe502fc3f iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7a9d3eb iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xea5c9f87 iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf231c533 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf3a97062 iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf484ea9e iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf621e94d iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb7f3797 iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfc556163 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x03feda51 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x06efade5 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x5c03c2f0 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x8dede939 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x9dac1396 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xb8cdd8c2 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc7554b22 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/parport/parport 0x0faffb2d parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x1054cc9e parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x1b484b49 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x1deda688 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x2ebe4e3e parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x2ed63860 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x303f2a16 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x35ea52a8 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x35ebd615 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x37b1099e parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x3cec357d parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x46c51df2 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x5deec9ae parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x6072c9b7 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x69e3e191 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x6b47e956 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x737859a3 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x8412806e parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x99783202 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x9b779e13 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x9db116ae parport_write +EXPORT_SYMBOL drivers/parport/parport 0xabad6a9c parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0xb0b18f5e parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0xb855723c parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xbc6ed3c7 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0xd0997e67 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0xd3e87afb parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0xe90abcc3 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xf13da68a parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0xf4348547 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport_pc 0x407c5e3b parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xd8ad1439 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1f42fd8f pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x32d5f305 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x35bb844b pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4bf54705 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x535b8664 pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5eec3d4c pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x87d27fa8 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8dd1e975 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa92e8b35 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc66ee9e4 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xca50287d pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd44ed308 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe4f49cd7 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf412275c pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xff76cc3a pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x01c43498 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x03624094 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x0664b05a pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x137448a4 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1a1edbef pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x23441c6a pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x248e1a04 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x325b4ee7 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3dc07132 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x43102e25 pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x57e44f4a pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5a864132 pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5ca82897 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f42a69d pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x639d1274 pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x67fbcabb pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6f1a43c1 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x795af748 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x86100e33 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8761b56c pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8c4331da pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9059ca05 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x95c88d85 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa1d4b7ca pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xaa6a710d pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xadcc232a pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb15012d3 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbd11c9f2 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc508f30a pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc59002a5 pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc8160565 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcbe1427c pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcdd6792f pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0xf822ab6a pccard_nonstatic_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xb563c36c pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/53c700 0x7cd12c98 NCR_700_release +EXPORT_SYMBOL drivers/scsi/53c700 0x98e390b0 NCR_700_detect +EXPORT_SYMBOL drivers/scsi/53c700 0xf13d9adc NCR_700_intr +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x48f790b9 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x6dd52473 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x74eee92a fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x89298f93 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9df166e2 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xab4d0f02 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xd018d561 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x003917cb fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0bda63ae fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1773e972 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x20fda605 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x23e5465e fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3732057e fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x379e8203 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3c14a459 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x469f9aa7 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x47625f31 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4dea8422 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x52432b9f fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x53f8a299 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x549b2476 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x59a3b933 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x608c25e7 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x60b9b3ca fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6e96758f fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7fe5bd2d fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x80d3c96c fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8af5fb7f fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x92813495 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x959cffe6 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x99424d85 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9a66ac4e fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa2cfc5da fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa4884de6 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac5a9efa fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb11278ca fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb25ec4e5 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb4f3588a __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbf7956ba fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc2b0fbb7 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc492b4e9 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd954ddf4 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe25af464 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe28e6a28 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe40bad24 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe848dd5b fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe98b976c fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeb542eba fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf1dae2e6 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x28afaa73 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0cd05947 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1a3fcd7e osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1b8714f0 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x30bf059c osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x470c7308 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4e6e0675 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4f5f8249 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5223cbf9 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x54cc0f91 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x633e4c57 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x656823aa osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6ac601dc osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7b67c2a1 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7dd2ce6a osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7eff0d12 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x991eea71 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9c24715c osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9c5f40a6 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa2e08167 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa716dead osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xac9c9356 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb5434935 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb790068f osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbfd8e40d osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc6cf3ea6 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xcaf7dab8 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd77f4052 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd9a6e973 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xda96fb12 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe7dd748a osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfa624384 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfca6a4f4 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5c67af62 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6aac9602 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xb1efce3e osduld_put_device +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3588d6f4 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x45c74e52 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5ce9d25a qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xb757c56b qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xcb8660b2 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdfd83135 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x0fe94a78 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0x9d2adfc4 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0xf35d4c92 raid_class_release +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0a53ee88 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0e75855a fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x18a7b8e3 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x4af255be fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x75d6fd55 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x94e0ebf4 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x992425a4 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x9b0103f6 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa82bedf9 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xc1714605 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xcf2f3b20 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xddafb15d scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1583c190 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1df7927c sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x26ecfe44 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3462d7c7 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3d070c5b sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x442f9fbd sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x506b8b3f sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5363d435 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5fbd9e95 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6fddd16f scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x77eeef5f sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7c2bfee8 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x80d52b8e sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x81e2c75e sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x881301fe sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8a71309b scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x923c12a3 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x94862a70 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9eb224f0 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa7afb2ef sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb71cff68 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xbd983568 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xca7a34ca sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe3737b5c sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf4df89ce sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xfba9e223 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x68039468 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x7bf09948 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xa504d37d spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xbd03fb02 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xd23ceeaf spi_attach_transport +EXPORT_SYMBOL drivers/ssb/ssb 0x01fb5d4e ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x165f88c9 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x1dff4e81 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x27bd235b ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x2c20e136 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x3868d356 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x432f6774 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x50dd6a57 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x546b3814 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0x54eb7c24 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x65336251 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x6cb27666 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x7a5f6a6e ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x905030e0 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x90653f2d ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x9d79b443 ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0xbbe7d5f9 ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xbfc81f6a ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc826c3e4 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xe5bae494 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0xe7108bd5 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xf439cce9 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x053f62bd comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x081a8a43 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2030e414 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2b6eec58 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x423f9cec comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x69e21453 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x6c393637 comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x6c910eb0 comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x70752add comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x7094600b comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa6e071f4 comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa7f05da4 comedi_set_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbafed5dc check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb8e0bba comedi_reset_async_buf +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xc10dca85 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xd7628c27 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xfbb32723 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x116fc8a3 subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x4c2f92a5 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x5632db47 subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xe32f6edc subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x3fd66426 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x582d763a cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xac240a66 cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x09b92dc2 mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x0e8de9e8 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x17ae9844 mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1a8a3f4b mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x362ad6dd mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x3686aef5 mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x51e9acd2 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x606e8c87 mite_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x679983e5 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x7b497094 mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x87d31720 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x8a3b68ff mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x97a666d0 mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xb4cc2a88 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xc338f4fa mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd1951a12 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd8ee0133 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe68642fb mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xf2f51734 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfb3ba025 mite_list_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfc0777cd mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x36a2e5f5 subdev_700_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x4824b118 subdev_700_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x85989ace subdev_700_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xdd9da185 subdev_700_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x4ddd93fc comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x042d55f4 comedi_loglevel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0488ce0e comedi_get_n_ranges +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cad1c36 comedi_get_subdevice_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x13e3042c comedi_command +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x194eb4ae comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1c5555d9 comedi_cancel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1ec0e2d3 comedi_get_buf_head_pos +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x22318694 comedi_set_user_int_count +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x262e9c18 comedi_dio_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x370d69d5 comedi_dio_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3cb614fc comedi_data_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3db41e4f comedi_poll +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3de6a4a3 comedi_get_buffer_offset +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x409d3263 comedi_do_insn +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x51da786d comedi_register_callback +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x52769094 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x628ed463 comedi_get_n_subdevices +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x671c2623 comedi_get_buffer_size +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x696272c9 comedi_unlock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x826bd656 comedi_data_read_delayed +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8e199bbf comedi_perror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8fb4413e comedi_data_read_hint +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9b266320 comedi_get_krange +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9dde39b5 comedi_strerror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa0334b40 comedi_get_driver_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa094eab0 comedi_get_board_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa7c55c52 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xaa456501 comedi_mark_buffer_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb45b8b7b comedi_mark_buffer_written +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5396dad comedi_get_maxdata +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5c3ac2a comedi_map +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc4ec62b3 comedi_get_len_chanlist +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc7d949df comedi_lock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd2a9a259 comedi_get_version_code +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd46a9468 comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd48facbb comedi_command_test +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xddd89421 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe2208940 comedi_data_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe38c6fb4 comedi_unmap +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xed5731a4 comedi_get_subdevice_flags +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xefd0c778 comedi_fileno +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf17e03df comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf71581db comedi_get_buffer_contents +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x013315b0 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x0ae6c0a0 cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x12d86938 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x14bac508 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd165b01a cx25821_dev_unregister +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd2434523 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xf452c351 cx25821_dev_get +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xfee48894 cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x1cb36e36 vmbus_child_driver_register +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x1f07d908 vmbus_child_driver_unregister +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x253f3d14 vmbus_get_interface +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xdf1a5ef6 vmbus_loglevel +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x0a7d06fb iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x11b793bc __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x161f3248 iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x1cf1273d iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x32b6ac2d iio_class +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x4d869f11 iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x51416d3e iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x60f7253a iio_free_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x664141c8 iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x695b5896 iio_allocate_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x95c594f0 iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb6edaf14 iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcb842df9 __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe9d9f03d iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xf180f302 iio_free_device +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x4a244696 variax_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x69bc4cac variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xa40767f2 pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xabf2b656 pod_remove_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0adfc4df vme_unregister_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x11664c40 vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x16a1b1c8 vme_new_dma_list +EXPORT_SYMBOL drivers/staging/vme/vme 0x1c877021 vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x251b9ed8 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x28a3f8ea vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x29b52404 vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x39d9e90d vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x3d1af350 vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x44b50154 vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x58733c76 vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x66227eae vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x7fde2edb vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x93dff61f vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x94b2590f vme_free_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x984bcf26 vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0xa81939c9 vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xb64b24b1 vme_unregister_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xd797b9a5 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe5b0f9f2 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe693a6ce vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xeb4b8942 vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xf143b080 vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xf19c060d vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xf2894bc1 vme_bus_type +EXPORT_SYMBOL drivers/telephony/ixj 0xa834fef1 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x754d3ce1 phone_register_device +EXPORT_SYMBOL drivers/telephony/phonedev 0x77913631 phone_unregister_device +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xca1c3956 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xd67316db usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xd907ea81 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0xa031394a sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x73f7d1f4 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x97af2606 usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0xbd71ddb6 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0xf6df93ca lcd_device_unregister +EXPORT_SYMBOL drivers/video/console/bitblit 0x7bd2a19b fbcon_set_bitops +EXPORT_SYMBOL drivers/video/console/font 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL drivers/video/console/font 0xbb99125c get_default_font +EXPORT_SYMBOL drivers/video/console/font 0xf7584a9c find_font +EXPORT_SYMBOL drivers/video/console/softcursor 0xddab4d48 soft_cursor +EXPORT_SYMBOL drivers/video/console/tileblit 0x1988e75e fbcon_set_tileops +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x21b7b8df cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/cyber2000fb 0x2a1d3261 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x4cd8643b cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xce896513 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/display/display 0x2e01e3c5 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0xfe40e88e display_device_unregister +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0x7f7bdf77 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xa3781414 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xb85e6f7e g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xebcfde18 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x0652c99b DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x0c9bbdd4 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xa105088a DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xfeb3e311 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x0358edf0 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0xa9a4137e matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x07f29eae matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x279a7a2c matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x4872076e matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x7bf3c73a matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x4b994938 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xcaca482c matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x0fd512ea matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x297efa2a matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x31ddaba4 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x52cd7652 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xb5fe553a matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/output 0x3f513bd4 video_output_register +EXPORT_SYMBOL drivers/video/output 0x4d3898c4 video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x0a640115 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x92db46ee svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x9b7e269a svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xa37e7130 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xe9fd4073 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xee5f8d6c svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/svgalib 0xfe0d4242 svga_tilecursor +EXPORT_SYMBOL drivers/video/syscopyarea 0x6bbe1690 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x3de3a251 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x4069cee4 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x71ed0080 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x988a849a w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x041b1f1d w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4b42af54 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x672561b1 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb8befa67 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/wire 0x168288cf w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x640e094a w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xb7b25dc3 w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0xc44523a1 w1_register_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x07058d0a config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x122b8c11 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x18276c8c configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x1ace8327 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x26d06ba0 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x426ba3fb config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x445b2b2f config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0x652fc94e configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x825887c3 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xbf7d7919 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xde330c9f config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xf3be71a3 config_group_init +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x09d3fcc6 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x0c2e3afd fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x1710caf0 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x19140e4e __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x24047795 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x3a67c390 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x3f847683 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x48da749f fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x53bbcf52 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x63f96884 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6643b224 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x80489716 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x8118b4f7 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x850ceaba __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x8c2c703a fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xa6ee5ce1 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa736a7ca fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xa75f42f4 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xab9d1a4f fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xd815a9f9 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0xdbbd2944 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xe5ab68af __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0xe9988742 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xee0621b0 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0xf122a6f0 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0xf6a0c7a9 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0xfe9ecc9a __fscache_uncache_page +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x1b255989 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x5ff341d6 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x72d246e9 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xd26b719d qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xdcabc483 qtree_write_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x3a203acc destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xe01bed90 make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x04dc698a p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x196a152d v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x198ba932 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x1ddd2cd3 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x1e9fa086 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x288e65ec p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x311a0b71 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x3455711e p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x384f6314 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x4b395c65 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x4ce124dd p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x52462938 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x67000a1a p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x6b754e6f p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x91886aec p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x963d3dac v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9ecbe538 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0xaab8671a p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0xb5d56e14 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0xb8e39195 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xcae61af3 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xd0faf92e p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0xd331fc1d p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0xe1e73b3e p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe65278fe p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0xe78cfc2b v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0xef7127b0 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0xf6c34cd5 p9_client_clunk +EXPORT_SYMBOL net/appletalk/appletalk 0x1da89029 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x1e2a68f0 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x29da9190 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x81994e17 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x04e3c38d vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x4bfe9266 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x6464b966 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x65476106 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x6d1ced27 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x796cff57 atm_charge +EXPORT_SYMBOL net/atm/atm 0x821bf8fb vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xd64302d7 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0xd69e5f81 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xdf9895f7 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xe6263659 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0xeecd3437 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/ax25/ax25 0x12acdc5a ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3a41526a ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x3d302c40 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564153c3 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x5f1a3284 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x8e3e9a59 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xc9bbdeb7 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0xcfc0e89b ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0xd1aa75cc ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x02288eed hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x07d417b2 hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0x080432d0 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x09d0b5b7 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0c8c407c hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x186226e8 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x19614693 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1a893cd2 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x211dd82e bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2b47d7e7 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3f206d93 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0x5843b19e hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6624739e hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x66c32fd0 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6f2ae8cb bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6fc7f98a hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x978e7430 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xacb1d5d6 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xae306a15 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xae58896a bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0xaebb0fc8 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb3b424eb bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc29827d4 hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2ec19d7 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc4ecbe76 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xce44104f bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd54d537e hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe287a4c9 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe4e84b75 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xec5a5983 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf00446d3 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x6b5b2f6a br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x6910bd5d ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x9eff1fa9 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xaf3588eb ebt_unregister_table +EXPORT_SYMBOL net/can/can 0x60f57576 can_rx_register +EXPORT_SYMBOL net/can/can 0x932ee782 can_send +EXPORT_SYMBOL net/can/can 0xb3a0faaf can_proto_register +EXPORT_SYMBOL net/can/can 0xee95f644 can_proto_unregister +EXPORT_SYMBOL net/can/can 0xf01dff36 can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x1b870320 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x4cefdf6d ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x64724a84 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x7167bf6a ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x7a0b5175 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x7b0971cc ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xb51fd551 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/wpan-class 0x21427a32 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0x4416f6cb wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x9d540708 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xc46790e6 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xf21c3ecf wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x04b34392 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xa04d34c8 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xb67f95f7 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x7a1b3414 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xd05b7d39 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xe1010f1f ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x4ceb87ad nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x6e5544a0 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x9eeaa411 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xba08de6b nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xd898df71 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xe89450d0 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xf6433e02 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x05c7429d xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0xc7c3bf88 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x550c06db ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x8e8d8753 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xe0072d00 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xfdbc515a ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x1e552e5f xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0x1f20bfe2 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x090f2d2a ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x4454d1fc ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x5c9aa175 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x9d070e03 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb06d512c ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb0bf7bb7 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xbd8e816a ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xc06b2466 ircomm_data_request +EXPORT_SYMBOL net/irda/irda 0x01d1fcdb hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x04792c07 proc_irda +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x06efd168 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x072e026f irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x0ef52db6 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x171371a0 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x231cb288 async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0x259219dd async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x29af1748 irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x2c7b93a2 irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x3462950f hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x3877b897 irlap_close +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x4b47a0b0 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0x572d397c irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x57ea111f irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x5df9957b irda_notify_init +EXPORT_SYMBOL net/irda/irda 0x6758f8ac irias_new_object +EXPORT_SYMBOL net/irda/irda 0x68b7447c hashbin_find +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x747d6779 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x75027757 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x75be2814 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x7621e908 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x76243bc9 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x781e2db5 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7a57b6f3 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x8186261a irlap_open +EXPORT_SYMBOL net/irda/irda 0x8a804a7c irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x90824fba irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9c6e1a94 iriap_open +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbd1939ea irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc14e9b6a hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xc49ab0b9 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0xc5f50bfe irttp_dup +EXPORT_SYMBOL net/irda/irda 0xcd41236c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xd245209c irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0xd410da34 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0xd7172ff4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xd8bfb6d4 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xda69df56 iriap_close +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xde91f5b8 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0xe5260e0e irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xec41fe7f irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf39b7fe0 irda_setup_dma +EXPORT_SYMBOL net/lapb/lapb 0x186cdb50 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x26ac1240 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x3b58fc76 lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0x4d017d63 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x4ff8ee35 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x9c07699b lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0xab867c7e lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0xe645ddd5 lapb_data_received +EXPORT_SYMBOL net/mac80211/mac80211 0x05919746 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x06ba2b98 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x0c4fd3df ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x0c5d4759 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x11cc456e ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x12e380b9 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x1c0b9b40 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x21b23e96 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x21b7ffec ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x32c7e817 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x3611911f ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x375a7033 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x4330f423 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x4965163a rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x4c47b3b2 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x52e36b35 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x54dd5f9c ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x583a12bc ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x6d031ba1 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x6f9a2607 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x83fed516 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x87222827 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x88c2dd85 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x8b412af0 ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x8f4b652e ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x90f93e6d ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x93ce04e6 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x9ce3124a ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0xafb9103a ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xb8a97085 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0xbbdfeff1 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xbf7925d8 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0xc1bdbd39 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xc360928f ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc5a64d2e ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xc81791a1 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xdb842074 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xed149f9c ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xf765764b ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xfb3553a5 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x47917d00 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4ea3a9f3 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4f6f9e1f ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x5d62caf3 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x5db81b4c unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x65179242 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x74253d5a register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa3fb7372 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xcd33d97e register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd62f12fd register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe362183e unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x48543bf9 __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x8a4b5bd3 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x8af8a982 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x322823ba xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x39bd7620 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x443ff73c xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x62b9ea29 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x75833f1a xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xba5954f0 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcaa787e3 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0xcc69779e xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xd3a3c5d7 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xed80aa11 xt_unregister_match +EXPORT_SYMBOL net/phonet/phonet 0x37659313 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0x6e3c0e02 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x76a8aa4b pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x7f2727af phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xa059c86d pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xb5f6beff phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xec084300 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0xf8172dbe phonet_proto_register +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0f43a2da rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x235c28d7 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x39d9840c rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4c176db7 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x5a9d25b9 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6de5b046 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x74d2b415 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7815d62f rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x84eb5d23 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x99005254 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc5fb59ac rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xdc627f61 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe39f7b00 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf29570ad rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfdc90be2 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/sunrpc/sunrpc 0xfe84b110 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x27d8bb58 tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x2a80a2dc tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x34ee1692 tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4a56adda tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4ba3cfc8 tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x56e52bc1 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x64357d3c tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x8001e3d7 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x8dc1b470 tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x9ac04849 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0x9f0711da tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xa3b497cc tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0xa672b4d6 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0xa936a24b tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb01ffc2c tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xb6cf5b99 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xbb2b2504 tipc_send +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xd6896261 tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xee5dae31 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0xf7d24ad9 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x987652a9 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xdd95b4f9 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x01374e24 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x0520266e cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x08e51070 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x13fd2a9e cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x1de185d6 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x20bc38d3 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x21c8e647 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x26b95dfc cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x283441ce cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x3d01c3fb cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x4d661983 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x5077b88f cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x5dd10090 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x623766cb wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x85841307 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x8a1b1cd4 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x90eb5e02 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x921ef9ba cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x94eeb6d2 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x953e9498 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x9903b3b8 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x9ff6e2e4 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xaa796fc9 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xae50302a freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0xb093b326 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0xc2cd6cf0 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc837f6cb __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0xc931a03d ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0xc9aac96a cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xdf5eabeb ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xe5939d03 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xe731c0d8 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xea089747 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xea5e941f cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xefeb39e7 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xf1c4394a wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0xf85cef54 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xffdf1096 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/lib80211 0x0297697a lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x1b52ae1c lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x29032852 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0xb41b6f19 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xbb86eb8e lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xbc6ad4ff lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xecbaa1e6 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xf1c559a6 lib80211_register_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x0ed108f5 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x190feefa snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x12ce511d snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x20d75d40 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x758969ce snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe4d0cb71 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x60a706de snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x91bf4793 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x17c15809 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x4ad3f518 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x62384d3a snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8a348811 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9df7af8b snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc482499d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd9072e1a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe6df29c7 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x3d7d2ecc snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x0f9523fc snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x0fb32eca snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x12b1b177 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x22876951 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x26cef7fa snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x37bce9a4 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x452fcfd4 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x4a02709f snd_component_add +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4baba258 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x5ba06f24 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x6069623f snd_device_free +EXPORT_SYMBOL sound/core/snd 0x645f1e6a snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x65153275 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x6646bff1 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x6c53993a snd_device_register +EXPORT_SYMBOL sound/core/snd 0x6ee5f15e snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x773770a5 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x7bb25aed snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x7f0b33fe snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x86f6f091 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x8ac1260b snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x8f7d18d9 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x922a4817 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x9b34ae22 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x9dd61ceb _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa139ac2d snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xa900228c snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xac22d427 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xad9ba9aa snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xaf58c206 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0xb169a651 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbcd37541 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0xc3be57df snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xc6825cba snd_cards +EXPORT_SYMBOL sound/core/snd 0xc783fde8 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0xc8144a7f snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xced1489a snd_card_create +EXPORT_SYMBOL sound/core/snd 0xd1157735 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0xd7dfe9a8 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0xda626a6c snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe252b018 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0xe5ef7475 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xec0709d6 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0xecb1d341 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0xf3156090 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xff5513f3 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd-hwdep 0x1b3213d5 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x30f5f1e7 snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x489cddf3 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x6ff6de86 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8aeef6fe snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8c621967 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00808255 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0cd984ac snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x0e3c13f1 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x139842ac snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x16e2c947 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x1c1b929b snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x2435fe5c snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x256d5ada snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x3742577d snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3afacfdd snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x3c66e5ac snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x4fe3672a snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x685ade51 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6c11218c snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x6ca987e4 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x753d3951 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x799c6f84 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x81e1b441 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x832cc14b snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x880e2def snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x88cc66cc snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x8ffbf049 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x91d71f40 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x9b251e89 snd_pcm_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-pcm 0xa02f9d3e snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa6bcf800 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0xa74349aa snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0xa856d0f8 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0xa8f3e932 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0xb6227a9c snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xb8aeb840 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xb9319847 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbd34124f snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xc102e4d8 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0xc67dd524 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0xcc1acc51 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xdca5d714 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xf137ae9f snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xfd78a060 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0xfd7f4c05 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0cd9e107 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x104e2e8f snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2ab621c8 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x42d36e28 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4a5ce67e snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x520b46a9 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5527ce97 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x584d2fdf snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7c0c14b5 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x955fd25d snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xac1e9942 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb33428f2 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbcd80147 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbcf2b424 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xc49b051d snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd82e0176 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdb234843 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-timer 0x1d75a12c snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x2bc1e364 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x3ee41156 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x57be4820 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x5c55046e snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x617766df snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x8737c5e8 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x9b5134c4 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0xb3485d2b snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0xc743b8ec snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xd27559a1 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0xec55cfb4 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xf3a2b302 snd_timer_start +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xff55854a snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x082a06c0 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x444cdd99 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x5184f14f snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x55c149d5 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa44f0fe0 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb377c628 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd9f1849a snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xdf607250 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf989a553 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x2802aa7e snd_opl4_write +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x6f1c1d49 snd_opl4_read +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xb1289114 snd_opl4_read_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xb21fc4e3 snd_opl4_write_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xb616f687 snd_opl4_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x11c6d504 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x361b21c1 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x582df48d snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x64f6bc5c snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x6ecccfac snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x87513ab0 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xd1fba4e9 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xd79388d9 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xfe6ecf39 snd_vx_load_boot_image +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x128b9a96 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x5105ff53 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x804f49a5 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x85a8e742 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x9ec5c2db snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xaf90c084 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x5bafdf81 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x6497e346 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xd01f1e35 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xf63d2650 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xf702e964 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xfe242698 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x2394f764 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x8d2b1369 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xaed48c9e snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xe7934d4a snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x39f104d9 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xc98b5259 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x3e27c0d1 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x98aee797 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x256664f2 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x34ddd49c snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x92fa092e snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xf0dd0c67 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xfe8d8463 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-i2c 0x32f9fa3b snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x9441cad7 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xa9dbeccf snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xab0a6026 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xb77df78d snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xbd80a314 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x85cc3508 snd_tea6330t_update_mixer +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0xf03176b8 snd_tea6330t_detect +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x0211311b snd_es1688_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x29aeb8c3 snd_es1688_pcm +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x36fa328b snd_es1688_mixer_write +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xa75bf971 snd_es1688_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x0ae6d1c7 snd_gf1_translate_freq +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x10385798 snd_gus_use_inc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x10dc1f4b snd_gf1_i_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x10efef74 snd_gf1_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x1c547536 snd_gf1_write_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x22ca0149 snd_gf1_mem_lock +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x2a16a27b snd_gf1_free_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x37c510d9 snd_gf1_mem_free +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x46db8d67 snd_gf1_lvol_to_gvol_raw +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x49825a7a snd_gf1_write16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x4faf6e96 snd_gf1_i_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x5172bef7 snd_gf1_ctrl_stop +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x5fde4f0d snd_gf1_peek +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x64c50124 snd_gf1_pcm_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x67537b86 snd_gf1_rawmidi_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x76fccb39 snd_gf1_mem_alloc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x771d5446 snd_gf1_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x774d249e snd_gf1_mem_xfree +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x79d0eb6e snd_gf1_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x896ce4c5 snd_gus_interrupt +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x9eb21adc snd_gf1_poke +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xa2b2bf55 snd_gf1_alloc_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xbe25ca02 snd_gus_use_dec +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xbe42ea75 snd_gus_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc3367551 snd_gf1_new_mixer +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc43a5527 snd_gf1_atten_table +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc628fe3e snd_gf1_dram_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xcfd42b6b snd_gf1_i_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe753e3ac snd_gus_dram_read +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe916d4a9 snd_gus_dram_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xeb3c6bad snd_gf1_stop_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xf4acfdf2 snd_gus_initialize +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xf9410b8c snd_gf1_delay +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x08860b2b snd_msnd_DAPQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x0b4d8e90 snd_msnd_upload_host +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x0e096be3 snd_msnd_init_queue +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x2e012e01 snd_msndmix_force_recsrc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x32022d37 snd_msndmix_new +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x44f1aeff snd_msnd_DARQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x6f28d881 snd_msnd_disable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x75026b24 snd_msndmidi_input_read +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x9d6eb79e snd_msnd_pcm +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb3873eb9 snd_msnd_enable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb43a149d snd_msnd_send_dsp_cmd +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xc0268c69 snd_msnd_dsp_halt +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xdf56b635 snd_msndmix_setup +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xf29eb4a0 snd_msnd_send_word +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x0fc96f55 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x15f12616 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x17036885 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x1f14d806 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x6296d5f2 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x7525ea0a snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x87df6a2d snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x886ce94d snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x8f4f4a5b snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xf0fccd20 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb16-csp 0x359f86f9 snd_sb_csp_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x0311bd26 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x213a0370 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xd3cab8aa snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x510ffb2c snd_sb8dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x6799ae29 snd_sb8dsp_midi_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0xb5438464 snd_sb8dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0xb9396a19 snd_sb8dsp_midi +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x30a6fc88 snd_emu8000_peek_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x378fe607 snd_emu8000_update_reverb_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x3872ea93 snd_emu8000_load_reverb_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x5612fe15 snd_emu8000_poke_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x7c1e9037 snd_emu8000_update_equalizer +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x93af9835 snd_emu8000_update_chorus_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xaeda2252 snd_emu8000_poke +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xaeebab22 snd_emu8000_dma_chan +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xe132ad7c snd_emu8000_init_fm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xe5e24df0 snd_emu8000_peek +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xeb80267e snd_emu8000_load_chorus_fx +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x05aacc34 snd_wss_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x0a726619 snd_wss_get_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x18560ec3 snd_wss_free +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x29591deb snd_wss_timer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x35a4158a snd_wss_mixer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x3aaad5f1 snd_wss_get_pcm_ops +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x4dc15bee snd_wss_create +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x5365ad5b snd_wss_mce_up +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x5697d97f snd_wss_overrange +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x67c3f29b snd_wss_put_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x6baee2ea snd_cs4236_ext_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x7041143c snd_wss_info_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x84d1698f snd_wss_chip_id +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x89690eff snd_wss_put_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x9f7412bb snd_wss_pcm +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xa2da5400 snd_cs4236_ext_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xa5b495cb snd_wss_mce_down +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xa7ed29ff snd_wss_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xd4dc5c3e snd_wss_info_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xe4d89a7d snd_wss_get_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xee5023e5 snd_wss_interrupt +EXPORT_SYMBOL sound/oss/ad1848 0x2b5d9dae ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x6bb25c99 ad1848_init +EXPORT_SYMBOL sound/oss/ad1848 0x942f2094 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xa3e16c6b probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x61641749 probe_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0xace7b46d attach_mpu401 +EXPORT_SYMBOL sound/oss/msnd 0x1186f48f msnd_fifo_read +EXPORT_SYMBOL sound/oss/msnd 0x234f64e0 msnd_register +EXPORT_SYMBOL sound/oss/msnd 0x340a3ddf msnd_init_queue +EXPORT_SYMBOL sound/oss/msnd 0x54230dc1 msnd_fifo_write +EXPORT_SYMBOL sound/oss/msnd 0x5fb94ecb msnd_unregister +EXPORT_SYMBOL sound/oss/msnd 0x6587640b msnd_disable_irq +EXPORT_SYMBOL sound/oss/msnd 0x6601493b msnd_fifo_make_empty +EXPORT_SYMBOL sound/oss/msnd 0x8e3c524b msnd_send_dsp_cmd +EXPORT_SYMBOL sound/oss/msnd 0x9274d677 msnd_fifo_free +EXPORT_SYMBOL sound/oss/msnd 0x95d37486 msnd_upload_host +EXPORT_SYMBOL sound/oss/msnd 0xa1bcc420 msnd_send_word +EXPORT_SYMBOL sound/oss/msnd 0xade99e25 msnd_fifo_alloc +EXPORT_SYMBOL sound/oss/msnd 0xb3520772 msnd_fifo_init +EXPORT_SYMBOL sound/oss/msnd 0xdf0f59eb msnd_fifo_write_io +EXPORT_SYMBOL sound/oss/msnd 0xefdd1843 msnd_enable_irq +EXPORT_SYMBOL sound/oss/msnd 0xf4c4f662 msnd_fifo_read_io +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x59420c71 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8059147 sb_dsp_init +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x28c8431f mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x371aef68 sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4fe44757 midi_devs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x83bf44d8 synth_devs +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa08c1e94 sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xe5bf44ab sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf5d70f2a audio_devs +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x24ae9edc probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0e25f70e snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x321311cc snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x34b8e112 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x3e2a1a38 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4d929819 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7ad4f240 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xad263d5d snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb226e0f7 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb2e37b3e snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xbe586469 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc1ca170f snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd02e7070 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd0fdd9b5 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xee007932 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf229d6dc snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf3d028ad snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xfcbc925c snd_ac97_suspend +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x001fb997 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x61e1b928 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x62e369b1 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x7a6a671e snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x92d89301 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xa19569e7 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xa3429cb1 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xed407813 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xf6ac3373 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x78a3fba4 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x50672634 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x96021454 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xcc374edf snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x32e432b9 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x3590b9ea oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x3abe3496 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x44f7fb08 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x5090f0f1 oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x76b504e3 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9821fb1c oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x988b0961 oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa604b189 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa9f67eba oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xab2d9c15 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb82ee95a oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb9f8a9c3 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xce9dd7d4 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xcf17bb98 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xd0e09dbd oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xde9b9023 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xebf30d64 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf06d2159 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xfd1a8c4e oxygen_reset_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x37975aac snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x42173be8 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x65eef8ae snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x7006a72d snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x8f58cc99 snd_trident_free_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0xef93bdf6 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x413c83e2 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x6bf128e0 sound_class +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x7e25bb30 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xb48eded5 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0xbcbd9675 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0xfdfb133b register_sound_dsp +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x0257414a snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x0b120c86 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x5b98fc24 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x64ddb507 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x6f2383c6 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xa8b69ad0 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/snd-util-mem 0x1a1e7764 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x1c9a299f __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x35ebe7ed snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0xa1e33bdd snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xc6ca6254 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xeb452cb7 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xf8ee6de2 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xf8f9ef1e snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x0f17b910 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x40dc6c7e dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x474bf17c dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x7774ee8e dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x9c85c9ff dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xb84d9ca9 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xd76fe9b7 dm_mem_cache_free +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x05736148 lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x3a64a37a lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0008ccac arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x001188ed __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00546468 put_io_context +EXPORT_SYMBOL vmlinux 0x005e3975 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x008d907d blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x009d258f _write_lock +EXPORT_SYMBOL vmlinux 0x00a33e46 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00d13044 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x00e85992 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x010178b2 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x01471ea2 kset_unregister +EXPORT_SYMBOL vmlinux 0x0186d073 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01a7bdb0 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x01a92588 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x01a9703a netif_rx_ni +EXPORT_SYMBOL vmlinux 0x01b5b622 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x01c19697 mca_device_status +EXPORT_SYMBOL vmlinux 0x01c7a779 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x01ccfb1c invalidate_inodes +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01d1b6b1 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x01d914bb tcf_register_action +EXPORT_SYMBOL vmlinux 0x01e4c72b default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x021d4acb __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x02216e6e neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x022ac5f5 drop_super +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x02434fff pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x0246c334 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x0256389f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0265501f bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x02717c05 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02aeeda1 mutex_unlock +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x0300f607 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x03091f72 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x0331b826 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x037bb908 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x03a5e2ed dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03e1dfe1 del_gendisk +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x0405c0c5 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x0420011b mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x045cc16c jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04a04a91 mpage_writepage +EXPORT_SYMBOL vmlinux 0x04b2329e force_sig +EXPORT_SYMBOL vmlinux 0x04be942b lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0x04d0a019 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x04e62f6d scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x05208db2 tty_name +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x05260267 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x0542df10 blk_free_tags +EXPORT_SYMBOL vmlinux 0x054487b4 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x057ddb0a inet6_release +EXPORT_SYMBOL vmlinux 0x059080e1 bd_set_size +EXPORT_SYMBOL vmlinux 0x059411a9 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x059b6a18 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x05a41a90 pci_choose_state +EXPORT_SYMBOL vmlinux 0x05b1ee52 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x05c0ef2a jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x05c36efd phy_disconnect +EXPORT_SYMBOL vmlinux 0x05dc206b serio_rescan +EXPORT_SYMBOL vmlinux 0x05f698f2 pci_release_regions +EXPORT_SYMBOL vmlinux 0x05fa1c62 log_start_commit +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x0621bd4b i2c_release_client +EXPORT_SYMBOL vmlinux 0x062ca713 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x0634cb67 have_submounts +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x069bd0bf eth_header +EXPORT_SYMBOL vmlinux 0x069e48fe neigh_seq_start +EXPORT_SYMBOL vmlinux 0x06c00d61 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x06cbbf7a __scm_destroy +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06d7f8bf dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x06d9d966 d_path +EXPORT_SYMBOL vmlinux 0x06e51dbd inode_set_bytes +EXPORT_SYMBOL vmlinux 0x06f71946 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x07091f12 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x0713e9ae __sk_dst_check +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x072d7bd7 generic_writepages +EXPORT_SYMBOL vmlinux 0x073c5b07 send_sig +EXPORT_SYMBOL vmlinux 0x073dfa12 generate_resume_trace +EXPORT_SYMBOL vmlinux 0x07402789 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x07608604 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x0763d12d blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x0767ed02 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x07692e69 init_task +EXPORT_SYMBOL vmlinux 0x0787d4d1 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07ade0ee blk_run_queue +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d50a24 csum_partial +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07f9f659 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x07fc5c03 keyring_clear +EXPORT_SYMBOL vmlinux 0x080fde26 bd_release +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x0881acf6 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x08887b42 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x08a8bf91 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x08a8f9d2 unregister_key_type +EXPORT_SYMBOL vmlinux 0x08b93bed acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0x08c30cbb bio_free +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08fa8b8c vfs_read +EXPORT_SYMBOL vmlinux 0x09144253 sysctl_string +EXPORT_SYMBOL vmlinux 0x09152ff8 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x0933aae1 efi_enabled +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x094ae87a input_flush_device +EXPORT_SYMBOL vmlinux 0x0955e935 tcp_poll +EXPORT_SYMBOL vmlinux 0x098429c1 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x098a96fb tcp_close +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09a72fb3 con_is_bound +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09ecf494 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0x0a07edb5 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x0a1e87f9 atomic64_add_negative +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a2e39e5 __bread +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a37e261 tty_devnum +EXPORT_SYMBOL vmlinux 0x0a4747ff allocate_resource +EXPORT_SYMBOL vmlinux 0x0a6a3790 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0add489c fb_validate_mode +EXPORT_SYMBOL vmlinux 0x0adfbbbb xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x0af42a4c may_umount +EXPORT_SYMBOL vmlinux 0x0b0c2dd5 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b2b682b blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x0b340e27 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x0b3a2daf tty_register_driver +EXPORT_SYMBOL vmlinux 0x0b413f0f mutex_lock +EXPORT_SYMBOL vmlinux 0x0b5e50e2 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x0b721581 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b8bbef5 sk_free +EXPORT_SYMBOL vmlinux 0x0ba13492 cdev_del +EXPORT_SYMBOL vmlinux 0x0ba17c14 noop_qdisc +EXPORT_SYMBOL vmlinux 0x0ba4c70f register_netdevice +EXPORT_SYMBOL vmlinux 0x0bb1a487 iget_locked +EXPORT_SYMBOL vmlinux 0x0bc1432b ppp_unit_number +EXPORT_SYMBOL vmlinux 0x0bd7b083 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x0bd85f7f skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x0bdbd69e set_pages_wb +EXPORT_SYMBOL vmlinux 0x0c183c70 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x0c4bbf85 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x0c562805 generic_unplug_device +EXPORT_SYMBOL vmlinux 0x0c631205 arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c9482ee dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x0cadf944 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cbebb5e pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x0cd73d19 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x0d0bc137 security_path_rename +EXPORT_SYMBOL vmlinux 0x0d10139f pagevec_lookup +EXPORT_SYMBOL vmlinux 0x0d1d815a xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x0d26a76d _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0d2bdfdd journal_stop +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d4b77b7 gen_pool_add +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d6c963c copy_from_user +EXPORT_SYMBOL vmlinux 0x0d6f1827 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x0d70e0b3 stop_tty +EXPORT_SYMBOL vmlinux 0x0d856dd9 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0da5f736 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x0de0b556 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x0de1e0fb md_done_sync +EXPORT_SYMBOL vmlinux 0x0debedcc skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x0e12ce20 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x0e2cde27 proc_dostring +EXPORT_SYMBOL vmlinux 0x0e415242 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x0e44b792 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x0e48ff31 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x0e49174b inet_del_protocol +EXPORT_SYMBOL vmlinux 0x0e50938e nf_register_hook +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e6fe6d0 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x0e83fea1 del_timer_sync +EXPORT_SYMBOL vmlinux 0x0e8eb897 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x0ebc9885 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x0ec3f1e8 new_inode +EXPORT_SYMBOL vmlinux 0x0ec70023 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x0f0c8a47 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x0f18124b register_console +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f2a9112 framebuffer_release +EXPORT_SYMBOL vmlinux 0x0f31f5b9 audit_log_start +EXPORT_SYMBOL vmlinux 0x0f3d687b bio_sector_offset +EXPORT_SYMBOL vmlinux 0x0f71aab8 open_by_devnum +EXPORT_SYMBOL vmlinux 0x0f7cab6c __scm_send +EXPORT_SYMBOL vmlinux 0x0fa3b23e jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x0fac84a6 inet_addr_type +EXPORT_SYMBOL vmlinux 0x0fc168c9 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fef0a50 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x101362b6 cdrom_release +EXPORT_SYMBOL vmlinux 0x1033796c alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x107a0b48 make_bad_inode +EXPORT_SYMBOL vmlinux 0x107f3acb revalidate_disk +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x109d588e ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x10ae6df3 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f39315 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x10ff42a4 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x114c4c5e inet_getname +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x118ae98e acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a18b14 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x11d916fb pci_restore_state +EXPORT_SYMBOL vmlinux 0x11dc608a sock_wmalloc +EXPORT_SYMBOL vmlinux 0x11f961cc unregister_cdrom +EXPORT_SYMBOL vmlinux 0x11fbe869 pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x1200a1c9 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x120507ac idr_get_new +EXPORT_SYMBOL vmlinux 0x122a6ae9 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x126ff2a9 acpi_bus_start +EXPORT_SYMBOL vmlinux 0x12720a89 d_alloc +EXPORT_SYMBOL vmlinux 0x129b5b6d sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x12ac4e12 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x12c2aa2c mdiobus_free +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12df279a simple_write_begin +EXPORT_SYMBOL vmlinux 0x12e93443 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x12f10736 udplite_table +EXPORT_SYMBOL vmlinux 0x12f2736c fifo_set_limit +EXPORT_SYMBOL vmlinux 0x133027f7 ps2_command +EXPORT_SYMBOL vmlinux 0x1378e714 acpi_video_display_switch_support +EXPORT_SYMBOL vmlinux 0x138fbbbb insert_inode_locked +EXPORT_SYMBOL vmlinux 0x13a166a2 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x13b76d4e security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x13be3c94 read_cache_page_async +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x1401441d tcp_shutdown +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x145049a7 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x14559945 register_exec_domain +EXPORT_SYMBOL vmlinux 0x1465bb15 ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x14778cad proc_dointvec +EXPORT_SYMBOL vmlinux 0x14a04e10 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x14a7a66e tty_port_close_end +EXPORT_SYMBOL vmlinux 0x14af0cf7 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x14b223b2 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x14dd0281 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x15055186 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x1522980f scm_fp_dup +EXPORT_SYMBOL vmlinux 0x15307093 filp_open +EXPORT_SYMBOL vmlinux 0x15435b5c set_page_dirty +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x157bd31d tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x159d90bd mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x15d64ad0 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x15d8e2c4 cdev_index +EXPORT_SYMBOL vmlinux 0x15ed5816 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x15ef2dd9 kfifo_free +EXPORT_SYMBOL vmlinux 0x15efa684 mapping_tagged +EXPORT_SYMBOL vmlinux 0x1603a3d1 inet_select_addr +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x1613b63d loop_register_transfer +EXPORT_SYMBOL vmlinux 0x16186c73 inet_release +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x167f6d20 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x1699e0ea sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x16b64e3a bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x16c4a6d2 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x16c8c9b7 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x16ce3daa __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x173c0e59 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x1748ff8f pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x175b17f5 llc_sap_find +EXPORT_SYMBOL vmlinux 0x1780bcab seq_puts +EXPORT_SYMBOL vmlinux 0x17866739 set_disk_ro +EXPORT_SYMBOL vmlinux 0x17bd72e4 input_filter_device +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x180c1dfe tty_hangup +EXPORT_SYMBOL vmlinux 0x181076ed uart_get_divisor +EXPORT_SYMBOL vmlinux 0x18141643 i2c_use_client +EXPORT_SYMBOL vmlinux 0x181b6ff2 mempool_resize +EXPORT_SYMBOL vmlinux 0x1828341c inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x183c8db0 key_negate_and_link +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x1845e7c5 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x184d0258 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x185c4e1c pnp_register_driver +EXPORT_SYMBOL vmlinux 0x18663daa acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x187fea42 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x18c55c40 commit_creds +EXPORT_SYMBOL vmlinux 0x18fe30d2 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0x19217df0 read_cache_pages +EXPORT_SYMBOL vmlinux 0x1967b508 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1985ed3c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x19903e0c dquot_destroy +EXPORT_SYMBOL vmlinux 0x199228a9 skb_append +EXPORT_SYMBOL vmlinux 0x199c5952 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19a4995f blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x19c36dba page_address +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x19e2d0f5 kmap_atomic_to_page +EXPORT_SYMBOL vmlinux 0x1a161f4a rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x1a2834a8 arp_create +EXPORT_SYMBOL vmlinux 0x1a2b335c dquot_release +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a564650 dm_put_device +EXPORT_SYMBOL vmlinux 0x1a6bf58b ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x1a75caa3 _read_lock +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1a9799a0 do_truncate +EXPORT_SYMBOL vmlinux 0x1acab1cb security_inode_permission +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0fc19b inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x1b18dac9 inet_frags_init +EXPORT_SYMBOL vmlinux 0x1b1bdebb fddi_type_trans +EXPORT_SYMBOL vmlinux 0x1b1fc4ae devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x1b2b6c0e fb_find_mode +EXPORT_SYMBOL vmlinux 0x1b489138 journal_forget +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b6d0662 vc_resize +EXPORT_SYMBOL vmlinux 0x1b76e9a2 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x1b89419f add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b8cb7d1 acpi_bus_add +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bc2af34 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x1bcc3bd9 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x1bdbd91b dcache_dir_open +EXPORT_SYMBOL vmlinux 0x1bdc4bad slow_work_register_user +EXPORT_SYMBOL vmlinux 0x1bdf4684 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0x1c123b63 blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x1c15b7f1 generic_show_options +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c8fa705 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x1cabaa03 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x1cc0f129 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce7ec4c rwsem_wake +EXPORT_SYMBOL vmlinux 0x1cefe352 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1d00e985 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x1d0f5561 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x1d2a85ec register_cdrom +EXPORT_SYMBOL vmlinux 0x1d2bad01 blk_register_region +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d7812c5 sock_create_lite +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dcffa4f inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1e09c921 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x1e3ddaa7 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x1e498e92 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x1e4df851 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x1e5caf56 kick_iocb +EXPORT_SYMBOL vmlinux 0x1e69320a vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e99e381 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x1ecb9943 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x1ef6ff28 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f1c949d kill_litter_super +EXPORT_SYMBOL vmlinux 0x1f2cad42 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x1f305993 kobject_set_name +EXPORT_SYMBOL vmlinux 0x1f3c43f4 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x1f4784f9 request_key +EXPORT_SYMBOL vmlinux 0x1f4f6176 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x1f6314cd blk_peek_request +EXPORT_SYMBOL vmlinux 0x1f69573a kset_register +EXPORT_SYMBOL vmlinux 0x1f6b40bf sync_blockdev +EXPORT_SYMBOL vmlinux 0x1f891da7 mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x1faa8d81 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x1fdf4483 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x1feb6553 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x1ff69dd8 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x20016c20 dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x201bfcbd locks_remove_posix +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x2042f25c serio_interrupt +EXPORT_SYMBOL vmlinux 0x2047df68 get_empty_filp +EXPORT_SYMBOL vmlinux 0x20623cac kmalloc_caches +EXPORT_SYMBOL vmlinux 0x206912bd md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x20750ce9 unregister_nls +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x2091cb14 read_cache_page +EXPORT_SYMBOL vmlinux 0x2096dc12 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x20b5f49a find_get_page +EXPORT_SYMBOL vmlinux 0x20c7eb34 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x20e7a1b4 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x20ec56b6 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x211d751c generic_readlink +EXPORT_SYMBOL vmlinux 0x214357d1 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x2159bcfd bio_endio +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x215ee221 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x2162099a inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x21829c50 deny_write_access +EXPORT_SYMBOL vmlinux 0x219fd543 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x21b0c2ea inode_change_ok +EXPORT_SYMBOL vmlinux 0x21c2368d tcp_sendpage +EXPORT_SYMBOL vmlinux 0x21c6c724 find_inode_number +EXPORT_SYMBOL vmlinux 0x21ce3c77 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x21d48048 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x21d50a51 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x21d88b18 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x21dc2991 generic_listxattr +EXPORT_SYMBOL vmlinux 0x21dcfa03 mmc_host_enable +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21e2bd7c sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x2217e768 seq_open +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x226841a0 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x2291a925 register_key_type +EXPORT_SYMBOL vmlinux 0x22a5b6cd phy_device_register +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x238cc637 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23e9773a deactivate_super +EXPORT_SYMBOL vmlinux 0x23ea5e67 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x240adc24 bdi_unregister +EXPORT_SYMBOL vmlinux 0x240ee02c mca_device_read_pos +EXPORT_SYMBOL vmlinux 0x24113757 elv_rb_add +EXPORT_SYMBOL vmlinux 0x24128339 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x242064e0 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x243ffddc idr_destroy +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2458f166 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x246866db get_write_access +EXPORT_SYMBOL vmlinux 0x24708928 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x24731f09 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x2490367e block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x24c35568 dqput +EXPORT_SYMBOL vmlinux 0x24c539e4 get_phy_device +EXPORT_SYMBOL vmlinux 0x24e4bb01 down_write_trylock +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x257472a8 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x25769dcd unregister_con_driver +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x2584a86d ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x2597f10a pnp_possible_config +EXPORT_SYMBOL vmlinux 0x25a2b91b blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x25a76e31 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x25b05807 input_grab_device +EXPORT_SYMBOL vmlinux 0x25d3e2a3 atomic64_dec_return +EXPORT_SYMBOL vmlinux 0x2608eb4a sget +EXPORT_SYMBOL vmlinux 0x267827a5 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x268cc6a2 sys_close +EXPORT_SYMBOL vmlinux 0x269250e3 dm_exception_store_create +EXPORT_SYMBOL vmlinux 0x26995f58 pci_get_slot +EXPORT_SYMBOL vmlinux 0x26d202f8 block_commit_write +EXPORT_SYMBOL vmlinux 0x26d86db7 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x26dd13ff pci_iounmap +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26e8c835 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x270eb585 clear_inode +EXPORT_SYMBOL vmlinux 0x2718e648 scsi_host_get +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2727da5d _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x2741cddc __elv_add_request +EXPORT_SYMBOL vmlinux 0x274acdc3 journal_wipe +EXPORT_SYMBOL vmlinux 0x275e8677 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27a1514a key_payload_reserve +EXPORT_SYMBOL vmlinux 0x27b35c51 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27bd1ece elevator_exit +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x281a6421 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x287ba041 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x288ffacd journal_get_create_access +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28a89c67 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x28ab2eca nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x28afe632 uart_register_driver +EXPORT_SYMBOL vmlinux 0x28b715a6 isapnp_cfg_end +EXPORT_SYMBOL vmlinux 0x28b7b459 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x28bfad57 bdi_destroy +EXPORT_SYMBOL vmlinux 0x28e9b2ce uart_update_timeout +EXPORT_SYMBOL vmlinux 0x28ee7fb1 update_region +EXPORT_SYMBOL vmlinux 0x292093f4 native_rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x29335d0b ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x296db4a6 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x2977bb90 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x29a0d204 set_pages_uc +EXPORT_SYMBOL vmlinux 0x29b1c366 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x29b509ae mdiobus_read +EXPORT_SYMBOL vmlinux 0x29b76168 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29d1d2cb pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x29ecd539 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x2a048893 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x2a0fd77f sk_run_filter +EXPORT_SYMBOL vmlinux 0x2a211304 dma_pool_create +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a348176 contig_page_data +EXPORT_SYMBOL vmlinux 0x2a3a4e79 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x2a509738 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x2a6f83dd freeze_bdev +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2ae0af4e scsi_scan_host +EXPORT_SYMBOL vmlinux 0x2ae72f19 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x2ae7d552 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x2aeb2800 mempool_create_node +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b1a0885 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x2b224ca5 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x2b337d77 phy_print_status +EXPORT_SYMBOL vmlinux 0x2b4ffd32 single_release +EXPORT_SYMBOL vmlinux 0x2b865f7b posix_lock_file +EXPORT_SYMBOL vmlinux 0x2b8a2720 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb6fde2 __kfifo_put +EXPORT_SYMBOL vmlinux 0x2bbe992b jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x2bc95bd4 memset +EXPORT_SYMBOL vmlinux 0x2be8dcd8 mca_register_driver_integrated +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c090ab4 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x2c4301f4 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x2c475f5a do_splice_to +EXPORT_SYMBOL vmlinux 0x2c4ec219 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x2c4f673c vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c5efed6 __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0x2c639240 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x2c7cbee9 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x2c7f0508 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x2c8f5989 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x2c9874fe ida_remove +EXPORT_SYMBOL vmlinux 0x2ca6efb4 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x2ca7fa7f key_put +EXPORT_SYMBOL vmlinux 0x2d37342e cpu_online_mask +EXPORT_SYMBOL vmlinux 0x2d74c89b override_creds +EXPORT_SYMBOL vmlinux 0x2d77a543 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x2d79ad61 pci_target_state +EXPORT_SYMBOL vmlinux 0x2d8373e3 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2dbda0f0 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x2dc412d3 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x2dcb0123 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2dd48a35 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x2de3aa2f bmap +EXPORT_SYMBOL vmlinux 0x2deadc99 dev_change_flags +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2df74d78 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x2e27edde writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0x2e2a9e65 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e60bace memcpy +EXPORT_SYMBOL vmlinux 0x2e742caf dev_get_stats +EXPORT_SYMBOL vmlinux 0x2e81a96b nobh_writepage +EXPORT_SYMBOL vmlinux 0x2e9014ad per_cpu__current_task +EXPORT_SYMBOL vmlinux 0x2e9b43b8 find_lock_page +EXPORT_SYMBOL vmlinux 0x2ea64810 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x2ea69836 mpage_writepages +EXPORT_SYMBOL vmlinux 0x2eb9a0e8 _read_lock_irq +EXPORT_SYMBOL vmlinux 0x2efbdbca rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x2efe5e09 atomic64_xchg +EXPORT_SYMBOL vmlinux 0x2f0585b2 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x2f287f0d copy_to_user +EXPORT_SYMBOL vmlinux 0x2fa50d6c i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x2fbef0f3 skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x2fc889ea poll_freewait +EXPORT_SYMBOL vmlinux 0x2fd95e9c vfs_fsync +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x30245d4f inet6_bind +EXPORT_SYMBOL vmlinux 0x3036b085 input_inject_event +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x30a7996d truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x30b5f03c tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x30be63f4 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x30de2185 generic_removexattr +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x310b8742 journal_load +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x31518c44 netif_device_attach +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x319a6551 blk_start_queue +EXPORT_SYMBOL vmlinux 0x31a20839 register_gifconf +EXPORT_SYMBOL vmlinux 0x31a76277 md_check_recovery +EXPORT_SYMBOL vmlinux 0x31c1f0e3 arp_find +EXPORT_SYMBOL vmlinux 0x31c57e04 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31ecbd8c xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x32080822 set_trace_device +EXPORT_SYMBOL vmlinux 0x321d090d skb_under_panic +EXPORT_SYMBOL vmlinux 0x3222435f get_sb_ns +EXPORT_SYMBOL vmlinux 0x3228c750 __napi_complete +EXPORT_SYMBOL vmlinux 0x322f8501 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x3236268a invalidate_bdev +EXPORT_SYMBOL vmlinux 0x3236ca89 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x325614ec pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x326df9e1 vfs_stat +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x328f46c5 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x3298df20 md_write_start +EXPORT_SYMBOL vmlinux 0x329dab88 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x32c05f8d key_unlink +EXPORT_SYMBOL vmlinux 0x32c6249c eth_change_mtu +EXPORT_SYMBOL vmlinux 0x32ee1a1d generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x331bc8cf simple_fill_super +EXPORT_SYMBOL vmlinux 0x332b28eb dev_driver_string +EXPORT_SYMBOL vmlinux 0x33315c2d simple_readpage +EXPORT_SYMBOL vmlinux 0x334ada65 vm_map_ram +EXPORT_SYMBOL vmlinux 0x336181a4 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0x337bed0c __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x33800dbb simple_rmdir +EXPORT_SYMBOL vmlinux 0x338cc4c6 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x33a20d77 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x33acf389 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x33bddb80 page_put_link +EXPORT_SYMBOL vmlinux 0x33d92f9a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x3420044f generic_write_sync +EXPORT_SYMBOL vmlinux 0x342f60fe apm_info +EXPORT_SYMBOL vmlinux 0x34410a06 dst_release +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x34896788 __devm_release_region +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x3507369c inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x3508a459 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x353f9f1e submit_bh +EXPORT_SYMBOL vmlinux 0x35565db5 scsi_finish_command +EXPORT_SYMBOL vmlinux 0x35797984 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x359e7f00 path_lookup +EXPORT_SYMBOL vmlinux 0x35ae7775 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x35b14da4 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35c7a441 seq_write +EXPORT_SYMBOL vmlinux 0x35ce031c blk_sync_queue +EXPORT_SYMBOL vmlinux 0x35da2e61 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x35da5e3e dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x35dc7615 posix_acl_permission +EXPORT_SYMBOL vmlinux 0x35e3a2ac nf_setsockopt +EXPORT_SYMBOL vmlinux 0x35f0faa2 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x36024ddf dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x361517ee serio_reconnect +EXPORT_SYMBOL vmlinux 0x3639c14e icmp_send +EXPORT_SYMBOL vmlinux 0x364f9080 udp_proc_register +EXPORT_SYMBOL vmlinux 0x3651f0ca iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x3656db83 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36bf8d1f netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x36c00ab8 inode_setattr +EXPORT_SYMBOL vmlinux 0x36c3ee55 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x36e2fd84 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x36fd351d dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x37091866 give_up_console +EXPORT_SYMBOL vmlinux 0x37436ce1 sk_alloc +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x374ed073 scnprintf +EXPORT_SYMBOL vmlinux 0x37623edd scsi_get_command +EXPORT_SYMBOL vmlinux 0x3776828d block_write_full_page +EXPORT_SYMBOL vmlinux 0x37932044 input_close_device +EXPORT_SYMBOL vmlinux 0x379d65f5 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x37aa15b5 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37cccdb5 cdrom_open +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37dfa8aa __getblk +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x37edb26a bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x37f6e218 dev_mc_add +EXPORT_SYMBOL vmlinux 0x37fefef7 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x380d1151 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x381611ca cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x381c4bb1 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x386ef879 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x388799f6 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x389eb074 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38c6ce16 sk_stream_error +EXPORT_SYMBOL vmlinux 0x38cab31c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x38fad9ed put_disk +EXPORT_SYMBOL vmlinux 0x3921767b block_write_end +EXPORT_SYMBOL vmlinux 0x393970ca lro_receive_frags +EXPORT_SYMBOL vmlinux 0x394c2f28 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x395e5c04 d_invalidate +EXPORT_SYMBOL vmlinux 0x397cbd96 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x399a77e0 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x39e4fdd5 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a4b9106 get_phy_id +EXPORT_SYMBOL vmlinux 0x3a4e768f jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa1dbcf _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x3ab170df bio_pair_release +EXPORT_SYMBOL vmlinux 0x3ac323cf inet_register_protosw +EXPORT_SYMBOL vmlinux 0x3adc15b9 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3aea324f journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x3af98f9e ioremap_nocache +EXPORT_SYMBOL vmlinux 0x3b02f481 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x3b194a62 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x3b250c17 genphy_config_advert +EXPORT_SYMBOL vmlinux 0x3b2e3a93 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x3b2e57d6 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b484815 dst_discard +EXPORT_SYMBOL vmlinux 0x3b815ec9 dma_find_channel +EXPORT_SYMBOL vmlinux 0x3ba5265d phy_connect_direct +EXPORT_SYMBOL vmlinux 0x3bb71c94 key_link +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c66a154 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x3c7227bf complete_all +EXPORT_SYMBOL vmlinux 0x3c98ef25 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3ccf8a3c block_invalidatepage +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3d0ea977 nla_put +EXPORT_SYMBOL vmlinux 0x3d1b48b1 init_net +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d88233e scsi_register_interface +EXPORT_SYMBOL vmlinux 0x3d9995af devm_free_irq +EXPORT_SYMBOL vmlinux 0x3d9de4e3 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da5eb6d kfifo_alloc +EXPORT_SYMBOL vmlinux 0x3daa69da vfs_lstat +EXPORT_SYMBOL vmlinux 0x3dc3c1b1 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x3e1f073d wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x3e219de6 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x3e22e743 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e302032 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e54a14b register_netdev +EXPORT_SYMBOL vmlinux 0x3e64808c kill_anon_super +EXPORT_SYMBOL vmlinux 0x3e79466a ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x3e9b2474 pci_request_region +EXPORT_SYMBOL vmlinux 0x3ead1bda neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x3eba1466 end_page_writeback +EXPORT_SYMBOL vmlinux 0x3ec1d14e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x3ec4664d generic_make_request +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3eee7e27 skb_queue_head +EXPORT_SYMBOL vmlinux 0x3ef1f219 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x3ef9dfe5 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f1350b6 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x3f1899f1 up +EXPORT_SYMBOL vmlinux 0x3f241154 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x3f249212 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f53909e aio_put_req +EXPORT_SYMBOL vmlinux 0x3f6067cb uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x3f67d9d7 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x3fa404d5 iget_failed +EXPORT_SYMBOL vmlinux 0x3fbb3818 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x3fddca3a input_get_keycode +EXPORT_SYMBOL vmlinux 0x3fe24819 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x3fe5c63d scsi_execute_req +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x3ff97911 sg_miter_start +EXPORT_SYMBOL vmlinux 0x400705b2 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x4025662c scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x40306507 d_add_ci +EXPORT_SYMBOL vmlinux 0x404d773c thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x4090ef7f dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x409a2e38 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40ba24d7 skb_put +EXPORT_SYMBOL vmlinux 0x40bf53dd blk_make_request +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40d37d54 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x40eb71a6 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x40f83046 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41447783 get_sb_bdev +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x414cc80c cmpxchg8b_emu +EXPORT_SYMBOL vmlinux 0x414d57d6 set_bh_page +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x417911fb prepare_binprm +EXPORT_SYMBOL vmlinux 0x4183ed16 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x4185cf4b radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41a282df ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x41a55032 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x41a9c68d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x41e86df1 ndisc_send_skb +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42139ef1 seq_printf +EXPORT_SYMBOL vmlinux 0x421d7b64 journal_init_inode +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x42360ce6 skb_recycle_check +EXPORT_SYMBOL vmlinux 0x42390358 bio_kmalloc +EXPORT_SYMBOL vmlinux 0x423916fb xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x424f0323 pci_select_bars +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x4288e047 bd_claim +EXPORT_SYMBOL vmlinux 0x4292364c schedule +EXPORT_SYMBOL vmlinux 0x42ad13da kernel_accept +EXPORT_SYMBOL vmlinux 0x42d144b5 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x42d20562 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x42d53735 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x42d95fbd i2c_del_driver +EXPORT_SYMBOL vmlinux 0x42f082bc mpage_readpage +EXPORT_SYMBOL vmlinux 0x42fa1e35 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4304a5a0 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x430d4aa9 sock_no_getname +EXPORT_SYMBOL vmlinux 0x4330b862 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x4385be3b gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x4388edc1 ip6_xmit +EXPORT_SYMBOL vmlinux 0x439fd900 elevator_init +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43b42763 arp_xmit +EXPORT_SYMBOL vmlinux 0x43b87d50 scsi_print_result +EXPORT_SYMBOL vmlinux 0x43e20be6 tty_write_room +EXPORT_SYMBOL vmlinux 0x440b7607 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x442a1ee8 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x44314efb radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x446aedac neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x447818d2 generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0x4489907e pci_fixup_device +EXPORT_SYMBOL vmlinux 0x44945d06 tty_throttle +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44b36538 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44e34a9a vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f21bea idr_for_each +EXPORT_SYMBOL vmlinux 0x45053b45 sock_no_bind +EXPORT_SYMBOL vmlinux 0x453aa13d sock_i_ino +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x45450063 mod_timer +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x4576ddb8 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x45876171 vga_put +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45aa4865 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x45b17c7b scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x45c70618 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x45d11c43 down_interruptible +EXPORT_SYMBOL vmlinux 0x45d55543 down_write +EXPORT_SYMBOL vmlinux 0x45e541b6 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x46008ef9 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x46085e4f add_timer +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x46408657 arp_send +EXPORT_SYMBOL vmlinux 0x46588a88 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x46734bc2 try_to_release_page +EXPORT_SYMBOL vmlinux 0x46c1474f phy_driver_register +EXPORT_SYMBOL vmlinux 0x46d16493 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x47003f76 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x472d2a9a radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x4747287a dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x476fffad dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x477f4aff sock_no_listen +EXPORT_SYMBOL vmlinux 0x478a56b5 sock_init_data +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x47996f31 skb_clone +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x479e5d81 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x47df003e neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x47e31583 skb_store_bits +EXPORT_SYMBOL vmlinux 0x47e33713 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x47ed5908 alloc_disk +EXPORT_SYMBOL vmlinux 0x47f2b947 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x48419855 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x485d3d7f km_state_notify +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48753bb9 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x488ec8a0 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x48d9e09e kobject_init +EXPORT_SYMBOL vmlinux 0x48e0c780 do_sync_write +EXPORT_SYMBOL vmlinux 0x48e8023b skb_seq_read +EXPORT_SYMBOL vmlinux 0x48f1958a km_report +EXPORT_SYMBOL vmlinux 0x4933c6f9 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x494e3393 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x4967dc28 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x4974c85e tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x49773986 simple_sync_file +EXPORT_SYMBOL vmlinux 0x49938903 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x49c547c5 mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0x49da9a9a _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49f2c740 jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0x4a300ca7 blk_init_tags +EXPORT_SYMBOL vmlinux 0x4a307794 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a4251b1 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x4a5a5ffb sock_map_fd +EXPORT_SYMBOL vmlinux 0x4a64eb4b blk_rq_init +EXPORT_SYMBOL vmlinux 0x4a84ee79 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x4a8792e2 file_remove_suid +EXPORT_SYMBOL vmlinux 0x4a971ec7 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x4ac7113d create_proc_entry +EXPORT_SYMBOL vmlinux 0x4ac8cc06 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x4aed30bb cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x4af664ce tcf_em_register +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b07e779 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b359cb7 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x4b40c9c0 save_mount_options +EXPORT_SYMBOL vmlinux 0x4b45231b dm_io +EXPORT_SYMBOL vmlinux 0x4b66b387 per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x4b8d21ee tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4b94109f nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x4ba920a2 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bfee15a atomic64_set +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1b965c gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x4c28194e dm_table_get +EXPORT_SYMBOL vmlinux 0x4c2cb0af blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x4c2dc961 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x4c34672a nf_log_register +EXPORT_SYMBOL vmlinux 0x4c765df7 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4d4889f5 request_firmware +EXPORT_SYMBOL vmlinux 0x4d4bed0a mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x4d8f9eb5 unlock_super +EXPORT_SYMBOL vmlinux 0x4da6ce08 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dc71b21 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x4dc72e8b generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x4dc9d071 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x4de1d80e proc_symlink +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e3ad0e1 inet_bind +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e81d3ed thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e872551 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x4e90f967 seq_escape +EXPORT_SYMBOL vmlinux 0x4ebd5961 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x4ecd5f51 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x4ee16b04 nonseekable_open +EXPORT_SYMBOL vmlinux 0x4ee76065 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f274221 __devm_request_region +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f5a4dfe simple_rename +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f7a6026 generic_setxattr +EXPORT_SYMBOL vmlinux 0x4f8d3be4 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4ff2e4ce neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x500abc66 pci_request_regions +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x502559d4 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x5063717a lock_may_write +EXPORT_SYMBOL vmlinux 0x506738ec dev_mc_sync +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x50ac791f sock_create +EXPORT_SYMBOL vmlinux 0x50bdd470 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x50c39d9e dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x50d2836b nobh_write_begin +EXPORT_SYMBOL vmlinux 0x50da9911 lock_fb_info +EXPORT_SYMBOL vmlinux 0x50e9d58a dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x510b1980 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x51150e8d mem_map +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x513342db shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x513c89d9 sk_dst_check +EXPORT_SYMBOL vmlinux 0x5140832b set_groups +EXPORT_SYMBOL vmlinux 0x5152e605 memcmp +EXPORT_SYMBOL vmlinux 0x5160e38a call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x516fc9f2 journal_update_format +EXPORT_SYMBOL vmlinux 0x517b0978 names_cachep +EXPORT_SYMBOL vmlinux 0x517f1630 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x51812be3 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x5186518f profile_pc +EXPORT_SYMBOL vmlinux 0x51bd6034 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x51bd8bc8 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51d64036 register_md_personality +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x51f734b2 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x5225e27a block_write_begin +EXPORT_SYMBOL vmlinux 0x52310241 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x523e9bd7 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527809b9 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x527bd969 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52c47e62 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x530b1e4c rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x53319a21 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x5333785e dm_table_get_size +EXPORT_SYMBOL vmlinux 0x533c8c53 prepare_creds +EXPORT_SYMBOL vmlinux 0x53453a8a pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x535fbe4d ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x536afc74 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x53708ac8 rt6_lookup +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x539856e1 load_nls +EXPORT_SYMBOL vmlinux 0x539d2f33 fasync_helper +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53c15d43 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x53c72dd6 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x53da275e seq_path +EXPORT_SYMBOL vmlinux 0x540d071c xfrm_register_type +EXPORT_SYMBOL vmlinux 0x541dfef4 atomic64_inc +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x54379647 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x544b3e87 isapnp_protocol +EXPORT_SYMBOL vmlinux 0x54542f67 mca_device_set_name +EXPORT_SYMBOL vmlinux 0x5491b234 generic_file_open +EXPORT_SYMBOL vmlinux 0x54935666 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x549a59ea mpage_readpages +EXPORT_SYMBOL vmlinux 0x549fc24a __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x54a6be21 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x54a6d074 atomic64_dec +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54b67eab kmem_cache_name +EXPORT_SYMBOL vmlinux 0x54b8582f netlink_dump_start +EXPORT_SYMBOL vmlinux 0x54d4fea6 filemap_flush +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54f65752 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x54f85f4e single_open +EXPORT_SYMBOL vmlinux 0x550877be genphy_suspend +EXPORT_SYMBOL vmlinux 0x5510b9dd arp_broken_ops +EXPORT_SYMBOL vmlinux 0x55177651 mb_cache_create +EXPORT_SYMBOL vmlinux 0x552cd796 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x55588120 bio_integrity_free +EXPORT_SYMBOL vmlinux 0x55697531 thaw_process +EXPORT_SYMBOL vmlinux 0x557b9578 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x558e7bfd inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x5591fea5 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x559c49f1 __blk_end_request +EXPORT_SYMBOL vmlinux 0x55b3133e dma_release_from_coherent +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x5623d5a9 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x566564ac mca_device_set_claim +EXPORT_SYMBOL vmlinux 0x566d5036 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x567c6782 dev_addr_del +EXPORT_SYMBOL vmlinux 0x56b0328a xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x56b993a8 backlight_device_register +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56dacd90 dev_get_flags +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x57016504 register_con_driver +EXPORT_SYMBOL vmlinux 0x572bc825 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x5747928e bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x576fe9a9 __ht_create_irq +EXPORT_SYMBOL vmlinux 0x57740d0f scsi_free_command +EXPORT_SYMBOL vmlinux 0x5783963c kill_fasync +EXPORT_SYMBOL vmlinux 0x5794ea13 hippi_type_trans +EXPORT_SYMBOL vmlinux 0x579fbcd2 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x57a6504e vsnprintf +EXPORT_SYMBOL vmlinux 0x57adf756 per_cpu__this_cpu_off +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57c99b5e splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x580f4904 lookup_bdev +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x5846d6b9 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x5855adb7 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x5859b1a7 seq_bitmap +EXPORT_SYMBOL vmlinux 0x587bc701 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x58b41faf tcp_prot +EXPORT_SYMBOL vmlinux 0x58d1818b I_BDEV +EXPORT_SYMBOL vmlinux 0x58dd6131 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x58fab8f8 key_task_permission +EXPORT_SYMBOL vmlinux 0x58fef6f8 ist_info +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x5936be47 uart_match_port +EXPORT_SYMBOL vmlinux 0x59375adf genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x59626a33 neigh_destroy +EXPORT_SYMBOL vmlinux 0x596f6714 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59bc9f28 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x59cd9885 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d8223a ioport_resource +EXPORT_SYMBOL vmlinux 0x59e6371d acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x5a001b10 udp_prot +EXPORT_SYMBOL vmlinux 0x5a020d9d pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x5a0b8485 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x5a3dc03c vga_get +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a57d155 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a824f8b dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0x5a9aa3ce tty_register_device +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5acdba98 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x5ae2dfee bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x5afc52f2 vm_insert_page +EXPORT_SYMBOL vmlinux 0x5b0678eb nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x5b071ca1 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b3d34c6 qdisc_reset +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b722283 pci_find_device +EXPORT_SYMBOL vmlinux 0x5b823f29 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x5ba70098 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x5bbc6721 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x5bc612c4 eth_header_cache +EXPORT_SYMBOL vmlinux 0x5c04ce6f find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x5c265cba sg_init_one +EXPORT_SYMBOL vmlinux 0x5c2e721d bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x5c40e0f4 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x5c66860b sock_no_mmap +EXPORT_SYMBOL vmlinux 0x5c68705b mca_read_pos +EXPORT_SYMBOL vmlinux 0x5c6ce10c blk_fetch_request +EXPORT_SYMBOL vmlinux 0x5c74d9ac tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x5c9fc8c3 bdget +EXPORT_SYMBOL vmlinux 0x5ce8dedd check_disk_change +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d254824 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x5d2f3d72 ndisc_build_skb +EXPORT_SYMBOL vmlinux 0x5d5015e1 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x5d7d539f phy_attach_direct +EXPORT_SYMBOL vmlinux 0x5da7c940 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x5db1d758 vmap +EXPORT_SYMBOL vmlinux 0x5dcf0775 sock_no_connect +EXPORT_SYMBOL vmlinux 0x5dee90ee pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x5e23b689 journal_init_dev +EXPORT_SYMBOL vmlinux 0x5e3f6df6 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x5e48677d jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x5e51f8a0 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x5e520e52 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x5e727d82 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x5e77399b simple_pin_fs +EXPORT_SYMBOL vmlinux 0x5e81b68e blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x5e8875ce security_inode_readlink +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ebc6d6c abort_creds +EXPORT_SYMBOL vmlinux 0x5ecbe272 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ee8216b netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x5ef64108 __lookup_one_len +EXPORT_SYMBOL vmlinux 0x5f1bd579 mca_find_adapter +EXPORT_SYMBOL vmlinux 0x5f337f05 d_alloc_name +EXPORT_SYMBOL vmlinux 0x5f45b5f4 notify_change +EXPORT_SYMBOL vmlinux 0x5f557f9b remap_pfn_range +EXPORT_SYMBOL vmlinux 0x5f56db66 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x5f625d55 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x5f8a7e35 console_stop +EXPORT_SYMBOL vmlinux 0x5f907cf4 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x60243b7d dma_async_device_register +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x6042380c inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x6043092c atomic64_dec_and_test +EXPORT_SYMBOL vmlinux 0x606d792a skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x60718010 vfs_statfs +EXPORT_SYMBOL vmlinux 0x608750c4 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x608d4559 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60b4a716 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x60e2b000 elv_add_request +EXPORT_SYMBOL vmlinux 0x60e4c27e da903x_query_status +EXPORT_SYMBOL vmlinux 0x60f5b5ae pnp_find_dev +EXPORT_SYMBOL vmlinux 0x611d1cda free_task +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x61684281 inet_ioctl +EXPORT_SYMBOL vmlinux 0x61779bf2 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x617f7a2e ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61b40e0e d_prune_aliases +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61c49ca5 flush_old_exec +EXPORT_SYMBOL vmlinux 0x61d07cf7 input_free_device +EXPORT_SYMBOL vmlinux 0x61d1014e ilookup +EXPORT_SYMBOL vmlinux 0x61e630e9 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x6212c881 k8_northbridges +EXPORT_SYMBOL vmlinux 0x62193598 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x621ce820 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x621df210 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x6230494c neigh_event_ns +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x62386c5d unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x6241a2ab __copy_from_user_ll_nocache +EXPORT_SYMBOL vmlinux 0x6241fd2c acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x6242519f __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x6257bd1d ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x62593e9b skb_find_text +EXPORT_SYMBOL vmlinux 0x625999d4 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x627d18a1 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62a11f20 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x62c6af33 nf_register_hooks +EXPORT_SYMBOL vmlinux 0x62d8c405 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x6307fc98 del_timer +EXPORT_SYMBOL vmlinux 0x630ec8f8 vfs_llseek +EXPORT_SYMBOL vmlinux 0x6316f788 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x633dbb95 current_fs_time +EXPORT_SYMBOL vmlinux 0x634da2ad bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x6376ee08 journal_flush +EXPORT_SYMBOL vmlinux 0x638c0cc2 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x63a42007 consume_skb +EXPORT_SYMBOL vmlinux 0x63b76aeb tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x63c98da9 __kill_fasync +EXPORT_SYMBOL vmlinux 0x63d77a22 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x63dc8224 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63efc536 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x640a7078 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x6410c600 skb_pull +EXPORT_SYMBOL vmlinux 0x642e54ac __wake_up +EXPORT_SYMBOL vmlinux 0x64526a93 atomic64_sub_return +EXPORT_SYMBOL vmlinux 0x6456f663 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x6466a1e6 mempool_alloc +EXPORT_SYMBOL vmlinux 0x6469e569 bio_init +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64c5d140 kernel_read +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x650fb346 add_wait_queue +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x652b0b5c simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x65582add security_inode_init_security +EXPORT_SYMBOL vmlinux 0x6570e762 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x657574e5 netdev_set_master +EXPORT_SYMBOL vmlinux 0x658ad69a blk_unplug +EXPORT_SYMBOL vmlinux 0x65953c9a netdev_features_change +EXPORT_SYMBOL vmlinux 0x65a0330a phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x65b16d07 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x65c43e5f journal_check_available_features +EXPORT_SYMBOL vmlinux 0x65d9d9a4 security_path_truncate +EXPORT_SYMBOL vmlinux 0x65e48238 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x65fba64d user_revoke +EXPORT_SYMBOL vmlinux 0x661fd137 dev_load +EXPORT_SYMBOL vmlinux 0x6678736c bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66a913d1 netdev_state_change +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x670a8627 skb_split +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x672b33f3 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x67804a19 __any_online_cpu +EXPORT_SYMBOL vmlinux 0x67a2f5e3 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67b67f00 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x68279d7f xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x682c55d5 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x68332af2 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x68547e8e pskb_copy +EXPORT_SYMBOL vmlinux 0x6862d5cc dentry_unhash +EXPORT_SYMBOL vmlinux 0x68671682 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x6876046b dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x6886f0b6 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x68a4fbc9 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x68a7297b devm_ioremap +EXPORT_SYMBOL vmlinux 0x68ae7399 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x68d31937 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x68d46447 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x68f82687 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x6944cfcc redraw_screen +EXPORT_SYMBOL vmlinux 0x6953e87a thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x696042cd mutex_trylock +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697f5c25 security_path_rmdir +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x6988f768 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69f23a0e bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a27bfce csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x6a35166f d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x6a41e203 replace_mount_options +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a48b2b3 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a8f4ad7 netpoll_setup +EXPORT_SYMBOL vmlinux 0x6a9f26c9 init_timer_key +EXPORT_SYMBOL vmlinux 0x6ab9dfee clocksource_unregister +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6acbbb11 simple_unlink +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad7f077 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6aeb630f pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x6b0b12c1 mmc_host_disable +EXPORT_SYMBOL vmlinux 0x6b1721f5 set_pages_x +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b28395b sysctl_jiffies +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b7343e0 sk_common_release +EXPORT_SYMBOL vmlinux 0x6b7b6f79 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x6b937ffb mca_mark_as_used +EXPORT_SYMBOL vmlinux 0x6b9b88f3 sleep_on +EXPORT_SYMBOL vmlinux 0x6ba0d46a locks_init_lock +EXPORT_SYMBOL vmlinux 0x6baa590f generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x6bb812e7 atomic64_add_return +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c2e3320 strncmp +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c47bbaa is_bad_inode +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c74e138 nf_log_packet +EXPORT_SYMBOL vmlinux 0x6c7bbb52 handle_sysrq +EXPORT_SYMBOL vmlinux 0x6c8086fb xfrm_state_add +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6cfe9fe8 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d288375 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d464175 __sg_free_table +EXPORT_SYMBOL vmlinux 0x6d56994a cmpxchg_486_u64 +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d7dcb39 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x6d830473 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x6d9afed4 do_sync_read +EXPORT_SYMBOL vmlinux 0x6d9ee1e4 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x6d9f3bee kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x6da721ad xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0x6db7d8fb dev_close +EXPORT_SYMBOL vmlinux 0x6dc0c24b complete_and_exit +EXPORT_SYMBOL vmlinux 0x6dcb53ed eisa_bus_type +EXPORT_SYMBOL vmlinux 0x6debe999 security_path_mknod +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e4def4d free_netdev +EXPORT_SYMBOL vmlinux 0x6e630376 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e7e4bf9 sock_release +EXPORT_SYMBOL vmlinux 0x6e80e840 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb0fdf3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x6eb25b1e kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x6eb63ecc mdiobus_register +EXPORT_SYMBOL vmlinux 0x6edd0cc9 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x6f17b13f do_SAK +EXPORT_SYMBOL vmlinux 0x6f5279eb tc_classify_compat +EXPORT_SYMBOL vmlinux 0x6f53ad75 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f91e72b sk_stop_timer +EXPORT_SYMBOL vmlinux 0x6fbc1d31 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x6fc652ea bio_unmap_user +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fe90103 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x700a9952 write_cache_pages +EXPORT_SYMBOL vmlinux 0x701547c7 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x70167313 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x701d0ebd snprintf +EXPORT_SYMBOL vmlinux 0x701fe5bc __lock_page +EXPORT_SYMBOL vmlinux 0x7041807d jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x70450d26 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x705548ae skb_queue_purge +EXPORT_SYMBOL vmlinux 0x709bd353 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x70ab9101 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70c4d24e inet_add_protocol +EXPORT_SYMBOL vmlinux 0x70c704f5 kern_path +EXPORT_SYMBOL vmlinux 0x70d1f8f3 strncat +EXPORT_SYMBOL vmlinux 0x70d1fac5 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x70d822e3 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70dc114f pnp_device_attach +EXPORT_SYMBOL vmlinux 0x7102133b module_put +EXPORT_SYMBOL vmlinux 0x7116cc16 journal_force_commit +EXPORT_SYMBOL vmlinux 0x711f8066 lookup_hash +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x712aa29b _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x71356fba remove_wait_queue +EXPORT_SYMBOL vmlinux 0x71443961 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x714c7a81 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x7159a9e6 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x7185d4a2 wake_up_process +EXPORT_SYMBOL vmlinux 0x71902b18 udp_disconnect +EXPORT_SYMBOL vmlinux 0x71a1c23e bdget_disk +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71d20df7 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x71e765f2 pci_dev_get +EXPORT_SYMBOL vmlinux 0x71f1db49 journal_errno +EXPORT_SYMBOL vmlinux 0x71fbb842 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x720da63c vfs_follow_link +EXPORT_SYMBOL vmlinux 0x720e93a4 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x7226c7b4 ip_defrag +EXPORT_SYMBOL vmlinux 0x722f4eee kill_pgrp +EXPORT_SYMBOL vmlinux 0x7249a8c5 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x7268d3cd inode_permission +EXPORT_SYMBOL vmlinux 0x726f46d0 pci_do_scan_bus +EXPORT_SYMBOL vmlinux 0x72a67e75 netif_napi_add +EXPORT_SYMBOL vmlinux 0x72b0e1b0 default_llseek +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72dda130 pnp_is_active +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x730bf40a icmpv6_send +EXPORT_SYMBOL vmlinux 0x731c0d7e mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x731c81e9 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x73440631 igrab +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x7362dd1e vfs_fstat +EXPORT_SYMBOL vmlinux 0x738803e6 strnlen +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x73da2cf0 input_register_handler +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x73e425f8 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x7413793a EISA_bus +EXPORT_SYMBOL vmlinux 0x7424f186 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x74450b25 cdev_init +EXPORT_SYMBOL vmlinux 0x744b6663 generic_read_dir +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7466b8d7 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x7467535f nf_afinfo +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x748caf40 down +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74a2c9c9 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x74b0c937 journal_create +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74f13caf register_sysrq_key +EXPORT_SYMBOL vmlinux 0x75271716 save_processor_state +EXPORT_SYMBOL vmlinux 0x7562728f fb_get_mode +EXPORT_SYMBOL vmlinux 0x7564a9ae lookup_one_len +EXPORT_SYMBOL vmlinux 0x7567d2b5 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x757af05b blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x75d2a502 file_permission +EXPORT_SYMBOL vmlinux 0x75d8233c dm_table_get_md +EXPORT_SYMBOL vmlinux 0x75e8b86e ip_getsockopt +EXPORT_SYMBOL vmlinux 0x75f9f8b3 set_irq_chip +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x760d3b3f jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x76445e9e __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x7660fffb __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x769c447f genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x769cc9aa nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x76a50cb7 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x76b0f8f8 bad_dma_address +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76cc1577 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76dc0387 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x76f3f8a5 num_k8_northbridges +EXPORT_SYMBOL vmlinux 0x770a0036 isapnp_cfg_begin +EXPORT_SYMBOL vmlinux 0x7716e384 generic_setlease +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x774f5d15 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x777d418a pci_assign_resource +EXPORT_SYMBOL vmlinux 0x77a108df _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x77c9b1ba tty_port_init +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77d8b731 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x77e4f36b pci_set_power_state +EXPORT_SYMBOL vmlinux 0x77eb0156 put_page +EXPORT_SYMBOL vmlinux 0x77eb4828 tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fc100e pci_iomap +EXPORT_SYMBOL vmlinux 0x78124a77 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x7825e8ae simple_transaction_get +EXPORT_SYMBOL vmlinux 0x782c8e77 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x78373cfb __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x78374e51 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x78403a46 uart_resume_port +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x786d54f1 acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0x788fe103 iomem_resource +EXPORT_SYMBOL vmlinux 0x78968d6e dma_ops +EXPORT_SYMBOL vmlinux 0x78a484c9 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x78c36cd9 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78e3aa4d tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x78fbea4c kmap_high +EXPORT_SYMBOL vmlinux 0x7903817f kill_pid +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x7917555e log_wait_commit +EXPORT_SYMBOL vmlinux 0x794487ee disable_hlt +EXPORT_SYMBOL vmlinux 0x794d5860 vfs_link +EXPORT_SYMBOL vmlinux 0x79509f0f journal_restart +EXPORT_SYMBOL vmlinux 0x79562f7b sock_create_kern +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79c097e6 __page_symlink +EXPORT_SYMBOL vmlinux 0x79c66130 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x79d44533 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x79e3a78f journal_ack_err +EXPORT_SYMBOL vmlinux 0x7a107d23 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a7bed96 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x7a812b9d release_sock +EXPORT_SYMBOL vmlinux 0x7a848702 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x7a90bc7e i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x7ad00c19 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7afd7f67 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b134ddf acpi_get_name +EXPORT_SYMBOL vmlinux 0x7b3ba69d clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b590395 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x7b759323 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x7b7c4e2f generic_write_end +EXPORT_SYMBOL vmlinux 0x7b8d93fd remove_proc_entry +EXPORT_SYMBOL vmlinux 0x7b8db100 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x7ba972d6 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x7bb3dae4 aio_complete +EXPORT_SYMBOL vmlinux 0x7bbc07a0 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x7bc63a9b sg_miter_stop +EXPORT_SYMBOL vmlinux 0x7bcb2fc4 user_path_at +EXPORT_SYMBOL vmlinux 0x7bd508ca pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x7c067fef vga_client_register +EXPORT_SYMBOL vmlinux 0x7c0e288b tcp_connect +EXPORT_SYMBOL vmlinux 0x7c0edd7d acpi_check_region +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c713995 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x7c85c470 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d24cb24 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x7d2ceeed blk_complete_request +EXPORT_SYMBOL vmlinux 0x7d354486 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x7d3d60fc journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x7d719333 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x7dad596b unlock_rename +EXPORT_SYMBOL vmlinux 0x7db4d2b6 bio_map_user +EXPORT_SYMBOL vmlinux 0x7dbdd75b unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd77be3 vfs_create +EXPORT_SYMBOL vmlinux 0x7df30de3 slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x7e05f491 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0x7e59dc80 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x7e5df976 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x7e7c6df3 journal_extend +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7ec5efae journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x7ecb001b __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x7ee0b40e fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x7ee91c1d _spin_trylock +EXPORT_SYMBOL vmlinux 0x7eed0ed3 ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x7f0be07d nla_reserve +EXPORT_SYMBOL vmlinux 0x7f1d3368 blk_init_queue +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f952914 set_blocksize +EXPORT_SYMBOL vmlinux 0x7f96463d sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x7f9dadd5 alloc_file +EXPORT_SYMBOL vmlinux 0x7fce95e4 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x7fef3bfd jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x801f3fd2 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x803cf5e2 devm_iounmap +EXPORT_SYMBOL vmlinux 0x803de310 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x803ffc4c ppp_input_error +EXPORT_SYMBOL vmlinux 0x804d00e7 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x8063f83d radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x80a243df __ip_select_ident +EXPORT_SYMBOL vmlinux 0x811e167b iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x8125e7d9 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x8135083b dma_supported +EXPORT_SYMBOL vmlinux 0x813f897e unregister_netdev +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815c56d0 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x81799cee vscnprintf +EXPORT_SYMBOL vmlinux 0x817bca17 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x817df7a9 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x8196dede jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x81ad0cb0 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0x81da75c1 dev_add_pack +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820fc63c vfsmount_lock +EXPORT_SYMBOL vmlinux 0x8235805b memmove +EXPORT_SYMBOL vmlinux 0x823e8209 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82524d56 ps2_drain +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x829892ee napi_frags_finish +EXPORT_SYMBOL vmlinux 0x82a501c2 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82bd1658 kernel_connect +EXPORT_SYMBOL vmlinux 0x82c41736 clocksource_register +EXPORT_SYMBOL vmlinux 0x82c4af94 sock_wake_async +EXPORT_SYMBOL vmlinux 0x82c6cd2a __netif_schedule +EXPORT_SYMBOL vmlinux 0x82da0fc9 input_release_device +EXPORT_SYMBOL vmlinux 0x8317e20a completion_done +EXPORT_SYMBOL vmlinux 0x833a9b77 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x8365d76e tcp_child_process +EXPORT_SYMBOL vmlinux 0x838a5d24 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x83904ad4 per_cpu__irq_regs +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83ae2974 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x83ccbf03 dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0x83ec5d7a blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x84081291 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x841ef615 skb_tx_hash +EXPORT_SYMBOL vmlinux 0x84761848 napi_complete +EXPORT_SYMBOL vmlinux 0x847add9e tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x84bcfa47 inet_listen +EXPORT_SYMBOL vmlinux 0x84c67440 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x84cc7425 skb_push +EXPORT_SYMBOL vmlinux 0x84d2b685 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x84dc9b55 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x84dd78ae eth_type_trans +EXPORT_SYMBOL vmlinux 0x8565adae __mutex_init +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x857a6ca3 journal_set_features +EXPORT_SYMBOL vmlinux 0x858fe96f pci_disable_msix +EXPORT_SYMBOL vmlinux 0x85ac7f10 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x85aeae71 vfs_quota_on +EXPORT_SYMBOL vmlinux 0x85b4b579 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x861881ad phy_start +EXPORT_SYMBOL vmlinux 0x861fa3c3 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x8622ad8b task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x866af3a3 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x867aa764 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x86803605 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x86836bae tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x870715e0 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x870d53a2 dquot_transfer +EXPORT_SYMBOL vmlinux 0x871a164e bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x872c8771 pci_dev_put +EXPORT_SYMBOL vmlinux 0x8733e9a3 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x87696b5d inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x8775f07d put_tty_driver +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x878f4f93 tty_vhangup +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87b5c8b1 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x87ba564d scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0x87e690f1 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x87f438a2 sysctl_intvec +EXPORT_SYMBOL vmlinux 0x87f667cf scsi_target_resume +EXPORT_SYMBOL vmlinux 0x8803174f audit_log_format +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x8856b83f phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x886d8f8e udp_sendmsg +EXPORT_SYMBOL vmlinux 0x88ad2af5 __scsi_put_command +EXPORT_SYMBOL vmlinux 0x88e2db22 skb_trim +EXPORT_SYMBOL vmlinux 0x88e88136 ioremap_prot +EXPORT_SYMBOL vmlinux 0x891477cc genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x891d4342 proc_mkdir +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x892e2df4 bdput +EXPORT_SYMBOL vmlinux 0x8956bbe9 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x8969b997 ida_get_new +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x898cd8b1 mca_device_claimed +EXPORT_SYMBOL vmlinux 0x898e62b4 register_filesystem +EXPORT_SYMBOL vmlinux 0x89949018 down_timeout +EXPORT_SYMBOL vmlinux 0x89b5feb6 unregister_console +EXPORT_SYMBOL vmlinux 0x89bbb14f cad_pid +EXPORT_SYMBOL vmlinux 0x89ce0ba2 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89e4a694 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x89f69134 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x8a0aea98 security_path_unlink +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a1b1633 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x8a1c38a8 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x8a23f45f tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3eabf0 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8a5049af tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x8a581eaf sock_no_poll +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a802dbd pci_enable_device +EXPORT_SYMBOL vmlinux 0x8a888011 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aa20af2 serio_open +EXPORT_SYMBOL vmlinux 0x8ac6395b per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0x8acc3879 __pagevec_release +EXPORT_SYMBOL vmlinux 0x8ae77528 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x8af59530 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x8b0d9360 scsi_init_io +EXPORT_SYMBOL vmlinux 0x8b18496f __copy_to_user_ll +EXPORT_SYMBOL vmlinux 0x8b337154 thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b6d52f5 napi_skb_finish +EXPORT_SYMBOL vmlinux 0x8b71cdca jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bdc5ae1 phy_device_create +EXPORT_SYMBOL vmlinux 0x8be0c958 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c8664c4 fb_show_logo +EXPORT_SYMBOL vmlinux 0x8c91bcad file_fsync +EXPORT_SYMBOL vmlinux 0x8c986bce i2c_transfer +EXPORT_SYMBOL vmlinux 0x8c9f04a7 d_rehash +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cdfebb1 __lock_buffer +EXPORT_SYMBOL vmlinux 0x8cf35fdb bh_submit_read +EXPORT_SYMBOL vmlinux 0x8cf479b4 dst_destroy +EXPORT_SYMBOL vmlinux 0x8d008c50 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x8d12b3e9 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x8d2871c1 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x8d2e3f96 inet_frag_find +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d46b892 get_sb_single +EXPORT_SYMBOL vmlinux 0x8d492b5b vfs_mknod +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d6f81b4 __div64_32 +EXPORT_SYMBOL vmlinux 0x8d7e31b5 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8d9f3864 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x8dc6e564 restore_processor_state +EXPORT_SYMBOL vmlinux 0x8dca832f __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x8df37b73 dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0637ba i8253_lock +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e29ad68 posix_test_lock +EXPORT_SYMBOL vmlinux 0x8e5e038d blk_remove_plug +EXPORT_SYMBOL vmlinux 0x8e5fa6c9 journal_revoke +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e7e2af1 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x8e888ec3 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x8ea6c0a3 register_quota_format +EXPORT_SYMBOL vmlinux 0x8ecf68a0 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8eebc17c dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x8f038f9a call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f286da1 genphy_resume +EXPORT_SYMBOL vmlinux 0x8f2874c8 cdev_alloc +EXPORT_SYMBOL vmlinux 0x8f4478a7 netif_napi_del +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f49b4d1 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x8f574654 search_binary_handler +EXPORT_SYMBOL vmlinux 0x8f5abf42 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x8f5e4fe8 genphy_update_link +EXPORT_SYMBOL vmlinux 0x8f6362e9 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f839b30 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x8f8a14dd lease_modify +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8fa10a07 scsi_host_put +EXPORT_SYMBOL vmlinux 0x8fb93523 pci_save_state +EXPORT_SYMBOL vmlinux 0x8fca4dc6 nobh_write_end +EXPORT_SYMBOL vmlinux 0x8ff4079b pv_irq_ops +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x9046ece8 neigh_table_init +EXPORT_SYMBOL vmlinux 0x906a4dce __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x90756038 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x907a46b4 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90a65a27 ps2_end_command +EXPORT_SYMBOL vmlinux 0x90c298ce __register_binfmt +EXPORT_SYMBOL vmlinux 0x91009452 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x91057cca security_path_link +EXPORT_SYMBOL vmlinux 0x91112ca6 __rta_fill +EXPORT_SYMBOL vmlinux 0x9115df12 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x912bd057 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x917b333a jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x91e817cb journal_destroy +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x9229c0c1 nla_append +EXPORT_SYMBOL vmlinux 0x92377fe9 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x923ac244 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x9251e3a0 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x92569001 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x92615a1e i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x9270cd73 unregister_8022_client +EXPORT_SYMBOL vmlinux 0x92897e3d default_idle +EXPORT_SYMBOL vmlinux 0x92bd7f60 generic_write_checks +EXPORT_SYMBOL vmlinux 0x92e28bf3 __brelse +EXPORT_SYMBOL vmlinux 0x92eca2b1 key_validate +EXPORT_SYMBOL vmlinux 0x92f72302 register_8022_client +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x9318cbcb dentry_open +EXPORT_SYMBOL vmlinux 0x9330cb9f sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9339c5ca netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x934a7b4d inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x935028c7 should_remove_suid +EXPORT_SYMBOL vmlinux 0x93649afb __break_lease +EXPORT_SYMBOL vmlinux 0x9379fa42 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x937c2bfd sock_register +EXPORT_SYMBOL vmlinux 0x937fad89 __inet6_hash +EXPORT_SYMBOL vmlinux 0x9385667d down_read_trylock +EXPORT_SYMBOL vmlinux 0x938e86c7 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x939305f6 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x93a03df9 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x93a53b53 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93adba82 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x93be1324 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93c80876 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x93cbd1ec _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x93d14fd5 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x93e29f8a pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x94003fbb pci_enable_wake +EXPORT_SYMBOL vmlinux 0x9406717d input_unfilter_device +EXPORT_SYMBOL vmlinux 0x94196e4e page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x94349c3b __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x94422e33 vfs_readdir +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x948a6954 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x94932ccd pnp_find_card +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a6467e kobject_put +EXPORT_SYMBOL vmlinux 0x94b541b5 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x94e10ba8 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x94ebc141 skb_dequeue +EXPORT_SYMBOL vmlinux 0x9525a203 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x953a5c8a vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x953ccc4b tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x95528039 input_register_handle +EXPORT_SYMBOL vmlinux 0x95756e00 arp_tbl +EXPORT_SYMBOL vmlinux 0x961580c0 install_exec_creds +EXPORT_SYMBOL vmlinux 0x9629486a per_cpu__cpu_number +EXPORT_SYMBOL vmlinux 0x962c5cfb textsearch_unregister +EXPORT_SYMBOL vmlinux 0x963b4bc2 d_validate +EXPORT_SYMBOL vmlinux 0x964f3f67 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x968e3cd5 scsi_device_get +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96ff8c5e vfs_write +EXPORT_SYMBOL vmlinux 0x971e8b40 rfkill_register +EXPORT_SYMBOL vmlinux 0x9737951b tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x973873ab _spin_lock +EXPORT_SYMBOL vmlinux 0x973b327a blkdev_get +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x9756052b xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x97611573 brioctl_set +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97df383f acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x97e225b7 d_splice_alias +EXPORT_SYMBOL vmlinux 0x9839be9a md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x986c6b44 setup_new_exec +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x989ab8d7 blk_start_request +EXPORT_SYMBOL vmlinux 0x98ba3b81 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x98c17625 dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x99052a84 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x9930e22a tc_classify +EXPORT_SYMBOL vmlinux 0x99335d67 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x993eef95 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x994c850e set_user_nice +EXPORT_SYMBOL vmlinux 0x99691c34 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x996ef29c sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x9973d4ae delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x997a14f8 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99b122cf ps2_init +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cda276 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99e05b8f kfree_skb +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x9a163048 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a237f64 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x9a370a3a netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x9a435481 ilookup5 +EXPORT_SYMBOL vmlinux 0x9a606d3e locks_copy_lock +EXPORT_SYMBOL vmlinux 0x9a6a83f9 cmos_lock +EXPORT_SYMBOL vmlinux 0x9a6f752c netlink_set_err +EXPORT_SYMBOL vmlinux 0x9a9985be percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x9aa6e1c9 ll_rw_block +EXPORT_SYMBOL vmlinux 0x9aa77edb __invalidate_device +EXPORT_SYMBOL vmlinux 0x9ab7d626 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x9ac59a70 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x9ae117c5 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x9b112f94 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x9b233746 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x9b250610 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x9b2ae8fc inode_init_once +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b4de8eb idr_replace +EXPORT_SYMBOL vmlinux 0x9b5fc913 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b71fbf2 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x9b774e9a generic_block_bmap +EXPORT_SYMBOL vmlinux 0x9b8590e2 kernel_bind +EXPORT_SYMBOL vmlinux 0x9b862513 dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9ba9524d seq_release +EXPORT_SYMBOL vmlinux 0x9bbab4a8 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x9bbdc1d3 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x9bc3e2f9 destroy_EII_client +EXPORT_SYMBOL vmlinux 0x9bce482f __release_region +EXPORT_SYMBOL vmlinux 0x9bdf33e9 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x9bf48535 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ee289 serio_close +EXPORT_SYMBOL vmlinux 0x9c2c944a __copy_from_user_ll_nocache_nozero +EXPORT_SYMBOL vmlinux 0x9c338d6c scsi_execute +EXPORT_SYMBOL vmlinux 0x9c7077bd enable_hlt +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9cb0be88 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cc9fb86 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x9ccb2622 finish_wait +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9ced38aa down_trylock +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d16941b page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x9d2a956f textsearch_register +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d75c1b6 iput +EXPORT_SYMBOL vmlinux 0x9d972a7a phy_attach +EXPORT_SYMBOL vmlinux 0x9db5a5be wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x9dbf5908 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x9dd31bc9 dget_locked +EXPORT_SYMBOL vmlinux 0x9ddbe7fd scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x9df695e6 elv_rb_find +EXPORT_SYMBOL vmlinux 0x9df9fb31 input_register_device +EXPORT_SYMBOL vmlinux 0x9e07bcd1 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e3c5f5b i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x9e6357ba dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e672ff6 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x9e6ad3c9 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x9e70a8ad blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x9e782842 set_create_files_as +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea668ec qdisc_list_del +EXPORT_SYMBOL vmlinux 0x9eaa8662 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x9eb0fd46 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f0cf089 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f244525 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x9f2bbcfc dquot_initialize +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f614c32 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x9f7d4045 dquot_free_space +EXPORT_SYMBOL vmlinux 0x9f92efc4 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9f9e0945 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x9fa274b4 dq_data_lock +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0xa0178039 kernel_sendpage +EXPORT_SYMBOL vmlinux 0xa022d68f tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0xa02936c6 block_read_full_page +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa04da360 generic_fillattr +EXPORT_SYMBOL vmlinux 0xa0525a2c mca_unregister_driver +EXPORT_SYMBOL vmlinux 0xa052fac6 pci_get_device +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa05d17f1 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0xa06ffaad genphy_read_status +EXPORT_SYMBOL vmlinux 0xa07c4cba inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xa0900d0e uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0xa096c475 scsi_dma_map +EXPORT_SYMBOL vmlinux 0xa0a0ab13 blk_plug_device +EXPORT_SYMBOL vmlinux 0xa0a4ac21 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0e886a6 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0xa0f09787 eth_header_parse +EXPORT_SYMBOL vmlinux 0xa0f11f7d xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xa0f9a327 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa1677a18 tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0xa1adb163 phy_device_free +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1d86b8f pnp_request_card_device +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa21f37d3 udp_ioctl +EXPORT_SYMBOL vmlinux 0xa21f7a56 xrlim_allow +EXPORT_SYMBOL vmlinux 0xa222d383 input_set_capability +EXPORT_SYMBOL vmlinux 0xa2311afc bio_clone +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a1e5c9 _write_lock_bh +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2af3831 filemap_fault +EXPORT_SYMBOL vmlinux 0xa2b8a2ba __init_rwsem +EXPORT_SYMBOL vmlinux 0xa2bfae43 pci_get_subsys +EXPORT_SYMBOL vmlinux 0xa2df3632 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xa2e591c9 blk_get_request +EXPORT_SYMBOL vmlinux 0xa31fea17 registered_fb +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa32b53ea vga_tryget +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35c1f05 acpi_extract_package +EXPORT_SYMBOL vmlinux 0xa35dcd9c elv_rb_del +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa365a361 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0xa3a21c9c jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0xa3a7680c generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3db6917 is_container_init +EXPORT_SYMBOL vmlinux 0xa3f00349 ip_setsockopt +EXPORT_SYMBOL vmlinux 0xa3fa7a50 __nla_reserve +EXPORT_SYMBOL vmlinux 0xa415b384 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xa41c08d4 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0xa41ffb67 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xa420208d lock_rename +EXPORT_SYMBOL vmlinux 0xa4355663 sock_wfree +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa44159db ht_create_irq +EXPORT_SYMBOL vmlinux 0xa44ad274 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xa45df4ee rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xa476c463 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4c8532c neigh_update +EXPORT_SYMBOL vmlinux 0xa4d4ee3a sk_wait_data +EXPORT_SYMBOL vmlinux 0xa4e8ea50 scsi_ioctl +EXPORT_SYMBOL vmlinux 0xa4ffaa5c i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xa515128c dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0xa51cdfe8 __FIXADDR_TOP +EXPORT_SYMBOL vmlinux 0xa5360fbb in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xa5384189 input_open_device +EXPORT_SYMBOL vmlinux 0xa5602e66 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xa56f1315 mempool_free +EXPORT_SYMBOL vmlinux 0xa56f9de3 unbind_con_driver +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa591199d mca_device_transform_ioport +EXPORT_SYMBOL vmlinux 0xa5922bb1 kfifo_init +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5a633b9 sg_last +EXPORT_SYMBOL vmlinux 0xa5b7f250 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0xa5bbb17e proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0xa5c194aa xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xa5cef8ad release_resource +EXPORT_SYMBOL vmlinux 0xa5d33547 find_or_create_page +EXPORT_SYMBOL vmlinux 0xa5da0abd acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0xa6339c8f kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa66d37f7 security_file_permission +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6bfb44f mmc_add_host +EXPORT_SYMBOL vmlinux 0xa6c3c38a kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6e0ff7b napi_gro_receive +EXPORT_SYMBOL vmlinux 0xa70422af sg_miter_next +EXPORT_SYMBOL vmlinux 0xa7046549 vprintk +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa71e7463 __first_cpu +EXPORT_SYMBOL vmlinux 0xa7298bfb pci_map_rom +EXPORT_SYMBOL vmlinux 0xa751f9ed mdio_bus_type +EXPORT_SYMBOL vmlinux 0xa756c7dc pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xa7672d5a module_layout +EXPORT_SYMBOL vmlinux 0xa769a5f3 tty_shutdown +EXPORT_SYMBOL vmlinux 0xa773a14a rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0xa7d8841b sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xa8158202 xfrm_lookup +EXPORT_SYMBOL vmlinux 0xa820dadc set_anon_super +EXPORT_SYMBOL vmlinux 0xa851e31c call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0xa890b1ac mmc_card_awake +EXPORT_SYMBOL vmlinux 0xa89acbb3 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xa8bee5a7 __f_setown +EXPORT_SYMBOL vmlinux 0xa8d22a7d set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xa8d2fba4 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8d7d0af may_umount_tree +EXPORT_SYMBOL vmlinux 0xa8e8c4b1 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xa8f3d561 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0xa8fb8ed7 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa937189b block_sync_page +EXPORT_SYMBOL vmlinux 0xa94d5aae backlight_force_update +EXPORT_SYMBOL vmlinux 0xa95a993a start_tty +EXPORT_SYMBOL vmlinux 0xa97426b2 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0xa9948ca9 skb_insert +EXPORT_SYMBOL vmlinux 0xa9b7a640 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xa9bd2676 __vmalloc +EXPORT_SYMBOL vmlinux 0xa9eed527 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0xa9fcf31d wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xaa0c7c86 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0xaa1fec6b mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0xaa4cb22e pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0xaa500d09 no_llseek +EXPORT_SYMBOL vmlinux 0xaa5b0bf8 bio_alloc +EXPORT_SYMBOL vmlinux 0xaa81c435 generic_permission +EXPORT_SYMBOL vmlinux 0xaa84a8ae acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0xaa952f71 inode_init_always +EXPORT_SYMBOL vmlinux 0xaaaaacd1 ioremap_wc +EXPORT_SYMBOL vmlinux 0xaab06af8 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xaab40e73 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0xaac2436f pci_disable_msi +EXPORT_SYMBOL vmlinux 0xaacd0601 d_move +EXPORT_SYMBOL vmlinux 0xaae12d14 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaebe34f mca_write_pos +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab1a4593 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xab34cae1 llc_sap_open +EXPORT_SYMBOL vmlinux 0xab42af58 tty_check_change +EXPORT_SYMBOL vmlinux 0xab497827 put_mnt_ns +EXPORT_SYMBOL vmlinux 0xab4cb2f1 audit_log_end +EXPORT_SYMBOL vmlinux 0xab4e704b mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab600f5d splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab6dc0d2 iunique +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab77f719 fb_set_var +EXPORT_SYMBOL vmlinux 0xab7881f3 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xabb9406d cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0xabc57c70 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xabcbfa69 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd95843 neigh_for_each +EXPORT_SYMBOL vmlinux 0xabe7cffb alloc_trdev +EXPORT_SYMBOL vmlinux 0xabf0f343 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac76e2eb pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xac88598a lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xac9b72db ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0xacb3f9ef inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xacc41b6a dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacd8636b input_unregister_handle +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf103d6 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacf6e5e6 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad12cbd6 vc_cons +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad2cde6b __alloc_skb +EXPORT_SYMBOL vmlinux 0xad436ecb __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xad4efb51 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xad68eda5 eisa_driver_unregister +EXPORT_SYMBOL vmlinux 0xad690af0 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xad75670b d_alloc_root +EXPORT_SYMBOL vmlinux 0xad77d6e7 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0xad7a0037 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xad81cae6 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadf42bd5 __request_region +EXPORT_SYMBOL vmlinux 0xadf9c16a dcache_readdir +EXPORT_SYMBOL vmlinux 0xadfd8474 tty_set_operations +EXPORT_SYMBOL vmlinux 0xae16313c scsi_prep_return +EXPORT_SYMBOL vmlinux 0xae29261e xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0xae2adf65 page_readlink +EXPORT_SYMBOL vmlinux 0xae39f6b1 unregister_netdevice +EXPORT_SYMBOL vmlinux 0xae409b0c phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xae4dc5e6 scsi_print_sense +EXPORT_SYMBOL vmlinux 0xae75f004 ida_destroy +EXPORT_SYMBOL vmlinux 0xae8668d9 acpi_root_dir +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaedaff64 mnt_unpin +EXPORT_SYMBOL vmlinux 0xaef64628 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xaf0b984e free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xaf0c0d2a alloc_tty_driver +EXPORT_SYMBOL vmlinux 0xaf14eacb phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xaf209150 dquot_acquire +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf4b1540 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xaf4fc60f write_one_page +EXPORT_SYMBOL vmlinux 0xaf532535 inet_shutdown +EXPORT_SYMBOL vmlinux 0xaf57e11e textsearch_destroy +EXPORT_SYMBOL vmlinux 0xaf97f07f bio_copy_user +EXPORT_SYMBOL vmlinux 0xafe36015 mca_device_read_stored_pos +EXPORT_SYMBOL vmlinux 0xb010e90c dm_io_client_create +EXPORT_SYMBOL vmlinux 0xb0126d86 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0xb0172095 seq_read +EXPORT_SYMBOL vmlinux 0xb020dc3f __destroy_inode +EXPORT_SYMBOL vmlinux 0xb041d4cb d_instantiate +EXPORT_SYMBOL vmlinux 0xb06f0e04 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xb077ef32 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb08f76ad gen_pool_free +EXPORT_SYMBOL vmlinux 0xb097fa20 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xb0a124f6 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0bd6366 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0xb0dec233 skb_dma_map +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb1134d0e __starget_for_each_device +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb1254ad0 register_qdisc +EXPORT_SYMBOL vmlinux 0xb126b3f8 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xb1321625 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xb1330884 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0xb145e66f blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xb154fcd8 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xb16efddf wireless_send_event +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb201c9fd add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xb20872cb acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0xb20c8e2e scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb2253c28 __put_cred +EXPORT_SYMBOL vmlinux 0xb225cd99 tcp_disconnect +EXPORT_SYMBOL vmlinux 0xb22d6869 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb24e1a18 pci_find_bus +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb272fd2a proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0xb27510ef atomic64_inc_return +EXPORT_SYMBOL vmlinux 0xb279da12 pv_lock_ops +EXPORT_SYMBOL vmlinux 0xb29bc8bd idr_remove +EXPORT_SYMBOL vmlinux 0xb2cdd544 alloc_disk_node +EXPORT_SYMBOL vmlinux 0xb2efb6be mca_read_stored_pos +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb30abf8d idr_get_new_above +EXPORT_SYMBOL vmlinux 0xb31526ee sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0xb3205415 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb32ecf98 sock_i_uid +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb376d79d radix_tree_tagged +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb39eda82 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3a96ed7 input_set_keycode +EXPORT_SYMBOL vmlinux 0xb3c42c94 per_cpu__x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xb3c46ea5 flush_signals +EXPORT_SYMBOL vmlinux 0xb3e0590d acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0xb422c3dc bioset_free +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4279ab7 downgrade_write +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb45578b8 memscan +EXPORT_SYMBOL vmlinux 0xb45b24f6 k8_nb_ids +EXPORT_SYMBOL vmlinux 0xb45e8fc9 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0xb46a2594 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0xb46e271a nf_reinject +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb495018b register_framebuffer +EXPORT_SYMBOL vmlinux 0xb4a210cf phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xb4a9709e qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xb4af49bd bioset_create +EXPORT_SYMBOL vmlinux 0xb4b0ee4e down_read +EXPORT_SYMBOL vmlinux 0xb4ca9447 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb4ccc3cf mmc_resume_host +EXPORT_SYMBOL vmlinux 0xb4fa0f45 init_buffer +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb512014c pcim_enable_device +EXPORT_SYMBOL vmlinux 0xb51bdc26 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0xb53449fe scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0xb5418861 atomic64_add +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb56b816f jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0xb579a3ab call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xb5859c68 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xb589bca2 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0xb597d129 ip6_frag_init +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5a5c620 journal_start +EXPORT_SYMBOL vmlinux 0xb5c60cd6 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5cbebd7 simple_lookup +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb605e192 dqget +EXPORT_SYMBOL vmlinux 0xb61b35d0 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0xb6353555 per_cpu__x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0xb64c6c9b tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xb650fdd6 __scsi_add_device +EXPORT_SYMBOL vmlinux 0xb655578c skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6876f04 bio_map_kern +EXPORT_SYMBOL vmlinux 0xb6896671 crc_t10dif +EXPORT_SYMBOL vmlinux 0xb698d4b6 elv_queue_empty +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6ca6439 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xb6ce303d find_vma +EXPORT_SYMBOL vmlinux 0xb6d98eaa generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xb6e227aa rtc_lock +EXPORT_SYMBOL vmlinux 0xb6ed1e53 strncpy +EXPORT_SYMBOL vmlinux 0xb703911e release_firmware +EXPORT_SYMBOL vmlinux 0xb72397d5 printk +EXPORT_SYMBOL vmlinux 0xb72a71b8 simple_transaction_set +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb792e404 km_query +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7b11149 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7cedd9c unlock_new_inode +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb831dbc0 f_setown +EXPORT_SYMBOL vmlinux 0xb8371b31 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xb845bbf2 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0xb84ed32f proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0xb862c912 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8aa2342 __check_region +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb8f728db __secpath_destroy +EXPORT_SYMBOL vmlinux 0xb92be98c kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0xb942b513 smp_call_function_many +EXPORT_SYMBOL vmlinux 0xb97771db pnpbios_protocol +EXPORT_SYMBOL vmlinux 0xb988a8fe inode_get_bytes +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb98caf27 pipe_lock +EXPORT_SYMBOL vmlinux 0xb98ef804 vm_stat +EXPORT_SYMBOL vmlinux 0xb98f5f3b proto_unregister +EXPORT_SYMBOL vmlinux 0xb992ec3c tty_kref_put +EXPORT_SYMBOL vmlinux 0xb9c62bbd tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xb9cbdeac kmap +EXPORT_SYMBOL vmlinux 0xb9d7562a in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xb9ddfec7 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0xb9f972f7 vfs_writev +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba2ac5b4 blk_recount_segments +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba2fd195 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0xba359193 lease_get_mtime +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba4ef579 pci_find_capability +EXPORT_SYMBOL vmlinux 0xba5e6d4a blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xba793410 misc_register +EXPORT_SYMBOL vmlinux 0xba8b9590 __kfree_skb +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbabdbb4b ether_setup +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb611f0e inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xbb65ec75 scsi_device_put +EXPORT_SYMBOL vmlinux 0xbb89de17 ida_init +EXPORT_SYMBOL vmlinux 0xbbab2590 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0xbbbee529 journal_get_write_access +EXPORT_SYMBOL vmlinux 0xbbc63f35 bdi_register_dev +EXPORT_SYMBOL vmlinux 0xbbeafc6d dquot_scan_active +EXPORT_SYMBOL vmlinux 0xbc14001d netlink_unicast +EXPORT_SYMBOL vmlinux 0xbc3b181c pci_scan_slot +EXPORT_SYMBOL vmlinux 0xbc4fb8c8 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xbc54d110 __ps2_command +EXPORT_SYMBOL vmlinux 0xbc65e51f vfs_symlink +EXPORT_SYMBOL vmlinux 0xbc80fefa __free_pages +EXPORT_SYMBOL vmlinux 0xbc88126a cont_write_begin +EXPORT_SYMBOL vmlinux 0xbc8c14ee cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xbca06651 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbce35546 keyring_search +EXPORT_SYMBOL vmlinux 0xbcef1095 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0xbd1337ac pci_enable_bridges +EXPORT_SYMBOL vmlinux 0xbd594515 __nla_put +EXPORT_SYMBOL vmlinux 0xbd69e087 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0xbd86073a napi_frags_skb +EXPORT_SYMBOL vmlinux 0xbd945102 get_disk +EXPORT_SYMBOL vmlinux 0xbdb50170 seq_putc +EXPORT_SYMBOL vmlinux 0xbdb6500e per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0xbddac888 set_pages_nx +EXPORT_SYMBOL vmlinux 0xbddc3e3e kunmap_high +EXPORT_SYMBOL vmlinux 0xbddd41f0 rfkill_alloc +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbdf5cd52 misc_deregister +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe29e071 __breadahead +EXPORT_SYMBOL vmlinux 0xbe52582c follow_down +EXPORT_SYMBOL vmlinux 0xbe63ee40 request_resource +EXPORT_SYMBOL vmlinux 0xbe66f80a remove_arg_zero +EXPORT_SYMBOL vmlinux 0xbe673190 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xbe6bf219 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xbe78c771 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0xbea649b5 remove_inode_hash +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf255a7f mca_device_write_pos +EXPORT_SYMBOL vmlinux 0xbf31e84b unregister_md_personality +EXPORT_SYMBOL vmlinux 0xbf3de27d vmtruncate +EXPORT_SYMBOL vmlinux 0xbf3fe077 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xbf63840c skb_checksum +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8b39e9 isapnp_present +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfa2e941 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0xbfb93f7d mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfda1811 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc01af80c unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xc01eed33 __copy_from_user_ll_nozero +EXPORT_SYMBOL vmlinux 0xc028d314 km_state_expired +EXPORT_SYMBOL vmlinux 0xc043f3d0 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc0586eaf sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0xc09dbc7d mark_page_accessed +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0e20a7b simple_write_end +EXPORT_SYMBOL vmlinux 0xc0f09d90 truncate_pagecache +EXPORT_SYMBOL vmlinux 0xc0f65988 machine_real_restart +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc12db327 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0xc139a5c5 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xc15f4fee lock_super +EXPORT_SYMBOL vmlinux 0xc164b765 fb_pan_display +EXPORT_SYMBOL vmlinux 0xc16676cd d_genocide +EXPORT_SYMBOL vmlinux 0xc1836c4b create_mnt_ns +EXPORT_SYMBOL vmlinux 0xc190650a scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xc19c8163 atomic64_cmpxchg +EXPORT_SYMBOL vmlinux 0xc1a2b760 security_path_symlink +EXPORT_SYMBOL vmlinux 0xc1b629b1 dev_mc_delete +EXPORT_SYMBOL vmlinux 0xc21740e1 mntput_no_expire +EXPORT_SYMBOL vmlinux 0xc224cbd2 scsi_register +EXPORT_SYMBOL vmlinux 0xc228617e key_type_keyring +EXPORT_SYMBOL vmlinux 0xc23bf5b0 dquot_alloc +EXPORT_SYMBOL vmlinux 0xc254996e input_unregister_handler +EXPORT_SYMBOL vmlinux 0xc254af48 dcache_lock +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc25be1b9 simple_link +EXPORT_SYMBOL vmlinux 0xc26b245c md_unregister_thread +EXPORT_SYMBOL vmlinux 0xc27909f3 simple_dir_operations +EXPORT_SYMBOL vmlinux 0xc280a525 __copy_from_user_ll +EXPORT_SYMBOL vmlinux 0xc2b0ba56 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0xc2b8a998 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc307a14f tr_type_trans +EXPORT_SYMBOL vmlinux 0xc30e25be set_security_override +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc3423641 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0xc3654d60 pnp_get_resource +EXPORT_SYMBOL vmlinux 0xc3749cd7 ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xc38b1e3d serial8250_register_port +EXPORT_SYMBOL vmlinux 0xc399c143 md_write_end +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3c43a91 i2c_master_send +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc3dc01d5 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0xc3fa6a59 memchr +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc41235e0 scsi_scan_target +EXPORT_SYMBOL vmlinux 0xc416f8a6 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0xc42454f5 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0xc48eecd7 dquot_commit +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc49ebb27 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xc4b21a31 vfs_quota_off +EXPORT_SYMBOL vmlinux 0xc4bece77 take_over_console +EXPORT_SYMBOL vmlinux 0xc4d19d11 vfs_readlink +EXPORT_SYMBOL vmlinux 0xc4d23a23 mddev_congested +EXPORT_SYMBOL vmlinux 0xc5109bbf lro_flush_all +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc55b7523 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0xc55f7dc7 _write_trylock +EXPORT_SYMBOL vmlinux 0xc5635108 neigh_create +EXPORT_SYMBOL vmlinux 0xc5718627 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0xc5768087 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0xc5b896af pci_match_id +EXPORT_SYMBOL vmlinux 0xc5bdd571 proto_register +EXPORT_SYMBOL vmlinux 0xc5c0e29c scsi_prep_fn +EXPORT_SYMBOL vmlinux 0xc5d75c49 km_new_mapping +EXPORT_SYMBOL vmlinux 0xc5d92517 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xc5e5fa1d free_buffer_head +EXPORT_SYMBOL vmlinux 0xc61204a3 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0xc633495b schedule_work +EXPORT_SYMBOL vmlinux 0xc647bb8f pipe_to_file +EXPORT_SYMBOL vmlinux 0xc64b8442 copy_io_context +EXPORT_SYMBOL vmlinux 0xc659a07c pcibios_set_irq_routing +EXPORT_SYMBOL vmlinux 0xc673661b tcf_hash_search +EXPORT_SYMBOL vmlinux 0xc69f0bbe cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0xc6b8b7a9 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0xc7131591 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0xc719be65 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc725f5e4 security_path_mkdir +EXPORT_SYMBOL vmlinux 0xc72cec8c simple_fsync +EXPORT_SYMBOL vmlinux 0xc744e6c5 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xc762faa4 sync_inode +EXPORT_SYMBOL vmlinux 0xc768de19 cpu_all_bits +EXPORT_SYMBOL vmlinux 0xc76e0096 md_error +EXPORT_SYMBOL vmlinux 0xc77627f7 pci_get_class +EXPORT_SYMBOL vmlinux 0xc7766496 cfb_copyarea +EXPORT_SYMBOL vmlinux 0xc78f5e30 uart_suspend_port +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7d9c5b4 load_nls_default +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc7f1a485 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0xc809cdd8 iget5_locked +EXPORT_SYMBOL vmlinux 0xc82beba0 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0xc8309223 vfs_readv +EXPORT_SYMBOL vmlinux 0xc84d2d5d pci_dev_driver +EXPORT_SYMBOL vmlinux 0xc85e138b __dst_free +EXPORT_SYMBOL vmlinux 0xc872a658 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0xc873d737 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0xc88906b7 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0xc898625d atomic64_inc_and_test +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8e7991a pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0xc905ded0 pci_pme_capable +EXPORT_SYMBOL vmlinux 0xc908d569 set_device_ro +EXPORT_SYMBOL vmlinux 0xc9171803 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xc9317052 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xc952bb4d journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xc95ba658 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0xc9656113 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0xc969b4be security_d_instantiate +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9a4af6b bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9e8e9a4 ppp_register_channel +EXPORT_SYMBOL vmlinux 0xc9ec8704 udp_table +EXPORT_SYMBOL vmlinux 0xca00976d kunmap +EXPORT_SYMBOL vmlinux 0xca33cb30 tty_unregister_device +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xcaa02bcc simple_empty +EXPORT_SYMBOL vmlinux 0xcabeb04f __napi_schedule +EXPORT_SYMBOL vmlinux 0xcac6145c mmc_request_done +EXPORT_SYMBOL vmlinux 0xcae5aace tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xcae6ce5d bdevname +EXPORT_SYMBOL vmlinux 0xcafc0209 simple_release_fs +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcb7ed226 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xcb8700c9 __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0xcb90a006 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0xcbdcb448 dev_set_mtu +EXPORT_SYMBOL vmlinux 0xcbe353ed dquot_claim_space +EXPORT_SYMBOL vmlinux 0xcbf39b33 jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc268fdc ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xcc2c2040 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51ee50 dma_spin_lock +EXPORT_SYMBOL vmlinux 0xcc55e42f console_start +EXPORT_SYMBOL vmlinux 0xcc5bbaf7 fd_install +EXPORT_SYMBOL vmlinux 0xcc5e2d3b con_set_default_unimap +EXPORT_SYMBOL vmlinux 0xcc602bd4 inet_stream_ops +EXPORT_SYMBOL vmlinux 0xcc794d78 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8d8a4d neigh_lookup +EXPORT_SYMBOL vmlinux 0xcc8f86b0 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xcca9d860 scsi_add_device +EXPORT_SYMBOL vmlinux 0xccac697d udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xcd3a00bc inet_accept +EXPORT_SYMBOL vmlinux 0xcd650bc8 bio_add_page +EXPORT_SYMBOL vmlinux 0xcdaa62e9 ip6_route_output +EXPORT_SYMBOL vmlinux 0xcdb83433 get_fs_type +EXPORT_SYMBOL vmlinux 0xcdcbdf48 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0xcdcf7b21 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0xcdf62f99 rfkill_destroy +EXPORT_SYMBOL vmlinux 0xcdf87af9 kobject_add +EXPORT_SYMBOL vmlinux 0xcdfcdefe fsync_bdev +EXPORT_SYMBOL vmlinux 0xce043860 tty_unthrottle +EXPORT_SYMBOL vmlinux 0xce0921ac dev_set_allmulti +EXPORT_SYMBOL vmlinux 0xce1717b4 inet_sendmsg +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce728576 dma_pool_free +EXPORT_SYMBOL vmlinux 0xce7ff636 pci_enable_msix +EXPORT_SYMBOL vmlinux 0xce90ae58 journal_lock_updates +EXPORT_SYMBOL vmlinux 0xceb57f5d dm_get_device +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf098295 netif_rx +EXPORT_SYMBOL vmlinux 0xcf16f602 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf53fe15 pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0xcf67d4d6 d_obtain_alias +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf7578b7 mmc_release_host +EXPORT_SYMBOL vmlinux 0xcf920f1d init_file +EXPORT_SYMBOL vmlinux 0xcfadd723 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xcfb8d24c i2c_get_adapter +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfe05d4d register_kmmio_probe +EXPORT_SYMBOL vmlinux 0xcfeeb0ba revert_creds +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd001b46b register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xd00b4da4 vfs_unlink +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd02f8f4a unregister_snap_client +EXPORT_SYMBOL vmlinux 0xd0342d92 neigh_seq_next +EXPORT_SYMBOL vmlinux 0xd037e855 mca_register_driver +EXPORT_SYMBOL vmlinux 0xd05c713e task_nice +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd08d970d xfrm_input +EXPORT_SYMBOL vmlinux 0xd0af66ce tcp_read_sock +EXPORT_SYMBOL vmlinux 0xd0d8621b strlen +EXPORT_SYMBOL vmlinux 0xd0e61423 dmam_pool_create +EXPORT_SYMBOL vmlinux 0xd0eb8db7 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd12214a0 skb_unlink +EXPORT_SYMBOL vmlinux 0xd1356df6 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd166440a test_set_page_writeback +EXPORT_SYMBOL vmlinux 0xd168376b phy_start_interrupts +EXPORT_SYMBOL vmlinux 0xd17ecc22 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xd18416df phy_stop +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd192d149 bdi_init +EXPORT_SYMBOL vmlinux 0xd1bd6b6a blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xd1c48a3d clip_tbl_hook +EXPORT_SYMBOL vmlinux 0xd1e890f9 kunmap_atomic +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd1f91bcd dev_base_lock +EXPORT_SYMBOL vmlinux 0xd1fb24d1 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd244e5c8 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd267d42c down_killable +EXPORT_SYMBOL vmlinux 0xd26fbc02 do_splice_from +EXPORT_SYMBOL vmlinux 0xd2752b65 kmap_atomic +EXPORT_SYMBOL vmlinux 0xd282a3e0 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd29c0558 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0xd2a68761 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2a941d4 sg_init_table +EXPORT_SYMBOL vmlinux 0xd2f1d745 open_exec +EXPORT_SYMBOL vmlinux 0xd2fee1c4 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0xd307021c jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xd32e52c7 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0xd32ecad2 netif_carrier_off +EXPORT_SYMBOL vmlinux 0xd34f0c62 gen_pool_create +EXPORT_SYMBOL vmlinux 0xd34fd82a i2c_master_recv +EXPORT_SYMBOL vmlinux 0xd35d9290 fb_class +EXPORT_SYMBOL vmlinux 0xd38cccdf netpoll_print_options +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd3b80a3b sock_kfree_s +EXPORT_SYMBOL vmlinux 0xd3bbaf9f pci_read_vpd +EXPORT_SYMBOL vmlinux 0xd3f74cf1 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd3f91bb9 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xd3fb4980 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0xd418e1c0 adjust_resource +EXPORT_SYMBOL vmlinux 0xd42b7232 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xd4424674 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xd4645c65 eisa_driver_register +EXPORT_SYMBOL vmlinux 0xd466288e dma_set_mask +EXPORT_SYMBOL vmlinux 0xd46e5e9e set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0xd475c1bd dev_set_drvdata +EXPORT_SYMBOL vmlinux 0xd48da6b8 lock_may_read +EXPORT_SYMBOL vmlinux 0xd4c2b58d kmem_cache_free +EXPORT_SYMBOL vmlinux 0xd4d3e104 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xd4dc356e kthread_create +EXPORT_SYMBOL vmlinux 0xd4e14fd2 genl_register_ops +EXPORT_SYMBOL vmlinux 0xd4e2c8c5 ip_route_input +EXPORT_SYMBOL vmlinux 0xd4e87de4 kernel_getpeername +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd53556ee fb_set_suspend +EXPORT_SYMBOL vmlinux 0xd54343d2 pnp_device_detach +EXPORT_SYMBOL vmlinux 0xd544e125 tty_mutex +EXPORT_SYMBOL vmlinux 0xd550cc53 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xd5688a7a radix_tree_insert +EXPORT_SYMBOL vmlinux 0xd587007e inet_put_port +EXPORT_SYMBOL vmlinux 0xd5a101a7 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xd5b7f25f km_policy_notify +EXPORT_SYMBOL vmlinux 0xd5e54a20 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0xd5eeae20 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0xd5ef7ef6 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xd5f41eb6 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd650f8f3 blk_execute_rq +EXPORT_SYMBOL vmlinux 0xd6529ad3 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xd6541b89 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0xd6590319 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0xd69a1835 llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6e57a35 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd700083c inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xd70e6a23 get_super +EXPORT_SYMBOL vmlinux 0xd72de3cc d_lookup +EXPORT_SYMBOL vmlinux 0xd7354ff3 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0xd73a6e95 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xd74d0497 pcim_iomap +EXPORT_SYMBOL vmlinux 0xd74d721e mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd791bf5d scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xd796447d ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a6fafa panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd7ad4baa pipe_unlock +EXPORT_SYMBOL vmlinux 0xd7b95e5d km_policy_expired +EXPORT_SYMBOL vmlinux 0xd7d2e83e acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xd7d36d1a idr_find +EXPORT_SYMBOL vmlinux 0xd7d67687 get_io_context +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd801fd7d skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0xd8022a63 dev_addr_add +EXPORT_SYMBOL vmlinux 0xd8133b29 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xd82613c0 atomic64_sub_and_test +EXPORT_SYMBOL vmlinux 0xd8282ff0 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd83cfb85 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0xd83e09ec scsi_put_command +EXPORT_SYMBOL vmlinux 0xd840f230 blk_insert_request +EXPORT_SYMBOL vmlinux 0xd851af78 up_write +EXPORT_SYMBOL vmlinux 0xd883f0af sock_rfree +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8a467ed dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0xd8a65c38 atomic64_sub +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8f5bf37 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xd8f95378 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xd900716e xfrm_state_update +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd963a74a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xd97487a7 llc_sap_close +EXPORT_SYMBOL vmlinux 0xd982191b acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd996d859 idr_pre_get +EXPORT_SYMBOL vmlinux 0xd999c118 dma_alloc_from_coherent +EXPORT_SYMBOL vmlinux 0xd9a128c8 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0xd9baf0e9 inet_stream_connect +EXPORT_SYMBOL vmlinux 0xd9c272aa mca_mark_as_unused +EXPORT_SYMBOL vmlinux 0xd9d8b2c1 seq_lseek +EXPORT_SYMBOL vmlinux 0xda08c0d7 pcibios_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda248b83 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xda34ec64 seq_release_private +EXPORT_SYMBOL vmlinux 0xda3863ca inet_frag_kill +EXPORT_SYMBOL vmlinux 0xda71fa01 input_event +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8fd495 isapnp_write_byte +EXPORT_SYMBOL vmlinux 0xda928914 nmi_watchdog +EXPORT_SYMBOL vmlinux 0xda98dcea dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0xdaa25229 napi_gro_frags +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdaa9c17f tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xdae110ac dcache_dir_close +EXPORT_SYMBOL vmlinux 0xdae5a533 md_register_thread +EXPORT_SYMBOL vmlinux 0xdb484656 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdb5ff454 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0xdb6d74a2 add_disk +EXPORT_SYMBOL vmlinux 0xdb778f79 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdbba3889 netlink_ack +EXPORT_SYMBOL vmlinux 0xdbbb8883 mnt_pin +EXPORT_SYMBOL vmlinux 0xdbbe800a poll_initwait +EXPORT_SYMBOL vmlinux 0xdbbf97ad vfs_rmdir +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc13813b sk_receive_skb +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2103a8 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc4eaaeb ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xdc50cfee gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xdc555410 phy_detach +EXPORT_SYMBOL vmlinux 0xdc5664c2 sock_sendmsg +EXPORT_SYMBOL vmlinux 0xdc68b438 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0xdc873a70 screen_info +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcc0bfcf follow_pfn +EXPORT_SYMBOL vmlinux 0xdcc1e44d ip_dev_find +EXPORT_SYMBOL vmlinux 0xdce29b96 path_put +EXPORT_SYMBOL vmlinux 0xdcf44f44 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xdd0a20a0 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd2be387 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xdd2d285d dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0xdd374a81 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xdd56648b mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0xdd5f2444 register_snap_client +EXPORT_SYMBOL vmlinux 0xdd6bfccd radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0xdd74b98d kill_block_super +EXPORT_SYMBOL vmlinux 0xdd76f3c8 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0xdd8b6be1 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0xddabaaa9 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0xddaedc52 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xddccf234 kmem_cache_create +EXPORT_SYMBOL vmlinux 0xdde0cabd kthread_bind +EXPORT_SYMBOL vmlinux 0xddf663af path_get +EXPORT_SYMBOL vmlinux 0xddf80495 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xde1fd694 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0xde24a4b8 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xde2cac7d secpath_dup +EXPORT_SYMBOL vmlinux 0xde5adf62 acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde90efa1 skb_copy +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdeb6d68d ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xded13a4d blk_integrity_register +EXPORT_SYMBOL vmlinux 0xdee955bb skb_copy_bits +EXPORT_SYMBOL vmlinux 0xdf078dac __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf0e9c20 dev_open +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf7ce6dc napi_get_frags +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfb40596 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfd19633 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xe032fea4 __register_chrdev +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe094ef39 sg_next +EXPORT_SYMBOL vmlinux 0xe0998cbf qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0xe0a501e3 idr_remove_all +EXPORT_SYMBOL vmlinux 0xe0a72554 filp_close +EXPORT_SYMBOL vmlinux 0xe0a838ae mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0afb56e dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0d42481 read_dev_sector +EXPORT_SYMBOL vmlinux 0xe0f105a3 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0xe118860d scsi_unregister +EXPORT_SYMBOL vmlinux 0xe11df6b2 block_truncate_page +EXPORT_SYMBOL vmlinux 0xe1226ed5 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0xe12eb03c kernel_listen +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe13f5a8a __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xe1596872 per_cpu__irq_stat +EXPORT_SYMBOL vmlinux 0xe1612420 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0xe170cfdc pcim_iounmap +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe177b247 __blk_run_queue +EXPORT_SYMBOL vmlinux 0xe182e1af skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xe1a097db journal_clear_err +EXPORT_SYMBOL vmlinux 0xe1a269e4 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1da2731 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe23d7acb up_read +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe27f663c simple_transaction_read +EXPORT_SYMBOL vmlinux 0xe298110f dm_register_target +EXPORT_SYMBOL vmlinux 0xe298f6cc wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe330a158 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xe338fdec inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xe3690e24 register_nls +EXPORT_SYMBOL vmlinux 0xe3b7baf4 skb_over_panic +EXPORT_SYMBOL vmlinux 0xe3bbf122 dquot_drop +EXPORT_SYMBOL vmlinux 0xe3cf8b44 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xe3d0a8b9 netif_device_detach +EXPORT_SYMBOL vmlinux 0xe3e9ed16 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe3fe1e37 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xe40c7d46 rfkill_set_states +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe456bd3a complete +EXPORT_SYMBOL vmlinux 0xe45851df set_binfmt +EXPORT_SYMBOL vmlinux 0xe4843b54 balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4870354 _read_trylock +EXPORT_SYMBOL vmlinux 0xe48f3039 ida_get_new_above +EXPORT_SYMBOL vmlinux 0xe49af70e tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xe4c1df3e _read_lock_bh +EXPORT_SYMBOL vmlinux 0xe4c62ce7 unregister_filesystem +EXPORT_SYMBOL vmlinux 0xe4dd4a39 sysctl_data +EXPORT_SYMBOL vmlinux 0xe4ee4b33 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe527131c sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xe56ddeac dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0xe56f8eba dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5868e68 dput +EXPORT_SYMBOL vmlinux 0xe58a7e53 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0xe5aaa202 ip_route_output_key +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5eb474c otg_get_transceiver +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe60be3f7 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xe61634dc bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0xe6207569 bdev_read_only +EXPORT_SYMBOL vmlinux 0xe623169b kthread_stop +EXPORT_SYMBOL vmlinux 0xe6421042 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xe6497c7f ___pskb_trim +EXPORT_SYMBOL vmlinux 0xe6731a79 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6981a66 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xe6a0808b pci_bus_type +EXPORT_SYMBOL vmlinux 0xe6a62f28 pci_set_mwi +EXPORT_SYMBOL vmlinux 0xe6cd58b0 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0xe6d861c7 __serio_register_port +EXPORT_SYMBOL vmlinux 0xe6e0e956 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0xe6eb4c0d scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe73c69af blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0xe742ef9e dquot_reserve_space +EXPORT_SYMBOL vmlinux 0xe79e6315 datagram_poll +EXPORT_SYMBOL vmlinux 0xe7a6b294 tcp_make_synack +EXPORT_SYMBOL vmlinux 0xe7cfb95f follow_up +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7f5eef0 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xe8035106 blkdev_put +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe863bd69 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe882b115 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL vmlinux 0xe8ad51df napi_gro_flush +EXPORT_SYMBOL vmlinux 0xe8b68849 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0xe8c2ef70 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8f2ec15 ip_fragment +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe917547c xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xe9307b02 scsi_print_command +EXPORT_SYMBOL vmlinux 0xe95ec312 mca_bus_type +EXPORT_SYMBOL vmlinux 0xe95f80ac mca_device_transform_memory +EXPORT_SYMBOL vmlinux 0xe97ba7cd acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0xe97d2e75 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xe986de73 llc_add_pack +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe9ac8cd0 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0xe9ffcc68 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea1b0203 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xea2d33a2 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0xea3bbdcf filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xea47b7c5 starget_for_each_device +EXPORT_SYMBOL vmlinux 0xea4b0fab tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0xea66f861 hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea852925 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0xea858cb5 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeb01c824 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0xeb1fabf6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xeb7e28b0 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xec0d0161 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xec28c43e rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0xec43fd30 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0xec4615a7 simple_statfs +EXPORT_SYMBOL vmlinux 0xec579950 blk_put_request +EXPORT_SYMBOL vmlinux 0xec64ab2c filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xecc767f4 phy_connect +EXPORT_SYMBOL vmlinux 0xecde1418 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0xed10122b journal_abort +EXPORT_SYMBOL vmlinux 0xed186d3a jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xed24100d cdev_add +EXPORT_SYMBOL vmlinux 0xed265e38 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xed34cf20 invalidate_partition +EXPORT_SYMBOL vmlinux 0xed523c1d mmc_free_host +EXPORT_SYMBOL vmlinux 0xed6fa576 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xed742390 init_special_inode +EXPORT_SYMBOL vmlinux 0xed83a980 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedd63c50 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0xede07e59 unlock_page +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee56ff80 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xee65a664 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xee72d4cb pci_set_master +EXPORT_SYMBOL vmlinux 0xee764696 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee8298cc ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0xee9d11d4 tty_port_close +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeb2fec9 tcp_check_req +EXPORT_SYMBOL vmlinux 0xeeeeb858 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xef1d99c1 slow_work_enqueue +EXPORT_SYMBOL vmlinux 0xef3bd862 mca_find_unused_adapter +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef889515 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0xef8ba786 tty_free_termios +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xefa55ef1 vfs_mkdir +EXPORT_SYMBOL vmlinux 0xefa76814 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xefae2a88 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0xefbacc7f vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xefe2fc64 mmc_register_driver +EXPORT_SYMBOL vmlinux 0xefeb8a6c __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xeff14be9 ioremap_cache +EXPORT_SYMBOL vmlinux 0xeffc3f4f sock_recvmsg +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf044ae8a journal_dirty_data +EXPORT_SYMBOL vmlinux 0xf04adcf0 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf078633c netpoll_poll +EXPORT_SYMBOL vmlinux 0xf0960654 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xf0af9c02 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xf0e85afb blk_end_request_all +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0f96b67 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0xf0fc3182 skb_pad +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf10b2c62 key_revoke +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf12a9d1c tcp_mtup_init +EXPORT_SYMBOL vmlinux 0xf13f392d md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xf1418c85 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xf15be13d bdi_register +EXPORT_SYMBOL vmlinux 0xf1684b1e thaw_bdev +EXPORT_SYMBOL vmlinux 0xf168a734 bio_split +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1b972ca get_user_pages +EXPORT_SYMBOL vmlinux 0xf1d64416 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf2036f33 fget +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf21570eb gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0xf215fece pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0xf22d78ef do_munmap +EXPORT_SYMBOL vmlinux 0xf2687416 rtnl_notify +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2a32365 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xf2c4e2ee generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xf2e74040 mca_set_adapter_name +EXPORT_SYMBOL vmlinux 0xf30ff149 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf32847ab vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf3509584 unlock_buffer +EXPORT_SYMBOL vmlinux 0xf3577489 inet6_ioctl +EXPORT_SYMBOL vmlinux 0xf35ecb9f dump_trace +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39bf4d9 put_cmsg +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3da8630 sockfd_lookup +EXPORT_SYMBOL vmlinux 0xf3ebe6a7 make_EII_client +EXPORT_SYMBOL vmlinux 0xf4343624 dev_trans_start +EXPORT_SYMBOL vmlinux 0xf437b8f1 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf443c60e open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xf454f652 dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0xf4570172 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xf45cbeee truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xf471c414 ipv4_specific +EXPORT_SYMBOL vmlinux 0xf48a2c4c MCA_bus +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4ae9d51 ida_pre_get +EXPORT_SYMBOL vmlinux 0xf4efe78f pid_task +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf4fe2d82 complete_request_key +EXPORT_SYMBOL vmlinux 0xf502d273 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf52f1d7c pci_pme_active +EXPORT_SYMBOL vmlinux 0xf53c05a5 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf56a6057 block_prepare_write +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf57fa526 input_unregister_device +EXPORT_SYMBOL vmlinux 0xf5b99b65 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5d01cdf mca_device_transform_irq +EXPORT_SYMBOL vmlinux 0xf5e99b8a xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf6312624 ip6_frag_match +EXPORT_SYMBOL vmlinux 0xf6356224 skb_make_writable +EXPORT_SYMBOL vmlinux 0xf645b950 udplite_prot +EXPORT_SYMBOL vmlinux 0xf6716681 block_fsync +EXPORT_SYMBOL vmlinux 0xf673e882 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0xf68b660b submit_bio +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6d037a8 vfs_rename +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6f6e843 simple_getattr +EXPORT_SYMBOL vmlinux 0xf73a90c2 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xf74a63b5 x86_mce_decode_callback +EXPORT_SYMBOL vmlinux 0xf7533668 kobject_get +EXPORT_SYMBOL vmlinux 0xf7592a6c journal_start_commit +EXPORT_SYMBOL vmlinux 0xf7614e82 seq_open_private +EXPORT_SYMBOL vmlinux 0xf7618e3e pci_remove_bus +EXPORT_SYMBOL vmlinux 0xf7623914 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xf763e4a2 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xf786ef5e idr_init +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf795ea04 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xf7ac3032 unload_nls +EXPORT_SYMBOL vmlinux 0xf7b9fee2 request_key_async +EXPORT_SYMBOL vmlinux 0xf807b007 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf83c5a40 dm_table_event +EXPORT_SYMBOL vmlinux 0xf864d1a1 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0xf864e2ef mmc_alloc_host +EXPORT_SYMBOL vmlinux 0xf87f083d __find_get_block +EXPORT_SYMBOL vmlinux 0xf886175b flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8afb4f6 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0xf8b30e93 mempool_create +EXPORT_SYMBOL vmlinux 0xf8cf9ee5 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xf8e77574 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0xf90b5628 page_follow_link_light +EXPORT_SYMBOL vmlinux 0xf9122aa9 fb_set_cmap +EXPORT_SYMBOL vmlinux 0xf922bcdc module_refcount +EXPORT_SYMBOL vmlinux 0xf940a328 __next_cpu +EXPORT_SYMBOL vmlinux 0xf94e938b kobject_del +EXPORT_SYMBOL vmlinux 0xf9542bcc d_find_alias +EXPORT_SYMBOL vmlinux 0xf9899664 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xf99a9a85 bio_put +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9a59115 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xf9b8e864 ppp_input +EXPORT_SYMBOL vmlinux 0xf9cc929e input_allocate_device +EXPORT_SYMBOL vmlinux 0xf9d5df4e bio_copy_kern +EXPORT_SYMBOL vmlinux 0xf9e1f113 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0xf9ff8b50 dev_remove_pack +EXPORT_SYMBOL vmlinux 0xfa0564fc __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfa164558 sk_filter +EXPORT_SYMBOL vmlinux 0xfa21b73f acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0xfa39074e seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xfa3b72cd dm_table_put +EXPORT_SYMBOL vmlinux 0xfa50e2e2 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0xfa6ccc77 vfs_getattr +EXPORT_SYMBOL vmlinux 0xfa733bba fput +EXPORT_SYMBOL vmlinux 0xfa85aaf9 write_inode_now +EXPORT_SYMBOL vmlinux 0xfaa46271 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0xfacda290 d_delete +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfafb7623 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0a30e9 pci_release_region +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb14542f generic_getxattr +EXPORT_SYMBOL vmlinux 0xfb19ae96 mdiobus_write +EXPORT_SYMBOL vmlinux 0xfb3c1540 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfba0c2e0 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc1e2697 udp_poll +EXPORT_SYMBOL vmlinux 0xfc21e136 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0xfc2e3121 dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc533f85 schedule_work_on +EXPORT_SYMBOL vmlinux 0xfc562165 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xfc6256b9 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfc7334c2 proc_create_data +EXPORT_SYMBOL vmlinux 0xfc75bf52 call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc4d4e4 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xfcca258b ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xfcd28e62 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd33ad6f pci_clear_master +EXPORT_SYMBOL vmlinux 0xfd4b6ccb thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xfd5ac57b touch_atime +EXPORT_SYMBOL vmlinux 0xfd6f4850 native_wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfd941cb7 sock_no_accept +EXPORT_SYMBOL vmlinux 0xfda4f17b __bio_clone +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfddaacdc md_integrity_register +EXPORT_SYMBOL vmlinux 0xfde83930 key_alloc +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe08133d dev_gro_receive +EXPORT_SYMBOL vmlinux 0xfe15d98a send_sig_info +EXPORT_SYMBOL vmlinux 0xfe1cdeaa inet6_getname +EXPORT_SYMBOL vmlinux 0xfe4159d3 file_update_time +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe6a7740 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xfe6af7c2 page_symlink +EXPORT_SYMBOL vmlinux 0xfe7592b4 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe79d253 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe91b2ff __seq_open_private +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfee30fa0 blk_end_request +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff2ba167 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xff35127e pneigh_lookup +EXPORT_SYMBOL vmlinux 0xff465a99 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0xff480992 dump_fpu +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff708fd3 mempool_destroy +EXPORT_SYMBOL vmlinux 0xff87fbad dst_alloc +EXPORT_SYMBOL vmlinux 0xff9265f9 __bforget +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffb607f7 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0xffc7c184 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xffce035e fb_blank +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffd96496 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0xffdb82bc sg_free_table +EXPORT_SYMBOL vmlinux 0xffebb7ec phy_register_fixup +EXPORT_SYMBOL vmlinux 0xfff6c212 pci_disable_device +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x05a8ed0e kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094ac8f4 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12d1b23b kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x15d2af43 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x184b3591 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1877d813 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a9df35f __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e4580bb kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2322e039 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2428bbbc kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x25796f58 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x25f4f36b kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x26dbdedd kvm_report_emulation_failure +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x303cd63d kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3076b799 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x309b973d kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x349cacc3 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x37ba2181 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b7706d2 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4014a25a kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x428820be kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4579af42 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x48ba0467 kvm_emulate_pio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x49d309b6 kvm_load_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4a7cbe69 is_error_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4b107475 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x52ca92a8 kvm_put_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x545bc2f9 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x56b02f34 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x57e6c72c kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x58e88a91 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5937f8c1 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x599086dd kvm_handle_fault_on_reboot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5cd177c6 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6119072f gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x698b7414 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7189f7c3 is_error_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x72d79357 emulator_write_emulated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7bb631c2 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7fea8333 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8088f60d fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x82785416 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8618d216 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e7f9b47 segment_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x90eb92e3 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x945df76f kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x972a8080 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9f3ed207 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa03530ed kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa07a4525 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa0b9e09e kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa249c5ba kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa361bc65 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa56cbe8c kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa6242407 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa6b6a85d kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb0c455ae kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb469541d kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb75f41ce kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbc3129c1 emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd377dc9 kvm_mmu_set_nonpresent_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd94103b kvm_mmu_set_base_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc1369ba7 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xca6a9cd7 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcea5bf57 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xceabc74c kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd296def9 kvm_is_error_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd3c0a6da __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd49a5c7b kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd86efc54 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdead7e81 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe1913435 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe39e692c kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe5bfe693 kvm_emulate_pio_string +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe87027a0 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe9a1b029 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe9c4b4e4 gfn_to_memslot_unaliased +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xeda4e49a __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xffa208ea kvm_read_guest +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x67502576 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x6742637d async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x67056ef0 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x6c9aae0b async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x10953406 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xd8891e82 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x040f3be3 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x58b8eb95 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x90c79863 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xcf4443fc async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x5c453a11 async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xfab85e36 async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x2686e0b8 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x39e77514 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x4551a143 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x4a7817b1 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x6a9fc66f cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x77f40ca1 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xa2cc951c cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x13ee602f twofish_setkey +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x1a3c8243 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x45020dc4 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x7a581b4f btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x9863d6bc btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xaaf7d550 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xc9343dd3 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x3f0e03d9 agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x61f910d5 agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/scx200_gpio 0xb8842620 scx200_gpio_ops +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x01046d10 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x0590921b tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x0a054bf2 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x134d49f9 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1d4f8a95 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2f581f17 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x57ef9e74 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x5a416194 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x5e6dd8cb tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x61578cfe tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x731a76e8 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7f339ca6 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7f4a6937 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x97d2ccac tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9dbbf976 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa6627c9b tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xbc822273 tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc637412d tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xca035a54 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xcc909e99 tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd5bbfcad tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd62d22a2 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xdd72c7dd tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x1cddaf54 tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x5ac55b0c tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/dca/dca 0x0e2d7723 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x62bf850c free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x6456b131 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0xbfc94adb dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xd30e7c55 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xf64d8d24 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xf92f96b5 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x025055dc edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0a8144e5 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x25fd7880 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2cc8ff87 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3680b55b edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x4237f258 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x46147049 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x555d476b edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5918c56c edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5a11744f edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x661ab984 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x71df12f6 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x807e6a0b edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x83a7f6c4 edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x93d37ede edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9971a4aa edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9c63a788 edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa7c3fdc5 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xafc02a9e edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xafe829d4 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb305f2aa edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb4509c59 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc69ba5df edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf10c4ab8 edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0f0ba55e ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1823885a amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x4b01887d pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x7509830f to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x955c1f76 amd_decode_nb_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb98537cb rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xc2e765d2 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xd0f094a0 ext_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xe6ff7e0c ll_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xf8dec080 tt_msgs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x6198b7b0 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xcf5baf41 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x14582b30 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x16eaa30e hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1a8aa256 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x214d3a37 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x23f65487 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3f67a1c2 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x43742e8d hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x43fd438c hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x45df3460 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5b673324 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6486789c __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6e5e2212 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x77f80fa1 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x780c9bd7 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x842844d3 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x850ede75 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x85b46e20 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8a747a29 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8ae5d2f5 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8e389f35 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa887d036 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc4277435 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdb79bafe hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf72075cd hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfb95075f hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x4cda4585 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x9105d2cb usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x9dc4394f usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x71cfb489 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xa660ba93 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xa9520063 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xac82015c lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xb1052851 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x015f4f03 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xb3cb2980 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xb8e0229a hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x4be53a27 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x04852f0f wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x29561a0b wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x2b09a9bf wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7e638edc wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x980104e0 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x988b79a5 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x9951c9f9 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xaf779318 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb2c878d9 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb2c98e42 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb35c308d wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe14b847d wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2c9fc526 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2e8d16bc gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x330f9444 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x3a3043ad gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4344dc0e gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e2cb1b8 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e792275 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x5a18faaf gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x7881d14f gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x8381a7ef gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x893d8ef2 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xbc4cbcb3 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xbf6dc7f7 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc44c923c gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xddb66e88 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe9e05535 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x86d2618c led_classdev_resume +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xdcfd9303 led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xf258cf55 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xf796213e led_classdev_register +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x0b8ef590 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x4a48d81c raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1439ca2a ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x30071b95 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa29d0a86 ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x0fd1c95a saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x1af4cfcc saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x24aa5c26 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x30344a92 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x470b8e83 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x48f63d4c saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5b15d700 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5f8f093b saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x8a95eaee saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x945f1a20 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd605c9c6 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1ca010db saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1f9b878e saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4ddddd0f saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x76a206bf saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x7d2695b6 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x81af0b05 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xbc850fc4 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xd6d604f4 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0xd1f40281 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0xc1def3e7 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x1eecec75 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x2af4b100 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x90250050 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0xf9af47d3 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x79dba9f4 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xc4a3917a tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x1e53c329 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xfeeb6fd0 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0xe89352de simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x0da010d1 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x134ebf89 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x183873ff sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x344cc40c smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x40735177 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5468748a smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x6589b351 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x728cb00c smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74d9cdee smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7d2874d4 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x80e276ee smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8623706e smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x92ed41e0 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x97a99ea3 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xbb039df4 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xbe6247b0 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xbf1a0ff7 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd637559b smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe9b400c0 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x0deb58fd ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x17d920b3 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x5c89fdc5 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x667f392f ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x69e18549 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe6b28677 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xeffa747b ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x2facf4f1 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x3ebec94d cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x72ee7320 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x8f8f1932 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9b647ea4 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xb99c4ffc cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xbd734337 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xc4cd6ea8 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xdc82c7c5 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xf3e244c6 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfdf787b3 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0x3a3a88c8 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x0f8957fc em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x2508a5a4 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7488186f em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xa29a6d81 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xca70d26c em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xe3a91a56 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x0d9ee10b saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x2e2a5987 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x3ee2417b saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x5efd030f saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xf4799e80 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x3886bcd4 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x7bf032a8 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xa1f0ed03 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xeb18784b v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x0e5bb3c9 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x1fbf7b0a v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x32ac9481 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xcce29c1c v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0770205a videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1555b832 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1b361f2b videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1f967913 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x484653ce videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4fd4f7d1 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x80d6c8e0 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x877d165e videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x8a42a81a videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x90ab9539 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9ffdfa9e videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xac882603 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb358a691 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbbbb9d52 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbd6b5eb9 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc38a8405 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc7b956f5 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xcf5a643e videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xd97935a6 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdbc065ec videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdc38cce1 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdca312e9 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdda0f1e2 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe08103fa videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xfda02248 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x26bf096e videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x2c7c0127 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x34575639 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x390fd222 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5f020e0a videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x633bdfe1 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x78895a1f videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x82bbd4da videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x8e12a518 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa825c75b videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xba1477f4 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe8a24336 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xede41401 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf5a3f4c2 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x032c0308 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x371610ee videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xe8260a4f videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x229fa37d v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x2bbeceab v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x2f751fca v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x74f84c1f v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x9e82508d v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xb50b9673 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x15440704 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x768d3f6d i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x882ad5f7 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xa352918a i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xad9ac450 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc24ede98 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xd956a25d i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xeafd8798 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x01155b36 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x6c97dca5 mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x7fcf6efa mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xa1c6e8a7 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xb6525bd6 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xcbbecda4 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xed5fe09f mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x9f5bb260 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xf68dbb72 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x12d834f2 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x1e5538eb pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x32372dd9 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4cf33c1a pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x63c8d2fb pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x6ee9f561 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x724b83ff pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xbd58d03f pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xc2296053 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf2a96704 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf979bc61 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x28a8c3fc pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x387239d9 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x50578d51 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xd0adda9a pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xdabe6181 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x0bfe598e sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x67c5bcd3 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x6a3832a3 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x76a07240 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xd0dd6234 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x8166488a ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x05f70006 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x134dd2d1 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x55069d19 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7863be3c wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x79d9bdeb wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xb487112a wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc7068ae8 wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd1e859a7 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd2b19c08 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd839e53a wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe4a2afb3 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe4c5d4bc wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x0e550914 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x142c6e86 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x18285a9a wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1adc7134 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x20d0a03a wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x26e1d61c wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2d1f78a3 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x3ce217a6 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4ba0d439 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4e88befa wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x69f98c59 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x95bea879 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xa1a7228b wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xaf52139c wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc04a1d9e wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc76391eb wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x072c42eb wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x1616490a wm8400_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x8cc8839f wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xb2ac946c wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x2d6fdbe9 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x5b163786 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xded0c1c8 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xf8add75a cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x37ba2c32 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x82f72eae enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xa6ac9afa enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xcc1afc0d enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xe217de0b enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf01665be enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf4cde7fb enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x0b3eb0dd sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x219ccb56 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x313e271e sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x4e489d33 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xf08dfb4e sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xfec10356 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x133d556b cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x454d463e cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x6c57bd9d cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x9562436c cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xf38e5066 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x65b929cc cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x8e5b8e35 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xcf8522ba cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0x2a5f7d53 DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x1ab97dcd DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x75221dd6 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0339977b parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x28dfba13 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x30a182bb kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x420c8fa6 add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x4e11d7a0 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x532eab32 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5d5e14e6 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x735298b7 mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x84760d10 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x876cbe09 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x94eb2c51 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe43212a5 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe9309ece unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xeba7752a register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xefeacbde get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfa60f772 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x18ba25c0 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x48b3771d del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x758d9b2c add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xf006afef register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x1db58a1c nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x23a83f6f nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x4c3b7dc4 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x7b70e650 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xd69cc156 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x0345f7ff onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0xdb7b174e onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x1415b087 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x1c757d43 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x26e123df ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x434d7b86 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x44c8d12c ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x81180004 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x997c370a ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9a5065ed ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9cc671f3 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xd7b579ed ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf019fbe7 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf6e70a88 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x284521a5 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x28d3fd4b alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x55e1cea0 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x5b0de668 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xab6e5a45 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xac92dc74 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb9365352 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc913a967 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xcc0bed20 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xdb957550 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x1bad35f8 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x5add30c7 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x92594857 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xb36a63de register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x11e8aeae mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x130d3a2c mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1539a987 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x267f5229 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x27ec983b mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2b54dfb0 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x316c0006 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x331950fe mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x34239fb8 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x377d2530 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3bbfc2e9 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x418382eb mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4b88e3bb mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x56612604 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x57d1ef27 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6391043d mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x64236545 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x65baf5d5 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x776512a0 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7cd06c83 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7d6b3441 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7fe5951f mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8a714e85 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8cba7120 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8d4ed19b mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x90a2cb46 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x93939a1c mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9731eb50 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9ab5d346 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9c98d537 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9d4218cb mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9f134a31 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa20f73ad mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab5b87ae mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xabd83f69 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf0a33f0 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb3e6e5cc mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb47d04c5 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb9c13436 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbc692f71 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc6b5268b mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcaa456e6 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcac422bd mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcb0b103f mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xccc1af80 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdee245cf mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe0f8e381 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe5b36b7a __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe684bd33 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xec29eebe mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf0243703 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf39358ca mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfd5a68f2 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x867bf0e4 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xf930ad21 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x21ee8330 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x26e34de5 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x369ef3f1 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x68bce336 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x953e8512 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xf0324226 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0ca1461d usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x26b8f7cc usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2d7e2cc4 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x315245cd usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3ee023ee usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x452c21d3 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4f2b9468 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5979822d usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6480077a usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x741dd8c7 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x841bc1b5 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8627ae78 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8bfcb4f7 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x98324708 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x98828752 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x99b3b975 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa21bac29 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xba8b8ed9 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd8feaaa1 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdd400c02 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xee5784aa usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfb1d90e6 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfc52f3c5 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xff28ea58 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x0e6e7792 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x36a911aa i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3c963a17 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x47d9e7e9 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x481b73e3 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x68c8538b i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7d96b5bf i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x81f09e03 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x94359be7 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc7430a88 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe40d0a30 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe6220aa9 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xefc5dd1c i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xa3e19a0e libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x0da79a62 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x15700b92 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1777009b lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x23ee8cc5 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x2de0ed5e lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x2f6faefa lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x60e5f789 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x9205073e lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa1de19dd lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb11c0c88 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xbcd7bd7a lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xbf9c6a39 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xca6057c9 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xcb015fe3 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xdba5410b __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x076bba4b lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3467a56f __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3ee43536 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x511c7d91 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x9e988c84 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xbf9b6120 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd5578f1c lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfdee39f2 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x9c972735 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xe5d93b01 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x1b13dda4 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x339b8310 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x76776221 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x8f9e7cd5 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x91d7f455 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xe6c4466f p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xea4b8e39 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf8353025 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xfce6d2f5 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0b40f972 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1150b84c rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1d39eafa rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2434db0a rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x30893b43 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x30cad154 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3628b90b rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3b78b936 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3e9ac77d rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x487eb0a0 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x640c62ab rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x772e1474 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7c3b7a8a rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x962b4652 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9e987ecf rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaac9240f rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaea4d77e rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbc4acbde rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbc64e286 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd516a146 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdb6dfa61 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdf83fe61 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe13e7935 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xee100274 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1096bb05 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1d7a852c rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x6011106a rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x7dcbee96 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x8fc272ef rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xadabfb8a rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xc4a0b16d rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xca6bfe94 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xef78336b rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2484d539 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x31c2eb1d rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3801ba4c rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3bca06e4 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3c5b1a2b rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x789905a2 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7a226ba8 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x92fd2361 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9fbc86e9 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbd093f9d rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc53f8198 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xdf7f155d rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe0e5d1b3 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe6414f92 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xed96d58c rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf8f8b47a rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x271b09eb wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x5946fec0 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x63e1d546 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x94a4fa85 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0xd220116f acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x067dbd47 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x5c09188d pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x1ab92d15 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x434227fb wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x50b6dfae wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x8926b541 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd20788f9 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xef40e034 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x78d8ec35 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xbae8a40b fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0233f349 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0bd514d0 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x11ec0dac iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1cacf8bb iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2bd24251 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2e7d503e iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2ed114c5 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3001fea8 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3dcd7041 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41ba1d14 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x490a2999 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4fd75d9b iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x514932b8 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x531ff01e iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5550792a iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5866ec46 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5da17090 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x64e1d024 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6ed7f5bd iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x72761271 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x785408ef __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7884b8e0 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8cf95a4d iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9a045d0a iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9c15bdb4 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa2248fd5 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa4b88c0e iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xab523eb6 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb7bab325 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xba66048f iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc1038d04 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcb9b7d34 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xce6a965c iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd863b0f0 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xde2ff39c iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe3283672 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe391ff14 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xeeb868f8 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf21b9dc5 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf59ce6f2 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf779329a iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfebdb6af iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0543fc24 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x068c909d iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x23c927ee iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x53736279 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x7859fb4d iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8adc984e iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x9264d729 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x969bd43f iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa0ac3691 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa3bde8a2 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb4d6e097 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc4556b34 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xd1b29658 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdf011e2b iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf6f59f98 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xff38b71f iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x034462ba sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x084881c7 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0a6d720e sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0ffc902e sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1bce5134 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x360e980b sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3e087202 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x48fd6034 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x519d67c2 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x56b83a0f sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5db07144 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7b2100fa sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x84e0488a sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x98d9f0f1 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa05d94b0 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa1626f1d sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xab9b1c46 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb5f9b57c sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xcf6074b9 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd2ab1884 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xda5da260 __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xdebb4b7a sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfce1f618 sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x06f21d6e srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x126f97ed srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x187592b7 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x522b4058 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x79b56b5a srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xd7749576 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x15fb8ee1 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x34892ff8 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x474967fe scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x4e47c49f scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x6f152d77 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9b4c2d29 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xa14d30df scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xadf8c5bb scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xcb3ae3c3 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0d9aa4a3 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0fc38ee1 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x124fa902 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x23480121 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2573069f iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2e96b996 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x30b70cd6 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3dc27401 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4e192b10 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x533ee3b2 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x63a9741d iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x68540550 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x69bdae47 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6dc502f9 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x815014dd iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8b947d15 iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x97923519 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xaa422541 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xccd6de76 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xddbf4d39 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xed62b8f4 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xedddf3b7 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x1591cc95 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x39862cb7 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x9c9c8b3b srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb0549322 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb11cf06b srp_rport_add +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x41bd03ce spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x7cd19ab2 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xaa84dae9 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xb467f6e9 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xd2fc1512 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xfc9e5388 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4740fc22 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4e4b42d1 comedi_free_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x813c41b0 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xb5725623 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc57fdaf4 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xf5e55497 comedi_alloc_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xff70a9ee comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x86fcde20 das08_cs_boards +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xafd5d44c das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xe08b885e das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x3ddfb868 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xe9693292 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x0f90e79f ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x244c3c9e ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x49bf0b4e ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x6ca3b66d ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x7eb7a645 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x8b5f727a ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf43021b3 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf8e1849f ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x2107e67a ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x3ed7fe0b ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x49315cb5 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x7d37444e ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xa85decaa ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xfc54035c ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x0a1ee779 osd_WaitEventWait +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x4cc1b61c osd_WaitEventCreate +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x5432d87a osd_WaitEventSet +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x746d1786 osd_PageAlloc +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x83911c38 osd_PageFree +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0xa1b8d1ad osd_WaitEventWaitEx +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x012bc39d usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x062bb579 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x1177d610 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x11aae7b3 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x169512df usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x43db5b91 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x53ad7848 usbip_start_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x566b8478 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x63bcdb61 usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x8511aeb9 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xb4816f51 usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xba4f6f07 sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xcdc85ee5 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd61aacf7 usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xdd656ab8 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/uio/uio 0x5c12f465 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xbc5618d4 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xc3152687 uio_event_notify +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x0942c49b usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x972430ec usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x16557c8b usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x36f66d18 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x3edef273 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4ad62a6d usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x52f5a3d1 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x579aad7b usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x78e282ac usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xebf39378 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xfd7e305b ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x045386b3 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x1bd51e4b usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2275965d usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3c84e8ac ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3ec8e5ae usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3fabd763 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x49ee4546 usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x605e5f6d usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x8612f4ce usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x8645e16f usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x89286549 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa2943400 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xafcebcee usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb2eeedd0 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc3fa6345 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x045d6a1a usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x10211f77 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x178f4181 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1d960a79 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x234eda55 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x49932b73 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4bfa42a4 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4c17dcaf usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5214306a usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x573c8aa0 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x6500c926 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7985f35c usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x857a494b usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8895aa11 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8c088f42 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8e2ac1ec usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb1e0e886 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb2dbdece usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xced69c7f usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdab28889 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe16eea9c usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe5dfc678 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfc28cd15 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x09f3c921 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x1b712ae8 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x1c9d3eac wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x544232fc __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x82e3480d wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xdd1fc4ea rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0d6b3d43 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x19054e93 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x1935a58e wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x1a18efe0 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x330bae3f wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x47d201a2 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x55206bc8 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7e5e6a87 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x8bf022f1 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x91556a1d wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x932487d2 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9ab16bc9 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb1e2b0f8 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xbea4c4ff wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xcced65a5 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xddb3f3ab wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x04611d0b i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xac91732c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xb8f0517c i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x0328c921 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x061b758c uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1273e46b uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x4b3a9e59 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x56cc0f15 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x595fed42 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x984eac29 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xd47d215c uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x086d6c26 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x73ba154a __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x83a8f17b umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x8ec174fe umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xab7e4712 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb607dc7a umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc7cc7443 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd9c8067e umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0e9c300c uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0fdae85c uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x15b21b9e uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1e457d85 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1fa6e437 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x23b6aeac __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x27d324f2 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x43ebe71f uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4898a9ab uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x519e6d7d uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58af0e20 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5c9c342c uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5cbb4758 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6057079a uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6759db8d uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6de3b541 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6ec81fbc uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7d0dbfe0 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8667eb45 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x905e13d9 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98a99a68 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9a279842 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9f3e3f32 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa9a9be96 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb061f05b uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce3be8ad uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce84850e uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd77737f8 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd8bf2526 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdb5d8e10 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdb9fa157 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe47b4980 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xea1f7ffb uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeef9d8ef uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf633b84d uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf784b2c1 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xffdd866c uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xaea7983d whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x0339f8fe wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x077ed40a wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1148f94f wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1c885660 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x21309fd2 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x23d24e54 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x37e99453 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x481c2e44 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4e3e1921 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5062e970 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5dd3c7b6 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6addff4a wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x788fc32f wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x794f3db3 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x81b0a6d2 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x886502d1 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8bb51417 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8c412791 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x91b3857a wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x92f05d26 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa7b2ac70 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb6af36fe wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbae67a12 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbba412ba wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc5c70e96 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc8337482 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcf293c74 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdd998074 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe39a2a65 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe50c62b0 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf4e8ff2a wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf50819f5 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x0594f902 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x48c6112d ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x53d2e967 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x71cc3f14 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x80770018 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x873b4b0e ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xff246daf ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0xebcaed9d fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x1a0af947 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x81271e91 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x097a304f sis_free_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x38a8e4ed sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x12c45d11 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x3fb85651 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x8b44cb39 register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xcd9ea48e unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xcdac0c9a unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x47945bfc vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x7ec0e5d3 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xaf0060c7 vring_transport_features +EXPORT_SYMBOL_GPL drivers/w1/wire 0x29f97589 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x577e0726 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x98ccea54 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa7e840c2 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xdda4e3b1 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe31e0d41 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe67a8f40 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xee12e119 w1_reset_bus +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x7c9818d1 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x8d199097 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xd25c7a8a dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x68cb9c98 exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xdb1309f1 exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x041d9e14 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x0771df0b fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0x0a154b8a fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x218863b6 fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x40ec7f9c fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x978f2cdf fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xa5c65e01 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0xaf005041 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0xbb6885ae fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0xbbdb7a1e fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0xc759e847 fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0xc960d614 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xcb8b84f7 fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0xcdc68289 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xd1f9192f fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xd24b3053 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xf2cc8bf6 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xf96c7bea fat_dir_empty +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x114df281 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xaa1e7edd nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xb9dd7dc0 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcf0c644c nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xffd01bb8 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x58ec99cc nfsacl_encode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xebecc9c3 nfsacl_decode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x26d909a5 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x3ae9c155 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x6f95ed06 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x9284f362 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xab972221 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd87f42bf o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xe7faf791 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x1b2dad82 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3b999eb5 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x5d61f3b4 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7229103c dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xb826fa2f dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xda8b463c dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x58353820 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xcff0ad33 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdab1ec9b ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x0c1a7ee2 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x3a2e42d2 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x51d5704e garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x760e3f5b garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xab162c61 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xe5f0c103 garp_request_join +EXPORT_SYMBOL_GPL net/802/stp 0x040d0078 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xebc0b719 stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0xa395fe0c ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x0d70b6a7 bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0651538a dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1068be19 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1cb44a5a dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1cc14043 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x27a82268 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x27b263ed dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2be8c024 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4628ebb1 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x50e7771d dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x64a4c654 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x67c1d029 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6fca4a39 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70b1d967 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7675cddd dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x76e95f89 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x78cd2465 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x81bd6c77 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86e645f5 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8945800b dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9d39a27c dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9fe578f5 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa245ecbf dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa3c72a32 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbd34ceca dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc3adf20a dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd335d866 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd4ac45b8 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd4f342ba dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd5fa8dd6 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd8d404ae dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdfe4ae49 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xeb364688 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf3c0b9b5 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfe6e037d dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x0914ca45 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x5eb8a7d8 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x7a7a2dc8 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9719ce37 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xbb353cb1 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xcfc7532d dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xfeb2e81b nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x036f0be0 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x2b27fa1f nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x5a8a8431 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x62bee67a nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xac3cb42a nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xdbb87e26 nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xf782c537 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x044db9e6 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x05446491 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x4673f3a5 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x89f1ca92 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xd0646cf4 tcp_vegas_state +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x01a90a93 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x928c729a ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00f9bb39 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x014821e0 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x041013fd nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x09c70f55 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0bd104c1 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0d15e6b9 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0d3b91b4 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x12a291d8 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1a435845 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1b1eaef9 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x337e4362 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37c51d70 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x39ef17ab nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3a5b2278 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3b16beca nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4128b2e0 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x438e1b00 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x45e14657 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x46e3462a nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4fe0860c __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x52123f19 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x54cbabde nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x57b3669c __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5e748433 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x64ed9e96 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x653a8406 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6bcf6cf5 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x71b87982 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7a2102a1 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7ba5ea45 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7d556670 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8090def4 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x837402a2 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x87148fe1 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8b335c30 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8fe2806a nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x935535a8 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x96372a57 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x97c17209 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9c6e30f3 nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9f43e625 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa22ca4d3 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa411942e nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa7f3840e nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xade48c94 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb4d3a220 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbb8ae16f nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbc8888d9 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbcad88b8 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc4e1448a nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc5c08bea nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcf2f2fb0 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd1afbcd6 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd737e3cd nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbe52d16 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdd831717 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xde002d3f nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe5e08aac nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe77f1d10 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf3b9b257 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf8d81252 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x5626287b nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x823848a3 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x36d90744 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x53cf53dc nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x622a069f nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x6dbd79b7 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x9aa1d83f get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x9d468857 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xb98ac38a set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xba53b8ac set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcdc634e6 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xef4b1873 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x019c55b1 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3f190f05 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x9a79fb52 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x9b6596e2 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xe559b2ca nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x65880eba nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x68e62946 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x0d0f9233 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x136e644d ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2aa8c501 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2b16d0c1 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x3b17155a ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4cf7b09e ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x50172839 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x64727e2f nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xcab69073 nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd9ebdcde ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdd4b5f27 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xe27a0c1f nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x604a58f5 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x33a3c496 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xc575b5ec nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1db7b4e3 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xd6eb3001 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xd8c7559b nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xddb78d52 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xd805c761 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0e749087 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x17e9c4b9 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1a582d63 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x383724c0 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f432b51 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5ef3df1e xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x9534d6c9 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x9655d5e1 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xafbe0c28 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xcf99fc26 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf27e4584 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc2429b63 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xfc852663 xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x01552428 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x0b3e97fc rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x16ac5f64 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x2091016f rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x2501c8b5 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x32c511fe rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x3699f516 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x3a3445c6 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x3d3f5a24 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x3eb5ee7e rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x6275f8e0 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x739f16f4 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x80e8549e rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x83d190d4 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x8566933b rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x885b03db rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x8a0ae5ec rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x96fafe85 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0xa28390a5 rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0xd2d0d20c rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xe173b7fc rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0xe2b7ddab rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0xef4e9297 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0xefc6ee5b rds_message_put +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x36f35026 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xf030970f rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1a96aac1 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x394a4f1d gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x442c6e8f gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x68b50647 gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x68be07c7 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8e8e9c81 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb4e3599e gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc897be90 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xd26e7af8 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe00a7791 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf43b3bc6 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05ab70fd rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x07b44439 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0863b2b9 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x08cdf4a1 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ae9f89e rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b1b9043 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b59e216 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0c1cd60b xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0c4fe839 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0dd2cb44 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e64fdd8 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e81ab13 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ec9895c rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f9fd9c0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1066b54f rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x128868d1 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x13abb2b0 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15eebf0e rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16564c5f read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16b197b2 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1a24d204 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1bd11ea4 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c627d76 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f2abb7e svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23b4fe6d svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x283f0bb2 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2a3c594a rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2af12fd6 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2afe2bf0 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2c58bbce rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f9bf201 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x317c1870 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3231f51c svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3237e87a xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x323f2441 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x32c4ebfd rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x33640673 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x33b8e3f6 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x35846631 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x373e27c8 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38e3452b svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3b6d113f xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d3565d3 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d680f2d rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x40342632 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x44790f1d rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47b3937b xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b055c4b rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b4056ea rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d54d4b4 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4fb416ee svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50697f7c rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5110a8e5 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5181bafa rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x51d58846 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550547a3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59f8d8e9 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b296e91 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e0149d7 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x63bad4ac svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67b0955a rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67dd9d82 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6bed3b67 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e45cb99 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x70201717 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76038825 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x763b7dcb xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x773cd2a1 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x79bb0022 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x81eaa9d9 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x833d7abb cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8360bf31 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x858fffcf svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x864403c3 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x865558e5 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x869a052c xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86ed282a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x879e0327 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b2ee8ca rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b65d7c6 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8f01716b rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8f50ab44 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x902aea77 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x91e3ed57 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x929b940f svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x972701f4 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9826049e rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9a19d169 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9c24693a xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9c751a35 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ef180bd svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa274915d rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa4b524d9 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa6529032 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa6578ae7 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa71cd87c svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa78053d3 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad2a0e65 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb1c94a4a xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb387b246 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb411bf94 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbacbe3f6 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbeafe404 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc05f4066 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc06f5f43 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc13f05d5 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc1982286 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc1e07604 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc7fe544b xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9144914 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc928ebcb svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcb3122d2 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccc2372e rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcef7c36c svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf1ecf22 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd07562f8 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd2c5ff07 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd2d86cea cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd33d00ad xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5013942 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd520570e svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd6423329 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd747e70e xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82c728e rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9aadc61 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc30ecac rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcf0f132 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe02c79ac auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe2165e62 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd1ba52 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee5a4d4c svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xefd8f3f8 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xefdef6c2 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf21f1a73 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf301fb84 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf3d6357c put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf40bf7c7 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf66a6e02 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf822b480 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf8388c3b svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xffffd47c rpc_restart_call +EXPORT_SYMBOL_GPL net/wimax/wimax 0x12b54333 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x31a45d08 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3c550866 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x45bd7dbc wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0x47553203 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x519b67ed wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x5a915353 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x8be14b41 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xafcc7ad8 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb6fbbde8 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc6caf823 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd3583a09 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xdcc0e167 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x04fc6931 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x094d6100 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0a4db86e cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0e8c011d cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0ec7e849 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x15c79613 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2a0300d8 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2ff729f4 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x314897d6 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4269a194 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x52ae59bf cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x538c3e96 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5ff0a0f5 cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x623a5372 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6481f33f cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7575a88b cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7f57feef cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x88a45f30 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x907610f4 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9136c7de cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x95b16b46 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x981c5758 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9acf5963 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xaef25115 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb6677861 cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbaeea7cf cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbb5c7627 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xddb4c495 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe1e60652 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe99df5a0 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf9344996 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfc27ebd1 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x0814c5f7 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x5028a124 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x933d1fc9 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc7a0495e ipcomp_input +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x045a8456 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x106f6ee6 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x109b3c84 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1508fdc3 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x15533f5e snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1abac684 snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1c478ec7 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2375264e snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x25081383 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b5c0018 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2d0d19fe snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2dbdcdeb snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2e429eea snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2ea0e334 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3d12dd73 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3ec31cd4 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x43cad33c snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x43ec5804 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x455c9a7d snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x47791ae8 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4795fe2e snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x498c077f snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4a798b06 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4ca7b03f snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5155ca01 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x529c7562 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5bbb7b04 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5dc94e48 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ef879c2 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5f58f859 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x64157cc8 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x647e6e26 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6933f8c9 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6b458a66 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6cfc0f8a snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6f4ae69f snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6fad9b24 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x74fd0acb snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x76e8d847 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x774b3fdb snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x77ff7b73 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x78988bac snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x87b64892 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8ae0c64f snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8eb14d69 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9557dd2b snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x961529c2 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x996b8e09 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9f1225c3 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa095ccd2 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa3a79b86 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa5cee59e snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xae26df5e snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb7a9c312 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb7eabf19 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb8af2841 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbad58ba7 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbd887baf snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc38d4e13 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc3ae9288 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc6f1e008 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc846a848 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcafffaba snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xce8ec866 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xda0618dc snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdb16ebd1 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1b863a0 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe7688b99 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xece8b0b2 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf438c800 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf47de0a5 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf8ea977c snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfa640c3a snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfa892a36 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfffa11e1 query_amp_caps +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xe1142a7b soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xe2e4dd39 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x1444bcd7 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0xc72b6090 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x001ec1ff ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xd9459442 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xa4bec274 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x01e59cc0 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x44e9a484 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x12c4ad51 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x595eb36c soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x86bb60e0 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xaf322fc4 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x60ea6dc2 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x1f593ef1 pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xc353ce78 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xba574122 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xb6be1668 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xc8e6cbb3 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x358b8c8f soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x365718ab tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x33265b95 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xbbfb4c91 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x3290add6 aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x3a3a7730 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x6740dcab soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x6a8c7507 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x7031bd7b aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xa0033b3d aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xf800f8d8 aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x676b43bb soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xc0a086b9 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0xa6d325be soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x72e0f36e uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x976919d7 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x3591e732 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xdb14459a wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x39e85eff wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x404c2ff2 soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x60779f2c wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x61157841 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xdb50d5a0 soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x2ed2a9c5 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x68b11b03 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x41daf699 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x99aec1f6 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x6760208c soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xb2d1fe82 wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x0827e7d9 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xb14c3648 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x30346c34 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xd82736a7 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x98b88aab wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0xc5b17b54 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x948b175b wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xee9c2897 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x906f08bc soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0xc00ce49c wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x23a5ce8c soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xdf0ab73e wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x08889d4f soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x599ec590 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x24ac6650 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x2b45932d wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x2728b23e soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xbcda8204 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x3e33837f soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x778651a1 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x3ff1e948 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xd1f15a15 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x42861d0d soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x813ccba6 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x00b67b34 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xe56f153c soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x2c74f503 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x4a92f2ed wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x0759a6c0 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xcc068043 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x2f8d2594 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x74c5c84f soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x082be2fe snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0d72708d snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0fdc1acf snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x126e0bd7 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1738da84 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x196c815f snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1ba9d089 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2062cd30 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x23d5dae5 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x25106a41 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x286e225a snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x28a73d0c snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2afb4691 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3a246475 snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3da74407 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3f5d9692 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4128ec41 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x424f5181 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x43a45d02 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x482fe2c8 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x49d67c1d snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4c4f71d2 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4edd3b2a snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x53fdf8ad snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x55d93157 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x59e19006 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x60ec6b6a snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x618aae5e snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6535e18a snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6716874a snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69b9e006 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x70f31a85 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x71f2e4d5 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7c426190 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7d32318b snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8ab85df7 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8db9ce9f snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8ea7eb33 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x937c11c2 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x97909c42 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x980f536f snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9a7e22a2 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c1abe74 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9da4804e snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa17d1359 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa4e07c07 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa609e59b snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb292411a snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbdd66ef8 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc1842cee snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc2056476 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc30ad90b snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcd8b905f snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcea3f781 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd2eae567 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd6108903 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xda92166b snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdb7875c4 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdeee82a4 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe25b458f snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe4504f4f snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe5ef95ac snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe8786a36 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe998f6c8 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeb9cb9c1 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf1c2e824 snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf341b0ff snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf6bd71ae snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfaf6fd66 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfb76cd1e snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xffe384b4 snd_soc_add_controls +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x2e0a0be5 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x51958fac xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x7e80b9f6 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x9a79aa81 xv_free +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xc1f55d16 xv_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x002c801c ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x002ff5a3 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x003ed6a6 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x004b5bc4 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00844f16 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00886609 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x0104ff63 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x010b3618 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x014e6678 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01cb4883 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x02689b39 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x02a2c256 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x02af491c blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x02eec783 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL vmlinux 0x0315ac65 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x0326abd7 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x032a90da clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x03471072 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x035b7552 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x038a5be4 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x03b93f5d sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04b4a333 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x05361afb ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x0549a5a7 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05668d23 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x05b138d0 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x05d81a4f led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0602c5f8 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x062d7688 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x06332c01 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x065732ea __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x06734576 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x0675445f device_attach +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07c13a0c usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x07c15547 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x08607576 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x08cd6a79 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x094191fb tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x099ca432 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x09d26fe3 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x09d60450 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x09def0c7 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x0a52db47 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x0a6cb76f cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b95a25d ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x0b9ea381 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x0c033e4d rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c5a703e ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x0c720bf2 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0ca7e813 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cc12864 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x0cc747cc scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x0d186d6b hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0deb0ade register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x0e109316 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x0ee37c1f regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x0f4221f2 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x0f73520f klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x0f824a3b platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x0fb72924 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x100c13c6 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x10621889 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x10977689 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x109f830d tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x10c5f808 get_driver +EXPORT_SYMBOL_GPL vmlinux 0x10da02cd sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x111bf4ef page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x11508db8 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x11706152 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x122ae124 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x12fa5bd6 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x13286d56 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x13354608 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x135f3f2a inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13f3e126 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x14578ecc vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x1461872f usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x152088ab pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x156257e3 apic +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x15c3971c sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x1660bc58 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x1676e21a sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x16836e04 speedstep_detect_processor +EXPORT_SYMBOL_GPL vmlinux 0x1697136d hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x16ba7c9d crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x16c508be platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x16c57b0c unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x16e30641 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x16f76869 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x171b577b unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x1725624e securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x172e72d4 vdso_enabled +EXPORT_SYMBOL_GPL vmlinux 0x17620b0e tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x17c2d1ba crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x17c48c2d generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x181b19b8 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x182b4539 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x182b5261 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x188791cb crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18fa2279 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x1920230a usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x196b9375 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x196c40dc alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x197dbe54 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19a99234 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19d38124 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x19e176ed crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x19e9b649 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x1a1b56b7 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a51427b apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x1a719e85 register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x1a738b08 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x1a938737 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x1a9b538e ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x1ab60999 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x1acda5b2 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1b415d5b get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x1b673225 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x1b78eb36 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1be65e13 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x1c384541 scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0x1c5343cd tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x1c72df2b usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x1c7b6c2a eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c8f7de8 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x1cc734dd ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x1ce9294a sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x1ce92d83 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x1d09bb12 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1d1ff9af pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1da3c644 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e1a5984 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x1e6bd3a6 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e9a4e89 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x1e9f2d74 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x1eb8e160 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ebfec30 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x1ed56b1f tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x1eef6187 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x1ef0d300 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x1ef2a9f1 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x1f3d1b77 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fa2f0c2 sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x1fa85c06 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x1fb3014b crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x1fc9d0fc unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fe281bb pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x202adbfe ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x205dcd7a klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x20a6d0e1 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20e01bc9 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x2102b71e tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21bac431 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x2236f0be ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x224bfb4b simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x22651e84 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x227e0759 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x229c4600 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x22a8086d pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x22e738d9 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x22ec5fec tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x23253735 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x233735c2 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x2361c77c dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23869dc7 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x23999398 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x23d97e29 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x23e712df pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x2405ef3f spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x240b739a iomap_create_wc +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x246f4153 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x24840031 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x2485db0f xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x252e9c51 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x25c9440f eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x25cc7932 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x26096a3e kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x261c1ef9 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x261d5e3a blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x266a7dcd xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x26743e15 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x267cd1c0 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x26903a21 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x26bff93b usb_string +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x2714a01f device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x2758d94b vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27b7e57c ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x28142a95 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x285dd3d0 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x285f5c92 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x28b25638 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x29501527 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x295e7ae4 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x2980c410 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2a12208a ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2ad11698 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x2adf9483 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x2af90271 speedstep_get_frequency +EXPORT_SYMBOL_GPL vmlinux 0x2b46d739 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x2b55e36b sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x2b99966d ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2be7fb8e disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c1dee88 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c9c1503 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x2cbcccbc ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2cf8b8fe crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x2d53afee anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x2d57c114 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x2d8d1ad4 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dcfa6d0 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x2dd11777 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2ddbb98c xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x2ddf57e6 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x2e129147 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x2e3ff408 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e676558 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x2e6f307a rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x2e75263c sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x2e98a350 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x2ea527f1 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2eb91dfe scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0x2f01cbd2 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x2f134868 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x2f2c0f7d ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f6035fb ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2f8e69b3 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x3032b4cf platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x3095e558 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x30a2458f find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30cbc653 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x3151347e acpi_smbus_write +EXPORT_SYMBOL_GPL vmlinux 0x3157e987 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x315c490b generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3189d4df driver_register +EXPORT_SYMBOL_GPL vmlinux 0x31bc906a fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x31c54454 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x3297f425 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x32a23463 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x32b57c89 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32ed92a6 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x333fe85a crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x334ab03f dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0x33607d36 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x33f573c1 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x340fb6f7 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x34820c47 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x34a3a67d init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x356d8ea4 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x35b6203b usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x35be5708 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35fd0312 per_cpu__injectm +EXPORT_SYMBOL_GPL vmlinux 0x361b8930 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x361be448 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x36774110 pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x36905d64 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x3714af78 put_device +EXPORT_SYMBOL_GPL vmlinux 0x372c9ba3 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x374a690c device_create +EXPORT_SYMBOL_GPL vmlinux 0x375ea13d pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x377bd3dd crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x37846899 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37dc0546 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x383ad959 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x3841ab01 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x38840b4e __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x388e6eee ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x38a365f5 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38bade5f usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x38ea936e __memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x39287f45 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x39644b0f sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x3968d9f0 device_del +EXPORT_SYMBOL_GPL vmlinux 0x397bd824 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x39a5c423 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x39abd211 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x39fe896a ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x3a3b8dbb acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x3ac2ef70 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3b49bc9c debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x3b6a86aa kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x3bcc4bdf tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x3bd04670 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x3be5721e scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c2044f6 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3c3662bd ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c7e47f7 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x3c8f4df4 ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d0b7593 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x3d200ab4 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3dd5d829 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x3dd8ca28 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3e2004e9 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x3e2d9e38 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x3e416f33 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x3e757637 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x3eaedca3 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f01570a probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x3f0e7a1c crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x3f1f7e2e crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f26053f vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x3f5a1050 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3fcadb68 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0x400894c4 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x4029fe03 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x403a5be3 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40be2c41 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x40c1b4ea tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x4112967e crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x41167bbc ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x411b0e3b rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x411ead8d ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x41266a2b tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x4128bae3 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x413724d8 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x413c9b2a spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x416f4732 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x41c55f36 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x4202af60 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x423b1ff4 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x426f13b9 e820_all_mapped +EXPORT_SYMBOL_GPL vmlinux 0x42b364ef scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x42e960a8 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x42fd0e56 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x43299add init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x435c24a4 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x43831452 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x43bf453d sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x442fcbc2 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x447b2c51 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x449fee98 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x45235e56 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454d5c01 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45ca8386 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x45e06c1a ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x45ed5cec ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x4614bd58 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x461708f0 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x4648a74f driver_find +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46c7e1b5 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x46f99d1d regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x47c797c3 mce_chrdev_ops +EXPORT_SYMBOL_GPL vmlinux 0x480db607 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x482e3546 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x48cf53d6 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x49225de0 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x496e9f5b ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49db8db4 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x4a2f2cd9 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x4a808201 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x4a938927 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x4aae4047 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x4b2cf25d inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x4b480407 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x4beee8f7 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x4c2f30d4 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x4c5de022 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c977bf4 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL vmlinux 0x4cec82ee crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4d3b7584 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d525fa0 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4da310fc fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x4df56949 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x4e48b855 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0x4e525050 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x4e5a08ae nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x4e954a00 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0x4ed3bdde netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x4f0bce29 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x4f3cd4f1 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x4f4ec0c1 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x4f70aea8 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x4f72f7b3 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x4f95f211 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x4fa99616 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x4fdc8d4f ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fea1ce1 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x5068556f screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x50be29a7 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x50c89f23 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x50d1f870 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x50d8d5d5 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x5108b3fc acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x5166646b crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51b6a8a2 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0x51d9b99c da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x522ecbc5 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x5231e5f6 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x52496c50 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x524a8947 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x524d548b rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x52cad450 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x5305b89c sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x5370f0c7 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x537cbe5b blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x5381e31a ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x539b696f init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x53b0f1f8 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x53e19930 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x53e84ffc md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x53eaee02 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x54041ccb pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x545ac9a6 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x5489ffa6 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x5492ef1b kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54cfe1c7 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5501be06 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x553cbe34 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x5562b9ce rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x556de554 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x5572902f crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x562964e7 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56356e02 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x5661fb53 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x566cfca9 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x575a7d60 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x5770abf6 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x57908b83 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57b5541c usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x57ee9f0d crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x5800b6ce vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x580d713b dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x581638a8 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x581cbd0a crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x58286771 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x5862e910 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x58d3060e usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x5916acb3 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x59229dca ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x59a5dd5d sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x59ca3224 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x59d26f28 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5a035415 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x5a4e6d98 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x5a6ec452 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5af87a56 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x5b14085a input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x5b42c496 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x5b4741bc register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c11b85d spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x5c14f163 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x5c1b2916 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x5c3e7099 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5c7c6553 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x5c9b768d attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x5cb85118 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x5cf3c9f0 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x5cff9497 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d51bcf7 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d8d3d38 mmput +EXPORT_SYMBOL_GPL vmlinux 0x5dabc799 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x5dc653b5 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x5dc78542 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x5dce0b9a __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x5dd58b20 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e51671d platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5ee21757 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5f4c1489 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x5f85a9f8 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x5fcee70e crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x6098e7ad ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60b9915e pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x60c9cc2c ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60e5f765 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x60ea2a41 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x61747e09 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x617f23e1 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x61bb5a3d ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x6230e167 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x623347da cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x62458abc skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x6248e402 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x628235d6 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x62838f4b sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62b57097 ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x62c045dd sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x62ecbe50 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x63164388 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x63583f91 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x637b4f86 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x63d4a92b inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x6427cc50 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x6487d5b8 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x64b4788b device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x64ebe677 wmi_query_block +EXPORT_SYMBOL_GPL vmlinux 0x64f00ae5 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x657d1952 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x6588f728 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x6597940f crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x65a55648 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x65b9ccfe inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x661b1124 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x6680becf blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x668f4731 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66efda9c aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x66fab731 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x66fc6128 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x675571a4 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x676159b4 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x676655d9 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67aab108 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x67e032ac power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x68076b37 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x683756f4 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x688fa032 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x689a734c sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x68a15d9b __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x68a668cb hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x68d2d000 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x68e209b0 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x6912c2f7 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x69371c4d platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x69592fca dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0x69c8aa5d scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x69e492f8 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6a84c3e8 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x6a8f2aa3 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x6ad2337e devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x6b94c408 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x6bd7d72c usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x6bdc83a5 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x6beb6996 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x6c028158 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6c19e73b led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x6c2f1a64 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c6d5b28 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d63c52d blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x6d88ce4a usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x6d973dea pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x6e4129ed usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x6e62ab27 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e77954b crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6eb787ee klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6ec68efc unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x6f0b6f92 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x6f68a9fe ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x6fdb3840 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7015b73c transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x7037d79d k8_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x703a97f7 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70812ccf filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0x70bb6fe9 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x70de269a get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x71357497 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x714cf91e pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x71570f8b __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71673772 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x722c4f65 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x725ce595 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x727ca22e debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x727f9271 dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0x7285f84f unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x7318342d ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x732d5531 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x73712069 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x7384b902 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7385a893 scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0x739adef0 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73ff4175 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x75603a15 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x75868a39 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x760afe50 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x765a649b crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x7662a4bd register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x766c4b8e ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x76895854 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x769a1b6c ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x76ad995c device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x76eb9f82 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x76fc5a0a register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x770302c5 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x77373874 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x77639207 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x77d6e4cf inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x78263a22 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x78b4ca0a inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78f41f4e ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x78f88322 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x791febdd sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x7940f2e1 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79a3a092 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x79e3eb92 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x7a2892d2 iomap_atomic_prot_pfn +EXPORT_SYMBOL_GPL vmlinux 0x7a2a1c26 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x7a47dbc8 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7aa42d5d rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7ac1930a srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7adce710 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b4ef2ce sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x7b78e4c3 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x7b92c3bf ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0x7bb39690 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x7bcd2ded klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x7bd10024 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7bdfeceb inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x7c9b5e56 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x7cc72809 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x7ce566d2 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x7cf689e7 inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x7da0c43a crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dd419e8 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7de1ef1b blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x7df92e86 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e5104f8 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e7a3398 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x7ebda302 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x7ee35b05 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x7ee5241d usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x7ef99c26 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f220180 gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0x7fca2cb2 sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7fd119c0 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x7fd6e315 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x7fd91891 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x7ff0dffa spi_async +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x80033a8f regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x8035e81e sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x8042f86a inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x809c522c user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x80de8d70 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x811e64f9 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x817a9289 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x81993b74 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x822b042e pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x823aaff9 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x823bdefc usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x8271e59c platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82a46628 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x82ad64e1 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x82b1f2f7 user_update +EXPORT_SYMBOL_GPL vmlinux 0x82c25503 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82f48502 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x8312af96 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x83349ea2 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x834d8eee attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x83b793e5 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8439c65e scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x843ab28b net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x8442a557 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x8456341a ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x8480a505 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x8488df17 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x84a0afe5 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x858933f5 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x85bf72d7 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x85e3ae5d security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x8622dcfb blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x86321dca relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x867c684a setup_APIC_eilvt_ibs +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86925c48 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86d33632 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x86d840e7 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x8702a275 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x87118134 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87594404 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x877d175c tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x87bfc6ff proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x87ca9d8f regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x87dd1dc3 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x880b189a __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x8814774e mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x885b9de4 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x886736fc olpc_platform_info +EXPORT_SYMBOL_GPL vmlinux 0x88d1d262 user_match +EXPORT_SYMBOL_GPL vmlinux 0x88deeb17 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x88f05d9c fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x896743d4 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x897fd962 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x89913577 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x89ba11c3 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x89d078ab raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x89e7be23 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x8a174b1e dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0x8a1b6705 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x8a344131 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x8ad61b70 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x8ae8f1f9 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8b02bac4 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8b351659 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x8b5fc96c pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b7db255 device_register +EXPORT_SYMBOL_GPL vmlinux 0x8c01bef2 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x8c272721 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x8c3dedba pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x8c9d686d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x8cd6f309 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x8cd7a730 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x8cdf88b3 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d2ac62a usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x8d61e842 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x8d7b5cf8 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x8da17b42 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x8dce7093 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x8e2e50ae __class_register +EXPORT_SYMBOL_GPL vmlinux 0x8e3ea25c inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8e5e3a5f vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x8e70a28a device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x8e781f8d cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x8eae69ba kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x8eb0eedc fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x8eb58c6e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x8ebc7976 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x8eedd930 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x8f34c310 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8ff31464 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x902c15b8 register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x904be910 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x908c185f do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x909b964c usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x91102f82 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x9112d542 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x91209bf4 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x9143fdbf acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x91482eef usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x916dc402 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x91d5c046 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x91d78f56 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x91dacaa2 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x91ddeebf ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x91ec8933 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x92351cac find_module +EXPORT_SYMBOL_GPL vmlinux 0x9256cb48 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x9258ec86 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x925d42a2 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x92659c3b ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x92732398 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x92a558b3 use_module +EXPORT_SYMBOL_GPL vmlinux 0x92ad8d54 dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0x92b99a32 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92d74e64 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x935846e5 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x936fa447 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x93bf114b cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x93dda66d sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x93f0c249 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x9406d819 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x94139641 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94aa8400 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x94ba8c85 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x94de3391 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x95244dbd fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x9543bc5d device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x95697f48 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95758050 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x959675e2 ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0x95a3af9d regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x963055b8 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x96648075 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x967a4c99 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x968ec01d dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0x969fe29c rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x96be39af ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x96c3ec32 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96ec070d ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x96f6e9eb inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x973cbc9e rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x975c56a3 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x9784857e dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0x97982542 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x97c68536 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x98547dd6 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x987a79bc usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x988211a1 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x98b8f302 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x99319c2e single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x994a42ee usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99649003 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x9984c858 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x99b36608 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x99c3775c kmap_atomic_pfn +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a1444dc transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x9a802cd8 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x9a900145 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x9a95d243 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x9acff126 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x9b2d12da root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9b31d285 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bab1cf0 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x9bc8c8a7 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x9c214de7 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x9c43d07c crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x9c46d4d3 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x9c49375f scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x9c6606df input_class +EXPORT_SYMBOL_GPL vmlinux 0x9c664587 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9ce6a515 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x9d030b99 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x9d274acc register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x9d2b6a58 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x9d308c4d hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9d3dbe0e crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x9d5b0276 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x9d6b005e dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x9dcc508f blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x9e01f6d4 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x9e0ad4c8 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x9e14b28e ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x9e176808 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x9e5e0a6e ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e899791 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x9e98a608 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x9e9cabd3 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x9e9e04d0 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x9eae189b fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x9ebff902 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x9edbf61a ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x9edf10f8 get_device +EXPORT_SYMBOL_GPL vmlinux 0x9ef9b118 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f7192a2 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fd05d60 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x9fdfb957 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa0ca24f9 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0xa120d2c1 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0xa1596199 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xa1596d98 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa18f3d5c iounmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xa1947b2a fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0xa1abfdd8 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xa2526217 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0xa28d8527 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2d918c5 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa2f71244 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa32fd032 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xa36fad49 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xa3e8a6d7 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa43691a5 kick_process +EXPORT_SYMBOL_GPL vmlinux 0xa45243e9 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa473a69f ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0xa480add7 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xa4c20b0b crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0xa4d3259b queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xa53b1a10 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xa575c950 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5ca7fa1 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa649959e platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0xa6507b3e xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0xa66ca854 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xa68381e6 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa6e8bc35 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xa71753cd pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xa7a030e0 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa7e1e2a1 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0xa81bb815 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xa83f77c5 ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0xa884ed66 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa904a885 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa93198f9 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0xa985e7bf ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xa9b7afd8 wmi_set_block +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9ce1117 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa2ab82e pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0xaa3e3aea __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa5398cc tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xaa71bf99 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaab4a2a1 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xaaba3cd4 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xaaddf6ca blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xab1aa7f1 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0xab410444 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xab41bd91 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xab454c95 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab5e0f79 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0xab79ea8a __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xab814ef7 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xab88f456 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xabe4ccf9 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0xac073164 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc19485 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xacc8b52e driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xad133b47 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xad3ba9f0 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xad47b6bc regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xad63f11b shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xad7fac07 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xad9d593d ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xadb0b097 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xadbc3638 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaea85af2 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xaea916fd device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0xaec0e3ea dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0xaf17212b usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0xaf3092f8 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf483e9c ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0xaf720dde ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xaf88ac5c rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0xaf8b309c relay_open +EXPORT_SYMBOL_GPL vmlinux 0xafafd6fb anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0xafc7c996 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xafe0486a usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xb0223109 klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0d5cdce pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0xb0eedea9 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xb10bfb4e ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb16895a6 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb204d7ac bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0xb206b9aa usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0xb268fa2a inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xb2bcbeb1 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb2fb2963 queue_work +EXPORT_SYMBOL_GPL vmlinux 0xb3187fcc eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb33908ab dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0xb3ae8971 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0xb3ed2d81 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xb3f44e30 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0xb3f9122f user_read +EXPORT_SYMBOL_GPL vmlinux 0xb42a4256 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb4ef0d32 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xb4f44172 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0xb4f9d9ae i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xb4fc67d2 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xb51d85d9 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb54f9fbd driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb57fcbbe ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb591b5de rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0xb5c00b41 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xb5c75be2 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xb5d8913d register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb5f4d528 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0xb607f474 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0xb62c7898 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb69e9662 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb72e1b4b ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xb731f4a4 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2eb91 mce_cpu_specific_poll +EXPORT_SYMBOL_GPL vmlinux 0xb7f0365e __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xb7f6ecdd register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xb7fdd0df eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xb84e4c47 iomap_free +EXPORT_SYMBOL_GPL vmlinux 0xb880bf21 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xb8857caf class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xb8a2e0af fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0xb8aca7a0 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0xb8de734f mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb8e3affe rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0xb8ec50ef usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0xb8f05609 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xb90045b4 device_add +EXPORT_SYMBOL_GPL vmlinux 0xb93646fa pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0xb938e7cf inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0xb956f9f3 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb989bf99 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0xb9939485 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb9b17441 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xb9c8a51a __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba690e41 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbaa52d5d led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xbaa92adb skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xbab9937d xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbb0f479f ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbb1e85ea bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbb44c81c skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xbb4a1408 klist_init +EXPORT_SYMBOL_GPL vmlinux 0xbb73865c skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xbbab50cf disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbd17268 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xbbf0f945 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0xbbf67a19 dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0xbc3619e4 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xbc8d0ad4 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xbc9afe2b mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xbcb7c376 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0xbcfdcf35 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xbd17d5db unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xbd200a24 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd63f439 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xbdacd6a8 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xbdc135a2 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdedb69b dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe4b4616 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xbe584033 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0xbe8bd892 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xbe9111ce sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0xbea275de fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0xbeb88dc5 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xbedd8ca5 dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0xbf1f7d7e ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0xbf3e3ce5 dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xbf643a8f add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xbf991722 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbfe7cee6 usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc056e113 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0xc0d3e7da seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xc0eba55c __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xc1139676 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc15d8d93 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc1aa352a cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0xc1b6227b __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xc1c02779 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc24403bd sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xc26b0131 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0xc2726775 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3a341b4 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xc3c73bf4 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xc412887b ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc47fa2ce ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4af1d3b dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4dc5237 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0xc512626a __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xc51b5f4d transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xc58675c4 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xc58cdb60 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0xc5b81c92 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc5ce9aa9 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xc5d5ed96 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0xc5e2e9fd dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xc5e3dddf wmi_get_event_data +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc621b0aa ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xc63b7786 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xc64178d0 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xc654ea0e ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xc66dac40 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc67e4cb3 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0xc6a5e9af rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xc6e50cab blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0xc6ffa8bc platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xc77a662c crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xc7d8f32c crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xc7ec11f6 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc82fadca dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc8879bd6 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0xc88dc22b scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xc8af0f90 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xc8d08d0e ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0xc8e3814a pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xc91c43b0 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0xc9542bd9 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc95a9b68 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xc98a8950 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xc997d844 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL vmlinux 0xc9e6ccdf cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca01f51c tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0xca83d7bb rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca8eb935 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcac07dd6 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0xcada341e sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xcb02579e devres_find +EXPORT_SYMBOL_GPL vmlinux 0xcb7a989c fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xcba265a6 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xcc0c808b pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0xcc15b062 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xcc1e0c1c inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc335eae get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0xcc39a509 dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0xcc460af8 usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xcc4f07a3 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xcc576656 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc756ce8 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd29e7de crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0xcd2f83d3 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0xcd3aa7a1 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xcd45b43a crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0xcd75f893 dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0xcd7715ee proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xcd956324 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xcdc1612d acpi_smbus_read +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdd7913a __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xce33b02c bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xce388601 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xce96c44d __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0xcec2f13b sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xcec4d1ca __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0xcee5e752 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0xcf1207bd usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0xcf35bdcf usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0xcf5100fc crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0xcf537416 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xcf54ae65 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcfb08f3e crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd015ee48 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03fdcc0 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd0794547 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0xd08fb685 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0dcfec1 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xd0e44692 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xd0f0c83a do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xd1190955 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0xd12ac59b olpc_ec_cmd +EXPORT_SYMBOL_GPL vmlinux 0xd137168a driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd1445c73 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0xd1568727 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd19bbcea devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd1b303d3 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xd1d5049f ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0xd1fe0198 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0xd2229fb7 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0xd2527a28 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd29d8a82 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2af115f hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xd2e3a55d inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0xd343ffed regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xd3b8aa6a ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd3c230b4 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xd3c5a8d3 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xd3e0efa8 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xd401a9e7 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd47a9cb4 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0xd4887d14 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xd494ee54 speedstep_get_freqs +EXPORT_SYMBOL_GPL vmlinux 0xd49f211c device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd4cd8658 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0xd4e33be0 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0xd4e78b63 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xd5044664 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xd5051eb7 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd51dc300 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xd58c093d pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0xd5ac4ba4 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0xd5b89c2b class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd5e8152d __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0xd612c0c4 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xd6d63831 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd71af549 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd757577f sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd77c7656 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xd77f498e vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0xd78f8b9b dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xd7ac981d alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0xd7b03b89 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xd7b780b7 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd8455581 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd8b598bd __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0xd8f102b0 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0xd9947562 drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0xd9b037de handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0xd9e160df dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xd9ec277b task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda69732b usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0xdab97c9e __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xdabed5ab acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0xdac1cbb6 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xdae7119e __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xdaee4e24 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdafa0010 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xdb1a18de ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb2dc32e usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0xdb68513c usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xdb822384 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xdb919035 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xdba64f1c eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xdc0076e5 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xdc15007d class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xdc2b61bf usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xdc3bc370 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0xdc5f09e5 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xdc714560 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xdc7c5ef7 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xdccf55cf inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xdcdb5c36 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xdd0f76d7 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xdd20ae76 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xdd52c224 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0xddfbc729 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0xde0669e1 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde48df18 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xdec589d4 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xdf4f4dbf hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xdf6125f3 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xdf800229 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xdfa12bc1 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xdfa13ef4 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0xdfae2bfc aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xdfafb983 per_cpu__gdt_page +EXPORT_SYMBOL_GPL vmlinux 0xe0c2a41f lookup_create +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0f36f81 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xe118f713 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xe11b50f2 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0xe11f101b usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xe121da8c ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0xe12c491a get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xe1322556 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0xe1624427 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xe18c3536 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xe1b795b2 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0xe1f92349 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xe2426710 wmi_evaluate_method +EXPORT_SYMBOL_GPL vmlinux 0xe247343b hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe27551b7 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xe283b0bf disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe2f57581 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xe2f65024 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0xe33242c5 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xe34c44ae class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xe3b4586e sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe3ff607d pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0xe4024d72 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xe4148e6d sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0xe4643e3e ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0xe466891d ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0xe47f3111 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xe49601ad rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4a1b66b platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0xe4c331b6 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0xe513afc0 cache_k8_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe546dcb1 dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0xe5575878 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0xe566144c cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0xe58c92c6 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xe6111503 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6688254 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xe6ce6661 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xe6d57293 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0xe6def288 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xe715043f cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0xe7216da6 scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0xe7c3aab8 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe8152ab0 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0xe82f1cb3 queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe8cae7b8 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xe8fa4a09 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xe8fcc4df __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe9225ba0 dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0xe937b910 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe96baddf blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xe9b42ed9 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xe9c44a1b blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea226c65 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0xea36e733 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0xea3e6699 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea8ca258 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xeaa2d895 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb12cf57 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb58fab0 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0xeb9bebc4 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0xebcf95ef led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xec117296 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xeca5b626 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0xecfc21ec uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xed279546 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xed41eeb3 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xeda09c06 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0xede352cc ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0xedf3f1f1 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0xee2885aa ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0xee3b2b78 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0xeee7f9d5 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xef3326ba ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xefbc93ce ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xefcfee2f generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0xefd00d33 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe1af0b usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xefe21106 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xefef0909 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xf0297516 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0xf0568b95 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf06c1cc7 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xf1463412 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf14a5363 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0xf15c5bf1 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf199f444 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0xf1a4572d debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xf1a511e6 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0xf1db4b2c inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf1df0b94 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xf20f129a udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf2426983 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0xf2571d28 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xf25c828f sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0xf2910c52 device_move +EXPORT_SYMBOL_GPL vmlinux 0xf2ab6df5 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xf2c8bd11 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf2fd1bb2 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xf302ea38 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf365eff8 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0xf39b7d3c srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf3b03b7e blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xf3c1c0a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf3cdf819 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xf420a2b1 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xf4289d31 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xf44617f1 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4c9297b skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0xf4d5515e unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xf4ecab34 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0xf50bca1f fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf51a5a86 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf5388bd9 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xf53ed33d device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf5a64450 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5ff7112 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0xf6226407 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0xf62b3591 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xf6495c1a skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0xf66d4daf pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xf69b75b9 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0xf6b0ba5b rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf71a5b8b vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0xf7762d09 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf81a9fdc tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0xf863e82a flush_work +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf907fc57 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xf90d06c3 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9945569 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9d8de03 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0xf9eb5405 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xfa27a7bc usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0xfa35110e input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0xfa54ef64 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0xfa6e37f9 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0xfaa8a607 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xfac083f2 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0xfad96389 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0xfb072362 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xfb2a3293 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xfb3dbc82 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0xfb3ef4d8 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xfb5d2b97 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0xfb69281a kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xfb8c9507 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xfbb2dbf3 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xfbba15f3 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xfbf0facb ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc8b0011 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xfcad04ea free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xfcce8a14 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xfce8f444 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xfd02e89a spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0xfd5e339a pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe059802 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xfe129110 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0xfe267048 inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0xfe35f66a raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0xfe84c3c5 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfea48ba3 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0xfeadf5d3 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfee2b1d2 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0xff2853c7 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xffa3d115 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0xffc503d2 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xffd503ba device_remove_bin_file +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/i386/386 +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/i386/386 @@ -0,0 +1,10414 @@ +EXPORT_SYMBOL arch/x86/kernel/scx200 0x254e5667 scx200_gpio_base +EXPORT_SYMBOL arch/x86/kernel/scx200 0x35a3c008 scx200_gpio_configure +EXPORT_SYMBOL arch/x86/kernel/scx200 0x8cfa375c scx200_gpio_shadow +EXPORT_SYMBOL arch/x86/kernel/scx200 0x907665bd scx200_cb_base +EXPORT_SYMBOL arch/x86/kvm/kvm 0x8f17a233 kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/kvm/kvm 0xc1016d34 kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0x64560956 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0xcd4c6049 uPD98402_init +EXPORT_SYMBOL drivers/block/paride/paride 0x06bf8dae pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x136ea675 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x151362ca pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x34f87543 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x8f7ff29f pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x92071c26 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x93516e09 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xae3510ca pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0xd6f9dae2 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0xdc958696 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0xe1c6edcb paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xf47a0ac6 pi_init +EXPORT_SYMBOL drivers/char/agp/agpgart 0x02549559 agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0a9376a5 agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0c11e40f agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1e000c07 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x27a1ba48 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3098eb49 agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0x322eefdb agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0x37878766 agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0x38fffe0f agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3d25a72c agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3edb15ac agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x40477d6e agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x420d5731 agp_generic_alloc_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5473b70d agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x56f2981b agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5fb19b33 agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x65296cf0 agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x73daf645 agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7fc14657 agp_alloc_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x8a9358b2 agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9a3a74df agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa91dd6fa agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb78ce044 agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbaa0dc1a agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbf720a18 agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd323cf7c agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd3c15572 agp_backend_release +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd8cf8421 agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xdfe2c532 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf168bb41 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf57d6e4a agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0xfb5f4f0a agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0xfe551e18 agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/intel-agp 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x0c5f6075 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x22f963d6 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3122c097 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3a3e5139 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x43a8d5bc ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x45d1ba60 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x489fc33e ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x659d50e6 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x6f7187da ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x6f9d64c4 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x701701e8 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x74f3399b ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x835157d9 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x86b25802 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x873791e9 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x915eaa42 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa6766fc7 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xca416da7 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xdfcbc242 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf0926cc7 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf40fcb59 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfac5cedc ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfdc6b60a ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/nsc_gpio 0x17155f37 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nsc_gpio 0x52012cdc nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0xfae0706c nsc_gpio_read +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/edac/edac_core 0x1b64d9f5 edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/edac/edac_core 0x9098cdc0 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0xa4975e03 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04dd92ce fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x13fbb464 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1e47c914 fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1e4b4060 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x2c906371 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x455b857c fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x47876b3f fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d5d4eca fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x51674cd4 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x594ab6f1 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x692c046b fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x6bb7c021 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x6e42e6c7 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x77ed1a62 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x79522c9d fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8a1d2065 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa7e9ecac fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb31a46b9 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcc8d3a33 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe55215ac fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0xeb9cb740 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0xec809fb4 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf29b2cfd fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xfc9601f2 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xfe0a418f fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00273232 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x03eb4156 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04a5d867 drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06698516 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06cf5994 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06dcf170 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x076b04aa drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x09f56569 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0c2b2ac3 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ef149d0 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x101570db drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14381a05 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1882914c drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1afda45a drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b937963 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1bf78663 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1cfda788 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d192ecb drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d555b50 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x22c488e6 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23f8c2e4 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2480bc34 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2668ae90 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x26c84155 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x290ff3b3 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a2f99e0 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a34c517 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2b537681 drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ce495cf drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ce84ec1 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2d785b8d drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34076565 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x355b92be drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38456fe2 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3bd77c4f drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3db2a7c5 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3db8d5d4 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3e229c75 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4159952f drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x41779501 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4304d728 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x430aedda drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47f26a38 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x496295ea drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c73462b drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4e4127fa drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4f6cb2d7 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5194906f drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x52f926f1 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5361b778 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x546ed882 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5519cfc0 drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55b16799 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5722d86b drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5999c3a4 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5a6c484e drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5bd1ac14 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5cb9eeac drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x616a4cb8 drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x652a4fa5 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ebd4c10 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f546720 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7135f6f9 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7715565e drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77909852 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77bed803 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x791264ca drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x79ea0ad1 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7d4936a9 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8042c91c drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x82b2e01f drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x850010da drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x89ed9bc4 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8e8a0104 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8f252c2f drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8f42f1ed drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8fdaa73b drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9437683e drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9712b762 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x972401dc drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x97d56689 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9844c64e drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x99ad1bbb drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b3d6810 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b507637 drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f5ac519 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f78d51e drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa2493368 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa26e3c2f drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa6a2e450 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa7a414ba drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa85ec5e0 drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa89dbde8 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xadf81d52 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xafb145f5 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb018145a drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb2223f73 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb3d4701c drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb40f412d drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4159f47 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbbd516f9 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbfcb595b drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc08820bb drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6794f16 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc96e54cc drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcad213ac drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd1bf96c9 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd564b6b1 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd72cd546 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd9e3374d drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xde144017 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xde2a1208 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1214db4 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe206b96e drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe3670e3a drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe4f78f84 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe72e6436 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7c35aa6 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe99671ac drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeb7bcf27 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xec5c1faf drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf0099c23 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf167af34 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1cc1e0b drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf43ce29a drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf7283911 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf779d33e drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfb630f65 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfc74bff0 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xffa245cb drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0c2efb6d drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1437b841 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x364ae71d drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3de6e239 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x414e6aed drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5a87483a drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x642b18e5 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6658ac75 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x66dca03b drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6ca66a4c drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x72a73ac0 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x787c6efa drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x798eda5b drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x79dac74d drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8066eef6 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x83b884d4 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x887e7380 drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb4c7b184 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc1e14227 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc9fef843 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xcf28d4d9 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd103a29e drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe585dc5d drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf0673cdb drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf261b4b1 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x0b10cb9f intelfb_probe +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0x6b6c37f9 intelfb_resize +EXPORT_SYMBOL drivers/gpu/drm/i915/i915 0xd8b867cd intelfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x44e9eeea radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xfaee507d radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00bcea33 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x01c99cb0 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07787990 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x104300e8 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x161262d6 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17a98fa2 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ba8c0ef ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2423dc30 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2c0836b4 ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2c5baefa ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d673efd ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2ff04b62 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x31e8d3d2 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34704ea7 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x36ce0611 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c3c3af1 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3f1becfb ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x49fd9a24 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x50b6066d ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5455354b ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x56c42d22 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x594f03fe ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6277c681 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66666d70 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x67958c93 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x69291b8b ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6ac3d4eb ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x737fe3f2 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x765cbc82 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7a5ea726 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f8879de ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8786894e ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8d90f2c8 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8db796d4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x953d84d7 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa05d3e33 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa4b0ba5e ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa6559794 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa6c18839 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaf62f3c9 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5bb4798 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb5cf2fe9 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb9e927c4 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xba5b9e65 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbba2ecf9 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbf69f5ca ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc0a2c4f7 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2058ac0 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcb081489 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd9bfae56 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd9f8a738 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdd719e2b ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe44279a8 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe499fa5a ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf71af88f ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfb9c03a5 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xd44ce7f8 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xf3ece3a8 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x87629a21 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x89d0f328 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0x40963178 i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0xe6dec1d2 amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x020f5a05 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x042e385b hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x078c0ba4 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0ac9d1ce hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b239549 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x12469c6e hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x130b9651 hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x17d7310b hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2065b520 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x244edcee hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x28b227c2 hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x35be46e3 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x381bb494 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x39fe8223 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3a223cd5 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3bc78fcd dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3d75e787 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3f338cca hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x42219303 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x44898d07 hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x51582d3f hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x57746aa3 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x583cdc4c hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x58a493cf hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x62b9fd88 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x636957a1 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x64794937 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6f4f9b96 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x705824b6 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x75d7d317 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7932ae75 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7bbc42d8 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x81007b54 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x81ebf304 hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x84a9417c hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x85cc593d hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x886a1102 hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x887b01ef hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x89f67a1b hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8e2f5ba9 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x925c3663 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x94bce230 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x955c139d hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x95b32eb7 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9c5a35cc hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9ced17e1 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa77a8167 hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xabfe38f3 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xadaf5e6c hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaefbd374 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb23efd02 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb3f8d849 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb92b6e7a hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbdf4397b hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc1329369 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc2a3723c hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcb71347b hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd04baa5e hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd7c81069 hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe2b8ebe1 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf3737903 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf565f8e2 hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf6424500 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf71a60f5 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfab27536 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfceac93e hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x2b34ff53 ohci1394_stop_context +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x402dfb5e ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x6189da6b ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x036941e1 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x49fad04d rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x7a9ee473 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8a721ed9 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xb894c040 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc91bb9d3 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x05ce056d ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x123f78b1 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1c32488d ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x313c823d cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x315e5233 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x365eacdd ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4b9b9be3 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x528d9981 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6c98c539 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x7f785841 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x8856d93f ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa6b0b606 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xac840b25 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xaca5dc13 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb7d2bf5f ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc60a45b2 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc955ddb3 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x006d3592 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00ab72fa ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x03202990 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x069d8de7 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x09cd7488 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0cbc828b ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0de458d0 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0f79c513 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1f5e7f70 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2293f2fa ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x24d9df6c ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27c77c10 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2949227c ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2e0feb30 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x32d1c9bc ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x33cc99ac ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x36e753c4 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x39e44743 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3e0ad943 ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x400b1d16 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x40dab17b ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x48ecd4fa ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x51e6d6fd ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x524088bf ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x528dd816 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x57e47b39 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5fbc788e ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x63a7701c ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67c74037 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x74c8e299 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x78bb1d3e ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7a676a2b ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8737ffaa ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x88b434e1 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8a7ff4f7 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cc18263 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8ed601d5 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8fb1c0de ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9761006f ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9816d564 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x981dffd6 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9b247f32 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e8d88c9 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xaed44ad5 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb602639f ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb9f3a54e ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbe318e3e ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc1cf463a ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc70d50d1 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc879ae13 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcb62e8a7 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd5a8576a ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xda581f53 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdb0dba36 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xddc75fc0 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe459e9d9 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9816de0 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9cfffe1 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xedb9a13f ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xedf591b0 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf2796857 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf6ab792b ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf90d10be ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfb38cadd ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfb43e4ad ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfbe32ff8 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x0c709e27 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x74584649 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7abec68f ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x8137359f ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x87964424 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x91574bb6 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb706bf62 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xbe6bbdac ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xce0da080 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xed4d8331 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xf21d51cb ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xf82f375d ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x1feba011 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x26f507f0 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x43751d6d ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x59ea6388 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9c56fd34 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc0c80357 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf520d09e ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xfa2414a1 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xfb5fc850 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x0de8865a iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x360c636a iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x48aea250 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x5d51efb6 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x6ce43fc9 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xaaff00b6 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xc527292f iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xe3c2f2e5 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0b43fbb7 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x1b480f79 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3a8ffdaa rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3eb97ef7 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4a3d64c0 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5c368785 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6608749d rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x69597463 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7c3f5a53 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8d44e487 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9a6bbeda rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9fe9689e rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xa9912eea rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xbaf61825 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc5b79670 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xdbe41761 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xde14233a rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xed7344a1 rdma_set_ib_paths +EXPORT_SYMBOL drivers/input/gameport/gameport 0x86548b16 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x94f6372d gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0xb5703d58 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0xbc1a1d19 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0xbf446766 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xdaeaef86 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xe0f8f906 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xfc1c4777 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xffa9bc68 gameport_close +EXPORT_SYMBOL drivers/input/input-polldev 0x1c770157 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x2bd8dc9c input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x304e6364 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xda237804 input_allocate_polled_device +EXPORT_SYMBOL drivers/isdn/capi/capifs 0x2c54c957 capifs_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/capifs 0xd0bc06ce capifs_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x01bd1393 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x045cf070 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x0f9560bc capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x191187b7 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x1bd54046 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6b9c807b attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6e4f7009 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa7c4fd6c capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xab9573b3 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaff6a5a2 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc10fe128 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd100f954 capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe11f34ea detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe8ad9bd1 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x0f1351df b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x10faa836 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x1d9398ca b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x25fd72fd b1ctl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x36b188d8 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x4840e8b8 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x498bbd3f b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x535b469a b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x6032d25f b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x6dd25e56 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x7f0c9f1c b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xab75f22d avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xb3af7218 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd0c800d1 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xe86162c6 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xfc945336 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x143cf080 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x233ca0dc b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x25fafaf1 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x357c1f2a t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x770e1afb b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x8e156556 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xb109b89e b1dmactl_read_proc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xd2e99c51 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xead5b875 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xeed1be9e b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0xb0f0fa3f proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x8c0dc88b mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xaaea3a2c mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xb32849ff mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xc1eb729e mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xc1593b43 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xeaffc8c6 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x2844a899 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc0c558f9 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xc52f29b0 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xd94696e8 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x44618b10 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x86126cb8 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xbb0ea78b isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xde282f44 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xecd2412a isac_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x6940a20f isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x9c0f63aa isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xad0849e1 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x018d5b41 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x10a30b94 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x13288829 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1ba56223 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x20c29aaf recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2e0f1035 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3148d586 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x34b1e48c dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x422aef65 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x465de56d mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6615ff2e create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6f0964ba l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x729c829f get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x7dff0882 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9af84075 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xaa332e07 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xaf62b2e0 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb43ab68e mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb47d4e5e recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xcbb9a3ac confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd8711ca1 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf2005111 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xf162514c mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xac3760c4 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xb7bf0d24 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0x6330e091 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x73dc8ef0 mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0x2a110a78 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x8f798034 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0xc4fdb1db xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x09918e7a flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0f3ec9a9 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x10dd78eb flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x184e67a9 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x2167e44c flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x35429a3c flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3d379185 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3e5b58d5 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x4a18b6e1 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x582e16e1 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x7664e9de flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8934c16f flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa53290fa flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xb570dfdc flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xb94b591e flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc6d833a1 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd4e4a15d flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xda47dec6 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xdffa822c flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf1455539 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x5fb7d4bd bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x746f4134 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xa32efc70 bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xded52027 bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x2ca78656 dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x5dc2f844 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x82e46931 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x88df1594 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xad15f7f6 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xb29144ba dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd4264e7c rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd69a3909 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xf5a3ae62 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0x5b928475 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x045076be dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0b1001b6 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x14eb630c dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x20c1e900 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2322bd96 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2d7a5c76 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x310ae93d dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3a0a5116 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x46f83824 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x47c5bb16 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4809e71d dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x48a29ad5 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x51f4a25b dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5468d5d9 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5b503a32 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x68a71fa5 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f7f7d73 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f9c72e3 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x829f7256 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x85b52f07 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x923aa88e dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x92e3df32 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa2191b60 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa439b7be dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb10c07f7 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb2db2592 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb5b95805 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd2171b95 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd87fee09 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe7949e59 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xea32c3dc dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xeb7daf80 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xfcb62ae5 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x1fb2e226 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x3b9bfcc2 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x5fc5917b dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x61807bda usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x62ad06d1 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x6de6ba45 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xc9adf5f7 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x85834916 af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0c5e03b2 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x28a2229b dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x38608c8e dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x5a1c3679 dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x65a64f5e dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x68bf803d dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x71ae4396 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x82f0a1e5 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8bc4051b dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8e1012ac dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xa56d5ff3 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0x07884f29 af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0x60e6fc47 au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x7a645f72 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x3af066e8 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0x05050c87 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0xc841b427 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x392c67a8 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x90676321 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0x8a8c925a cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x1d981cc6 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x5b5e70f5 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x3674e7c7 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x46ed9ee0 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x68ef5a7a dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0xd7a35482 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x153f43e7 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x4eaa86ad dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x831912a7 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x9dcf8fc2 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa83e0b0c dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xc2e9f651 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x40e5e4af dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xc07a18f6 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x294e69f9 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x4e1134e0 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x6f4ae3f5 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x86ca641c dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x949aaa45 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x9a59466e dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x668cc2bb dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x70e570b0 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x748c45e4 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x9ec58361 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xd6a5d155 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x1f5ec9e1 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x5fc80ee8 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x72a1bb55 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xd3ea0429 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0xd0483e0d dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xc2e56485 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x4bfcc8e6 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x887ae748 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xd5ed45bd l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0xa0c963b2 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0xf6b6762c lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0x65aa17ee lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x21879ab5 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x56a29349 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x4b482a8c mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0xb71a6357 mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0x920eed1d nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x85d4a0c0 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0x8247465c or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0xad43bff4 or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0xf4c5b528 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xf948eed0 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x29cb73d9 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x88c78948 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0x0bd9a12c si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x0ca5620d sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0xda2d2a71 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0xe30877b3 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xde806974 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0xb9eb01df stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0xb4750c26 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x8d293a1b stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0x9c4d0ede stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x453208e8 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0xf1608dbc stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x7233de91 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0x694a8408 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x0c043881 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xa64e3811 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xacf5cd71 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x18b0a933 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x15366fdd tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8261 0xb0f1166c tda8261_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0x35c643bc tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tua6100 0x058c4a0a tua6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x0c372adb ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x3f5cfed8 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x857209a4 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0x85a91aef zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x49959d8b zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xc8806318 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x94b21f5b ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xbf751e91 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x04627e99 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x13407d8a bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xe5fce4b8 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x638179b1 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc66b10c1 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0x2f6b3d9d cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xb941cbcf cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x31a3fb69 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x8a518f10 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x6371b874 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0xd555cf4d vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x109356b2 cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x30432ca5 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x819fb6d9 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xd489a05c cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xe664cbe7 cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xe886f56c cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x1267be32 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x1e47ebee cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x43c62599 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x9b7997c2 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xbd4894bb cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xc098d2c3 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xfa618f04 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1b8d3eb7 cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1c9c817c cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1e880099 cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x20509b67 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x2c762ae9 cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x42ab51ab cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x458c6822 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4977b368 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x539cc0ce cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x5876dc31 cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x78680ced cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7c7fb6fe cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x8506e888 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x8bb0cc5e cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9234032b cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x96653ecf cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9e2ee662 cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa50b21d2 cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb29ece74 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc685bc43 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd5369276 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xe356e77d cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x901e88bc em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xe98fff94 em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x01d5d787 gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x12384d56 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x1811e0ce gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x4b321ecc gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x783aed58 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9e7fd213 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xd06dcb4d gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x2defde94 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x3982243c ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x5273ee07 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x6c532cf1 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x79cb0e3e ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8c400ef1 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xb1378e43 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xc5339bff ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd96a1472 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xdc24b5fe ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xef531422 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04049116 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x182cc16a saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x357981d3 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x58f3c73d saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x601ce7df saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x60783467 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x646b1e7b saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x66621f66 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x793474b5 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7c63cdb0 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x9c757158 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe8fcc32d saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x17fc5944 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x31ad319d soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x7cb0bb03 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x7faf1f42 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xd243799d soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/tveeprom 0x572d1dcc tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0xa4bac55a tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x0bae2df2 usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x16a2915c RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x407a321c RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x7701d84b usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x8673f940 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xa4dc3185 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xaaf48908 usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xda23a78d usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xddecac6d RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf5011f67 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x15393c66 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x5437bd73 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x88317262 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x4c66f0cb videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x50deb139 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x6b14f9db videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x84638b59 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xd37c63f7 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xdcd4d2b5 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x2198e037 video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0x27b31ec1 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x48854ddc video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x7648c477 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0x94732e96 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x95114e66 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xb9057d8b video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0xc242a684 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xc49b07f9 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x7e11e12e videocodec_register +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xcc8b396d videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xcebadbd3 videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xecac1f82 videocodec_attach +EXPORT_SYMBOL drivers/memstick/core/memstick 0x1d71e567 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x208f5fc9 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x25999ee2 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x2d1ef899 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x35fd4dc9 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5b5c17c8 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x6bd986e5 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x8c9b5da4 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xadd9d406 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xae651b21 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xbb4d73f9 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xc93d7940 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xca1af924 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xec42ef05 memstick_add_host +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x019786d5 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0c74d777 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0cb4838c mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x11bbb445 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x12805e95 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4516a3d4 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4ae812a4 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x53da5999 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5a909915 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5f235d41 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6509ed86 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6f419e54 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7acc1544 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8084c70f mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x83694000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8853279e mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x93b6fb33 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x96c47a5f mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa1e55104 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa4e4802e mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa65b5b01 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xae74e821 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb7b5d099 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc8e56597 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xcd9da952 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdfab4aec mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe8c22e1c mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfdf2314a mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x03db5975 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0bb27fb6 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x14818a40 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x16c44bb0 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x30b4545f mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x37f8dc85 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3c22f394 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3defe7fc mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x44eaa871 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x45526bf4 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4f2a83ac mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x56d3e2f1 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x618b75b8 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x64fc8c5d mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x75e278bd mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7918d9d4 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7eb3e09e mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x83949f19 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa27a66ec mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xab54c00b mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbdc8f4b9 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbfce0e45 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc5288e99 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc5c135df mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd39978bc mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xeef4db2c mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x000caba7 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x09428f9e i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x0a55bb1d i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2ebe527b i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2f73fda9 i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x30caa4a5 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x37479322 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3efae584 i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5b792524 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x73a773cd i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x7d4b5b3e i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9c252abe i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb2ce6357 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc0be3d69 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd09cf51a i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd97ba829 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xea7bd58d i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf475f78b i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x37074920 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x383b91ef ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x7e1c3774 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x7f408b66 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x9e617e3f ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xe45880c8 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xec3cf33c ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xf228ae93 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x7a5af6e0 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x9595f403 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x7d99472e mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x80914636 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0xad0009cc c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xf903da70 c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x53bb83c4 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xf720c647 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x026bf296 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x17d421ca tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x4a0aacd2 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x4e4397c0 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x54d1eb87 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x5f9ab970 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x8bb9ceab tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xa08947d6 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xaef175e7 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xbc4aba30 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xbdc0630a tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xeec23b69 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xfac9875d tifm_free_device +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0xedfa9778 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x03947385 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x34d38211 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x388089c4 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x417dd822 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7a2c7d38 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7aed2d12 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7d67f82a unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xd430b03a mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0xbdcd40f9 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x69305298 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x9a6c7bad del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xebbdc6e9 add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x85764070 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xf12e25e0 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/nand 0x6a6877de nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x782bddb5 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xaea16757 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xd6d0fd3a nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x96be1358 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xb2248c7f flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xe0060434 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xf4c04898 onenand_default_bbt +EXPORT_SYMBOL drivers/net/8390 0x0d9cc8e3 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0x19ab59a3 ei_poll +EXPORT_SYMBOL drivers/net/8390 0x223eb4c2 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x2b60d87d ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x5de9f12e ei_close +EXPORT_SYMBOL drivers/net/8390 0xb840b067 ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0xc062a065 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xda7f1bb7 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xf19939a8 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0xfa8142b3 ei_open +EXPORT_SYMBOL drivers/net/8390p 0x0f669bbf eip_set_multicast_list +EXPORT_SYMBOL drivers/net/8390p 0x2b7d1049 eip_poll +EXPORT_SYMBOL drivers/net/8390p 0x2e467e62 eip_get_stats +EXPORT_SYMBOL drivers/net/8390p 0x3775eccf eip_tx_timeout +EXPORT_SYMBOL drivers/net/8390p 0x5c2a58ff eip_close +EXPORT_SYMBOL drivers/net/8390p 0x6926916b NS8390p_init +EXPORT_SYMBOL drivers/net/8390p 0x95b54dff eip_start_xmit +EXPORT_SYMBOL drivers/net/8390p 0xb663e226 eip_interrupt +EXPORT_SYMBOL drivers/net/8390p 0xe25995f2 eip_open +EXPORT_SYMBOL drivers/net/8390p 0xe6b92df4 eip_netdev_ops +EXPORT_SYMBOL drivers/net/8390p 0xfa41de29 __alloc_eip_netdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x1aed7814 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x22091f04 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x27b66cf1 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x2a161091 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x3aa6c1e3 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6a1a1ae7 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xbb6681b9 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd2fc627b arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe10f691c arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xef97e941 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x2f761004 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x3b6b9f75 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x448806f2 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/bnx2 0xdd01f190 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xcf48a6e3 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1211a636 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x272dcfc3 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3e5f2146 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x47d30eb8 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x4e104717 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5fdd3dbd t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8af69661 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x95f9830f t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa1126b88 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xab2cd813 t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb4b484f0 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xcaf26d13 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xd75248b4 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xeeb137dc t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf80c1d1e cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfd6d7661 dev2t3cdev +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x0f12dd6f hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x497e80d0 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x6fd6bc88 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x9ecb3294 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xc7650f4d hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1161ca99 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x2a6ca95f sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3408f6ed sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x42cbf1c0 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x7f27864c sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x80c3cc2f irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xa8adb316 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb05384f7 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xc00967a2 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd43fabca sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x07cc96c5 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x75b0df95 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x8c60557a mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x9dcd9461 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0xb15b0134 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0xb3a2313d generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0xdb3be136 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0xf7b4c7d1 mii_check_media +EXPORT_SYMBOL drivers/net/pppox 0x7a4bcf0e register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0x83dff926 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x8ecd7e33 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x2bb4ad26 mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x711e32b6 tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x79a92d86 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x90046545 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xa482e9e8 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xe002702f tmsdev_term +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x07706d15 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x2d43ec8e detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x2e41f6de hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x39b7c337 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x60e6721d register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x6e231f3c unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa753c203 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xc8cd0076 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe537f2bb hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe5c67b0a unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe8bbe2f3 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/z85230 0x10c78988 z8530_dead_port +EXPORT_SYMBOL drivers/net/wan/z85230 0x213abac6 z8530_interrupt +EXPORT_SYMBOL drivers/net/wan/z85230 0x23aa9030 z8530_sync_dma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x31bb61da z8530_sync_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x3e25bf89 z8530_sync +EXPORT_SYMBOL drivers/net/wan/z85230 0x518119f4 z8530_describe +EXPORT_SYMBOL drivers/net/wan/z85230 0x53505b2b z8530_sync_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x5cd24d29 z8530_hdlc_kilostream +EXPORT_SYMBOL drivers/net/wan/z85230 0x75d99e12 z8530_shutdown +EXPORT_SYMBOL drivers/net/wan/z85230 0x869f0ed9 z8530_sync_txdma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x9a75cd9a z8530_queue_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0xbbae52fd z8530_sync_dma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0xc5ee5d94 z8530_nop +EXPORT_SYMBOL drivers/net/wan/z85230 0xc8634190 z8530_channel_load +EXPORT_SYMBOL drivers/net/wan/z85230 0xca636355 z8530_sync_txdma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0xd3f5175c z8530_null_rx +EXPORT_SYMBOL drivers/net/wan/z85230 0xddd977b2 z8530_init +EXPORT_SYMBOL drivers/net/wan/z85230 0xe3d80064 z8530_hdlc_kilostream_85230 +EXPORT_SYMBOL drivers/net/wireless/airo 0x33d82c8a stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x746dd2d3 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xc49cf813 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x0ff283e1 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x2fadda1e ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd4087dcd ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0x1f1fc926 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x586de32d atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0x7389cc99 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0152168d hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0f2ec3c5 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x17cc9062 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x17f2a304 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1b241a21 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2774f1a5 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2b814050 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x31ebf7d2 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3ae52f7f hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x59031554 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7128cd5e hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7ad57ff7 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7ddc0343 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7f55a924 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9b08c508 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xaeffd78a hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b45c4a hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb7bd6694 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcf93e86d hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd88893db hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe15c5167 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xebb2a024 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf25d42e3 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf3747906 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf8a0e35f prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf94b46ac hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x01cc2034 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x071ce68a libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1c544fd2 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x28cfa3d2 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x2fe02fbe libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x44e283e9 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x56dd4541 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5da1ad4c libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5fe7e8b5 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x6e1232cc libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8216da7c libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x89408f1e libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x951883c3 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb047c59c libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb846f601 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xec827e44 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf26b855f free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf3a9e9d8 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf44f29e4 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf6c690ed libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfb035a27 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0417bbaf iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05395b19 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x06482681 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x06aaf3f1 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x09816d17 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0aa915ae iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0b4da9d6 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0db6b2f3 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0fb833a3 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11a61c71 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11f93085 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x128066fe iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x13eb1c4f iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x148fe803 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1834c975 iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19c03e3e iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19cd2560 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1a10ed32 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1ca2e93b iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1f231180 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x210c5d4b iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x256f3afb iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x269d4702 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x26f77ab4 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x28436878 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x288c53c7 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x291bb0ed iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2936d925 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2efb5f86 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x398cbb82 iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x39b95871 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3ab53390 iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3c9aeac7 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x40ee2f32 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41a811da iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4218eacb iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x440f5e64 iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4432c2a6 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46497c55 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4668c10e iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46ef7f17 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4703664f iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49bb42a4 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x49d610ba iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4b513ddc iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4d890ab9 iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4e6472f6 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f858d51 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f8926b4 iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4fe10246 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x50d3911b iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x538414ae iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53e09c62 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x54084d84 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x542a154f iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x55f93ef3 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5693e6ff iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x584c12af iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x58b69337 iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5f43d2c9 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6171d0cd iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62727d56 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x64a5aa9c iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6c48b69a iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6d19f006 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x719c6a3a iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7707521c iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x778a1205 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x79518b78 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7a3f8094 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7c75b2b6 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7f70f77c iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8035cc52 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x82ff8784 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8617ec08 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8bc7ea56 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8c04c3d4 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8d557fce iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8f4903f9 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9244e25d iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9493f99e iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x95818ad9 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a60af0b iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9d07a47a iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9db422d7 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e55a4f5 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e86e8e0 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa0b830d6 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa592ff47 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa60c07c4 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa9a38762 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa33eda5 iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaad0846e iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xab2bd89e iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb316b26c iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb3c71934 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb5d1e2a4 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb9569d24 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb9f2cccc iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbb801c8b iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc0db1231 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1d9f654 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc45de257 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc461c3f0 iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4b4f2e1 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc6552997 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc8997489 iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb614988 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbecf0bd iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xccf020df iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xce89be07 iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcecc36f5 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcfa1d5d0 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd2246ad3 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd53abd22 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd5dd7aa8 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda471b60 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd9ad425 iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xddbc0922 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdefdac45 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe056d82f iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe1d26727 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe276fbfa iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe36eca2d iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4a2664d iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4b21bc9 iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4db0bb0 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe6e607de iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe75f6126 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe9ec549a iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xea667cd3 iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xea9c4e49 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xec529413 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeda758d0 iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf03d3a88 iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf0db387f iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf41450bf iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8ebf121 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfd7ab343 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xffd3774b iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x16e77084 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x1999cb78 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6ff7210c orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x837123b4 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd960030c orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe1dad60a alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xfad34d46 orinoco_init +EXPORT_SYMBOL drivers/parport/parport 0x20d86975 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x3f60c2ec parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x436a2b3c parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x775d7d61 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x7a2e52a8 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x7aa6f197 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x7aed105f parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x7d3cc195 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x86a9e048 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x8cea8a71 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x9209fabd parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x97d3f630 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x9b508d01 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x9b699baa parport_read +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x9db3c2c0 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0xa6c4fa2d parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0xad105f4b parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0xb87c1ed3 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xb9473796 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xbfd9c6e2 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0xc43449af parport_write +EXPORT_SYMBOL drivers/parport/parport 0xcaaa66cf parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xd113afa6 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xd3aeb3d8 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0xd442289f parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0xd7a5517c parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0xe042c8c4 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0xf4f72695 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0xf52c03de parport_claim +EXPORT_SYMBOL drivers/parport/parport 0xff876e00 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport_pc 0xa5c24b94 parport_pc_unregister_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xaefc847c parport_pc_probe_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x212b6b3c pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3d871ec1 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x51fa7643 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x601a3c79 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x875823f7 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x91fd1c81 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9a58f146 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa9c78919 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb459dc1f pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb693fac5 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc49b2e1e pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xca5b0388 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe0c521bb pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe19e22cd pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf57ac6c6 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x08fe8ebe pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1178779c pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x16981e9c pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1aa7c79f pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1dbc0088 pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x27884dfb pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x28f338af pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2c0089f1 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3064e4e9 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x30b35c41 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x31dbaad7 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x57fce80a pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f42a69d pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x73eb6d5a destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x85e6a2dd pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x94d3fe84 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x97c7c2f1 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9bcfc5d3 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb02f4f9e pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb5b9481f pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb94c5fce pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xba3c0c7a pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbf6fd141 pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc72a9a88 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcccdf419 pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdbd7d5e6 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xef22be9a pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xefe8965b pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf0520db7 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf1701a72 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf9139b77 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfa87cb18 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfcdb75fc pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x94b9e024 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0xf3080cf6 pps_register_source +EXPORT_SYMBOL drivers/scsi/53c700 0x29075a57 NCR_700_detect +EXPORT_SYMBOL drivers/scsi/53c700 0xaab21ca5 NCR_700_release +EXPORT_SYMBOL drivers/scsi/53c700 0xf13d9adc NCR_700_intr +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x18ca1747 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x75a33ad8 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8c071a22 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xaa2b8983 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xae4789d3 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xbf5efa46 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xfe01f750 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x04773c80 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x04c8c6b7 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0bda63ae fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0f74ce58 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x18b4a8e2 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1d969989 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1f5dcfa6 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2232da90 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2aef5399 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x353fd29f fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x379e8203 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x48398388 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4a569e37 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4fb52551 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x61f32b0c fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6bd8bcd1 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6d8d81d3 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x76400d69 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7c816ee5 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7fd55d40 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x84682a35 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x94af66c7 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x99054e13 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x99424d85 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa0741cd2 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa6cee79d fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa7d2e652 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xaa4dd726 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xacea58dd fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xad556bf8 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xaf29a0a4 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb2336d83 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb4f3588a __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc518171c fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd4fd3147 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe2793fd0 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe513d0cb fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe516e34b fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf8b49119 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfb060fce fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfc827597 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfc8e5f36 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0xf406fd3a mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0bc75623 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x11d48aa2 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x12f4684d osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x12ff9e71 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x188a51a6 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1c498869 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x267311a3 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x29ef57c0 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x36da2632 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3ef99f67 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x414888ec osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4ba767f0 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5199f20f osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x692fec46 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x73fc9f4c osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x894282d8 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8fe3c2f6 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x916896d2 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9f047dac osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa98ece39 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xaf26299f osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb55b033e osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc155923c osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc34562d9 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc34ee952 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc8e3250b osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd3be6df3 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe14963af osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe151586a osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe26e979b osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf8fc0ec7 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfa82ac6d osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/osd 0x03ffa765 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6c5feba7 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xc423d007 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00188c42 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x13d56071 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x582e505e qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x89b49fa6 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xbd07d527 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xd78b2ca9 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x14cf6662 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0x83a2920f raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x96b3000c raid_class_release +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x11853a85 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1408acbd fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1accacf3 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x237abe5a fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x2641edb1 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5d530ed9 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb128f51f fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb6352636 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xea7d02f8 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf4fa2350 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf68cd9e1 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf8775ec2 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0a47498b scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0fa0632e sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x25eb4efe sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3457b0ac sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x41359c68 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x434c1386 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x54267a32 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5e8a17e4 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5f9687f1 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x60bd5a73 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x625aedae sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x66fe9d6f sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x74f5f8bf sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x85670844 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x860e2db5 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x89b254f0 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8c7de589 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x95b85f53 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9efb56d6 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xad471857 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb64878bb sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd5f8c072 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd6892737 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdd45f67e sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe4636454 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xebee2381 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x2d94cb0e spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x81051139 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xc7d3413d spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xecffd6c4 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xfdeb3c4f spi_release_transport +EXPORT_SYMBOL drivers/ssb/ssb 0x09102ba3 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x1624ed70 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x1a519ceb ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x2c20e136 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x4524a502 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x482efdd5 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x4c4dbd67 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x5478c5d9 ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x5781fca0 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x5ba17f4b ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x5c555380 ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x5ff84e2e ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x693b2424 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x7a5f6a6e ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x802ef594 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x8a60fd33 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x9eeb011d ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xa3300199 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xae22a0bb ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc826c3e4 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xe11499a1 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xe7108bd5 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x053f62bd comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x081a8a43 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2030e414 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2b6eec58 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x423f9cec comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x69e21453 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x6c393637 comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x6c910eb0 comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x70752add comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x7094600b comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa6e071f4 comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa7f05da4 comedi_set_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbafed5dc check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb8e0bba comedi_reset_async_buf +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xc10dca85 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xd7628c27 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xfbb32723 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x116fc8a3 subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x4c2f92a5 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x5632db47 subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xe32f6edc subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x3fd66426 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x582d763a cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xac240a66 cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x09b92dc2 mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x0e8de9e8 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x17ae9844 mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1a8a3f4b mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x362ad6dd mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x3686aef5 mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x51e9acd2 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x606e8c87 mite_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x679983e5 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x7b497094 mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x87d31720 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x8a3b68ff mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x97a666d0 mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xb4cc2a88 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xc338f4fa mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd1951a12 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd8ee0133 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe68642fb mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xf2f51734 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfb3ba025 mite_list_devices +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xfc0777cd mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x39b023a5 subdev_700_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x51997b1a subdev_700_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0x9a0c21ae subdev_700_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/ni_daq_700 0xb2b7f12b subdev_700_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x4ddd93fc comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x042d55f4 comedi_loglevel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0488ce0e comedi_get_n_ranges +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cad1c36 comedi_get_subdevice_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x13e3042c comedi_command +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x194eb4ae comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1c5555d9 comedi_cancel +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x1ec0e2d3 comedi_get_buf_head_pos +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x22318694 comedi_set_user_int_count +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x262e9c18 comedi_dio_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x370d69d5 comedi_dio_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3cb614fc comedi_data_write +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3db41e4f comedi_poll +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3de6a4a3 comedi_get_buffer_offset +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x409d3263 comedi_do_insn +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x51da786d comedi_register_callback +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x52769094 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x628ed463 comedi_get_n_subdevices +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x671c2623 comedi_get_buffer_size +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x696272c9 comedi_unlock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x826bd656 comedi_data_read_delayed +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8e199bbf comedi_perror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x8fb4413e comedi_data_read_hint +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9b266320 comedi_get_krange +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9dde39b5 comedi_strerror +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa0334b40 comedi_get_driver_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa094eab0 comedi_get_board_name +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xa7c55c52 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xaa456501 comedi_mark_buffer_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb45b8b7b comedi_mark_buffer_written +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5396dad comedi_get_maxdata +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xb5c3ac2a comedi_map +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc4ec62b3 comedi_get_len_chanlist +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc7d949df comedi_lock +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd2a9a259 comedi_get_version_code +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd46a9468 comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xd48facbb comedi_command_test +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xddd89421 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe2208940 comedi_data_read +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xe38c6fb4 comedi_unmap +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xed5731a4 comedi_get_subdevice_flags +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xefd0c778 comedi_fileno +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf17e03df comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xf71581db comedi_get_buffer_contents +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x0a7cea7c cx25821_dev_get +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x5e64f12f cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x71d9b564 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x87b65421 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x9254ac0a cx25821_dev_unregister +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0x998591f1 cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xa0b1157c cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/staging/cx25821/cx25821 0xd0bbac95 cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x1cb36e36 vmbus_child_driver_register +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x1f07d908 vmbus_child_driver_unregister +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0x253f3d14 vmbus_get_interface +EXPORT_SYMBOL drivers/staging/hv/hv_vmbus 0xdf1a5ef6 vmbus_loglevel +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x0d8c87c6 iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x100931d4 iio_free_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x243f239c iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x27ff8f74 iio_allocate_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x2fd6c5e7 iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x35dc42aa iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x3a5df9fa iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x60f7253a iio_free_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x7481e9af iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x8086a382 __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xb6edaf14 iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcb842df9 __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xd01f983b iio_class +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe5e9973c iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xee0bb6aa iio_push_event +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x8f4da05a variax_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xb48627f6 pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xd441130c variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xf78a5c16 pod_remove_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x03309602 vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0937e61d vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x0bd616e7 vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x222daef4 vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0x251b9ed8 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x27e84b8e vme_unregister_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x3d0d3355 vme_bus_type +EXPORT_SYMBOL drivers/staging/vme/vme 0x3d1af350 vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x4ca7a0ce vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0x66227eae vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x6acec4dc vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x7fde2edb vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x8549d10a vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x92957be1 vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x93dff61f vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x94b2590f vme_free_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0xbbf17512 vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xd797b9a5 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xdab496a1 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0xdad37901 vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe02e2664 vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe693a6ce vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xf2b36734 vme_unregister_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xfbab795a vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xfc8f28de vme_new_dma_list +EXPORT_SYMBOL drivers/telephony/ixj 0x0093f7a9 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x754d3ce1 phone_register_device +EXPORT_SYMBOL drivers/telephony/phonedev 0x77913631 phone_unregister_device +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x3f00a452 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0x913efef6 usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/dummy_hcd 0xae6e754a net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0xf268eb2d sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x76a1b154 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x8cb21933 usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x2f363c3d lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x5a0dfc63 lcd_device_register +EXPORT_SYMBOL drivers/video/console/bitblit 0x985b2418 fbcon_set_bitops +EXPORT_SYMBOL drivers/video/console/font 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL drivers/video/console/font 0xbb99125c get_default_font +EXPORT_SYMBOL drivers/video/console/font 0xf7584a9c find_font +EXPORT_SYMBOL drivers/video/console/softcursor 0xee5d1f83 soft_cursor +EXPORT_SYMBOL drivers/video/console/tileblit 0xbfa36529 fbcon_set_tileops +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x567a92a5 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/cyber2000fb 0x9a482b8a cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0xcc2b2427 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xe4b1785d cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/display/display 0x2e01e3c5 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0xfe40e88e display_device_unregister +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0x5c527448 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x0dfd0561 g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x17269c3b matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x28dc25ab matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x0faf570b matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xa464a900 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xb0d88677 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xdda5c334 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0xea9b9319 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x0772c986 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x1e2f5b5b matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x2838907c matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x30573e84 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x4eab7853 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x150e4e21 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xf706d58c matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x000d824c matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x46a2f71f matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x744d1cc0 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xd62a57a5 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xfdd78966 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/output 0x3f513bd4 video_output_register +EXPORT_SYMBOL drivers/video/output 0x4d3898c4 video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x0f608c30 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x2a5252b4 svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x2e880a77 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x3a2703f8 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x41eb8718 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xa4c53c04 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xb7605236 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0xb353bebd sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xa7beacb7 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xb251b4ac sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x71ed0080 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x988a849a w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x041b1f1d w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4b42af54 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x672561b1 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb8befa67 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/wire 0x36c81607 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x896ea6fc w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x8b36265a w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0xbdf07447 w1_unregister_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x07058d0a config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x122b8c11 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x18276c8c configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x1ace8327 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x26d06ba0 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x426ba3fb config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x445b2b2f config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0x652fc94e configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x825887c3 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xbf7d7919 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xde330c9f config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xf3be71a3 config_group_init +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x19dfa499 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x20c6cbef fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x242f7431 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x35e4f857 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x38aadf64 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x4afe45e0 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x4c27205e fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0x5d095a0f __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x63f96884 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6902d07e __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x6ca7ad1d fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x71063adc __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x7fd51b69 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x8579f6f4 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x88387bc8 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xa80c568c __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xae79dd32 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0xb1cbbe57 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xb3d9cf72 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0xb5e09349 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0xbab9681a fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xbb72d9d4 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0xd948a9d8 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0xdcf93a0d fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0xe02fc65d __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0xe77082a6 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xfcce956c __fscache_unregister_netfs +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x1b255989 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x5ff341d6 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x72d246e9 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xd26b719d qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xdcabc483 qtree_write_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x80e0c27c destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x8b65bb8b make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x0430e708 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x07975fda p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x196a152d v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x1fc220a5 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x3455711e p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x45b0d2f8 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x6b754e6f p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x7b9582ff p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x907363f4 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x957c226a p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x963d3dac v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x9aa4123e p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9f0afe70 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xa07a647d p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0xa748c97f p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xaa32e98d p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0xaab8671a p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0xaddb715b p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0xb8e39195 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xcae61af3 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xd0faf92e p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0xd331fc1d p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0xde3d9058 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe78cfc2b v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0xec5eda15 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0xef7127b0 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0xf0e73b18 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0xf9bcaeb3 p9_client_disconnect +EXPORT_SYMBOL net/appletalk/appletalk 0x0c6b582a atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x4cedf0bf atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0x810b9d54 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0xb428d4b7 alloc_ltalkdev +EXPORT_SYMBOL net/atm/atm 0x05a86152 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x4a244dc4 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x4a4f3fb1 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x505e1597 atm_charge +EXPORT_SYMBOL net/atm/atm 0x50809dff atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x542ddbcc vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x55dce4eb atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x6d1ced27 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x7fa0d143 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xd5bb4922 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xebafe843 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0xf0cc6198 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/ax25/ax25 0x04e90a83 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x2ba5f098 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x34d2a6f8 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x576d77b1 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x7c594b58 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x8a6729bf ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x91ada39b ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x9c46a2cc ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xf2618dcc ax25_rebuild_header +EXPORT_SYMBOL net/bluetooth/bluetooth 0x10e9560c bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x12467929 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x135615ce hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x183a8378 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x25bda3e5 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x26e937a5 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4b39ee8f bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4d9ac2d7 hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4dabcf8a hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x5c8aa68b hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6bd96afd hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6cdf5408 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x70382f91 hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x760beac2 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x763d4b99 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7cd95070 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x81bf5ce1 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0x82adf579 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x83e9e678 hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8aa366d3 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8c8ef484 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8cb6d8c7 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8e1df89c hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9a67875d bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa777dc9f hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xaa69d70b bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xce8e02b6 hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0xdcb75667 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe4ac9b6a hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfb043f69 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfb5c259b bt_sock_poll +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x15d92d24 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x20a35745 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x46cdc2b5 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x4fc77ee0 ebt_unregister_table +EXPORT_SYMBOL net/can/can 0x259994eb can_proto_register +EXPORT_SYMBOL net/can/can 0x320e47f0 can_rx_register +EXPORT_SYMBOL net/can/can 0x6c2439cc can_send +EXPORT_SYMBOL net/can/can 0xa6e80901 can_proto_unregister +EXPORT_SYMBOL net/can/can 0xff179724 can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x0a19e7f5 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x1e87f0bf ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x368c944b ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x4dda8f1c ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x60e31f97 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x92859f15 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xcc1c152e ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x21427a32 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0x4416f6cb wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x9d540708 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xc46790e6 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xf21c3ecf wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x2973d1ea arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x43195123 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xfe44414e arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x25a10f10 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x2d31501b ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x84a61fca ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x21892c85 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2d35091a nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x6f944d0b nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x875b3313 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x95a199e2 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xb0ceb355 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xf2445536 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/tunnel4 0x62ca1316 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xa4099f98 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x25af1956 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x54f3a8c3 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x9e3e62df ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xf404262f ip6t_register_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x3c85b1a4 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0xa6b3b377 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x1b675247 ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x6b61270d ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x6bb30d96 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7bc07ed8 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8796d754 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb60f1ae4 ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xdde86874 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xf012b6fe ircomm_open +EXPORT_SYMBOL net/irda/irda 0x01d1fcdb hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x04792c07 proc_irda +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x072e026f irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x0c55bb63 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x2b7f063b irlap_open +EXPORT_SYMBOL net/irda/irda 0x3462950f hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x5408b412 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0x58740f68 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x5d9ab198 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x651a0588 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x6758f8ac irias_new_object +EXPORT_SYMBOL net/irda/irda 0x68b7447c hashbin_find +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6ef8e2d7 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x7098e22e irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x71e43508 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x747d6779 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x7621e908 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x76243bc9 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x781e2db5 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7a57b6f3 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x7ccf70e5 iriap_close +EXPORT_SYMBOL net/irda/irda 0x7fe1b19d irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x91dfd596 iriap_open +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9bc64b0a irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0x9bfab425 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0xa351bcb7 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0xa43fec54 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xb437b9f5 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xbf0b4637 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0xc0e0b96f irttp_dup +EXPORT_SYMBOL net/irda/irda 0xc14e9b6a hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xcd41236c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xd3d48758 irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0xd7172ff4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xd83afc69 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xd8bfb6d4 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe5260e0e irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xe60b8155 irlap_close +EXPORT_SYMBOL net/irda/irda 0xec41fe7f irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf36bd90b irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xf39b7fe0 irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xfd052c1d async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xfe3bf69a irttp_close_tsap +EXPORT_SYMBOL net/lapb/lapb 0x227174aa lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x288dec64 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x54f0f859 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x56e1754d lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x5d894f01 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x7e9656fa lapb_register +EXPORT_SYMBOL net/lapb/lapb 0xcf30f2bd lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0xf9737c12 lapb_connect_request +EXPORT_SYMBOL net/mac80211/mac80211 0x01d9fd18 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x05c26141 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x08928c8a ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x139e55e9 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x19c534a7 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x1be00c1b ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x224e5d80 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x2c3e2999 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x2f80fe0b ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x36a4c6a6 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x37efde49 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x3a9e8483 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x3ca0b02a ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x4da50668 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x56306b0b ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x60be5c70 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x618211d0 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x6632ad81 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x68f9f087 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x6b566263 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x80429b22 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x8343c1bd ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x83574483 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x9926ad54 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xa1e26f99 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xa212be89 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xb44893f8 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0xb59c83d0 ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xb641c010 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xb70a213c ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xbbf3e260 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xbd237c36 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xc360a52c ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xc4914054 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xd425cec7 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xd5078842 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0xd59c34ee __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xe37a9d7f ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xe961f338 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xf56d9d6d ieee80211_generic_frame_duration +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x48399d3d ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4a0b4847 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4abe40f8 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x7f3f4e51 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x881f8e10 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9160a5d2 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xb293a6c9 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xb6e14a9c register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xbd984a1a unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xef5e6143 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xfa9c2841 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xcb63ee3e __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xd6f17fec __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x820b3563 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x08255332 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x0987628c xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x5321cf3b xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x95c7c6d6 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xa47b0ef0 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xba4800ff xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcc782391 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xd62feb27 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xe992ea2a xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0xff73dee0 xt_find_target +EXPORT_SYMBOL net/phonet/phonet 0x2b41b283 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x4e274206 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x693d6d05 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x90104687 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x96670a1e phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xb63319e3 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xda2a7a9e pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0xf8244163 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0504bf64 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x15d6ff80 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2f1e02ac rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x32219fe1 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x36561b54 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3ca5755c rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3fa7d696 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x5b19392f rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6d184145 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7a29ed95 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7f032ab2 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x800c9c6e rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8145e12d rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9a93d363 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc19ec436 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/sunrpc/sunrpc 0x397da43b svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x007ff17b tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x023c3e47 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x1a688b76 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x27d8bb58 tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x2b727eef tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x2e472aa2 tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4ba3cfc8 tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x56e52bc1 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x64357d3c tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x8001e3d7 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x930bdca6 tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0x97688840 tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa333cfa8 tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xa936a24b tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xaa2861e3 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb01ffc2c tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xbb2b2504 tipc_send +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcf456838 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xe9d03308 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x31974f3f register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0xa1daf457 wimax_rfkill +EXPORT_SYMBOL net/wimax/wimax 0xe55a1aa2 wimax_reset +EXPORT_SYMBOL net/wireless/cfg80211 0x041b2fe8 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0a002195 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x0ec130de cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x11c05740 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x14d5cee7 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x18ec0808 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x1b55789b ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x1b5f80ae cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x1d26987a cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x214906c6 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x23139515 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x249c2a99 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x25dad631 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x2ce1eacf cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x31cfcc4b cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x3686de8c cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x3c7eba99 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x40b66179 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x4f0daba9 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x54b41216 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x5c0ddd61 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x5e684a0c cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x6135f23a cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x63543216 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6abde3d7 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x7bc729a1 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x8fc6e4f8 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x90eb5e02 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa459c45e cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xa59e8634 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xace4553c cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xb7817a48 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xbdb18fd5 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc931a03d ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0xc972b45b wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xd620b6b8 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xd662d525 cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xf991fa90 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/lib80211 0x0297697a lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x1b52ae1c lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x29032852 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0xb41b6f19 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xbb86eb8e lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xbc6ad4ff lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xecbaa1e6 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xf1c559a6 lib80211_register_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x0ed108f5 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x7e0ce458 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1ada4a99 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x5070f02f snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xbc9e0f97 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0xf6927721 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x15e12977 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x5f387e64 snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x17c15809 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x4ad3f518 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x62384d3a snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8a348811 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9df7af8b snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc482499d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd9072e1a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe6df29c7 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x37817459 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x08510948 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x0df56ba8 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x0facaf77 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1d542218 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0x22d3ecbb snd_device_new +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x37bf0deb snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3a4eee0e snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x3b3bc642 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x3e3c40f1 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x4210cce7 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x44176142 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x44f45545 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x5a14c00f snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x5c348108 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x5c547a5d snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x5d9b7e55 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x61885ff5 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x669802d5 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x6a2b8b2c snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x86a213aa snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x885f9956 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x8a5d443e snd_card_free +EXPORT_SYMBOL sound/core/snd 0x8b563814 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x9010453d snd_info_register +EXPORT_SYMBOL sound/core/snd 0x92855f1c snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x996a650a snd_card_create +EXPORT_SYMBOL sound/core/snd 0x9dab96bc snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa4d10418 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0xad08df28 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0xae471ea5 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbe5fb919 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0xc0f882a6 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0xc16e2386 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xc8478795 snd_device_free +EXPORT_SYMBOL sound/core/snd 0xc9e6f42a snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xcf1e33b8 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0xd1157735 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0xdc3fd0e9 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe33d7a6e snd_card_register +EXPORT_SYMBOL sound/core/snd 0xe3848eae snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xe6386ef9 snd_cards +EXPORT_SYMBOL sound/core/snd 0xe645e7be snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0xe9887f2e snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0xed2ad9b5 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xf907aa11 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0xfd183bd9 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd-hwdep 0x42cc5b35 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x30f5f1e7 snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x489cddf3 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x6ff6de86 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8aeef6fe snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x8c621967 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x008bf4e5 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x02fb7c11 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x03db4a66 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0d854deb snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x137596d3 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x178a3800 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x182ad967 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x1b94a046 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x1c81140d snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x2dd20711 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3b9e2fda snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x4377a0de snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x43e650d5 snd_pcm_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-pcm 0x47cb7cb8 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x514d0a5e snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x543963a4 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6d77cc82 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x6eaa0147 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x6f04f5e9 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x75cef034 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x85c73455 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x8762a92c snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x8830ec10 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x88cc66cc snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x93abe6d9 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x9a877a0a snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa68b2950 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xb9112950 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbc92a204 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0xbd57a507 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xc2bce617 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xc31d6646 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xc46e7cfb snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xc5517c8c snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0xc9a532c3 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0xca00b552 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd9d764f1 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0xde4f0302 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xed3a5000 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xffcb7763 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-rawmidi 0x077967f0 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1491cfa2 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2c8e6c83 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x44e28bdd snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4c896240 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4dd032ba snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5ea2b34c snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x91ad66e9 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x9bc3050e snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa70a4898 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbddc45e6 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0xc07d3062 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcf4ce249 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xda0ef5a6 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xde1e954d snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe53ce039 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0xec837338 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-timer 0x0d33ee09 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x2f683495 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x56c37ddb snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x60d2d3c3 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x63f74da2 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x6b08f820 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x7590304f snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x76d99e4e snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x80b115f6 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x958cc061 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0xcdc11bcc snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xdc0ac110 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xfd2ed7fc snd_timer_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x634f2741 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05eb3e34 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x23741a20 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x2ff871d8 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x2ff95357 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x34bb6daa snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x568dc533 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd042d336 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf6db44f4 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xfd4b76fc snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x166185ce snd_opl4_write_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x67bc9c37 snd_opl4_write +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x78c388e3 snd_opl4_read_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x819d9b7d snd_opl4_read +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xead09a22 snd_opl4_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x2804de84 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x2ce3c75b snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4710f0a1 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x70a7c61a snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xaa527dd2 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xad3b97f3 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xbf31e07d snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xd744d4f3 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xec43aee7 snd_vx_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x49fc10ec snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x622cd513 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xb958e206 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xd1227966 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xeb5e439f snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xf03c2137 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x4d44f726 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x93dabf12 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x9e885d4a snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xb44d9516 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xd2339465 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xf15b3cb3 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x2133458e snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x3ff9e282 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x663ea506 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd8cc850b snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x04b86482 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xf0ccd1fe snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x9b74296c snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xe0c99824 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x0e7156d6 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x19e21041 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x36fb2b78 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xcfc12405 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xd7179106 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-i2c 0x0736878d snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x231dab1f snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x33718317 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x8b14a5db snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0xd713d65b snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xf3ba3893 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x89ee9b8c snd_tea6330t_detect +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0xc517e096 snd_tea6330t_update_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x347f20aa snd_es1688_create +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xafe92c1f snd_es1688_mixer_write +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xc2e56dcd snd_es1688_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xe63c3c31 snd_es1688_pcm +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x01f68d63 snd_gf1_mem_xfree +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x1b4448fe snd_gf1_dram_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x1cc12526 snd_gf1_rawmidi_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x46db8d67 snd_gf1_lvol_to_gvol_raw +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x58f568f5 snd_gf1_alloc_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x6963c7da snd_gf1_write16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x7b8d2680 snd_gus_use_dec +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x82796a64 snd_gus_dram_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x896ce4c5 snd_gus_interrupt +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x8d3ac08f snd_gf1_peek +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x8d592635 snd_gus_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x9053b4ed snd_gf1_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x92523ba2 snd_gf1_i_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x947b4e7d snd_gus_dram_read +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x96d18cf2 snd_gf1_pcm_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xb991efb4 snd_gf1_stop_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc2ff9a36 snd_gus_use_inc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc43a5527 snd_gf1_atten_table +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc43e38b2 snd_gf1_translate_freq +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc78b0591 snd_gus_initialize +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc866e002 snd_gf1_mem_lock +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xcac898c9 snd_gf1_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xcb031bf4 snd_gf1_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd5598ebc snd_gf1_poke +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd797242a snd_gf1_mem_free +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd871058e snd_gf1_free_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd8a96682 snd_gf1_delay +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe10c2a91 snd_gf1_write_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe3c21ffc snd_gf1_i_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xef62fc6f snd_gf1_i_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xf3968be5 snd_gf1_ctrl_stop +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xf44f056e snd_gf1_mem_alloc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xfbb7a2c4 snd_gf1_new_mixer +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x0e096be3 snd_msnd_init_queue +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x2ae9be87 snd_msnd_DARQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x43b3d705 snd_msnd_send_dsp_cmd +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x5cbdfe6f snd_msnd_dsp_halt +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x6290d657 snd_msndmix_new +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x75026b24 snd_msndmidi_input_read +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x8c1afdb3 snd_msndmix_force_recsrc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x93766d18 snd_msnd_upload_host +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb26d7c4f snd_msnd_enable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb5d35c64 snd_msnd_send_word +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xc35fa134 snd_msnd_disable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xc713f5bb snd_msnd_pcm +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xd34e8af7 snd_msnd_DAPQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xede08cdc snd_msndmix_setup +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x17957257 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x321ef1c0 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x4c3fcb73 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x66a2a32d snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xb0df6c13 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xb9a6e8bc snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xc9a84ae3 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xd2154ba7 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe6d2db67 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xf92f55d6 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb16-csp 0x6e54ef45 snd_sb_csp_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x09ae534b snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x2d3d1f76 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x3689201c snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x3a4d6e7a snd_sb8dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x406457cf snd_sb8dsp_midi +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0xb80b8a9f snd_sb8dsp_midi_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0xc8e5c50a snd_sb8dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x18d9d256 snd_emu8000_update_reverb_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x38e77f9f snd_emu8000_load_reverb_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x447071c7 snd_emu8000_update_equalizer +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x4d3960ad snd_emu8000_poke_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x5383aea0 snd_emu8000_peek_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x5b100441 snd_emu8000_load_chorus_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x7d9cb265 snd_emu8000_poke +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x7f793a5f snd_emu8000_init_fm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x95790929 snd_emu8000_dma_chan +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xacd7bbdb snd_emu8000_peek +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xf043c6dd snd_emu8000_update_chorus_mode +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x0cca505b snd_wss_put_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x0f6dc038 snd_wss_get_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x1002f63e snd_wss_pcm +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x13cc348d snd_wss_mixer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x40d63487 snd_wss_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x41c7da19 snd_cs4236_ext_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x51998b97 snd_wss_info_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x68e36ec9 snd_wss_free +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x7f908a67 snd_wss_timer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x9444d9b4 snd_wss_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xc9eb4444 snd_wss_put_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xca4cd427 snd_wss_get_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xcab62a2f snd_wss_info_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xd707ae10 snd_cs4236_ext_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xd82e26b0 snd_wss_create +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xec840f5d snd_wss_chip_id +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xee38f634 snd_wss_get_pcm_ops +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xee5023e5 snd_wss_interrupt +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xef95f09f snd_wss_mce_up +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xf74a3afc snd_wss_overrange +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xfabc069b snd_wss_mce_down +EXPORT_SYMBOL sound/oss/ad1848 0x2b5d9dae ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x63c513b2 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xa3e16c6b probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xb197fb76 ad1848_init +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x61641749 probe_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x82ab3fe2 attach_mpu401 +EXPORT_SYMBOL sound/oss/msnd 0x1186f48f msnd_fifo_read +EXPORT_SYMBOL sound/oss/msnd 0x234f64e0 msnd_register +EXPORT_SYMBOL sound/oss/msnd 0x340a3ddf msnd_init_queue +EXPORT_SYMBOL sound/oss/msnd 0x54230dc1 msnd_fifo_write +EXPORT_SYMBOL sound/oss/msnd 0x5fb94ecb msnd_unregister +EXPORT_SYMBOL sound/oss/msnd 0x6587640b msnd_disable_irq +EXPORT_SYMBOL sound/oss/msnd 0x6601493b msnd_fifo_make_empty +EXPORT_SYMBOL sound/oss/msnd 0x8e3c524b msnd_send_dsp_cmd +EXPORT_SYMBOL sound/oss/msnd 0x9274d677 msnd_fifo_free +EXPORT_SYMBOL sound/oss/msnd 0x95d37486 msnd_upload_host +EXPORT_SYMBOL sound/oss/msnd 0xa1bcc420 msnd_send_word +EXPORT_SYMBOL sound/oss/msnd 0xade99e25 msnd_fifo_alloc +EXPORT_SYMBOL sound/oss/msnd 0xb3520772 msnd_fifo_init +EXPORT_SYMBOL sound/oss/msnd 0xdf0f59eb msnd_fifo_write_io +EXPORT_SYMBOL sound/oss/msnd 0xefdd1843 msnd_enable_irq +EXPORT_SYMBOL sound/oss/msnd 0xf4c4f662 msnd_fifo_read_io +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xb3051425 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xbd24079b sb_dsp_init +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x219dfccf midi_devs +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x42067ad3 audio_devs +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x6995e3f6 synth_devs +EXPORT_SYMBOL sound/oss/sound 0x6d653794 sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x795ca895 mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x7ec6418d sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x95be2690 sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x205f2934 probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x06c39455 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x106b290d snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x16a5ef29 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x2ed86ca0 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x40ee1bd2 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x471ecd7b snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x69c7a9e4 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7033dee9 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x71b1e5e3 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7436a172 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8d369234 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8da2aac2 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8efc99b4 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb0d5107a snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd33587a0 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xdee3aa2e snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf8a5dc53 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x2495fc2e snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x2ab8f0a4 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x312d6117 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x7a6203ec snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x951d72c2 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x97367d7d snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xa46b4a59 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xda01556f snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xdcef97e8 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x78439f8d snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x3b7d5bef snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x62e3b63c snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xae174bb3 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x061dcd55 oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x0722a09a oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x157c6180 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x2042b797 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x3269045d oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x3d177c2d oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x55d75f2b oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x64958e70 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x6a356740 oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x7027b9d5 oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x7af7b21d oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x7d83ecc0 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9db2f3fa oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa23b0e3e oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xc36abf73 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xc90a95d3 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xe410070e oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xe9b9b9b9 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf003bfb0 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xfbec479a oxygen_write_spi +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x30c0becd snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x4a217fce snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x620b929b snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x955adf40 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xda2db2f1 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0xf2cca575 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x67b0541b register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x974d1354 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xb8797242 sound_class +EXPORT_SYMBOL sound/soundcore 0xc31c6539 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0xcc61c972 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xeea31809 register_sound_special +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x1c863b8e snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x6f2bc3fc snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xa323ba5a snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xc293fe59 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xe140ec12 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xf8fe654e snd_emux_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x003e66b7 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0d443175 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x2d04ee0b __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x3f5da00b snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x521a2bae __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xab73a785 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0xd0f58ea7 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xd38f747c __snd_util_mem_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xb39fef7c snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x0102f631 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x1e56933f dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x5ee2ce36 dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x658ceaf7 dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xc0c33b5d dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xed23e507 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x118c1c6f lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x3aa80b55 lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0007f38f jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x0008ccac arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x0047ea55 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00546468 put_io_context +EXPORT_SYMBOL vmlinux 0x0054c4f2 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00648947 tcp_prot +EXPORT_SYMBOL vmlinux 0x006a596a __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x009d258f _write_lock +EXPORT_SYMBOL vmlinux 0x00b1f046 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00b40de5 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00c35963 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00e4893d vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x01471ea2 kset_unregister +EXPORT_SYMBOL vmlinux 0x01536803 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x01742d40 napi_frags_finish +EXPORT_SYMBOL vmlinux 0x0180c044 register_netdevice +EXPORT_SYMBOL vmlinux 0x0186d073 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01a7bdb0 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x01c19697 mca_device_status +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e387a6 journal_abort +EXPORT_SYMBOL vmlinux 0x01e6c04f free_buffer_head +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x022dce4b tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x022e45d0 clocksource_register +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x02434fff pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x0256389f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x02692e76 tcp_child_process +EXPORT_SYMBOL vmlinux 0x028b1cb9 input_grab_device +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02bc8318 try_to_release_page +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02e30df6 set_page_dirty +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x0308a2ee dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0x031315ab netlink_dump_start +EXPORT_SYMBOL vmlinux 0x031a92a0 blk_remove_plug +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x03673787 ppp_input_error +EXPORT_SYMBOL vmlinux 0x0372f326 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x039adf29 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x03ad5cb0 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x03b6fb06 vga_put +EXPORT_SYMBOL vmlinux 0x03b8a278 input_filter_device +EXPORT_SYMBOL vmlinux 0x03bce588 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x04096178 neigh_table_init +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0424166a invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x045b34e6 mpage_writepages +EXPORT_SYMBOL vmlinux 0x046251e7 dev_load +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x048fc7fd bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x04a4cb89 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x04b19a1e cfb_imageblit +EXPORT_SYMBOL vmlinux 0x04b929b1 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x04bce87d inet_select_addr +EXPORT_SYMBOL vmlinux 0x04cbdbae fb_pan_display +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x055cb2d6 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x0585423e cdev_index +EXPORT_SYMBOL vmlinux 0x05a41a90 pci_choose_state +EXPORT_SYMBOL vmlinux 0x05aa9712 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x05ba8aa6 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x05e86649 hippi_type_trans +EXPORT_SYMBOL vmlinux 0x05f698f2 pci_release_regions +EXPORT_SYMBOL vmlinux 0x060ad8e0 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x065e9010 vc_resize +EXPORT_SYMBOL vmlinux 0x06641db5 __napi_schedule +EXPORT_SYMBOL vmlinux 0x06739994 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x06a28d9a bmap +EXPORT_SYMBOL vmlinux 0x06bdf1d3 request_firmware +EXPORT_SYMBOL vmlinux 0x06d435a2 skb_insert +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06e4edb9 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x07091f12 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x072b03cb set_bh_page +EXPORT_SYMBOL vmlinux 0x073dfa12 generate_resume_trace +EXPORT_SYMBOL vmlinux 0x074a667d neigh_compat_output +EXPORT_SYMBOL vmlinux 0x07608604 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x076efcc5 skb_clone +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07a9c923 vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d14c29 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x07d50a24 csum_partial +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07eaa478 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x0828e285 serio_rescan +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x085a8e2c dquot_claim_space +EXPORT_SYMBOL vmlinux 0x08676876 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x089c1e34 blk_get_request +EXPORT_SYMBOL vmlinux 0x08b9e1b2 pipe_to_file +EXPORT_SYMBOL vmlinux 0x08ba3ee8 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x08ca08db __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08d7b4f1 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x08ec596a pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x0909ceae mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x0913f059 init_net +EXPORT_SYMBOL vmlinux 0x09144253 sysctl_string +EXPORT_SYMBOL vmlinux 0x0928766e scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x0933aae1 efi_enabled +EXPORT_SYMBOL vmlinux 0x0938f51f pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09dbebbd i2c_transfer +EXPORT_SYMBOL vmlinux 0x09f199be __f_setown +EXPORT_SYMBOL vmlinux 0x0a0ad901 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x0a1e87f9 atomic64_add_negative +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a3add39 poll_initwait +EXPORT_SYMBOL vmlinux 0x0a4747ff allocate_resource +EXPORT_SYMBOL vmlinux 0x0a921319 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x0aa58855 datagram_poll +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0aeb0b93 vfs_link +EXPORT_SYMBOL vmlinux 0x0af16d96 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x0b020f73 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x0b0c2dd5 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x0b0c8249 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b226abe i2c_use_client +EXPORT_SYMBOL vmlinux 0x0b397eb5 do_sync_write +EXPORT_SYMBOL vmlinux 0x0b3cde0d xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x0b6d6aef vmtruncate +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0ba2cb57 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x0bf45412 aio_put_req +EXPORT_SYMBOL vmlinux 0x0c4ad171 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c9482ee dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cbebb5e pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x0d0e03d5 ip_route_input +EXPORT_SYMBOL vmlinux 0x0d21b4bd __secpath_destroy +EXPORT_SYMBOL vmlinux 0x0d26a76d _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0d327d03 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x0d368772 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d4b77b7 gen_pool_add +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d6c963c copy_from_user +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0da2e891 block_read_full_page +EXPORT_SYMBOL vmlinux 0x0db72630 simple_readpage +EXPORT_SYMBOL vmlinux 0x0dc512d8 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x0dc83edb dev_addr_add +EXPORT_SYMBOL vmlinux 0x0e2cde27 proc_dostring +EXPORT_SYMBOL vmlinux 0x0e50c12e sk_common_release +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e5a74eb tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x0e659e73 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x0e69ba01 alloc_trdev +EXPORT_SYMBOL vmlinux 0x0e6ac13f __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x0e6b925c phy_disconnect +EXPORT_SYMBOL vmlinux 0x0e6facee dquot_alloc +EXPORT_SYMBOL vmlinux 0x0e83fea1 del_timer_sync +EXPORT_SYMBOL vmlinux 0x0e863837 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x0ebc9885 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x0ecbf742 ip_defrag +EXPORT_SYMBOL vmlinux 0x0ed48ec2 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x0f0cd632 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x0f1989a8 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f35ab98 journal_revoke +EXPORT_SYMBOL vmlinux 0x0f565d77 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x0f856768 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x0f871fb1 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x0f985d5a unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x0fb7bb59 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x0fc500ad vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fe057c6 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x102200eb dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x104bcf30 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x107a0b48 make_bad_inode +EXPORT_SYMBOL vmlinux 0x108c5c5a skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10943ad7 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x10ab4984 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x10cc0fa1 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10ff42a4 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x1160ab74 bdget +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x1170488d splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x118e3abd blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a18b14 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x11d3fe88 check_disk_change +EXPORT_SYMBOL vmlinux 0x11d916fb pci_restore_state +EXPORT_SYMBOL vmlinux 0x11e87aff sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x11eab6ae file_permission +EXPORT_SYMBOL vmlinux 0x11f09cdf mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x11fbe869 pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x120507ac idr_get_new +EXPORT_SYMBOL vmlinux 0x12055640 inode_change_ok +EXPORT_SYMBOL vmlinux 0x122071b7 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x12541b5d journal_stop +EXPORT_SYMBOL vmlinux 0x1273aa08 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x12abc21e skb_trim +EXPORT_SYMBOL vmlinux 0x12b73074 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x12d399b5 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12ed66bc dev_get_by_name +EXPORT_SYMBOL vmlinux 0x12f10736 udplite_table +EXPORT_SYMBOL vmlinux 0x1317c034 ipv4_specific +EXPORT_SYMBOL vmlinux 0x134ac3ab dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x1378e714 acpi_video_display_switch_support +EXPORT_SYMBOL vmlinux 0x13a4e265 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x13a7e998 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x13f370f4 get_empty_filp +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x145049a7 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x14778cad proc_dointvec +EXPORT_SYMBOL vmlinux 0x1478fa52 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x14816d1c blk_integrity_register +EXPORT_SYMBOL vmlinux 0x149b6819 llc_sap_close +EXPORT_SYMBOL vmlinux 0x14a04e10 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x14a30fa0 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x14af0cf7 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x14b6fd35 acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0x14fdbe65 f_setown +EXPORT_SYMBOL vmlinux 0x15049b8e rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x15311f20 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x154bb323 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x154f3d87 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1565ea6a neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x157bfa86 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x15bde047 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x15c1fdc2 sock_create_kern +EXPORT_SYMBOL vmlinux 0x15caee2f qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x15e9f129 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x15ef2dd9 kfifo_free +EXPORT_SYMBOL vmlinux 0x160b19ab submit_bio +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x161b7dda fb_show_logo +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x16527645 bio_kmalloc +EXPORT_SYMBOL vmlinux 0x16616cee ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x16b1c7d7 __kill_fasync +EXPORT_SYMBOL vmlinux 0x16ca5962 dentry_unhash +EXPORT_SYMBOL vmlinux 0x16eb9bd8 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x16ec788c rfkill_unregister +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x17140328 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x171a0410 skb_pad +EXPORT_SYMBOL vmlinux 0x173db03f bio_endio +EXPORT_SYMBOL vmlinux 0x1748ff8f pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x175adb0d tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x1780bcab seq_puts +EXPORT_SYMBOL vmlinux 0x17c3c8ae grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x181b6ff2 mempool_resize +EXPORT_SYMBOL vmlinux 0x1828341c inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x18394e06 nf_register_hooks +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x1845e7c5 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x18586db4 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x1859b286 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x185c4e1c pnp_register_driver +EXPORT_SYMBOL vmlinux 0x186a3dcc input_set_capability +EXPORT_SYMBOL vmlinux 0x187fea42 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x189d10b5 block_write_end +EXPORT_SYMBOL vmlinux 0x18b0ebb8 block_fsync +EXPORT_SYMBOL vmlinux 0x18c8fcf3 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x190b9c67 bio_add_page +EXPORT_SYMBOL vmlinux 0x196df70f skb_unlink +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x198431c1 xfrm_input +EXPORT_SYMBOL vmlinux 0x1985ed3c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19a4193f nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x19a85d68 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x19ab751f scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x19e652c1 key_put +EXPORT_SYMBOL vmlinux 0x19f37ad8 inet6_getname +EXPORT_SYMBOL vmlinux 0x1a0c0516 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x1a281c87 mmc_card_awake +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a64f89f sk_alloc +EXPORT_SYMBOL vmlinux 0x1a75caa3 _read_lock +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1aa93f61 kmap_atomic +EXPORT_SYMBOL vmlinux 0x1ab68ad8 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x1aca90ba set_groups +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b18dac9 inet_frags_init +EXPORT_SYMBOL vmlinux 0x1b2342d2 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x1b417938 page_readlink +EXPORT_SYMBOL vmlinux 0x1b45a859 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b6c2d6e security_inode_init_security +EXPORT_SYMBOL vmlinux 0x1b763e8c kill_fasync +EXPORT_SYMBOL vmlinux 0x1b89419f add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9b5573 follow_pfn +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bba8b21 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x1bd494c4 scsi_free_command +EXPORT_SYMBOL vmlinux 0x1bd826b9 udp_prot +EXPORT_SYMBOL vmlinux 0x1bdf4684 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c280fab pagecache_write_end +EXPORT_SYMBOL vmlinux 0x1c3830b4 vga_tryget +EXPORT_SYMBOL vmlinux 0x1c5902d6 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c9fec62 posix_lock_file +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce1b512 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x1ce7ec4c rwsem_wake +EXPORT_SYMBOL vmlinux 0x1cefe352 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1d0f5561 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x1d293f09 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d38c723 netpoll_poll +EXPORT_SYMBOL vmlinux 0x1d458897 vfs_readlink +EXPORT_SYMBOL vmlinux 0x1d4a8b81 skb_seq_read +EXPORT_SYMBOL vmlinux 0x1da3d2c0 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x1dac0c40 alloc_disk +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dc4f8e5 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x1dcffa4f inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1dde432e tty_hangup +EXPORT_SYMBOL vmlinux 0x1df9b017 journal_errno +EXPORT_SYMBOL vmlinux 0x1e2a2937 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x1e46379c inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x1e5ab592 inet_ioctl +EXPORT_SYMBOL vmlinux 0x1e62340d take_over_console +EXPORT_SYMBOL vmlinux 0x1e66df97 submit_bh +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1ea07302 __lookup_one_len +EXPORT_SYMBOL vmlinux 0x1eb95c8d generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x1ebbe412 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x1ecb9943 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x1ed766a0 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x1ee940bb dm_io_client_create +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f305993 kobject_set_name +EXPORT_SYMBOL vmlinux 0x1f306126 new_inode +EXPORT_SYMBOL vmlinux 0x1f36cc53 journal_get_create_access +EXPORT_SYMBOL vmlinux 0x1f4ea5b0 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x1f69573a kset_register +EXPORT_SYMBOL vmlinux 0x1f805094 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x1fb0381f get_disk +EXPORT_SYMBOL vmlinux 0x1fe53ffe mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x1feb6553 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x1ff69dd8 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x200f7348 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x2064b4e3 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x20750ce9 unregister_nls +EXPORT_SYMBOL vmlinux 0x2086e8ff ilookup +EXPORT_SYMBOL vmlinux 0x2086f511 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x209b81d6 phy_print_status +EXPORT_SYMBOL vmlinux 0x209eb2e2 create_mnt_ns +EXPORT_SYMBOL vmlinux 0x20a6e0e1 netif_device_attach +EXPORT_SYMBOL vmlinux 0x20c5ff78 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x20daa4c0 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x20f2f218 xrlim_allow +EXPORT_SYMBOL vmlinux 0x20f8218a cdrom_release +EXPORT_SYMBOL vmlinux 0x21031a49 destroy_EII_client +EXPORT_SYMBOL vmlinux 0x214ed05d __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x2173f299 override_creds +EXPORT_SYMBOL vmlinux 0x217896de kthread_bind +EXPORT_SYMBOL vmlinux 0x21d50a51 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21e8ef09 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x21ef6309 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x21f86378 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x21fb1683 get_super +EXPORT_SYMBOL vmlinux 0x2217e768 seq_open +EXPORT_SYMBOL vmlinux 0x221df87d tty_port_close +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x225570e6 dev_get_flags +EXPORT_SYMBOL vmlinux 0x226400aa tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x228087f2 contig_page_data +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x228c06a5 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22cde674 blk_init_queue +EXPORT_SYMBOL vmlinux 0x22da5105 tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x22ecd08e i2c_master_recv +EXPORT_SYMBOL vmlinux 0x22effd49 skb_under_panic +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x232928e0 find_get_page +EXPORT_SYMBOL vmlinux 0x232ed63a d_lookup +EXPORT_SYMBOL vmlinux 0x2349bcb8 consume_skb +EXPORT_SYMBOL vmlinux 0x237ccdf1 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x239c1109 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23f0e1f0 neigh_update +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x2402fdfd init_task +EXPORT_SYMBOL vmlinux 0x240ee02c mca_device_read_pos +EXPORT_SYMBOL vmlinux 0x2411a382 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x2418df19 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x241f1389 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x243ffddc idr_destroy +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x245e8337 journal_init_dev +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x246396dc mdiobus_register +EXPORT_SYMBOL vmlinux 0x2468d857 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x246ef15c tcp_close +EXPORT_SYMBOL vmlinux 0x249a2dfb rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x24bb4eb4 xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0x24e4bb01 down_write_trylock +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x252a582a drop_super +EXPORT_SYMBOL vmlinux 0x25301227 posix_test_lock +EXPORT_SYMBOL vmlinux 0x2544ab58 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x255fa92b input_allocate_device +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x2597f10a pnp_possible_config +EXPORT_SYMBOL vmlinux 0x25c972aa set_pages_wb +EXPORT_SYMBOL vmlinux 0x25d3e2a3 atomic64_dec_return +EXPORT_SYMBOL vmlinux 0x2613a6f2 kill_anon_super +EXPORT_SYMBOL vmlinux 0x261a1755 blkdev_put +EXPORT_SYMBOL vmlinux 0x267827a5 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x268cc6a2 sys_close +EXPORT_SYMBOL vmlinux 0x26995f58 pci_get_slot +EXPORT_SYMBOL vmlinux 0x26dd13ff pci_iounmap +EXPORT_SYMBOL vmlinux 0x26dd2483 dm_exception_store_create +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x2702aaf8 dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2727da5d _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x2761147d jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x2775b75d __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x279b402e scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x279b599a dquot_release +EXPORT_SYMBOL vmlinux 0x27a5abfe elv_rb_del +EXPORT_SYMBOL vmlinux 0x27b35c51 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27e23a75 mpage_readpage +EXPORT_SYMBOL vmlinux 0x27f054da register_8022_client +EXPORT_SYMBOL vmlinux 0x281fee95 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x2822c953 follow_up +EXPORT_SYMBOL vmlinux 0x28264005 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x283f1068 generic_getxattr +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28a3ed7a pskb_copy +EXPORT_SYMBOL vmlinux 0x28b715a6 isapnp_cfg_end +EXPORT_SYMBOL vmlinux 0x28bb48ea default_file_splice_read +EXPORT_SYMBOL vmlinux 0x28bca5b7 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x28e227d4 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x28ef1075 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x2901ccfc blk_end_request_all +EXPORT_SYMBOL vmlinux 0x290b59c0 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x290d4a6c phy_device_register +EXPORT_SYMBOL vmlinux 0x291f1ba2 dentry_open +EXPORT_SYMBOL vmlinux 0x292093f4 native_rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x2941d2cb tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x297aa2ce register_exec_domain +EXPORT_SYMBOL vmlinux 0x29b1c366 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x29b89fca get_user_pages +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29d1d2cb pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x2a060559 bd_release +EXPORT_SYMBOL vmlinux 0x2a0f9fc2 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a430c2f tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x2a509738 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x2a6bee79 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x2a9adee8 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2aa6a97e mmc_host_enable +EXPORT_SYMBOL vmlinux 0x2ad6b5c9 alloc_file +EXPORT_SYMBOL vmlinux 0x2aeb2800 mempool_create_node +EXPORT_SYMBOL vmlinux 0x2b00524a prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x2b05e3c4 generic_make_request +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b1acc55 vfs_create +EXPORT_SYMBOL vmlinux 0x2b224ca5 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x2b4ffd32 single_release +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb6fde2 __kfifo_put +EXPORT_SYMBOL vmlinux 0x2bc78a67 blk_plug_device +EXPORT_SYMBOL vmlinux 0x2bc95bd4 memset +EXPORT_SYMBOL vmlinux 0x2be8dcd8 mca_register_driver_integrated +EXPORT_SYMBOL vmlinux 0x2bf356b8 netif_rx +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c1921a2 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x2c4301f4 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c7f0508 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x2c8a9b88 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x2c8f5989 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x2c9874fe ida_remove +EXPORT_SYMBOL vmlinux 0x2c9e1075 dma_ops +EXPORT_SYMBOL vmlinux 0x2ca55bc8 vm_map_ram +EXPORT_SYMBOL vmlinux 0x2ca6fac2 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x2cec6e8d xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x2d01fec7 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x2d083c26 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x2d103eda kick_iocb +EXPORT_SYMBOL vmlinux 0x2d2656f5 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x2d348b47 open_exec +EXPORT_SYMBOL vmlinux 0x2d37342e cpu_online_mask +EXPORT_SYMBOL vmlinux 0x2d3e0222 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x2d6821ef acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x2d6fa4ec nf_getsockopt +EXPORT_SYMBOL vmlinux 0x2d79ad61 pci_target_state +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2da07a50 per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x2dabdecd jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x2dcb0123 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2ddbcd15 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2dfa8a6c scsi_unregister +EXPORT_SYMBOL vmlinux 0x2e2a9e65 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e312b0f sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e4a9433 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x2e4e9da9 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x2e5391c1 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x2e60bace memcpy +EXPORT_SYMBOL vmlinux 0x2ea4b568 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x2eb9a0e8 _read_lock_irq +EXPORT_SYMBOL vmlinux 0x2efe5e09 atomic64_xchg +EXPORT_SYMBOL vmlinux 0x2f287f0d copy_to_user +EXPORT_SYMBOL vmlinux 0x2f3c2606 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x2f423e70 register_quota_format +EXPORT_SYMBOL vmlinux 0x2f5a146c unbind_con_driver +EXPORT_SYMBOL vmlinux 0x2f7850d5 setup_new_exec +EXPORT_SYMBOL vmlinux 0x2f8d09f8 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x3042754b blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x30450f10 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x306a3e9f sock_wfree +EXPORT_SYMBOL vmlinux 0x30798f42 __free_pages +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x308df0b6 genphy_config_advert +EXPORT_SYMBOL vmlinux 0x30bd5ae9 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x30c6c611 __brelse +EXPORT_SYMBOL vmlinux 0x30da1f39 nla_put +EXPORT_SYMBOL vmlinux 0x30dcab06 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x30dcea87 inet_bind +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30ea9973 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x30f9a147 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x31146fb5 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x3121f2be phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x3139ce04 d_move +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x3153a97b set_user_nice +EXPORT_SYMBOL vmlinux 0x31554f42 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x31816c91 user_revoke +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x31c134e3 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31f35f06 get_sb_single +EXPORT_SYMBOL vmlinux 0x31fb6d99 input_inject_event +EXPORT_SYMBOL vmlinux 0x32080822 set_trace_device +EXPORT_SYMBOL vmlinux 0x3230ee03 pnpbios_protocol +EXPORT_SYMBOL vmlinux 0x3249f103 nobh_write_end +EXPORT_SYMBOL vmlinux 0x324e874e dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0x32502164 sync_inode +EXPORT_SYMBOL vmlinux 0x325614ec pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x325e9c70 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x3266fc2a noop_qdisc +EXPORT_SYMBOL vmlinux 0x326df9e1 vfs_stat +EXPORT_SYMBOL vmlinux 0x3274193a sock_wake_async +EXPORT_SYMBOL vmlinux 0x327b9441 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x327ba785 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32be6322 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x32e46d75 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x33074110 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x332b28eb dev_driver_string +EXPORT_SYMBOL vmlinux 0x332b9d2a neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x337d7e74 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x3392fdfa nf_reinject +EXPORT_SYMBOL vmlinux 0x33a20d77 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x33c59370 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x33d92f9a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x33efb75d jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x342f60fe apm_info +EXPORT_SYMBOL vmlinux 0x343585d8 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x343a111d tcp_check_req +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x3465bc0b neigh_for_each +EXPORT_SYMBOL vmlinux 0x34896788 __devm_release_region +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34c09116 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x350a11d6 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x350d2a75 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x352609f7 pci_bus_type +EXPORT_SYMBOL vmlinux 0x35311ccc jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x354c57d2 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x355e1a5f scsi_register_driver +EXPORT_SYMBOL vmlinux 0x35b16710 sk_filter +EXPORT_SYMBOL vmlinux 0x35bf3a1f register_md_personality +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35c7a441 seq_write +EXPORT_SYMBOL vmlinux 0x35da2e61 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x35da5e3e dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x35f0faa2 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x36024ddf dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x360e3710 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x361b455c inet_put_port +EXPORT_SYMBOL vmlinux 0x36312486 registered_fb +EXPORT_SYMBOL vmlinux 0x3638cb05 inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x36699aa0 is_container_init +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36913562 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0x36ced0e5 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x36e2fd84 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x36fd351d dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x370d1e17 nobh_writepage +EXPORT_SYMBOL vmlinux 0x3722b3c2 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x37276ce9 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x372d78ab lro_receive_frags +EXPORT_SYMBOL vmlinux 0x372eef70 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x3748658c scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x374ed073 scnprintf +EXPORT_SYMBOL vmlinux 0x3754fef2 misc_deregister +EXPORT_SYMBOL vmlinux 0x37567d70 bio_copy_user +EXPORT_SYMBOL vmlinux 0x3764985f xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x37795292 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x377ce4e9 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x379d65f5 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37c589bb register_netdev +EXPORT_SYMBOL vmlinux 0x37c9415c i2c_del_driver +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x3806bfc0 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x380aac2f tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x381c4bb1 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x382c05e8 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x38459e45 input_free_device +EXPORT_SYMBOL vmlinux 0x388799f6 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38c73326 handle_sysrq +EXPORT_SYMBOL vmlinux 0x38cab31c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x38f365dc sock_sendmsg +EXPORT_SYMBOL vmlinux 0x38fd4015 console_stop +EXPORT_SYMBOL vmlinux 0x3905d3b9 napi_skb_finish +EXPORT_SYMBOL vmlinux 0x394cde4c dm_table_event +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x399a77e0 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x39a02e54 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x39acd618 bio_init +EXPORT_SYMBOL vmlinux 0x39ae7ec0 ps2_end_command +EXPORT_SYMBOL vmlinux 0x39b6455d nf_afinfo +EXPORT_SYMBOL vmlinux 0x39f45c26 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a306d15 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x3a8924d4 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x3a8a2c34 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa1dbcf _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x3aadf7ae sync_blockdev +EXPORT_SYMBOL vmlinux 0x3adc15b9 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x3adf566f tty_free_termios +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3af94009 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x3af98f9e ioremap_nocache +EXPORT_SYMBOL vmlinux 0x3b03e68f cdev_init +EXPORT_SYMBOL vmlinux 0x3b123bc9 set_pages_uc +EXPORT_SYMBOL vmlinux 0x3b194a62 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x3b2fef34 nf_log_packet +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b7b42bb tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x3b815ec9 dma_find_channel +EXPORT_SYMBOL vmlinux 0x3bae38a7 kthread_create +EXPORT_SYMBOL vmlinux 0x3baf5510 set_device_ro +EXPORT_SYMBOL vmlinux 0x3bb1a81e scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bf49bd9 sock_i_ino +EXPORT_SYMBOL vmlinux 0x3c169b20 vga_client_register +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c30b796 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x3c35aa9b skb_find_text +EXPORT_SYMBOL vmlinux 0x3c36d761 dquot_destroy +EXPORT_SYMBOL vmlinux 0x3c3f14b3 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x3c4f7b73 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x3c7227bf complete_all +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cfd13c7 nla_reserve +EXPORT_SYMBOL vmlinux 0x3d311c06 tty_register_device +EXPORT_SYMBOL vmlinux 0x3d33a1ca register_sysctl_table +EXPORT_SYMBOL vmlinux 0x3d438af5 key_validate +EXPORT_SYMBOL vmlinux 0x3d61d299 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d7a673e mddev_congested +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d9995af devm_free_irq +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da5eb6d kfifo_alloc +EXPORT_SYMBOL vmlinux 0x3daa69da vfs_lstat +EXPORT_SYMBOL vmlinux 0x3ddc7181 md_error +EXPORT_SYMBOL vmlinux 0x3de33fd3 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x3deeea5c xfrm_register_type +EXPORT_SYMBOL vmlinux 0x3df8820c scsi_ioctl +EXPORT_SYMBOL vmlinux 0x3e12111c tty_vhangup +EXPORT_SYMBOL vmlinux 0x3e1f073d wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x3e219de6 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e2cad72 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e417faa splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e4787bf rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x3e5e75cd unregister_console +EXPORT_SYMBOL vmlinux 0x3e7ef672 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x3e9949d4 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x3e9b2474 pci_request_region +EXPORT_SYMBOL vmlinux 0x3eb73053 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x3ec1d14e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x3ec316ec generic_block_bmap +EXPORT_SYMBOL vmlinux 0x3ec85ace find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f08082f tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x3f1899f1 up +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f7e7826 pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x3fa404d5 iget_failed +EXPORT_SYMBOL vmlinux 0x3fb5ac1e blkdev_get +EXPORT_SYMBOL vmlinux 0x3fc7e99b rfkill_alloc +EXPORT_SYMBOL vmlinux 0x3fdad9d8 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x3feafb6b mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x3ff3dc0e tty_kref_put +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x400705b2 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x40222684 framebuffer_release +EXPORT_SYMBOL vmlinux 0x40338493 lock_fb_info +EXPORT_SYMBOL vmlinux 0x4039b6ec sk_stop_timer +EXPORT_SYMBOL vmlinux 0x404d773c thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x407e1de3 dqput +EXPORT_SYMBOL vmlinux 0x4088046d skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40aee144 __breadahead +EXPORT_SYMBOL vmlinux 0x40c2a9f3 inode_init_always +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40d37d54 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x40fdc5b6 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x4131d018 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0x41323497 blk_start_queue +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x414cc80c cmpxchg8b_emu +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4169b94a block_sync_page +EXPORT_SYMBOL vmlinux 0x417d7f3e neigh_table_clear +EXPORT_SYMBOL vmlinux 0x4185cf4b radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x419c55c0 simple_link +EXPORT_SYMBOL vmlinux 0x41a9c68d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x41ab1e58 bio_sector_offset +EXPORT_SYMBOL vmlinux 0x41bc9204 journal_clear_err +EXPORT_SYMBOL vmlinux 0x41cd674f tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x41dc40cf shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x41e1a9b8 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0x420bc591 bioset_free +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42139ef1 seq_printf +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x424f0323 pci_select_bars +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x427a31fa i2c_release_client +EXPORT_SYMBOL vmlinux 0x42818e8c ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x4292364c schedule +EXPORT_SYMBOL vmlinux 0x42afcc24 key_negate_and_link +EXPORT_SYMBOL vmlinux 0x42f8d7ef sock_i_uid +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4309cdff netif_napi_add +EXPORT_SYMBOL vmlinux 0x430bacde scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x431a8c18 scsi_device_get +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x43392f56 redraw_screen +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x437b97be jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x4385be3b gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x439be8af get_sb_ns +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43d32491 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x43edce4b slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x44086eb7 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x440cecd8 blk_start_request +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x44314efb radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44ae55ab jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44d6e680 mem_map +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f21bea idr_for_each +EXPORT_SYMBOL vmlinux 0x4532e360 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x45450063 mod_timer +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x455aa322 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45acaeaa vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x45d11c43 down_interruptible +EXPORT_SYMBOL vmlinux 0x45d55543 down_write +EXPORT_SYMBOL vmlinux 0x45e679f6 ether_setup +EXPORT_SYMBOL vmlinux 0x45f10f1c vfs_getattr +EXPORT_SYMBOL vmlinux 0x46008ef9 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x46085e4f add_timer +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x46397185 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x463c0924 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x463d6a59 __invalidate_device +EXPORT_SYMBOL vmlinux 0x4644e58a kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x46630fe6 __lock_page +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x4697e467 scsi_finish_command +EXPORT_SYMBOL vmlinux 0x46acb08b neigh_lookup +EXPORT_SYMBOL vmlinux 0x46bf03d1 genl_register_ops +EXPORT_SYMBOL vmlinux 0x46caf461 install_exec_creds +EXPORT_SYMBOL vmlinux 0x46e084a6 pci_dev_put +EXPORT_SYMBOL vmlinux 0x4720a25f unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x47262ee9 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x472beada bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x472d2a9a radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x477f48f1 md_integrity_register +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47cefe6b vga_get +EXPORT_SYMBOL vmlinux 0x481059da arp_create +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x4828138c generic_write_sync +EXPORT_SYMBOL vmlinux 0x48419855 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48753bb9 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x488f62b0 lock_may_write +EXPORT_SYMBOL vmlinux 0x48b9c711 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x48b9e0a0 pid_task +EXPORT_SYMBOL vmlinux 0x48d9e09e kobject_init +EXPORT_SYMBOL vmlinux 0x48e15d8e vfs_fsync +EXPORT_SYMBOL vmlinux 0x48f9e89c vfs_readdir +EXPORT_SYMBOL vmlinux 0x490090bc inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x4916c4d8 security_inode_permission +EXPORT_SYMBOL vmlinux 0x4935c152 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x494e3393 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x497656f9 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x4995796e console_start +EXPORT_SYMBOL vmlinux 0x49a45b96 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0x49abb374 sk_stream_error +EXPORT_SYMBOL vmlinux 0x49c6151b posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x49d9e9ab find_inode_number +EXPORT_SYMBOL vmlinux 0x49da9a9a _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x49dc71c9 rt6_lookup +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x4a0828ff security_path_rmdir +EXPORT_SYMBOL vmlinux 0x4a26b03f revert_creds +EXPORT_SYMBOL vmlinux 0x4a307794 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x4a3156ea ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a3dbe14 ip6_route_output +EXPORT_SYMBOL vmlinux 0x4a3e6bb1 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x4a660d98 sk_dst_check +EXPORT_SYMBOL vmlinux 0x4a83ee3c netpoll_setup +EXPORT_SYMBOL vmlinux 0x4a971ec7 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x4ab1c2be write_cache_pages +EXPORT_SYMBOL vmlinux 0x4abec909 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x4ae4f2e1 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x4af0aa0f tty_write_room +EXPORT_SYMBOL vmlinux 0x4af2fd5b simple_dir_operations +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b07e779 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x4b0f56b7 key_revoke +EXPORT_SYMBOL vmlinux 0x4b11e889 simple_rmdir +EXPORT_SYMBOL vmlinux 0x4b2338b0 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b359cb7 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x4b471696 netif_device_detach +EXPORT_SYMBOL vmlinux 0x4b825a13 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x4b8d21ee tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bc2e739 md_done_sync +EXPORT_SYMBOL vmlinux 0x4bca40e7 dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x4beb2cfe security_inode_readlink +EXPORT_SYMBOL vmlinux 0x4bfdb4cf d_instantiate +EXPORT_SYMBOL vmlinux 0x4bfee15a atomic64_set +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1b965c gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x4c259df1 blk_make_request +EXPORT_SYMBOL vmlinux 0x4c540594 vfs_follow_link +EXPORT_SYMBOL vmlinux 0x4c5e92f9 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x4c95558b clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x4cb90e36 sock_no_getname +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cd0a442 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x4cf79f45 simple_write_begin +EXPORT_SYMBOL vmlinux 0x4d08168c mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x4d142d0c blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x4d29d612 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4d4bcc75 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x4d7d8058 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dd7a143 module_refcount +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e2dd5c1 proto_unregister +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e431814 call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e717d0d set_security_override +EXPORT_SYMBOL vmlinux 0x4e805de0 mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0x4e81d3ed thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e8b0014 bdi_init +EXPORT_SYMBOL vmlinux 0x4e90f967 seq_escape +EXPORT_SYMBOL vmlinux 0x4e957256 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x4ebd5961 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x4ebfd794 elevator_init +EXPORT_SYMBOL vmlinux 0x4ec61657 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x4ec66fbd scsi_host_get +EXPORT_SYMBOL vmlinux 0x4ee76065 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x4eee88b0 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x4ef156b8 vmap +EXPORT_SYMBOL vmlinux 0x4ef5414d jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x4f02fb7d lookup_hash +EXPORT_SYMBOL vmlinux 0x4f07e423 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f274221 __devm_request_region +EXPORT_SYMBOL vmlinux 0x4f426bce neigh_create +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f9295ff ilookup5 +EXPORT_SYMBOL vmlinux 0x4fb64ef9 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4fe1000d bdi_destroy +EXPORT_SYMBOL vmlinux 0x5009fbc8 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x500abc66 pci_request_regions +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506f8885 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x50799769 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x50a25bbd bdi_register_dev +EXPORT_SYMBOL vmlinux 0x50a44472 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x50bdd470 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x50c39d9e dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x50e40dd6 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x5103ee77 netlink_unicast +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x5132f812 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x5152e605 memcmp +EXPORT_SYMBOL vmlinux 0x516b42ae scsi_dma_map +EXPORT_SYMBOL vmlinux 0x51812be3 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x5186518f profile_pc +EXPORT_SYMBOL vmlinux 0x51895291 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51d312fa set_create_files_as +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x524fe344 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x525b6dcc tcf_hash_search +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527cf47a pneigh_lookup +EXPORT_SYMBOL vmlinux 0x5282bef5 I_BDEV +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52c9f5f4 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x52f85d6d sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x530b1e4c rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x532a06d3 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x53453a8a pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x53494322 __serio_register_port +EXPORT_SYMBOL vmlinux 0x534a225a inode_add_bytes +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x539856e1 load_nls +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53da275e seq_path +EXPORT_SYMBOL vmlinux 0x53e40b2c tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x541dfef4 atomic64_inc +EXPORT_SYMBOL vmlinux 0x5422a9a0 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x543a3a25 udp_proc_register +EXPORT_SYMBOL vmlinux 0x544b3e87 isapnp_protocol +EXPORT_SYMBOL vmlinux 0x54542f67 mca_device_set_name +EXPORT_SYMBOL vmlinux 0x5488badc tcp_read_sock +EXPORT_SYMBOL vmlinux 0x548bc9c5 set_anon_super +EXPORT_SYMBOL vmlinux 0x54935666 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x54a6d074 atomic64_dec +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54becb25 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x54c4468e mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x54c7f42b proto_register +EXPORT_SYMBOL vmlinux 0x54cee8fc inetdev_by_index +EXPORT_SYMBOL vmlinux 0x54e20bc7 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54f85f4e single_open +EXPORT_SYMBOL vmlinux 0x5518dbc4 md_write_start +EXPORT_SYMBOL vmlinux 0x555aa529 bio_clone +EXPORT_SYMBOL vmlinux 0x5574502b skb_recycle_check +EXPORT_SYMBOL vmlinux 0x5580d624 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x5588f3d2 dma_pool_free +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x559e02c7 put_mnt_ns +EXPORT_SYMBOL vmlinux 0x55b3133e dma_release_from_coherent +EXPORT_SYMBOL vmlinux 0x55ba42d5 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x55da4be0 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x55ddfe13 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x56070f6a sk_run_filter +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x56328ed8 blk_end_request +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x5643d308 tty_throttle +EXPORT_SYMBOL vmlinux 0x566564ac mca_device_set_claim +EXPORT_SYMBOL vmlinux 0x5694997a dma_set_mask +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x573091dd input_get_keycode +EXPORT_SYMBOL vmlinux 0x5736f74b scsi_block_requests +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x576f57b7 vfs_rename +EXPORT_SYMBOL vmlinux 0x576fe9a9 __ht_create_irq +EXPORT_SYMBOL vmlinux 0x577323ac scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x579d3209 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x579fbcd2 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x57a16082 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x57a6504e vsnprintf +EXPORT_SYMBOL vmlinux 0x57adcf86 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x57adf756 per_cpu__this_cpu_off +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57ba4e52 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x57c91fdf xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x5806dd2e tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x5817023c mdiobus_free +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x583e9238 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x5859b1a7 seq_bitmap +EXPORT_SYMBOL vmlinux 0x58740646 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x587995ae flush_signals +EXPORT_SYMBOL vmlinux 0x58813a58 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x58a0cc45 bio_alloc +EXPORT_SYMBOL vmlinux 0x58cc4448 put_tty_driver +EXPORT_SYMBOL vmlinux 0x58d85fb1 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x58e96524 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x58f423ea aio_complete +EXPORT_SYMBOL vmlinux 0x58fef6f8 ist_info +EXPORT_SYMBOL vmlinux 0x5906e6a1 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x59583fa3 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x59b48476 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d8223a ioport_resource +EXPORT_SYMBOL vmlinux 0x5a26282f do_SAK +EXPORT_SYMBOL vmlinux 0x5a36751c nf_hook_slow +EXPORT_SYMBOL vmlinux 0x5a3fab2d get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x5a438966 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a55390c blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x5a57d155 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5aafac1d skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5ac6f192 simple_fsync +EXPORT_SYMBOL vmlinux 0x5acce1d4 dquot_initialize +EXPORT_SYMBOL vmlinux 0x5ad28178 __pagevec_release +EXPORT_SYMBOL vmlinux 0x5ada0436 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b236cff block_write_full_page +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b6e2a9f proc_create_data +EXPORT_SYMBOL vmlinux 0x5b7182cd inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x5b722283 pci_find_device +EXPORT_SYMBOL vmlinux 0x5b8c26ea journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x5bc642b3 eth_header_parse +EXPORT_SYMBOL vmlinux 0x5bdd8a64 blk_rq_init +EXPORT_SYMBOL vmlinux 0x5c265cba sg_init_one +EXPORT_SYMBOL vmlinux 0x5c597328 mpage_readpages +EXPORT_SYMBOL vmlinux 0x5c68705b mca_read_pos +EXPORT_SYMBOL vmlinux 0x5c71925a xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x5ccde0d9 simple_write_end +EXPORT_SYMBOL vmlinux 0x5cf513e4 vfs_mknod +EXPORT_SYMBOL vmlinux 0x5cf6cef5 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x5d044527 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x5d117e3c bdi_register +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d164375 generic_readlink +EXPORT_SYMBOL vmlinux 0x5d34f01f elv_rb_add +EXPORT_SYMBOL vmlinux 0x5d3740fc inet_release +EXPORT_SYMBOL vmlinux 0x5d3d5d7a sk_reset_timer +EXPORT_SYMBOL vmlinux 0x5d81f841 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x5d8bbc51 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x5da7c940 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x5db74f36 dquot_transfer +EXPORT_SYMBOL vmlinux 0x5dcb51cb blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x5de19180 journal_ack_err +EXPORT_SYMBOL vmlinux 0x5de4c3b0 simple_empty +EXPORT_SYMBOL vmlinux 0x5dee90ee pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x5df40392 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x5df58472 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x5dfa0b71 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x5e2574fa bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x5e448b92 __getblk +EXPORT_SYMBOL vmlinux 0x5e51f8a0 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x5e77be56 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea08b1f genphy_suspend +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5eb4b708 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x5eb507ee ps2_command +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ee65e98 find_or_create_page +EXPORT_SYMBOL vmlinux 0x5ee6bcbb sock_rfree +EXPORT_SYMBOL vmlinux 0x5ef9f43c sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x5f031651 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x5f0c28e9 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x5f0eda76 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x5f1bd579 mca_find_adapter +EXPORT_SYMBOL vmlinux 0x5f4c6bc2 security_path_mknod +EXPORT_SYMBOL vmlinux 0x5f56db66 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x5f6b3b99 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x5f9c839e dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0x5fa3f0a3 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x5fda936e security_path_rename +EXPORT_SYMBOL vmlinux 0x5fe275dd posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x5ff82419 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x60243b7d dma_async_device_register +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x6043092c atomic64_dec_and_test +EXPORT_SYMBOL vmlinux 0x606019f7 pipe_unlock +EXPORT_SYMBOL vmlinux 0x60653d07 d_alloc +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60d427a8 mutex_unlock +EXPORT_SYMBOL vmlinux 0x60dc7a9e unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x60e9e566 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x60f5b5ae pnp_find_dev +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x6180df8d jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61ad730d phy_connect +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61d9f7c2 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x61ddcd65 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x6212c881 k8_northbridges +EXPORT_SYMBOL vmlinux 0x62193598 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x621df526 send_sig_info +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x6241a2ab __copy_from_user_ll_nocache +EXPORT_SYMBOL vmlinux 0x6241fd2c acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x624d45b2 dev_add_pack +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x627b270d skb_append +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x628db7ca generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x6294ec7d dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x62e92128 unregister_netdev +EXPORT_SYMBOL vmlinux 0x6305d1ee vfs_writev +EXPORT_SYMBOL vmlinux 0x6307fc98 del_timer +EXPORT_SYMBOL vmlinux 0x6333de3e blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x6334d816 elv_add_request +EXPORT_SYMBOL vmlinux 0x635221ae blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x637b1394 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x6384d7b0 get_sb_bdev +EXPORT_SYMBOL vmlinux 0x63a4d060 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x63a7fe48 clear_inode +EXPORT_SYMBOL vmlinux 0x63b27df7 blk_peek_request +EXPORT_SYMBOL vmlinux 0x63e4c724 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63efc536 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x640a7078 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x6423e686 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x642d8cef pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x642e54ac __wake_up +EXPORT_SYMBOL vmlinux 0x644f8888 input_flush_device +EXPORT_SYMBOL vmlinux 0x6451a477 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x64526a93 atomic64_sub_return +EXPORT_SYMBOL vmlinux 0x6457314b iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x6466a1e6 mempool_alloc +EXPORT_SYMBOL vmlinux 0x647255f1 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64d317d3 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x64fb51d4 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x650fb346 add_wait_queue +EXPORT_SYMBOL vmlinux 0x6518f38c mmc_register_driver +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x655899a8 dev_addr_del +EXPORT_SYMBOL vmlinux 0x65708e20 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x6571585f task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x65828c10 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x65c11528 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x661d52d3 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x662888dc read_cache_pages +EXPORT_SYMBOL vmlinux 0x6629eb83 udp_disconnect +EXPORT_SYMBOL vmlinux 0x66514575 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x6689d9ae block_prepare_write +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66a43221 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x671859aa mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x675008f0 dm_register_target +EXPORT_SYMBOL vmlinux 0x67804a19 __any_online_cpu +EXPORT_SYMBOL vmlinux 0x678b1e70 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x67a6e461 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67c21422 simple_fill_super +EXPORT_SYMBOL vmlinux 0x67c5982e xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x67c749e5 inet6_bind +EXPORT_SYMBOL vmlinux 0x67d218dc tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x67f21e7c kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x67f61623 cdev_add +EXPORT_SYMBOL vmlinux 0x681582f7 proc_symlink +EXPORT_SYMBOL vmlinux 0x681dfc31 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x6823c75c tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x68332af2 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x684bf3ff inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x6862c7f4 cdev_alloc +EXPORT_SYMBOL vmlinux 0x6868101d hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x68737830 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x6886f0b6 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x68a4fbc9 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x68a59d66 input_unregister_device +EXPORT_SYMBOL vmlinux 0x68a7297b devm_ioremap +EXPORT_SYMBOL vmlinux 0x68bf4101 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x68ff0c32 journal_destroy +EXPORT_SYMBOL vmlinux 0x69007999 eth_header +EXPORT_SYMBOL vmlinux 0x69104030 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x693a19aa tty_set_operations +EXPORT_SYMBOL vmlinux 0x6948d932 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x6953e87a thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x6975517b sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x6982813f find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a2c606 have_submounts +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69f5c6ed bd_set_size +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a25c0f3 simple_getattr +EXPORT_SYMBOL vmlinux 0x6a27bfce csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a6e224e lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a798cd8 ip_dev_find +EXPORT_SYMBOL vmlinux 0x6a9f26c9 init_timer_key +EXPORT_SYMBOL vmlinux 0x6aaf4e00 sget +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad4bdd5 dcache_readdir +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6ad9d48b scsi_device_resume +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6b0f8430 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b28395b sysctl_jiffies +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b786338 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x6b89f0cd pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x6b937ffb mca_mark_as_used +EXPORT_SYMBOL vmlinux 0x6b938a05 audit_log_start +EXPORT_SYMBOL vmlinux 0x6b9b88f3 sleep_on +EXPORT_SYMBOL vmlinux 0x6bb812e7 atomic64_add_return +EXPORT_SYMBOL vmlinux 0x6bbf264f remap_pfn_range +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c2e3320 strncmp +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c47bbaa is_bad_inode +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c6b8c5e jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c7d64db sock_kmalloc +EXPORT_SYMBOL vmlinux 0x6ca3c0d3 journal_flush +EXPORT_SYMBOL vmlinux 0x6cbd00a8 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6cdf02dd i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x6ce924f3 hippi_mac_addr +EXPORT_SYMBOL vmlinux 0x6d04a769 tty_shutdown +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d288375 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d2fe21d atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d45cb03 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x6d464175 __sg_free_table +EXPORT_SYMBOL vmlinux 0x6d552585 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x6d56994a cmpxchg_486_u64 +EXPORT_SYMBOL vmlinux 0x6d6c88db acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d9856ce cont_write_begin +EXPORT_SYMBOL vmlinux 0x6d9ee1e4 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x6da4ca3e tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x6dc0c24b complete_and_exit +EXPORT_SYMBOL vmlinux 0x6dc8de40 km_query +EXPORT_SYMBOL vmlinux 0x6dcb53ed eisa_bus_type +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df2e546 bdget_disk +EXPORT_SYMBOL vmlinux 0x6dfbeb6e d_path +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e08cfab phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x6e0f6076 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x6e145442 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x6e2010ee set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x6e43dd44 skb_queue_head +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb0fdf3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x6ec0a013 block_commit_write +EXPORT_SYMBOL vmlinux 0x6ee79ed5 serial8250_register_port +EXPORT_SYMBOL vmlinux 0x6f2adcbe tty_mutex +EXPORT_SYMBOL vmlinux 0x6f4f833a nobh_write_begin +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f8d9d7c blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x6fa944ac arp_xmit +EXPORT_SYMBOL vmlinux 0x6fae403f journal_get_write_access +EXPORT_SYMBOL vmlinux 0x6fbef181 log_start_commit +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fdc878f inet_sendmsg +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x701d0ebd snprintf +EXPORT_SYMBOL vmlinux 0x70329eb8 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x70509eac serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x706dd9a4 dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0x707c0ad0 dma_supported +EXPORT_SYMBOL vmlinux 0x70875f05 input_release_device +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70c3d787 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x70d1f8f3 strncat +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70dc114f pnp_device_attach +EXPORT_SYMBOL vmlinux 0x70e4ae11 bio_pair_release +EXPORT_SYMBOL vmlinux 0x70efefde ps2_init +EXPORT_SYMBOL vmlinux 0x70fa41e6 netdev_features_change +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x7129fced path_lookup +EXPORT_SYMBOL vmlinux 0x712aa29b _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x71356fba remove_wait_queue +EXPORT_SYMBOL vmlinux 0x713e35ca insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x714aca2d sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x714c7a81 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x7150b2ea vfs_quota_on +EXPORT_SYMBOL vmlinux 0x7163e9b1 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71a8e2fd km_policy_notify +EXPORT_SYMBOL vmlinux 0x71c53db1 dev_close +EXPORT_SYMBOL vmlinux 0x71d794d0 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x71f0eae1 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x71fe27fd tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x7211427c cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x721d0dbb scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x7236ec51 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x724e6563 netdev_state_change +EXPORT_SYMBOL vmlinux 0x726c1f8f filp_close +EXPORT_SYMBOL vmlinux 0x726f46d0 pci_do_scan_bus +EXPORT_SYMBOL vmlinux 0x728519ad blk_put_request +EXPORT_SYMBOL vmlinux 0x72a007a3 scsi_register +EXPORT_SYMBOL vmlinux 0x72aace39 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72dda130 pnp_is_active +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72ee57ab llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x7300499e xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x730e7bf8 sock_init_data +EXPORT_SYMBOL vmlinux 0x7335d2cd follow_down +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x7362dd1e vfs_fstat +EXPORT_SYMBOL vmlinux 0x736bb214 nf_log_register +EXPORT_SYMBOL vmlinux 0x736decbd security_path_truncate +EXPORT_SYMBOL vmlinux 0x738803e6 strnlen +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x73949824 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x73b7bb6d rtnl_notify +EXPORT_SYMBOL vmlinux 0x73c43648 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x73c49554 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x73fcc9d5 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x7413793a EISA_bus +EXPORT_SYMBOL vmlinux 0x742a7cf5 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x745b5373 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x74724e43 igrab +EXPORT_SYMBOL vmlinux 0x7475a949 __napi_complete +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x748caf40 down +EXPORT_SYMBOL vmlinux 0x7494fa73 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74c106f3 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74ec5689 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x74fe9822 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x750b791c jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x75271716 save_processor_state +EXPORT_SYMBOL vmlinux 0x75422e1a dm_table_get +EXPORT_SYMBOL vmlinux 0x7546fd2b xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x7562985b key_link +EXPORT_SYMBOL vmlinux 0x7579e1a0 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x7585ee2e tty_check_change +EXPORT_SYMBOL vmlinux 0x759841ec lease_modify +EXPORT_SYMBOL vmlinux 0x75a5f0bd jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x75c47288 iunique +EXPORT_SYMBOL vmlinux 0x75c8c042 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x75f5229a tcp_sendpage +EXPORT_SYMBOL vmlinux 0x75f9f8b3 set_irq_chip +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x76130624 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x7638b293 i2c_master_send +EXPORT_SYMBOL vmlinux 0x764c6a02 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x7667cd12 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x7682a380 inode_init_once +EXPORT_SYMBOL vmlinux 0x76931256 path_put +EXPORT_SYMBOL vmlinux 0x76a97f5e unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x76b0f8f8 bad_dma_address +EXPORT_SYMBOL vmlinux 0x76b88bac n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76d65535 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x76f3f8a5 num_k8_northbridges +EXPORT_SYMBOL vmlinux 0x770a0036 isapnp_cfg_begin +EXPORT_SYMBOL vmlinux 0x77154f66 d_delete +EXPORT_SYMBOL vmlinux 0x772c9913 path_get +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x777d418a pci_assign_resource +EXPORT_SYMBOL vmlinux 0x77a108df _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x77a80a18 init_file +EXPORT_SYMBOL vmlinux 0x77a8f2ae nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x77a9ccd9 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77d45325 send_sig +EXPORT_SYMBOL vmlinux 0x77e2c97d inet_shutdown +EXPORT_SYMBOL vmlinux 0x77e4f36b pci_set_power_state +EXPORT_SYMBOL vmlinux 0x77e940e8 fput +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fc100e pci_iomap +EXPORT_SYMBOL vmlinux 0x7826cb4a md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x788f3dd5 read_cache_page +EXPORT_SYMBOL vmlinux 0x788fe103 iomem_resource +EXPORT_SYMBOL vmlinux 0x78a484c9 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x78b00d92 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x78bb1a9b pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78ff94a4 release_sock +EXPORT_SYMBOL vmlinux 0x7900a181 unlock_page +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x7914a0d7 pci_dev_get +EXPORT_SYMBOL vmlinux 0x7926ccb1 do_munmap +EXPORT_SYMBOL vmlinux 0x7927f712 acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0x792fe993 sk_free +EXPORT_SYMBOL vmlinux 0x793adc90 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x794487ee disable_hlt +EXPORT_SYMBOL vmlinux 0x79543c0d nf_register_hook +EXPORT_SYMBOL vmlinux 0x7958f3fa i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x796d282a kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x797d7b9e wake_up_process +EXPORT_SYMBOL vmlinux 0x798f30f6 sg_miter_start +EXPORT_SYMBOL vmlinux 0x7999d6ca security_path_link +EXPORT_SYMBOL vmlinux 0x799b0846 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79d235fa locks_remove_posix +EXPORT_SYMBOL vmlinux 0x79d987c3 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x79e5b05f blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x79f1bfc7 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x7a012971 scsi_execute +EXPORT_SYMBOL vmlinux 0x7a107d23 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a36911b tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x7a3b6992 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a7a92bc mmc_resume_host +EXPORT_SYMBOL vmlinux 0x7a835219 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x7a848702 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x7ab1f5cf init_special_inode +EXPORT_SYMBOL vmlinux 0x7aba4cfc __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b134ddf acpi_get_name +EXPORT_SYMBOL vmlinux 0x7b1d43d9 do_splice_from +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b76bb5d scsi_scan_target +EXPORT_SYMBOL vmlinux 0x7b79a387 scsi_get_command +EXPORT_SYMBOL vmlinux 0x7bd508ca pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x7bfbe0ab get_phy_device +EXPORT_SYMBOL vmlinux 0x7bfcde58 neigh_destroy +EXPORT_SYMBOL vmlinux 0x7c0edd7d acpi_check_region +EXPORT_SYMBOL vmlinux 0x7c43333d neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c968620 generic_setxattr +EXPORT_SYMBOL vmlinux 0x7ca3f7e4 call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x7cb174a9 start_tty +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cccf20a __destroy_inode +EXPORT_SYMBOL vmlinux 0x7ced0cfa unregister_quota_format +EXPORT_SYMBOL vmlinux 0x7d01c55c phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d1273bc d_validate +EXPORT_SYMBOL vmlinux 0x7d34b8de genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x7d3b7858 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x7d8a2f55 dst_release +EXPORT_SYMBOL vmlinux 0x7db3c5b9 key_task_permission +EXPORT_SYMBOL vmlinux 0x7db61b88 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7df2ea0b __break_lease +EXPORT_SYMBOL vmlinux 0x7df5b0fa __netif_schedule +EXPORT_SYMBOL vmlinux 0x7dfe048d kernel_getsockname +EXPORT_SYMBOL vmlinux 0x7dfe0d1f register_console +EXPORT_SYMBOL vmlinux 0x7e143c5f tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x7e160615 serio_open +EXPORT_SYMBOL vmlinux 0x7e30e825 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x7e46dd61 generic_listxattr +EXPORT_SYMBOL vmlinux 0x7e59dc80 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7ea0edf4 netlink_set_err +EXPORT_SYMBOL vmlinux 0x7eb01dc3 d_alloc_name +EXPORT_SYMBOL vmlinux 0x7ecb001b __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x7ed9d013 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x7ee91c1d _spin_trylock +EXPORT_SYMBOL vmlinux 0x7f05f080 mmc_add_host +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f310962 freeze_bdev +EXPORT_SYMBOL vmlinux 0x7f4bd7de ps2_begin_command +EXPORT_SYMBOL vmlinux 0x7f54b029 fasync_helper +EXPORT_SYMBOL vmlinux 0x7f5ded35 vfs_llseek +EXPORT_SYMBOL vmlinux 0x7f72c5c2 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x7f77c222 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x7f870ee4 file_update_time +EXPORT_SYMBOL vmlinux 0x7fa0cf8e dump_trace +EXPORT_SYMBOL vmlinux 0x7fc9656c prepare_creds +EXPORT_SYMBOL vmlinux 0x7fd14538 default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x7ffdcd3b d_prune_aliases +EXPORT_SYMBOL vmlinux 0x801e6afb ll_rw_block +EXPORT_SYMBOL vmlinux 0x8025566f __kfree_skb +EXPORT_SYMBOL vmlinux 0x803cf5e2 devm_iounmap +EXPORT_SYMBOL vmlinux 0x804d00e7 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x8063f83d radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x8067649b dst_discard +EXPORT_SYMBOL vmlinux 0x80702688 register_con_driver +EXPORT_SYMBOL vmlinux 0x8072fc4e scsi_init_io +EXPORT_SYMBOL vmlinux 0x80771ef9 arp_send +EXPORT_SYMBOL vmlinux 0x807760a2 thaw_process +EXPORT_SYMBOL vmlinux 0x807de85c kthread_stop +EXPORT_SYMBOL vmlinux 0x80b5579e journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x80cdc4e9 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x80e044de call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0x80f58740 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x811169da kernel_getpeername +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x815911ab unregister_qdisc +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815c56d0 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x81799cee vscnprintf +EXPORT_SYMBOL vmlinux 0x817b5660 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x817bca17 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x81d2fc12 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x81e9c6ca netif_rx_ni +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820fc63c vfsmount_lock +EXPORT_SYMBOL vmlinux 0x8220dd8a skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x8235805b memmove +EXPORT_SYMBOL vmlinux 0x82412a10 skb_push +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x826e0bb8 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x8285dad8 generic_removexattr +EXPORT_SYMBOL vmlinux 0x829876ce dma_pool_create +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x8311eb74 backlight_force_update +EXPORT_SYMBOL vmlinux 0x83173ea8 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x8317e20a completion_done +EXPORT_SYMBOL vmlinux 0x83339fb3 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x833fecfd scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x83455c33 inet_getname +EXPORT_SYMBOL vmlinux 0x837da7b1 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x83810798 inet_addr_type +EXPORT_SYMBOL vmlinux 0x8384d2b4 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x838a116f jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x83904ad4 per_cpu__irq_regs +EXPORT_SYMBOL vmlinux 0x83a010fc llc_sap_find +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83ab6f7f ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x83af7144 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x83c8d82e inode_permission +EXPORT_SYMBOL vmlinux 0x83e673cf dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x83ee43ef dm_put_device +EXPORT_SYMBOL vmlinux 0x83f75cd0 set_pages_nx +EXPORT_SYMBOL vmlinux 0x840bc761 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x841cc203 vfs_unlink +EXPORT_SYMBOL vmlinux 0x8428f5a8 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x8432069d ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x84809100 genphy_resume +EXPORT_SYMBOL vmlinux 0x8481e001 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x84992a40 serio_reconnect +EXPORT_SYMBOL vmlinux 0x84f59d6c journal_set_features +EXPORT_SYMBOL vmlinux 0x84f6b349 genphy_update_link +EXPORT_SYMBOL vmlinux 0x8500958a xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x850b7ad4 __ps2_command +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x858fe96f pci_disable_msix +EXPORT_SYMBOL vmlinux 0x85a2432f sock_recvmsg +EXPORT_SYMBOL vmlinux 0x85ab0c71 module_layout +EXPORT_SYMBOL vmlinux 0x85ac7f10 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x85ad2e5c kmap +EXPORT_SYMBOL vmlinux 0x85b578af set_binfmt +EXPORT_SYMBOL vmlinux 0x85be498b jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x85c6c2e4 acpi_bus_start +EXPORT_SYMBOL vmlinux 0x85c83d0d dst_destroy +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e0eba4 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x85e53d23 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x85ea9186 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x860c6f68 bdi_unregister +EXPORT_SYMBOL vmlinux 0x860dea44 __page_symlink +EXPORT_SYMBOL vmlinux 0x861a9aa8 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x861fa3c3 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x862e0d87 lro_flush_all +EXPORT_SYMBOL vmlinux 0x862ff9e6 journal_start_commit +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x869fca12 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x86c039e7 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x8733e9a3 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x873b7934 filemap_fault +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x8785497c filemap_flush +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87b9f38b netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x87d7c258 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x87dcf188 page_put_link +EXPORT_SYMBOL vmlinux 0x87ea8ef8 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x87f438a2 sysctl_intvec +EXPORT_SYMBOL vmlinux 0x880108aa skb_over_panic +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x88542d04 netif_napi_del +EXPORT_SYMBOL vmlinux 0x88837431 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x88ca7316 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x88dd4e41 ps2_drain +EXPORT_SYMBOL vmlinux 0x88e88136 ioremap_prot +EXPORT_SYMBOL vmlinux 0x8920569f acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x89642e87 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x8969b997 ida_get_new +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x8986589f tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x898cd8b1 mca_device_claimed +EXPORT_SYMBOL vmlinux 0x898e62b4 register_filesystem +EXPORT_SYMBOL vmlinux 0x89949018 down_timeout +EXPORT_SYMBOL vmlinux 0x8995fcd6 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x89b92e36 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x89bf99eb __register_chrdev +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89fddda6 elv_queue_empty +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a2013bf sock_register +EXPORT_SYMBOL vmlinux 0x8a26f30c tty_unthrottle +EXPORT_SYMBOL vmlinux 0x8a2b61e2 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3eabf0 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8a5cd223 keyring_search +EXPORT_SYMBOL vmlinux 0x8a5f476a d_splice_alias +EXPORT_SYMBOL vmlinux 0x8a619bf4 inode_setattr +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a802dbd pci_enable_device +EXPORT_SYMBOL vmlinux 0x8a815dca blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x8a888011 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x8a91f8da dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8ac429e7 kernel_connect +EXPORT_SYMBOL vmlinux 0x8ac6395b per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0x8ad8620d generic_write_checks +EXPORT_SYMBOL vmlinux 0x8ae0e9ba tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x8ae77528 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x8af187c6 generic_writepages +EXPORT_SYMBOL vmlinux 0x8b00da2c del_gendisk +EXPORT_SYMBOL vmlinux 0x8b095eef udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x8b0cf85e dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x8b18496f __copy_to_user_ll +EXPORT_SYMBOL vmlinux 0x8b21503a security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x8b337154 thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0x8b418008 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x8b51dc17 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b7f145f backlight_device_register +EXPORT_SYMBOL vmlinux 0x8b9555ee skb_pull +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8ba4c04f acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x8bbf11aa inet6_release +EXPORT_SYMBOL vmlinux 0x8bd06abf scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bddabf2 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x8c02a4d2 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x8c08314f __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c237d26 skb_copy +EXPORT_SYMBOL vmlinux 0x8c294056 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x8c646940 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x8c7498a8 alloc_disk_node +EXPORT_SYMBOL vmlinux 0x8c7b7326 generic_unplug_device +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cd76c1a fd_install +EXPORT_SYMBOL vmlinux 0x8ce31628 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x8cee46ef __inet6_hash +EXPORT_SYMBOL vmlinux 0x8d12b3e9 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x8d2871c1 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x8d2e3f96 inet_frag_find +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d48431b tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d56b146 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x8d6f81b4 __div64_32 +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8db07d0c phy_start +EXPORT_SYMBOL vmlinux 0x8dc6e564 restore_processor_state +EXPORT_SYMBOL vmlinux 0x8dc8507c netif_carrier_on +EXPORT_SYMBOL vmlinux 0x8dca832f __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0637ba i8253_lock +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e254c29 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x8e2cc5a8 write_one_page +EXPORT_SYMBOL vmlinux 0x8e3d2d5d nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e888ec3 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x8e9c9871 ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0x8eab4475 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x8ee3bfdb xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8f2422b6 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f397df5 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6292dc phy_driver_register +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f747df9 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x8f8edd33 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8facfab9 give_up_console +EXPORT_SYMBOL vmlinux 0x8fb93523 pci_save_state +EXPORT_SYMBOL vmlinux 0x8fe6b1b7 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x8fe8016e input_unregister_handle +EXPORT_SYMBOL vmlinux 0x8ff4079b pv_irq_ops +EXPORT_SYMBOL vmlinux 0x8ff91492 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x902bbe63 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x90347875 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x903ab076 blk_unplug +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x9059c0d2 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x90653995 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0x9097d456 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x909e7784 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90a4578e ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x90fca36d skb_put +EXPORT_SYMBOL vmlinux 0x91009452 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x91104339 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x91170bf8 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x912bcb0c blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x912e9200 dev_gro_receive +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x91732a6f end_page_writeback +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x917c02c3 register_framebuffer +EXPORT_SYMBOL vmlinux 0x918c6072 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x918d2498 scsi_device_put +EXPORT_SYMBOL vmlinux 0x91c14d38 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x91c965c5 vfs_write +EXPORT_SYMBOL vmlinux 0x91e5dd5e blk_run_queue +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x92897e3d default_idle +EXPORT_SYMBOL vmlinux 0x92ca271e __lock_buffer +EXPORT_SYMBOL vmlinux 0x92d68a79 journal_forget +EXPORT_SYMBOL vmlinux 0x92e642ad md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x9318ee36 md_write_end +EXPORT_SYMBOL vmlinux 0x9330cb9f sg_alloc_table +EXPORT_SYMBOL vmlinux 0x936b0682 complete_request_key +EXPORT_SYMBOL vmlinux 0x9373b8ee i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x93832e8c skb_checksum_help +EXPORT_SYMBOL vmlinux 0x9385667d down_read_trylock +EXPORT_SYMBOL vmlinux 0x9385e804 simple_release_fs +EXPORT_SYMBOL vmlinux 0x9388c3b5 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x939f5818 km_report +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93b20eee tty_register_driver +EXPORT_SYMBOL vmlinux 0x93b5caff kernel_listen +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93cbd1ec _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x93e29f8a pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x94003fbb pci_enable_wake +EXPORT_SYMBOL vmlinux 0x942d3470 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x943d5664 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x947d6b1d fb_blank +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94932ccd pnp_find_card +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a6467e kobject_put +EXPORT_SYMBOL vmlinux 0x94b541b5 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x94e240df mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x94e40d81 ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x94f9d5a1 d_invalidate +EXPORT_SYMBOL vmlinux 0x950b3d31 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x951a3ddb kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x951b28f2 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x9521049d notify_change +EXPORT_SYMBOL vmlinux 0x95232b64 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x9540a9cd bio_copy_kern +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x956791d0 set_blocksize +EXPORT_SYMBOL vmlinux 0x95761498 get_write_access +EXPORT_SYMBOL vmlinux 0x95bf25c6 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x95c18a23 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x95d2b22a lock_rename +EXPORT_SYMBOL vmlinux 0x95f8ed89 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x96219f2d phy_device_create +EXPORT_SYMBOL vmlinux 0x9629486a per_cpu__cpu_number +EXPORT_SYMBOL vmlinux 0x962c5cfb textsearch_unregister +EXPORT_SYMBOL vmlinux 0x965522ce scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x966eddc8 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x9673453f filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x969f71e8 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x96a2e593 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x96a59f00 mmc_free_host +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96d7018a dm_table_put +EXPORT_SYMBOL vmlinux 0x97274b5f bio_integrity_free +EXPORT_SYMBOL vmlinux 0x973873ab _spin_lock +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x97757cc1 jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0x97a81c22 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x97ae5cd2 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x97cfff76 __bread +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97e387b7 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x986b3d27 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x98a042b4 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x98a12d6b block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x98ba3b81 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x98f62f54 udp_ioctl +EXPORT_SYMBOL vmlinux 0x98fe8a7b audit_log_end +EXPORT_SYMBOL vmlinux 0x99052a84 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x9909f302 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x99290473 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x993f9f08 generic_show_options +EXPORT_SYMBOL vmlinux 0x995b6168 km_policy_expired +EXPORT_SYMBOL vmlinux 0x997a14f8 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99b83aeb unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c197ca sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99dc2b55 __blk_end_request +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99ed1966 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x9a127079 __scsi_put_command +EXPORT_SYMBOL vmlinux 0x9a1ce9d7 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a4f4ea3 dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x9a6a83f9 cmos_lock +EXPORT_SYMBOL vmlinux 0x9a725c11 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x9a81f6e8 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x9a9362ee simple_pin_fs +EXPORT_SYMBOL vmlinux 0x9a9985be percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x9ac29c03 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x9ad29c34 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x9ae600d7 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x9af9d93a ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x9b112f94 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x9b19e4eb tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b418b3f netdev_set_master +EXPORT_SYMBOL vmlinux 0x9b445459 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x9b457c1c xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x9b4de8eb idr_replace +EXPORT_SYMBOL vmlinux 0x9b657b10 register_qdisc +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b8bcd92 cdrom_open +EXPORT_SYMBOL vmlinux 0x9b92c1b0 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9ba9524d seq_release +EXPORT_SYMBOL vmlinux 0x9bbfd939 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x9bce482f __release_region +EXPORT_SYMBOL vmlinux 0x9bd7ca54 acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0x9bf16359 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c144e46 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x9c2c944a __copy_from_user_ll_nocache_nozero +EXPORT_SYMBOL vmlinux 0x9c362eef kernel_sendpage +EXPORT_SYMBOL vmlinux 0x9c4854c4 request_key_async +EXPORT_SYMBOL vmlinux 0x9c7077bd enable_hlt +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9c7d1e26 scsi_execute_req +EXPORT_SYMBOL vmlinux 0x9c92ea80 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x9c9772cb mdiobus_read +EXPORT_SYMBOL vmlinux 0x9cb1167f fb_find_mode +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9ccb2622 finish_wait +EXPORT_SYMBOL vmlinux 0x9ce299e6 vfs_statfs +EXPORT_SYMBOL vmlinux 0x9ce8248a xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9ced38aa down_trylock +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d2a956f textsearch_register +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d889c5f search_binary_handler +EXPORT_SYMBOL vmlinux 0x9d8fe200 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x9d9310df scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x9df28bd3 input_register_device +EXPORT_SYMBOL vmlinux 0x9e05d15a tcf_em_register +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e2c731d udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e484746 find_lock_page +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e672ff6 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x9e69c072 cdev_del +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e90f3e1 per_cpu__irq_stat +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ed26d13 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9ef774df call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x9effc8b8 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f2ab199 bio_unmap_user +EXPORT_SYMBOL vmlinux 0x9f2b1e7f pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f4d5abe i2c_register_driver +EXPORT_SYMBOL vmlinux 0x9f5e0aa7 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x9f68cacb udp_sendmsg +EXPORT_SYMBOL vmlinux 0x9f695e56 cad_pid +EXPORT_SYMBOL vmlinux 0x9f7da3da security_task_getsecid +EXPORT_SYMBOL vmlinux 0x9f819ca1 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x9f92efc4 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa274b4 dq_data_lock +EXPORT_SYMBOL vmlinux 0x9fa8f5c7 __bforget +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fb98e64 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x9fc378b1 bdev_read_only +EXPORT_SYMBOL vmlinux 0x9fec2bfa scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x9ff64a8a tcp_make_synack +EXPORT_SYMBOL vmlinux 0xa032eac3 elv_rb_find +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa0525a2c mca_unregister_driver +EXPORT_SYMBOL vmlinux 0xa052fac6 pci_get_device +EXPORT_SYMBOL vmlinux 0xa05b60c8 tty_devnum +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07c4cba inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xa0a4ac21 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0c006d2 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0xa0c3d973 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0e19c81 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xa0e36625 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xa0eb30cf remove_proc_entry +EXPORT_SYMBOL vmlinux 0xa0f3f81d neigh_connected_output +EXPORT_SYMBOL vmlinux 0xa0fb649d dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa1027875 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa13bbf93 uart_add_one_port +EXPORT_SYMBOL vmlinux 0xa19f5569 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1d86b8f pnp_request_card_device +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa2282ca4 tc_classify +EXPORT_SYMBOL vmlinux 0xa2998b26 da903x_query_status +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a1e5c9 _write_lock_bh +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b61480 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0xa2b8a2ba __init_rwsem +EXPORT_SYMBOL vmlinux 0xa2bfae43 pci_get_subsys +EXPORT_SYMBOL vmlinux 0xa2c8f35e netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xa3017071 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa359dee0 dm_table_get_size +EXPORT_SYMBOL vmlinux 0xa35c1f05 acpi_extract_package +EXPORT_SYMBOL vmlinux 0xa35d341a tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa36ac447 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xa37e6b42 dm_io +EXPORT_SYMBOL vmlinux 0xa39bf8bd elevator_exit +EXPORT_SYMBOL vmlinux 0xa3b7b37d kill_pid +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3c8726c fb_class +EXPORT_SYMBOL vmlinux 0xa3fdca2d ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0xa40ed698 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0xa40ee30e scsi_print_command +EXPORT_SYMBOL vmlinux 0xa415b384 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xa41c08d4 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa44159db ht_create_irq +EXPORT_SYMBOL vmlinux 0xa44ad274 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xa457e535 dev_mc_delete +EXPORT_SYMBOL vmlinux 0xa45df4ee rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xa461e0f4 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0xa475281d tty_unregister_device +EXPORT_SYMBOL vmlinux 0xa47af939 kfree_skb +EXPORT_SYMBOL vmlinux 0xa48ed858 arp_broken_ops +EXPORT_SYMBOL vmlinux 0xa4910da7 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xa49faf47 ip6_xmit +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4bc166a phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xa4c915b3 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xa4caa7f5 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0xa4dc8f13 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0xa4edee8c tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0xa5037362 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0xa50b78a1 blk_complete_request +EXPORT_SYMBOL vmlinux 0xa51cdfe8 __FIXADDR_TOP +EXPORT_SYMBOL vmlinux 0xa531f8b5 generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xa56f1315 mempool_free +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa591199d mca_device_transform_ioport +EXPORT_SYMBOL vmlinux 0xa5922bb1 kfifo_init +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5a633b9 sg_last +EXPORT_SYMBOL vmlinux 0xa5bbb17e proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0xa5bdc2d0 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0xa5c02aed iget5_locked +EXPORT_SYMBOL vmlinux 0xa5cef8ad release_resource +EXPORT_SYMBOL vmlinux 0xa5d13a54 journal_load +EXPORT_SYMBOL vmlinux 0xa5da0abd acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0xa5dbf502 replace_mount_options +EXPORT_SYMBOL vmlinux 0xa5df93c8 disk_stack_limits +EXPORT_SYMBOL vmlinux 0xa5e867ad phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xa5ea4ce0 input_register_handle +EXPORT_SYMBOL vmlinux 0xa6257572 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xa633ff82 icmp_send +EXPORT_SYMBOL vmlinux 0xa6373539 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa67af8b8 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6aa08fb serio_close +EXPORT_SYMBOL vmlinux 0xa6c3f009 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xa6cf69bd input_register_handler +EXPORT_SYMBOL vmlinux 0xa6dcad10 key_type_keyring +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6ecc70d __ip_select_ident +EXPORT_SYMBOL vmlinux 0xa6ed0ac5 journal_lock_updates +EXPORT_SYMBOL vmlinux 0xa7046549 vprintk +EXPORT_SYMBOL vmlinux 0xa708a26a tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa716c56c tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xa71e7463 __first_cpu +EXPORT_SYMBOL vmlinux 0xa71f3a61 sock_release +EXPORT_SYMBOL vmlinux 0xa7221e51 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xa7298bfb pci_map_rom +EXPORT_SYMBOL vmlinux 0xa73668ec init_buffer +EXPORT_SYMBOL vmlinux 0xa751f9ed mdio_bus_type +EXPORT_SYMBOL vmlinux 0xa756c7dc pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xa75eb627 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xa76a6a4c qdisc_list_del +EXPORT_SYMBOL vmlinux 0xa76ea89f xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xa7867a50 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xa7911088 netlink_ack +EXPORT_SYMBOL vmlinux 0xa7d77729 posix_acl_permission +EXPORT_SYMBOL vmlinux 0xa7e80503 netif_carrier_off +EXPORT_SYMBOL vmlinux 0xa847b536 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0xa85934f9 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xa85e4242 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xa861dcba pci_match_id +EXPORT_SYMBOL vmlinux 0xa872a105 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xa877cd39 skb_copy_expand +EXPORT_SYMBOL vmlinux 0xa882c5e2 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xa89acbb3 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xa89f6fa7 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xa8a92750 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xa8b68060 may_umount_tree +EXPORT_SYMBOL vmlinux 0xa8c49012 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0xa8ca3c1f serio_interrupt +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8f4fa05 sock_create_lite +EXPORT_SYMBOL vmlinux 0xa8f55246 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xa8fe3fb4 block_truncate_page +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa96694db __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0xa9753363 locks_copy_lock +EXPORT_SYMBOL vmlinux 0xa97920f1 unlock_super +EXPORT_SYMBOL vmlinux 0xa9b89ff0 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xa9bb5317 page_address +EXPORT_SYMBOL vmlinux 0xa9bd2676 __vmalloc +EXPORT_SYMBOL vmlinux 0xa9d394d7 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0xa9e94f13 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0xa9ed00f6 prepare_binprm +EXPORT_SYMBOL vmlinux 0xa9fcf31d wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xaa054dc2 phy_device_free +EXPORT_SYMBOL vmlinux 0xaa1b56fb scsi_remove_target +EXPORT_SYMBOL vmlinux 0xaa4cb22e pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0xaa4edd1b qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xaa5ba384 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0xaa62c9a1 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xaa84a55f mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0xaa84a8ae acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0xaaaaacd1 ioremap_wc +EXPORT_SYMBOL vmlinux 0xaab06af8 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xaab39c23 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0xaac2436f pci_disable_msi +EXPORT_SYMBOL vmlinux 0xaad39cba unregister_netdevice +EXPORT_SYMBOL vmlinux 0xaae162f6 journal_start +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaebe34f mca_write_pos +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab0d0ecb inet_stream_connect +EXPORT_SYMBOL vmlinux 0xab3735fb deny_write_access +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab740c9e open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xab7520f5 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab7b54bb skb_gso_segment +EXPORT_SYMBOL vmlinux 0xabb9406d cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0xabc31392 dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0xabc57c70 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xabc7060c genphy_read_status +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabde13fd scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0xabf92ea8 input_close_device +EXPORT_SYMBOL vmlinux 0xabff86e8 dmam_pool_create +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac1a37b5 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac76e2eb pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xac9435f3 bioset_create +EXPORT_SYMBOL vmlinux 0xac9ba388 mutex_trylock +EXPORT_SYMBOL vmlinux 0xaca8a978 simple_unlink +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacdc2626 lookup_bdev +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacf9c1ef __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad68eda5 eisa_driver_unregister +EXPORT_SYMBOL vmlinux 0xad81cae6 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0xad9bdba2 cfb_fillrect +EXPORT_SYMBOL vmlinux 0xada9bacf eth_header_cache +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadf42bd5 __request_region +EXPORT_SYMBOL vmlinux 0xae51a24b user_path_at +EXPORT_SYMBOL vmlinux 0xae75f004 ida_destroy +EXPORT_SYMBOL vmlinux 0xae8b407c pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0xae8c39ba tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0xaeb61f5d ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaed477b8 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0xaed7a603 tcp_parse_options +EXPORT_SYMBOL vmlinux 0xaedd5ec3 kunmap_high +EXPORT_SYMBOL vmlinux 0xaf0b984e free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xaf16cf96 bh_submit_read +EXPORT_SYMBOL vmlinux 0xaf366141 qdisc_reset +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf4b1540 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xaf57e11e textsearch_destroy +EXPORT_SYMBOL vmlinux 0xaf9142ea skb_make_writable +EXPORT_SYMBOL vmlinux 0xafc5fa1b setup_arg_pages +EXPORT_SYMBOL vmlinux 0xafd76d29 tc_classify_compat +EXPORT_SYMBOL vmlinux 0xafdc776e blk_queue_make_request +EXPORT_SYMBOL vmlinux 0xafe36015 mca_device_read_stored_pos +EXPORT_SYMBOL vmlinux 0xb0172095 seq_read +EXPORT_SYMBOL vmlinux 0xb0361371 scsi_put_command +EXPORT_SYMBOL vmlinux 0xb05818ba vfs_mkdir +EXPORT_SYMBOL vmlinux 0xb077ef32 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb08df35b __nla_put +EXPORT_SYMBOL vmlinux 0xb08f76ad gen_pool_free +EXPORT_SYMBOL vmlinux 0xb0a7825d tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xb0aea75b md_register_thread +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0b8701d scsi_target_resume +EXPORT_SYMBOL vmlinux 0xb0d476ce kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0xb0dec233 skb_dma_map +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0e467ac arp_find +EXPORT_SYMBOL vmlinux 0xb0e5ee4a nla_append +EXPORT_SYMBOL vmlinux 0xb0f23906 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0xb0f3a0cd dquot_reserve_space +EXPORT_SYMBOL vmlinux 0xb10820dc lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb1343fd1 rfkill_blocked +EXPORT_SYMBOL vmlinux 0xb154fcd8 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xb183f238 stop_tty +EXPORT_SYMBOL vmlinux 0xb1950131 sock_no_accept +EXPORT_SYMBOL vmlinux 0xb1974831 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1e041c2 dst_alloc +EXPORT_SYMBOL vmlinux 0xb1f53036 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb2007f05 tcf_hash_create +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb21c45d6 invalidate_inodes +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb24e1a18 pci_find_bus +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb269d420 lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xb2709d78 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0xb272fd2a proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0xb27510ef atomic64_inc_return +EXPORT_SYMBOL vmlinux 0xb277b46a __scm_send +EXPORT_SYMBOL vmlinux 0xb279da12 pv_lock_ops +EXPORT_SYMBOL vmlinux 0xb29456ce journal_force_commit +EXPORT_SYMBOL vmlinux 0xb29bc8bd idr_remove +EXPORT_SYMBOL vmlinux 0xb2a1f41d inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xb2efb6be mca_read_stored_pos +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb30abf8d idr_get_new_above +EXPORT_SYMBOL vmlinux 0xb31526ee sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0xb3205415 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb33bf702 d_find_alias +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb35fc680 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0xb376d79d radix_tree_tagged +EXPORT_SYMBOL vmlinux 0xb37fabf7 simple_rename +EXPORT_SYMBOL vmlinux 0xb3819048 __find_get_block +EXPORT_SYMBOL vmlinux 0xb3965320 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb39a0c7d scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0xb39b7602 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3a68eac skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xb3ad3eb2 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0xb3c03b70 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0xb3c147aa alloc_tty_driver +EXPORT_SYMBOL vmlinux 0xb3c42c94 per_cpu__x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xb3e0590d acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4279ab7 downgrade_write +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb45578b8 memscan +EXPORT_SYMBOL vmlinux 0xb45b24f6 k8_nb_ids +EXPORT_SYMBOL vmlinux 0xb460c0d6 secpath_dup +EXPORT_SYMBOL vmlinux 0xb468617b tcp_poll +EXPORT_SYMBOL vmlinux 0xb46e7ac3 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb490316e mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xb4b0ee4e down_read +EXPORT_SYMBOL vmlinux 0xb4bc7f8c ip_ct_attach +EXPORT_SYMBOL vmlinux 0xb4bd8f4b inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xb4ca9447 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb4ea1b76 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb512014c pcim_enable_device +EXPORT_SYMBOL vmlinux 0xb51bdc26 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0xb53e95e2 create_empty_buffers +EXPORT_SYMBOL vmlinux 0xb5418861 atomic64_add +EXPORT_SYMBOL vmlinux 0xb54393b1 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb55f96b6 fb_set_var +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb5f77554 uart_register_driver +EXPORT_SYMBOL vmlinux 0xb60efc0c napi_get_frags +EXPORT_SYMBOL vmlinux 0xb61a664d generic_setlease +EXPORT_SYMBOL vmlinux 0xb6353555 per_cpu__x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0xb643e695 bio_map_kern +EXPORT_SYMBOL vmlinux 0xb64553c1 journal_create +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6896671 crc_t10dif +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b7c99e input_set_keycode +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6e227aa rtc_lock +EXPORT_SYMBOL vmlinux 0xb6ed1e53 strncpy +EXPORT_SYMBOL vmlinux 0xb703911e release_firmware +EXPORT_SYMBOL vmlinux 0xb71572a8 dquot_commit +EXPORT_SYMBOL vmlinux 0xb72397d5 printk +EXPORT_SYMBOL vmlinux 0xb72c4609 misc_register +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb772fc17 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xb784ea5a phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0xb798a88a mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ab5c3e inet_csk_accept +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7effe8a blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0xb7f5f06d unregister_snap_client +EXPORT_SYMBOL vmlinux 0xb80b59c7 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb846b26d input_unfilter_device +EXPORT_SYMBOL vmlinux 0xb84ed32f proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0xb84f70e5 rtnl_create_link +EXPORT_SYMBOL vmlinux 0xb85a66ed scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb882b4ad tcp_gro_receive +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8aa2342 __check_region +EXPORT_SYMBOL vmlinux 0xb8ba0983 tty_port_close_end +EXPORT_SYMBOL vmlinux 0xb8cf6982 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb9117a4d skb_split +EXPORT_SYMBOL vmlinux 0xb93eb2ea phy_attach +EXPORT_SYMBOL vmlinux 0xb942b513 smp_call_function_many +EXPORT_SYMBOL vmlinux 0xb96f7c24 file_fsync +EXPORT_SYMBOL vmlinux 0xb976c9a8 cfb_copyarea +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb98ef804 vm_stat +EXPORT_SYMBOL vmlinux 0xb9ddfec7 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0xb9e74e12 save_mount_options +EXPORT_SYMBOL vmlinux 0xb9f335ec llc_add_pack +EXPORT_SYMBOL vmlinux 0xb9f72f7c journal_init_inode +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba34127d __mmc_claim_host +EXPORT_SYMBOL vmlinux 0xba471561 invalidate_partition +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba4ef579 pci_find_capability +EXPORT_SYMBOL vmlinux 0xba8268e2 __scsi_add_device +EXPORT_SYMBOL vmlinux 0xba9052b7 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbab384f1 xfrm_state_update +EXPORT_SYMBOL vmlinux 0xbad12fd2 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0xbb0679e6 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0xbb0a6904 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1ce09d get_sb_nodev +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb6eecca balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xbb89de17 ida_init +EXPORT_SYMBOL vmlinux 0xbba449dd mmc_detect_change +EXPORT_SYMBOL vmlinux 0xbbd27acf udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0xbbde691e jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0xbc3b181c pci_scan_slot +EXPORT_SYMBOL vmlinux 0xbc3c8ac2 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xbc55633c llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0xbc72a30b unlock_rename +EXPORT_SYMBOL vmlinux 0xbc7353ab skb_dequeue +EXPORT_SYMBOL vmlinux 0xbc8c14ee cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xbcabeaf4 lock_super +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbcef1095 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0xbd05beca security_file_permission +EXPORT_SYMBOL vmlinux 0xbd1337ac pci_enable_bridges +EXPORT_SYMBOL vmlinux 0xbd523a49 tcf_register_action +EXPORT_SYMBOL vmlinux 0xbd61062b xfrm6_rcv +EXPORT_SYMBOL vmlinux 0xbd691a7a netpoll_send_udp +EXPORT_SYMBOL vmlinux 0xbd6fd146 tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xbd77471c simple_statfs +EXPORT_SYMBOL vmlinux 0xbd981065 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xbdb50170 seq_putc +EXPORT_SYMBOL vmlinux 0xbdb6500e per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0xbdbc75c8 dev_get_stats +EXPORT_SYMBOL vmlinux 0xbde25086 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbdfa45ee acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe1ecd22 simple_transaction_read +EXPORT_SYMBOL vmlinux 0xbe4116e4 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xbe63ee40 request_resource +EXPORT_SYMBOL vmlinux 0xbe673190 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xbe73a684 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf255a7f mca_device_write_pos +EXPORT_SYMBOL vmlinux 0xbf433489 mmc_release_host +EXPORT_SYMBOL vmlinux 0xbf5a61ac bio_integrity_split +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf810d31 inet_stream_ops +EXPORT_SYMBOL vmlinux 0xbf8b39e9 isapnp_present +EXPORT_SYMBOL vmlinux 0xbf8fd89b tcp_connect +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfa32c36 iput +EXPORT_SYMBOL vmlinux 0xbfa39603 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfe9ddb3 __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc01eed33 __copy_from_user_ll_nozero +EXPORT_SYMBOL vmlinux 0xc03a1d53 do_sync_read +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc05df807 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0b57f28 __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xc0ba9120 names_cachep +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0f65988 machine_real_restart +EXPORT_SYMBOL vmlinux 0xc1164652 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc12f575a scsi_add_device +EXPORT_SYMBOL vmlinux 0xc139a5c5 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xc1438d8e kill_block_super +EXPORT_SYMBOL vmlinux 0xc1466a6e neigh_seq_stop +EXPORT_SYMBOL vmlinux 0xc187d03e sock_setsockopt +EXPORT_SYMBOL vmlinux 0xc19c8163 atomic64_cmpxchg +EXPORT_SYMBOL vmlinux 0xc22a76bd find_vma +EXPORT_SYMBOL vmlinux 0xc254af48 dcache_lock +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc280a525 __copy_from_user_ll +EXPORT_SYMBOL vmlinux 0xc2866022 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xc2d21294 generic_file_mmap +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2ded33c tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f67294 ip_route_output_key +EXPORT_SYMBOL vmlinux 0xc3151f8e inet_listen +EXPORT_SYMBOL vmlinux 0xc32e0155 security_path_unlink +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc3423641 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0xc34f91c0 may_umount +EXPORT_SYMBOL vmlinux 0xc3654d60 pnp_get_resource +EXPORT_SYMBOL vmlinux 0xc3861e62 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0xc386611e tr_type_trans +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3bbfee3 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc3f652b5 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xc3fa6a59 memchr +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc407b36f block_write_begin +EXPORT_SYMBOL vmlinux 0xc4152de7 sk_receive_skb +EXPORT_SYMBOL vmlinux 0xc4247275 bio_map_user +EXPORT_SYMBOL vmlinux 0xc42473fe kill_litter_super +EXPORT_SYMBOL vmlinux 0xc4472722 wireless_send_event +EXPORT_SYMBOL vmlinux 0xc44e81d6 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0xc456b0ef __put_cred +EXPORT_SYMBOL vmlinux 0xc47558e5 mnt_pin +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc49ebb27 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xc4b8da4a locks_init_lock +EXPORT_SYMBOL vmlinux 0xc4d9b3f5 generic_read_dir +EXPORT_SYMBOL vmlinux 0xc4dc24d7 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xc4e9553c blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0xc518c372 current_fs_time +EXPORT_SYMBOL vmlinux 0xc51fc1d3 thaw_bdev +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc52f9095 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0xc531b2e1 journal_dirty_data +EXPORT_SYMBOL vmlinux 0xc53bb01c flush_old_exec +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc55f7dc7 _write_trylock +EXPORT_SYMBOL vmlinux 0xc5718627 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0xc5d399db d_genocide +EXPORT_SYMBOL vmlinux 0xc5e537c7 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xc5ec6540 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xc61204a3 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0xc633495b schedule_work +EXPORT_SYMBOL vmlinux 0xc64b8442 copy_io_context +EXPORT_SYMBOL vmlinux 0xc659a07c pcibios_set_irq_routing +EXPORT_SYMBOL vmlinux 0xc66a2ad8 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0xc6a0c565 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0xc6d2084b dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0xc6d56b6d dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0xc7131591 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc7376c32 blk_free_tags +EXPORT_SYMBOL vmlinux 0xc768de19 cpu_all_bits +EXPORT_SYMBOL vmlinux 0xc77627f7 pci_get_class +EXPORT_SYMBOL vmlinux 0xc77bb32d register_gifconf +EXPORT_SYMBOL vmlinux 0xc79b8fe9 put_disk +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7c4302a sockfd_lookup +EXPORT_SYMBOL vmlinux 0xc7d23e2c generic_file_splice_write +EXPORT_SYMBOL vmlinux 0xc7d9c5b4 load_nls_default +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc7f1a485 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0xc87619af ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xc883101b bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xc88906b7 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0xc8926d99 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0xc898625d atomic64_inc_and_test +EXPORT_SYMBOL vmlinux 0xc8a45edd should_remove_suid +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8e7991a pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0xc8f5a8ae set_disk_ro +EXPORT_SYMBOL vmlinux 0xc900d4e7 tty_name +EXPORT_SYMBOL vmlinux 0xc905ded0 pci_pme_capable +EXPORT_SYMBOL vmlinux 0xc93fc89e km_new_mapping +EXPORT_SYMBOL vmlinux 0xc94ed926 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0xc9685119 tcf_action_exec +EXPORT_SYMBOL vmlinux 0xc97ddace __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xc984d3bf vc_cons +EXPORT_SYMBOL vmlinux 0xc98fe401 mb_cache_create +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9bba263 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xc9bbb6a2 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0xc9cf4aab pv_cpu_ops +EXPORT_SYMBOL vmlinux 0xc9ec8704 udp_table +EXPORT_SYMBOL vmlinux 0xc9ee829e vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xca13883d __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca6690b3 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xca8b7513 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0xca9fc194 do_truncate +EXPORT_SYMBOL vmlinux 0xcaa7948c __rta_fill +EXPORT_SYMBOL vmlinux 0xcaa8d982 flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xcab888c1 neigh_parms_release +EXPORT_SYMBOL vmlinux 0xcafd6256 dm_table_get_md +EXPORT_SYMBOL vmlinux 0xcb046cda blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xcb60ec62 __scm_destroy +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb6e1e18 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcbba01ec mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0xcbdf7d95 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc3148b0 fsync_bdev +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc4bb517 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51ee50 dma_spin_lock +EXPORT_SYMBOL vmlinux 0xcc5a1d6a i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0xcc5cd5a3 bitmap_unplug +EXPORT_SYMBOL vmlinux 0xcc5e2d3b con_set_default_unimap +EXPORT_SYMBOL vmlinux 0xcc5feea6 pipe_lock +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8f86b0 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xccc75b71 read_dev_sector +EXPORT_SYMBOL vmlinux 0xcccb756a kmem_cache_name +EXPORT_SYMBOL vmlinux 0xccedea03 d_rehash +EXPORT_SYMBOL vmlinux 0xcd06afe8 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0xcd4aa44a abort_creds +EXPORT_SYMBOL vmlinux 0xcd5e65bf __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0xcd720cad skb_free_datagram +EXPORT_SYMBOL vmlinux 0xcd812e99 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0xcd8f58a3 dev_remove_pack +EXPORT_SYMBOL vmlinux 0xcdb2c670 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0xcdb83433 get_fs_type +EXPORT_SYMBOL vmlinux 0xcdd23536 mapping_tagged +EXPORT_SYMBOL vmlinux 0xcdf87af9 kobject_add +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce7ff636 pci_enable_msix +EXPORT_SYMBOL vmlinux 0xcec31740 slow_work_register_user +EXPORT_SYMBOL vmlinux 0xcecd41a2 acpi_bus_add +EXPORT_SYMBOL vmlinux 0xced4a7e4 kmem_cache_free +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf24f19b request_key +EXPORT_SYMBOL vmlinux 0xcf44e611 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xcf484652 sock_create +EXPORT_SYMBOL vmlinux 0xcf518fa9 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xcf554421 touch_atime +EXPORT_SYMBOL vmlinux 0xcf5ccaa2 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf9beb68 arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0xcfadd723 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfe05d4d register_kmmio_probe +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xcff71243 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd021555e add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xd037e855 mca_register_driver +EXPORT_SYMBOL vmlinux 0xd039c1c7 tcp_disconnect +EXPORT_SYMBOL vmlinux 0xd04bb64d poll_freewait +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0caea77 udplite_prot +EXPORT_SYMBOL vmlinux 0xd0d3cf73 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0xd0d8621b strlen +EXPORT_SYMBOL vmlinux 0xd0eb8db7 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xd0ee0ab6 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0f19449 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0xd106eb8d bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd14f488f create_proc_entry +EXPORT_SYMBOL vmlinux 0xd1538610 scsi_scan_host +EXPORT_SYMBOL vmlinux 0xd161cd8b jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xd17ecc22 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd195bfc7 file_remove_suid +EXPORT_SYMBOL vmlinux 0xd1a967bc mmc_host_disable +EXPORT_SYMBOL vmlinux 0xd1b7f77a dcache_dir_close +EXPORT_SYMBOL vmlinux 0xd1e890f9 kunmap_atomic +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd1f91bcd dev_base_lock +EXPORT_SYMBOL vmlinux 0xd1fa2099 audit_log_format +EXPORT_SYMBOL vmlinux 0xd1fb24d1 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd22f69f1 unregister_binfmt +EXPORT_SYMBOL vmlinux 0xd249ca9b generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25816d7 md_unregister_thread +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd264e513 blk_init_tags +EXPORT_SYMBOL vmlinux 0xd267d42c down_killable +EXPORT_SYMBOL vmlinux 0xd273f2d4 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a68761 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2a863e3 input_open_device +EXPORT_SYMBOL vmlinux 0xd2a941d4 sg_init_table +EXPORT_SYMBOL vmlinux 0xd2d7e317 register_cdrom +EXPORT_SYMBOL vmlinux 0xd318d7fa iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0xd32e52c7 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0xd34f0c62 gen_pool_create +EXPORT_SYMBOL vmlinux 0xd358b0b3 set_pages_x +EXPORT_SYMBOL vmlinux 0xd37b27fe generic_file_direct_write +EXPORT_SYMBOL vmlinux 0xd37d9e9f generic_write_end +EXPORT_SYMBOL vmlinux 0xd37dad03 lookup_one_len +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd3b0f6a4 d_add_ci +EXPORT_SYMBOL vmlinux 0xd3f74cf1 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd3f91bb9 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xd402b366 input_event +EXPORT_SYMBOL vmlinux 0xd418e1c0 adjust_resource +EXPORT_SYMBOL vmlinux 0xd42b7232 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xd4386374 log_wait_commit +EXPORT_SYMBOL vmlinux 0xd44f5239 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xd4546813 filp_open +EXPORT_SYMBOL vmlinux 0xd4645c65 eisa_driver_register +EXPORT_SYMBOL vmlinux 0xd468de74 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xd4762393 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0xd483c15f blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xd4e9fbac genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0xd4f41dea napi_frags_skb +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd511c4e4 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd54343d2 pnp_device_detach +EXPORT_SYMBOL vmlinux 0xd54594a5 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xd5581af7 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0xd5673028 i2c_verify_client +EXPORT_SYMBOL vmlinux 0xd5688a7a radix_tree_insert +EXPORT_SYMBOL vmlinux 0xd56daa8b bio_free +EXPORT_SYMBOL vmlinux 0xd588c6f4 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xd5bb8e90 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0xd5dece18 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xd5ec307a arp_tbl +EXPORT_SYMBOL vmlinux 0xd609b36e kernel_accept +EXPORT_SYMBOL vmlinux 0xd60f92a9 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0xd61919a5 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd676f868 unregister_md_personality +EXPORT_SYMBOL vmlinux 0xd69b5c7f skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0xd69e924d slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6bbf65e ip_fragment +EXPORT_SYMBOL vmlinux 0xd6bc1bb3 __elv_add_request +EXPORT_SYMBOL vmlinux 0xd6bfc70c mpage_writepage +EXPORT_SYMBOL vmlinux 0xd6d163f9 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6ef1c78 simple_sync_file +EXPORT_SYMBOL vmlinux 0xd6f5355b xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0xd73c9319 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0xd74d0497 pcim_iomap +EXPORT_SYMBOL vmlinux 0xd756f3bb generic_permission +EXPORT_SYMBOL vmlinux 0xd768e01a blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd784db3f sk_wait_data +EXPORT_SYMBOL vmlinux 0xd78fb179 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a5c6d4 kmalloc_caches +EXPORT_SYMBOL vmlinux 0xd7a6fafa panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd7bcc707 dget_locked +EXPORT_SYMBOL vmlinux 0xd7c48536 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0xd7d2e83e acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xd7d36d1a idr_find +EXPORT_SYMBOL vmlinux 0xd7d67687 get_io_context +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7eefb4f unregister_con_driver +EXPORT_SYMBOL vmlinux 0xd7fda8b1 phy_detach +EXPORT_SYMBOL vmlinux 0xd7fe097f blk_execute_rq +EXPORT_SYMBOL vmlinux 0xd8021434 ppp_unit_number +EXPORT_SYMBOL vmlinux 0xd81e8d8c security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0xd82613c0 atomic64_sub_and_test +EXPORT_SYMBOL vmlinux 0xd8282ff0 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd851af78 up_write +EXPORT_SYMBOL vmlinux 0xd85958f2 page_symlink +EXPORT_SYMBOL vmlinux 0xd85b2362 open_by_devnum +EXPORT_SYMBOL vmlinux 0xd8697036 put_page +EXPORT_SYMBOL vmlinux 0xd894cd6e sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8a65c38 atomic64_sub +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8eb10c9 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd90b54d0 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xd923c453 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xd92bb1be alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0xd963a74a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd996d859 idr_pre_get +EXPORT_SYMBOL vmlinux 0xd999c118 dma_alloc_from_coherent +EXPORT_SYMBOL vmlinux 0xd9c01abc try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xd9c272aa mca_mark_as_unused +EXPORT_SYMBOL vmlinux 0xd9c559c1 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xd9d8b2c1 seq_lseek +EXPORT_SYMBOL vmlinux 0xd9fa3be9 sock_wmalloc +EXPORT_SYMBOL vmlinux 0xda08c0d7 pcibios_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda2ab28a __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xda2cea7e phy_stop +EXPORT_SYMBOL vmlinux 0xda3449d7 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0xda34ec64 seq_release_private +EXPORT_SYMBOL vmlinux 0xda3863ca inet_frag_kill +EXPORT_SYMBOL vmlinux 0xda74533a napi_complete +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda7d9cb1 mutex_lock +EXPORT_SYMBOL vmlinux 0xda82ca6b uart_match_port +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8fd495 isapnp_write_byte +EXPORT_SYMBOL vmlinux 0xda928914 nmi_watchdog +EXPORT_SYMBOL vmlinux 0xdaa4ce35 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdab90bd1 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0xdabcfb5c dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xdac0cbca phy_start_interrupts +EXPORT_SYMBOL vmlinux 0xdb085439 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdb4cabb2 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdbb0f8d5 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdc01dc45 mntput_no_expire +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc170bdc read_cache_page_async +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc38831b journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc50cfee gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xdc54f859 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0xdc7f68b7 revalidate_disk +EXPORT_SYMBOL vmlinux 0xdc819bd7 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0xdc873a70 screen_info +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb3d0d9 i2c_clients_command +EXPORT_SYMBOL vmlinux 0xdce314d9 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xdce5cb89 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd1a61fc generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0xdd2d285d dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0xdd3e36dc km_state_expired +EXPORT_SYMBOL vmlinux 0xdd6bfccd radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0xdd76f3c8 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0xdd7a93ea ppp_input +EXPORT_SYMBOL vmlinux 0xdd9e248d unregister_key_type +EXPORT_SYMBOL vmlinux 0xdde15f7f dm_get_device +EXPORT_SYMBOL vmlinux 0xddf13b1d icmpv6_send +EXPORT_SYMBOL vmlinux 0xde12a73c skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xde1fd694 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0xde4282ca kmap_high +EXPORT_SYMBOL vmlinux 0xde559e2a __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdeedeb08 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf11cbb5 journal_release_buffer +EXPORT_SYMBOL vmlinux 0xdf2191f4 sg_miter_next +EXPORT_SYMBOL vmlinux 0xdf3489e8 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0xdf417821 vfs_quota_off +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf5171a3 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf62a904 nonseekable_open +EXPORT_SYMBOL vmlinux 0xdf6861f5 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0xdf7a16d4 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0xdf7a6293 ppp_register_channel +EXPORT_SYMBOL vmlinux 0xdf7aaec0 inet_accept +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfa70185 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xdfba13a6 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0xdfc0c189 ndisc_send_skb +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfdd85db jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0xdfe9f058 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xdffb60c8 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xdffd2e00 journal_restart +EXPORT_SYMBOL vmlinux 0xe00c89ea __nla_reserve +EXPORT_SYMBOL vmlinux 0xe0243d9f alloc_fcdev +EXPORT_SYMBOL vmlinux 0xe075d08a tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe089ffde acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0xe0939b95 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xe094ef39 sg_next +EXPORT_SYMBOL vmlinux 0xe096b282 vfs_symlink +EXPORT_SYMBOL vmlinux 0xe0a501e3 idr_remove_all +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0b44ca2 con_is_bound +EXPORT_SYMBOL vmlinux 0xe0bb7053 force_sig +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0dae11b bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xe0eaaf7c add_disk +EXPORT_SYMBOL vmlinux 0xe0f105a3 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0xe1324b84 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0xe13364da dev_get_by_index +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe16c7986 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xe170cfdc pcim_iounmap +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe1a166b7 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1abd1ac module_put +EXPORT_SYMBOL vmlinux 0xe1beb4c6 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xe22a9137 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xe22f5d81 blk_register_region +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe23d7acb up_read +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe2520c34 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xe2640144 dev_trans_start +EXPORT_SYMBOL vmlinux 0xe283aa94 skb_checksum +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2ed6219 __mutex_init +EXPORT_SYMBOL vmlinux 0xe2ed922b bitmap_startwrite +EXPORT_SYMBOL vmlinux 0xe2f124a9 bdput +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe3690e24 register_nls +EXPORT_SYMBOL vmlinux 0xe373a0e8 generic_fillattr +EXPORT_SYMBOL vmlinux 0xe38b046b generic_file_open +EXPORT_SYMBOL vmlinux 0xe38b8878 nf_ct_attach +EXPORT_SYMBOL vmlinux 0xe3e09270 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe420eb29 dev_open +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe44a1094 register_snap_client +EXPORT_SYMBOL vmlinux 0xe456bd3a complete +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4870354 _read_trylock +EXPORT_SYMBOL vmlinux 0xe48cbaef mdiobus_write +EXPORT_SYMBOL vmlinux 0xe48f3039 ida_get_new_above +EXPORT_SYMBOL vmlinux 0xe4c1df3e _read_lock_bh +EXPORT_SYMBOL vmlinux 0xe4c4c6ee skb_store_bits +EXPORT_SYMBOL vmlinux 0xe4c62ce7 unregister_filesystem +EXPORT_SYMBOL vmlinux 0xe4dd4a39 sysctl_data +EXPORT_SYMBOL vmlinux 0xe4e27ca0 register_key_type +EXPORT_SYMBOL vmlinux 0xe4e3f8b7 ndisc_build_skb +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe5161372 get_phy_id +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe526183a test_set_page_writeback +EXPORT_SYMBOL vmlinux 0xe5760376 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5b1623f generic_file_splice_read +EXPORT_SYMBOL vmlinux 0xe5bcaa61 eth_mac_addr +EXPORT_SYMBOL vmlinux 0xe5c3266b elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5eb474c otg_get_transceiver +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe6016e76 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0xe60eefb4 mmc_request_done +EXPORT_SYMBOL vmlinux 0xe62ee812 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0xe6621266 kernel_bind +EXPORT_SYMBOL vmlinux 0xe67fe244 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6a0d7dd journal_check_used_features +EXPORT_SYMBOL vmlinux 0xe6a62f28 pci_set_mwi +EXPORT_SYMBOL vmlinux 0xe6b3ddfa security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6ec09f7 make_EII_client +EXPORT_SYMBOL vmlinux 0xe6f7c5e0 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe700345e __register_binfmt +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe71abbc5 d_alloc_root +EXPORT_SYMBOL vmlinux 0xe74cc1e3 scsi_print_result +EXPORT_SYMBOL vmlinux 0xe77a6de1 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0xe77fe649 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7e1b4bc tcp_rcv_established +EXPORT_SYMBOL vmlinux 0xe7e6d4c4 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xe7ec01ef security_path_symlink +EXPORT_SYMBOL vmlinux 0xe7fdab2d pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe81f1cee sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xe8206294 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0xe842e973 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0xe86564ea scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xe8657a31 uart_suspend_port +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe8959398 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL vmlinux 0xe8b68849 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0xe8bdf65b scsi_remove_device +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8f2342a rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0xe907ea48 nf_setsockopt +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe94e3f98 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0xe95ec312 mca_bus_type +EXPORT_SYMBOL vmlinux 0xe95f80ac mca_device_transform_memory +EXPORT_SYMBOL vmlinux 0xe9715543 ps2_handle_response +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe9d6992a fb_set_suspend +EXPORT_SYMBOL vmlinux 0xe9d8e809 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0xe9ed76d9 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea2d33a2 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0xea538d08 clocksource_unregister +EXPORT_SYMBOL vmlinux 0xea700ed6 dev_mc_sync +EXPORT_SYMBOL vmlinux 0xea771660 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea852925 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0xea858cb5 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xea8a4af8 journal_extend +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xeaa75ea6 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0xead4ff04 vfs_readv +EXPORT_SYMBOL vmlinux 0xead5c004 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeb1fabf6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xeb328a06 kern_path +EXPORT_SYMBOL vmlinux 0xeb3a2365 dquot_free_space +EXPORT_SYMBOL vmlinux 0xeb3be6fc mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xeb5f7229 skb_tx_hash +EXPORT_SYMBOL vmlinux 0xeb67657c journal_update_format +EXPORT_SYMBOL vmlinux 0xeb7e28b0 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xebb602bc inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0xebb61de6 free_task +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xec5f33fe __wait_on_buffer +EXPORT_SYMBOL vmlinux 0xec6c8fb0 fb_get_mode +EXPORT_SYMBOL vmlinux 0xec73861e starget_for_each_device +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec96246e blk_insert_request +EXPORT_SYMBOL vmlinux 0xecde1418 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0xed0b548c kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xed0f778c tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xed27f58d bio_split +EXPORT_SYMBOL vmlinux 0xed2c994e cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xed3b5819 tty_port_init +EXPORT_SYMBOL vmlinux 0xed4ec955 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0xed70de32 md_check_recovery +EXPORT_SYMBOL vmlinux 0xed975deb vmalloc_to_page +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xee21440c sock_no_bind +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee324b3f mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0xee697038 dquot_free_inode +EXPORT_SYMBOL vmlinux 0xee72d4cb pci_set_master +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee81a4fe deactivate_super +EXPORT_SYMBOL vmlinux 0xee8c8027 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xee9e45b5 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xef3114b2 bd_claim +EXPORT_SYMBOL vmlinux 0xef3bd862 mca_find_unused_adapter +EXPORT_SYMBOL vmlinux 0xef641122 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xef6dbd47 proc_mkdir +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xefa76814 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xeff14be9 ioremap_cache +EXPORT_SYMBOL vmlinux 0xeffb1d1a sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf012b215 dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0xf0291847 mark_info_dirty +EXPORT_SYMBOL vmlinux 0xf0416b77 lock_may_read +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf0907f15 scsi_host_put +EXPORT_SYMBOL vmlinux 0xf0b468f6 skb_queue_tail +EXPORT_SYMBOL vmlinux 0xf0e68a88 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0f5db60 no_llseek +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf1046bc1 commit_creds +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf11d286a generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xf13ab00b blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0xf147abb6 __dst_free +EXPORT_SYMBOL vmlinux 0xf1504297 dquot_drop +EXPORT_SYMBOL vmlinux 0xf15205e3 km_state_notify +EXPORT_SYMBOL vmlinux 0xf164dee5 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf19c96bf tcf_exts_change +EXPORT_SYMBOL vmlinux 0xf1b34e58 keyring_clear +EXPORT_SYMBOL vmlinux 0xf1b5c0b4 sg_miter_stop +EXPORT_SYMBOL vmlinux 0xf1d64416 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf1d731e1 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0xf1d79aff md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e6507a blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1fb5b83 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0xf200dd04 napi_gro_flush +EXPORT_SYMBOL vmlinux 0xf202619e tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf21570eb gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0xf215fece pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0xf2490db2 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0xf25fcef4 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0xf28c666b key_alloc +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2c38b53 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0xf2d58a5f brioctl_set +EXPORT_SYMBOL vmlinux 0xf2e4ed1a bdevname +EXPORT_SYMBOL vmlinux 0xf2e74040 mca_set_adapter_name +EXPORT_SYMBOL vmlinux 0xf2fa8027 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xf3126810 vm_insert_page +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39becb3 scsi_print_sense +EXPORT_SYMBOL vmlinux 0xf39bf4d9 put_cmsg +EXPORT_SYMBOL vmlinux 0xf3a0e10f i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xf3a8c1da jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xf3b27774 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3fbf957 free_netdev +EXPORT_SYMBOL vmlinux 0xf4054297 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0xf41f28aa write_inode_now +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4456bbd scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0xf44e63ae unlock_buffer +EXPORT_SYMBOL vmlinux 0xf4551b0a xfrm_lookup +EXPORT_SYMBOL vmlinux 0xf4570172 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xf48a2c4c MCA_bus +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4a4a717 eth_type_trans +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4ae9d51 ida_pre_get +EXPORT_SYMBOL vmlinux 0xf4c037a0 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf502d273 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf521edb4 netlink_broadcast +EXPORT_SYMBOL vmlinux 0xf52f1d7c pci_pme_active +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf552a1d2 uart_resume_port +EXPORT_SYMBOL vmlinux 0xf554c94f update_region +EXPORT_SYMBOL vmlinux 0xf557fe04 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xf565acb8 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf57b1d25 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xf5aab254 unregister_8022_client +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c22522 do_splice_to +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5d01cdf mca_device_transform_irq +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf61e3616 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xf628e910 remove_inode_hash +EXPORT_SYMBOL vmlinux 0xf62c7cdd nlmsg_notify +EXPORT_SYMBOL vmlinux 0xf62f55f5 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xf636e459 __alloc_skb +EXPORT_SYMBOL vmlinux 0xf678efd5 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0xf690ded7 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0xf6aba427 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xf6b0fddd blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf72fc204 udp_poll +EXPORT_SYMBOL vmlinux 0xf74a63b5 x86_mce_decode_callback +EXPORT_SYMBOL vmlinux 0xf74c80f0 dqget +EXPORT_SYMBOL vmlinux 0xf7533668 kobject_get +EXPORT_SYMBOL vmlinux 0xf7614e82 seq_open_private +EXPORT_SYMBOL vmlinux 0xf7618e3e pci_remove_bus +EXPORT_SYMBOL vmlinux 0xf7623914 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xf786ef5e idr_init +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf78dd9ef ip_queue_xmit +EXPORT_SYMBOL vmlinux 0xf7ac3032 unload_nls +EXPORT_SYMBOL vmlinux 0xf7ad1df0 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0xf7d19af6 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0xf7e02879 sock_no_poll +EXPORT_SYMBOL vmlinux 0xf7ec63fd lro_receive_skb +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82cea3d kmap_atomic_to_page +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf8588848 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0xf86f7e55 dev_mc_add +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8b30e93 mempool_create +EXPORT_SYMBOL vmlinux 0xf8cf9ee5 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xf90f26a4 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0xf919c8f3 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xf926c205 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0xf934d455 key_unlink +EXPORT_SYMBOL vmlinux 0xf940a328 __next_cpu +EXPORT_SYMBOL vmlinux 0xf94e938b kobject_del +EXPORT_SYMBOL vmlinux 0xf9637447 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xf9899664 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xf98a3abc dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0xf9a0f96a sock_no_listen +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9a59115 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xf9a9dfcb dput +EXPORT_SYMBOL vmlinux 0xf9ce97ec per_cpu__current_task +EXPORT_SYMBOL vmlinux 0xfa01a4fa journal_wipe +EXPORT_SYMBOL vmlinux 0xfa0564fc __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfa1c5802 kunmap +EXPORT_SYMBOL vmlinux 0xfa1cf08e default_llseek +EXPORT_SYMBOL vmlinux 0xfa21b73f acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0xfa25bfa9 acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0xfa39074e seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xfa39a7e7 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xfa3de685 vfs_read +EXPORT_SYMBOL vmlinux 0xfa5033b0 qdisc_destroy +EXPORT_SYMBOL vmlinux 0xfa530276 mnt_unpin +EXPORT_SYMBOL vmlinux 0xfa7f21e0 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xfa8bef38 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xfa945bdc ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0xfaa46271 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0xfaa90fbd ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0xfaad3ad0 simple_lookup +EXPORT_SYMBOL vmlinux 0xfaf2ba14 neigh_seq_next +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0a30e9 pci_release_region +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb2c6cdd ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0xfb3c1540 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xfb483264 phy_connect_direct +EXPORT_SYMBOL vmlinux 0xfb63ecb3 sock_no_connect +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfba0c2e0 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xfbc2198b llc_sap_open +EXPORT_SYMBOL vmlinux 0xfbda52f4 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc1207e7 rfkill_register +EXPORT_SYMBOL vmlinux 0xfc21e136 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0xfc2c233c pskb_expand_head +EXPORT_SYMBOL vmlinux 0xfc2e3121 dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc4aaf4a dev_change_flags +EXPORT_SYMBOL vmlinux 0xfc533f85 schedule_work_on +EXPORT_SYMBOL vmlinux 0xfc562165 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xfc6256b9 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfc6ddcc2 iget_locked +EXPORT_SYMBOL vmlinux 0xfc890818 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xfc90445c mutex_lock_killable +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc4d4e4 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xfcc75a09 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcf730dd bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfcfc8fdb phy_register_fixup +EXPORT_SYMBOL vmlinux 0xfd0e2d50 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xfd248a4d clip_tbl_hook +EXPORT_SYMBOL vmlinux 0xfd26394d fget +EXPORT_SYMBOL vmlinux 0xfd33ad6f pci_clear_master +EXPORT_SYMBOL vmlinux 0xfd4b6ccb thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xfd6ac58f ndisc_mc_map +EXPORT_SYMBOL vmlinux 0xfd6f4850 native_wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfd922d60 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xfd9ecf68 task_nice +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfda92759 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdc02a23 kernel_read +EXPORT_SYMBOL vmlinux 0xfdeade7d jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0xfdf269d7 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe56658c check_disk_size_change +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe6a7740 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe79d253 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe84fd73 kill_pgrp +EXPORT_SYMBOL vmlinux 0xfe91b2ff __seq_open_private +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff2a5be4 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xff3c6845 tty_port_hangup +EXPORT_SYMBOL vmlinux 0xff480992 dump_fpu +EXPORT_SYMBOL vmlinux 0xff4aaa82 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xff5584d6 dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6eaeeb scsi_register_interface +EXPORT_SYMBOL vmlinux 0xff708fd3 mempool_destroy +EXPORT_SYMBOL vmlinux 0xff84806b inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffa86a07 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xffab02d3 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xffc08c5d bio_put +EXPORT_SYMBOL vmlinux 0xffc7c184 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffda6eb8 ip_setsockopt +EXPORT_SYMBOL vmlinux 0xffdb82bc sg_free_table +EXPORT_SYMBOL vmlinux 0xffe0537d sock_map_fd +EXPORT_SYMBOL vmlinux 0xfff6c212 pci_disable_device +EXPORT_SYMBOL vmlinux 0xfffba58c __bio_clone +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x04c2c31c kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x094ac8f4 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0dd7efb0 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x11092947 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12d1b23b kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x13de7eab kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1608430d kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1649fb14 emulator_write_emulated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x17390b31 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x195d6d01 is_error_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a9df35f __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e4580bb kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x228c3f31 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2322e039 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x29dc62ca fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2d03069a kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3574cb8f kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x38ca9dbf kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b7706d2 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3c6aecca kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3dfc7873 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3eaf9e73 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3f86426e kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x416e5cd6 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x418bffe6 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x41ddad66 emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4a7cbe69 is_error_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4e41db17 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4f7792d4 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x50736b5f kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x508ede13 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5591f501 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x599086dd kvm_handle_fault_on_reboot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6b32c669 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x720fb3a0 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x72605a69 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x74f67044 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7599944f kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x780e56b8 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7bd176a2 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8c8039b1 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e7f9b47 segment_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x90e48927 kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x91dc6afd kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x93acfef7 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9916a45c kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9de18998 gfn_to_memslot_unaliased +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa361bc65 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa3af0443 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xab6bfdbf kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xac054040 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb0870edc gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb11801c6 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb50a6f50 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb542c3a3 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb6acb856 kvm_load_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd377dc9 kvm_mmu_set_nonpresent_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbd94103b kvm_mmu_set_base_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc5406273 kvm_emulate_pio_string +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc7cf7c00 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc8b5351a kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xca70f118 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcea5bf57 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd296def9 kvm_is_error_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd3c0a6da __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd517e4b0 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd84a7ec1 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdead7e81 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdfa2189f kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe2b44c7b kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe7efc479 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe914de16 kvm_put_guest_fpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe9a4bf53 kvm_emulate_pio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xea52807b kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xea6cfa2e kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xed955a3d kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf2ae8b81 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf7cf46c8 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xff18094d kvm_report_emulation_failure +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x67502576 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x87923965 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xa5000662 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xe5922471 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00346cc8 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x58e9c09f async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x040f3be3 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x58b8eb95 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x90c79863 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xcf4443fc async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x5c453a11 async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xfab85e36 async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x17d6147a cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x2cf1c02b cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x4cea0ddb cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x5727b7ee cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x94f4accc cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0xa4fd54c0 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xf4a156b2 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x13ee602f twofish_setkey +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x2b1554d5 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x55551eff btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x5b055733 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x954260cf btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xedcd6bf3 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xfc78ed2d btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x105a6b71 agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x11d69bfc agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/scx200_gpio 0x477799aa scx200_gpio_ops +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x0e2bb95d tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x32021fad tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x410671f8 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4b162c2e tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x4f7bb572 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x50385a57 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x53bfb588 tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x5adfb609 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x67612663 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x784d4544 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7f3ecdf5 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x8c9cbedf tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x93585f2b tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x953ce5c5 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9c08423d tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9caa0669 tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9cc9fae8 tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa601c24e tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xb24c5591 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc97b71b6 tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xcb902d3c tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf0b78ef2 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf4d453d5 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x1d9d227f tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x3e25c3a7 tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/dca/dca 0x0e2d7723 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x62bf850c free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x6456b131 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0xbfc94adb dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xd30e7c55 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xf64d8d24 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xf92f96b5 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x1c6f44d8 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2632149a edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x47a6cd8b edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x57b4fc2e edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5e61ecab edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6247531a edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6ce304de edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x796f8dc9 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x7b09274e edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9189e78f edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9854ce4e edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9f452072 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xaf101b5a edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb289dc7f edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb9772804 edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc909d28a edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xcb2fa2e3 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xcdb0c695 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xd7a919c2 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf1228198 edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf909752a edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf9478ae2 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xfd34aa9d edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xfeb99401 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0f0ba55e ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1823885a amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x4b01887d pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x7509830f to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x955c1f76 amd_decode_nb_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb98537cb rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xc2e765d2 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xd0f094a0 ext_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xe6ff7e0c ll_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xf8dec080 tt_msgs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x930669ab drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x9c0be938 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00767f39 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x039b4f00 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0481db3b hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0ce1b6ae hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x169068ae hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1c55f5a9 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x21b8026f hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x24128851 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x384dce04 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x444c0ebf hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x45df3460 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4c97a520 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5b673324 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x694e69af hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9a9a61df hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa887d036 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb67b21cd hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc5dcebb4 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd205421b hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdb79bafe hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdcb7515a hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xdf9bb460 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe0970667 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf0423046 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf724bdee hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x1e7dc803 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x5669ffb8 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xbb8614d3 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x158cf4b6 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xad356786 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xb3c3ea79 lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe7a521a1 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xec6e4e56 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x8b159f94 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xb3cb2980 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xb8e0229a hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x4be53a27 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x462b3283 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x573677e9 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x66982c84 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x6e9f40ce wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7b681385 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xa1361682 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xa2354050 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xbf8b5d0a wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xc22f7f77 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xcad0c540 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd3f73d0c wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe3768086 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x0dee324d gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x246cb4d1 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x25c64934 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x42247bb5 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x48a4c8f8 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e792275 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x5924f860 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x87fb7453 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x95d37aa5 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9643c205 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x964be555 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x96a6c99d gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb10bc42c gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb805155d gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xba6b6bc1 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xcbe12774 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x86d2618c led_classdev_resume +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xdcfd9303 led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xf258cf55 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xf796213e led_classdev_register +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x0b8ef590 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x4a48d81c raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1439ca2a ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x30071b95 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa29d0a86 ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x08894810 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x2b1f4e62 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x4c511130 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x6744a4e8 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x82ac8090 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x8fc5e78b saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xaa023a9c saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb598ce1b saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xba2a967f saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xc11d8dc8 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xf92c4b23 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x116cf040 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1e071a98 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x24f42a4b saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x825bc9fa saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xc32e7987 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xdf91a5e2 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xfa39c634 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xdaed7733 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x09f8ac72 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x313f5806 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0xb2a73cce tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x15972231 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x32e3dd98 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x739cf18c tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xa451af65 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xff887e88 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x02aba84d tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x9e1951cf tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x62fa9a6a simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x14605610 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4004b059 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4eada28a smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x591e4fd3 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x6031a2d9 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x652382eb sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x6b45e490 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x6c079230 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x6ff01204 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7d588153 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x948ff7f1 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xa5543a77 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xbe3ad52f smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc2f972d7 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc4d2f875 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc7a6e0bd smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd797870b smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe6b5317c sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfcbabb07 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x1dc722de ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x4af4b770 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x9847e73d ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xc6f8a1a6 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xd11dfcf9 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe3bd79dd ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe7a202a0 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x09107389 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x4e477bec cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x67183bae cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x6b2394c5 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x7abd8bc3 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9c21b9a9 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xb49506b9 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xc5fc1606 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xe02c95cb cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfce449f5 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfec7d0db cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0x1310d35c cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x2842d333 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x5ffdc494 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7511f040 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xb2a7744a em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xf7d85178 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xfdff1352 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x1d28f354 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x2ab30642 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x473f90f2 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x6eb4ae47 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x9821025d saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x361db032 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x6bd240b7 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x7ef7f9c9 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xb4c1b5ac v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x0e5bb3c9 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x1fbf7b0a v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x32ac9481 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xcce29c1c v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0dbacfb1 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1c1a1e34 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2390b2b4 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x268fca6e videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2affb922 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3448e520 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x367a676f __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x397d780a videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3ffa5074 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x410ecc0c videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4378332d videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x52b258c5 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x559bbbd1 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x593278ab videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x69c6a0f9 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x81a0e5e3 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x86df7c78 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x917892ed videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb94635fd videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbb59e503 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbdb16a63 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc432f400 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc7c60542 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc9f72682 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xcb053abe videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x2f174e20 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x432b3b27 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x451a69c2 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x560db925 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x59cdf633 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x6188edd7 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x72bf9953 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x73996d11 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa825c75b videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xac95ffc5 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb1210592 videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb1870e49 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc5aa2b6c videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe8a24336 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x163d16ba videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x51bb9a2d videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xa012c8b0 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x1bb03fe0 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x28bef3c1 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x5e083c77 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x8b0e501c v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xcf34dc44 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xdbde84c4 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x15440704 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x768d3f6d i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x882ad5f7 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xa352918a i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xad9ac450 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc24ede98 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xd956a25d i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xeafd8798 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x01155b36 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x6c97dca5 mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x7fcf6efa mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xa1c6e8a7 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xb6525bd6 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xcbbecda4 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xed5fe09f mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x3fe42359 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xf4f4fbfc pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x01d48b03 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x03b927c3 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x3cd98ece pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x61834824 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x6ab206a8 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7b1e96a4 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x85bfddcb pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa8d4080f pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xb15073cf pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xbc57f90c pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xd90983ef pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x0a178d10 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x23b45ccc pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x3c32e199 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x8cf762b0 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xe1994ce6 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x102ecd3f sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x3ed25631 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x4d3db2bd sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x6215459e sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xa055a30c sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0xb1b00d91 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x4357eb6e wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x673ed669 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6e215544 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x8a644595 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x9d11f08c wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xcb5cdd53 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd010b6de wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd4541382 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe63055f9 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf8ac191c wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xfa17ef31 wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xfdf9f07d wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x03b22712 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x073d60bb wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x09aa4175 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x0a59f180 wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1540072c wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x20bce2d5 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2e2280e6 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4404d7c5 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x91b00678 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x957058b4 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x991578c3 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd2f1a3b1 wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd312d364 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf2f0680b wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf7073d7e wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf9624dfd wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x586b00e7 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x9fa797c8 wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xca270506 wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xd777024f wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x03ed39f7 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x06b35028 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x2b2b934c cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xc6ef89cd cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x37ba2c32 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x82f72eae enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xa6ac9afa enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xcc1afc0d enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xe217de0b enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf01665be enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf4cde7fb enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x07055ffc sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x0dae14e4 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x36f6f5c1 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x52fc4293 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xdbd39bf1 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xed323c0a sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x1d95f6b9 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x4be5e5ec cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x62ff1e4f cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x9bcae0be cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xfd26f3b4 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x50474315 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x93551950 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xf3f8b73d cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0x3847c2ab DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x1ab97dcd DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x75221dd6 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0339977b parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x18a32a51 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x28dfba13 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x30a182bb kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x30e813a3 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8566759e mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8b5f4b08 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x91373fa9 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x94eb2c51 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x9941c4b6 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa75d9e93 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xab17c8d0 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xab2486da add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb0975638 mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xeba7752a register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xefeacbde get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x46096367 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x964c30cc del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xde0d7a11 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xf3cf78f3 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x06bfb744 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x1ee3adbe nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x480738f6 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x93c137f0 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc82ede13 nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00f19314 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0xa3447968 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x413aa274 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4b75ca88 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9256b158 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9a3b2bc9 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9f5bc429 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb279d3f8 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc247ddd ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xcaa28668 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xcc08cdf9 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xe4acde59 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf5bca455 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfa4dcbc6 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1caabe23 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x49a9b3de can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x6dccbd4e can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x736b96ae alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x8dd9ccd4 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x987d43f2 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x9f81c5c3 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xef7aead6 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xf8e472a6 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xffd2f241 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x286ee9dc alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x520d23d2 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x8ba0208d free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xf4d3fb3f register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x11e8aeae mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x130d3a2c mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1539a987 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x267f5229 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x27ec983b mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2b54dfb0 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x316c0006 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x331950fe mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x34239fb8 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x377d2530 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3bbfc2e9 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x418382eb mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4b88e3bb mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x56612604 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x57d1ef27 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6391043d mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x64236545 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x65baf5d5 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x776512a0 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7cd06c83 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7d6b3441 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7fe5951f mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x84679528 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8a714e85 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8c254855 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8cba7120 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8d4ed19b mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x90a2cb46 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x93939a1c mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9731eb50 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9ab5d346 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9c98d537 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9d4218cb mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9f134a31 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa20f73ad mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab5b87ae mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf0a33f0 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb47d04c5 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb9c13436 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbc692f71 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc6b5268b mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xca2e6a6a mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcaa456e6 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcac422bd mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcb0b103f mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xccc1af80 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdee245cf mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe0f8e381 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe684bd33 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xec29eebe mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf0243703 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf39358ca mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfd5a68f2 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x1c6ee5a7 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xe8b7a3a2 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x0a67e453 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x1cb61228 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x231c4495 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xc56178f7 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xd0359eaa rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xd5a8a7e5 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x025788cc usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x054ed089 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1c89043a usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x20b279b6 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2d865594 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2df5cd8b usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4089bed9 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x44a03938 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x503035db usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5366bb1c usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x600634aa usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x78a6535a usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7ab956fc usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8283e25f usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8b7e702d usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x94a0132e usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9532b496 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc41dc1b4 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc4b48d25 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xcf06386d usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdb240998 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf25a77fa usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf97da5a7 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfc6d9dea usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x0f379b0f i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x249bbf23 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x24b044ef i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x293eb9d7 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2e18bd33 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x48960ed8 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x48f5f7b4 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5b669d30 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x9afe81d8 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa430047f i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb3c15e05 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd3658f74 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf2f40ba3 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x0bf6c2f5 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1c13b5fe lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1e11700f lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1fb3e9cd lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3a62205e lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x4f371f40 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x668d29d2 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa250a608 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xadd0bee5 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd4062576 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd573db04 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd80a5e45 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd9eac2a6 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf911d7a6 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf9e5cb87 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfccb9239 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x0567e633 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3ed90099 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6c69ed76 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xb35a7904 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xb650a971 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xb81a1d28 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xe7bfc181 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xf68faa36 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x22a5a549 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xd08c2c17 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x219ddc97 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7cb683fa p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7d5ddb6b p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x88879d70 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xdf7d4aac p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xe1dda7ca p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xed86c39c p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf627332e p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xff942f4a p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x04aad0c5 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x06751256 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2ac57979 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x312b95b4 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x36b0aedd rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3daa037b rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3e8cd621 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x57b01fbb rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x586b6214 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6503226d rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8530bfc7 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x870594d2 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x87d2415c rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x891668ec rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x99281621 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9d69bbf5 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa3418d54 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc0e70c61 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc5dbfd31 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcfe02637 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xed1cba7e rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf564e74b rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xfb31b006 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xff2ed25b rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1096bb05 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1395d4db rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x4f6a1930 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x84df5c14 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x8fc272ef rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb72475dc rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xca6bfe94 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xde2f3f3b rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xef78336b rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0aee310b rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x281f9c2f rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2a715ce1 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x303ac8f1 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x32d5b7dd rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x515cfca4 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x539b3416 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5a6a0ee4 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x63c44b1f rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x6bc28513 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9be50b79 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xa58fc0d7 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xaa96b77c rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbc0f5682 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbf880304 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xffbec56b rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x4505834e wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x50626cb3 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x6ac54735 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x91871a95 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0xdcab1ed2 acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x781caddc pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xd07979d4 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x3686e14a wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x49c3c8a5 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x5667414f wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x6f57e50f wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xb9dd1c9a wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd4cd7081 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x5e9dcd20 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xb52686aa fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0233f349 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0f686818 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x13b349b7 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1a1776a9 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x25b6da41 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x25bb6788 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x30e0610d iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3b9e36b7 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x409d582b iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x412582d0 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41ba1d14 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x43083f0a iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x442ecae0 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4898516a iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x515f0faa iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x54d7c02e iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x58c65035 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5d16cbea iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x72781116 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7711c22b iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x88b3dd5c iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x89996eec iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x92eae6a3 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x952db3d5 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x972c8953 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa4fb3816 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa96f6f04 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xad11295a iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb37dbcd5 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb830d743 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbf0b75ea iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbf424602 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd0d22fa3 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd1ba52d4 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd3b9cfae iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd6214e75 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd9f70cb5 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe3a4a620 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xea88bafb iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xec11b439 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xefb1c4e7 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf4636f2b iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x101531e3 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x2bff69c1 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x375da129 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x43339799 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4760f132 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x67b9c4b4 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x7c90da0c iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xaa74475a iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb61d5950 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb842c3fd iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xced8a242 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xda0cd395 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xda82fba2 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe2970e8d iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe52a8150 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xfd1c497e iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x070f579f sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0dd9929f sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x100dedd4 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x24bff193 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x51d7451c sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7a82dc2d sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x860eeef5 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x86e1c823 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8dc2859d sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xae6cbadf sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb9a8f5c0 sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbc64b107 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbf84bf7c sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc48c3a85 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc9edb0ae __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xca7d21ac sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xcba58315 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd8dd54be sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xdbce3615 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe68831cd sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf536bc18 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf78835d1 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf95c93eb sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x092a3a67 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x2f3e89a4 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x6f5172bd srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa492cc68 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xc4b8cfb9 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xd3447a39 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x33046a2b scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x585d76b1 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x616efa37 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x74c8c5f5 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9bb34968 scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb2c2d2de scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xe4d96e36 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xedf2d351 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xfa7e4c36 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x041e32ea iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x07bac401 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x116ae0fa iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x279dcb94 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x47bf9439 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4d19dfa7 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x579284ec iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5aa457ec iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6fece126 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x73631fe7 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8bc247fa iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x907aefe5 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9da30e1f iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9ed9592d iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa6bfac4d iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xad298dc0 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb01e7403 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb65c30bd iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc5885353 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcd012ee9 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd2d12e3c iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xda931913 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x0ddb1ab0 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2b3b0486 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x866039e7 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xc895eba8 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf7167c83 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x41bd03ce spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x7cd19ab2 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xaa84dae9 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xb467f6e9 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xd2fc1512 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xfc9e5388 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4740fc22 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x4e4b42d1 comedi_free_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x813c41b0 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xb5725623 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc57fdaf4 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xf5e55497 comedi_alloc_board_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xff70a9ee comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x86fcde20 das08_cs_boards +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xafd5d44c das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xe08b885e das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x3ddfb868 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xe9693292 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x0f90e79f ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x244c3c9e ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x49bf0b4e ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x6ca3b66d ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x7eb7a645 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x8b5f727a ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf43021b3 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf8e1849f ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x2107e67a ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x3ed7fe0b ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x49315cb5 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x7d37444e ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xa85decaa ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xfc54035c ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x0a1ee779 osd_WaitEventWait +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x4cc1b61c osd_WaitEventCreate +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x5432d87a osd_WaitEventSet +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x746d1786 osd_PageAlloc +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0x83911c38 osd_PageFree +EXPORT_SYMBOL_GPL drivers/staging/hv/hv_vmbus 0xa1b8d1ad osd_WaitEventWaitEx +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x06734ee6 sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x134a9534 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x15dd97ea usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x176f93f8 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x70b78a84 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7c5893fe usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7f900e05 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x8f7cec0a usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x939cf6b0 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x959ccdba usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x97f81f73 usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xbd168dac usbip_start_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xbd4818fb usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xc727604d usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd42d2205 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/uio/uio 0x06d53b3e uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x9e28a735 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0xc425b49d __uio_register_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x686cf7a4 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xba017dd4 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x0c9753d4 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4477d634 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x54e20c42 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x73af07a8 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x8b079030 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa82d55d0 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xae12ca04 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb3f35cf8 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xe008709f usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0af06082 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3646cc32 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4f80b7f5 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x556a726e usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5f5cb47d usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x67c5d93f usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6ae3483a usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x71a378d1 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x806ce322 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x8f86319f usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb0e98c41 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb1e613fa usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb6a2e1a0 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xcc023706 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf17db5b3 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x05b49fd3 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1f610470 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x23f37789 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2b0061f9 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x394ea124 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4cacb3a4 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x677995b8 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x6879bde2 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7619046e usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x782a0cda usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x83541183 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x889434e1 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x97a12536 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9fe1a8d1 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xace7f09b usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbdaa9b07 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbf096a65 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xcdfae12a usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe018980b usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xeab54992 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xef70607e usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xefe06d1c usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf4755b71 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x09f3c921 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x0f3d5640 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x18ad05aa rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x57ab1b34 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x71dd6aa3 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xbd11b696 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0049e591 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x04866379 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x1a847749 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x319e339e wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x5db85155 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x85226a65 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x90a4b6bd wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9bdcdeee wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xab6a5a0a wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xae08ae9f wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb5db1426 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb9e42bc1 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xba253246 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xbc4fac51 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc2cb5b2e wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdc580e49 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x04611d0b i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xac91732c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xb8f0517c i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x104b4091 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x13f1f822 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x29d17093 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x6b4ef671 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xbdcd1ad9 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xc5833fbb uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xc80b22a5 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xeeaf1da3 uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x086d6c26 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x73ba154a __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x83a8f17b umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x8ec174fe umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xab7e4712 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb607dc7a umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc7cc7443 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd9c8067e umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0e9c300c uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0fdae85c uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x119e3dca uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x15b21b9e uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1e457d85 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1fa6e437 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x27d324f2 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2fb38310 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x43ebe71f uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4898a9ab uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x519e6d7d uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58af0e20 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5cbb4758 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6057079a uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6759db8d uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6de3b541 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6ec81fbc uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x742b3b33 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7d0dbfe0 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8667eb45 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x86b6b014 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8f3b2feb uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x905e13d9 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x96429726 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98a99a68 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9f3e3f32 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa5eb7cfa uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa60b52b7 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa9a9be96 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb061f05b uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce3be8ad uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce84850e uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd77737f8 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdb5d8e10 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xea1f7ffb uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf784b2c1 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xffdd866c uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xaea7983d whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x01f8a3eb wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x0a032cca wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x19b5c285 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x21309fd2 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x24a4a772 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x316b4e80 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x348ad4b7 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x374979e5 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x397eaea3 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4d4f126f wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5aa52e90 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6329071a wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x683f998b wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6addff4a wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x70f887a4 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x770cb422 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x85f69d86 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x88bfc17c wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8c7f7931 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8d9f9fee wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa4eee0b0 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xacdb4945 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xace0aaa4 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbae67a12 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcb503466 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdec5ccb4 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe031f655 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe8c4e5be wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf070f014 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf8c7c616 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfbc7743f wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xff8058cb wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x269e2f03 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x2bbf3f26 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x5ad12aa9 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x7633a0b5 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x8e8f173d ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x96bceda8 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa885f9ee ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0x2cfbad4a fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x3d81c917 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x9534c57e fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x8113d8c6 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xf8daac98 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x12c45d11 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x3fb85651 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x8b44cb39 register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xcd9ea48e unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xcdac0c9a unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x47945bfc vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x7ec0e5d3 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xaf0060c7 vring_transport_features +EXPORT_SYMBOL_GPL drivers/w1/wire 0x29f97589 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x577e0726 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x98ccea54 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa7e840c2 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xdda4e3b1 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe31e0d41 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe67a8f40 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xee12e119 w1_reset_bus +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x6233c556 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xb8d6ec11 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xf04efe4b dlm_posix_get +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x6d1729f8 exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x813c543e exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x1295c1b7 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0x1875e5ba fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x18b74cd5 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0x225fffbc fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x2f2ffb9c fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x3bfe85ab fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x5432cc50 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x55464ea4 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x7255f94c fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0x882e8d40 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x8fafcd70 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x943a2b4a fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x98252b68 fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0xa52241da fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0xdc26a5b8 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xe1e41d2e fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xea832095 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xef794d02 fat_attach +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x53261ca1 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x9f1c827d nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xce9fe997 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xd72933e2 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xd9024007 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x58ec99cc nfsacl_encode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xebecc9c3 nfsacl_decode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x3c62f531 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x40b14908 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x6df575a6 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x8b57f954 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xb4f751f3 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbf39a7b1 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xcb3c7141 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x02224a85 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x504f3a11 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x6ef462c3 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xaeeb4c2b dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xb4aa5857 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xbf802bb0 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x58353820 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xcff0ad33 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdab1ec9b ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x07ad069a garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x31de39a9 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x33111bec garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x7db94723 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x85fb88e4 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0xa229755f garp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x1b835d58 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xf44eea39 stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0x6af816f5 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x687e1a71 bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x02719e71 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0447fa2b dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x08237261 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x12e88187 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x17687e2a inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1e2b4fe8 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2463f366 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2819d2b4 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3055b86a dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x33e08653 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x36e40c7d dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x37045ce9 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x38d702c5 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3c5050e8 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3e9e7a36 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x58b784a5 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5b65d424 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x60872060 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70b1d967 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x784843f0 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7f744e7c dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x801bcb9b dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x839edf8a dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x95ea6a2e dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9846372a dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xadab5381 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xae021559 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc92a02d5 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcb527495 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe0e2d187 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe16bcd33 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe85a65f6 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf302fb6c dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf990ac58 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x1e9fc681 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x1ec14421 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x2b62a716 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x706b9505 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xac9bae0b dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xbf267f82 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x89de3fde nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x00eb2ebd nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x0b9a16c1 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x7b2fe846 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x832bf3e3 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x893fa89b nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x9a90cbcb nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xef1de7cd nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x1614c8e9 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x32111ac9 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x5e0b1845 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x718b38ef tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xa667a34e tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x2fc24bbf ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xbce733b6 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x009baf77 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x041013fd nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0715c242 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0a2fbf04 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0c30f8fd nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x133a8af4 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1d95e706 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x21f742b6 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x29d1a348 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2a06a8f4 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2a4b1146 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x31344a54 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x34edee76 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x35acc5fe nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37a85383 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3920ff14 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3a64f671 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x400aa9c9 nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x43f4826d nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4491742e nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x46e89e56 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x47bce097 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4e64b70d nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5c3238f6 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5d8c5fad nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6218b4dc nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6459f6c4 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x64c2bc03 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6abcbdb8 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b6d2dea nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x706ad11c nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7084c16f nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x72ac08ed nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x758a8215 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x76a716ac nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x86103d82 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ecdbb04 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8f3bcae0 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x928e9ae3 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9520440c __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa0275dc0 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa4e4e526 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa94245e5 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb1048c5d __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb6a91497 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb8569161 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbba1012a nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc20dedfd nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc27ac1c8 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc40f4bcd seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc63c3a0c nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcc6bee48 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd48787f1 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd64fb99c nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd79f9493 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdeb27120 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe32f2747 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xec6b6bc3 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeda4c712 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xee700bdd __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef246130 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xbb7d0204 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x5c6aba9b nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x1488902b nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x14cb56c6 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x255d1254 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x26f9fe72 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x452545cc nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x81f17ee5 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x88470f67 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x99eb10b2 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xd18c86fe set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf24a6051 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xe0df4c08 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3b70d606 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x5b1bccab nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x9775bf31 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xbe6eb9c0 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x14982c0f nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x867c96c4 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x03e6249f ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x0482519b ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x06ba878e ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x0b8c6bbc nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1d54714c ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x551d23d9 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x90340dec nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xafe78d44 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xb0d81993 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xb7a88ad2 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xc69e4758 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdb5b585e nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x0ce2168d nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x012d403c nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x8f4f862b nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f50eae2 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x22e5ee11 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x4fb3d549 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x8ab17eaa nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xa44f2204 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0e749087 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0ea009fe xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x12695858 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1a582d63 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x2e7d18dc xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f432b51 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x93d54900 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x948eeafa xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xab887f38 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xcf99fc26 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xdaf9a185 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc2429b63 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xfc852663 xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x0550994d rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x0d0c2661 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x183c92e6 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x1c5b913f rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x1f7b1ccf rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x2629123a rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x33a3d763 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x3d2b4bf1 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x42d9ca79 rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x5c8920a5 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x5fc2183f rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x65d13f02 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x68536ba2 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x6fa0c860 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x7796b138 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x885b03db rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x94f61296 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x96fafe85 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x9bb82a7f rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0xbee3b64c rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xd93ebf02 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0xe79a2cef rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xebe8994f rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0xff699e35 rds_conn_drop +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x829e30c9 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xdad8ae9c rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x01031dd5 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x018e4d84 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x2468e3e2 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x264ba57d gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x4451093b gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x746d91c8 gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8a49dc1f gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x9fb3fb9b gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xaebc5642 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc21e2f90 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xdcf8b33f gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0187f895 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x01f93998 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x01fe32b6 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05f57c21 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x099c4a3a rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ded8723 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e0db2b2 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f9fd9c0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x109c58a9 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1153ab45 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11a4b86b rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14a7f008 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16f06cd7 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x176a4fa0 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x19f347a7 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1a005510 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b5f44c1 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b92b1b2 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1bfc6c0b svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1cdd08a3 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1ce4a679 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1d6935da put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1e1fb002 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x21392831 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x21c19f71 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x224b1d42 xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23c88182 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x292fd9af xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa9ec6a xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2d47f56d svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x323f2441 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x359135aa rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3696a363 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3771de42 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3860c141 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38fd3054 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x39e76145 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3b3e6df9 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3befd928 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c1b8a97 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3fa7157b svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x41a0518f xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x42548c2d xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x49202d45 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x49c2a931 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4a8a9726 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b728489 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4bf51f28 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5205eba5 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x54600221 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x550547a3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5581084d xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x55936a85 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5728ecab sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x57de07b2 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59f8d8e9 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b650a31 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x63632438 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x63bad4ac svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x64b99a26 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x64dc0ff2 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6546d091 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65a719c8 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x66b521a8 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67c95373 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d270c9b svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e819f82 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7298fe9a svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x730ea1a0 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73d111ac xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76d632ba rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7757f819 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7ab9fd78 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7c121d5c rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7c155874 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8344fe0f rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83e34e8b rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x84e5bb6a xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86a09ba5 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86ed282a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x89be78ae svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a0a67c6 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8f7c7b1b rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8fad1e9e svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x92e826be xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x94910658 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x960e13ca rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9cec2d8a xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9db1479f xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9e7b0dd7 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ef180bd svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9f1c3065 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9f7bd7e4 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa023d004 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa22c24e5 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa2387445 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa36c4f05 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa37f0c35 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa5f0fbff rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb058b00d xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb387b246 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb52e504f svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb6f4a518 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb81ad87e svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb81fec77 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbb672980 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbe152d21 rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc5d71a53 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc867da30 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc894522a auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc98aced7 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xca933683 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccc2372e rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcda2d646 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd4f37f4b xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82c728e rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd95a65d7 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcf0f132 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdda18455 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdde697bd svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf267ddc xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe02c79ac auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7596521 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7762dbe csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe89ff676 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe9397a7e sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe9de36a3 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xed41ebf5 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeda29b54 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd1ba52 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf0284e56 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf046c8ba svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf278db5d xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf38880f2 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf83acca7 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf90611e4 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf94f442a xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9c53adf rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfac1bfb1 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfc2d29cb svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfcd47f4d rpc_call_start +EXPORT_SYMBOL_GPL net/wimax/wimax 0x1ca9ed27 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2da5d033 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3223cef7 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x47516634 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x746abcf4 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0x748bb7f0 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7a07de97 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x8be25bfb wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x939a9e0a wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb7e2545d wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd13f3b57 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd72daa1b wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe1618113 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x03e69d46 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0621e6f4 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x076131de cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0c98af63 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1ef3a930 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x20308e61 cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2cb951cf cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2d0b8027 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2edcb855 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x38a5a715 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x42fff662 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x531fb70f cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5e55138f cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6417a4c9 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6f63bf96 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x77b1f052 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x83906013 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x83ea4adf cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x92ab9f31 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x98901e49 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x98dbf71d cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa279659b cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa71f61d6 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb4d5c483 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb9a0dff4 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbc54f6d8 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc0006a31 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc4f9afbf cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc9a756f5 cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcf0425d7 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe3225e8b cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe90008ef cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x1f17419e ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xcf6d2d22 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xf90d17dc ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xfa22b67c ipcomp_destroy +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0183f452 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x071103c5 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x08c7c5a6 snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x08d705af snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x10e6fc00 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x116850d4 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x11fe0345 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x12764f01 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1456ecb9 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x16166aa2 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1e1ceefb snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x29923e98 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b022dcc snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2c012a40 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2c63e456 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x31bab954 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a1369fb snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3ff98768 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x408ff200 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x40db0bad snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x46b0fca7 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4a87c9eb snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c83f281 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4ec907f5 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4fa956af snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x579b5ba1 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ad9ab3d snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6627217b snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x664d3d58 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x68674fc6 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6aa84ca9 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ab560c6 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6c312c6e snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x70df4868 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x744bba33 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7c63c41a snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x81497bab snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8a5e2986 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8dfe9b53 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x93ea8fb1 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x971bc17f snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x98644c16 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9ba343c1 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9c48ade8 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9ea4c72c snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa30b4a43 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa52c0c5d snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa7dd8ee0 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab2e6e1e snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad2af7b2 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaefb8c60 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbd17d554 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc0f7e51c snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb4b4da1 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcdb2eec6 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcf438a52 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd027a523 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd3025e4f snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd40cd018 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd456c2f9 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd5ca96d5 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd878d16c snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd89499f3 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdab6397e snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdeeb7a0b snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1a89da0 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe60162bf snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe700fd9c snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xea3e4d8f snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xee8448e2 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf1d87460 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3506b0e snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf40b9767 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf7af11b8 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfd9450ea snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x0aec3a29 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x2bb95dec soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x0d861707 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0xfc4c5bc7 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x1d41d97c ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xb7e43fd2 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0x94fb5caf soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xace14394 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xcb48eb57 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x93f3c4fb soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xfacc4a41 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x6eb387f0 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x9f77b11f soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0xf71933b5 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x02062672 pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xadf265e8 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xcefbcca0 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xa6476023 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xabe10eeb ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x40f01e5d soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x85abdef4 tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x831578d2 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xac4e5160 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x1030187a aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x317a440f aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x50a43221 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x70f5c15a soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x75bab6af aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xe9acba69 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xf6bcfdaa aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x09cae82b soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x8f84135b twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0xc8728e2e soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x3dc4668c uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xf9c8b247 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x5f3caefe wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xbaaffcc6 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x4166d221 soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x875c19b4 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xfa1f95e2 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xda7a2873 soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xdfa13f0a wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xa21c6c94 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xc6da4ed5 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x71a626e6 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x8b77810e soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x286d8f7a wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xadcd571b soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x5944d158 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xc28a904e soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x128a4130 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xd83c8b24 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x0f1c0cc3 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x70b06dbb wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x24315f00 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x6feca7f8 wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x5ab09564 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x5ac27f2b soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x3702502e wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xe908b91b soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xb1962280 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xc225ead8 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xc34d743d wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xee0111c7 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x54d26514 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xed85c5a9 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x9f8eb6b1 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xf49ef4e8 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x39f9bd05 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xf55c9edf soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x69342cb6 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x882b6a9a soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x2fc262ab soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xe8be9c24 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xa29a15fd wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xe6d98294 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x240e6753 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xcdf4d157 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xbe68bfd8 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xc785c284 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x022c24f0 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x04363bb9 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0651b1a9 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x09ccc7eb snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0b6f5954 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0fa9e83b snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1567e08c snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x18d4720e snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fad5989 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fc6143c snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x30175565 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x32e3c1d3 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3778811e snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x388a6385 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3a885cf3 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x407a3c84 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4350f966 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x475c802d snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x47cec414 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5b7b1fe2 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x62ae1922 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x65b8c684 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6b0f5c79 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c4884a4 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x741c1443 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7c106c33 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87068999 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87f40e87 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x89cc6118 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x93afc4f1 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x98302b47 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c7120b2 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9eb824c5 snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9eed45ae snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa01a5221 snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa1c5e246 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa36fe7ae snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa37c6fc8 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa64f002f snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa9540a4d snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa2a416b snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb122645d snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb408cdc6 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb42410a9 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb6e01ff8 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb731aad3 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc10979ea snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc4abd904 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8a290c2 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc9a233ea snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc9e09e80 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcbd2c743 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd0bdeb89 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd224d88c snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xda1f78a5 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdaca7420 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdc9cd24a snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdd2998c2 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xde8051d5 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe46b2f32 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe9750406 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeea558b7 snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeee4e728 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf25040bb snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf3c9ca5d dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf43bc805 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf4a98c3c snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf4cf6ff9 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf7653a64 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf9750e5e snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfd04158c snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x2e0a0be5 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x51958fac xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x7e80b9f6 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x9a79aa81 xv_free +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xc1f55d16 xv_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x001fffed inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x002ff5a3 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x003ed6a6 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x004dbc45 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00db3c0e ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00eb041a ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x010b3618 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x013c4c53 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x0181c318 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01cb4883 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x01d9cc74 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x02594fb1 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x027952ac sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x0297d086 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x02a2c256 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x02d6f3a2 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x0315ac65 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x032a90da clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x037b9537 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x03b93f5d sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x03e1f653 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0414119b usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x043d2819 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04aab2fc generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x04b4a333 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x04ea2d6d debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054158fe bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05547ec2 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x0559a039 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x0567d67e hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x05999552 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0x05d81a4f led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0602c5f8 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x06734576 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x067edaa3 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x068bd593 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x06a17154 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x0765a5e4 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x078c4300 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x07a06be6 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07c15547 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x08359646 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x0835b645 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x084f69fd inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x088eaa54 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x089df653 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x08c9c457 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x08cd6a79 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x08d98bd3 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09388881 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL vmlinux 0x09d60450 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x0a6cb76f cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x0a7b6d03 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x0a8bccbb fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x0af02dad ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x0b03dadc blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b09ef3c ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x0b31a0f8 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x0c0d9b50 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c3864bc ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x0c720bf2 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0c8069fb fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0ce0012d scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x0d186d6b hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0d29f15a ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x0d324c85 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x0d70603e usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x0d8f5ee5 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x0d97294e ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x0db2dd24 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0deb0ade register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x0e109316 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x0e63e503 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x0ea0c073 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x0ebfd224 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x0ec0ca5f debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x0ecb42b8 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x0eefcc63 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x0ef06ebc ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x0ef62a28 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x0f73520f klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x0f824a3b platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x0faf3343 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x0fc6ad99 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x0fe4ff83 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x100c13c6 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x104d82d7 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x10621889 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x10c5f808 get_driver +EXPORT_SYMBOL_GPL vmlinux 0x10da02cd sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x10e45cbc da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x11689097 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x1183e978 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x11b7d443 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x11d87d8e sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x1235c638 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x12e14799 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x130448f2 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x13354608 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x13967c23 mce_chrdev_ops +EXPORT_SYMBOL_GPL vmlinux 0x13a018c8 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x141d7b8f ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x142f2598 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x14350393 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x14881de1 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14fcb187 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x151c472a kick_process +EXPORT_SYMBOL_GPL vmlinux 0x156257e3 apic +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x158bd77a ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x159048af eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x1596876d inotify_init +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x15c90344 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x15d1c3e3 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x162c61db simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x16836e04 speedstep_detect_processor +EXPORT_SYMBOL_GPL vmlinux 0x1697136d hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x16c508be platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x16c57b0c unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x16f76869 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x171b577b unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x172d4e93 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x172e72d4 vdso_enabled +EXPORT_SYMBOL_GPL vmlinux 0x1757926e dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x17c40f76 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x181e0d03 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x1824460b scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x182b4539 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x1893277c usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x19077834 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x193ceee5 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x19467af7 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x196c3722 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x197dbe54 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x19a0fbe1 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x1a2b4249 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a938737 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x1a9b538e ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x1ab60999 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x1acda5b2 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bafe6b6 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x1bb70eef crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x1bc050e6 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x1be65e13 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x1c2b3a48 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x1c737ac1 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x1c7b6c2a eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cb9dcef ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x1ce9294a sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x1cf16123 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x1d256cf3 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x1d67ee49 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e6fdfbe register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb8e160 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1edd9338 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x1eebc44b blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x1f3d1b77 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x1f8b0bdd relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x1f8e1e1a dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fa2f0c2 sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x1fc19739 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fe281bb pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x2010d23f ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x203ba446 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x205dcd7a klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x207470b6 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20e01bc9 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x21100415 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x2142497b usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x21563a2c shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x2171a798 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x21bf6726 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x21e9701d rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22a8086d pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x22b4ffc1 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x22f62f9b uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x22fb9d32 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x2309e6de ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x231a454d regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x23253735 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2326a427 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x23473edf scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x235f4402 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x2380d223 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23869dc7 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x23e712df pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x23e889d8 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x23e945c6 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x2405ef3f spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x240b739a iomap_create_wc +EXPORT_SYMBOL_GPL vmlinux 0x241720cd zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x245bea88 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x2465c8a0 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x246f4153 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x24ab6e71 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2586359a usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x25d0bf60 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x267cd1c0 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x26b817d1 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26e46d34 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x26fc9b65 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x2714a01f device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x2771fc1b scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0x27771fdc seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x279aae2a dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27c1c32e rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x27f0a93c ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x28cd0949 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28f16175 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x294d0d3b inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x29501527 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x2980c410 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2999c7e2 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x29c3cbf8 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x2a4e1dd1 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a7f0435 user_read +EXPORT_SYMBOL_GPL vmlinux 0x2af90271 speedstep_get_frequency +EXPORT_SYMBOL_GPL vmlinux 0x2afadbfd seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x2b019fd2 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0x2b55e36b sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x2b952cba rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x2b9b8d08 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2baa8d2d da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x2be7fb8e disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2bfde7c8 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c46ca68 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x2c9af6c6 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2cf18edb debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x2d0b328b __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x2d1382fa rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x2d45b776 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x2d53afee anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x2d57c114 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dd11777 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2df27df3 crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x2e288ba1 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e4e03c5 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x2e81a831 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x2eb91dfe scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0x2ed1cec5 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2fc66f61 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x2fc97cab __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2fd817f9 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x2fece3a9 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x2ff55a6e usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x3032b4cf platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x3042af25 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30bb05a4 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x30cfc378 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0x31299b49 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x313c2768 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x3157e987 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3189d4df driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3189f120 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x31c54454 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x31fc1b74 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32dd717c debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x331454c2 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x331502a2 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x332dbbb7 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x3334d941 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x33607d36 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x3373d5eb ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x340aaa88 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x34d12754 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x34ede93b k_handler +EXPORT_SYMBOL_GPL vmlinux 0x35207904 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x35b41b69 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x35be5708 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35fd0312 per_cpu__injectm +EXPORT_SYMBOL_GPL vmlinux 0x361b8930 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x361cf3e3 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x36ab5b23 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x37050571 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x3714af78 put_device +EXPORT_SYMBOL_GPL vmlinux 0x372c9ba3 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x3742ea98 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x374a690c device_create +EXPORT_SYMBOL_GPL vmlinux 0x375ea13d pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37b3a0af cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x37c2dc60 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x37dc0546 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x380087e3 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x3841ab01 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x3849dedf ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x38840b4e __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x388f0a29 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x38a5948f ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38b64134 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x38ea936e __memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x3916c5ae tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x39287f45 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x3961233f sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3968d9f0 device_del +EXPORT_SYMBOL_GPL vmlinux 0x397c90fc tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x399b91bd task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x39d707d0 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x39f26b82 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x3ac2ef70 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3bd04670 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c012432 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x3c2044f6 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3c45b78d ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x3c6ac9e0 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c7b4347 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cd111b6 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x3ced69d1 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d2cdbc3 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d397d30 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x3d3b191b ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3dd5d829 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3e1d37eb ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x3e2004e9 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x3e2b03e1 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x3e46d1f0 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x3e757637 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x3e94e101 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0x3ed1b1f0 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f01570a probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x3f0e7a1c crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x3f1b685a __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f5a1050 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3f9cd361 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x3fa0743c xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x3fc88903 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x4003da7f ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40be2c41 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x413c9b2a spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x41a087d3 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x420583e0 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x42266e10 ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x426f13b9 e820_all_mapped +EXPORT_SYMBOL_GPL vmlinux 0x427c9ad3 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x42a41443 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x42b364ef scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x42b6fab6 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x430e73ac input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x4350e972 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x435c24a4 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x436d6f9c blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x4382d026 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x439cee41 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x43b915ae ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x43ef90cf unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x43f95e06 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x443067ae xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x44511050 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x447b2c51 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44d9e12e ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x44eddd26 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x4509c1b2 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454d5c01 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x4592f86a br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d95a9f fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x4620b6af kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x463703d1 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x4648a74f driver_find +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x467470b6 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x467f24f6 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x4683bbf2 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x4694bde8 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x46d3aa28 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x47283103 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0x473a8c8a dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x47838ff2 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x4829f3e9 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x48efdee2 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x49704c38 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49ad36e3 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x49b04f54 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x49db8db4 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x4a297a4e ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x4a53cbef hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x4a6a2490 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x4a8254bc inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x4abb7c95 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x4acb80e1 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x4b9b698f srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x4bd4f7e7 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x4bdc92ba shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x4be1fcbd find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x4c040401 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x4c2f30d4 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x4c5e29cf scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x4c6a1189 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c9b1f72 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x4cbadbad ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x4ce77d75 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x4cec82ee crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4d3b7584 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d867a09 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4da310fc fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x4db234e5 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x4dcc2f3c blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x4e0a89c5 dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0x4e107652 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x4e2d3124 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x4e5b7c99 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x4e637c63 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x4eb126d4 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x4ede46d0 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x4f0bce29 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x4f67a3ff security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x4f95f211 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x4f98b949 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x4fbf1a2b blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x50063790 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x5066ce1a ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x50a01ddc fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x50c89f23 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x50d1f870 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x50d583cd synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50ed3684 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x50f09abe sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x5108b3fc acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x515ba6ca i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x5185b62e debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51dfb205 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x52496c50 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x526648a2 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x52719ab5 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x52aa3ea2 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x52ae4f03 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52fee5b0 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x5301967b module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x5370f0c7 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x5372b636 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53897863 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53ec93a4 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x53f1662f input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x54041ccb pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x5407ed01 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x540bce4b ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x545ac9a6 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x545d0530 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x54681180 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x5492ef1b kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x5496624c pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x54cfe1c7 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x54dde7a9 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x54ed2804 input_class +EXPORT_SYMBOL_GPL vmlinux 0x55192316 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x556725c6 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x558cff3a crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x559faa1b register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x55a98306 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x56095e96 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x56152dfb __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x566faa14 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x570d570b fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x5792c35a sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x5816bf5a ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x5821c4a8 ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x582249f5 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x58239779 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x58286771 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x5867eb23 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x5876402e register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x588aa8db ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x58e7202d regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x5916acb3 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x59ca3224 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x59d26f28 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5a6ec452 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5aa1b943 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x5aa43f2e ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x5aa78a36 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x5b30ba7a pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x5b40333a tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x5b42c496 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x5b6f8f80 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x5b752d12 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x5bb00ace __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x5bb4c306 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c11b85d spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x5c1c174b fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x5c3e7099 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5c63a653 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x5c981635 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5c9b768d attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x5ca3ede6 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x5cbf6db1 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x5ccef375 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d51bcf7 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x5d723f6d ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d7a5040 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5db16116 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x5dc78542 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e51671d platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5e5990ab tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x5e9cd9ad sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x5ec589b7 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5f85a9f8 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x5fa54571 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x5fcee70e crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x5fe17588 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x5fe7c77c usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60c70eda ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60e2f4aa usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x60e5f765 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x610d84a0 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6116102d dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x613a0c58 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x615f36cb dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x61747e09 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x618d0fce eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x61b41ea2 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x61c9314a fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x62200261 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x6248e402 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x62543c0f alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x62838f4b sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x6292da79 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62acf896 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x63498a0f xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x63583f91 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x63700111 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x63ca107e trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x63d8d836 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x6422f382 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x6437bc8c pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0x6458d15a netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x6463a5c9 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x64a30f93 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x64ebe677 wmi_query_block +EXPORT_SYMBOL_GPL vmlinux 0x65333df2 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x65a66af3 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65ed9c30 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x664edaf6 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x664eec64 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66aaedde __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66c7a232 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66fab731 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x66fc6128 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67a19f01 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x67e032ac power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x68551d94 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x688fa032 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a668cb hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x68ad66f8 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x68b2e91b inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x68f70a11 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x69371c4d platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x69625722 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x699350d8 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x69aa1006 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x69ae6f56 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x69e9b9e5 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x6a45feae vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6ab92f9e tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x6ad2337e devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x6b258321 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6b679340 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x6b94c408 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x6b9ec1f6 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x6bb5d2a8 acpi_smbus_read +EXPORT_SYMBOL_GPL vmlinux 0x6bde4b3c rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x6c19e73b led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c621971 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6cdfad69 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x6ce06dc4 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x6ce306fa elv_register +EXPORT_SYMBOL_GPL vmlinux 0x6ce3d2d2 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d67c4c2 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x6d8edd6a each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x6de8e746 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x6e047a32 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6eb787ee klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6ed66a1e dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0x6f34abf3 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6f590bce __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x6f7ab72e dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x6fe3c931 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7010fc4c __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x7015b73c transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x702ab6dc ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x7037d79d k8_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x708957da dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x70c08045 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0x70ee609d pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x7116ab00 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x71256d51 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x714cf91e pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x718d81be __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x71ad4b01 dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x72125e76 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x7217704f tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x721a2d95 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x722c4f65 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x72427d38 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x724603c7 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x725867c6 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x726387ba ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x72782497 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72811072 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x7285f84f unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x729127d5 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x72a868af fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x73014a72 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x73140781 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x73235aa8 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x734730de ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x73712069 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x739adef0 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73b0fbb6 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x73ce56d2 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x73ff4175 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x7409cc33 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x742a2f69 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x74736393 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x748b69c8 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x7578ff8e udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7599f93c cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x75bd8f49 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x75c5cca6 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x760afe50 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x7642ed8f ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x76ad995c device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x76aebbe3 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x7729b1d1 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x77490bcf usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x7786bc20 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x782e4886 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x78762802 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x7886fa6c ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x7910973b crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x7940f2e1 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x799f3f03 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x79a84312 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x79d54519 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x79e8eaef ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x7a2892d2 iomap_atomic_prot_pfn +EXPORT_SYMBOL_GPL vmlinux 0x7a3c417a crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7aa0c477 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b4a772f usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x7b78e4c3 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x7bb0b4fa ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x7bb39690 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x7bbdb763 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x7bc823ee xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x7bcd2ded klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x7bfbbfb0 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x7c42e2bb debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x7c79ecd5 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x7caf81b6 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x7d233fe0 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x7da985f7 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dfe3c9c ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e6ac311 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x7e7a3398 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x7ee35b05 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x7efc54e7 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x7f032bfe shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f220180 gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0x7f315c03 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x7f74c7e4 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x7f77f8f2 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x7fbb1664 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x7fc3cf82 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x7fd15aa1 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x7fd6e315 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x7ff0dffa spi_async +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x80029294 dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0x800e5dce inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x800f8b57 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x80134424 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80978190 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x80e10c6c ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x80fe1b73 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x80ff4703 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x810f6255 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x81201a94 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x814a6be9 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x81f6cff1 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x821e3ea4 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x8224ebf4 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x8271e59c platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x82722cd0 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x829275ab add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82b3fda4 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x834d8eee attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x83884ed4 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x83b9a401 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x83cc7d73 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x8442a557 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x8463aec2 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x84a4752d user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x84b4b3e3 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x84b83d3c pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x850c7d69 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x85a8d3e9 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x85b20204 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x85dc59aa ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x864d9edf ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x8663525b ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x867b0080 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x867c684a setup_APIC_eilvt_ibs +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86a4a358 rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86ba6134 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x8726ce5f sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87550f72 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x875e4bdf __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x876ba565 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87aa8ddc regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x880b189a __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x886736fc olpc_platform_info +EXPORT_SYMBOL_GPL vmlinux 0x888732c2 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x888ee978 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x88a45d2d ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x88af077b set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x88b1d543 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x88d8b94f fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x88fe26d9 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x89138396 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x893ab2e5 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x897fd962 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x89c43a81 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x89c45caa crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x89c7a32a anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x89cc1b9f crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x8a2cb5a6 queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x8aada38a acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL vmlinux 0x8ab59497 dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0x8ae8f1f9 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8af11ec0 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x8b25ba68 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x8b3e584a debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x8b55b993 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b7db255 device_register +EXPORT_SYMBOL_GPL vmlinux 0x8bc04147 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x8bc6a457 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x8c1d7ebc debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x8c204837 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x8c85ad4d regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x8c9d686d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x8cb437e5 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8cd7a730 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d1e9659 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x8d7f40a7 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x8da17b42 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x8ddba475 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x8e251a11 lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x8e2e50ae __class_register +EXPORT_SYMBOL_GPL vmlinux 0x8e466b20 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x8e59117d regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x8e70a28a device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x8e9488b4 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0x8ea46474 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x8eae69ba kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x8eb58c6e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x8f41baf2 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x8f48bd09 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x8f4a3229 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fef8733 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x904be910 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90e6a215 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x91102f82 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x91482eef usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x915eddd3 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x9177f9ba crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9183418d ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x91dacaa2 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x91fea345 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x92732398 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x92784bfb ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92d74e64 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x93474bf2 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x937c6f7e ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x938406e6 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x93bf114b cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x93efb50e disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x9406d819 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x9490fa15 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x9492e147 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9495292e ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x94985d45 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94aa8400 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x94de3391 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x9543bc5d device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x955657eb usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95758050 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x969195e5 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x96ba9f3b blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96f5d2a1 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x97192582 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x973cbc9e rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x975c56a3 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x978879f8 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x97982542 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x97c68536 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x9809aab0 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x983aac34 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x987a86fd md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x987e6de5 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x98b3e260 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x9940d72e sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99746974 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x9984c858 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x99893f6f relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x9996a445 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x99989f32 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x99c3775c kmap_atomic_pfn +EXPORT_SYMBOL_GPL vmlinux 0x9a072731 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a1444dc transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x9a95d243 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x9b13a014 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x9b2d12da root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9b31d285 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x9b360361 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x9b57ef4b user_match +EXPORT_SYMBOL_GPL vmlinux 0x9b90403b kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bab1cf0 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x9bc8c8a7 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x9be1c80e ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x9bee8e02 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x9c32716c bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9d030b99 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x9d2b6a58 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x9d308c4d hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9d318f52 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x9d51944a tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x9dd087da ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x9df34ee5 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x9e01f6d4 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x9e2bb0b4 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e754831 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x9e7fb465 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x9e9cabd3 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x9ea80490 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x9ebe9ae7 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x9ebff902 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x9edf10f8 get_device +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f5e6475 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x9f7192a2 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9f851082 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f88df41 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x9fac3356 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fea3921 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x9ffead89 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa03c1d62 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xa070368c inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xa0a580f4 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xa1596d98 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa16c9c56 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xa18f3d5c iounmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xa1c4850a crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xa28d8527 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa2e7c18a add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0xa2f71244 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa3137320 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0xa3161475 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0xa32fd032 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xa3300fe2 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0xa36876a7 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0xa38f0519 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0xa3cf4615 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xa3d9e56f tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa46f0576 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa470150b ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0xa4a61b5a i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xa4c99fc6 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xa5340acd fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xa5ab7119 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xa5bd3f17 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa649959e platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0xa65abf1e inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0xa66ca854 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xa66e920e skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0xa68381e6 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa689c92c usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xa6b1974c scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xa6cf5ec8 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xa71753cd pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xa717f566 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0xa72a4cb3 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0xa79383e0 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0xa7e1e2a1 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0xa8028173 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xa81bb815 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xa860dcbb unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xa8c33d95 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa928e319 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xa935e638 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xa9891b69 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0xa9b7afd8 wmi_set_block +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9fe69c9 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xaa27b6d0 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa3771b6 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xaa39be21 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0xaa3e3aea __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa71bf99 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaa6a5b4 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xaabf83c4 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0xaac9c106 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0xaaddf6ca blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xab410444 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xab41bd91 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab990955 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xabb03483 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xac18f154 device_attach +EXPORT_SYMBOL_GPL vmlinux 0xac1f7101 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xac290bd8 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xac4a4943 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xac764249 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xac92129e inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0xacad5658 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc19485 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xacc8b52e driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xace813db user_update +EXPORT_SYMBOL_GPL vmlinux 0xad2fe019 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0xad3ba9f0 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xad9af700 drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0xadbbbfbf register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xadbc3638 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae3a1607 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0xae539b8b vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xae86c5be usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0xaf088426 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0xaf10a1a1 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf9e0d99 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0xafc7c996 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xafe6a818 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xafea87d1 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xb00872c8 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0xb0223109 klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb02503ef debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xb030d8c8 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xb051da6f inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xb068daf6 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0ca1c81 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0xb0cfbc4f crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0xb0ebe57b tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0xb0eedea9 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb13d8505 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0xb148f28d use_module +EXPORT_SYMBOL_GPL vmlinux 0xb1720a47 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1a1924e usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb20cd25c pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xb22d1409 scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0xb22e0443 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xb24f7c7b regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xb2fc6817 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0xb30d511a cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb365a9ab usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xb3ae8971 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0xb3e629d1 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0xb466585b crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb4ef0d32 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb524007a da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb54f9fbd driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL vmlinux 0xb5aba85c sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0xb5b4b34f debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0xb5b714ee ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0xb5bd7f54 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xb5c46bab rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xb5cb2e57 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xb5d8913d register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb5f571c3 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xb63eca2f inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb67f3673 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xb6976667 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6b37798 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xb6be8284 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0xb70aedf8 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb78487a0 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2eb91 mce_cpu_specific_poll +EXPORT_SYMBOL_GPL vmlinux 0xb7fdd0df eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xb84e4c47 iomap_free +EXPORT_SYMBOL_GPL vmlinux 0xb8857caf class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xb88be561 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xb8b87ab1 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xb8c19f4e ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0xb8de734f mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb8e3affe rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0xb90045b4 device_add +EXPORT_SYMBOL_GPL vmlinux 0xb91d6b76 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xb93646fa pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0xb956f9f3 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb9c6739a skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba5d6820 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0xba690e41 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xba8076f9 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0xba9a078f dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0xbaa52d5d led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xbade2569 scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbb13757d md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0xbb1e85ea bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbb4a1408 klist_init +EXPORT_SYMBOL_GPL vmlinux 0xbb7f56bb preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbe2a6c8 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xbbeea350 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0xbbf985b7 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xbc1152b6 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0xbc31bcc7 dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xbc59d03c ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0xbcb7c376 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0xbcee9ee3 register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xbcfdcf35 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xbd2d9f5b rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xbd4c8357 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbda2d175 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xbdacd6a8 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xbdb6af93 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe4b4616 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xbe584033 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0xbf3599a2 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xbf3826c6 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0xbf51c351 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xbf991722 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbf9d0cfc sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0xbff5ff55 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xc1126f2b regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xc1139676 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc13161fd ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xc13689e0 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc2321194 ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0xc23a64c5 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0xc24403bd sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xc2e02fb4 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xc2e03903 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc2e14fa6 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0xc2e9c4ba inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc335cbe7 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc39a706d __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xc3a341b4 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xc3a596b9 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc447014d fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0xc4490f26 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xc47b2fe6 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4dc5237 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0xc4f79bef user_describe +EXPORT_SYMBOL_GPL vmlinux 0xc4fef6e1 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xc512626a __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xc51b5f4d transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xc52f1e18 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xc53c6700 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xc58a8b78 __module_address +EXPORT_SYMBOL_GPL vmlinux 0xc58cdb60 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0xc59522ee skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xc5a5c291 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0xc5e2e9fd dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xc5e3dddf wmi_get_event_data +EXPORT_SYMBOL_GPL vmlinux 0xc5ef639c usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0xc600fa5f __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc680b1a6 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xc6823593 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0xc6948757 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0xc6d3f246 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0xc6ffa8bc platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xc7830079 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0xc7936cd2 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xc7e31a17 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xc7ec11f6 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc84b36b6 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xc85ca3e8 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc898f29f usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xc8d765e9 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc97ceac5 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0xc97f5d83 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL vmlinux 0xc9e6ccdf cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca01f51c tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0xca79eab4 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca8eb935 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcb02579e devres_find +EXPORT_SYMBOL_GPL vmlinux 0xcb9e7828 dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0xcba265a6 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xcbd17ebf usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0xcc0c808b pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0xcc176c58 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc7002e5 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xccd35765 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0xcd0f21ea debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xcd21a43e crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xcd2f83d3 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0xcd7715ee proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdf518bb dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0xcdfec9a0 queue_work +EXPORT_SYMBOL_GPL vmlinux 0xce0ee1b7 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xce3227c9 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0xce33b02c bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xce514ea3 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xce55d8a7 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xcec4d1ca __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0xcee7b32b rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcfa62523 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0xcfa90997 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd0059af9 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0xd0280287 inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03fdcc0 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd09b89c5 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0d95185 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xd12ac59b olpc_ec_cmd +EXPORT_SYMBOL_GPL vmlinux 0xd137168a driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd1568727 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd187e253 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xd19bbcea devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd1c7cc31 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xd2047941 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0xd268c8f6 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2d652c8 dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0xd2dd8bdc acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0xd30d978a ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0xd3a08a57 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0xd3ba0a61 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xd3c230b4 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xd3c5a8d3 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xd40ddefe inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xd4709098 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0xd470d1c6 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0xd494ee54 speedstep_get_freqs +EXPORT_SYMBOL_GPL vmlinux 0xd49f211c device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd4a231e2 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xd5051eb7 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd5249cf4 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0xd53bfa8d register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xd57d9c57 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xd5b89c2b class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd5d44604 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xd5d716be sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xd636ba3c usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0xd672df88 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd6d80adb pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd757577f sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd771d7e6 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0xd775682a ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0xd79ad52e ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0xd7a3a29e register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xd7bb29a5 usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd8087947 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xd80d3a98 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xd82c07ca __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xd883e557 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xd8cd9059 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xd8e69ab9 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xd8e994c6 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xd903e4e7 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd9b037de handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda53dd14 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0xda5ba3d2 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xdaef1efc usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdafa0010 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb602999 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0xdb75e2d1 ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0xdb9a8a81 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xdba64f1c eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xdc15007d class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xdc235c6f tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xdc273c66 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xdc3bc370 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0xdc714560 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xdc7c5ef7 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xdcec49bd tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xdcef80d8 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0xddaa4833 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0xddc7baa0 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0xde2625a5 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde48df18 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xde702b2b skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0xde7bc20b security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xdec589d4 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xdf0f0666 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0xdf4b52ad uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xdf800229 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xdf869abf usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xdfa13ef4 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0xdfafb983 per_cpu__gdt_page +EXPORT_SYMBOL_GPL vmlinux 0xdfe771e3 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0xdff12c7f ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0xdfff48e1 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0xe008b79f shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0f36f81 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xe1015b39 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0xe118f713 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xe12313b2 dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0xe187c785 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xe1b795b2 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0xe1b84692 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xe22e8b31 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xe2426710 wmi_evaluate_method +EXPORT_SYMBOL_GPL vmlinux 0xe247343b hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe249ded3 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xe27551b7 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xe27e4b8c page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe30f6f70 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xe3343f54 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0xe34c44ae class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xe38d1087 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xe39977cd inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xe3b4586e sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe3ddf913 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0xe413a59d nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xe4298080 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xe431282e fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4a1b66b platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0xe4b32aa1 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xe4c331b6 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0xe513afc0 cache_k8_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xe51be338 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe560c9da dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0xe562bc72 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0xe56408ad invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xe566144c cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0xe5686197 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xe5984c57 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0xe5d1deaa dm_put +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6698bfb mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xe6c0b9d2 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xe6fa6caa ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0xe7059a34 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0xe776f247 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xe7830623 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe8fcc4df __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe9033cbc fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xe90af3e8 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe94880fb dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9ac46ae ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0xe9bacb8c sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea8bad80 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0xeaa2d895 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb3bce95 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0xeb3d4dfe acpi_smbus_write +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb58fab0 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0xeb6ebbad usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xebcf95ef led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec1e19a7 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0xec30df89 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xec9860de inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xec988211 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0xecac3c30 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0xecc41aab ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xed22ea5d usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0xed9dbe80 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xedb65aad tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xedf3f1f1 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0xedfe6d34 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xeed4533d tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0xef011d34 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xef1ed37d posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef8bf9d9 inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xef9ac5ee unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xefcef2e1 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xefdcd6de mmput +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe21106 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xefef0909 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xf066fa4f ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf06c1cc7 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xf078347e crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0xf0818a3f srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf0ca7efe crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xf0dd19dc fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0xf1463412 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf14d63d6 dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1a14e90 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf1a9051e usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0xf1eddc50 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0xf1faf64e unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xf2910c52 device_move +EXPORT_SYMBOL_GPL vmlinux 0xf2989d89 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf30ce412 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf3c1c0a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xf3c8b15b ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf3f0db4d ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0xf420a2b1 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xf44617f1 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0xf450ebf6 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4a2e010 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xf4c9a430 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xf4d64ca0 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xf533c4de cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf5388bd9 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xf53ed33d device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf54d8ec5 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf56fbda0 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0xf5702f16 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf585e6de shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5c71960 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xf60ab7be scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0xf65a9790 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xf667bdd5 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf6fa55f4 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xf6ffb946 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0xf735e646 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0xf741dd81 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf74ee7c6 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0xf793c225 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0xf805f89e ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xf82c7fc3 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0xf863e82a flush_work +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf88cee85 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xf8e388bc usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9913101 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xf9945569 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9a878ab scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9cc0911 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xf9e11666 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0xf9f21a15 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xfaecbd78 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0xfb072362 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xfb214fc5 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xfb2a3293 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xfb2b2088 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0xfb3b839d pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0xfb5d2b97 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0xfb5e19af scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0xfb69281a kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xfb8c0bd1 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0xfb8c9507 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xfb8eab65 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfbd22422 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0xfbd4fc38 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc6b938e dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0xfcce8a14 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xfce8f444 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xfd02e89a spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0xfd1e0ab2 pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0xfd67ce47 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xfd6f1055 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0xfd87643c usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0xfd88f7ec blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe1b15d6 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xfe60d4e6 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xfe7ce19f skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfeb6eca0 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xff536009 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff8647da find_module +EXPORT_SYMBOL_GPL vmlinux 0xff8a4c90 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xffc503d2 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xffd503ba device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xfff8e7b3 srcu_batches_completed +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/i386/386.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/i386/386.modules @@ -0,0 +1,2796 @@ +3c359 +3c501 +3c503 +3c505 +3c507 +3c509 +3c515 +3c523 +3c527 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +53c700 +6pack +8021q +8139cp +8139too +8250_accent +8250_boca +8250_exar_st16c554 +8250_fourport +8250_hub6 +8250_mca +8255 +82596 +8390 +8390p +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abituguru +abituguru3 +abyss +ac3200 +ac97_bus +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_pad +acpiphp +acpiphp_ibm +acquirewdt +act2000 +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +addi_apci_035 +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2016 +addi_apci_2032 +addi_apci_2200 +addi_apci_3001 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +adfs +adi +adl_pci6208 +adl_pci7296 +adl_pci7432 +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +adq12b +ads7828 +ads7846 +adt7462 +adt7470 +adt7473 +adt7475 +adutux +adv7170 +adv7175 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +aedsp16 +aes_generic +aes-i586 +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ah6 +aha152x +aha152x_cs +aha1542 +aha1740 +ahci +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +alauda +ali-agp +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altpciechdma +ambassador +amd64-agp +amd76x_edac +amd76xrom +amd8111e +amd-k7-agp +amd-rng +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +analog +ansi_cprng +anubis +aoe +apm +appledisplay +applesmc +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcfb +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arlan +arptable_filter +arp_tables +arpt_mangle +asb100 +asix +asus_atk0110 +asus-laptop +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at1700 +at24 +at25 +at76c50x-usb +aten +ath +ath5k +ath9k +ati-agp +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +av5100 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1isa +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +b43 +b43legacy +b44 +bas_gigaset +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_aout +binfmt_misc +bitblit +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bnx2x +bonding +bpa10x +bpck +bpck6 +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +c101 +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capi +capidrv +capifs +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcidio +cb_pcimdas +cb_pcimdda +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cifs +cirrusfb +ck804xrom +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-isa +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +core +coretemp +cosa +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpqphp +cpu5wdt +cpuid +c-qcam +cramfs +cr_bllcd +crc32c +crc32c-intel +crc7 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cs5535_gpio +cs553x_nand +cs89x0 +ct82c710 +ctr +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +dabusb +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +depca +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +divacapi +divadidd +diva_idi +diva_mnt +divas +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dmm32at +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +donauboe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt9812 +dtc +dtl1_cs +dtlk +dummy +dummy_hcd +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +e2100 +e752x_edac +e7xxx_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +edac_core +edac_mce_amd +eeepc-laptop +eepro +eeprom +eeprom_93cx6 +eeti_ts +eexpress +efficeon-agp +efs +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +enclosure +eni +enic +epat +epca +epia +epic100 +e_powersaver +eql +es3210 +esb2rom +esi-sir +esp4 +esp6 +et131x +et61x251 +eth1394 +eth16i +ethoc +eurotechwdt +evbug +ewrk3 +exofs +exportfs +f71805f +f71882fg +f75375s +fakephp +farsync +fat +faulty +fbcon +fb_ddc +fb_sys_fops +fcoe +fcrypt +fd_mcs +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +fit2 +fit3 +fl512 +floppy +fm801-gp +fmvj18x_cs +fnic +font +forcedeth +fore_200e +freevxfs +friq +frpw +fsam7400 +fscache +fschmd +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu_ts +funsoft +g450_pll +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +gdth +generic +generic_bl +gen_probe +geode-aes +geode-rng +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +g_NCR5380 +g_NCR5380_mmio +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +gsc_hpdi +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gx1fb +gxfb +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hifn_795x +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hostess_sv11 +hp +hp100 +hp4x +hp_accel +hpfs +hpilo +hp-plus +hptiop +hp-wmi +hso +htc-pasic3 +htcpen +hv_blkvsc +hv_netvsc +hv_storvsc +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hysdn +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-isa +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i810 +i810fb +i82092 +i82365 +i82860_edac +i82875p_edac +i82975x_edac +i830 +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmcam +ibmlana +ibmmca +ibmpex +ibmphp +ib_mthca +ibmtr +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ichxrom +icn +icp_multi +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igb +igbvf +ii_pci20kc +ili9320 +imm +in2000 +industrialio +inexio +inftl +initio +inport +input-polldev +int51x1 +intel-agp +intel_menlow +intel-rng +intel_vr_nor +interact +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_ibft +iscsi_tcp +iscsi_trgt +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +it8712f_wdt +it87_wdt +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k8temp +kafs +kahlua +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kvm +kvm-amd +kvm-intel +kxsd9 +kyrofb +l1oip +l2cap +l440gx +l64781 +lanai +lance +lanstreamer +lapb +lapbether +lcd +ldusb +lec +led-class +leds-alix2 +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-gpio +leds-lp3944 +leds-net48xx +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +leds-wrap +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3l02dq +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lne390 +lockd +logibm +lp +lp3971 +lp486e +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltpc +ltv350qv +lxfb +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +machzwd +macmodes +macvlan +madgemc +magellan +map_absent +map_funcs +map_ram +map_rom +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max1363 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mbp_nvidia_bl +mc13783 +mc13783-core +mc33880 +mc44s803 +mce-inject +mce-xeon75xx +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdacon +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +meye +mfd-core +mga +michael_mic +microcode +microtek +mii +minix +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mixcomwd +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msi-laptop +msnd +msnd_classic +msnd_pinnacle +msp3400 +mspro_block +msr +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +multiq3 +mvsas +mwave +mwl8k +mxb +mxl5005s +mxl5007t +mxser +myri10ge +n2 +n411 +nand +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +ncpfs +NCR53c406a +NCR_D700 +NCR_Q720_mod +ndiswrapper +ne +ne2 +ne2k-pci +ne3210 +neofb +net1080 +netconsole +netjet +netrom +netsc520 +nettel +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +ni52 +ni65 +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +nicstar +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nsp32 +nsp_cs +nst +ntfs +nvidia-agp +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olpc_battery +olympic +omfs +omnibook +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8023 +p9auth +padlock-aes +padlock-sha +panasonic-laptop +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas16 +pas2 +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cs5535 +pata_cs5536 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_isapnp +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_qdi +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pata_winbond +pbe5 +pc110pad +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pca953x +pcbc +pcbit +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcspkr +pcwd +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pegasus +penmount +pf +pg +phantom +phison +phonedev +phonet +phram +physmap +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pms +pn_pep +poc +poch +pohmelfs +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +progear_bl +proteon +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas +qlogicfas408 +qnx4 +qt1010 +quatech_daqp_cs +quatech_usb2 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192se_pci +r8192s_usb +r82600_edac +r8a66597-hcd +radeon +radeonfb +radio-aimslab +radio-aztech +radio-cadet +radio-gemtek +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-rtrack2 +radio-sf16fmi +radio-sf16fmr2 +radio-si4713 +radio-tea5764 +radio-terratec +radio-trust +radio-typhoon +radio-usb-si470x +radio-zoltrix +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +rar_driver +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2860sta +rt2870sta +rt2x00lib +rt2x00pci +rt2x00usb +rt3090sta +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s626 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +safe_serial +salsa20_generic +salsa20-i586 +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb1000 +sbc60xxwdt +sbc7240_wdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sb_lib +sbni +sbp2 +sc +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +scb2_flash +scc +sch311x_wdt +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +scx200 +scx200_acb +scx200_docflash +scx200_gpio +scx200_hrt +scx200_i2c +scx200_wdt +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sdla +sdricoh_cs +se401 +sealevel +sedlbauer_cs +seed +seeq8005 +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +shpchp +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sim710 +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skel +skfp +skge +skisa +sky2 +sl811_cs +sl811-hcd +slicoss +slip +slram +sm501 +sm501fb +smbfs +smc9194 +smc91c92_cs +smc-mca +smctr +smc-ultra +smc-ultra32 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1816a +snd-ad1848 +snd-ad1889 +snd-adlib +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als100 +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt2320 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmi8330 +snd-cmipci +snd-cs4231 +snd-cs4236 +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dt019x +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emu8000-synth +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1688 +snd-es1688-lib +snd-es18xx +snd-es1938 +snd-es1968 +snd-es968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-gusclassic +snd-gusextreme +snd-gus-lib +snd-gusmax +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-interwave +snd-interwave-stb +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-miro +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-msnd-classic +snd-msnd-lib +snd-msnd-pinnacle +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3sa2 +snd-opl3-synth +snd-opl4-lib +snd-opl4-synth +snd-opti92x-ad1848 +snd-opti92x-cs4231 +snd-opti93x +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16 +snd-sb16-csp +snd-sb16-dsp +snd-sb8 +snd-sb8-dsp +snd-sbawe +snd-sb-common +snd-sc6000 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-sgalaxy +snd-sis7019 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-sscape +snd-tea575x-tuner +snd-tea6330t +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-wavefront +snd-wss-lib +snd-ymfpci +soc_camera +soc_camera_platform +softcursor +softdog +solos-pci +sony-laptop +sonypi +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +ssb +sscape +ssfdc +sst25l +sstfb +ssv_dnp +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stinger +stir4200 +stkwebcam +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sworks-agp +sx8 +sym53c416 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t128 +t1isa +t1pci +tc1100-wmi +tcic +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +teles_cs +tg3 +tgr192 +thinkpad_acpi +thmc50 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tileblit +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tle62x0 +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +topstar-laptop +toshiba_acpi +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_infineon +tpm_nsc +tpm_tis +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +trix +ts5500_flash +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tua6100 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +twofish-i586 +typhoon +u132-hcd +u14-34f +uart401 +uart6850 +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +udlfb +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +ultrastor +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +unioxx5 +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usb_gigaset +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-int-device +vcan +ves1820 +ves1x93 +vesafb +veth +vfat +vga16fb +vgastate +vgg2432a4 +vhci-hcd +via +via686a +via-agp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +vicam +video +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vivi +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_tsi148 +vme_user +v_midi +vmk80xx +vmlfb +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt6656_stage +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +w9968cf +wacom +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wavelan +wavelan_cs +wbsd +wd +wd7000 +wdt +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +winbond-cir +wire +wistron_btns +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +z85230 +zatm +zaurus +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +znet +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/armel/versatile.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/armel/versatile.modules @@ -0,0 +1,1558 @@ +3c359 +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8250 +8250_pci +8390 +9p +9pnet +9pnet_rdma +a100u2w +aacraid +ab3100 +ab3100-core +ab3100-otp +abyss +ac97_bus +acecad +acenic +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +adfs +adm8211 +adp5588-keys +adutux +aes_generic +af_802154 +af9013 +affs +af_key +af-rxrpc +ah4 +ah6 +ahci +aic79xx +aic7xxx +aic94xx +aiptek +aircable +alphatrack +altpciechdma +amd8111e +ansi_cprng +anubis +aoe +apm-emulation +apm_power +appledisplay +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at76c50x-usb +ath +ath5k +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atmel +atmel_pci +aty128fb +atyfb +aufs +authenc +auth_rpcgss +autofs +autofs4 +ax25 +ax88796 +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b3dfg +baycom_ser_fdx +baycom_ser_hdx +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +binfmt_aout +binfmt_misc +block2mtd +blowfish +bnx2 +bnx2i +bnx2x +bonding +bpqether +bq24022 +bq27x00_battery +bridge +broadsheetfb +bsd_comp +btrfs +budget +budget-ci +budget-core +c67x00 +cachefiles +camellia +can +can-bcm +can-dev +can-raw +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfg80211 +ch +ch341 +ch7006 +cifs +cirrusfb +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cnic +coda +com20020 +com20020-pci +com90io +com90xx +configfs +core +cp210x +cpqarray +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +cryptd +cryptoloop +crypto_null +ctr +cts +cuse +cx22700 +cx22702 +cx24113 +cx24116 +cx24123 +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da903x +da903x_bl +dabusb +DAC960 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de2104x +de4x5 +decnet +deflate +defxx +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +display +dlm +dm1105 +dm9601 +dm-crypt +dmfe +dm-queue-length +dm-raid45 +dm-service-time +dmx3191d +dm-zero +dnet +dn_rtmsg +dpt_i2o +drm +drm_kms_helper +ds1682 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dummy +dv1394 +dvb-core +dvb-pll +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +earth-pt1 +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +echo +econet +eeprom +eeprom_93cx6 +efs +ehci-hcd +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +em_u32 +enclosure +enic +epca +epic100 +eql +esp4 +esp6 +et131x +eth1394 +ethoc +evbug +exportfs +fat +faulty +fb_ddc +fb_sys_fops +fcoe +fcrypt +fdomain +fealnx +ff-memless +firedtv +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +forcedeth +freevxfs +fscache +ftdi-elan +ftdi_sio +funsoft +g450_pll +garmin_gps +garp +gcm +generic_bl +gf128mul +gfs2 +ghash-generic +gl620a +gluebi +gpio_keys +gpio_mouse +gpio_vbus +gtco +hamachi +hdlcdrv +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-zpff +hifn_795x +hostap +hostap_pci +hostap_plx +hp100 +hp4x +hpfs +hpilo +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-algo-pcf +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-designware +i2c-dev +i2c-gpio +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-ocores +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-versatile +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ib_mthca +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +ics932s401 +idmouse +ieee1394 +ifb +igb +igbvf +industrialio +inftl +initio +input-polldev +int51x1 +intel_vr_nor +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipg +ip_gre +ipip +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ir-common +ir-usb +iscsi_tcp +iscsi_trgt +isight_firmware +isl29003 +isl6421 +isofs +isp116x-hcd +isp1760 +istallion +itd1000 +iuu_phoenix +iw_c2 +iw_cm +iw_cxgb3 +iwl3945 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +jffs2 +jfs +jmb38x_ms +jme +jsm +kafs +kaweth +kbtab +keyspan +keyspan_pda +keyspan_remote +khazad +kl5kusb105 +kobil_sct +ks8842 +ks8851_mll +kvaser_pci +kyrofb +l64781 +lanstreamer +lcd +ldusb +led-class +leds-bd2802 +leds-da903x +leds-gpio +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_sdio +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libsas +libsrp +line6usb +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lm8323 +lnbp21 +lockd +lp3971 +lpddr_cmds +lpfc +lrw +lzo +lzo_compress +lzo_decompress +mac80211 +mac80211_hwsim +macmodes +macvlan +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1363 +max1586 +max17040_battery +max6875 +max732x +max7359_keypad +mb862xxfb +mc44s803 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +memstick +metronomefb +mfd-core +mga +mg_disk +michael_mic +microtek +minix +mkiss +mlx4_core +mlx4_en +mlx4_ib +mos7720 +mos7840 +moto_modem +moxa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +msdos +mspro_block +mt2060 +mt20xx +mt2266 +mt312 +mt352 +mtd_oobtest +mtdoops +mtd_pagetest +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +multipath +mvsas +mwl8k +mxl5005s +mxl5007t +mxser +myri10ge +natsemi +navman +nbd +ncpfs +ne2k-pci +neofb +net1080 +netconsole +netrom +netxen_nic +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nf_tproxy_core +n_hdlc +nilfs2 +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nop-usb-xceiv +nouveau +nozomi +ns83820 +nst +ntfs +nvidiafb +nvram +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +ohci-hcd +olympic +omfs +omninet +opencores-kbd +oprofile +opticon +option +orinoco +orinoco_nortel +orinoco_pci +orinoco_plx +orinoco_tmd +osst +oti6858 +output +oxu210hp-hcd +p54common +p54pci +p54usb +p8023 +p9auth +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pdc2027x +pata_pdc202xx_old +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pca953x +pcbc +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcilynx +pcips2 +pci-stub +pcnet32 +pda_power +pegasus +phantom +phison +phonedev +phonet +pktgen +pl2303 +platform_lcd +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pn_pep +pohmelfs +powermate +ppp_async +ppp_deflate +ppp_mppe +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism2_usb +prism54 +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qnx4 +qt1010 +quatech_usb2 +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8192_pci +r8192s_usb +r8a66597-hcd +radeonfb +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +ramzswap +rar_driver +raw +raw1394 +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +reiserfs +rfc1051 +rfc1201 +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rrunner +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1307 +rtc-ds1374 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8180 +rtl8187 +rtl8187se +rxkad +s2io +s3fb +s5h1411 +s5h1420 +saa7146 +safe_serial +salsa20_generic +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +sbp2 +sc92031 +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +seed +sep_driver +seqiv +serio_raw +sermouse +serpent +serport +serqt_usb2 +ses +sfc +sha1_generic +sha256_generic +sha512_generic +si21xx +siemens_mpi +sierra +sis190 +sis900 +sisfb +sisusbvga +sit +sja1000 +sja1000_platform +skfp +skge +sky2 +sl811-hcd +slip +sm501 +sm501fb +smbfs +smc911x +smsc911x +smsc9420 +smsc95xx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-aaci +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4xxx-adda +snd-als300 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1x +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hifier +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401-uart +snd-nm256 +snd-opl3-lib +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-soc-ad73311 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-ymfpci +soundcore +sound_firmware +spcp8x5 +specialix +squashfs +ssb +ssfdc +sstfb +st +stallion +starfire +stb0899 +stb6000 +stb6100 +stex +stowaway +stp +strip +stv0288 +stv0297 +stv0299 +sundance +sunhme +sunrpc +svcrdma +svgalib +sx8 +symbolserial +synaptics_i2c +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +tcp_probe +tcrypt +tda10021 +tda10023 +tda1004x +tda10086 +tda18271 +tda8083 +tda826x +tda827x +tda8290 +tda9887 +tdfx +tdfxfb +tea +tea5761 +tea5767 +tehuti +tg3 +tgr192 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timeriomem-rng +ti_usb_3410_5052 +tlan +tmiofb +tms380tr +tmscsim +tmspci +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tranzport +tridentfb +ts_bm +ts_fsm +ts_kmp +tsl2550 +tsl2561 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tulip +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twofish +twofish_common +typhoon +u132-hcd +ubi +ubifs +ucb1400_core +udf +udlfb +ufs +uhci-hcd +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +usb8xxx +usbcore +usb_debug +usbhid +usbip +usbip_common_mod +usblcd +usbled +usblp +usbmon +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +userspace-consumer +uvesafb +uwb +vcan +ves1820 +ves1x93 +veth +vfat +vgastate +vhci-hcd +via +viafb +via-rhine +via-sdmmc +via-velocity +video1394 +virtual +visor +vmac +vme +vme_user +vstusb +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +wacom +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +wire +wl1251 +wl1251_sdio +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm8350 +wm8350-i2c +wm8350_power +wm8350-regulator +wm8400-core +wm8400-regulator +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xor +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_iprange +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xvmalloc +yam +yealink +yellowfin +zaurus +zd1201 +zd1211rw +zl10039 +zl10353 +zlib +zlib_deflate --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/armel/versatile +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/armel/versatile @@ -0,0 +1,8240 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/char/apm-emulation 0x129e74f2 apm_get_power_status +EXPORT_SYMBOL drivers/char/apm-emulation 0xdf3329b8 apm_queue_event +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04dd92ce fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x05ce6527 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x0a6842a4 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x0a7ef4eb fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x18c2c649 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x30f1074d fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x42b64edb fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x47fcf22e fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4b41cddf fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d5d4eca fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x583446e4 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x682d3f0d fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x69a56ef0 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x7355ed1b fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x77b10327 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x7df01e62 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x85ba643a fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8a0efd98 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa77a68e3 fw_core_initiate_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa7a31655 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xafc1c793 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb047a2c6 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0xbf17fd5a fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0xd211df53 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe50f7916 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf2af3d83 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0xfc3abcba fw_cancel_transaction +EXPORT_SYMBOL drivers/gpu/drm/drm 0x03527ee4 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x038e8405 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x03e6d2a7 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04f69049 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05248878 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0821ce5f drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0c60e561 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0f2dcc07 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1610309d drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x16b126dc drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x17d3bbcc drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x19e265f2 drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a11d481 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b96d0b9 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1c190acf drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1cf9cdab drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d3caabe drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d744605 drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1e907d74 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20f4d663 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24786a7d drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24f80415 drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x28ac055b drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2951a311 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c52bf0a drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2dfd26ba drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2e2557af drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x31aeba7e drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3326394b drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38ea859c drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b735db1 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3cf8084d drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x40a244fd drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43486950 drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x446e1883 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x46ec374a drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x507fbff2 drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x50839060 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x50d2d80a drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x519149a0 drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x51d0a48a drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x51d64633 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x53874152 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x561180c7 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x57a8e7a4 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5aac16db drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5b3ee5a1 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5c7d4c49 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e5e8052 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5eafcf78 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5f2bec4a drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6c4db1c6 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ed59992 drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x700eb821 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x72063828 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77f0f48a drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7acdfc84 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c224510 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7da4f906 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e0e419f drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e1000b9 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7ef62e72 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x81f98161 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x837463f1 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87ca9cb8 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x884738c7 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c8efacf drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x94ca111c drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9a494ad7 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b7bcda0 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9bb8674c drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c0f367a drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9d4e6dc4 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9e91af18 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f31a024 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa149ffb2 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa731c7a0 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaa9e0634 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xae848d31 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaeb92d50 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb424c3a4 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb55dff20 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbee2f796 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf258d02 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf90e75c drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbfd55355 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc433f1ec drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc47c662f drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc55897da drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6794f16 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6c1a9ca drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6eb2d70 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc7c74655 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf11f73 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcef12958 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd1022b5c drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd4bc1842 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd90ea2ef drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd9dacc40 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdf801706 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdfc402e2 drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe0e9e28f drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2e4120f drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe4fbd914 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9bf2ae6 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9bf8725 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xebaf08b0 drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xece6aebe drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeebb3b31 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf09b66ff drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf0c915a5 drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1956f51 drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1fb6540 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf2edb5aa drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf5b6064e drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfa975276 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfd5795fe drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x066d10ca drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0f5db2a5 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x16c30447 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2a72ff44 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2f47b7ec drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x401ac230 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x41105241 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4729cc0f drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5039700e drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x529fb538 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x52f2dd12 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x541fafd2 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x564bf002 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6179abb9 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x64bfa154 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x658e024b drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x66a798a0 drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7e681e3a drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8a8ee165 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x950595f9 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x998528b8 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xacb2e5bc drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd52a5f57 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd72db084 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xff0416f8 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0374bced ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0440ec56 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x052e2325 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07787990 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0c481380 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0de98dc9 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x11d92c11 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17b82722 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1a653b7a ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1fc92f2c ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x22d8c4b4 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x24536b5d ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2edeef45 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34704ea7 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34790b98 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x36c1f4ad ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x373e5433 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x376ac7be ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c3c3af1 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x470fae44 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x567e7303 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5908e4da ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x59609446 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5bab9fbe ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5cf7871a ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ff8f0c7 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66666d70 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6c2874e8 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6e6df3ec ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7214f4a5 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x74dc857c ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x78252737 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7bccfce1 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8191c516 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x898fb9b5 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa446469a ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa77b51bc ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xacc80e98 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xacf14cd8 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaf1fcf74 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb893df21 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb8f9d883 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc111e2f4 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc43b400c ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xca98ebdf ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcb1655af ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd21987e9 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd7fc4ad3 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe96bee38 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xeb0fb352 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf1a70619 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf3f109ff ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfc934f54 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe362a63 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfee99647 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xb77f0551 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xc3dc7061 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x905b62d8 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xaa8debe4 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pcf 0x54002162 i2c_pcf_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x8c607f8a amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x02ffd021 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x080651c6 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0e9a4e24 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x18158935 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x18d34b87 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x25cb2512 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a1348bf hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ac8b4c8 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3665864f hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x36926526 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x392c97af hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3bb417a8 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4d2a899c hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4d9edf03 hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4e71aeb6 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x503c59c4 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x50837309 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5302c572 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x551bffaa hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x63d86165 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x64633c85 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68459958 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6a45fab1 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x71a4ca06 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x745144f1 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x77b76f27 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7918f63a hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7fd27ed4 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x856a435f hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x89137a23 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8bc865b0 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8e3d09c7 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x932358b1 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x93cac6e0 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x94bce230 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa3639165 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa8f2317a hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xacf01dad hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xad2c2dbd hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaefbd374 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaf31ce85 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb1584077 hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb18c4a19 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb2a56dcf hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb491f3f3 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb77b0f36 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xba2d03f2 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbd778b0d hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbe2832bf hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbf7faeb7 hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc5aea899 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc6e209f1 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc731ee1c hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1078a59 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd46c579b hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe2a7b4b9 dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe2dcb0d4 hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe4e197b4 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xedd3d74e hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf00f857f hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf26ef56d hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf4b8f457 hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf4da80b1 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf7187250 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfab27536 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfaf75a77 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x3a18b906 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x3af83531 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x86c19308 ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x08a37740 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x47c49d4c rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x4c044bae rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x7ab4f9b3 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8b496c59 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xb0900f14 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x05b0bba5 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1659167e ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2f2656d0 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3942383d ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x44e7c87c ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x487a2fae ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5c0e94ae ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x887458c2 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9ce60bee cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9eb664f1 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa2e1f536 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xaac89c77 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xadcd3d34 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc0270635 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc22b4a92 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd5cdbe52 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xff2ee6ab ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x01bc9589 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x02c3c1a7 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x02e18db0 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06302695 ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x07df7607 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0b1334cc ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1917835a ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x225f1995 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x236a7301 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x24485e63 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x274d6065 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2949843e ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2c59a80f ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2f829c51 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4383dc76 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x446e0b67 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4688f839 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x46d63907 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x475bada3 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x51148ddd ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x536d418c ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5b5ce453 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5cb8dffc ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x62304308 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64849a5c ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64f046f9 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x699e8ac6 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6d67d1a6 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6daed822 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6ea69c42 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6fdb2b8e ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x71c65f6c ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7842d73a ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7dd95175 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x83c4e1ca ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x869c4258 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x888292f4 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8a2820b4 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8ed9066c ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x922f256c ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96bb7406 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x98de1d2c ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d80da2c ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d9dd5fd ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa0cbf2ef ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xabef02aa ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb170acf3 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb34bf781 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb663b1d3 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb78e5cd8 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xba4649dc ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbecfbd78 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc558f81b ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcc9ff2ae ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcd09497f ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcd591974 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd435ec8a ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd9f1f424 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xda88d1fe ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdb3a212b ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdeb0bccd ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe90b901f ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xec9f0028 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf1119079 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf64297de ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf9e7062a ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x19fc3e50 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x1f76677c ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2d100322 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x3f1c16f7 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4060a54e ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4cbfaaad ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4e822431 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x50370a8f ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa80ea172 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb1930352 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc3decda7 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xe17e0a9c ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x09cacaeb ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x34493a33 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5d72dabc ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5dff264a ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x73a64cb5 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7af36219 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xa2d7ddbc ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe129f8a7 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf70e8f76 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x3ec70b5a iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x6a9cfe9d iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x73296916 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x7c4ecd99 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x8a8846d5 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x9433203d iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xaeee7686 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xf711037b iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x005cc70a rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x045fdbba rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x04e137b4 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0dfc5a23 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x54853f83 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x61f86a72 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6887309b rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8a4bd477 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8e57a003 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xa81dbb4c rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xa95d18f1 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xafd807dd rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xb32f6a38 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc58ed541 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xd4427b44 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xde673d09 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe0241426 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf9f208d6 rdma_create_qp +EXPORT_SYMBOL drivers/input/input-polldev 0x64282df0 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x8deeeec5 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xbab568fb input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xc290576f input_register_polled_device +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xa0d0c27b mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xf4010b2d mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0xd9f1b543 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x603c36d0 mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0x90d05faa qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x8e6ec171 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x506ad3aa xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x00a75459 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x125e3b0b flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x14325abd flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x1b434f45 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x20fea1b8 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x30aeaa93 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x50dee68e flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6ad63852 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x75979cb5 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8986b810 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xbc449263 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc0529cda flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc7ca8414 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd30c3b58 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd6a9626a flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd7e81ea7 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xdbd58352 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf1d5906a flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf8d55780 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfebaabed flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x00cbdc37 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x11907cec dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x13c71afc dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x13ee8494 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x14c136db dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1ba1b155 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1c905cb3 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1e60b7a1 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2ae1701c dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x45ad87c9 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4a5ad2b0 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x51026299 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5908fe37 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5c40b061 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5d4a084e dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x69dcf36f dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6b00c62c dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f7b6cf1 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x7059fa67 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x81644236 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x84813a02 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8f8de2aa dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb3df4954 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb4845fa3 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb7858e73 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcc41083f dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd6320bbf dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd67ba35b dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe20c965c dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe54b83ca dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8074fa5 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf2031ad9 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xfb674aa3 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x04c60597 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x0efb1ec4 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x62ad06d1 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x64bd73a6 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x771cfcdc usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8b06a039 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xce1348ae dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xc22eb3cf af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0a29affa dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0ac26987 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x162a7042 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x2e806268 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x71e7257b dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x896f89b2 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xb68f49f6 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xc311960e dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdc8caa76 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xe7fe48cf dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xf2fe856f dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0x7ffab45e af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x016763d1 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x11fb2919 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0xa0a7b654 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x3e835522 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x670b9f95 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0xd5ca8dde cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x2f1e38f4 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xbb606a29 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x0052684a dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x0ad23b1d dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0xda923ee4 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0xa8778b9a dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x456ef135 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x4957684b dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x7998e196 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x832c19ef dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xb7786a9a dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xbc0a89ff dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x623bafc4 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x6cc12127 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x3818f15c dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x3b97c978 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x57a5ea44 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x5baecdac dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x7b3bfaa7 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xbe8c6861 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x0880c807 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x1e1887b3 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x404a8298 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x93f37bc0 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xb2fc2511 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x89a61f1e dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x9a2083d4 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xb699d3c1 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xe79f235d dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0x39034e13 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x662de872 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x20755f6f itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0x10efe98e l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0x0d6ab4cf lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0xf25f43ff lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0xb72f429f lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xa771362e lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xf248834a lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0xf3a43d10 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0xd09a6dcd mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0xa561b610 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x655061d2 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xd505772a s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x2aaa47da s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xfc87c149 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0xae7b1bff si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb0899 0x30d60ec2 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0x5063f98f stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6100 0x40ea32a7 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0x1779ecfc stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x3a49c7f0 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0xf94ba037 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0xf392b77d tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0x0fefb322 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xd3318cd1 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xd98a79b1 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x00540706 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x3e3d202c tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0xb4f4552a tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x069913cf ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x53cff3e9 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0xd8d61872 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x570d4eb6 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xbdd58574 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x0ad5b9f6 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x2112b83c ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/memstick/core/memstick 0x1586d69d memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x29aeefd5 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x2dc810d9 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x59a4a44e memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x69a99839 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x7650759f memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x886593a6 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x8947184e memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x8e1c48c5 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa823ba11 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xad22d87a memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xcab02ae9 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0xdb46e650 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xedb26092 memstick_new_req +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x115dd4c1 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x161b4ada mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1b1bd0ab mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x27374cca mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2979351d mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x30ba1d9a mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3599f4f7 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5d0ec133 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x740555c0 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x81264a5d mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x823c18db mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x841618d2 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x884add04 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8f4e1837 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x91dc8504 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb37013ae mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb7d03e60 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb9f6c574 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc9ad9371 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xcd18e49f mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd8ab1520 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdc68a6e2 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe56df849 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf73b3dce mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf7bfe655 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf97aa71c mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfb40e7a3 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfdd4f724 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x054e28f5 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x09b0def4 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0ba8aa1d mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2747fd1a mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x309eb842 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x39d2d005 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3e9a8657 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4b48f2e5 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4f210521 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5633b7eb mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5ae5174d mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5b6d5765 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5c00398b mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x61e96b80 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x62d7c954 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x67f15695 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x70504db8 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7984eae1 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8d6904d3 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9d950f28 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb1bce70e mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbec01775 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbef6437b mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc30ca764 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd2f827e7 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe5087f50 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x111c3119 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x377fbd5e i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x43f1d834 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x4c415574 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6be160b4 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x781f0488 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x7b1cfd5b i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x8240bc16 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xaa545808 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbefaecbe i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc27c3e3f i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc7e2ae32 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcf9f8f35 i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd7fdaa3e i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe7190a09 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe8a3318a i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xef1ee9e1 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xffb6f3a6 i2o_iop_find_device +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x025d467c ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x046dc3a2 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x04850016 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x545db4b6 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x573212a4 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x794e1ff4 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x918d219b ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc062221a ab3100_event_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x71b42414 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xadb5572b pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x2aac8a67 mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x43974255 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0xcac7114d c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xd546ed1a c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x32208987 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x9114fe6a ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x17d421ca tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x26697783 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x506f6f8d tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x660eae88 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x6e0145be tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x8b205979 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xc61334d2 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xcddcbd45 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xd63a98f5 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xd90f4ba2 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xeb6479ca tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xf0caf6c6 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0xf89b8058 tifm_eject +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x09f98c63 lpddr_cmdset +EXPORT_SYMBOL drivers/net/8390 0x07597db7 ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0x18817444 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0x26ff6f23 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x3e7192c9 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x85d83bbc __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0x9fbee4a3 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xa32a973e ei_open +EXPORT_SYMBOL drivers/net/8390 0xcf27305e ei_poll +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xe66edb6a ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0xf8ee2e00 ei_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x20f1ad23 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x26ee735a arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x5afeb6c1 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x680a4e0b arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6f3afb75 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x8acc41d7 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x900184f4 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xb2c532d1 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xc199ad66 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xee721345 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x717131c6 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x7464c144 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xa420978f com20020_netdev_ops +EXPORT_SYMBOL drivers/net/bnx2 0x2c0549b1 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xa74018fd cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x0a7f9cbd t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x191f0407 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1b3db1e8 dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x2479e160 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x25e87c94 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x4779b9de t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x65e150db cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6b87a518 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x700c109a cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa40811d6 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb304573d t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbfdd7710 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe028475f cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf2e420f5 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf3fe4e36 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf6cd9388 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x1c56fbb5 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x5b125e24 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x677161f2 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x86e246d2 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xbc2e1148 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/pppox 0x0590d9e4 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0x6dd295ae pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0x8c712633 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x5b18f8d1 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x83549a32 tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x86c0c145 tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x8f00094c tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xb45077bc tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x007319c9 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x296dae59 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x61adadd4 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/atmel 0x4597dbf2 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x9d132c00 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xebd5a1d2 atmel_open +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x156ca01c hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2dd0eb3e hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4c72ad54 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x587776d4 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x67102870 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6782a863 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6c6ff529 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6e983015 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x732696c4 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7cf819b8 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7f55a924 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7fccbe6f hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x82bd797c hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x84711af4 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8b72e80f hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8bfa5535 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8ff24d94 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x961a759e hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9d190cca hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa1ab9b86 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa85641b7 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb0238de0 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc208899c hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe2439e9c hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xeb6bcae3 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xeefd8e37 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x04550e22 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x10a687f1 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x17fd5917 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x19ad4f9d libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x227a587e libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x25be0a81 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x46570b1b libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x6057b493 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7c45a0e8 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7c83d441 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7da9fc00 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb6f6bab6 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xbb704f7c libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc364063e libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc3efb845 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd43ed4b3 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd7050aa1 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xdefa9434 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf03c6246 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf064f86a libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf0a51d0f libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x055be51f iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05c50c00 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0d2de348 iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0dd52de9 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11ff09fc iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x13ecf7b5 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x14d16c60 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1554d8a4 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x17ddc460 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x18db98dd iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1ae66a6a iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1c4504ee iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1ca8a1f0 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x216ee926 iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x21e5e3b9 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24c899a0 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24e5ca7e iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2568c066 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2d5e9942 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2dd9e1d7 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x35fc458c iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x366f001e iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x388ef32d iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x38c50b7c iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3b978168 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3bbb2555 iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3c22b55e iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3f687ad1 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4058b437 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x40780852 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x424f2d83 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42517f37 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x43097e0c iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x45bab732 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x47662717 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x47abcc34 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x491e17d6 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x497f9651 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4e3b5b91 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f3b3aba iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4fa459b2 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4faac167 iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53067193 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53076f51 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x53fe3136 iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x566ec00e iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5683b216 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57043ee1 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x578c0d51 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57ac002b iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57ad9ecb iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5aa93029 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5ac1328d iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5dd1fe24 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5e552924 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5f0f7cce iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5f2f2816 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5f931097 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x61aa2778 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x621b6893 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62727d56 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x67d8ff23 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ae52206 iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6aff2794 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ca13166 iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6d69728f iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6eac2a39 iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x71c45856 iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x74b216e1 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7bec7906 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7d99cf6b iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7e0462df iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x81f183ea iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x826b6aa4 iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x82d991ad iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8441681f iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x862c99fb iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8976f880 iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x89cda628 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a5f9a47 iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8cd53ab6 iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8e56dd70 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8ecc235c iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x902058d3 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x904a51c1 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9163573b iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x91bf1a7a iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x96cdc2ff iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a60af0b iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9bac2a7d iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9c0e4a86 iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9c1352ad iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9c144e2c iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9dc1e32f iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e86e8e0 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa1c78177 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa6881ca7 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa6c07e47 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa7b21ad0 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa8be9c18 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaad0846e iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xada32c46 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf6da03b iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb02c77cb iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb2cc8a9d iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb39b4789 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb60c8a42 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb72a6e24 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb9174df0 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xba287bb5 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbad96877 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbb82b802 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbddc3abc iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe4cd704 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1d5b7cb iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc6200ca2 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc782128f iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc8cff885 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcaef0362 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcd0e6422 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcd5dc94a iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda3c8a6c iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdc649f68 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde49e7cd iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0d1597b iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe279bb63 iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe57ac7db iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe60cf386 iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe6c46668 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe715b35e iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe8e606eb iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xea940da4 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeae57893 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xed052b58 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf1d8e4ae iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf2b53c91 iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf9a35182 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfa71f2e5 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfbdef398 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfd50beb0 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x34a9b414 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4eac8872 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x90bda7cb orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbe5fffe7 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xcf0d7660 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xdd889f7b orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf5c3f5f0 orinoco_up +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xad26ef8a pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x301cdf53 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x3ffd3306 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x769d138c fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x7f4ed19e fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x98c95151 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xa1141006 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xae9398a6 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x034ddfe8 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0411056e __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x13e96f55 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x19c4181a fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1bb46f65 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x24f4976a fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2e2bf987 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4091d08e fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x419efd47 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4a5c082c fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5104cc9a fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6457e9d1 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x672da592 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67c35ba1 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x736fbdd8 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x74e4d970 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x78a837cf fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x86c3c7fb fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x88667f00 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x88e65868 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x89187649 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8f16afe1 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x93b88f8b fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9488f658 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x96b7356d fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x96ca8fc9 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9bf6c5cb fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa0a9c698 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa8aee4a1 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa9530f63 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc58e9b47 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc96a7a7a fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd3c0ef71 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd66aca0d fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cf4b40 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdd53dae4 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdef2f8cb fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe1b1beed fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe776ca8b fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf0492cbf fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf1cb2355 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfefb47cc fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0xc7c5b99f mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x16366ceb fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x4454a100 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x60d845b6 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x643a68f9 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa1d9853b fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xabdb3431 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb93298e5 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xbcb0cf83 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd038a5d9 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xdfff741e fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe232b267 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe9bcda1f scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x017f8b91 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0677cb0a sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x175ec0f0 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1b1576b7 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2ae23302 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x321667ea sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4120293e sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x456b5f5f scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4c71a1c6 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x580909e7 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x67dd58a0 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x754bef5a scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7c5a9ebe sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7d01255c sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9b2cf86f sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa27290b8 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa9ddd5dd sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xab7e932f sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb31a1ff4 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb7baa361 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xba1fd131 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc0d3bf67 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc316bade sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe539b5d6 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe6243e80 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf17be767 sas_rphy_delete +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/8250 0xdfe7d1bb serial8250_register_port +EXPORT_SYMBOL drivers/ssb/ssb 0x024c364b ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x03e080ce ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x0cf55f64 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x1ead367f ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x1f10e74f ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x205bad54 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x3ba16c90 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x3c97d7b4 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x5c0c4992 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x61ae13f0 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0x66a78d7a ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x6f8cf076 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x87560743 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x8f04b94f ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x8fe0aa9a ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x931acbec ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xa140725c ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0xa250e8d0 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xa35aee9c ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc2905704 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xd776e9d3 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0xd85e0aaf ssb_bus_resume +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x2b438f74 iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x3d77575c __iio_change_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x409015d8 __iio_push_event +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x4363b2ed iio_read_const_attr +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x50964685 iio_remove_event_from_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x590eacfd iio_allocate_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x739ae300 iio_devt +EXPORT_SYMBOL drivers/staging/iio/industrialio 0x7557ae61 iio_unregister_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xbaa42987 iio_free_device +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xc3180798 iio_register_interrupt_line +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcda27160 iio_free_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xcf3aa577 iio_add_event_to_list +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe631b7ff iio_device_register +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xe9784f42 iio_get_new_idr_val +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xf1aea048 iio_device_unregister +EXPORT_SYMBOL drivers/staging/iio/industrialio 0xfc6d580e iio_class +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x0bcba393 variax_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x30e2634f pod_create_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0x6d462b45 pod_remove_files +EXPORT_SYMBOL drivers/staging/line6/line6usb 0xfecb8595 variax_create_files +EXPORT_SYMBOL drivers/staging/rar/rar_driver 0xf8017f03 get_rar_address +EXPORT_SYMBOL drivers/staging/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/staging/vme/vme 0x04fa0381 vme_bus_type +EXPORT_SYMBOL drivers/staging/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/staging/vme/vme 0x0e10859d vme_lm_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x1bbe0d90 vme_slave_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x251b9ed8 vme_slave_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x2597ad2b vme_request_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0x3d1af350 vme_dma_pci_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x3f68d4cf vme_lm_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x424afeff vme_dma_list_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x4db2e6cb vme_slot_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x58214130 vme_request_dma +EXPORT_SYMBOL drivers/staging/vme/vme 0x60c0177d vme_unregister_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x66227eae vme_alloc_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x76bab4d4 vme_master_set +EXPORT_SYMBOL drivers/staging/vme/vme 0x7797a741 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0x78472737 vme_master_request +EXPORT_SYMBOL drivers/staging/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/staging/vme/vme 0x7fde2edb vme_master_read +EXPORT_SYMBOL drivers/staging/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/staging/vme/vme 0x93dff61f vme_slave_get +EXPORT_SYMBOL drivers/staging/vme/vme 0x94b2590f vme_free_consistent +EXPORT_SYMBOL drivers/staging/vme/vme 0x96e5e105 vme_dma_list_exec +EXPORT_SYMBOL drivers/staging/vme/vme 0x9a2968fa vme_register_bridge +EXPORT_SYMBOL drivers/staging/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/staging/vme/vme 0xc21d2e0e vme_lm_request +EXPORT_SYMBOL drivers/staging/vme/vme 0xc3bb232d vme_new_dma_list +EXPORT_SYMBOL drivers/staging/vme/vme 0xc442e14f vme_register_driver +EXPORT_SYMBOL drivers/staging/vme/vme 0xc8352002 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xca6a77c4 vme_free_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xd797b9a5 vme_master_write +EXPORT_SYMBOL drivers/staging/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/staging/vme/vme 0xe60cbb2f vme_master_get +EXPORT_SYMBOL drivers/staging/vme/vme 0xe693a6ce vme_get_size +EXPORT_SYMBOL drivers/staging/vme/vme 0xea1657f9 vme_generate_irq +EXPORT_SYMBOL drivers/staging/vme/vme 0xeccbeafc vme_dma_free_attribute +EXPORT_SYMBOL drivers/staging/vme/vme 0xf3661bf0 vme_dma_list_add +EXPORT_SYMBOL drivers/staging/vme/vme 0xfc78a10c vme_unregister_driver +EXPORT_SYMBOL drivers/telephony/ixj 0x5c5f1ff6 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x672b5528 phone_register_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xae1d8402 phone_unregister_device +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0xc85fc246 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x78c53df8 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xb4ff9070 usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x168d2423 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x300d9588 lcd_device_unregister +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x4126db2b cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xb1682bb8 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0xdbe9a80d cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xdd2d66a1 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/display/display 0xce2a87ab display_device_unregister +EXPORT_SYMBOL drivers/video/display/display 0xe41cb677 display_device_register +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0x5a2fd9fa mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x21d95ac9 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x4fbbc3e4 g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x87404a69 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x18b726d7 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x2f33850c matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x4a9724e6 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x8229c7d0 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x62bb39d1 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0xd22c61cd matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x1771f48b matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x7f2821a4 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xf855efd6 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xfe50702c matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x051d1757 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xd64f85ee matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x41f08dd9 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x765fbee5 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x97e99e5d matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xaed51a75 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xd756d655 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/output 0xeb22bb6a video_output_unregister +EXPORT_SYMBOL drivers/video/output 0xff6f6e52 video_output_register +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1364d63b svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x25a068e5 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x4b687ebb svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x9980f718 svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x99b85241 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xc126adfc svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/svgalib 0xf90c7a25 svga_tilefill +EXPORT_SYMBOL drivers/video/syscopyarea 0xfe0af573 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x359dc451 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x611e25a9 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x39c560ed w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0xf64f31d3 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0eba9152 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x43c1f966 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x467dc0f9 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x66c2495e w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x371d798a w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x587601f3 w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0x751dd3e5 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xa2c85e86 w1_remove_master_device +EXPORT_SYMBOL fs/configfs/configfs 0x4d6e899c configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x52616088 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x6274aecf config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x719d0dbe configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x8fad5827 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0xb3c7a327 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xcb244352 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xd593b919 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xd66bda53 config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xd976d844 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0xf9de6b7f config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0xfaaad5a3 config_item_put +EXPORT_SYMBOL fs/fscache/fscache 0x06587f53 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x09817892 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x0c3c4a2d fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0x1b67bee7 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x2a8d5061 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x319cef75 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x32656d26 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x3c8cc9b7 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x52f4a7a1 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x5c297965 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x5d4215f1 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x652bd9b6 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x6bc457c1 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x6eea9786 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x8303f6bd fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x8ac9884d __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x90b4b8fe __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x97b03e48 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xa489545f __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0xd1dd6afa __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xd40563a5 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0xd6683888 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xe16bcd82 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0xebd812a8 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0xf073b9a6 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0xf5374896 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xf7ecda29 fscache_obtained_object +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x0a3c3457 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x3797e37a qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x8b83b2dd qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xd7e622e9 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xf11a203b qtree_entry_unused +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x6e1a0001 make_8023_client +EXPORT_SYMBOL net/802/p8023 0xf7cce235 destroy_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x032bb526 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x045d7b41 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x0b11ff5a p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x19887abe p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x1b6fe3a2 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x1fd5a531 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x3f33589c p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x43367923 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x4fa0def9 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x51f737ca p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x5f3add3a p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x6b754e6f p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x6f230b67 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x7310a66f p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x837a8e20 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x8a345b50 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x8f34fe15 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x99a7f30f p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x99aa7841 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x9c146f36 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xd331fc1d p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0xe4d2497c p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0xe4e52c2a p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe60ec506 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0xe77aeec9 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xea03e364 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0xeba63dad p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xefa5094a v9fs_register_trans +EXPORT_SYMBOL net/ax25/ax25 0x03e9361c ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x2e30c889 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x68517c92 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x6b8dace9 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x7b67c4f4 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x8f15272c ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x971875e5 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xdaaccd48 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xf0c7723e ax25_find_cb +EXPORT_SYMBOL net/bridge/bridge 0x670efcdb br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x4caa8980 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x66bf01ac ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x97a346ad ebt_do_table +EXPORT_SYMBOL net/can/can 0x08e87c6b can_proto_unregister +EXPORT_SYMBOL net/can/can 0x1ff9bd0a can_proto_register +EXPORT_SYMBOL net/can/can 0x3bfa65ba can_rx_register +EXPORT_SYMBOL net/can/can 0x86b33ceb can_rx_unregister +EXPORT_SYMBOL net/can/can 0x9a671746 can_send +EXPORT_SYMBOL net/ieee802154/nl802154 0x1202f20d ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x14d33558 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x3332d3fc ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x395c5060 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x44736a17 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xca534b3f ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xfe19628c ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x165e807e wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0x2d7048c4 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0x75f3ed62 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0xa0c6e6ab wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xb86ed85b wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x06527d8f arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x55ccba59 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xd8f2d71b arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x1c6cc40a ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x47c0917e ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xabd4dfbe ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x15e5902b nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x63e07e68 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x76a64bc2 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x93afe0c5 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x95003f51 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xa64e5c03 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xd573aee7 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x64fc90df xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0xb29d3bdc xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x4e04b9d5 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x53dc95aa ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xc2ca1e83 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xe053b378 ip6t_do_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x1e1705f2 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0xd2c20178 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/mac80211/mac80211 0x0e57e252 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x0f3015f6 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x21e13c97 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x2a10f0d0 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x2c948fb3 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x30a3c971 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x3af5ccd7 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x40d6b9d5 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x447592be ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x490ecde7 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x4bfe3780 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x5ba47c5f ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x6bc3bd1f ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x6c8bfe10 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x6dbab8be ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x79abd237 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x7c6ecbf3 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x7f89650f wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x7fb5a0ce ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x88f10fdc ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x8dacd3ef ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x913886a0 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x94a2836a ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x9b74e031 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x9cfaf03f ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xae2c2486 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xb7f91a33 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xbfdedc44 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc38bff78 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0xc81f18e5 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xca9661ae __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xde003222 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xe6294929 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xe79741d6 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xea8803b7 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xec4dd5dd ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xeeb7284b ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xeec45a79 ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xf4395d79 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0xf7a81fe0 ieee80211_rts_duration +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x0491a66f ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x08c06880 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1ae99a84 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1f37ba58 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x295f3585 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x2f0cde36 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x81aadf8c register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9d3467cd ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9f615c66 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa25495bc ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xdfee2269 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x6d5d0d51 __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xf7ebe8c8 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x5566f33a nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x118f2124 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x12474f14 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x230daf38 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x3e3f3568 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x684cb32b xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0xa91ad0f5 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xb53a4cce xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xc8903563 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xe0ec2df3 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xf7557e6a xt_register_match +EXPORT_SYMBOL net/phonet/phonet 0x0cbe6a09 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x3bd3543a phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x6f1328a4 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x74875b5e pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x75e51328 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0xa2a0484b phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xcd732067 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xfd7fff0f phonet_proto_unregister +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0df7a488 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x147ca879 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2a876724 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3046c61f rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3665d401 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x663675dd rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x66c83053 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7b027f88 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x81f25dad rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9047a37e rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa3ec6fe7 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xcbdc4719 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xcf5d9af0 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xd72af949 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfc4d2a59 rxrpc_kernel_end_call +EXPORT_SYMBOL net/sunrpc/sunrpc 0xa07e3935 svc_pool_stats_open +EXPORT_SYMBOL net/wimax/wimax 0x19c772c0 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xfd0de42f wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x087627a9 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0ce3bb0c ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x1635cab7 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x202ad0fd wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x21aad346 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x268f9129 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x287c580c wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x2ea76a04 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x3af0d7ca cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x3dc2ce7e cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x4e97dfc5 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x520ddbcb cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x521629b9 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x65a90116 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x7003c744 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x70d7313e wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x71876bcf wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x7bc2e731 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x7c97f3e6 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x81f0873c cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x8aabfff0 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x8d2f5d87 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x90eb5e02 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x92a012bb ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x93b207ce wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xa2ec5e96 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xa5da21af cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xa820ccc5 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xaaf4093b __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0xaf00556a cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xb3736949 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc931a03d ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xd2bc15cf cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xd916022d cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xdc996ddc cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xdd809815 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xe1e50c9d cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xe692b4d1 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/lib80211 0x03997daf lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x41ec02ad lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x6a9caaab lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x72abd401 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x75abac3f lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x7c7fd4f4 lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x7e4ccb20 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xcbb5d8b1 lib80211_crypt_info_init +EXPORT_SYMBOL sound/ac97_bus 0x28078673 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0xf1ee876e snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/snd 0x0147eca2 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x07e42620 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x0a1bd17b snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x17a649f6 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1d8aba50 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x255f577e snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x2effffba snd_device_new +EXPORT_SYMBOL sound/core/snd 0x33e8c744 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x343d96ba snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x34d16e56 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x36d72514 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3ba27827 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x4322de7e snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4ff6231f snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x5386a99f snd_card_free +EXPORT_SYMBOL sound/core/snd 0x5dcc7df4 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x5e42de86 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x63c97207 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x64fcf018 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x66c70055 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x6b3d0f7f snd_device_register +EXPORT_SYMBOL sound/core/snd 0x6fe9d755 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x7455b169 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x7a9b8621 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x7d138e41 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x87a97a30 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x91f6a59e snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x982ade0b snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x99cae669 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa6b416ce snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xad67e5a0 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xb023b884 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xb18c0fe2 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb3821d34 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xb8071e83 snd_cards +EXPORT_SYMBOL sound/core/snd 0xc30ccc32 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0xc45fc6d0 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xc6a40a80 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xc75d7011 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xd1157735 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe6e384ca snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xe7e97bf4 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0xf130e59a _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0xf1bb8957 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0xf81aa849 snd_card_register +EXPORT_SYMBOL sound/core/snd 0xfa5e8638 snd_card_set_id +EXPORT_SYMBOL sound/core/snd-hwdep 0xa4781618 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x6bd150bc snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x960b772f snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xb5368f4c snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xcd9d574c snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xe19b9663 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00a092f4 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x03a565bd snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0d627b6d snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x0fa7e4c2 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x11286307 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x17bb0d51 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x1cc737e1 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x2019e9c3 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x204c46ef snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x2cdd3fb5 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x2f1214aa snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x395e287f snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x396d3834 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x45354fa9 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x45d3e9a5 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x4b2544f1 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4e64540c snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5abd3d02 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x73586a77 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x7a3435bc snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x7b7fb3c5 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x7ceb30b9 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x823e8bbe snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x832f808c snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x93aa3741 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xacd44206 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0xb8376fe6 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xd0890338 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd3275888 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0xd63519ea snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe6217eb5 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0xe8b5d95e snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0xf024d8d2 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0xf03ee0bd snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf618f86e snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0xf6a81bc9 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xf7621249 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0ae12847 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2114c84b snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x23877ccc snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x29249f4b snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x3e3a6649 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5237df6f snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7e4aff89 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x85ca10ec snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x9ebe7f78 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa6220689 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbbeaa5b1 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe1b341ce snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe1ff4ab5 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe21d0532 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xedc666d4 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf7a011e3 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf88fd811 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-timer 0x259407bb snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x2e81f327 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x561cec69 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x85079c98 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x88537a38 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x9e8291a2 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xa5c85ced snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0xd80d6680 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0xdfa9d676 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xed465911 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0xf1bb2ca3 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0xf300ccc4 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xf85002c8 snd_timer_global_register +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x86cf8ff2 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x1854fa46 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x42d734f9 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x669a6ac8 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb4e206e7 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xeab5803a snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf049979f snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xfad47258 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x041a4458 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x564e3849 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x8b7e0cee snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x9223ae74 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xbd898836 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xbe9713f2 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xea3fc143 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xeb585ac0 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xf6193ce5 snd_vx_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x310f9b77 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x6a9af9e2 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xd9cc176c snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xdf3c7731 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xe8e6e218 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xf87adc48 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x2a534ce1 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x38db4296 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x488b1925 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x5236721a snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x403aea2b snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x502f605e snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x25a4c310 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x41d422a0 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x90e90dc0 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x9cb22e64 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xd83f4062 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-i2c 0x07682d6b snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x10e8c3da snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1dea8c4b snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x40638b6d snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xbe6ba79c snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xcccfbe99 snd_i2c_probeaddr +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x003e6eac snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1a9c4369 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x20389bdc snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x2050fcfd snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4f25b1bd snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5568d024 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5e3b8971 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5edb49e3 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7ba1b407 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7dd54b9e snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x858317bb snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8d6021f2 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb59a34d2 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb5cedc0d snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xbe28c9fd snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd423375b snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf8e2d49e snd_ac97_resume +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x2d393771 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x450c529b snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x56e00c50 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xa39d77ca snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xac223f6c snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xbfcd08fc snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xec0b21da snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xeca88687 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xfae3f98c snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x66777dc8 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x4cee7c23 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x818b3547 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xa084f3a7 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x1310dc88 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x1a0648eb oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x1f0b6154 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x461bd095 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x4b28d48d oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x5e0a32ef oxygen_pci_suspend +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x6a070f58 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x6a7e5d34 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x7c099073 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x927f38a2 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x962b9a0e oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa51330f0 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xab30ffdd oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xacb35f35 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb40c410b oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xce3e09ec oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xe21869cf oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xe4bedacf oxygen_pci_resume +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xfb5f1398 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xfc3f4a75 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x0b107cb1 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x6cfdbd2e snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xce47bc77 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xe4429341 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xfda70394 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x52f7bcb6 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x1483d6de register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x1c6ce0de register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x31448307 sound_class +EXPORT_SYMBOL sound/soundcore 0x42c504bf register_sound_special +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x855d603b register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x9641d842 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/snd-util-mem 0x01e234f2 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0895e1a9 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x15cfaea4 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x2ba29873 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x45c2abb1 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5d2130f4 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xab810f2e __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb2676a58 snd_util_mem_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xcfc76dc0 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x12383b11 dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x288d7aa3 dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x4201c601 dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x6b97e4d1 dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xa4e7fae8 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xeee4a2b7 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x210f4670 lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xb1d3b83f lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 fp_printk +EXPORT_SYMBOL vmlinux 0x00000000 fp_send_sig +EXPORT_SYMBOL vmlinux 0x00000000 kern_fp_enter +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0005e390 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x002b670e dentry_unhash +EXPORT_SYMBOL vmlinux 0x0030220f pci_bus_type +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x00993d6f mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x00eabe7a blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00eef49e __strnlen_user +EXPORT_SYMBOL vmlinux 0x00f8470a kthread_create +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x0111fdd7 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01cabb83 inet_bind +EXPORT_SYMBOL vmlinux 0x01d94a90 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x01e05a68 load_nls +EXPORT_SYMBOL vmlinux 0x01ef8d07 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x02071697 sock_no_getname +EXPORT_SYMBOL vmlinux 0x0207ff51 inode_permission +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x02196324 __aeabi_idiv +EXPORT_SYMBOL vmlinux 0x022e9c97 mmc_host_disable +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x028981cd unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02d8ab9d dev_alloc_name +EXPORT_SYMBOL vmlinux 0x02eb6bd4 cfi_read_pri +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x0313f8b5 icmp_send +EXPORT_SYMBOL vmlinux 0x0321bed0 set_page_dirty +EXPORT_SYMBOL vmlinux 0x032424ed free_task +EXPORT_SYMBOL vmlinux 0x032e4513 nla_reserve +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x03372caa genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x0350e2f4 up_read +EXPORT_SYMBOL vmlinux 0x03567291 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x0379b11e sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x03a54d97 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03c63a1a call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x03ff6352 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x0400429e set_irq_chip +EXPORT_SYMBOL vmlinux 0x040bdd01 unlock_buffer +EXPORT_SYMBOL vmlinux 0x041ff29c give_up_console +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x043b8483 __kfifo_get +EXPORT_SYMBOL vmlinux 0x0441b5ea sock_no_listen +EXPORT_SYMBOL vmlinux 0x045e795c amba_request_regions +EXPORT_SYMBOL vmlinux 0x046306fe mmc_remove_host +EXPORT_SYMBOL vmlinux 0x047c3f7d i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04a05c2b sock_register +EXPORT_SYMBOL vmlinux 0x056d108e neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x057883ec scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x0586b9ee bdi_destroy +EXPORT_SYMBOL vmlinux 0x059da57d new_inode +EXPORT_SYMBOL vmlinux 0x059f3467 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x05b7fcba vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x05f061fa dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x05f7cbc2 end_page_writeback +EXPORT_SYMBOL vmlinux 0x0607d880 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x06090de7 __sg_free_table +EXPORT_SYMBOL vmlinux 0x0615f0e3 genphy_resume +EXPORT_SYMBOL vmlinux 0x06161de9 phy_connect +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x0618e633 dump_fpu +EXPORT_SYMBOL vmlinux 0x062aba95 mempool_free +EXPORT_SYMBOL vmlinux 0x064e3439 kobject_set_name +EXPORT_SYMBOL vmlinux 0x065b2692 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x06600a5d jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x0680e8fb skb_clone +EXPORT_SYMBOL vmlinux 0x069a0fe8 journal_clear_err +EXPORT_SYMBOL vmlinux 0x06c06863 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x06ca621b iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06d8bae1 idr_get_new +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x07458c81 block_write_begin +EXPORT_SYMBOL vmlinux 0x077e5e9d blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07aa7fd2 napi_frags_skb +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07f6726a find_or_create_page +EXPORT_SYMBOL vmlinux 0x07fde93f pci_find_capability +EXPORT_SYMBOL vmlinux 0x080f1a5b udp_prot +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x083542ff get_user_pages +EXPORT_SYMBOL vmlinux 0x0843d30c vfs_rename +EXPORT_SYMBOL vmlinux 0x08692c20 bio_split +EXPORT_SYMBOL vmlinux 0x08728140 malloc_sizes +EXPORT_SYMBOL vmlinux 0x08ac7131 mtd_do_chip_probe +EXPORT_SYMBOL vmlinux 0x08b2c487 seq_path +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08e0e9a0 security_path_rmdir +EXPORT_SYMBOL vmlinux 0x09144253 sysctl_string +EXPORT_SYMBOL vmlinux 0x092b007a sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x094ad3eb tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x09538623 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x095bb830 down_interruptible +EXPORT_SYMBOL vmlinux 0x096141a8 input_flush_device +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09c486c3 dev_close +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09d3efb6 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x0a14ab53 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x0a1bebc5 kernel_execve +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a4747ff allocate_resource +EXPORT_SYMBOL vmlinux 0x0a4f9d49 __destroy_inode +EXPORT_SYMBOL vmlinux 0x0a63a7d2 dma_pool_free +EXPORT_SYMBOL vmlinux 0x0a7e8a82 i2c_master_send +EXPORT_SYMBOL vmlinux 0x0a80facb proto_unregister +EXPORT_SYMBOL vmlinux 0x0aa13d05 __raw_readsw +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0ad7fa59 dma_mmap_coherent +EXPORT_SYMBOL vmlinux 0x0ae90fcc vga_client_register +EXPORT_SYMBOL vmlinux 0x0aec08cd scsi_allocate_command +EXPORT_SYMBOL vmlinux 0x0afb44ea kernel_accept +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b5f2d2c sg_next +EXPORT_SYMBOL vmlinux 0x0b6346e3 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x0b63c1ab arp_xmit +EXPORT_SYMBOL vmlinux 0x0b6dee2b unregister_cdrom +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b931c49 md_error +EXPORT_SYMBOL vmlinux 0x0baaa68d km_policy_notify +EXPORT_SYMBOL vmlinux 0x0bc2cfed bd_release +EXPORT_SYMBOL vmlinux 0x0bcca951 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x0bd74a9b inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x0be3eb21 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x0c32c82b jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x0c52c2ad ___pskb_trim +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c6fc3b9 lock_may_read +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c9652e8 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x0ca366f9 dm_dirty_log_type_unregister +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cc4d4bf dput +EXPORT_SYMBOL vmlinux 0x0d0fe2f4 down_trylock +EXPORT_SYMBOL vmlinux 0x0d12ded0 security_inode_readlink +EXPORT_SYMBOL vmlinux 0x0d267c04 blk_start_request +EXPORT_SYMBOL vmlinux 0x0d3def21 idr_pre_get +EXPORT_SYMBOL vmlinux 0x0d3f57a2 _find_next_bit_le +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d993b82 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dc7b10e dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x0dd0e806 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x0dea0269 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x0df2ea4b bd_claim +EXPORT_SYMBOL vmlinux 0x0e045135 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x0e199d39 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x0e21ff66 register_qdisc +EXPORT_SYMBOL vmlinux 0x0e2cde27 proc_dostring +EXPORT_SYMBOL vmlinux 0x0e493b3f scsi_scan_target +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e52714f sync_blockdev +EXPORT_SYMBOL vmlinux 0x0e6819f1 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x0e726db5 read_cache_page_async +EXPORT_SYMBOL vmlinux 0x0e887efd napi_gro_frags +EXPORT_SYMBOL vmlinux 0x0e967d95 current_fs_time +EXPORT_SYMBOL vmlinux 0x0ebc9885 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x0ecec547 do_sync_write +EXPORT_SYMBOL vmlinux 0x0ee24f02 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x0f16b00a genphy_config_advert +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f23445d blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x0f2740e1 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x0f3f2944 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x0f446b10 request_key_async +EXPORT_SYMBOL vmlinux 0x0f6c6b73 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x0f99d945 read_cache_pages +EXPORT_SYMBOL vmlinux 0x0fa2a45e __memzero +EXPORT_SYMBOL vmlinux 0x0fd15fd4 bio_map_kern +EXPORT_SYMBOL vmlinux 0x0ff178f6 __aeabi_idivmod +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x0ff83b40 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x10103eb5 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x10579454 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x10730669 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x108ea4ef tcp_prot +EXPORT_SYMBOL vmlinux 0x10ad9707 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x10af7846 journal_init_inode +EXPORT_SYMBOL vmlinux 0x10b5cf71 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x10bb9a7f scsi_execute +EXPORT_SYMBOL vmlinux 0x10cc99b5 vga_get +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x110b6992 single_release +EXPORT_SYMBOL vmlinux 0x110f32cc alloc_fcdev +EXPORT_SYMBOL vmlinux 0x111470b3 keyring_search +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x114236d9 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x114622c6 d_alloc +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x1191a314 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x119b50e7 elf_check_arch +EXPORT_SYMBOL vmlinux 0x11a49240 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x11d80337 proc_create_data +EXPORT_SYMBOL vmlinux 0x124e8610 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x125a7dc8 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x126ad03b blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x12701e5a spi_release_transport +EXPORT_SYMBOL vmlinux 0x12765b45 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x12b927a0 d_invalidate +EXPORT_SYMBOL vmlinux 0x12bb580f sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12ef5371 neigh_lookup +EXPORT_SYMBOL vmlinux 0x12f5c4e9 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x12fb75ba prepare_binprm +EXPORT_SYMBOL vmlinux 0x12fda2d0 kobject_get +EXPORT_SYMBOL vmlinux 0x131ca6e3 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x132c56de set_device_ro +EXPORT_SYMBOL vmlinux 0x134d5b1b sock_i_ino +EXPORT_SYMBOL vmlinux 0x13800a9a skb_copy_expand +EXPORT_SYMBOL vmlinux 0x13b66321 dma_alloc_from_coherent +EXPORT_SYMBOL vmlinux 0x13c09526 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x13d39eb1 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x13da48af skb_store_bits +EXPORT_SYMBOL vmlinux 0x13e33ef6 mmc_host_enable +EXPORT_SYMBOL vmlinux 0x13f9de54 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x144ed3a1 dev_base_lock +EXPORT_SYMBOL vmlinux 0x146bee56 generic_write_sync +EXPORT_SYMBOL vmlinux 0x146cdb77 tcp_check_req +EXPORT_SYMBOL vmlinux 0x14778cad proc_dointvec +EXPORT_SYMBOL vmlinux 0x14aa6141 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x14cdf2a1 dqget +EXPORT_SYMBOL vmlinux 0x14d1eec1 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x14fde450 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x1502fa1a kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x15045ac3 clear_inode +EXPORT_SYMBOL vmlinux 0x151eb9b1 scsi_add_device +EXPORT_SYMBOL vmlinux 0x152bac67 netif_napi_add +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1560feec mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x1562dec4 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x1587ea61 phy_stop +EXPORT_SYMBOL vmlinux 0x15e3ae00 pci_get_class +EXPORT_SYMBOL vmlinux 0x15e4a457 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x15eca7c9 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0x15f20c73 ioremap_page +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x16479e8f panic_notifier_list +EXPORT_SYMBOL vmlinux 0x164e9be5 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x166899b2 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x166e74a2 cpu_v7_set_pte_ext +EXPORT_SYMBOL vmlinux 0x1682a988 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x16990f4d grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x170d72e5 __serio_register_port +EXPORT_SYMBOL vmlinux 0x17290c68 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x172b0153 key_unlink +EXPORT_SYMBOL vmlinux 0x172f5491 sock_release +EXPORT_SYMBOL vmlinux 0x17325ed7 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x178ef83b mii_nway_restart +EXPORT_SYMBOL vmlinux 0x1798b9b7 ll_rw_block +EXPORT_SYMBOL vmlinux 0x17a142df __copy_from_user +EXPORT_SYMBOL vmlinux 0x17b3ec78 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x17c7219a clk_get +EXPORT_SYMBOL vmlinux 0x17d98e70 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x18182bba journal_load +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x186844c6 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x18739a51 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x18979ecf security_d_instantiate +EXPORT_SYMBOL vmlinux 0x189d6ab5 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x189ea184 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x18af15f6 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x18b307f7 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x18cbd0c0 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x190e866b rtnl_create_link +EXPORT_SYMBOL vmlinux 0x1913fe07 bio_alloc +EXPORT_SYMBOL vmlinux 0x1918b5eb skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x1924abdb simple_set_mnt +EXPORT_SYMBOL vmlinux 0x19439fe0 md_register_thread +EXPORT_SYMBOL vmlinux 0x1959801b ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0x196818d2 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x19767222 input_inject_event +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19b73b07 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x19cc1902 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x19cd8ea1 bh_submit_read +EXPORT_SYMBOL vmlinux 0x19e2d44b lookup_one_len +EXPORT_SYMBOL vmlinux 0x1a65f4ad __arm_ioremap_pfn +EXPORT_SYMBOL vmlinux 0x1a7b580b tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x1a820b2c pci_iomap +EXPORT_SYMBOL vmlinux 0x1a8f8be5 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad1f2e7 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0x1ada9d2a skb_copy_bits +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b018834 neigh_create +EXPORT_SYMBOL vmlinux 0x1b23991c phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x1b255c4e xfrm_state_add +EXPORT_SYMBOL vmlinux 0x1b54b015 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x1b601445 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9a81f1 request_firmware +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bc19371 eth_type_trans +EXPORT_SYMBOL vmlinux 0x1bc507cb tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x1be6d238 init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c278380 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x1c2d79d9 input_unfilter_device +EXPORT_SYMBOL vmlinux 0x1c324357 idr_replace +EXPORT_SYMBOL vmlinux 0x1c63d302 tcp_poll +EXPORT_SYMBOL vmlinux 0x1c808484 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x1ca9ad2d register_8022_client +EXPORT_SYMBOL vmlinux 0x1cc66e6c input_unregister_handle +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1cca4bf1 bio_kmalloc +EXPORT_SYMBOL vmlinux 0x1cd29347 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x1ce9e6a7 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x1d00485c tty_port_close_end +EXPORT_SYMBOL vmlinux 0x1d0aaf41 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x1d20873c dma_cache_maint_page +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d31372e skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x1d353e6b phy_device_free +EXPORT_SYMBOL vmlinux 0x1d5ce0de framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x1d681e82 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x1d72a265 register_snap_client +EXPORT_SYMBOL vmlinux 0x1d7962dc xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x1d85cbed unregister_binfmt +EXPORT_SYMBOL vmlinux 0x1d865166 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x1db12d4b scsi_print_sense +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dc45029 register_nls +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1de6ea76 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x1e1d5d36 ps2_drain +EXPORT_SYMBOL vmlinux 0x1e473f1c inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x1e49daa8 sg_init_one +EXPORT_SYMBOL vmlinux 0x1e5f4407 d_lookup +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e6d91b6 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x1e6e1c5f nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x1eb00ac5 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x1eb23aec in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x1eb269e2 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x1ec73d8f dquot_release +EXPORT_SYMBOL vmlinux 0x1ecb9943 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x1ecef12c ip_defrag +EXPORT_SYMBOL vmlinux 0x1ed882c2 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x1edc9598 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x1edd86e0 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x1ef01516 sock_map_fd +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f287ee2 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x1f43efa1 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x1f6c8986 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x1f70d32d dma_cache_maint +EXPORT_SYMBOL vmlinux 0x1f7cc628 mempool_create +EXPORT_SYMBOL vmlinux 0x1fa75b6b unregister_netdevice +EXPORT_SYMBOL vmlinux 0x1fae7a0b wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x1fc73734 ilookup5 +EXPORT_SYMBOL vmlinux 0x1fe3e156 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x1ff69dd8 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x1ff82655 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x200901e0 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x2014fad2 add_timer +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x2043dc1b have_submounts +EXPORT_SYMBOL vmlinux 0x2063ec70 arp_send +EXPORT_SYMBOL vmlinux 0x20a3d41d dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x20ac5b6f ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x20d799c5 netdev_state_change +EXPORT_SYMBOL vmlinux 0x2102e93a tcp_disconnect +EXPORT_SYMBOL vmlinux 0x2107aa36 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x210cc8fc icst307_khz +EXPORT_SYMBOL vmlinux 0x211331fa __divsi3 +EXPORT_SYMBOL vmlinux 0x21339f6d sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x214622e5 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21634e11 inet_put_port +EXPORT_SYMBOL vmlinux 0x21689cab read_dev_sector +EXPORT_SYMBOL vmlinux 0x218b49c2 llc_sap_open +EXPORT_SYMBOL vmlinux 0x21c00fb7 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x21d039bd tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x22351d70 sock_no_bind +EXPORT_SYMBOL vmlinux 0x223c10a2 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x224425e7 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x22524248 security_path_symlink +EXPORT_SYMBOL vmlinux 0x22616ce9 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x226824e9 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2270f014 log_wait_commit +EXPORT_SYMBOL vmlinux 0x22754d8a tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0x2284147e ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22c0fa19 journal_set_features +EXPORT_SYMBOL vmlinux 0x22dc4840 uart_match_port +EXPORT_SYMBOL vmlinux 0x22f7a680 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x23062031 fget +EXPORT_SYMBOL vmlinux 0x231cf494 up_write +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x23775bd2 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x23838107 __down_write +EXPORT_SYMBOL vmlinux 0x23a51359 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x23ab804e jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x23abbd61 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x23ac0757 dquot_claim_space +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23f284f9 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x23fea06f nonseekable_open +EXPORT_SYMBOL vmlinux 0x2412c759 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x2414896d tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x242a0fa9 blk_start_queue +EXPORT_SYMBOL vmlinux 0x24531df5 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24624544 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x2465eb2c fb_class +EXPORT_SYMBOL vmlinux 0x24a3cae2 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x24b767f6 cdev_alloc +EXPORT_SYMBOL vmlinux 0x24c9b993 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x24cc223b scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x2501039f unload_nls +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x2522ffc9 set_disk_ro +EXPORT_SYMBOL vmlinux 0x253ff599 inet_addr_type +EXPORT_SYMBOL vmlinux 0x255a223d tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x2560088c tcf_hash_check +EXPORT_SYMBOL vmlinux 0x2566ef38 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x25707429 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25a6f821 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x25ba121c mempool_resize +EXPORT_SYMBOL vmlinux 0x25c69c99 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x25de6ba9 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x25fa6f17 wait_for_completion +EXPORT_SYMBOL vmlinux 0x261c1766 __backtrace +EXPORT_SYMBOL vmlinux 0x261e6f55 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x2635452d simple_getattr +EXPORT_SYMBOL vmlinux 0x263df1b2 vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x26477c07 __vmalloc +EXPORT_SYMBOL vmlinux 0x264ba4f9 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x265c89b4 mdiobus_read +EXPORT_SYMBOL vmlinux 0x266a0311 __nla_reserve +EXPORT_SYMBOL vmlinux 0x266e4585 force_sig +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x26c53f1b xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x26c61b19 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x2709778f put_disk +EXPORT_SYMBOL vmlinux 0x270ab446 journal_stop +EXPORT_SYMBOL vmlinux 0x271b7859 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x2742a6dd blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x2765b034 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x279cc3a3 generic_read_dir +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x280e2194 dm_put_device +EXPORT_SYMBOL vmlinux 0x28118cb6 __get_user_1 +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x285cc72b elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x2879d8cc udp_poll +EXPORT_SYMBOL vmlinux 0x287d4fd7 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28ac7945 mmc_resume_host +EXPORT_SYMBOL vmlinux 0x28ef3823 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x28f8fdfc blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x29204b3f scsi_print_result +EXPORT_SYMBOL vmlinux 0x294df944 pskb_copy +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x29619648 sock_create_lite +EXPORT_SYMBOL vmlinux 0x2967b840 journal_create +EXPORT_SYMBOL vmlinux 0x29685963 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x2979a291 is_container_init +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29e0c3e3 pci_request_region +EXPORT_SYMBOL vmlinux 0x2a08edac fifo_set_limit +EXPORT_SYMBOL vmlinux 0x2a13e542 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x2a1c35eb cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a4945e9 scsi_device_get +EXPORT_SYMBOL vmlinux 0x2a566676 blk_peek_request +EXPORT_SYMBOL vmlinux 0x2a79ac13 clkdev_add +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2b0aa71c pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b1f2209 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x2b290ccf journal_flush +EXPORT_SYMBOL vmlinux 0x2b40baff __down_write_nested +EXPORT_SYMBOL vmlinux 0x2b570dc0 ida_pre_get +EXPORT_SYMBOL vmlinux 0x2b62b6e9 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0x2b6f3e74 blk_insert_request +EXPORT_SYMBOL vmlinux 0x2b7dd661 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x2b87f0d9 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb3bfe5 pci_restore_state +EXPORT_SYMBOL vmlinux 0x2bc4084d starget_for_each_device +EXPORT_SYMBOL vmlinux 0x2c4a5f68 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x2c7543ec vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x2c98de7c shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x2cbde704 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x2cc72673 __rta_fill +EXPORT_SYMBOL vmlinux 0x2cc93949 dma_alloc_writecombine +EXPORT_SYMBOL vmlinux 0x2cdcb74b security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x2d0e5d0d block_truncate_page +EXPORT_SYMBOL vmlinux 0x2d16f7a5 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x2d2f6e2c key_task_permission +EXPORT_SYMBOL vmlinux 0x2d347926 __napi_complete +EXPORT_SYMBOL vmlinux 0x2d6507b5 _find_next_zero_bit_le +EXPORT_SYMBOL vmlinux 0x2d7766ef ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2d90003b generic_write_end +EXPORT_SYMBOL vmlinux 0x2d97c675 __napi_schedule +EXPORT_SYMBOL vmlinux 0x2dadd7e9 skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x2dc97eb8 dev_get_flags +EXPORT_SYMBOL vmlinux 0x2dcb0123 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x2dd04548 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x2dd8e36f dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x2de046df scsi_execute_req +EXPORT_SYMBOL vmlinux 0x2e1ca751 clk_put +EXPORT_SYMBOL vmlinux 0x2e238745 amba_device_unregister +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e406de1 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x2e46c485 netif_rx +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e5810c6 __aeabi_unwind_cpp_pr1 +EXPORT_SYMBOL vmlinux 0x2e664fce ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x2e7ce199 get_io_context +EXPORT_SYMBOL vmlinux 0x2e99f5b2 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x2e9c2002 pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x2e9eab8f eth_validate_addr +EXPORT_SYMBOL vmlinux 0x2ebe442c ip6_route_output +EXPORT_SYMBOL vmlinux 0x2edb2034 drop_super +EXPORT_SYMBOL vmlinux 0x2f25f78b sk_run_filter +EXPORT_SYMBOL vmlinux 0x2f29e24e __scm_send +EXPORT_SYMBOL vmlinux 0x2f44f151 get_phy_device +EXPORT_SYMBOL vmlinux 0x2f4c8f7a ip6_xmit +EXPORT_SYMBOL vmlinux 0x2f60b182 skb_queue_head +EXPORT_SYMBOL vmlinux 0x2f975e92 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x2fc933e7 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL vmlinux 0x3034a6a5 inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x304e7913 simple_rename +EXPORT_SYMBOL vmlinux 0x305290c1 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x307b2952 write_cache_pages +EXPORT_SYMBOL vmlinux 0x30a06b9c key_negate_and_link +EXPORT_SYMBOL vmlinux 0x30ae1020 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x30ce03a8 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x30dd3ddc phy_connect_direct +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x312d3f4c check_disk_size_change +EXPORT_SYMBOL vmlinux 0x312da9af xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x313341a3 _set_bit_le +EXPORT_SYMBOL vmlinux 0x3144689d tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x31576270 start_tty +EXPORT_SYMBOL vmlinux 0x31772c9e __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x31ad5de9 dev_addr_del +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31b78b40 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x31d72627 locks_init_lock +EXPORT_SYMBOL vmlinux 0x323222ba mutex_unlock +EXPORT_SYMBOL vmlinux 0x3261ad2b pci_scan_slot +EXPORT_SYMBOL vmlinux 0x326df9e1 vfs_stat +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x328a05f1 strncpy +EXPORT_SYMBOL vmlinux 0x32a16c75 do_splice_to +EXPORT_SYMBOL vmlinux 0x32a3481c spi_attach_transport +EXPORT_SYMBOL vmlinux 0x32ac754a mdiobus_scan +EXPORT_SYMBOL vmlinux 0x32ce623a sg_last +EXPORT_SYMBOL vmlinux 0x333a84b3 serio_interrupt +EXPORT_SYMBOL vmlinux 0x333fca67 skb_over_panic +EXPORT_SYMBOL vmlinux 0x335d06de bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x339fab5f vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x33d20f89 blk_rq_init +EXPORT_SYMBOL vmlinux 0x33ea4285 cdrom_open +EXPORT_SYMBOL vmlinux 0x33f89ff1 abort_creds +EXPORT_SYMBOL vmlinux 0x341d6e88 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x343a0759 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x3474e23f inet_register_protosw +EXPORT_SYMBOL vmlinux 0x34796eb2 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34d22120 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x34e38bb4 vmtruncate +EXPORT_SYMBOL vmlinux 0x34ea6fc0 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x350aef90 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x353e3fa5 __get_user_4 +EXPORT_SYMBOL vmlinux 0x3557a49b serio_reconnect +EXPORT_SYMBOL vmlinux 0x35646447 block_write_end +EXPORT_SYMBOL vmlinux 0x357e2fd2 find_vma +EXPORT_SYMBOL vmlinux 0x359ccbfc filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x35abbb6a set_binfmt +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35da2e61 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x35dbf5d3 dma_free_coherent +EXPORT_SYMBOL vmlinux 0x35f5f82a jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x3611c5e2 kthread_stop +EXPORT_SYMBOL vmlinux 0x36392812 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x36653d12 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x3686ea09 spi_print_msg +EXPORT_SYMBOL vmlinux 0x36ac0c8d unregister_qdisc +EXPORT_SYMBOL vmlinux 0x36b64d1d dm_io +EXPORT_SYMBOL vmlinux 0x36bf57b8 dev_addr_add +EXPORT_SYMBOL vmlinux 0x36df8a6b i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x36e47222 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x36ebe42d kmem_cache_free +EXPORT_SYMBOL vmlinux 0x36ff54cd sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x372d3130 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x3733139a ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x374641f4 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x374aa69d nf_register_hooks +EXPORT_SYMBOL vmlinux 0x374ed073 scnprintf +EXPORT_SYMBOL vmlinux 0x376694bc sg_miter_stop +EXPORT_SYMBOL vmlinux 0x37a54a8c pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x37af6a0a abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x37f5a55f bio_map_user +EXPORT_SYMBOL vmlinux 0x3801e6bb journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x381c4bb1 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x384f55d4 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x388fc7de mdiobus_write +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38d079cf kobject_init +EXPORT_SYMBOL vmlinux 0x38e8378d pgprot_kernel +EXPORT_SYMBOL vmlinux 0x38ea019e tcp_ioctl +EXPORT_SYMBOL vmlinux 0x391ec92e flush_dcache_page +EXPORT_SYMBOL vmlinux 0x393fb391 fb_show_logo +EXPORT_SYMBOL vmlinux 0x394f206b tty_port_init +EXPORT_SYMBOL vmlinux 0x395ec247 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x396624cb ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x396ac830 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x3971be65 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x3980ee1e tty_devnum +EXPORT_SYMBOL vmlinux 0x399293d7 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x399732a8 wake_up_process +EXPORT_SYMBOL vmlinux 0x399e35fc dma_mmap_writecombine +EXPORT_SYMBOL vmlinux 0x39a06d38 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x39a0ccc8 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x39b7fe9a __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x39f3a0d5 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x3a0f7fe3 elv_add_request +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a27000c mb_cache_create +EXPORT_SYMBOL vmlinux 0x3a3acab3 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0x3a82d6d5 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x3a98947d get_phy_id +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3adc15b9 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3ae8dfa8 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x3aec0c43 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x3b0480a9 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x3b1c525f udp_proc_register +EXPORT_SYMBOL vmlinux 0x3b4fff02 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x3b536b02 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x3b816b0c setup_new_exec +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bbba499 mnt_unpin +EXPORT_SYMBOL vmlinux 0x3bc0924a udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c0da484 eth_header_cache +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c356f1e atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x3c36330f register_exec_domain +EXPORT_SYMBOL vmlinux 0x3c3e46dc tr_type_trans +EXPORT_SYMBOL vmlinux 0x3c3f3795 create_mnt_ns +EXPORT_SYMBOL vmlinux 0x3c5bc50c dmam_pool_create +EXPORT_SYMBOL vmlinux 0x3c6f022b fasync_helper +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3ca3e97c soft_cursor +EXPORT_SYMBOL vmlinux 0x3ca40b12 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cc2f841 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x3cdbc71c sget +EXPORT_SYMBOL vmlinux 0x3ce12edd cpu_user +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cedc6dd console_stop +EXPORT_SYMBOL vmlinux 0x3d3c540f elf_hwcap +EXPORT_SYMBOL vmlinux 0x3d408e6e rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x3d4450e8 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x3d5a4545 amba_driver_register +EXPORT_SYMBOL vmlinux 0x3d5d33be jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d931f95 devm_free_irq +EXPORT_SYMBOL vmlinux 0x3daa69da vfs_lstat +EXPORT_SYMBOL vmlinux 0x3db190ed generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x3db3c31f sk_alloc +EXPORT_SYMBOL vmlinux 0x3dc49937 ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x3dc743d7 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x3dd297b8 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x3de5121c neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x3df61cb9 security_path_truncate +EXPORT_SYMBOL vmlinux 0x3e0550e1 dev_driver_string +EXPORT_SYMBOL vmlinux 0x3e104219 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x3e1e457d ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x3e204377 con_is_bound +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e6caebd add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x3ea42793 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x3ed27fe1 __register_binfmt +EXPORT_SYMBOL vmlinux 0x3ed484fb tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef3fbdf alloc_disk +EXPORT_SYMBOL vmlinux 0x3f009156 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x3f0ad5b5 skb_make_writable +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f6533ca tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x3f7bb089 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x3fb2a578 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x3fbd8418 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x3fbf3514 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x3fdd8e20 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0x3febef1c ilookup +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x40123aeb idr_for_each +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x407136b1 __put_user_8 +EXPORT_SYMBOL vmlinux 0x407864b1 dma_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x407c97f5 __inet6_hash +EXPORT_SYMBOL vmlinux 0x40942784 deactivate_super +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40a6f522 __arm_ioremap +EXPORT_SYMBOL vmlinux 0x40b5375f tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x40b99dcd fb_find_mode +EXPORT_SYMBOL vmlinux 0x40d37d54 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x40f07981 __ashldi3 +EXPORT_SYMBOL vmlinux 0x41013845 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x410d7948 __alloc_skb +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x412548f8 __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x412da3c9 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x412ddc0c dcache_lock +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x4155d3e3 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x417980fd dentry_open +EXPORT_SYMBOL vmlinux 0x4185cf4b radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x418e6d5c thaw_process +EXPORT_SYMBOL vmlinux 0x41b32b7e __bforget +EXPORT_SYMBOL vmlinux 0x41c3a5e4 simple_empty +EXPORT_SYMBOL vmlinux 0x41d11386 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x41d98ecd inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x41ebde32 unregister_netdev +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x4234b832 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x4234ceb6 page_symlink +EXPORT_SYMBOL vmlinux 0x42c7c7bf genphy_update_link +EXPORT_SYMBOL vmlinux 0x42d62aec skb_trim +EXPORT_SYMBOL vmlinux 0x42d68be9 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x42e73033 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x430205aa __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x43056c4b __invalidate_device +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x435f19b6 submit_bio +EXPORT_SYMBOL vmlinux 0x437d6358 dm_table_put +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43b3bcbc generic_delete_inode +EXPORT_SYMBOL vmlinux 0x44096115 vfs_readdir +EXPORT_SYMBOL vmlinux 0x440a035c ndisc_send_skb +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x44314efb radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x443887c4 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x4458b98e page_address +EXPORT_SYMBOL vmlinux 0x44643b93 __aeabi_lmul +EXPORT_SYMBOL vmlinux 0x448425b0 get_sb_single +EXPORT_SYMBOL vmlinux 0x449d80a3 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44c214d1 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x44c57695 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x44c98872 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x44da5d0f __csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44ee296e mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x44f352d6 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x44f4909f dev_gro_receive +EXPORT_SYMBOL vmlinux 0x451f91c0 dma_alloc_coherent +EXPORT_SYMBOL vmlinux 0x452310f0 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x45237dd8 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x4545c096 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x4547cc29 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x454b5d58 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x4558eed3 __page_symlink +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45786c73 generic_show_options +EXPORT_SYMBOL vmlinux 0x458d9efd invalidate_partition +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x4594d0df ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x459fbab2 vfs_unlink +EXPORT_SYMBOL vmlinux 0x45a55ec8 __iounmap +EXPORT_SYMBOL vmlinux 0x45bda0d5 system_serial_low +EXPORT_SYMBOL vmlinux 0x46054899 jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x4615ccaf scsi_block_requests +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x462c3022 fb_get_mode +EXPORT_SYMBOL vmlinux 0x46440dff pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x46547867 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x46b05efd qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x46d3b28c __div0 +EXPORT_SYMBOL vmlinux 0x46e2096f tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x471334aa scsi_init_io +EXPORT_SYMBOL vmlinux 0x4719ba4e kfifo_free +EXPORT_SYMBOL vmlinux 0x472d2a9a radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475827fe generic_listxattr +EXPORT_SYMBOL vmlinux 0x477bdac3 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x4789ecce sg_miter_next +EXPORT_SYMBOL vmlinux 0x4799e640 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x47c0fe4e inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x47cb5256 dev_mc_add +EXPORT_SYMBOL vmlinux 0x47d24da8 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x47ef80c2 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x47f757de elf_platform +EXPORT_SYMBOL vmlinux 0x4846a3f2 __pagevec_release +EXPORT_SYMBOL vmlinux 0x484838d4 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x4850d6cb sk_receive_skb +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x489c3b71 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x48a5b067 __machine_arch_type +EXPORT_SYMBOL vmlinux 0x48b2995e wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x48bbcfc7 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x48f9f12d complete_all +EXPORT_SYMBOL vmlinux 0x4912976a invalidate_inodes +EXPORT_SYMBOL vmlinux 0x4940e352 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x49443594 clk_round_rate +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x496913c5 journal_abort +EXPORT_SYMBOL vmlinux 0x497ac380 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x49820f82 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x49bf3e82 tty_vhangup +EXPORT_SYMBOL vmlinux 0x49c5b7fe skb_gso_segment +EXPORT_SYMBOL vmlinux 0x49ce8fae nf_ct_attach +EXPORT_SYMBOL vmlinux 0x49df566e security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x49dfe423 kunmap +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x4a301cfc dm_exception_store_type_unregister +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a4c1a01 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x4a683f5b rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x4a70d029 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x4a971ec7 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x4a99b118 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x4aebfb7b kmap_high +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b14cbfd dma_unmap_sg +EXPORT_SYMBOL vmlinux 0x4b1f3cdd security_task_getsecid +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b3a627b sock_no_mmap +EXPORT_SYMBOL vmlinux 0x4b3dba9a security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x4b6a3468 arp_create +EXPORT_SYMBOL vmlinux 0x4b79975a save_time_delta +EXPORT_SYMBOL vmlinux 0x4b8edde9 complete_and_exit +EXPORT_SYMBOL vmlinux 0x4b958809 module_refcount +EXPORT_SYMBOL vmlinux 0x4b9ad1f5 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x4b9f3684 kfifo_init +EXPORT_SYMBOL vmlinux 0x4bab9321 elv_rb_add +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bf2a46c md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x4bf8bb04 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x4c0a5d4f skb_find_text +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c196302 nla_put +EXPORT_SYMBOL vmlinux 0x4c7f86c1 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x4cb3706e pci_set_mwi +EXPORT_SYMBOL vmlinux 0x4cb65cc7 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x4cb9d571 arp_find +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cd51477 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x4cdd6240 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x4ce74215 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x4ce98e3a make_EII_client +EXPORT_SYMBOL vmlinux 0x4cf16be4 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x4cfed355 generic_fillattr +EXPORT_SYMBOL vmlinux 0x4d0d163d copy_page +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4d4952ce blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x4d68d84f blk_complete_request +EXPORT_SYMBOL vmlinux 0x4d86b4ac mmc_cleanup_queue +EXPORT_SYMBOL vmlinux 0x4d97a4f4 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x4d9b3c95 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dcd0e63 vga_tryget +EXPORT_SYMBOL vmlinux 0x4ddf010e nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x4de44a99 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x4dea187f nlmsg_notify +EXPORT_SYMBOL vmlinux 0x4dec6038 memscan +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e0009da idr_get_new_above +EXPORT_SYMBOL vmlinux 0x4e05fbe5 bio_add_page +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e13f680 may_umount_tree +EXPORT_SYMBOL vmlinux 0x4e1ba144 pci_get_device +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e41c847 gen_pool_create +EXPORT_SYMBOL vmlinux 0x4e5b31f9 put_page +EXPORT_SYMBOL vmlinux 0x4e6c3bb3 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e7c04aa xfrm_lookup +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e833757 unregister_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x4e8e08c9 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x4eb8aaa8 llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0x4ecb6e8f nobh_write_end +EXPORT_SYMBOL vmlinux 0x4ee4f9d7 seq_bitmap +EXPORT_SYMBOL vmlinux 0x4f072706 set_anon_super +EXPORT_SYMBOL vmlinux 0x4f0ea0c0 up +EXPORT_SYMBOL vmlinux 0x4f13d3d5 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x4f189241 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f6c2b33 generic_mii_ioctl +EXPORT_SYMBOL vmlinux 0x4f7cce95 blkdev_put +EXPORT_SYMBOL vmlinux 0x4f7d5ef4 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x4f88b3a6 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x4f98ce42 generic_removexattr +EXPORT_SYMBOL vmlinux 0x4fbf315e blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x4fd1fe36 bdget +EXPORT_SYMBOL vmlinux 0x5003b9c3 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x504cf263 lock_super +EXPORT_SYMBOL vmlinux 0x505fb552 nf_log_register +EXPORT_SYMBOL vmlinux 0x505ff24a con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506e3dc9 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x50706237 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x5073172a sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x508ec995 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x5093fa82 _clear_bit_le +EXPORT_SYMBOL vmlinux 0x50cdb284 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x50d25992 simple_release_fs +EXPORT_SYMBOL vmlinux 0x50d4e94e dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x50f56165 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x50fbb4a9 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x5107a5c4 seq_write +EXPORT_SYMBOL vmlinux 0x510bf169 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x511510ca wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x51493d94 finish_wait +EXPORT_SYMBOL vmlinux 0x517c66f6 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x5181959a dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x518ce93e open_exec +EXPORT_SYMBOL vmlinux 0x51908eb8 __raw_writesl +EXPORT_SYMBOL vmlinux 0x51995779 ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x51abe563 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x51d3e084 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51e77c97 pfn_valid +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52136bb8 default_file_splice_read +EXPORT_SYMBOL vmlinux 0x5217c1da sock_init_data +EXPORT_SYMBOL vmlinux 0x52301ced __devm_request_region +EXPORT_SYMBOL vmlinux 0x52354a0b mutex_trylock +EXPORT_SYMBOL vmlinux 0x523c3e82 vfs_writev +EXPORT_SYMBOL vmlinux 0x526d08b2 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x528c911c del_timer +EXPORT_SYMBOL vmlinux 0x52927d4d jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52cbcfad __sk_dst_check +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52e11bcd wireless_send_event +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x52f2f71e bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x5307f682 vm_insert_page +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x5327027b block_read_full_page +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x53754f04 bio_endio +EXPORT_SYMBOL vmlinux 0x537bf1e7 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x53881f75 pci_request_regions +EXPORT_SYMBOL vmlinux 0x539accc0 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x53b32e55 sock_create +EXPORT_SYMBOL vmlinux 0x53b4a5bf remove_inode_hash +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x5415b3ba dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x541ceebf uart_suspend_port +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x543b26fe __find_get_block +EXPORT_SYMBOL vmlinux 0x545dad2b setup_arg_pages +EXPORT_SYMBOL vmlinux 0x54618b0e pci_target_state +EXPORT_SYMBOL vmlinux 0x54957f19 kill_pgrp +EXPORT_SYMBOL vmlinux 0x54a4a86b journal_extend +EXPORT_SYMBOL vmlinux 0x54a5b496 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x54a815b5 uart_resume_port +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54d42936 seq_printf +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54f13502 elevator_init +EXPORT_SYMBOL vmlinux 0x54f48a73 do_truncate +EXPORT_SYMBOL vmlinux 0x54f86bf3 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x5504020e ndisc_build_skb +EXPORT_SYMBOL vmlinux 0x55538e3e __free_pages +EXPORT_SYMBOL vmlinux 0x555e2f68 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x556643e3 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0x5582affd xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x559291b9 register_md_personality +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55ad2daa tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x55b362c5 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x55c7f367 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x56497c4e dev_trans_start +EXPORT_SYMBOL vmlinux 0x5658a7b4 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x566527ce netif_device_attach +EXPORT_SYMBOL vmlinux 0x5668caf0 icst307_khz_to_vco +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL vmlinux 0x56f3e62c neigh_compat_output +EXPORT_SYMBOL vmlinux 0x56ff54be inet_frag_find +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x573d7992 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x5747066c con_copy_unimap +EXPORT_SYMBOL vmlinux 0x57626711 blk_free_tags +EXPORT_SYMBOL vmlinux 0x576f0797 contig_page_data +EXPORT_SYMBOL vmlinux 0x57a6504e vsnprintf +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57e2add0 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x57e3ec53 nla_append +EXPORT_SYMBOL vmlinux 0x581ddfe7 mdiobus_free +EXPORT_SYMBOL vmlinux 0x58222100 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x582a89d4 pci_find_device +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x58487570 block_sync_page +EXPORT_SYMBOL vmlinux 0x584d3022 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x58a8ec51 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x58b48438 cfi_fixup +EXPORT_SYMBOL vmlinux 0x59115883 skb_insert +EXPORT_SYMBOL vmlinux 0x591363e7 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x594e1317 __modsi3 +EXPORT_SYMBOL vmlinux 0x595ba48f __netif_schedule +EXPORT_SYMBOL vmlinux 0x59c0f480 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d69b70 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x59d7e2da d_genocide +EXPORT_SYMBOL vmlinux 0x59d8223a ioport_resource +EXPORT_SYMBOL vmlinux 0x59d9569a truncate_pagecache +EXPORT_SYMBOL vmlinux 0x59e5070d __do_div64 +EXPORT_SYMBOL vmlinux 0x59e9346d inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x59fb23d9 vfs_readv +EXPORT_SYMBOL vmlinux 0x5a0e1b6b scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x5a2588f5 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x5a6b2e81 dquot_free_space +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a771e60 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x5a7c2913 slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x5a8af3db read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x5a9bad01 block_prepare_write +EXPORT_SYMBOL vmlinux 0x5a9dde71 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x5accbf47 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x5adfca51 udp_disconnect +EXPORT_SYMBOL vmlinux 0x5afed8b4 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b23c17b notify_change +EXPORT_SYMBOL vmlinux 0x5b28f379 __blk_end_request +EXPORT_SYMBOL vmlinux 0x5b75755f test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x5b913ff6 slow_work_register_user +EXPORT_SYMBOL vmlinux 0x5c13b3e1 bioset_free +EXPORT_SYMBOL vmlinux 0x5c257764 sk_common_release +EXPORT_SYMBOL vmlinux 0x5c31ee62 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x5c580e2a genl_register_ops +EXPORT_SYMBOL vmlinux 0x5c673bc8 tty_mutex +EXPORT_SYMBOL vmlinux 0x5c6cf7b6 sk_dst_check +EXPORT_SYMBOL vmlinux 0x5c7c7f44 i2c_use_client +EXPORT_SYMBOL vmlinux 0x5c902c40 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x5c9284a0 processor_id +EXPORT_SYMBOL vmlinux 0x5ca7537d __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x5cbb4453 make_bad_inode +EXPORT_SYMBOL vmlinux 0x5ce22d5e mmc_release_host +EXPORT_SYMBOL vmlinux 0x5ce86387 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x5d01b47f sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d195ba9 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x5d3f039d gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x5d4b1abc tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x5d4df10b sg_miter_start +EXPORT_SYMBOL vmlinux 0x5d5e8772 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x5d67c5fe generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x5d8f441d __nla_put +EXPORT_SYMBOL vmlinux 0x5dae54b4 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x5db60ba4 block_commit_write +EXPORT_SYMBOL vmlinux 0x5dbee1ee d_obtain_alias +EXPORT_SYMBOL vmlinux 0x5dec4909 nf_afinfo +EXPORT_SYMBOL vmlinux 0x5e29c721 simple_sync_file +EXPORT_SYMBOL vmlinux 0x5e3979ab inet_ioctl +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5eb3a3fd blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x5ebb56fb down_read +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ed40361 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x5ed4b61b pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5f05ba2f pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x5f1c09fd key_validate +EXPORT_SYMBOL vmlinux 0x5f686b2a flush_old_exec +EXPORT_SYMBOL vmlinux 0x5f754e5a memset +EXPORT_SYMBOL vmlinux 0x5f7d01f0 pcim_iomap +EXPORT_SYMBOL vmlinux 0x5febdbf2 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0x60019e09 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x6010b8d1 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x601fe0c4 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x6047c4da gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x6051e924 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x609c2aa5 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60a47f72 pci_release_region +EXPORT_SYMBOL vmlinux 0x60a4efe2 ida_get_new +EXPORT_SYMBOL vmlinux 0x60a8051f set_bh_page +EXPORT_SYMBOL vmlinux 0x60b33c8e iget_locked +EXPORT_SYMBOL vmlinux 0x60e01104 restore_time_delta +EXPORT_SYMBOL vmlinux 0x6123219a dev_remove_pack +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x612d9df4 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x612ec6df key_put +EXPORT_SYMBOL vmlinux 0x615c6c78 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x616f6bf6 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x617e67d0 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x6192692c phy_register_fixup +EXPORT_SYMBOL vmlinux 0x6194a369 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0x61971697 tcp_child_process +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61cc8535 submit_bh +EXPORT_SYMBOL vmlinux 0x62001207 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x6205892c mmc_register_driver +EXPORT_SYMBOL vmlinux 0x62330b0c seq_release_private +EXPORT_SYMBOL vmlinux 0x62482df2 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x6253a27e init_buffer +EXPORT_SYMBOL vmlinux 0x625e70d9 file_update_time +EXPORT_SYMBOL vmlinux 0x62734416 pci_match_id +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x6279bb50 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x62809310 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62870841 security_path_link +EXPORT_SYMBOL vmlinux 0x62accafb ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x62b37737 key_link +EXPORT_SYMBOL vmlinux 0x62cc569e cpu_present_mask +EXPORT_SYMBOL vmlinux 0x62cec5f4 thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0x62f37d6b vfs_quota_on +EXPORT_SYMBOL vmlinux 0x632fcf17 register_quota_format +EXPORT_SYMBOL vmlinux 0x63481d6b dcache_dir_close +EXPORT_SYMBOL vmlinux 0x63d5ef1d dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63efc536 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x640a7078 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x640afe3e tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x6452354c request_key +EXPORT_SYMBOL vmlinux 0x6457112f inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64c6b89d simple_dir_operations +EXPORT_SYMBOL vmlinux 0x64ca9234 phy_device_create +EXPORT_SYMBOL vmlinux 0x64d4cbd0 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65257382 phy_detach +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x65509e34 napi_get_frags +EXPORT_SYMBOL vmlinux 0x6558edec vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x65748024 open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x657da1e9 pipe_to_file +EXPORT_SYMBOL vmlinux 0x65cfa40f scsi_finish_command +EXPORT_SYMBOL vmlinux 0x65d57f7c netif_device_detach +EXPORT_SYMBOL vmlinux 0x65d9b735 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x65f19deb simple_transaction_get +EXPORT_SYMBOL vmlinux 0x65f8aa18 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x65fbcf47 cdev_init +EXPORT_SYMBOL vmlinux 0x660d3d93 d_add_ci +EXPORT_SYMBOL vmlinux 0x661fc797 vfs_getattr +EXPORT_SYMBOL vmlinux 0x664b5420 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x6662cc74 __ps2_command +EXPORT_SYMBOL vmlinux 0x666a586d inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x6672ec0a inode_init_once +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x668fc90d clk_enable +EXPORT_SYMBOL vmlinux 0x66bb63ca kobject_del +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x67107ded ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x6734cb3a alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x6756e909 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x676cf925 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x6772d0bf mpage_writepages +EXPORT_SYMBOL vmlinux 0x6782d11b page_follow_link_light +EXPORT_SYMBOL vmlinux 0x67a080f8 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x67a0cffe per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67be1d3d cpu_active_mask +EXPORT_SYMBOL vmlinux 0x67c739b1 skb_tx_hash +EXPORT_SYMBOL vmlinux 0x67cf1171 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x67d79a55 lro_flush_all +EXPORT_SYMBOL vmlinux 0x67ebaaa9 do_SAK +EXPORT_SYMBOL vmlinux 0x67f2cee5 udp_table +EXPORT_SYMBOL vmlinux 0x67f6113d bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x680964ea dqput +EXPORT_SYMBOL vmlinux 0x6839afc3 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x6859a55a cad_pid +EXPORT_SYMBOL vmlinux 0x687812b6 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x6898a756 sg_init_table +EXPORT_SYMBOL vmlinux 0x689aa76c unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x68fcf437 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x690198e6 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x6901d0fb dev_change_flags +EXPORT_SYMBOL vmlinux 0x695eb614 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x69700446 iget_failed +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x69718ff4 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x697dc61c icmpv6_send +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x69827e26 kernel_connect +EXPORT_SYMBOL vmlinux 0x69867008 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a30c5a user_path_at +EXPORT_SYMBOL vmlinux 0x69af2327 idr_init +EXPORT_SYMBOL vmlinux 0x69bf3b29 fb_pan_display +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69fa664b rfkill_register +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a49a3e9 kfree_skb +EXPORT_SYMBOL vmlinux 0x6a4e94f9 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x6a5034f4 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x6a7113c3 read_cache_page +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a9b718d skb_queue_tail +EXPORT_SYMBOL vmlinux 0x6aba36b5 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x6abf372c dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0x6ac45c28 __up_write +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ae597cd filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b28395b sysctl_jiffies +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b468ca9 unregister_8022_client +EXPORT_SYMBOL vmlinux 0x6b85793d register_sysrq_key +EXPORT_SYMBOL vmlinux 0x6b8cb30e seq_read +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6be330ad generic_file_open +EXPORT_SYMBOL vmlinux 0x6c07fcf7 __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c2e1707 keyring_clear +EXPORT_SYMBOL vmlinux 0x6c36a5c1 __mutex_init +EXPORT_SYMBOL vmlinux 0x6c4018cd brioctl_set +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c83208a otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x6c930c20 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x6cc700f7 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6cecc546 generic_make_request +EXPORT_SYMBOL vmlinux 0x6ced2625 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x6d15be3d filp_open +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d288375 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d314457 poll_initwait +EXPORT_SYMBOL vmlinux 0x6d32deb3 inode_setattr +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d367403 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x6d4fbcf7 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x6d662533 _find_first_bit_le +EXPORT_SYMBOL vmlinux 0x6d6b2e9e dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6db7702e scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x6dbd2cf2 tcf_register_action +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6e08955b scsi_remove_target +EXPORT_SYMBOL vmlinux 0x6e120044 sock_no_poll +EXPORT_SYMBOL vmlinux 0x6e1f0131 find_lock_page +EXPORT_SYMBOL vmlinux 0x6e2ef342 llc_add_pack +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e80afcd blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x6e9644a9 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb09b55 mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x6eb0a70b sk_stop_timer +EXPORT_SYMBOL vmlinux 0x6edf52c3 __dst_free +EXPORT_SYMBOL vmlinux 0x6eef3412 d_validate +EXPORT_SYMBOL vmlinux 0x6efb255a dm_dirty_log_create +EXPORT_SYMBOL vmlinux 0x6f337fe5 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x6f64622b blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x6f7de2d3 register_con_driver +EXPORT_SYMBOL vmlinux 0x6f9f07c6 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x6fb2ad3d per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fe10340 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x6ff545e6 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x7006693b nobh_writepage +EXPORT_SYMBOL vmlinux 0x701d0ebd snprintf +EXPORT_SYMBOL vmlinux 0x7023e1b1 tty_shutdown +EXPORT_SYMBOL vmlinux 0x7032c355 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7061e288 input_release_device +EXPORT_SYMBOL vmlinux 0x7075b446 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x70b4625f blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70bcd935 inet_listen +EXPORT_SYMBOL vmlinux 0x70e71a41 free_buffer_head +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x713119f2 filemap_flush +EXPORT_SYMBOL vmlinux 0x71338386 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x7137d55e ip_getsockopt +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x718ecbd8 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x719076bf mapping_tagged +EXPORT_SYMBOL vmlinux 0x719b8a06 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71c90087 memcmp +EXPORT_SYMBOL vmlinux 0x71c9a8a9 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x71e2c598 key_type_keyring +EXPORT_SYMBOL vmlinux 0x7206d597 do_munmap +EXPORT_SYMBOL vmlinux 0x7240f79b bio_sector_offset +EXPORT_SYMBOL vmlinux 0x72432eb3 security_inode_permission +EXPORT_SYMBOL vmlinux 0x72abd95c arp_broken_ops +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72d5af61 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72fb4985 input_register_handler +EXPORT_SYMBOL vmlinux 0x730053ab bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x73393056 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x73523681 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x7362dd1e vfs_fstat +EXPORT_SYMBOL vmlinux 0x738005ca mii_check_link +EXPORT_SYMBOL vmlinux 0x73836339 phy_start +EXPORT_SYMBOL vmlinux 0x7388057a commit_creds +EXPORT_SYMBOL vmlinux 0x7391e6f7 md_check_recovery +EXPORT_SYMBOL vmlinux 0x73925ee7 lease_modify +EXPORT_SYMBOL vmlinux 0x739ae58a framebuffer_release +EXPORT_SYMBOL vmlinux 0x739e3f37 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0x73a02ce7 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x73ac0555 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x73b1b35e fsync_bdev +EXPORT_SYMBOL vmlinux 0x73bb68ba pci_reenable_device +EXPORT_SYMBOL vmlinux 0x73c97f58 clk_set_rate +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x73e7f195 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x73eb42ce vm_map_ram +EXPORT_SYMBOL vmlinux 0x73f280d5 dquot_commit +EXPORT_SYMBOL vmlinux 0x7402ae2e nf_reinject +EXPORT_SYMBOL vmlinux 0x74040ccb phy_attach_direct +EXPORT_SYMBOL vmlinux 0x7411645c blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7452799e kobject_put +EXPORT_SYMBOL vmlinux 0x746002a9 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x7461c602 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74b688dd simple_readpage +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74c1c905 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x74c3c28a dst_release +EXPORT_SYMBOL vmlinux 0x74ca1564 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x75127278 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x751350ca eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x75a3cbc4 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x75f03010 sk_stream_error +EXPORT_SYMBOL vmlinux 0x75fee7fd __raw_writesb +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b2465 icst307_ps_to_vco +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x76102753 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x761590a3 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x76493ba2 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x765f75fb pgprot_user +EXPORT_SYMBOL vmlinux 0x76700b1c gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x76759fb6 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x767869bf eth_header_parse +EXPORT_SYMBOL vmlinux 0x76881360 leds_event +EXPORT_SYMBOL vmlinux 0x76aa425b tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x76bb13d4 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76cbf2cd __blk_run_queue +EXPORT_SYMBOL vmlinux 0x76cf47f6 __aeabi_llsl +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76dd3d7e dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x77336bb6 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x774bc66b vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x77666e8a bio_put +EXPORT_SYMBOL vmlinux 0x77ba254a kset_register +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x780afe50 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x78253fcf xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x78308532 write_inode_now +EXPORT_SYMBOL vmlinux 0x783484cf blk_run_queue +EXPORT_SYMBOL vmlinux 0x7841a43f ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x78438d6e sock_setsockopt +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x78588c6d noop_qdisc +EXPORT_SYMBOL vmlinux 0x7864573e pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x788fe103 iomem_resource +EXPORT_SYMBOL vmlinux 0x78a1a7d0 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x78ae1ec3 generic_readlink +EXPORT_SYMBOL vmlinux 0x78bcab52 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x78bf1068 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0x78dc5cbc nf_log_packet +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x79005b0b jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x7939b664 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x793ab729 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x794487ee disable_hlt +EXPORT_SYMBOL vmlinux 0x79600d4a wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x796fbc96 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x798b5c31 kill_litter_super +EXPORT_SYMBOL vmlinux 0x7997f70a handle_sysrq +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79b3d849 netlink_dump_start +EXPORT_SYMBOL vmlinux 0x79b477d6 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x79b77124 mnt_pin +EXPORT_SYMBOL vmlinux 0x7a283681 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a34af2b unbind_con_driver +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a65c7c8 input_unregister_device +EXPORT_SYMBOL vmlinux 0x7a91726b clkdev_alloc +EXPORT_SYMBOL vmlinux 0x7ac45cbe tcf_action_exec +EXPORT_SYMBOL vmlinux 0x7b1222b5 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x7b293897 blk_make_request +EXPORT_SYMBOL vmlinux 0x7b9d9cc4 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x7bb4bd7f ppp_input_error +EXPORT_SYMBOL vmlinux 0x7bd14627 phy_device_register +EXPORT_SYMBOL vmlinux 0x7bfc1b70 find_get_page +EXPORT_SYMBOL vmlinux 0x7c0c51f8 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x7c21c1a4 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x7c3f32a7 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x7c474552 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x7c4806a0 unregister_console +EXPORT_SYMBOL vmlinux 0x7c4f15d0 init_file +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c8ff673 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9725c1 mpage_readpage +EXPORT_SYMBOL vmlinux 0x7c972f48 netlink_unicast +EXPORT_SYMBOL vmlinux 0x7cb083c6 do_splice_from +EXPORT_SYMBOL vmlinux 0x7cc035a7 __ucmpdi2 +EXPORT_SYMBOL vmlinux 0x7ce4fe1b destroy_EII_client +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d3011c7 open_by_devnum +EXPORT_SYMBOL vmlinux 0x7d3ba6d7 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x7d3e28e7 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0x7d6a99b6 bio_unmap_user +EXPORT_SYMBOL vmlinux 0x7d92654e lookup_hash +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd57aa5 skb_recycle_check +EXPORT_SYMBOL vmlinux 0x7df8c4dd amba_device_register +EXPORT_SYMBOL vmlinux 0x7e1ae9bc key_alloc +EXPORT_SYMBOL vmlinux 0x7e4dc403 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x7e5f9a4b per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x7e6ab857 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x7e794aaa sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x7e79ec63 rtnl_notify +EXPORT_SYMBOL vmlinux 0x7e932d05 dma_map_sg +EXPORT_SYMBOL vmlinux 0x7e97ca8b kernel_bind +EXPORT_SYMBOL vmlinux 0x7e9ebb05 kernel_thread +EXPORT_SYMBOL vmlinux 0x7ebf5b8e key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x7ec5196b netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x7ed53b3d pci_pme_capable +EXPORT_SYMBOL vmlinux 0x7ed58120 path_put +EXPORT_SYMBOL vmlinux 0x7ef9bbeb netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x7f020d01 find_inode_number +EXPORT_SYMBOL vmlinux 0x7f131169 scsi_register +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f2cdc34 __kfree_skb +EXPORT_SYMBOL vmlinux 0x7f35721f pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x7f35e849 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x7f63b31e _memcpy_toio +EXPORT_SYMBOL vmlinux 0x7f7fb961 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x7fa672fe scsi_scan_host +EXPORT_SYMBOL vmlinux 0x7fbb0211 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x7ffd45da tty_register_device +EXPORT_SYMBOL vmlinux 0x80028ff7 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x800e4ffa __muldi3 +EXPORT_SYMBOL vmlinux 0x8037d853 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x804b4c79 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x8063f83d radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x8065790e kill_anon_super +EXPORT_SYMBOL vmlinux 0x8081bb6b generic_setlease +EXPORT_SYMBOL vmlinux 0x8085c7b1 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x809e1828 seq_open_private +EXPORT_SYMBOL vmlinux 0x80e0c557 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x80ef4ead ppp_register_channel +EXPORT_SYMBOL vmlinux 0x811ac567 textsearch_register +EXPORT_SYMBOL vmlinux 0x813a2169 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x8142a764 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x8145e0dd bio_copy_kern +EXPORT_SYMBOL vmlinux 0x81495e30 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x81799cee vscnprintf +EXPORT_SYMBOL vmlinux 0x8184bae0 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x8187776b mdio_bus_type +EXPORT_SYMBOL vmlinux 0x8190032f tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x81d0b37d pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x81e423c3 skb_split +EXPORT_SYMBOL vmlinux 0x81fb2c88 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x820eedbd dm_exception_store_create +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x825a7311 journal_restart +EXPORT_SYMBOL vmlinux 0x8262f64b tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82e5a238 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x831803b3 unlock_rename +EXPORT_SYMBOL vmlinux 0x8320bea8 __umodsi3 +EXPORT_SYMBOL vmlinux 0x832ae255 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x83315a7b dev_load +EXPORT_SYMBOL vmlinux 0x8348da19 __bread +EXPORT_SYMBOL vmlinux 0x835d707e __getblk +EXPORT_SYMBOL vmlinux 0x8363ac85 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x836d6eca inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x8383ad54 genphy_read_status +EXPORT_SYMBOL vmlinux 0x83960e18 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x83985192 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83b0d44a phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x83d4054f sock_wake_async +EXPORT_SYMBOL vmlinux 0x83e1f8d7 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x83ef3e58 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x84001081 slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x84263d04 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x845ab3ed sock_create_kern +EXPORT_SYMBOL vmlinux 0x846c5be5 clk_disable +EXPORT_SYMBOL vmlinux 0x8471b714 search_binary_handler +EXPORT_SYMBOL vmlinux 0x8473341d ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x84a1da18 journal_dirty_data +EXPORT_SYMBOL vmlinux 0x84a85550 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x84b183ae strncmp +EXPORT_SYMBOL vmlinux 0x84bd5c5b pci_find_bus +EXPORT_SYMBOL vmlinux 0x84ef4fb4 pipe_unlock +EXPORT_SYMBOL vmlinux 0x850ff887 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x85737995 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x857b49e5 module_layout +EXPORT_SYMBOL vmlinux 0x8591cb02 input_get_keycode +EXPORT_SYMBOL vmlinux 0x85a6daf1 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x85ac7f10 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x85c5acf6 bdi_register +EXPORT_SYMBOL vmlinux 0x85df0ea8 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x85eca37f xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x86227782 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x865c22bb xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x86760193 vfs_follow_link +EXPORT_SYMBOL vmlinux 0x868273db generic_writepages +EXPORT_SYMBOL vmlinux 0x86867e04 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x8690d879 pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x870cac9e iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x871306da jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x87198f96 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x871cbbbe scsi_prep_return +EXPORT_SYMBOL vmlinux 0x872927b8 down_timeout +EXPORT_SYMBOL vmlinux 0x874bf13b f_setown +EXPORT_SYMBOL vmlinux 0x87573ebd simple_write_begin +EXPORT_SYMBOL vmlinux 0x877525e1 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x877d41c9 register_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87997593 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x879dbf76 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x87ae33f3 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x87b312f0 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x87d7c073 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x87ed609d skb_checksum +EXPORT_SYMBOL vmlinux 0x87f438a2 sysctl_intvec +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x8817334f scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x881893e8 neigh_table_init +EXPORT_SYMBOL vmlinux 0x882fe77c add_disk +EXPORT_SYMBOL vmlinux 0x885438b0 pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x8866c3cf scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x887558b7 dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x88a0b530 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x88a648ca km_state_expired +EXPORT_SYMBOL vmlinux 0x88b224f5 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x88cdeb7a get_write_access +EXPORT_SYMBOL vmlinux 0x88d7aa6b scm_fp_dup +EXPORT_SYMBOL vmlinux 0x88e39e5a nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x88e5a3a9 kthread_bind +EXPORT_SYMBOL vmlinux 0x89166bea skb_dequeue +EXPORT_SYMBOL vmlinux 0x891e32b8 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x8927cddd thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x893fa541 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x897f6d26 lock_fb_info +EXPORT_SYMBOL vmlinux 0x89ba4d7f bdev_read_only +EXPORT_SYMBOL vmlinux 0x89c8f0b3 blkdev_get +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89dbabc6 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a2dd4da lock_rename +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a4fa83b __aeabi_llsr +EXPORT_SYMBOL vmlinux 0x8a53700c ppp_input +EXPORT_SYMBOL vmlinux 0x8a57fc21 registered_fb +EXPORT_SYMBOL vmlinux 0x8a73d2aa otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a7f3f95 simple_link +EXPORT_SYMBOL vmlinux 0x8a937cdb skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8ab9eecf blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x8ad2d806 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x8ae77528 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x8b0f711a cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x8b174130 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x8b264bfa xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x8b287cbd netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x8b339bce inet_frags_init +EXPORT_SYMBOL vmlinux 0x8b49863f inet_frag_kill +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b61d001 ps2_init +EXPORT_SYMBOL vmlinux 0x8b946d69 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x8b9a4149 ida_destroy +EXPORT_SYMBOL vmlinux 0x8ba9e845 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x8bc13d9f xrlim_allow +EXPORT_SYMBOL vmlinux 0x8bd12c63 path_lookup +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8beca404 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x8becf737 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x8c058d08 bdget_disk +EXPORT_SYMBOL vmlinux 0x8c0e4611 vfs_write +EXPORT_SYMBOL vmlinux 0x8c4194e0 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x8c5428ee fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x8c68340e i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x8c7903a4 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x8c7bc348 ida_remove +EXPORT_SYMBOL vmlinux 0x8cd43b28 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x8cd63fa2 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x8cdd39bb serio_unregister_port +EXPORT_SYMBOL vmlinux 0x8cfb268d put_tty_driver +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d5642fc wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x8d6f81b4 __div64_32 +EXPORT_SYMBOL vmlinux 0x8d7f998c generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x8dadac9a ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x8dcb5c27 idr_remove +EXPORT_SYMBOL vmlinux 0x8de011a0 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x8deeba6c pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e1db5c7 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x8e22d878 simple_fsync +EXPORT_SYMBOL vmlinux 0x8e259fe7 d_move +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e426a7f mod_timer_pending +EXPORT_SYMBOL vmlinux 0x8e452f38 bio_copy_user +EXPORT_SYMBOL vmlinux 0x8e60a827 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x8e65b490 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x8e6bb29f fb_set_var +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e823d15 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x8ea6e5ce blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x8eaff542 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x8ee1aab2 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8ef4c3a1 dquot_transfer +EXPORT_SYMBOL vmlinux 0x8effb858 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x8f07d8ca __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8f39ac3b xfrm_init_state +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f69a242 __timecompare_update +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f76ccc3 pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x8f92edf1 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x8f942d39 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x8f9b86b2 kfifo_alloc +EXPORT_SYMBOL vmlinux 0x8fd177ef hippi_change_mtu +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x90292872 iput +EXPORT_SYMBOL vmlinux 0x905330b4 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x9063e02d scsi_print_command +EXPORT_SYMBOL vmlinux 0x9068c4b4 i2c_transfer +EXPORT_SYMBOL vmlinux 0x909a2bba skb_append +EXPORT_SYMBOL vmlinux 0x91009452 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x91301fe5 dquot_alloc +EXPORT_SYMBOL vmlinux 0x9141bcd7 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x91598b69 unregister_key_type +EXPORT_SYMBOL vmlinux 0x915e4a12 complete_request_key +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x918b5d94 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x919029aa __readwrite_bug +EXPORT_SYMBOL vmlinux 0x91ba5c4d nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x91d47f2e __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x91e0387b blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x91ebfcf6 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x91fd2c5e send_sig +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x925cfa59 dst_destroy +EXPORT_SYMBOL vmlinux 0x926401f2 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x9272a1e0 aio_complete +EXPORT_SYMBOL vmlinux 0x929eecac __strncpy_from_user +EXPORT_SYMBOL vmlinux 0x92a7c841 spi_schedule_dv_device +EXPORT_SYMBOL vmlinux 0x92c3b619 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x92eb4f43 security_path_unlink +EXPORT_SYMBOL vmlinux 0x92facc1d i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x9320b5ef generic_file_mmap +EXPORT_SYMBOL vmlinux 0x9353ff68 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x936bbf48 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x937fd3a0 amba_driver_unregister +EXPORT_SYMBOL vmlinux 0x93961cad blk_integrity_register +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93a9957f skb_put +EXPORT_SYMBOL vmlinux 0x93e22074 update_region +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x940cff2e invalidate_bdev +EXPORT_SYMBOL vmlinux 0x944832d6 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x9456fff2 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x9458ba26 backlight_force_update +EXPORT_SYMBOL vmlinux 0x9458f496 sk_wait_data +EXPORT_SYMBOL vmlinux 0x945f0b47 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x9487bbe1 dma_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x949dfb62 llc_sap_close +EXPORT_SYMBOL vmlinux 0x94b7ab4a tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x94e9f835 thaw_bdev +EXPORT_SYMBOL vmlinux 0x94f28052 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x9501d078 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x95087b22 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x95203708 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x9528ce42 __devm_release_region +EXPORT_SYMBOL vmlinux 0x952ad0aa tty_port_hangup +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x95499138 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x955a55b3 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x95caa757 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x95d3708f bdput +EXPORT_SYMBOL vmlinux 0x95dbe078 __get_user_2 +EXPORT_SYMBOL vmlinux 0x95e30c23 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x95f214e8 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x95f37075 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x961df12a inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x962bb3fb inode_init_always +EXPORT_SYMBOL vmlinux 0x964b4fa0 blk_plug_device +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96df88b2 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x97214ac2 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x9722b11e file_permission +EXPORT_SYMBOL vmlinux 0x97255bdf strlen +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x9774bc12 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x97a04163 set_groups +EXPORT_SYMBOL vmlinux 0x97b75428 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x97ee384b alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x98082893 __copy_to_user +EXPORT_SYMBOL vmlinux 0x980e9d6d loop_register_transfer +EXPORT_SYMBOL vmlinux 0x9860ddee d_alloc_name +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x98a31588 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x98e1cea2 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x98f6a1c6 blk_register_region +EXPORT_SYMBOL vmlinux 0x9901feec inode_set_bytes +EXPORT_SYMBOL vmlinux 0x992855b3 posix_test_lock +EXPORT_SYMBOL vmlinux 0x9928c603 d_find_alias +EXPORT_SYMBOL vmlinux 0x99504129 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x99747417 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x998235dd scsi_register_interface +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x9996fb37 km_state_notify +EXPORT_SYMBOL vmlinux 0x999c3148 __raw_readsb +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99a37f89 journal_revoke +EXPORT_SYMBOL vmlinux 0x99bb8806 memmove +EXPORT_SYMBOL vmlinux 0x99be2982 I_BDEV +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a1ff34b __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x9a2352f8 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x9a39f4f5 inet_shutdown +EXPORT_SYMBOL vmlinux 0x9a52c798 kset_unregister +EXPORT_SYMBOL vmlinux 0x9a566f49 set_user_nice +EXPORT_SYMBOL vmlinux 0x9a5cee16 netpoll_poll +EXPORT_SYMBOL vmlinux 0x9b069050 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b5e970e dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b7b74bb bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x9b831d9a md_integrity_register +EXPORT_SYMBOL vmlinux 0x9b91d7ea tty_check_change +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bce482f __release_region +EXPORT_SYMBOL vmlinux 0x9bd2094c slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0x9bd98b18 timecompare_offset +EXPORT_SYMBOL vmlinux 0x9bde38cd cdev_index +EXPORT_SYMBOL vmlinux 0x9bef0240 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c2571f4 __down_read +EXPORT_SYMBOL vmlinux 0x9c3c32cf journal_init_dev +EXPORT_SYMBOL vmlinux 0x9c3c3d34 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x9c40dbae skb_dma_map +EXPORT_SYMBOL vmlinux 0x9c7077bd enable_hlt +EXPORT_SYMBOL vmlinux 0x9c9ae8a7 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cbfc5d7 mii_check_media +EXPORT_SYMBOL vmlinux 0x9ccb7990 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x9cd16800 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x9cd47144 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x9ce5c7bd ip_setsockopt +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d026739 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x9d03b366 names_cachep +EXPORT_SYMBOL vmlinux 0x9d366467 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d51ac19 register_netdevice +EXPORT_SYMBOL vmlinux 0x9d669763 memcpy +EXPORT_SYMBOL vmlinux 0x9da903cc dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x9dc3fcb9 register_filesystem +EXPORT_SYMBOL vmlinux 0x9deca835 netlink_ack +EXPORT_SYMBOL vmlinux 0x9dfb17af override_creds +EXPORT_SYMBOL vmlinux 0x9e08ba42 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x9e120414 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e2259a3 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x9e25e73e neigh_for_each +EXPORT_SYMBOL vmlinux 0x9e660938 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x9e6e3e40 __bio_clone +EXPORT_SYMBOL vmlinux 0x9e7adc7b ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e81dc8a fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x9e99d9f3 scsi_host_put +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0a179 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x9eb4703d xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f164a2f mmc_add_host +EXPORT_SYMBOL vmlinux 0x9f295cfb directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f2e51c5 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x9f424093 free_user_ns +EXPORT_SYMBOL vmlinux 0x9f4e95e0 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x9f72c2eb init_timer_key +EXPORT_SYMBOL vmlinux 0x9f73a97e d_path +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa325c0 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fdd247e flush_signals +EXPORT_SYMBOL vmlinux 0x9fe2ad4a otg_get_transceiver +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa03ecb43 __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa05ff6a9 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0xa062a970 unregister_snap_client +EXPORT_SYMBOL vmlinux 0xa07a8d22 sleep_on +EXPORT_SYMBOL vmlinux 0xa07ac24b irq_stat +EXPORT_SYMBOL vmlinux 0xa080d305 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0xa08f970a sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xa09f0504 aio_put_req +EXPORT_SYMBOL vmlinux 0xa0aaddf5 file_remove_suid +EXPORT_SYMBOL vmlinux 0xa0ae4f59 elv_rb_find +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b20b4f thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0f0cd2c do_map_probe +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa10b27bf dev_set_mtu +EXPORT_SYMBOL vmlinux 0xa1123240 cont_write_begin +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa1224fb5 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0xa13685f1 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa141df92 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0xa19a7733 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0xa19ca792 __kfifo_put +EXPORT_SYMBOL vmlinux 0xa1b15d9e inet_stream_ops +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1e52fd4 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xa1e8d89e d_prune_aliases +EXPORT_SYMBOL vmlinux 0xa1f4e621 ip_ct_attach +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa2183851 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0xa218bf61 complete +EXPORT_SYMBOL vmlinux 0xa240245d phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0xa25d8734 write_one_page +EXPORT_SYMBOL vmlinux 0xa26a1c72 ps2_end_command +EXPORT_SYMBOL vmlinux 0xa2747ad1 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xa2756f2f mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0xa28868dc pci_set_master +EXPORT_SYMBOL vmlinux 0xa2900c9a kunmap_high +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2bf5e9e backlight_device_register +EXPORT_SYMBOL vmlinux 0xa2d28952 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa336ca70 posix_acl_permission +EXPORT_SYMBOL vmlinux 0xa3414f3d qdisc_reset +EXPORT_SYMBOL vmlinux 0xa342f734 hippi_type_trans +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3d352f7 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xa3ec6c5f dquot_acquire +EXPORT_SYMBOL vmlinux 0xa3fb5055 take_over_console +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa44815aa dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0xa44f78d5 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0xa4dd8ec8 pci_dev_get +EXPORT_SYMBOL vmlinux 0xa4dfa98b tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xa519c6c5 vfs_quota_off +EXPORT_SYMBOL vmlinux 0xa53c8b91 put_mnt_ns +EXPORT_SYMBOL vmlinux 0xa5536337 journal_get_write_access +EXPORT_SYMBOL vmlinux 0xa568bae6 md_write_start +EXPORT_SYMBOL vmlinux 0xa5753384 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa5870d2a pci_map_rom +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa59103bc dm_table_event +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5b8c84a generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xa5b9d487 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xa5bbb17e proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0xa5bd5b5c netdev_features_change +EXPORT_SYMBOL vmlinux 0xa5c07e23 register_framebuffer +EXPORT_SYMBOL vmlinux 0xa5cef8ad release_resource +EXPORT_SYMBOL vmlinux 0xa5cf322c fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0xa5d3cec8 journal_get_create_access +EXPORT_SYMBOL vmlinux 0xa5e8e719 mddev_congested +EXPORT_SYMBOL vmlinux 0xa60d96e3 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0xa61c030a pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0xa62c3483 lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa648c8cb sock_no_connect +EXPORT_SYMBOL vmlinux 0xa65349a8 phy_disconnect +EXPORT_SYMBOL vmlinux 0xa6578147 insert_inode_locked +EXPORT_SYMBOL vmlinux 0xa6651450 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xa67a5992 blk_end_request +EXPORT_SYMBOL vmlinux 0xa67d61b7 journal_force_commit +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6c7720e scsi_device_put +EXPORT_SYMBOL vmlinux 0xa6d88dd5 cfb_fillrect +EXPORT_SYMBOL vmlinux 0xa6dbce06 __scsi_add_device +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6e90330 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xa6f6ac32 scsi_put_command +EXPORT_SYMBOL vmlinux 0xa6f822f3 del_mtd_partitions +EXPORT_SYMBOL vmlinux 0xa6fe21ca scsi_device_resume +EXPORT_SYMBOL vmlinux 0xa70e8dbe pid_task +EXPORT_SYMBOL vmlinux 0xa72818c9 replace_mount_options +EXPORT_SYMBOL vmlinux 0xa739dc74 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xa74478ac amba_find_device +EXPORT_SYMBOL vmlinux 0xa7497a95 bio_init +EXPORT_SYMBOL vmlinux 0xa78f5d88 fd_install +EXPORT_SYMBOL vmlinux 0xa79c3281 slow_work_cancel +EXPORT_SYMBOL vmlinux 0xa7bd930e xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xa7da3671 input_register_handle +EXPORT_SYMBOL vmlinux 0xa7dc505d set_create_files_as +EXPORT_SYMBOL vmlinux 0xa7ebb8f9 __scm_destroy +EXPORT_SYMBOL vmlinux 0xa83720fa tty_name +EXPORT_SYMBOL vmlinux 0xa841ead5 simple_unlink +EXPORT_SYMBOL vmlinux 0xa85ec91b skb_seq_read +EXPORT_SYMBOL vmlinux 0xa869b31c scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0xa877e305 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xa88eb0be nf_register_hook +EXPORT_SYMBOL vmlinux 0xa8945fae bdi_init +EXPORT_SYMBOL vmlinux 0xa8ac4d52 copy_io_context +EXPORT_SYMBOL vmlinux 0xa8d05748 audit_log_format +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa92e1186 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0xa94028cf neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xa9466e3b bioset_create +EXPORT_SYMBOL vmlinux 0xa953d634 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xa96cd076 generic_setxattr +EXPORT_SYMBOL vmlinux 0xa97d7589 simple_transaction_set +EXPORT_SYMBOL vmlinux 0xa9877206 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xa98f5d8e netif_napi_del +EXPORT_SYMBOL vmlinux 0xa99b52e9 revert_creds +EXPORT_SYMBOL vmlinux 0xa9a7252b __breadahead +EXPORT_SYMBOL vmlinux 0xa9a9c48f page_readlink +EXPORT_SYMBOL vmlinux 0xa9bc868a scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0xa9e35b85 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0xa9f1ed23 bit_waitqueue +EXPORT_SYMBOL vmlinux 0xa9f48309 generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xaa00c800 pagevec_lookup +EXPORT_SYMBOL vmlinux 0xaa014eeb inet6_release +EXPORT_SYMBOL vmlinux 0xaa0b7b51 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0xaa2f72af vfs_fsync +EXPORT_SYMBOL vmlinux 0xaa3f8f35 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0xaa4cd37c __kill_fasync +EXPORT_SYMBOL vmlinux 0xaa625389 dquot_drop +EXPORT_SYMBOL vmlinux 0xaa687d93 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xaa8fa02b hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0xaacc78ad blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xaad39c62 tty_port_close_start +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab42fc09 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xab52619c cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xab53b0a8 mempool_alloc +EXPORT_SYMBOL vmlinux 0xab543117 pci_select_bars +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab680c96 __down_read_trylock +EXPORT_SYMBOL vmlinux 0xab87c0eb tc_classify +EXPORT_SYMBOL vmlinux 0xab8e3099 inet_select_addr +EXPORT_SYMBOL vmlinux 0xaba7d301 input_open_device +EXPORT_SYMBOL vmlinux 0xabb33156 pci_claim_resource +EXPORT_SYMBOL vmlinux 0xabbbec18 cdrom_release +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd47787 down_killable +EXPORT_SYMBOL vmlinux 0xac035593 uart_add_one_port +EXPORT_SYMBOL vmlinux 0xac092d8c generic_ro_fops +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac54fc9f mempool_destroy +EXPORT_SYMBOL vmlinux 0xac5da09f kmem_cache_create +EXPORT_SYMBOL vmlinux 0xac5f113d cpu_all_bits +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac68c328 sock_i_uid +EXPORT_SYMBOL vmlinux 0xac79e1f4 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0xac7c59e8 lock_sock_nested +EXPORT_SYMBOL vmlinux 0xaca66647 create_empty_buffers +EXPORT_SYMBOL vmlinux 0xacb9a671 follow_pfn +EXPORT_SYMBOL vmlinux 0xacca9176 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacd26882 neigh_connected_output +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad07eb80 poll_freewait +EXPORT_SYMBOL vmlinux 0xad0c15aa xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0xad32d30b ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xad82fcd4 dst_discard +EXPORT_SYMBOL vmlinux 0xad852d77 dquot_scan_active +EXPORT_SYMBOL vmlinux 0xadb2f8e8 unregister_nls +EXPORT_SYMBOL vmlinux 0xadb792c2 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0xadd28862 tcp_connect +EXPORT_SYMBOL vmlinux 0xadd3939c simple_fill_super +EXPORT_SYMBOL vmlinux 0xadd68333 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xaddd646d ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xade1053d skb_unlink +EXPORT_SYMBOL vmlinux 0xadf06e71 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0xadf42bd5 __request_region +EXPORT_SYMBOL vmlinux 0xadf6edf5 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xae013d0b amba_release_regions +EXPORT_SYMBOL vmlinux 0xae1074c9 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0xae367890 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xae395308 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0xae9f4edc neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0xaeb57c86 security_path_rename +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaee814f1 ps2_command +EXPORT_SYMBOL vmlinux 0xaefb60c3 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xaf33cfe0 sock_sendmsg +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf3f7dd5 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0xaf46d3f1 bio_free +EXPORT_SYMBOL vmlinux 0xaf50e76d elf_set_personality +EXPORT_SYMBOL vmlinux 0xaf7d24fb poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0xaf8aa518 system_rev +EXPORT_SYMBOL vmlinux 0xafbacadb tcf_hash_release +EXPORT_SYMBOL vmlinux 0xb04005ac ip_route_output_key +EXPORT_SYMBOL vmlinux 0xb050d9b8 dcache_dir_open +EXPORT_SYMBOL vmlinux 0xb05a7183 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0xb05cc9c1 alloc_file +EXPORT_SYMBOL vmlinux 0xb07b246c inet_stream_connect +EXPORT_SYMBOL vmlinux 0xb085e468 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c75f13 phy_attach +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb13eefb8 journal_update_format +EXPORT_SYMBOL vmlinux 0xb18c20e7 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a91182 cdev_add +EXPORT_SYMBOL vmlinux 0xb1acdd9e single_open +EXPORT_SYMBOL vmlinux 0xb1ad28e0 __gnu_mcount_nc +EXPORT_SYMBOL vmlinux 0xb1c3046d call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb202d2b3 vga_put +EXPORT_SYMBOL vmlinux 0xb20add38 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xb21b8bd5 sync_inode +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb2563af6 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0xb25e3724 sock_rfree +EXPORT_SYMBOL vmlinux 0xb2668bcd seq_puts +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb26b31ad inet_add_protocol +EXPORT_SYMBOL vmlinux 0xb2710c98 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xb272fd2a proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0xb2818ab1 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xb285f191 llc_sap_find +EXPORT_SYMBOL vmlinux 0xb28a7bbe request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xb28c2cb6 mmc_host_lazy_disable +EXPORT_SYMBOL vmlinux 0xb2bf1312 __up_read +EXPORT_SYMBOL vmlinux 0xb2c22cb8 vfs_link +EXPORT_SYMBOL vmlinux 0xb2d72cc7 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0xb2dcb858 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xb2ed9f38 elv_queue_empty +EXPORT_SYMBOL vmlinux 0xb2f8a90d mntput_no_expire +EXPORT_SYMBOL vmlinux 0xb2fc2a6d stop_tty +EXPORT_SYMBOL vmlinux 0xb2fedee3 ppp_unit_number +EXPORT_SYMBOL vmlinux 0xb32e28b5 journal_lock_updates +EXPORT_SYMBOL vmlinux 0xb3393c77 kunmap_atomic +EXPORT_SYMBOL vmlinux 0xb345b0ad dmam_free_coherent +EXPORT_SYMBOL vmlinux 0xb36d1666 pci_pme_active +EXPORT_SYMBOL vmlinux 0xb376d79d radix_tree_tagged +EXPORT_SYMBOL vmlinux 0xb3831371 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3c807d0 i2c_clients_command +EXPORT_SYMBOL vmlinux 0xb3e1d523 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xb3e7dccb dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0xb3ef8842 tty_set_operations +EXPORT_SYMBOL vmlinux 0xb3fe02b1 down_write +EXPORT_SYMBOL vmlinux 0xb40d900b phy_driver_register +EXPORT_SYMBOL vmlinux 0xb42138f6 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4254b17 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xb426af06 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xb436ffa3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb47f2c48 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xb480a88e audit_log_end +EXPORT_SYMBOL vmlinux 0xb48d8f47 input_filter_device +EXPORT_SYMBOL vmlinux 0xb4be7d3b dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xb4d48ac2 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb519cf78 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xb52c34d9 task_nice +EXPORT_SYMBOL vmlinux 0xb534763c sg_free_table +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb54773cc neigh_destroy +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5b204b4 dm_io_client_create +EXPORT_SYMBOL vmlinux 0xb5b3ed38 flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb6266c6c input_free_device +EXPORT_SYMBOL vmlinux 0xb6359735 release_sock +EXPORT_SYMBOL vmlinux 0xb63c41c2 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6896671 crc_t10dif +EXPORT_SYMBOL vmlinux 0xb68e93f0 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xb69ffaa0 default_llseek +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b76323 may_umount +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6c70a7d __wake_up +EXPORT_SYMBOL vmlinux 0xb6f2bd89 vfs_mknod +EXPORT_SYMBOL vmlinux 0xb6fa1961 iunique +EXPORT_SYMBOL vmlinux 0xb703911e release_firmware +EXPORT_SYMBOL vmlinux 0xb726d05d inet_frags_fini +EXPORT_SYMBOL vmlinux 0xb74f565c bio_clone +EXPORT_SYMBOL vmlinux 0xb74f98a3 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xb76648a8 pci_release_regions +EXPORT_SYMBOL vmlinux 0xb76de6b6 journal_destroy +EXPORT_SYMBOL vmlinux 0xb78680b5 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ad3321 ida_init +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7ba76c7 __aeabi_unwind_cpp_pr2 +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7d3661a xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xb7ea634e mpage_readpages +EXPORT_SYMBOL vmlinux 0xb805e146 module_put +EXPORT_SYMBOL vmlinux 0xb80ca6f4 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xb80de494 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xb84ed32f proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0xb864b0b8 mdiobus_register +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb871a8d2 ip_route_input +EXPORT_SYMBOL vmlinux 0xb87cb478 tcf_em_register +EXPORT_SYMBOL vmlinux 0xb87e1e9f xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0xb88e12ee tty_hung_up_p +EXPORT_SYMBOL vmlinux 0xb8964934 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb89f71fc free_netdev +EXPORT_SYMBOL vmlinux 0xb8aa2342 __check_region +EXPORT_SYMBOL vmlinux 0xb8ffca69 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0xb8ffd619 init_net +EXPORT_SYMBOL vmlinux 0xb906b29f iget5_locked +EXPORT_SYMBOL vmlinux 0xb909e82a qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xb95f98d6 _memset_io +EXPORT_SYMBOL vmlinux 0xb97d4c9c mutex_lock +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb98ef804 vm_stat +EXPORT_SYMBOL vmlinux 0xb99a74d4 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0xb9acd3d9 __put_user_2 +EXPORT_SYMBOL vmlinux 0xb9f5f3c8 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0xba0dab67 get_super +EXPORT_SYMBOL vmlinux 0xba3bda2a __downgrade_write +EXPORT_SYMBOL vmlinux 0xba48f299 set_security_override +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba8f8b68 completion_done +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbaf7b20c kill_pid +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb3a944c __secpath_destroy +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb6838db send_sig_info +EXPORT_SYMBOL vmlinux 0xbb72d4fe __put_user_1 +EXPORT_SYMBOL vmlinux 0xbb9057fc tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbbca4c4c netpoll_setup +EXPORT_SYMBOL vmlinux 0xbbccfbee xfrm_input +EXPORT_SYMBOL vmlinux 0xbbd137cb blk_recount_segments +EXPORT_SYMBOL vmlinux 0xbbd451ca mii_check_gmii_support +EXPORT_SYMBOL vmlinux 0xbbdce6f3 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xbbf8f039 simple_lookup +EXPORT_SYMBOL vmlinux 0xbc072b44 neigh_event_ns +EXPORT_SYMBOL vmlinux 0xbc0ea1b1 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xbc10dd97 __put_user_4 +EXPORT_SYMBOL vmlinux 0xbc2e61a6 kmap_atomic +EXPORT_SYMBOL vmlinux 0xbc6462aa skb_queue_purge +EXPORT_SYMBOL vmlinux 0xbc6cdb02 generic_write_checks +EXPORT_SYMBOL vmlinux 0xbcb4573b tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xbcc98290 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0xbccac709 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xbcdaad85 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xbd020b06 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0xbd4af17d d_delete +EXPORT_SYMBOL vmlinux 0xbd4c0c65 input_register_device +EXPORT_SYMBOL vmlinux 0xbd4f26af blk_sync_queue +EXPORT_SYMBOL vmlinux 0xbd839aad posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xbdb80ef1 clk_add_alias +EXPORT_SYMBOL vmlinux 0xbdd02bb4 dev_add_pack +EXPORT_SYMBOL vmlinux 0xbdf2580d __raw_readsl +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe03eeeb mmc_free_host +EXPORT_SYMBOL vmlinux 0xbe0be3b1 redraw_screen +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe17f688 cfb_imageblit +EXPORT_SYMBOL vmlinux 0xbe63ee40 request_resource +EXPORT_SYMBOL vmlinux 0xbe77f258 __pci_register_driver +EXPORT_SYMBOL vmlinux 0xbe8818ba sockfd_lookup +EXPORT_SYMBOL vmlinux 0xbe918ebe d_instantiate_unique +EXPORT_SYMBOL vmlinux 0xbe95557e pci_get_slot +EXPORT_SYMBOL vmlinux 0xbecc5c1b sk_free +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf0acf64 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0xbf276fdd textsearch_prepare +EXPORT_SYMBOL vmlinux 0xbf539b5f vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0xbf6272c5 pipe_lock +EXPORT_SYMBOL vmlinux 0xbf7c2ec3 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0xbf7f61f9 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfb1c593 vfs_create +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xbffb507f vfs_rmdir +EXPORT_SYMBOL vmlinux 0xc0291870 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0xc02cf69b clkdev_drop +EXPORT_SYMBOL vmlinux 0xc051dad7 fput +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc072d707 scsi_get_command +EXPORT_SYMBOL vmlinux 0xc07cae34 vfs_statfs +EXPORT_SYMBOL vmlinux 0xc08dcaca inode_change_ok +EXPORT_SYMBOL vmlinux 0xc090ce11 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0d0ac0b dm_table_get +EXPORT_SYMBOL vmlinux 0xc107ed1f blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc12d1caa rfkill_blocked +EXPORT_SYMBOL vmlinux 0xc1358681 neigh_ifdown +EXPORT_SYMBOL vmlinux 0xc1601a4f _change_bit_le +EXPORT_SYMBOL vmlinux 0xc1628f47 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xc17de808 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0xc1a8c0c3 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0xc1fc4511 _test_and_change_bit_le +EXPORT_SYMBOL vmlinux 0xc221de99 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0xc22616f1 __init_rwsem +EXPORT_SYMBOL vmlinux 0xc233f53c pci_clear_master +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc2573ff2 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xc27487dd __bug +EXPORT_SYMBOL vmlinux 0xc294bfd2 unlock_page +EXPORT_SYMBOL vmlinux 0xc29531e2 map_destroy +EXPORT_SYMBOL vmlinux 0xc2c7e87c alloc_tty_driver +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e13b25 km_query +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc30edd7c __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xc3174b06 devm_ioremap +EXPORT_SYMBOL vmlinux 0xc3225c2f dm_exception_store_type_register +EXPORT_SYMBOL vmlinux 0xc359fb65 abort +EXPORT_SYMBOL vmlinux 0xc3771276 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xc3963dc3 proto_register +EXPORT_SYMBOL vmlinux 0xc3a87ab1 follow_up +EXPORT_SYMBOL vmlinux 0xc3ae2904 tty_free_termios +EXPORT_SYMBOL vmlinux 0xc3c19d02 seq_putc +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc3d70739 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0xc3fa61b1 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xc403d2fc phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xc4114b72 kernel_getpeername +EXPORT_SYMBOL vmlinux 0xc43a20e5 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0xc440c451 sg_alloc_table +EXPORT_SYMBOL vmlinux 0xc443c016 pci_dev_put +EXPORT_SYMBOL vmlinux 0xc458b2ea gen_pool_add +EXPORT_SYMBOL vmlinux 0xc48fedfe scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4a77472 rfkill_unregister +EXPORT_SYMBOL vmlinux 0xc4d0590d journal_forget +EXPORT_SYMBOL vmlinux 0xc4d91501 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0xc4e9ab42 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0xc4fb27c0 scsi_dma_map +EXPORT_SYMBOL vmlinux 0xc4fc8024 netlink_set_err +EXPORT_SYMBOL vmlinux 0xc51663cb __insert_inode_hash +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc561e7b5 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0xc57e3295 mii_link_ok +EXPORT_SYMBOL vmlinux 0xc5bf69c6 phy_print_status +EXPORT_SYMBOL vmlinux 0xc5f19f39 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0xc5fab9ca napi_reuse_skb +EXPORT_SYMBOL vmlinux 0xc6144a0f kmem_cache_size +EXPORT_SYMBOL vmlinux 0xc6184045 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xc633495b schedule_work +EXPORT_SYMBOL vmlinux 0xc64d8231 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0xc658c382 mmc_card_awake +EXPORT_SYMBOL vmlinux 0xc6e0e167 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xc6fc9a25 tty_unregister_device +EXPORT_SYMBOL vmlinux 0xc71d222c seq_open +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72c590a bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xc72cc0e5 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xc73f112d deny_write_access +EXPORT_SYMBOL vmlinux 0xc75beb43 vmap +EXPORT_SYMBOL vmlinux 0xc7938992 block_write_full_page +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7de7483 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc7eee87e get_mem_type +EXPORT_SYMBOL vmlinux 0xc7f8874b seq_escape +EXPORT_SYMBOL vmlinux 0xc80cdf49 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0xc80de694 down_write_trylock +EXPORT_SYMBOL vmlinux 0xc83836d2 neigh_parms_release +EXPORT_SYMBOL vmlinux 0xc87ed958 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xc88a1b8f secpath_dup +EXPORT_SYMBOL vmlinux 0xc890d9e8 del_gendisk +EXPORT_SYMBOL vmlinux 0xc8b44e7d dm_table_get_size +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8cb824e truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xc9062a4f bdi_register_dev +EXPORT_SYMBOL vmlinux 0xc9242666 mod_timer +EXPORT_SYMBOL vmlinux 0xc984ae1c elv_abort_queue +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9a40c99 lock_may_write +EXPORT_SYMBOL vmlinux 0xc9cfb68a __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0xc9d8c8bd iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0xc9e1ef25 vfs_symlink +EXPORT_SYMBOL vmlinux 0xc9e4a1e3 __put_cred +EXPORT_SYMBOL vmlinux 0xca01fd41 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0xca16f1ef pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0xca1ff436 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xca572371 dev_get_stats +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xcab4c427 touch_atime +EXPORT_SYMBOL vmlinux 0xcabd988f datagram_poll +EXPORT_SYMBOL vmlinux 0xcac2b89f dev_set_allmulti +EXPORT_SYMBOL vmlinux 0xcad63efa splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xcad66d51 input_set_capability +EXPORT_SYMBOL vmlinux 0xcafd84b0 register_cdrom +EXPORT_SYMBOL vmlinux 0xcb09616b inet_del_protocol +EXPORT_SYMBOL vmlinux 0xcb21854b mmc_card_sleep +EXPORT_SYMBOL vmlinux 0xcb23da76 fb_blank +EXPORT_SYMBOL vmlinux 0xcb29ec24 check_disk_change +EXPORT_SYMBOL vmlinux 0xcb3bdc04 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0xcb41563b ip_fragment +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcbbc0572 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xcbc29f4e gen_new_estimator +EXPORT_SYMBOL vmlinux 0xcbda7438 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0xcbe661b7 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0xcbe8ba25 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0xcc060dd7 timecompare_transform +EXPORT_SYMBOL vmlinux 0xcc252c64 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xcc28d78d i2c_get_adapter +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc36fad5 arp_tbl +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc51acec blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0xcc6bc04a __scsi_put_command +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc9e1559 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xcccca482 _test_and_clear_bit_le +EXPORT_SYMBOL vmlinux 0xccd1d330 seq_release +EXPORT_SYMBOL vmlinux 0xccf3dcc2 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0xcd03ab41 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0xcd098ac4 d_alloc_root +EXPORT_SYMBOL vmlinux 0xcd123400 pci_enable_device +EXPORT_SYMBOL vmlinux 0xcd63c845 __aeabi_lasr +EXPORT_SYMBOL vmlinux 0xcd89d034 rt6_lookup +EXPORT_SYMBOL vmlinux 0xcd8d738f skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0xcdd0477d generic_file_llseek +EXPORT_SYMBOL vmlinux 0xcdf89cc9 simple_write_end +EXPORT_SYMBOL vmlinux 0xce1202c3 inet_release +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce2bb63a proc_net_netfilter +EXPORT_SYMBOL vmlinux 0xce2e4788 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xce319711 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xce324cdc scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xcea1e348 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xceb2a11e textsearch_destroy +EXPORT_SYMBOL vmlinux 0xcec7c326 register_gifconf +EXPORT_SYMBOL vmlinux 0xced9cf36 tty_hangup +EXPORT_SYMBOL vmlinux 0xcf0107cf scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0xcf0dc16b file_fsync +EXPORT_SYMBOL vmlinux 0xcf1fff66 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xcf2ea867 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xcf327876 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0xcf877c9a pcim_iounmap +EXPORT_SYMBOL vmlinux 0xcf8f8483 mpage_writepage +EXPORT_SYMBOL vmlinux 0xcf8f92bf md_done_sync +EXPORT_SYMBOL vmlinux 0xcf982b78 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0xcfada491 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfcc1337 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd01ee520 dev_disable_lro +EXPORT_SYMBOL vmlinux 0xd04e731e per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xd05a7e0e xfrm_state_walk +EXPORT_SYMBOL vmlinux 0xd061fb08 filp_close +EXPORT_SYMBOL vmlinux 0xd06c8d6a kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0fde275 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0xd12a3d3a scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xd130ad16 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xd13b5c58 should_remove_suid +EXPORT_SYMBOL vmlinux 0xd148f53e journal_release_buffer +EXPORT_SYMBOL vmlinux 0xd1780a83 devm_iounmap +EXPORT_SYMBOL vmlinux 0xd17ca027 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0xd19baab1 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xd1a2081d elevator_exit +EXPORT_SYMBOL vmlinux 0xd1a5e0eb pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0xd1ad8e9f splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0xd1d70e6a get_disk +EXPORT_SYMBOL vmlinux 0xd1dad653 rfkill_set_states +EXPORT_SYMBOL vmlinux 0xd1ec77f9 revalidate_disk +EXPORT_SYMBOL vmlinux 0xd1fb24d1 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd22398e8 tty_port_close +EXPORT_SYMBOL vmlinux 0xd2377d3b pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a68761 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd2c3314c freeze_bdev +EXPORT_SYMBOL vmlinux 0xd2cef0b5 consume_skb +EXPORT_SYMBOL vmlinux 0xd2eab3d7 tcp_close +EXPORT_SYMBOL vmlinux 0xd2f4fc78 kill_fasync +EXPORT_SYMBOL vmlinux 0xd32e52c7 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0xd33293c8 tty_register_driver +EXPORT_SYMBOL vmlinux 0xd3427f73 mempool_create_node +EXPORT_SYMBOL vmlinux 0xd3dbfbc4 _find_first_zero_bit_le +EXPORT_SYMBOL vmlinux 0xd3f0b35c default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0xd418e1c0 adjust_resource +EXPORT_SYMBOL vmlinux 0xd45acd28 input_set_keycode +EXPORT_SYMBOL vmlinux 0xd475f8c1 cdev_del +EXPORT_SYMBOL vmlinux 0xd49da111 fddi_type_trans +EXPORT_SYMBOL vmlinux 0xd4afe49e km_new_mapping +EXPORT_SYMBOL vmlinux 0xd4b10174 scsi_unregister +EXPORT_SYMBOL vmlinux 0xd4b528e8 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0xd4de02f8 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0xd5125db4 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xd51d1df5 bmap +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd5688a7a radix_tree_insert +EXPORT_SYMBOL vmlinux 0xd56eaaa0 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xd570f1c8 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xd595b976 register_console +EXPORT_SYMBOL vmlinux 0xd5a6e632 put_io_context +EXPORT_SYMBOL vmlinux 0xd5b6ddb3 d_splice_alias +EXPORT_SYMBOL vmlinux 0xd5c57c52 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0xd5fca6f7 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0xd60a615b ip_dev_find +EXPORT_SYMBOL vmlinux 0xd6134db5 __register_chrdev +EXPORT_SYMBOL vmlinux 0xd627480b strncat +EXPORT_SYMBOL vmlinux 0xd62a0aae __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd638a182 vfs_llseek +EXPORT_SYMBOL vmlinux 0xd63cfb71 neigh_update +EXPORT_SYMBOL vmlinux 0xd66120c1 audit_log_start +EXPORT_SYMBOL vmlinux 0xd66c6228 down_read_trylock +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6bece4c journal_start +EXPORT_SYMBOL vmlinux 0xd6d326d9 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd7442a48 eth_header +EXPORT_SYMBOL vmlinux 0xd74b860b tcf_hash_search +EXPORT_SYMBOL vmlinux 0xd75188f6 ps2_begin_command +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd78ccf8b neigh_seq_next +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7b69fae idr_find +EXPORT_SYMBOL vmlinux 0xd7c10e92 xfrm_register_km +EXPORT_SYMBOL vmlinux 0xd81a30f7 security_path_mknod +EXPORT_SYMBOL vmlinux 0xd8282ff0 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd840b81c tcf_unregister_action +EXPORT_SYMBOL vmlinux 0xd84d264e follow_down +EXPORT_SYMBOL vmlinux 0xd84efcbb block_fsync +EXPORT_SYMBOL vmlinux 0xd853c9e2 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0xd8616ae0 pci_disable_device +EXPORT_SYMBOL vmlinux 0xd884a677 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8abd974 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0xd8bfbfbf pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0xd8cdd05e user_revoke +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8e69d14 blk_remove_plug +EXPORT_SYMBOL vmlinux 0xd8e83349 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0xd8ef9d83 km_report +EXPORT_SYMBOL vmlinux 0xd8f7bdca input_event +EXPORT_SYMBOL vmlinux 0xd9016223 rfkill_alloc +EXPORT_SYMBOL vmlinux 0xd90cd369 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xd922daf6 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xd963a74a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xd97c10d2 serio_close +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9a412fe proc_mkdir +EXPORT_SYMBOL vmlinux 0xd9b8fab0 get_sb_ns +EXPORT_SYMBOL vmlinux 0xd9bd9e13 dm_register_target +EXPORT_SYMBOL vmlinux 0xd9ce8f0c strnlen +EXPORT_SYMBOL vmlinux 0xd9d332be scsi_rescan_device +EXPORT_SYMBOL vmlinux 0xd9faa16f mmc_request_done +EXPORT_SYMBOL vmlinux 0xd9fd6ee1 ipv4_specific +EXPORT_SYMBOL vmlinux 0xda12a6fb __seq_open_private +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda1fc224 cpu_cache +EXPORT_SYMBOL vmlinux 0xda3cb8b1 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xda59bd89 kill_block_super +EXPORT_SYMBOL vmlinux 0xda5ea696 _test_and_set_bit_le +EXPORT_SYMBOL vmlinux 0xda611fa8 pci_assign_resource +EXPORT_SYMBOL vmlinux 0xda777d5e qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8a72ef pci_iounmap +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8b5096 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0xda9e25e5 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdaa787b7 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0xdaeba995 dm_get_device +EXPORT_SYMBOL vmlinux 0xdaed0da2 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0xdaf760c5 balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xdb00d43c tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0xdb11d096 serio_open +EXPORT_SYMBOL vmlinux 0xdb2d7b78 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0xdb2e05c9 init_task +EXPORT_SYMBOL vmlinux 0xdb3ed13f xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdb55a493 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0xdb723d57 d_rehash +EXPORT_SYMBOL vmlinux 0xdb812162 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdb99b14a invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0xdb9ee394 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0xdbab0511 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbf3f4f9 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc0f5aa7 sock_no_accept +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc3a6138 blk_put_request +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc74cc24 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xdc93ef08 dquot_destroy +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdce4305d ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xdcf6e3cc sk_filter +EXPORT_SYMBOL vmlinux 0xdcf71294 napi_skb_finish +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd11b797 blk_unplug +EXPORT_SYMBOL vmlinux 0xdd13fb5d napi_frags_finish +EXPORT_SYMBOL vmlinux 0xdd27fa87 memchr +EXPORT_SYMBOL vmlinux 0xdd6bfccd radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0xdd827285 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xddc7cad0 qdisc_list_del +EXPORT_SYMBOL vmlinux 0xddc814d4 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0xddf2fa37 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0xde197433 generic_unplug_device +EXPORT_SYMBOL vmlinux 0xde3c68a6 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xde5020e6 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xde6653d5 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde879176 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdeac9a91 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0xded01f46 tcp_proc_register +EXPORT_SYMBOL vmlinux 0xdee075ba gen_pool_free +EXPORT_SYMBOL vmlinux 0xdee96136 inet6_getname +EXPORT_SYMBOL vmlinux 0xdf00463a journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xdf03f05b udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0xdf16efc2 vfsmount_lock +EXPORT_SYMBOL vmlinux 0xdf209897 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xdf483fb1 ether_setup +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf505b21 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf65a20a blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xdf8d10f1 i2c_register_driver +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfb01a80 cpu_v7_dcache_clean_area +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfc5e71c blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xdfde8ce8 free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xdfe45d2d dm_table_get_md +EXPORT_SYMBOL vmlinux 0xdfee80a5 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0xe0086d82 dev_open +EXPORT_SYMBOL vmlinux 0xe00ac53a spi_dv_device +EXPORT_SYMBOL vmlinux 0xe02ff093 skb_push +EXPORT_SYMBOL vmlinux 0xe03a456a mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xe03e5718 misc_deregister +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe09b5e55 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xe0a885c5 vfs_readlink +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0b9cbb4 skb_under_panic +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0d6ffc9 save_mount_options +EXPORT_SYMBOL vmlinux 0xe0e3cbf1 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0xe0e58740 input_allocate_device +EXPORT_SYMBOL vmlinux 0xe1091cac ndisc_mc_map +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe1a3902e kernel_read +EXPORT_SYMBOL vmlinux 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL vmlinux 0xe1b5e5be dquot_initialize +EXPORT_SYMBOL vmlinux 0xe1c54b57 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xe202caf9 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xe21017ec kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xe2200285 vfs_read +EXPORT_SYMBOL vmlinux 0xe22bd66e journal_start_commit +EXPORT_SYMBOL vmlinux 0xe22e2390 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe2540fc9 vc_cons +EXPORT_SYMBOL vmlinux 0xe266bc98 scsi_host_get +EXPORT_SYMBOL vmlinux 0xe273e2b2 is_bad_inode +EXPORT_SYMBOL vmlinux 0xe2860896 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0xe286f981 clk_get_rate +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2f3e22c bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe2fdcf38 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0xe3008751 km_policy_expired +EXPORT_SYMBOL vmlinux 0xe30778a7 __f_setown +EXPORT_SYMBOL vmlinux 0xe31515a7 cfi_varsize_frob +EXPORT_SYMBOL vmlinux 0xe315262e md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xe3269e47 set_blocksize +EXPORT_SYMBOL vmlinux 0xe33556ae pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0xe3461b74 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0xe34cab92 tty_kref_put +EXPORT_SYMBOL vmlinux 0xe36ea19e neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xe3738dce scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xe37610e6 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0xe3b1ba01 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0xe3ba43c8 bdi_unregister +EXPORT_SYMBOL vmlinux 0xe3c7ef5c i2c_verify_client +EXPORT_SYMBOL vmlinux 0xe3dc7fb2 bdevname +EXPORT_SYMBOL vmlinux 0xe3e7000d pci_save_state +EXPORT_SYMBOL vmlinux 0xe3ed8521 generic_permission +EXPORT_SYMBOL vmlinux 0xe3f7fde8 __lock_page +EXPORT_SYMBOL vmlinux 0xe3fce706 kmap +EXPORT_SYMBOL vmlinux 0xe3fd43d6 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xe419a8d3 register_netdev +EXPORT_SYMBOL vmlinux 0xe442fd03 mii_ethtool_gset +EXPORT_SYMBOL vmlinux 0xe477cf27 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xe496935b nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0xe49f509c pagecache_write_begin +EXPORT_SYMBOL vmlinux 0xe4a97c71 __down_write_trylock +EXPORT_SYMBOL vmlinux 0xe4b870f3 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xe4c80097 cacheid +EXPORT_SYMBOL vmlinux 0xe4d77812 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0xe4dd4a39 sysctl_data +EXPORT_SYMBOL vmlinux 0xe4e7f6a4 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe4f9c9ae prepare_creds +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe54f1c73 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5e77533 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe626d202 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xe6334eae misc_register +EXPORT_SYMBOL vmlinux 0xe64e07e4 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xe6562614 udplite_table +EXPORT_SYMBOL vmlinux 0xe65a6525 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xe66ea6b5 tcp_read_sock +EXPORT_SYMBOL vmlinux 0xe684b96e hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6b7079c genphy_suspend +EXPORT_SYMBOL vmlinux 0xe6c3ebb0 __raw_writesw +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe707d823 __aeabi_uidiv +EXPORT_SYMBOL vmlinux 0xe709a9bd generic_getxattr +EXPORT_SYMBOL vmlinux 0xe71286eb deactivate_locked_super +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe7272699 try_to_release_page +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7dae90e register_key_type +EXPORT_SYMBOL vmlinux 0xe7e130f8 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xe7e6cc1b inet6_bind +EXPORT_SYMBOL vmlinux 0xe820c503 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0xe8274743 input_unregister_handler +EXPORT_SYMBOL vmlinux 0xe8331862 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xe85e3256 filemap_fault +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe880e6d1 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0xe8992803 key_revoke +EXPORT_SYMBOL vmlinux 0xe89bceea netpoll_print_options +EXPORT_SYMBOL vmlinux 0xe8a57a30 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xe8c77262 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8db0783 blk_init_queue +EXPORT_SYMBOL vmlinux 0xe8fe1a27 tcf_hash_create +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe916c9a8 kick_iocb +EXPORT_SYMBOL vmlinux 0xe91a1c5d sock_wfree +EXPORT_SYMBOL vmlinux 0xe92ca756 no_llseek +EXPORT_SYMBOL vmlinux 0xe9374edb bd_set_size +EXPORT_SYMBOL vmlinux 0xe952d197 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xe95d8bcd mii_ethtool_sset +EXPORT_SYMBOL vmlinux 0xe97c5e31 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xe9a68e10 scsi_free_command +EXPORT_SYMBOL vmlinux 0xe9a7eee6 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xe9e0c808 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0xe9e0ed54 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0xe9fc9637 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea097375 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea2d33a2 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea858cb5 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xead2c14b dm_exception_store_destroy +EXPORT_SYMBOL vmlinux 0xead5cffe bitmap_end_sync +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeb0d92d8 pci_choose_state +EXPORT_SYMBOL vmlinux 0xeb14db51 simple_rmdir +EXPORT_SYMBOL vmlinux 0xeb497843 udp_ioctl +EXPORT_SYMBOL vmlinux 0xeb6160e6 skb_pull +EXPORT_SYMBOL vmlinux 0xeb784372 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0xeb8165d8 spi_display_xfer_agreement +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xebaec5ad journal_errno +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebfdcbdf system_serial_high +EXPORT_SYMBOL vmlinux 0xec0d3862 lookup_bdev +EXPORT_SYMBOL vmlinux 0xec1665ac blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0xec193ac1 get_sb_bdev +EXPORT_SYMBOL vmlinux 0xec22141a dm_dirty_log_destroy +EXPORT_SYMBOL vmlinux 0xec2bf9bb call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0xec4d9e3a clk_get_sys +EXPORT_SYMBOL vmlinux 0xec64fc76 dcache_readdir +EXPORT_SYMBOL vmlinux 0xec6f2dd1 security_file_permission +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec888ca4 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0xec947bca rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0xecc074ef nobh_truncate_page +EXPORT_SYMBOL vmlinux 0xece0c984 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0xed2228ac kern_path +EXPORT_SYMBOL vmlinux 0xed34d968 get_fs_type +EXPORT_SYMBOL vmlinux 0xed61c2e4 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0xed6a118b netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedabaf69 dev_mc_sync +EXPORT_SYMBOL vmlinux 0xedabb0e8 __lock_buffer +EXPORT_SYMBOL vmlinux 0xedae9025 inet_accept +EXPORT_SYMBOL vmlinux 0xedb5dafc pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedd9106d __ashrdi3 +EXPORT_SYMBOL vmlinux 0xeddec009 mem_map +EXPORT_SYMBOL vmlinux 0xeddf06ea scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xeddf6bff posix_lock_file +EXPORT_SYMBOL vmlinux 0xee19e1c8 alloc_disk_node +EXPORT_SYMBOL vmlinux 0xee1c240d clocksource_register +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee4fd54d __brelse +EXPORT_SYMBOL vmlinux 0xee5be8b7 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xee90884e dq_data_lock +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeef045d proc_symlink +EXPORT_SYMBOL vmlinux 0xef1a561a add_mtd_partitions +EXPORT_SYMBOL vmlinux 0xef2ea893 ps2_handle_response +EXPORT_SYMBOL vmlinux 0xef35c843 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0xef53ac35 install_exec_creds +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef998564 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0xefa20dff generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xefd66bef skb_pad +EXPORT_SYMBOL vmlinux 0xefd6cf06 __aeabi_unwind_cpp_pr0 +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe3469b page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf0371741 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0xf072bc67 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0xf0745bcc sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0xf0c94afb blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xf0dddf77 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf1445776 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0xf173f4ec empty_zero_page +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf19210d9 do_sync_read +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf19a45ce __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0xf19b56b6 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0xf1c6578b tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf2151fc2 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xf263174d dm_dirty_log_type_register +EXPORT_SYMBOL vmlinux 0xf289e2aa scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xf293b574 mmc_detect_change +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2af7e96 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xf2b518a5 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0xf2bbf2ce elv_rb_del +EXPORT_SYMBOL vmlinux 0xf2e0df5c napi_complete +EXPORT_SYMBOL vmlinux 0xf2fadabf rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0xf30c2fff journal_wipe +EXPORT_SYMBOL vmlinux 0xf30ccc6c seq_lseek +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf36b67ed sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xf385a45a generic_file_splice_write +EXPORT_SYMBOL vmlinux 0xf391caf9 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39bf4d9 put_cmsg +EXPORT_SYMBOL vmlinux 0xf3aab3fe vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xf3bf0b74 console_start +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf4021ac5 dma_pool_create +EXPORT_SYMBOL vmlinux 0xf41230ee get_empty_filp +EXPORT_SYMBOL vmlinux 0xf45a3e12 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0xf4699920 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL vmlinux 0xf4ba94c6 get_sb_nodev +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf5139045 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0xf51c639f interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xf524e81c nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf549edac pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xf559c21f i2c_release_client +EXPORT_SYMBOL vmlinux 0xf564412a __aeabi_ulcmp +EXPORT_SYMBOL vmlinux 0xf5a02f19 uart_register_driver +EXPORT_SYMBOL vmlinux 0xf5bea15b skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5e74668 kernel_getsockname +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f7aa5c netdev_set_master +EXPORT_SYMBOL vmlinux 0xf5fcabf2 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0xf618a08f tty_write_room +EXPORT_SYMBOL vmlinux 0xf6376e36 path_get +EXPORT_SYMBOL vmlinux 0xf681d638 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0xf6981f33 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6feaa76 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0xf72e77e2 skb_copy +EXPORT_SYMBOL vmlinux 0xf7384f52 downgrade_write +EXPORT_SYMBOL vmlinux 0xf747b213 udplite_prot +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf7623914 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xf76aa841 block_invalidatepage +EXPORT_SYMBOL vmlinux 0xf77fbb46 idr_remove_all +EXPORT_SYMBOL vmlinux 0xf7802486 __aeabi_uidivmod +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79cbf60 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0xf7b31402 journal_ack_err +EXPORT_SYMBOL vmlinux 0xf7c47212 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0xf7f0141a __elv_add_request +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf812fd5b dquot_commit_info +EXPORT_SYMBOL vmlinux 0xf81b365f create_proc_entry +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82dbbd2 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xf82dfa6b input_close_device +EXPORT_SYMBOL vmlinux 0xf859c6cc bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8ac82ba tty_throttle +EXPORT_SYMBOL vmlinux 0xf8e0d57e md_write_end +EXPORT_SYMBOL vmlinux 0xf8efe3e7 vc_resize +EXPORT_SYMBOL vmlinux 0xf8fbb4f0 __bad_xchg +EXPORT_SYMBOL vmlinux 0xf90d590d log_start_commit +EXPORT_SYMBOL vmlinux 0xf91cc5ea jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xf95f2f3e thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0xf975330e bio_pair_release +EXPORT_SYMBOL vmlinux 0xf9848f5b dst_alloc +EXPORT_SYMBOL vmlinux 0xf98d1e3b sk_reset_timer +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b28bac interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xf9ca24b4 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0xf9cbff4b disk_stack_limits +EXPORT_SYMBOL vmlinux 0xf9da7cf1 igrab +EXPORT_SYMBOL vmlinux 0xf9dd6659 da903x_query_status +EXPORT_SYMBOL vmlinux 0xf9e5c68f tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xf9e734cb serio_rescan +EXPORT_SYMBOL vmlinux 0xfa0eefc1 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xfa142c53 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xfa1fd333 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xfa251f08 load_nls_default +EXPORT_SYMBOL vmlinux 0xfa2bf05b xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0xfa343332 bio_integrity_free +EXPORT_SYMBOL vmlinux 0xfa600121 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0xfabe6953 unlock_super +EXPORT_SYMBOL vmlinux 0xfac2b3cd __break_lease +EXPORT_SYMBOL vmlinux 0xfac68eba arm_elf_read_implies_exec +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb20d22a simple_statfs +EXPORT_SYMBOL vmlinux 0xfb326a5d down +EXPORT_SYMBOL vmlinux 0xfb336e55 dma_release_from_coherent +EXPORT_SYMBOL vmlinux 0xfb58121b __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb7d9c45 __udivsi3 +EXPORT_SYMBOL vmlinux 0xfbb066f0 fb_set_suspend +EXPORT_SYMBOL vmlinux 0xfbb0eab8 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xfbb5dd9d unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xfbb7f6f4 kernel_listen +EXPORT_SYMBOL vmlinux 0xfbda5e8e tcf_exts_validate +EXPORT_SYMBOL vmlinux 0xfbdf07c0 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc2ca0f0 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc533f85 schedule_work_on +EXPORT_SYMBOL vmlinux 0xfc5e7668 lro_receive_frags +EXPORT_SYMBOL vmlinux 0xfc94e148 d_instantiate +EXPORT_SYMBOL vmlinux 0xfca4dc4e uart_update_timeout +EXPORT_SYMBOL vmlinux 0xfca79328 tcp_parse_options +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcbe9abd add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd081770 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xfd305341 walk_stackframe +EXPORT_SYMBOL vmlinux 0xfd36abe3 pagecache_write_end +EXPORT_SYMBOL vmlinux 0xfd37b8de lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xfd47ac30 page_put_link +EXPORT_SYMBOL vmlinux 0xfd533c40 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xfd62765d inet_getname +EXPORT_SYMBOL vmlinux 0xfd8dba4c add_wait_queue +EXPORT_SYMBOL vmlinux 0xfd9bdc26 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xfd9c08d6 input_grab_device +EXPORT_SYMBOL vmlinux 0xfda01722 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfda9571b blk_get_request +EXPORT_SYMBOL vmlinux 0xfdac68ac i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0xfdaff606 dget_locked +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe16775f idr_destroy +EXPORT_SYMBOL vmlinux 0xfe172ab9 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe6399c5 eth_change_mtu +EXPORT_SYMBOL vmlinux 0xfe678e69 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe90865d kobject_add +EXPORT_SYMBOL vmlinux 0xfe9a2c5e __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfec9b7cb call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0xfed4b664 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfeea6ba3 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff0b0235 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff252b30 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0xff42b552 alloc_trdev +EXPORT_SYMBOL vmlinux 0xff67b37f __lshrdi3 +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff85921f dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff97a5ab init_special_inode +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffa8b3e7 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0xffb49a7e blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0xffb57cfa thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0xffce02d1 blk_init_tags +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffdb11ce unregister_filesystem +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x2241df41 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xb8c08b5a async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x44d57171 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xeee74732 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x0fdb4b99 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x59ab31bd async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x31bb293c async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xbe09062e async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xf7f95dd7 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x40b19cd2 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x464dcd2a async_xor_val +EXPORT_SYMBOL_GPL crypto/cryptd 0x18578570 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x34e8b000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x3e8cc04a cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x7650399d cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xbb1ada60 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0xd5a460b9 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xddfc3a29 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0xd2d9c8c4 twofish_setkey +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x8d3ec33c drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xd78639c1 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0a886077 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2c305e31 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x365c8a00 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3d41aeb3 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x419908d0 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5312cde2 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x570eb803 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x616fc295 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x61798109 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x819567f3 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x82c1b752 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8a3f7217 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9b23fb6e hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xae010bc2 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb4b02c24 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbc63d0da hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc299d213 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc4f38ec9 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xce88cb6d hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd087b0f9 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd291e6d3 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd51149ce hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe6c12872 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0xeabbd786 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf0263128 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x1c6099ae hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x244f9ca7 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x65c54350 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x3528a4d2 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x7666e301 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xeb415d15 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x1c351dbc led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x423427c6 led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x5d9d6736 led_classdev_resume +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x9734cff4 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x0b8ef590 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x4a48d81c raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7110bc33 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbb055d7f ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf7fdae8c ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x027c0719 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x1c96d40b saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x3dab9d5f saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x3df2d9ed saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x7ef68416 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x9fdf3a42 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xa8a4cf52 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb415e00a saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb6068e52 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdc51ded6 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdfc4935f saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xf00cbf37 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0xa6426c18 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0xfce991f4 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x1849e191 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x058c8695 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xec08e56c tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x27603562 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xc582d208 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xf92eadf8 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xc3665352 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xf342b1c7 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x43638823 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1dcf7cd4 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x290feae4 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x29741dc6 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x2a574336 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x352c33fc smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5044f910 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5cbae6b4 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x600cd948 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x65cfb6d5 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x79578d9d smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8c9fcac1 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x92e62e41 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb0849c7b smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xbd91950c smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc3c8f2c9 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xce7ee9af smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd0fdb4cc sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe700c2f9 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xf71a61f1 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x69916d7b ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x8724980d ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0x8d3f9cab ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xa992ddbe ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe668cd73 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xe6cd950e ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/dvb/ttpci/budget-core 0xf34db4a5 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x083cb622 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0a9d36bd i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x311c8768 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x3790996f i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x48119e5b i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xaaf21892 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xb7b67023 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xfd629517 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x25957198 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe90b26c2 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0c59b97a pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x25c0fe65 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x33396efb pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4e3c4f13 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4edcef43 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5ae97c12 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x709318c1 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xd85f734f pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe82d2480 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe8af9ec1 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xea34d28f pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x085d2ceb pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x09aa7e2a pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x14398883 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x5e6f2b59 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xfee6341a pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x2833c04d sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x5c9825e8 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x8bef764f sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xadba9921 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xe0fdb4a2 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x5778472c ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x1397c757 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x2381bce1 wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x23a49565 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x2bc59374 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x357594e3 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x4247deb9 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6276986f wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6bb60c13 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xb1852cb6 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd965c305 wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe0755622 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf3e7f80e wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x0e2bd8f2 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x278af524 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2be7aac8 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4619879f wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x494247b7 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4ec724df wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x58ccd4f5 wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5b5dd98a wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5c1cff97 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x7eeec144 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x7f5e1688 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xb59c70cb wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd11f4bf4 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xe8ae08a8 wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf38844bc wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xffe9a8dd wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x1e84d890 wm8400_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xd227e82e wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xd30ce8ba wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xdf7d49ad wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x5b9896b8 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x7182aa46 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x77f67ae1 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xfbcd076f cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x04e295c2 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0862abf8 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x2ee3f196 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x8492f663 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x97c13aef enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xacd4a897 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xf647b5b1 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x092eb96b sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x114ee355 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x3e027940 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xaf071932 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xb148ddab sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xf1b61164 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x077cad32 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x27443539 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x28d49936 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x3655a34c ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x83069932 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x86f8d4ae ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8d33b531 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc7b5d162 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xd0631622 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xd794acc7 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdb56222e ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdd4f4ae9 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2375cd51 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2fbbe66e can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x596196d0 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x7574a329 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x8f069b2f open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x905edd42 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x9c078427 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc66f7a46 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xd152ca24 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xdeaf9217 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x2dd96815 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x4aceb08e alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xe738d8dd register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xefbbc18b unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x03253ac1 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x06be3aaa mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x16f0c54e mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x19b51dc6 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x20715246 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x252a573f mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x29c67940 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2ca427c6 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3434acb5 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3a06839b mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3fe5879e mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x44f1bdd8 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4703d4ee mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4d9eb576 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4f2a8fed mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x548b53c5 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5ccd81cc mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x68cc85c6 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x695a687c mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x768f073a mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x79828f0f mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8076b974 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x875e28ba mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x92f2f344 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x94999998 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x95887713 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x96361a6d mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9b5b58b5 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9d2ccabc mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa0089660 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa0245eb7 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa432f8f7 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaa3a5944 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab48673d mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab5eb24b mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xac8ace63 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf93954c mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb19d5fc5 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb2930cfd mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbba5bde4 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc54e55f7 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xca7a2c8b mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcbb25e67 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd5d83542 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdcf83006 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdf0cb278 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe6f2a1e9 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe7f5234e mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xeb37c6c7 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xeed1f818 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf6992224 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfb796e7f mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xff9b3dd6 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x45536a26 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x920756b9 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x23392e29 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x29e2b743 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x429411f6 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x60272012 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x67e83788 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xc7fe16f5 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x01785f5f usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x129b02a8 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x416ce72e usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x42f14af6 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x51f7ac7a usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5541de3d usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6b708944 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6c37efd1 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x77b76903 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7d7bd2ca usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x84c88416 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x87f1ddee usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x90a3b804 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9d6535f9 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa5f9d16c usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xaa64aff8 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbf479a3b usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbfde199c usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xcbbc05d5 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xce23d481 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xda95fd3f usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdc65943e usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe3c12f71 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe577f5a0 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x17008443 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x31b4760f i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x4cd985c9 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x508536b5 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x61b48bc0 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x6838c947 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7e651aed i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7e65ffdb i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd2cb02e1 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd4955b3f i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xda1a12e7 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf40fc0f8 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfbf57dd9 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1c820b19 libipw_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1f3d85f7 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x03a98c75 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x240fcd76 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x319935a7 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x427bedde lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x467c9910 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x60d2db85 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6cecb236 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7bf50120 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb3fb76c5 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xc5a987e5 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xc5bd7ec2 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xcaad5bc9 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xe71c54ad lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xee6532db __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xef2e87af lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x11a69492 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x37447f91 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x87c0c41b lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x9a7c5702 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xa73b8f23 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xb8dab04e lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc0240aad lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xe360c1d4 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x167e0979 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x8b8727ce if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x01a92d41 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x09638dd7 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7b047441 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x842b5632 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x8f129d31 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xb653316e p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xc8693fb5 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xed208040 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xfef11ecf p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1ef9b3e5 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2384ec29 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x33c05889 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4a0fe320 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4a0fff79 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4ea7d342 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5d94c5bf rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x793c239a rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7a6249b9 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7f7c02b5 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7ff57a1c rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa590f7e6 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa7025d71 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xae611242 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb6e86b25 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbf3e5cf5 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc1d8b6c5 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc2946089 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcb1f1351 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcd81ef99 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd1df8dae rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd898eb1b rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd9864dd7 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf1216dda rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x0394f4cc rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x19e1092c rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x2b75a35e rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x35585bd5 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x78c8f6d3 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xab76e1ec rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb07f9253 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb6555347 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xdcd430d8 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0221424b rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0bcf5e7f rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1417cf00 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x26580f76 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x4a19ec75 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x50859d55 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x654a7b2f rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x728108c9 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7606848e rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7984e266 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x82e25c81 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9df35a51 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xa65ce71a rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xb4caf2c0 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe757f892 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf64a43bf rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x1d54b4f4 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x30ee1c6f wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xb5a50d09 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x46059cea pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xfb94cd45 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x0b7147f1 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x9b9ac826 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xbe2a098e wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xcb73e072 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd7a71e2c wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xe4bdb4f8 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x39e4d9e1 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x97863571 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x029aa5a1 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x042a10eb iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x04efaad6 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0811fc60 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0da78faa iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x181f1b24 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x18aa7e8c iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1a7068bc iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1db8e75a iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1ee24016 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2a9fb2c4 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2d0cf3f1 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3308af87 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3b34cc8f iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x44eec73d iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x458e7d24 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5ef4a251 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x673a4b8d iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6e206d18 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x752d3a62 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76903ae1 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7c706d4e iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7e05abc2 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7f1b6d21 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8654f679 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8866726e iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x890e5e3e iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x89bdb199 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x91ff7cf4 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x93086cea iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9aa8fabd iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xacbff134 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb90da5f6 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbea76ac0 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc0e14c2d iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc5cf89a9 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xca66b25b iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd7db9099 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd7fb3de8 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe21699dc iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf4089e3a iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf52fe9b0 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0348cdc6 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x096d2526 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x133f2765 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x39247ead iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3fd1e9e5 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x442c7f56 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5f838817 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x83c6d94e iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa325233a iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb2fa5d65 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb9d8c6d9 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xbabc42ce iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc38a1a00 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xcb00ba62 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdedac6f0 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xfa658150 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x062abadd sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1a93129a sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x203bdb31 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x22c394c9 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x408290b9 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x46790fdf sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5c1de41a sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x722e1280 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7398c500 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7bdf5a6b sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x82777833 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x82b1511f sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9653ed34 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9cd5138e sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa45592cc sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa86f9c15 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa93d4476 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbf783578 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc7ce99d2 __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xda62a1f4 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe7760502 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf1468295 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfffe0985 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x832dcd89 srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa149e9a9 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa24abe37 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa488539a srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xd21fccdf srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xff6adaea srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x2c48a810 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x685b53c7 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x97c87e19 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x983c47de scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xa8c039fe scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb0d8684d scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb67c6d40 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xbb1b3a97 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf3e3bf7e scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0a11fcf4 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x185db3f7 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x213045c6 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2e2c6857 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x36be2c67 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5272d301 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5359eb57 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5d38c226 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x622849ba iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x72530057 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x74e966ae iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7b69e731 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9ccf0280 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa87b550e iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbc87d93e iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcf45a7cb iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd2bde1bb iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd8b349e1 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd9063889 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdd203368 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xded5569e iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe1bbcc35 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x7a645feb srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x7fd69d8f srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x99e1f878 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xa7874ab7 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf58abd3d srp_attach_transport +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x0d535627 pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x4808d5c2 pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x7db7be9f pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xdc240ed2 pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x2468ed34 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x579d2806 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x587711de oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x882d5f27 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf828c15b oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xf923a5b1 oslec_free +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xfabc3747 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x005098a5 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x23fdce0c usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x303d2383 usbip_stop_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x35e9562e usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x651c8caf usbip_start_threads +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x7bd2693f usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x819671bd usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x901caf5f usbip_task_init +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9223e709 usbip_xmit +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9314eaa1 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0x9ce83de3 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xa02e2d1b usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xa7fafcdb dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xd7343bb2 sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip_common_mod 0xfaf23889 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/uio/uio 0xcdde5d74 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xe257c059 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0xfe8aa2a7 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x04d0fbab usb_buffer_alloc +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x05da8b09 usb_alloc_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x0791aa27 usb_init_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x087229c1 usb_unlink_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x08ae1520 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x0b1ec89a usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x0b86269d usb_put_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x112b6609 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x18ab5c69 usb_reset_configuration +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x190df6ab usb_bulk_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x1bb083fa usb_sg_wait +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x1f8363bf usb_add_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2026b9fc usb_driver_set_configuration +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x20596565 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x20848d31 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2203924a usb_register_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x22982c80 usb_get_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x27e30404 usb_reset_endpoint +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3c77793a usb_ifnum_to_if +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3cafa192 usb_get_intf +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3d05e900 usb_autopm_put_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4391fade usb_root_hub_lost_power +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4420d5de usb_buffer_free +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4439330c usb_lock_device_for_reset +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x45990d44 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x468b79c1 usb_store_new_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x46c72860 usb_bus_list_lock +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4adde71c usb_free_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x519cfe86 usb_ep0_reinit +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x5b7dae12 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x5d5d9b85 usb_unanchor_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x5e0bcd37 usb_find_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x6349278b usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x6719d7d2 usb_get_descriptor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x677a4a64 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x69208096 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x69d9986a usb_string +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x6ed4739d usb_register_device_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x76010b6b usb_poison_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x79d2f8a1 usb_anchor_empty +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7acf1283 usb_get_current_frame_number +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7b2bc1fb usb_deregister_device_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8274d4f2 usb_register_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x83435844 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x84c104a2 usb_reset_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8561cbe9 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x86c3ca61 usb_deregister +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8b794dc4 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8d2831ad usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9289d929 usb_get_status +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x931e3e07 usb_deregister_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9335c408 usb_autopm_get_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x93a7195a usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x93e5dbf5 usb_interrupt_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x93f123c7 usb_kill_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x95849e06 usb_sg_init +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x98fe4d17 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9a7e542d usb_match_one_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa0913dba usb_buffer_map_sg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa2348ee1 usb_mon_register +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa29a1214 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa38c0d15 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa74b1789 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa795ab24 usb_submit_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xabe395a8 usb_create_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb264afbf usb_sg_cancel +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb2eb2a43 usb_put_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb356ec57 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xbfe7385b usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc1589027 usb_remove_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc65828ac usb_match_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc82c3c24 usb_queue_reset_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc88dfa29 usb_anchor_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcf1a7597 usb_get_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcfcaeab4 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd32f9a1e usb_hcd_pci_remove +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd492a409 usb_set_device_state +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd7bdc42a usb_hc_died +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd949c485 usb_driver_claim_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xdbe90736 usb_debug_root +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xdf11488c usb_set_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xdf295b91 usb_get_from_anchor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe00c3a27 usb_unpoison_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe0f3b494 usb_driver_release_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe1ea6b43 usb_autopm_set_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe2a132b8 usb_put_intf +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe2b06a33 usb_control_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe9251e84 usb_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xfe1e0a1b usb_get_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x0a8af4fe usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2f62b655 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x41bfad89 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x5c2fcdc6 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa021719e usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa3753e14 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xd7c3f29c usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xed003fb8 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf8a8077d usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x017eadb1 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2ae42723 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4138372d usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6b079f85 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7263f5ee usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7b599cdf usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x82204d4c usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x83041cfe usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x83af05a7 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x87c9be98 usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x8f57bde1 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb7d95753 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc50919db usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd0e518a2 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd200c7bf usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0704402b usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0cbbd7b7 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0ccfa3b0 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0ff1d60a usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x10f82c93 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x227b6663 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x34062fc4 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3538c81e usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3b54f345 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x45a123a4 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x460391f8 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x46ecb171 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x60f01c11 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7655dcbd usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8d8da390 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x91b85796 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x93b8d291 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9830d2b1 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb2c6df9c usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb4ad0cc5 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xcb819fbe usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xd0a4499f usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdeb5740d usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x09f3c921 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x56416f30 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x597a7dc8 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x7558164f wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8a9cfd16 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xab255b02 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x19096b77 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x3be71f03 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x4abaca3c wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x57d490e3 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9696098e wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xbb698b57 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc6f0f209 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xca014f32 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xd493c7e3 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xda41e48d wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf4e61f6 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe26df5b4 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe4b26bd4 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe6a7cc8a wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf1ea1b41 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf8807ff8 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x275ac102 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x3a9109f7 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x54a654eb i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1885a194 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x268be260 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x943bec09 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x96f9997a uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xa768d07f uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xb3aa3381 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xd001a229 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xefde0736 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x1ca1f060 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x4e86ed0f umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x61900d47 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x84b272d5 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x9c1ed202 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb7cf374f umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc7ae9ba6 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc9732964 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b11b463 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0e725dd1 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x11c776b3 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x12d8a2c7 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1f1eadbd uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2baf9ba5 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x35017aa1 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x356164df uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3d17fd25 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x45f2a191 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x47858022 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4da60469 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5763c71d uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x595b12ab uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5af6bb70 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x631308ec uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x63fbe76f uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6558f705 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x67db435f uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7140d3f7 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x84559ea6 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9bafa9a3 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9f5cf8a1 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa5e6c322 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa79aaa6a uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xaa7079a4 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcaab0a5a uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcb85889c uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd5200c29 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe6101ebb uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeac09471 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeae4394a uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf03306b2 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf17eea58 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf285b2d4 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf3e25fec uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf4f6071d uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xfe8f1afb whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1153d7ac wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1899e5d0 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x19095081 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x25e4c18e wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x28e29043 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x299fcae0 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x29b3b3c0 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x31d024a2 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x42bdad52 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4d7fb72e wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5286428f wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5d1cbb3f wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5f55e1fa wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x682a8d03 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x69139c0f wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7363104c wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8b33f6d7 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8f85f064 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9a268284 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9a3410ce wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xaaf6628e wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb7c29ebb wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbec6357c wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc90ac823 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd1e0f4db wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd955b579 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe532b7da wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xeed702c8 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf4a73073 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf61c97bd wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfd6016a1 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xff40d626 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0x65c62638 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x3fb8322e fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xcf9ff8af fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x6881f45e sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x854700bd sis_free_new +EXPORT_SYMBOL_GPL drivers/w1/wire 0x07145ca3 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x26b3f460 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x3865b4e7 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x4798910e w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x87f654e3 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x9ba1287a w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0xbf685c5a w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xddf1f7f3 w1_touch_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x36818216 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x371b8630 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x86a95670 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x6d50c270 exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x79b62fca exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x173d814b fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x2a5a47f2 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x2f09c3ef fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0x3b83e594 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x699f2399 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x76d79de1 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x7c839fd5 fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x82d6d6b4 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0x85abf132 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x8dc46137 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x928e3a9a fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xb7cafe04 fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xc8d69ac4 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xd1254767 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0xda89cdae fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xe7b729ce fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0xe9fa2646 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0xf4b1251e fat_dir_empty +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x3e4b29a9 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xafcef91c nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xba423028 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcfd7cb32 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6a6a467 nlmclnt_init +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xb41ecba6 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xc4dba49b nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x32277fc6 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x5a131cee o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x8ca729b2 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xcf2b92d2 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd4c08891 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xe7549e95 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xee9fbbf8 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x031bf872 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3185e9ab dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x78a80b2e dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x9911b29e dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xbd90157d dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfe5e83b8 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x474f7e3b ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a65cf95 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x8ed848ea ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL net/802/garp 0x28fd709f garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x8a68151f garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x91909fbb garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xa5b5a47f garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xc17f9b91 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xc3f8580b garp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x40fb3d70 stp_proto_unregister +EXPORT_SYMBOL_GPL net/802/stp 0x61bf1685 stp_proto_register +EXPORT_SYMBOL_GPL net/ax25/ax25 0x219de4a9 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/dccp/dccp 0x02a18e3c dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x11a034a1 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x12cafe61 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x13702298 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x15c12d77 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1c587bc9 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d28416c dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x21e9d48f dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x238167ce dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x28b8df01 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x35f4e490 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x433441f4 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5e25db94 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x603e2973 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6de80994 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x768335e4 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7b6eeb0a dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7e636d0a dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x848f82bc dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8bfee5e7 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8f73dc0b dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x91178e64 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9e0329de dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9e536a97 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa79bdcf3 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xaa6596e6 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb1e522b9 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc023a1f5 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd3a2fc78 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd70476b8 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe543e322 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe7ed8355 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe813dc62 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe8dea444 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x37f2c4ae dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x3be55c30 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x96f7439f dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9971007c dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xe240689f dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xeb7c4c00 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xb9c9205a nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x335d2dfe nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x83948d29 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x915fa5d3 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xa4814d4a nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xbca84f0c nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xbeea7801 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xfb031f45 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x516fc549 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xabc1217d ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x04df118a nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x07aec5e2 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x08e0607c __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x10873260 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x12234442 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x12a346d2 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1459852d nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1461c271 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x15c8e88e nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1e16cb75 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x220b746d nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2849ba0a nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x31e24d26 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3688f506 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x36e97308 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x372e187a nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3d4d75f6 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x461e34f4 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4be7dc6d nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4cf9e69c nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x58d42fd0 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5de16509 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5f0de098 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5f4d1a87 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x65c3980b nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6ae24d52 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x750f072f nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78cc379d __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7e02c1ed nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x806cfd96 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x82b3db34 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8b59640c nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8c0134a1 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x917b2d0f nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x94f1cd08 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x950b4d2a nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9993cdb2 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9b64985d __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa3b6ffe6 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa480108b nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa8c1c57e __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa9d02642 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb40de4d5 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb4334e64 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb5814133 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbed665e3 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc2ff5923 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc587d52a nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcca20b04 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd2499004 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd74558cd print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd8a1c29f nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbef8b57 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdd4a8570 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xddc081e6 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe0197f9e nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe353e251 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe5fca1d8 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf31e3ef2 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf5ab06ab nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xff162a3c nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xbe5202a4 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x03d5b1df nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x094738c8 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x1a44f1dc nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x1b18e932 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x4296a251 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x56e53f1f get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x7a0f6d88 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x9b047d33 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xd62b3ff5 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xea972236 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf5247fbf nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xf0d448ca nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x17bb7677 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x2af84157 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x6a810efd nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xd6f9ced8 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x68198de3 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x7ff49ec4 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x21e54a98 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2d1cb678 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x31eee5f6 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x41e4a6c9 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4324503f nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x69d0aa34 nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xa8696b61 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xcc6ab04a nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd2820fcc nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd5dc6115 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdf301711 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xec7a71c4 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x6cdbcaa3 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x588edc04 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x8d921645 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x36b0992f nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x374c2570 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa1338153 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xe7fe43c4 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x7e81dc1b nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x053f0ed9 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1f670c55 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x32670a0d xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5fa97203 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6c247891 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x88bcd720 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x97ceaadf xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x9b1c0a89 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa1cce8f9 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa93a456f xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xbd6cf51f xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x3d225a19 xt_rateest_put +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xa8ac8b53 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x084813dc rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x11c66f2c rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x1644ecbb rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x17afbca6 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x1de70fb3 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x2133f5e5 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x2db48b1c rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x333e5ead rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x34ca1643 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x3cc63bf3 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x4199e64e rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x50dc8f5f rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x631a68e2 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x6cbc7a05 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x71b2ac4c rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x776848b7 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x7820b698 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x894d32f9 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x96fafe85 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xa31ee5ab rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0xa9c2674e rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xbaf036ab rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0xbe5e0948 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0xeaac1f2d rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0xee8360e7 rds_inc_init +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xa8872459 rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xa8f8387f rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x0e04e060 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x18af8927 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1a855c8e svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x3aef9925 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x45abe27b gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x4c911e6e gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x5db8353c gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xbdc1f9d3 gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xcc144e21 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xcefd6cbf gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xcf688f3a gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x000d7999 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x03dd4197 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05301301 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0a1ba250 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0a2fef5d xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e2ca2d7 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f9fd9c0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15ce145a rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1a44183b xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c05c7ed rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c4b6bb2 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c84847f xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1d56c8d7 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f852a82 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x22a04db8 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x24a29168 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x263d3d69 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2750f82b rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x29c797ef xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2bca65de svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2ec7bd96 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2fbdaba2 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31467875 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x32f133c3 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x334252fa xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x36bca857 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38acf131 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x393a6dd8 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x394c930c rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d0f8ef1 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43bf6e8a rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x46c725f3 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b9de6de rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4baf4d29 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4ce6885a rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d1be535 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d80aaec rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50038e68 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5008dafc __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50488b8c svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x542c8969 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x56080347 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x58f86275 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b8276ab svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5c4b9650 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5de89372 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ecc2e89 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5f927ba0 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6153820d auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x62f42986 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6347d05b xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65e365c8 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6bac91aa svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5f4ac7 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d4cc0bb rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e24cd97 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x742c37b2 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x78e68dbe svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x79fea77c auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7ae10508 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7c2219cd read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x802ae78d rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83aeabe6 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x857baa9a xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86ed282a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x89a1fef7 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c4a4038 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c9f7f0b rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8ce6a780 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8d5104e7 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8f27ca94 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x900c7613 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x920a665d xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x926c51d9 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x942fd712 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x957241cc xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x964d75ef rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x97f62212 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x98b74750 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x98ccc5b0 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x99ca4ecf xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9b9d9d81 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9c0360d9 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa022574c svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa2da6701 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa300db5f rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa303a507 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa364fa54 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa7b34f4b svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa82591e2 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa9227839 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa9dccde1 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaba78316 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac1f1446 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac9bb268 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac9d21e2 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xae22eb82 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafee0eb8 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb0050ddd sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb0caef9d xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb10edb89 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb2304b5a auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb65450a4 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb88dc3b0 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc1faba88 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc25689f9 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3d59489 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc4384ddf rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc82d89e7 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc839ce47 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xca601a2d svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcb9a50e6 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccc2372e rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce58b545 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce848fea svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd074046a xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd1185b4e svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd38d7577 rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5f55f9f rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd88114bc rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd90dcfbf rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xda27427f xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdadd4174 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcc31991 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde16cd22 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde3f5701 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfec6c67 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe49e2e88 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6ec8423 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea25b08d xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeabe8be5 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xebd39d57 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xed9a16a1 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf48eec6e xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf600f34f xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf614edd8 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf78fbf98 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf94c9351 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfaf1d404 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfd7718d9 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfe9983f7 svc_authenticate +EXPORT_SYMBOL_GPL net/wimax/wimax 0x05dff12d wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x1752cd22 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2aa37e68 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x32edadba wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x4693b517 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x559f966b wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x5ec9adbe wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x5f65ca36 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x69b4796e wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7b7b9cfd wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x84458a0d wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x94dd95c2 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xca1b17be wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x021d306b cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x17cfeb0b cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1d6de223 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x29e52eb7 cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x35169f4a cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3568e91e cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3811d72b cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4068abdd cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4589a225 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4758a3cf cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5fd13b6f cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x617ef8be cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x65dddc2f cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x87cddd3f cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8ee8f989 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x910699b0 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x925c7a14 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9383b545 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x956c7206 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x975ab3fa cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9a654b95 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9cab7321 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9d554387 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9de12c2c cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xab94293f cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb449a64d cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xce4fbe41 cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xda5b6ff7 cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe199a4df cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xeb9b690f cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xeccf2f9e cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf4aa7e78 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x123042ff ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x4f0a8d97 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xa2ad013e ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xef0c25ca ipcomp_output +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x03180d0b snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x052f3ccd snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0a3af8c3 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0bdd172f snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x14549042 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x15901e8f snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1ae76c35 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1dc80048 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x294357c7 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x29c1bc80 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2cdac128 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2e52b3d2 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2f936f29 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3fc9c113 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4a6d82a8 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c04f856 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4f78c2ae snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4fe5bf6c snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x506cf5f5 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x51330137 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x536937ce snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x62c74eb4 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x652a2eb7 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65c4914a snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6b36baa8 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6b469a55 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6c3e8523 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6e1b1e2a snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ece5185 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x70946bdc snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x71a6e319 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7324f5f7 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7b2077a8 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7bdefd85 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x806fe549 snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8165482e snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x83bb205f snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x88d1463e query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x922c6444 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x923eb87b snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9309edbc snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x98afbf21 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9f64a953 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa13188f4 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa6381419 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa695f713 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xae55b8d5 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb414b6b9 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb8c302e9 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb9b5be58 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbad1b6da snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc7e18d5f snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc8a7bcb8 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc8dcd05d snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcbf1a87d snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcde3e3ab snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd12a8e64 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd2ab4ed6 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd373fb26 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd53e1b45 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd7ac383d snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdbfcc732 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdf15f934 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1f0de00 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe2c10351 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe9cea2eb snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xec1c8482 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xedd9dfbc snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf2b77dfc snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf4d8aeb0 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf84412a6 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf92038ed snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf981072a snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfb86bbd3 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfda7dd17 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x7bc7d535 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xbd7ac0bf ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x9d1af874 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xe4d599e3 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xbc6eb64f soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xcb37f1a1 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x5f483c10 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xce971371 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x546769db max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x61d18f0f soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xa23d3fb1 pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xcc3664b3 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x0bda1728 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x6a648ac4 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x18c04b33 tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x8356cb50 soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0638acfe aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x09ac4df9 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x1cdc93e3 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x241c1f5f aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x7e05f4f0 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x82fbf266 soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x850517d4 aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x8b5aa872 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xc5e902cc soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x045164c9 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x35eb58a0 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x391adda5 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x6760f9d7 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xd304f0ff wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x41971eeb wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x548b3895 soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x9fc78175 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x196a3855 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xcf97c2c7 soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x8d811e20 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xf721f535 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x405d9d06 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xa4eaf3ba soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x825025af soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x918fe7ff wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x68bf6ab8 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xed17e2fa soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3d173384 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xe9c730c4 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x20817e77 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x414bd65b wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x0bac2db4 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x6a719b7e wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x755f0d9f soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0xe352fde1 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x06f9ebce wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xc695cbaf soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x806d9960 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xedb8986c soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xc19c6373 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xf2b6cfdd wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x6529def4 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xc218b71d soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xae750d51 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xdb03865c soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x080206e5 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xdac1ec6b soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x58cf9756 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xa7b6182e soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x005f101f soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xd94527c4 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x9361ae1d wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xc944f020 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x15f5dcb3 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xe269a3e3 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x91f5cd6c soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xf67e7964 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0137e355 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0491ded3 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x04f1985d snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x067a7f7e snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x08d30e3e snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0a4c9c9e snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0ae32a65 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x11be9fb8 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x13e70d96 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x14a41619 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x201968bd snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x202c5894 snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2181172d dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x26d8f345 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x29f01ae6 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a75dbd9 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2af98ddf snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2baafb64 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2f470fca snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x33ffdcc9 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3c7a5eef snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x41c71791 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x48c5a973 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4e3596bb snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4e4255e1 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x509d722e snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x525067ab snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x562ddddd snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5674eeac snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x581ae258 snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5b666f4d snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5c2276d8 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5db5b92a snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6ac2636c snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6cc90e77 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6f335d94 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x721a5c71 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x83d01c04 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x85e28271 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8ae476f8 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8e963c62 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x909b9266 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x952f4bd8 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x99a21a29 snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c1ab9bf snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9dbab1f0 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa65d86b0 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa8b3c94e snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xae6b3c0c snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb81539d4 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb8797a61 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbc7be300 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbd36fd63 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc3b0cebd snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc593cc64 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc654d40d snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc6cbfb65 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd19ba314 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd356b691 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd5fcd288 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xda64fa0d snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdbf335ff snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe201e401 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef9ec5e3 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf012f261 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf085995c snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf4f134f4 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfd17f6de snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfe9a99d3 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xff529a14 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xff9b3e96 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x24e660a0 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x67ed7575 xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xa3b7474c xv_free +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xbf39bf05 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xc96aa6af xv_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x0052f07d task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00e8a9a5 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00eb9013 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x014a1038 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x014e5f46 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x016c221c tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01b6ecec dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x023b99a2 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x024bfcfa fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x029373c1 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x033b10dc pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x0380ac6e __class_create +EXPORT_SYMBOL_GPL vmlinux 0x03886af6 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04c46401 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x04fa733d tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x052f7ab3 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x056f57e1 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x062a5352 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x06c9187e scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x06d13f1f ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x06fd9610 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x06fee7ad ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07c0ab41 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x07ce7344 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x07f74407 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x087bf1d8 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x08863fef tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0x08c6c60b led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x08d17de8 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x090fc3fb security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x097e724b ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x0991b88b blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x099e4c32 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x09d63f0f devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x0a6633ef page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b87bfe5 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x0c0c41a5 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x0c1adb4f __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c8fd574 queue_work +EXPORT_SYMBOL_GPL vmlinux 0x0c95f2b0 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x0c9ece70 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cbdc546 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x0cfbf069 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x0d01bc7c fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x0d076c16 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0d6aa66b crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x0dd6384a debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x0e00d7a6 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x0e0523fc crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x0ece1a35 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL vmlinux 0x0ef6a81c rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x0f4cf1bb device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0f5b9d65 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x0f7c3f8f blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x0f8830a7 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0x0fac806a register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x0fe49f65 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x1031ee2b register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x103b4bef dm_rh_bio_to_region +EXPORT_SYMBOL_GPL vmlinux 0x1040c602 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x10f89ada __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x110d93e5 register_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x112a71cc del_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x112e5e48 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x114de71e ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x116e4484 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x11e438b6 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x1242bbc6 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x126b63cb ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x126e6c04 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x12865e55 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x13140295 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13e589e2 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x141f55e4 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x14485194 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x1449f832 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x144ca71b klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x144dff2e kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x1454b760 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x146d606f class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x1496b007 ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14a967e0 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x14bd3ed3 dm_region_hash_create +EXPORT_SYMBOL_GPL vmlinux 0x14e636cc ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x151511bb inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x15195508 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x15293a0b flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b34a6a pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x1684ef0d sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x16f76869 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x174b19a1 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x174c0954 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x1764aabc sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x1764dd34 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x17bedcc7 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL vmlinux 0x17e1eb9d rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x17f04448 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x1872703c fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x18bde2a3 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18e307ae crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x18f91b25 pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x190836c8 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x191fb096 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x1972c35c attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x1a13f60a sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a399f32 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a64a6c0 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x1b1d1049 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x1b7f9f8a klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bf7ebbc disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x1c59d206 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x1c6ab350 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1d45cb3c dm_rh_get_region_size +EXPORT_SYMBOL_GPL vmlinux 0x1d667a1e bus_register +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1da1a0bb get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x1da53a20 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e35f72d sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1ea483fb rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x1ea9b92e queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ec0efe9 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x1ed1fb6e sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x1ef1004c regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x1f17f367 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x1f3ba059 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x1f9089fc blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x1f9bbf49 device_create +EXPORT_SYMBOL_GPL vmlinux 0x1fb722ff regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fdae3b2 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1fefdae5 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2011cee3 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x202873d4 sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2061f726 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20cd594e br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x20ddf9bf firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x215bcbe0 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21615692 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x21ef7173 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x2254264e sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22a70925 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x22ccb60b class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x22e2c20b atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x22ef16e4 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x232e2db6 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x235901b0 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x2362ecad platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x23746d11 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x23789fe7 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x238165de devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23869dc7 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x238dad4f rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x241db1df user_update +EXPORT_SYMBOL_GPL vmlinux 0x241e61c3 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x243729aa debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2441d77f ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x2493924a ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x24d403ce ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2511d154 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x258a9d59 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x25ae25da tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x26677e14 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x26bc4cae posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26e37579 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x2710a04c debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27c11ca1 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x27dac840 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x28063096 ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0x284aa0c9 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x284d9e39 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x286e062b sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x28acab0d ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x28b2cc80 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x29adaa7a crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x29baf2de simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x29cc3660 add_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x2a0f43a8 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x2a65bf19 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a90b1d9 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x2ae1062b get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x2b014cef mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x2b1d46e8 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x2b704ac5 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2ba20981 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x2bf67733 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c4ae89e inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d10c819 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x2dd8444c trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x2df0387b pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0x2e105ed9 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x2e1f49df inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x2e3b261a attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x2e3d08b9 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e611142 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2e734d0a debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x2ea8cc50 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2eb59e56 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x2f78cc41 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x30152de8 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x307cf300 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30a69226 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x31381331 unregister_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x315b89b6 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x3172c8d5 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x31d8db1d class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x321df465 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x3283c148 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x328b5c6c pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x32b6dfe6 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32d9e45f da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x32f415db pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x3399e5f8 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x33aaee69 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x33c576de ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x33de75a9 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x340f654b pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x342edb92 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x346031e8 bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x34f9734b scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x3576b4fe fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x35d251f3 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35fe0b7b fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x3603813a sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x360afc8b unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x3613b204 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x363157cb sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x364debc0 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x367464b7 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x36846ea1 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x3686ffb8 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x36886841 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x368bdcc7 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x36a08832 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x36ae4ca6 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x378da9d9 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37e41008 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38e8fb78 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x390ac669 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x393e6e9a eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x394e2c5b dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x395108a7 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x396b7558 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x39819646 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x39b2924d tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x39d65da8 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x3a3e292f ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x3a415ca8 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x3a6977a0 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x3aab337a driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3aac458e proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x3ab17bf8 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0x3abc6fc2 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x3ac203c9 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x3adb362c eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x3aee5878 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL vmlinux 0x3af5d9c7 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x3af74f71 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x3b687833 kill_mtd_super +EXPORT_SYMBOL_GPL vmlinux 0x3bc33f65 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x3bd7d2bc disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3c13c976 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x3c4ca177 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x3c4ec62c unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cfda809 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d17f6a6 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x3d21a254 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d59bb59 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x3d6e106b debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x3d7187c4 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x3d9cce31 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x3dd1cdf1 ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3e52ba62 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x3eaf1289 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x3eb21380 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x3ec9b383 dm_rh_dec +EXPORT_SYMBOL_GPL vmlinux 0x3ef7cc22 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x3f01570a probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f26878c pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x3f6204da i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x3fbd38cd pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x3fd29f0e devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x3fde26b6 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3fdfb39d ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x3fe4b685 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x3ffbbbd4 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x40127b0b class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40e94e31 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x41640636 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x41d83ef1 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x41df969d user_match +EXPORT_SYMBOL_GPL vmlinux 0x422b8050 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x422de149 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x4249b016 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x429839c7 scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0x42fefd60 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x43108ddb disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x4349ab8d debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x43b3bf39 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x43d8d54c led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x43da657b device_register +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x44032987 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x44126ac7 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x4418da34 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x4420277a cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x44358916 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x445bbfbb sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x44778732 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x447c49b6 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x449386ad fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x45182252 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x457dc1a5 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x4588ad03 parse_mtd_partitions +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45c6ae0e inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x460b290e ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x46400f50 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x465bd506 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x4689d917 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x468f618c skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x46e1bb00 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x46f3b6de scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x46fc7513 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x47544cac sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x47695c9a __class_register +EXPORT_SYMBOL_GPL vmlinux 0x4799497c rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x4806f6c7 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x4863259b driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x4866812e crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x487380bd crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x48b4401e ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x4900428c register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x498381b9 dm_rh_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x498a9304 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x498ca32e pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4ae5a3e4 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x4afff1e3 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x4bb147dd crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x4bb1efdf sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x4bc920c1 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c848371 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x4d2584f0 sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x4d37968f inotify_init +EXPORT_SYMBOL_GPL vmlinux 0x4d4c104a tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4daa0ee5 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x4e43ff51 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x4e50c5f5 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x4ec86886 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x4ecaf557 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x4ed08e8d crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x4f6ab79e ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4f6ecfb1 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x4fb63f71 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fe08422 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4fe81a1b find_module +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x50cde177 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x51347d59 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x5139d13b tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x514c892c file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x51caefd8 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x522cfa10 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x52758dad inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x52a2bb9a crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52d1a2ba cfi_qry_mode_off +EXPORT_SYMBOL_GPL vmlinux 0x52e8736c crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x5326b6f2 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x5390f934 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53e7baf3 register_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x5415375a crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x542a37d8 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x549ba9ad simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x54b4ca7c ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x54f4e1aa register_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0x551d8d2f hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x5542b913 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x5572840d sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x5596d891 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x55b1e7e1 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x5659d6a8 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x567fcc28 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x56966617 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x56d42418 thread_notify_head +EXPORT_SYMBOL_GPL vmlinux 0x56e9918a aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x576e0f5d ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x5774fea7 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57a74c6f fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x57fdbb14 cfi_qry_mode_on +EXPORT_SYMBOL_GPL vmlinux 0x58157640 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0x58365674 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x58509659 cfi_qry_present +EXPORT_SYMBOL_GPL vmlinux 0x587f8913 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x58d284ad led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x58d3c37f tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x592455e3 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x59249925 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL vmlinux 0x59450eaf regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x59ca3224 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x59dd0da1 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x5a48f457 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x5a543d32 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x5a6e9d20 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5ac8ec2d fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x5acf2882 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x5aebd844 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x5b8ba6df devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c1db3d8 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x5c5f17e2 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x5cc248ee md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x5cec0157 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x5cfede94 dm_rh_delay +EXPORT_SYMBOL_GPL vmlinux 0x5d0f57c6 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d19f076 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x5d4a4572 ktime_sub_ns +EXPORT_SYMBOL_GPL vmlinux 0x5d58ebdc crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5df8b4f3 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x5e30ce28 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x5e380c43 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x5e738848 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x5e7836dd tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x5e787b27 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x5ea40244 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x5ee1160d register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x5f078e8f crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x5f159e16 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x5f1cced5 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x5f387f6b dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x5f49ebd0 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x5f6583b7 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x5f9ca9db tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x5fcd39f2 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x604e70d3 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x60623e75 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x60668857 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x6085afd4 dm_rh_start_recovery +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x6119258a crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x613d9c10 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x615679cd drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x61c7f335 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x61c8ea20 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x61caac2f rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x622b3e2c srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x622f1c0f fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x6231efa2 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x627a1313 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x631cf71e kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x6476cbe5 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x649e9592 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x64d12cee ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x660c1d33 mtd_table +EXPORT_SYMBOL_GPL vmlinux 0x6614ec5c rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x6622a85d pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x663b0c6d input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x6676d9a0 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66cc153c fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66f3d018 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x6749b550 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x675b1831 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x679abbe2 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x67d5915f sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x67d9ef27 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0x683c94ef kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x685c5de4 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x690df46d ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x6911bdbc user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x69433cfd shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a3a6748 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x6a5536f5 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x6a67e474 default_mtd_writev +EXPORT_SYMBOL_GPL vmlinux 0x6a6a90b5 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x6aa4f8b6 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6ab0a014 sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6adb1eaa scsi_dh_detach +EXPORT_SYMBOL_GPL vmlinux 0x6b0e1613 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x6b133cf2 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x6b184c8e inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x6bc9e989 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x6c0816e3 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c528db4 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x6c5d01b2 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x6c8a1f4e scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c922418 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x6cab29da ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x6cf07267 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x6cf82ba8 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x6d19b991 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6d27a9eb regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x6d2c9261 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d3a59fb crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x6d50e282 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x6d5bb525 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x6d64d455 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x6dc171cd aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x6df6d520 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x6e63f648 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e7b5f1f pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x6e9b5048 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x6eb639fe scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x6ee2a94f platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x6eedbea4 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x6f03a075 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x6f4113aa bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x6f5dd92e driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x6f853a8e inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7033a466 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70d60cf0 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x71424bac driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71653338 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x71773d91 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x71be7335 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x71f9246a leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x72039f0f inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x727cebbe inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x72bbb0ec page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x7338f8bf scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x738b0da1 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73e4ae7e sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x7408f988 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x7411cd1c sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x744297f9 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x74580c76 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74e39c3e sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x751d7593 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x75240f23 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x755efe14 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x75604521 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x759b3e95 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x75ce9f0d regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x76c16bf3 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x76cff3e3 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0x77199f61 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x7764e561 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x776e35a4 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x78138091 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x781acb7a __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x781ba4b2 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x786f2c02 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x78843913 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x78af7c8f init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x7907cd18 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x7911c768 dm_register_path_selector +EXPORT_SYMBOL_GPL vmlinux 0x7924ed63 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x793f5cf0 device_add +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x7948d109 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x79dd5ec0 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x7a14eee9 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x7a2fd3c8 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x7a847c23 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x7aafc51b fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7aec00b6 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x7b00f4e1 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x7b284423 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7b398cab platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x7b3d39f9 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x7b4b3253 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x7b5b1f3c uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x7b6b8daf fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x7b99c7a3 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x7bbef720 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x7c2eb9f7 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x7c595934 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7c632196 register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x7c6784ef ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x7c7a4150 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7c9a2ba8 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7ccb5fd0 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x7d0b8edf __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x7d357456 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x7d3b5058 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dc8678c inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x7dda35ef ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7eb7b6cf sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x7f6568c5 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x7f9a6319 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8011c977 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x8021fbbe ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x8033bb17 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x80fbf82e anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x8101e56c dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x81284a03 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x8141860a bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x814df564 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x81563be6 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x81ab5e5c __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x81dded66 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x81e35da3 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8210ebf7 queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x829c4d85 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x8306470a sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x83161156 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0x834d0c11 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x83553786 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x836d2cc9 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x83b6014a ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x8412e3c5 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x8444c619 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x848086e8 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x84bb8148 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x84d6cf68 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x857e9b6d mtd_erase_callback +EXPORT_SYMBOL_GPL vmlinux 0x85a9a146 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x860b9b02 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x865ddb2f ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x867fcfbf ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x86855d32 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x86875836 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86ce34e1 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x86ff1104 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x873642f3 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87a0f254 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x87ac1bc6 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x8850c7d5 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88558b82 get_device +EXPORT_SYMBOL_GPL vmlinux 0x8873613e sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x88c6dbe4 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x88f3423b find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x8905755c ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x8926e70b crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x8932ab36 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x8935816f user_read +EXPORT_SYMBOL_GPL vmlinux 0x896c712c platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x89942a4a rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x899b2c5a ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x89cc6f85 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x8a66a8f6 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x8a703080 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x8a95326a kmem_cache_name +EXPORT_SYMBOL_GPL vmlinux 0x8abf32fd blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x8abffa79 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x8ad2b2cf ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x8b49b83e rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8ba5b318 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x8ba72a0a rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x8c6dea5c __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x8c827784 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x8ca37080 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x8cb66c27 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8dbb8003 dm_rh_get_region_key +EXPORT_SYMBOL_GPL vmlinux 0x8dbc967d rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x8e15a0d7 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x8e731d39 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x8eaf3f73 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x8eb2a9fa find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x8ebffe9a get_mtd_device_nm +EXPORT_SYMBOL_GPL vmlinux 0x8ed84b02 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x8f45ca6c blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x8f64f15a device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x8f6a8bcc hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f990e67 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fb82518 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x8fc434ed __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x8fe40778 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x90169f9a skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x90236cc2 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x904f6bf8 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x904f8bca inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90d07e18 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x90db69c2 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x9110a15b sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x912742a6 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x9170bbf3 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x918e1824 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x91ea1d26 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x92297c6d __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x923ba2d2 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x923d5a52 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92e70cde power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x92efca2d __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x93159d7c disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x93404e04 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x934943f8 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9366b779 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x936f4cfb securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x93c45562 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x93efe700 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x942d9275 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0x9474f068 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x94a47cfc dm_rh_region_context +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x9506403c tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95b86ca4 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x95c5b1d5 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x95d8f1b9 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x96494df5 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9701e5b1 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x975bdb3c class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x977389e9 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x97a1c429 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x9818cddb clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x98196f5b blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x984bdd84 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x988a2772 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x98bdd6ca blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x98deb6ba module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x9905328f ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x991a4aa2 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x992040e2 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x992403a0 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x995cfe86 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99688aa6 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x9991e6d9 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x9a112161 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a3539d5 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x9a3b914c platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x9a739997 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x9aa10cda rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x9abb70c6 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x9add2b58 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x9b031ce6 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x9b1aa664 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x9b1e5151 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x9b683b45 scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bd11a65 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x9bfa85cd tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x9c040de4 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x9c05c7ef __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9c11db7d unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x9c3d0443 ip6_dst_blackhole +EXPORT_SYMBOL_GPL vmlinux 0x9c3e1a6b devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x9c6015f6 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x9c60fd34 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9cb9431a ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x9cc8f829 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x9cdcdd13 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x9d05ffbd crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x9d1d57a9 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x9d373da0 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x9d3fff1a da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x9d986589 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x9dd08aed ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x9e21f790 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9f2106ec ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f4e70b3 put_device +EXPORT_SYMBOL_GPL vmlinux 0x9f760d2c driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f90bb56 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x9fb6a0f7 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x9fc279fc get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa004d3e3 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa0c07bda elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL vmlinux 0xa0d016ba regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa141cf58 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0xa160dd00 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xa175ecfd input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0xa1c0864d mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0xa217f212 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0xa26dbbe4 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xa30af108 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0xa34ff5e6 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0xa3758ac4 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0xa3bf89c9 rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0xa3c59a17 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xa3cdef40 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa421405a security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0xa4a21c38 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xa4bca3be device_attach +EXPORT_SYMBOL_GPL vmlinux 0xa51ecc6a fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xa57afc74 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xa5919f4e device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xa595f85f locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5da6d18 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xa5dd6fae arm_pm_restart +EXPORT_SYMBOL_GPL vmlinux 0xa5ded5f5 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa60e5701 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0xa65f9329 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0xa6edf1dc ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa719fd13 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xa72119b1 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0xa72f885c enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xa73af30c scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0xa759a422 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0xa8283f5c pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0xa86de13c sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xa86ea2e1 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0xa87e3428 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL vmlinux 0xa8cdb44e inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0xa8cdc826 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xa8eaabf2 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa95479e8 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xa995f20f regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9f47e25 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa9fcae4b bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xaa15f606 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa44aa45 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaa3bad0 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xaaa4e085 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xaaea0ff4 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xabe75710 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xabf19ec5 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL vmlinux 0xac03f0bb platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xac7b03d6 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0xac8191f9 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xac9a2298 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xacaf4704 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xacd95b4e crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0xad03a8cd ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xad054ccd get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xad6f9bf5 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xad765e39 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xadbde459 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0xaddba396 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0xadec73a7 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae2fbecd sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0xae74bada fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0xae8c2090 put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0xaf3b7b70 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf488c18 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xaf79af30 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0xaf88efa3 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0xafdb2c8b device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xafe0af7d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0xaff5b686 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0xb041fb4a ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0c12a15 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb0cb520b devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xb10cae45 get_driver +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb16e8f04 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xb17de8cc device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1ca6e5f inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xb1dcb981 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0xb249cef3 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0xb28c57aa ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0xb2d104e8 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0xb2d30f88 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xb39fc941 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb3bf7f36 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0xb3e56d07 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xb4444837 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xb449ed11 mtd_table_mutex +EXPORT_SYMBOL_GPL vmlinux 0xb4a4b9fb blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb50ca928 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xb56a2c13 elv_register +EXPORT_SYMBOL_GPL vmlinux 0xb57632c3 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0xb5869004 dm_rh_get_state +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5d7abec relay_close +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb693efc1 device_del +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb7012ec3 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7eb42eb ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0xb7ec20f3 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xb86a478f inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xb8759c2c srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xb8780f02 dm_rh_recovery_start +EXPORT_SYMBOL_GPL vmlinux 0xb89ad849 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xb8c08207 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0xb8fee532 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xb917b6d7 return_address +EXPORT_SYMBOL_GPL vmlinux 0xb983d47e sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba0988a2 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0xba3e67e2 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xba54f84b crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xbabf93b4 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbaf07662 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0xbaf7a7e6 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xbb49daff ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0xbb9a2c75 ktime_add_ns +EXPORT_SYMBOL_GPL vmlinux 0xbbb44bca da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xbbba10d6 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0xbbcb6b3b rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0xbbe3d78a crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0xbc064e62 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xbcb66b1d net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0xbd755f07 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xbdb829ac relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbeabd021 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xbeb26d39 dm_rh_update_states +EXPORT_SYMBOL_GPL vmlinux 0xbedc62da schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0xbeea7a2b srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbf785742 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0xbf7b412d ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xbfae6c7d ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xc0094018 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xc094027c default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xc0adf939 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0xc0b1a511 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0xc0b2ba84 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xc0b9fc5b sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xc0ceda69 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0xc0f405a9 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xc11a3333 __module_address +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc14f5649 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc2c96116 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc2df73ce pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0xc32e1979 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc337a4a5 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0xc33f833d regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc3527505 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xc362d06a md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0xc38fc193 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3de13cd fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xc3f1a70f sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xc417fec5 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc42069be debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc44336a9 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0xc4591833 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0xc46d70ea ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0xc4841bc0 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc496aadd put_pid +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4bd39d3 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xc5752d99 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0xc5efdc59 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc68c50e3 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0xc6932563 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xc6ebf8ce debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xc6ffcb2d init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0xc721c0b2 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0xc7477c87 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xc831b8c9 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xc85122b7 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xc8520f5c rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0xc8825ec0 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xc892ec42 input_class +EXPORT_SYMBOL_GPL vmlinux 0xc8a21b88 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc93ce029 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xc9516205 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9a442e7 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0xc9e6e8e7 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xc9eba7ee power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0xc9ec106b tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xca153467 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xca39d70e ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca87448f proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0xcaa54810 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xcaae7594 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xcabbf29a xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcad1e3c9 use_module +EXPORT_SYMBOL_GPL vmlinux 0xcb0c2ebf __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xcb25def0 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0xcb51cabe klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xcb7de357 dm_rh_inc_pending +EXPORT_SYMBOL_GPL vmlinux 0xcbdc564e fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc33b832 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xccc59db1 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd0aad01 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0xcd750964 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0xcd8b1f2d dm_rh_recovery_end +EXPORT_SYMBOL_GPL vmlinux 0xcda27770 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xce3acc15 pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0xce3aed14 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0xce429bd7 put_driver +EXPORT_SYMBOL_GPL vmlinux 0xce916408 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0xcea58157 get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0xceb496ba get_sb_mtd +EXPORT_SYMBOL_GPL vmlinux 0xcef694e3 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0xcefc1212 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xcf4e9da6 gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xcf9fd3e5 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd08c60a8 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0cb70e1 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd17e9e6c __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0xd1debd78 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0xd25ab479 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0xd261f035 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd29dd74f input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xd2ae5dac platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xd2be153c queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xd301f990 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0xd331fc06 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd3ea37a4 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0xd3f4fb18 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0xd4187efe find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xd41c8f55 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0xd438a142 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xd43e2078 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0xd448446b crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd45195ad crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0xd4663bbf rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0xd4808612 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xd495038d unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xd4cba878 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0xd4f3fe7d sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0xd517df80 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0xd573869a kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0xd5774ffc scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0xd5ae5e82 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xd6940e3f crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xd6c4fc34 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xd7234f5a ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd741cfcf blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd78aaee7 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0xd7dbdfbd blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0xd821964e add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0xd844e3d8 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0xd84e4e0a fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xd8e7da0a ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd92456f2 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd92859a6 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xd9300760 unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xd9b8d7af sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda431189 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xda5d4156 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xda797b9b ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xdab79b08 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb133116 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdbb9e9b6 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0xdbf3a761 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0xdc035453 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xdc7bc167 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0xdcaa55a6 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xdcc5e472 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0xdcdb2643 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0xdcf65061 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xdd2838d1 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0xdd38a3ab ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xdd52a8d2 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xddaa40a2 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xddcb86b3 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xddea1370 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde877886 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xde88939e deregister_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0xdecb002f inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xdf2b2178 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xdf4010f2 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xe0935a57 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0b8ea58 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0f66a30 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0xe28c839f rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xe29096ed ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0xe2ba19cf platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0xe2be2701 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xe2c6cad6 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0xe304cf97 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xe320926c register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xe374100b debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xe3946d2e mmput +EXPORT_SYMBOL_GPL vmlinux 0xe3966fb4 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0xe3c09f0f skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xe3f0aba5 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xe40357e1 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xe40711cc ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0xe45d5467 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xe49709d5 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0xe49e1f6c ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4d1e463 inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0xe4e5765e anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xe505ae7c scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0xe5213e55 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0xe524ddb7 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe56ab231 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xe5923561 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xe5ab6850 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xe5ec6368 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe635d554 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe66dd9cf dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xe6c9f355 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xe6dc208b dm_unregister_path_selector +EXPORT_SYMBOL_GPL vmlinux 0xe6f9c777 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xe706fcb1 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xe73c18e0 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0xe84993e0 dm_put +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe8789a12 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xe8a05146 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe917e733 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0xe92b70ad shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe99d3880 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0xe9a6a22f pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xe9c1ee33 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0xe9caa231 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xe9fec34f tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea0da1d7 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea3fffb0 register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xeaca9f32 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0xeae693b7 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeaed9df5 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xeb0e85f4 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0xeb22e382 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xeb2b2d7b vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb4e89f6 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xeb99044f inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xebe65aab eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0xebe89ccb rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xeca99ac0 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0xed00079b dm_region_hash_destroy +EXPORT_SYMBOL_GPL vmlinux 0xed48ed2f da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xed4e6718 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xed4f298f ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0xedb49cec device_move +EXPORT_SYMBOL_GPL vmlinux 0xedceff04 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0xee3cfe9a crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xef0ecd30 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xef151662 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0xef4bdfdd dm_rh_mark_nosync +EXPORT_SYMBOL_GPL vmlinux 0xef4e963e __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef82fdba srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xefa378aa debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xefd18aab devres_get +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe21106 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xf06ef26c get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xf0ea66b8 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xf1076c7f cfi_cmdset_0001 +EXPORT_SYMBOL_GPL vmlinux 0xf1463412 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf177ba3a shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf18edc86 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xf1ec4af4 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xf1f171d7 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xf22e2d79 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0xf24071cf hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xf2450ac0 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0xf25dde65 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xf263651c blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xf28e808c dm_rh_flush +EXPORT_SYMBOL_GPL vmlinux 0xf29ae551 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0xf2d739d1 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf3137b57 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf34c95cc disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xf38a0a5b device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xf3c7a91e sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xf3e5c72a raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0xf403b51c dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL vmlinux 0xf4235deb tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xf43d17e6 deregister_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0xf47a7b27 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0xf497a3ba crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4a46f4d user_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf4c8cb79 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xf50dde5f inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xf51c75ea ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf5446db6 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf57f51bc scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0xf5a2e080 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf5a50701 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf6b1f52a init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6be51bc dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xf6c63649 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf70fa8c3 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0xf7fbc574 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0xf807fd65 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xf83248cd blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xf856b9f2 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xf863e82a flush_work +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8dbc220 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0xf8f288b6 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9bf69ed find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9f9d414 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0xfa03f3fa ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xfa508137 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0xfa7a5b95 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xfa8e7973 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xfad546e2 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xfb3e9dfb fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc17be4b lookup_create +EXPORT_SYMBOL_GPL vmlinux 0xfcc020ab register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xfdb81a04 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfdf558a5 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfe0c69bf blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xfe657e64 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfefe68b4 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xff0a898b pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff89de50 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0xffaf7bbb __wake_up_sync +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/ia64/ia64 +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/ia64/ia64 @@ -0,0 +1,9268 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/button 0x48193639 acpi_lid_open +EXPORT_SYMBOL drivers/acpi/button 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL drivers/acpi/button 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL drivers/acpi/processor 0x01ea811f acpi_processor_unregister_performance +EXPORT_SYMBOL drivers/acpi/processor 0x4e6904ba acpi_processor_preregister_performance +EXPORT_SYMBOL drivers/acpi/processor 0x941090a7 acpi_processor_notify_smm +EXPORT_SYMBOL drivers/acpi/processor 0xa5c3de7f acpi_processor_register_performance +EXPORT_SYMBOL drivers/acpi/processor 0xe8a3605f acpi_processor_set_thermal_limit +EXPORT_SYMBOL drivers/atm/suni 0xa56063e9 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0xde46f0d7 uPD98402_init +EXPORT_SYMBOL drivers/block/loop 0x6b581064 loop_register_transfer +EXPORT_SYMBOL drivers/block/loop 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL drivers/block/paride/paride 0x201fc43d pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x230180df pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x2ebff9a7 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x30317214 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x3b160f9a pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x679118f1 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0xabd009ec pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0xb7fe5e6a pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xe1a322b3 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xe28aa9fe pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0xe2a7300d pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xeca5ac15 pi_release +EXPORT_SYMBOL drivers/cdrom/cdrom 0x1874317b cdrom_number_of_slots +EXPORT_SYMBOL drivers/cdrom/cdrom 0x2755c3cf cdrom_open +EXPORT_SYMBOL drivers/cdrom/cdrom 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL drivers/cdrom/cdrom 0x5c0bedcf cdrom_mode_select +EXPORT_SYMBOL drivers/cdrom/cdrom 0x649efad9 cdrom_get_media_event +EXPORT_SYMBOL drivers/cdrom/cdrom 0x7660f0e4 unregister_cdrom +EXPORT_SYMBOL drivers/cdrom/cdrom 0x8dbb2162 cdrom_ioctl +EXPORT_SYMBOL drivers/cdrom/cdrom 0x90e6a8be cdrom_media_changed +EXPORT_SYMBOL drivers/cdrom/cdrom 0x90e90be3 cdrom_mode_sense +EXPORT_SYMBOL drivers/cdrom/cdrom 0xa71d9b6a cdrom_get_last_written +EXPORT_SYMBOL drivers/cdrom/cdrom 0xb4c07f64 cdrom_release +EXPORT_SYMBOL drivers/cdrom/cdrom 0xd20f005c register_cdrom +EXPORT_SYMBOL drivers/char/agp/agpgart 0x040da2d3 agp_backend_release +EXPORT_SYMBOL drivers/char/agp/agpgart 0x064644a8 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1df34339 agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x21e833a8 agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x220896bf agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x2b9cfd85 agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x34d9a46b agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0x39593d21 agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x44d4c9ad agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5287d0d4 agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x59c93eff agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5bcffdd8 agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x6a658e20 agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x745081f3 agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7a33e1da agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x885d8063 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x94d0e2b4 agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x99a09292 agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9a52c3d8 agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9e0c3cf2 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa218afb0 agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa34d009a agp_alloc_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb9cfe116 agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc671ee69 agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xcdc35591 agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0445578 agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd439e5e5 agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xdace1ad2 agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xeb244d1c agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xefb80011 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf3f0a5e5 agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf7d42b7b agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf9b14ac0 agp_generic_alloc_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05fb6f31 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x06779cce drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0a52e84e drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0b96feee drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0bbf5c01 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0d82f164 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14ec5166 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x16448e1c drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x174f6b72 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x184ae38a drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x197478ae drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2004808b drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x201601e1 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2056d191 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x207dd15c drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x214d1450 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21e15f7e drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2524c5c0 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x28f019f1 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ac73bf9 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c5c0efd drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3054c85e drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3148aca5 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x31650f53 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x325d620f drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x36c954c7 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x36f653d5 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3879f5d9 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x400a05ad drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4095e9e2 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42b78d47 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x440a46f4 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x474da9fd drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x486556d4 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c2ad410 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c51097b drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c7ce4b0 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4f41e738 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x514d078b drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x52d23e85 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5594a0f8 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x562eace1 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x568abc0f drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x58b20498 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5a46da83 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5f6a888d drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x601d7a4d drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x63910b38 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6523177e drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6a80388a drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6aab209a drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6e754c87 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f012f8d drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6feb85cb drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x735834a3 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x73759788 drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x75c9be06 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7bbf6116 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7be67f4f drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c9f23e8 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7cc1ff19 drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7cd41b9e drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7da58da8 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e162393 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x825e4e69 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85876aec drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x859245de drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87f7374b drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c23fd08 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8ced9947 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9002b7d2 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9079c457 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x959cd264 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x984c45cd drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9aa7f8e3 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b640f72 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b7bf567 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9bb3e68a drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9bfdf3b8 drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa014c659 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa61bcec7 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa6b1a21d drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa7d6be41 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa976d7fa drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb09cfafa drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb470dc5b drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb5e8edfe drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb6053de9 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb6a2ec4e drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb7387b6d drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba422181 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbb90987e drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbc566972 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbcd42d9c drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf5dcedf drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbfb781a7 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc01d0793 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc29745b3 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc4b70793 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6bb78aa drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6e14160 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc707a1bb drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc7ecbba4 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf5f30e drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcff232a5 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd216e70f drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd447b0c5 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd6d4e1fc drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdaed861b drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd373619 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe07f8170 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2eb7b7a drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe4c45705 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe52f6ec3 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe666bef9 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe747c1ea drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe86c60ab drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeba905ac drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xedfb6d7f drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee2f0a40 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf090cb84 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf14a5d30 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6eae955 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf861c853 drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf8a53eb7 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfae634da drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfb155707 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfc0607f9 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfde7d1c9 drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xffa3afb0 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x01ac63e1 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0e9b4d41 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1033f5cc drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x12775e4d drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1b136f5f drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1c7237e5 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2860a972 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x31f07617 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5b6712eb drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7a77f526 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x82a66923 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8d51bfb5 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb0a68b3b drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb5dba03a drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc0f3fcf0 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc2c96168 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd24642a2 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe19c9e3b drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe2f19b97 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe49b8fbd drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe49e205e drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf4013528 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfcf298e4 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfd88ce5f drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfeac0a59 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x3988bed3 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xb8781fc7 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0136382e ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x09f57449 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1109cd41 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x136a498b ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x14f8aa91 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17aca520 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x227074a4 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x240694f4 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x25823ff5 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2c01c505 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2e8d799b ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2f78a4ad ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2f8947fd ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x39af09ce ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3b9deeb6 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4112f7df ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x41579325 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x481a804d ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x51a04b9c ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x544488d6 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x545b7fc4 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x579fd3b6 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x58abe8f4 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5a101489 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5fc8ad97 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6223d32c ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x67d0846d ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6dfbf60f ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x780fb732 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x797952f5 ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x82e8f971 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8312ce98 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x83f0de55 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8ae685b9 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9107bea9 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x96ab9cac ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x997dfc4b ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9dbf83bf ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa11f444a ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa591af13 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xba5bc10d ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbda4c33d ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcda8ce46 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd18f7a9f ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd7ca81e6 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe05c5d1a ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe07a26ec ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe558c9a3 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xea14002a ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xed8c0ceb ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xeed4285c ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfb28cb46 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x99f39f8b i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xdbaac47c i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x70cef81d amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x08887ac3 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0a50da71 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b234c4e dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0c6e5f0a hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0dafb0ee hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0eaeac70 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x158ac548 dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x16252f79 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1b6dd035 hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2639bd52 hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x268d1870 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2989e5ae hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x29b44b34 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2c022eb6 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2d36de76 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ebf6e5a dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x345c94a1 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4332d4eb hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x435751f7 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4873f286 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4b023b49 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4dfae81b hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4e104524 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x52cbba52 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5d0bb5d2 hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5fef2634 hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x60213a18 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6a33a097 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6ef3025a hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6f79de09 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7138e741 dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x73a7f181 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7515d4cd hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x757bc260 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7a397593 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7c2941f4 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8191c531 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8660eb4e hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ae2b00a hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9119522b hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x98e668fe hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa5debcd8 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa793fbb4 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xac5faa3d hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xae90b6c7 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaec55ce8 hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb3d740ee hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb86bf555 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbb7d04cb hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbbda6a25 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc009e1a8 hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc1f60ff3 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc45a113f hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc6892176 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc7461869 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcd9e772b dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcfbfda47 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd72c45ca hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd7429019 hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd96de053 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe13a74bd hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe35fe9f9 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe3fc05f5 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe44a4edd hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe8bd56b8 hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf86f6b37 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf97827eb hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x4dfa0321 ohci1394_stop_context +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xb0beee45 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xdf551015 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x063e80b1 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x19e20d7c rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x315e96d0 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x9f7b5224 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xef4077b9 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xf33c1e4e rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x04cceedb ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0b31edd9 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2025524a ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x26a441d1 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3c8fea70 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x41778e64 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x499ea010 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4f334b82 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5e3d3771 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x77c1dd4a ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x7c7a6b0e ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9bc3362e ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa41bbe1a ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa8054049 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb4b79cf9 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xdaa01f67 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe23721e7 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x01cbb7e8 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x059de70d ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x13176c6a ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1fa3f0b3 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1fd6e07a ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x273f635f ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2b8540ad ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x392957ce ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x49e978ac ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4c4d899a ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x50ad73c4 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x50d63fd8 ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x54b84890 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x54d2b509 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x587be2d4 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x589ad5df ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5f7d4e24 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x62675e92 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6722a7f5 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6a5ea00c ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6c7b58d5 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6d6d827a ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6e033347 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x708f916f ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x72748105 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7c977a7d ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87558969 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x88236532 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8d00d5b1 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8e27daf9 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8f03824f ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9064b432 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x94760c94 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96d7db36 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9728a7df ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9ec965d4 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa0275f04 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa62540ee ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa75483f9 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa7798c3e ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa88ae069 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa93f52e0 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xacfb3864 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb0bfb107 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbfaca5e4 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbfe299b2 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc294d691 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc6a33510 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3e760c7 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd494afbc ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd50cad3d ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd98b74ae ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd9938e97 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd9aceae5 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe06de6a5 ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe1063d53 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe212b60e ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe2755e4c ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xecbd98b3 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xef4efa51 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf6abc4c0 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf781a026 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf917d2ec ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x13089c16 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x195692c2 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x37d2992a ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x47b2debf ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x61b91f87 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x62574ba8 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x682ae854 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x80dd41e6 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x9d2167bf ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xba022c04 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xbfd97e89 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc1f6b13d ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x15089e81 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x3043f0b6 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7d977e2c ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x8f070d28 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x92d34866 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x9508f276 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc3081dde ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe0cb8f4d ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe797db31 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x497651a9 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x4e95dde5 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x5deb323c iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x6e698925 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x97b10a87 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x9c039613 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xc0ee2716 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xd4253aaf iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0c99dfc2 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x10121a53 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x12976887 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x18ab5430 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x1e5eb834 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3811c1a7 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3e593496 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4e62281f rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5aa84769 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x60ec2124 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6d2a68c2 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x75a862d8 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x84dc284c rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x880b05be rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xca6cb8bb rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe7f8352c rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf44395eb rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf45f5287 rdma_bind_addr +EXPORT_SYMBOL drivers/input/gameport/gameport 0x2ad7d46a gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x2b3cb01f gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x5394f507 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x86d0fe5d gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8b1bdd8a gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0xaec0c1a7 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xe993360d __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0xf86889a9 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xfd4d441e __gameport_register_port +EXPORT_SYMBOL drivers/input/input-polldev 0x0d377b37 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x165662c4 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x212a4b79 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xe390c21f input_register_polled_device +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x09181253 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x12130742 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x168e0e84 capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x1fd20cdf capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x40917a17 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47dbfa0a capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x788d398c capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x92ab02e8 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xbbc24285 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd2c39c40 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe6a11c2c capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe9f62f29 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xf3bc2546 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xfac9e128 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x1ab1eaa6 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x223635ab mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x30e10770 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x5870cde3 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x5b7da012 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xbb89d04a mISDNisar_init +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xb1d4ac55 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1d20434c mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x291edcf6 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2c2f1963 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x30c05159 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3cc62ba2 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3edc7944 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3fca91d1 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x437f4ca1 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4bb77427 confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5b2b3645 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5dc7400a mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6101502a recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6ae2ecc2 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x7029f915 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9accaba2 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa709f6db l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa9566202 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb1b48172 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb2caed89 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xbdbf8fcc get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xbf808adc mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xfe7a3169 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xff802d01 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/md/dm-log 0x5b7b1069 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x5d2ab4b3 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0xa09a4024 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0xb48a7e85 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x0ca4cb7f dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x22458f68 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x2b85b621 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0xf96932eb dm_exception_store_create +EXPORT_SYMBOL drivers/md/md-mod 0x07bc1bf3 md_wakeup_thread +EXPORT_SYMBOL drivers/md/md-mod 0x1db69f15 md_wait_for_blocked_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x1fc1de8d bitmap_cond_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0x28b74b2f bitmap_close_sync +EXPORT_SYMBOL drivers/md/md-mod 0x64d2e09b bitmap_unplug +EXPORT_SYMBOL drivers/md/md-mod 0x66f8df84 md_unregister_thread +EXPORT_SYMBOL drivers/md/md-mod 0x6bf196cf md_error +EXPORT_SYMBOL drivers/md/md-mod 0x79708c33 bitmap_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0x885a1ae4 unregister_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x8f498c56 md_integrity_register +EXPORT_SYMBOL drivers/md/md-mod 0x93166e41 md_register_thread +EXPORT_SYMBOL drivers/md/md-mod 0x95f0d0b6 md_set_array_sectors +EXPORT_SYMBOL drivers/md/md-mod 0xa99f7931 mddev_congested +EXPORT_SYMBOL drivers/md/md-mod 0xab483473 md_integrity_add_rdev +EXPORT_SYMBOL drivers/md/md-mod 0xade47ab1 register_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0xb0859c14 bitmap_startwrite +EXPORT_SYMBOL drivers/md/md-mod 0xb1517939 md_write_start +EXPORT_SYMBOL drivers/md/md-mod 0xbd1121e2 bitmap_endwrite +EXPORT_SYMBOL drivers/md/md-mod 0xc0358d11 bitmap_start_sync +EXPORT_SYMBOL drivers/md/md-mod 0xca002bb0 md_check_recovery +EXPORT_SYMBOL drivers/md/md-mod 0xe72c7fb0 md_write_end +EXPORT_SYMBOL drivers/md/md-mod 0xe88da7b1 md_check_no_bitmap +EXPORT_SYMBOL drivers/md/md-mod 0xea82b3ea md_done_sync +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0xa20f2f7c raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0x785bc195 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0x90989819 mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0x8b10f5f9 mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0x9a71d008 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x7ada19cb mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0xd3503ae1 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0xe414cac8 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0xb8b36f86 xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0726eefa flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x2c3b5951 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x2cc5632b flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x459e73e5 flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x53744146 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x645aa7a7 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x71318a29 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x85412ab2 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x88a2088e flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8af393a6 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8dccb844 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x97eb69d2 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa1d0e2e4 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa47b1c94 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa85083c0 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xb3967dae flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xbb08154e flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xdcf9515a flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf5e3cfb0 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf6c0b88e flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x023e5a87 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x92451c9e bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xca4d2573 bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd7a27338 bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x0d0b162d dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x1fffe586 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x38cc0b90 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x5070ae37 dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x71a5c6d5 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x95c094b3 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xcf47a713 rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd101ee00 dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe2c70168 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0x22e25e94 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x07d298c1 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x11faa1e1 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x12ac9225 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x16d169ad dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2440f6c6 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2c928c35 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2f090873 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2f18cedf dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2fabaa42 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3396e969 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3d26c6cf dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4dc74624 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6caee66f dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6d3aedd3 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x70a78256 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x70accb4b dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8d60407a dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8f166c6e dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x90ecbc34 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x93d4c5c3 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa31783e1 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa3c2eb18 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa94f6a9f dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xadeeed43 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb26796e0 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb7216f7d dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xc7c171f2 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xc8ba26f6 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd314e528 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd6f40a4a dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe3e711d9 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe4e2715c dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf12f5325 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x35b0521b dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x413d68e7 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x4c9c7570 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8a412dc2 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xa3531d18 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xd1dc5685 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xffc1a7d6 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3962ff7e af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x01da061f dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x0efb1598 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x17ead62a dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x3192de3d dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x39e071ec dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x47de634c dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x67fd1041 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x81e71338 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8cb586d0 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xea6efd64 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xeb1e3387 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xedd033d0 af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0xd50cf591 au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x46c3c894 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x1d568cf0 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0x295ac8f4 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0xefe75e3f cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x95306b8c cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xfbd033c1 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0x1751fde5 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x2ca2eab2 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xf2b8f636 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x229e8f18 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x6afa29b3 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0xf8533ec3 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x840d1cfe dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x08d7dd06 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x39bf0633 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x3aa76d65 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x830b5876 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xaadc8f42 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xf3f8b376 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x51e1c0d4 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x812cdf39 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x0bc29e4c dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x2a8fc806 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x2ab38aaa dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x4df95bbe dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x6cf1bab1 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xcb29f7ee dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x25227dce dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x32199b6c dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x417fa334 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x528bea7e dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x993877f5 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x59a2150e dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x8bdd48dd dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xbf7e89b1 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xf226c063 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0x378ef2f5 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xd513ab4c isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x5c0a072f isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0x0e201ff6 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xaf9b59db l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0x4932445f lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x64d54c76 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0x82782232 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x5bd38b6d lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x60f6102b lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0xb4ce796c mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0x4ae1fd0b mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0xdb5e257a nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x66b0f50c nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0xcb178e3b or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0xfeedf788 or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0xb6d7261f s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0x973f4ed3 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x2f1cdfb6 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xff3b130f s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0x2786655f si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0xae562b6b sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0x78de6317 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xa49a50e6 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0x4d742cfe stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0xb4a610fd stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0xc64ef38a stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x4a5dad92 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0xdf4fef62 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0xea28de52 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0xe1bbdfce tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x76126d8e tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x618a9e3b tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x6b316b5b tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x152eb83f tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x329085c5 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0xaf9b747e tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x6d72fa6a ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0xd5e7c741 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x1e1d56d9 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0xf5ca2064 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x87f967e6 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0xd08e5c56 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xd36d8212 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xf8aa83d8 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x9438e3e0 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xd180b547 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xd31302fe bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x7e9b07c9 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc6c7cc46 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0x0f362f9e cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cpia 0x60d337f1 cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x451ff933 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xdf6cb66c cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x92ebb5e2 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0xb9462641 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x26e2812d cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x272796fa cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x53f13cf5 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x593a8d28 cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x690b5e53 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xfade335e cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x25932450 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x2750fc2c cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x58a71514 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x8457c927 cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x95eb2062 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xd069bd6e cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xd17b8415 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x064ce4bf cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x0ef48da1 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x5496e5b6 cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6b28f6d3 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x890e27f0 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x8a9775a6 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x91f9b484 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x95694107 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9a6b3466 cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa60e2fe7 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa89bbd30 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xabcd6115 cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xac0ce363 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xbafa2522 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc2eca661 cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc401ec8f cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc5caf6df cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc884115a cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xcc6848f0 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xcefae535 cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd26290ce cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xee93782e cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xdabfdb99 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xfa2ef773 em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x17da60b0 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x247abc6d gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x4d8ba0e8 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xa4057a39 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xa49ff9d0 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xb419872d gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xfd93ef8c gspca_resume +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x390d1b63 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x4163b143 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x7d95ac2d ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8c1c98b5 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x923323a0 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x9b827fea ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa3843ffa ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa564d392 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xaa49cbe0 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xb004ed10 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xea3f2754 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1b4070a8 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x24cceabd saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x2d03fe9a saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x3f809573 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x5eb2c608 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7a4f53e5 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7a651387 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7e68b207 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xa64c623a saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xb5f5a1fe saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xc96fd1df saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xec5ccbc2 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/soc_camera 0x23556f44 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/soc_camera 0x34b22c17 soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0xefa3377d soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xf232cd56 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0xf2f6f9d7 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/tveeprom 0x6658de8f tveeprom_read +EXPORT_SYMBOL drivers/media/video/tveeprom 0xe0077038 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x0c4d19db usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x23ecbae1 RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x372ead76 usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x5e1d70f4 RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xa238b6a0 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xc85be89d usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xc8c25987 usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xd5112b23 RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xd8043c77 usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xf4dcb853 RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x29983871 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1eb113db v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x62a59313 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x1d81ddb8 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x450bcc0e videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x877247cc videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xa58d8a3a videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xe75230bf videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xe9ad0b89 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x100240f6 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x397cd898 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5138879e video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x791a808d video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0x7c12ccda video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0x87fa70eb video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0x96cc0a72 video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xb4338c2a video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0xc0ad4e09 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x17ad80bf videocodec_register +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x29549697 videocodec_attach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x9a720501 videocodec_unregister +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xd5acf707 videocodec_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x064e1786 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0c968541 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0f9329cb mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1f28e8a6 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x43151cdc mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x49c47888 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5569302d mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x55ef4a7f mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x56f1dd23 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5caffc40 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x601133b8 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6f6a65ba mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x70eed99b mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x81ccbcd4 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x863d22c9 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x93664d9e mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x96e9e950 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9850ed48 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9d1e3513 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa9421197 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb42aeace mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xbf45e5ff mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc6768bf2 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xcbcc3228 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdbef95c1 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf34669a7 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf48a7adc mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfe863034 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0f88ac24 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x13c2512e mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x13cd9507 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x20871bc8 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3bec4c12 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x46ccdcc5 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4e1cf67b mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5008e13f mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x678bb942 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x688d255d mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6fb53882 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x70961621 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7a1e66f2 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7c3b7ef3 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x85808826 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x886449dd mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x901b76bf mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9c8b5b66 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9de35c3d mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xab8f32cb mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb603e458 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd53579a6 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe25a86bd mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe5e5e549 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf87f30a5 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xff9135d1 mptscsih_info +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x00d7cfa6 i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x015eec8a i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x0b18ee0b i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1d56d818 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x23e75bdb i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x61154fa8 i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6d02c197 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6ffe9bd5 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x868e8657 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x99dd57d6 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xa0c09ad7 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb665d3ae i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbe313a5e i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc2001b3c i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc69cbf4d i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcdb26acd i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd78ec055 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdfa867a5 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe7f2be2d i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf2d1cc88 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf4f6e0ca i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xfa83db22 i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x1290155e ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x395c4ba1 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x6c4dc39c ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x85d7c581 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x9484a13d ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x95c7d24a ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x9ce33b64 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xa639dbf4 ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x8d1f794e pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x95dedee2 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x1ff1e66f mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0xd4de9269 mfd_remove_devices +EXPORT_SYMBOL drivers/misc/c2port/core 0x9d888460 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xb1a3898c c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x025dc24d ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x9a9ff3a7 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x178e9c22 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x49f698f0 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x4fcf5a03 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x5677ee4e tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x6324314d tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x6f0275cc tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x82be4fcf tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x94f4a784 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x9f4d989a tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xacc162aa tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xed2e8ba2 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xfdbe0e64 tifm_add_adapter +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0xec59a21f mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x08ec48b9 mmc_card_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x11396e6e mmc_set_data_timeout +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x1c420afb mmc_add_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x2bb56d2f __mmc_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x459e4eb2 mmc_request_done +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x4a1ef83e mmc_register_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x4c6fa5aa mmc_card_awake +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x5dbf22e9 mmc_wait_for_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x62d87bcf mmc_remove_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x7371cceb mmc_align_data_size +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x7fe6c9a4 mmc_wait_for_app_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x886ace51 mmc_wait_for_req +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x89d4f9e9 mmc_host_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x94f8967a mmc_try_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xa0623c2b mmc_suspend_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xa669fb67 mmc_alloc_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb277b147 mmc_power_restore_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb317ead7 mmc_power_save_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbc56d4af mmc_host_lazy_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbf74f129 mmc_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xd57e1de1 mmc_free_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe2cb469d mmc_release_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe5dea752 mmc_host_enable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe6342480 mmc_resume_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xeaff1adf mmc_card_can_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xee2b4c2b mmc_detect_change +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x1a527260 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x77f05a09 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xc5a72322 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x1a4b8661 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x1bbf59ed do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x38a3e747 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x827f8779 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x8e727389 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x4a6e05f6 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0xb6dfdaf1 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x5a9b0a0e add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xfcdad9a4 del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xd11774d7 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xfd2a9a93 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/nand 0xb950a164 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xcad78190 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x45ffa944 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xf0f4c6e3 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x158beeae onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x3c17d4cf onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x43d7a9b4 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xa0ce1740 flexonenand_region +EXPORT_SYMBOL drivers/net/8390 0x0a52e397 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x192f6f08 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0x66f38307 ei_open +EXPORT_SYMBOL drivers/net/8390 0x6a387d99 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0x94dd1c0a ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0xc4379cb4 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0xc499afb2 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0xc859e8a7 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0xdb62e7b7 ei_close +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xeca00ce6 ei_poll +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x19529423 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x4ddd70e0 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x5f82475d arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x7c8699f9 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x806d3b6d arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x9638a355 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe3ec2059 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xef0199e7 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xf22b09cc arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xf72be249 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x3b48ee1c com20020_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x8189192d com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xe7fcd7a0 com20020_found +EXPORT_SYMBOL drivers/net/bnx2 0xda0398b4 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0x8f2996b9 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1e4c847a cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1f278acc cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x37cd3198 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3b821d50 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x4a6de1f2 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x7645727f t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x785af904 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa4ae5c34 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa8805827 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb014ed3d cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbcbab4dc t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbfdd9ed6 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xd38ee902 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe284ab9d dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfac65e62 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfc0f1d42 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x3240ddef hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x4b181cfb hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x8e7b71d1 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xbf9c66c5 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xde45016c hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x4bbc6516 sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x60830c50 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x846710b0 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x91908166 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xaf8fe9d2 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xbb2e47a5 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xcf26122f sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd15af1b2 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd963bebb sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xfb0062ad irda_unregister_dongle +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x06417265 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x089e9513 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x0d59beef mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x4e27b5cd mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x667bd98f mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x7428e351 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0xcf28d808 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0xf89c41c8 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x863148f3 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0xa42fb7a0 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp_generic 0x069882cb ppp_channel_index +EXPORT_SYMBOL drivers/net/ppp_generic 0x1dc893a1 ppp_register_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x4b3172a1 ppp_unit_number +EXPORT_SYMBOL drivers/net/ppp_generic 0x91978320 ppp_register_net_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xb84ba153 ppp_output_wakeup +EXPORT_SYMBOL drivers/net/ppp_generic 0xd1200f8d ppp_input +EXPORT_SYMBOL drivers/net/ppp_generic 0xda6c0076 ppp_register_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xdf459332 ppp_input_error +EXPORT_SYMBOL drivers/net/ppp_generic 0xf5747090 ppp_unregister_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xf5b628ef ppp_unregister_channel +EXPORT_SYMBOL drivers/net/pppox 0x27ea6811 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x9eabc7ad register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe238d621 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/slhc 0x0ff2b602 slhc_compress +EXPORT_SYMBOL drivers/net/slhc 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL drivers/net/slhc 0xa63d85ab slhc_remember +EXPORT_SYMBOL drivers/net/slhc 0xb5ca1c46 slhc_free +EXPORT_SYMBOL drivers/net/slhc 0xdfc5169b slhc_init +EXPORT_SYMBOL drivers/net/slhc 0xe8794ce1 slhc_toss +EXPORT_SYMBOL drivers/net/sungem_phy 0x8aa657cb mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x0b3bc01c tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x5fc2dfe2 tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x8d81d474 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xde68de5e tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xe9ef6761 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x011dba49 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x23bb9fbd attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x28758acc hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x380a4bc8 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x39f18dba hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x5a6555ba register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x71a02d4b alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa37b600f hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0xc7cf0857 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe81eb670 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xfa04ac5e hdlc_open +EXPORT_SYMBOL drivers/net/wireless/airo 0x410997fe stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x7bcff98c reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xf71dd15f init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x3b8dc52a ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xccbc8daa ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd907a996 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/atmel 0x52ccf2db atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0x73d9c3a5 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xdebb7b94 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x02a858b4 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x02edc452 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1dff3d16 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x21d1ddfb hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x24aaf221 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x351b5f7a hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x422fb1a8 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x49630fac hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4bc26fa7 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4e4d764a hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x546f3216 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5bd8a707 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6852737f hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7b4cd987 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x92e4bc41 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9ef38236 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa61dac33 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa91bb71e hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa9328d3f hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc2d40458 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd10a89de hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe819cbf2 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf2324cd1 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xff43d602 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xff56b91f hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x09360b22 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1708867b libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1c431ea2 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x34b5e782 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x36fcea6b libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x60f1c7af libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x6cdc95cb libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9c35d0d4 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa29df39b libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xaf6e1786 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb003daf5 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb3d45b7c libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xcc04d1c9 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd2824b2f libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd29cccef libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd4420c71 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe0b4c21f libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe2271166 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe4d9e50e libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xea1ded3a libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xeefc35b9 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x020c8108 iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x02c842c6 iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x03149075 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x09d4d0a2 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x09ded8f7 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0b2d6e71 iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0be48008 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0df48b68 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e34ec30 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0ef1d952 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x16d90eb8 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1752de4a iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1825e5be iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x192dfd7b iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1a45f375 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1a54503c iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1de4de96 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1df4b4d5 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e8c25a8 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x20b2e014 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x21ccdc0b iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x236f5a6e iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2388e379 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x25fd5253 iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x262144fe iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2774a075 iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x29078777 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x29fd1f91 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2d7396ef iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2df57f04 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2e9e5607 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3204e3c5 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34ce3b06 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x36af3aeb iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x36efb62c iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3bb4881c iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d279f39 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x408ff30f iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x45e6c006 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x495e67a9 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4b6cece8 iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4bce9aed iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4c8437ae iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4e4a6249 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4e4df5d8 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x50319dcf iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x508bc60a iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5124f912 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52159923 iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5304d23f iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x54f5883c iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57167345 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5914981e iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x59151af1 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5b5de3ce iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60774702 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x61e28c6b iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x63a99f1f iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x67f75517 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6f320fa7 iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6fbed28e iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x725ed71a iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x762e57eb iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x77de30a7 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x784d06f2 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x79fedb8d iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7bd82a3e iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7c148e8f iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7e54c843 iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7fe42869 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x816ecc94 iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x85c501ba iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x867a047f iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8689bd15 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8c0cf840 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8cd588a7 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8ef16adc iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93ed7891 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x97870537 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99955e97 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99c88ae8 iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a3adb98 iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9c115171 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e551ed8 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9ee68e90 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa0a3eeaa iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa3a6a93c iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa5994d3d iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa76ebbc8 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa7930838 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa9533bfa iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xab0e5d21 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xad0dad61 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xadb0ada3 iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaea58a22 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb121e82a iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb1559706 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb51d98c0 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb82bdf41 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xba66ee82 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbaf3446d iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbc95e3e9 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbcaf2b5d iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbcb14018 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd63148d iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd7ab919 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe9c3a25 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2fc3d15 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc3facb4b iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc45548e3 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7d2fa12 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd10f66ab iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd4b4e20d iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd58c6401 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd96e136b iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd98d693c iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdbfceb22 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd637abe iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe2a1eab2 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe30b3f85 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe518deee iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe6ba4d06 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7235a0a iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7e13aa0 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xea9aa5f7 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeacb045b iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xee234dce iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeec22f66 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf1443991 iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf267437d iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf291f9d0 iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf2d39d59 iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf68874b5 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf68faddf iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf95ea9da iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb30c699 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfdd31d12 iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x490c5cc8 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x757f99b7 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x9f337dee alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe6202801 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed02ad26 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf4688467 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf5b1f7f7 free_orinocodev +EXPORT_SYMBOL drivers/parport/parport 0x0a322cc1 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x0f6d29c1 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x14cd8359 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x163cc8ba parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x1726d30a parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x1bf92333 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x2dda75d6 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x2e915f16 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x2ff75c5c parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x3c490b5b parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x3f1f44b4 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x47391a3e parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x5aeb84d8 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x633c28a3 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x69cfa642 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x707544a1 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x767bca22 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x83825b68 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x84bee35e parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x8cf91831 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x923f20bc parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x945c2c92 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xa1d1c2fb parport_write +EXPORT_SYMBOL drivers/parport/parport 0xa23a731e parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0xa80dfb15 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0xabbff4a8 parport_read +EXPORT_SYMBOL drivers/parport/parport 0xc657c69b parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0xdae13383 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0xdcba369e parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0xec19410e parport_claim +EXPORT_SYMBOL drivers/parport/parport_pc 0x416b1b83 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x65e6637b parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x146d7b58 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1c7d9cfb pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2626466d pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x34e071ba pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5ab89378 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x793fcc45 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x97318338 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x98fdbd7d pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xbaf5d96f pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc137a12b pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd4e623d2 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xdc22c8b1 pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe6823c5f pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xfbc1bdee pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xfca985bf pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x05888332 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x05d1f44b pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x16bb15cf pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x18f2564e pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x221b357b pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2368ca39 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2cf05650 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x44632056 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x501ea397 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5e098bfd pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x75d31261 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7b124d03 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8bfd6fc5 pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8e119be9 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x96429fc5 pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9d7b0f0c pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9f5c0f99 pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa9d425bd pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xaaa48e89 pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xac1c1eac pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb533d105 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb8780a69 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc10f5543 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc4c0d83b pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf25ff68 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd079d194 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd0c91a9f pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd647561c pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdda3f0f4 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe210e298 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xedd6e4b3 pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf1519cdb release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfb2f3c74 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x82865a55 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x6c796487 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x1ccb5203 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x25ef9c64 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x3236510b fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x58b3a984 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8c7bda5c fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xb7846248 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xf781b6a1 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x092e4aea fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1fc2b91a fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x25aa1d3e fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x25c1f0c9 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2fcdf923 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x32755200 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x32dd80ea fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x42fd9bd1 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4a037eae fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4c9e81e9 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x514a4bf1 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56a06358 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x57015217 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67438a3c fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6bd91ae8 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6efcedc0 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6fbf9b4c fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x72e0583b fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x74b91ffd fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7af172e2 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b05cbd6 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x85ed5d43 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x87e694ee fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x885a489f fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x89ffea18 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8c445850 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9e9ceeab fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa462fbb5 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa4d86050 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xab7689f5 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xab7d4f3f fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac238a7a fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xae204d97 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc50a8306 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcb433d50 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd1c14d22 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd481131b fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd9d384b0 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe0041589 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe7695329 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe8048e3e fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xee445814 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x0b42a56f mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0298ebad osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x03387807 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x097e133a osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0de51a0c osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x395dd69c osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3a39b0bb osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x497ff7a6 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x70065771 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x756efc5c osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x798ca833 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7fb5ec29 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8e3b0a98 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9a5658b3 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa6e6915d osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa87b01ca osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xababbef8 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xaca010d5 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xaf5f5250 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb44b559b osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc4199ca6 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xce241b60 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xce905d5d osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd3638e98 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd9162c73 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdb14484e osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdc7df7aa osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xebe27413 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf1ac22f5 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf1f4c486 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf7bbccd6 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfa67e408 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfe8b9bd5 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/osd 0x422b6c8f osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x52f7072c osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0xc2c99ab7 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x50188012 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5f4afe97 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x738c6a66 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xd89f0544 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xebedce6e qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xfa71264a qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/raid_class 0x24ffddab raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x6ae985d2 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0x9f4e2330 raid_class_attach +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x024d60b8 scsi_nonblockable_ioctl +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x04c34ca7 scsi_setup_fs_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0738ff94 scsi_device_get +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c85b78e scsi_device_set_state +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0f5ba160 scsi_device_put +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x159eb72b scsi_print_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1fa262f2 scsi_host_put +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x28f42794 scsicam_bios_param +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2a468a50 scsi_track_queue_full +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2ac8ffa2 scsi_device_resume +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2e5923af scsi_remove_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2f80f71d scsi_eh_prep_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x307071a5 scsi_bios_ptable +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x308152c1 scsi_block_requests +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x310a0819 scsi_get_host_dev +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x346764aa scsi_unblock_requests +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x34870962 scsi_eh_finish_cmd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3a35e4f2 __scsi_put_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3a4861fb scsi_register_driver +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3c006a3b scsi_scan_host +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3c28f279 scsi_report_bus_reset +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3d8f9e95 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x44defc7b scsi_host_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x45d04c3e scsi_free_host_dev +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x45d8edb1 scsi_is_host_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x49e7c1d3 scsi_mode_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4f773e96 scsi_finish_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x53a0bd0a scsi_reset_provider +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x562dfae3 scsi_free_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x58a93bb2 scsi_is_target_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x610fba42 scsi_register +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x61f25439 scsi_init_io +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x67d3ffcd scsi_device_quiesce +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x680fc354 scsi_remove_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x6a1f6619 scsi_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x6e77ad84 scsi_get_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7150cc00 scsi_rescan_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x71a998af scsi_device_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x746bb31e scsi_unregister +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7c632030 scsi_host_set_state +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x821c7023 scsi_register_interface +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x8547b3ca __scsi_device_lookup_by_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x8b5e443c scsi_adjust_queue_depth +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x8f760579 scsi_dma_unmap +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9082256b scsi_print_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9f6f5653 __scsi_add_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa226fa71 scsi_get_device_flags_keyed +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa53fc39f scsi_ioctl +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa85d97cf scsi_release_buffers +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xac2dc0f2 scsi_device_lookup_by_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xadb46431 scsi_dma_map +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xaf3a2db8 __scsi_device_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb46fda33 scsi_calculate_bounce_limit +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb6adcefc scsi_is_sdev_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb923b3cc starget_for_each_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xbc5c6150 __scsi_alloc_queue +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xbd243242 scsi_test_unit_ready +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xbf565fa1 scsi_scan_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc31e81e2 scsi_host_get +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc3a131ff scsi_add_host_with_dma +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc414676c scsi_put_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc5fd7bbf scsi_host_alloc +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc95d2f97 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xcd3910ca scsi_target_resume +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xcdff3574 scsi_command_normalize_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd511cd2e scsi_allocate_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd89f0b2a scsi_set_medium_removal +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xdaaa875b scsi_target_quiesce +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xde46d530 __scsi_iterate_devices +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xdf10cdee scsi_eh_restore_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe01f6400 scsi_execute +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe2f12ef1 scsi_report_device_reset +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xea10212a int_to_scsilun +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xeab3676d scsi_add_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf4528073 scsi_kmap_atomic_sg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf54562e5 scsi_prep_return +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf9d3b8d9 scsi_block_when_processing_errors +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfbb0e76a __starget_for_each_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfc392b5d scsi_prep_state_check +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfebae836 scsi_prep_fn +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xffb14b6f scsi_print_result +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xffdd4368 scsi_execute_req +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0319395c scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x15d0d5f5 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x30c7d415 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x3960370a fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x4ada3fd9 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5fba20c5 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6b4afe67 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x828acc86 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x830d276f fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xada7c093 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xea414e07 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf96d4247 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0aa9f069 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x174cbe54 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1b106506 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2015bf69 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x27bbf150 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x291b24d3 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2a0f0a45 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x30b0616e sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x40596d08 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4dcecf97 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x59dfeb2e sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6651d58f sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x67b3ef4c scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x69a0c826 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x73086145 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7df21037 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xaad7472f sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xab0685ae scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xbaa57b60 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xca4f88ef sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd0b986ec sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd24e8f5a sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd43d962e sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd482aaca sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe5e61a67 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe9c22ff4 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x54b25838 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x6e759f99 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x7582a55c spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x948b3d31 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xf5bad328 spi_schedule_dv_device +EXPORT_SYMBOL drivers/serial/8250 0x445a2c84 serial8250_register_port +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/serial_core 0x1368b4cd uart_get_baud_rate +EXPORT_SYMBOL drivers/serial/serial_core 0x26aeb8a4 uart_get_divisor +EXPORT_SYMBOL drivers/serial/serial_core 0x2b529ab3 uart_write_wakeup +EXPORT_SYMBOL drivers/serial/serial_core 0x57ae3ad8 uart_remove_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0x6ae4703d uart_resume_port +EXPORT_SYMBOL drivers/serial/serial_core 0x919ad108 uart_suspend_port +EXPORT_SYMBOL drivers/serial/serial_core 0xa0194e8f uart_register_driver +EXPORT_SYMBOL drivers/serial/serial_core 0xa90671a0 uart_unregister_driver +EXPORT_SYMBOL drivers/serial/serial_core 0xae110ebb uart_add_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0xbc2a4a6f uart_match_port +EXPORT_SYMBOL drivers/serial/serial_core 0xd3b254aa uart_update_timeout +EXPORT_SYMBOL drivers/ssb/ssb 0x06bc7a86 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x0da34232 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x0e6bac48 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0x186718f7 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x2671f479 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x2a314e4f ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x2c405616 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x350c1538 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x35d98d6a ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x3aeed4d2 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x41cd045a ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x4a1b3e47 ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x4d3bb9ac ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x516e55d3 ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x58adff8d __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x60319dc3 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x840215aa ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x8d291ad8 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xafa053c9 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xb4de9a80 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xb8d27745 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xe60d23f1 ssb_driver_unregister +EXPORT_SYMBOL drivers/telephony/ixj 0xa5fd6840 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x7e33e194 phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xc0f0df85 phone_register_device +EXPORT_SYMBOL drivers/thermal/thermal_sys 0x6c5dd51d thermal_zone_bind_cooling_device +EXPORT_SYMBOL drivers/thermal/thermal_sys 0xbf4682d2 thermal_zone_device_unregister +EXPORT_SYMBOL drivers/thermal/thermal_sys 0xc95e2e25 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL drivers/thermal/thermal_sys 0xd65da166 thermal_zone_device_update +EXPORT_SYMBOL drivers/thermal/thermal_sys 0xd67f82af thermal_cooling_device_register +EXPORT_SYMBOL drivers/thermal/thermal_sys 0xee3d317c thermal_zone_device_register +EXPORT_SYMBOL drivers/thermal/thermal_sys 0xf96a0442 thermal_cooling_device_unregister +EXPORT_SYMBOL drivers/usb/gadget/net2280 0x0ee0666d usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/net2280 0x2583ab66 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/net2280 0x56cf5b13 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x04bba1b6 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x4a55e12d usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xb9b7ed47 usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x31c3d20f lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x49a88ac3 lcd_device_register +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x46b3156f cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x67341df7 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/cyber2000fb 0xe4912e6c cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xfb95c89f cyber2000fb_attach +EXPORT_SYMBOL drivers/video/display/display 0x1411a2c6 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0x33f4aa3e display_device_unregister +EXPORT_SYMBOL drivers/video/macmodes 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0xb6e600cd mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/output 0x04893e05 video_output_register +EXPORT_SYMBOL drivers/video/output 0xecd6283e video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x332e5ec0 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x41b43c68 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x4e0f3827 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8d2c2225 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x925df445 svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x9bf3b5e6 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xb5736586 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0x1d79a4cd sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x5bd20445 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xaf5e0fb2 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x067f36bd w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0xa0b95ed6 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x26c14a0b w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4a3fc081 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xaba6b39e w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb0f27e22 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/wire 0x0ef71b43 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x1d824c7d w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xb1308693 w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0xf3dc222e w1_remove_master_device +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x672c9d44 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa8d6daac iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xd0efe320 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/configfs/configfs 0x188566ac config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x198e9acc config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x4ecc4fbb configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x59f17ec5 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x8756c125 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x95c5b176 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x98343db6 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x9ccc20ed config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xb7067627 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xbb45737d config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0xbf1e9699 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xd3898828 config_item_init +EXPORT_SYMBOL fs/fscache/fscache 0x00574706 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x05c8bc1b fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x09987ec7 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x1d8df8e3 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x299d3c96 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x33fab6f8 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x36bfcf53 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x4134efb0 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x43c78d8f fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x4a2e98fc __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x4d84dbde __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x57412305 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x61c04cde __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x6aa3fe21 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x6adcafbe fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x754b3f81 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x8b2abbfd fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x92051e35 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x98e5486a fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x98ff2482 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xbf44e245 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0xc27e5141 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0xdf4cbb96 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0xe61d457d __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0xe7a8aa06 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xf1463988 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xf6fd2066 fscache_obtained_object +EXPORT_SYMBOL fs/nfsd/nfsd 0x1f573533 nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x96ce9bb4 nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0xdb389aec nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/quota/quota_tree 0x14d0a28b qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x57fb426f qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x652f4bbb qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x76edba10 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xd8218478 qtree_write_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-t10dif 0x782acba5 crc_t10dif +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0xcdf71987 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xfdaf01a3 make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x01506fcf p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x0e9b6517 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x24b9e87f v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x263675f5 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x2e1f729d p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x33f7602d p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x3c58ca4d p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x42976e7b v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x429d130e p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x4a85b802 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x592cc6c1 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x6d942660 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x6f186d3a p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x726c8663 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x77590400 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x7a5a273a v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x7b157488 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x8fd31a98 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x91064279 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x946207cb p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xb34b3c1c p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0xc66c1849 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0xcaf3ffb4 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xccd169eb p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xe152e45d p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe920d4a0 p9_client_cb +EXPORT_SYMBOL net/appletalk/appletalk 0x1dbb3bec atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0xc1260f4f atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0xe6faa3ce aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0xf2ae11f3 alloc_ltalkdev +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x1d6ea07c atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x247292ca deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x2923da43 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x4390e463 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x476c2799 atm_charge +EXPORT_SYMBOL net/atm/atm 0x56b788c3 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x62b218c8 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x62b48eba vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xb8b8a4ec atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xd89219b2 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0xdf0a5718 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xe986b20c atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/ax25/ax25 0x0fdf690a ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x201b8c06 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x537c477e ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x5fc6280f ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x648b8f9e ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x84e146d3 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x9d02912d ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xdd02849d ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0xeece7bc7 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0xff34c9c3 ax25_linkfail_release +EXPORT_SYMBOL net/bluetooth/bluetooth 0x099e61ca hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0c1feb88 hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0eebf0d0 hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0f7807af bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x143bc6f2 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x149ffbb6 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1ca8474b hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2f485afd hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3462d4b0 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x37f92b75 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x445d59c4 hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4a2ac278 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0x556cfc3a bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x63582fee hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x71c80063 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7c087c8f bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7d950d67 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x847d04ef hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8735f1da hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9239c0b4 hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x92b6b087 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9c7cc408 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa2f93350 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa99ae5e8 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb281b50a hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb6e888b1 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0xba64aa60 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc0ede449 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd1d26949 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xde95c184 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe3f00a3d hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x028dc610 br_should_route_hook +EXPORT_SYMBOL net/can/can 0x0e925c4a can_proto_register +EXPORT_SYMBOL net/can/can 0x5af2c702 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x6e56bf0f can_rx_unregister +EXPORT_SYMBOL net/can/can 0xc3285245 can_send +EXPORT_SYMBOL net/can/can 0xecd5005a can_rx_register +EXPORT_SYMBOL net/ieee802154/nl802154 0x393b90ed ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x44f03e45 ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x60a7a57c ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x6d4bd7b7 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xc61993e1 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xf33ac65c ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xfb51d6e9 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/wpan-class 0x30780e3b wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0x4659231e wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x5744d11d wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0x96eb5b95 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0xb3c0e95f wpan_phy_alloc +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x3105ec87 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xa3fa7f99 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xed6479c3 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x8552f2f7 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x95973c92 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xbc63c5be ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x1e3fc380 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2e6afb73 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x3459f3b9 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x47dfb79e nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xcc372584 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xd6a09efc nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xe4bcec18 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/tunnel4 0x1f9c4959 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0x597df2e1 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/ipv6 0x02c01247 xfrm6_input_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL net/ipv6/ipv6 0x2160ec85 ipv6_push_nfrag_opts +EXPORT_SYMBOL net/ipv6/ipv6 0x2c5950e7 ndisc_mc_map +EXPORT_SYMBOL net/ipv6/ipv6 0x2dbac515 ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x2f2627ee rt6_lookup +EXPORT_SYMBOL net/ipv6/ipv6 0x2f31dd08 ip6_xmit +EXPORT_SYMBOL net/ipv6/ipv6 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0x35ea29e7 inet6_add_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x3827aac2 xfrm6_prepare_output +EXPORT_SYMBOL net/ipv6/ipv6 0x41d3c7c8 compat_ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x506a77bd in6_dev_finish_destroy +EXPORT_SYMBOL net/ipv6/ipv6 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0x5c05c0f2 compat_ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x5c2a7e24 xfrm6_rcv_spi +EXPORT_SYMBOL net/ipv6/ipv6 0x714901bc xfrm6_rcv +EXPORT_SYMBOL net/ipv6/ipv6 0x8827750b xfrm6_find_1stfragopt +EXPORT_SYMBOL net/ipv6/ipv6 0x8ef1b0e4 inet6_getname +EXPORT_SYMBOL net/ipv6/ipv6 0x8fb51db7 ip6_frag_match +EXPORT_SYMBOL net/ipv6/ipv6 0x924ea59e ndisc_send_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xb4ee7d02 ip6_route_me_harder +EXPORT_SYMBOL net/ipv6/ipv6 0xb706b65b ipv6_dev_get_saddr +EXPORT_SYMBOL net/ipv6/ipv6 0xc397f90d ip6_frag_init +EXPORT_SYMBOL net/ipv6/ipv6 0xc51ae68a ip6_route_output +EXPORT_SYMBOL net/ipv6/ipv6 0xc67b15ab ipv6_chk_prefix +EXPORT_SYMBOL net/ipv6/ipv6 0xc68e762e icmpv6_send +EXPORT_SYMBOL net/ipv6/ipv6 0xc84c9690 inet6_bind +EXPORT_SYMBOL net/ipv6/ipv6 0xcab1d763 ndisc_build_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xcdbfa132 nf_ip6_checksum +EXPORT_SYMBOL net/ipv6/ipv6 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0xd398d2e9 inet6_unregister_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0xd92afde4 ipv6_chk_addr +EXPORT_SYMBOL net/ipv6/ipv6 0xe0b3c012 inet6_del_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL net/ipv6/ipv6 0xec8b0708 inet6_release +EXPORT_SYMBOL net/ipv6/ipv6 0xed7cb688 ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0xf43adf37 inet6_ioctl +EXPORT_SYMBOL net/ipv6/ipv6 0xfd14fdaf inet6_register_protosw +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x194ffe27 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa2359654 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb4def6d3 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xf74fb1d7 ip6t_register_table +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x17319492 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x216c6da1 ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x5ae0b2ff ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x6bfc563b ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x9477094b ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x9623d75d ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x9632434c ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xa2c0c094 ircomm_open +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x1a617b1d irias_find_object +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x23237ca4 irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x263f5ab4 hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0x34db9b5d irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x4096621c irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x4ba5dc74 hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x57db180a async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x5b8b95bb hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0x5d1487c7 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x5d20d66a irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x62c83096 irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0x6963589a irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x74fbce8c irda_notify_init +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x76d1209b irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7c007de0 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x7dc1f9dc irlap_open +EXPORT_SYMBOL net/irda/irda 0x800d8d52 irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x82216271 irlap_close +EXPORT_SYMBOL net/irda/irda 0x85a9d644 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x8b149690 irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x9694bb4c hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x982b6b09 hashbin_new +EXPORT_SYMBOL net/irda/irda 0x98e816b4 iriap_close +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9fea5965 hashbin_remove +EXPORT_SYMBOL net/irda/irda 0xa45993f4 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xaccdb15b proc_irda +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbde32277 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc10f5acd irias_new_object +EXPORT_SYMBOL net/irda/irda 0xc12502bd irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xc3f2bdc9 async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xc68e9606 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0xccce8517 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0xd1e403fd iriap_open +EXPORT_SYMBOL net/irda/irda 0xd3aeda40 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0xd3edad11 hashbin_find +EXPORT_SYMBOL net/irda/irda 0xd5cc1780 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xdfaf55d4 irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xe541e2c2 irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0xe5dce846 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf4f7db7a alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0xf99bce12 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xfbd572b0 irttp_dup +EXPORT_SYMBOL net/lapb/lapb 0x01885864 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x52e00a8d lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x55721533 lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0xa7e5a60e lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0xab84e9e5 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0xc1217ee4 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0xe6136541 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0xf99187b2 lapb_getparms +EXPORT_SYMBOL net/mac80211/mac80211 0x08ec721f __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x09aee62e ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x1453a7f7 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x1b6adaa7 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x27c8384d ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x323bbf88 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x408bf4ed ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x45fb50c2 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x58e5d1bd ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x59b43693 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x68e805ac ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x6c5a39ac ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x6f83c215 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x717e6d7e ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x7707a9ce ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x7d2ef006 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x86b6fad3 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x8e405fa2 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xa1644ed0 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xa4505713 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0xa491204d ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0xa566ae7a __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xaa0b7c5e ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xab6544c9 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xaf737736 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xb18da1e8 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0xb5367ffc ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xc631483d ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xc67f3db4 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0xc767020d ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xcac4ef78 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xd30198d4 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xd308181d ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xd4b8b607 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0xd9292d7f ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xd93298d1 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xd9a32a6c ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xde667c10 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xeedc321f ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xf7383509 rate_control_send_low +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x0a179563 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x0fbd9efa ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x27b058da register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x40678e34 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x513d18e2 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x6cb0476f ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd383fb86 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd7e99cb3 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xda97c25f ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xdd7cffcf ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xed6b43fa ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x6f55b265 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x783cb10e __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0xd607658f nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x0718a9a1 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x1005d27e xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x5164982f xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x53407742 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x6fb0e333 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xabab3f88 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xd72b4fb3 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xdbceb894 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xdeb1433a xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xfc340238 xt_unregister_target +EXPORT_SYMBOL net/phonet/phonet 0x157423d4 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x2c7d0b8d pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x66e76d10 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x6a113382 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xb2dfe888 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xb99ca250 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0xbe5af78a phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0xc67f6e94 phonet_proto_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0x03a65f49 rfkill_register +EXPORT_SYMBOL net/rfkill/rfkill 0x0550b8d0 rfkill_alloc +EXPORT_SYMBOL net/rfkill/rfkill 0x1c4544b5 rfkill_set_states +EXPORT_SYMBOL net/rfkill/rfkill 0x438c1a59 rfkill_resume_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x45331831 rfkill_blocked +EXPORT_SYMBOL net/rfkill/rfkill 0x489bb7fe rfkill_get_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x6732d14b rfkill_set_hw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x81700511 rfkill_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0x836fcd2c rfkill_init_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0xa4f6c310 rfkill_set_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0xdefffd4c rfkill_pause_polling +EXPORT_SYMBOL net/rfkill/rfkill 0xec2c9020 rfkill_destroy +EXPORT_SYMBOL net/rfkill/rfkill 0xee83bf2d rfkill_set_sw_state +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0d22e9c9 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x28c3842c key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3dd9d31d rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x5973fa05 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x5d8e3ceb rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x69f31857 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x776b0d88 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x818cd18b rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9eba29ec rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa1672158 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb109da33 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb4e61d14 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc0dee531 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe22ac4ca rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf634aa4d rxrpc_get_server_data_key +EXPORT_SYMBOL net/sunrpc/sunrpc 0x5bc09ca0 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x0651fdf1 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x0f94d12f tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x17308e20 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0x23da39db tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x37b0ca94 tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x5e7b621b tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x6c1f486a tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x6fd18f41 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x70f07e93 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x817e73d8 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xa762af43 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xc5b2c4ea tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xf7ef3fa3 tipc_send_buf2port +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x4869d651 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x4629a619 wimax_rfkill +EXPORT_SYMBOL net/wimax/wimax 0x70bb0218 wimax_reset +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0c2076a0 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x132f7e7a cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x13549824 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x167de071 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x1972c1a3 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x1c44e3f5 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x229cad19 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x2b8a1dcc cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x33708c58 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x3561631f wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x42114c11 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x45ab2c9d cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x4761497a wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x4bdd6b0c freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x4d409727 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x4fcfb33a ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x506a3379 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x55a79625 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6c6aa071 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x901a5bb6 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x958eed85 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x967291c0 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x973a6e44 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x999e9077 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xa370448c cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xaae542fb cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xac2193f7 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xc00b4fe8 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc639aa01 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xcbbcd978 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xcd4bb33e cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xd0477e92 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xe0a9a9ad cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xeb55e335 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0xfd2efcee cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0xfd9c8bd4 regulatory_hint +EXPORT_SYMBOL net/wireless/lib80211 0x164db309 lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x19835998 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x24bc792b lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x71db6eaa lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x941a6525 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xc57be76f lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0xe90fa24d lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0xeff58576 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x1c9a23be ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x497c2235 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x2f0452ca snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x35ca8a98 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8f062176 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x97ecaeef snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x2ace2441 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x31f15bee snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x025ed7ec snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x08ef1bf8 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x484f6d65 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x6a19e5da snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9d1d1cfe snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xa343a003 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xcca03770 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xf222f56c snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x021ca49b snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x075d3565 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x09a7fd84 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x0c3ea544 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x1174d5cd snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x1573a3f1 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1c35a6d0 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x1f1879c9 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x2c81d252 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x2e06e163 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x2faec0a4 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x2fff9415 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x3511d757 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3bbcd900 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x430bb7c5 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x43522eda snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x45408dc7 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x469395cb snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4b6e0cdc snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x4cd49308 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x50492fbc snd_cards +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x52b26b51 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x627cf6b6 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x6c437f42 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x6d0fa4c1 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x7070d042 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x816cc292 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x83d37bdd snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x88d11e31 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x90a3749d snd_component_add +EXPORT_SYMBOL sound/core/snd 0x9117bf42 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa25d835e snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xa8f7e6c5 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0xb2239366 snd_card_register +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb871d32d snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xbc0bd87e snd_info_register +EXPORT_SYMBOL sound/core/snd 0xbc963774 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xc6a8adbe snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xc73ea02e snd_power_wait +EXPORT_SYMBOL sound/core/snd 0xd3f177eb snd_jack_new +EXPORT_SYMBOL sound/core/snd 0xd717f2fa snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xd784ca0f snd_device_free +EXPORT_SYMBOL sound/core/snd 0xd983808c snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0xded20703 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xecaa7a62 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0xf0f05620 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xfad47f0e snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xfeb4bc46 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd-hwdep 0x7cc2a753 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x828e5048 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0xa438f8ac snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xbe1fe762 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xdec8acc3 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xece517d0 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0a072102 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x0f4dc9a5 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x130674bb snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x1da04742 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x24a9a4a4 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x29d74b6b snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x2fea6312 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x31ae6d70 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x34c35a38 snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x4223e222 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x42569b4f snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x574c77d8 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x5dfa6970 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x656b86d8 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6ea86217 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x721f2b0d snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x76a3c536 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x7bcda925 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x80fd79b8 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x84c0b285 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x8b5d196c snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x959a3d54 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x986bbf9f snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa64f79c9 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0xafc25d6b snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbfb38cf5 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0xc4119b21 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0xc4dd2db6 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0xc6348c14 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0xc770a8c9 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0xc9944402 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd4e9ac87 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe71cb3aa snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xefc3f32f snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xf109f281 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xf222aefc snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xfde2df73 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-rawmidi 0x06a09247 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1874b06e snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x29cb9746 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4a52a9ae snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x677414a3 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x67f1fc97 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6826b42a snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x69b0bb28 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x72ff291c snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7396e5cb snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x80e29aaa snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8add3f71 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xab6a53c9 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xc09b62b9 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd8980950 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe9c28b15 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf857197c snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-timer 0x16cec7db snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x41560341 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x61d675c4 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x65630d0d snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x6ffb4705 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x90d80cb7 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xa249e867 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0xa3aa7dc6 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0xaec38b1c snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0xc830ba20 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xe8e7958e snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0xef732601 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xfb8975d1 snd_timer_notify +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x76147ae1 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x16991b2c snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x40c8fb5d snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x431a88d1 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x4495d4ff snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x662a53b7 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x6b938654 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x6f7c6ab6 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xc500f151 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd39f69a6 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x3df7199c snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x58e7c860 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x6419d843 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x743f2bbb snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x78832137 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x7c454469 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xc4f24fa8 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xd11a972b snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xf2a2198a snd_vx_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x26524459 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x4b42c84a snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x6beeaf0f snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x6cc33d54 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xc0b47a8c snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xcbbd672c snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x071d2bf3 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x0ca48c37 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x22307347 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2f270954 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x49d2082b snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xb04fb706 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x184b6eca snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x59fa2226 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x7d75b7dd snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xb8651467 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x1a2484e0 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x3757a970 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x60d97bfb snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xd8f8d787 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x1a114243 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x218c2d12 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x2fa1de8d snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x3779c71a snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x7977e108 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x3a01b3a0 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x75deb154 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x85b8f55d snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x939cc31a snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x9b94897d snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xff177dce snd_i2c_sendbytes +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0efef182 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x152b6069 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1685f25b snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1be43b30 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x2e10c4de snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x3015bbff snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x41a33335 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5a474d72 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6990558f snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6cefa71a snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x753b990a snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb0ea7511 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb888c901 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xbf48282d snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc45e05dd snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc45e50a2 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe19c49fd snd_ac97_update +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x1ed4b938 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x5484d406 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x6456170e snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x69efe641 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x78a8335b snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xab36d8e6 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xae78e039 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd51fb32c snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xea694736 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x29db8cb3 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x128df776 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x5062909b snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xc76804be snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x1a3a3e05 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x2ef0eb76 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x33209756 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x61868020 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xef91defe snd_trident_free_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x1d65d09e uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x24fd7196 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x423dfb7b register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x513b3e11 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x8f0c410f sound_class +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xa3f8d48a register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xf1bb4bd6 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x053c321b snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x55c09a10 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x645a7158 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x81e824d3 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x9f46fa7c snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x9f858767 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/snd-util-mem 0x12f3fec2 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x69b58020 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x6c867a9f snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x71940e83 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x86a955bc snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x8fa9a56b snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x95d1407c __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xf936d04b __snd_util_mem_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x2bdcd710 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x000bb862 serio_reconnect +EXPORT_SYMBOL vmlinux 0x001d683f pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x003e5dd4 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x006da085 acpi_unlock_battery_dir +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x009a527f pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00c28310 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00cd447c pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00d0d980 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00d91c30 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00eef49e __strnlen_user +EXPORT_SYMBOL vmlinux 0x0126f1d3 call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01d53baa ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x01dbe702 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x01eddad4 per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x01f94a94 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x020cb07b cad_pid +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0291fa55 dst_release +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02aab49c ilookup5 +EXPORT_SYMBOL vmlinux 0x02aff2f4 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x02d7e225 genphy_read_status +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x0301e43c skb_find_text +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x033f1357 skb_pull +EXPORT_SYMBOL vmlinux 0x0340d0e1 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x035e54e7 unw_unwind_to_user +EXPORT_SYMBOL vmlinux 0x03725658 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x0381f394 console_start +EXPORT_SYMBOL vmlinux 0x039f8085 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x03add566 skb_dequeue +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03c4fa44 __breadahead +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x04022f49 journal_force_commit +EXPORT_SYMBOL vmlinux 0x041defae __blk_run_queue +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x044a3329 tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0x0450ed11 pci_save_state +EXPORT_SYMBOL vmlinux 0x04558ec2 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04ae4399 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x04d8300d __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x04e1104a elv_queue_empty +EXPORT_SYMBOL vmlinux 0x05101413 textsearch_register +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x052a8f4d jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x053dd1d7 d_path +EXPORT_SYMBOL vmlinux 0x053ea22b sn_region_size +EXPORT_SYMBOL vmlinux 0x0554d006 get_sb_ns +EXPORT_SYMBOL vmlinux 0x056b7289 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x0599111b force_sig +EXPORT_SYMBOL vmlinux 0x05bbd5c2 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x05c9cac9 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x05d00c2e pskb_expand_head +EXPORT_SYMBOL vmlinux 0x05ef1122 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x060c4609 d_alloc +EXPORT_SYMBOL vmlinux 0x060d680f xor_ia64_4 +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x061a5793 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x06557c65 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0x065f5c65 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x067074f7 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x068b850a init_special_inode +EXPORT_SYMBOL vmlinux 0x069a129f __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06b19365 tty_name +EXPORT_SYMBOL vmlinux 0x06bfd4f6 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0x06d728b1 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x06e3399a give_up_console +EXPORT_SYMBOL vmlinux 0x06eb1d53 journal_revoke +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x070b6b55 replace_mount_options +EXPORT_SYMBOL vmlinux 0x071032f3 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x0718c22c _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x072a3a03 tty_write_room +EXPORT_SYMBOL vmlinux 0x0754af97 tr_type_trans +EXPORT_SYMBOL vmlinux 0x0767d1eb dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x07699a31 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x07980d75 pci_release_region +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9d0e0 vga_get +EXPORT_SYMBOL vmlinux 0x07fc38b2 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x080522ac acpi_lock_battery_dir +EXPORT_SYMBOL vmlinux 0x081358d0 simple_write_begin +EXPORT_SYMBOL vmlinux 0x0823ae24 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x084c472c find_vma +EXPORT_SYMBOL vmlinux 0x085b314b tty_unthrottle +EXPORT_SYMBOL vmlinux 0x088132bd cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x08956a40 dentry_open +EXPORT_SYMBOL vmlinux 0x08a1dded netpoll_print_options +EXPORT_SYMBOL vmlinux 0x08a6d43a pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x08c09abb ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08e6b007 ia64_iobase +EXPORT_SYMBOL vmlinux 0x08eaf4f9 matrox_cfbX_init +EXPORT_SYMBOL vmlinux 0x0918cbb7 put_mnt_ns +EXPORT_SYMBOL vmlinux 0x09379678 genphy_suspend +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x09591eb2 kill_pgrp +EXPORT_SYMBOL vmlinux 0x098431ba acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x0994495e nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x09991e7b kfifo_init +EXPORT_SYMBOL vmlinux 0x09a0184e tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09da8586 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x09eba446 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x09ecacbd inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x0a1ba1c1 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3da574 write_cache_pages +EXPORT_SYMBOL vmlinux 0x0a634580 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x0a646276 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x0a6a7cb9 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x0a6b72b6 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x0aa88147 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acca637 min_low_pfn +EXPORT_SYMBOL vmlinux 0x0ae55b39 per_cpu__kstat +EXPORT_SYMBOL vmlinux 0x0aff9c0d mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x0b0d8063 journal_errno +EXPORT_SYMBOL vmlinux 0x0b14254e genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b2d1b57 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x0b6e3143 eth_header_cache +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0bab2b08 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x0bb0a997 sn_sharing_domain_size +EXPORT_SYMBOL vmlinux 0x0bb1384d jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x0c01d887 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x0c1d031b tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x0c2c2ea6 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x0c5f4c1f gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cd7d26b _read_lock +EXPORT_SYMBOL vmlinux 0x0cf4b5f3 revalidate_disk +EXPORT_SYMBOL vmlinux 0x0cf86897 backlight_force_update +EXPORT_SYMBOL vmlinux 0x0d383e43 brioctl_set +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d4dd20b send_sig +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d960176 generic_getxattr +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0da1b2b9 key_task_permission +EXPORT_SYMBOL vmlinux 0x0dab1caa __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x0dbce1b9 idr_for_each +EXPORT_SYMBOL vmlinux 0x0de11ab0 put_tty_driver +EXPORT_SYMBOL vmlinux 0x0df38cee simple_link +EXPORT_SYMBOL vmlinux 0x0df655e0 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x0e04d476 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x0e4e9bc5 matroxfb_g450_connect +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e551d3b pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x0e57e332 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x0e662f92 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x0e727fd4 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x0e81f0e4 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x0e87fb41 block_prepare_write +EXPORT_SYMBOL vmlinux 0x0ebeb7ce dquot_claim_space +EXPORT_SYMBOL vmlinux 0x0edd6d07 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x0ef4da09 unw_access_ar +EXPORT_SYMBOL vmlinux 0x0f0f1da4 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f824560 single_release +EXPORT_SYMBOL vmlinux 0x0f90cd0e bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x0f9c8d6a ps2_command +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x102b5b21 sn_system_serial_number_string +EXPORT_SYMBOL vmlinux 0x104d432b kfifo_free +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x109fbeeb input_allocate_device +EXPORT_SYMBOL vmlinux 0x10b3b2c8 aio_complete +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x110b3186 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x110f8cb5 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x1117345c elevator_init +EXPORT_SYMBOL vmlinux 0x111e29a5 llc_sap_open +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x114ff863 open_exec +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x11816255 input_get_keycode +EXPORT_SYMBOL vmlinux 0x11879b92 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x121f1ac6 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x1236ce39 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x124c9939 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x126be65c wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x129483ce pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x129697b8 memcpy_toio +EXPORT_SYMBOL vmlinux 0x131270b3 netif_device_attach +EXPORT_SYMBOL vmlinux 0x133196bb skb_unlink +EXPORT_SYMBOL vmlinux 0x137f3a9f dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x138a78d1 set_current_groups +EXPORT_SYMBOL vmlinux 0x13c239d2 get_super +EXPORT_SYMBOL vmlinux 0x13ebd352 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x13fff7c2 release_sock +EXPORT_SYMBOL vmlinux 0x1414c3bd pnp_is_active +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x14448f3a gen_new_estimator +EXPORT_SYMBOL vmlinux 0x145e1681 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x147358b1 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x148818bf __napi_complete +EXPORT_SYMBOL vmlinux 0x148c8f9a vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x1496c5a4 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x14a30af9 dev_gro_receive +EXPORT_SYMBOL vmlinux 0x14a4057d matroxfb_DAC_out +EXPORT_SYMBOL vmlinux 0x14bab86c pci_iounmap +EXPORT_SYMBOL vmlinux 0x14bd3e53 unregister_netdevice +EXPORT_SYMBOL vmlinux 0x1521a2ee hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x15526e93 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x15718671 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x157bf70e skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x158d1d82 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x1590acd3 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x159f1e93 matroxfb_g450_setclk +EXPORT_SYMBOL vmlinux 0x15acf395 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x15b58853 ipv4_specific +EXPORT_SYMBOL vmlinux 0x15bd2fc9 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x15d9bcea bio_endio +EXPORT_SYMBOL vmlinux 0x15e704d7 journal_abort +EXPORT_SYMBOL vmlinux 0x15f7fd4f elv_rb_add +EXPORT_SYMBOL vmlinux 0x1622e155 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x16284d0e set_create_files_as +EXPORT_SYMBOL vmlinux 0x162afde6 register_console +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x165c57df fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x1660e9a5 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x1672704b pci_write_vpd +EXPORT_SYMBOL vmlinux 0x1675606f bad_dma_address +EXPORT_SYMBOL vmlinux 0x16a47c20 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x16a9cfea blkdev_put +EXPORT_SYMBOL vmlinux 0x16c04618 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x16e1143f jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x17178d4c __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x172e85e7 qdisc_list_del +EXPORT_SYMBOL vmlinux 0x17376d50 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x17469f97 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x17490628 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x176db5b2 i2c_master_send +EXPORT_SYMBOL vmlinux 0x177a42f9 skb_copy +EXPORT_SYMBOL vmlinux 0x177da289 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x17ab8f88 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17c96826 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x17dd64f4 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x181b6685 idr_remove +EXPORT_SYMBOL vmlinux 0x1825542b jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x183f3ef7 misc_register +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x18646b5f dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18ad7aa2 input_inject_event +EXPORT_SYMBOL vmlinux 0x18decfb5 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x18e55b97 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x1902bcc9 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x191403ee vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x1918691d clear_inode +EXPORT_SYMBOL vmlinux 0x192c627f generic_listxattr +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x195e8299 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x197b99ed xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x19801c83 netif_napi_del +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19c4b013 simple_fsync +EXPORT_SYMBOL vmlinux 0x19d11e7e generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x19d4d6fa inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x19d5d20a acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x19f18062 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x1a26eb7c nobh_writepage +EXPORT_SYMBOL vmlinux 0x1a275708 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x1a360060 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x1a6bc448 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x1a74996f iput +EXPORT_SYMBOL vmlinux 0x1a8a845e idle_nomwait +EXPORT_SYMBOL vmlinux 0x1a9db142 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1adc545e remove_proc_entry +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0c323f sk_receive_skb +EXPORT_SYMBOL vmlinux 0x1b223e31 km_query +EXPORT_SYMBOL vmlinux 0x1b22654c fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x1b2548e0 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b7c6f6f kick_iocb +EXPORT_SYMBOL vmlinux 0x1b82bf7e phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b8eccbf tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1bb6b24e vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x1bde5a37 down +EXPORT_SYMBOL vmlinux 0x1be1babf add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x1be6550f vfs_stat +EXPORT_SYMBOL vmlinux 0x1c19e681 vfs_fsync +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c243caf tcf_register_action +EXPORT_SYMBOL vmlinux 0x1c54c9ab drop_super +EXPORT_SYMBOL vmlinux 0x1c588a8c del_timer_sync +EXPORT_SYMBOL vmlinux 0x1c5cdebc d_alloc_name +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c9a24e5 inet_put_port +EXPORT_SYMBOL vmlinux 0x1cb4c3d0 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x1cbca4e3 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1cca2aab xfrm_input +EXPORT_SYMBOL vmlinux 0x1cf29e50 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x1cfbe9ea acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x1d043121 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x1d0666ef kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x1d14c505 phy_stop +EXPORT_SYMBOL vmlinux 0x1d1683e6 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x1d243d91 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x1d29ff8c i2c_verify_client +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d3b1893 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x1d413e11 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x1d5c968c ia64_pal_call_stacked +EXPORT_SYMBOL vmlinux 0x1da19557 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1df1b018 prepare_binprm +EXPORT_SYMBOL vmlinux 0x1dfc1ba3 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x1e042753 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x1e35eec4 lease_modify +EXPORT_SYMBOL vmlinux 0x1e432413 stop_tty +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1eb1aaa2 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x1eedd14b d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x1ef8008c read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x1ef95749 vm_map_ram +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f1ce4f4 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x1f57ea0e simple_getattr +EXPORT_SYMBOL vmlinux 0x1f99d0a9 skb_store_bits +EXPORT_SYMBOL vmlinux 0x1fb9e76c wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x1fce6ab7 pci_dev_put +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x20301636 physical_node_map +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x206b2f78 write_one_page +EXPORT_SYMBOL vmlinux 0x2071b5df generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x20ad01e4 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x20bb317a find_get_page +EXPORT_SYMBOL vmlinux 0x20c5f14e tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x20e46183 skb_pad +EXPORT_SYMBOL vmlinux 0x20e7ca99 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x20eadeb6 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x20fc1288 bdevname +EXPORT_SYMBOL vmlinux 0x211331fa __divsi3 +EXPORT_SYMBOL vmlinux 0x2114b478 should_remove_suid +EXPORT_SYMBOL vmlinux 0x21463140 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x2154f2a8 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x217621d1 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x218de2e9 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x21a73146 sock_create +EXPORT_SYMBOL vmlinux 0x21e0a871 netlink_ack +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x22090c7e sget +EXPORT_SYMBOL vmlinux 0x22286a1e key_put +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x22300fa7 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x22372a0c dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2276d1fd blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22c95330 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x22d18959 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x231f556d xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x2376cac6 dev_get_flags +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x2409b628 g450_mnp2f +EXPORT_SYMBOL vmlinux 0x242d6041 add_wait_queue +EXPORT_SYMBOL vmlinux 0x244ddf37 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x244e5f69 f_setown +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x24724830 sn_dma_flush +EXPORT_SYMBOL vmlinux 0x24835001 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x2498eece acpi_device_hid +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x25445677 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x256652bc netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25b4eb5e _read_lock_irq +EXPORT_SYMBOL vmlinux 0x25b7b5ee tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL vmlinux 0x25d38325 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x25dcd4f4 vfs_llseek +EXPORT_SYMBOL vmlinux 0x25ebb063 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x262de2cf mnt_pin +EXPORT_SYMBOL vmlinux 0x2633be48 __find_get_block +EXPORT_SYMBOL vmlinux 0x26343c60 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x267a74c7 tty_hangup +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x269f19b6 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x26acf0f7 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x26d05c31 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x2703b97b shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x2723593a dput +EXPORT_SYMBOL vmlinux 0x2730913a pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x2746218b security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x274960d1 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x274ba394 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x275f4ef3 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x2761e726 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x277673d8 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27a76670 qdisc_reset +EXPORT_SYMBOL vmlinux 0x27b26fde lookup_hash +EXPORT_SYMBOL vmlinux 0x27b32387 vfs_quota_off +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c33efe csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x28010f92 ida_pre_get +EXPORT_SYMBOL vmlinux 0x282b5899 _read_trylock +EXPORT_SYMBOL vmlinux 0x285135e6 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x288cdc36 security_path_rename +EXPORT_SYMBOL vmlinux 0x28932537 sn_coherency_id +EXPORT_SYMBOL vmlinux 0x28a5a3f0 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x28df9009 udp_disconnect +EXPORT_SYMBOL vmlinux 0x28e284bd register_con_driver +EXPORT_SYMBOL vmlinux 0x28ed465e __scm_destroy +EXPORT_SYMBOL vmlinux 0x291ee908 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x297407c8 bdev_read_only +EXPORT_SYMBOL vmlinux 0x297c7029 sn_partition_serial_number +EXPORT_SYMBOL vmlinux 0x2992336a sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x299b9c1e is_container_init +EXPORT_SYMBOL vmlinux 0x299fe746 xrlim_allow +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29d320ea inet_csk_accept +EXPORT_SYMBOL vmlinux 0x29fdee68 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x2a0534d3 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a3b2a16 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x2a5465cf vmalloc_end +EXPORT_SYMBOL vmlinux 0x2a54694e unw_access_br +EXPORT_SYMBOL vmlinux 0x2a581aa5 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x2a6bb2c8 mempool_free +EXPORT_SYMBOL vmlinux 0x2a712af8 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0x2a8d983c jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x2a8decbe call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x2a910806 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x2ab393c2 netif_rx +EXPORT_SYMBOL vmlinux 0x2ae2822a ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x2b02c8bd i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x2b0c054d pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x2b1da803 skb_queue_head +EXPORT_SYMBOL vmlinux 0x2b606088 ia64_pal_call_phys_static +EXPORT_SYMBOL vmlinux 0x2b85a821 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bc4685d set_disk_ro +EXPORT_SYMBOL vmlinux 0x2bcc1d3d inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x2bd5c1ec remove_inode_hash +EXPORT_SYMBOL vmlinux 0x2be76aad generic_unplug_device +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c165548 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x2c3aae11 key_negate_and_link +EXPORT_SYMBOL vmlinux 0x2c5749e6 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x2c686eef tcp_check_req +EXPORT_SYMBOL vmlinux 0x2c8d8a69 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x2c9367fb mempool_create +EXPORT_SYMBOL vmlinux 0x2cad7b29 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x2cca0d50 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x2cd32e87 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x2ce1e27f __sn_mmiowb +EXPORT_SYMBOL vmlinux 0x2d0e6962 cdev_init +EXPORT_SYMBOL vmlinux 0x2d291fb8 down_killable +EXPORT_SYMBOL vmlinux 0x2d3fc6ae open_by_devnum +EXPORT_SYMBOL vmlinux 0x2d5528c9 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x2d57950d inet_release +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2dd6b6aa idr_pre_get +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e2d0ed7 ip_route_input +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e634736 vga_put +EXPORT_SYMBOL vmlinux 0x2e6763a6 idr_find +EXPORT_SYMBOL vmlinux 0x2e7d2162 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x2e8e8b96 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x2ea0590e jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x2ec487e5 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x2ecd3d6c skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x2edb0e37 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x2ef7b100 sg_miter_start +EXPORT_SYMBOL vmlinux 0x2f07db45 d_validate +EXPORT_SYMBOL vmlinux 0x2f0b40ae printk +EXPORT_SYMBOL vmlinux 0x2f0da72f pci_scan_slot +EXPORT_SYMBOL vmlinux 0x2f11be17 no_llseek +EXPORT_SYMBOL vmlinux 0x2f21458b llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0x2f367d8c xor_ia64_3 +EXPORT_SYMBOL vmlinux 0x2f524f60 pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x2f76dc84 sock_create_lite +EXPORT_SYMBOL vmlinux 0x2f7ea3b9 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x2f7f766e vprintk +EXPORT_SYMBOL vmlinux 0x2f8f5376 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x2f96b29c fb_find_mode +EXPORT_SYMBOL vmlinux 0x2fb0ef26 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x2fbea0fd register_snap_client +EXPORT_SYMBOL vmlinux 0x2ff063b5 acpi_get_name +EXPORT_SYMBOL vmlinux 0x300395e2 __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x3006b84a blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x301271da udplite_table +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x30b9d1f1 dquot_alloc +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x3114859b phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x312b8af2 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x31565969 tc_classify +EXPORT_SYMBOL vmlinux 0x31575e27 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31e915b3 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x31ebadcd in_group_p +EXPORT_SYMBOL vmlinux 0x32047ad5 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x32093cc7 __udivdi3 +EXPORT_SYMBOL vmlinux 0x323b74d1 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x3251c18d phy_attach +EXPORT_SYMBOL vmlinux 0x325a7820 inet_bind +EXPORT_SYMBOL vmlinux 0x327f3d17 balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0x32849aa0 netpoll_poll +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32ff0cd9 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x3350863b alloc_file +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x340ec9c6 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x341ba161 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x34233a92 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x3429b70e key_alloc +EXPORT_SYMBOL vmlinux 0x343da08c __wake_up_bit +EXPORT_SYMBOL vmlinux 0x34416013 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x3449c078 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0x344f35df open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x34584826 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x34668785 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x3470b9e2 down_write_trylock +EXPORT_SYMBOL vmlinux 0x34715687 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x349d6af5 unw_access_fr +EXPORT_SYMBOL vmlinux 0x349f1de8 page_readlink +EXPORT_SYMBOL vmlinux 0x34d9f490 blk_insert_request +EXPORT_SYMBOL vmlinux 0x34e0a0d5 may_umount_tree +EXPORT_SYMBOL vmlinux 0x34f15056 dev_addr_del +EXPORT_SYMBOL vmlinux 0x34f18659 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x35273e6c path_get +EXPORT_SYMBOL vmlinux 0x3557bfa7 __free_pages +EXPORT_SYMBOL vmlinux 0x357bd071 ps2_drain +EXPORT_SYMBOL vmlinux 0x358b8c73 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35b2922c kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x35bdad39 fb_class +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35d9d58c shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x3631ea41 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x3634ec1e udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x364a257c unlock_rename +EXPORT_SYMBOL vmlinux 0x364a4429 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x365e781b generic_show_options +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36cbef4c kernel_connect +EXPORT_SYMBOL vmlinux 0x36dea220 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x371506bf __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x3717dbf9 ia64_pfn_valid +EXPORT_SYMBOL vmlinux 0x373f57ce swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x3749a0cc xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x3762cb6e ioremap_nocache +EXPORT_SYMBOL vmlinux 0x376b8cfc setup_arg_pages +EXPORT_SYMBOL vmlinux 0x37753f02 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x37946340 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x37a2b420 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x37b1c9e6 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37cd982d lock_rename +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37dd618f blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x382764e0 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x386117cc pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x386d5743 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0x386dc3cc ia64_sal_oemcall_nolock +EXPORT_SYMBOL vmlinux 0x38767d91 vfs_getattr +EXPORT_SYMBOL vmlinux 0x388f8165 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x389fbaf4 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x38a907f9 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x39003c0d udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x3915390e mapping_tagged +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x3985a058 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x39cbee1c inode_add_bytes +EXPORT_SYMBOL vmlinux 0x39e46851 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x39f32abe input_register_handler +EXPORT_SYMBOL vmlinux 0x39f457fb dquot_scan_active +EXPORT_SYMBOL vmlinux 0x3a0b0e99 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a2b4413 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x3a966120 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3adb10e6 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3aeb551e tty_check_change +EXPORT_SYMBOL vmlinux 0x3aed7527 isa_irq_to_vector_map +EXPORT_SYMBOL vmlinux 0x3b1a6727 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b3ae748 napi_get_frags +EXPORT_SYMBOL vmlinux 0x3b45ac81 vfs_readv +EXPORT_SYMBOL vmlinux 0x3b7887ed dev_close +EXPORT_SYMBOL vmlinux 0x3b78cd1a rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x3bc9fbca textsearch_prepare +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c15630b security_path_rmdir +EXPORT_SYMBOL vmlinux 0x3c199983 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c353385 blk_register_region +EXPORT_SYMBOL vmlinux 0x3c55bcfc pci_pme_active +EXPORT_SYMBOL vmlinux 0x3c6056b3 vga_tryget +EXPORT_SYMBOL vmlinux 0x3c8d079a tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x3c9a3293 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cab5d51 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x3cafb870 get_sb_single +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cdde3b7 ia64_ivt +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cf71638 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x3cf8abd0 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x3d18763c _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x3d5a033a netif_carrier_on +EXPORT_SYMBOL vmlinux 0x3d65e531 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d810838 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3d9ee9f0 clear_page +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3dfac2ac __pci_register_driver +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e4ba78b __put_cred +EXPORT_SYMBOL vmlinux 0x3e546e6b sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x3e5ed846 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x3e62c2e0 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x3e6677ba load_nls +EXPORT_SYMBOL vmlinux 0x3eac9ea3 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef42875 deactivate_super +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f15e542 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x3f163486 seq_puts +EXPORT_SYMBOL vmlinux 0x3f339c25 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f4697bc pipe_lock +EXPORT_SYMBOL vmlinux 0x3f5cd62e pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x3f5e9fd6 serio_close +EXPORT_SYMBOL vmlinux 0x3f6356d4 ia64_reg_MCA_extension +EXPORT_SYMBOL vmlinux 0x3f6bc633 __do_clear_user +EXPORT_SYMBOL vmlinux 0x3f887cd4 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x3fa03a97 memset +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fbe3378 idr_get_new_above +EXPORT_SYMBOL vmlinux 0x3fbf00e3 proc_mkdir +EXPORT_SYMBOL vmlinux 0x3fe7f65b genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x400fd033 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x402f103d ip_getsockopt +EXPORT_SYMBOL vmlinux 0x4032eda8 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x404230de neigh_connected_output +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x4098a19a mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40e61e9a inet_frags_init +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41093866 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x4115d682 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x4138e7fa generic_fillattr +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4184c104 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x418929c8 mnt_unpin +EXPORT_SYMBOL vmlinux 0x41b29c0b nf_register_hook +EXPORT_SYMBOL vmlinux 0x41d512f8 vfs_fstat +EXPORT_SYMBOL vmlinux 0x41e9b4e4 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x4208a260 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x421d6935 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x424cb1e7 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x428c8d73 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0x42a4bdf2 in_egroup_p +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42c4f5e4 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x42ca30b3 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x42dbefd9 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x42df0434 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x42ff9bf6 journal_init_inode +EXPORT_SYMBOL vmlinux 0x42fffbe0 generic_setlease +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4329cd43 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43385ad9 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x43458293 register_gifconf +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x4384813d find_or_create_page +EXPORT_SYMBOL vmlinux 0x439090b9 kernel_thread +EXPORT_SYMBOL vmlinux 0x43a34257 d_move +EXPORT_SYMBOL vmlinux 0x43a4938f vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43c2eab5 vfs_lstat +EXPORT_SYMBOL vmlinux 0x43e56148 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43ecee4b alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x43f8a070 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x44380080 journal_extend +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x444e6a95 inet_shutdown +EXPORT_SYMBOL vmlinux 0x444f2edf security_d_instantiate +EXPORT_SYMBOL vmlinux 0x446a8c57 cpu_to_node_map +EXPORT_SYMBOL vmlinux 0x4474e185 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x447e906d sn_dma_set_mask +EXPORT_SYMBOL vmlinux 0x44a3deef jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44df4a64 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x44e71238 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x4503d9b3 dqget +EXPORT_SYMBOL vmlinux 0x45217a1b writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x454fb519 ioremap +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45b60a12 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x45bc635d ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x45d8000a downgrade_write +EXPORT_SYMBOL vmlinux 0x46020447 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x460ee9b3 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x464a2823 slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x4696be0a wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x4697c975 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x46ba28f5 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x46c8151b pci_release_regions +EXPORT_SYMBOL vmlinux 0x46d7c307 aio_put_req +EXPORT_SYMBOL vmlinux 0x46d9cefe __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x46f4cf6d swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x471b9aa4 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x47297f48 dma_get_cache_alignment +EXPORT_SYMBOL vmlinux 0x473b3d5d dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x476157d7 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x47636033 swiotlb +EXPORT_SYMBOL vmlinux 0x47899364 netlink_set_err +EXPORT_SYMBOL vmlinux 0x4796b7a5 blk_make_request +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a29500 migrate_page +EXPORT_SYMBOL vmlinux 0x47a668dc tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x47a9f591 kobject_set_name +EXPORT_SYMBOL vmlinux 0x47d1c998 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x47f0c2b9 netpoll_setup +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b7315 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x488f7938 vfs_mknod +EXPORT_SYMBOL vmlinux 0x48cea950 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x48fffdb1 ia64_pal_call_phys_stacked +EXPORT_SYMBOL vmlinux 0x4909f50c get_empty_filp +EXPORT_SYMBOL vmlinux 0x490ab9fc vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x49245f12 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49604379 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x498bac6f pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x49afe52e __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x49da0619 dquot_commit +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x4a18ed4c module_refcount +EXPORT_SYMBOL vmlinux 0x4a2beb98 pci_find_bus +EXPORT_SYMBOL vmlinux 0x4a2e39f2 wait_for_completion +EXPORT_SYMBOL vmlinux 0x4a306415 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a45a9b9 seq_printf +EXPORT_SYMBOL vmlinux 0x4a541e2a __umoddi3 +EXPORT_SYMBOL vmlinux 0x4a64e56f gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x4a806d20 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x4a866e7e ia64_sal_oemcall +EXPORT_SYMBOL vmlinux 0x4a87ddbb check_disk_size_change +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4ad19acb mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x4b482f3f unw_init_running +EXPORT_SYMBOL vmlinux 0x4b6c6301 matroxfb_register_driver +EXPORT_SYMBOL vmlinux 0x4b7a2e27 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x4b7f99f4 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x4b85d447 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x4ba5696a block_commit_write +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4bf5c8d9 file_permission +EXPORT_SYMBOL vmlinux 0x4c0d7bba tcf_hash_search +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1c9e4b sn_pci_unfixup_slot +EXPORT_SYMBOL vmlinux 0x4c2991f5 register_framebuffer +EXPORT_SYMBOL vmlinux 0x4c42d525 search_binary_handler +EXPORT_SYMBOL vmlinux 0x4c467067 otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4c53ae6a dm_unregister_target +EXPORT_SYMBOL vmlinux 0x4c5a8296 llc_add_pack +EXPORT_SYMBOL vmlinux 0x4c658f77 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x4c92ed96 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x4c9ea615 input_register_handle +EXPORT_SYMBOL vmlinux 0x4cb146e5 lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cd06cf0 do_munmap +EXPORT_SYMBOL vmlinux 0x4cf9869c bio_integrity_free +EXPORT_SYMBOL vmlinux 0x4d0c21c7 napi_frags_finish +EXPORT_SYMBOL vmlinux 0x4d2adbb2 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x4d509d71 sk_common_release +EXPORT_SYMBOL vmlinux 0x4d62f8ec tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x4d6dc3e1 _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dcefc7e linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4de1acc7 fb_get_mode +EXPORT_SYMBOL vmlinux 0x4de3e9f5 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e5a9718 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x4e5b028b seq_release_private +EXPORT_SYMBOL vmlinux 0x4e63d881 pipe_unlock +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e9dffb5 ip_fast_csum +EXPORT_SYMBOL vmlinux 0x4eba2af5 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x4ecc1e5e get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x4ece45e9 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4ee73144 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x4f0cfaf9 up +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f38b1ff kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x4f468c69 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x4f48cd74 sock_rfree +EXPORT_SYMBOL vmlinux 0x4f52668a sock_wfree +EXPORT_SYMBOL vmlinux 0x4f5438c1 idle_halt +EXPORT_SYMBOL vmlinux 0x4f598c25 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x4f6121a7 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f83fbc1 vfs_link +EXPORT_SYMBOL vmlinux 0x4f8b06ff dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x4fa27437 simple_rename +EXPORT_SYMBOL vmlinux 0x4fb5839a per_cpu____sn_hub_info +EXPORT_SYMBOL vmlinux 0x4fd9ef9c xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x501d960c request_key +EXPORT_SYMBOL vmlinux 0x501fcf83 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x50524020 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x509b850a sk_alloc +EXPORT_SYMBOL vmlinux 0x50a20ee9 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x50b24afa swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x50d1fefa journal_clear_err +EXPORT_SYMBOL vmlinux 0x50d2acbc gen_pool_free +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x50f4c0ac kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x5116650a pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x51459bd6 hp_acpi_csr_space +EXPORT_SYMBOL vmlinux 0x515aba4f jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x51920a32 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x51968798 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x51c6b345 nonseekable_open +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x5242bb3c input_open_device +EXPORT_SYMBOL vmlinux 0x524e228b blk_peek_request +EXPORT_SYMBOL vmlinux 0x5264b938 fb_blank +EXPORT_SYMBOL vmlinux 0x52659e76 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x5272eea4 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x5294fbcf __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x52a2936b ip_defrag +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52c5f1c9 __destroy_inode +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52d9ecd4 set_irq_chip +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x5311037c ia64_sal_oemcall_reentrant +EXPORT_SYMBOL vmlinux 0x5324bb76 tty_throttle +EXPORT_SYMBOL vmlinux 0x532f0e73 bdget_disk +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x5340f84d d_lookup +EXPORT_SYMBOL vmlinux 0x5347195e __devm_release_region +EXPORT_SYMBOL vmlinux 0x534aa1e0 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x53528e5a ida_get_new +EXPORT_SYMBOL vmlinux 0x537357a9 bio_add_page +EXPORT_SYMBOL vmlinux 0x538c639e blk_put_request +EXPORT_SYMBOL vmlinux 0x53918740 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x53a4978a take_over_console +EXPORT_SYMBOL vmlinux 0x53b51777 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53c21a81 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x53da4882 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x5422c25a compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x5451a2ce DAC1064_global_restore +EXPORT_SYMBOL vmlinux 0x54577c44 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x54741d76 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x54a94871 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54bc5139 dev_load +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x5500934c boot_tvec_bases +EXPORT_SYMBOL vmlinux 0x550848de pci_iomap +EXPORT_SYMBOL vmlinux 0x553346ba neigh_event_ns +EXPORT_SYMBOL vmlinux 0x5547fd27 vfs_unlink +EXPORT_SYMBOL vmlinux 0x554bd655 d_instantiate +EXPORT_SYMBOL vmlinux 0x554f0a48 groups_alloc +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55c36457 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x55cdc517 arp_xmit +EXPORT_SYMBOL vmlinux 0x55dfe1c6 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x5628b287 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x5634a9b8 matroxfb_vgaHWinit +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x5674d9ce jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x56a10763 csum_tcpudp_magic +EXPORT_SYMBOL vmlinux 0x56aa3ea8 vm_insert_page +EXPORT_SYMBOL vmlinux 0x56ca38ff _spin_lock_irq +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x572d27e5 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x5731ad96 security_path_symlink +EXPORT_SYMBOL vmlinux 0x575ea7c4 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x578abf02 km_policy_notify +EXPORT_SYMBOL vmlinux 0x5793bd33 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x57abf1c7 bte_unaligned_copy +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57c41012 dst_discard +EXPORT_SYMBOL vmlinux 0x57d81bd1 nf_afinfo +EXPORT_SYMBOL vmlinux 0x57d8ec79 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x58186648 tty_port_close +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x58415dc9 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5868866f log_start_commit +EXPORT_SYMBOL vmlinux 0x5869c772 pcim_iomap +EXPORT_SYMBOL vmlinux 0x5874b59e pci_enable_wake +EXPORT_SYMBOL vmlinux 0x589e4081 file_update_time +EXPORT_SYMBOL vmlinux 0x58aeeeae neigh_for_each +EXPORT_SYMBOL vmlinux 0x58c3ab9e remove_arg_zero +EXPORT_SYMBOL vmlinux 0x58f8350d __mutex_init +EXPORT_SYMBOL vmlinux 0x590931a2 lookup_bdev +EXPORT_SYMBOL vmlinux 0x590ab954 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x59395612 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x594c25f1 down_read_trylock +EXPORT_SYMBOL vmlinux 0x594e1317 __modsi3 +EXPORT_SYMBOL vmlinux 0x5952ce4f __serio_register_port +EXPORT_SYMBOL vmlinux 0x5956611c filp_close +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59c006ae napi_frags_skb +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x5a0fabc6 fput +EXPORT_SYMBOL vmlinux 0x5a2ccdc9 notify_change +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a40fa81 tty_kref_put +EXPORT_SYMBOL vmlinux 0x5a525154 key_type_keyring +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a7f69ac sn_io_slot_fixup +EXPORT_SYMBOL vmlinux 0x5a803bbc compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x5a9435af set_device_ro +EXPORT_SYMBOL vmlinux 0x5ab21209 vfs_follow_link +EXPORT_SYMBOL vmlinux 0x5abe35a2 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5b18a91f vfs_symlink +EXPORT_SYMBOL vmlinux 0x5b1c7305 revert_creds +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b29e64b dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x5b3fa3e0 blk_free_tags +EXPORT_SYMBOL vmlinux 0x5b51c6a7 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x5b55f7da vfs_readlink +EXPORT_SYMBOL vmlinux 0x5b563526 tioca_fastwrite_enable +EXPORT_SYMBOL vmlinux 0x5b58167f lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x5bac0dda ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0x5bae2eac acpi_extract_package +EXPORT_SYMBOL vmlinux 0x5bae7932 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x5bef9678 pci_choose_state +EXPORT_SYMBOL vmlinux 0x5bf52835 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x5bf67803 sock_init_data +EXPORT_SYMBOL vmlinux 0x5bfb3dab install_exec_creds +EXPORT_SYMBOL vmlinux 0x5c0ba94d __rta_fill +EXPORT_SYMBOL vmlinux 0x5c0f3f06 journal_set_features +EXPORT_SYMBOL vmlinux 0x5c1c8c9c blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x5c21fa6d eth_header_parse +EXPORT_SYMBOL vmlinux 0x5c2a83d1 tty_register_driver +EXPORT_SYMBOL vmlinux 0x5c4996a0 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x5c4ce9a1 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x5c4e5b7e interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x5c602a42 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x5c994ae1 bio_copy_user +EXPORT_SYMBOL vmlinux 0x5c9c40b5 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x5c9fd6ea blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5ccf7c9f sync_inode +EXPORT_SYMBOL vmlinux 0x5cd7313b get_disk +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d1ff2d2 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x5d253b71 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x5d3df169 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0x5d45c0d9 ida_init +EXPORT_SYMBOL vmlinux 0x5d508b31 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x5d542efe journal_start +EXPORT_SYMBOL vmlinux 0x5d68bf7e jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5d7b9a4f udp_sendmsg +EXPORT_SYMBOL vmlinux 0x5d8c8359 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x5d9e1f01 serio_interrupt +EXPORT_SYMBOL vmlinux 0x5dbbe98e memmove +EXPORT_SYMBOL vmlinux 0x5dc4583c __percpu_counter_add +EXPORT_SYMBOL vmlinux 0x5dd9e2b8 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x5de7df1e block_fsync +EXPORT_SYMBOL vmlinux 0x5e2b5f23 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x5e3b8fd1 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x5e50e32a blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x5e8c8c05 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5eb28d35 iunique +EXPORT_SYMBOL vmlinux 0x5ec634ea __elv_add_request +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ed3326d dm_table_event +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5f18efec inode_init_once +EXPORT_SYMBOL vmlinux 0x5f21ff49 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x5f3dcee4 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x5f5085ef neigh_seq_next +EXPORT_SYMBOL vmlinux 0x5f521332 may_umount +EXPORT_SYMBOL vmlinux 0x5f7ffb0d I_BDEV +EXPORT_SYMBOL vmlinux 0x5f98af62 arch_acpi_processor_cleanup_pdc +EXPORT_SYMBOL vmlinux 0x5feb0d7d skb_queue_tail +EXPORT_SYMBOL vmlinux 0x5fff8d4e tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x6026007c skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x603feb39 lock_super +EXPORT_SYMBOL vmlinux 0x604b3ef6 devm_free_irq +EXPORT_SYMBOL vmlinux 0x604c1604 __getblk +EXPORT_SYMBOL vmlinux 0x604f43f9 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x6060a7e5 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x6067a146 memcpy +EXPORT_SYMBOL vmlinux 0x60754936 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x607ec6c1 destroy_EII_client +EXPORT_SYMBOL vmlinux 0x60802190 bio_map_user +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60c22027 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x60de56b8 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x60f6615b jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x60f9d119 get_fs_type +EXPORT_SYMBOL vmlinux 0x611636a2 input_event +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x612600b9 register_nls +EXPORT_SYMBOL vmlinux 0x6137ec45 follow_pfn +EXPORT_SYMBOL vmlinux 0x614c9534 dcache_readdir +EXPORT_SYMBOL vmlinux 0x61686f47 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x61899446 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x6191588b try_to_release_page +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61d1634e generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x62168804 kernel_accept +EXPORT_SYMBOL vmlinux 0x62199cba blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x623574fc udplite_prot +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62748e70 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62b48534 module_put +EXPORT_SYMBOL vmlinux 0x62c2d296 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x62d5029b blk_get_request +EXPORT_SYMBOL vmlinux 0x62f32c04 node_to_cpu_mask +EXPORT_SYMBOL vmlinux 0x62fb4265 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x63009fe1 skb_trim +EXPORT_SYMBOL vmlinux 0x63061f44 registered_fb +EXPORT_SYMBOL vmlinux 0x631223eb efi_mem_attributes +EXPORT_SYMBOL vmlinux 0x63311fd2 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x634b557b arp_send +EXPORT_SYMBOL vmlinux 0x6363bc50 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x637cc1c1 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x638746f2 __ps2_command +EXPORT_SYMBOL vmlinux 0x638e28cf proto_register +EXPORT_SYMBOL vmlinux 0x638f49ff phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0x63986dc1 abort_creds +EXPORT_SYMBOL vmlinux 0x639ca2dd kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x63abfa65 cdev_index +EXPORT_SYMBOL vmlinux 0x63b7308f xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x63ccef43 read_cache_pages +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x640df89d fd_install +EXPORT_SYMBOL vmlinux 0x640f5831 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x6432e588 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x64938b86 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64d11e5a wireless_send_event +EXPORT_SYMBOL vmlinux 0x64f7fe3e dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x650080be clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65363492 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x65a5e2c4 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x65c67368 journal_dirty_data +EXPORT_SYMBOL vmlinux 0x65e5b197 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x65f4714f __break_lease +EXPORT_SYMBOL vmlinux 0x661399e7 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x662e5f91 neigh_lookup +EXPORT_SYMBOL vmlinux 0x6640cbf0 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x6647bcc6 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66d2827c kernel_listen +EXPORT_SYMBOL vmlinux 0x66d93f0a inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x66d9e4a4 unw_access_pr +EXPORT_SYMBOL vmlinux 0x66f3510f fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x66f8abda i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x673aa1de rwsem_wake +EXPORT_SYMBOL vmlinux 0x678468ac netif_carrier_off +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67d7d48c default_llseek +EXPORT_SYMBOL vmlinux 0x67e07891 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x67eceef4 nobh_write_end +EXPORT_SYMBOL vmlinux 0x6824445a kernel_read +EXPORT_SYMBOL vmlinux 0x6835bcac tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x6848c99b udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x687a2de9 kill_anon_super +EXPORT_SYMBOL vmlinux 0x68945616 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x68a2f480 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x68cd1238 bte_copy +EXPORT_SYMBOL vmlinux 0x68cecbad create_mnt_ns +EXPORT_SYMBOL vmlinux 0x68f49a78 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x690b0876 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x690dfa19 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x69223155 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x692abef1 input_grab_device +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x698eed50 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69c76d43 register_exec_domain +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d2575f efi +EXPORT_SYMBOL vmlinux 0x69de66f3 simple_empty +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69f3b602 bio_map_kern +EXPORT_SYMBOL vmlinux 0x6a03560a complete_and_exit +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a1a747c filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x6a400555 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6ad52f39 noop_qdisc +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6ae93996 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b316c7e __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x6b3e0190 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b903504 set_user_nice +EXPORT_SYMBOL vmlinux 0x6bc2d202 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bc61fcc simple_rmdir +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6c152008 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x6c1a2bb1 fb_show_logo +EXPORT_SYMBOL vmlinux 0x6c1cff74 sk_free +EXPORT_SYMBOL vmlinux 0x6c20c82a dm_table_get_size +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c44cef6 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c93618f mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x6c9ff23c dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x6cca51b2 get_phy_id +EXPORT_SYMBOL vmlinux 0x6cd3907c alloc_pages_current +EXPORT_SYMBOL vmlinux 0x6cdf79fa generic_setxattr +EXPORT_SYMBOL vmlinux 0x6ce6c430 skb_insert +EXPORT_SYMBOL vmlinux 0x6cfaa625 names_cachep +EXPORT_SYMBOL vmlinux 0x6cfb841c pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d1bc404 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d2d87fc deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d4649a1 inode_change_ok +EXPORT_SYMBOL vmlinux 0x6d599928 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x6d5dd6d5 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d824298 _read_lock_bh +EXPORT_SYMBOL vmlinux 0x6da63e4e machvec_dma_sync_single +EXPORT_SYMBOL vmlinux 0x6dce9f35 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x6dd783fb xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6dfd162f tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x6dfe3919 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x6e07a54e acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x6e136816 unregister_con_driver +EXPORT_SYMBOL vmlinux 0x6e360e9b pci_target_state +EXPORT_SYMBOL vmlinux 0x6e4e09b7 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x6e4f83e5 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x6e506170 inet_ioctl +EXPORT_SYMBOL vmlinux 0x6e5d1fcb __pagevec_release +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e73b9c9 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e963e47 del_gendisk +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6ebe971e dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x6ecb6645 dcache_lock +EXPORT_SYMBOL vmlinux 0x6f0e34ec sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x6f187df1 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f604da4 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x6f779f9b have_submounts +EXPORT_SYMBOL vmlinux 0x6fa50b16 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x6fa8d33f phy_disconnect +EXPORT_SYMBOL vmlinux 0x6fb99f36 d_genocide +EXPORT_SYMBOL vmlinux 0x6fc084d4 neigh_create +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6ffea5d7 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x7014ccec dev_get_by_index +EXPORT_SYMBOL vmlinux 0x70486329 nla_append +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7067d4f4 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x7086fa08 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x70b64789 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x7111d6da bio_unmap_user +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x71412c50 new_inode +EXPORT_SYMBOL vmlinux 0x71907811 __kfree_skb +EXPORT_SYMBOL vmlinux 0x7197fec1 sn_generate_path +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71aeb681 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x71d95fd6 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x71d9a36f cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x71e1bc20 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x71e66198 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x71f6eb38 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x7216bfcc ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x72196996 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x7242176d file_fsync +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x724ba364 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x725ca2dc blk_start_queue +EXPORT_SYMBOL vmlinux 0x7273244f dquot_drop +EXPORT_SYMBOL vmlinux 0x72750c3b jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x72bca4fe nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x72c249b0 do_SAK +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x7332abf2 genphy_update_link +EXPORT_SYMBOL vmlinux 0x737172bd rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x73739ab5 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x7389c9a8 acpi_bus_get_power +EXPORT_SYMBOL vmlinux 0x73993883 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x73aa6ec9 sk_run_filter +EXPORT_SYMBOL vmlinux 0x740979dc vfs_write +EXPORT_SYMBOL vmlinux 0x740f3785 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x7448c733 dma_get_ops +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x746dc5c5 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74993000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74ea1265 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x750e9401 vfs_read +EXPORT_SYMBOL vmlinux 0x75188235 skb_put +EXPORT_SYMBOL vmlinux 0x752005c2 kobject_get +EXPORT_SYMBOL vmlinux 0x753429ed netdev_state_change +EXPORT_SYMBOL vmlinux 0x7538bf69 unregister_console +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x7579b145 km_report +EXPORT_SYMBOL vmlinux 0x7579f3df __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x75b79030 km_policy_expired +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c7917c ilookup +EXPORT_SYMBOL vmlinux 0x75e6c8af input_flush_device +EXPORT_SYMBOL vmlinux 0x76058161 vfs_quota_on +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x760b9cf6 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x761a01ea tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x76309282 soft_cursor +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x767dd8fd acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x76932804 unw_init_from_blocked_task +EXPORT_SYMBOL vmlinux 0x769fa3c4 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x76a495c1 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x772b8b92 pci_get_slot +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x774d6e05 idr_remove_all +EXPORT_SYMBOL vmlinux 0x7750bbd2 km_new_mapping +EXPORT_SYMBOL vmlinux 0x7756df78 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x7789f666 set_anon_super +EXPORT_SYMBOL vmlinux 0x77962613 elevator_exit +EXPORT_SYMBOL vmlinux 0x77a7e6df jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x77ac5154 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x77e57851 sn_bus_store_sysdata +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77ecb18a kernel_bind +EXPORT_SYMBOL vmlinux 0x77ef828a security_path_truncate +EXPORT_SYMBOL vmlinux 0x77f36722 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x77f53abc acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x783afa91 dma_pool_free +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x788c3fc6 dev_open +EXPORT_SYMBOL vmlinux 0x789394b9 _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x789549a0 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x78a1d9d2 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78efaaab vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x78fb1114 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x790305b0 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x79154479 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x7937c05b kobject_put +EXPORT_SYMBOL vmlinux 0x794b0ce1 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x796b4c57 do_sync_read +EXPORT_SYMBOL vmlinux 0x798909b5 seq_escape +EXPORT_SYMBOL vmlinux 0x79a2fd35 ia64_unreg_MCA_extension +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79ba03d9 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x79c58753 security_path_unlink +EXPORT_SYMBOL vmlinux 0x79d7a59d inode_set_bytes +EXPORT_SYMBOL vmlinux 0x79f5c88d bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x79fbc14b remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x7a105a8a matroxfb_enable_irq +EXPORT_SYMBOL vmlinux 0x7a1beb69 request_key_async +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a4e033f ida_destroy +EXPORT_SYMBOL vmlinux 0x7a5fb70a blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x7a738207 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x7a75688e vfs_readdir +EXPORT_SYMBOL vmlinux 0x7a76508c unregister_qdisc +EXPORT_SYMBOL vmlinux 0x7aad49fd udp_ioctl +EXPORT_SYMBOL vmlinux 0x7ab1d153 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x7acb8447 i2c_bit_add_bus +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7afe75f4 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b1ee986 nf_log_packet +EXPORT_SYMBOL vmlinux 0x7b3d5ea0 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x7b8702d3 load_nls_default +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7bbe2a52 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x7bd81aa4 dm_table_put +EXPORT_SYMBOL vmlinux 0x7bf5b81f vfs_create +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c0fdd34 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x7c160170 alloc_trdev +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c358dba dqput +EXPORT_SYMBOL vmlinux 0x7c3fdd8a module_layout +EXPORT_SYMBOL vmlinux 0x7c4615ca tty_register_device +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c476022 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x7c486824 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c63dfef dev_change_flags +EXPORT_SYMBOL vmlinux 0x7c77c0a0 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x7c8be87d skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cb8bc79 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x7cd5cd50 __bforget +EXPORT_SYMBOL vmlinux 0x7d00abc4 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x7d012c8b dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x7d02d083 udp_prot +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d29e3d4 single_open +EXPORT_SYMBOL vmlinux 0x7d2dc2e0 generic_write_sync +EXPORT_SYMBOL vmlinux 0x7d869b40 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x7d94f746 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x7d9f119b jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x7daac7bd fail_migrate_page +EXPORT_SYMBOL vmlinux 0x7dba12f7 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x7dce2068 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7e17ad40 init_file +EXPORT_SYMBOL vmlinux 0x7e4a3bce splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x7e616753 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x7e9fe5b1 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x7eac99d4 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x7ebd4677 generic_file_open +EXPORT_SYMBOL vmlinux 0x7ec04d42 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7edc0469 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x7efcdbe2 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x7f0aff38 override_creds +EXPORT_SYMBOL vmlinux 0x7f0fead3 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f274127 pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x7f292820 devm_iounmap +EXPORT_SYMBOL vmlinux 0x7f2a4252 tty_shutdown +EXPORT_SYMBOL vmlinux 0x7f59492a inet_stream_ops +EXPORT_SYMBOL vmlinux 0x7f794f1e netif_receive_skb +EXPORT_SYMBOL vmlinux 0x7f7df880 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x7f9ca6e5 inet_select_addr +EXPORT_SYMBOL vmlinux 0x7fc34656 skb_over_panic +EXPORT_SYMBOL vmlinux 0x7fc56fdd skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x7ff0207c pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x7ffcadf0 skb_seq_read +EXPORT_SYMBOL vmlinux 0x80083b33 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x802054d2 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x80671888 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x807699db tcp_child_process +EXPORT_SYMBOL vmlinux 0x8089802f mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x808e37fb seq_write +EXPORT_SYMBOL vmlinux 0x8092f039 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x80a95ad1 pci_find_capability +EXPORT_SYMBOL vmlinux 0x80d79185 idr_destroy +EXPORT_SYMBOL vmlinux 0x80f14b44 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x8108cc07 vmap +EXPORT_SYMBOL vmlinux 0x8112f353 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x81263c07 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x81802ace tcp_ioctl +EXPORT_SYMBOL vmlinux 0x819e8d6b dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x81c61ce3 napi_skb_finish +EXPORT_SYMBOL vmlinux 0x81e4fb50 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x8220d965 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x8243d2ae fb_pan_display +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8257cba0 per_cpu____sn_nodepda +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82a6a3b3 generic_readlink +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82c0014e alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x82ca29da remove_wait_queue +EXPORT_SYMBOL vmlinux 0x82e3e8f7 pid_task +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x82f91aea vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0x83148e3d lock_may_read +EXPORT_SYMBOL vmlinux 0x8315d24f phy_device_register +EXPORT_SYMBOL vmlinux 0x831bcef4 inode_permission +EXPORT_SYMBOL vmlinux 0x8320bea8 __umodsi3 +EXPORT_SYMBOL vmlinux 0x83362db5 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x836c1c96 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x836ec6d6 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x8375b2e0 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x83768716 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x8378ea25 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x83998b0b ia64_save_scratch_fpregs +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83bf6d9b iget5_locked +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x84293f73 matroxfb_vgaHWrestore +EXPORT_SYMBOL vmlinux 0x84398d42 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x845b1820 nla_reserve +EXPORT_SYMBOL vmlinux 0x8481de87 pci_enable_device +EXPORT_SYMBOL vmlinux 0x84852d01 igrab +EXPORT_SYMBOL vmlinux 0x84957668 tty_free_termios +EXPORT_SYMBOL vmlinux 0x84a9baf6 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x84d18c11 seq_path +EXPORT_SYMBOL vmlinux 0x852ce480 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x85536cc7 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x8564c5cf find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x8598478d ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85f8820b jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x8647afb8 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x86602a21 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x866a7695 complete +EXPORT_SYMBOL vmlinux 0x866deb6c mdiobus_read +EXPORT_SYMBOL vmlinux 0x867ce5ba bdi_init +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x868d6276 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x8694fd0e matroxfb_g450_shutdown +EXPORT_SYMBOL vmlinux 0x86b0966c tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x86c0e6a8 acpi_lock_ac_dir +EXPORT_SYMBOL vmlinux 0x86c6d159 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x86cf6514 phy_connect +EXPORT_SYMBOL vmlinux 0x86e4b780 put_page +EXPORT_SYMBOL vmlinux 0x86f539f6 fsync_bdev +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x8716021f tioca_list +EXPORT_SYMBOL vmlinux 0x871be885 __dst_free +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x87326d53 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x87460523 udp_proc_register +EXPORT_SYMBOL vmlinux 0x87620616 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x878d39b8 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x87aa4a4c register_filesystem +EXPORT_SYMBOL vmlinux 0x87d08b91 filemap_flush +EXPORT_SYMBOL vmlinux 0x8800459a jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x8801f9f1 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x887a1b58 jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0x88871af9 __devm_request_region +EXPORT_SYMBOL vmlinux 0x88912730 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x8894115c idr_init +EXPORT_SYMBOL vmlinux 0x88cac9ca seq_open +EXPORT_SYMBOL vmlinux 0x88f48b6d napi_gro_frags +EXPORT_SYMBOL vmlinux 0x88f72f7e sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x88f9a9c1 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x88fd555a kill_pid +EXPORT_SYMBOL vmlinux 0x89089ba4 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x89329bba compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x8934fd04 handle_sysrq +EXPORT_SYMBOL vmlinux 0x895a6f26 bd_claim +EXPORT_SYMBOL vmlinux 0x896a5519 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x89a77c5d dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x89d380f0 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x89d52808 bdi_register +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d5b47b bio_pair_release +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89ed4fee mempool_destroy +EXPORT_SYMBOL vmlinux 0x89f46754 key_link +EXPORT_SYMBOL vmlinux 0x8a0ba840 _spin_trylock +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a15258d __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a715155 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a82c391 phy_detach +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8ab8a07e simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8ad537ed generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x8adeda8a _spin_lock +EXPORT_SYMBOL vmlinux 0x8b1a618a tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x8b24e70b unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b410ec3 block_write_begin +EXPORT_SYMBOL vmlinux 0x8b62a692 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b879770 generic_write_checks +EXPORT_SYMBOL vmlinux 0x8b8d9316 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x8b919994 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x8b956e92 dma_ops +EXPORT_SYMBOL vmlinux 0x8b966b63 sn_rtc_cycles_per_second +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8b9b95ee commit_creds +EXPORT_SYMBOL vmlinux 0x8ba270f1 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bde5fb0 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x8bf31095 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x8c037472 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x8c0684e4 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c1b42e1 ip_route_output_key +EXPORT_SYMBOL vmlinux 0x8c385874 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c9132e9 elv_rb_find +EXPORT_SYMBOL vmlinux 0x8cbff93a vfs_rmdir +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cecba32 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x8d06a095 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x8d2d723f ia64_pal_call_static +EXPORT_SYMBOL vmlinux 0x8d2dc938 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x8d353f22 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d3906e2 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x8d3b94a6 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d554013 blk_run_queue +EXPORT_SYMBOL vmlinux 0x8d644957 default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x8d656b8d journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x8d6a276b completion_done +EXPORT_SYMBOL vmlinux 0x8d8a6f78 mpage_readpage +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8dbdf8f3 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x8dc11fa0 bdget +EXPORT_SYMBOL vmlinux 0x8dd62ee0 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x8de69d5b mutex_lock +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e2e9e37 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e879bb7 __vmalloc +EXPORT_SYMBOL vmlinux 0x8e91af05 find_lock_page +EXPORT_SYMBOL vmlinux 0x8e95b36a dquot_release +EXPORT_SYMBOL vmlinux 0x8e984524 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x8eb18390 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x8ebbc89c request_firmware +EXPORT_SYMBOL vmlinux 0x8ecc3860 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x8ee29276 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8f2198e3 blk_end_request +EXPORT_SYMBOL vmlinux 0x8f37d1e0 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x8f45d601 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f4be5a4 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f796db3 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x8f9793b5 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x8fa6b937 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x8fcb0a4b sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x8fe17e9f task_nice +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x90085309 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x901f79a2 block_sync_page +EXPORT_SYMBOL vmlinux 0x903ab395 __moddi3 +EXPORT_SYMBOL vmlinux 0x903b5108 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x908b4f9b dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x90953963 DAC1064_global_init +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x911f7f9d nf_log_register +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x9152bf51 netif_napi_add +EXPORT_SYMBOL vmlinux 0x91606323 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x91716dde dquot_free_inode +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x91adc2fa unregister_key_type +EXPORT_SYMBOL vmlinux 0x91c81692 set_bh_page +EXPORT_SYMBOL vmlinux 0x91ed31aa bdi_destroy +EXPORT_SYMBOL vmlinux 0x920a4f8a neigh_update +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x9218501e sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x925b86ee alloc_fcdev +EXPORT_SYMBOL vmlinux 0x92a99e50 send_sig_info +EXPORT_SYMBOL vmlinux 0x92b73bd0 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x92bd7e50 file_remove_suid +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x92fe21da bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x9341f1b6 i2c_transfer +EXPORT_SYMBOL vmlinux 0x935ac6c8 elv_add_request +EXPORT_SYMBOL vmlinux 0x937958a6 mempool_resize +EXPORT_SYMBOL vmlinux 0x937b21cd inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x938de633 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x938ff805 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x939a25c9 nla_put +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93bfb57d acpi_bus_add +EXPORT_SYMBOL vmlinux 0x93c3b7e6 phy_start +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x940c7f4f in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x940e28f6 console_stop +EXPORT_SYMBOL vmlinux 0x941bed82 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x943aad67 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x9449726b jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x9465fa6f vfs_quota_enable +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94c0048c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x94ebd190 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x94f9397e pnp_possible_config +EXPORT_SYMBOL vmlinux 0x950ffff2 cpu_online_mask +EXPORT_SYMBOL vmlinux 0x9510dfcb bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x95220cb8 unlock_buffer +EXPORT_SYMBOL vmlinux 0x95352ea9 acpi_check_mem_region +EXPORT_SYMBOL vmlinux 0x95359bd5 dma_pool_create +EXPORT_SYMBOL vmlinux 0x953f7e91 tty_vhangup +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x954cc013 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x955705e6 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x955c16e3 bio_split +EXPORT_SYMBOL vmlinux 0x959ac436 icmp_send +EXPORT_SYMBOL vmlinux 0x95a02744 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x95c8f0e8 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95e26571 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x968edf70 vfs_statfs +EXPORT_SYMBOL vmlinux 0x969053ab skb_queue_purge +EXPORT_SYMBOL vmlinux 0x969832c5 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x96995324 eth_type_trans +EXPORT_SYMBOL vmlinux 0x96d17f20 posix_lock_file +EXPORT_SYMBOL vmlinux 0x96f6ed4f inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x970ba9a8 blk_rq_init +EXPORT_SYMBOL vmlinux 0x97507c87 sk_stream_error +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x97669340 simple_write_end +EXPORT_SYMBOL vmlinux 0x9773634a kobject_del +EXPORT_SYMBOL vmlinux 0x978f64d9 lookup_one_len +EXPORT_SYMBOL vmlinux 0x97a56aab gen_pool_add +EXPORT_SYMBOL vmlinux 0x97af9a7f unw_init_frame_info +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97efd3b9 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x980e065c napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x98496e62 journal_destroy +EXPORT_SYMBOL vmlinux 0x9867fc5e dm_io +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x9875785c inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x98b94b14 init_buffer +EXPORT_SYMBOL vmlinux 0x98b978f0 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x98d75cbb sock_wmalloc +EXPORT_SYMBOL vmlinux 0x98da8717 update_region +EXPORT_SYMBOL vmlinux 0x98f55431 uncached_free_page +EXPORT_SYMBOL vmlinux 0x993e6e37 __next_cpu +EXPORT_SYMBOL vmlinux 0x99428311 down_trylock +EXPORT_SYMBOL vmlinux 0x99500baa nf_ct_attach +EXPORT_SYMBOL vmlinux 0x995fbe85 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999826d7 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x9a19db20 down_interruptible +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a2a8fb0 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x9a310a80 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x9a772615 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9aadf2c1 __invalidate_device +EXPORT_SYMBOL vmlinux 0x9abfb6dd max_low_pfn +EXPORT_SYMBOL vmlinux 0x9ac82890 generic_write_end +EXPORT_SYMBOL vmlinux 0x9ad8b2fa bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x9ae4c109 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x9b02c91e inet_frag_find +EXPORT_SYMBOL vmlinux 0x9b089cc2 _write_lock +EXPORT_SYMBOL vmlinux 0x9b21adb4 read_cache_page +EXPORT_SYMBOL vmlinux 0x9b3147db acpi_bus_start +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b6981fe zero_page_memmap_ptr +EXPORT_SYMBOL vmlinux 0x9b99fffb __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bafb752 blk_start_request +EXPORT_SYMBOL vmlinux 0x9bb1ecce jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x9bbba221 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x9bbdd151 km_state_notify +EXPORT_SYMBOL vmlinux 0x9bcc261f blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c2da00b call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x9c382170 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c4a50d9 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x9ca50de1 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cf8b13f i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x9d20ead5 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x9d2160fc skb_recycle_check +EXPORT_SYMBOL vmlinux 0x9d2f7599 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x9d32a888 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d5a4bd6 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x9d870a73 hippi_mac_addr +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9dd79568 unregister_8022_client +EXPORT_SYMBOL vmlinux 0x9dfcd83d locks_copy_lock +EXPORT_SYMBOL vmlinux 0x9e0c1240 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e5c081c compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x9e7f98c1 unlock_super +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ea28ec7 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x9eb231fc jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9ec68357 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9ee89450 posix_acl_permission +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f33032c dm_get_device +EXPORT_SYMBOL vmlinux 0x9f339824 serio_rescan +EXPORT_SYMBOL vmlinux 0x9f3b29fa down_timeout +EXPORT_SYMBOL vmlinux 0x9f4aa3c9 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9f988342 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x9fb486c0 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x9fc67c45 make_bad_inode +EXPORT_SYMBOL vmlinux 0x9ff083f4 input_unregister_device +EXPORT_SYMBOL vmlinux 0xa00677fa block_read_full_page +EXPORT_SYMBOL vmlinux 0xa00f9d64 skb_push +EXPORT_SYMBOL vmlinux 0xa0252ecc pneigh_enqueue +EXPORT_SYMBOL vmlinux 0xa0282e7c nobh_write_begin +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa035373b vc_cons +EXPORT_SYMBOL vmlinux 0xa038c0f2 xfrm_register_type +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07a871b arp_tbl +EXPORT_SYMBOL vmlinux 0xa097355e complete_request_key +EXPORT_SYMBOL vmlinux 0xa09badd4 pci_disable_device +EXPORT_SYMBOL vmlinux 0xa0aa68ed ether_setup +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0c74c89 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0dcea45 netdev_features_change +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa11fac34 uncached_alloc_page +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa16d3974 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xa16e3b3f tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0xa17556a7 mntput_no_expire +EXPORT_SYMBOL vmlinux 0xa184f428 tcp_splice_read +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1b7c141 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa1d2934d sn_hwperf_get_nearest_node +EXPORT_SYMBOL vmlinux 0xa20a382c km_state_expired +EXPORT_SYMBOL vmlinux 0xa20afd8b sock_no_bind +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa22148a1 kernel_sendpage +EXPORT_SYMBOL vmlinux 0xa22e6ba1 locks_remove_posix +EXPORT_SYMBOL vmlinux 0xa234880d thaw_process +EXPORT_SYMBOL vmlinux 0xa2755c7b fpswa_interface +EXPORT_SYMBOL vmlinux 0xa283ca5e arch_acpi_processor_init_pdc +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a19304 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2e6ec33 matroxfb_wait_for_sync +EXPORT_SYMBOL vmlinux 0xa2f24785 machvec_timer_interrupt +EXPORT_SYMBOL vmlinux 0xa321dd76 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0xa329adfc dev_driver_string +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa334fe9b prepare_creds +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa34ada5e mdiobus_register +EXPORT_SYMBOL vmlinux 0xa34cbff0 tcp_connect +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa39b4cf2 udelay +EXPORT_SYMBOL vmlinux 0xa3b1de9b neigh_seq_start +EXPORT_SYMBOL vmlinux 0xa3bbcd80 acpi_set_gpe_type +EXPORT_SYMBOL vmlinux 0xa3c1d342 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xa3d1b88b pci_remove_bus +EXPORT_SYMBOL vmlinux 0xa3d3ef9e bioset_free +EXPORT_SYMBOL vmlinux 0xa3ea57a3 jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0xa403a2c8 __alloc_skb +EXPORT_SYMBOL vmlinux 0xa40621a6 dst_destroy +EXPORT_SYMBOL vmlinux 0xa44fffc1 schedule +EXPORT_SYMBOL vmlinux 0xa4585c7d xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0xa45b192d fb_set_var +EXPORT_SYMBOL vmlinux 0xa49ba04b bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4df765c register_key_type +EXPORT_SYMBOL vmlinux 0xa4f5982d __kfifo_put +EXPORT_SYMBOL vmlinux 0xa4fcb1ff qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0xa547116a blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0xa55bf233 arp_find +EXPORT_SYMBOL vmlinux 0xa56e6057 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xa57003b0 bit_waitqueue +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa5832884 pci_get_device +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5cebfed dev_base_lock +EXPORT_SYMBOL vmlinux 0xa5dc84e8 elv_rb_del +EXPORT_SYMBOL vmlinux 0xa5faba0d mempool_alloc +EXPORT_SYMBOL vmlinux 0xa600408c i2c_clients_command +EXPORT_SYMBOL vmlinux 0xa60b78fd seq_release +EXPORT_SYMBOL vmlinux 0xa60e78fe key_unlink +EXPORT_SYMBOL vmlinux 0xa633f228 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0xa64653a7 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xa667e91e phy_device_free +EXPORT_SYMBOL vmlinux 0xa67e733e pci_clear_master +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6a27f9c simple_transaction_release +EXPORT_SYMBOL vmlinux 0xa6a7dddf seq_putc +EXPORT_SYMBOL vmlinux 0xa6b11b77 bio_kmalloc +EXPORT_SYMBOL vmlinux 0xa6d031e0 path_put +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6ddf4b3 matroxfb_g450_setpll_cond +EXPORT_SYMBOL vmlinux 0xa6f3d512 genphy_resume +EXPORT_SYMBOL vmlinux 0xa6fddadb pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xa70390f0 flush_tlb_range +EXPORT_SYMBOL vmlinux 0xa713b6d2 tty_mutex +EXPORT_SYMBOL vmlinux 0xa71c8fe4 dquot_commit_info +EXPORT_SYMBOL vmlinux 0xa7236433 sk_filter +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa75b2363 __first_cpu +EXPORT_SYMBOL vmlinux 0xa75e7a94 simple_release_fs +EXPORT_SYMBOL vmlinux 0xa76ec66e bd_set_size +EXPORT_SYMBOL vmlinux 0xa787af91 sock_no_accept +EXPORT_SYMBOL vmlinux 0xa79bff2d hpage_shift +EXPORT_SYMBOL vmlinux 0xa7a0c5f9 fifo_set_limit +EXPORT_SYMBOL vmlinux 0xa7e800db invalidate_partition +EXPORT_SYMBOL vmlinux 0xa800ea54 textsearch_unregister +EXPORT_SYMBOL vmlinux 0xa84f6b1b __any_online_cpu +EXPORT_SYMBOL vmlinux 0xa8537636 set_groups +EXPORT_SYMBOL vmlinux 0xa85606aa set_binfmt +EXPORT_SYMBOL vmlinux 0xa86346e9 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8afb794 fget +EXPORT_SYMBOL vmlinux 0xa8ba198d blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xa8c2f3a3 matroxfb_read_pins +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8d856c2 dev_remove_pack +EXPORT_SYMBOL vmlinux 0xa8e97836 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa91a7edc acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0xa9251a1c vfs_dq_drop +EXPORT_SYMBOL vmlinux 0xa9264597 simple_readpage +EXPORT_SYMBOL vmlinux 0xa9517419 simple_lookup +EXPORT_SYMBOL vmlinux 0xa9aeb642 block_truncate_page +EXPORT_SYMBOL vmlinux 0xaa002fc9 d_find_alias +EXPORT_SYMBOL vmlinux 0xaa16781e nf_hook_slow +EXPORT_SYMBOL vmlinux 0xaa4cda9e dquot_acquire +EXPORT_SYMBOL vmlinux 0xaa682f78 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0xaa6f8c52 lock_fb_info +EXPORT_SYMBOL vmlinux 0xaa70e25c blk_init_tags +EXPORT_SYMBOL vmlinux 0xaa73ca70 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xaa7b2afb tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0xaa7b81c4 vfs_writev +EXPORT_SYMBOL vmlinux 0xaac24df7 iget_locked +EXPORT_SYMBOL vmlinux 0xaacd1d62 napi_gro_receive +EXPORT_SYMBOL vmlinux 0xaad4694e slow_work_enqueue +EXPORT_SYMBOL vmlinux 0xaad743d3 ip_ct_attach +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab0c63dd eth_change_mtu +EXPORT_SYMBOL vmlinux 0xab2b47c9 journal_check_available_features +EXPORT_SYMBOL vmlinux 0xab3fc294 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0xab40af0d lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xab5bea5e __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb56bba vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL vmlinux 0xabe23450 idr_get_new +EXPORT_SYMBOL vmlinux 0xabfc5ec6 blk_complete_request +EXPORT_SYMBOL vmlinux 0xac09399f seq_read +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac2e12fe tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac4f32bb proc_create_data +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac733ed6 cfb_copyarea +EXPORT_SYMBOL vmlinux 0xac812950 sn_send_IPI_phys +EXPORT_SYMBOL vmlinux 0xaca38984 con_is_bound +EXPORT_SYMBOL vmlinux 0xacc75bc2 sock_register +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xaccafe43 bio_clone +EXPORT_SYMBOL vmlinux 0xacd0be16 arp_broken_ops +EXPORT_SYMBOL vmlinux 0xacec4a8f mb_cache_create +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacfe5b63 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad1d5414 arp_create +EXPORT_SYMBOL vmlinux 0xad1ffd11 __sk_dst_check +EXPORT_SYMBOL vmlinux 0xad23ca07 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xad47f599 inet_listen +EXPORT_SYMBOL vmlinux 0xad8de1b3 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0xad990459 security_file_permission +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadce46f5 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xadec3727 __netif_schedule +EXPORT_SYMBOL vmlinux 0xadf5da9e pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0xae0b23cd dcache_dir_open +EXPORT_SYMBOL vmlinux 0xae13f703 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xae1f0d8f kill_fasync +EXPORT_SYMBOL vmlinux 0xae34df79 tcf_exts_change +EXPORT_SYMBOL vmlinux 0xae3ddd3f sock_map_fd +EXPORT_SYMBOL vmlinux 0xae3f9a1e bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xae4a1bda csum_tcpudp_nofold +EXPORT_SYMBOL vmlinux 0xae649140 _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0xae81caa6 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0xaea08ed5 key_validate +EXPORT_SYMBOL vmlinux 0xaead5328 bio_alloc +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaf083f54 save_mount_options +EXPORT_SYMBOL vmlinux 0xaf43757d blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xaf54b277 vmem_map +EXPORT_SYMBOL vmlinux 0xaf6bbc60 machvec_setup +EXPORT_SYMBOL vmlinux 0xaf907da2 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0xafb0cbd4 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0xafb9b75a vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xafd49b44 i2c_bit_add_numbered_bus +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xaffcb88b phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb023c1bb remap_pfn_range +EXPORT_SYMBOL vmlinux 0xb026e656 acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xb04e9281 generic_file_llseek +EXPORT_SYMBOL vmlinux 0xb0539129 vga_client_register +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb066b2c7 fddi_type_trans +EXPORT_SYMBOL vmlinux 0xb07dfb3d acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0baf48e dm_table_get +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0e69264 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0xb10415e8 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xb115d218 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0xb1182c48 __register_chrdev +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb1200ad5 bh_submit_read +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb13180c8 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xb1391b45 skb_append +EXPORT_SYMBOL vmlinux 0xb1528fef con_copy_unimap +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb1892af9 get_user_pages +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb18ec925 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xb18f4f33 lro_receive_frags +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a74bd4 inode_init_always +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1c989e7 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xb1ca5178 ps2_handle_response +EXPORT_SYMBOL vmlinux 0xb1d634a0 tty_set_operations +EXPORT_SYMBOL vmlinux 0xb1f32d3d ia64_max_iommu_merge_mask +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb20ecf88 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb2474985 i2c_del_driver +EXPORT_SYMBOL vmlinux 0xb249c669 put_io_context +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb2783a14 llc_sap_find +EXPORT_SYMBOL vmlinux 0xb27b12da sn_partition_id +EXPORT_SYMBOL vmlinux 0xb294b2a0 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xb2a303cb cdev_alloc +EXPORT_SYMBOL vmlinux 0xb2bc8fa3 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0xb2c0352c tcf_hash_release +EXPORT_SYMBOL vmlinux 0xb2f1fb80 flush_old_exec +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3bb5186 mutex_trylock +EXPORT_SYMBOL vmlinux 0xb3c52568 __nla_put +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb42c62c3 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0xb44c18c9 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0xb4622e71 tty_devnum +EXPORT_SYMBOL vmlinux 0xb46dfc33 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xb47d94ef simple_fill_super +EXPORT_SYMBOL vmlinux 0xb48c21d1 init_task +EXPORT_SYMBOL vmlinux 0xb4915248 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0xb4964308 gen_pool_create +EXPORT_SYMBOL vmlinux 0xb4c2afa5 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xb4ed332f register_netdevice +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb50aef19 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0xb51bc1e4 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xb5304f7f sock_release +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb568ef76 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0xb56f4e4b iommu_dma_supported +EXPORT_SYMBOL vmlinux 0xb57db7de d_obtain_alias +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5be946c add_disk +EXPORT_SYMBOL vmlinux 0xb5cd773d kthread_create +EXPORT_SYMBOL vmlinux 0xb5d52c27 ec_transaction +EXPORT_SYMBOL vmlinux 0xb5e48e92 __kfifo_get +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb6317a4d pci_bus_type +EXPORT_SYMBOL vmlinux 0xb633c02e tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xb66445a3 finish_wait +EXPORT_SYMBOL vmlinux 0xb667def6 blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6a476a2 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b232b8 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6cbe886 acpi_get_node +EXPORT_SYMBOL vmlinux 0xb6ebbae5 tty_port_hangup +EXPORT_SYMBOL vmlinux 0xb7288da9 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xb73a0566 pci_set_master +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb76d76d5 unregister_filesystem +EXPORT_SYMBOL vmlinux 0xb779775e set_blocksize +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7c4f38f up_write +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7cd7355 get_phy_device +EXPORT_SYMBOL vmlinux 0xb7d411d5 kern_mem_attribute +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb865427e put_disk +EXPORT_SYMBOL vmlinux 0xb866c463 ps2_end_command +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8fcb4fd __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0xb91497cf blk_integrity_compare +EXPORT_SYMBOL vmlinux 0xb937ca3a pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0xb9446042 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xb94a1462 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xb95d1a7e llc_sap_close +EXPORT_SYMBOL vmlinux 0xb968deb3 ll_rw_block +EXPORT_SYMBOL vmlinux 0xb989003c sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9b5d1a5 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0xb9bf3d6f user_revoke +EXPORT_SYMBOL vmlinux 0xba0ce979 free_buffer_head +EXPORT_SYMBOL vmlinux 0xba159397 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xba265fd2 neigh_ifdown +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba43cc57 generic_removexattr +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba763c98 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0xba78519d vc_resize +EXPORT_SYMBOL vmlinux 0xba7e3ac8 unbind_con_driver +EXPORT_SYMBOL vmlinux 0xba83f554 dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0xba8406d6 unlock_new_inode +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbac01ee5 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xbac56d9a serio_open +EXPORT_SYMBOL vmlinux 0xbacf5894 thaw_bdev +EXPORT_SYMBOL vmlinux 0xbb0d7727 pci_get_subsys +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1bc602 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb499d8a __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb5ec354 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0xbb7e38db lock_may_write +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbba5706c tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xbbdf6420 redraw_screen +EXPORT_SYMBOL vmlinux 0xbc066f06 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0xbc1e3052 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0xbc59a4af key_revoke +EXPORT_SYMBOL vmlinux 0xbc64c7d7 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xbc96be8d pci_get_class +EXPORT_SYMBOL vmlinux 0xbc9b758c jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xbca44f9e qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xbcbee46f genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0xbcd36b60 scm_detach_fds +EXPORT_SYMBOL vmlinux 0xbcf41552 ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0xbcf72eb4 journal_start_commit +EXPORT_SYMBOL vmlinux 0xbd05b1e6 blk_sync_queue +EXPORT_SYMBOL vmlinux 0xbd51c31a pci_map_rom +EXPORT_SYMBOL vmlinux 0xbd976127 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0xbdaf5b07 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0xbdb89bf5 kthread_stop +EXPORT_SYMBOL vmlinux 0xbdb9df02 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0xbdbb19fd generic_writepages +EXPORT_SYMBOL vmlinux 0xbdc7fb98 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe08869c qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0xbe7cad38 journal_forget +EXPORT_SYMBOL vmlinux 0xbe9053c9 journal_get_create_access +EXPORT_SYMBOL vmlinux 0xbe94e148 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xbeab87aa set_page_dirty +EXPORT_SYMBOL vmlinux 0xbec729a4 pipe_to_file +EXPORT_SYMBOL vmlinux 0xbed1a5c7 journal_update_format +EXPORT_SYMBOL vmlinux 0xbee0d3da __kill_fasync +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbef69ffa zero_fill_bio +EXPORT_SYMBOL vmlinux 0xbf1b7560 i2c_master_recv +EXPORT_SYMBOL vmlinux 0xbf4d1979 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xbf5bedc6 udp_poll +EXPORT_SYMBOL vmlinux 0xbf69f89c sk_dst_check +EXPORT_SYMBOL vmlinux 0xbf76c953 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf85b80c skb_copy_bits +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfa2a66f skb_checksum +EXPORT_SYMBOL vmlinux 0xbfba5589 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc0228395 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0xc02e544c pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0xc030e0fc __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc0581b17 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0xc07d43ae acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xc07d9495 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0cb1858 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xc1172fd6 ip_dev_find +EXPORT_SYMBOL vmlinux 0xc12904b3 check_disk_change +EXPORT_SYMBOL vmlinux 0xc143495a unw_unwind +EXPORT_SYMBOL vmlinux 0xc165dc20 nf_register_hooks +EXPORT_SYMBOL vmlinux 0xc19b4adb input_release_device +EXPORT_SYMBOL vmlinux 0xc1da1f5e bmap +EXPORT_SYMBOL vmlinux 0xc1dffddc __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xc1e30651 _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0xc1ef30a0 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xc1f32ec3 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0xc206a4b1 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0xc20b0a38 backlight_device_register +EXPORT_SYMBOL vmlinux 0xc223fa97 netif_device_detach +EXPORT_SYMBOL vmlinux 0xc2302c84 kthread_bind +EXPORT_SYMBOL vmlinux 0xc248bdc1 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xc24a10b1 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc29d5343 sn_flush_all_caches +EXPORT_SYMBOL vmlinux 0xc2adb4cd tcp_poll +EXPORT_SYMBOL vmlinux 0xc2cc457d __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2ef89f6 tty_port_init +EXPORT_SYMBOL vmlinux 0xc32ee861 mark_page_accessed +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc3454bc5 mark_info_dirty +EXPORT_SYMBOL vmlinux 0xc360e1ce tcp_rcv_established +EXPORT_SYMBOL vmlinux 0xc3646c40 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xc364b6af sk_stream_write_space +EXPORT_SYMBOL vmlinux 0xc379755e blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xc39e289f blk_fetch_request +EXPORT_SYMBOL vmlinux 0xc3a5d3ed pci_find_device +EXPORT_SYMBOL vmlinux 0xc3bd892e _write_lock_bh +EXPORT_SYMBOL vmlinux 0xc3bdafaf __inet6_hash +EXPORT_SYMBOL vmlinux 0xc3bfd417 current_fs_time +EXPORT_SYMBOL vmlinux 0xc3ca0caf fasync_helper +EXPORT_SYMBOL vmlinux 0xc3edc955 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc418b8df vlan_gro_receive +EXPORT_SYMBOL vmlinux 0xc4344765 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0xc44d613d generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xc4837a90 phy_device_create +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4a5e2d8 tcf_em_register +EXPORT_SYMBOL vmlinux 0xc4c2522e register_quota_format +EXPORT_SYMBOL vmlinux 0xc4f1f6d0 bdi_unregister +EXPORT_SYMBOL vmlinux 0xc51bfd5f sync_blockdev +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc539a0b3 page_symlink +EXPORT_SYMBOL vmlinux 0xc54998fb vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc582b737 input_register_device +EXPORT_SYMBOL vmlinux 0xc59454f6 dst_alloc +EXPORT_SYMBOL vmlinux 0xc5a2c97e sock_no_connect +EXPORT_SYMBOL vmlinux 0xc5ae6145 per_cpu____sn_cnodeid_to_nasid +EXPORT_SYMBOL vmlinux 0xc5c6b9b7 dev_get_stats +EXPORT_SYMBOL vmlinux 0xc612e354 pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0xc6257ac5 sg_miter_next +EXPORT_SYMBOL vmlinux 0xc6ad9c4f nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xc6cec176 sk_stop_timer +EXPORT_SYMBOL vmlinux 0xc6e978cb __lookup_one_len +EXPORT_SYMBOL vmlinux 0xc6ea3c35 unw_access_gr +EXPORT_SYMBOL vmlinux 0xc6ebd435 pci_dev_get +EXPORT_SYMBOL vmlinux 0xc6fec3f4 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xc71866c8 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72aea0a ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xc733e160 neigh_destroy +EXPORT_SYMBOL vmlinux 0xc7398659 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xc73c76ac clocksource_unregister +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc7593aa3 do_splice_from +EXPORT_SYMBOL vmlinux 0xc76017ee cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xc7759fcb __brelse +EXPORT_SYMBOL vmlinux 0xc78260aa security_inode_readlink +EXPORT_SYMBOL vmlinux 0xc783b7cf xor_ia64_5 +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a2b7d9 slow_work_register_user +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7cec373 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xc7ec28b0 memcmp +EXPORT_SYMBOL vmlinux 0xc7ff49df i2c_del_adapter +EXPORT_SYMBOL vmlinux 0xc85275e9 skb_split +EXPORT_SYMBOL vmlinux 0xc86e0079 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0xc86fa40c prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0xc88048da unregister_nls +EXPORT_SYMBOL vmlinux 0xc88adf36 phy_start_aneg +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc8a9f0fc read_cache_page_async +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8bfbfeb inode_setattr +EXPORT_SYMBOL vmlinux 0xc8ca3e25 acpi_get_child +EXPORT_SYMBOL vmlinux 0xc8d507cf cont_write_begin +EXPORT_SYMBOL vmlinux 0xc8d95440 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0xc8f8442c pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0xc90b73bd tcf_action_exec +EXPORT_SYMBOL vmlinux 0xc9266a5a ia64_load_scratch_fpregs +EXPORT_SYMBOL vmlinux 0xc93217f5 journal_restart +EXPORT_SYMBOL vmlinux 0xc94346a0 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0xc94b984a inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xc95e8910 skb_make_writable +EXPORT_SYMBOL vmlinux 0xc97ae628 get_io_context +EXPORT_SYMBOL vmlinux 0xc97d24bd writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xc9902572 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ab2eef acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0xc9e9e2aa per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0xca0047e2 ip_setsockopt +EXPORT_SYMBOL vmlinux 0xca116950 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xca19c231 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xcaa6628b cdev_add +EXPORT_SYMBOL vmlinux 0xcad74c4c pnp_stop_dev +EXPORT_SYMBOL vmlinux 0xcae17b56 journal_ack_err +EXPORT_SYMBOL vmlinux 0xcb1bb358 __next_cpu_nr +EXPORT_SYMBOL vmlinux 0xcb2b4729 register_qdisc +EXPORT_SYMBOL vmlinux 0xcb677d34 rtnl_notify +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcb771f82 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xcb8a8405 journal_load +EXPORT_SYMBOL vmlinux 0xcb95f0e5 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0xcbb9d7db groups_free +EXPORT_SYMBOL vmlinux 0xcbe86560 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xcbfe6008 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xcc007dc0 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc0e3d76 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0xcc2faa29 inet_frag_kill +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc48a705 dev_add_pack +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc61d8f6 vmtruncate +EXPORT_SYMBOL vmlinux 0xcc7dc1d1 bioset_create +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc9c427c bd_release +EXPORT_SYMBOL vmlinux 0xccd73277 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0xcd1f5cb1 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xcd415f14 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xcd473329 memset_io +EXPORT_SYMBOL vmlinux 0xcd4cf16b neigh_table_clear +EXPORT_SYMBOL vmlinux 0xcd6349e8 phy_print_status +EXPORT_SYMBOL vmlinux 0xcd999e85 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0xcdb110aa bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xcdc98df1 pskb_copy +EXPORT_SYMBOL vmlinux 0xce23ce9c inet_accept +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce407754 neigh_table_init +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce4927db sock_i_ino +EXPORT_SYMBOL vmlinux 0xce4cef4c rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce790d55 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xce871fcc dget_locked +EXPORT_SYMBOL vmlinux 0xce9db3cd mutex_lock_killable +EXPORT_SYMBOL vmlinux 0xceac89d0 vfs_mkdir +EXPORT_SYMBOL vmlinux 0xceb1580d kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xceb401d7 kobject_init +EXPORT_SYMBOL vmlinux 0xcebd6b84 get_write_access +EXPORT_SYMBOL vmlinux 0xcee4ff1e kernel_recvmsg +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf2fc87e inet_frag_destroy +EXPORT_SYMBOL vmlinux 0xcf373757 xfrm_state_add +EXPORT_SYMBOL vmlinux 0xcf406143 blk_remove_plug +EXPORT_SYMBOL vmlinux 0xcf59f727 datagram_poll +EXPORT_SYMBOL vmlinux 0xcf5fbeeb invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xcf6b8e4d input_free_device +EXPORT_SYMBOL vmlinux 0xcfb3610e tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfe5d734 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xcff459de pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xcfff88d3 down_write +EXPORT_SYMBOL vmlinux 0xd0052962 keyring_search +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd0389bb9 input_set_capability +EXPORT_SYMBOL vmlinux 0xd04a7a35 elv_abort_queue +EXPORT_SYMBOL vmlinux 0xd058561e skb_under_panic +EXPORT_SYMBOL vmlinux 0xd0640504 netdev_set_master +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0891510 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xd093b9bf poll_freewait +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd117f680 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0xd1472061 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xd162013e jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0xd165795d unregister_binfmt +EXPORT_SYMBOL vmlinux 0xd1657c96 do_sync_write +EXPORT_SYMBOL vmlinux 0xd166c042 __wait_on_bit +EXPORT_SYMBOL vmlinux 0xd16bbfe7 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0xd175d8d5 netlink_dump_start +EXPORT_SYMBOL vmlinux 0xd1844a21 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd1900b65 proto_unregister +EXPORT_SYMBOL vmlinux 0xd19bb294 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0xd1f6137f __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xd1faffe5 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xd22639b7 __lock_page +EXPORT_SYMBOL vmlinux 0xd237ef45 kill_litter_super +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd27495ef setup_new_exec +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd296ac9a misc_deregister +EXPORT_SYMBOL vmlinux 0xd2a4f36f follow_down +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2d59292 set_security_override +EXPORT_SYMBOL vmlinux 0xd2fac9db flush_signals +EXPORT_SYMBOL vmlinux 0xd30ba439 d_splice_alias +EXPORT_SYMBOL vmlinux 0xd34c938d ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xd37617c4 read_dev_sector +EXPORT_SYMBOL vmlinux 0xd3951da4 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xd399a3ea unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3b87a1b copy_io_context +EXPORT_SYMBOL vmlinux 0xd3c49a61 dev_get_by_name +EXPORT_SYMBOL vmlinux 0xd3c5726d matrox_G100 +EXPORT_SYMBOL vmlinux 0xd3d7fafe generic_delete_inode +EXPORT_SYMBOL vmlinux 0xd3e8bc3b register_netdev +EXPORT_SYMBOL vmlinux 0xd3f179dc truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xd3f7f2ea netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xd404d7c4 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0xd438f414 i2c_release_client +EXPORT_SYMBOL vmlinux 0xd459ee0d __page_cache_alloc +EXPORT_SYMBOL vmlinux 0xd46ec41a flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xd482266d mpage_writepage +EXPORT_SYMBOL vmlinux 0xd48d4897 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xd48f05fa xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xd4a6f78c mpage_readpages +EXPORT_SYMBOL vmlinux 0xd4d3fd62 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0xd4d449a9 sock_wake_async +EXPORT_SYMBOL vmlinux 0xd4eb3212 kern_path +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd51075a3 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0xd5196efa vfsmount_lock +EXPORT_SYMBOL vmlinux 0xd5233ef9 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd526c53e __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xd536e65f pci_match_id +EXPORT_SYMBOL vmlinux 0xd54f3fb5 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0xd57450bc up_read +EXPORT_SYMBOL vmlinux 0xd57f5ae1 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5ad00a1 is_bad_inode +EXPORT_SYMBOL vmlinux 0xd5afce6d skb_tx_hash +EXPORT_SYMBOL vmlinux 0xd5ba64dd qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd61ba4cb matroxfb_DAC_in +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd668075f mpage_writepages +EXPORT_SYMBOL vmlinux 0xd6731480 secpath_dup +EXPORT_SYMBOL vmlinux 0xd6934d32 pci_reenable_device +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6c23128 freeze_bdev +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6dd7820 skb_dma_map +EXPORT_SYMBOL vmlinux 0xd6e3ec24 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xd6e631fa neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd7095039 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xd721fc12 security_inode_permission +EXPORT_SYMBOL vmlinux 0xd728b3ab truncate_pagecache +EXPORT_SYMBOL vmlinux 0xd7290eb6 d_rehash +EXPORT_SYMBOL vmlinux 0xd72a6fae inet_getname +EXPORT_SYMBOL vmlinux 0xd778f05d acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a63d3b serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0xd7ea5704 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0xd7ea6016 mdiobus_free +EXPORT_SYMBOL vmlinux 0xd7ef1694 per_cpu__local_per_cpu_offset +EXPORT_SYMBOL vmlinux 0xd81e946d ip_fragment +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd853fe3a nf_reinject +EXPORT_SYMBOL vmlinux 0xd86d72c8 pci_restore_state +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd91bbeea inet_addr_type +EXPORT_SYMBOL vmlinux 0xd92af264 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xd935bbc7 ia64_mca_printk +EXPORT_SYMBOL vmlinux 0xd93cb8be sn_bus_free_sysdata +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9e54d42 dev_addr_add +EXPORT_SYMBOL vmlinux 0xd9ecbff9 _spin_lock_bh +EXPORT_SYMBOL vmlinux 0xd9f8ed40 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xda08c17c i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3cfb01 add_timer +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda514380 i2c_use_client +EXPORT_SYMBOL vmlinux 0xda566db1 input_unregister_handle +EXPORT_SYMBOL vmlinux 0xda627aec inet_stream_connect +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xdaae5316 mutex_unlock +EXPORT_SYMBOL vmlinux 0xdae68eb2 unlock_page +EXPORT_SYMBOL vmlinux 0xdaf53234 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xdaf5c713 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0xdb0959eb blk_queue_ordered +EXPORT_SYMBOL vmlinux 0xdb1553b2 journal_create +EXPORT_SYMBOL vmlinux 0xdb17508a filp_open +EXPORT_SYMBOL vmlinux 0xdb22ec6b sn_prom_feature_available +EXPORT_SYMBOL vmlinux 0xdb247287 d_invalidate +EXPORT_SYMBOL vmlinux 0xdb5c8104 complete_all +EXPORT_SYMBOL vmlinux 0xdb9f3a01 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbe08a69 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xdbedc13b simple_unlink +EXPORT_SYMBOL vmlinux 0xdbf73dae __xfrm_lookup +EXPORT_SYMBOL vmlinux 0xdbfb066b skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc170e6c blk_unplug +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc3060c2 sock_no_listen +EXPORT_SYMBOL vmlinux 0xdc344c5d del_timer +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc4415ff blk_init_queue +EXPORT_SYMBOL vmlinux 0xdc477230 sn_io_addr +EXPORT_SYMBOL vmlinux 0xdc52ace6 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0xdc644353 create_proc_entry +EXPORT_SYMBOL vmlinux 0xdc7b19a2 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0xdc80b266 __register_binfmt +EXPORT_SYMBOL vmlinux 0xdc81de4b alloc_disk_node +EXPORT_SYMBOL vmlinux 0xdc8438ed phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0xdc90418d mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0xdc9b4946 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb5671d strlen +EXPORT_SYMBOL vmlinux 0xdcbac1cc sock_no_getname +EXPORT_SYMBOL vmlinux 0xdcdc5a4e matroxfb_unregister_driver +EXPORT_SYMBOL vmlinux 0xdcee9c1a tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0xdd0287a2 poll_initwait +EXPORT_SYMBOL vmlinux 0xdd080e0e blk_plug_device +EXPORT_SYMBOL vmlinux 0xdd1777a1 udp_table +EXPORT_SYMBOL vmlinux 0xdd37f5e3 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xdd514853 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xdd547bbf unregister_netdev +EXPORT_SYMBOL vmlinux 0xddc30808 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0xddda3031 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0xdddef92c dquot_transfer +EXPORT_SYMBOL vmlinux 0xde1ad556 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xde2b2f7b pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0xde41345f neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0xde558e02 ia64_mlogbuf_dump +EXPORT_SYMBOL vmlinux 0xde650e6b eth_header +EXPORT_SYMBOL vmlinux 0xde654541 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde76e7bc sys_close +EXPORT_SYMBOL vmlinux 0xde82816c jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xde96c72b _write_trylock +EXPORT_SYMBOL vmlinux 0xdeb9168e dquot_destroy +EXPORT_SYMBOL vmlinux 0xdee93e82 vfs_rename +EXPORT_SYMBOL vmlinux 0xdef6a951 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf2216f6 wake_up_process +EXPORT_SYMBOL vmlinux 0xdf2d3ed3 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xdf2fb3ba kfifo_alloc +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfb60ded __napi_schedule +EXPORT_SYMBOL vmlinux 0xdfb7bada acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xdfb7c842 node_states +EXPORT_SYMBOL vmlinux 0xdfc7f59a lro_flush_all +EXPORT_SYMBOL vmlinux 0xdfdb0105 cpu_core_map +EXPORT_SYMBOL vmlinux 0xe0555b8c posix_test_lock +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe08293bd swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0xe08d44ea generic_file_mmap +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b08ae6 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0b6e6ca __bio_clone +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0c56442 vfs_fstatat +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe14399f6 block_write_full_page +EXPORT_SYMBOL vmlinux 0xe1553b09 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe1a7480c __insert_inode_hash +EXPORT_SYMBOL vmlinux 0xe1ae1239 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0xe1bf97c0 dq_data_lock +EXPORT_SYMBOL vmlinux 0xe1d3d096 bio_put +EXPORT_SYMBOL vmlinux 0xe203a4d5 kill_block_super +EXPORT_SYMBOL vmlinux 0xe2049c4e skb_clone +EXPORT_SYMBOL vmlinux 0xe218c174 consume_skb +EXPORT_SYMBOL vmlinux 0xe2202e87 framebuffer_release +EXPORT_SYMBOL vmlinux 0xe2323d80 __init_rwsem +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe26c24d8 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xe2705348 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0xe29b04e9 acpi_set_firmware_waking_vector64 +EXPORT_SYMBOL vmlinux 0xe29cb7d0 percpu_counter_set +EXPORT_SYMBOL vmlinux 0xe2a32a7c _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0xe2aa32f3 free_task +EXPORT_SYMBOL vmlinux 0xe2ae1eef journal_init_dev +EXPORT_SYMBOL vmlinux 0xe2ae1fd4 tcp_close +EXPORT_SYMBOL vmlinux 0xe2ae84b3 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e5dffe tcp_prot +EXPORT_SYMBOL vmlinux 0xe2f28aa0 alloc_disk +EXPORT_SYMBOL vmlinux 0xe301c99c acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0xe3088622 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0xe31c738f sock_no_mmap +EXPORT_SYMBOL vmlinux 0xe3201711 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xe35056e0 sn_acpi_slot_fixup +EXPORT_SYMBOL vmlinux 0xe3567ab8 dm_register_target +EXPORT_SYMBOL vmlinux 0xe371e158 kfree_skb +EXPORT_SYMBOL vmlinux 0xe3a8584e bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0xe3ac2bb6 dev_unicast_add +EXPORT_SYMBOL vmlinux 0xe3ad0e89 dentry_unhash +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3ba3efe pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0xe3c3707e tcp_proc_register +EXPORT_SYMBOL vmlinux 0xe3c9e787 journal_flush +EXPORT_SYMBOL vmlinux 0xe3e13f34 register_8022_client +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe400ea2b log_wait_commit +EXPORT_SYMBOL vmlinux 0xe43617f7 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe48d830e kmalloc_caches +EXPORT_SYMBOL vmlinux 0xe49e244c security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xe4ccc6d4 kmem_cache_create +EXPORT_SYMBOL vmlinux 0xe4d4773a bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe5092799 d_add_ci +EXPORT_SYMBOL vmlinux 0xe50b83b0 end_page_writeback +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe526f136 __copy_user +EXPORT_SYMBOL vmlinux 0xe52d755f ia64_cpu_to_sapicid +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe599e6b7 __f_setown +EXPORT_SYMBOL vmlinux 0xe5bbe7ad sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5f0faf4 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xe61e8398 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0xe62d2bfe redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xe630785c __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xe63ce738 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xe66ee570 dev_trans_start +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6f4efc0 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xe6f5486d neigh_resolve_output +EXPORT_SYMBOL vmlinux 0xe6f6ace0 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe6fbf2b1 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0xe70f92cc tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe71c9bea __seq_open_private +EXPORT_SYMBOL vmlinux 0xe746b259 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xe756bc46 machvec_dma_sync_sg +EXPORT_SYMBOL vmlinux 0xe77bb847 idr_replace +EXPORT_SYMBOL vmlinux 0xe77d3703 proc_symlink +EXPORT_SYMBOL vmlinux 0xe7965484 iget_failed +EXPORT_SYMBOL vmlinux 0xe7ab5006 get_sb_bdev +EXPORT_SYMBOL vmlinux 0xe7d1948a phy_attach_direct +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7f056aa phy_driver_register +EXPORT_SYMBOL vmlinux 0xe805fa60 pci_read_vpd +EXPORT_SYMBOL vmlinux 0xe8116e08 __kmalloc_node +EXPORT_SYMBOL vmlinux 0xe81d8527 acpi_unlock_ac_dir +EXPORT_SYMBOL vmlinux 0xe84e8ae5 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0xe8567719 kset_unregister +EXPORT_SYMBOL vmlinux 0xe8679178 __divdi3 +EXPORT_SYMBOL vmlinux 0xe88b8783 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xe89499cc audit_log_end +EXPORT_SYMBOL vmlinux 0xe8a01979 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xe8a3fd1c sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0xe8b64278 ps2_init +EXPORT_SYMBOL vmlinux 0xe8da9c2d genphy_config_advert +EXPORT_SYMBOL vmlinux 0xe8fd22c6 start_tty +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe9243e0c pci_set_power_state +EXPORT_SYMBOL vmlinux 0xe96efc23 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0xe9900813 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xe9953aa9 sn_system_size +EXPORT_SYMBOL vmlinux 0xe9afa771 mod_timer +EXPORT_SYMBOL vmlinux 0xe9afa99d follow_up +EXPORT_SYMBOL vmlinux 0xe9c6aef4 down_read +EXPORT_SYMBOL vmlinux 0xe9ddc1e6 eth_validate_addr +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea0cac43 security_path_mknod +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea12a59d bio_free +EXPORT_SYMBOL vmlinux 0xea146626 __nla_reserve +EXPORT_SYMBOL vmlinux 0xea37377c page_put_link +EXPORT_SYMBOL vmlinux 0xea3c419e nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0xea64f99f security_path_link +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xea974b71 acpi_get_physical_device +EXPORT_SYMBOL vmlinux 0xeab7c0e5 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xead89e5e cfb_fillrect +EXPORT_SYMBOL vmlinux 0xeae1812c submit_bio +EXPORT_SYMBOL vmlinux 0xeb0ca30d path_lookup +EXPORT_SYMBOL vmlinux 0xeb16163b io_space +EXPORT_SYMBOL vmlinux 0xeb46dc1f __scm_send +EXPORT_SYMBOL vmlinux 0xeb604c08 journal_stop +EXPORT_SYMBOL vmlinux 0xeb6633bf skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeba4879b ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebdbc927 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xebdfe691 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xebfb8ce0 dquot_free_space +EXPORT_SYMBOL vmlinux 0xebfebcc0 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec9a3d5f deny_write_access +EXPORT_SYMBOL vmlinux 0xeccb5d4f i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0xecf2753c __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xed0edeaa ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0xed11ce91 key_payload_reserve +EXPORT_SYMBOL vmlinux 0xed14cc43 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0xed19f232 matrox_mystique +EXPORT_SYMBOL vmlinux 0xed1f0419 matrox_millennium +EXPORT_SYMBOL vmlinux 0xed7af2dc sock_no_poll +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xeda88a82 mempool_create_node +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedda636b __splice_from_pipe +EXPORT_SYMBOL vmlinux 0xeddd0d48 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0xee1fa582 tty_port_close_end +EXPORT_SYMBOL vmlinux 0xee2af611 hwsw_dma_get_ops +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee35ddb5 blkdev_get +EXPORT_SYMBOL vmlinux 0xee513b67 pnp_device_detach +EXPORT_SYMBOL vmlinux 0xee5896a8 ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xee6b004b simple_transaction_get +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee7fff16 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeb8a24c xor_ia64_2 +EXPORT_SYMBOL vmlinux 0xeeceb077 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0xeedebeee init_timer_key +EXPORT_SYMBOL vmlinux 0xeee8c376 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xeeead40a i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0xeef8aee2 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xef060a83 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xef0ccd3b acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef596094 hippi_type_trans +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef874649 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xefe4c12c bio_integrity_split +EXPORT_SYMBOL vmlinux 0xeffdb996 dcache_dir_close +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf001ef75 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xf017b1b7 make_EII_client +EXPORT_SYMBOL vmlinux 0xf027c703 dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xf02f8227 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf092fb99 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0xf0a0f72f unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xf0c13f21 free_netdev +EXPORT_SYMBOL vmlinux 0xf0c1d775 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf106ecb3 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0xf10d7e6e i2c_get_adapter +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf125b291 __bread +EXPORT_SYMBOL vmlinux 0xf1394a2a __strlen_user +EXPORT_SYMBOL vmlinux 0xf16b869c i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0xf16edaec tioca_gart_found +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1ae011a xfrm_register_mode +EXPORT_SYMBOL vmlinux 0xf1af4859 keyring_clear +EXPORT_SYMBOL vmlinux 0xf1ba49aa input_close_device +EXPORT_SYMBOL vmlinux 0xf1c0765a tty_port_close_start +EXPORT_SYMBOL vmlinux 0xf1c2d9d8 seq_open_private +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e4166e __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf2089c6d phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf252968e generic_permission +EXPORT_SYMBOL vmlinux 0xf25a0b03 do_truncate +EXPORT_SYMBOL vmlinux 0xf289a7c4 cdev_del +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2b3ab6e tcp_sendpage +EXPORT_SYMBOL vmlinux 0xf2b69bfe fb_set_cmap +EXPORT_SYMBOL vmlinux 0xf2bcb6dc input_set_keycode +EXPORT_SYMBOL vmlinux 0xf2f1c9c1 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf32d3193 dquot_initialize +EXPORT_SYMBOL vmlinux 0xf32f8983 bio_sector_offset +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf341b138 dm_table_get_md +EXPORT_SYMBOL vmlinux 0xf3447fd8 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf35e10bc bdput +EXPORT_SYMBOL vmlinux 0xf37728a9 sleep_on +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf3a59506 unload_nls +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3ce6935 sk_wait_data +EXPORT_SYMBOL vmlinux 0xf3d3b8e1 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0xf3dede69 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xf3f090e3 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xf404b05f con_set_default_unimap +EXPORT_SYMBOL vmlinux 0xf40e2e6d d_delete +EXPORT_SYMBOL vmlinux 0xf42bfe13 ida_remove +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf49ac3e1 write_inode_now +EXPORT_SYMBOL vmlinux 0xf4c3016e da903x_query_status +EXPORT_SYMBOL vmlinux 0xf4d91eec ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf50576ba kobject_add +EXPORT_SYMBOL vmlinux 0xf505957b mdiobus_write +EXPORT_SYMBOL vmlinux 0xf50a7d55 inet_register_protosw +EXPORT_SYMBOL vmlinux 0xf50f3673 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0xf5173618 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xf5279950 input_filter_device +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf541a473 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xf57682c8 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0xf579c59f nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xf5c15d34 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0xf5c87cd6 xfrm_state_update +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5dfbd27 pci_select_bars +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf615601a devm_ioport_map +EXPORT_SYMBOL vmlinux 0xf683d1d0 generic_read_dir +EXPORT_SYMBOL vmlinux 0xf69e430e audit_log_format +EXPORT_SYMBOL vmlinux 0xf6ab7c5b audit_log_start +EXPORT_SYMBOL vmlinux 0xf6b1b709 napi_complete +EXPORT_SYMBOL vmlinux 0xf6b1f79e per_cpu__cpu_info +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6f772f1 sock_create_kern +EXPORT_SYMBOL vmlinux 0xf710786e input_unfilter_device +EXPORT_SYMBOL vmlinux 0xf71d5242 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf75a7630 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xf7616ea0 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xf780bf61 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xf7881eaa netif_rx_ni +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf7a1e526 seq_lseek +EXPORT_SYMBOL vmlinux 0xf7d72b72 find_inode_number +EXPORT_SYMBOL vmlinux 0xf7ec797e dmam_free_coherent +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf88ef119 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8ab9d4e compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xf8d8070b simple_sync_file +EXPORT_SYMBOL vmlinux 0xf904c182 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0xf92b7d3f ia64_mv +EXPORT_SYMBOL vmlinux 0xf94ce258 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0xf99ad150 eth_mac_addr +EXPORT_SYMBOL vmlinux 0xf9a2fe8b submit_bh +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9a9e3e8 genl_register_ops +EXPORT_SYMBOL vmlinux 0xf9b112f9 touch_atime +EXPORT_SYMBOL vmlinux 0xf9c44968 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xf9ca9dd7 page_follow_link_light +EXPORT_SYMBOL vmlinux 0xf9d1fd10 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0xf9e4b709 __lock_buffer +EXPORT_SYMBOL vmlinux 0xf9f42227 dm_put_device +EXPORT_SYMBOL vmlinux 0xfa2788b0 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xfa50a5d4 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xfa56b27d xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfa924f09 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xfaae85bc __wake_up +EXPORT_SYMBOL vmlinux 0xfac98117 journal_wipe +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb655bb4 __blk_end_request +EXPORT_SYMBOL vmlinux 0xfb66ee7d tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb7ac55a locks_init_lock +EXPORT_SYMBOL vmlinux 0xfb7d9c45 __udivsi3 +EXPORT_SYMBOL vmlinux 0xfb7f4430 bio_init +EXPORT_SYMBOL vmlinux 0xfb9c8d9a blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc0a684b dma_pool_alloc +EXPORT_SYMBOL vmlinux 0xfc2501cc _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0xfc295165 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc649546 dev_mc_add +EXPORT_SYMBOL vmlinux 0xfc7b1c87 pci_request_region +EXPORT_SYMBOL vmlinux 0xfca7d9e4 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc092d1 kset_register +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd19eaeb memcpy_fromio +EXPORT_SYMBOL vmlinux 0xfd1c9c74 netlink_unicast +EXPORT_SYMBOL vmlinux 0xfd3fb5b7 user_path_at +EXPORT_SYMBOL vmlinux 0xfd511e71 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0xfd63e25e bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfd9503ff devm_ioremap +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdba5009 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe008cbc __page_symlink +EXPORT_SYMBOL vmlinux 0xfe21630e d_alloc_root +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe7489ef generic_make_request +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe7dcc29 unregister_snap_client +EXPORT_SYMBOL vmlinux 0xfe97fc05 init_net +EXPORT_SYMBOL vmlinux 0xfebac1a7 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfec93bb0 ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0xfed97a67 pci_request_regions +EXPORT_SYMBOL vmlinux 0xfedcb869 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfeefc844 sock_i_uid +EXPORT_SYMBOL vmlinux 0xfef389a1 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff2edea3 input_unregister_handler +EXPORT_SYMBOL vmlinux 0xff3f4244 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xff420d3b filemap_fault +EXPORT_SYMBOL vmlinux 0xff578b66 simple_statfs +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff69adde block_write_end +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff7f647f register_sysctl_table +EXPORT_SYMBOL vmlinux 0xff8c5d2f do_splice_to +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffbbaed8 seq_bitmap +EXPORT_SYMBOL vmlinux 0xffc2fe00 clocksource_register +EXPORT_SYMBOL vmlinux 0xffc9dad9 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xc999639e crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xa72fc45d async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x2ab64393 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xc0c99319 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x7363856e async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xf8158e13 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x558458fc async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x6aa25359 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xfc51f99d async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xab6b17d8 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xde2f754f async_xor_val +EXPORT_SYMBOL_GPL crypto/cryptd 0x20a022c4 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x3d43fd17 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x47cc8bca cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x51da5175 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x5572254d cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xe1c14c74 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xe95db92d cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x2a81e9f7 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL drivers/ata/libata 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0x01c9ab43 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x028f5df0 ata_host_suspend +EXPORT_SYMBOL_GPL drivers/ata/libata 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libata 0x07094070 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0791b28c ata_acpi_gtm +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0bfe41c3 ata_sff_port_start32 +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0d4f6559 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0f72c8ad ata_qc_complete +EXPORT_SYMBOL_GPL drivers/ata/libata 0x145415de ata_sff_prereset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x167d710b ata_sff_tf_read +EXPORT_SYMBOL_GPL drivers/ata/libata 0x16ff17d5 ata_sas_port_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1a34b83f ata_ehi_push_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1a7f8577 ata_sff_freeze +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1cfa03e8 ata_sff_dma_pause +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2493e6c7 ata_link_next +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2740d913 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2959f4f7 ata_pci_device_suspend +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2a30f144 ata_port_disable +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2aab6bcd ata_port_schedule_eh +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2fb5fc8c ata_host_resume +EXPORT_SYMBOL_GPL drivers/ata/libata 0x30307b02 dev_attr_em_message +EXPORT_SYMBOL_GPL drivers/ata/libata 0x327ade6f ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL drivers/ata/libata 0x350fd5b4 ata_host_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3629dab2 ata_sff_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3a22f714 ata_port_probe +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3ac0f2fd ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3ad1edb0 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3b62b716 ata_pci_remove_one +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3b788e65 ata_sas_port_stop +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3b903dcb sata_scr_write_flush +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3df1a0d5 ata_port_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3efff5be sata_set_spd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x420cf861 ata_host_alloc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x43cbc7b5 ata_sff_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x43e41539 ata_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libata 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL drivers/ata/libata 0x48f71a69 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x49590ecc ata_sff_data_xfer +EXPORT_SYMBOL_GPL drivers/ata/libata 0x49c81957 ata_sff_check_status +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4a7b745b ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4b031de7 ata_dev_pair +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4bc84875 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4c800c46 ata_pio_queue_task +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4cb20c59 ata_sas_port_destroy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4cd68e0b ata_host_detach +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4cea6308 ata_eh_thaw_port +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4ddbca8c ata_sff_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL drivers/ata/libata 0x50d83a75 ata_link_offline +EXPORT_SYMBOL_GPL drivers/ata/libata 0x54de6325 sata_link_resume +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5761129d ata_sas_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x59e86466 ata_std_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5a614d76 sata_scr_write +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5a994605 ata_dev_disable +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5b143f21 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6064db0b ata_std_bios_param +EXPORT_SYMBOL_GPL drivers/ata/libata 0x627ece0f ata_common_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libata 0x648d97cc ata_sff_wait_ready +EXPORT_SYMBOL_GPL drivers/ata/libata 0x67f12ad5 ata_port_freeze +EXPORT_SYMBOL_GPL drivers/ata/libata 0x693330c9 ata_bus_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6c1e3dee ata_cable_unknown +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6cf591f4 dev_attr_em_message_type +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6f4c37f1 ata_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6fca5a1e ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x71551979 sata_link_debounce +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7287195f ata_ehi_clear_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL drivers/ata/libata 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x74a316fd ata_do_eh +EXPORT_SYMBOL_GPL drivers/ata/libata 0x75727943 ata_cable_40wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7729f52f ata_scsi_ioctl +EXPORT_SYMBOL_GPL drivers/ata/libata 0x79392f86 ata_dummy_port_info +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7a4870c5 ata_sff_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7b11e13b dev_attr_unload_heads +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7bac646f ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7c0b58f9 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7e09cb77 ata_sff_irq_clear +EXPORT_SYMBOL_GPL drivers/ata/libata 0x80338d5d ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL drivers/ata/libata 0x809d19e6 ata_eh_qc_retry +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x822dc858 ata_sff_hsm_move +EXPORT_SYMBOL_GPL drivers/ata/libata 0x833abc7b ata_noop_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8350a3a4 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL drivers/ata/libata 0x83da0404 ata_sff_irq_on +EXPORT_SYMBOL_GPL drivers/ata/libata 0x88a61542 ata_host_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8daf5f78 ata_bmdma_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8e0b2d3a ata_cable_sata +EXPORT_SYMBOL_GPL drivers/ata/libata 0x90864c74 ata_sff_pause +EXPORT_SYMBOL_GPL drivers/ata/libata 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x97a94784 ata_port_abort +EXPORT_SYMBOL_GPL drivers/ata/libata 0x99aaddd2 ata_sas_queuecmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9f9ac31c ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9fedaab0 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa2516327 ata_pci_device_resume +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa305e837 sata_std_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa371feaf sata_scr_read +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa592e4f4 sata_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xab1dbc5a dev_attr_sw_activity +EXPORT_SYMBOL_GPL drivers/ata/libata 0xae3112b8 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL drivers/ata/libata 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb0406a66 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb1044dbe ata_cable_80wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb1fd4aed ata_sff_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb216628c ata_cable_ignore +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb23f9341 ata_sff_dev_select +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb35e859c ata_pio_need_iordy +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb584a545 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb72f86d2 ata_sff_postreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xba6ce8dd ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbae7aa38 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbb82fe71 ata_bmdma_stop +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbd12a1b5 ata_do_dev_read_id +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbd13d7ff ata_sff_softreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbda6b749 sata_scr_valid +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbf05d405 ata_std_postreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc28c297b ata_pci_bmdma_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc3199cb9 ata_link_online +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc31df476 pci_test_config_bits +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc34b0f5b ata_sff_thaw +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc4143013 ata_sas_slave_configure +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc4d12de4 ata_std_prereset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc60290ac ata_sff_host_intr +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc6eae7e1 sata_pmp_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc8bb5fe9 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcafdd692 ata_do_set_mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd11e4189 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd13796f2 ata_link_abort +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd1f26783 ata_wait_after_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd5ac3c39 sata_link_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd612aad4 ata_bmdma_status +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd7f51eee ata_std_qc_defer +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd8356b94 sata_sff_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd83c195e ata_sas_port_alloc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xde06f2ee ata_sff_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libata 0xde6bf2da ata_timing_compute +EXPORT_SYMBOL_GPL drivers/ata/libata 0xdf55a4f6 ata_sff_exec_command +EXPORT_SYMBOL_GPL drivers/ata/libata 0xdf57f495 ata_dummy_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe13c7a3a sata_pmp_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe2107a90 ata_dev_next +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe291199b ata_scsi_simulate +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe3effff2 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL drivers/ata/libata 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL drivers/ata/libata 0xee3d80d5 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL drivers/ata/libata 0xef6a18ae ata_sff_tf_load +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf268fea9 ata_port_pbar_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf28d4b3e ata_eh_freeze_port +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf52017d2 ata_slave_link_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf79a400d ata_host_register +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf8e99311 ata_eh_qc_complete +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfa4a449d ata_bmdma_setup +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfbab5de5 sata_async_notification +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfbe90302 ata_acpi_stm +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfd59381c ata_sg_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfe05dd8e ata_base_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xff8f4d9d ata_pci_device_do_resume +EXPORT_SYMBOL_GPL drivers/ata/libata 0xff9589e5 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0x4b34487e sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x0fd08936 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x29523752 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x368bb95d btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x8252b19f btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb173e341 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xe3228caa btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x5f287285 agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x9fde4790 agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x007125ab tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x0be93997 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1ff9e681 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x20cb8d81 tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2632bfcd tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3afd2892 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6b864780 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7d4703db tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x85ccd513 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9695064f tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9c4b54e3 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9caaa0e2 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xade4bbb4 tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xbece089f tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc18a0754 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc79d79f7 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xcfb0f3bc tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd318a4b4 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe23c2797 tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xed87cfb6 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xee787d07 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xefa356a2 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfcb8ce56 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x343b93d6 tpm_bios_log_setup +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm_bios 0x9b1400b4 tpm_bios_log_teardown +EXPORT_SYMBOL_GPL drivers/connector/cn 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL drivers/connector/cn 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL drivers/connector/cn 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x26264686 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x805e2703 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0011a7e4 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x01b92803 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0af69160 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0ef8e132 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x11e00ac9 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x129ca1cc hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x17deca3f hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x26666853 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x31ba433d hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3fa0a789 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x651b8491 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x68bfc70d hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6970df74 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x74a291da hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7853a377 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7aaee571 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7b81e8ae hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x80e7740b hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8335b998 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb7f91f01 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbb4c782e hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbd157b09 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc38d0048 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd34cddcc __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd85ea8e1 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x0a3ad31b hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x3cd65832 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x6e34f026 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x0fda80a6 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x28c27bd2 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xca9fdadd lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xdeea3a1e lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe3a299ed lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x33b88083 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x45fd7858 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x4c206712 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x18010200 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x22e210c6 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x293f8712 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x379baa0a wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x50d12cdc wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x6ac403c8 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7573bfe0 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd40e515f wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd4b3d64d wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe68fb7ce wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf44c4614 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xfb31aa94 wm9712_codec +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x1d95a69a led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x37265dd3 led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x3e299567 led_classdev_resume +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x8f884b49 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xa587e7f0 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xbaae41e1 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x01809519 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x09fd88a8 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x0ebf8aea dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x1733ae7b dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x1d899713 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x264e5fdc dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x2eb3af15 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x2faab06f dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x58adea96 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5995d20a dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5f783344 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d2f85ed dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x862767ee dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x867898b1 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x8cd571a4 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa0547cfa dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa7a0265c dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc7b41cb0 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc8ca51d5 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xcf28a7b0 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xe180b41d dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x13d08208 md_new_event +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x19b0c3da md_allow_write +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x79e584be md_do_sync +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xe9fb9c83 sync_page_io +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x55dbe776 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5f5848d1 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8005c81a ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x01be2614 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x33af6add saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x39b02435 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5acea1e2 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x6135a4de saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x757f808a saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x8faec81a saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x98d382b4 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb682ee8c saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdb930b15 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xf40d721b saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x07be4312 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x2b45de96 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4af8ca84 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x6db2093e saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xa42d3d2e saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xaabf0bf3 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xf2c78755 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xc4969f62 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x9a369d21 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0xcaa14a21 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0xde6f89ee tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x0252e54b tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x7bb315ff tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0xc7adb801 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x7ae9fb77 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xd43295ee tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x7dea52f8 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xee7a6b44 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x40d0b877 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1bcc7cc9 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x25e6b087 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x26b97e93 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x2bf2d82f smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x396f6e8d smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x496c6f66 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x6f0920c8 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74bbc4c6 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x93411d32 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x95f7c8a0 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x994367c0 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb4e58db9 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb92fb333 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc64df1d9 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xcf6f058a smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xf36c9e65 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xf8035116 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfafc334a smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfe9872fc sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x1ace2533 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x1ef3806b cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x521f4ad8 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x5e7721a8 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x69f621db cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x6ebd6f78 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x7fa50ff7 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x80eab663 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xc862121a cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xcf1ec17a cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xf55dcd96 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0xdefdd275 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x273f360a em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x40718869 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x764696ad em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x81f7a938 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xa40fc1ab em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xfe554250 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x56225e9a saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xcedaac7c saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xddce7a11 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xf137484c saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xfcaa7d8a saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x1b335d5a v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x59906784 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xcad5be88 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xe74cf7af v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0x4e447a5f v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x2ca3c39d v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x53c1acca v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x57177934 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa21aebf1 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0051c983 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0d9583ee videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x11270e1c videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x11f7471a videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x13f6103b videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1ba6abab videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1c06a1ee videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x22180787 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2b066fc1 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x33a29b21 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x44a26013 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4f170d86 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x67505b25 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6b476bab videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x79cda6e9 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7e6efec6 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x83414c0e videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa5f12616 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbb340163 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xcbe74cc2 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdbd61969 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xde75b07b videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe1f39ad7 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf3220b3e videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf931333e videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x26595565 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x52cf2892 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x550cf54f videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x6818a5dc videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x793a7585 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x80e8de54 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x83258cc4 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x85ca00af videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x933dfb43 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa571e3cc videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb55eac9b videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xbce26bb1 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc1a3bdc3 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x2da21aaf videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x7cb005f1 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xac8b1606 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x00f1e3b7 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x79e8e03b v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x82a6839c v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xa38ff903 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xb8288a40 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xe0a0d66d v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0a8d7997 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x239bad8b i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x2add7ca1 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x583ba455 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x888281cb i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xb6e37e2f i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xef5b5a71 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xf7655aab i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x0500ea89 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x104b7cfa mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x1b68fa4a mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x23325da1 mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5656b5b0 mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5b966c0c mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xb04968cc mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x0e35f340 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe46da7d0 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0ed701d4 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x239081d9 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x326a06be pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5f7227b8 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x6095e5d2 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa286920f pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xafbe116e pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xb2f8b064 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe2c45bde pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xeac83732 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf215a33f pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x16e24774 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x38bf12ba pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x538b9342 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xac713d70 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xebbd367c pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x1e0af55c sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x2b9705f6 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x3c9f16c6 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xc929d4d6 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xcaa17e72 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x071c6d6a wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x4b2f7e71 wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x57878f00 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x5a17d827 wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7553cf27 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x83e33ff1 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xccc3dd2e wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd630ef75 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xdd2afef3 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe425fc10 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf0d8b724 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf8f27fb9 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1e325baf wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x231620fd wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x308d6f88 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x3c3d9021 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x55fd5e37 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x66101799 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x6acf4623 wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x6b55e1ce wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x7cbc4697 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x8582ae6a wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x89762418 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x939ca57d wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xb094787f wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xb2143789 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd5788115 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf3875877 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x1a33e4fb wm8400_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x1b66469a wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x6e4a9528 wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x9036b892 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x3a03f6b0 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x4a01f7bd cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x84019850 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xad32abfb cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x1018eee0 xp_restrict_memprotect +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x345c9217 xpc_disconnect +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x39046c7a xpc_clear_interface +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x4b1ca752 xp_nofault_PIOR_target +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x5797cfbc xpc_set_interface +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x6285dfe8 xp_cpu_to_nasid +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x64ba5017 xp_pa +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x68d27065 xp_expand_memprotect +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x7204e746 xp_remote_memcpy +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x76e36d39 xp_region_size +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x7c3462de xp_nofault_PIOR +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x902b9392 xpc_registrations +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0x937be528 xpc_interface +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0xcd468100 xpc_connect +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0xead4f7fe xp_max_npartitions +EXPORT_SYMBOL_GPL drivers/misc/sgi-xp/xp 0xf3b47f67 xp_partition_id +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x0b0c2670 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x16403ceb sdio_disable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x171a075f sdio_release_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3868674e sdio_readl +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3eb7cd95 sdio_unregister_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x49728f10 sdio_readsb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x5a6b08b4 sdio_set_block_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x6bbf1445 sdio_align_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x6ceaca56 sdio_writel +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x74673d4e sdio_claim_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x7a7d148a sdio_memcpy_toio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x8d1a049d sdio_enable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x9203a033 sdio_writew +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x931ff3d4 sdio_writesb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x944b8645 sdio_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xa3cb9e6d sdio_f0_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xafc8509e sdio_readw +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xb6a1cd50 sdio_claim_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xcd3e0f77 sdio_register_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xd72dcfa5 sdio_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xe956132f sdio_f0_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xfd34736a sdio_release_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x111a3bc2 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x38ff3d8f sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x9155035b sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x94b7128a sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc9cac2b9 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xd2ac8b1f sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x9d277838 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xb43d839b cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xe24d90ce cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x641286c9 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x02fe95c3 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x64dcc1c8 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x94bf7f6a cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xbc63b78f cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0x537dab7c DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x935d008b DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xe84ab66e DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0b6f9a65 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x28869f35 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x44558726 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x595ef56d deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5a05e68b mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5b4c58c1 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x61790ebd register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6764ac62 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x74e4715f mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7bfb4555 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8a7e1e0e kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x9d4f58a3 add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb491fdd7 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb8f5a9ac unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xcedd95d5 get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf6d473ac parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x81c880f7 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xb13dbe3d register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xc08052e8 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xe27e3f5e add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x3520f628 nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x3c6bcb22 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xb552940a nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xd2c0da9c nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe8f39597 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x6a689b0f onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x7f452d06 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4113b50d ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4b7ccad3 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4f234260 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5f222761 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x692a4f3d ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x693d772e ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x709a7097 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x891ce8af ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x97f14d9f ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa0798c52 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc639105b ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xde66bfaf ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x0341decd close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x13185323 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x20d178b1 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2cc274fb open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x3db99c36 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x4ee98ec0 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x6082d9c9 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x8633d110 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xaa98f2f0 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc2857638 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x3aef854c free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x4c435f41 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xc3a30252 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xc7f1bace alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x09c31862 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0da45cb0 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x11738969 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x156ddfc3 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1fbd2eef mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1ff56397 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2317cc5b mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x23f87639 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x25deb9d4 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2cb1baba mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2e908661 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3af425a0 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3b40904a mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3c2ae98c mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x43d5c050 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4b0f4a02 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5078a382 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5c830d97 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5e82af62 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6492e4b9 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6a626b6b mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6fecda37 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x709c777c mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7175542a mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7437c218 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7c3c3538 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7d71b7e4 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x804ef0df mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8309ec95 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8a0f104e mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x96186407 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9f46047a mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa68b9e85 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa94660e3 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xad62b31c mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xad767dcc mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xba52ffc3 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbaab8a16 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc64c856b mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc665f161 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xca9fc958 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcded20bf mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcf844f4c mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd32d137b mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd3403791 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd50c8974 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdb13f074 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdc1958c0 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe587436d mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe8e1bbe9 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xeb10f4fe mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfdf4acbd mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfff19f36 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x9e6cd32e usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xdfc1ec06 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x1815f948 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x53f94026 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x75e59825 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xc9e95fdd rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xe148d4ff rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xe7877acc rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0308b8b6 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x031a6c12 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0bb3d59c usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x13986dec usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x28c73386 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x363cda85 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4a14f143 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5b53abee usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6043c7a2 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6b5a8598 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x79bff43c usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7a8dfef8 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7e8311f1 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x84ea3bf9 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8cc9fa81 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8f9dc98c usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x947f9a0d usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xafadc3c9 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd0c5a147 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd69a32b7 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xde114439 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe14e1179 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xea88d15b usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf5fa3553 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x054d25c0 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x0ae59812 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x41ebbb82 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x60054f24 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x60191de2 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa02bac61 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc4631fb8 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd23c88e7 i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd246a84a i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd8555e76 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xdac3f49b i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xee61dfbb i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfa7121b3 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x5d73497a libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x00e80699 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x08fba6e3 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x0c06d24d lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x0e9e9682 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1c7aa53a lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3f1732a0 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7d2e6841 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x84271d4d lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x9452a0ba lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x9ace522e lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xad0ae39a lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xdaeec773 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xde72733d lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xee1091a9 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf241bc2b lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x388b854a __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x3a0c74b1 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6a2ea6ea lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xa7f6d1c7 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xb2d99bfd lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd8ffdf15 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xde325081 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfd4cfd72 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x892b4095 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xa215d939 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x05ba99b2 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x3ce9f28b p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x4b7dbb3a p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x5c3c2b39 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xbd77a457 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xea1ac2d0 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf1696450 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf4eeff8a p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xfdcd65f7 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x076389d8 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x081742c7 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0b838627 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0d6d4558 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x12f8a53c rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x17eea62c rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1c141672 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x278135a4 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2899d742 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2dc30a35 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x41ff8409 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4a9a2d71 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4e819fbd rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x51b07d00 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x51f6da87 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x837b0da2 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x93c4fe8b rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x977e9bd4 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb2c99494 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb784d651 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xde73b858 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdfe88ccb rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf4d25d89 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf7bc747f rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1d5c013c rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x219e8a8d rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x42e5ecd8 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x63cb0a9c rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x6a64648a rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x7f36fdec rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x8557423d rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbcea37c3 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xcff15caf rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0cff2209 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2335a43d rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x403f30fb rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x41ebb6fa rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x4d86b3c4 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x51c59c97 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x6e4e4812 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7ebf9213 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xa782d85e rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xaeb0766b rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbb7f122e rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc20c9694 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xce3c5484 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xdbee96be rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf4fb965d rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf6f246a9 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x658bcac5 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x6fd862ba wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xd80b59a0 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xbdca08f2 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xc37199d8 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x1b9c3cb8 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x33d0d5d6 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x99d7b17c wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd9d1783b wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xeddec4e6 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xf5895e6b wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0xbae52c37 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x02ceb9ba scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x161aa86c scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x4d465abf scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x8ead7415 scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xb5a7a498 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xbe171f17 scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xf72dbc0a fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0035f28e iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x038fcff9 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x03fe2beb iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0e04ae10 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0fa71fb2 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1192c416 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1398a7fb iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1ff532f2 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x22202e0b iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x22c35152 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x23df394b __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3ca1cf37 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5d2653c8 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x60c9fa61 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x625b3870 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x68da3dcf iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7e5edb0b iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7ee96b56 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7ff51fd4 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8b35cdeb iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8be5a3a3 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x93f898ec __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9785ec28 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9e36bb3c iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa930bf3e iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa959304c iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa9c34939 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xaa8ef6ba iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb50f7421 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbc253fd9 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc9011afc iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcee99bec iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd440c85d iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd82a825f iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdb6d46bd iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdd2a08b7 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdd5fce40 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe2cf1a82 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe3324d0e iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xeb2e23ad iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfb5e7127 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfc994703 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x03e3351d iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x08c066dd iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0907ef90 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x17194181 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1a452ccc iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1e0fbaa0 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1fa5cd04 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x2059e574 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x44dcdd38 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5da14bc8 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x77bc9bd9 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x853f9d80 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8990cf3d iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8da5e0b5 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa19da9b2 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xbff5a139 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1da87983 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1f26ed6b sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x25c00089 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2efebbec sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3fe37000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x42750ab1 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x4a528238 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5d7b1379 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6d365509 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x779b4eef __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8d18fc8b sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9016e5c9 sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x90dfe202 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9a416977 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa21b6773 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc3827a92 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc3af353e sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd60acd2a sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xda481ccb sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xdd7d027f sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf45566eb sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf51a03eb sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf9ebd653 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x172973bd srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x4140b407 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x4ac168d8 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x6daf69ce srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9d1f28d0 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xf4918b18 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x2a28c7fb scsi_bus_type +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x456b86f7 scsi_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x7fae439b scsi_target_unblock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x8315a862 scsi_nl_add_driver +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x865c7235 sdev_evt_send +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x891490cb scsi_internal_device_unblock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x93c24968 scsi_schedule_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xb4f3078c scsi_mode_select +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xb565bf14 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xb617e917 scsi_nl_add_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xbdb37076 scsi_target_block +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xc964a38c scsi_internal_device_block +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xcbbb7ba3 sdev_evt_send_simple +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xd30ef45c __scsi_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xd3117076 scsi_nl_sock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xed24bfbb scsi_flush_work +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xf3f18511 scsi_get_vpd_page +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x15a81c36 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x1c626bae scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x47e3d074 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x4a43ffec scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x99e7a6ba scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xaef0e638 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xc8490bf0 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xd8bbc0a7 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf3dff8c6 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x06d8dc15 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x07efdec7 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x10877f75 iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x251aa01b iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3a2c143e iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3f7be771 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x40600d54 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4f6eb327 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x68cbbd3c iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x73be93f9 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x85e1ed98 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x86c02d5b iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8d9f163d iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x92dc1706 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb179727a iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb22014cc iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb86aa835 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xba2b479c iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc09ef490 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcfa36723 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdabd122d iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfa0e9c2f iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x046c28c1 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x056b98d2 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x31f39482 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x9e7e8e14 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xafa725a8 srp_rport_add +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x05ca02c5 pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x3bccdc8f pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x43ce3bec pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xb4133ae1 pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/sn/ioc3 0x570bcd8b ioc3_register_submodule +EXPORT_SYMBOL_GPL drivers/sn/ioc3 0x69f1f833 ioc3_enable +EXPORT_SYMBOL_GPL drivers/sn/ioc3 0x99686ed9 ioc3_disable +EXPORT_SYMBOL_GPL drivers/sn/ioc3 0xa102d2ef ioc3_ack +EXPORT_SYMBOL_GPL drivers/sn/ioc3 0xa3c56a72 ioc3_unregister_submodule +EXPORT_SYMBOL_GPL drivers/sn/ioc3 0xd7a49ce1 ioc3_gpcr_set +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x29c4fa01 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4648766f spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4ac0f9dd spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x929e42f3 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x977ad631 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xe9c5392e spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/uio/uio 0x04fe22f9 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x2f832fa6 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x978fd078 __uio_register_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x9e897fb1 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xe30c8e3d usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x139fdf72 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x36518321 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4405e5fd usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4ca3e2dd usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4ed2e9e4 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x89183c96 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xafcb25b8 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xc5a99818 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xdfd02d59 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0c3dc1a3 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x10f84ed0 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x1631d82b usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3bacb7ac ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x40910261 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x44981b6d usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x470beebd usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4cb075b6 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x58668098 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6508a6b9 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6e9edab3 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x81eba511 usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x87784aef usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc9b66ae8 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe52b1f53 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x007566cf usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00b09165 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x06c28018 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1016ca14 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1cac335d fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1d79c0dc usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x23755396 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3277fb57 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x59c16329 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x6c36c210 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7601db58 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8a840165 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8acf12f3 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x90691133 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9671d45f usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa519c411 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb5560beb usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb6140346 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xd6cd32b3 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xea80295a usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xeceb4bd8 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf8fc41c7 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfdef31c1 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x373f69a4 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x7671ab99 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xa03976b3 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xc4ca86aa wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xdb05f398 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0074a176 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2ed65b32 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x450f33f0 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x68aefe1c wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x749fc60c wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x74feecb6 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7bf60a57 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x89af4bf6 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x97b4cd83 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9b7eb5c3 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa324d13a wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xac57e991 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc0aae505 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xd403d8f8 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe11dc274 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf979bfd2 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x5e4c23de i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xa7c03853 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xf3ba09d5 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x175fb437 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x19fca526 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x3b992435 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x3f094033 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x839b0399 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x84b1244f uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xd87503a5 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xfe05ab14 uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x110d10bb umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x1d39b6da umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x36b7a4e9 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd9c40475 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd9fcc549 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xde78202e umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xeed778c4 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xf0db1caa umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x004e8968 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x022d573b uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0bf89d1e uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x118e28e9 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x184365b0 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x24ffe1a7 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x26cd3605 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x324cb025 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3854be00 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3ef1b20b uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4bcd49b1 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x507e0383 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x577cd9db uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5999587a uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5bb3bc6a uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5c1298f5 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6951c9db uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6cf5d426 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x73213e1d uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x79e33be9 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7fddfb12 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8e5dc864 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9306b5c2 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9759e2f7 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9cce0da2 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa2db44a4 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xacc450ea uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xad401815 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbde3a706 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc3a83c4c uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xca55add8 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd5112779 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd691010d uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xee09f337 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf654d545 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf9da8fde uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xff436e2c uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x28085f93 whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x005a1880 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x0e063e2d wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x103e7ece wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x141f294e wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1a4f1e5e wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1c4e70bc wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x207a71cf wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x22a756ae wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2c1f8e4e wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x31eeb2d2 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x33b0e6f2 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x52dfac2c wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x572e2061 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6351b9e6 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6a48ab08 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6c998862 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6d9b6399 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x71a9771c wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7483c8d5 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x77f43bc2 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7b6e0527 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8eb3c873 wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x94a92321 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x98a26562 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa6a5fcb3 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb43d41c8 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc31dbf16 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcd1b4b8b wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdb9ce4c0 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xde0ee773 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xee04fac7 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf7bed78b wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x0dde4681 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x36a1bfd2 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x933df5c4 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa1196f1f ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xc749d4c4 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xd31b206d ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xe58f4cbe ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x11492d8f fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x7fdbda95 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x7041d522 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xbd1d1392 sis_free_new +EXPORT_SYMBOL_GPL drivers/w1/wire 0x11b7aac2 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x45630272 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x4c50f64e w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x55831f7d w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x652724a8 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xbfab309b w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0xc5bda959 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xd60b876c w1_write_8 +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x3267d95d dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xb60eabf5 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xf670b85c dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x9db697be exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xb5ec12b1 exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x0e7d9b6a fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0x37a45e88 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x42f4c815 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x5c12d5ab fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x607a66e2 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x75dd97d8 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x834c5ef0 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0x8583ad42 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0xb9cd8009 fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xbd276d6b fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0xbfc528ae fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0xcbcaefd4 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0xcf00b6b7 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xdb85c815 fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0xe0e1e4e7 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0xf4cef80d fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0xfc400b62 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xfe31cdb5 fat_add_entries +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x03755f8f nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x739b017a nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x7665ae44 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcb618d31 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xfd21f0d5 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x0d5c1800 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x97814578 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x2444d2c7 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x77be8af4 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x77e98755 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x7e4cefe8 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x9848456a o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa404beef o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xe2ba5b58 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00cb1904 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x5e255b2e dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x64fdfdb2 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x88d5c77c dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xc94e0719 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xe8482b7d dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x5b586d8b ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x6311de3b ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x672b94c1 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x1227bc3b garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x46671976 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x5d9a3022 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xce69a74f garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xcf4516b0 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0xdff11d25 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/stp 0xd695676f stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xf2dfb159 stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0x163a17b3 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x9dd80021 bt_class +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xe1c3ef44 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x012e095a nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x183186c6 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x4f21533b nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x8c945336 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xbe11439a nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xc71860bb nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xeef82202 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x0a9c86b3 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x8d40da14 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x92928b0c tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x931ae092 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xc78ce59d tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x195658cf ipv6_dup_options +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x1aa1cc2f ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x1da06841 ip6_dst_blackhole +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x2c9e5bc2 ipv6_find_tlv +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x36295d69 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x5abcf14d fl6_sock_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x783d87f5 ip6_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x7d5e124c inet6_csk_xmit +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x92528d01 ip6_local_out +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb7fb6a3b inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb89d7a60 inet6_csk_search_req +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xc98ecc56 inet6_destroy_sock +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xd1c86846 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xdf85948a ipv6_opt_accepted +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xf43eb92f inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x906cc034 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xc6c61565 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00127af0 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x03534b87 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x05d6056a nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0802c7b1 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0fce6a48 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x10a732ce nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x11078ac3 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x118f52b9 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x246274be __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2d616469 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x367f1fcd nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3e2f8797 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x408cc3ef __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x435bf2b6 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4da90a83 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x56f668b1 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a57af3c nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5b923499 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x69cadf7f nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a59275b nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a683f56 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e8e3cd2 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x710a90eb nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x77c161a5 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7988ab7f nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7ea5fadb nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7ffa3d49 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x84de433d nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8b3b40c9 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8bd39c17 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8e54e2ce nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90cc2aca print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x916d1564 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x94d13b92 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x956b771d nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x98b3b03d nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9b213141 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9b55c7db nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9f51701f __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9fa1795c nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa835c711 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb13ba30d __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb20e2df3 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbd965454 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc8e0112d nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc97907c7 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc9c0b662 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcb1c6e61 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xced03a9e nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd375da4a __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd5897a35 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xda295986 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe3ca4cd7 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe87a369b nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeacebe6b nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xed3b8e1c nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeee4e6a1 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf09e1420 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfad673af nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfb4f6545 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfc1a45b9 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x8ba408c9 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x0302ef39 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x18c2499a nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x3143510f nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x56dbe767 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x719a9f7c set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x74be4076 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x760684cd nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x9334db97 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xaba72ff9 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcf11d844 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf7cc1330 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xf3fbac27 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x0ee25a41 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x454a1f2e nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x76e186f7 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xe60fe33f nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x281a60e9 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xdd3bdf1f nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1d783db5 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x24e6297b ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x311294d1 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x340d0a9c nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x40f03392 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6ea9209f ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x9e7f5800 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x9f45d7a7 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xc89b9a2b ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd7241781 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xeda58fcc nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xf57db633 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x5fe76c8e nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xbff4cfe9 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xd7943d23 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x38030e73 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x6ab302fa nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa9d37fe9 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xed44a751 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xb8bf8bf6 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x07ec5c3d per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x146a8d3c xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x26989773 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x301cba61 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x379fb357 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x3992f207 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x39cefa8f xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x514b432e xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5b390ff2 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x918e471a xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x94013d99 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa0691df5 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa3d8ce70 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa80afef0 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd1be6560 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd2b29f3a xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf17e2f7e xt_compat_target_offset +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x11c413e2 rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x1d09311a rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x218788fc rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x23c3759b rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x2dd76222 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x2e332701 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x2f2c230f rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x4ef09f17 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x583fb6dd rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x65c45160 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x6efc7c55 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x7435963c rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x794a40cf rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x7eefc776 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x8bc7e85b rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x8de99ec3 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x8f1226d0 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x9036a041 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x94b7f7b9 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0xaa14f937 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0xbec164ad per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0xc2da8e38 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xce949d0a rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0xe4ae33cf rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0xfe863b4b rds_recv_incoming +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x1fd7b39d rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x358c7a0b rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x34919195 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x479972e3 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x6be42748 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x95636397 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xa2a9cfa7 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb6758c0d gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc13ed827 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xdd8618f8 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xddf0153f gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf9fa78d4 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xfd60cc6c gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x008d3db7 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x067c08b2 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x07acefef svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x09a95fdf auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x09bafd46 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b20506a rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b5e658d rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0d232a4a svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0fbb232c xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11178b18 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x117c301a sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11ec1cf9 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x13658feb svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x142144ac xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x177cd893 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1807c99a sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1810d2da svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x185555e1 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x18ada0c6 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x19941c98 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1afaa6c8 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1bc219e3 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x24b28ee7 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x24c6fe23 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x28a97083 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2be14da2 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2c0a56e3 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2c48ed55 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2e0511d9 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3010ec10 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x35340887 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3545a7cf rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x35b20e89 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x39639fd3 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c4baf89 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d72f37e svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3ef9ef9b cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4654dd44 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47d86f36 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4e7459bd svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4faf5421 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50217137 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53274972 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x54503e8b rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x572c318c rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59648707 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59c0478d xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5a3ee361 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5a4ea5cc rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5d4ca83d svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5de50039 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e1f6dbe xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ed239cb rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6092e0de rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x61006a27 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x647b77d4 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x653834bd rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x662336e4 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x674fd191 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x678d21f4 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x68df8e77 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c0a0214 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d6e3cbc rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x70cf0f0b rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x711c10a1 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x752e290a rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76b0350c svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76c35a6b rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e8e531e csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82bd7b01 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83b99407 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x85aca9a9 xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8731d413 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x89c0aabe xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8cc2d84e xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9035d982 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90cb1fbf auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90f13c78 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x918fa0dc rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x93528db3 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x95f2e85f svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x989adf65 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x990153af rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x99b281b8 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9aef7851 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9b9b87b8 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ff920d3 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa071644f xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa16485a9 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa21c76af xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3da14cd xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa62e29d1 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa82a075e svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaaca0072 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad2095f3 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb0490906 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb110959f svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb3631b05 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb8306306 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb89a85c4 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb8c6a2de svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbd183140 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdbeb889 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbe07842b xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc172ecf9 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc211848b rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc2b97efc svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc2ddb6b2 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc2e84075 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc33cef7b svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc4cf660f xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6b480d8 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd852b62 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcde77552 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd28cd86c rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd2e7aa11 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd7ad8709 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd83c442d svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd89eb8fa xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd97e85f3 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9822ada svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdb0de022 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcff3f70 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde46bfc5 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfbdc0ba xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe138c90c svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea83f480 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea9c451e auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeacb2d20 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xec4b11b4 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf1cd5c80 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf70b04a9 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf733d94a rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf8be490b xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9176a62 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9e7d584 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa9c1c67 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfd844326 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/wimax/wimax 0x220a9d93 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2513b9de wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x26bfff59 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x4a709d18 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0x5622a4e1 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7616e640 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x912f25f2 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x978aa3b0 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xda1a49c7 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe6c192fb wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xee6cc82e wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf0dc95e2 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf93fccf2 wimax_dev_init +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x090225b7 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0d5a6da6 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x145a861e cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x14e238ff cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x16b296f5 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x17a531ff cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1939f116 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1eb18ffd cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x20a0401c cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x236426e2 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4635b67c cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x468f5c8e cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x57be4827 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x641c24e5 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6c44b1a0 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x71ab171b cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x75c01a6e cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x82494551 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x92a09d02 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x97d85d1d cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa24ad436 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa39a25fe cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbbc9bbb5 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc5b5396c cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcfecd585 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd0f133e3 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd1c6fb2c cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdc272433 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xefc493a6 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf54e0284 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf751aaea cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfdbaa309 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x5d190a55 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x65842a49 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x66772f5e ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xf34efe3f ipcomp_destroy +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0252b60b snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0ffee721 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x18470e3e snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x20e51bc9 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x21d15353 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x239915a9 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x26ab8fc8 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x27f14c06 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x29eb48d1 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2cfdd19a snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2e836d37 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2ff03aa4 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x354d95c0 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x356070c2 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x35645eda snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x37d5f924 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a8a54c6 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3f624fef snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3fbca69f snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4058cc5f snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x425dd12f snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x430f2150 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x45325140 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x495f9649 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c87daa6 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x535a41c7 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x54845798 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5722fa4f snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5783dab9 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x58713a78 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5e2cc7f2 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x642012d9 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6a81082b snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6bf445ab snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6fe953e0 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7055d2d6 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x70b9ac87 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7335d6f0 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7e5d85dd snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x84871704 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8c4ab615 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8f5abd71 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x92af34da snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x92dcc4fc snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9308b902 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x95edea3a snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x983f4fbf snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x988669f6 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x98afa2ec snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa49124ce snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa77b27cd snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbcf3a51d snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc13f8af0 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc67b00cb snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc8123c5e snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xca2e9ac8 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb032867 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcd246bda snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcd976fc5 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd2e2f297 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd3ac58a9 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdb4fbaa7 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe4a75f32 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe59b9616 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe8a90b4a snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeafd6ee6 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xebadcdbf snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed47e6cd snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xef96ff6a snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xef981eac snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xefbfe603 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf39753eb snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3be98f1 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf63a09c0 snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf6cce776 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x7689fb6a ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x7c0a86c4 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x5a35cc2f soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x80299a84 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x820624f3 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xf2e8ac97 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0x9201b542 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x9cfb307f soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xd08482d7 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x86a98b02 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xc4401fd3 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x12d646b3 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x998d58f2 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x22330b4b max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x98107ec9 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xedaf5399 pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xf9cc5e25 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x44487b00 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x93a57b02 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x72f6cfda soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x999f4a3f tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x3a3b8c1c aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x77205c14 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0de73635 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x748b4dff aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xa91eecb4 aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xab9bcc2e soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xba74c85e aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xe7a694d5 aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xff01fdf0 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x3c28f30a soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x50e856b7 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0xfd90950f soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xcc2aa966 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xe2a82360 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x4b1be434 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xcd2e39cb wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x040257d1 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x1f22175d soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x6df5a932 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x35088f8c wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x843eed0f soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xbabf8f96 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xf5afb7bc soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x0dc3e7a5 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xdcc45a26 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x7098262b wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xfa7e8c33 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x2521101b wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x95394b66 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x45399a18 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xa4594a67 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x0cd5acf8 wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x58afd7eb soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x63468854 wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x73828428 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x02453c35 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x0d71a403 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x4b67916d wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xbebb6233 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x959631f0 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xcdf3e3c3 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xb9b2caef soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xbf28b57e wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x28b7a457 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xba361e81 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xa32d2fc0 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xe3eb77f2 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x459c7c46 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xa2ef45f7 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x1551edf5 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xdf98b1b2 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x7871b983 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x94db5d67 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xb16a59bc soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xdeffd4be wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x586ba610 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x9a470a7f soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xbbe003c7 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xe9db64f0 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0408dc64 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x066cc6e1 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0c1f80e7 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x19943331 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1a3b6dc1 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x27fda4fc snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2bd147ff snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2e7cf92b snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3ae66291 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3f08d0e0 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x442781d4 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4ba5f94f snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4d42296d snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x53c1676e snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x54a40b99 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x561d4110 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x57e86dc4 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5bf0efd0 snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5e187660 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x604eca67 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x63fd26c5 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x67e51712 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x690364ad dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6eabcd7f snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6faf6086 snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75834fe2 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7984e7d3 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x831db500 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8497da03 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8a6cd59c snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8eb5515c snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x97b55582 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c979f9c snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa40c1e63 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa57b2979 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa64959d6 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6cf5c76 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb216cb69 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbb12d110 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc30c30bf snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc32bc1ae snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8b1eae2 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8dd8e87 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc94e142e snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc9582509 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc9967721 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xccb48a99 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcde24b74 snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd02ce9d4 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd12ccb7b snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd16f99ab snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd1b01d6e snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd4829dea snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd9df9238 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xda408d65 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdafc8e10 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdcc39622 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe247bc7e snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe341f5e0 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe9d915c4 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xea38ec65 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeb33d460 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf703b8b1 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf8e19531 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf92477d4 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa0d483a snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa0ee2e6 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfac9e518 snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xff1b1f8d snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00593c92 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x007ff722 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00a5cbe1 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00ba48c8 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00d21128 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x0106d7f0 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x0110b3d1 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x011a6bc3 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x0151f31b device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x0175151c tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x018c5d4e pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01a70732 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x01c0b299 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x020111e6 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x02129cd9 use_module +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x02e887a8 lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x02ebb98f power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x0303deec register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x03e7c188 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x03ee1340 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x04111fbf usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x041e69c0 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x0443e55b relay_open +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x0457d110 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x04877de2 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x04b9d20b spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x04fac2d6 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x052d5919 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x054c05a3 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05919f7a __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x060de98d sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x0640140c __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x0683b5f1 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x06d52912 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x06e82adc blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x072620f8 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x0744ebba skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x076f852e srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07c76688 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x07e16f03 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x081ba38b bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0821110f crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x08946c3f pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x08ba5149 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x08cf520a platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09371d63 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x095e34ae inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x097cbae5 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x099732fd debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x09a4da01 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x09f08cbc skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x09fe5618 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x09fed42f dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x0a4683b2 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x0a5bef66 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x0a9ee654 sal_pcibr_slot_disable +EXPORT_SYMBOL_GPL vmlinux 0x0ac8b0ee blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x0ae28c96 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x0ae788ee account_system_vtime +EXPORT_SYMBOL_GPL vmlinux 0x0af5a024 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b45e999 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x0b6919aa ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x0b6b8543 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x0b720eb4 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x0b872bb7 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0bbd3d13 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x0be80544 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0ce3759c inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x0cec02a9 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x0d816fd0 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x0d98f2cf irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x0dfe81f5 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x0e16ea52 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x0e7e141b disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x0e8f59eb rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x0ed26569 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x0f813cc0 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x0fa2504a pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x0fb20a4a ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x10326e82 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x1040cf8a usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x10489f37 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x104caac4 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x1081e882 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x10cdf323 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x10eccfc9 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x110fb6f4 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x116ffc10 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x11f01321 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x11fb2b14 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x12584f33 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x12b5c2b4 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x12d19e54 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x12ef3204 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x1381a048 iommu_map_range +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13b6af83 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x13c1d83b crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x13fe75cd fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x1437eaf5 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x1451306c ia64_sal_cache_flush +EXPORT_SYMBOL_GPL vmlinux 0x1476ad37 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x152f7e0e __module_address +EXPORT_SYMBOL_GPL vmlinux 0x15495efb ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x15596414 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x1580aab7 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15c6fa2e cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x15effdbd find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x16089464 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1681d3cd rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x171d23b7 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0x1764e47b inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x181ab2c1 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x18684065 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x18b9407a bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x18df9397 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x1957aa1c inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x195c95df sal_pcibr_slot_enable +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19d6a3b3 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0x19fba41e __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x1a0a6373 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x1a8c66eb debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x1aa96d52 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x1adee933 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x1ae8a7bc regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x1b0248a1 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x1b15acf9 register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x1b42a387 register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1b9db49f inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x1bc3ef15 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x1bdd4c16 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cb79602 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x1cfaabe4 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x1d73467e unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x1e01f91c sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x1e2d3aa9 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x1e2ff1db spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x1e5f29b2 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ee31491 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x1efb6e85 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x1f02f397 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x1f3077a0 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x2024d542 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x204c4183 sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x208548a0 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x209bf4f1 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x20b20705 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x20b21b20 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20d22764 iommu_found +EXPORT_SYMBOL_GPL vmlinux 0x216cb628 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x2198204e rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x224c80e3 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22a12b2b devres_add +EXPORT_SYMBOL_GPL vmlinux 0x22b89632 sn_ioboard_to_pci_bus +EXPORT_SYMBOL_GPL vmlinux 0x22becdc8 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x22f55872 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x230ccaf7 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23a47fd6 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x241cebb2 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x24bb7b1c get_device +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x24f063ac pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x255402f9 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x25570154 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x259ff1e0 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x25bc413d ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x25dd402b task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x261d29c3 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x266f978c swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0x26ad0850 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x272c16c9 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x2738527e sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x276dbb5b hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x284df5f6 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28e43002 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x29289d0b blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x2969ed11 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x29c31c61 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x29c80ade rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x29eadd1d register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x29ee973f inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x29f73604 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x2a71d7b7 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x2aa90b26 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x2ab28551 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x2ab87540 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x2af23615 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x2b174bfd attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2b5c303b smp_send_reschedule +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2bba89f8 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x2bc8b03a xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bce1739 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c27b8ea user_describe +EXPORT_SYMBOL_GPL vmlinux 0x2c30f510 inotify_init +EXPORT_SYMBOL_GPL vmlinux 0x2c3ab0d4 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x2c7e34be tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x2c897eeb blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d05b277 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x2d935792 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x2d959c0f ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e544b8b __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x2ec92012 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x2edc1675 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2eed2630 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2f1c422b usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x2f28d335 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2ffdbf2b led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x306d73dd input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x307538b6 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x30bc6b5f fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x30cc4ebc crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x31c7b0ef pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x31d70e52 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x31dd4e5c fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x320d05f0 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x322832aa debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x3287228e bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x32891623 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x32f3e98a rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x3395d983 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x33a8757a usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x343400ee crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x347bcd2e get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x3484af1b simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x34ef306a crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x354d1329 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x35587845 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x35658822 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x3621d62d cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x36cb460f usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x36e7d83f ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x376022c5 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x3764f55a usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x37675fee console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x383f28f9 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x386b6646 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x3894cbcd blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x3941d458 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x3a0311df blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x3a469342 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x3a777e5e regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x3b2f97b0 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x3b32e319 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x3bab7d5d pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c562a8c crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3d30551c security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x3d320620 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x3d5f392d acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x3e2012aa crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x3e98a601 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x3e9c281c pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x3ef7e820 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f1a70db ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f9b1a21 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x401958be ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x40bdcdbe cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x415f12a2 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x41940fab unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x41994d66 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x41a1aa8a da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x41bb7219 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x41c0d1d9 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x41e77f06 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x422557d4 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x423ec6f6 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x42d4db73 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4305d72a ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x431b74cc register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x433439d3 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x433873f7 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x435424ca sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x441764a8 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x4429a831 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x4498dd1c crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44bbe223 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x45018d3d unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x4513ead8 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x452c09b4 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45ff3498 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x46030290 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x469f19d2 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x46de9286 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x46ea7261 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x4704e3d5 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x47519128 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x475505db platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x47980635 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x47ba6226 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x481abc1b pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x4836ca6f __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x483c433a usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x4845b2fa __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x487598a0 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x488c81d2 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x489e8055 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x48d29515 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x4928e532 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x492e80af spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x4932eba2 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x495de2bc __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x4978db0c rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49a531e1 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x49cdacfb acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x4a052d55 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x4a2d5430 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x4a451bdc skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x4a61b7c1 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x4adfe885 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x4ba9a796 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x4bfb3ca2 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x4c071440 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x4c24db71 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x4c41c996 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c999cad ia64_itr_entry +EXPORT_SYMBOL_GPL vmlinux 0x4d7a0905 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4d9031eb bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x4dcbb3ae regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x4de39425 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x4dfc0373 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x4e6de187 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x4e7ead6b tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x4f2b8325 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x4f3152d3 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x4f3c66ae __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x4f7c0288 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x4f937da9 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4f99e8cc ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x4fc56cce iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x50589c9d crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x50916293 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x50afa71d klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50ec9bb4 user_match +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x51046cbb srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x510517fc aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x5205033b relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x521da99b crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x527adc4b cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x529587ca tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x529c07d8 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x52ca3579 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52db90a0 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x535388b7 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x5356fba3 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x536d73b9 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x53712f93 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53a390a2 ia64_dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x53a92822 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x53ba48f4 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x53c1832e usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x53d1f400 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x5443a20a tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x545d2839 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x5466bf2c sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x54858a08 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54ad14b7 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x54cb6075 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x55078448 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x552eb4fe hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x55ba2043 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x55f18ac1 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x55f2580b __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x56252ab5 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x566ba2aa pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x567b316d dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x56d1f5f3 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x5715cf44 swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0x57494916 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x57768b7d __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57a74898 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x57e2a67d usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x582dceff dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x58494191 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x584a9324 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x5866cb7b usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x58685a5d __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x58e56b75 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x58e9b034 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x5962f094 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x596dcee5 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x59721fe4 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x5a081182 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a2df955 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5a5f2d1a regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5ad20436 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x5b5fa9a0 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5b60e3c2 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x5b83c910 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5b88e1d3 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x5bad7329 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x5bcc32af inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c6884d1 device_move +EXPORT_SYMBOL_GPL vmlinux 0x5c81fc6d crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d16596e tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d8a16e5 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x5da3d6fd xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e3422c3 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x5e513ca0 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x5e56f07c device_del +EXPORT_SYMBOL_GPL vmlinux 0x5e7650cb i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x5ed70cf0 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x5efc5948 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x5f300ddb regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5f95aab6 sn_acpi_rev +EXPORT_SYMBOL_GPL vmlinux 0x5fa541eb input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x600910cc inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x60205c86 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60d49553 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x60f2ed6c rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x61200378 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x615496e9 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x61e4a380 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x62156548 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x621b1f8b sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x621e19aa usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x623f8080 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x624aeae3 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x6267921a pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62be6c20 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x63ad648d bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x641b1a94 usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x64561f65 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x64864a5d apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x64d55dcd sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x65518257 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x658bb324 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x65aed4b5 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66cdf2ae hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x673cae11 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0x675ec084 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67d7618a __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x67dceb56 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x683e79eb queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x6852e61f ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x6896bc5b transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x6907f2a8 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x69251186 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x6969a2a9 pcibios_fixup_device_resources +EXPORT_SYMBOL_GPL vmlinux 0x699cde64 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x69a6780f rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x69c27506 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x69e1bf9f i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x6a4c9a92 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x6a66b2ee init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x6a7ddba6 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x6a8bb155 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x6b2166a8 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x6bd0a7d1 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6bef1882 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6c7dda05 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6caffc77 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x6ce33e3a sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d8595ad usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x6dbc249c tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x6dc46615 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6dee9b9b seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x6df865cd find_module +EXPORT_SYMBOL_GPL vmlinux 0x6dfbc575 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x6e7036a3 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e75e0c6 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x6e80b63a led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x6e9f2f50 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x6eda5dc4 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x6edccb87 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x6f028919 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x6f28c3e1 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x6f3de4f6 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x6f585059 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6f5d835a platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x6f5ffa08 sn_dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x6f8fdfd6 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x703b16ac crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x70569444 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x70c93858 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x711343f4 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71891742 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x71eb3f46 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x72386a29 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7258aa6c crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x73714988 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x740941b2 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x74657e4a part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74e62d78 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x74e78eaf empty_zero_page +EXPORT_SYMBOL_GPL vmlinux 0x750f5eae pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x752b9434 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x757f5559 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x75b04543 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x75bcbfa7 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x75e2c7c1 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x760121b7 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x76314d3d br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x76afb191 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x76f251fa add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x770a3702 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x77834293 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x77c44379 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x789acd66 arch_fix_phys_package_id +EXPORT_SYMBOL_GPL vmlinux 0x78aaa3b1 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x78c668a4 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x797bc429 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x79e99b3c dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x79f2bb7e blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x7a0a1122 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x7a72e0e8 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x7a9be960 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x7accb5ed inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7ae09a42 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b976683 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x7c0e7ce8 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x7cfffd46 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x7d2abff4 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7ddd1521 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e2f2893 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e91c14c blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x7ee6ad83 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7fba1483 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ff506c5 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x814c6d9a sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x81b1a017 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x8216e134 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0x822dd9e1 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x826b4b3c vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x827dc0e2 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x8286a9d6 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x828afdcf led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82a9af98 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x83d251cb pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x8491a4ac fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x84eeb717 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x858ca72e bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x859db7e3 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x85aa5740 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x85aded0c usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x85ae7b41 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85d0f6ea ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x861044e0 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x8617df49 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x863de26a usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x864af958 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x8676e741 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86b80401 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x86bc1747 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x86f507c8 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x87473d1b rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87c26035 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x87c44f92 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x87da0844 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x880b4d01 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88f794c3 pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x8921db3f devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x89a9f955 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x89c282c4 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x89dcc5eb cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x8a3318a7 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x8a7e366c shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x8a9b5654 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x8b1f7328 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x8b694717 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x8c7ad001 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x8c85ba54 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x8cc0d4d4 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x8cdf7501 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d201514 is_multithreading_enabled +EXPORT_SYMBOL_GPL vmlinux 0x8d4ee2f2 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x8d871472 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x8db83b54 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x8dc0aebb mmput +EXPORT_SYMBOL_GPL vmlinux 0x8dde7d71 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x8e3138e8 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x8e50c6bc blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x8e52f13f get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x8ec84b7e input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x8f071e2e fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x8f2d4d47 pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x8f6ac316 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f810e8d inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fd53867 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x8ffa5e28 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x908bab2f eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90a64610 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x90a693a1 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x9203bb8b fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x9268a681 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x931e2f92 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x934fc326 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x942a41f4 iommu_unmap_range +EXPORT_SYMBOL_GPL vmlinux 0x9456f11b rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x9491b8de get_driver +EXPORT_SYMBOL_GPL vmlinux 0x94aafd6d rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x94e1ac28 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956d3484 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x95700ce3 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x95a366bb vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x96109098 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x96169642 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x964d5c39 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x9657aa1b ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x96b044de __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96efcfd6 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x97215d04 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x979f2937 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x97a7eae6 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x97bd236b rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9901eb92 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x9911ac9a ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x991dd15b usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x993341c2 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x99362b07 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x9947f0d2 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99c7376c invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x99f7d62d sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9ae9e76d device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x9aecd674 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x9aedddbf inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x9b40bf2a kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x9b8fc14e dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x9b900e90 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9beaa389 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x9c2867d0 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x9c88555d get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x9c93fa13 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x9c9623ef power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9ce57e61 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x9d1d1159 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x9d4243dd platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x9d6ff9a4 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x9d727492 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x9d97da1e rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x9e268483 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x9e49caab unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e853035 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x9ebe4312 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x9eea9107 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x9f38c33e per_cpu____uv_hub_info +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f52d095 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x9f64125e swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa02ad8da device_attach +EXPORT_SYMBOL_GPL vmlinux 0xa05a5afd devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xa06cb188 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xa0bbf2bc pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0xa115164d driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa16b4ae2 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xa18a0df8 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xa1924050 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa197bcac klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0xa23c9f09 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0xa26769df generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xa286afa4 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0xa29c0df9 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa2fa07c7 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xa350ec72 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa35be93c sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa36c73c8 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xa37db663 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xa3a5aa04 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0xa3b8b456 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xa3ba3310 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0xa3c66087 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xa3dd91f5 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xa3fbfb76 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa4552ebc skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0xa48bdb21 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xa4a6f8a7 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0xa4aaefe7 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0xa540d4c0 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xa543a5c9 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xa55e7536 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0xa5a21bb4 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa5f5a75c tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0xa5fbc8fb class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xa63b091c crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0xa6aaa7a8 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xa7336e56 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xa74cd491 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0xa7955157 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xa8a34aaa crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xa8faefa3 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa8feca86 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa90c8dc5 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xa9231bca cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0xa94803a8 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xa9817f0f dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa035264 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xaa480068 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xaa6708f3 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xab703da6 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xac95fcae tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0xacb3833e pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xacde0400 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xacf8038e disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xad059b16 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xad0997a5 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0xad220195 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xad474116 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xad937d80 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xada59553 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0xadb42433 device_add +EXPORT_SYMBOL_GPL vmlinux 0xadfa9101 __class_create +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaec3b216 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0xaed078bd class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xaf3035c0 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xafdbdf6b fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0xafe845e8 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0xb00ea85a inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0xb01cca47 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0e65948 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0xb0f88f91 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0xb15d7212 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1b3401a __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0xb1c9c70e devres_find +EXPORT_SYMBOL_GPL vmlinux 0xb1fd3aa1 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0xb2030832 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xb2344ecb sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xb266d251 usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xb2d8c42a do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xb3695a2e inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0xb3834f43 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xb417d53f inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xb497e36c hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0xb4a51518 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xb4a8dbe9 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xb4dde0f5 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xb53019e5 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0xb53ae573 cpu_idle_wait +EXPORT_SYMBOL_GPL vmlinux 0xb54f62d6 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xb58c45f0 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5923307 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0xb5c34940 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0xb5faea26 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb6db7adc ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xb72bfa30 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb78c6657 input_class +EXPORT_SYMBOL_GPL vmlinux 0xb89f8350 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb8aaa661 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb92f13dc da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xb9345171 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb958c673 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0xb996719a inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba1d9ec1 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xba9af32f device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xbacdc3e2 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xbb2059f1 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xbbd772e6 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xbcad92f6 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0xbce16b65 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0xbcf05835 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd639604 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe46494b i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xbe89af79 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xbee52ccc devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xbf48eca8 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0xbf4ebb1d unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xc03fd93a ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc044e1a5 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0xc091b65e __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xc0ab7d49 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0xc0dd6aae tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xc0f0de8b usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc155cc6d elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc26762ee usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xc29b42b1 bus_register +EXPORT_SYMBOL_GPL vmlinux 0xc2cecd13 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc3d41e11 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xc40c0ef6 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0xc40c67af tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0xc4217eb3 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc460eb59 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xc5055c11 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xc50616e4 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0xc5dd5d6d __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0xc624dae7 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0xc6324f79 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0xc633d497 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0xc64b5999 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xc6599248 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0xc65ef4d0 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xc66443f1 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xc6baf71e fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xc6c1dbc0 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0xc735eaa5 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xc74c496b crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xc7a7f9c4 queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xc7d7194d driver_find +EXPORT_SYMBOL_GPL vmlinux 0xc83b9563 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xc8775612 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0xc87977cb pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc8c9ece8 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xc90d8696 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xc9501a87 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc973f0f2 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xc97d21de crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xc99e30ec crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xc9c40244 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xc9c7f221 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca06ed4e bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xca483e61 usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0xcaea2b0b ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xcaf0dcdb ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0xcb04f88f blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xcb08d0db driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xcb0e0e99 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0xcb4b1acf rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0xcb88f5e2 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcba30f3e flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xcba758c9 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xcbcdac55 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0xcbe3c285 user_update +EXPORT_SYMBOL_GPL vmlinux 0xcbf1c062 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0xcc013aad platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc6241db regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc799377 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0xccb23ee5 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xccdd3716 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0xcce4c4e3 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xcceacbc2 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xcceb1338 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xccffcb0a do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xcd04c146 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xcd1147f7 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0xcd1c7a88 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xcd1ca2cb iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0xcd5fb04c crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0xcd76ad3d pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xcdc39573 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdfb1254 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0xce148a9d __put_net +EXPORT_SYMBOL_GPL vmlinux 0xce37e757 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xce81813d spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xcefa0154 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0xcf2d4d17 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfd78637 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd031ba40 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd05baea3 elv_register +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd1442ddb __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xd14a139d skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1e211bd usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0xd20529ff register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xd22165ce rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0xd23c0eda __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xd2500196 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xd2700b94 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2c66d98 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xd2e0e35a relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xd3179a8a simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0xd330c388 device_create +EXPORT_SYMBOL_GPL vmlinux 0xd3461fd1 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xd372a5ef netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0xd3919fb4 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xd3ab8460 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0xd3b63e0b transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xd3bfc51a dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xd3dc3024 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0xd41ab0d3 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0xd42e287b cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xd43e9243 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xd4573d93 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0xd4bae740 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xd5d4f519 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0xd5f01c4d usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0xd6057119 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0xd681b19b attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xd69ea35e xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0xd6d2a672 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd743911a ia64_sal_freq_base +EXPORT_SYMBOL_GPL vmlinux 0xd74d1ccd devres_get +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd83f31a5 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0xd8eddf65 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0xd9042fa8 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xd924d41c fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xd9508718 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0xd973bebc put_pid +EXPORT_SYMBOL_GPL vmlinux 0xd9742ff4 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0xd9becec3 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda3a096c register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xda413d8b debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xda5804c5 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xda5dd606 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xda662eb8 drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0xdadc03da inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xdaee877a crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdc289107 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xdcbb4b8f da903x_write +EXPORT_SYMBOL_GPL vmlinux 0xdd080972 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0xdd2d9fee do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xdd6ebc1e set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0xdd9393ba dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xde1eeed5 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xde2acf1e __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde442cad ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0xde9d2451 kick_process +EXPORT_SYMBOL_GPL vmlinux 0xdeab5fd6 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xdf4c3598 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xdf8a33ec platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0xdfcca020 user_read +EXPORT_SYMBOL_GPL vmlinux 0xe00e567d platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe015a595 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0cf2774 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0xe0d7e876 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe1211541 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xe18896b3 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0xe1a37d19 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0xe1ad6c9c pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xe1bbff4d locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xe219b9a6 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xe25e1dc5 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xe25e69a8 device_rename +EXPORT_SYMBOL_GPL vmlinux 0xe2a53bdd regulator_register +EXPORT_SYMBOL_GPL vmlinux 0xe2ad89ec tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xe2c9a7e2 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xe305d047 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xe34d96d1 device_register +EXPORT_SYMBOL_GPL vmlinux 0xe3518624 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xe390e8cb regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xe3e1f28b unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xe45abd6a spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0xe483713f sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe4a51b2c usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe5461eeb crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0xe584a392 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xe58b7d57 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xe58eebf8 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0xe5ec1ced led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xe60f539c set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0xe6300743 put_device +EXPORT_SYMBOL_GPL vmlinux 0xe638deac usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe68d3bd6 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xe6c10d22 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xe6c399fa ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xe6dd679a ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe6dda3ee sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe719bc0a crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xe7c33d3e get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0xe7ec4d95 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0xe80f3d41 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xe82c28d0 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0xe8ef121f device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xe8f9a097 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe921e794 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9851586 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xe9fea2f1 queue_work +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea17145d __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0xea4432ab disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xea472534 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xeaba521c device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xeafece21 fb_ddc_read +EXPORT_SYMBOL_GPL vmlinux 0xeb55f687 spi_async +EXPORT_SYMBOL_GPL vmlinux 0xeb8c2ac1 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xeba07ddd mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xecd34c12 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0xecfa052e crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xecffa67b usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0xed4fdc82 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xedb28934 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0xede26252 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0xedf5414f srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xee45ffb6 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xee4b8170 ia64_ptr_entry +EXPORT_SYMBOL_GPL vmlinux 0xeefa4cd1 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xefbaa326 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xefc13a6b securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xf0094931 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xf0b15f1d crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xf0ea2416 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0xf13b7323 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0xf15acc52 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0xf17b451b ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1f1edf6 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0xf2047643 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf20f889d debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xf297d1a3 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xf2ade282 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xf2bfb371 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf2e4195e ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xf31d3c38 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf3582157 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0xf36b4670 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xf398d208 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xf3b166ee ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0xf3bd27bc default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xf3f09c8f usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xf468eeb5 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4a8385f iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0xf4c1fcd9 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xf4de61d9 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0xf51605d0 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xf529733b sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf634bb01 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0xf6476722 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xf66a57e3 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xf676ee4e __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf6979b8f ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf7360e23 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0xf7849ed3 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0xf7b4c522 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xf7f5dc81 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xf85d5ff9 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xf8a4853f platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0xf8bcf304 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0xf8e0f38b raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0xf8e95527 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf9189fcd simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0xf93d0752 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9a9fa3e __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xfa03e2ad srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa735b78 mca_recover_range +EXPORT_SYMBOL_GPL vmlinux 0xfb03a8fb usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0xfb1f472c __class_register +EXPORT_SYMBOL_GPL vmlinux 0xfb712d8e usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0xfb8ec632 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc7460c4 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xfda88ef8 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0xfdbc0d88 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xfdd78e7f rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xfddec725 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfde4b0d0 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xfe0178fa platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xfe65f186 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0xfe6f36c3 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfef9f301 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/ia64/ia64.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/ia64/ia64.modules @@ -0,0 +1,2061 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8250 +8250_pci +8250_pnp +8390 +9p +9pnet +9pnet_rdma +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abyss +ac97_bus +acecad +acenic +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +adfs +adi +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +ads7846 +adt7462 +adt7470 +adt7475 +adutux +adv7170 +adv7175 +adv7180 +adv7343 +advansys +aes_generic +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ahci +aic79xx +aic7xxx +aic94xx +aiptek +aircable +airo +airo_cs +alauda +ambassador +amd8111e +analog +ansi_cprng +anubis +aoe +appledisplay +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +ata_generic +ata_piix +aten +ath +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522 +authenc +auth_rpcgss +autofs +autofs4 +avmfritz +ax25 +axnet_cs +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bpa10x +bpck +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +button +bw-qcam +c67x00 +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cbc +cciss +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cdrom +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +chipreg +cicada +cifs +cirrusfb +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cn +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comm +configfs +container +core +cp210x +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpufreq_stats +c-qcam +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +crc-t10dif +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +DAC960 +davicom +db9 +dc395x +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +dl2k +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dm-log +dm-mirror +dm-multipath +dm-queue-length +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dst +dst_ca +dstr +dtl1_cs +dummy +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +earth-pt1 +ecb +econet +ecryptfs +eeprom +eeprom_93cx6 +eeti_ts +efivars +efs +elo +em28xx +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +eni +enic +epat +epca +epia +epic100 +eql +esi-sir +esp4 +et1011c +et61x251 +eth1394 +ethoc +evbug +evdev +exofs +exportfs +f71805f +f71882fg +f75375s +fan +farsync +fat +faulty +fb_sys_fops +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +fit2 +fit3 +fm801-gp +fmvj18x_cs +forcedeth +fore_200e +freevxfs +friq +frpw +fscache +ftdi-elan +ftdi_sio +ftl +fujitsu_ts +funsoft +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +g_printer +grip +grip_mp +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hexium_gemini +hexium_orion +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hp_accel +hpfs +hpilo +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +hwmon-vid +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-dev +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i5k_amb +i82092 +ib_addr +ib_cm +ib_core +ib_ipoib +ib_mad +ibmcam +ib_mthca +ibmtr_cs +ib_sa +icplus +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igbvf +ili9320 +imm +inexio +initio +input-polldev +int51x1 +intel-rng +intel_vr_nor +interact +ioc3 +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ipaq +ipcomp +ipddp +ip_gre +iphase +ipip +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ipv6 +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_tcp +isdn +isdnhdlc +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +iTCO_vendor_support +iTCO_wdt +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_cm +iw_cxgb3 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jme +joydev +joydump +jsm +kafs +kaweth +kbic +kbtab +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kyrofb +l2cap +l64781 +lanai +lapb +lapbether +lcd +ldusb +lec +led-class +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-heartbeat +ledtrig-timer +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libata +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +linear +lis3lv02d +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lnbp21 +lockd +loop +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxt +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +macmodes +magellan +map_absent +map_funcs +map_ram +map_rom +marvell +matroxfb_maven +matrox_w1 +max1111 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7359_keypad +mb862xxfb +mc13783 +mc13783-core +mc44s803 +mcp2120-sir +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +mdio-bitbang +md-mod +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +metronomefb +mfd-core +mga +michael_mic +microtek +mii +minix +mISDN_core +mISDNinfineon +mISDNipac +mISDNisar +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_core +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +msdos +msp3400 +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +mwl8k +mxl5005s +mxl5007t +myri10ge +nand +nand_ecc +nand_ids +nandsim +national +natsemi +navman +nbd +ncpfs +ne2k-pci +neofb +net1080 +net2280 +netconsole +netjet +netrom +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +nilfs2 +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +n_r3964 +ns558 +ns83820 +ntfs +nvidiafb +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ohci1394 +old_belkin-sir +olympic +omfs +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8023 +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_amd +pata_atp867x +pata_cs5520 +pata_efar +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_oldpiix +pata_pcmcia +pata_pdc2027x +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pc87360 +pc87427 +pcap_keys +pcap-regulator +pcap_ts +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8591 +pci +pci200syn +pcips2 +pci_slot +pcmcia +pcmcia_core +pcnet32 +pcnet_cs +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +pegasus +penmount +pf +pg +phantom +phonedev +phonet +phram +physmap +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmc551 +pmcraid +pn_pep +powermate +power_meter +ppa +ppdev +ppp_async +ppp_deflate +ppp_generic +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism54 +processor +psmouse +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qsemi +qt1010 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8a66597-hcd +radeon +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +raw +raw1394 +ray_cs +rdma_cm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +rfkill +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rocket +romfs +rose +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-efi +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcap +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8187 +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s5h1409 +s5h1411 +s5h1420 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7191 +safe_serial +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sbp2 +sc92031 +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_mod +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sd_mod +sdricoh_cs +se401 +seed +serial_core +serial_cs +serio_raw +sermouse +serpent +serport +sfc +sg +sha1_generic +sha256_generic +sha512_generic +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sisfb +sisusbvga +sit +sja1000 +sja1000_platform +skfp +skge +sky2 +sl811_cs +sl811-hcd +slhc +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softdog +solos-pci +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedfax +speedtch +spi_bitbang +spi_butterfly +spidev +spi_lm70llp +squashfs +sr_mod +ssb +ssfdc +sst25l +st +stallion +starfire +stb6000 +ste10Xp +stex +stinger +stir4200 +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +tcm825x +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda826x +tda827x +tda8290 +tda9840 +tda9875 +tda9887 +tdfx +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +tg3 +tgr192 +thermal +thermal_sys +thmc50 +ths7303 +tifm_7xx1 +tifm_core +tifm_sd +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tle62x0 +tlv320aic23b +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_bios +tpm_nsc +tps65023-regulator +tps6507x-regulator +trancevibrator +tridentfb +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +turbografx +tvaudio +tveeprom +tvp514x +tvp5150 +tw9910 +twidjoy +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +typhoon +u132-hcd +ubi +ubifs +udf +ueagle-atm +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbhid +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +ves1820 +ves1x93 +veth +vfat +vgastate +vgg2432a4 +via +via686a +viafb +via-rhine +via-sdmmc +via-velocity +vicam +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtual +visor +vitesse +vivi +vlsi_ir +vmac +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1_smem +w1_therm +w6692 +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83l785ts +w9966 +w9968cf +wacom +wacom_w8001 +wanrouter +wanxl +warrior +wavelan_cs +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xp +xpad +xpc +xpnet +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +yam +yealink +yellowfin +yenta_socket +zatm +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/sparc/sparc64-smp.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/sparc/sparc64-smp.modules @@ -0,0 +1,1752 @@ +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +8021q +8139cp +8139too +8250 +8250_pci +8390 +9p +9pnet +9pnet_rdma +a100u2w +aacraid +ab3100 +ab3100-core +ab3100-otp +ac97_bus +acecad +acenic +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +adfs +adm1026 +adm1029 +adm8211 +adm9240 +adp5588-keys +ads7846 +adt7462 +adt7470 +adt7475 +adutux +adv7180 +adv7343 +aes_generic +af_802154 +affs +af_key +af-rxrpc +ah4 +ah6 +ahci +aic79xx +aic94xx +aiptek +aircable +airo +airo_cs +alauda +alim7101_wdt +ansi_cprng +anubis +aoe +appledisplay +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +ata_generic +ata_piix +aten +ath +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp870u +atxp1 +authenc +auth_rpcgss +autofs +autofs4 +avmfritz +axnet_cs +b43 +b43legacy +b44 +bbc +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +binfmt_misc +block2mtd +blowfish +bnx2 +bnx2i +bonding +bpck +bq24022 +bq27x00_battery +br2684 +bridge +broadcom +broadsheetfb +bsd_comp +bt8xxgpio +btrfs +c67x00 +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cbc +cciss +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cdrom +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch341 +chipreg +chmc +cicada +cifs +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cn +cnic +coda +comm +configfs +core +cp210x +cpwd +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +crc-t10dif +cryptd +cryptoloop +crypto_null +cs53l32a +cts +cuse +cx231xx +cx231xx-alsa +cx2341x +cx25840 +cxacru +cxgb +cxgb3 +cxgb3i +cyberjack +cyclades +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +DAC960 +davicom +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de600 +de620 +decnet +deflate +digi_acceleport +diskonchip +display +display7seg +dl2k +dlm +dm9601 +dm-crypt +dme1737 +dm-log +dm-mirror +dm-multipath +dm-queue-length +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +drm_kms_helper +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dstr +dummy +dv1394 +e100 +e1000 +e1000e +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +ecb +ecryptfs +eeprom +eeprom_93cx6 +eeti_ts +efs +ehci-hcd +elo +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +em_u32 +eni +enic +envctrl +epat +epca +epia +epic100 +eql +esp4 +esp6 +esp_scsi +et1011c +et61x251 +eth1394 +ethoc +evdev +exofs +exportfs +f71805f +f71882fg +f75375s +fat +faulty +fb_sys_fops +fcoe +fcrypt +fdomain_cs +fealnx +ff-memless +fit2 +fit3 +flash +fmvj18x_cs +fore_200e +freevxfs +friq +frpw +fscache +ftdi-elan +ftdi_sio +ftl +fujitsu_ts +funsoft +g760a +gadgetfs +garmin_gps +garp +g_audio +g_cdc +generic +generic_bl +gen_probe +g_ether +gf128mul +g_file_storage +gfs2 +ghash-generic +gigaset +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +gunze +g_zero +hdpvr +he +hexium_gemini +hexium_orion +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-zpff +hostap +hostap_cs +hostap_pci +hostap_plx +hp4x +hpfs +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +hwmon-vid +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-pca +i2c-dev +i2c-gpio +i2c-isch +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-simtec +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2o_block +i2o_bus +i2o_core +i2o_proc +i2o_scsi +i5k_amb +i82092 +ib_addr +ib_cm +ib_core +ib_ipath +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmpex +ib_mthca +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +icplus +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +igbvf +ili9320 +imm +inexio +inftl +initio +input-polldev +int51x1 +intel_vr_nor +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipg +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_si +ipmi_watchdog +ip_queue +ipr +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ipv6 +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ir-common +ir-kbd-i2c +ir-usb +iscsi_tcp +isdn +isdnhdlc +isight_firmware +isl29003 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +iuu_phoenix +iw_c2 +iw_cm +iw_cxgb3 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jme +jsm +kafs +kaweth +kbic +kbtab +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kl5kusb105 +kobil_sct +ks0108 +ks8842 +ks8851 +ks8851_mll +ktti +kvaser_pci +lanai +lcd +ldusb +lec +led-class +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-sunfire +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-gpio +legousbtower +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libata +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +linear +lis3lv02d +lis3lv02d_spi +lkkbd +llc +llc2 +lm63 +lm70 +lm8323 +lm87 +lm92 +lm93 +lm95241 +lms283gf05 +lockd +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxt +lzo +lzo_compress +lzo_decompress +m25p80 +mac80211 +mac80211_hwsim +macvlan +map_absent +map_funcs +map_ram +map_rom +marvell +matrix_keypad +matrox_w1 +max1111 +max1586 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mc13783 +mc13783-core +mc33880 +mc44s803 +mcp23s08 +mcs5000_ts +mcs7830 +mct_u232 +md4 +mdc800 +mdio +mdio-bitbang +mdio-gpio +md-mod +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +metronomefb +mfd-core +mga +michael_mic +microtek +mii +minix +mISDN_core +mISDNinfineon +mISDNipac +mISDNisar +mk712 +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_core +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +msdos +msp3400 +mt20xx +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +mwl8k +myri10ge +myri_sbus +nand +nand_ecc +nand_ids +nandsim +national +natsemi +navman +nbd +ncpfs +ne2k-pci +net1080 +netconsole +netjet +netwave_cs +netxen_nic +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +nilfs2 +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +n_r3964 +ns83820 +ntfs +nvidiafb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +of_mmc_spi +ohci1394 +ohci-hcd +omfs +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +openpromfs +opticon +option +orinoco +orinoco_cs +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +paride +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +parport_sunbpp +pata_amd +pata_atp867x +pata_cs5520 +pata_efar +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_oldpiix +pata_pcmcia +pata_pdc2027x +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pc87360 +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pci +pcilynx +pcmcia +pcmcia_core +pcnet32 +pcnet_cs +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +pegasus +penmount +pf +pg +phantom +phonedev +phonet +phram +physmap +pktcdvd +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pm3fb +pmc551 +pmcraid +pn_pep +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_generic +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +psmouse +psnap +pt +pvrusb2 +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qlogicpti +qnx4 +qsemi +quota_tree +quota_v2 +r128 +r8a66597-hcd +radeon +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfd_ftl +rfkill +ricoh_mmc +rio500 +riowd +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rocket +romfs +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8187 +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +saa5246a +saa6588 +saa6752hs +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-empress +saa7146 +saa7146_vv +saa717x +safe_serial +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sbp2 +sc92031 +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_mod +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sd_mod +sdricoh_cs +seed +serial_cs +serio_raw +serpent +serport +sfc +sg +sha1_generic +sha256_generic +sha512_generic +sht15 +si4713-i2c +siemens_mpi +sierra +sis190 +sis5595 +sis900 +sisusbvga +sit +sja1000 +sja1000_platform +skfp +skge +sky2 +sl811_cs +sl811-hcd +slhc +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-sun-amd7930 +snd-sun-cs4231 +snd-sun-dbri +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softdog +solos-pci +soundcore +sound_firmware +spcp8x5 +spectrum_cs +speedfax +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +sr_mod +ssb +ssfdc +sst25l +st +stallion +starfire +ste10Xp +stex +stowaway +stp +strip +sunbmac +sundance +sun_esp +suni +sunlance +sunqe +sunrpc +sun_uflash +sunvdc +sunvnet +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +tcm825x +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tda8290 +tda9840 +tda9887 +tdfx +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tg3 +tgr192 +thmc50 +ths7303 +tifm_7xx1 +tifm_core +tifm_sd +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tle62x0 +tlv320aic23b +tmiofb +tmp401 +tmp421 +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_nsc +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +ttm +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +tveeprom +tvp514x +tvp5150 +tw9910 +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +typhoon +u132-hcd +ubi +ubifs +ucb1400_core +ucb1400_ts +uctrl +udf +ueagle-atm +ufs +uhci-hcd +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultra45_env +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +upd64031a +upd64083 +usb8xxx +usbatm +usbcore +usb_debug +usbhid +usblcd +usbled +usblp +usbmon +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +veth +vfat +vgastate +vgg2432a4 +via +viafb +via-rhine +via-sdmmc +via-velocity +video1394 +videobuf-core +videobuf-dma-sg +videobuf-vmalloc +videodev +virtual +visor +vitesse +vmac +vp27smpx +vstusb +vt1211 +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83791d +w83792d +w83793 +wacom_w8001 +wavelan_cs +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +yealink +yellowfin +yenta_socket +zc0301 +zd1201 +zd1211rw +zlib +zlib_deflate +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/sparc/sparc64-smp +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/sparc/sparc64-smp @@ -0,0 +1,8570 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0xf05155b0 suni_init +EXPORT_SYMBOL drivers/block/paride/paride 0x0c413a05 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x3151e817 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x6424dfa9 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x76b32c54 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x7868497f pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x8afc3d34 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xb1f697f9 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xb7dd85df pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0xc97689d5 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xd7e80750 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0xece58d33 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xf32a5104 pi_read_block +EXPORT_SYMBOL drivers/cdrom/cdrom 0x032be999 unregister_cdrom +EXPORT_SYMBOL drivers/cdrom/cdrom 0x0abe5893 cdrom_release +EXPORT_SYMBOL drivers/cdrom/cdrom 0x14d05191 cdrom_ioctl +EXPORT_SYMBOL drivers/cdrom/cdrom 0x2636c258 cdrom_mode_sense +EXPORT_SYMBOL drivers/cdrom/cdrom 0x344adbd5 init_cdrom_command +EXPORT_SYMBOL drivers/cdrom/cdrom 0x3efe1ce1 cdrom_number_of_slots +EXPORT_SYMBOL drivers/cdrom/cdrom 0x59eb1552 cdrom_get_last_written +EXPORT_SYMBOL drivers/cdrom/cdrom 0x653c1104 cdrom_get_media_event +EXPORT_SYMBOL drivers/cdrom/cdrom 0x6bd904ea cdrom_media_changed +EXPORT_SYMBOL drivers/cdrom/cdrom 0x9d666857 cdrom_mode_select +EXPORT_SYMBOL drivers/cdrom/cdrom 0xc789db62 cdrom_open +EXPORT_SYMBOL drivers/cdrom/cdrom 0xee80863c register_cdrom +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x09cc5afb ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x0de5a6d5 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x101690e2 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x189fba9a ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x18d012aa ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x29da6838 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2ce3b90d ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x47ff2c3c ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x53ffb2d6 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x609e1be1 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x6e62bb6d ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7e5a785d ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8d4260c3 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa5770fe1 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa7e693fa ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc10ad213 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc3a378d9 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc5771150 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd1925625 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xdf2da239 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe2045419 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe9119601 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf87cda4a ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x026ca877 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1bb6e462 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x20e4274d drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x20eb186c drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x22031133 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x29f56871 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x43afc5aa drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x48dc0b14 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x571bb9f0 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5ed474fa drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x63b4cf43 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6bfea83a drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7b9adf68 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x968a2024 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x97fd8b84 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa10a43db drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa8c5d6c8 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb552398f drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbd0f6ea6 drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd132f7ba drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd2c6735f drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xda69d3ac drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe3f49754 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xea0bb08a drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf8965529 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xae591b7f radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xe2834e85 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x022b0971 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x09455971 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0b90074d ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0bbe1f6e ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x103f2957 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1196fa8b ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x12a95ac1 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x14727877 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x152a5448 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x20f45e3f ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x27af91cb ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2a8cdc55 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2aad1a87 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2f6630f6 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x367c0b4b ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3847309e ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x469ceb7e ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4cd37a4f ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4f421fbb ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x571320e5 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5bfff7bb ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6265cc32 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66336a57 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6816f66b ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x74135b02 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x79625328 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8a7ac0ea ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8ae685b9 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x91a82017 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x946a58b5 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x963ae60d ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x99fa764f ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9ac0b7fb ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa6bc1f3c ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa6cecb66 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xab5f9cab ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac419406 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaf64aba8 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb230ea29 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb7ad380d ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbf9a3feb ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xce4e75fd ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcfd051e8 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd1db4ef1 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xde9a68c7 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe0d6d395 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xea30c107 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf3c7ddce ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfd95ab50 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe44647f ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfee7725f ttm_bo_reserve +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x9a6f54eb i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xd7f1c507 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x091f2f98 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0fbca6f4 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x165c0b5c hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1b93bcd0 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x254b416a __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2919fb48 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3952a35f hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3c3cb86c hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4579711c hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4ca716ae hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x541063c3 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x580ee9c7 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5af9e76f hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5fd3e041 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5fed25e1 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x60e5055c hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x633e3a44 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6376f1a5 hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x661b33bd hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6c91e044 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6e12834a hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x701a185c hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x773da3c7 hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x79df589d hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7cfcf729 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x80addaab hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x83b3bd63 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x90368dfa hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x92337ec2 hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9469d2a6 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x971c1c59 hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x98288ef8 hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9d9e12a7 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa29ebb19 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa2b4c7b6 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa4b45191 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa79b9081 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa894fd9f hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xae610f41 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb0ade16d hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb2a024cb hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb2b3461c hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb988d749 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xba80303f hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbb520767 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbb903a00 hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc17772d8 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc3f2b439 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc5b8834a hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc880f290 dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcc70a551 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd0e0cb1c hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1912ec5 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd7e027ac hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdbb9223e hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdc9d526d hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdcb72177 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe5af910b hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4a3db5 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xeda841fe hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf1edf3b5 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf673e55b hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfa45a6d1 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x5c9d8083 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x69655ce5 ohci1394_stop_context +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x8dd19822 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x16147d9d rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x46f6af9c rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x62eb9d17 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x7c82606c rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x7eeff7de rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xfe13d5c7 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x02acd752 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x06416bdb ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1adb2215 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x251bef1e cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2f984d7a ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3d54695b ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x457b79af ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4e593f46 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x55b5c70e ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5db21b8c ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x667cb3c1 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6dc74bc5 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x81c338d5 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x969a9b00 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xbb0c32f3 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd8f3cb85 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xdf86804d ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x006cc290 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x015931f2 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x089f6a66 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0b467f20 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x13adf963 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1d644bf2 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x242afe28 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27ebff07 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2f1045a9 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x399f7f7e ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3bd4d950 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3c4009d1 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3fb012d9 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3fe9f52c ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4b50690c ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4dd48a9d ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x51513dc3 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x51b3969b ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x51e6be9d ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x522a84b1 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x58b673d6 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5aa34957 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6515f204 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x65a0487f ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6ba32457 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6e8bcc0d ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6e8ee6c7 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6fce90d6 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x71db977f ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7472c935 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x75992495 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x76428da4 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7b398b54 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7d2672c9 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7d6d92f0 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x80e5b7d6 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8392cd22 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8dc39800 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8e27e95c ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x90f832f4 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x95925146 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96a4a19d ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9dd06c5a ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa50af76a ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa9596fd7 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa9b28ccb ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xaa84b93e ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb0a144aa ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb29edd3f ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbb17c57c ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbcb838a5 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc03e926f ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd4d4c779 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd57d5926 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd5a8b8d3 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd70d43ae ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd722b597 ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd7751953 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdb4191fd ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdbc903a4 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe0bacf8b ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe77e7f00 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf0c3f446 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf3d03efb ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf440b2c7 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xffcddda2 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x19ff6378 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x250bd75b ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x29a28c96 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x3f3d997e ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x44841066 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x64cfc973 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6c289e0b ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7a1ca667 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x85e6bf11 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x9fddc7cb ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc46ebbfb ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xf4ab78b6 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x21cafc6d ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x3b80218d ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x58910bf6 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x70d693c0 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x82da826e ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x93472cf9 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xb2083a05 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc6e253f7 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe6307f78 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x350c3b59 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x5ecbfcc3 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x8a1d4cd9 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x910e6798 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xab86710c iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xae35794f iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xb9b8a532 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xd9025920 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00aa815a rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x07de8734 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x29a3fe2e rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2c847b62 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x479d6d36 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x49dd1f79 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4b30fbc7 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x692feb02 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x70688593 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7f1a76f7 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9d0e6d53 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xa845d515 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc333b6bf rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xce5a0be0 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xd85892f1 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe5a2717c rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf3f33a9f rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfb4de069 rdma_create_id +EXPORT_SYMBOL drivers/input/input-polldev 0x4426263c input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x86084eb3 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xf3bdcb55 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xf40bc84c input_allocate_polled_device +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x0823fabe capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x170707f5 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x46fa32e2 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47577ab2 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47dbfa0a capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50d83e69 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6212a825 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x761611a8 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x788d398c capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc659205d capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc8945e13 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe64d8599 capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe9f62f29 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xeee9b4e1 capi20_register +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x234885f3 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x9771f165 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xb14c61a4 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xb4a6a715 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x6eb89808 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xf81c28c6 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x2a722865 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x097c831f recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x108e989e mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x13f4ad48 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x154ce557 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1ecaee96 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2b1cf6f9 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x453d998c l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4a0ca76f mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4d17d1bf create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x5b1ddbcb mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6036e4e7 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8ad94574 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8ae331d7 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8e6fcf19 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9fddb0ad mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa8cb38f5 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xac6a266f dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb2489368 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd756f305 confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdb85a2db mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdd48c61c get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf4e30f8d bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xff07f187 recv_Bchannel +EXPORT_SYMBOL drivers/md/dm-log 0x5bc7e6bd dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0x6c210672 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x8b171b99 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x8b54b1ec dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x293a5f48 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x91171736 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0xd3932b58 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0xd9f0cae3 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/md-mod 0x01d249ad bitmap_unplug +EXPORT_SYMBOL drivers/md/md-mod 0x0a5097ed md_wait_for_blocked_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x17dce792 mddev_congested +EXPORT_SYMBOL drivers/md/md-mod 0x1c3d167c bitmap_startwrite +EXPORT_SYMBOL drivers/md/md-mod 0x20755fb8 md_register_thread +EXPORT_SYMBOL drivers/md/md-mod 0x2325e1d7 bitmap_endwrite +EXPORT_SYMBOL drivers/md/md-mod 0x244c6268 md_integrity_register +EXPORT_SYMBOL drivers/md/md-mod 0x2baafb2a md_set_array_sectors +EXPORT_SYMBOL drivers/md/md-mod 0x3370112a md_check_no_bitmap +EXPORT_SYMBOL drivers/md/md-mod 0x35826c7c md_unregister_thread +EXPORT_SYMBOL drivers/md/md-mod 0x4067ea96 md_write_end +EXPORT_SYMBOL drivers/md/md-mod 0x6a9f6a4c md_done_sync +EXPORT_SYMBOL drivers/md/md-mod 0x73c17c0a register_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x7fce4527 bitmap_start_sync +EXPORT_SYMBOL drivers/md/md-mod 0x83db733c md_wakeup_thread +EXPORT_SYMBOL drivers/md/md-mod 0x8c72037c unregister_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0xac0265fe md_check_recovery +EXPORT_SYMBOL drivers/md/md-mod 0xb93945ec bitmap_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xc7a1cd5d md_integrity_add_rdev +EXPORT_SYMBOL drivers/md/md-mod 0xd35b05a7 bitmap_cond_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xda9cd9c1 md_write_start +EXPORT_SYMBOL drivers/md/md-mod 0xee374bdf bitmap_close_sync +EXPORT_SYMBOL drivers/md/md-mod 0xf7425d2b md_error +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0x7b85d712 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0xb920e6a7 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x4a2752fd xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0xc099d9c4 xc5000_attach +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x2e894106 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x953fbdb8 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x1ad0a9e5 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x5364191a gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x828af656 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xba18177e gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xcd78b40f gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0747437a saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x18dff3d2 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x26fff84a saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x3556c6ea saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x51d42c07 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x6d33adc7 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x71399ce8 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x974b0798 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xaf67f685 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xdb73c713 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe04b8228 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xefc63653 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x294a9606 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x90928feb soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0xab63280c soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xd64fda06 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xdb9eb276 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/tveeprom 0x72d8110b tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0xa9902a3d tveeprom_read +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0xbb7f0844 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x5b7fefa0 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd7bac8a3 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videodev 0x00e414a0 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x483d235e video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x7770e626 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0x7d5bc167 video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0x7ff80042 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xa6f107ac video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0xc1caae23 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xd2b8e8ca video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xfe5f3ab0 video_usercopy +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x03309606 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x08d86ebf mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x10df7d2c mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x11d47c38 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x12f86721 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x34e6bc17 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3d410b5b mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3ed3fb2f mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x460470a3 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x50abadaf mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x608428d0 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6308c723 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6c1c9496 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x71444f86 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7ae3b250 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7c8bfa5a mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7e9d62ac mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x82e273df mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x889dee0d mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8f7cb1c4 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x953776bd mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa323c10c mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xbb0f2133 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd0e70048 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe7ca1276 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf272f6df mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0c52a354 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x12c0008d mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1702d732 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x20aa1402 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x25b69660 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x273826f0 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x28b18940 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2a13214d mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2d695399 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2ff5927a mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3da3e1fe mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x499e21ee mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x58835764 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6af599d5 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7e928032 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x80925202 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8ca78e33 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x98397dce mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa006ffa0 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb26e5757 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbb3f4b5f mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xcb37765e mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xcf7aabb4 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xdad21960 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1a086f0b i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x20a8df40 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2c06b72f i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x314394e2 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3533fe4b i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x35bd3f4b i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3d5326f2 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x472aca9a i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x55bfea49 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x65d96db0 i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x70f37f19 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xa11fec3b i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xa9b0eff8 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb3cddd78 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc3c30c25 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcc5901e3 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xccb324f9 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd61a689e i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd7499eb9 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe5c114c1 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xee879382 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf1a47ce5 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x330909b6 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x4a6d50dc ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x617317fd ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x6821c1e1 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x7e0a4fe8 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x9b5c0b52 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xb4add405 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xe8559113 ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x279a97c8 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x7ec399d2 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x06fd3838 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x2f43f519 mfd_add_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0x6ec743f4 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xf7b23c1d c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x51026604 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x945a917f ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x0d2b5b0d tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x2bd23e21 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x3f443f95 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x40025377 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x438a76ce tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x4cd4a2b1 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x4d77bbfa tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x67c818cf tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0xbc6d910b tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xc93b1f6a tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xcf526510 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xde959933 tifm_alloc_adapter +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x4611b51c mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x08d7635c mmc_host_enable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x1d672e2a mmc_card_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x1e40a263 mmc_request_done +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x1f5dfa58 mmc_power_save_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x2a478532 mmc_release_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3341e55b mmc_align_data_size +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x38ba082b mmc_detect_change +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3dc5e017 mmc_free_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x6086fdf7 mmc_set_data_timeout +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x663a060d mmc_wait_for_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x73b81632 mmc_card_can_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x7f955cdf mmc_add_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x814b523c __mmc_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xa276158b mmc_try_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xae7c546e mmc_power_restore_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb9d3fde8 mmc_card_awake +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb9d6d4fa mmc_host_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbb6c3e41 mmc_wait_for_app_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xd1b59d27 mmc_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xdd3a7cf4 mmc_register_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe6d8dd7d mmc_host_lazy_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf3e0ea8c mmc_remove_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf89e77a1 mmc_alloc_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xfdda5254 mmc_wait_for_req +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0xc3340d86 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0xffff6ec1 mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x0ee611fb cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x684c1d7f cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xaa51c4ed cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x22d1b868 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x71b819d9 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x97b9fa49 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xcbad78ce do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xc17cef05 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x62614fe4 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0xc449a1ae simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0xbec9b28b add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xfcf0c525 del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x663b91fb mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x6cd1e47b mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/nand 0x652987ef nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xa9437c3c nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x72e0ac30 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xaa02cabc nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xb72043a1 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xd11a4770 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xd9f449c0 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xf2128b3f onenand_addr +EXPORT_SYMBOL drivers/net/8390 0x52f718c8 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0x5adc80e3 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x5aeba646 ei_poll +EXPORT_SYMBOL drivers/net/8390 0x6100c880 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x6ec01360 ei_open +EXPORT_SYMBOL drivers/net/8390 0x7851199e ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0x8fc560f6 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0xa2cb5138 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xc90a48c6 ei_close +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xe4567383 ei_netdev_ops +EXPORT_SYMBOL drivers/net/bnx2 0x2ae7a213 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0x9a99a3e9 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x008fbe97 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x09fa1bf3 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x108e9ca0 t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1fd50d63 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x42e37ada cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8b4d3832 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x92e244d7 dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa6d97088 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xab639cf4 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb2ab7c3c cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbb39293e cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbc2b1d32 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xde0031ab cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe1fd2fd0 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe8178ad0 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf9e25a2b t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x0edc8155 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x24efc275 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x83f7b3d3 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x8d0bd979 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0xaf0b8b18 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0xbf9aa9f8 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0xf3b556bd mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0xfd054ca3 mii_check_link +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x0628d9c7 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x2735e9fb alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp_generic 0x0107ae25 ppp_input +EXPORT_SYMBOL drivers/net/ppp_generic 0x41dfcac5 ppp_channel_index +EXPORT_SYMBOL drivers/net/ppp_generic 0x5dcd682a ppp_input_error +EXPORT_SYMBOL drivers/net/ppp_generic 0x87ff3835 ppp_unregister_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0x92287dc7 ppp_output_wakeup +EXPORT_SYMBOL drivers/net/ppp_generic 0x92de1c92 ppp_register_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x94c820c8 ppp_register_net_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xa5f4522d ppp_unregister_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xd15a65ee ppp_register_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xe841585e ppp_unit_number +EXPORT_SYMBOL drivers/net/pppox 0x0cfb6feb register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0x292db4f7 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xf32675a4 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/slhc 0x2278e94b slhc_remember +EXPORT_SYMBOL drivers/net/slhc 0x26b760c4 slhc_init +EXPORT_SYMBOL drivers/net/slhc 0x3fe0d1c0 slhc_free +EXPORT_SYMBOL drivers/net/slhc 0x62538167 slhc_toss +EXPORT_SYMBOL drivers/net/slhc 0x7e87227e slhc_compress +EXPORT_SYMBOL drivers/net/slhc 0xa78d9eb7 slhc_uncompress +EXPORT_SYMBOL drivers/net/wireless/airo 0x34fe781f stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x62be5df2 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xab4e4707 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x5983053a ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xccbc8daa ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xecff53cd ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/atmel 0x446643d3 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x7cdc8f78 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0xf2575655 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x009019e4 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x06447939 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1c5f3a8b hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x25da027a hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2b88c1af hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2cfb2090 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x300edb5a hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3aa2f590 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x490cff79 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4c091e93 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x553b2639 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6d0107c8 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x74bbbe62 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8dd6923e hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x91db33ac hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x92cdb1e1 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9e535bd4 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa43d9349 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa73a06f7 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbb6b9296 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc3fa8256 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc5f66ac9 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc6264b78 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc955d665 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf51e1e79 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0e5ac344 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x10985736 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1b53f392 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1ddbb123 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x38e19b6a libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3c37e6e5 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3cf68774 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x54788fb8 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x981d6a66 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa57f183e libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb4d6bd25 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb96358c9 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xccf3f492 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xcf1b6df4 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd04cdab3 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd9006056 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe007f251 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe7a6c385 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf3a83f96 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf8f7cb8f libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfacbc5f6 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x005f182f iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05463a4a iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05911f79 iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0873a82c iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x08c5dcf9 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0ae5c123 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0d197c7b iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0ec85018 iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f7d6534 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11163c23 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11e8362f iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x134d8311 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x16a177af iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x16d40946 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1beacdcc iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d19965d iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1ddafd6c iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1e25602c iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1f92ab2d iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x21be7377 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x22bbfc0f iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x23c86594 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2621f3e2 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2af810dc iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2bd5c5d3 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2bd88b4e iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2e11d177 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x339dfe96 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x35632b15 iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x361efb39 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x37a03fbb iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x381ba08d iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x393e0005 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3a91fa5c iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3b17cefc iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d55277b iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d57ff5a iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3f6972b9 iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x40e72b05 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x40edfb49 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42a9a103 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42ad3218 iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x44b20ce9 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4563bff5 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4689beb9 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46f2003f iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x48c7f21e iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4b94e380 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4be955f2 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4c923f97 iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f0e66a6 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f7dbc54 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52c7b307 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x559df6aa iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x582561e1 iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x58c695a6 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5c529503 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5cdb965d iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6206a010 iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62161548 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x65a12380 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x69199a63 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x696b18d7 iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6b84a962 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6f099992 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6faccfdb iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x701fc417 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78da0b42 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x794a7a2c iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7a23bac2 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7bcfcaaf iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7bd876ee iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x81c3dfab iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x83826670 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x870c5717 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a1fd635 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8dbe7fb0 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8e87daaf iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8eefe2e2 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x90e36a87 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x955f276b iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x972f824a iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x98154c5b iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99db4e9c iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9af0541d iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9b7d3c30 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9bad3ee4 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa0d76a3b iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa118b3e5 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa4005808 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa4b8c158 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa936407d iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xac0a21d4 iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaff183db iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb2c52c5b iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb42979fb iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb56fa4e2 iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb58054ba iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb706af8f iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbbbab8ac iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc2207f9a iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc3362a7a iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc68ec96a iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7b8d445 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7d5e20b iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc8ac090c iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc9fc6bbb iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcb7682f6 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcfab91b8 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd4d968c7 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd5cb7643 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd6cd1b65 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd740d2cb iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd8a9c733 iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd706c74 iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde349daf iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde3ad1d2 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde69f302 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe3102303 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe371c70d iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe423b59e iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe43c0807 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe4a4ab4f iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7749a19 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xec64b5fb iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xefedeaf8 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf1a41ad3 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf49f3f93 iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf53c9dc1 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf91f9161 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfe5e67a4 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfef0d458 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfeff28e7 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfffd73d9 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4a466c26 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x5b5d4f75 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x810990be orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xb290c2eb alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe1a12b8d orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xe9e62b03 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf8151b9d orinoco_up +EXPORT_SYMBOL drivers/parport/parport 0x1541a1d6 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x1ad9fdcf parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x26a59e71 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x26bf3e72 parport_write +EXPORT_SYMBOL drivers/parport/parport 0x2a715e38 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x2bf8a525 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x3d34f4fb parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x3e642caf parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x4716f12c parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x5177f998 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x5800af76 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x66c05262 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x6b349104 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x823c3db9 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x833966d1 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x8622c324 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x930b9055 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x9d56ca45 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xa45b68a9 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0xa5653084 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0xb87f576a parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0xbef68892 parport_read +EXPORT_SYMBOL drivers/parport/parport 0xc00967c3 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0xc26aa081 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0xc7eb2ede parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0xcb3fee97 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xea70cdae parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0xf4da8b82 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0xf4e02b32 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0xf5192800 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport_pc 0xbc598178 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xc12843aa parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2abc91b7 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2c84949a pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4415ebd0 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4549b7d5 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4e8970e8 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x811b91a1 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x923295aa pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xaffcecc8 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb5d168bb pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc94b5f2d pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xcf36d8ab pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xdce004e7 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe595b2c7 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xede7ee2e pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xfc36db96 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x0475c6f4 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x213b7eca pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x22b40375 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2bf1c060 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x333f2b58 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x35b9e535 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4fd3d9bf pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x55c2bc35 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x59d1700f pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x59dbc2e6 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5c2ad831 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6333f728 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x69c11b9c pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x73bcbea0 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x777695bd pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7eb90fbb pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x80ad1b6f pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x85bf4593 pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8f40bdb8 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x96be66d8 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9e56de89 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xabfa7dd0 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb47d3899 pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb7346e88 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc84dadc8 pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcd20d22d pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd9003eb9 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdff4ed54 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe3c2720c pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe4b01269 pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe870343c pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xec8c6404 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf3c63e39 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x69352f97 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x7f338474 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/sbus/char/bbc 0x0a53e192 bbc_i2c_detach +EXPORT_SYMBOL drivers/sbus/char/bbc 0x38f8b2cc bbc_i2c_writeb +EXPORT_SYMBOL drivers/sbus/char/bbc 0x3be2b0cc bbc_i2c_readb +EXPORT_SYMBOL drivers/sbus/char/bbc 0x3eabd03c bbc_i2c_attach +EXPORT_SYMBOL drivers/sbus/char/bbc 0x64061e2c bbc_i2c_getdev +EXPORT_SYMBOL drivers/sbus/char/bbc 0xa13556e3 bbc_i2c_read_buf +EXPORT_SYMBOL drivers/sbus/char/bbc 0xffbdab11 bbc_i2c_write_buf +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x09928237 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x658a76c9 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x74219d6b scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x9eb52fae scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/esp_scsi 0xe01c68f8 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x290e8001 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x2f336d8d fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x5d2f8cc9 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x89a401cc fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9dff5680 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xb356a1eb fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xf38fabf8 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x12ed8543 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x199d4e65 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1ce24ff0 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x223c0fb9 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x24009b82 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x24895226 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2686e702 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2e322d52 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4323dfd5 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4bd21a6a fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4c647cb9 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4da13e48 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5a11c385 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5a2c55fb fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6a177e08 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6b9759a4 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6cb29645 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6f31ac10 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x71b15e0c fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x729e0340 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x753df010 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b05cbd6 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x84a28fcd fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x86cca481 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8748bd5f fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9dc6e3aa fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa20857f2 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa4ada209 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa75f960a fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa868d038 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac238a7a fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb70284e7 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb807f488 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb8376ffc fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xba76f304 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbeaa71b8 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc1935d05 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6369602 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe17e2517 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe23773dc fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe2683af4 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xee445814 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x8964553e mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x04c2d078 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0d247168 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x10a403a0 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1773ee77 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x18b1b80c osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x28a28de9 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x29f62f27 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2c86bad4 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2dfdcb31 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3f8394b7 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4615fd3d osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x61969e85 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6289a28a osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x69908e07 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6abd84a4 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x70559d48 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7abea960 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x91b3d33d osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x98d1de3d osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x99cfbfe0 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9dbd0ce5 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa636d631 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa7db44aa osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa847d003 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbcab799a osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbd76472f osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd7868e13 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe713caf8 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf881f8e8 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfb56c23a osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfd2ef095 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfeeb1334 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/osd 0x560b7b16 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x77d93b4a osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0xb18ac8fd osduld_put_device +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x0b99767a qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x33ff3d1d qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x55de4521 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x67a47b06 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe0459fc5 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe4ed5c09 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x31ed86c7 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x9a70fa73 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0xf8536d8c raid_class_attach +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x007fc58b scsi_is_host_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x013fce69 scsi_report_device_reset +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x057ff7eb scsi_host_set_state +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x073fbcf1 scsi_device_set_state +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0847cdca scsi_nonblockable_ioctl +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0921cd28 scsi_register_interface +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0e779a45 scsi_allocate_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0f04ee92 __starget_for_each_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1911c7f1 scsi_target_quiesce +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1a325245 scsi_put_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1af185e5 scsi_prep_fn +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x23a15871 scsi_dma_map +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x25bbd277 scsi_bios_ptable +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2b34beee scsi_is_target_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2d972b0d scsi_add_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3152c461 scsi_rescan_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x382c86b5 scsi_get_host_dev +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3aac49f6 scsi_register +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3dcdd776 scsi_finish_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3f22e7cb scsi_host_put +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x453ce34c scsi_block_when_processing_errors +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4bddd8a2 __scsi_alloc_queue +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4e2a3274 scsi_calculate_bounce_limit +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4e4c5f9c scsi_remove_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4ec4b8a8 scsi_report_bus_reset +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4f4c634d scsi_print_result +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x58a79254 scsi_device_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x58c90a62 scsi_unregister +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x58e27698 scsi_target_resume +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x59886341 scsi_execute +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x5c63bc78 scsi_command_normalize_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x61e0e806 scsi_host_alloc +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x629c5713 scsi_device_lookup_by_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x65adb434 scsi_prep_state_check +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x6ab25258 scsi_execute_req +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x6ad4c06c scsi_get_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x6de79fdc scsi_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x6fbd6e28 scsi_adjust_queue_depth +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x727d59d3 __scsi_iterate_devices +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x72c7652f __scsi_put_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x76e84aa6 scsi_device_put +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7abb4a9d scsi_reset_provider +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7d0dbc4c scsi_eh_finish_cmd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7eec3108 scsi_dma_unmap +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x83812fcf scsi_mode_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x95889474 scsi_block_requests +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x98da4267 scsi_print_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9c1b86bc scsi_host_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9f45c603 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa02a5cea scsi_print_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa175fdf4 scsi_eh_prep_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa42a2fa4 scsi_scan_host +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa57a9ce3 scsi_scan_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa8601b42 scsi_free_host_dev +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa91d0fd9 scsi_free_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa99d552e scsi_setup_fs_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xac49b931 __scsi_device_lookup_by_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb8a7d5de __scsi_device_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb9192805 scsi_device_quiesce +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb9ed3fb2 scsi_remove_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xbb404e35 scsi_init_io +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc0e0e93d scsi_set_medium_removal +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc3398a31 scsi_prep_return +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc6c6138b scsi_host_get +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xcb135854 __scsi_add_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xcedf379f scsi_track_queue_full +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd13d2a98 scsi_release_buffers +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd3f5b2d6 starget_for_each_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe1731f3c scsicam_bios_param +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xea10212a int_to_scsilun +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xefab59cc scsi_ioctl +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf17936b6 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf1ec4d16 scsi_register_driver +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf1fd064a scsi_add_host_with_dma +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf419ecdd scsi_eh_restore_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf5429850 scsi_is_sdev_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf5e77f32 scsi_test_unit_ready +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf65145ae scsi_get_device_flags_keyed +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf9775825 scsi_device_get +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf9829aab scsi_device_resume +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfb96d15d scsi_unblock_requests +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfbaa41e3 scsi_kmap_atomic_sg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0ffda894 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1debb1bd fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x54681018 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa33fd2f8 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xbcd7df7d fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xde5b1b2c fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xdf6f9a5a fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xdf7143aa fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xdfb401f0 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe2e65685 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xeaa28952 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xeb8a1feb fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x15869c7a scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x25b3798a sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2ce8c103 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3eba9a70 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x52595b1e sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x57527288 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5c1e52ba scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5f08b632 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6bee690d sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6c8fe32e sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x82ec7c98 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8aa63ec0 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8cd8abd6 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9ed651fe sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa28adf88 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa2900e3c sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xaf0f17e9 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb2eb64a0 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xbac23050 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xbc09fbb3 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcc5ab4e1 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcd1131e5 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd381bf36 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd95e40d2 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf1eb42ee scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf945022d sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x4744f223 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x5b6d74ba spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x60176a12 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x68c31880 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xc231b0f7 spi_release_transport +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/8250 0xde2c2840 serial8250_register_port +EXPORT_SYMBOL drivers/ssb/ssb 0x0a1af105 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x1d72b786 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x22c228c5 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x230a6c09 ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x37942fe7 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x3a3fa009 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x46e1b25b ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x5000ed1a ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x504cfb3b ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x5ebdd619 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x5f5cecfa ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x72e721f3 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x886f595a ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x98eb1f0a ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0xa2e095f9 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0xa3d4e81b ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xb9c712b3 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xbc7383bf ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc0bc5a2e ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xefe97d67 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xf8d5204f __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xfbd918b4 ssb_set_devtypedata +EXPORT_SYMBOL drivers/telephony/ixj 0x0ac9ffe9 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x4364d81f phone_register_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xfcbfde65 phone_unregister_device +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x3ad2c8c8 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x07ffa8ef usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xfea0065d usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x2a2dd813 lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0xfb00ed98 lcd_device_register +EXPORT_SYMBOL drivers/video/display/display 0xc3c8e7ff display_device_register +EXPORT_SYMBOL drivers/video/display/display 0xfd0ff3c2 display_device_unregister +EXPORT_SYMBOL drivers/video/output 0x2cafc35a video_output_register +EXPORT_SYMBOL drivers/video/output 0x327e8b32 video_output_unregister +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x116fb9a4 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x42366859 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x71f5c88e svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xc7e6b43b svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0xd1c43fe0 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xd7a12143 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/svgalib 0xf2a00ac8 svga_tileblit +EXPORT_SYMBOL drivers/video/syscopyarea 0xd8ba5e58 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xa5cd27c6 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x62a9eb32 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x0d747eb1 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0xf0c8ec4f w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x0b32bd5a w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x8ac6e380 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xdf0416bc w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xe2f43e92 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/wire 0x1cb5b7da w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x75e1d4ce w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xaeed75ba w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0xcd101760 w1_remove_master_device +EXPORT_SYMBOL fs/configfs/configfs 0x30d38db4 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x39eb1fc2 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x3c5c8f6f config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x5c0397c8 configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x5ebc1c2e config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x6e3a30e6 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x75ae754d config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0xa37cab97 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xc40aecc7 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xcb06e22e config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xd840846e configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xe279a668 config_item_put +EXPORT_SYMBOL fs/fscache/fscache 0x047edeb5 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x08890c63 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x1b099920 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0x236c5fe0 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x29bb85aa __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x2e2e0b84 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x32638c30 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x37f802f1 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x39218152 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x4804bb67 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x4fa0d300 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x67ac7285 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x7caefeb8 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x82f53aee fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x994663a0 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x9a9cb65b fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xa3748a47 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xb9d5bb72 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0xbd072738 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xc47b8e54 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0xc602d1e9 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xe304bdaf __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0xe4bb8935 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xe8e34a99 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xed141241 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xf1349451 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0xfd220837 fscache_object_lookup_negative +EXPORT_SYMBOL fs/nfsd/nfsd 0x1f573533 nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x96ce9bb4 nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0xdb389aec nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/quota/quota_tree 0x4cd94d39 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x4d421706 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x67d50c3f qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xae549617 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xce744f78 qtree_write_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-t10dif 0x782acba5 crc_t10dif +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8022 0xd4757912 register_8022_client +EXPORT_SYMBOL net/802/p8022 0xd57ebd46 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x3053b409 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xd77b340f make_8023_client +EXPORT_SYMBOL net/802/psnap 0xa28abbac register_snap_client +EXPORT_SYMBOL net/802/psnap 0xcb0ffaf8 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x0212b365 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x034b430c p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x25d36b70 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x270b8b0d p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x2b0d17ba p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x37e76543 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x38020c73 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x3a2abad6 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x3dc1b9c2 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x42459f0e p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x43be2b48 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x469af2d2 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x4b13b7f5 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x5e898ad8 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x72ba1eca p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x72fc195f p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x7c28b370 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x81a1c8d9 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x8ac929e6 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xa688d0d8 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xb1968e77 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xb20e1316 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xcc79684d p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xf4181eee p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0xfa89b649 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0xfb98d43a p9_client_stat +EXPORT_SYMBOL net/appletalk/appletalk 0x0291d5d2 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x3453dfef atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0x6c62b946 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x92eba6da alloc_ltalkdev +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x1e0dfcf0 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x2c19985c register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x4c259dc8 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x50893a65 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x526ce9f3 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x542cd9b8 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x5d70be8d vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x853af833 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x98d21abd atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xa053f328 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xcc95b4f5 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xe8356a3e atm_charge +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/bridge/bridge 0x7e79de3f br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x0e6b8ef1 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xacdfb394 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xc42e1c4a ebt_register_table +EXPORT_SYMBOL net/can/can 0x0f756e44 can_send +EXPORT_SYMBOL net/can/can 0x959a345d can_rx_register +EXPORT_SYMBOL net/can/can 0xd029bb9a can_rx_unregister +EXPORT_SYMBOL net/can/can 0xe5364b60 can_proto_register +EXPORT_SYMBOL net/can/can 0xfc962d23 can_proto_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x22c1be01 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x2c17a0af ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x74ad391a ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x8b0854cf ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x9426230d ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x9dbe29dc ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xa6c7de1f ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x148de610 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0x1a6f6421 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0x62db7620 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0xbee2f94e wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0xd696d2db wpan_phy_free +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x3231459f arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x36d7f27e arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xa7df5f12 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x0829bba3 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x6b626e19 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xfd077333 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2fcc859b nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x394f76e6 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x3e551e62 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x67947de4 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x7b18f051 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xabc19938 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xc4820212 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0xa32fa727 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0xe971a229 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv6/ipv6 0x05934c1a xfrm6_rcv +EXPORT_SYMBOL net/ipv6/ipv6 0x069687ce xfrm6_find_1stfragopt +EXPORT_SYMBOL net/ipv6/ipv6 0x07b6b309 inet6_add_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x09299655 icmpv6_send +EXPORT_SYMBOL net/ipv6/ipv6 0x094ca102 ipv6_chk_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL net/ipv6/ipv6 0x0b2ac3bd ipv6_dev_get_saddr +EXPORT_SYMBOL net/ipv6/ipv6 0x130b2515 compat_ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x17d1fb97 ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x19fd52cb in6_dev_finish_destroy +EXPORT_SYMBOL net/ipv6/ipv6 0x1ee2826b ndisc_send_skb +EXPORT_SYMBOL net/ipv6/ipv6 0x236dadd7 ip6_xmit +EXPORT_SYMBOL net/ipv6/ipv6 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0x45a9b91b ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x473ea46d ipv6_chk_prefix +EXPORT_SYMBOL net/ipv6/ipv6 0x4c726acb inet6_register_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x4e3a38b2 ip6_route_me_harder +EXPORT_SYMBOL net/ipv6/ipv6 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0x54afbd8b ndisc_build_skb +EXPORT_SYMBOL net/ipv6/ipv6 0x690b1c43 ndisc_mc_map +EXPORT_SYMBOL net/ipv6/ipv6 0x6a3121ff inet6_getname +EXPORT_SYMBOL net/ipv6/ipv6 0x7e250a9a rt6_lookup +EXPORT_SYMBOL net/ipv6/ipv6 0x83b7fce7 inet6_bind +EXPORT_SYMBOL net/ipv6/ipv6 0x90e5c534 ip6_frag_init +EXPORT_SYMBOL net/ipv6/ipv6 0x99b95e66 ip6_frag_match +EXPORT_SYMBOL net/ipv6/ipv6 0x9e496e1e ipv6_push_nfrag_opts +EXPORT_SYMBOL net/ipv6/ipv6 0xa19970c5 xfrm6_rcv_spi +EXPORT_SYMBOL net/ipv6/ipv6 0xa80e7823 xfrm6_prepare_output +EXPORT_SYMBOL net/ipv6/ipv6 0xa810fab3 inet6_del_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0xae3b6ebd nf_ip6_checksum +EXPORT_SYMBOL net/ipv6/ipv6 0xafdc9ac4 inet6_release +EXPORT_SYMBOL net/ipv6/ipv6 0xbe20ed4d inet6_unregister_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0xc9cbca7a compat_ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0xda996a80 inet6_ioctl +EXPORT_SYMBOL net/ipv6/ipv6 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL net/ipv6/ipv6 0xe91c336d ip6_route_output +EXPORT_SYMBOL net/ipv6/ipv6 0xed057ef2 xfrm6_input_addr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x0ac2067e ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x274ff800 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb0d676f1 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xbd0805f6 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/tunnel6 0xa7e9d797 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0xa9b3d11a xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/llc/llc 0x38b92846 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x5231e41b llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x5278ba35 llc_set_station_handler +EXPORT_SYMBOL net/llc/llc 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x5301dc94 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x5f69c2db llc_sap_list_lock +EXPORT_SYMBOL net/llc/llc 0xb8fc1f85 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0xbbf9210c llc_sap_find +EXPORT_SYMBOL net/llc/llc 0xd59ba99f llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0xee2bc97f llc_sap_close +EXPORT_SYMBOL net/mac80211/mac80211 0x0050465f ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x142b04c3 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x14a316ea ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x1516a826 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x20465ee0 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x237ea969 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x23b8c94b ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x275143c5 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x2d915f8c ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x37a42471 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x3c8d9ef0 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x3e60256f ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x42aaeed1 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x56a92016 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x5d6e9284 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x5de1ff62 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x603dd80d ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x664ebb8e ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x6c70007d ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x6e6ef9ef ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x75aeedd4 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x78dc5e58 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x7df2580c ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x8913d048 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x9266bce0 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x948fa94c ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x98ba53e3 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xbcd15cd3 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xbe96ec13 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xc109a071 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xc8391607 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xcad1241f ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0xcda4460c ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xdd70488a rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xde6f6cc8 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xe67fc076 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xe84a6376 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xee48b274 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0xf4b4f13e wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xf6c76dd2 ieee80211_restart_hw +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x10f63608 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x2b6c4644 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4bd3d82d ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x702cc37b ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x7908e9ee unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x7bf77075 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x7f820771 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x97f69033 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xad87cdbb unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xc107fd45 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xc2863db3 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x0493df96 __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x32f3eeee __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0xb226e257 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x0bb988cd xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x1d18b791 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x4f13a529 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x56ce7bf3 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x8b9fb701 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcc05c394 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xd28c6f37 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xdbfb92ae xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xed5a8079 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xef6ee361 xt_unregister_target +EXPORT_SYMBOL net/phonet/phonet 0x2ab0a016 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x31d69bbe pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x4215779b pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x5d018e59 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x6fbc2574 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xbb9052b6 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0xd1e424e9 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xf5979a08 pn_sock_unhash +EXPORT_SYMBOL net/rfkill/rfkill 0x48d479f2 rfkill_set_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x54071a6e rfkill_set_states +EXPORT_SYMBOL net/rfkill/rfkill 0x5b146ade rfkill_pause_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x5f632619 rfkill_destroy +EXPORT_SYMBOL net/rfkill/rfkill 0x65ea84d9 rfkill_resume_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x6dee997a rfkill_set_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x71ea94a0 rfkill_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0xa145108e rfkill_get_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0xc55308d6 rfkill_set_hw_state +EXPORT_SYMBOL net/rfkill/rfkill 0xdda111aa rfkill_blocked +EXPORT_SYMBOL net/rfkill/rfkill 0xe0df96aa rfkill_init_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0xeef99704 rfkill_register +EXPORT_SYMBOL net/rfkill/rfkill 0xf0a77a97 rfkill_alloc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2a434f72 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x45599144 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x66b063e6 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x90beff45 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x92ab847f rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9da2d7c6 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa0d28ce9 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa4e05601 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc4efe819 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc884b62d rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xca4f63ed rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xcadb26e0 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xd1a3d2ab rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf91780fc rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfb49f46c rxrpc_kernel_begin_call +EXPORT_SYMBOL net/sunrpc/sunrpc 0x09465534 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x01f3ae36 tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x317d2d84 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x4348b1af tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x4a6f5c5c tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x5cdb5725 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x64a75f58 tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0x78687faa tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x7b001532 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9092642e tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xaf37f87d tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xc25bcd26 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xd81f72e4 tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xfe6cd81d tipc_forward_buf2port +EXPORT_SYMBOL net/wimax/wimax 0x9b97d03e wimax_rfkill +EXPORT_SYMBOL net/wimax/wimax 0xc73981e1 wimax_reset +EXPORT_SYMBOL net/wireless/cfg80211 0x0193201c wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x01ebbd46 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x021b226d cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x03e973ad wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0a2bce5c cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x1408bc4c cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x1610ffba cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x18f07f97 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x27b9ce8a __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x2e6c4805 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x44565f9d cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x4a0266b1 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x4bff3544 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x4d5a13aa cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x567b6595 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x62ea3c1a cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18ef0 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x8002f454 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x96d30fa5 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x9ab2cb29 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x9cff8db5 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xa187508d cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa237bf85 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0xa5f88763 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xa761f087 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0xadc395df cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xae449ebd ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xb057898e cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc5d0bdc1 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xcb1af21c wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xd0a05dac cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xd9c33f15 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xe3b1ecb2 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xee64b5c0 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xf078bebd wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0xf2df8b39 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x327d0155 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x36b754cb lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x40b026ee lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x88b6788f lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x8e9db14f lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0x94f60a28 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xbe1d4495 lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xde578f80 lib80211_crypt_deinit_entries +EXPORT_SYMBOL sound/ac97_bus 0xcb9f3efd ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0xb2efe41e snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3b00034c snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0xa5909198 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xdff1cd5a snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe1a46eab snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x56f7c2ea snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xa358e3fb snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x22b99667 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x42a6fdda snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x48f7eed6 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x521cf955 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x81942dc7 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8c05c55e snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xd7f93dcb snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xed92fb9a snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x3e12732a snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x097fbe9f snd_component_add +EXPORT_SYMBOL sound/core/snd 0x0a88c7cb snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x14d72cef snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1ab1fdb8 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x1dfe995d snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x25292b9c snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x27a5bc51 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x2cfbd1a9 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x33988c9b snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x3446396a snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x3742bd17 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x437ee0b4 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x45691f40 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x532982c9 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x56fafa91 snd_cards +EXPORT_SYMBOL sound/core/snd 0x5bac6673 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x609ba204 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x6182333b snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x63070084 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x67a7eda9 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x740b8941 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x7ad9aef7 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x7dbf3ca9 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x89454d40 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8e2b05ec snd_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x93945163 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x97658b20 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x99ec902b snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x9cc4c1a9 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x9de7c395 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa65f375c snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xa8343caf snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbaf7953b snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xbb066025 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0xbf9a0c9b snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0xc6dfc944 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0xc8218136 snd_card_register +EXPORT_SYMBOL sound/core/snd 0xd7134ac9 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0xd85a0927 snd_device_new +EXPORT_SYMBOL sound/core/snd 0xdbd82618 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xe6427d51 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0xf0132724 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xf9f6231c snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0xfe489ecf snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0xfeb0ddf4 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xff67eb82 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd-hwdep 0x18d6f6b7 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x551c13dc snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x5627cd0a snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xa4eead06 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xf5643f9f snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xfd2f05d3 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0b54a200 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x0e58a5db snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x1364aad1 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x19e077b2 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x2159dec1 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x22dc8024 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x46ba6fbd snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x49e78238 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5a40149b snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x67b5381b snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6df90200 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x6e6ab1b4 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x708b68cd snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x72b38b6e snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x793d4355 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x7a782aa0 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x88e01f04 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x9315daa8 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x99d3be30 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x9df15bae snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xa5520502 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa9c688c3 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0xb47e2d3d snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xc58d5e84 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xc5ed0f85 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0xc73f15cc snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xc74f3167 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd83883d7 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xd8cd30ce snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xdd7af9cc snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xf0255427 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0xf067a8e7 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf646faac snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0xfbfa78a6 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xffa365fc snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0dddc5e7 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x18e3aef7 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2407951c snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x3fa50e06 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4a03429e snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6419afb3 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7f96d07d snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x812fb79c snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x83e374e1 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8e461e21 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x90b2a7ab snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb1d55a27 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb590f13b snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb8554c8b snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0xde1c1349 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdf8fbb92 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xfeb48be3 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-timer 0x04a664c5 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x08fdedd3 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x1866f95a snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x1e729b93 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x267ab887 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x2abaa581 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x4033b5d0 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x6b6830d0 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x6d9216d8 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x6db19b27 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x7022f8b8 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xc06f46a9 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xf516bbf6 snd_timer_continue +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x11953eb5 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x04a9bf88 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x13e8533d snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x1d538c1d snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3920c365 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x59511519 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x8e1691ca snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xaa1c4a62 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xac2654c9 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xc1f0d80a snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x28e1089b snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x61da7f8a snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x6c519133 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x6ed73c8e snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xa550fc78 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb285dbc7 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb3e12fea snd_vx_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x20d66ac2 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x3a517890 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x8020064b snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xc91bd372 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xced3059a snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xf3dc6622 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2964bff2 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x7135866a snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x736f92cc snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x82c029d0 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xadc0048d snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xdde5cd70 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x5e28d86d snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x716aec32 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xc62e5da4 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xf9927fd7 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x2a47a26b snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x99ccd925 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x1d45ad18 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xc6a25d99 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x4c2e4610 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x83fd49ea snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x9885d440 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xa6db4806 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xc77f77f4 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1b02317c snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1c4eb9f9 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x5c3124da snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xc9c32deb snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xd1917aa5 snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xd8712031 snd_i2c_device_free +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x10002e88 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1523279d snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5b4337be snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x69e20763 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7473579f snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8444b42f snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8df4473d snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x962468f3 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa9eb753f snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd0cb863c snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe15228ec snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe83edb96 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf15e347f snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf66a68e4 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xfe7beadf snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x30f8cf09 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x31ff8271 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x63b271db snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x6d190bb1 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9720d0cc snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xad92f726 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xce7f1537 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xe0564417 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xfcb82c30 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x5769076c snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x85ffbc52 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xc6ebee32 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xfef11da4 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x09095c0e snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x2540dc54 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x58ef5c58 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x7de64119 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x90faa831 snd_trident_stop_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x39499065 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x2222996e register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x5245d76d register_sound_special +EXPORT_SYMBOL sound/soundcore 0x75e26b90 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xac3a98b3 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xafc314c6 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xd5c83dcc sound_class +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x2f767d69 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x401d8ba1 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x937c0ee1 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xae908a53 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xbab3b4d4 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xd8659b85 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/snd-util-mem 0x3548c899 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x487e0451 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x4915bd6f snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x647c4652 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x7c153647 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x8dcc4282 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb27df456 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xe6bfb8b1 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xe47ae9c3 snd_usb_create_midi_interface +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x000d8302 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00134d55 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x0013fc44 phy_device_register +EXPORT_SYMBOL vmlinux 0x00192fb9 km_query +EXPORT_SYMBOL vmlinux 0x001d2b5c serio_unregister_port +EXPORT_SYMBOL vmlinux 0x004fc81e kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x0085043f ilookup +EXPORT_SYMBOL vmlinux 0x00905e42 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00e327b4 dst_discard +EXPORT_SYMBOL vmlinux 0x00e48456 journal_create +EXPORT_SYMBOL vmlinux 0x00ebf1ea inode_init_always +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x01331c8f journal_force_commit +EXPORT_SYMBOL vmlinux 0x01777ecd drm_crtc_init +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x0195a0c3 generic_setlease +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01ab0f38 dev_base_lock +EXPORT_SYMBOL vmlinux 0x01ae069d do_splice_to +EXPORT_SYMBOL vmlinux 0x01bdc9cb wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x01d164e8 pipe_to_file +EXPORT_SYMBOL vmlinux 0x01d711de __up_write +EXPORT_SYMBOL vmlinux 0x01f67911 ___copy_in_user +EXPORT_SYMBOL vmlinux 0x02086cb8 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x020e356f drm_master_get +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x026514a9 skb_recycle_check +EXPORT_SYMBOL vmlinux 0x0299afac elv_queue_empty +EXPORT_SYMBOL vmlinux 0x029bd176 sk_wait_data +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02c73786 remove_inode_hash +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02d92855 take_over_console +EXPORT_SYMBOL vmlinux 0x02f7dd19 ll_rw_block +EXPORT_SYMBOL vmlinux 0x02fb211a prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x0308bca5 genphy_config_advert +EXPORT_SYMBOL vmlinux 0x030a9f2b phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x031ee678 xor_niagara_2 +EXPORT_SYMBOL vmlinux 0x031fb566 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x031fd3fb init_file +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x0344df37 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x037f82d4 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x03b92598 _spin_lock +EXPORT_SYMBOL vmlinux 0x03be9c3f uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03ea9cf3 sun4v_hvapi_get +EXPORT_SYMBOL vmlinux 0x03f59327 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x040660e2 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0x0413bd12 drm_mode_object_find +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x042b07a7 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x042d903a jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x04453a1f sock_no_listen +EXPORT_SYMBOL vmlinux 0x044c5189 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x046ee767 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x04740cb7 dev_addr_add +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04927208 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x04b80fb7 lock_may_read +EXPORT_SYMBOL vmlinux 0x04be3bbd netdev_state_change +EXPORT_SYMBOL vmlinux 0x04ccc683 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x04e46bdb up_read +EXPORT_SYMBOL vmlinux 0x04e8a19e names_cachep +EXPORT_SYMBOL vmlinux 0x04f0af6f of_phy_connect_fixed_link +EXPORT_SYMBOL vmlinux 0x050c51c9 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x0516d4c5 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x05186ca4 flush_icache_range +EXPORT_SYMBOL vmlinux 0x05219510 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x0543a033 sbusfb_compat_ioctl +EXPORT_SYMBOL vmlinux 0x0560fd8f atomic_sub_ret +EXPORT_SYMBOL vmlinux 0x05784336 vga_get +EXPORT_SYMBOL vmlinux 0x057e6488 of_console_device +EXPORT_SYMBOL vmlinux 0x0597a24c generic_readlink +EXPORT_SYMBOL vmlinux 0x05ba82ba genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x05bf9165 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x060484e6 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x060c840b cfb_fillrect +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x064e8630 sbusfb_fill_var +EXPORT_SYMBOL vmlinux 0x065e8a2e profile_pc +EXPORT_SYMBOL vmlinux 0x065eca2f tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06bda363 vfs_write +EXPORT_SYMBOL vmlinux 0x06f13797 put_tty_driver +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x07118f6d i2c_use_client +EXPORT_SYMBOL vmlinux 0x0716b627 init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x0731e862 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x078b907c nla_append +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x079ebaa3 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x07a76e54 new_inode +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07decdff n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x07e79f81 vfs_writev +EXPORT_SYMBOL vmlinux 0x07fba1bd iput +EXPORT_SYMBOL vmlinux 0x0826b0dc __flush_dcache_range +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x0836695c drm_sman_takedown +EXPORT_SYMBOL vmlinux 0x0842b0b8 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x086ea525 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x08738575 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x087c01bf tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x08a171af dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x08b0cb80 devm_iounmap +EXPORT_SYMBOL vmlinux 0x08b55278 drm_mm_pre_get +EXPORT_SYMBOL vmlinux 0x08ca6270 serio_reconnect +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL vmlinux 0x08eef791 journal_set_features +EXPORT_SYMBOL vmlinux 0x090468e2 d_find_alias +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x09636af6 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x09637a55 seq_open_private +EXPORT_SYMBOL vmlinux 0x09648696 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09cf543e blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09e2f2ba _write_lock_irq +EXPORT_SYMBOL vmlinux 0x0a0e2456 register_quota_format +EXPORT_SYMBOL vmlinux 0x0a13a426 pcibus_to_node +EXPORT_SYMBOL vmlinux 0x0a212c1e register_exec_domain +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a4b76f6 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x0a62de37 atomic64_add_ret +EXPORT_SYMBOL vmlinux 0x0a67ed0d bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x0a82cfd1 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x0a8380e8 input_get_keycode +EXPORT_SYMBOL vmlinux 0x0a9dc9f6 inet_shutdown +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0ae49225 blk_remove_plug +EXPORT_SYMBOL vmlinux 0x0aeafe1a __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b54dd12 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b9b80fb tty_unregister_device +EXPORT_SYMBOL vmlinux 0x0bc58449 dst_destroy +EXPORT_SYMBOL vmlinux 0x0bd1e9b0 do_sync_read +EXPORT_SYMBOL vmlinux 0x0be1420f bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x0bf672d7 journal_clear_err +EXPORT_SYMBOL vmlinux 0x0c0165ff jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x0c532bc2 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x0c9f31d7 pci_enable_device +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0d085f7f flush_signals +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0df27223 seq_release_private +EXPORT_SYMBOL vmlinux 0x0e3c801e dquot_release +EXPORT_SYMBOL vmlinux 0x0e4908b6 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x0e4efd0c inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e713337 sg_init_table +EXPORT_SYMBOL vmlinux 0x0e9d6d23 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x0ea1af0f _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x0eb1dd57 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x0eedfc4c drm_vblank_post_modeset +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f24dc00 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x0f2de3f0 __serio_register_port +EXPORT_SYMBOL vmlinux 0x0f378a1e ___copy_from_user +EXPORT_SYMBOL vmlinux 0x0f41bd8a complete_all +EXPORT_SYMBOL vmlinux 0x0f4e4af7 kill_block_super +EXPORT_SYMBOL vmlinux 0x0f519bc3 unregister_key_type +EXPORT_SYMBOL vmlinux 0x0f56f1d5 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x0f6d8cc4 pci_disable_device +EXPORT_SYMBOL vmlinux 0x0f9c3a95 do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0x0f9d6fb0 generic_write_end +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fe2c555 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x0fe71c69 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x0feef9cd uart_add_one_port +EXPORT_SYMBOL vmlinux 0x10262280 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x104c9060 per_cpu____cpu_data +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10902bf7 insb +EXPORT_SYMBOL vmlinux 0x10e60882 vc_cons +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f8f4e0 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x10f9f6fb __secpath_destroy +EXPORT_SYMBOL vmlinux 0x113c1cda get_phy_device +EXPORT_SYMBOL vmlinux 0x113c8a50 user_path_at +EXPORT_SYMBOL vmlinux 0x113f8eef compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x11760b9a security_inode_permission +EXPORT_SYMBOL vmlinux 0x11793d13 ebus_dma_unregister +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x1197856a disk_stack_limits +EXPORT_SYMBOL vmlinux 0x11a73283 pci_map_sg +EXPORT_SYMBOL vmlinux 0x11b27307 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x11c33da5 elevator_init +EXPORT_SYMBOL vmlinux 0x11e30790 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x11e5ae41 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x11e9a4b0 is_bad_inode +EXPORT_SYMBOL vmlinux 0x11f62090 generic_removexattr +EXPORT_SYMBOL vmlinux 0x11fb42b9 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x12099735 follow_up +EXPORT_SYMBOL vmlinux 0x12293c08 per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0x1235e0ce unregister_nls +EXPORT_SYMBOL vmlinux 0x124bc3b9 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x124f0caf ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x1256ec1c tty_set_operations +EXPORT_SYMBOL vmlinux 0x127a3ac9 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x12889363 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x12b9ef80 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x12bb2452 up +EXPORT_SYMBOL vmlinux 0x12bd5c52 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x12c055f7 unlock_buffer +EXPORT_SYMBOL vmlinux 0x12d09a67 sun4v_hvapi_unregister +EXPORT_SYMBOL vmlinux 0x12ea337e outsb +EXPORT_SYMBOL vmlinux 0x12f31318 _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x12fa73a7 sock_rfree +EXPORT_SYMBOL vmlinux 0x130270b1 down_killable +EXPORT_SYMBOL vmlinux 0x13232619 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x13491591 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x134f21ec netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x138a78d1 set_current_groups +EXPORT_SYMBOL vmlinux 0x1397331f read_dev_sector +EXPORT_SYMBOL vmlinux 0x13a6dfa7 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x13bd62bb bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x13bdcf28 inet_listen +EXPORT_SYMBOL vmlinux 0x13d1b4b2 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x13f7678e inode_change_ok +EXPORT_SYMBOL vmlinux 0x140850dd __ps2_command +EXPORT_SYMBOL vmlinux 0x1423cc12 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x14597e9a xfrm_state_update +EXPORT_SYMBOL vmlinux 0x145eb3b8 posix_test_lock +EXPORT_SYMBOL vmlinux 0x1486f407 vga_put +EXPORT_SYMBOL vmlinux 0x14c5c214 d_rehash +EXPORT_SYMBOL vmlinux 0x14cf91d0 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x14f3a2a4 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x14fbf9a6 pci_get_device +EXPORT_SYMBOL vmlinux 0x15147924 km_state_expired +EXPORT_SYMBOL vmlinux 0x153120f1 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1552998a user_revoke +EXPORT_SYMBOL vmlinux 0x157b7a5c pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x15b4a338 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x15cfb7a3 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x15d0723d splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x15da70c8 input_grab_device +EXPORT_SYMBOL vmlinux 0x15e5e10a bd_set_size +EXPORT_SYMBOL vmlinux 0x15f51155 journal_wipe +EXPORT_SYMBOL vmlinux 0x161605c3 idr_replace +EXPORT_SYMBOL vmlinux 0x1629d2ad tcp_connect +EXPORT_SYMBOL vmlinux 0x162cc522 pipe_lock +EXPORT_SYMBOL vmlinux 0x1630259d pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x1631f745 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x1674ead8 pci_find_device +EXPORT_SYMBOL vmlinux 0x16e8a4b5 __devm_request_region +EXPORT_SYMBOL vmlinux 0x16e8b7e2 get_io_context +EXPORT_SYMBOL vmlinux 0x17018cf0 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x1717597e simple_sync_file +EXPORT_SYMBOL vmlinux 0x171f2457 simple_unlink +EXPORT_SYMBOL vmlinux 0x172ad872 skb_tx_hash +EXPORT_SYMBOL vmlinux 0x17437a01 bdevname +EXPORT_SYMBOL vmlinux 0x1748319b numa_cpumask_lookup_table +EXPORT_SYMBOL vmlinux 0x179a6101 drm_vblank_get +EXPORT_SYMBOL vmlinux 0x17b77631 drm_mode_connector_list_update +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17e9bb51 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x180bfa86 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x1816be9a generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x1859c008 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x1876c9ad kfifo_free +EXPORT_SYMBOL vmlinux 0x1889e167 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18bef9d9 mdesc_node_by_name +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x18fcc643 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x19082a91 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x19365647 drm_gem_object_alloc +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x193a6c68 key_alloc +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1981fca3 seq_putc +EXPORT_SYMBOL vmlinux 0x1982003b sk_release_kernel +EXPORT_SYMBOL vmlinux 0x19874265 drm_connector_property_set_value +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19cdc3ba qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x1a0ac7da vio_ldc_send +EXPORT_SYMBOL vmlinux 0x1a225c20 keyring_clear +EXPORT_SYMBOL vmlinux 0x1a35bcbc VISenter +EXPORT_SYMBOL vmlinux 0x1a531fb1 otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x1a5bd720 journal_errno +EXPORT_SYMBOL vmlinux 0x1a7cbe34 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x1a83fcb4 posix_lock_file +EXPORT_SYMBOL vmlinux 0x1a9887cc inet_addr_type +EXPORT_SYMBOL vmlinux 0x1a9ce6ee sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x1aa759d0 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad9f95a prom_finddevice +EXPORT_SYMBOL vmlinux 0x1af54b74 skb_append +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b16bb03 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x1b56c166 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b725282 lookup_hash +EXPORT_SYMBOL vmlinux 0x1b875ae2 drm_gem_handle_create +EXPORT_SYMBOL vmlinux 0x1b89fc71 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1ba11f45 sleep_on +EXPORT_SYMBOL vmlinux 0x1ba28a37 kfree_skb +EXPORT_SYMBOL vmlinux 0x1ba6c701 register_filesystem +EXPORT_SYMBOL vmlinux 0x1c141998 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c2e576b scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x1c80de9c ip_send_check +EXPORT_SYMBOL vmlinux 0x1c93e4c6 fget +EXPORT_SYMBOL vmlinux 0x1ca2abec drm_poll +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1d43d65f task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x1d72226b inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x1daad0a3 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1df009f3 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x1e005469 kobject_put +EXPORT_SYMBOL vmlinux 0x1e409c4e mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e6ef62a inet_put_port +EXPORT_SYMBOL vmlinux 0x1e6fb3b4 down_write +EXPORT_SYMBOL vmlinux 0x1e7580df skb_put +EXPORT_SYMBOL vmlinux 0x1e7b53da module_layout +EXPORT_SYMBOL vmlinux 0x1e9dd9d1 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x1eab6ac9 of_find_property +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL vmlinux 0x1f10ddc7 of_dev_put +EXPORT_SYMBOL vmlinux 0x1f141be9 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x1f5e7fcf drm_i2c_encoder_destroy +EXPORT_SYMBOL vmlinux 0x1fc64875 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x1fc7945d vio_send_sid +EXPORT_SYMBOL vmlinux 0x1fe13bfd filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x1fe8ee74 drm_encoder_init +EXPORT_SYMBOL vmlinux 0x1fea57f9 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2006594b journal_flush +EXPORT_SYMBOL vmlinux 0x201a7b45 bdput +EXPORT_SYMBOL vmlinux 0x202ff946 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x20357b9c balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x20645642 drm_debug +EXPORT_SYMBOL vmlinux 0x208334c5 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x20a7f0e3 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x20b2c6a9 kick_iocb +EXPORT_SYMBOL vmlinux 0x20b31753 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x20bec75f sock_i_ino +EXPORT_SYMBOL vmlinux 0x20c110f9 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x20dae442 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x20e93e55 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x20ea0b4d ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x20f34a6c slow_work_register_user +EXPORT_SYMBOL vmlinux 0x2123a7fc dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x213f1b1c serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x2142ffce simple_lookup +EXPORT_SYMBOL vmlinux 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL vmlinux 0x21548c34 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x21589a43 netpoll_poll +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21831210 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x22022dee release_sock +EXPORT_SYMBOL vmlinux 0x220f8e12 __register_chrdev +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x223360c4 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x223c7466 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x2255d60d drm_do_probe_ddc_edid +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x227d3e4d simple_statfs +EXPORT_SYMBOL vmlinux 0x227f59b8 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22ada874 drm_sysfs_connector_add +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22ca6516 netif_device_attach +EXPORT_SYMBOL vmlinux 0x22e8d23a dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x230ab4c9 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x2351b150 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x23577023 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x235ef071 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x238b0c5d ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x2394da76 ip_fragment +EXPORT_SYMBOL vmlinux 0x23999beb simple_rename +EXPORT_SYMBOL vmlinux 0x23a24944 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x23b877d6 kthread_create +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x23fe2685 __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x23fe779e pci_get_class +EXPORT_SYMBOL vmlinux 0x2407244e of_dev_get +EXPORT_SYMBOL vmlinux 0x2456bb88 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x245e12d4 drm_sysfs_connector_remove +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x246c6c94 filemap_flush +EXPORT_SYMBOL vmlinux 0x247fbefe drm_mode_connector_update_edid_property +EXPORT_SYMBOL vmlinux 0x2480bc82 vfs_readlink +EXPORT_SYMBOL vmlinux 0x24bd930a outsl +EXPORT_SYMBOL vmlinux 0x24cc272e write_one_page +EXPORT_SYMBOL vmlinux 0x24cdbea0 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x24da504c xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x24f542ce generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x251d0d58 phy_device_free +EXPORT_SYMBOL vmlinux 0x252ec38b mdiobus_write +EXPORT_SYMBOL vmlinux 0x257223a6 skb_queue_head +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25844574 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x258f934f tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x259f996d lock_fb_info +EXPORT_SYMBOL vmlinux 0x25ae5170 kset_unregister +EXPORT_SYMBOL vmlinux 0x25c3dbca prom_nextprop +EXPORT_SYMBOL vmlinux 0x25db74e7 mdesc_node_name +EXPORT_SYMBOL vmlinux 0x25fed63e simple_transaction_get +EXPORT_SYMBOL vmlinux 0x25ffe8e9 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x2601526e tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x2604643c drm_ati_pcigart_cleanup +EXPORT_SYMBOL vmlinux 0x261543bf consume_skb +EXPORT_SYMBOL vmlinux 0x26205bd7 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x263ee19b sg_init_one +EXPORT_SYMBOL vmlinux 0x266769fe wake_up_process +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x268ac9c8 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x2694d140 setup_new_exec +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f37093 revalidate_disk +EXPORT_SYMBOL vmlinux 0x26fb5fa7 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x271cc07f mem_section +EXPORT_SYMBOL vmlinux 0x27346075 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x2737204b devm_ioport_map +EXPORT_SYMBOL vmlinux 0x2740bd2c vfs_follow_link +EXPORT_SYMBOL vmlinux 0x2744d1ed pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x27472e7e drm_lock_take +EXPORT_SYMBOL vmlinux 0x27722afa security_path_symlink +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27928392 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x27b81daa xor_niagara_3 +EXPORT_SYMBOL vmlinux 0x27b8fe45 seq_escape +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27ccec8d drm_i2c_encoder_init +EXPORT_SYMBOL vmlinux 0x27e5720d atomic64_sub +EXPORT_SYMBOL vmlinux 0x27f0615f jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x280dae4e fd_install +EXPORT_SYMBOL vmlinux 0x28273505 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x282f681a generic_block_bmap +EXPORT_SYMBOL vmlinux 0x28379c14 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x28388b20 bio_sector_offset +EXPORT_SYMBOL vmlinux 0x2839e930 blk_peek_request +EXPORT_SYMBOL vmlinux 0x284e3e58 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x28522327 blk_put_request +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x28653d2b neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x288d262b backlight_force_update +EXPORT_SYMBOL vmlinux 0x28a8fd15 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x28a9f3f6 unlock_super +EXPORT_SYMBOL vmlinux 0x28e27922 ida_init +EXPORT_SYMBOL vmlinux 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL vmlinux 0x294e3954 sock_create_lite +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x295ec09b unregister_qdisc +EXPORT_SYMBOL vmlinux 0x2995e159 con_is_bound +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29c26ccf jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x29d532ff blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x29dc4be7 of_console_options +EXPORT_SYMBOL vmlinux 0x29e267e9 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x29f8b22e i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x29ffc013 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x2a472a9a skb_push +EXPORT_SYMBOL vmlinux 0x2a4754c2 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x2b1d7534 blkdev_put +EXPORT_SYMBOL vmlinux 0x2b48b389 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x2b7323d6 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x2b937a6f __ret_efault +EXPORT_SYMBOL vmlinux 0x2b9dfc0f cpu_core_map +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb08977 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x2bb4ce02 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x2bb53d80 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x2bc2383a f_setown +EXPORT_SYMBOL vmlinux 0x2bc98427 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0x2bf8e3db current_fs_time +EXPORT_SYMBOL vmlinux 0x2c7f17ac genphy_read_status +EXPORT_SYMBOL vmlinux 0x2c8172c2 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x2c994ffb skb_checksum_help +EXPORT_SYMBOL vmlinux 0x2ca8920a security_file_permission +EXPORT_SYMBOL vmlinux 0x2cac25be vio_port_up +EXPORT_SYMBOL vmlinux 0x2ccaf28d open_exec +EXPORT_SYMBOL vmlinux 0x2cf06d48 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x2d1430df kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x2d3d1b18 give_up_console +EXPORT_SYMBOL vmlinux 0x2d3f3527 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x2d58d9d5 uart_match_port +EXPORT_SYMBOL vmlinux 0x2d69bb8d tty_register_device +EXPORT_SYMBOL vmlinux 0x2d9c6b80 fb_show_logo +EXPORT_SYMBOL vmlinux 0x2daa7939 xor_vis_4 +EXPORT_SYMBOL vmlinux 0x2dd8ca6a flush_old_exec +EXPORT_SYMBOL vmlinux 0x2de7fc0f kobject_get +EXPORT_SYMBOL vmlinux 0x2e149d27 ida_pre_get +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e313208 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e4a4bdc of_unregister_driver +EXPORT_SYMBOL vmlinux 0x2e87d14b nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x2e9ab245 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL vmlinux 0x2eb6df9b rtnl_unicast +EXPORT_SYMBOL vmlinux 0x2ec78244 tty_kref_put +EXPORT_SYMBOL vmlinux 0x2ed901f4 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x2f36defe proto_register +EXPORT_SYMBOL vmlinux 0x2f52f851 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x2f560bb3 lookup_bdev +EXPORT_SYMBOL vmlinux 0x2f643cfb framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x2f68323d input_unfilter_device +EXPORT_SYMBOL vmlinux 0x2fc17ce3 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x2fc19959 ida_get_new +EXPORT_SYMBOL vmlinux 0x2ff58ff8 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x300b2000 of_find_in_proplist +EXPORT_SYMBOL vmlinux 0x3029b088 map_to_cpu +EXPORT_SYMBOL vmlinux 0x3044b154 bioset_free +EXPORT_SYMBOL vmlinux 0x304a223c pci_iomap +EXPORT_SYMBOL vmlinux 0x3055abe1 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x305afa46 tcp_prot +EXPORT_SYMBOL vmlinux 0x3074f033 drm_order +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x30820bdd idr_get_new_above +EXPORT_SYMBOL vmlinux 0x30893776 sock_no_getname +EXPORT_SYMBOL vmlinux 0x309943a0 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x30a82f02 pci_target_state +EXPORT_SYMBOL vmlinux 0x30ae7db9 d_splice_alias +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x31076cd5 mb_cache_create +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x311fa40e vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x312ba318 rwsem_wake +EXPORT_SYMBOL vmlinux 0x3138eb5c generic_read_dir +EXPORT_SYMBOL vmlinux 0x3143219d xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x31625da6 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x316cf1d6 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x319615dc udp_prot +EXPORT_SYMBOL vmlinux 0x31a2e826 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x31b0cebd neigh_lookup +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31ebadcd in_group_p +EXPORT_SYMBOL vmlinux 0x3230e5b1 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x323cefec copy_from_user_fixup +EXPORT_SYMBOL vmlinux 0x323ddc9f compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x324b417e drm_mode_validate_clocks +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32905468 mempool_create +EXPORT_SYMBOL vmlinux 0x32debb16 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x32fb0033 bio_map_kern +EXPORT_SYMBOL vmlinux 0x330e70e4 sg_free_table +EXPORT_SYMBOL vmlinux 0x33134f61 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x33321a71 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x3348f831 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x33594d98 __breadahead +EXPORT_SYMBOL vmlinux 0x3397c105 drm_ioctl +EXPORT_SYMBOL vmlinux 0x33aad5bf bio_copy_kern +EXPORT_SYMBOL vmlinux 0x33bc7839 dcache_readdir +EXPORT_SYMBOL vmlinux 0x33c0e67c mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x33c9b110 dquot_alloc +EXPORT_SYMBOL vmlinux 0x33e67ea8 get_empty_filp +EXPORT_SYMBOL vmlinux 0x33eab485 napi_complete +EXPORT_SYMBOL vmlinux 0x33f82320 get_phy_id +EXPORT_SYMBOL vmlinux 0x340f4155 backlight_device_register +EXPORT_SYMBOL vmlinux 0x341cbed2 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x34321f6b journal_check_used_features +EXPORT_SYMBOL vmlinux 0x343738ae neigh_seq_next +EXPORT_SYMBOL vmlinux 0x344ad500 __netif_schedule +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34bad07b sock_wake_async +EXPORT_SYMBOL vmlinux 0x34d69ca0 of_match_device +EXPORT_SYMBOL vmlinux 0x34e80b77 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x34fe632e pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x35043838 drm_connector_cleanup +EXPORT_SYMBOL vmlinux 0x3515d632 do_truncate +EXPORT_SYMBOL vmlinux 0x352c0c73 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x35365fc0 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x354b5b3f blk_get_request +EXPORT_SYMBOL vmlinux 0x357c9b75 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x3582ed17 vfs_stat +EXPORT_SYMBOL vmlinux 0x35a03755 blk_run_queue +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35b5f339 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35d84066 ebus_dma_prepare +EXPORT_SYMBOL vmlinux 0x35ea7ae5 locks_init_lock +EXPORT_SYMBOL vmlinux 0x35fdd31f drm_add_edid_modes +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x3630105b dev_disable_lro +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x365cee51 cdev_alloc +EXPORT_SYMBOL vmlinux 0x36792e5c __kfifo_put +EXPORT_SYMBOL vmlinux 0x36812ea7 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x3684f77d __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36887a31 ldc_map_sg +EXPORT_SYMBOL vmlinux 0x368ce31d flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x3695b9bf netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x369ad586 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x36b055fa pci_remove_bus +EXPORT_SYMBOL vmlinux 0x3725c442 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x372dc00d netpoll_setup +EXPORT_SYMBOL vmlinux 0x3742d8d1 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x37471025 __register_binfmt +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x3754ae1f drm_master_put +EXPORT_SYMBOL vmlinux 0x376f791e simple_dir_operations +EXPORT_SYMBOL vmlinux 0x37abb804 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x37bb5cfe nf_log_unregister +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37c21245 log_start_commit +EXPORT_SYMBOL vmlinux 0x37ee2580 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x3817ee2c km_new_mapping +EXPORT_SYMBOL vmlinux 0x381c1523 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x384b15a7 security_inode_readlink +EXPORT_SYMBOL vmlinux 0x38569593 down_read +EXPORT_SYMBOL vmlinux 0x38580fa2 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x385e15f8 neigh_create +EXPORT_SYMBOL vmlinux 0x3864cccb gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x387a3d50 alloc_disk +EXPORT_SYMBOL vmlinux 0x38822f97 copy_user_page +EXPORT_SYMBOL vmlinux 0x3883f0bb bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x3898cbb0 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x38e85450 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x38f8751d del_gendisk +EXPORT_SYMBOL vmlinux 0x38fdfe8d is_container_init +EXPORT_SYMBOL vmlinux 0x392d1683 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x39348081 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x393dc469 drm_core_get_reg_ofs +EXPORT_SYMBOL vmlinux 0x395c541c dev_get_flags +EXPORT_SYMBOL vmlinux 0x396558c0 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x396c29c1 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x3996bc70 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x39d98b88 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x39e14282 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x39fb6602 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a2b697c pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x3a2fdcc1 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x3a7a125d gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x3a7de31a __downgrade_write +EXPORT_SYMBOL vmlinux 0x3a80b72f sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x3a919d40 gen_pool_free +EXPORT_SYMBOL vmlinux 0x3a9a6b21 del_timer_sync +EXPORT_SYMBOL vmlinux 0x3a9aa54d clear_bit +EXPORT_SYMBOL vmlinux 0x3a9b680b iget_locked +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa2fa9e submit_bio +EXPORT_SYMBOL vmlinux 0x3aaaccb1 file_fsync +EXPORT_SYMBOL vmlinux 0x3ab830a3 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x3ab9b993 bio_copy_user +EXPORT_SYMBOL vmlinux 0x3ac205fc tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x3adeca38 netif_device_detach +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3aeb624e vio_ldc_free +EXPORT_SYMBOL vmlinux 0x3b3fe8cb prom_getsibling +EXPORT_SYMBOL vmlinux 0x3b4ef865 poll_freewait +EXPORT_SYMBOL vmlinux 0x3b6d992e dev_driver_string +EXPORT_SYMBOL vmlinux 0x3b866989 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x3bb84b0d drm_mode_config_init +EXPORT_SYMBOL vmlinux 0x3bc49923 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3c077335 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x3c27b9a0 I_BDEV +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c348991 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x3c4b331a drm_mode_attachmode_crtc +EXPORT_SYMBOL vmlinux 0x3c4be98a get_disk +EXPORT_SYMBOL vmlinux 0x3c5a59ba __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cb7761a seq_read +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3cd29da6 drm_mode_create_dirty_info_property +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3ce9939e generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x3cf391f7 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x3d2e3cd6 bioset_create +EXPORT_SYMBOL vmlinux 0x3d34498d generic_file_llseek +EXPORT_SYMBOL vmlinux 0x3d50cd1c xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d80f039 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3d8c2540 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3db4ca57 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL vmlinux 0x3dd90416 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x3df9e76c bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x3e1390df sock_wmalloc +EXPORT_SYMBOL vmlinux 0x3e18439e block_write_full_page +EXPORT_SYMBOL vmlinux 0x3e28e66e vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e4d1b5c tty_check_change +EXPORT_SYMBOL vmlinux 0x3e576fc4 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x3e5df144 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x3e697c87 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x3e6ecdc8 drm_addmap +EXPORT_SYMBOL vmlinux 0x3e7fd442 journal_revoke +EXPORT_SYMBOL vmlinux 0x3e9bc278 path_get +EXPORT_SYMBOL vmlinux 0x3ed59393 unregister_netdevice +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ee01643 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x3ee0bac7 drm_mode_config_cleanup +EXPORT_SYMBOL vmlinux 0x3ee75e03 _read_lock +EXPORT_SYMBOL vmlinux 0x3f080cc7 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x3f2c6db7 kernel_listen +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f4c0213 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x3f5b0ce2 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x3f83b85f input_flush_device +EXPORT_SYMBOL vmlinux 0x3fa03a97 memset +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fc01b8d serio_interrupt +EXPORT_SYMBOL vmlinux 0x3fd4be4e blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x402693e0 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x403720e1 of_find_matching_node +EXPORT_SYMBOL vmlinux 0x40378089 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x403bb415 pci_dev_get +EXPORT_SYMBOL vmlinux 0x403e0d13 sbusfb_ioctl_helper +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x40756ea1 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x4083b2fa of_release_dev +EXPORT_SYMBOL vmlinux 0x40854c58 dev_addr_del +EXPORT_SYMBOL vmlinux 0x408d9902 sk_alloc +EXPORT_SYMBOL vmlinux 0x40d9591c pci_dev_driver +EXPORT_SYMBOL vmlinux 0x40f84b6a of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4176ec0f blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x418f8f4a bdi_unregister +EXPORT_SYMBOL vmlinux 0x41c7d6b6 block_truncate_page +EXPORT_SYMBOL vmlinux 0x41e6027e sk_stop_timer +EXPORT_SYMBOL vmlinux 0x41f33696 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x41f8cfe8 __devm_release_region +EXPORT_SYMBOL vmlinux 0x4202c261 skb_pull +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x421d5906 drm_property_destroy +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x423c4797 dev_load +EXPORT_SYMBOL vmlinux 0x424fd77d unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x426ed8bc pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x42a4bdf2 in_egroup_p +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42ae3d80 deactivate_super +EXPORT_SYMBOL vmlinux 0x42bff809 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x42d78e4f dm_table_event +EXPORT_SYMBOL vmlinux 0x42dccb2d proc_create_data +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x431d4bf5 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43361190 ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x433a04ef write_inode_now +EXPORT_SYMBOL vmlinux 0x433ab4a0 gen_pool_add +EXPORT_SYMBOL vmlinux 0x434e9c51 security_path_mknod +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x4368a858 pci_map_rom +EXPORT_SYMBOL vmlinux 0x43714373 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x437729b9 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x439090b9 kernel_thread +EXPORT_SYMBOL vmlinux 0x43922c3f jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x43a4938f vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43ade838 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x43b0d863 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x43bea045 auxio_register +EXPORT_SYMBOL vmlinux 0x43c28daf drm_property_create +EXPORT_SYMBOL vmlinux 0x43d41baf xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43ff30cd sg_alloc_table +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x443fecb1 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x44420478 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x4445f648 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x444877a4 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x445373d8 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x445c7698 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x447d4184 kobject_add +EXPORT_SYMBOL vmlinux 0x447f7e18 sun4v_niagara2_getperf +EXPORT_SYMBOL vmlinux 0x44834944 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x4488814d blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x448de7cf drm_release +EXPORT_SYMBOL vmlinux 0x44a13374 set_anon_super +EXPORT_SYMBOL vmlinux 0x44b49f2c tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44c2e95b __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x44dd6500 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44ee6d66 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x44f104a6 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x454cbd8e mdesc_release +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x455380fe simple_readpage +EXPORT_SYMBOL vmlinux 0x456fa6ff mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45a2a52a i2c_master_send +EXPORT_SYMBOL vmlinux 0x45b79f43 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x45c4269a blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x45cd7830 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x45dec406 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x4626d852 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x462ec101 vfsmount_lock +EXPORT_SYMBOL vmlinux 0x4650ccfe mark_info_dirty +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x46772118 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x4680bdc1 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x46858a3f soft_cursor +EXPORT_SYMBOL vmlinux 0x4687a4c0 prepare_creds +EXPORT_SYMBOL vmlinux 0x468c03f0 io_remap_pfn_range +EXPORT_SYMBOL vmlinux 0x46920d0b compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x46b986f1 no_llseek +EXPORT_SYMBOL vmlinux 0x46d6697f uart_suspend_port +EXPORT_SYMBOL vmlinux 0x46dba53c blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x46e5ee08 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x46f76540 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x478b7a15 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a114c5 dentry_unhash +EXPORT_SYMBOL vmlinux 0x47a5e97f do_sync_write +EXPORT_SYMBOL vmlinux 0x4824cae9 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x4834f1e6 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x485d17ef alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x4899f8ce drm_mode_duplicate +EXPORT_SYMBOL vmlinux 0x48a7695a dm_table_get_size +EXPORT_SYMBOL vmlinux 0x48bbe0fb __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x48bf47a1 page_put_link +EXPORT_SYMBOL vmlinux 0x48bfa0c6 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x48c1d080 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x48c3ac90 of_mdiobus_register +EXPORT_SYMBOL vmlinux 0x48d45061 __elv_add_request +EXPORT_SYMBOL vmlinux 0x48d94edf skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x490e4323 __kill_fasync +EXPORT_SYMBOL vmlinux 0x49247068 sync_blockdev +EXPORT_SYMBOL vmlinux 0x4941754c __neigh_event_send +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x49478b63 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x494ea3e4 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x4953a00b netif_carrier_off +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x497186d8 __init_rwsem +EXPORT_SYMBOL vmlinux 0x4975f3da journal_restart +EXPORT_SYMBOL vmlinux 0x49a02ef8 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x49c31998 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x49c67a24 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e262b0 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x4a142d5c rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x4a15ae23 prom_node_has_property +EXPORT_SYMBOL vmlinux 0x4a15b839 serio_rescan +EXPORT_SYMBOL vmlinux 0x4a245f51 drm_gem_mmap +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a67b588 skb_over_panic +EXPORT_SYMBOL vmlinux 0x4ab06b4a security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x4ab9382d bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x4acd0d87 ip_defrag +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4ad19d87 blk_init_tags +EXPORT_SYMBOL vmlinux 0x4ae69f89 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x4af117a7 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x4b09894c make_EII_client +EXPORT_SYMBOL vmlinux 0x4b1a60ff input_register_handle +EXPORT_SYMBOL vmlinux 0x4b22967e trap_block +EXPORT_SYMBOL vmlinux 0x4b355190 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x4b57fcd9 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x4b711f1d xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x4b8ac47d node_data +EXPORT_SYMBOL vmlinux 0x4b9e3646 udp_ioctl +EXPORT_SYMBOL vmlinux 0x4bee27ef ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x4c05f15c phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c14ca8f drm_irq_uninstall +EXPORT_SYMBOL vmlinux 0x4c33e9cd drm_rmmap +EXPORT_SYMBOL vmlinux 0x4c4386f1 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4c4f88d7 tcp_poll +EXPORT_SYMBOL vmlinux 0x4c7c8fdf drop_super +EXPORT_SYMBOL vmlinux 0x4ca942d5 kfifo_alloc +EXPORT_SYMBOL vmlinux 0x4cb960b0 bdi_destroy +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cbda2bf prom_setprop +EXPORT_SYMBOL vmlinux 0x4cead68b dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x4d02b154 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x4d0b8333 ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x4d2e7524 drm_put_dev +EXPORT_SYMBOL vmlinux 0x4d41bd10 pci_release_region +EXPORT_SYMBOL vmlinux 0x4d50dab3 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x4d768469 fail_migrate_page +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4de52b86 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4dfa6dea simple_pin_fs +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e0eaed9 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x4e214c13 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e35d8f0 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e880ced pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x4e9dffb5 ip_fast_csum +EXPORT_SYMBOL vmlinux 0x4ea4a286 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x4eb5c223 drm_mm_dump_table +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4ef50a45 vc_resize +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f4582f0 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x4f7d6b44 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x4fa2802d xfrm_register_km +EXPORT_SYMBOL vmlinux 0x4fb8f8ad tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4ff2204d iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x500907bb jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x503b0e23 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x503c0f46 sunserial_register_minors +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x509776a5 vio_validate_sid +EXPORT_SYMBOL vmlinux 0x5099dbe3 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x50b4a2f5 phy_driver_register +EXPORT_SYMBOL vmlinux 0x50b56867 request_firmware +EXPORT_SYMBOL vmlinux 0x50c40557 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x50da30a2 dcache_lock +EXPORT_SYMBOL vmlinux 0x50e8afda skb_pad +EXPORT_SYMBOL vmlinux 0x50f9acb3 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x5100c487 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x5105fd98 drm_open +EXPORT_SYMBOL vmlinux 0x51143b92 inet_bind +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x51254e3d tcp_make_synack +EXPORT_SYMBOL vmlinux 0x515c9b3f sk_receive_skb +EXPORT_SYMBOL vmlinux 0x51705916 journal_destroy +EXPORT_SYMBOL vmlinux 0x51af6dfc netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x51c56b1a end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51e70b88 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52046e13 atomic_sub +EXPORT_SYMBOL vmlinux 0x521bc999 find_lock_page +EXPORT_SYMBOL vmlinux 0x522693ef sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x522f0db1 bio_kmalloc +EXPORT_SYMBOL vmlinux 0x52337272 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x524b8bfa truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x5251cae4 prom_getbool +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x528cbaa6 pci_map_single +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52ae54b8 ip_route_input +EXPORT_SYMBOL vmlinux 0x52bea0b4 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x52c3b861 bio_add_page +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x52f9b478 dm_get_device +EXPORT_SYMBOL vmlinux 0x5303471f ilookup5 +EXPORT_SYMBOL vmlinux 0x53136fa8 thaw_bdev +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x533903d8 outsw +EXPORT_SYMBOL vmlinux 0x535fd0ef pci_request_region +EXPORT_SYMBOL vmlinux 0x5388ecb2 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x53904e48 drm_mode_validate_size +EXPORT_SYMBOL vmlinux 0x5395531e secpath_dup +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53d0eea3 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x5405f794 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x541f1721 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x5422d441 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x5437f906 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x5492c604 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54deedfb skb_copy +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54e9d3e2 xfrm_input +EXPORT_SYMBOL vmlinux 0x54f62870 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x553a0d23 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x554f0a48 groups_alloc +EXPORT_SYMBOL vmlinux 0x555a5438 sk_free +EXPORT_SYMBOL vmlinux 0x555cfde4 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x555f83db generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x55653c1e skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x556db901 xor_vis_5 +EXPORT_SYMBOL vmlinux 0x557a73df tty_mutex +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55a4ce1e init_task +EXPORT_SYMBOL vmlinux 0x55a95f75 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x55c39235 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x55e2315c bio_split +EXPORT_SYMBOL vmlinux 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL vmlinux 0x55f99cdb netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x562933e8 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x564a8f7f pci_assign_resource +EXPORT_SYMBOL vmlinux 0x5670d107 drm_mode_detachmode_crtc +EXPORT_SYMBOL vmlinux 0x5674dde2 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x56785ca0 dquot_claim_space +EXPORT_SYMBOL vmlinux 0x56791257 ebus_dma_enable +EXPORT_SYMBOL vmlinux 0x5687958e gen_pool_create +EXPORT_SYMBOL vmlinux 0x569fc442 drm_get_drawable_info +EXPORT_SYMBOL vmlinux 0x56cda35a sun4v_niagara2_setperf +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x570f0f41 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x57128b9a seq_puts +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57559325 neigh_for_each +EXPORT_SYMBOL vmlinux 0x5764781f journal_abort +EXPORT_SYMBOL vmlinux 0x577f4bff do_BUG +EXPORT_SYMBOL vmlinux 0x5798c9da jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57e09608 drm_debugfs_remove_files +EXPORT_SYMBOL vmlinux 0x57e79c06 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x57f7c686 sparc64_valid_addr_bitmap +EXPORT_SYMBOL vmlinux 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL vmlinux 0x5815d828 drm_mmap +EXPORT_SYMBOL vmlinux 0x5829eaca pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x582fef16 auxio_set_lte +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x585d8894 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x585eda98 qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x58628383 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x58769f20 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x58856d2f simple_release_fs +EXPORT_SYMBOL vmlinux 0x588fc8de file_remove_suid +EXPORT_SYMBOL vmlinux 0x59015539 unlock_page +EXPORT_SYMBOL vmlinux 0x59101617 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x591cf242 vmap +EXPORT_SYMBOL vmlinux 0x592ec013 drm_get_connector_name +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x593ea8f7 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59f552b4 drm_get_resource_len +EXPORT_SYMBOL vmlinux 0x59fd859c inet_frag_find +EXPORT_SYMBOL vmlinux 0x5a2102a2 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a634dce wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a779140 __up_read +EXPORT_SYMBOL vmlinux 0x5a7b3cc5 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x5a9a2501 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x5aaa9513 lock_super +EXPORT_SYMBOL vmlinux 0x5ab14a69 file_update_time +EXPORT_SYMBOL vmlinux 0x5aed6d10 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x5b0e981b wait_for_completion +EXPORT_SYMBOL vmlinux 0x5b1f521e pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b2bd38e tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x5b69b37a input_unregister_handler +EXPORT_SYMBOL vmlinux 0x5baa5800 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x5bbebfa2 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x5bf7b549 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x5c125782 eth_header_cache +EXPORT_SYMBOL vmlinux 0x5c6dcc99 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x5c767860 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x5ca4a0a8 dump_fpu +EXPORT_SYMBOL vmlinux 0x5cbdf77f gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x5cc2e91e tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5ce875cf prom_root_node +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d252425 d_alloc_root +EXPORT_SYMBOL vmlinux 0x5d28ba3d dev_change_flags +EXPORT_SYMBOL vmlinux 0x5d439ebf dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x5d43cc05 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x5d4d0e26 __csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x5d5aabc0 key_revoke +EXPORT_SYMBOL vmlinux 0x5d6339a4 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x5d66b462 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x5db88fd5 unlock_rename +EXPORT_SYMBOL vmlinux 0x5dbbe98e memmove +EXPORT_SYMBOL vmlinux 0x5e07b58d i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x5e0d8c9b drm_fasync +EXPORT_SYMBOL vmlinux 0x5e116677 vfs_quota_off +EXPORT_SYMBOL vmlinux 0x5e2e7c43 set_blocksize +EXPORT_SYMBOL vmlinux 0x5e4bad97 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x5e589ebd generic_getxattr +EXPORT_SYMBOL vmlinux 0x5e5a9e07 netif_rx +EXPORT_SYMBOL vmlinux 0x5e75bd64 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x5e7c44b5 aio_put_req +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea19de7 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x5ea395ec usb_gadget_unregister_driver +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5eab1512 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x5ebc24e4 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x5ec0e2a4 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x5ec69363 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x5ec93021 nobh_writepage +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ed1d85d try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x5ed52c2d clear_user_page +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ee0a984 prom_getchild +EXPORT_SYMBOL vmlinux 0x5f28d82d udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x5f2f21ea vio_register_driver +EXPORT_SYMBOL vmlinux 0x5f3187f4 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x5f9fd34e of_phy_find_device +EXPORT_SYMBOL vmlinux 0x5fce4005 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x5fcfaa16 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x5fd24bf1 block_read_full_page +EXPORT_SYMBOL vmlinux 0x5fdc8977 iget5_locked +EXPORT_SYMBOL vmlinux 0x5ff53e47 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x60184b31 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x60364f83 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x60375845 of_get_next_child +EXPORT_SYMBOL vmlinux 0x6042fc9b pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x6067a146 memcpy +EXPORT_SYMBOL vmlinux 0x608d567d dev_gro_receive +EXPORT_SYMBOL vmlinux 0x6092061c dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60cd6fce drm_gem_vm_close +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x61240d43 __sg_free_table +EXPORT_SYMBOL vmlinux 0x614d20af simple_write_end +EXPORT_SYMBOL vmlinux 0x618998da tty_write_room +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61ac35ac ida_destroy +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61feea24 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x62077b9c block_write_end +EXPORT_SYMBOL vmlinux 0x621010e2 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62a9293f _clear_page +EXPORT_SYMBOL vmlinux 0x62b38518 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x62d470a6 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x6333c8b2 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x63384607 d_genocide +EXPORT_SYMBOL vmlinux 0x634a805d blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x63616aee tc_classify_compat +EXPORT_SYMBOL vmlinux 0x63648635 ldc_disconnect +EXPORT_SYMBOL vmlinux 0x6367c9f8 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x6369c185 drm_core_ioremap +EXPORT_SYMBOL vmlinux 0x6373aad5 put_disk +EXPORT_SYMBOL vmlinux 0x63781d66 fb_find_mode +EXPORT_SYMBOL vmlinux 0x63795ce2 d_move +EXPORT_SYMBOL vmlinux 0x63a634ae vio_unregister_driver +EXPORT_SYMBOL vmlinux 0x63b11aca bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x63be9809 sock_create +EXPORT_SYMBOL vmlinux 0x63c06cd6 fb_class +EXPORT_SYMBOL vmlinux 0x63c7c97e netlink_ack +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63f66a55 kthread_stop +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x641e1225 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x642627b2 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x643ceefa mempool_destroy +EXPORT_SYMBOL vmlinux 0x64452478 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x64774cde ldc_free_exp_dring +EXPORT_SYMBOL vmlinux 0x64920784 uart_register_driver +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64cbd639 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x64cfc3d1 inet_release +EXPORT_SYMBOL vmlinux 0x64d067c0 kfifo_init +EXPORT_SYMBOL vmlinux 0x64e7c757 follow_pfn +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x650dac46 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x6553fc91 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x659585e7 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x65a0879f nf_register_hook +EXPORT_SYMBOL vmlinux 0x65b0a97e _PAGE_IE +EXPORT_SYMBOL vmlinux 0x65fa0ff8 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x6625dcb9 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x662aec10 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x66364274 get_sb_nodev +EXPORT_SYMBOL vmlinux 0x6654c8e8 up_write +EXPORT_SYMBOL vmlinux 0x66686518 idr_remove +EXPORT_SYMBOL vmlinux 0x667eeac6 __inet6_hash +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66a97c0b of_parse_phandles_with_args +EXPORT_SYMBOL vmlinux 0x66bfaae0 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x66cae227 stop_a_enabled +EXPORT_SYMBOL vmlinux 0x66de0e74 of_register_driver +EXPORT_SYMBOL vmlinux 0x66efb0d1 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x672cb57f xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x674abf3e netif_rx_ni +EXPORT_SYMBOL vmlinux 0x677eea7d ns87303_lock +EXPORT_SYMBOL vmlinux 0x67881bd6 ebus_dma_register +EXPORT_SYMBOL vmlinux 0x678bfd71 bio_pair_release +EXPORT_SYMBOL vmlinux 0x67e54a45 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x67eb2962 vfs_unlink +EXPORT_SYMBOL vmlinux 0x67f7501f con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x6823863c idr_remove_all +EXPORT_SYMBOL vmlinux 0x6831ab55 sbus_set_sbus64 +EXPORT_SYMBOL vmlinux 0x6848dda6 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x68742b3f security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x687c2f32 __down_write +EXPORT_SYMBOL vmlinux 0x689572e2 revert_creds +EXPORT_SYMBOL vmlinux 0x68f0bf61 do_SAK +EXPORT_SYMBOL vmlinux 0x68fb74ca timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x69010b06 insw +EXPORT_SYMBOL vmlinux 0x69438af9 neigh_table_init +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x69828943 audit_log_start +EXPORT_SYMBOL vmlinux 0x6984db74 mdesc_get_property +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69a94a8a blk_end_request_all +EXPORT_SYMBOL vmlinux 0x69b20c01 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x69b26e61 iget_failed +EXPORT_SYMBOL vmlinux 0x69b9cfa4 seq_bitmap +EXPORT_SYMBOL vmlinux 0x69bafd97 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d34daa __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x69d37025 atomic64_sub_ret +EXPORT_SYMBOL vmlinux 0x69d3dedf skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x69db0685 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69e28116 keyring_search +EXPORT_SYMBOL vmlinux 0x69ffcf16 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a1375af dev_add_pack +EXPORT_SYMBOL vmlinux 0x6a38532b wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x6a42c19b xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a77b8b4 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x6a7ed36a __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x6abb2e28 input_set_capability +EXPORT_SYMBOL vmlinux 0x6abe4ab9 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x6ac53f8b ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x6acbed88 load_nls +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6af91071 eth_header_parse +EXPORT_SYMBOL vmlinux 0x6b06f97b drm_rmmap_locked +EXPORT_SYMBOL vmlinux 0x6b139579 pci_unmap_single +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b3201a8 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x6b4d8c98 d_add_ci +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b7309db module_refcount +EXPORT_SYMBOL vmlinux 0x6b7aa810 misc_register +EXPORT_SYMBOL vmlinux 0x6b9922c4 idr_pre_get +EXPORT_SYMBOL vmlinux 0x6bb482ae nf_register_hooks +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bc646c2 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bee6fea inode_add_bytes +EXPORT_SYMBOL vmlinux 0x6bfe993d _write_trylock +EXPORT_SYMBOL vmlinux 0x6c03f269 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x6c33c587 drm_handle_vblank +EXPORT_SYMBOL vmlinux 0x6c5fcb74 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c72b0dc i2c_clients_command +EXPORT_SYMBOL vmlinux 0x6c7dedda tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x6c9d96ff mpage_writepage +EXPORT_SYMBOL vmlinux 0x6cbdf7f6 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x6cebfa9e ___pskb_trim +EXPORT_SYMBOL vmlinux 0x6d02eec7 block_commit_write +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d0e3039 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x6d21176e save_mount_options +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL vmlinux 0x6d4a07d4 kill_anon_super +EXPORT_SYMBOL vmlinux 0x6d4a1921 get_fb_unmapped_area +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d713f24 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x6d7192e9 nf_log_register +EXPORT_SYMBOL vmlinux 0x6d8358e7 dget_locked +EXPORT_SYMBOL vmlinux 0x6d93e82e complete_and_exit +EXPORT_SYMBOL vmlinux 0x6daa2e89 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x6de375c1 xor_niagara_5 +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6de9bd0a simple_transaction_release +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df92d92 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x6dfd5f39 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x6e103feb aio_complete +EXPORT_SYMBOL vmlinux 0x6e2327e7 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x6e331945 down +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e728bfe sock_init_data +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e9b3db4 sk_run_filter +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6ebf616f __getblk +EXPORT_SYMBOL vmlinux 0x6ec328be compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x6ecf898b dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0x6ed94417 atomic64_add +EXPORT_SYMBOL vmlinux 0x6ee2e0ec send_sig_info +EXPORT_SYMBOL vmlinux 0x6f1043f4 skb_trim +EXPORT_SYMBOL vmlinux 0x6f1c1920 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x6f280a3b __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x6f286379 pci_find_bus +EXPORT_SYMBOL vmlinux 0x6f294389 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x6f39eb12 drm_mode_create_dithering_property +EXPORT_SYMBOL vmlinux 0x6f7c9a34 poll_initwait +EXPORT_SYMBOL vmlinux 0x6f7e6174 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x6f90b5cf drm_mode_destroy +EXPORT_SYMBOL vmlinux 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fda48b1 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x6ff7a267 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x70025d76 pcim_iomap +EXPORT_SYMBOL vmlinux 0x701710ad genl_register_ops +EXPORT_SYMBOL vmlinux 0x70173377 unregister_netdev +EXPORT_SYMBOL vmlinux 0x701bc18f __kfree_skb +EXPORT_SYMBOL vmlinux 0x702f162c __memscan_generic +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x705a2892 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x7060e337 down_timeout +EXPORT_SYMBOL vmlinux 0x70765d1c vfs_lstat +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x7112be13 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x7123e0b4 dev_trans_start +EXPORT_SYMBOL vmlinux 0x712730a7 __flushw_user +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x7131965b of_phy_connect +EXPORT_SYMBOL vmlinux 0x7147ab89 skb_split +EXPORT_SYMBOL vmlinux 0x716208ab pci_set_master +EXPORT_SYMBOL vmlinux 0x71631dc8 mutex_unlock +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x7176e88d tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71b11785 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x71c02438 sg_next +EXPORT_SYMBOL vmlinux 0x72148b58 dqput +EXPORT_SYMBOL vmlinux 0x722249a9 key_negate_and_link +EXPORT_SYMBOL vmlinux 0x723a483d blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x724742fc clocksource_unregister +EXPORT_SYMBOL vmlinux 0x7269207f qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x726fa781 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72e5be27 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x72ebe44a __wake_up +EXPORT_SYMBOL vmlinux 0x730fc982 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x73315378 generic_writepages +EXPORT_SYMBOL vmlinux 0x7338e1e4 alloc_disk_node +EXPORT_SYMBOL vmlinux 0x734ed005 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x7363c661 input_register_device +EXPORT_SYMBOL vmlinux 0x7384e758 lock_may_write +EXPORT_SYMBOL vmlinux 0x73b05f41 netlink_unicast +EXPORT_SYMBOL vmlinux 0x73e0877a insl +EXPORT_SYMBOL vmlinux 0x73e80608 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x740565e8 update_region +EXPORT_SYMBOL vmlinux 0x74186fc5 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x741f9aa2 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x743280ad skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x744f571a netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x745ee3b5 drm_framebuffer_cleanup +EXPORT_SYMBOL vmlinux 0x74649631 get_write_access +EXPORT_SYMBOL vmlinux 0x74700163 drm_add_modes_noedid +EXPORT_SYMBOL vmlinux 0x74764c8e vio_ldc_alloc +EXPORT_SYMBOL vmlinux 0x747a7ef9 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74c0373a simple_fill_super +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x75016c80 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x7504293e eth_change_mtu +EXPORT_SYMBOL vmlinux 0x75319c4d pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x75515513 jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x75a7819b tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c91d13 bh_submit_read +EXPORT_SYMBOL vmlinux 0x75dd93a0 drm_gem_vm_open +EXPORT_SYMBOL vmlinux 0x75e0ffd5 _read_trylock +EXPORT_SYMBOL vmlinux 0x75fee2fe skb_find_text +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x76328e00 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x764a4314 d_path +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x766ff78f console_start +EXPORT_SYMBOL vmlinux 0x7692c706 sock_no_accept +EXPORT_SYMBOL vmlinux 0x76a49dd2 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x76b4a15b inode_permission +EXPORT_SYMBOL vmlinux 0x76b5cb66 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0x76b7202e pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x76b884ff tty_port_close_start +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x772d16d6 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x773825fd __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x774633a8 drm_get_edid +EXPORT_SYMBOL vmlinux 0x77476263 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x774b2020 da903x_query_status +EXPORT_SYMBOL vmlinux 0x776ef2fb open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x7797674f pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x77a437b9 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x77a5642f drm_cvt_mode +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77db7282 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x77e9fb49 path_lookup +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f870fb drm_exit +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x7800ebcd inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x7808db44 _spin_trylock +EXPORT_SYMBOL vmlinux 0x7813e58f tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x782cb47d _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x783ff157 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x786a4310 phy_start +EXPORT_SYMBOL vmlinux 0x787eb5d0 sock_release +EXPORT_SYMBOL vmlinux 0x78c5afbf handle_sysrq +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78efbba3 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x79385ab8 blk_end_request +EXPORT_SYMBOL vmlinux 0x79495c52 drm_ati_pcigart_init +EXPORT_SYMBOL vmlinux 0x795c1bac dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x79904bad drm_debugfs_create_files +EXPORT_SYMBOL vmlinux 0x79944180 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79bfd449 generic_unplug_device +EXPORT_SYMBOL vmlinux 0x79cb14fd generic_file_open +EXPORT_SYMBOL vmlinux 0x79e8c487 phy_device_create +EXPORT_SYMBOL vmlinux 0x7a1b1aec alloc_file +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a5e0255 mutex_lock +EXPORT_SYMBOL vmlinux 0x7a6bb613 idr_init +EXPORT_SYMBOL vmlinux 0x7a92aff6 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x7ae28678 fb_get_mode +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7aef0236 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x7b161d61 tty_port_close +EXPORT_SYMBOL vmlinux 0x7b2a221a journal_check_available_features +EXPORT_SYMBOL vmlinux 0x7b3e7867 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x7b594fc3 filp_open +EXPORT_SYMBOL vmlinux 0x7b7bfd95 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7bb1c864 pci_choose_state +EXPORT_SYMBOL vmlinux 0x7bb38c6d register_netdev +EXPORT_SYMBOL vmlinux 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL vmlinux 0x7bf988af pci_set_power_state +EXPORT_SYMBOL vmlinux 0x7bfd12fd __scm_send +EXPORT_SYMBOL vmlinux 0x7bfef88f kmem_cache_size +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c1af8c0 uart_resume_port +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL vmlinux 0x7c4fd66a tcp_close +EXPORT_SYMBOL vmlinux 0x7c5d2187 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c8526fb ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c954be2 register_framebuffer +EXPORT_SYMBOL vmlinux 0x7c9bd5b5 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cd06254 find_get_page +EXPORT_SYMBOL vmlinux 0x7cd0c3ce abort_creds +EXPORT_SYMBOL vmlinux 0x7cdfbca1 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x7ce86c24 netdev_set_master +EXPORT_SYMBOL vmlinux 0x7cf10698 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x7d0e38e2 blk_start_request +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d22190e vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x7d26ae7e elv_rb_add +EXPORT_SYMBOL vmlinux 0x7d37dc70 load_nls_default +EXPORT_SYMBOL vmlinux 0x7d6bdb6c dquot_scan_active +EXPORT_SYMBOL vmlinux 0x7d72ed6e insert_inode_locked +EXPORT_SYMBOL vmlinux 0x7db3d966 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x7dbe6048 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7ddc55c8 skb_store_bits +EXPORT_SYMBOL vmlinux 0x7ddcf024 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x7e238eb3 find_inode_number +EXPORT_SYMBOL vmlinux 0x7e253b30 mempool_create_node +EXPORT_SYMBOL vmlinux 0x7e796e75 drm_mm_init +EXPORT_SYMBOL vmlinux 0x7e8306cc skb_copy_bits +EXPORT_SYMBOL vmlinux 0x7e9bb089 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7edf554b bio_integrity_split +EXPORT_SYMBOL vmlinux 0x7ee9938d _write_lock_bh +EXPORT_SYMBOL vmlinux 0x7ef02eb2 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x7f01ccac fsync_bdev +EXPORT_SYMBOL vmlinux 0x7f16d541 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x7f17ca2f genphy_update_link +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f76df10 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x7f97f8a9 journal_extend +EXPORT_SYMBOL vmlinux 0x7fa4f6bc pci_set_mwi +EXPORT_SYMBOL vmlinux 0x7fd758cf drm_lock_free +EXPORT_SYMBOL vmlinux 0x801c6ffd blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x8029732d serio_close +EXPORT_SYMBOL vmlinux 0x8067c8d6 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x8076b72f drm_vblank_init +EXPORT_SYMBOL vmlinux 0x807b7089 prom_firstprop +EXPORT_SYMBOL vmlinux 0x80801294 pci_dma_supported +EXPORT_SYMBOL vmlinux 0x80bf3bc5 sun4v_niagara_getperf +EXPORT_SYMBOL vmlinux 0x80c51d2e unregister_console +EXPORT_SYMBOL vmlinux 0x812de138 key_link +EXPORT_SYMBOL vmlinux 0x813a7dff netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x813b0461 set_irq_chip +EXPORT_SYMBOL vmlinux 0x814b60b9 arp_send +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x8167d59d pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x8176130e __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x81d2514b uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x81dcd5c2 idr_get_new +EXPORT_SYMBOL vmlinux 0x81fea671 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x82430301 journal_init_dev +EXPORT_SYMBOL vmlinux 0x824f8cf2 pci_domain_nr +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x82a2c3f3 vio_conn_reset +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82b1de01 ida_remove +EXPORT_SYMBOL vmlinux 0x82c3b182 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x82fe5f9e __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x830f1d98 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x83106f1b genphy_resume +EXPORT_SYMBOL vmlinux 0x831744fd may_umount_tree +EXPORT_SYMBOL vmlinux 0x831e331f pci_clear_master +EXPORT_SYMBOL vmlinux 0x8326c912 kernel_bind +EXPORT_SYMBOL vmlinux 0x8342bc6c dquot_destroy +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a657d3 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x83b9d7ff xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83c7f376 drm_sysfs_hotplug_event +EXPORT_SYMBOL vmlinux 0x83caf0a0 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x83ec1385 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x84217eba of_device_is_available +EXPORT_SYMBOL vmlinux 0x84223289 tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0x843b8608 key_unlink +EXPORT_SYMBOL vmlinux 0x843ccb6d compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x84627590 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x84682158 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x84734b00 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x848bd94e __rta_fill +EXPORT_SYMBOL vmlinux 0x84bd326d journal_update_format +EXPORT_SYMBOL vmlinux 0x84c4b845 blkdev_get +EXPORT_SYMBOL vmlinux 0x84ec2a9b register_sysctl_table +EXPORT_SYMBOL vmlinux 0x85321889 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x8539385d udp_poll +EXPORT_SYMBOL vmlinux 0x854a02c0 of_getintprop_default +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x85675c07 vm_map_ram +EXPORT_SYMBOL vmlinux 0x856c9fe3 idr_destroy +EXPORT_SYMBOL vmlinux 0x85909846 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85de09f5 drm_mode_width +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x86079852 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x862574af dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x862765b8 input_unregister_device +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x8690117b inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x869a1163 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x86b20375 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x86c7146d vfs_fstat +EXPORT_SYMBOL vmlinux 0x86cce3a1 netif_napi_add +EXPORT_SYMBOL vmlinux 0x86ea7908 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x8705e628 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x8723f18e read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x872bd087 suncore_mouse_baud_detection +EXPORT_SYMBOL vmlinux 0x87311a16 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x873d58ee posix_acl_permission +EXPORT_SYMBOL vmlinux 0x876fe98e skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x87820b43 try_to_release_page +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87a9782d blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x87c55e32 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL vmlinux 0x87e9c9ae tty_port_init +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x881428af complete +EXPORT_SYMBOL vmlinux 0x881519cf d_alloc_name +EXPORT_SYMBOL vmlinux 0x883b24fb sun4v_niagara_setperf +EXPORT_SYMBOL vmlinux 0x883e0605 of_get_property +EXPORT_SYMBOL vmlinux 0x8850e7e7 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x8858a3e5 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x886db225 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x888b3381 mutex_trylock +EXPORT_SYMBOL vmlinux 0x88acc417 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x88dc1e96 down_read_trylock +EXPORT_SYMBOL vmlinux 0x88fd5956 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x8902f1af of_console_path +EXPORT_SYMBOL vmlinux 0x893d7211 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x894932ad register_nls +EXPORT_SYMBOL vmlinux 0x895577b0 numa_cpu_lookup_table +EXPORT_SYMBOL vmlinux 0x896283db sk_common_release +EXPORT_SYMBOL vmlinux 0x89713fbf ldc_alloc_exp_dring +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x89d0aef3 drm_gem_object_lookup +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89da4869 dquot_commit +EXPORT_SYMBOL vmlinux 0x89e51b25 audit_log_end +EXPORT_SYMBOL vmlinux 0x8a0ac32b set_groups +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a46479c __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8a9af6cc tty_vhangup +EXPORT_SYMBOL vmlinux 0x8aa1b7c4 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x8aa5442e __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x8aadafd5 __put_cred +EXPORT_SYMBOL vmlinux 0x8ab4ed5b register_key_type +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8b0403e6 prom_getproperty +EXPORT_SYMBOL vmlinux 0x8b191c7a pci_find_capability +EXPORT_SYMBOL vmlinux 0x8b1a5db1 stop_tty +EXPORT_SYMBOL vmlinux 0x8b3b3288 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x8b4d94cb ldc_read +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b68b1aa skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b922c0f __strnlen_user +EXPORT_SYMBOL vmlinux 0x8bab315f find_vma +EXPORT_SYMBOL vmlinux 0x8bb4f82c tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x8bca385a genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bf87169 __bzero +EXPORT_SYMBOL vmlinux 0x8bf93459 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x8c347120 bdget +EXPORT_SYMBOL vmlinux 0x8c383d97 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x8c3ebc72 saved_command_line +EXPORT_SYMBOL vmlinux 0x8c3f0159 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x8c414a43 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c56bc19 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x8cd156a2 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x8ceafdba xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x8d2d3ed2 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x8d2f6859 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x8d386b69 sock_no_bind +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d4260cb replace_mount_options +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d600343 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x8d646a30 drm_mode_create +EXPORT_SYMBOL vmlinux 0x8d6a8762 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x8d6a9ef7 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x8d79751b sunserial_console_match +EXPORT_SYMBOL vmlinux 0x8da938fa filp_close +EXPORT_SYMBOL vmlinux 0x8db6545c dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x8dfbb080 inode_init_once +EXPORT_SYMBOL vmlinux 0x8e034be2 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x8e0b1770 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e1a2139 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e527c53 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x8e6f59b4 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e7fd00b drm_connector_init +EXPORT_SYMBOL vmlinux 0x8e879bb7 __vmalloc +EXPORT_SYMBOL vmlinux 0x8ee7f13d blk_init_queue +EXPORT_SYMBOL vmlinux 0x8ee88d1c __down_read_trylock +EXPORT_SYMBOL vmlinux 0x8f02f786 vfs_getattr +EXPORT_SYMBOL vmlinux 0x8f18e329 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x8f24acfe inode_setattr +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f5bd985 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f80a425 bio_unmap_user +EXPORT_SYMBOL vmlinux 0x8f87b288 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x8fa2169b __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x8fbc837c blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x8fca34f5 ebus_dma_residue +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x900c6f14 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x90295c0b netlink_dump_start +EXPORT_SYMBOL vmlinux 0x905ec68d per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x907a09fd pci_write_vpd +EXPORT_SYMBOL vmlinux 0x9081c928 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x9097a907 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x90f286f6 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x90f42b58 module_put +EXPORT_SYMBOL vmlinux 0x90f63f8c truncate_pagecache +EXPORT_SYMBOL vmlinux 0x910abfdd block_fsync +EXPORT_SYMBOL vmlinux 0x9117a881 prom_getstring +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x916e74e9 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x91773f76 __bforget +EXPORT_SYMBOL vmlinux 0x91a9f14e cdev_del +EXPORT_SYMBOL vmlinux 0x91bb3a88 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x91d981e6 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x921f4390 atomic_add +EXPORT_SYMBOL vmlinux 0x92248f05 generic_write_sync +EXPORT_SYMBOL vmlinux 0x922831be remap_pfn_range +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x924f48d1 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x92673ec4 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x926ea0bf devm_free_irq +EXPORT_SYMBOL vmlinux 0x92901dec tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x929f1f0d __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x92a93d85 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x92ab4fd8 tcf_em_register +EXPORT_SYMBOL vmlinux 0x92c06d7b vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x92c0a5c2 pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x92d0d1f4 _write_lock +EXPORT_SYMBOL vmlinux 0x92d38af5 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x92de9e98 drm_pci_alloc +EXPORT_SYMBOL vmlinux 0x92e87177 drm_get_resource_start +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x932d3b0b bmap +EXPORT_SYMBOL vmlinux 0x934a3ebd block_write_begin +EXPORT_SYMBOL vmlinux 0x937bcd4c ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93b6b402 ldc_unmap +EXPORT_SYMBOL vmlinux 0x93dc9664 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x93e90edd sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x9401bb31 dma_set_mask +EXPORT_SYMBOL vmlinux 0x9402f1d7 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x9430f2a0 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x943ff2e6 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x9443289e set_bit +EXPORT_SYMBOL vmlinux 0x9447e998 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x94483b6d downgrade_write +EXPORT_SYMBOL vmlinux 0x947610e7 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x94840bac jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x9490dfc2 pci_alloc_consistent +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a7ec3f generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x94ac4b95 ps2_drain +EXPORT_SYMBOL vmlinux 0x94ee9c96 write_cache_pages +EXPORT_SYMBOL vmlinux 0x94ff8a9c blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x950b0b51 test_and_set_bit +EXPORT_SYMBOL vmlinux 0x9514151a _mcount +EXPORT_SYMBOL vmlinux 0x9522f614 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x9537b4cd pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x95415266 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x9594c1ea key_type_keyring +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95d34497 skb_dma_map +EXPORT_SYMBOL vmlinux 0x95d4c711 kern_path +EXPORT_SYMBOL vmlinux 0x961bd0f6 drm_vblank_cleanup +EXPORT_SYMBOL vmlinux 0x96227fb6 input_close_device +EXPORT_SYMBOL vmlinux 0x963d6aab drm_mode_create_tv_properties +EXPORT_SYMBOL vmlinux 0x9660a164 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x96662caf dm_unregister_target +EXPORT_SYMBOL vmlinux 0x96ac0440 ldc_free +EXPORT_SYMBOL vmlinux 0x96d42b0d sock_setsockopt +EXPORT_SYMBOL vmlinux 0x96f0827d sockfd_lookup +EXPORT_SYMBOL vmlinux 0x97041d1e ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x97450880 create_proc_entry +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x97630f2c locks_copy_lock +EXPORT_SYMBOL vmlinux 0x97696f4b vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x97fec73c sock_wfree +EXPORT_SYMBOL vmlinux 0x98315679 drm_mm_debug_table +EXPORT_SYMBOL vmlinux 0x98366f23 dev_get_stats +EXPORT_SYMBOL vmlinux 0x983b52e7 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x98445ffd serio_open +EXPORT_SYMBOL vmlinux 0x98485991 blk_unplug +EXPORT_SYMBOL vmlinux 0x9860e5ed register_con_driver +EXPORT_SYMBOL vmlinux 0x9869be55 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x986d855d arp_xmit +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x98722cc3 drm_mm_takedown +EXPORT_SYMBOL vmlinux 0x9872d116 cmos_regs +EXPORT_SYMBOL vmlinux 0x9884f42c bdi_init +EXPORT_SYMBOL vmlinux 0x98cf555c drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL vmlinux 0x99186a2b pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x994110be neigh_destroy +EXPORT_SYMBOL vmlinux 0x9963869b drm_vblank_pre_modeset +EXPORT_SYMBOL vmlinux 0x99852d68 xrlim_allow +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99aa27be genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c4c8c8 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x99c555d7 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x99c72b87 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99d3ef45 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99feebde get_sb_single +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a268074 set_security_override +EXPORT_SYMBOL vmlinux 0x9a526066 init_net +EXPORT_SYMBOL vmlinux 0x9a69f0dc drm_mode_connector_detach_encoder +EXPORT_SYMBOL vmlinux 0x9a725ba7 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x9a7409ff ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0x9a998166 input_free_device +EXPORT_SYMBOL vmlinux 0x9aa7e24c i2c_bit_add_bus +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9aabfd9c rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x9aacd62b prom_getintdefault +EXPORT_SYMBOL vmlinux 0x9abfa266 kobject_init +EXPORT_SYMBOL vmlinux 0x9ad4a93e kernel_connect +EXPORT_SYMBOL vmlinux 0x9aead046 bio_init +EXPORT_SYMBOL vmlinux 0x9af8562b drm_connector_property_get_value +EXPORT_SYMBOL vmlinux 0x9afe7ed3 slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x9b26a7a7 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b527854 invalidate_partition +EXPORT_SYMBOL vmlinux 0x9b54c66b jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x9b86eaa6 mem_map_zero +EXPORT_SYMBOL vmlinux 0x9b95a3e2 inet_accept +EXPORT_SYMBOL vmlinux 0x9ba3d5f2 __page_symlink +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bafb9c3 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x9bc4d622 framebuffer_release +EXPORT_SYMBOL vmlinux 0x9bd93e9a elv_add_request +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c18d895 napi_skb_finish +EXPORT_SYMBOL vmlinux 0x9c6ea7e2 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x9c703ae6 _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9c75a81a otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x9c79261f tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x9c8599d3 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x9c944a43 dma_supported +EXPORT_SYMBOL vmlinux 0x9ca03e7a mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9cac705a __kfifo_get +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cd713b5 generic_make_request +EXPORT_SYMBOL vmlinux 0x9d3540ce kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d8260b8 register_netdevice +EXPORT_SYMBOL vmlinux 0x9dabfef6 journal_init_inode +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9db37875 change_bit +EXPORT_SYMBOL vmlinux 0x9dbf1a29 tcf_register_action +EXPORT_SYMBOL vmlinux 0x9dc84cb6 pci_dev_put +EXPORT_SYMBOL vmlinux 0x9de63cdc ether_setup +EXPORT_SYMBOL vmlinux 0x9deeec4b audit_log_format +EXPORT_SYMBOL vmlinux 0x9df36468 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x9dfbb56a deny_write_access +EXPORT_SYMBOL vmlinux 0x9e0a285d input_register_handler +EXPORT_SYMBOL vmlinux 0x9e38db1f pci_save_state +EXPORT_SYMBOL vmlinux 0x9e4e6128 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x9e5e60dd set_page_dirty +EXPORT_SYMBOL vmlinux 0x9e771285 _PAGE_E +EXPORT_SYMBOL vmlinux 0x9e9483a7 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x9e98a7d7 tty_shutdown +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9eafc8be simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9ebd8b60 journal_start_commit +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f3d5c64 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x9f573550 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x9f62bfc5 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x9f74b25c mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x9f7d6a1d tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x9f8e7281 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9faa81c7 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x9fbae801 bd_claim +EXPORT_SYMBOL vmlinux 0x9fc63544 km_report +EXPORT_SYMBOL vmlinux 0x9fc6f2db netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x9ffb8ef3 drm_mm_clean +EXPORT_SYMBOL vmlinux 0x9ffc2a7d drm_vblank_count +EXPORT_SYMBOL vmlinux 0xa0063dd4 pci_get_slot +EXPORT_SYMBOL vmlinux 0xa0190d38 cdev_index +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa03d54c5 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0xa049f415 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa0501f52 vfs_read +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa0718b8b sget +EXPORT_SYMBOL vmlinux 0xa0903da9 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xa0a6eb62 misc_deregister +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0ebb2ba _PAGE_CACHE +EXPORT_SYMBOL vmlinux 0xa0eceb48 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa11ab7f9 bio_endio +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa18c146c vfs_statfs +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1bc123c kset_register +EXPORT_SYMBOL vmlinux 0xa1c170e2 pci_restore_state +EXPORT_SYMBOL vmlinux 0xa1c6bea7 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa218852d phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0xa2230181 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0xa23ad0ef slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xa2881b30 skb_queue_purge +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa2934059 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b54cd8 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xa2bf92f2 napi_get_frags +EXPORT_SYMBOL vmlinux 0xa2c0f02a file_permission +EXPORT_SYMBOL vmlinux 0xa2fc3362 get_user_pages +EXPORT_SYMBOL vmlinux 0xa304093f cont_write_begin +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa3394c91 journal_load +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa34840c0 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xa34a4aa7 ___copy_to_user +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa39b4cf2 udelay +EXPORT_SYMBOL vmlinux 0xa3ba125b vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xa3bd0652 __nla_put +EXPORT_SYMBOL vmlinux 0xa3c5afcc sk_send_sigurg +EXPORT_SYMBOL vmlinux 0xa3cfc693 ps2_end_command +EXPORT_SYMBOL vmlinux 0xa3f1125b __break_lease +EXPORT_SYMBOL vmlinux 0xa4408e2f generic_setxattr +EXPORT_SYMBOL vmlinux 0xa4bb893f i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xa4cc006a tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0xa4d0a8e9 init_timer_key +EXPORT_SYMBOL vmlinux 0xa5594c5b neigh_compat_output +EXPORT_SYMBOL vmlinux 0xa56344c6 set_binfmt +EXPORT_SYMBOL vmlinux 0xa5668713 kernel_getpeername +EXPORT_SYMBOL vmlinux 0xa576c263 generic_find_next_le_bit +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa5915e12 generic_ro_fops +EXPORT_SYMBOL vmlinux 0xa59498e9 inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5a634c8 d_delete +EXPORT_SYMBOL vmlinux 0xa5e4f65c __next_cpu_nr +EXPORT_SYMBOL vmlinux 0xa5e68673 tlb_type +EXPORT_SYMBOL vmlinux 0xa615a61b __invalidate_device +EXPORT_SYMBOL vmlinux 0xa63713e6 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xa659f396 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0xa65a78e0 ldc_bind +EXPORT_SYMBOL vmlinux 0xa66da924 read_cache_page +EXPORT_SYMBOL vmlinux 0xa6745fad fifo_set_limit +EXPORT_SYMBOL vmlinux 0xa6775d28 force_sig +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6860ce0 tcf_hash_release +EXPORT_SYMBOL vmlinux 0xa68745c4 textsearch_unregister +EXPORT_SYMBOL vmlinux 0xa6a9538e tcp_shutdown +EXPORT_SYMBOL vmlinux 0xa6d768b6 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6e141d0 kill_pgrp +EXPORT_SYMBOL vmlinux 0xa6fd642d nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xa7017089 wireless_send_event +EXPORT_SYMBOL vmlinux 0xa7077eaa drm_read +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa759c015 request_key +EXPORT_SYMBOL vmlinux 0xa767bd92 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0xa77cbe1f redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xa78859ec call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0xa7c3f6ae tcp_check_req +EXPORT_SYMBOL vmlinux 0xa7e45653 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xa82ab8c7 bio_integrity_free +EXPORT_SYMBOL vmlinux 0xa8475db6 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa8877f00 inet_frags_init +EXPORT_SYMBOL vmlinux 0xa89713a8 inet_del_protocol +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8af6afc fput +EXPORT_SYMBOL vmlinux 0xa8e10447 skb_insert +EXPORT_SYMBOL vmlinux 0xa8f40d6b init_special_inode +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa9111a47 do_gettimeofday +EXPORT_SYMBOL vmlinux 0xa9468be3 bdget_disk +EXPORT_SYMBOL vmlinux 0xa94b08c2 udp_disconnect +EXPORT_SYMBOL vmlinux 0xa955f0cd add_timer +EXPORT_SYMBOL vmlinux 0xa95aa3e3 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0xa98c446f blk_free_tags +EXPORT_SYMBOL vmlinux 0xa98e9ffa drm_clflush_pages +EXPORT_SYMBOL vmlinux 0xa998ce67 drm_mm_get_block_generic +EXPORT_SYMBOL vmlinux 0xa9c66781 elv_rb_del +EXPORT_SYMBOL vmlinux 0xa9e7682b do_splice_from +EXPORT_SYMBOL vmlinux 0xa9ecd792 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0xa9ecf3d1 vfs_fsync +EXPORT_SYMBOL vmlinux 0xaa153527 neigh_connected_output +EXPORT_SYMBOL vmlinux 0xaa32cb6d ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xaa64dfc8 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xaa6ae9ab wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xaac99549 get_sb_bdev +EXPORT_SYMBOL vmlinux 0xaaf995d8 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab22eb3c bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xab2bee5d read_cache_pages +EXPORT_SYMBOL vmlinux 0xab6a84ef destroy_EII_client +EXPORT_SYMBOL vmlinux 0xab98c126 __destroy_inode +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb7781d dm_io_client_resize +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd8ebfc elv_rb_find +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac1bcefd prepare_binprm +EXPORT_SYMBOL vmlinux 0xac29421f jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0xac2dab09 prom_getint +EXPORT_SYMBOL vmlinux 0xac335f5b blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0xac33d545 vfs_link +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac3c6b79 register_qdisc +EXPORT_SYMBOL vmlinux 0xac5a31de sock_sendmsg +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xacb0ceba pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xacb9222f simple_transaction_read +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xaccc92c8 complete_request_key +EXPORT_SYMBOL vmlinux 0xacd0e1b2 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xace4c8ed tick_ops +EXPORT_SYMBOL vmlinux 0xacecd851 unregister_quota_format +EXPORT_SYMBOL vmlinux 0xacf0a90e tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad22c3a0 dquot_initialize +EXPORT_SYMBOL vmlinux 0xad253a9b follow_down +EXPORT_SYMBOL vmlinux 0xad50b434 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0xadad748c xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xadba2041 set_user_nice +EXPORT_SYMBOL vmlinux 0xadc55132 vfs_llseek +EXPORT_SYMBOL vmlinux 0xadcf2413 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0xae0ace81 journal_lock_updates +EXPORT_SYMBOL vmlinux 0xae2c4b96 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xae4b39d6 __find_get_block +EXPORT_SYMBOL vmlinux 0xae51d89b __brelse +EXPORT_SYMBOL vmlinux 0xae543693 blk_plug_device +EXPORT_SYMBOL vmlinux 0xae8df21a journal_get_create_access +EXPORT_SYMBOL vmlinux 0xaebba7c9 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaf136961 netif_receive_skb +EXPORT_SYMBOL vmlinux 0xaf29788e drm_sman_init +EXPORT_SYMBOL vmlinux 0xaf6a0c36 get_super +EXPORT_SYMBOL vmlinux 0xaf90896d unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xafc4e820 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xafe08680 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0xafe40668 noop_qdisc +EXPORT_SYMBOL vmlinux 0xafe6583b sg_last +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xaff37254 journal_get_write_access +EXPORT_SYMBOL vmlinux 0xaffb41d6 __wake_up_bit +EXPORT_SYMBOL vmlinux 0xb00e2d46 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb044a47d generic_show_options +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb084b36f netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xb08c56d5 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0d0773c pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xb0d4e90d ip_dev_find +EXPORT_SYMBOL vmlinux 0xb0d715db idr_for_each +EXPORT_SYMBOL vmlinux 0xb0d91bbf sg_miter_start +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb1095e4f drm_core_ioremapfree +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb127e033 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0xb13f8fb6 _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xb153690d dm_table_put +EXPORT_SYMBOL vmlinux 0xb15723d9 pci_pme_active +EXPORT_SYMBOL vmlinux 0xb17701df blk_queue_ordered +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1983f58 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xb1ba9034 d_lookup +EXPORT_SYMBOL vmlinux 0xb1baadf5 bio_clone +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1c92056 drm_idlelock_take +EXPORT_SYMBOL vmlinux 0xb1de19c2 drm_i_have_hw_lock +EXPORT_SYMBOL vmlinux 0xb1e6665f gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0xb1ef1f54 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22e2bb0 page_symlink +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb259b6f4 skb_dequeue +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb2a364b7 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xb2a9e70c arp_find +EXPORT_SYMBOL vmlinux 0xb2da6a0f ebus_dma_request +EXPORT_SYMBOL vmlinux 0xb2dd0b22 drm_init +EXPORT_SYMBOL vmlinux 0xb2e3a42c blk_sync_queue +EXPORT_SYMBOL vmlinux 0xb2f0ac97 __napi_complete +EXPORT_SYMBOL vmlinux 0xb2f8286d tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0xb35c7507 touch_atime +EXPORT_SYMBOL vmlinux 0xb37d1f33 lease_get_mtime +EXPORT_SYMBOL vmlinux 0xb3949a43 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3b24800 bio_put +EXPORT_SYMBOL vmlinux 0xb3d31d94 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb432c019 block_sync_page +EXPORT_SYMBOL vmlinux 0xb435bd66 mdesc_next_arc +EXPORT_SYMBOL vmlinux 0xb457843a drm_vblank_off +EXPORT_SYMBOL vmlinux 0xb45cebaf sock_create_kern +EXPORT_SYMBOL vmlinux 0xb46e6e11 vio_driver_init +EXPORT_SYMBOL vmlinux 0xb4800556 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0xb494196e phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0xb4eaa38a eth_header +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb5090c5a ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xb51499ca devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb5525bfd clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xb5588c42 free_task +EXPORT_SYMBOL vmlinux 0xb55d21a7 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0xb584f953 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xb59f87b0 ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5c4e188 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0xb5d55024 dev_open +EXPORT_SYMBOL vmlinux 0xb5ed4f09 neigh_update +EXPORT_SYMBOL vmlinux 0xb60ac457 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xb6139a8c of_find_node_by_type +EXPORT_SYMBOL vmlinux 0xb6284232 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0xb6406cf9 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xb642352b kill_fasync +EXPORT_SYMBOL vmlinux 0xb64916b2 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0xb64c59c8 drm_mm_search_free_in_range +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb67de97b qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0xb68fd831 finish_wait +EXPORT_SYMBOL vmlinux 0xb692edfa mempool_free +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b2d32d skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6ef7d43 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0xb6f86873 tty_free_termios +EXPORT_SYMBOL vmlinux 0xb70c457a dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xb73a6a7e __blk_end_request +EXPORT_SYMBOL vmlinux 0xb75dcfee _read_lock_irq +EXPORT_SYMBOL vmlinux 0xb7858b2d dquot_free_space +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7ddc46a pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0xb7f6a121 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0xb7f97560 override_creds +EXPORT_SYMBOL vmlinux 0xb7ff8176 drm_addbufs_pci +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb83c1cc8 page_readlink +EXPORT_SYMBOL vmlinux 0xb84fa448 pci_request_regions +EXPORT_SYMBOL vmlinux 0xb858e943 dst_release +EXPORT_SYMBOL vmlinux 0xb85f24ee i2c_bit_add_numbered_bus +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8b171a3 security_d_instantiate +EXPORT_SYMBOL vmlinux 0xb8b918dd blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0xb8d990f8 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xb8eb0ee4 netlink_set_err +EXPORT_SYMBOL vmlinux 0xb9249d16 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xb94f7680 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xb989c935 drm_mode_prune_invalid +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9a73eee generic_listxattr +EXPORT_SYMBOL vmlinux 0xb9ac4be7 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xb9d11971 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0xb9ec1a6a __mutex_init +EXPORT_SYMBOL vmlinux 0xb9ed6cbe of_get_parent +EXPORT_SYMBOL vmlinux 0xba218657 log_wait_commit +EXPORT_SYMBOL vmlinux 0xba2ba1c4 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0xba35f337 drm_crtc_cleanup +EXPORT_SYMBOL vmlinux 0xba3d943a __lock_page +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba5665d3 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xba613633 journal_start +EXPORT_SYMBOL vmlinux 0xba6dedef jbd2_journal_start +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbab15322 sock_no_poll +EXPORT_SYMBOL vmlinux 0xbab1e541 tc_classify +EXPORT_SYMBOL vmlinux 0xbade7ffb mdiobus_read +EXPORT_SYMBOL vmlinux 0xbaeec818 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0xbb010fba vfs_quota_disable +EXPORT_SYMBOL vmlinux 0xbb12c8d2 proto_unregister +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb379c27 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xbb54864f dentry_open +EXPORT_SYMBOL vmlinux 0xbb5c6872 inet_frag_kill +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb799280 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbbd04339 pid_task +EXPORT_SYMBOL vmlinux 0xbbde0d4f uart_write_wakeup +EXPORT_SYMBOL vmlinux 0xbbfb6b02 kobject_set_name +EXPORT_SYMBOL vmlinux 0xbc024c7d __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xbc281adc datagram_poll +EXPORT_SYMBOL vmlinux 0xbc2a1bcc blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0xbc91a535 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xbcb0aeef kernel_getsockname +EXPORT_SYMBOL vmlinux 0xbcbc0061 down_trylock +EXPORT_SYMBOL vmlinux 0xbccde451 ip_route_output_key +EXPORT_SYMBOL vmlinux 0xbce9212a input_event +EXPORT_SYMBOL vmlinux 0xbceee252 tty_register_driver +EXPORT_SYMBOL vmlinux 0xbcf35759 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xbd100793 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xbd54483f pci_unregister_driver +EXPORT_SYMBOL vmlinux 0xbd6736a6 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0xbd843067 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xbdc4ba61 sg_miter_next +EXPORT_SYMBOL vmlinux 0xbdd431f1 tcp_child_process +EXPORT_SYMBOL vmlinux 0xbddcc21b blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe10eb2e security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0xbe122842 _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xbe2bd559 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xbe2d55f8 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0xbe2dc101 sock_i_uid +EXPORT_SYMBOL vmlinux 0xbe6994a5 sk_stream_error +EXPORT_SYMBOL vmlinux 0xbe804aa8 __free_pages +EXPORT_SYMBOL vmlinux 0xbe82dea3 should_remove_suid +EXPORT_SYMBOL vmlinux 0xbe9ff0d7 skb_checksum +EXPORT_SYMBOL vmlinux 0xbed79865 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xbedc8325 generic_permission +EXPORT_SYMBOL vmlinux 0xbee175f1 pipe_unlock +EXPORT_SYMBOL vmlinux 0xbee53a55 path_put +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf3ca09c seq_printf +EXPORT_SYMBOL vmlinux 0xbf7d7755 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf86363b pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0xbf993764 __memscan_zero +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfb2ad58 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0xbfbeeb63 __scm_destroy +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc018302b __lookup_one_len +EXPORT_SYMBOL vmlinux 0xc0457314 napi_frags_skb +EXPORT_SYMBOL vmlinux 0xc04dd0e2 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc058e9bf drm_pci_free +EXPORT_SYMBOL vmlinux 0xc0796c1c tty_port_hangup +EXPORT_SYMBOL vmlinux 0xc08f8cad udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc09ca072 ldc_map_single +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0d1bb53 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0xc0d9b215 cdev_add +EXPORT_SYMBOL vmlinux 0xc0da8029 blk_register_region +EXPORT_SYMBOL vmlinux 0xc0f79aea of_match_node +EXPORT_SYMBOL vmlinux 0xc0fec354 simple_getattr +EXPORT_SYMBOL vmlinux 0xc10a47cf dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0xc123f502 inet_getname +EXPORT_SYMBOL vmlinux 0xc12cd8c8 migrate_page +EXPORT_SYMBOL vmlinux 0xc14b66f6 ida_get_new_above +EXPORT_SYMBOL vmlinux 0xc15e073c generic_find_next_zero_le_bit +EXPORT_SYMBOL vmlinux 0xc16905f3 simple_link +EXPORT_SYMBOL vmlinux 0xc16f31d8 set_disk_ro +EXPORT_SYMBOL vmlinux 0xc1787afa try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0xc1bac468 end_page_writeback +EXPORT_SYMBOL vmlinux 0xc1d1a968 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0xc1d9aa7c bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xc1ee17ca test_and_change_bit +EXPORT_SYMBOL vmlinux 0xc20268b8 sock_register +EXPORT_SYMBOL vmlinux 0xc2113ff7 seq_write +EXPORT_SYMBOL vmlinux 0xc21c1ba9 dma_pool_free +EXPORT_SYMBOL vmlinux 0xc22d4fab nlmsg_notify +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc27b4650 dput +EXPORT_SYMBOL vmlinux 0xc27febd6 vfs_rename +EXPORT_SYMBOL vmlinux 0xc2959a72 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xc2a00f04 napi_gro_receive +EXPORT_SYMBOL vmlinux 0xc2ba0f58 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xc2c75dbd ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f60495 security_path_rename +EXPORT_SYMBOL vmlinux 0xc3287d48 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc3509793 drm_connector_attach_property +EXPORT_SYMBOL vmlinux 0xc38c4ca2 PAGE_SHARED +EXPORT_SYMBOL vmlinux 0xc38d4566 nf_reinject +EXPORT_SYMBOL vmlinux 0xc3b0752e inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xc3b61c7c ebus_dma_irq_enable +EXPORT_SYMBOL vmlinux 0xc3bf68d3 __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0xc3c4bf29 zero_fill_bio +EXPORT_SYMBOL vmlinux 0xc40d223c drm_get_encoder_name +EXPORT_SYMBOL vmlinux 0xc4213e6a security_path_truncate +EXPORT_SYMBOL vmlinux 0xc4234c9f phy_connect +EXPORT_SYMBOL vmlinux 0xc433d795 mdiobus_scan +EXPORT_SYMBOL vmlinux 0xc436a203 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xc4373d0e sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xc439686f idr_find +EXPORT_SYMBOL vmlinux 0xc4619c23 dm_io_client_create +EXPORT_SYMBOL vmlinux 0xc4918534 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xc491c393 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc49adb97 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xc4b24730 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0xc4fa849e dm_table_get +EXPORT_SYMBOL vmlinux 0xc4fb47be input_release_device +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc5367c5c alloc_tty_driver +EXPORT_SYMBOL vmlinux 0xc53875f2 udp_proc_register +EXPORT_SYMBOL vmlinux 0xc5406de7 start_tty +EXPORT_SYMBOL vmlinux 0xc558bc57 skb_unlink +EXPORT_SYMBOL vmlinux 0xc56c106f i2c_del_driver +EXPORT_SYMBOL vmlinux 0xc583da02 vfs_mknod +EXPORT_SYMBOL vmlinux 0xc58c08f4 tty_throttle +EXPORT_SYMBOL vmlinux 0xc5949fb4 key_task_permission +EXPORT_SYMBOL vmlinux 0xc595c9ed set_bh_page +EXPORT_SYMBOL vmlinux 0xc5b4adb6 arp_tbl +EXPORT_SYMBOL vmlinux 0xc5bc21e1 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xc5dca37c mnt_unpin +EXPORT_SYMBOL vmlinux 0xc5e830a9 commit_creds +EXPORT_SYMBOL vmlinux 0xc5f5e8fe set_bdi_congested +EXPORT_SYMBOL vmlinux 0xc5ffa9da xfrm_state_insert +EXPORT_SYMBOL vmlinux 0xc6056acd inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0xc6327b65 sun4v_chip_type +EXPORT_SYMBOL vmlinux 0xc647b6eb security_inode_init_security +EXPORT_SYMBOL vmlinux 0xc6884268 i2c_release_client +EXPORT_SYMBOL vmlinux 0xc68e38bd cfb_imageblit +EXPORT_SYMBOL vmlinux 0xc6a80427 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0xc6b5cab8 of_device_unregister +EXPORT_SYMBOL vmlinux 0xc6d4514c xfrm_state_add +EXPORT_SYMBOL vmlinux 0xc70b0a79 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0xc7190883 __lock_buffer +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72a7057 put_io_context +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc753e036 journal_dirty_data +EXPORT_SYMBOL vmlinux 0xc77e5e13 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0xc781e919 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xc7823d34 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a17d5f tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7dbdbb3 bd_release +EXPORT_SYMBOL vmlinux 0xc7ec28b0 memcmp +EXPORT_SYMBOL vmlinux 0xc7ed9c77 pci_reenable_device +EXPORT_SYMBOL vmlinux 0xc827b5c7 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xc8521b04 vfs_dq_drop +EXPORT_SYMBOL vmlinux 0xc86cfea2 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0xc87a6610 default_llseek +EXPORT_SYMBOL vmlinux 0xc8897c55 drm_getsarea +EXPORT_SYMBOL vmlinux 0xc88fcdd1 lro_flush_all +EXPORT_SYMBOL vmlinux 0xc897017f kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0xc89c50b5 inet_sendmsg +EXPORT_SYMBOL vmlinux 0xc89dd824 pci_scan_slot +EXPORT_SYMBOL vmlinux 0xc8a36a2a pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc9089225 drm_gtf_mode +EXPORT_SYMBOL vmlinux 0xc9102b01 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xc91fb9aa _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xc924ab13 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xc925f192 udplite_prot +EXPORT_SYMBOL vmlinux 0xc92e9d9a sk_reset_timer +EXPORT_SYMBOL vmlinux 0xc97bda59 km_policy_expired +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9a5b74a single_open +EXPORT_SYMBOL vmlinux 0xca188069 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xca3ad69d neigh_seq_start +EXPORT_SYMBOL vmlinux 0xca80514d __nla_reserve +EXPORT_SYMBOL vmlinux 0xcaa6ed52 vio_control_pkt_engine +EXPORT_SYMBOL vmlinux 0xcaafd8cb __module_put_and_exit +EXPORT_SYMBOL vmlinux 0xcac4d7ff _read_lock_bh +EXPORT_SYMBOL vmlinux 0xcae6377b _spin_lock_bh +EXPORT_SYMBOL vmlinux 0xcaee273c tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xcb66f2f8 pci_match_id +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb8ae4de seq_open +EXPORT_SYMBOL vmlinux 0xcb8ee5a5 del_timer +EXPORT_SYMBOL vmlinux 0xcb8f0566 i2c_transfer +EXPORT_SYMBOL vmlinux 0xcb8f2bb5 call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0xcb98fb9c fb_pan_display +EXPORT_SYMBOL vmlinux 0xcba3b153 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xcbb9d7db groups_free +EXPORT_SYMBOL vmlinux 0xcbbfc9a2 dev_mc_add +EXPORT_SYMBOL vmlinux 0xcbf3d9aa tcp_recvmsg +EXPORT_SYMBOL vmlinux 0xcbfe6008 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xcc001669 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc9a54fc input_inject_event +EXPORT_SYMBOL vmlinux 0xcca572ab tty_std_termios +EXPORT_SYMBOL vmlinux 0xcce03903 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0xcd0fcf20 journal_stop +EXPORT_SYMBOL vmlinux 0xcd182278 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0xcd36bca1 open_by_devnum +EXPORT_SYMBOL vmlinux 0xcd737520 drm_mm_put_block +EXPORT_SYMBOL vmlinux 0xcd7b0e8f pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0xcdaf52a1 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xcdb4c9f7 notify_change +EXPORT_SYMBOL vmlinux 0xcdbe97b6 fb_blank +EXPORT_SYMBOL vmlinux 0xcdc5f427 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0xcdca72e3 blk_start_queue +EXPORT_SYMBOL vmlinux 0xcde51bc6 do_munmap +EXPORT_SYMBOL vmlinux 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL vmlinux 0xcdf8a514 mod_timer +EXPORT_SYMBOL vmlinux 0xce1296d4 dma_ops +EXPORT_SYMBOL vmlinux 0xce3699c4 check_disk_change +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce3d2424 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0xce3f6948 pci_dma_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0xce44a27a __bio_clone +EXPORT_SYMBOL vmlinux 0xce4cec25 seq_path +EXPORT_SYMBOL vmlinux 0xce542489 invalidate_inodes +EXPORT_SYMBOL vmlinux 0xce56d3a1 key_put +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce871f01 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xce9af96c grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xceadca60 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0xcec027f8 sock_kfree_s +EXPORT_SYMBOL vmlinux 0xceec3142 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xceee1181 __alloc_skb +EXPORT_SYMBOL vmlinux 0xcf00deb6 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xcf029dc2 drm_mode_remove +EXPORT_SYMBOL vmlinux 0xcf0b9c37 drm_core_reclaim_buffers +EXPORT_SYMBOL vmlinux 0xcf232d0d default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0xcf4bbc08 inode_needs_sync +EXPORT_SYMBOL vmlinux 0xcf7a8c69 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0xcf9424a2 pci_release_regions +EXPORT_SYMBOL vmlinux 0xcfbd032c __seq_open_private +EXPORT_SYMBOL vmlinux 0xcfbfb646 vfs_readdir +EXPORT_SYMBOL vmlinux 0xcfe13710 sparc64_get_clock_tick +EXPORT_SYMBOL vmlinux 0xcfebb2c3 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd0079c64 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0xd0110097 brioctl_set +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd0219fb8 search_binary_handler +EXPORT_SYMBOL vmlinux 0xd0267df4 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xd02af3a5 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xd031d210 pci_device_to_OF_node +EXPORT_SYMBOL vmlinux 0xd033a3b8 unload_nls +EXPORT_SYMBOL vmlinux 0xd03c9d16 generic_file_mmap +EXPORT_SYMBOL vmlinux 0xd03e800a mdiobus_register +EXPORT_SYMBOL vmlinux 0xd0438521 netif_napi_del +EXPORT_SYMBOL vmlinux 0xd0676c0d nf_afinfo +EXPORT_SYMBOL vmlinux 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL vmlinux 0xd0921cee input_filter_device +EXPORT_SYMBOL vmlinux 0xd09a6c3e kthread_bind +EXPORT_SYMBOL vmlinux 0xd0be1a2e __memset +EXPORT_SYMBOL vmlinux 0xd0c55189 proc_mkdir +EXPORT_SYMBOL vmlinux 0xd0cdaf77 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0xd0ec3eee panic_notifier_list +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0f8c9e0 ldc_alloc +EXPORT_SYMBOL vmlinux 0xd108b857 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xd114b3db call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0xd11e7422 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xd1617cc1 may_umount +EXPORT_SYMBOL vmlinux 0xd16bfac0 icmp_send +EXPORT_SYMBOL vmlinux 0xd171ddc0 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0xd178b834 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0xd1a69f50 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0xd1b96278 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0xd1e7b01e drm_compat_ioctl +EXPORT_SYMBOL vmlinux 0xd203b454 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xd2136fd4 dev_close +EXPORT_SYMBOL vmlinux 0xd21af7e5 completion_done +EXPORT_SYMBOL vmlinux 0xd24c27d6 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd2594e25 dqget +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd267e5cd jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0xd271b069 loop_register_transfer +EXPORT_SYMBOL vmlinux 0xd28975e2 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd29f044c bio_alloc +EXPORT_SYMBOL vmlinux 0xd29f40d3 create_mnt_ns +EXPORT_SYMBOL vmlinux 0xd2a3da2d mempool_alloc +EXPORT_SYMBOL vmlinux 0xd2aa0292 _read_unlock_bh +EXPORT_SYMBOL vmlinux 0xd2aeec6d __pci_register_driver +EXPORT_SYMBOL vmlinux 0xd2af9ee4 remove_proc_entry +EXPORT_SYMBOL vmlinux 0xd2dc378a mpage_readpage +EXPORT_SYMBOL vmlinux 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL vmlinux 0xd30e2654 __dst_free +EXPORT_SYMBOL vmlinux 0xd317c418 neigh_ifdown +EXPORT_SYMBOL vmlinux 0xd3360159 vga_client_register +EXPORT_SYMBOL vmlinux 0xd336be26 dst_alloc +EXPORT_SYMBOL vmlinux 0xd3750a6e tcp_ioctl +EXPORT_SYMBOL vmlinux 0xd3798bfa pskb_copy +EXPORT_SYMBOL vmlinux 0xd3a4749b dm_io +EXPORT_SYMBOL vmlinux 0xd3a728f0 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3ca9528 drm_mode_probed_add +EXPORT_SYMBOL vmlinux 0xd3d3eb2c jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0xd3d59779 simple_empty +EXPORT_SYMBOL vmlinux 0xd3dc2178 km_policy_notify +EXPORT_SYMBOL vmlinux 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL vmlinux 0xd422125d send_sig +EXPORT_SYMBOL vmlinux 0xd42e128a nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xd46ee592 dev_get_by_name +EXPORT_SYMBOL vmlinux 0xd4988124 phy_start_aneg +EXPORT_SYMBOL vmlinux 0xd49f1ef6 test_and_clear_bit +EXPORT_SYMBOL vmlinux 0xd4df2979 put_mnt_ns +EXPORT_SYMBOL vmlinux 0xd4f26e2b nla_reserve +EXPORT_SYMBOL vmlinux 0xd4f9248e irq_of_parse_and_map +EXPORT_SYMBOL vmlinux 0xd51377ff generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd53b1064 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0xd53cb49e __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xd55113a3 vga_tryget +EXPORT_SYMBOL vmlinux 0xd55a0251 of_device_register +EXPORT_SYMBOL vmlinux 0xd56ba0a0 sun4v_hvapi_register +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd5f397db kill_litter_super +EXPORT_SYMBOL vmlinux 0xd6160582 drm_mm_search_free +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd635fcb3 lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL vmlinux 0xd66723d9 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xd69ce98e d_instantiate +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6b7ec99 kill_pid +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f0f559 idprom +EXPORT_SYMBOL vmlinux 0xd7236010 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7be7191 pci_unmap_sg +EXPORT_SYMBOL vmlinux 0xd7c6a97b journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xd7cfdd0d jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xd7ed17dd posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xd82c0389 drm_get_dev +EXPORT_SYMBOL vmlinux 0xd832c9e5 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd8477c33 d_alloc +EXPORT_SYMBOL vmlinux 0xd8959f23 auxio_set_led +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8c37762 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0xd8ce6bcd of_parse_phandle +EXPORT_SYMBOL vmlinux 0xd8d8c41c phy_stop +EXPORT_SYMBOL vmlinux 0xd8e45c10 qdisc_list_del +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd9004f23 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xd908c444 input_open_device +EXPORT_SYMBOL vmlinux 0xd942a961 fddi_type_trans +EXPORT_SYMBOL vmlinux 0xd97f75ac xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9d18997 thaw_process +EXPORT_SYMBOL vmlinux 0xd9d3829a blk_rq_init +EXPORT_SYMBOL vmlinux 0xd9daeb99 __bread +EXPORT_SYMBOL vmlinux 0xd9de717d copy_io_context +EXPORT_SYMBOL vmlinux 0xd9ed82ab udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xd9f3c141 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0xda059c05 sbusfb_mmap_helper +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3d2c3c prom_feval +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda500239 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xda5df076 get_sb_ns +EXPORT_SYMBOL vmlinux 0xda5f703f find_or_create_page +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda84aae4 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xda88ded5 fasync_helper +EXPORT_SYMBOL vmlinux 0xda88fb01 textsearch_register +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xdaa3fc8b bdi_register +EXPORT_SYMBOL vmlinux 0xdaab2352 dquot_drop +EXPORT_SYMBOL vmlinux 0xdab2ac49 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xdae31fc4 request_key_async +EXPORT_SYMBOL vmlinux 0xdbaa3774 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xdbb5cbd4 xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xdbbcd81c sunserial_unregister_minors +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc05b8df kernel_read +EXPORT_SYMBOL vmlinux 0xdc1341b1 mdesc_arc_target +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc744b75 ps2_init +EXPORT_SYMBOL vmlinux 0xdc90541e uart_update_timeout +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb5671d strlen +EXPORT_SYMBOL vmlinux 0xdcbc1512 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xdcca3a4e generic_delete_inode +EXPORT_SYMBOL vmlinux 0xdcd9cc50 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xdce14f6c tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xdced129f xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xdd1197c8 xor_vis_3 +EXPORT_SYMBOL vmlinux 0xdd11e3be pci_select_bars +EXPORT_SYMBOL vmlinux 0xdd183f04 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xdd298db4 __pagevec_release +EXPORT_SYMBOL vmlinux 0xdd329394 fb_set_cmap +EXPORT_SYMBOL vmlinux 0xdd3ed139 read_cache_page_async +EXPORT_SYMBOL vmlinux 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL vmlinux 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL vmlinux 0xdd50e2dc sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0xdd5861ea iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0xdd6c33df jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0xdd74373b pci_bus_type +EXPORT_SYMBOL vmlinux 0xde06ca56 dev_mc_sync +EXPORT_SYMBOL vmlinux 0xde0d4de3 single_release +EXPORT_SYMBOL vmlinux 0xde0fd2d1 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0xde182805 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0xde1e6037 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0xde341aac phy_start_interrupts +EXPORT_SYMBOL vmlinux 0xde589e60 xor_vis_2 +EXPORT_SYMBOL vmlinux 0xde658e62 free_buffer_head +EXPORT_SYMBOL vmlinux 0xde7502a8 PAGE_KERNEL +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde7d72a9 mntput_no_expire +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdef90086 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0xdefe4d5c sk_filter +EXPORT_SYMBOL vmlinux 0xdf0ecb64 check_disk_size_change +EXPORT_SYMBOL vmlinux 0xdf1d963d tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0xdf492dfa ipv4_specific +EXPORT_SYMBOL vmlinux 0xdf4d2dce pci_pme_capable +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf61180f get_fs_type +EXPORT_SYMBOL vmlinux 0xdf663d02 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0xdf8fef53 prom_getproplen +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf9f3f0a dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xdfa0a120 freeze_bdev +EXPORT_SYMBOL vmlinux 0xdfa75b18 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xdfb7c842 node_states +EXPORT_SYMBOL vmlinux 0xdfb86119 add_disk +EXPORT_SYMBOL vmlinux 0xdfca2428 mii_phy_probe +EXPORT_SYMBOL vmlinux 0xdfeff14d dq_data_lock +EXPORT_SYMBOL vmlinux 0xe0222b85 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0xe040c0e2 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0xe042c57d _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0xe05b118e set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0xe0656552 vfs_create +EXPORT_SYMBOL vmlinux 0xe06e4199 cpu_all_bits +EXPORT_SYMBOL vmlinux 0xe0710c8c dev_unicast_add +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe0809bdc interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xe08fd3c9 registered_fb +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0b73dc8 udp_table +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0be173b textsearch_destroy +EXPORT_SYMBOL vmlinux 0xe0d8febc __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0xe0dcb911 smp_call_function_many +EXPORT_SYMBOL vmlinux 0xe0ee1f78 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe1864ad8 pci_iounmap +EXPORT_SYMBOL vmlinux 0xe1a44bac inet_ioctl +EXPORT_SYMBOL vmlinux 0xe1ea8c1d task_nice +EXPORT_SYMBOL vmlinux 0xe21d6c23 __napi_schedule +EXPORT_SYMBOL vmlinux 0xe21dc188 dquot_transfer +EXPORT_SYMBOL vmlinux 0xe223a10b journal_ack_err +EXPORT_SYMBOL vmlinux 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe24f6fd3 console_stop +EXPORT_SYMBOL vmlinux 0xe28aaf1c kmem_cache_name +EXPORT_SYMBOL vmlinux 0xe293f34a generic_file_direct_write +EXPORT_SYMBOL vmlinux 0xe2a76311 ldc_connect +EXPORT_SYMBOL vmlinux 0xe2c3cac6 sync_inode +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2d6153a drm_core_ioremap_wc +EXPORT_SYMBOL vmlinux 0xe2fcca9c splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0xe3007946 vio_link_state_change +EXPORT_SYMBOL vmlinux 0xe31278cf i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xe32b7197 seq_lseek +EXPORT_SYMBOL vmlinux 0xe384658b km_state_notify +EXPORT_SYMBOL vmlinux 0xe3911c9f tty_devnum +EXPORT_SYMBOL vmlinux 0xe3aaaa39 jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xe3abfbdc mac_find_mode +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3da2a6b drm_mm_get_block_range_generic +EXPORT_SYMBOL vmlinux 0xe3dbf7f0 vmtruncate +EXPORT_SYMBOL vmlinux 0xe3e12008 __first_cpu +EXPORT_SYMBOL vmlinux 0xe3f872bc drm_sg_alloc +EXPORT_SYMBOL vmlinux 0xe3ff807e drm_vblank_put +EXPORT_SYMBOL vmlinux 0xe46d94dd slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0xe4710c8c igrab +EXPORT_SYMBOL vmlinux 0xe48ac90e mnt_pin +EXPORT_SYMBOL vmlinux 0xe4913dc6 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0xe4b7cf32 nf_log_packet +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe500c548 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0xe508e608 make_bad_inode +EXPORT_SYMBOL vmlinux 0xe51c0b47 bio_free +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe52a1a86 kobject_del +EXPORT_SYMBOL vmlinux 0xe52c02cc ps2_handle_response +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5ac9bd9 blk_make_request +EXPORT_SYMBOL vmlinux 0xe5b28e46 init_buffer +EXPORT_SYMBOL vmlinux 0xe5bbe378 iunique +EXPORT_SYMBOL vmlinux 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5dc4994 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0xe5dd22c2 dev_remove_pack +EXPORT_SYMBOL vmlinux 0xe5e08285 down_write_trylock +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe612271b skb_queue_tail +EXPORT_SYMBOL vmlinux 0xe615a341 pci_free_consistent +EXPORT_SYMBOL vmlinux 0xe68a3c92 journal_forget +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe70a814d otg_put_transceiver +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe7169c7a ldc_state +EXPORT_SYMBOL vmlinux 0xe74543ca eth_type_trans +EXPORT_SYMBOL vmlinux 0xe7522405 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xe7756628 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xe782899e prom_searchsiblings +EXPORT_SYMBOL vmlinux 0xe797dbdd dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0xe7a0c7d2 gen_new_estimator +EXPORT_SYMBOL vmlinux 0xe7cf5bdf register_gifconf +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7e45582 dm_register_target +EXPORT_SYMBOL vmlinux 0xe808d7b5 d_validate +EXPORT_SYMBOL vmlinux 0xe8116e08 __kmalloc_node +EXPORT_SYMBOL vmlinux 0xe815eb10 have_submounts +EXPORT_SYMBOL vmlinux 0xe8355c50 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0xe86561ae vfs_mkdir +EXPORT_SYMBOL vmlinux 0xe87ab34e xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xe87e7338 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0xe88bdc28 __down_write_trylock +EXPORT_SYMBOL vmlinux 0xe89f3d7e vfs_path_lookup +EXPORT_SYMBOL vmlinux 0xe89fda9c page_follow_link_light +EXPORT_SYMBOL vmlinux 0xe8b594a0 netdev_features_change +EXPORT_SYMBOL vmlinux 0xe8b82e64 vfs_quota_on +EXPORT_SYMBOL vmlinux 0xe8c0edc1 input_set_keycode +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8dbafef __next_cpu +EXPORT_SYMBOL vmlinux 0xe8dfcdf9 __csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL vmlinux 0xe92b28bd close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xe9462061 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0xe95e21be create_empty_buffers +EXPORT_SYMBOL vmlinux 0xe97a33a4 elevator_exit +EXPORT_SYMBOL vmlinux 0xe9c90e2c cad_pid +EXPORT_SYMBOL vmlinux 0xe9f3a4e4 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea1d9ca3 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0xea474b13 pci_dma_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0xea52e5c6 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0xea587593 set_device_ro +EXPORT_SYMBOL vmlinux 0xea5b7fac vfs_symlink +EXPORT_SYMBOL vmlinux 0xea69d52e skb_under_panic +EXPORT_SYMBOL vmlinux 0xea9790e7 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0xea9f42fc of_find_node_by_path +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xead86ea0 nonseekable_open +EXPORT_SYMBOL vmlinux 0xeae60610 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0xeb0d57a1 blk_insert_request +EXPORT_SYMBOL vmlinux 0xeb230c2f __sk_dst_check +EXPORT_SYMBOL vmlinux 0xeb3ef8bc __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xeb493f15 security_path_mkdir +EXPORT_SYMBOL vmlinux 0xeb779631 security_path_rmdir +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeb9650b6 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xebb790cc vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebc45302 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebef62d0 lookup_one_len +EXPORT_SYMBOL vmlinux 0xec081a22 drm_irq_install +EXPORT_SYMBOL vmlinux 0xec3f9c84 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xec492e2d lock_rename +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec7b2063 ldc_copy +EXPORT_SYMBOL vmlinux 0xecb521be vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xecc198bf kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xecc1f7b4 blk_complete_request +EXPORT_SYMBOL vmlinux 0xed572ff9 register_sysrq_key +EXPORT_SYMBOL vmlinux 0xed5ce3ab of_set_property +EXPORT_SYMBOL vmlinux 0xed615b03 down_interruptible +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedd799d6 security_path_unlink +EXPORT_SYMBOL vmlinux 0xede7f198 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0xee049404 simple_rmdir +EXPORT_SYMBOL vmlinux 0xee18e892 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3a2b04 ps2_command +EXPORT_SYMBOL vmlinux 0xee3e8377 lease_modify +EXPORT_SYMBOL vmlinux 0xee7bb619 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0xee87437a jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xee949b6b i2c_get_adapter +EXPORT_SYMBOL vmlinux 0xeea33bad clear_inode +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeaf8200 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xeefc7a58 kernel_accept +EXPORT_SYMBOL vmlinux 0xef11f35f vmalloc_to_page +EXPORT_SYMBOL vmlinux 0xef335d40 mdesc_grab +EXPORT_SYMBOL vmlinux 0xef4319a0 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef5f556e simple_write_begin +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xefaeebe6 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xefc39fcd sync_inodes_sb +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefefc442 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf00a90ae pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xf020b4f6 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xf031b66a jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xf06f9c64 drm_idlelock_release +EXPORT_SYMBOL vmlinux 0xf0798ce1 of_ioremap +EXPORT_SYMBOL vmlinux 0xf07f9ef3 install_exec_creds +EXPORT_SYMBOL vmlinux 0xf0819576 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xf09103a6 simple_fsync +EXPORT_SYMBOL vmlinux 0xf09a3418 dm_table_get_md +EXPORT_SYMBOL vmlinux 0xf0b97124 genphy_suspend +EXPORT_SYMBOL vmlinux 0xf0db466f sock_no_sendpage +EXPORT_SYMBOL vmlinux 0xf0e5ef63 inet_add_protocol +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fef4bb skb_copy_expand +EXPORT_SYMBOL vmlinux 0xf1337e6b vm_insert_page +EXPORT_SYMBOL vmlinux 0xf1393b40 put_page +EXPORT_SYMBOL vmlinux 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL vmlinux 0xf147aad1 mdio_bus_type +EXPORT_SYMBOL vmlinux 0xf16f87dd arp_create +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf1893b04 napi_gro_flush +EXPORT_SYMBOL vmlinux 0xf18bd1b2 mark_page_accessed +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1c3b00e copy_in_user_fixup +EXPORT_SYMBOL vmlinux 0xf1d97ed4 arp_broken_ops +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf226b8c4 tcf_hash_search +EXPORT_SYMBOL vmlinux 0xf245f2d3 block_prepare_write +EXPORT_SYMBOL vmlinux 0xf24ef535 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0xf25fe836 filemap_fault +EXPORT_SYMBOL vmlinux 0xf2682dc8 nobh_write_end +EXPORT_SYMBOL vmlinux 0xf2737cef drm_encoder_cleanup +EXPORT_SYMBOL vmlinux 0xf278266c key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0xf29f32ec sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0xf2a88fbf __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xf2ba217f inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xf2f027a2 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xf2fa1faa skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0xf307eb18 netif_carrier_on +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf319e8c9 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf351b0c5 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39ef360 clocksource_register +EXPORT_SYMBOL vmlinux 0xf3a35acf mpage_writepages +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3cde652 cdev_init +EXPORT_SYMBOL vmlinux 0xf3e15afd bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0xf3edeed7 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xf4276bbd phy_print_status +EXPORT_SYMBOL vmlinux 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL vmlinux 0xf4624c39 invalidate_bdev +EXPORT_SYMBOL vmlinux 0xf4a5289a vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xf4bd7474 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0xf4d3bca9 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0xf4dc561f dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xf4e43d2b mdiobus_free +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf4fb843b drm_framebuffer_init +EXPORT_SYMBOL vmlinux 0xf508782b sk_dst_check +EXPORT_SYMBOL vmlinux 0xf5143ab4 rtnl_notify +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf532f7ca of_set_property_mutex +EXPORT_SYMBOL vmlinux 0xf533177d jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf542d7c9 submit_bh +EXPORT_SYMBOL vmlinux 0xf5648b6f fb_set_var +EXPORT_SYMBOL vmlinux 0xf5a5dd4f iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5d52d13 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf60efa23 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0xf61bbe75 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0xf632f5e6 of_iounmap +EXPORT_SYMBOL vmlinux 0xf693b8bd redraw_screen +EXPORT_SYMBOL vmlinux 0xf69ee4a9 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0xf6a1c0b0 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xf6aeeb15 suncore_mouse_baud_cflag_next +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6e507d6 nla_put +EXPORT_SYMBOL vmlinux 0xf6e950c5 generic_fillattr +EXPORT_SYMBOL vmlinux 0xf6eb56ed sock_no_connect +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf7506c41 __any_online_cpu +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf761c3ae copy_to_user_fixup +EXPORT_SYMBOL vmlinux 0xf78b83d3 __down_read +EXPORT_SYMBOL vmlinux 0xf78d0350 set_create_files_as +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf7b38352 dma_pool_create +EXPORT_SYMBOL vmlinux 0xf7ca046e napi_frags_finish +EXPORT_SYMBOL vmlinux 0xf7e3da97 drm_mode_connector_attach_encoder +EXPORT_SYMBOL vmlinux 0xf7ebd1c0 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0xf804bbb8 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xf80c69d2 __strlen_user +EXPORT_SYMBOL vmlinux 0xf8191240 add_wait_queue +EXPORT_SYMBOL vmlinux 0xf8258297 security_path_link +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf83d0f5c tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0xf84b38c3 atomic_add_ret +EXPORT_SYMBOL vmlinux 0xf85cb864 mapping_tagged +EXPORT_SYMBOL vmlinux 0xf86b3ff3 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0xf870db0a compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xf886f242 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0xf893b765 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xf894a803 ldc_write +EXPORT_SYMBOL vmlinux 0xf89d98a9 tty_hangup +EXPORT_SYMBOL vmlinux 0xf8c9e558 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0xf8ec9526 proc_symlink +EXPORT_SYMBOL vmlinux 0xf8ee934a dev_set_mtu +EXPORT_SYMBOL vmlinux 0xf902e86d __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xf92bbcda input_allocate_device +EXPORT_SYMBOL vmlinux 0xf9520225 skb_seq_read +EXPORT_SYMBOL vmlinux 0xf98afc2e die_if_kernel +EXPORT_SYMBOL vmlinux 0xf9936cc0 qdisc_reset +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9efe998 vfs_readv +EXPORT_SYMBOL vmlinux 0xfa5c1389 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xfa661b11 seq_release +EXPORT_SYMBOL vmlinux 0xfa74b67c tty_name +EXPORT_SYMBOL vmlinux 0xfa7855b8 phy_disconnect +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfa976585 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0xfa9c06f9 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0xfad16907 mempool_resize +EXPORT_SYMBOL vmlinux 0xfad9aa73 sock_map_fd +EXPORT_SYMBOL vmlinux 0xfaf264b1 phy_attach +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb057df4 dquot_acquire +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb3e3a74 devm_ioremap +EXPORT_SYMBOL vmlinux 0xfb472d74 bio_map_user +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb8641a1 free_netdev +EXPORT_SYMBOL vmlinux 0xfb928bd3 phy_detach +EXPORT_SYMBOL vmlinux 0xfbacb378 of_platform_bus_type +EXPORT_SYMBOL vmlinux 0xfbd8cade __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0xfbe08a83 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfbff4243 key_validate +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc2a11a8 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc503184 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0xfc75be54 generic_write_checks +EXPORT_SYMBOL vmlinux 0xfc97e45e boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcaa6ebe tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xfcb49a45 skb_clone +EXPORT_SYMBOL vmlinux 0xfcc00c33 tcf_exts_change +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfccd7825 skb_make_writable +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd10460b dm_put_device +EXPORT_SYMBOL vmlinux 0xfd1af8a4 journal_release_buffer +EXPORT_SYMBOL vmlinux 0xfd1d3b6c inet_select_addr +EXPORT_SYMBOL vmlinux 0xfd5e31bd udplite_table +EXPORT_SYMBOL vmlinux 0xfd9028e4 lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdc5f169 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xfdde8c2a register_console +EXPORT_SYMBOL vmlinux 0xfde17847 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xfde704e1 usb_gadget_register_driver +EXPORT_SYMBOL vmlinux 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe2f8287 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe3ec4c6 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0xfe50185d __f_setown +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe78010d xor_niagara_4 +EXPORT_SYMBOL vmlinux 0xfe7b3077 lro_receive_frags +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe7d912c bdev_read_only +EXPORT_SYMBOL vmlinux 0xfec05366 sun_do_break +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfeea700c ebus_dma_addr +EXPORT_SYMBOL vmlinux 0xfef2ddb3 net2280_set_fifo_mode +EXPORT_SYMBOL vmlinux 0xfef2f939 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0xfef93f2e qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0xff0d47a8 d_invalidate +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff2a5a13 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xff66fdfb mpage_readpages +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6b770e gen_pool_destroy +EXPORT_SYMBOL vmlinux 0xff6fadfe of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0xff70a4e2 unbind_con_driver +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xff9fc899 neigh_table_clear +EXPORT_SYMBOL vmlinux 0xffaeeb23 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xffb700ac alloc_pages_current +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xb6e55df1 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x9e7fe704 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x10067f81 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x9f1125a5 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x926726c6 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xff5a64de async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x80b391e0 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xa80b565e async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xec5e3746 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x8d7d1caa async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xd02af11a async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x262dd1f4 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x28f9ae3e cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x84387f75 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x9eb85e0f cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xad035572 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xd23a1782 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0xd92bfac2 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x3adf6ab2 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/libata 0x004e78b1 ata_std_bios_param +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL drivers/ata/libata 0x00ba0f51 ata_eh_freeze_port +EXPORT_SYMBOL_GPL drivers/ata/libata 0x00ce9028 ata_sff_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0x032d0f36 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libata 0x06e28aa2 ata_port_abort +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0718de92 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL drivers/ata/libata 0x072f33f6 ata_sff_prereset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x09f4bd16 dev_attr_unload_heads +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0f73c806 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL drivers/ata/libata 0x112e571a ata_bmdma_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1367e9d6 ata_sff_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libata 0x178c5732 ata_sas_port_stop +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1800df35 sata_link_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1b6d9d20 ata_sff_pause +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1f504b9d ata_host_detach +EXPORT_SYMBOL_GPL drivers/ata/libata 0x20df80cd sata_pmp_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x22dde347 ata_dev_next +EXPORT_SYMBOL_GPL drivers/ata/libata 0x25851636 sata_scr_read +EXPORT_SYMBOL_GPL drivers/ata/libata 0x26989c17 ata_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x282c22a8 ata_do_dev_read_id +EXPORT_SYMBOL_GPL drivers/ata/libata 0x28862e00 ata_sff_host_intr +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2a2b0777 ata_sff_postreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2f9461fe sata_std_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x37615cad ata_do_eh +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3a9e7245 ata_link_abort +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3c75f0b9 ata_std_postreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3c8b4c23 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3ef731d8 ata_eh_qc_retry +EXPORT_SYMBOL_GPL drivers/ata/libata 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL drivers/ata/libata 0x47800bfc ata_dev_pair +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4780aa3d ata_sas_port_alloc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4926149c dev_attr_sw_activity +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4b080a80 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4b3b6e87 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4b76e83c ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4bc9bff3 ata_port_pbar_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4d2bb5d5 ata_bmdma_stop +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4d6619b3 ata_sff_tf_load +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL drivers/ata/libata 0x50903849 ata_sff_irq_on +EXPORT_SYMBOL_GPL drivers/ata/libata 0x51080bec ata_sff_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x513745e9 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x525ea870 ata_eh_thaw_port +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5667b886 sata_link_debounce +EXPORT_SYMBOL_GPL drivers/ata/libata 0x570112b4 ata_cable_80wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5733db77 sata_scr_write +EXPORT_SYMBOL_GPL drivers/ata/libata 0x57b6aec5 ata_sff_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5b7e2de0 ata_scsi_ioctl +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5c4d6ee8 ata_port_probe +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5e94b65c ata_port_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x611698aa ata_qc_complete_multiple +EXPORT_SYMBOL_GPL drivers/ata/libata 0x65d92fa8 ata_link_next +EXPORT_SYMBOL_GPL drivers/ata/libata 0x65e620ff ata_scsi_queuecmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6615450d ata_link_offline +EXPORT_SYMBOL_GPL drivers/ata/libata 0x669fe455 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL drivers/ata/libata 0x693ebbbe ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL drivers/ata/libata 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6f82c9dd ata_pio_queue_task +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6fa95f4a sata_link_resume +EXPORT_SYMBOL_GPL drivers/ata/libata 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x71248e7a ata_wait_after_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL drivers/ata/libata 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x74e72771 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7649cae3 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL drivers/ata/libata 0x78c36b6b ata_sas_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x78fe4b27 ata_scsi_simulate +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7a324b4d ata_base_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7b293a7e dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7d2b7e94 sata_pmp_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7d3b6ec9 ata_timing_compute +EXPORT_SYMBOL_GPL drivers/ata/libata 0x80af00a5 ata_sas_slave_configure +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x86097d70 ata_std_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x865b6408 ata_sff_dev_select +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8ccaeea4 ata_sff_data_xfer +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9184ef9f ata_sas_queuecmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x91e258c4 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x927bf719 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libata 0x940a9317 ata_ehi_push_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x996b927e ata_sff_check_status +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9a0e409a dev_attr_em_message_type +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9ad57557 ata_sff_thaw +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9c3d72f1 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9d1408ec ata_host_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9ddc5272 ata_sff_wait_ready +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa087fc03 ata_sff_irq_clear +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa3dfcb36 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa59e4032 ata_qc_complete +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa5a03bb3 ata_sff_exec_command +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa8f2e2b0 ata_slave_link_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xaa193915 sata_scr_valid +EXPORT_SYMBOL_GPL drivers/ata/libata 0xaa863c64 ata_pci_remove_one +EXPORT_SYMBOL_GPL drivers/ata/libata 0xab21bb15 ata_sff_softreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xac8b4877 ata_port_disable +EXPORT_SYMBOL_GPL drivers/ata/libata 0xacdd45b9 ata_std_qc_defer +EXPORT_SYMBOL_GPL drivers/ata/libata 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libata 0xaf50ee60 ata_cable_40wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb0c0e506 ata_sg_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb3e2a9cb dev_attr_em_message +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb50cc271 ata_sas_port_destroy +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb606e80a pci_test_config_bits +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb87e9aa0 ata_do_set_mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbb0075c9 ata_host_register +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbb2c4284 ata_cable_ignore +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbecc26af ata_eh_qc_complete +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbf30e5b6 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc5fde31a ata_sff_port_start32 +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc797e9fc sata_scr_write_flush +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc8289e2e ata_dev_disable +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc89d4274 sata_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc98e81b2 ata_cable_unknown +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcab6bb53 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcad4c985 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcbac1d04 ata_sff_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcd213889 ata_bmdma_setup +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd1d3b6f4 ata_sff_hsm_move +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd33873e9 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd800187b ata_bmdma_status +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd938924b ata_noop_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd989fee3 ata_std_prereset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xda9c4120 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL drivers/ata/libata 0xdce278ee ata_port_schedule_eh +EXPORT_SYMBOL_GPL drivers/ata/libata 0xdd5beba4 ata_sff_tf_read +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe2c7b9e3 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe54d90de ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe663f7e4 ata_pio_need_iordy +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe6b3df1b ata_sff_dma_pause +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe8bbd969 ata_sas_port_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe976bd8f ata_sff_freeze +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe989b46a ata_host_alloc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL drivers/ata/libata 0xeb5fbc8f ata_port_freeze +EXPORT_SYMBOL_GPL drivers/ata/libata 0xee4d990d sata_async_notification +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf10da17a ata_cable_sata +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf3fc80a6 ata_sff_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf5acc1c0 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf7a309a1 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf7efc295 ata_link_online +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf9de5cf4 ata_host_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf9ffc8f9 sata_sff_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfac313bd sata_set_spd +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfb0a42f9 ata_dummy_port_info +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfc0610af ata_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfe65155b ata_dummy_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfead11e7 ata_bus_reset +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0xaff0187d sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x0be31ba6 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x0d043741 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x182e16e5 tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1c3f4967 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1f569aa4 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x229e185a tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x54daf856 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x5afe7af1 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x664e4d8c tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7353e845 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x8800a1c3 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9eb259fd tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa2277b07 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xbb28ca0d tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xbd2489a8 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc35646d7 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd43700c0 tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe0a0a43b tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe79e5e4f tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf48e6f70 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf9cff5c8 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfbebbf43 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfe6f4674 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/connector/cn 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL drivers/connector/cn 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL drivers/connector/cn 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x12ed83fd hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1b377aea hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x32013422 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3a9439c6 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x44c6202e hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4aa4739c hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4e5ef912 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4feb5c02 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x53cb523b hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5a4ffe75 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5e7effd7 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7da4b90c hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x933d3c60 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x980ee906 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9e21f466 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa920f707 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xae5fce2e hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbdcb8722 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc4d801f7 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc688f421 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd2d4b78a hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd8c4686f hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xefa190c8 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf7063d1d hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfd44f585 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x13e98871 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x29c49210 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x1fb63cc2 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x2e95e091 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x45d9a1f7 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xd1a47777 lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xdc3dcde1 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xe8b9fd30 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xff1aeaef hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/infiniband/hw/ipath/ib_ipath 0x1514b2b2 ipath_debug +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xe20a11b3 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x07cea1a4 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x2ce79395 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x59e85837 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x5a260e18 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x67ea7d85 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x6fba7472 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7a5460df wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb2ecf6b0 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb6fe6041 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xbe9a0dae wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xc6872a63 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf03f507e wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x1a1a5326 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x1ef5d558 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2c0979ce gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x363fc33d gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4afe1f4e gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6ef5fa05 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x775f4d0e gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x7cb70d55 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9aada4ed gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xa2398216 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xa938f08a gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb3fd9e26 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc796af32 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xcee6f191 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xed315f0b gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xf4460768 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x3fc1c581 led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x4d6b0e93 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xbd6d28b5 led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xc05e2fee led_classdev_resume +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x32311d26 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x791937c2 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x0bbdbe5e dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x129423e1 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x186d9785 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x1a64f89b dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x2c8f01b9 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x319b44aa dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x410d5a37 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x54793ab8 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5a8f4a3a dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x6befa712 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x6f811056 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7934cb0d dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x89dac6f6 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xb5225976 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc0c294e5 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc1fc29e1 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc8284a5d dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc97af0ab dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd46d2fa9 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd5b9137e dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf77c68e2 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x2fd48138 md_new_event +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x33add5d0 md_allow_write +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x4ce6b4c0 md_do_sync +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x9ba83101 sync_page_io +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0981a33e ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x576cb7e9 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xca8378c1 ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x06706702 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x0a7841f2 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x5e4c4d66 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x891fd02a saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xbf7162b8 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xc587f447 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd2efa82b saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd72be94b saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdb5c4827 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdcccfe69 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe7f3be86 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1e0e6533 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4107bad2 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x55646d7d saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x59a9e9c8 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xb1645f55 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xd7fdb347 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xf0cb9abe saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0x4ef444fa microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x5b47d18d tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0xb392a842 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x00e99797 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xab8297ea tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xf6fbafba tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x7ae97041 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x91ca6940 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x5ca25b40 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x311c6621 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x53bd5f26 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x58c87e9a cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x60752607 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x69ff749b cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x6bc359ce cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x71e138da cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x76fcb8c6 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9460c413 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xd7fdd558 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfbe137b7 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x1e60a381 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x1fb17047 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x360c17f8 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xb8fe682e saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xbe647519 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x3432ec04 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x5d385d8b v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x9a1108eb v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf40e4f68 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0x539c3bdc v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x48fa4a52 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x885f6769 v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x9a19e379 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xef72dfce v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x00932dfa videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x10c4478d videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x1174b875 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x14e0892c __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2ee655a8 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3317fd22 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4aa89ada videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6553cb76 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7152173f videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x863de8bc videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x87e2ab12 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x8e070ba8 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9339239e videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x985a2967 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9931c830 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa50272c1 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa6f380ad videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa816754b videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa8bdce38 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xacefaf51 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc57a97a9 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe108da5d videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe3c5816b videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf5dfddb0 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf96ca470 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x150b3653 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x1591d311 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x1943945e videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x2baec7c5 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x6e848272 videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x99c28781 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa1aabd3f videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb2ddf36c videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xbc8b0775 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xbcc25e79 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc9362757 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xdf74cf97 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xeb1ee151 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x9306f2d7 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xd4f5a6c6 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xe148b957 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x0beb72a4 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x245a7134 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x2ba35c92 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x30798ade v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x67cdee30 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xb653fdca v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0582f4d6 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x21cd2e3a i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x497cea61 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x92078e1a i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xa417d945 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xb37bd7d2 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xc2c5e96d i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xfb6d2bcf i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x19d9f271 mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3004573f mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x34a4660f mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x37f152fe mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3d0a699c mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5ef91551 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x8841edf9 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe315626b pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xf0bec41e pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0ab1174b pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0c4c4d3c pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x35c700c2 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5880ef74 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5c92dbb0 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x634189bd pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7e5c16e2 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa3d8040e pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xc0b04577 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf7060755 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xfca6ef18 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x59264846 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x59c66794 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x7b243b3f pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xd2f1fd82 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xee994313 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x32421e8d sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x6ab2a804 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x70a6351d sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x826f7da1 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xbb051f62 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x260fb15e ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x047fb8ea wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x16f94397 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3c213797 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x40322f05 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x44b1d4c1 wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6962b68a wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7b71786d wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x857f28cf wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x8a4b412f wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x9e9257f9 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa31f55d9 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xcc3a1358 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1e272064 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x40cc0fb8 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5077b80c wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x65caf7c2 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x6928e534 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x6cd193bf wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x77b9a769 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9549e1b2 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x95540b1c wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x95cdd70e wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x999541e9 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9cfea79f wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9f988ace wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9fa101a0 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xaffd07e0 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xb2b4de45 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x2e7ab939 wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x9298fd26 wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xc1ef7217 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xd8e7b9fe wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x027a5cf9 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x61aeb82a cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x8d2354e9 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x935da563 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x020a5a89 sdio_set_block_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x0e4617d9 sdio_release_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x168b5f37 sdio_claim_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x172b5190 sdio_memcpy_toio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x37f21389 sdio_readl +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x645a9944 sdio_claim_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x7029b8a1 sdio_release_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x7d33d25b sdio_writesb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x7eac518b sdio_enable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x8319fc4c sdio_readw +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x88525610 sdio_align_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xa3c159cf sdio_writew +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xaa9f996a sdio_f0_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xb3378628 sdio_disable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc4cdf5b9 sdio_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xdb94f646 sdio_readsb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xde526c1c sdio_f0_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xe58eada8 sdio_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xec039d7b sdio_unregister_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xedd8c695 sdio_register_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xf3c7c519 sdio_writel +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xfdcc0c98 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x0f399981 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x16eb7bb6 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xd62d3c3e sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xe5049d4d sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x098231cd cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x2098ca6e cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x76e8d93b cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xf0b7cf3c cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x965bdc36 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x1edf150b cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x99e8b9f8 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xed4f8fd9 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xc72b14dd DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0xf2761f14 DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xb0280dc2 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1488e814 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x28ef7a76 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2cb59c4f deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x31ccbd62 add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3f76e1bc kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x40aaf576 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x65e415f3 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7bb7b6f0 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x86b14a24 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x94ed5b7a get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x963da0ae mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc72ada73 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe616cda8 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf89ba89c parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfbb99efa unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfd864b92 get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x23055c1b deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x5aaf45ed register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x99447eb4 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xeb1542b8 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x069a04a2 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xafe9875a nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc4867cb4 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xd7be5c34 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xef3c8f0b nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x6c793a03 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x87ff3eb7 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x024c10bc ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x110336a3 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x200fd240 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x272f084a ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4e29b744 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x71fea382 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x76a6ce6e ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7b294939 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x937f5033 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa1d4d7ca ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc8a21ff4 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdf135f91 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x3ea7e13a unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x560a04b9 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x75e4c0a0 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x768a5918 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x7ddf717a free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x9e2e85b6 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x9e8277c5 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa11908ab close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa36f6d44 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xca8ff45a register_candev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x151b1d2b register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x7d408fdd free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xd6b2634f alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xf8c0d739 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x041a78f3 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x050fd74e mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0add7516 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0f9e271f mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x14cae58e mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1e4bfc01 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x20635a46 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3a3504da mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3b082881 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3c7c28ef mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x41b67b1e mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x42fb67ae mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x503a36f9 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5160d0b5 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x51935ae8 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x53a3c557 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5723aecf mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5b9b03a0 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5d512638 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6227be01 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x680305cf mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x68a94810 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x722df4be mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7a143b8c mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7b44f417 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7fceba83 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x863efec9 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9333e0a1 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9578035b mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x96c80d92 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa6299938 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa979f581 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab6d585e mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xace0c5a5 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xad2cfad0 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xae33a5d4 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf2cd289 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb8387d05 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbf922a10 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc95cf2bd mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcddc610b mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xceaaa213 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd1563bb6 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdfd721df mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe0a387e1 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe230da5f mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe4addd53 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xeabde843 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf2dad847 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf3f47a7a mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf4edc4a2 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf78e7a1a mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfe5f5949 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x7040e29b usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xdcac28c4 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x09a4d0dc rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x119ebced rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x43261bc3 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x691df8be rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x9483d440 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xee213e28 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x01b85aff usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x06b9f1ad usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0fdded56 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x141d9a27 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x15383f3b usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x26ac2ed3 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x27b1645e usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2d48bbe9 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x39926d1f usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x448b9f34 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x68b00f86 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x705151e4 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7235a9dc usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7c0e5396 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x83d63880 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x86a316c6 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x87b8e241 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x987fd5a5 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa42166a3 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbc895b94 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdb71af0f usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xeaf4230b usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xec304e3c usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xec87a893 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x195f5d87 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x22eeab81 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x35cc3316 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3fed4366 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5d5b47cc i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x64922907 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x78e51b2d i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x807114be i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8ddb9797 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xaefb6246 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc5cad3cb i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc6671441 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf51b677e i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xa53f4939 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x09c11910 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x4ab9d37c lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x638a1842 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x68b0b3cf lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6d38f0d2 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7140f640 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7928186b lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x91ba6790 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x95fc19e7 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x9bb0d103 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x9de7e426 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xab5e931b __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb1f6b344 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xe5f77483 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfc894377 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x0d6e2556 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x437e5e77 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x4fbe0ab2 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x612fb4ed lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x668dfcdf __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x715e25a8 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc5f44337 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd92156f7 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x4a2b8873 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xed59b9c3 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x09501201 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x0ca0063e p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x359e8e34 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x45022a99 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x48fe146c p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x577ab8a4 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x783f27e8 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x95880b7e p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xafe5b61a p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x20e448d9 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x22f6cd14 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x23dea9ba rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2b5d99ed rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4920201e rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x57a8bdf8 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6743a5b7 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6d234b17 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x718062ff rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7748c461 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8c13e4e6 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa0113092 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa04dff3f rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa9817895 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa9adce8c rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb850ab52 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb94077f2 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbef11b24 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbf60eecd rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcb57d1a3 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdf06ba61 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf5b17d6d rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x44b48831 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x839a34b8 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb49e08a0 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbc25e977 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbf398ff6 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xc9ac4ee9 rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xd233e984 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0e535cc0 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x12500509 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x22b595f4 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x30cebfc0 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3ba482da rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3fdbb9f5 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x47a2154e rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x47beb2d5 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5ed2ade6 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x79f3df1d rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7bca0ed4 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xba2b6d32 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbbd2dc38 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xd70e85e6 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x358d19e6 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x5d46540b wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xbdd1a069 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x8524416d pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xa9f08151 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x13bcd16f wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x14508d5d wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x7669c19a wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x9a08d9be wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xde6cca11 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xeae2675e wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x164b16f7 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x16858890 scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xab9e2936 scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xad65f40a scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xbb5c4ab2 scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xcd6b8709 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xde02b534 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xc472f95f fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x086a6607 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0e8e0863 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x16828f61 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1cd60e36 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1ceef012 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x260ea64f iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x274d27e9 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2c0606fe iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3147f3b8 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x35428cdc iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3cb99dbd iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3e0947ee iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3eafcfdd __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x47cde759 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4b8abdc7 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4bf9c8ec iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4fb82641 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x58f83376 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x59065b49 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5e6a5b60 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5ff7f534 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6a120267 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x73777636 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x74d1b738 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8321449b iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x83893911 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8b33c3f6 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8e9fd328 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9e12625c iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa229a42d iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa9f69d9f iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xab666687 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc3b9d782 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc7867e14 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd7e66ff0 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe74df571 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe98f0d0c iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe9a92284 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf213dbed iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf7680c90 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xff006a82 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xffc2633c iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x276c4e07 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x310948a8 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x496bbcf0 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x6222fc6a iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x63f77e70 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x65161a20 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x81d27011 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8e5c814a iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x932dffbd iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa4664c45 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xadd0852b iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc618a949 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc77fd2c6 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe399de68 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xef4a5fb1 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf6ad51d8 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1a17cc3c sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1daa4e23 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2ecace1d sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x336c82ad sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3abffb09 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5adcb7d3 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6d0acafb sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7193973d sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x772ea65c sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x82b3c066 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa3a7595f sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xabe13492 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xaddb880a sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb143634b __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb171e7a4 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb86f5709 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc0044653 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc67439d6 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd1bc58ff sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xdc15a337 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe004ce7b sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe71194d3 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf3b76ebe sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x02d1bf63 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x708da301 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x76a648cf srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9e07f1fd srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xe1eae00e srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xfb3243ca srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x02fac382 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x149ef361 scsi_internal_device_block +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x25585ccb scsi_flush_work +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x2dbe92d1 scsi_get_vpd_page +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x418cf893 scsi_nl_sock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x4b3c0073 scsi_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x5b722ee3 sdev_evt_send +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x6310d8fb sdev_evt_send_simple +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x8282c53d scsi_bus_type +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x8e151835 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xbba30d23 scsi_target_block +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xcb0a70d0 scsi_mode_select +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xd7ad99b4 __scsi_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xe218af3a scsi_target_unblock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xe53a924b scsi_nl_add_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xeafd1f8d scsi_nl_add_driver +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xf7a4312a scsi_schedule_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x3c5156ec scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x464dc859 scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x49f4d250 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x58a50382 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x925c482c scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9c881d79 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xa41a4c6d scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xbd3f792e scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xd843ce49 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00ba3450 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0389c6af iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x09553529 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x1051f8fa iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2fd9bbe1 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x361c88e8 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3addafd1 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3be9e7f3 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5b135dfb iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x73cdb1c0 iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x88c162e0 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x894dc467 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x907430cc iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc014bb72 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc43052cd iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc6dccb56 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcc4b0844 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcd1fff37 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd863592d iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdf6e1444 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe4300558 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf292cf5b iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x1a4a7c0e srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x481f3188 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x75ef0669 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xd7503c63 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xde50b3b4 srp_release_transport +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x612405a7 pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xb90da0f7 pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xe9d25029 pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xfea987aa pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x41e0ad20 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4a315d72 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xa42a3bae spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xc308327e spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xcdcac6f9 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xcee07ffe spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/uio/uio 0x6490387a __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xfbc5648b uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xfe7910d5 uio_event_notify +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x0549055c usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x4614ea99 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x0101f5d2 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x07de6e04 usb_submit_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x084b36c3 usb_reset_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x0f6fa85f usb_unpoison_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x12c64b16 usb_reset_configuration +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x18f3ff69 usb_store_new_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x1bd7229d usb_register_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x1d1bab6b usb_set_device_state +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x201df596 usb_add_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x22648e34 usb_set_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x226be4d3 usb_buffer_alloc +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x248168e6 usb_driver_set_configuration +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x24c15b0f usb_deregister +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x25311c5e usb_interrupt_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x25cd1460 usb_sg_init +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2bab00a3 usb_bulk_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2e804325 usb_poison_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2ee9f5d4 usb_kill_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x306da800 usb_remove_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3315bbe1 usb_get_intf +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x37536bf0 usb_register_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3c536ef4 usb_queue_reset_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x40970c9f usb_get_current_frame_number +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x45687afe usb_unanchor_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x466ed292 usb_ep0_reinit +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4882738a usb_control_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4d227051 usb_put_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4da91680 usb_hc_died +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x533e71dc usb_driver_release_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x5e3cf70c usb_unlink_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x66666cac usb_bus_list_lock +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x67bce5c9 usb_reset_endpoint +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x680791c2 usb_deregister_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x6e283573 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7230427a usb_get_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7a12ab69 usb_buffer_free +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7c4ce4bf usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7fd68b87 usb_get_descriptor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x851d7a0c usb_get_from_anchor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x87fce7d7 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8ae65919 usb_alloc_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8d391966 usb_driver_claim_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9160c3a4 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x91e9dbb1 usb_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x924a4ed0 usb_free_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x94cf982f usb_hcd_pci_remove +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x95c1bf34 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9e170b28 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9e908ad9 usb_match_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa03eb702 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa1390014 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa267ed81 usb_put_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa2ab59db usb_init_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa2e09b9a usb_register_device_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa61dbcaf usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa752e5c7 usb_get_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xab00ebf2 usb_string +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xac8bb5e5 usb_sg_cancel +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb0c3ca6d usb_get_status +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb8dc5727 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb9af4651 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xbcf23b0d usb_get_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xbf0456a5 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xbf49ead2 usb_put_intf +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc46ce337 usb_find_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc85dedc7 usb_anchor_empty +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcc1054eb usb_mon_register +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd2486189 usb_anchor_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd54a32d9 usb_buffer_map_sg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd6fa40d5 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe255e920 usb_deregister_device_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe2c34c57 usb_sg_wait +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe3240684 usb_create_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe39748cb usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe3e70e08 usb_debug_root +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe69ea7b7 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe7aa8371 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xf3ce0669 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xf7489cbc usb_ifnum_to_if +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xf7f0260c usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xfa20e6a1 usb_match_one_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x889ff7c8 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa2431356 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xaa86b110 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb81da584 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xc2696ad6 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xc4f951be usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xdb2d31a4 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xdd42e499 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf0193c94 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x19fc6153 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x31adc976 usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3a7e86a1 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3f935ede usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5989a84e usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x60aaf034 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x68a00576 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x6be9d5a2 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x8ca9b596 usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa24e4381 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xad4af3cf usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc13ca0c5 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd31e2d3e usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xdfeaffc4 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe71478ff ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x12183707 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x12aa1afc usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1b35f71a fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1d3d1a0b usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1e6b31e4 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x282fec49 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2c4175c3 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3573d2e1 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3f6d6a2d usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x50df4665 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x67190f2a usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x717278f6 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8a9c9126 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8fef9736 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa76f6ded usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc5992ccd usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc71a862d usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe0604c51 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf13396c7 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfbe2123c usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x04736e83 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x644350a3 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x921f7fd2 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xc5db013b wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xd4a1f984 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x399991d4 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x39b144de wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x46f2edac wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x5413b0d3 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x770e4644 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7fd80934 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa05b3c65 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa7a338eb wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa8652ca9 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xaf054594 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb0593436 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb3a8c042 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb4e15e68 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xbc251d2d wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe43fbe76 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf289cae6 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x337e9fb6 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x962c62f8 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x9740d634 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x01ade76c uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x5aa3ad4b uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x91671098 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xa2e4bd09 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xb53d0238 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xdae1b290 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xe5da7c53 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xe61c425b uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x0c6b897b __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x20611705 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x3cd8a88f umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x63e54f1a umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x91dc1df5 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xb3c1ad18 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xbe5cdb4f umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xf455367f umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x041b4e42 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0c2dc4f9 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0eec0b95 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x11d0f351 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x16fca6e6 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x17eb317f uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1db5e2d1 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x243d9e13 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x24fe3747 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x316a2907 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3369132d uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x33fee928 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3551cef1 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x42769aff uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x431e27cb uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4341e531 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x53610d38 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x58a6a456 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x59359207 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5be79e86 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x76db67c6 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7c25e891 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x86573bdb uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x88780e0e uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8b988075 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9c2ab801 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa35685f8 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa60d2e93 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xab5a1e4a uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcb6d4706 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd2cd758a uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdb71adbc uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe026aba8 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe062cef3 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe5687b0e uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf0488203 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xfc0a382c uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x3f2613ff whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x06b3ece2 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x18770133 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1aec6bd4 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x25614a54 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x296425a5 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2f84525e wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3891b719 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3f18fcdb wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4a2282f1 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5cede4b4 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5fc2276e wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6615d919 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x67ae34f7 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6dc7103d wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x70a42e8b wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x83d733ec wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x895b755e wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9b3b5f33 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9e2d0be0 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa04cf671 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa8fabe5d wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb4659dc0 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbccb6053 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbd0cc351 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdeb5dde3 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xe76e7625 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xec1e2fa6 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xed234415 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xee3e4c3e wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xeeb8d27a wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfa85dbb8 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfcfa2579 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x5348d346 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa398d0bd ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xc0cb9d66 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xc7f4a5a4 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xd7e453fb ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x5c3912ec fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xaca9eeb4 fb_sys_read +EXPORT_SYMBOL_GPL drivers/w1/wire 0x224dcdb6 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x3470c06e w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x474b6c6c w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x4f1279c2 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x569434d3 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x79a3d62b w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7ed6fea8 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0xd8dd292c w1_read_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xb8b3021b dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xc4967081 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xeb7f819f dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x62a72a53 exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xcddf94ed exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x001692bf fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x0d2e6edc fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0x0f286f62 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0x171170ce fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x3190483e fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x35baf7ee fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x549d572f fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x7adb6de8 fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x986263b7 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x989e13d4 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xab234c94 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xace9e4df fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0xb2d61a2c fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xb4f519dc fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xded3ce6d fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0xecad3195 fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xf6e014b0 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0xfd943ad5 fat_fs_error +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1b1340d6 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x775f6630 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x7fb0c3ad nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x838d044a nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcc38f6aa nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x9e0596c5 nfsacl_encode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xa615bd57 nfsacl_decode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x02f5c0a0 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1e253cfa o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x32d1141d o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x6567dd6b o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x873bbb24 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x8f9d3d20 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xec4bda3c o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x47e157af dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x617397f2 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7790cc7b dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x8e1f7e3e dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x97f19e36 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xbdcc47a5 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x12560a59 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x1c586bf0 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd85991c4 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x5cd267b4 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x7262d6cf garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x7a8b14e1 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0xbc6e9cd3 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xc8613a5b garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0xe85b3a94 garp_request_leave +EXPORT_SYMBOL_GPL net/802/stp 0x31a8af53 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xd4b8b310 stp_proto_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x036ee65e dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0aed1f56 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x12fde83d dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x15b34bca dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x182883dd dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1fbe1a49 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x20b99579 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x35575d34 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x38286653 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x461cfc8a dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4fa3ecde dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x58d4d0fe dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5a69c389 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5bf98536 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5df59861 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6eab4b39 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x809963ff dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x82d4af4d dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x90b9d53b dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb5f7ee81 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb9d63040 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbaa5297d dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbf3c66b4 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd56f6f78 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd6adc883 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd84e00a6 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdabbc1a2 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe4625d35 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe8a060d1 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xec7cdd6e dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf76603a6 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf990054c dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf9e734a4 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfe2ae3a3 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfe40df9c dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfee978ef inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x432cd3e2 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x4f2b7de3 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x8f98fa5a dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xc72b4bd4 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xd9322981 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xdd04d660 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x1c6dcb30 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x2858d24b nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x365ec1a1 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x6ed735ca nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x71150084 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xb3a307fb nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xd3e8af10 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xd445669b nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x33f93699 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x646e6a4e tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x93e33678 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xc3732850 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xf60fcc70 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x110882a0 inet6_destroy_sock +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x1607e25b inet6_csk_xmit +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x2483a4a4 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x2afaa4c7 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x2dd87b3d ipv6_find_tlv +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x3b91f33e ip6_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x701e4ddb ip6_dst_blackhole +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x83dbcbcb ip6_local_out +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x99bf03b0 inet6_csk_search_req +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x9e08aaf0 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xbf9d1683 fl6_sock_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xd794061b inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xe7196ae0 ipv6_opt_accepted +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xef08ad1b ipv6_dup_options +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xf3f1b64f inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x46160470 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xa642bb61 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x03268815 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x05fa89d9 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0bedce11 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0f338f54 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x12b69b98 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1388364e nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1846e1a8 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x18a053bd nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1e83e455 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x28655b4f nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2e213cae nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x31689718 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3d928b26 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x40d58b97 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x50600618 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x530713d3 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x57391129 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x577c2ab2 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x593f644b nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x671043ca nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7247f1ac nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x75d6ae1a nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x79032f4c nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x797c05f9 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7a6effa1 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7b3d000e nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7fa452fd nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x80c3ef7b nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x84cfb4e9 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x890b170c nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9075fc36 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x933719e9 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x997f5558 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9edcf167 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9f49ec13 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa01e72d4 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa290e46e nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaaaf17ee nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb2f58df9 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb74c08a2 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb7a44bac nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xba3d16e1 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbd65df2d nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbe0ddf49 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbecb5215 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc1bd282b nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc57c74f5 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc9353493 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc9b9e945 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xca8a0ee8 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd636d7b6 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd8eef924 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xda3de9c5 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbeac057 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbf7e7ef nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdc268234 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe12d0497 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef5110ce nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf325ddc4 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf74a1677 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf7fe53ac nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x30df7ddb nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x21058ada nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x084e9a1c set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x11cb51b1 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x18c3c35d nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x5c97e9f7 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x99736ba2 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xa361122b nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xbbce1f73 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xbe26374b nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcd49390a nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xfef61066 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x7bae9e55 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x14db163a nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x30060d17 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x8de80014 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xbb940077 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x620c5579 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xa07290da nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x03005582 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1cc95452 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2fedd7e2 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x36b95946 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x3c067fec nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4568b28e nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x574d30d3 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x62460507 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x64be82cb nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x970d22d4 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xab97222f ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd145ffc4 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0xf22788f5 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x05efa38d nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xe6d66bb3 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x31f862d9 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x72f51081 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x8caa9672 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xe5dd4a6f nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xac5dfa80 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x07e51b9f xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x38afab95 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4047b763 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x45f692b0 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x48134db2 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6cad1cc1 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x77bed95d xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7929b542 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x8ee05b8c xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x94f9a796 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa622f030 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb10f073b xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xc32d7267 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd5476da8 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd74fe24c xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xde1cb1fc xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf7b5e3e7 xt_proto_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x0bbbac08 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x282713b8 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3c19edcf rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x4232004e rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x43204c55 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x4827a08a rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x48be6ff7 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x504af318 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x5efc8f12 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x6011aade rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x7ff4afda rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x848a38ac rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x92c7a0ba rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x972fa8e1 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x9b3e6113 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x9d3ac317 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0xa1775941 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0xadd186d2 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xb58a6a1f rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0xc2da8e38 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xd711500b rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xdc051180 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xde80a498 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0xe6842bd6 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0xeaf84394 rds_page_copy_user +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x44d0c317 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xfeb08bd7 rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1069ef89 gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x19b689c9 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x21cd0059 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x45ee7c43 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7894e306 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7896b477 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7e5d8e8f gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x836f149a gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x92496206 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf094d138 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf45fd225 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x027c51a7 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x029290ff xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02c2f746 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x03c87a6e svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x044dbd5d xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x082daee1 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0dd28871 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e7169e8 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1038bb60 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1057f2a1 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x106710c7 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x115d303b rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x126dd53f xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12f613db xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x143264fb svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15c19a39 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16cf9c17 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x17432d7b rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x17573d9b cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1dca6aa9 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f7572b9 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x20c7915a sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x258dffea rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x28045ce9 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b3976b1 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b7434ce xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2daa86b2 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2dd4a950 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2ebbc588 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38b83357 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3918512f svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3b5227f5 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d41e223 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x400a1117 rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x40d7c554 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x410164c8 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x446064f5 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45fda47a rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x499145ac auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4a07d498 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d0bbd4e rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4f220cd1 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5074ba0b svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x507cbcda svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53664214 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5370e177 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53be32a0 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x58d15913 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x58dab2aa rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5c73fa41 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ca6341a rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5eef0411 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x60a8f0db sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x662dc818 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67acd262 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x68f1d842 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6902c25f read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6944317c sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x694b7743 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x69b12794 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e63c651 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x70aa3d69 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73262eea unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73d884ce rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x745249ea auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x754f60e4 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7788b0c9 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7bdfaff0 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e0bacae svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7f362066 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7fa543bd rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x81b08f7b xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x84d6d330 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x85d3463a xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x881cd18f xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x88927c28 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x89bc8601 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e8c5c97 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8fb1ced9 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9158ac6c svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x94039ae8 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x944b9525 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96998f71 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x97117b15 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x99eeb838 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9acf61fe rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9aea9e14 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9c116864 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0fe8239 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa42f0517 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa533c599 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa706e95c auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa8a8bcd8 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa8f7cf1d rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad372648 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb05bef4f xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb1189947 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb2fc572d rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb8026829 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb8257493 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb8e8539b xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbb7e0562 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbd555590 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbeba26a4 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc297cea4 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc60c56a6 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6520e61 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc75578ef rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc77f5362 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc87b4d21 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xca98a2c0 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccda5e6e rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcdd5f867 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce9dab5f svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf196c8a rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf3bae19 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf61772a svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcfe23317 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd01bee8f rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3365e2b xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3813e0e xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd46df2ae svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdada2963 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc8e0e0f auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe2d389c4 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe2d3d2b9 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeb8f2139 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeba676cd svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee5f8b85 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeee99b92 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xef3a5949 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf2962882 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf7451989 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf770d410 cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9085e25 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfbf32d2e rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfcfe0c1f xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfeaafe6f xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/wimax/wimax 0x22fdf9b1 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x6f5d6162 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x87053a37 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa0078a4b wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xad987c60 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb10a564a wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb6471397 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc3c91c07 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd2ba1042 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd732e80c wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xdc56dd5a wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe9ecc974 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xfe068494 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x14bb4055 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x14f018c4 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x211b130d cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2620cf65 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x28a12f48 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x385c07fe cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x394cb868 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5bbebcee cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6486d4cb cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x67ef8b40 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6e0ee9c8 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7031f08f cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x825124ee cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x88af74a2 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x89a3f6b1 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c8378d7 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x912df332 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x990d6791 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa6dac370 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa8ad062e cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa8b8ee70 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xace66c58 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb3798ce6 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb3872dab cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbc0bd8e9 cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc4ad5e7a cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xcf8ec01a cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd572c808 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd804626e cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdad196e1 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xedef69a7 cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfddb70eb cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x22b4a89e ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x328adceb ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xbc85a9a5 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc95be825 ipcomp_destroy +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0044f6cd snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x05091182 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x08bd113f snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0c5aa611 snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0d43eb51 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x10d5e846 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1f9071f2 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1fdb7b4a snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x21b5b2a6 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x295788aa snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x29ff4875 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x36648ba4 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a59dedc snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3c23b1b1 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x46db4249 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x47fc0e0f snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4b93b18f snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4bb0c60f snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4dcd4bf9 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5b168d04 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5f133c11 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x60257748 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x60505b26 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6d449a29 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ebade2e snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6f2f12ab snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7630c6d5 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7758cb22 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x77d52b04 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x792cd8b5 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7abfc0cd snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7af3eb6f snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7b75dcc7 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x851bed55 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8847466f snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x88e3f179 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8ee454b1 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9201c776 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x95d57cfc snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x977d1f22 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x97a7ec25 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x98644551 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa020662c snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa0ef9197 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa1dabe2a snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa61875fa snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa77f3991 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xadc7ecbe snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xadd26234 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xae5c10f9 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaeab069a snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb0e78761 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb71ad975 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb77dc1aa snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xba4e262d snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc27008ca snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc31a91ba snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc3d08f33 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc466be60 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc4bef133 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc98fcb11 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd1500f59 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd1ba47a4 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd6ef1e92 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd8926530 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdef58771 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe4207547 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe8a843df query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe933fe22 snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeaab7330 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xee1c8968 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf0ac6b49 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfefc93a4 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x02f35c52 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xee6aa699 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x18cac777 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x24cc16b9 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x9b14eb58 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xd6c4ec6c ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xd4291653 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x4867df24 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xe202eae9 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x1e4ad6f1 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xbab9c545 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x8a351b40 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xdfa5fbe3 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x780d8e08 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x8102b162 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xc9831362 pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xd38759f1 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x60643bfb ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x8ab7b4a9 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x6ef058b0 soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xbd50d926 tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x0b46c35e aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x3f867719 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x15d3b69f aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x297ca092 aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x3522347d aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x898eea16 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x9863a3f6 aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xb2229646 aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xe33de723 soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x253a3ca1 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xa2ee199e twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0xe4825aa4 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x10ae6c49 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xd53866cd soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x0dfdfacd wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x3ad03861 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x38108499 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x3f00f0b7 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xbcb7a54e soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x27ab5f1c soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x60eda227 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x225cd265 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x8b566d2a soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x9520ba56 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xa23d80b0 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x0ba899d8 wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x848756a5 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xbdc24de8 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xebc091f0 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3bc0408e soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3cba1794 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x26560d7d soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x9436f10b wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x0709ef07 wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x0d7b5ebe soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x73887e95 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x797583c6 wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xc042b8a5 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xd384cc9e wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x5510be30 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xeb6feb66 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x27cbe88d wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xc74b1079 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xb054f9a4 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xc4cfc417 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x7b082a01 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xddd4f556 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xdc169f61 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xdd7f21b5 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x8db2b006 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xa1616b24 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x06886315 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x0c380094 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x461c894d wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xcf93832a soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xc088fbe3 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xe4bed0e9 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x23035e34 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x9722be66 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0063ab73 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x019f37b1 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x052443fa snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0baf5964 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0c2dd76d snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x137083e9 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x13de3a10 snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x15a3674f snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fab6533 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x202cd287 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x27016e8d snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x276659e5 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2ec0ea8f snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x362190f1 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3a792d32 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3da61fe5 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x426367de snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x43e5716d snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x482aa6c6 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4bf1603c snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4caa5cd7 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4cd22557 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4fa6dffe snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6080faba dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6566b481 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6de9831e snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6df53baf snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6f01141c snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6f412255 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7040c9af snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x718fa0f2 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7239a773 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x72571f1d snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x85e9385a snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87d288f9 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8b3ea6b8 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8f029e11 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9601b19d snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c0f077c snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa000d366 snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6c99bde snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa710ba38 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa72845a3 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa81e053c snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa8abb0ee snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaafd25b2 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xabf04bd5 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb1497ff3 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb3b37793 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbdffcc90 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbe019f09 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbe778ecd snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc3ddee4b snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcdd9ec91 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd55dea19 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdbe767d7 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdbf55082 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdd154dc1 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdd2f6e7c snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xded61730 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe38bdbf5 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xec5903fd snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xee97c94c snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef9a95eb snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf13b134f snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfcd735cd snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfd9832ed snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xff060d0a snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xff4759b5 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00650cf1 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00d78c11 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00ea825d ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x013a688d inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x0158fc45 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01e6013a scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x020d80e6 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x0212b690 inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x02d49032 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x03078695 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x03093467 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x045bea69 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x04813377 user_match +EXPORT_SYMBOL_GPL vmlinux 0x04be0646 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x05324928 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x0533dd63 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x055b6fba __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x05d2b649 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x05dd1232 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x05e08185 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x062f527f srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x06a9e71f class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x0723fed4 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x0748a9de __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x07502034 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x078563f0 use_module +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07e363d7 device_move +EXPORT_SYMBOL_GPL vmlinux 0x0837d948 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x08844656 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x08899deb led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x089ae010 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x089b8eb5 drm_class_device_register +EXPORT_SYMBOL_GPL vmlinux 0x08c0a411 input_class +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x08eadfe5 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09ec9485 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x0a5fe65e ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x0ab3ced8 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x0abf3717 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x0ad28f62 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x0af67a11 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b45f72e tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x0b68be39 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x0b97654e posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x0bf18271 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x0c068934 pcr_ops +EXPORT_SYMBOL_GPL vmlinux 0x0c075181 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c5539c7 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x0c604d00 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cea93ca tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x0d5e6c43 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x0d80b95a device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x0db19a3b led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x0e1b7223 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x0e2ad49f spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x0e5281a3 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x0e7f66a9 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x0f00441e regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x0f197239 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x0f27d1e6 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x0f62794c fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x0f63ca52 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x10506ba3 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x10a91ed1 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x114d25f0 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x118c9aa8 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x119af014 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x11abcd00 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x12aa7ec7 device_register +EXPORT_SYMBOL_GPL vmlinux 0x12bffdbd shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x1308ebe1 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x131c55a5 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x134ddef0 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x138712c4 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x1392dade __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13f084b4 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x1405e43c __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x14947cb7 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x15100ace ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x151c0c75 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b49e77 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x15cdc336 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x1621c80e apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x16c52e3c device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x16e34ab2 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x16fb9f5b fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x17538d4c skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x17e4b716 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x17f9bf5e trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x1802e5b3 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x187db5b3 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x189ac4a4 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x18cc11cf root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1930400c proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19d453a6 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x19d6b4cc led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x19f4edb1 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x1a0d97a2 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x1a10d637 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x1a16b755 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x1a20f634 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1adc988d attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x1b4a238b platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x1b4e8750 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x1b52a1c5 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x1b5533e0 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bef58c4 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x1c19e412 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cb8b88c dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x1d2ca86a srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x1d71f666 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1d9cd974 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1db5d3b4 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x1de3530e unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x1ded478e fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e9a2592 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ec0c9dd crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x1f4136a3 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x1f77ee20 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x1fa466b9 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20ddef74 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x20f566e5 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x2166e885 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x21d37f57 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x2259b310 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22aa7eed get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x22f94315 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x23172af4 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x238cab30 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x23fd5511 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x2443928b vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x24aea70a driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x24dd62f5 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x24e55104 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x24f3b5e4 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x2503c016 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x2520aa43 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x253437d7 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x254092c9 drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x254c9666 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x25a75dbf crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x260c306f device_rename +EXPORT_SYMBOL_GPL vmlinux 0x2614ed4d bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0x26e9831a bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x278fe708 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x27acab1e inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27c958e4 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x28d0a849 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28dc22d1 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x29363b33 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x2958338e __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x296388ac bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x296e93cb crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x297a1995 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x29922158 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x29da53ac inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x2a0d8296 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x2af0a232 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x2b318769 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x2b6e7580 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2ba30fd5 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x2ba40ae2 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x2bb36e90 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x2bc52619 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x2bca3ecc inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c43650a __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2c43f162 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x2c57b7b8 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x2c92eb93 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d171cda sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2d5956fe generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x2d6d2bd2 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x2df932c8 mmput +EXPORT_SYMBOL_GPL vmlinux 0x2e2c3e77 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e554497 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2e5716ee enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x2ea5431a bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x2ead7716 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0x2ee636c2 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x2f5219b8 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x2fa0faf6 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x2fc64163 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x2fe7fb32 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x301cb432 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x305ab6aa class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x306e7273 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x3081ebbb mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x30e4f4bc crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x30f1b15b bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x311c9f02 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x31243720 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x31522e95 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x3166cd18 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x31777251 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x31a4d4ec sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x320b6f2d crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x325cf2bb tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x333627e0 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3399f7ea crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x342fc7da transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3472a985 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x34d34734 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x34f68f16 find_module +EXPORT_SYMBOL_GPL vmlinux 0x35264908 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x35816335 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x359864c2 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x35d560d5 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x35f65359 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x3679d1f7 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x36859820 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x36a2b993 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x36bedfdd tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x36dfef9f crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x36f5286c inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x36f97865 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x3719c19a ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x371e97a4 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x377094aa power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37c5a177 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x3845a6b3 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x38886770 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x38ede830 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3953c484 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x3988fdd6 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x39c0ca72 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3a13d877 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x3a4338fc blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x3b0ffbed set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x3bbc935f i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x3bcaa08b dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x3bcd13cf pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3bf316fb single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x3c56e7c6 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3c5b18a1 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3d8fd9bb class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3daf50d3 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x3dd7352b inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x3ee2c899 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f937cf4 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x3ff6c684 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x4187043d get_driver +EXPORT_SYMBOL_GPL vmlinux 0x41b0ae16 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x41fa8f8b class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x420529ea eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x4297e144 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x42c3dc5d ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x42eaa77b regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x43505bf8 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x43dc21bf br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x43de28b8 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x43ef7d6b skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x44027264 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x444f5d72 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x4692bfde spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x469d9fde aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x46b2e374 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x46fad400 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x471e15d7 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x476afe94 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x478355dc mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x485e1fc2 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x487d9b3c crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x488df8e4 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x48e767a6 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x49288ea4 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x497bd280 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4a8cba81 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x4ac3b202 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x4b11a12f class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4b1b8491 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x4b2971a8 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4d001d7a tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x4d6cd4b1 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4d9351c8 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x4de550eb inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x4df5fc31 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x4e8b9716 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x4e8c9ade pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x4ef79504 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x4f6fe24b i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x4fdcd026 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x50104f4b of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x50951e37 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x51708e59 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x51f21a05 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x51fc5e09 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x52206314 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x5271ad88 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x52cc3a63 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52da2756 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x53034ab3 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x5319abae sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x5324d04f bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x535d7ab7 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53a97506 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x53dce8b2 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x545bc7ee crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x5478b165 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54caaf6a fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x54e80ff0 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x550d19fa dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x5558f884 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x5565089b input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x556e791e device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x55dee53a fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x55f2580b __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x567058aa drm_class_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x567a1736 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57a0dff1 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x584ac574 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x58656ff1 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x58ad76b6 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x5917b7c4 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x59704e7e page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x598d1c95 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x5999407d regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x59e1b7ab tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x5a4b0350 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5abeca54 queue_work +EXPORT_SYMBOL_GPL vmlinux 0x5acf6804 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x5ba9d869 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x5bac7788 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x5bc3e6c1 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c0bb29d kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x5c4b89ee crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x5c4c2bcc tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x5c6b070b dm_put +EXPORT_SYMBOL_GPL vmlinux 0x5c6c059d power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x5c7513cd ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x5c8a1b11 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x5cfe3e8d regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d395b5d queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x5d6a3241 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e57a5a5 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x5e630eb5 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x5ec48935 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x5eec87b4 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x5f059b36 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x5f1026d7 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x5fab8959 platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x5fc59a75 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x5fd7792f crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x60130422 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x60248cbd klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x603fe646 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x605d435f crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x608c51cc pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x60930755 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60b9ee11 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x60e7d717 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x60f38c6b crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x621535c7 inotify_init +EXPORT_SYMBOL_GPL vmlinux 0x6243c2ad ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x624ce21b add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x62860195 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x628c5473 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62b76dbd inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x6330e99c aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x633f77e5 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x63a55ac1 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x63f4dc09 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x643ca033 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x64e1c8c9 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x655bb4a0 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x65affe1a i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65e8d50c inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x65efc45d register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x662c8872 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x6639e9e8 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66cfb2cf pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e46a9f raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x66f08dbc atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x67c336c3 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x67f24353 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x6845cbca __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x68594d5f pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x69e0886d find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x6a4d9895 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x6ad8ff0d disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x6afb32c7 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x6b0e6c23 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x6b676d3b tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x6b8e319d shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c4fc7e2 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x6c65bab8 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x6c69ffa2 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d4a40fd inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x6df924f7 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x6e6260ff hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x6e65a225 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e78cea1 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x6eab7611 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x6ed34ca7 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x6f2d2b97 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x6f731199 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x704ad567 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x70b2774d ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x70ffee82 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x719a4ebd relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x71e02a03 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x721c2847 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7269e643 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72dac76c tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x734e4593 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x743cd0f2 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x75330b55 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x75bf4a51 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7605b608 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x762076b6 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0x764da2d7 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x76533deb spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x7663d5c5 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x76bcde34 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x76c1ed92 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x770ef187 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x77b9bb38 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x77eb5086 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x7805bf4f user_describe +EXPORT_SYMBOL_GPL vmlinux 0x786939c4 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x78833cf5 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78f070f3 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x79052fdc regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x79277c9f hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x7959dc74 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x79b0e80d relay_close +EXPORT_SYMBOL_GPL vmlinux 0x7a1c4be6 nmi_adjust_hz +EXPORT_SYMBOL_GPL vmlinux 0x7a474fc5 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x7aaa1c3f crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7b2addd5 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x7b5054c5 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x7b8e855c fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x7bb56b32 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x7bdcca52 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x7ca9c3bd pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x7cc064a0 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x7cedf4df driver_find +EXPORT_SYMBOL_GPL vmlinux 0x7d632cce pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x7d7e2fa3 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x7d8372d4 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x7d948d04 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dded6da inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x7e0cf3bf elv_register +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e3201b3 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x7e37a295 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x7e5efdbd fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x7e9d9815 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x7ea80f62 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x7eb6089e device_create +EXPORT_SYMBOL_GPL vmlinux 0x7f45fee8 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x7f5da0fb crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x7fed00d1 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x805fec28 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80a0e3a0 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x81138c94 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x8120c518 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x81425354 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x822f2cde shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x82516631 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x8263843f init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x8278d03b blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x828357a3 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x829a0e8e unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x83404d7d simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x8394a838 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x83999862 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x83bc804e sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x83f0246d klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x83f2c943 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x849e78bb class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x84df39c0 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x84e43ac6 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x8505d388 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x85111085 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x8522cf6c regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x852e16f4 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x8583b843 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x85ad843d flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x860e52a7 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x864f02e4 get_device +EXPORT_SYMBOL_GPL vmlinux 0x86562b48 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x8699a07e crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x86fdaa6d ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87ceeeb1 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x8801eb87 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x88126bb4 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x881764be fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x882019cc task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88524fce devres_find +EXPORT_SYMBOL_GPL vmlinux 0x886569be relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x88e8ad0e ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x88eef298 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x88fe3e31 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x895b26ad unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x8a51d132 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x8b080db9 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x8b3262fc ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x8b428fe8 queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x8b723215 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x8bf2fc19 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8c002f90 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x8c4fc87e ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x8c523689 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x8c564c0c xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x8c71649b d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x8cd77093 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d4f5955 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x8db49122 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x8dc90b78 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x8e297efc pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x8eba2bf4 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x8ec66300 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x8f31bbeb __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90c30314 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x91029921 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x9172678a unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x91793687 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x91b93aed synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x91c8949d blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x91c92246 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x9217138d inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x92c93adf anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92eea4ba blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x9327438e ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x937e674c rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x94245519 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x949aa8e3 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x94ae394a devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x94caea55 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x94e78b9e driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95772086 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x96baf4fd rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96d08b53 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x96edc4dc __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x975c59e0 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x9773211e sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x97ce685d crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x97f210f6 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x9866e5e0 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x98886f83 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x989f8f7b eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x98a7d79d kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x990ef13d unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x991a279b device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x994ed77c regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x996de3ec fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x99804cd7 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x99bd801c class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x99d605ef mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a5fffa7 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x9a734d7c tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x9a881fc0 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x9ad2da84 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x9af51b47 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x9b769c0c vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bb93d4c debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9ceb3ec1 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x9d524f95 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x9d7a412e trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x9dd152c2 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9de6a519 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x9e2cc8d3 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e8fd5e1 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x9eafe161 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x9ee94ebe class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x9f0009d1 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f7c30df spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x9f819b82 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9fa3b437 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x9fad7bc3 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa06d78b7 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xa0ca3ff5 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa13f63f2 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xa1467a10 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0xa15064a8 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0xa19cae59 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0xa1b414a7 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0xa23a4fcd inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xa2701e25 put_device +EXPORT_SYMBOL_GPL vmlinux 0xa2b3e99e __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0xa2dade0c rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xa3268622 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0xa4632669 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xa4936598 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xa4a42813 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0xa508c158 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xa54a037b blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xa57465e6 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xa5ba3211 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa5fdf4d6 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xa63ffcf6 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0xa6bd7804 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xa6eca022 user_read +EXPORT_SYMBOL_GPL vmlinux 0xa70061be ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0xa7045f9a kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0xa747643c power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xa7c2ce24 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xa89d1915 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa8f78f2b udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa9511325 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa62c1a7 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaab3019f simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0xab2fbcbe rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0xab547a23 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab6f955f xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0xac2c781a device_del +EXPORT_SYMBOL_GPL vmlinux 0xac5fe2f3 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xacca0c8f devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xad02dd96 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xadce2bdf tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xadd32815 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xadef8719 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaee2032f crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xaef06de6 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xaf5bf147 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xafaf6566 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0c5b794 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb0f34341 sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xb1445d19 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb201bd48 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xb2327ff9 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0xb26653bb do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xb3543731 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xb392f6de kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xb3b69042 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0xb44137d4 rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0xb44bfb7d debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xb4759adc stop_machine +EXPORT_SYMBOL_GPL vmlinux 0xb47a97c4 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0xb5246759 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xb5442a9e inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xb56b676c pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xb575f930 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb6261baf __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0xb62e642a unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb63505a1 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb6734913 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0xb67808b7 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0xb68931fc unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xb7387a0f unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb77f5081 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xb7d3d9ae tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xb7ec2c06 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xb808ed33 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0xb82144d4 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xb851024b fb_ddc_read +EXPORT_SYMBOL_GPL vmlinux 0xb87af84f security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xb8891e34 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0xb92bed0e sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0xb9ac1293 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb9ea4378 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xb9f527a4 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0xba28b893 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xbaa6e89c crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xbaeb6bcf led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0xbb16ffe7 real_hard_smp_processor_id +EXPORT_SYMBOL_GPL vmlinux 0xbb463fc6 __class_create +EXPORT_SYMBOL_GPL vmlinux 0xbb5f82a1 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xbbf3a9e1 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xbc27f297 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0xbc371545 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0xbcecee80 lookup_create +EXPORT_SYMBOL_GPL vmlinux 0xbd3730fd remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xbd3a072c da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xbd91fe79 spi_async +EXPORT_SYMBOL_GPL vmlinux 0xbda12831 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xbdcc0837 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbddad1b5 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0xbdf11a85 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbef11f17 register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xbf287dff rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xbf7e7e12 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xc0a8e4ee regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0xc0cce4d0 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xc0d55ca6 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xc0d97855 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc13b27df screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xc1433b7d blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xc1597e52 device_add +EXPORT_SYMBOL_GPL vmlinux 0xc1e0dfa4 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xc1e22def blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc274e8e8 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0xc2a55bfe scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc3c6b37e blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc442e7e2 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0xc47808a2 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xc4907365 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4c4e41d securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xc51322e7 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xc55dc4fb unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xc56af859 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc612860d regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xc650f5eb filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xc68b651b dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0xc697e73f ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0xc6b09386 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xc6c7b2fb platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0xc6f69d85 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xc73b9722 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xc76d6c88 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xc788fc96 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0xc7ab30a0 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xc81a4889 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xc8631ef3 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xc86c733b __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc8ad4ebe class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xc944d9d0 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc95b8668 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xc9ae0bb5 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xc9bd8880 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0xc9bddbee regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0xc9e5d4fc register_dimm_printer +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca4bc520 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xcab4457a put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xcb9e6273 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc3a17ac get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0xcc7308ce __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xcc9be911 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0xccb914b0 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xccbf64e6 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xcd0e2f15 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xcd5eda82 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0xcd616af5 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0xcdb371d5 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xcdbbae5e devres_get +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdeaafe9 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0xce620d9c led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xce680c07 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcfa5aaa3 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL vmlinux 0xcffb05f1 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd0b0c747 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0xd0be6c88 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd101c326 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd17ab9eb user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xd1beca35 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xd1c2df90 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xd1f8bd22 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd381eb2f __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xd3938423 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd40fbd34 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd46a8880 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xd496b1f9 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xd4a872a2 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0xd4b7e86f klist_next +EXPORT_SYMBOL_GPL vmlinux 0xd4d8493c bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0xd573c2fc alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xd577d7e3 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xd59afaab sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xd5d513bf fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xd5e0fd2e xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0xd68dab9d sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xd6ade445 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xd6dca524 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd71ea085 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd767d348 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd76e5653 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xd78bc51a debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd85725f1 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xd8723dd0 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xd8bc32f5 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xd982993f mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xd9d7a141 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0xd9ee1ab3 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda602232 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0xdad367fd klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0xdade20cc k_handler +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb1661b0 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb8b03eb crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0xdbd794bf netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0xdbddd350 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xdc103770 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0xdc9530a4 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xdca765ef driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xdd8709fa gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0xddbd59f8 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0xdde0194c find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xddebd9ad __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0xde30ff2f sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde50dc62 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xde51ffd6 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xdf4ff5d0 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xdf85496c srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xdfd6ac63 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xdffd2ea0 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xe05f450d crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xe06926e4 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0d9fcf6 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xe11956c9 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe156e2d1 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0xe18f0d7b disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xe1bf92c1 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0xe1c30b6a br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0xe26fa512 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe2ccbd17 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xe2eb4248 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xe305a7cb file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xe306066a scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xe3992b56 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0xe3c03fe7 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xe3d58487 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xe40c4f77 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xe41061c7 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xe41ccab8 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0xe4531455 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xe50b1143 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xe5248c04 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe578ab75 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xe5b9b3ce transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe651e621 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6b8a820 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xe755478b device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe75b88b0 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xe7b86512 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xe7d1ffd4 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0xe7e6cf06 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe812a535 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0xe89da449 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0xe8a1b7f5 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe93cf931 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea795724 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xeaca9937 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xeae9f861 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0xeb0da1ae anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xeb2169d4 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xeb3490c3 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xeb3d92c5 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec371b56 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0xec4fb02a blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0xecc59efe tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0xeccc4f4f save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0xed732d22 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0xee3892cc __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xeeef2342 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0xeefd98e8 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xef0ef3f7 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef80d9e6 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xf0711474 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0xf13774d5 user_update +EXPORT_SYMBOL_GPL vmlinux 0xf1408f68 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf140e514 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xf14bf4db ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf15f545c pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xf1727729 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf208970c __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xf29272f1 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xf2f1a156 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf30b5877 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf35e989d fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xf37e2410 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0xf387555a sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xf38b72d9 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xf3a3360a spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0xf3fc20b0 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xf455f452 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xf48174d8 inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4ae579c klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xf523a7e1 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf567614a tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5be3b5a sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0xf5bea7c0 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xf5ce91ff inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0xf5d49cc5 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0xf680dd2c sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6d1e3ec i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xf721d557 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0xf7338e49 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0xf7967768 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xf7fc7e51 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xf8250e20 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xf87b1ae7 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8b4b47a unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0xf8c132e8 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xf9309c3b net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9b5c670 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf9db1910 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xf9deba9b kick_process +EXPORT_SYMBOL_GPL vmlinux 0xfa3058a5 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0xfb505b3d da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xfb509718 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xfb58a6d4 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0xfbd25446 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc9254e5 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xfcb0eb37 bus_register +EXPORT_SYMBOL_GPL vmlinux 0xfcbf60fa rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xfceb547d gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0xfd28f8e8 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0xfd69ea92 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe0d6398 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfe99cbfe devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0xff61e969 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xffacc2b6 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xffb6bdaf relay_open +EXPORT_SYMBOL_GPL vmlinux 0xffc04543 unregister_dimm_printer +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/sparc/sparc64 +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/sparc/sparc64 @@ -0,0 +1,8493 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x4a6cb029 suni_init +EXPORT_SYMBOL drivers/block/paride/paride 0x0b722be3 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x1476651d pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x1a47f842 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x200fe640 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x2a7f309e pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x560b4ff3 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x650befa0 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x8c90a8c3 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xba9bd490 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xbca8581b pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xe4f7631b pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xecbe1328 pi_schedule_claimed +EXPORT_SYMBOL drivers/cdrom/cdrom 0x0c7e630c cdrom_get_media_event +EXPORT_SYMBOL drivers/cdrom/cdrom 0x10f26b97 cdrom_open +EXPORT_SYMBOL drivers/cdrom/cdrom 0x12c55b33 cdrom_release +EXPORT_SYMBOL drivers/cdrom/cdrom 0x2782c532 cdrom_media_changed +EXPORT_SYMBOL drivers/cdrom/cdrom 0x344adbd5 init_cdrom_command +EXPORT_SYMBOL drivers/cdrom/cdrom 0x5d84fc4d register_cdrom +EXPORT_SYMBOL drivers/cdrom/cdrom 0x83d0164f cdrom_ioctl +EXPORT_SYMBOL drivers/cdrom/cdrom 0xb9832766 cdrom_number_of_slots +EXPORT_SYMBOL drivers/cdrom/cdrom 0xcefb93a3 unregister_cdrom +EXPORT_SYMBOL drivers/cdrom/cdrom 0xecf94a4a cdrom_mode_select +EXPORT_SYMBOL drivers/cdrom/cdrom 0xee5fe92a cdrom_get_last_written +EXPORT_SYMBOL drivers/cdrom/cdrom 0xfbb8f9c7 cdrom_mode_sense +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x0b791087 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1499d73b ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x14b4613e ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1ecb2c44 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2509ec7d ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2711e79d ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2f8212a5 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x339158fa ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3aede28d ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3c3d01aa ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4ed1a47e ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x56122ae6 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x77faf117 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x798bfc54 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7af41950 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9a5c2419 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xaf7e0f29 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xbb9ddf05 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd2186389 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd4e86e80 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd5fc49f2 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf7452cae ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfcf6b5ad ipmi_get_my_address +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0923d4ff drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0a51801c drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0d48897a drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0e7ca5ae drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x11fa70ff drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1c9b8bc0 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x29d5cc98 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x31284482 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x37223745 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3c9d9cf3 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4b10ae97 drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x66dd3658 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x69f592cd drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x6db7a829 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x87ea290b drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8d3ff817 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x92bd0cce drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x991ca48b drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbbedb88d drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd8d9beee drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe4467d2e i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe8cc7f6b drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xec127476 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xee2f9c47 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf903ce14 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x0390d3cf radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x4964eb7a radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0b377411 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0bca5fd2 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0de98dc9 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0f980a02 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1449f7c8 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x18629a25 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1983bebd ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x22d8c4b4 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x24536b5d ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x24942b88 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x28e7c269 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3469ce4f ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x376ac7be ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3b257b55 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x41cb6c19 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4e41d29e ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x543eaf97 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x560b0bc3 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5643fcd7 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x59609446 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5cf34b94 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6419fe6a ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x64b0a469 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x676a0327 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6f1372ae ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x78a8106e ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7f36e7c6 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x81fcf16e ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x835921fb ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x867ccd77 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8ae685b9 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8fbcc6a0 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x91b11d20 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x91b8a8fe ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9a6f1a3d ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa77b51bc ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xacc80e98 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb8f9d883 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb904b795 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc38efcc3 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc43b400c ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc84965ec ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcc14abb9 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xce30e8ba ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdd41a652 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe0eda739 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe2ee3e85 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe4b12b75 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe6a4d6da ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xeac49b96 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf76fd333 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x13fb4d8f i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xf009ded5 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x05c889de hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0dc6deca hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x10d75cde hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1809dcb6 hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1bbbaaa8 hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1bca7ca6 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x25b7760a hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x283d4c9e hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2911f6df hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2f23f220 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2f70469e hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x32d72287 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x363eba0c hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x38ffdaab hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3e2934fb hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4487f364 hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4953e4c0 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4c96577c hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x504da826 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x52bcb35c hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x53778d30 dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x565302b3 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5b163509 hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5c0882ab hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5e1bdf20 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f239135 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x632b2bdf hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6a4a3ce8 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x705bf63a hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7890d318 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x78e86eeb hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x791c27c6 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7d206111 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7e1ce20b hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x801791e6 hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x81718119 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x84ebcde1 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x85c22d16 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x875191df hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8c8e4617 hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x975c4b61 hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9809a8c4 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa42f1b63 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa5e6b6a6 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa7c2156e hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa848296a hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa85bedc6 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa974406a hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xad2dc51a hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb1a56e8f hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb6ef4168 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb7820e47 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbb5fd80e hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc4be7278 hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcb8c0ae4 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd7c77784 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd9251535 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe4173349 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xeff61a37 hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf2160204 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf29f86f1 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfb3b3126 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfeb2889a hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x58e0b9e0 ohci1394_stop_context +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xc3ae3efe ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xd41fd1a6 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x01f5d9c3 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x08a37740 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x1de2cc4b rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x2a126239 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x92abf738 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xb0900f14 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x036fa2e4 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0b992316 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x10e90fc6 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2371984f ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x29225484 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2d1c82e8 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x32a6218d cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x427411d6 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5df3b417 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x698320ee ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x88459110 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x8ae03137 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x913bfaa2 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa1467fca ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xac9c9609 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xddbd01b7 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xfe8307f9 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x015328df ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0a3469c8 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0c682796 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0e2f70fe ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1412daee ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x15a21f2a ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x174a40f7 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1bfae830 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x278b2bf5 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x285bbd82 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2dff2214 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x37e54588 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x43425a96 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5010b060 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x52edf1e8 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5343981f ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5552daeb ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x55df504e ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x57498cee ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x58b94a03 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x60bba0f7 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x685d8d08 ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6fc23bd1 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x726c6b9a ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x73aed56c ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7c5436b6 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x83e8dc88 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x850c023e ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x850ce48a ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cd60d94 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8f8311fa ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x92d6a743 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x97fc9d7c ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x98baa282 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9905ded0 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9b8a9195 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9c2abc00 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e0b4f2f ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9eb26e4d ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa2373013 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb4cf2767 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb855cc8f ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbaf0de27 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbe011fc6 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbe9fdad1 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc4d7038e ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc7a5fb76 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc7b256c7 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc93d327e ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcfc2e9f6 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd1e90d82 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd2d5b4b6 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3349f95 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd4739852 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd4894cd6 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd832da18 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdc183d89 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe103239a ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe1ab4fc7 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe317df67 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe61892cb ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe69b13a9 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf35b6baf ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf4c7f4c3 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfd757c8d ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfe2b8a70 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x46a1336f ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x5b0d82f9 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6bb7bcf2 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x831aceed ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x8517f1b6 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x8537da79 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x85fed743 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x9a82fc08 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa0e1640f ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc77cc123 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xedfbf6f6 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xfaedd051 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x2bee8d3c ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x51b13b31 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x56404a4f ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5d72dabc ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x727b379b ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x73a64cb5 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7cb5eaf9 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe025d67a ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xe20cade4 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x016cfdbe iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x13f226c1 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x19ce366b iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x30753147 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x534111f7 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x6e61d86a iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x7fc3b687 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xe7c2fe72 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x1ce79d89 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x245e08b5 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x250058d4 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2f0a4515 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2f0dcedd rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x34ae613f rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3e654fca rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6550fc11 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6621da64 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7d047625 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x82555e8c rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x98cb47e6 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x99284be4 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9f0ceba4 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xb3d819ff rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xbc3a5aad rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xd3ab7389 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe2e9b3e8 rdma_destroy_id +EXPORT_SYMBOL drivers/input/input-polldev 0x2ce6548b input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x3f557915 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x42395fb4 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x845502f3 input_free_polled_device +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x34c0d7f6 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47dbfa0a capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x55e8d6da capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x588c1c4e capi20_set_callback +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x65b2f830 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x788d398c capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x82d2a82c capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x94f1f31a capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa1a6622f capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc1d0ab4f detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc1f71a42 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe1250779 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe9f62f29 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xf3b1550a capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x396be8d2 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x42b331d7 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x43f44676 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xc6095414 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x19ccd334 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x71af31f0 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xf95172e0 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x03b94c00 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x0b549af3 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3084d3f6 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x33c67b04 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x38e4a988 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3ea336fd mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x429129f2 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x438b07a7 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x47c92f7b l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4c586038 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x569ce3e4 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x87eb3b43 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x89fb44b5 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8bdc17bf recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x903861cb get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x933f6d84 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x98b811a3 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9fddb0ad mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xace35cae mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xadbf6905 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb54b2b89 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd6bb8d1b confirm_Bsend +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd9a7fbfd mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdb1ea4bc mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe4e0e96a create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xec31cacd recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xfffcfba1 recv_Bchannel +EXPORT_SYMBOL drivers/md/dm-log 0x2e1e7f9d dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x3257afda dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x6bea0483 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0xe596cdb3 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x1bbef005 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x23ec2a62 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x3fd188a7 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x98542b6b dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/md-mod 0x1abc818a bitmap_start_sync +EXPORT_SYMBOL drivers/md/md-mod 0x20db2dcf md_register_thread +EXPORT_SYMBOL drivers/md/md-mod 0x27ef64a2 md_write_end +EXPORT_SYMBOL drivers/md/md-mod 0x31378f17 bitmap_unplug +EXPORT_SYMBOL drivers/md/md-mod 0x34a475f8 md_error +EXPORT_SYMBOL drivers/md/md-mod 0x3ee89ee0 md_integrity_add_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x4eabcd27 md_integrity_register +EXPORT_SYMBOL drivers/md/md-mod 0x5d92b359 unregister_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x60353de5 register_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x65e29267 bitmap_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0x78ffcee0 md_unregister_thread +EXPORT_SYMBOL drivers/md/md-mod 0x88249bb6 md_wakeup_thread +EXPORT_SYMBOL drivers/md/md-mod 0x8adaf498 md_done_sync +EXPORT_SYMBOL drivers/md/md-mod 0xa670eddf bitmap_startwrite +EXPORT_SYMBOL drivers/md/md-mod 0xa6fb00c7 bitmap_close_sync +EXPORT_SYMBOL drivers/md/md-mod 0xa7a20dc6 md_write_start +EXPORT_SYMBOL drivers/md/md-mod 0xac1160a5 md_set_array_sectors +EXPORT_SYMBOL drivers/md/md-mod 0xb5c357f5 md_check_recovery +EXPORT_SYMBOL drivers/md/md-mod 0xb7e5af0f mddev_congested +EXPORT_SYMBOL drivers/md/md-mod 0xc0234645 md_check_no_bitmap +EXPORT_SYMBOL drivers/md/md-mod 0xdbff933b md_wait_for_blocked_rdev +EXPORT_SYMBOL drivers/md/md-mod 0xdf0a5c72 bitmap_cond_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xdf0c2f08 bitmap_endwrite +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0x7b85d712 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0x7e9a6817 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0xbcb7c802 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x72307aad xc5000_attach +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x80bb8208 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xa2d23b9e cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x02645ca1 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x06c83dd0 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x3e693529 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xacb96479 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xc89f8a76 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1f67ed41 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x27fd8a0a saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x393122ba saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x40beeac9 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x5ce36e5c saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x810b7623 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xc466eb0c saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd07af60a saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd5e8b451 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xded2a75f saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe533d50b saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xf02c029f saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/soc_camera 0x2063ee0e soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x7c90abf0 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x9f762df1 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xb086966e soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/soc_camera 0xd6894f79 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/tveeprom 0x00f76c33 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0x09a646ff tveeprom_read +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x5b998df4 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1f5b90a6 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x5be86895 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x1da130c2 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x5ef06604 video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0x79861340 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0x8b37aae6 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x993948c1 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xc70b00e2 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0xd0707ff0 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xdc9bd9e8 video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xee6b149f video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0340c5a0 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0860cb7d mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1b9cbba4 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1c3f4bb2 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2f936ad5 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x39628e9f mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x438c36d3 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x46ff63ac mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x480b52ef mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x48db196c mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4cf63b00 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x67a8e258 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x71676212 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x73c81e50 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x76fda5c8 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8b393689 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x942fc1a2 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x945ea73c mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9efe7d55 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa51a745b mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb189faf7 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc096721d mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xce2de1e1 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdb4e17be mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe2a14c77 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfaa5e727 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0b58b176 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1196bff1 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1c6b7e11 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x325567b7 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3ddd4abe mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3fb78ea6 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x41384ae8 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x44d6b7cf mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5c0b4465 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x67fbe720 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7441687a mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x80ef18f0 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x82927ab1 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x943b010a mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x949b7baf mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9d2a14b7 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa166f960 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xad5ca673 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb1dd8048 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbee9fe00 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xcf926ea0 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe06c53fb mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe1d9874a mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfad7194c mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x02977079 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1a2da281 i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3310853c i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x4ccbc8e3 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x506e6aa8 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5823c883 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5b77d70f i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x61bf215a i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x62019d2d i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x88345508 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x93b93283 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xacf57a1e i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xadc34118 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xae29f338 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc47edc5f i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd4efe2cc i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xd92c059e i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdd6258df i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe9337afb i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xeee660a7 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf1842f2c i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf7028c5c i2o_find_iop +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x335b55a6 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x54ecff88 ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x83348101 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x90827cf8 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xa57dba3a ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xd2310e85 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xeb77ede2 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xec2184c7 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x7a892b49 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xc079e9ca pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x185d773f mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x8cb5250d mfd_add_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0x63fdb041 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x83c67da4 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x39adbda4 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xbfa946e4 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x2242be3a tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x39fcc6a3 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x40c844af tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x5c80797e tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x5f077304 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x6f447eec tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x7623e94c tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x7a6dc8ba tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x89428317 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xc424bde6 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xcea61c7f tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xda141909 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x53951b58 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x05638bd0 mmc_set_data_timeout +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x0d5a5430 mmc_detect_change +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x14af9e5e mmc_try_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x1d7cfcc9 mmc_request_done +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x26f603b5 mmc_release_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x283a2e7b mmc_wait_for_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x293c5e4b mmc_align_data_size +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x2dabf689 mmc_host_lazy_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3b7524cc mmc_power_save_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x4a4dd139 mmc_wait_for_app_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x546d4b09 mmc_free_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x5b9b10c3 mmc_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x6292cff3 mmc_card_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x6657467a mmc_add_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x94739e0c mmc_alloc_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x9c1b074f mmc_host_enable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb1dddd1c mmc_card_awake +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xcbea7b6f __mmc_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xd9c1bd2d mmc_power_restore_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xdf9be391 mmc_register_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe0ade74d mmc_remove_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe9309ae9 mmc_card_can_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf07b57a3 mmc_wait_for_req +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf2a03f41 mmc_host_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x0960dd02 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x4ed7e66f mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x7d633406 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x9ac36992 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xa7aed0be cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x073d8dab unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x26ff320d map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x860d2fce do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xc8375439 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x4f36b587 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0xa3ab30ff lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0xdee655b9 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x0d336952 del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0x2ea9b4c9 add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x945518b1 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xac31319e mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/nand 0x2eafa78f nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xd6b557e2 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x08ee5e44 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xa545f412 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x4e15ab05 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x6e3034ed flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xdbda4400 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xf3d8fe95 onenand_addr +EXPORT_SYMBOL drivers/net/8390 0x418f2537 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0x5dcbea23 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0x8b853b49 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x976108ed ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0xa2173d58 ei_open +EXPORT_SYMBOL drivers/net/8390 0xa764a738 ei_poll +EXPORT_SYMBOL drivers/net/8390 0xaea90ad1 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xdc7cea30 ei_close +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xe02a5505 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0xe8ec0d37 ei_tx_timeout +EXPORT_SYMBOL drivers/net/bnx2 0xd1c0c3f8 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x46b1d82b cnic_register_driver +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x06cbb367 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x143fe52b cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x32624ed2 dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x47478cdb t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x50896686 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5d7186a5 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x639a1429 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6cc1cdf4 t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x851a2541 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8979b6e1 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x94beba8d cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xae6b1cda cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xc1737354 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xc58c0b0b cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xcaf1b5dd cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf6a51d6f t3_l2t_send_event +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x03848b21 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x15c42daa mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x29e44feb mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x2b4469cd mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x40337d75 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x4b64cb5b mii_check_link +EXPORT_SYMBOL drivers/net/mii 0xafa081f8 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0xc1906ff1 mii_check_media +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0xa7e6ea64 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0xc50e1527 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp_generic 0x33870ea4 ppp_output_wakeup +EXPORT_SYMBOL drivers/net/ppp_generic 0x38af6193 ppp_register_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x4b41af75 ppp_input +EXPORT_SYMBOL drivers/net/ppp_generic 0x57ad0deb ppp_register_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0x79509142 ppp_unregister_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xaa054983 ppp_register_net_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xb1f579b2 ppp_input_error +EXPORT_SYMBOL drivers/net/ppp_generic 0xc1ccb545 ppp_unit_number +EXPORT_SYMBOL drivers/net/ppp_generic 0xe9637d53 ppp_unregister_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xea082401 ppp_channel_index +EXPORT_SYMBOL drivers/net/pppox 0x0817a651 pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x614a9fca register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xf3fa168b pppox_unbind_sock +EXPORT_SYMBOL drivers/net/slhc 0x2278e94b slhc_remember +EXPORT_SYMBOL drivers/net/slhc 0x26b760c4 slhc_init +EXPORT_SYMBOL drivers/net/slhc 0x3fe0d1c0 slhc_free +EXPORT_SYMBOL drivers/net/slhc 0x62538167 slhc_toss +EXPORT_SYMBOL drivers/net/slhc 0x7e87227e slhc_compress +EXPORT_SYMBOL drivers/net/slhc 0xa78d9eb7 slhc_uncompress +EXPORT_SYMBOL drivers/net/wireless/airo 0x56a242a6 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x736f8d9f init_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x77eebe0c stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x530f8ec3 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x736e30d2 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xccbc8daa ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/atmel 0x6a11aa80 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x7c43dbb6 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0x96579562 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x07d35608 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x08888570 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x14307f28 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1ca9ca74 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x21056447 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2264a0f3 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x29aef105 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3be8d41f hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x46321a6b hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x527054be hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x59d48e4f hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x60212c28 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x68562e84 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7706acb5 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7e84c36b hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb0e5421f hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb6fc9f37 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc337428f hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc433f484 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcdfb0b1e hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd0f68c70 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd3e3315a hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe7c33d06 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xed76b32e hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf7b093c4 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x08f205d3 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x122806cf libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1cffb966 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x227395aa libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x28ac0897 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x376532ed libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3f0db492 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x42b4b716 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x570ddc6d libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5bc2c10a libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5db422d6 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x70e61b19 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8a934ec7 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x94284af7 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x959a0e24 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa7efe084 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd5854b07 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd7fcbec8 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd99dbee6 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xee226f90 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf4482193 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0001a2e7 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x025b330d iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x03676ea3 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x08b1010e iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x09c5595c iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0b50d7fa iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0b782e87 iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0bd8d9f9 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c07a769 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0f2e147e iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0fea5a5e iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1001fdb5 iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11d7ec0b iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1346bcd5 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x176d963e iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x180aafa8 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x180c0959 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x222b6467 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x231a6169 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2553ff55 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x25816600 iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2592ee60 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2655e62b iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2656dbbe iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x29600500 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2a182463 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2bede30c iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2f07ff5e iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2f0ded54 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3156a032 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34383afa iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x35cd96fe iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3637a0e9 iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x37743d17 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x39716a64 iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x39f1744f iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3b633ad7 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3bfd62ca iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d89b651 iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3e209748 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x433e0c04 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x44ad0f3c iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4718b44b iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x48e95d85 iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4ccae1cd iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4d2e2ae2 iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f9af387 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x50c04dcf iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x50cac2db iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x569fa6f4 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5709625e iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57c3c8e6 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5866b2f2 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5a899b81 iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5ab6700e iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x638a99be iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x67dce404 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x67ef45e1 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x68e0b048 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x69a4d1e0 iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ab1040c iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6b960348 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6d03a0bf iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6da098a1 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ec328b8 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x706ad687 iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x70d955df iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75606be1 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x79b0c454 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7f6d89c6 iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x830af697 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x833ea9d3 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x84b3b65b iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x85913c93 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8646d0f1 iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x87717f11 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x88d5f0be iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8b00f10e iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8b126c80 iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x92e37822 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x97b00dfc iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99d1cd84 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99dfec32 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9af721b0 iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e413df8 iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa028d641 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa15d0254 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2b68576 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2d99361 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa41461a1 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa637c52c iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa6660c1e iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa6f9a5ff iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa70780f1 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa7853482 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa78ae6ac iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa7b26ac8 iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa9abb941 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaea2b72b iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaedec7e3 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xafba9bca iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb07dc677 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb4dc5161 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb5377414 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb5dddbe5 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb80283d8 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb8b815c1 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd1260b7 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd16cb6d iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc08e3574 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc11ae45b iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1b0e807 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc1df9815 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc31ec2be iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc3a85bdd iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7223477 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc844bcb6 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc90d53e9 iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc9e4a50f iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xccb10866 iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcef2363a iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcfdfe368 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd6788cc2 iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda58a692 iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdfea03b3 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0479940 iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe798e87c iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeb4a7cce iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xecbe494d iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xed200479 iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xee9702b4 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf13b616b iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf3450b83 iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf6fc1960 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x0e1e0e21 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x374a5eaa orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x5d9735c0 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xb716094b alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xba5bc307 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc57b42c9 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xfff8542e orinoco_up +EXPORT_SYMBOL drivers/parport/parport 0x10d8ed4d parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x181200cb parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x1921a17b parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x1c4e4d1e parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x1e6c51d0 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x278718a8 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x3283054c parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x33b8fefa parport_write +EXPORT_SYMBOL drivers/parport/parport 0x436aef01 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x4dad38c3 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x551afa36 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x610bc1c3 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x67175f92 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x7670a401 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x788be052 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x7c4347ec parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x85ace5d1 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x8a808297 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x8fb9f5d5 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xb4fa3669 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0xb828e521 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0xb91f4396 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xc5a82783 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0xcbb8ec99 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0xcfd0bbb5 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0xcfd16ade parport_read +EXPORT_SYMBOL drivers/parport/parport 0xd1a81d07 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0xd47c45a8 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0xe6c03959 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0xf4e0e759 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport_pc 0x4f115efe parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x60709453 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1532335c pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x19024e02 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x26abfe77 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x31f91729 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3593e69e pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4434d199 pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x501f7451 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x515f80ef pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x77527074 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9e97026e pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb917e847 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd2a8fbc7 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd63b4012 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd84a377c pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xef8d5132 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x09adc73c release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x0ba3f30c destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x16ad55f2 pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x308dd61d pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x33f691ac pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x36e7eaf5 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x392b86da pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x43b72e1d pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4432d9ff pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x51a86690 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5e37b878 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f078921 pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5f909fa6 pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5fdb1cf5 pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x664e263a pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x66960b07 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6bcd90b1 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7a47919c pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8b4c7445 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8ba26812 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x94a5c10d pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9589099b pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x95a8aa50 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x96e822a6 pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xabb66276 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xaf4a71bf pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb2482580 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb53efa17 pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xbb42459f pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc5cdcf92 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdae95833 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xddcda588 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf3f410f1 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x8fa66453 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0xf5c5d3fb pps_register_source +EXPORT_SYMBOL drivers/sbus/char/bbc 0x007082ce bbc_i2c_attach +EXPORT_SYMBOL drivers/sbus/char/bbc 0x3e85b89d bbc_i2c_writeb +EXPORT_SYMBOL drivers/sbus/char/bbc 0x78c3dad4 bbc_i2c_write_buf +EXPORT_SYMBOL drivers/sbus/char/bbc 0x83b291c5 bbc_i2c_read_buf +EXPORT_SYMBOL drivers/sbus/char/bbc 0x90fc1dfc bbc_i2c_getdev +EXPORT_SYMBOL drivers/sbus/char/bbc 0xdd6e8559 bbc_i2c_readb +EXPORT_SYMBOL drivers/sbus/char/bbc 0xfff0071f bbc_i2c_detach +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x32d9dfbd scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x504cd654 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x658a76c9 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x6bd8dad2 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0xf1dd3c9e scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x045669d3 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x0b750bde fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x77223cb0 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x94cfa1ce fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9f980316 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xe6e88116 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xf73fd428 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x02d657c2 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x12621b6c fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x22e8066b fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2700c5d0 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x274ffa90 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x288c7b1c fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2c896e14 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36974593 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3aa71edf fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4187e55f fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4b1b8046 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4ef77fd9 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x54b193be fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5886286c fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5aa5274d fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5ea4b624 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6ef9d28c fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x72e6ff36 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x73ff8e0a fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x762bb07c fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x789e84fc fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b05cbd6 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7dfd16ed fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x808f164f fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8b95ebc7 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x99d91ec2 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9f990273 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac238a7a fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb38ae9cb fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb49bc854 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb64b469b fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcf150173 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd13cab87 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd990af0d fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdbd14132 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xde3e3d80 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe12c4dc2 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe239640d fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xed8b058d fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xee445814 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf9cde9a4 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfa56ea79 fc_rport_init +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x6c9808e5 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00a2a28b osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x05570c33 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x05b736ac osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0f1f6346 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1c061c25 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x231f593e osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3abac70a osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3df2904d osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x419d9cf6 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x42c8b37b osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x48c76ca8 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4c88b9a1 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x586dad59 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x63f3f4a7 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x69251a31 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x69c3cca0 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x71b510da osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7a2a560b osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7de6d101 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x86a00be6 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x91540329 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x91a7f82f osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x920ea51c osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9a9ad571 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xadce3d90 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbba9f00b osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbc882642 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbf5d72eb osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xce2c5ddb osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd7a0a9b5 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd8acef2f osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfb0f5bbb osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/osd 0x168d2e60 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x260d473f osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0xb63ba367 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5b0b2574 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x782395ae qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x989e0d8c qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x9f02c760 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xd841a430 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe1378c0f qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x8fb4cab3 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0xe5128b39 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0xea138b68 raid_class_attach +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x046dc34b scsi_unregister +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c5610d0 scsi_finish_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0c9cfb82 scsi_host_put +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0dba8125 scsicam_bios_param +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x0e1a02d9 scsi_prep_fn +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x10b9b2ca scsi_eh_restore_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x136ada7e scsi_device_get +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x16257685 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x162fb369 scsi_is_target_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x170906e1 scsi_target_quiesce +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x17d5b77a __scsi_device_lookup_by_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1814f698 scsi_init_io +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x18b72366 scsi_register_driver +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1dcb33a7 scsi_host_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x1ee4268f scsi_print_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x29b5b754 scsi_track_queue_full +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2a1dba8a scsi_prep_return +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2b9cf39e scsi_put_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x309108ee scsi_device_resume +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3154cb45 scsi_prep_state_check +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3184e1f0 scsi_report_device_reset +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x31feae70 scsi_eh_finish_cmd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x32026706 scsi_free_host_dev +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x35ce69f6 scsi_print_result +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x3d0d61d4 scsi_reset_provider +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4305db27 scsi_unblock_requests +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4c220ad2 scsi_host_get +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x4c92d58b __scsi_device_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x52298679 scsi_test_unit_ready +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x5298a790 scsi_device_put +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x5468fcc3 scsi_eh_prep_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x5679945c scsi_device_quiesce +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x5696dd2e scsi_device_set_state +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x5dbe61f4 scsi_get_device_flags_keyed +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x621329d5 scsi_setup_fs_cmnd +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x641fb58e scsi_scan_host +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x67c46078 scsi_allocate_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7aebd275 scsi_ioctl +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x7f83d06c scsi_remove_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x81bb3e68 scsi_block_requests +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x83a21ff4 scsi_calculate_bounce_limit +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x88b80614 scsi_adjust_queue_depth +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x8a8a472b scsi_command_normalize_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x8ff57a44 scsi_execute_req +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9240beb4 __scsi_iterate_devices +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9323e27e scsi_block_when_processing_errors +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x944c22d8 scsi_nonblockable_ioctl +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x96901a60 __scsi_put_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x97074ecd scsi_is_host_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9977bb2e scsi_host_set_state +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x999ac910 scsi_rescan_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xa69c4550 scsi_host_alloc +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xaeb25252 scsi_add_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb172ab43 scsi_is_sdev_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb2345211 scsi_dma_map +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb5c20510 scsi_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb6a4d2d9 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xb6ef7f04 scsi_get_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xbd8ba60c scsi_remove_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc147efe3 scsi_mode_sense +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc1d61ea1 scsi_free_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc3fcdc8d __scsi_alloc_queue +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc4a3414b __starget_for_each_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xc78ae193 scsi_print_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd0852713 scsi_release_buffers +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd0f877b4 scsi_scan_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xd5be827d scsi_set_medium_removal +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xdf5bd081 scsi_report_bus_reset +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe0246702 scsi_target_resume +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe06987bd starget_for_each_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe33b9c1f scsi_device_lookup +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xe55ca163 scsi_add_host_with_dma +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xea10212a int_to_scsilun +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xea32f1e4 scsi_register_interface +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xec1ddcc8 __scsi_add_device +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xee736bd9 scsi_register +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf1bf3089 scsi_get_host_dev +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xf90d6a18 scsi_device_lookup_by_target +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfbaa41e3 scsi_kmap_atomic_sg +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfcc580a9 scsi_execute +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xff97ad1f scsi_bios_ptable +EXPORT_SYMBOL drivers/scsi/scsi_mod 0xfff4b245 scsi_dma_unmap +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0f853ad6 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x20a4d6ec fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x2b720e9d fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x2caf687a scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x2cf76519 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x49528697 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x55278f45 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7a979e46 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x92719b8c fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xbbeb98fb scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xc9984f50 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xfd3ff02f fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0121cba2 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x071d069a sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x085e2e36 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0d26c8e4 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x26d01dec sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x329aa5cc sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x33422466 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x380555c1 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x413fd207 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x41a05994 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x436d88d3 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4f1ee510 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5a76e187 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x615e6b23 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x677cb946 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x84de27dd sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8dc884f1 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x921b0b50 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9e1d4a83 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9fdcf679 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcd5e9b56 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd45ccf5e sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd60a220e sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd8c18cd2 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdff584c3 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf39161a2 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x71654367 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xb0630fea spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xb9ab69d8 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xc2dc8f59 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xd8ffeed8 spi_attach_transport +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/8250 0xfa5723dd serial8250_register_port +EXPORT_SYMBOL drivers/ssb/ssb 0x03b1757a __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x0b24f1cc ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x22d774bd ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x291284f2 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x330bb55d ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x3861b5df ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x38d7834e ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x3ad3a94f ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x41bec6b6 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x551cf884 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x649978f5 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x6aaca59b ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0x764b2a93 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x7b907d52 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x846649ee ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x89cbafb5 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x97d5a9d8 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xada94e32 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0xae3d7a47 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xb79ea90b ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xcd400544 ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xebe4a2c9 ssb_driver_unregister +EXPORT_SYMBOL drivers/telephony/ixj 0x82278ab8 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x2ab1c241 phone_register_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xf2ecbd45 phone_unregister_device +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x4719a90c sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x1bc7c0a9 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xea07ea24 usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x87175abe lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x9416770a lcd_device_register +EXPORT_SYMBOL drivers/video/display/display 0x834fa4e8 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0xda5aaca9 display_device_unregister +EXPORT_SYMBOL drivers/video/output 0x6f9f3ac1 video_output_unregister +EXPORT_SYMBOL drivers/video/output 0x93359e68 video_output_register +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b4ffb44 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x367a4843 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x4472ce54 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x5fa5fe52 svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7945a491 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8a6c89c2 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xaaaeaba5 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0xceb2facb sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0x1bdd8d19 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x581a8d62 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x8b9d5506 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x8d4068e2 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x1d860245 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x29a76e35 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4ec9786c w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb9d5bbd6 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x320bcd47 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x3e6f9567 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x7b1882dd w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xbc7fd453 w1_unregister_family +EXPORT_SYMBOL fs/configfs/configfs 0x014c9b6d config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0x308ca573 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x30ef5a14 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x6d82f2e3 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0x93f5af70 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x95729054 configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x9f1af723 config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xb5cb4450 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0xb6877774 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xc3b63e63 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0xd4ea3eb7 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0xfc8f8ced configfs_depend_item +EXPORT_SYMBOL fs/fscache/fscache 0x02b8a82c __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x0d98254a fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x19a18eba __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x1e030246 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x24ae80f4 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x2b868cab fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x2d3502aa __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x433385e4 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x545f0910 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x5f03639c __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x6c650c82 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x6d79f74a __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x7229b966 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x729427a6 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x7cede447 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0xa20bd4e1 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa2e50f3b fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xa4c6bd26 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0xa95b32c3 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xb2f860f1 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xc039e348 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0xc5c61392 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0xd1038e4f __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0xdea8e75e __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0xe2392268 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xebd812a8 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0xef7761d0 fscache_object_lookup_negative +EXPORT_SYMBOL fs/nfsd/nfsd 0x1f573533 nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x96ce9bb4 nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0xdb389aec nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/quota/quota_tree 0x412873cf qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x7afffe04 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x948481a2 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xa4ec0456 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xffba8658 qtree_release_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-t10dif 0x782acba5 crc_t10dif +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8022 0x59505a03 unregister_8022_client +EXPORT_SYMBOL net/802/p8022 0xc8c44514 register_8022_client +EXPORT_SYMBOL net/802/p8023 0x4f815e1e destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xbdc89016 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x0554390a unregister_snap_client +EXPORT_SYMBOL net/802/psnap 0x7fa0c75e register_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x005dd983 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x01c0f44f p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x13e04fc8 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x1753f955 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x175e721b p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x3795535f p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x3f4bad03 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x46b4b02c v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x51f24997 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x600eaca7 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x61c3f7e9 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x660a64ab p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x6e40e33b v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x724595f3 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x81967d51 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x85e5f500 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xad4d39eb p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xb606e1eb p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0xc993acad p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0xcf6e0d03 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0xd5a8fb00 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xdcbcd441 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xf22d1efc p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0xfa17b1c1 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xfb27dd32 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xfbc589dc p9_client_walk +EXPORT_SYMBOL net/appletalk/appletalk 0x047dee91 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x6339cc4d aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0xc44eaf97 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0xc8e48f48 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x13fda327 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x2b026309 atm_charge +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x31eb46b9 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x47ea724f register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x78127ac6 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x7d3be40b atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x8c25dd01 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x9456d7cc atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xa6d2a1c6 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xae99c92f vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0xd9a215fb deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xeb1f9860 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/bridge/bridge 0xe7d583a2 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x15f87b8b ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x89de5431 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x93a69d8a ebt_register_table +EXPORT_SYMBOL net/can/can 0x4bf35481 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x4c1e67d7 can_send +EXPORT_SYMBOL net/can/can 0x8a670919 can_rx_register +EXPORT_SYMBOL net/can/can 0xdc68027f can_rx_unregister +EXPORT_SYMBOL net/can/can 0xe083dc4a can_proto_register +EXPORT_SYMBOL net/ieee802154/nl802154 0x24db98ed ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x9aa8b5a1 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xb038c17a ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xb6c33330 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xbd2373b7 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xbe4cf880 ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xc7834719 ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x13a24753 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0x1bfb7b05 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0x3aef5d68 wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0x54f93a56 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x5e2788e2 wpan_phy_register +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x0274a5ba arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xcb8dac95 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xe18d9e43 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x5c7d60da ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xe6dac4f2 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xf37a8ce4 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x028fd811 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x131b0177 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2d9de61b nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x47c72dbe nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x68219343 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x8bb633fa nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xd0f2b364 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x46d227ff xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xb9966f0c xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/ipv6 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL net/ipv6/ipv6 0x11714581 inet6_unregister_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x1672ae37 inet6_register_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x172d868c xfrm6_input_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x2642c904 ndisc_mc_map +EXPORT_SYMBOL net/ipv6/ipv6 0x27bf891f inet6_getname +EXPORT_SYMBOL net/ipv6/ipv6 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0x34704d3e ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x4382f7b9 compat_ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x4a687be4 ipv6_chk_prefix +EXPORT_SYMBOL net/ipv6/ipv6 0x4d0eb3aa ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0x5cad61dc nf_ip6_checksum +EXPORT_SYMBOL net/ipv6/ipv6 0x5f2100b2 ipv6_push_nfrag_opts +EXPORT_SYMBOL net/ipv6/ipv6 0x6bd239ca ip6_xmit +EXPORT_SYMBOL net/ipv6/ipv6 0x6d9b6dbd ip6_route_me_harder +EXPORT_SYMBOL net/ipv6/ipv6 0x715a2b39 xfrm6_find_1stfragopt +EXPORT_SYMBOL net/ipv6/ipv6 0x84936040 icmpv6_send +EXPORT_SYMBOL net/ipv6/ipv6 0x8bcbafae inet6_bind +EXPORT_SYMBOL net/ipv6/ipv6 0x9149531a ipv6_dev_get_saddr +EXPORT_SYMBOL net/ipv6/ipv6 0x94d50ccc inet6_del_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0xaf4cb7f0 ip6_route_output +EXPORT_SYMBOL net/ipv6/ipv6 0xc04c267d xfrm6_rcv_spi +EXPORT_SYMBOL net/ipv6/ipv6 0xc0fd515f xfrm6_prepare_output +EXPORT_SYMBOL net/ipv6/ipv6 0xc1518ae2 ip6_frag_init +EXPORT_SYMBOL net/ipv6/ipv6 0xc931922e ndisc_send_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xca718455 ip6_frag_match +EXPORT_SYMBOL net/ipv6/ipv6 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0xdbdc7364 inet6_release +EXPORT_SYMBOL net/ipv6/ipv6 0xe0ab67b5 ndisc_build_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0xe45c0bd1 compat_ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0xe59fb762 inet6_add_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL net/ipv6/ipv6 0xe7e31a89 inet6_ioctl +EXPORT_SYMBOL net/ipv6/ipv6 0xeb84e281 in6_dev_finish_destroy +EXPORT_SYMBOL net/ipv6/ipv6 0xec5dae2f rt6_lookup +EXPORT_SYMBOL net/ipv6/ipv6 0xf6cee9cd xfrm6_rcv +EXPORT_SYMBOL net/ipv6/ipv6 0xffeae33a ipv6_chk_addr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x0be3ed32 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x73422ca0 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa963f66e ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xf26f4516 ip6t_register_table +EXPORT_SYMBOL net/ipv6/tunnel6 0xbdd58be7 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0xf2144d88 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/llc/llc 0x034e1e04 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x30254276 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x37f5237a llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x38b92846 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x3d20264f llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x556643e3 llc_sap_list_lock +EXPORT_SYMBOL net/llc/llc 0x7193f005 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0xdffe7ade llc_set_station_handler +EXPORT_SYMBOL net/llc/llc 0xed91b918 llc_mac_hdr_init +EXPORT_SYMBOL net/mac80211/mac80211 0x0153cb6d ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x03b8304f ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x046f97ff ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x07efeb0e ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x180f1bbd ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x182c7021 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x185e753b ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x189a1a6e __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x1c0421a8 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x1dccb1b8 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x354c960e rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x3941523a ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x412cb40f __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x4992704c ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x4b24df03 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x4baabef7 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x575798b9 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x5fec6374 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x618fa383 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x62b8b3dd ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x6d850372 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x70be9626 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x7225ab8b ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x7e2f3f4b ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x7edf7ac2 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x93b85bd9 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x97123685 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xa357053b __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xa4573c6e ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xaf06a6d0 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xb0ef0343 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xb20c76b7 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xc8c68a6e ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xcaf18666 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0xcf9254fe ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xd5a7fd1c ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0xe7374afe ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xf6edeb08 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0xf84d0523 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0xfb598d87 ieee80211_free_hw +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x055fdd4c register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1ac74903 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x23895606 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x274906c1 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x3289d4d7 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4b251d9c ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x6568522f unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x8a85fd78 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xbcba3711 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd82481db ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xfa25588a ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xdb696566 __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xf5a08b98 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x0b311a16 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x08c81eb7 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x28ba5bd6 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x2c285e57 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x91c8497e xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xab11c9e3 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xd15281f4 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0xd738ea9d xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xdb3fd6ce xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xe228e3e0 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xeb7190a9 xt_unregister_matches +EXPORT_SYMBOL net/phonet/phonet 0x0587f334 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x4093be2d phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x6b8390d6 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x92e05e63 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x990c82d6 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0xcb83eeea phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xdefd38de pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0xe4c35ddc pn_sock_unhash +EXPORT_SYMBOL net/rfkill/rfkill 0x2e6afd06 rfkill_set_states +EXPORT_SYMBOL net/rfkill/rfkill 0x4d0b5fae rfkill_pause_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x569c446c rfkill_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0x63b83e7a rfkill_get_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x688c66ec rfkill_set_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x6f498f1c rfkill_alloc +EXPORT_SYMBOL net/rfkill/rfkill 0x7227f7d2 rfkill_blocked +EXPORT_SYMBOL net/rfkill/rfkill 0x74b1a059 rfkill_set_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x9b9beacc rfkill_set_hw_state +EXPORT_SYMBOL net/rfkill/rfkill 0xc6c52130 rfkill_init_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0xd11bcf3e rfkill_resume_polling +EXPORT_SYMBOL net/rfkill/rfkill 0xd2086ce0 rfkill_register +EXPORT_SYMBOL net/rfkill/rfkill 0xf7a8131e rfkill_destroy +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0e691bca rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x37702ec9 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x39705ec3 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3b40eae7 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4b754e78 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x62d72922 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x73d87af2 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x83761a01 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9014d33a rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa252fae5 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xaa792184 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb17fa677 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xbf1d927f rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xee6cd636 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf46a1108 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/sunrpc/sunrpc 0xf32e3653 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x10b096d6 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x118d2f5e tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x36f3774a tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x3e93b677 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x47eff1ee tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4e796163 tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x764c32df tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0x7d95d73c tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x8dae4081 tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xbdd0e979 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xbe97f146 tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd059ee3e tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeb2d15cd tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wimax/wimax 0x29256104 wimax_rfkill +EXPORT_SYMBOL net/wimax/wimax 0xa76ff1d4 wimax_reset +EXPORT_SYMBOL net/wireless/cfg80211 0x02700904 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x03147d81 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x1142cdb0 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x12f307f5 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x1a2fd74e wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x1b1d6db6 cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x1c81e944 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x1f70d512 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x21a63c5b cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x27a310af ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x34ea1ac9 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x3e379757 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x3e492a38 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x41e26de0 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x46bbe24b cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x4f868597 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x4ff2132c cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x54465a52 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x547c376d wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x55692271 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x5729c48b wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x5c448a3e cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x646f4397 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x84577588 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x9556a699 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xa46dcaa4 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0xb20ea714 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xb2b05987 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xbe1525f6 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xc1a8fae2 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc595aea2 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xdac705d1 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xdf0f9823 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0xdfe1280c cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xeadfe0bd wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xfa09c3e8 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/lib80211 0x041c8f5a lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x3e95313c lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x89f63da4 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xb30301d8 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xc939a980 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xde2a3bb0 lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0xf556889c lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xfe24c7d8 lib80211_crypt_deinit_entries +EXPORT_SYMBOL sound/ac97_bus 0x881b6b4e ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x951d4735 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x578bc326 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x99f07546 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xd63e57bc snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xde3bdceb snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x17c71147 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3c6bee5d snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x3b55d387 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x68b9bd07 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x7adfa053 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x998f2126 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9b1825a9 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb6327286 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xbc51650a snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe58d6519 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0xf3f2d713 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x108e2b41 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x11012d29 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x120e7adf snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x13d91532 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1eca4781 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x307539c1 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x37919387 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x37bcc85d snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3c75888c snd_card_register +EXPORT_SYMBOL sound/core/snd 0x3dc681c9 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x43d93223 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x535f2eae snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x56c15da5 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x625de3aa snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x67965cac snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x70c467a0 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x75d7c889 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x81b514a5 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x874ab3e7 snd_cards +EXPORT_SYMBOL sound/core/snd 0x8d98e966 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x91acf3f5 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x94b32331 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x99d0b45b snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x9e34cfa3 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9fcb0c65 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xae4fb899 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xae798e07 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xbc7fb268 snd_info_register +EXPORT_SYMBOL sound/core/snd 0xbfe2f5ac snd_card_free +EXPORT_SYMBOL sound/core/snd 0xc0827347 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0xc0e82333 snd_device_new +EXPORT_SYMBOL sound/core/snd 0xc5324be1 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xc65e646e snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0xc7cfd1cd _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0xc809aff2 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0xcbf9dec1 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xd264895e snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0xd3389002 snd_component_add +EXPORT_SYMBOL sound/core/snd 0xd4bdfe53 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xdec2448d snd_device_register +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xe5e2f5d4 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xe8332286 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0xea6c990e snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0xf1e70fa1 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xf7a7a788 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0xf98c23aa snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd-hwdep 0xcea5d63d snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x03e17c8e snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x1d68bec4 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x275b21fa snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xb119861b snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xce797f0b snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0690103f snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x091c051f snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x24b1f533 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x328bfb34 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x35cb40c4 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x395e287f snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x4289de46 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x4855e15c snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x4bdbe52d snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x4f37149a snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x517625b3 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5ad18ad6 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x7011beef snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x701c2959 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x781e8bca snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x7c1d3967 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x8135be94 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x8958b895 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x8abe6955 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x98b9c380 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xaad17e9c snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xadb0c136 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0xaf138bc1 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0xb277fb3e snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xb945a066 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xc103b041 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd8dc5383 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0xdb16d77f snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xe4baedfc snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe7db6d65 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xe8985cff snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf3d8866d snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xf4752953 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0xf6547081 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xfe8c2900 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0c5186f7 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0d8e9836 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x298bc50a snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x3a87dbe2 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4ce8d46d snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6008f004 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x675561fa snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x694af65a snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8f59828c snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x994a80eb snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa00c2bd4 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa5dc23d7 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xc4273693 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd4fd6e8c snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe9c9c85d snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf1ffcbca snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xff57bada snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-timer 0x0be9436a snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x15818a30 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x1a7cda01 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x230685a4 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x2c03bb12 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x3899226a snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x50c2f92b snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x53d4215a snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x61881e16 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x6ee69d8c snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x8e32a3d8 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x9d74ab51 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0xe5660410 snd_timer_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x09417cd9 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x01dbe451 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x1c6ca2d5 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x4599903d snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x6d7a2220 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xa22d6348 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xbd6e7d5a snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xc3fb894b snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd6cda652 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xdca4e36c snd_opl3_reset +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x004b2eb6 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x43332551 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x66badf6a snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x758777ec snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x7dd5acad snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x8ea722d4 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xc11e024f snd_vx_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x1e300e09 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x54c78193 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xb5cbed09 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xbaec74c5 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xdc7eedc0 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xe906d844 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x04e48908 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x054c5b97 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x323b69ae snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x5b26acd1 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x9c92df8e snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xb057e1dc snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x01853e4a snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x1661ae51 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x7864c7a3 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x91c3a3c4 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x29c70822 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xa51629c0 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x727fb357 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x93e45056 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x53b3a1ea snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x6f85e9ee snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x81835393 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x9cb15eb3 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xb2fc5366 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-i2c 0x0c537117 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x45691309 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x4803bcbe snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x9542e156 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xef8e282c snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xfe7251a2 snd_i2c_readbytes +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x066f849c snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x12f50152 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x20141b96 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x523a8c51 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x53eac9bf snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5b243b6c snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa2deea39 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa706d671 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa76867dc snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc976656d snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xde35d620 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe4f151fc snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xecff587a snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf2a7de93 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xfb477d9c snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x06bf9826 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x22507eab snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x5019e579 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x66589109 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x778e7b3b snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x878ad6c4 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xca6d4627 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd6abf63d snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xeaa95b23 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x0747ded9 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x6bec33ec snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x8eb949cc snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xce3f819d snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x0b5ebf53 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x33023660 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x7ebc921b snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x8d234553 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xc18a85a3 snd_trident_stop_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x18fc1a2c uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x2c8da219 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x3ede2e97 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x42d98678 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x4a11ffa6 sound_class +EXPORT_SYMBOL sound/soundcore 0x748fb5cb register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x8cf629d3 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x28c8b3a7 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xadda3ae3 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xb9605b22 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xbbc564ab snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xc548ccad snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xd5be8144 snd_emux_register +EXPORT_SYMBOL sound/synth/snd-util-mem 0x01e234f2 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0895e1a9 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x15cfaea4 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x2ba29873 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x45c2abb1 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5d2130f4 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xab810f2e __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb2676a58 snd_util_mem_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x99f9c3c4 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0020f82b blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x0023ea79 set_blocksize +EXPORT_SYMBOL vmlinux 0x00292766 give_up_console +EXPORT_SYMBOL vmlinux 0x002bc432 get_fs_type +EXPORT_SYMBOL vmlinux 0x0045b949 seq_release_private +EXPORT_SYMBOL vmlinux 0x00587beb vfs_unlink +EXPORT_SYMBOL vmlinux 0x005cb6ac revert_creds +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x008db497 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00f7ff1d qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x00ff411c tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00ff8e37 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x01104d81 bio_add_page +EXPORT_SYMBOL vmlinux 0x0111e2d5 __put_cred +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x01413884 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x0170404d of_getintprop_default +EXPORT_SYMBOL vmlinux 0x0183fcca pci_enable_device +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01b89707 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x01e7a04f generic_readlink +EXPORT_SYMBOL vmlinux 0x01f67911 ___copy_in_user +EXPORT_SYMBOL vmlinux 0x0203af4d eth_change_mtu +EXPORT_SYMBOL vmlinux 0x021603ba dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x0218e24a register_nls +EXPORT_SYMBOL vmlinux 0x024e7a0d ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x02558abb sock_i_ino +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x029e4751 find_lock_page +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02b355b2 journal_destroy +EXPORT_SYMBOL vmlinux 0x02d3d5dd tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x02d5f516 drm_lock_take +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02ee8bdc page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x02fe66e2 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x031ee678 xor_niagara_2 +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x034995be dev_get_flags +EXPORT_SYMBOL vmlinux 0x035268d2 inet_accept +EXPORT_SYMBOL vmlinux 0x03593338 journal_revoke +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x03b2fcfa dentry_unhash +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03d7346c sk_stop_timer +EXPORT_SYMBOL vmlinux 0x03dae687 mpage_readpages +EXPORT_SYMBOL vmlinux 0x03e13975 log_start_commit +EXPORT_SYMBOL vmlinux 0x03ea9cf3 sun4v_hvapi_get +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x0400429e set_irq_chip +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x043b8483 __kfifo_get +EXPORT_SYMBOL vmlinux 0x0455d9b6 dentry_open +EXPORT_SYMBOL vmlinux 0x045cfaba pskb_copy +EXPORT_SYMBOL vmlinux 0x046ee767 ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x048d30f2 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x04a1580b blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x04bda5d4 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x04c5d301 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x04d16c61 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x04e8217f generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x04e8fcdf log_wait_commit +EXPORT_SYMBOL vmlinux 0x04ea9687 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x05019fa3 read_cache_page_async +EXPORT_SYMBOL vmlinux 0x05186ca4 flush_icache_range +EXPORT_SYMBOL vmlinux 0x053b5fc8 drm_ati_pcigart_cleanup +EXPORT_SYMBOL vmlinux 0x05402f86 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x05509c0f tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x0560fd8f atomic_sub_ret +EXPORT_SYMBOL vmlinux 0x0596ff6d mii_phy_probe +EXPORT_SYMBOL vmlinux 0x05be7aee do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0x05c8a7d6 otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x05ce3a99 drm_get_encoder_name +EXPORT_SYMBOL vmlinux 0x05dbb844 drm_sysfs_connector_add +EXPORT_SYMBOL vmlinux 0x0614e970 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x061bd2b9 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x062aba95 mempool_free +EXPORT_SYMBOL vmlinux 0x062be36f start_tty +EXPORT_SYMBOL vmlinux 0x063309d3 set_page_dirty +EXPORT_SYMBOL vmlinux 0x0650fa51 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x0653f8c3 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0x06676867 drm_connector_property_get_value +EXPORT_SYMBOL vmlinux 0x067a3cea vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06b65a7d page_symlink +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x072c06ec tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x073e38c2 sock_i_uid +EXPORT_SYMBOL vmlinux 0x0741a538 uart_register_driver +EXPORT_SYMBOL vmlinux 0x075b871c netpoll_print_options +EXPORT_SYMBOL vmlinux 0x07631f93 d_alloc +EXPORT_SYMBOL vmlinux 0x0794540f inet_stream_connect +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07c7602b d_instantiate +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07fbbf19 eth_header_parse +EXPORT_SYMBOL vmlinux 0x0826b0dc __flush_dcache_range +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x0836695c drm_sman_takedown +EXPORT_SYMBOL vmlinux 0x0897234e pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x08aceb09 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x08b0f1b3 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x08cc0c70 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x08d66a3a warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x08dbf2ad eth_validate_addr +EXPORT_SYMBOL vmlinux 0x08e22404 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL vmlinux 0x092b007a sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x092d4cb8 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x094503bc genphy_read_status +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x095bb830 down_interruptible +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09a23fbb dev_open +EXPORT_SYMBOL vmlinux 0x09a81ef9 drm_mode_connector_update_edid_property +EXPORT_SYMBOL vmlinux 0x09ae1bf6 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x09aefcc0 inet_listen +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09d81986 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x09dca505 dev_change_flags +EXPORT_SYMBOL vmlinux 0x09e624b9 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x09f1eab5 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x0a01d0b5 lock_super +EXPORT_SYMBOL vmlinux 0x0a078fc0 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a62de37 atomic64_add_ret +EXPORT_SYMBOL vmlinux 0x0a85c05f of_dev_put +EXPORT_SYMBOL vmlinux 0x0a9633e4 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x0ab1eb38 bio_kmalloc +EXPORT_SYMBOL vmlinux 0x0abae05e dquot_transfer +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0aff8e49 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x0b077293 skb_under_panic +EXPORT_SYMBOL vmlinux 0x0b11ac91 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x0b1698f9 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b2ddff8 vio_ldc_send +EXPORT_SYMBOL vmlinux 0x0b3b05c8 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x0b51f48e drm_getsarea +EXPORT_SYMBOL vmlinux 0x0b6104d5 drm_encoder_init +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0bda6351 mem_map +EXPORT_SYMBOL vmlinux 0x0be204f6 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x0bec86e4 drm_mmap +EXPORT_SYMBOL vmlinux 0x0bf32a30 inet_addr_type +EXPORT_SYMBOL vmlinux 0x0c0716b1 drm_put_dev +EXPORT_SYMBOL vmlinux 0x0c1133a4 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x0c14dab8 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x0c2dd832 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x0c732d5b netlink_broadcast +EXPORT_SYMBOL vmlinux 0x0c89ea3c i2c_verify_client +EXPORT_SYMBOL vmlinux 0x0c959b5d vfs_llseek +EXPORT_SYMBOL vmlinux 0x0ca64477 bio_clone +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cca4a12 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x0d01d313 path_get +EXPORT_SYMBOL vmlinux 0x0d0fe2f4 down_trylock +EXPORT_SYMBOL vmlinux 0x0d3377ea __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x0d4875d0 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d828bbf brioctl_set +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dae0c5b ip_route_output_key +EXPORT_SYMBOL vmlinux 0x0dd9455f per_cpu____cpu_data +EXPORT_SYMBOL vmlinux 0x0ddbcb79 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x0dded37d __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x0ded8cb9 input_free_device +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e548b4c pci_dma_supported +EXPORT_SYMBOL vmlinux 0x0e586fa8 ip_defrag +EXPORT_SYMBOL vmlinux 0x0e67d41e elv_rb_add +EXPORT_SYMBOL vmlinux 0x0e713337 sg_init_table +EXPORT_SYMBOL vmlinux 0x0e90fa58 load_nls +EXPORT_SYMBOL vmlinux 0x0e95af99 drm_mode_config_cleanup +EXPORT_SYMBOL vmlinux 0x0ea08977 set_binfmt +EXPORT_SYMBOL vmlinux 0x0ea9b57a filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x0eaf0b25 free_netdev +EXPORT_SYMBOL vmlinux 0x0ed244aa sock_no_poll +EXPORT_SYMBOL vmlinux 0x0edad93f kern_path +EXPORT_SYMBOL vmlinux 0x0efceed2 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x0f0765fc writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f2b8292 tcp_child_process +EXPORT_SYMBOL vmlinux 0x0f378a1e ___copy_from_user +EXPORT_SYMBOL vmlinux 0x0f6285f5 dquot_initialize +EXPORT_SYMBOL vmlinux 0x0f81e849 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x0f835ff1 send_sig +EXPORT_SYMBOL vmlinux 0x0f96184c pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x0fa67ba5 drop_super +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fd8c980 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x0fde7afa simple_getattr +EXPORT_SYMBOL vmlinux 0x0fe9b9fc blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x101f6489 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x10224a9a security_d_instantiate +EXPORT_SYMBOL vmlinux 0x1040da31 ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x104e3d27 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x105f6349 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x10634817 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10902bf7 insb +EXPORT_SYMBOL vmlinux 0x109e9f70 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x10a4ad28 is_bad_inode +EXPORT_SYMBOL vmlinux 0x10b04284 ida_get_new +EXPORT_SYMBOL vmlinux 0x10b4c3ab register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x10d42264 idr_get_new +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x1102f2b8 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x11215019 i2c_use_client +EXPORT_SYMBOL vmlinux 0x11217bfa textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x112cc96c drm_crtc_init +EXPORT_SYMBOL vmlinux 0x1138376d bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x1167dee7 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x1182d4ad bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11cd9238 get_sb_ns +EXPORT_SYMBOL vmlinux 0x11d39ed7 vfs_readv +EXPORT_SYMBOL vmlinux 0x11e68638 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x11fc9d5f security_file_permission +EXPORT_SYMBOL vmlinux 0x1266ce13 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x1279156f __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x12d09a67 sun4v_hvapi_unregister +EXPORT_SYMBOL vmlinux 0x12e4b5c4 sync_inode +EXPORT_SYMBOL vmlinux 0x12ea337e outsb +EXPORT_SYMBOL vmlinux 0x12f11dd0 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x12fa76e0 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x1308154d mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x131753e4 udp_prot +EXPORT_SYMBOL vmlinux 0x138116c5 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x138a78d1 set_current_groups +EXPORT_SYMBOL vmlinux 0x13d0d172 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x13d4d14a trap_block +EXPORT_SYMBOL vmlinux 0x13f75f32 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x13fd8b95 eth_type_trans +EXPORT_SYMBOL vmlinux 0x1428e399 write_inode_now +EXPORT_SYMBOL vmlinux 0x1430ea7f udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x144ed3a1 dev_base_lock +EXPORT_SYMBOL vmlinux 0x144f6bc0 skb_checksum +EXPORT_SYMBOL vmlinux 0x146066e4 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x14627cfd tcf_hash_create +EXPORT_SYMBOL vmlinux 0x147bf13d phy_connect +EXPORT_SYMBOL vmlinux 0x14af916c dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x14c46dcf pci_dma_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x14ca47cc ldc_read +EXPORT_SYMBOL vmlinux 0x14f3444b simple_readpage +EXPORT_SYMBOL vmlinux 0x15314074 genphy_suspend +EXPORT_SYMBOL vmlinux 0x15402653 journal_create +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x15760cf1 __kfree_skb +EXPORT_SYMBOL vmlinux 0x1598c152 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x15e79fee drm_framebuffer_init +EXPORT_SYMBOL vmlinux 0x15e89d78 revalidate_disk +EXPORT_SYMBOL vmlinux 0x15fc5e34 key_link +EXPORT_SYMBOL vmlinux 0x1602224f pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x161eac42 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x163dc90c nf_register_hook +EXPORT_SYMBOL vmlinux 0x16479e8f panic_notifier_list +EXPORT_SYMBOL vmlinux 0x1647a680 generic_listxattr +EXPORT_SYMBOL vmlinux 0x165cd2ce submit_bio +EXPORT_SYMBOL vmlinux 0x16af1ac1 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x16ca9f9b posix_acl_permission +EXPORT_SYMBOL vmlinux 0x16cb13a8 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x16e911d4 down_write +EXPORT_SYMBOL vmlinux 0x170db7d6 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x175d809b dquot_commit +EXPORT_SYMBOL vmlinux 0x176e6d62 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x1835b76d sk_stream_error +EXPORT_SYMBOL vmlinux 0x1838f2fc path_put +EXPORT_SYMBOL vmlinux 0x183f3d62 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x1843961d skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x18525d63 do_SAK +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18aab894 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x18afe432 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x18bef9d9 mdesc_node_by_name +EXPORT_SYMBOL vmlinux 0x18e414e2 drm_idlelock_take +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x18ea3321 __rta_fill +EXPORT_SYMBOL vmlinux 0x19011bb6 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x1901e928 single_release +EXPORT_SYMBOL vmlinux 0x192181fb pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x1966bf16 down_read_trylock +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x199f3354 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x19b2f2f6 sunserial_unregister_minors +EXPORT_SYMBOL vmlinux 0x19b31c98 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x19ccc945 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x1a10d816 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x1a2994f6 fb_find_mode +EXPORT_SYMBOL vmlinux 0x1a2a6433 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x1a2a9c96 drm_open +EXPORT_SYMBOL vmlinux 0x1a2c53a4 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x1a35bcbc VISenter +EXPORT_SYMBOL vmlinux 0x1a3f6efa fddi_type_trans +EXPORT_SYMBOL vmlinux 0x1a40e3e8 lock_fb_info +EXPORT_SYMBOL vmlinux 0x1a46c6f6 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x1a4f0cf5 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x1a563e55 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x1a76ea41 do_munmap +EXPORT_SYMBOL vmlinux 0x1a7d74ac i2c_clients_command +EXPORT_SYMBOL vmlinux 0x1aa759d0 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x1aaafa70 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad9f95a prom_finddevice +EXPORT_SYMBOL vmlinux 0x1aeb779d tty_register_device +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0c6f76 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x1b26ce6b bio_endio +EXPORT_SYMBOL vmlinux 0x1b360c33 iget5_locked +EXPORT_SYMBOL vmlinux 0x1b3da09a kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x1b56b5b8 neigh_table_init +EXPORT_SYMBOL vmlinux 0x1b61fafc pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b98a591 set_anon_super +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1bac2115 try_to_release_page +EXPORT_SYMBOL vmlinux 0x1bbb9ad7 destroy_EII_client +EXPORT_SYMBOL vmlinux 0x1bd954c4 __register_binfmt +EXPORT_SYMBOL vmlinux 0x1be6d238 init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x1bfc7c7a of_phy_connect_fixed_link +EXPORT_SYMBOL vmlinux 0x1c04b352 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x1c0c569a console_stop +EXPORT_SYMBOL vmlinux 0x1c199814 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c1e5d14 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x1c4d8e0e inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x1c5cae96 __nla_reserve +EXPORT_SYMBOL vmlinux 0x1c80de9c ip_send_check +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce9a119 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x1d744605 drm_mm_search_free +EXPORT_SYMBOL vmlinux 0x1d8875b5 __inet6_hash +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dcba178 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1de3bd6a bio_copy_user +EXPORT_SYMBOL vmlinux 0x1e00d084 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x1e0ca308 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x1e10a5f2 vio_unregister_driver +EXPORT_SYMBOL vmlinux 0x1e3099fc tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x1e45a77b ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x1e4b950d __devm_release_region +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e735dc0 console_start +EXPORT_SYMBOL vmlinux 0x1e981089 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x1edc9598 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL vmlinux 0x1f2ad79b tty_register_driver +EXPORT_SYMBOL vmlinux 0x1f2d783d drm_rmmap +EXPORT_SYMBOL vmlinux 0x1f2f47a1 bio_init +EXPORT_SYMBOL vmlinux 0x1f42f4e6 drm_init +EXPORT_SYMBOL vmlinux 0x1f6b61d3 key_negate_and_link +EXPORT_SYMBOL vmlinux 0x1f746758 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x1f7cc628 mempool_create +EXPORT_SYMBOL vmlinux 0x1f8bc63e drm_mode_create_dithering_property +EXPORT_SYMBOL vmlinux 0x1f97af2d netif_device_attach +EXPORT_SYMBOL vmlinux 0x1fae7a0b wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x1faf78ba vfs_symlink +EXPORT_SYMBOL vmlinux 0x1fd0da6f netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x20114c7c dma_set_mask +EXPORT_SYMBOL vmlinux 0x2014fad2 add_timer +EXPORT_SYMBOL vmlinux 0x201e5616 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x205242fd neigh_table_clear +EXPORT_SYMBOL vmlinux 0x20645642 drm_debug +EXPORT_SYMBOL vmlinux 0x2096fe27 security_inode_permission +EXPORT_SYMBOL vmlinux 0x20abcfd2 posix_test_lock +EXPORT_SYMBOL vmlinux 0x20d7d79e bdget +EXPORT_SYMBOL vmlinux 0x20e3e954 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x20e4a59d journal_forget +EXPORT_SYMBOL vmlinux 0x20fef191 sock_no_bind +EXPORT_SYMBOL vmlinux 0x212e0029 commit_creds +EXPORT_SYMBOL vmlinux 0x214399d5 pipe_lock +EXPORT_SYMBOL vmlinux 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21afe23d ldc_map_single +EXPORT_SYMBOL vmlinux 0x21b3442a proc_create_data +EXPORT_SYMBOL vmlinux 0x21b86a5c unlock_page +EXPORT_SYMBOL vmlinux 0x21bec119 ps2_end_command +EXPORT_SYMBOL vmlinux 0x21ccc5ef __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x21cf1977 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x21dee96c ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x2260ee48 drm_do_probe_ddc_edid +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2274c5d1 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x228fba95 bdevname +EXPORT_SYMBOL vmlinux 0x229295f8 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22d750f4 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x22da0c43 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x23306980 drm_addmap +EXPORT_SYMBOL vmlinux 0x2341264c register_key_type +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x235b0ba8 tty_free_termios +EXPORT_SYMBOL vmlinux 0x2362b8ad bio_sector_offset +EXPORT_SYMBOL vmlinux 0x23aed54b request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x23b0adfd close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x23d62cf8 mdiobus_register +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x242956cc ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x24302bc2 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x2434f8d0 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x245206b9 tty_name +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24641851 skb_store_bits +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x2469f7db tcp_shutdown +EXPORT_SYMBOL vmlinux 0x247ce5d0 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x24800758 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x2492ca2e vio_conn_reset +EXPORT_SYMBOL vmlinux 0x249e893f ebus_dma_prepare +EXPORT_SYMBOL vmlinux 0x24aeb7b9 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x24bd930a outsl +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250ca412 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x251b13e6 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x2546807b per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25b010c3 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x25b9a43e security_path_truncate +EXPORT_SYMBOL vmlinux 0x25ba121c mempool_resize +EXPORT_SYMBOL vmlinux 0x25c3dbca prom_nextprop +EXPORT_SYMBOL vmlinux 0x25db74e7 mdesc_node_name +EXPORT_SYMBOL vmlinux 0x25fa6f17 wait_for_completion +EXPORT_SYMBOL vmlinux 0x25ffe8e9 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x2604c15d sbusfb_mmap_helper +EXPORT_SYMBOL vmlinux 0x261e6f55 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x262eea91 __up_read +EXPORT_SYMBOL vmlinux 0x26378021 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x26387ba7 elv_queue_empty +EXPORT_SYMBOL vmlinux 0x263ee19b sg_init_one +EXPORT_SYMBOL vmlinux 0x26629b6a __blk_end_request +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x26800893 key_task_permission +EXPORT_SYMBOL vmlinux 0x26880cd9 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x26b8c01d dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x26cd71af bio_split +EXPORT_SYMBOL vmlinux 0x26ce9ef7 drm_get_resource_start +EXPORT_SYMBOL vmlinux 0x26e1c967 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26fe6567 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x270fe09b dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x271cc07f mem_section +EXPORT_SYMBOL vmlinux 0x272d18a7 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x2751a5d1 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x2756b22f __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x276909e3 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27a35058 inet_put_port +EXPORT_SYMBOL vmlinux 0x27b81daa xor_niagara_3 +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27e5720d atomic64_sub +EXPORT_SYMBOL vmlinux 0x27e92b79 qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x27ee3775 __init_rwsem +EXPORT_SYMBOL vmlinux 0x27fe6d8a tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x28321aed tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x2832bd34 dm_put_device +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x2869d569 drm_vblank_get +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x287a92a1 unregister_nls +EXPORT_SYMBOL vmlinux 0x28b8591b dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x28dc0868 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x28ef6c79 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL vmlinux 0x2924095a ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x2942a6a4 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x296111bf unregister_netdev +EXPORT_SYMBOL vmlinux 0x299801f7 i2c_release_client +EXPORT_SYMBOL vmlinux 0x29a3606d register_filesystem +EXPORT_SYMBOL vmlinux 0x29b5d24b dev_unicast_add +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29dc4be7 of_console_options +EXPORT_SYMBOL vmlinux 0x2a07961e jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x2a56a543 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x2a6d8f41 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x2a742023 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x2a8ece60 do_sync_read +EXPORT_SYMBOL vmlinux 0x2abfddd5 dquot_destroy +EXPORT_SYMBOL vmlinux 0x2acc5cf4 write_one_page +EXPORT_SYMBOL vmlinux 0x2afc5611 tc_classify +EXPORT_SYMBOL vmlinux 0x2aff69a7 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x2b013b2c dev_add_pack +EXPORT_SYMBOL vmlinux 0x2b06266b dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x2b375b8a pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x2b4ab052 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x2b585ce0 put_tty_driver +EXPORT_SYMBOL vmlinux 0x2b58a722 inode_init_always +EXPORT_SYMBOL vmlinux 0x2b708323 search_binary_handler +EXPORT_SYMBOL vmlinux 0x2b853abc tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x2b888614 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x2b8a7a92 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x2b8c44b0 netif_napi_add +EXPORT_SYMBOL vmlinux 0x2b91eb05 skb_clone +EXPORT_SYMBOL vmlinux 0x2b937a6f __ret_efault +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bba2b61 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x2bea26bc inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x2beec2f9 udp_poll +EXPORT_SYMBOL vmlinux 0x2c2835de xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x2c32a179 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x2c3375c9 __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x2c4f1c4f i2c_bit_add_bus +EXPORT_SYMBOL vmlinux 0x2c509ae8 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x2caa5abd dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x2cfdc6f1 path_lookup +EXPORT_SYMBOL vmlinux 0x2cfe8b11 netlink_set_err +EXPORT_SYMBOL vmlinux 0x2d2d681f registered_fb +EXPORT_SYMBOL vmlinux 0x2d3ce656 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x2d43b786 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x2d6216aa simple_link +EXPORT_SYMBOL vmlinux 0x2d6b0a1f seq_path +EXPORT_SYMBOL vmlinux 0x2d7eafe9 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x2d840da1 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x2da8d3b3 ps2_init +EXPORT_SYMBOL vmlinux 0x2daa7939 xor_vis_4 +EXPORT_SYMBOL vmlinux 0x2dd59193 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x2df66b9d per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e33c747 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e963f86 input_register_handler +EXPORT_SYMBOL vmlinux 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL vmlinux 0x2ec05d28 lookup_hash +EXPORT_SYMBOL vmlinux 0x2eed3354 kill_pid +EXPORT_SYMBOL vmlinux 0x2ef51bea ps2_begin_command +EXPORT_SYMBOL vmlinux 0x2efdd695 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x2f12b25a bio_put +EXPORT_SYMBOL vmlinux 0x2f3ba535 vfs_write +EXPORT_SYMBOL vmlinux 0x2f404d73 sock_create_kern +EXPORT_SYMBOL vmlinux 0x2f51a598 skb_copy +EXPORT_SYMBOL vmlinux 0x2f59ea7a vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x2f82e727 vmtruncate +EXPORT_SYMBOL vmlinux 0x2fd88b24 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x2ffc48fb n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x300b2000 of_find_in_proplist +EXPORT_SYMBOL vmlinux 0x30144dc3 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x3044dec4 pci_clear_master +EXPORT_SYMBOL vmlinux 0x3050adea register_gifconf +EXPORT_SYMBOL vmlinux 0x30616c35 drm_core_ioremapfree +EXPORT_SYMBOL vmlinux 0x306cb21b jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x3074f033 drm_order +EXPORT_SYMBOL vmlinux 0x30790ee9 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x3091299b __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x30a23d20 drm_gem_mmap +EXPORT_SYMBOL vmlinux 0x30a7b125 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x30fbf360 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x31098243 phy_disconnect +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x3163181e xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x318f7bec module_refcount +EXPORT_SYMBOL vmlinux 0x319fc27e ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x31a2e826 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x31aeba7e drm_mm_put_block +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31bd91bb tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x31be0509 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x31dc1ec6 journal_errno +EXPORT_SYMBOL vmlinux 0x31e9e01f elv_rb_del +EXPORT_SYMBOL vmlinux 0x31ebadcd in_group_p +EXPORT_SYMBOL vmlinux 0x31f3ee72 netif_device_detach +EXPORT_SYMBOL vmlinux 0x32100320 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x321e3a29 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x323222ba mutex_unlock +EXPORT_SYMBOL vmlinux 0x323cefec copy_from_user_fixup +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x32864230 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x3293c312 blk_rq_init +EXPORT_SYMBOL vmlinux 0x32cb4b69 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x32f58efc skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x32f66ea6 skb_split +EXPORT_SYMBOL vmlinux 0x330e70e4 sg_free_table +EXPORT_SYMBOL vmlinux 0x33134f61 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x333f3b79 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x3341a62b alloc_file +EXPORT_SYMBOL vmlinux 0x334f8f86 skb_pad +EXPORT_SYMBOL vmlinux 0x3361d48e read_dev_sector +EXPORT_SYMBOL vmlinux 0x33b7dda4 slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x33c70d3c open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x33f44361 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x33f8b3d5 generic_fillattr +EXPORT_SYMBOL vmlinux 0x340859b4 bioset_create +EXPORT_SYMBOL vmlinux 0x3435f98e inode_init_once +EXPORT_SYMBOL vmlinux 0x34542eaa check_disk_size_change +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x3459d574 dev_close +EXPORT_SYMBOL vmlinux 0x34679adb set_device_ro +EXPORT_SYMBOL vmlinux 0x347416f5 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34ecd732 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x34edd999 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x34f8704e pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x3544e083 dev_get_stats +EXPORT_SYMBOL vmlinux 0x357b72cb bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x3582ed17 vfs_stat +EXPORT_SYMBOL vmlinux 0x35a321c7 drm_cvt_mode +EXPORT_SYMBOL vmlinux 0x35ad038f dev_disable_lro +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35cdb1c6 ebus_dma_addr +EXPORT_SYMBOL vmlinux 0x35e6032f vfs_fsync +EXPORT_SYMBOL vmlinux 0x35eeb355 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x3632dba9 submit_bh +EXPORT_SYMBOL vmlinux 0x36374cca inode_needs_sync +EXPORT_SYMBOL vmlinux 0x36470095 __bread +EXPORT_SYMBOL vmlinux 0x3649147e kill_litter_super +EXPORT_SYMBOL vmlinux 0x365b4734 security_path_rename +EXPORT_SYMBOL vmlinux 0x367efcfd drm_mode_connector_attach_encoder +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36e47222 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x36fecfb8 of_get_property +EXPORT_SYMBOL vmlinux 0x373b5189 mpage_writepages +EXPORT_SYMBOL vmlinux 0x3743da74 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x3775ea96 pci_set_master +EXPORT_SYMBOL vmlinux 0x3779d660 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x37a9ca79 nf_reinject +EXPORT_SYMBOL vmlinux 0x37af6a0a abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x37b4135a inode_add_bytes +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37cd024b input_unfilter_device +EXPORT_SYMBOL vmlinux 0x37fac307 block_fsync +EXPORT_SYMBOL vmlinux 0x382ad88f blk_integrity_register +EXPORT_SYMBOL vmlinux 0x383a1bf7 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x38440008 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x384584cd cfb_imageblit +EXPORT_SYMBOL vmlinux 0x3849c43d __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x38567f2a request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x385c0492 km_policy_notify +EXPORT_SYMBOL vmlinux 0x3860c3f8 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x3874356a devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x38767584 pci_dev_get +EXPORT_SYMBOL vmlinux 0x3881389d __serio_register_driver +EXPORT_SYMBOL vmlinux 0x38822f97 copy_user_page +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x389fad95 bmap +EXPORT_SYMBOL vmlinux 0x38a56045 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x38b501d8 skb_make_writable +EXPORT_SYMBOL vmlinux 0x38b998a5 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x38ea859c drm_mm_get_block_range_generic +EXPORT_SYMBOL vmlinux 0x38eead42 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x38f07693 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x390c4750 nobh_writepage +EXPORT_SYMBOL vmlinux 0x391fe41d i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x3962d581 xrlim_allow +EXPORT_SYMBOL vmlinux 0x39699ba3 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x39744e41 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x39c4ff8e ldc_free_exp_dring +EXPORT_SYMBOL vmlinux 0x39e1aa5e get_write_access +EXPORT_SYMBOL vmlinux 0x39e63bde skb_trim +EXPORT_SYMBOL vmlinux 0x3a140d46 security_path_rmdir +EXPORT_SYMBOL vmlinux 0x3a1a76b3 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x3a1f2561 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a274577 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x3a608332 tty_shutdown +EXPORT_SYMBOL vmlinux 0x3a70ae50 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x3a90b3e7 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x3a9aa54d clear_bit +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3b10ab43 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x3b135542 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x3b3d4283 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x3b3fe8cb prom_getsibling +EXPORT_SYMBOL vmlinux 0x3b742878 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x3bb7253d bio_map_kern +EXPORT_SYMBOL vmlinux 0x3bc6bf94 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x3bc7760a tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bd41881 poll_freewait +EXPORT_SYMBOL vmlinux 0x3bed41e6 proc_mkdir +EXPORT_SYMBOL vmlinux 0x3beda982 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x3c023877 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x3c04054d compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x3c0bf0ea inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x3c212a3e drm_mode_connector_list_update +EXPORT_SYMBOL vmlinux 0x3c217d3a nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c356f1e atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x3c612e87 kill_anon_super +EXPORT_SYMBOL vmlinux 0x3c65d36a pci_reenable_device +EXPORT_SYMBOL vmlinux 0x3c6b92fb of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x3c72cc76 ldc_alloc_exp_dring +EXPORT_SYMBOL vmlinux 0x3c734a6c pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3d1ad070 filemap_flush +EXPORT_SYMBOL vmlinux 0x3d23338e dmam_pool_create +EXPORT_SYMBOL vmlinux 0x3d30ea41 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3d92135a blk_sync_queue +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3e3093f3 iput +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e6caebd add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x3e8f7348 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x3e923b32 drm_clflush_pages +EXPORT_SYMBOL vmlinux 0x3e99ce18 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x3ea192a6 journal_ack_err +EXPORT_SYMBOL vmlinux 0x3ea9eb2e netdev_features_change +EXPORT_SYMBOL vmlinux 0x3eae18fa xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0x3eca1189 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3eedef83 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f722927 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x3f7c05c9 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x3fa03a97 memset +EXPORT_SYMBOL vmlinux 0x3fa33750 current_fs_time +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fbdf859 aio_put_req +EXPORT_SYMBOL vmlinux 0x3fc53ce0 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x3fe9e92e sg_miter_next +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x3ff634bc ll_rw_block +EXPORT_SYMBOL vmlinux 0x3ffdf0d9 elevator_exit +EXPORT_SYMBOL vmlinux 0x402693e0 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x402abcd5 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x402b7a5c tcf_em_register +EXPORT_SYMBOL vmlinux 0x4057ac12 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x40804a84 tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x409e2a9e ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x40a244fd drm_mm_get_block_generic +EXPORT_SYMBOL vmlinux 0x40b1f46d nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x40bb3f9b set_bh_page +EXPORT_SYMBOL vmlinux 0x40e59ed0 drm_ati_pcigart_init +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x412ddc0c dcache_lock +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x413d8e16 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41aea9aa of_get_parent +EXPORT_SYMBOL vmlinux 0x41b57f4b unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x4227fd33 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x422cab99 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x425faacb __downgrade_write +EXPORT_SYMBOL vmlinux 0x428cd8e4 pci_unmap_sg +EXPORT_SYMBOL vmlinux 0x42a4bdf2 in_egroup_p +EXPORT_SYMBOL vmlinux 0x42a7f545 __nla_put +EXPORT_SYMBOL vmlinux 0x42ab1c69 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42cfcc62 iunique +EXPORT_SYMBOL vmlinux 0x42d3131c pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x42df1663 request_key_async +EXPORT_SYMBOL vmlinux 0x42f1183a sock_map_fd +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x431ed616 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x4325f615 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x43508685 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x436c1ef9 get_sb_single +EXPORT_SYMBOL vmlinux 0x43821bec ida_get_new_above +EXPORT_SYMBOL vmlinux 0x439090b9 kernel_thread +EXPORT_SYMBOL vmlinux 0x43a4938f vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43bea045 auxio_register +EXPORT_SYMBOL vmlinux 0x43c44e74 drm_vblank_put +EXPORT_SYMBOL vmlinux 0x43dc6cba dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x43e62ff4 mdiobus_read +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43ff30cd sg_alloc_table +EXPORT_SYMBOL vmlinux 0x440240ac d_genocide +EXPORT_SYMBOL vmlinux 0x4408e8ef sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x4417cc3c journal_init_inode +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x446c79b5 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x447f7e18 sun4v_niagara2_getperf +EXPORT_SYMBOL vmlinux 0x448ee51c pid_task +EXPORT_SYMBOL vmlinux 0x449c746b netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x44a7a5c3 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44c214d1 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x44d5ddc9 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x44d675b6 freeze_bdev +EXPORT_SYMBOL vmlinux 0x44da2927 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x44dde874 register_qdisc +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x45071ca5 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x451e191b dm_table_get_md +EXPORT_SYMBOL vmlinux 0x451f1429 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x454cbd8e mdesc_release +EXPORT_SYMBOL vmlinux 0x454eef40 __napi_schedule +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x457dff47 neigh_create +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45acae1f kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x45d13dca mdiobus_write +EXPORT_SYMBOL vmlinux 0x45db965c drm_encoder_cleanup +EXPORT_SYMBOL vmlinux 0x45f95c7a devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x4601620f unregister_console +EXPORT_SYMBOL vmlinux 0x460a9a59 fb_class +EXPORT_SYMBOL vmlinux 0x46190bfb cad_pid +EXPORT_SYMBOL vmlinux 0x461eba18 free_task +EXPORT_SYMBOL vmlinux 0x462b6fe3 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x4639f66c dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x4677d4fc skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x467c6940 phy_print_status +EXPORT_SYMBOL vmlinux 0x467f3b16 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x47017c10 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x470676c6 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x470ccbe8 update_region +EXPORT_SYMBOL vmlinux 0x47118ec6 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x4719ba4e kfifo_free +EXPORT_SYMBOL vmlinux 0x471feb4a kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x47434b18 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x474f5d91 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475a3141 __free_pages +EXPORT_SYMBOL vmlinux 0x4762999e pci_get_class +EXPORT_SYMBOL vmlinux 0x479419fa down_read +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47b68778 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x47e22d43 km_state_expired +EXPORT_SYMBOL vmlinux 0x47e276a4 vfs_mknod +EXPORT_SYMBOL vmlinux 0x4807bcec i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x48253966 of_mdiobus_register +EXPORT_SYMBOL vmlinux 0x483d1992 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x488d625d make_EII_client +EXPORT_SYMBOL vmlinux 0x489c3b71 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x48bb3629 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x48c1d080 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x48e5cb00 inet_getname +EXPORT_SYMBOL vmlinux 0x48e63b9e inet_release +EXPORT_SYMBOL vmlinux 0x48ea9984 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x48f9f12d complete_all +EXPORT_SYMBOL vmlinux 0x49102aa3 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x4930e794 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0x493723c7 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x4943835e pcim_enable_device +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49b3fcdc fb_show_logo +EXPORT_SYMBOL vmlinux 0x49b757de splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e98f1c replace_mount_options +EXPORT_SYMBOL vmlinux 0x49fc6204 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x4a08a714 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x4a122e96 d_splice_alias +EXPORT_SYMBOL vmlinux 0x4a15ae23 prom_node_has_property +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a4cee18 phy_driver_register +EXPORT_SYMBOL vmlinux 0x4a5dbc74 single_open +EXPORT_SYMBOL vmlinux 0x4a78b9ce truncate_pagecache +EXPORT_SYMBOL vmlinux 0x4a7c5111 serio_reconnect +EXPORT_SYMBOL vmlinux 0x4a83878a xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x4abcdeac qdisc_list_del +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4b07804f backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x4b42c4ad i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x4b5d0e67 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x4b625208 vfs_writev +EXPORT_SYMBOL vmlinux 0x4b71f70d cdev_init +EXPORT_SYMBOL vmlinux 0x4b7a59b1 kobject_init +EXPORT_SYMBOL vmlinux 0x4b8edde9 complete_and_exit +EXPORT_SYMBOL vmlinux 0x4b9ef5c4 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x4b9f3684 kfifo_init +EXPORT_SYMBOL vmlinux 0x4babeed7 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x4bc53fa5 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x4bcf9e7a tty_check_change +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c15d760 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x4c48f372 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4c53d581 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0x4c711f05 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x4c932402 neigh_lookup +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cbda2bf prom_setprop +EXPORT_SYMBOL vmlinux 0x4d2bd2c9 cdev_alloc +EXPORT_SYMBOL vmlinux 0x4d2cfd78 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x4d46dc99 input_set_capability +EXPORT_SYMBOL vmlinux 0x4d6182af delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x4d923c8d udp_ioctl +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4dfbfbc4 ps2_command +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e1963f3 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x4e30c879 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e3f73b3 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x4e41c847 gen_pool_create +EXPORT_SYMBOL vmlinux 0x4e68cb49 jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e73e935 nobh_write_end +EXPORT_SYMBOL vmlinux 0x4e91a4c7 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x4e9dffb5 ip_fast_csum +EXPORT_SYMBOL vmlinux 0x4ebb850c of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x4ed03247 ebus_dma_enable +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4f03a50c security_inode_init_security +EXPORT_SYMBOL vmlinux 0x4f0ea0c0 up +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f6dcd43 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x4f93203e pci_set_power_state +EXPORT_SYMBOL vmlinux 0x4fbf9239 find_inode_number +EXPORT_SYMBOL vmlinux 0x4fc976e5 get_phy_device +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4fead382 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x501960ea usb_gadget_register_driver +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x5022bf9e ip_setsockopt +EXPORT_SYMBOL vmlinux 0x502376d8 tty_throttle +EXPORT_SYMBOL vmlinux 0x5035629b pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x5045fe56 drm_gem_handle_create +EXPORT_SYMBOL vmlinux 0x5055158f lock_rename +EXPORT_SYMBOL vmlinux 0x505561ba journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506c1eb7 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x509bf08b jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x509bf769 sock_release +EXPORT_SYMBOL vmlinux 0x50a1cb9d compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x50c74c08 nonseekable_open +EXPORT_SYMBOL vmlinux 0x50d2d80a drm_mm_init +EXPORT_SYMBOL vmlinux 0x50d309eb bio_integrity_free +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x50dc6a39 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x50f97b5a dev_addr_add +EXPORT_SYMBOL vmlinux 0x51109a14 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x512152f2 drm_connector_property_set_value +EXPORT_SYMBOL vmlinux 0x51493d94 finish_wait +EXPORT_SYMBOL vmlinux 0x51d0a48a drm_mm_debug_table +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51f0bffb set_user_nice +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52046e13 atomic_sub +EXPORT_SYMBOL vmlinux 0x521b39c5 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x52354a0b mutex_trylock +EXPORT_SYMBOL vmlinux 0x52492ed6 key_revoke +EXPORT_SYMBOL vmlinux 0x52518ff0 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x5251cae4 prom_getbool +EXPORT_SYMBOL vmlinux 0x525afb73 pcim_iomap +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x528c911c del_timer +EXPORT_SYMBOL vmlinux 0x52a3fe9d idr_pre_get +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52a8d4aa vc_resize +EXPORT_SYMBOL vmlinux 0x52af767e skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x52cbaa8f fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x52deaf79 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x52e6d754 unregister_con_driver +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x52ec865a blk_free_tags +EXPORT_SYMBOL vmlinux 0x52ee1ddf vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x52ef2c28 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x530bb712 dm_table_get +EXPORT_SYMBOL vmlinux 0x530f3da4 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x53376230 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x533903d8 outsw +EXPORT_SYMBOL vmlinux 0x535d5d3c drm_connector_attach_property +EXPORT_SYMBOL vmlinux 0x53728be4 sk_filter +EXPORT_SYMBOL vmlinux 0x53a44f67 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53c51ffe skb_over_panic +EXPORT_SYMBOL vmlinux 0x541991aa remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x5424860b add_disk +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x543780ea pci_choose_state +EXPORT_SYMBOL vmlinux 0x5468597f __secpath_destroy +EXPORT_SYMBOL vmlinux 0x5471135b sk_free +EXPORT_SYMBOL vmlinux 0x5473cacc ___pskb_trim +EXPORT_SYMBOL vmlinux 0x548564b9 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x5505bee9 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x554f0a48 groups_alloc +EXPORT_SYMBOL vmlinux 0x5555a819 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x5557f52f drm_core_get_reg_ofs +EXPORT_SYMBOL vmlinux 0x556db901 xor_vis_5 +EXPORT_SYMBOL vmlinux 0x55892c5a of_match_device +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a20dfa generic_write_sync +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55b1b3f1 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x55c288f2 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x55ca3e8d pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x55e3e53b drm_crtc_cleanup +EXPORT_SYMBOL vmlinux 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5601937e ns87303_lock +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5613ca9a dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x5614e723 drm_gem_object_alloc +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x56417dcd io_remap_pfn_range +EXPORT_SYMBOL vmlinux 0x5654bda8 write_cache_pages +EXPORT_SYMBOL vmlinux 0x5656ace6 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x56644284 lease_modify +EXPORT_SYMBOL vmlinux 0x56655107 page_readlink +EXPORT_SYMBOL vmlinux 0x56937679 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x5699081e __seq_open_private +EXPORT_SYMBOL vmlinux 0x56cda35a sun4v_niagara2_setperf +EXPORT_SYMBOL vmlinux 0x56d0de60 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x56d94e32 blk_unplug +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x5710533c of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x5710a3d3 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x572dda72 of_release_dev +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57397541 bdput +EXPORT_SYMBOL vmlinux 0x5740fdcd pci_get_slot +EXPORT_SYMBOL vmlinux 0x575c80cc dm_table_event +EXPORT_SYMBOL vmlinux 0x577f4bff do_BUG +EXPORT_SYMBOL vmlinux 0x57859e84 dma_pool_create +EXPORT_SYMBOL vmlinux 0x5785e5fb d_add_ci +EXPORT_SYMBOL vmlinux 0x578812dd tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x57886319 __elv_add_request +EXPORT_SYMBOL vmlinux 0x579f8452 set_disk_ro +EXPORT_SYMBOL vmlinux 0x57a225f7 ldc_alloc +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57eaaa32 block_truncate_page +EXPORT_SYMBOL vmlinux 0x57f7c686 sparc64_valid_addr_bitmap +EXPORT_SYMBOL vmlinux 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL vmlinux 0x5811e934 drm_vblank_count +EXPORT_SYMBOL vmlinux 0x5829c264 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x582a3677 d_delete +EXPORT_SYMBOL vmlinux 0x582fef16 auxio_set_lte +EXPORT_SYMBOL vmlinux 0x58366ffb dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x585d2fb5 get_phy_id +EXPORT_SYMBOL vmlinux 0x58740134 set_security_override +EXPORT_SYMBOL vmlinux 0x5878e25b netdev_set_master +EXPORT_SYMBOL vmlinux 0x587c1b4c jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x58a9f431 of_find_node_by_path +EXPORT_SYMBOL vmlinux 0x58dd1b05 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x58e5ad8f netif_rx +EXPORT_SYMBOL vmlinux 0x58f6576c tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x58f815fc seq_lseek +EXPORT_SYMBOL vmlinux 0x58ff5fb2 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x59037eeb put_io_context +EXPORT_SYMBOL vmlinux 0x591dfbc5 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x593de916 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x59606a75 idr_init +EXPORT_SYMBOL vmlinux 0x59baaa31 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x59d02b56 open_exec +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59e6cea2 pci_match_id +EXPORT_SYMBOL vmlinux 0x5a0e5c64 release_sock +EXPORT_SYMBOL vmlinux 0x5a1a3e51 mb_cache_create +EXPORT_SYMBOL vmlinux 0x5a23f6fe unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a3f9098 pci_device_to_OF_node +EXPORT_SYMBOL vmlinux 0x5a568b3c bio_map_user +EXPORT_SYMBOL vmlinux 0x5a59c723 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x5a5e5312 wake_up_process +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a9e8b0b neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x5aa59639 set_groups +EXPORT_SYMBOL vmlinux 0x5aa852bd fb_validate_mode +EXPORT_SYMBOL vmlinux 0x5aba34c6 mem_map_zero +EXPORT_SYMBOL vmlinux 0x5ac0f62f tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x5ae5a4ed drm_irq_install +EXPORT_SYMBOL vmlinux 0x5ae8c947 uart_match_port +EXPORT_SYMBOL vmlinux 0x5af58087 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0x5b0f2095 drm_handle_vblank +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b2cd4fb cdev_del +EXPORT_SYMBOL vmlinux 0x5b3c4a2a pci_restore_state +EXPORT_SYMBOL vmlinux 0x5b3f744e clear_inode +EXPORT_SYMBOL vmlinux 0x5b44654d sk_receive_skb +EXPORT_SYMBOL vmlinux 0x5b506c1e unlock_rename +EXPORT_SYMBOL vmlinux 0x5b67f065 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x5b704144 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x5b8fc53b vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x5baa5800 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x5bd01283 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x5bf3e152 devm_iounmap +EXPORT_SYMBOL vmlinux 0x5bf8a44b xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x5c07bf58 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x5c5d7a2c __netif_schedule +EXPORT_SYMBOL vmlinux 0x5c673bc8 tty_mutex +EXPORT_SYMBOL vmlinux 0x5c7d4c49 drm_mm_takedown +EXPORT_SYMBOL vmlinux 0x5ca0c354 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x5ca4a0a8 dump_fpu +EXPORT_SYMBOL vmlinux 0x5ca68fbf blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x5caef220 of_find_matching_node +EXPORT_SYMBOL vmlinux 0x5cb18e55 pci_select_bars +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5ccd26fe drm_connector_cleanup +EXPORT_SYMBOL vmlinux 0x5cd88acc dev_trans_start +EXPORT_SYMBOL vmlinux 0x5ce875cf prom_root_node +EXPORT_SYMBOL vmlinux 0x5ceac9af security_path_symlink +EXPORT_SYMBOL vmlinux 0x5cece3d3 km_policy_expired +EXPORT_SYMBOL vmlinux 0x5d0d2b7e __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d4657b4 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x5d4d0e26 __csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x5d88ad38 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x5d92e054 kset_unregister +EXPORT_SYMBOL vmlinux 0x5dae54b4 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x5dbbe98e memmove +EXPORT_SYMBOL vmlinux 0x5dbd798d vc_cons +EXPORT_SYMBOL vmlinux 0x5dd19233 serio_close +EXPORT_SYMBOL vmlinux 0x5dda5448 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x5e778d30 da903x_query_status +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5eadd5de phy_attach +EXPORT_SYMBOL vmlinux 0x5ec0e2a4 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x5ec437cc of_platform_bus_type +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ed52c2d clear_user_page +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ee0a984 prom_getchild +EXPORT_SYMBOL vmlinux 0x5ef20d1e vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x5efc45ac nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x5eff5297 simple_write_begin +EXPORT_SYMBOL vmlinux 0x5f00b175 drm_mode_connector_detach_encoder +EXPORT_SYMBOL vmlinux 0x5f03f923 audit_log_start +EXPORT_SYMBOL vmlinux 0x5f3cf963 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x5f45de40 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x5f74a881 drm_gem_vm_open +EXPORT_SYMBOL vmlinux 0x5f77672b put_disk +EXPORT_SYMBOL vmlinux 0x5f9a8d8d drm_gem_vm_close +EXPORT_SYMBOL vmlinux 0x5fa75a14 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x5fa8a55e __break_lease +EXPORT_SYMBOL vmlinux 0x5fa9d68a xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x5fb936ac fasync_helper +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x60216c00 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x603b8f6c mnt_pin +EXPORT_SYMBOL vmlinux 0x603bcda9 phy_start +EXPORT_SYMBOL vmlinux 0x6047c4da gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x6055af27 igrab +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x6067a146 memcpy +EXPORT_SYMBOL vmlinux 0x606ac785 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x608ddbbb tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x6094d174 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x6094e1f2 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60f63dc7 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x61128671 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x61240d43 __sg_free_table +EXPORT_SYMBOL vmlinux 0x61387eb6 mapping_tagged +EXPORT_SYMBOL vmlinux 0x6148811b skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x61539299 inet_shutdown +EXPORT_SYMBOL vmlinux 0x6187d0c4 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x618b434b inet_select_addr +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x619b0ee1 km_new_mapping +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61e712dd tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x61ef348b con_copy_unimap +EXPORT_SYMBOL vmlinux 0x61f18cc3 dev_mc_add +EXPORT_SYMBOL vmlinux 0x61fb3e6d ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x62404173 input_flush_device +EXPORT_SYMBOL vmlinux 0x6251948b blk_init_queue +EXPORT_SYMBOL vmlinux 0x625c3e76 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x6278025e per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62a484c1 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x62a9293f _clear_page +EXPORT_SYMBOL vmlinux 0x62cc569e cpu_present_mask +EXPORT_SYMBOL vmlinux 0x62e3399a __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x63058d89 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x630f5f83 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x6334d3e7 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x63749ae3 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x63835e99 skb_push +EXPORT_SYMBOL vmlinux 0x63e886e3 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x63eafc15 read_cache_page +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x6405fc07 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x64123eb6 drm_framebuffer_cleanup +EXPORT_SYMBOL vmlinux 0x641e020d genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x644fec42 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64ee7b45 ida_remove +EXPORT_SYMBOL vmlinux 0x64f21d2e vga_put +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x650bd572 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x652b20ee jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x65440037 drm_mode_remove +EXPORT_SYMBOL vmlinux 0x654e2329 iget_failed +EXPORT_SYMBOL vmlinux 0x6589c0d2 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x65b0a97e _PAGE_IE +EXPORT_SYMBOL vmlinux 0x65c3e5db dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x65e3f750 pci_find_bus +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x6671b721 sget +EXPORT_SYMBOL vmlinux 0x66764fac generic_read_dir +EXPORT_SYMBOL vmlinux 0x6689f75c napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x668bf865 seq_write +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x668ddca1 gen_pool_add +EXPORT_SYMBOL vmlinux 0x669e09d8 unregister_key_type +EXPORT_SYMBOL vmlinux 0x66c0f533 get_disk +EXPORT_SYMBOL vmlinux 0x66cae227 stop_a_enabled +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x673e55fd ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x67475a67 do_sync_write +EXPORT_SYMBOL vmlinux 0x67be1d3d cpu_active_mask +EXPORT_SYMBOL vmlinux 0x67e6b0af __getblk +EXPORT_SYMBOL vmlinux 0x67f2cee5 udp_table +EXPORT_SYMBOL vmlinux 0x67fd27f0 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x681f19b5 km_query +EXPORT_SYMBOL vmlinux 0x68208fac ldc_map_sg +EXPORT_SYMBOL vmlinux 0x685480ff locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x687e904e __alloc_skb +EXPORT_SYMBOL vmlinux 0x68899126 ldc_copy +EXPORT_SYMBOL vmlinux 0x68994ad5 bd_claim +EXPORT_SYMBOL vmlinux 0x68d4b0e7 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x68d70972 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x68f21dd3 save_mount_options +EXPORT_SYMBOL vmlinux 0x68fb74ca timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x69010b06 insw +EXPORT_SYMBOL vmlinux 0x690198e6 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x690236ee rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x6906cb23 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x6914fbd7 phy_device_register +EXPORT_SYMBOL vmlinux 0x692308b8 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x6931ae4c tty_vhangup +EXPORT_SYMBOL vmlinux 0x6941f138 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x6984db74 mdesc_get_property +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a26f1e __lock_buffer +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69ba710f drm_mode_probed_add +EXPORT_SYMBOL vmlinux 0x69c1d387 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69cccc56 drm_release +EXPORT_SYMBOL vmlinux 0x69d37025 atomic64_sub_ret +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69fec86c compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a3fafa8 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a6ce843 should_remove_suid +EXPORT_SYMBOL vmlinux 0x6a70e104 drm_read +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6abe645f __invalidate_device +EXPORT_SYMBOL vmlinux 0x6acc3747 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6b146589 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b1bd275 flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b614a59 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x6b95c0fa uart_update_timeout +EXPORT_SYMBOL vmlinux 0x6ba1e06e dev_get_by_name +EXPORT_SYMBOL vmlinux 0x6bbd7e62 vfs_read +EXPORT_SYMBOL vmlinux 0x6bc047b5 elevator_init +EXPORT_SYMBOL vmlinux 0x6bc3d89e dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bd2c509 init_special_inode +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6be08aca poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x6bfc8b22 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x6c36a5c1 __mutex_init +EXPORT_SYMBOL vmlinux 0x6c4b56db skb_copy_expand +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c7c1d04 vm_map_ram +EXPORT_SYMBOL vmlinux 0x6c930c20 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x6ca1bc4f drm_add_edid_modes +EXPORT_SYMBOL vmlinux 0x6cb2d5fc dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x6ce3cedc ldc_connect +EXPORT_SYMBOL vmlinux 0x6d054a83 journal_dirty_data +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d0e3039 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x6d11a0fb may_umount_tree +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL vmlinux 0x6d333265 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x6d475b86 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d933860 i2c_master_send +EXPORT_SYMBOL vmlinux 0x6d968987 pci_release_region +EXPORT_SYMBOL vmlinux 0x6da4954e generic_setlease +EXPORT_SYMBOL vmlinux 0x6da508d3 rwsem_wake +EXPORT_SYMBOL vmlinux 0x6dcd3f48 input_event +EXPORT_SYMBOL vmlinux 0x6de375c1 xor_niagara_5 +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6defce60 tcf_register_action +EXPORT_SYMBOL vmlinux 0x6dfa7c91 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x6e003014 nf_log_register +EXPORT_SYMBOL vmlinux 0x6e4506db of_parse_phandle +EXPORT_SYMBOL vmlinux 0x6e56a7fc alloc_disk +EXPORT_SYMBOL vmlinux 0x6e5877c5 sk_dst_check +EXPORT_SYMBOL vmlinux 0x6e602e60 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x6e6d2743 km_report +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e82a035 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x6e82e24b keyring_search +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb31023 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x6ec58055 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x6ed59992 drm_mm_search_free_in_range +EXPORT_SYMBOL vmlinux 0x6ed94417 atomic64_add +EXPORT_SYMBOL vmlinux 0x6ee0db73 rtnl_notify +EXPORT_SYMBOL vmlinux 0x6efae81e pci_target_state +EXPORT_SYMBOL vmlinux 0x6f5638e8 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x6f56b60c sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x6f5c4184 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x6f6584dd qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x6f78912c phy_connect_direct +EXPORT_SYMBOL vmlinux 0x6f87fc77 drm_gem_object_lookup +EXPORT_SYMBOL vmlinux 0x6f8fe66e generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0x6f934786 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x6f962ad9 cdev_add +EXPORT_SYMBOL vmlinux 0x6faedb8c tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x6fbabeb4 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6ff9152b pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x6ffabfde dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x70215848 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x702f12f9 drm_i_have_hw_lock +EXPORT_SYMBOL vmlinux 0x702f162c __memscan_generic +EXPORT_SYMBOL vmlinux 0x70453143 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x70765d1c vfs_lstat +EXPORT_SYMBOL vmlinux 0x70a97f31 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x70b5a794 ldc_write +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70c9a14b skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x70f75fe2 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x712730a7 __flushw_user +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x7133233e dev_driver_string +EXPORT_SYMBOL vmlinux 0x713ee241 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x714dd9b5 tcf_hash_check +EXPORT_SYMBOL vmlinux 0x7164a78d ldc_free +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x717150be pci_request_region +EXPORT_SYMBOL vmlinux 0x719ba321 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x71a2334f jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71c02438 sg_next +EXPORT_SYMBOL vmlinux 0x71c0ec1c task_nice +EXPORT_SYMBOL vmlinux 0x71c39fdc dqget +EXPORT_SYMBOL vmlinux 0x71f67176 dquot_acquire +EXPORT_SYMBOL vmlinux 0x72000bdb of_set_property_mutex +EXPORT_SYMBOL vmlinux 0x7232f5f9 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x725fe1ce unload_nls +EXPORT_SYMBOL vmlinux 0x72636e39 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x7297cf99 eth_header +EXPORT_SYMBOL vmlinux 0x729a5284 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x72a068e3 vfs_statfs +EXPORT_SYMBOL vmlinux 0x72a7d376 kobject_del +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72d5af61 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x72ddac60 drm_get_drawable_info +EXPORT_SYMBOL vmlinux 0x72e3ff71 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x72e8d3e4 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x72ed62d4 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x73197a1e pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x731a8013 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x7320451d directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x733fbf92 drm_core_reclaim_buffers +EXPORT_SYMBOL vmlinux 0x736a1445 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x736c2902 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x737b4150 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x7380dcce pci_pme_active +EXPORT_SYMBOL vmlinux 0x73bede4c drm_property_create +EXPORT_SYMBOL vmlinux 0x73c172a1 drm_get_edid +EXPORT_SYMBOL vmlinux 0x73e0877a insl +EXPORT_SYMBOL vmlinux 0x7413dc68 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x74141a7c prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x743e1d6b unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7474ff0e drm_property_destroy +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74f4b98e gen_pool_free +EXPORT_SYMBOL vmlinux 0x755de596 do_splice_from +EXPORT_SYMBOL vmlinux 0x756c0421 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x7575e56a dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x7587e420 blk_insert_request +EXPORT_SYMBOL vmlinux 0x759710be arp_find +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c2910c serio_open +EXPORT_SYMBOL vmlinux 0x75c2cf52 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x75c948db d_alloc_name +EXPORT_SYMBOL vmlinux 0x75eeab30 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x76045395 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x7610e285 backlight_force_update +EXPORT_SYMBOL vmlinux 0x762b5d1b bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x76505991 generic_make_request +EXPORT_SYMBOL vmlinux 0x76821c83 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x769379cd kick_iocb +EXPORT_SYMBOL vmlinux 0x7693ad8e alloc_fcdev +EXPORT_SYMBOL vmlinux 0x76956de2 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x76a44750 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76c174a0 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76e2d4af tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x77079099 ldc_unmap +EXPORT_SYMBOL vmlinux 0x7715cf9d blk_start_queue +EXPORT_SYMBOL vmlinux 0x77209295 vio_register_driver +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x7749085f simple_fsync +EXPORT_SYMBOL vmlinux 0x775b1478 ldc_disconnect +EXPORT_SYMBOL vmlinux 0x77699044 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0x77815eca truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x77937be7 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0x77a868a3 generic_removexattr +EXPORT_SYMBOL vmlinux 0x77bf96c4 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77d04832 dquot_free_space +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x7820f427 genl_register_ops +EXPORT_SYMBOL vmlinux 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL vmlinux 0x78500da7 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x7850ea10 vfs_readdir +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x7880cd06 sock_rfree +EXPORT_SYMBOL vmlinux 0x788eea76 __serio_register_port +EXPORT_SYMBOL vmlinux 0x78a65e78 vfs_quota_on +EXPORT_SYMBOL vmlinux 0x78aeb3ab dquot_alloc +EXPORT_SYMBOL vmlinux 0x78b19d92 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x78dc1705 devm_free_irq +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78fa525b __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x790b3b7b follow_pfn +EXPORT_SYMBOL vmlinux 0x7932148c kernel_read +EXPORT_SYMBOL vmlinux 0x793bab1a kernel_getpeername +EXPORT_SYMBOL vmlinux 0x795ee45e generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x79600d4a wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x796389e6 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x796765f3 arp_xmit +EXPORT_SYMBOL vmlinux 0x797a657a phy_stop +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79f984d3 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x7a2087c2 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a68a19b call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x7a745c08 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x7a77533c pcim_pin_device +EXPORT_SYMBOL vmlinux 0x7a8257e8 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0x7a9a5d7a sock_init_data +EXPORT_SYMBOL vmlinux 0x7aa2efca journal_load +EXPORT_SYMBOL vmlinux 0x7acd111e drm_mode_create_dvi_i_properties +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7b190203 file_permission +EXPORT_SYMBOL vmlinux 0x7b1aa50c sk_run_filter +EXPORT_SYMBOL vmlinux 0x7b21c501 of_device_unregister +EXPORT_SYMBOL vmlinux 0x7b606ccd setup_arg_pages +EXPORT_SYMBOL vmlinux 0x7b8ac407 skb_gso_segment +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7bd6d92a textsearch_destroy +EXPORT_SYMBOL vmlinux 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL vmlinux 0x7c261209 skb_tx_hash +EXPORT_SYMBOL vmlinux 0x7c51e7e1 bd_release +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c6a1b91 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x7c7e0d10 generic_unplug_device +EXPORT_SYMBOL vmlinux 0x7c84b045 drm_add_modes_noedid +EXPORT_SYMBOL vmlinux 0x7c8df2ae ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7cc50f81 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x7cc9f5f8 filemap_fault +EXPORT_SYMBOL vmlinux 0x7cdb7d2e alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d58a841 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x7d5988b8 vfs_rename +EXPORT_SYMBOL vmlinux 0x7d6b08ef notify_change +EXPORT_SYMBOL vmlinux 0x7d6b2f48 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x7d774548 pci_alloc_consistent +EXPORT_SYMBOL vmlinux 0x7dafc31a con_is_bound +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7dd08322 of_device_register +EXPORT_SYMBOL vmlinux 0x7dde5f6e open_by_devnum +EXPORT_SYMBOL vmlinux 0x7e1000b9 drm_mm_clean +EXPORT_SYMBOL vmlinux 0x7e27480b request_key +EXPORT_SYMBOL vmlinux 0x7e4ac00b qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x7e5c5c96 pci_free_consistent +EXPORT_SYMBOL vmlinux 0x7e8d62e1 audit_log_format +EXPORT_SYMBOL vmlinux 0x7eb06d26 put_page +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7ee64908 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x7ef21682 phy_detach +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f5ba22a drm_get_dev +EXPORT_SYMBOL vmlinux 0x7fa0d20e nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x7fcf8a7a xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x8064e15c journal_start +EXPORT_SYMBOL vmlinux 0x807b7089 prom_firstprop +EXPORT_SYMBOL vmlinux 0x8085c7b1 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x80a57432 block_read_full_page +EXPORT_SYMBOL vmlinux 0x80bf3bc5 sun4v_niagara_getperf +EXPORT_SYMBOL vmlinux 0x810ce978 devm_ioremap +EXPORT_SYMBOL vmlinux 0x814443af posix_lock_file +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x81821fb2 consume_skb +EXPORT_SYMBOL vmlinux 0x818e7ebb get_user_pages +EXPORT_SYMBOL vmlinux 0x81b41a14 inode_setattr +EXPORT_SYMBOL vmlinux 0x81c9e0d4 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x81d673ed vio_ldc_free +EXPORT_SYMBOL vmlinux 0x81f6ce3b drm_irq_uninstall +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x8217459b security_task_getsecid +EXPORT_SYMBOL vmlinux 0x824e6fea journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82568464 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x826229ea kmem_cache_free +EXPORT_SYMBOL vmlinux 0x8262b7c0 blk_get_request +EXPORT_SYMBOL vmlinux 0x8262f64b tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x829d021c get_empty_filp +EXPORT_SYMBOL vmlinux 0x82a993a1 generic_file_open +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x83869334 ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x838f78ab sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83bf9c53 seq_escape +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83ed6ad4 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x8400eca6 blk_run_queue +EXPORT_SYMBOL vmlinux 0x8419543a eth_header_cache +EXPORT_SYMBOL vmlinux 0x8437b9d7 block_commit_write +EXPORT_SYMBOL vmlinux 0x8439139f flush_signals +EXPORT_SYMBOL vmlinux 0x844cec55 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x84658c6e tty_port_close_end +EXPORT_SYMBOL vmlinux 0x8483abda init_buffer +EXPORT_SYMBOL vmlinux 0x84b39ab2 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x84ce75c9 input_filter_device +EXPORT_SYMBOL vmlinux 0x8516583b insert_inode_locked +EXPORT_SYMBOL vmlinux 0x8557ec9c add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x859da510 del_gendisk +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85b69d92 vio_ldc_alloc +EXPORT_SYMBOL vmlinux 0x85de09f5 drm_mode_width +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e0072d ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x85e73a15 d_alloc_root +EXPORT_SYMBOL vmlinux 0x85fce09b journal_force_commit +EXPORT_SYMBOL vmlinux 0x860868e1 vfs_readlink +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x864b886b nf_log_unregister +EXPORT_SYMBOL vmlinux 0x8652acf8 phy_device_free +EXPORT_SYMBOL vmlinux 0x8660bde0 register_quota_format +EXPORT_SYMBOL vmlinux 0x866f4457 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86b80862 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x86b9595e vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x86c7146d vfs_fstat +EXPORT_SYMBOL vmlinux 0x86decfcc netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x86df7765 input_close_device +EXPORT_SYMBOL vmlinux 0x86edd641 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL vmlinux 0x86f33994 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x87198f96 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x872927b8 down_timeout +EXPORT_SYMBOL vmlinux 0x872bd087 suncore_mouse_baud_detection +EXPORT_SYMBOL vmlinux 0x8749179d thaw_process +EXPORT_SYMBOL vmlinux 0x8751388f of_device_is_available +EXPORT_SYMBOL vmlinux 0x8762fc18 nf_afinfo +EXPORT_SYMBOL vmlinux 0x878678f5 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87b45cde vfs_mkdir +EXPORT_SYMBOL vmlinux 0x87bba308 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x87cbf8a1 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL vmlinux 0x87e71821 vfs_create +EXPORT_SYMBOL vmlinux 0x87f29adb keyring_clear +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x8817a48e register_netdev +EXPORT_SYMBOL vmlinux 0x883b24fb sun4v_niagara_setperf +EXPORT_SYMBOL vmlinux 0x884aae89 vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x88b4675f ipv4_specific +EXPORT_SYMBOL vmlinux 0x88c8614c tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x88e427b8 default_llseek +EXPORT_SYMBOL vmlinux 0x8902f1af of_console_path +EXPORT_SYMBOL vmlinux 0x891e32b8 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x892bba22 pci_find_device +EXPORT_SYMBOL vmlinux 0x89316628 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x893c187a simple_release_fs +EXPORT_SYMBOL vmlinux 0x893f6f90 dput +EXPORT_SYMBOL vmlinux 0x89585a49 vio_send_sid +EXPORT_SYMBOL vmlinux 0x895ac6cc bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x8963bd4f blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x897d345f kthread_stop +EXPORT_SYMBOL vmlinux 0x8993115c key_alloc +EXPORT_SYMBOL vmlinux 0x899f9d01 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x89a47421 prepare_binprm +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89df62ec mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a538316 new_inode +EXPORT_SYMBOL vmlinux 0x8a5ec112 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x8a6b973d serio_rescan +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aae830c bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8acd1729 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x8ad3ca8d call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x8aee9bb4 pci_map_rom +EXPORT_SYMBOL vmlinux 0x8b0403e6 prom_getproperty +EXPORT_SYMBOL vmlinux 0x8b0b61d5 tty_hangup +EXPORT_SYMBOL vmlinux 0x8b5b9d78 vio_driver_init +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b922c0f __strnlen_user +EXPORT_SYMBOL vmlinux 0x8b97d281 xfrm_input +EXPORT_SYMBOL vmlinux 0x8bbd56d1 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x8bc200b3 drm_gtf_mode +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bf87169 __bzero +EXPORT_SYMBOL vmlinux 0x8c0b8795 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x8c3ebc72 saved_command_line +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c80a481 __register_chrdev +EXPORT_SYMBOL vmlinux 0x8c83ee26 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x8c89c8c6 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x8cd17f0d pci_bus_type +EXPORT_SYMBOL vmlinux 0x8cef8e25 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x8cf8556c __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x8cfade97 tcp_connect +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d5642fc wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x8d578960 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x8d59060d scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x8d594f49 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x8d67f200 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x8d9a637d pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x8db542e5 dst_release +EXPORT_SYMBOL vmlinux 0x8de61f2d sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x8de7b767 skb_put +EXPORT_SYMBOL vmlinux 0x8deca44c blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e1c1dfa netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x8e39eeb5 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e3ec69e seq_open_private +EXPORT_SYMBOL vmlinux 0x8e426a7f mod_timer_pending +EXPORT_SYMBOL vmlinux 0x8e479911 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x8e5a5a3f udp_disconnect +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8e77ee6b udplite_prot +EXPORT_SYMBOL vmlinux 0x8e825e91 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x8e868626 input_inject_event +EXPORT_SYMBOL vmlinux 0x8e879bb7 __vmalloc +EXPORT_SYMBOL vmlinux 0x8ec487f6 input_register_handle +EXPORT_SYMBOL vmlinux 0x8ec6475d kill_block_super +EXPORT_SYMBOL vmlinux 0x8ee9d4b7 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x8ef7f54b journal_set_features +EXPORT_SYMBOL vmlinux 0x8f07d8ca __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8f36e2d4 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f9b86b2 kfifo_alloc +EXPORT_SYMBOL vmlinux 0x8fc57042 stop_tty +EXPORT_SYMBOL vmlinux 0x8fd1eae7 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x8fd73bb8 lro_receive_frags +EXPORT_SYMBOL vmlinux 0x8fe2ffcc vfs_quota_off +EXPORT_SYMBOL vmlinux 0x8ff04c63 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x8ffaa57c mac_find_mode +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x9012bb72 mnt_unpin +EXPORT_SYMBOL vmlinux 0x90516656 idr_for_each +EXPORT_SYMBOL vmlinux 0x9087a66a jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x90994405 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x90a80fd6 f_setown +EXPORT_SYMBOL vmlinux 0x90cb9f6d tcp_ioctl +EXPORT_SYMBOL vmlinux 0x9117a881 prom_getstring +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x9149fc9e tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x91732970 arp_send +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x91814692 unregister_netdevice +EXPORT_SYMBOL vmlinux 0x918f5794 d_rehash +EXPORT_SYMBOL vmlinux 0x91abca0b phy_attach_direct +EXPORT_SYMBOL vmlinux 0x91da9873 file_fsync +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x921f4390 atomic_add +EXPORT_SYMBOL vmlinux 0x922216f9 input_unregister_device +EXPORT_SYMBOL vmlinux 0x92280fcb __scm_send +EXPORT_SYMBOL vmlinux 0x922be3c6 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x9279a0b7 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x927c8aab cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x92b47e7d test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x92b83384 generic_getxattr +EXPORT_SYMBOL vmlinux 0x92cce524 tty_write_room +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x930b6da8 kill_fasync +EXPORT_SYMBOL vmlinux 0x932bd423 idr_remove +EXPORT_SYMBOL vmlinux 0x9336c058 lock_may_write +EXPORT_SYMBOL vmlinux 0x9345dc34 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93aaafff pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x93be5a22 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x94106374 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x943d473c inode_change_ok +EXPORT_SYMBOL vmlinux 0x9443289e set_bit +EXPORT_SYMBOL vmlinux 0x947d8f14 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94ba222f sock_no_listen +EXPORT_SYMBOL vmlinux 0x94c8ac8c skb_queue_tail +EXPORT_SYMBOL vmlinux 0x94dee719 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x94f00cad drm_exit +EXPORT_SYMBOL vmlinux 0x94fc4760 register_netdevice +EXPORT_SYMBOL vmlinux 0x9501d078 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x950b0b51 test_and_set_bit +EXPORT_SYMBOL vmlinux 0x9514151a _mcount +EXPORT_SYMBOL vmlinux 0x952365e5 secpath_dup +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x95835728 input_grab_device +EXPORT_SYMBOL vmlinux 0x95ce7cf1 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95d03d17 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x95d743f7 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x95f6d207 dm_register_target +EXPORT_SYMBOL vmlinux 0x960c02f4 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x9622d464 kernel_connect +EXPORT_SYMBOL vmlinux 0x962e0994 ip_fragment +EXPORT_SYMBOL vmlinux 0x96366993 slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x967f0e7d key_payload_reserve +EXPORT_SYMBOL vmlinux 0x96981d7c misc_register +EXPORT_SYMBOL vmlinux 0x96a6350c generic_delete_inode +EXPORT_SYMBOL vmlinux 0x96b98d4b drm_master_get +EXPORT_SYMBOL vmlinux 0x96ddab84 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x96e3108a inet_ioctl +EXPORT_SYMBOL vmlinux 0x9704d6b0 dst_discard +EXPORT_SYMBOL vmlinux 0x973e4e30 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x975c7a75 datagram_poll +EXPORT_SYMBOL vmlinux 0x977b23d4 __pagevec_release +EXPORT_SYMBOL vmlinux 0x97844380 dquot_claim_space +EXPORT_SYMBOL vmlinux 0x9795eaa5 mpage_readpage +EXPORT_SYMBOL vmlinux 0x97b1931d locks_remove_posix +EXPORT_SYMBOL vmlinux 0x97ffa21d fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x9811ab87 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x983a9dce journal_get_create_access +EXPORT_SYMBOL vmlinux 0x9868184f fb_blank +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x9872d116 cmos_regs +EXPORT_SYMBOL vmlinux 0x98955ab1 block_prepare_write +EXPORT_SYMBOL vmlinux 0x98e27cfd vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x99244d06 misc_deregister +EXPORT_SYMBOL vmlinux 0x9926de40 dma_ops +EXPORT_SYMBOL vmlinux 0x992c1d09 netlink_unicast +EXPORT_SYMBOL vmlinux 0x994b6b9e kobject_set_name +EXPORT_SYMBOL vmlinux 0x994d9956 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x994ec92e blk_complete_request +EXPORT_SYMBOL vmlinux 0x9968273a wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x9979468b key_validate +EXPORT_SYMBOL vmlinux 0x997edb1c seq_read +EXPORT_SYMBOL vmlinux 0x997f707f ida_pre_get +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99ae3ce9 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99e914c2 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99eebf30 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x9a1106a8 lro_flush_all +EXPORT_SYMBOL vmlinux 0x9a1c71b5 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a4535c5 arp_create +EXPORT_SYMBOL vmlinux 0x9a565044 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x9a5ee9ea vga_client_register +EXPORT_SYMBOL vmlinux 0x9a99c606 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9aacd62b prom_getintdefault +EXPORT_SYMBOL vmlinux 0x9ab618cf pci_find_capability +EXPORT_SYMBOL vmlinux 0x9abc6f0f kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x9ac459e8 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x9ade1494 seq_bitmap +EXPORT_SYMBOL vmlinux 0x9ae51c30 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x9afa1815 skb_dequeue +EXPORT_SYMBOL vmlinux 0x9b06bc40 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x9b0d527f drm_get_resource_len +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b44289f blk_put_request +EXPORT_SYMBOL vmlinux 0x9b482492 nf_register_hooks +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bca3a36 check_disk_change +EXPORT_SYMBOL vmlinux 0x9bde02ee lock_sock_nested +EXPORT_SYMBOL vmlinux 0x9be9a83c __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c4175d8 skb_recycle_check +EXPORT_SYMBOL vmlinux 0x9c5834a9 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x9c9355e8 nla_append +EXPORT_SYMBOL vmlinux 0x9c9f528d __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x9ca2c9a0 sunserial_console_match +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cc4ba07 __down_read_trylock +EXPORT_SYMBOL vmlinux 0x9ccf6b66 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x9ceda1d9 wireless_send_event +EXPORT_SYMBOL vmlinux 0x9d268881 inet_bind +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d54a3fe tty_port_close_start +EXPORT_SYMBOL vmlinux 0x9d6900d4 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x9d76390f invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x9d7acd90 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9db37875 change_bit +EXPORT_SYMBOL vmlinux 0x9dc1d60e remove_proc_entry +EXPORT_SYMBOL vmlinux 0x9de44505 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x9e4a07e6 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x9e577ba9 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x9e771285 _PAGE_E +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea26c4c down_write_trylock +EXPORT_SYMBOL vmlinux 0x9eae50d0 drm_pci_free +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9ef18216 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f72c2eb init_timer_key +EXPORT_SYMBOL vmlinux 0x9f94a516 vio_control_pkt_engine +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa325c0 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x9fa4cc3f journal_update_format +EXPORT_SYMBOL vmlinux 0xa0176622 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xa01ea39c drm_vblank_post_modeset +EXPORT_SYMBOL vmlinux 0xa033d05a up_read +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa03ea84a framebuffer_alloc +EXPORT_SYMBOL vmlinux 0xa04658f7 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07a8d22 sleep_on +EXPORT_SYMBOL vmlinux 0xa0805e7c follow_up +EXPORT_SYMBOL vmlinux 0xa08cb5ed alloc_tty_driver +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0e8d7eb key_type_keyring +EXPORT_SYMBOL vmlinux 0xa0ea19b6 unregister_binfmt +EXPORT_SYMBOL vmlinux 0xa0ebb2ba _PAGE_CACHE +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa14d256b jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0xa160bc42 init_file +EXPORT_SYMBOL vmlinux 0xa19ca792 __kfifo_put +EXPORT_SYMBOL vmlinux 0xa1a7b0e7 seq_release +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cb41b2 __breadahead +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa1d035dd sunserial_register_minors +EXPORT_SYMBOL vmlinux 0xa1d7d673 bio_pair_release +EXPORT_SYMBOL vmlinux 0xa1e905de locks_init_lock +EXPORT_SYMBOL vmlinux 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL vmlinux 0xa206a534 of_parse_phandles_with_args +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa218bf61 complete +EXPORT_SYMBOL vmlinux 0xa25b2862 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xa25ed285 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2dfef89 seq_puts +EXPORT_SYMBOL vmlinux 0xa2ef8030 vio_validate_sid +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa33b7a59 blk_end_request +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa34a4aa7 ___copy_to_user +EXPORT_SYMBOL vmlinux 0xa34bc5fa fifo_set_limit +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa368065e linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0xa377917a arp_tbl +EXPORT_SYMBOL vmlinux 0xa3780577 dst_destroy +EXPORT_SYMBOL vmlinux 0xa39b4cf2 udelay +EXPORT_SYMBOL vmlinux 0xa39f8010 sk_wait_data +EXPORT_SYMBOL vmlinux 0xa3a1d1eb kobject_add +EXPORT_SYMBOL vmlinux 0xa3b3adc4 complete_request_key +EXPORT_SYMBOL vmlinux 0xa3c7da59 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xa42cd0b6 blk_recount_segments +EXPORT_SYMBOL vmlinux 0xa436b684 user_path_at +EXPORT_SYMBOL vmlinux 0xa444111b ebus_dma_unregister +EXPORT_SYMBOL vmlinux 0xa45c5e36 pskb_expand_head +EXPORT_SYMBOL vmlinux 0xa48191ab init_net +EXPORT_SYMBOL vmlinux 0xa497ebbd rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xa4db24d6 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xa4e3f8dc genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0xa4f1d244 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0xa500a8cf flush_old_exec +EXPORT_SYMBOL vmlinux 0xa576c263 generic_find_next_le_bit +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5cc2e8d pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xa5e68673 tlb_type +EXPORT_SYMBOL vmlinux 0xa5fb0572 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0xa60c0a76 journal_stop +EXPORT_SYMBOL vmlinux 0xa65df349 blk_end_request_all +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa696943e blk_start_request +EXPORT_SYMBOL vmlinux 0xa6a52b78 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0xa6bc9620 bdi_unregister +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa724f9e6 pci_scan_slot +EXPORT_SYMBOL vmlinux 0xa7553b14 aio_complete +EXPORT_SYMBOL vmlinux 0xa76e0285 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xa770608c i2c_transfer +EXPORT_SYMBOL vmlinux 0xa7c53068 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xa7d9616a blkdev_put +EXPORT_SYMBOL vmlinux 0xa806acdc security_path_link +EXPORT_SYMBOL vmlinux 0xa819da67 nf_log_packet +EXPORT_SYMBOL vmlinux 0xa8278a03 drm_mode_create_tv_properties +EXPORT_SYMBOL vmlinux 0xa8627a16 __f_setown +EXPORT_SYMBOL vmlinux 0xa877e305 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8ac6f3d sg_miter_start +EXPORT_SYMBOL vmlinux 0xa8c0cd07 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xa8ce3907 block_write_begin +EXPORT_SYMBOL vmlinux 0xa8f80515 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0xa8fe1007 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa9111a47 do_gettimeofday +EXPORT_SYMBOL vmlinux 0xa91c596e sk_reset_timer +EXPORT_SYMBOL vmlinux 0xa95a5abd alloc_disk_node +EXPORT_SYMBOL vmlinux 0xa9824647 i2c_del_driver +EXPORT_SYMBOL vmlinux 0xa984007c __destroy_inode +EXPORT_SYMBOL vmlinux 0xa99648d0 __down_read +EXPORT_SYMBOL vmlinux 0xa9c38f99 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xa9d3455b ip_ct_attach +EXPORT_SYMBOL vmlinux 0xa9ed3e23 pipe_to_file +EXPORT_SYMBOL vmlinux 0xa9f1ed23 bit_waitqueue +EXPORT_SYMBOL vmlinux 0xaa432ea5 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xaa46ecf9 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xaa48a5ac fddi_change_mtu +EXPORT_SYMBOL vmlinux 0xaa7c262b tcp_check_req +EXPORT_SYMBOL vmlinux 0xaa9da2a2 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xaaad4af2 ether_setup +EXPORT_SYMBOL vmlinux 0xaab15920 abort_creds +EXPORT_SYMBOL vmlinux 0xaac58a28 of_unregister_driver +EXPORT_SYMBOL vmlinux 0xaac81314 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab14c19e generic_file_llseek +EXPORT_SYMBOL vmlinux 0xab53b0a8 mempool_alloc +EXPORT_SYMBOL vmlinux 0xab5a85f6 skb_queue_head +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb28946 pci_map_sg +EXPORT_SYMBOL vmlinux 0xabb877fe copy_io_context +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd47787 down_killable +EXPORT_SYMBOL vmlinux 0xabefb485 find_or_create_page +EXPORT_SYMBOL vmlinux 0xabf8f1d9 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xac0b2f65 do_truncate +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac2dab09 prom_getint +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac54fc9f mempool_destroy +EXPORT_SYMBOL vmlinux 0xac5f113d cpu_all_bits +EXPORT_SYMBOL vmlinux 0xac66b7e2 force_sig +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac76665c proc_symlink +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacdae643 generic_ro_fops +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xace4c8ed tick_ops +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad3ecc7b dquot_commit_info +EXPORT_SYMBOL vmlinux 0xadb792c2 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0xadbb6499 drm_debugfs_create_files +EXPORT_SYMBOL vmlinux 0xadf25df4 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xae147809 dev_alloc_name +EXPORT_SYMBOL vmlinux 0xae374cba block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xae395308 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0xae402e4a xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0xae6baa1e no_llseek +EXPORT_SYMBOL vmlinux 0xae90b486 tcp_prot +EXPORT_SYMBOL vmlinux 0xae92ac38 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0xae945dc2 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0xaeab2c85 usb_gadget_unregister_driver +EXPORT_SYMBOL vmlinux 0xaeba0b33 pci_iounmap +EXPORT_SYMBOL vmlinux 0xaecc0a91 dm_get_device +EXPORT_SYMBOL vmlinux 0xaecc5095 sock_register +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaeecdf0c d_path +EXPORT_SYMBOL vmlinux 0xaf06d250 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xaf0e28a4 register_sysctl_table +EXPORT_SYMBOL vmlinux 0xaf25cd6f tcp_proc_register +EXPORT_SYMBOL vmlinux 0xaf29788e drm_sman_init +EXPORT_SYMBOL vmlinux 0xaf51084f tcp_disconnect +EXPORT_SYMBOL vmlinux 0xaf742753 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xaf975b8f netif_carrier_on +EXPORT_SYMBOL vmlinux 0xafa1485b of_phy_connect +EXPORT_SYMBOL vmlinux 0xafbacadb tcf_hash_release +EXPORT_SYMBOL vmlinux 0xafce8ee1 drm_core_ioremap_wc +EXPORT_SYMBOL vmlinux 0xafd59eb6 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0xafe4eaef __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xafe6583b sg_last +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xafeb673c tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb06b9a47 netpoll_poll +EXPORT_SYMBOL vmlinux 0xb08071aa blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xb0919f8c tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c9f997 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0e6060d ps2_drain +EXPORT_SYMBOL vmlinux 0xb114ac17 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb12cc5bf grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0xb158ed63 ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xb18794f7 mdiobus_free +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a6fa1f of_match_node +EXPORT_SYMBOL vmlinux 0xb1b19441 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xb1b5a7f3 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1e039a7 netlink_dump_start +EXPORT_SYMBOL vmlinux 0xb21905a7 ilookup +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb226697f bdi_init +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb233beb0 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb275bdbe drm_addbufs_pci +EXPORT_SYMBOL vmlinux 0xb28198b4 of_get_next_child +EXPORT_SYMBOL vmlinux 0xb285f462 setup_new_exec +EXPORT_SYMBOL vmlinux 0xb28a2484 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0xb2b8b21b drm_mode_create +EXPORT_SYMBOL vmlinux 0xb2d72cc7 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0xb31546c3 sock_wake_async +EXPORT_SYMBOL vmlinux 0xb33baf02 bio_phys_segments +EXPORT_SYMBOL vmlinux 0xb33c29f1 netpoll_setup +EXPORT_SYMBOL vmlinux 0xb36dc3f4 pci_dma_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0xb376801a idr_get_new_above +EXPORT_SYMBOL vmlinux 0xb376b31e netdev_state_change +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3d34101 vio_link_state_change +EXPORT_SYMBOL vmlinux 0xb3dbd0cd tty_kref_put +EXPORT_SYMBOL vmlinux 0xb3eff992 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb402f877 kernel_sendpage +EXPORT_SYMBOL vmlinux 0xb40fcdf2 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xb41fe00c cdev_index +EXPORT_SYMBOL vmlinux 0xb42279ee xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb4278884 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0xb435bd66 mdesc_next_arc +EXPORT_SYMBOL vmlinux 0xb436ffa3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0xb4468f80 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0xb45ae52e blk_stop_queue +EXPORT_SYMBOL vmlinux 0xb461c554 page_follow_link_light +EXPORT_SYMBOL vmlinux 0xb491ddb0 dqput +EXPORT_SYMBOL vmlinux 0xb4f105b9 drm_vblank_pre_modeset +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb54146d7 dget_locked +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb54c8d59 dquot_scan_active +EXPORT_SYMBOL vmlinux 0xb5994139 pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5b63ac4 generic_write_end +EXPORT_SYMBOL vmlinux 0xb5cc23eb ilookup5 +EXPORT_SYMBOL vmlinux 0xb5d32185 blk_register_region +EXPORT_SYMBOL vmlinux 0xb5d9d94d pci_dev_driver +EXPORT_SYMBOL vmlinux 0xb5ebecd7 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0xb5eee38f vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0xb648ecf9 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c70a7d __wake_up +EXPORT_SYMBOL vmlinux 0xb6db7ecd bdi_register_dev +EXPORT_SYMBOL vmlinux 0xb6f262d4 I_BDEV +EXPORT_SYMBOL vmlinux 0xb75cf6af kthread_create +EXPORT_SYMBOL vmlinux 0xb76e75b1 napi_frags_skb +EXPORT_SYMBOL vmlinux 0xb7946405 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7aa22b8 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0xb7b8f8df kobject_get +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7f6c044 skb_copy_bits +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb8335aba __bforget +EXPORT_SYMBOL vmlinux 0xb83456ea tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xb8355b93 dst_alloc +EXPORT_SYMBOL vmlinux 0xb8439aaf vga_get +EXPORT_SYMBOL vmlinux 0xb8606d04 bio_free +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8c0f461 get_sb_bdev +EXPORT_SYMBOL vmlinux 0xb8e99dd1 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xb8eff1e5 get_io_context +EXPORT_SYMBOL vmlinux 0xb927b78f dm_io +EXPORT_SYMBOL vmlinux 0xb928500f tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0xb92c4438 security_inode_readlink +EXPORT_SYMBOL vmlinux 0xb93465ff tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xb95a2b41 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0xb97d4c9c mutex_lock +EXPORT_SYMBOL vmlinux 0xb984f103 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9b969bb jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xba0ddf40 is_container_init +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba8f8b68 completion_done +EXPORT_SYMBOL vmlinux 0xba9c8e28 skb_find_text +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaa91d11 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbaad9e8a security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xbabc8999 blk_plug_device +EXPORT_SYMBOL vmlinux 0xbac39d36 get_sb_nodev +EXPORT_SYMBOL vmlinux 0xbb0dc05f ps2_sendbyte +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb22aa84 dev_addr_del +EXPORT_SYMBOL vmlinux 0xbb23e282 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0xbb2c9f48 sbus_set_sbus64 +EXPORT_SYMBOL vmlinux 0xbb36dcc1 iget_locked +EXPORT_SYMBOL vmlinux 0xbb37aaff netpoll_send_udp +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb61548c __sk_dst_check +EXPORT_SYMBOL vmlinux 0xbb86516a dev_load +EXPORT_SYMBOL vmlinux 0xbb903926 key_put +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbc119aa4 genphy_resume +EXPORT_SYMBOL vmlinux 0xbc280abe find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xbc3d2480 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xbc3e6ae2 nla_put +EXPORT_SYMBOL vmlinux 0xbc60da06 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xbc6163cb tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xbc7a9aa9 genphy_update_link +EXPORT_SYMBOL vmlinux 0xbc91a730 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0xbc98f984 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0xbd2474f9 module_layout +EXPORT_SYMBOL vmlinux 0xbd79838c of_find_property +EXPORT_SYMBOL vmlinux 0xbd91dd72 tcp_read_sock +EXPORT_SYMBOL vmlinux 0xbd922ab3 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0xbdc582be kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xbdda2fc6 sock_no_connect +EXPORT_SYMBOL vmlinux 0xbddfce0e tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe4460d1 lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xbe5e79a8 set_create_files_as +EXPORT_SYMBOL vmlinux 0xbe5eaefb net2280_set_fifo_mode +EXPORT_SYMBOL vmlinux 0xbe68738d napi_gro_flush +EXPORT_SYMBOL vmlinux 0xbe723491 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xbeae47d5 override_creds +EXPORT_SYMBOL vmlinux 0xbec8c8e5 bioset_free +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf29b58d sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xbf39f035 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xbf41b4f1 lookup_one_len +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf86cb8d bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xbf993764 __memscan_zero +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfcbfc41 otg_get_transceiver +EXPORT_SYMBOL vmlinux 0xbfd80208 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0xbfda9d73 call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0xbfdd2924 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xc003c637 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0xc0044fbd kfree_skb +EXPORT_SYMBOL vmlinux 0xc004dc8e __brelse +EXPORT_SYMBOL vmlinux 0xc00bbe7d bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xc02b3b2a sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0xc03af983 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc063b3be dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0xc0735454 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xc07abe69 framebuffer_release +EXPORT_SYMBOL vmlinux 0xc0847209 lease_get_mtime +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0b81a71 bdev_read_only +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0d815f5 up_write +EXPORT_SYMBOL vmlinux 0xc104f9ab neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xc1119399 drm_debugfs_remove_files +EXPORT_SYMBOL vmlinux 0xc119cdd8 skb_unlink +EXPORT_SYMBOL vmlinux 0xc1216299 bio_alloc +EXPORT_SYMBOL vmlinux 0xc1468340 sync_blockdev +EXPORT_SYMBOL vmlinux 0xc15e073c generic_find_next_zero_le_bit +EXPORT_SYMBOL vmlinux 0xc162f38b blk_queue_make_request +EXPORT_SYMBOL vmlinux 0xc16df2b1 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xc181493e may_umount +EXPORT_SYMBOL vmlinux 0xc1c280cd __devm_request_region +EXPORT_SYMBOL vmlinux 0xc1ee17ca test_and_change_bit +EXPORT_SYMBOL vmlinux 0xc212597e mpage_writepage +EXPORT_SYMBOL vmlinux 0xc213f27d block_write_full_page +EXPORT_SYMBOL vmlinux 0xc22eb2ca do_splice_to +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc258db32 balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xc288b325 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0xc2b4b9a5 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f16b2f kernel_listen +EXPORT_SYMBOL vmlinux 0xc2f7b590 generic_setxattr +EXPORT_SYMBOL vmlinux 0xc38a0e5e netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xc38c4ca2 PAGE_SHARED +EXPORT_SYMBOL vmlinux 0xc3a03703 __dst_free +EXPORT_SYMBOL vmlinux 0xc3df0e6f __ps2_command +EXPORT_SYMBOL vmlinux 0xc3e07097 proto_register +EXPORT_SYMBOL vmlinux 0xc3ea370e tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0xc4097325 sock_kmalloc +EXPORT_SYMBOL vmlinux 0xc409fccf input_allocate_device +EXPORT_SYMBOL vmlinux 0xc4262c56 tc_classify_compat +EXPORT_SYMBOL vmlinux 0xc432d547 fput +EXPORT_SYMBOL vmlinux 0xc4399953 blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0xc43b7e5e __scm_destroy +EXPORT_SYMBOL vmlinux 0xc44d0973 fb_set_var +EXPORT_SYMBOL vmlinux 0xc453197a security_path_unlink +EXPORT_SYMBOL vmlinux 0xc465d35e arp_broken_ops +EXPORT_SYMBOL vmlinux 0xc471f831 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xc4795ba1 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0xc47f659b xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4aba848 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc57249a4 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0xc58f312b handle_sysrq +EXPORT_SYMBOL vmlinux 0xc5b4042d d_invalidate +EXPORT_SYMBOL vmlinux 0xc5b742a2 napi_complete +EXPORT_SYMBOL vmlinux 0xc5d6d3e2 end_page_writeback +EXPORT_SYMBOL vmlinux 0xc5dbd2b3 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xc5ff7da3 generic_show_options +EXPORT_SYMBOL vmlinux 0xc6184045 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xc6327b65 sun4v_chip_type +EXPORT_SYMBOL vmlinux 0xc656045c nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xc66bd070 tty_port_init +EXPORT_SYMBOL vmlinux 0xc675927f file_update_time +EXPORT_SYMBOL vmlinux 0xc6aa6ecf __napi_complete +EXPORT_SYMBOL vmlinux 0xc6b0bcfa inet_frags_init +EXPORT_SYMBOL vmlinux 0xc6b57883 dev_gro_receive +EXPORT_SYMBOL vmlinux 0xc6b6784d xfrm_register_km +EXPORT_SYMBOL vmlinux 0xc6d0f295 drm_i2c_encoder_destroy +EXPORT_SYMBOL vmlinux 0xc6e0e167 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xc7143ce4 drm_mm_dump_table +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc7346161 proto_unregister +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7b0f214 idr_remove_all +EXPORT_SYMBOL vmlinux 0xc7c8ff87 page_put_link +EXPORT_SYMBOL vmlinux 0xc7e0f6eb seq_open +EXPORT_SYMBOL vmlinux 0xc7ec28b0 memcmp +EXPORT_SYMBOL vmlinux 0xc7ed80b4 journal_start_commit +EXPORT_SYMBOL vmlinux 0xc7faecba tty_set_operations +EXPORT_SYMBOL vmlinux 0xc80e6c39 uart_add_one_port +EXPORT_SYMBOL vmlinux 0xc80f9a3f __wait_on_buffer +EXPORT_SYMBOL vmlinux 0xc851ba54 mntput_no_expire +EXPORT_SYMBOL vmlinux 0xc8ad2a6e blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8e075dd textsearch_unregister +EXPORT_SYMBOL vmlinux 0xc8f343e0 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xc9242666 mod_timer +EXPORT_SYMBOL vmlinux 0xc9249144 get_super +EXPORT_SYMBOL vmlinux 0xc95617aa idr_find +EXPORT_SYMBOL vmlinux 0xc9890b0e phy_device_create +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9b00981 fd_install +EXPORT_SYMBOL vmlinux 0xc9b35a8b xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xca05ec40 touch_atime +EXPORT_SYMBOL vmlinux 0xca207e16 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0xca3588da pci_request_regions +EXPORT_SYMBOL vmlinux 0xca7b2a56 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0xca947c60 ida_destroy +EXPORT_SYMBOL vmlinux 0xca980425 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xcaa0d37f bh_submit_read +EXPORT_SYMBOL vmlinux 0xcaae30f7 put_mnt_ns +EXPORT_SYMBOL vmlinux 0xcab5079e serio_interrupt +EXPORT_SYMBOL vmlinux 0xcab57a32 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0xcaf9f9fa bd_set_size +EXPORT_SYMBOL vmlinux 0xcb3d5507 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xcb4b41aa deactivate_super +EXPORT_SYMBOL vmlinux 0xcb4b811c drm_mode_detachmode_crtc +EXPORT_SYMBOL vmlinux 0xcb65175a sk_alloc +EXPORT_SYMBOL vmlinux 0xcb6a45ff journal_abort +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb79402c kill_pgrp +EXPORT_SYMBOL vmlinux 0xcbb9d7db groups_free +EXPORT_SYMBOL vmlinux 0xcbc29f4e gen_new_estimator +EXPORT_SYMBOL vmlinux 0xcbfd9b9f nf_getsockopt +EXPORT_SYMBOL vmlinux 0xcbfe6008 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc63900b tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xcc78431c tty_port_tty_set +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc883037 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0xcca572ab tty_std_termios +EXPORT_SYMBOL vmlinux 0xcce813f7 __up_write +EXPORT_SYMBOL vmlinux 0xcd07d854 netif_receive_skb +EXPORT_SYMBOL vmlinux 0xcd11b256 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0xcd3fab35 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0xcd4b3162 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0xcd6fb438 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xcd9464cc tcp_close +EXPORT_SYMBOL vmlinux 0xcda5009a napi_frags_finish +EXPORT_SYMBOL vmlinux 0xcdbcda53 __down_write +EXPORT_SYMBOL vmlinux 0xcdd484f5 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL vmlinux 0xce2da201 drm_master_put +EXPORT_SYMBOL vmlinux 0xce2db249 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce6f1465 invalidate_bdev +EXPORT_SYMBOL vmlinux 0xce77a99a uart_resume_port +EXPORT_SYMBOL vmlinux 0xcea317c4 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xced93e0d idr_destroy +EXPORT_SYMBOL vmlinux 0xcee33f79 fb_set_cmap +EXPORT_SYMBOL vmlinux 0xcef60325 simple_rename +EXPORT_SYMBOL vmlinux 0xcf110ab3 dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xcf12e31d insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xcf3c9018 send_sig_info +EXPORT_SYMBOL vmlinux 0xcf87f810 ip_route_input +EXPORT_SYMBOL vmlinux 0xcf9b9dcb skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0xcfa491ea jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xcfc071cd scm_detach_fds +EXPORT_SYMBOL vmlinux 0xcfdcadac simple_transaction_get +EXPORT_SYMBOL vmlinux 0xcfdeb595 simple_empty +EXPORT_SYMBOL vmlinux 0xcfe13710 sparc64_get_clock_tick +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd03a6dad fb_set_suspend +EXPORT_SYMBOL vmlinux 0xd04e731e per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xd0599853 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xd082604c journal_extend +EXPORT_SYMBOL vmlinux 0xd08391e8 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL vmlinux 0xd09e67c6 drm_get_connector_name +EXPORT_SYMBOL vmlinux 0xd0be1a2e __memset +EXPORT_SYMBOL vmlinux 0xd0e94f6e __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd11a73c9 ebus_dma_register +EXPORT_SYMBOL vmlinux 0xd1475c16 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xd15f0874 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xd164f27e fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0xd165ce30 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0xd16dbad6 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0xd1c676d2 d_find_alias +EXPORT_SYMBOL vmlinux 0xd1e9d547 drm_idlelock_release +EXPORT_SYMBOL vmlinux 0xd2224129 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0xd2385678 pipe_unlock +EXPORT_SYMBOL vmlinux 0xd23afa4c sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd260b816 kobject_put +EXPORT_SYMBOL vmlinux 0xd2694647 dev_set_mtu +EXPORT_SYMBOL vmlinux 0xd27015b7 inet_del_protocol +EXPORT_SYMBOL vmlinux 0xd2794525 __lock_page +EXPORT_SYMBOL vmlinux 0xd27b0b25 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2a0f8ea deny_write_access +EXPORT_SYMBOL vmlinux 0xd2a569c2 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL vmlinux 0xd3219230 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0xd3242da2 simple_rmdir +EXPORT_SYMBOL vmlinux 0xd3284cd7 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0xd3427f73 mempool_create_node +EXPORT_SYMBOL vmlinux 0xd37d2f35 neigh_event_ns +EXPORT_SYMBOL vmlinux 0xd3a95b55 drm_pci_alloc +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3b88c34 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL vmlinux 0xd3e15b76 create_proc_entry +EXPORT_SYMBOL vmlinux 0xd3ea3633 tty_unregister_device +EXPORT_SYMBOL vmlinux 0xd3fd9f78 simple_lookup +EXPORT_SYMBOL vmlinux 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL vmlinux 0xd42b77c1 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0xd44fec61 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xd48626c6 elv_add_request +EXPORT_SYMBOL vmlinux 0xd49f1ef6 test_and_clear_bit +EXPORT_SYMBOL vmlinux 0xd4a99a0b pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0xd4ce6c18 pci_unmap_single +EXPORT_SYMBOL vmlinux 0xd4d69c8d set_bdi_congested +EXPORT_SYMBOL vmlinux 0xd4d8161a dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0xd4dac9d5 drm_mode_validate_clocks +EXPORT_SYMBOL vmlinux 0xd4ffc0a5 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xd509e0ad sock_create +EXPORT_SYMBOL vmlinux 0xd51bd10c drm_vblank_cleanup +EXPORT_SYMBOL vmlinux 0xd52116c6 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xd5223143 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd52750e8 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0xd53168bd vfs_path_lookup +EXPORT_SYMBOL vmlinux 0xd54fa6df lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xd56ba0a0 sun4v_hvapi_register +EXPORT_SYMBOL vmlinux 0xd57170a0 bdi_register +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5949457 napi_get_frags +EXPORT_SYMBOL vmlinux 0xd5c28b8f prepare_creds +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd5d0a0de tcf_exts_dump +EXPORT_SYMBOL vmlinux 0xd5d10015 drm_connector_init +EXPORT_SYMBOL vmlinux 0xd5e67996 dquot_release +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd6337571 default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL vmlinux 0xd69532ef ebus_dma_request +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f0f559 idprom +EXPORT_SYMBOL vmlinux 0xd71c8172 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xd720616b read_cache_pages +EXPORT_SYMBOL vmlinux 0xd73fe73a inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xd747299f security_path_mknod +EXPORT_SYMBOL vmlinux 0xd7488959 register_con_driver +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd790b4a6 tty_devnum +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7cf27d3 eth_mac_addr +EXPORT_SYMBOL vmlinux 0xd7cff568 drm_rmmap_locked +EXPORT_SYMBOL vmlinux 0xd7db25c7 drm_vblank_init +EXPORT_SYMBOL vmlinux 0xd7efde75 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0xd803044f irq_of_parse_and_map +EXPORT_SYMBOL vmlinux 0xd8097834 module_put +EXPORT_SYMBOL vmlinux 0xd81d5c5f blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xd82a4985 file_remove_suid +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd85cb992 block_write_end +EXPORT_SYMBOL vmlinux 0xd8959f23 auxio_set_led +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a388f1 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xd8a4c0e4 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0xd8bf5746 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0xd8cd3d5c bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xd8d3fdb7 of_set_property +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8e77708 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0xd9207a15 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0xd9207fcd kernel_bind +EXPORT_SYMBOL vmlinux 0xd93cca81 simple_pin_fs +EXPORT_SYMBOL vmlinux 0xd946240f xfrm_register_type +EXPORT_SYMBOL vmlinux 0xd9512ed8 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xd952b16d mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xd96c5909 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xd9794c9d audit_log_end +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9947bb4 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0xd9976d73 pci_remove_bus +EXPORT_SYMBOL vmlinux 0xd9dacc40 drm_mm_pre_get +EXPORT_SYMBOL vmlinux 0xda013c84 fb_pan_display +EXPORT_SYMBOL vmlinux 0xda0ae66e vm_insert_page +EXPORT_SYMBOL vmlinux 0xda1673bf drm_sg_alloc +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3cb8b1 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xda3d2c3c prom_feval +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda4fc9a6 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xda55867e generic_permission +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8b5096 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0xdaa06a9a skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xdad2c5ae have_submounts +EXPORT_SYMBOL vmlinux 0xdb023661 blk_make_request +EXPORT_SYMBOL vmlinux 0xdb068d21 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0xdb0de85d pci_save_state +EXPORT_SYMBOL vmlinux 0xdb97d4fa netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xdba37b02 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbed2b58 inet_csk_accept +EXPORT_SYMBOL vmlinux 0xdc01ecfc invalidate_partition +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc1341b1 mdesc_arc_target +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc4ca659 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xdc59bae8 drm_mode_duplicate +EXPORT_SYMBOL vmlinux 0xdc5f8e7a jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xdc6c9b16 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xdc7319de xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xdc860f3e pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xdc964e4c ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xdc9db829 register_exec_domain +EXPORT_SYMBOL vmlinux 0xdc9df06e jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdca88e19 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0xdcacb001 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb5671d strlen +EXPORT_SYMBOL vmlinux 0xdcbb1135 simple_fill_super +EXPORT_SYMBOL vmlinux 0xdcc796be register_console +EXPORT_SYMBOL vmlinux 0xdcface1a sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0xdd1197c8 xor_vis_3 +EXPORT_SYMBOL vmlinux 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL vmlinux 0xdd44f339 thaw_bdev +EXPORT_SYMBOL vmlinux 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL vmlinux 0xdd60fab1 security_path_mkdir +EXPORT_SYMBOL vmlinux 0xdd61dd2b sock_create_lite +EXPORT_SYMBOL vmlinux 0xdd6b9130 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0xdd70e09a pci_domain_nr +EXPORT_SYMBOL vmlinux 0xddb88eea ldc_state +EXPORT_SYMBOL vmlinux 0xddbfcf1a pci_disable_device +EXPORT_SYMBOL vmlinux 0xddc20494 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xddca6e2c ip_dev_find +EXPORT_SYMBOL vmlinux 0xddd1ee8b ldc_bind +EXPORT_SYMBOL vmlinux 0xddf3b272 simple_write_end +EXPORT_SYMBOL vmlinux 0xde3c68a6 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xde4b423d journal_clear_err +EXPORT_SYMBOL vmlinux 0xde589e60 xor_vis_2 +EXPORT_SYMBOL vmlinux 0xde743a17 sk_common_release +EXPORT_SYMBOL vmlinux 0xde7502a8 PAGE_KERNEL +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde7b507d blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdeb16801 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0xdeb47c33 skb_pull +EXPORT_SYMBOL vmlinux 0xdebaf1ef noop_qdisc +EXPORT_SYMBOL vmlinux 0xdf16efc2 vfsmount_lock +EXPORT_SYMBOL vmlinux 0xdf1eb41c poll_initwait +EXPORT_SYMBOL vmlinux 0xdf2d0451 pci_iomap +EXPORT_SYMBOL vmlinux 0xdf602e16 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf642ea5 inet_register_protosw +EXPORT_SYMBOL vmlinux 0xdf8fef53 prom_getproplen +EXPORT_SYMBOL vmlinux 0xdf917c3f drm_mode_config_init +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf9eb563 sock_no_getname +EXPORT_SYMBOL vmlinux 0xdfa45d6a remove_inode_hash +EXPORT_SYMBOL vmlinux 0xdfd861b1 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xdffd7ea1 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0xe02813b8 uart_get_divisor +EXPORT_SYMBOL vmlinux 0xe032b751 elv_rb_find +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe0912875 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0xe0aa174c request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0b61513 napi_gro_receive +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0f9bfc6 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe1445056 sbusfb_fill_var +EXPORT_SYMBOL vmlinux 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL vmlinux 0xe148a73d input_get_keycode +EXPORT_SYMBOL vmlinux 0xe175bd3a ebus_dma_residue +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe177f205 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0xe180cc31 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xe1a5ba2b vga_tryget +EXPORT_SYMBOL vmlinux 0xe1d4f62c blk_remove_plug +EXPORT_SYMBOL vmlinux 0xe1f49686 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xe20e0cd5 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL vmlinux 0xe2357657 __bio_clone +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe243114b sock_kfree_s +EXPORT_SYMBOL vmlinux 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe26ced47 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xe290e497 drm_sysfs_hotplug_event +EXPORT_SYMBOL vmlinux 0xe29da498 backlight_device_register +EXPORT_SYMBOL vmlinux 0xe2a53657 drm_compat_ioctl +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2f128b6 key_unlink +EXPORT_SYMBOL vmlinux 0xe302cc3d unbind_con_driver +EXPORT_SYMBOL vmlinux 0xe3583d2f mdiobus_scan +EXPORT_SYMBOL vmlinux 0xe376f6f9 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xe3824cd4 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0xe3a7201a bdget_disk +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3f750c3 fget +EXPORT_SYMBOL vmlinux 0xe3fbaf6b blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xe4239866 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xe432b6c0 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xe46308b1 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0xe48e7902 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0xe4b78308 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xe4bea49a d_validate +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe50d09ea drm_mode_destroy +EXPORT_SYMBOL vmlinux 0xe5225ae5 blk_peek_request +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe524904b zero_fill_bio +EXPORT_SYMBOL vmlinux 0xe529390f pci_dev_put +EXPORT_SYMBOL vmlinux 0xe52ddfed netlink_ack +EXPORT_SYMBOL vmlinux 0xe53cb331 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0xe5417781 unlock_super +EXPORT_SYMBOL vmlinux 0xe55c0495 skb_seq_read +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe578afb5 user_revoke +EXPORT_SYMBOL vmlinux 0xe5812b56 kernel_accept +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe58ac574 bio_unmap_user +EXPORT_SYMBOL vmlinux 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5c7c2b7 genphy_config_advert +EXPORT_SYMBOL vmlinux 0xe5e3f8c9 vfs_getattr +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5f2f784 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0xe611032f pci_write_vpd +EXPORT_SYMBOL vmlinux 0xe61633bc dm_table_put +EXPORT_SYMBOL vmlinux 0xe621b261 journal_wipe +EXPORT_SYMBOL vmlinux 0xe63e526c pcim_iounmap +EXPORT_SYMBOL vmlinux 0xe64bfd9f fsync_bdev +EXPORT_SYMBOL vmlinux 0xe6512544 seq_printf +EXPORT_SYMBOL vmlinux 0xe6562614 udplite_table +EXPORT_SYMBOL vmlinux 0xe65e96ba uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0xe66da7fb drm_vblank_off +EXPORT_SYMBOL vmlinux 0xe67565ba udp_sendmsg +EXPORT_SYMBOL vmlinux 0xe6962e56 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6aeaec2 __kill_fasync +EXPORT_SYMBOL vmlinux 0xe6b66a1d ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xe6d80e6f sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xe6e919f5 d_lookup +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe7284ca8 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0xe7521619 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0xe7575041 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0xe7617db2 blk_init_tags +EXPORT_SYMBOL vmlinux 0xe782899e prom_searchsiblings +EXPORT_SYMBOL vmlinux 0xe7854075 udp_proc_register +EXPORT_SYMBOL vmlinux 0xe795a938 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0xe7a04cd3 journal_init_dev +EXPORT_SYMBOL vmlinux 0xe7ad9fd9 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d32407 nmi_active +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe8292e41 textsearch_register +EXPORT_SYMBOL vmlinux 0xe8370537 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0xe83d6178 mdio_bus_type +EXPORT_SYMBOL vmlinux 0xe83da4e3 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0xe86e5fc1 downgrade_write +EXPORT_SYMBOL vmlinux 0xe896c971 input_set_keycode +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8ceb470 redraw_screen +EXPORT_SYMBOL vmlinux 0xe8d7ca22 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0xe8dbf13a lookup_bdev +EXPORT_SYMBOL vmlinux 0xe8dc1854 soft_cursor +EXPORT_SYMBOL vmlinux 0xe8dfcdf9 __csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL vmlinux 0xe9354b6e phy_register_fixup +EXPORT_SYMBOL vmlinux 0xe946e6df tcp_sendpage +EXPORT_SYMBOL vmlinux 0xe9d9cfbf vfs_link +EXPORT_SYMBOL vmlinux 0xe9f0446b icmp_send +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea091df6 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea19622a jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0xea221520 dma_supported +EXPORT_SYMBOL vmlinux 0xea3d61de tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0xea5d3fcc take_over_console +EXPORT_SYMBOL vmlinux 0xea67a8f2 filp_close +EXPORT_SYMBOL vmlinux 0xea967e1b splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xeaa6c8c8 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xeaaaaca7 kset_register +EXPORT_SYMBOL vmlinux 0xeabc2667 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xeadad829 follow_down +EXPORT_SYMBOL vmlinux 0xeadb6dd3 generic_write_checks +EXPORT_SYMBOL vmlinux 0xeb198479 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xeb3b087a register_framebuffer +EXPORT_SYMBOL vmlinux 0xeb57b327 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeba1960c inode_permission +EXPORT_SYMBOL vmlinux 0xeba65715 get_fb_unmapped_area +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebf7920a netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xebfecbab create_mnt_ns +EXPORT_SYMBOL vmlinux 0xec17eda4 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xec3ca5a9 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0xec68deea __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec8f8efa ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xec93571f skb_dma_map +EXPORT_SYMBOL vmlinux 0xeca3e73b skb_insert +EXPORT_SYMBOL vmlinux 0xece08ac8 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xed057fd3 __page_symlink +EXPORT_SYMBOL vmlinux 0xed39a4fe iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0xeda06629 journal_check_used_features +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedde132b blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xede3c2f6 drm_mode_validate_size +EXPORT_SYMBOL vmlinux 0xedf59c14 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xee1b6092 load_nls_default +EXPORT_SYMBOL vmlinux 0xee1c240d clocksource_register +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee368232 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xee3ba12a kthread_bind +EXPORT_SYMBOL vmlinux 0xee6011be inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0xee67c07e drm_poll +EXPORT_SYMBOL vmlinux 0xee7704ba make_bad_inode +EXPORT_SYMBOL vmlinux 0xee90884e dq_data_lock +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeaf81ac filp_open +EXPORT_SYMBOL vmlinux 0xeec35935 vmap +EXPORT_SYMBOL vmlinux 0xeef8eb74 journal_flush +EXPORT_SYMBOL vmlinux 0xef10d62b flush_dcache_page +EXPORT_SYMBOL vmlinux 0xef335d40 mdesc_grab +EXPORT_SYMBOL vmlinux 0xef4a8aa8 generic_writepages +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef511dd6 nobh_write_begin +EXPORT_SYMBOL vmlinux 0xef665dc1 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef8465e3 drm_sysfs_connector_remove +EXPORT_SYMBOL vmlinux 0xef8ff1ff ebus_dma_irq_enable +EXPORT_SYMBOL vmlinux 0xefb1f643 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xefcd5865 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xeff3a3da nf_hook_slow +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf054f00e i2c_bit_add_numbered_bus +EXPORT_SYMBOL vmlinux 0xf0696ce9 find_vma +EXPORT_SYMBOL vmlinux 0xf0798ce1 of_ioremap +EXPORT_SYMBOL vmlinux 0xf07e6682 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xf0912b8e of_dev_get +EXPORT_SYMBOL vmlinux 0xf0a05de5 inet_frag_find +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf111c6e0 cont_write_begin +EXPORT_SYMBOL vmlinux 0xf119ab1e drm_ioctl +EXPORT_SYMBOL vmlinux 0xf11f299b tcp_tso_segment +EXPORT_SYMBOL vmlinux 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf1851b4f nla_reserve +EXPORT_SYMBOL vmlinux 0xf18c7230 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0xf18f07c8 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1ac1a70 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0xf1c3b00e copy_in_user_fixup +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e1340e ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0xf1e3f22b pagecache_write_end +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf22bab7e call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0xf2815990 input_open_device +EXPORT_SYMBOL vmlinux 0xf28d2d06 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0xf299b424 simple_statfs +EXPORT_SYMBOL vmlinux 0xf29f32ec sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0xf2b83570 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf320eebf i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0xf322c9cd pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf33ebd2a pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0xf343c64f sock_no_accept +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf3520edd i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xf3595574 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0xf3753f57 of_console_device +EXPORT_SYMBOL vmlinux 0xf37e0cf2 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf426dc28 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL vmlinux 0xf434efe9 drm_i2c_encoder_init +EXPORT_SYMBOL vmlinux 0xf44fa6e0 pci_get_device +EXPORT_SYMBOL vmlinux 0xf497eebb __down_write_trylock +EXPORT_SYMBOL vmlinux 0xf4abb785 drm_core_ioremap +EXPORT_SYMBOL vmlinux 0xf4ce1c95 tty_port_close +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf4f8266e pci_unregister_driver +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf51c639f interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xf532bb41 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0xf5389d5e drm_mode_prune_invalid +EXPORT_SYMBOL vmlinux 0xf53ad34e neigh_destroy +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf543615a netif_napi_del +EXPORT_SYMBOL vmlinux 0xf552f9e6 seq_putc +EXPORT_SYMBOL vmlinux 0xf59d3753 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0xf5b81568 simple_sync_file +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5c926ff drm_fasync +EXPORT_SYMBOL vmlinux 0xf5e4f826 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf600d9ce blkdev_get +EXPORT_SYMBOL vmlinux 0xf60efa23 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0xf614c8a8 contig_page_data +EXPORT_SYMBOL vmlinux 0xf62a8bf1 drm_lock_free +EXPORT_SYMBOL vmlinux 0xf632f5e6 of_iounmap +EXPORT_SYMBOL vmlinux 0xf660a823 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0xf6823409 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xf6933534 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0xf6a30e08 ida_init +EXPORT_SYMBOL vmlinux 0xf6aeeb15 suncore_mouse_baud_cflag_next +EXPORT_SYMBOL vmlinux 0xf6af1c74 neigh_update +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6cc3be7 napi_skb_finish +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6f87f85 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xf72fba01 input_register_device +EXPORT_SYMBOL vmlinux 0xf73c8c37 journal_restart +EXPORT_SYMBOL vmlinux 0xf74448cf inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xf7476d82 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf761c3ae copy_to_user_fixup +EXPORT_SYMBOL vmlinux 0xf7829280 simple_transaction_read +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf7a87d70 block_sync_page +EXPORT_SYMBOL vmlinux 0xf7d59e14 vio_port_up +EXPORT_SYMBOL vmlinux 0xf80c69d2 __strlen_user +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf84b38c3 atomic_add_ret +EXPORT_SYMBOL vmlinux 0xf8584153 netif_carrier_off +EXPORT_SYMBOL vmlinux 0xf8adf9fc sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xf8d5d85a dcache_dir_close +EXPORT_SYMBOL vmlinux 0xf8dbcad9 km_state_notify +EXPORT_SYMBOL vmlinux 0xf9041daa neigh_for_each +EXPORT_SYMBOL vmlinux 0xf91eb3a4 lock_may_read +EXPORT_SYMBOL vmlinux 0xf924ca9f install_exec_creds +EXPORT_SYMBOL vmlinux 0xf94b129c pci_scan_single_device +EXPORT_SYMBOL vmlinux 0xf98afc2e die_if_kernel +EXPORT_SYMBOL vmlinux 0xf9907ed4 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xf994522d slow_work_register_user +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b28bac interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xf9b49144 dma_pool_free +EXPORT_SYMBOL vmlinux 0xf9b88d45 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xf9c8d7a6 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0xf9dbb397 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xf9ea5661 sock_wfree +EXPORT_SYMBOL vmlinux 0xfa042e6a gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0xfa0f786f drm_mode_attachmode_crtc +EXPORT_SYMBOL vmlinux 0xfa3b95b7 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xfa5f0581 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xfa6b1b8d sg_miter_stop +EXPORT_SYMBOL vmlinux 0xfa8d9b81 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfa9d635e sbusfb_ioctl_helper +EXPORT_SYMBOL vmlinux 0xfabc17e1 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0xfaf474e6 __pci_register_driver +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb300916 sbusfb_compat_ioctl +EXPORT_SYMBOL vmlinux 0xfb326a5d down +EXPORT_SYMBOL vmlinux 0xfb4e0d75 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0xfb58121b __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xfb698fbf generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb7c49c8 idr_replace +EXPORT_SYMBOL vmlinux 0xfb816e89 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xfba33aa0 dev_get_by_index +EXPORT_SYMBOL vmlinux 0xfbbb00b1 pci_claim_resource +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc2a11a8 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0xfc2f9624 find_get_page +EXPORT_SYMBOL vmlinux 0xfc32fea4 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc3e7af9 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xfc447922 dcache_readdir +EXPORT_SYMBOL vmlinux 0xfc5f5ad7 simple_unlink +EXPORT_SYMBOL vmlinux 0xfc82f6af unregister_filesystem +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc085c8 unlock_buffer +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcd6e08f d_move +EXPORT_SYMBOL vmlinux 0xfcd91110 input_release_device +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd1988ed pci_map_single +EXPORT_SYMBOL vmlinux 0xfd3db1f7 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0xfd6678e1 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xfd76e3c3 names_cachep +EXPORT_SYMBOL vmlinux 0xfd8dba4c add_wait_queue +EXPORT_SYMBOL vmlinux 0xfda7f621 of_register_driver +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdb2e6d7 drm_mode_object_find +EXPORT_SYMBOL vmlinux 0xfddf80ca skb_append +EXPORT_SYMBOL vmlinux 0xfdf52e17 qdisc_reset +EXPORT_SYMBOL vmlinux 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfdffa99d bdi_destroy +EXPORT_SYMBOL vmlinux 0xfe027d13 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0xfe10ade4 dev_mc_sync +EXPORT_SYMBOL vmlinux 0xfe1d1828 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe51beae dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe78010d xor_niagara_4 +EXPORT_SYMBOL vmlinux 0xfe8a234c kernel_recvmsg +EXPORT_SYMBOL vmlinux 0xfe990c7b journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xfe9994e3 drm_mode_create_dirty_info_property +EXPORT_SYMBOL vmlinux 0xfea7d15b sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xfeaf55a8 pci_release_regions +EXPORT_SYMBOL vmlinux 0xfec05366 sun_do_break +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xff0c01ce udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0xff0c49ae fb_get_mode +EXPORT_SYMBOL vmlinux 0xff0dd19a tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xff113a51 dquot_drop +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff8830b6 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff99d5ff request_firmware +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffa31680 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xffb46781 init_task +EXPORT_SYMBOL vmlinux 0xffb94cc0 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0xffc3b93a block_invalidatepage +EXPORT_SYMBOL vmlinux 0xffc84d5e __find_get_block +EXPORT_SYMBOL vmlinux 0xffcc871b tcp_poll +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xba25219d crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x81908435 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x0a3d8dca async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x1e4550a7 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xa80fef58 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xf089c38f async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x11260698 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x1240230e async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x8db13739 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x206c8804 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xd5ef166e async_xor_val +EXPORT_SYMBOL_GPL crypto/cryptd 0x189d3ee7 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x19ec32f0 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x5f67de5c cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x6e3211f2 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x7bf3a0ed cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xac1eed24 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xe140b00d cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/twofish_common 0xee48ffde twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/libata 0x002825c3 ata_sas_slave_configure +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL drivers/ata/libata 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0x021daa03 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x032397ae ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x043bbd4c ata_sff_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libata 0x086ba2f8 sata_std_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0aa086fa ata_link_next +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0c5033b1 ata_sas_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0c9c98b0 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0d8ff0b1 ata_host_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0x0e969d35 ata_do_eh +EXPORT_SYMBOL_GPL drivers/ata/libata 0x10843318 ata_scsi_simulate +EXPORT_SYMBOL_GPL drivers/ata/libata 0x10a01097 ata_sas_port_destroy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x116b16f0 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x14db059e ata_wait_after_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x15b61d52 ata_host_register +EXPORT_SYMBOL_GPL drivers/ata/libata 0x15b69707 ata_link_abort +EXPORT_SYMBOL_GPL drivers/ata/libata 0x163aae26 ata_ehi_push_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x16e96b83 ata_port_freeze +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1736127a ata_common_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1753bc2a ata_sff_wait_ready +EXPORT_SYMBOL_GPL drivers/ata/libata 0x194221bc ata_pci_remove_one +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1a12b91d ata_sff_data_xfer +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1a607204 sata_link_debounce +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1c9f6ab2 ata_sff_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1d359653 ata_eh_thaw_port +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1f44d1db ata_cable_80wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0x1f869f98 ata_std_qc_defer +EXPORT_SYMBOL_GPL drivers/ata/libata 0x20c5b565 ata_cable_unknown +EXPORT_SYMBOL_GPL drivers/ata/libata 0x20ddf214 ata_base_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x20f5d71f ata_dummy_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x222ce388 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL drivers/ata/libata 0x242b1ee2 ata_bmdma_stop +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2480a999 ata_noop_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0x263301ba ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL drivers/ata/libata 0x26d96fd2 ata_sff_freeze +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2831f031 ata_std_postreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2950a46f sata_scr_valid +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2a634f8a sata_scr_write +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2cbd4cff ata_dev_next +EXPORT_SYMBOL_GPL drivers/ata/libata 0x2d8553ad ata_ehi_clear_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0x30d56d63 ata_cable_40wire +EXPORT_SYMBOL_GPL drivers/ata/libata 0x37e0a63f ata_sff_exec_command +EXPORT_SYMBOL_GPL drivers/ata/libata 0x383a145a ata_port_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x38b683f4 ata_port_abort +EXPORT_SYMBOL_GPL drivers/ata/libata 0x3ebe72fd sata_async_notification +EXPORT_SYMBOL_GPL drivers/ata/libata 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x40eef352 ata_std_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x40f4e537 ata_bmdma_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0x41402b63 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL drivers/ata/libata 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL drivers/ata/libata 0x47c0bbee ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x48b4988a sata_sff_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4a21fd86 pci_test_config_bits +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4a873bb2 ata_dev_pair +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4d1e15ae ata_sff_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4d31faac ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL drivers/ata/libata 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL drivers/ata/libata 0x53c999d3 dev_attr_sw_activity +EXPORT_SYMBOL_GPL drivers/ata/libata 0x558627b9 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL drivers/ata/libata 0x59ee53c0 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5a13bd7a ata_pio_queue_task +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5d4269fb ata_dummy_port_info +EXPORT_SYMBOL_GPL drivers/ata/libata 0x5e6b78e1 ata_sff_softreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x61e27f0e sata_link_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x67b22c90 ata_std_bios_param +EXPORT_SYMBOL_GPL drivers/ata/libata 0x696ecf5e ata_port_schedule_eh +EXPORT_SYMBOL_GPL drivers/ata/libata 0x69927070 sata_scr_write_flush +EXPORT_SYMBOL_GPL drivers/ata/libata 0x69dba0b7 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6a861722 ata_pio_need_iordy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6e27a9fe ata_sff_postreset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x6eb88eaa ata_link_online +EXPORT_SYMBOL_GPL drivers/ata/libata 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x711d7c51 ata_std_prereset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x735b6369 sata_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL drivers/ata/libata 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0x75096351 ata_sff_dev_select +EXPORT_SYMBOL_GPL drivers/ata/libata 0x75122604 ata_sas_queuecmd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x75df2810 sata_pmp_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libata 0x782265f9 ata_sas_port_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7b769581 ata_port_disable +EXPORT_SYMBOL_GPL drivers/ata/libata 0x7fe90944 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libata 0x804a6681 ata_bmdma_setup +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0x81ad5a70 sata_link_resume +EXPORT_SYMBOL_GPL drivers/ata/libata 0x85b11f31 ata_cable_ignore +EXPORT_SYMBOL_GPL drivers/ata/libata 0x86bb9bdf dev_attr_em_message +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8882d57f ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0x88e2aca3 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL drivers/ata/libata 0x8cf4a7b3 ata_sff_dma_pause +EXPORT_SYMBOL_GPL drivers/ata/libata 0x92337a2c ata_host_detach +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9410967b dev_attr_em_message_type +EXPORT_SYMBOL_GPL drivers/ata/libata 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL drivers/ata/libata 0x94df2b32 ata_sff_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0x95134637 ata_sff_hsm_move +EXPORT_SYMBOL_GPL drivers/ata/libata 0x958ed7aa ata_pci_bmdma_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0x96b9b952 sata_set_spd +EXPORT_SYMBOL_GPL drivers/ata/libata 0x97c045db ata_do_dev_read_id +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9885f387 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9a7e6141 ata_sff_tf_read +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9bb4aec7 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9f7d9d42 ata_sff_irq_clear +EXPORT_SYMBOL_GPL drivers/ata/libata 0x9ffe40eb sata_scr_read +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa0c3f902 ata_sff_thaw +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa83d0eb5 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa8483d1a ata_sff_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libata 0xa9881c77 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0xacf4b0c2 ata_qc_complete +EXPORT_SYMBOL_GPL drivers/ata/libata 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb0fad795 ata_host_alloc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb6edb1fc __ata_ehi_push_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xb90892a4 ata_sff_qc_prep +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbdd6e9d1 ata_timing_compute +EXPORT_SYMBOL_GPL drivers/ata/libata 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc0693678 ata_port_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc450fca7 ata_sff_check_status +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc615fe04 ata_host_start +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc708b5a9 ata_eh_qc_retry +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc7b8fe4a ata_cable_sata +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc8f2cd6d ata_dev_disable +EXPORT_SYMBOL_GPL drivers/ata/libata 0xc92986bc ata_slave_link_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcae44e2c ata_sff_pause +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcbb14265 ata_eh_qc_complete +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcc48278b ata_sff_host_intr +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcdf5d7c1 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL drivers/ata/libata 0xced47b54 ata_sff_prereset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xcef02a9b ata_bus_reset +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd6b9d2a5 ata_do_set_mode +EXPORT_SYMBOL_GPL drivers/ata/libata 0xd828899c ata_port_pbar_desc +EXPORT_SYMBOL_GPL drivers/ata/libata 0xdd29680c sata_pmp_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xde0a8b16 ata_sg_init +EXPORT_SYMBOL_GPL drivers/ata/libata 0xde825bc6 ata_sff_tf_load +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe153cabf sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe3c164dd ata_bmdma_status +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe421be27 ata_scsi_ioctl +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe50d4d6f ata_port_probe +EXPORT_SYMBOL_GPL drivers/ata/libata 0xe6cad808 ata_sff_port_start32 +EXPORT_SYMBOL_GPL drivers/ata/libata 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL drivers/ata/libata 0xecfe8135 ata_sas_port_stop +EXPORT_SYMBOL_GPL drivers/ata/libata 0xef8d0e9a dev_attr_unload_heads +EXPORT_SYMBOL_GPL drivers/ata/libata 0xefb30bf8 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL drivers/ata/libata 0xefdb1bf5 ata_link_offline +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf10ef32b ata_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf6cc2c44 ata_eh_freeze_port +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf7db4aa9 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL drivers/ata/libata 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfb9eb02a ata_sff_irq_on +EXPORT_SYMBOL_GPL drivers/ata/libata 0xfdce538b ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL drivers/ata/libata 0xff3b8663 ata_sas_port_alloc +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0x64a84d98 sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x06e2d891 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x12a91506 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x135cf783 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x241965f8 tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2a4ae4fc tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x32afe56b tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x36c57884 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3de75e0c tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x405c681f tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x61aecbeb tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x77fe1127 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x77fe5a41 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x88450dde tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x995c010d tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa3b3c87c tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd33d3c1c tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xdf0fe936 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe4dae498 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xeb48d20a tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf12d17b2 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfad9fc92 tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfbe5b306 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfc808655 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/connector/cn 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL drivers/connector/cn 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL drivers/connector/cn 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0a4da716 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x156f8b6c hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1a1f4a80 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x200595be hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x275398dc hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x28dfae05 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3800ff84 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x45fbf52d hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5ba0bce8 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6d3cdac7 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x75669e52 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x76834371 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7762298d hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x80d0b008 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8921707e hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9498f6fc hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa28bc6fc hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa354162c hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xab72790e hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb50c3fe8 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb7586a77 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xcccbaf63 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe5203690 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xed5aeea9 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xefa2b304 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x0629b7f2 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xeb3d08a7 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x2e9e30c3 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x4e6004e4 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x69731168 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x8b29d69b lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xec282a02 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x1d74f42e hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xfc023e48 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/infiniband/hw/ipath/ib_ipath 0x1514b2b2 ipath_debug +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xfd3e0371 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1ada4bca wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x205980d8 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x62e3acf1 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x6461732c wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x6f2f3309 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7e02b552 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xaf16a896 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb2a8b5cc wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd4335098 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe351421f wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xef15b725 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf4e1bb07 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x01b86fc9 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x20149ed9 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2c0979ce gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x35d2de5d gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x596aeb4b gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6492460a gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x68716502 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x75a83dcb gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x98c4d214 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xa4265b4f gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xbbbe589b gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xcf1daaf5 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xddd7e441 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe3151897 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xeec0f94c gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xff401910 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x3d5da3ca led_classdev_register +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x7ab5759c led_classdev_suspend +EXPORT_SYMBOL_GPL drivers/leds/led-class 0x87d27972 led_classdev_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class 0xeaa696ef led_classdev_resume +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xc65c9730 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xd10f2b4a dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x0daabe40 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x328643a7 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x4e265e11 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5e76cb3f dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x60e2cecf dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x695b93c8 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x6e8e4149 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x6e9fef15 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x74e2d3f6 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x77cbec33 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x8c6f1066 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x96c56569 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x98b1dcfc dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc38b2a5a dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xcc088a1c dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xe19650e8 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xec5e073e dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xeda7bc4a dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf1d75bd2 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf8de4e85 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xffc0824f dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x05cda6c4 md_allow_write +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x13c51400 sync_page_io +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x82846290 md_do_sync +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xf0ce29d3 md_new_event +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5c724cba ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd9727a67 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef43b8d6 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x198a482a saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x2707c11c saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x43f2cdd9 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x7ef68416 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x922db13d saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x996e8d81 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xa7e25c91 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xf6862f7c saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xf6e7b7e2 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xfbe8a94e saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xff10125c saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1418e726 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1c4445a7 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x25ea5f90 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x34124aaa saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x6a5f3b65 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xb88d7ff4 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xdd14d369 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0x1e6cfab8 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x312072f9 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x5408e89f tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0xfccf1596 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xb68b486f tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xbe345767 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x8cc3b6c5 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0xda3d45b9 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0xcf7ad7d8 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x07771f13 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x3271f6d6 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x56a2fdf3 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x78042f03 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x89b0b04e cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x959001bd cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xa946ee0e cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xb1615dca cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xee9c250d cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xefe0bf4f cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfea8b515 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x15b4b896 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x483c7201 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x7558ff84 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xc19dffe7 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xe2378a67 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x1abf8ab4 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x34bc95d8 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x71c13e6c v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x8dc0c289 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0x030e3a38 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x0b45a954 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x8b5d0b0c v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xc182a964 v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xf16be282 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x03cf7377 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0562ea64 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0b1871f3 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0f0a99d7 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x157a835a videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x19801a4a videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2479fcfc __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x526445fa videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x67b5b3ed videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x70e5f606 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x755b632b videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x857f097d videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x86289682 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa1b9a6bc videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa289ccf3 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb2967e17 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb48b113c videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb76575be videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb92a64b6 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xd4b8c108 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdba78bd3 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xefdb94ce videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf31c57a9 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf779dd1e videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xfbace0bd videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x04a1fa26 videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x4dbb0e7c videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x6c21fe74 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x7991af95 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x7de5df24 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x96790f39 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc8d6ca7d videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xc93a5c07 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xd7e563a6 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xd9f037de videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xdb21c694 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xe816fc77 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xeb1ee151 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x078f376a videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x8a0f34d6 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x8bd250fc videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x2fca2628 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x37203a43 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x9d05f91d v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xce36578c v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xd6d2c199 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xd84060eb v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0c7b0a1c i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x35f420fb i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x670f6f68 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x6c39c408 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x6e8672d2 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xe8c800aa i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xeb0e60d6 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xf152a71b i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x2da1d575 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x6ffd9b67 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x826f9674 mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xab20ddf5 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xae77962b mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xb89ccb36 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xd5469436 mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x2469fe94 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x66edf7d5 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0419c18d pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x346414ff pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x51e31c23 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x6e76078b pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7d80f5e1 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7dd5a876 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x8278e8d2 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xc934da33 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xcc43f836 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xd4626375 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf6908d18 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x3969a87e pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x5aa345ad pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x5ee95740 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x65b83d6c pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x7de50b3f pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x15778d20 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x2338d626 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x3dae9a89 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x484afd5e sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x7effa367 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0xd42f5f74 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x01a15378 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x0aa66763 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x15dd9d2b wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x21818154 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x2c641fd8 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x8fdc036b wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa44d0ef9 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xa6ef84b1 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc1ae0709 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc1ee9902 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd3a7fd0b wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xeb29f747 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x0ba242f0 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x0ef7a9f2 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x191ba53e wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1f2a1d9a wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x44000ba3 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x58bbad62 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x6b275eb0 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x744cd221 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x79ffc27d wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x993bc545 wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x9c98480f wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xa7474072 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xbc229bff wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xbd928acc wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd402bacc wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xdc701f18 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x2b32bcbf wm8400_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xae27f373 wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xe034892e wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xe8c4f535 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x0b315586 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x253a7959 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x58c8ffef cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xb074e910 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x07c36229 sdio_readw +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x15dfde06 sdio_align_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x18ac85de sdio_f0_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x1bed3415 sdio_writel +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x2881c5b0 sdio_claim_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3a3c01bb sdio_writew +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3dd6d3c2 sdio_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3ec9e356 sdio_set_block_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x40387dda sdio_release_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x46096611 sdio_disable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x4a9f3013 sdio_readsb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x5b7948a2 sdio_unregister_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x5c9fb625 sdio_readl +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x6afa00d6 sdio_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x72e248a5 sdio_memcpy_toio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x733db130 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x81d4d653 sdio_writesb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc40bb73a sdio_claim_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc554d611 sdio_f0_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xd0f2a18e sdio_enable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xda60c9f3 sdio_register_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xfde0f37e sdio_release_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x1527b49d sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x4c9787d7 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x6daec0f8 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x708b4b96 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x9d3ae8e6 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xcb4afbb3 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xe2500010 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x1b65fee1 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x7d89edeb cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x4dbd5f52 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x5b4663dc cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xc10ae9ca cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xab1d7a89 DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0xdc968a0e DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xa9dfd9db DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0f997487 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2e070b3c get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x334d2088 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5fa86e9c default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x78692314 mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7dd3b781 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x9c0df0c3 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa008c874 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa058891f register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb449ed11 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdba2e732 parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdd7ba305 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdf5d460a kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe6a2aebf add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xea7294c4 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xeb6234c3 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x495fe6ed del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x4cf6ec18 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xf9a72d10 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xfaaec06a register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xb083f036 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xb0ae36e7 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc535b117 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xd3fcf862 nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xde788bfb nand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x15540f54 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x8f88b2aa onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x0ff6a3a9 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x263c7220 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5e3fc7fd ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5fe63da6 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6baadcb7 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7534cf54 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7bd56588 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8132abde ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa204294b ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xda31ad52 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf3f46f91 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf4db7807 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x09d19dff open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x0af05a60 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x604c45cb can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x6299e441 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x86423e6b close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x9732c335 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb305d071 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xe116e324 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xf508c022 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xf5cf5699 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x31a5b7dd free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x868408ae register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x8fd623f1 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xeab9bc06 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x009891e9 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0106ecff mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x03104afd mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0589b461 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x05ef67db mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1c152b5b mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1cb889a5 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2c719b0f mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2d06207d mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2fc56e32 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x44b19396 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x456c045c mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4f093b14 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x55df03aa mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x566f8f4d mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x59a925bd __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5a345dba mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5cc4b0d5 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5eb6467f mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x627eb6e9 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6c9a85a7 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7ca88ec1 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x82a384c9 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x852fa6ab mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8c985cdb mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x90ae8782 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x98f16887 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9e819141 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa3c2255a mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa4086db4 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa46b012b mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa4966220 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa839b105 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa87180eb mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb12dee54 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb26f3fcf mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb7eb4a65 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbaf0200b mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbbf0635d mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbbf2cf0e mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbe6d9706 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc084ec66 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc15e992d mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc2dba038 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc4bb64d5 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc5327e2f mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcc5dc022 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcfe1bbb4 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd18458d8 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe020fc91 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf0c3be86 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf23ed0ee mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfe5185b6 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x030e10a1 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x174952bf usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x7b74c8d6 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xbfdef340 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xcb54d912 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xcd132dc3 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xdeee721c rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xe5166a9b rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x07cdaecc usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0eec4268 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1592583f usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x17aa9757 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1981af48 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2784f0ea usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2f69ab5a usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3d8dd132 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3eb60fe4 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x46d00aee usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x49da608f usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x67bb5da9 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x68baa2eb usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x69cab48c usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x708c01a8 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x781318d6 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7fbf1c6c usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x86fe33ff usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa4070f37 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb6ed275d usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbd9e730c usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd05d0ea3 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xea033407 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xff7c5b25 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x13f15147 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x14e84840 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x17e4073f i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2b2d0a7a i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x4d352bf3 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x79eec40a i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8b41428b i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x927951f7 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xbc837d3c i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd63d424e i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf80abc04 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfae25b75 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfee5ef55 i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x91869d74 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x18472b5b lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1e117914 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x231d975f lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x2cdabde1 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x317d2891 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x40728468 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x615f1ca6 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6f5c9709 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7ceea0f7 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb03a12fa __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xe70b1acd lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xeaafac2f lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf4faf721 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf8d5c31e lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xff702a1b lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x1ad463b7 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x2b676643 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x62f93f92 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6e66f583 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x7fb8c20e lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd055d9e7 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd720ba7a lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xf9514460 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x8eddb75b if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xccd6f353 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x03ff0870 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x058daf4b p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x15f3a22d p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x5148b215 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x52804f9a p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x70833a3e p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7cbec828 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xac118032 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xc959082d p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0d692c65 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1775ddde rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x17cb96fe rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1824bba7 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1c09fe72 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x20895a5c rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2632c12d rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2b7d1a22 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x45f8a606 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x46959977 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x54e9e40b rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x55f13df8 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x813947bf rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaf9400a5 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb1da8d95 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbe87eaed rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd21e746f rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd66043da rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xde46088e rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf91dcf11 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf920ae0d rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xfc4c0909 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x1b3a6a76 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x320ded56 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x37f5fece rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xad491108 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb4fbe6b3 rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xc7128b98 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xe5c573e5 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x059ce49c rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1f2e2703 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x52cc970c rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5c1290b9 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x71ed621c rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x747ec264 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x8fa7a435 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9f14e479 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc5e38c02 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc8a0eb01 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xd108e3cf rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xdc3da9e2 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe8f70816 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xfff0b39d rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x319e057e wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xc6dae8af wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xca578d3e wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xdf76b53c pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xff558928 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x0605a477 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x123423b3 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x2c055149 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x3fc92d27 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x83266749 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xe423931f wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x93b1c9a8 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x074e9e32 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x1e7ea42d scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x2c591f35 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x675066bc scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x73c020e0 scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xff82035b scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x910ba5e3 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x04da7faa iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0b9878d2 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0d3cbffe iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1085aad1 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x19941adb iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1b2695e4 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1c302bd7 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x279eac78 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2deb3e50 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2fed490a iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x46a6707c iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x48437cbd iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4c998178 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x56d8a62a iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x597942c8 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x65a004fe iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6a9938e7 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x782f6c77 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7fa99028 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x80543595 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x81d58e08 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x828f54d0 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x855a719a iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x915aaf47 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x92eb935b iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x93086cea iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9fd09fab iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb5b1f240 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb6a8db15 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb776b1c4 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbb47b0ba iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbea76ac0 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbfb3ad76 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc1caf04a iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc86040f8 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd00dbf61 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe3912d73 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe5074cf2 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe8454de9 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf11ac7e4 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf259734f iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfdaf9ad4 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x04cf7582 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x16609a62 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x26814435 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3053c05e iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x30c9302c iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x354c63f8 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x394867b4 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x39eaa8fb iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x478a9f9f iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5b3f9d45 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x9fb789a0 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa7527310 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xcdda0e24 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xec1c1634 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xec5dcb94 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf0cd9116 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x04739454 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x086b3273 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0d30dc8c sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x18ecc155 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x19e492ae sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x23ed5de6 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x33f3f855 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x37fe2b53 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3c90e3b4 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x44b5d704 sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x4eb999b5 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x53900731 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x66d58026 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x75304fac sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x77942a97 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x79ee7578 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7ccba428 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa64a5a4a sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb0732ca0 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb2e9b134 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc79d8913 __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd0e8a9a8 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd5d06bec sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x0dc1bffe srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x389d57c8 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x4e49429d srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xb52e118e srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xcdb9206f srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xe148f8a4 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x0768f5a6 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x0b9626dc __scsi_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x104973cc scsi_internal_device_block +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x1cbb63b9 scsi_get_vpd_page +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x2455a57a scsi_mode_select +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x3020dbd8 sdev_evt_send_simple +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x54adc250 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x6d2dcc41 scsi_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x7553e2f5 scsi_nl_add_driver +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x78f8b14e scsi_target_block +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x795689d1 scsi_target_unblock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x8f6ffd80 scsi_bus_type +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0x9fb4475c scsi_nl_add_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xc3001858 scsi_flush_work +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xdb35bc13 scsi_schedule_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xf09bfbc2 scsi_nl_sock +EXPORT_SYMBOL_GPL drivers/scsi/scsi_mod 0xf6b3702a sdev_evt_send +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x228e079f scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x33cd8394 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x4ff15f7f scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x7a6cc851 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x8faf585a scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xa0859ef1 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xc4fe285b scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xcc6b3660 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf1d75075 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x05c22b87 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x190443af iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x1fda1560 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2cdf4918 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2d089d88 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2eb93a58 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x357c4f03 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x55589ecc iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6632f539 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x75ce1ea8 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7bbfdbd1 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x82cafda0 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x84778bc7 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8d3ea474 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9280c86c iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9b8e413d iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbffeba79 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc4a4f699 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd419cc60 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdeb480be iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe1a01f43 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf5d6efe6 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x0f9ff234 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x211598c9 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xa656a4cf srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xc5bd0dcb srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf4b13bc7 srp_rport_add +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x03ab8569 pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x0a4ff39a pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x5f66da6e pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xa40b1184 pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x1bffef72 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x6245d7c2 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x650d3c40 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xab1ba80b spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xdddf09fa spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xe20ac663 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/uio/uio 0x27310996 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xd15b0221 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xf3859962 uio_event_notify +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x7c2fe9cc usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xf73a5e3d usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x00457bd4 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x02a9a716 usb_deregister +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x069f0dd8 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x11025660 usb_control_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x18ab41f9 usb_add_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x1e8c1aa6 usb_hc_died +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x20596565 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x22f9d3ea usb_buffer_alloc +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2328c6d7 usb_put_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x24b1d01d usb_debug_root +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x27daaea3 usb_unpoison_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2b8e9a89 usb_string +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x2d0d2e4d usb_init_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x317a1c6a usb_remove_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x33976f70 usb_set_device_state +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x344b942f usb_get_intf +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3557888d usb_get_current_frame_number +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x43243f73 usb_poison_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x46c72860 usb_bus_list_lock +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x476b07e7 usb_queue_reset_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4892704b usb_put_intf +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4b9abe17 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4eb6d2bb usb_sg_cancel +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x4f631e1f usb_buffer_map_sg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x5038823e usb_unanchor_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x505d946e usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x517061ac usb_alloc_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x51ca79d8 usb_sg_wait +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x59a7d16e usb_find_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x63badac9 usb_get_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x645ba843 usb_reset_device +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x66ce346b usb_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x6d241a59 usb_interrupt_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x762f64bf ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x771851ad usb_hcd_pci_probe +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x780f2285 usb_mon_register +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x79d2f8a1 usb_anchor_empty +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7cb66c0f usb_ifnum_to_if +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7cbbfd38 usb_reset_configuration +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x7fb44bfe usb_lock_device_for_reset +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8561cbe9 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8aa386ed usb_get_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8ac92d45 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8c3cd0ec usb_register_device_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x8d2831ad usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x95b396c7 usb_buffer_free +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x974e302d usb_submit_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9997812e usb_store_new_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9ce68b5f usb_set_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0x9fbe6478 usb_create_hcd +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa29a1214 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa5ddc98c usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa5ffb32d usb_deregister_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xa855ceae usb_bulk_msg +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xab238597 usb_match_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xaf19a638 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb07c1d46 usb_sg_init +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb3d1aab4 usb_get_status +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb6ce4845 usb_driver_release_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xb90c5b31 usb_match_one_id +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xbfe7385b usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc412f3d1 usb_driver_set_configuration +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xc848d18a usb_unlink_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcb96d4d5 usb_register_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcbb23ac4 usb_register_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcec7296d usb_free_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xcfcaeab4 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd38bc0e8 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xd76e905d usb_put_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xdbfdc976 usb_get_from_anchor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xdee35e8a usb_deregister_device_driver +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xdf28efa1 usb_anchor_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe211dbe1 usb_get_descriptor +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe370643b usb_kill_urb +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe5e23bfb usb_reset_endpoint +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe763f82f usb_hcd_pci_remove +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xebc7bb86 usb_get_dev +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xf44cea58 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xf6d0c375 usb_ep0_reinit +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xf9a13a02 usb_driver_claim_interface +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xfb9aba2d usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL drivers/usb/core/usbcore 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x1ab8dff0 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x1d354c6b usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x1feb7bd5 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x3b8698a2 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x43ba49ab usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9e39a524 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9ea8cb0e usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb750703d usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xed765438 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0f4d1452 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x165d68df usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x1fceee65 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2f910466 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3c04c4cd usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x497946bf ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7769980a usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x794a3ed9 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x80ea9819 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x84ed2e19 usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb4385bf1 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xcab28a87 usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xdc4a1929 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf17cd10c usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf666f60f usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x05a0ec01 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x11ee0578 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x195d2f7f usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x34debb33 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x387162f3 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3a466ada usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3ecf7714 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4b943fd2 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5e12d78a usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5ea1e1ce usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x653f45df usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x730b3374 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x94dc99d5 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xab8a7d7f usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdce97524 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe2a64832 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe50367d8 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe6417ef6 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf1123b30 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf76cfbc6 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x2f5edcf9 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xacd58e5b __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xad5c2d3d wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xcc31e382 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xe94c5d13 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x05ddbab0 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x231537d9 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x24fa1756 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x282c491d wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2e11d1ea wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x6381aba9 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x6d71f18b wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x789e8de1 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x8819aaa1 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa40a694f wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb5d34563 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xbb47115a wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc24f403c wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xda9f00a3 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf24881cb wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfbdeae3d wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x5cb2f10f i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xbc5f140d i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xe4167dac i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x76b413fc uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x79c561b5 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x91b6ddf4 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xa3d55124 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xafab5c2a uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xbae79a9b uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xbbba65da uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xbe252446 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x2827a96a umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x4ad8280b __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x52a3e6b9 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x56aee998 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x943228aa umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd396b805 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xe1b30400 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xee0c34d5 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0635b20b uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0f982d4f uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x11cc39f5 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x14363e08 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x16bed7da uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x177a7274 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x18dfefd7 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x19b36289 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1a068299 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1d9d21fd uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x291f2c7c uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x298f6286 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2c60d9a4 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x54471d99 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x597d75b2 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x632c4588 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6339ccd9 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x76cbc7ac uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7f623206 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8255a381 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x843e0f05 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x94232a65 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9d643fd9 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb3a2092d uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xba6ab888 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbd1a637c uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc65d9cde uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcb97bc73 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcbbf6fac uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd6f5d73a uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe466642d uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xee4be536 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf0354bba uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf10dc50d uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf344181b uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf70f5627 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xff842bc4 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xe05ceeb9 whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x03f49b24 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x175e5e49 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1a556b12 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x273986b9 wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2c381c23 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x372fb31d wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3971c94f wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3c1b26a4 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x40c42d5f wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x410b3727 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x419d51c5 wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x41b549a7 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x4e1b7b38 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x52737490 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5477089e wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x55c84b8b wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5b9c885e wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6526920d wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6af5436f wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x83db0113 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x85f176d6 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8ff6c01b wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x912e2c2c wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa0d19ef4 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa38f21b2 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xaaa9c19e wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xad7aadad wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb831f7e9 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcd50a2c2 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd37087b4 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xde53fd67 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xef1a73cc wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x0934cf18 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x1688af68 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x78be76fc ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xaa25bce6 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xb318313e ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x20308867 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xcf0c897e fb_sys_read +EXPORT_SYMBOL_GPL drivers/w1/wire 0x0ef16075 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x3cda263d w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x3f1267a3 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x55f584b6 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x567eedaa w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xc2f1edf9 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xde564bd0 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0xf0f5263c w1_reset_bus +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x058582c5 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x761dc89d dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xa3b24174 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x4393c8b9 exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x573bd994 exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x085ea407 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x0e98d2ea fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x20cd2c2e fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0x23a36e1a fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x29b55674 fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x423107ab fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x4966aec5 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x5025bfff fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0x52631275 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0x5cdac16b fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x6c9bf08c fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0x7a37a13f fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x84c4b8d4 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0xa398cb23 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xba4c59ea fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xe590bd06 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xef107a07 fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0xf2f46a04 fat_remove_entries +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x0275dd29 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x32f15204 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x61361ceb nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa67f0d0d nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xda7c0817 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x51856f3e nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xb3f19efd nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x07841502 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b86b91a o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x7ef5093f o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x8e6d1fab o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa2936923 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xcef602bc o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd9e38845 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x14e59265 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x34deb95b dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x3737a51c dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x46fd4a93 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x84dad953 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xf827e057 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x17f853b4 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x832d7a2e ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x92e62fe5 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x2858c5a5 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x8047f1ff garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x9fb84863 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xab2ccb9d garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xcc1868c0 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0xed79956b garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/stp 0x4ce2bec9 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x4e47fead stp_proto_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x139012c9 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2bd40ea6 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x355816a3 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3578c801 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3685ebb5 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3695b8d5 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x369a902e dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x378ed587 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x413f0215 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x433441f4 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x466716e4 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4e82c361 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x54055308 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x57e123a8 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5c51797d dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x612c3e14 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x70a0e40d dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x74fff8e1 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7c630e70 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9787e25f dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9a982bb4 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9ad11862 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa296df30 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xaad56834 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb285df52 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb43d38c1 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb7fe94ad dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbb7e4ee1 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc850856c dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc987654d dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xce5e52a5 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd005c670 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe630c352 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xeba6e954 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf3748346 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf9453304 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x1857d037 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x18e42094 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x5e91237d dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x8265c78e dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x8b7d6254 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xe7c6e381 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x336ef4c2 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x0030da9d nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x1962544c nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x47f47bc6 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x4b7b08bd nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x5e96f1e8 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x8fab73bf nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x9c432de9 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x70b61916 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xb6b283ef tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcf3c632e tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xe91f62f2 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xfd851797 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x02fc9791 ipv6_find_tlv +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x07ad0450 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x0c9a2516 ip6_dst_blackhole +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x0e6a5d19 inet6_csk_search_req +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x5a05e793 ip6_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x68b87496 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x6f1fff34 fl6_sock_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x8be2fca6 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x92e97de8 inet6_csk_xmit +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xc17c7074 ip6_local_out +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xc27d9cdb inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xdbee42b1 inet6_destroy_sock +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xde7e1909 ipv6_opt_accepted +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xdf0abd9a ipv6_dup_options +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xe990eaa5 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x0a5cec67 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x854ed4bb ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x05d60a84 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1b517040 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x39e9c401 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3b9c78bf nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3fc03b44 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x41919281 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x42ccaffa nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x446b75ac nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4a05025b nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4c202c6f nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4c7208fa nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4d1c0ff6 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x504dee1a nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x57c94b4c __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5f9bfccf nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6d11e152 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6d4d9d9d __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6f3b6f99 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x76214234 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7bc87c68 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7f2a6d74 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x80c2b997 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x830c4db4 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x836552f9 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8c42ff0f nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x94f19058 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x96177569 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9bf4add3 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9c92fa5e nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa3d6c26b nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa41617f2 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa4605498 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa4d430ee nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa86a89e1 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa906d43a nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa92b22bf __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa9c2cf51 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaa17e55e nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaf99ebb7 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb124103c nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb18d1838 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb2b7a900 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb6e99ec8 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbd3ccbd0 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbeaeab24 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbf8d98c1 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc3e51038 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc5cb6555 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc754ea62 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xca434e04 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcba006f9 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcc51d30e nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcfd4c648 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd4beec3c nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbef8b57 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe78f763b nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe8e70ecd nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeabce82a nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xefbf8c61 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf8dd1100 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfe4932b6 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x7d3d5623 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0xf5a58e0b nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x02adb3e6 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x18e37663 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x35e2ac34 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x48ea0536 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x668f9d0e get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x81f9ba50 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x961ccf49 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xdf584f4a set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe01bde58 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf02c04f8 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xc4de5794 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x1efff448 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x379b7e2f nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3cf07756 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x5b4657aa nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xac18c2fd nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xd7930bd5 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x01def143 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x24cb0ddb nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2d38bada nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x3320d950 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x366bfd7e ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x40ccb0f2 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x5c99d6dd ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xaa161ec2 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xc59e1141 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xdf484f15 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xe9ce4188 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xfb8a7bb2 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x7b8a8e55 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x772d24ee nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x7bb8450b nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x15bc0028 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x2ebc1032 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x643c4a06 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x716ad64a nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xdb736b98 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0ca7e629 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x17470351 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1c50153c xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x246f7579 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x613f5366 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x65cbd00b xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x73bd1b30 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x8dd2e8cd xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa1cce8f9 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb0b53ec5 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb623f353 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xbee0aea4 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd3a5a656 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd79a1a9a xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xdcd2d298 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xee27d398 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf71a088a xt_proto_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x1a7847af rds_inc_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x20926722 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x2173e0d9 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x28b6757e rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3c965f77 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x499faa72 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x4bfaca0e rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x62d17167 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x6e36f62a rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x7663983e rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x81a59d86 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x894d32f9 per_cpu__rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x8c2ccfad rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x907f6152 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x971c4af9 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x99ae7564 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xa35954ea rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0xad38d581 rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0xbd5d8d65 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0xc2da8e38 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xd5bb316d rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0xe42ad599 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xefa98f66 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xefe392df rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0xf6b11386 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x0b89d4e6 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xe6b86d88 rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x0489841d gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x174a533b gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x264c290c gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x4edba673 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x582f276c gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x67637959 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7b9f3f31 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8466d08d gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb501d969 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb9d17029 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf9d88ab7 gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x000d7999 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x03fe0a94 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0632841b xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x06ff7d0f rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b30bc08 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0bf5efdf svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0dd3243c xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f8fa3e3 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x114393b7 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11c48b47 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12109ae9 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x13357832 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x18e7da25 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1fb4b95d svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2012aa3c xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x20ccca7a rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x21e82875 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x235c63af sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23cb5936 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2440a434 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x26a6485e xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x26e1bb26 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2929003c xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x29fe8003 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b48e08d rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2b9078ef xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2d9b2180 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2ea7ae90 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2fe4ba20 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x303c2faa rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3081bd76 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x30e1e9f1 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x33d9acc2 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x34393e21 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x34907f9c rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37c47877 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37d2c74c rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3a5461f7 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c5922e4 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3dda4ec9 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f3dd3b4 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x409066eb put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x42b3f69e rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43a05761 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x44f32890 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45001f9b csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x456dc269 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x476a3252 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4979414b sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b9de6de rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50c9d5cd xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x55d45d3a rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x56ee2a3d svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5702e379 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b6bdc4d svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5cde3430 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e5997c0 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e671a0a __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e9770b4 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5f90a833 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x602eddd9 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x64818f0a rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x652ed581 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x68dc909a cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x693c77b4 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6989e3f0 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6a81b2ad rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6ae60418 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c86424c xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d2e5b2c rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eaf85e7 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x70430ce1 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x72ff3512 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x782cd989 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x799d21c0 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e3315ee svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7ed2eba3 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7f01c32a rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83b906a6 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x88050cfe rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b84118d svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c9f7f0b rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e4dbc85 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8fe5906b cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9068a060 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9802ce47 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x999d0578 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9a5cba1f xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9c488120 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9d041c9c xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ebee5a7 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1204b1c svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa237510e rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa41394d5 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa920691f xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa99a8c92 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa9bf1ee4 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xacc9388c rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb597fbdb rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb62b3901 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb7d0d108 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb88dc3b0 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbd4cb2e4 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf5e071b svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc229ba8b svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc2979dc2 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc44602a9 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc62056aa rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9e29b05 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcacded69 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcafae2dc svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcbdad9f7 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcfad1383 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd12b9eda svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd1669ae7 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd2b1b1c2 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3badfb4 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd41208f2 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd669a0d0 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd6e7f191 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc30c6a8 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf918058 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf9ee439 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe0fe61fe svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe10fb75a svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe30c1af7 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe8b80e31 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee3788b5 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf061dbe9 xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf475702b svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf48817f2 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf8374cab auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf862b2a3 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfafb620e svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfbba284f sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfc1a1c61 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfca2c8e9 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfe15ce2a auth_domain_lookup +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2c8fe99f wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2e09b5b1 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x32d2711c wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x4b094a22 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0x604f3386 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x6b262856 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x70d0a57e wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7c242350 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0xad19a5e8 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc123b7cf wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe27dbe87 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf1a32eb5 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf924584c wimax_msg_len +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0629fb67 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x07a73fbd cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x12c3fab3 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x177dff96 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1b1538f8 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x29e77842 cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3363ce73 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x36f335b0 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3f320841 cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4200fa13 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x516aaed3 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x63a137db cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6a079e03 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6b4d5c6d cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6c308a45 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8158faf2 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x92f155fb cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x97c438a4 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9bbacbe7 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xabd54317 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb173f542 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb4cdf067 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbe2a1086 cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc3e68950 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd1fc847e cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd64bb809 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd809f704 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xde6d39e0 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe40ef0c7 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe52cfe97 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe71fb204 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xfdd0c6c4 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x3c7b761e ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x65aa78a5 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x840972fd ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xbdfd2c49 ipcomp_destroy +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0625b368 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x08f9d798 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0bfc5844 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0d3863d4 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x10bad2c5 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x11af24c8 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x15ab6f17 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x187ffc79 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x189bed12 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1af8f329 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2494e78a snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2522aa87 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x277fd770 snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x28bd4f49 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x31ff2350 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x38f3f185 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x395fabc0 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x39689115 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3e9a2120 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x40a9e151 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x45c7992b snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4e9fa11e snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x500a5714 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x599f25c8 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5dbe5010 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ff37bb3 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x60ae21f9 snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x60b216e6 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6282ebd1 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x63cb3297 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65698580 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x70502693 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x73367ad2 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x75c67dde snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x75e0270d snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x776a8b15 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x794ffcb3 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7cfba185 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8141218d snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x88f5adbd snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x93b90806 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94f2591b snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9d0896ee snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9ff2f0ec snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2a1d633 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa315e8f7 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa477e3df snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa9c2645d snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb4c59271 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb83c6fc5 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xba0af5a3 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbc2f5d9b snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbd74d91e snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc554b29d snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc583bb11 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc7bcc703 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xceae3d54 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcf549bb7 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcfe0dbc2 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd31d2cd4 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd72147da snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd8f019f4 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdc6f96f3 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdd907d55 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe18fbf4a snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1f0bd35 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe50338cc snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe529ede6 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe7ed5c21 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed0052cd snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xede555e9 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf11473d6 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfcd0b85d snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x534a356b soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xef145aad ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x19b43b43 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x75757f80 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xc440da39 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xf7716625 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xf91113db soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x49192310 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xb3bb83d0 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x1f342ac5 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xeb00ac7c soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x8b4be774 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xf29dfe6b soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0xb981285a max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xde568003 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xe836992b pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xdca6154f dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x41d1b1b2 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xd5e385c8 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x62351a64 tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xedc09344 soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x58ef7428 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xaecbf11f aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x1e3c0091 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x2c9bfcb8 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x3dee91b7 aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x4917e0e7 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x6f4fe461 aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x8454e412 soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xd3258f27 aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x62cc7876 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x7a6e0dc0 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0xbbd66bc5 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x8a6c57ac soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xd08c0da1 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x3af5fa1b wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x470a9463 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x6ee9d249 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xa69bc54c soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xdf49f2ff wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x3614f4f7 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x3d873f1e soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x23222e51 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xdaef0413 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x945e4662 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xf384e989 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x0e841874 wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xd53e3f9c soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xba79f8c9 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xbcbcb1dc wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3dc4eba0 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x6a7929b7 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x77ef6444 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x95480d3f wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x5cc23787 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x9f04aa78 wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x223117ac soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x7c59026a wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x91fbd19c soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xd2fa30aa wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x546e4204 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xbad6825f soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x26b514b9 wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x96f27940 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x9576ad2e soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xb12a0590 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x7a76d635 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x8c6d9c6f soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x8daff658 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xdc01dd81 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x8ccc4c32 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xf0d8021d soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x0d46fca0 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x57310a2c soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x47627579 wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x9e2aea13 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xb507b9d0 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xc1f607d7 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x227da200 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xc69bd75f soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x019e2f59 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x04459943 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x04b06376 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0820b3f2 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x09ca4d4b snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x104e5f2f snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1536818d snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1fd75a2d snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x205b1b24 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x27df1bc2 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2ac6b025 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2b89b5b4 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2d310206 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x35b43535 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x36aa5a3a snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x376e53e0 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x39e02392 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3b38e0be snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3dad7a7a snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3fcd4a31 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x483f4958 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x487cc59f snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4beec6ca snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4d567178 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4f1cae34 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4fba6233 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x589cd1a6 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5e52b941 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x629daa58 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x66913edc snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69367a1f snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6970fb15 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7132ad1b snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7d833bb7 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7ddd258b snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x80ce2fa7 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9aa82a9e snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c3b6111 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c5a375c snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa1a6ea80 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa1de8f4c snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa3084b94 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa392a2b7 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa4f0c363 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xac632caf snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaf736533 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb83edd3e snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb860c302 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb9e5210c snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbbe798d3 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbd42cabe snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbed7207b snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc10d1ed2 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc1c470f5 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc405813c snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xca986066 snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd26493c1 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd845e21e snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd9c4bb48 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xda8d1613 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdbb20b81 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xddfa0819 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe3d290f3 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe61f0920 snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeae05bac snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xedcb9122 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf14a1c1d snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf16bb7a3 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfbb716d3 snd_soc_info_volsw +EXPORT_SYMBOL_GPL vmlinux 0x0029b018 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00ccfef6 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00e0f2d0 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00e20e71 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x01153579 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01a5af2b ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x01e6013a scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x020d80e6 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x0240fffb __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x02899da9 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x02c97ec5 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x036d5810 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x038afb81 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x03ba7026 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x03d7b992 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0440b25a input_class +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x052f7ab3 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x0556f846 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07edbc50 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x07f74407 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x08497970 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x08ecee55 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x093aa073 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x09473229 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x0949e071 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x09b64f8e bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x09ca8775 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x09ef6af6 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x09ef9fde debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x09ff28b7 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x0a207e3e shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x0a3efd46 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x0a76d4c0 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x0ac111d8 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0bfa7ac7 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x0bfbc96c power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x0c068934 pcr_ops +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0e2b162c page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x0e3e6205 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x0e4e0c22 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x0e80b77b hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x0e80e3c7 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x0ec7fccf fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0f931f1b blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x0f948bd3 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x101f3dcc __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x107d3a2b sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x10813fdd xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x10939cfe ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x10c45f24 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x11a7cce3 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x11d6bd1c crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x11e2b680 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x12436af2 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x12b7d89a tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x1306724a crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x131193e0 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x13497751 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x13565b2d find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13e501d4 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x144ca71b klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14a8de90 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x14b14d18 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x14d4f63f eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x14d73afe tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x14ee3169 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x156cfaf8 inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x16974abc ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x16bd43fe bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x16fb347b __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x17a1e849 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x17d65707 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x1833d76e ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x183c076f pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x184504f5 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x18526147 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x1909f3d2 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x191b5419 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x191fb096 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x196faf37 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19c5b14c class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a5484f7 bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x1aa7bf08 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x1b059579 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x1b2eb46a fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x1b7f9f8a klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cb4cc28 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x1ce8b485 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x1d3f7437 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0x1d64c713 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x1d83ac8d sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e2ed2e8 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eae7396 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ec1f540 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x1f25cb10 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x1f89acd2 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x1fa0153f __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x1fba2ea0 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x1fce9d38 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fd26437 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0x208fe170 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x2094a7f6 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x2120cb94 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x215bcbe0 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x219350ed tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x21e32ec9 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x22244d7c gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x228855e8 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22e2c20b atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x231d50bc driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23cfb942 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x23d687c5 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2654e1df raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x2662efcb class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x26951ce6 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27b63291 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x27e9d6c0 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x282e0105 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x28884c4c crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x28b2cc80 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x28fcfbde pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x2957d131 user_read +EXPORT_SYMBOL_GPL vmlinux 0x295fe73f filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0x29840cb5 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x29bdef6d class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x29c45ca7 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x29c9b209 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x29e513fb da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x29e87576 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x2a0dc604 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x2a5aef5c platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x2a657ac9 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x2a78d27e securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x2a8a9c49 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x2aaa8c19 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x2b01c6e7 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x2b7970c6 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c4304c8 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x2c92fefe fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2ceea722 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x2d2174dc sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2d7829a1 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x2d79a186 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x2dbd3c62 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x2e12eb31 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e5716ee enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x2e84b81b apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x2eb91e2d tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x2ee76fe9 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x2f3d0904 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x2f8197f6 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x2f8ab716 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x2facc843 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x2fd4bed2 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x2ffbc834 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x305dbdfe rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x30b85eed rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x30e56f87 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x31268ff1 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x31421814 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x318da3b8 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x334d5242 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x3362f065 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x338fd069 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x33af626c dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x33bf8961 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x33e13fdb unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x33ed86a4 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441832c disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x34534662 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x34844fca da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x34c011f9 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x34c7867e skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x34cdf54d devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x3525046d device_rename +EXPORT_SYMBOL_GPL vmlinux 0x3525cec5 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x35ba1ebe drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x35bddb25 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x35ea70f5 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x366d1c34 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x36c1bf10 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x370afd64 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3783641d spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x37a7c6a8 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37fd9356 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x380ac9c2 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x383df672 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x38e05a5c driver_register +EXPORT_SYMBOL_GPL vmlinux 0x3913b675 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x393e6e9a eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x39819646 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x398eccaf fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x39a064aa unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x3adb362c eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x3af7d2b2 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x3aff6e37 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x3b7335c0 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x3bbc148f pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x3bc33f65 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3c086b6c regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x3c2e4727 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c83e164 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0x3ca61c94 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cdf2c2a inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x3cead838 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3d0a22dd fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x3dbf3968 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x3e533b69 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x3e6bf738 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x3ea019b2 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x3ef3f82b debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x3f5249ee spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x3f937cf4 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x3f9fc812 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x3ff3abb7 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x4097f1f9 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x40ad078a attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x40d1c843 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x40f52590 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x41677dca pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x41df5527 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x428fbd57 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x4292a26e dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x42a16723 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x42a286d3 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x42e94713 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x43920e90 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x44043ee7 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x441eb483 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x445441f2 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44b7f899 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45fe7de8 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x46266f60 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x47700c19 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x47a10d08 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x4807fd5a class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x482a1363 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x48ca4554 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x4a3221e4 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x4a3c9715 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x4a700c7f __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x4ada389a regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4af8e5c0 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x4b1febe5 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x4b47db54 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x4b5cfe56 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x4b9a4e34 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x4bdcd9f8 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x4be0a1ea simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x4c27d15d sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0x4c72c022 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c848371 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x4d808b9b regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4dc08fa9 inotify_init +EXPORT_SYMBOL_GPL vmlinux 0x4dcc3e28 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x4de5e197 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x4dff4262 user_match +EXPORT_SYMBOL_GPL vmlinux 0x4e2ce9de regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x4e3b2856 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x4e6e8d34 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x4eba5739 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x4ec5ecac inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4efbd1fd blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x4f12aba6 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x4f289741 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x4fae2093 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x4feae0a5 lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x4ff4db12 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x505ab317 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x508fb20c spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x50b62d51 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x50c1bfa6 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x513ce4d4 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x51576e46 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x51f6aa06 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x524caacb rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x5268f2a1 find_module +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x53013219 mmput +EXPORT_SYMBOL_GPL vmlinux 0x5324d04f bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x533db637 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x53493aba crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x534b00f8 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x538efd8b tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53a35aca debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x53c252b2 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x54283611 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54c0d1cf xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x54d284ec class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x550a3077 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x552feb0f tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x55b1e7e1 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x55d0d168 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x563800e2 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5648dce4 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x5649a6cc __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x569633e1 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x56974091 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x5699afb1 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x56aa1cee debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x56be1cbb fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x56d4d6cc register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x56d512c2 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x577b599e ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x582ac301 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x583b1fa7 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x5850df06 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x586a8937 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x5884f5c6 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x58d0821a fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x59344397 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x59a1bf40 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x59d014be crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x59e2e01c regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x5a193657 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x5a323284 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x5a3e2cd2 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x5a51c034 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5b0022eb device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x5b4982cf inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x5b4b613c da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x5b795c33 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x5bac7788 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x5badb7bf inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x5bb27542 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c482662 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x5c4c2bcc tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x5cefbe9e anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d22c0a2 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x5d33af59 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x5d3acc27 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5da6e910 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e404896 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x5e51e988 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x5eaa9fac rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5ecf154c crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x5ed5dd11 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x5ee0f733 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x600aa9c3 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x6021e6a4 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x60289d3b ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x606551a4 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60b2ccfd generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0x60d8819f relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x60f0b9d2 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x61a7acb8 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x622b3e2c srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x626b4cfa device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x627bed5c __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62c2eefd security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x63b3a21b blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x63e5747b device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x63f4dc09 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x643e37ee fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x644101e6 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x6497e935 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x649e9592 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x65280c87 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65c5563b kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x65c86d86 device_add +EXPORT_SYMBOL_GPL vmlinux 0x65cbc02a ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65cd23cb ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x65d23b01 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65f442f6 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x6600415f shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x660377b8 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x6608bf26 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x66716a3c debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x66754452 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e7e223 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x66f03065 sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x6727e699 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x6790683a map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x68b6d8c2 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x6a692d0a ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x6ad8ff0d disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x6ae5f618 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x6aefbceb tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x6b50d762 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x6b722a5a free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x6b73fc40 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6c058220 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c7ba6cd securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x6c875a0e crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c91004d kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6df51e38 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x6e533c3e tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e8a598a regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x6f07225c __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x6f77b85e register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x6faa383d __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x701c8b3f find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x70437621 drm_class_device_register +EXPORT_SYMBOL_GPL vmlinux 0x70e24321 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x713ca959 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x715233bc inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x7168048b ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x71ebc840 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x72153296 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x7284c914 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x735590b4 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74c057a6 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x75277efe anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x7544b5d5 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x759704e9 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x760e102c crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x76249884 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7699c78e fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x76d5a1d7 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x77a4d88b inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x77ef532d unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x77fda026 device_register +EXPORT_SYMBOL_GPL vmlinux 0x785e3a2a class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x787a96e6 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x78af7c8f init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x78b33048 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x78dca446 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x7948d109 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x7a1c4be6 nmi_adjust_hz +EXPORT_SYMBOL_GPL vmlinux 0x7a33368c get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x7a9b574a aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7a9fcfe2 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x7ac4d73f __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x7b0912dd inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7b1facda net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x7b52fdf4 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x7ba72366 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x7c28ba8b ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x7c2cdcbc crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x7c300324 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7c36e5d1 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x7c612dd4 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x7d2336e2 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x7d5ac3bc sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x7d71b903 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x7d8341fc hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x7da04be7 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x7db3aa5b rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x7db415e9 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e0c3d05 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e687e4f rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x7e6b5888 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x7e78aa8d raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x7edd12a6 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x7ef3886f vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x7efe91dd crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x7f8e43d9 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8028f9b4 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x803b38ff pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80e9e2ab crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x810dd5e9 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x817aa244 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x81f0093f fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82f776b7 gpio_export +EXPORT_SYMBOL_GPL vmlinux 0x8412e3c5 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x84695c3f regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x85015637 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x8505d388 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x857e629f class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x85a2a2a2 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x860b9b02 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x873bd8b6 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87997daf __class_create +EXPORT_SYMBOL_GPL vmlinux 0x87ac1bc6 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x880082b4 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x8847b307 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x888feec2 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x88d2b738 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x893549af fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x898be033 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x89932afc fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x89bc548c bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x8a14ce7f do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x8a9b9b7f tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x8abd850f i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x8b27e4e3 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x8b7d1e28 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x8b9b40a5 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8bb399d1 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8c3469dd clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d3d2117 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8d6f4ab4 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x8d72dc7f device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8db8d4d9 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x8dd64adb uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x8e865ded debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x8e908efd transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x8f4fdb89 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8ff4af63 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x90157348 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x90441705 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x9096f725 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90c0fcce rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x90c78637 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x90eeb1db fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x910ba23c queue_work +EXPORT_SYMBOL_GPL vmlinux 0x910c9455 sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x91c6f0b3 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x91c92246 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x920cb1dd __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x92297c6d __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92e25219 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x9354f8ad led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x94079a19 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x9456d918 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x947658ee flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x94bbe898 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94f1059c spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x95836c82 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x95cf6f29 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x96118268 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x96533a1c blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96e18be6 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x970a466f sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x97193bdc aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x9731ce07 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x973256a6 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x973f3744 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x97623b77 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x97cb9758 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x97dcac63 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0x98242060 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x982baf0b __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x986d6965 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x98ac887b crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x98deb6ba module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x990cbe40 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x990ef13d unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x9931b793 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x996dc569 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x997dacf0 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9a01f756 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a1d4949 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x9a8e9774 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x9aea5420 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x9b3b13b3 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x9b480926 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x9b72ecb8 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x9b8ed1d7 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bc9ee50 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x9c0fbfee regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9d0dfd84 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x9d7a412e trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x9d9f9009 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x9dfe0a4e crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x9e6a0ba8 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e798f59 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x9ec82ac2 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x9f1c2a7f dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f51ac86 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fd963c0 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x9fe8b1d0 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa0421488 device_del +EXPORT_SYMBOL_GPL vmlinux 0xa05bb29b skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0xa08e1bf5 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0xa130fb42 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0xa14418a3 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa170d943 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xa1b0953a device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0xa1b11be7 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0xa1ca9a39 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xa1e3744c crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xa20d1f2c skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0xa23fb028 user_update +EXPORT_SYMBOL_GPL vmlinux 0xa38b7f90 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xa3b4cf19 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa40667a4 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xa4a42813 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0xa4a8c73e power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa4d41f5b pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0xa516cbc8 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0xa52b81f3 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xa5940d2b raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5e1d4ef ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa5f83def inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0xa601c7b6 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xa6178320 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0xa66f607b proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0xa69015f9 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xa6e14161 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0xa7068c38 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0xa708a0b2 queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xa72e9b29 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0xa77937b7 hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xa7db62b6 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xa8221670 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xa83bf4bc disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xa8957b05 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0xa89d1915 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa8c11813 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0xa8db5ffc kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa906cb59 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xa97fa076 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9817d6c bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xa9a540e4 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa2b4152 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa6a993b security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0xaa7ba4f5 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab5d5eb1 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xab9ae2f7 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xac310f50 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0xac3afe57 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xac89e926 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0xac9dc228 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0xacf31133 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xad0b7310 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xad49e7d5 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xadf5cd23 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xae0bbea5 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaf130294 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0xaf5e140a input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xaf732c8e regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0xafa89ffa sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xafe0af7d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0xb098009f inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0dc2982 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0xb1165a2c unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xb12192a0 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0xb146c1d8 gpio_export_link +EXPORT_SYMBOL_GPL vmlinux 0xb14f1d10 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xb168af26 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xb19455c4 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xb196f35a skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xb1a9d076 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1e35a60 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xb22f3917 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xb2f124dc key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xb32f8233 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xb346bc8e fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xb36ea77a platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0xb382a9f0 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xb3a4423d tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xb3d21264 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xb42a17e1 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xb4390c27 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xb4689763 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xb56d1ec6 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5b38fe4 devres_get +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb62e642a unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb6f2dddc da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xb706631d setup_irq +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb79d6529 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xb7a2f0f7 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xb7b02f3e generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0xb8047294 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xb8492374 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0xb84fa68d input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0xb8759c2c srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xb877781d bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xb8a4fafd devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0xb8d10b98 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0xb91934aa spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0xb93d4dfa transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0xb9562902 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xb9b7a437 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba368de6 get_driver +EXPORT_SYMBOL_GPL vmlinux 0xbaff4a2b __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0xbb16ffe7 real_hard_smp_processor_id +EXPORT_SYMBOL_GPL vmlinux 0xbb6ff105 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xbbb1cc9c rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbbcf1531 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xbbf458d8 register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xbc1078cf register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0xbc84b636 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0xbcd55213 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0xbd85a2a8 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xbd957827 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdd4edb8 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe6f2229 relay_open +EXPORT_SYMBOL_GPL vmlinux 0xbe78c6e8 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbedcef9f led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xbeea7a2b srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbf176d8f raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0xbf741526 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xbfdcc967 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xc019ce2a debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0xc03aeb10 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0xc072e1b8 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xc089e2dd dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0xc1001cad sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc22da9fa ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc253163c blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0xc2632565 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xc26f4a04 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xc2807c99 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0xc2a55bfe scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xc2cc5fa7 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xc3000446 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc335033d shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc35bfa80 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0xc4248104 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xc44618f7 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xc46d8c91 pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0xc47ceeb2 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0xc499780d fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc55dc4fb unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xc55f4410 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xc56ec62e xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0xc57bed26 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xc57d8a93 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc6767206 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xc6d40964 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xc6fbbb4b blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0xc7466ff6 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xc75c8108 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0xc7a6ce13 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9611201 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xc9e5d4fc register_dimm_printer +EXPORT_SYMBOL_GPL vmlinux 0xca3c30e4 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xca6c9a0c use_module +EXPORT_SYMBOL_GPL vmlinux 0xca7af2dc fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xcab1eae3 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0xcade9201 platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xcb0c2ebf __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xcb1cc1e8 device_move +EXPORT_SYMBOL_GPL vmlinux 0xcb51cabe klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xcb5563bd fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xcb94357d crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xcbbce3a2 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xcc04130d inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0xcc17760e sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc814d49 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xcc8bad5a vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xcd59a53d crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdfed241 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xce310fc0 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xce8e04e2 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xceaeee7e init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0xced19cf1 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcfbb2aa4 register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfcc8d5b rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL vmlinux 0xcfee0d9f crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0xd03acc92 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd106f7a4 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0xd140f7a7 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd19132fd crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0xd23fcdb5 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a2f69d blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xd2d444a3 elv_register +EXPORT_SYMBOL_GPL vmlinux 0xd345bdd7 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xd40047bc add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0xd40977a7 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xd470adce skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xd49c700d sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0xd522dc52 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xd5984630 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xd5cdfcce firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd5fe3f8b pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0xd64d750d register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xd65450a1 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0xd6c39a17 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0xd6cfc2e3 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd76e5a1b sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xd821964e add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0xd84216e9 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xd91661a8 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xd934730c get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0xd9ba34b8 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda6039b7 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0xda8017fa tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdaf540af regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdca276bd ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0xdcbe8220 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0xdcc00e6d hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xdd0fa625 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xdd56f37a inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xdd75b687 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xdde7dd18 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0xde0133fc tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde6d6795 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xde80aec3 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0xde8c2a1e rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0xdf0ce0a5 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xdf21f1b1 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xdf240dc0 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0xdfd6ac63 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xe0477b60 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xe08ffd26 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0xe0c95208 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe0efb886 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0xe1447e22 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0xe156fa05 get_device +EXPORT_SYMBOL_GPL vmlinux 0xe16ad088 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xe1a5ca97 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xe1e2c90c blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xe21e3824 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0xe2b0953e fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0xe306066a scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xe33b4bd1 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0xe3401419 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xe3eb5252 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xe44e2141 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xe4619e18 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe4734eb1 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xe52b80e2 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe5a434b7 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0xe5d22bf9 k_handler +EXPORT_SYMBOL_GPL vmlinux 0xe5fc8c3b rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0xe6045129 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xe61a6d2f gpio_unexport +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe653028a transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xe67fe05a debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0xe78e4fbb __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xe7915935 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0xe82f7a61 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xe87133eb hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xe8789a12 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xe8940d27 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xe8f2db3a __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe94e14eb console_drivers +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea85261a debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xea865f55 inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0xeab3e7ab pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xead0f1a1 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0xeae71d14 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeba88874 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xec07d666 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec371b56 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0xed2b96b4 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0xed720629 drm_class_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xed74e3ea crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xedcc0d4d uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xedcd50d1 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xef4e963e __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef82fdba srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xef8c34ea fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xf0291bae blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xf06eeb6d blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0xf081e77f ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xf0c464a9 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0xf12bab47 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0xf1428a09 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf14bc683 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1f831e1 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xf219641e relay_close +EXPORT_SYMBOL_GPL vmlinux 0xf233904d regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xf24e439e init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xf2889a05 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xf28fd6fa tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0xf29272f1 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xf2c86cbc regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xf2e12f15 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf31b9a3e tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf3557d80 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0xf36fd900 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf3744d82 device_create +EXPORT_SYMBOL_GPL vmlinux 0xf3786f95 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xf3801b11 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0xf398d256 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xf3d9bdcd skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xf3f5900b crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xf43f2ffc hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0xf44ac1fb spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf52a2d57 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5c0eaf2 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xf6126507 fb_ddc_read +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6f1f92e disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xf706c480 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xf71a083e screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xf77961f1 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xf78d9761 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf7c7f284 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf801ba0e blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0xf805c9cc class_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf881485d sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0xf8b4b47a unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0xf8ba9169 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0xf8e1dd44 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xf8ed1ca1 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xf9030fd6 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0xf91ed7a1 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9bd4867 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xfa565479 put_device +EXPORT_SYMBOL_GPL vmlinux 0xfab3e4cd invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0xfb2fc7f0 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0xfb4ad7d6 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0xfb9d0677 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc86517e devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xfcce9f1c blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0xfd45f635 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0xfd5516e6 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe167436 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xfe533b3f pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfef0b2ab spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0xff0347f0 sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0xff15c81b queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xff680e17 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0xffaf7bbb __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0xffb34805 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xffc04543 unregister_dimm_printer +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/sparc/sparc64.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/sparc/sparc64.modules @@ -0,0 +1,1752 @@ +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +8021q +8139cp +8139too +8250 +8250_pci +8390 +9p +9pnet +9pnet_rdma +a100u2w +aacraid +ab3100 +ab3100-core +ab3100-otp +ac97_bus +acecad +acenic +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +adfs +adm1026 +adm1029 +adm8211 +adm9240 +adp5588-keys +ads7846 +adt7462 +adt7470 +adt7475 +adutux +adv7180 +adv7343 +aes_generic +af_802154 +affs +af_key +af-rxrpc +ah4 +ah6 +ahci +aic79xx +aic94xx +aiptek +aircable +airo +airo_cs +alauda +alim7101_wdt +ansi_cprng +anubis +aoe +appledisplay +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +ata_generic +ata_piix +aten +ath +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp870u +atxp1 +authenc +auth_rpcgss +autofs +autofs4 +avmfritz +axnet_cs +b43 +b43legacy +b44 +bbc +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +binfmt_misc +block2mtd +blowfish +bnx2 +bnx2i +bonding +bpck +bq24022 +bq27x00_battery +br2684 +bridge +broadcom +broadsheetfb +bsd_comp +bt8xxgpio +btrfs +c67x00 +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cbc +cciss +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cdrom +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch341 +chipreg +chmc +cicada +cifs +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cn +cnic +coda +comm +configfs +core +cp210x +cpwd +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +crc-t10dif +cryptd +cryptoloop +crypto_null +cs53l32a +cts +cuse +cx231xx +cx231xx-alsa +cx2341x +cx25840 +cxacru +cxgb +cxgb3 +cxgb3i +cyberjack +cyclades +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +DAC960 +davicom +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de600 +de620 +decnet +deflate +digi_acceleport +diskonchip +display +display7seg +dl2k +dlm +dm9601 +dm-crypt +dme1737 +dm-log +dm-mirror +dm-multipath +dm-queue-length +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +drm_kms_helper +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dstr +dummy +dv1394 +e100 +e1000 +e1000e +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +ecb +ecryptfs +eeprom +eeprom_93cx6 +eeti_ts +efs +ehci-hcd +elo +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +em_u32 +eni +enic +envctrl +epat +epca +epia +epic100 +eql +esp4 +esp6 +esp_scsi +et1011c +et61x251 +eth1394 +ethoc +evdev +exofs +exportfs +f71805f +f71882fg +f75375s +fat +faulty +fb_sys_fops +fcoe +fcrypt +fdomain_cs +fealnx +ff-memless +fit2 +fit3 +flash +fmvj18x_cs +fore_200e +freevxfs +friq +frpw +fscache +ftdi-elan +ftdi_sio +ftl +fujitsu_ts +funsoft +g760a +gadgetfs +garmin_gps +garp +g_audio +g_cdc +generic +generic_bl +gen_probe +g_ether +gf128mul +g_file_storage +gfs2 +ghash-generic +gigaset +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +gunze +g_zero +hdpvr +he +hexium_gemini +hexium_orion +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-zpff +hostap +hostap_cs +hostap_pci +hostap_plx +hp4x +hpfs +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +hwmon-vid +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-pca +i2c-dev +i2c-gpio +i2c-isch +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-simtec +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2o_block +i2o_bus +i2o_core +i2o_proc +i2o_scsi +i5k_amb +i82092 +ib_addr +ib_cm +ib_core +ib_ipath +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmpex +ib_mthca +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +icplus +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +igbvf +ili9320 +imm +inexio +inftl +initio +input-polldev +int51x1 +intel_vr_nor +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipg +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_si +ipmi_watchdog +ip_queue +ipr +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ipv6 +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ir-common +ir-kbd-i2c +ir-usb +iscsi_tcp +isdn +isdnhdlc +isight_firmware +isl29003 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +iuu_phoenix +iw_c2 +iw_cm +iw_cxgb3 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jme +jsm +kafs +kaweth +kbic +kbtab +kernelcapi +keyspan +keyspan_pda +keyspan_remote +khazad +kl5kusb105 +kobil_sct +ks0108 +ks8842 +ks8851 +ks8851_mll +ktti +kvaser_pci +lanai +lcd +ldusb +lec +led-class +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-lp3944 +leds-pca9532 +leds-pca955x +leds-sunfire +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-gpio +legousbtower +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libata +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +linear +lis3lv02d +lis3lv02d_spi +lkkbd +llc +llc2 +lm63 +lm70 +lm8323 +lm87 +lm92 +lm93 +lm95241 +lms283gf05 +lockd +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxt +lzo +lzo_compress +lzo_decompress +m25p80 +mac80211 +mac80211_hwsim +macvlan +map_absent +map_funcs +map_ram +map_rom +marvell +matrix_keypad +matrox_w1 +max1111 +max1586 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mc13783 +mc13783-core +mc33880 +mc44s803 +mcp23s08 +mcs5000_ts +mcs7830 +mct_u232 +md4 +mdc800 +mdio +mdio-bitbang +mdio-gpio +md-mod +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +metronomefb +mfd-core +mga +michael_mic +microtek +mii +minix +mISDN_core +mISDNinfineon +mISDNipac +mISDNisar +mk712 +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_core +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +msdos +msp3400 +mt20xx +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +mwl8k +myri10ge +myri_sbus +nand +nand_ecc +nand_ids +nandsim +national +natsemi +navman +nbd +ncpfs +ne2k-pci +net1080 +netconsole +netjet +netwave_cs +netxen_nic +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +nilfs2 +niu +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +n_r3964 +ns83820 +ntfs +nvidiafb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +of_mmc_spi +ohci1394 +ohci-hcd +omfs +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +openpromfs +opticon +option +orinoco +orinoco_cs +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +paride +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +parport_sunbpp +pata_amd +pata_atp867x +pata_cs5520 +pata_efar +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_oldpiix +pata_pcmcia +pata_pdc2027x +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pc87360 +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pci +pcilynx +pcmcia +pcmcia_core +pcnet32 +pcnet_cs +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +pegasus +penmount +pf +pg +phantom +phonedev +phonet +phram +physmap +pktcdvd +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pm3fb +pmc551 +pmcraid +pn_pep +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_generic +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +psmouse +psnap +pt +pvrusb2 +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qlogicpti +qnx4 +qsemi +quota_tree +quota_v2 +r128 +r8a66597-hcd +radeon +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +reed_solomon +reiserfs +rfd_ftl +rfkill +ricoh_mmc +rio500 +riowd +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rocket +romfs +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-test +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8187 +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +saa5246a +saa6588 +saa6752hs +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-empress +saa7146 +saa7146_vv +saa717x +safe_serial +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sbp2 +sc92031 +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_mod +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-pci +sdhci-pltfm +sdio_uart +sd_mod +sdricoh_cs +seed +serial_cs +serio_raw +serpent +serport +sfc +sg +sha1_generic +sha256_generic +sha512_generic +sht15 +si4713-i2c +siemens_mpi +sierra +sis190 +sis5595 +sis900 +sisusbvga +sit +sja1000 +sja1000_platform +skfp +skge +sky2 +sl811_cs +sl811-hcd +slhc +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-sun-amd7930 +snd-sun-cs4231 +snd-sun-dbri +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softdog +solos-pci +soundcore +sound_firmware +spcp8x5 +spectrum_cs +speedfax +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +sr_mod +ssb +ssfdc +sst25l +st +stallion +starfire +ste10Xp +stex +stowaway +stp +strip +sunbmac +sundance +sun_esp +suni +sunlance +sunqe +sunrpc +sun_uflash +sunvdc +sunvnet +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +tcm825x +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tda8290 +tda9840 +tda9887 +tdfx +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tg3 +tgr192 +thmc50 +ths7303 +tifm_7xx1 +tifm_core +tifm_sd +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tle62x0 +tlv320aic23b +tmiofb +tmp401 +tmp421 +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_nsc +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +ttm +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +tveeprom +tvp514x +tvp5150 +tw9910 +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +typhoon +u132-hcd +ubi +ubifs +ucb1400_core +ucb1400_ts +uctrl +udf +ueagle-atm +ufs +uhci-hcd +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultra45_env +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +upd64031a +upd64083 +usb8xxx +usbatm +usbcore +usb_debug +usbhid +usblcd +usbled +usblp +usbmon +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +veth +vfat +vgastate +vgg2432a4 +via +viafb +via-rhine +via-sdmmc +via-velocity +video1394 +videobuf-core +videobuf-dma-sg +videobuf-vmalloc +videodev +virtual +visor +vitesse +vmac +vp27smpx +vstusb +vt1211 +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w6692 +w83627ehf +w83791d +w83792d +w83793 +wacom_w8001 +wavelan_cs +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xirc2ps_cs +xircom_cb +xor +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +yealink +yellowfin +yenta_socket +zc0301 +zd1201 +zd1211rw +zlib +zlib_deflate +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/powerpc/powerpc-smp +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/powerpc/powerpc-smp @@ -0,0 +1,9522 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x4504c43f suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x8ecf3fad uPD98402_init +EXPORT_SYMBOL drivers/block/loop 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL drivers/block/loop 0xca51758a loop_register_transfer +EXPORT_SYMBOL drivers/block/paride/paride 0x4491a0d8 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x4deffe0b pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x50cea243 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x59bebe71 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x7fd0444b pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x8d9e7609 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x8e5dbf27 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x9206276c paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x96f4a193 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0xa0f04397 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xbb3a0360 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xf6e48730 pi_schedule_claimed +EXPORT_SYMBOL drivers/char/agp/agpgart 0x03342f85 agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0x04c88670 agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0afb7beb agp_generic_alloc_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x22972cc7 agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0x24761fbc agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x2605b0d8 agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0x27b2991a agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x31c6226d agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x32b0c6f6 agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3c008b73 agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3decadba agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4a951e41 agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5a821aa6 agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5bf31ce3 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0x60db7d44 agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x630c912d agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x867d6c18 agp_alloc_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x8e188165 agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9347ca8d agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x966ea65b agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x96826339 agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x99900772 agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xab5d4a73 agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb0175cf7 agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb2bfe70b agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbc855cb3 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc6e6dc9a agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xcfe7d3ee agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd796fced agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xe797aa11 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xece1e0f8 agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xed7c9e22 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf5c101cc agp_backend_release +EXPORT_SYMBOL drivers/char/apm-emulation 0x129e74f2 apm_get_power_status +EXPORT_SYMBOL drivers/char/apm-emulation 0xdf3329b8 apm_queue_event +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x0f4ba148 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1f75ac08 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x23ee64ed ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x32b793b9 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3bc95cdd ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3c9adb2f ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4863fe0a ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5330d5b6 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x57be533e ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5fce5133 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x88dbb9d5 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8d61ea5e ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8db496dd ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9cb9210c ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa8330ca9 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb41ba6a4 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc79b7443 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xcd8cac20 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xcf7eacd3 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd3a3d9e2 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe60be6cf ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf87dab14 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf93ab5ed ipmi_set_my_address +EXPORT_SYMBOL drivers/edac/edac_core 0x6eb0d0d4 edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/edac/edac_core 0x8582061e edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/edac/edac_core 0xf7416054 edac_mc_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x017944a2 drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05627760 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0629acbf drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07eb7a77 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0a26fbdf drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0be5ad72 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0c9b17f3 drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0d7d5e7f drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0e3e56d3 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1689280c drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x168b41cf drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x16cee93d drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x17677219 drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x17819b11 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1791a156 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x179d2cf5 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1cc62a73 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d10c670 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1e90ef3f drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x215b8ee5 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x229d7686 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2303aa52 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25ce71e3 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a2dca32 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x306143fb drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x310735ac drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x310c4425 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x32a5cf54 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x342c7148 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x35883f5e drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x35fbf36b drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3946ee2d drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x399a1a8e drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x39f8943b drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3a812371 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b8130b1 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c4e73b6 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3de1db33 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f23bd1a drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42ba014e drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42f45f57 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x445d98ce drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x46931e24 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4718a5dc drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4d9dfba1 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4db7a6ec drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4df72c1f drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x52e72bff drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5379cd75 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x53969ffd drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x56b7331b drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x57f31ed2 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5ae6aec8 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e0a1109 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5fca4458 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5fe1fe70 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6066a454 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x62e568ef drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6392ffd0 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6434167c drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x65bb9b9e drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6643d55f drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x698222c3 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x703e918d drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x71ea1dcf drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x733a8577 drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7352839a drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x758a788d drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x758f5beb drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x760eceaf drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78276b89 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x786c4d08 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x79644c8b drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b39ebc6 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8175439c drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x829cbc06 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8606839c drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8667182a drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c541b80 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8d79594a drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9238cd22 drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x92c9a577 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x94192293 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b22d3c9 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c90fc7e drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9cab71f9 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa16d34eb drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa19d065e drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa3238e38 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa73d642a drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa811760a drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa86876c4 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa8a5063e drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xab13301c drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xac0a060c drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf2a6534 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf380ddd drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0e44a2c drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0fdecff drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbc2ad249 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbd2cf470 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe2703a1 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbea226bf drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc1209851 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc2259b97 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc2ba3b0d drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc518c3d4 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6794f16 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcfdff29b drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd0a1a681 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd69d3993 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdb7d505a drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdb9d20db drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd0c049a drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe083acd5 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1d27487 drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe200ab3d drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe66fa995 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6ea4a13 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe78f7ccf drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe79f3928 drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7d5534a drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9108b56 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe92aabcd drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xea6330e0 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee8a16ca drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf10c405e drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6972a97 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf69c9f28 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf79adf48 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00d93b8b drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0142af0d drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x02bf8fbf drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0b66a401 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x10530c1c drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x167d4dab drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1a2d84cc drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1b287b1f drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1ef48622 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x431a6221 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4dcf81fe i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5ba95a07 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x64e36fa6 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x663797f2 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7e33a725 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8ffea79a drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9b04926d drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa2b72b93 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa50acb29 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbf66d7dc drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc16a9aaa drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd2ee52df drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd7fdabea drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xeed415b9 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf00d58bb drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x1dc86658 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x3b9031b7 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07787990 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0bc37df0 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0e79cdf6 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0eb73929 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x183ab9fe ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x23ba8329 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x28392aec ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x29ed1bd2 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2b7834b0 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2c3af510 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34704ea7 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x38ef3636 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c3c3af1 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3d847e5d ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3e8e6986 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x424f764d ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x47ba90ee ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x49666984 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4998650a ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4a50ba2e ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4e0aa310 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5a08c721 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ebcaacd ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6001e855 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x649707c1 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66666d70 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7266ef07 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7c542ecc ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8451e671 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x868a1340 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8967eb00 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8e026979 ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8f0cbf16 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8f3a3971 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9371f948 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x996860a4 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9cebb2fa ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9e271248 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa125ea7f ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa34d602e ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbdc74f35 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc331b7cb ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc985ee54 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcb26ae10 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd8207f7f ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xda321f1b ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xda6be81b ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdd082ab9 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe544303f ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xee706642 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf0d46e4c ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf276ae41 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf52e5f52 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfd56c2ef ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe362a63 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe467f39 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x5245cfb7 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xd730b3fc i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0xd3896e7b amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x01cf04af hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0459656e dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x046afb70 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0ad521f9 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0be7e30f hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0fd7aa64 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x12dbddc4 hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a708701 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x22ab578b hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x24743f83 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x27644ec4 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2c45d1b2 hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2c61fa83 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x304540f2 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x30e5f1fe hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3175d451 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x32bc813f hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3970e7bb hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3bbe179e hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3da5ce60 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x42df1ed9 hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x46a2692a hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4ab80f42 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x55207054 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x59047a14 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5ef35e55 hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x63844519 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6b5b3f22 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x746b1ae0 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7c0c424f hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7e111069 hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x895852c2 hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8a2ee087 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8f0c8f56 hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9152fa9d hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x91efbff8 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x92d2d241 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x94bce230 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9a892f2d __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9ab7737d hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9b6b07aa hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9ee7e6f9 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa2869c51 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa2f3a8b4 hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xad590396 hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaea2cf28 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaefbd374 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb0c71d68 hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb5e7adf4 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb84c4766 hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbd28d1eb hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbed305e0 hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc19bb657 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xca6372ed hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcc95bce7 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcf478230 hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd71a14e9 hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdb57c786 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe2b0d103 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe319ff80 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xebf21d19 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xed635c6f hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf0336ae1 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf03d27d3 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf5e6fd16 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfab27536 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x19835250 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x986935e6 ohci1394_stop_context +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xc4959636 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x6a6dc104 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x6e7a5651 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8dbe3485 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x9cabf69e rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc1382157 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xee867448 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x05704bc8 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1a9f08c8 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x26069424 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2e04130f ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4787abf3 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x47d7696c ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5a46d287 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x87cf8b24 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x8c001965 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa31a5b25 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xbd33e440 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe1148f58 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe261b17f cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe3e38ebd ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe50e0d8d ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xefb39de5 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xfbf147dd ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x005e575f ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0299d50c ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x08ec1565 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0fbf1fd6 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x115d0bdb ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x12a87e00 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1c3f4386 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1eef9fab ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1fb9f5f3 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x249c0680 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x26c3e222 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27eada90 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2aa939d3 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2c82eaa1 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x32673209 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3c834dd4 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4159abac ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4233f82e ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x45e8cb1e ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x478e9b84 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4914ba71 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5c2854ee ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5f843cab ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x62dafe0d ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6372db31 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67ffc201 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x681b4ff6 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6a420c08 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6b8b124f ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6eee352c ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x728d3d9d ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x77037c3f ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7e445068 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x845d6289 ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8dbcf75d ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8e0e1b40 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x910c2699 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9612496c ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x97205226 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9c3d6087 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9f623ea8 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa0494cee ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa6baa564 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xaab2d585 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xab3dd3e6 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xae9da8ff ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb344bb0c ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb3ee6910 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb6406c33 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb86fdc9d ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc2756c45 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc4e28633 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc547a671 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc66f53fd ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xca59515f ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd8ed4493 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd9b2a6a9 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdaf0da00 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe228b8df ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe9488375 ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xea097aa1 ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xee052292 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf4bc3193 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfc064241 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfe7b1a7b ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfecb7a1f ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2fb23f2f ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x343600a8 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x3b599857 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x5680e87b ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x687d97bd ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x74690352 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7c973add ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x851f2e4a ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x8d0708ab ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x904dd065 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xe83158aa ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xfe217ce7 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x064780fd ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x0df4714e ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x23135178 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x6043324f ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7ebfd85e ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7f7f5c7c ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc88c7576 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf6a5def7 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xfc8cffe3 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x0be7d58f iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x3e6eb348 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x54f5f7ea iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x74b6dc05 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x920726c1 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xade1d146 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbc9a0e54 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xe7496d16 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x1726b163 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x190f664c rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2cda0257 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2e56d839 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5b6f8ba7 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5c74625f rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5ea4f2e0 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x653667bc rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x67c41783 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6bb51ecf rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6d98d810 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6fcda810 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7d119515 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8aa4959b rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x93dee15c rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xb6b66ffe rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xea2a2849 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfe3fd5cd rdma_join_multicast +EXPORT_SYMBOL drivers/input/gameport/gameport 0x0a2442e1 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x11892753 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x320b16f0 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x55141b31 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x7bb2bf90 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8d13fb97 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8f1cfe29 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x9a4f0646 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xe901c8fc gameport_stop_polling +EXPORT_SYMBOL drivers/input/input-polldev 0x034d3ede input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x27691195 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x481c0d8b input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xe1fdad98 input_free_polled_device +EXPORT_SYMBOL drivers/md/dm-log 0x3b9e9a28 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x842d3af5 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x8796061e dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0xdd7e804e dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x80a549d4 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0xbe42acd9 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0xd3745021 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0xf70fe166 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/md-mod 0x1a110c6a bitmap_close_sync +EXPORT_SYMBOL drivers/md/md-mod 0x33663433 md_write_end +EXPORT_SYMBOL drivers/md/md-mod 0x377b65c1 md_done_sync +EXPORT_SYMBOL drivers/md/md-mod 0x46aa028e bitmap_unplug +EXPORT_SYMBOL drivers/md/md-mod 0x4ca384f2 mddev_congested +EXPORT_SYMBOL drivers/md/md-mod 0x64d05bc6 md_write_start +EXPORT_SYMBOL drivers/md/md-mod 0x76218115 md_integrity_add_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x7a6f340e md_error +EXPORT_SYMBOL drivers/md/md-mod 0x7b6f77a2 md_register_thread +EXPORT_SYMBOL drivers/md/md-mod 0x8534ffba md_wakeup_thread +EXPORT_SYMBOL drivers/md/md-mod 0x86ca8690 md_check_no_bitmap +EXPORT_SYMBOL drivers/md/md-mod 0x8dc9b6dc md_unregister_thread +EXPORT_SYMBOL drivers/md/md-mod 0xa632672f bitmap_start_sync +EXPORT_SYMBOL drivers/md/md-mod 0xa7a7a0eb md_integrity_register +EXPORT_SYMBOL drivers/md/md-mod 0xaa0927fe bitmap_startwrite +EXPORT_SYMBOL drivers/md/md-mod 0xb244de06 unregister_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0xbc782593 md_wait_for_blocked_rdev +EXPORT_SYMBOL drivers/md/md-mod 0xc39d8d05 bitmap_cond_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xcc64b5b3 register_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0xd027c346 bitmap_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xd5779c71 bitmap_endwrite +EXPORT_SYMBOL drivers/md/md-mod 0xdc642765 md_check_recovery +EXPORT_SYMBOL drivers/md/md-mod 0xe7c968a1 md_set_array_sectors +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0x7456cc61 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0x72e1d86a mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xa395a93b mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xb81dc4db mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0x1908ed4f mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x60dbaaab mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0x502907a6 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x45bbd288 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x7a9611eb xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x19e94cc9 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x226cf328 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x357476a8 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x41f404ff flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x4375c306 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x4736aab4 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x47455f3d flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x4d9e517b flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x56b3f996 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x5bc1c7a8 flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x633d7b24 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x635262a6 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6567ec3c flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8cc848c4 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x92d1c51e flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa1adc7cc flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xdf6e678d flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xea074a7e flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf03f77ba flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfb2e770e flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x329ce673 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x58e450a6 bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x8aa1208c bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xb43b5eed bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x09c1d69f dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x157c1ec5 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x545f042a dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x585df999 dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x71f4aab7 rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x8cdc3d12 dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xb15fbc19 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd89957ad write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe0024f63 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0x4838c6e6 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0698018f dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0a93f9c1 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0fc3414f dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1a73ea21 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1c7d6a1d dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1d6df58c dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x204aefc3 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x26eb4103 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2cae9092 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2d2844ec dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2f672851 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2fe06246 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3089aaa2 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x33954be7 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x343e0fa9 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x34dde247 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3a6f5565 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x511d5312 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x52ef4d31 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5576a228 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5def95ff dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6369774f dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x67657dd0 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6ef69874 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6f334f24 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9303f544 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x99ec5759 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9a8f73e5 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xabf8b944 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xda4dd9f4 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe52cc1c0 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe625e8f4 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf6085726 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x50b383c3 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x5df406cf usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x62ad06d1 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x9f856cda dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xcce2a2c7 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xf3e78fde dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xfa6be5e4 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x0e89f7eb af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x10d5e74a dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x3f387504 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x59d0e064 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x7a01b867 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x853e0cd2 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xa417c875 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xb8c6a411 dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xd52866e3 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdbf6dbc6 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xf7edf410 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xfe618b44 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xd7744cc6 af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0x0d33495c au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0xa288ffe7 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0xd98aad8b cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0x1fbed214 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0x2b3b7f44 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x5d208fe7 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x9b1cace1 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0x9aae2086 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x30ac6829 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xe2aa62ff cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x07cac794 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x097ed324 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x69a95b8e dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0xb29f6e26 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x139f1c55 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x1d628738 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x50f4140b dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xaf1ec81d dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xb0d98a10 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xf2d92815 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x5e85639c dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xfda2ae68 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x84cbb437 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x9dcd1b68 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xa781f0f0 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xc9494876 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xce5f8753 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xfafc620c dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x01ab1351 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x561e60c2 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x66af8bde dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x7e15fdcf dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xfc957466 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x2108f05a dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x36c7e542 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xb40b076d dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xca080a6d dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0x86c301a0 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xc05ae418 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x4943487b isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0xe970095c itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0x79aabc2b l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0xdc938197 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x325c0612 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0xb8340f41 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xa6cfbc67 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xf3940d76 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x99c62cf8 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0x56da52ac mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0xff2f7efe nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x857a075f nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0xef66d5bf or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0xc87f8550 or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0x9cfcae89 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0x314f3aa7 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x275c3ab2 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xe3359194 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0x11627fbf si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x8972d246 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0x5ffa9a3a sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xc230e6aa stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0x890c205b stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x715e320e stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0x3719b931 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0xf2dd0fbc stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0x7c8383bb stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x4934e220 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0x47c3f0a5 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x8cba201e tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xf3c13169 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xf97ac409 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0x3aaf66bb tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0xf64ca4be tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0x260a0d2e tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x92de5c76 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x6f501fcf ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x6e71fbbb zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0x5947a6be zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x3bb83bda zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0x995449de ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xd5c8d59b ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xfe0fd451 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x94cd2b27 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xdcee62c6 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xebc488e2 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x0fb9a746 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x9fb98ba5 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0x8d8d2b6f cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cpia 0x8dea41e9 cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x93462973 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xb81190d2 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x02160e0f vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x0e1b703d vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x4345fb1a cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x7a6e9d5c cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x8fb135e8 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xae28e24b cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xc9a62255 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xd233bd98 cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x0d012d8a cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x2361c0ca cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x40db7919 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x4b655328 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xb7d81247 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xb9b81c7e cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xba65d732 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x037ca83d cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x2ce2a4de cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x324a772d cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x3730d6cf cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x43951948 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4ba64c02 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x610ddb96 cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x693b8182 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6a55f1b9 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6e81a277 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x735fac68 cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7fad37b1 cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x82739a21 cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x98523bf0 cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa27f3429 cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb446f625 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb62ec47e cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xba9a8b19 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc949003f cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xd435c588 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xf0f5b3a2 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xf422b3b6 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x3165e13f em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x9a4b1c8a em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x243859e9 gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x30dc8f59 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x7149dc8d gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xacd57cb7 gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xafbfdb70 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xafc13dbf gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xeb7a85ba gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0a13199c ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0c2ce7c9 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x117072fe ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x1af1ab9d ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x282b6813 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x4596963d ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x5650223e ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x78ab6a95 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x83132c07 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xd7208637 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xdd29d762 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x52420236 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x72c06ecc saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x8c1d06a6 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x9ac1b831 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xb6e732e0 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xc3f840f2 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xcb22aaaa saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xcbd81832 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd0da5b65 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe3c2af81 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe6d1c765 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe944f457 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/soc_camera 0x3b623a21 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/soc_camera 0x4924fc4c soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x58d9d04a soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x7d3de75f soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xd1c49b3c soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/tveeprom 0xe84278ef tveeprom_read +EXPORT_SYMBOL drivers/media/video/tveeprom 0xf9e30101 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x00851234 usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x0e76af4f usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x17b04871 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x3feae646 usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x5293ede2 RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x54ded406 RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x795989b2 usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x7e9350e8 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x9778abda RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xdf605c59 RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0xdbcd7512 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x48c81590 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x8a7881aa v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x41940c35 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x78cfca53 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xadcbb778 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xc9bcf82c videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xde08aa76 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xfbf76650 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x08c74587 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x30908ce0 video_device_alloc +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x4fe6e72a video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0x5562a344 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x78c5fc4c video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xddaae954 video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xe8f623a5 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xf40fc115 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xf953cd19 video_register_device +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x04fa0ca1 videocodec_register +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x0f6dd0f2 videocodec_attach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x15011074 videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xae4b72da videocodec_unregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x07b2d724 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2b70b0ce mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x337e7659 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4704da04 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4dfbfca5 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x54d5e5c0 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5ad9bb51 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5c463bbc mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6c97ba1f mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6e0700cb mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x71f42be4 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x77e59c7f mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x801a957e mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x90b04acd mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9948a558 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9ad3fc68 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa27b4cf3 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xae4cbe0f mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb8e63318 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xbad53324 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc1981469 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc4f90074 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd326179a mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd6d42994 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xda9a2230 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe146dcf0 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe79f22f7 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf2830b51 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0bd97cc2 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x10ea9698 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x13cc82e5 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2cab6e7d mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x36a3328d mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x50a4ce5a mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x57a81c58 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x592aff49 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5a8de77d mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x5bf48fb9 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x658ce750 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x67eee9d4 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6fdc97fb mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x73ce6038 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7561dac1 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x83af49a2 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x874ddd12 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9bfac552 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9f491b41 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9fc34cd8 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb714e545 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xbe6af3c5 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xced28f33 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd0924ddd mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd4142893 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf4badf96 mptscsih_io_done +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x10c745a3 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1abcd330 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1bad4dfe i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x24d386d7 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x403eecb5 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x4dc8b883 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5a1515a2 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5d4da2b8 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x8e862c6c i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9f2e1aca i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xaa93efca i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xadecb9cd i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xae20670b i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb24d5e8b i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc99f7c0f i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcdfde549 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe1496b56 i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xeb1d64e5 i2o_iop_find_device +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x04fc57b2 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x3fd76d71 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x62957a2f ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x65e3d226 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x88a45bd0 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x9d06e82e ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xaa4d4575 ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xf627e738 ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x447fe278 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xf32827b0 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0xda21cce1 mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0xf434aa50 mfd_remove_devices +EXPORT_SYMBOL drivers/misc/c2port/core 0xd29563a7 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xf7dc584c c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x734a7c3b ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xe8ff2b3c ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x09e3ed72 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x17d421ca tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x2d3f76f3 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x465d4007 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x4ec3f230 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x5d93008e tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x60954061 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x754cbee7 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x80a3d0ab tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x95928471 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x96d750e7 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xaec5a787 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0xec29ff78 tifm_alloc_device +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x719203f1 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x01b94834 mmc_power_save_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x06498bd1 mmc_detect_change +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x151a5600 mmc_wait_for_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x39feebf9 mmc_add_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3a05ff78 mmc_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3c8149bc mmc_release_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x42180068 mmc_power_restore_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x46c3cef2 mmc_host_lazy_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x47823c07 mmc_free_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x4873a30a mmc_set_data_timeout +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x66911940 mmc_request_done +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x67395947 mmc_card_awake +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x711e6f74 mmc_card_can_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x779a12ae mmc_card_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x7b7a9204 mmc_suspend_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x7dd39aed mmc_try_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x830bddcc mmc_host_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x97e1c0a9 __mmc_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb54cf4d5 mmc_align_data_size +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbbb11bff mmc_wait_for_app_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbd2c2ef6 mmc_remove_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xdc9aab1e mmc_host_enable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xee0108c8 mmc_resume_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf7f2e4bb mmc_register_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xff60ee93 mmc_alloc_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xff620e85 mmc_wait_for_req +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x8ed96e78 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xc4d10854 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xca841b50 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x2b4e2ba5 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xb4bb540c do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xb9b778c3 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xc0998239 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xddd595e6 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x19259dcf lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x5792e04a simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x2deb125b add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xcd421e55 del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x1cc5f431 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x730f41e7 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/nand 0xb3c2a2c2 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xfeb489c4 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xa2371616 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xf222b6ef nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x0ba2eb58 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x375f7cf2 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xae5a6161 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xdeeee371 flexonenand_region +EXPORT_SYMBOL drivers/net/8390 0x17635678 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x24c203aa ei_open +EXPORT_SYMBOL drivers/net/8390 0x3bcaf5aa ei_close +EXPORT_SYMBOL drivers/net/8390 0x7a9d5b04 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0xadcf60fd ei_poll +EXPORT_SYMBOL drivers/net/8390 0xb48a95aa ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xd13336eb __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xec7e9f4c ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0xf3f451cb ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xfdb08984 ei_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x0f55c870 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x51e19a24 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x668c01a0 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6786eead arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x7df0c855 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x8060ede9 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x8bbddfa6 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x983c95a4 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xca15a700 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd546d075 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x885eeca5 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x9b488359 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xd9912faa com20020_found +EXPORT_SYMBOL drivers/net/bnx2 0x2bcb1bc6 bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0xe821a092 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x004cb8eb t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x050252c2 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1c4163b7 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x1ed30007 t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x574aacf6 dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5b98ab31 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x72929e5c cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x820c13e5 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8cde92e2 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa6ee625d cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb1ddfa74 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb8de7681 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xd4772892 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe3bc780b cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xebc057ea t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xedf510c7 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x0f230551 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x2385df0b hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xaf22f0d1 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xc77d4832 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xfe22bd64 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x11e92f5d sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x2410f882 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x40d46647 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x66816f18 sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x77eb5503 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x8e00c318 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb0b6a0d8 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd0291756 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xe32ef97d sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xffdc1380 sirdev_put_instance +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x017eaf3c mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x0465f51c mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x06effc00 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x4c2c305e mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x5a155689 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0xa0df351b generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0xc5479560 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0xf636fe94 mii_link_ok +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x7ac78364 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0xb612834a alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp_generic 0x03619ba0 ppp_register_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x0d03a8cf ppp_input_error +EXPORT_SYMBOL drivers/net/ppp_generic 0x14ece9ba ppp_register_net_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x1ffe271b ppp_output_wakeup +EXPORT_SYMBOL drivers/net/ppp_generic 0x2a4aea0d ppp_unregister_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x5f6d5755 ppp_channel_index +EXPORT_SYMBOL drivers/net/ppp_generic 0x6c62d62d ppp_unregister_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0x7cb5dcfa ppp_unit_number +EXPORT_SYMBOL drivers/net/ppp_generic 0x7ceb0e90 ppp_register_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xcde6e7d7 ppp_input +EXPORT_SYMBOL drivers/net/pppox 0x356e32fa pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0x55db5a8b pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x765866ee register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/slhc 0x2278e94b slhc_remember +EXPORT_SYMBOL drivers/net/slhc 0x26b760c4 slhc_init +EXPORT_SYMBOL drivers/net/slhc 0x3fe0d1c0 slhc_free +EXPORT_SYMBOL drivers/net/slhc 0x62538167 slhc_toss +EXPORT_SYMBOL drivers/net/slhc 0x7e87227e slhc_compress +EXPORT_SYMBOL drivers/net/slhc 0xa78d9eb7 slhc_uncompress +EXPORT_SYMBOL drivers/net/sungem_phy 0x033623a4 mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x02800cf5 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x5af965d8 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x6a59256c tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xdd4c16c9 tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xef884b5d tms380tr_close +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x39c364a0 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x4d6df0b0 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x58d3e714 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x71f39ec1 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x7395f2c7 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x9a540bc0 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa408147c unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xd4d2b5e2 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0xea3e0751 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0xf019cd0f alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xf0c69ea7 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wireless/airo 0x3a707a80 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x931665a2 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x9dd13848 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x3d365bff ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x7b0adaf2 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xa8879946 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/atmel 0x3c104c78 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x93eaa722 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xc4d8241e atmel_open +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x128735bf hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x163a5748 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x30b0529a hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x32795aa9 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x333a2103 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3621bb26 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x392c0124 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4d0a8fa1 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x50d80a1b hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x52a147d3 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5b60bcb5 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5b8c1362 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5fd6a734 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6dfbd8b3 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7f55a924 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x99d92f95 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa9600198 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xad168c4b hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc3b59bca hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc51afc21 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc75acb3b hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xcd1142f7 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xdd56d586 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe00dfb2d hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xebefac2d hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xffc2c089 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x08bde2be libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x1164bf4a libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x3ec89fc7 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x4d5b8b73 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5849e372 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5b118bb1 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5bed1f55 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5f5aa8b0 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x66e6349e free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x79147c3d libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7bd37b0d libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x80a94920 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb02bcd25 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xbea4a978 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc20d912e libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc2a2ef60 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xcd8e1aa9 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xde546108 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe3f0903b libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe7d27a8d libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf8b06292 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0094b21f iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x018948a7 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x029d3791 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x039506ac iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x03a10177 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x047bf6ed iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x055238a2 iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x05faef4f iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0726af32 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x082721af iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x09afc6e3 iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0a5f511e iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0c4cb611 iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0dcb47e2 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e149908 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11054df5 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x12af8f2a iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x16e80fdf iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x18a77e02 iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x208573b8 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x20e845e1 iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x22287e8e iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x22e6809e iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x27e5253a iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x28acc51d iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2b1020cc iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2c20485e iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2d1b974b iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2ee4befa iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2f85f6bb iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x30841296 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x30ef42fe iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x347ca044 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x36253045 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x366d7e80 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x38b52045 iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3994a534 iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x39f73dd5 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3f5115b0 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x408ac330 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42c4489f iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x45618ca9 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x46784449 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4745a537 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x475ea956 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x47df1e79 iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4b977b78 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4c4c7995 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4dd6aef6 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x504bd86a iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x544c19bc iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5619a91a iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57b6527d iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5d23f39c iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62727d56 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62d30bb6 iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x64a6cd0a iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x675eb4c4 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x68ea6fae iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ab2f610 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ac26337 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6c51f6df iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6d48ed17 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6dde42fe iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6fb62504 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x71a123f6 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7277b99a iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x72e43367 iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x764cc83a iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78efc06c iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x79b80841 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7bbab91b iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7bee5813 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7e87210d iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7fda6c8f iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x80b6ca0b iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x81d88adf iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8531e765 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x86e9afe2 iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x89641368 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8a492744 iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8f911a73 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x90b0c193 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93c4f71d iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x96d2dac3 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9920e6a8 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a60af0b iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e86e8e0 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa0032a7c iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa0dddc9c iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa1bdb814 iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa3d6f349 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa5d5943e iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa6af380e iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa70c97ed iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa7477e88 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa94e2dc8 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa9da76d2 iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa0a2c5e iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa955f6e iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaad0846e iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaaf25dea iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xab96dc1d iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xac4dfade iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xad61e7bd iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xae69376b iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb08ff9dc iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb27468b2 iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb29c836c iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb58d2fe4 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbd785d47 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe317c7a iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbea257bb iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc0879e1c iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7cf3f92 iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbd898b7 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcdc07363 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcec60213 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd11763ee iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd1ae2186 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd5141835 iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd7c65110 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xda218d8e iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdaf6e861 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdc9bb69a iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdcb29de0 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xddb8dc9b iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xde3c2687 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe31aeb46 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xebf898b3 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xede39ac5 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xee583624 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeeaf7e6b iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xefb25111 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf26e0dee iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf2feb434 iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf6a11d7f iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8b2d4de iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8b835e5 iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb2c5c56 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x204645c7 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x3aad3030 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6112e8a6 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x726e405b orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x79b3545f alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x8b6dd1ac orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc775112f orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/parport/parport 0x050016f5 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x0a474340 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x0d9578a7 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x12bf94a3 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x16ab3027 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x1c2ddcde parport_write +EXPORT_SYMBOL drivers/parport/parport 0x1f05fb87 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x21441816 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x22d9d07f parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x3eb2623d parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x4dd10982 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x55de552b parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x64e56684 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x670cb758 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x67772ad9 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x6e22b21e parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x87c7211d parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x8e566b3b parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x99413336 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xb33ecb5f parport_claim +EXPORT_SYMBOL drivers/parport/parport 0xbd54fa9c parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0xc31c05b8 parport_read +EXPORT_SYMBOL drivers/parport/parport 0xc67406e4 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0xcddb5b1e parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xd8655497 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xdb921109 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0xe9621a4f parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0xed0cdd5f parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0xee28e082 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xf6cf966a parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport_pc 0xa4a51a14 parport_pc_unregister_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xfe29c754 parport_pc_probe_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x055964f8 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x09a6a29c pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2252381f pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x37427695 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4033748e pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x56565b5f pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5df3f0bf pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x64475d74 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x70cbaa80 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x757a7d69 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x912efe0a pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa575d8db pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb2c7c4a7 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb5ba0fda pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe911eb40 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x138ee68a pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x13fed166 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x153207c3 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2094d192 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x33d2e324 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x340c9bf3 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x368c2a87 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x439bce25 pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4881496d pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4dd3c652 pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5ba34e77 pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5e284a39 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x63dae3f5 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6e3bdf1e pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x83f3b5f9 destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9542a806 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9cbda88e pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9e6615b1 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xad45b626 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xad810232 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xae1b958a pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb88fec6c pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc0d078d8 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc5aef6d2 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc76d627a pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd26dfc02 pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd905150a pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdf76388e pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdf8decfa pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe8e6d1e9 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xeb0226df pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf7bc18ff pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfe6136a5 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x38087034 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pps/pps_core 0x0b8e661e pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x4bbf6b20 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x511ba6dd fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x5d3ac6cc fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8250466d fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9796da86 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xe72286fb fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xf063f0a1 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x01eec3e3 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x067b84a1 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0c5a3e62 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0f90ebbd fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x15a9d22f fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1bdc982d fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x20ffeeba fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x23aaf7e4 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x23e155b6 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x26e78b9f fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x285727e3 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3048c796 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x39620131 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3d5d3b37 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4514c231 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x47212cfa fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4d7f783a fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x522d51f5 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x525cb8b6 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56e58570 fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x57b6f43c fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6039868f fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6a7fb07e fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7a5d99e4 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8b28ff0b fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8b330b98 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8cb39b2e fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8cb47158 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9e5329b8 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa70bc73c fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xacdf89dc fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb04e615a fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbde6ed9c fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbefdd52c fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcfe79558 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd0d78bed fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd709c328 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe5beba88 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeb74e7fe fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf0a52a34 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfce25b1a fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfd3bbe2c fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0xd04b01ab mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x04c0874d osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0cfcdd1e osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x19f99ab6 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2087c59c osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x26fae6cf osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x280947e1 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x349db808 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x34c28c30 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x363ccfbd osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x393cb39f osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3e78be22 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3e9caf6e osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x73c7aca7 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x742ac4a0 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7a4c0c7f osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7e457fb5 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7fe31455 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x88086eae osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x90c857b6 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x946f6e8b osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xab7d89cf osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb08ef721 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb21b63e8 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb5bfa88b osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xba864ca4 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbf430093 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc08d5c9e osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xcd8391a8 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd4ab8020 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf3feacf9 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf4ab3cd2 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xff81f65d osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0xd5e41d10 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xdfda881b osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0xeb602b62 osduld_register_test +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x26f92789 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x321645dc qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x9bde7513 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xae0ea9ee qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc6647f1 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe551014c qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x0912a5f4 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x5287526b raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x5bde8cd3 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0730d885 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1db300c1 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x21f00457 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x41c3b4d6 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x61577bdf fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x64ce2a14 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7e53e728 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x8a23cddd fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x8c93dbb6 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa4b952db fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa794caf4 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xcfabca29 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0026b431 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x051ccb87 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0c7854e8 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1857da1f sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x211f0f14 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2803c844 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x37c8c277 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5487a0b1 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x650628aa sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x66b97ac9 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6f248ea6 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7e3c7c13 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x844586e5 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8912fdac sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8f6a5720 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8fc45737 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa0da295a sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa2646297 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc0bee261 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc4102ea0 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd4da27cf sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdc3e6d33 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdf350063 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe04a489b sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe69099d1 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf60877c1 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x113e0e83 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x2499b75a spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x86ac32cd spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x8dc722e3 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xa4ac5bf9 spi_attach_transport +EXPORT_SYMBOL drivers/serial/8250 0x13df5952 serial8250_register_port +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/serial_core 0x34a4d10f uart_add_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0x3e42656f uart_remove_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0x44338574 uart_write_wakeup +EXPORT_SYMBOL drivers/serial/serial_core 0x525dacf6 uart_match_port +EXPORT_SYMBOL drivers/serial/serial_core 0x5a15b0f8 uart_get_baud_rate +EXPORT_SYMBOL drivers/serial/serial_core 0x9e389686 uart_unregister_driver +EXPORT_SYMBOL drivers/serial/serial_core 0xb61ca720 uart_get_divisor +EXPORT_SYMBOL drivers/serial/serial_core 0xba6dc627 uart_update_timeout +EXPORT_SYMBOL drivers/serial/serial_core 0xd6510ee9 uart_register_driver +EXPORT_SYMBOL drivers/serial/serial_core 0xdbe2cbbf uart_resume_port +EXPORT_SYMBOL drivers/serial/serial_core 0xeb175beb uart_suspend_port +EXPORT_SYMBOL drivers/ssb/ssb 0x033d2e57 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x04057524 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x1787d8a9 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x1d522918 ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x32f8917b ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x34568768 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x3e3e7ab3 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x4962136b ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x4cd75ac0 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x4d9922e5 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x55636ee2 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x57ea9a09 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x59c2ac2c ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x5c7e453c ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x83dfedd3 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x8e4e69d6 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x8f5edfc6 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x9864fd9a ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xb0244d82 ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc38875ea ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xcbd34561 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xdb782a16 ssb_set_devtypedata +EXPORT_SYMBOL drivers/telephony/ixj 0x55489bdf ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0xb52539ba phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xf642c09f phone_register_device +EXPORT_SYMBOL drivers/usb/gadget/goku_udc 0x1b15f663 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/gadget/goku_udc 0xc03a2fd5 usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x95279218 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x1c4f3917 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xca39943a usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x6b200bf4 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0xe697c087 lcd_device_unregister +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x3da2ceea cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x6c521e0e cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x87c684dc cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/cyber2000fb 0xd14903e7 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/display/display 0x7e05095d display_device_unregister +EXPORT_SYMBOL drivers/video/display/display 0xa29125d2 display_device_register +EXPORT_SYMBOL drivers/video/output 0x53820bb4 video_output_register +EXPORT_SYMBOL drivers/video/output 0x5c86baa1 video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x1bb07d06 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x2c8cee14 svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x4a384124 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x6f363836 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xab224092 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xe03b65dc svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/svgalib 0xfebcba8a svga_settile +EXPORT_SYMBOL drivers/video/syscopyarea 0x3740c877 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xbad904a5 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x163c3e38 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x1fc420ff w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x706cc880 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x046582d8 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x17bfba48 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x207c7c93 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x9f2a178f w1_ds2760_write +EXPORT_SYMBOL drivers/w1/wire 0x545b8f00 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xa8f9dfe1 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0xd3ed7867 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xdaf0440d w1_unregister_family +EXPORT_SYMBOL fs/configfs/configfs 0x4e96402d config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x4f3af60b config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0x507e0867 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0x5c3d1cf9 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x8e9cb2bc config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x9217bda4 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x92ed9883 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0xa92c0c96 configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xbfbc3656 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xc0a6c663 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xc83d3d50 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xfda28d73 config_group_find_item +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x17a533c6 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x1814a192 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x21a75f05 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x234f7a90 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x2eb8c2d6 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x3f24f887 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x47fe4a04 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x4b22ce51 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x4b4023fc fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x4c93c1aa fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0x54601029 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x5fe58c20 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x6cf7f573 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x7caf32bc fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x8b859a65 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x970605aa __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x9e9897ff __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x9eaa7506 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0xa8477fb9 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0xac43ba92 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xbc704877 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xc38cfe4c fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xe1f6e465 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xe2780463 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0xec5d224e fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0xf3838156 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0xfc0676b5 __fscache_alloc_page +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x2622f562 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x275b401a qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x419a369a qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xb6f83da0 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xc68aa927 qtree_entry_unused +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc-t10dif 0xb6896671 crc_t10dif +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x73047cc0 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xfb0c0da5 make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x007761a3 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x0f254f26 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x115ee395 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x1ca6e523 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x1d97c3c8 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x371d4695 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x411cad5e p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x43e08e59 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x46702967 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x497e99bd v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x57b1d08d p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x695ae75c p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x6b754e6f p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x6c07f83b p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x762304e3 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x9453f2bb p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x9bb6a1d9 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9e6c18bf p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0xa4e9aba1 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0xa553a2be p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0xa9980434 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xbca17234 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xceaf23d7 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xd331fc1d p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0xda225d16 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0xdca1c3b5 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xed726162 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xf92fe2ad p9_idpool_get +EXPORT_SYMBOL net/appletalk/appletalk 0x2dc37b01 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0x33a9311b aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x451caaaa atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0xa4de5a8b alloc_ltalkdev +EXPORT_SYMBOL net/atm/atm 0x0ef48d79 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x5a0a5b5e atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x8b7bc758 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x9f86bc6e atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0xa4363445 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xb59d14ff vcc_release_async +EXPORT_SYMBOL net/atm/atm 0xccea451e atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xcdacf067 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xe9e8631f vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0xee240a9f atm_charge +EXPORT_SYMBOL net/atm/atm 0xf3090304 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xf4139d5f deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3a8c180b ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x693c1ea3 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x6d9dd90a ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x6e9737b2 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x872045d7 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x95a81fb6 ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x9923527f ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0xac10059d ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xe966c747 ax25_linkfail_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x033dc9e2 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x086f42f4 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1c1eba9b hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1d40bdb3 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1df65490 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1f6020cd bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x21900087 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x24242d76 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2a196c74 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2e91a907 hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3416fac2 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3e7528cc bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4f86f83d hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x51d36530 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0x624f42f7 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x62ae5822 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6fd5bbfc hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7b8d4a1f bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8523ded2 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9fa5ed11 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xade952e4 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xbfac2a2f hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc162e082 hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2206a16 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc8d8bd07 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd4bd2ae9 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xefb45100 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf04598d5 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf20aa867 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf718089b hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfa749080 hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0xe88328a8 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x1c1df3d8 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x786de8d9 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xe007aef1 ebt_do_table +EXPORT_SYMBOL net/can/can 0x0d2185d2 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x19139023 can_proto_register +EXPORT_SYMBOL net/can/can 0x2e494c4d can_rx_register +EXPORT_SYMBOL net/can/can 0xb3cd3318 can_send +EXPORT_SYMBOL net/can/can 0xdae67d4d can_proto_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x34547be6 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x7fa4e16e ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x85808714 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x8fc9150d ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xbdd6a7c6 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xd5220909 ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xfab51368 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/wpan-class 0x24dea9ea wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0x60e479ed wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0x9a3698d1 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0xab4c3bea wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0xd4fd99a5 wpan_phy_find +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x5ee731a6 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xe5902a4f arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xff526498 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x377fbabb ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x4efb66ec ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x55530720 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x07e7004a nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x0ec31ad4 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x3abe301f nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x43cbe5af nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x63e8abd3 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x6f8aec90 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xdbebe627 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/tunnel4 0x2288bc1d xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0x9c7c2047 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/ipv6 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL net/ipv6/ipv6 0x0efedeef ip6_route_output +EXPORT_SYMBOL net/ipv6/ipv6 0x1f76e9cb ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x238825d1 ndisc_send_skb +EXPORT_SYMBOL net/ipv6/ipv6 0x2b65c9e5 inet6_add_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0x3ad15d8a ip6_frag_init +EXPORT_SYMBOL net/ipv6/ipv6 0x4292b98f ndisc_mc_map +EXPORT_SYMBOL net/ipv6/ipv6 0x464126d2 ipv6_push_nfrag_opts +EXPORT_SYMBOL net/ipv6/ipv6 0x469dc365 inet6_bind +EXPORT_SYMBOL net/ipv6/ipv6 0x48fc3fcb xfrm6_rcv_spi +EXPORT_SYMBOL net/ipv6/ipv6 0x4fa71970 xfrm6_prepare_output +EXPORT_SYMBOL net/ipv6/ipv6 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0x5fc68c15 inet6_register_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x69e74ea1 inet6_unregister_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x6b013825 inet6_del_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x71fd168a inet6_ioctl +EXPORT_SYMBOL net/ipv6/ipv6 0x7591379f ipv6_chk_prefix +EXPORT_SYMBOL net/ipv6/ipv6 0x767e915d ip6_route_me_harder +EXPORT_SYMBOL net/ipv6/ipv6 0x79373c1d ip6_frag_match +EXPORT_SYMBOL net/ipv6/ipv6 0x7b120b1c xfrm6_find_1stfragopt +EXPORT_SYMBOL net/ipv6/ipv6 0x865acdec xfrm6_rcv +EXPORT_SYMBOL net/ipv6/ipv6 0x8c520452 ip6_xmit +EXPORT_SYMBOL net/ipv6/ipv6 0x8cc7f57a rt6_lookup +EXPORT_SYMBOL net/ipv6/ipv6 0x8fb30d8d xfrm6_input_addr +EXPORT_SYMBOL net/ipv6/ipv6 0xa844a13d ndisc_build_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xc13b5d89 ipv6_chk_addr +EXPORT_SYMBOL net/ipv6/ipv6 0xc1ab1819 nf_ip6_checksum +EXPORT_SYMBOL net/ipv6/ipv6 0xc424b320 in6_dev_finish_destroy +EXPORT_SYMBOL net/ipv6/ipv6 0xc954cc22 inet6_release +EXPORT_SYMBOL net/ipv6/ipv6 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0xceb82d74 inet6_getname +EXPORT_SYMBOL net/ipv6/ipv6 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL net/ipv6/ipv6 0xe9a465fa ipv6_dev_get_saddr +EXPORT_SYMBOL net/ipv6/ipv6 0xebc66223 icmpv6_send +EXPORT_SYMBOL net/ipv6/ipv6 0xf5ee8cd7 ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x090d4ff8 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x2e10ab92 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x8db5c1d8 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa79ac358 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/tunnel6 0xc0853727 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0xcb71efc7 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x02e64caf ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x24d998d7 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x3147825b ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x776612d2 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7f927788 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8da53b08 ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xe886a2ff ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xfbea8a0b ircomm_control_request +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x178d46ce alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x18edd399 irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x216a3c23 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x23f58ec4 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x29564591 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x29783db6 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0x2ab742b5 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0x33e4aa81 irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x3ec877e3 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x5089dc1e irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x543a6db5 hashbin_new +EXPORT_SYMBOL net/irda/irda 0x550a5e27 irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x5861b834 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x5d68acac irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x5e76abed iriap_close +EXPORT_SYMBOL net/irda/irda 0x5f261aef hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0x682155e2 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x77abd410 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7f933922 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x89136cd1 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x94a8156e hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x980fe568 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0xa19805b8 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xa26f32f8 irias_find_object +EXPORT_SYMBOL net/irda/irda 0xb6319fe6 irlap_close +EXPORT_SYMBOL net/irda/irda 0xb7884205 hashbin_remove +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xbf7cfffe irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0xc10a5281 irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xc2e84f70 irlap_open +EXPORT_SYMBOL net/irda/irda 0xc96cf122 proc_irda +EXPORT_SYMBOL net/irda/irda 0xcbb8c027 irttp_dup +EXPORT_SYMBOL net/irda/irda 0xd080e872 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0xd627dc1a hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xd7b3abac async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe0acf0d4 hashbin_find +EXPORT_SYMBOL net/irda/irda 0xe1a50c6f irias_new_object +EXPORT_SYMBOL net/irda/irda 0xeb409cb1 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf39b7fe0 irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xf3adb358 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0xf590074e irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0xf6bc2753 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0xf946ed00 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xfdd8c850 iriap_open +EXPORT_SYMBOL net/lapb/lapb 0x5ec85852 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x6a591ee8 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x6af747cf lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x70633a6d lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x8afee842 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x91c83586 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0xaa779f9d lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0xc61352d7 lapb_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x0514fbe1 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x0b826e73 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x12c941ed ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x14fc3e7d ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x1b62b0be ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x2c027519 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x36ab5971 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x3c0227dc ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x3d5b2364 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x401d248a ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x4710968f ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x52ae928f ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x5577eb83 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x58790589 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x5983884c ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x5bf10d6c ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x64d9cbba wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x6982abf2 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x6ac0494c ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x6dd7b1b9 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x7688aa8e __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x7e032596 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x7ed475c6 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x963c44a3 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x9735e427 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x9e8dd5cb ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xa6e0beb7 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xadcefd88 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0xb46bdb84 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xb55adff6 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xb57c3c31 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xb922ef87 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xba2df7d9 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xbc8341f5 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xc28eaf7f ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xf546d4e7 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0xf721e1b9 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xf72fb227 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xfef8c3e6 ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xff259126 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x0f38f734 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x10f72cfe ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x17ca143b ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x3747680b ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x4cf3cae1 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x601383db ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x8805378b unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x902a7967 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xbb74baa9 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd4dea339 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xf538aa45 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x1b2a2000 __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xe1726cfe __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x6cc80cc7 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x226441fd xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x5b0dc21a xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x73b97de6 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x806de0f2 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x93e1ea1d xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x9af2054a xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xdb949861 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xe3daa5ec xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xeffc9a74 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xfeb3f395 xt_unregister_target +EXPORT_SYMBOL net/phonet/phonet 0x3f255925 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0xab6c7f82 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xaefcb11d pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xc03d752c phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0xc9d44aa0 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xd8fdb745 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xea503625 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0xf4c57ba0 phonet_proto_register +EXPORT_SYMBOL net/rfkill/rfkill 0x0873d9b8 rfkill_set_hw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x3b24dd6b rfkill_get_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x466387b6 rfkill_set_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x549aa05c rfkill_set_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x65a28fcd rfkill_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0x6c921a64 rfkill_pause_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x9a79b47a rfkill_destroy +EXPORT_SYMBOL net/rfkill/rfkill 0xa0f1345d rfkill_resume_polling +EXPORT_SYMBOL net/rfkill/rfkill 0xb23b3143 rfkill_register +EXPORT_SYMBOL net/rfkill/rfkill 0xc8d2428e rfkill_init_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0xe2072069 rfkill_blocked +EXPORT_SYMBOL net/rfkill/rfkill 0xede7c595 rfkill_set_states +EXPORT_SYMBOL net/rfkill/rfkill 0xff35582f rfkill_alloc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x136044b3 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x19fd6d07 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x20e8e4f0 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x245fbbfc rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2ce3d7ac rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3e67a28a rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x463b3bd2 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x55603cc1 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x68dc320c rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7661b044 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc086e96a rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xcfdf516c rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe68bb1c4 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf737247e rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xfd0a6c87 rxrpc_get_null_key +EXPORT_SYMBOL net/sunrpc/sunrpc 0x65558abc svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x0277be0a tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x27d8bb58 tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x325d35dc tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x47cccacf tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4ba3cfc8 tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x5cd53199 tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x5f114e44 tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x64357d3c tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x7ea73e3f tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x8001e3d7 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xad99c45f tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb01ffc2c tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xb27ac4a7 tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xbb2b2504 tipc_send +EXPORT_SYMBOL net/tipc/tipc 0xc26804dc tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0xcdc6e909 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xd706afab tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xd9807e68 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe0349699 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0xca6ebc18 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x015f3401 wimax_rfkill +EXPORT_SYMBOL net/wimax/wimax 0x8a3dae8a wimax_reset +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x08c54442 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x10a3368a cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x10dab25d cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x1108e183 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x2087bae3 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x38d81ed1 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x3f4ea0e9 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x42c17281 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x4843620c wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x487e1f86 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x5380a562 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x56f38263 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6dde2a52 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x6de027da cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x742ef83c cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x79c83d8e cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x8ce7e32c cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x8e5e1364 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x90eb5e02 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x93aea5e1 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa98af195 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xaf289e93 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xb9d7e95f cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0xbe2d26a1 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc551ee2f cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xc61f9059 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0xc66375bc cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xc670bbd6 cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xc931a03d ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0xc95714f6 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0xc9917f41 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xcc6841d4 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xd2a3431b cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0xd8f4a324 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xe1a232c9 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xe6ff2d82 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xed5b2c5d cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xf8f5dedf freq_reg_info +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x37b17461 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x3bf12882 lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0x44985664 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x50ab8057 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x8118e807 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x8f6cee8b lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0xb82f46ba lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xeae75a55 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL sound/ac97_bus 0xea6d8821 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x8d526fa1 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x0a546a90 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a8780dd snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x72254d07 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0xa0c9d4c9 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x70251306 snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xe52f7bdc snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x326911b6 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x7cb19049 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb389aad4 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb401ffd7 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb5d25358 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xbf834054 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe03c0c74 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe8755241 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x4396c3eb snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x0de60bfb snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0x17b6dfa6 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x18800275 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1babcb75 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x1db3d99f snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x280309dc snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x29bda9d2 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x29e29740 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x30ffdf03 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x38f5a048 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3c3881fc snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x43264aad snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x45066b5b snd_card_free +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4a9f7fef snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x5c37cc50 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x63daa7a9 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x6a7d9eab snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x6c2aa752 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x8020b2a8 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x88528201 snd_cards +EXPORT_SYMBOL sound/core/snd 0x8890ea97 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x88dd1f70 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x94513c2c snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x978ca199 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x9b29889c snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa2289e4e snd_card_create +EXPORT_SYMBOL sound/core/snd 0xa9573d88 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0xaddb5297 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb484cb62 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xb65d7748 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xbe4e06c7 snd_device_new +EXPORT_SYMBOL sound/core/snd 0xc8ed49ba snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xca707f25 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xd020458f snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xd1157735 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0xd1a6abf9 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0xd62ebbe7 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xdf196f78 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0xe08e7e54 snd_card_register +EXPORT_SYMBOL sound/core/snd 0xe096652d snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xe1f1e65b snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe427b841 snd_device_free +EXPORT_SYMBOL sound/core/snd 0xee6a1f5d snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xfbc4e63d snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xfde0b6b2 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0xfe650412 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd-hwdep 0x6c0192f7 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x49b53cac snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0x6271275d snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xa0964593 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xcb5de3ff snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xef168b8c snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x0313c7ac snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x09b18f90 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x0e27b556 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x175a23cb snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x24392bc3 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3eff6434 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x406dc4d8 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x419a53f5 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x4294ee19 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x42fb2f0a snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x54f86aa4 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x58b4b4f3 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x5e9f02b1 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x6348c736 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x69740d68 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x71923189 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x79246c3c snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x814dc9d0 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x84966960 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x86e8e783 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x993b0096 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x9d26145e snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xaa31aeb2 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xac434054 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xb2817d35 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xb3000d8b snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xc87e266d snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0xcc0376b1 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xccfde388 snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd5430884 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xdbe7c224 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0xe386a408 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xe4c6dd0f snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xef9a044e snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf4531e68 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0xf64c0bf5 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0xf74be97f snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0xf75cff21 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-rawmidi 0x08564809 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x237ab738 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x48e5c36e snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x50dc0257 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x572a4f3d snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5902ea65 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5dd33d18 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5ee32078 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x759ca91f snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x81d24595 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x84f65c56 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8d01f699 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa201dfee snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa58a7913 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbd741abf snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xee2dd995 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf6aae2f5 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-timer 0x1763a50f snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x2d70ac8c snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x344537b0 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x3a7f743c snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x58cf1d24 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x5c4eb903 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x6cec7c53 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x6d4244c1 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0xc6ccd9d3 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xce5a7f85 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0xd87f5817 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xfd0abb19 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0xff3ed8c4 snd_timer_open +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x8a240afe snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x0f43fe17 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x1b3e39fa snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x2df7d4e2 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x32c3214a snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x75338755 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb2f0c2aa snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xbf60fc7d snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xce6e4a0b snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd87bebec snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x489f99de snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x668be131 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x720a9b2e snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x789c9bdb snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xc008f47b snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xe40e2668 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xe9260b39 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xef1c1a2b snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xfbbf93f4 snd_vx_dsp_boot +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x1ac00088 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x4ecd1ff6 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x9f516363 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xb6f5fc2c snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xdc0e4ebd snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xe88f50bf snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1ce9d88d snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x23c01d64 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x6db69524 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x990db77c snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xf98ddc19 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xfe2829cb snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x59ca63ee snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xae386240 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xca9175bb snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xdd4a3ed2 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x6e16350f snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x8d838f31 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x39345de6 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xe14eedd2 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00c12c71 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x21201c83 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x6ee6e851 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x744309be snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x8ea23c79 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-i2c 0x0c092ea1 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x3c845e9b snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x98348f47 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xab7fdc92 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xbd09e636 snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xdef71194 snd_i2c_device_free +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x2055de57 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x20bd252c snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x333cd79c snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x4c90663e snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x4ed39900 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x6133e225 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x7a293abd snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x986b6333 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xa2daa494 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xbe5fe8ee snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x49004c86 snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x6d46a7a7 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xe379a540 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/oss/ad1848 0x2b5d9dae ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xa3e16c6b probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xb92ac513 attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/ad1848 0xd0117c0b ad1848_init +EXPORT_SYMBOL sound/oss/mpu401 0x579a2985 attach_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x61641749 probe_mpu401 +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0x92d55f18 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sb_lib 0xdd0125d4 sb_dsp_init +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0c17f9af midi_devs +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x3ecf4f8b sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x87a7fcf7 mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x8986f6fe audio_devs +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xbfa3cc72 sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0xc0e0c923 sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfa8be3b7 synth_devs +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x6a06f8b6 probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x02fc2cb5 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x3338a75c snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4e599301 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x531111fd snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5704af4a snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x59989b19 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x5b730520 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x629f4e5e snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6a041b6e snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6c4141b5 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x86ed25fa snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x94c54c0f snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9a11630c snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb62f8e1b snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd9a3e360 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe1c9b0e2 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe8e4cc26 snd_ac97_update +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x0e6749ce snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x14a37dd4 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x47f711f3 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x70304b3a snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x92f7f698 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9eca307b snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd14ef3f0 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xed6b433e snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xf3849ea5 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0xbf9deb46 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x5255179f snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x938f0122 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xd625dcf0 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x5980b196 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x5adba24e snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x939b7940 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xdebf3f4f snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xf7552dcc snd_trident_alloc_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0x6a498ec9 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x209c53c8 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x5ab8a35e sound_class +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x95222f45 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xd66060e0 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xe29f7ff6 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xef54688f register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x0069c62c snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x073abb0b snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x21a278ff snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xc1e59d97 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xe2d03664 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xe97e88f1 snd_emux_register +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0d355ca5 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x26617b20 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x28ce6bc8 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x4cad8ff7 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x8af54de7 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xa817a908 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb371ea53 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb453f188 snd_util_memhdr_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x4d132e94 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xee9c4956 lirc_get_pdata +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xf411fe60 lirc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0007e450 of_release_dev +EXPORT_SYMBOL vmlinux 0x00237247 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x006acc30 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x00a5c9b3 cdev_index +EXPORT_SYMBOL vmlinux 0x00bd684a bio_clone +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00cf8c21 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00d30d19 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x00f9b1c7 dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x011511ca journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x0119571e lookup_hash +EXPORT_SYMBOL vmlinux 0x0147a316 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x01687526 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x0169ff0e tcp_child_process +EXPORT_SYMBOL vmlinux 0x0172e7f5 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x01857a7b get_super +EXPORT_SYMBOL vmlinux 0x018ba897 journal_create +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x019e9ea4 of_iomap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01bb68c9 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x01f0d850 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x021daace cdev_add +EXPORT_SYMBOL vmlinux 0x02384e8d ioremap_flags +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0274538f i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x02789bd2 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x027cb3f1 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x028d62f7 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x02983d79 deny_write_access +EXPORT_SYMBOL vmlinux 0x029f3573 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02d5704a input_unregister_handler +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x02f06631 tcf_hash_check +EXPORT_SYMBOL vmlinux 0x03073ba6 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x031aa327 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x0320bef0 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x0398fe7b __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x03ae69a6 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03e4a453 llc_sap_close +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0423fd91 kill_pid +EXPORT_SYMBOL vmlinux 0x042d2ed7 follow_down +EXPORT_SYMBOL vmlinux 0x043d0d21 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x049e51c0 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x04bffd42 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x051385df swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x0523e6a4 of_get_property +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x05798ad7 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x058508d8 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x0596eef4 journal_wipe +EXPORT_SYMBOL vmlinux 0x05a514a1 _insl_ns +EXPORT_SYMBOL vmlinux 0x05b4e835 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x05c75633 iget_locked +EXPORT_SYMBOL vmlinux 0x06112cb6 devm_ioremap +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x0617c1ce bdi_init +EXPORT_SYMBOL vmlinux 0x062344f2 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x0630184b slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0x06312d5a check_disk_change +EXPORT_SYMBOL vmlinux 0x063ef39a pci_disable_msix +EXPORT_SYMBOL vmlinux 0x0675432f phy_stop +EXPORT_SYMBOL vmlinux 0x0675c7eb atomic64_cmpxchg +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x06b29f9f netlink_dump_start +EXPORT_SYMBOL vmlinux 0x06b54d0d pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x06ba9047 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x06bb50c1 input_event +EXPORT_SYMBOL vmlinux 0x06c4cd09 simple_write_begin +EXPORT_SYMBOL vmlinux 0x06d34d8e register_exec_domain +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x070b5360 simple_readpage +EXPORT_SYMBOL vmlinux 0x07121d6d da903x_query_status +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x0734c226 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x07527e0d __kfifo_get +EXPORT_SYMBOL vmlinux 0x075cf07d pci_enable_wake +EXPORT_SYMBOL vmlinux 0x07736e15 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07ad20f5 pipe_to_file +EXPORT_SYMBOL vmlinux 0x07c365bf __brelse +EXPORT_SYMBOL vmlinux 0x07c415a1 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x085d92f9 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x086d3bec journal_start_commit +EXPORT_SYMBOL vmlinux 0x089e5b6c __init_rwsem +EXPORT_SYMBOL vmlinux 0x08a64e7c kfifo_free +EXPORT_SYMBOL vmlinux 0x08b65ce6 of_create_pci_dev +EXPORT_SYMBOL vmlinux 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL vmlinux 0x0923d7b7 phy_device_create +EXPORT_SYMBOL vmlinux 0x092590c1 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x09321483 audit_log_start +EXPORT_SYMBOL vmlinux 0x0934fce0 tcp_connect +EXPORT_SYMBOL vmlinux 0x09356572 __bforget +EXPORT_SYMBOL vmlinux 0x0941bb63 udp_prot +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x09498cd5 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x097c4ca1 matroxfb_DAC_in +EXPORT_SYMBOL vmlinux 0x097e7db1 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x0985da55 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09b14dc8 DAC1064_global_restore +EXPORT_SYMBOL vmlinux 0x09b399d2 matrox_G100 +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09cbe8de inet_put_port +EXPORT_SYMBOL vmlinux 0x09cc7fba simple_transaction_read +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09f8c4e4 prepare_binprm +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a33151d sock_kmalloc +EXPORT_SYMBOL vmlinux 0x0a4747ff allocate_resource +EXPORT_SYMBOL vmlinux 0x0a54f3c2 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x0a9b85f7 tty_mutex +EXPORT_SYMBOL vmlinux 0x0aca6623 __bread +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0b158251 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b5e8206 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b96cac1 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x0b9bd556 fasync_helper +EXPORT_SYMBOL vmlinux 0x0b9f9a8a mdiobus_read +EXPORT_SYMBOL vmlinux 0x0ba95561 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0x0bdffe12 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x0befbf8e vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x0bf11fba i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x0c12e626 __debugger_bpt +EXPORT_SYMBOL vmlinux 0x0c3066f3 genphy_update_link +EXPORT_SYMBOL vmlinux 0x0c3ce7e2 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x0c49e755 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x0c604302 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x0c604ee6 flush_tlb_page +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c6e9bde tty_set_operations +EXPORT_SYMBOL vmlinux 0x0c6f7db4 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x0c7fab18 add_timer +EXPORT_SYMBOL vmlinux 0x0c8c3f04 vfs_quota_on +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c9b6089 nvram_get_size +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cbb93e5 find_or_create_page +EXPORT_SYMBOL vmlinux 0x0cde51d3 pci_read_irq_line +EXPORT_SYMBOL vmlinux 0x0ce18ec0 unregister_console +EXPORT_SYMBOL vmlinux 0x0ce7e05b release_sock +EXPORT_SYMBOL vmlinux 0x0d09defc truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x0d1a4e87 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d657708 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x0d65bd61 kernel_accept +EXPORT_SYMBOL vmlinux 0x0d7299b8 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x0d86e54a of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dbf38b8 mol_trampoline +EXPORT_SYMBOL vmlinux 0x0df15005 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x0e1a7e19 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x0e285059 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x0e2a7d1d ide_do_reset +EXPORT_SYMBOL vmlinux 0x0e2d16c3 proc_dointvec +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e6de4fb blkdev_get +EXPORT_SYMBOL vmlinux 0x0e9e6905 redraw_screen +EXPORT_SYMBOL vmlinux 0x0e9fbe21 input_close_device +EXPORT_SYMBOL vmlinux 0x0eaec5e0 rtnl_notify +EXPORT_SYMBOL vmlinux 0x0ed28290 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x0eef3967 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x0ef20db1 kernstart_addr +EXPORT_SYMBOL vmlinux 0x0ef22ade remove_wait_queue +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL vmlinux 0x0f2c2f26 sock_rfree +EXPORT_SYMBOL vmlinux 0x0f30850c call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x0f3d9ef7 __kfifo_put +EXPORT_SYMBOL vmlinux 0x0f4fc548 open_exec +EXPORT_SYMBOL vmlinux 0x0f57d5ae _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x0f598ff8 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x0f5fc193 netlink_set_err +EXPORT_SYMBOL vmlinux 0x0f6154e3 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x0f63b448 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x0f74864a pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x0f7ed469 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x0f7fc2ab filp_close +EXPORT_SYMBOL vmlinux 0x0f8a0482 file_remove_suid +EXPORT_SYMBOL vmlinux 0x0f9d7c3e seq_open +EXPORT_SYMBOL vmlinux 0x0fc3b708 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x0fcd4f6f dev_addr_add +EXPORT_SYMBOL vmlinux 0x0ffcfeac skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x1002bed1 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0x103c4cad of_device_unregister +EXPORT_SYMBOL vmlinux 0x1043fc68 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x10458254 pci_dev_get +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x10701c01 km_query +EXPORT_SYMBOL vmlinux 0x107d05c6 free_buffer_head +EXPORT_SYMBOL vmlinux 0x107d74c0 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x1090e32a i2c_clients_command +EXPORT_SYMBOL vmlinux 0x10986cd0 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x10add937 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x110d9155 pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x11128a09 ip_fragment +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x112ee9f3 phy_print_status +EXPORT_SYMBOL vmlinux 0x113d3436 idr_pre_get +EXPORT_SYMBOL vmlinux 0x11448e11 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x11663cec adb_register +EXPORT_SYMBOL vmlinux 0x11700214 simple_fsync +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x11809c4c audit_log_end +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a41041 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x11b82412 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x11ba42c9 register_quota_format +EXPORT_SYMBOL vmlinux 0x11f8277d per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0x12005f92 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x120201d4 block_fsync +EXPORT_SYMBOL vmlinux 0x122b9d83 ida_pre_get +EXPORT_SYMBOL vmlinux 0x123cb832 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x12543650 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0x12636cef swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x126a860c dm_table_get +EXPORT_SYMBOL vmlinux 0x12919c82 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x12bf3f3f tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0x12d4f352 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12dc7605 matrox_mystique +EXPORT_SYMBOL vmlinux 0x12e5ef0c rtas_set_power_level +EXPORT_SYMBOL vmlinux 0x12fd3cd7 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x130d376b generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x133be5ff slow_work_register_user +EXPORT_SYMBOL vmlinux 0x13d8ba57 alloc_disk +EXPORT_SYMBOL vmlinux 0x13dd6fc2 input_set_keycode +EXPORT_SYMBOL vmlinux 0x1407c6e7 kmap_prot +EXPORT_SYMBOL vmlinux 0x14414e72 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x14779cb9 sock_i_ino +EXPORT_SYMBOL vmlinux 0x1494c2e8 __page_symlink +EXPORT_SYMBOL vmlinux 0x149fa1e9 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x14b0a8d9 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x14c06eb0 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x14fe42ea tcf_action_exec +EXPORT_SYMBOL vmlinux 0x15039403 brioctl_set +EXPORT_SYMBOL vmlinux 0x150a8201 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x150be6fc __put_cred +EXPORT_SYMBOL vmlinux 0x1522e034 thaw_process +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x15c5c97f scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x15ed95d3 _read_lock +EXPORT_SYMBOL vmlinux 0x160bd45c rtas_token +EXPORT_SYMBOL vmlinux 0x16136318 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x16250200 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x1629a7be ide_dma_off_quietly +EXPORT_SYMBOL vmlinux 0x163060c9 search_binary_handler +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x16c9a192 kill_anon_super +EXPORT_SYMBOL vmlinux 0x16d0b1e5 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x16db8e79 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x16f0fa6d create_proc_entry +EXPORT_SYMBOL vmlinux 0x16fdcb55 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x177a6df3 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x179cca37 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x179ec4b8 dcache_lock +EXPORT_SYMBOL vmlinux 0x17aa156a __ucmpdi2 +EXPORT_SYMBOL vmlinux 0x17de6a7f skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x1814937c vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x185eb39f sock_release +EXPORT_SYMBOL vmlinux 0x18e6bb74 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x19182e02 clocksource_register +EXPORT_SYMBOL vmlinux 0x1939c7e7 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x195c9808 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x19610e1f cpu_all_bits +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x197dc79c xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x198d2521 handle_sysrq +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19aa1dc4 flush_icache_user_range +EXPORT_SYMBOL vmlinux 0x19cbb4b5 down_timeout +EXPORT_SYMBOL vmlinux 0x1a3d431e __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x1a50f3d9 sock_wfree +EXPORT_SYMBOL vmlinux 0x1a6a07de seq_puts +EXPORT_SYMBOL vmlinux 0x1a776245 filp_open +EXPORT_SYMBOL vmlinux 0x1ab95e42 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x1acb1346 default_llseek +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0d1322 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x1b1ed785 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x1b305854 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x1b5735fe netif_device_detach +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b872891 kthread_bind +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bb6cd78 flush_tlb_mm +EXPORT_SYMBOL vmlinux 0x1bbff3d3 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x1bc4ff03 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x1bcc4804 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x1bd9cc77 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x1c0ef94a per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c3b1682 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x1c53aefc vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x1c5b2c15 pmu_wait_complete +EXPORT_SYMBOL vmlinux 0x1c5eba96 pci_find_bus +EXPORT_SYMBOL vmlinux 0x1c70c245 bio_kmalloc +EXPORT_SYMBOL vmlinux 0x1c80de9c ip_send_check +EXPORT_SYMBOL vmlinux 0x1c892584 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x1c9410d2 netdev_features_change +EXPORT_SYMBOL vmlinux 0x1caa25be cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x1cb5bc98 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ce5d549 block_write_full_page +EXPORT_SYMBOL vmlinux 0x1cf02bcf inet_frags_init +EXPORT_SYMBOL vmlinux 0x1d11507e writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0x1d234baa __devm_request_region +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d363052 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x1d3c1faa idr_get_new_above +EXPORT_SYMBOL vmlinux 0x1d4c1758 mntput_no_expire +EXPORT_SYMBOL vmlinux 0x1d655b69 elv_add_request +EXPORT_SYMBOL vmlinux 0x1d6c7daf sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x1db1342c blk_init_tags +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1df721d2 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x1e0b03e4 of_parse_phandles_with_args +EXPORT_SYMBOL vmlinux 0x1e38d0f7 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x1e395742 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x1e4e0588 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e868bcc icmp_send +EXPORT_SYMBOL vmlinux 0x1e913012 seq_putc +EXPORT_SYMBOL vmlinux 0x1e97e1c0 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x1eb22523 follow_pfn +EXPORT_SYMBOL vmlinux 0x1ecb9943 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x1edd0ceb end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x1efc2805 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f21a077 scsi_finish_command +EXPORT_SYMBOL vmlinux 0x1f26b00b jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x1f504c7c simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x1f5549cd up_write +EXPORT_SYMBOL vmlinux 0x1f8fa494 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x1fc147d0 dentry_open +EXPORT_SYMBOL vmlinux 0x1fdac741 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x1ff69dd8 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x20030ecd ioremap +EXPORT_SYMBOL vmlinux 0x2018eef2 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x203fde2f seq_release_private +EXPORT_SYMBOL vmlinux 0x205b8957 pci_device_to_OF_node +EXPORT_SYMBOL vmlinux 0x2060d08d macio_unregister_driver +EXPORT_SYMBOL vmlinux 0x206484af sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x207d93ba simple_statfs +EXPORT_SYMBOL vmlinux 0x2080b248 generic_readlink +EXPORT_SYMBOL vmlinux 0x20ea2b67 journal_destroy +EXPORT_SYMBOL vmlinux 0x2125ae43 vfs_read +EXPORT_SYMBOL vmlinux 0x214e1b64 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21b3b9e6 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x21bd63dd skb_dequeue +EXPORT_SYMBOL vmlinux 0x21d71d61 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x21e14609 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x21e2526e __pci_register_driver +EXPORT_SYMBOL vmlinux 0x221a231f end_page_writeback +EXPORT_SYMBOL vmlinux 0x222dfe2a sysctl_intvec +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x2254e5a4 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x22565958 kern_path +EXPORT_SYMBOL vmlinux 0x225a90f8 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x225e1f2f security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x22662cc0 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22af8bc6 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22b9a7c7 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x22bc9ed2 nla_append +EXPORT_SYMBOL vmlinux 0x22ca4cc3 dq_data_lock +EXPORT_SYMBOL vmlinux 0x22daa286 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x22ee2d1c i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x23140c54 contig_page_data +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x233eb9f5 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x23881922 blk_free_tags +EXPORT_SYMBOL vmlinux 0x23e8b8d5 generic_setxattr +EXPORT_SYMBOL vmlinux 0x23f8bbd1 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x241f3ba9 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x24283b27 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x2437b6c9 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x2443f2b7 alloc_file +EXPORT_SYMBOL vmlinux 0x2456ec78 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x245f5184 register_8022_client +EXPORT_SYMBOL vmlinux 0x24614ef9 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x24798ca2 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x24baa83b blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x24d77629 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x24e71f75 inode_change_ok +EXPORT_SYMBOL vmlinux 0x24f4a252 elv_queue_empty +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x250c165b d_instantiate +EXPORT_SYMBOL vmlinux 0x2523e29c vga_client_register +EXPORT_SYMBOL vmlinux 0x25275d48 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x254dd2dc i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x2581543c complete +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25b3ce72 skb_append +EXPORT_SYMBOL vmlinux 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL vmlinux 0x25f3bd2e atomic64_xchg +EXPORT_SYMBOL vmlinux 0x25f7ade3 of_get_next_child +EXPORT_SYMBOL vmlinux 0x26087a31 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x260a9e8c vfs_unlink +EXPORT_SYMBOL vmlinux 0x2612241a cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x26269f2b kunmap_atomic +EXPORT_SYMBOL vmlinux 0x26477c07 __vmalloc +EXPORT_SYMBOL vmlinux 0x26605491 vga_put +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x26910d69 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x26951e93 registered_fb +EXPORT_SYMBOL vmlinux 0x26a4c495 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x26a935f0 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x26d6be11 proc_symlink +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26fc5eef __devm_release_region +EXPORT_SYMBOL vmlinux 0x2708f341 of_platform_bus_type +EXPORT_SYMBOL vmlinux 0x27111b31 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x271f4d2a finish_wait +EXPORT_SYMBOL vmlinux 0x272c9acd pmu_battery_count +EXPORT_SYMBOL vmlinux 0x274e1336 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x275d3685 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x276dd034 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27f47ba6 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x280a69f7 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x2813e7d3 sk_wait_data +EXPORT_SYMBOL vmlinux 0x28310987 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x2839b9d1 dev_get_flags +EXPORT_SYMBOL vmlinux 0x2857db1e netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x286c3198 of_get_gpio_flags +EXPORT_SYMBOL vmlinux 0x28723014 mutex_lock +EXPORT_SYMBOL vmlinux 0x287253ce pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x28835ecd splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x2884372e xfrm_register_km +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28cf3e70 up +EXPORT_SYMBOL vmlinux 0x28d078bd bio_free +EXPORT_SYMBOL vmlinux 0x28efe630 lock_rename +EXPORT_SYMBOL vmlinux 0x2903648e genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x291a3a5f lookup_bdev +EXPORT_SYMBOL vmlinux 0x2949eede __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x29766a93 down_killable +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29f5b051 get_disk +EXPORT_SYMBOL vmlinux 0x2a16b0d4 blk_rq_init +EXPORT_SYMBOL vmlinux 0x2a16e6d0 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x2a1c93a2 balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0x2a2517fe sk_stop_timer +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a336d21 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x2a84be64 scsi_prep_return +EXPORT_SYMBOL vmlinux 0x2a8d440e call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2aa99e19 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x2af7e46a sk_common_release +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b12925d cpumask_next_and +EXPORT_SYMBOL vmlinux 0x2b23db5a cad_pid +EXPORT_SYMBOL vmlinux 0x2b397c0a pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x2b9a634e pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bc61da1 program_check_exception +EXPORT_SYMBOL vmlinux 0x2be17954 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x2bf41f91 vfs_llseek +EXPORT_SYMBOL vmlinux 0x2bf8a64f security_inode_readlink +EXPORT_SYMBOL vmlinux 0x2c1c121c blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x2c51900e iget_failed +EXPORT_SYMBOL vmlinux 0x2c823b0b jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x2c92af06 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x2c9f2917 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x2cc35863 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x2cc6dfbb cdev_init +EXPORT_SYMBOL vmlinux 0x2cfc2d74 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2d904982 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x2db1c417 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x2dba47df pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x2dc48a7c module_layout +EXPORT_SYMBOL vmlinux 0x2dcb0123 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x2de7261d dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x2e002bcd skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x2e037620 nf_reinject +EXPORT_SYMBOL vmlinux 0x2e08a5f1 sock_no_poll +EXPORT_SYMBOL vmlinux 0x2e08c5fd textsearch_prepare +EXPORT_SYMBOL vmlinux 0x2e0d061a serio_unregister_port +EXPORT_SYMBOL vmlinux 0x2e2c4e9a bdi_destroy +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e3ff6a4 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e58d338 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x2e7fcf06 pci_enable_device +EXPORT_SYMBOL vmlinux 0x2e96804d fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x2e9c3d59 tty_register_driver +EXPORT_SYMBOL vmlinux 0x2eb3b1d0 input_free_device +EXPORT_SYMBOL vmlinux 0x2eb5f890 pci_dev_put +EXPORT_SYMBOL vmlinux 0x2eb93686 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x2eca36f0 vfs_quota_sync +EXPORT_SYMBOL vmlinux 0x2f19552c get_phy_device +EXPORT_SYMBOL vmlinux 0x2f5c4d40 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x2fb00942 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x2feb39bb kernel_listen +EXPORT_SYMBOL vmlinux 0x2ff2edb3 d_move +EXPORT_SYMBOL vmlinux 0x3003c1c4 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x30180d12 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x302444e0 scsi_print_result +EXPORT_SYMBOL vmlinux 0x30318a9d generic_ro_fops +EXPORT_SYMBOL vmlinux 0x303824b1 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x30438045 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x304d77c3 llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0x305c45f4 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x306b0688 jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x308dd2cf i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x30943275 alloc_disk_node +EXPORT_SYMBOL vmlinux 0x30a01707 bh_submit_read +EXPORT_SYMBOL vmlinux 0x30b4c7b0 __free_pages +EXPORT_SYMBOL vmlinux 0x30d4a58b put_tty_driver +EXPORT_SYMBOL vmlinux 0x3104c5b5 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x31127c87 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x313195bd inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x3131d875 vfs_mknod +EXPORT_SYMBOL vmlinux 0x31448a4a mempool_create_node +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x318810b9 idr_find +EXPORT_SYMBOL vmlinux 0x318bf35f alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x31935e9b blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x31a05d43 blk_peek_request +EXPORT_SYMBOL vmlinux 0x31b7b490 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x31c0a9c8 clear_inode +EXPORT_SYMBOL vmlinux 0x31cd6516 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x31d2da92 __serio_register_port +EXPORT_SYMBOL vmlinux 0x31d6dc8b register_key_type +EXPORT_SYMBOL vmlinux 0x31d7d324 file_update_time +EXPORT_SYMBOL vmlinux 0x31da3138 fb_find_mode +EXPORT_SYMBOL vmlinux 0x3203fcf2 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x3233ce06 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x323fd7ce tcp_splice_read +EXPORT_SYMBOL vmlinux 0x324a4a51 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x326df9e1 vfs_stat +EXPORT_SYMBOL vmlinux 0x327b9c1b pmu_poll_adb +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x328a05f1 strncpy +EXPORT_SYMBOL vmlinux 0x32da5a03 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x32ff1cd0 hippi_type_trans +EXPORT_SYMBOL vmlinux 0x3313f0de try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x331c11d4 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x3347211e pci_map_rom +EXPORT_SYMBOL vmlinux 0x334fa1ce nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x338b2c0e netif_napi_del +EXPORT_SYMBOL vmlinux 0x339d4841 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x33b3949a add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x33c750de dquot_drop +EXPORT_SYMBOL vmlinux 0x33f479cd neigh_seq_start +EXPORT_SYMBOL vmlinux 0x341a5c6d phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x341dbfa3 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x344a87f3 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x344adbd5 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x3452508d tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x3457a79a proto_unregister +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x34704b6b generic_getxattr +EXPORT_SYMBOL vmlinux 0x3470d125 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x347d8255 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x347da776 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x348b02a8 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x3498913d fd_install +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34ec7f07 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x34f49af0 register_console +EXPORT_SYMBOL vmlinux 0x35128600 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x3549d59f dquot_commit_info +EXPORT_SYMBOL vmlinux 0x35571161 may_umount_tree +EXPORT_SYMBOL vmlinux 0x35635c26 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x35774f49 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x358aadaa inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x35a8ff6b dcache_dir_open +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35caaf6b journal_extend +EXPORT_SYMBOL vmlinux 0x35cd5534 i2c_bit_add_numbered_bus +EXPORT_SYMBOL vmlinux 0x35cfd3de i2c_use_client +EXPORT_SYMBOL vmlinux 0x35da2e61 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x35e3d173 tty_kref_put +EXPORT_SYMBOL vmlinux 0x3602e1df do_SAK +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x36c6e3b9 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x36cccf17 proc_dostring +EXPORT_SYMBOL vmlinux 0x36f4955f sg_next +EXPORT_SYMBOL vmlinux 0x371d2130 check_legacy_ioport +EXPORT_SYMBOL vmlinux 0x37383edd rtas_get_power_level +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x374b9f66 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x374bf817 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x374ed073 scnprintf +EXPORT_SYMBOL vmlinux 0x377306d4 seq_printf +EXPORT_SYMBOL vmlinux 0x3774b9cf tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x378011df slow_work_cancel +EXPORT_SYMBOL vmlinux 0x37905924 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x37a94077 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x37a9798f mempool_free +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37c4d548 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x3809ba36 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x381c4bb1 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x3822b845 netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x38397854 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x383b5f73 inet_shutdown +EXPORT_SYMBOL vmlinux 0x3843d0a0 set_create_files_as +EXPORT_SYMBOL vmlinux 0x38481923 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x384a9976 input_release_device +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38e0e3e4 inode_setattr +EXPORT_SYMBOL vmlinux 0x38eea4db consume_skb +EXPORT_SYMBOL vmlinux 0x38fb9933 tty_std_termios +EXPORT_SYMBOL vmlinux 0x3906b93c _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x391d1c66 unlock_rename +EXPORT_SYMBOL vmlinux 0x391eb98c scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x3922d605 _spin_trylock +EXPORT_SYMBOL vmlinux 0x393b3163 scsi_execute_req +EXPORT_SYMBOL vmlinux 0x396d09f3 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x39806068 keyring_search +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x398fc1da ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x39b75052 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x39ba004f input_unfilter_device +EXPORT_SYMBOL vmlinux 0x39c14f3b mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x39ca1964 irq_stat +EXPORT_SYMBOL vmlinux 0x3a1e1cb5 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a376407 dma_pool_create +EXPORT_SYMBOL vmlinux 0x3a4e8d2a read_cache_page +EXPORT_SYMBOL vmlinux 0x3a68271e of_device_uevent +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa9cf85 journal_dirty_data +EXPORT_SYMBOL vmlinux 0x3ac9b85f nobh_writepage +EXPORT_SYMBOL vmlinux 0x3ad0c769 dm_put_device +EXPORT_SYMBOL vmlinux 0x3ae7785f udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3b0364a8 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0x3b06b2ad pmac_resume_agp_for_card +EXPORT_SYMBOL vmlinux 0x3b111920 __lock_buffer +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b34e189 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x3b417b76 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x3b500f5c serio_open +EXPORT_SYMBOL vmlinux 0x3b98b235 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x3bb214ec tcp_prot +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bb7e374 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bd2bf6d neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x3be4dd41 vga_get +EXPORT_SYMBOL vmlinux 0x3be63b24 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x3c03f5e4 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x3c06e9cf tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x3c1c0fa0 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c33ce16 dquot_initialize +EXPORT_SYMBOL vmlinux 0x3c5f0f23 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x3c60454a set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x3c621bfb alloc_fcdev +EXPORT_SYMBOL vmlinux 0x3c7875b1 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x3c7c4c1d blk_get_request +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3ccd2f19 locks_init_lock +EXPORT_SYMBOL vmlinux 0x3cdcc417 input_register_device +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cedc391 fb_class +EXPORT_SYMBOL vmlinux 0x3cf82100 netif_device_attach +EXPORT_SYMBOL vmlinux 0x3d13ce2f slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x3d3f01b4 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x3d4e926a tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x3d605386 bdi_register_dev +EXPORT_SYMBOL vmlinux 0x3d6481f2 init_timer_key +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3daa69da vfs_lstat +EXPORT_SYMBOL vmlinux 0x3db01a91 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x3dbd4991 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x3e07973f sock_kfree_s +EXPORT_SYMBOL vmlinux 0x3e12ba77 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x3e22ecc4 free_task +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e50039c ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x3e624881 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x3e96099b phy_attach +EXPORT_SYMBOL vmlinux 0x3ea61249 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x3ebe1760 key_task_permission +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f0a5c78 blk_register_region +EXPORT_SYMBOL vmlinux 0x3f25d9f4 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x3f406a3b enable_kernel_altivec +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f4d23ee pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x3f6b3239 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x3f847178 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x3fb879a1 iget5_locked +EXPORT_SYMBOL vmlinux 0x3fb9c184 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x3fe29beb blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x3ffdcee2 skb_under_panic +EXPORT_SYMBOL vmlinux 0x4006e70c napi_gro_flush +EXPORT_SYMBOL vmlinux 0x40312dbd inet_ioctl +EXPORT_SYMBOL vmlinux 0x40488124 sg_last +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x405eac13 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x4091fbf3 bio_alloc +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40ac5228 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x40d107a6 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x40d37d54 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x40f1ad10 tb_ticks_per_jiffy +EXPORT_SYMBOL vmlinux 0x4101a975 ide_fixstring +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x4120496c fb_get_mode +EXPORT_SYMBOL vmlinux 0x4123b8e7 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x415714b6 down_read +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4185cf4b radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41ca965e sysctl_data +EXPORT_SYMBOL vmlinux 0x41cdb7bc nf_setsockopt +EXPORT_SYMBOL vmlinux 0x41ea057e genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x41f14504 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x421b694c of_device_get_modalias +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x423368d4 matroxfb_g450_shutdown +EXPORT_SYMBOL vmlinux 0x42347de1 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x427f304e rtas +EXPORT_SYMBOL vmlinux 0x429328d9 _spin_lock +EXPORT_SYMBOL vmlinux 0x42a3a65c ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0x42c01d23 key_alloc +EXPORT_SYMBOL vmlinux 0x42c15d13 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x435a33c5 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x435b926f __rta_fill +EXPORT_SYMBOL vmlinux 0x43635cd3 ilookup5 +EXPORT_SYMBOL vmlinux 0x436ab25e replace_mount_options +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x43719007 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x43753a37 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x439ca1bf dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43c92079 cdrom_release +EXPORT_SYMBOL vmlinux 0x43c99274 pci_find_capability +EXPORT_SYMBOL vmlinux 0x43df2360 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x43f9544d ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x441a6711 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x44314efb radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x44347183 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x44aba172 flush_signals +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44d7180e cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44ff0a8e skb_unlink +EXPORT_SYMBOL vmlinux 0x45301ced xfrm_input +EXPORT_SYMBOL vmlinux 0x4535074d locks_copy_lock +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x455eb455 netdev_state_change +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45822526 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x4596ba97 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x4596db6a sys_sigreturn +EXPORT_SYMBOL vmlinux 0x45cad802 unregister_nls +EXPORT_SYMBOL vmlinux 0x45d82b70 __getblk +EXPORT_SYMBOL vmlinux 0x461ebfa0 __copy_tofrom_user +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x465757c3 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x467b8f5d rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x4680d0c6 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x468cefd8 mapping_tagged +EXPORT_SYMBOL vmlinux 0x469f2aa7 pci_get_device +EXPORT_SYMBOL vmlinux 0x469f9682 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x46b297ec find_lock_page +EXPORT_SYMBOL vmlinux 0x46f8aa98 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x472cce97 __napi_schedule +EXPORT_SYMBOL vmlinux 0x472d2a9a radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x4731873a page_address +EXPORT_SYMBOL vmlinux 0x474b769c blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x474e3d40 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x47602944 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x47872db0 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47ae89da tcp_ioctl +EXPORT_SYMBOL vmlinux 0x47b3a2ea dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x47d2201e scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x47d6f47b update_region +EXPORT_SYMBOL vmlinux 0x481ce6ce cpu_active_mask +EXPORT_SYMBOL vmlinux 0x484b1191 __find_get_block +EXPORT_SYMBOL vmlinux 0x484e22b2 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x486cb497 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x4881efab pmac_get_partition +EXPORT_SYMBOL vmlinux 0x488c76f4 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x489d2664 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x48afcc8e generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x48bbfa19 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x48c1d080 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x48d723cb pci_get_slot +EXPORT_SYMBOL vmlinux 0x48e9f963 pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x48eaa5f6 init_net +EXPORT_SYMBOL vmlinux 0x48f48842 module_refcount +EXPORT_SYMBOL vmlinux 0x490d93aa phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x49477894 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49950dad journal_abort +EXPORT_SYMBOL vmlinux 0x49d1cf6e pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x49d3df64 pci_save_state +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49fa6394 neigh_table_init +EXPORT_SYMBOL vmlinux 0x49ff53ee dmam_pool_create +EXPORT_SYMBOL vmlinux 0x4a172097 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x4a1e5c92 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x4a290d4d cur_cpu_spec +EXPORT_SYMBOL vmlinux 0x4a2c5a34 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a3ea812 get_sb_ns +EXPORT_SYMBOL vmlinux 0x4a6a3631 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x4a75fafd inet_addr_type +EXPORT_SYMBOL vmlinux 0x4a8702be panic_notifier_list +EXPORT_SYMBOL vmlinux 0x4a971ec7 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x4aa6805d __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x4adc303a send_sig +EXPORT_SYMBOL vmlinux 0x4aedbf5b open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b0c963b inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x4b17de47 _read_lock_bh +EXPORT_SYMBOL vmlinux 0x4b1feac7 destroy_EII_client +EXPORT_SYMBOL vmlinux 0x4b2d642d input_allocate_device +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b3d66b6 proc_mkdir +EXPORT_SYMBOL vmlinux 0x4b4322bd nf_register_hooks +EXPORT_SYMBOL vmlinux 0x4b4e6ca0 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x4b65a3dc tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x4b674fb3 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x4ba6b807 fput +EXPORT_SYMBOL vmlinux 0x4bac8ec7 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4c0af9d1 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c14e830 phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x4c972691 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0x4cb94dfa I_BDEV +EXPORT_SYMBOL vmlinux 0x4cbab460 vfs_create +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cc2a4b7 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x4cd2872b __alloc_skb +EXPORT_SYMBOL vmlinux 0x4cd34a9b vfsmount_lock +EXPORT_SYMBOL vmlinux 0x4cd7a8cb ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x4d073284 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x4d139b5f pci_select_bars +EXPORT_SYMBOL vmlinux 0x4d1b84ac iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x4d2a5c19 rwsem_wake +EXPORT_SYMBOL vmlinux 0x4d3ac53d serio_interrupt +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4daf5769 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x4db50db5 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4ddc2535 del_gendisk +EXPORT_SYMBOL vmlinux 0x4dec6038 memscan +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e0e515f i2c_master_recv +EXPORT_SYMBOL vmlinux 0x4e111538 pci_request_regions +EXPORT_SYMBOL vmlinux 0x4e19bab5 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x4e2594c8 do_munmap +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e68d104 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x4e69e73f filemap_fault +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e76c529 vmtruncate +EXPORT_SYMBOL vmlinux 0x4e796863 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e90888b of_find_property +EXPORT_SYMBOL vmlinux 0x4e958131 napi_frags_finish +EXPORT_SYMBOL vmlinux 0x4e9dffb5 ip_fast_csum +EXPORT_SYMBOL vmlinux 0x4ec7f990 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x4ed91bf6 pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x4ee01dfa scsi_register_interface +EXPORT_SYMBOL vmlinux 0x4ee044e6 of_register_spi_devices +EXPORT_SYMBOL vmlinux 0x4eee4984 seq_lseek +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f30e028 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x4f44f0e2 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x4f8599a5 arp_send +EXPORT_SYMBOL vmlinux 0x4fa9ce02 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x4fc779a1 mnt_unpin +EXPORT_SYMBOL vmlinux 0x4fce5104 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x4fd29bcd phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x4fdeac69 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4fe99583 atomic64_dec_if_positive +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x504a7eeb bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x504fb351 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x509202f6 macio_request_resource +EXPORT_SYMBOL vmlinux 0x509bc330 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x50b15c53 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x50da0bc1 ip_dev_find +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x5133c345 ps2_end_command +EXPORT_SYMBOL vmlinux 0x515e24a7 flush_instruction_cache +EXPORT_SYMBOL vmlinux 0x517fc780 set_groups +EXPORT_SYMBOL vmlinux 0x518fa751 current_fs_time +EXPORT_SYMBOL vmlinux 0x51a25c69 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x51b821f3 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x51c3e6f2 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x51c71254 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x5224d941 bio_copy_kern +EXPORT_SYMBOL vmlinux 0x5232b25a __scsi_put_command +EXPORT_SYMBOL vmlinux 0x523d92b4 input_flush_device +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527830ff pmac_xpram_read +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x528fd156 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x529a8e57 lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0x52a30ffc dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x52f0c4f0 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x5315f750 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x53165804 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x533d704e check_media_bay +EXPORT_SYMBOL vmlinux 0x53964526 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x53a40293 f_setown +EXPORT_SYMBOL vmlinux 0x53bf27f5 mach_chrp +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53c3e2f7 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x53c55927 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x53d44e4c inet_csk_accept +EXPORT_SYMBOL vmlinux 0x53d91e59 _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x53dc276e qdisc_reset +EXPORT_SYMBOL vmlinux 0x53dee751 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x53ebab1b _outsl_ns +EXPORT_SYMBOL vmlinux 0x53f9d6ed init_special_inode +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x542bc5aa kobject_init +EXPORT_SYMBOL vmlinux 0x54470367 down +EXPORT_SYMBOL vmlinux 0x5474d4ea swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x54797105 kthread_create +EXPORT_SYMBOL vmlinux 0x547cbe53 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54c6479c __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x54d24bc4 block_truncate_page +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54ea5a15 ppc_md +EXPORT_SYMBOL vmlinux 0x550d5d9c blk_complete_request +EXPORT_SYMBOL vmlinux 0x553353b0 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x55396148 user_path_at +EXPORT_SYMBOL vmlinux 0x554ab8cd otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x554d73ab sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x556185a7 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x5572cfe3 inode_init_always +EXPORT_SYMBOL vmlinux 0x5585975b simple_empty +EXPORT_SYMBOL vmlinux 0x5589eb4a flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55dc48d3 fb_set_var +EXPORT_SYMBOL vmlinux 0x55fdd50c find_inode_number +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x56270780 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x56327ae4 bio_split +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x56428c62 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x564403e5 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x567ec1c6 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x56914c67 scsi_unregister +EXPORT_SYMBOL vmlinux 0x56a10763 csum_tcpudp_magic +EXPORT_SYMBOL vmlinux 0x56a820f6 alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x56a98bcf i2c_verify_client +EXPORT_SYMBOL vmlinux 0x56c2b95b rtas_progress +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56f49060 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x57074428 blk_unplug +EXPORT_SYMBOL vmlinux 0x572c0884 qdisc_list_del +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x57647234 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x576f52c6 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x5778bbcb dev_driver_string +EXPORT_SYMBOL vmlinux 0x577c2540 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x578f1a05 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x57a1add2 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x57a6504e vsnprintf +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57b95312 set_user_nice +EXPORT_SYMBOL vmlinux 0x57c3c0bf of_phy_find_device +EXPORT_SYMBOL vmlinux 0x57c84ff9 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x58009e02 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x58078828 tcp_poll +EXPORT_SYMBOL vmlinux 0x5817505d grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x58211b5c neigh_update +EXPORT_SYMBOL vmlinux 0x582a4747 cacheable_memcpy +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x584d961e module_put +EXPORT_SYMBOL vmlinux 0x5852520b tcf_exts_change +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x585cf9d9 set_disk_ro +EXPORT_SYMBOL vmlinux 0x58802682 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x588237e5 elevator_exit +EXPORT_SYMBOL vmlinux 0x58a45c4e pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x58af0e0a mdiobus_register +EXPORT_SYMBOL vmlinux 0x58da47e8 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x58db9c6c key_negate_and_link +EXPORT_SYMBOL vmlinux 0x58dd7114 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x58dda03e blk_stop_queue +EXPORT_SYMBOL vmlinux 0x590b1838 ilookup +EXPORT_SYMBOL vmlinux 0x590c16fa pci_claim_resource +EXPORT_SYMBOL vmlinux 0x591c08cd flush_tlb_range +EXPORT_SYMBOL vmlinux 0x5934072c register_snap_client +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x5954e1de nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x595d0946 empty_zero_page +EXPORT_SYMBOL vmlinux 0x5962859f sg_init_table +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d8223a ioport_resource +EXPORT_SYMBOL vmlinux 0x5a05f42b gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x5a185d27 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x5a232a0e dquot_free_inode +EXPORT_SYMBOL vmlinux 0x5a2377c9 ps2_command +EXPORT_SYMBOL vmlinux 0x5a2ecc37 get_sb_bdev +EXPORT_SYMBOL vmlinux 0x5a5f556f skb_push +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a8b6231 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x5ab19e63 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x5ab67931 do_IRQ +EXPORT_SYMBOL vmlinux 0x5aca832c generic_writepages +EXPORT_SYMBOL vmlinux 0x5b00f1e7 neigh_for_each +EXPORT_SYMBOL vmlinux 0x5b0113fc deactivate_super +EXPORT_SYMBOL vmlinux 0x5b019c07 seq_open_private +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b43f1f1 rtas_service_present +EXPORT_SYMBOL vmlinux 0x5b4769d5 giveup_altivec +EXPORT_SYMBOL vmlinux 0x5b727ffd jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x5b949bfd ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x5ba6679b blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x5bd9c115 thaw_bdev +EXPORT_SYMBOL vmlinux 0x5bf0e80d scsi_remove_device +EXPORT_SYMBOL vmlinux 0x5bfe8f12 sock_no_getname +EXPORT_SYMBOL vmlinux 0x5c1ad13c macio_register_driver +EXPORT_SYMBOL vmlinux 0x5c433a8b eth_mac_addr +EXPORT_SYMBOL vmlinux 0x5c84f3b5 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x5cafedff of_find_matching_node +EXPORT_SYMBOL vmlinux 0x5cc5b658 kfifo_alloc +EXPORT_SYMBOL vmlinux 0x5cef6010 simple_write_end +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d7557ec d_genocide +EXPORT_SYMBOL vmlinux 0x5d863b18 bio_unmap_user +EXPORT_SYMBOL vmlinux 0x5d8b68aa elv_rb_add +EXPORT_SYMBOL vmlinux 0x5dc670f6 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x5e008ced __dst_free +EXPORT_SYMBOL vmlinux 0x5e0be119 __blk_end_request +EXPORT_SYMBOL vmlinux 0x5e23e32c scsi_print_sense +EXPORT_SYMBOL vmlinux 0x5e52bcd7 vc_resize +EXPORT_SYMBOL vmlinux 0x5e54acdc inode_permission +EXPORT_SYMBOL vmlinux 0x5e569155 kernel_connect +EXPORT_SYMBOL vmlinux 0x5e66b78f dst_destroy +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5e95ea41 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ed2d9ae prepare_creds +EXPORT_SYMBOL vmlinux 0x5ed933ae tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x5edc0972 bdi_unregister +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ee63b37 load_nls_default +EXPORT_SYMBOL vmlinux 0x5ef6512a skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x5f04665d call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0x5f067580 sk_filter +EXPORT_SYMBOL vmlinux 0x5f6f6add jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x5f754e5a memset +EXPORT_SYMBOL vmlinux 0x5f8a2728 isa_io_base +EXPORT_SYMBOL vmlinux 0x5feb295c proc_create_data +EXPORT_SYMBOL vmlinux 0x5fedd58c mutex_unlock +EXPORT_SYMBOL vmlinux 0x5ff103c1 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x60425a46 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x604825ae journal_revoke +EXPORT_SYMBOL vmlinux 0x60518218 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x60680a8a simple_rename +EXPORT_SYMBOL vmlinux 0x606d0dd8 km_report +EXPORT_SYMBOL vmlinux 0x60960b51 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60aad792 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x60cf7a60 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x6121be9d pci_find_device +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x614fd038 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x615b0e2e xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x61628900 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0x61875437 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61928d9c blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x619de2e5 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x61a3cc90 fget +EXPORT_SYMBOL vmlinux 0x61a82092 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x61a9332d __register_chrdev +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61eef2c9 _insb +EXPORT_SYMBOL vmlinux 0x620060ec mod_timer +EXPORT_SYMBOL vmlinux 0x6220b988 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0x623a3a3c idr_remove_all +EXPORT_SYMBOL vmlinux 0x623d7182 _chrp_type +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x628332e8 pmu_power_flags +EXPORT_SYMBOL vmlinux 0x629bacd8 km_state_expired +EXPORT_SYMBOL vmlinux 0x62be7c26 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x62d2b7c0 matroxfb_unregister_driver +EXPORT_SYMBOL vmlinux 0x63131149 flush_old_exec +EXPORT_SYMBOL vmlinux 0x632e89b3 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x632ef624 sget +EXPORT_SYMBOL vmlinux 0x63675f8a ide_dma_off +EXPORT_SYMBOL vmlinux 0x63d473e3 block_prepare_write +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63efc536 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x63f8804a sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x63fa59a5 request_key +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x643a683e blk_init_queue +EXPORT_SYMBOL vmlinux 0x6452212f try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x6464b90f vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x646cc6ab pmu_poll +EXPORT_SYMBOL vmlinux 0x6475c209 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64a9272c tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x64b67a01 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x64e01c64 tcf_em_register +EXPORT_SYMBOL vmlinux 0x64e4115a of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x6531b1c4 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x65400222 __irq_offset_value +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x6541bacb kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x6595c991 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x65cff4a0 eth_header_cache +EXPORT_SYMBOL vmlinux 0x65e37add i2c_transfer +EXPORT_SYMBOL vmlinux 0x65f4af5f prepare_to_wait +EXPORT_SYMBOL vmlinux 0x65f97dc7 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x6603af25 scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x660cedd5 nobh_write_end +EXPORT_SYMBOL vmlinux 0x662e9fb8 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0x664152ff filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x66581ec4 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x665faff7 __inet6_hash +EXPORT_SYMBOL vmlinux 0x666bef02 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x666c4dae block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x66708708 init_file +EXPORT_SYMBOL vmlinux 0x667bcdf2 set_device_ro +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66a6796c pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x66c1441a d_invalidate +EXPORT_SYMBOL vmlinux 0x66cbf14b pmac_xpram_write +EXPORT_SYMBOL vmlinux 0x66ebff03 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x66fa4621 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x671bf0a0 adb_client_list +EXPORT_SYMBOL vmlinux 0x672cf7c3 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x67448ea5 simple_set_mnt +EXPORT_SYMBOL vmlinux 0x676e3291 down_write +EXPORT_SYMBOL vmlinux 0x676eb762 unregister_netdev +EXPORT_SYMBOL vmlinux 0x678833e9 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x67d2c202 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x67f09213 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x67fa0efe scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x67fe57f1 vfs_quota_off +EXPORT_SYMBOL vmlinux 0x68344077 pci_iounmap +EXPORT_SYMBOL vmlinux 0x68628e77 _write_lock_bh +EXPORT_SYMBOL vmlinux 0x687d9e4f call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x68991d9d pipe_unlock +EXPORT_SYMBOL vmlinux 0x68c1422b vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x68d4bdfd set_anon_super +EXPORT_SYMBOL vmlinux 0x68dc031e skb_pad +EXPORT_SYMBOL vmlinux 0x68fd784c pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x6925415e nonseekable_open +EXPORT_SYMBOL vmlinux 0x69543e89 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x6957bfb9 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x69627ca0 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x6971c3df __any_online_cpu +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x6989875b add_wait_queue +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a224fe pid_task +EXPORT_SYMBOL vmlinux 0x69b155f5 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x69b4208d complete_and_exit +EXPORT_SYMBOL vmlinux 0x69b7ebe4 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69c9e853 sock_create_kern +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69d7e5b8 __debugger_ipi +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a1a3434 scsi_put_command +EXPORT_SYMBOL vmlinux 0x6a2e69fa start_tty +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a61f874 to_tm +EXPORT_SYMBOL vmlinux 0x6a63c8b5 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6ab1066b pci_disable_device +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2456fb ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b32a0e3 netpoll_poll +EXPORT_SYMBOL vmlinux 0x6b3cfca6 idr_get_new +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bdda050 dquot_free_space +EXPORT_SYMBOL vmlinux 0x6bfb5afb __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x6bfbe6b4 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c3b242e sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c6a2a5b pci_free_consistent +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c844cb3 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x6c908eee xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x6ca1d1a4 atomic64_read +EXPORT_SYMBOL vmlinux 0x6cb726a7 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x6cbe35f6 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x6cbfe63b boot_tvec_bases +EXPORT_SYMBOL vmlinux 0x6cc6f948 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6cf8b1d2 aio_put_req +EXPORT_SYMBOL vmlinux 0x6cfbcafe inet_stream_connect +EXPORT_SYMBOL vmlinux 0x6d0014e9 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x6d2235cb bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x6d2611c0 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d288375 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d572610 register_netdevice +EXPORT_SYMBOL vmlinux 0x6d5adccc sk_alloc +EXPORT_SYMBOL vmlinux 0x6d625f3b rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x6d65bd62 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d859240 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x6d92aab4 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x6da928f4 _insw_ns +EXPORT_SYMBOL vmlinux 0x6dbd292a ll_rw_block +EXPORT_SYMBOL vmlinux 0x6de0954d tcp_disconnect +EXPORT_SYMBOL vmlinux 0x6de2f7ca jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6e322bb0 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x6e522015 sg_init_one +EXPORT_SYMBOL vmlinux 0x6e592be6 write_one_page +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6ea4be70 del_timer +EXPORT_SYMBOL vmlinux 0x6ed61b24 fb_show_logo +EXPORT_SYMBOL vmlinux 0x6ee9f2bb get_fs_type +EXPORT_SYMBOL vmlinux 0x6ef7dec2 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x6efeb9c2 vga_tryget +EXPORT_SYMBOL vmlinux 0x6f03d930 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x6f0540a4 sock_no_bind +EXPORT_SYMBOL vmlinux 0x6f271ca5 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x6f308536 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x6f3d3c5f mpage_writepage +EXPORT_SYMBOL vmlinux 0x6f4a87fe skb_dma_map +EXPORT_SYMBOL vmlinux 0x6f8d62b6 journal_force_commit +EXPORT_SYMBOL vmlinux 0x6f93e2ef d_lookup +EXPORT_SYMBOL vmlinux 0x6f964be0 of_find_device_by_phandle +EXPORT_SYMBOL vmlinux 0x6fbc77cd of_translate_address +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fda1d27 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x6ff8e373 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x7005334c nf_afinfo +EXPORT_SYMBOL vmlinux 0x701d0ebd snprintf +EXPORT_SYMBOL vmlinux 0x7032e57e lock_fb_info +EXPORT_SYMBOL vmlinux 0x7045dcb4 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x704cb0d3 km_state_notify +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x70720a13 idr_init +EXPORT_SYMBOL vmlinux 0x707a6bea unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x708eeb26 scsi_add_device +EXPORT_SYMBOL vmlinux 0x70a87c32 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x70ac7ee5 mem_map +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70d4247c create_empty_buffers +EXPORT_SYMBOL vmlinux 0x70d80afb unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x70d888b7 __debugger_fault_handler +EXPORT_SYMBOL vmlinux 0x70f86c70 pmu_queue_request +EXPORT_SYMBOL vmlinux 0x70fb92f8 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x7106c9c0 km_policy_notify +EXPORT_SYMBOL vmlinux 0x7111a4ef xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x71287564 __seq_open_private +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x71351c30 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x71488570 elevator_init +EXPORT_SYMBOL vmlinux 0x717242e7 rtas_data_buf_lock +EXPORT_SYMBOL vmlinux 0x7180084b inet_release +EXPORT_SYMBOL vmlinux 0x7180ed40 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x718de967 ip_route_output_key +EXPORT_SYMBOL vmlinux 0x719036aa blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71c8da94 set_irq_chip +EXPORT_SYMBOL vmlinux 0x71c90087 memcmp +EXPORT_SYMBOL vmlinux 0x71cd46e3 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x71e89ac1 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x721fbac5 unregister_netdevice +EXPORT_SYMBOL vmlinux 0x7270a552 make_bad_inode +EXPORT_SYMBOL vmlinux 0x727b1c5e swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72c911b7 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x7326a98e tcp_read_sock +EXPORT_SYMBOL vmlinux 0x734b8291 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x73564277 __timecompare_update +EXPORT_SYMBOL vmlinux 0x735b5b4a elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x7362dd1e vfs_fstat +EXPORT_SYMBOL vmlinux 0x7364a8ca lookup_one_len +EXPORT_SYMBOL vmlinux 0x736f9afd generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x739ae645 noop_qdisc +EXPORT_SYMBOL vmlinux 0x73b1a7de of_gpio_count +EXPORT_SYMBOL vmlinux 0x73b403c0 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x73e2a165 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x73e78b4a generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x73fdc1ce blk_integrity_register +EXPORT_SYMBOL vmlinux 0x740411e4 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x7434f2e9 phy_driver_register +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x744e8932 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x7454eb5d do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0x746ba525 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74b39e49 of_match_node +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d58542 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x74efabe7 setup_new_exec +EXPORT_SYMBOL vmlinux 0x74f711e1 __ide_dma_bad_drive +EXPORT_SYMBOL vmlinux 0x74f9c4be dev_mc_add +EXPORT_SYMBOL vmlinux 0x74fe8730 sys_ctrler +EXPORT_SYMBOL vmlinux 0x753b5df9 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x756dd160 start_thread +EXPORT_SYMBOL vmlinux 0x7588b095 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x758e83f9 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x75a2aade dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c7b301 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x75efc20e page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x7616f17d skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x763dee08 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x765e02e2 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x767f6955 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76cc813f block_commit_write +EXPORT_SYMBOL vmlinux 0x76d39921 per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76d8f9c7 km_new_mapping +EXPORT_SYMBOL vmlinux 0x76d9ef8f __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x76e9cdec __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x772cf24c tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x7767edda inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x778f983c generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x77907c8c serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x77b851c4 cacheable_memzero +EXPORT_SYMBOL vmlinux 0x77c90445 skb_queue_head +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f60630 complete_request_key +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x78304a23 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x783a3585 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x78422953 __elv_add_request +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x78605b96 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x78725d6f cfb_fillrect +EXPORT_SYMBOL vmlinux 0x788fe103 iomem_resource +EXPORT_SYMBOL vmlinux 0x789ef801 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x78d6178f of_device_register +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78e4df68 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x78edaaa0 file_fsync +EXPORT_SYMBOL vmlinux 0x7908b1bf elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x790e749c dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x7913adac __percpu_counter_add +EXPORT_SYMBOL vmlinux 0x7946a9c5 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x7969af42 kset_unregister +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x799c6083 inet_listen +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79afceed splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x79e9b909 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x79faacd0 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x79fd3767 sock_no_accept +EXPORT_SYMBOL vmlinux 0x7a0be023 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a83d5e3 input_set_capability +EXPORT_SYMBOL vmlinux 0x7a968b57 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x7b026211 llc_sap_find +EXPORT_SYMBOL vmlinux 0x7b13776d pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x7b1a4bea journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x7b272ce2 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x7b28ef2c inet_register_protosw +EXPORT_SYMBOL vmlinux 0x7b698289 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x7b6bbc7e seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x7ba71b97 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x7bd845ed vfs_statfs +EXPORT_SYMBOL vmlinux 0x7be4827c pci_dram_offset +EXPORT_SYMBOL vmlinux 0x7be623ce vfs_write +EXPORT_SYMBOL vmlinux 0x7bee16ba elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x7c2b93cb fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x7c35783b blk_make_request +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c82c1e2 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9291d1 csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x7ca341af kernel_thread +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cb6211f pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x7cbda202 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x7ce4a153 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x7cea4262 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d11c6e2 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x7d5c8a79 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x7d6d193f ide_geometry_proc_fops +EXPORT_SYMBOL vmlinux 0x7da5a55b mb_cache_create +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7de5eafe up_read +EXPORT_SYMBOL vmlinux 0x7e22a5c2 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x7e240dfe __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x7e566c8a blk_run_queue +EXPORT_SYMBOL vmlinux 0x7e5c10ce vm_insert_page +EXPORT_SYMBOL vmlinux 0x7e5f4f3f of_get_address +EXPORT_SYMBOL vmlinux 0x7e613127 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0x7ea09550 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x7ef920bb mdiobus_write +EXPORT_SYMBOL vmlinux 0x7f15e6bc save_mount_options +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f28ed02 seq_bitmap +EXPORT_SYMBOL vmlinux 0x7f4f51e0 bio_pair_release +EXPORT_SYMBOL vmlinux 0x7f538608 note_scsi_host +EXPORT_SYMBOL vmlinux 0x7f870d09 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x7f8f8b76 completion_done +EXPORT_SYMBOL vmlinux 0x7fa10866 g450_mnp2f +EXPORT_SYMBOL vmlinux 0x7fe596f5 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x801f5a3f __strncpy_from_user +EXPORT_SYMBOL vmlinux 0x80428c80 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x8063f83d radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x806a7c5e __napi_complete +EXPORT_SYMBOL vmlinux 0x80762959 dquot_claim_space +EXPORT_SYMBOL vmlinux 0x809f5fdc pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x80a11a61 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x80b096c3 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x80cfd0f9 lro_receive_frags +EXPORT_SYMBOL vmlinux 0x810a2b6b unlock_new_inode +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x816f596f ide_proc_unregister_driver +EXPORT_SYMBOL vmlinux 0x81799cee vscnprintf +EXPORT_SYMBOL vmlinux 0x819cf70e nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x81a64451 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x81aa39eb xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x81af8df9 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x81c0a84f rtas_set_indicator +EXPORT_SYMBOL vmlinux 0x81c0e09a pci_bus_type +EXPORT_SYMBOL vmlinux 0x81c760e1 keyring_clear +EXPORT_SYMBOL vmlinux 0x81fbb612 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x82237060 bio_integrity_free +EXPORT_SYMBOL vmlinux 0x8234bf90 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82629870 ida_init +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x826d1551 i2c_bit_add_bus +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82e5a238 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x83072737 poll_initwait +EXPORT_SYMBOL vmlinux 0x830c45a7 blk_remove_plug +EXPORT_SYMBOL vmlinux 0x8316dbb9 dquot_destroy +EXPORT_SYMBOL vmlinux 0x832a60cf skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x835d3301 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x8384974c pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x83941a17 put_io_context +EXPORT_SYMBOL vmlinux 0x8399d66f pci_set_master +EXPORT_SYMBOL vmlinux 0x839a82ef bio_sector_offset +EXPORT_SYMBOL vmlinux 0x839f8ef8 input_filter_device +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a8384d neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83c879d7 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x83ec5324 tty_register_device +EXPORT_SYMBOL vmlinux 0x8424f78e freeze_bdev +EXPORT_SYMBOL vmlinux 0x844404cf ISA_DMA_THRESHOLD +EXPORT_SYMBOL vmlinux 0x84621de9 igrab +EXPORT_SYMBOL vmlinux 0x84632dcc skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x8490ec3c tc_classify +EXPORT_SYMBOL vmlinux 0x84af1b02 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x84b183ae strncmp +EXPORT_SYMBOL vmlinux 0x84b50385 pci_device_from_OF_node +EXPORT_SYMBOL vmlinux 0x84ba78ad netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x84d56cd0 __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0x84d771d7 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x84e04398 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x84eebbf5 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x84ff5238 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x851179a7 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x8520e897 register_netdev +EXPORT_SYMBOL vmlinux 0x853b5b5b netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x8540aca6 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x8540b5be sleep_on +EXPORT_SYMBOL vmlinux 0x8541bccc intercept_table +EXPORT_SYMBOL vmlinux 0x85600b2a phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x857eeabe fb_set_cmap +EXPORT_SYMBOL vmlinux 0x85ac7f10 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x85c475c0 dquot_alloc +EXPORT_SYMBOL vmlinux 0x85c82bb2 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x85d0e104 dqput +EXPORT_SYMBOL vmlinux 0x85d4cc3d of_parse_phandle +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x8616ac5c scsi_get_command +EXPORT_SYMBOL vmlinux 0x862c519d llc_add_pack +EXPORT_SYMBOL vmlinux 0x8631d772 pipe_lock +EXPORT_SYMBOL vmlinux 0x8655cfd1 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86942fa7 register_gifconf +EXPORT_SYMBOL vmlinux 0x86bd597b xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x86c81a43 down_trylock +EXPORT_SYMBOL vmlinux 0x86db1cbb rtas_flash_term_hook +EXPORT_SYMBOL vmlinux 0x86dc28a4 pci_target_state +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x87100c4a tcp_shutdown +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x877ceb17 fb_pan_display +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87920022 inet_accept +EXPORT_SYMBOL vmlinux 0x8792ede4 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x87b72615 submit_bio +EXPORT_SYMBOL vmlinux 0x87b9f230 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x87bf6a93 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x87c733f7 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x8807d1cd tcp_sendpage +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x881470b9 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x883bf859 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x8897e19c irq_desc +EXPORT_SYMBOL vmlinux 0x889df4e3 bio_endio +EXPORT_SYMBOL vmlinux 0x88eeeb8f sysctl_jiffies +EXPORT_SYMBOL vmlinux 0x894a2b7b security_d_instantiate +EXPORT_SYMBOL vmlinux 0x895b5c23 unload_nls +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x897eb6e6 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x89a6be59 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x89adc319 page_readlink +EXPORT_SYMBOL vmlinux 0x89af4879 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x89b3107b isa_mem_base +EXPORT_SYMBOL vmlinux 0x89bcc49c mpage_readpages +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89d79ad2 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x89fe320a filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x8a013e48 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x8a03cf7f ide_proc_register_driver +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a625753 macio_dev_get +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8a9d39bf inet_select_addr +EXPORT_SYMBOL vmlinux 0x8ab286f3 kthread_stop +EXPORT_SYMBOL vmlinux 0x8ab4079e atomic64_add +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8b18ddd8 simple_rmdir +EXPORT_SYMBOL vmlinux 0x8b1a7a66 pcie_aspm_enabled +EXPORT_SYMBOL vmlinux 0x8b4f96b5 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x8b50e8a3 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x8b807f29 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x8b8b50ff dma_pool_free +EXPORT_SYMBOL vmlinux 0x8b9dcd69 journal_flush +EXPORT_SYMBOL vmlinux 0x8bb32001 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x8bc1e74a sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x8bcc3a3a _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd4fc1e bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bd8ac76 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x8bdf01b4 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x8bebc89c udp_ioctl +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c1ef17d wireless_send_event +EXPORT_SYMBOL vmlinux 0x8c216924 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x8c234a0d kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x8c4c3dd6 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c5bd11f bd_claim +EXPORT_SYMBOL vmlinux 0x8c858390 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cff374b kernel_bind +EXPORT_SYMBOL vmlinux 0x8d03c847 lease_modify +EXPORT_SYMBOL vmlinux 0x8d1acb57 put_page +EXPORT_SYMBOL vmlinux 0x8d2a94ea generic_write_sync +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d4acc9c mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d6b95a2 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x8d6ef862 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x8d80ab40 unlock_page +EXPORT_SYMBOL vmlinux 0x8df5da63 memstart_addr +EXPORT_SYMBOL vmlinux 0x8dff4ba1 of_phy_connect +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e268de3 skb_trim +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e5b7b6b fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x8e60a505 kernel_read +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8eacff5f lock_super +EXPORT_SYMBOL vmlinux 0x8edbac0c journal_start +EXPORT_SYMBOL vmlinux 0x8eddd691 kobject_add +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8ee9e4b3 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x8f3af7a4 inet_bind +EXPORT_SYMBOL vmlinux 0x8f3d4b19 mpage_writepages +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f5977c0 simple_lookup +EXPORT_SYMBOL vmlinux 0x8f5ed137 sk_run_filter +EXPORT_SYMBOL vmlinux 0x8f64dd4c ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f6fbe4a phy_connect_direct +EXPORT_SYMBOL vmlinux 0x8f7523e3 idr_destroy +EXPORT_SYMBOL vmlinux 0x8fb4f2f6 __kill_fasync +EXPORT_SYMBOL vmlinux 0x8fbf37e0 profile_pc +EXPORT_SYMBOL vmlinux 0x8fd8b7bc _write_lock_irq +EXPORT_SYMBOL vmlinux 0x8fec44d4 seq_escape +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x9019685a textsearch_destroy +EXPORT_SYMBOL vmlinux 0x9029827b tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x9029f6e6 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x90501868 transfer_to_handler +EXPORT_SYMBOL vmlinux 0x90547089 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x907dea02 single_open +EXPORT_SYMBOL vmlinux 0x907eb25f bdput +EXPORT_SYMBOL vmlinux 0x90dd3d53 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x91009452 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x910272e0 tcp_close +EXPORT_SYMBOL vmlinux 0x912557ce rtas_busy_delay +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x91507bb3 generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0x9158f743 pskb_copy +EXPORT_SYMBOL vmlinux 0x915e1208 tb_ticks_per_usec +EXPORT_SYMBOL vmlinux 0x9168c033 rtas_get_sensor +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x917bdea2 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x919d1163 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x91a5b6ab netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x91abeeed genphy_read_status +EXPORT_SYMBOL vmlinux 0x91aecbdb locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x91d5b0fb ide_complete_rq +EXPORT_SYMBOL vmlinux 0x91d88e48 __debugger_dabr_match +EXPORT_SYMBOL vmlinux 0x91eab335 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x923223c6 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x9239ca0e i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x926d58f9 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x926daa4e napi_gro_frags +EXPORT_SYMBOL vmlinux 0x926ea1ac pci_iomap +EXPORT_SYMBOL vmlinux 0x9278444b generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x928ab621 arp_broken_ops +EXPORT_SYMBOL vmlinux 0x9296c93d udp_table +EXPORT_SYMBOL vmlinux 0x929a11ea pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x92b7fe17 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x92bdfcad scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x9307ddb5 request_firmware +EXPORT_SYMBOL vmlinux 0x9309de94 cuda_request +EXPORT_SYMBOL vmlinux 0x931950d4 commit_creds +EXPORT_SYMBOL vmlinux 0x931d2521 mempool_resize +EXPORT_SYMBOL vmlinux 0x932099ea skb_copy +EXPORT_SYMBOL vmlinux 0x93288c38 set_page_dirty +EXPORT_SYMBOL vmlinux 0x932ed775 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x933c53a7 blk_put_request +EXPORT_SYMBOL vmlinux 0x933cf184 journal_restart +EXPORT_SYMBOL vmlinux 0x9346f99e skb_over_panic +EXPORT_SYMBOL vmlinux 0x937cc82a sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x9381c1a8 skb_pull +EXPORT_SYMBOL vmlinux 0x938aeafa scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x939641a6 ip_route_input +EXPORT_SYMBOL vmlinux 0x93a2328e simple_unlink +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93cdacf7 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x93d29dfc linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x93d91dce idr_remove +EXPORT_SYMBOL vmlinux 0x93e6bcd9 neigh_create +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x93ff1ae4 dev_addr_del +EXPORT_SYMBOL vmlinux 0x941e0d61 pci_domain_nr +EXPORT_SYMBOL vmlinux 0x9422c829 scsi_device_put +EXPORT_SYMBOL vmlinux 0x943d47ec scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x94703035 matroxfb_DAC_out +EXPORT_SYMBOL vmlinux 0x94740d56 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x948798c9 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a2df14 nf_log_register +EXPORT_SYMBOL vmlinux 0x94c09c09 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x94cd2db0 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x94d371ad __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x94f3f93a tty_free_termios +EXPORT_SYMBOL vmlinux 0x94f4c9a2 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x9514151a _mcount +EXPORT_SYMBOL vmlinux 0x951f0dbf tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x9524b0ae _outsb +EXPORT_SYMBOL vmlinux 0x952e843b machine_is_compatible +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x9552ce33 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x958194de kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x95964df6 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x95da59a1 get_sb_single +EXPORT_SYMBOL vmlinux 0x95f6d779 dqget +EXPORT_SYMBOL vmlinux 0x95fb78c9 read_cache_page_async +EXPORT_SYMBOL vmlinux 0x96173992 of_register_i2c_devices +EXPORT_SYMBOL vmlinux 0x961ab12d i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x9620d14f dm_register_target +EXPORT_SYMBOL vmlinux 0x9675a63d sk_dst_check +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x96908450 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0x969f3bd1 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x96a7669a dget_locked +EXPORT_SYMBOL vmlinux 0x96c02fd1 textsearch_register +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96d02556 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x96d0d768 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x96d56018 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x96ea58e8 scsi_host_put +EXPORT_SYMBOL vmlinux 0x96f2d4e1 journal_forget +EXPORT_SYMBOL vmlinux 0x970cb0d1 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x970f5f3e find_vma +EXPORT_SYMBOL vmlinux 0x971ac282 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x97255bdf strlen +EXPORT_SYMBOL vmlinux 0x97472e4a scm_fp_dup +EXPORT_SYMBOL vmlinux 0x9748927f _outsw_ns +EXPORT_SYMBOL vmlinux 0x974c2fde of_unregister_driver +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x976a3f18 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x976c58ee blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x9787d564 tty_port_init +EXPORT_SYMBOL vmlinux 0x97917e9d bdev_read_only +EXPORT_SYMBOL vmlinux 0x97cd1cd1 matrox_millennium +EXPORT_SYMBOL vmlinux 0x980b3980 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x9842472a jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x984b2402 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x9860e2c4 dev_mc_delete +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x9879ec13 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x988de2f4 nla_reserve +EXPORT_SYMBOL vmlinux 0x989d4082 _write_trylock +EXPORT_SYMBOL vmlinux 0x989e410e scsi_remove_host +EXPORT_SYMBOL vmlinux 0x98a5ebe7 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x98c19f9e clocksource_unregister +EXPORT_SYMBOL vmlinux 0x98cfdaf8 __scm_destroy +EXPORT_SYMBOL vmlinux 0x98ef0b60 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x98fe7882 DMA_MODE_READ +EXPORT_SYMBOL vmlinux 0x99239985 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x9946aade __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x9964e40f tty_port_close +EXPORT_SYMBOL vmlinux 0x996c9b1c bdevname +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99a2588b __breadahead +EXPORT_SYMBOL vmlinux 0x99bb8806 memmove +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99dd1451 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x99f879a0 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x99fc60c4 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x9a08679c neigh_lookup +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a2ae0a8 dst_discard +EXPORT_SYMBOL vmlinux 0x9a2d286e dev_set_mtu +EXPORT_SYMBOL vmlinux 0x9a303146 notify_change +EXPORT_SYMBOL vmlinux 0x9a335564 of_get_parent +EXPORT_SYMBOL vmlinux 0x9a57cc0f tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x9a6cbfd8 tty_devnum +EXPORT_SYMBOL vmlinux 0x9a7279c6 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x9aa2128d lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x9aa99182 tr_type_trans +EXPORT_SYMBOL vmlinux 0x9aac65e2 journal_init_inode +EXPORT_SYMBOL vmlinux 0x9ab8b637 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x9ace90f3 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x9ae6e4a1 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x9af7da9d scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x9b0e7459 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x9b2ae43b tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x9b36333c ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b40e2b3 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b8b1643 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x9ba5351e init_task +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bbf6124 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x9bce482f __release_region +EXPORT_SYMBOL vmlinux 0x9bd87c2c __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c253326 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x9c4b43ce qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x9c64d2ed ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x9c659776 seq_release +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9c853190 bio_integrity_split +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cd51320 blk_end_request +EXPORT_SYMBOL vmlinux 0x9cdb7a07 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x9ce08419 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x9ce103a0 down_write_trylock +EXPORT_SYMBOL vmlinux 0x9ce26c68 clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL vmlinux 0x9cea809c eth_type_trans +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d0c3f33 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x9d0c6fc4 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x9d14983a ppc_enable_pmcs +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d52ccd4 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x9d669763 memcpy +EXPORT_SYMBOL vmlinux 0x9d717edc __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x9d98359d fddi_type_trans +EXPORT_SYMBOL vmlinux 0x9d9e30af mpage_readpage +EXPORT_SYMBOL vmlinux 0x9dcb086e bdget_disk +EXPORT_SYMBOL vmlinux 0x9dd11ca9 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x9dd5687f of_device_is_available +EXPORT_SYMBOL vmlinux 0x9dd5eace __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x9df3171a bio_map_kern +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e4090f2 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x9e477e52 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x9e48a284 pci_choose_state +EXPORT_SYMBOL vmlinux 0x9e4d5e60 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x9e63a0d4 napi_frags_skb +EXPORT_SYMBOL vmlinux 0x9e763a6c serio_rescan +EXPORT_SYMBOL vmlinux 0x9e84f5f7 con_is_bound +EXPORT_SYMBOL vmlinux 0x9e97375d rtas_busy_delay_time +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea29f3c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x9eb0c75b read_cache_pages +EXPORT_SYMBOL vmlinux 0x9eb78998 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x9ec1591f seq_read +EXPORT_SYMBOL vmlinux 0x9ec226ce inode_get_bytes +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f0042f5 touch_atime +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f15da12 phy_disconnect +EXPORT_SYMBOL vmlinux 0x9f2bb952 log_start_commit +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f2e8c4d ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x9f410254 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fb030f4 del_timer_sync +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fd03f4d scm_detach_fds +EXPORT_SYMBOL vmlinux 0x9fd0d6b0 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x9fe6fa56 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x9ff84044 tty_port_close_start +EXPORT_SYMBOL vmlinux 0xa0225b66 pci_request_region +EXPORT_SYMBOL vmlinux 0xa024ffa5 __sg_free_table +EXPORT_SYMBOL vmlinux 0xa026096d xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xa02cd095 skb_queue_tail +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa03eb749 follow_up +EXPORT_SYMBOL vmlinux 0xa044caf5 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa07c1834 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xa0885139 journal_update_format +EXPORT_SYMBOL vmlinux 0xa098bbd8 matroxfb_register_driver +EXPORT_SYMBOL vmlinux 0xa09fed5f con_copy_unimap +EXPORT_SYMBOL vmlinux 0xa0a401ba __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0xa0a51877 load_nls +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b21d68 aio_complete +EXPORT_SYMBOL vmlinux 0xa0b6c5a5 macio_dev_put +EXPORT_SYMBOL vmlinux 0xa0b8aa12 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0xa0b95d8f cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xa0bcf64e macio_request_resources +EXPORT_SYMBOL vmlinux 0xa0c9a854 sock_map_fd +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0e7f6b3 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0xa0f41a84 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa16396a8 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0xa16a0b98 tcp_check_req +EXPORT_SYMBOL vmlinux 0xa17f4d76 cdrom_open +EXPORT_SYMBOL vmlinux 0xa186bb57 bio_add_page +EXPORT_SYMBOL vmlinux 0xa1a20747 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xa1a35709 blk_end_request_all +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c5519d skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cba159 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xa1f8bd40 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa23f931b do_splice_to +EXPORT_SYMBOL vmlinux 0xa2672cd2 __pagevec_release +EXPORT_SYMBOL vmlinux 0xa280b9f4 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0xa2914bcf neigh_ifdown +EXPORT_SYMBOL vmlinux 0xa293e397 invalidate_bdev +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2bbed37 crash_shutdown_register +EXPORT_SYMBOL vmlinux 0xa2d4c119 complete_all +EXPORT_SYMBOL vmlinux 0xa2fd3b51 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa32bc142 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa38e691a ioremap_bot +EXPORT_SYMBOL vmlinux 0xa391dcb4 sg_miter_start +EXPORT_SYMBOL vmlinux 0xa39b4cf2 udelay +EXPORT_SYMBOL vmlinux 0xa3a36001 giveup_fpu +EXPORT_SYMBOL vmlinux 0xa3e75545 flush_tlb_kernel_range +EXPORT_SYMBOL vmlinux 0xa40124a5 input_register_handle +EXPORT_SYMBOL vmlinux 0xa41b4781 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xa435cf16 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa46a2d18 bd_set_size +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4ce19e6 arp_create +EXPORT_SYMBOL vmlinux 0xa4dc483b inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xa4f9ad3b sock_init_data +EXPORT_SYMBOL vmlinux 0xa5534ab2 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xa576c263 generic_find_next_le_bit +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa587ba31 tty_shutdown +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa59e9924 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xa5b00659 ppc_proc_freq +EXPORT_SYMBOL vmlinux 0xa5cef8ad release_resource +EXPORT_SYMBOL vmlinux 0xa5db5b69 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xa5fc94f8 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xa5fcd759 dm_table_event +EXPORT_SYMBOL vmlinux 0xa6011a58 d_alloc_root +EXPORT_SYMBOL vmlinux 0xa62f9c64 nf_log_unregister +EXPORT_SYMBOL vmlinux 0xa65972b8 _memcpy_toio +EXPORT_SYMBOL vmlinux 0xa67b58b0 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xa67c5cb8 kobject_put +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa68b6d96 skb_checksum +EXPORT_SYMBOL vmlinux 0xa6cfd1e1 of_dev_put +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6e0bda7 skb_gso_segment +EXPORT_SYMBOL vmlinux 0xa6fd9210 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0xa7005919 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0xa70b16fb alloc_fddidev +EXPORT_SYMBOL vmlinux 0xa784b476 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0xa7995361 migrate_page +EXPORT_SYMBOL vmlinux 0xa7e4b25b get_io_context +EXPORT_SYMBOL vmlinux 0xa7e58ba4 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0xa7e7cb39 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0xa7f2bdec sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xa804905e scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xa861ab6e __ioremap +EXPORT_SYMBOL vmlinux 0xa876d785 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xa877ccc9 tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xa88242b7 phy_device_register +EXPORT_SYMBOL vmlinux 0xa89464b7 __ashldi3 +EXPORT_SYMBOL vmlinux 0xa8a2a685 file_permission +EXPORT_SYMBOL vmlinux 0xa8a3cfa6 sock_no_listen +EXPORT_SYMBOL vmlinux 0xa8c3a45b register_cdrom +EXPORT_SYMBOL vmlinux 0xa8daa477 key_unlink +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa90a3323 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xa91ea696 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xa922f240 _read_lock_irq +EXPORT_SYMBOL vmlinux 0xa9571d6d DMA_MODE_WRITE +EXPORT_SYMBOL vmlinux 0xa978deeb vfs_readlink +EXPORT_SYMBOL vmlinux 0xa98034a3 dev_close +EXPORT_SYMBOL vmlinux 0xa99c0e33 bio_map_user +EXPORT_SYMBOL vmlinux 0xa9bf10be jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xa9c4cee4 tty_hangup +EXPORT_SYMBOL vmlinux 0xa9ca263a tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0xa9ce06cd arp_tbl +EXPORT_SYMBOL vmlinux 0xa9d64a78 devm_iounmap +EXPORT_SYMBOL vmlinux 0xa9d8493e journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xa9dfa819 register_qdisc +EXPORT_SYMBOL vmlinux 0xa9e74437 lock_may_read +EXPORT_SYMBOL vmlinux 0xa9ecdb78 skb_split +EXPORT_SYMBOL vmlinux 0xa9effda5 __first_cpu +EXPORT_SYMBOL vmlinux 0xaa059fb2 posix_test_lock +EXPORT_SYMBOL vmlinux 0xaa0699a0 dma_direct_ops +EXPORT_SYMBOL vmlinux 0xaa1ead52 wake_up_process +EXPORT_SYMBOL vmlinux 0xaa2801f6 of_node_put +EXPORT_SYMBOL vmlinux 0xaa360521 skb_insert +EXPORT_SYMBOL vmlinux 0xaa379dd5 phy_detach +EXPORT_SYMBOL vmlinux 0xaa4df1ef scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0xaa4df512 pmu_batteries +EXPORT_SYMBOL vmlinux 0xaa6e72b1 mutex_trylock +EXPORT_SYMBOL vmlinux 0xaa7a48bc sock_sendmsg +EXPORT_SYMBOL vmlinux 0xaa8a3967 generic_listxattr +EXPORT_SYMBOL vmlinux 0xaa8afaea generic_make_request +EXPORT_SYMBOL vmlinux 0xaa9cba96 input_register_handler +EXPORT_SYMBOL vmlinux 0xaaaa5957 machine_id +EXPORT_SYMBOL vmlinux 0xaab2b61d simple_sync_file +EXPORT_SYMBOL vmlinux 0xaad0703a skb_make_writable +EXPORT_SYMBOL vmlinux 0xaad5cc47 scsi_free_command +EXPORT_SYMBOL vmlinux 0xaade2932 __destroy_inode +EXPORT_SYMBOL vmlinux 0xaaf58b67 write_cache_pages +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab27f66d add_disk +EXPORT_SYMBOL vmlinux 0xab42ad66 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xab570e42 blk_start_queue +EXPORT_SYMBOL vmlinux 0xab647c1a i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0xab6a2e8e flush_hash_entry +EXPORT_SYMBOL vmlinux 0xab6cceb5 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0xab827d5d xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xab9c8c58 pci_pme_active +EXPORT_SYMBOL vmlinux 0xabadf759 security_path_rmdir +EXPORT_SYMBOL vmlinux 0xabb92031 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0xabba4c28 kill_fasync +EXPORT_SYMBOL vmlinux 0xabbd15fa iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0xabc47360 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL vmlinux 0xabfbb596 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac220960 genphy_suspend +EXPORT_SYMBOL vmlinux 0xac5548e1 bd_release +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac707a28 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xaccd84db sysctl_string +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xace6165f add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacfee935 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad382fba wireless_spy_update +EXPORT_SYMBOL vmlinux 0xad3cc147 generic_setlease +EXPORT_SYMBOL vmlinux 0xad48744c ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0xad4ebe22 _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xad6a6810 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadd1e971 alignment_exception +EXPORT_SYMBOL vmlinux 0xaddb57da __kfree_skb +EXPORT_SYMBOL vmlinux 0xaddd4770 __debugger_iabr_match +EXPORT_SYMBOL vmlinux 0xadf42bd5 __request_region +EXPORT_SYMBOL vmlinux 0xae1eab75 pci_get_class +EXPORT_SYMBOL vmlinux 0xae2785ae matroxfb_wait_for_sync +EXPORT_SYMBOL vmlinux 0xae41a7f7 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0xae577ef8 backlight_device_register +EXPORT_SYMBOL vmlinux 0xae6a9384 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xae7a4cc8 phy_attach_direct +EXPORT_SYMBOL vmlinux 0xae7daf2e tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaec7851e inode_add_bytes +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaeff5f95 dm_io +EXPORT_SYMBOL vmlinux 0xaf1019e3 simple_transaction_release +EXPORT_SYMBOL vmlinux 0xaf1bc426 block_write_begin +EXPORT_SYMBOL vmlinux 0xaf27e522 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf541d22 dev_gro_receive +EXPORT_SYMBOL vmlinux 0xaf67c2af jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xaf71fc3c nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xaf78130f blk_start_request +EXPORT_SYMBOL vmlinux 0xafa7bd33 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xb00107f6 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xb04cb621 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xb05af30e devm_ioremap_prot +EXPORT_SYMBOL vmlinux 0xb080d55f dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xb0a6ffe9 switch_mmu_context +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0bfe8b2 sock_wake_async +EXPORT_SYMBOL vmlinux 0xb0c12bef security_inode_permission +EXPORT_SYMBOL vmlinux 0xb0c77c29 inet_frag_find +EXPORT_SYMBOL vmlinux 0xb0d5ec83 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xb0e0cb62 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0ed7b6e jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xb10f1f8f cdrom_media_changed +EXPORT_SYMBOL vmlinux 0xb11b6795 udp_proc_register +EXPORT_SYMBOL vmlinux 0xb14d788f tcf_exts_validate +EXPORT_SYMBOL vmlinux 0xb14fc3f9 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0xb15bd8fa tb_ticks_per_sec +EXPORT_SYMBOL vmlinux 0xb16103e6 security_path_rename +EXPORT_SYMBOL vmlinux 0xb18f3f06 ide_xfer_verbose +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a67360 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xb1b547d2 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xb1b859b6 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xb1bc2c12 scsi_init_io +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1c9a2af fail_migrate_page +EXPORT_SYMBOL vmlinux 0xb1eb1649 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xb1f0bd20 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb20e384c deactivate_locked_super +EXPORT_SYMBOL vmlinux 0xb223af17 netlink_unicast +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb233762c atomic64_set +EXPORT_SYMBOL vmlinux 0xb257c1ed scsi_print_command +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb2a2fbf9 of_match_device +EXPORT_SYMBOL vmlinux 0xb2ba62b5 __wait_on_bit +EXPORT_SYMBOL vmlinux 0xb2c969cb gen_pool_create +EXPORT_SYMBOL vmlinux 0xb2e887a7 mdiobus_free +EXPORT_SYMBOL vmlinux 0xb302e442 genphy_resume +EXPORT_SYMBOL vmlinux 0xb315bf7a pcim_iomap +EXPORT_SYMBOL vmlinux 0xb34b907a key_type_keyring +EXPORT_SYMBOL vmlinux 0xb376d79d radix_tree_tagged +EXPORT_SYMBOL vmlinux 0xb37d881b scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3996431 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3a74cc8 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0xb3efdd3f sync_inode +EXPORT_SYMBOL vmlinux 0xb4060bc9 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0xb4101d4a pci_release_region +EXPORT_SYMBOL vmlinux 0xb423d1f6 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb455b438 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0xb46c942d pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xb46ce6b2 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4b4ef63 matroxfb_enable_irq +EXPORT_SYMBOL vmlinux 0xb4c2ae4a bdi_register +EXPORT_SYMBOL vmlinux 0xb4f03317 skb_put +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb50a4cf6 d_delete +EXPORT_SYMBOL vmlinux 0xb53a4336 kmap_pte +EXPORT_SYMBOL vmlinux 0xb5406426 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xb543a1dc kmalloc_caches +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb54dda5f __register_binfmt +EXPORT_SYMBOL vmlinux 0xb5687308 napi_complete +EXPORT_SYMBOL vmlinux 0xb5774f20 remove_inode_hash +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5ce37a9 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xb60691e1 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0xb645fadf lock_may_write +EXPORT_SYMBOL vmlinux 0xb6599b9a machine_check_exception +EXPORT_SYMBOL vmlinux 0xb65a5327 inet_getname +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb67cb49d tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0xb69c0726 of_node_get +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6be40d5 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0xb6bf6aac invalidate_partition +EXPORT_SYMBOL vmlinux 0xb6bf879d install_exec_creds +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6e67b5f arp_find +EXPORT_SYMBOL vmlinux 0xb703911e release_firmware +EXPORT_SYMBOL vmlinux 0xb753bcc8 __ashrdi3 +EXPORT_SYMBOL vmlinux 0xb7594586 tty_throttle +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7bd455b of_mdiobus_register +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7f33f7e mod_timer_pending +EXPORT_SYMBOL vmlinux 0xb807e2dc inet_dgram_ops +EXPORT_SYMBOL vmlinux 0xb83b925b devm_free_irq +EXPORT_SYMBOL vmlinux 0xb84337dd __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xb85f05ec posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb883d7b9 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xb88c8f83 i2c_release_client +EXPORT_SYMBOL vmlinux 0xb88e21a0 dput +EXPORT_SYMBOL vmlinux 0xb88f2082 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb89f3f0d input_grab_device +EXPORT_SYMBOL vmlinux 0xb8aa2342 __check_region +EXPORT_SYMBOL vmlinux 0xb8bdbfcb scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0xb8bf0a87 may_umount +EXPORT_SYMBOL vmlinux 0xb8bff691 misc_register +EXPORT_SYMBOL vmlinux 0xb8ebf665 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0xb906f1ab tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xb9117248 ip_ct_attach +EXPORT_SYMBOL vmlinux 0xb93253ae ida_get_new +EXPORT_SYMBOL vmlinux 0xb9333bc6 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0xb97fc538 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb98ef804 vm_stat +EXPORT_SYMBOL vmlinux 0xb992d544 tty_vhangup +EXPORT_SYMBOL vmlinux 0xb99ec461 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xb9a35ab1 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0xb9af3497 bdget +EXPORT_SYMBOL vmlinux 0xb9f540da sg_miter_next +EXPORT_SYMBOL vmlinux 0xba11f7d3 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xba1851b2 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xba339809 copy_io_context +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba803c3b inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0xbaa66dd4 netlink_ack +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbab0e2bf ipv4_specific +EXPORT_SYMBOL vmlinux 0xbabc9922 scsi_execute +EXPORT_SYMBOL vmlinux 0xbabdb37c sock_i_uid +EXPORT_SYMBOL vmlinux 0xbac19385 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xbac9aa06 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xbaca8e54 fb_blank +EXPORT_SYMBOL vmlinux 0xbacc4646 vm_map_ram +EXPORT_SYMBOL vmlinux 0xbb14758e dcache_dir_close +EXPORT_SYMBOL vmlinux 0xbb15572e revalidate_disk +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb38d06c call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb6f6d3e pci_disable_msi +EXPORT_SYMBOL vmlinux 0xbb7a91dc _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xbb8148ca dm_unregister_target +EXPORT_SYMBOL vmlinux 0xbb87665a tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xbb98a724 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbba83632 matroxfb_g450_connect +EXPORT_SYMBOL vmlinux 0xbbcb633f proto_register +EXPORT_SYMBOL vmlinux 0xbbcffde9 of_n_size_cells +EXPORT_SYMBOL vmlinux 0xbbedd60d of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0xbbffabf6 kunmap_high +EXPORT_SYMBOL vmlinux 0xbc25e8c1 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xbc316de4 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0xbc31b28f matroxfb_g450_setpll_cond +EXPORT_SYMBOL vmlinux 0xbc35ded5 bio_init +EXPORT_SYMBOL vmlinux 0xbc49d301 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0xbc889918 block_sync_page +EXPORT_SYMBOL vmlinux 0xbc998c2f simple_release_fs +EXPORT_SYMBOL vmlinux 0xbcb9f936 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0xbd34c390 generic_permission +EXPORT_SYMBOL vmlinux 0xbd3b6be1 pci_release_regions +EXPORT_SYMBOL vmlinux 0xbd4b79ac console_start +EXPORT_SYMBOL vmlinux 0xbd4cc9d1 console_stop +EXPORT_SYMBOL vmlinux 0xbd509418 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xbd8d541d flush_hash_pages +EXPORT_SYMBOL vmlinux 0xbd927461 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0xbd9e5d49 __lshrdi3 +EXPORT_SYMBOL vmlinux 0xbdae30c7 idr_for_each +EXPORT_SYMBOL vmlinux 0xbdaead38 dm_get_device +EXPORT_SYMBOL vmlinux 0xbdb31c0b names_cachep +EXPORT_SYMBOL vmlinux 0xbdc081fd phy_device_free +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe0cfbe0 scsi_remove_target +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe324d57 scsi_register +EXPORT_SYMBOL vmlinux 0xbe3a7bd5 security_path_truncate +EXPORT_SYMBOL vmlinux 0xbe5151b2 of_mm_gpiochip_add +EXPORT_SYMBOL vmlinux 0xbe553bec send_sig_info +EXPORT_SYMBOL vmlinux 0xbe63ee40 request_resource +EXPORT_SYMBOL vmlinux 0xbe67d4fe cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0xbe7bb414 neigh_parms_release +EXPORT_SYMBOL vmlinux 0xbe8a1485 mempool_create +EXPORT_SYMBOL vmlinux 0xbe8e1378 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xbe95e6fc skb_clone +EXPORT_SYMBOL vmlinux 0xbe9bf593 journal_set_features +EXPORT_SYMBOL vmlinux 0xbe9f5cda register_framebuffer +EXPORT_SYMBOL vmlinux 0xbeacc1aa pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf051484 unregister_snap_client +EXPORT_SYMBOL vmlinux 0xbf46794c ide_dump_status +EXPORT_SYMBOL vmlinux 0xbf509e92 i2c_master_send +EXPORT_SYMBOL vmlinux 0xbf5ec1ba of_find_node_with_property +EXPORT_SYMBOL vmlinux 0xbf6ed90d jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf82ea61 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xbf870b8f kfree_skb +EXPORT_SYMBOL vmlinux 0xbf8d93f7 posix_acl_permission +EXPORT_SYMBOL vmlinux 0xbf99dd4d framebuffer_release +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbffcc91d set_binfmt +EXPORT_SYMBOL vmlinux 0xc01f6879 kmap_high +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc0783f8e udplite_prot +EXPORT_SYMBOL vmlinux 0xc0788521 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xc081e359 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xc0a3730e xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0b0f85e gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0c7f43b sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xc0d84ced cuda_poll +EXPORT_SYMBOL vmlinux 0xc10321cf neigh_seq_next +EXPORT_SYMBOL vmlinux 0xc10397b8 cdev_alloc +EXPORT_SYMBOL vmlinux 0xc1164c64 pci_clear_master +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc13a64f6 mach_powermac +EXPORT_SYMBOL vmlinux 0xc13afb25 d_path +EXPORT_SYMBOL vmlinux 0xc15e073c generic_find_next_zero_le_bit +EXPORT_SYMBOL vmlinux 0xc173c953 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xc18c29e7 scsi_block_requests +EXPORT_SYMBOL vmlinux 0xc18e9f9b nlmsg_notify +EXPORT_SYMBOL vmlinux 0xc19bee9e tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xc1ba49a9 dev_base_lock +EXPORT_SYMBOL vmlinux 0xc1d7200e blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0xc1dd4a7f adb_request +EXPORT_SYMBOL vmlinux 0xc20083c7 override_creds +EXPORT_SYMBOL vmlinux 0xc20d9f59 sock_register +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc2abe7fb read_dev_sector +EXPORT_SYMBOL vmlinux 0xc2afefe8 user_revoke +EXPORT_SYMBOL vmlinux 0xc2b24d5b dev_trans_start +EXPORT_SYMBOL vmlinux 0xc2d18883 dev_unicast_add +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e2c9d9 eth_header_parse +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2e792ce bmap +EXPORT_SYMBOL vmlinux 0xc2f684ce phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0xc33c5ea1 DAC1064_global_init +EXPORT_SYMBOL vmlinux 0xc33e9449 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc368849f nvram_sync +EXPORT_SYMBOL vmlinux 0xc38675b1 netdev_set_master +EXPORT_SYMBOL vmlinux 0xc38b6121 key_link +EXPORT_SYMBOL vmlinux 0xc39c47af __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xc3cd7498 filemap_flush +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc40dd41b dquot_commit +EXPORT_SYMBOL vmlinux 0xc416ac4a kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xc48317ad free_netdev +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4f68bc8 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0xc5103679 simple_getattr +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc53e41ea i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0xc5410374 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc55a1fce is_container_init +EXPORT_SYMBOL vmlinux 0xc575771e sg_free_table +EXPORT_SYMBOL vmlinux 0xc5af3e95 vmap +EXPORT_SYMBOL vmlinux 0xc5f05c60 generic_write_end +EXPORT_SYMBOL vmlinux 0xc633495b schedule_work +EXPORT_SYMBOL vmlinux 0xc64af11d skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xc651950e vc_cons +EXPORT_SYMBOL vmlinux 0xc6600bf8 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0xc69ffbf5 of_dev_get +EXPORT_SYMBOL vmlinux 0xc6b6d78c wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0xc7131591 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc74a1c84 __nla_put +EXPORT_SYMBOL vmlinux 0xc797f46b tty_port_hangup +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc79ec68c xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7abf868 of_get_mac_address +EXPORT_SYMBOL vmlinux 0xc7ad2fb8 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xc7e0c6aa simple_dir_operations +EXPORT_SYMBOL vmlinux 0xc7e557ef key_revoke +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc8010dc9 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0xc8078c04 macio_release_resources +EXPORT_SYMBOL vmlinux 0xc8206a1a simple_pin_fs +EXPORT_SYMBOL vmlinux 0xc827fb6c clear_user_page +EXPORT_SYMBOL vmlinux 0xc833bb99 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0xc85322cf blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0xc86abe9c kobject_del +EXPORT_SYMBOL vmlinux 0xc89bdce7 pci_assign_resource +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8f4b484 serio_close +EXPORT_SYMBOL vmlinux 0xc8ff844d matroxfb_g450_setclk +EXPORT_SYMBOL vmlinux 0xc9100e12 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xc92dfe7a fsync_bdev +EXPORT_SYMBOL vmlinux 0xc9421c7c tty_port_tty_get +EXPORT_SYMBOL vmlinux 0xc9513b9b iunique +EXPORT_SYMBOL vmlinux 0xc96476e3 input_unregister_device +EXPORT_SYMBOL vmlinux 0xc983166e dentry_unhash +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9afe417 tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0xc9b4110d ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xc9d3a7ce input_open_device +EXPORT_SYMBOL vmlinux 0xc9d71814 netpoll_setup +EXPORT_SYMBOL vmlinux 0xca162a38 kmem_cache_create +EXPORT_SYMBOL vmlinux 0xca178913 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xca38af38 datagram_poll +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca6f5041 do_sync_read +EXPORT_SYMBOL vmlinux 0xca825895 pmu_suspend +EXPORT_SYMBOL vmlinux 0xcaa1dc1f dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0xcac0c28a jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xcaccf9ce phy_connect +EXPORT_SYMBOL vmlinux 0xcacd272d atomic64_sub_return +EXPORT_SYMBOL vmlinux 0xcacd7fec jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xcad08e48 mmu_hash_lock +EXPORT_SYMBOL vmlinux 0xcb2cd4fe ida_destroy +EXPORT_SYMBOL vmlinux 0xcb3333fe sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0xcb4e667a __mutex_init +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb7bc48a bit_waitqueue +EXPORT_SYMBOL vmlinux 0xcb8a6bc3 __lock_page +EXPORT_SYMBOL vmlinux 0xcb96b70c sk_stream_error +EXPORT_SYMBOL vmlinux 0xcbb330f5 of_device_alloc +EXPORT_SYMBOL vmlinux 0xcbbf7666 truncate_pagecache +EXPORT_SYMBOL vmlinux 0xcbcc7acb register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xcbeebf78 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0xcc070f90 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0xcc0873ea security_path_symlink +EXPORT_SYMBOL vmlinux 0xcc26f19b netif_rx +EXPORT_SYMBOL vmlinux 0xcc2aab70 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc5f19a3 sock_create +EXPORT_SYMBOL vmlinux 0xcc722c4e vfs_mkdir +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xccbf09d7 udplite_table +EXPORT_SYMBOL vmlinux 0xcce4180f skb_find_text +EXPORT_SYMBOL vmlinux 0xcce81f4f otg_put_transceiver +EXPORT_SYMBOL vmlinux 0xccecebc1 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xcd33a201 __scm_send +EXPORT_SYMBOL vmlinux 0xcd57478d bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0xcd7cad1e get_pci_dma_ops +EXPORT_SYMBOL vmlinux 0xcd8a959e skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xcddfe591 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0xcde37beb idr_replace +EXPORT_SYMBOL vmlinux 0xce048ea8 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xce0c9d74 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0xce2e2c86 cdev_del +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce409cda pmac_set_early_video_resume +EXPORT_SYMBOL vmlinux 0xce411a3e pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce5bc2e5 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0xce66518d default_file_splice_read +EXPORT_SYMBOL vmlinux 0xce880716 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xce8af816 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0xcf1a4c67 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0xcf22da3d blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0xcf3406a0 security_path_unlink +EXPORT_SYMBOL vmlinux 0xcf3bd289 unregister_key_type +EXPORT_SYMBOL vmlinux 0xcf6121c8 nla_put +EXPORT_SYMBOL vmlinux 0xcf6ad3ee filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0xcf735e18 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xcf73cf92 d_alloc +EXPORT_SYMBOL vmlinux 0xcf82760d scsi_host_get +EXPORT_SYMBOL vmlinux 0xcf901697 __strnlen_user +EXPORT_SYMBOL vmlinux 0xcfaf79ba mempool_alloc +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfd31b65 dquot_acquire +EXPORT_SYMBOL vmlinux 0xcfe20ed8 drop_super +EXPORT_SYMBOL vmlinux 0xcfed5132 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd00652f3 timecompare_offset +EXPORT_SYMBOL vmlinux 0xd00fabfb vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd0213c72 pci_match_id +EXPORT_SYMBOL vmlinux 0xd03d55d9 dev_change_flags +EXPORT_SYMBOL vmlinux 0xd03f322c blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xd08c413f stop_tty +EXPORT_SYMBOL vmlinux 0xd09f997c vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0xd0a45fa5 pmu_enable_irled +EXPORT_SYMBOL vmlinux 0xd0acb7e2 poll_freewait +EXPORT_SYMBOL vmlinux 0xd0c38b60 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0xd0d4d8ff pci_alloc_consistent +EXPORT_SYMBOL vmlinux 0xd0dccc5f do_sync_write +EXPORT_SYMBOL vmlinux 0xd0e4a5ed cont_write_begin +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0ee4ba7 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0xd0fb97de mnt_pin +EXPORT_SYMBOL vmlinux 0xd101024d xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xd11bbde9 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xd1262886 rtas_data_buf +EXPORT_SYMBOL vmlinux 0xd12fe5ac proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd16af02f journal_get_create_access +EXPORT_SYMBOL vmlinux 0xd1912529 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xd20ae53b block_write_end +EXPORT_SYMBOL vmlinux 0xd22f9c65 alloc_trdev +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd288bbaa genl_register_ops +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2dff620 llc_sap_open +EXPORT_SYMBOL vmlinux 0xd2e41c94 pci_restore_state +EXPORT_SYMBOL vmlinux 0xd309550b ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0xd346d19a ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xd346f70d scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0xd3589fd9 km_policy_expired +EXPORT_SYMBOL vmlinux 0xd35c440e vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xd369f8d1 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xd3abc7a2 kill_block_super +EXPORT_SYMBOL vmlinux 0xd3b2a9ed dst_release +EXPORT_SYMBOL vmlinux 0xd3b43b04 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0xd3e6f60d cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xd409383c pmu_request +EXPORT_SYMBOL vmlinux 0xd418e1c0 adjust_resource +EXPORT_SYMBOL vmlinux 0xd41a1a57 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0xd45ebd35 bio_put +EXPORT_SYMBOL vmlinux 0xd47f08d3 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xd48fae84 phy_register_fixup +EXPORT_SYMBOL vmlinux 0xd4998957 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xd4a0c891 __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0xd4a9a8d6 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0xd4b23e48 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0xd4d25848 find_get_page +EXPORT_SYMBOL vmlinux 0xd4d34bb0 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd548af2e matrox_cfbX_init +EXPORT_SYMBOL vmlinux 0xd55acff0 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0xd55be1f6 elv_rb_del +EXPORT_SYMBOL vmlinux 0xd55e9b74 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0xd566afb6 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xd5688a7a radix_tree_insert +EXPORT_SYMBOL vmlinux 0xd57ab332 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5a13f6c get_user_pages +EXPORT_SYMBOL vmlinux 0xd5b2e52a single_step_exception +EXPORT_SYMBOL vmlinux 0xd5da0513 d_splice_alias +EXPORT_SYMBOL vmlinux 0xd5e8444a __div64_32 +EXPORT_SYMBOL vmlinux 0xd5edda19 generic_file_open +EXPORT_SYMBOL vmlinux 0xd600eaf7 simple_link +EXPORT_SYMBOL vmlinux 0xd6181739 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0xd627480b strncat +EXPORT_SYMBOL vmlinux 0xd62b9803 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd63489e3 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xd6503681 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0xd69b30e0 atomic64_add_unless +EXPORT_SYMBOL vmlinux 0xd69c23b6 key_validate +EXPORT_SYMBOL vmlinux 0xd69ebc51 _read_trylock +EXPORT_SYMBOL vmlinux 0xd69f493f scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6c43223 tcf_register_action +EXPORT_SYMBOL vmlinux 0xd6cb175c atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f069c4 xfrm_init_state +EXPORT_SYMBOL vmlinux 0xd708d362 netlink_broadcast +EXPORT_SYMBOL vmlinux 0xd7154121 down_interruptible +EXPORT_SYMBOL vmlinux 0xd7174588 sock_create_lite +EXPORT_SYMBOL vmlinux 0xd7471fb4 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xd74ac2eb soft_cursor +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7b674de sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xd7beb81e macio_release_resource +EXPORT_SYMBOL vmlinux 0xd7bfd233 take_over_console +EXPORT_SYMBOL vmlinux 0xd7d4667d d_validate +EXPORT_SYMBOL vmlinux 0xd7eb4574 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xd7eb5236 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0xd7f6b468 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0xd82edb6c __f_setown +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd8385b5a netpoll_parse_options +EXPORT_SYMBOL vmlinux 0xd8477425 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xd855bc95 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0xd85e677b vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xd865849e udp_poll +EXPORT_SYMBOL vmlinux 0xd86d148a journal_stop +EXPORT_SYMBOL vmlinux 0xd894fd17 log_wait_commit +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8ab1fae of_find_compatible_node +EXPORT_SYMBOL vmlinux 0xd8b02de1 neigh_table_clear +EXPORT_SYMBOL vmlinux 0xd8d3fa63 page_follow_link_light +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8f4f329 write_inode_now +EXPORT_SYMBOL vmlinux 0xd92514ca agp_special_page +EXPORT_SYMBOL vmlinux 0xd9289aad swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0xd963a74a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xd96c8608 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd9764414 ide_wait_stat +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9b24dbb i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xd9b960d3 slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0xd9bac924 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0xd9bbb3c5 page_symlink +EXPORT_SYMBOL vmlinux 0xd9ce8f0c strnlen +EXPORT_SYMBOL vmlinux 0xd9fa29ea iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda3b9339 unregister_qdisc +EXPORT_SYMBOL vmlinux 0xda536763 security_path_link +EXPORT_SYMBOL vmlinux 0xda7160f7 task_nice +EXPORT_SYMBOL vmlinux 0xda7b2e2b sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda80215d dquot_transfer +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda98479d inet_add_protocol +EXPORT_SYMBOL vmlinux 0xdaa270b6 generic_unplug_device +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdaa92c55 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0xdb03a7fc journal_load +EXPORT_SYMBOL vmlinux 0xdb09708f __wake_up +EXPORT_SYMBOL vmlinux 0xdb3ca172 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdb4e800f nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xdb6cbaf6 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbd08df7 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc058402 skb_seq_read +EXPORT_SYMBOL vmlinux 0xdc07e4b5 get_sb_nodev +EXPORT_SYMBOL vmlinux 0xdc14203f journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc36cb0a force_sig +EXPORT_SYMBOL vmlinux 0xdc3bb959 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc756c39 dev_get_stats +EXPORT_SYMBOL vmlinux 0xdc808410 ps2_init +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdca57a0e pci_read_vpd +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcca8569 ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0xdcd0eda0 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xdcd15c8b secpath_dup +EXPORT_SYMBOL vmlinux 0xdcefb9a5 pmu_resume +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd264ca4 pmac_suspend_agp_for_card +EXPORT_SYMBOL vmlinux 0xdd27fa87 memchr +EXPORT_SYMBOL vmlinux 0xdd326618 insert_inode_locked +EXPORT_SYMBOL vmlinux 0xdd56a105 udp_disconnect +EXPORT_SYMBOL vmlinux 0xdd5a37a7 _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0xdd63cd10 posix_lock_file +EXPORT_SYMBOL vmlinux 0xdd660d7d register_nls +EXPORT_SYMBOL vmlinux 0xdd6bfccd radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0xdd88f06d mark_info_dirty +EXPORT_SYMBOL vmlinux 0xdd929e47 of_phy_connect_fixed_link +EXPORT_SYMBOL vmlinux 0xdd9fd9f8 kernel_getsockname +EXPORT_SYMBOL vmlinux 0xddce7f0a elv_rb_find +EXPORT_SYMBOL vmlinux 0xddd113a6 dev_add_pack +EXPORT_SYMBOL vmlinux 0xddd1757a __ps2_command +EXPORT_SYMBOL vmlinux 0xddd773dd lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0xdde25489 _write_lock +EXPORT_SYMBOL vmlinux 0xdde83b79 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0xddfc8251 gen_pool_add +EXPORT_SYMBOL vmlinux 0xde441ab6 matroxfb_vgaHWinit +EXPORT_SYMBOL vmlinux 0xde56e5d6 bioset_create +EXPORT_SYMBOL vmlinux 0xde73e190 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdec8028f napi_skb_finish +EXPORT_SYMBOL vmlinux 0xded0fdf8 generic_block_bmap +EXPORT_SYMBOL vmlinux 0xdf06c120 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0xdf26126e sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xdf493534 journal_init_dev +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf54c631 blk_sync_queue +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf62e6e6 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf9d9528 unlock_super +EXPORT_SYMBOL vmlinux 0xdf9fec8a bioset_free +EXPORT_SYMBOL vmlinux 0xdfa07fad per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0xdfa91333 validate_sp +EXPORT_SYMBOL vmlinux 0xdfc61609 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xdfd54d45 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0xdfe04578 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0xdfeaa9b0 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0xdff43ed4 __debugger +EXPORT_SYMBOL vmlinux 0xdff56e64 adb_poll +EXPORT_SYMBOL vmlinux 0xdffc9639 journal_get_write_access +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe091639c ether_setup +EXPORT_SYMBOL vmlinux 0xe09d0fe8 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0be133e kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xe0e446dc vfs_dq_drop +EXPORT_SYMBOL vmlinux 0xe0f0c3fc sock_wmalloc +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe13692d5 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0xe166be09 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xe16dd53d dev_mc_sync +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe17d87b6 single_release +EXPORT_SYMBOL vmlinux 0xe1a04241 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0xe1bef7fc generic_write_checks +EXPORT_SYMBOL vmlinux 0xe1d22951 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0xe1d75eb3 kset_register +EXPORT_SYMBOL vmlinux 0xe21c4e03 d_alloc_name +EXPORT_SYMBOL vmlinux 0xe2216ea4 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0xe2220cac skb_dma_unmap +EXPORT_SYMBOL vmlinux 0xe2226ca5 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL vmlinux 0xe236e228 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe24e887d scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0xe25c5933 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0xe267fbbd bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xe27a63d2 pci_dev_driver +EXPORT_SYMBOL vmlinux 0xe2870b33 dev_get_by_index +EXPORT_SYMBOL vmlinux 0xe2a6bf21 unlock_buffer +EXPORT_SYMBOL vmlinux 0xe2b8f9e6 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0xe2bd0877 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0xe2c5810b pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2dc7a4d netif_napi_add +EXPORT_SYMBOL vmlinux 0xe2e0c7c6 __flush_icache_range +EXPORT_SYMBOL vmlinux 0xe2e16281 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0xe2e66950 pskb_expand_head +EXPORT_SYMBOL vmlinux 0xe2e7a8de sk_receive_skb +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe30c7366 backlight_force_update +EXPORT_SYMBOL vmlinux 0xe314c522 inet_del_protocol +EXPORT_SYMBOL vmlinux 0xe31bc742 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0xe31bdd8b blk_integrity_compare +EXPORT_SYMBOL vmlinux 0xe3303af5 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xe33c7558 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0xe361177e of_scan_pci_bridge +EXPORT_SYMBOL vmlinux 0xe38ee2fb __splice_from_pipe +EXPORT_SYMBOL vmlinux 0xe3ac93b2 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0xe3e3dc34 mac_find_mode +EXPORT_SYMBOL vmlinux 0xe3e9261b unregister_8022_client +EXPORT_SYMBOL vmlinux 0xe421ddbf task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0xe423177d put_mnt_ns +EXPORT_SYMBOL vmlinux 0xe4288ae6 pagecache_write_end +EXPORT_SYMBOL vmlinux 0xe42bc9e4 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0xe43b0722 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xe4430d1b serio_reconnect +EXPORT_SYMBOL vmlinux 0xe475faa8 sk_reset_timer +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4a87306 misc_deregister +EXPORT_SYMBOL vmlinux 0xe4b7df2e input_get_keycode +EXPORT_SYMBOL vmlinux 0xe4bb72e5 dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0xe4bff775 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xe4cc58f9 input_inject_event +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe5077a8f mempool_destroy +EXPORT_SYMBOL vmlinux 0xe5092351 unregister_cdrom +EXPORT_SYMBOL vmlinux 0xe50ab9a6 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe556bae2 journal_clear_err +EXPORT_SYMBOL vmlinux 0xe56cff0b is_bad_inode +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe581796b dm_table_put +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe5aea8f2 make_EII_client +EXPORT_SYMBOL vmlinux 0xe5be6d59 open_by_devnum +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5f299b3 do_splice_from +EXPORT_SYMBOL vmlinux 0xe5f8223f swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0xe63f54c8 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xe65189c3 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xe65aa2fa blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xe66c5599 do_truncate +EXPORT_SYMBOL vmlinux 0xe675ec33 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0xe686c4d7 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0xe693d854 security_path_mknod +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6a3d744 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xe6c0d384 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0xe6c651d4 set_bh_page +EXPORT_SYMBOL vmlinux 0xe6dd236d clear_pages +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6f812d1 skb_copy_expand +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe7212514 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xe7a236f8 audit_log_format +EXPORT_SYMBOL vmlinux 0xe7ce6197 d_add_ci +EXPORT_SYMBOL vmlinux 0xe7ce7439 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7ec1d63 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xe7f906a6 simple_transaction_get +EXPORT_SYMBOL vmlinux 0xe7fa942f dev_alloc_name +EXPORT_SYMBOL vmlinux 0xe80489e4 eth_change_mtu +EXPORT_SYMBOL vmlinux 0xe86332ca scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0xe8903e58 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xe89e8af9 key_put +EXPORT_SYMBOL vmlinux 0xe8c5dc1e page_put_link +EXPORT_SYMBOL vmlinux 0xe8c6d99b generic_fillattr +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe90391bd hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe96acd7d sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xe98ce293 seq_write +EXPORT_SYMBOL vmlinux 0xe9b553a6 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xe9d375ad path_get +EXPORT_SYMBOL vmlinux 0xe9e11b6b of_register_driver +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea146bd6 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea2d33a2 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0xea3f26e3 tty_name +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea858cb5 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xea998d98 put_disk +EXPORT_SYMBOL vmlinux 0xeaa3b592 dev_open +EXPORT_SYMBOL vmlinux 0xeaa73785 eth_validate_addr +EXPORT_SYMBOL vmlinux 0xeab251b0 get_empty_filp +EXPORT_SYMBOL vmlinux 0xeac70b73 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xeae9a572 register_con_driver +EXPORT_SYMBOL vmlinux 0xeb02b6a8 skb_free_datagram +EXPORT_SYMBOL vmlinux 0xeb2a6841 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0xeb560c17 vfs_rename +EXPORT_SYMBOL vmlinux 0xeb8ed4e1 dcache_readdir +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeba2a1f7 rtas_indicator_present +EXPORT_SYMBOL vmlinux 0xebbaa595 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebd336ed eth_header +EXPORT_SYMBOL vmlinux 0xebee9578 path_put +EXPORT_SYMBOL vmlinux 0xec0b1ea9 dst_alloc +EXPORT_SYMBOL vmlinux 0xec0bfd61 kobject_set_name +EXPORT_SYMBOL vmlinux 0xec218f15 create_mnt_ns +EXPORT_SYMBOL vmlinux 0xec403371 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec9c3d10 dev_remove_pack +EXPORT_SYMBOL vmlinux 0xecb1fe00 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0xecbc5f44 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0xecc8efc2 skb_store_bits +EXPORT_SYMBOL vmlinux 0xeccf0087 security_file_permission +EXPORT_SYMBOL vmlinux 0xed442c26 path_lookup +EXPORT_SYMBOL vmlinux 0xed49ba48 downgrade_write +EXPORT_SYMBOL vmlinux 0xed4c5237 register_filesystem +EXPORT_SYMBOL vmlinux 0xed9fd7d8 phy_start +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedb7bcea vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xedb7d017 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedcfee05 sock_no_connect +EXPORT_SYMBOL vmlinux 0xedda61d3 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0xee105635 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xee288323 request_key_async +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee33800e jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xee3f653c tty_check_change +EXPORT_SYMBOL vmlinux 0xee4b0dee xfrm_state_delete +EXPORT_SYMBOL vmlinux 0xee59412f adb_try_handler_change +EXPORT_SYMBOL vmlinux 0xee8986ba blk_recount_segments +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeb7874f set_blocksize +EXPORT_SYMBOL vmlinux 0xeedb3f82 d_rehash +EXPORT_SYMBOL vmlinux 0xef098d53 dquot_release +EXPORT_SYMBOL vmlinux 0xef20e20a simple_fill_super +EXPORT_SYMBOL vmlinux 0xef4f8016 __invalidate_device +EXPORT_SYMBOL vmlinux 0xef560d91 should_remove_suid +EXPORT_SYMBOL vmlinux 0xef655404 get_phy_id +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef786228 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0xef8b0fb8 bio_copy_user +EXPORT_SYMBOL vmlinux 0xefd059f0 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0xefd826d0 set_security_override +EXPORT_SYMBOL vmlinux 0xefdc8e9b dm_io_client_create +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefde1bbe flush_dcache_range +EXPORT_SYMBOL vmlinux 0xefeb7c89 dm_table_get_size +EXPORT_SYMBOL vmlinux 0xeff5f71f ida_remove +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf02343ae xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0xf02a44aa scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf097747c seq_path +EXPORT_SYMBOL vmlinux 0xf09cf232 sockfd_lookup +EXPORT_SYMBOL vmlinux 0xf0a21f91 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xf0af6f92 default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0xf0b9567c vfs_writev +EXPORT_SYMBOL vmlinux 0xf0c6b658 __blk_run_queue +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf134f626 ps2_drain +EXPORT_SYMBOL vmlinux 0xf15f1149 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xf171bb84 kill_pgrp +EXPORT_SYMBOL vmlinux 0xf1743c23 vfs_readv +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1981f08 iput +EXPORT_SYMBOL vmlinux 0xf19e9355 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xf1ce1be6 __break_lease +EXPORT_SYMBOL vmlinux 0xf1da11a8 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1dd9fb3 down_read_trylock +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e2b354 blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf20971b9 __nla_reserve +EXPORT_SYMBOL vmlinux 0xf20d5d95 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf220569f d_find_alias +EXPORT_SYMBOL vmlinux 0xf24cb978 give_up_console +EXPORT_SYMBOL vmlinux 0xf2508d7f new_inode +EXPORT_SYMBOL vmlinux 0xf2632fc0 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xf27b8b9d no_llseek +EXPORT_SYMBOL vmlinux 0xf2a530b7 gen_pool_free +EXPORT_SYMBOL vmlinux 0xf2c4fcf9 get_sb_pseudo +EXPORT_SYMBOL vmlinux 0xf2e9e5ec scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xf2fe5639 vfs_link +EXPORT_SYMBOL vmlinux 0xf306bfdc have_submounts +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf315e79e sk_free +EXPORT_SYMBOL vmlinux 0xf3183080 blkdev_put +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf3369a12 try_to_release_page +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf34e729b inode_init_once +EXPORT_SYMBOL vmlinux 0xf36258b3 scsi_dma_map +EXPORT_SYMBOL vmlinux 0xf381013d mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39bf4d9 put_cmsg +EXPORT_SYMBOL vmlinux 0xf3a528c0 genphy_config_advert +EXPORT_SYMBOL vmlinux 0xf3aa5975 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3c701ef get_write_access +EXPORT_SYMBOL vmlinux 0xf3fc0875 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xf40092c8 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xf42a8a78 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4449388 timer_interrupt +EXPORT_SYMBOL vmlinux 0xf44a8154 vfs_symlink +EXPORT_SYMBOL vmlinux 0xf458d89e nf_register_hook +EXPORT_SYMBOL vmlinux 0xf4e6d139 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0xf4e7b492 d_prune_aliases +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf50fef30 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0xf52321e0 atomic64_sub +EXPORT_SYMBOL vmlinux 0xf5245116 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf54dbad4 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xf56efd26 abort_creds +EXPORT_SYMBOL vmlinux 0xf577d37f journal_release_buffer +EXPORT_SYMBOL vmlinux 0xf5a62ecc _memset_io +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5e1558d crash_shutdown_unregister +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5eb91bd cfb_copyarea +EXPORT_SYMBOL vmlinux 0xf66e0d90 revert_creds +EXPORT_SYMBOL vmlinux 0xf69be488 wait_for_completion +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6dc2778 skb_tx_hash +EXPORT_SYMBOL vmlinux 0xf6eb2289 vfs_fsync +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf70384d7 __debugger_sstep +EXPORT_SYMBOL vmlinux 0xf70be764 submit_bh +EXPORT_SYMBOL vmlinux 0xf71521ba atomic64_add_return +EXPORT_SYMBOL vmlinux 0xf73a4ac2 blk_insert_request +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf7623914 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xf769bd36 vfs_getattr +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf798d343 sync_blockdev +EXPORT_SYMBOL vmlinux 0xf7ac5755 arp_xmit +EXPORT_SYMBOL vmlinux 0xf7b12aee __next_cpu +EXPORT_SYMBOL vmlinux 0xf7cc335f gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf7d4106c of_find_node_by_path +EXPORT_SYMBOL vmlinux 0xf7d556b0 vfs_readdir +EXPORT_SYMBOL vmlinux 0xf7d5fb05 unregister_quota_format +EXPORT_SYMBOL vmlinux 0xf7e38b3a journal_errno +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf870c1ab invalidate_inodes +EXPORT_SYMBOL vmlinux 0xf8b7a812 of_get_pci_address +EXPORT_SYMBOL vmlinux 0xf8c5978e ip_defrag +EXPORT_SYMBOL vmlinux 0xf8c75660 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0xf8fda569 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xf9460e35 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xf946c1bb journal_ack_err +EXPORT_SYMBOL vmlinux 0xf94b7a0e sock_recvmsg +EXPORT_SYMBOL vmlinux 0xf9571cf3 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xf964c322 ide_raw_taskfile +EXPORT_SYMBOL vmlinux 0xf96b1ed6 xrlim_allow +EXPORT_SYMBOL vmlinux 0xf98bae01 napi_reuse_skb +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b53413 pci_scan_slot +EXPORT_SYMBOL vmlinux 0xf9b58289 journal_lock_updates +EXPORT_SYMBOL vmlinux 0xf9c00db1 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0xf9c9d885 matroxfb_read_pins +EXPORT_SYMBOL vmlinux 0xf9eda088 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0xfa31cd3b kfifo_init +EXPORT_SYMBOL vmlinux 0xfa340fcd __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xfa4be02d blk_plug_device +EXPORT_SYMBOL vmlinux 0xfa60462d bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xfa95fb83 __netif_schedule +EXPORT_SYMBOL vmlinux 0xfa9dd504 timecompare_transform +EXPORT_SYMBOL vmlinux 0xfaa2c6ad llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xfadb5750 pmu_unlock +EXPORT_SYMBOL vmlinux 0xfadd6358 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0xfae0b8fb inode_sub_bytes +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb03ed23 neigh_destroy +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb1de440 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0xfb2c1462 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xfb481b45 dev_load +EXPORT_SYMBOL vmlinux 0xfb5427a7 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xfb6494ed generic_removexattr +EXPORT_SYMBOL vmlinux 0xfb663a96 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb7152d0 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xfb8d4eea matroxfb_vgaHWrestore +EXPORT_SYMBOL vmlinux 0xfba072a3 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0xfba0de47 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0xfba3a3b4 ide_set_handler +EXPORT_SYMBOL vmlinux 0xfbb4d528 pci_get_subsys +EXPORT_SYMBOL vmlinux 0xfbbac139 generic_ide_ioctl +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc35f95a of_get_cpu_node +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc40c262 generic_read_dir +EXPORT_SYMBOL vmlinux 0xfc4f57fe blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xfc533f85 schedule_work_on +EXPORT_SYMBOL vmlinux 0xfc5fba3c pmac_register_agp_pm +EXPORT_SYMBOL vmlinux 0xfc6ed21f nf_log_packet +EXPORT_SYMBOL vmlinux 0xfc8ca780 pci_busdev_to_OF_node +EXPORT_SYMBOL vmlinux 0xfc944ec1 __bio_clone +EXPORT_SYMBOL vmlinux 0xfc994132 napi_get_frags +EXPORT_SYMBOL vmlinux 0xfca0bfad of_platform_device_create +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc922a7 generic_show_options +EXPORT_SYMBOL vmlinux 0xfcd7f3f4 __secpath_destroy +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcdbd0b3 vfs_rmdir +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd0c5038 adb_unregister +EXPORT_SYMBOL vmlinux 0xfd1cc793 inet_sendmsg +EXPORT_SYMBOL vmlinux 0xfd33cee0 kobject_get +EXPORT_SYMBOL vmlinux 0xfd3be6ec init_buffer +EXPORT_SYMBOL vmlinux 0xfd3c4e95 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xfd95a21b scsi_device_get +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdbc0042 lro_flush_all +EXPORT_SYMBOL vmlinux 0xfded48ed enable_kernel_fp +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe08ec96 netif_carrier_off +EXPORT_SYMBOL vmlinux 0xfe11ba64 skb_recycle_check +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe7ca890 tty_write_room +EXPORT_SYMBOL vmlinux 0xfe9b36f2 ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xfea7f2e5 kick_iocb +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfeca77b0 mdiobus_scan +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1318bf posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xff1765c7 rtas_call +EXPORT_SYMBOL vmlinux 0xff1ab875 napi_gro_receive +EXPORT_SYMBOL vmlinux 0xff1c294e cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff29952b ide_stall_queue +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6dea25 smp_hw_index +EXPORT_SYMBOL vmlinux 0xff8763e9 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9bec08 kill_litter_super +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xba0f5cf1 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xde67c2a1 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x11e43570 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xb87cd4ca async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x739f890d async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xb084b060 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x74bde83f async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x7b49cca9 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xe2d0e93c async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xb40e01c5 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xea8ed9da async_xor_val +EXPORT_SYMBOL_GPL crypto/cryptd 0x029828e4 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x2333b352 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x9db165b8 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x9f2cc4b4 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xb1cff3a9 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xd04c5ea1 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xe50bf8a7 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0xde7b6d98 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x54b1ba3e __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0xc8d18c78 __pata_platform_remove +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0xdf309956 sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x11fb4b7f btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x6a7f5bda btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x7fc82e17 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x82c27d2a btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xc1c33a63 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xe4cd4b27 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x41c6f862 agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x4d772b00 agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x02daa359 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x10e12985 tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1a1ecdcc tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1a2871e7 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x37c63728 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x38952169 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x43c9cc84 tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x530c6dd5 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x576c2617 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6455d356 tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7c4c5d76 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x8b0f102d tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x903fe3e4 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa51d16cd tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xacc3b37c tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xba8a377d tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc7172bef tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xca102686 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd19c0119 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd46c3aaf tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xdd6209d0 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe572d6b6 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xf1dc2e51 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/connector/cn 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL drivers/connector/cn 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL drivers/connector/cn 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x11c96854 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x17c4655d edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x283e8bd5 edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2abe07cc edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x36567ba1 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x36dcaacb edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x37ca50d7 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x50d08826 edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x68ddc202 edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x72b7cfb7 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x7c22a420 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x812aad8d edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9200e9a5 edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa8a81973 edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb364da32 edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb9f994c4 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc131235c edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc2bc1f42 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc99d5640 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xd9cf2fbd edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xdb807c2c edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe3c6e433 edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe9001283 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xfff6ca29 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x86eea901 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xbf2045c2 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0f570b59 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x15162259 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1a0cf6d3 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1e0773cf hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x20c3b531 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2551314d hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x274c90a4 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x320ffd40 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x474e2c8a hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4983475a hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5cbb60b3 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5f28f66c hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x609b8c11 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9242baf4 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa8b9432b hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xabc0c596 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xaf29a984 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb818b80c hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbfc94f81 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd129009d hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd3a7fe43 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe0d656ac hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe7384f6f hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xea1d17d1 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfd29dd6f hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x60373e2c usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x62a66068 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xef49d5e1 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x0aa532c9 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x4659641a lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x9750d9be lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xb317d5d6 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe4bb6a2d lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x0b2ea5b6 hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x4feb8250 hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x2c1841f3 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00fb0e0c wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1d451356 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x830c9c9e wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x86412bcb wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x945da6ba wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x94a9a409 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb9b4530e wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xcc510e92 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xda4716d0 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe0a9cacc wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf13d53f0 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf22cf5de wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x0f7ee6fb wf_unregister_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x2046b6f7 wf_get_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x2390ab0e wf_put_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x40a837eb wf_find_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x75147afa wf_set_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x7b65114a wf_get_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x8029e397 wf_find_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x94765fac wf_critical_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x9a0bca50 wf_register_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xa2f19a49 wf_is_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xaf15726f wf_unregister_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xd44895af wf_put_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xdb7e8499 wf_register_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xdcf93097 wf_register_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xed82a14f wf_clear_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xfeae05a0 wf_unregister_sensor +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x6e2f4c94 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x95c6f440 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x120e5727 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3254bc09 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3a7ff75b dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3ac7e751 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3ecfc73a dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x46a7b488 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x47b1f67c dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5c1880f6 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5d87e9d6 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x75048dc5 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d3edff0 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7e7d3a62 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x832cd209 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x8f846ce3 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x94365cf5 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xb44e0706 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc3b3d1b4 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd1ab67ad dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xdc04f984 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xe2b43e3c dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf426cafa dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x272cca96 md_new_event +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x4afe595f md_allow_write +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xc865e2bd md_do_sync +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xd9b98b43 sync_page_io +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x0b8ef590 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x4a48d81c raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x38487a7d ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4782c390 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7f4f5256 ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x03ca5bcb saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x0a84c659 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x23bf9abf saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x55b2d9f7 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x6e3f50f9 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x7a2b3eec saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x897454c1 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xb04ffa4b saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xd63047f4 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdd1dc0af saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe8f66e72 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x387f43b2 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4cd3c544 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x6aa491da saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xa953c10c saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xce7f1168 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xd209b8c8 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xeb450278 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xbb9a386f microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x3d153487 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x9d40ddd2 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x662fbb9a tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x52539486 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x5fc24e7b tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x0a1fc90c tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x28eb073a tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x78bf1334 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x2b9ed621 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x42f7ed9e tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x7483fb90 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x18bd7f30 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x3e6bd973 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5b19c70f smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x689cd61b smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x77cd677f smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7b586a12 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7be253bc sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8a4a2b9a smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x8b596c2e sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x9fd44d58 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xaa0cc188 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xaa53a3a2 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xae7b4650 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb281fc9c smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb607d6f6 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc4dcb0c3 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd6bc4865 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd94c6e72 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe336320c smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x1ddc1be4 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x1dfb5c00 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x3c3bf958 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x4de8f0dd cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x5c5511c2 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x757bec72 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x9f850cfa cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xaaea8ce0 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xcfbe3d93 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xe73c2969 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xf17a9482 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0x92ccaf27 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x009a7c84 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x12a102c5 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x5e072b24 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x8561679e em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xbb69062f em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xdf0685fe em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x3317c429 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x73f124a3 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x965f3107 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xc510f723 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xf2951e69 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x0c9ac7e5 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x17a3a53c v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xbc7d9346 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xc72d7c19 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x0e2ed733 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x3c9959d9 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x5bd61b46 v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x7fe052e0 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x14dfd871 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x16ece48d videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x22eb7784 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x23220d3c videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x31d9bd39 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x55c02770 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x58f03486 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6762be7b videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6972876d videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6dc79e9b videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74f42261 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x830fbead videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x83a3e6fc videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x9dbb52da videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xaa46f394 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb0c00048 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb7a6058d videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc8150999 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc99fab2c videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xd6deaae7 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xe352b3ea videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xeff38f59 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf04138d9 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf44f68d9 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf628ce71 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x14d78ce9 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x33907d02 videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x45386b72 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5aad6d64 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x66f9427d videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x7229df2c videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x9fb4d674 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa5f56f5d videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa825c75b videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb96e66ee videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xd04e9b76 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xd18ead43 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf53a2aae videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xfcd6c1ea videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x497fbba0 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xac8fa725 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xebda36e3 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x62f7b282 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x98702352 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xab480faf v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xc9698419 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xf0063d64 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xfd7b93f1 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x0494a693 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x24fcb1c8 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x85294901 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x9e576518 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xbdfb3b3d i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xcfd8790f i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xd435ad97 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xe6a91ece i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x0dc9800e mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x286981f7 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3c94cae9 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x54800688 mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xe79d47b7 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xf11a6687 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xf15c0d14 mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x3d9e2aa9 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x7affff7f pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x058492c5 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0ba203e4 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x280d2607 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x4c330022 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5ab03388 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5b0497ec pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x81df830a pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x94871c9d pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xa686474e pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe4f97d2f pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xec289714 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x09d60b41 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x2ebdd42b pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x347d54e8 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x77cf4388 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xccb24811 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x15a3fd0b sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x200cf68b sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x297ab00d sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x65f4c77f sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x9768e764 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x536b408c ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x198358f3 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3fe2f02c wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x43b8f55c wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x814ae75b wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x839e62ab wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xc1bb91fb wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xca99c5d2 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xd002b145 wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe894f574 wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe964f09b wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe96feed7 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xef4cf3e0 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x05437805 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x149739e4 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1bb50c8c wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1bf14964 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2dd5f986 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x38b31c66 wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x6faebdaa wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x7732076e wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x92461a8b wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xa96f99cf wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xac3cacba wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xad663a96 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xce24d3b3 wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd8d63805 wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xe9ad5f05 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xef8d48f5 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x653bdd30 wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x7ba5fd08 wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x7eabc607 wm8400_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xa4a389ee wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x147bcf4a cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x6729d097 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xa7a46697 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xac4efcf8 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x192671eb sdio_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x1d4a9e19 sdio_release_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x28be9227 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x2abbbe07 sdio_writew +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3418f57f sdio_unregister_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3f80cb8c sdio_f0_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x50d37eac sdio_disable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x5782e6be sdio_readl +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x66ed268b sdio_enable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x7536875c sdio_memcpy_toio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x846db787 sdio_register_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x9613d4d3 sdio_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x994dcf35 sdio_align_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x9e8cb84a sdio_readsb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xa43c8d6b sdio_claim_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xb961cdc7 sdio_release_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xbf7a9d65 sdio_set_block_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc4bfec84 sdio_readw +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc6dee5f7 sdio_claim_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xdd03d95f sdio_f0_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xf11f1f32 sdio_writesb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xf9b3d4cb sdio_writel +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x08fe247b sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x169552f5 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x534a3b3b sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x84a2eb6d sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x9616dc23 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xae510bd6 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x0ac10f22 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x5cb11c77 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x75abe7d4 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x8c9e1925 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xea720a2f cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x6e5d8728 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xbdcd7408 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xdc1efd98 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xb83cc0c1 DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0xb83f027d DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xe48f2538 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2491bf4e register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x31a98363 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3468dceb parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x417d6e1e get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x45ab40fd get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x47738a90 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5e119c40 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x682e4241 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x74653f48 add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x77425b80 mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x834d5189 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x88002b61 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa2d89057 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xac19f531 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb0a0b75b get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdabd600c mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x7756fdb6 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xb77253dc register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xbf7e790f del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xe6ba1b18 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x21d87838 nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x939ad121 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x969a20dd nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xc32edbc8 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe9722c4e nand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x24618ebe onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x86eaa073 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x0a2befdc ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x2232a0a2 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x45e0f5ed ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8557d731 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb6049dd6 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb61bd86e ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbce4ab4c ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc2ad639b ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xd7ff8f39 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xeee987d6 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd1928db ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xff0c63e1 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x12caa80c can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x263f4c34 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x375ea137 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x519cb1e2 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x636421fd alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x756241d7 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x837c90fb can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x9cef7c85 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xcbf87f7a close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xdf3098a0 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x45965ec2 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x6cd9deaa unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xc1198758 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xf76461c5 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0357212d mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0cb0ea05 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0f1861eb mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x11d57802 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1253d826 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1e1f7190 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x245d1f29 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2dc3ef84 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3012bebb mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x31f2a548 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3395da05 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x371848f1 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x384f9576 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3ed516f0 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4190047a mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x433b1406 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x47f1e8c5 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4a4a4fa3 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5e858d62 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x60013696 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x60a8d733 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6836c9f0 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x71745449 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x78800ab4 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x802274f4 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9cbb1696 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab0a0d54 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xab8ebf35 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xabe1afc4 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf4345c1 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaf90d6aa mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb3cb2cb6 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc0e2c52b mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc210d913 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc2347796 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc49ac9b1 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xca55996e mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xce15af8d mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xce44ab69 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd41bb74f mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd6e31523 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd89fa8c9 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe0d2f7a8 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe3bf5330 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe46bd75b mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe57b3fb7 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe5a00833 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe84c26ee mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf11194aa mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfab09a26 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfc9866bb mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfe7ddb9b mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xff1eec28 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x2c74281b usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x490abf10 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x1bd47f22 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x2193a177 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x342e0c9f rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x75acd234 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xbbd438a7 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xc5100e61 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0958dbda usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x14b2294e usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1cec06d9 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2141cff3 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2cd8ccc7 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2fc0d972 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x307e03df usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x36920465 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x36c5cc01 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4720094c usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5905426f usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x65b76174 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x869ee072 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8ccff837 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9ad6a250 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa82fdda2 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb69cb9ad usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb6d59bb7 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc89d8a32 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xca4c04c9 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd8bd5e21 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe894acf8 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf1105a65 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf1394649 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00ebf46d i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x21db9076 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x235466c1 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x30c6843a i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x333268fb i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x49cd3611 i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5a8f838b i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x6e733930 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7fa4036e i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7ffe6dbf i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x97818ca1 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb713c655 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe773ec94 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xf1471b68 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x017be844 lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x060b0d94 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x0e93f6d0 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1bef2525 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x31f471ff lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x60f45cc2 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x677305ae lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6c8db269 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7a1d0112 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7ca53b85 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x8a34cac1 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x96f941b5 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb5286bc7 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb6311337 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xe09e5f03 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x141a3290 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x1f5c2c07 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x451cbe02 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x4d8deb8e lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x5ff9d071 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x7b2d82bf lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xebb4d5a8 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfd2c885d lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x43665c10 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x95a0e318 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x19906f17 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x58947c04 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7f3e5808 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x882fcb6d p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x8db16860 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xb96e76c5 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xc3aa321f p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xd6f60aca p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xe71b1361 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x06c5ded7 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x12e0a764 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1647eb43 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x16e71e75 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x16ec736f rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1f1546d7 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x24efb38b rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x28404ed0 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x35b324e2 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x48bd968e rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x490379b4 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5e0631ee rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x66f78455 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7f4f6907 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x831b15e0 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x85de93fa rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x881af486 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x98ee567a rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaf8abfe7 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb919b3f2 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe6a01169 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xed5a7aa6 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf29f1c3a rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xfbb0772b rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x27548454 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x2c85e6c4 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x38f0a957 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x3a2ed09e rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x9099bd47 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbdac1282 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xc2a21def rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xd0d5009a rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf66c9388 rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0252fcb2 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0b8933bb rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0bb5e75e rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x233151bb rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x23ee247d rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x24cc7d13 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x33927ccc rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x4dffce27 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x670d961e rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x78d833f6 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7af3d9d8 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7c4ee0e8 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x80d9df21 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x931ed693 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xb0ae7767 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf1577f96 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x547536db wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xa43f83e4 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xca0749e4 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x07e590d9 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xe469b3cb pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x1a4d6c8c wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x351abed5 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x71875176 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x96d1363b wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x98e6fcfe wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xc687aff0 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x7d626d43 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x3688381c scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x404eeaad scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x40b4c3b1 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x46d1e251 scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x5705b5f0 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xc2a6f50b scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xa5789f84 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x08160e2d iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0ca2c4d5 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x117b8665 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x233961cd iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x28d9ba36 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x316a6cbf iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3df8dd7a iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x41d57e8b iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x461fbdaa iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x47a5661e iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4924a8ed iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4b0c35f8 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x56770931 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x684dea76 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x745954e7 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76449a5b iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76ab4a29 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x794c93fd __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8f25b955 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x971a3f8c iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9ed085c6 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa54b3aca iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xab09c6a0 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xac41c44f iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xae1089e9 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb5459c11 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb5bccbf6 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbb5a7baf iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc7f348a8 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc9624934 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcb8121f9 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcbcd4799 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcfa4529e iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd6361dc0 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd7e50544 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdd61aa3e iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xec87fb82 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xed2b7d1f iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf774b196 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfd9090e5 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfdb03281 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xff64b628 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x03f0fd75 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x19ecc766 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x32026352 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3f91cd6b iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4a2a127e iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4bac18ee iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4f59ac9e iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5342d5bb iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x740bb458 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x77fd02a3 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8b096c2b iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa38dfc3c iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa80bc5dd iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdf6d175f iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe5b5e1f9 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xee568630 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x023e29f5 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x101bad83 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x10955f0b sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x11bd0663 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x163f33c9 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1e461c25 sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3733a08f sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3f73ea48 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x40bef34f sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x4cd816d0 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x57200994 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x67b458d3 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x68dc4525 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa2c982e1 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb44586e1 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xbb12b1e7 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc942df0c sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xcfa2c879 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe00b2d0b __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe23c8b71 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe4584184 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe97c0882 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfc467052 sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x090331cb srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x21e8ad9f srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x83bc43c7 srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x8e643498 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xc34b309b srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xdb6da9ca srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x1da1397f scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x45df4eb1 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x78143252 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x95e282f7 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x9735cde5 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xa17e6f81 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xcc79f6af scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf178bebb scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xfd29ef70 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x05a4a205 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3098deb0 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x333be3fd iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x33a3c754 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4849bb54 iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5063bbae iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5541c933 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x57707e5f iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5dbe9fb3 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5dc1e834 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8c60f1cb iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8e58180e iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x91a8d5f9 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x99355d36 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9e71e26a iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbe88d0aa iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc0d8569e iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc62d23ae iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdda66efd iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdf62dbef iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xef7cc0ff iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf2eba584 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2c803d12 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x304a932f srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x97f5e131 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x992eaab0 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xb46f8a3f srp_rport_del +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x0ca1e527 pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x1af43568 pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x1b70a4d0 pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xcc64084f pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x24cdab9b spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x2b676d9b spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x66b4a43d spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x86836cd7 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xc1b67e3b spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xf1ca6f09 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/uio/uio 0xa61fb6a1 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xad0ab661 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xba2f60bf uio_event_notify +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x4c9a4991 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xd71813bf usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x0ba64535 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x7de9e7cc usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x978716f3 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb2413d2c usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb74ff0a1 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xbe276bae usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xc46bf019 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xc74139cf usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xecf32e5c usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0cb13deb usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x42662c2e usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x54749894 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x55d3a2d1 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5befd93b usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x648efc37 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x65eec8dd ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x81a90491 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x93d4be63 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x9eeedc22 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa20103eb usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa9615f37 usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb12c826c usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc8ca6ff5 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf1ab2754 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x062b4e1a usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x29fb6fd3 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2e58c7e8 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x36f87d1e usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x465f00c9 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4e5d0fde usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4f3cfbf5 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x50e670a9 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5cf954ff usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x62cf622e usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8726a5ee usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x890369fe usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9e0ffdef usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xac76df61 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb7ea3b74 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbead74f7 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xd5a5a46b usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe7e116a7 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe8d475af usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xe9767a68 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf049e627 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfd7d0683 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfe9a7180 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x09f3c921 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x2157c5a1 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x307618a2 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x60d50b80 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x9372264b __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xb100a081 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x031e7fb2 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x23d791d5 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x3e2ff9a5 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x6335ca4e wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x698c506a wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x74dedea1 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7cd2ba07 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7cfba075 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x98ef6352 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa041fd4b __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa4609cd0 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xad322f42 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xaddc389f wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xd2e10e48 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xd3c994f9 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xeb007cf4 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x07483634 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x56fde660 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xdfb2d0d5 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1174cda5 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x3048ce21 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x34a0443b uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x8f6cb2c7 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x9cc18d07 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xd206eac4 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xe6e1c845 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xff95d7e4 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x2a2c9e1d umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x8c6c54a1 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xa2cfafeb umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xa72093de umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xac58cfa7 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xe4d9077a umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xf1d3cb65 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xf2a950c9 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00c53afe uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x049b034c uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0534b3dd uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x179e9e03 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1a7db5cf uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1e4e1055 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2446c99b uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x24f2849c uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x39221f74 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3fbf1b99 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d760ab6 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4de7e340 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x53468487 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x63f8cde2 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x68c88094 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x693b60f4 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6bba2661 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6e227809 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x792a7bd2 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7bd509c3 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7e305d2d __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7f070188 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7ff62d00 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x802715cd uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8052e002 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x829effed uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9d2f4d17 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa2dd68a8 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa450aeca uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb2c5d34e uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb7ba1399 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbff64ad5 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc5360ba1 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcb8163bf uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce68a9d1 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xcf34a9f1 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf00c7f3d uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x0f7fbbea whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x04f1e5ac wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x0dfcbf8e wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x23c663e4 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2fb47684 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3759b087 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x39a3a7dd wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x49c1e6f0 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x58c8ede9 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5ce242b7 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6b1a70f6 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6c2e51d0 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7d83d4f8 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x80fa3b0c wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x952d4c9c wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9c69a442 wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9cbfdb58 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9ea29ae6 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa1aebabf wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb0f455ff wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb2b78cb2 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb5d48afd wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xbddf5d97 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc1d94b80 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc8b655c3 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcac26470 wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcc54d6c0 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xce318403 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd07aa0b0 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd93ee40e wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf4ae69f3 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf4c3ca6b wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xfcaf7a38 wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x30ad4866 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x4798968d ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x973bcac6 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa235c4d2 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xb788c43d ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xca60c74f ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xf697b648 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x8d4b1b04 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xf297ad1f fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x69bf8174 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xd381fd3c sis_free_new +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x09f56e57 unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x5f780749 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x70a3c39a register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x76804e0f unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xffd2e476 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x24790a90 vring_transport_features +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x499e8526 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x5b3cd975 vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/w1/wire 0x4e29679c w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x4e35e515 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x5bd6475f w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x671966e2 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x6e729f76 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x721c1be8 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x81c87e71 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xc5c55acc w1_reset_bus +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x67a93d39 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x973d692e dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xaf416c9e dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x7029a9bd exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xd66d4120 exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x1063f9ed fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x129faa7d fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0x1641fdf4 fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x18b5060c fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x3507046a fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x4e82335b fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x4fc72334 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x661d1305 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x78285a60 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x89b9972a fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x932711b6 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xba918adf fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xbf0dd062 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0xcb85723b fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0xd79c07ac fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xde71d5af fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0xea3d4ea6 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xf1b89fe5 fat_fs_error +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1087a384 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17554608 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xaac9a383 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xab60ca40 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcd43391e nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x099b1376 nfsacl_encode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x4a1b0512 nfsacl_decode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x44e92770 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x5b0a7f81 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x5ec13a71 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa27ee2f2 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xc09748bd o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd02af0ce o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xfa7b5a6a o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x2e1bc128 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7fdff78a dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xa6315e0d dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd445f7f4 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xde184619 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xde560d55 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x1af4d094 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x299133f7 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe5480b56 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x1dbd95a8 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x54a2cbf5 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x56a6b9ef garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x7206339b garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xb5e16c51 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0xb685712c garp_request_join +EXPORT_SYMBOL_GPL net/802/stp 0x19231ac1 stp_proto_unregister +EXPORT_SYMBOL_GPL net/802/stp 0xd42f7d62 stp_proto_register +EXPORT_SYMBOL_GPL net/ax25/ax25 0x27c84768 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0xf01693ff bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d0c21e9 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2516000c dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x31357d08 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3dca2807 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x44644a01 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x45cff97a dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4c16179d dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x58d60238 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x65c61ab1 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x69698c8b dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7525cb5f dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x75edf4f0 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7a848719 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x846d105c dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8dc05b0a dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x967cb908 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x97f7e25e dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9c278b1e dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9e7cd5c7 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9f85624c dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa117775d dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa2e085fb dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa3413302 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xae848b1e dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb213beaa dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb3b7371e dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb4cd148e dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc17af03c dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc35eca7e dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc87967eb dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd6da4cea dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe4a1410e dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf555ef87 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfefa0c7d inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x5c56c13c dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x75c84577 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xbfdddf06 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xc2219b42 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xcb91ee68 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xff076238 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0xff6ba2e8 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x691d19f0 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x8ab2db50 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x98dc18ab nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xa0784746 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xd4bd4a6f nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xee52a849 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xf88033c4 nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x21a57ef1 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x49cff1cb tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x90d2e087 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xaa6a9e25 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xbe2b47e3 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x0603d862 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x09f6e151 ipv6_dup_options +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x10af5235 ipv6_find_tlv +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x145408f5 inet6_csk_xmit +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x475bb637 ip6_local_out +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x6cd92cbd ip6_dst_blackhole +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x6e77d0a7 ip6_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x756f011a inet6_destroy_sock +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x983e6fbe ipv6_opt_accepted +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xa1677e27 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb2db224d inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xc3918228 fl6_sock_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xd3614b5d inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xe6039fb2 inet6_csk_search_req +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xfbf779a2 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xd50d62a6 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xfbbd6612 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00f31f1c nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0b58f707 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0fa49f07 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x106ce191 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1288f6dc nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x13f15a1d nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x19e13cb0 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1f815aa3 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x296bf4ba nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2b54202e nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2da1a12d nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2db73821 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2f8b450d nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x34cc28b6 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3d04e89b nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3d92fd85 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3e860396 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x42fbfcba nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x50a54a8a nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5791e4ae __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a2095e0 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5d0d245d nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x65d42c7b nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x66d59cc1 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x671aa507 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x68f084db nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6919a744 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a43d087 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b9c0865 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6bc08eef nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6cc7cf23 __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6d3dd29a nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6dd2b501 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x70a72376 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x71326177 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x72ca80f1 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x76b0ad12 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x82619f05 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x897efc52 nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x898a3f95 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8c561721 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8de2c6af nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x94980f98 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xac68bd57 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xad10c5d5 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb04eb18f nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb307a9c2 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb4c6aec2 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb6158a11 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb97fa057 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xba9a638d nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc5b74e34 nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc7d07d5f nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc8a4710e __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdd783aa1 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe6bc0b64 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xef1ace85 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf14405cb __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf1b73261 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf5b356fb nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfe21f252 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0xbc96a96f nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x7cbed6d9 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x157320fd set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x4897ee7a set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x71b05634 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xa4cd7252 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xbf8bcea2 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xd2cdda9d nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xd4bf9024 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe5e26d7b set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xecd0eedd set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf532bf8f nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x2057d511 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x36d6d67d nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x52ae08ae nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x9546c451 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xaf0e2ab0 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x17340bfd nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xb350a9e0 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x042d0cef nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x4f779557 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x62bedec9 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x81901847 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xa261d2f2 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xa7fb2ae4 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xa86c83d5 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xafb7c696 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xb65466dc nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xda554202 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xe738d964 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xeb160d47 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x8d8fec82 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x6af2d331 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xf4b7b3c5 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x311b7d77 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x39c88624 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x7a0e92af nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xefd00105 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x75e37693 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x04bd5b9f xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x174d6e4f xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1cddc464 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x21d6e255 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x2ef51a7b xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4f87cb85 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5709107a per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x74faa221 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x88212b44 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x92be8b23 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf555d2d3 xt_table_unlock +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x126b3e88 rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x4b2c8b3d rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x050b94d5 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x05c1ed3c gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x0d156d92 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x177ef7cc gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x4c81a2ad gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x686bbc55 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x866c14cc gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xa8622ab6 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe1fac8bc gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe800563a gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe9e8e33a gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x010f1076 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x068ac31c svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x06fc1536 rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x08b2b6d3 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0a1d09f3 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f9fd9c0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x10b28863 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11e87ecb rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14b30057 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15195a53 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16bf2d4a xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1926c163 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f595b3a rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f7be67c svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x25361ee0 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x27156c85 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2a02acf1 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f23c3ca rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3057bf81 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x326cdf86 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x32c7c901 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x336cc7b1 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x339fe2c0 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3637ef2b rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38aee515 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3be20e2b xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3cb4fb05 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3cd0c18b svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3ec2972f rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f3c37b5 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f53c2f1 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f8749cb rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x40875f8d cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43f12938 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45caaf35 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x476a561b svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47c7d99c xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x47d1e456 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d4363fc rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4e884966 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50911ddb xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x54b6477b xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b9851f9 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bbb3320 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bc2932c rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6060f3f7 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6107d574 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6301411f rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x64ebcd57 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x66652b77 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67d65f13 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x68af2b15 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x69548619 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6b70c54d svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6fb41a0d svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x755cdad3 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7892555f svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x792ed40e rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x79499c2d rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x79707a97 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7a17b2cb svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7aa68949 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7b87cf5c xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7cbd406d auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7ebd66f0 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80bf6206 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x810ca2d8 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82125cc0 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82b6c7b4 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83f62654 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x84617d63 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x85cae9e7 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86ed282a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x88d10ed1 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x89f4c346 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8bd860ae svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8de70ff8 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e29457f svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e416ddf auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x94529e09 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x982bdb4b __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9929d69c rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9d2f2bb0 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9d820cbb rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9eae7b46 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9eea5f7c rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9f5f0421 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0c70fb7 xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa107f2ce rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1c8b24a svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3470058 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa58bf40b cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa8e546b3 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaa85272a xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb17c6644 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb30f1f12 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb741638a rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb78421f5 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb90f1a31 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xba0d963c xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbbaebb14 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbcd68179 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc10fbc07 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc1b1792e rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc260f57d rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3a5b890 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc4467071 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc608128e xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6cb0822 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc97770e rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccc2372e rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3d7855a svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd6480390 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd68b89f4 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9813aa3 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdb0f5f6b sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdbfba36a auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdd0d32ff svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xddbefd9a svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde53c9e0 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdeba90c5 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfa85fc6 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe176039e xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe738dd80 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7595633 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7f8b997 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe9e10a57 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xebe62dd6 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xec1ae8d2 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd21b47 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xef8983a9 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf208d5b7 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf2d263b1 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf3389f38 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf75fe216 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf987ae11 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa01b9bb svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfab2b7b8 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfd664359 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfd7274b4 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfe9ee5a4 svc_sock_names +EXPORT_SYMBOL_GPL net/wimax/wimax 0x02befff8 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x26e147e3 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2e39a523 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3182a3e1 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x565b3326 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x8c25ff95 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa5bceb06 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb1272672 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb140c2c7 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xda350328 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe14d5239 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe9bb0a8d wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf4790778 wimax_msg_send +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0e61e2e3 cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x150f5de4 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x17182150 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x198a248f cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x30b33596 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x495a1232 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x49c59e00 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4d361f9d cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4d807999 cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x50248d09 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5100116f cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x55a831b5 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x55b54a8d cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6b46ed9a cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7770e368 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7da10643 cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x863374d7 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8a13c6be cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8c6b9d73 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8f539d9f cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9681774e cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x96e1e539 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x98142704 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa26974f1 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xaef1d0c7 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb78c026d cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbccdf6d4 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc939b916 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xce666858 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd3c29cc8 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xd5cb9a91 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xff8ac528 cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x226095f3 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x74ff1d32 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xa8108fce ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc52d638d ipcomp_destroy +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x311d8e50 ftr_gpio_methods +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x3142a685 aoa_fabric_unlink_codec +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x47a9c245 pmf_gpio_methods +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x9fd898e1 aoa_snd_ctl_add +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xbb82f518 aoa_codec_register +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xc339c774 aoa_codec_unregister +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xca9981d9 aoa_snd_device_new +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xf0754c35 aoa_fabric_unregister +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xf6df5861 aoa_get_card +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xfe97e72c aoa_fabric_register +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x21ef6368 soundbus_unregister_driver +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x4b7ce8e4 soundbus_register_driver +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x4e894657 soundbus_add_one +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x6f23882e soundbus_remove_one +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x90491a0f soundbus_dev_get +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0xa189d5a4 soundbus_dev_put +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x04a0eb49 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0e79f2ef snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1504352a snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x16fe122d snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x19473798 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x207ca0c1 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x20fecdd4 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x21ef0d2e snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x287dae94 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2a3789bc snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2df9ce68 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x30f86197 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x31d04e3b snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x335745f8 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x34732db8 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3494e969 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x365437fa snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x390d5d60 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3c062561 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3c087376 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3cda72ab snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4a4fcb50 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4af10440 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4b6656b0 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x51ce8429 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x54b09c02 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x55794d39 snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x58ff44ea snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6031ff30 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x63dabd5d snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6d286210 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6db21a1c query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6fa7bfa9 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x75b32657 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x76b3563b snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7bcfac71 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7d3a9302 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7f2b3dc1 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7f5b3f62 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8438be15 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x854e5b54 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x869d1733 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x885ab093 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8f98c4ea snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9241349a snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x955f58cf snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x96ee3d5b snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x97ea7ee2 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9ab0e4d3 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9e509b1c snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa59126d3 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa5f61914 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa63a45f2 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa973aa94 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad1ff622 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb1116f95 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb8332eb2 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc35e64c3 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc8345af9 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc8e750a2 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcaab97bf snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd0892e7e snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd5249b7f snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd55499dc snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xda41b317 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdb40b7fd snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe5946a8c snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe72971c8 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeb3da25c snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeb4da0ff snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xecafa08c snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf9424044 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfa8d3bf2 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfbb12034 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xff25b327 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x36cc41bf soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0x5de73a6b ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x10f30b54 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0xab475b85 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x459b4a80 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x85c4f2c0 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0x3c1914b5 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xd63df704 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0xfbea43d6 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x8e86d8a8 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0xadc74a03 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x3795f905 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x39b887b2 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x2b8305d3 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x5f8d10ba soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x9a830dce pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0x0cb4b62c dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x33642557 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x54381571 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x5e37f1af tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0x88da85c6 soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x6e426670 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xe0a01fa6 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x57035b3e aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x73857f0e aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x776e9721 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x863ff871 aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xb2f9f64a soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xc361fe18 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xf576bc08 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x7d1a7101 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xfbb59d79 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x3a0dfb7c soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x0bb7c715 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xcf5a04d6 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x9e00f786 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xc14de982 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x84926bb5 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xa21c7eb1 wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xa2400e47 soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x395cf415 soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xfae1580f wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x91d14e97 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0xbf6970c7 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x26ad26a4 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x96029d5d soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x0f8b0250 wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xb0b84b48 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x0e4fd11a wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xdfff8c1d soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x0fff5d63 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x8f378b66 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x12691090 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x27bb6df9 wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x39444353 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x938eb3ab wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x47b76378 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x7d56184e wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x6009506c wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xf47da548 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xdf50f68b soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xe69d22c2 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x9446747f wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0xf3740d94 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x03d96556 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xf0f0d9fa soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xc885b6f3 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0xe9ebe8bb soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x6ef2bd47 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xe829828c soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x3e3f2cf4 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x955e76c9 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x32b77ef8 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xbfb59c66 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xf59115bf wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0xfbac9ec7 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x73056711 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xd081cd04 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x908ec2c6 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0xa31da38b soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0306ec93 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0d95386e snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1105893f snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x110d8c40 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x11b8106b snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x126b6b38 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1327f6ef snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1b7a4bb1 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a722045 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2ddab318 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2f8c6167 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x43c5c8ad snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x46b2bcae snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4771ef00 snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4b25fce6 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4b930261 snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4d489d46 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4e9da81a snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5282e562 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x55048384 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x62a25e5d snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x635c32fc snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6764345e snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x678bfb37 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x67f8dd0f snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6884a9b6 snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69a1b1ad snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c59180b snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6ccb8dde snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6e81b346 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6f7324b8 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7829da65 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7d06483c snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x800b1ec7 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8122b29f snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8167fd3d snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x83c72363 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x90a9f52a snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x93402971 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x98b856c6 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x99614f19 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9c8255c8 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa44a6140 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa4be62c6 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa5e63e9a snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa83f8574 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xab57dfd3 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaf86ebdb snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb0491d87 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb1179430 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbb0a78a8 snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbbb02749 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbd46d619 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbfa14a02 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc398d6ee snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcbc51a67 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd1f438f8 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd29bc5ae snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd3a2ea87 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd99cab4a snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdf9e628b snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe2c6e6b6 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe2ddde89 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe62b91e4 snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe9d4a389 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xea565488 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeb0d8426 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf1ef27eb snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf252a504 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf549db93 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf7ce3067 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x1d1d6b89 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x5d428804 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xb376a9a7 xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xc5678acf xv_get_total_size_bytes +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xe68912b5 xv_free +EXPORT_SYMBOL_GPL vmlinux 0x00021467 pmac_i2c_get_dev_addr +EXPORT_SYMBOL_GPL vmlinux 0x002ae958 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x0120e96d sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x0130b5b3 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x013d8636 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x017f6cab sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x01a2131c vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01a79ecc __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x01aa90f9 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x01c78d0f crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x01fd4e20 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x02519389 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x0254ba0a platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x026ed085 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x0282cdf8 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x02e69e9c regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x03bd4f94 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x03c3969c usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x03c58769 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x042f0537 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x043953c2 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04725ddf ide_device_put +EXPORT_SYMBOL_GPL vmlinux 0x047e022e dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x04884d9f crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x0488598f user_describe +EXPORT_SYMBOL_GPL vmlinux 0x048ebcbc devres_get +EXPORT_SYMBOL_GPL vmlinux 0x04bf4047 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x04d1d9ab dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x04e5a82c ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x05263d71 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05899b94 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x058d029b ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x05ca2e2b find_module +EXPORT_SYMBOL_GPL vmlinux 0x05fcc7b9 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x0664d4a7 user_match +EXPORT_SYMBOL_GPL vmlinux 0x068ba3ba dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x06a39ba0 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x06d6da96 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x074fb2a4 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x07704daf srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07ded15e sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x081f378a screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x083e3b83 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x08805395 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x088eb3b6 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x08c5c9fb ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x091c824a machine_power_off +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x0921879a shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x09415c64 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x0994a6d2 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x099539fa ide_dma_test_irq +EXPORT_SYMBOL_GPL vmlinux 0x0a2948b4 swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0x0a51ae5b virq_to_hw +EXPORT_SYMBOL_GPL vmlinux 0x0a81ddde usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x0a87ee86 ide_port_unregister_devices +EXPORT_SYMBOL_GPL vmlinux 0x0aa2d317 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x0ab21336 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x0ac18a27 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x0ae998b6 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0c03f3fe ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x0c17d301 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c427b6b crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x0c5e593e __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x0c7e37b3 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x0c9682f9 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x0cb19852 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x0cb3c5ee driver_register +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0d38e94f firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x0d7daed6 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x0dfd4007 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x0e1b116e dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x0e46d5f1 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x0e5aa7b5 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x0e7bbe89 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0f68e751 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x0f848f8e find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x0f98a096 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x10066c09 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x1047618d ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x10a31e6f tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x10bb9d57 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x1130addb register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x11692c35 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x1170250e ide_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x117e035a scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x1192a277 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x11b3fc6d blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x121252a5 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x122b47a1 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x1375127e dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13be9e1b __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x13e26a94 ide_set_dma_mode +EXPORT_SYMBOL_GPL vmlinux 0x13f8cc34 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x14015815 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x14236300 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x142e9cf2 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x1434a579 pmf_call_function +EXPORT_SYMBOL_GPL vmlinux 0x14674008 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x14739579 hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x14783575 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14a0619a ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x14d93ec6 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x1520d475 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x156a693b inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x156c9495 ide_device_get +EXPORT_SYMBOL_GPL vmlinux 0x158275e5 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15edfc3a ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x167cee47 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x16afca95 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x16bde169 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x16cf5a8a blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x16f76869 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x17824017 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x17de2dea ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x17f9fcc8 mmput +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x18982f2b inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x18c2721d blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x18e23854 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x19813e0f sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x19885a7d ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19d5dbf1 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x1a0636fb sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1aa1cfdb use_module +EXPORT_SYMBOL_GPL vmlinux 0x1ac1203a fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x1b0a3638 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x1b19ab7b __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x1b1e19bb srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x1b5a7b54 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bb59aa8 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cb35010 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1cbc4107 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x1ce0d354 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x1d1aeda0 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x1d4c1092 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1da6ce33 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dbb16ce ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x1dbb5232 cpu_add_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e32c7fd ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x1e7816e1 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e94987d usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1f2e927d security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x1f596939 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x1f5d6647 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x1f823264 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1f8c4db7 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0x1fc75302 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1ff05b79 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x1ff3f3d7 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x2073ad0b pmac_i2c_get_adapter +EXPORT_SYMBOL_GPL vmlinux 0x20a4e34a usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x21270d92 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x2152bda1 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21d14457 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x220c9b60 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x2253e321 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x228296ec unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22b3d38d ide_set_pio +EXPORT_SYMBOL_GPL vmlinux 0x22c610c3 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x23395df3 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x23520637 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x2354586d shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x2375950b driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2378ff9c hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23869dc7 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x23b26422 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x23b37dbe ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x23fc87d0 ide_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x2406dae3 pci_address_to_pio +EXPORT_SYMBOL_GPL vmlinux 0x240e038e usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x243b4100 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x243bf805 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x245200b9 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x24528e29 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x2462c703 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x24aa8bbf pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x24ca037c ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x24cda041 ide_vlb_clk +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x2550c27e scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x25630d38 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x257f4ec8 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x25f87aba remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x25ff3a8f security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x265a753a blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x2672bba4 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26f4e94e spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x26f763f6 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x2704b6dd platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x27320e8f sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x273bbda3 drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x27576e15 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2779e304 ide_dma_sff_timer_expiry +EXPORT_SYMBOL_GPL vmlinux 0x277d830d crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27e62fe7 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x27ef1cdd page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x27fedec3 ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0x283842fb regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x287b3109 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x28a30a5f pmac_low_i2c_lock +EXPORT_SYMBOL_GPL vmlinux 0x28a85341 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x28b3eaa5 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x29583e29 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x29c8e38b rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x29f5cf75 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x29f94dff usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x2a486227 ide_queue_pc_tail +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2aea1264 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x2afb999d debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x2b607170 ktime_sub_ns +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2bb4849e ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c7db649 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x2c92e6c5 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x2c9bdc79 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2cd04fe7 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d3fec50 device_move +EXPORT_SYMBOL_GPL vmlinux 0x2d48cba3 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x2d5027f7 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x2d749a9a bus_register +EXPORT_SYMBOL_GPL vmlinux 0x2d9468db set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x2da1862b device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2de871f7 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x2e0b0300 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e6e5197 pmf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x2ea3d725 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x2eb80fc2 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x2ec3f774 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x2ef39f82 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x2f2aa116 unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f4b07f5 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x2f4d53a1 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x301fcc0d scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x30301506 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x304cb8d1 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x309a98e9 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30c26612 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x3175a80c device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x3185635d ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x31a69e29 pcibios_finish_adding_to_bus +EXPORT_SYMBOL_GPL vmlinux 0x31c56aca spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x31c7015e of_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x321390fb usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x3225b2f0 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x331d91c1 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x336d4cd5 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x33740df6 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x337e73b7 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x33c2e2f5 ide_pio_cycle_time +EXPORT_SYMBOL_GPL vmlinux 0x33dd5e44 media_bay_set_ide_infos +EXPORT_SYMBOL_GPL vmlinux 0x33fe4be3 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x342f1fab dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x34305371 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3472e331 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x34912702 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x34ac494c ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x34b198ae blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x34d650bc ide_dma_setup +EXPORT_SYMBOL_GPL vmlinux 0x3597d1ac shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35ef1adc ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x35f63d23 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x365c8653 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x36600007 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x368e9e89 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x36fff337 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x372a295f ide_pci_set_master +EXPORT_SYMBOL_GPL vmlinux 0x3777e1c3 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x37acab64 pmac_i2c_setmode +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x381e72ab pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x387db631 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38f6db56 ide_end_rq +EXPORT_SYMBOL_GPL vmlinux 0x3905a219 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x39095b7e ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x396ee654 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x39814ecb fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x39c83e5a dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x3a2741da ide_issue_pc +EXPORT_SYMBOL_GPL vmlinux 0x3a525494 register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x3a723c15 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x3a8d98b3 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x3a908252 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x3aa0d952 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x3ad182b3 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x3afddb7f debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3b0290f5 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x3b167d8a ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0x3b3ef5b2 ide_no_data_taskfile +EXPORT_SYMBOL_GPL vmlinux 0x3b6ff584 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x3b728d7f ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x3b7a11b2 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x3bb11341 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x3bd15325 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3bd831e9 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c71c3f4 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cc63a9e usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cf94e8f scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d21a989 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d4e3a6d crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x3dccbe67 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3ddeebd7 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x3de0841c bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x3e0744e2 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x3e68ef54 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x3ebfc76d skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x3ec16772 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x3ed745c0 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f01570a probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x3f18a865 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f79a1b7 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x3fd6d3f8 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x3fda456e setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x3ff1b0c9 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x40194472 sff_dma_ops +EXPORT_SYMBOL_GPL vmlinux 0x40364580 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x403ee1cc pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x4041e042 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x4099375d __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x4107bde5 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x41305e1e xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x41619505 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x4164e679 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x4185f159 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x4198edd7 of_irq_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x41b4172d ide_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x41b47c16 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x41c2e476 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x41f9ac19 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x41fdba89 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x423fee39 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x42468aee ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x425c1c0b ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x42822356 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x4291f2f6 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x42fa97e8 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x4321e55e led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x43a64229 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x43abcec9 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x43cff7fc ide_setup_pci_noise +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x443f14bc fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x4452ce6e rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x44800c1b ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x449cdebe generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x449d3f70 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x449fa57d usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44ab64d5 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x44af8e94 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x44de57cb clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x44e725a9 ide_output_data +EXPORT_SYMBOL_GPL vmlinux 0x44f686b8 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x4556e0c7 do_rw_taskfile +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45882954 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x45a4427b scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45e0dfb4 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x46577321 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x4677340a securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x467ae5fb fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x467e1e84 ide_do_start_stop +EXPORT_SYMBOL_GPL vmlinux 0x46857a67 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x46869874 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x46aae77a usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x46ae88af tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x46ca4797 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x46ff9d25 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x4751b077 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x48384067 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x4861dd65 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x489a83bf ide_check_ireason +EXPORT_SYMBOL_GPL vmlinux 0x48a1a96c free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x48cf03f5 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x490cd1bd tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4925aea1 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x493535f7 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x496e462e device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x498afa31 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49a8af8a fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x4a9ed4bf usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x4ab41b59 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4ab77f80 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x4b42caa5 macio_find +EXPORT_SYMBOL_GPL vmlinux 0x4b61555f tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x4b769e57 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x4ba1e329 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x4bc145da sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4cc61ca3 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x4cde79d2 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x4d1ffeb4 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x4d39117d class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4d41592c blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x4d459ff3 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4d614844 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x4d6cd507 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x4d72dcfe __class_register +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4d96e42b pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x4da989fb regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4dc71b29 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x4dd4e216 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x4de58a52 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x4e1ff938 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x4e2e4fb7 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x4e3bd672 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x4e59683b ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x4ec3a052 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4f685b2b usb_string +EXPORT_SYMBOL_GPL vmlinux 0x4f78a65f sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0x4f7b316b sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x4f895824 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x4fcd5aa3 ide_dma_host_set +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x5093966d ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x50af86ec spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x50c89f23 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x510de26b securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x518b3a0d crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x51af7f83 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x51eed91a anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x529e87e7 ide_host_remove +EXPORT_SYMBOL_GPL vmlinux 0x52c57cf1 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x5327ac4d power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x532a9793 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x53883af4 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x538d9a7e rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53cb311e ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x53def0d6 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x53ee0458 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x542b20e4 pmf_unregister_irq_client +EXPORT_SYMBOL_GPL vmlinux 0x543d2e70 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x5454cda7 ide_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x548da8c6 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54b2054a blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x54b51f79 ide_read_altstatus +EXPORT_SYMBOL_GPL vmlinux 0x54bfcf23 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x54d18b9d blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x54e00116 sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5552bc55 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x555d51b8 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x55c296f3 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x55f66968 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x5633120d crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x568dc61c simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x5711f8e0 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x573112c5 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x5824a4f9 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x583883d3 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x584515f3 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x585b4f76 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x586e25ac pmac_i2c_detach_adapter +EXPORT_SYMBOL_GPL vmlinux 0x5888af5b pmac_i2c_find_bus +EXPORT_SYMBOL_GPL vmlinux 0x5892f832 release_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x58985690 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x58d05392 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x591c0e74 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x591c7182 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x5938f8c9 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x59909226 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x59ac42b1 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x59ba2278 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x59ca3224 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x59dc3d52 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x59df1d18 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x5a5d98ac ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5a68c10a blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5a8b0747 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5aa7b4b0 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x5ac8e8d8 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x5ad8401f ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x5aea4bf0 queue_work +EXPORT_SYMBOL_GPL vmlinux 0x5b0d97e2 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x5b277510 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x5b306100 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x5b627433 ide_pci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5b751dea pmf_do_irq +EXPORT_SYMBOL_GPL vmlinux 0x5bb5b886 ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x5bd59108 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c4e4697 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x5c84f41e page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x5ce338a2 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x5cf1f060 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x5cf59027 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x5cff650b queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d4ae4a7 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x5d5a4606 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d9d6c3f crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5eb51636 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x5f32f6ea init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x5f93cc48 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x604eb516 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL_GPL vmlinux 0x60d4d2a1 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x61148c12 ide_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x61347862 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x6177b45d sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x6193bafb ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x61af033d task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x6217aa86 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x624759de ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x624ba8ca ide_do_test_unit_ready +EXPORT_SYMBOL_GPL vmlinux 0x6253bb85 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x626eb75b aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62a14b7e user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x62b988b9 put_driver +EXPORT_SYMBOL_GPL vmlinux 0x63065ee4 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x6314ae53 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x632fdd5c pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x63e69d45 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x64031aa9 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x6419af55 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x644946e1 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x6453f77c pmac_has_backlight_type +EXPORT_SYMBOL_GPL vmlinux 0x64640a5a debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x646a71d1 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x64c23464 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x64fb0464 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x6551ed15 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x65a7265f regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x65b911c7 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x6635ec30 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66952936 ide_queue_sense_rq +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x675929ad fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67ab44b3 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x67e61ccf skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x680af015 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x68198821 pmf_do_functions +EXPORT_SYMBOL_GPL vmlinux 0x682e03cc ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x688314c0 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0x688e1c9b crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68bf74a6 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x6939d95a ide_register_region +EXPORT_SYMBOL_GPL vmlinux 0x69538afe user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x698be202 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x69bdf217 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x69c46e96 pmac_i2c_adapter_to_bus +EXPORT_SYMBOL_GPL vmlinux 0x69d38c3c ide_error +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a00dde4 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0x6a3b670d inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x6a6181cc hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0x6a95dd1e ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x6aaad6c3 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x6ab5deed crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x6b282822 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x6b299f68 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x6b3eb836 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x6b4e59b3 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0x6b583b80 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x6b7c46a7 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x6bd21438 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x6bdf0bfc raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x6c331c34 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c6ad512 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x6c88cbfa unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6c9db076 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x6cbbde08 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d5faad7 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6d7ce7a1 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x6d95b0f1 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x6e09bfef usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x6e197f2b hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x6e53285c ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e8175d8 ide_setting_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x6e9dc033 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x6ecec400 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x6edf647b shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x6f27a0d8 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x6f372f21 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x6f5d506e usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x6f5f125e sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x6f84c2b0 of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x702ef326 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x7146c5c4 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x71518bab da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7154bffe i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x717a4b34 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x7182b668 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x71869ed9 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x72431624 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x726e3b94 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72aeec27 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x72d71ed3 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x7312936a sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x73180c31 ide_port_scan +EXPORT_SYMBOL_GPL vmlinux 0x73245ee9 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x7334ebc8 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x733c341b ide_get_lba_addr +EXPORT_SYMBOL_GPL vmlinux 0x73a0e61d ide_input_data +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73a54932 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x73a55d41 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x73b748c2 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x73ca3aec ide_host_free +EXPORT_SYMBOL_GPL vmlinux 0x7401eb69 pmac_i2c_get_channel +EXPORT_SYMBOL_GPL vmlinux 0x7407bf4f filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x74221265 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x746eb902 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x74726537 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x747cbec1 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x7491b3c7 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7499b8a8 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x74a4f9cb inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x75dea26d ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x75eb7b0e device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x762353dd securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x7626b273 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x767e8c9f kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x76a13ad8 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x76bc557a usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x76fbd112 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x774c8a6f irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x776c0d49 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x77dccb35 __ide_pci_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x7823bf06 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x7833192a scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x786b2c1c usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x787ff954 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x78867b91 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x78fb4603 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x7916c8fa class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79bd02fc ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x79f5ac30 class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7a037b56 inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x7a112cc5 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7a18db84 of_irq_map_raw +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7ac50321 trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x7ac63bee lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b1a9218 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b23db31 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x7b39cd6c platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x7bc615c6 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x7bea0cae disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x7bf28d77 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x7c746ec3 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x7cd723f8 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x7d179d98 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x7d198ca0 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x7d5b510a inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x7da5700d blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e2d29ec ide_pci_clk +EXPORT_SYMBOL_GPL vmlinux 0x7e3ac2ef inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e6a4351 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x7e80a9cd relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x7e87e151 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x7eb5056a fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x7f09c839 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x7f18fe96 ide_pci_check_simplex +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7faca1f2 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x7fcf82ed crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ff5fd26 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x800227f9 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x802c2435 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x8069a831 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x807676b8 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x807c6211 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x80808ca0 ide_read_bcount_and_ireason +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x808f0d98 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x809e0913 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x80ad0e81 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x811afadf rtc_lock +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x8198deb3 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x81a64391 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x8217877e fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x82240960 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x8249faf7 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x8292328e platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x831d6caf usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x83317357 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x8360b5b9 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x83698132 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x836aa923 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x837aa47d tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x83a1b8fb crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x83a3d0d3 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x844c757c bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x84ab411b single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x84dc2101 register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x84dcfc5d spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x853f3063 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x8586ec99 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85c14e8e tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x85db2c54 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x86654dc9 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86882b9d cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x86f7967d pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x87302ef8 pmf_register_irq_client +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87ade79b ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x87ae6a20 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x87b5f218 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x87dd10a5 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x8820006d usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x8828b38a sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x889172e4 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0x88bd1c29 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x88bd354c pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x891b0005 ide_host_register +EXPORT_SYMBOL_GPL vmlinux 0x89214524 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x8922a1a7 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x8934fac0 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x897fc9ea bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x898d93c1 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x8a16b797 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x8a64a0ba net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x8a91bc75 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x8aa30daf tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x8adfe59d scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x8ae6ade4 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x8b1a29f4 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x8b6d0ffc bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8bd357b9 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x8c48c805 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x8c6cfb65 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x8c8c8284 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x8c9b1af3 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x8ca5aeda sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x8cc30c76 ide_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d1748bc ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x8d2492ff fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x8d26ee0d crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x8dc59e80 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x8dcb5eb5 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x8e683cb5 ide_check_atapi_device +EXPORT_SYMBOL_GPL vmlinux 0x8ea2a2d4 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x8ee00274 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x8f45d020 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fb0741e da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8fbf48d1 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0x9012a1a2 pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x90607a91 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x9065c30c tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x90733320 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x91089b46 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x91279915 inotify_init +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x919e4700 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x91b7161b devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x91de744d tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x91e67797 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x92080ccb hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x922b2f10 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0x922fdff2 ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x9268eede i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x927e0feb usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x92b68a18 pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x92be22b5 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92f8806c dm_put +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x92fe999f usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x93289fc6 get_device +EXPORT_SYMBOL_GPL vmlinux 0x9333593a leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x935b99c2 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x938c96b0 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x9396d5c9 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x93a2cb47 reserve_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x93b67a5a usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x93dddd0d shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x940f0161 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x9442e1e1 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x9489b4f8 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x948e6294 ide_pio_bytes +EXPORT_SYMBOL_GPL vmlinux 0x94959d82 of_irq_map_one +EXPORT_SYMBOL_GPL vmlinux 0x949b4f1b ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x954bf17a driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x95627516 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x962289d3 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x96672697 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x967a8a66 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x967f10bd sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96e1fe55 ide_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x96eef8c4 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x977baf52 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x97aac941 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x97fb97ef regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x9803bf98 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x9835f0ee relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x98374dd7 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x983fc09f get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x987fd4e7 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0x988322c5 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x98bdf80b led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x98c09d3b ide_set_media_lock +EXPORT_SYMBOL_GPL vmlinux 0x99038f29 ide_read_status +EXPORT_SYMBOL_GPL vmlinux 0x9907193a pmac_i2c_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x991e25b4 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x99428386 pmf_find_function +EXPORT_SYMBOL_GPL vmlinux 0x99443313 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99f42c93 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x9a02a91a tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a20159f security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x9a2ae4e2 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x9a3e0f62 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x9a8b65ba ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x9aaf3019 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x9ab1b9bd bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9ab86f61 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x9b0f601a __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x9b112189 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x9b3d70e0 ide_pad_transfer +EXPORT_SYMBOL_GPL vmlinux 0x9b6aa0ab led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9c024f7c inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x9c083a5a cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x9c48fe55 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x9c630e0d relay_close +EXPORT_SYMBOL_GPL vmlinux 0x9c9fb427 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9cd96426 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x9cdce019 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x9cdfae91 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x9d55ad52 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x9d6106ec skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x9dabcf0b seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x9dbfbca3 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x9dd153b8 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0x9dd543d7 ide_dma_lost_irq +EXPORT_SYMBOL_GPL vmlinux 0x9dd69c63 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x9de28e00 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x9e126154 ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0x9e395280 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x9e3ad4d6 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9ec92c64 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x9ecb99dd proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f7e6419 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fd4c31f ide_init_pc +EXPORT_SYMBOL_GPL vmlinux 0x9fe4e8e8 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x9fffc45a usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa04988fb blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xa061d14c usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0xa0f166e6 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0xa0fe3b89 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0xa11818a0 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0xa182a6ef ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0xa1bc832c vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xa1d5d466 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xa200e967 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0xa2099c5d device_add +EXPORT_SYMBOL_GPL vmlinux 0xa20d8821 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0xa21141dd ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0xa21c5293 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xa25f5f15 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xa2b80524 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0xa30bc064 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xa30c9cb1 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xa334f079 ide_pci_resume +EXPORT_SYMBOL_GPL vmlinux 0xa33ff95f platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xa357d56e ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xa3863202 kick_process +EXPORT_SYMBOL_GPL vmlinux 0xa39d9220 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xa3a2d9af walk_system_ram_range +EXPORT_SYMBOL_GPL vmlinux 0xa3edd955 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xa3f50384 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xa4044fb3 ide_unregister_region +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa41456e6 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0xa419655d hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xa454a9df crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0xa537ecd2 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0xa54b9da2 ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0xa59caa75 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5d96696 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0xa5e7c83c vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa64079e2 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xa6e3e821 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xa6ff73a3 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0xa71c0a6f kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xa79c034e rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa81e6fbc shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xa836b775 inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0xa8431368 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xa8e90ddd led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa8fa9608 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xa947d1f0 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xa96afb5a __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xa98010b9 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xa9b346da ide_dma_start +EXPORT_SYMBOL_GPL vmlinux 0xa9b8abaa crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa26f65e driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaaa97ef4 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0xaabc3edb crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0xab388678 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xab566530 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab6cacc2 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xabc298b3 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xac11fb38 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0xac5f29f9 ide_dma_end +EXPORT_SYMBOL_GPL vmlinux 0xacb41558 pmac_low_i2c_unlock +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xad3d6d30 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xad4dc38a fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xad925bae debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae3823ef vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xaf0cfe53 ide_init_sg_cmd +EXPORT_SYMBOL_GPL vmlinux 0xaf3c713a fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xaf73a794 get_driver +EXPORT_SYMBOL_GPL vmlinux 0xafe73ca4 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0xb016d570 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xb0305170 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xb03ddbbe debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0xb0632c49 ide_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0xb0663011 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xb08de9da sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0e75c3c raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0xb102b0e6 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xb1341112 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0xb17e9bf4 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1a8f2da pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1f6a219 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb1ff94d7 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xb20ba8f0 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xb2ccd634 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xb2f1bc1a ide_cd_get_xferlen +EXPORT_SYMBOL_GPL vmlinux 0xb3240386 ide_pci_init_two +EXPORT_SYMBOL_GPL vmlinux 0xb337e335 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0xb3515c74 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xb363f4ec queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb38e7d55 crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xb3a95556 scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0xb3b2a234 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0xb3e249da device_create +EXPORT_SYMBOL_GPL vmlinux 0xb3ea0973 pmac_i2c_get_bus_node +EXPORT_SYMBOL_GPL vmlinux 0xb44140a6 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xb47d95e9 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0xb4b1a25f default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xb4c95642 pmf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xb4e8cd9e tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xb501f7f6 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb53a22b5 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xb556a9fd debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0xb57eff42 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5e16266 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0xb620d89d d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xb6392256 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0xb6421d21 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb694978d blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6d49c0e attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0xb6f5dcfc ide_build_dmatable +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb7550b18 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xb826e5ff put_device +EXPORT_SYMBOL_GPL vmlinux 0xb836a54b regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xb8adf06d inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0xb9258233 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xb92dce94 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xb955dee0 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba0bfda3 ide_capacity_proc_fops +EXPORT_SYMBOL_GPL vmlinux 0xba1550ce __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xba36fe1a register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xba37d1b7 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xba489d23 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xba66d5ac pmac_i2c_attach_adapter +EXPORT_SYMBOL_GPL vmlinux 0xba6fecf2 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xba80bc7f ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0xba917ae3 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xbab7eae6 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xbac611c6 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbaf05572 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0xbb052ada nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xbb4399c8 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0xbb5edc6f usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xbb60b867 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xbb652f1a i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xbb68d115 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xbb7260ab pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0xbb86fc1d crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xbbb96318 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xbbe1ceae power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0xbc2f3ddd unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xbc540e17 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xbc9b8a36 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xbccc0da8 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xbccdacaa rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbd772f44 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0xbd7ba2ca inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdde47d6 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0xbdf10ded ide_dma_sff_read_status +EXPORT_SYMBOL_GPL vmlinux 0xbdfe871c spi_async +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe3a1e31 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xbe7995fc ide_undecoded_slave +EXPORT_SYMBOL_GPL vmlinux 0xbe98e72d device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0xbec593fe ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xbed16a6e blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xbeda217f class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xbf025415 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xbf10072f __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xbf1cc04b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xbf4804e8 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xbf51b24a crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0xbf57e6ef tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0xbf5c5d59 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xbf6123bc fb_ddc_read +EXPORT_SYMBOL_GPL vmlinux 0xbf61f1ce ide_retry_pc +EXPORT_SYMBOL_GPL vmlinux 0xbf846ac4 ide_pci_init_one +EXPORT_SYMBOL_GPL vmlinux 0xbfc38b5d inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0xbfe9ed6e ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0xbffb2651 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xc062bc08 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0xc074059f vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0xc08a58ea sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0xc0ecf010 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xc0f415e1 pmac_i2c_match_adapter +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc12f8234 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xc1463e3d ide_create_request_sense_cmd +EXPORT_SYMBOL_GPL vmlinux 0xc14df250 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc1aa3643 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xc1e3e89d usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xc1f4fecc ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc24dd0f3 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xc270778c hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xc29a8fb6 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xc2af6670 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0xc2dfe60e da903x_update +EXPORT_SYMBOL_GPL vmlinux 0xc2e7f14a debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xc3030cd3 pmf_put_function +EXPORT_SYMBOL_GPL vmlinux 0xc307048f crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc349dee3 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc427a45c cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc42b3701 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0xc462580e file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xc46d877e schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc493ef38 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4c4f567 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0xc4ffe97a register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0xc502a378 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0xc54b5868 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc5a79fab unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0xc5ceb050 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xc5e1a172 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xc606cd3c boot_cpuid +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc66d16b9 irq_find_host +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc6b10530 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xc6b80903 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xc6b84059 ide_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xc6d2c1c6 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xc6da04e2 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xc6e0c7e2 ide_pci_dma_base +EXPORT_SYMBOL_GPL vmlinux 0xc720f44f pmac_i2c_xfer +EXPORT_SYMBOL_GPL vmlinux 0xc72e083a device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xc74ddb58 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xc76bb0c2 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xc7a213ad fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0xc7a52181 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0xc7ab44ea mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0xc7c1811a pmac_backlight +EXPORT_SYMBOL_GPL vmlinux 0xc7c53786 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xc81f609c pmac_i2c_open +EXPORT_SYMBOL_GPL vmlinux 0xc82b061b rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0xc8bc8e37 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xc91a67d4 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0xc94966b1 swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc971879c class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xc9b908e6 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0xc9c39b6a init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xc9f5d6b0 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0xca32a2aa ide_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xca63506e power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xcabe041a crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0xcace6a13 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xcafc7ba8 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0xcb0d9a4b transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xcb1f3637 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0xcb2382c9 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xcb2bdd36 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xcba7722f power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0xcc02f9f2 ide_pci_setup_ports +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc7a2564 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xccd6f2ec attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0xcce6c092 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xcd5c1e7e __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0xcd735b94 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xcd7d34a5 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xcd9fc58e bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xcdb01877 ktime_add_ns +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcde230cd usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xce16120e pmac_backlight_mutex +EXPORT_SYMBOL_GPL vmlinux 0xce38e4dd nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xce5c35ff sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xce85ba29 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xce8cbadd sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xcef048cd usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xcef2f376 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0xcf1a9e42 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xcf1ba129 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0xcf2a8e21 pmf_call_one +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcf91d301 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcff21df7 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd0811697 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0f2fb2c klist_next +EXPORT_SYMBOL_GPL vmlinux 0xd1172d2a inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0xd1252d91 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd16a9f12 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xd1ae5d1d blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0xd1d4e945 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xd1d8adad atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd1e4c312 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0xd1fcc5a5 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0xd25dd77d crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2920042 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2d33930 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xd31bb411 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xd33e1f38 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0xd34d5c1f tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0xd38ed7d9 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0xd3939110 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xd394e70a usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xd3e8a1c8 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0xd409c585 ide_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0xd4238cc3 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0xd425e044 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xd4463174 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0xd45e84be seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xd4d3d3e0 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0xd4ff5d0f i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0xd5bbba27 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0xd5dd4473 device_del +EXPORT_SYMBOL_GPL vmlinux 0xd69a45ba aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xd69e10d2 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xd6b11ea4 inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd6c0ed82 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0xd6ccdbf5 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0xd6d787c5 check_media_bay_by_base +EXPORT_SYMBOL_GPL vmlinux 0xd703ba60 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0xd70ef59d xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xd7349c70 ide_dma_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd73f2a9e gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd76ce638 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0xd7ac5e68 each_symbol +EXPORT_SYMBOL_GPL vmlinux 0xd7cf6525 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd81bd571 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0xd831cd90 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xd846dc3d rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xd86e15ba eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0xd8ba48ef regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0xd8ca1515 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0xd8df8f93 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd9132c09 cpu_remove_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0xd925a081 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0xd92d13a6 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0xd99de3ce ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xd9c9903d __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0xd9e50a93 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xd9ed6225 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0xda03f253 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda3cbb04 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0xda716d98 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0xda81b30f mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0xda905d47 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xda92a74c cpu_remove_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0xdab64a46 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xdadb98c6 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xdaee8079 ide_init_disk +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb044463 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb30783f relay_flush +EXPORT_SYMBOL_GPL vmlinux 0xdbb50fed __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0xdbf5b0a8 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xdc07f8fe atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xdc366fa2 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xdc4ea056 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0xdcd076da ide_release_dma_engine +EXPORT_SYMBOL_GPL vmlinux 0xdd16189f crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xdd18b17e device_register +EXPORT_SYMBOL_GPL vmlinux 0xdd33a235 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xdd7dd5ae usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0xdd7e9513 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0xdd82e15f pmac_i2c_close +EXPORT_SYMBOL_GPL vmlinux 0xdda0a67c cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xde0b0839 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0xde27f4b7 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde588825 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0xde636a7d skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0xde981023 lookup_create +EXPORT_SYMBOL_GPL vmlinux 0xdef64756 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xdf254b11 pmac_i2c_get_controller +EXPORT_SYMBOL_GPL vmlinux 0xdf26a294 user_update +EXPORT_SYMBOL_GPL vmlinux 0xdf27877b register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xdfb98bfd regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xdfed3ed3 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xe00572c0 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0xe07ca631 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0xe09c729b sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xe0adecf3 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xe0c72b75 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe123941b fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0xe14a67b6 isa_bridge_pcidev +EXPORT_SYMBOL_GPL vmlinux 0xe15edb9e scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xe16591ab stop_machine +EXPORT_SYMBOL_GPL vmlinux 0xe1961c19 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0xe21eac7c usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xe2877d7c ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0xe29278b3 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xe297bcc3 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe2a29a20 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xe2ea09dc platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0xe30dc869 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0xe39fa14f tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0xe3a6cbba ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0xe3a7fe81 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xe3aefdd4 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xe3bedff6 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0xe3c6b27c sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0xe3f43f9e ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xe408cf2d xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0xe4122772 ide_prep_sense +EXPORT_SYMBOL_GPL vmlinux 0xe416698b attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xe41fcefb register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xe4328d51 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4c3e015 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe4c41141 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0xe4d0cd0e invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0xe4e1a089 ide_get_best_pio_mode +EXPORT_SYMBOL_GPL vmlinux 0xe4f43d10 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0xe4faa687 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xe4fe4195 ide_host_add +EXPORT_SYMBOL_GPL vmlinux 0xe52de09a led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe6097f9c input_class +EXPORT_SYMBOL_GPL vmlinux 0xe622130c sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xe630e545 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe68ba2f7 cpu_add_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0xe6913127 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0xe6cd3855 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xe6f7457b __module_address +EXPORT_SYMBOL_GPL vmlinux 0xe6fea4fe sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe7069e01 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xe707f740 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xe7773867 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xe7b08068 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xe7f8477a ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xe7fbe937 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe884bab0 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0xe8a73eda sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0xe8c65ee1 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0xe8ce7e66 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe921754f ide_write_devctl +EXPORT_SYMBOL_GPL vmlinux 0xe937344c ide_cd_expiry +EXPORT_SYMBOL_GPL vmlinux 0xe9394235 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe97c2b9d scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xe9d1c704 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xe9f26405 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea34e0ea regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea70f666 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0xeae573a2 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb233d65 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xeb3057bc regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xebf59899 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0xec0ef152 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec2db002 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xec62ff1b br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0xecbaa1d1 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0xecdcabe6 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0xece34294 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0xecea75d0 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xed3d4c5a anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xed56ae8d dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xed8a9401 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xed96a497 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0xedc2994d ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0xedcd28b5 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0xede74815 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xee31f466 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xee60efcb pmac_i2c_get_type +EXPORT_SYMBOL_GPL vmlinux 0xeecac530 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0xef1ca7bd usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xef1ef0cf ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xef217248 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0xef3eefed xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef940281 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe21106 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xeff1331a part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0xf01f538c ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf072a09e spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xf081c3cc ide_allocate_dma_engine +EXPORT_SYMBOL_GPL vmlinux 0xf0b6592d scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xf0ebba9a crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0xf105d00d ide_in_drive_list +EXPORT_SYMBOL_GPL vmlinux 0xf1463412 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1b8e00a led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0xf1bb0538 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xf1d89860 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0xf2322487 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0xf2384a6f ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0xf2d3d6e7 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf2e06603 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xf2fb0ee1 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0xf2fddeea vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0xf30e0c61 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0xf315aede regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf35e5b6b ide_tf_load +EXPORT_SYMBOL_GPL vmlinux 0xf3a2c3ac ide_intr +EXPORT_SYMBOL_GPL vmlinux 0xf3afa437 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xf3e540f9 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xf3efed93 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0xf4193fc9 elv_register +EXPORT_SYMBOL_GPL vmlinux 0xf4256dcd usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xf43b96c1 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0xf4488540 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4a22fcd attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf4b2130c ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xf4b3b74d ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0xf4b9d377 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0xf50b14f9 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf535a077 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0xf53644c2 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf55ce8e7 ide_read_error +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5ab0ecb sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0xf6baf792 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6c9d9b8 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf71ca69d tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xf734480f find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xf78bcee3 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xf7e9ceca usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xf80ddaec get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0xf81ec55e ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0xf820cc8e __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf82a5049 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf863e82a flush_work +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8975908 pmf_get_function +EXPORT_SYMBOL_GPL vmlinux 0xf8c5f64e regulator_register +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf95bb431 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf9983aa3 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xfa2b7c42 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfa3a5631 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0xfa5d816f sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xfa66d18c sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xfa7c1406 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0xfa814c84 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0xfa9a0f10 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xfaca35e5 of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0xfae96de1 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0xfaf81975 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xfb3171fa kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xfb4cba2f ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xfb4d4c8e srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfbcafb05 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc109303 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0xfc2ba25c __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0xfc54be19 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xfd00df87 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xfd015801 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0xfd325927 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xfd38234c scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0xfd61b24e gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0xfd7ef871 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe0bd91d driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xfe66827f ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0xfe746055 user_read +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfeb01106 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xff122b9c rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xff5c677e ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0xff87a519 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0xffdf7543 of_scan_bus +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/powerpc/powerpc64-smp.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/powerpc/powerpc64-smp.modules @@ -0,0 +1,2161 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8250 +8250_pci +8390 +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abyss +ac97_bus +acecad +acenic +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +adfs +adi +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +ads7846 +adt7462 +adt7470 +adt7475 +adutux +adv7170 +adv7175 +adv7180 +adv7343 +aes_generic +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ah6 +ahci +aic79xx +aic7xxx +aic94xx +aiptek +aircable +airo +airo_cs +airport +alauda +ali-ircc +amd8111e +analog +ansi_cprng +anubis +aoe +appledisplay +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +ata_generic +ata_piix +aten +ath +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp870u +atxp1 +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +ax25 +axnet_cs +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +block2mtd +blowfish +bluecard_cs +bluetooth +bnep +bnx2 +bnx2i +bonding +bpa10x +bpck +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +bw-qcam +c67x00 +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cbc +cciss +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cicada +cifs +cirrusfb +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cn +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comm +configfs +core +cp210x +cpia +cpia2 +cpia_pp +cpia_usb +cpufreq_spudemand +cpufreq_stats +c-qcam +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +crc-t10dif +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +DAC960 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +dl2k +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dm-log +dm-mirror +dm-multipath +dm-queue-length +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dst +dst_ca +dstr +dtl1_cs +dummy +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +ecb +econet +ecryptfs +edac_core +eeprom +eeprom_93cx6 +eeti_ts +efs +elo +em28xx +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +eni +enic +epat +epca +epia +epic100 +eql +esi-sir +esp4 +esp6 +et1011c +et61x251 +eth1394 +ethoc +evbug +evdev +exofs +exportfs +f71805f +f71882fg +f75375s +farsync +fat +faulty +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +fit2 +fit3 +floppy +fm801-gp +fmvj18x_cs +forcedeth +fore_200e +freevxfs +friq +frpw +fscache +ftdi-elan +ftdi_sio +ftl +fujitsu_ts +funsoft +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gdth +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gxt4500 +g_zero +hamachi +hangcheck-timer +hci_uart +hci_vhci +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hexium_gemini +hexium_orion +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hpfs +hpilo +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +hwmon-vid +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-dev +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-nforce2 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_core +i2o_proc +i2o_scsi +i5k_amb +i82092 +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmcam +ibmpex +ib_mthca +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +icplus +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igbvf +ili9320 +imm +inexio +inftl +initio +input-polldev +int51x1 +intel_vr_nor +interact +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ipv6 +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_tcp +iscsi_trgt +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jme +joydev +joydump +jsm +kafs +kaweth +kbic +kbtab +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kyrofb +l2cap +l64781 +lanai +lapb +lapbether +lcd +ldusb +lec +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-lp3944 +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3lv02d +lis3lv02d_spi +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lms283gf05 +lnbp21 +lockd +loop +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxt +m25p80 +m52790 +ma600-sir +mac80211 +mac80211_hwsim +macvlan +magellan +map_absent +map_funcs +map_ram +map_rom +marvell +matrix_keypad +matroxfb_maven +matrox_w1 +max1111 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mc13783 +mc13783-core +mc33880 +mc44s803 +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +mdio-bitbang +mdio-gpio +md-mod +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +metronomefb +mfd-core +mga +michael_mic +microtek +mii +minix +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_core +mmc_spi +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +msdos +msp3400 +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +mwl8k +mxl5005s +mxl5007t +myri10ge +nand +nand_ecc +nand_ids +nandsim +national +natsemi +navman +nbd +ncpfs +ne2k-pci +neofb +net1080 +net2280 +netconsole +netrom +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +nilfs2 +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +n_r3964 +ns558 +ns83820 +nsc-ircc +ntfs +nvidiafb +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +of_mmc_spi +of_serial +ohci1394 +old_belkin-sir +olympic +omfs +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8023 +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_amd +pata_atp867x +pata_cs5520 +pata_efar +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_of_platform +pata_oldpiix +pata_pcmcia +pata_pdc2027x +pata_platform +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pc87360 +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pcmcia +pcmcia_core +pcnet32 +pcnet_cs +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +pegasus +penmount +pf +pg +phantom +phonedev +phonet +phram +physmap +physmap_of +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmac_zilog +pmc551 +pmcraid +pn_pep +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_generic +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism54 +ps3disk +ps3flash +ps3_gelic +ps3-lpm +ps3rom +ps3stor_lib +ps3vram +psmouse +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qsemi +qt1010 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8a66597-hcd +rack-meter +radeon +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +rfkill +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-cmos +rtc_cmos_setup +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-generic +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-ps3 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8187 +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s5h1409 +s5h1411 +s5h1420 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7191 +safe_serial +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sbp2 +sc92031 +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-of +sdhci-pci +sdhci-pltfm +sdio_uart +sd_mod +sdricoh_cs +se401 +seed +serial_core +serial_cs +serio_raw +sermouse +serpent +serport +sfc +sg +sha1_generic +sha256_generic +sha512_generic +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sisfb +sisusbvga +sit +sja1000 +sja1000_of_platform +sja1000_platform +skfp +skge +sky2 +sl811_cs +sl811-hcd +slhc +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-als4000 +snd-aoa +snd-aoa-codec-onyx +snd-aoa-codec-tas +snd-aoa-codec-toonie +snd-aoa-fabric-layout +snd-aoa-i2sbus +snd-aoa-soundbus +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-powermac +snd_ps3 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softdog +solos-pci +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +spufs +squashfs +sr_mod +ssb +ssfdc +sst25l +st +stallion +starfire +stb6000 +ste10Xp +stex +stinger +stir4200 +stowaway +stp +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +sysv +tcm825x +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda826x +tda827x +tda8290 +tda9840 +tda9875 +tda9887 +tdfx +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +tg3 +tgr192 +therm_pm72 +thmc50 +ths7303 +tifm_7xx1 +tifm_core +tifm_sd +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tle62x0 +tlv320aic23b +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_nsc +tps65023-regulator +tps6507x-regulator +trancevibrator +tridentfb +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp514x +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +typhoon +u132-hcd +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +uninorth-agp +upd64031a +upd64083 +usb8xxx +usbatm +usb_debug +usbhid +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-compat-ioctl32 +v4l2-int-device +vcan +ves1820 +ves1x93 +veth +vfat +vgastate +vgg2432a4 +via +via686a +viafb +via-ircc +via-rhine +via-sdmmc +via-velocity +vicam +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vitesse +vivi +vlsi_ir +vmac +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83977af_ir +w83l785ts +w9966 +w9968cf +wacom_w8001 +walkera0701 +wanrouter +wanxl +warrior +wavelan_cs +wbsd +wdrtas +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +windfarm_core +windfarm_cpufreq_clamp +windfarm_lm75_sensor +windfarm_max6690_sensor +windfarm_pid +windfarm_pm112 +windfarm_pm121 +windfarm_pm81 +windfarm_pm91 +windfarm_smu_controls +windfarm_smu_sat +windfarm_smu_sensors +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xilinx_ps2 +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/powerpc/powerpc-smp.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/powerpc/powerpc-smp.modules @@ -0,0 +1,2196 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8250 +8250_pci +8390 +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abyss +ac97_bus +acecad +acenic +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +adfs +adi +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +ads7846 +adt7462 +adt7470 +adt7475 +adutux +adv7170 +adv7175 +adv7180 +adv7343 +advansys +aedsp16 +aes_generic +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ah6 +aha152x_cs +ahci +aic79xx +aic7xxx +aic94xx +aiptek +aircable +airo +airo_cs +airport +alauda +ali-ircc +ambassador +amd8111e +ams +analog +ansi_cprng +ans-lcd +anubis +aoe +apm_emu +apm-emulation +apm_power +appledisplay +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +ata_generic +ata_piix +aten +ath +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp870u +atxp1 +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +ax25 +axnet_cs +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +block2mtd +blowfish +bluecard_cs +bluetooth +bmac +bnep +bnx2 +bnx2i +bonding +bpa10x +bpck +bpck6 +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +briq_panel +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +BusLogic +bw-qcam +c67x00 +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cbc +cciss +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cicada +cifs +cirrusfb +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cn +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comm +configfs +core +cp210x +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpufreq_stats +c-qcam +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +crc-t10dif +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +DAC960 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +dl2k +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dm-log +dm-mirror +dm-multipath +dm-queue-length +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +donauboe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dst +dst_ca +dstr +dtl1_cs +dummy +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +ecb +econet +ecryptfs +edac_core +eeprom +eeprom_93cx6 +eeti_ts +efs +elo +em28xx +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +eni +enic +epat +epca +epia +epic100 +eql +esi-sir +esp4 +esp6 +et1011c +et61x251 +eth1394 +ethoc +evbug +evdev +exofs +exportfs +f71805f +f71882fg +f75375s +farsync +fat +faulty +fb_sys_fops +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +fit2 +fit3 +floppy +fm801-gp +fmvj18x_cs +forcedeth +fore_200e +freevxfs +friq +frpw +fscache +ftdi-elan +ftdi_sio +ftl +fujitsu_ts +funsoft +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gdth +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +goku_udc +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gxt4500 +g_zero +hamachi +hci_uart +hci_vhci +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hexium_gemini +hexium_orion +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hpfs +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +hwmon-vid +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-hydra +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-mpc +i2c-nforce2 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i5k_amb +i82092 +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmcam +ibmpex +ib_mthca +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +icplus +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igbvf +ili9320 +imm +inexio +inftl +initio +input-polldev +int51x1 +intel_vr_nor +interact +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ipv6 +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_tcp +iscsi_trgt +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jme +joydev +joydump +jsm +kafs +kahlua +kaweth +kbic +kbtab +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kyrofb +l2cap +l64781 +lanai +lanstreamer +lapb +lapbether +lcd +ldusb +lec +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-lp3944 +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-gpio +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3lv02d +lis3lv02d_spi +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lockd +loop +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxt +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac53c94 +mac80211 +mac80211_hwsim +mace +macvlan +magellan +map_absent +map_funcs +map_ram +map_rom +marvell +matrix_keypad +matroxfb_maven +matrox_w1 +max1111 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mc13783 +mc13783-core +mc33880 +mc44s803 +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +mdio-bitbang +mdio-gpio +md-mod +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mesh +metronomefb +mfd-core +mga +michael_mic +microtek +mii +minix +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_core +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msp3400 +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +mv643xx_eth +mwl8k +mxl5005s +mxl5007t +myri10ge +nand +nand_ecc +nand_ids +nandsim +national +natsemi +navman +nbd +ncpfs +ne2k-pci +neofb +net1080 +netconsole +netrom +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +nicstar +nilfs2 +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +n_r3964 +ns558 +ns83820 +nsc-ircc +nsp32 +nsp_cs +ntfs +nvidiafb +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +of_serial +ohci1394 +old_belkin-sir +olympic +omfs +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8023 +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas2 +pata_amd +pata_atp867x +pata_cs5520 +pata_efar +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_of_platform +pata_oldpiix +pata_pcmcia +pata_pdc2027x +pata_platform +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pc87360 +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pcmcia +pcmcia_core +pcnet32 +pcnet_cs +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +pegasus +penmount +pf +pg +phantom +phonedev +phonet +phram +physmap +physmap_of +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmac_zilog +pmc551 +pmcraid +pmu_battery +pn_pep +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_generic +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism54 +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qsemi +qt1010 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8a66597-hcd +rack-meter +radeon +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +rfkill +ricoh_mmc +rio500 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-cmos +rtc_cmos_setup +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-generic +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8187 +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s5h1409 +s5h1411 +s5h1420 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7191 +safe_serial +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb_lib +sbp2 +sc92031 +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-of +sdhci-pci +sdhci-pltfm +sdio_uart +sd_mod +sdricoh_cs +se401 +seed +serial_core +serial_cs +serio_raw +sermouse +serpent +serport +sfc +sg +sha1_generic +sha256_generic +sha512_generic +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sisfb +sisusbvga +sit +sja1000 +sja1000_of_platform +sja1000_platform +skfp +skge +sky2 +sl811_cs +sl811-hcd +slhc +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-als4000 +snd-aoa +snd-aoa-codec-onyx +snd-aoa-codec-tas +snd-aoa-codec-toonie +snd-aoa-fabric-layout +snd-aoa-i2sbus +snd-aoa-soundbus +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-powermac +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softdog +solos-pci +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +sr_mod +ssb +sscape +ssfdc +sst25l +st +stallion +starfire +stb6000 +ste10Xp +stex +stinger +stir4200 +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +swim3 +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +tcm825x +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda826x +tda827x +tda8290 +tda9840 +tda9875 +tda9887 +tdfx +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +tg3 +tgr192 +therm_adt746x +therm_windtunnel +thmc50 +ths7303 +tifm_7xx1 +tifm_core +tifm_sd +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tle62x0 +tlv320aic23b +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_nsc +tps65023-regulator +tps6507x-regulator +trancevibrator +tridentfb +trix +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp514x +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +typhoon +u132-hcd +uart401 +uart6850 +uartlite +ubi +ucb1400_core +ucb1400_ts +udf +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +uninorth-agp +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbhid +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-int-device +vcan +ves1820 +ves1x93 +veth +vfat +vgastate +vgg2432a4 +via +via686a +viafb +via-ircc +via-rhine +via-sdmmc +via-velocity +vicam +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vitesse +vivi +vlsi_ir +vmac +v_midi +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83977af_ir +w83l785ts +w9966 +w9968cf +wacom_w8001 +walkera0701 +wanrouter +wanxl +warrior +wavelan_cs +wbsd +wdrtas +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +windfarm_core +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xilinx_emaclite +xilinx_ps2 +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +zatm +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/powerpc/powerpc.modules +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/powerpc/powerpc.modules @@ -0,0 +1,2201 @@ +3c359 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-xxxx +6pack +8021q +8139cp +8139too +8250 +8250_pci +8390 +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +aacraid +ab3100 +ab3100-core +ab3100-otp +abyss +ac97_bus +acecad +acenic +act200l-sir +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad1848 +ad7414 +ad7418 +ad7877 +ad7879 +adcxx +adfs +adi +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm8211 +adm9240 +adp5588-keys +ads7846 +adt7462 +adt7470 +adt7475 +adutux +adv7170 +adv7175 +adv7180 +adv7343 +advansys +aedsp16 +aes_generic +af_802154 +af9013 +affs +af_key +af-rxrpc +agpgart +ah4 +ah6 +aha152x_cs +ahci +aic79xx +aic7xxx +aic94xx +aiptek +aircable +airo +airo_cs +airport +alauda +ali-ircc +ambassador +amd8111e +ams +analog +ansi_cprng +ans-lcd +anubis +aoe +apm_emu +apm-emulation +apm_power +appledisplay +appletalk +appletouch +applicom +ar7part +ar9170usb +arc4 +arcmsr +arcnet +arc-rawmode +arc-rimi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +asix +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +ata_generic +ata_piix +aten +ath +ath9k +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atm +atmel +atmel_cs +atmel_pci +atmtcp +atp870u +atxp1 +au0828 +au8522 +aufs +authenc +auth_rpcgss +autofs +autofs4 +ax25 +axnet_cs +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +be2iscsi +be2net +befs +belkin_sa +berry_charge +bfa +bfs +bfusb +binfmt_misc +block2mtd +blowfish +bluecard_cs +bluetooth +bmac +bnep +bnx2 +bnx2i +bonding +bpa10x +bpck +bpck6 +bpqether +bq24022 +bq27x00_battery +br2684 +bridge +briq_panel +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +BusLogic +bw-qcam +c67x00 +cachefiles +cafe_ccic +cafe_nand +camellia +can +can-bcm +can-dev +can-raw +capmode +carminefb +cassini +cast5 +cast6 +catc +cb710 +cb710-mmc +cbc +cciss +cdc-acm +cdc_eem +cdc_ether +cdc-phonet +cdc_subset +cdc-wdm +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +ch +ch341 +ch7006 +chipreg +cicada +cifs +cirrusfb +clip +cls_basic +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cn +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comm +configfs +core +cp210x +cpia +cpia2 +cpia_pp +cpia_usb +cpqarray +cpufreq_stats +c-qcam +cramfs +crc32c +crc7 +crc-ccitt +crc-itu-t +crc-t10dif +cryptd +cryptoloop +crypto_null +cs5345 +cs53l32a +cts +cuse +cx18 +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25840 +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxgb +cxgb3 +cxgb3i +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +da9030_battery +da9034-ts +da903x +da903x_bl +DAC960 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +des_generic +dib0070 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +display +dl2k +dlci +dlm +dm1105 +dm9601 +dm-crypt +dme1737 +dmfe +dm-log +dm-mirror +dm-multipath +dm-queue-length +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2000 +doc2001 +doc2001plus +docecc +docprobe +donauboe +dpt_i2o +drm +drm_kms_helper +ds1621 +ds1682 +ds2482 +ds2490 +ds2760_battery +ds2782_battery +dsbr100 +dscc4 +dst +dst_ca +dstr +dtl1_cs +dummy +dv1394 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-m920x +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +e100 +e1000 +e1000e +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_ulog +ebt_vlan +ecb +econet +ecryptfs +edac_core +eeprom +eeprom_93cx6 +eeti_ts +efs +elo +em28xx +em28xx-dvb +em_cmp +emi26 +emi62 +em_meta +em_nbyte +empeg +ems_pci +ems_usb +em_text +emu10k1-gp +em_u32 +eni +enic +epat +epca +epia +epic100 +eql +esi-sir +esp4 +esp6 +et1011c +et61x251 +eth1394 +ethoc +evbug +evdev +exofs +exportfs +f71805f +f71882fg +f75375s +farsync +fat +faulty +fb_sys_fops +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +firedtv +firestream +fit2 +fit3 +floppy +fm801-gp +fmvj18x_cs +forcedeth +fore_200e +freevxfs +friq +frpw +fscache +ftdi-elan +ftdi_sio +ftl +fujitsu_ts +funsoft +g760a +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gdth +generic +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_file_storage +gfs2 +ghash-generic +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_midi +gpio-addr-flash +gpio_keys +gpio_mouse +gpio_vbus +g_printer +grip +grip_mp +g_serial +gspca_conex +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_ov519 +gspca_ov534 +gspca_pac207 +gspca_pac7311 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_stk014 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_tv8532 +gspca_vc032x +gspca_zc3xx +gtco +guillemot +gunze +gxt4500 +g_zero +hamachi +hci_uart +hci_vhci +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hexium_gemini +hexium_orion +hfs +hfsplus +hid +hid-3m-pct +hid-a4tech +hid-apple +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-drff +hid-ezkey +hid-gaff +hid-gyration +hid-kensington +hid-kye +hid-logitech +hid-microsoft +hid-monterey +hid-mosart +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-pl +hid-quanta +hid-samsung +hid-sjoy +hid-sony +hid-stantum +hid-sunplus +hid-tmff +hid-topseed +hid-twinhan +hid-wacom +hid-zpff +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hpfs +hpilo +hptiop +hso +htc-pasic3 +hwa-hc +hwa-rc +hwmon-vid +i1480-dfu-usb +i1480-est +i1480u-wlp +i2400m +i2400m-sdio +i2400m-usb +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-dev +i2c-gpio +i2c-hydra +i2c-i801 +i2c-isch +i2c-matroxfb +i2c-mpc +i2c-nforce2 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-voodoo3 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i5k_amb +i82092 +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmcam +ibmpex +ib_mthca +ibmtr_cs +ib_sa +ib_srp +ib_ucm +ib_umad +ib_uverbs +icplus +ics932s401 +idmouse +idt77252 +ieee1394 +ifb +iforce +igbvf +ili9320 +imm +inexio +inftl +initio +input-polldev +int51x1 +intel_vr_nor +interact +ioc4 +io_edgeport +io_ti +iowarrior +ip2 +ip6_queue +ip6table_filter +ip6table_mangle +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_LOG +ip6t_mh +ip6t_REJECT +ip6t_rt +ip6_tunnel +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ip_queue +ipr +ips +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_addrtype +ipt_ah +ipt_CLUSTERIP +ipt_ecn +ipt_ECN +ipt_LOG +ipt_MASQUERADE +ipt_NETMAP +ipt_REDIRECT +ipt_REJECT +ipt_ULOG +ipv6 +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ipw +ipw2100 +ipw2200 +ipx +ircomm +ir-common +ircomm-tty +irda +irda-usb +ir-kbd-i2c +irlan +irnet +irtty-sir +ir-usb +iscsi_tcp +iscsi_trgt +isight_firmware +isl29003 +isl6405 +isl6421 +isofs +isp116x-hcd +isp1362-hcd +isp1760 +istallion +it87 +itd1000 +iuu_phoenix +ivtv +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iwlagn +iwlcore +iwmc3200wifi +ixgb +ixgbe +ixj +ixj_pcmcia +jedec_probe +jffs2 +jfs +jme +joydev +joydump +jsm +kafs +kahlua +kaweth +kbic +kbtab +keyspan +keyspan_pda +keyspan_remote +khazad +kingsun-sir +kl5kusb105 +kobil_sct +konicawc +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_pci +kyrofb +l2cap +l64781 +lanai +lanstreamer +lapb +lapbether +lcd +ldusb +lec +leds-bd2802 +leds-da903x +leds-dac124s085 +leds-lp3944 +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-gpio +legousbtower +lgdt3305 +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libcrc32c +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libosd +libsas +libsrp +lightning +linear +lirc_atiusb +lirc_bt829 +lirc_dev +lirc_ene0100 +lirc_i2c +lirc_igorplugusb +lirc_imon +lirc_it87 +lirc_ite8709 +lirc_mceusb +lirc_sasem +lirc_serial +lirc_sir +lirc_streamzap +lirc_ttusbir +lis3lv02d +lis3lv02d_spi +litelink-sir +lkkbd +llc2 +lm63 +lm70 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lmc +lms283gf05 +lnbp21 +lockd +loop +lp +lp3971 +lpddr_cmds +lpfc +lrw +ltc4215 +ltc4245 +ltv350qv +lxt +lzo +lzo_compress +lzo_decompress +m25p80 +m52790 +ma600-sir +mac53c94 +mac80211 +mac80211_hwsim +mace +macvlan +magellan +map_absent +map_funcs +map_ram +map_rom +marvell +matrix_keypad +matroxfb_maven +matrox_w1 +max1111 +max1586 +max1619 +max17040_battery +max3100 +max6650 +max6875 +max7301 +max732x +max7359_keypad +mb862xxfb +mc13783 +mc13783-core +mc33880 +mc44s803 +mcp2120-sir +mcp23s08 +mcs5000_ts +mcs7780 +mcs7830 +mct_u232 +md4 +mdc800 +mdio +mdio-bitbang +mdio-gpio +md-mod +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mesh +metronomefb +mfd-core +mga +michael_mic +microtek +mii +minix +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mmc_block +mmc_core +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpt2sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu401 +msdos +msp3400 +mt2060 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtdconcat +mtd_dataflash +mtd_oobtest +mtdoops +mtd_pagetest +mtdram +mtd_readtest +mtd_speedtest +mtd_stresstest +mtd_subpagetest +mtd_torturetest +mtouch +multipath +mv643xx_eth +mwl8k +mxl5005s +mxl5007t +myri10ge +nand +nand_ecc +nand_ids +nandsim +national +natsemi +navman +nbd +ncpfs +ne2k-pci +neofb +net1080 +net2280 +netconsole +netrom +netwave_cs +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_tftp +nf_defrag_ipv4 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nftl +nf_tproxy_core +n_hdlc +nicstar +nilfs2 +nl802154 +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp437 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nop-usb-xceiv +nouveau +n_r3964 +ns558 +ns83820 +nsc-ircc +nsp32 +nsp_cs +ntfs +nvidiafb +nxt200x +nxt6000 +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +of_serial +ohci1394 +old_belkin-sir +olympic +omfs +omninet +on20 +on26 +onenand +onenand_sim +opencores-kbd +opl3 +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +osd +osdblk +osst +oti6858 +output +ov7670 +ov772x +ovcamchip +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8023 +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas2 +pata_amd +pata_atp867x +pata_cs5520 +pata_efar +pata_it8213 +pata_it821x +pata_jmicron +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_of_platform +pata_oldpiix +pata_pcmcia +pata_pdc2027x +pata_platform +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pc87360 +pc87427 +pca953x +pcbc +pcd +pcf50633-adc +pcf50633-charger +pcf50633-core +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf857x +pcf8591 +pci +pci200syn +pcilynx +pcips2 +pcmcia +pcmcia_core +pcnet32 +pcnet_cs +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +pegasus +penmount +pf +pg +phantom +phonedev +phonet +phram +physmap +physmap_of +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +pm2fb +pm3fb +pmac_zilog +pmc551 +pmcraid +pmu_battery +pn_pep +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_generic +ppp_mppe +pppoatm +pppoe +pppol2tp +pppox +ppp_synctty +pps_core +prism54 +psmouse +pss +pt +pvrusb2 +pwc +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlge +qlogic_cs +qlogicfas408 +qnx4 +qsemi +qt1010 +quickcam_messenger +quota_tree +quota_v1 +quota_v2 +r128 +r8169 +r8a66597-hcd +rack-meter +radeon +radio-gemtek-pci +radio-i2c-si470x +radio-maestro +radio-maxiradio +radio-mr800 +radio-si4713 +radio-tea5764 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramzswap +raw +raw1394 +ray_cs +rdma_cm +rdma_ucm +redboot +reed_solomon +reiserfs +rfc1051 +rfc1201 +rfcomm +rfd_ftl +rfkill +ricoh_mmc +rio500 +riscom8 +rivafb +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rpcsec_gss_spkm3 +rrunner +rsrc_nonstatic +rt2400pci +rt2500pci +rt2500usb +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-ab3100 +rtc-bq4802 +rtc-cmos +rtc_cmos_setup +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds3234 +rtc-fm3130 +rtc-generic +rtc-isl1208 +rtc-m41t80 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rs5c348 +rtc-rs5c372 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-twl4030 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl8150 +rtl8187 +rxkad +s1d13xxxfb +s2255drv +s2io +s3fb +s5h1409 +s5h1411 +s5h1420 +saa5246a +saa5249 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7191 +safe_serial +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_sx4 +sata_uli +sata_via +sata_vsc +savage +savagefb +sb +sb_lib +sbp2 +sc92031 +sch_atm +sch_cbq +sch_drr +sch_dsmark +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_multiq +sch_netem +sch_prio +sch_red +sch_sfq +sch_tbf +sch_teql +sco +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +scsi_wait_scan +sctp +sdhci +sdhci-of +sdhci-pci +sdhci-pltfm +sdio_uart +sd_mod +sdricoh_cs +se401 +seed +serial_core +serial_cs +serio_raw +sermouse +serpent +serport +sfc +sg +sha1_generic +sha256_generic +sha512_generic +sht15 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sir-dev +sis +sis190 +sis5595 +sis900 +sisfb +sisusbvga +sit +sja1000 +sja1000_of_platform +sja1000_platform +skfp +skge +sky2 +sl811_cs +sl811-hcd +slhc +slip +slram +sm501 +sm501fb +smbfs +smc91c92_cs +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc9420 +smsc95xx +smsc-ircc2 +smsdvb +smsmdtv +smssdio +smsusb +sn9c102 +snd +snd-ac97-codec +snd-ad1889 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-als300 +snd-als4000 +snd-aoa +snd-aoa-codec-onyx +snd-aoa-codec-tas +snd-aoa-codec-toonie +snd-aoa-fabric-layout +snd-aoa-i2sbus +snd-aoa-soundbus +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-atihdmi +snd-hda-codec-ca0110 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-idt +snd-hda-codec-intelhdmi +snd-hda-codec-nvhdmi +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-page-alloc +snd-pcm +snd-pcm-oss +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-powermac +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-oss +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ad1836 +snd-soc-ad1938 +snd-soc-ad73311 +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4642 +snd-soc-core +snd-soc-cs4270 +snd-soc-l3 +snd-soc-max9877 +snd-soc-pcm3008 +snd-soc-spdif +snd-soc-ssm2602 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic3x +snd-soc-twl4030 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8776 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8940 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8993 +snd-soc-wm9081 +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-usb-audio +snd-usb-caiaq +snd-usb-lib +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +softdog +solos-pci +sound +soundcore +sound_firmware +sp8870 +sp887x +spaceball +spaceorb +spcp8x5 +specialix +spectrum_cs +speedtch +spi_bitbang +spi_butterfly +spidev +spi_gpio +spi_lm70llp +squashfs +sr_mod +ssb +sscape +ssfdc +sst25l +st +stallion +starfire +stb6000 +ste10Xp +stex +stinger +stir4200 +stowaway +stp +stradis +strip +stv0288 +stv0297 +stv0299 +stv0900 +stv6110 +stv680 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +swim3 +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +tcm825x +tcp_bic +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10086 +tda18271 +tda7432 +tda8083 +tda826x +tda827x +tda8290 +tda9840 +tda9875 +tda9887 +tdfx +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tehuti +tekram-sir +tg3 +tgr192 +therm_adt746x +therm_windtunnel +thmc50 +ths7303 +tifm_7xx1 +tifm_core +tifm_sd +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tle62x0 +tlv320aic23b +tmdc +tmiofb +tmp401 +tmp421 +tms380tr +tmscsim +tmspci +toim3232-sir +touchit213 +touchright +touchwin +tpm +tpm_atmel +tpm_nsc +tps65010 +tps65023-regulator +tps6507x-regulator +trancevibrator +tridentfb +trix +ts_bm +tsc2007 +ts_fsm +ts_kmp +tsl2550 +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp514x +tvp5150 +tw9910 +twidjoy +twl4030-gpio +twl4030_keypad +twl4030-pwrbutton +twl4030-usb +twl4030_wdt +twofish +twofish_common +typhoon +u132-hcd +uart401 +uart6850 +uartlite +ubi +ubifs +ucb1400_core +ucb1400_ts +udf +ueagle-atm +ufs +uinput +uio +uio_aec +uio_cif +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uio_smx +uli526x +ultracam +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-sddr09 +ums-sddr55 +ums-usbat +uninorth-agp +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbhid +usblcd +usbled +usblp +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvideo +usbvision +userspace-consumer +uss720 +uvcvideo +uvesafb +uwb +v4l1-compat +v4l2-common +v4l2-int-device +vcan +ves1820 +ves1x93 +veth +vfat +vgastate +vgg2432a4 +via +via686a +viafb +via-ircc +via-rhine +via-sdmmc +via-velocity +vicam +video1394 +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +virtio +virtio_balloon +virtio_blk +virtio_console +virtio_net +virtio_pci +virtio_ring +virtio-rng +virtual +visor +vitesse +vivi +vlsi_ir +vmac +v_midi +vp27smpx +vpx3220 +vstusb +vsxxxaa +vt1211 +vt8231 +vt8623fb +vxge +w1_bq27000 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1-gpio +w1_smem +w1_therm +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83977af_ir +w83l785ts +w9966 +w9968cf +wacom_w8001 +walkera0701 +wanrouter +wanxl +warrior +wavelan_cs +wbsd +wdrtas +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wimax +winbond-840 +windfarm_core +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1271 +wl3501_cs +wlp +wm831x +wm831x_bl +wm831x-dcdc +wm831x-gpio +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x_wdt +wm8350 +wm8350-hwmon +wm8350-i2c +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-core +wm8400-regulator +wm8739 +wm8775 +wm97xx-ts +wp512 +wpan-class +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_ipcomp +xfrm_user +xfs +xhci +xilinx_emaclite +xilinx_ps2 +xirc2ps_cs +xircom_cb +xor +xpad +xprtrdma +x_tables +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNMARK +xt_CONNSECMARK +xt_conntrack +xt_dccp +xt_dscp +xt_DSCP +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xtkbd +xt_LED +xt_length +xt_limit +xt_mac +xt_mark +xt_MARK +xt_multiport +xt_NFLOG +xt_NFQUEUE +xt_NOTRACK +xt_osf +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_realm +xt_recent +xts +xt_sctp +xt_SECMARK +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_tcpudp +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xvmalloc +yam +yealink +yellowfin +yenta_socket +zatm +zc0301 +zd1201 +zd1211rw +zhenhua +zl10036 +zl10039 +zl10353 +zlib +zlib_deflate +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/powerpc/powerpc64-smp +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/powerpc/powerpc64-smp @@ -0,0 +1,9722 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x4e264f13 suni_init +EXPORT_SYMBOL drivers/block/loop 0x918225de loop_register_transfer +EXPORT_SYMBOL drivers/block/loop 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL drivers/block/paride/paride 0x0591b996 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x0831a937 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x2c2ae210 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x3f2dabae pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x42c7c95e paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x52a6650a pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x61a8bdf8 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x6e194675 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x755a6efb pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x97509141 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x9ac7ab93 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xe6135955 pi_connect +EXPORT_SYMBOL drivers/char/agp/agpgart 0x05be654c agp_generic_alloc_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0736aeff agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0be37398 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0f88cad5 agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x11ba0fb4 agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x13140cd3 agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1a21578d agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1d589154 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3059e103 agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x3848752b agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4589eeab agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b06c492 agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5ebd71f4 agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0x618c8944 agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x6796aa8e agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x6da7f216 agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x81c68b9d agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x885b4279 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x89248488 agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x8b7c97fd agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9ad08d41 agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9e8db787 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xaca0b86f agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb00b8970 agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb5875acb agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb5c7369c agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb5c871ab agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0xbe6238d4 agp_backend_release +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xccec13c2 agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf3e3719b agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf58a939a agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xfc3ca1c8 agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xfdb43bda agp_alloc_page_array +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x05d321fd ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x07483879 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x08f1844a ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x0cc21f88 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x0ff98ed3 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x22296742 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2d924f91 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2e2e5bc5 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x31cc8f09 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x507f7ca0 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5ccd4c56 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x65c54895 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8e1d0c54 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9f65a62b ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xadb726c0 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb2dfb8e8 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb3f85599 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb64d40e6 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc87d839b ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc9c2e75b ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xce302165 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf3f77953 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf625db7e ipmi_smi_msg_received +EXPORT_SYMBOL drivers/edac/edac_core 0x6fd14bbc edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/edac/edac_core 0x71859b70 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0x8aea7c56 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/gpu/drm/drm 0x018d8d5e drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x035f3307 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0381e790 drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05b3c902 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05dd7cb3 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0681459d drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07150d66 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x08ea789e drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0be5ad72 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ea90f81 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x115be9cc drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x13b04112 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1462deed drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x15a7e8f9 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x17e71d00 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x183d355d drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x19db2da7 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x19e0ae61 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a8f4403 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1e9b8188 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2094562c drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x209ba608 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23a72384 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23a9c12d drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x257ae21e drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25fc019b drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x297909d8 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a770074 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2b39ff60 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2d511f67 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2e864cd3 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2ebb3b9b drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x35095f41 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3622bae8 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x36ea9653 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x399ae0d1 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f46ed04 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x412773d2 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x412aa477 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42ed8021 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4461cf1a drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4479142e drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47e53dee drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x498720b9 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4df72c1f drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x578e783e drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x588864bc drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x590641a9 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x59daad25 drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5a790b5b drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5aa9242c drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e42df1a drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5f486292 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60ad81ac drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6c0bc9eb drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f939c52 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x705257e2 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x72014d72 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x73d79ba4 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7742d783 drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x775bb054 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7774bf5b drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b503370 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1ffc04 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c44ab75 drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7d1afab7 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7fa1dc99 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x81f3e9f2 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8663b31c drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x86d2449d drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x86e4c35a drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8b0f2d7e drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8d72a30d drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x93737fb1 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x958ca559 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x98e33b38 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x99376b7c drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9994f335 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9b22d3c9 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9cab71f9 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f0a528d drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f1d4ee0 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa16d34eb drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa4a7b439 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaa299a1d drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaa35c431 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xabf2c751 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0xad2d3092 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0bfb078 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb850f0b3 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb8c2e4ed drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb908c058 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb9202d61 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbb606ebe drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbcfc2c68 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbd8debe5 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe2703a1 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbea226bf drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf2c0e6c drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc0dad499 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc309d405 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc4f2597a drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc524b8e9 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc7c0da9b drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc981d350 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc99262dc drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcc12741a drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcfdff29b drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd17a32cb drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd510276d drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd57d4903 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63d6819 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd975f800 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0xda16d3ef drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdb129cdb drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdc97e68c drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd1a7f01 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdeb3c2cd drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe01e39d2 drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2ed0481 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe40924a0 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe78f7ccf drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe79f3928 drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xec6488bb drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xef04bc30 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xef587980 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf25d8a4a drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf3e01c04 drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfc28593a drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfe9e7a26 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xff3c7d14 drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x07171633 drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x110ea455 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x11fd759b drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x18c6a9f2 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1b5e7411 drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1d4d6cd3 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x278a92f7 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3600fb0b drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x455683bb drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5dc01457 drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7884b535 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7ba93bd7 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x82ca73df i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x96080fb4 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x968af111 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa02cc705 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb4aae816 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbcdae944 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc2f3da7c drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc462e2b5 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc8172d89 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe87bf0ab drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xec58ab97 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf7eab4df drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf843c7aa drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x0900f720 radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x90c70076 radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x04a1cf26 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0e79cdf6 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x129cd060 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1844102f ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1a414bde ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1ccf1d92 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x22dc4798 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x23ba8329 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2a038d4e ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2b7834b0 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2b78ca3e ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x33840d8f ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3d203d9c ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4305478f ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4380c12c ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x44409a13 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4531bbd4 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4998650a ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4afc5616 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4e0aa310 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5ca5cb47 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5de38829 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5e6756c5 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6448b309 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x67bb0937 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x693eee63 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x70dc068c ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7d25fc22 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x825a92cf ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x886dc8d4 ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8dcc50cc ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8e21114e ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x90a81084 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9371f948 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x94a45538 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9a1a636e ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9fd93961 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa0fd5276 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa14caf0e ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa2425165 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xac0e50d1 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaf567bfe ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb0b24819 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb1179cab ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb88f568c ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbdc74f35 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2b5ed02 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc5ede81c ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc64022a6 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc985ee54 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe30a5583 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe6247f73 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe8500b0f ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xea8e6147 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf52e5f52 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfcce372b ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe362a63 ttm_io_prot +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x2468840b i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x80c6af3c i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x3e8f6113 amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x012e867a hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x013d825f hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x044c7842 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x07f7b8a1 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b02802c hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0b234c4e dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0d2a139e hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0ef300c5 hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x158ac548 dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1d4683a0 hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x20b1723e hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x261b434e hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x26b0dbd7 hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x28259f39 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x29b0a087 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2b3dd1c7 hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2ebf6e5a dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x378815fa hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3a8eb957 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4083d0ac hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x426e7ab2 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x433da8e9 hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x486f8bff hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x48bc426c hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x49a95dc4 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4a9cd770 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4cf0c015 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x51d67063 hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5b1d3979 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6148658c hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x6497533d hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x670bc318 hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x68b51e47 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x74433d85 hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7d0f1156 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8e4a830a hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x922762fb hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9453ca41 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x98ba4213 dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9a6cd999 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9dd64729 hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa68c832a hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa70aa975 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa8e1aade hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xad849e67 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb23f1025 hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb31f10ce hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xb3ed8488 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbf1f7320 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc93144a8 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc9b85fde hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcd9e772b dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd0de8667 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1dc973b hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdc59b0f2 hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdd53e218 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xddfed96c hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe2e64620 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe6872fed hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe97bea6e __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xed981d5d hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf023395e hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf7ca5217 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf91f1c97 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf99d7d8a hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf9c4f218 hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfa49c4cf hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfa70b355 hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfdb1faeb hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xff1716d1 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x178c4ac4 ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x2e0d672e ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x456658a2 ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x6a50b3aa rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x6e7a5651 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xa49e8014 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xed53163f rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xee867448 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xf72d45a9 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0a5e5064 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3a64aac5 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3a743c44 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x40c6c4a6 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x48748f16 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x58a7807c ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x66ea39cf ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9c797385 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb52f640d ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xcd795ec8 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd3c217fc ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe0ef947a ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xee800c11 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf31a1fd7 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf4120bd1 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf458f602 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xf8c862b9 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00ce9af4 ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06830b9a ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1a12f9c5 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1c6cff8b ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1cdd346d ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e960050 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2441853b ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2629b2d1 ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2ea674ca ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2f33b320 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x34911b91 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x354492a5 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x36ca0f8f ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3de1db94 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x44caafa4 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x49628b22 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4b64fa0e ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4fad7802 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5339577f ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5995f8a2 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5c378bd3 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5d580e5d ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x617e8b39 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6211e471 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x63c94b5f ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x649c4405 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64d224fd ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64e25aef ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x68e729a1 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6a521d2e ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x72f154e5 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x779b7401 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7e02996f ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8021aad1 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x831ba872 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x83cddb2a ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x885e0d98 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8b84582e ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cb08f4c ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x94240934 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x94a240b1 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9e2a4ba3 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa20d22a6 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa49db439 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa78b076a ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xadac94da ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb99da56d ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb9c1afc9 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xba30f923 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbaf997b6 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbbab7892 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbdcd7cdb ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcb1ed9ad ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3352cb2 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd872ed83 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd8851593 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdc1d2922 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdcdfc01c ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdd4414e1 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xde7df826 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe40dc781 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe69bfc67 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe7eec248 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf181d653 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf2b4780e ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf2e681ee ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf64c4dd1 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf96fc9de ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x052a6e34 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x21223510 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2fdf59b5 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x32aeaf46 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7447fdd3 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x750d3222 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7c121b31 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x844181ea ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x8c1159c1 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x9def9522 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x9f50d961 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xad8f0abe ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x1358ddf9 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x3ac0be8d ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x4d5c7752 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5c7a7050 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x6043324f ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7c61782e ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x97282e04 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xd3f62ee8 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf6a5def7 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x26515729 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x43585625 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x4b72e3a6 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x6161f31f iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x6d682464 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbd01fb80 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xc8a44418 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xe3b4cc2d iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0bc72f88 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x15161410 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2d063038 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2f10086e rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x32769a66 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x342d1a13 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3842adc1 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x560c63e0 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x662c0c4c rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9436be5b rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x95e9f038 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x99808709 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9a9a926b rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xba692179 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xbeb206e3 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xd7de62bf rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xdd0b30c0 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xff353e9e rdma_resolve_addr +EXPORT_SYMBOL drivers/input/gameport/gameport 0x2cd2c2f8 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x35b58345 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x4d14aa99 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x87b8e3a0 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x99e75650 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc47c732e gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0xcc248159 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xd724651b gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0xe1eb86c8 __gameport_register_driver +EXPORT_SYMBOL drivers/input/input-polldev 0x2dafbcfd input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x54b534ad input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x6798470b input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xabc351ba input_allocate_polled_device +EXPORT_SYMBOL drivers/md/dm-log 0x3433d0fe dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x60e8be13 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0xb94520cc dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0xf29aeeba dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x70318b82 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0xce6de8f3 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0xde06348c dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0xe8e74344 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/md-mod 0x0f700b72 md_check_no_bitmap +EXPORT_SYMBOL drivers/md/md-mod 0x1cda9704 bitmap_unplug +EXPORT_SYMBOL drivers/md/md-mod 0x29ec3d66 bitmap_close_sync +EXPORT_SYMBOL drivers/md/md-mod 0x2bd55770 md_wait_for_blocked_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x2c54584d bitmap_startwrite +EXPORT_SYMBOL drivers/md/md-mod 0x2defae09 bitmap_start_sync +EXPORT_SYMBOL drivers/md/md-mod 0x33e78102 unregister_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x36f1b483 md_write_start +EXPORT_SYMBOL drivers/md/md-mod 0x4e0a0afa md_write_end +EXPORT_SYMBOL drivers/md/md-mod 0x53e1408d md_integrity_add_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x66b64b03 md_set_array_sectors +EXPORT_SYMBOL drivers/md/md-mod 0x83dc18b8 bitmap_endwrite +EXPORT_SYMBOL drivers/md/md-mod 0x84171bae md_register_thread +EXPORT_SYMBOL drivers/md/md-mod 0x923e6cda register_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x9a8f3f65 mddev_congested +EXPORT_SYMBOL drivers/md/md-mod 0x9adc4127 md_integrity_register +EXPORT_SYMBOL drivers/md/md-mod 0xa3f6cf33 bitmap_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xb3b92318 md_done_sync +EXPORT_SYMBOL drivers/md/md-mod 0xb73da77b md_wakeup_thread +EXPORT_SYMBOL drivers/md/md-mod 0xe6ecf233 md_unregister_thread +EXPORT_SYMBOL drivers/md/md-mod 0xeb03eb6c bitmap_cond_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0xf12c3761 md_error +EXPORT_SYMBOL drivers/md/md-mod 0xf8c26e05 md_check_recovery +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0x7456cc61 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0x0c099d64 mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0x1401b4fc mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0x0f89d91c mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0x90d4c401 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0xf8189f69 mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0xd9f52ee8 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0xc2eafbd4 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0xa730352e xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x27a9b2ee flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x312bcfb0 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3fc0876f flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x4edf9a73 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x5455e7a8 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x5e782ffa flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x771015f4 flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x7748b302 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x79713205 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x7a848296 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x7d9b614a flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x844266cb flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x91565001 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x9e7b7cf4 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa055cc73 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xa7d61227 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xba5b2dcb flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xc7d36154 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xdd46c03b flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfbe62940 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x1394a24a bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x7808562a bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xc21e3744 bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xc8501738 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x029b0115 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x3f9147d9 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x9b3d7870 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xb0efabac dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xc42194a4 dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xc98854af dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xd498a95b dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xf8771605 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xfde22a73 rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0xeb8143a2 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0b2686ab dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0f6f09c0 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x16b646d4 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x16fe7c15 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x216fe780 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x22cbb1c1 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x239957ed dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x25ee78ee dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x3687f861 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4011d18e dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4c6ca349 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5ba5ab83 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x60adc946 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x60f574ec dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6d54f72e dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6da517b9 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6e930b84 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x7ec8e30a dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x7fbef692 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x81f28e98 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x82444b8b dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x829c2085 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x89dacbc3 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8ab0a048 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8f8634e8 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9163c306 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9f9cad66 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xaca3326e dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xacbf54f2 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xb956c556 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbdaa3758 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd25bcb43 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd7ea678e dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x1aa1ddf8 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x21589c93 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x42f31ca1 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x8a412dc2 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xa3ca6faa dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xb2fda5f9 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xe108d543 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xa2590137 af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x06713dc4 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x27830cd9 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x45e11fb8 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x56fe13e0 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x69b4b138 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x76d1aea7 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8417611d dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8650d344 dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xb2345e50 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xd05b7e13 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xe0e68db6 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xdb16fb72 af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0x88e63883 au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0xd8592c0c bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0x79983ba9 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0xae997343 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0x8b29e966 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x07fea96c cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0xb25d509f cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0x0d526819 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x35eb5933 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x9a5343e8 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x73bf5552 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0xb46555c8 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0xe403e375 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x920a01ec dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x1573c8b3 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x4a2eab22 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x70fdb3d6 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa74fe9c6 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xefa0891d dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xfc2c4372 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xdd9910d4 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0xe9d08798 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x8e7cc49a dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x8ef7d90d dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x94699889 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xa1773785 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xb388c4e2 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xb3f3d900 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x15da34c2 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x6a8e70a9 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x820534ca dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x922296a6 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xcffed651 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x2f43c934 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x30152ea6 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x35da6453 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xab4e97ad dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0xa686b184 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xc857dda3 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x414e71c0 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0xc5387a67 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0xbab72bfc l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0x1335f109 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x3e2200e3 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0x2ae93435 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x7c86f224 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0x93909b3b lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x7e00e9ba mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0x91e5c9db mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0xc7d4c0e4 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0x0c4b3170 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0xd79d6ba5 or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0xe8eaea9a or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0xc68c1c92 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0xba5872e0 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x2e5e9864 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x49caba55 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0xa045dee8 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x0b765af3 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0xddfe128f sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xf7bf1896 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0x05556311 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x5222ecac stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0xa6b1aafc stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0x32165654 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0x6d0b7c9c stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x1d1f0bea tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0xd1460168 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x1b62a656 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xe3a6618b tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0xe91d94eb tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0xa1a0fccb tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0x565e329c tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0x352ca5d2 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x37c561e2 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x3669acc2 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0xe7858060 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0x63116096 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x302f1b44 zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0x3f58a9d0 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x530f12aa ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x78c81360 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x4cf008d1 bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x831a8f2e bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xd13a8cc7 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x1604625e btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xd830715c btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/cpia 0x7aed6b99 cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xd0f8e08e cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x656747b6 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0xf8de6377 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x04d5a745 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0xa4fa9ab2 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x2ba4ca2f cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x504697fb cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x8e5c1f91 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x9ac1ab12 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xcae8b90f cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xd73844d8 cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x5d110b9c cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xa462294a cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xa5769f3e cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xcb970c92 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xd59563e3 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xdaedcb99 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xe05cbb3c cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x0c4af366 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x101756f8 cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x1da8c2a4 cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x29cb0293 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x2addd6e8 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x341c6ed1 cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x34759ca5 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x3dc7f545 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4e81bd77 cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4eb977a1 cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x65253614 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x671ef9e0 cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x79a6b7e9 cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x803593c0 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9f40ad88 cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xad160b6e cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb40bc6bd cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xbb132d8a cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xc19a896e cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xe7168d73 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xf0128b1e cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xf090c253 cx88_ir_start +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x3591f25a em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x423f68db em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x1330533a gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x22c468fd gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x38e1d21c gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x3cf00dd3 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x45f89ad3 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x5bbf12a8 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xb387a9f0 gspca_suspend +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x2c639ec9 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x3c026c71 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x4257aba5 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x498d0530 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x7bbb1679 ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8825d28c ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x8a2bc615 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x9cb8a0f9 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa1238b81 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xb6df3a1c ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xff8a963b ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0299e195 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x270e0bd5 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x4cbd9a13 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7f636a59 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x92af2040 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xa8f2095c saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xbb552675 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd1513236 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd20bba06 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd96a8f5c saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xe1156f66 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xec8baebb saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x2e5ab330 soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x2eceb7a9 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x3d1a482c soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0xc859180f soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/soc_camera 0xf2f53ce4 soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/tveeprom 0x79c8499b tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0x9ef50d17 tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x03ccd84d usbvideo_register +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x1f196433 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x5293ede2 RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x54ded406 RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x79fa49b3 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x80f5fc4e usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x9778abda RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xbfe2cae7 usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xdf605c59 RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xea128549 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x3f8e14aa v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xc3e5c8bb v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xf21acf86 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x1aec8c73 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x469a8738 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x7593d744 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xa88d16b4 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xad63548c videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xdb592adb videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x0acc693b video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x129e9d00 video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x79d3096d video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0x8a8ecb75 video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xb736eaa1 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0xc7fa2e9f video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0xd22ec17e video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0xe238902b video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xf48465a6 video_device_alloc +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x176fbc89 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x178120a8 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1b9ec28f mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1e7850ba mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1f6dee35 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x20ee8866 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x224ae865 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2df63238 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x433ce07c mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4433f7d8 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x45ea42a9 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x48c0e568 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4a45270c mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x555c4c0b mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6de9fe52 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x825733c6 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x828e1827 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8b35a07a mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9698d88f mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa38cf216 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa3e2845a mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb4146d35 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb62137f6 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc8e19f1b mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd11e18da mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd20d66cf mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd5729b9 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xff0b8ee1 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x03bc5d38 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x04452494 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x095efd01 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0c6a353d mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0cc7299d mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x17ffe34c mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2420d3bb mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x305c28b7 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x33f948a3 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3896eaaa mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x4e6f9756 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x559d3128 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x60fca56c mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x61caee33 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x712cd290 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x737c0d4c mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xaa8013c9 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xadc1e5dd mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc22756d0 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc58177f8 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc8f64783 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc99935ed mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xceaada71 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe88a084d mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfa8e55e3 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfb98da21 mptscsih_suspend +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x068afc76 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x0f7a758f i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x104812a6 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x38593a86 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x59f2903d i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x5c21bc49 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x60ccac93 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6586b295 i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6ae5f088 i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x72e1254d i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x7d60b699 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x86e8b3c7 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x8fafa292 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xa30464f3 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xa39a41ad i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xa9a37db0 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xae3bda15 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb09b21d4 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbf8aa129 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc17b45ae i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf6eaa20f i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf846afa3 i2o_driver_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x10ffa976 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x1d120d9f ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x237d6f69 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x23be1cab ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x477669a7 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x4eca9e7d ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x7a5bd0ed ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc69470ec ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x5f99def9 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xe41a1924 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x108e9089 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0xe7f620f3 mfd_add_devices +EXPORT_SYMBOL drivers/misc/c2port/core 0x4754c2dd c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0x7db32bc1 c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0xd74827f4 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xebfd96d5 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x0579efac tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x1f18d644 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x3296b275 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x4536241e tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x527633d3 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x563dd6e4 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x7b416888 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x86426117 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x9adee482 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x9da92079 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0xb78576a8 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xcd153284 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xfb90c2c8 tifm_map_sg +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x15fa6328 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x011d1aa4 mmc_suspend_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x0e5e9759 mmc_register_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x1090429a mmc_host_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x11ba17f2 mmc_host_lazy_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x14cb3fa5 __mmc_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x15a5e8d5 mmc_wait_for_req +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x19676ee8 mmc_alloc_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x225cc6cd mmc_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x27fc4e55 mmc_try_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x461757e5 mmc_card_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x481eddcc mmc_wait_for_app_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x4973dc3f mmc_card_can_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x549ac6bf mmc_add_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x5a67862e mmc_detect_change +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x68e228f0 mmc_power_restore_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x751a29df mmc_release_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x76074640 mmc_wait_for_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x7c2edb38 mmc_set_data_timeout +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x9728ed3f mmc_request_done +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xa863b2cf mmc_power_save_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb7397f00 mmc_resume_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xd05ba057 mmc_card_awake +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe8e002ac mmc_free_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xea4a19a9 mmc_align_data_size +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf1e84749 mmc_remove_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xfcca86fd mmc_host_enable +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x3ecb7e1e mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0xee7ae8c2 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x18c52ca6 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xc631731d cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xfde001fa cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x209c6535 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x4e016c69 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x4e65944b map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xaa4b305c register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x590650bf mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x2055388b lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x0d19e1bf simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0xa2f17edd del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xaaa81e8e add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x183b97ee mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xc472d412 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/nand 0x6c775dfd nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x83af2b2f nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x59b20385 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x90f6aba2 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x108f8369 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x56a1190d onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xaf351084 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xb4980d4c onenand_addr +EXPORT_SYMBOL drivers/net/8390 0x3f5eb746 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0x5b708a80 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x6a02b9de ei_netdev_ops +EXPORT_SYMBOL drivers/net/8390 0x835a5e90 ei_close +EXPORT_SYMBOL drivers/net/8390 0xafae6399 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0xd186147f ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0xd6912bd8 ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xd7b84e6c ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0xdb96a3ff ei_open +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xf6218d07 ei_poll +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x1e7a22cb arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x3e91cd5b arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x60b40a6f arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xa9a910c6 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xab82d9ca arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xb7f6fb37 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xbb5b9066 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xd3cdf2cf alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe97dfb20 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xefd4a62e arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x56edfd19 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x926fd6f5 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xcb4d57d6 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/bnx2 0x117c6b7a bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cnic 0x7e467759 cnic_register_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x2210d445 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3f08611e t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x412060b8 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x558f91ba cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x60c32c85 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x63e03994 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6a2c7ab2 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x87cbbd1f t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x8da14577 cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb277466c cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xbb18411c cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xc1bc48b0 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xc2a9bfbc t3_l2e_free +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xe6472b1e cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xf715cddb t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xfd00926d dev2t3cdev +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x7449ebd6 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x8a48bfa5 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x996682f4 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x9a529ba1 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xef914ad0 hdlcdrv_register +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1b4313f2 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3705ddc8 sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3b342e1c sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x632c9d23 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x67bd518d sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x683d2bca irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x71ac5599 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xc89145f1 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd253488e irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd8d06634 sirdev_put_instance +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x3b6220c1 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x443d1cb2 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0x500f3f3b mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x6ac624c4 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x7adb8613 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0xce2c98fe mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0xd963174b mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0xe43d6412 mii_check_media +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x3aba715f alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x49842928 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp_generic 0x0dd116f1 ppp_unit_number +EXPORT_SYMBOL drivers/net/ppp_generic 0x0fa571d8 ppp_channel_index +EXPORT_SYMBOL drivers/net/ppp_generic 0x17d91815 ppp_input +EXPORT_SYMBOL drivers/net/ppp_generic 0x442808c6 ppp_output_wakeup +EXPORT_SYMBOL drivers/net/ppp_generic 0x715d571e ppp_register_net_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x9ad5712e ppp_register_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0x9db77bcd ppp_unregister_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xc421000d ppp_unregister_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xde8a8042 ppp_register_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xfbb19764 ppp_input_error +EXPORT_SYMBOL drivers/net/pppox 0x1b8c8c2e pppox_ioctl +EXPORT_SYMBOL drivers/net/pppox 0x2dcb782e register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xb342a6f7 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/slhc 0x2278e94b slhc_remember +EXPORT_SYMBOL drivers/net/slhc 0x26b760c4 slhc_init +EXPORT_SYMBOL drivers/net/slhc 0x3fe0d1c0 slhc_free +EXPORT_SYMBOL drivers/net/slhc 0x62538167 slhc_toss +EXPORT_SYMBOL drivers/net/slhc 0x7e87227e slhc_compress +EXPORT_SYMBOL drivers/net/slhc 0xa78d9eb7 slhc_uncompress +EXPORT_SYMBOL drivers/net/sungem_phy 0xdce5522a mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x19eadeab tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x46d5d880 tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xa206de4c tmsdev_term +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xdefdd209 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xee2b0d47 tms380tr_open +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x0db79032 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x3d5ab06a hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x3decaaf1 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x599f059c unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x60e4e590 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x7021537d hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x847d8047 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8ab1ebfc detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa71ecba6 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0xdb4e34d3 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xfdc1feeb register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wireless/airo 0x0f4ca484 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xcc34a6a8 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xfc9df390 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x2a8e0b5e ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xccbc8daa ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xe45af285 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/atmel 0x82f58d98 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xa619be29 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0xaf92abf1 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x013f4f19 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x078c6eb3 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x07d5ed3d hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0b23e144 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0b425f1d hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x24f6f641 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3bcb7427 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4df949fb hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x54e0175d hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5da340c7 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x61975be5 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x66546c34 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x668391e9 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6e4b8514 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7cabf15e hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x80e2c28f hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9135c31a hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9989739c hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa31dd047 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb5df0592 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb6f5d193 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc01925de prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd16684e1 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xec405a8f hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf6f85a43 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfd080332 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x227a3615 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x409a6088 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x44adaed4 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x4b195292 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x516604f1 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x552acfe6 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5691814c libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x58c5a4c0 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x62b5c9d8 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x657111de libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x71499f8e libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa547d5e3 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa728fa4c libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xae02945d libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb4da4619 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc1260e20 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc5bb0f29 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xcf985724 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd4bd6225 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe78aba89 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xef349de2 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x01d681f1 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x02813e24 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x04de9198 iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x08ac489e iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x09d0a0d1 iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0b856035 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0b907b6a iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0e46337b iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x11f79948 iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x12a20955 iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x14d84ecb iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x161377aa iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1a0e3190 iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1b1375f0 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2186ec9e iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x25e360ae iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x260f2ee3 iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x264f221d iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x26859c4a iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x287d95cd iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x292b69af iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x296b6ef2 iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2fe0c491 iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x34740c2e iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x358f06df iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x36930f85 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x39912f1b iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3ae12460 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d2becd5 iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3ddda52a iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3e49c500 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3f15ecda iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4100639d iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41a6d6c4 iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42f42827 iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x447113cf iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x45159f52 iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x47151c98 iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4731f771 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4add7676 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4b6401a3 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4ec68a83 iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x50eeaef7 iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5127c8e2 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x531a79b8 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x55bf27a1 iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5ade5a20 iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5ae8b261 iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5dc5eb5b iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60774702 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x60e3a66d iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x626b0894 iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x65d198f8 iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6792ade4 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x68068ee0 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x69f79842 iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6a695f80 iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6b51871e iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6c20c321 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6eb7cb93 iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x702ff0fd iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x72ae8bee iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75569d44 iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75a0c2d9 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x75e0fac3 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x79f394e6 iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7c025351 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7c06eda0 iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7fb8f09a iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x815dff7f iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8430b05e iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x85b7ba92 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x88c05c10 iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8941786e iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8c098161 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8d2ae5f4 iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8e73fec0 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8e773463 iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8f88e0d9 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8fe4eb42 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x92596665 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x93a3eb0b iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x94bbde0e iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x98e8adb9 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9aa22a31 iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9b7c4a45 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cb7a480 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9faced57 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa05f3e7b iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa4605501 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa83736ee iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa8a02b7b iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa8a83d68 iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa193424 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaa5c1983 iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaae47843 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xabbb3d97 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xad30a958 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xadfc967e iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xafd3f84e iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb046d48a iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb18473f4 iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb638b66b iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb685ce8e iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb8bb507f iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc514ae0e iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc7794b30 iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc885ac5a iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xca06fbfb iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xca57ffc5 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaa14d9 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xccde7dc8 iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcd240bd1 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcd498bd0 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcefae2fa iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd1b0e593 iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd28929ca iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd56d02ff iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd8d62a4c iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdaa65fa2 iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdb307de0 iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdba4d247 iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdfb51c57 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe44d534b iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe5626ad0 iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe5c65aa6 iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeb33ed84 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xefeacb56 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf0257903 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf0fbf023 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf18c7ed9 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf463613b iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf61bf0ad iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf6bf770d iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8253478 iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf8c8b2f4 iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfaa781be iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfc642209 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfe23c21d iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfeb1feaa iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xff73bb15 iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x111406ec alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x5920d0f0 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x77f4dc34 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x8d9b01bf orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbd8aeaf9 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xeb797904 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf2333c80 free_orinocodev +EXPORT_SYMBOL drivers/parport/parport 0x0be91021 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x128189dc parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x14116696 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x14b9b48a parport_read +EXPORT_SYMBOL drivers/parport/parport 0x1a4eed96 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x1b89d33f parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x1bb97e1f parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x20c5825d parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x2102bcf4 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x23033aa8 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x234c1588 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x24e31e99 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x325a6859 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x4f0a0d57 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x563ee6d9 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x642c955f parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x66b3be59 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x679a62ac parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x78ac705f parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x9b63533a parport_release +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xa2e0ec72 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0xa91954eb parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0xb0afc1dc parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0xbfd8af0a parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0xc93358d1 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0xc9b94985 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xd69762cc parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xe0e50dd4 parport_write +EXPORT_SYMBOL drivers/parport/parport 0xf18aa5e6 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0xf25caeff parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport_pc 0x30d76f6a parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xa14e5a90 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x023fe31a pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x202373f9 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2d5edfe1 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x6c5a1dd7 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x7c7623b9 pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x842152f6 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x851108ab pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x925c9a98 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9b331643 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb2009f70 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd46084f3 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xebcae7e1 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xef2d1d84 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf5fddc20 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf9a63f6c pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x23b0da66 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x315d4614 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3c757602 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4b20ea5d pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4e089486 pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x551003c9 pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x584fabc9 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x58e73297 pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5c7c2b67 pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5c877957 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x63154da4 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6671fdfb pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6be4e3c0 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6d423d68 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7188dea3 pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7524ffae destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x798da490 pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7a282e33 pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9875c41c pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa05993a1 pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa8a045cb pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xaabfdaa5 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xab21abe4 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xafd383ed pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xaffe5fb3 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb3ddf2a9 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd47f9d4c pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd5e8f7c4 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd7070751 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd905150a pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe28a9171 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xefc8eee5 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfd8f28f0 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0xa9c2ab1b pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x3f27f8ba pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x0c2fb3bf fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x4e13d91c fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x87402197 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8eaa9c6e fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xb0f4b1ab fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xb19c9772 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xdc817705 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x051e9d0c fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x06b0f459 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0d60d476 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x14ee6bde fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1be1d94c fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1ea3d66a fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x273a8dc5 fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x28ed65da fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2a481470 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x318502fa fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x34a4ad05 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x35d964aa fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3f1872e0 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x410ab48c fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4502bf94 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x45965365 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5065b06b fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5a505c33 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5e32c31a fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x66b8dbe2 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7b05cbd6 fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8cedd102 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x93084ae7 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9c2b658c fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa2e7d7fb fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xabd418f6 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac238a7a fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb6011310 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbd4eedcc fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc1883f26 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc1ed231e fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc41b7318 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcc0b4d78 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xce4fe494 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xea7cc2bc fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xedc59fac fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xee445814 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeea43676 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf14e1442 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf1811ece fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7ed246c fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf9e85b6f fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x8666b4c0 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0f94e2dc osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x10079e59 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x184127fb osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x20f744a1 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x299f5380 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2c6db810 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x392098f9 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3f6897ec osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x44cb1451 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5236b630 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6be4942a osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x72c198b3 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x851d2fd7 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8e6d42f3 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8f92364e osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa823ac2c osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa96ce664 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xbe4e631b osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc10e33c3 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xcb034dfa osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xcde270d4 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd20b9748 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd2f35ea1 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd89e36ab osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd9f1e319 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdae0512b osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe0227cb3 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe698aaa5 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xec86e1ef osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfab5c02d osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfcd02b43 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xfde273df osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/osd 0x122910af osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x2a0153cc osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0xa15c7a9f osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x67067635 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x8f385a0f qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xaa263cac qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe34d1d55 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe8254cec qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xfbbbf987 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/raid_class 0x950dccfd raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0xa7e2a3c3 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0xd8f0bd0f raid_class_release +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0cc4f528 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x34682268 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x56d17251 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x611cf637 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6216258c fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x66505656 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7588f5bc fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb1e08b95 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb693dd8b fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd7135f6a fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe5faf5de fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xebf5ae4d fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x10e7b973 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x215da64e sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2c5a28e4 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2cadf81e sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x32af4b49 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x331fa4f9 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x36c37d57 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3737df8f sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x647e7496 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6dda7009 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x81dc56c0 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x944c9abd sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x96707672 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9836f761 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa8de9f2f scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xad35444c sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xaeb2f84b sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb1fa1e3a sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb6bcdd36 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xbdb05b3b sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xbee13317 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc78e5a30 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcde9586a sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd37741dc sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe2ac207a sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xec97455d sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x7bf3ee57 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x9135c3b4 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x998cca54 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x999343c6 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x9fe3a2e9 spi_dv_device +EXPORT_SYMBOL drivers/serial/8250 0xbf3af65d serial8250_register_port +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/serial_core 0x0444a8d3 uart_get_baud_rate +EXPORT_SYMBOL drivers/serial/serial_core 0x39d9e431 uart_register_driver +EXPORT_SYMBOL drivers/serial/serial_core 0x638d1ab2 uart_suspend_port +EXPORT_SYMBOL drivers/serial/serial_core 0x66e07357 uart_update_timeout +EXPORT_SYMBOL drivers/serial/serial_core 0x77c61735 uart_remove_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0x8714cd4b uart_match_port +EXPORT_SYMBOL drivers/serial/serial_core 0xb21b987d uart_unregister_driver +EXPORT_SYMBOL drivers/serial/serial_core 0xb7a9a3f9 uart_add_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0xbbe5ef2b uart_write_wakeup +EXPORT_SYMBOL drivers/serial/serial_core 0xc3b71112 uart_get_divisor +EXPORT_SYMBOL drivers/serial/serial_core 0xd8a7c137 uart_resume_port +EXPORT_SYMBOL drivers/ssb/ssb 0x125ee9e6 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x26000b90 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x26f37fcd ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0x2f208f03 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x32ebcacc ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x37465430 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x48e6d7af ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x54d4e493 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x6baa5a1f ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x7bba1434 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x9028bc72 ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x90d78dce ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x92be088b ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x9b353336 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0xae5caf06 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xae84cd85 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xb00e1331 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0xb5cdb262 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xd26d9e0a ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xe8f17873 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0xec70dabf ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xf5235a35 ssb_bus_suspend +EXPORT_SYMBOL drivers/telephony/ixj 0x4d90e2a7 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x60e0e576 phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0x6deee9c2 phone_register_device +EXPORT_SYMBOL drivers/usb/gadget/net2280 0x31640a9f net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/gadget/net2280 0xbd142842 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/gadget/net2280 0xea00eb49 usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x34327c61 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x2df79391 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x819d3189 usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x0fa1ae38 lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0xa564c2e4 lcd_device_register +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0b79f8f7 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x5c2901b5 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xcfe1b663 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0xdf70568b cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/display/display 0x75b0c9f1 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0x7d808171 display_device_unregister +EXPORT_SYMBOL drivers/video/output 0x8120f8fb video_output_register +EXPORT_SYMBOL drivers/video/output 0xc95ef20f video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x08770b34 svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x63775008 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8dcc5781 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x9197456a svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xaeff26a2 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xb6807885 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0xc5cd96bc svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x8ae2f9e9 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0xe8b11786 w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x35e97711 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb60fc634 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xc53ced26 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xfdc156b3 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x2ccfea8b w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x30303eba w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x544234ff w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xb63cad48 w1_unregister_family +EXPORT_SYMBOL fs/configfs/configfs 0x27264c96 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x28b879fd config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x3587b17e config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x452cbd45 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x5314036b config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0x60973acc configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x60d08872 configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x8c9eb471 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xb2335070 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xc67b2972 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0xd7cb9183 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xecd1bb36 config_group_find_item +EXPORT_SYMBOL fs/fscache/fscache 0x0023428d fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x017eb502 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x04242e2d __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x08df3649 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x11347f29 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x13404630 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x1c2111c4 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x322e8057 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x34d957dd __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x43c76bd7 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x4d031967 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x5fe58c20 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x64a7cfcc __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x806867c0 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x819e082a fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x8564143e __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x9b3f9d47 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x9f804931 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xa2ae1d40 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xa424926c fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0xaa2764eb __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0xaa6af132 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0xb20cd412 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0xb2ef69f8 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0xcab84904 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xe2e1e988 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0xfc42d19f fscache_init_cache +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x46a312d8 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x5ada2f11 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x7acb6ba8 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x86dd2ee3 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x8914c217 qtree_release_dquot +EXPORT_SYMBOL lib/crc-ccitt 0x651c2313 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x276c7e62 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-t10dif 0x782acba5 crc_t10dif +EXPORT_SYMBOL lib/crc7 0xc086bfba crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x8dfce414 make_8023_client +EXPORT_SYMBOL net/802/p8023 0xcb3a2219 destroy_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x0a886a76 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x0b3ac49a p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0x140be190 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x16a801eb p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x2cb59a19 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x3255786e p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x41e6bc51 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x42544a22 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x45d9c12f p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x4802c895 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x4bca3c0d p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x50ca48fc p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x563a2fdd p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x72f1411c v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x7408d0eb p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x747bd9c1 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x77dbe8f7 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x81d1457c p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x96cd9941 p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x9a0e925b p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xa3e64647 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0xa8330d04 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xb9e94ccf p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0xc7b17ac2 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xcfae6acf v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0xe1bb2dbb p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe7f182f9 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xf24bf00c v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x2c855101 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0x47de8567 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x932116cf aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0xfacba01b alloc_ltalkdev +EXPORT_SYMBOL net/atm/atm 0x1745cff4 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x257058aa deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x42b4f4a1 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x5fa4dac3 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x7c25f28e atm_charge +EXPORT_SYMBOL net/atm/atm 0x866b6f4a vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xa083aa17 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xbf605116 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xdcd2dc2e atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xe9e8631f vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xf693442d register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xfed13560 atm_proc_root +EXPORT_SYMBOL net/ax25/ax25 0x10aa03bc ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x2b434936 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x41dd8f90 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x47ec59f3 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x7cf10722 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x7d7dcdc5 ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xc37da1a3 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0xcfe92ca5 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xe4224528 ax25_find_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x030b535e hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x06623fed hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0b6d3237 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x10dac0ec bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x14cf3386 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x2b384065 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x44cac210 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x48765f0e hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x55b24995 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x67d19512 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6ca912f7 hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0x701032a3 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x704c8778 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x74a7d683 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8fd1d82b hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9334f146 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x948794ef hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9dde2279 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa5d104c0 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa609afe7 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb88d98a6 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb954a995 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc324ac10 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc678626e bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc8ff2e2b hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd07e4ff6 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd79286ff hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe0ee8d8a bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe9194fc5 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf782ba78 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfd732b4f hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x74729cac br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x2cdeacc8 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x91172363 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x9d5f459b ebt_unregister_table +EXPORT_SYMBOL net/can/can 0x053754c7 can_rx_register +EXPORT_SYMBOL net/can/can 0x6564cd94 can_send +EXPORT_SYMBOL net/can/can 0x8eb166c0 can_proto_unregister +EXPORT_SYMBOL net/can/can 0xca4382a9 can_proto_register +EXPORT_SYMBOL net/can/can 0xef42c5f1 can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x11ab512c ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x20264591 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x243bf7d2 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x70069a9c ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xab08f504 ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xb5a6691e ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xbda5a986 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/wpan-class 0x5d54aba8 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x65e79a5c wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xa10cb113 wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/wpan-class 0xda57a4c9 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xedb0775e wpan_phy_find +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x4d5354dc arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xc2b83350 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xec7967ec arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x1a9425ee ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x8452470e ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xc6078b57 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x7db05c82 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x7fdd5fb1 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x862abeee nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xa3866382 nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xaced2990 nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xe3f6d872 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xfdbefbe7 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/tunnel4 0xb4d663c5 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xf6912659 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/ipv6 0x09c3f6bf inet6_release +EXPORT_SYMBOL net/ipv6/ipv6 0x0ac76155 ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL net/ipv6/ipv6 0x0bab1766 xfrm6_rcv_spi +EXPORT_SYMBOL net/ipv6/ipv6 0x0d17d2e8 inet6_bind +EXPORT_SYMBOL net/ipv6/ipv6 0x18e83090 inet6_register_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x1de3ca77 nf_ip6_checksum +EXPORT_SYMBOL net/ipv6/ipv6 0x219e016b ip6_frag_match +EXPORT_SYMBOL net/ipv6/ipv6 0x2325b35c inet6_add_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0x36075f0f icmpv6_send +EXPORT_SYMBOL net/ipv6/ipv6 0x3a9242bd ipv6_chk_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x479c08c2 ipv6_push_nfrag_opts +EXPORT_SYMBOL net/ipv6/ipv6 0x50f2f711 xfrm6_rcv +EXPORT_SYMBOL net/ipv6/ipv6 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0x568f0a8a ipv6_dev_get_saddr +EXPORT_SYMBOL net/ipv6/ipv6 0x5e3f7568 ip6_frag_init +EXPORT_SYMBOL net/ipv6/ipv6 0x617c4a4e rt6_lookup +EXPORT_SYMBOL net/ipv6/ipv6 0x62e82161 inet6_getname +EXPORT_SYMBOL net/ipv6/ipv6 0x648828f8 inet6_del_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x6fa4c0b8 ndisc_build_skb +EXPORT_SYMBOL net/ipv6/ipv6 0x9233d7e3 xfrm6_input_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x97f323bd compat_ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x9aa9f20d ip6_xmit +EXPORT_SYMBOL net/ipv6/ipv6 0x9dbe90ea ip6_route_me_harder +EXPORT_SYMBOL net/ipv6/ipv6 0xa23d68e9 inet6_ioctl +EXPORT_SYMBOL net/ipv6/ipv6 0xb3f1c9d5 in6_dev_finish_destroy +EXPORT_SYMBOL net/ipv6/ipv6 0xb7a836fa ip6_route_output +EXPORT_SYMBOL net/ipv6/ipv6 0xb9e4b6f8 compat_ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0xd0b0d2d0 ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0xd1c7d02f ndisc_mc_map +EXPORT_SYMBOL net/ipv6/ipv6 0xd555af92 ndisc_send_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xdad53824 inet6_unregister_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL net/ipv6/ipv6 0xe753ded9 xfrm6_find_1stfragopt +EXPORT_SYMBOL net/ipv6/ipv6 0xe8b6ee99 xfrm6_prepare_output +EXPORT_SYMBOL net/ipv6/ipv6 0xf56ca5b5 ipv6_chk_prefix +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x3d87d323 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x8dc490d4 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xa5918822 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xd94d5b73 ip6t_register_table +EXPORT_SYMBOL net/ipv6/tunnel6 0xf03cbdb0 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0xfb76ffd7 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x0b32e3d7 ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x151283ee ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x1f83d652 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x208a9236 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x4d3fb1dc ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xd3477836 ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xeae795dd ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xfd9a7c6b ircomm_close +EXPORT_SYMBOL net/irda/irda 0x03a89341 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x1090734c async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x16f95c05 irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x18edd399 irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0x1d942afb iriap_open +EXPORT_SYMBOL net/irda/irda 0x1ffdc50c irlap_open +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x2607c5c0 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x29783db6 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0x30772e26 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x37fb0a7d irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x478c02ca iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x4a6f95a5 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x4aa59220 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0x4decbd1a irttp_dup +EXPORT_SYMBOL net/irda/irda 0x543a6db5 hashbin_new +EXPORT_SYMBOL net/irda/irda 0x550a5e27 irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x5861b834 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x5f261aef hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x70f45225 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7f933922 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x88f66103 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x89136cd1 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x8a4fcd71 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x94a8156e hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x9547c304 proc_irda +EXPORT_SYMBOL net/irda/irda 0x980fe568 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9e9734f4 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0xa26f32f8 irias_find_object +EXPORT_SYMBOL net/irda/irda 0xa85091bc irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xb780cfbb irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0xb7884205 hashbin_remove +EXPORT_SYMBOL net/irda/irda 0xb83c9273 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc10a5281 irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xc25b82ce irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0xc68bde57 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xd04117d8 async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xd627dc1a hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xdef7525f iriap_close +EXPORT_SYMBOL net/irda/irda 0xe0acf0d4 hashbin_find +EXPORT_SYMBOL net/irda/irda 0xe1a50c6f irias_new_object +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf2b7d79c irlap_close +EXPORT_SYMBOL net/irda/irda 0xfb4a97ad irlmp_close_lsap +EXPORT_SYMBOL net/lapb/lapb 0x3a41b405 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x48f78dfa lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x6861464c lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x908016d8 lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0xb52a18ba lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0xc8f6baf2 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0xd26231c4 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0xfb54eb50 lapb_data_received +EXPORT_SYMBOL net/mac80211/mac80211 0x1e7424c9 ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x30a343b8 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x3472a254 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x35d710a3 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x37593036 ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0x3b672aad ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x464bb828 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x4ba22b73 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x4ec222cb __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x4fd36218 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x6066ac34 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x6279e9c0 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x66994f2f ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x689935d6 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x6c00f7fb ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x6f13dfb0 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x7db05847 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x808b7f7f rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x809d7ff6 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x8628d2f1 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x91a69380 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x93cbcd2f ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x967833d2 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xa14cb693 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xa1996fef ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0xa1b0a62d ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xb6b2e3d9 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0xba405eba ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xbc54c5bf __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xc671914d ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0xcad7ae42 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xccc019e3 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xcf30a95b ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xde4f0951 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xe3f9cf8e ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xe5b0f441 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xf27d0ae9 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0xf35b85c0 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0xfa8cb80b __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xfec4fbf6 ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x0adfcc4b ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x21a2a03a ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x2f9d5e80 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x58427875 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x683abf0b unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x726fca6c register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9d5648c8 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xb0362025 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xb9ab8eb1 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe2942099 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xfca9cbeb ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x3719520d __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x7a1d7106 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x052fc7da nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x141ee7b8 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x42e1f4e4 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x457974d7 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x491abb27 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x55f97941 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x587f9ce8 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x987a5b6f xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xafa4a0bb xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xb669e1cf xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xdfb2d568 xt_unregister_match +EXPORT_SYMBOL net/phonet/phonet 0x045e3632 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x1538f45e pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x51e0d386 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x98cf72a1 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xa2d1daf5 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xc7158b63 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0xd957a2a2 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xfb1f105e pn_sock_get_port +EXPORT_SYMBOL net/rfkill/rfkill 0x01f47445 rfkill_set_hw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x0a56f6e1 rfkill_destroy +EXPORT_SYMBOL net/rfkill/rfkill 0x1d0d6250 rfkill_set_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x381428fa rfkill_set_states +EXPORT_SYMBOL net/rfkill/rfkill 0x4bb11f84 rfkill_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0x6b500e0e rfkill_resume_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x87500f81 rfkill_init_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x9cb91cab rfkill_blocked +EXPORT_SYMBOL net/rfkill/rfkill 0xacca3cda rfkill_get_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0xad7c3a28 rfkill_set_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0xb8c33940 rfkill_pause_polling +EXPORT_SYMBOL net/rfkill/rfkill 0xc0928fa2 rfkill_alloc +EXPORT_SYMBOL net/rfkill/rfkill 0xc5aa1906 rfkill_register +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x06ed1a90 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0b331e40 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0d850fe9 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3580db5f rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8527b50b rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x866ee83d rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9758ff66 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xaeb3aa5a rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc5413d9c rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xcd606946 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xd944a474 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe6c291af rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe77b95ff rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xea99a858 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf90a0df1 key_type_rxrpc +EXPORT_SYMBOL net/sunrpc/sunrpc 0xbf9b34b9 svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x0b074a7b tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x0de528b7 tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x1a77d16e tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x23daecbd tipc_send +EXPORT_SYMBOL net/tipc/tipc 0x2431f9f4 tipc_forward_buf2port +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x419b02fc tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x7f29135a tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x9963dd79 tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xa1b42d32 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0xa756dfd2 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xada70945 tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb1f8eacc tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0xb27ac4a7 tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xc260e9f3 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0xcb307093 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0xcdc6e909 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xcee290be tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdb11f3ca tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xf761e38f tipc_recv_msg +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x33e3c363 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x1c4ba4a3 wimax_rfkill +EXPORT_SYMBOL net/wimax/wimax 0xc3f6ad0c wimax_reset +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0bbf88f0 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x0c25c6ef wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x1241252c wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x1dd8f1e9 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x1f27754c ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x24831c3f freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x2d233696 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x3b4ea1ae cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x460a84dc cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0x57524ae0 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x6094d531 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x6188a66f cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x65ca23e3 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x76a677ec cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x7c3fddc1 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x80f83bb8 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x8886ee4e cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x935be000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x9444321f cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x97206fbb wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x9b3a7f65 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x9b3fba99 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0xa5bd9ba0 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0xa9b23093 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0xac28cf96 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xaf4cfe7a cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xba0ac50a cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xbfc46854 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0xbff1b940 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xdb293e6a cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xdead71cc wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0xe0092ab2 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xe49f8244 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xf0d4ff2a cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xf74993fc cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0xf8676514 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0xfde231a2 cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xffc688a8 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/lib80211 0x0386a3a1 lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x223e94e3 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x2daf71b4 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x6a9d5040 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x7409c7b6 lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0xa081589f lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xa0b88981 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xcd461076 lib80211_crypt_quiescing +EXPORT_SYMBOL sound/ac97_bus 0x72e0b549 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x0f5518de snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x35af01e1 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x89947013 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x8c014d80 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xd1cdd8dc snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xdf36c089 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x070836ec snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x7b53969f snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x326911b6 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x7cb19049 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb389aad4 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb401ffd7 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb5d25358 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xbf834054 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe03c0c74 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe8755241 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x240b721f snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x020cc87a snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x10987788 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x180b4a86 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1f263781 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x2f250077 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x35d26626 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3acc671c snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x3b06c5bd snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x3b0eda34 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x502159a8 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x518bb7f8 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x51a93000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x55d878a4 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x568e4166 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x689ceaad snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0x69cc61f0 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x770661e9 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x7a0202d0 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x8a851acb snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x9052b5a4 snd_cards +EXPORT_SYMBOL sound/core/snd 0x92189d5d snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x988c5954 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9e82de73 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xa103ee79 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0xa211a089 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xa7c22254 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0xa9ce9112 snd_info_register +EXPORT_SYMBOL sound/core/snd 0xb166ab3e snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb732a22c snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xbb80f9df snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xc63c0137 snd_device_register +EXPORT_SYMBOL sound/core/snd 0xc925e264 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0xcb9f5c74 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0xd1ed4b13 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xd3566182 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0xd3bb78f1 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xddf65d33 snd_component_add +EXPORT_SYMBOL sound/core/snd 0xdee724cd snd_card_create +EXPORT_SYMBOL sound/core/snd 0xe07e3662 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe243dde3 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0xe30cb4c7 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0xe7d17e86 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0xe8e1a3f4 snd_device_new +EXPORT_SYMBOL sound/core/snd 0xedecc76b snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xee906e76 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0xf5fc7168 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xfc56690f snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0xfdb111b8 snd_card_register +EXPORT_SYMBOL sound/core/snd 0xff2318da snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd-hwdep 0xe619a9d0 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x19cc2ce3 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x41d3595d snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x552ec0ee snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x9fdaf65c snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc6829020 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xdf5705ae snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0xf0fa33d9 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x07465b5c snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x0dfbc3c9 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x11274d99 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x17749dd3 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x1f0a409d snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x1fc37cba snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x20c94d2d snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x24938897 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3c479516 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x4f0d0127 snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52dcf673 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x53d97226 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x58908936 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x660b64a2 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6c418c25 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x6f6583f3 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x73343d05 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x73a79f38 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x74a09694 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x7625d039 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x7e46c56d snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x9ffecbe5 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xa1947e8c snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0xa20efd83 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xb21653ab snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbe7095b7 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xc8052aa3 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xccfde388 snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0xce4d717d snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xd5f8deb5 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xdb765d79 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xde0135a3 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0xe1e20396 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0xe4c61cab snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0xe51a1c64 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xea142d52 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xf1cbdc58 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0xf2d7790b snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xf2ddb8f2 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-rawmidi 0x01037992 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2e790a54 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x312c0c39 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x557e00b9 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7df381d1 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x84ce8f8a snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xaf4afe97 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb06408a2 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb10a8b3a snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcd1ab160 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcd3d7bad snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd99bb0c5 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe02d5676 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe3475a94 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe4f542ef snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe9cec25b snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0xfa230528 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-timer 0x00790744 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x0680276c snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x1672d191 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x28412889 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x2bb1d343 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x4886666c snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x54a57bf0 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x695568ea snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x7cb70fb5 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x8c49a98f snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0xb7062dec snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0xcebff2a8 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xdd5fbc6e snd_timer_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x7b810784 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x23cfd3ea snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x51e37714 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x63ae4fd6 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x680548ee snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x96f866dd snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd4e543c9 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd5cf3992 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xdc10f354 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf089fd70 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00e5fbe4 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x14f33919 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x1ec031d5 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x35b8aa2f snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x49373c64 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x9877ff65 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb6466191 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xbddc2ab7 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xbe6cf282 snd_vx_setup_firmware +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x471bd032 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x5af493ff snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x63bc8aed snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x78dcade4 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x9d5cb38d snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xd5aa71ad snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x15e806be snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x2edd7fb2 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x8a61c45a snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xa4d813f5 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xb6402f17 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xd6f19262 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x226d4d5a snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x5a9528a4 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd20e6da3 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xfee213ee snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x64b2cbb2 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xa2b06b02 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x0967412a snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x8ec2a5ff snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x038c4422 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x12ba8559 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x613785b7 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x629597b0 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x62eb32d2 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-i2c 0x09beebc8 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x4a9b1b45 snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x8215a2b0 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xc2ea1656 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xc591cb33 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xfaabd674 snd_i2c_readbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x39a3addb snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5bb9c122 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x6611ce17 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x781697cb snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x79ec3fca snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x8265498b snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x91f6ec8a snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x9aceb6ff snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe170781b snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xf8a67259 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x3d87eacd snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xa0c1519e snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xef37f88c snd_sb16dsp_configure +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x2c82c712 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x48e09360 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x503c843c snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x61909092 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x65df29c3 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7deb746e snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x93f30f06 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x9fc83f6f snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa4cffb71 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb0a8fdc5 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb44ba09a snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb65a8753 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xbb60f935 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc2278b65 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc912923e snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd40a34b5 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe825b52e snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x01948a8c snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x10abff02 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x520feace snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x7049f1d5 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x8bd296cc snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x96d574fe snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9f391c3b snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xce5c53dc snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xe3100032 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x603d6938 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x1c95c200 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x43655a27 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xbcd763a7 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x13e59b9e snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x5b86c97f snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x7d4e1d15 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xa551d58e snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xeefa9a41 snd_trident_alloc_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0xd02b72c6 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x5a5f0707 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x5a9f335e register_sound_special +EXPORT_SYMBOL sound/soundcore 0x7316a30b register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x86015e68 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xc3874421 sound_class +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xef4956bc register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x0129a5bb snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x0ee1f89a snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x166438ed snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x8263e638 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x91f446bc snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xb4852d55 snd_emux_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x37729b24 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x4809f321 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x50996dc8 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x58e7525b snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x7d74f83c __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x95bd3248 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb8892279 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xd1d418d6 snd_util_mem_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x17e97f9d snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x32ffee06 lirc_register_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xc7134048 lirc_get_pdata +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x0001c5da __mutex_init +EXPORT_SYMBOL vmlinux 0x0006e2a9 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00191bed ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x001a29c9 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x00279f0b do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0x002ea3b7 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00500cdf kobject_get +EXPORT_SYMBOL vmlinux 0x005a4975 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x00b07c88 skb_find_text +EXPORT_SYMBOL vmlinux 0x00b2941b ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00b91eff blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00e12174 of_gpio_count +EXPORT_SYMBOL vmlinux 0x00fea777 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00ff95a5 filemap_fault +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x0106f903 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x0122f95e _lv1_get_spe_irq_outlet +EXPORT_SYMBOL vmlinux 0x013d6c99 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x015810a6 d_alloc_name +EXPORT_SYMBOL vmlinux 0x018d9919 _lv1_set_lpm_interrupt_mask +EXPORT_SYMBOL vmlinux 0x018e6431 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x019c331b of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01ea8853 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x01f920f9 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x020d18d7 _lv1_set_lpm_debug_bus_control +EXPORT_SYMBOL vmlinux 0x020ffb1a pci_find_device +EXPORT_SYMBOL vmlinux 0x022e4280 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x022f9bd5 elv_rb_add +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x027d5499 _lv1_did_update_interrupt_mask +EXPORT_SYMBOL vmlinux 0x028d62f7 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x02968f4b __napi_schedule +EXPORT_SYMBOL vmlinux 0x029a3eea phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02b932b8 complete_request_key +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02dd9b06 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x030cf74a xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0x031dc65e pasemi_dma_free_chan +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340e0ae schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x03504713 install_exec_creds +EXPORT_SYMBOL vmlinux 0x035db8d2 pci_domain_nr +EXPORT_SYMBOL vmlinux 0x035f7ae8 write_inode_now +EXPORT_SYMBOL vmlinux 0x03627c0a tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x036d2970 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x03a09a34 input_filter_device +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03d30cfb napi_frags_finish +EXPORT_SYMBOL vmlinux 0x03d77c33 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x0401a0bf matroxfb_register_driver +EXPORT_SYMBOL vmlinux 0x04074f48 ioremap +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0430444e kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x0440a533 _lv1_net_remove_multicast_address +EXPORT_SYMBOL vmlinux 0x04517af0 bio_free +EXPORT_SYMBOL vmlinux 0x0452a395 vga_put +EXPORT_SYMBOL vmlinux 0x0454234a nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x04737704 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x0479a9ad lock_fb_info +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04ad4038 vga_client_register +EXPORT_SYMBOL vmlinux 0x04eb3083 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x05217459 i2c_transfer +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x0524b1b7 macio_unregister_driver +EXPORT_SYMBOL vmlinux 0x05267360 kobject_set_name +EXPORT_SYMBOL vmlinux 0x0542ceb2 of_match_node +EXPORT_SYMBOL vmlinux 0x057d9062 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x05806ec9 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x059cdf67 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x05a514a1 _insl_ns +EXPORT_SYMBOL vmlinux 0x05b4e835 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x05cfa600 dquot_transfer +EXPORT_SYMBOL vmlinux 0x060c59db napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x062de767 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x067ebd1c nf_setsockopt +EXPORT_SYMBOL vmlinux 0x069f68f8 free_buffer_head +EXPORT_SYMBOL vmlinux 0x06a485f2 __krealloc +EXPORT_SYMBOL vmlinux 0x06b2c8c5 set_irq_chip +EXPORT_SYMBOL vmlinux 0x06c51a6c matroxfb_DAC_in +EXPORT_SYMBOL vmlinux 0x06ec1ac4 vfs_readlink +EXPORT_SYMBOL vmlinux 0x06eda34b vio_disable_interrupts +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x07485026 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x07527e0d __kfifo_get +EXPORT_SYMBOL vmlinux 0x076dbe0c tcp_proc_register +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x07a310de nf_log_packet +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x07e9f23c scm_fp_dup +EXPORT_SYMBOL vmlinux 0x07ef213a pasemi_dma_free_fun +EXPORT_SYMBOL vmlinux 0x07f10d1d netif_rx +EXPORT_SYMBOL vmlinux 0x07f8ee15 _lv1_unmap_device_dma_region +EXPORT_SYMBOL vmlinux 0x08124455 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x081b71ca scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x082e6859 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x084a3aa6 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x08778d18 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x089e5b6c __init_rwsem +EXPORT_SYMBOL vmlinux 0x08a64e7c kfifo_free +EXPORT_SYMBOL vmlinux 0x08abbc5b sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL vmlinux 0x08fe74d9 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x092001e1 nla_reserve +EXPORT_SYMBOL vmlinux 0x092b9d40 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x0956649d swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x096341c2 _lv1_connect_irq_plug_ext +EXPORT_SYMBOL vmlinux 0x0985da55 _read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x0996b573 poll_initwait +EXPORT_SYMBOL vmlinux 0x09a3cce5 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x09a6bab6 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x09a7432c cdev_index +EXPORT_SYMBOL vmlinux 0x09afd294 sync_inode +EXPORT_SYMBOL vmlinux 0x09c3adbb scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09d2abb2 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09d5364d bio_init +EXPORT_SYMBOL vmlinux 0x09f256d7 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x0a1dee85 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3d0644 cpu_online_mask +EXPORT_SYMBOL vmlinux 0x0a46b25b ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x0a657676 sys_copyarea +EXPORT_SYMBOL vmlinux 0x0a6835e5 dquot_acquire +EXPORT_SYMBOL vmlinux 0x0a698076 gen_pool_free +EXPORT_SYMBOL vmlinux 0x0ab3cdf3 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x0ab6c5ea set_device_ro +EXPORT_SYMBOL vmlinux 0x0ab72c43 __devm_request_region +EXPORT_SYMBOL vmlinux 0x0abb046f of_iomap +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0b04f367 mapping_tagged +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b33c32b neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x0b5b228f tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x0b62c369 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x0b6fabc5 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b8d2628 kernel_accept +EXPORT_SYMBOL vmlinux 0x0bae0591 matroxfb_enable_irq +EXPORT_SYMBOL vmlinux 0x0bdfd26e page_readlink +EXPORT_SYMBOL vmlinux 0x0c006a5f scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x0c1ad162 _lv1_net_start_rx_dma +EXPORT_SYMBOL vmlinux 0x0c2c9c5d inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x0c42dfc7 handle_sysrq +EXPORT_SYMBOL vmlinux 0x0c4756ad bio_copy_user +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c7fab18 add_timer +EXPORT_SYMBOL vmlinux 0x0c88c038 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb1c848 udp_ioctl +EXPORT_SYMBOL vmlinux 0x0cde410d load_nls_default +EXPORT_SYMBOL vmlinux 0x0cde4199 netlink_set_err +EXPORT_SYMBOL vmlinux 0x0d026194 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x0d383d27 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x0d39f4f3 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d56d4d3 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x0d60701e bio_integrity_free +EXPORT_SYMBOL vmlinux 0x0d6c963c copy_from_user +EXPORT_SYMBOL vmlinux 0x0d82c321 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x0d8876d2 block_write_end +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0da6cf2f of_device_uevent +EXPORT_SYMBOL vmlinux 0x0db80a19 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x0dcab966 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x0df15005 _spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x0df1f43a d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x0e0a8000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x0e0e3cb8 skb_split +EXPORT_SYMBOL vmlinux 0x0e1bd99f serio_interrupt +EXPORT_SYMBOL vmlinux 0x0e29f996 serio_reconnect +EXPORT_SYMBOL vmlinux 0x0e2baafe ps2_init +EXPORT_SYMBOL vmlinux 0x0e30be25 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x0e39bf37 tr_type_trans +EXPORT_SYMBOL vmlinux 0x0e436021 kobject_init +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e5ca4b8 ide_geometry_proc_fops +EXPORT_SYMBOL vmlinux 0x0e6950ec netlink_broadcast +EXPORT_SYMBOL vmlinux 0x0e7f4a2a i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x0e9ca5e9 journal_ack_err +EXPORT_SYMBOL vmlinux 0x0eb8e59b truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x0ece5b25 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x0edc51e8 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x0ef22ade remove_wait_queue +EXPORT_SYMBOL vmlinux 0x0f10dcaa i2c_release_client +EXPORT_SYMBOL vmlinux 0x0f13c165 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0x0f1bc04d sock_wfree +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f3a0b44 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x0f3acbe6 kthread_create +EXPORT_SYMBOL vmlinux 0x0f3d9ef7 __kfifo_put +EXPORT_SYMBOL vmlinux 0x0f4f4462 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x0f57d5ae _read_unlock_bh +EXPORT_SYMBOL vmlinux 0x0f5b472d skb_clone +EXPORT_SYMBOL vmlinux 0x0f5b4fe4 inet_frag_find +EXPORT_SYMBOL vmlinux 0x0f7ad348 ps3_dma_region_init +EXPORT_SYMBOL vmlinux 0x0f8b91c2 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x0f9a7a53 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x0fad4797 simple_fsync +EXPORT_SYMBOL vmlinux 0x0fc5e8eb radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x0fd71aa3 blk_plug_device +EXPORT_SYMBOL vmlinux 0x0ffc971c skb_gso_segment +EXPORT_SYMBOL vmlinux 0x102875b7 lock_may_write +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x107a481c wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x107d3bf2 seq_write +EXPORT_SYMBOL vmlinux 0x108c7e64 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10907112 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x10b1406b per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0x10c8828a simple_pin_fs +EXPORT_SYMBOL vmlinux 0x10ed7ddf key_type_keyring +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10ee89cb remove_inode_hash +EXPORT_SYMBOL vmlinux 0x110cfc2a matroxfb_wait_for_sync +EXPORT_SYMBOL vmlinux 0x111d4a10 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x114ed1ce schedule_work_on +EXPORT_SYMBOL vmlinux 0x11543909 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x1171b635 _lv1_delete_lpm_event_bookmark +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11a41041 _write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x124a36d6 ide_complete_rq +EXPORT_SYMBOL vmlinux 0x125f95f2 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x126d6b3b bioset_create +EXPORT_SYMBOL vmlinux 0x128ea3e1 pcim_iomap +EXPORT_SYMBOL vmlinux 0x12b5f48f sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x12c3148b devm_iounmap +EXPORT_SYMBOL vmlinux 0x12cb6622 _lv1_map_device_dma_region +EXPORT_SYMBOL vmlinux 0x12dcc62d blk_end_request +EXPORT_SYMBOL vmlinux 0x12e5ef0c rtas_set_power_level +EXPORT_SYMBOL vmlinux 0x12ea024a compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x130257e4 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x130cbfb7 mb_cache_create +EXPORT_SYMBOL vmlinux 0x13400463 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x1345dbf8 of_node_put +EXPORT_SYMBOL vmlinux 0x134d730d dquot_initialize +EXPORT_SYMBOL vmlinux 0x1358d272 sock_wake_async +EXPORT_SYMBOL vmlinux 0x1363b267 of_register_spi_devices +EXPORT_SYMBOL vmlinux 0x13a64342 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x13ca3482 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x13e2e1c5 bdget_disk +EXPORT_SYMBOL vmlinux 0x13e962e0 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x13f53da6 CMO_PageSize +EXPORT_SYMBOL vmlinux 0x14017f7b kset_unregister +EXPORT_SYMBOL vmlinux 0x141fe5fd pasemi_read_iob_reg +EXPORT_SYMBOL vmlinux 0x143c058a udp_disconnect +EXPORT_SYMBOL vmlinux 0x143f3322 per_cpu__cpu_core_map +EXPORT_SYMBOL vmlinux 0x147f10b2 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x1481dcfd seq_lseek +EXPORT_SYMBOL vmlinux 0x14dd2e58 register_framebuffer +EXPORT_SYMBOL vmlinux 0x14e665e2 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0x1510c33e neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x151592c4 _lv1_invalidate_htab_entries +EXPORT_SYMBOL vmlinux 0x1537f5e7 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1585a6b6 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x15bad9aa __nla_put +EXPORT_SYMBOL vmlinux 0x15ed95d3 _read_lock +EXPORT_SYMBOL vmlinux 0x160bd45c rtas_token +EXPORT_SYMBOL vmlinux 0x16250200 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x16631fc8 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x16662843 __register_binfmt +EXPORT_SYMBOL vmlinux 0x1688b93b scsi_remove_device +EXPORT_SYMBOL vmlinux 0x168b66f6 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x169780f9 find_get_page +EXPORT_SYMBOL vmlinux 0x17144c66 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x1727951b vfs_llseek +EXPORT_SYMBOL vmlinux 0x1743414f __debugger_fault_handler +EXPORT_SYMBOL vmlinux 0x179ec4b8 dcache_lock +EXPORT_SYMBOL vmlinux 0x17a263b8 kill_litter_super +EXPORT_SYMBOL vmlinux 0x17c622ac llc_add_pack +EXPORT_SYMBOL vmlinux 0x17c85a66 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x17cb8c79 _lv1_read_htab_entries +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x182f50af _lv1_open_device +EXPORT_SYMBOL vmlinux 0x18373416 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x184fa0fa scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x185b7dd6 _lv1_modify_repository_node_value +EXPORT_SYMBOL vmlinux 0x185c802e journal_init_dev +EXPORT_SYMBOL vmlinux 0x186fe245 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x189905e9 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x189b6bac memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x18c98205 _lv1_destruct_virtual_address_space +EXPORT_SYMBOL vmlinux 0x18e8401d proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x18f48119 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x18fe7b2e tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0x19391763 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x194783be ida_pre_get +EXPORT_SYMBOL vmlinux 0x194e8961 genphy_suspend +EXPORT_SYMBOL vmlinux 0x19582eb5 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1988eda5 tcp_close +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19ab5883 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x19c968d1 pasemi_dma_start_chan +EXPORT_SYMBOL vmlinux 0x19cb3eb7 iget_locked +EXPORT_SYMBOL vmlinux 0x19cbb4b5 down_timeout +EXPORT_SYMBOL vmlinux 0x19dd0513 ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0x19dd7408 simple_rmdir +EXPORT_SYMBOL vmlinux 0x19fa691d blk_start_queue +EXPORT_SYMBOL vmlinux 0x19fba79f netdev_state_change +EXPORT_SYMBOL vmlinux 0x1a0d82f4 no_llseek +EXPORT_SYMBOL vmlinux 0x1a16cfb9 phy_device_create +EXPORT_SYMBOL vmlinux 0x1a2f6945 __next_cpu +EXPORT_SYMBOL vmlinux 0x1a5ab53d mach_pseries +EXPORT_SYMBOL vmlinux 0x1a70bb28 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x1a7c92a7 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x1a91663d pasemi_dma_free_buf +EXPORT_SYMBOL vmlinux 0x1a93ea6c phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x1a9b2886 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x1abb8b39 send_sig +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad383f5 rtnl_notify +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0c5990 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x1b1d9a9e inode_needs_sync +EXPORT_SYMBOL vmlinux 0x1b425212 journal_start +EXPORT_SYMBOL vmlinux 0x1b5e3fea bio_endio +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b65d61d bio_integrity_split +EXPORT_SYMBOL vmlinux 0x1b74460d dev_disable_lro +EXPORT_SYMBOL vmlinux 0x1b84b496 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bb13615 skb_insert +EXPORT_SYMBOL vmlinux 0x1bc4ff03 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x1be4a2e0 mach_ps3 +EXPORT_SYMBOL vmlinux 0x1bf74d9f find_or_create_page +EXPORT_SYMBOL vmlinux 0x1bfde141 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x1bfec830 __iounmap_at +EXPORT_SYMBOL vmlinux 0x1c076421 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c200a7d pasemi_dma_stop_chan +EXPORT_SYMBOL vmlinux 0x1c4ab166 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x1c4dab93 _lv1_connect_irq_plug +EXPORT_SYMBOL vmlinux 0x1c4f1cb4 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x1c4febda pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x1c5b2c15 pmu_wait_complete +EXPORT_SYMBOL vmlinux 0x1c6cb475 blk_init_queue +EXPORT_SYMBOL vmlinux 0x1c79fe4a keyring_search +EXPORT_SYMBOL vmlinux 0x1c80de9c ip_send_check +EXPORT_SYMBOL vmlinux 0x1ca79358 set_bh_page +EXPORT_SYMBOL vmlinux 0x1ca93275 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ccc4581 clocksource_register +EXPORT_SYMBOL vmlinux 0x1cdb19d5 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x1ce2441c input_unregister_handle +EXPORT_SYMBOL vmlinux 0x1ce92ccf vga_get +EXPORT_SYMBOL vmlinux 0x1d086f8f napi_skb_finish +EXPORT_SYMBOL vmlinux 0x1d1d4c98 get_disk +EXPORT_SYMBOL vmlinux 0x1d1ee677 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d4750bc _lv1_stop_lpm +EXPORT_SYMBOL vmlinux 0x1d5242f9 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x1d9591c4 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0x1db427b5 dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dc36f89 fasync_helper +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1dea1198 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x1dfb2606 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x1e3c109b netlink_ack +EXPORT_SYMBOL vmlinux 0x1e405d90 napi_frags_skb +EXPORT_SYMBOL vmlinux 0x1e65d50a icmp_send +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e74dd94 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x1e8f93e2 mach_pasemi +EXPORT_SYMBOL vmlinux 0x1e9e15e0 dev_open +EXPORT_SYMBOL vmlinux 0x1e9f6e7a kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x1eaa0e5a blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x1eb75607 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x1edb0678 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1f220863 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x1f43cd7e inet_put_port +EXPORT_SYMBOL vmlinux 0x1f4d8cbf generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x1f4ec864 generic_read_dir +EXPORT_SYMBOL vmlinux 0x1f5549cd up_write +EXPORT_SYMBOL vmlinux 0x1f73b129 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x1fe72e35 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x1fe7b4ab pasemi_write_dma_reg +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x201494ee _lv1_net_set_interrupt_mask +EXPORT_SYMBOL vmlinux 0x201872b1 skb_trim +EXPORT_SYMBOL vmlinux 0x2023182c jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x2043e818 ida_destroy +EXPORT_SYMBOL vmlinux 0x204857ac proc_dostring +EXPORT_SYMBOL vmlinux 0x20965692 pskb_copy +EXPORT_SYMBOL vmlinux 0x20a06186 check_disk_change +EXPORT_SYMBOL vmlinux 0x20acd7f2 log_start_commit +EXPORT_SYMBOL vmlinux 0x20b05abc blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x20b38eaf jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x20e111df tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x20ff0967 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x21263d6d of_device_is_available +EXPORT_SYMBOL vmlinux 0x212c044f pci_enable_device +EXPORT_SYMBOL vmlinux 0x213603bf pasemi_dma_free_ring +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21741a8b dm_table_get +EXPORT_SYMBOL vmlinux 0x2177cec3 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x2187953d __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x219d5e28 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x21cc1297 console_stop +EXPORT_SYMBOL vmlinux 0x21f30718 get_sb_bdev +EXPORT_SYMBOL vmlinux 0x21f38f68 pci_choose_state +EXPORT_SYMBOL vmlinux 0x21f96149 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x21fa49c6 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x22246eed idr_find +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x224fb09a seq_escape +EXPORT_SYMBOL vmlinux 0x225b04ea pci_clear_master +EXPORT_SYMBOL vmlinux 0x225c14a7 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x225ebee6 _lv1_destruct_lpm +EXPORT_SYMBOL vmlinux 0x2261d25c skb_checksum +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x229da862 iget_failed +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22ca4cc3 dq_data_lock +EXPORT_SYMBOL vmlinux 0x22e06664 elv_rb_find +EXPORT_SYMBOL vmlinux 0x22e247f2 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x234509f3 strncat +EXPORT_SYMBOL vmlinux 0x235f149a jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x235fa111 dma_pool_create +EXPORT_SYMBOL vmlinux 0x23646237 eth_header_parse +EXPORT_SYMBOL vmlinux 0x2382d6f5 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x2386056e swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x239e72ca mark_page_accessed +EXPORT_SYMBOL vmlinux 0x23c18d75 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x241b5fde skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x2420858f ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0x2444e87e dentry_unhash +EXPORT_SYMBOL vmlinux 0x244a2411 __first_cpu +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24686293 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x246e2b52 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x24802e3b init_task +EXPORT_SYMBOL vmlinux 0x24a02670 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x24a46b11 ide_wait_stat +EXPORT_SYMBOL vmlinux 0x24cfd438 _lv1_copy_lpm_trace_buffer +EXPORT_SYMBOL vmlinux 0x24fabb5e tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250942d7 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x25362427 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x25377a28 __find_get_block +EXPORT_SYMBOL vmlinux 0x255c2278 ip_defrag +EXPORT_SYMBOL vmlinux 0x255feaf6 generic_write_sync +EXPORT_SYMBOL vmlinux 0x257d131a tcf_exts_change +EXPORT_SYMBOL vmlinux 0x257fd2b1 register_netdev +EXPORT_SYMBOL vmlinux 0x2581543c complete +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x259e10a6 jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0x25b6b8f7 _lv1_set_spe_transition_notifier +EXPORT_SYMBOL vmlinux 0x25c2d4e2 tcp_check_req +EXPORT_SYMBOL vmlinux 0x25c41ba9 blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x25c7a857 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL vmlinux 0x25dfd1c0 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x25e2678b sock_rfree +EXPORT_SYMBOL vmlinux 0x25eda6f4 secpath_dup +EXPORT_SYMBOL vmlinux 0x260b09c9 vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x26134333 input_unfilter_device +EXPORT_SYMBOL vmlinux 0x26352e73 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x26429c76 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x26477c07 __vmalloc +EXPORT_SYMBOL vmlinux 0x264cdcc0 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x2673edd4 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x268d70a3 of_dev_put +EXPORT_SYMBOL vmlinux 0x26a312e6 blk_put_request +EXPORT_SYMBOL vmlinux 0x26ad351f xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x26d4fd07 ipv4_specific +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f0a2bb sg_miter_next +EXPORT_SYMBOL vmlinux 0x270a0883 take_over_console +EXPORT_SYMBOL vmlinux 0x271aded9 sock_release +EXPORT_SYMBOL vmlinux 0x271f4d2a finish_wait +EXPORT_SYMBOL vmlinux 0x2751bfa6 generic_unplug_device +EXPORT_SYMBOL vmlinux 0x275a65c7 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x27646df3 start_thread +EXPORT_SYMBOL vmlinux 0x276609dc xfrm_init_state +EXPORT_SYMBOL vmlinux 0x277d622d sys_fillrect +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x2788e5dd __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x27b16216 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c28e46 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x27c41698 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27d0c453 ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x27d54413 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x27d98f9e flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x27e95bf7 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x27fc4a0c generic_write_checks +EXPORT_SYMBOL vmlinux 0x28047bb8 fd_install +EXPORT_SYMBOL vmlinux 0x2806deec neigh_ifdown +EXPORT_SYMBOL vmlinux 0x281355b0 vfs_readdir +EXPORT_SYMBOL vmlinux 0x283fcd91 audit_log_start +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x286862bf bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x28716619 slow_work_register_user +EXPORT_SYMBOL vmlinux 0x2876a6d3 memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x288e17e1 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x289a2a75 file_update_time +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28c5feb2 d_invalidate +EXPORT_SYMBOL vmlinux 0x28cf3e70 up +EXPORT_SYMBOL vmlinux 0x28de6ba3 lro_receive_frags +EXPORT_SYMBOL vmlinux 0x2914666b xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x295d2286 neigh_update +EXPORT_SYMBOL vmlinux 0x2960019b eeh_check_failure +EXPORT_SYMBOL vmlinux 0x296779a2 genphy_resume +EXPORT_SYMBOL vmlinux 0x297025be tcf_register_action +EXPORT_SYMBOL vmlinux 0x29766a93 down_killable +EXPORT_SYMBOL vmlinux 0x29820572 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x298c8598 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0x29910878 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x29a20287 ps2_command +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x29dc7dd7 I_BDEV +EXPORT_SYMBOL vmlinux 0x2a16e6d0 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x2a23b4e4 tty_write_room +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a652b8d filp_open +EXPORT_SYMBOL vmlinux 0x2a6cf09d udplite_prot +EXPORT_SYMBOL vmlinux 0x2aa76d9e splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x2ab3ac44 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x2acabe29 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x2b091daa __scsi_add_device +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b0cd6b1 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x2b16d0c5 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x2b2704a2 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x2b5e6c69 __any_online_cpu +EXPORT_SYMBOL vmlinux 0x2b978536 pci_read_irq_line +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2c1c100c tty_free_termios +EXPORT_SYMBOL vmlinux 0x2c1cd4a4 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x2c201d52 km_policy_expired +EXPORT_SYMBOL vmlinux 0x2c4c7997 _lv1_construct_lpm +EXPORT_SYMBOL vmlinux 0x2c651358 mnt_unpin +EXPORT_SYMBOL vmlinux 0x2c8ef0a7 is_container_init +EXPORT_SYMBOL vmlinux 0x2cd33077 kernel_listen +EXPORT_SYMBOL vmlinux 0x2cf3787c key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x2d0ec286 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x2d6089c9 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x2d68cb27 datagram_poll +EXPORT_SYMBOL vmlinux 0x2d7d2767 _lv1_set_lpm_group_control +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2d962502 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x2dbafbe3 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x2dbdae19 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x2dc0f653 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x2dcdbe39 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x2dd1566f scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x2ddcc1c1 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x2dddf125 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x2df81be8 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0x2e1bef92 eeh_subsystem_enabled +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e3a4126 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e568a22 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x2e93495e _lv1_write_htab_entry +EXPORT_SYMBOL vmlinux 0x2ea52bc6 flush_old_exec +EXPORT_SYMBOL vmlinux 0x2eae81d6 generic_writepages +EXPORT_SYMBOL vmlinux 0x2ecd2a0d zero_fill_bio +EXPORT_SYMBOL vmlinux 0x2ee4337f smu_queue_cmd +EXPORT_SYMBOL vmlinux 0x2ef7553a cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x2f005781 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x2f1e1c7b register_netdevice +EXPORT_SYMBOL vmlinux 0x2f287f0d copy_to_user +EXPORT_SYMBOL vmlinux 0x2f38ea82 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x2f3abdef irq_desc +EXPORT_SYMBOL vmlinux 0x2f8cb65e audit_log_end +EXPORT_SYMBOL vmlinux 0x2f9fde6c inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x2fa2093e blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x2fa6cf90 console_start +EXPORT_SYMBOL vmlinux 0x2ff9ba72 aio_put_req +EXPORT_SYMBOL vmlinux 0x301a9d5c i2c_register_driver +EXPORT_SYMBOL vmlinux 0x302a37b6 bio_clone +EXPORT_SYMBOL vmlinux 0x30611dec scsi_register_driver +EXPORT_SYMBOL vmlinux 0x307f7776 timecompare_offset +EXPORT_SYMBOL vmlinux 0x30802f05 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x30a09ab9 mutex_trylock +EXPORT_SYMBOL vmlinux 0x30e33d8a inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x30e79647 mdiobus_read +EXPORT_SYMBOL vmlinux 0x30ed4a5a dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x30f08f5b of_find_device_by_phandle +EXPORT_SYMBOL vmlinux 0x30ffe1f7 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x3115a8db pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x3118f58a tty_devnum +EXPORT_SYMBOL vmlinux 0x312cfaf2 _lv1_disable_logical_spe +EXPORT_SYMBOL vmlinux 0x31448a4a mempool_create_node +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x314cc50a log_wait_commit +EXPORT_SYMBOL vmlinux 0x31631fc7 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x31771291 cdev_del +EXPORT_SYMBOL vmlinux 0x319426b3 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x31b7f300 _lv1_set_lpm_signal +EXPORT_SYMBOL vmlinux 0x31cbb825 textsearch_register +EXPORT_SYMBOL vmlinux 0x31cd509a _lv1_net_control +EXPORT_SYMBOL vmlinux 0x31f72fc0 input_open_device +EXPORT_SYMBOL vmlinux 0x32017de0 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x323385e9 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x323f1130 register_exec_domain +EXPORT_SYMBOL vmlinux 0x32488e95 tcp_prot +EXPORT_SYMBOL vmlinux 0x3250d41f pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x326a5279 devm_ioremap_prot +EXPORT_SYMBOL vmlinux 0x3274c68d revert_creds +EXPORT_SYMBOL vmlinux 0x327b9c1b pmu_poll_adb +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x328f5085 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x32b7757b arp_create +EXPORT_SYMBOL vmlinux 0x32cc6779 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x32d9174c ppc_md +EXPORT_SYMBOL vmlinux 0x32ef0ccf netpoll_poll +EXPORT_SYMBOL vmlinux 0x32fce481 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x3305b0e6 llc_sap_open +EXPORT_SYMBOL vmlinux 0x33093cc5 i2c_bit_add_numbered_bus +EXPORT_SYMBOL vmlinux 0x333c5b24 module_put +EXPORT_SYMBOL vmlinux 0x3341699b netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x3343202b unregister_cdrom +EXPORT_SYMBOL vmlinux 0x33496a15 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x334a6ddb block_truncate_page +EXPORT_SYMBOL vmlinux 0x337b40a3 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x338ca71b mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x338dc275 qdisc_list_del +EXPORT_SYMBOL vmlinux 0x339d4841 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x33b3949a add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x33f88d1a skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x341bfb86 vfs_writev +EXPORT_SYMBOL vmlinux 0x344adbd5 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34e2492a jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x3519213a tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0x35246182 of_device_register +EXPORT_SYMBOL vmlinux 0x352d8646 elv_queue_empty +EXPORT_SYMBOL vmlinux 0x3533a0bf of_dev_get +EXPORT_SYMBOL vmlinux 0x3560a650 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x35652941 ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0x35b0650f vsnprintf +EXPORT_SYMBOL vmlinux 0x35b461b2 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35cd038b register_console +EXPORT_SYMBOL vmlinux 0x35e8fb2f ida_get_new +EXPORT_SYMBOL vmlinux 0x361073be per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0x36139a51 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x36238be3 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x3656bf5a lock_kernel +EXPORT_SYMBOL vmlinux 0x366d15ae of_scan_pci_bridge +EXPORT_SYMBOL vmlinux 0x36875389 __timecompare_update +EXPORT_SYMBOL vmlinux 0x36ac1c1e unregister_qdisc +EXPORT_SYMBOL vmlinux 0x36b344cd ps2_drain +EXPORT_SYMBOL vmlinux 0x36cc3001 generic_write_end +EXPORT_SYMBOL vmlinux 0x36d295cc phy_disconnect +EXPORT_SYMBOL vmlinux 0x36f0a99d generic_setlease +EXPORT_SYMBOL vmlinux 0x370583d7 consume_skb +EXPORT_SYMBOL vmlinux 0x371902e9 _lv1_get_lpm_interrupt_status +EXPORT_SYMBOL vmlinux 0x371d2130 check_legacy_ioport +EXPORT_SYMBOL vmlinux 0x3722a1da cdev_alloc +EXPORT_SYMBOL vmlinux 0x37319f74 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x37345b4c d_alloc +EXPORT_SYMBOL vmlinux 0x37383edd rtas_get_power_level +EXPORT_SYMBOL vmlinux 0x3743d2c7 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x375465a7 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x375ea5f9 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x37a9798f mempool_free +EXPORT_SYMBOL vmlinux 0x37abadbf matroxfb_g450_setclk +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37c134e1 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x37ceab01 call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x37f5eed3 get_fs_type +EXPORT_SYMBOL vmlinux 0x38023d19 sg_init_one +EXPORT_SYMBOL vmlinux 0x382777ab _lv1_gpu_context_allocate +EXPORT_SYMBOL vmlinux 0x3838f7f6 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x387d60fa kill_anon_super +EXPORT_SYMBOL vmlinux 0x388959b5 _lv1_net_stop_tx_dma +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x3898c98f of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38bec5c9 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x38d94454 of_find_node_by_path +EXPORT_SYMBOL vmlinux 0x38e5f8eb sg_miter_stop +EXPORT_SYMBOL vmlinux 0x38e6b6d2 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x38fb9933 tty_std_termios +EXPORT_SYMBOL vmlinux 0x3906b93c _spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x3922d605 _spin_trylock +EXPORT_SYMBOL vmlinux 0x39230e48 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x39291769 matroxfb_g450_setpll_cond +EXPORT_SYMBOL vmlinux 0x39567e56 tty_vhangup +EXPORT_SYMBOL vmlinux 0x396d09f3 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x39776b84 tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x398fc1da ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x399ff807 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x39c16f1e release_firmware +EXPORT_SYMBOL vmlinux 0x39de1541 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x39e7dee4 vc_cons +EXPORT_SYMBOL vmlinux 0x39f522af devm_free_irq +EXPORT_SYMBOL vmlinux 0x3a0f5811 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a24a9e1 serio_rescan +EXPORT_SYMBOL vmlinux 0x3a271295 gen_pool_add +EXPORT_SYMBOL vmlinux 0x3a39077a dquot_destroy +EXPORT_SYMBOL vmlinux 0x3a593cf6 put_io_context +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3a9d70ef per_cpu__cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x3ad29717 __f_setown +EXPORT_SYMBOL vmlinux 0x3ae06310 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x3ae344f8 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x3ae6d60c netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3aee0048 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x3b14a0cc tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b562b87 inet_listen +EXPORT_SYMBOL vmlinux 0x3b7791fd vfs_readv +EXPORT_SYMBOL vmlinux 0x3b7ec4ec sk_release_kernel +EXPORT_SYMBOL vmlinux 0x3b92334d tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3be209a0 fb_find_mode +EXPORT_SYMBOL vmlinux 0x3c1a5487 pci_release_regions +EXPORT_SYMBOL vmlinux 0x3c1af111 get_pci_dma_ops +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c2dbd8a ip_getsockopt +EXPORT_SYMBOL vmlinux 0x3c617f02 scsi_device_get +EXPORT_SYMBOL vmlinux 0x3c6369d8 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x3c92dfc5 deny_write_access +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cad299d alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cf1608b scsi_unregister +EXPORT_SYMBOL vmlinux 0x3cfd3137 d_path +EXPORT_SYMBOL vmlinux 0x3d034298 d_splice_alias +EXPORT_SYMBOL vmlinux 0x3d54ac01 _lv1_net_stop_rx_dma +EXPORT_SYMBOL vmlinux 0x3d6481f2 init_timer_key +EXPORT_SYMBOL vmlinux 0x3d6862c2 journal_clear_err +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d8728bb memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x3db2e258 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x3db8b8f7 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x3dd2d72e filp_close +EXPORT_SYMBOL vmlinux 0x3de0d1fc i2c_master_recv +EXPORT_SYMBOL vmlinux 0x3e16c447 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x3e1c48ab block_write_full_page +EXPORT_SYMBOL vmlinux 0x3e286dca _lv1_get_rtc +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e543207 bio_copy_kern +EXPORT_SYMBOL vmlinux 0x3e5b8d0f pci_request_region +EXPORT_SYMBOL vmlinux 0x3e795388 __rta_fill +EXPORT_SYMBOL vmlinux 0x3e7e0957 i2c_master_send +EXPORT_SYMBOL vmlinux 0x3e855841 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0x3eb79e21 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x3ec12b2a compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x3ec29b78 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x3ecfe967 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x3ed141c5 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x3ed4c510 audit_log_format +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3eecf959 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x3f0514f8 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f0618e8 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x3f06a656 _lv1_construct_event_receive_port +EXPORT_SYMBOL vmlinux 0x3f07236c module_refcount +EXPORT_SYMBOL vmlinux 0x3f08779d dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x3f1466e3 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x3f23421a pci_reenable_device +EXPORT_SYMBOL vmlinux 0x3f2beddf dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x3f390093 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x3f406a3b enable_kernel_altivec +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f466f19 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x3f58f4d6 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x3f78b749 skb_pad +EXPORT_SYMBOL vmlinux 0x3fa03a97 memset +EXPORT_SYMBOL vmlinux 0x3fa913da strspn +EXPORT_SYMBOL vmlinux 0x3fbfd6ed _lv1_gpu_open +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x401ece51 of_get_parent +EXPORT_SYMBOL vmlinux 0x40295f71 dm_put_device +EXPORT_SYMBOL vmlinux 0x40392f15 pci_iomap +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x407e7b4b xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x4101a975 ide_fixstring +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41106443 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x412a014e generic_permission +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41361807 _lv1_get_logical_ppe_id +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x4148fce2 proto_unregister +EXPORT_SYMBOL vmlinux 0x415551ad of_find_matching_node +EXPORT_SYMBOL vmlinux 0x415714b6 down_read +EXPORT_SYMBOL vmlinux 0x4158d599 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x41636f2f jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x4164e0fd con_is_bound +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41dbf4de _lv1_start_lpm +EXPORT_SYMBOL vmlinux 0x41e07424 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x42347de1 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4239fff2 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x429328d9 _spin_lock +EXPORT_SYMBOL vmlinux 0x42a3ff28 idr_get_new_above +EXPORT_SYMBOL vmlinux 0x42acbf72 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x42b2b565 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x42b53e99 tty_mutex +EXPORT_SYMBOL vmlinux 0x42d2eb5b of_unregister_driver +EXPORT_SYMBOL vmlinux 0x42f8d10e netif_carrier_off +EXPORT_SYMBOL vmlinux 0x42feb4eb find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4330d0ee dev_trans_start +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x437fd0f5 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43ad470a open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x43bb83d9 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x43ce397b sk_reset_timer +EXPORT_SYMBOL vmlinux 0x43d4a154 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x43d5ddde sys_imageblit +EXPORT_SYMBOL vmlinux 0x43dbd433 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x43ea60c9 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x43ec913a put_cmsg +EXPORT_SYMBOL vmlinux 0x43f23f9b set_groups +EXPORT_SYMBOL vmlinux 0x43fa2037 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x44287641 igrab +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x449acb5c tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x449d3b45 pci_dev_get +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44e276a0 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44ec47c3 skb_under_panic +EXPORT_SYMBOL vmlinux 0x44f93487 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x4503e438 mac_find_mode +EXPORT_SYMBOL vmlinux 0x450be9b4 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x450f8f3d km_report +EXPORT_SYMBOL vmlinux 0x453975d5 pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4564459b _lv1_set_virtual_uart_param +EXPORT_SYMBOL vmlinux 0x4568911a i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x45704798 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x45a55ec8 __iounmap +EXPORT_SYMBOL vmlinux 0x45cfe80b pasemi_dma_free_flag +EXPORT_SYMBOL vmlinux 0x45f50c91 nobh_writepage +EXPORT_SYMBOL vmlinux 0x461ebfa0 __copy_tofrom_user +EXPORT_SYMBOL vmlinux 0x4663bcf5 security_path_rename +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x467ab1ce __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x468bcc2e read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x46aa38f7 devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x46afa36d bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x46ced0bf dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x46d353d9 cdrom_release +EXPORT_SYMBOL vmlinux 0x46dfb50e security_path_rmdir +EXPORT_SYMBOL vmlinux 0x4708a58f input_unregister_device +EXPORT_SYMBOL vmlinux 0x4724cf1f compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x473b1dcd scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x47460d5a mutex_unlock +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x47894763 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a5fb5d inet_stream_connect +EXPORT_SYMBOL vmlinux 0x47ab9797 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x47ac1f7f follow_up +EXPORT_SYMBOL vmlinux 0x47ec00d5 mntput_no_expire +EXPORT_SYMBOL vmlinux 0x480ab42a __next_cpu_nr +EXPORT_SYMBOL vmlinux 0x4841a274 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x48716dd0 macio_release_resources +EXPORT_SYMBOL vmlinux 0x488069e9 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x48815a65 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x4881efab pmac_get_partition +EXPORT_SYMBOL vmlinux 0x488c5895 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x48a19a2e blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x48a1fdf6 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x48a8b80f nf_log_register +EXPORT_SYMBOL vmlinux 0x48ac3900 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0x48bc2ef0 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x48c1d080 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x48f90fe1 pipe_lock +EXPORT_SYMBOL vmlinux 0x4916b2cb sock_setsockopt +EXPORT_SYMBOL vmlinux 0x492a6908 kset_register +EXPORT_SYMBOL vmlinux 0x4932660b ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0x49356a28 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x495ec6eb pasemi_dma_alloc_buf +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x496f65f8 __scm_send +EXPORT_SYMBOL vmlinux 0x4982c227 pci_release_region +EXPORT_SYMBOL vmlinux 0x4992c4f0 ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0x49d00c67 input_release_device +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e8c7b4 free_netdev +EXPORT_SYMBOL vmlinux 0x49ffbb27 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x4a172097 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x4a2a7692 __free_pages +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a65f4ee of_get_next_child +EXPORT_SYMBOL vmlinux 0x4a722650 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x4a8702be panic_notifier_list +EXPORT_SYMBOL vmlinux 0x4a8819b7 tty_port_close +EXPORT_SYMBOL vmlinux 0x4a955a01 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x4a98af4e __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x4ac64da4 _lv1_select_virtual_address_space +EXPORT_SYMBOL vmlinux 0x4aca1f38 input_close_device +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4af5625e grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b0923ba ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x4b17de47 _read_lock_bh +EXPORT_SYMBOL vmlinux 0x4b2a62db of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x4b33cbf7 km_policy_notify +EXPORT_SYMBOL vmlinux 0x4b3558c1 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x4b3cb349 _lv1_destruct_io_irq_outlet +EXPORT_SYMBOL vmlinux 0x4b3cf22b pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x4b3d7215 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x4b59c2d5 km_state_expired +EXPORT_SYMBOL vmlinux 0x4b65a3dc tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x4b6fcddc _lv1_set_spe_interrupt_mask +EXPORT_SYMBOL vmlinux 0x4b9a2df1 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x4baf40c3 vc_resize +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4c02c6af jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x4c0f0324 d_rehash +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c191b47 hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x4c1c20e6 blk_run_queue +EXPORT_SYMBOL vmlinux 0x4c411943 kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x4c47c5b9 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x4c47edae bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x4c4c956e nla_memcmp +EXPORT_SYMBOL vmlinux 0x4cb37025 generic_setxattr +EXPORT_SYMBOL vmlinux 0x4cba47bc proto_register +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cc04369 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x4cd0805b get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0x4cd34a9b vfsmount_lock +EXPORT_SYMBOL vmlinux 0x4cee2a66 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0x4cf1aecc pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x4d2a5c19 rwsem_wake +EXPORT_SYMBOL vmlinux 0x4d624ef5 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x4d7030fd get_sb_pseudo +EXPORT_SYMBOL vmlinux 0x4d749fdb tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x4d8ca44a sk_alloc +EXPORT_SYMBOL vmlinux 0x4d941574 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x4dc4592b check_disk_size_change +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dda726b match_strlcpy +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e11a39e jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e5d6d8d node_data +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e717518 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x4e8b3f01 add_disk +EXPORT_SYMBOL vmlinux 0x4e90cb72 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x4e9dffb5 ip_fast_csum +EXPORT_SYMBOL vmlinux 0x4ecfb659 dquot_commit +EXPORT_SYMBOL vmlinux 0x4ecff2d4 ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f3ce4aa mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x4f3f4964 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x4f44ca9f inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x4f664db6 _lv1_insert_htab_entry +EXPORT_SYMBOL vmlinux 0x4f6a84fa qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x4f771a0a genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x4f91fedf blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x4fa89547 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x4fbe2ec9 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4fe94555 genl_register_ops +EXPORT_SYMBOL vmlinux 0x4ffa9ef2 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x5004506e pci_pme_capable +EXPORT_SYMBOL vmlinux 0x5009fa0e fsync_bdev +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x504873e4 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x504f3b45 nf_afinfo +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x508847eb phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x50a48bf7 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x50ae3c54 _lv1_gpu_attribute +EXPORT_SYMBOL vmlinux 0x50b15c53 _read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x50ce273c vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x50d8ac59 tcp_connect +EXPORT_SYMBOL vmlinux 0x5101486e qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x511154bc pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x512c23e3 __break_lease +EXPORT_SYMBOL vmlinux 0x515eaf6b netdev_set_master +EXPORT_SYMBOL vmlinux 0x517fbe04 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x51864f99 write_cache_pages +EXPORT_SYMBOL vmlinux 0x519d0910 __lock_page +EXPORT_SYMBOL vmlinux 0x51a25c69 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x51ae92cf of_create_pci_dev +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51dfd725 flush_icache_user_range +EXPORT_SYMBOL vmlinux 0x51eb05ab default_llseek +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x521357d7 revalidate_disk +EXPORT_SYMBOL vmlinux 0x5240da2d migrate_page +EXPORT_SYMBOL vmlinux 0x525bbad0 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x525d73e3 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527830ff pmac_xpram_read +EXPORT_SYMBOL vmlinux 0x52856cc1 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x528a9168 filemap_flush +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52b0166a call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52e3fa05 _lv1_allocate_memory +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x52ec4076 input_set_capability +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x5315f750 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x53280aaa may_umount +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x5339f5f8 _lv1_read_virtual_uart +EXPORT_SYMBOL vmlinux 0x5372a4c3 current_fs_time +EXPORT_SYMBOL vmlinux 0x537ec6b6 arp_xmit +EXPORT_SYMBOL vmlinux 0x53b5b619 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53d91e59 _spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x53e911c2 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x53ebab1b _outsl_ns +EXPORT_SYMBOL vmlinux 0x53f6bed6 neigh_create +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x542dbaa6 generic_removexattr +EXPORT_SYMBOL vmlinux 0x54470367 down +EXPORT_SYMBOL vmlinux 0x54544080 __kill_fasync +EXPORT_SYMBOL vmlinux 0x54602866 sock_i_ino +EXPORT_SYMBOL vmlinux 0x546f024d inode_init_once +EXPORT_SYMBOL vmlinux 0x548f6b16 copy_4K_page +EXPORT_SYMBOL vmlinux 0x54943fb2 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x54a34010 vfs_write +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54bf20cc register_sysctl_table +EXPORT_SYMBOL vmlinux 0x54c6479c __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54fadfd9 create_proc_entry +EXPORT_SYMBOL vmlinux 0x557b3dd8 _lv1_gpu_close +EXPORT_SYMBOL vmlinux 0x557e809f page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a286bf proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x55ae46f5 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x55f95f30 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x560d0f68 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x5615f696 sock_register +EXPORT_SYMBOL vmlinux 0x562d4a5a find_vma +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x563657d9 scsi_get_command +EXPORT_SYMBOL vmlinux 0x563c530c tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x5686e1d6 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x568804ee _lv1_destruct_event_receive_port +EXPORT_SYMBOL vmlinux 0x56a10763 csum_tcpudp_magic +EXPORT_SYMBOL vmlinux 0x56abb941 llc_sap_close +EXPORT_SYMBOL vmlinux 0x56b43894 pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x56c2b95b rtas_progress +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d8d847 sock_i_uid +EXPORT_SYMBOL vmlinux 0x56e86bde blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x56f38712 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x56f494e0 smp_call_function +EXPORT_SYMBOL vmlinux 0x571fee85 ip_route_input +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x5743dacb of_phy_connect +EXPORT_SYMBOL vmlinux 0x5771b5b2 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x579bab50 _lv1_gpu_memory_free +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57bf30c5 put_disk +EXPORT_SYMBOL vmlinux 0x57d935e2 lock_rename +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57ff9ac9 page_put_link +EXPORT_SYMBOL vmlinux 0x582916f2 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x582c9033 security_path_link +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x586b609a vfs_lstat +EXPORT_SYMBOL vmlinux 0x588684ac linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x58868702 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x58881003 journal_force_commit +EXPORT_SYMBOL vmlinux 0x5895e541 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x58ba6f5e __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x58c44d76 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x58d246e4 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x58d2f83b touch_atime +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x593ea0b6 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x595d0946 empty_zero_page +EXPORT_SYMBOL vmlinux 0x596b2921 file_permission +EXPORT_SYMBOL vmlinux 0x59a42ccc tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d6ffb0 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x59f75d25 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x59f9bfe1 default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x5a186593 neigh_lookup +EXPORT_SYMBOL vmlinux 0x5a191c2b generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x5a1ed9c7 neigh_for_each +EXPORT_SYMBOL vmlinux 0x5a34a45c __kmalloc +EXPORT_SYMBOL vmlinux 0x5a3b1acc thaw_bdev +EXPORT_SYMBOL vmlinux 0x5a5e7ea3 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5a7eb474 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x5a8b0669 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x5abf4897 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x5af55f9d jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x5b27bcec sysctl_intvec +EXPORT_SYMBOL vmlinux 0x5b2a8801 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x5b40b674 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x5b43f1f1 rtas_service_present +EXPORT_SYMBOL vmlinux 0x5b4bf118 pipe_unlock +EXPORT_SYMBOL vmlinux 0x5b63955d iput +EXPORT_SYMBOL vmlinux 0x5b7dbb7e __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x5bb9d8ce macio_request_resources +EXPORT_SYMBOL vmlinux 0x5bd6cec5 request_firmware +EXPORT_SYMBOL vmlinux 0x5bda9a65 of_platform_bus_type +EXPORT_SYMBOL vmlinux 0x5bdd597e read_dev_sector +EXPORT_SYMBOL vmlinux 0x5c208d38 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x5c2bf078 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x5c333803 input_set_keycode +EXPORT_SYMBOL vmlinux 0x5c49864c netif_carrier_on +EXPORT_SYMBOL vmlinux 0x5c560431 fput +EXPORT_SYMBOL vmlinux 0x5c7e079c scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x5c89555b flush_signals +EXPORT_SYMBOL vmlinux 0x5cade686 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x5cc5b658 kfifo_alloc +EXPORT_SYMBOL vmlinux 0x5cc8e015 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x5ccc9045 _lv1_close_device +EXPORT_SYMBOL vmlinux 0x5ce30fe9 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x5cef4e3f textsearch_unregister +EXPORT_SYMBOL vmlinux 0x5cf30e10 __debugger_ipi +EXPORT_SYMBOL vmlinux 0x5d0ec8cc dquot_free_inode +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d2474d6 pci_get_class +EXPORT_SYMBOL vmlinux 0x5d5b72d0 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x5d6a168b tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x5d7515eb scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x5d9bd404 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x5dbbe98e memmove +EXPORT_SYMBOL vmlinux 0x5dbe969b alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x5dd39cfd vfs_fstatat +EXPORT_SYMBOL vmlinux 0x5df2f686 matrox_mystique +EXPORT_SYMBOL vmlinux 0x5e1d175d open_exec +EXPORT_SYMBOL vmlinux 0x5e76fbd3 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x5e7f60bc seq_printf +EXPORT_SYMBOL vmlinux 0x5e823e3f clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5e993720 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5ebc56c4 commit_creds +EXPORT_SYMBOL vmlinux 0x5ece211c idr_replace +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5ee5a133 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x5f030743 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x5f4e8b51 pci_find_bus +EXPORT_SYMBOL vmlinux 0x5f72b991 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x5f7cb06a tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x5f8a2728 isa_io_base +EXPORT_SYMBOL vmlinux 0x5f8df00f __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x5fcfa5bf blk_complete_request +EXPORT_SYMBOL vmlinux 0x5fde5413 netif_device_attach +EXPORT_SYMBOL vmlinux 0x5fe8d8eb fb_pan_display +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x604f5d94 phy_device_register +EXPORT_SYMBOL vmlinux 0x605c8bde radix_tree_delete +EXPORT_SYMBOL vmlinux 0x6067a146 memcpy +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60ccbccf xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x60ede47a sock_no_bind +EXPORT_SYMBOL vmlinux 0x60f4af68 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x616ba041 nf_register_hooks +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x6194e465 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x61a4487c _lv1_gpu_device_unmap +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61ba962c tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x61c9d5c5 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x61d32986 sock_create_kern +EXPORT_SYMBOL vmlinux 0x61dcdcd3 _lv1_pause +EXPORT_SYMBOL vmlinux 0x61e9bab4 udp_poll +EXPORT_SYMBOL vmlinux 0x61eef2c9 _insb +EXPORT_SYMBOL vmlinux 0x61f0eeb3 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x61fe2b4a dst_alloc +EXPORT_SYMBOL vmlinux 0x620060ec mod_timer +EXPORT_SYMBOL vmlinux 0x620f8f1d i2c_del_driver +EXPORT_SYMBOL vmlinux 0x6220b988 _spin_lock_irq +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62959449 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x62f62757 scsi_print_result +EXPORT_SYMBOL vmlinux 0x630a833a tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x6330fa5b dquot_commit_info +EXPORT_SYMBOL vmlinux 0x6352568f unregister_filesystem +EXPORT_SYMBOL vmlinux 0x635a4f80 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x6360d639 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x638c172e vfs_fstat +EXPORT_SYMBOL vmlinux 0x63a1a34b eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x63b4a69c __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x63b96795 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x63db4710 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x63e8d9eb override_creds +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63f75920 _lv1_construct_virtual_address_space +EXPORT_SYMBOL vmlinux 0x63fa2dbd dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0x6402bcda ip_dev_find +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x6404453d register_cdrom +EXPORT_SYMBOL vmlinux 0x64224bdb __dst_free +EXPORT_SYMBOL vmlinux 0x642d9507 freeze_bdev +EXPORT_SYMBOL vmlinux 0x6452212f try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x646594ff ps3_dma_region_free +EXPORT_SYMBOL vmlinux 0x6469bf54 journal_dirty_data +EXPORT_SYMBOL vmlinux 0x646cc6ab pmu_poll +EXPORT_SYMBOL vmlinux 0x6489df50 skb_put +EXPORT_SYMBOL vmlinux 0x648e2da3 invalidate_inodes +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x649a9608 giveup_fpu +EXPORT_SYMBOL vmlinux 0x64ea0b7c pci_find_capability +EXPORT_SYMBOL vmlinux 0x64f13f1b netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x64f5ce06 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x64fa72ef dev_get_by_name +EXPORT_SYMBOL vmlinux 0x64fb3213 of_mm_gpiochip_add +EXPORT_SYMBOL vmlinux 0x64fb9422 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x65022a24 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x651aa0f0 vio_register_device_node +EXPORT_SYMBOL vmlinux 0x6539448c skb_free_datagram +EXPORT_SYMBOL vmlinux 0x653ac1fb nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x656f7ac5 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x65717fbb inet_release +EXPORT_SYMBOL vmlinux 0x657d801a jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x65bbcddf xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x65cc7009 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x65ef458c of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x65f4af5f prepare_to_wait +EXPORT_SYMBOL vmlinux 0x65f81aa3 pci_request_regions +EXPORT_SYMBOL vmlinux 0x661a5783 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x66466c44 generic_listxattr +EXPORT_SYMBOL vmlinux 0x664a99e8 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x665d2020 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x6669e4a5 dma_direct_ops +EXPORT_SYMBOL vmlinux 0x66877870 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66ad1cb3 _lv1_set_lpm_general_control +EXPORT_SYMBOL vmlinux 0x66b6fac1 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x66c3da05 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x66cbf14b pmac_xpram_write +EXPORT_SYMBOL vmlinux 0x66e92606 bdput +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x671da7f9 phy_connect +EXPORT_SYMBOL vmlinux 0x672144bd strlcpy +EXPORT_SYMBOL vmlinux 0x6729402f pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x6757112d scsi_execute +EXPORT_SYMBOL vmlinux 0x6758a136 tcf_em_register +EXPORT_SYMBOL vmlinux 0x676e3291 down_write +EXPORT_SYMBOL vmlinux 0x6775db71 eth_type_trans +EXPORT_SYMBOL vmlinux 0x67a555ce ip_fragment +EXPORT_SYMBOL vmlinux 0x67ab4008 mach_powermac +EXPORT_SYMBOL vmlinux 0x67ad8478 DAC1064_global_restore +EXPORT_SYMBOL vmlinux 0x67dd5c31 of_find_property +EXPORT_SYMBOL vmlinux 0x67e1b3f6 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x67ef56b7 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x682a9877 lookup_one_len +EXPORT_SYMBOL vmlinux 0x685baa6f read_cache_page_async +EXPORT_SYMBOL vmlinux 0x68628e77 _write_lock_bh +EXPORT_SYMBOL vmlinux 0x687122fc dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x68897445 ether_setup +EXPORT_SYMBOL vmlinux 0x68c86ee6 of_release_dev +EXPORT_SYMBOL vmlinux 0x68e1ef51 smu_present +EXPORT_SYMBOL vmlinux 0x690da496 ida_init +EXPORT_SYMBOL vmlinux 0x6967c282 otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697cb0a0 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x6989875b add_wait_queue +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x699ccbf8 _lv1_deconfigure_virtual_uart_irq +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69a624ab blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x69b4208d complete_and_exit +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d057fb key_put +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69d5c88a file_remove_suid +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69e81134 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x69f190aa request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x69f32610 __cputime_msec_factor +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a0591fe blk_unplug +EXPORT_SYMBOL vmlinux 0x6a15b643 write_one_page +EXPORT_SYMBOL vmlinux 0x6a1cb6cf generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x6a2bef14 blk_free_tags +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a61f874 to_tm +EXPORT_SYMBOL vmlinux 0x6a692ee8 generic_getxattr +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a88b953 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x6a95a216 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x6aafc223 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x6ab7d26a scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x6abde37d phy_detach +EXPORT_SYMBOL vmlinux 0x6ac578e8 d_add_ci +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6acc42d5 bdi_destroy +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6adb1b57 matrox_millennium +EXPORT_SYMBOL vmlinux 0x6b0f3b8a blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b387694 _lv1_end_of_interrupt_ext +EXPORT_SYMBOL vmlinux 0x6b4e5a52 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x6b589a6e _lv1_net_add_multicast_address +EXPORT_SYMBOL vmlinux 0x6b5dfe73 __debugger_bpt +EXPORT_SYMBOL vmlinux 0x6b61022a skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x6b62c459 vga_tryget +EXPORT_SYMBOL vmlinux 0x6b6879e4 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0x6b6f0c4b _lv1_create_repository_node +EXPORT_SYMBOL vmlinux 0x6bb21d69 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56c67 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6bc78b72 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6be0e208 macio_dev_get +EXPORT_SYMBOL vmlinux 0x6c07f07d matroxfb_vgaHWrestore +EXPORT_SYMBOL vmlinux 0x6c2b6e57 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x6c58c39e submit_bio +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c6a7a17 neigh_compat_output +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c82e946 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x6c8688f3 __lock_buffer +EXPORT_SYMBOL vmlinux 0x6c8c3bfe fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x6c999cf0 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x6caa9fff of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x6cb31159 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x6cbfe63b boot_tvec_bases +EXPORT_SYMBOL vmlinux 0x6cc06569 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x6cc27422 kobject_add +EXPORT_SYMBOL vmlinux 0x6ce6fc3e backlight_device_register +EXPORT_SYMBOL vmlinux 0x6cf903c9 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x6d0b77fe sysctl_data +EXPORT_SYMBOL vmlinux 0x6d0ed57e clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x6d1743eb _lv1_get_total_execution_time +EXPORT_SYMBOL vmlinux 0x6d205cb8 neigh_table_init +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d34e25d rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0x6d56d386 fail_migrate_page +EXPORT_SYMBOL vmlinux 0x6d625f3b rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6da928f4 _insw_ns +EXPORT_SYMBOL vmlinux 0x6dabf7f4 register_quota_format +EXPORT_SYMBOL vmlinux 0x6dac5ae9 seq_read +EXPORT_SYMBOL vmlinux 0x6de6bf83 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df0d01c gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x6e320600 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x6e37e6c6 cdev_add +EXPORT_SYMBOL vmlinux 0x6e5c7138 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e77e700 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x6e802324 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x6e815d8b __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6ea4be70 del_timer +EXPORT_SYMBOL vmlinux 0x6eb674ba pci_get_device +EXPORT_SYMBOL vmlinux 0x6eba672a bio_alloc +EXPORT_SYMBOL vmlinux 0x6ec7943c pci_bus_type +EXPORT_SYMBOL vmlinux 0x6f3bdef9 kill_block_super +EXPORT_SYMBOL vmlinux 0x6f505684 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x6f597226 vfs_statfs +EXPORT_SYMBOL vmlinux 0x6fa107fd ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x6fa14cd8 __breadahead +EXPORT_SYMBOL vmlinux 0x6fa331ed _lv1_construct_io_irq_outlet +EXPORT_SYMBOL vmlinux 0x6fc9a585 register_nls +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x70099b50 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x700aa6b4 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x700ec832 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x701699b2 _lv1_set_spe_privilege_state_area_1_register +EXPORT_SYMBOL vmlinux 0x704c4365 __cputime_sec_factor +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70f61e2c ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x70f86c70 pmu_queue_request +EXPORT_SYMBOL vmlinux 0x70fb56f4 dma_iommu_ops +EXPORT_SYMBOL vmlinux 0x711d2dbc pci_enable_wake +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x7146200c xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x7154d7a7 mem_section +EXPORT_SYMBOL vmlinux 0x7157ce1c unregister_snap_client +EXPORT_SYMBOL vmlinux 0x717242e7 rtas_data_buf_lock +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71bb6c62 bio_split +EXPORT_SYMBOL vmlinux 0x71dc20d0 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x7242e96d strnchr +EXPORT_SYMBOL vmlinux 0x7246ca64 generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0x72591a5f filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x72880299 vio_unregister_driver +EXPORT_SYMBOL vmlinux 0x729b4a83 _lv1_get_spe_all_interrupt_statuses +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bcfc1b journal_check_used_features +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72c7422a d_lookup +EXPORT_SYMBOL vmlinux 0x72e2b5be seq_release_private +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72ecd3f5 read_cache_page +EXPORT_SYMBOL vmlinux 0x72ed5317 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x731a747a pci_io_base +EXPORT_SYMBOL vmlinux 0x73456de1 backlight_force_update +EXPORT_SYMBOL vmlinux 0x73464edd textsearch_prepare +EXPORT_SYMBOL vmlinux 0x734713d6 kthread_bind +EXPORT_SYMBOL vmlinux 0x7356aecb tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x735c96fa tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x73bdd55e serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x73c52a11 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x73ce6b3a gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x73fcf44f i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x7404846b journal_restart +EXPORT_SYMBOL vmlinux 0x7422d2a5 aio_complete +EXPORT_SYMBOL vmlinux 0x74345624 skb_make_writable +EXPORT_SYMBOL vmlinux 0x74348f33 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x74509f6e sock_kmalloc +EXPORT_SYMBOL vmlinux 0x74524566 unlock_page +EXPORT_SYMBOL vmlinux 0x7459ee0b path_get +EXPORT_SYMBOL vmlinux 0x7484e6e9 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d39036 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x74d61130 __scm_destroy +EXPORT_SYMBOL vmlinux 0x74ddad4b get_sb_nodev +EXPORT_SYMBOL vmlinux 0x74e2a5a3 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x74fe8730 sys_ctrler +EXPORT_SYMBOL vmlinux 0x7508031b ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0x751f710a generic_show_options +EXPORT_SYMBOL vmlinux 0x75507b32 kill_pgrp +EXPORT_SYMBOL vmlinux 0x7554af71 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x756c786e _lv1_connect_interrupt_event_receive_port +EXPORT_SYMBOL vmlinux 0x756e6992 strnicmp +EXPORT_SYMBOL vmlinux 0x75754995 _lv1_storage_check_async_status +EXPORT_SYMBOL vmlinux 0x759a2483 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x75b56d9d pci_restore_state +EXPORT_SYMBOL vmlinux 0x75bc4657 ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0x75bd65e8 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75d9bdce sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x75dcc8ee jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x75e4f5aa pasemi_read_mac_reg +EXPORT_SYMBOL vmlinux 0x75fcc333 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x7603e7dc posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x764016a0 sg_free_table +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x764e2224 _lv1_disconnect_irq_plug_ext +EXPORT_SYMBOL vmlinux 0x7662724e get_phy_id +EXPORT_SYMBOL vmlinux 0x7668f147 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x768f536c simple_statfs +EXPORT_SYMBOL vmlinux 0x769b25d2 _lv1_get_version_info +EXPORT_SYMBOL vmlinux 0x76ac39a5 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x76ba1dac block_invalidatepage +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d2f3eb set_bdi_congested +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76d4798a __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x76d5b613 inode_init_always +EXPORT_SYMBOL vmlinux 0x76ebf5ad bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x76f5099b init_net +EXPORT_SYMBOL vmlinux 0x77144936 _lv1_disconnect_irq_plug +EXPORT_SYMBOL vmlinux 0x7721c83c tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x7766e81e lock_sock_nested +EXPORT_SYMBOL vmlinux 0x77841857 sock_create +EXPORT_SYMBOL vmlinux 0x778de940 inode_change_ok +EXPORT_SYMBOL vmlinux 0x77960aea del_gendisk +EXPORT_SYMBOL vmlinux 0x77b70388 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77e589b5 unload_nls +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x77fd1d64 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x78035716 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x78100b72 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x7818437d dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0x784736fd pci_write_vpd +EXPORT_SYMBOL vmlinux 0x7849226d idr_destroy +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x786a4a4f dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x789a17f7 _lv1_destruct_logical_spe +EXPORT_SYMBOL vmlinux 0x789ea870 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x78a16cd8 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x78bca209 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78f73664 vfs_link +EXPORT_SYMBOL vmlinux 0x7913adac __percpu_counter_add +EXPORT_SYMBOL vmlinux 0x79282709 blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x7933c325 fb_get_mode +EXPORT_SYMBOL vmlinux 0x79437063 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x7961b5c3 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x798374a7 cad_pid +EXPORT_SYMBOL vmlinux 0x798db531 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79d698e7 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x79d6c54a sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x79db05ba find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x79e84f0b get_phy_device +EXPORT_SYMBOL vmlinux 0x7a1b0912 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x7a1c4b9c dev_get_stats +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a54c2b4 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x7a6f6515 dev_unicast_add +EXPORT_SYMBOL vmlinux 0x7a77a72e dqget +EXPORT_SYMBOL vmlinux 0x7aa9e259 _lv1_map_htab +EXPORT_SYMBOL vmlinux 0x7acba3e1 of_get_address +EXPORT_SYMBOL vmlinux 0x7ae73de1 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7afb3a25 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x7b01c14c pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x7b31b1b7 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x7b58c37a pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x7b5f20bb xfrm_state_add +EXPORT_SYMBOL vmlinux 0x7b8f4c40 key_create_or_update +EXPORT_SYMBOL vmlinux 0x7be217fb ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x7bfc71ef inet_ioctl +EXPORT_SYMBOL vmlinux 0x7bff3be7 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x7c1cde82 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x7c29d50e mdiobus_register +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c65b3eb bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x7c6d798c input_inject_event +EXPORT_SYMBOL vmlinux 0x7c77f9cc pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9291d1 csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x7ca341af kernel_thread +EXPORT_SYMBOL vmlinux 0x7cab6235 journal_errno +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cbabc76 napi_get_frags +EXPORT_SYMBOL vmlinux 0x7ce4a153 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x7cf656c7 thaw_process +EXPORT_SYMBOL vmlinux 0x7cf67b52 fetch_dev_dn +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d2fb932 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x7d4d2526 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x7d5ae704 vfs_quota_enable +EXPORT_SYMBOL vmlinux 0x7d91d8bc scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x7dc27b1c blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x7dc97879 rtas_get_error_log_max +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7de5eafe up_read +EXPORT_SYMBOL vmlinux 0x7dfb3626 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x7dfe75f4 pmac_suspend_agp_for_card +EXPORT_SYMBOL vmlinux 0x7e088a76 i2c_use_client +EXPORT_SYMBOL vmlinux 0x7e0e284d udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x7e613127 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0x7e639616 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x7e6d0faf xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x7ea0b232 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x7ea70e94 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x7ec9bfbc strncpy +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f8f8b76 completion_done +EXPORT_SYMBOL vmlinux 0x7faacbe7 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x7fd04d05 skb_store_bits +EXPORT_SYMBOL vmlinux 0x7fd8c736 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x7ffdb2fe sock_no_connect +EXPORT_SYMBOL vmlinux 0x800167c1 cont_write_begin +EXPORT_SYMBOL vmlinux 0x8005db07 vfs_symlink +EXPORT_SYMBOL vmlinux 0x801d66cb __raw_spin_unlock_wait +EXPORT_SYMBOL vmlinux 0x801f5a3f __strncpy_from_user +EXPORT_SYMBOL vmlinux 0x80386b6e slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x80428c80 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x8075639a idr_remove +EXPORT_SYMBOL vmlinux 0x807cac22 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x80b147fd serio_close +EXPORT_SYMBOL vmlinux 0x80dd6bc0 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x80e0809c skb_append +EXPORT_SYMBOL vmlinux 0x80ed149a llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0x810aef7d dev_mc_delete +EXPORT_SYMBOL vmlinux 0x811db067 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x812229b5 netif_device_detach +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x8162f3c7 seq_open_private +EXPORT_SYMBOL vmlinux 0x816a009f macio_register_driver +EXPORT_SYMBOL vmlinux 0x817b81ae pci_save_state +EXPORT_SYMBOL vmlinux 0x81872a0a set_blocksize +EXPORT_SYMBOL vmlinux 0x8189f731 __bforget +EXPORT_SYMBOL vmlinux 0x81a52e44 block_commit_write +EXPORT_SYMBOL vmlinux 0x81b5ee26 simple_lookup +EXPORT_SYMBOL vmlinux 0x81c0a84f rtas_set_indicator +EXPORT_SYMBOL vmlinux 0x81cb1f4b xfrm_register_type +EXPORT_SYMBOL vmlinux 0x81d9f7f2 _lv1_put_iopte +EXPORT_SYMBOL vmlinux 0x81e93130 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x81eeddc9 of_translate_address +EXPORT_SYMBOL vmlinux 0x81f25101 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x81fbb612 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x82478fe6 genphy_read_status +EXPORT_SYMBOL vmlinux 0x824fb062 skb_recycle_check +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x82530509 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x8266c14f seq_open +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x826e5651 matroxfb_g450_connect +EXPORT_SYMBOL vmlinux 0x827ddaa0 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x82a99038 hippi_type_trans +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82b8dec3 pci_disable_device +EXPORT_SYMBOL vmlinux 0x82def66a init_file +EXPORT_SYMBOL vmlinux 0x82e5a238 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x82e9c083 csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x82f25fed register_qdisc +EXPORT_SYMBOL vmlinux 0x82f61234 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x830cb49e i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x8364db97 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x8367f221 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x83709d91 udp_proc_register +EXPORT_SYMBOL vmlinux 0x837221b5 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x838a2e87 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x839178fc dst_destroy +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83c3608b bdi_init +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83e0915e compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x83e4b00f create_mnt_ns +EXPORT_SYMBOL vmlinux 0x83ee36f6 bio_map_user +EXPORT_SYMBOL vmlinux 0x840dc69e wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x841a6584 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x841b8e14 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x8420c1d0 sg_next +EXPORT_SYMBOL vmlinux 0x842ad643 proc_mkdir +EXPORT_SYMBOL vmlinux 0x843e7a67 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x845124e0 ps3_mm_phys_to_lpar +EXPORT_SYMBOL vmlinux 0x845df337 scsi_put_command +EXPORT_SYMBOL vmlinux 0x84979926 make_bad_inode +EXPORT_SYMBOL vmlinux 0x849b2f29 lock_may_read +EXPORT_SYMBOL vmlinux 0x84a1f77c pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x84bbb7ec bdevname +EXPORT_SYMBOL vmlinux 0x84dc0499 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x84fa5597 of_phy_connect_fixed_link +EXPORT_SYMBOL vmlinux 0x85228dd5 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x852f34f9 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x852f9690 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x85358086 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x8540b5be sleep_on +EXPORT_SYMBOL vmlinux 0x854fdde6 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x8597a55d request_key_async +EXPORT_SYMBOL vmlinux 0x8597eb47 plpar_hcall +EXPORT_SYMBOL vmlinux 0x85abc85f strncmp +EXPORT_SYMBOL vmlinux 0x85cfe110 netlink_unicast +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85f84a4e vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x860c9f2a sock_kfree_s +EXPORT_SYMBOL vmlinux 0x861d984a __seq_open_private +EXPORT_SYMBOL vmlinux 0x8631f188 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x864493ac tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x86577890 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x8661689f unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x8685b77d generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86a5f67c xfrm_input +EXPORT_SYMBOL vmlinux 0x86b41086 seq_release +EXPORT_SYMBOL vmlinux 0x86c81a43 down_trylock +EXPORT_SYMBOL vmlinux 0x86cf20af i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x86db1cbb rtas_flash_term_hook +EXPORT_SYMBOL vmlinux 0x86f31255 dm_table_event +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x8701c5bf tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x873da89a inet_stream_ops +EXPORT_SYMBOL vmlinux 0x874b8798 sock_create_lite +EXPORT_SYMBOL vmlinux 0x874e0b9d idr_init +EXPORT_SYMBOL vmlinux 0x874e7f93 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x87619be2 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x87751770 vfs_read +EXPORT_SYMBOL vmlinux 0x87800854 register_snap_client +EXPORT_SYMBOL vmlinux 0x8783aa53 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x88017ec1 matroxfb_DAC_out +EXPORT_SYMBOL vmlinux 0x880da1b1 _lv1_get_logical_partition_id +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x889bf2ac serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x88a4acb5 inet_getname +EXPORT_SYMBOL vmlinux 0x88d53c57 vm_map_ram +EXPORT_SYMBOL vmlinux 0x891023a7 pci_match_id +EXPORT_SYMBOL vmlinux 0x893828fe nla_append +EXPORT_SYMBOL vmlinux 0x895577b0 numa_cpu_lookup_table +EXPORT_SYMBOL vmlinux 0x895c7449 lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x8969ea8b follow_pfn +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x89821a65 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x89848616 get_user_pages +EXPORT_SYMBOL vmlinux 0x89aced8c blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x89b28daf scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x89c5a8be smu_get_sdb_partition +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x8a0baba1 netif_napi_del +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a3cbb44 skb_unlink +EXPORT_SYMBOL vmlinux 0x8a4bf7ae __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x8a57f961 macio_dev_put +EXPORT_SYMBOL vmlinux 0x8a5f7522 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8a9cef2a _lv1_allocate_device_dma_region +EXPORT_SYMBOL vmlinux 0x8aa38903 scsi_init_io +EXPORT_SYMBOL vmlinux 0x8ab09cbb generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8acedff6 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x8b082f9e ps2_handle_response +EXPORT_SYMBOL vmlinux 0x8b14bbca stop_tty +EXPORT_SYMBOL vmlinux 0x8b163157 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x8b268196 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x8b46037c registered_fb +EXPORT_SYMBOL vmlinux 0x8b5262c1 tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x8b7e1e30 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x8b7fe311 kmemdup +EXPORT_SYMBOL vmlinux 0x8b828475 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x8b867fdd simple_fill_super +EXPORT_SYMBOL vmlinux 0x8b992772 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x8bc7c149 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x8bcc3a3a _spin_lock_bh +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bfdc65d notify_change +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c286fab dev_change_flags +EXPORT_SYMBOL vmlinux 0x8c2d3377 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x8c47e05c dev_addr_add +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c649012 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x8c82f859 netif_napi_add +EXPORT_SYMBOL vmlinux 0x8c8c7d8e eth_header_cache +EXPORT_SYMBOL vmlinux 0x8c8d79c0 _lv1_gpu_context_iomap +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8d1d7be1 __kfree_skb +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d67ce60 sk_filter +EXPORT_SYMBOL vmlinux 0x8d6906d4 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x8d69cf65 __bread +EXPORT_SYMBOL vmlinux 0x8d6ef862 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x8d944cbb copy_in_user +EXPORT_SYMBOL vmlinux 0x8dc46dce skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x8dcb8213 ida_remove +EXPORT_SYMBOL vmlinux 0x8de2fbc5 _lv1_get_virtual_uart_param +EXPORT_SYMBOL vmlinux 0x8de40005 inode_setattr +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e339526 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e404b7b cdrom_open +EXPORT_SYMBOL vmlinux 0x8e6f65c4 tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0x8e735b43 unregister_key_type +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8eea1bc9 smu_poll +EXPORT_SYMBOL vmlinux 0x8ef82c80 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x8efb2e1a skb_tx_hash +EXPORT_SYMBOL vmlinux 0x8f04b9c5 inode_permission +EXPORT_SYMBOL vmlinux 0x8f4717bb skb_queue_head +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f8c7c4d machine_id +EXPORT_SYMBOL vmlinux 0x8fb9f45d single_release +EXPORT_SYMBOL vmlinux 0x8fd8b7bc _write_lock_irq +EXPORT_SYMBOL vmlinux 0x8ff41c63 tc_classify_compat +EXPORT_SYMBOL vmlinux 0x8ff4fa52 generic_fillattr +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x900c9728 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x900dc959 bdi_register +EXPORT_SYMBOL vmlinux 0x9029f6e6 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x90423856 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x9062723f dst_discard +EXPORT_SYMBOL vmlinux 0x906dea01 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x9077906b gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x907c2760 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x907d6f25 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x908a367b skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x90bbd6da nobh_write_end +EXPORT_SYMBOL vmlinux 0x90e56205 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x911e9a20 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x91201cef _lv1_enable_logical_spe +EXPORT_SYMBOL vmlinux 0x912557ce rtas_busy_delay +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x915bd4e6 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x915e1208 tb_ticks_per_usec +EXPORT_SYMBOL vmlinux 0x9168c033 rtas_get_sensor +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x9177d7bc have_submounts +EXPORT_SYMBOL vmlinux 0x91948e04 tty_register_device +EXPORT_SYMBOL vmlinux 0x919d1163 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x919d5df6 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x91c4feca _lv1_unmap_htab +EXPORT_SYMBOL vmlinux 0x91d1dfe0 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x91d46680 register_filesystem +EXPORT_SYMBOL vmlinux 0x91e5fd89 pmac_resume_agp_for_card +EXPORT_SYMBOL vmlinux 0x91edc109 dev_get_flags +EXPORT_SYMBOL vmlinux 0x91fc807a lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0x91fdd1fb rtas +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x9228de30 pci_iounmap +EXPORT_SYMBOL vmlinux 0x92392cd9 iov_shorten +EXPORT_SYMBOL vmlinux 0x92562e99 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x92593f38 locks_init_lock +EXPORT_SYMBOL vmlinux 0x925bed04 ps2_end_command +EXPORT_SYMBOL vmlinux 0x926c19a9 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0x92744daf netdev_features_change +EXPORT_SYMBOL vmlinux 0x927aa67b open_by_devnum +EXPORT_SYMBOL vmlinux 0x927f53f0 dquot_claim_space +EXPORT_SYMBOL vmlinux 0x9296c93d udp_table +EXPORT_SYMBOL vmlinux 0x92ea4ae4 crc32_le +EXPORT_SYMBOL vmlinux 0x9302c972 set_disk_ro +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x9306cb74 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x930d01d6 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x93149222 input_register_handler +EXPORT_SYMBOL vmlinux 0x931d2521 mempool_resize +EXPORT_SYMBOL vmlinux 0x932b50bf journal_set_features +EXPORT_SYMBOL vmlinux 0x93507f1c _lv1_gpu_memory_allocate +EXPORT_SYMBOL vmlinux 0x9377df1b dcache_dir_close +EXPORT_SYMBOL vmlinux 0x939a40c0 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x939ee623 ps3_sb_event_receive_port_destroy +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x942d3744 inet_addr_type +EXPORT_SYMBOL vmlinux 0x9456146b inode_set_bytes +EXPORT_SYMBOL vmlinux 0x94647a7d unregister_8022_client +EXPORT_SYMBOL vmlinux 0x9468f76b ip_setsockopt +EXPORT_SYMBOL vmlinux 0x946f92cb tty_set_operations +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x949361ed scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x949dfe3d alloc_file +EXPORT_SYMBOL vmlinux 0x94c382aa kick_iocb +EXPORT_SYMBOL vmlinux 0x94cd2db0 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x94d4a4d2 security_inode_permission +EXPORT_SYMBOL vmlinux 0x94e20a6d netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x94e98634 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x94ed53bb eth_mac_addr +EXPORT_SYMBOL vmlinux 0x94f34fc5 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x95037acd vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0x95063bb2 idr_remove_all +EXPORT_SYMBOL vmlinux 0x9514151a _mcount +EXPORT_SYMBOL vmlinux 0x952464ea i2c_verify_client +EXPORT_SYMBOL vmlinux 0x9524b0ae _outsb +EXPORT_SYMBOL vmlinux 0x952e843b machine_is_compatible +EXPORT_SYMBOL vmlinux 0x95391319 d_delete +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x9551cc53 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x9566f3a7 journal_stop +EXPORT_SYMBOL vmlinux 0x956c490f sg_last +EXPORT_SYMBOL vmlinux 0x95a201d1 follow_down +EXPORT_SYMBOL vmlinux 0x95cba089 vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x95ceb864 key_update +EXPORT_SYMBOL vmlinux 0x95f1c79b brioctl_set +EXPORT_SYMBOL vmlinux 0x95ff2e66 of_get_pci_address +EXPORT_SYMBOL vmlinux 0x9600abfd ps3_sb_event_receive_port_setup +EXPORT_SYMBOL vmlinux 0x9607dfa6 fb_class +EXPORT_SYMBOL vmlinux 0x961a6ff3 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x96490c4f ide_dma_off_quietly +EXPORT_SYMBOL vmlinux 0x96626da8 devm_ioremap +EXPORT_SYMBOL vmlinux 0x966ca5dc shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x967566a6 unregister_console +EXPORT_SYMBOL vmlinux 0x967ae39b journal_create +EXPORT_SYMBOL vmlinux 0x9690f9f7 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x96bf6a3a scsi_execute_req +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96d2c874 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x96d56018 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x96f12597 alloc_trdev +EXPORT_SYMBOL vmlinux 0x97141d6b blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x9748927f _outsw_ns +EXPORT_SYMBOL vmlinux 0x974a0275 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x975a212b simple_empty +EXPORT_SYMBOL vmlinux 0x976e014f _lv1_map_device_mmio_region +EXPORT_SYMBOL vmlinux 0x977fb5d0 put_tty_driver +EXPORT_SYMBOL vmlinux 0x97892183 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x97a9abd9 redraw_screen +EXPORT_SYMBOL vmlinux 0x97bd1902 __put_cred +EXPORT_SYMBOL vmlinux 0x97fa638e posix_acl_permission +EXPORT_SYMBOL vmlinux 0x98177648 _lv1_set_lpm_interval +EXPORT_SYMBOL vmlinux 0x9825c74a bioset_free +EXPORT_SYMBOL vmlinux 0x98427cc3 invalidate_partition +EXPORT_SYMBOL vmlinux 0x984b2402 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x98559503 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x987e353d elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x9892d0c9 do_truncate +EXPORT_SYMBOL vmlinux 0x989d4082 _write_trylock +EXPORT_SYMBOL vmlinux 0x98b8246d dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x98e1b2bd ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x991b7b4d inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x9932e221 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x9950d670 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c24cfe _lv1_free_device_dma_region +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99cdf76d kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x99dd1451 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x9a05155c pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x9a0f2e68 udp_prot +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a1ffb92 _lv1_clear_spe_interrupt_status +EXPORT_SYMBOL vmlinux 0x9a2450d9 dev_addr_del +EXPORT_SYMBOL vmlinux 0x9a288484 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x9a3a76a2 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x9a57e956 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x9a6c2531 pasemi_dma_init +EXPORT_SYMBOL vmlinux 0x9a913fc2 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x9aabc564 crc16 +EXPORT_SYMBOL vmlinux 0x9aec04a8 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x9af05380 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x9af8d15d block_prepare_write +EXPORT_SYMBOL vmlinux 0x9afd609a g450_mnp2f +EXPORT_SYMBOL vmlinux 0x9b03023d input_register_device +EXPORT_SYMBOL vmlinux 0x9b32daab d_prune_aliases +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b4b3e43 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0x9b5fb132 should_remove_suid +EXPORT_SYMBOL vmlinux 0x9b88a9e8 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x9b8fd4b6 put_page +EXPORT_SYMBOL vmlinux 0x9ba6af65 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bc10313 nonseekable_open +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c0ea3cd memscan +EXPORT_SYMBOL vmlinux 0x9c3a5f05 journal_get_create_access +EXPORT_SYMBOL vmlinux 0x9c6feb50 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x9c71e738 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0x9ca66ee4 set_create_files_as +EXPORT_SYMBOL vmlinux 0x9ca95a0e sort +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cba803a unregister_quota_format +EXPORT_SYMBOL vmlinux 0x9cd876fd journal_start_commit +EXPORT_SYMBOL vmlinux 0x9ce103a0 down_write_trylock +EXPORT_SYMBOL vmlinux 0x9cf566e1 may_umount_tree +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d0c3f33 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x9d10c84a soft_cursor +EXPORT_SYMBOL vmlinux 0x9d14983a ppc_enable_pmcs +EXPORT_SYMBOL vmlinux 0x9d15f41d clocksource_unregister +EXPORT_SYMBOL vmlinux 0x9d1f47a9 slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x9d293cc4 security_path_unlink +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d3f7592 posix_test_lock +EXPORT_SYMBOL vmlinux 0x9d5316a0 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x9d6e13f8 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x9d7e41ef cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x9d8eb7d6 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x9d916f19 unlock_buffer +EXPORT_SYMBOL vmlinux 0x9d921040 ide_do_reset +EXPORT_SYMBOL vmlinux 0x9d9a9b61 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x9da185e2 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x9db21624 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x9dd1fa1e dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x9e0aa8d1 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x9e288ac6 inet_shutdown +EXPORT_SYMBOL vmlinux 0x9e4b1930 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x9e515d40 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x9e6782b5 vfs_mknod +EXPORT_SYMBOL vmlinux 0x9e7e9203 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x9e97375d rtas_busy_delay_time +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea29f3c init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x9eb21006 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9ed8a936 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x9edbb189 do_splice_to +EXPORT_SYMBOL vmlinux 0x9edbecae snprintf +EXPORT_SYMBOL vmlinux 0x9ee78669 _lv1_write_virtual_uart +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f01a4c8 d_alloc_root +EXPORT_SYMBOL vmlinux 0x9f0a589c tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f192873 pipe_to_file +EXPORT_SYMBOL vmlinux 0x9f20b6bd __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f331825 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x9f6b21ae scsi_prep_return +EXPORT_SYMBOL vmlinux 0x9f7ba879 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x9f8a7a67 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x9f946bff bio_unmap_user +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9f9f2b0b __sg_free_table +EXPORT_SYMBOL vmlinux 0x9fb030f4 del_timer_sync +EXPORT_SYMBOL vmlinux 0x9fb472c5 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x9fcae010 of_device_alloc +EXPORT_SYMBOL vmlinux 0x9fe6fa56 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x9fe82d4a tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x9ff62514 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0xa0105950 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0xa02c5798 sock_no_getname +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa0527337 dquot_alloc +EXPORT_SYMBOL vmlinux 0xa053dcbf elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa090b6f6 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xa0921e76 elevator_init +EXPORT_SYMBOL vmlinux 0xa094c032 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b16edd skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d3d560 ksize +EXPORT_SYMBOL vmlinux 0xa0db4093 lease_get_mtime +EXPORT_SYMBOL vmlinux 0xa0e9a071 prepare_creds +EXPORT_SYMBOL vmlinux 0xa0ec51fa generic_readlink +EXPORT_SYMBOL vmlinux 0xa0f5d90f tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa106dbcc scsi_add_device +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa1192435 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa19cfb62 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1ba4b95 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1cea0b8 proc_dointvec +EXPORT_SYMBOL vmlinux 0xa20a0b50 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa2127cdc pasemi_dma_alloc_flag +EXPORT_SYMBOL vmlinux 0xa22dccb1 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0xa2324c70 netlink_dump_start +EXPORT_SYMBOL vmlinux 0xa254728e scsi_ioctl +EXPORT_SYMBOL vmlinux 0xa25a648a remove_proc_entry +EXPORT_SYMBOL vmlinux 0xa2659a05 journal_destroy +EXPORT_SYMBOL vmlinux 0xa27bbb80 phy_driver_register +EXPORT_SYMBOL vmlinux 0xa28e76e6 schedule_work +EXPORT_SYMBOL vmlinux 0xa290bd3b jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b32427 __pagevec_release +EXPORT_SYMBOL vmlinux 0xa2b4d307 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xa2b65b36 napi_complete +EXPORT_SYMBOL vmlinux 0xa2bbed37 crash_shutdown_register +EXPORT_SYMBOL vmlinux 0xa2d4c119 complete_all +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa33f7c7c nla_strlcpy +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35b7c6d pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa38dcfec iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0xa39b4cf2 udelay +EXPORT_SYMBOL vmlinux 0xa3bb3d27 tty_port_hangup +EXPORT_SYMBOL vmlinux 0xa3f75088 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xa3fcfe0d cdrom_media_changed +EXPORT_SYMBOL vmlinux 0xa4003e63 set_security_override +EXPORT_SYMBOL vmlinux 0xa40984a2 ilookup5 +EXPORT_SYMBOL vmlinux 0xa41c9caa mark_info_dirty +EXPORT_SYMBOL vmlinux 0xa44d9604 pci_select_bars +EXPORT_SYMBOL vmlinux 0xa44e0de8 scsi_free_command +EXPORT_SYMBOL vmlinux 0xa46e070d i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0xa480c04b _lv1_gpu_context_attribute +EXPORT_SYMBOL vmlinux 0xa4922b4e nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0xa494fcb0 scsi_host_get +EXPORT_SYMBOL vmlinux 0xa49a490a matroxfb_vgaHWinit +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4bdd447 __cputime_clockt_factor +EXPORT_SYMBOL vmlinux 0xa4d0c147 blk_remove_plug +EXPORT_SYMBOL vmlinux 0xa4f59fa9 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0xa537c283 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xa55fda1f sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xa576c263 generic_find_next_le_bit +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa588af05 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0xa5893e2f pci_set_master +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5b00659 ppc_proc_freq +EXPORT_SYMBOL vmlinux 0xa61665c7 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xa616e0db skb_seq_read +EXPORT_SYMBOL vmlinux 0xa62c42f9 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0xa62ccd6c kern_path +EXPORT_SYMBOL vmlinux 0xa63b9a58 fb_set_var +EXPORT_SYMBOL vmlinux 0xa65972b8 _memcpy_toio +EXPORT_SYMBOL vmlinux 0xa675120d journal_revoke +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6856361 of_get_gpio_flags +EXPORT_SYMBOL vmlinux 0xa68d9cd3 user_revoke +EXPORT_SYMBOL vmlinux 0xa6a07533 sync_blockdev +EXPORT_SYMBOL vmlinux 0xa6c2cc3e kobject_del +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6ee08f9 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0xa6f7f9a7 journal_abort +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa738ca45 kernel_bind +EXPORT_SYMBOL vmlinux 0xa74a0ac1 security_path_truncate +EXPORT_SYMBOL vmlinux 0xa7582110 blk_get_request +EXPORT_SYMBOL vmlinux 0xa769e8e2 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xa770e3b3 alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0xa7a749c5 unlock_super +EXPORT_SYMBOL vmlinux 0xa7d68fad jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0xa7e58ba4 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0xa8162a03 tty_unregister_device +EXPORT_SYMBOL vmlinux 0xa82d5143 single_open +EXPORT_SYMBOL vmlinux 0xa837f29a noop_qdisc +EXPORT_SYMBOL vmlinux 0xa84aa022 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xa852d4a0 skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xa8593d09 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0xa877cb31 unregister_con_driver +EXPORT_SYMBOL vmlinux 0xa886a958 krealloc +EXPORT_SYMBOL vmlinux 0xa888f809 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0xa891ed8d fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0xa89c3cf5 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0xa8a3a38b swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8c7b9ed request_key +EXPORT_SYMBOL vmlinux 0xa8ced546 _lv1_net_set_interrupt_status_indicator +EXPORT_SYMBOL vmlinux 0xa8d2dbbf phy_register_fixup +EXPORT_SYMBOL vmlinux 0xa8d5143d vio_register_driver +EXPORT_SYMBOL vmlinux 0xa8e009ae jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xa8eb079e vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa91c77b6 _lv1_end_of_interrupt +EXPORT_SYMBOL vmlinux 0xa922f240 _read_lock_irq +EXPORT_SYMBOL vmlinux 0xa940d8e2 simple_set_mnt +EXPORT_SYMBOL vmlinux 0xa970651f iunique +EXPORT_SYMBOL vmlinux 0xa9756842 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0xa978912b km_state_notify +EXPORT_SYMBOL vmlinux 0xa98284be inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0xa9b24c72 sk_stream_error +EXPORT_SYMBOL vmlinux 0xa9d4d264 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0xa9e7c84d unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xaa0c7c1e init_special_inode +EXPORT_SYMBOL vmlinux 0xaa0edca8 pasemi_dma_alloc_fun +EXPORT_SYMBOL vmlinux 0xaa273f42 search_binary_handler +EXPORT_SYMBOL vmlinux 0xaa78de72 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0xaac04a9f qdisc_destroy +EXPORT_SYMBOL vmlinux 0xaae7d603 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab11aa51 skb_queue_purge +EXPORT_SYMBOL vmlinux 0xab41394c call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0xab66f611 _lv1_set_lpm_trigger_control +EXPORT_SYMBOL vmlinux 0xab686bbf scsi_finish_command +EXPORT_SYMBOL vmlinux 0xaba9ff34 allocate_resource +EXPORT_SYMBOL vmlinux 0xabb6cac0 pci_set_mwi +EXPORT_SYMBOL vmlinux 0xabbc5a0b genphy_update_link +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd4c356 km_new_mapping +EXPORT_SYMBOL vmlinux 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL vmlinux 0xabf1f94b splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xabfa1cb6 of_get_property +EXPORT_SYMBOL vmlinux 0xac07d40d neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac13275c start_tty +EXPORT_SYMBOL vmlinux 0xac1d90a9 sk_dst_check +EXPORT_SYMBOL vmlinux 0xac31bc03 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0xac34f518 d_instantiate +EXPORT_SYMBOL vmlinux 0xac383451 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xac434083 sock_init_data +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac85dc25 dst_release +EXPORT_SYMBOL vmlinux 0xacac9d18 input_register_handle +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacd14ab8 _lv1_construct_logical_spe +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacfb2bcc xfrm_user_policy +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad3056e4 dqput +EXPORT_SYMBOL vmlinux 0xad4353f5 key_negate_and_link +EXPORT_SYMBOL vmlinux 0xad4d0036 set_page_dirty +EXPORT_SYMBOL vmlinux 0xad4ebe22 _write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xad5b6a39 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0xad8b9ac7 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0xad9be586 __lookup_one_len +EXPORT_SYMBOL vmlinux 0xad9c7715 bdev_read_only +EXPORT_SYMBOL vmlinux 0xad9d2f05 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xada0e781 balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0xada1eff3 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadeffe25 _lv1_gpu_context_intr +EXPORT_SYMBOL vmlinux 0xadf1a408 blk_rq_init +EXPORT_SYMBOL vmlinux 0xae3944ac cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0xae51dd0e invalidate_bdev +EXPORT_SYMBOL vmlinux 0xae596c13 mpage_readpages +EXPORT_SYMBOL vmlinux 0xaeb1dd7e file_fsync +EXPORT_SYMBOL vmlinux 0xaeb56ede scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xaec6b869 blkdev_get +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaed359c5 bd_claim +EXPORT_SYMBOL vmlinux 0xaed54f7f proc_create_data +EXPORT_SYMBOL vmlinux 0xaee33b21 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0xaf0d2c1a elevator_exit +EXPORT_SYMBOL vmlinux 0xaf30f099 __inet6_hash +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf3f2adf pid_task +EXPORT_SYMBOL vmlinux 0xaf438d65 _lv1_get_repository_node_value +EXPORT_SYMBOL vmlinux 0xaf86c5e0 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0xafa7bd33 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xafa7d80a dget_locked +EXPORT_SYMBOL vmlinux 0xafaf28cc blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xafd82cfe fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xafe82e10 strcspn +EXPORT_SYMBOL vmlinux 0xafef8fa9 register_memory_notifier +EXPORT_SYMBOL vmlinux 0xaffb3142 block_sync_page +EXPORT_SYMBOL vmlinux 0xb00ef5ac proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xb019c434 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xb02770ce dev_set_mtu +EXPORT_SYMBOL vmlinux 0xb0484be2 slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0xb04a4ca9 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xb0517dfa fb_blank +EXPORT_SYMBOL vmlinux 0xb055d8da posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xb056dbc4 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xb0a5a076 bio_phys_segments +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0f40946 sg_miter_start +EXPORT_SYMBOL vmlinux 0xb11fa1ce strlcat +EXPORT_SYMBOL vmlinux 0xb150267d update_region +EXPORT_SYMBOL vmlinux 0xb15bd8fa tb_ticks_per_sec +EXPORT_SYMBOL vmlinux 0xb170eb51 mpage_writepages +EXPORT_SYMBOL vmlinux 0xb17eda9f tty_shutdown +EXPORT_SYMBOL vmlinux 0xb186d58f blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0xb18e02c3 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb18f3f06 ide_xfer_verbose +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1aa53b1 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0xb1aa82cf bio_put +EXPORT_SYMBOL vmlinux 0xb1b13885 sock_no_accept +EXPORT_SYMBOL vmlinux 0xb1b859b6 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1f975aa unlock_kernel +EXPORT_SYMBOL vmlinux 0xb213a4ca otg_get_transceiver +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb23218c1 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb26b2704 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xb2b527b6 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xb2ba62b5 __wait_on_bit +EXPORT_SYMBOL vmlinux 0xb2c969cb gen_pool_create +EXPORT_SYMBOL vmlinux 0xb2e356fe arp_broken_ops +EXPORT_SYMBOL vmlinux 0xb2e52aed dentry_open +EXPORT_SYMBOL vmlinux 0xb2f4d576 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xb2f99507 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xb31a25f6 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xb320fe41 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0xb33aaed6 xfrm_register_km +EXPORT_SYMBOL vmlinux 0xb35ccaa4 bio_map_kern +EXPORT_SYMBOL vmlinux 0xb363042a register_8022_client +EXPORT_SYMBOL vmlinux 0xb3731e66 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xb3994c7a per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3ac645f sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xb3bf73df cpu_active_mask +EXPORT_SYMBOL vmlinux 0xb3e521aa cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0xb3f85fc6 of_parse_phandle +EXPORT_SYMBOL vmlinux 0xb3fc746a dquot_release +EXPORT_SYMBOL vmlinux 0xb3ff1f69 free_pages_exact +EXPORT_SYMBOL vmlinux 0xb3ff5532 tty_name +EXPORT_SYMBOL vmlinux 0xb40e0895 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0xb414db12 blk_make_request +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb42ff00c giveup_altivec +EXPORT_SYMBOL vmlinux 0xb4410413 prepare_binprm +EXPORT_SYMBOL vmlinux 0xb45717f1 pci_assign_resource +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb471e45d force_sig +EXPORT_SYMBOL vmlinux 0xb4762523 seq_putc +EXPORT_SYMBOL vmlinux 0xb47af357 __serio_register_port +EXPORT_SYMBOL vmlinux 0xb48d95d0 skb_copy +EXPORT_SYMBOL vmlinux 0xb4b529ce i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0xb4b89049 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xb4c0d25f fb_set_cmap +EXPORT_SYMBOL vmlinux 0xb4e0ee90 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xb4f2b1b5 __blk_end_request +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb528973b clip_tbl_hook +EXPORT_SYMBOL vmlinux 0xb5334d57 bio_kmalloc +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb55f3e44 simple_write_begin +EXPORT_SYMBOL vmlinux 0xb561ac4c mdio_bus_type +EXPORT_SYMBOL vmlinux 0xb56bfd9e smu_spinwait_cmd +EXPORT_SYMBOL vmlinux 0xb59036ad security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5b8c662 vfs_mkdir +EXPORT_SYMBOL vmlinux 0xb5c47e22 sk_run_filter +EXPORT_SYMBOL vmlinux 0xb5d5abfb kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0xb5e31e3a cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0xb63416e5 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xb6553780 mnt_pin +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb685599c pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b1d982 __page_symlink +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6f51d2f send_sig_info +EXPORT_SYMBOL vmlinux 0xb723a842 seq_path +EXPORT_SYMBOL vmlinux 0xb742d5ff __netif_schedule +EXPORT_SYMBOL vmlinux 0xb753d710 keyring_clear +EXPORT_SYMBOL vmlinux 0xb75c92e5 eth_header +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7eed014 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xb7efa1da dquot_drop +EXPORT_SYMBOL vmlinux 0xb7f33f7e mod_timer_pending +EXPORT_SYMBOL vmlinux 0xb7f48679 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0xb7fc3468 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0xb7fdf1c3 lookup_hash +EXPORT_SYMBOL vmlinux 0xb813ce5a timecompare_transform +EXPORT_SYMBOL vmlinux 0xb847b6df destroy_EII_client +EXPORT_SYMBOL vmlinux 0xb84de737 elv_rb_del +EXPORT_SYMBOL vmlinux 0xb8566a3e ide_proc_unregister_driver +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb87bdd72 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xb8827318 idr_pre_get +EXPORT_SYMBOL vmlinux 0xb88b2a4d phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8a30c7e _lv1_add_lpm_event_bookmark +EXPORT_SYMBOL vmlinux 0xb8b0d48a pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0xb908e918 of_parse_phandles_with_args +EXPORT_SYMBOL vmlinux 0xb9168589 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0xb91eb7f1 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0xb949a023 pci_read_vpd +EXPORT_SYMBOL vmlinux 0xb95b1926 alloc_tty_driver +EXPORT_SYMBOL vmlinux 0xb97382d7 elv_abort_queue +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9f862ab get_sb_ns +EXPORT_SYMBOL vmlinux 0xba013461 node_states +EXPORT_SYMBOL vmlinux 0xba11a039 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0xba122a2c smu_done_complete +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba57b253 ps3_dma_region_create +EXPORT_SYMBOL vmlinux 0xba8b79f9 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xbaa2782a kstrndup +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbad42a24 sock_no_poll +EXPORT_SYMBOL vmlinux 0xbaf9733a blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1fad6a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xbb53c6ab tcf_hash_check +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb5dd0c3 input_allocate_device +EXPORT_SYMBOL vmlinux 0xbb6ee88f sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xbb78f481 __ide_dma_bad_drive +EXPORT_SYMBOL vmlinux 0xbb7a91dc _write_unlock_bh +EXPORT_SYMBOL vmlinux 0xbb7fa01b idr_get_new +EXPORT_SYMBOL vmlinux 0xbb951396 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbbc7a885 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xbbd110ef compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xbbd3ac0b ip_route_output_key +EXPORT_SYMBOL vmlinux 0xbbed2c1d set_user_nice +EXPORT_SYMBOL vmlinux 0xbbf02a5f skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xbbf7c876 of_find_node_by_type +EXPORT_SYMBOL vmlinux 0xbc0a9633 arp_find +EXPORT_SYMBOL vmlinux 0xbc316de4 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0xbc36388b rtnl_create_link +EXPORT_SYMBOL vmlinux 0xbc419cb6 of_register_i2c_devices +EXPORT_SYMBOL vmlinux 0xbc771b0b truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0xbc8395c4 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0xbca244b1 setup_new_exec +EXPORT_SYMBOL vmlinux 0xbca4d908 neigh_event_ns +EXPORT_SYMBOL vmlinux 0xbca6b546 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xbcbd13f3 of_register_driver +EXPORT_SYMBOL vmlinux 0xbcda14bd dcache_readdir +EXPORT_SYMBOL vmlinux 0xbd328e7a dmam_pool_create +EXPORT_SYMBOL vmlinux 0xbd7fff43 tty_port_init +EXPORT_SYMBOL vmlinux 0xbd8cfa15 pasemi_write_mac_reg +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe51d752 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0xbe8a1485 mempool_create +EXPORT_SYMBOL vmlinux 0xbead8aaf __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xbeb1250a pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0xbec0b002 flush_dcache_page +EXPORT_SYMBOL vmlinux 0xbeccda37 ide_dump_status +EXPORT_SYMBOL vmlinux 0xbed1e352 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0xbee18b75 kmem_cache_size +EXPORT_SYMBOL vmlinux 0xbeee0319 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0xbeeec54d scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf1ae01b tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0xbf20c474 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xbf3d5020 pcibus_to_node +EXPORT_SYMBOL vmlinux 0xbf60975c pmac_register_agp_pm +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf82ea61 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfabfe59 __debugger_iabr_match +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfd82c57 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0xbff8182c plpar_hcall_norets +EXPORT_SYMBOL vmlinux 0xc00dd4d7 page_follow_link_light +EXPORT_SYMBOL vmlinux 0xc03bf1db clear_user_page +EXPORT_SYMBOL vmlinux 0xc03c3e25 dm_register_target +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc06f79d3 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0xc089609b default_file_splice_read +EXPORT_SYMBOL vmlinux 0xc09651d9 crc32_be +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0a675b1 of_device_unregister +EXPORT_SYMBOL vmlinux 0xc0b5dbe1 key_link +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0f32e56 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xc10dbf2a simple_sync_file +EXPORT_SYMBOL vmlinux 0xc1267ec0 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xc127bdf2 security_path_mknod +EXPORT_SYMBOL vmlinux 0xc13511d7 cpumask_next_and +EXPORT_SYMBOL vmlinux 0xc139c3fc proc_net_netfilter +EXPORT_SYMBOL vmlinux 0xc1436fbb create_empty_buffers +EXPORT_SYMBOL vmlinux 0xc15e073c generic_find_next_zero_le_bit +EXPORT_SYMBOL vmlinux 0xc16cc0eb bmap +EXPORT_SYMBOL vmlinux 0xc1a49180 bh_submit_read +EXPORT_SYMBOL vmlinux 0xc1b54035 simple_readpage +EXPORT_SYMBOL vmlinux 0xc1b96188 inode_add_bytes +EXPORT_SYMBOL vmlinux 0xc1ba49a9 dev_base_lock +EXPORT_SYMBOL vmlinux 0xc1dfdbf6 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xc1e0c9a9 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0xc1ee764e journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xc225b953 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0xc23d6eac mutex_lock +EXPORT_SYMBOL vmlinux 0xc2487b27 path_put +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc2573773 i2c_clients_command +EXPORT_SYMBOL vmlinux 0xc2880e1e pcie_port_service_register +EXPORT_SYMBOL vmlinux 0xc2884f15 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xc294dc07 sk_free +EXPORT_SYMBOL vmlinux 0xc29daa21 phy_attach_direct +EXPORT_SYMBOL vmlinux 0xc2abee6d blk_insert_request +EXPORT_SYMBOL vmlinux 0xc2e553ec ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2fb9ee1 _lv1_shutdown_logical_partition +EXPORT_SYMBOL vmlinux 0xc30a626f sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xc314c3d2 __cputime_jiffies_factor +EXPORT_SYMBOL vmlinux 0xc31ac01c dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0xc33f6f4c on_each_cpu +EXPORT_SYMBOL vmlinux 0xc347c322 user_path_at +EXPORT_SYMBOL vmlinux 0xc37a13a4 d_genocide +EXPORT_SYMBOL vmlinux 0xc37d7bae pci_map_rom +EXPORT_SYMBOL vmlinux 0xc39c47af __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xc3a463ff fb_set_suspend +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc3f7fa6a llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0xc4075f02 input_event +EXPORT_SYMBOL vmlinux 0xc41f1696 _lv1_configure_virtual_uart_irq +EXPORT_SYMBOL vmlinux 0xc478080e end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0xc48f6818 dev_mc_add +EXPORT_SYMBOL vmlinux 0xc491ab33 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc49d62a4 kernel_read +EXPORT_SYMBOL vmlinux 0xc4a5e45c pci_enable_msix +EXPORT_SYMBOL vmlinux 0xc4c3e6c8 simple_write_end +EXPORT_SYMBOL vmlinux 0xc4c91d06 neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0xc5089620 _lv1_stop_ppe_periodic_tracer +EXPORT_SYMBOL vmlinux 0xc51ee8c3 tcf_hash_create +EXPORT_SYMBOL vmlinux 0xc527bf17 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0xc52918ce seq_bitmap +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc54b52dd atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc5536839 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0xc57279f4 pci_disable_msi +EXPORT_SYMBOL vmlinux 0xc5adcad4 __bio_clone +EXPORT_SYMBOL vmlinux 0xc5ae4d29 blk_start_request +EXPORT_SYMBOL vmlinux 0xc5d2729e matroxfb_read_pins +EXPORT_SYMBOL vmlinux 0xc5d83804 pskb_expand_head +EXPORT_SYMBOL vmlinux 0xc5e36465 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0xc60d8d45 lro_receive_skb +EXPORT_SYMBOL vmlinux 0xc62a8e5e __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0xc65ed024 tty_kref_put +EXPORT_SYMBOL vmlinux 0xc663b075 __ioremap +EXPORT_SYMBOL vmlinux 0xc693633c macio_request_resource +EXPORT_SYMBOL vmlinux 0xc6b6d78c wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0xc6de1e3e dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xc6f44cb8 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0xc6fc6390 nf_log_unregister +EXPORT_SYMBOL vmlinux 0xc71042ae jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc72d4a93 journal_load +EXPORT_SYMBOL vmlinux 0xc73c6c97 dev_close +EXPORT_SYMBOL vmlinux 0xc740c64a memchr +EXPORT_SYMBOL vmlinux 0xc75071bb module_layout +EXPORT_SYMBOL vmlinux 0xc754e315 vfs_quota_off +EXPORT_SYMBOL vmlinux 0xc75f7815 key_unlink +EXPORT_SYMBOL vmlinux 0xc7888815 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a24d76 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7ad2fb8 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xc7e70728 kfree_skb +EXPORT_SYMBOL vmlinux 0xc7ead92a key_alloc +EXPORT_SYMBOL vmlinux 0xc7ec28b0 memcmp +EXPORT_SYMBOL vmlinux 0xc7ecb433 save_mount_options +EXPORT_SYMBOL vmlinux 0xc84d3b4a f_setown +EXPORT_SYMBOL vmlinux 0xc86fb0b4 of_get_cpu_node +EXPORT_SYMBOL vmlinux 0xc87448ac i2c_bit_add_bus +EXPORT_SYMBOL vmlinux 0xc884427f bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8e31d75 _lv1_configure_irq_state_bitmap +EXPORT_SYMBOL vmlinux 0xc90689b2 make_EII_client +EXPORT_SYMBOL vmlinux 0xc9200695 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xc991305e netpoll_setup +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc99c24d3 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0xc9d0d012 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0xc9e7f1c1 dput +EXPORT_SYMBOL vmlinux 0xc9eace6e ide_dma_off +EXPORT_SYMBOL vmlinux 0xc9fa370e unbind_con_driver +EXPORT_SYMBOL vmlinux 0xc9fc13f2 DAC1064_global_init +EXPORT_SYMBOL vmlinux 0xc9fc598d pasemi_read_dma_reg +EXPORT_SYMBOL vmlinux 0xca120c53 bdi_register_dev +EXPORT_SYMBOL vmlinux 0xca3f4109 pci_target_state +EXPORT_SYMBOL vmlinux 0xca5aeb49 __brelse +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca5e8a45 vio_cmo_set_dev_desired +EXPORT_SYMBOL vmlinux 0xca825895 pmu_suspend +EXPORT_SYMBOL vmlinux 0xcaabf3f9 pasemi_write_iob_reg +EXPORT_SYMBOL vmlinux 0xcb0b4906 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0xcb20e80f d_find_alias +EXPORT_SYMBOL vmlinux 0xcb527d68 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xcb6336ad dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0xcb63f750 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb79c8d9 pci_get_slot +EXPORT_SYMBOL vmlinux 0xcb7bc48a bit_waitqueue +EXPORT_SYMBOL vmlinux 0xcbe8b038 _lv1_configure_execution_time_variable +EXPORT_SYMBOL vmlinux 0xcbeb5b22 __ip_select_ident +EXPORT_SYMBOL vmlinux 0xcbf15034 phy_start +EXPORT_SYMBOL vmlinux 0xcbfa6e1d kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xcbfe6008 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xcbfeefc5 seq_puts +EXPORT_SYMBOL vmlinux 0xcc07af75 strnlen +EXPORT_SYMBOL vmlinux 0xcc1ff0ba __elv_add_request +EXPORT_SYMBOL vmlinux 0xcc2b5866 init_buffer +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc637791 kmalloc_caches +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc89c246 pasemi_dma_alloc_chan +EXPORT_SYMBOL vmlinux 0xccbf09d7 udplite_table +EXPORT_SYMBOL vmlinux 0xcd0d671b xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0xcd456ac1 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0xcd769f62 _lv1_gpu_device_map +EXPORT_SYMBOL vmlinux 0xcd792c7f inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0xcd8381c6 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0xcd9f2f10 skb_queue_tail +EXPORT_SYMBOL vmlinux 0xcdaca438 dev_add_pack +EXPORT_SYMBOL vmlinux 0xcdcba8cb bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xcde34cd0 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xcde52ae7 block_read_full_page +EXPORT_SYMBOL vmlinux 0xcdeae1b3 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0xce311861 names_cachep +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce3b3f09 profile_pc +EXPORT_SYMBOL vmlinux 0xce409cda pmac_set_early_video_resume +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce90519b clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0xce93bd4e scsi_remove_host +EXPORT_SYMBOL vmlinux 0xcea25e58 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0xcedd2989 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xcef32b63 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xcf67f55e get_write_access +EXPORT_SYMBOL vmlinux 0xcf7a4268 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0xcf884229 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0xcf901697 __strnlen_user +EXPORT_SYMBOL vmlinux 0xcf9be310 iget5_locked +EXPORT_SYMBOL vmlinux 0xcf9ddffb serio_open +EXPORT_SYMBOL vmlinux 0xcfab6bd3 find_inode_number +EXPORT_SYMBOL vmlinux 0xcfaf79ba mempool_alloc +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfda9a0a input_get_keycode +EXPORT_SYMBOL vmlinux 0xcfdd5f16 dev_gro_receive +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd0145030 read_cache_pages +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd01ae715 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0xd044c856 of_match_device +EXPORT_SYMBOL vmlinux 0xd0571035 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0xd05931ec _lv1_set_lpm_counter_control +EXPORT_SYMBOL vmlinux 0xd09232a4 phy_device_free +EXPORT_SYMBOL vmlinux 0xd0b2a955 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xd0dc8bdb tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0xd0e09b7f arp_send +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd1262886 rtas_data_buf +EXPORT_SYMBOL vmlinux 0xd150d1ba vfs_unlink +EXPORT_SYMBOL vmlinux 0xd170fbbc poll_freewait +EXPORT_SYMBOL vmlinux 0xd19e28b4 hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xd1d9bf1a do_sync_write +EXPORT_SYMBOL vmlinux 0xd1dc674a i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0xd1e79771 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0xd1fe8ebb _lv1_get_spe_interrupt_status +EXPORT_SYMBOL vmlinux 0xd2145e72 vio_find_node +EXPORT_SYMBOL vmlinux 0xd2155c30 ilookup +EXPORT_SYMBOL vmlinux 0xd21f195c register_gifconf +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd26861f3 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0xd269cde0 __invalidate_device +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd29de61d mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0xd2a1fa21 unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xd2cb23f3 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xd2df9434 generic_file_open +EXPORT_SYMBOL vmlinux 0xd2ef2638 smu_cmdbuf_abs +EXPORT_SYMBOL vmlinux 0xd322a2eb security_inode_readlink +EXPORT_SYMBOL vmlinux 0xd32b3631 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0xd36b2a07 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xd3939977 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0xd3af979c memdup_user +EXPORT_SYMBOL vmlinux 0xd3cbc10d netlink_kernel_release +EXPORT_SYMBOL vmlinux 0xd408b93b arp_tbl +EXPORT_SYMBOL vmlinux 0xd409383c pmu_request +EXPORT_SYMBOL vmlinux 0xd436d221 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xd4371190 get_super +EXPORT_SYMBOL vmlinux 0xd467e4ea ll_rw_block +EXPORT_SYMBOL vmlinux 0xd4680a64 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0xd46d0968 ioremap_flags +EXPORT_SYMBOL vmlinux 0xd4835759 tcp_poll +EXPORT_SYMBOL vmlinux 0xd4afc369 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xd5152cd2 load_nls +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd52b2b57 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0xd551e415 journal_release_buffer +EXPORT_SYMBOL vmlinux 0xd55f3209 _lv1_remove_repository_node +EXPORT_SYMBOL vmlinux 0xd57ba3bf dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5c7c61d sysctl_string +EXPORT_SYMBOL vmlinux 0xd5e1d719 _lv1_set_ppe_periodic_tracer_frequency +EXPORT_SYMBOL vmlinux 0xd5f584e0 alloc_disk +EXPORT_SYMBOL vmlinux 0xd5fba4a9 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0xd611e72f sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0xd613688d scsi_release_buffers +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd649a008 blk_register_region +EXPORT_SYMBOL vmlinux 0xd650e5c2 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0xd671637d sock_map_fd +EXPORT_SYMBOL vmlinux 0xd677aa66 d_move +EXPORT_SYMBOL vmlinux 0xd6930c44 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0xd69ebc51 _read_trylock +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6c6f76f poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0xd6d68c6b vm_stat +EXPORT_SYMBOL vmlinux 0xd6d830dd dev_set_drvdata +EXPORT_SYMBOL vmlinux 0xd6e63b21 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xd6edf811 _lv1_release_memory +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f4b5be vfs_create +EXPORT_SYMBOL vmlinux 0xd7154121 down_interruptible +EXPORT_SYMBOL vmlinux 0xd7162cf3 unlock_rename +EXPORT_SYMBOL vmlinux 0xd72e1cfc _lv1_set_lpm_spr_trigger +EXPORT_SYMBOL vmlinux 0xd7303f89 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0xd73309f7 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd786c0ea plpar_hcall9 +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7ac7712 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0xd7e50894 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0xd8101b10 simple_release_fs +EXPORT_SYMBOL vmlinux 0xd828701c is_bad_inode +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd882caba phy_stop +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8bcf0cb vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xd8dc4cfa qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd904ec7f block_write_begin +EXPORT_SYMBOL vmlinux 0xd90ea20c tty_port_close_end +EXPORT_SYMBOL vmlinux 0xd90fa17b __nla_reserve +EXPORT_SYMBOL vmlinux 0xd96c8608 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xd96d9bfa vfs_quota_on +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd98a6890 replace_mount_options +EXPORT_SYMBOL vmlinux 0xd9bac924 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0xd9c5f1ab mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xd9d4d09d _lv1_release_io_segment +EXPORT_SYMBOL vmlinux 0xd9d6c84b mdiobus_free +EXPORT_SYMBOL vmlinux 0xd9e0fa44 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0xd9e88b02 blk_peek_request +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda1ff59f try_to_release_page +EXPORT_SYMBOL vmlinux 0xda4629e4 radix_tree_insert +EXPORT_SYMBOL vmlinux 0xda4d7ca0 generic_delete_inode +EXPORT_SYMBOL vmlinux 0xda757153 key_revoke +EXPORT_SYMBOL vmlinux 0xda7724a5 drop_super +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda9bc30e matrox_G100 +EXPORT_SYMBOL vmlinux 0xdaacddf4 dev_mc_sync +EXPORT_SYMBOL vmlinux 0xdab00eb3 simple_dir_operations +EXPORT_SYMBOL vmlinux 0xdae06c7c __getblk +EXPORT_SYMBOL vmlinux 0xdb09708f __wake_up +EXPORT_SYMBOL vmlinux 0xdb2c5836 scsi_print_command +EXPORT_SYMBOL vmlinux 0xdb2ef65f jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0xdb398323 bio_add_page +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbf23163 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xdbf3727c set_binfmt +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc1986d6 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xdc244934 vio_get_attribute +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc36080f register_con_driver +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc61157d fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0xdc7199b3 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xdc7aea49 scsi_register +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcad39b0 path_lookup +EXPORT_SYMBOL vmlinux 0xdcaffc55 sg_alloc_table +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb5671d strlen +EXPORT_SYMBOL vmlinux 0xdce8e31e alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0xdcefb9a5 pmu_resume +EXPORT_SYMBOL vmlinux 0xdcfcef32 matroxfb_g450_shutdown +EXPORT_SYMBOL vmlinux 0xdd02b81b blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xdd310278 phy_attach +EXPORT_SYMBOL vmlinux 0xdd373f37 block_fsync +EXPORT_SYMBOL vmlinux 0xdd49545b lease_modify +EXPORT_SYMBOL vmlinux 0xdd5a2b2a scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0xdd5a37a7 _spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0xdd78c370 phy_print_status +EXPORT_SYMBOL vmlinux 0xdd955144 __debugger +EXPORT_SYMBOL vmlinux 0xdd9cb0d7 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0xdda1d79c otg_put_transceiver +EXPORT_SYMBOL vmlinux 0xddaf7f3c sget +EXPORT_SYMBOL vmlinux 0xddba8a9b __ps2_command +EXPORT_SYMBOL vmlinux 0xddc6d8ef skb_pull +EXPORT_SYMBOL vmlinux 0xdde25489 _write_lock +EXPORT_SYMBOL vmlinux 0xdde2a992 cfb_copyarea +EXPORT_SYMBOL vmlinux 0xddec7e83 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xde197336 tty_hangup +EXPORT_SYMBOL vmlinux 0xde207680 inet_del_protocol +EXPORT_SYMBOL vmlinux 0xde255cb8 simple_rename +EXPORT_SYMBOL vmlinux 0xde30a878 clear_inode +EXPORT_SYMBOL vmlinux 0xde38b6dd note_scsi_host +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde85e4b9 skb_copy_expand +EXPORT_SYMBOL vmlinux 0xde929369 key_validate +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdeb9b3b9 tcf_hash_search +EXPORT_SYMBOL vmlinux 0xdebcb2bb validate_sp +EXPORT_SYMBOL vmlinux 0xded82698 cdev_init +EXPORT_SYMBOL vmlinux 0xdeda16ef nlmsg_notify +EXPORT_SYMBOL vmlinux 0xdef5a339 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0xdf046916 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xdf1a7d65 nf_reinject +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf4e2b2e lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf60fc83 _lv1_net_start_tx_dma +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdfa052c0 tcp_make_synack +EXPORT_SYMBOL vmlinux 0xdfa1cc60 posix_lock_file +EXPORT_SYMBOL vmlinux 0xdfb10773 raw_local_irq_restore +EXPORT_SYMBOL vmlinux 0xdfb76d19 __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0xdfd9548b bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0xdfe48e10 inet_sendmsg +EXPORT_SYMBOL vmlinux 0xdff1aabe fb_show_logo +EXPORT_SYMBOL vmlinux 0xe057425a dev_load +EXPORT_SYMBOL vmlinux 0xe06254ab ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0xe0681740 pcim_enable_device +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe079952b jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0dea903 locks_remove_posix +EXPORT_SYMBOL vmlinux 0xe0e3553a blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe15c8e69 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe198f2b1 xfrm_lookup +EXPORT_SYMBOL vmlinux 0xe1a3b2c8 end_page_writeback +EXPORT_SYMBOL vmlinux 0xe1ab9c27 kernel_connect +EXPORT_SYMBOL vmlinux 0xe200f1f5 of_node_get +EXPORT_SYMBOL vmlinux 0xe20c63e7 _lv1_unmap_device_mmio_region +EXPORT_SYMBOL vmlinux 0xe21d935f pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0xe220ceb8 __debugger_sstep +EXPORT_SYMBOL vmlinux 0xe22bfd11 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24050c7 scnprintf +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe28441c9 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xe2a6e3bb sock_no_listen +EXPORT_SYMBOL vmlinux 0xe2a9998d new_inode +EXPORT_SYMBOL vmlinux 0xe2be1349 sk_common_release +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e0c7c6 __flush_icache_range +EXPORT_SYMBOL vmlinux 0xe2e5d7d0 dcache_dir_open +EXPORT_SYMBOL vmlinux 0xe2ebb13b ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xe3232804 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xe349815a xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xe35b311b irq_stat +EXPORT_SYMBOL vmlinux 0xe35c26fc cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0xe366248a scsi_device_resume +EXPORT_SYMBOL vmlinux 0xe37057cb __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xe394574b submit_bh +EXPORT_SYMBOL vmlinux 0xe3a462dd ide_set_handler +EXPORT_SYMBOL vmlinux 0xe3b0192b vscnprintf +EXPORT_SYMBOL vmlinux 0xe3c0cbf9 ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0xe3f361df do_munmap +EXPORT_SYMBOL vmlinux 0xe414f67e blk_integrity_register +EXPORT_SYMBOL vmlinux 0xe4461ecc key_task_permission +EXPORT_SYMBOL vmlinux 0xe44d9ff1 unregister_netdevice +EXPORT_SYMBOL vmlinux 0xe46dee02 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe49a4ddc qdisc_reset +EXPORT_SYMBOL vmlinux 0xe4c7a16e input_grab_device +EXPORT_SYMBOL vmlinux 0xe4efcd78 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe4f2eb80 nf_register_hook +EXPORT_SYMBOL vmlinux 0xe4f596e6 skb_dequeue +EXPORT_SYMBOL vmlinux 0xe5077a8f mempool_destroy +EXPORT_SYMBOL vmlinux 0xe51dd49e journal_forget +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe538cec1 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe58d0e64 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0xe58fd371 lock_super +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe6048b73 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xe60988ac _lv1_query_logical_partition_address_region_info +EXPORT_SYMBOL vmlinux 0xe636512d unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xe63cfc5c jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xe63f54c8 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0xe64577c3 inet_csk_accept +EXPORT_SYMBOL vmlinux 0xe66896d6 copy_io_context +EXPORT_SYMBOL vmlinux 0xe68bf857 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0xe6955068 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe69a45ff dev_remove_pack +EXPORT_SYMBOL vmlinux 0xe6c0414c put_mnt_ns +EXPORT_SYMBOL vmlinux 0xe6cc9de1 vfs_stat +EXPORT_SYMBOL vmlinux 0xe6d94dce vfs_fsync +EXPORT_SYMBOL vmlinux 0xe6d99ea5 release_sock +EXPORT_SYMBOL vmlinux 0xe6e5b6c8 napi_gro_frags +EXPORT_SYMBOL vmlinux 0xe6f0e4e2 __alloc_skb +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe6fed2c0 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0xe7112d4e phy_connect_direct +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe728fe9f scsi_dma_map +EXPORT_SYMBOL vmlinux 0xe72da963 neigh_destroy +EXPORT_SYMBOL vmlinux 0xe74aa406 _lv1_set_dabr +EXPORT_SYMBOL vmlinux 0xe759ceef compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xe79b2296 phy_start_aneg +EXPORT_SYMBOL vmlinux 0xe7b4058e nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xe7c3d426 __destroy_inode +EXPORT_SYMBOL vmlinux 0xe7cd99b7 smu_queue_simple +EXPORT_SYMBOL vmlinux 0xe7ce7439 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7e7a882 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0xe7fddf43 matrox_cfbX_init +EXPORT_SYMBOL vmlinux 0xe8116e08 __kmalloc_node +EXPORT_SYMBOL vmlinux 0xe81b7519 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0xe82271f2 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0xe853613b nla_put +EXPORT_SYMBOL vmlinux 0xe86ddbc8 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xe8799de1 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0xe8a9fe7c __register_chrdev +EXPORT_SYMBOL vmlinux 0xe8ae51f3 genphy_config_advert +EXPORT_SYMBOL vmlinux 0xe8c8d382 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8df1ed0 pci_scan_slot +EXPORT_SYMBOL vmlinux 0xe90b95c1 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xe90b9eaa generic_shutdown_super +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe92bbeb9 vfs_rename +EXPORT_SYMBOL vmlinux 0xe94401e5 abort_creds +EXPORT_SYMBOL vmlinux 0xe98171b6 ide_stall_queue +EXPORT_SYMBOL vmlinux 0xe993485a nf_ip_checksum +EXPORT_SYMBOL vmlinux 0xe9a03059 dquot_reserve_space +EXPORT_SYMBOL vmlinux 0xe9a52ca3 mpage_readpage +EXPORT_SYMBOL vmlinux 0xe9b57e2e skb_over_panic +EXPORT_SYMBOL vmlinux 0xe9f6adb3 bd_release +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea1454cd vmtruncate +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea4843b8 mdiobus_write +EXPORT_SYMBOL vmlinux 0xea89c4c7 vmap +EXPORT_SYMBOL vmlinux 0xea937807 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xea98c3a1 proc_symlink +EXPORT_SYMBOL vmlinux 0xeabebf12 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0xead58fb9 print_hex_dump +EXPORT_SYMBOL vmlinux 0xeb12e098 scsi_scan_target +EXPORT_SYMBOL vmlinux 0xeb2a1a30 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0xeb31fc96 mpage_writepage +EXPORT_SYMBOL vmlinux 0xeb35380d mach_maple +EXPORT_SYMBOL vmlinux 0xeb3670c1 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0xeb40f3cc tcp_child_process +EXPORT_SYMBOL vmlinux 0xeb667a9a input_flush_device +EXPORT_SYMBOL vmlinux 0xeb6f982b dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeb9518a9 generic_file_mmap +EXPORT_SYMBOL vmlinux 0xeb9fe77b neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0xeba2a1f7 rtas_indicator_present +EXPORT_SYMBOL vmlinux 0xebb0d8d3 llc_sap_find +EXPORT_SYMBOL vmlinux 0xebb2d623 do_splice_from +EXPORT_SYMBOL vmlinux 0xebb4ae86 kill_fasync +EXPORT_SYMBOL vmlinux 0xebbf1dba strncasecmp +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebd780c4 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xec07ed97 idr_for_each +EXPORT_SYMBOL vmlinux 0xec30765a _lv1_allocate_io_segment +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xecc58e90 page_symlink +EXPORT_SYMBOL vmlinux 0xecea28b3 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xecf42a00 dquot_free_space +EXPORT_SYMBOL vmlinux 0xed0ad129 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xed32c742 neigh_seq_next +EXPORT_SYMBOL vmlinux 0xed3536e1 bdi_unregister +EXPORT_SYMBOL vmlinux 0xed367ba2 tty_throttle +EXPORT_SYMBOL vmlinux 0xed49ba48 downgrade_write +EXPORT_SYMBOL vmlinux 0xed4b4c26 dev_get_by_index +EXPORT_SYMBOL vmlinux 0xed62908c udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xed652427 _lv1_set_interrupt_mask +EXPORT_SYMBOL vmlinux 0xed77e37e phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0xed8a9354 wake_up_process +EXPORT_SYMBOL vmlinux 0xed9dd92d security_path_symlink +EXPORT_SYMBOL vmlinux 0xed9f47fd vio_unregister_device +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedae34b2 fget +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedc36df7 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xedf0b48c _lv1_storage_get_async_status +EXPORT_SYMBOL vmlinux 0xedf963ed deactivate_super +EXPORT_SYMBOL vmlinux 0xee0b22e0 register_sysrq_key +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee4cc719 km_query +EXPORT_SYMBOL vmlinux 0xee5bb20b _lv1_panic +EXPORT_SYMBOL vmlinux 0xee62e718 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xee73c980 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0xee9174c5 _lv1_storage_read +EXPORT_SYMBOL vmlinux 0xee9b0f3c pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xee9b97cb generic_ide_ioctl +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeecf6f28 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xeeff4cb7 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0xef2b3229 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0xef4da2b9 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef7cd3ce sk_wait_data +EXPORT_SYMBOL vmlinux 0xefc2e54d _lv1_storage_send_device_command +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefde1bbe flush_dcache_range +EXPORT_SYMBOL vmlinux 0xefe897ac misc_register +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf0042fa4 paca +EXPORT_SYMBOL vmlinux 0xf007bd97 pci_dev_put +EXPORT_SYMBOL vmlinux 0xf02cda40 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xf033263a tty_check_change +EXPORT_SYMBOL vmlinux 0xf0403f8f scsi_block_requests +EXPORT_SYMBOL vmlinux 0xf05d487b sock_no_ioctl +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf0670cab register_sysctl_paths +EXPORT_SYMBOL vmlinux 0xf069c6c4 __devm_release_region +EXPORT_SYMBOL vmlinux 0xf06c0a8a dm_get_device +EXPORT_SYMBOL vmlinux 0xf0a53419 hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xf0a955f2 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xf0c1346b tty_register_driver +EXPORT_SYMBOL vmlinux 0xf0d2f84a _lv1_gpu_context_free +EXPORT_SYMBOL vmlinux 0xf0da626d blk_init_tags +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0f1d5c9 get_sb_single +EXPORT_SYMBOL vmlinux 0xf0f876ce get_io_context +EXPORT_SYMBOL vmlinux 0xf0fabdc9 cfb_fillrect +EXPORT_SYMBOL vmlinux 0xf0fcea34 task_nice +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf11486d7 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0xf120b3b5 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf183189b __ioremap_at +EXPORT_SYMBOL vmlinux 0xf18e0028 tcp_read_sock +EXPORT_SYMBOL vmlinux 0xf1905973 ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1a395b9 elv_add_request +EXPORT_SYMBOL vmlinux 0xf1bf2663 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1dd9fb3 down_read_trylock +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1e9b486 neigh_table_clear +EXPORT_SYMBOL vmlinux 0xf1f6e001 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xf1f727d5 inet_frags_init +EXPORT_SYMBOL vmlinux 0xf20c8cae __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf213f885 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0xf21d7663 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0xf2254996 numa_cpumask_lookup_table +EXPORT_SYMBOL vmlinux 0xf25f8347 __napi_complete +EXPORT_SYMBOL vmlinux 0xf2a42289 kthread_stop +EXPORT_SYMBOL vmlinux 0xf2b80906 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xf2ec794e ide_raw_taskfile +EXPORT_SYMBOL vmlinux 0xf2f01edd skb_copy_bits +EXPORT_SYMBOL vmlinux 0xf2f991c0 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0xf2fe4ba9 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xf302f6eb d_validate +EXPORT_SYMBOL vmlinux 0xf309e9ee cur_cpu_spec +EXPORT_SYMBOL vmlinux 0xf30d1036 _lv1_start_ppe_periodic_tracer +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf339c258 pci_pme_active +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf357db8d pasemi_dma_set_flag +EXPORT_SYMBOL vmlinux 0xf3600763 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0xf37495e0 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0xf37e3af2 dm_table_put +EXPORT_SYMBOL vmlinux 0xf3804bf5 vio_enable_interrupts +EXPORT_SYMBOL vmlinux 0xf38b26a6 netif_receive_skb +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39a5222 _lv1_get_virtual_address_space_id_of_ppe +EXPORT_SYMBOL vmlinux 0xf3ad652d scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xf3ba7c0c jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3d7fd74 generic_make_request +EXPORT_SYMBOL vmlinux 0xf3ef83fb do_SAK +EXPORT_SYMBOL vmlinux 0xf4174291 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4496594 sk_stop_timer +EXPORT_SYMBOL vmlinux 0xf490309b tcp_ioctl +EXPORT_SYMBOL vmlinux 0xf491efce pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xf4ed11a4 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf500980e dma_pool_free +EXPORT_SYMBOL vmlinux 0xf51bd831 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf54a0cbc simple_getattr +EXPORT_SYMBOL vmlinux 0xf553cfde xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0xf575d7a5 key_payload_reserve +EXPORT_SYMBOL vmlinux 0xf57f1d4d register_key_type +EXPORT_SYMBOL vmlinux 0xf58b0e06 journal_flush +EXPORT_SYMBOL vmlinux 0xf58b5564 journal_wipe +EXPORT_SYMBOL vmlinux 0xf5a62ecc _memset_io +EXPORT_SYMBOL vmlinux 0xf5b4cc2d sg_init_table +EXPORT_SYMBOL vmlinux 0xf5c7089f pci_get_subsys +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5dbc79c vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xf5e1558d crash_shutdown_unregister +EXPORT_SYMBOL vmlinux 0xf5e4bc03 simple_link +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f4c392 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xf6098050 inet_bind +EXPORT_SYMBOL vmlinux 0xf611015b simple_transaction_read +EXPORT_SYMBOL vmlinux 0xf6213e12 pasemi_dma_clear_flag +EXPORT_SYMBOL vmlinux 0xf6273a7a of_mdiobus_register +EXPORT_SYMBOL vmlinux 0xf6274c2f da903x_query_status +EXPORT_SYMBOL vmlinux 0xf658435c dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0xf6679ed5 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0xf67b5621 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0xf690f0d6 bd_set_size +EXPORT_SYMBOL vmlinux 0xf69be488 wait_for_completion +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6c112f8 matroxfb_unregister_driver +EXPORT_SYMBOL vmlinux 0xf6d7190f kernel_sendpage +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6ecb763 _lv1_send_event_locally +EXPORT_SYMBOL vmlinux 0xf6f33756 neigh_connected_output +EXPORT_SYMBOL vmlinux 0xf7071e79 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xf70f364c remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0xf74a77bb skb_push +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf768c308 scsi_device_put +EXPORT_SYMBOL vmlinux 0xf781533b security_file_permission +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79373d2 unregister_nls +EXPORT_SYMBOL vmlinux 0xf7bac0ec _lv1_set_lpm_counter +EXPORT_SYMBOL vmlinux 0xf7c8278a journal_extend +EXPORT_SYMBOL vmlinux 0xf7cbe033 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xf7cc335f gen_new_estimator +EXPORT_SYMBOL vmlinux 0xf7de6966 ide_proc_register_driver +EXPORT_SYMBOL vmlinux 0xf7f8cdf6 unregister_netdev +EXPORT_SYMBOL vmlinux 0xf8004bfd _lv1_disconnect_interrupt_event_receive_port +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf8286598 do_sync_read +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82bab77 generic_file_llseek +EXPORT_SYMBOL vmlinux 0xf8530bd0 set_anon_super +EXPORT_SYMBOL vmlinux 0xf87e81fe scsi_host_put +EXPORT_SYMBOL vmlinux 0xf8906870 vio_cmo_entitlement_update +EXPORT_SYMBOL vmlinux 0xf8f4bdce xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xf8fda569 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0xf90bed2e journal_init_inode +EXPORT_SYMBOL vmlinux 0xf90c96b0 inet_accept +EXPORT_SYMBOL vmlinux 0xf9249203 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xf94e9cd9 nf_ct_attach +EXPORT_SYMBOL vmlinux 0xf9566a7b sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0xf95a9d03 bio_pair_release +EXPORT_SYMBOL vmlinux 0xf96b2d82 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xf98dd9c1 input_free_device +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9aa1bc2 dev_driver_string +EXPORT_SYMBOL vmlinux 0xfa0c1816 skb_dma_map +EXPORT_SYMBOL vmlinux 0xfa16512e find_lock_page +EXPORT_SYMBOL vmlinux 0xfa17ff67 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xfa31cd3b kfifo_init +EXPORT_SYMBOL vmlinux 0xfa3419fd pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0xfa3bd846 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0xfa5e58ad journal_get_write_access +EXPORT_SYMBOL vmlinux 0xfa608ba6 free_task +EXPORT_SYMBOL vmlinux 0xfa908648 sysctl_jiffies +EXPORT_SYMBOL vmlinux 0xfaac302a tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xfadb5750 pmu_unlock +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfafce58f pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0xfb049b91 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb114cad lookup_bdev +EXPORT_SYMBOL vmlinux 0xfb130a89 blkdev_put +EXPORT_SYMBOL vmlinux 0xfb1c1058 bio_sector_offset +EXPORT_SYMBOL vmlinux 0xfb38a705 framebuffer_release +EXPORT_SYMBOL vmlinux 0xfb3df2b6 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0xfb4f3101 __scsi_put_command +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb788c9b gen_pool_alloc +EXPORT_SYMBOL vmlinux 0xfb8c20b3 vm_insert_page +EXPORT_SYMBOL vmlinux 0xfbb35429 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc24af3b backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc8629a0 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0xfc96deaf jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcb8717e setup_arg_pages +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcce7e92 lro_flush_all +EXPORT_SYMBOL vmlinux 0xfce35565 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd004730 kill_pid +EXPORT_SYMBOL vmlinux 0xfd262a6a simple_unlink +EXPORT_SYMBOL vmlinux 0xfd30b27a generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xfd56d4ea jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xfd60df2f macio_release_resource +EXPORT_SYMBOL vmlinux 0xfd81416f vfs_getattr +EXPORT_SYMBOL vmlinux 0xfd9f40e3 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0xfda28aa5 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xfda55261 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdaee324 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xfdb40e44 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfded48ed enable_kernel_fp +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe13135e wireless_send_event +EXPORT_SYMBOL vmlinux 0xfe17441e neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0xfe1803c0 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0xfe1ba245 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe392bcd generic_segment_checks +EXPORT_SYMBOL vmlinux 0xfe4cb4b5 _lv1_storage_write +EXPORT_SYMBOL vmlinux 0xfe56fdf2 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe66e1b3 get_empty_filp +EXPORT_SYMBOL vmlinux 0xfe6e8581 xrlim_allow +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe90ba44 misc_deregister +EXPORT_SYMBOL vmlinux 0xfe93e052 dm_io +EXPORT_SYMBOL vmlinux 0xfe9ed436 journal_update_format +EXPORT_SYMBOL vmlinux 0xfeb4646c nvram_find_partition +EXPORT_SYMBOL vmlinux 0xfebb06f5 of_device_get_modalias +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfed221d9 pasemi_dma_alloc_ring +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfef735de kobject_put +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1765c7 rtas_call +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff2c46cb vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0xff3b8be1 pci_fixup_device +EXPORT_SYMBOL vmlinux 0xff449b76 tc_classify +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff6932df bdget +EXPORT_SYMBOL vmlinux 0xff69c0ba alloc_disk_node +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff81d2c5 __debugger_dabr_match +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffb0ec84 journal_lock_updates +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xfff4250e give_up_console +EXPORT_SYMBOL_GPL arch/powerpc/platforms/cell/spufs/spufs 0x6a505b70 spufs_context_fops +EXPORT_SYMBOL_GPL arch/powerpc/platforms/cell/spufs/spufs 0x9d6e6352 spu_save +EXPORT_SYMBOL_GPL arch/powerpc/platforms/cell/spufs/spufs 0xe22616ea spu_restore +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x14b0edf5 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xcb042754 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x0f9e8bbb async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x5e54db81 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x398ad93e async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xd6a163b2 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x1d24581d async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x8a21dbcd async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xa7ce64c3 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x8f38f637 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xa52f7af3 async_xor_val +EXPORT_SYMBOL_GPL crypto/cryptd 0x4fe9e3ac cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x6b633a1d cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x873c266f cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x9333563f cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xa758258e cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xb444f71f cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xbcd2e32a cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x55176a9d twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x3022eea0 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x67f1e453 __pata_platform_remove +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0xa0e1d99a sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x076e91a1 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x17b8094f btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x4127effd btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x8fa687fa btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x952024d1 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb37d332e btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x83dfc9f0 agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe751d48e agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x13482093 tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x13c327aa tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x15e915e2 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x23be3e3b tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2fb645f1 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x344024a1 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3491fd09 tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3560bb29 tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3bd1126c tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6642b634 tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x68abe3d8 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x7ffeeed0 tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9b8ccd49 tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x9bb529a9 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa9240b3f tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xb13cbadf tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xb3908a60 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xbe24b3e8 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xca5305a3 tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xcd5ed082 tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe7ea9de5 tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfa1381bc tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfa6e2fa7 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/connector/cn 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL drivers/connector/cn 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL drivers/connector/cn 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x01f9db4e edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x1766695b edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x28f793f7 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x339fa409 edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3a795551 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3ee9716c edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x4275e632 edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x4481af72 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x483ca91e edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x67ae646d edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x708e8a25 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8abc05df edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8d011d56 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x93451d5a edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb1080651 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc88ad42c edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xd640282d edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xd6c75efa edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xdbbd0a15 edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xdf2a5ad7 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe1ec069b edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe815b37d edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xed1fe10f edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf780890b edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x27bdbea0 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x9131a9dc drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/hid/hid 0x03ccea39 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0ac8ba46 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0ce71d33 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x14fbdb76 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1d81c6b0 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1f8da0ca hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2d3b3f4c hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2dfc3d86 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3bd23061 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x40316f2a hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7b2b52e6 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7bba6183 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x95afe3d6 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9973cfda hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xacca2beb hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb07513ed hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb75e2093 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb9f86ff4 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbce16acb hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc7248d1d hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc8bab4bd hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xca2ee16e hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd13e04f7 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xefceb56e hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfed3d49c hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x0c7a13a9 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x1f733fb8 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xbc780f75 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x48c37896 lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x64366546 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x695ab0d6 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x82912983 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xd1de560c lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x7b9ca26a hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xef93e72a hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xd9db3ff6 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x051c4d3d wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x14d101c1 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x18a25067 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7ffe9ad2 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xa1c7f22c wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xb6057a9f wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd40850f9 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd9e3b51d wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xdafd2002 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xdfdd992d wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xee143265 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xf0c83859 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x1598407f wf_put_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x1b9f164f wf_get_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x43f15801 wf_find_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x688f3662 wf_get_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x75147afa wf_set_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x78a32878 wf_unregister_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x79057681 wf_register_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x89a25fa1 wf_unregister_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x94765fac wf_critical_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xa2f19a49 wf_is_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xaf15726f wf_unregister_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xdb7e8499 wf_register_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xdcbb5058 wf_find_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xed82a14f wf_clear_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xf79f12a8 wf_put_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xfd1dc055 wf_register_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_pid 0x9808f147 wf_pid_run +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_pid 0xb8ed5b2c wf_cpu_pid_init +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_pid 0xcd9a18ef wf_pid_init +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_pid 0xceda69f1 wf_cpu_pid_run +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_smu_sat 0xe05851d5 smu_sat_get_sdb_partition +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x6cc5473c dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xa2cd191a dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x19878274 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x1ccf7c59 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x21643c2e dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x2bb2fcc8 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x2bcae43f dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x45627a54 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x623f91c7 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x667c8003 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x757d84f9 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d64c1d4 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x8902d1e3 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x8fdc3ca4 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x9e1e648d dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xae244547 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xb28ffe19 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xbb162a54 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc1c8ce20 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xce9eeb2a dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xcfe1607c dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd28fa734 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xecf32757 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x24e9c562 md_allow_write +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x58532e53 md_do_sync +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x62ad90eb sync_page_io +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xce723b4b md_new_event +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x24935f26 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xcdc24ab5 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0xdbab0c01 raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0f847546 ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3084f935 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x68abaf0d ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x1522eb8d saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x1a29e78a saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x26686445 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x3ee0a7d1 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x4a636941 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x6de13ac6 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x9948da90 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xca86b39c saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xdc9c61e7 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xed0e6160 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xfc09fa9a saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4b47064a saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x7f61bf53 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x8f5eb846 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x923b26c8 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xc9b4ea50 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xcf1f28fd saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xd7fa6fb6 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0x94c0cb16 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0x4911de64 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x1f63495a tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x0e7efd01 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x0ea392ee tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x6739f061 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0x33bcf7aa tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x42e9d51c tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0xdce425e2 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x354cb611 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x78a12bb6 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x61f98163 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x0698a22d smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x0ba9ede4 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1b71dbb9 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x2e29b202 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x2fef9eb6 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x3382a43d smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x33bcd130 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x3bc4941a sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4a9c7597 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x5f2f1ba1 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x606522aa smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x849a0545 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x86383cc7 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x99664730 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x9ce53b13 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x9f983db6 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb58fec27 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe884994c smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xf44911ff smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x01d0c025 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x0d470e9f cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x78279be1 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x7bf9b6a4 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x7e2b6e9c cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x92854374 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x98fa2f83 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xa35618be cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xae1f9013 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xde9ecbb6 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xe67e5a57 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0x6a638c01 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x0473fede em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x3c41547a em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xd7f875f5 em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xdd0a3aad em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xe2cc40d7 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xfd830931 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x0edb56e2 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x2d5d7f65 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x82ec659b saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xe61c34f3 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xf7450969 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x46f772fa v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x4d344080 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xbcc85f42 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xd1a9e92a v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-compat-ioctl32 0x1c5d3c69 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x1a70b54f v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x98522853 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xd473f9db v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xdd4af437 v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x01e23926 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x0dfff652 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x17eb545f videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x2e319310 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3d668507 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4084b246 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x4ed05e6b videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x5026f1a8 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x59212516 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x60250752 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74725b2d videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74d8c0ac videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x74e74d23 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x79aafd9f videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7fc423cb videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x89800ecb __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x8d372214 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x8efd67b9 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x927dcf15 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xb2cb4cdc videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbece3c69 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc2377bff videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc604bbc1 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf5525634 videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xf80c6fb6 videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x003236c4 videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x19d5a294 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x482e3851 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x595365ec videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x61aac3b6 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x6412f826 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x80137849 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x86629bc3 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa087ad66 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa38faed2 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa4b7b2a6 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xca909ff5 videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xcad2b470 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf8245dcb videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x0b19013f videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xa4c3c02b videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xda7cf691 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x0d72a383 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x3f59bbc3 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x4990b0cb v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x6a727688 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xc9dbfa21 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xf57d4a63 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x1425ee8a i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x2de13161 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x381692d6 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x3e069c50 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x404a3f3e i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x8227c516 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x85dc17c2 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xf3f91bc0 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x206e599d mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3cc4a443 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x3fc0c638 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5539bd3c mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x5fd1b673 mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xb1fa7fa5 mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xd86b11e0 mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x5fd08c0c pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xe20dfdae pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x0d36565d pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x1dbec52c pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x26a88b35 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x5c4e4add pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x6f56ce0c pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x71c66340 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7d29c457 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x8546e673 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x88e364c1 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xca236ea2 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xfb73bc11 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x1c6821fb pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x7b12e6bc pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x913a00d9 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x93c83855 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xe86d7088 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x12ce5711 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x87a3d592 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xa11eb437 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xe137fd89 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xed8b0dd6 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x4ba30c0c ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x06aa2159 wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3894700f wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x3c3a5506 wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x519e82bd wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6a4e5f32 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x809e88c1 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x8b540c23 wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x9e10e982 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x9e6f5c14 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xbdc0db28 wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xca7bddb2 wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xf8051272 wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1995b4d0 wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2288d53e wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2523a52c wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x28132023 wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x2c5e83c5 wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x35d04a01 wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x3e23897d wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x989e01e6 wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xb925cc77 wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xd74d8356 wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xdc78f834 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xe56200ed wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xef72f04f wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xf762c46e wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xfd054690 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xff610033 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x1cef83ff wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x9ab4ff4e wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xca4ab458 wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xd1469407 wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x860ea819 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xbe19eaee cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xc56a590b cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xfdf1afb1 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x05c44095 sdio_readsb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x09593f1a sdio_f0_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x19765a16 sdio_memcpy_toio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x1ada45e2 sdio_claim_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x1f6d6cd5 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x403381af sdio_writel +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x4059923c sdio_unregister_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x42eadada sdio_writesb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x488047f2 sdio_claim_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x499b2f12 sdio_register_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x674c872a sdio_align_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x7b9a496b sdio_readl +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x843a05f9 sdio_writew +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xa099ee01 sdio_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xa2653ef2 sdio_enable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xa88232cf sdio_disable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xd2b6fac6 sdio_f0_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xd480c932 sdio_release_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xdb626d84 sdio_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xe4437e04 sdio_readw +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xf7dfee62 sdio_set_block_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xf831ade1 sdio_release_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x163b8e99 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x27bf4d0d sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x59c8006c sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xe9dc94be sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xeffca390 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xfe0b9d2d sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x32809f6d cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x4dea779b cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x64f08c38 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xb4df896a cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xd2339a60 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x18af3ce8 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x42c063f7 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x4e1240ad cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0x29905ea0 DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x37436a51 DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x86741811 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1242a78c register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x17483436 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x26986602 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x282319b3 del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3277146a mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6d6bd3bb get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x707b6d64 add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa1d5e7bd register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xad4593d4 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb4f78a1b mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xbc4b0527 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xd95a90d1 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xeb71ebdf kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf718d5b2 parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf83f1630 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf9f63df9 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x88280b03 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xaafd76ac add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xd5b6c105 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xdb785578 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x34f6503d nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x7bf0a7b1 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xcdd04f88 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xde6046c9 nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe9647904 nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x0ad61536 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0xe5704e75 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x0072738e ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x01390418 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x025f8c81 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x43e39837 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x46b86088 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4c03fed2 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x56c48d6a ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7d4714b7 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8cff66bf ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb0eb5cc1 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc26621a ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xe66e6a9a ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x007d0114 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x13060cf9 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x395c450e can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x4cb1d0da alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x4f9a2960 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa17ba7dc free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb105258c close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xda777ff4 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xde63efef can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xf55f524a can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x150a6f4e free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x41b59387 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xd02b22b8 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xed304855 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x07e3c186 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x088562e4 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0b279bc6 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0e59f971 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x17ec3691 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1bc42769 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x20db2b92 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x22197dcd mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x27db7176 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2de8ea58 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x306e9e10 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x45f48e63 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x461b2a8e mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4b38fcc8 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x4f782fd1 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x50006c8e __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x540af10d mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5e772bb7 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x64d14cc6 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6fc47443 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x730b9ae5 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x74b8e815 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7a3ed377 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x82ca9fca mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x840c8712 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x900c174f mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x92a65cba mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9a395476 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa05bb48c mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa1e61bb1 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa4db27ec mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa7005295 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaae852cc mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaff3b14b mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb8ec57f3 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xb9de2141 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xba4721a7 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbe62787c mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbeda3f8a mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc1d357b2 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcbd146a2 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd33df259 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xda47a1e5 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xda980ad4 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdec81be8 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdfdcb3c7 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe35bd961 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe4b1fe58 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xef94c174 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf22d6a31 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf9fb9187 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xfd8e3f5b mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xff48fe29 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x3a1f89ee usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x73a01051 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x3fa61f3d rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x5ec73148 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x612b263f generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x77bde81e rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xd0ba3349 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xe9f2de13 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00154d2f usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00a340df usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x048241d0 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0d187ca6 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x143449e1 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x23daeea2 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x33cb3c37 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4ffb3cba usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x58d1b3b8 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x67c424cc usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x688c4283 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x72e1b8ff usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7413ec5c usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x85a46525 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9f25cced usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xae3f01ea usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb47210f6 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb4972e70 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb5d8b922 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc2b7ace9 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd8a28487 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe9f19496 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf1696ac6 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf68598b4 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3bc7fcc1 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x4ef01ce2 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5659460d i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x722ba0f7 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x97e46fa5 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa5ee8ad2 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xbaf0a3aa i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc7bf09df i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xd4ae8dbd i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe5ac6269 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf3d25544 i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfa2a6101 i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfb3275fc i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x0837258e libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x04e30285 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x23b5f2d7 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x46c35354 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x53e98c9a lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x63345e66 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7df57f58 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x8141342e lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x8c77ac04 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x97e80158 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa78cb25d lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb99291d9 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xe95b3032 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xeb524767 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf2da5c95 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf63098db lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x10b165a1 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x2929935e lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x8e7ab316 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x9fa05e90 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc6489419 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd9854f69 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xdb187339 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xff1f08ec lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xcbd9766a if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xce7778b5 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x43d7de7c p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x52718fb2 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x77316dd2 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x79061c2b p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7dddc463 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9ad455c2 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xb8143e7f p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xe61dfec0 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xeba52543 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x01eb2dce rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0b43b3c4 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0f0e7ddf rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1fe303bd rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2364be95 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3092b87a rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x424a42e3 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x478b17c3 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4987bd17 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4cd96525 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x62e6bd33 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6e136380 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8e3d936e rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x928d8a2b rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x98e3d673 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaf840ab8 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb0e792ba rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc00249f5 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xce619a5b rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd5b6e464 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe0cc6cef rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xebe528cf rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xecd5c7a6 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf1f18422 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x2f408f9d rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x47a2fab4 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x51febecd rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x623a630b rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x64326269 rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x929abd51 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x97f61f1a rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x99712abe rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb0131a3c rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x065aff97 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x14a59db8 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x34f2c5d6 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x432594c6 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x591927fb rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x90ceec87 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x91f5c0a3 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x98162a65 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x98cbb899 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xa1636227 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xb7676521 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xba23f366 rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xcda3aa46 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xd5f4d701 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe72fc3d7 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xf0ecffa0 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x51a487c2 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x51fe7ee1 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0xd3a3d700 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x6fb16873 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x8cf4825f pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x003998ab ps3_write_ctr +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x0bdf50c4 ps3_disable_pm_interrupts +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x0e622920 ps3_write_pm07_control +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x181e55ab ps3_read_phys_ctr +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x1bcb88c1 ps3_write_pm +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x2abf1471 ps3_get_hw_thread_id +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x2b339635 ps3_disable_pm +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x3c71a6b2 ps3_set_ctr_size +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x4a24996f ps3_lpm_copy_tb_to_user +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x50488f64 ps3_lpm_close +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x58e642c1 ps3_lpm_copy_tb +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x59c54782 ps3_set_bookmark +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x5eca6711 ps3_get_ctr_size +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x60e3f0d7 ps3_read_ctr +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x6702a28c ps3_get_and_clear_pm_interrupts +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x69010c19 ps3_set_signal +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0x70177200 ps3_write_phys_ctr +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0xa76ee01d ps3_read_pm07_control +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0xaa190bc1 ps3_read_pm +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0xbb72a01c ps3_enable_pm_interrupts +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0xce72c9c0 ps3_lpm_open +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0xdddfc980 ps3_set_pm_bookmark +EXPORT_SYMBOL_GPL drivers/ps3/ps3-lpm 0xfae0ab68 ps3_enable_pm +EXPORT_SYMBOL_GPL drivers/ps3/ps3stor_lib 0x0c718b95 ps3stor_setup +EXPORT_SYMBOL_GPL drivers/ps3/ps3stor_lib 0x95a8e510 ps3stor_teardown +EXPORT_SYMBOL_GPL drivers/ps3/ps3stor_lib 0xce683abe ps3stor_send_command +EXPORT_SYMBOL_GPL drivers/ps3/ps3stor_lib 0xf57335f1 ps3stor_read_write_sectors +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x4d2361b8 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x6ee00634 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x78e059c5 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xc7897bff wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xeb00072e wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xfa702eb3 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x81d30a93 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x41f670d7 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x4ca42ff7 scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x803132c0 scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x87256b2c scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xaf86a658 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xb0316814 scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x43524667 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x08318485 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x12ecf72e iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1639d811 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1e6f0e25 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2152d10f iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2e43de98 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2e75853a iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x33051089 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x34dfbb9d iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x376f76c7 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3b53964e iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4490d32c iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5050daf2 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x56cd75e3 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x57ae66af iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5e589f9c iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76449a5b iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x769c5668 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7bff8b11 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7c7a190a iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7f785f58 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8190485c iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8b819193 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9768dbdc iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa07242c1 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xac96747a iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb5459c11 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb8a800aa iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb8d3e4b6 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb93bef83 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc20d69c9 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc8787aa6 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcbb608fd iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd438c240 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd5bbb619 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf20c1a61 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf3b2acc3 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf6067369 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf6831db8 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf76ff578 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfdc03f51 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xffd66538 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x10da6763 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x15e15b9a iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1be868f0 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1f87a68c iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x29e906aa iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x2e405caf iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3289471d iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x40ea7d6b iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x449916c1 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x6158840b iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x7a5d6df7 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x7fb82a29 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x90dd98c3 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xab6698e7 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe0593d9e iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe0eb7d4e iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0ca5cb44 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x151fe04c sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x329db367 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x32cbaa62 sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x365e91fb sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x49595547 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5a8b9fa1 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5fea054f sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6327854e sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x656e12a5 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6e29b291 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x78b64324 __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8ea48a21 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x90193d45 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x91e18fee sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x95902550 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x960f0b9e sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9c4ff588 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xae81ab67 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb97a085a sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc3ca668f sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd8058cd5 sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe50bcb2c sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x102f28ad srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x275726bb srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x29067426 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x394db7a1 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x7f90fe15 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xe3866d52 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x12608f03 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x318a36ef scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x3cd5288c scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x41b749b5 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x434ff1a4 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xa77fc64a scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xb4d54400 scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xc8c21470 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xe83e54b8 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0341b104 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0cb72c19 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x27bb9966 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2956e9c9 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x40e2c94e iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x413ed622 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x45e552c4 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x487b1140 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4905fdfa iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x69d99af3 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x70be6d71 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7205316f iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x882ee7f0 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa01c177f iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa5fa16be iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa7410ce0 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xabcacad5 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc863e00e iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcbcac464 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdb896090 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xe5c30a02 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf2834efd iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x1686a01a srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2b0a82c7 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x2ebadeca srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x93df1886 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xbbc54a9e srp_rport_add +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x03e111fb pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x144a74f4 pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x6650ab12 pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x73b7b463 pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/serial/serial_core 0x5be872a5 uart_console_write +EXPORT_SYMBOL_GPL drivers/serial/serial_core 0x7971734b uart_set_options +EXPORT_SYMBOL_GPL drivers/serial/serial_core 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x0a6bf9d0 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x32ea520e spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x4e0fe88d spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x63577300 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xaa9c2a0b spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xdb417392 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/uio/uio 0xb29e6459 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0xb5a1d0f4 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xe1e99ea5 __uio_register_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x0e29a243 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x5abf4940 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x16a34588 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x26865291 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2855cd20 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2cedfeb6 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2f4ff74c usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x779d8d13 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x8423a2e7 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9343913f usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb69d48b1 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x10d3c488 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x29165e7d usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2cf4aaba usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x381892ec usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x46ee8d51 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4b4fa025 usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5f8d3148 usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x72b2e307 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x73c68436 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7c17e9d7 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc168a129 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xcce9a886 usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xde51ad46 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xdf64a7f4 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xec7fd193 ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x02f5547e usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1935c38c usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1f7977ee usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x224c7b1d usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2700c6a0 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2eb8fa48 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x345f9877 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x36b79deb usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x375ae023 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3789df05 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x428a97b8 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x437d0be4 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x44090f75 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x6a564933 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x79684398 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8c0ddcf1 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa92d99f9 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xaa4a0154 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc1e7698d usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc5fdf4fc usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf1789e33 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf4438677 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfc9773e7 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x3cf9a941 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x515b50db __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5b0fc154 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x732ca9c0 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x76c3746d rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xdbb72909 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2aaf40ff wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2b6d5b0b wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x3c7adc6b wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x3ed62b6f wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x50f0d66f wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x592446ab wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x730233ae wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x77cf9e91 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x80456395 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x833de6af wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9dd751b6 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xaee070b8 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe51b7aab wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf775e96c wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfb77c723 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xff16a283 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x0db076f7 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x3526f9fe i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x8e8fe892 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x2db520d6 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x5a2021f4 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x7e327f6e uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x95abe5f6 uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xada3da70 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xb475fabb uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xe68f7c7e uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xf02dcf48 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x11e28f4b umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x173631fc umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x42ceb00b umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x6b8df35a umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x79b5c2f5 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xded23a45 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xe2442bf0 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xea89e0b0 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x050302f4 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0a947f6e uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0fd42e7e uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x12423f40 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1d7174f1 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2492f658 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2570e4cf uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x27f31f5f uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x29b11d03 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2ac49cda __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x33d45804 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x404e5894 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x43a74582 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x44d9a995 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x53a227b7 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x56fbf7ea uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x576a4dd1 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5c2382ba uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5d3afff5 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x60149b9a uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6b9377c5 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x70cf44f1 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x73c5e85b uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7adff735 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8cb42db6 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x95c18e3e uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x96ab6167 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa15e5e50 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb80717ec uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbfde3de7 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce9d3492 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd145a03f uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd3cd35cf uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd91d48a9 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdc8cb1a2 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe3046ce3 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeaefd469 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xeb4cab9a uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf4e0edc1 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf6995b32 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf7ca313a uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x2021013b whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x0ccb6bb5 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1487df69 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1e639b57 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1f113e11 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x253e8b91 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x29a495ae wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2eddf177 wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x34e84195 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3a0e9141 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3fa1a8e6 wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x46bdab82 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x46e3b691 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x46e9a1d5 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x484f0edc wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6e691d85 wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x74508c62 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7a7ecd15 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x7def82ed wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8b73520d wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x94473acb wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x9c13a380 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa014ab0d wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa5ecc285 wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb601b4d8 wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb871b8ca wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcea704bf wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd5b36734 wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xd7ab2f61 wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xef7635ce wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf7c2484e wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xf94ebca8 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xff0c39d2 wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x0c08adb4 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x3c187bb1 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x46590331 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x49161490 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x8ebbf511 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xc6892f29 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xd60656dd ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x16be8828 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x43a321ac sis_malloc_new +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x3534933b register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x5037089f unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x8af15e89 unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xbaea3441 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0xf1f7b670 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x2fc19f61 vring_transport_features +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xb19a426d vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xb470859f vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/w1/wire 0x04499c62 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x30a90476 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x31943181 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x39463f30 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x767d1d30 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa53a501c w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa9aca16c w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe657b549 w1_reset_bus +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x614394e7 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9827f23c dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xd0b567ee dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xcfa44a2e exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0xfaf218ad exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x1049eaed fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x18426584 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x29b8f2f8 fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0x38c86fe0 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x493d9e12 fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x4ccb1052 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x4ffbc50c fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0x5384e43f fat_search_long +EXPORT_SYMBOL_GPL fs/fat/fat 0x57570e48 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0x5baf9a5c fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x5df7fc52 fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0x63e65f6d fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x905967a1 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xa8a4e81f fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0xb42d3920 fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0xd5bf8fa9 fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0xe9c73d14 fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0xe9ea8728 fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x422e4bed nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x45607920 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x4582ed69 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x91047b5f nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xca19e376 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xaaba307f nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xc902adbb nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x0bb551f2 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x12179dc3 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x3a6a9752 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x521e0726 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x95265d86 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xca819aac o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1aa7efa o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf3ebabcd o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x2b5f5a99 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x4068e79f dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x41d1a8e7 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x5f6caec8 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x8a832cd5 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xbef1608a dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x451845a4 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x55bd3b36 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x7a3df7c5 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x2d0df0d4 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x3efcfbd1 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x898bf470 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0xa7172595 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xcda18736 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xda92a39b garp_request_join +EXPORT_SYMBOL_GPL net/802/stp 0x62c00c37 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x7e39732d stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0xc0f0acfd ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0xa37cdf6b bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x030bfae8 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x060bd3cf inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0b7d4413 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x114347a0 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2efac293 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3028132c dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x31598b97 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3a4b0026 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4078e875 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x40bb905a dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x40c60f18 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x51c766e3 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x521fcce0 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x585b601c dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5ebfc128 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6c80ac21 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7dfe5528 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7f6ffabf dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x850e8e85 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x88f28561 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b4f711e dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x94657245 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x94dcb88d dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa87f4735 dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0xacce266d dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb1b13869 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbb994741 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc17af03c dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0xca460b8d dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcadcad31 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdd1eec08 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe1ab0c05 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe99d2c86 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe9f0f7de dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xecd4a3ec dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfbfee55f dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x3680f721 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x474032d2 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x64c7ed17 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x9870d04d dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xf9b17301 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xfcd491d3 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x252354f2 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x0c16e6e4 nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x1c3b412c nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xa18bd777 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xc6c363d7 nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xd1ed9a28 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xd8b2dc63 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xfdecdd8c nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x4e93dfed tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x68455805 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x7199ca21 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xdbb4175c tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xdd130cfb tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x040f426a ipv6_dup_options +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x0fb4b335 ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x42a8f7fc inet6_csk_search_req +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x55afc372 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x613b6428 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x98525ceb ip6_dst_blackhole +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x9ec8fdf9 inet6_csk_xmit +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb1797a60 ipv6_opt_accepted +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb6fcf966 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xbbe5eb7c inet6_destroy_sock +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xd622f16c ip6_local_out +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xd6e73d89 ipv6_find_tlv +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xda6fc4f7 ip6_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xdbc3a78d fl6_sock_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xdf3ef5ff inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x2d31546b ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x88d78d4e ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x02c2c3f8 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0348540c print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x097008c8 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0df21439 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1158d44c nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x150ae994 nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1a7eae02 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1fc69ed8 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x236b7076 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x263fbeea nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x27a237ea nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2acecbd1 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x301bb112 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x30bd78ea __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x30f4a17a nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x322761d6 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x35d02cec nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x46bc4263 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4eff5d12 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4f7386dc nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x52b7e7d8 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x53bb215e __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x584eef7f nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x59634cf6 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5b9ab56d nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x63e82be6 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x698df41f nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6bd44db0 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6dd2b501 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6f385f5b nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x77a64708 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8227682e __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x83c29bb1 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90116757 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90f3e12b nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x95324d52 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9aefa184 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa2329d52 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa3374ac8 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb079820c nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb7078fb2 nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb9776bf2 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbc105f88 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc065b80a nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc2849685 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcfe03295 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd076d75b nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd6b1577f nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdc8b8009 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe48735fd nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe4c3c6d2 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe552908a nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7a6eabd nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xea6de3e4 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xec2bc71a nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeff521e7 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf3212e92 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf5fb2053 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfa2c34bc nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd8353a2 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xff81fad7 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x516e8dde nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x52722085 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x02a6c15e nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x0615f22c set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x0faef653 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x2f675429 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x4b371cfa set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x64c4f325 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x69e57b0e get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x9a8c1ff3 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xa15bd3bb nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf3a13d8c set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xd1a56d04 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x3e2ad3a3 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x85c407fa nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xba829af0 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xeb8d4c92 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00af05be nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x4eb5ec8c nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1aa6bb7c ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x250871fa ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x264e18c7 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2eb42cdd nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x5d1cfb52 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6302b72c ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x727dc7f5 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x88584c51 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x94cba305 nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd11040d7 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xf617ece0 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xff40d186 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x3ee1c6b0 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x42c06afa nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xa820c2a8 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x0f22a3f2 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x357f9f3b nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x4e144e58 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xb3ab4db8 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x4af12e2b nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x013382b7 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x26d79b3f xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4e914a99 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x542f7077 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5709107a per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f088e12 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x684694c5 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x68b5430f xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6f9aa2fb xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x75e0bd23 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7e02aecf xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x87928111 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x8b4bcef1 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x933b35e0 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x999fec69 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa8ea75f0 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xb55e84e3 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xc346190c xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf3395232 xt_unregister_table +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x4a289b93 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xa926cb32 rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x34a796fa gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x48ce2c07 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x656eafdd gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x6f03dd96 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7486a1d8 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x76a51f36 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x9114b218 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb6e627c5 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xca1d8bc2 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe79b1eb3 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xff3fc2fc gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x007eb977 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02bb0ee4 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0422fb22 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05cfc197 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x09afd441 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e2ee36f svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0efcda21 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12506088 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14238845 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15d3ff7a auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16208df6 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x166cfedf rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c7490db xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1e88d59f xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x20f36f4b rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x22a46c60 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x232de69a auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f0d4d83 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f73cfe8 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3057bf81 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x329acec0 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x34ed3299 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x363b8f0a rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3dc342da cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x40673895 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x412a1c03 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x42787dfd rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x42ec207e svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43e94b4c cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x457f6ad7 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x466f7cd2 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4a7bb8cc xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4ce8a8a7 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d3148f1 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50fafff9 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x57fe9c39 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x582797c0 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5c9b6f04 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e71bb9e rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x60185b49 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x603b045e svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x60962fb5 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6098f035 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6155c5df svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6301411f rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x63feb5a7 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x658243b0 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6889539e svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6cfe0aa9 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e213afd rpc_exit_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6fbde90b xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x702b5dee rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x710aa410 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7231219c rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73494578 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x75e44982 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76698e67 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x775adaf6 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x77e49e20 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7a56187e xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7c79223d xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e5d45cb sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e7b5914 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7f8fa080 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x840f139b cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x875f5847 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x88d1501b xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x892a3b14 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8d6e2083 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x904ae6eb svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x92c9d54e auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x944790be rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96266bb7 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x976db9ae rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9a8b95ce rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9b4e5d8d xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9bc8b036 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ca0b3b0 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9e208c1b sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa2f4203c xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa4d291a9 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaae1bc43 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xabeebdf9 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad163ed3 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xadabc398 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafd06fce sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb1cb76d6 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb1ece173 xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb5cca1f0 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb80fd714 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb90f1a31 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb9396653 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xba4d5ad3 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbb976049 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbbfcedd2 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbc7686d2 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf1ada9e rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbfda1131 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbfda1846 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc418645d rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc52a1089 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc713820e xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xca96110f unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcb83f5c6 cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc22fd0a rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc2cad0f svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd1a71be svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcd49fd1b xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcdf5a940 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd12ed671 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd35413dc svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3eec5ad xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd4301813 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd60ce7e3 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9662a28 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc7b6dde svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdd029aa7 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdd87fec7 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf66b494 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfad1711 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfaf56c7 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe0516022 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1017278 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe22cb56f rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe4f7de00 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5eddb35 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6ac66b5 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe7b5a008 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea8dffe0 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeb6e6680 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xebe62dd6 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xec802db8 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee75973c rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xef18f946 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf3ffa088 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf44e85fe xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf4e73d20 rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf8373f30 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfe030d94 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfe24ce0a xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xff45e4ae sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/wimax/wimax 0x16fd483a wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x1cdbf371 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x1d65aa42 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2691e3a8 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x26f94198 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3c58daab wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x50c18c73 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7e3b0205 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x8eb20aab wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x96cd9b1a wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe467d239 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xedfd25c1 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf3637af7 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x02b53caf cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x06428e67 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x102d2f34 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x12bb5af6 cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x1ed6808a cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2728a305 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3dcbcf8b cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3fa16438 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x51d807dd cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5f49f2a8 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x62acdb6e cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6430cf10 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x644710f4 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x66a725d6 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6abdf489 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6c5ea48f cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6d09040d cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6d663235 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6f7c7627 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x72bda9d8 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x91bc2d01 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9b52fac5 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9e19f262 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa86d53db cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb1a0c8b0 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb74398b6 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb9b97ccb cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xbb3c7de4 cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc6fb5135 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xccb19257 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdc44a842 cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xe46b5170 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x017fa8c0 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x4d4390b1 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xb3920db8 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc42e8597 ipcomp_output +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x3ab2440d pmf_gpio_methods +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x5a95e8b2 aoa_fabric_unregister +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x6ed7bca4 ftr_gpio_methods +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x6f24e8df aoa_fabric_register +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x789645ed aoa_get_card +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x85ff7e31 aoa_snd_ctl_add +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x9397bc69 aoa_snd_device_new +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xd2667ef0 aoa_fabric_unlink_codec +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xd499e40a aoa_codec_unregister +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xe6826085 aoa_codec_register +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x384f3994 soundbus_remove_one +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x5adb0ea7 soundbus_add_one +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x7fb9af09 soundbus_dev_put +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0xa605b4f2 soundbus_register_driver +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0xd96020be soundbus_unregister_driver +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0xe39ed511 soundbus_dev_get +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x002d96df snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x07c9c5b7 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x126cb2d9 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1488fd98 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1d19af94 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1d5e3328 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1e9c52e6 snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x218bb395 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2e33db75 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2e44e3e0 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x32832d97 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x33fa7db0 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x35865d0a snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x359e1292 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x380b55ed snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3d20ac02 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x44a26786 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x46c722d2 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x474e0792 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x48bdf7d7 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4a9f9674 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5129458b snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5464283e snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5647799e snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x596a2359 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5975c560 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x608416c8 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x63bbdfe0 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65a69594 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65b209a0 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x67348344 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6bbd17f1 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6c43b719 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6e83d816 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x74ee61fb snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x786136e0 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x78b396d5 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7b9153f3 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7b968251 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7e9f80c6 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x82fde8d2 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x84d940e8 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x88107285 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x892787af snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8bfaa0eb snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8cf02951 snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e1de048 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94e5970e snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x969864ee snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x97af274c snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9aeb410a snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9cc196b5 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa580055e snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa7257ca6 snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa7e49a5b snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa85acc29 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa87b5d7e snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa8ff3e30 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb8f1dba1 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbbe9215d snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbf363783 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc6343f5d snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc77f3c22 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd19c6477 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd4751b5b snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdcae53d4 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdd8fbb18 snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xddc05bb1 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe15cba54 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe4b1d4fc snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe82a72f7 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf0a0112f snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf219ba5a snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf6f0f0fa snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfe0c3079 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xef2d309f ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xf4087248 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x198d5171 ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0xd23738a3 soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x3fa60ecf ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x6680e90c soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0xe4f012bb soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x14f9c4f3 soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x49204922 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x1f0d40f7 ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x4c42eb5f soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x8b728d46 cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xef7cff0b soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0xea42a615 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x20e1f1c1 pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x7c96b336 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0x9cb1c941 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x7723b6fd soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x8906d958 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xc6f538fa tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xff3ad594 soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x7d8e36cc aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x97a1c31f aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x0484a3b7 aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x15266e08 aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x37715998 aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x776cca8e aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xa135a6f6 soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xab588ca5 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xe249e7ee aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x586e3ac6 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xd8ae3ef5 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0x191658f0 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x28ac6499 soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0xea2e4f11 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x46ba24aa wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xceaa64f0 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x0ea5c4ac soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x1d0e2dfc wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xb8e9ebba wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x95b93efe soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xe014cd04 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x231b4463 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x7dad4330 soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x54c6aeaa soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x94672c50 wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x1f62eb12 wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x727c78bf soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x1d3bbfea soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0xbc85dbee wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x3dfd8192 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0xcd3b6e94 soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x9571670d wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0xd0ad2367 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0x8817d419 wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xfb8070a4 soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x6dbff10c wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0x8573508f soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x36b996bf soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xd2c35a98 wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x1d94c57c soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x54572836 wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x268c7e8b wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x31b03e63 soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x3234ea0d soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0xb1136fa2 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x2b2fdb4c soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x7a4fbc07 wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x2aedb17b soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xdc38b7b3 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x579a453e soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x8cf52600 wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x0d7f9692 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xf0734d0f soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x3968ad30 soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x475b1f4b wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x1245fef3 soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xc1cf6de5 wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x2244c832 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x61d9907c soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0a83f05a snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0c78458d snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0e1b0353 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1082cf2c snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x125a1f55 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x183ed712 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x191aa3b8 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1ec66384 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x20158e3e snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2330f144 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x26719390 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2d02263e snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x304525de snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3c8a24cf snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x402f4859 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4065d4c0 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x488d8806 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4c16f54f snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4e0750e1 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4ff96371 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x51ca6cc5 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x566515b5 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x57272fff snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5d9d24bd snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5e1a3d9b snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x62b31398 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x68468e80 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x694d70ae snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6a0859ab snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6a7b3fc7 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6facf20e snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x75a103dd snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x79b948f4 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7b5e0195 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7db4fd98 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x825a2bfb snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x843a7e38 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8b5dc88d snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9966f066 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9a0566d3 snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9ae25fd9 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9eacad25 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaf9af2b7 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb09ffde3 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb8f052ce snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb923a104 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb9f69b2c snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbb200ce7 snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbc18a9e0 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbe4c09dd snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc7b91d83 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc82daf1b snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8a9f1f5 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc960656e snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc98c7a8c snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xce310329 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcf3919fb snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd1663000 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd8db6f63 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdfb80b3c snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe1bb436f snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe5c5f648 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe8c8f367 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe999d55e snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf45b97a8 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf4f92231 snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf700ac2f snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf8baee09 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa5d4752 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfcb23392 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfe17dee4 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x1f621eea xv_free +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x6a874429 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x9c6a0365 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xd85f1692 xv_get_total_size_bytes +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xe0cf8249 xv_malloc +EXPORT_SYMBOL_GPL vmlinux 0x000ebd0d class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x0043f2d0 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0056ea20 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00750ae9 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x008fb72e bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x009a78ec inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x00b8ecf8 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x0168ed6a spu_priv1_ops +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01bd2262 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x020738cf get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0x0213bc18 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x0271031c ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x0272923a usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x027655e2 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x0286959a crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x028d8178 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x0308536b bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x0312e5ef usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x0316e48a vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x031f0a7e scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x03573f6b sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x035bf2b9 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x037cca4c transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x039785a5 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x03c8eeb8 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x040aed2c cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x04574a43 spu_management_ops +EXPORT_SYMBOL_GPL vmlinux 0x0458d0d1 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x046f0888 ide_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x047eee15 pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x04a671c3 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x04cfb6dc ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x04ea8706 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x05263d71 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054596fa debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x0561d9d2 ide_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x05876361 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x0591043a dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x05df0433 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x05f07235 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x06639037 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x06bb16ec crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x0712ee96 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x07482bf6 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x07539e2d __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x076f7ea3 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x079e2d80 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0890d0af ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x08c54bf2 fb_sys_write +EXPORT_SYMBOL_GPL vmlinux 0x08d86306 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x08d8708f cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x091c824a machine_power_off +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09e69c9c inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x0a0aa7c3 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x0a2ff04e blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x0a3236a0 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x0a36016b of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x0a50e970 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0a51ae5b virq_to_hw +EXPORT_SYMBOL_GPL vmlinux 0x0a5811d6 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x0ac18a27 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x0acd19eb cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x0ae0dc83 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x0af97a5d usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b5d8cc5 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x0b5fc56c register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x0b764110 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x0bae37ae debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x0befec81 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x0bf03ce5 ide_pci_set_master +EXPORT_SYMBOL_GPL vmlinux 0x0bf669ae pcibios_finish_adding_to_bus +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c343a0e usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x0c50872f skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x0c77106b dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cc8a39f rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x0d421d91 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x0d7809e2 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x0e2df085 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x0ecb74b5 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x0f13ae15 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x0f46bfb8 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0x0f7e1b51 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x0f974925 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x0fae9800 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x0fc885ad attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x1034464f crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x10822c94 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x108fa573 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x10a13d05 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x10b6d8a4 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x10c45a5d __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x10e242c7 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x11577d2e debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x1194a8af usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x11d5585c crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1265ddc8 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x12e36430 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x130a01b8 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x1333d8b3 ps3av_video_mode2res +EXPORT_SYMBOL_GPL vmlinux 0x135a2f0f pmac_i2c_match_adapter +EXPORT_SYMBOL_GPL vmlinux 0x1363aa3f uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13bff38b srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x13d0130e input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x14104b6a mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x142e9cf2 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x14519993 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x147acb09 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14c41964 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x14cfefcc pmf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x14d39a1b device_register +EXPORT_SYMBOL_GPL vmlinux 0x1502201e do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0x156ad767 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1604f71d invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x168eff99 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x16c8e5be ps3_mmio_region_init +EXPORT_SYMBOL_GPL vmlinux 0x171a6fca ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x1769f5b6 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x17cff149 macio_find +EXPORT_SYMBOL_GPL vmlinux 0x18041eb7 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x1813953e regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x18596844 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x1866e831 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x18c7a544 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18ee7395 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x193a5479 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19a5e586 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a6426b4 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x1a6776cd init_phb_dynamic +EXPORT_SYMBOL_GPL vmlinux 0x1a97d5fd platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x1ac717e3 ps3_os_area_get_rtc_diff +EXPORT_SYMBOL_GPL vmlinux 0x1b3f563e inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x1b708a62 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x1b9261a2 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1b9cd20e ps3_free_mmio_region +EXPORT_SYMBOL_GPL vmlinux 0x1bbe8358 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x1beca969 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x1bfafa30 pmac_i2c_attach_adapter +EXPORT_SYMBOL_GPL vmlinux 0x1bff8ac0 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x1c1c41ed pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x1c216c22 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x1c3af716 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x1c69197f ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x1c7127b2 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c8b130c usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x1d88b7dc ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dce21da tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x1deb1c5e ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e7e2ca2 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x1e8fe367 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebae5e4 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1f67dda2 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x1fc721a3 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fe970cb ps3_io_irq_setup +EXPORT_SYMBOL_GPL vmlinux 0x1ffb57b8 usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x2005f6bd eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x20332c8f pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x2073f39a dm_put +EXPORT_SYMBOL_GPL vmlinux 0x20989d06 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x20ba7bd8 ide_dma_host_set +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20d1ed64 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x212d9fa0 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x214e60da drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x21b6e2f2 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x21c9d9d7 ide_device_put +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22d87b9b unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x22ddbd22 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x230c551e crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x2356a135 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x23846d57 ide_dma_start +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x238a1f3d da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x238d905a __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x2396f4de fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x239b286b elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x23c51155 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x23f7a4c7 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x23fc87d0 ide_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x240d80f6 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x24202ce7 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x242d21d9 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x24836841 find_module +EXPORT_SYMBOL_GPL vmlinux 0x24cda041 ide_vlb_clk +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x250c89c4 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0x252f91a8 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x254e310c ps3_os_area_flash_register +EXPORT_SYMBOL_GPL vmlinux 0x2560ddaa sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x2571ce59 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x25e1bc8a crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x2657e720 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26d1abb2 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x27114aa0 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x2714a2b9 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x2736d3ed destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x27390247 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x276cf9b5 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x278005cc ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x279e14c6 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27b1425f class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x27f25e46 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x285fb07a bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x2879df4a pmac_i2c_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x28a73bbd ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x28b849e4 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x29a62595 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x29bdf8da pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x29d1fc52 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x2a1538ca lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x2a16af4c tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x2a1af3b5 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2aa09df3 sysfs_add_device_to_node +EXPORT_SYMBOL_GPL vmlinux 0x2ac0c745 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x2ad32093 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x2b0c0981 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x2b503cca srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2bcaa8e3 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c02a7ae filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0x2c077c6b sysfs_remove_device_from_node +EXPORT_SYMBOL_GPL vmlinux 0x2c07f8b3 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c6da152 ps3_vuart_write +EXPORT_SYMBOL_GPL vmlinux 0x2c784528 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x2c7a6c0c rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x2c7db649 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x2c7ef7a9 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x2cac7036 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x2cb1b635 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x2cd0e99a class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x2ce5a9eb platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d35fb04 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x2d40e66a spu_associate_mm +EXPORT_SYMBOL_GPL vmlinux 0x2d63fc1e sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x2d6b402a inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x2d79afb9 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x2d9a35f3 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2dbcc9bd invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x2dd62868 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x2e005781 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x2e1d43cf lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e94a638 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x2eced321 ide_dma_end +EXPORT_SYMBOL_GPL vmlinux 0x2ed5b7ef rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x2f09b620 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x2f1802bc scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x2f1897db ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f55c8b9 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x2f764350 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x2f93028a tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x2fa4ac31 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x2fa62849 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2fd1e490 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x30a6326a usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x30e80b89 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x30f182b5 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x311b78c2 ps3_get_spe_id +EXPORT_SYMBOL_GPL vmlinux 0x3152fc51 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x3157a951 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x3167ee10 cpu_remove_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0x31a19544 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x31a3a3e2 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x31c377ee class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x31e12cbc register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x32310c3f usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x3246da0d ide_dma_test_irq +EXPORT_SYMBOL_GPL vmlinux 0x327d6060 ps3_mmio_region_create +EXPORT_SYMBOL_GPL vmlinux 0x32d37f96 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x3309ea64 ps3av_audio_mute +EXPORT_SYMBOL_GPL vmlinux 0x33886e23 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0x33b2fc7a ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x33be3659 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x33f114a0 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x33fe4be3 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3459d2aa input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x34f76012 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x34f7fe53 spu_get_profile_private_kref +EXPORT_SYMBOL_GPL vmlinux 0x354aa463 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x355041fb init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x3577a6aa usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x35a279bc irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x35bdf60f driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x35ee3dc5 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x362f0aac dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x3658b366 user_update +EXPORT_SYMBOL_GPL vmlinux 0x369647f3 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x36b26b1a devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x3742f944 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x374574fd ide_read_altstatus +EXPORT_SYMBOL_GPL vmlinux 0x3774ef3c xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x37bae35a da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x37bdd472 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x3801fe6f ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x381add1b uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x3824e726 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x38738c95 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x38a83c50 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x39380596 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x39485de0 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x3952e0d1 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x3993566e ide_port_scan +EXPORT_SYMBOL_GPL vmlinux 0x3997caa0 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x39ae37d2 ide_get_best_pio_mode +EXPORT_SYMBOL_GPL vmlinux 0x39b1f227 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x39cf4042 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x39eaea6e register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x39ff78ae power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x3a18b99c rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x3a4ad087 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3a6bbe60 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x3a6fb9d7 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x3a723c15 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x3aa18ff1 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x3abbd219 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x3ad70038 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0x3b1c5afc ps3_vuart_irq_setup +EXPORT_SYMBOL_GPL vmlinux 0x3b62afd1 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0x3b8a244d sff_dma_ops +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3bed1ba6 ide_retry_pc +EXPORT_SYMBOL_GPL vmlinux 0x3c17d5f1 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x3c26913e tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x3c6944b2 cbe_spu_info +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c7a7a24 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x3c842d98 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3c9c0013 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x3caeb1eb driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3ce7e0af disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d260949 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x3d2a08ce scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d42b290 fb_ddc_read +EXPORT_SYMBOL_GPL vmlinux 0x3d4ca498 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x3d4d13fd bus_register +EXPORT_SYMBOL_GPL vmlinux 0x3d765c14 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x3da3f250 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x3dccbe67 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x3dff5d2a sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x3e13b99b cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x3e1ae0b3 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x3e31f9bf device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x3e5e3b7e da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x3eda7fb7 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f404334 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x3f42894f ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x3f6b8e8c crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x3ffae5fa pcibios_remove_pci_devices +EXPORT_SYMBOL_GPL vmlinux 0x40262eaa transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x40300bb1 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x40774d6f sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40c54fcd enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x416d0c57 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x4171dea1 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x420e8acc rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x423c2e90 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x426107e2 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x4268ee17 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x427d1beb ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x428911d5 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x4289a324 ps3_vuart_cancel_async +EXPORT_SYMBOL_GPL vmlinux 0x42929453 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x42d233ef init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x433bcaea inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x434d7a6b ide_register_region +EXPORT_SYMBOL_GPL vmlinux 0x436d2fdf transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x43e99846 k_handler +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x445c9c9b usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x445ecc00 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x4470daa7 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44bffad0 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x45167d8d crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x4559bfaa ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d037a0 inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0x4601a081 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46d57e5c sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x46d9f955 ps3_irq_plug_setup +EXPORT_SYMBOL_GPL vmlinux 0x46e9e67f __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x471ae0e3 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x4741db42 ps3av_set_audio_mode +EXPORT_SYMBOL_GPL vmlinux 0x474934dc sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x477097d2 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x47acddea ps3_sys_manager_set_wol +EXPORT_SYMBOL_GPL vmlinux 0x47b8ffce __module_address +EXPORT_SYMBOL_GPL vmlinux 0x47b9c768 pmac_i2c_get_dev_addr +EXPORT_SYMBOL_GPL vmlinux 0x47df2146 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x481137a5 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x4818a82e platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x483f90d0 usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x484e0832 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x48d419c0 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x4903ed1a ide_pci_setup_ports +EXPORT_SYMBOL_GPL vmlinux 0x4916b87c pcibios_map_io_space +EXPORT_SYMBOL_GPL vmlinux 0x494013d4 crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x4952c291 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x496288dd sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49c8a79b hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4a35ce21 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x4a46d8ce __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x4a702de4 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x4a8bbcb4 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x4a92467e register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x4a9ed4bf usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x4acde63b ide_error +EXPORT_SYMBOL_GPL vmlinux 0x4ace80ea ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x4b1a288a usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x4b257e43 user_read +EXPORT_SYMBOL_GPL vmlinux 0x4b39224f bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4b402e80 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x4b4bfc2d inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x4b55edc9 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x4b94a517 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x4ba30c67 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x4bf16672 pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0x4c18f773 ps3_os_area_set_rtc_diff +EXPORT_SYMBOL_GPL vmlinux 0x4c652723 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4ca943b2 generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x4d41592c blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4dac6fd8 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x4dca74e4 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x4e0ce89c pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x4e0e179f seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x4e78a00d tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x4e7cbe29 __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x4e7dcdf4 pcibios_find_pci_bus +EXPORT_SYMBOL_GPL vmlinux 0x4eb1d51a scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0x4ed93f7f bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x4f38decf platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x4f5a3838 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x4fd905f9 pmac_i2c_close +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4fe58be1 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4fe6c3ae usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x500aad85 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x5047fc5b pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x50480c45 spu_set_profile_private_kref +EXPORT_SYMBOL_GPL vmlinux 0x50715f8f usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x507de8c6 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x5098e519 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x50b67b52 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f4576c spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x51164d8f trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x511dd7e3 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x5148287c bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x517bc867 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x5194daaf posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x51dec9f6 inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x51f0dd77 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x52121d49 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x52156bf2 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x52191d51 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x52aa0747 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52fddc6e ide_release_dma_engine +EXPORT_SYMBOL_GPL vmlinux 0x531de4e4 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x5324d04f bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x53293c5a ide_get_lba_addr +EXPORT_SYMBOL_GPL vmlinux 0x532add2a hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x5331098e shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x53381d62 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x534426b6 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x5353d379 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x537663b8 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x539772f4 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53ab650e crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x53fab914 ide_pci_dma_base +EXPORT_SYMBOL_GPL vmlinux 0x5405cc88 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x540b4803 srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x5412c9a8 of_irq_map_one +EXPORT_SYMBOL_GPL vmlinux 0x543d2e70 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x546accd0 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x5495cb22 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x549b7a8e ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x549c3558 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x54dde1ce tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x54f5d3dc tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x551ddf0d led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x553008e6 inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0x5552bc55 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x5556186b platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x55b74fd4 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x55cd473f pmac_i2c_get_controller +EXPORT_SYMBOL_GPL vmlinux 0x55f2580b __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x561a7695 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x56305acf pmf_register_irq_client +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x565fba91 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x5668ceb3 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x5699b2ae platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x56add3aa get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x56da3872 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x57306579 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x5801ad52 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x582793af queue_work +EXPORT_SYMBOL_GPL vmlinux 0x583c3031 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x583f58b3 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x585b4f76 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5870a2b1 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x587f92ee ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x5892f832 release_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x5893f6a5 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x58f5daec ide_queue_pc_tail +EXPORT_SYMBOL_GPL vmlinux 0x58f67fe3 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x58fe6071 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x5976900c ide_read_status +EXPORT_SYMBOL_GPL vmlinux 0x59d29b8d kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x5a1058b0 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5a9dbb74 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x5aaa55c0 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x5ae55179 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x5b306100 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x5b50fa18 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x5b5b9d87 pmac_i2c_find_bus +EXPORT_SYMBOL_GPL vmlinux 0x5bae2b6f crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x5baeca75 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c2813e8 do_rw_taskfile +EXPORT_SYMBOL_GPL vmlinux 0x5c5ec7dc fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0x5c622546 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x5d069652 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d65aacb ide_device_get +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d782e82 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x5dd61f1a ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5de9ebc5 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x5e131cd8 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5e506804 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x5e62a8ea trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0x5e769986 ps3_os_area_get_av_multi_out +EXPORT_SYMBOL_GPL vmlinux 0x5ec0ab56 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x5ee7542e reserve_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x5f0744c9 pmac_i2c_setmode +EXPORT_SYMBOL_GPL vmlinux 0x5f3b832a ide_host_add +EXPORT_SYMBOL_GPL vmlinux 0x5fc8eee9 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x602b50ec usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL_GPL vmlinux 0x60ddd7e8 ide_create_request_sense_cmd +EXPORT_SYMBOL_GPL vmlinux 0x60fb5d89 ps3_system_bus_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x614786ea pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x615cbec0 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x619198ca usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x6195960e class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x61a553b4 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x61d1890c pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x61dd1e06 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x61f8053e ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x629b6bac regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x62d04ff8 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x62e1cf74 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x63693776 ide_pci_check_simplex +EXPORT_SYMBOL_GPL vmlinux 0x6377d40c register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x63f4dc09 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x643782b3 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x6466c83f disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x64a49e0f regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x64d194b8 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x64d77dad class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x64e00809 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x652dbb5e bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x653fd94b blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x6544619d devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x6571095a ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x6580f915 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65c47493 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65e36c35 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x65f3dcd7 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x6626852c usb_string +EXPORT_SYMBOL_GPL vmlinux 0x664302ef cpu_remove_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x665c675d sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x667278d1 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x667a3d7e kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x667a4459 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x667a812c ps3av_set_video_mode +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b12360 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66b8985b sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e77f8c usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x67227d17 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x672fa5a1 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x675b3d2e ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x67777cad queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x677a11d5 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67a43437 sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x67c5d198 ide_write_devctl +EXPORT_SYMBOL_GPL vmlinux 0x682e5154 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x687aad04 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x687e9c79 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x688b29e1 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x689e8bea relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x68a51037 inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x68b07ec1 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x68f7cb71 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x695302d8 rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0x69649a94 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x699a2bbe rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x69f4d99d fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x6a39f125 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x6aa7c8f0 eeh_remove_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x6abacb9d part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x6acb8d84 ppc64_caches +EXPORT_SYMBOL_GPL vmlinux 0x6acd05ff platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x6ad68d34 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x6adb3728 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x6b46a024 of_irq_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x6bc1f514 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x6be62dfd probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x6be9c03a inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c81f6dd get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6cb72d9a __class_create +EXPORT_SYMBOL_GPL vmlinux 0x6cdf039d usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x6d2a62df ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d6f74af pmac_i2c_xfer +EXPORT_SYMBOL_GPL vmlinux 0x6d81ded4 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x6d84beb4 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x6d860217 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x6da3cf47 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x6dbaf19f __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x6dc9b354 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x6e416860 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x6e4d9ae6 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6e91ad45 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x6f28e63e ide_set_pio +EXPORT_SYMBOL_GPL vmlinux 0x6f2ad6b7 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x6f41ddf0 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x6f57be23 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x6f5f0990 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x6f6ba3d2 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x6fb99d27 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x6ff7b459 driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0x702dc1d8 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x704153bb crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x708b3cc5 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x709189b9 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x7095b324 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x70ad3fc6 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x70e34ca5 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x712cdc88 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x715efcf3 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71869ed9 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x71cb2f8f ide_read_error +EXPORT_SYMBOL_GPL vmlinux 0x71d8e708 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x720e8cc9 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x72124bed ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x7221e943 ide_init_sg_cmd +EXPORT_SYMBOL_GPL vmlinux 0x7230473e ide_pio_cycle_time +EXPORT_SYMBOL_GPL vmlinux 0x725f449f usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x728b1386 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x729d67b2 ide_issue_pc +EXPORT_SYMBOL_GPL vmlinux 0x72e03bae stop_machine_create +EXPORT_SYMBOL_GPL vmlinux 0x7335900e usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x733c0c9c i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x7346b5b7 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x737d7ac8 ide_host_free +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73d148cc inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x73daad26 cpu_add_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x740d21cb add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x7449c3fc hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x7479a8b7 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x749a0e67 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x75134f02 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x75410dad usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x7544c32d sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x754bdf0b spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x754fa36a __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x755ad7e3 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x756ad801 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x757196b8 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x75a9319a lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x75af8bd3 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x75c3e576 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x75e6e037 hash_page +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x768c3f2d usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x76e26471 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x772d67d0 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x776441bc ide_output_data +EXPORT_SYMBOL_GPL vmlinux 0x7768c782 mmput +EXPORT_SYMBOL_GPL vmlinux 0x77752613 spu_switch_notify +EXPORT_SYMBOL_GPL vmlinux 0x77802ca8 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x77c3ddbf regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x7817f965 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x782a26e2 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x7832aa21 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x7855af40 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x786b2c1c usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x78a4477a tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x7965275e spu_setup_kernel_slbs +EXPORT_SYMBOL_GPL vmlinux 0x7973214c elv_register +EXPORT_SYMBOL_GPL vmlinux 0x7997ab02 pmac_low_i2c_unlock +EXPORT_SYMBOL_GPL vmlinux 0x79ad8c03 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x7a1f63e4 ide_host_register +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7ad43424 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b079903 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b68c7c3 ps3_vuart_read +EXPORT_SYMBOL_GPL vmlinux 0x7ba414b5 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x7bdc043e ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x7c1ddd65 sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x7c35884f __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x7c422f1a inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x7c7d63b0 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x7c8d3d2c sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7ceec384 remove_phb_dynamic +EXPORT_SYMBOL_GPL vmlinux 0x7d008009 get_device +EXPORT_SYMBOL_GPL vmlinux 0x7d85be84 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x7d87f5d6 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x7dafa757 swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e21eb15 ide_set_dma_mode +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e2d29ec ide_pci_clk +EXPORT_SYMBOL_GPL vmlinux 0x7e55b654 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e71209a eeh_add_device_tree_late +EXPORT_SYMBOL_GPL vmlinux 0x7e78b6b0 ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x7effdda2 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f52c522 ps3av_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x7f719393 pmf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x7f7c3ae9 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x7f8f9c23 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x7faca1f2 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x7fcf82ed crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x7fd7aa04 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x800fc832 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x80507f72 ps3av_audio_mute_analog +EXPORT_SYMBOL_GPL vmlinux 0x8073030c driver_find +EXPORT_SYMBOL_GPL vmlinux 0x80806f6d device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x80810847 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x808bd41c force_sig_info +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x809a1e5d dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x80a33bae xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x811afadf rtc_lock +EXPORT_SYMBOL_GPL vmlinux 0x8148562b fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x8162cb8d default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x81e6614b ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x81eccecc firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x82531a39 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82b0213d platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x82d4a946 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x8305d3a2 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x83121180 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x8359078b task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x835b5082 macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x83e9e0a6 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x841610c0 bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0x844492f2 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x848c92f5 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x849fa94f regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x84a9f577 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x84d42003 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x84f1be04 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x851a56eb ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x852463bf ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8538e4bc of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x85539794 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x856a7cd1 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x8588bccb raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85e561c7 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x868a89f3 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x86a1d910 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86b5a852 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x86ccbf22 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x87159a91 ide_unregister_region +EXPORT_SYMBOL_GPL vmlinux 0x873271eb xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87a7f039 pmf_do_functions +EXPORT_SYMBOL_GPL vmlinux 0x87a80156 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x87afc1a2 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x87dbee22 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x87f5361d irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x87f804d9 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x883098dc regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x884c17db blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x89213519 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x892f3281 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x89675cfb ide_dma_lost_irq +EXPORT_SYMBOL_GPL vmlinux 0x89702611 pmac_i2c_get_channel +EXPORT_SYMBOL_GPL vmlinux 0x89bc358c apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x8a0a76f4 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x8a537d1e gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x8a68115c ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x8a93ed11 ide_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x8acdae19 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x8b2e3ca8 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x8b723447 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8bacc368 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x8bbc9bd7 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x8bbedb4a sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x8bc8f44d crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x8c2c163e crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x8c548bb3 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x8c57492e regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x8c5a911f ps3_gpu_mutex +EXPORT_SYMBOL_GPL vmlinux 0x8cc3d0f0 ide_cd_get_xferlen +EXPORT_SYMBOL_GPL vmlinux 0x8cc748f6 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x8ce2f93e mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d0efd7f blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x8d7441e4 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x8d92637c unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x8d9fb839 ide_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x8daca1cf spi_async +EXPORT_SYMBOL_GPL vmlinux 0x8de927fc ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x8deaf4ec usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x8e02a75f crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x8e36fe13 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x8e7f1719 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x8ea38d18 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x8ec9499b ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x8f19228f ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f7a0460 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0x8f854233 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x8f8cd7a0 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fb96745 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x8ff262ea ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x9017222b ide_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x901e3133 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x9045f3e0 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x905577e2 fb_sys_read +EXPORT_SYMBOL_GPL vmlinux 0x90673390 spu_switch_event_register +EXPORT_SYMBOL_GPL vmlinux 0x906ab81e crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x9084117d pmf_get_function +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90c26c42 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x90dcabcd led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x90deabd8 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x9116c337 pmf_call_one +EXPORT_SYMBOL_GPL vmlinux 0x911d0e34 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x917bd6b6 pmac_low_i2c_lock +EXPORT_SYMBOL_GPL vmlinux 0x917c31fc ide_end_rq +EXPORT_SYMBOL_GPL vmlinux 0x9182284b scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x918702cf skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x919e4700 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x91d8e680 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x91e67797 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x9241108e usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x925c597c regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x928e688d synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92f426ca security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x930316c4 slice_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x930618b7 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x9333593a leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x933de1f9 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x9351a1e1 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x935c0405 ide_dma_sff_read_status +EXPORT_SYMBOL_GPL vmlinux 0x938c96b0 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x943272fe input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94ab03e8 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x94b85f63 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x94e64676 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x955ee8ab mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x9593f744 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x95e3475b scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x963ebf1d debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96eefc8e tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x973e6367 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x97bfeab7 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x97da7ac1 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x983955f9 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0x98505cbc usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x98a0d698 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x98c3f114 ide_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x98c62b48 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x99042929 of_node_to_nid +EXPORT_SYMBOL_GPL vmlinux 0x99088db1 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99726a24 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x99a03a82 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x99cea34c inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a3d08b2 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x9a4ed70e ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0x9a761628 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x9a983e16 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x9ac503a7 ps3_sys_manager_register_ops +EXPORT_SYMBOL_GPL vmlinux 0x9addaa20 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x9b3b737f register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x9b4fcdda xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x9b7ced44 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9bcf14c4 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x9be2974b dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x9c1c8cc0 pmf_do_irq +EXPORT_SYMBOL_GPL vmlinux 0x9c2e19e0 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x9c50614e blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x9c749465 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x9c7843ab input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x9c94854e ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x9cabc57d usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9cc71112 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x9cc72e57 spu_add_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x9cdce019 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x9cf33c02 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x9d0f0901 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x9dd02e15 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x9de48d51 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9df704f8 ide_check_ireason +EXPORT_SYMBOL_GPL vmlinux 0x9e1c0d1f platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x9e25b1ef flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x9e532c5a register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x9e59785c shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9ee2cc5c ide_init_pc +EXPORT_SYMBOL_GPL vmlinux 0x9ef9aae0 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x9f330360 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f484f75 class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f86d368 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x9f9f7678 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa0177905 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa0a27fff pci_address_to_pio +EXPORT_SYMBOL_GPL vmlinux 0xa0d1fb61 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xa0fe3b89 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0xa128ff1f class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xa141c4c1 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0xa19fa342 usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0xa206368e inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa2202950 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xa268fcc7 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0xa26bd2f2 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xa2b48b56 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0xa2cd2708 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0xa2d6bc6a scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xa3322ad8 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0xa3728314 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0xa3a2d9af walk_system_ram_range +EXPORT_SYMBOL_GPL vmlinux 0xa3a49756 bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0xa3b9cfce ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xa3efde9a dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xa4012244 eeh_add_device_tree_early +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa42aa697 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xa43dccaa ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xa459a966 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xa4a42813 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0xa4d175ba transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5d03bee __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa609aa43 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0xa610574d usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xa6217379 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0xa6562f63 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0xa6ad845e sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xa6b3b35d rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa6d21804 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xa7548f45 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0xa75d2eab ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0xa79eb416 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa7cb4155 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xa83483b5 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0xa8431368 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xa88ce3d2 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa8d6dd1b sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa8f96cdf led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0xa9144a5f pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0xa926447f usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0xa92ff6d8 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xa936e8a4 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0xa98cdb36 ps3_get_firmware_version +EXPORT_SYMBOL_GPL vmlinux 0xa9a08731 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0xa9b8540d sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9dfc796 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0xa9e2013d pcibios_add_pci_devices +EXPORT_SYMBOL_GPL vmlinux 0xa9e453e5 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0xaa0a67db anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0xaa1f30d5 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0xaa278cae register_spu_syscalls +EXPORT_SYMBOL_GPL vmlinux 0xaa32f6f8 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa5f2944 ps3_vuart_clear_rx_bytes +EXPORT_SYMBOL_GPL vmlinux 0xaa645f3f ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaa92e891 ide_dma_setup +EXPORT_SYMBOL_GPL vmlinux 0xaadf33d7 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0xab06662d __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab14110a stop_machine +EXPORT_SYMBOL_GPL vmlinux 0xab2b243d ps3_irq_plug_destroy +EXPORT_SYMBOL_GPL vmlinux 0xab2d90e5 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0xab33fb6a inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab88083b usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0xac11e720 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0xac21d8f8 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0xac550fdd i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xac5e4c7f regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xac73843e rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xac800325 generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0xaca86731 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0xacb1e9fd scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xacc2633c spu_switch_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0xacc3ed7f driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xace837b7 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xacf9fc8f debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xacfe997e powerpc_firmware_features +EXPORT_SYMBOL_GPL vmlinux 0xad009578 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0xad0a978a relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0xad12fcb6 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xad216499 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0xad2cda61 irq_find_host +EXPORT_SYMBOL_GPL vmlinux 0xad447c92 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0xad5f86fd xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0xad7db397 sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xad7e1020 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0xad9ad8d9 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xadcc1deb usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae5350f3 ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0xae6f6e01 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xae701712 pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xaf1547b9 put_device +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xafeec934 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0xaff3867d regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0xb03c0b89 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0xb0906d07 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xb09a148a inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0abee9c usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0xb0e8ccc2 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xb107a443 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xb11825f9 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1a6c06e ide_dev_select +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1b9aaa8 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0xb1cfb424 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0xb1d48ccb sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xb1fb0988 ide_no_data_taskfile +EXPORT_SYMBOL_GPL vmlinux 0xb21a62b6 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xb23bbff0 ide_cd_expiry +EXPORT_SYMBOL_GPL vmlinux 0xb2883f30 register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xb29697c5 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xb2d26dac srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb337e335 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0xb46a5e5c inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xb47cf0e4 device_move +EXPORT_SYMBOL_GPL vmlinux 0xb4868114 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xb4cea390 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0xb4e942a3 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb51e577e crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb52b09a9 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xb5592a2c scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0xb562f55a ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xb5727eb2 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0xb5770145 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5921983 sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb599ba38 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0xb59ac588 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xb5cb5b88 ide_do_start_stop +EXPORT_SYMBOL_GPL vmlinux 0xb612444d snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb656c9fc usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6bc007a spu_sys_callback +EXPORT_SYMBOL_GPL vmlinux 0xb6c851c5 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0xb6d467b6 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb70da569 pmf_call_function +EXPORT_SYMBOL_GPL vmlinux 0xb70ece82 spu_init_channels +EXPORT_SYMBOL_GPL vmlinux 0xb72705bf rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb75c87c8 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0xb764c0d7 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xb77824cf set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0xb804fba0 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xb81676fb __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0xb82be3fa crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xb82da595 ps3_vuart_port_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xb84b1aae ps3_event_receive_port_setup +EXPORT_SYMBOL_GPL vmlinux 0xb84f3919 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xb8b220a3 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0xb8c49fb6 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xb8d508ec sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0xb8ee8ec9 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0xb8f7489e get_driver +EXPORT_SYMBOL_GPL vmlinux 0xb933cafb ide_init_disk +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xba4be12c shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xba4e797a key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xba5e375c of_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0xba7deb6b spu_remove_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0xba9817e7 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xbaaccfe5 device_add +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbae463be ps3_vuart_port_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbb29be18 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xbb2c2666 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0xbb439da6 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0xbb49aafe spu_64k_pages_available +EXPORT_SYMBOL_GPL vmlinux 0xbba98584 put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xbc74e9d6 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xbd1ad6b4 ide_pad_transfer +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdea502e pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbec204fc rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0xbed16a6e blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xbf1cc04b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xbf2606c5 input_class +EXPORT_SYMBOL_GPL vmlinux 0xbf74eb20 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0xbf79582e usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0xbf8ff8f4 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xbf98368a rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0xbfbfa5e8 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0xbff049b4 ps3_open_hv_device +EXPORT_SYMBOL_GPL vmlinux 0xc03cd29d xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0xc04b6484 ide_host_remove +EXPORT_SYMBOL_GPL vmlinux 0xc068cefd blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0xc0a71f9c pmac_i2c_get_type +EXPORT_SYMBOL_GPL vmlinux 0xc0e2e4e4 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xc0f49d57 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0xc109f0d6 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xc121be88 smu_get_ofdev +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12d9b88 get_slice_psize +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc136d6aa ps3_close_hv_device +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc17f8ecc fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xc1c1f2fb tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xc1f03291 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0xc1fa4dfb unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc22fed3d unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc344005e pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0xc34959f4 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc37ea4e2 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc3b1cd5a eeh_dn_check_failure +EXPORT_SYMBOL_GPL vmlinux 0xc3cd1278 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0xc403777e ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc437081a file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xc47dced0 ide_port_unregister_devices +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b2fa49 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4bee1c5 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0xc4c61ce3 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xc4ec3720 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0xc4efffc8 sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0xc5096c3d ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0xc53650f3 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xc5d66129 lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0xc5f39c0f tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0xc5fc3eb3 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc61108bd ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc61e3cb7 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xc65120ff srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xc66c2311 ps3_vuart_irq_destroy +EXPORT_SYMBOL_GPL vmlinux 0xc66ef63e ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc6e3e7ef ide_undecoded_slave +EXPORT_SYMBOL_GPL vmlinux 0xc6f1c9c7 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0xc703e483 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0xc711f7f5 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xc71f8808 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0xc766cc36 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0xc766da1f crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0xc783c74d inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0xc7a40b68 __class_register +EXPORT_SYMBOL_GPL vmlinux 0xc7a6ca1c ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xc7ad7a2d ide_setting_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xc7b2a846 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xc7f3a1de unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xc8004941 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xc86a0e45 br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc91804ed sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0xc93a4024 ide_capacity_proc_fops +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9b9f02d vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xc9fc7431 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xca0d3966 ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xca1ffb6f spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xca32a2aa ide_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xca621f9c ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xca6b96a3 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0xca7d9c56 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca927653 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xcaec9640 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0xcb055e67 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0xcb268c4f filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0xcb3177cb ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc4b9fbe usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0xcc55b9ce usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xcc73a527 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xcc7a2564 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xccea56f8 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xccfe2ba8 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xcd022b92 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xcd30f247 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0xcd631d15 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xcd9babfc hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0xcdc96551 put_pid +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xce1287c1 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0xce60429b unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xcee1e4ec led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0xcf01e66c pmf_put_function +EXPORT_SYMBOL_GPL vmlinux 0xcf72bbd4 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcfa24984 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfdf2dd3 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0xd00fa7b1 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xd0209d39 ide_setup_pci_noise +EXPORT_SYMBOL_GPL vmlinux 0xd0215551 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0xd03ab953 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd0aefe8b inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0f2fb2c klist_next +EXPORT_SYMBOL_GPL vmlinux 0xd1071367 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1982f5f inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xd1aa3bc5 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd1bef63f regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xd1c97289 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xd1d719f4 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0xd1d8adad atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd25ec236 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xd269cfbf get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0xd2716f6d inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a62c3c device_initialize +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2d2baee hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xd313557f ide_input_data +EXPORT_SYMBOL_GPL vmlinux 0xd31364fa put_driver +EXPORT_SYMBOL_GPL vmlinux 0xd31c5b02 ide_allocate_dma_engine +EXPORT_SYMBOL_GPL vmlinux 0xd356b0fe blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0xd3597521 use_module +EXPORT_SYMBOL_GPL vmlinux 0xd3b935bb crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0xd3d35b1d rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xd3e1df4c sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xd3f79804 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xd429cfd4 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xd445d21d ide_do_test_unit_ready +EXPORT_SYMBOL_GPL vmlinux 0xd457e8c3 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xd4a55caa sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xd516bf93 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xd543676a sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xd64c3774 ide_dma_sff_timer_expiry +EXPORT_SYMBOL_GPL vmlinux 0xd656b928 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0xd65f5fe4 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0xd6664536 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0xd6f82bb5 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd718aa5a class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd79e69f4 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd7d922a8 cpu_add_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0xd7de30be __ide_pci_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xd8498f4d ps3av_mode_cs_info +EXPORT_SYMBOL_GPL vmlinux 0xd86e15ba eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0xd88a8420 spu_handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0xd8a12cda debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0xd8d59eda ide_map_sg +EXPORT_SYMBOL_GPL vmlinux 0xd8e0d141 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0xd90e9d3b led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xd918b1ce ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0xd932b288 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xd9e33945 scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0xd9ebc373 isa_bridge_pcidev +EXPORT_SYMBOL_GPL vmlinux 0xd9f1bb40 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0xd9f8587e fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xda58248a bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xda62000e ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0xda657836 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xdaec7bf2 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdaf5958e ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0xdaf60780 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xdb0ac13b ps3_compare_firmware_version +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb366810 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xdb49bfff ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0xdb6e6b1c driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xdb89900a ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0xdb8c8386 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0xdba0fdd3 ide_read_bcount_and_ireason +EXPORT_SYMBOL_GPL vmlinux 0xdbb47d5e rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xdbc9a6a9 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xdbf0a6b6 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0xdc07f8fe atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xdc6ce523 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0xdce60366 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xdd043eea ps3av_get_auto_mode +EXPORT_SYMBOL_GPL vmlinux 0xdd4b4b5c ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xdd591699 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xddf450a0 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xddfdcdc6 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xde209806 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0xde2b3e93 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde5bfb6c seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xde67e74c usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xde6aed69 ide_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xde71f60b crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0xded10a3e ide_tf_read +EXPORT_SYMBOL_GPL vmlinux 0xdee99f28 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xdefd905f ide_build_dmatable +EXPORT_SYMBOL_GPL vmlinux 0xdf315b1d rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdfbf37c3 ps3_system_bus_device_register +EXPORT_SYMBOL_GPL vmlinux 0xdfc00286 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xdfc62879 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xdfceff2b user_match +EXPORT_SYMBOL_GPL vmlinux 0xe011f817 ps3flash_bounce_buffer +EXPORT_SYMBOL_GPL vmlinux 0xe0374df2 pmac_i2c_open +EXPORT_SYMBOL_GPL vmlinux 0xe048c421 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xe053f95c devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xe057c8bf disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xe05b8c24 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0xe0a8e6af usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe160bcc9 ide_pci_resume +EXPORT_SYMBOL_GPL vmlinux 0xe17bf308 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xe17ef10a pmac_i2c_adapter_to_bus +EXPORT_SYMBOL_GPL vmlinux 0xe182bdb8 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe19fc092 ps3fb_videomemory +EXPORT_SYMBOL_GPL vmlinux 0xe1f1294d pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xe2276636 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0xe26a81dc ide_pci_init_one +EXPORT_SYMBOL_GPL vmlinux 0xe2ef060d ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xe2fb8bab attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0xe33b8f51 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe34dd8da ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0xe37dd624 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe384bcd8 pmf_unregister_irq_client +EXPORT_SYMBOL_GPL vmlinux 0xe3c075ae usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xe403e991 of_irq_map_raw +EXPORT_SYMBOL_GPL vmlinux 0xe4284888 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xe4289e50 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xe4474c8a ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0xe45d061d usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xe46514b0 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0xe46c6d5d usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0xe46d8740 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xe480284c __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4caa4cb fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xe4d0ccb8 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0xe514666f xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe55ef33a dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe653f98f bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0xe666154a __put_net +EXPORT_SYMBOL_GPL vmlinux 0xe6925d9d device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe6a10c7d ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0xe6c52b84 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0xe6d0e198 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe6fc3bcd ide_prep_sense +EXPORT_SYMBOL_GPL vmlinux 0xe77c06c5 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0xe7ae4191 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xe7b08068 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe83a3e45 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xe83cc7f2 unregister_spu_syscalls +EXPORT_SYMBOL_GPL vmlinux 0xe844e743 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe89293bb device_attach +EXPORT_SYMBOL_GPL vmlinux 0xe8cb5098 ide_check_atapi_device +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea0dd809 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea1b30d9 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea74da6c single_open_net +EXPORT_SYMBOL_GPL vmlinux 0xea8ec36f i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0xea9f5ce9 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xeaba4082 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xead7f03e ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb12d0e4 device_create +EXPORT_SYMBOL_GPL vmlinux 0xeb136d0f irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb4f0e01 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0xeb6d7f9c find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xeb818e24 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xebc9cd81 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xebe2eff5 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0xebfaeedf spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xec0db269 inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec59cf3b skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0xec7ca5bd i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xecae3206 ps3_system_bus_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xecb000f7 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xecdf82e9 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xed1ef626 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0xed3b8c26 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xed60cc2c usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xedaf1f2a __remove_pages +EXPORT_SYMBOL_GPL vmlinux 0xede74815 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xedfbd62b vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xeecac530 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0xef1cc868 of_scan_bus +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef71627c spu_remove_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0xefa19a52 spu_add_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0xefa32295 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0xefc43b4c spu_invalidate_slbs +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe8d0ce tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xeff9dd74 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xf00103d5 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0xf01afef8 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0xf066ebd1 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0xf098dd15 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0xf0b48771 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xf0bcb200 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xf0f17544 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xf105d00d ide_in_drive_list +EXPORT_SYMBOL_GPL vmlinux 0xf11b6838 relay_open +EXPORT_SYMBOL_GPL vmlinux 0xf11dbab8 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0xf12b99a2 ide_pio_bytes +EXPORT_SYMBOL_GPL vmlinux 0xf13113e6 __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1bba53d usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xf1c4e4ca dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0xf1deaac1 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xf216b301 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0xf223490e usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0xf2635846 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0xf27d4c25 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0xf2e84864 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0xf312c077 device_del +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf34e55ad unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xf37e35fa ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf39ea995 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0xf3a0d78f dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xf3a2c3ac ide_intr +EXPORT_SYMBOL_GPL vmlinux 0xf3a4160a ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0xf3d50c63 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xf3e428e8 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0xf3fbe646 device_rename +EXPORT_SYMBOL_GPL vmlinux 0xf3fdc3a2 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xf402c34e ide_queue_sense_rq +EXPORT_SYMBOL_GPL vmlinux 0xf4283a51 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xf4488540 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0xf458ef18 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xf469c705 ps3_io_irq_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf47ad622 pcibios_unmap_io_space +EXPORT_SYMBOL_GPL vmlinux 0xf4812b4c ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xf48e765e ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xf4993a7b ide_pci_suspend +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4d34a21 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xf4dd85ae crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0xf4f9de6e swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf501e38d dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xf5090382 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf5799f7a stop_machine_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf589b391 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0xf590307f ide_pci_init_two +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5b64ecd each_symbol +EXPORT_SYMBOL_GPL vmlinux 0xf5d76f78 ide_dma_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xf66a6d02 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0xf67db2ae inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6e7f218 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf76b2fd8 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xf7c92fa0 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0xf7e9ceca usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xf807e621 pmac_i2c_detach_adapter +EXPORT_SYMBOL_GPL vmlinux 0xf80fcd3b tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xf8125fcd power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0xf81738ce ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0xf820cc8e __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf848cd8b usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8b9716e cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf9006709 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf92f9532 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xf95bb431 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf96ef066 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9eade84 pmf_find_function +EXPORT_SYMBOL_GPL vmlinux 0xfa01c65c skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0xfa463394 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0xfa6e431f crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0xfa8270d0 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xfa849358 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xfaa76cee dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0xfae96de1 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0xfb2be183 ide_set_media_lock +EXPORT_SYMBOL_GPL vmlinux 0xfb7a75e7 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0xfbb1e40f platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0xfbcb2fd5 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0xfbd06844 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfbfcdc2b ps3_sys_manager_get_wol +EXPORT_SYMBOL_GPL vmlinux 0xfc19666a ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0xfc5741d0 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0xfc57ca36 ps3_vuart_read_async +EXPORT_SYMBOL_GPL vmlinux 0xfce255c5 driver_register +EXPORT_SYMBOL_GPL vmlinux 0xfdca100e spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0xfdd4e309 pmac_i2c_get_adapter +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe001ca8 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0xfe1ab683 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfe25817f class_find_device +EXPORT_SYMBOL_GPL vmlinux 0xfe4c4a9d sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0xfe92514d rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfef6aab5 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xfefa2adb input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0xff0dacff ps3av_video_mute +EXPORT_SYMBOL_GPL vmlinux 0xff407300 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0xff46f973 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xff5ea052 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0xff982ad4 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0xffaa9bac pmac_i2c_get_bus_node +EXPORT_SYMBOL_GPL vmlinux 0xffac6486 tty_prepare_flip_string_flags +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/abi/2.6.32-24.38/powerpc/powerpc +++ linux-2.6.32/debian.master/abi/2.6.32-24.38/powerpc/powerpc @@ -0,0 +1,9469 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x62dec02b suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x32f213ec uPD98402_init +EXPORT_SYMBOL drivers/block/loop 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL drivers/block/loop 0xe56b9863 loop_register_transfer +EXPORT_SYMBOL drivers/block/paride/paride 0x1ad9174c pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x1c898017 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x2e997c9c pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x36e85389 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x3f795aff pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x63484b78 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x80175f87 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x90a01b99 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xc4df97c1 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0xccee9d81 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xdbed72ec pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xe4b5739d pi_disconnect +EXPORT_SYMBOL drivers/char/agp/agpgart 0x0ff178ec agp_put_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1116e39a agp_generic_mask_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x1c8d7fb0 agp_backend_acquire +EXPORT_SYMBOL drivers/char/agp/agpgart 0x2087186b agp_free_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x244e3e64 agp_alloc_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x30226ddf agp_device_command +EXPORT_SYMBOL drivers/char/agp/agpgart 0x32e17b15 agp_generic_alloc_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x37456c4e agp_generic_create_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0x476bc443 agp3_generic_tlbflush +EXPORT_SYMBOL drivers/char/agp/agpgart 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL drivers/char/agp/agpgart 0x50612c44 agp_generic_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0x566b07d1 agp_flush_chipset +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5d47f79e agp_allocate_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x5f4a1249 agp_free_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0x673f815e agp_bridges +EXPORT_SYMBOL drivers/char/agp/agpgart 0x6b6da712 agp_unbind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x6caa84d2 agp_create_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0x71dd880e agp_backend_release +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7538b132 agp_off +EXPORT_SYMBOL drivers/char/agp/agpgart 0x758b7b74 agp_find_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0x79b6d855 agp_generic_destroy_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0x7f2fc3c9 agp_generic_alloc_user +EXPORT_SYMBOL drivers/char/agp/agpgart 0x819b50e8 agp_generic_type_to_mask_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0x8a6fd498 agp_copy_info +EXPORT_SYMBOL drivers/char/agp/agpgart 0x9fd386e6 get_agp_version +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa3c2b34a agp_generic_alloc_pages +EXPORT_SYMBOL drivers/char/agp/agpgart 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL drivers/char/agp/agpgart 0xb04ea8f0 agp_rebind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xba8cdf68 agp_bridge +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc580062f agp_generic_insert_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL drivers/char/agp/agpgart 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL drivers/char/agp/agpgart 0xd6a12212 agp_bind_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xddd2b02a agp_alloc_page_array +EXPORT_SYMBOL drivers/char/agp/agpgart 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL drivers/char/agp/agpgart 0xe3c40531 agp_collect_device_status +EXPORT_SYMBOL drivers/char/agp/agpgart 0xe4b69a5c agp_generic_destroy_page +EXPORT_SYMBOL drivers/char/agp/agpgart 0xe5bbc17e agp_generic_free_gatt_table +EXPORT_SYMBOL drivers/char/agp/agpgart 0xf902e386 agp_generic_remove_memory +EXPORT_SYMBOL drivers/char/agp/agpgart 0xfb3d2cfb agp_generic_free_by_type +EXPORT_SYMBOL drivers/char/agp/agpgart 0xfd987e25 agp_enable +EXPORT_SYMBOL drivers/char/agp/agpgart 0xffafe957 agp_generic_alloc_page +EXPORT_SYMBOL drivers/char/apm-emulation 0x129e74f2 apm_get_power_status +EXPORT_SYMBOL drivers/char/apm-emulation 0xdf3329b8 apm_queue_event +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1466059e ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x18a0407d ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2aad83eb ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x455309d5 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4fe20849 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5448f813 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x56c51168 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x609f6419 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x66a269f8 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x69eb800e ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x74926f93 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x7d3a5ac6 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8857068c ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x95bd9565 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9b21f6f1 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa0cc6ec1 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xb9885aca ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xba0f3288 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xba2e34cd ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xca33bd84 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd158caa9 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xd8057939 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf3571745 ipmi_unregister_smi +EXPORT_SYMBOL drivers/edac/edac_core 0x070cd755 edac_mc_find +EXPORT_SYMBOL drivers/edac/edac_core 0x600dc861 edac_mc_handle_fbd_ue +EXPORT_SYMBOL drivers/edac/edac_core 0x644f9b54 edac_mc_handle_fbd_ce +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04e3309b drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05d1423d drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x082f8e56 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0836695c drm_sman_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x09089cff drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0d894cbc drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0f59e977 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0fc78710 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1081c995 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x10cd17d0 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x117ff965 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1610309d drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x17698776 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1d744605 drm_mm_search_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f072c59 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1f5168e9 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21451ac4 drm_sman_owner_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x236f692b drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x237130f4 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24af5674 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2916bf63 drm_sman_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x293a3c28 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x29cc976c drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2a03343a drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2aed7d2a drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2b81ffcd drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2e27cb9d drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb2f903 drm_sman_free_key +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x31aeba7e drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3637c3d7 drm_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38ea859c drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3bc4c76a drm_connector_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c9a1409 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3e842900 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x40a244fd drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42841892 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44f601d3 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x466c392a drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x48fb60be drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4d676a5f drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4f8aee78 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x500b778b drm_agp_chipset_flush +EXPORT_SYMBOL drivers/gpu/drm/drm 0x50d2d80a drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x51d0a48a drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x524fe692 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x53e65fac drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f060ee drm_sman_set_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x580830f0 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x58c5fc24 drm_lock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5b5f8a65 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5b903c0c drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5c7d4c49 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5cbb6616 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5dfb0578 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5ec98476 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x621679b3 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6408db05 drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6420f201 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x663e2d38 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b326260 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d2e5837 drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ddaf4a0 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ec1f6f0 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ed59992 drm_mm_search_free_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6fc30481 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x71c022d6 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x71f57e5e drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x72246619 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x770fdb61 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x784915eb drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x78817656 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a61b353 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a887150 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7becf9f2 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7c1fd6c8 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e1000b9 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x80eede06 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x81d1b0ff drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x856f1da5 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x85de09f5 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x86594849 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d6e7ef drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87d7f6c6 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8806c0e9 drm_i_have_hw_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x88598d62 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8a1c340a drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8a75f972 drm_connector_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8cec8a28 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x91ecf3a1 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x950930ad drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x958b7d2c drm_lock_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x95dc3668 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9814449d drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x988916fb drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9d1df36b drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9dcd4241 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa10a2f3d drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa5781594 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa6d343b4 drm_do_probe_ddc_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa9095be9 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xab94de48 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xae24f567 drm_get_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf29788e drm_sman_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb016777a drm_core_get_reg_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb0d909c7 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb2790aa0 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb46468c7 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4d4993c drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb6742f89 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba2bf59a drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbb637c6e drm_get_drawable_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbba544de drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe7b1a51 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbeb59a3a drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf175f74 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc02e35a7 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc17c7587 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc31de3de drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6794f16 drm_core_get_map_ofs +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6ce050f drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc74f7598 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcca94094 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcdf2eff4 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0xce1b9cf3 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcf1d4f89 drm_sg_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd08fa3f0 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd277ea6e drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3028e75 drm_sman_set_manager +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd36f5da8 drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd3ffab51 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd5d6a124 drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd9dacc40 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdcace643 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd3febe2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd49095c drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xddcac7f0 drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xddf595d7 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdfabf48a drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1457735 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2484005 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe24a7b88 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe303bd7e drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe44b6330 drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5bdce7e drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7e01fd8 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe919dd5c drm_sman_owner_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9754391 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xec269d98 drm_get_resource_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0xef3533bd drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0xef765c68 drm_get_resource_len +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf42a2b26 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf5ffc045 drm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6922c87 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf81f01fe drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf95a5e71 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfa69ea8a drm_connector_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfa878068 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfdfbad19 drm_sman_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0d5f4782 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x12bcf6ac drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x14d93a16 drm_fb_helper_init_crtc_count +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1a743ab5 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2d4913c5 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2dfda11d drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3203cdc5 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x36ba9d3a drm_fb_helper_free +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3afbaa6d drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5d059148 drm_fb_helper_add_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5d4a4d2a drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x77c34f6a drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7b9cdc34 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x87390aa8 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x90ad6029 drm_helper_hotplug_stage_two +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x99654f34 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa8048566 drm_helper_probe_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbe5fab5d drm_fb_helper_setcolreg +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc9b469a7 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd145c7c6 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd55b6369 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd74ef0c1 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd8d34212 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe581bc13 drm_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf057ec81 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0x1d2db50e radeonfb_remove +EXPORT_SYMBOL drivers/gpu/drm/radeon/radeon 0xb490aacb radeonfb_resize +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x040bd127 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x07787990 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x083c7fc9 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x088154a6 ttm_bo_wait_cpu +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0cb61563 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0de98dc9 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x155e9945 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1a9b965b ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1dd4224f ttm_agp_backend_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x22d8c4b4 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x24536b5d ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x34704ea7 ttm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x365feb2e ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x36d2c765 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x36d98d8e ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x376ac7be ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x38108dbe ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x38980517 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c3c3af1 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3d6c74ef ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3f0eac08 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x430ed972 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4a8a2706 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x52af2407 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x53319773 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x58f1a42e ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x59609446 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x59e81b2c ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5efae6e9 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x619fd3cf ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x66666d70 ttm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x68c30de4 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x79aa3b4a ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7fb7e299 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x82fca650 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x88eae87d ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8e82e69f ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x957e5b9a ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9986a081 ttm_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa77b51bc ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xacc80e98 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb100ee86 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb8f9d883 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xba09aa30 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbce6b5dc ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc43b400c ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc8879047 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc8d4159f ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcf0cfb79 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xda932ff3 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdaca6ca8 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdc39042f ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe324839a ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe3889f7c ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xed13779b ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf633273b ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe362a63 ttm_io_prot +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x48040e3b i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0xabbfb314 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0xb0aa977c amd756_smbus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x09e75e07 hpsb_iso_xmit_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x0acbf4e7 hpsb_iso_recv_release_packets +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x11002ff1 hpsb_make_writepacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1a200e5a csr1212_release_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x1ead5158 hpsb_allocate_and_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x219cbabe dma_region_offset_to_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x21be5793 hpsb_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x233315ea hpsb_iso_recv_listen_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2379ed83 hpsb_resume_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2761c60d hpsb_make_lock64packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x293e417c hpsb_node_fill_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2a4cc36b csr1212_attach_keyval_to_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2cf290da hpsb_lock +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2d8e565e hpsb_free_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x2e155d8a hpsb_iso_wake +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x306ba4a6 hpsb_node_write +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3360fa1c hpsb_unregister_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x345ab1bc hpsb_make_streampacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x375d9731 hpsb_iso_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x37883351 hpsb_remove_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x395f3f29 hpsb_read_cycle_timer +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3a0afc65 hpsb_update_config_rom +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x3a7ca185 hpsb_iso_xmit_queue_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x459b12ad hpsb_reset_bus +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x46b9e5f5 hpsb_bus_reset +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x476ca9a3 hpsb_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x4b2736ce hpsb_iso_recv_unlisten_channel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x506a035b hpsb_make_lockpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5586f989 hpsb_register_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5b03f050 hpsb_get_hostinfo_bykey +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5b7b08ee hpsb_set_packet_complete_task +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5d7c4c7e hpsb_make_readpacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x5f5fdd2f csr1212_new_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x672ad148 dma_region_sync_for_device +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x673a08bc hpsb_set_hostinfo_key +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x758cc5f1 hpsb_selfid_complete +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x76bc1a5c dma_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7de2c655 hpsb_update_config_rom_image +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x7e337115 hpsb_iso_recv_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x819f0e72 hpsb_alloc_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8600bad2 hpsb_create_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8879f8f0 dma_region_sync_for_cpu +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8993e0e7 hpsb_packet_sent +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8aefa923 hpsb_unregister_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8b68f511 hpsb_make_phypacket +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x8ec2b312 dma_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x94bce230 csr1212_get_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x979b3052 dma_prog_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9a4ee255 hpsb_packet_success +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0x9f955849 hpsb_send_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa5efd5a1 hpsb_iso_n_ready +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa7b9c9ac hpsb_destroy_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xa924dac6 dma_prog_region_alloc +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xab26b673 hpsb_iso_recv_set_channel_mask +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xac8554da hpsb_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaef57bb5 csr1212_detach_keyval_from_directory +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xaefbd374 csr1212_parse_keyval +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbba70620 dma_prog_region_free +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xbde74b69 hpsb_iso_recv_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc3d0b981 hpsb_add_host +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc4990ec4 __hpsb_register_protocol +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc4b52fed dma_region_mmap +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xc7ca444d hpsb_alloc_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xcbed8ae8 hpsb_free_packet +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd1759172 hpsb_iso_stop +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd3f8944b hpsb_get_tlabel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xd8992ea7 hpsb_iso_recv_flush +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xdc59e62b hpsb_set_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe288cf73 hpsb_selfid_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe4584921 hpsb_iso_xmit_sync +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xe5193b95 hpsb_unregister_highlevel +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xea4152ff dma_region_init +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xec93bbb9 hpsb_get_hostinfo +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf0e97d51 hpsb_iso_packet_received +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xf89b3e37 hpsb_register_addrspace +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfab27536 csr1212_read +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfba57f51 hpsb_speedto_str +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xfee6778e hpsb_iso_shutdown +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xff904eae hpsb_iso_xmit_start +EXPORT_SYMBOL drivers/ieee1394/ieee1394 0xffb17efe hpsb_protocol_class +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x1d5aeebc ohci1394_init_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0x30ebe4e2 ohci1394_unregister_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xbc7f785b ohci1394_register_iso_tasklet +EXPORT_SYMBOL drivers/ieee1394/ohci1394 0xe45ba124 ohci1394_stop_context +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x08a37740 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x0da285fd rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x1254ed07 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x209dd900 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xa4449e88 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xb0900f14 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x10c1d9bf ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x31b4483e ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3eb66306 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4ca388db ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4e97f54f ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x6fc96d12 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x70104db3 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x72129e0f ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x77a1c6cf ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x79f73de1 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x966e23ca ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa583e378 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xadb16be8 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb43c021b ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb844425e ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc30af7d0 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xe60fdafb cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x015f66d6 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x02aa9c54 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x05148305 ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x05f580fa ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1375c002 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x18679f08 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1b33921e ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1b986626 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x25d59642 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x260e62d1 ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2dba7075 ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3b33560c ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3b49d1fb ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3f7567fd ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x443ac840 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x46d691f3 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4db67fe6 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4ff3497a ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x525a43a3 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x531f0418 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x541848d4 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x578d23c9 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5c39087e ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5f56c12c ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x64c76868 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x66514acb ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x67468591 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6ab75489 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6de4929c ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x702da3a2 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x706feeb6 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x74ba0a16 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x74f63c21 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x79fe972f ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7d616907 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8224d3f3 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x82fba9f7 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x83902ddd ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8532cd14 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8640eaeb ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x87b614d8 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x90571b02 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x91c61d04 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x94c77324 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9630bf09 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96fa05fc ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x98cf64a1 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x99def487 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9d804fa1 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa3c475e4 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa4b3f60d ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xaf40a43e ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xafffb100 ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb03b4887 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb0fb02b3 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb10ed9f1 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb2cd77e5 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xbcc1e318 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc0309971 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc82b60a4 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcafc3613 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcec9ac78 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd17ba9d1 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3515bf3 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdfd29ce9 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe686e911 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf36498b9 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf5f8d0e2 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf77b34be ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfa8817fc ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfc791bb5 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xff16f378 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x0ee57a5e ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x2701b7c8 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4b5db9ac ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x584031c7 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6ef787ed ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x81115981 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x877a1745 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x893b0e5d ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xa03ae29f ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb26d0e85 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb61951f9 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xe61e1975 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xee3a2451 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x01f5586b ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x3c5d0ead ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x4c6573bb ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x527229be ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5d72dabc ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x658bce3e ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x73a64cb5 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x89cb98ed ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x954a878e ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x1b7fbb51 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x1ddf01e7 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x298cb1af iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x5093a505 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x510abf55 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x685a104f iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x7d20772d iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xf3b69de5 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0de734c6 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x1759450f rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x17732ef1 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x178c17e0 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x27b31816 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x2f064be8 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3da8bccd rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x6d230de2 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x75dbda19 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7a2ee0bb rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8a80967b rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x97140739 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xaf6ca609 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xb16a3098 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc1193a34 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xcbc98a66 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xec29b7ac rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf5ae9533 rdma_set_service_type +EXPORT_SYMBOL drivers/input/gameport/gameport 0x5277e037 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x54df9f8a gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x54e1105d gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x57827246 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8445dea7 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8b4c7e32 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc7de3924 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0xd968e8e7 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xfc1243dc gameport_close +EXPORT_SYMBOL drivers/input/input-polldev 0x24edd7e1 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x498e8753 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x723c4e24 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xa5b118a3 input_free_polled_device +EXPORT_SYMBOL drivers/md/dm-log 0x2a96a21a dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x3d121404 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0xb64b89b0 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0xc2709ed3 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x15048c27 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x1cdf82e0 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x85d96675 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x8c0a583c dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/md-mod 0x00b97061 bitmap_endwrite +EXPORT_SYMBOL drivers/md/md-mod 0x0383cedc md_wait_for_blocked_rdev +EXPORT_SYMBOL drivers/md/md-mod 0x0a910a58 register_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x173d9411 md_integrity_register +EXPORT_SYMBOL drivers/md/md-mod 0x1ef7ea71 md_set_array_sectors +EXPORT_SYMBOL drivers/md/md-mod 0x32b6d1d0 mddev_congested +EXPORT_SYMBOL drivers/md/md-mod 0x57cdc907 md_check_no_bitmap +EXPORT_SYMBOL drivers/md/md-mod 0x642a71a1 bitmap_startwrite +EXPORT_SYMBOL drivers/md/md-mod 0x653db38a unregister_md_personality +EXPORT_SYMBOL drivers/md/md-mod 0x67118084 md_done_sync +EXPORT_SYMBOL drivers/md/md-mod 0x79d47ddf md_unregister_thread +EXPORT_SYMBOL drivers/md/md-mod 0x83afc782 bitmap_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0x83cad2e6 bitmap_cond_end_sync +EXPORT_SYMBOL drivers/md/md-mod 0x96395222 md_write_start +EXPORT_SYMBOL drivers/md/md-mod 0x9d7d444d bitmap_start_sync +EXPORT_SYMBOL drivers/md/md-mod 0xa6e2c1c7 bitmap_close_sync +EXPORT_SYMBOL drivers/md/md-mod 0xbec2bf1f md_error +EXPORT_SYMBOL drivers/md/md-mod 0xc190cbe2 md_integrity_add_rdev +EXPORT_SYMBOL drivers/md/md-mod 0xc1ca5ef7 bitmap_unplug +EXPORT_SYMBOL drivers/md/md-mod 0xd2bcd642 md_register_thread +EXPORT_SYMBOL drivers/md/md-mod 0xdffb4b3d md_wakeup_thread +EXPORT_SYMBOL drivers/md/md-mod 0xe3fb88aa md_check_recovery +EXPORT_SYMBOL drivers/md/md-mod 0xe94bf08a md_write_end +EXPORT_SYMBOL drivers/md/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL drivers/md/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL drivers/md/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL drivers/md/raid6_pq 0x7456cc61 raid6_empty_zero_page +EXPORT_SYMBOL drivers/md/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL drivers/media/common/tuners/mc44s803 0x9dc3c1ec mc44s803_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2060 0xef5761ea mt2060_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2131 0xf4df0c0a mt2131_attach +EXPORT_SYMBOL drivers/media/common/tuners/mt2266 0xdcc8f0f1 mt2266_attach +EXPORT_SYMBOL drivers/media/common/tuners/mxl5005s 0x114a660f mxl5005s_attach +EXPORT_SYMBOL drivers/media/common/tuners/qt1010 0x95e91a18 qt1010_attach +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/common/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/common/tuners/tuner-xc2028 0x18d7c1c8 xc2028_attach +EXPORT_SYMBOL drivers/media/common/tuners/xc5000 0x8aebd0e4 xc5000_attach +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0120076c flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x061f381f flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x0d2e1131 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x3080680a flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x33f2fc3a flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x395dc9df flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x46f7384e flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x574eb476 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x59221b4f flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x6e361010 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x77620660 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x8dea0509 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x92c0970d flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0x991045b2 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xab98e56f flexcop_device_kfree +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xd8117769 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xec016374 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xf438717a flexcop_dma_config +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfba4e2f3 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/dvb/b2c2/b2c2-flexcop 0xfefa78b9 flexcop_dma_free +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x1b1145d1 bt878_device_control +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x4f20c582 bt878_start +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0x7f383b1e bt878 +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/dvb/bt8xx/bt878 0xf0a40f05 bt878_stop +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x16da7435 dst_error_bailout +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x1c422cdd rdc_reset_state +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x54e15f86 write_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x84c11084 dst_attach +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0x9b42288f dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xabdcdec3 dst_pio_disable +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xc92af1a4 dst_error_recovery +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xdf1860e0 dst_comm_init +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst 0xf03eeb38 read_dst +EXPORT_SYMBOL drivers/media/dvb/bt8xx/dst_ca 0x43086113 dst_ca_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x00cbdc37 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0a40d033 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x0c4d4a14 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x13ee8494 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x14c136db dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x195d740d dvb_net_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x19dbd3bb dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1a2957cf dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x1e60b7a1 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2154e1cb dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x2eb67fdf dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4a5ad2b0 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x4b5a559b dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x5908fe37 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6b00c62c dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x6baace1e dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x74ebadea dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x82fbb44e dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x84813a02 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8aa79f34 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x8fc7d899 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0x9d61f9a2 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xa1512da4 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xbc0d91e1 timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xcc41083f dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xd55aab99 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xdf457deb dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe20c965c dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5374b79 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe54b83ca dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe6a9e920 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xe8074fa5 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xeb2e8844 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf2031ad9 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb/dvb-core/dvb-core 0xff47a99b dvb_net_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x3a22fd11 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x52fc9099 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x62ad06d1 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0x6cb4a0a5 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xa34e0a32 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xb276660f usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb 0xdea132c8 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0x3693500b af9005_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xc31f5eb8 af9005_rc_decode +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-af9005-remote 0xd3383957 af9005_rc_keys_size +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x43a21463 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x4a91ca6e dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x6aa36877 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x748f0c9e dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x85e9cb79 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x8bdfdef8 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x9a2998a2 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0x9a6d4218 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xac801942 dibusb_rc_query +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xb612fef5 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xcc9ccaff dibusb_rc_keys +EXPORT_SYMBOL drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common 0xdc09b31c dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/dvb/frontends/af9013 0xe842a52b af9013_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/au8522 0x5ec116ef au8522_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/bcm3510 0x779dd7ab bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22700 0xde1ec93c cx22700_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx22702 0xb476af67 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24110 0x2caf1bf3 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x30c423c0 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24113 0x73c46c08 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24116 0xff8e9783 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0x087e05fb cx24123_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/cx24123 0xc8a9d3b2 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x49d96930 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x4b1e9df2 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb/frontends/dib0070 0x69859e80 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mb 0x0b2a0ddc dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x056f6c1d dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0x5b983439 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xa223cd3c dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xaf715d5c dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xc3ef1c14 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb/frontends/dib3000mc 0xd0f7b288 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x3d587598 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000m 0x80836f14 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x0a4d26a7 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x387b31dc dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x617d9e37 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x677b2b00 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0x8393d744 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib7000p 0xbb95a544 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x2186dbdc dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x2618d6a1 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0x69f961f6 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xae632d07 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/dib8000 0xe1db52d2 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0x5c86e53a dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xceda28ed dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xd1e7f0d4 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/dibx000_common 0xd75d804e dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb/frontends/dvb-pll 0x95cefe16 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6405 0xc9d8e4fa isl6405_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/isl6421 0x40c14899 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/itd1000 0xf0302373 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/l64781 0x60dbd7b7 l64781_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt3305 0x2f0c4577 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgdt330x 0x2ab00d3c lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lgs8gxx 0x88045ddd lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xc7d8c47a lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/lnbp21 0xf8818a69 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt312 0x9df228f4 mt312_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/mt352 0xe1a62a85 mt352_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt200x 0x93c831ec nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/nxt6000 0xd0561299 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51132 0x83819aad or51132_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/or51211 0x71cae6aa or51211_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1409 0xcdab6700 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1411 0x7440ef99 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0x1b302a0f s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb/frontends/s5h1420 0xc1428694 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/si21xx 0xbaaa02cc si21xx_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp8870 0x8a796c84 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/sp887x 0x5cf124f8 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stb6000 0xb52d66af stb6000_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0288 0x81f5281a stv0288_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0297 0x9084cd5a stv0297_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0299 0x5b6b0def stv0299_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv0900 0xc257551e stv0900_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/stv6110 0x313906f9 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10021 0x63926e5c tda10021_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10023 0x461078ab tda10023_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10048 0x294d8470 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x90f3305f tda10045_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda1004x 0x9a48c53f tda10046_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda10086 0xd70e8e14 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda8083 0xf1d8c009 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/tda826x 0x34ecdd98 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1820 0x0a41c64f ves1820_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/ves1x93 0x9859b38c ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10036 0x6695e1db zl10036_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10039 0x43f735bf zl10039_attach +EXPORT_SYMBOL drivers/media/dvb/frontends/zl10353 0x8d3dfdfe zl10353_attach +EXPORT_SYMBOL drivers/media/dvb/ttpci/ttpci-eeprom 0x53e8d89e ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0x89f38636 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/dvb/ttusb-dec/ttusbdecfe 0xa23487fc ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x3bbe31aa bttv_get_pcidev +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x4446826c bttv_sub_unregister +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xb51f888d bttv_sub_register +EXPORT_SYMBOL drivers/media/video/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x6e092a44 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/video/btcx-risc 0x75f38441 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/video/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/video/cpia 0x3fd9767f cpia_unregister_camera +EXPORT_SYMBOL drivers/media/video/cpia 0xb6efa9a3 cpia_register_camera +EXPORT_SYMBOL drivers/media/video/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x14a365b8 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/video/cx231xx/cx231xx 0x3fb0e953 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/cx2341x 0x155650f3 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/video/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/video/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/video/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/video/cx2341x 0xe2c2b5eb cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x2f99aa3a vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/video/cx88/cx88-vp3054-i2c 0x3c3e44af vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x45da4068 cx88_video_mux +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x4c6e9909 cx88_get_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x56c1003f cx88_set_freq +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x9721881f cx88_enum_input +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0x98d9fcba cx8800_ctrl_query +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xac4e53b9 cx88_user_ctrls +EXPORT_SYMBOL drivers/media/video/cx88/cx8800 0xb3e29727 cx88_set_control +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x2022a5e4 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x22d13405 cx8802_get_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x3df536e5 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0x6c1b13b6 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xc6b1b284 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xd646f5c2 cx8802_register_driver +EXPORT_SYMBOL drivers/media/video/cx88/cx8802 0xecb35991 cx8802_get_device +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x0e8d4e93 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x29edc7c8 cx88_free_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x2af08d65 cx88_newstation +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x3b7d1abd cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x3c19252d cx88_core_put +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x4255b59d cx88_get_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x5085a50c cx88_ir_start +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x5509a2bb cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x69b913e9 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x6f58002c cx88_set_stereo +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x7ee7dd9c cx88_reset +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x8dbe72e8 cx88_core_get +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9a044351 cx88_shutdown +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9b140fff cx88_sram_channels +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0x9d53c9e2 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa45ec613 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xa8868096 cx88_wakeup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xb47f6cda cx88_print_irqbits +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xdac2677b cx88_core_irq +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xe9378b2e cx88_ir_stop +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xec4984f7 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xecd49a4d cx88_set_scale +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xef7f7e80 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/video/cx88/cx88xx 0xf1c920b9 cx88_vdev_init +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0x9ec2f3fe em28xx_register_extension +EXPORT_SYMBOL drivers/media/video/em28xx/em28xx 0xc396d37b em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x19f32289 gspca_disconnect +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x37879e73 gspca_get_i_frame +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x447dee0c gspca_suspend +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x5d353485 gspca_auto_gain_n_exposure +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x87bf687c gspca_resume +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0x9670af2c gspca_debug +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xe43c1f21 gspca_dev_probe +EXPORT_SYMBOL drivers/media/video/gspca/gspca_main 0xf7b87a20 gspca_frame_add +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x00551eab ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x04b3089b ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x0b6f4808 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x17e2f941 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x2451ec6e ivtv_vapi +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x2c6534b9 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x5dd17aa7 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x7d240971 ivtv_api +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0x847bed26 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xa165df93 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/video/ivtv/ivtv 0xf3394d10 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x0ad4a7b8 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x1e2bb55a saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x27fd8a0a saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x3a505489 saa_dsp_writel +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x52e0914d saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x762c8613 saa7134_ts_register +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x7e2b49b6 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x93de0eb2 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0x9dd84ab7 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xba7a337a saa7134_set_gpio +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xd5fb6130 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/video/saa7134/saa7134 0xfdecb974 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/video/soc_camera 0x368135f2 soc_camera_apply_sensor_flags +EXPORT_SYMBOL drivers/media/video/soc_camera 0x4bd7d37f soc_camera_host_register +EXPORT_SYMBOL drivers/media/video/soc_camera 0x56d227fe soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/video/soc_camera 0x635cca14 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/video/soc_camera 0x6885b14e soc_camera_format_by_fourcc +EXPORT_SYMBOL drivers/media/video/tveeprom 0x29040b22 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/video/tveeprom 0xe217fd46 tveeprom_read +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x1099a738 usbvideo_RegisterVideoDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x1c8a5e43 usbvideo_AllocateDevice +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x1ec0783e usbvideo_TestPattern +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x26af5b87 RingQueue_WakeUpInterruptible +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x2b705d85 usbvideo_Deregister +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0x87276bc7 usbvideo_DeinterlaceFrame +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xa8caef21 RingQueue_Enqueue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xb3f01b51 RingQueue_Dequeue +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xbc4a757d RingQueue_Flush +EXPORT_SYMBOL drivers/media/video/usbvideo/usbvideo 0xd83dd151 usbvideo_register +EXPORT_SYMBOL drivers/media/video/v4l1-compat 0x54393106 v4l_compat_translate_ioctl +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x03165a85 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1dcaa0c8 v4l2_prio_max +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x1e326b97 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x2f639468 v4l2_prio_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x50766d69 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x76ba9a9a v4l2_prio_open +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x93d54f04 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x95284709 v4l2_prio_close +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9c7de443 v4l2_prio_change +EXPORT_SYMBOL drivers/media/video/v4l2-common 0x9eb43ee2 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xbecd2858 v4l2_prio_init +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xd9ee1e3f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/video/v4l2-common 0xf29fa11b v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x5620275c videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x72a3f0b0 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x79be20b7 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x8a1e20a6 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0x90fac9bf videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/video/videobuf-dvb 0xcd6c81c2 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/video/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/video/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/video/videodev 0x2cc4c206 video_devdata +EXPORT_SYMBOL drivers/media/video/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/video/videodev 0x5ebefe4b v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/video/videodev 0x63d6efd2 video_ioctl2 +EXPORT_SYMBOL drivers/media/video/videodev 0x6fc7e7f8 video_unregister_device +EXPORT_SYMBOL drivers/media/video/videodev 0x71dc3fa8 video_register_device_no_warn +EXPORT_SYMBOL drivers/media/video/videodev 0x75d3f437 video_register_device +EXPORT_SYMBOL drivers/media/video/videodev 0xa0d9859e video_usercopy +EXPORT_SYMBOL drivers/media/video/videodev 0xba829259 video_device_release +EXPORT_SYMBOL drivers/media/video/videodev 0xd43d90bf video_device_release_empty +EXPORT_SYMBOL drivers/media/video/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/video/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/video/videodev 0xfc464e81 video_device_alloc +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x0efa83aa videocodec_attach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x15b0267d videocodec_detach +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0x286c05a7 videocodec_register +EXPORT_SYMBOL drivers/media/video/zoran/videocodec 0xca7d4815 videocodec_unregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1180a4a6 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x14bf1252 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1d1867e5 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2b95f71e mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2f52a56d mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3385ed04 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3457a5f5 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x454f9929 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x48a3c37d mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x59e4bed2 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5ccdceca mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6632d500 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6cbc6745 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x6f06a16f mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7af05430 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8760e3a8 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8af006a0 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x8bddf5e5 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x91dfc5b2 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x9fda5839 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc198bed5 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd535f580 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd8239212 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9763f7f mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xda3d65c1 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe78f33b3 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf09e6241 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf157be79 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0e274745 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x15939fb6 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x18109415 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1ec63216 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x20b69080 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3ae823d8 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3df67af8 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x59b8075a mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x66798653 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x68714162 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6f7d6e7a mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7022f643 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7d4461f4 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x7f110c1b mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x86368de4 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x86bdc86a mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8d5f090a mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb16fd0f3 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb3066d9e mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb482e2c3 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb9e9dbc9 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xd62f7da9 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe305e838 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe5dd4191 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe6518229 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf8392f40 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x03b879e4 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x08ba3354 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x0b9acf7d i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1dbdfe41 i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x542fa251 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x895c41a4 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9768b5db i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9b273081 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xaa473973 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb2f65fca i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbc4457b8 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc208496a i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc3be922f i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc9054c32 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcab591b0 i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xcdb5427a i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe9c9a28c i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xfd6e5e48 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x0525fae1 ab3100_event_unregister +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x055d88f9 ab3100_event_registers_startup_state_get +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x7baef03b ab3100_get_register_page_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x964a5570 ab3100_mask_and_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0x9c137a1d ab3100_set_register_interruptible +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc0812a32 ab3100_get_chip_type +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xc209a052 ab3100_event_register +EXPORT_SYMBOL drivers/mfd/ab3100-core 0xd8e13c57 ab3100_get_register_interruptible +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x58c9a96e pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x94ffb373 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mfd-core 0x5ed526a1 mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x78e78463 mfd_remove_devices +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/c2port/core 0xb031c204 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0xef995405 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x0e13e8e2 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xf125048a ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x0eed20bf tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x17d421ca tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x21ccc76a tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x2320e343 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x3e06bc5e tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x598c3a84 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x689b6cc8 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x748ba49b tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x789cc87e tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x7a2bef49 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x7e47087f tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x8b01bd02 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xe185f964 tifm_eject +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0x626dca4c mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x095b4b21 mmc_host_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x0c4d53ec mmc_detect_change +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x24f0c452 mmc_card_awake +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x2719ec0f mmc_set_data_timeout +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3255b793 mmc_power_restore_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x3fa192b1 mmc_wait_for_req +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x4e7eff38 mmc_suspend_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x54e87e37 mmc_try_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x56df5a59 mmc_regulator_set_ocr +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x5756d859 mmc_free_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x6477a612 mmc_power_save_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x89968543 mmc_request_done +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x8b88ede4 mmc_register_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x8d16c256 mmc_release_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0x8f809bd7 mmc_wait_for_app_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xa941975f mmc_resume_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xae41d0c5 mmc_remove_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xb0dd7ded mmc_alloc_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbb75d03a mmc_card_can_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbc0c0656 mmc_host_lazy_disable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xbecda2db mmc_add_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xc2e40aac mmc_wait_for_cmd +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xd78693a8 mmc_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xddcd3665 __mmc_claim_host +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe878faf4 mmc_host_enable +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe8b17373 mmc_align_data_size +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xe96fe6b1 mmc_card_sleep +EXPORT_SYMBOL drivers/mmc/core/mmc_core 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x20b59c94 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x5c8c19b5 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xaf7157da cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x0c9789ab map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x0e4060e9 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xa7a3c3d6 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xf538c8a1 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xe743aefe mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x5375117e lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0xc1b4df99 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x0532ca4d add_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtd 0xfd350387 del_mtd_partitions +EXPORT_SYMBOL drivers/mtd/mtdconcat 0x8bc1b526 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtdconcat 0xde43f523 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/nand 0x4cf40bd4 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xb1b8bf66 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x0b942846 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xd8b2dbbe nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x71f07f1f onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x875c22f9 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x9d9146fc flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xbd927f0c onenand_default_bbt +EXPORT_SYMBOL drivers/net/8390 0x0f00cb08 ei_tx_timeout +EXPORT_SYMBOL drivers/net/8390 0x2c89eb91 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/8390 0x489b50b2 ei_start_xmit +EXPORT_SYMBOL drivers/net/8390 0x773ce9f1 ei_close +EXPORT_SYMBOL drivers/net/8390 0x7a943dfb ei_open +EXPORT_SYMBOL drivers/net/8390 0xa62084a9 ei_poll +EXPORT_SYMBOL drivers/net/8390 0xd2fd733e ei_get_stats +EXPORT_SYMBOL drivers/net/8390 0xdd365790 ei_interrupt +EXPORT_SYMBOL drivers/net/8390 0xde9391b6 NS8390_init +EXPORT_SYMBOL drivers/net/8390 0xe09890b5 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/8390 0xf633b663 ei_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x0b20827c arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x0cd71970 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x23f86078 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x288611a9 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x34b977c9 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x38a01b3e arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x3e539675 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x5c0668e3 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6adfb87f arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xddc58b92 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xde6df131 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x1dbd4242 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x53d71efc com20020_netdev_ops +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xc066bd9a com20020_found +EXPORT_SYMBOL drivers/net/bnx2 0x46e78b2e bnx2_cnic_probe +EXPORT_SYMBOL drivers/net/cnic 0x23804a9e cnic_register_driver +EXPORT_SYMBOL drivers/net/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x002bea0f cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x35612bc1 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3db39d41 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x3e8b4261 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x4552e6a6 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5b193ca1 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x5b45e7fa t3_l2t_send_event +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6532541f cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0x6ad11801 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa45b1f28 dev2t3cdev +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xa7679adf t3_l2t_get +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xaf316fae t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xb5f22b32 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xd5161e8b cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xd686092e cxgb3_register_client +EXPORT_SYMBOL drivers/net/cxgb3/cxgb3 0xece115ae t3_l2e_free +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x326d4372 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x56d92fba hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x5f3ec3d7 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x69e5b50b hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xae89faa7 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x04426ced irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x5ee593f0 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x6ae57d45 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x872efd30 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x8bbe62e0 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x99c072ab sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xabfd37c4 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xc3968aa9 sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xec41e372 sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xf712f97a sirdev_receive +EXPORT_SYMBOL drivers/net/mdio 0x0f934475 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mii 0x117db5af mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x376da907 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x4da2236c mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x5f7ebcc4 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x616a9338 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x8560f8a6 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x86638017 mii_nway_restart +EXPORT_SYMBOL drivers/net/mii 0xf23f55a9 mii_check_link +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x23248bd3 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0xc37f762b alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp_generic 0x076b911c ppp_unit_number +EXPORT_SYMBOL drivers/net/ppp_generic 0x5bee9688 ppp_channel_index +EXPORT_SYMBOL drivers/net/ppp_generic 0x639364db ppp_register_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x6d0cfdf4 ppp_unregister_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0x73821588 ppp_input +EXPORT_SYMBOL drivers/net/ppp_generic 0xa30b47f1 ppp_register_net_channel +EXPORT_SYMBOL drivers/net/ppp_generic 0xc127e718 ppp_register_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xc226320a ppp_unregister_compressor +EXPORT_SYMBOL drivers/net/ppp_generic 0xd17a9ccc ppp_output_wakeup +EXPORT_SYMBOL drivers/net/ppp_generic 0xf64de110 ppp_input_error +EXPORT_SYMBOL drivers/net/pppox 0x160b7cd9 register_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xb429bf77 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/pppox 0xfbedcafb pppox_ioctl +EXPORT_SYMBOL drivers/net/slhc 0x2278e94b slhc_remember +EXPORT_SYMBOL drivers/net/slhc 0x26b760c4 slhc_init +EXPORT_SYMBOL drivers/net/slhc 0x3fe0d1c0 slhc_free +EXPORT_SYMBOL drivers/net/slhc 0x62538167 slhc_toss +EXPORT_SYMBOL drivers/net/slhc 0x7e87227e slhc_compress +EXPORT_SYMBOL drivers/net/slhc 0xa78d9eb7 slhc_uncompress +EXPORT_SYMBOL drivers/net/sungem_phy 0xa5af2d93 mii_phy_probe +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x4b89153e tms380tr_close +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0x81709781 tms380tr_netdev_ops +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xa1ac7e88 tmsdev_init +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xcc8c23df tms380tr_open +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd2328794 tms380tr_wait +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xd49af46e tms380tr_interrupt +EXPORT_SYMBOL drivers/net/tokenring/tms380tr 0xef45d9b0 tmsdev_term +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x01bc8dd0 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x25927d1f attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x4d6cac5e hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x72e2b94b hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8660fbb8 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8be8e5c4 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8d229c56 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa5a2bca0 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xabf31d95 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xc1505cb4 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0xed3b54a7 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wireless/airo 0x1d60ddda init_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x762e5ad4 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x9a9ef976 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x249eb8c6 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x31219afb ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xa8879946 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbe25b39d ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xc0b47558 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/atmel 0x0e94158c atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0x8e61aec7 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x91b79343 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0462dc72 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2d8bcc8d hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2ea855fd hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2fa0ad21 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3fc07afc hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4b0e6643 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5ab14cf1 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5b92124d hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5eab6d84 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x689d59ea hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6d37f199 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7f55a924 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8ff0a102 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x96d734dc prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x99b21218 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa3dbed08 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa5f86222 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa840836d hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb422b556 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb7e237a1 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd2381190 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe445e47b hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe4e95cba hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xefd49b4b hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfb7d5ddf hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfb996455 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x07a50202 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0807d4c1 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0f7f961d libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x12925458 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x158d97c4 alloc_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x4bf007a9 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x4f742eac libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x6792abab libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7753fd48 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7bc0d4e5 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x86e01e9d libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x99cfb5c8 free_ieee80211 +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa5ea110d libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa64e0881 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb27a7ed4 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xc1f01092 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd68ad4b4 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xde950d1b libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf29f781d libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf8f6c456 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xfd9c1663 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x02c50699 iwl_sensitivity_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x03874a25 iwl_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x03a83b0d iwl_rate_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x07238349 iwl_hwrate_to_tx_control +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x08937508 iwl_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0ef6fa74 iwl_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x0fe872a5 iwl_rx_reply_rx_phy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x107954e2 iwl_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1090a6f1 iwl_setup_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x15dfea77 iwl_tx_skb +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x164f76ef iwl_rx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x19f0e900 iwl_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1ad34dc2 iwl_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1b5fba4f iwl_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1cfc9f71 iwl_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1d77b399 iwl_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x1eca33de iwl_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x211985ea iwl_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x219389d6 iwlcore_eeprom_acquire_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x21ec723b iwl_find_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x23badbdb iwl_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x240d3f63 iwl_remove_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x24458ddc iwl_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2534b256 iwl_ht_enabled +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x25479661 iwl_get_ra_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x26bd4db7 iwl_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2731197c iwl_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x27997c7e iwl_alloc_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2bf44129 iwl_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2cf38d6a iwl_set_rxon_chain +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x2cfd173f iwl_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x30c5ac64 iwl_rxq_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x372e4016 iwl_setup_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3754aac8 iwl_verify_ucode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3816b871 iwlcore_eeprom_verify_signature +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3c88e704 iwl_hw_detect +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3ce058e6 iwl_mac_get_tx_stats +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d4e7c81 iwl_leds_register +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x3d983f11 iwl_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x41865d39 iwlcore_eeprom_enhanced_txpower +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x42f65b45 iwl_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x438f2685 iwl_configure_filter +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x43df5006 iwl_get_sta_id +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4941196c iwl_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4a213e75 iwl_eeprom_get_mac +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4cc1a1ff iwl_activate_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x4f604fb3 iwl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5111c89c iwl_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x52f38aeb iwl_rf_kill_ct_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x54ee5e5e iwl_rx_reply_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5791831e iwl_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x57cbf908 iwl_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5a484e26 iwl_send_calib_results +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5adb8387 iwl_reset_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5b3d4481 iwl_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5dda8eb8 iwl_sta_rx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5df4c9e7 iwl_chain_noise_calibration +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5e0a082b iwl_rx_statistics +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x5faf24ad iwl_remove_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x614fdb08 iwl_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x62727d56 iwl_calib_set +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x660886a3 iwl_disable_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6c190ceb iwl_tt_handler +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6df71598 iwl_rx_csa +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6f869509 iwl_tx_ant_restriction +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x6ff4e3cd iwl_sta_rx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x706a85be iwl_set_default_wep_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x70f47766 iwlcore_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x73372fc6 iwl_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x76310486 iwl_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x765e011d iwl_tt_enter_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x784db56b iwl_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x78976e61 iwl_isr_legacy +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7aefc8d5 iwl_init_sensitivity +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7b6ef129 iwlcore_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x7dc1684e iwl_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x802f386a iwl_rx_queue_restock +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x809e2616 iwlcore_eeprom_release_semaphore +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x84e03d0d iwl_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x86596641 iwl_tx_queue_reclaim +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8670273d iwl_hwrate_to_plcp_idx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x87a7e1c0 iwl_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8be21b89 iwl_rx_reply_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8c63da4d iwl_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x8fab68b0 iwl_tt_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x95a0d5b4 iwl_hw_txq_ctx_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9742a655 iwl_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99b90a5f iwl_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x99c276f3 iwl_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a01d9be iwl_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9a60af0b iwl_bg_scan_check +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9cde1f24 iwl_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0x9e86e8e0 iwl_bg_abort_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa09cbb1c iwl_set_dynamic_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa2d0bb83 iwl_get_free_ucode_key_index +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa30a411a iwl_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa676b8ec iwl_rx_replenish_now +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xa7101c0e iwl_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaad0846e iwl_bg_scan_completed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaccccfd6 iwl_rx_replenish +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaecb333f iwl_tt_exit_ct_kill +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xaf75759e iwlcore_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb05f306b iwl_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb0616c19 iwl_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb1a52513 iwl_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb1bbe96d iwl_eeprom_check_version +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb4dfb0ea iwl_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb5501ffe iwl_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb7202318 iwl_reset_run_time_calib +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb7c612fe iwl_rxon_add_station +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb827faca iwl_hw_nic_init +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb8bddeb4 iwl_sta_tx_modify_enable_tid +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb94f1694 iwl_init_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xb9c23441 iwl_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbbd0d267 iwl_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbe5a083c iwl_tt_exit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xbf735d81 iwl_send_statistics_request +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc228c74f iwl_mac_beacon_update +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc4dcae4c iwl_uninit_drv +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc747a29f iwl_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xc8211671 iwl_leds_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbaf4931 get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcbb651e5 iwl_alloc_all +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcc946e7d iwl_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xcf323ef2 iwl_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd033abd0 iwl_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd0cf59a8 iwl_send_static_wepkey_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd28805ed iwl_rx_pm_debug_statistics_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd29c1b16 iwl_rx_pm_sleep_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd322bbd7 iwl_set_hw_params +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd3afb9ae iwl_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd8ac3d79 iwl_clear_stations_table +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xd92e5bf7 iwl_is_monitor_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xdd64d437 iwl_free_isr_ict +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe0a88b74 iwl_tx_agg_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe20b1290 iwl_free_tfds_in_queue +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe48e7289 iwl_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe593e608 iwl_update_tkip_key +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe7ce5d70 iwl_rates +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xe9738218 iwl_set_mode +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeca44d9e iwl_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xee43f4e8 iwl_txq_check_empty +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xeec062a5 iwl_rx_missed_beacon_notif +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf06298d8 iwl_txq_ctx_stop +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf4549d6a iwl_reset_qos +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf53e3633 iwl_tx_agg_start +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xf7624ac6 iwl_rx_reply_compressed_ba +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlcore 0xfb634d6d iwl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x0a60b19a free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x4196c38b hermes_write_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x426c2e70 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x51b86301 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x6a927e18 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x8262ae43 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x925cb74c alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa031d8e4 hermes_doicmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc60b5e9e hermes_bap_pwrite +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc70063c7 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xc79babc2 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd38d8ae2 hermes_read_ltv +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd3f714e5 hermes_bap_pread +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5168829 hermes_allocate +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd5336e5d hermes_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd54e219d hermes_docmd_wait +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xed47b224 hermes_struct_init +EXPORT_SYMBOL drivers/parport/parport 0x03be37ec parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x041597bc parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x1bdda377 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x2cfa2845 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x2e97b34b parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x2f3633c9 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x3be50baf parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x3fba4c31 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x40f8495c parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x4531f9d1 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x539dc527 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x57fbab94 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x73aad1f1 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x7c210dfb parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x80909fb1 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x8132ec94 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x826d3bea parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x86341bd8 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x9befccf0 parport_write +EXPORT_SYMBOL drivers/parport/parport 0x9c640b27 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x9d5eff70 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0xa4eb0386 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0xb1a7bc41 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0xbdcbe411 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0xc91afca4 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xda87e50c parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0xdbf77799 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xdd9e71e3 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xe4766f85 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0xe7dc9eac parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xed57fba6 parport_read +EXPORT_SYMBOL drivers/parport/parport_pc 0x9225c0b9 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xb8c38276 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x28fe0883 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x469e29c2 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4934f15b pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4fd033a0 pcmcia_error_func +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x58c6a164 pcmcia_get_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5d44c9c7 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x60be2430 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x67a6ae2f pcmcia_get_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8db0dd35 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa12244cf pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe29e2c21 pcmcia_request_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xe2ccc359 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xea22457b pcmcia_modify_configuration +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xee464a4f pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xef436004 pcmcia_access_configuration_register +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xefe55b0d pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf0a25e12 pcmcia_error_ret +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x003c8983 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1dcbf4ae pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x1f6074d8 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2a062eab pcmcia_socket_dev_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x2da32618 pcmcia_find_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x301933dc pccard_get_first_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x313db918 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x33f691ac pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3ed6d116 release_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3f7eabec pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x466aa79c pcmcia_read_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x532b9e65 pcmcia_eject_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x59700c45 pcmcia_socket_dev_early_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5a16c32e pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5b14446e pcmcia_socket_dev_suspend +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x5cba42a6 pcmcia_suspend_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x61fd7e7c pccard_read_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x66abd625 pccard_get_next_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x7cf9b1fe pcmcia_insert_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x815c1e70 pcmcia_replace_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8a396d40 pcmcia_resume_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8cdeab66 pccard_validate_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x98b3d5fa pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x99d66e67 pccard_get_tuple_data +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9a7fc6e6 pcmcia_socket_dev_late_resume +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x9dadf794 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa5a3a1bd pccard_static_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa5fb951f pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xadf2491d pcmcia_write_cis_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xc02ef2c8 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd0426127 pcmcia_validate_mem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xd0c0cc23 pcmcia_adjust_io_region +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xdbad739c destroy_cis_cache +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xfb426db2 pcmcia_find_mem_region +EXPORT_SYMBOL drivers/pcmcia/rsrc_nonstatic 0x0b828516 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pps/pps_core 0x1e145952 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe3c32793 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xe6a16116 pps_event +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x1e85a8b8 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x5542ba10 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8158a0a3 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8d150b9e fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9b5b2871 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xbe5ac566 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xc3103d9e fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x076a0909 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0b14e353 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0cbc86a1 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1cc52265 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2079fe3e fc_get_host_port_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x28827273 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2a926d0d fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x35e26905 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3ab84e75 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x478fbe67 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x48ac03fa fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4d7f783a fc_seq_els_rsp_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x514b2e82 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x525cb8b6 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x558940ec fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56183917 fc_destroy_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x61d55a81 fc_fcp_ddp_setup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x634ad5b3 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67750428 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x752cdba2 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7730b6fc fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7ff188de fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x830a0d13 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x849170c0 fc_fcp_complete +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x85bcb33a fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x88d69030 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8c00fa30 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8c2dabd6 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x93a374fc fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x97c2b311 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa522ec9b fc_exch_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa68ed6c5 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb26ff68a fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcc9d9165 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcf569b87 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcf8aaf99 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcfe79558 __fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd0e2fa91 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd2b7af89 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd6cb3359 fc_setup_rport +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdb52a895 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdc198899 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe0c0c450 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe111a882 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe32865a2 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xedb6ff0d fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf7365d60 fc_seq_exch_abort +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0xb969ba68 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x06c3c82a osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1200625c osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x207e6439 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x30f16540 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x33ec4d80 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4613dca1 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x479bd1ab osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5338d1dd osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x561a66f3 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x565c092b osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x57d10026 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x638b01e6 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x652c66ba osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6686d84e osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x724d6cd1 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x732417f2 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x749c6140 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x764222c8 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7e34d037 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x82e37b43 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x88295324 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8d6ca81a osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x927b16c3 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa53c5860 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xaa1778f5 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb03601c2 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb75f39e0 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc918a90e osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc9474702 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd70174e5 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe1a62137 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe58fe4ee osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/osd 0x2ca89ec1 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0xf7a82b60 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xfc20a580 osduld_put_device +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x425f3cdd qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x5ea382ce qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x8b09794f qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x9c3b74a2 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xa59ae000 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdac865ee qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xdc310b12 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x17b65f15 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x289408cf raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0xdd43f748 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x3f56d175 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x54265cbf fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5a5969f9 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x911105e3 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x98bd0d92 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa76dc989 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xab6d013e fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb43b6d51 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb5c383a5 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xd202b3ae fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe5447a39 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf9e4b7cb fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x04ba0416 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x105ad83e sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x20abbf02 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3984ee76 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3b41c54d sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x515fe353 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x57435cfc sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x60827280 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x625747d4 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x67c84a49 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x752846d5 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x79474f38 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7befba79 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7f1a5280 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7f5661be sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8758dd6f sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8b59657f sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa4ad7fd4 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa533e42e scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb05990e7 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb6e32592 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc6339be9 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcb8f98dd sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdfc59573 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf039a2ff sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf0a83ede sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3edffa9b spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x5f2d4000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x6e55806a spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x9ab3ccea spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xfa6a6a3f spi_display_xfer_agreement +EXPORT_SYMBOL drivers/serial/8250 0x943566b8 serial8250_register_port +EXPORT_SYMBOL drivers/serial/8250 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL drivers/serial/8250 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL drivers/serial/8250 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL drivers/serial/serial_core 0x013ed0d6 uart_get_baud_rate +EXPORT_SYMBOL drivers/serial/serial_core 0x14c6fe37 uart_resume_port +EXPORT_SYMBOL drivers/serial/serial_core 0x509c5f85 uart_register_driver +EXPORT_SYMBOL drivers/serial/serial_core 0x54d8396b uart_suspend_port +EXPORT_SYMBOL drivers/serial/serial_core 0x5627ee7d uart_write_wakeup +EXPORT_SYMBOL drivers/serial/serial_core 0x83be4de5 uart_get_divisor +EXPORT_SYMBOL drivers/serial/serial_core 0x9ee36605 uart_remove_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0xad49eb00 uart_update_timeout +EXPORT_SYMBOL drivers/serial/serial_core 0xc28fb7fc uart_add_one_port +EXPORT_SYMBOL drivers/serial/serial_core 0xdb670b45 uart_unregister_driver +EXPORT_SYMBOL drivers/serial/serial_core 0xdce0ba4f uart_match_port +EXPORT_SYMBOL drivers/ssb/ssb 0x07599a15 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x09901563 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x234ed4f7 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x3115ada3 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x39f90b7e ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x43e3ed46 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x440723bc ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x44ef7e54 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x4d64f867 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x643332ed ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x7b2edbb1 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x88b10264 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x8bd12a2d ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x9b33b71c ssb_dma_alloc_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0x9ff49f7c ssb_dma_set_mask +EXPORT_SYMBOL drivers/ssb/ssb 0xa9d3af88 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0xb6029c47 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xef23e9ab ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xf1d6eb6a ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0xf7508f35 ssb_dma_free_consistent +EXPORT_SYMBOL drivers/ssb/ssb 0xf7cc25f2 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0xfe942456 ssb_dma_translation +EXPORT_SYMBOL drivers/telephony/ixj 0xea820ea5 ixj_pcmcia_probe +EXPORT_SYMBOL drivers/telephony/phonedev 0x3868e2c5 phone_unregister_device +EXPORT_SYMBOL drivers/telephony/phonedev 0xbc7bfbfe phone_register_device +EXPORT_SYMBOL drivers/usb/gadget/net2280 0x2d3bfe31 usb_gadget_register_driver +EXPORT_SYMBOL drivers/usb/gadget/net2280 0x38b52841 usb_gadget_unregister_driver +EXPORT_SYMBOL drivers/usb/gadget/net2280 0xf0ce3ec5 net2280_set_fifo_mode +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0xf523669d sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x9f2ba26c usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xe8975afe usb_serial_suspend +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0xc86baa7c corgibl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x741d0b95 lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0xceaf7315 lcd_device_register +EXPORT_SYMBOL drivers/video/cyber2000fb 0x04874907 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x2d68f633 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0x4253ace5 cyber2000fb_get_fb_var +EXPORT_SYMBOL drivers/video/cyber2000fb 0xbde4fa94 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/display/display 0xba35ba37 display_device_register +EXPORT_SYMBOL drivers/video/display/display 0xba3b764c display_device_unregister +EXPORT_SYMBOL drivers/video/output 0xacca7f05 video_output_register +EXPORT_SYMBOL drivers/video/output 0xfe01f69f video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x00d1fce9 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x0467cd5d svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x07b3da30 svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0x12367296 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0x1b95c56a svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x1f72b221 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x5d82a8a6 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x63e898d1 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x7a3ae959 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x80408443 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0x8fa8438b svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0xa5c11ac0 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0xab3b22ad svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xd8d541ec svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0xdad682b1 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xe24b7a51 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0xec83c473 svga_match_format +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/syscopyarea 0x9f13d4f7 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xa38fb027 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x586f5697 sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0x13105598 w1_bq27000_read +EXPORT_SYMBOL drivers/w1/slaves/w1_bq27000 0xad74332e w1_bq27000_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x14d1abf6 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4e79ca24 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x7cafe718 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x8a411a86 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/wire 0x32deb217 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x4f138164 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x7b1ea50d w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xed208f1f w1_unregister_family +EXPORT_SYMBOL fs/configfs/configfs 0x07f5d922 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0x1fbd389e config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0x43a45052 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x53288193 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x69a63969 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x6c782356 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x78957046 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x7f2ec0af configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0x9fcb6f90 configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0xc37799dd configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0xda11e2ce config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0xe3bf730f config_item_init_type_name +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x14d4b8b5 fscache_object_slow_work_ops +EXPORT_SYMBOL fs/fscache/fscache 0x1544078e fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x3882cc5d __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x3f8b6523 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x496932b9 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x4a762d38 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x4e2e3b0d fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x58e40260 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x6e171add fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x6e598354 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x7c61fa8b fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x7ce20641 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x84fe706a __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x8c43d5c9 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x92f96e5b __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x96b72435 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x99457030 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0xab98243b __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xb5ab452a fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0xbda1b50c fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0xbe5264ea fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xdbc1eb67 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xdde25976 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0xe1327e33 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xebd812a8 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0xf1990a8e __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0xf6fa030b __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xfa011757 __fscache_check_page_write +EXPORT_SYMBOL fs/nfsd/nfsd 0x0e195c1c nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x28fb929b nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/quota/quota_tree 0x1a90a5e6 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x1bd8f983 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x396fc652 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x47e2b625 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x6b1598dd qtree_entry_unused +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc-t10dif 0xb6896671 crc_t10dif +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf0caf44b zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8023 0x362a3d5d destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x90f90f62 make_8023_client +EXPORT_SYMBOL net/9p/9pnet 0x03142693 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x0b11ff5a p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x211d726c v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x2c405d53 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x36dc309d p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x422ba54a v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x492df16b v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x518af991 p9_client_version +EXPORT_SYMBOL net/9p/9pnet 0x5e65b37f p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x62e2a55d p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x6b754e6f p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x7310a66f p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x76b79bf1 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x77012f2e p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x889313f6 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x8b83cccb p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x8f34fe15 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x98650ec8 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x99a7f30f p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x99aa7841 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x9a75e93b p9_client_auth +EXPORT_SYMBOL net/9p/9pnet 0x9bf14ed3 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xb2889ea2 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0xb5f2bc2f p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xca043926 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xd331fc1d p9pdu_dump +EXPORT_SYMBOL net/9p/9pnet 0xdc092085 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xeb344fe8 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0xf8f1259e p9_client_destroy +EXPORT_SYMBOL net/appletalk/appletalk 0x1c40c744 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x54b2fae0 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x74444f89 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0xfc407947 alloc_ltalkdev +EXPORT_SYMBOL net/atm/atm 0x1a24e5e2 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x1f80b66a atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x2168df69 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x31eb46b9 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x46ce154d atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x56a7a05a atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x5776884e vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x818391dc atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x89195dc3 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x891ad2c0 atm_charge +EXPORT_SYMBOL net/atm/atm 0xb033bdc5 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xb72b999f register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xc2d52128 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0xead20b07 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/ax25/ax25 0x19b816cb ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x20cdcf07 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d2d82ec ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x3d747883 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x4293b131 ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x447f9758 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x564d9f14 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x608c183c ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xb14457df ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0xbc113b2e ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xe8af6386 ax25_send_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0d92e210 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x159580d9 hci_send_acl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1add63f3 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x26784fdf hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3dce36e9 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3fe4ac59 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4b154ac2 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x5140676d hci_conn_change_link_key +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6e64cb3e hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6e8b2ac6 hci_unregister_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7094f8ae bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x70ca707a bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x835339c7 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8360e5cd hci_send_sco +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8f1776ac hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x90a04ddc hci_connect +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9c670071 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9dca03c1 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9fa90214 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa1a4037e bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xaa7326fc hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xaa9600f3 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xab37ce6a hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb3254d2b hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc2066af0 batostr +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc21ee1ad hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc51fbbc2 hci_conn_check_link_mode +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcce2f6f0 hci_register_proto +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd1a01d13 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd3c35529 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd8faee2c hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe6d9b622 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfa4b5ec3 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/l2cap 0xfc31fe88 l2cap_load +EXPORT_SYMBOL net/bridge/bridge 0x906fde47 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x49f598db ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xf6ead3a3 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xf76f4704 ebt_do_table +EXPORT_SYMBOL net/can/can 0x15790ca7 can_send +EXPORT_SYMBOL net/can/can 0x80b37484 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x8b64989f can_proto_register +EXPORT_SYMBOL net/can/can 0xb0bf939c can_rx_register +EXPORT_SYMBOL net/can/can 0xfccfc1aa can_rx_unregister +EXPORT_SYMBOL net/ieee802154/nl802154 0x08dbfacd ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0x708c216c ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x76c1a4b1 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0x94e0d846 ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xb8d1d1ad ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/nl802154 0xc0360cd5 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/nl802154 0xe0aa5fa7 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/wpan-class 0x5b2e6fc4 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/wpan-class 0x775c4e85 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/wpan-class 0x85b8f7a0 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/wpan-class 0xa3406b56 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/wpan-class 0xec4badff wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x0f396bb8 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x3cf3e86c arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xc77f0574 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xa5a0439b ipt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xbcd9f925 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xe514f7d2 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x06324dcc nf_nat_used_tuple +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x2cdccd1b nf_nat_protocol_register +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x6001beba nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x65fc7065 nf_nat_protocol_unregister +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x9457deb2 nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0x9fa775b5 nf_nat_follow_master +EXPORT_SYMBOL net/ipv4/netfilter/nf_nat 0xf4dcebd8 nf_nat_setup_info +EXPORT_SYMBOL net/ipv4/tunnel4 0x132122a9 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x7b1ee7c8 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv6/ipv6 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL net/ipv6/ipv6 0x0c61c3b7 in6_dev_finish_destroy +EXPORT_SYMBOL net/ipv6/ipv6 0x0f285752 inet6_del_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x10402c6c ipv6_chk_prefix +EXPORT_SYMBOL net/ipv6/ipv6 0x1a848851 ipv6_chk_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x26f30752 inet6_bind +EXPORT_SYMBOL net/ipv6/ipv6 0x28101cd5 ipv6_getsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0x30123eb5 icmpv6_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0x48cddddb nf_ip6_checksum +EXPORT_SYMBOL net/ipv6/ipv6 0x4a28b614 ip6_xmit +EXPORT_SYMBOL net/ipv6/ipv6 0x511fdd17 xfrm6_input_addr +EXPORT_SYMBOL net/ipv6/ipv6 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0x61f7a096 inet6_add_protocol +EXPORT_SYMBOL net/ipv6/ipv6 0x63350878 xfrm6_find_1stfragopt +EXPORT_SYMBOL net/ipv6/ipv6 0x64fa949f ipv6_dev_get_saddr +EXPORT_SYMBOL net/ipv6/ipv6 0x684c504e rt6_lookup +EXPORT_SYMBOL net/ipv6/ipv6 0x818abfae inet6_register_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0x866e37b3 xfrm6_rcv +EXPORT_SYMBOL net/ipv6/ipv6 0x8893d35c ip6_route_output +EXPORT_SYMBOL net/ipv6/ipv6 0x8e33dd27 icmpv6_send +EXPORT_SYMBOL net/ipv6/ipv6 0x974c59b6 xfrm6_rcv_spi +EXPORT_SYMBOL net/ipv6/ipv6 0x989768f1 ndisc_build_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xa3aad4c0 xfrm6_prepare_output +EXPORT_SYMBOL net/ipv6/ipv6 0xa9d73f1f ipv6_push_nfrag_opts +EXPORT_SYMBOL net/ipv6/ipv6 0xb5ab0ae5 inet6_getname +EXPORT_SYMBOL net/ipv6/ipv6 0xb6b15179 ipv6_setsockopt +EXPORT_SYMBOL net/ipv6/ipv6 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL net/ipv6/ipv6 0xce50835b inet6_ioctl +EXPORT_SYMBOL net/ipv6/ipv6 0xcf162db2 inet6_unregister_protosw +EXPORT_SYMBOL net/ipv6/ipv6 0xd613d0b8 ip6_frag_init +EXPORT_SYMBOL net/ipv6/ipv6 0xdbddb5d0 ip6_route_me_harder +EXPORT_SYMBOL net/ipv6/ipv6 0xe1a81c3a icmpv6msg_statistics +EXPORT_SYMBOL net/ipv6/ipv6 0xe690b8fd __ipv6_isatap_ifid +EXPORT_SYMBOL net/ipv6/ipv6 0xed146c95 inet6_release +EXPORT_SYMBOL net/ipv6/ipv6 0xf0558be3 ndisc_send_skb +EXPORT_SYMBOL net/ipv6/ipv6 0xf905b48f ndisc_mc_map +EXPORT_SYMBOL net/ipv6/ipv6 0xfc1b4d4d ip6_frag_match +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x1496d9ff ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x1c394082 ipv6_find_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb8bddf33 ip6t_ext_hdr +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xb9043b8f ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xe86b5f34 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x027dd6d4 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0x6e8126eb xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9cd013f2 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xab14e193 xfrm6_tunnel_free_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xdb1b42d1 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x20861eea ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x25be04ba ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x281f4c56 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8372f33c ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8aa76f92 ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x9021c8f9 ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xa5310882 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xfbf380b6 ircomm_close +EXPORT_SYMBOL net/irda/irda 0x05d7cfe5 irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x0bab0ccf irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x19d79c82 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0x1b3dc63f iriap_close +EXPORT_SYMBOL net/irda/irda 0x1c51e992 hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x1f18ef51 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x22b0f52d hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x23c524c0 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x297e076c irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x30827e1c irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x38a20e5b irda_debug +EXPORT_SYMBOL net/irda/irda 0x3b2e9df9 hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x42c7c5ce irias_find_object +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x519118cc irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0x538fe1e0 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0x5504cf7c hashbin_new +EXPORT_SYMBOL net/irda/irda 0x552ae024 irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x57fb1ed2 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x5aad87aa irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x5d609063 irias_new_object +EXPORT_SYMBOL net/irda/irda 0x64e4855c irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x6621aa8a hashbin_find +EXPORT_SYMBOL net/irda/irda 0x66d4a579 async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x701e028e irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7af2c1d2 irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x7c21cde0 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x81f200cb irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x8b231543 iriap_open +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x9555c3a9 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9e96b486 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xa491bdb7 proc_irda +EXPORT_SYMBOL net/irda/irda 0xa5c36568 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0xb26673e1 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0xb2873db9 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc64617fb irlap_open +EXPORT_SYMBOL net/irda/irda 0xca030a53 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0xce19a471 irttp_dup +EXPORT_SYMBOL net/irda/irda 0xdd4b6584 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xdd5c4bee irlap_close +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe2f84c82 hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0xe5f91536 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0xeac2a7c0 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xef1dd810 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0xf39b7fe0 irda_setup_dma +EXPORT_SYMBOL net/lapb/lapb 0x5611692c lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x636bda6f lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x753c3226 lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0x7c3f6204 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x7ef0e670 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0xc8b2d885 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0xccf20ef9 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0xdf920803 lapb_register +EXPORT_SYMBOL net/mac80211/mac80211 0x070f1a15 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x0770bc8c ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x0b15301c __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x13ad94a5 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x15b01c20 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x1a306c08 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x27f6daa4 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x3248bba2 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x349925ab ieee80211_get_tkip_key +EXPORT_SYMBOL net/mac80211/mac80211 0x3ba5f286 ieee80211_stop_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0x3f47c728 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x439ee5a9 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x46edcffc ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x495c8cf4 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x52acaa73 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x5631f599 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x58cecf7e ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x5f29f313 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x71ededcc ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x725d8492 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x77f96876 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x786436c1 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x7880771f ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x9932bde5 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x9d6e7e60 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xa1ed71b7 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0xb63cd7a6 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0xb783acd0 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xb9eebc9b ieee80211_start_tx_ba_cb +EXPORT_SYMBOL net/mac80211/mac80211 0xba3b0333 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xbf348e0c ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc4b0a8e2 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xd0fa64d0 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xd8184e6e ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xdaa09704 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0xe8abe42d ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xee7dc600 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0xef317fcc ieee80211_beacon_get +EXPORT_SYMBOL net/mac80211/mac80211 0xf1445304 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xfadb971f ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xfb68fc30 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x13844550 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1b56cc06 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1fa4097f ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x25bd8d94 ip_vs_skb_replace +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x3aeaca90 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x5e7eb644 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x649bdd42 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa0096bf5 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa1dbc2d8 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xb795149c register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xcf79e816 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xf37e8e4e register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x17bab0ff __nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xde8e68ee __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0xa9ae6d70 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/x_tables 0x16a5e826 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x1b17f8cf xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x4053f827 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x5769336c xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x58717c37 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x6ae64da2 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x82bab04f xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x8fe7cc5b xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xc3ff5dff xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xcda4df00 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0xce6e5151 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xd20d11a3 xt_find_target +EXPORT_SYMBOL net/phonet/phonet 0x0d9bd527 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x2560d9ea phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x411728a9 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x7f7f7ce3 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x7fd2f7f1 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x97c99f60 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0xa954c35b pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xc43d09b1 phonet_stream_ops +EXPORT_SYMBOL net/rfkill/rfkill 0x122da747 rfkill_set_states +EXPORT_SYMBOL net/rfkill/rfkill 0x240cc33d rfkill_get_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0x42a1e621 rfkill_set_sw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x4df179e2 rfkill_register +EXPORT_SYMBOL net/rfkill/rfkill 0x50eb7143 rfkill_set_hw_state +EXPORT_SYMBOL net/rfkill/rfkill 0x5f07851c rfkill_alloc +EXPORT_SYMBOL net/rfkill/rfkill 0x7577c273 rfkill_pause_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x7afd9e83 rfkill_resume_polling +EXPORT_SYMBOL net/rfkill/rfkill 0x96159245 rfkill_unregister +EXPORT_SYMBOL net/rfkill/rfkill 0xa18dfb7e rfkill_destroy +EXPORT_SYMBOL net/rfkill/rfkill 0xcddb3a72 rfkill_blocked +EXPORT_SYMBOL net/rfkill/rfkill 0xdb457651 rfkill_set_led_trigger_name +EXPORT_SYMBOL net/rfkill/rfkill 0xe09b4f41 rfkill_init_sw_state +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0efe6756 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x38241817 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4959aedc rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4c62dea5 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x5478889b rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6d19f14f rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x79254a71 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7e8d753b rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x86b2dd42 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8866474f rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xac15cdb0 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb5ab3308 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xc2ff46b1 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xd277f2c1 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xebd22bd1 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/sunrpc/sunrpc 0x700b59cc svc_pool_stats_open +EXPORT_SYMBOL net/tipc/tipc 0x08acf310 tipc_available_nodes +EXPORT_SYMBOL net/tipc/tipc 0x10d40fcd tipc_isconnected +EXPORT_SYMBOL net/tipc/tipc 0x1472b270 tipc_disconnect +EXPORT_SYMBOL net/tipc/tipc 0x1479cb03 tipc_deleteport +EXPORT_SYMBOL net/tipc/tipc 0x15b5ecde tipc_set_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x16f27683 tipc_block_bearer +EXPORT_SYMBOL net/tipc/tipc 0x259b74f9 tipc_acknowledge +EXPORT_SYMBOL net/tipc/tipc 0x27d8bb58 tipc_send2port +EXPORT_SYMBOL net/tipc/tipc 0x310d1bc9 tipc_detach +EXPORT_SYMBOL net/tipc/tipc 0x3639977e tipc_register_media +EXPORT_SYMBOL net/tipc/tipc 0x3712e340 tipc_portunreliable +EXPORT_SYMBOL net/tipc/tipc 0x3976041f tipc_set_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x3e93b677 tipc_continue +EXPORT_SYMBOL net/tipc/tipc 0x4b2243c6 tipc_portimportance +EXPORT_SYMBOL net/tipc/tipc 0x4ba3cfc8 tipc_send2name +EXPORT_SYMBOL net/tipc/tipc 0x4e796163 tipc_get_port +EXPORT_SYMBOL net/tipc/tipc 0x538b228a tipc_withdraw +EXPORT_SYMBOL net/tipc/tipc 0x5637ed44 tipc_get_mode +EXPORT_SYMBOL net/tipc/tipc 0x5c0d4b5c tipc_ref_valid +EXPORT_SYMBOL net/tipc/tipc 0x62a681a3 tipc_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0x64357d3c tipc_multicast +EXPORT_SYMBOL net/tipc/tipc 0x8001e3d7 tipc_forward2port +EXPORT_SYMBOL net/tipc/tipc 0x85756016 tipc_send_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x88b73627 tipc_get_addr +EXPORT_SYMBOL net/tipc/tipc 0x924b76a5 tipc_createport +EXPORT_SYMBOL net/tipc/tipc 0x943269ca tipc_forward_buf2name +EXPORT_SYMBOL net/tipc/tipc 0x9c45558e tipc_enable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xadd203d0 tipc_connect2port +EXPORT_SYMBOL net/tipc/tipc 0xae0103c3 tipc_shutdown +EXPORT_SYMBOL net/tipc/tipc 0xb01ffc2c tipc_forward2name +EXPORT_SYMBOL net/tipc/tipc 0xb35b672c tipc_publish +EXPORT_SYMBOL net/tipc/tipc 0xb4b72a56 tipc_send_buf2port +EXPORT_SYMBOL net/tipc/tipc 0xbb2b2504 tipc_send +EXPORT_SYMBOL net/tipc/tipc 0xc8540c6f tipc_reject_msg +EXPORT_SYMBOL net/tipc/tipc 0xcec8514a tipc_set_portunreturnable +EXPORT_SYMBOL net/tipc/tipc 0xd44731e5 tipc_ownidentity +EXPORT_SYMBOL net/tipc/tipc 0xda7f9d3f tipc_attach +EXPORT_SYMBOL net/tipc/tipc 0xdf5008fc tipc_peer +EXPORT_SYMBOL net/tipc/tipc 0xe7aece47 tipc_ispublished +EXPORT_SYMBOL net/tipc/tipc 0xe953314e tipc_recv_msg +EXPORT_SYMBOL net/tipc/tipc 0xea109c0c tipc_send_buf +EXPORT_SYMBOL net/tipc/tipc 0xec328747 tipc_createport_raw +EXPORT_SYMBOL net/tipc/tipc 0xeefd49b3 tipc_get_handle +EXPORT_SYMBOL net/tipc/tipc 0xef50a1ef tipc_disable_bearer +EXPORT_SYMBOL net/tipc/tipc 0xf9677f86 tipc_send_buf_fast +EXPORT_SYMBOL net/tipc/tipc 0xfd54d627 tipc_forward_buf2port +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0xe27a1494 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0xb3e5ac6f wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xe3efb80e wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x009cdab0 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x05276a25 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x06f23a96 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x07e7ac5a ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0e199e76 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x10c02a89 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x1d2eed46 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x25467605 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x25e664c5 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x25fb8345 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x26e2ed15 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x29095fe0 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x3542fc09 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x37ac8d05 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x38d80a0e cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x4ab71c0f cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x4d99fe55 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x4f0f875e cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x512f0888 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x5a87bd07 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x6323f0b2 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6aeb6996 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x74fb9f95 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x799e9ba6 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x80c4f055 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x82576b00 cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x8c35d732 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x8dea2c8e cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x90eb5e02 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x961db23b cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0x9fbf1763 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xbf3db147 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xbf9a5668 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xc4e85ec5 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc5d8d6b0 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xc931a03d ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0xccc291b3 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xd14941d3 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0xd4d7c8fc cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xd5a6f19c freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0xe3618152 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xf1ef1de2 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xf2495a7f wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/lib80211 0x17958dc2 lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x22cd60a9 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x230f3ffb lib80211_crypt_deinit_handler +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0xabb8bc17 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0xbfd9d9df lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0xcf50d526 lib80211_crypt_quiescing +EXPORT_SYMBOL net/wireless/lib80211 0xd38910fa lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xdc680beb lib80211_crypt_deinit_entries +EXPORT_SYMBOL net/wireless/lib80211 0xe076674d lib80211_crypt_info_free +EXPORT_SYMBOL sound/ac97_bus 0x0cf5fcc0 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0xcaf1e722 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x140edf82 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x2af32a19 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x88cdeb8f snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0xab7bd481 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xcabd280b snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xeb03f3b9 snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x3b55d387 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x68b9bd07 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x7adfa053 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x998f2126 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9b1825a9 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb6327286 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xbc51650a snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe58d6519 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x9119bb5e snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x0008bdc2 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x0766a268 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x13e0c63b snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x198788b4 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x1c10d9a2 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x21c83554 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x226aa5db snd_info_register +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x24be9ca2 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x257e6071 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x2e3d766e snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x38ea67a0 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3cc18aaf snd_card_register +EXPORT_SYMBOL sound/core/snd 0x3ddc17c9 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4a6101e8 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x5effc666 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x60a930dc snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x6c13679c snd_card_free +EXPORT_SYMBOL sound/core/snd 0x6e2f9539 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x72fc22e7 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x76219b5c snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x7bbfcc17 snd_cards +EXPORT_SYMBOL sound/core/snd 0x877a00b5 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x88480699 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x8acf0b1e snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x8df3789f snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x8df5f374 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x9650363a _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9fbfed17 snd_device_new +EXPORT_SYMBOL sound/core/snd 0xab9ae4e5 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0xafddec54 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb3060360 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xb81bf601 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xbdc4eec5 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0xbe1a8dde snd_component_add +EXPORT_SYMBOL sound/core/snd 0xc2134834 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0xc5a54c0c snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xcecdbed2 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0xd0577cc1 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0xd1157735 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0xd90b2212 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xe19d60e7 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xe20c9214 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0xe7dd997c snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0xe8df302a snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xed7100b6 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0xef958ed6 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd 0xefbeaa29 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xf1c6d875 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0xf5688def snd_card_file_remove +EXPORT_SYMBOL sound/core/snd-hwdep 0xdce4dd08 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x22324ed0 snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x388591e1 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x765d8bc3 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xbfccdf12 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xf577f3a3 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x014602c6 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x07d774ca snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x1cc8b669 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x24ae0584 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x2ba88109 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x2f376c1c snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x35d6ef65 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x395e287f snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3b0d75fb snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x447f467a snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x495aab0f snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x4a3f264f snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52838171 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x559552fe snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x5c390656 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x607c18cd snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x683115e9 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x856748fb snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x8b62fa88 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0x8fc2b4e2 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x8fcafb55 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x911ff830 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x91d124f9 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0xa1f00018 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0xa56764a3 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xb3b83b3e snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xb734d5c3 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbbd5ab47 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0xbd92fceb snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0xbffb0e83 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0xc6113ba5 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xc8eaa418 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0xcf1a6aaa snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0xd0b9b8b8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0xdba60a5d snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0xe3a6434a snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe7b18fe9 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0xe9cb1f59 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf70fe1fe snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-rawmidi 0x062d6dcd snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0e8fec79 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1b476daa snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x26072e5c snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x40871d28 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x48973ecc snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4d937f64 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6b212c07 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x840d1b1c snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x92d17918 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xadfc3e7e snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0xaf39fd02 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xaf9d84c9 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd79b0c1d snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd8c63067 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf6ddb240 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf6df44db snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-timer 0x0b156d4f snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x476e972b snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x4a0e6572 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x519b968d snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x6fd2b765 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x81b55513 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x86afa3b3 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x971a0a5e snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x9d9a8582 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xb1ad99c2 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0xba9287f3 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0xd24c724f snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0xea3af229 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x4bbb7f27 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x5a41ff90 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc43a3940 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x0173eec3 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x0b641fd4 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x22a340b3 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3ed33c4b snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x5e82334f snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x6f23efa0 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x866b42b9 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xd9cb72f5 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xe2bbe2ff snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x0b85ab4c snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x1e68c56c snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x20806005 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x2a982b3f snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x2cd584d2 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4090d657 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x5c9d72c5 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x8c0337aa snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x99b88ede snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb8fa4938 snd_vx_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x07148de2 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x5d78f9b9 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x9241550f snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xa7bb4dd7 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xb430f140 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xced5e7b7 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1dfbe2d5 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x259efa3c snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x3303b57d snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x5b4217e2 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x5c070275 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xc2712160 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x46af58be snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x58f77d04 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd27b130e snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xf647a4b0 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x3adec8f7 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xa2b62aea snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x4afca638 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xa00e27f2 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x034469af snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x20e9934c snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x2f5fbd74 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x6919fcac snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x96358df1 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x1b5ee5c0 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x399cca79 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x539ba121 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xa006df01 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0xa38ae2f0 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xe15b0df5 snd_i2c_sendbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x0157feac snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x1ab272c2 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x374ac6ba snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x4c8a32c8 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x841729c5 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x85a28014 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x8f7e4f61 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xbe34e81d snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xd51a6f1a snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe0bd0ee6 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x51e1e805 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x87e4053f snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xbfeda25c snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xc57f5b54 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/oss/ad1848 0x2b5d9dae ad1848_detect +EXPORT_SYMBOL sound/oss/ad1848 0x63471f7e attach_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0x9bf1cc62 ad1848_unload +EXPORT_SYMBOL sound/oss/ad1848 0xa3e16c6b probe_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xb29a9148 unload_ms_sound +EXPORT_SYMBOL sound/oss/ad1848 0xc04f6f67 ad1848_control +EXPORT_SYMBOL sound/oss/ad1848 0xe5713d55 ad1848_init +EXPORT_SYMBOL sound/oss/mpu401 0x5d632c53 attach_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x5febf284 unload_mpu401 +EXPORT_SYMBOL sound/oss/mpu401 0x61641749 probe_mpu401 +EXPORT_SYMBOL sound/oss/sb_lib 0x11baf549 sb_dsp_init +EXPORT_SYMBOL sound/oss/sb_lib 0x42424109 sb_be_quiet +EXPORT_SYMBOL sound/oss/sb_lib 0x450f9aea smw_free +EXPORT_SYMBOL sound/oss/sb_lib 0x59a5b442 probe_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0x74afd69c unload_sbmpu +EXPORT_SYMBOL sound/oss/sb_lib 0xc4884969 sb_dsp_unload +EXPORT_SYMBOL sound/oss/sb_lib 0xd8a2731c sb_dsp_detect +EXPORT_SYMBOL sound/oss/sound 0x01e6dd92 sound_install_audiodrv +EXPORT_SYMBOL sound/oss/sound 0x024f4f1e synth_devs +EXPORT_SYMBOL sound/oss/sound 0x04c87ec8 compute_finetune +EXPORT_SYMBOL sound/oss/sound 0x06339815 sound_unload_synthdev +EXPORT_SYMBOL sound/oss/sound 0x0f280035 conf_printf +EXPORT_SYMBOL sound/oss/sound 0x17ba231d seq_input_event +EXPORT_SYMBOL sound/oss/sound 0x1b3df3cf sound_alloc_mixerdev +EXPORT_SYMBOL sound/oss/sound 0x1f395686 MIDIbuf_avail +EXPORT_SYMBOL sound/oss/sound 0x2161d5e8 sound_timer_init +EXPORT_SYMBOL sound/oss/sound 0x2aa31695 midi_synth_kill_note +EXPORT_SYMBOL sound/oss/sound 0x312bffab midi_devs +EXPORT_SYMBOL sound/oss/sound 0x394cb088 sound_free_dma +EXPORT_SYMBOL sound/oss/sound 0x3c12321e mixer_devs +EXPORT_SYMBOL sound/oss/sound 0x418f5fbe sound_close_dma +EXPORT_SYMBOL sound/oss/sound 0x4cd01bdd num_audiodevs +EXPORT_SYMBOL sound/oss/sound 0x4ff47e9d midi_synth_setup_voice +EXPORT_SYMBOL sound/oss/sound 0x51e354b2 sound_alloc_timerdev +EXPORT_SYMBOL sound/oss/sound 0x56504ca2 midi_synth_reset +EXPORT_SYMBOL sound/oss/sound 0x5d986fc9 note_to_freq +EXPORT_SYMBOL sound/oss/sound 0x62c1f125 sound_timer_devs +EXPORT_SYMBOL sound/oss/sound 0x7679ee76 seq_copy_to_input +EXPORT_SYMBOL sound/oss/sound 0x7bdf0907 conf_printf2 +EXPORT_SYMBOL sound/oss/sound 0x83829a7d sound_install_mixer +EXPORT_SYMBOL sound/oss/sound 0x892093e0 midi_synth_controller +EXPORT_SYMBOL sound/oss/sound 0x90bd9714 sequencer_timer +EXPORT_SYMBOL sound/oss/sound 0x987bcf12 DMAbuf_outputintr +EXPORT_SYMBOL sound/oss/sound 0x9a95733f sound_alloc_dma +EXPORT_SYMBOL sound/oss/sound 0x9bdaf24d midi_synth_start_note +EXPORT_SYMBOL sound/oss/sound 0x9d845b18 num_mixers +EXPORT_SYMBOL sound/oss/sound 0xa1d5f04f load_mixer_volumes +EXPORT_SYMBOL sound/oss/sound 0xa1eae7cf num_midis +EXPORT_SYMBOL sound/oss/sound 0xa41ead5f sound_unload_timerdev +EXPORT_SYMBOL sound/oss/sound 0xa51c913b sound_unload_mixerdev +EXPORT_SYMBOL sound/oss/sound 0xa6bb414c sound_unload_mididev +EXPORT_SYMBOL sound/oss/sound 0xa948751e sound_unload_audiodev +EXPORT_SYMBOL sound/oss/sound 0xad45df73 midi_synth_close +EXPORT_SYMBOL sound/oss/sound 0xaef743b2 midi_synth_ioctl +EXPORT_SYMBOL sound/oss/sound 0xb14b22cd midi_synth_hw_control +EXPORT_SYMBOL sound/oss/sound 0xb51587f6 do_midi_msg +EXPORT_SYMBOL sound/oss/sound 0xba413f87 sound_alloc_mididev +EXPORT_SYMBOL sound/oss/sound 0xba7dd041 midi_synth_bender +EXPORT_SYMBOL sound/oss/sound 0xc748d109 sound_alloc_synthdev +EXPORT_SYMBOL sound/oss/sound 0xcc4b8797 sound_open_dma +EXPORT_SYMBOL sound/oss/sound 0xd85be938 midi_synth_set_instr +EXPORT_SYMBOL sound/oss/sound 0xdb400afa midi_synth_panning +EXPORT_SYMBOL sound/oss/sound 0xe056b71c DMAbuf_start_dma +EXPORT_SYMBOL sound/oss/sound 0xe2675a79 sound_timer_interrupt +EXPORT_SYMBOL sound/oss/sound 0xeb315d99 DMAbuf_inputintr +EXPORT_SYMBOL sound/oss/sound 0xeb9b237b audio_devs +EXPORT_SYMBOL sound/oss/sound 0xf1ea8a20 midi_synth_aftertouch +EXPORT_SYMBOL sound/oss/sound 0xf6b3a2fb midi_synth_open +EXPORT_SYMBOL sound/oss/sound 0xf7426da3 midi_synth_load_patch +EXPORT_SYMBOL sound/oss/sound 0xf78f6363 sequencer_init +EXPORT_SYMBOL sound/oss/sound 0xfa6871be sound_timer_syncinterval +EXPORT_SYMBOL sound/oss/sound 0xfddcbfb3 midi_synth_send_sysex +EXPORT_SYMBOL sound/oss/uart401 0x049cd8b7 uart401intr +EXPORT_SYMBOL sound/oss/uart401 0x07a979d0 probe_uart401 +EXPORT_SYMBOL sound/oss/uart401 0xecfdd9c9 unload_uart401 +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x17229d2c snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x2c97d1ed snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x37597a25 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x376d6ace snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x39003d6b snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x3b622664 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4b398163 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x57d173a7 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x66ff3eac snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x808419c3 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x92f890ce snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa675fdbe snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa8e3bbf8 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xcb3f4b80 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xcfdab2d2 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd98f8307 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf39827c6 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x01d242c6 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x14f84d3f snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x2da52f12 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x5f17cf74 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xa1ecd66e snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xaff59a79 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xbe105671 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xccc41e64 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xed145cdf snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0xda3f5520 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x2c1fd106 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x2eb2f650 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xf9489640 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x714c9a80 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x78a36a2c snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x9fe72c23 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xc569c61a snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xd351c97e snd_trident_alloc_voice +EXPORT_SYMBOL sound/soc/codecs/snd-soc-uda134x 0xfa6c8a49 uda134x_dai +EXPORT_SYMBOL sound/sound_firmware 0x39e3dd23 mod_firmware_load +EXPORT_SYMBOL sound/soundcore 0x455662fb register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x49bc66f3 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x50092fdf register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x78ad232c register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x7afc9d8a unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x99c95fa5 unregister_sound_special +EXPORT_SYMBOL sound/soundcore 0xac9b38c0 sound_class +EXPORT_SYMBOL sound/soundcore 0xbded3fab register_sound_midi +EXPORT_SYMBOL sound/soundcore 0xcd083b10 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0xfdab6de3 unregister_sound_midi +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x6835ed0f snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x6f937b57 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x855fd67a snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xa51e73cc snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xc7abf55e snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xf728a4b4 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/snd-util-mem 0x01e234f2 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0895e1a9 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x15cfaea4 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x2ba29873 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x45c2abb1 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5d2130f4 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0xab810f2e __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0xb2676a58 snd_util_mem_free +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x2f1172a3 snd_usb_create_midi_interface +EXPORT_SYMBOL sound/usb/snd-usb-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usb-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0x72a0de68 lirc_register_driver +EXPORT_SYMBOL ubuntu/lirc/lirc_dev/lirc_dev 0xf7363332 lirc_get_pdata +EXPORT_SYMBOL vmlinux 0x00000000 per_cpu__softirq_work_list +EXPORT_SYMBOL vmlinux 0x001358a3 km_query +EXPORT_SYMBOL vmlinux 0x003518e8 con_is_bound +EXPORT_SYMBOL vmlinux 0x003f60bd mpage_readpage +EXPORT_SYMBOL vmlinux 0x00400ed7 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x007bab72 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x00b2f32e jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL vmlinux 0x00ddb052 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00e4c19b sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x0110a235 ____pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x012d0b46 request_firmware +EXPORT_SYMBOL vmlinux 0x013c6970 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x01495580 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x014bd6d6 __bread +EXPORT_SYMBOL vmlinux 0x01514b88 dquot_acquire +EXPORT_SYMBOL vmlinux 0x01565b77 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x015b65b9 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x01711d67 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01a4aab6 set_irq_chip_data +EXPORT_SYMBOL vmlinux 0x01ac4a86 posix_lock_file +EXPORT_SYMBOL vmlinux 0x01e79254 journal_forget +EXPORT_SYMBOL vmlinux 0x02133a0b proc_symlink +EXPORT_SYMBOL vmlinux 0x021adabc check_disk_change +EXPORT_SYMBOL vmlinux 0x02384e8d ioremap_flags +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02d94d71 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x02e1cf12 netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x02e6f00d elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x02eec418 vlan_gro_frags +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0340b61c splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x03abe659 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x03b85111 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03dff16a tcp_check_req +EXPORT_SYMBOL vmlinux 0x03f874de scsi_remove_target +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x0400429e set_irq_chip +EXPORT_SYMBOL vmlinux 0x04011f01 nla_append +EXPORT_SYMBOL vmlinux 0x040f32cc i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x041d3dc6 call_usermodehelper_stdinpipe +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x043b8483 __kfifo_get +EXPORT_SYMBOL vmlinux 0x04536f83 of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x0460a9c8 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04a89326 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x04e380e1 posix_acl_permission +EXPORT_SYMBOL vmlinux 0x04e72766 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x04f6196b get_super +EXPORT_SYMBOL vmlinux 0x04ff95f4 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x050bae13 of_find_device_by_phandle +EXPORT_SYMBOL vmlinux 0x050d3a4f kern_path +EXPORT_SYMBOL vmlinux 0x052344cf thaw_bdev +EXPORT_SYMBOL vmlinux 0x052f0db6 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x058e5ce8 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x05a514a1 _insl_ns +EXPORT_SYMBOL vmlinux 0x05a595d8 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x05fc1d00 lro_receive_frags +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x062aba95 mempool_free +EXPORT_SYMBOL vmlinux 0x062e028a icmp_send +EXPORT_SYMBOL vmlinux 0x06434de2 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0x065c3007 ide_geometry_proc_fops +EXPORT_SYMBOL vmlinux 0x0675c7eb atomic64_cmpxchg +EXPORT_SYMBOL vmlinux 0x067a5066 __find_get_block +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x06cd6e28 __pagevec_release +EXPORT_SYMBOL vmlinux 0x06d8bae1 idr_get_new +EXPORT_SYMBOL vmlinux 0x06e48c41 sock_i_ino +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x0717ced9 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x07216b7f ip_xfrm_me_harder +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x075dc896 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x0799c50a param_set_ulong +EXPORT_SYMBOL vmlinux 0x079bd2f6 tty_port_init +EXPORT_SYMBOL vmlinux 0x07a3ee97 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07b4722c journal_restart +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d9b783 scsi_nl_send_vendor_msg +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x0856c305 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x08707152 lock_may_write +EXPORT_SYMBOL vmlinux 0x08af4991 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x08b27afd linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x08ed0b62 mac_vmode_to_var +EXPORT_SYMBOL vmlinux 0x090dacec DAC1064_global_init +EXPORT_SYMBOL vmlinux 0x0920820c slow_work_sleep_till_thread_needed +EXPORT_SYMBOL vmlinux 0x092b007a sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x09356ec5 tty_name +EXPORT_SYMBOL vmlinux 0x093a1ba8 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x095bb830 down_interruptible +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x09ac5f27 tty_throttle +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09cbd769 register_filesystem +EXPORT_SYMBOL vmlinux 0x0a07708e blk_register_region +EXPORT_SYMBOL vmlinux 0x0a184d3f skb_pad +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a32232d journal_start_commit +EXPORT_SYMBOL vmlinux 0x0a3d92b3 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x0a3ffa94 skb_trim +EXPORT_SYMBOL vmlinux 0x0a4747ff allocate_resource +EXPORT_SYMBOL vmlinux 0x0a4d0c71 handle_sysrq +EXPORT_SYMBOL vmlinux 0x0a7c9143 pci_busdev_to_OF_node +EXPORT_SYMBOL vmlinux 0x0a8237a9 cdev_alloc +EXPORT_SYMBOL vmlinux 0x0a85baff try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x0a8d73f5 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x0a8dc752 __scm_destroy +EXPORT_SYMBOL vmlinux 0x0abc6e0c phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x0ac4f0b2 vfs_dq_drop +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0af19473 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b32e740 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x0b51f109 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x0b622776 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b82c181 matrox_cfbX_init +EXPORT_SYMBOL vmlinux 0x0ba09cf9 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x0ba97a16 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x0baf9d9c security_path_mkdir +EXPORT_SYMBOL vmlinux 0x0bc709c3 arp_create +EXPORT_SYMBOL vmlinux 0x0bca5361 of_register_driver +EXPORT_SYMBOL vmlinux 0x0c0c6be8 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x0c12e626 __debugger_bpt +EXPORT_SYMBOL vmlinux 0x0c51e050 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x0c536ccd matrox_millennium +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c83550f __nla_put +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c9b6089 nvram_get_size +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cbc6287 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x0ccbe5c9 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x0cd17341 skb_append +EXPORT_SYMBOL vmlinux 0x0cd5c87e journal_check_used_features +EXPORT_SYMBOL vmlinux 0x0ce23b45 fb_blank +EXPORT_SYMBOL vmlinux 0x0cec48b1 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x0d0fe2f4 down_trylock +EXPORT_SYMBOL vmlinux 0x0d13f390 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x0d3def21 idr_pre_get +EXPORT_SYMBOL vmlinux 0x0d4ba970 flush_old_exec +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d5c3211 journal_abort +EXPORT_SYMBOL vmlinux 0x0d69f776 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x0d7299b8 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x0d873700 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x0d9a72e8 journal_create +EXPORT_SYMBOL vmlinux 0x0d9f1745 poll_freewait +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dbf38b8 mol_trampoline +EXPORT_SYMBOL vmlinux 0x0dd10610 ide_dma_off +EXPORT_SYMBOL vmlinux 0x0dd7e990 napi_complete +EXPORT_SYMBOL vmlinux 0x0e0c519b journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x0e2d16c3 proc_dointvec +EXPORT_SYMBOL vmlinux 0x0e39a302 pci_restore_state +EXPORT_SYMBOL vmlinux 0x0e3a77a6 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x0e52592a panic +EXPORT_SYMBOL vmlinux 0x0e6fa39e bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x0e778b36 kmap_high +EXPORT_SYMBOL vmlinux 0x0e8c0bc8 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x0e939035 journal_load +EXPORT_SYMBOL vmlinux 0x0e9d61c1 generic_read_dir +EXPORT_SYMBOL vmlinux 0x0eb63648 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x0ebda149 kernel_read +EXPORT_SYMBOL vmlinux 0x0ed418a5 init_net +EXPORT_SYMBOL vmlinux 0x0ed53dbc dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x0ed8c86e i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x0ef20db1 kernstart_addr +EXPORT_SYMBOL vmlinux 0x0ef4bd82 flush_signals +EXPORT_SYMBOL vmlinux 0x0ef96433 flush_tlb_range +EXPORT_SYMBOL vmlinux 0x0f02835d sockfd_lookup +EXPORT_SYMBOL vmlinux 0x0f04d733 journal_revoke +EXPORT_SYMBOL vmlinux 0x0f1ef871 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x0f1f7457 simple_getattr +EXPORT_SYMBOL vmlinux 0x0f239d2a swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL vmlinux 0x0f2cef0d jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x0f345188 of_match_device +EXPORT_SYMBOL vmlinux 0x0f34babb blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x0f3feaf2 qdisc_reset +EXPORT_SYMBOL vmlinux 0x0f64c8b1 generic_write_sync +EXPORT_SYMBOL vmlinux 0x0f9b3178 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x0f9b9968 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x0fe7f48c xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x0febdfcf scsi_ioctl +EXPORT_SYMBOL vmlinux 0x1004bcbb bdi_init +EXPORT_SYMBOL vmlinux 0x10176d9e pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x10489a24 vfs_quota_on_path +EXPORT_SYMBOL vmlinux 0x105e2727 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x107d7987 journal_update_format +EXPORT_SYMBOL vmlinux 0x1083fa8a swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x10853deb call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x108e8985 param_get_uint +EXPORT_SYMBOL vmlinux 0x10b73e6b unregister_netdev +EXPORT_SYMBOL vmlinux 0x10ba906b security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x10e7ab47 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f0bff9 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x11637bc9 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x11663cec adb_register +EXPORT_SYMBOL vmlinux 0x116ff0cb otg_put_transceiver +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x118dfabd phy_detach +EXPORT_SYMBOL vmlinux 0x118f01ea putname +EXPORT_SYMBOL vmlinux 0x11aa1916 of_node_get +EXPORT_SYMBOL vmlinux 0x11cf12b6 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x11fdcc5c bio_free +EXPORT_SYMBOL vmlinux 0x11fde6db bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x11fee0b6 vmap +EXPORT_SYMBOL vmlinux 0x12154b1a file_fsync +EXPORT_SYMBOL vmlinux 0x123db324 input_set_keycode +EXPORT_SYMBOL vmlinux 0x1268b365 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x12a9d54f dev_trans_start +EXPORT_SYMBOL vmlinux 0x12bc801f udp_disconnect +EXPORT_SYMBOL vmlinux 0x12c527f4 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x12c6d73a inet_frags_init +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12e5ef0c rtas_set_power_level +EXPORT_SYMBOL vmlinux 0x1317a53d xfrm_state_add +EXPORT_SYMBOL vmlinux 0x13391be1 __serio_register_port +EXPORT_SYMBOL vmlinux 0x1362346c skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x136af3e8 init_file +EXPORT_SYMBOL vmlinux 0x138f9934 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x13ad2b4c tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x13cda3c2 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x13efac40 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x13f2a990 skb_put +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x14005c2c scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x1407c6e7 kmap_prot +EXPORT_SYMBOL vmlinux 0x140e5b83 neigh_create +EXPORT_SYMBOL vmlinux 0x14263b0a input_event +EXPORT_SYMBOL vmlinux 0x142caf06 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x142d345c scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x144ed3a1 dev_base_lock +EXPORT_SYMBOL vmlinux 0x145c5ebd copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x145d5c03 of_device_uevent +EXPORT_SYMBOL vmlinux 0x14707d09 kmem_cache_name +EXPORT_SYMBOL vmlinux 0x14754c16 may_umount +EXPORT_SYMBOL vmlinux 0x1496bc1e sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x14a62172 vlan_gro_receive +EXPORT_SYMBOL vmlinux 0x14c1b23c sock_wfree +EXPORT_SYMBOL vmlinux 0x14fdfe6d eth_header +EXPORT_SYMBOL vmlinux 0x1506c973 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x1588b92d kill_pgrp +EXPORT_SYMBOL vmlinux 0x1596d882 of_match_node +EXPORT_SYMBOL vmlinux 0x15a11799 dev_unicast_delete +EXPORT_SYMBOL vmlinux 0x15a73d8c splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x15c3db7c tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x15c7127e blk_start_queue +EXPORT_SYMBOL vmlinux 0x15d0214d blk_stop_queue +EXPORT_SYMBOL vmlinux 0x15d66eb3 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x15f19e62 register_framebuffer +EXPORT_SYMBOL vmlinux 0x160bd45c rtas_token +EXPORT_SYMBOL vmlinux 0x163c5e39 twl4030_i2c_read +EXPORT_SYMBOL vmlinux 0x16479e8f panic_notifier_list +EXPORT_SYMBOL vmlinux 0x1668024f fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x1673f014 tty_insert_flip_string +EXPORT_SYMBOL vmlinux 0x167d710b inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x16a5dc16 pci_release_regions +EXPORT_SYMBOL vmlinux 0x16cde48d tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x16d58d7f security_inode_init_security +EXPORT_SYMBOL vmlinux 0x16e911d4 down_write +EXPORT_SYMBOL vmlinux 0x17066eb3 dst_destroy +EXPORT_SYMBOL vmlinux 0x170b79f9 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x173c4144 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x1765d1cd vfs_writev +EXPORT_SYMBOL vmlinux 0x176ddac2 block_write_begin +EXPORT_SYMBOL vmlinux 0x176e797a generic_setxattr +EXPORT_SYMBOL vmlinux 0x176f8be4 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x17889018 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x17aa156a __ucmpdi2 +EXPORT_SYMBOL vmlinux 0x17c0ba33 bdput +EXPORT_SYMBOL vmlinux 0x17dd96f6 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x18334ae0 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x1843caf0 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x184b82db netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x18cbb2e7 llc_sap_find +EXPORT_SYMBOL vmlinux 0x18d444f3 phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x18e59d09 set_groups +EXPORT_SYMBOL vmlinux 0x18e6cd7d __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0x19302978 scsi_execute +EXPORT_SYMBOL vmlinux 0x194a11f5 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x195c7dc2 do_sync_write +EXPORT_SYMBOL vmlinux 0x1961c16e d_genocide +EXPORT_SYMBOL vmlinux 0x1966bf16 down_read_trylock +EXPORT_SYMBOL vmlinux 0x1976bc16 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x19800a16 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19bffb21 d_alloc +EXPORT_SYMBOL vmlinux 0x19d1edc5 blk_free_tags +EXPORT_SYMBOL vmlinux 0x19d706a0 tty_shutdown +EXPORT_SYMBOL vmlinux 0x19d8d780 cpu_sysdev_class +EXPORT_SYMBOL vmlinux 0x19f3be89 nonseekable_open +EXPORT_SYMBOL vmlinux 0x1a37c6a6 cdev_init +EXPORT_SYMBOL vmlinux 0x1a38b166 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x1a6c024b alloc_hippi_dev +EXPORT_SYMBOL vmlinux 0x1a9e0d3e scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad20559 ilookup5 +EXPORT_SYMBOL vmlinux 0x1ad60396 ethtool_op_set_tso +EXPORT_SYMBOL vmlinux 0x1ae80fc3 macio_release_resource +EXPORT_SYMBOL vmlinux 0x1afd2f61 input_unfilter_device +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0d1322 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x1b386999 km_policy_notify +EXPORT_SYMBOL vmlinux 0x1b52310a page_symlink +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b8d7581 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x1b9981cc set_irq_wake +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bb1b3cf bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x1bc4ff03 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x1be042e7 block_write_full_page +EXPORT_SYMBOL vmlinux 0x1be6d238 init_timer_deferrable_key +EXPORT_SYMBOL vmlinux 0x1c03f10d sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x1c1af916 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x1c2e8172 __inet6_hash +EXPORT_SYMBOL vmlinux 0x1c324357 idr_replace +EXPORT_SYMBOL vmlinux 0x1c5b2c15 pmu_wait_complete +EXPORT_SYMBOL vmlinux 0x1c6c414e dev_remove_pack +EXPORT_SYMBOL vmlinux 0x1c80de9c ip_send_check +EXPORT_SYMBOL vmlinux 0x1c9241ab sock_create_lite +EXPORT_SYMBOL vmlinux 0x1cbb3188 call_usermodehelper_pipe +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1ccd5231 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x1ccf7cbc pci_reenable_device +EXPORT_SYMBOL vmlinux 0x1cd3a2bb phy_connect +EXPORT_SYMBOL vmlinux 0x1cd9e6db xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x1d0d57e2 invalidate_partition +EXPORT_SYMBOL vmlinux 0x1d2e87c6 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x1d5b37aa gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x1d694511 kobject_del +EXPORT_SYMBOL vmlinux 0x1d6c9f8a scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x1d6d04f3 simple_statfs +EXPORT_SYMBOL vmlinux 0x1d8a1c21 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x1db23030 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x1db91d83 matroxfb_register_driver +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dcc8f43 matroxfb_DAC_in +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1de080c6 neigh_lookup +EXPORT_SYMBOL vmlinux 0x1df19f5b posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x1e34e0b4 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x1e3eab45 blk_get_request +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1ea6e7ce skb_find_text +EXPORT_SYMBOL vmlinux 0x1ecb9943 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x1ed4fb1d __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x1edc9598 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x1edeafef block_write_end +EXPORT_SYMBOL vmlinux 0x1eeda005 __bio_clone +EXPORT_SYMBOL vmlinux 0x1efe283f __cap_full_set +EXPORT_SYMBOL vmlinux 0x1eff2caf journal_get_create_access +EXPORT_SYMBOL vmlinux 0x1f7cc628 mempool_create +EXPORT_SYMBOL vmlinux 0x1f7da31b xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x1f8a78c3 inode_setattr +EXPORT_SYMBOL vmlinux 0x1fae7a0b wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x1fdd2768 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x1ff69dd8 vfs_fstatat +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x20030ecd ioremap +EXPORT_SYMBOL vmlinux 0x2014fad2 add_timer +EXPORT_SYMBOL vmlinux 0x203299e3 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x20385c58 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x206484af sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x208fbc7a qdisc_list_del +EXPORT_SYMBOL vmlinux 0x20a4e0a1 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x20c87af4 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x20d043e4 should_remove_suid +EXPORT_SYMBOL vmlinux 0x20d99e17 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x20eb0bd2 page_put_link +EXPORT_SYMBOL vmlinux 0x2120f91d tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x2125e860 vc_cons +EXPORT_SYMBOL vmlinux 0x2136368d skb_checksum +EXPORT_SYMBOL vmlinux 0x213a8756 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21eb02b1 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x21eee083 backlight_force_update +EXPORT_SYMBOL vmlinux 0x2208e2e7 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x2209da33 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x22108ec1 inode_change_ok +EXPORT_SYMBOL vmlinux 0x222dfe2a sysctl_intvec +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x223fe4ff dev_open +EXPORT_SYMBOL vmlinux 0x2251fee3 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x226e86a9 audit_log +EXPORT_SYMBOL vmlinux 0x2288378f system_state +EXPORT_SYMBOL vmlinux 0x22a73912 __tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22b6533b xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x22d5451a blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x22d769b1 phy_device_free +EXPORT_SYMBOL vmlinux 0x22ea6d55 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x23269a13 strict_strtoul +EXPORT_SYMBOL vmlinux 0x238f3746 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x2396b077 netlink_set_err +EXPORT_SYMBOL vmlinux 0x23cc9566 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x23ef711c __register_chrdev +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x245d5fc9 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0x24616afa of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x24a08dbf of_get_pci_address +EXPORT_SYMBOL vmlinux 0x24e458f3 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x24eedf55 blk_rq_init +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x25115fed blk_integrity_register +EXPORT_SYMBOL vmlinux 0x25415e0a otg_get_transceiver +EXPORT_SYMBOL vmlinux 0x25421bf8 of_mm_gpiochip_add +EXPORT_SYMBOL vmlinux 0x254ab806 pci_set_dma_mask +EXPORT_SYMBOL vmlinux 0x255e18ee sock_i_uid +EXPORT_SYMBOL vmlinux 0x256a849a lro_flush_all +EXPORT_SYMBOL vmlinux 0x257f1832 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x258355b4 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x25876e0e scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x25ba121c mempool_resize +EXPORT_SYMBOL vmlinux 0x25c30183 lock_rename +EXPORT_SYMBOL vmlinux 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL vmlinux 0x25f3bd2e atomic64_xchg +EXPORT_SYMBOL vmlinux 0x25f4a508 ide_set_handler +EXPORT_SYMBOL vmlinux 0x25fa6f17 wait_for_completion +EXPORT_SYMBOL vmlinux 0x260300e2 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x26045078 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x2605dbe7 vfs_quota_disable +EXPORT_SYMBOL vmlinux 0x26118632 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x261e6f55 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x26269f2b kunmap_atomic +EXPORT_SYMBOL vmlinux 0x26477c07 __vmalloc +EXPORT_SYMBOL vmlinux 0x267fc65b __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x26a84ec2 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x26b91ced filemap_fault +EXPORT_SYMBOL vmlinux 0x26d749c6 dqget +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x27028079 pci_choose_state +EXPORT_SYMBOL vmlinux 0x272618bd tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x272c9acd pmu_battery_count +EXPORT_SYMBOL vmlinux 0x272e40b9 audit_log_start +EXPORT_SYMBOL vmlinux 0x274d71cd sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x2762b988 touch_atime +EXPORT_SYMBOL vmlinux 0x2765b034 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x2791a991 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x27b4851a read_dev_sector +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c61ece qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x27c883b8 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x27d4c6d1 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x27df0490 vfs_llseek +EXPORT_SYMBOL vmlinux 0x27e79f50 generic_removexattr +EXPORT_SYMBOL vmlinux 0x27ee3775 __init_rwsem +EXPORT_SYMBOL vmlinux 0x27f291ce i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x27f5a0ae flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x27f8bf1a register_cdrom +EXPORT_SYMBOL vmlinux 0x285ac517 strict_strtoll +EXPORT_SYMBOL vmlinux 0x285e6b79 blk_start_request +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28a9df5f ip_nat_decode_session +EXPORT_SYMBOL vmlinux 0x28b16cd4 simple_fsync +EXPORT_SYMBOL vmlinux 0x28bac893 serio_reconnect +EXPORT_SYMBOL vmlinux 0x28f42853 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x28f812b0 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x2908d4b6 __netif_schedule +EXPORT_SYMBOL vmlinux 0x2942958f i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x298742e5 unregister_netdevice +EXPORT_SYMBOL vmlinux 0x29a00e8e simple_rmdir +EXPORT_SYMBOL vmlinux 0x29bd4c46 __cap_init_eff_set +EXPORT_SYMBOL vmlinux 0x2a0f338b nf_log_packet +EXPORT_SYMBOL vmlinux 0x2a10430a block_sync_page +EXPORT_SYMBOL vmlinux 0x2a1dd46d sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x2a23934c lock_super +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a7e7bd4 mach_powermac +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2b066910 dma_direct_ops +EXPORT_SYMBOL vmlinux 0x2b076b4f framebuffer_release +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b364608 __rta_fill +EXPORT_SYMBOL vmlinux 0x2b570dc0 ida_pre_get +EXPORT_SYMBOL vmlinux 0x2b7931e6 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x2b936d5e sock_register +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb2114d tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x2bc61da1 program_check_exception +EXPORT_SYMBOL vmlinux 0x2c0ae2dc security_task_getsecid +EXPORT_SYMBOL vmlinux 0x2c17e9bb __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x2c1d04e7 free_buffer_head +EXPORT_SYMBOL vmlinux 0x2c257709 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x2c28f435 scsi_add_device +EXPORT_SYMBOL vmlinux 0x2c726d83 open_exec +EXPORT_SYMBOL vmlinux 0x2ca88795 check_media_bay +EXPORT_SYMBOL vmlinux 0x2d0181c7 flush_tlb_page +EXPORT_SYMBOL vmlinux 0x2d770026 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2db78231 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x2dc2f755 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x2dcb0123 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x2de18640 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x2e0c0b11 cdev_del +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e33d3ab cad_pid +EXPORT_SYMBOL vmlinux 0x2e4a39f8 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x2e7ce199 get_io_context +EXPORT_SYMBOL vmlinux 0x2e7f56cf __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x2e976f12 seq_open_private +EXPORT_SYMBOL vmlinux 0x2eb02557 page_address +EXPORT_SYMBOL vmlinux 0x2ebd35c3 bdi_register +EXPORT_SYMBOL vmlinux 0x2ec5dcce mdiobus_write +EXPORT_SYMBOL vmlinux 0x2ed39ca9 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x2efca31c force_sig +EXPORT_SYMBOL vmlinux 0x2f22d3fc write_cache_pages +EXPORT_SYMBOL vmlinux 0x2f2b9cd7 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x2f2f7ac5 deactivate_super +EXPORT_SYMBOL vmlinux 0x2f37923b netif_device_detach +EXPORT_SYMBOL vmlinux 0x2f42df89 __put_cred +EXPORT_SYMBOL vmlinux 0x2f8b395d netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x2fc039d8 follow_up +EXPORT_SYMBOL vmlinux 0x30494822 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x30682474 alloc_trdev +EXPORT_SYMBOL vmlinux 0x30888d79 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x308a7bc3 generic_readlink +EXPORT_SYMBOL vmlinux 0x308e07f2 vfs_create +EXPORT_SYMBOL vmlinux 0x3091c0d5 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x30b41149 bio_integrity_alloc_bioset +EXPORT_SYMBOL vmlinux 0x30bc2774 input_grab_device +EXPORT_SYMBOL vmlinux 0x30e71ea1 pci_clear_master +EXPORT_SYMBOL vmlinux 0x30f21f52 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x30f5ab37 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x31121fe1 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x312d173e do_splice_from +EXPORT_SYMBOL vmlinux 0x313e394c set_page_dirty +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x315fb859 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x31800ef0 __register_binfmt +EXPORT_SYMBOL vmlinux 0x3188b34d scsi_get_command +EXPORT_SYMBOL vmlinux 0x318c279f blk_end_request_all +EXPORT_SYMBOL vmlinux 0x318dbf67 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x319e516a __devm_request_region +EXPORT_SYMBOL vmlinux 0x320858ef napi_get_frags +EXPORT_SYMBOL vmlinux 0x3224e02b pcim_iounmap +EXPORT_SYMBOL vmlinux 0x323222ba mutex_unlock +EXPORT_SYMBOL vmlinux 0x32407f00 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x324c6ff6 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x326df9e1 vfs_stat +EXPORT_SYMBOL vmlinux 0x327b9c1b pmu_poll_adb +EXPORT_SYMBOL vmlinux 0x327d425d get_phy_device +EXPORT_SYMBOL vmlinux 0x3285cc48 param_set_uint +EXPORT_SYMBOL vmlinux 0x328a05f1 strncpy +EXPORT_SYMBOL vmlinux 0x32d4cf4b flush_icache_user_range +EXPORT_SYMBOL vmlinux 0x32de7b57 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x32fbc2c1 get_fs_type +EXPORT_SYMBOL vmlinux 0x330d1a4d blk_fetch_request +EXPORT_SYMBOL vmlinux 0x3327e146 open_bdev_exclusive +EXPORT_SYMBOL vmlinux 0x3342ee9e kmem_cache_size +EXPORT_SYMBOL vmlinux 0x3345b290 igrab +EXPORT_SYMBOL vmlinux 0x335369bf security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x33626e7e journal_errno +EXPORT_SYMBOL vmlinux 0x33ae5889 vga_get +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x33c254fd sock_release +EXPORT_SYMBOL vmlinux 0x33ce2cae jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x33f69777 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x33ff52bf journal_dirty_data +EXPORT_SYMBOL vmlinux 0x34018b88 dm_put_device +EXPORT_SYMBOL vmlinux 0x3424e588 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x342c7d1b lock_fb_info +EXPORT_SYMBOL vmlinux 0x344067ba register_exec_domain +EXPORT_SYMBOL vmlinux 0x344adbd5 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x3457cb68 param_set_long +EXPORT_SYMBOL vmlinux 0x347cf5ef dst_release +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34a697c4 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x34deec55 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x34dfd0e3 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x34e39c57 blk_insert_request +EXPORT_SYMBOL vmlinux 0x3529efb5 generic_setlease +EXPORT_SYMBOL vmlinux 0x352c8125 elevator_init +EXPORT_SYMBOL vmlinux 0x3574fc48 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x35c2ba9e refrigerator +EXPORT_SYMBOL vmlinux 0x35da2e61 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x3608d26a set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x36176bf4 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x3624c857 of_create_pci_dev +EXPORT_SYMBOL vmlinux 0x366e041e of_device_get_modalias +EXPORT_SYMBOL vmlinux 0x36cccf17 proc_dostring +EXPORT_SYMBOL vmlinux 0x36e47222 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x36eef0b4 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x36f4955f sg_next +EXPORT_SYMBOL vmlinux 0x371b75b9 generic_unplug_device +EXPORT_SYMBOL vmlinux 0x371d2130 check_legacy_ioport +EXPORT_SYMBOL vmlinux 0x372745a3 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x372c5bdf unlock_new_inode +EXPORT_SYMBOL vmlinux 0x372e4d20 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x37383edd rtas_get_power_level +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x374ed073 scnprintf +EXPORT_SYMBOL vmlinux 0x3759ff53 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x37921e70 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x379b3b7a block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x37a016ea dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x37af6a0a abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x37ba5c7c save_mount_options +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37e5383d inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x37ff189e kick_iocb +EXPORT_SYMBOL vmlinux 0x381c4bb1 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x3844c6cc elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x38968a0d scsi_register_driver +EXPORT_SYMBOL vmlinux 0x389bf4d6 vfs_readdir +EXPORT_SYMBOL vmlinux 0x38b92846 llc_remove_pack +EXPORT_SYMBOL vmlinux 0x38e1fcb7 __scm_send +EXPORT_SYMBOL vmlinux 0x38e8479d sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x38efa04d __breadahead +EXPORT_SYMBOL vmlinux 0x38f12fbe macio_request_resources +EXPORT_SYMBOL vmlinux 0x38f37ad8 input_register_handle +EXPORT_SYMBOL vmlinux 0x38fb9933 tty_std_termios +EXPORT_SYMBOL vmlinux 0x38ff3d51 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x390145e8 ip_route_output_key +EXPORT_SYMBOL vmlinux 0x3938a424 revert_creds +EXPORT_SYMBOL vmlinux 0x3938e622 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x394926af eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x3977133c pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x39836c46 napi_skb_finish +EXPORT_SYMBOL vmlinux 0x398fc1da ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x39b2159d __serio_register_driver +EXPORT_SYMBOL vmlinux 0x39c94e05 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x39ca1964 irq_stat +EXPORT_SYMBOL vmlinux 0x39d7b177 tcf_hash_create +EXPORT_SYMBOL vmlinux 0x39d8ecfc phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x39e24328 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x39e36d7e ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x3a2204c6 security_netlink_recv +EXPORT_SYMBOL vmlinux 0x3a2532fb of_register_spi_devices +EXPORT_SYMBOL vmlinux 0x3a34c617 sock_map_fd +EXPORT_SYMBOL vmlinux 0x3a3c44bf seq_release_private +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aa801ca udplite_prot +EXPORT_SYMBOL vmlinux 0x3ac10bfa pci_claim_resource +EXPORT_SYMBOL vmlinux 0x3ae831b6 kref_init +EXPORT_SYMBOL vmlinux 0x3b0148a8 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x3b06a380 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x3b1edc97 of_parse_phandles_with_args +EXPORT_SYMBOL vmlinux 0x3b27e0e7 inet_listen +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b4f6faa sock_setsockopt +EXPORT_SYMBOL vmlinux 0x3b5b4188 of_dev_get +EXPORT_SYMBOL vmlinux 0x3b86da11 d_splice_alias +EXPORT_SYMBOL vmlinux 0x3b9d6bc6 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x3bb44c9c of_node_put +EXPORT_SYMBOL vmlinux 0x3bb6f582 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x3bb78130 set_current_groups +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bf67e8a iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x3c1712bd dcache_dir_open +EXPORT_SYMBOL vmlinux 0x3c1b74c2 udp_poll +EXPORT_SYMBOL vmlinux 0x3c2c5af5 sprintf +EXPORT_SYMBOL vmlinux 0x3c356f1e atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x3c58bf15 pci_enable_device +EXPORT_SYMBOL vmlinux 0x3c5d4653 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x3c74194c pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x3c960ba6 sget +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cc0a3bb xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3d17ae0e pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x3d257993 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x3d32eb90 d_find_alias +EXPORT_SYMBOL vmlinux 0x3d419799 revalidate_disk +EXPORT_SYMBOL vmlinux 0x3d68bd4b flow_cache_genid +EXPORT_SYMBOL vmlinux 0x3d6ab768 sg_miter_start +EXPORT_SYMBOL vmlinux 0x3d7bfa94 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x3d847b65 pci_free_consistent +EXPORT_SYMBOL vmlinux 0x3d91d3dd ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x3daa69da vfs_lstat +EXPORT_SYMBOL vmlinux 0x3db63216 arp_find +EXPORT_SYMBOL vmlinux 0x3de90817 i2c_master_send +EXPORT_SYMBOL vmlinux 0x3e0d1228 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x3e383385 nf_hooks +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e6caebd add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x3e9af61c alloc_tty_driver +EXPORT_SYMBOL vmlinux 0x3eb09646 hippi_type_trans +EXPORT_SYMBOL vmlinux 0x3eb43e9d mark_page_accessed +EXPORT_SYMBOL vmlinux 0x3ec448dd elv_abort_queue +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3eefe3f2 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f109026 blk_init_tags +EXPORT_SYMBOL vmlinux 0x3f1a2b85 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x3f20753a tty_vhangup +EXPORT_SYMBOL vmlinux 0x3f2608ea pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x3f406a3b enable_kernel_altivec +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f6c7d74 __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x3f6f2ab1 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x3f71c989 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x3fba8659 xfrm_input +EXPORT_SYMBOL vmlinux 0x3fe0f444 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x3fe98639 dm_table_put +EXPORT_SYMBOL vmlinux 0x3ff26f3f audit_log_format +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x400239d3 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x40123aeb idr_for_each +EXPORT_SYMBOL vmlinux 0x40208791 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x4045cdcc kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x40488124 sg_last +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x40674f2a kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x4070aa2f pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x4078fffe shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x408ef0ac devm_ioremap +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40c846f7 input_open_device +EXPORT_SYMBOL vmlinux 0x40d37d54 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x40de71b4 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x40f1746c scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x40f1ad10 tb_ticks_per_jiffy +EXPORT_SYMBOL vmlinux 0x4101a975 ide_fixstring +EXPORT_SYMBOL vmlinux 0x4101bbde param_set_copystring +EXPORT_SYMBOL vmlinux 0x4108e69a fb_match_mode +EXPORT_SYMBOL vmlinux 0x41166725 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x41216046 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x412bca9b bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x412ddc0c dcache_lock +EXPORT_SYMBOL vmlinux 0x413238ac inet_register_protosw +EXPORT_SYMBOL vmlinux 0x41344088 param_get_charp +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x41533d45 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x416348f6 dev_gro_receive +EXPORT_SYMBOL vmlinux 0x416983d9 netdev_fix_features +EXPORT_SYMBOL vmlinux 0x4185cf4b radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x41ca965e sysctl_data +EXPORT_SYMBOL vmlinux 0x41dcd904 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x41dea916 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x41e3972b find_inode_number +EXPORT_SYMBOL vmlinux 0x41f7d820 km_state_notify +EXPORT_SYMBOL vmlinux 0x420dc058 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42211c02 matroxfb_g450_connect +EXPORT_SYMBOL vmlinux 0x42224298 sscanf +EXPORT_SYMBOL vmlinux 0x4248e883 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0x427ad3a8 fsync_bdev +EXPORT_SYMBOL vmlinux 0x427bc501 matroxfb_g450_setpll_cond +EXPORT_SYMBOL vmlinux 0x427caad2 deny_write_access +EXPORT_SYMBOL vmlinux 0x427cf0e4 scsi_execute_req +EXPORT_SYMBOL vmlinux 0x428890ca bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x42abeadd pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x42b74c91 genphy_suspend +EXPORT_SYMBOL vmlinux 0x42c1e0a1 sock_create +EXPORT_SYMBOL vmlinux 0x42ecf462 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x42f34db2 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x431fb5c5 pipe_to_file +EXPORT_SYMBOL vmlinux 0x4328cd5f bh_submit_read +EXPORT_SYMBOL vmlinux 0x4333eadb param_set_short +EXPORT_SYMBOL vmlinux 0x43355069 vfs_readlink +EXPORT_SYMBOL vmlinux 0x434fa55c release_console_sem +EXPORT_SYMBOL vmlinux 0x43555da2 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x437560b5 generic_make_request +EXPORT_SYMBOL vmlinux 0x4379b7ca tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x438c4e17 blk_queue_ordered +EXPORT_SYMBOL vmlinux 0x4394473d netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x43a98624 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x43ab66c3 param_array_get +EXPORT_SYMBOL vmlinux 0x43c316ac blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x43c93508 simple_link +EXPORT_SYMBOL vmlinux 0x43e21bd4 take_over_console +EXPORT_SYMBOL vmlinux 0x43e9ec0d dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x43f5ef71 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x43fa323b generic_ro_fops +EXPORT_SYMBOL vmlinux 0x43fb72b5 inet_accept +EXPORT_SYMBOL vmlinux 0x44003357 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x4404774e create_mnt_ns +EXPORT_SYMBOL vmlinux 0x44161c19 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x442a071c matroxfb_unregister_driver +EXPORT_SYMBOL vmlinux 0x442e51a7 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x44314efb radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x4442d663 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x444779c4 nla_find +EXPORT_SYMBOL vmlinux 0x444ceeed nla_reserve +EXPORT_SYMBOL vmlinux 0x4454cf8e phy_start_aneg +EXPORT_SYMBOL vmlinux 0x44746ea4 vfs_unlink +EXPORT_SYMBOL vmlinux 0x449a5a59 tty_register_driver +EXPORT_SYMBOL vmlinux 0x44b0491f jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x44b911c3 rb_replace_node +EXPORT_SYMBOL vmlinux 0x44c214d1 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f9a4c9 i2c_release_client +EXPORT_SYMBOL vmlinux 0x45246690 kthread_bind +EXPORT_SYMBOL vmlinux 0x453106f3 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x45356eb0 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x453f83ae sock_no_poll +EXPORT_SYMBOL vmlinux 0x4553634f alloc_file +EXPORT_SYMBOL vmlinux 0x45552e43 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x455a864a set_bh_page +EXPORT_SYMBOL vmlinux 0x455b2c2a key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x455e9011 pci_iomap +EXPORT_SYMBOL vmlinux 0x4575315d utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x45755933 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x45947727 param_array_set +EXPORT_SYMBOL vmlinux 0x4596db6a sys_sigreturn +EXPORT_SYMBOL vmlinux 0x45e2caa3 pmac_resume_agp_for_card +EXPORT_SYMBOL vmlinux 0x46182596 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x461ebfa0 __copy_tofrom_user +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x4647afbb dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x46782979 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x4686ffc9 do_sync_read +EXPORT_SYMBOL vmlinux 0x46982be4 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x46bc4893 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x46be66c3 wireless_send_event +EXPORT_SYMBOL vmlinux 0x46f321f4 adb_client_list +EXPORT_SYMBOL vmlinux 0x47199747 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x4719ba4e kfifo_free +EXPORT_SYMBOL vmlinux 0x472d2a9a radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x478a100e __ps2_command +EXPORT_SYMBOL vmlinux 0x479419fa down_read +EXPORT_SYMBOL vmlinux 0x479ab048 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47d917e5 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x47daac45 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x47ea2022 __kill_fasync +EXPORT_SYMBOL vmlinux 0x47fd887a ide_complete_rq +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x4866ba21 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x486b6407 hweight64 +EXPORT_SYMBOL vmlinux 0x4881efab pmac_get_partition +EXPORT_SYMBOL vmlinux 0x489c3b71 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x48c1d080 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x48c667b8 unload_nls +EXPORT_SYMBOL vmlinux 0x48eafd0f tcp4_gro_complete +EXPORT_SYMBOL vmlinux 0x48f9f12d complete_all +EXPORT_SYMBOL vmlinux 0x48ffdf8b kobject_get +EXPORT_SYMBOL vmlinux 0x491021bb journal_init_dev +EXPORT_SYMBOL vmlinux 0x492531e4 nf_afinfo +EXPORT_SYMBOL vmlinux 0x49356865 dev_close +EXPORT_SYMBOL vmlinux 0x49439411 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x497420d7 dm_io +EXPORT_SYMBOL vmlinux 0x497dd40c xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x49af23b8 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x49e182c0 param_get_string +EXPORT_SYMBOL vmlinux 0x49e1c67a tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x49e2ca45 vfs_quota_on +EXPORT_SYMBOL vmlinux 0x4a17c89f tc_classify_compat +EXPORT_SYMBOL vmlinux 0x4a290d4d cur_cpu_spec +EXPORT_SYMBOL vmlinux 0x4a323ee3 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a3ce96a inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x4a794e06 single_open +EXPORT_SYMBOL vmlinux 0x4a971ec7 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x4af5ef8a bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x4af928f6 machine_id +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b0700e0 follow_down +EXPORT_SYMBOL vmlinux 0x4b29681c skb_gso_segment +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b6d1cfc dev_get_stats +EXPORT_SYMBOL vmlinux 0x4b7cd409 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x4b8edde9 complete_and_exit +EXPORT_SYMBOL vmlinux 0x4b9f3684 kfifo_init +EXPORT_SYMBOL vmlinux 0x4ba7a752 pcim_iomap +EXPORT_SYMBOL vmlinux 0x4bbc3e5f pm_flags +EXPORT_SYMBOL vmlinux 0x4beaf33a pci_domain_nr +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c68b444 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x4ca71882 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x4cbb0074 macio_unregister_driver +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cd0c55b matrox_G100 +EXPORT_SYMBOL vmlinux 0x4cf48a5b pci_dev_get +EXPORT_SYMBOL vmlinux 0x4d1a2495 journal_wipe +EXPORT_SYMBOL vmlinux 0x4d1df7fd filemap_flush +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4d5235a1 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x4d68f35c bdget +EXPORT_SYMBOL vmlinux 0x4d78aa1d kmem_ptr_validate +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4ddb7808 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x4dec6038 memscan +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e0009da idr_get_new_above +EXPORT_SYMBOL vmlinux 0x4e030a1f udp_prot +EXPORT_SYMBOL vmlinux 0x4e069249 security_tun_dev_post_create +EXPORT_SYMBOL vmlinux 0x4e19bab5 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e41c847 gen_pool_create +EXPORT_SYMBOL vmlinux 0x4e50e86d kthread_stop +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e9dffb5 ip_fast_csum +EXPORT_SYMBOL vmlinux 0x4eb061ae default_unplug_io_fn +EXPORT_SYMBOL vmlinux 0x4ecf3fb6 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x4ee4f9d7 seq_bitmap +EXPORT_SYMBOL vmlinux 0x4eed1b2f skb_clone +EXPORT_SYMBOL vmlinux 0x4ef56441 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x4efad1e1 genphy_update_link +EXPORT_SYMBOL vmlinux 0x4f0ea0c0 up +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f21ecef ide_do_reset +EXPORT_SYMBOL vmlinux 0x4f24a838 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x4f33a96b vga_client_register +EXPORT_SYMBOL vmlinux 0x4f47b121 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x4f4a6605 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x4f5f7ea3 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x4f6875e0 i2c_use_client +EXPORT_SYMBOL vmlinux 0x4f95c3ab pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x4fb9b460 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x4fc95f83 scsi_register +EXPORT_SYMBOL vmlinux 0x4fd4452f textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x4fd70373 is_container_init +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4fe99583 atomic64_dec_if_positive +EXPORT_SYMBOL vmlinux 0x4feb3983 of_get_next_child +EXPORT_SYMBOL vmlinux 0x4fece2b6 phy_attach +EXPORT_SYMBOL vmlinux 0x4ff069da filp_close +EXPORT_SYMBOL vmlinux 0x4ffab305 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x5029b7a8 __kfree_skb +EXPORT_SYMBOL vmlinux 0x50391926 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x503b0160 dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x505a7027 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x506746b6 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x506a9996 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x507c48c3 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x50d56018 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x50dfa91b __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x50f2b909 napi_frags_skb +EXPORT_SYMBOL vmlinux 0x50f8589c tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x5104e4af path_put +EXPORT_SYMBOL vmlinux 0x5107a5c4 seq_write +EXPORT_SYMBOL vmlinux 0x5109299c jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x511c4c9b inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x51493d94 finish_wait +EXPORT_SYMBOL vmlinux 0x515e24a7 flush_instruction_cache +EXPORT_SYMBOL vmlinux 0x51667605 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x51686750 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x517e130a blk_queue_max_phys_segments +EXPORT_SYMBOL vmlinux 0x51808a00 journal_init_inode +EXPORT_SYMBOL vmlinux 0x518cb697 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x51b6798d ethtool_op_get_tx_csum +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x522d6a3c have_submounts +EXPORT_SYMBOL vmlinux 0x52312e26 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x52354a0b mutex_trylock +EXPORT_SYMBOL vmlinux 0x5256d7dd blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x52720e87 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x52760ca9 getnstimeofday +EXPORT_SYMBOL vmlinux 0x527830ff pmac_xpram_read +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x528c911c del_timer +EXPORT_SYMBOL vmlinux 0x52a58c24 ifla_policy +EXPORT_SYMBOL vmlinux 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL vmlinux 0x52e00f1c sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x52ebb126 param_get_ushort +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x535d67d7 get_phy_id +EXPORT_SYMBOL vmlinux 0x5370408e vfs_mknod +EXPORT_SYMBOL vmlinux 0x53c0767c sk_chk_filter +EXPORT_SYMBOL vmlinux 0x53ebab1b _outsl_ns +EXPORT_SYMBOL vmlinux 0x541f8c69 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x5423c1bb inet_release +EXPORT_SYMBOL vmlinux 0x54290dc9 nla_validate +EXPORT_SYMBOL vmlinux 0x544947c0 init_buffer +EXPORT_SYMBOL vmlinux 0x5466e560 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x54aa77bd blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x54bf07d1 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x54c577fa filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x54d42936 seq_printf +EXPORT_SYMBOL vmlinux 0x54e1ec2e jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54fd27ea gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x551d5cdc clip_tbl_hook +EXPORT_SYMBOL vmlinux 0x551f31db blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x5529749d devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x55653f94 prepare_binprm +EXPORT_SYMBOL vmlinux 0x556643e3 llc_sap_list_lock +EXPORT_SYMBOL vmlinux 0x557136c6 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x558099b0 giveup_altivec +EXPORT_SYMBOL vmlinux 0x55834d0a unlock_buffer +EXPORT_SYMBOL vmlinux 0x55899024 init_task +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55a4904b tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x55c5c865 sync_blockdev +EXPORT_SYMBOL vmlinux 0x55dfefb8 genphy_read_status +EXPORT_SYMBOL vmlinux 0x55e4fada slow_work_unregister_user +EXPORT_SYMBOL vmlinux 0x5600904f fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x5603cf43 do_settimeofday +EXPORT_SYMBOL vmlinux 0x560ab301 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x562face8 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x564db244 simple_lookup +EXPORT_SYMBOL vmlinux 0x5652929d input_release_device +EXPORT_SYMBOL vmlinux 0x56a10763 csum_tcpudp_magic +EXPORT_SYMBOL vmlinux 0x56b68962 security_path_unlink +EXPORT_SYMBOL vmlinux 0x56c2b95b rtas_progress +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d3f44d skb_dequeue +EXPORT_SYMBOL vmlinux 0x56d7ec49 of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x56ee1fcb pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x56fd0d5c scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x574e4ff6 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x57a6504e vsnprintf +EXPORT_SYMBOL vmlinux 0x57b57ebe jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0x57c230bd da903x_query_status +EXPORT_SYMBOL vmlinux 0x57db7242 mangle_path +EXPORT_SYMBOL vmlinux 0x57f3fa12 input_inject_event +EXPORT_SYMBOL vmlinux 0x57fdaad5 proto_register +EXPORT_SYMBOL vmlinux 0x582a4747 cacheable_memcpy +EXPORT_SYMBOL vmlinux 0x583441a0 phy_device_create +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5857e434 groups_free +EXPORT_SYMBOL vmlinux 0x587aa4ee dm_io_client_resize +EXPORT_SYMBOL vmlinux 0x5891e459 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x58c2d926 __devm_release_region +EXPORT_SYMBOL vmlinux 0x58ce08da textsearch_prepare +EXPORT_SYMBOL vmlinux 0x58d2cee8 vm_insert_page +EXPORT_SYMBOL vmlinux 0x590a293a ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x591d13bd vfs_quota_off +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x595d0946 empty_zero_page +EXPORT_SYMBOL vmlinux 0x5962859f sg_init_table +EXPORT_SYMBOL vmlinux 0x596d2b54 sock_init_data +EXPORT_SYMBOL vmlinux 0x598effef scsi_device_put +EXPORT_SYMBOL vmlinux 0x59b5db95 dget_locked +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d8223a ioport_resource +EXPORT_SYMBOL vmlinux 0x59f3ac1a pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x59f716e5 bio_pair_release +EXPORT_SYMBOL vmlinux 0x5a36c442 inet_bind +EXPORT_SYMBOL vmlinux 0x5a42c84f posix_test_lock +EXPORT_SYMBOL vmlinux 0x5a5f0a70 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x5a61331c textsearch_register +EXPORT_SYMBOL vmlinux 0x5a6b7b04 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x5a744b86 netlink_set_nonroot +EXPORT_SYMBOL vmlinux 0x5aa49d0c __blk_run_queue +EXPORT_SYMBOL vmlinux 0x5ab15f1e dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x5ab35b6e dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x5ab67931 do_IRQ +EXPORT_SYMBOL vmlinux 0x5abde6a5 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x5aca8c4a dquot_scan_active +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b29e3cc filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x5b39c033 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x5b3d6b2a simple_unlink +EXPORT_SYMBOL vmlinux 0x5b3f956c dentry_open +EXPORT_SYMBOL vmlinux 0x5b43f1f1 rtas_service_present +EXPORT_SYMBOL vmlinux 0x5b76f3ab sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x5b8313d9 key_negate_and_link +EXPORT_SYMBOL vmlinux 0x5b90b8a7 ethtool_op_get_sg +EXPORT_SYMBOL vmlinux 0x5b9c4bd6 key_link +EXPORT_SYMBOL vmlinux 0x5ba86e0c __scsi_add_device +EXPORT_SYMBOL vmlinux 0x5bb86b67 macio_release_resources +EXPORT_SYMBOL vmlinux 0x5bf57119 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x5bfdb9e9 mntput_no_expire +EXPORT_SYMBOL vmlinux 0x5c21b469 get_user_pages +EXPORT_SYMBOL vmlinux 0x5c2bee25 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x5c544c64 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x5c673bc8 tty_mutex +EXPORT_SYMBOL vmlinux 0x5c6b3e24 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x5c8579fe blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x5c8f5268 current_fs_time +EXPORT_SYMBOL vmlinux 0x5ccb5043 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x5cdb3eff single_release +EXPORT_SYMBOL vmlinux 0x5ce1c90e blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x5cf28d32 mdiobus_register +EXPORT_SYMBOL vmlinux 0x5d12b3fc twl4030_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x5d1463be bdev_read_only +EXPORT_SYMBOL vmlinux 0x5d420730 skb_recycle_check +EXPORT_SYMBOL vmlinux 0x5d5aa406 register_console +EXPORT_SYMBOL vmlinux 0x5d90aac7 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x5da39494 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x5dae077e bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x5dae54b4 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x5db3c4a0 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x5db7de88 bio_unmap_user +EXPORT_SYMBOL vmlinux 0x5dda797c ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x5e039b68 of_get_gpio_flags +EXPORT_SYMBOL vmlinux 0x5e3b4b1f read_cache_page +EXPORT_SYMBOL vmlinux 0x5e93ddf6 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea520c5 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x5eb93cc2 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5edd0762 bin2bcd +EXPORT_SYMBOL vmlinux 0x5edfdbbd nf_register_hook +EXPORT_SYMBOL vmlinux 0x5f507b0d dput +EXPORT_SYMBOL vmlinux 0x5f57bb0e sock_no_connect +EXPORT_SYMBOL vmlinux 0x5f57f28c skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x5f647bee release_sock +EXPORT_SYMBOL vmlinux 0x5f71e08d gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x5f754e5a memset +EXPORT_SYMBOL vmlinux 0x5f8a2728 isa_io_base +EXPORT_SYMBOL vmlinux 0x5f9a48d3 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x5fe5eb0e tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x6006037a bio_endio +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x600f5192 journal_start +EXPORT_SYMBOL vmlinux 0x60414f08 dm_table_unplug_all +EXPORT_SYMBOL vmlinux 0x6047c4da gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x605e54c2 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x6070f155 cont_write_begin +EXPORT_SYMBOL vmlinux 0x60766ede remap_pfn_range +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a0ebad __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x60a169b0 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x60a412a2 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x60a4efe2 ida_get_new +EXPORT_SYMBOL vmlinux 0x60be9e9b xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x60c07bf4 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x60c5c075 path_lookup +EXPORT_SYMBOL vmlinux 0x60c9f110 netif_napi_add +EXPORT_SYMBOL vmlinux 0x60d52b9b tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x60e117bb of_get_address +EXPORT_SYMBOL vmlinux 0x60fba8ac register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x611948e4 drop_super +EXPORT_SYMBOL vmlinux 0x61200a90 pskb_copy +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x613bf146 pci_enable_msix +EXPORT_SYMBOL vmlinux 0x61589321 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x616cf3ef simple_write_end +EXPORT_SYMBOL vmlinux 0x618d8299 set_notify_swap_entry_free +EXPORT_SYMBOL vmlinux 0x61b6d0c0 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61c626ce put_tty_driver +EXPORT_SYMBOL vmlinux 0x61eef2c9 _insb +EXPORT_SYMBOL vmlinux 0x61f2082f __elv_add_request +EXPORT_SYMBOL vmlinux 0x620dcfd4 ip_fragment +EXPORT_SYMBOL vmlinux 0x6211349e add_disk +EXPORT_SYMBOL vmlinux 0x62165871 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x623d7182 _chrp_type +EXPORT_SYMBOL vmlinux 0x6262ecd0 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x6266aa34 find_or_create_page +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x628332e8 pmu_power_flags +EXPORT_SYMBOL vmlinux 0x62912681 rtnl_notify +EXPORT_SYMBOL vmlinux 0x6295ef40 vmtruncate +EXPORT_SYMBOL vmlinux 0x62bc5fd4 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x62c4ec7d skb_unlink +EXPORT_SYMBOL vmlinux 0x62cc569e cpu_present_mask +EXPORT_SYMBOL vmlinux 0x62e41079 fget +EXPORT_SYMBOL vmlinux 0x6325c68f dma_pool_create +EXPORT_SYMBOL vmlinux 0x632ba38e tty_register_device +EXPORT_SYMBOL vmlinux 0x63367d90 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x634be05c xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x6350b7c1 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x63cbeaa4 seq_path +EXPORT_SYMBOL vmlinux 0x63e57549 mem_map +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63efc536 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x6433960d napi_reuse_skb +EXPORT_SYMBOL vmlinux 0x6460c38a netif_carrier_on +EXPORT_SYMBOL vmlinux 0x646cc6ab pmu_poll +EXPORT_SYMBOL vmlinux 0x64826840 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x649c53e4 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x64b06ffc scsi_put_command +EXPORT_SYMBOL vmlinux 0x64bf166c sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x64c43ea4 __netdev_alloc_page +EXPORT_SYMBOL vmlinux 0x64f77244 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x64f84809 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x65298a86 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x65400222 __irq_offset_value +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65414e67 dev_valid_name +EXPORT_SYMBOL vmlinux 0x65454190 scsi_free_command +EXPORT_SYMBOL vmlinux 0x656a17fb neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x658cae78 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x6598193a nobh_write_end +EXPORT_SYMBOL vmlinux 0x65e0ae1c xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x65e6bf76 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x66010e0f register_nls +EXPORT_SYMBOL vmlinux 0x6615a169 dentry_unhash +EXPORT_SYMBOL vmlinux 0x6624f56a pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x662ec6aa vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x663d15cf lookup_bdev +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x6693369e sock_no_bind +EXPORT_SYMBOL vmlinux 0x66cbf14b pmac_xpram_write +EXPORT_SYMBOL vmlinux 0x66ccfb06 dqput +EXPORT_SYMBOL vmlinux 0x66de75ba inet_ioctl +EXPORT_SYMBOL vmlinux 0x66eb69d7 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x66f6c98a sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x66fde628 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x67053080 current_kernel_time +EXPORT_SYMBOL vmlinux 0x671489b2 pci_find_bus +EXPORT_SYMBOL vmlinux 0x67278a4c skb_copy +EXPORT_SYMBOL vmlinux 0x675e1745 tcp_connect +EXPORT_SYMBOL vmlinux 0x676a0e6a __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x67be1d3d cpu_active_mask +EXPORT_SYMBOL vmlinux 0x67d7469e create_proc_entry +EXPORT_SYMBOL vmlinux 0x67f2cee5 udp_table +EXPORT_SYMBOL vmlinux 0x680ac5e1 neigh_for_each +EXPORT_SYMBOL vmlinux 0x681b1952 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x6824cd50 sg_miter_next +EXPORT_SYMBOL vmlinux 0x684a22d0 setup_new_exec +EXPORT_SYMBOL vmlinux 0x689007a7 llc_mac_hdr_init +EXPORT_SYMBOL vmlinux 0x6898ee56 kill_fasync +EXPORT_SYMBOL vmlinux 0x68a644d2 dquot_destroy +EXPORT_SYMBOL vmlinux 0x68eecf7d scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x690198e6 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x6913a757 d_alloc_root +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x697c104a dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x6980fe91 param_get_int +EXPORT_SYMBOL vmlinux 0x69927dff try_acquire_console_sem +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69af2327 idr_init +EXPORT_SYMBOL vmlinux 0x69c8c1d5 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69d540a1 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x69d56311 sock_no_listen +EXPORT_SYMBOL vmlinux 0x69d7e5b8 __debugger_ipi +EXPORT_SYMBOL vmlinux 0x69e0afa4 input_free_device +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69fb76a6 arp_send +EXPORT_SYMBOL vmlinux 0x69fedf9d sk_stream_error +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a2388cc of_platform_bus_type +EXPORT_SYMBOL vmlinux 0x6a47571d __set_personality +EXPORT_SYMBOL vmlinux 0x6a589288 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x6a58b2ae llc_build_and_send_ui_pkt +EXPORT_SYMBOL vmlinux 0x6a61f874 to_tm +EXPORT_SYMBOL vmlinux 0x6a69f4e0 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a846925 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6acd620c bdi_destroy +EXPORT_SYMBOL vmlinux 0x6ad065f4 param_set_charp +EXPORT_SYMBOL vmlinux 0x6afd63c8 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b93b7dd ethtool_op_get_flags +EXPORT_SYMBOL vmlinux 0x6b985a18 nf_reinject +EXPORT_SYMBOL vmlinux 0x6bbfa0ba security_inode_readlink +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc56112 slow_work_cancel +EXPORT_SYMBOL vmlinux 0x6bc6763d scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x6bc6f463 pmac_register_agp_pm +EXPORT_SYMBOL vmlinux 0x6bd807f4 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6bf6eec6 mdiobus_alloc +EXPORT_SYMBOL vmlinux 0x6c0ac0d0 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c36a5c1 __mutex_init +EXPORT_SYMBOL vmlinux 0x6c3b242e sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x6c3b4b18 scsi_print_result +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c8a9032 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0x6c930c20 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x6c961e1b pcim_pin_device +EXPORT_SYMBOL vmlinux 0x6ca1d1a4 atomic64_read +EXPORT_SYMBOL vmlinux 0x6cb454d1 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6cf4b98f rtas +EXPORT_SYMBOL vmlinux 0x6cf4df61 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x6d099564 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d288375 radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d2a3898 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x6d6cbadc rb_last +EXPORT_SYMBOL vmlinux 0x6d6eb8fe blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x6d700ec9 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x6da053e9 security_path_symlink +EXPORT_SYMBOL vmlinux 0x6da508d3 rwsem_wake +EXPORT_SYMBOL vmlinux 0x6da928f4 _insw_ns +EXPORT_SYMBOL vmlinux 0x6daca1ae phy_stop +EXPORT_SYMBOL vmlinux 0x6dd1d12b udp_proc_register +EXPORT_SYMBOL vmlinux 0x6ddf9584 write_one_page +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df29358 bdget_disk +EXPORT_SYMBOL vmlinux 0x6e522015 sg_init_one +EXPORT_SYMBOL vmlinux 0x6e5d6422 of_release_dev +EXPORT_SYMBOL vmlinux 0x6e5dfd13 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6ea4482e qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x6eac440b blk_plug_device_unlocked +EXPORT_SYMBOL vmlinux 0x6eba1952 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x6ee83be9 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x6ef02913 dquot_free_space +EXPORT_SYMBOL vmlinux 0x6f0dddf5 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x6f2ed814 put_mnt_ns +EXPORT_SYMBOL vmlinux 0x6f3fcc74 pci_set_consistent_dma_mask +EXPORT_SYMBOL vmlinux 0x6f49a427 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x6f4bca04 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x6f9df1a7 kset_unregister +EXPORT_SYMBOL vmlinux 0x6faa6ef2 unregister_console +EXPORT_SYMBOL vmlinux 0x6fbbe4bf pcim_enable_device +EXPORT_SYMBOL vmlinux 0x6fbe9920 set_anon_super +EXPORT_SYMBOL vmlinux 0x6fbe9bcc pci_get_subsys +EXPORT_SYMBOL vmlinux 0x6fc0a102 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fdb0f1c tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x6fff393f time_to_tm +EXPORT_SYMBOL vmlinux 0x7007babd balance_dirty_pages_ratelimited_nr +EXPORT_SYMBOL vmlinux 0x7008a083 matroxfb_vgaHWinit +EXPORT_SYMBOL vmlinux 0x701d0ebd snprintf +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x70552be1 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x70574af2 dcache_readdir +EXPORT_SYMBOL vmlinux 0x70821542 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x70877554 alloc_netdev_mq +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70d888b7 __debugger_fault_handler +EXPORT_SYMBOL vmlinux 0x70e2c11c iget5_locked +EXPORT_SYMBOL vmlinux 0x70f86c70 pmu_queue_request +EXPORT_SYMBOL vmlinux 0x70f91db7 input_allocate_device +EXPORT_SYMBOL vmlinux 0x71042d55 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x7109cc35 flush_hash_entry +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x718177a7 cdrom_open +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71c90087 memcmp +EXPORT_SYMBOL vmlinux 0x72131ecb i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x72186f28 d_path +EXPORT_SYMBOL vmlinux 0x72314402 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x723ad0be tcf_hash_search +EXPORT_SYMBOL vmlinux 0x72470c8c iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x725a5300 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x725b8630 generic_file_open +EXPORT_SYMBOL vmlinux 0x7283513a tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bbd7d8 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x72c3be87 param_set_byte +EXPORT_SYMBOL vmlinux 0x72d5af61 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x72e0bab2 matroxfb_wait_for_sync +EXPORT_SYMBOL vmlinux 0x72e17024 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72f8aee6 get_sb_bdev +EXPORT_SYMBOL vmlinux 0x731b23da wake_up_process +EXPORT_SYMBOL vmlinux 0x73564277 __timecompare_update +EXPORT_SYMBOL vmlinux 0x7362dd1e vfs_fstat +EXPORT_SYMBOL vmlinux 0x737af247 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x73bfb41c vm_map_ram +EXPORT_SYMBOL vmlinux 0x73c10c8e disk_stack_limits +EXPORT_SYMBOL vmlinux 0x73c452b1 tty_kref_put +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x744c0c68 param_get_byte +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x748f1eb3 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL vmlinux 0x749bc5ca submit_bio +EXPORT_SYMBOL vmlinux 0x74ac58dd skb_copy_expand +EXPORT_SYMBOL vmlinux 0x74bfc369 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x74fe8730 sys_ctrler +EXPORT_SYMBOL vmlinux 0x7519083f buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x751dbafd consume_skb +EXPORT_SYMBOL vmlinux 0x75233813 of_phy_connect +EXPORT_SYMBOL vmlinux 0x75392ec6 simple_readpage +EXPORT_SYMBOL vmlinux 0x75623e79 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x756babb8 load_nls +EXPORT_SYMBOL vmlinux 0x756dd160 start_thread +EXPORT_SYMBOL vmlinux 0x757db2df serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x759cdd55 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x75abbbb2 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75cbba10 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x75f257fb tcf_em_register +EXPORT_SYMBOL vmlinux 0x75f77d4c netpoll_setup +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x7641545f scsi_target_resume +EXPORT_SYMBOL vmlinux 0x768e6070 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x769d90b1 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x769f2df3 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x76a87f4d skb_split +EXPORT_SYMBOL vmlinux 0x76a9d558 file_remove_suid +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76dbbe4d __napi_schedule +EXPORT_SYMBOL vmlinux 0x76e14e09 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x77062e29 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x771d0a3b vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x774b36b6 blk_plug_device +EXPORT_SYMBOL vmlinux 0x774bd0e0 __f_setown +EXPORT_SYMBOL vmlinux 0x776ddbdb mark_info_dirty +EXPORT_SYMBOL vmlinux 0x7779e182 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x7798616c __secpath_destroy +EXPORT_SYMBOL vmlinux 0x77a8070a remove_inode_hash +EXPORT_SYMBOL vmlinux 0x77af0455 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x77b851c4 cacheable_memzero +EXPORT_SYMBOL vmlinux 0x77badb42 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0x77c16201 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x77c2dd78 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x77cfcfde __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x77dbc87e arp_xmit +EXPORT_SYMBOL vmlinux 0x77e230e7 vfs_dq_quota_on_remount +EXPORT_SYMBOL vmlinux 0x77e9b0b3 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f713ec tcp_child_process +EXPORT_SYMBOL vmlinux 0x77f96fa5 unregister_8022_client +EXPORT_SYMBOL vmlinux 0x77f9a527 vfs_fsync +EXPORT_SYMBOL vmlinux 0x77fa5d1f ns_to_timespec +EXPORT_SYMBOL vmlinux 0x781b464e scsi_remove_host +EXPORT_SYMBOL vmlinux 0x784d9816 register_8022_client +EXPORT_SYMBOL vmlinux 0x7857cc0b blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x7867fb5e inet_select_addr +EXPORT_SYMBOL vmlinux 0x786c5071 of_iomap +EXPORT_SYMBOL vmlinux 0x788fe103 iomem_resource +EXPORT_SYMBOL vmlinux 0x789b2111 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x78a3fadf iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x78bd68fa phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x78d8ae29 vga_tryget +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78dfdc12 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x78e04f1e eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x7906e7d6 macio_register_driver +EXPORT_SYMBOL vmlinux 0x791e7e1d unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x791e963f pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x791f6b86 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x79237ea5 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x793d63c7 find_lock_page +EXPORT_SYMBOL vmlinux 0x79585e3b mach_chrp +EXPORT_SYMBOL vmlinux 0x79600d4a wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x798cc389 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x79930481 d_add_ci +EXPORT_SYMBOL vmlinux 0x79a5e364 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad224b tasklet_kill +EXPORT_SYMBOL vmlinux 0x79b4a498 bio_copy_user +EXPORT_SYMBOL vmlinux 0x79bbab8e serio_rescan +EXPORT_SYMBOL vmlinux 0x79d434bd inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x79e1fc9d send_sig_info +EXPORT_SYMBOL vmlinux 0x7a006283 netif_rx +EXPORT_SYMBOL vmlinux 0x7a014abf generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x7a1dab5b hippi_neigh_setup_dev +EXPORT_SYMBOL vmlinux 0x7a299c63 journal_clear_err +EXPORT_SYMBOL vmlinux 0x7a2a837d strict_strtol +EXPORT_SYMBOL vmlinux 0x7a3f7bb1 blkdev_put +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a630f4f __pci_register_driver +EXPORT_SYMBOL vmlinux 0x7a7c8f10 bioset_free +EXPORT_SYMBOL vmlinux 0x7a843758 macio_request_resource +EXPORT_SYMBOL vmlinux 0x7aa561f3 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x7aad3944 tty_check_change +EXPORT_SYMBOL vmlinux 0x7ae52234 elv_rb_del +EXPORT_SYMBOL vmlinux 0x7b17cb32 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x7b1f8c68 simple_fill_super +EXPORT_SYMBOL vmlinux 0x7b25d7a0 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x7b3c3584 input_set_capability +EXPORT_SYMBOL vmlinux 0x7b840043 i2c_bit_add_bus +EXPORT_SYMBOL vmlinux 0x7b931afc __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x7be4827c pci_dram_offset +EXPORT_SYMBOL vmlinux 0x7bfd9ba2 make_EII_client +EXPORT_SYMBOL vmlinux 0x7c070c49 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x7c2dce21 dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c573ccd inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x7c60d66e getname +EXPORT_SYMBOL vmlinux 0x7c79a807 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x7c7c000f pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x7c889a9f skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c9291d1 csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x7ca341af kernel_thread +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d267242 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x7d43cc30 try_to_release_page +EXPORT_SYMBOL vmlinux 0x7d62b348 eth_header_parse +EXPORT_SYMBOL vmlinux 0x7d708559 dev_alloc_skb +EXPORT_SYMBOL vmlinux 0x7d711fbd arp_tbl +EXPORT_SYMBOL vmlinux 0x7d813ef3 pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x7d98d6fe input_unregister_handle +EXPORT_SYMBOL vmlinux 0x7d9e43ae jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x7d9e64d1 pci_find_device +EXPORT_SYMBOL vmlinux 0x7dad60ff security_path_mknod +EXPORT_SYMBOL vmlinux 0x7dceceac capable +EXPORT_SYMBOL vmlinux 0x7e154655 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x7e3bafb0 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x7e8b684c kobject_set_name +EXPORT_SYMBOL vmlinux 0x7e91dd2c misc_deregister +EXPORT_SYMBOL vmlinux 0x7e93e248 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x7eaca410 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x7eb28661 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x7ebf3846 lease_modify +EXPORT_SYMBOL vmlinux 0x7ec823f5 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x7ecd63c6 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x7ee973e3 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x7efdc172 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x7f0dd11a eth_validate_addr +EXPORT_SYMBOL vmlinux 0x7f21a336 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f3521f6 mnt_unpin +EXPORT_SYMBOL vmlinux 0x7f356d3b ethtool_op_set_tx_hw_csum +EXPORT_SYMBOL vmlinux 0x7fb04db0 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x7fe0e305 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x7fe42955 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x8000cb41 netdev_set_master +EXPORT_SYMBOL vmlinux 0x8000e700 of_scan_pci_bridge +EXPORT_SYMBOL vmlinux 0x801f5a3f __strncpy_from_user +EXPORT_SYMBOL vmlinux 0x80205a8a freeze_bdev +EXPORT_SYMBOL vmlinux 0x8063f83d radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x80658187 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x806d734e sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x8085c7b1 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x80a956a0 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x810545e7 mpage_writepages +EXPORT_SYMBOL vmlinux 0x810c7ccd __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x813d7715 iput +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x81799cee vscnprintf +EXPORT_SYMBOL vmlinux 0x81826e58 unregister_nls +EXPORT_SYMBOL vmlinux 0x81a7809b security_path_truncate +EXPORT_SYMBOL vmlinux 0x81c0a84f rtas_set_indicator +EXPORT_SYMBOL vmlinux 0x81d7139b tty_devnum +EXPORT_SYMBOL vmlinux 0x8204fece dev_get_by_name +EXPORT_SYMBOL vmlinux 0x820d225f print_mac +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8262f64b tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x82692209 kref_set +EXPORT_SYMBOL vmlinux 0x8273742d netif_carrier_off +EXPORT_SYMBOL vmlinux 0x82957a74 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x82a56983 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x82ac801a seq_read +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82c083c2 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x82d6d0fd dev_load +EXPORT_SYMBOL vmlinux 0x82e5a238 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x8328bd4d tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x833694d0 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x836bea85 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x83a17e3e __invalidate_device +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83b66020 skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x83c43dc1 posix_acl_chmod_masq +EXPORT_SYMBOL vmlinux 0x83db82ba register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x83e02ffc __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x8414afd9 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x84364e2c module_layout +EXPORT_SYMBOL vmlinux 0x844404cf ISA_DMA_THRESHOLD +EXPORT_SYMBOL vmlinux 0x84862750 __alloc_skb +EXPORT_SYMBOL vmlinux 0x84b17781 locks_init_lock +EXPORT_SYMBOL vmlinux 0x84b183ae strncmp +EXPORT_SYMBOL vmlinux 0x84b1db53 pci_set_master +EXPORT_SYMBOL vmlinux 0x84bdd40b tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x84e684fc default_file_splice_read +EXPORT_SYMBOL vmlinux 0x84e9bcf3 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x851f430e netdev_bonding_change +EXPORT_SYMBOL vmlinux 0x8541bccc intercept_table +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x85741add security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x85744141 mnt_pin +EXPORT_SYMBOL vmlinux 0x858743e7 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x85a10c4e alloc_disk_node +EXPORT_SYMBOL vmlinux 0x85ac7f10 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x85c92b0c blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x85d72288 secpath_dup +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x862636c0 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x8677d0c9 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x86c1c546 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x86db1cbb rtas_flash_term_hook +EXPORT_SYMBOL vmlinux 0x86ecda51 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x86fa0f05 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x86ff564f fddi_change_mtu +EXPORT_SYMBOL vmlinux 0x87198f96 tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x872927b8 down_timeout +EXPORT_SYMBOL vmlinux 0x8730bf3c bd_release +EXPORT_SYMBOL vmlinux 0x873c6e7a of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x87452131 no_llseek +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87a1c61f directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x87a4d55e nobh_write_begin +EXPORT_SYMBOL vmlinux 0x87caa130 bio_clone +EXPORT_SYMBOL vmlinux 0x87d2d13a scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x87f6b0b8 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x87fc1549 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x8802d7eb console_start +EXPORT_SYMBOL vmlinux 0x8804ac53 __getblk +EXPORT_SYMBOL vmlinux 0x880f7721 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x88391746 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x885e4042 tcp_poll +EXPORT_SYMBOL vmlinux 0x886aa274 posix_acl_create_masq +EXPORT_SYMBOL vmlinux 0x8881d299 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x88847427 pci_alloc_consistent +EXPORT_SYMBOL vmlinux 0x88937ec2 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x88e784d9 kill_anon_super +EXPORT_SYMBOL vmlinux 0x88eeeb8f sysctl_jiffies +EXPORT_SYMBOL vmlinux 0x89054b80 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x890c263e generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x891e32b8 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x89281b75 noop_qdisc +EXPORT_SYMBOL vmlinux 0x89739f54 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x89b3107b isa_mem_base +EXPORT_SYMBOL vmlinux 0x89b6f55d scsi_host_put +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89e348a4 dev_change_flags +EXPORT_SYMBOL vmlinux 0x89f03771 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x8a1203a9 kref_get +EXPORT_SYMBOL vmlinux 0x8a12fcd7 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x8a139a6e pci_remove_behind_bridge +EXPORT_SYMBOL vmlinux 0x8a1f60ab validate_sp +EXPORT_SYMBOL vmlinux 0x8a28f49a dquot_reserve_space +EXPORT_SYMBOL vmlinux 0x8a2980e1 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x8a329f37 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x8a373fd7 twl4030_i2c_write +EXPORT_SYMBOL vmlinux 0x8a45b88d con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x8a57b39c iget_failed +EXPORT_SYMBOL vmlinux 0x8a5ce43e tcf_hash_check +EXPORT_SYMBOL vmlinux 0x8a6911c3 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a919e90 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8ab4079e atomic64_add +EXPORT_SYMBOL vmlinux 0x8abcfd63 generic_show_options +EXPORT_SYMBOL vmlinux 0x8ac40297 iommu_area_free +EXPORT_SYMBOL vmlinux 0x8af675ac generic_write_end +EXPORT_SYMBOL vmlinux 0x8b671ad8 dquot_drop +EXPORT_SYMBOL vmlinux 0x8b846c14 fb_get_mode +EXPORT_SYMBOL vmlinux 0x8b8609ce pci_disable_device +EXPORT_SYMBOL vmlinux 0x8b8b91e1 datagram_poll +EXPORT_SYMBOL vmlinux 0x8b9a4149 ida_destroy +EXPORT_SYMBOL vmlinux 0x8b9b7b23 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x8bbb8d73 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x8bd313b8 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x8bd5b603 param_get_long +EXPORT_SYMBOL vmlinux 0x8bffd8d5 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0x8c111c6a blk_end_request +EXPORT_SYMBOL vmlinux 0x8c161327 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c537c45 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x8c7bc348 ida_remove +EXPORT_SYMBOL vmlinux 0x8c99ceec do_mmap_pgoff +EXPORT_SYMBOL vmlinux 0x8cb45409 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8ccfc6d8 sock_create_kern +EXPORT_SYMBOL vmlinux 0x8d3894f2 _ctype +EXPORT_SYMBOL vmlinux 0x8d4eed2d blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d5642fc wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x8d7b5545 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x8da287d3 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x8dc0ab1d input_register_handler +EXPORT_SYMBOL vmlinux 0x8dcb5c27 idr_remove +EXPORT_SYMBOL vmlinux 0x8df1c2d3 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x8df5da63 memstart_addr +EXPORT_SYMBOL vmlinux 0x8e0b7743 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x8e18e948 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x8e1d3fb1 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x8e3c9cc3 vprintk +EXPORT_SYMBOL vmlinux 0x8e426a7f mod_timer_pending +EXPORT_SYMBOL vmlinux 0x8e485900 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x8e543f04 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x8e763ae1 send_remote_softirq +EXPORT_SYMBOL vmlinux 0x8ebe25a9 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x8ee69235 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8f07d8ca __wait_on_bit +EXPORT_SYMBOL vmlinux 0x8f2a3cc6 unregister_snap_client +EXPORT_SYMBOL vmlinux 0x8f48679a rb_prev +EXPORT_SYMBOL vmlinux 0x8f6b7950 set_irq_data +EXPORT_SYMBOL vmlinux 0x8f7bd333 vfs_follow_link +EXPORT_SYMBOL vmlinux 0x8f9b86b2 kfifo_alloc +EXPORT_SYMBOL vmlinux 0x8fc9537e key_put +EXPORT_SYMBOL vmlinux 0x8fd90b07 unregister_con_driver +EXPORT_SYMBOL vmlinux 0x8ff0c647 fb_find_mode +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x90035333 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x903942b8 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x903a76e6 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x904ea328 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x90501868 transfer_to_handler +EXPORT_SYMBOL vmlinux 0x906f1e26 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x90962405 phy_driver_register +EXPORT_SYMBOL vmlinux 0x90b2a899 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x90b81452 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x90bc6fcf generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x90e06aee vfs_rename +EXPORT_SYMBOL vmlinux 0x90f8ef74 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x91009452 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x9100c5ab splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x9111f050 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x912557ce rtas_busy_delay +EXPORT_SYMBOL vmlinux 0x9136d763 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x91481982 __ratelimit +EXPORT_SYMBOL vmlinux 0x9148c7ae dma_spin_lock +EXPORT_SYMBOL vmlinux 0x915e1208 tb_ticks_per_usec +EXPORT_SYMBOL vmlinux 0x91680437 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x9168c033 rtas_get_sensor +EXPORT_SYMBOL vmlinux 0x9171ded6 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x91766c09 param_get_ulong +EXPORT_SYMBOL vmlinux 0x917e8291 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x91852baa mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x919ad7e4 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x919d1163 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x91b3b789 cdrom_release +EXPORT_SYMBOL vmlinux 0x91bc1c3e dquot_release +EXPORT_SYMBOL vmlinux 0x91cc2eff napi_frags_finish +EXPORT_SYMBOL vmlinux 0x91d88e48 __debugger_dabr_match +EXPORT_SYMBOL vmlinux 0x91e2d372 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x91f21021 bio_alloc +EXPORT_SYMBOL vmlinux 0x920c01f1 bio_sector_offset +EXPORT_SYMBOL vmlinux 0x920fea2e proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x9214ed8a param_get_bool +EXPORT_SYMBOL vmlinux 0x92322a3a input_close_device +EXPORT_SYMBOL vmlinux 0x923cd8c1 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x9242ee9a start_tty +EXPORT_SYMBOL vmlinux 0x9259affd blk_sync_queue +EXPORT_SYMBOL vmlinux 0x927ce9d8 pci_read_irq_line +EXPORT_SYMBOL vmlinux 0x9281c3d1 of_parse_phandle +EXPORT_SYMBOL vmlinux 0x9296c6af netdev_features_change +EXPORT_SYMBOL vmlinux 0x92b13263 kernel_connect +EXPORT_SYMBOL vmlinux 0x92cc8f2a ip_mc_rejoin_group +EXPORT_SYMBOL vmlinux 0x92e78968 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x92f27580 phy_sanitize_settings +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x9309de94 cuda_request +EXPORT_SYMBOL vmlinux 0x934d4192 serio_open +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93a7c912 generic_writepages +EXPORT_SYMBOL vmlinux 0x93b447cd journal_extend +EXPORT_SYMBOL vmlinux 0x93c62dce otg_set_transceiver +EXPORT_SYMBOL vmlinux 0x93c8b8d8 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x93df0189 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x94079538 pipe_lock +EXPORT_SYMBOL vmlinux 0x940b12eb devm_iounmap +EXPORT_SYMBOL vmlinux 0x94847b23 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a2e9eb journal_check_available_features +EXPORT_SYMBOL vmlinux 0x94bc159c note_scsi_host +EXPORT_SYMBOL vmlinux 0x94feac82 of_unregister_driver +EXPORT_SYMBOL vmlinux 0x9501d078 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x950f2f7f pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x95136dd1 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x9514151a _mcount +EXPORT_SYMBOL vmlinux 0x952404f6 pci_get_device +EXPORT_SYMBOL vmlinux 0x9524b0ae _outsb +EXPORT_SYMBOL vmlinux 0x952650f0 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x952bf1b9 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x952e843b machine_is_compatible +EXPORT_SYMBOL vmlinux 0x9532ada3 generic_write_checks +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x9544ee09 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x954cbb26 vsprintf +EXPORT_SYMBOL vmlinux 0x9580cad7 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x9593fe8d submit_bh +EXPORT_SYMBOL vmlinux 0x95983995 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x95a082b2 llc_sap_close +EXPORT_SYMBOL vmlinux 0x95be3974 vfs_link +EXPORT_SYMBOL vmlinux 0x95f61728 delayed_slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x960936f3 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x9621c645 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x96333572 ps2_command +EXPORT_SYMBOL vmlinux 0x968246e6 of_phy_connect_fixed_link +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96ded7c6 ide_raw_taskfile +EXPORT_SYMBOL vmlinux 0x96e21c58 keyring_clear +EXPORT_SYMBOL vmlinux 0x96fc8c67 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x9700e4ae generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x970ce5c1 of_get_parent +EXPORT_SYMBOL vmlinux 0x97255bdf strlen +EXPORT_SYMBOL vmlinux 0x97308a29 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x9748927f _outsw_ns +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x976512af __sk_dst_check +EXPORT_SYMBOL vmlinux 0x9765c25b add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x97904bf3 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x97e45fd1 ip_route_input +EXPORT_SYMBOL vmlinux 0x97e58009 km_policy_expired +EXPORT_SYMBOL vmlinux 0x97f2510b lookup_one_len +EXPORT_SYMBOL vmlinux 0x982576de vfs_get_dqinfo +EXPORT_SYMBOL vmlinux 0x982ee058 dma_pool_free +EXPORT_SYMBOL vmlinux 0x98361339 of_translate_address +EXPORT_SYMBOL vmlinux 0x983e66a6 slow_work_enqueue +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x9877f312 matroxfb_read_pins +EXPORT_SYMBOL vmlinux 0x9884db3f end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x989359ca switch_mmu_context +EXPORT_SYMBOL vmlinux 0x98a68f4b bio_kmalloc +EXPORT_SYMBOL vmlinux 0x98cf3f33 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x98d3df49 pci_dev_put +EXPORT_SYMBOL vmlinux 0x98f88d5a of_find_node_by_path +EXPORT_SYMBOL vmlinux 0x98fe7882 DMA_MODE_READ +EXPORT_SYMBOL vmlinux 0x990f3289 task_nice +EXPORT_SYMBOL vmlinux 0x992a827e key_payload_reserve +EXPORT_SYMBOL vmlinux 0x99406bd4 blk_queue_max_sectors +EXPORT_SYMBOL vmlinux 0x99486f06 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x9967dc17 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x9975e2a3 register_con_driver +EXPORT_SYMBOL vmlinux 0x997a44ef of_device_unregister +EXPORT_SYMBOL vmlinux 0x998fb1ce cfb_copyarea +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999d7f32 proc_create_data +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99bb8806 memmove +EXPORT_SYMBOL vmlinux 0x99bfbe39 get_unused_fd +EXPORT_SYMBOL vmlinux 0x99c7a8b8 jbd2_dev_to_name +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99ea12ce panic_blink +EXPORT_SYMBOL vmlinux 0x9a0f86c6 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a41e8d8 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x9a5cde95 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x9a648626 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x9a7279c6 sysctl_ms_jiffies +EXPORT_SYMBOL vmlinux 0x9aa39627 tcp_close +EXPORT_SYMBOL vmlinux 0x9abd244a __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x9ae15c67 sk_alloc +EXPORT_SYMBOL vmlinux 0x9af8c604 dev_unicast_sync +EXPORT_SYMBOL vmlinux 0x9b2e832f alloc_disk +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b4dffaf journal_stop +EXPORT_SYMBOL vmlinux 0x9b551d44 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b99126f kernel_listen +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bce482f __release_region +EXPORT_SYMBOL vmlinux 0x9bf3c006 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x9c012508 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x9c17a806 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x9c252ba0 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x9c252bc7 journal_flush +EXPORT_SYMBOL vmlinux 0x9c31c2a1 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x9c5361ca i2c_del_driver +EXPORT_SYMBOL vmlinux 0x9c5834a9 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9cedd129 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d14983a ppc_enable_pmcs +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d669763 memcpy +EXPORT_SYMBOL vmlinux 0x9d80ac23 registered_fb +EXPORT_SYMBOL vmlinux 0x9d82237b ide_dma_off_quietly +EXPORT_SYMBOL vmlinux 0x9da1ffd5 vfs_set_dqblk +EXPORT_SYMBOL vmlinux 0x9da631de neigh_destroy +EXPORT_SYMBOL vmlinux 0x9dd3dccc mdiobus_free +EXPORT_SYMBOL vmlinux 0x9e0697ec names_cachep +EXPORT_SYMBOL vmlinux 0x9e120414 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e45d8fe phy_print_status +EXPORT_SYMBOL vmlinux 0x9e89ff26 simple_write_begin +EXPORT_SYMBOL vmlinux 0x9e97375d rtas_busy_delay_time +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea26c4c down_write_trylock +EXPORT_SYMBOL vmlinux 0x9ea95a5a sk_filter +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9eecde16 do_brk +EXPORT_SYMBOL vmlinux 0x9f100139 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x9f180163 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x9f18e794 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f2d613e param_set_bool +EXPORT_SYMBOL vmlinux 0x9f3f2aea blk_unplug +EXPORT_SYMBOL vmlinux 0x9f72c2eb init_timer_key +EXPORT_SYMBOL vmlinux 0x9f81776e proc_mkdir +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fa325c0 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fe6fa56 ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0xa024ffa5 __sg_free_table +EXPORT_SYMBOL vmlinux 0xa033d05a up_read +EXPORT_SYMBOL vmlinux 0xa03523d5 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa05e5c0a genphy_config_aneg +EXPORT_SYMBOL vmlinux 0xa064c89a d_validate +EXPORT_SYMBOL vmlinux 0xa07a8d22 sleep_on +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0c429c7 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa13798f8 printk_ratelimit +EXPORT_SYMBOL vmlinux 0xa17f61e9 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xa19ca792 __kfifo_put +EXPORT_SYMBOL vmlinux 0xa1b5cd95 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1d2a64d nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xa1e86b38 pci_map_rom +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa218bf61 complete +EXPORT_SYMBOL vmlinux 0xa2786589 dev_unicast_unsync +EXPORT_SYMBOL vmlinux 0xa27ad4a6 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0xa29b1708 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2a78830 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xa2bbed37 crash_shutdown_register +EXPORT_SYMBOL vmlinux 0xa2c38a2d inet_getname +EXPORT_SYMBOL vmlinux 0xa2ddeda2 inode_set_bytes +EXPORT_SYMBOL vmlinux 0xa31caaf8 scsi_device_get +EXPORT_SYMBOL vmlinux 0xa3235eca pci_get_slot +EXPORT_SYMBOL vmlinux 0xa329f07e register_shrinker +EXPORT_SYMBOL vmlinux 0xa32e2d81 get_unmapped_area_prot +EXPORT_SYMBOL vmlinux 0xa332cdd1 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa351d87f blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xa35b585c security_inode_permission +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3706790 posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xa38e691a ioremap_bot +EXPORT_SYMBOL vmlinux 0xa39b4cf2 udelay +EXPORT_SYMBOL vmlinux 0xa3c91480 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xa3dfb5fc dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0xa3e75545 flush_tlb_kernel_range +EXPORT_SYMBOL vmlinux 0xa4055917 do_munmap +EXPORT_SYMBOL vmlinux 0xa4156eb0 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0xa42b2e5a scsi_is_target_device +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa44d17fa sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xa452f6cd vfs_quota_sync +EXPORT_SYMBOL vmlinux 0xa4810e91 pci_remove_bus_device +EXPORT_SYMBOL vmlinux 0xa48b309a bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xa495c8bf ethtool_op_set_sg +EXPORT_SYMBOL vmlinux 0xa4a80f24 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4fd4613 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0xa4ffbff1 pagecache_write_end +EXPORT_SYMBOL vmlinux 0xa513d51e cfb_fillrect +EXPORT_SYMBOL vmlinux 0xa534ed31 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xa55564e0 tty_set_operations +EXPORT_SYMBOL vmlinux 0xa55d9db9 serio_unregister_port +EXPORT_SYMBOL vmlinux 0xa567a325 request_key +EXPORT_SYMBOL vmlinux 0xa5752c79 __blk_end_request +EXPORT_SYMBOL vmlinux 0xa5769b6a may_umount_tree +EXPORT_SYMBOL vmlinux 0xa576c263 generic_find_next_le_bit +EXPORT_SYMBOL vmlinux 0xa57d3640 set_binfmt +EXPORT_SYMBOL vmlinux 0xa5808bbf tasklet_init +EXPORT_SYMBOL vmlinux 0xa58a2da3 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0xa58b6804 nla_parse +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5b00659 ppc_proc_freq +EXPORT_SYMBOL vmlinux 0xa5b600c7 check_disk_size_change +EXPORT_SYMBOL vmlinux 0xa5c816e6 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0xa5cef8ad release_resource +EXPORT_SYMBOL vmlinux 0xa60251ed scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xa607f310 d_prune_aliases +EXPORT_SYMBOL vmlinux 0xa62561f4 kill_pid +EXPORT_SYMBOL vmlinux 0xa64001b4 nla_put +EXPORT_SYMBOL vmlinux 0xa65972b8 _memcpy_toio +EXPORT_SYMBOL vmlinux 0xa68124fa hweight8 +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa68e94d1 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0xa692b908 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xa6dcc773 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa6f2a131 scsi_finish_command +EXPORT_SYMBOL vmlinux 0xa6f6946f generic_error_remove_page +EXPORT_SYMBOL vmlinux 0xa74d6add key_type_keyring +EXPORT_SYMBOL vmlinux 0xa76aa2a7 ps2_end_command +EXPORT_SYMBOL vmlinux 0xa7868fbc skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xa78bac05 clear_inode +EXPORT_SYMBOL vmlinux 0xa79c8fc6 neigh_parms_release +EXPORT_SYMBOL vmlinux 0xa79d722c ip_defrag +EXPORT_SYMBOL vmlinux 0xa79f8f05 iget_locked +EXPORT_SYMBOL vmlinux 0xa7a16f0d ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xa7a58176 seq_lseek +EXPORT_SYMBOL vmlinux 0xa7c194f8 netpoll_print_options +EXPORT_SYMBOL vmlinux 0xa7deaafc pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xa7fa07b3 ps2_begin_command +EXPORT_SYMBOL vmlinux 0xa8065dc2 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xa84b3eab udp_sendmsg +EXPORT_SYMBOL vmlinux 0xa84e9ed0 dquot_commit_info +EXPORT_SYMBOL vmlinux 0xa861ab6e __ioremap +EXPORT_SYMBOL vmlinux 0xa868d0ed ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xa87652a9 default_llseek +EXPORT_SYMBOL vmlinux 0xa877e305 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xa87b7170 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xa89464b7 __ashldi3 +EXPORT_SYMBOL vmlinux 0xa8ac4d52 copy_io_context +EXPORT_SYMBOL vmlinux 0xa8c6fa13 simple_pin_fs +EXPORT_SYMBOL vmlinux 0xa8e29777 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa90ded58 put_disk +EXPORT_SYMBOL vmlinux 0xa92086c8 netif_receive_skb +EXPORT_SYMBOL vmlinux 0xa928ea10 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0xa9317e49 kmem_cache_create +EXPORT_SYMBOL vmlinux 0xa949fd69 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0xa9571d6d DMA_MODE_WRITE +EXPORT_SYMBOL vmlinux 0xa9741301 of_gpio_count +EXPORT_SYMBOL vmlinux 0xa99b626b vfs_dq_transfer +EXPORT_SYMBOL vmlinux 0xa9a09b23 journal_set_features +EXPORT_SYMBOL vmlinux 0xa9ea766c scsi_remove_device +EXPORT_SYMBOL vmlinux 0xa9f1ed23 bit_waitqueue +EXPORT_SYMBOL vmlinux 0xa9fe79fd tcp_shutdown +EXPORT_SYMBOL vmlinux 0xaa06fb50 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xaa137ca1 do_SAK +EXPORT_SYMBOL vmlinux 0xaa1a559e sock_wmalloc +EXPORT_SYMBOL vmlinux 0xaa28204b netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0xaa2bb2dc devm_free_irq +EXPORT_SYMBOL vmlinux 0xaa38a391 rtc_dev_update_irq_enable_emul +EXPORT_SYMBOL vmlinux 0xaa3bd92f __break_lease +EXPORT_SYMBOL vmlinux 0xaa444fb0 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0xaa4afcf5 dev_get_flags +EXPORT_SYMBOL vmlinux 0xaa4df512 pmu_batteries +EXPORT_SYMBOL vmlinux 0xaa5897a5 ip_dev_find +EXPORT_SYMBOL vmlinux 0xaab80b12 tty_port_close +EXPORT_SYMBOL vmlinux 0xaac54a5e dmam_pool_create +EXPORT_SYMBOL vmlinux 0xaaf9bfbb pci_request_regions +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab1e3b9b neigh_update +EXPORT_SYMBOL vmlinux 0xab4218ca netlink_dump_start +EXPORT_SYMBOL vmlinux 0xab53b0a8 mempool_alloc +EXPORT_SYMBOL vmlinux 0xab6d5b32 remove_arg_zero +EXPORT_SYMBOL vmlinux 0xab73c498 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0xab8efe77 phy_disable_interrupts +EXPORT_SYMBOL vmlinux 0xaba367ee vfs_read +EXPORT_SYMBOL vmlinux 0xabb94ed8 bd_claim +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd3c00d redraw_screen +EXPORT_SYMBOL vmlinux 0xabd47787 down_killable +EXPORT_SYMBOL vmlinux 0xabd8e427 matroxfb_var2my +EXPORT_SYMBOL vmlinux 0xac02271b skb_store_bits +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac0d964c neigh_table_init_no_netlink +EXPORT_SYMBOL vmlinux 0xac3c5f65 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xac54fc9f mempool_destroy +EXPORT_SYMBOL vmlinux 0xac5f113d cpu_all_bits +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xacbda6ce dev_disable_lro +EXPORT_SYMBOL vmlinux 0xacc6aff0 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0xacca9176 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xaccd84db sysctl_string +EXPORT_SYMBOL vmlinux 0xacdeb154 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xace90565 pci_get_bus_and_slot +EXPORT_SYMBOL vmlinux 0xacee5e2e console_stop +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad1aadbb inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0xad1d3762 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0xad3afde8 register_gifconf +EXPORT_SYMBOL vmlinux 0xad473d37 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xad5c9cd0 journal_destroy +EXPORT_SYMBOL vmlinux 0xad662b8d bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0xad715dc0 dquot_alloc +EXPORT_SYMBOL vmlinux 0xad7fccff vfs_quota_enable +EXPORT_SYMBOL vmlinux 0xad830784 giveup_fpu +EXPORT_SYMBOL vmlinux 0xad962823 serio_close +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadb792c2 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0xadcdf548 pci_bus_type +EXPORT_SYMBOL vmlinux 0xadd1e971 alignment_exception +EXPORT_SYMBOL vmlinux 0xadd397ee find_vma +EXPORT_SYMBOL vmlinux 0xaddd4770 __debugger_iabr_match +EXPORT_SYMBOL vmlinux 0xadf29f36 inet_add_protocol +EXPORT_SYMBOL vmlinux 0xadf42bd5 __request_region +EXPORT_SYMBOL vmlinux 0xae0bcaf3 filp_open +EXPORT_SYMBOL vmlinux 0xae10ae9f gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0xae395308 per_cpu__vm_event_states +EXPORT_SYMBOL vmlinux 0xae8113d5 ide_dump_status +EXPORT_SYMBOL vmlinux 0xae8a3a9d hippi_change_mtu +EXPORT_SYMBOL vmlinux 0xae969a39 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaece509b unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xaed013b9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0xaf024986 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xaf17ae5e pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf4dd51b matrox_mystique +EXPORT_SYMBOL vmlinux 0xaf72e96d mdio_bus_type +EXPORT_SYMBOL vmlinux 0xafb34c13 dev_getbyhwaddr +EXPORT_SYMBOL vmlinux 0xafbacadb tcf_hash_release +EXPORT_SYMBOL vmlinux 0xafda84c8 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xaffb4cae elv_rb_find +EXPORT_SYMBOL vmlinux 0xb00f59b1 pci_match_id +EXPORT_SYMBOL vmlinux 0xb029272a blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xb0558ce1 set_device_ro +EXPORT_SYMBOL vmlinux 0xb083c92e task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0xb0852941 nf_register_hooks +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c909bb swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0xb0d31188 unlock_rename +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0e81815 cdev_add +EXPORT_SYMBOL vmlinux 0xb10148b7 key_task_permission +EXPORT_SYMBOL vmlinux 0xb12c2c5b get_sb_nodev +EXPORT_SYMBOL vmlinux 0xb146b5b4 tcp_read_sock +EXPORT_SYMBOL vmlinux 0xb14fc3f9 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0xb15bd8fa tb_ticks_per_sec +EXPORT_SYMBOL vmlinux 0xb165c33b unmap_mapping_range +EXPORT_SYMBOL vmlinux 0xb1829c7c tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0xb1850e10 register_sysrq_key +EXPORT_SYMBOL vmlinux 0xb18e6eb9 skb_push +EXPORT_SYMBOL vmlinux 0xb18f3f06 ide_xfer_verbose +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1e0d610 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0xb1fa4b90 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xb1fbf28d phy_attach_direct +EXPORT_SYMBOL vmlinux 0xb2002873 fb_show_logo +EXPORT_SYMBOL vmlinux 0xb224fbe2 param_get_short +EXPORT_SYMBOL vmlinux 0xb22fe6a3 netdev_increment_features +EXPORT_SYMBOL vmlinux 0xb233762c atomic64_set +EXPORT_SYMBOL vmlinux 0xb26644f3 elevator_exit +EXPORT_SYMBOL vmlinux 0xb2668bcd seq_puts +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb268d240 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0xb2865ef3 km_new_mapping +EXPORT_SYMBOL vmlinux 0xb2999add scsi_release_buffers +EXPORT_SYMBOL vmlinux 0xb29d0544 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0xb2afd922 set_disk_ro +EXPORT_SYMBOL vmlinux 0xb2c2ff3e zero_fill_bio +EXPORT_SYMBOL vmlinux 0xb2d72cc7 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0xb2dd343f generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xb2edb6fd __destroy_inode +EXPORT_SYMBOL vmlinux 0xb2f61a45 ps2_handle_response +EXPORT_SYMBOL vmlinux 0xb32168b0 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0xb3258428 security_path_link +EXPORT_SYMBOL vmlinux 0xb3385e54 inode_permission +EXPORT_SYMBOL vmlinux 0xb376d79d radix_tree_tagged +EXPORT_SYMBOL vmlinux 0xb38755ae neigh_ifdown +EXPORT_SYMBOL vmlinux 0xb396dc77 register_netdevice +EXPORT_SYMBOL vmlinux 0xb3a307c6 si_meminfo +EXPORT_SYMBOL vmlinux 0xb3f8b7fe kobject_add +EXPORT_SYMBOL vmlinux 0xb405fe57 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0xb4155b36 of_find_matching_node +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb42453d3 param_get_invbool +EXPORT_SYMBOL vmlinux 0xb426c0fe read_cache_page_async +EXPORT_SYMBOL vmlinux 0xb432760a ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xb436ffa3 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0xb43d4285 block_invalidatepage +EXPORT_SYMBOL vmlinux 0xb43ed607 do_truncate +EXPORT_SYMBOL vmlinux 0xb45e57f9 blk_recount_segments +EXPORT_SYMBOL vmlinux 0xb467b6ac pci_pme_active +EXPORT_SYMBOL vmlinux 0xb46aaa7f ide_proc_unregister_driver +EXPORT_SYMBOL vmlinux 0xb46d3c1c skb_insert +EXPORT_SYMBOL vmlinux 0xb46dc84a jbd2_journal_release_buffer +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4862fe3 vfs_get_dqblk +EXPORT_SYMBOL vmlinux 0xb48be8cd bmap +EXPORT_SYMBOL vmlinux 0xb4abf99e scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xb4c21925 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0xb4daddbe vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xb4dd791d seq_open +EXPORT_SYMBOL vmlinux 0xb4f18e68 sk_free +EXPORT_SYMBOL vmlinux 0xb5044271 vsscanf +EXPORT_SYMBOL vmlinux 0xb50c6a71 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0xb522cc1a bdi_register_dev +EXPORT_SYMBOL vmlinux 0xb53a4336 kmap_pte +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb551caf2 hippi_mac_addr +EXPORT_SYMBOL vmlinux 0xb569f5f7 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5a7bb85 install_exec_creds +EXPORT_SYMBOL vmlinux 0xb5c082c3 netpoll_poll +EXPORT_SYMBOL vmlinux 0xb5db58f6 log_wait_commit +EXPORT_SYMBOL vmlinux 0xb6074e76 get_pci_dma_ops +EXPORT_SYMBOL vmlinux 0xb631a7e7 scsi_host_get +EXPORT_SYMBOL vmlinux 0xb6599b9a machine_check_exception +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb67ed56f make_bad_inode +EXPORT_SYMBOL vmlinux 0xb68121e7 genl_register_ops +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6bbba96 phy_device_register +EXPORT_SYMBOL vmlinux 0xb6bca9fe sock_rfree +EXPORT_SYMBOL vmlinux 0xb6be40d5 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0xb6bffb99 kstat_irqs_cpu +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6c70a7d __wake_up +EXPORT_SYMBOL vmlinux 0xb6e9b589 dm_table_event +EXPORT_SYMBOL vmlinux 0xb6f5765d pci_device_to_OF_node +EXPORT_SYMBOL vmlinux 0xb6f77b30 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0xb703911e release_firmware +EXPORT_SYMBOL vmlinux 0xb753bcc8 __ashrdi3 +EXPORT_SYMBOL vmlinux 0xb798b8e4 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0xb7a7acbc elv_queue_empty +EXPORT_SYMBOL vmlinux 0xb7a880d9 skb_pull +EXPORT_SYMBOL vmlinux 0xb7ad3321 ida_init +EXPORT_SYMBOL vmlinux 0xb7b2f38b block_commit_write +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7c19203 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0xb7ccb3c7 twl4030_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xb7d5c2c9 inet_stream_connect +EXPORT_SYMBOL vmlinux 0xb7fadbac block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xb8046f20 lock_may_read +EXPORT_SYMBOL vmlinux 0xb80bc864 rtnl_create_link +EXPORT_SYMBOL vmlinux 0xb80d5f6f ilookup +EXPORT_SYMBOL vmlinux 0xb814a293 tcf_exts_change +EXPORT_SYMBOL vmlinux 0xb818773b __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xb86e4ab9 random32 +EXPORT_SYMBOL vmlinux 0xb8861c63 dm_table_get +EXPORT_SYMBOL vmlinux 0xb89af9bf srandom32 +EXPORT_SYMBOL vmlinux 0xb8aa2342 __check_region +EXPORT_SYMBOL vmlinux 0xb8b3be35 fb_set_var +EXPORT_SYMBOL vmlinux 0xb8d42c0c page_readlink +EXPORT_SYMBOL vmlinux 0xb92bce74 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0xb979bb0d file_permission +EXPORT_SYMBOL vmlinux 0xb97d4c9c mutex_lock +EXPORT_SYMBOL vmlinux 0xb97f1c94 phy_start +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb98ef804 vm_stat +EXPORT_SYMBOL vmlinux 0xb9a1927d pci_select_bars +EXPORT_SYMBOL vmlinux 0xb9aee30c kernel_bind +EXPORT_SYMBOL vmlinux 0xb9f72a2c unregister_binfmt +EXPORT_SYMBOL vmlinux 0xba22888d unregister_key_type +EXPORT_SYMBOL vmlinux 0xba2a247c cdrom_media_changed +EXPORT_SYMBOL vmlinux 0xba311113 security_file_permission +EXPORT_SYMBOL vmlinux 0xba3de4fb __insert_inode_hash +EXPORT_SYMBOL vmlinux 0xba48cb1b skb_over_panic +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba4f1aa1 km_report +EXPORT_SYMBOL vmlinux 0xba86dffb i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xba88220c invalidate_inodes +EXPORT_SYMBOL vmlinux 0xba8f8b68 completion_done +EXPORT_SYMBOL vmlinux 0xbaaab8ae timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xbaeb3be9 bio_put +EXPORT_SYMBOL vmlinux 0xbb0486d9 complete_request_key +EXPORT_SYMBOL vmlinux 0xbb167766 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb2dd598 dquot_alloc_space +EXPORT_SYMBOL vmlinux 0xbb3b12d6 slow_work_register_user +EXPORT_SYMBOL vmlinux 0xbb3bbf80 blk_make_request +EXPORT_SYMBOL vmlinux 0xbb448ec2 call_usermodehelper_setcleanup +EXPORT_SYMBOL vmlinux 0xbb57129e block_read_full_page +EXPORT_SYMBOL vmlinux 0xbb5b3826 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb623a4a scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xbb7ca69e vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xbb8c00aa sk_dst_check +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbbfee326 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0xbc11c5c4 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xbc316de4 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0xbc4b5900 dev_add_pack +EXPORT_SYMBOL vmlinux 0xbc4c377e dm_table_get_size +EXPORT_SYMBOL vmlinux 0xbc84e86f lro_flush_pkt +EXPORT_SYMBOL vmlinux 0xbc9307b3 blk_put_request +EXPORT_SYMBOL vmlinux 0xbc9a470e skb_queue_purge +EXPORT_SYMBOL vmlinux 0xbca34d35 __page_symlink +EXPORT_SYMBOL vmlinux 0xbcb62660 path_get +EXPORT_SYMBOL vmlinux 0xbcc29627 tty_port_close_end +EXPORT_SYMBOL vmlinux 0xbcfdb0b2 inet_del_protocol +EXPORT_SYMBOL vmlinux 0xbd309ca1 inet_put_port +EXPORT_SYMBOL vmlinux 0xbd3ecaa4 read_cache_pages +EXPORT_SYMBOL vmlinux 0xbd59da98 alloc_etherdev_mq +EXPORT_SYMBOL vmlinux 0xbd673390 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0xbd7448fd __free_pages +EXPORT_SYMBOL vmlinux 0xbd8d541d flush_hash_pages +EXPORT_SYMBOL vmlinux 0xbd9e5d49 __lshrdi3 +EXPORT_SYMBOL vmlinux 0xbda78965 inode_add_bytes +EXPORT_SYMBOL vmlinux 0xbda81a0b sock_kfree_s +EXPORT_SYMBOL vmlinux 0xbdb90334 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0xbdf5c25c rb_next +EXPORT_SYMBOL vmlinux 0xbe054576 elv_add_request +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe141e47 i2c_bit_add_numbered_bus +EXPORT_SYMBOL vmlinux 0xbe63ee40 request_resource +EXPORT_SYMBOL vmlinux 0xbe713b44 mpage_writepage +EXPORT_SYMBOL vmlinux 0xbe764c88 mdiobus_read +EXPORT_SYMBOL vmlinux 0xbe82e72d xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xbe860c6b blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xbe88af64 pci_request_region +EXPORT_SYMBOL vmlinux 0xbebaaf7e update_region +EXPORT_SYMBOL vmlinux 0xbeced953 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf22b541 stop_tty +EXPORT_SYMBOL vmlinux 0xbf2434ce neigh_changeaddr +EXPORT_SYMBOL vmlinux 0xbf340dd6 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xbf466830 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0xbf4ac0b6 simple_sync_file +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf868f1d soft_cursor +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfc95788 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0xbfd16f80 aio_put_req +EXPORT_SYMBOL vmlinux 0xbfe55d3d tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0xbfe77b52 fb_class +EXPORT_SYMBOL vmlinux 0xbff83103 flush_tlb_mm +EXPORT_SYMBOL vmlinux 0xc00cea1c macio_dev_get +EXPORT_SYMBOL vmlinux 0xc0580937 rb_erase +EXPORT_SYMBOL vmlinux 0xc090ce11 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0xc0911d9c xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0acd0c0 thaw_process +EXPORT_SYMBOL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL vmlinux 0xc0d60374 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0xc0d815f5 up_write +EXPORT_SYMBOL vmlinux 0xc0d84ced cuda_poll +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc125dd0b inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xc13a7695 get_disk +EXPORT_SYMBOL vmlinux 0xc15e073c generic_find_next_zero_le_bit +EXPORT_SYMBOL vmlinux 0xc19e1e7d sk_reset_timer +EXPORT_SYMBOL vmlinux 0xc1c2555d do_splice_to +EXPORT_SYMBOL vmlinux 0xc1ccbba5 sock_recvmsg +EXPORT_SYMBOL vmlinux 0xc1d7d8a0 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xc1dd4a7f adb_request +EXPORT_SYMBOL vmlinux 0xc2521701 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc279b7af dquot_initialize +EXPORT_SYMBOL vmlinux 0xc28de2bc pneigh_lookup +EXPORT_SYMBOL vmlinux 0xc294a01b of_device_is_available +EXPORT_SYMBOL vmlinux 0xc2d51f33 sock_wake_async +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc31f6f7a inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0xc33a9f74 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0xc34ad03d sock_no_getname +EXPORT_SYMBOL vmlinux 0xc368849f nvram_sync +EXPORT_SYMBOL vmlinux 0xc3ad6e45 ps2_init +EXPORT_SYMBOL vmlinux 0xc3c19d02 seq_putc +EXPORT_SYMBOL vmlinux 0xc3cf1128 in_group_p +EXPORT_SYMBOL vmlinux 0xc3de279e bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0xc3f9f1df sb_set_blocksize +EXPORT_SYMBOL vmlinux 0xc40361b7 vfs_readv +EXPORT_SYMBOL vmlinux 0xc40d7fc8 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0xc426e665 pagevec_lookup +EXPORT_SYMBOL vmlinux 0xc437a22e dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0xc458b2ea gen_pool_add +EXPORT_SYMBOL vmlinux 0xc476b535 elv_rb_add +EXPORT_SYMBOL vmlinux 0xc4924efe kunmap_high +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc50069ea vfs_getattr +EXPORT_SYMBOL vmlinux 0xc504ae0c get_sb_pseudo +EXPORT_SYMBOL vmlinux 0xc52a6a4c netlink_broadcast +EXPORT_SYMBOL vmlinux 0xc52f5714 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0xc5449071 generic_listxattr +EXPORT_SYMBOL vmlinux 0xc550b98c is_bad_inode +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc575771e sg_free_table +EXPORT_SYMBOL vmlinux 0xc5a119df vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0xc5a8abca bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0xc5cdb865 eth_type_trans +EXPORT_SYMBOL vmlinux 0xc5d93583 per_cpu____irq_regs +EXPORT_SYMBOL vmlinux 0xc6184045 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xc633495b schedule_work +EXPORT_SYMBOL vmlinux 0xc6aa316d qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xc6e0e167 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xc6eddc3a mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xc7131591 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0xc7167b5d journal_force_commit +EXPORT_SYMBOL vmlinux 0xc722227e posix_acl_clone +EXPORT_SYMBOL vmlinux 0xc74e7932 simple_release_fs +EXPORT_SYMBOL vmlinux 0xc7750568 neigh_compat_output +EXPORT_SYMBOL vmlinux 0xc77ca581 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xc78b673a jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a0b037 bdi_unregister +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7a94083 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0xc7aec663 dev_set_mtu +EXPORT_SYMBOL vmlinux 0xc7bbf834 bio_init +EXPORT_SYMBOL vmlinux 0xc7c788e9 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xc7c7dc1c of_get_property +EXPORT_SYMBOL vmlinux 0xc7ca888a pci_clear_mwi +EXPORT_SYMBOL vmlinux 0xc7cb0fe2 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0xc7d37b5e nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc7f8874b seq_escape +EXPORT_SYMBOL vmlinux 0xc802867e generic_file_llseek +EXPORT_SYMBOL vmlinux 0xc823237c scsi_print_command +EXPORT_SYMBOL vmlinux 0xc82995f4 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0xc8a2e989 pid_task +EXPORT_SYMBOL vmlinux 0xc8a60fa5 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8c11f6a ipv4_specific +EXPORT_SYMBOL vmlinux 0xc8c28e3c xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xc8ee7c19 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xc8f8fa99 tcp_v4_md5_do_add +EXPORT_SYMBOL vmlinux 0xc9242666 mod_timer +EXPORT_SYMBOL vmlinux 0xc940adb5 nf_log_unregister +EXPORT_SYMBOL vmlinux 0xc94ea8b2 fb_pan_display +EXPORT_SYMBOL vmlinux 0xc95311aa xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xc9923d00 kfree_skb +EXPORT_SYMBOL vmlinux 0xc998d641 icmp_err_convert +EXPORT_SYMBOL vmlinux 0xc9ac5f9a redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0xc9bd7b37 dev_mc_delete +EXPORT_SYMBOL vmlinux 0xc9c37087 skb_queue_head +EXPORT_SYMBOL vmlinux 0xc9cc0d78 netif_device_attach +EXPORT_SYMBOL vmlinux 0xc9d7bd80 unregister_filesystem +EXPORT_SYMBOL vmlinux 0xc9fc1902 pci_scan_slot +EXPORT_SYMBOL vmlinux 0xca2bb7c5 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xca56136b __tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca60811e end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xca7c3c0d tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xca825895 pmu_suspend +EXPORT_SYMBOL vmlinux 0xca849928 module_put +EXPORT_SYMBOL vmlinux 0xca8ff8f4 log_start_commit +EXPORT_SYMBOL vmlinux 0xca9e4d19 f_setown +EXPORT_SYMBOL vmlinux 0xcaa46622 file_update_time +EXPORT_SYMBOL vmlinux 0xcacd272d atomic64_sub_return +EXPORT_SYMBOL vmlinux 0xcae1ab93 of_dev_put +EXPORT_SYMBOL vmlinux 0xcae91c87 __scsi_put_command +EXPORT_SYMBOL vmlinux 0xcaf09f19 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0xcb1e5a1c mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0xcb6beb40 hweight32 +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcba33c84 set_user_nice +EXPORT_SYMBOL vmlinux 0xcbbfab35 set_security_override +EXPORT_SYMBOL vmlinux 0xcbc29f4e gen_new_estimator +EXPORT_SYMBOL vmlinux 0xcbf87dc9 ethtool_op_get_tso +EXPORT_SYMBOL vmlinux 0xcc09ddac tcp_v4_remember_stamp +EXPORT_SYMBOL vmlinux 0xcc2eeb41 __ide_dma_bad_drive +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc467dff input_unregister_device +EXPORT_SYMBOL vmlinux 0xcc4da083 g450_mnp2f +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc682155 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8de7ba sk_run_filter +EXPORT_SYMBOL vmlinux 0xccc73cf6 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0xccc74a73 tty_hangup +EXPORT_SYMBOL vmlinux 0xccf3269d scm_fp_dup +EXPORT_SYMBOL vmlinux 0xcd157f8d __lock_page +EXPORT_SYMBOL vmlinux 0xcd3b125f tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xcd4ec6fd tc_classify +EXPORT_SYMBOL vmlinux 0xcd6b5226 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xcd77a1c2 pci_iounmap +EXPORT_SYMBOL vmlinux 0xcd8f1e73 scsi_scan_target +EXPORT_SYMBOL vmlinux 0xcdd36a81 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0xcddfe591 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0xcdedc4b8 scsi_dma_map +EXPORT_SYMBOL vmlinux 0xce2518c9 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0xce2edc39 nf_log_register +EXPORT_SYMBOL vmlinux 0xce36ded6 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0xce409cda pmac_set_early_video_resume +EXPORT_SYMBOL vmlinux 0xce45a232 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce5f33e7 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0xce7377a9 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0xceda2c28 generic_getxattr +EXPORT_SYMBOL vmlinux 0xceefb41b blk_peek_request +EXPORT_SYMBOL vmlinux 0xcf3da1c7 dev_mc_add +EXPORT_SYMBOL vmlinux 0xcf47d76f vfs_write +EXPORT_SYMBOL vmlinux 0xcf532ceb scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0xcf5ac294 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0xcf735e18 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0xcf901697 __strnlen_user +EXPORT_SYMBOL vmlinux 0xcf9f741c fb_set_cmap +EXPORT_SYMBOL vmlinux 0xcfb9006e jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0xcfc51b8c vc_resize +EXPORT_SYMBOL vmlinux 0xcfc74bba netlink_kernel_release +EXPORT_SYMBOL vmlinux 0xcfe4e887 lock_sock_nested +EXPORT_SYMBOL vmlinux 0xcff23fbe pci_set_mwi +EXPORT_SYMBOL vmlinux 0xcff53400 kref_put +EXPORT_SYMBOL vmlinux 0xd00652f3 timecompare_offset +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd02d6e5c page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0xd0441b2c dev_driver_string +EXPORT_SYMBOL vmlinux 0xd044b7e0 close_bdev_exclusive +EXPORT_SYMBOL vmlinux 0xd04e731e per_cpu__kstat +EXPORT_SYMBOL vmlinux 0xd0a0c5a6 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0xd0a45fa5 pmu_enable_irled +EXPORT_SYMBOL vmlinux 0xd0b1466a backlight_device_register +EXPORT_SYMBOL vmlinux 0xd0bd5a6d tcp4_gro_receive +EXPORT_SYMBOL vmlinux 0xd0c6df4e journal_ack_err +EXPORT_SYMBOL vmlinux 0xd0ec3360 neigh_table_init +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0fd4d89 skb_seq_read +EXPORT_SYMBOL vmlinux 0xd10ee360 tcp_v4_md5_do_del +EXPORT_SYMBOL vmlinux 0xd10f6230 get_sb_ns +EXPORT_SYMBOL vmlinux 0xd11bbde9 cap_netlink_recv +EXPORT_SYMBOL vmlinux 0xd1262886 rtas_data_buf +EXPORT_SYMBOL vmlinux 0xd12fe5ac proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0xd1447877 __xfrm_lookup +EXPORT_SYMBOL vmlinux 0xd177a363 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0xd17d5c54 simple_rename +EXPORT_SYMBOL vmlinux 0xd1b8a347 llc_set_station_handler +EXPORT_SYMBOL vmlinux 0xd1cb177c qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0xd2076059 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0xd21066bf llc_sap_open +EXPORT_SYMBOL vmlinux 0xd2436db5 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0xd245bf81 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd2745eea sock_no_socketpair +EXPORT_SYMBOL vmlinux 0xd2954760 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0xd2965f6f kthread_should_stop +EXPORT_SYMBOL vmlinux 0xd2b1926e bio_map_user +EXPORT_SYMBOL vmlinux 0xd2de6840 dm_register_target +EXPORT_SYMBOL vmlinux 0xd33a2bbe mdiobus_unregister +EXPORT_SYMBOL vmlinux 0xd33aa38b nobh_truncate_page +EXPORT_SYMBOL vmlinux 0xd3427f73 mempool_create_node +EXPORT_SYMBOL vmlinux 0xd36922f9 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xd36fe43a backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xd379607a dst_discard +EXPORT_SYMBOL vmlinux 0xd3830b4c nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xd409383c pmu_request +EXPORT_SYMBOL vmlinux 0xd40bdada macio_dev_put +EXPORT_SYMBOL vmlinux 0xd4105718 eth_header_cache +EXPORT_SYMBOL vmlinux 0xd418e1c0 adjust_resource +EXPORT_SYMBOL vmlinux 0xd43763d6 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xd445307e d_move +EXPORT_SYMBOL vmlinux 0xd45c3407 fput +EXPORT_SYMBOL vmlinux 0xd4b51148 misc_register +EXPORT_SYMBOL vmlinux 0xd4b753a8 dst_alloc +EXPORT_SYMBOL vmlinux 0xd4bce4e0 of_register_i2c_devices +EXPORT_SYMBOL vmlinux 0xd4bf782b generic_fillattr +EXPORT_SYMBOL vmlinux 0xd4d0fdad __lock_buffer +EXPORT_SYMBOL vmlinux 0xd4f7424a pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xd50018b5 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xd5263820 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xd53c2055 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xd5465a57 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xd54ccb96 skb_dma_unmap +EXPORT_SYMBOL vmlinux 0xd55381ad phy_disconnect +EXPORT_SYMBOL vmlinux 0xd5688a7a radix_tree_insert +EXPORT_SYMBOL vmlinux 0xd5707471 new_inode +EXPORT_SYMBOL vmlinux 0xd57f8789 iommu_num_pages +EXPORT_SYMBOL vmlinux 0xd5a6e632 put_io_context +EXPORT_SYMBOL vmlinux 0xd5b2e52a single_step_exception +EXPORT_SYMBOL vmlinux 0xd5dd55a0 follow_pfn +EXPORT_SYMBOL vmlinux 0xd5e8444a __div64_32 +EXPORT_SYMBOL vmlinux 0xd60907cd tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0xd61c88ec of_device_alloc +EXPORT_SYMBOL vmlinux 0xd627480b strncat +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd6418fef jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xd665f425 __napi_complete +EXPORT_SYMBOL vmlinux 0xd67ecd96 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0xd6812b0a skb_under_panic +EXPORT_SYMBOL vmlinux 0xd69b30e0 atomic64_add_unless +EXPORT_SYMBOL vmlinux 0xd6a0be7a dev_get_drvdata +EXPORT_SYMBOL vmlinux 0xd6a78d08 smp_call_function_single +EXPORT_SYMBOL vmlinux 0xd6af8545 keyring_search +EXPORT_SYMBOL vmlinux 0xd6c458f2 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xd6cd03f7 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xd6e06949 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6f00d1f key_validate +EXPORT_SYMBOL vmlinux 0xd71714c1 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xd71aaf8d request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xd72572ca blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xd76472e2 end_page_writeback +EXPORT_SYMBOL vmlinux 0xd77855f1 bioset_create +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd787e808 pci_device_from_OF_node +EXPORT_SYMBOL vmlinux 0xd78ccf8b neigh_seq_next +EXPORT_SYMBOL vmlinux 0xd790562e mac_find_mode +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7a6841e netif_napi_del +EXPORT_SYMBOL vmlinux 0xd7b69fae idr_find +EXPORT_SYMBOL vmlinux 0xd7f990b0 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0xd81fb6ff ide_stall_queue +EXPORT_SYMBOL vmlinux 0xd8293a1c ethtool_op_set_flags +EXPORT_SYMBOL vmlinux 0xd83791bc nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0xd849a4f6 tcp_proc_register +EXPORT_SYMBOL vmlinux 0xd84e1897 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0xd853736d module_refcount +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a2ab95 in_egroup_p +EXPORT_SYMBOL vmlinux 0xd8ad1d97 nobh_writepage +EXPORT_SYMBOL vmlinux 0xd8bd3fcc block_prepare_write +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8f6c03f matroxfb_g450_setclk +EXPORT_SYMBOL vmlinux 0xd8fd7341 pci_pme_capable +EXPORT_SYMBOL vmlinux 0xd92514ca agp_special_page +EXPORT_SYMBOL vmlinux 0xd943c612 pci_save_state +EXPORT_SYMBOL vmlinux 0xd963a74a flush_delayed_work +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9bac924 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0xd9c241b8 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xd9ce8f0c strnlen +EXPORT_SYMBOL vmlinux 0xd9f26f9e pci_get_class +EXPORT_SYMBOL vmlinux 0xda10f84e write_inode_now +EXPORT_SYMBOL vmlinux 0xda1a7335 kasprintf +EXPORT_SYMBOL vmlinux 0xda39151b km_state_expired +EXPORT_SYMBOL vmlinux 0xda3cb8b1 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xda5e3f68 udp_ioctl +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8b5096 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdaa8875f iunique +EXPORT_SYMBOL vmlinux 0xdac6f2b6 get_sb_single +EXPORT_SYMBOL vmlinux 0xdaccf810 give_up_console +EXPORT_SYMBOL vmlinux 0xdae16900 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xdafdd768 kthread_create +EXPORT_SYMBOL vmlinux 0xdb0828bf of_get_cpu_node +EXPORT_SYMBOL vmlinux 0xdb217a7b tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0xdb4c88b4 groups_alloc +EXPORT_SYMBOL vmlinux 0xdb704515 pmac_suspend_agp_for_card +EXPORT_SYMBOL vmlinux 0xdb7e0ab3 generic_permission +EXPORT_SYMBOL vmlinux 0xdb7ee236 of_find_property +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdb97dad9 commit_creds +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbed2133 invalidate_bdev +EXPORT_SYMBOL vmlinux 0xdbfb9822 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0xdbfd7614 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0xdc032032 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc053205 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xdc12aa95 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc43a9c8 daemonize +EXPORT_SYMBOL vmlinux 0xdc5a09ba skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0xdc65ea67 lookup_hash +EXPORT_SYMBOL vmlinux 0xdc78f84f ps2_drain +EXPORT_SYMBOL vmlinux 0xdc91b36c dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0xdc9a8823 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0xdc9c644e test_set_page_writeback +EXPORT_SYMBOL vmlinux 0xdca0845b tty_hung_up_p +EXPORT_SYMBOL vmlinux 0xdca0e950 genl_register_family +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcdec510 sk_wait_data +EXPORT_SYMBOL vmlinux 0xdcefb9a5 pmu_resume +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd1c1267 __brelse +EXPORT_SYMBOL vmlinux 0xdd27fa87 memchr +EXPORT_SYMBOL vmlinux 0xdd2d59f9 dm_table_get_md +EXPORT_SYMBOL vmlinux 0xdd40b694 kill_litter_super +EXPORT_SYMBOL vmlinux 0xdd4dc784 d_instantiate +EXPORT_SYMBOL vmlinux 0xdd5ceb70 simple_transaction_get +EXPORT_SYMBOL vmlinux 0xdd6bfccd radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0xdd89a2c3 skb_make_writable +EXPORT_SYMBOL vmlinux 0xdd8c47f6 d_lookup +EXPORT_SYMBOL vmlinux 0xddbaa07d tcp_gro_receive +EXPORT_SYMBOL vmlinux 0xddbb75eb ether_setup +EXPORT_SYMBOL vmlinux 0xddd21f76 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0xddf2dbdf matroxfb_g450_shutdown +EXPORT_SYMBOL vmlinux 0xde1e602d scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xde25a3ea alloc_fcdev +EXPORT_SYMBOL vmlinux 0xde3c68a6 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xde5d047f genphy_config_advert +EXPORT_SYMBOL vmlinux 0xde75b689 set_irq_type +EXPORT_SYMBOL vmlinux 0xde842f22 __ip_select_ident +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdea15616 xfrm_bundle_ok +EXPORT_SYMBOL vmlinux 0xdee075ba gen_pool_free +EXPORT_SYMBOL vmlinux 0xdee1e980 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0xdee9efa2 register_snap_client +EXPORT_SYMBOL vmlinux 0xdf16efc2 vfsmount_lock +EXPORT_SYMBOL vmlinux 0xdf4c8767 ns_to_timeval +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf96b12f invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xdfb458d9 sk_common_release +EXPORT_SYMBOL vmlinux 0xdfbcd942 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0xdff43ed4 __debugger +EXPORT_SYMBOL vmlinux 0xdff56e64 adb_poll +EXPORT_SYMBOL vmlinux 0xdffcdfa0 per_cpu__ftrace_event_seq +EXPORT_SYMBOL vmlinux 0xe00c8f93 vfs_quota_on_mount +EXPORT_SYMBOL vmlinux 0xe0196ce9 kobject_init +EXPORT_SYMBOL vmlinux 0xe028ceb3 serio_interrupt +EXPORT_SYMBOL vmlinux 0xe0520c1a pci_write_vpd +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe07aac3b of_mdiobus_register +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bc24a1 param_set_ushort +EXPORT_SYMBOL vmlinux 0xe0e43e28 netlink_unicast +EXPORT_SYMBOL vmlinux 0xe0ffc03d pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xe110359d input_filter_device +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe11b76b8 llc_add_pack +EXPORT_SYMBOL vmlinux 0xe124ac58 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0xe12ffd11 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xe14fdf48 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xe162268e sync_inode +EXPORT_SYMBOL vmlinux 0xe1689246 dev_addr_del +EXPORT_SYMBOL vmlinux 0xe1692214 bio_map_kern +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe17b537c rtnl_unicast +EXPORT_SYMBOL vmlinux 0xe190303a skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0xe197b45f dquot_commit +EXPORT_SYMBOL vmlinux 0xe1b87229 blk_init_queue +EXPORT_SYMBOL vmlinux 0xe1c17fdd brioctl_set +EXPORT_SYMBOL vmlinux 0xe1efcee5 fifo_set_limit +EXPORT_SYMBOL vmlinux 0xe1fb8579 call_usermodehelper_freeinfo +EXPORT_SYMBOL vmlinux 0xe20cee86 lro_vlan_hwaccel_receive_skb +EXPORT_SYMBOL vmlinux 0xe22a410b truncate_pagecache +EXPORT_SYMBOL vmlinux 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe253d1d0 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xe25620f4 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xe268801a simple_set_mnt +EXPORT_SYMBOL vmlinux 0xe2c284e2 dquot_claim_space +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e0c7c6 __flush_icache_range +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2f0eea1 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe314500e pci_target_state +EXPORT_SYMBOL vmlinux 0xe33c0807 napi_gro_receive +EXPORT_SYMBOL vmlinux 0xe34c2e30 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0xe34db277 cdev_index +EXPORT_SYMBOL vmlinux 0xe358e1b8 generic_ide_ioctl +EXPORT_SYMBOL vmlinux 0xe35d6603 set_blocksize +EXPORT_SYMBOL vmlinux 0xe36b44e4 key_unlink +EXPORT_SYMBOL vmlinux 0xe3c67344 kobject_put +EXPORT_SYMBOL vmlinux 0xe3caba8d tty_free_termios +EXPORT_SYMBOL vmlinux 0xe3db4e20 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0xe3e4c9c8 kernel_accept +EXPORT_SYMBOL vmlinux 0xe4450895 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0xe4482f31 d_rehash +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe49158c3 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xe4a244fd blk_run_queue +EXPORT_SYMBOL vmlinux 0xe4ae52b0 input_flush_device +EXPORT_SYMBOL vmlinux 0xe4ea0414 blk_queue_max_hw_segments +EXPORT_SYMBOL vmlinux 0xe4eb86d1 kset_register +EXPORT_SYMBOL vmlinux 0xe4f1695e cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xe4f9dc12 phy_enable_interrupts +EXPORT_SYMBOL vmlinux 0xe51353b4 vfs_set_dqinfo +EXPORT_SYMBOL vmlinux 0xe522db41 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe54c5c13 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe57bd881 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe59af719 of_device_register +EXPORT_SYMBOL vmlinux 0xe5bf7876 vga_put +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5fbe600 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xe6116318 put_page +EXPORT_SYMBOL vmlinux 0xe61a07bc vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xe62ea556 bio_integrity_free +EXPORT_SYMBOL vmlinux 0xe642a88b udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xe64a2adf __lookup_one_len +EXPORT_SYMBOL vmlinux 0xe6562614 udplite_table +EXPORT_SYMBOL vmlinux 0xe6800966 arp_broken_ops +EXPORT_SYMBOL vmlinux 0xe68425b0 scsi_unregister +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6a9130b insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xe6ac233f bio_integrity_endio +EXPORT_SYMBOL vmlinux 0xe6dd236d clear_pages +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6fae760 bd_set_size +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe714375c __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xe736a470 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0xe74cccc7 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0xe762876c cfb_imageblit +EXPORT_SYMBOL vmlinux 0xe799e12f pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0xe7c02ace swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0xe7ce7439 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0xe7d2aca1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7dc0fb1 register_quota_format +EXPORT_SYMBOL vmlinux 0xe7f4aa30 register_netdev +EXPORT_SYMBOL vmlinux 0xe821a7e4 ethtool_op_set_ufo +EXPORT_SYMBOL vmlinux 0xe86e5fc1 downgrade_write +EXPORT_SYMBOL vmlinux 0xe87300cc mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0xe892cac9 netdev_state_change +EXPORT_SYMBOL vmlinux 0xe8bb59dd scsi_block_requests +EXPORT_SYMBOL vmlinux 0xe8cd902e hweight16 +EXPORT_SYMBOL vmlinux 0xe8d01dd1 fb_validate_mode +EXPORT_SYMBOL vmlinux 0xe8d29653 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xe90dcae0 __request_module +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe944ee8e register_qdisc +EXPORT_SYMBOL vmlinux 0xe94a23c1 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xe95020a7 call_usermodehelper_setkeys +EXPORT_SYMBOL vmlinux 0xe95db611 dev_unicast_add +EXPORT_SYMBOL vmlinux 0xe978283f bio_split +EXPORT_SYMBOL vmlinux 0xe97f59db mpage_readpages +EXPORT_SYMBOL vmlinux 0xe9bac536 neigh_connected_output +EXPORT_SYMBOL vmlinux 0xe9c2ff03 ide_proc_register_driver +EXPORT_SYMBOL vmlinux 0xe9e86dca sock_sendmsg +EXPORT_SYMBOL vmlinux 0xe9ea2d83 search_binary_handler +EXPORT_SYMBOL vmlinux 0xe9ef789d bdevname +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea147363 printk +EXPORT_SYMBOL vmlinux 0xea2d33a2 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0xea65efb5 security_path_rename +EXPORT_SYMBOL vmlinux 0xea6b84ad get_empty_filp +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea858cb5 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xeabf718e sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xeaced3f7 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xeae3466d user_revoke +EXPORT_SYMBOL vmlinux 0xeae9b6fb inode_init_once +EXPORT_SYMBOL vmlinux 0xeb03bce5 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xeb19d111 seq_release +EXPORT_SYMBOL vmlinux 0xeb5fdae2 contig_page_data +EXPORT_SYMBOL vmlinux 0xeb74f730 block_fsync +EXPORT_SYMBOL vmlinux 0xeb850007 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xeb8f54b3 strstrip +EXPORT_SYMBOL vmlinux 0xeb99e8ab ide_wait_stat +EXPORT_SYMBOL vmlinux 0xeba2a1f7 rtas_indicator_present +EXPORT_SYMBOL vmlinux 0xebabd0b7 fail_migrate_page +EXPORT_SYMBOL vmlinux 0xebbf7934 matroxfb_vgaHWrestore +EXPORT_SYMBOL vmlinux 0xebd273a6 strict_strtoull +EXPORT_SYMBOL vmlinux 0xebe36fd8 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0xec0eddfa skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xec1a7f08 unregister_cdrom +EXPORT_SYMBOL vmlinux 0xec3983f0 d_delete +EXPORT_SYMBOL vmlinux 0xec791343 set_create_files_as +EXPORT_SYMBOL vmlinux 0xec794ba0 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0xec820a48 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xec98d719 pci_release_region +EXPORT_SYMBOL vmlinux 0xecc7ee79 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0xecd1067b send_sig +EXPORT_SYMBOL vmlinux 0xece57d5b migrate_page +EXPORT_SYMBOL vmlinux 0xecf31497 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xed0ac053 inet_frag_find +EXPORT_SYMBOL vmlinux 0xed0ae419 __vlan_hwaccel_rx +EXPORT_SYMBOL vmlinux 0xed1853e2 pci_find_capability +EXPORT_SYMBOL vmlinux 0xed41345b poll_initwait +EXPORT_SYMBOL vmlinux 0xed544b10 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xed61d498 pci_disable_msix +EXPORT_SYMBOL vmlinux 0xed81a8d2 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0xed8211bc override_creds +EXPORT_SYMBOL vmlinux 0xed86cecf proto_unregister +EXPORT_SYMBOL vmlinux 0xed8af7b1 get_write_access +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xee0245b3 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xee11b3fd inet_shutdown +EXPORT_SYMBOL vmlinux 0xee1c240d clocksource_register +EXPORT_SYMBOL vmlinux 0xee20aeee find_get_page +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3e1c18 unlock_page +EXPORT_SYMBOL vmlinux 0xee4b9f2f ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0xee4c272e genphy_resume +EXPORT_SYMBOL vmlinux 0xee59412f adb_try_handler_change +EXPORT_SYMBOL vmlinux 0xee8841c0 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xee90884e dq_data_lock +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeabeef3 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xeeae3d64 tcf_action_exec +EXPORT_SYMBOL vmlinux 0xeed4ed2a kill_block_super +EXPORT_SYMBOL vmlinux 0xef018056 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xef0f9dbd skb_tx_hash +EXPORT_SYMBOL vmlinux 0xef21d378 register_key_type +EXPORT_SYMBOL vmlinux 0xef5d737e per_cpu__softnet_data +EXPORT_SYMBOL vmlinux 0xef616cc0 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xef68026c i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xef6ed1ba param_set_invbool +EXPORT_SYMBOL vmlinux 0xef8ba481 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0xefc0b6c0 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xefcdfee5 scsi_init_io +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefde1bbe flush_dcache_range +EXPORT_SYMBOL vmlinux 0xefeb5334 lease_get_mtime +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf010b8df __bforget +EXPORT_SYMBOL vmlinux 0xf01286c9 I_BDEV +EXPORT_SYMBOL vmlinux 0xf0276943 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xf0370931 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf08108bc key_alloc +EXPORT_SYMBOL vmlinux 0xf0a756d7 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0ff36e5 __seq_open_private +EXPORT_SYMBOL vmlinux 0xf0ffa300 prepare_creds +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf13a8987 dm_get_device +EXPORT_SYMBOL vmlinux 0xf13b4db4 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xf13dd920 i2c_transfer +EXPORT_SYMBOL vmlinux 0xf14383b5 free_netdev +EXPORT_SYMBOL vmlinux 0xf174ed48 acquire_console_sem +EXPORT_SYMBOL vmlinux 0xf1792285 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xf17ab983 ip_getsockopt +EXPORT_SYMBOL vmlinux 0xf19008bd del_gendisk +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1972389 fasync_helper +EXPORT_SYMBOL vmlinux 0xf1aedc4b sock_no_mmap +EXPORT_SYMBOL vmlinux 0xf1da11a8 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf21f25da tr_type_trans +EXPORT_SYMBOL vmlinux 0xf224d74c fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0xf235503b tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xf2c596bd destroy_EII_client +EXPORT_SYMBOL vmlinux 0xf2ee1123 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf314ea57 fd_install +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf3698114 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xf397b9aa __tasklet_schedule +EXPORT_SYMBOL vmlinux 0xf39bf4d9 put_cmsg +EXPORT_SYMBOL vmlinux 0xf3ad8ded blk_remove_plug +EXPORT_SYMBOL vmlinux 0xf3bf0252 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3cc8b18 rtas_data_buf_lock +EXPORT_SYMBOL vmlinux 0xf3f1f834 replace_mount_options +EXPORT_SYMBOL vmlinux 0xf4150d8c bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0xf4339b37 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xf4388f8b audit_log_end +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4449388 timer_interrupt +EXPORT_SYMBOL vmlinux 0xf4709676 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xf4726ef6 bio_integrity_split +EXPORT_SYMBOL vmlinux 0xf490fc13 journal_release_buffer +EXPORT_SYMBOL vmlinux 0xf4a1e961 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xf4aebf37 security_path_rmdir +EXPORT_SYMBOL vmlinux 0xf4b0c532 xrlim_allow +EXPORT_SYMBOL vmlinux 0xf4c1c2a6 netlink_ack +EXPORT_SYMBOL vmlinux 0xf4db677b init_special_inode +EXPORT_SYMBOL vmlinux 0xf4e35a07 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0xf4ef8b7c load_nls_default +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f52f93 dqstats +EXPORT_SYMBOL vmlinux 0xf50beccf free_task +EXPORT_SYMBOL vmlinux 0xf510e4a0 input_register_device +EXPORT_SYMBOL vmlinux 0xf51b2f2a insert_inode_locked +EXPORT_SYMBOL vmlinux 0xf51c639f interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xf52321e0 atomic64_sub +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf563677f con_copy_unimap +EXPORT_SYMBOL vmlinux 0xf596c7d6 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0xf5a62ecc _memset_io +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c9012e timespec_trunc +EXPORT_SYMBOL vmlinux 0xf5cf4893 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0xf5e1558d crash_shutdown_unregister +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf61d7a46 block_truncate_page +EXPORT_SYMBOL vmlinux 0xf63572e3 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xf6369bde matroxfb_DAC_out +EXPORT_SYMBOL vmlinux 0xf63d2f8f pci_enable_wake +EXPORT_SYMBOL vmlinux 0xf66ae76c generic_file_llseek_unlocked +EXPORT_SYMBOL vmlinux 0xf66e79b7 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf70384d7 __debugger_sstep +EXPORT_SYMBOL vmlinux 0xf710c28a netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xf71521ba atomic64_add_return +EXPORT_SYMBOL vmlinux 0xf71683b2 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0xf74a839d ppc_md +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf75c6be7 request_key_async +EXPORT_SYMBOL vmlinux 0xf7623914 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0xf77fbb46 idr_remove_all +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf7a2f891 dquot_transfer +EXPORT_SYMBOL vmlinux 0xf7acb770 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0xf7c93865 __dst_free +EXPORT_SYMBOL vmlinux 0xf7e40d6b clear_user_page +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf81bbcec tty_write_room +EXPORT_SYMBOL vmlinux 0xf827acca skb_gro_reset_offset +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf841583c sock_no_accept +EXPORT_SYMBOL vmlinux 0xf843f01a ethtool_op_set_tx_csum +EXPORT_SYMBOL vmlinux 0xf87ae75d vfs_statfs +EXPORT_SYMBOL vmlinux 0xf88cf2dc inet_addr_type +EXPORT_SYMBOL vmlinux 0xf898ed49 mapping_tagged +EXPORT_SYMBOL vmlinux 0xf89e6f17 bio_add_page +EXPORT_SYMBOL vmlinux 0xf8bdf82b matroxfb_enable_irq +EXPORT_SYMBOL vmlinux 0xf8d93cef d_invalidate +EXPORT_SYMBOL vmlinux 0xf8ded2c0 scsi_device_resume +EXPORT_SYMBOL vmlinux 0xf8e300ed alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xf8e569ba xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xf917c74d ethtool_op_get_rx_csum +EXPORT_SYMBOL vmlinux 0xf92135d2 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0xf9264003 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0xf997af35 pci_disable_msi +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9b28bac interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xf9bb28bb ll_rw_block +EXPORT_SYMBOL vmlinux 0xf9c26c50 tcf_register_action +EXPORT_SYMBOL vmlinux 0xfa071e0c blk_complete_request +EXPORT_SYMBOL vmlinux 0xfa24f12f notify_change +EXPORT_SYMBOL vmlinux 0xfa7327f4 lro_vlan_hwaccel_receive_frags +EXPORT_SYMBOL vmlinux 0xfa7d1257 ethtool_op_set_tx_ipv6_csum +EXPORT_SYMBOL vmlinux 0xfa8939dc inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0xfa9dd504 timecompare_transform +EXPORT_SYMBOL vmlinux 0xfaaf6e73 unlock_super +EXPORT_SYMBOL vmlinux 0xfad87494 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xfadb5750 pmu_unlock +EXPORT_SYMBOL vmlinux 0xfadd58cb __nla_reserve +EXPORT_SYMBOL vmlinux 0xfaea0bd3 devm_ioremap_prot +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb09cd60 sock_kmalloc +EXPORT_SYMBOL vmlinux 0xfb0cf2e9 touch_all_softlockup_watchdogs +EXPORT_SYMBOL vmlinux 0xfb1cb90e dcache_dir_close +EXPORT_SYMBOL vmlinux 0xfb2df979 pci_read_vpd +EXPORT_SYMBOL vmlinux 0xfb326a5d down +EXPORT_SYMBOL vmlinux 0xfb58121b __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb87cade __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0xfbb20578 abort_creds +EXPORT_SYMBOL vmlinux 0xfbe27a1c rb_first +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc179f72 skb_dma_map +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc533f85 schedule_work_on +EXPORT_SYMBOL vmlinux 0xfc7c45af blkdev_get +EXPORT_SYMBOL vmlinux 0xfc8e172b input_get_keycode +EXPORT_SYMBOL vmlinux 0xfc8e4aee dev_addr_add +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcaccdcd inode_init_always +EXPORT_SYMBOL vmlinux 0xfcb675f6 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc3bd1c mb_cache_create +EXPORT_SYMBOL vmlinux 0xfcd0a0f2 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xfcda63a3 node_states +EXPORT_SYMBOL vmlinux 0xfcdc0c12 tcp_prot +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcf56a21 ethtool_op_get_ufo +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfcfe00f1 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xfd0c5038 adb_unregister +EXPORT_SYMBOL vmlinux 0xfd1f539e jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0xfd27d668 security_d_instantiate +EXPORT_SYMBOL vmlinux 0xfd59ec81 jbd2_journal_update_format +EXPORT_SYMBOL vmlinux 0xfd6a9eb5 open_by_devnum +EXPORT_SYMBOL vmlinux 0xfd7f3b43 key_revoke +EXPORT_SYMBOL vmlinux 0xfd85684e user_path_at +EXPORT_SYMBOL vmlinux 0xfd894b64 napi_gro_flush +EXPORT_SYMBOL vmlinux 0xfd8dba4c add_wait_queue +EXPORT_SYMBOL vmlinux 0xfda85a7d request_threaded_irq +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdc19a12 simple_empty +EXPORT_SYMBOL vmlinux 0xfdcc1967 dquot_release_reserved_space +EXPORT_SYMBOL vmlinux 0xfdd838c7 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0xfde78cda jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xfded48ed enable_kernel_fp +EXPORT_SYMBOL vmlinux 0xfdf4057e vfs_symlink +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe11f686 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0xfe16775f idr_destroy +EXPORT_SYMBOL vmlinux 0xfe57ff40 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0xfe59c6bc d_alloc_name +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe717d66 aio_complete +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe98bbc5 irq_desc +EXPORT_SYMBOL vmlinux 0xfec3c2f2 bcd2bin +EXPORT_SYMBOL vmlinux 0xfed2d442 DAC1064_global_restore +EXPORT_SYMBOL vmlinux 0xfedd35fc console_suspend_enabled +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1765c7 rtas_call +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff791e64 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0xff7b8f60 pipe_unlock +EXPORT_SYMBOL vmlinux 0xff964b25 param_set_int +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xff9f1499 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffee00ca devm_request_threaded_irq +EXPORT_SYMBOL_GPL crypto/aes_generic 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL crypto/aes_generic 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL crypto/aes_generic 0xac0a5f32 crypto_aes_set_key +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xb016e4d3 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x42989332 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x8f2075c0 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x4db9ad36 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x8e65f12b async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x9202ff33 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xa626f221 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xf8266d27 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x054f9b1a async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x5e3cd0e2 async_xor +EXPORT_SYMBOL_GPL crypto/cryptd 0x2482d449 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x42564f7b cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x4d240f14 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x5058091d cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xb8bfb540 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xbadbf9a6 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xdc75d1a4 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x47bc5aa0 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x0b4a8416 __pata_platform_remove +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0xb90f42f6 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0xea61ecde sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x021307af btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x272dbeba btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x92767e8e btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xa862f429 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xe7f1d446 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xf43f22fc btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0x56a52cec agp_remove_bridge +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL drivers/char/agp/agpgart 0xf8f76e8a agp_add_bridge +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x06278ed9 tpm_show_pcrs +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x080b2eeb tpm_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x1b092328 tpm_write +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x2f614b88 tpm_show_pubek +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3695a5f6 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x3c1f833c tpm_show_active +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x64aae5ba tpm_show_owned +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x6effbef8 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x72d6de7f tpm_pm_suspend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x769a651b tpm_open +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0x881edd24 tpm_gen_interrupt +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xa377cc27 tpm_store_cancel +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xb4d79d17 tpm_show_caps +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xbe7dedfc tpm_register_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc249c389 tpm_remove_hardware +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xd7a4740f tpm_show_enabled +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xda9dce1f tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xdea29840 tpm_pm_resume +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe4acf16e tpm_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe55889f7 tpm_get_timeouts +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xe75ddeb4 tpm_dev_release +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xeef124eb tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL drivers/char/tpm/tpm 0xfafc71d0 tpm_continue_selftest +EXPORT_SYMBOL_GPL drivers/connector/cn 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL drivers/connector/cn 0xcf7a962e cn_add_callback +EXPORT_SYMBOL_GPL drivers/connector/cn 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x09a6b965 edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x10a21b84 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x388250c9 edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x4202ff31 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x4442ef55 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x4bc48383 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5e0b944f edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x60af11c2 edac_mc_handle_ue_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x7800f730 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x78090885 edac_mc_handle_ce_no_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x7bc4aba6 edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x7c9321c3 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8654a272 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x94eb2934 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9ff2c695 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa2ac8c14 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb55aa53b edac_mc_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xbbe08248 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xd2e7b37e edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe56222a0 edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf01764bf edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf304e7ed edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf905c531 edac_mc_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xfc120afb edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x13ff04f1 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x7a789bd6 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x06a9f892 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0835692b hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x12995f60 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2ef58a56 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x335789d0 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x425777dc hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x42caac6b hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x45cf9d88 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5d9eea16 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x611d1b16 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x66b83615 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x673a253a hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x678d92d2 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x936b3ebd hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x93a5bc27 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9906bad8 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa6d521e3 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa7ac2c32 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xab69a1a2 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc9bf7141 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe1cb86d5 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe6c12872 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0xed2cd1bd hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf206340a hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf6b0b8ed __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x3ce7ae41 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x902d68f2 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xd3940a52 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x1b276af1 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x62ad01d5 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0x6c33e494 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xacb939a7 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xbdd95736 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xbf72a57f lis3_dev +EXPORT_SYMBOL_GPL drivers/hwmon/lis3lv02d 0xe6af28c8 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0x432274cc hpsb_config_rom_ip1394_remove +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xa322cd9f hpsb_config_rom_ip1394_add +EXPORT_SYMBOL_GPL drivers/ieee1394/ieee1394 0xec8d18cf hpsb_disable_irm +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0xcfc0fa04 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0a8859c7 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x10dd936d wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x257dd2b3 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x476d5392 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x6bef93ba wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x73da1b31 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x74c7b112 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x783bb322 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xa7459324 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xbafb8e7e wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xcab322bb wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xfa39b530 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x2e7bcc60 wf_unregister_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x34991243 wf_register_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x3bb1456c wf_put_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x3d3f2693 wf_find_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x46ec740b wf_get_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x588caf96 wf_find_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x62af5a36 wf_get_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x75147afa wf_set_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x7e6afcc7 wf_register_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x8d18c682 wf_put_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x94765fac wf_critical_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x9847f6ca wf_unregister_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xa2f19a49 wf_is_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xaf15726f wf_unregister_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xdb7e8499 wf_register_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0xed82a14f wf_clear_overtemp +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x31770bb7 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xe7851569 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x059278d2 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x0f3d1dd0 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x1ce8424f dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x21e0272b dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x237c1816 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x2bb3298c dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x422bfb65 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5678de15 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x62a4fa0f dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x64662925 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x65dabb9f dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7b9b8b4e dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d8f6620 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x83b3586b dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa3cb5438 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa5680685 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc68b5b2f dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xcec802fb dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xdee85f8c dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xee10b969 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf68d64c5 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/md-mod 0x46e3a6c3 md_new_event +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xa34cd7e6 md_allow_write +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xd89653aa sync_page_io +EXPORT_SYMBOL_GPL drivers/md/md-mod 0xdb2e35f2 md_do_sync +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x0b8ef590 raid6_2data_recov +EXPORT_SYMBOL_GPL drivers/md/raid6_pq 0x4a48d81c raid6_datap_recov +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0349c9bd ir_codes_proteus_2309_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x0366dcdf ir_codes_videomate_s350_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x110b053a ir_codes_pixelview_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x124cb753 ir_codes_encore_enltv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x183fdfdd ir_codes_gotview7135_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19b4d61c ir_codes_nebula_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x19cd2826 ir_codes_behold_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1a9009d6 ir_codes_dm1105_nec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x1cb148f5 ir_extract_bits +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2456e513 ir_decode_pulsedistance +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2cc459b5 ir_codes_flydvb_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x2d0e9a49 ir_codes_em_terratec_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3136d8ff ir_codes_dntv_live_dvbt_pro_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x32b9033b ir_codes_apac_viewcomp_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3909f4ad ir_codes_terratec_cinergy_xs_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3a84be27 ir_codes_avermedia_a16d_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x3c5eaa24 ir_input_init +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4267d749 ir_codes_budget_ci_old_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x43c89ef4 ir_decode_biphase +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x4c1442c1 ir_codes_real_audio_220_32_keys_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x51ba1643 ir_codes_kworld_plus_tv_analog_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x543db4ff ir_codes_avermedia_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5e95da31 ir_codes_tt_1500_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x5fbe6515 ir_codes_pinnacle_color_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x61d039d7 ir_codes_behold_columbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6427a3fb ir_codes_pinnacle_grey_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x64b02fed ir_codes_avermedia_dvbt_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6606596a ir_rc5_timer_keyup +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6809de82 ir_codes_pctv_sedna_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x6d6511e7 ir_dump_samples +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x703fc738 ir_codes_avertv_303_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x7283f81d ir_codes_purpletv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x72c2992e ir_codes_powercolor_real_angel_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x76d71b8e ir_codes_dntv_live_dvb_t_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x784e176d ir_codes_asus_pc39_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x828b3ce5 ir_codes_encore_enltv_fm53_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8acae3dd ir_codes_pinnacle_pctv_hd_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x8b0d6e75 ir_input_nokey +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x92d1d181 ir_codes_flyvideo_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x94651dab ir_codes_ati_tv_wonder_hd_600_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x97c35dab ir_codes_msi_tvanywhere_plus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0x9944e2e5 ir_codes_hauppauge_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa69aa6ad ir_codes_pv951_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xa95157c5 ir_codes_cinergy_1400_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xac15f6c8 ir_codes_kaiomy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xaff22e87 ir_codes_pixelview_new_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb01a1998 ir_codes_manli_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb0a8ef38 ir_codes_rc5_tv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb57445f7 ir_codes_eztv_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xb5adb754 ir_codes_cinergy_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbb87b08e ir_input_keydown +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbd3ce6f0 ir_codes_avermedia_cardbus_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xbeaccbdc ir_codes_gadmei_rm008z_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xcba36c62 ir_codes_videomate_tv_pvr_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xd30c491f ir_codes_norwood_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdc23fec4 ir_codes_fusionhdtv_mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xdd4c0a07 ir_codes_evga_indtube_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe1101f4d ir_codes_avermedia_m135a_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xe4140c60 ir_codes_genius_tvgo_a11mce_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeb9bb08f ir_codes_npgtech_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xebf345b4 ir_codes_encore_enltv2_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xeec89db8 ir_codes_empty_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xef29c40d ir_codes_adstech_dvb_t_pci_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf33c155d ir_codes_msi_tvanywhere_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf3d619ec ir_codes_iodata_bctv7e_table +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf4f7a4d6 ir_rc5_timer_end +EXPORT_SYMBOL_GPL drivers/media/common/ir-common 0xf5e15e65 ir_codes_winfast_table +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x2058b124 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x27265f23 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x505ea0bd saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x590f1ae9 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x66b318be saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x79ee5c7a saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x7ef68416 saa7146_devices_lock +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0x88114540 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xbc44f8e5 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xcf683cf2 saa7146_devices +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xda6c6187 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe251a876 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x1aeeaed1 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x372fbc11 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x4c2b0cf1 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0x6ebbc3d9 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xac3a0abb saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xb00a06fc saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146_vv 0xce1560e7 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mt20xx 0xcb87d160 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/mxl5007t 0xc4a3ac9c mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda18271 0x87a280a7 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda827x 0x34818cd0 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x33250169 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda8290 0x335ba3d0 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tda9887 0xd1290eb3 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x620f8035 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5761 0x964aaea5 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x04e9f3bc tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tea5767 0x58477e9f tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/common/tuners/tuner-simple 0x3c78f456 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x1238b5cf smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x13bf328c sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x16205e3b sms_board_event +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x286fa13b smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x3f86be4d smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x4bf272c3 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x70151850 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7939224c sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7ae60b23 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x82740348 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0x87822755 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xb1c39e1f smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xc1c8b817 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd23de128 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xd93ac8fb smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xe6a05c1b smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xf988a70e sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfc9d8bc2 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfda878c5 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/dvb/siano/smsmdtv 0xfe77025c smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x01da336c cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x0a45e284 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x14f63334 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x18d35a04 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x2f10c806 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x35a06d73 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x6b2dc90b cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x6cb75a97 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0x7c5567d0 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xe06e680f cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/video/cx231xx/cx231xx 0xfb2e38ba cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/video/cx88/cx88xx 0xa63412b5 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x230b3b5d em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x59b9eb9b em28xx_isoc_dvb_max_packetsize +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0x9efebc78 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xd887fd30 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xdd49160b em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/video/em28xx/em28xx 0xe1a27a77 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x216ebd31 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x50dd53f7 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0x973815f4 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xbdb8fc8f saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/video/saa7134/saa7134 0xcc21930a saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x1e99f08d v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x5c6dda17 v4l2_i2c_new_subdev_cfg +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0x6ec2fe95 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xb9ce8a13 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x307895c6 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x522db9fa v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0x81d53674 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/video/v4l2-int-device 0xdc03084d v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x03bb0eb2 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x34c8b4e7 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x3c107b08 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x43af316d videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x56eea9dc videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6260370d videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x681a562c videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6ae0c604 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6b93c254 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x6cf3b0fe videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x7c8d0763 videobuf_cgmbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x81513435 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x86c2b45b videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0x8858e866 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xa648ca13 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xbfd41571 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc02400f4 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xc165c856 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xca06a418 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xcb0c5f03 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xda4b6571 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xdb5abee9 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xfb5fdce3 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xfce98f2f videobuf_queue_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-core 0xfde4400e videobuf_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x14cbb6b7 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x318f4de0 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x3e790a1b videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x5e16e633 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x66f9427d videobuf_vmalloc_to_sg +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x76d6ad8e videobuf_sg_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x92b82c56 videobuf_dma_sync +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x9352556a videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x97293354 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0x97ea2b82 videobuf_sg_dma_map +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xa825c75b videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xabdc26c6 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xb0db5cb2 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-dma-sg 0xf349f673 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x199890c8 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0x36e7df64 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/video/videobuf-vmalloc 0xc0853675 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x62bfc4ee v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x7169cce1 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0x92334c84 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xa772e539 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xbfb8356b v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/video/videodev 0xecd1ed58 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x1f520229 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x3505beeb i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x50147d82 i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x7b9534e7 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xa3afe6f9 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xaf2d71cc i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xcc8feb71 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xdef6a727 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x28620cfd mc13783_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x4b912ecb mc13783_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x58bdd6c6 mc13783_adc_set_ts_status +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0x7e8da387 mc13783_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xad69eb92 mc13783_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xcadf4cdc mc13783_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/mc13783-core 0xd0a63acb mc13783_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x75c323b9 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xf8d0b25f pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x061e47d6 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x11dd6c09 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x19ddf22d pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x61abee3a pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x7f056bac pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0x8832d745 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xb4708d43 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xbd98e5be pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xe20eec71 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xf2396953 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-core 0xfaef4da0 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x002bb45a pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x1480b1bd pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x23c2231f pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x636ba77e pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x87a1813e pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x04d9f44b sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x058a3bdc sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x8bc94643 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xa6741d14 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xfd275d6c sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x40e898a3 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x1281f4a8 wm831x_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x13e054bc wm831x_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x18025dca wm831x_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x6e295479 wm831x_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x99948b03 wm831x_auxadc_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0x9d016ddd wm831x_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xadaca39c wm831x_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xb58dffec wm831x_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xdde71b70 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xe458c85e wm831x_disable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xefc12f79 wm831x_request_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm831x 0xfed16bac wm831x_enable_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x04410119 wm8350_device_init +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x10176c64 wm8350_block_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1c65ac8c wm8350_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x1ca0d654 wm8350_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4068403c wm8350_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x4f039245 wm8350_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x5e4892c2 wm8350_reg_unlock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x7212847a wm8350_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x75ad9a7f wm8350_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x7863255a wm8350_read_auxadc +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0x904cb35b wm8350_block_write +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xa70f2aff wm8350_unmask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xb51aa62d wm8350_gpio_config +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc1f714d9 wm8350_reg_lock +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xc6643bef wm8350_mask_irq +EXPORT_SYMBOL_GPL drivers/mfd/wm8350 0xeff2dacd wm8350_device_exit +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x2b81828c wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x594cf35d wm8400_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0x930b0407 wm8400_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/wm8400-core 0xefd0395c wm8400_block_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x763ab2ac cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xca54121d cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xcf40b37e cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xf9d3cbc1 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x2df115d4 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d14d2f eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x04e2d169 sdio_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x0763c82b sdio_memcpy_fromio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x1101b18e sdio_readw +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x1a18f94a sdio_f0_readb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x212378b0 sdio_release_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x3c1fae7e sdio_memcpy_toio +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x419d5307 sdio_writel +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x47badfec sdio_enable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x49801d30 sdio_writew +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x5e29b8b4 sdio_unregister_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x61e6dfb4 sdio_writesb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x62b8ab66 sdio_register_driver +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x77812c17 sdio_set_block_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0x9cdc962d sdio_claim_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xaf0004d0 sdio_release_irq +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc267764e sdio_disable_func +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xc75ae0ca sdio_align_size +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xccc3f598 sdio_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xcce020aa sdio_claim_host +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xda50b84e sdio_f0_writeb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xe94854d2 sdio_readsb +EXPORT_SYMBOL_GPL drivers/mmc/core/mmc_core 0xf47f4302 sdio_readl +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x1d17abf3 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x29dc48fc sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x4dfb2008 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x542e08d2 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x5a822f6c sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xabd356f7 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x32f56583 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x4d9f8d75 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x648576d6 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xb4aa7384 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xd246608e cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x1aff35ff cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xb0ff43ae cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xe707b8da cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2000 0xaf5bb7eb DoC2k_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001 0x8b664fcc DoCMil_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xf46218ce DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1dc91046 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1dfd38a7 mtd_table +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2a89fe5d get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2eca5165 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x402a46de del_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x62a428fa get_sb_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x776b2fb6 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7e80a7aa parse_mtd_partitions +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8111f7e4 default_mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8d4f44a7 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb173c8ab kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb28c4c39 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb449ed11 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe730e919 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe942129f get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfe6fc00d add_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x01c0bfe0 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xe365b077 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xe44b2eef register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xee0ea894 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x2ebc849e nand_scan_ident +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x7af0c823 nand_scan +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x89ce799a nand_scan_tail +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x9abb59c9 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xd290047a nand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x3f8adcdf onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0xd98effb6 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x0b68b811 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x292cc4fc ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x2b486e79 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x34749ef9 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8e5a0693 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9afdd977 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb00792e5 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xb0da3093 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbc505df4 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xbd46aeef ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xcc6c41a9 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xd0a327b7 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xe15c4459 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x0a0a789f free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1e60d6bb close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x24c754f9 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x4c20e08c unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x51b68734 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x53691877 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x5a79c98e alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x68d25b26 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xe192f494 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xfea10f09 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x043136f6 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x4a30977e free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x784ce997 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xc2ced5a2 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdc9bd500 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x05310bf5 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x0732de01 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1177c7a7 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x13249767 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1581e85a mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x15ad7927 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x178e2b9e mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x17aed1a7 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x1e35c342 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2294faf2 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x246a7f7f mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x2bf6c3fb mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x37e42f7f mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x3e948cd8 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x429848b5 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x42a287aa mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x469ba76f mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x53d43024 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x5e6314a3 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x6c3bef0c mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x736842ff mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x776c59d4 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7a1c8ed1 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x7f993a88 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x84a920eb mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x8af21e79 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x985b9987 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x998c0c77 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0x9ca7c984 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa024b0e8 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xa0963db9 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaabc3052 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xabef297e mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xaee25473 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbacfbeec mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xbadc0271 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc4b98b7e mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xc635d8ce mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcbb1cda2 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xcf90a084 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xd864eb24 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdb628a7c mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdc29dcc3 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xde223094 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xdfd93ee1 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe00d9508 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xe6610916 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xea9f9fe9 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xec8092b0 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf0058171 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf844c518 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf8a1f4dc mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/mlx4/mlx4_core 0xf9746192 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x626bf057 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xd6e80ed7 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x5531d7d5 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x5fb88324 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x8a42d54e generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x8b056244 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x938f5a85 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xd6aca733 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x02acb2f9 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x067c467e usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0f078d56 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x101452e6 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x25aff5bc usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4609d799 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x463595e8 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4986ce2b usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x622c9dc0 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6ec336ef usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x735b046b usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7d6b1cf7 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8eb753fc usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa065a382 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa3cce1cd usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xaa717767 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbe736abb usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc05609ba usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc7c3aee1 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd6a45f14 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xde2f27df usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe4bdd36e usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf5c89fd6 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfd81886c usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x0386dc2d i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x1f5899cb i2400m_queue_work +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x203c32d2 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x37fb24aa i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x4b56f94b i2400m_cmd_get_state +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x79e3385a i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8557a515 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa0a4dfb3 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa7aa3343 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb99aaa35 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xdf51de47 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xeb74aa68 i2400m_set_init_config +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfe7703ed i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x1de16696 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1c27a793 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x28697a5d lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x32cd5a92 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x336ef962 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x42bfa17c lbs_cmd_802_11_rate_adapt_rateset +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x4f5a3c93 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5053f70e lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x607827da lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb57ee9df lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd22e135c lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd3244ee8 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd7f940ee lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xd91b5e88 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf92c2736 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfcc50bd6 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x149d4401 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x1506b990 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x69e6aa5c lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x7057785b lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x8e98e6a7 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xa07823fb lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xa8770d96 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xd3651465 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x76537601 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xd7cb79a0 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x31cc0f49 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x4c19177e p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x55962c9c p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9af62e55 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9e8ef33a p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xa9315f10 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xc0bbd25b p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xda31268e p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xed47a07b p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x02af596e rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0edff718 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x281319ad rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3519d06c rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3eaa5a5a rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4599d1d5 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x46dd5165 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5440d5f5 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x58d5777c rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x61236f74 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6c1df69f rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6e64c0e5 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x81e31c3b rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa0eeac00 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb09e5a37 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbba6a13c rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc20d2a48 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc2f11c91 rt2x00queue_get_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcb87f76c rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdee1d8b4 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe36eb5a4 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xecf375fe rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xed57d2e9 rt2x00mac_get_tx_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf57cdb26 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x21197528 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x22408be6 rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x68ccfe8b rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x8dc047cb rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xa54f4925 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xae70471f rt2x00pci_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb38e1497 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xdfb94033 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xe56fdc08 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x005e160e rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x369674e6 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x4df9fc7b rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x516c2976 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x73096999 rt2x00usb_vendor_request_large_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7e50b9a7 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x89740eb7 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x8c74d1a0 rt2x00usb_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xa4cb6cf1 rt2x00usb_kill_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xac63dd3c rt2x00usb_kick_tx_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbfefddd4 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc3a80a27 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xcc23f7aa rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xce176890 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xd475d2ad rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xea146747 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x46a30924 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x63e18210 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/wl12xx/wl1251 0x8d19048a wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x5244215c pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x9bf3a997 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x225c4c86 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x33b9366f wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x3e542481 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x516b0245 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x557071c8 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xb7901ff1 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x54c02b61 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x1c800256 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x25a5cb2f scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x3c904840 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x66aa4856 scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x73555ce6 scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x8fbd496a scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x4018168c fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x13f32955 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x17ec46f5 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1e768c50 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x27668318 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x277d361c iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x292eb119 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2ca77e66 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2ce008b2 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4466c579 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4ca20ea3 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4de76357 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4df94d62 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x501d0591 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x53a01b8d iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x60a0dab3 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x63d9d0a0 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x698aa7a7 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6c05b39f iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x701620c9 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x773f433a iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x780e4aa7 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x79f8bcb6 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x811f5a71 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x820bd04a iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8337744f iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8528151d iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x92cc839e iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x93086cea iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x981c88df iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9b64b31e iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9f490abb iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa45d3cc4 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa7a56746 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb66aec87 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbea76ac0 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc691b355 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc9933b52 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd940f670 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xda9ce520 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xee93ed90 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf4844cb7 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf614a92f iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0e464b50 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x133293c5 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1365862b iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x19b048ac iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x48f037ab iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4bef2980 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x63be29d7 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8ac0ea75 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa6fdabbd iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa78936d8 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xaf537006 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xaf5ef9c3 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc22140bd iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xd287355f iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe1e7612f iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf7e6b297 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x03666d81 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1481797d sas_slave_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x16016122 sas_slave_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2c1f88bf sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x366fd291 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x43c10408 sas_phy_enable +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x45bc09b5 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5a34ce12 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6b4839db sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x84e970d4 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x859ffec3 __sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8b921cb7 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8d82b9bd sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa53b13df sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xab7e8c2b sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xaea68e59 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xaede550e sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd60042a0 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd8b00dc1 sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xdce3a05b sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xed5d1188 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xee0dc74e sas_find_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xfe7f08b7 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x7bec7967 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x96d3e3c2 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9965c295 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa4b811fc srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xd225fbc7 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xdf6df15e srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x04b08c7c scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x05fa8a2a scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x0b415c5b scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x21ed3ce2 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x2b574775 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x6a67f4ed scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xac050949 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xcf3bef4a scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf88934b4 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0cb69b4d iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0f5ea394 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x1a157088 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x40035e4e iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x55a49e0b iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5f07b29d iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x68b4737b iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6abab818 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x71ce61d3 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7e4a7617 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8d8f818f iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x96235451 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9732c530 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x982d1d5b iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9a0d81c6 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb638a26b iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbee9e9cb iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc221920f iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc90e29e3 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcc38ec55 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd1b2a0fd iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdd23827d iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x0fdcb2a8 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x1ca90e82 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x544d39dc srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x61b4c5ed srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xc44ae46e srp_attach_transport +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x54831091 pciserial_suspend_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x8c8340cf pciserial_init_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0x9ee6c9d5 pciserial_resume_ports +EXPORT_SYMBOL_GPL drivers/serial/8250_pci 0xb721cf3c pciserial_remove_ports +EXPORT_SYMBOL_GPL drivers/serial/serial_core 0x01d8f55f uart_console_write +EXPORT_SYMBOL_GPL drivers/serial/serial_core 0x7897a19f uart_set_options +EXPORT_SYMBOL_GPL drivers/serial/serial_core 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x3ed0074e spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x5de1c212 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x6a9b22db spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x7304ccab spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0x98c93014 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi_bitbang 0xd34c78dc spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/uio/uio 0x12559c25 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x4924e7b2 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xbda14f52 uio_event_notify +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xb3c06e18 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xc7083a5a usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x261a7adc usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x7ef5cb64 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x8ad62bbd usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x9d1eaed1 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xba86a108 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xee70740b ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf3fe7df6 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf4fcecd0 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf8d15a42 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x024009e3 usb_serial_deregister +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x0f86cd47 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x1ae8cc51 ezusb_set_reset +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x23ad3bc6 usb_serial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x36b59644 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x8134500f usb_serial_generic_resubmit_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x844324f5 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x84965684 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa1b5c956 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa6396f11 usb_serial_register +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb8b20b95 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xdb936fdc usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe2d6915b usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xee0d7f9c usb_serial_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xfd7629ca ezusb_writememory +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0310ce44 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x031ea302 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0be13004 usb_storage_usb_ids +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0e980c5a usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1dc7cbcf usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x20f5db1e usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2abbcad5 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3a8b05b2 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4d6ee680 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x555a0968 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x55abd3fc usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5ce380f1 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x6cb3a6f0 usb_usual_ignore_device +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x751dd738 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x914cb084 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9cd9190a usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa3647353 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa81c3f59 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xabdf0932 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbdfe0146 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc3f774b3 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xca9ba867 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xec5216e3 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf853e8ff usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x09f3c921 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x5962ebce wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x67b42dd8 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8668d134 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8832f07c wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xa503511c wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xa76d1dbd rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x1aa271aa wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x21753032 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2587b6ff wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x26113727 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x41ecb1e0 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x51177f71 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x53f1796b wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x5644aa11 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x747f7e51 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x74d3e051 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x8c92d195 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb1da6dcc wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc3ebfaf7 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc5ed41a5 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xde7451dc wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdf6e4f08 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe4eb7d72 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x270bdcc7 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xcd175349 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0xfdc47eda i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x1885a194 uwb_phy_rate_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x268be260 uwb_pca_base_priority_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x943bec09 uwb_ack_policy_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0x96f9997a uwb_rts_cts_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xa768d07f uwb_rts_cts_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xb3aa3381 uwb_phy_rate_store +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xd001a229 uwb_pca_base_priority_show +EXPORT_SYMBOL_GPL drivers/uwb/i1480/i1480u-wlp/i1480u-wlp 0xefde0736 uwb_ack_policy_store +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x23117ef5 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x325a06b0 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x33e20282 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x6023ef39 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x9bfb7354 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xcc63a06a umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd215cd42 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xe5f1f0ed umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0c9654e1 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x17a3ff84 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2ea8c055 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2ee149a1 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3782184f uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x43300359 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x48cdbb4f uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x53693524 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x54fcbbd2 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5bba9a83 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6fb56fe1 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6fb9d9b8 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x779e060e uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7b20bb59 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7d8eb110 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7e957dd0 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x856587bc uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8dee1448 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8e33707c uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x922a566c uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb4f8b014 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc536f5d7 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc5d846b5 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xca33fa54 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xce530b72 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd164f6b0 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd3a4f960 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd3a795df uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd440d374 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xddc091e3 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdef02bae uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe0543fd3 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe2e197f9 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe498a761 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe5818422 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf087e3bc uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf5170bde uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xc33dc743 whci_wait_for +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x076e5466 wlp_dev_manufacturer_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x0c6958c9 wlp_dev_prim_subcat_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x15ebabe3 wlp_dev_prim_subcat_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1732e6d7 wlp_dev_manufacturer_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x18ea8ff4 wlp_dev_model_nr_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1cad5168 wlp_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x1d525150 wlp_wss_setup +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x203a8cca wlp_dev_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x2a017f24 wlp_wss_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x31d2c25e wlp_dev_model_nr_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x36a33374 wlp_dev_prim_OUI_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x3dbef10f wlp_prepare_tx_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x43ff3cb2 wlp_eda_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x56e2be48 wlp_dev_prim_OUI_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x5747c9a5 wlp_uuid_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6560d616 wlp_dev_model_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x6d56d015 wlp_dev_serial_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x717c591f wlp_dev_prim_category_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x74ec7284 wlp_dev_prim_category_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x77911cfe wlp_receive_frame +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x82316769 wlp_neighborhood_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0x8b612e71 wlp_dev_model_name_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa1610dc8 wlp_wss_activate_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa47511a0 wlp_wss_activate_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xa6312b36 wlp_dev_prim_OUI_sub_store +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xac90f95f wlp_uuid_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xb356e76f wlp_dev_prim_OUI_sub_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc427bd4a wlp_remove +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xc9f6319c wlp_dev_name_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcf73f6d6 wlp_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xcff428bf wlp_dev_serial_show +EXPORT_SYMBOL_GPL drivers/uwb/wlp/wlp 0xdfeacf61 wlp_eda_store +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x24e182eb ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x3467bac3 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x3ca7c9dc ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x5ab0dd91 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa0246787 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa102a8c4 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xc3476fab ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x0c03106d fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xf7dbb074 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x24139f35 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0xeb4d8113 sis_free_new +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x0251a360 unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x60a5f451 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x74d36ef8 register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x75403341 register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x9a83ab5c unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0ac0ab25 vring_interrupt +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x9aabd71f vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xd1ddfa22 vring_transport_features +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xebf68fb6 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/w1/wire 0x0a9f2f8b w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x65b54171 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x68ff5cd1 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x6f0eee95 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x8faa44e1 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xb14f66e9 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xd77a3c2c w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xe417d7b4 w1_touch_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x0864c4a4 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x5b8b4342 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9808fe3f dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xf2bda0de dlm_posix_lock +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x34c6d2b2 exportfs_encode_fh +EXPORT_SYMBOL_GPL fs/exportfs/exportfs 0x7a166a0a exportfs_decode_fh +EXPORT_SYMBOL_GPL fs/fat/fat 0x04528b10 fat_build_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0x16b96b03 fat_getattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x171ec178 fat_scan +EXPORT_SYMBOL_GPL fs/fat/fat 0x23451491 fat_free_clusters +EXPORT_SYMBOL_GPL fs/fat/fat 0x42c46013 fat_add_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0x46f79400 fat_attach +EXPORT_SYMBOL_GPL fs/fat/fat 0x4a57dfac fat_fs_error +EXPORT_SYMBOL_GPL fs/fat/fat 0x50c456cb fat_flush_inodes +EXPORT_SYMBOL_GPL fs/fat/fat 0x7413557b fat_fill_super +EXPORT_SYMBOL_GPL fs/fat/fat 0x82d443bd fat_setattr +EXPORT_SYMBOL_GPL fs/fat/fat 0x847ccabd fat_time_unix2fat +EXPORT_SYMBOL_GPL fs/fat/fat 0x8d086211 fat_dir_empty +EXPORT_SYMBOL_GPL fs/fat/fat 0x9b34fee4 fat_sync_inode +EXPORT_SYMBOL_GPL fs/fat/fat 0xc1023512 fat_remove_entries +EXPORT_SYMBOL_GPL fs/fat/fat 0xca1bf7e5 fat_detach +EXPORT_SYMBOL_GPL fs/fat/fat 0xeb3dc8f0 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL fs/fat/fat 0xf8be7dfe fat_alloc_new_dir +EXPORT_SYMBOL_GPL fs/fat/fat 0xfba2ecfd fat_search_long +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x0160db87 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x16579a6a nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1a618932 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x454014b3 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6f959b35 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x7eb2b41d nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x96877ac4 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7b91a7b lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcaf6ce97 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf6933c48 lockd_up +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x115f798e nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x7753cc19 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x25910aab o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x2e785792 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4acccd1d o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x5d53f5d1 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd13d8eb6 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xe54dc8b8 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf7ca4520 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x1d21ecda dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x63d1935f dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x89fd6818 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x8d5fb21b dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xce97fcd3 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xde64e2cc dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x06379db6 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0e27f909 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x1dce062c ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x21db5b88 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4a1f6fe9 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x81c85a68 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x91fab465 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x963932a3 ocfs2_stack_glue_set_locking_protocol +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xa7d5c1c0 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xb7d5ce7c ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xc1107e70 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xd066711e ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL lib/lzo/lzo_compress 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL lib/lzo/lzo_decompress 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x028bb8a9 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x05290e85 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x08c10b13 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x2629f6d1 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0xac812e2b garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xe5490f14 garp_request_leave +EXPORT_SYMBOL_GPL net/802/stp 0x59254ab8 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0xcee08c5f stp_proto_unregister +EXPORT_SYMBOL_GPL net/ax25/ax25 0x26e62900 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x8580043d bt_class +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0048ae6d dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0c017d54 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x11000834 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1636aa41 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x179f847f dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x187763a2 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x25733eaf dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3416608c dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3f981cef dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x41a93ba7 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x433441f4 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4d4673db dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4fbb6f7e dccp_insert_option_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x52c2fc1b dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56ea266a dccp_state_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x57282e53 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5b895b0b dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5fd6b7d7 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6a00bdac dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8227e3d1 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8b7d8caf dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9694e6d3 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9a4b9670 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa82e9b88 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb2f80054 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb5ffea5d dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcd49079c dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd1bfc603 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd5f34902 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe0a6e917 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe0b1a762 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe2641163 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe3e16308 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe6d7d398 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe8919c8c dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf2065197 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x0d650212 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x3e1a1ee1 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x84b18382 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xa6e5a6d7 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xc7237478 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xf3fd91e1 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x19e62b1a nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x07ae60b6 nf_nat_proto_in_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x3b73d069 nf_nat_get_offset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x6b4ad88a nf_nat_proto_find_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x8a89fa1f nf_nat_proto_unique_tuple +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0x94a08134 nf_nat_proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xabcd2807 nf_nat_packet +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xb02f6167 nf_nat_proto_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xcd1cff5a nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat 0xf54ef415 nf_nat_proto_range_to_nlattr +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x31a19365 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x62cb28b7 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x6785c7a5 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x81dbe732 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xa139e001 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x08a3e5d1 net_ipv6_ctl_path +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x0d76d913 inet6_destroy_sock +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x0f21a6bf inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x2721b1c1 ipv6_find_tlv +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x273d24ee ip6_dst_blackhole +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x286d3bf6 ipv6_dup_options +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x2ce55d1d ip6_sk_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x7a37462d ipv6_opt_accepted +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x7cbf93da fl6_sock_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb038d907 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xb5c0db9b inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xbc8fd4e7 inet6_csk_xmit +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xcf6c7f8e ip6_local_out +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xd1c8b5c2 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xe1d2eb61 ip6_dst_lookup +EXPORT_SYMBOL_GPL net/ipv6/ipv6 0xeee51af0 inet6_csk_search_req +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x58a335f3 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x69e7e196 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe6476b4a net_vs_ctl_path +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0b2169ac __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0e32a9ff nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0e70c4c5 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1027fd97 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1612b920 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1637cecf nf_expect_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1aea8a20 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x20bf45b2 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x21531836 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x21942ce7 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2341845a nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2463dee4 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x28aa68bc nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x28dce8a2 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2e47bbaa __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2f69ec78 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3215e4ff nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x32319142 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x32fcf879 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x357eae45 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3593cbf6 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x35cacc0f nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x36c7f2da nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3a7a8daa nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x45001888 __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b9065a9 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4f2474af nf_conntrack_hash_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x520074f4 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5882ba33 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5919c86a nf_ct_insert_dying_list +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x64fef7bf nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x679d857b nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x69f45fb1 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6f992a5a nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x787f332a nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7a968023 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8594ae74 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8f3180d7 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8fc38318 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x93fdf28e nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9af3f6c1 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa1cb900c nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa4c17c95 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaa4042b5 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb3ecc9e3 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb8337e91 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbb0fdcad __nf_conntrack_helper_find_byname +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbf6fb301 print_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbfed6412 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc060b554 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc3a7b13c nf_ct_unlink_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xccf253a5 nf_conntrack_untracked +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd1f292e4 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd2143ba1 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd2bc0a51 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbd33e63 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdbef8b57 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe30530a5 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe93112fe __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeeac5cd9 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf15b2e3e nf_conntrack_event_cb +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf780d796 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf8a0452b nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfdafb512 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x814aa08a nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0xa718e111 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x109ce3d9 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x5102a96a set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x6e0703cd nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x7096f314 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x7e8c80b3 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x82439681 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x8282be20 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xb733ed9e get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xcc0f0ab4 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xd2ea2293 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xb1344762 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x42d37dd9 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x4a800e2f nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xb412868f nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xe7e4d0a7 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xe53d14a0 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xf140bb96 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1003b917 nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x58c9ed91 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x6581136c nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x782109c0 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x7b898a45 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x9480f531 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xb68a06ce nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xb9441a01 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd061a3be ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xd44dc610 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xe8c7c644 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xfa32ce3a ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x465328ff nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x40a32310 nf_tproxy_get_sock_v4 +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x4990afbd nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x49ae34e1 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x8fa7620a nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa3bd7b9d nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xd00ea6f8 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xeca95329 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xef9b4bbd nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x8dd34746 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x01d10619 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x1348ca17 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x2d4bb74a xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x34a114b3 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x493b8536 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6d381629 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x812520aa xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x9b9ea496 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa0eb5204 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa1cce8f9 per_cpu__xt_info_locks +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xa2106b63 xt_proto_fini +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x28da54f6 rxrpc_register_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xc249e0ad rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x194f1a8f gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x52774c19 svc_gss_principal +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x5e1e1a00 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7021a1d5 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7d8f6bfe gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x98972e74 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xa3aff45e gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xac84ff83 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb26b4206 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe3194b35 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe9c9454e gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x000d7999 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x015ce196 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0236f1f7 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02cf9d9d rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x03770ae5 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x044d2b8d svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0553ec45 auth_unix_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05711e62 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x08427932 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0a81a9a7 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b5ab673 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f9fd9c0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11b96f1e svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x129f48f0 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12c7a54c xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12e280e3 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x151b826e sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x180a2118 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x188105f6 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b09125a xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b3e68c2 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1d0a3f60 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1d7ada59 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x20795669 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x221f4678 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x23de8a6d svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x287ca374 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2aa17774 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2bac4d69 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2d99e96b cache_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3142c660 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3150ba38 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x34929451 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x35c68439 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x35e47d43 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3699f16c svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x36a87516 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3a9f1577 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3b8bacb4 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c5ff529 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c618100 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3db91389 auth_unix_forget_old +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f60c791 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3fa9949d xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x42306306 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43ddb163 svc_sock_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4467fcf7 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x450f75d3 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x477a3432 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b562ceb svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b9de6de rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4ca6ac17 svc_sock_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4de72392 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x55c8c149 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x593e7af6 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5abbed6f xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b14ec1a rpc_put_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5bd26000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x64702388 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65adf5f1 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x669446ec svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x675524ec rpc_sockaddr2uaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6876f819 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x69294cfa xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6c5304c5 rpcb_getport_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d5b133a xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d7727d5 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e76e190 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6eea229d svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6f140dd9 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x70049d6d xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7244b9cc xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x725b54b9 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73970092 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x757ebd98 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x75a760dc rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x777ed8e2 auth_unix_add_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7f5111ff svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82bdf0f2 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x833c7ea4 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x84ab3441 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x84b540fe rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86481477 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86ed282a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a04a79b read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c9f7f0b rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90cc3d21 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9183cd4d sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9393cedd svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9c854bc6 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9dcb85dc rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9eec1129 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9fc5a82b svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa5aca443 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa64df828 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa6ba49b6 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad802b1f svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf43d2f8 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafc28f78 rpc_mkpipe +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb0e72bc5 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb14e9921 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb3ce2812 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb4361cdb svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb614d561 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb6c08316 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb88dc3b0 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb91f77ee rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb99ce88e xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xba23944a rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xba6f2472 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf39ddd1 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc46d5425 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc505d2d1 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc7a44aeb rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xca90032b xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc3b3f29 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xccc2372e rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf9c7718 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5d866b0 xprt_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd69c23ef xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd82ce4e3 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd950d823 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd975c936 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9e43af0 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdabb5e5e xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdb11e10d sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdccd743a rpc_get_mount +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdd2c9d43 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdfd88f9e put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe22ca923 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe3048716 xdr_encode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe3d68a35 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe565d0ef cache_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6f5af36 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xea544e58 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xed0b41b6 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee9db36f rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf1da3ba3 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf3033d94 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf41a1b4b svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf4875693 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf6dc9e2b rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf73e0828 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfba01d50 svc_sock_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xff07ee9c svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xff9df085 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xffaa6ca6 svc_xprt_received +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfff0f686 rpc_exit_task +EXPORT_SYMBOL_GPL net/wimax/wimax 0x09045d80 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x0c51e4cc wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x22624a74 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x3b2e9917 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x71ec8a70 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x785e5611 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa1bb4421 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xaaefb037 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb7e8842a wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0xbd83d532 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc99ff394 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd49031ec wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf7b439f0 wimax_dev_add +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x07857ea6 cfg80211_wext_siwencodeext +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x19683f02 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2f6fb2b3 cfg80211_wext_siwmlme +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x32649180 cfg80211_wext_giwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3c4f34c7 cfg80211_wext_siwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3d774a52 cfg80211_wext_siwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4ae7954a cfg80211_wext_siwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4c54a817 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x50b1c19a cfg80211_wext_giwfreq +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5e3b5ff1 cfg80211_wext_siwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5f03d4f3 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x603feb88 cfg80211_wext_siwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6a0967f7 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x6defe456 cfg80211_wext_siwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x705f3327 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8b5332d5 cfg80211_wext_siwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x91c7b1e0 cfg80211_wireless_stats +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x99538ac0 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9ed57da0 cfg80211_wext_giwtxpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x9fa1bb82 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa8808aa9 cfg80211_wext_siwgenie +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xad58a941 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xad92f888 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb169b233 cfg80211_wext_giwencode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb1f7e746 cfg80211_wext_giwap +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb23d9e57 cfg80211_wext_siwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb3051555 cfg80211_wext_giwessid +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xba86b047 cfg80211_wext_giwauth +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc848cf49 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xdf5adb24 cfg80211_wext_siwpower +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xeb2660d6 cfg80211_wext_giwrate +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xecc41c1f cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x26147fc3 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x3cd67d35 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x7fc56c59 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xda1eba55 ipcomp_output +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x488054f2 aoa_fabric_unlink_codec +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x8609d6be aoa_fabric_unregister +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x92eebf1b aoa_codec_unregister +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0x9901f9f4 aoa_snd_device_new +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xa8d69472 aoa_fabric_register +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xd26cf878 aoa_get_card +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xdc28cece aoa_codec_register +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xdf163e5a aoa_snd_ctl_add +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xe43c007a pmf_gpio_methods +EXPORT_SYMBOL_GPL sound/aoa/core/snd-aoa 0xe989f1ab ftr_gpio_methods +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x081d3c7e soundbus_dev_put +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x1e0a780a soundbus_remove_one +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x34531f38 soundbus_unregister_driver +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0x7a716c45 soundbus_register_driver +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0xbbcad017 soundbus_add_one +EXPORT_SYMBOL_GPL sound/aoa/soundbus/snd-aoa-soundbus 0xd1dd9b53 soundbus_dev_get +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00eee50e query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x024f331f snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0290f401 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x02cbcdb6 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0d597ccc snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0f888d15 snd_hda_power_down +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x10484cc6 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1538771d snd_hda_power_up +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x16bf9659 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x17215535 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x18e932af snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1bacaa60 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1e2b0647 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x244ff2ce snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x27f0f0f6 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x282b42bc snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2850d0e7 snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b036ba0 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2f417c33 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2f78504d snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x32d6465b snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3bf41709 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3d6335a0 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x461f805f snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x483fee7d snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4888f81e snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4c24152e snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4f44a05e snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x505f0196 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x599cdf6e snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5ae76f73 auto_pin_cfg_labels +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5b70c205 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5e8a7779 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x60ba40e1 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x62d646bb snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65c277e4 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x700d0375 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x79ecefc3 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7a65dbf5 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7f76749a snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x828ddaae snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x89d84ff9 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8b80861d snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8ba3cf37 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x94922223 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x97c9c1e8 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x995ba075 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9b57f408 snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9fc6bf48 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa0b5c040 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2cb5738 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa621e80c snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa88f1e94 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad87613e snd_print_pcm_rates +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xae594a69 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaef5cdd2 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb51824fc snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbc3a75ae snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbf4fc25f snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc34a54c6 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc49b2bf5 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc6721944 snd_hda_parse_pin_def_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc83b4db0 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcbc1fd8b snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcce27eb0 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcd28cc3d snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd08eb943 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd51df891 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe03c833a snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe08a7ae2 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe22aebe3 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe3606808 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe7193260 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xedd06107 snd_hda_create_spdif_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf2df1ca5 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf489e800 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf8087334 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf9445cf5 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfe83c1a9 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xb446b926 soc_codec_dev_ad1836 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1836 0xc7fe2b64 ad1836_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x315e4a8a ad1938_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad1938 0x9279f3cd soc_codec_dev_ad1938 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0x15e1f640 ad73311_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ad73311 0xcccaeb98 soc_codec_dev_ad73311 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4104 0x1fd396c3 soc_codec_device_ak4104 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x54b70f9d soc_codec_dev_ak4535 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4535 0x61f352d9 ak4535_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x0c0c2031 soc_codec_dev_ak4642 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ak4642 0x37de5b0c ak4642_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0x145f7b73 soc_codec_device_cs4270 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4270 0xa3a196bd cs4270_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x03490adc max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0x0aa6094e pcm3008_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3008 0xd6dcb1a2 soc_codec_dev_pcm3008 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-spdif 0xe19c1008 dit_stub_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xa34121d7 ssm2602_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0xdd69b469 soc_codec_dev_ssm2602 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xac9baceb tlv320aic23_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic23 0xf2099a70 soc_codec_dev_tlv320aic23 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0x4602a627 aic26_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic26 0xec4e3e26 aic26_soc_codec_dev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x03f8d8e5 aic3x_headset_detected +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x077753f9 aic3x_button_pressed +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x30f5ae1c soc_codec_dev_aic3x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0x827c6de8 aic3x_set_headset_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xa45a44d6 aic3x_set_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xb6ff026d aic3x_get_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tlv320aic3x 0xd527c68f aic3x_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0x72e43c61 soc_codec_dev_twl4030 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl4030 0xfcd524e5 twl4030_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda134x 0xb35c5a64 soc_codec_dev_uda134x +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x4e955132 uda1380_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-uda1380 0x82e6660d soc_codec_dev_uda1380 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x5c5764f3 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xabae6fa0 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x2f8e180b wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x3bdc336d wm8350_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x6e07c607 soc_codec_dev_wm8350 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0x632115d3 wm8400_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8400 0xf51b3c55 soc_codec_dev_wm8400 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x0bc85f98 wm8510_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8510 0x3de3885e soc_codec_dev_wm8510 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0x148865c4 soc_codec_dev_wm8523 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8523 0xbcb437ab wm8523_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0x3232b3d1 soc_codec_dev_wm8580 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8580 0xc1d60803 wm8580_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x5d757484 soc_codec_dev_wm8728 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8728 0x9456c015 wm8728_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x152e9a69 wm8731_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8731 0x8d75a5fa soc_codec_dev_wm8731 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0x90e3e809 soc_codec_dev_wm8750 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8750 0xbda27cf6 wm8750_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xbbcebbca soc_codec_dev_wm8753 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8753 0xe2cd9a7f wm8753_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0xb30b121d wm8776_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8776 0xc53d9be1 soc_codec_dev_wm8776 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0x76f75dd1 soc_codec_dev_wm8900 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8900 0xfa104163 wm8900_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x5dda0e12 soc_codec_dev_wm8903 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x7c8433cd wm8903_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x0e5f6570 wm8940_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8940 0x71fef50d soc_codec_dev_wm8940 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x727a2163 soc_codec_dev_wm8960 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8960 0x99c07459 wm8960_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x529ca7fc wm8961_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8961 0x6b611022 soc_codec_dev_wm8961 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0x6aa37a15 soc_codec_dev_wm8971 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8971 0xf4ebac48 wm8971_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0x17d48e50 soc_codec_dev_wm8974 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8974 0xa4263dfb wm8974_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0x25ac8d69 wm8988_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8988 0xb03d8661 soc_codec_dev_wm8988 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x6f8804b0 wm8990_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8990 0x7926665e soc_codec_dev_wm8990 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0x520b359d soc_codec_dev_wm8993 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8993 0xe91c761e wm8993_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x0a97d3c9 wm9081_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm9081 0x21975b12 soc_codec_dev_wm9081 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x03b25b17 snd_soc_add_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x04cf35b2 snd_soc_init_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x05ca28ab snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x05f33807 snd_soc_dapm_stream_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x07bdadff snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x07f402fc snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0a6833e7 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0bf44e04 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x11574912 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x12beed85 snd_soc_get_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x161ad886 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1bd9d4a6 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1d66ecc4 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2469c270 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x24eace63 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2703336a snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2b472689 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x32b91f4f snd_soc_info_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x349e90e6 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3774ef38 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3a343e64 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3db890b1 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3f6b36d5 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3fb49088 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x43ec979b snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x45f69e58 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x494fa8a6 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4d95d505 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x512aa4df snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x535a99ed snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x55bcef04 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5ee9ffe5 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6805f263 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x69dd84f8 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x740ac33c snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7d2785de snd_soc_suspend_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x804f98b4 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x92b92dc7 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9385eeb9 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x962aebff snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x965595d8 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa5947af2 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6df846f snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa8e364ca snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa9c8e4ed snd_soc_resume_device +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa9dceddc snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa8a0ffc snd_soc_new_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xab263bfe snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xae3ade46 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb0634eab snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb0c600d5 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xba1c484b snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc0b42c71 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc369beca snd_soc_free_pcms +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc6047215 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc689f7d4 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8dbe5ee snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcb1341ee snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcdca97ed snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd1d1097c snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd461d858 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd8d08264 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe2f85347 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe77f0ef9 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe90df574 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xea6a8fe4 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xecc1c0f2 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef021bd7 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef64c380 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfd476208 snd_soc_put_volsw_2r +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfe368cdc snd_soc_register_codec +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x2a52bfbb xv_malloc +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x4aff07d2 xv_create_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0x73bc1f25 xv_free +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xa56cc910 xv_destroy_pool +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xaf69699e xv_get_object_size +EXPORT_SYMBOL_GPL ubuntu/compcache/xvmalloc 0xda64226d xv_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x0017fa26 device_create +EXPORT_SYMBOL_GPL vmlinux 0x0028bc81 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x003d39e6 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00566d8f inotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x008df561 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00d2b257 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00ef83aa driver_find +EXPORT_SYMBOL_GPL vmlinux 0x0164a95e fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x016b9869 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x01a25ee2 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01a9b3de rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x01e2cf30 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x025cfdcf of_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x026b7b54 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x0278ee70 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x028a24fb hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x028a83c7 ide_device_put +EXPORT_SYMBOL_GPL vmlinux 0x02ccea56 lock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x030bba0a crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x033709ac __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x033f0c34 pmac_backlight +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x0362a50f usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x038afac6 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x03947adf inotify_add_watch +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x03f19910 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x04069b1d set_irq_nested_thread +EXPORT_SYMBOL_GPL vmlinux 0x0426d9c5 class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x044a7489 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x0454c436 ide_get_lba_addr +EXPORT_SYMBOL_GPL vmlinux 0x0471d3db debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x048fcc76 register_posix_clock +EXPORT_SYMBOL_GPL vmlinux 0x04cac7c9 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x052f7ab3 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05670f3a da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x05792bde __set_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x0581e549 inotify_remove_watch_locked +EXPORT_SYMBOL_GPL vmlinux 0x0594c9bc bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x0619ca8a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x06d13f1f ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x072ed88d inotify_destroy +EXPORT_SYMBOL_GPL vmlinux 0x078979a5 platform_device_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x07a773e1 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07ecf3b3 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x07f74407 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x0807afbd ide_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x080f0ab1 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x087bf1d8 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x09173801 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x091c824a machine_power_off +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x092afdb8 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x09300edd inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x0990eb7b ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x0993e22b input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x0a1f0499 queue_work +EXPORT_SYMBOL_GPL vmlinux 0x0a51ae5b virq_to_hw +EXPORT_SYMBOL_GPL vmlinux 0x0afaa05c usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b44654d devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x0b99c77a crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x0bbba7ce ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x0bbdd507 pmac_i2c_close +EXPORT_SYMBOL_GPL vmlinux 0x0bbfd180 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x0c00ea69 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x0c084e7d irq_find_host +EXPORT_SYMBOL_GPL vmlinux 0x0c0c1eb5 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x0c0c41a5 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x0c13bd14 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x0c1af39b tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x0c24b210 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c4e641d fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x0c5e20ec skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x0c74ac99 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x0c7e23ba transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x0cb88680 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x0cf2b503 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x0cf8b5e1 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x0d1aec82 ide_create_request_sense_cmd +EXPORT_SYMBOL_GPL vmlinux 0x0d91d6bc usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x0da0e556 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x0e422aea ide_register_region +EXPORT_SYMBOL_GPL vmlinux 0x0e717c9e apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x0e83f085 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x0e8fdfca ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x0ea47296 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x0f0dd836 mmput +EXPORT_SYMBOL_GPL vmlinux 0x0f1a997e crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x0f88ed79 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x0fbcecfc mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x0fbeb3e5 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x1003ebbe debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x100cffb2 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x101c923e __tracepoint_power_start +EXPORT_SYMBOL_GPL vmlinux 0x102c4c84 of_irq_map_one +EXPORT_SYMBOL_GPL vmlinux 0x109c3a66 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x10cd2e62 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x10ebc5f0 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x1105f89b ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x1130addb register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x11955db8 pmac_backlight_mutex +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x1225ae82 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1251d30f call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x1306724a crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x13b21b94 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13c9a323 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x13fed478 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x14485194 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x144ca71b klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x1453ccbc ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x14596cda tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x145c0ca3 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x146fd961 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x149db923 selinux_string_to_sid +EXPORT_SYMBOL_GPL vmlinux 0x14b96faf fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x14e636cc ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x152becef find_module +EXPORT_SYMBOL_GPL vmlinux 0x1560041b ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x157cd412 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15bfb92b alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x162af2ae vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x1641293e rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x1651e258 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x16eb8ac9 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x16f76869 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x16fb347b __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x1777fe0d __create_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x18241373 inotify_inode_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x1871e71f blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x187f4858 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x18a8dd24 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x18d53420 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x18fb6d07 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x19111d97 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x191fb096 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x19723c76 ide_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x19849918 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x198c908a ide_pci_init_two +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b70ac1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x19d22c44 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a399f32 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x1a3f6e21 ide_pci_dma_base +EXPORT_SYMBOL_GPL vmlinux 0x1a474901 tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x1a5a29bd ide_output_data +EXPORT_SYMBOL_GPL vmlinux 0x1a5d3a83 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x1a64ebf0 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x1a7c0765 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x1ac4b9dd ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x1b24cb38 usb_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x1b410613 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x1b7f9f8a klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x1b98a169 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1ba51d3c tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x1bf98f68 usb_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x1bfb393e generic_detach_inode +EXPORT_SYMBOL_GPL vmlinux 0x1c014bc0 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x1c268605 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x1c752afc fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cc029dc ide_setting_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x1cfb6fe4 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x1d2d8c8f queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x1d39ff45 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x1d4917ea __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x1d8f8059 __tracepoint_power_end +EXPORT_SYMBOL_GPL vmlinux 0x1d9c5fdd platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x1db21d74 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x1dee2629 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x1e1302c5 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ed52846 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x1f46514b scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x1f8b8e06 ide_set_media_lock +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fdca1da ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x1fefdae5 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x200c6597 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x2016f4a5 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x2018120d __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x203e7daf crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x20596565 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x20779f19 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20cbd1a0 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x20d9e642 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x21505528 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x21540f4e posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x215bcbe0 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x215db6e9 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0x216449d9 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x217f989e device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x218882dd led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x21907710 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x21a0c2aa lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x21ef5f61 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x2206a831 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x2299a7a1 ide_pci_check_simplex +EXPORT_SYMBOL_GPL vmlinux 0x229f9b56 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x22e2c20b atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x22eb81bb media_bay_set_ide_infos +EXPORT_SYMBOL_GPL vmlinux 0x2354b969 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x2357e118 ide_pci_resume +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x237c099f vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x237e299e rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x23869dc7 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x23c9bbab relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x23fc87d0 ide_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x2400de44 ide_error +EXPORT_SYMBOL_GPL vmlinux 0x2406dae3 pci_address_to_pio +EXPORT_SYMBOL_GPL vmlinux 0x24301192 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x24405625 nf_unregister_queue_handlers +EXPORT_SYMBOL_GPL vmlinux 0x2473e1fd ide_cd_get_xferlen +EXPORT_SYMBOL_GPL vmlinux 0x2480b9d0 unregister_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0x248ce172 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x2493924a ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x24988009 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x249dc846 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x24af5661 ide_dma_host_set +EXPORT_SYMBOL_GPL vmlinux 0x24bb2397 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x24be7017 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x24c1d478 ide_device_get +EXPORT_SYMBOL_GPL vmlinux 0x24cda041 ide_vlb_clk +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x250c1af2 pmf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x254b7c3c bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x25d92c59 ide_host_free +EXPORT_SYMBOL_GPL vmlinux 0x25dba3ea ide_do_test_unit_ready +EXPORT_SYMBOL_GPL vmlinux 0x25f48005 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x268dec1e kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x269d8561 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26f8f853 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x2720c94e spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x2765a923 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x27adf232 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x27d0c854 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x27d1f5aa pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x27ddf777 ide_input_data +EXPORT_SYMBOL_GPL vmlinux 0x27fab6d4 sysdev_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x286d18ca device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x2870f2ed usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x28b2cc80 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL vmlinux 0x29096087 sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x2915fc69 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x293fd21d class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x298a6c39 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x299656ce input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x29d46b44 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x29ef1a0b devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x2a633eb7 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a937475 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x2aee318c ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x2b607170 ktime_sub_ns +EXPORT_SYMBOL_GPL vmlinux 0x2b608ef9 ide_do_start_stop +EXPORT_SYMBOL_GPL vmlinux 0x2b61b0c8 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x2b9f8e23 nf_net_ipv4_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x2bf2b8e9 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x2bfc4d7f tracepoint_get_iter_range +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c226ab2 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x2c49decc usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x2c7db649 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x2c90a436 ide_init_pc +EXPORT_SYMBOL_GPL vmlinux 0x2ca81886 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d772440 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x2d90870d fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x2d95096f pmac_i2c_get_adapter +EXPORT_SYMBOL_GPL vmlinux 0x2dae625c ide_allocate_dma_engine +EXPORT_SYMBOL_GPL vmlinux 0x2de597bf ide_queue_sense_rq +EXPORT_SYMBOL_GPL vmlinux 0x2e3ab7d3 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x2e49a1cc ide_init_disk +EXPORT_SYMBOL_GPL vmlinux 0x2e611142 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2ea35f9c led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x2ee28d0b anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x2f2aa116 unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x2f353c9d pci_block_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f56591a tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x2f7208a8 ide_issue_pc +EXPORT_SYMBOL_GPL vmlinux 0x2fcd9e17 dpm_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x2ff81dd0 register_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x301fcc0d scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x30373883 queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x3040af45 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30d42426 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x30d7b031 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0x31308aaa pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x315b22c2 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x320424f4 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x32473323 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x324abbd5 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3264555c uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x32d21c30 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x32f17454 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x3399e5f8 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x33d36965 sysdev_register +EXPORT_SYMBOL_GPL vmlinux 0x33f51af5 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x34275124 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x343b93e5 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x3487c73e pmac_i2c_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x348f546c sff_dma_ops +EXPORT_SYMBOL_GPL vmlinux 0x34ad75db macvlan_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0x3506fda6 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x350f4002 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x351e7e6d da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x356641c7 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x35cdee0f blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x35d79d4e ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x35d8c94a sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x362e23ec call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x36483241 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x366aeb8e inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x369cd8ac __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x36ddcb41 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x36fdc7ce sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x377577d5 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x37a553b6 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x37accebf file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x37ad4176 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x38190d4e ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x3870bfc6 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x3885b00c inotify_dentry_parent_queue_event +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38cf0fd4 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x38def074 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x3900f641 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x393e6e9a eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x39819646 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x39c3483e crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x39f97460 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x3a322f54 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x3abf8286 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x3ad388ab sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x3ad4ab4f class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3adb362c eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x3add5cb0 ide_unregister_region +EXPORT_SYMBOL_GPL vmlinux 0x3b82b1f8 swiotlb_sync_single_range_for_device +EXPORT_SYMBOL_GPL vmlinux 0x3ba5ade0 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x3bc33f65 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x3be7af02 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3bef5bce ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x3c6c45ca __tracepoint_power_frequency +EXPORT_SYMBOL_GPL vmlinux 0x3c8b3bb4 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cfdfae5 trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d4f8bb8 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x3d7187c4 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x3dae9b0e dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x3db57197 ide_init_sg_cmd +EXPORT_SYMBOL_GPL vmlinux 0x3dcfa3c3 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3de2b111 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x3e09e4fe pci_unblock_user_cfg_access +EXPORT_SYMBOL_GPL vmlinux 0x3e09fa97 ide_dma_end +EXPORT_SYMBOL_GPL vmlinux 0x3e1f6ab7 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x3e1f97fe swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x3e4430d9 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x3e49f950 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x3e8af9fc crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x3e8afda3 ide_no_data_taskfile +EXPORT_SYMBOL_GPL vmlinux 0x3eb145bc devres_add +EXPORT_SYMBOL_GPL vmlinux 0x3ebbd464 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x3f01570a probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x3f238101 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x3f833038 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x3fbd1be3 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x401968bb crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x401db6a9 ide_pad_transfer +EXPORT_SYMBOL_GPL vmlinux 0x4036e580 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x405c0720 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40b53863 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x40dc54da sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x4116d75b ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x4118c236 of_irq_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x41bf0cb1 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x41d91ba7 pmf_find_function +EXPORT_SYMBOL_GPL vmlinux 0x41dd7b62 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x42444373 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x42494cea ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x425c1c0b ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x42916dee ata_bus_reset +EXPORT_SYMBOL_GPL vmlinux 0x429f0a13 inotify_inode_is_dead +EXPORT_SYMBOL_GPL vmlinux 0x42cf2ecf hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x42f92304 pmf_register_irq_client +EXPORT_SYMBOL_GPL vmlinux 0x430d4b54 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x4366ca67 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x4397ef1b xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x43b8dc17 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x43f0690a usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x4407d32e dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x44497e37 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x447899c3 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x4489a329 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x44a65d5c lock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x44b773c1 ide_pci_set_master +EXPORT_SYMBOL_GPL vmlinux 0x44d49df3 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x44d6a3d4 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x45366668 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x458d98cf usb_buffer_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x45afba44 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45fb2ac3 kill_pid_info_as_uid +EXPORT_SYMBOL_GPL vmlinux 0x465e1d45 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46767215 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x46c72860 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x474e5ed8 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x47cf2778 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x47feaf71 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x4820498e free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x489f6591 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x48ede88f inotify_find_update_watch +EXPORT_SYMBOL_GPL vmlinux 0x4921199a pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x494ad6b8 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x4967e99f scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49b72285 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x49f05e04 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x4a4ab592 device_register +EXPORT_SYMBOL_GPL vmlinux 0x4abdd26b ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x4acedfb8 sysdev_class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x4ad63b27 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x4b6cbfe4 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x4b88f451 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x4ba8262c crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x4bcffb66 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x4bde631b macio_find +EXPORT_SYMBOL_GPL vmlinux 0x4c352812 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x4c72c022 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x4c738e90 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c848371 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x4ca3fbcd xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x4d4391d6 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x4d666fd8 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x4d724676 ide_build_dmatable +EXPORT_SYMBOL_GPL vmlinux 0x4d8f4c15 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x4d97150a dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x4def51e5 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x4e0b9797 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x4e1b6d04 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x4e2cd6d1 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x4e31c582 sysdev_class_register +EXPORT_SYMBOL_GPL vmlinux 0x4e583c0c ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x4e5b51a6 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4e95c35a crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x4ecb2ee0 ide_read_status +EXPORT_SYMBOL_GPL vmlinux 0x4eced54e get_driver +EXPORT_SYMBOL_GPL vmlinux 0x4ed59127 inotify_init_watch +EXPORT_SYMBOL_GPL vmlinux 0x4edd1799 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x4ef1842f dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x4efbd1fd blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x4f036110 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x4f47573d sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x4f6ab79e ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4f7e3b98 ata_sff_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4ffe6179 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x5003c97a sysdev_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x501ba4df blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x5041f798 pmf_call_one +EXPORT_SYMBOL_GPL vmlinux 0x506c67c1 ide_read_error +EXPORT_SYMBOL_GPL vmlinux 0x506fa5c9 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x507f441a shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x5091cab8 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50f5e532 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x5173c250 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x5174850d ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x517cfa9d class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x51af7f83 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x51b0737d crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x51c5b6ba da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x52054376 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x5220c6f3 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x523da501 pm_request_resume +EXPORT_SYMBOL_GPL vmlinux 0x52782ea7 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x528367e6 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x5296c864 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x52d08dc7 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x52d111ea pm_qos_update_requirement +EXPORT_SYMBOL_GPL vmlinux 0x52e810d4 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x532d2f3f da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x54572785 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54fbbe32 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x54ff7723 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x5542b913 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x55b1e7e1 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x563fb5c8 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x5674ecce tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0x569dfc32 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x5704e02d blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x5728773b usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57b29154 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x5888fc9a register_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0x5892f832 release_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x592f5618 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5941646e firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x59a91f48 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x59ca3224 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x5a0e1379 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x5a1902a9 pci_stop_bus_device +EXPORT_SYMBOL_GPL vmlinux 0x5a48f457 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5aa27ed3 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x5aab81c1 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x5b0d97e2 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x5b7a77ea power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x5bc87375 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c5f17e2 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x5c84ebb8 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x5cc008ad sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x5cf73b5d debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x5d0f6f57 kbd_table +EXPORT_SYMBOL_GPL vmlinux 0x5d2bbfef cpu_add_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x5d315500 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d9d0211 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x5dc089da pcibios_finish_adding_to_bus +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5e3f58d4 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x5e45c2a6 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x5e8fa443 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x5e9c7879 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x5ebdbda0 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x5f17a31f sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x5f5d910d ide_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x5f88e37f driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x5f93cc48 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL vmlinux 0x6018dbd2 ide_write_devctl +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL_GPL vmlinux 0x60b6699f regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x60d21396 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x60d68041 inotify_find_watch +EXPORT_SYMBOL_GPL vmlinux 0x614b322d transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x615365fe pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x61629506 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x616481ce __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x61ace2b7 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x61c76a89 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x61c8ea20 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x61d0d544 do_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x622b3e2c srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x6259d88b sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x6278682e usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x629067bd ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x629a7f6e do_posix_clock_nonanosleep +EXPORT_SYMBOL_GPL vmlinux 0x62bb3d98 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x6337a758 pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x633e4c5e regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6340dfdd sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x6366b0ad alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x6453f77c pmac_has_backlight_type +EXPORT_SYMBOL_GPL vmlinux 0x646dac0f of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x649e9592 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x651ca835 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x6523e851 pmf_get_function +EXPORT_SYMBOL_GPL vmlinux 0x654c49e2 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x657a6837 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65f1b1ca regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x66515536 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x6709f2a0 cpu_remove_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0x6723172e xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x67634015 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x678f57f0 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x680348ff da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x680499fc sysdev_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x680bea3d crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x6831ffe6 isa_bridge_pcidev +EXPORT_SYMBOL_GPL vmlinux 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL vmlinux 0x686de585 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a24a1f fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x68d20a0f eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x6901119a trace_nowake_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x69476659 inotify_rm_wd +EXPORT_SYMBOL_GPL vmlinux 0x69bfb44e pmac_i2c_match_adapter +EXPORT_SYMBOL_GPL vmlinux 0x69ccfe2c crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x6a0072c0 ide_check_ireason +EXPORT_SYMBOL_GPL vmlinux 0x6a5d5ef7 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x6a993180 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x6ab6ab4f queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x6abbb1b4 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x6b170955 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x6b2e8539 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x6b43f816 drop_file_write_access +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c8eb98f xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x6cd1b284 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x6ce113de get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d50e282 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x6d6bc362 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x6db013b4 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x6dbaafc3 pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x6e02caac ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x6e3d48f0 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x6e5ee0d2 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x6e60d860 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL vmlinux 0x6ea88d71 get_cpu_sysdev +EXPORT_SYMBOL_GPL vmlinux 0x6ea93113 of_scan_bus +EXPORT_SYMBOL_GPL vmlinux 0x6eda5de9 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0x6f112b49 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x6f2c76b7 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x6f42474c of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x6f5029fa tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x6f7c2ec5 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x6f87f0ff inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x7033a466 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x7052fa1c ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x706c0617 ide_dma_setup +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x70a8e0fb pmf_put_function +EXPORT_SYMBOL_GPL vmlinux 0x70d3a05e disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x70ff4c84 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71b0d540 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x71c8bc95 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x724774f8 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72a32a24 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x7334ebc8 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x735c22ae tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73c73c2d fb_ddc_read +EXPORT_SYMBOL_GPL vmlinux 0x73e123b4 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x74159274 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x742cbdb3 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74ac9c74 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x74b63dfc skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x75019f38 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x75059f9a tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x7516b2bb crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x752d3e27 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x753a04b5 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x755207ea ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x7594235e rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x75b6df20 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x75dfcb7f disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x75eb914f crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x75f6ce21 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x761188fd dpm_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x76173d2e da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x7626b273 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x762f64bf ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x763f43d1 ide_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x764aff83 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x76839f5a usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x76b5a0d6 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0x76f4e1ca usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x76f75c25 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x77065b02 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x770ab3fa rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x773ca527 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x775c643f ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x776f84a2 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x777d2401 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x7787b931 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x779930a8 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x77ae4611 ide_undecoded_slave +EXPORT_SYMBOL_GPL vmlinux 0x77aecc7a sysdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x77d5cc79 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x77fad149 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x781acb7a __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7833192a scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x783a19bb pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x786a3382 ide_cd_expiry +EXPORT_SYMBOL_GPL vmlinux 0x78af7c8f init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x78dc4a49 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x78e4a4ee klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79470fff class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x7948d109 srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x796782d6 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x799f36a8 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x79d2f8a1 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x79dd5ec0 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x7a0591c2 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7a46f8b1 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x7a506562 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x7a54954a sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x7a7e21f9 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0x7ab3c122 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x7abf3ecf ide_pci_init_one +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b23bfdf kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x7b3d39f9 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x7bcd7eb3 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x7bd85285 skb_icv_walk +EXPORT_SYMBOL_GPL vmlinux 0x7bea0cae disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x7c02e7b0 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x7c29471d sysdev_store_int +EXPORT_SYMBOL_GPL vmlinux 0x7c2eb9f7 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x7c40b2b1 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x7c595934 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7cac1cad add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x7cd73836 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x7cd7a287 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x7d198e36 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7d32a2cc led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x7d44d057 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x7d507162 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x7d5409ec vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x7d8e9a39 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dd1885d uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x7ddda710 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e197e70 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x7e275ea8 scsi_complete_async_scans +EXPORT_SYMBOL_GPL vmlinux 0x7e2d29ec ide_pci_clk +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e68339a find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x7e8f3716 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x7ebb1b43 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7ed4a08d ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x7eefcbbe blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x7ef3cbd4 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x7f19c836 unlock_policy_rwsem_write +EXPORT_SYMBOL_GPL vmlinux 0x7f455256 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x7f908366 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x7fab2434 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x7fac9c36 ide_set_pio +EXPORT_SYMBOL_GPL vmlinux 0x7faca1f2 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x7fb47276 of_irq_map_raw +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x800d5050 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x800e0aea regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x8014b6af input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x80282572 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8039d043 selinux_secmark_relabel_packet_permission +EXPORT_SYMBOL_GPL vmlinux 0x8064f20e blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x807bd53f usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80d39bc3 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x80e4f4bb ide_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x80ee55c3 selinux_secmark_refcount_inc +EXPORT_SYMBOL_GPL vmlinux 0x81051730 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x81592e4d bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x8160dc18 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x818d86fb pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x81a8ae58 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x81aecec0 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x81bb0392 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x81bfd2e5 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x81dda92d crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x81faeabd single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x820fad71 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x825a05e7 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x82610caf sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x829eb6c8 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x8376a7e9 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x838203f9 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x83a70860 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x83b6014a ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x83bb54af fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x8412e3c5 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x8412f88f gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x8472c42d ata_port_probe +EXPORT_SYMBOL_GPL vmlinux 0x8475b815 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x84cb79a5 bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x85038ac3 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x8557ee0d swiotlb_sync_single_range_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0x8561cbe9 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x85691339 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x859407d9 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x859f8119 ide_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85cf3b1f attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x85de02a3 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x85e2fdef platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x85e4531d page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x86248449 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x865ddb2f ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86a7f245 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x86aec81c ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x86b1667d hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x86bd779d tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x86f56a06 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x873b5fb3 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x873c5bf1 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87ac1bc6 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x87ac2830 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x87ed6135 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x87f14b5b device_attach +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x885142a6 nf_net_netfilter_sysctl_path +EXPORT_SYMBOL_GPL vmlinux 0x88829b75 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x88854d32 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x88a7c4d1 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x88a800d8 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x88acb104 ide_end_rq +EXPORT_SYMBOL_GPL vmlinux 0x88e86a39 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x88f83049 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x893f28c1 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x896d405e ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x8975617a get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x899458f9 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x899aa788 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x899f95ce pmac_i2c_setmode +EXPORT_SYMBOL_GPL vmlinux 0x89a4d0ab usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x89ff2a99 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x8a16b797 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x8a2dc826 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8a393575 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x8a52de36 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x8a632454 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x8ad97235 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x8af3483f ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x8b1ff252 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x8b2bba1d destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x8b350d91 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x8b39d89b pmac_i2c_get_controller +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b893f05 __pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x8ba0c2cc __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8bf28cbe ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x8c1e02d2 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8c369bdf xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x8c85dad6 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x8cd0db33 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x8cf1ea95 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x8cf2dd69 pmf_do_irq +EXPORT_SYMBOL_GPL vmlinux 0x8d033df4 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x8d0ccee8 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x8d2831ad usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x8d922944 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x8dbe274f __module_address +EXPORT_SYMBOL_GPL vmlinux 0x8edd3d08 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x8edf492e usb_autopm_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x8f344001 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x8f5c3c25 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f9600e8 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x8fa35570 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8fa62fc4 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x8fa74514 sysdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x8fc825f0 ata_sff_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x90696633 ide_retry_pc +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x91222442 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x9149e8b8 inet_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x914fca2c crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x92288463 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x92572a69 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x9275c987 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x92a4d26c rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92d5463a ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x92fb217b dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x934b9bcc ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x93900b83 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x93a2cb47 reserve_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x93abf211 sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x93c4ab88 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x93cb98e7 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x940ad048 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x943cdd37 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x954a34d2 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x955e67a6 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x9570e7ae __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x95763ac4 inode_add_to_lists +EXPORT_SYMBOL_GPL vmlinux 0x95864b93 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x960490c1 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x961a8cd3 unlock_policy_rwsem_read +EXPORT_SYMBOL_GPL vmlinux 0x96533a1c blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x967e8326 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x9691713e proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x969fe99c blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x96c4f63b user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x96ca8f44 pmac_i2c_find_bus +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9716eeab usb_string +EXPORT_SYMBOL_GPL vmlinux 0x97241de8 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x972ddf48 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x9764e3f6 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x976a298d debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x9777175d ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x977c49fd rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x97858377 register_net_sysctl_rotable +EXPORT_SYMBOL_GPL vmlinux 0x978a31a7 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x97b5ed25 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x97bf1e4d pmac_low_i2c_lock +EXPORT_SYMBOL_GPL vmlinux 0x981d6f31 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x985e4724 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x98deb6ba module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x98ebef0b __put_net +EXPORT_SYMBOL_GPL vmlinux 0x9905328f ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x991cc96a register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x99237940 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99cbbf1e inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x9a007c09 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a18e431 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x9a25cf1e spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x9a30acd4 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x9a35a096 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x9a67c42a crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x9a6f96b7 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9ca692b4 pmac_i2c_get_type +EXPORT_SYMBOL_GPL vmlinux 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL vmlinux 0x9cdde4ac each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x9ce7c975 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x9d1295d8 sysdev_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x9d3e1995 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x9d560dab shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x9db9cab3 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9dc15fd7 ide_pci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x9dfc51c1 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x9e35e4c1 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x9e3dfb20 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x9e5acb71 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x9e6878a8 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x9e69e304 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x9e711ad2 pm_qos_requirement +EXPORT_SYMBOL_GPL vmlinux 0x9e8efa68 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x9eaaa2fa sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x9f33dc22 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x9f35c1e5 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x9f40a6d6 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x9f4d059b pmf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x9f827a55 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x9f85ed90 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x9f9fd945 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa0255440 net_ipv4_ctl_path +EXPORT_SYMBOL_GPL vmlinux 0xa04895cc nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xa05cf116 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0xa08e1bf5 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0xa0b00589 blk_abort_queue +EXPORT_SYMBOL_GPL vmlinux 0xa0b658cf pmac_i2c_get_bus_node +EXPORT_SYMBOL_GPL vmlinux 0xa0d17edb put_driver +EXPORT_SYMBOL_GPL vmlinux 0xa0dca451 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xa0e8ae74 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xa0fe3b89 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0xa1af14fc crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa1ca799d dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xa1eb8e83 ide_dma_sff_read_status +EXPORT_SYMBOL_GPL vmlinux 0xa1fc46e8 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0xa23d4ea2 get_device +EXPORT_SYMBOL_GPL vmlinux 0xa29a1214 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xa2b66dd5 user_describe +EXPORT_SYMBOL_GPL vmlinux 0xa2bc7af4 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0xa300bd5f anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0xa341b5ff pmac_i2c_get_channel +EXPORT_SYMBOL_GPL vmlinux 0xa357d56e ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xa38b7f90 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xa39d9220 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xa3a2d9af walk_system_ram_range +EXPORT_SYMBOL_GPL vmlinux 0xa3c6a604 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0xa3d326b1 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0xa40a8590 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0xa410e37c usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0xa512db6d sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xa548ae5b ide_get_best_pio_mode +EXPORT_SYMBOL_GPL vmlinux 0xa54e13a5 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xa5bf5c3e pm_qos_add_requirement +EXPORT_SYMBOL_GPL vmlinux 0xa5c36cec inotify_unmount_inodes +EXPORT_SYMBOL_GPL vmlinux 0xa5e7fe0d platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa603ccbc led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa61ea4f4 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xa627ccee usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0xa65f9329 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0xa66fb16d device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa68b80fe ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0xa6d118bb vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0xa731b372 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0xa7840774 ata_pio_queue_task +EXPORT_SYMBOL_GPL vmlinux 0xa7925920 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xa87ca692 fib_rules_cleanup_ops +EXPORT_SYMBOL_GPL vmlinux 0xa885d5ac trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa91fd534 ide_tf_load +EXPORT_SYMBOL_GPL vmlinux 0xa92b1128 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xa97121d8 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xa9835795 inet_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa98f1e87 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0xa997bc2f sysdev_class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9c809d5 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0xaa266f5b cpu_remove_sysdev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa5310f9 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xaa8c4696 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0xaabac7ef ide_check_atapi_device +EXPORT_SYMBOL_GPL vmlinux 0xaac9a33f tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xaace05d1 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0xaae054e6 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xab3f5c1d debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xab4186a8 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xab57e311 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xab7320dc crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0xab819c29 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xabad6cdb skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xabd436e9 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0xabecf502 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xac34dfea pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0xac73f906 sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xac77de3f regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0xac78256c __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0xacb3b1af ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0xacc4a912 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0xaccf4d47 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xad03a8cd ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xad0f24ab scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0xad5b6170 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xadf9243e rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0xae08aa25 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae973ed4 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0xaec753b3 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xaedc962c hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0xaf028839 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0xaf0bd997 __ide_pci_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xaf279af1 usb_buffer_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xaf3f6fe0 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xafe0af7d __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0xb07e99c1 pmac_i2c_get_dev_addr +EXPORT_SYMBOL_GPL vmlinux 0xb0aa812e fips_enabled +EXPORT_SYMBOL_GPL vmlinux 0xb0b5e677 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0xb10be8f5 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0xb116e545 ata_sff_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb191ca50 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1b361f9 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0xb1c01363 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0xb1fc0b0c ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xb2770fb7 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xb28c57aa ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0xb2a6c027 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xb2b63772 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0xb2d30f88 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xb2d976bc cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0xb31508ca platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0xb3240bcc platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xb3439851 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb3473025 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0xb38e0533 ide_host_add +EXPORT_SYMBOL_GPL vmlinux 0xb3b2fbb0 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb3bdef05 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0xb3e7e87b kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0xb46747f0 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xb4c4a305 sysdev_show_int +EXPORT_SYMBOL_GPL vmlinux 0xb4d0b351 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb529bf3f blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xb546eb25 elv_register +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a6dab8 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0xb5ca3de3 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xb5d0596e shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xb5d8a76a usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xb61c05b8 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xb65091b3 selinux_secmark_refcount_dec +EXPORT_SYMBOL_GPL vmlinux 0xb671afa5 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6c4f94b scsi_nl_add_transport +EXPORT_SYMBOL_GPL vmlinux 0xb6da46c3 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0xb71d39ce sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0xb7382d98 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0xb744e274 pm_request_idle +EXPORT_SYMBOL_GPL vmlinux 0xb744fa43 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xb79c13c4 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0xb82efede usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0xb85eee5a hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xb8759c2c srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xb8a87241 user_read +EXPORT_SYMBOL_GPL vmlinux 0xb8b8e55a scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0xb8de9936 ide_dma_sff_timer_expiry +EXPORT_SYMBOL_GPL vmlinux 0xb94d9f10 sysdev_create_file +EXPORT_SYMBOL_GPL vmlinux 0xb9562902 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xb95d2824 sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0xb96a6555 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xb9d06da8 pmac_low_i2c_unlock +EXPORT_SYMBOL_GPL vmlinux 0xb9eb3aa9 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xb9effd16 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xba365fa0 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0xba783cef sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0xba792d1c usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xba8adb8e fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0xbab7eae6 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xbae34c27 scsi_nl_remove_transport +EXPORT_SYMBOL_GPL vmlinux 0xbae85042 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xbb88c85f usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0xbbd34730 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0xbc7d1331 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xbd183b70 ide_port_scan +EXPORT_SYMBOL_GPL vmlinux 0xbd3e5c7d ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0xbd6ff672 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0xbd7cf724 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0xbda71010 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0xbdcfb4b9 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbe116723 do_posix_clock_nosettime +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe5ea2ca __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xbeae0d61 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0xbeea7a2b srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xbf06b95a inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xbf1cc04b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xbf1fbccf generic_drop_inode +EXPORT_SYMBOL_GPL vmlinux 0xbf3354a4 ide_tf_read +EXPORT_SYMBOL_GPL vmlinux 0xbf5a316d devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xbfe7385b usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xc009ce19 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xc01fdfca hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xc02235f1 rtc_lock +EXPORT_SYMBOL_GPL vmlinux 0xc0388ef2 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0xc03fb778 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xc0683db3 ide_dma_start +EXPORT_SYMBOL_GPL vmlinux 0xc086789e rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xc0bd1eeb spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0xc126e890 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xc12f7e0d trace_profile_buf_nmi +EXPORT_SYMBOL_GPL vmlinux 0xc131a60e screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xc13ad49b ide_capacity_proc_fops +EXPORT_SYMBOL_GPL vmlinux 0xc1673635 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc1d058c2 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc22fedf7 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0xc23e80bf put_device +EXPORT_SYMBOL_GPL vmlinux 0xc31b9133 ide_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0xc3301f02 rcu_expedited_torture_stats +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc37dc625 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0xc38fc193 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0xc399468f scsi_nl_remove_driver +EXPORT_SYMBOL_GPL vmlinux 0xc39fb9c3 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0xc3c1192f ata_sff_host_intr +EXPORT_SYMBOL_GPL vmlinux 0xc3d56d61 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0xc3ebc6d6 device_move +EXPORT_SYMBOL_GPL vmlinux 0xc3ec38f3 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xc3fdcffb ata_sff_port_start +EXPORT_SYMBOL_GPL vmlinux 0xc405f59d class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc4311949 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0xc44462a7 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0xc46bf6ac ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xc46d877e schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4b08ecb kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xc4b33aa6 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4d1ff46 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0xc59e4a23 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0xc5a79fab unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0xc5ac796e sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0xc606cd3c boot_cpuid +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc639b347 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0xc660e2c3 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc673e23e ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xc6eb6cde device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xc6f55d58 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0xc73b2617 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0xc73ef465 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0xc74c57a4 driver_register +EXPORT_SYMBOL_GPL vmlinux 0xc77e1c91 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0xc7ea01ed usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xc84bb1b2 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0xc8912ffe pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0xc8a3e5ef spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0xc8c5787e register_pernet_gen_device +EXPORT_SYMBOL_GPL vmlinux 0xc8d8ee15 ide_pio_cycle_time +EXPORT_SYMBOL_GPL vmlinux 0xc9260d6a rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xc9512019 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9a0fd60 ide_host_register +EXPORT_SYMBOL_GPL vmlinux 0xca32a2aa ide_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xca3969fd driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca99e1e2 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0xcac4584a sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0xcaf99071 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xcb0c2ebf __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xcb3d53aa ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xcb4cd5bb ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xcb51cabe klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xcb8d9aac usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0xcb8db082 ide_dma_test_irq +EXPORT_SYMBOL_GPL vmlinux 0xcbca0b0d usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xcbcfab66 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0xcbd8ad71 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0xcbe6dbfd scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xcc0353cd ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0xcc175cc4 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc5e2e19 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0xcc73a5dd unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd99de7e simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0xcdb01877 ktime_add_ns +EXPORT_SYMBOL_GPL vmlinux 0xcdc59f6d regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdfed241 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xce16f231 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0xce272b2c crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0xce4ab915 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0xce53508f find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xce71b377 __pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0xceb4e8da ata_sff_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0xced4ff4c relay_open +EXPORT_SYMBOL_GPL vmlinux 0xcf0132ff ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0xcf1bc114 device_del +EXPORT_SYMBOL_GPL vmlinux 0xcf539ec5 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xcf8af983 trace_profile_buf +EXPORT_SYMBOL_GPL vmlinux 0xcfbb9f5b platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcfc2cd39 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcaeab4 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfecdb02 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd04f7c18 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0xd08addb8 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0xd0b40aed pmf_do_functions +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0d2858b user_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd104fabd led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1953c24 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0xd1a2cf78 user_update +EXPORT_SYMBOL_GPL vmlinux 0xd1f118cc led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0xd1f20cfe rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd238635f rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xd261f035 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2eadcae d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xd2f31d6f ide_host_remove +EXPORT_SYMBOL_GPL vmlinux 0xd331fc06 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd33bf2c7 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xd33ed3d3 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0xd363e418 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xd367c961 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0xd3860c8e usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0xd3cc9a64 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xd3fd4fcc sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xd47a2360 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0xd4b790d9 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xd4d8daac inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xd517df80 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0xd54222aa usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xd548f0df transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd57356e3 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0xd58c3b3b register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xd5a4933f ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd5e88a7f pmac_i2c_xfer +EXPORT_SYMBOL_GPL vmlinux 0xd68a7632 inet_csk_clone +EXPORT_SYMBOL_GPL vmlinux 0xd68ef92e console_drivers +EXPORT_SYMBOL_GPL vmlinux 0xd6bcdfc4 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0xd6d787c5 check_media_bay_by_base +EXPORT_SYMBOL_GPL vmlinux 0xd72f5e91 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xd73139bb task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0xd73ef534 sysdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd75e0707 ata_sff_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xd76047ec bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd7697429 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0xd7e59ae8 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xd7e8ba30 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0xd821964e add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0xd83f94c3 pmf_call_function +EXPORT_SYMBOL_GPL vmlinux 0xd88af428 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0xd8bf982c fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0xd8d0e164 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0xd8d48593 do_sync_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0xd8dd6246 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0xd8e7da0a ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd90c4b07 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0xd92499ff ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0xd936605a usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0xd98add4a bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd9aa9f33 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0xd9c52a4d dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0xd9f5ba4a debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0xda1be8e1 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0xdaaa1f3a br_handle_frame_hook +EXPORT_SYMBOL_GPL vmlinux 0xdae00b0c rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xdae43788 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb274e52 monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0xdb2ec6c1 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xdb98c601 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xdbce5064 do_add_mount +EXPORT_SYMBOL_GPL vmlinux 0xdbdc536d of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0xdc5c3530 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xdc7e4544 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xdca68a6f use_module +EXPORT_SYMBOL_GPL vmlinux 0xdcaca58e relay_reset +EXPORT_SYMBOL_GPL vmlinux 0xdd1b88a3 ide_exec_command +EXPORT_SYMBOL_GPL vmlinux 0xdd2fcc1b sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xdd4e599e ide_pio_bytes +EXPORT_SYMBOL_GPL vmlinux 0xdd5f2536 ide_read_bcount_and_ireason +EXPORT_SYMBOL_GPL vmlinux 0xdd61efb9 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xdd870a03 bd_claim_by_disk +EXPORT_SYMBOL_GPL vmlinux 0xdd8a920e security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xddd43dae xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0xde2e0d32 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0xde417b81 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0xde46d56e ide_dma_unmap_sg +EXPORT_SYMBOL_GPL vmlinux 0xde5b7022 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0xdebdff7e ide_queue_pc_tail +EXPORT_SYMBOL_GPL vmlinux 0xdf110bfb inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xdf27877b register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xdf284347 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0xdf360179 led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0xdf448004 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0xdf469b43 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0xdf580949 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xdf74de6b ata_port_start +EXPORT_SYMBOL_GPL vmlinux 0xdf78da40 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0xdf993535 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0xdfac0250 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xdfdd4a2f __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xdff5f883 unregister_pernet_gen_subsys +EXPORT_SYMBOL_GPL vmlinux 0xe0ac8bad inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0xe0c5f9c6 pmac_i2c_attach_adapter +EXPORT_SYMBOL_GPL vmlinux 0xe0cca33e xfrm_aead_get_byname +EXPORT_SYMBOL_GPL vmlinux 0xe10dbb0c sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0xe1387cd0 skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xe14b0a94 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0xe16ece53 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xe1c8a9cd ide_set_dma_mode +EXPORT_SYMBOL_GPL vmlinux 0xe207a1ef skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe207bff4 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0xe20b2b32 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0xe215df39 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0xe284af08 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0xe33eb61e trace_define_common_fields +EXPORT_SYMBOL_GPL vmlinux 0xe345e3b6 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xe3665cdd tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0xe36789f7 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xe445732b dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0xe45952ea ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xe4816524 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xe49e1f6c ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe49ff3b0 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xe4b5ad93 ide_prep_sense +EXPORT_SYMBOL_GPL vmlinux 0xe4d4a296 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0xe508d262 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xe530071c pm_qos_remove_requirement +EXPORT_SYMBOL_GPL vmlinux 0xe54c5f7d led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xe5923561 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0xe5db92e1 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xe609b351 pmac_i2c_open +EXPORT_SYMBOL_GPL vmlinux 0xe61e8b2a __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xe6402762 input_class +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe64974e2 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe66496df __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xe668afb0 ata_bmdma_mode_filter +EXPORT_SYMBOL_GPL vmlinux 0xe6792f18 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe687e09c locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xe6c29c6e task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xe6cfd0c3 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xe72b809d usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xe741cba4 ata_port_disable +EXPORT_SYMBOL_GPL vmlinux 0xe7737dd5 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xe7973aa1 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xe7ac6d1c init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xe7b49823 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0xe7d485ca irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0xe7e74461 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0xe828731e inotify_rm_watch +EXPORT_SYMBOL_GPL vmlinux 0xe8458176 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe8789a12 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0xe87f9ce6 cpu_add_sysdev_attr +EXPORT_SYMBOL_GPL vmlinux 0xe8881aa7 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xe901175f __dev_addr_unsync +EXPORT_SYMBOL_GPL vmlinux 0xe91517d9 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9771c93 sysdev_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe9786428 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe9a732cd usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0xe9cf9bbb crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea35f5de inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea44737d usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0xea8501cc devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0xeae74760 scsi_nl_send_transport_msg +EXPORT_SYMBOL_GPL vmlinux 0xeb285926 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xeb4c1fc8 __tracepoint_block_remap +EXPORT_SYMBOL_GPL vmlinux 0xeb64bce0 put_pid +EXPORT_SYMBOL_GPL vmlinux 0xebcc83c2 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0xebfed8c8 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xec1a75a9 __dev_addr_sync +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec2f99a2 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xec5892a8 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xec67948f fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xec7f3d3a register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xecea75d0 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xed3b138e rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xedc2994d ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0xede732a5 get_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xee96a498 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xeef4f649 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xef0169bf blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xef05c8d9 dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0xef45c4bf power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0xef4e963e __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef7c92fd lookup_instantiate_filp +EXPORT_SYMBOL_GPL vmlinux 0xef82fdba srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0xefdd5a63 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xefe21106 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0xf015caec vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0xf02e0c76 ide_release_dma_engine +EXPORT_SYMBOL_GPL vmlinux 0xf04fbf86 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0xf06c53b1 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xf0a9da20 pmac_i2c_adapter_to_bus +EXPORT_SYMBOL_GPL vmlinux 0xf0ad4dd3 pmf_unregister_irq_client +EXPORT_SYMBOL_GPL vmlinux 0xf0b76c87 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0xf0d19bca fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xf0ecf6b3 ide_port_unregister_devices +EXPORT_SYMBOL_GPL vmlinux 0xf103e0a4 k_handler +EXPORT_SYMBOL_GPL vmlinux 0xf105d00d ide_in_drive_list +EXPORT_SYMBOL_GPL vmlinux 0xf1463412 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf177e2b5 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf185dd45 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xf186561d sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0xf1d6c57d skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xf1e1e4d4 pmac_i2c_detach_adapter +EXPORT_SYMBOL_GPL vmlinux 0xf1e91344 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xf2763dad pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xf281c2f7 ide_setup_pci_noise +EXPORT_SYMBOL_GPL vmlinux 0xf2cf14c4 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0xf2f0b05d generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0xf34127f0 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xf3471541 do_rw_taskfile +EXPORT_SYMBOL_GPL vmlinux 0xf34806ec hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xf380ef6a seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0xf39f6bfa tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0xf3a2c3ac ide_intr +EXPORT_SYMBOL_GPL vmlinux 0xf3a8efcb i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xf3ab30de bd_release_from_disk +EXPORT_SYMBOL_GPL vmlinux 0xf3bcc1b6 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0xf400875b pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0xf41b33f3 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf48a3604 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4fc367a usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xf4fe5f13 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xf5384ac1 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0xf539ce48 sysdev_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf562a5ef bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0xf582a6c9 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5f6464f power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0xf61c3fa3 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xf683f126 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xf68402fe rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0xf6baf792 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xf6bcbd73 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf711e0d3 ide_pci_setup_ports +EXPORT_SYMBOL_GPL vmlinux 0xf7469418 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0xf7fbc574 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0xf814ffc7 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xf84e04d4 inotify_init +EXPORT_SYMBOL_GPL vmlinux 0xf863e82a flush_work +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8f16439 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf904f2cb regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xf92215e9 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0xf954cf35 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xf95f3033 ide_read_altstatus +EXPORT_SYMBOL_GPL vmlinux 0xf962aac7 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9cb1a66 ide_dma_lost_irq +EXPORT_SYMBOL_GPL vmlinux 0xfa03f3fa ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xfa057e25 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xfa280245 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xfa42aebf put_inotify_watch +EXPORT_SYMBOL_GPL vmlinux 0xfa471671 net_assign_generic +EXPORT_SYMBOL_GPL vmlinux 0xfaa13003 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xfab99c99 sk_clone +EXPORT_SYMBOL_GPL vmlinux 0xfad6e031 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xfb1789e1 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0xfb2d56b7 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xfb2f3fd5 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xfb39d2dc scsi_nl_add_driver +EXPORT_SYMBOL_GPL vmlinux 0xfb6f5b6d pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0xfb8a4fe4 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xfb9a5ec8 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xfba0641a dm_put +EXPORT_SYMBOL_GPL vmlinux 0xfbdd0902 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc1af08b security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xfc5b01c4 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0xfc62b3f3 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0xfc8e5ddb user_match +EXPORT_SYMBOL_GPL vmlinux 0xfcd2fda8 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0xfd27663f usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0xfd28f6b1 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xfd38234c scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0xfd3c3d63 rtnl_kill_links +EXPORT_SYMBOL_GPL vmlinux 0xfddf4beb dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0xfde0b92c crypto_larval_error +EXPORT_SYMBOL_GPL vmlinux 0xfe2b1604 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0xfe412d20 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0xfe791fae driver_add_kobj +EXPORT_SYMBOL_GPL vmlinux 0xfe8f89ff input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfec867b6 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xff1263b1 devres_get +EXPORT_SYMBOL_GPL vmlinux 0xff19dca3 device_rename +EXPORT_SYMBOL_GPL vmlinux 0xff50145b regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xff701738 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xff98158f usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0xff9e2974 device_add +EXPORT_SYMBOL_GPL vmlinux 0xffa54629 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xffaf7bbb __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0xffe39a20 xfrm_audit_state_delete +EXPORT_UNUSED_SYMBOL vmlinux 0x00000000 simple_prepare_write --- linux-2.6.32.orig/debian.master/control.d/vars.sparc64-smp +++ linux-2.6.32/debian.master/control.d/vars.sparc64-smp @@ -0,0 +1,6 @@ +supported="64-bit UltraSPARC SMP" +target="Geared toward desktop or server systems." +desc="64-bit UltraSPARC SMP" +bootloader="silo" +provides="redhat-cluster-modules, ivtv-modules" +arch="sparc" --- linux-2.6.32.orig/debian.master/control.d/vars.powerpc64-smp +++ linux-2.6.32/debian.master/control.d/vars.powerpc64-smp @@ -0,0 +1,6 @@ +supported="64-bit PowerPC SMP" +target="Geared toward desktop or server systems." +desc="64-bit PowerPC SMP" +bootloader="yaboot" +provides="redhat-cluster-modules, ivtv-modules" +arch="powerpc" --- linux-2.6.32.orig/debian.master/control.d/vars.server +++ linux-2.6.32/debian.master/control.d/vars.server @@ -0,0 +1,6 @@ +arch="amd64" +supported="Server" +target="Geared toward 64 bit server systems." +desc="x86_64" +bootloader="grub-pc | grub | lilo (>= 19.1)" +provides="redhat-cluster-modules, kvm-api-4, ivtv-modules, ndiswrapper-modules-1.9" --- linux-2.6.32.orig/debian.master/control.d/vars.powerpc-smp +++ linux-2.6.32/debian.master/control.d/vars.powerpc-smp @@ -0,0 +1,6 @@ +supported="32-bit PowerPC SMP" +target="Geared toward desktop or server systems." +desc="32-bit PowerPC SMP" +bootloader="yaboot" +provides="redhat-cluster-modules, ivtv-modules" +arch="powerpc" --- linux-2.6.32.orig/debian.master/control.d/vars.preempt +++ linux-2.6.32/debian.master/control.d/vars.preempt @@ -0,0 +1,6 @@ +arch="amd64" +supported="Preempt" +target="Geared toward low latency systems." +desc="x86_64" +bootloader="grub-pc | grub | lilo (>= 19.1)" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9" --- linux-2.6.32.orig/debian.master/control.d/vars.generic +++ linux-2.6.32/debian.master/control.d/vars.generic @@ -0,0 +1,6 @@ +arch="i386 amd64" +supported="Generic" +target="Geared toward desktop systems." +desc="x86/x86_64" +bootloader="grub-pc | grub | lilo (>= 19.1)" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9" --- linux-2.6.32.orig/debian.master/control.d/vars.powerpc +++ linux-2.6.32/debian.master/control.d/vars.powerpc @@ -0,0 +1,6 @@ +supported="32-bit PowerPC" +target="Geared toward desktop or server systems." +desc="32-bit PowerPC" +bootloader="yaboot" +provides="redhat-cluster-modules, ivtv-modules" +arch="powerpc" --- linux-2.6.32.orig/debian.master/control.d/vars.generic-pae +++ linux-2.6.32/debian.master/control.d/vars.generic-pae @@ -0,0 +1,6 @@ +arch="i386" +supported="Generic" +target="Geared toward 32 bit desktop systems with more then 4GB RAM." +desc="x86" +bootloader="grub-pc | grub | lilo (>= 19.1)" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9" --- linux-2.6.32.orig/debian.master/control.d/vars.386 +++ linux-2.6.32/debian.master/control.d/vars.386 @@ -0,0 +1,6 @@ +arch="i386" +supported="Alternate x86 (486 and better)" +target="Geared toward desktop systems." +desc="i386" +bootloader="grub-pc | grub | lilo (>= 19.1)" +provides="kvm-api-4, ivtv-modules" --- linux-2.6.32.orig/debian.master/control.d/vars.lpia +++ linux-2.6.32/debian.master/control.d/vars.lpia @@ -0,0 +1,8 @@ +arch="lpia" +supported="Intel Atom" +desc="Intel Atom processors" +target="Geared toward LPIA-based mobile devices" +bootloader="grub-pc | grub | lilo (>= 19.1)" +provides="kvm-api-4, redhat-cluster-modules" +section_image="universe/admin" +do_debug="Yes" --- linux-2.6.32.orig/debian.master/control.d/vars.versatile +++ linux-2.6.32/debian.master/control.d/vars.versatile @@ -0,0 +1,8 @@ +arch="armel" +supported="Versatile" +desc="Versatile-based systems" +target="PB, AB, Qemu, etc." +bootloader="" +provides="" +section_image="universe/base" +do_debug="Yes" --- linux-2.6.32.orig/debian.master/control.d/vars.sparc64 +++ linux-2.6.32/debian.master/control.d/vars.sparc64 @@ -0,0 +1,6 @@ +supported="64-bit UltraSPARC" +target="Geared toward desktop or server systems." +desc="64-bit UltraSPARC" +bootloader="silo" +provides="redhat-cluster-modules, ivtv-modules" +arch="sparc" --- linux-2.6.32.orig/debian.master/control.d/flavour-control.stub +++ linux-2.6.32/debian.master/control.d/flavour-control.stub @@ -0,0 +1,78 @@ +# Items that get replaced: +# FLAVOUR +# DESC +# ARCH +# SUPPORTED +# TARGET +# BOOTLOADER +# =PROVIDES= +# +# Items marked with =FOO= are optional +# +# This file describes the template for packages that are created for each flavour +# in debian/control.d/vars.* +# +# This file gets edited in a couple of places. See the debian/control.stub rule in +# debian/rules. PGGVER, ABINUM, and SRCPKGNAME are all converted in the +# process of creating debian/control. +# +# The flavour specific strings (ARCH, DESC, etc) are converted using values from the various +# flavour files in debian/control.d/vars.* +# +# XXX: Leave the blank line before the first package!! + +Package: linux-image-PKGVER-ABINUM-FLAVOUR +Architecture: ARCH +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, =PROVIDES= +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3), wireless-crda +Conflicts: hotplug (<< 0.0.20040105-1) +Breaks: lvm2 (<< 2.02.54-1ubuntu3) +Recommends: BOOTLOADER +Suggests: fdutils, SRCPKGNAME-doc-PKGVER | SRCPKGNAME-source-PKGVER, SRCPKGNAME-tools +Description: Linux kernel image for version PKGVER on DESC + This package contains the Linux kernel image for version PKGVER on + DESC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports SUPPORTED processors. + . + TARGET + . + You likely do not want to install this package directly. Instead, install + the linux-FLAVOUR meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-PKGVER-ABINUM-FLAVOUR +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), SRCPKGNAME-headers-PKGVER-ABINUM, ${shlibs:Depends} +Provides: SRCPKGNAME-headers, SRCPKGNAME-headers-2.6 +Description: Linux kernel headers for version PKGVER on DESC + This package provides kernel header files for version PKGVER on + DESC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/SRCPKGNAME-headers-PKGVER-ABINUM/debian.README.gz for details. + +Package: linux-image-PKGVER-ABINUM-FLAVOUR-dbgsym +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version PKGVER on DESC + This package provides a kernel debug image for version PKGVER on + DESC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. --- linux-2.6.32.orig/debian.master/control.d/vars.ia64 +++ linux-2.6.32/debian.master/control.d/vars.ia64 @@ -0,0 +1,6 @@ +supported="IA-64 SMP" +target="Geared toward desktop or server systems." +desc="IA-64 SMP" +bootloader="elilo (>= 3.6-1)" +provides="redhat-cluster-modules, ivtv-modules" +arch="ia64" --- linux-2.6.32.orig/debian.master/sub-flavours/virtual.vars +++ linux-2.6.32/debian.master/sub-flavours/virtual.vars @@ -0,0 +1,10 @@ +# Based on server flavour +arch="i386 amd64" +supported="Virtual" +target="Geared toward virtual machine guests." +desc="x86/x86_64" +bootloader="grub-pc | grub | lilo (>= 19.1)" +is_sub="true" +# The provides and conflicts are REQUIRED +provides="redhat-cluster-modules" +conflicts="linux-image-PKGVER-ABINUM-generic-pae, linux-image-PKGVER-ABINUM-server" --- linux-2.6.32.orig/debian.master/sub-flavours/virtual.list +++ linux-2.6.32/debian.master/sub-flavours/virtual.list @@ -0,0 +1,107 @@ +arch/*/{crypto,kernel,oprofile} +crypto/* +drivers/acpi/* +drivers/ata/ahci.ko +drivers/ata/ata_generic.ko +drivers/ata/ata_piix.ko +drivers/ata/libata.ko +drivers/block/nbd.ko +drivers/block/loop.ko +drivers/block/floppy.ko +drivers/block/cryptoloop.ko +drivers/block/xen-blkfront.ko +drivers/cdrom/cdrom.ko +drivers/char/hangcheck-timer.ko +drivers/char/lp.ko +drivers/char/nvram.ko +drivers/char/ppdev.ko +drivers/char/raw.ko +drivers/input/evbug.ko +drivers/input/evdev.ko +drivers/input/gameport/gameport.ko +drivers/input/mouse/psmouse.ko +drivers/input/serio/serio_raw.ko +drivers/input/serio/serport.ko +drivers/input/joydev.ko +drivers/input/misc/uinput.ko +drivers/input/touchscreen/usbtouchscreen.ko +drivers/input/xen-kbdfront.ko +drivers/md/* +drivers/message/fusion* +drivers/misc/eeprom_93cx6.ko +drivers/net/8139too.ko +drivers/net/8139cp.ko +drivers/net/appletalk/ipddp.ko +drivers/net/bonding/bonding.ko +drivers/net/bsd_comp.ko +drivers/net/dummy.ko +drivers/net/e1000/e1000.ko +drivers/net/eql.ko +drivers/net/ifb.ko +drivers/net/mii.ko +drivers/net/ne2k-pci.ko +drivers/net/netconsole.ko +drivers/net/pcnet32.ko +drivers/net/ppp_async.ko +drivers/net/ppp_deflate.ko +drivers/net/ppp_generic.ko +drivers/net/ppp_mppe.ko +drivers/net/pppoe.ko +drivers/net/pppol2tp.ko +drivers/net/pppox.ko +drivers/net/ppp_synctty.ko +drivers/net/slhc.ko +drivers/net/slip.ko +drivers/net/tun.ko +drivers/net/veth.ko +drivers/net/vmxnet3/vmxnet3.ko +drivers/net/xen-netfront.ko +drivers/parport/parport.ko +drivers/parport/parport_pc.ko +drivers/pci/hotplug/acpiphp.ko +drivers/net/tulip/tulip.ko +drivers/scsi/BusLogic.ko +drivers/scsi/iscsi_tcp.ko +drivers/scsi/libiscsi.ko +drivers/scsi/libsas/* +drivers/scsi/libsas/libsas.ko +drivers/scsi/qla1280.ko +drivers/scsi/raid_class.ko +drivers/scsi/scsi_mod.ko +drivers/scsi/scsi_transport_fc.ko +drivers/scsi/scsi_transport_iscsi.ko +drivers/scsi/scsi_transport_sas.ko +drivers/scsi/scsi_transport_spi.ko +drivers/scsi/scsi_wait_scan.ko +drivers/scsi/sd_mod.ko +drivers/scsi/sg.ko +drivers/scsi/sr_mod.ko +drivers/scsi/vmw_pvscsi.ko +drivers/usb/core/usbcore.ko +drivers/usb/storage/usb-storage.ko +drivers/video/cirrusfb.ko +drivers/video/console/bitblit.ko +drivers/video/console/fbcon.ko +drivers/video/console/font.ko +drivers/video/console/softcursor.ko +drivers/video/console/tileblit.ko +drivers/video/output.ko +drivers/video/syscopyarea.ko +drivers/video/sysfillrect.ko +drivers/video/sysimgblt.ko +drivers/video/vesafb.ko +drivers/video/vga16fb.ko +drivers/video/vgastate.ko +drivers/video/xen-fbfront.ko +drivers/virtio/virtio_balloon.ko +drivers/watchdog/softdog.ko +drivers/xen/* +fs/* +lib/* +net/* +sound/core/* +sound/pci/snd-ens1370.ko +sound/drivers/pcsp/snd-pcsp.ko +ubuntu/e1000e/e1000e.ko +ubuntu/squashfs/squashfs.ko +ubuntu/iscsitarget/iscsi_trgt.ko --- linux-2.6.32.orig/debian.master/sub-flavours/README +++ linux-2.6.32/debian.master/sub-flavours/README @@ -0,0 +1,12 @@ +Sub flavours are flavours that are built based on other builds. IOW, they +are usually a subset of something else. + +Requirements: + +debian/sub-flavours/.list : The file list, uses glob syntax +debian/sub-flavours/.vars : The make vars, similar to normal flavours +debian/rules.d/.mk : Add _sub var listing the , e.g. + server_sub = virtual would mean virtual is + based on the server flavour. + +Note, the vars must include a conflicts with the flavour it was built on. --- linux-2.6.32.orig/debian.master/sub-flavours/control.stub +++ linux-2.6.32/debian.master/sub-flavours/control.stub @@ -0,0 +1,39 @@ +# Items that get replaced: +# FLAVOUR +# DESC +# ARCH +# SUPPORTED +# TARGET +# BOOTLOADER +# =PROVIDES= +# =CONFLICTS= +# +# Items marked with =FOO= are optional +# +# XXX: Leave the blank line before the first package!! + +Package: linux-image-PKGVER-ABINUM-FLAVOUR +Architecture: ARCH +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, =PROVIDES= +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1), =CONFLICTS= +Recommends: BOOTLOADER +Suggests: fdutils, linux-doc-PKGVER | linux-source-PKGVER +Description: Linux kernel image for version PKGVER on DESC + This package contains the Linux kernel image for version PKGVER on + DESC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports SUPPORTED processors. + . + TARGET + . + You likely do not want to install this package directly. Instead, install + the linux-FLAVOUR meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. --- linux-2.6.32.orig/security/security.c +++ linux-2.6.32/security/security.c @@ -18,7 +18,8 @@ #include /* Boot-time LSM user choice */ -static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1]; +static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] = + CONFIG_DEFAULT_SECURITY; /* things that live in capability.c */ extern struct security_operations default_security_ops; @@ -79,8 +80,10 @@ * * Return true if: * -The passed LSM is the one chosen by user at boot time, - * -or user didn't specify a specific LSM and we're the first to ask - * for registration permission, + * -or the passed LSM is configured as the default and the user did not + * choose an alternate LSM at boot time, + * -or there is no default LSM set and the user didn't specify a + * specific LSM and we're the first to ask for registration permission, * -or the passed LSM is currently loaded. * Otherwise, return false. */ @@ -199,9 +202,9 @@ return security_ops->quota_on(dentry); } -int security_syslog(int type) +int security_syslog(int type, bool from_file) { - return security_ops->syslog(type); + return security_ops->syslog(type, from_file); } int security_settime(struct timespec *ts, struct timezone *tz) @@ -386,6 +389,7 @@ return 0; return security_ops->path_mkdir(path, dentry, mode); } +EXPORT_SYMBOL(security_path_mkdir); int security_path_rmdir(struct path *path, struct dentry *dentry) { @@ -393,6 +397,7 @@ return 0; return security_ops->path_rmdir(path, dentry); } +EXPORT_SYMBOL(security_path_rmdir); int security_path_unlink(struct path *path, struct dentry *dentry) { @@ -400,6 +405,7 @@ return 0; return security_ops->path_unlink(path, dentry); } +EXPORT_SYMBOL(security_path_unlink); int security_path_symlink(struct path *path, struct dentry *dentry, const char *old_name) @@ -408,6 +414,7 @@ return 0; return security_ops->path_symlink(path, dentry, old_name); } +EXPORT_SYMBOL(security_path_symlink); int security_path_link(struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry) @@ -416,6 +423,7 @@ return 0; return security_ops->path_link(old_dentry, new_dir, new_dentry); } +EXPORT_SYMBOL(security_path_link); int security_path_rename(struct path *old_dir, struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry) @@ -426,6 +434,7 @@ return security_ops->path_rename(old_dir, old_dentry, new_dir, new_dentry); } +EXPORT_SYMBOL(security_path_rename); int security_path_truncate(struct path *path, loff_t length, unsigned int time_attrs) @@ -434,6 +443,27 @@ return 0; return security_ops->path_truncate(path, length, time_attrs); } + +int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + mode_t mode) +{ + if (unlikely(IS_PRIVATE(dentry->d_inode))) + return 0; + return security_ops->path_chmod(dentry, mnt, mode); +} + +int security_path_chown(struct path *path, uid_t uid, gid_t gid) +{ + if (unlikely(IS_PRIVATE(path->dentry->d_inode))) + return 0; + return security_ops->path_chown(path, uid, gid); +} + +int security_path_chroot(struct path *path) +{ + return security_ops->path_chroot(path); +} +EXPORT_SYMBOL(security_path_truncate); #endif int security_inode_create(struct inode *dir, struct dentry *dentry, int mode) @@ -505,6 +535,7 @@ return 0; return security_ops->inode_readlink(dentry); } +EXPORT_SYMBOL(security_inode_readlink); int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) { @@ -519,6 +550,7 @@ return 0; return security_ops->inode_permission(inode, mask); } +EXPORT_SYMBOL(security_inode_permission); int security_inode_setattr(struct dentry *dentry, struct iattr *attr) { @@ -619,6 +651,7 @@ { return security_ops->file_permission(file, mask); } +EXPORT_SYMBOL(security_file_permission); int security_file_alloc(struct file *file) { --- linux-2.6.32.orig/security/commoncap.c +++ linux-2.6.32/security/commoncap.c @@ -27,6 +27,7 @@ #include #include #include +#include /* * If a non-root user executes a setuid-root binary in @@ -956,12 +957,16 @@ /** * cap_syslog - Determine whether syslog function is permitted * @type: Function requested + * @from_file: Whether this request came from an open file (i.e. /proc) * * Determine whether the current process is permitted to use a particular * syslog function, returning 0 if permission is granted, -ve if not. */ -int cap_syslog(int type) +int cap_syslog(int type, bool from_file) { + /* /proc/kmsg can open be opened by CAP_SYS_ADMIN */ + if (type != 1 && from_file) + return 0; if ((type != 3 && type != 10) && !capable(CAP_SYS_ADMIN)) return -EPERM; return 0; --- linux-2.6.32.orig/security/device_cgroup.c +++ linux-2.6.32/security/device_cgroup.c @@ -514,6 +514,7 @@ return -EPERM; } +EXPORT_SYMBOL(devcgroup_inode_permission); int devcgroup_inode_mknod(int mode, dev_t dev) { --- linux-2.6.32.orig/security/inode.c +++ linux-2.6.32/security/inode.c @@ -168,13 +168,13 @@ mutex_lock(&parent->d_inode->i_mutex); *dentry = lookup_one_len(name, parent, strlen(name)); - if (!IS_ERR(dentry)) { + if (!IS_ERR(*dentry)) { if ((mode & S_IFMT) == S_IFDIR) error = mkdir(parent->d_inode, *dentry, mode); else error = create(parent->d_inode, *dentry, mode); } else - error = PTR_ERR(dentry); + error = PTR_ERR(*dentry); mutex_unlock(&parent->d_inode->i_mutex); return error; --- linux-2.6.32.orig/security/Kconfig +++ linux-2.6.32/security/Kconfig @@ -162,8 +162,46 @@ source security/selinux/Kconfig source security/smack/Kconfig source security/tomoyo/Kconfig +source security/apparmor/Kconfig source security/integrity/ima/Kconfig +choice + prompt "Default security module" + default DEFAULT_SECURITY_SELINUX if SECURITY_SELINUX + default DEFAULT_SECURITY_SMACK if SECURITY_SMACK + default DEFAULT_SECURITY_TOMOYO if SECURITY_TOMOYO + default DEFAULT_SECURITY_APPARMOR if SECURITY_APPARMOR + default DEFAULT_SECURITY_DAC + + help + Select the security module that will be used by default if the + kernel parameter security= is not specified. + + config DEFAULT_SECURITY_SELINUX + bool "SELinux" if SECURITY_SELINUX=y + + config DEFAULT_SECURITY_SMACK + bool "Simplified Mandatory Access Control" if SECURITY_SMACK=y + + config DEFAULT_SECURITY_TOMOYO + bool "TOMOYO" if SECURITY_TOMOYO=y + + config DEFAULT_SECURITY_APPARMOR + bool "AppArmor" if SECURITY_APPARMOR=y + + config DEFAULT_SECURITY_DAC + bool "Unix Discretionary Access Controls" + +endchoice + +config DEFAULT_SECURITY + string + default "selinux" if DEFAULT_SECURITY_SELINUX + default "smack" if DEFAULT_SECURITY_SMACK + default "tomoyo" if DEFAULT_SECURITY_TOMOYO + default "apparmor" if DEFAULT_SECURITY_APPARMOR + default "" if DEFAULT_SECURITY_DAC + endmenu --- linux-2.6.32.orig/security/capability.c +++ linux-2.6.32/security/capability.c @@ -308,6 +308,22 @@ { return 0; } + +static int cap_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + mode_t mode) +{ + return 0; +} + +static int cap_path_chown(struct path *path, uid_t uid, gid_t gid) +{ + return 0; +} + +static int cap_path_chroot(struct path *root) +{ + return 0; +} #endif static int cap_file_permission(struct file *file, int mask) @@ -977,6 +993,9 @@ set_to_cap_if_null(ops, path_link); set_to_cap_if_null(ops, path_rename); set_to_cap_if_null(ops, path_truncate); + set_to_cap_if_null(ops, path_chmod); + set_to_cap_if_null(ops, path_chown); + set_to_cap_if_null(ops, path_chroot); #endif set_to_cap_if_null(ops, file_permission); set_to_cap_if_null(ops, file_alloc_security); --- linux-2.6.32.orig/security/min_addr.c +++ linux-2.6.32/security/min_addr.c @@ -33,6 +33,9 @@ { int ret; + if (write && !capable(CAP_SYS_RAWIO)) + return -EPERM; + ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos); update_mmap_min_addr(); --- linux-2.6.32.orig/security/Makefile +++ linux-2.6.32/security/Makefile @@ -6,9 +6,11 @@ subdir-$(CONFIG_SECURITY_SELINUX) += selinux subdir-$(CONFIG_SECURITY_SMACK) += smack subdir-$(CONFIG_SECURITY_TOMOYO) += tomoyo +subdir-$(CONFIG_SECURITY_APPARMOR) += apparmor # always enable default capabilities -obj-y += commoncap.o min_addr.o +obj-y += commoncap.o +obj-$(CONFIG_MMU) += min_addr.o # Object file lists obj-$(CONFIG_SECURITY) += security.o capability.o @@ -18,6 +20,7 @@ obj-$(CONFIG_SECURITY_SMACK) += smack/built-in.o obj-$(CONFIG_AUDIT) += lsm_audit.o obj-$(CONFIG_SECURITY_TOMOYO) += tomoyo/built-in.o +obj-$(CONFIG_SECURITY_APPARMOR) += apparmor/built-in.o obj-$(CONFIG_SECURITY_ROOTPLUG) += root_plug.o obj-$(CONFIG_CGROUP_DEVICE) += device_cgroup.o --- linux-2.6.32.orig/security/smack/smack_lsm.c +++ linux-2.6.32/security/smack/smack_lsm.c @@ -157,12 +157,12 @@ * * Returns 0 on success, error code otherwise. */ -static int smack_syslog(int type) +static int smack_syslog(int type, bool from_file) { int rc; char *sp = current_security(); - rc = cap_syslog(type); + rc = cap_syslog(type, from_file); if (rc != 0) return rc; --- linux-2.6.32.orig/security/keys/keyring.c +++ linux-2.6.32/security/keys/keyring.c @@ -524,9 +524,8 @@ struct key *keyring; int bucket; - keyring = ERR_PTR(-EINVAL); if (!name) - goto error; + return ERR_PTR(-EINVAL); bucket = keyring_hash(name); @@ -553,17 +552,18 @@ KEY_SEARCH) < 0) continue; - /* we've got a match */ - atomic_inc(&keyring->usage); - read_unlock(&keyring_name_lock); - goto error; + /* we've got a match but we might end up racing with + * key_cleanup() if the keyring is currently 'dead' + * (ie. it has a zero usage count) */ + if (!atomic_inc_not_zero(&keyring->usage)) + continue; + goto out; } } - read_unlock(&keyring_name_lock); keyring = ERR_PTR(-ENOKEY); - - error: +out: + read_unlock(&keyring_name_lock); return keyring; } /* end find_keyring_by_name() */ --- linux-2.6.32.orig/security/keys/keyctl.c +++ linux-2.6.32/security/keys/keyctl.c @@ -1236,6 +1236,7 @@ */ long keyctl_session_to_parent(void) { +#ifdef TIF_NOTIFY_RESUME struct task_struct *me, *parent; const struct cred *mycred, *pcred; struct cred *cred, *oldcred; @@ -1326,6 +1327,15 @@ error_keyring: key_ref_put(keyring_r); return ret; + +#else /* !TIF_NOTIFY_RESUME */ + /* + * To be removed when TIF_NOTIFY_RESUME has been implemented on + * m68k/xtensa + */ +#warning TIF_NOTIFY_RESUME not implemented + return -EOPNOTSUPP; +#endif /* !TIF_NOTIFY_RESUME */ } /*****************************************************************************/ --- linux-2.6.32.orig/security/keys/request_key.c +++ linux-2.6.32/security/keys/request_key.c @@ -336,8 +336,10 @@ key_already_present: mutex_unlock(&key_construction_mutex); - if (dest_keyring) + if (dest_keyring) { + __key_link(dest_keyring, key_ref_to_ptr(key_ref)); up_write(&dest_keyring->sem); + } mutex_unlock(&user->cons_lock); key_put(key); *_key = key = key_ref_to_ptr(key_ref); @@ -428,6 +430,11 @@ if (!IS_ERR(key_ref)) { key = key_ref_to_ptr(key_ref); + if (dest_keyring) { + construct_get_dest_keyring(&dest_keyring); + key_link(dest_keyring, key); + key_put(dest_keyring); + } } else if (PTR_ERR(key_ref) != -EAGAIN) { key = ERR_CAST(key_ref); } else { --- linux-2.6.32.orig/security/selinux/hooks.c +++ linux-2.6.32/security/selinux/hooks.c @@ -76,6 +76,7 @@ #include #include #include +#include #include "avc.h" #include "objsec.h" @@ -2050,11 +2051,11 @@ return dentry_has_perm(cred, NULL, dentry, FILE__QUOTAON); } -static int selinux_syslog(int type) +static int selinux_syslog(int type, bool from_file) { int rc; - rc = cap_syslog(type); + rc = cap_syslog(type, from_file); if (rc) return rc; @@ -2366,7 +2367,7 @@ initrlim = init_task.signal->rlim + i; rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur); } - update_rlimit_cpu(rlim->rlim_cur); + update_rlimit_cpu(current->signal->rlim[RLIMIT_CPU].rlim_cur); } } --- linux-2.6.32.orig/security/selinux/ss/ebitmap.c +++ linux-2.6.32/security/selinux/ss/ebitmap.c @@ -128,7 +128,7 @@ cmap_idx = delta / NETLBL_CATMAP_MAPSIZE; cmap_sft = delta % NETLBL_CATMAP_MAPSIZE; c_iter->bitmap[cmap_idx] - |= e_iter->maps[cmap_idx] << cmap_sft; + |= e_iter->maps[i] << cmap_sft; } e_iter = e_iter->next; } --- linux-2.6.32.orig/security/integrity/ima/ima_main.c +++ linux-2.6.32/security/integrity/ima/ima_main.c @@ -324,6 +324,7 @@ MAY_EXEC, FILE_MMAP); return 0; } +EXPORT_SYMBOL(ima_file_mmap); /** * ima_bprm_check - based on policy, collect/store measurement. --- linux-2.6.32.orig/security/apparmor/lib.c +++ linux-2.6.32/security/apparmor/lib.c @@ -0,0 +1,100 @@ +/* + * AppArmor security module + * + * This file contains basic common functions used in AppArmor + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include + +#include "include/audit.h" + +/** + * skip_spaces - Removes leading whitespace from @str. + * @str: The string to be stripped. + * + * From: 2.6.33 lib/string.c + * + * Returns a pointer to the first non-whitespace character in @str. + */ +char *skip_spaces(const char *str) +{ + while (isspace(*str)) + ++str; + return (char *)str; +} + +/** + * aa_split_fqname - split a fqname into a profile and namespace name + * @fqname: a full qualified name in namespace profile format + * @ns_name: pointer to portion of the string containing the ns name + * + * Returns: profile name or NULL if one is not specified + * + * Split a namespace name from a profile name (see policy.c for naming + * description). If a portion of the name is missing it returns NULL for + * that portion. + * + * NOTE: may modifiy the @fqname string. The pointers returned point + * into the @fqname string. + */ +char *aa_split_fqname(char *fqname, char **ns_name) +{ + char *name = strstrip(fqname); + + *ns_name = NULL; + if (name[0] == ':') { + char *split = strchr(&name[1], ':'); + if (split) { + /* overwrite ':' with \0 */ + *split = 0; + name = skip_spaces(split + 1); + } else + /* a ns name without a following profile is allowed */ + name = NULL; + *ns_name = &name[1]; + } + if (name && *name == 0) + name = NULL; + + return name; +} + +/** + * aa_strneq - compare null terminated @str to a non null terminated substring + * @str: a null terminated string + * @sub: a substring, not necessarily null terminated + * @len: length of @sub to compare + * + * The @str string must be full consumed for this to be considered a match + */ +bool aa_strneq(const char *str, const char *sub, int len) +{ + int res = strncmp(str, sub, len); + if (res) + return 0; + if (str[len] == 0) + return 1; + return 0; +} + +void aa_info_message(const char *str) +{ + struct aa_audit sa = { + .gfp_mask = GFP_KERNEL, + .info = str, + }; + printk(KERN_INFO "AppArmor: %s\n", str); + if (audit_enabled) + aa_audit(AUDIT_APPARMOR_STATUS, NULL, &sa, NULL); +} + --- linux-2.6.32.orig/security/apparmor/match.c +++ linux-2.6.32/security/apparmor/match.c @@ -0,0 +1,389 @@ +/* + * AppArmor security module + * + * This file contains AppArmor dfa based regular expression matching engine + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/match.h" + +/** + * do_vfree - workqueue routine for freeing vmalloced memory + * @work: data to be freed + * + * The work_struct is overlayed to the data being freed, as at the point + * the work is scheduled the data is no longer valid, be its freeing + * needs to be delayed until safe. + */ +static void do_vfree(struct work_struct *work) +{ + vfree(work); +} + +/** + * free_table - free a table allocated by unpack table + * @table: table to unpack (MAYBE NULL) + */ +static void free_table(struct table_header *table) +{ + if (!table) + return; + + if (is_vmalloc_addr(table)) { + /* Data is no longer valid so just use the allocated space + * as the work_struct + */ + struct work_struct *work = (struct work_struct *) table; + INIT_WORK(work, do_vfree); + schedule_work(work); + } else + kzfree(table); +} + +/** + * unpack_table - unpack a dfa table (one of accept, default, base, next check) + * @blob: data to unpack + * @bsize: size of blob + * + * Returns: pointer to table else NULL on failure + * + * NOTE: must be freed by free_table (not kmalloc) + */ +static struct table_header *unpack_table(char *blob, size_t bsize) +{ + struct table_header *table = NULL; + struct table_header th; + int unmap_alias = 0; + size_t tsize; + + if (bsize < sizeof(struct table_header)) + goto out; + + /* loaded td_id's start at 1, subtract 1 now to avoid doing + * it every time we use td_id as an index + */ + th.td_id = be16_to_cpu(*(u16 *) (blob)) - 1; + th.td_flags = be16_to_cpu(*(u16 *) (blob + 2)); + th.td_lolen = be32_to_cpu(*(u32 *) (blob + 8)); + blob += sizeof(struct table_header); + + if (!(th.td_flags == YYTD_DATA16 || th.td_flags == YYTD_DATA32 || + th.td_flags == YYTD_DATA8)) + goto out; + + tsize = table_size(th.td_lolen, th.td_flags); + if (bsize < tsize) + goto out; + + /* freed by free_table */ + table = kmalloc(tsize, GFP_KERNEL | __GFP_NOWARN); + if (!table) { + tsize = tsize < sizeof(struct work_struct) ? + sizeof(struct work_struct) : tsize; + unmap_alias = 1; + table = vmalloc(tsize); + } + if (table) { + *table = th; + if (th.td_flags == YYTD_DATA8) + UNPACK_ARRAY(table->td_data, blob, th.td_lolen, + u8, byte_to_byte); + else if (th.td_flags == YYTD_DATA16) + UNPACK_ARRAY(table->td_data, blob, th.td_lolen, + u16, be16_to_cpu); + else if (th.td_flags == YYTD_DATA32) + UNPACK_ARRAY(table->td_data, blob, th.td_lolen, + u32, be32_to_cpu); + else + goto fail; + } + +out: + if (unmap_alias) + vm_unmap_aliases(); + return table; +fail: + free_table(table); + return NULL; +} + +/** + * verify_dfa - verify that all the transitions and states in the dfa tables + * are in bounds. + * @dfa: dfa to test (NOT NULL) + * @flags: flags controlling what type of accept table are acceptable + * + * Assumes dfa has gone through the first pass verification done by unpacking + * NOTE: this does not valid accept table values + * + * Returns: %0 else error code on failure to verify + */ +static int verify_dfa(struct aa_dfa *dfa, int flags) +{ + size_t i, state_count, trans_count; + int error = -EPROTO; + + /* check that required tables exist */ + if (!(dfa->tables[YYTD_ID_DEF] && + dfa->tables[YYTD_ID_BASE] && + dfa->tables[YYTD_ID_NXT] && dfa->tables[YYTD_ID_CHK])) + goto out; + + /* accept.size == default.size == base.size */ + state_count = dfa->tables[YYTD_ID_BASE]->td_lolen; + if (ACCEPT1_FLAGS(flags)) { + if (!dfa->tables[YYTD_ID_ACCEPT]) + goto out; + if (state_count != dfa->tables[YYTD_ID_ACCEPT]->td_lolen) + goto out; + } + if (ACCEPT2_FLAGS(flags)) { + if (!dfa->tables[YYTD_ID_ACCEPT2]) + goto out; + if (state_count != dfa->tables[YYTD_ID_ACCEPT2]->td_lolen) + goto out; + } + if (state_count != dfa->tables[YYTD_ID_DEF]->td_lolen) + goto out; + + /* next.size == chk.size */ + trans_count = dfa->tables[YYTD_ID_NXT]->td_lolen; + if (trans_count != dfa->tables[YYTD_ID_CHK]->td_lolen) + goto out; + + /* if equivalence classes then its table size must be 256 */ + if (dfa->tables[YYTD_ID_EC] && + dfa->tables[YYTD_ID_EC]->td_lolen != 256) + goto out; + + if (flags & DFA_FLAG_VERIFY_STATES) { + for (i = 0; i < state_count; i++) { + if (DEFAULT_TABLE(dfa)[i] >= state_count) + goto out; + /* TODO: do check that DEF state recursion terminates */ + if (BASE_TABLE(dfa)[i] >= trans_count + 256) + goto out; + } + + for (i = 0; i < trans_count; i++) { + if (NEXT_TABLE(dfa)[i] >= state_count) + goto out; + if (CHECK_TABLE(dfa)[i] >= state_count) + goto out; + } + } + + error = 0; +out: + return error; +} + +/** + * aa_dfa_free - free a dfa allocated by aa_dfa_unpack + * @dfa: the dfa to free (MAYBE NULL) + * + * Requires: reference count to dfa == 0 + */ +static void aa_dfa_free(struct aa_dfa *dfa) +{ + if (dfa) { + int i; + + for (i = 0; i < ARRAY_SIZE(dfa->tables); i++) { + free_table(dfa->tables[i]); + dfa->tables[i] = NULL; + } + } + kfree(dfa); +} + +/** + * aa_dfa_free_kref - free aa_dfa by kref (called by aa_put_dfa) + * @kr: kref callback for freeing of a dfa (NOT NULL) + */ +void aa_dfa_free_kref(struct kref *kref) +{ + struct aa_dfa *dfa = container_of(kref, struct aa_dfa, count); + aa_dfa_free(dfa); +} + +/** + * aa_dfa_unpack - unpack the binary tables of a serialized dfa + * @blob: aligned serialized stream of data to unpack (NOT NULL) + * @size: size of data to unpack + * @flags: flags controlling what type of accept tables are acceptable + * + * Unpack a dfa that has been serialized. Dfa format and information in + * Documentation/AppArmor/dfa.txt + * Assumes the dfa @blob stream has been aligned on a 8 byte boundry + * + * Returns: an unpacked dfa ready for matching or ERR_PTR on failure + */ +struct aa_dfa *aa_dfa_unpack(void *blob, size_t size, int flags) +{ + int hsize; + int error = -ENOMEM; + char *data = blob; + struct table_header *table = NULL; + struct aa_dfa *dfa = kzalloc(sizeof(struct aa_dfa), GFP_KERNEL); + if (!dfa) + goto fail; + + kref_init(&dfa->count); + + error = -EPROTO; + + /* get dfa table set header */ + if (size < sizeof(struct table_set_header)) + goto fail; + + if (ntohl(*(u32 *) data) != YYTH_MAGIC) + goto fail; + + hsize = ntohl(*(u32 *) (data + 4)); + if (size < hsize) + goto fail; + + dfa->flags = ntohs(*(u16 *) (data + 12)); + data += hsize; + size -= hsize; + + while (size > 0) { + table = unpack_table(data, size); + if (!table) + goto fail; + + switch (table->td_id) { + case YYTD_ID_ACCEPT: + if (!(table->td_flags & ACCEPT1_FLAGS(flags))) + goto fail; + break; + case YYTD_ID_ACCEPT2: + if (!(table->td_flags & ACCEPT2_FLAGS(flags))) + goto fail; + break; + case YYTD_ID_BASE: + if (table->td_flags != YYTD_DATA32) + goto fail; + break; + case YYTD_ID_DEF: + case YYTD_ID_NXT: + case YYTD_ID_CHK: + if (table->td_flags != YYTD_DATA16) + goto fail; + break; + case YYTD_ID_EC: + if (table->td_flags != YYTD_DATA8) + goto fail; + break; + default: + goto fail; + } + /* check for duplicate table entry */ + if (dfa->tables[table->td_id]) + goto fail; + dfa->tables[table->td_id] = table; + data += table_size(table->td_lolen, table->td_flags); + size -= table_size(table->td_lolen, table->td_flags); + table = NULL; + } + + error = verify_dfa(dfa, flags); + if (error) + goto fail; + + return dfa; + +fail: + free_table(table); + aa_dfa_free(dfa); + return ERR_PTR(error); +} + +/** + * aa_dfa_match_len - traverse @dfa to find state @str stops at + * @dfa: the dfa to match @str against (NOT NULL) + * @start: the state of the dfa to start matching in + * @str: the string of bytes to match against the dfa (NOT NULL) + * @len: length of the string of bytes to match + * + * aa_dfa_match_len will match @str against the dfa and return the state it + * finished matching in. The final state can be used to look up the accepting + * label, or as the start state of a continuing match. + * + * This function will happily match again the 0 byte and only finishes + * when @len input is consumed. + * + * Returns: final state reached after input is consumed + */ +unsigned int aa_dfa_match_len(struct aa_dfa *dfa, unsigned int start, + const char *str, int len) +{ + u16 *def = DEFAULT_TABLE(dfa); + u32 *base = BASE_TABLE(dfa); + u16 *next = NEXT_TABLE(dfa); + u16 *check = CHECK_TABLE(dfa); + unsigned int state = start, pos; + + if (state == 0) + return 0; + + /* current state is , matching character *str */ + if (dfa->tables[YYTD_ID_EC]) { + /* Equivalence class table defined */ + u8 *equiv = EQUIV_TABLE(dfa); + /* default is direct to next state */ + for (; len; len--) { + pos = base[state] + equiv[(u8) *str++]; + if (check[pos] == state) + state = next[pos]; + else + state = def[state]; + } + } else { + /* default is direct to next state */ + for (; len; len--) { + pos = base[state] + (u8) *str++; + if (check[pos] == state) + state = next[pos]; + else + state = def[state]; + } + } + + return state; +} + +/** + * aa_dfa_next_state - traverse @dfa to find state @str stops at + * @dfa: the dfa to match @str against (NOT NULL) + * @start: the state of the dfa to start matching in + * @str: the null terminated string of bytes to match against the dfa (NOT NULL) + * + * aa_dfa_next_state will match @str against the dfa and return the state it + * finished matching in. The final state can be used to look up the accepting + * label, or as the start state of a continuing match. + * + * Returns: final state reached after input is consumed + */ +unsigned int aa_dfa_match(struct aa_dfa *dfa, unsigned int start, + const char *str) +{ + return aa_dfa_match_len(dfa, start, str, strlen(str)); +} --- linux-2.6.32.orig/security/apparmor/path.c +++ linux-2.6.32/security/apparmor/path.c @@ -0,0 +1,243 @@ +/* + * AppArmor security module + * + * This file contains AppArmor function for pathnames + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/apparmor.h" +#include "include/path.h" +#include "include/policy.h" + +/** + * d_namespace_path - lookup a name associated with a given path + * @path: path to lookup (NOT NULL) + * @buf: buffer to store path to (NOT NULL) + * @buflen: length of @buf + * @name: return pointer for start of path name with in @buf (NOT NULL) + * @flags: flags controling path lookup + * + * Handle path name lookup. + * + * Returns: %0 else error code if path lookup fails + * When no error the path name is returned in @name which points to + * to a position in @buf + */ +static int d_namespace_path(struct path *path, char *buf, int buflen, + char **name, int flags) +{ + struct path root, tmp; + char *res; + int deleted, connected; + int error = 0; + + /* Get the root we want to resolve too */ + if (flags & PATH_CHROOT_REL) { + /* resolve paths relative to chroot */ + read_lock(¤t->fs->lock); + root = current->fs->root; + /* released below */ + path_get(&root); + read_unlock(¤t->fs->lock); + } else { + /* resolve paths relative to namespace */ + root.mnt = current->nsproxy->mnt_ns->root; + root.dentry = root.mnt->mnt_root; + /* released below */ + path_get(&root); + } + + spin_lock(&dcache_lock); + /* There is a race window between path lookup here and the + * need to strip the " (deleted) string that __d_path applies + * Detect the race and relookup the path + * + * The stripping of (deleted) is a hack that could be removed + * with an updated __d_path + */ + do { + tmp = root; + deleted = d_unlinked(path->dentry); + res = __d_path(path, &tmp, buf, buflen); + + } while (deleted != d_unlinked(path->dentry)); + spin_unlock(&dcache_lock); + + *name = res; + /* handle error conditions - and still allow a partial path to + * be returned. + */ + if (IS_ERR(res)) { + error = PTR_ERR(res); + *name = buf; + goto out; + } + if (deleted) { + /* On some filesystems, newly allocated dentries appear to the + * security_path hooks as a deleted dentry except without an + * inode allocated. + * + * Remove the appended deleted text and return as string for + * normal mediation, or auditing. The (deleted) string is + * guarenteed to be added in this case, so just strip it. + */ + buf[buflen - 11] = 0; /* - (len(" (deleted)") +\0) */ + + if (path->dentry->d_inode && !(flags & PATH_MEDIATE_DELETED)) { + error = -ENOENT; + goto out; + } + } + + /* Determine if the path is connected to the expected root */ + connected = tmp.dentry == root.dentry && tmp.mnt == root.mnt; + + /* If the path is not connected, then remove any leading / that + * __d_path may have returned. + * Unless + * specifically directed to connect the path, + * OR + * if in a chroot and doing chroot relative paths and the path + * resolves to the namespace root (would be connected outside + * of chroot) and specifically directed to connect paths to + * namespace root. + */ + if (!connected && + !(flags & PATH_CONNECT_PATH) && + !((flags & PATH_CHROOT_REL) && (flags & PATH_CHROOT_NSCONNECT) && + (tmp.mnt == current->nsproxy->mnt_ns->root && + tmp.dentry == current->nsproxy->mnt_ns->root->mnt_root))) { + /* disconnected path, don't return pathname starting with '/' */ + error = -ESTALE; + if (*res == '/') + *name = res + 1; + } + +out: + path_put(&root); + + return error; +} + +/** + * get_name_to_buffer - get the pathname to a buffer ensure dir / is appended + * @path: path to get name for (NOT NULL) + * @flags: flags controlling path lookup + * @buffer: buffer to put name in (NOT NULL) + * @size: size of buffer + * @name: on return contains position of path name in @buffer (NOT NULL) + * + * Returns: %0 else error on failure + */ +static int get_name_to_buffer(struct path *path, int flags, char *buffer, + int size, char **name) +{ + int adjust = (flags & PATH_IS_DIR) ? 1 : 0; + int error = d_namespace_path(path, buffer, size - adjust, name, flags); + + if (!error && (flags & PATH_IS_DIR) && (*name)[1] != '\0') + /* + * Append "/" to the pathname. The root directory is a special + * case; it already ends in slash. + */ + strcpy(&buffer[size - 2], "/"); + + return error; +} + +/** + * aa_get_name - compute the pathname of a file + * @path: path the file (NOT NULL) + * @flags: flags controling path name generation + * @buffer: buffer that aa_get_name() allocated (NOT NULL) + * @name: the generated path name if !error + * + * @name is a pointer to the beginning of the pathname (which usually differs + * from the beginning of the buffer), or NULL. If there is an error @name + * may contain a partial or invalid name that can be used for audit purposes, + * but it can not be used for mediation. + * + * We need PATH_IS_DIR to indicate whether the file is a directory or not + * because the file may not yet exist, and so we cannot check the inode's + * file type. + * + * Returns: %0 else error code if could retrieve name + */ +int aa_get_name(struct path *path, int flags, char **buffer, char **name) +{ + char *buf, *str = NULL; + int size = 256; + int error; + + *name = NULL; + *buffer = NULL; + for (;;) { + /* freed by caller */ + buf = kmalloc(size, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + error = get_name_to_buffer(path, flags, buf, size, &str); + if (!error || (error == -ENOENT) || (error == -ESTALE)) + break; + + kfree(buf); + size <<= 1; + if (size > aa_g_path_max) + return -ENAMETOOLONG; + } + *buffer = buf; + *name = str; + + return error; +} + +/** + * sysctl_pathname - generate a pathname for a sysctl + * @table: sysctl name table (NOT NULL) + * @buffer: buffer to put name in (NOT NULL) + * @buflen: length of @buffer + * + * Returns: sysctl path name in @buffer or NULL on error + */ +char *sysctl_pathname(struct ctl_table *table, char *buffer, int buflen) +{ + if (buflen < 1) + return NULL; + buffer += --buflen; + *buffer = '\0'; + + while (table) { + int namelen = strlen(table->procname); + + if (buflen < namelen + 1) + return NULL; + buflen -= namelen + 1; + buffer -= namelen; + memcpy(buffer, table->procname, namelen); + *--buffer = '/'; + table = table->parent; + } + if (buflen < 4) + return NULL; + buffer -= 4; + memcpy(buffer, "/sys", 4); + + return buffer; +} --- linux-2.6.32.orig/security/apparmor/apparmorfs-24.c +++ linux-2.6.32/security/apparmor/apparmorfs-24.c @@ -0,0 +1,61 @@ +/* + * AppArmor security module + * + * This file contains AppArmor /sys/kernel/secrutiy/apparmor interface functions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + * + * + * This file contain functions providing an interface for <= AppArmor 2.4 + * compatibility. It is dependent on CONFIG_SECURITY_APPARMOR_COMPAT_24 + * being set (see Makefile). + */ + +#include +#include +#include +#include +#include +#include + +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/policy.h" + + +/* apparmor/matching */ +static ssize_t aa_matching_read(struct file *file, char __user *buf, + size_t size, loff_t *ppos) +{ + const char matching[] = "pattern=aadfa audit perms=crwxamlk/ " + "user::other"; + + return simple_read_from_buffer(buf, size, ppos, matching, + sizeof(matching) - 1); +} + +const struct file_operations aa_fs_matching_fops = { + .read = aa_matching_read, +}; + +/* apparmor/features */ +static ssize_t aa_features_read(struct file *file, char __user *buf, + size_t size, loff_t *ppos) +{ + const char features[] = "file=3.1 capability=2.0 network=1.0 " + "change_hat=1.5 change_profile=1.1 " "aanamespaces=1.1 rlimit=1.1"; + + return simple_read_from_buffer(buf, size, ppos, features, + sizeof(features) - 1); +} + +const struct file_operations aa_fs_features_fops = { + .read = aa_features_read, +}; --- linux-2.6.32.orig/security/apparmor/net.c +++ linux-2.6.32/security/apparmor/net.c @@ -0,0 +1,167 @@ +/* + * AppArmor security module + * + * This file contains AppArmor network mediation + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/net.h" +#include "include/policy.h" + +#include "af_names.h" + +static const char *sock_type_names[] = { + "unknown(0)", + "stream", + "dgram", + "raw", + "rdm", + "seqpacket", + "dccp", + "unknown(7)", + "unknown(8)", + "unknown(9)", + "packet", +}; + +struct aa_audit_net { + struct aa_audit base; + + int family, type, protocol; + +}; + +/* audit callback for net specific fields */ +static void audit_cb(struct audit_buffer *ab, struct aa_audit *va) +{ + struct aa_audit_net *sa = container_of(va, struct aa_audit_net, base); + + if (sa->family || sa->type) { + if (address_family_names[sa->family]) { + audit_log_format(ab, " family="); + audit_log_string(ab, address_family_names[sa->family]); + } else { + audit_log_format(ab, " family=\"unknown(%d)\"", + sa->family); + } + if (sock_type_names[sa->type]) { + audit_log_format(ab, " sock_type="); + audit_log_string(ab, sock_type_names[sa->type]); + } else { + audit_log_format(ab, " sock_type=\"unknown(%d)\"", + sa->type); + } + audit_log_format(ab, " protocol=%d", sa->protocol); + } + +} + +/** + * aa_audit_net - audit network access + * @profile: profile being enforced (NOT NULL) + * @sa: audit data (NOT NULL) + * + * Returns: %0 or sa->error else other errorcode on failure + */ +static int aa_audit_net(struct aa_profile *profile, struct aa_audit_net *sa) +{ + int type = AUDIT_APPARMOR_AUTO; + + if (likely(!sa->base.error)) { + u16 audit_mask = profile->net.audit[sa->family]; + if (likely((AUDIT_MODE(profile) != AUDIT_ALL) && + !(1 << sa->type & audit_mask))) + return 0; + type = AUDIT_APPARMOR_AUDIT; + } else { + u16 quiet_mask = profile->net.quiet[sa->family]; + u16 kill_mask = 0; + u16 denied = (1 << sa->type) & ~quiet_mask; + + if (denied & kill_mask) + type = AUDIT_APPARMOR_KILL; + + if ((denied & quiet_mask) && + AUDIT_MODE(profile) != AUDIT_NOQUIET && + AUDIT_MODE(profile) != AUDIT_ALL) + return COMPLAIN_MODE(profile) ? 0 : sa->base.error; + } + + return aa_audit(type, profile, &sa->base, audit_cb); +} + +/** + * aa_net_perm - very course network access check + * @profile: profile being enforced (NOT NULL) + * @operation: name of the operation being checked (NOT NULL) + * @family: network family + * @type: network type + * @protocol: network protocol + * + * Returns: %0 else error if permission denied + */ +int aa_net_perm(struct aa_profile *profile, char *operation, + int family, int type, int protocol) +{ + u16 family_mask; + struct aa_audit_net sa = { + .base.operation = operation, + .base.gfp_mask = GFP_KERNEL, + .family = family, + .type = type, + .protocol = protocol, + }; + + if ((family < 0) || (family >= AF_MAX)) + return -EINVAL; + + if ((type < 0) || (type >= SOCK_MAX)) + return -EINVAL; + + /* unix domain and netlink sockets are handled by ipc */ + if (family == AF_UNIX || family == AF_NETLINK) + return 0; + + family_mask = profile->net.allowed[family]; + + sa.base.error = (family_mask & (1 << type)) ? 0 : -EACCES; + + return aa_audit_net(profile, &sa); +} + +/** + * aa_revalidate_sk - Revalidate access to a sock + * @sk: sock being revalidated (NOT NULL) + * @operation: name of operation being checked (NOT NULL) + * + * Returns: %0 else error if permission denied + */ +int aa_revalidate_sk(struct sock *sk, char *operation) +{ + struct aa_profile *profile; + int error = 0; + + /* aa_revalidate_sk should not be called from interrupt context + * don't mediate these calls as they are not task related + */ + if (in_interrupt()) + return 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_net_perm(profile, operation, + sk->sk_family, sk->sk_type, + sk->sk_protocol); + + return error; +} --- linux-2.6.32.orig/security/apparmor/sid.c +++ linux-2.6.32/security/apparmor/sid.c @@ -0,0 +1,55 @@ +/* + * AppArmor security module + * + * This file contains AppArmor security identifier (sid) manipulation fns + * + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + * + * + * AppArmor allocates a unique sid for every profile loaded. If a profile + * is replaced it receive the sid of the profile it is replacing. + * + * The sid value of 0 is invalid. + */ + +#include +#include +#include + +#include "include/sid.h" + +/* global counter from which sids are allocated */ +static u32 global_sid; +static DEFINE_SPINLOCK(sid_lock); + +/* TODO FIXME: add sid to profile mapping, and sid recycling */ + +/** + * aa_alloc_sid - allocate a new sid for a profile + */ +u32 aa_alloc_sid(void) +{ + u32 sid; + + /* + * TODO FIXME: sid recycling - part of profile mapping table + */ + spin_lock(&sid_lock); + sid = (++global_sid); + spin_unlock(&sid_lock); + return sid; +} + +/** + * aa_free_sid - free a sid + * @sid: sid to free + */ +void aa_free_sid(u32 sid) +{ + ; /* NOP ATM */ +} --- linux-2.6.32.orig/security/apparmor/resource.c +++ linux-2.6.32/security/apparmor/resource.c @@ -0,0 +1,119 @@ +/* + * AppArmor security module + * + * This file contains AppArmor resource mediation and attachment + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include + +#include "include/audit.h" +#include "include/resource.h" +#include "include/policy.h" + +struct aa_audit_resource { + struct aa_audit base; + + int rlimit; +}; + +/* audit callback for resource specific fields */ +static void audit_cb(struct audit_buffer *ab, struct aa_audit *va) +{ + struct aa_audit_resource *sa = container_of(va, + struct aa_audit_resource, + base); + + if (sa->rlimit) + audit_log_format(ab, " rlimit=%d", sa->rlimit - 1); +} + +/** + * aa_audit_resource - audit setting resource limit + * @profile: profile being enforced (NOT NULL) + * @sa: audit data (NOT NULL) + * + * Returns: 0 or sa->error else other error code on failure + */ +static int aa_audit_resource(struct aa_profile *profile, + struct aa_audit_resource *sa) +{ + return aa_audit(AUDIT_APPARMOR_AUTO, profile, &sa->base, audit_cb); +} + +/** + * aa_task_setrlimit - test permission to set an rlimit + * @profile - profile confining the task (NOT NULL) + * @resource - the resource being set + * @new_rlim - the new resource limit (NOT NULL) + * + * Control raising the processes hard limit. + * + * Returns: 0 or error code if setting resource failed + */ +int aa_task_setrlimit(struct aa_profile *profile, unsigned int resource, + struct rlimit *new_rlim) +{ + struct aa_audit_resource sa = { + .base.operation = "setrlimit", + .base.gfp_mask = GFP_KERNEL, + .rlimit = resource + 1, + }; + int error = 0; + + if (profile->rlimits.mask & (1 << resource) && + new_rlim->rlim_max > profile->rlimits.limits[resource].rlim_max) { + sa.base.error = -EACCES; + + error = aa_audit_resource(profile, &sa); + } + + return error; +} + +/** + * __aa_transition_rlimits - apply new profile rlimits + * @old: old profile on task (MAYBE NULL) + * @new: new profile with rlimits to apply (NOT NULL) + */ +void __aa_transition_rlimits(struct aa_profile *old, struct aa_profile *new) +{ + unsigned int mask = 0; + struct rlimit *rlim, *initrlim; + int i; + + /* for any rlimits the profile controlled reset the soft limit + * to the less of the tasks hard limit and the init tasks soft limit + */ + if (old && old->rlimits.mask) { + for (i = 0, mask = 1; i < RLIM_NLIMITS; i++, mask <<= 1) { + if (old->rlimits.mask & mask) { + rlim = current->signal->rlim + i; + initrlim = init_task.signal->rlim + i; + rlim->rlim_cur = min(rlim->rlim_max, + initrlim->rlim_cur); + } + } + } + + /* set any new hard limits as dictated by the new profile */ + if (!(new && new->rlimits.mask)) + return; + for (i = 0, mask = 1; i < RLIM_NLIMITS; i++, mask <<= 1) { + if (!(new->rlimits.mask & mask)) + continue; + + rlim = current->signal->rlim + i; + rlim->rlim_max = min(rlim->rlim_max, + new->rlimits.limits[i].rlim_max); + /* soft limit should not exceed hard limit */ + rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + } +} --- linux-2.6.32.orig/security/apparmor/policy_unpack.c +++ linux-2.6.32/security/apparmor/policy_unpack.c @@ -0,0 +1,725 @@ +/* + * AppArmor security module + * + * This file contains AppArmor functions for unpacking policy loaded from + * userspace. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + * + * AppArmor uses a serialized binary format for loading policy. + * The policy format is documented in Documentation/??? + * All policy is validated all before it is used. + */ + +#include +#include +#include + +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/match.h" +#include "include/policy.h" +#include "include/policy_unpack.h" +#include "include/sid.h" + +/* + * The AppArmor interface treats data as a type byte followed by the + * actual data. The interface has the notion of a a named entry + * which has a name (AA_NAME typecode followed by name string) followed by + * the entries typecode and data. Named types allow for optional + * elements and extensions to be added and tested for without breaking + * backwards compatability. + */ + +enum aa_code { + AA_U8, + AA_U16, + AA_U32, + AA_U64, + AA_NAME, /* same as string except it is items name */ + AA_STRING, + AA_BLOB, + AA_STRUCT, + AA_STRUCTEND, + AA_LIST, + AA_LISTEND, + AA_ARRAY, + AA_ARRAYEND, +}; + +/* + * aa_ext is the read of the buffer containing the serialized profile. The + * data is copied into a kernel buffer in apparmorfs and then handed off to + * the unpack routines. + */ +struct aa_ext { + void *start; + void *end; + void *pos; /* pointer to current position in the buffer */ + u32 version; +}; + +/* audit callback for unpack fields */ +static void audit_cb(struct audit_buffer *ab, struct aa_audit *va) +{ + struct aa_audit_iface *sa = container_of(va, struct aa_audit_iface, + base); + + if (sa->name) { + audit_log_format(ab, " name="); + audit_log_string(ab, sa->name); + } + if (sa->name2) { + audit_log_format(ab, " namespace="); + audit_log_string(ab, sa->name2); + } + if (sa->base.error && sa->pos) + audit_log_format(ab, " offset=%ld", sa->pos); +} + +/** + * aa_audit_iface - do audit message for policy unpacking/load/replace/remove + * @sa: audit date to send to audit (NOT NULL) + * + * Returns: %0 or error + */ +int aa_audit_iface(struct aa_audit_iface *sa) +{ + struct aa_profile *profile; + const struct cred *cred = get_current_cred(); + int error; + profile = aa_cred_profile(cred); + error = aa_audit(AUDIT_APPARMOR_STATUS, profile, &sa->base, audit_cb); + put_cred(cred); + return error; +} + +/* test if read will be in packed data bounds */ +static bool aa_inbounds(struct aa_ext *e, size_t size) +{ + return (size <= e->end - e->pos); +} + +/** + * aa_u16_chunck - test and do bounds checking for a u16 size based chunk + * @e: serialized data read head + * @chunk: start address for chunk of data + * + * Returns: the size of chunk found with the read head at the end of the chunk. + */ +static size_t unpack_u16_chunk(struct aa_ext *e, char **chunk) +{ + size_t size = 0; + + if (!aa_inbounds(e, sizeof(u16))) + return 0; + size = le16_to_cpu(get_unaligned((u16 *) e->pos)); + e->pos += sizeof(u16); + if (!aa_inbounds(e, size)) + return 0; + *chunk = e->pos; + e->pos += size; + return size; +} + +/* unpack control byte */ +static bool unpack_X(struct aa_ext *e, enum aa_code code) +{ + if (!aa_inbounds(e, 1)) + return 0; + if (*(u8 *) e->pos != code) + return 0; + e->pos++; + return 1; +} + +/** + * unpack_nameX - check is the next element is of type X with a name of @name + * @e: serialized data extent information (NOT NULL) + * @code: type code + * @name: name to match to the serialized element. (MAYBE NULL) + * + * check that the next serialized data element is of type X and has a tag + * name @name. If @name is specified then there must be a matching + * name element in the stream. If @name is NULL any name element will be + * skipped and only the typecode will be tested. + * returns 1 on success (both type code and name tests match) and the read + * head is advanced past the headers + * + * Returns: 0 if either match failes, the read head does not move + */ +static bool unpack_nameX(struct aa_ext *e, enum aa_code code, const char *name) +{ + /* + * May need to reset pos if name or type doesn't match + */ + void *pos = e->pos; + /* + * Check for presence of a tagname, and if present name size + * AA_NAME tag value is a u16. + */ + if (unpack_X(e, AA_NAME)) { + char *tag = NULL; + size_t size = unpack_u16_chunk(e, &tag); + /* if a name is specified it must match. otherwise skip tag */ + if (name && (!size || strcmp(name, tag))) + goto fail; + } else if (name) { + /* if a name is specified and there is no name tag fail */ + goto fail; + } + + /* now check if type code matches */ + if (unpack_X(e, code)) + return 1; + +fail: + e->pos = pos; + return 0; +} + +static bool unpack_u16(struct aa_ext *e, u16 *data, const char *name) +{ + if (unpack_nameX(e, AA_U16, name)) { + if (!aa_inbounds(e, sizeof(u16))) + return 0; + if (data) + *data = le16_to_cpu(get_unaligned((u16 *) e->pos)); + e->pos += sizeof(u16); + return 1; + } + return 0; +} + +static bool unpack_u32(struct aa_ext *e, u32 *data, const char *name) +{ + if (unpack_nameX(e, AA_U32, name)) { + if (!aa_inbounds(e, sizeof(u32))) + return 0; + if (data) + *data = le32_to_cpu(get_unaligned((u32 *) e->pos)); + e->pos += sizeof(u32); + return 1; + } + return 0; +} + +static bool unpack_u64(struct aa_ext *e, u64 *data, const char *name) +{ + if (unpack_nameX(e, AA_U64, name)) { + if (!aa_inbounds(e, sizeof(u64))) + return 0; + if (data) + *data = le64_to_cpu(get_unaligned((u64 *) e->pos)); + e->pos += sizeof(u64); + return 1; + } + return 0; +} + +static size_t unpack_array(struct aa_ext *e, const char *name) +{ + if (unpack_nameX(e, AA_ARRAY, name)) { + int size; + if (!aa_inbounds(e, sizeof(u16))) + return 0; + size = (int)le16_to_cpu(get_unaligned((u16 *) e->pos)); + e->pos += sizeof(u16); + return size; + } + return 0; +} + +static size_t unpack_blob(struct aa_ext *e, char **blob, const char *name) +{ + if (unpack_nameX(e, AA_BLOB, name)) { + u32 size; + if (!aa_inbounds(e, sizeof(u32))) + return 0; + size = le32_to_cpu(get_unaligned((u32 *) e->pos)); + e->pos += sizeof(u32); + if (aa_inbounds(e, (size_t) size)) { + *blob = e->pos; + e->pos += size; + return size; + } + } + return 0; +} + +static int unpack_str(struct aa_ext *e, const char **string, const char *name) +{ + char *src_str; + size_t size = 0; + void *pos = e->pos; + *string = NULL; + if (unpack_nameX(e, AA_STRING, name)) { + size = unpack_u16_chunk(e, &src_str); + if (size) { + /* strings are null terminated, length is size - 1 */ + if (src_str[size - 1] != 0) + goto fail; + *string = src_str; + } + } + return size; + +fail: + e->pos = pos; + return 0; +} + +static int unpack_strdup(struct aa_ext *e, char **string, const char *name) +{ + const char *tmp; + void *pos = e->pos; + int res = unpack_str(e, &tmp, name); + *string = NULL; + + if (!res) + return 0; + + *string = kmemdup(tmp, res, GFP_KERNEL); + if (!*string) { + e->pos = pos; + return 0; + } + + return res; +} + +static bool verify_accept(struct aa_dfa *dfa, int flags) +{ + int i; + + /* verify accept permissions */ + for (i = 0; i < dfa->tables[YYTD_ID_ACCEPT]->td_lolen; i++) { + int mode = ACCEPT_TABLE(dfa)[i]; + + if (mode & ~DFA_VALID_PERM_MASK) + return 0; + + if (ACCEPT_TABLE2(dfa)[i] & ~DFA_VALID_PERM2_MASK) + return 0; + } + return 1; +} + +/** + * unpack_dfa - unpack a file rule dfa + * @e: serialized data extent information + * + * returns dfa or ERR_PTR or NULL if no dfa + */ +static struct aa_dfa *unpack_dfa(struct aa_ext *e) +{ + char *blob = NULL; + size_t size; + struct aa_dfa *dfa = NULL; + + size = unpack_blob(e, &blob, "aadfa"); + if (size) { + /* + * The dfa is aligned with in the blob to 8 bytes + * from the beginning of the stream. + */ + size_t sz = blob - (char *)e->start; + size_t pad = ALIGN(sz, 8) - sz; + int flags = TO_ACCEPT1_FLAG(YYTD_DATA32) | + TO_ACCEPT2_FLAG(YYTD_DATA32); + + + if (aa_g_paranoid_load) + flags |= DFA_FLAG_VERIFY_STATES; + + dfa = aa_dfa_unpack(blob + pad, size - pad, flags); + + if (!IS_ERR(dfa) && !verify_accept(dfa, flags)) + goto fail; + } + + return dfa; + +fail: + aa_put_dfa(dfa); + return ERR_PTR(-EPROTO); +} + +static bool unpack_trans_table(struct aa_ext *e, struct aa_profile *profile) +{ + void *pos = e->pos; + + /* exec table is optional */ + if (unpack_nameX(e, AA_STRUCT, "xtable")) { + int i, size; + + size = unpack_array(e, NULL); + /* currently 4 exec bits and entries 0-3 are reserved iupcx */ + if (size > 16 - 4) + goto fail; + profile->file.trans.table = kzalloc(sizeof(char *) * size, + GFP_KERNEL); + if (!profile->file.trans.table) + goto fail; + + profile->file.trans.size = size; + for (i = 0; i < size; i++) { + char *str; + int c, j, size = unpack_strdup(e, &str, NULL); + if (!size) + goto fail; + profile->file.trans.table[i] = str; + /* verify that name doesn't start with space */ + if (isspace(*str)) + goto fail; + + /* count internal # of internal \0 */ + for (c = j = 0; j < size - 2; j++) { + if (!str[j]) + c++; + } + if (*str == ':') { + /* beginning with : requires an embedded \0 */ + if (c != 1) + goto fail; + /* first character after : must be valid */ + if (!str[1]) + goto fail; + } else if (c) + /* fail - all other cases with embedded \0 */ + goto fail; + } + if (!unpack_nameX(e, AA_ARRAYEND, NULL)) + goto fail; + if (!unpack_nameX(e, AA_STRUCTEND, NULL)) + goto fail; + } + return 1; + +fail: + aa_free_domain_entries(&profile->file.trans); + e->pos = pos; + return 0; +} + +static bool unpack_rlimits(struct aa_ext *e, struct aa_profile *profile) +{ + void *pos = e->pos; + + /* rlimits are optional */ + if (unpack_nameX(e, AA_STRUCT, "rlimits")) { + int i, size; + u32 tmp = 0; + if (!unpack_u32(e, &tmp, NULL)) + goto fail; + profile->rlimits.mask = tmp; + + size = unpack_array(e, NULL); + if (size > RLIM_NLIMITS) + goto fail; + for (i = 0; i < size; i++) { + u64 tmp = 0; + if (!unpack_u64(e, &tmp, NULL)) + goto fail; + profile->rlimits.limits[i].rlim_max = tmp; + } + if (!unpack_nameX(e, AA_ARRAYEND, NULL)) + goto fail; + if (!unpack_nameX(e, AA_STRUCTEND, NULL)) + goto fail; + } + return 1; + +fail: + e->pos = pos; + return 0; +} + +/** + * unpack_profile - unpack a serialized profile + * @e: serialized data extent information + * @sa: audit struct for the operation + * + * NOTE: unpack profile sets audit struct if there is a failure + */ +static struct aa_profile *unpack_profile(struct aa_ext *e, + struct aa_audit_iface *sa) +{ + struct aa_profile *profile = NULL; + const char *name = NULL; + size_t size = 0; + int i, error = -EPROTO; + kernel_cap_t tmpcap; + u32 tmp; + u64 tmp64; + + /* check that we have the right struct being passed */ + if (!unpack_nameX(e, AA_STRUCT, "profile")) + goto fail; + if (!unpack_str(e, &name, NULL)) + goto fail; + + profile = aa_alloc_profile(name); + if (!profile) + return ERR_PTR(-ENOMEM); + + /* profile renaming is optional */ + (void) unpack_str(e, &profile->rename, "rename"); + + /* xmatch is optional and may be NULL */ + profile->xmatch = unpack_dfa(e); + if (IS_ERR(profile->xmatch)) { + error = PTR_ERR(profile->xmatch); + profile->xmatch = NULL; + goto fail; + } + /* xmatch_len is not optional if xmatch is set */ + if (profile->xmatch) { + if (!unpack_u32(e, &tmp, NULL)) + goto fail; + profile->xmatch_len = tmp; + } + + /* per profile debug flags (complain, audit) */ + if (!unpack_nameX(e, AA_STRUCT, "flags")) + goto fail; + if (!unpack_u32(e, &tmp, NULL)) + goto fail; + if (tmp) + profile->flags |= PFLAG_HAT; + if (!unpack_u32(e, &tmp, NULL)) + goto fail; + if (tmp) + profile->mode = APPARMOR_COMPLAIN; + if (!unpack_u32(e, &tmp, NULL)) + goto fail; + if (tmp) + profile->audit = AUDIT_ALL; + + if (!unpack_nameX(e, AA_STRUCTEND, NULL)) + goto fail; + + /* path_flags is optional */ + if (unpack_u32(e, &profile->path_flags, "path_flags")) + profile->path_flags |= profile->flags & PFLAG_MEDIATE_DELETED; + else + /* default to */ + profile->path_flags = PFLAG_MEDIATE_DELETED; + + /* mmap_min_addr is optional */ + if (unpack_u64(e, &tmp64, "mmap_min_addr")) { + profile->mmap_min_addr = (unsigned long)tmp64; + if (((u64) profile->mmap_min_addr) == tmp64) { + profile->flags |= PFLAG_MMAP_MIN_ADDR; + } else { + sa->base.info = "invalid set mmap_min_addr"; + goto fail; + } + } + + if (!unpack_u32(e, &(profile->caps.allowed.cap[0]), NULL)) + goto fail; + if (!unpack_u32(e, &(profile->caps.audit.cap[0]), NULL)) + goto fail; + if (!unpack_u32(e, &(profile->caps.quiet.cap[0]), NULL)) + goto fail; + if (!unpack_u32(e, &tmpcap.cap[0], NULL)) + goto fail; + + if (unpack_nameX(e, AA_STRUCT, "caps64")) { + /* optional upper half of 64 bit caps */ + if (!unpack_u32(e, &(profile->caps.allowed.cap[1]), NULL)) + goto fail; + if (!unpack_u32(e, &(profile->caps.audit.cap[1]), NULL)) + goto fail; + if (!unpack_u32(e, &(profile->caps.quiet.cap[1]), NULL)) + goto fail; + if (!unpack_u32(e, &(tmpcap.cap[1]), NULL)) + goto fail; + if (!unpack_nameX(e, AA_STRUCTEND, NULL)) + goto fail; + } + + if (unpack_nameX(e, AA_STRUCT, "capsx")) { + /* optional extended caps mediation mask */ + if (!unpack_u32(e, &(profile->caps.extended.cap[0]), NULL)) + goto fail; + if (!unpack_u32(e, &(profile->caps.extended.cap[1]), NULL)) + goto fail; + } + + if (!unpack_rlimits(e, profile)) + goto fail; + + size = unpack_array(e, "net_allowed_af"); + if (size) { + if (size > AF_MAX) + goto fail; + + for (i = 0; i < size; i++) { + if (!unpack_u16(e, &profile->net.allowed[i], NULL)) + goto fail; + if (!unpack_u16(e, &profile->net.audit[i], NULL)) + goto fail; + if (!unpack_u16(e, &profile->net.quiet[i], NULL)) + goto fail; + } + if (!unpack_nameX(e, AA_ARRAYEND, NULL)) + goto fail; + /* + * allow unix domain and netlink sockets they are handled + * by IPC + */ + } + profile->net.allowed[AF_UNIX] = 0xffff; + profile->net.allowed[AF_NETLINK] = 0xffff; + + /* get file rules */ + profile->file.dfa = unpack_dfa(e); + if (IS_ERR(profile->file.dfa)) { + error = PTR_ERR(profile->file.dfa); + profile->file.dfa = NULL; + goto fail; + } + + if (!unpack_u32(e, &profile->file.start, "dfa_start")) + /* default start state */ + profile->file.start = DFA_START; + + if (!unpack_trans_table(e, profile)) + goto fail; + + if (!unpack_nameX(e, AA_STRUCTEND, NULL)) + goto fail; + + return profile; + +fail: + sa->name = name ? name : "unknown"; + if (!sa->base.info) + sa->base.info = "failed to unpack profile"; + + aa_put_profile(profile); + + return ERR_PTR(error); +} + +/** + * aa_verify_head - unpack serialized stream header + * @e: serialized data read head + * @operation: operation header is being verified for + * + * Returns: error or 0 if header is good + */ +static int aa_verify_header(struct aa_ext *e, struct aa_audit_iface *sa) +{ + /* get the interface version */ + if (!unpack_u32(e, &e->version, "version")) { + sa->base.info = "invalid profile format"; + aa_audit_iface(sa); + return -EPROTONOSUPPORT; + } + + /* check that the interface version is currently supported */ + if (e->version != 5) { + sa->base.info = "unsupported interface version"; + aa_audit_iface(sa); + return -EPROTONOSUPPORT; + } + + /* read the namespace if present */ + if (!unpack_str(e, &sa->name2, "namespace")) + sa->name2 = NULL; + + return 0; +} + +/** + * verify_profile - Do post unpack analysis to verify profile consistency + * @profile: profile to verify + * + * Returns: 0 if passes verification else error + */ +static bool verify_xindex(int xindex, int table_size) +{ + int index, xtype; + xtype = xindex & AA_X_TYPE_MASK; + index = xindex & AA_X_INDEX_MASK; + if (xtype == AA_X_TABLE && index > table_size) + return 0; + return 1; +} + +/* verify dfa xindexes are in range of transition tables */ +static bool verify_dfa_xindex(struct aa_dfa *dfa, int table_size) +{ + int i; + for (i = 0; i < dfa->tables[YYTD_ID_ACCEPT]->td_lolen; i++) { + if (!verify_xindex(dfa_user_xindex(dfa, i), table_size)) + return 0; + if (!verify_xindex(dfa_other_xindex(dfa, i), table_size)) + return 0; + } + return 1; +} + +static int verify_profile(struct aa_profile *profile, struct aa_audit_iface *sa) +{ + if (aa_g_paranoid_load) { + if (profile->file.dfa && + !verify_dfa_xindex(profile->file.dfa, + profile->file.trans.size)) { + sa->base.info = "Invalid named transition"; + return -EPROTO; + } + } + + return 0; +} + +/** + * aa_unpack - unpack packed binary profile data loaded from user space + * @udata: user data copied to kmem (NOT NULL) + * @size: the size of the user data + * @sa: audit struct for unpacking (NOT NULL) + * + * Unpack user data and return refcounted allocated profile or ERR_PTR + * + * Returns: profile else error pointer if fails to unpack + */ +struct aa_profile *aa_unpack(void *udata, size_t size, + struct aa_audit_iface *sa) +{ + struct aa_profile *profile; + int error; + struct aa_ext e = { + .start = udata, + .end = udata + size, + .pos = udata, + }; + + error = aa_verify_header(&e, sa); + if (error) + return ERR_PTR(error); + + profile = unpack_profile(&e, sa); + if (IS_ERR(profile)) { + sa->pos = e.pos - e.start; + return profile; + } + error = verify_profile(profile, sa); + if (error) { + aa_put_profile(profile); + profile = ERR_PTR(error); + } + + /* return refcount */ + return profile; +} --- linux-2.6.32.orig/security/apparmor/audit.c +++ linux-2.6.32/security/apparmor/audit.c @@ -0,0 +1,162 @@ +/* + * AppArmor security module + * + * This file contains AppArmor auditing functions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include + +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/policy.h" + +const char *audit_mode_names[] = { + "normal", + "quiet_denied", + "quiet", + "noquiet", + "all" +}; + +static char *aa_audit_type[] = { + "APPARMOR_AUDIT", + "APPARMOR_ALLOWED", + "APPARMOR_DENIED", + "APPARMOR_HINT", + "APPARMOR_STATUS", + "APPARMOR_ERROR", + "APPARMOR_KILLED" +}; + +/* + * Currently AppArmor auditing is fed straight into the audit framework. + * + * TODO: + * convert to LSM audit + * netlink interface for complain mode + * user auditing, - send user auditing to netlink interface + * system control of whether user audit messages go to system log + */ + +/** + * aa_audit_base - core AppArmor function. + * @type: type of audit message (see include/linux/apparmor.h) + * @profile: active profile for event (MAY BE NULL) + * @sa: audit structure containing data to audit + * @audit_cxt: audit_cxt that event is under + * @cb: audit cb for this event + * + * Record an audit message for data is @sa, and handle deal with kill and + * complain messages switches. + * + * Returns: 0 or sa->error on success, else error + */ +static int aa_audit_base(int type, struct aa_profile *profile, + struct aa_audit *sa, struct audit_context *audit_cxt, + void (*cb) (struct audit_buffer *, struct aa_audit *)) +{ + struct audit_buffer *ab = NULL; + struct task_struct *task = sa->task ? sa->task : current; + + if (profile && DO_KILL(profile) && type == AUDIT_APPARMOR_DENIED) + type = AUDIT_APPARMOR_KILL; + + /* ab freed below in audit_log_end */ + ab = audit_log_start(audit_cxt, sa->gfp_mask, type); + + if (!ab) { + AA_ERROR("(%d) Unable to log event of type (%d)\n", + -ENOMEM, type); + sa->error = -ENOMEM; + goto out; + } + + if (aa_g_audit_header) { + audit_log_format(ab, " type="); + audit_log_string(ab, aa_audit_type[type - AUDIT_APPARMOR_AUDIT]); + } + + if (sa->operation) { + audit_log_format(ab, " operation="); + audit_log_string(ab, sa->operation); + } + + if (sa->info) { + audit_log_format(ab, " info="); + audit_log_string(ab, sa->info); + if (sa->error) + audit_log_format(ab, " error=%d", sa->error); + } + + audit_log_format(ab, " pid=%d", task->pid); + + if (profile && !unconfined(profile)) { + pid_t pid; + rcu_read_lock(); + pid = task->real_parent->pid; + rcu_read_unlock(); + audit_log_format(ab, " parent=%d", pid); + audit_log_format(ab, " profile="); + audit_log_untrustedstring(ab, profile->base.hname); + + if (profile->ns != root_ns) { + audit_log_format(ab, " namespace="); + audit_log_untrustedstring(ab, profile->ns->base.hname); + } + } + + if (cb) + cb(ab, sa); + + audit_log_end(ab); + +out: + if (type == AUDIT_APPARMOR_KILL) + (void)send_sig_info(SIGKILL, NULL, task); + + return type == AUDIT_APPARMOR_ALLOWED ? 0 : sa->error; +} + +/** + * aa_audit - Log an audit event to the audit subsystem + * @type: audit type for the message + * @profile: profile to check against + * @sa: audit event + * @cb: optional callback fn for type specific fields + * + * Handle default message switching based off of audit mode flags + * + * Returns: error on failure + */ +int aa_audit(int type, struct aa_profile *profile, struct aa_audit *sa, + void (*cb) (struct audit_buffer *, struct aa_audit *)) +{ + struct audit_context *audit_cxt; + audit_cxt = aa_g_logsyscall ? current->audit_context : NULL; + + if (type == AUDIT_APPARMOR_AUTO) { + if (likely(!sa->error)) { + if (AUDIT_MODE(profile) != AUDIT_ALL) + return 0; + type = AUDIT_APPARMOR_AUDIT; + } else if (COMPLAIN_MODE(profile)) + type = AUDIT_APPARMOR_ALLOWED; + else + type = AUDIT_APPARMOR_DENIED; + } + if (AUDIT_MODE(profile) == AUDIT_QUIET || + (type == AUDIT_APPARMOR_DENIED && + AUDIT_MODE(profile) == AUDIT_QUIET)) + return sa->error; + + return aa_audit_base(type, profile, sa, audit_cxt, cb); +} --- linux-2.6.32.orig/security/apparmor/policy.c +++ linux-2.6.32/security/apparmor/policy.c @@ -0,0 +1,1097 @@ +/* + * AppArmor security module + * + * This file contains AppArmor policy manipulation functions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + * + * + * AppArmor policy is based around profiles, which contain the rules a + * task is confined by. Every task in the sytem has a profile attached + * to it determined either by matching "unconfined" tasks against the + * visible set of profiles or by following a profiles attachment rules. + * + * Each profile exists in a profile namespace which is a container of + * visible profiles. Each namespace contains a special "unconfined" profile, + * which doesn't enforce any confinement on a task beyond DAC. + * + * Namespace and profile names can be written together in either + * of two syntaxes. + * :namespace:profile - used by kernel interfaces for easy detection + * namespace://profile - used by policy + * + * Profile names can not start with : or @ or ^ and may not contain \0 + * + * Reserved profile names + * unconfined - special automatically generated unconfined profile + * inherit - special name to indicate profile inheritance + * null-XXXX-YYYY - special automically generated learning profiles + * + * Namespace names may not start with / or @ and may not contain \0 or : + * Reserved namespace namespace + * user-XXXX - user defined profiles + * + * a // in a profile or namespace name indicates a hierarcical name with the + * name before the // being the parent and the name after the child. + * + * Profile and namespace hierachies serve two different but similar purposes. + * The namespace contains the set of visible profiles that are considered + * for attachment. The hierarchy of namespaces allows for virtualizing + * the namespace so that for example a chroot can have its own set of profiles + * which may define some local user namespaces. + * The profile hierachy severs two distinct purposes, + * - it allows for sub profiles or hats, which allows an application to run + * subprograms under its own profile with different restriction than it + * self, and not have it use the system profile. + * eg. if a mail program starts an editor, the policy might make the + * restrictions tighter on the editor tighter than the mail program, + * and definitely different than general editor restrictions + * - it allows for binary hierarchy of profiles, so that execution history + * is preserved. This feature isn't exploited by AppArmor reference policy + * but is allowed. NOTE: this is currently suboptimal because profile + * aliasing is not currently implemented so that a profile for each + * level must be defined. + * eg. /bin/bash///bin/ls as a name would indicate /bin/ls was started + * from /bin/bash + * + * A profile or namespace name that can contain one or more // seperators + * is refered to as an hname (hierarchical). + * eg. /bin/bash//bin/ls + * + * An fqname is a name that may contain both namespace and profile hnames. + * eg. :ns:/bin/bash//bin/ls + * + * NOTES: + * - locking of profile lists is currently fairly coarse. All profile + * lists within a namespace use the namespace lock. + * FIXME: move profile lists to using rcu_lists + */ + +#include +#include +#include + +#include "include/apparmor.h" +#include "include/capability.h" +#include "include/context.h" +#include "include/file.h" +#include "include/ipc.h" +#include "include/match.h" +#include "include/path.h" +#include "include/policy.h" +#include "include/policy_unpack.h" +#include "include/resource.h" +#include "include/sid.h" + + +/* root profile namespace */ +struct aa_namespace *root_ns; + +const char *profile_mode_names[] = { + "enforce", + "complain", + "kill", +}; + +/** + * hname_tail - find the last component of an hname + * @name: hname to find the tail component of (NOT NULL) + * + * Returns: the tail name component of an hname + */ +static const char *hname_tail(const char *hname) +{ + char *split; + hname = strstrip((char *)hname); + for (split = strstr(hname, "//"); split; split = strstr(hname, "//")) + hname = split + 2; + + return hname; +} + +/** + * policy_init - initialize a policy structure + * @policy: policy to initialize (NOT NULL) + * @name: name of the policy, init will make a copy of it (NOT NULL) + */ +static bool policy_init(struct aa_policy *policy, const char *name) +{ + /* freed by policy_free */ + policy->hname = kstrdup(name, GFP_KERNEL); + if (!policy->hname) + return 0; + /* base.name is a substring of fqname */ + policy->name = (char *)hname_tail(policy->hname); + + INIT_LIST_HEAD(&policy->list); + INIT_LIST_HEAD(&policy->profiles); + kref_init(&policy->count); + + return 1; +} + +/** + * policy_destroy - free the elements referenced by @policy + * @policy: policy that is to have its elements freed (NOT NULL) + */ +static void policy_destroy(struct aa_policy *policy) +{ + /* still contains profiles -- invalid */ + if (!list_empty(&policy->profiles)) { + AA_ERROR("%s: internal error, " + "policy '%s' still contains profiles\n", + __func__, policy->name); + BUG(); + } + if (!list_empty(&policy->list)) { + AA_ERROR("%s: internal error, policy '%s' still on list\n", + __func__, policy->name); + BUG(); + } + + /* don't free name as its a subset of hname */ + kzfree(policy->hname); +} + +/** + * __policy_find - find a policy by @name on a policy list + * @head: list to search (NOT NULL) + * @name: name to search for (NOT NULL) + * + * Requires: correct locks for the @head list be held + * + * Returns: policy that match @name or NULL if not found + */ +static struct aa_policy *__policy_find(struct list_head *head, const char *name) +{ + struct aa_policy *policy; + + list_for_each_entry(policy, head, list) { + if (!strcmp(policy->name, name)) + return policy; + } + return NULL; +} + +/** + * __policy_strn_find - find a policy thats name matches @len chars of @str + * @head: list to search (NOT NULL) + * @str: string to search for (NOT NULL) + * @len: length of match required + * + * Requires: correct locks for the @head list be held + * + * Returns: policy that match @str or NULL if not found + * + * if @len == strlen(@strlen) then this is equiv to __policy_find + * other wise it allows searching for policy by a partial match of name + */ +static struct aa_policy *__policy_strn_find(struct list_head *head, + const char *str, int len) +{ + struct aa_policy *policy; + + list_for_each_entry(policy, head, list) { + if (aa_strneq(policy->name, str, len)) + return policy; + } + + return NULL; +} + +/* + * Routines for AppArmor namespaces + */ + +/** + * aa_alloc_namespace - allocate, initialize and return a new namespace + * @name: a preallocated name (NOT NULL) + * + * Returns: NULL on failure. + */ +static struct aa_namespace *aa_alloc_namespace(const char *name) +{ + struct aa_namespace *ns; + + ns = kzalloc(sizeof(*ns), GFP_KERNEL); + AA_DEBUG("%s(%p)\n", __func__, ns); + if (!ns) + return NULL; + + if (!policy_init(&ns->base, name)) + goto fail_ns; + INIT_LIST_HEAD(&ns->sub_ns); + rwlock_init(&ns->lock); + + /* released by aa_free_namespace */ + ns->unconfined = aa_alloc_profile("unconfined"); + if (!ns->unconfined) + goto fail_unconfined; + + ns->unconfined->sid = aa_alloc_sid(); + ns->unconfined->flags = PFLAG_UNCONFINED | PFLAG_IX_ON_NAME_ERROR | + PFLAG_IMMUTABLE; + + /* + * released by aa_free_namespace, however aa_remove_namespace breaks + * the cyclic references (ns->unconfined, and unconfined->ns) and + * replaces with refs to parent namespace unconfined + */ + ns->unconfined->ns = aa_get_namespace(ns); + + return ns; + +fail_unconfined: + kzfree(ns->base.name); +fail_ns: + kzfree(ns); + return NULL; +} + +/** + * aa_free_namespace - free a profile namespace + * @ns: the namespace to free (MAYBE NULL) + * + * Requires: All references to the namespace must have been put, if the + * namespace was referenced by a profile confining a task, + */ +static void aa_free_namespace(struct aa_namespace *ns) +{ + if (!ns) + return; + + policy_destroy(&ns->base); + aa_put_namespace(ns->parent); + + if (ns->unconfined && ns->unconfined->ns == ns) + ns->unconfined->ns = NULL; + + aa_put_profile(ns->unconfined); + kzfree(ns); +} + +/** + * aa_free_namespace_kref - free aa_namespace by kref (see aa_put_namespace) + * @kr: kref callback for freeing of a namespace (NOT NULL) + */ +void aa_free_namespace_kref(struct kref *kref) +{ + aa_free_namespace(container_of(kref, struct aa_namespace, base.count)); +} + +/** + * __aa_find_namespace - find a namespace on a list by @name + * @head: list to search for namespace on (NOT NULL) + * @name: name of namespace to look for (NOT NULL) + * + * Returns: unrefcounted namespace + * + * Requires: ns lock be held + */ +static struct aa_namespace *__aa_find_namespace(struct list_head *head, + const char *name) +{ + return (struct aa_namespace *)__policy_find(head, name); +} + +/** + * aa_find_namespace - look up a profile namespace on the namespace list + * @root: namespace to search in (NOT NULL) + * @name: name of namespace to find (NOT NULL) + * + * Returns: a pointer to the namespace on the list, or NULL if no namespace + * called @name exists. + * + * refcount released by caller + */ +struct aa_namespace *aa_find_namespace(struct aa_namespace *root, + const char *name) +{ + struct aa_namespace *ns = NULL; + + read_lock(&root->lock); + ns = aa_get_namespace(__aa_find_namespace(&root->sub_ns, name)); + read_unlock(&root->lock); + + return ns; +} + +/** + * aa_prepare_namespace - find an existing or create a new namespace of @name + * @name: the namespace to find or add (NOT NULL) + * + * Returns: refcounted namespace or NULL if failed to create one + */ +static struct aa_namespace *aa_prepare_namespace(const char *name) +{ + struct aa_namespace *ns, *root; + + root = aa_current_profile()->ns; + + write_lock(&root->lock); + + /* if name isn't specified the profile is loaded to the current ns */ + if (!name) { + /* released by caller */ + ns = aa_get_namespace(root); + goto out; + } + + /* try and find the specified ns and if it doesn't exist create it */ + /* released by caller */ + ns = aa_get_namespace(__aa_find_namespace(&root->sub_ns, name)); + if (!ns) { + /* name && namespace not found */ + struct aa_namespace *new_ns; + write_unlock(&root->lock); + new_ns = aa_alloc_namespace(name); + if (!new_ns) + return NULL; + write_lock(&root->lock); + /* test for race when new_ns was allocated */ + ns = __aa_find_namespace(&root->sub_ns, name); + if (!ns) { + /* add parent ref */ + new_ns->parent = aa_get_namespace(root); + + list_add(&new_ns->base.list, &root->sub_ns); + /* add list ref */ + ns = aa_get_namespace(new_ns); + } else { + /* raced so free the new one */ + aa_free_namespace(new_ns); + /* get reference on namespace */ + aa_get_namespace(ns); + } + } +out: + write_unlock(&root->lock); + + /* return ref */ + return ns; +} + +/** + * __aa_add_profile - add a profile to a list + * @list: list to add it to (NOT NULL) + * @profile: the profile to add (NOT NULL) + * + * refcount @profile, should be put by __aa_remove_profile + * + * Requires: namespace lock be held, or list not be shared + */ +static void __aa_add_profile(struct list_head *list, + struct aa_profile *profile) +{ + list_add(&profile->base.list, list); + /* get list reference */ + aa_get_profile(profile); +} + +/** + * __aa_remove_profile - remove a profile from the list it is one + * @profile: the profile to remove (NOT NULL) + * + * remove a profile from the list, warning generally removal should + * be done with __aa_replace_profile as most profile removals are + * replacements to the unconfined profile. + * + * put @profile list refcount + * + * Requires: namespace lock be held, or list not have been live + */ +static void __aa_remove_profile(struct aa_profile *profile) +{ + list_del_init(&profile->base.list); + if (!(profile->flags & PFLAG_NO_LIST_REF)) + /* release list reference */ + aa_put_profile(profile); +} + +/** + * __aa_replace_profile - replace @old with @new on a list + * @old: profile to be replaced (NOT NULL) + * @new: profile to replace @old with (MAYBE NULL) + * + * Will duplicaticate and refcount elements that @new inherits from @old + * and will inherit @old children. If new is NULL it will replace to the + * unconfined profile for old's namespace. + * + * refcount @new for list, put @old list refcount + * + * Requires: namespace list lock be held, or list not be shared + */ +static void __aa_replace_profile(struct aa_profile *old, + struct aa_profile *new) +{ + struct aa_policy *policy; + struct aa_profile *child, *tmp; + + if (old->parent) + policy = &old->parent->base; + else + policy = &old->ns->base; + + if (new) { + /* released when @new is freed */ + new->parent = aa_get_profile(old->parent); + new->ns = aa_get_namespace(old->ns); + new->sid = old->sid; + __aa_add_profile(&policy->profiles, new); + } else { + /* refcount not taken, held via @old refcount */ + new = old->ns->unconfined; + } + + /* inherit children */ + list_for_each_entry_safe(child, tmp, &old->base.profiles, base.list) { + aa_put_profile(child->parent); + child->parent = aa_get_profile(new); + /* list refcount transfered to @new*/ + list_move(&child->base.list, &new->base.profiles); + } + + /* released by aa_free_profile */ + old->replacedby = aa_get_profile(new); + __aa_remove_profile(old); +} + +/** + * __aa_profile_list_release - remove all profiles on the list and put refs + * @head: list of profiles (NOT NULL) + * + * Requires: namespace lock be held + */ +static void __aa_profile_list_release(struct list_head *head) +{ + struct aa_profile *profile, *tmp; + list_for_each_entry_safe(profile, tmp, head, base.list) { + /* release any children lists first */ + __aa_profile_list_release(&profile->base.profiles); + __aa_replace_profile(profile, NULL); + } +} + +static void __aa_remove_namespace(struct aa_namespace *ns); + +/** + * __aa_ns_list_release - remove all profile namespaces on the list put refs + * @head: list of profile namespaces (NOT NULL) + * + * Requires: namespace lock be held + */ +static void __aa_ns_list_release(struct list_head *head) +{ + struct aa_namespace *ns, *tmp; + list_for_each_entry_safe(ns, tmp, head, base.list) + __aa_remove_namespace(ns); + +} + +/** + * aa_destroy_namespace - remove everything contained by @ns + * @ns: namespace to have it contents removed (NOT NULL) + */ +static void aa_destroy_namespace(struct aa_namespace *ns) +{ + if (!ns) + return; + + write_lock(&ns->lock); + /* release all profiles in this namespace */ + __aa_profile_list_release(&ns->base.profiles); + + /* release all sub namespaces */ + __aa_ns_list_release(&ns->sub_ns); + + write_unlock(&ns->lock); +} + +/** + * __aa_remove_namespace - remove a namespace and all its children + * @ns: namespace to be removed (NOT NULL) + * + * Requires: ns->parent->lock be held and ns removed from parent. + */ +static void __aa_remove_namespace(struct aa_namespace *ns) +{ + struct aa_profile *unconfined = ns->unconfined; + + /* remove ns from namespace list */ + list_del_init(&ns->base.list); + + /* + * break the ns, unconfined profile cyclic reference and forward + * all new unconfined profiles requests to the parent namespace + * This will result in all confined tasks that have a profile + * being removed, inheriting the parent->unconfined profile. + */ + if (ns->parent) + ns->unconfined = aa_get_profile(ns->parent->unconfined); + + aa_destroy_namespace(ns); + + /* release original ns->unconfined ref */ + aa_put_profile(unconfined); + /* release ns->base.list ref, from removal above */ + aa_put_namespace(ns); +} + +/** + * aa_alloc_root_ns - allocate the root profile namespace + * + * Returns: %0 on success else error + * + */ +int __init aa_alloc_root_ns(void) +{ + /* released by aa_free_root_ns - used as list ref*/ + root_ns = aa_alloc_namespace("root"); + if (!root_ns) + return -ENOMEM; + + return 0; +} + + /** + * aa_free_root_ns - free the root profile namespace + */ +void aa_free_root_ns(void) + { + struct aa_namespace *ns = root_ns; + root_ns = NULL; + + aa_destroy_namespace(ns); + aa_put_namespace(ns); +} + +/** + * aa_alloc_profile - allocate, initialize and return a new profile + * @hname: name of the profile (NOT NULL) + * + * Returns: NULL on failure, else refcounted profile + */ +struct aa_profile *aa_alloc_profile(const char *hname) +{ + struct aa_profile *profile; + + /* freed by aa_free_profile - usually through aa_put_profile */ + profile = kzalloc(sizeof(*profile), GFP_KERNEL); + if (!profile) + return NULL; + + if (!policy_init(&profile->base, hname)) { + kzfree(profile); + return NULL; + } + + /* return ref */ + return profile; +} + +/** + * aa_new_null_profile - create a new null-X learning profile + * @parent: profile that caused this profile to be created (NOT NULL) + * @hat: true if the null- learning profile is a hat + * + * Create a null- complain mode profile used in learning mode. The name of + * the profile is unique and follows the format of parent//null-sid. + * + * null profiles are added to the profile list but the list does not + * hold a count on them so that they are automatically released when + * not in use. + * + * Returns: new profile else NULL on failure + */ +struct aa_profile *aa_new_null_profile(struct aa_profile *parent, int hat) +{ + struct aa_profile *profile = NULL; + char *name; + u32 sid = aa_alloc_sid(); + + /* freed below */ + name = kmalloc(strlen(parent->base.hname) + 2 + 7 + 8, GFP_KERNEL); + if (!name) + goto fail; + sprintf(name, "%s//null-%x", parent->base.hname, sid); + + profile = aa_alloc_profile(name); + kfree(name); + if (!profile) + goto fail; + + profile->sid = sid; + profile->mode = APPARMOR_COMPLAIN; + profile->flags = PFLAG_NULL; + if (hat) + profile->flags |= PFLAG_HAT; + + /* released on aa_free_profile */ + profile->parent = aa_get_profile(parent); + profile->ns = aa_get_namespace(parent->ns); + + write_lock(&profile->ns->lock); + __aa_add_profile(&parent->base.profiles, profile); + write_unlock(&profile->ns->lock); + + return profile; + +fail: + aa_free_sid(sid); + return NULL; +} + +/** + * aa_free_profile - free a profile + * @profile: the profile to free (MAYBE NULL) + * + * Free a profile, its hats and null_profile. All references to the profile, + * its hats and null_profile must have been put. + * + * If the profile was referenced from a task context, aa_free_profile() will + * be called from an rcu callback routine, so we must not sleep here. + */ +static void aa_free_profile(struct aa_profile *profile) +{ + AA_DEBUG("%s(%p)\n", __func__, profile); + + if (!profile) + return; + + if (!list_empty(&profile->base.list)) { + AA_ERROR("%s: internal error, " + "profile '%s' still on ns list\n", + __func__, profile->base.name); + BUG(); + } + + /* free children profiles */ + policy_destroy(&profile->base); + aa_put_profile(profile->parent); + + aa_put_namespace(profile->ns); + + aa_free_file_rules(&profile->file); + aa_free_cap_rules(&profile->caps); + aa_free_net_rules(&profile->net); + aa_free_rlimit_rules(&profile->rlimits); + + aa_free_sid(profile->sid); + aa_put_dfa(profile->xmatch); + + if (profile->replacedby) + aa_put_profile(profile->replacedby); + + kzfree(profile); +} + +/** + * aa_free_profile_kref - free aa_profile by kref (called by aa_put_profile) + * @kr: kref callback for freeing of a profile (NOT NULL) + */ +void aa_free_profile_kref(struct kref *kref) +{ + struct aa_profile *p = container_of(kref, struct aa_profile, + base.count); + + aa_free_profile(p); +} + +/* TODO: profile count accounting - setup in remove */ + +/** + * __aa_find_child - find a profile on @head list with a name matching @name + * @head: list to search (NOT NULL) + * @name: name of profile (NOT NULL) + * + * Requires: ns lock protecting list be held + * + * Returns: unrefcounted profile ptr, or NULL if not found + */ +static struct aa_profile *__aa_find_child(struct list_head *head, + const char *name) +{ + return (struct aa_profile *)__policy_find(head, name); +} + +/** + * __aa_strn_find_child - find a profile on @head list using substring of @name + * @head: list to search (NOT NULL) + * @name: name of profile (NOT NULL) + * @len: length of @name substring to match + * + * Requires: ns lock protecting list be held + * + * Returns: unrefcounted profile ptr, or NULL if not found + */ +static struct aa_profile *__aa_strn_find_child(struct list_head *head, + const char *name, int len) +{ + return (struct aa_profile *)__policy_strn_find(head, name, len); +} + +/** + * aa_find_child - find a profile by @name in @parent + * @parent: profile to search (NOT NULL) + * @name: profile name to search for (NOT NULL) + * + * Returns: a ref counted profile or NULL if not found + */ +struct aa_profile *aa_find_child(struct aa_profile *parent, const char *name) +{ + struct aa_profile *profile; + + read_lock(&parent->ns->lock); + profile = aa_get_profile(__aa_find_child(&parent->base.profiles, name)); + read_unlock(&parent->ns->lock); + + return profile; +} + +/** + * __aa_find_parent - lookup the parent of a profile of name @hname + * @ns: namespace to lookup profile in (NOT NULL) + * @hname: hierarchical profile name to find parent of (NOT NULL) + * + * Lookups up the parent of a fully qualified profile name, the profile + * that matches hname does not need to exist, in general this + * is used to load a new profile. + * + * Requires: ns->lock be held + * + * Returns: unrefcounted policy or NULL if not found + */ +static struct aa_policy *__aa_find_parent(struct aa_namespace *ns, + const char *hname) +{ + struct aa_policy *policy; + struct aa_profile *profile = NULL; + char *split; + + policy = &ns->base; + + for (split = strstr(hname, "//"); split;) { + profile = __aa_strn_find_child(&policy->profiles, hname, + split - hname); + if (!profile) + return NULL; + policy = &profile->base; + hname = split + 2; + split = strstr(hname, "//"); + } + if (!profile) + return &ns->base; + return &profile->base; +} + +/** + * __aa_find_profile - lookup the profile matching @hname + * @base: base list to start looking up profile name from (NOT NULL) + * @hname: hierarchical profile name (NOT NULL) + * + * Requires: ns->lock be held + * + * Returns: unrefcounted profile pointer or NULL if not found + * + * Do a relative name lookup, recursing through profile tree. + */ +static struct aa_profile *__aa_find_profile(struct aa_policy *base, + const char *hname) +{ + struct aa_profile *profile = NULL; + char *split; + + for (split = strstr(hname, "//"); split;) { + profile = __aa_strn_find_child(&base->profiles, hname, + split - hname); + if (!profile) + return NULL; + + base = &profile->base; + hname = split + 2; + split = strstr(hname, "//"); + } + + profile = __aa_find_child(&base->profiles, hname); + + return profile; +} + +/** + * aa_find_profile_by_name - find a profile by its full or partial name + * @ns: the namespace to start from + * @hname: name to do lookup on. Does not contain namespace prefix + * + * Returns: refcounted profile or NULL if not found + */ +struct aa_profile *aa_find_profile(struct aa_namespace *ns, const char *hname) +{ + struct aa_profile *profile; + + read_lock(&ns->lock); + profile = aa_get_profile(__aa_find_profile(&ns->base, hname)); + read_unlock(&ns->lock); + return profile; +} + +/** + * replacement_allowed - test to see if replacement is allowed + * @profile: profile to test if it can be replaced (MAYBE NULL) + * @sa: audit data (NOT NULL) + * @add_only: true if replacement shouldn't be allowed but addition is okay + * + * Returns: %1 if replacement allowed else %0 + */ +static bool replacement_allowed(struct aa_profile *profile, + struct aa_audit_iface *sa, + int add_only) +{ + if (profile) { + if (profile->flags & PFLAG_IMMUTABLE) { + sa->base.info = "cannot replace immutible profile"; + sa->base.error = -EPERM; + return 0; + } else if (add_only) { + sa->base.info = "profile already exists"; + sa->base.error = -EEXIST; + return 0; + } + } + return 1; +} + +/** + * __add_new_profile - simple wrapper around __aa_add_profile + * @ns: namespace that profile is being added to (NOT NULL) + * @policy: the policy container to add the profile to (NOT NULL) + * @profile: profile to add (NOT NULL) + * + * add a profile to a list and do other required basic allocations + */ +static void __add_new_profile(struct aa_namespace *ns, + struct aa_policy *policy, + struct aa_profile *profile) +{ + if (policy != &ns->base) + /* released on profile replacement or aa_free_profile */ + profile->parent = aa_get_profile((struct aa_profile *) policy); + __aa_add_profile(&policy->profiles, profile); + /* released on aa_free_profile */ + profile->sid = aa_alloc_sid(); + profile->ns = aa_get_namespace(ns); +} + +/** + * aa_interface_replace_profiles - replace profile(s) on the profile list + * @udata: serialized data stream (NOT NULL) + * @size: size of the serialized data stream + * @add_only: true if only doing addition, no replacement allowed + * + * unpack and replace a profile on the profile list and uses of that profile + * by any aa_task_cxt. If the profile does not exist on the profile list + * it is added. + * + * Returns: size of data consumed else error code on failure. + */ +ssize_t aa_interface_replace_profiles(void *udata, size_t size, bool add_only) +{ + struct aa_policy *policy; + struct aa_profile *old_profile = NULL, *new_profile = NULL; + struct aa_profile *rename_profile = NULL; + struct aa_namespace *ns = NULL; + ssize_t error; + struct aa_audit_iface sa = { + .base.operation = "profile_replace", + .base.gfp_mask = GFP_ATOMIC, + }; + + /* check if loading policy is locked out */ + if (aa_g_lock_policy) { + sa.base.info = "policy locked"; + sa.base.error = -EACCES; + goto fail; + } + + /* released below */ + new_profile = aa_unpack(udata, size, &sa); + if (IS_ERR(new_profile)) { + sa.base.error = PTR_ERR(new_profile); + goto fail; + } + + /* released below */ + ns = aa_prepare_namespace(sa.name2); + if (!ns) { + sa.base.info = "failed to prepare namespace"; + sa.base.error = -ENOMEM; + goto fail; + } + + sa.name = new_profile->base.hname; + + write_lock(&ns->lock); + /* no ref on policy only use inside lock */ + policy = __aa_find_parent(ns, new_profile->base.hname); + + if (!policy) { + sa.base.info = "parent does not exist"; + sa.base.error = -ENOENT; + goto audit; + } + + old_profile = __aa_find_child(&policy->profiles, + new_profile->base.name); + /* released below */ + aa_get_profile(old_profile); + + if (new_profile->rename) { + rename_profile = __aa_find_profile(&ns->base, + new_profile->rename); + /* released below */ + aa_get_profile(rename_profile); + + if (!rename_profile) { + sa.base.info = "profile to rename does not exist"; + sa.name = new_profile->rename; + sa.base.error = -ENOENT; + goto audit; + } + } + + if (!replacement_allowed(old_profile, &sa, add_only)) + goto audit; + + if (!replacement_allowed(rename_profile, &sa, add_only)) + goto audit; + +audit: + if (!old_profile && !rename_profile) + sa.base.operation = "profile_load"; + + error = aa_audit_iface(&sa); + + /* rename field must be cleared as it is shared with replaced-by */ + if (new_profile->rename) { + kzfree(new_profile->rename); + new_profile->rename = NULL; + } + + if (!error) { + if (old_profile) + __aa_replace_profile(old_profile, new_profile); + if (rename_profile) + __aa_replace_profile(rename_profile, new_profile); + if (!(old_profile || rename_profile)) + __add_new_profile(ns, policy, new_profile); + } + write_unlock(&ns->lock); + +out: + aa_put_namespace(ns); + aa_put_profile(rename_profile); + aa_put_profile(old_profile); + aa_put_profile(new_profile); + if (error) + return error; + return size; + +fail: + error = aa_audit_iface(&sa); + goto out; +} + +/** + * aa_interface_remove_profiles - remove profile(s) from the system + * @fqname: name of the profile or namespace to remove (NOT NULL) + * @size: size of the name + * + * Remove a profile or sub namespace from the current namespace, so that + * they can not be found anymore and mark them as replaced by unconfined + * + * NOTE: removing confinement does not restore rlimits to preconfinemnet values + * + * Returns: size of data consume else error code if fails + */ +ssize_t aa_interface_remove_profiles(char *fqname, size_t size) +{ + struct aa_namespace *root, *ns = NULL; + struct aa_profile *profile = NULL; + struct aa_audit_iface sa = { + .base.operation = "profile_remove", + .base.gfp_mask = GFP_ATOMIC, + }; + const char *name = fqname; + int error; + + /* check if loading policy is locked out */ + if (aa_g_lock_policy) { + sa.base.info = "policy locked"; + sa.base.error = -EACCES; + goto fail; + } + + if (*fqname == 0) { + sa.base.info = "no profile specified"; + sa.base.error = -ENOENT; + goto fail; + } + + /* ref count held by cred */ + root = aa_current_profile()->ns; + + if (fqname[0] == ':') { + char *ns_name; + name = aa_split_fqname(fqname, &ns_name); + if (ns_name) + /* released below */ + ns = aa_find_namespace(root, ns_name); + } else + /* released below */ + ns = aa_get_namespace(root); + + if (!ns) { + sa.base.info = "namespace does not exist"; + sa.base.error = -ENOENT; + goto fail; + } + + sa.name2 = ns->base.name; + write_lock(&ns->lock); + if (!name) { + /* remove namespace - can only happen if fqname[0] == ':' */ + __aa_remove_namespace(ns); + } else { + /* remove profile */ + profile = aa_get_profile(__aa_find_profile(&ns->base, name)); + if (!profile) { + sa.name = name; + sa.base.error = -ENOENT; + sa.base.info = "profile does not exist"; + goto fail_ns_lock; + } + sa.name = profile->base.hname; + __aa_profile_list_release(&profile->base.profiles); + __aa_replace_profile(profile, NULL); + } + write_unlock(&ns->lock); + + /* don't fail removal if audit fails */ + (void) aa_audit_iface(&sa); + aa_put_namespace(ns); + aa_put_profile(profile); + return size; + +fail_ns_lock: + write_unlock(&ns->lock); + aa_put_namespace(ns); + +fail: + error = aa_audit_iface(&sa); + return error; +} --- linux-2.6.32.orig/security/apparmor/procattr.c +++ linux-2.6.32/security/apparmor/procattr.c @@ -0,0 +1,152 @@ +/* + * AppArmor security module + * + * This file contains AppArmor /proc//attr/ interface functions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include "include/apparmor.h" +#include "include/policy.h" +#include "include/domain.h" + +/** + * aa_getprocattr - Return the profile information for @profile + * @profile: the profile to print profile info about (NOT NULL) + * @string: the string that will contain the profile and namespace info (!NULL) + * + * Returns: length of @string on success else error on failure + * + * Requires: profile != NULL + * + * Creates a string containing the namespace_name://profile_name for + * @profile. + * + * Returns: size of string placed in @string else error code on failure + */ +int aa_getprocattr(struct aa_profile *profile, char **string) +{ + char *str; + int len = 0, mode_len, name_len, ns_len = 0; + const char *mode_str = profile_mode_names[profile->mode]; + struct aa_namespace *ns = profile->ns; + char *s; + + mode_len = strlen(mode_str) + 3; /* + 3 for _() */ + name_len = strlen(profile->base.hname); + if (ns != root_ns) + ns_len = strlen(ns->base.name) + 3; /*+ 3 for :// */ + len = mode_len + ns_len + name_len + 1; /*+ 1 for \n */ + s = str = kmalloc(len + 1, GFP_ATOMIC); /* + 1 \0 */ + if (!str) + return -ENOMEM; + + if (ns_len) { + sprintf(s, "%s://", ns->base.name); + s += ns_len; + } + if (profile->flags & PFLAG_UNCONFINED) { + sprintf(s, "%s\n", profile->base.hname); + /* mode string not being appended so reduce string size */ + len -= mode_len; + } else + sprintf(s, "%s (%s)\n", profile->base.hname, mode_str); + *string = str; + + /* NOTE: len does not include \0 of string, not saved as part of file */ + return len; +} + +/** + * split_token_from_name - separate a string of form ^ + * @op: operation name (NOT NULL) + * @args: string to parse (NOT NULL) + * @token: stores returned parsed token value (NOT NULL) + * + * Returns: start position of name after token else NULL on failure + */ +static char *split_token_from_name(const char *op, char *args, u64 * token) +{ + char *name; + + *token = simple_strtoull(args, &name, 16); + if ((name == args) || *name != '^') { + AA_ERROR("%s: Invalid input '%s'", op, args); + return ERR_PTR(-EINVAL); + } + + name++; /* skip ^ */ + if (!*name) + name = NULL; + return name; +} + +/** + * aa_setprocattr_chagnehat - handle procattr interface to change_hat + * @args: args received from writing to /proc//attr/current (NOT NULL) + * @size: size of the args + * @test: true if this is a test of change_hat permissions + * + * Returns: %0 or error code if change_hat fails + */ +int aa_setprocattr_changehat(char *args, size_t size, int test) +{ + char *hat; + u64 token; + const char *hats[16]; /* current hard limit on # of names */ + int count = 0; + + hat = split_token_from_name("change_hat", args, &token); + if (IS_ERR(hat)) + return PTR_ERR(hat); + + if (!hat && !token) { + AA_ERROR("change_hat: Invalid input, NULL hat and NULL magic"); + return -EINVAL; + } + + if (hat) { + /* set up hat name vector, args guarenteed null terminated + * at args[size] + */ + char *end = args + size; + for (count = 0; (hat < end) && count < 16; ++count) { + char *next = hat + strlen(hat) + 1; + hats[count] = hat; + hat = next; + } + } + + AA_DEBUG("%s: Magic 0x%llx Hat '%s'\n", + __func__, token, hat ? hat : NULL); + + return aa_change_hat(hats, count, token, test); +} + +/** + * aa_setprocattr_changeprofile - handle procattr interface to changeprofile + * @fqname: args received from writting to /proc//attr/current (NOT NULL) + * @onexec: true if change_profile should be delayed until exec + * @test: true if this is a test of change_profile permissions + * + * Returns: %0 or error code if change_profile fails + */ +int aa_setprocattr_changeprofile(char *fqname, int onexec, int test) +{ + char *name, *ns_name; + + name = aa_split_fqname(fqname, &ns_name); + return aa_change_profile(ns_name, name, onexec, test); +} + +int aa_setprocattr_permipc(char *fqname) +{ + /* TODO: add ipc permission querying */ + return -ENOTSUPP; +} --- linux-2.6.32.orig/security/apparmor/Kconfig +++ linux-2.6.32/security/apparmor/Kconfig @@ -0,0 +1,40 @@ +config SECURITY_APPARMOR + bool "AppArmor support" + depends on SECURITY + select AUDIT + select SECURITY_PATH + select SECURITYFS + select SECURITY_NETWORK + default n + help + This enables the AppArmor security module. + Required userspace tools (if they are not included in your + distribution) and further information may be found at + + + If you are unsure how to answer this question, answer N. + +config SECURITY_APPARMOR_BOOTPARAM_VALUE + int "AppArmor boot parameter default value" + depends on SECURITY_APPARMOR + range 0 1 + default 1 + help + This option sets the default value for the kernel parameter + 'apparmor', which allows AppArmor to be enabled or disabled + at boot. If this option is set to 0 (zero), the AppArmor + kernel parameter will default to 0, disabling AppArmor at + bootup. If this option is set to 1 (one), the AppArmor + kernel parameter will default to 1, enabling AppArmor at + bootup. + + If you are unsure how to answer this question, answer 1. + +config SECURITY_APPARMOR_COMPAT_24 + bool "Enable AppArmor 2.4 compatability" + depends on SECURITY_APPARMOR + default y + help + This option enables compatability with AppArmor 2.4. It is + recommended if compatability with older versions of AppArmor + is desired. --- linux-2.6.32.orig/security/apparmor/lsm.c +++ linux-2.6.32/security/apparmor/lsm.c @@ -0,0 +1,1079 @@ +/* + * AppArmor security module + * + * This file contains AppArmor LSM hooks. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/apparmor.h" +#include "include/apparmorfs.h" +#include "include/audit.h" +#include "include/capability.h" +#include "include/context.h" +#include "include/file.h" +#include "include/ipc.h" +#include "include/net.h" +#include "include/path.h" +#include "include/policy.h" +#include "include/procattr.h" + +/* Flag indicating whether initialization completed */ +int apparmor_initialized; + +/* + * LSM hook functions + */ + +/* + * free the associated aa_task_cxt and put its profiles + */ +static void apparmor_cred_free(struct cred *cred) +{ + aa_free_task_context(cred->security); + cred->security = NULL; +} + +/* + * allocate the apparmor part of blank credentials + */ +static int apparmor_cred_alloc_blank(struct cred *cred, gfp_t gfp) +{ + /* freed by apparmor_cred_free */ + struct aa_task_cxt *cxt = aa_alloc_task_context(gfp); + if (!cxt) + return -ENOMEM; + + cred->security = cxt; + return 0; +} + +/* + * prepare new aa_task_cxt for modification by prepare_cred block + */ +static int apparmor_cred_prepare(struct cred *new, const struct cred *old, + gfp_t gfp) +{ + /* freed by apparmor_cred_free */ + struct aa_task_cxt *cxt = aa_alloc_task_context(gfp); + if (!cxt) + return -ENOMEM; + + aa_dup_task_context(cxt, old->security); + new->security = cxt; + return 0; +} + +/* + * transfer the apparmor data to a blank set of creds + */ +static void apparmor_cred_transfer(struct cred *new, const struct cred *old) +{ + const struct aa_task_cxt *old_cxt = old->security; + struct aa_task_cxt *new_cxt = new->security; + + aa_dup_task_context(new_cxt, old_cxt); +} + +static int apparmor_ptrace_access_check(struct task_struct *child, + unsigned int mode) +{ + int rc; + + rc = cap_ptrace_access_check(child, mode); + if (rc) + return rc; + + return aa_ptrace(current, child, mode); +} + +static int apparmor_ptrace_traceme(struct task_struct *parent) +{ + return aa_ptrace(parent, current, PTRACE_MODE_ATTACH); +} + +/* Derived from security/commoncap.c:cap_capget */ +static int apparmor_capget(struct task_struct *target, kernel_cap_t *effective, + kernel_cap_t *inheritable, kernel_cap_t *permitted) +{ + struct aa_profile *profile; + const struct cred *cred; + + rcu_read_lock(); + cred = __task_cred(target); + profile = aa_cred_profile(cred); + + *effective = cred->cap_effective; + *inheritable = cred->cap_inheritable; + *permitted = cred->cap_permitted; + + if (!unconfined(profile)) + *effective = cap_intersect(*effective, profile->caps.allowed); + rcu_read_unlock(); + + return 0; +} + +static int apparmor_capable(struct task_struct *task, const struct cred *cred, + int cap, int audit) +{ + struct aa_profile *profile; + /* cap_capable returns 0 on success, else -EPERM */ + int error = cap_capable(task, cred, cap, audit); + + profile = aa_cred_profile(cred); + if (!error && !unconfined(profile)) + error = aa_capable(task, profile, cap, audit); + + return error; +} + +static int apparmor_sysctl(struct ctl_table *table, int op) +{ + int error = 0; + struct aa_profile *profile = aa_current_profile(); + + if (!unconfined(profile)) { + char *buffer, *name; + int mask; + + mask = 0; + if (op & 4) + mask |= MAY_READ; + if (op & 2) + mask |= MAY_WRITE; + + error = -ENOMEM; + /* freed below */ + buffer = (char *)__get_free_page(GFP_KERNEL); + if (!buffer) + goto out; + + /* + * TODO: convert this over to using a global or per + * namespace control instead of a hard coded /proc + */ + name = sysctl_pathname(table, buffer, PAGE_SIZE); + if (name && name - buffer >= 5) { + struct path_cond cond = { 0, S_IFREG }; + name -= 5; + memcpy(name, "/proc", 5); + error = aa_pathstr_perm(profile, "sysctl", name, mask, + &cond); + } + free_page((unsigned long)buffer); + } + +out: + return error; +} + +/** + * common_perm - basic common permission check wrapper fn for paths + * @op: operation name (NOT NULL) + * @path: path to check permission of (NOT NULL) + * @mask: requested permissions mask + * @cond: conditional info for the permission request (NOT NULL) + * + * Returns: %0 else error code if error or permission denied + */ +static int common_perm(const char *op, struct path *path, u16 mask, + struct path_cond *cond) +{ + struct aa_profile *profile; + int error = 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_path_perm(profile, op, path, mask, cond); + + return error; +} + +/** + * common_perm_dentry - common permission wrapper when path is dir, dentry + * @op: operation name (NOT NULL) + * @dir: directory of the dentry (NOT NULL) + * @dentry: dentry to check (NOT NULL) + * @mask: requested permissions mask + * @cond: conditional info for the permission request (NOT NULL) + * + * Returns: %0 else error code if error or permission denied + */ +static int common_perm_dentry(const char *op, struct path *dir, + struct dentry *dentry, u16 mask, + struct path_cond *cond) +{ + struct path path = { dir->mnt, dentry }; + + return common_perm(op, &path, mask, cond); +} + +/** + * common_perm_rm - common permission wrapper for operations doing rm + * @op: operation name (NOT NULL) + * @dir: directory that the dentry is in (NOT NULL) + * @dentry: dentry being rm'd (NOT NULL) + * @mask: requested permission mask + * + * Returns: %0 else error code if error or permission denied + */ +static int common_perm_rm(const char *op, struct path *dir, + struct dentry *dentry, u16 mask) +{ + struct inode *inode = dentry->d_inode; + struct path_cond cond = { }; + + if (!dir->mnt || !inode || !mediated_filesystem(inode)) + return 0; + + cond.uid = inode->i_uid; + cond.mode = inode->i_mode; + + return common_perm_dentry(op, dir, dentry, mask, &cond); +} + +/** + * common_perm_create - common permission wrapper for operations doing create + * @op: operation name (NOT NULL) + * @dir: directory that dentry will be created in (NOT NULL) + * @dentry: dentry to create (NOT NULL) + * @mask: request permission mask + * @mode: created file mode + * + * Returns: %0 else error code if error or permission denied + */ +static int common_perm_create(const char *op, struct path *dir, + struct dentry *dentry, u16 mask, umode_t mode) +{ + struct path_cond cond = { current_fsuid(), mode }; + + if (!dir->mnt || !mediated_filesystem(dir->dentry->d_inode)) + return 0; + + return common_perm_dentry(op, dir, dentry, mask, &cond); +} + +static int apparmor_path_unlink(struct path *dir, struct dentry *dentry) +{ + return common_perm_rm("unlink", dir, dentry, AA_MAY_DELETE); +} + +static int apparmor_path_mkdir(struct path *dir, struct dentry *dentry, + int mode) +{ + return common_perm_create("mkdir", dir, dentry, AA_MAY_CREATE, S_IFDIR); +} + +static int apparmor_path_rmdir(struct path *dir, struct dentry *dentry) +{ + return common_perm_rm("rmdir", dir, dentry, AA_MAY_DELETE); +} + +static int apparmor_path_mknod(struct path *dir, struct dentry *dentry, + int mode, unsigned int dev) +{ + return common_perm_create("mknod", dir, dentry, AA_MAY_CREATE, mode); +} + +static int apparmor_path_truncate(struct path *path, loff_t length, + unsigned int time_attrs) +{ + struct path_cond cond = { path->dentry->d_inode->i_uid, + path->dentry->d_inode->i_mode + }; + + if (!path->mnt || !mediated_filesystem(path->dentry->d_inode)) + return 0; + return common_perm("truncate", path, MAY_WRITE, &cond); +} + +static int apparmor_path_symlink(struct path *dir, struct dentry *dentry, + const char *old_name) +{ + return common_perm_create("symlink_create", dir, dentry, AA_MAY_CREATE, + S_IFLNK); +} + +static int apparmor_path_link(struct dentry *old_dentry, struct path *new_dir, + struct dentry *new_dentry) +{ + struct aa_profile *profile; + int error = 0; + + if (!mediated_filesystem(old_dentry->d_inode)) + return 0; + + profile = aa_current_profile(); + if (!unconfined(profile)) + error = aa_path_link(profile, old_dentry, new_dir, new_dentry); + return error; +} + +static int apparmor_path_rename(struct path *old_dir, struct dentry *old_dentry, + struct path *new_dir, struct dentry *new_dentry) +{ + struct aa_profile *profile; + int error = 0; + + if (!mediated_filesystem(old_dentry->d_inode)) + return 0; + + profile = aa_current_profile(); + if (!unconfined(profile)) { + struct path old_path = { old_dir->mnt, old_dentry }; + struct path new_path = { new_dir->mnt, new_dentry }; + struct path_cond cond = { old_dentry->d_inode->i_uid, + old_dentry->d_inode->i_mode + }; + + error = aa_path_perm(profile, "rename_src", &old_path, + MAY_READ | MAY_WRITE, &cond); + if (!error) + error = aa_path_perm(profile, "rename_dest", &new_path, + AA_MAY_CREATE | MAY_WRITE, &cond); + + } + return error; +} + +static int apparmor_path_chmod(struct dentry *dentry, struct vfsmount *mnt, + mode_t mode) +{ + struct aa_profile *profile; + int error = 0; + + if (!mediated_filesystem(dentry->d_inode)) + return 0; + + profile = aa_current_profile(); + if (!unconfined(profile)) { + struct path path = { mnt, dentry }; + struct path_cond cond = { dentry->d_inode->i_uid, + dentry->d_inode->i_mode + }; + + error = aa_path_perm(profile, "chmod", &path, AA_MAY_CHMOD, + &cond); + } + + return error; +} + +static int apparmor_path_chown(struct path *path, uid_t uid, gid_t gid) +{ + struct aa_profile *profile; + int error = 0; + + if (!mediated_filesystem(path->dentry->d_inode)) + return 0; + + profile = aa_current_profile(); + if (!unconfined(profile)) { + struct path_cond cond = { path->dentry->d_inode->i_uid, + path->dentry->d_inode->i_mode + }; + error = aa_path_perm(profile, "chown", path, AA_MAY_CHOWN, + &cond); + } + + return error; +} + +static int apparmor_dentry_open(struct file *file, const struct cred *cred) +{ + struct aa_profile *profile; + int error = 0; + + /* If in exec, permission is handled by bprm hooks */ + if (current->in_execve || + !mediated_filesystem(file->f_path.dentry->d_inode)) + return 0; + + profile = aa_cred_profile(cred); + if (!unconfined(profile)) { + struct aa_file_cxt *fcxt = file->f_security; + struct inode *inode = file->f_path.dentry->d_inode; + struct path_cond cond = { inode->i_uid, inode->i_mode }; + + error = aa_path_perm(profile, "open", &file->f_path, + aa_map_file_to_perms(file), &cond); + /* released by aa_free_file_context */ + fcxt->profile = aa_get_profile(profile); + /* todo cache actual allowed permissions */ + fcxt->allowed = aa_map_file_to_perms(file); + } + + return error; +} + +static int apparmor_file_alloc_security(struct file *file) +{ + /* freed by apparmor_file_free_security */ + file->f_security = aa_alloc_file_context(GFP_KERNEL); + if (!file->f_security) + return -ENOMEM; + return 0; + +} + +static void apparmor_file_free_security(struct file *file) +{ + struct aa_file_cxt *cxt = file->f_security; + + aa_free_file_context(cxt); +} + +static int apparmor_file_permission(struct file *file, int mask) +{ + /* + * TODO: cache profiles that have revalidated? + */ + struct aa_file_cxt *fcxt = file->f_security; + struct aa_profile *profile, *fprofile = aa_newest_version(fcxt->profile); + int error = 0; + + if (!fprofile || !file->f_path.mnt || + !mediated_filesystem(file->f_path.dentry->d_inode)) + return 0; + + profile = __aa_current_profile(); + + if (!unconfined(profile) && + ((fprofile != profile) || (mask & ~fcxt->allowed))) + error = aa_file_perm(profile, "file_perm", file, mask); + + return error; +} + +static int common_file_perm(const char *op, struct file *file, u16 mask) +{ + const struct aa_file_cxt *fcxt = file->f_security; + struct aa_profile *profile, *fprofile = fcxt->profile; + int error = 0; + + if (!fprofile || !file->f_path.mnt || + !mediated_filesystem(file->f_path.dentry->d_inode)) + return 0; + + profile = aa_current_profile(); + if (!unconfined(profile) && ((fprofile != profile) || + (mask & ~fcxt->allowed))) + error = aa_file_perm(profile, op, file, mask); + + return error; +} + +static int apparmor_file_lock(struct file *file, unsigned int cmd) +{ + u16 mask = AA_MAY_LOCK; + + if (cmd == F_WRLCK) + mask |= MAY_WRITE; + + return common_file_perm("file_lock", file, mask); +} + +static int common_mmap(struct file *file, const char *operation, + unsigned long prot, unsigned long flags) +{ + struct dentry *dentry; + int mask = 0; + + if (!file || !file->f_security) + return 0; + + if (prot & PROT_READ) + mask |= MAY_READ; + /* + * Private mappings don't require write perms since they don't + * write back to the files + */ + if ((prot & PROT_WRITE) && !(flags & MAP_PRIVATE)) + mask |= MAY_WRITE; + if (prot & PROT_EXEC) + mask |= AA_EXEC_MMAP; + + dentry = file->f_path.dentry; + return common_file_perm(operation, file, mask); +} + +static int apparmor_file_mmap(struct file *file, unsigned long reqprot, + unsigned long prot, unsigned long flags, + unsigned long addr, unsigned long addr_only) +{ + int rc = 0; + + /* do DAC check */ + rc = cap_file_mmap(file, reqprot, prot, flags, addr, addr_only); + if (rc || addr_only) + return rc; + + return common_mmap(file, "file_mmap", prot, flags); +} + +static int apparmor_file_mprotect(struct vm_area_struct *vma, + unsigned long reqprot, unsigned long prot) +{ + return common_mmap(vma->vm_file, "file_mprotect", prot, + !(vma->vm_flags & VM_SHARED) ? MAP_PRIVATE : 0); +} + +static int apparmor_getprocattr(struct task_struct *task, char *name, + char **value) +{ + int error = -ENOENT; + struct aa_profile *profile; + /* released below */ + const struct cred *cred = get_task_cred(task); + struct aa_task_cxt *cxt = cred->security; + profile = aa_cred_profile(cred); + + if (strcmp(name, "current") == 0) + error = aa_getprocattr(aa_newest_version(cxt->profile), + value); + else if (strcmp(name, "prev") == 0 && cxt->previous) + error = aa_getprocattr(aa_newest_version(cxt->previous), + value); + else if (strcmp(name, "exec") == 0 && cxt->onexec) + error = aa_getprocattr(aa_newest_version(cxt->onexec), + value); + else + error = -EINVAL; + + put_cred(cred); + + return error; +} + +static int apparmor_setprocattr(struct task_struct *task, char *name, + void *value, size_t size) +{ + char *command, *args; + size_t arg_size; + int error; + + if (size == 0 || size >= PAGE_SIZE) + return -EINVAL; + + /* task can only write its own attributes */ + if (current != task) + return -EACCES; + + args = value; + args[size] = '\0'; + args = strstrip(args); + command = strsep(&args, " "); + if (!args) + return -EINVAL; + args = skip_spaces(args); + if (!*args) + return -EINVAL; + + arg_size = size - (args - (char *) value); + if (strcmp(name, "current") == 0) { + if (strcmp(command, "changehat") == 0) { + error = aa_setprocattr_changehat(args, arg_size, + !AA_DO_TEST); + } else if (strcmp(command, "permhat") == 0) { + error = aa_setprocattr_changehat(args, arg_size, + AA_DO_TEST); + } else if (strcmp(command, "changeprofile") == 0) { + error = aa_setprocattr_changeprofile(args, !AA_ONEXEC, + !AA_DO_TEST); + } else if (strcmp(command, "permprofile") == 0) { + error = aa_setprocattr_changeprofile(args, !AA_ONEXEC, + AA_DO_TEST); + } else if (strcmp(command, "permipc") == 0) { + error = aa_setprocattr_permipc(args); + } else { + struct aa_audit sa = { + .operation = "setprocattr", + .gfp_mask = GFP_KERNEL, + .info = name, + .error = -EINVAL, + }; + return aa_audit(AUDIT_APPARMOR_DENIED, NULL, &sa, NULL); + } + } else if (strcmp(name, "exec") == 0) { + error = aa_setprocattr_changeprofile(args, AA_ONEXEC, + !AA_DO_TEST); + } else { + /* only support the "current" and "exec" process attributes */ + return -EINVAL; + } + if (!error) + error = size; + return error; +} + +static int apparmor_task_setrlimit(unsigned int resource, + struct rlimit *new_rlim) +{ + struct aa_profile *profile = aa_current_profile(); + int error = 0; + + if (!unconfined(profile)) + error = aa_task_setrlimit(profile, resource, new_rlim); + + return error; +} + +static int apparmor_socket_create(int family, int type, int protocol, int kern) +{ + struct aa_profile *profile; + int error = 0; + + if (kern) + return 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_net_perm(profile, "socket_create", family, + type, protocol); + return error; +} + +static int apparmor_socket_post_create(struct socket *sock, int family, + int type, int protocol, int kern) +{ + struct sock *sk = sock->sk; + + if (kern) + return 0; + + return aa_revalidate_sk(sk, "socket_post_create"); +} + +static int apparmor_socket_bind(struct socket *sock, + struct sockaddr *address, int addrlen) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_bind"); +} + +static int apparmor_socket_connect(struct socket *sock, + struct sockaddr *address, int addrlen) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_connect"); +} + +static int apparmor_socket_listen(struct socket *sock, int backlog) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_listen"); +} + +static int apparmor_socket_accept(struct socket *sock, struct socket *newsock) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_accept"); +} + +static int apparmor_socket_sendmsg(struct socket *sock, + struct msghdr *msg, int size) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_sendmsg"); +} + +static int apparmor_socket_recvmsg(struct socket *sock, + struct msghdr *msg, int size, int flags) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_recvmsg"); +} + +static int apparmor_socket_getsockname(struct socket *sock) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_getsockname"); +} + +static int apparmor_socket_getpeername(struct socket *sock) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_getpeername"); +} + +static int apparmor_socket_getsockopt(struct socket *sock, int level, + int optname) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_getsockopt"); +} + +static int apparmor_socket_setsockopt(struct socket *sock, int level, + int optname) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_setsockopt"); +} + +static int apparmor_socket_shutdown(struct socket *sock, int how) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(sk, "socket_shutdown"); +} + +static struct security_operations apparmor_ops = { + .name = "apparmor", + + .ptrace_access_check = apparmor_ptrace_access_check, + .ptrace_traceme = apparmor_ptrace_traceme, + .capget = apparmor_capget, + .sysctl = apparmor_sysctl, + .capable = apparmor_capable, + + .path_link = apparmor_path_link, + .path_unlink = apparmor_path_unlink, + .path_symlink = apparmor_path_symlink, + .path_mkdir = apparmor_path_mkdir, + .path_rmdir = apparmor_path_rmdir, + .path_mknod = apparmor_path_mknod, + .path_rename = apparmor_path_rename, + .path_chmod = apparmor_path_chmod, + .path_chown = apparmor_path_chown, + .path_truncate = apparmor_path_truncate, + .dentry_open = apparmor_dentry_open, + + .file_permission = apparmor_file_permission, + .file_alloc_security = apparmor_file_alloc_security, + .file_free_security = apparmor_file_free_security, + .file_mmap = apparmor_file_mmap, + .file_mprotect = apparmor_file_mprotect, + .file_lock = apparmor_file_lock, + + .getprocattr = apparmor_getprocattr, + .setprocattr = apparmor_setprocattr, + + .socket_create = apparmor_socket_create, + .socket_post_create = apparmor_socket_post_create, + .socket_bind = apparmor_socket_bind, + .socket_connect = apparmor_socket_connect, + .socket_listen = apparmor_socket_listen, + .socket_accept = apparmor_socket_accept, + .socket_sendmsg = apparmor_socket_sendmsg, + .socket_recvmsg = apparmor_socket_recvmsg, + .socket_getsockname = apparmor_socket_getsockname, + .socket_getpeername = apparmor_socket_getpeername, + .socket_getsockopt = apparmor_socket_getsockopt, + .socket_setsockopt = apparmor_socket_setsockopt, + .socket_shutdown = apparmor_socket_shutdown, + + .cred_alloc_blank = apparmor_cred_alloc_blank, + .cred_free = apparmor_cred_free, + .cred_prepare = apparmor_cred_prepare, + .cred_transfer = apparmor_cred_transfer, + + .bprm_set_creds = apparmor_bprm_set_creds, + .bprm_committing_creds = apparmor_bprm_committing_creds, + .bprm_committed_creds = apparmor_bprm_committed_creds, + .bprm_secureexec = apparmor_bprm_secureexec, + + .task_setrlimit = apparmor_task_setrlimit, +}; + +/* + * AppArmor sysfs module parameters + */ + +static int param_set_aabool(const char *val, struct kernel_param *kp); +static int param_get_aabool(char *buffer, struct kernel_param *kp); +#define param_check_aabool(name, p) __param_check(name, p, int) + +static int param_set_aauint(const char *val, struct kernel_param *kp); +static int param_get_aauint(char *buffer, struct kernel_param *kp); +#define param_check_aauint(name, p) __param_check(name, p, int) + +static int param_set_aalockpolicy(const char *val, struct kernel_param *kp); +static int param_get_aalockpolicy(char *buffer, struct kernel_param *kp); +#define param_check_aalockpolicy(name, p) __param_check(name, p, int) + +static int param_set_audit(const char *val, struct kernel_param *kp); +static int param_get_audit(char *buffer, struct kernel_param *kp); +#define param_check_audit(name, p) __param_check(name, p, int) + +static int param_set_mode(const char *val, struct kernel_param *kp); +static int param_get_mode(char *buffer, struct kernel_param *kp); +#define param_check_mode(name, p) __param_check(name, p, int) + +/* Flag values, also controllable via /sys/module/apparmor/parameters + * We define special types as we want to do additional mediation. + */ + +/* AppArmor global enforcement switch - complain, enforce, kill */ +enum profile_mode aa_g_profile_mode = APPARMOR_ENFORCE; +module_param_call(mode, param_set_mode, param_get_mode, + &aa_g_profile_mode, S_IRUSR | S_IWUSR); + +/* Debug mode */ +int aa_g_debug; +module_param_named(debug, aa_g_debug, aabool, S_IRUSR | S_IWUSR); + +/* Audit mode */ +enum audit_mode aa_g_audit; +module_param_call(audit, param_set_audit, param_get_audit, + &aa_g_audit, S_IRUSR | S_IWUSR); + +/* Determines if audit header is included in audited messages. This + * provides more context if the audit daemon is not running + */ +int aa_g_audit_header; +module_param_named(audit_header, aa_g_audit_header, aabool, + S_IRUSR | S_IWUSR); + +/* lock out loading/removal of policy + * TODO: add in at boot loading of policy, which is the only way to + * load policy, if lock_policy is set + */ +int aa_g_lock_policy; +module_param_named(lock_policy, aa_g_lock_policy, aalockpolicy, + S_IRUSR | S_IWUSR); + +/* Syscall logging mode */ +int aa_g_logsyscall; +module_param_named(logsyscall, aa_g_logsyscall, aabool, S_IRUSR | S_IWUSR); + +/* Maximum pathname length before accesses will start getting rejected */ +unsigned int aa_g_path_max = 2 * PATH_MAX; +module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR | S_IWUSR); + +/* Determines how paranoid loading of policy is and how much verification + * on the loaded policy is done. + */ +int aa_g_paranoid_load = 1; +module_param_named(paranoid_load, aa_g_paranoid_load, aabool, + S_IRUSR | S_IWUSR); + +/* Boot time disable flag */ +static unsigned int apparmor_enabled = CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE; +module_param_named(enabled, apparmor_enabled, aabool, S_IRUSR); + +static int __init apparmor_enabled_setup(char *str) +{ + unsigned long enabled; + int error = strict_strtoul(str, 0, &enabled); + if (!error) + apparmor_enabled = enabled ? 1 : 0; + return 1; +} + +__setup("apparmor=", apparmor_enabled_setup); + +/* set global flag turning off the ability to load policy */ +static int param_set_aalockpolicy(const char *val, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + if (aa_g_lock_policy) + return -EACCES; + return param_set_bool(val, kp); +} + +static int param_get_aalockpolicy(char *buffer, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + return param_get_bool(buffer, kp); +} + +static int param_set_aabool(const char *val, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + return param_set_bool(val, kp); +} + +static int param_get_aabool(char *buffer, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + return param_get_bool(buffer, kp); +} + +static int param_set_aauint(const char *val, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + return param_set_uint(val, kp); +} + +static int param_get_aauint(char *buffer, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + return param_get_uint(buffer, kp); +} + +static int param_get_audit(char *buffer, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + + if (!apparmor_enabled) + return -EINVAL; + + return sprintf(buffer, "%s", audit_mode_names[aa_g_audit]); +} + +static int param_set_audit(const char *val, struct kernel_param *kp) +{ + int i; + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + + if (!apparmor_enabled) + return -EINVAL; + + if (!val) + return -EINVAL; + + for (i = 0; i < AUDIT_MAX_INDEX; i++) { + if (strcmp(val, audit_mode_names[i]) == 0) { + aa_g_audit = i; + return 0; + } + } + + return -EINVAL; +} + +static int param_get_mode(char *buffer, struct kernel_param *kp) +{ + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + + if (!apparmor_enabled) + return -EINVAL; + + return sprintf(buffer, "%s", profile_mode_names[aa_g_profile_mode]); +} + +static int param_set_mode(const char *val, struct kernel_param *kp) +{ + int i; + if (!capable(CAP_MAC_ADMIN)) + return -EPERM; + + if (!apparmor_enabled) + return -EINVAL; + + if (!val) + return -EINVAL; + + for (i = 0; i < APPARMOR_NAMES_MAX_INDEX; i++) { + if (strcmp(val, profile_mode_names[i]) == 0) { + aa_g_profile_mode = i; + return 0; + } + } + + return -EINVAL; +} + +/* + * AppArmor init functions + */ + +/** + * set_init_cxt - set a task context and profile on the first task. + * + * TODO: allow setting an alternate profile than unconfined + */ +static int __init set_init_cxt(void) +{ + struct cred *cred = (struct cred *)current->real_cred; + struct aa_task_cxt *cxt; + + cxt = aa_alloc_task_context(GFP_KERNEL); + if (!cxt) + return -ENOMEM; + + cxt->profile = aa_get_profile(root_ns->unconfined); + cred->security = cxt; + + return 0; +} + +static int __init apparmor_init(void) +{ + int error; + + if (!apparmor_enabled || !security_module_enable(&apparmor_ops)) { + aa_info_message("AppArmor disabled by boot time parameter\n"); + apparmor_enabled = 0; + return 0; + } + + error = aa_alloc_root_ns(); + if (error) { + AA_ERROR("Unable to allocate default profile namespace\n"); + goto alloc_out; + } + + error = set_init_cxt(); + if (error) { + AA_ERROR("Failed to set context on init task\n"); + goto register_security_out; + } + + error = register_security(&apparmor_ops); + if (error) { + AA_ERROR("Unable to register AppArmor\n"); + goto register_security_out; + } + + /* Report that AppArmor successfully initialized */ + apparmor_initialized = 1; + if (aa_g_profile_mode == APPARMOR_COMPLAIN) + aa_info_message("AppArmor initialized: complain mode enabled"); + else if (aa_g_profile_mode == APPARMOR_KILL) + aa_info_message("AppArmor initialized: kill mode enabled"); + else + aa_info_message("AppArmor initialized"); + + return error; + +register_security_out: + aa_free_root_ns(); + +alloc_out: + aa_destroy_aafs(); + + apparmor_enabled = 0; + return error; + +} + +security_initcall(apparmor_init); --- linux-2.6.32.orig/security/apparmor/domain.c +++ linux-2.6.32/security/apparmor/domain.c @@ -0,0 +1,796 @@ +/* + * AppArmor security module + * + * This file contains AppArmor policy attachment and domain transitions + * + * Copyright (C) 2002-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "include/audit.h" +#include "include/apparmorfs.h" +#include "include/context.h" +#include "include/domain.h" +#include "include/file.h" +#include "include/ipc.h" +#include "include/match.h" +#include "include/path.h" +#include "include/policy.h" + +/** + * aa_free_domain_entries - free entries in a domain table + * @domain: the domain table to free (MAYBE NULL) + */ +void aa_free_domain_entries(struct aa_domain *domain) +{ + int i; + if (domain) { + if (!domain->table) + return; + + for (i = 0; i < domain->size; i++) + kzfree(domain->table[i]); + kzfree(domain->table); + domain->table = NULL; + } +} + +/** + * aa_may_change_ptraced_domain - check if can change profile on ptraced task + * @task: task we want to change profile of (NOT NULL) + * @to_profile: profile to change to (NOT NULL) + * + * Check if the task is ptraced and if so if the tracing task is allowed + * to trace the new domain + * + * Returns: %0 or error if change not allowed + */ +static int aa_may_change_ptraced_domain(struct task_struct *task, + struct aa_profile *to_profile) +{ + struct task_struct *tracer; + struct cred *cred = NULL; + struct aa_profile *tracerp = NULL; + int error = 0; + + rcu_read_lock(); + tracer = tracehook_tracer_task(task); + if (tracer) { + /* released below */ + cred = get_task_cred(tracer); + tracerp = aa_cred_profile(cred); + } + rcu_read_unlock(); + + /* not ptraced */ + if (!tracer || unconfined(tracerp)) + goto out; + + error = aa_may_ptrace(tracer, tracerp, to_profile, PTRACE_MODE_ATTACH); + +out: + if (cred) + put_cred(cred); + + return error; +} + +/** + * change_profile_perms - find permissions for change_profile + * @profile: the current profile (NOT NULL) + * @ns: the namespace being switched to (NOT NULL) + * @name: the name of the profile to change to (NOT NULL) + * @rstate: if !NULL will contain the state the match finished in (MAYBE NULL) + * + * Returns: permission set + */ +static struct file_perms change_profile_perms(struct aa_profile *profile, + struct aa_namespace *ns, + const char *name, + unsigned int *rstate) +{ + struct file_perms perms; + struct path_cond cond = { }; + unsigned int state; + + if (unconfined(profile)) { + perms.allowed = AA_MAY_CHANGE_PROFILE; + perms.xindex = perms.xdelegate = perms.dindex = 0; + perms.audit = perms.quiet = perms.kill = 0; + if (rstate) + *rstate = 0; + return perms; + } else if (!profile->file.dfa) { + return nullperms; + } else if ((ns == profile->ns)) { + /* try matching against rules with out namespace prependend */ + perms = aa_str_perms(profile->file.dfa, profile->file.start, + name, &cond, rstate); + if (COMBINED_PERM_MASK(perms) & AA_MAY_CHANGE_PROFILE) + return perms; + } + + /* try matching with namespace name and then profile */ + state = aa_dfa_match(profile->file.dfa, profile->file.start, + ns->base.name); + state = aa_dfa_null_transition(profile->file.dfa, state, 0); + return aa_str_perms(profile->file.dfa, state, name, &cond, rstate); +} + +/** + * __aa_attach_match_ - find an attachment match + * @name - to match against (NOT NULL) + * @head - profile list to walk (NOT NULL) + * + * Do a linear search on the profiles in the list. There is a matching + * preference where an exact match is prefered over a name which uses + * expressions to match, and matching expressions with the greatest + * xmatch_len are prefered. + * + * Requires: @head not be shared or have appropriate locks held + * + * Returns: profile or NULL if no match found + */ +static struct aa_profile *__aa_attach_match(const char *name, + struct list_head *head) +{ + int len = 0; + struct aa_profile *profile, *candidate = NULL; + + list_for_each_entry(profile, head, base.list) { + if (profile->flags & PFLAG_NULL) + continue; + if (profile->xmatch && profile->xmatch_len > len) { + unsigned int state = aa_dfa_match(profile->xmatch, + DFA_START, name); + u16 perm = dfa_user_allow(profile->xmatch, state); + /* any accepting state means a valid match. */ + if (perm & MAY_EXEC) { + candidate = profile; + len = profile->xmatch_len; + } + } else if (!strcmp(profile->base.name, name)) + /* exact non-re match, no more searching required */ + return profile; + } + + return candidate; +} + +/** + * aa_find_attach - do attachment search for unconfined processes + * @ns: the current namespace (NOT NULL) + * @list: list to search (NOT NULL) + * @name: the executable name to match against (NOT NULL) + * + * Returns: profile or NULL if no match found + */ +static struct aa_profile *aa_find_attach(struct aa_namespace *ns, + struct list_head *list, + const char *name) +{ + struct aa_profile *profile; + + read_lock(&ns->lock); + profile = aa_get_profile(__aa_attach_match(name, list)); + read_unlock(&ns->lock); + + return profile; +} + +/** + * separate_fqname - separate the namespace and profile names + * @fqname: the fqname name to split (NOT NULL) + * @ns_name: the namespace name if it exists (NOT NULL) + * + * This is the xtable equivalent routine of aa_split_fqname. It finds the + * split in an xtable fqname which contains an embedded \0 instead of a : + * if a namespace is specified. This is done so the xtable is constant and + * isn't resplit on every lookup. + * + * Either the profile or namespace name may be optional but if the namespace + * is specified the profile name termination must be present. This results + * in the following possible encodings: + * profile_name\0 + * :ns_name\0profile_name\0 + * :ns_name\0\0 + * + * NOTE: the xtable fqname is prevalidated at load time in unpack_trans_table + * + * Returns: profile name if it is specified else NULL + */ +static const char *separate_fqname(const char *fqname, const char **ns_name) +{ + const char *name; + + if (fqname[0] == ':') { + *ns_name = fqname + 1; /* skip : */ + name = *ns_name + strlen(*ns_name) + 1; + if (!*name) + name = NULL; + } else { + *ns_name = NULL; + name = fqname; + } + + return name; +} + +static const char *next_name(int xtype, const char *name) +{ + return NULL; +} + +/** + * x_to_profile - get target profile for a given xindex + * @profile: current profile (NOT NULL) + * @name: to to lookup if specified (NOT NULL) + * @xindex: index into x transition table + * + * find profile for a transition index + * + * Returns: refcounted profile or NULL if not found available + */ +static struct aa_profile *x_to_profile(struct aa_profile *profile, + const char *name, u16 xindex) +{ + struct aa_profile *new_profile = NULL; + struct aa_namespace *ns = profile->ns; + u16 xtype = xindex & AA_X_TYPE_MASK; + int index = xindex & AA_X_INDEX_MASK; + + switch (xtype) { + case AA_X_NONE: + /* fail exec unless ix || ux fallback - handled by caller */ + return NULL; + case AA_X_NAME: + if (xindex & AA_X_CHILD) + /* released by caller */ + new_profile = aa_find_attach(ns, + &profile->base.profiles, + name); + else + /* released by caller */ + new_profile = aa_find_attach(ns, &ns->base.profiles, + name); + /* released by caller */ + return new_profile; + case AA_X_TABLE: + /* index is guarenteed to be in range */ + name = profile->file.trans.table[index]; + break; + } + + for (; !new_profile && name; name = next_name(xtype, name)) { + struct aa_namespace *new_ns; + const char *xname = NULL; + + new_ns = NULL; + if (xindex & AA_X_CHILD) { + /* release by caller */ + new_profile = aa_find_child(profile, name); + if (new_profile) + return new_profile; + continue; + } else if (*name == ':') { + /* switching namespace */ + const char *ns_name; + xname = name = separate_fqname(name, &ns_name); + if (!xname) + /* no name so use profile name */ + xname = profile->base.hname; + if (*ns_name == '@') { + /* TODO: variable support */ + ; + } + /* released below */ + new_ns = aa_find_namespace(ns, ns_name); + if (!new_ns) + continue; + } else if (*name == '@') { + /* TODO: variable support */ + continue; + } else { + xname = name; + } + + /* released by caller */ + new_profile = aa_find_profile(new_ns ? new_ns : ns, xname); + aa_put_namespace(new_ns); + } + + /* released by caller */ + return new_profile; +} + +/** + * apparmor_bprm_set_creds - set the new creds on the bprm struct + * @bprm: binprm for the exec (NOT NULL) + * + * Returns: %0 or error on failure + */ +int apparmor_bprm_set_creds(struct linux_binprm *bprm) +{ + struct aa_task_cxt *cxt; + struct aa_profile *profile, *new_profile = NULL; + struct aa_namespace *ns; + char *buffer = NULL; + unsigned int state; + struct path_cond cond = { + bprm->file->f_path.dentry->d_inode->i_uid, + bprm->file->f_path.dentry->d_inode->i_mode + }; + struct aa_audit_file sa = { + .base.operation = "exec", + .base.gfp_mask = GFP_KERNEL, + .request = MAY_EXEC, + .cond = &cond, + }; + + sa.base.error = cap_bprm_set_creds(bprm); + if (sa.base.error) + return sa.base.error; + + if (bprm->cred_prepared) + return 0; + + cxt = bprm->cred->security; + BUG_ON(!cxt); + + profile = aa_get_profile(aa_newest_version(cxt->profile)); + /* + * get the namespace from the replacement profile as replacement + * can change the namespace + */ + ns = profile->ns; + state = profile->file.start; + + /* buffer freed below, name is pointer inside of buffer */ + sa.base.error = aa_get_name(&bprm->file->f_path, profile->path_flags, + &buffer, (char **)&sa.name); + if (sa.base.error) { + if (profile->flags & + (PFLAG_IX_ON_NAME_ERROR | PFLAG_UNCONFINED)) + sa.base.error = 0; + sa.base.info = "Exec failed name resolution"; + sa.name = bprm->filename; + goto audit; + } + + if (unconfined(profile)) { + /* unconfined task - attach profile if one matches */ + new_profile = aa_find_attach(ns, &ns->base.profiles, sa.name); + if (!new_profile) + goto cleanup; + goto apply; + } else if (cxt->onexec) { + /* + * onexec permissions are stored in a pair, rewalk the + * dfa to get start of the exec path match. + */ + sa.perms = change_profile_perms(profile, cxt->onexec->ns, + sa.name, &state); + state = aa_dfa_null_transition(profile->file.dfa, state, 0); + } + sa.perms = aa_str_perms(profile->file.dfa, state, sa.name, &cond, NULL); + if (cxt->onexec && sa.perms.allowed & AA_MAY_ONEXEC) { + /* transfer the onexec reference, this is allowed as the + * cred is being prepared, and isn't committed yet. + */ + new_profile = cxt->onexec; + cxt->onexec = NULL; + sa.base.info = "change_profile onexec"; + } else if (sa.perms.allowed & MAY_EXEC) { + new_profile = x_to_profile(profile, sa.name, sa.perms.xindex); + if (!new_profile) { + if (sa.perms.xindex & AA_X_INHERIT) { + /* (p|c|n)ix - don't change profile */ + sa.base.info = "ix fallback"; + goto x_clear; + } else if (sa.perms.xindex & AA_X_UNCONFINED) { + new_profile = aa_get_profile(ns->unconfined); + sa.base.info = "ux fallback"; + } else { + sa.base.error = -ENOENT; + sa.base.info = "profile not found"; + } + } + } else if (COMPLAIN_MODE(profile)) { + new_profile = aa_new_null_profile(profile, 0); + sa.base.error = -EACCES; + if (!new_profile) { + sa.base.error = -ENOMEM; + sa.base.info = "could not create null profile"; + } else + sa.name2 = new_profile->base.hname; + sa.perms.xindex |= AA_X_UNSAFE; + } else { + sa.base.error = -EACCES; + } + + if (!new_profile) + goto audit; + + if (profile == new_profile) + goto abort; + + if (bprm->unsafe & LSM_UNSAFE_SHARE) { + /* FIXME: currently don't mediate shared state */ + ; + } + + if (bprm->unsafe & (LSM_UNSAFE_PTRACE | LSM_UNSAFE_PTRACE_CAP)) { + sa.base.error = aa_may_change_ptraced_domain(current, + new_profile); + if (sa.base.error) + goto abort; + } + + /* Determine if secure exec is needed. + * Can be at this point for the following reasons: + * 1. unconfined switching to confined + * 2. confined switching to different confinement + * 3. confined switching to unconfined + * + * Cases 2 and 3 are marked as requiring secure exec + * (unless policy specified "unsafe exec") + * + * bprm->unsafe is used to cache the AA_X_UNSAFE permission + * to avoid having to recompute in secureexec + */ + if (!(sa.perms.xindex & AA_X_UNSAFE)) { + AA_DEBUG("scrubbing environment variables for %s profile=%s\n", + sa.name, new_profile->base.hname); + bprm->unsafe |= AA_SECURE_X_NEEDED; + } +apply: + sa.name2 = new_profile->base.hname; + /* When switching namespace ensure its part of audit message */ + if (new_profile->ns != ns) + sa.name3 = new_profile->ns->base.hname; + + /* when transitioning profiles clear unsafe personality bits */ + bprm->per_clear |= PER_CLEAR_ON_SETID; + + aa_put_profile(cxt->profile); + /* transfer new profile reference will be released when cxt is freed */ + cxt->profile = new_profile; + +x_clear: + aa_put_profile(cxt->previous); + aa_put_profile(cxt->onexec); + cxt->previous = NULL; + cxt->onexec = NULL; + cxt->token = 0; + +audit: + sa.base.error = aa_audit_file(profile, &sa); + +cleanup: + aa_put_profile(profile); + kfree(buffer); + + return sa.base.error; + +abort: + aa_put_profile(new_profile); + goto audit; +} + +/** + * apparmor_bprm_secureexec - determine if secureexec is needed + * @bprm: binprm for exec (NOT NULL) + * + * Returns: %1 if secureexec is needed else %0 + */ +int apparmor_bprm_secureexec(struct linux_binprm *bprm) +{ + int ret = cap_bprm_secureexec(bprm); + + /* the decision to use secure exec is computed in set_creds + * and stored in bprm->unsafe. + */ + if (!ret && (bprm->unsafe & AA_SECURE_X_NEEDED)) + ret = 1; + + return ret; +} + +/** + * apparmor_bprm_committing_creds - do task cleanup on committing new creds + * @bprm: binprm for the exec (NOT NULL) + */ +void apparmor_bprm_committing_creds(struct linux_binprm *bprm) +{ + struct aa_profile *profile = __aa_current_profile(); + struct aa_task_cxt *new_cxt = bprm->cred->security; + + /* bail out if unconfined or not changing profile */ + if ((new_cxt->profile == profile) || + (unconfined(new_cxt->profile))) + return; + + current->pdeath_signal = 0; + + /* reset soft limits and set hard limits for the new profile */ + __aa_transition_rlimits(profile, new_cxt->profile); +} + +/** + * apparmor_bprm_commited_cred - do cleanup after new creds committed + * @bprm: binprm for the exec (NOT NULL) + */ +void apparmor_bprm_committed_creds(struct linux_binprm *bprm) +{ + /* TODO: cleanup signals - ipc mediation */ + return; +} + +/* + * Functions for self directed profile change + */ + +/** + * new_compound_name - create an hname with @n2 appended to @n1 + * @n1: base of hname (NOT NULL) + * @n2: name to append (NOT NULL) + * + * Returns: new name or NULL on error + */ +static char *new_compound_name(const char *n1, const char *n2) +{ + char *name = kmalloc(strlen(n1) + strlen(n2) + 3, GFP_KERNEL); + if (name) + sprintf(name, "%s//%s", n1, n2); + return name; +} + +/** + * aa_change_hat - change hat to/from subprofile + * @hats: vector of hat names to try changing into (unused if @count == 0) + * @count: number of hat names in @hats + * @token: magic value to validate the hat change + * @permtest: true if this is just a permission test + * + * Change to the first profile specified in @hats that exists, and store + * the @hat_magic in the current task context. If the count == 0 and the + * @token matches that stored in the current task context, return to the + * top level profile. + * + * Returns %0 on success, error otherwise. + */ +int aa_change_hat(const char *hats[], int count, u64 token, bool permtest) +{ + const struct cred *cred; + struct aa_task_cxt *cxt; + struct aa_profile *profile, *previous_profile, *hat = NULL; + struct aa_audit_file sa = { + .base.gfp_mask = GFP_KERNEL, + .base.operation = "change_hat", + .request = AA_MAY_CHANGEHAT, + }; + char *name = NULL; + int i; + + /* released below */ + cred = get_current_cred(); + cxt = cred->security; + profile = aa_cred_profile(cred); + previous_profile = cxt->previous; + + if (unconfined(profile)) { + sa.base.info = "unconfined"; + sa.base.error = -EPERM; + goto audit; + } + + if (count) { + /* attempting to change into a new hat or switch to a sibling */ + struct aa_profile *root; + root = PROFILE_IS_HAT(profile) ? profile->parent : profile; + sa.name2 = profile->ns->base.hname; + + /* find first matching hat */ + for (i = 0; i < count && !hat; i++) + /* released below */ + hat = aa_find_child(root, hats[i]); + if (!hat) { + if (!COMPLAIN_MODE(root) || permtest) { + sa.base.info = "hat not found"; + if (list_empty(&root->base.profiles)) + sa.base.error = -ECHILD; + else + sa.base.error = -ENOENT; + goto out; + } + + /* + * In complain mode and failed to match any hats. + * Audit the failure based off of the first hat + * supplied. This is done due how userspace + * interacts with change_hat. + * + * TODO: Add logging of all failed hats + */ + + /* freed below */ + name = new_compound_name(root->base.hname, hats[0]); + sa.name = name; + /* released below */ + hat = aa_new_null_profile(profile, 1); + if (!hat) { + sa.base.info = "failed null profile create"; + sa.base.error = -ENOMEM; + goto audit; + } + } else { + sa.name = hat->base.hname; + if (!PROFILE_IS_HAT(hat)) { + sa.base.info = "target not hat"; + sa.base.error = -EPERM; + goto audit; + } + } + + sa.base.error = aa_may_change_ptraced_domain(current, hat); + if (sa.base.error) { + sa.base.info = "ptraced"; + sa.base.error = -EPERM; + goto audit; + } + + if (!permtest) { + sa.base.error = aa_set_current_hat(hat, token); + if (sa.base.error == -EACCES) + /* kill task incase of brute force attacks */ + sa.perms.kill = AA_MAY_CHANGEHAT; + else if (name && !sa.base.error) + /* reset error for learning of new hats */ + sa.base.error = -ENOENT; + } + } else if (previous_profile) { + /* Return to saved profile. Kill task if restore fails + * to avoid brute force attacks + */ + sa.name = previous_profile->base.hname; + sa.base.error = aa_restore_previous_profile(token); + sa.perms.kill = AA_MAY_CHANGEHAT; + } else + /* ignore restores when there is no saved profile */ + goto out; + +audit: + if (!permtest) + sa.base.error = aa_audit_file(profile, &sa); + +out: + aa_put_profile(hat); + kfree(name); + put_cred(cred); + + return sa.base.error; +} + +/** + * aa_change_profile - perform a one-way profile transition + * @ns_name: name of the profile namespace to change to + * @hname: name of profile to change to + * @onexec: whether this transition is to take place immediately or at exec + * @permtest: true if this is just a permission test + * + * Change to new profile @name. Unlike with hats, there is no way + * to change back. If @onexec then the transition is delayed until + * the next exec. + * + * Returns %0 on success, error otherwise. + */ +int aa_change_profile(const char *ns_name, const char *hname, int onexec, + bool permtest) +{ + const struct cred *cred; + struct aa_task_cxt *cxt; + struct aa_profile *profile, *target = NULL; + struct aa_namespace *ns = NULL; + struct aa_audit_file sa = { + .request = AA_MAY_CHANGE_PROFILE, + .base.gfp_mask = GFP_KERNEL, + }; + + if (!hname && !ns_name) + return -EINVAL; + + if (onexec) + sa.base.operation = "change_onexec"; + else + sa.base.operation = "change_profile"; + + cred = get_current_cred(); + cxt = cred->security; + profile = aa_cred_profile(cred); + + if (ns_name) { + /* released below */ + ns = aa_find_namespace(profile->ns, ns_name); + if (!ns) { + /* we don't create new namespace in complain mode */ + sa.name2 = ns_name; + sa.base.info = "namespace not found"; + sa.base.error = -ENOENT; + goto audit; + } + sa.name2 = ns->base.hname; + } else { + /* released below */ + ns = aa_get_namespace(profile->ns); + sa.name2 = ns->base.hname; + } + + /* if the name was not specified, use the name of the current profile */ + if (!hname) { + if (unconfined(profile)) + hname = ns->unconfined->base.hname; + else + hname = profile->base.hname; + } + sa.name = hname; + + sa.perms = change_profile_perms(profile, ns, hname, NULL); + if (!(sa.perms.allowed & AA_MAY_CHANGE_PROFILE)) { + sa.base.error = -EACCES; + goto audit; + } + + /* released below */ + target = aa_find_profile(ns, hname); + if (!target) { + sa.base.info = "profile not found"; + sa.base.error = -ENOENT; + if (permtest || !COMPLAIN_MODE(profile)) + goto audit; + /* release below */ + target = aa_new_null_profile(profile, 0); + if (!target) { + sa.base.info = "failed null profile create"; + sa.base.error = -ENOMEM; + goto audit; + } + } + + /* check if tracing task is allowed to trace target domain */ + sa.base.error = aa_may_change_ptraced_domain(current, target); + if (sa.base.error) { + sa.base.info = "ptrace prevents transition"; + goto audit; + } + + if (permtest) + goto audit; + + if (onexec) + sa.base.error = aa_set_current_onexec(target); + else + sa.base.error = aa_replace_current_profiles(target); + +audit: + if (!permtest) + sa.base.error = aa_audit_file(profile, &sa); + + aa_put_namespace(ns); + aa_put_profile(target); + put_cred(cred); + + return sa.base.error; +} --- linux-2.6.32.orig/security/apparmor/apparmorfs.c +++ linux-2.6.32/security/apparmor/apparmorfs.c @@ -0,0 +1,561 @@ +/* + * AppArmor security module + * + * This file contains AppArmor /sys/kernel/security/apparmor interface functions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include +#include +#include +#include + +#include "include/apparmor.h" +#include "include/apparmorfs.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/policy.h" + +/** + * kvmalloc - do allocation prefering kmalloc but falling back to vmalloc + * @size: size of allocation + * + * Return: allocated buffer or NULL if failed + * + * It is possible that policy being loaded from the user is larger than + * what can be allocated by kmalloc, in those cases fall back to vmalloc. + */ +static void *kvmalloc(size_t size) +{ + void *buffer; + + if (size == 0) + return NULL; + + buffer = kmalloc(size, GFP_KERNEL | __GFP_NOWARN); + if (!buffer) + buffer = vmalloc(size); + return buffer; +} + +/** + * kvfree - free an allocation do by kvmalloc + * @buffer: buffer to free + * + * Free a buffer allocated by kvmalloc + */ +static void kvfree(void *buffer) +{ + if (!buffer) + return; + + if (is_vmalloc_addr(buffer)) + vfree(buffer); + else + kfree(buffer); +} + +/** + * aa_simple_write_to_buffer - common routine for getting policy from user + * @userbuf: user buffer to copy data from (NOT NULL) + * @alloc_size: size of user buffer + * @copy_size: size of data to copy from user buffer + * @pos: position write is at in the file + * @operation: name of operation doing the user buffer copy (NOT NULL) + * + * Returns: kernel buffer containing copy of user buffer data or an + * ERR_PTR on failure. + */ +static char *aa_simple_write_to_buffer(const char __user *userbuf, + size_t alloc_size, size_t copy_size, + loff_t *pos, const char *operation) +{ + char *data; + + if (*pos != 0) { + /* only writes from pos 0, that is complete writes */ + data = ERR_PTR(-ESPIPE); + goto out; + } + + /* + * Don't allow profile load/replace/remove from profiles that don't + * have CAP_MAC_ADMIN + */ + if (!capable(CAP_MAC_ADMIN)) { + struct aa_profile *profile = NULL; + struct aa_audit sa = { + .operation = operation, + .gfp_mask = GFP_KERNEL, + .error = -EACCES, + }; + profile = aa_current_profile(); + data = ERR_PTR(aa_audit(AUDIT_APPARMOR_DENIED, profile, &sa, + NULL)); + goto out; + } + /* freed by caller to aa_simple_write_to_buffer */ + data = kvmalloc(alloc_size); + if (data == NULL) { + data = ERR_PTR(-ENOMEM); + goto out; + } + + if (copy_from_user(data, userbuf, copy_size)) { + kvfree(data); + data = ERR_PTR(-EFAULT); + goto out; + } + +out: + return data; +} + + +/* .load file hook fn to load policy */ +static ssize_t aa_profile_load(struct file *f, const char __user *buf, + size_t size, loff_t *pos) +{ + char *data; + ssize_t error; + + data = aa_simple_write_to_buffer(buf, size, size, pos, "profile_load"); + + error = PTR_ERR(data); + if (!IS_ERR(data)) { + error = aa_interface_replace_profiles(data, size, 1); + kvfree(data); + } + + return error; +} + +static const struct file_operations aa_fs_profile_load = { + .write = aa_profile_load +}; + +/* .replace file hook fn to load and/or replace policy */ +static ssize_t aa_profile_replace(struct file *f, const char __user *buf, + size_t size, loff_t *pos) +{ + char *data; + ssize_t error; + + data = aa_simple_write_to_buffer(buf, size, size, pos, + "profile_replace"); + error = PTR_ERR(data); + if (!IS_ERR(data)) { + error = aa_interface_replace_profiles(data, size, 0); + kvfree(data); + } + + return error; +} + +static const struct file_operations aa_fs_profile_replace = { + .write = aa_profile_replace +}; + +/* .remove file hook fn to remove loaded policy */ +static ssize_t aa_profile_remove(struct file *f, const char __user *buf, + size_t size, loff_t *pos) +{ + char *data; + ssize_t error; + + /* + * aa_remove_profile needs a null terminated string so 1 extra + * byte is allocated and the copied data is null terminated. + */ + data = aa_simple_write_to_buffer(buf, size + 1, size, pos, + "profile_remove"); + + error = PTR_ERR(data); + if (!IS_ERR(data)) { + data[size] = 0; + error = aa_interface_remove_profiles(data, size); + kvfree(data); + } + + return error; +} + +static const struct file_operations aa_fs_profile_remove = { + .write = aa_profile_remove +}; + + +/** + * __next_namespace - find the next namespace to list + * @root: root namespace to stop search at (NOT NULL) + * @ns: current ns position (NOT NULL) + * + * Find the next namespace from @ns under @root and handle all locking needed + * while switching current namespace. + * + * Returns: next namespace or NULL if at last namespace under @root + * NOTE: will not unlock root->lock + */ +static struct aa_namespace *__next_namespace(struct aa_namespace *root, + struct aa_namespace *ns) +{ + struct aa_namespace *parent; + + /* is next namespace a child */ + if (!list_empty(&ns->sub_ns)) { + struct aa_namespace *next; + next = list_first_entry(&ns->sub_ns, typeof(*ns), base.list); + read_lock(&next->lock); + return next; + } + + /* check if the next ns is a sibling, parent, gp, .. */ + parent = ns->parent; + while (parent) { + read_unlock(&ns->lock); + list_for_each_entry_continue(ns, &parent->sub_ns, base.list) { + read_lock(&ns->lock); + return ns; + } + if (parent == root) + return NULL; + ns = parent; + parent = parent->parent; + } + + return NULL; +} + +/** + * __first_profile - find the first profile in a namespace + * @root: namespace that is root of profiles being displayed (NOT NULL) + * @ns: namespace to start in (NOT NULL) + * + * Returns: unrefcounted profile or NULL if no profile + */ + static struct aa_profile *__first_profile(struct aa_namespace *root, + struct aa_namespace *ns) +{ + for ( ; ns; ns = __next_namespace(root, ns)) { + if (!list_empty(&ns->base.profiles)) + return list_first_entry(&ns->base.profiles, + struct aa_profile, base.list); + } + return NULL; +} + +/** + * __next_profile - step to the next profile in a profile tree + * @profile: current profile in tree (NOT NULL) + * + * Perform a depth first taversal on the profile tree in a namespace + * + * Returns: next profile or NULL if done + * Requires: profile->ns.lock to be held + */ +static struct aa_profile *__next_profile(struct aa_profile *p) +{ + struct aa_profile *parent; + struct aa_namespace *ns = p->ns; + + /* is next profile a child */ + if (!list_empty(&p->base.profiles)) + return list_first_entry(&p->base.profiles, typeof(*p), + base.list); + + /* is next profile a sibling, parent sibling, gp, subling, .. */ + parent = p->parent; + while (parent) { + list_for_each_entry_continue(p, &parent->base.profiles, + base.list) + return p; + p = parent; + parent = parent->parent; + } + + /* is next another profile in the namespace */ + list_for_each_entry_continue(p, &ns->base.profiles, base.list) + return p; + + return NULL; +} + +/** + * next_profile - step to the next profile in where ever it may be + * @root: root namespace (NOT NULL) + * @profile: current profile (NOT NULL) + * + * Returns: next profile or NULL if there isn't one + */ +static struct aa_profile *next_profile(struct aa_namespace *root, + struct aa_profile *profile) +{ + struct aa_profile *next = __next_profile(profile); + if (next) + return next; + + /* finished all profiles in namespace move to next namespace */ + return __first_profile(root, __next_namespace(root, profile->ns)); +} + +/** + * p_start - start a depth first traversal of profile tree + * @f: seq_file to fill + * @pos: current position + * + * Returns: first profile under current namespace or NULL if none found + * + * acquires first ns->lock + */ +static void *p_start(struct seq_file *f, loff_t *pos) + __acquires(root->lock) +{ + struct aa_profile *profile = NULL; + struct aa_namespace *root = aa_current_profile()->ns; + loff_t l = *pos; + f->private = aa_get_namespace(root); + + + /* find the first profile */ + read_lock(&root->lock); + profile = __first_profile(root, root); + + /* skip to position */ + for (; profile && l > 0; l--) + profile = next_profile(root, profile); + + return profile; +} + +/** + * p_next - read the next profile entry + * @f: seq_file to fill + * @p: profile previously returned + * @pos: current position + * + * Returns: next profile after @p or NULL if none + * + * may acquire/release locks in namespace tree as necessary + */ +static void *p_next(struct seq_file *f, void *p, loff_t *pos) +{ + struct aa_profile *profile = p; + struct aa_namespace *root = f->private; + (*pos)++; + + return next_profile(root, profile); +} + +/** + * p_stop - stop depth first traversal + * @f: seq_file we are filling + * @p: the last profile writen + * + * Release all locking done by p_start/p_next on namespace tree + */ +static void p_stop(struct seq_file *f, void *p) + __releases(root->lock) +{ + struct aa_profile *profile = p; + struct aa_namespace *root = f->private, *ns; + + if (profile) { + for (ns = profile->ns; ns && ns != root; ns = ns->parent) + read_unlock(&ns->lock); + } + read_unlock(&root->lock); + aa_put_namespace(root); +} + +/** + * print_ns_name - print a namespace name back to @root + * @root: root namespace to stop at + * @ns: namespace to gen name for + * + * Returns: true if it printed a name + */ +static bool print_ns_name(struct seq_file *f, struct aa_namespace *root, + struct aa_namespace *ns) +{ + if (!ns || ns == root) + return 0; + + if (ns->parent && print_ns_name(f, root, ns->parent)) + seq_printf(f, "//"); + + seq_printf(f, "%s", ns->base.name); + return 1; +} + +/** + * seq_show_profile - + * @f: seq_file to file + * @p: current position (profile) (NOT NULL) + * + * Returns: error on failure + */ +static int seq_show_profile(struct seq_file *f, void *p) +{ + struct aa_profile *profile = (struct aa_profile *)p; + struct aa_namespace *root = f->private; + + if (profile->ns != root) + seq_printf(f, ":"); + if (print_ns_name(f, root, profile->ns)) + seq_printf(f, "://"); + seq_printf(f, "%s (%s)\n", profile->base.hname, + COMPLAIN_MODE(profile) ? "complain" : "enforce"); + + return 0; +} + +static const struct seq_operations aa_fs_profiles_op = { + .start = p_start, + .next = p_next, + .stop = p_stop, + .show = seq_show_profile, +}; + +static int aa_profiles_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &aa_fs_profiles_op); +} + +static int aa_profiles_release(struct inode *inode, struct file *file) +{ + return seq_release(inode, file); +} + +static const struct file_operations aa_fs_profiles_fops = { + .open = aa_profiles_open, + .read = seq_read, + .llseek = seq_lseek, + .release = aa_profiles_release, +}; + + +/** Base file system setup **/ + +static struct dentry *aa_fs_dentry; +struct dentry *aa_fs_null; +struct vfsmount *aa_fs_mnt; + +static void aafs_remove(const char *name) +{ + struct dentry *dentry; + + dentry = lookup_one_len(name, aa_fs_dentry, strlen(name)); + if (!IS_ERR(dentry)) { + securityfs_remove(dentry); + dput(dentry); + } +} + +/** + * aafs_create - create an entry in the apparmor filesystem + * @name: name of the entry + * @mask: file permission mask of the file + * @fops: file operations for the file + * + * Used aafs_remove to remove entries created with this fn. + */ +static int aafs_create(const char *name, int mask, + const struct file_operations *fops) +{ + struct dentry *dentry; + + dentry = securityfs_create_file(name, S_IFREG | mask, aa_fs_dentry, + NULL, fops); + + return IS_ERR(dentry) ? PTR_ERR(dentry) : 0; +} + +/** + * aa_destroy_aafs - cleanup and free aafs + * + * releases dentries allocated by aa_create_aafs + */ +void aa_destroy_aafs(void) +{ + if (aa_fs_dentry) { + aafs_remove(".remove"); + aafs_remove(".replace"); + aafs_remove(".load"); + aafs_remove("profiles"); +#ifdef CONFIG_SECURITY_APPARMOR_COMPAT_24 + aafs_remove("matching"); + aafs_remove("features"); +#endif + securityfs_remove(aa_fs_dentry); + aa_fs_dentry = NULL; + } +} + +/** + * aa_create_aafs - create the apparmor security filesystem + * + * dentries created here are released by aa_destroy_aafs + * + * Returns: error on failure + */ +int aa_create_aafs(void) +{ + int error; + + if (!apparmor_initialized) + return 0; + + if (aa_fs_dentry) { + AA_ERROR("%s: AppArmor securityfs already exists\n", __func__); + return -EEXIST; + } + + aa_fs_dentry = securityfs_create_dir("apparmor", NULL); + if (IS_ERR(aa_fs_dentry)) { + error = PTR_ERR(aa_fs_dentry); + aa_fs_dentry = NULL; + goto error; + } +#ifdef CONFIG_SECURITY_APPARMOR_COMPAT_24 + error = aafs_create("matching", 0444, &aa_fs_matching_fops); + if (error) + goto error; + error = aafs_create("features", 0444, &aa_fs_features_fops); + if (error) + goto error; +#endif + error = aafs_create("profiles", 0440, &aa_fs_profiles_fops); + if (error) + goto error; + error = aafs_create(".load", 0640, &aa_fs_profile_load); + if (error) + goto error; + error = aafs_create(".replace", 0640, &aa_fs_profile_replace); + if (error) + goto error; + error = aafs_create(".remove", 0640, &aa_fs_profile_remove); + if (error) + goto error; + + /* TODO: add support for apparmorfs_null and apparmorfs_mnt */ + + /* Report that AppArmor fs is enabled */ + aa_info_message("AppArmor Filesystem Enabled"); + return 0; + +error: + aa_destroy_aafs(); + AA_ERROR("Error creating AppArmor securityfs\n"); + return error; +} + +fs_initcall(aa_create_aafs); --- linux-2.6.32.orig/security/apparmor/capability.c +++ linux-2.6.32/security/apparmor/capability.c @@ -0,0 +1,146 @@ +/* + * AppArmor security module + * + * This file contains AppArmor capability mediation functions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include + +#include "include/apparmor.h" +#include "include/capability.h" +#include "include/context.h" +#include "include/policy.h" +#include "include/audit.h" + +/* + * Table of capability names: we generate it from capabilities.h. + */ +#include "capability_names.h" + +struct audit_cache { + struct aa_profile *profile; + kernel_cap_t caps; +}; + +static DEFINE_PER_CPU(struct audit_cache, audit_cache); + +struct aa_audit_caps { + struct aa_audit base; + + int cap; +}; + +/** + * audit_cb - call back for capability components of audit struct + * @ab - audit buffer (NOT NULL) + * @va - audit struct to audit data from (NOT NULL) + */ +static void audit_cb(struct audit_buffer *ab, struct aa_audit *va) +{ + struct aa_audit_caps *sa = container_of(va, struct aa_audit_caps, base); + + audit_log_format(ab, " name="); + audit_log_untrustedstring(ab, capability_names[sa->cap]); +} + +/** + * aa_audit_caps - audit a capability + * @profile: profile confining task + * @sa: audit structure containing data to audit + * + * Do auditing of capability and handle, audit/complain/kill modes switching + * and duplicate message elimination. + * + * returns: 0 or sa->error on succes, error code on failure + */ +static int aa_audit_caps(struct aa_profile *profile, struct aa_audit_caps *sa) +{ + struct audit_cache *ent; + int type = AUDIT_APPARMOR_AUTO; + + if (likely(!sa->base.error)) { + /* test if auditing is being forced */ + if (likely((AUDIT_MODE(profile) != AUDIT_ALL) && + !cap_raised(profile->caps.audit, sa->cap))) + return 0; + type = AUDIT_APPARMOR_AUDIT; + } else if (DO_KILL(profile) || + cap_raised(profile->caps.kill, sa->cap)) { + type = AUDIT_APPARMOR_KILL; + } else if (cap_raised(profile->caps.quiet, sa->cap) && + AUDIT_MODE(profile) != AUDIT_NOQUIET && + AUDIT_MODE(profile) != AUDIT_ALL) { + /* quiet auditing */ + return sa->base.error; + } + + /* Do simple duplicate message elimination */ + ent = &get_cpu_var(audit_cache); + if (profile == ent->profile && cap_raised(ent->caps, sa->cap)) { + put_cpu_var(audit_cache); + if (COMPLAIN_MODE(profile)) + return 0; + return sa->base.error; + } else { + aa_put_profile(ent->profile); + ent->profile = aa_get_profile(profile); + cap_raise(ent->caps, sa->cap); + } + put_cpu_var(audit_cache); + + return aa_audit(type, profile, &sa->base, audit_cb); +} + +/** + * aa_profile_capable - test if profile allows use of capability @cap + * @profile: profile being enforced (NOT NULL, NOT unconfined) + * @cap: capability to test if allowed + * + * Returns: 0 if allowed else -EPERM + */ +static int aa_profile_capable(struct aa_profile *profile, int cap) +{ + return cap_raised(profile->caps.allowed, cap) ? 0 : -EPERM; +} + +/** + * aa_capable - test permission to use capability + * @task: task doing capability test against + * @profile: profile confining @task + * @cap: capability to be tested + * @audit: whether an audit record should be generated + * + * Look up capability in profile capability set. + * + * Returns: 0 on success, or else an error code. + */ +int aa_capable(struct task_struct *task, struct aa_profile *profile, int cap, + int audit) +{ + int error = aa_profile_capable(profile, cap); + struct aa_audit_caps sa = { + .base.operation = "capable", + .base.task = task, + .base.gfp_mask = GFP_ATOMIC, + .base.error = error, + .cap = cap, + }; + + if (!audit) { + if (COMPLAIN_MODE(profile)) + return 0; + return error; + } + + return aa_audit_caps(profile, &sa); +} --- linux-2.6.32.orig/security/apparmor/file.c +++ linux-2.6.32/security/apparmor/file.c @@ -0,0 +1,556 @@ +/* + * AppArmor security module + * + * This file contains AppArmor mediation of files + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/file.h" +#include "include/match.h" +#include "include/path.h" +#include "include/policy.h" + +struct file_perms nullperms; + +/** + * aa_audit_file_sub_mask - convert a permission mask into string + * @buffer: buffer to write string to (NOT NULL) + * @mask: permission mask to convert + * @xindex: xindex + * + * NOTE: caller must make sure buffer is large enough for @mask + */ +static void aa_audit_file_sub_mask(char *buffer, u16 mask, u16 xindex) +{ + char *m = buffer; + + if (mask & AA_EXEC_MMAP) + *m++ = 'm'; + if (mask & MAY_READ) + *m++ = 'r'; + if (mask & (MAY_WRITE | AA_MAY_CHMOD | AA_MAY_CHOWN)) + *m++ = 'w'; + else if (mask & MAY_APPEND) + *m++ = 'a'; + if (mask & AA_MAY_CREATE) + *m++ = 'c'; + if (mask & AA_MAY_DELETE) + *m++ = 'd'; + if (mask & AA_MAY_LINK) + *m++ = 'l'; + if (mask & AA_MAY_LOCK) + *m++ = 'k'; + if (mask & MAY_EXEC) + *m++ = 'x'; + *m++ = '\0'; +} + +/** + * aa_audit_file_mask - convert mask to owner::other string + * @buffer: buffer to write string to (NOT NULL) + * @mask: permission mask to convert + * @xindex: xindex + * @owner: if the mask is for owner or other + */ +static void aa_audit_file_mask(struct audit_buffer *ab, u16 mask, int xindex, + int owner) +{ + char str[10]; + + if (owner) { + aa_audit_file_sub_mask(str, mask, xindex); + strcat(str, "::"); + } else { + strcpy(str, "::"); + aa_audit_file_sub_mask(str + 2, mask, xindex); + } + audit_log_string(ab, str); +} + +/** + * file_audit_cb - call back for file specific audit fields + * @ab: audit_buffer (NOT NULL) + * @va: audit struct to audit values of (NOT NULL) + */ +static void file_audit_cb(struct audit_buffer *ab, struct aa_audit *va) +{ + struct aa_audit_file *sa = container_of(va, struct aa_audit_file, base); + u16 denied = sa->request & ~sa->perms.allowed; + uid_t fsuid; + + fsuid = current_fsuid(); + + if (sa->request & AA_AUDIT_FILE_MASK) { + audit_log_format(ab, " requested_mask="); + aa_audit_file_mask(ab, sa->request, AA_X_NONE, + fsuid == sa->cond->uid); + } + if (denied & AA_AUDIT_FILE_MASK) { + audit_log_format(ab, " denied_mask="); + aa_audit_file_mask(ab, denied, sa->perms.xindex, + fsuid == sa->cond->uid); + } + if (sa->request & AA_AUDIT_FILE_MASK) { + audit_log_format(ab, " fsuid=%d", fsuid); + audit_log_format(ab, " ouid=%d", sa->cond->uid); + } + + if (sa->name) { + audit_log_format(ab, " name="); + audit_log_untrustedstring(ab, sa->name); + } + + if (sa->name2) { + audit_log_format(ab, " name2="); + audit_log_untrustedstring(ab, sa->name2); + } + + if (sa->name3) { + audit_log_format(ab, " name3="); + audit_log_untrustedstring(ab, sa->name3); + } +} + +/** + * aa_audit_file - handle the auditing of file operations + * @profile: the profile being enforced (NOT NULL) + * @sa: file auditing context (NOT NULL) + * + * Returns: %0 or error on failure + */ +int aa_audit_file(struct aa_profile *profile, struct aa_audit_file *sa) +{ + int type = AUDIT_APPARMOR_AUTO; + + if (likely(!sa->base.error)) { + u16 mask = sa->perms.audit; + + if (unlikely(AUDIT_MODE(profile) == AUDIT_ALL)) + mask = 0xffff; + + /* mask off perms that are not being force audited */ + sa->request &= mask; + + if (likely(!sa->request)) + return 0; + type = AUDIT_APPARMOR_AUDIT; + } else { + /* only report permissions that were denied */ + sa->request = sa->request & ~sa->perms.allowed; + + if (sa->request & sa->perms.kill) + type = AUDIT_APPARMOR_KILL; + + /* quiet known rejects, assumes quiet and kill do not overlap */ + if ((sa->request & sa->perms.quiet) && + AUDIT_MODE(profile) != AUDIT_NOQUIET && + AUDIT_MODE(profile) != AUDIT_ALL) + sa->request &= ~sa->perms.quiet; + + if (!sa->request) + return COMPLAIN_MODE(profile) ? 0 : sa->base.error; + } + return aa_audit(type, profile, &sa->base, file_audit_cb); +} + +/** + * aa_compute_perms - convert dfa compressed perms to internal perms + * @dfa: dfa to compute perms for (NOT NULL) + * @state: state in dfa + * @cond: conditions to consider (NOT NULL) + * + * TODO: convert from dfa + state to permission entry, do computation conversion + * at load time. + * + * Returns: computed permission set + */ +static struct file_perms aa_compute_perms(struct aa_dfa *dfa, + unsigned int state, + struct path_cond *cond) +{ + struct file_perms perms; + + /* FIXME: change over to new dfa format + * currently file perms are encoded in the dfa, new format + * splits the permissions from the dfa. This mapping can be + * done at profile load + */ + perms.kill = 0; + perms.dindex = 0; + + if (current_fsuid() == cond->uid) { + perms.allowed = dfa_user_allow(dfa, state); + perms.audit = dfa_user_audit(dfa, state); + perms.quiet = dfa_user_quiet(dfa, state); + perms.xindex = dfa_user_xindex(dfa, state); + } else { + perms.allowed = dfa_other_allow(dfa, state); + perms.audit = dfa_other_audit(dfa, state); + perms.quiet = dfa_other_quiet(dfa, state); + perms.xindex = dfa_other_xindex(dfa, state); + } + /* in the old mapping MAY_WRITE implies + * AA_MAY_CREATE | AA_MAY_CHMOD | AA_MAY_CHOWN */ + if (perms.allowed & MAY_WRITE) + perms.allowed |= AA_MAY_CREATE | AA_MAY_CHMOD | AA_MAY_CHOWN | + AA_MAY_DELETE; + if (perms.audit & MAY_WRITE) + perms.audit |= AA_MAY_CREATE | AA_MAY_CHMOD | AA_MAY_CHOWN | + AA_MAY_DELETE; + if (perms.quiet & MAY_WRITE) + perms.quiet |= AA_MAY_CREATE | AA_MAY_CHMOD | AA_MAY_CHOWN | + AA_MAY_DELETE; + + /* in the old mapping AA_MAY_LOCK and link subset are overlayed + * and only determined by which part of a pair they are in + */ + if (perms.allowed & AA_MAY_LOCK) + perms.allowed |= AA_LINK_SUBSET; + + /* change_profile wasn't determined by ownership in old mapping */ + if (ACCEPT_TABLE(dfa)[state] & 0x80000000) + perms.allowed |= AA_MAY_CHANGE_PROFILE; + + return perms; +} + +/** + * aa_str_perms - find permission that match @name + * @dfa: to match against (NOT NULL) + * @state: state to start matching in + * @name: string to match against dfa (NOT NULL) + * @cond: conditions to consider for permission set computation (NOT NULL) + * @rstate: if !NULL return state match finished in (MAYBE NULL) + * + * TODO: Update when permission mapping is moved to load time + * + * Returns: file permission for @name + */ +struct file_perms aa_str_perms(struct aa_dfa *dfa, unsigned int start, + const char *name, struct path_cond *cond, + unsigned int *rstate) +{ + unsigned int state; + if (!dfa) + return nullperms; + + state = aa_dfa_match(dfa, start, name); + + if (rstate) + *rstate = state; + + /* TODO: convert to new dfa format */ + + return aa_compute_perms(dfa, state, cond); +} + +/** + * aa_pathstr_perm - do permission check & audit for @name + * @profile: profile being enforced (NOT NULL) + * @op: name of the operation (NOT NULL) + * @name: path string to check permission for (NOT NULL) + * @request: requested permissions + * @cond: conditional info for this request (NOT NULL) + * + * Do permission check for paths that are predefined. This fn will + * be removed once security_sysctl goes away. + * + * Returns: %0 else error if access denied or other error + */ +int aa_pathstr_perm(struct aa_profile *profile, const char *op, + const char *name, u16 request, struct path_cond *cond) +{ + struct aa_audit_file sa = { + .base.operation = op, + .base.gfp_mask = GFP_KERNEL, + .request = request, + .name = name, + .cond = cond, + }; + + sa.perms = aa_str_perms(profile->file.dfa, profile->file.start, sa.name, + cond, + NULL); + if (request & ~sa.perms.allowed) + sa.base.error = -EACCES; + return aa_audit_file(profile, &sa); +} + +/** + * aa_path_perm - do permissions check & audit for @path + * @profile: profile being enforced (NOT NULL) + * @operation: name of the operation being enforced (NOT NULL) + * @path: path to check permissions of (NOT NULL) + * @request: requested permissions + * @cond: conditional info for this request (NOT NULL) + * + * Returns: %0 else error if access denied or other error + */ +int aa_path_perm(struct aa_profile *profile, const char *operation, + struct path *path, u16 request, struct path_cond *cond) +{ + char *buffer, *name; + struct aa_audit_file sa = { + .base.operation = operation, + .base.gfp_mask = GFP_KERNEL, + .request = request, + .cond = cond, + }; + int flags = profile->path_flags | + (S_ISDIR(cond->mode) ? PATH_IS_DIR : 0); + /* buffer freed below - name is pointer inside buffer */ + sa.base.error = aa_get_name(path, flags, &buffer, &name); + sa.name = name; + if (sa.base.error) { + sa.perms = nullperms; + if (sa.base.error == -ENOENT) + sa.base.info = "Failed name lookup - deleted entry"; + else if (sa.base.error == -ESTALE) + sa.base.info = "Failed name lookup - disconnected path"; + else if (sa.base.error == -ENAMETOOLONG) + sa.base.info = "Failed name lookup - name too long"; + else + sa.base.info = "Failed name lookup"; + } else { + sa.perms = aa_str_perms(profile->file.dfa, profile->file.start, + sa.name, cond, NULL); + if (request & ~sa.perms.allowed) + sa.base.error = -EACCES; + } + sa.base.error = aa_audit_file(profile, &sa); + kfree(buffer); + + return sa.base.error; +} + +/** + * xindex_is_subset - helper for aa_path_link + * @link: link permission set + * @target: target permission set + * + * test target x permissions are equal OR a subset of link x permissions + * this is done as part of the subset test, where a hardlink must have + * a subset of permissions that the target has. + * + * Returns: %1 if subset else %0 + */ +static inline bool xindex_is_subset(u16 link, u16 target) +{ + if (((link & ~AA_X_UNSAFE) != (target & ~AA_X_UNSAFE)) || + ((link & AA_X_UNSAFE) && !(target & AA_X_UNSAFE))) + return 0; + + return 1; +} + +/** + * aa_path_link - Handle hard link permission check + * @profile: the profile being enforced (NOT NULL) + * @old_dentry: the target dentry (NOT NULL) + * @new_dir: directory the new link will be created in (NOT NULL) + * @new_dentry: the link being created (NOT NULL) + * + * Handle the permission test for a link & target pair. Permission + * is encoded as a pair where the link permission is determined + * first, and if allowed, the target is tested. The target test + * is done from the point of the link match (not start of DFA) + * making the target permission dependent on the link permission match. + * + * The subset test if required forces that permissions granted + * on link are a subset of the permission granted to target. + * + * Returns: %0 if allowed else error + */ +int aa_path_link(struct aa_profile *profile, struct dentry *old_dentry, + struct path *new_dir, struct dentry *new_dentry) +{ + struct path link = { new_dir->mnt, new_dentry }; + struct path target = { new_dir->mnt, old_dentry }; + struct path_cond cond = { + old_dentry->d_inode->i_uid, + old_dentry->d_inode->i_mode + }; + char *buffer = NULL, *buffer2 = NULL; + char *lname, *tname; + struct file_perms perms; + unsigned int state; + + struct aa_audit_file sa = { + .base.operation = "link", + .base.gfp_mask = GFP_KERNEL, + .request = AA_MAY_LINK, + .cond = &cond, + .perms = nullperms, + }; + /* buffer freed below, lname is pointer in buffer */ + sa.base.error = aa_get_name(&link, profile->path_flags, &buffer, + &lname); + sa.name = lname; + if (sa.base.error) + goto audit; + + /* buffer2 freed below, tname is pointer in buffer2 */ + sa.base.error = aa_get_name(&target, profile->path_flags, &buffer2, + &tname); + sa.name2 = tname; + if (sa.base.error) + goto audit; + + sa.base.error = -EACCES; + + /* aa_str_perms - handles the case of the dfa being NULL */ + sa.perms = aa_str_perms(profile->file.dfa, profile->file.start, lname, + &cond, &state); + sa.perms.audit &= AA_MAY_LINK; + sa.perms.quiet &= AA_MAY_LINK; + sa.perms.kill &= AA_MAY_LINK; + + if (!(sa.perms.allowed & AA_MAY_LINK)) + goto audit; + + /* test to see if target can be paired with link */ + state = aa_dfa_null_transition(profile->file.dfa, state, + profile->flags & PFLAG_OLD_NULL_TRANS); + perms = aa_str_perms(profile->file.dfa, state, tname, &cond, NULL); + if (!(perms.allowed & AA_MAY_LINK)) { + sa.base.info = "target restricted"; + goto audit; + } + + /* done if link subset test is not required */ + if (!(perms.allowed & AA_LINK_SUBSET)) + goto done_tests; + + /* Do link perm subset test requiring allowed permission on link are a + * subset of the allowed permissions on target. + */ + perms = aa_str_perms(profile->file.dfa, profile->file.start, tname, + &cond, NULL); + + /* AA_MAY_LINK is not considered in the subset test */ + sa.request = sa.perms.allowed & ~AA_MAY_LINK; + sa.perms.allowed &= perms.allowed | AA_MAY_LINK; + + sa.request |= AA_AUDIT_FILE_MASK & (sa.perms.allowed & ~perms.allowed); + if (sa.request & ~sa.perms.allowed) { + goto audit; + } else if ((sa.perms.allowed & MAY_EXEC) && + !xindex_is_subset(sa.perms.xindex, perms.xindex)) { + sa.perms.allowed &= ~MAY_EXEC; + sa.request |= MAY_EXEC; + sa.base.info = "link not subset of target"; + goto audit; + } + +done_tests: + sa.base.error = 0; + +audit: + sa.base.error = aa_audit_file(profile, &sa); + kfree(buffer); + kfree(buffer2); + + return sa.base.error; +} + +/** + * aa_is_deleted_file - test if a file has been completely unlinked + * @dentry: dentry of file to test for deletion (NOT NULL) + * + * Returns: %1 if deleted else %0 + */ +static inline bool aa_is_deleted_file(struct dentry *dentry) +{ + if (d_unlinked(dentry) && dentry->d_inode->i_nlink == 0) + return 1; + return 0; +} + +/** + * aa_file_common_perm - core permission check & audit for files + * @profile: profile being enforced (NOT NULL) + * @operation: name of operation (NOT NULL) + * @file: file to check permissions of (NOT NULL) + * @request: requested permissions + * @name: path name to revalidate permission on (MAYBE NULL if @error != 0) + * @error: error result of name lookup when find @name + * + * Returns: %0 if access allowed else %1 + */ +static int aa_file_common_perm(struct aa_profile *profile, + const char *operation, struct file *file, + u16 request, const char *name, int error) +{ + struct path_cond cond = { + .uid = file->f_path.dentry->d_inode->i_uid, + .mode = file->f_path.dentry->d_inode->i_mode + }; + struct aa_audit_file sa = { + .base.operation = operation, + .base.gfp_mask = GFP_KERNEL, + .request = request, + .base.error = error, + .name = name, + .cond = &cond, + }; + + if (sa.base.error) { + sa.perms = nullperms; + if (sa.base.error == -ENOENT && + aa_is_deleted_file(file->f_path.dentry)) { + /* Access to open files that are deleted are + * give a pass (implicit delegation) + */ + sa.base.error = 0; + sa.perms.allowed = sa.request; + } else if (sa.base.error == -ENOENT) + sa.base.info = "Failed name lookup - deleted entry"; + else if (sa.base.error == -ESTALE) + sa.base.info = "Failed name lookup - disconnected path"; + else if (sa.base.error == -ENAMETOOLONG) + sa.base.info = "Failed name lookup - name too long"; + else + sa.base.info = "Failed name lookup"; + } else { + sa.perms = aa_str_perms(profile->file.dfa, profile->file.start, + sa.name, &cond, NULL); + if (request & ~sa.perms.allowed) + sa.base.error = -EACCES; + } + sa.base.error = aa_audit_file(profile, &sa); + + return sa.base.error; +} + +/** + * aa_file_perm - do permission revalidation check & audit for @file + * @profile: profile being enforced (NOT NULL) + * @operation: name of the operation (NOT NULL) + * @file: file to revalidate access permissions on (NOT NULL) + * @request: requested permissions + * + * Returns: %0 if access allowed else error + */ +int aa_file_perm(struct aa_profile *profile, const char *operation, + struct file *file, u16 request) +{ + char *buffer, *name; + umode_t mode = file->f_path.dentry->d_inode->i_mode; + /* buffer freed below, name is a pointer inside of buffer */ + int flags = profile->path_flags | (S_ISDIR(mode) ? PATH_IS_DIR : 0); + int error = aa_get_name(&file->f_path, flags, &buffer, &name); + + error = aa_file_common_perm(profile, operation, file, request, name, + error); + kfree(buffer); + return error; +} --- linux-2.6.32.orig/security/apparmor/ipc.c +++ linux-2.6.32/security/apparmor/ipc.c @@ -0,0 +1,124 @@ +/* + * AppArmor security module + * + * This file contains AppArmor ipc mediation + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include + +#include "include/audit.h" +#include "include/capability.h" +#include "include/context.h" +#include "include/policy.h" + +struct aa_audit_ptrace { + struct aa_audit base; + + pid_t tracer, tracee; +}; + +/* call back to audit ptrace fields */ +static void audit_cb(struct audit_buffer *ab, struct aa_audit *va) +{ + struct aa_audit_ptrace *sa = container_of(va, struct aa_audit_ptrace, + base); + audit_log_format(ab, " tracer=%d tracee=%d", sa->tracer, sa->tracee); +} + +/** + * aa_audit_ptrace - do auditing for ptrace + * @profile: profile being enforced (NOT NULL) + * @sa: audit structure (NOT NULL) + * + * Returns: %0 or error code + */ +static int aa_audit_ptrace(struct aa_profile *profile, + struct aa_audit_ptrace *sa) +{ + return aa_audit(AUDIT_APPARMOR_AUTO, profile, &sa->base, audit_cb); +} + +/** + * aa_may_ptrace - test if tracer task can trace the tracee + * @tracer_task: task who will do the tracing (NOT NULL) + * @tracer: profile of the task doing the tracing (NOT NULL) + * @tracee: task to be traced + * @mode: whether PTRACE_MODE_READ || PTRACE_MODE_ATTACH + * + * Returns: %0 else error code if permission denied or error + */ +int aa_may_ptrace(struct task_struct *tracer_task, struct aa_profile *tracer, + struct aa_profile *tracee, unsigned int mode) +{ + /* TODO: currently only based on capability, not extended ptrace + * rules, + * Test mode for PTRACE_MODE_READ || PTRACE_MODE_ATTACH + */ + + if (!tracer || tracer == tracee) + return 0; + /* log this capability request */ + return aa_capable(tracer_task, tracer, CAP_SYS_PTRACE, 1); +} + +/** + * aa_ptrace - do ptrace permission check and auditing + * @tracer: task doing the tracing + * @tracee: task being traced + * @mode: ptrace mode either PTRACE_MODE_READ || PTRACE_MODE_ATTACH + * + * Returns: %0 else error code if permission denied or error + */ +int aa_ptrace(struct task_struct *tracer, struct task_struct *tracee, + unsigned int mode) +{ + /* + * tracer can ptrace tracee when + * - tracer is unconfined || + * - tracer & tracee are in the same namespace && + * - tracer is in complain mode + * - tracer has rules allowing it to trace tracee currently this is: + * - confined by the same profile || + * - tracer profile has CAP_SYS_PTRACE + */ + + struct aa_profile *tracer_p; + /* cred released below */ + const struct cred *cred = get_task_cred(tracer); + int error = 0; + tracer_p = aa_cred_profile(cred); + + if (!unconfined(tracer_p)) { + struct aa_audit_ptrace sa = { + .base.operation = "ptrace", + .base.gfp_mask = GFP_ATOMIC, + .tracer = tracer->pid, + .tracee = tracee->pid, + }; + /* FIXME: different namespace restriction can be lifted + * if, namespace are matched to AppArmor namespaces + */ + struct aa_profile *tracee_p; + /* lcred released below */ + struct cred *lcred = get_task_cred(tracee); + tracee_p = aa_cred_profile(lcred); + + sa.base.error = aa_may_ptrace(tracer, tracer_p, tracee_p, mode); + sa.base.error = aa_audit_ptrace(tracer_p, &sa); + + put_cred(lcred); + error = sa.base.error; + } + put_cred(cred); + + return error; +} --- linux-2.6.32.orig/security/apparmor/Makefile +++ linux-2.6.32/security/apparmor/Makefile @@ -0,0 +1,24 @@ +# Makefile for AppArmor Linux Security Module +# +obj-$(CONFIG_SECURITY_APPARMOR) += apparmor.o + +apparmor-y := apparmorfs.o audit.o capability.o context.o ipc.o lib.o match.o \ + path.o domain.o policy.o policy_unpack.o procattr.o lsm.o \ + resource.o sid.o file.o net.o + +apparmor-$(CONFIG_SECURITY_APPARMOR_COMPAT_24) += apparmorfs-24.o + +clean-files: capability_names.h af_names.h + +quiet_cmd_make-caps = GEN $@ +cmd_make-caps = echo "static const char *capability_names[] = {" > $@ ; sed -n -e "/CAP_FS_MASK/d" -e "s/^\#define[ \\t]\\+CAP_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\$$/[\\2] = \"\\1\",/p" $< | tr A-Z a-z >> $@ ; echo "};" >> $@ + +quiet_cmd_make-af = GEN $@ +cmd_make-af = echo "static const char *address_family_names[] = {" > $@ ; sed -n -e "/AF_MAX/d" -e "/AF_LOCAL/d" -e "s/^\#define[ \\t]\\+AF_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\\(.*\\)\$$/[\\2] = \"\\1\",/p" $< | tr A-Z a-z >> $@ ; echo "};" >> $@ + +$(obj)/capability.o : $(obj)/capability_names.h +$(obj)/net.o : $(obj)/af_names.h +$(obj)/capability_names.h : $(srctree)/include/linux/capability.h + $(call cmd,make-caps) +$(obj)/af_names.h : $(srctree)/include/linux/socket.h + $(call cmd,make-af) --- linux-2.6.32.orig/security/apparmor/context.c +++ linux-2.6.32/security/apparmor/context.c @@ -0,0 +1,226 @@ +/* + * AppArmor security module + * + * This file contains AppArmor functions used to manipulate object security + * contexts. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + * + * + * AppArmor sets confinement on every task, via the the aa_task_cxt and + * the aa_task_cxt profile, both of which are required and are not allowed + * to be NULL. The aa_task_cxt is not reference counted and is unique + * to each cred (which is reference count). The profile pointed to by + * the task_cxt is reference counted. + * + * TODO + * If a task uses change_hat it currently does not return to the old + * cred or task context but instead creates a new one. Ideally the task + * should return to the previous cred if it has not been modified. + * + */ + +#include "include/context.h" +#include "include/policy.h" + +/** + * aa_alloc_task_context - allocat a new task_cxt + * @flags: gfp flags for allocation + * + * Returns: allocated buffer or NULL on failure + */ +struct aa_task_cxt *aa_alloc_task_context(gfp_t flags) +{ + return kzalloc(sizeof(struct aa_task_cxt), flags); +} + +/** + * aa_free_task_context - free a task_cxt + * @cxt: task_cxt to free (MAYBE NULL) + */ +void aa_free_task_context(struct aa_task_cxt *cxt) +{ + if (cxt) { + aa_put_profile(cxt->profile); + aa_put_profile(cxt->previous); + aa_put_profile(cxt->onexec); + + kzfree(cxt); + } +} + +/** + * aa_dup_task_context - duplicate a task context, incrementing reference counts + * @new: a blank task context (NOT NULL) + * @old: the task context to copy (NOT NULL) + */ +void aa_dup_task_context(struct aa_task_cxt *new, const struct aa_task_cxt *old) +{ + *new = *old; + aa_get_profile(new->profile); + aa_get_profile(new->previous); + aa_get_profile(new->onexec); +} + +/** + * replace_cxt - replace a context profile + * @cxt: task context (NOT NULL) + * @profile: profile to replace cxt group (NOT NULL) + * + * Replace context grouping profile reference with @profile + */ +static void replace_group(struct aa_task_cxt *cxt, struct aa_profile *profile) +{ + if (cxt->profile == profile) + return; + + BUG_ON(!profile); + if (unconfined(profile) || (cxt->profile->ns != profile->ns)) { + /* if switching to unconfined or a different profile namespace + * clear out context state + */ + aa_put_profile(cxt->previous); + aa_put_profile(cxt->onexec); + cxt->previous = NULL; + cxt->onexec = NULL; + cxt->token = 0; + } + /* be careful switching cxt->profile, when racing replacement it + * is possible that cxt->profile->replacedby is the reference keeping + * @profile valid, so make sure to get its reference before dropping + * the reference on cxt->profile */ + aa_get_profile(profile); + aa_put_profile(cxt->profile); + cxt->profile = profile; +} + +/** + * aa_replace_current_profiles - replace the current tasks profiles + * @profile: new profile (NOT NULL) + * + * Returns: 0 or error on failure + */ +int aa_replace_current_profiles(struct aa_profile *profile) +{ + struct aa_task_cxt *cxt; + struct cred *new = prepare_creds(); + if (!new) + return -ENOMEM; + + cxt = new->security; + replace_group(cxt, profile); + /* todo add user group */ + + commit_creds(new); + return 0; +} + +/** + * aa_set_current_onexec - set the tasks change_profile to happen onexec + * @profile: system profile to set at exec (MAYBE NULL) + * + * Returns: 0 or error on failure + */ +int aa_set_current_onexec(struct aa_profile *profile) +{ + struct aa_task_cxt *cxt; + struct cred *new = prepare_creds(); + if (!new) + return -ENOMEM; + + cxt = new->security; + aa_get_profile(profile); + aa_put_profile(cxt->onexec); + cxt->onexec = profile; + + commit_creds(new); + return 0; +} + +/** + * aa_set_current_hat - set the current tasks hat + * @profile: profile to set as the current hat (NOT NULL) + * @token: token value that must be specified to change from the hat + * + * Do switch of tasks hat. If the task is currently in a hat + * validate the token to match. + * + * Returns: 0 or error on failure + */ +int aa_set_current_hat(struct aa_profile *profile, u64 token) +{ + struct aa_task_cxt *cxt; + struct cred *new = prepare_creds(); + if (!new) + return -ENOMEM; + BUG_ON(!profile); + + cxt = new->security; + if (!cxt->previous) { + cxt->previous = cxt->profile; + cxt->token = token; + } else if (cxt->token == token) { + aa_put_profile(cxt->profile); + } else { + /* previous_profile && cxt->token != token */ + abort_creds(new); + return -EACCES; + } + cxt->profile = aa_get_profile(aa_newest_version(profile)); + /* clear exec on switching context */ + aa_put_profile(cxt->onexec); + cxt->onexec = NULL; + + commit_creds(new); + return 0; +} + +/** + * aa_restore_previous_profile - exit from hat context restoring the profile + * @token: the token that must be matched to exit hat context + * + * Attempt to return out of a hat to the previous profile. The token + * must match the stored token value. + * + * Returns: 0 or error of failure + */ +int aa_restore_previous_profile(u64 token) +{ + struct aa_task_cxt *cxt; + struct cred *new = prepare_creds(); + if (!new) + return -ENOMEM; + + cxt = new->security; + if (cxt->token != token) { + abort_creds(new); + return -EACCES; + } + /* ignore restores when there is no saved profile */ + if (!cxt->previous) { + abort_creds(new); + return 0; + } + + aa_put_profile(cxt->profile); + cxt->profile = aa_newest_version(cxt->previous); + BUG_ON(!cxt->profile); + if (unlikely(cxt->profile != cxt->previous)) { + aa_get_profile(cxt->profile); + aa_put_profile(cxt->previous); + } + /* clear exec && prev information when restoring to previous context */ + cxt->previous = NULL; + cxt->token = 0; + aa_put_profile(cxt->onexec); + cxt->onexec = NULL; + + commit_creds(new); + return 0; +} --- linux-2.6.32.orig/security/apparmor/include/path.h +++ linux-2.6.32/security/apparmor/include/path.h @@ -0,0 +1,31 @@ +/* + * AppArmor security module + * + * This file contains AppArmor basic path manipulation function definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_PATH_H +#define __AA_PATH_H + + +enum path_flags { + PATH_IS_DIR = 0x1, /* path is a directory */ + PATH_CONNECT_PATH = 0x4, /* connect disconnected paths to / */ + PATH_CHROOT_REL = 0x8, /* do path lookup relative to chroot */ + PATH_CHROOT_NSCONNECT = 0x10, /* connect paths that are at ns root */ + + PATH_MEDIATE_DELETED = 0x10000, /* mediate deleted paths */ +}; + +int aa_get_name(struct path *path, int flags, char **buffer, char **name); +char *sysctl_pathname(struct ctl_table *table, char *buffer, int buflen); + +#endif /* __AA_PATH_H */ --- linux-2.6.32.orig/security/apparmor/include/domain.h +++ linux-2.6.32/security/apparmor/include/domain.h @@ -0,0 +1,36 @@ +/* + * AppArmor security module + * + * This file contains AppArmor security domain transition function definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include + +#ifndef __AA_DOMAIN_H +#define __AA_DOMAIN_H + +struct aa_domain { + int size; + char **table; +}; + +int apparmor_bprm_set_creds(struct linux_binprm *bprm); +int apparmor_bprm_secureexec(struct linux_binprm *bprm); +void apparmor_bprm_committing_creds(struct linux_binprm *bprm); +void apparmor_bprm_committed_creds(struct linux_binprm *bprm); + +void aa_free_domain_entries(struct aa_domain *domain); +int aa_change_hat(const char *hats[], int count, u64 token, bool permtest); +int aa_change_profile(const char *ns_name, const char *name, int onexec, + bool permtest); + +#endif /* __AA_DOMAIN_H */ --- linux-2.6.32.orig/security/apparmor/include/audit.h +++ linux-2.6.32/security/apparmor/include/audit.h @@ -0,0 +1,54 @@ +/* + * AppArmor security module + * + * This file contains AppArmor auditing function definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_AUDIT_H +#define __AA_AUDIT_H + +#include +#include +#include +#include + +struct aa_profile; + +extern const char *audit_mode_names[]; +#define AUDIT_MAX_INDEX 5 + +#define AUDIT_APPARMOR_AUTO 0 /* auto choose audit message type */ + +enum audit_mode { + AUDIT_NORMAL, /* follow normal auditing of accesses */ + AUDIT_QUIET_DENIED, /* quiet all denied access messages */ + AUDIT_QUIET, /* quiet all messages */ + AUDIT_NOQUIET, /* do not quiet audit messages */ + AUDIT_ALL /* audit all accesses */ +}; + +/* + * aa_audit - AppArmor auditing structure + * Structure is populated by access control code and passed to aa_audit which + * provides for a single point of logging. + */ +struct aa_audit { + struct task_struct *task; + gfp_t gfp_mask; + int error; + const char *operation; + const char *info; +}; + +int aa_audit(int type, struct aa_profile *profile, struct aa_audit *sa, + void (*cb) (struct audit_buffer *, struct aa_audit *)); + +#endif /* __AA_AUDIT_H */ --- linux-2.6.32.orig/security/apparmor/include/sid.h +++ linux-2.6.32/security/apparmor/include/sid.h @@ -0,0 +1,24 @@ +/* + * AppArmor security module + * + * This file contains AppArmor security identifier (sid) definitions + * + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_SID_H +#define __AA_SID_H + +#include + +struct aa_profile; + +u32 aa_alloc_sid(void); +void aa_free_sid(u32 sid); + +#endif /* __AA_SID_H */ --- linux-2.6.32.orig/security/apparmor/include/policy.h +++ linux-2.6.32/security/apparmor/include/policy.h @@ -0,0 +1,307 @@ +/* + * AppArmor security module + * + * This file contains AppArmor policy definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_POLICY_H +#define __AA_POLICY_H + +#include +#include +#include +#include +#include +#include + +#include "apparmor.h" +#include "audit.h" +#include "capability.h" +#include "domain.h" +#include "file.h" +#include "net.h" +#include "resource.h" + +extern const char *profile_mode_names[]; +#define APPARMOR_NAMES_MAX_INDEX 3 + +#define COMPLAIN_MODE(_profile) \ + ((aa_g_profile_mode == APPARMOR_COMPLAIN) || ((_profile) && \ + (_profile)->mode == APPARMOR_COMPLAIN)) + +#define DO_KILL(_profile) \ + ((aa_g_profile_mode == APPARMOR_KILL) || ((_profile) && \ + (_profile)->mode == APPARMOR_KILL)) + +#define PROFILE_IS_HAT(_profile) \ + ((_profile) && (_profile)->flags & PFLAG_HAT) + +/* + * FIXME: currently need a clean way to replace and remove profiles as a + * set. It should be done at the namespace level. + * Either, with a set of profiles loaded at the namespace level or via + * a mark and remove marked interface. + */ +enum profile_mode { + APPARMOR_ENFORCE, /* enforce access rules */ + APPARMOR_COMPLAIN, /* allow and log access violations */ + APPARMOR_KILL, /* kill task on access violation */ +}; + +enum profile_flags { + PFLAG_HAT = 1, /* profile is a hat */ + PFLAG_UNCONFINED = 2, /* profile is the unconfined profile */ + PFLAG_NULL = 4, /* profile is null learning profile */ + PFLAG_IX_ON_NAME_ERROR = 8, /* fallback to ix on name lookup fail */ + PFLAG_IMMUTABLE = 0x10, /* don't allow changes/replacement */ + PFLAG_USER_DEFINED = 0x20, /* user based profile */ + PFLAG_NO_LIST_REF = 0x40, /* list doesn't keep profile ref */ + PFLAG_MMAP_MIN_ADDR = 0x80, /* profile controls mmap_min_addr */ + PFLAG_OLD_NULL_TRANS = 0x100, /* use // as the null transition */ + + /* These flags must coorespond with PATH_flags */ + PFLAG_MEDIATE_DELETED = 0x10000, /* mediate instead delegate deleted */ +}; + +#define AA_NEW_SID 0 + +struct aa_profile; + +/* struct aa_policy - common part of both namespaces and profiles + * @name: name of the object + * @hname - The hierarchical name + * @count: reference count of the obj + * @list: list policy object is on + * @profiles: head of the profiles list contained in the object + */ +struct aa_policy { + char *name; + char *hname; + struct kref count; + struct list_head list; + struct list_head profiles; +}; + +/* struct aa_ns_acct - accounting of profiles in namespace + * @max_size: maximum space allowed for all profiles in namespace + * @max_count: maximum number of profiles that can be in this namespace + * @size: current size of profiles + * @count: current count of profiles (includes null profiles) + */ +struct aa_ns_acct { + int max_size; + int max_count; + int size; + int count; +}; + +/* struct aa_namespace - namespace for a set of profiles + * @base: common policy + * @parent: parent of namespace + * @lock: lock for modifying the object + * @acct: accounting for the namespace + * @unconfined: special unconfined profile for the namespace + * @sub_ns: list of namespaces under the current namespace. + * + * An aa_namespace defines the set profiles that are searched to determine + * which profile to attach to a task. Profiles can not be shared between + * aa_namespaces and profile names within a namespace are guarenteed to be + * unique. When profiles in seperate namespaces have the same name they + * are NOT considered to be equivalent. + * + * Namespaces are hierarchical and only namespaces and profiles below the + * current namespace are visible. + * + * Namespace names must be unique and can not contain the characters :/\0 + * + * FIXME TODO: add vserver support so a vserer (can it all be done in userspace) + */ +struct aa_namespace { + struct aa_policy base; + struct aa_namespace *parent; + rwlock_t lock; + struct aa_ns_acct acct; + struct aa_profile *unconfined; + struct list_head sub_ns; +}; + +/* struct aa_profile - basic confinement data + * @base - base componets of the profile (name, refcount, lists, lock ...) + * @parent: parent of profile + * @ns: namespace the profile is in + * @replacedby: is set profile that replaced this profile + * @xmatch: optional extended matching for unconfined executables names + * @xmatch_len: xmatch prefix len, used to determine xmatch priority + * @sid: the unique security id number of this profile + * @audit: the auditing mode of the profile + * @mode: the enforcement mode of the profile + * @flags: flags controlling profile behavior + * @path_flags: flags controlling path generation behavior + * @size: the memory consumed by this profiles rules + * @file: The set of rules governing basic file access and domain transitions + * @caps: capabilities for the profile + * @net: network controls for the profile + * @rlimits: rlimits for the profile + * + * The AppArmor profile contains the basic confinement data. Each profile + * has a name, and exist in a namespace. The @name and @exec_match are + * used to determine profile attachment against unconfined tasks. All other + * attachments are determined by in profile X transition rules. + * + * The @replacedby field is write protected by the profile lock. Reads + * are assumed to be atomic, and are done without locking. + * + * Profiles have a hierachy where hats and children profiles keep + * a reference to their parent. + * + * Profile names can not begin with a : and can not contain the \0 + * character. If a profile name begins with / it will be considered when + * determining profile attachment on "unconfined" tasks. + */ +struct aa_profile { + struct aa_policy base; + struct aa_profile *parent; + + struct aa_namespace *ns; + union { + struct aa_profile *replacedby; + const char *rename; + }; + struct aa_dfa *xmatch; + int xmatch_len; + u32 sid; + enum audit_mode audit; + enum profile_mode mode; + u32 flags; + u32 path_flags; + int size; + + unsigned long mmap_min_addr; + + struct aa_file_rules file; + struct aa_caps caps; + struct aa_net net; + struct aa_rlimit rlimits; +}; + +extern struct aa_namespace *root_ns; +extern enum profile_mode aa_g_profile_mode; + +void aa_add_profile(struct aa_policy *common, struct aa_profile *profile); + +int aa_alloc_root_ns(void); +void aa_free_root_ns(void); +void aa_free_namespace_kref(struct kref *kref); + +struct aa_namespace *aa_find_namespace(struct aa_namespace *root, + const char *name); + +static inline struct aa_policy *aa_get_common(struct aa_policy *c) +{ + if (c) + kref_get(&c->count); + + return c; +} + +/** + * aa_get_namespace - increment references count on @ns + * @ns: namespace to increment reference count of (MAYBE NULL) + * + * Returns: pointer to @ns if @ns is NULL returns NULL + * Requires: @ns must be held with valid refcount when called + */ +static inline struct aa_namespace *aa_get_namespace(struct aa_namespace *ns) +{ + if (ns) + kref_get(&(ns->base.count)); + + return ns; +} + +/** + * aa_put_namespace - decrement refcount on @ns + * @ns: namespace to put reference to + * + * Decrement reference count to @ns and if no longer in use free it + */ +static inline void aa_put_namespace(struct aa_namespace *ns) +{ + if (ns) + kref_put(&ns->base.count, aa_free_namespace_kref); +} + +struct aa_profile *aa_alloc_profile(const char *name); +struct aa_profile *aa_new_null_profile(struct aa_profile *parent, int hat); +void aa_free_profile_kref(struct kref *kref); +struct aa_profile *aa_find_child(struct aa_profile *parent, const char *name); +struct aa_profile *aa_find_profile(struct aa_namespace *ns, const char *name); +struct aa_profile *aa_match_profile(struct aa_namespace *ns, const char *name); + +ssize_t aa_interface_replace_profiles(void *udata, size_t size, bool add_only); +ssize_t aa_interface_remove_profiles(char *name, size_t size); + +#define unconfined(X) ((X)->flags & PFLAG_UNCONFINED) + +/** + * aa_newest_version - find the newest version of @profile + * @profile: the profile to check for newer versions of (NOT NULL) + * + * Returns: newest version of @profile, if @profile is the newest version + * return @profile. + * + * NOTE: the profile returned is not refcounted, The refcount on @profile + * must be held until the caller decides what to do with the returned newest + * version. + */ +static inline struct aa_profile *aa_newest_version(struct aa_profile *profile) +{ + if (unlikely(profile && profile->replacedby)) + for (; profile->replacedby; profile = profile->replacedby) ; + + return profile; +} + +/** + * aa_get_profile - increment refcount on profile @p + * @p: profile (MAYBE NULL) + * + * Returns: pointer to @p if @p is NULL will return NULL + * Requires: @p must be held with valid refcount when called + */ +static inline struct aa_profile *aa_get_profile(struct aa_profile *p) +{ + if (p) + kref_get(&(p->base.count)); + + return p; +} + +/** + * aa_put_profile - decrement refcount on profile @p + * @p: profile (MAYBE NULL) + */ +static inline void aa_put_profile(struct aa_profile *p) +{ + if (p) + kref_put(&p->base.count, aa_free_profile_kref); +} + +static inline int AUDIT_MODE(struct aa_profile *profile) +{ + if (aa_g_audit != AUDIT_NORMAL) + return aa_g_audit; + if (profile) + return profile->audit; + return AUDIT_NORMAL; +} + +#endif /* __AA_POLICY_H */ --- linux-2.6.32.orig/security/apparmor/include/net.h +++ linux-2.6.32/security/apparmor/include/net.h @@ -0,0 +1,40 @@ +/* + * AppArmor security module + * + * This file contains AppArmor network mediation definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_NET_H +#define __AA_NET_H + +#include + +/* struct aa_net - network confinement data + * @allowed: basic network families permissions + * @audit_network: which network permissions to force audit + * @quiet_network: which network permissions to quiet rejects + */ +struct aa_net { + u16 allowed[AF_MAX]; + u16 audit[AF_MAX]; + u16 quiet[AF_MAX]; +}; + +extern int aa_net_perm(struct aa_profile *profile, char *operation, + int family, int type, int protocol); +extern int aa_revalidate_sk(struct sock *sk, char *operation); + +static inline void aa_free_net_rules(struct aa_net *new) +{ + /* NOP */ +} + +#endif /* __AA_NET_H */ --- linux-2.6.32.orig/security/apparmor/include/ipc.h +++ linux-2.6.32/security/apparmor/include/ipc.h @@ -0,0 +1,28 @@ +/* + * AppArmor security module + * + * This file contains AppArmor ipc mediation function definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_IPC_H +#define __AA_IPC_H + +#include + +struct aa_profile; + +int aa_may_ptrace(struct task_struct *tracer_task, struct aa_profile *tracer, + struct aa_profile *tracee, unsigned int mode); + +int aa_ptrace(struct task_struct *tracer, struct task_struct *tracee, + unsigned int mode); + +#endif /* __AA_IPC_H */ --- linux-2.6.32.orig/security/apparmor/include/procattr.h +++ linux-2.6.32/security/apparmor/include/procattr.h @@ -0,0 +1,26 @@ +/* + * AppArmor security module + * + * This file contains AppArmor /proc//attr/ interface function defintions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_PROCATTR_H +#define __AA_PROCATTR_H + +#define AA_DO_TEST 1 +#define AA_ONEXEC 1 + +int aa_getprocattr(struct aa_profile *profile, char **string); +int aa_setprocattr_changehat(char *args, size_t size, int test); +int aa_setprocattr_changeprofile(char *fqname, int onexec, int test); +int aa_setprocattr_permipc(char *fqname); + +#endif /* __AA_PROCATTR_H */ --- linux-2.6.32.orig/security/apparmor/include/file.h +++ linux-2.6.32/security/apparmor/include/file.h @@ -0,0 +1,228 @@ +/* + * AppArmor security module + * + * This file contains AppArmor file mediation function definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_FILE_H +#define __AA_FILE_H + +#include + +#include "audit.h" +#include "domain.h" +#include "match.h" + +struct aa_profile; + +/* + * We use MAY_EXEC, MAY_WRITE, MAY_READ, MAY_APPEND and the following flags + * for profile permissions + */ +#define AA_MAY_LINK 0x0010 +#define AA_MAY_LOCK 0x0020 +#define AA_EXEC_MMAP 0x0040 + +#define AA_MAY_CREATE 0x0080 +#define AA_MAY_DELETE 0x0100 +#define AA_MAY_CHMOD 0x0200 +#define AA_MAY_CHOWN 0x0400 + +#define AA_LINK_SUBSET 0x0800 +#define AA_MAY_CHANGEHAT 0x2000 /* ctrl auditing only */ +#define AA_MAY_ONEXEC 0x4000 /* exec allows onexec */ +#define AA_MAY_CHANGE_PROFILE 0x8000 + +#define AA_AUDIT_FILE_MASK (MAY_READ | MAY_WRITE | MAY_EXEC | MAY_APPEND |\ + AA_MAY_LINK | AA_MAY_LOCK | AA_EXEC_MMAP | \ + AA_MAY_CREATE | AA_MAY_DELETE | AA_MAY_CHMOD |\ + AA_MAY_CHOWN) + +/* + * The xindex is broken into 3 parts + * - index - an index into either the exec name table or the variable table + * - exec type - which determines how the executable name and index are used + * - flags - which modify how the destination name is applied + */ +#define AA_X_INDEX_MASK 0x03ff + +#define AA_X_TYPE_MASK 0x0c00 +#define AA_X_TYPE_SHIFT 10 +#define AA_X_NONE 0x0000 +#define AA_X_NAME 0x0400 /* use executable name px */ +#define AA_X_TABLE 0x0800 /* use a specified name ->n# */ + +#define AA_X_UNSAFE 0x1000 +#define AA_X_CHILD 0x2000 /* make >AA_X_NONE apply to children */ +#define AA_X_INHERIT 0x4000 +#define AA_X_UNCONFINED 0x8000 + +/* AA_SECURE_X_NEEDED - is passed in the bprm->unsafe field */ +#define AA_SECURE_X_NEEDED 0x8000 + +/* need to conditionalize which ones are being set */ +struct path_cond { + uid_t uid; + umode_t mode; +}; + +/* struct file_perms - file permission fo + * @allowed: mask of permissions that are allowed + * @audit: mask of permissions to force an audit message for + * @quiet: mask of permissions to quiet audit messages for + * @kill: mask of permissions that when matched will kill the task + * @xindex: exec transition index if @allowed contains MAY_EXEC + * @xdelegate: used by exec to determine set of delegates allowed + * @dindex: delegate table index, 0 if no delegation allowed + * + * The @audit and @queit mask should be mutually exclusive. + */ +struct file_perms { + u16 allowed; + u16 audit; + u16 quiet; + u16 kill; + u16 xindex; + u16 xdelegate; + u16 dindex; +}; + +extern struct file_perms nullperms; + +#define COMBINED_PERM_MASK(X) ((X).allowed | (X).audit | (X).quiet | (X).kill) + +/* FIXME: split perms from dfa and match this to description + * also add delegation info. + */ +static inline u16 dfa_map_xindex(u16 mask) +{ + u16 old_index = (mask >> 10) & 0xf; + u16 index = 0; + + if (mask & 0x100) + index |= AA_X_UNSAFE; + if (mask & 0x200) + index |= AA_X_INHERIT; + if (mask & 0x80) + index |= AA_X_UNCONFINED; + + if (old_index == 1) { + index |= AA_X_UNCONFINED; + } else if (old_index == 2) { + index |= AA_X_NAME; + } else if (old_index == 3) { + index |= AA_X_NAME | AA_X_CHILD; + } else { + index |= AA_X_TABLE; + index |= old_index - 4; + } + + return index; +} + +/* + * map old dfa inline permissions to new format + */ +#define dfa_user_allow(dfa, state) ((ACCEPT_TABLE(dfa)[state]) & 0x7f) +#define dfa_user_audit(dfa, state) ((ACCEPT_TABLE2(dfa)[state]) & 0x7f) +#define dfa_user_quiet(dfa, state) (((ACCEPT_TABLE2(dfa)[state]) >> 7) & 0x7f) +#define dfa_user_xindex(dfa, state) \ + (dfa_map_xindex(ACCEPT_TABLE(dfa)[state] & 0x3fff)) + +#define dfa_other_allow(dfa, state) (((ACCEPT_TABLE(dfa)[state]) >> 14) & 0x7f) +#define dfa_other_audit(dfa, state) (((ACCEPT_TABLE2(dfa)[state]) >> 14) & 0x7f) +#define dfa_other_quiet(dfa, state) \ + ((((ACCEPT_TABLE2(dfa)[state]) >> 7) >> 14) & 0x7f) +#define dfa_other_xindex(dfa, state) \ + dfa_map_xindex((ACCEPT_TABLE(dfa)[state] >> 14) & 0x3fff) + +struct aa_audit_file { + struct aa_audit base; + + const char *name; + const char *name2; + const char *name3; + struct file_perms perms; + u16 request; + struct path_cond *cond; +}; + +int aa_audit_file(struct aa_profile *profile, struct aa_audit_file *sa); + +/** + * struct aa_file_rules - components used for file rule permissions + * @dfa: dfa to match path names and conditionals against + * @perms: permission table indexed by the matched state accept entry of @dfa + * @trans: transition table for indexed by named x transitions + * + * File permission are determined by matching a path against @dfa and then + * then using the value of the accept entry for the matching state as + * an index into @perms. If a named exec transition is required it is + * looked up in the transition table. + */ +struct aa_file_rules { + unsigned int start; + struct aa_dfa *dfa; + /* struct perms perms; */ + struct aa_domain trans; + /* TODO: add delegate table */ +}; + +struct file_perms aa_str_perms(struct aa_dfa *dfa, unsigned int start, + const char *name, struct path_cond *cond, + unsigned int *rstate); + +int aa_pathstr_perm(struct aa_profile *profile, const char *op, + const char *name, u16 request, struct path_cond *cond); + +int aa_path_perm(struct aa_profile *profile, const char *operation, + struct path *path, u16 request, struct path_cond *cond); + +int aa_path_link(struct aa_profile *profile, struct dentry *old_dentry, + struct path *new_dir, struct dentry *new_dentry); + +int aa_file_perm(struct aa_profile *profile, const char *operation, + struct file *file, u16 request); + +static inline void aa_free_file_rules(struct aa_file_rules *rules) +{ + aa_put_dfa(rules->dfa); + aa_free_domain_entries(&rules->trans); +} + +#define ACC_FMODE(x) (("\000\004\002\006"[(x)&O_ACCMODE]) | (((x) << 1) & 0x40)) + +/* from namei.c */ +#define MAP_OPEN_FLAGS(x) ((((x) + 1) & O_ACCMODE) ? (x) + 1 : (x)) + +/** + * aa_map_file_perms - map file flags to AppArmor permissions + * @file: open file to map flags to AppArmor permissions + * + * Returns: apparmor permission set for the file + */ +static inline u16 aa_map_file_to_perms(struct file *file) +{ + int flags = MAP_OPEN_FLAGS(file->f_flags); + u16 perms = ACC_FMODE(file->f_mode); + + if ((flags & O_APPEND) && (perms & MAY_WRITE)) + perms = (perms & ~MAY_WRITE) | MAY_APPEND; + /* trunc implies write permission */ + if (flags & O_TRUNC) + perms |= MAY_WRITE; + if (flags & O_CREAT) + perms |= AA_MAY_CREATE; + + return perms; +} + +#endif /* __AA_FILE_H */ --- linux-2.6.32.orig/security/apparmor/include/resource.h +++ linux-2.6.32/security/apparmor/include/resource.h @@ -0,0 +1,45 @@ +/* + * AppArmor security module + * + * This file contains AppArmor resource limits function defintions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_RESOURCE_H +#define __AA_RESOURCE_H + +#include +#include + +struct aa_profile; + +/* struct aa_rlimit - rlimits settings for the profile + * @mask: which hard limits to set + * @limits: rlimit values that override task limits + * + * AppArmor rlimits are used to set confined task rlimits. Only the + * limits specified in @mask will be controlled by apparmor. + */ +struct aa_rlimit { + unsigned int mask; + struct rlimit limits[RLIM_NLIMITS]; +}; + +int aa_task_setrlimit(struct aa_profile *profile, unsigned int resource, + struct rlimit *new_rlim); + +void __aa_transition_rlimits(struct aa_profile *old, struct aa_profile *new); + +static inline void aa_free_rlimit_rules(struct aa_rlimit *rlims) +{ + /* NOP */ +} + +#endif /* __AA_RESOURCE_H */ --- linux-2.6.32.orig/security/apparmor/include/context.h +++ linux-2.6.32/security/apparmor/include/context.h @@ -0,0 +1,154 @@ +/* + * AppArmor security module + * + * This file contains AppArmor contexts used to associate "labels" to objects. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_CONTEXT_H +#define __AA_CONTEXT_H + +#include +#include +#include + +#include "policy.h" + +/* struct aa_file_cxt - the AppArmor context the file was opened in + * @profile: the profile the file was opened under + * @perms: the permission the file was opened with + */ +struct aa_file_cxt { + struct aa_profile *profile; + u16 allowed; +}; + +/** + * aa_alloc_file_context - allocate file_cxt + * @gfp: gfp flags for allocation + * + * Returns: file_cxt or NULL on failure + */ +static inline struct aa_file_cxt *aa_alloc_file_context(gfp_t gfp) +{ + return kzalloc(sizeof(struct aa_file_cxt), gfp); +} + +/** + * aa_free_file_context - free a file_cxt + * @cxt: file_cxt to free (MAYBE_NULL) + */ +static inline void aa_free_file_context(struct aa_file_cxt *cxt) +{ + if (cxt) { + aa_put_profile(cxt->profile); + kzfree(cxt); + } +} + +/** + * struct aa_task_cxt - primary label for confined tasks + * @profile: the current profile (NOT NULL) + * @exec: profile to transition to on next exec (MAYBE NULL) + * @previous: profile the task may return to (MAYBE NULL) + * @token: magic value the task must know for returning to @previous_profile + * + * Contains the task's current profile (which could change due to + * change_hat). Plus the hat_magic needed during change_hat. + * + * TODO: make so a task can be confined by a stack of contexts + */ +struct aa_task_cxt { + struct aa_profile *profile; + struct aa_profile *onexec; + struct aa_profile *previous; + u64 token; +}; + +struct aa_task_cxt *aa_alloc_task_context(gfp_t flags); +void aa_free_task_context(struct aa_task_cxt *cxt); +void aa_dup_task_context(struct aa_task_cxt *new, + const struct aa_task_cxt *old); +int aa_replace_current_profiles(struct aa_profile *profile); +int aa_set_current_onexec(struct aa_profile *profile); +int aa_set_current_hat(struct aa_profile *profile, u64 token); +int aa_restore_previous_profile(u64 cookie); + +/** + * __aa_task_is_confined - determine if @task has any confinement + * @task: task to check confinement of (NOT NULL) + * + * If @task != current needs to be called in RCU safe critical section + */ +static inline bool __aa_task_is_confined(struct task_struct *task) +{ + struct aa_task_cxt *cxt = __task_cred(task)->security; + + BUG_ON(!cxt || !cxt->profile); + if (unconfined(aa_newest_version(cxt->profile))) + return 0; + + return 1; +} + +/** + * aa_cred_profile - obtain cred's profiles + * @cred: cred to obtain profiles from (NOT NULL) + * + * Returns: confining profile + * + * does NOT increment reference count + */ +static inline struct aa_profile *aa_cred_profile(const struct cred *cred) +{ + struct aa_task_cxt *cxt = cred->security; + BUG_ON(!cxt || !cxt->profile); + return aa_newest_version(cxt->profile); +} + +/** + * __aa_current_profile - find the current tasks confining profile + * + * Returns: up to date confining profile or the ns unconfined profile (NOT NULL) + * + * This fn will not update the tasks cred to the most up to date version + * of the profile so it is safe to call when inside of locks. + */ +static inline struct aa_profile *__aa_current_profile(void) +{ + return aa_cred_profile(current_cred()); +} + +/** + * aa_current_profile - find the current tasks confining profile and do updates + * + * Returns: up to date confining profile or the ns unconfined profile (NOT NULL) + * + * This fn will update the tasks cred structure if the profile has been + * replaced. Not safe to call inside locks + */ +static inline struct aa_profile *aa_current_profile(void) +{ + const struct aa_task_cxt *cxt = current_cred()->security; + struct aa_profile *profile; + BUG_ON(!cxt || !cxt->profile); + + profile = aa_newest_version(cxt->profile); + /* + * Whether or not replacement succeeds, use newest profile so + * there is no need to update it after replacement. + */ + if (unlikely((cxt->profile != profile))) + aa_replace_current_profiles(profile); + + return profile; +} + +#endif /* __AA_CONTEXT_H */ --- linux-2.6.32.orig/security/apparmor/include/policy_unpack.h +++ linux-2.6.32/security/apparmor/include/policy_unpack.h @@ -0,0 +1,30 @@ +/* + * AppArmor security module + * + * This file contains AppArmor policy loading interface function definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __POLICY_INTERFACE_H +#define __POLICY_INTERFACE_H + +struct aa_audit_iface { + struct aa_audit base; + + const char *name; + const char *name2; + long pos; +}; + +int aa_audit_iface(struct aa_audit_iface *sa); +struct aa_profile *aa_unpack(void *udata, size_t size, + struct aa_audit_iface *sa); + +#endif /* __POLICY_INTERFACE_H */ --- linux-2.6.32.orig/security/apparmor/include/capability.h +++ linux-2.6.32/security/apparmor/include/capability.h @@ -0,0 +1,45 @@ +/* + * AppArmor security module + * + * This file contains AppArmor capability mediation definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_CAPABILITY_H +#define __AA_CAPABILITY_H + +#include + +struct aa_profile; + +/* aa_caps - confinement data for capabilities + * @allowed: capabilities mask + * @audit: caps that are to be audited + * @quiet: caps that should not be audited + * @kill: caps that when requested will result in the task being killed + * @extended: caps that are subject finer grained mediation + */ +struct aa_caps { + kernel_cap_t allowed; + kernel_cap_t audit; + kernel_cap_t quiet; + kernel_cap_t kill; + kernel_cap_t extended; +}; + +int aa_capable(struct task_struct *task, struct aa_profile *profile, int cap, + int audit); + +static inline void aa_free_cap_rules(struct aa_caps *caps) +{ + /* NOP */ +} + +#endif /* __AA_CAPBILITY_H */ --- linux-2.6.32.orig/security/apparmor/include/match.h +++ linux-2.6.32/security/apparmor/include/match.h @@ -0,0 +1,130 @@ +/* + * AppArmor security module + * + * This file contains AppArmor policy dfa matching engine definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_MATCH_H +#define __AA_MATCH_H + +#define DFA_NOMATCH 0 +#define DFA_START 1 + +#define DFA_VALID_PERM_MASK 0xffffffff +#define DFA_VALID_PERM2_MASK 0xffffffff + +/** + * The format used for transition tables is based on the GNU flex table + * file format (--tables-file option; see Table File Format in the flex + * info pages and the flex sources for documentation). The magic number + * used in the header is 0x1B5E783D insted of 0xF13C57B1 though, because + * the YY_ID_CHK (check) and YY_ID_DEF (default) tables are used + * slightly differently (see the apparmor-parser package). + */ + +#define YYTH_MAGIC 0x1B5E783D +#define YYTH_DEF_RECURSE 0x1 /* DEF Table is recursive */ + +struct table_set_header { + u32 th_magic; /* YYTH_MAGIC */ + u32 th_hsize; + u32 th_ssize; + u16 th_flags; + char th_version[]; +}; + +/* The YYTD_ID are one less than flex table mappings. The flex id + * has 1 subtracted at table load time, this allows us to directly use the + * ID's as indexes. + */ +#define YYTD_ID_ACCEPT 0 +#define YYTD_ID_BASE 1 +#define YYTD_ID_CHK 2 +#define YYTD_ID_DEF 3 +#define YYTD_ID_EC 4 +#define YYTD_ID_META 5 +#define YYTD_ID_ACCEPT2 6 +#define YYTD_ID_NXT 7 +#define YYTD_ID_TSIZE 8 + +#define YYTD_DATA8 1 +#define YYTD_DATA16 2 +#define YYTD_DATA32 4 +#define YYTD_DATA64 8 + +/* Each ACCEPT2 table gets 6 dedicated flags, YYTD_DATAX define the + * first flags + */ +#define ACCEPT1_FLAGS(X) ((X) & 0x3f) +#define ACCEPT2_FLAGS(X) ACCEPT1_FLAGS((X) >> YYTD_ID_ACCEPT2) +#define TO_ACCEPT1_FLAG(X) ACCEPT1_FLAGS(X) +#define TO_ACCEPT2_FLAG(X) (ACCEPT1_FLAGS(X) << YYTD_ID_ACCEPT2) +#define DFA_FLAG_VERIFY_STATES 0x1000 + +struct table_header { + u16 td_id; + u16 td_flags; + u32 td_hilen; + u32 td_lolen; + char td_data[]; +}; + +#define DEFAULT_TABLE(DFA) ((u16 *)((DFA)->tables[YYTD_ID_DEF]->td_data)) +#define BASE_TABLE(DFA) ((u32 *)((DFA)->tables[YYTD_ID_BASE]->td_data)) +#define NEXT_TABLE(DFA) ((u16 *)((DFA)->tables[YYTD_ID_NXT]->td_data)) +#define CHECK_TABLE(DFA) ((u16 *)((DFA)->tables[YYTD_ID_CHK]->td_data)) +#define EQUIV_TABLE(DFA) ((u8 *)((DFA)->tables[YYTD_ID_EC]->td_data)) +#define ACCEPT_TABLE(DFA) ((u32 *)((DFA)->tables[YYTD_ID_ACCEPT]->td_data)) +#define ACCEPT_TABLE2(DFA) ((u32 *)((DFA)->tables[YYTD_ID_ACCEPT2]->td_data)) + +struct aa_dfa { + struct kref count; + u16 flags; + struct table_header *tables[YYTD_ID_TSIZE]; +}; + +#define byte_to_byte(X) (X) + +#define UNPACK_ARRAY(TABLE, BLOB, LEN, TYPE, NTOHX) \ + do { \ + typeof(LEN) __i; \ + TYPE *__t = (TYPE *) TABLE; \ + TYPE *__b = (TYPE *) BLOB; \ + for (__i = 0; __i < LEN; __i++) { \ + __t[__i] = NTOHX(__b[__i]); \ + } \ + } while (0) + +static inline size_t table_size(size_t len, size_t el_size) +{ + return ALIGN(sizeof(struct table_header) + len * el_size, 8); +} + +struct aa_dfa *aa_dfa_unpack(void *blob, size_t size, int flags); +unsigned int aa_dfa_match_len(struct aa_dfa *dfa, unsigned int start, + const char *str, int len); +unsigned int aa_dfa_match(struct aa_dfa *dfa, unsigned int start, + const char *str); +void aa_dfa_free_kref(struct kref *kref); + +/** + * aa_put_dfa - put a dfa refcount + * @dfa: dfa to put refcount (MAYBE NULL) + * + * Requires: if @dfa != NULL that valid refcount be held + */ +static inline void aa_put_dfa(struct aa_dfa *dfa) +{ + if (dfa) + kref_put(&dfa->count, aa_dfa_free_kref); +} + +#endif /* __AA_MATCH_H */ --- linux-2.6.32.orig/security/apparmor/include/apparmor.h +++ linux-2.6.32/security/apparmor/include/apparmor.h @@ -0,0 +1,83 @@ +/* + * AppArmor security module + * + * This file contains AppArmor basic global and lib definitions + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __APPARMOR_H +#define __APPARMOR_H + +#include + +#include "match.h" + +/* Control parameters settable thru module/boot flags or + * via /sys/kernel/security/apparmor/control */ +extern enum audit_mode aa_g_audit; +extern int aa_g_audit_header; +extern int aa_g_debug; +extern int aa_g_lock_policy; +extern int aa_g_logsyscall; +extern int aa_g_paranoid_load; +extern unsigned int aa_g_path_max; + +/* + * DEBUG remains global (no per profile flag) since it is mostly used in sysctl + * which is not related to profile accesses. + */ + +#define AA_DEBUG(fmt, args...) \ + do { \ + if (aa_g_debug && printk_ratelimit()) \ + printk(KERN_DEBUG "AppArmor: " fmt, ##args); \ + } while (0) + +#define AA_ERROR(fmt, args...) \ + do { \ + if (printk_ratelimit()) \ + printk(KERN_ERR "AppArmor: " fmt, ##args); \ + } while (0) + +/* Flag indicating whether initialization completed */ +extern int apparmor_initialized; +void apparmor_disable(void); + +/* fn's in lib */ +char *aa_split_fqname(char *args, char **ns_name); +bool aa_strneq(const char *str, const char *sub, int len); +void aa_info_message(const char *str); +char *skip_spaces(const char *str); + +/** + * aa_dfa_null_transition - step to next state after null character + * @dfa: the dfa to match against + * @start: the state of the dfa to start matching in + * @old: true if using // as the null transition + * + * aa_dfa_null_transition transitions to the next state after a null + * character which is not used in standard matching and is only + * used to seperate pairs. + */ +static inline unsigned int aa_dfa_null_transition(struct aa_dfa *dfa, + unsigned int start, bool old) +{ + if (unlikely(old)) + return aa_dfa_match_len(dfa, start, "//", 2); + else + return aa_dfa_match_len(dfa, start, "\0", 1); +} + +static inline bool mediated_filesystem(struct inode *inode) +{ + return !(inode->i_sb->s_flags & MS_NOUSER); +} + +#endif /* __APPARMOR_H */ --- linux-2.6.32.orig/security/apparmor/include/apparmorfs.h +++ linux-2.6.32/security/apparmor/include/apparmorfs.h @@ -0,0 +1,28 @@ +/* + * AppArmor security module + * + * This file contains AppArmor filesystem definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2010 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#ifndef __AA_APPARMORFS_H +#define __AA_APPARMORFS_H + +extern struct dentry *aa_fs_null; +extern struct vfsmount *aa_fs_mnt; + +extern void aa_destroy_aafs(void); + +#ifdef CONFIG_SECURITY_APPARMOR_COMPAT_24 +extern const struct file_operations aa_fs_matching_fops; +extern const struct file_operations aa_fs_features_fops; +#endif + +#endif /* __AA_APPARMORFS_H */ --- linux-2.6.32.orig/Documentation/Changes +++ linux-2.6.32/Documentation/Changes @@ -49,6 +49,8 @@ o udev 081 # udevinfo -V o grub 0.93 # grub --version o mcelog 0.6 +o iptables 1.4.1 # iptables -V + Kernel compilation ================== --- linux-2.6.32.orig/Documentation/kernel-parameters.txt +++ linux-2.6.32/Documentation/kernel-parameters.txt @@ -241,7 +241,7 @@ acpi_sleep= [HW,ACPI] Sleep options Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, - old_ordering, s4_nonvs } + old_ordering, s4_nonvs, sci_force_enable } See Documentation/power/video.txt for information on s3_bios and s3_mode. s3_beep is for debugging; it makes the PC's speaker beep @@ -254,6 +254,9 @@ of _PTS is used by default). s4_nonvs prevents the kernel from saving/restoring the ACPI NVS memory during hibernation. + sci_force_enable causes the kernel to set SCI_EN directly + on resume from S1/S3 (which is against the ACPI spec, + but some broken systems don't work without it). acpi_use_timer_override [HW,ACPI] Use timer override. For some broken Nvidia NF5 boards @@ -2645,6 +2648,8 @@ to a common usb-storage quirk flag as follows: a = SANE_SENSE (collect more than 18 bytes of sense data); + b = BAD_SENSE (don't collect more than 18 + bytes of sense data); c = FIX_CAPACITY (decrease the reported device capacity by one sector); h = CAPACITY_HEURISTICS (decrease the @@ -2666,6 +2671,13 @@ medium is write-protected). Example: quirks=0419:aaf5:rl,0421:0433:rc + userpte= + [X86] Flags controlling user PTE allocations. + + nohigh = do not allocate PTE pages in + HIGHMEM regardless of setting + of CONFIG_HIGHPTE. + vdso= [X86,SH] vdso=2: enable compat VDSO (default with COMPAT_VDSO) vdso=1: enable VDSO (default) --- linux-2.6.32.orig/Documentation/i2c/busses/i2c-i801 +++ linux-2.6.32/Documentation/i2c/busses/i2c-i801 @@ -15,7 +15,8 @@ * Intel 82801I (ICH9) * Intel EP80579 (Tolapai) * Intel 82801JI (ICH10) - * Intel PCH + * Intel 3400/5 Series (PCH) + * Intel Cougar Point (PCH) Datasheets: Publicly available at the Intel website Authors: --- linux-2.6.32.orig/Documentation/video4linux/gspca.txt +++ linux-2.6.32/Documentation/video4linux/gspca.txt @@ -37,6 +37,7 @@ ov519 041e:4060 Creative Live! VISTA VF0350 ov519 041e:4061 Creative Live! VISTA VF0400 ov519 041e:4064 Creative Live! VISTA VF0420 +ov519 041e:4067 Creative Live! Cam Video IM (VF0350) ov519 041e:4068 Creative Live! VISTA VF0470 spca561 0458:7004 Genius VideoCAM Express V2 sunplus 0458:7006 Genius Dsc 1.3 Smart --- linux-2.6.32.orig/Documentation/video4linux/CARDLIST.saa7134 +++ linux-2.6.32/Documentation/video4linux/CARDLIST.saa7134 @@ -172,3 +172,4 @@ 171 -> Beholder BeholdTV X7 [5ace:7595] 172 -> RoverMedia TV Link Pro FM [19d1:0138] 173 -> Zolid Hybrid TV Tuner PCI [1131:2004] +174 -> Asus Europa Hybrid OEM [1043:4847] --- linux-2.6.32.orig/Documentation/filesystems/tmpfs.txt +++ linux-2.6.32/Documentation/filesystems/tmpfs.txt @@ -82,11 +82,13 @@ all files in that instance (if CONFIG_NUMA is enabled) - which can be adjusted on the fly via 'mount -o remount ...' -mpol=default prefers to allocate memory from the local node +mpol=default use the process allocation policy + (see set_mempolicy(2)) mpol=prefer:Node prefers to allocate memory from the given Node mpol=bind:NodeList allocates memory only from nodes in NodeList mpol=interleave prefers to allocate from each node in turn mpol=interleave:NodeList allocates from each node of NodeList in turn +mpol=local prefers to allocate memory from the local node NodeList format is a comma-separated list of decimal numbers and ranges, a range being two hyphen-separated decimal numbers, the smallest and @@ -134,3 +136,5 @@ Christoph Rohland , 1.12.01 Updated: Hugh Dickins, 4 June 2007 +Updated: + KOSAKI Motohiro, 16 Mar 2010 --- linux-2.6.32.orig/Documentation/filesystems/ext4.txt +++ linux-2.6.32/Documentation/filesystems/ext4.txt @@ -153,8 +153,8 @@ identified through its new major/minor numbers encoded in devnum. -noload Don't load the journal on mounting. Note that - if the filesystem was not unmounted cleanly, +norecovery Don't load the journal on mounting. Note that +noload if the filesystem was not unmounted cleanly, skipping the journal replay will lead to the filesystem containing inconsistencies that can lead to any number of problems. @@ -196,7 +196,7 @@ also be used to enable or disable barriers, for consistency with other ext4 mount options. -inode_readahead=n This tuning parameter controls the maximum +inode_readahead_blks=n This tuning parameter controls the maximum number of inode table blocks that ext4's inode table readahead algorithm will pre-read into the buffer cache. The default value is 32 blocks. @@ -353,6 +353,12 @@ system crashes before the delayed allocation blocks are forced to disk. +discard Controls whether ext4 should issue discard/TRIM +nodiscard(*) commands to the underlying block device when + blocks are freed. This is useful for SSD devices + and sparse/thinly-provisioned LUNs, but it is off + by default until sufficient testing has been done. + Data Mode ========= There are 3 different data modes: --- linux-2.6.32.orig/Documentation/filesystems/proc.txt +++ linux-2.6.32/Documentation/filesystems/proc.txt @@ -176,7 +176,6 @@ CapBnd: ffffffffffffffff voluntary_ctxt_switches: 0 nonvoluntary_ctxt_switches: 1 - Stack usage: 12 kB This shows you nearly the same information you would get if you viewed it with the ps command. In fact, ps uses the proc file system to obtain its @@ -230,7 +229,6 @@ Mems_allowed_list Same as previous, but in "list format" voluntary_ctxt_switches number of voluntary context switches nonvoluntary_ctxt_switches number of non voluntary context switches - Stack usage: stack usage high water mark (round up to page size) .............................................................................. Table 1-3: Contents of the statm files (as of 2.6.8-rc3) @@ -309,7 +307,7 @@ 08049000-0804a000 rw-p 00001000 03:00 8312 /opt/test 0804a000-0806b000 rw-p 00000000 00:00 0 [heap] a7cb1000-a7cb2000 ---p 00000000 00:00 0 -a7cb2000-a7eb2000 rw-p 00000000 00:00 0 [threadstack:001ff4b4] +a7cb2000-a7eb2000 rw-p 00000000 00:00 0 a7eb2000-a7eb3000 ---p 00000000 00:00 0 a7eb3000-a7ed5000 rw-p 00000000 00:00 0 a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6 @@ -345,7 +343,6 @@ [stack] = the stack of the main process [vdso] = the "virtual dynamic shared object", the kernel system call handler - [threadstack:xxxxxxxx] = the stack of the thread, xxxxxxxx is the stack size or if empty, the mapping is anonymous. --- linux-2.6.32.orig/Documentation/DocBook/Makefile +++ linux-2.6.32/Documentation/DocBook/Makefile @@ -32,28 +32,37 @@ ### # The targets that may be used. -PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs media +PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) -xmldocs: $(BOOKS) +xmldocs: xmldoclinks $(BOOKS) sgmldocs: xmldocs PS := $(patsubst %.xml, %.ps, $(BOOKS)) -psdocs: $(PS) +psdocs: xmldoclinks $(PS) PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) -pdfdocs: $(PDF) +pdfdocs: xmldoclinks $(PDF) HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) -htmldocs: media $(HTML) +htmldocs: xmldoclinks $(HTML) $(call build_main_index) + $(call build_images) MAN := $(patsubst %.xml, %.9, $(BOOKS)) mandocs: $(MAN) -media: - mkdir -p $(srctree)/Documentation/DocBook/media/ - cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(srctree)/Documentation/DocBook/media/ +build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \ + cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(objtree)/Documentation/DocBook/media/ + +xmldoclinks: +ifneq ($(objtree),$(srctree)) + for dep in dvb media-entities.tmpl media-indices.tmpl v4l; do \ + rm -f $(objtree)/Documentation/DocBook/$$dep \ + && ln -s $(srctree)/Documentation/DocBook/$$dep $(objtree)/Documentation/DocBook/ \ + || exit; \ + done +endif installmandocs: mandocs mkdir -p /usr/local/man/man9/ --- linux-2.6.32.orig/Documentation/kbuild/kbuild.txt +++ linux-2.6.32/Documentation/kbuild/kbuild.txt @@ -1,3 +1,17 @@ +Output files + +modules.order +-------------------------------------------------- +This file records the order in which modules appear in Makefiles. This +is used by modprobe to deterministically resolve aliases that match +multiple modules. + +modules.builtin +-------------------------------------------------- +This file lists all modules that are built into the kernel. This is used +by modprobe to not fail when trying to load something builtin. + + Environment variables KCPPFLAGS --- linux-2.6.32.orig/Documentation/kbuild/kconfig.txt +++ linux-2.6.32/Documentation/kbuild/kconfig.txt @@ -103,6 +103,11 @@ This environment variable can be set to specify the path & name of the "auto.conf" file. Its default value is "include/config/auto.conf". +KCONFIG_TRISTATE +-------------------------------------------------- +This environment variable can be set to specify the path & name of the +"tristate.conf" file. Its default value is "include/config/tristate.conf". + KCONFIG_AUTOHEADER -------------------------------------------------- This environment variable can be set to specify the path & name of the --- linux-2.6.32.orig/Documentation/kvm/api.txt +++ linux-2.6.32/Documentation/kvm/api.txt @@ -593,6 +593,42 @@ } chip; }; +4.27 KVM_GET_CLOCK + +Capability: KVM_CAP_ADJUST_CLOCK +Architectures: x86 +Type: vm ioctl +Parameters: struct kvm_clock_data (out) +Returns: 0 on success, -1 on error + +Gets the current timestamp of kvmclock as seen by the current guest. In +conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios +such as migration. + +struct kvm_clock_data { + __u64 clock; /* kvmclock current value */ + __u32 flags; + __u32 pad[9]; +}; + +4.28 KVM_SET_CLOCK + +Capability: KVM_CAP_ADJUST_CLOCK +Architectures: x86 +Type: vm ioctl +Parameters: struct kvm_clock_data (in) +Returns: 0 on success, -1 on error + +Sets the current timestamp of kvmclock to the valued specific in its parameter. +In conjunction with KVM_GET_CLOCK, it is used to ensure monotonicity on scenarios +such as migration. + +struct kvm_clock_data { + __u64 clock; /* kvmclock current value */ + __u32 flags; + __u32 pad[9]; +}; + 5. The kvm_run structure Application code obtains a pointer to the kvm_run structure by --- linux-2.6.32.orig/Documentation/networking/README.ipw2200 +++ linux-2.6.32/Documentation/networking/README.ipw2200 @@ -171,7 +171,7 @@ led Can be used to turn on experimental LED code. - 0 = Off, 1 = On. Default is 0. + 0 = Off, 1 = On. Default is 1. mode Can be used to set the default mode of the adapter. --- linux-2.6.32.orig/fs/bio-integrity.c +++ linux-2.6.32/fs/bio-integrity.c @@ -61,7 +61,7 @@ static inline int use_bip_pool(unsigned int idx) { - if (idx == BIOVEC_NR_POOLS) + if (idx == BIOVEC_MAX_IDX) return 1; return 0; @@ -95,6 +95,7 @@ /* Use mempool if lower order alloc failed or max vecs were requested */ if (bip == NULL) { + idx = BIOVEC_MAX_IDX; /* so we free the payload properly later */ bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask); if (unlikely(bip == NULL)) { --- linux-2.6.32.orig/fs/super.c +++ linux-2.6.32/fs/super.c @@ -901,8 +901,9 @@ return error; } s->s_flags |= MS_ACTIVE; + } else { + do_remount_sb(s, flags, data, 0); } - do_remount_sb(s, flags, data, 0); simple_set_mnt(mnt, s); return 0; } --- linux-2.6.32.orig/fs/block_dev.c +++ linux-2.6.32/fs/block_dev.c @@ -246,7 +246,8 @@ if (!sb) goto out; if (sb->s_flags & MS_RDONLY) { - deactivate_locked_super(sb); + sb->s_frozen = SB_FREEZE_TRANS; + up_write(&sb->s_umount); mutex_unlock(&bdev->bd_fsfreeze_mutex); return sb; } @@ -307,7 +308,7 @@ BUG_ON(sb->s_bdev != bdev); down_write(&sb->s_umount); if (sb->s_flags & MS_RDONLY) - goto out_deactivate; + goto out_unfrozen; if (sb->s_op->unfreeze_fs) { error = sb->s_op->unfreeze_fs(sb); @@ -321,11 +322,11 @@ } } +out_unfrozen: sb->s_frozen = SB_UNFROZEN; smp_wmb(); wake_up(&sb->s_wait_unfrozen); -out_deactivate: if (sb) deactivate_locked_super(sb); out_unlock: @@ -403,7 +404,7 @@ * NULL first argument is nfsd_sync_dir() and that's not a directory. */ -static int block_fsync(struct file *filp, struct dentry *dentry, int datasync) +int block_fsync(struct file *filp, struct dentry *dentry, int datasync) { return sync_blockdev(I_BDEV(filp->f_mapping->host)); } @@ -422,6 +423,7 @@ return NULL; return &ei->vfs_inode; } +EXPORT_SYMBOL(block_fsync); static void bdev_destroy_inode(struct inode *inode) { --- linux-2.6.32.orig/fs/sync.c +++ linux-2.6.32/fs/sync.c @@ -89,7 +89,7 @@ * flags again, which will cause process A to resync everything. Fix that with * a local mutex. */ -static void sync_filesystems(int wait) +void sync_filesystems(int wait) { struct super_block *sb; static DEFINE_MUTEX(mutex); --- linux-2.6.32.orig/fs/bio.c +++ linux-2.6.32/fs/bio.c @@ -542,13 +542,18 @@ if (page == prev->bv_page && offset == prev->bv_offset + prev->bv_len) { + unsigned int prev_bv_len = prev->bv_len; prev->bv_len += len; if (q->merge_bvec_fn) { struct bvec_merge_data bvm = { + /* prev_bvec is already charged in + bi_size, discharge it in order to + simulate merging updated prev_bvec + as new bvec. */ .bi_bdev = bio->bi_bdev, .bi_sector = bio->bi_sector, - .bi_size = bio->bi_size, + .bi_size = bio->bi_size - prev_bv_len, .bi_rw = bio->bi_rw, }; --- linux-2.6.32.orig/fs/binfmt_elf.c +++ linux-2.6.32/fs/binfmt_elf.c @@ -662,27 +662,6 @@ if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0') goto out_free_interp; - /* - * The early SET_PERSONALITY here is so that the lookup - * for the interpreter happens in the namespace of the - * to-be-execed image. SET_PERSONALITY can select an - * alternate root. - * - * However, SET_PERSONALITY is NOT allowed to switch - * this task into the new images's memory mapping - * policy - that is, TASK_SIZE must still evaluate to - * that which is appropriate to the execing application. - * This is because exit_mmap() needs to have TASK_SIZE - * evaluate to the size of the old image. - * - * So if (say) a 64-bit application is execing a 32-bit - * application it is the architecture's responsibility - * to defer changing the value of TASK_SIZE until the - * switch really is going to happen - do this in - * flush_thread(). - akpm - */ - SET_PERSONALITY(loc->elf_ex); - interpreter = open_exec(elf_interpreter); retval = PTR_ERR(interpreter); if (IS_ERR(interpreter)) @@ -730,9 +709,6 @@ /* Verify the interpreter has a valid arch */ if (!elf_check_arch(&loc->interp_elf_ex)) goto out_free_dentry; - } else { - /* Executables without an interpreter also need a personality */ - SET_PERSONALITY(loc->elf_ex); } /* Flush all traces of the currently running executable */ @@ -740,6 +716,14 @@ if (retval) goto out_free_dentry; +#if defined(CONFIG_X86_32) && !defined(CONFIG_UML) + /* + * Turn off the CS limit completely if NX active: + */ + if (executable_stack != EXSTACK_DISABLE_X || nx_enabled) + arch_add_exec_range(current->mm, -1); +#endif + /* OK, This is the point of no return */ current->flags &= ~PF_FORKNOEXEC; current->mm->def_flags = def_flags; @@ -752,7 +736,8 @@ if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) current->flags |= PF_RANDOMIZE; - arch_pick_mmap_layout(current->mm); + + setup_new_exec(bprm); /* Do this so that we can load the interpreter, if need be. We will change some of these later */ --- linux-2.6.32.orig/fs/inode.c +++ linux-2.6.32/fs/inode.c @@ -1624,3 +1624,7 @@ inode->i_ino); } EXPORT_SYMBOL(init_special_inode); + +#define CREATE_TRACE_POINTS +#include + --- linux-2.6.32.orig/fs/compat.c +++ linux-2.6.32/fs/compat.c @@ -1532,8 +1532,6 @@ if (retval < 0) goto out; - current->stack_start = current->mm->start_stack; - /* execve succeeded */ current->fs->in_exec = 0; current->in_execve = 0; --- linux-2.6.32.orig/fs/fcntl.c +++ linux-2.6.32/fs/fcntl.c @@ -618,60 +618,90 @@ static struct kmem_cache *fasync_cache __read_mostly; /* - * fasync_helper() is used by almost all character device drivers - * to set up the fasync queue. It returns negative on error, 0 if it did - * no changes and positive if it added/deleted the entry. + * Remove a fasync entry. If successfully removed, return + * positive and clear the FASYNC flag. If no entry exists, + * do nothing and return 0. + * + * NOTE! It is very important that the FASYNC flag always + * match the state "is the filp on a fasync list". + * + * We always take the 'filp->f_lock', in since fasync_lock + * needs to be irq-safe. */ -int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp) +static int fasync_remove_entry(struct file *filp, struct fasync_struct **fapp) { struct fasync_struct *fa, **fp; - struct fasync_struct *new = NULL; int result = 0; - if (on) { - new = kmem_cache_alloc(fasync_cache, GFP_KERNEL); - if (!new) - return -ENOMEM; + spin_lock(&filp->f_lock); + write_lock_irq(&fasync_lock); + for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) { + if (fa->fa_file != filp) + continue; + *fp = fa->fa_next; + kmem_cache_free(fasync_cache, fa); + filp->f_flags &= ~FASYNC; + result = 1; + break; } + write_unlock_irq(&fasync_lock); + spin_unlock(&filp->f_lock); + return result; +} + +/* + * Add a fasync entry. Return negative on error, positive if + * added, and zero if did nothing but change an existing one. + * + * NOTE! It is very important that the FASYNC flag always + * match the state "is the filp on a fasync list". + */ +static int fasync_add_entry(int fd, struct file *filp, struct fasync_struct **fapp) +{ + struct fasync_struct *new, *fa, **fp; + int result = 0; + + new = kmem_cache_alloc(fasync_cache, GFP_KERNEL); + if (!new) + return -ENOMEM; - /* - * We need to take f_lock first since it's not an IRQ-safe - * lock. - */ spin_lock(&filp->f_lock); write_lock_irq(&fasync_lock); for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) { - if (fa->fa_file == filp) { - if(on) { - fa->fa_fd = fd; - kmem_cache_free(fasync_cache, new); - } else { - *fp = fa->fa_next; - kmem_cache_free(fasync_cache, fa); - result = 1; - } - goto out; - } + if (fa->fa_file != filp) + continue; + fa->fa_fd = fd; + kmem_cache_free(fasync_cache, new); + goto out; } - if (on) { - new->magic = FASYNC_MAGIC; - new->fa_file = filp; - new->fa_fd = fd; - new->fa_next = *fapp; - *fapp = new; - result = 1; - } + new->magic = FASYNC_MAGIC; + new->fa_file = filp; + new->fa_fd = fd; + new->fa_next = *fapp; + *fapp = new; + result = 1; + filp->f_flags |= FASYNC; + out: - if (on) - filp->f_flags |= FASYNC; - else - filp->f_flags &= ~FASYNC; write_unlock_irq(&fasync_lock); spin_unlock(&filp->f_lock); return result; } +/* + * fasync_helper() is used by almost all character device drivers + * to set up the fasync queue, and for regular files by the file + * lease code. It returns negative on error, 0 if it did no changes + * and positive if it added/deleted the entry. + */ +int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp) +{ + if (!on) + return fasync_remove_entry(filp, fapp); + return fasync_add_entry(fd, filp, fapp); +} + EXPORT_SYMBOL(fasync_helper); void __kill_fasync(struct fasync_struct *fa, int sig, int band) --- linux-2.6.32.orig/fs/stat.c +++ linux-2.6.32/fs/stat.c @@ -401,9 +401,9 @@ } #endif /* __ARCH_WANT_STAT64 */ -void inode_add_bytes(struct inode *inode, loff_t bytes) +/* Caller is here responsible for sufficient locking (ie. inode->i_lock) */ +void __inode_add_bytes(struct inode *inode, loff_t bytes) { - spin_lock(&inode->i_lock); inode->i_blocks += bytes >> 9; bytes &= 511; inode->i_bytes += bytes; @@ -411,6 +411,12 @@ inode->i_blocks++; inode->i_bytes -= 512; } +} + +void inode_add_bytes(struct inode *inode, loff_t bytes) +{ + spin_lock(&inode->i_lock); + __inode_add_bytes(inode, bytes); spin_unlock(&inode->i_lock); } --- linux-2.6.32.orig/fs/namespace.c +++ linux-2.6.32/fs/namespace.c @@ -33,12 +33,14 @@ #include #include "pnode.h" #include "internal.h" +#include #define HASH_SHIFT ilog2(PAGE_SIZE / sizeof(struct list_head)) #define HASH_SIZE (1UL << HASH_SHIFT) /* spinlock for vfsmount related operations, inplace of dcache_lock */ __cacheline_aligned_in_smp DEFINE_SPINLOCK(vfsmount_lock); +EXPORT_SYMBOL(vfsmount_lock); static int event; static DEFINE_IDA(mnt_id_ida); @@ -1133,6 +1135,12 @@ if (!capable(CAP_SYS_ADMIN)) goto dput_and_out; + /* Temporary solution to fix long umount periods till + * we find the real fix + */ + sync_filesystems(0); + sync_filesystems(1); + retval = do_umount(path.mnt, flags); dput_and_out: /* we mustn't call path_put() as that would clear mnt_expiry_mark */ --- linux-2.6.32.orig/fs/namei.c +++ linux-2.6.32/fs/namei.c @@ -234,6 +234,7 @@ /* * Searching includes executable on directories, else just read. */ + mask &= MAY_READ | MAY_WRITE | MAY_EXEC; if (mask == MAY_READ || (S_ISDIR(inode->i_mode) && !(mask & MAY_WRITE))) if (capable(CAP_DAC_READ_SEARCH)) return 0; @@ -350,6 +351,7 @@ return 0; } +EXPORT_SYMBOL(deny_write_access); /** * path_get - get a reference to a path @@ -828,6 +830,17 @@ } /* + * This is a temporary kludge to deal with "automount" symlinks; proper + * solution is to trigger them on follow_mount(), so that do_lookup() + * would DTRT. To be killed before 2.6.34-final. + */ +static inline int follow_on_final(struct inode *inode, unsigned lookup_flags) +{ + return inode && unlikely(inode->i_op->follow_link) && + ((lookup_flags & LOOKUP_FOLLOW) || S_ISDIR(inode->i_mode)); +} + +/* * Name resolution. * This is the basic name resolution function, turning a pathname into * the final dentry. We expect 'base' to be positive and a directory. @@ -963,8 +976,7 @@ if (err) break; inode = next.dentry->d_inode; - if ((lookup_flags & LOOKUP_FOLLOW) - && inode && inode->i_op->follow_link) { + if (follow_on_final(inode, lookup_flags)) { err = do_follow_link(&next, nd); if (err) goto return_err; @@ -1219,7 +1231,7 @@ * needs parent already locked. Doesn't follow mounts. * SMP-safe. */ -static struct dentry *lookup_hash(struct nameidata *nd) +struct dentry *lookup_hash(struct nameidata *nd) { int err; @@ -1228,8 +1240,9 @@ return ERR_PTR(err); return __lookup_hash(&nd->last, nd->path.dentry, nd); } +EXPORT_SYMBOL(lookup_hash); -static int __lookup_one_len(const char *name, struct qstr *this, +int __lookup_one_len(const char *name, struct qstr *this, struct dentry *base, int len) { unsigned long hash; @@ -1250,6 +1263,7 @@ this->hash = end_name_hash(hash); return 0; } +EXPORT_SYMBOL(__lookup_one_len); /** * lookup_one_len - filesystem helper to lookup single pathname component --- linux-2.6.32.orig/fs/open.c +++ linux-2.6.32/fs/open.c @@ -31,6 +31,9 @@ #include #include +#define CREATE_TRACE_POINTS +#include + int vfs_statfs(struct dentry *dentry, struct kstatfs *buf) { int retval = -ENODEV; @@ -223,6 +226,7 @@ mutex_unlock(&dentry->d_inode->i_mutex); return ret; } +EXPORT_SYMBOL(do_truncate); static long do_sys_truncate(const char __user *pathname, loff_t length) { @@ -587,6 +591,9 @@ error = -EPERM; if (!capable(CAP_SYS_CHROOT)) goto dput_and_out; + error = security_path_chroot(&path); + if (error) + goto dput_and_out; set_fs_root(current->fs, &path); error = 0; @@ -617,11 +624,15 @@ if (err) goto out_putf; mutex_lock(&inode->i_mutex); + err = security_path_chmod(dentry, file->f_vfsmnt, mode); + if (err) + goto out_unlock; if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; err = notify_change(dentry, &newattrs); +out_unlock: mutex_unlock(&inode->i_mutex); mnt_drop_write(file->f_path.mnt); out_putf: @@ -646,11 +657,15 @@ if (error) goto dput_and_out; mutex_lock(&inode->i_mutex); + error = security_path_chmod(path.dentry, path.mnt, mode); + if (error) + goto out_unlock; if (mode == (mode_t) -1) mode = inode->i_mode; newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO); newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; error = notify_change(path.dentry, &newattrs); +out_unlock: mutex_unlock(&inode->i_mutex); mnt_drop_write(path.mnt); dput_and_out: @@ -664,9 +679,9 @@ return sys_fchmodat(AT_FDCWD, filename, mode); } -static int chown_common(struct dentry * dentry, uid_t user, gid_t group) +static int chown_common(struct path *path, uid_t user, gid_t group) { - struct inode *inode = dentry->d_inode; + struct inode *inode = path->dentry->d_inode; int error; struct iattr newattrs; @@ -683,7 +698,9 @@ newattrs.ia_valid |= ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_KILL_PRIV; mutex_lock(&inode->i_mutex); - error = notify_change(dentry, &newattrs); + error = security_path_chown(path, user, group); + if (!error) + error = notify_change(path->dentry, &newattrs); mutex_unlock(&inode->i_mutex); return error; @@ -700,7 +717,7 @@ error = mnt_want_write(path.mnt); if (error) goto out_release; - error = chown_common(path.dentry, user, group); + error = chown_common(&path, user, group); mnt_drop_write(path.mnt); out_release: path_put(&path); @@ -725,7 +742,7 @@ error = mnt_want_write(path.mnt); if (error) goto out_release; - error = chown_common(path.dentry, user, group); + error = chown_common(&path, user, group); mnt_drop_write(path.mnt); out_release: path_put(&path); @@ -744,7 +761,7 @@ error = mnt_want_write(path.mnt); if (error) goto out_release; - error = chown_common(path.dentry, user, group); + error = chown_common(&path, user, group); mnt_drop_write(path.mnt); out_release: path_put(&path); @@ -767,7 +784,7 @@ goto out_fput; dentry = file->f_path.dentry; audit_inode(NULL, dentry); - error = chown_common(dentry, user, group); + error = chown_common(&file->f_path, user, group); mnt_drop_write(file->f_path.mnt); out_fput: fput(file); @@ -1043,6 +1060,7 @@ } else { fsnotify_open(f->f_path.dentry); fd_install(fd, f); + trace_do_sys_open(tmp, flags, mode); } } putname(tmp); --- linux-2.6.32.orig/fs/binfmt_flat.c +++ linux-2.6.32/fs/binfmt_flat.c @@ -519,6 +519,7 @@ /* OK, This is the point of no return */ set_personality(PER_LINUX_32BIT); + setup_new_exec(bprm); } /* --- linux-2.6.32.orig/fs/binfmt_aout.c +++ linux-2.6.32/fs/binfmt_aout.c @@ -263,6 +263,7 @@ #else set_personality(PER_LINUX); #endif + setup_new_exec(bprm); current->mm->end_code = ex.a_text + (current->mm->start_code = N_TXTADDR(ex)); --- linux-2.6.32.orig/fs/binfmt_elf_fdpic.c +++ linux-2.6.32/fs/binfmt_elf_fdpic.c @@ -171,6 +171,9 @@ #ifdef ELF_FDPIC_PLAT_INIT unsigned long dynaddr; #endif +#ifndef CONFIG_MMU + unsigned long stack_prot; +#endif struct file *interpreter = NULL; /* to shut gcc up */ char *interpreter_name = NULL; int executable_stack; @@ -316,6 +319,11 @@ * defunct, deceased, etc. after this point we have to exit via * error_kill */ set_personality(PER_LINUX_FDPIC); + if (elf_read_implies_exec(&exec_params.hdr, executable_stack)) + current->personality |= READ_IMPLIES_EXEC; + + setup_new_exec(bprm); + set_binfmt(&elf_fdpic_format); current->mm->start_code = 0; @@ -377,9 +385,13 @@ if (stack_size < PAGE_SIZE * 2) stack_size = PAGE_SIZE * 2; + stack_prot = PROT_READ | PROT_WRITE; + if (executable_stack == EXSTACK_ENABLE_X || + (executable_stack == EXSTACK_DEFAULT && VM_STACK_FLAGS & VM_EXEC)) + stack_prot |= PROT_EXEC; + down_write(¤t->mm->mmap_sem); - current->mm->start_brk = do_mmap(NULL, 0, stack_size, - PROT_READ | PROT_WRITE | PROT_EXEC, + current->mm->start_brk = do_mmap(NULL, 0, stack_size, stack_prot, MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN, 0); --- linux-2.6.32.orig/fs/binfmt_som.c +++ linux-2.6.32/fs/binfmt_som.c @@ -227,6 +227,7 @@ /* OK, This is the point of no return */ current->flags &= ~PF_FORKNOEXEC; current->personality = PER_HPUX; + setup_new_exec(bprm); /* Set the task size for HP-UX processes such that * the gateway page is outside the address space. --- linux-2.6.32.orig/fs/fs-writeback.c +++ linux-2.6.32/fs/fs-writeback.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "internal.h" #define inode_to_bdi(inode) ((inode)->i_mapping->backing_dev_info) @@ -1071,6 +1072,8 @@ if ((inode->i_state & flags) == flags) return; + trace_dirty_inode(inode, current); + if (unlikely(block_dump)) block_dump___mark_inode_dirty(inode); @@ -1213,6 +1216,23 @@ EXPORT_SYMBOL(writeback_inodes_sb); /** + * writeback_inodes_sb_if_idle - start writeback if none underway + * @sb: the superblock + * + * Invoke writeback_inodes_sb if no writeback is currently underway. + * Returns 1 if writeback was started, 0 if not. + */ +int writeback_inodes_sb_if_idle(struct super_block *sb) +{ + if (!writeback_in_progress(sb->s_bdi)) { + writeback_inodes_sb(sb); + return 1; + } else + return 0; +} +EXPORT_SYMBOL(writeback_inodes_sb_if_idle); + +/** * sync_inodes_sb - sync sb inode pages * @sb: the superblock * --- linux-2.6.32.orig/fs/file_table.c +++ linux-2.6.32/fs/file_table.c @@ -420,7 +420,9 @@ continue; if (!(f->f_mode & FMODE_WRITE)) continue; + spin_lock(&f->f_lock); f->f_mode &= ~FMODE_WRITE; + spin_unlock(&f->f_lock); if (file_check_writeable(f) != 0) continue; file_release_write(f); --- linux-2.6.32.orig/fs/splice.c +++ linux-2.6.32/fs/splice.c @@ -1051,8 +1051,8 @@ /* * Attempt to initiate a splice from pipe to file. */ -static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, - loff_t *ppos, size_t len, unsigned int flags) +long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags) { ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); @@ -1074,13 +1074,14 @@ return splice_write(pipe, out, ppos, len, flags); } +EXPORT_SYMBOL(do_splice_from); /* * Attempt to initiate a splice from a file to a pipe. */ -static long do_splice_to(struct file *in, loff_t *ppos, - struct pipe_inode_info *pipe, size_t len, - unsigned int flags) +long do_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) { ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); @@ -1099,6 +1100,7 @@ return splice_read(in, ppos, pipe, len, flags); } +EXPORT_SYMBOL(do_splice_to); /** * splice_direct_to_actor - splices data directly between two non-pipes --- linux-2.6.32.orig/fs/exec.c +++ linux-2.6.32/fs/exec.c @@ -57,6 +57,8 @@ #include #include +#include + #include #include #include @@ -572,6 +574,9 @@ struct vm_area_struct *prev = NULL; unsigned long vm_flags; unsigned long stack_base; + unsigned long stack_size; + unsigned long stack_expand; + unsigned long rlim_stack; #ifdef CONFIG_STACK_GROWSUP /* Limit stack size to 1GB */ @@ -628,10 +633,23 @@ goto out_unlock; } + stack_expand = EXTRA_STACK_VM_PAGES * PAGE_SIZE; + stack_size = vma->vm_end - vma->vm_start; + /* + * Align this down to a page boundary as expand_stack + * will align it up. + */ + rlim_stack = rlimit(RLIMIT_STACK) & PAGE_MASK; #ifdef CONFIG_STACK_GROWSUP - stack_base = vma->vm_end + EXTRA_STACK_VM_PAGES * PAGE_SIZE; + if (stack_size + stack_expand > rlim_stack) + stack_base = vma->vm_start + rlim_stack; + else + stack_base = vma->vm_end + stack_expand; #else - stack_base = vma->vm_start - EXTRA_STACK_VM_PAGES * PAGE_SIZE; + if (stack_size + stack_expand > rlim_stack) + stack_base = vma->vm_end - rlim_stack; + else + stack_base = vma->vm_start - stack_expand; #endif ret = expand_stack(vma, stack_base); if (ret) @@ -665,6 +683,8 @@ fsnotify_open(file->f_path.dentry); + trace_open_exec(name); + err = deny_write_access(file); if (err) goto exit; @@ -931,9 +951,7 @@ int flush_old_exec(struct linux_binprm * bprm) { - char * name; - int i, ch, retval; - char tcomm[sizeof(current->comm)]; + int retval; /* * Make sure we have a private signal table and that @@ -954,6 +972,25 @@ bprm->mm = NULL; /* We're using it now */ + current->flags &= ~PF_RANDOMIZE; + flush_thread(); + current->personality &= ~bprm->per_clear; + + return 0; + +out: + return retval; +} +EXPORT_SYMBOL(flush_old_exec); + +void setup_new_exec(struct linux_binprm * bprm) +{ + int i, ch; + char * name; + char tcomm[sizeof(current->comm)]; + + arch_pick_mmap_layout(current->mm); + /* This is the point of no return */ current->sas_ss_sp = current->sas_ss_size = 0; @@ -975,9 +1012,6 @@ tcomm[i] = '\0'; set_task_comm(current, tcomm); - current->flags &= ~PF_RANDOMIZE; - flush_thread(); - /* Set the new mm task size. We have to do that late because it may * depend on TIF_32BIT which is only updated in flush_thread() on * some architectures like powerpc @@ -993,8 +1027,6 @@ set_dumpable(current->mm, suid_dumpable); } - current->personality &= ~bprm->per_clear; - /* * Flush performance counters when crossing a * security domain: @@ -1009,14 +1041,8 @@ flush_signal_handlers(current, 0); flush_old_files(current->files); - - return 0; - -out: - return retval; } - -EXPORT_SYMBOL(flush_old_exec); +EXPORT_SYMBOL(setup_new_exec); /* * Prepare credentials and lock ->cred_guard_mutex. @@ -1357,8 +1383,6 @@ if (retval < 0) goto out; - current->stack_start = current->mm->start_stack; - /* execve succeeded */ current->fs->in_exec = 0; current->in_execve = 0; @@ -1826,15 +1850,15 @@ goto fail_unlock; if (ispipe) { - if (core_limit == 0) { + if (core_limit == 1) { /* * Normally core limits are irrelevant to pipes, since * we're not writing to the file system, but we use - * core_limit of 0 here as a speacial value. Any + * core_limit of 1 here as a special value. Any * non-zero limit gets set to RLIM_INFINITY below, but * a limit of 0 skips the dump. This is a consistent * way to catch recursive crashes. We can still crash - * if the core_pattern binary sets RLIM_CORE = !0 + * if the core_pattern binary sets RLIM_CORE = !1 * but it runs as root, and can do lots of stupid things * Note that we use task_tgid_vnr here to grab the pid * of the process group leader. That way we get the @@ -1842,7 +1866,7 @@ * core_pattern process dies. */ printk(KERN_WARNING - "Process %d(%s) has RLIMIT_CORE set to 0\n", + "Process %d(%s) has RLIMIT_CORE set to 1\n", task_tgid_vnr(current), current->comm); printk(KERN_WARNING "Aborting core\n"); goto fail_unlock; @@ -1891,8 +1915,9 @@ /* * Dont allow local users get cute and trick others to coredump * into their pre-created files: + * Note, this is not relevant for pipes */ - if (inode->i_uid != current_fsuid()) + if (!ispipe && (inode->i_uid != current_fsuid())) goto close_fail; if (!file->f_op) goto close_fail; --- linux-2.6.32.orig/fs/cachefiles/security.c +++ linux-2.6.32/fs/cachefiles/security.c @@ -77,6 +77,8 @@ /* * check the security details of the on-disk cache * - must be called with security override in force + * - must return with a security override in force - even in the case of an + * error */ int cachefiles_determine_cache_security(struct cachefiles_cache *cache, struct dentry *root, @@ -99,6 +101,8 @@ * which create files */ ret = set_create_files_as(new, root->d_inode); if (ret < 0) { + abort_creds(new); + cachefiles_begin_secure(cache, _saved_cred); _leave(" = %d [cfa]", ret); return ret; } --- linux-2.6.32.orig/fs/partitions/efi.c +++ linux-2.6.32/fs/partitions/efi.c @@ -1,7 +1,9 @@ /************************************************************ * EFI GUID Partition Table handling - * Per Intel EFI Specification v1.02 - * http://developer.intel.com/technology/efi/efi.htm + * + * http://www.uefi.org/specs/ + * http://www.intel.com/technology/efi/ + * * efi.[ch] by Matt Domsch * Copyright 2000,2001,2002,2004 Dell Inc. * @@ -92,6 +94,7 @@ * ************************************************************/ #include +#include #include "check.h" #include "efi.h" @@ -141,7 +144,8 @@ { if (!bdev || !bdev->bd_inode) return 0; - return (bdev->bd_inode->i_size >> 9) - 1ULL; + return div_u64(bdev->bd_inode->i_size, + bdev_logical_block_size(bdev)) - 1ULL; } static inline int @@ -188,6 +192,7 @@ read_lba(struct block_device *bdev, u64 lba, u8 * buffer, size_t count) { size_t totalreadcount = 0; + sector_t n = lba * (bdev_logical_block_size(bdev) / 512); if (!bdev || !buffer || lba > last_lba(bdev)) return 0; @@ -195,7 +200,7 @@ while (count) { int copied = 512; Sector sect; - unsigned char *data = read_dev_sector(bdev, lba++, §); + unsigned char *data = read_dev_sector(bdev, n++, §); if (!data) break; if (copied > count) @@ -257,15 +262,16 @@ alloc_read_gpt_header(struct block_device *bdev, u64 lba) { gpt_header *gpt; + unsigned ssz = bdev_logical_block_size(bdev); + if (!bdev) return NULL; - gpt = kzalloc(sizeof (gpt_header), GFP_KERNEL); + gpt = kzalloc(ssz, GFP_KERNEL); if (!gpt) return NULL; - if (read_lba(bdev, lba, (u8 *) gpt, - sizeof (gpt_header)) < sizeof (gpt_header)) { + if (read_lba(bdev, lba, (u8 *) gpt, ssz) < ssz) { kfree(gpt); gpt=NULL; return NULL; @@ -601,6 +607,7 @@ gpt_header *gpt = NULL; gpt_entry *ptes = NULL; u32 i; + unsigned ssz = bdev_logical_block_size(bdev) / 512; if (!find_valid_gpt(bdev, &gpt, &ptes) || !gpt || !ptes) { kfree(gpt); @@ -611,13 +618,14 @@ pr_debug("GUID Partition Table is valid! Yea!\n"); for (i = 0; i < le32_to_cpu(gpt->num_partition_entries) && i < state->limit-1; i++) { + u64 start = le64_to_cpu(ptes[i].starting_lba); + u64 size = le64_to_cpu(ptes[i].ending_lba) - + le64_to_cpu(ptes[i].starting_lba) + 1ULL; + if (!is_pte_valid(&ptes[i], last_lba(bdev))) continue; - put_partition(state, i+1, le64_to_cpu(ptes[i].starting_lba), - (le64_to_cpu(ptes[i].ending_lba) - - le64_to_cpu(ptes[i].starting_lba) + - 1ULL)); + put_partition(state, i+1, start * ssz, size * ssz); /* If this is a RAID volume, tell md */ if (!efi_guidcmp(ptes[i].partition_type_guid, --- linux-2.6.32.orig/fs/partitions/efi.h +++ linux-2.6.32/fs/partitions/efi.h @@ -37,7 +37,6 @@ #define EFI_PMBR_OSTYPE_EFI 0xEF #define EFI_PMBR_OSTYPE_EFI_GPT 0xEE -#define GPT_BLOCK_SIZE 512 #define GPT_HEADER_SIGNATURE 0x5452415020494645ULL #define GPT_HEADER_REVISION_V1 0x00010000 #define GPT_PRIMARY_PARTITION_TABLE_LBA 1 @@ -79,7 +78,12 @@ __le32 num_partition_entries; __le32 sizeof_partition_entry; __le32 partition_entry_array_crc32; - u8 reserved2[GPT_BLOCK_SIZE - 92]; + + /* The rest of the logical block is reserved by UEFI and must be zero. + * EFI standard handles this by: + * + * uint8_t reserved2[ BlockSize - 92 ]; + */ } __attribute__ ((packed)) gpt_header; typedef struct _gpt_entry_attributes { --- linux-2.6.32.orig/fs/partitions/msdos.c +++ linux-2.6.32/fs/partitions/msdos.c @@ -31,14 +31,17 @@ */ #include -#define SYS_IND(p) (get_unaligned(&p->sys_ind)) -#define NR_SECTS(p) ({ __le32 __a = get_unaligned(&p->nr_sects); \ - le32_to_cpu(__a); \ - }) - -#define START_SECT(p) ({ __le32 __a = get_unaligned(&p->start_sect); \ - le32_to_cpu(__a); \ - }) +#define SYS_IND(p) get_unaligned(&p->sys_ind) + +static inline sector_t nr_sects(struct partition *p) +{ + return (sector_t)get_unaligned_le32(&p->nr_sects); +} + +static inline sector_t start_sect(struct partition *p) +{ + return (sector_t)get_unaligned_le32(&p->start_sect); +} static inline int is_extended_partition(struct partition *p) { @@ -104,13 +107,13 @@ static void parse_extended(struct parsed_partitions *state, struct block_device *bdev, - u32 first_sector, u32 first_size) + sector_t first_sector, sector_t first_size) { struct partition *p; Sector sect; unsigned char *data; - u32 this_sector, this_size; - int sector_size = bdev_logical_block_size(bdev) / 512; + sector_t this_sector, this_size; + sector_t sector_size = bdev_logical_block_size(bdev) / 512; int loopct = 0; /* number of links followed without finding a data partition */ int i; @@ -145,14 +148,14 @@ * First process the data partition(s) */ for (i=0; i<4; i++, p++) { - u32 offs, size, next; - if (!NR_SECTS(p) || is_extended_partition(p)) + sector_t offs, size, next; + if (!nr_sects(p) || is_extended_partition(p)) continue; /* Check the 3rd and 4th entries - these sometimes contain random garbage */ - offs = START_SECT(p)*sector_size; - size = NR_SECTS(p)*sector_size; + offs = start_sect(p)*sector_size; + size = nr_sects(p)*sector_size; next = this_sector + offs; if (i >= 2) { if (offs + size > this_size) @@ -179,13 +182,13 @@ */ p -= 4; for (i=0; i<4; i++, p++) - if (NR_SECTS(p) && is_extended_partition(p)) + if (nr_sects(p) && is_extended_partition(p)) break; if (i == 4) goto done; /* nothing left to do */ - this_sector = first_sector + START_SECT(p) * sector_size; - this_size = NR_SECTS(p) * sector_size; + this_sector = first_sector + start_sect(p) * sector_size; + this_size = nr_sects(p) * sector_size; put_dev_sector(sect); } done: @@ -197,7 +200,7 @@ static void parse_solaris_x86(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin) + sector_t offset, sector_t size, int origin) { #ifdef CONFIG_SOLARIS_X86_PARTITION Sector sect; @@ -244,7 +247,7 @@ */ static void parse_bsd(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin, char *flavour, + sector_t offset, sector_t size, int origin, char *flavour, int max_partitions) { Sector sect; @@ -263,7 +266,7 @@ if (le16_to_cpu(l->d_npartitions) < max_partitions) max_partitions = le16_to_cpu(l->d_npartitions); for (p = l->d_partitions; p - l->d_partitions < max_partitions; p++) { - u32 bsd_start, bsd_size; + sector_t bsd_start, bsd_size; if (state->next == state->limit) break; @@ -290,7 +293,7 @@ static void parse_freebsd(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin) + sector_t offset, sector_t size, int origin) { #ifdef CONFIG_BSD_DISKLABEL parse_bsd(state, bdev, offset, size, origin, @@ -300,7 +303,7 @@ static void parse_netbsd(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin) + sector_t offset, sector_t size, int origin) { #ifdef CONFIG_BSD_DISKLABEL parse_bsd(state, bdev, offset, size, origin, @@ -310,7 +313,7 @@ static void parse_openbsd(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin) + sector_t offset, sector_t size, int origin) { #ifdef CONFIG_BSD_DISKLABEL parse_bsd(state, bdev, offset, size, origin, @@ -324,7 +327,7 @@ */ static void parse_unixware(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin) + sector_t offset, sector_t size, int origin) { #ifdef CONFIG_UNIXWARE_DISKLABEL Sector sect; @@ -348,7 +351,8 @@ if (p->s_label != UNIXWARE_FS_UNUSED) put_partition(state, state->next++, - START_SECT(p), NR_SECTS(p)); + le32_to_cpu(p->start_sect), + le32_to_cpu(p->nr_sects)); p++; } put_dev_sector(sect); @@ -363,7 +367,7 @@ */ static void parse_minix(struct parsed_partitions *state, struct block_device *bdev, - u32 offset, u32 size, int origin) + sector_t offset, sector_t size, int origin) { #ifdef CONFIG_MINIX_SUBPARTITION Sector sect; @@ -390,7 +394,7 @@ /* add each partition in use */ if (SYS_IND(p) == MINIX_PARTITION) put_partition(state, state->next++, - START_SECT(p), NR_SECTS(p)); + start_sect(p), nr_sects(p)); } printk(" >\n"); } @@ -401,7 +405,7 @@ static struct { unsigned char id; void (*parse)(struct parsed_partitions *, struct block_device *, - u32, u32, int); + sector_t, sector_t, int); } subtypes[] = { {FREEBSD_PARTITION, parse_freebsd}, {NETBSD_PARTITION, parse_netbsd}, @@ -415,7 +419,7 @@ int msdos_partition(struct parsed_partitions *state, struct block_device *bdev) { - int sector_size = bdev_logical_block_size(bdev) / 512; + sector_t sector_size = bdev_logical_block_size(bdev) / 512; Sector sect; unsigned char *data; struct partition *p; @@ -483,14 +487,21 @@ state->next = 5; for (slot = 1 ; slot <= 4 ; slot++, p++) { - u32 start = START_SECT(p)*sector_size; - u32 size = NR_SECTS(p)*sector_size; + sector_t start = start_sect(p)*sector_size; + sector_t size = nr_sects(p)*sector_size; if (!size) continue; if (is_extended_partition(p)) { - /* prevent someone doing mkfs or mkswap on an - extended partition, but leave room for LILO */ - put_partition(state, slot, start, size == 1 ? 1 : 2); + /* + * prevent someone doing mkfs or mkswap on an + * extended partition, but leave room for LILO + * FIXME: this uses one logical sector for > 512b + * sector, although it may not be enough/proper. + */ + sector_t n = 2; + n = min(size, max(sector_size, n)); + put_partition(state, slot, start, n); + printk(" <"); parse_extended(state, bdev, start, size); printk(" >"); @@ -513,7 +524,7 @@ unsigned char id = SYS_IND(p); int n; - if (!NR_SECTS(p)) + if (!nr_sects(p)) continue; for (n = 0; subtypes[n].parse && id != subtypes[n].id; n++) @@ -521,8 +532,8 @@ if (!subtypes[n].parse) continue; - subtypes[n].parse(state, bdev, START_SECT(p)*sector_size, - NR_SECTS(p)*sector_size, slot); + subtypes[n].parse(state, bdev, start_sect(p)*sector_size, + nr_sects(p)*sector_size, slot); } put_dev_sector(sect); return 1; --- linux-2.6.32.orig/fs/fuse/file.c +++ linux-2.6.32/fs/fuse/file.c @@ -828,6 +828,9 @@ if (!page) break; + if (mapping_writably_mapped(mapping)) + flush_dcache_page(page); + pagefault_disable(); tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes); pagefault_enable(); --- linux-2.6.32.orig/fs/debugfs/inode.c +++ linux-2.6.32/fs/debugfs/inode.c @@ -32,7 +32,9 @@ static int debugfs_mount_count; static bool debugfs_registered; -static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t dev) +static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t dev, + void *data, const struct file_operations *fops) + { struct inode *inode = new_inode(sb); @@ -44,14 +46,18 @@ init_special_inode(inode, mode, dev); break; case S_IFREG: - inode->i_fop = &debugfs_file_operations; + inode->i_fop = fops ? fops : &debugfs_file_operations; + inode->i_private = data; break; case S_IFLNK: inode->i_op = &debugfs_link_operations; + inode->i_fop = fops; + inode->i_private = data; break; case S_IFDIR: inode->i_op = &simple_dir_inode_operations; - inode->i_fop = &simple_dir_operations; + inode->i_fop = fops ? fops : &simple_dir_operations; + inode->i_private = data; /* directory inodes start off with i_nlink == 2 * (for "." entry) */ @@ -64,7 +70,8 @@ /* SMP-safe */ static int debugfs_mknod(struct inode *dir, struct dentry *dentry, - int mode, dev_t dev) + int mode, dev_t dev, void *data, + const struct file_operations *fops) { struct inode *inode; int error = -EPERM; @@ -72,7 +79,7 @@ if (dentry->d_inode) return -EEXIST; - inode = debugfs_get_inode(dir->i_sb, mode, dev); + inode = debugfs_get_inode(dir->i_sb, mode, dev, data, fops); if (inode) { d_instantiate(dentry, inode); dget(dentry); @@ -81,12 +88,13 @@ return error; } -static int debugfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) +static int debugfs_mkdir(struct inode *dir, struct dentry *dentry, int mode, + void *data, const struct file_operations *fops) { int res; mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR; - res = debugfs_mknod(dir, dentry, mode, 0); + res = debugfs_mknod(dir, dentry, mode, 0, data, fops); if (!res) { inc_nlink(dir); fsnotify_mkdir(dir, dentry); @@ -94,18 +102,20 @@ return res; } -static int debugfs_link(struct inode *dir, struct dentry *dentry, int mode) +static int debugfs_link(struct inode *dir, struct dentry *dentry, int mode, + void *data, const struct file_operations *fops) { mode = (mode & S_IALLUGO) | S_IFLNK; - return debugfs_mknod(dir, dentry, mode, 0); + return debugfs_mknod(dir, dentry, mode, 0, data, fops); } -static int debugfs_create(struct inode *dir, struct dentry *dentry, int mode) +static int debugfs_create(struct inode *dir, struct dentry *dentry, int mode, + void *data, const struct file_operations *fops) { int res; mode = (mode & S_IALLUGO) | S_IFREG; - res = debugfs_mknod(dir, dentry, mode, 0); + res = debugfs_mknod(dir, dentry, mode, 0, data, fops); if (!res) fsnotify_create(dir, dentry); return res; @@ -139,7 +149,9 @@ static int debugfs_create_by_name(const char *name, mode_t mode, struct dentry *parent, - struct dentry **dentry) + struct dentry **dentry, + void *data, + const struct file_operations *fops) { int error = 0; @@ -164,13 +176,16 @@ if (!IS_ERR(*dentry)) { switch (mode & S_IFMT) { case S_IFDIR: - error = debugfs_mkdir(parent->d_inode, *dentry, mode); + error = debugfs_mkdir(parent->d_inode, *dentry, mode, + data, fops); break; case S_IFLNK: - error = debugfs_link(parent->d_inode, *dentry, mode); + error = debugfs_link(parent->d_inode, *dentry, mode, + data, fops); break; default: - error = debugfs_create(parent->d_inode, *dentry, mode); + error = debugfs_create(parent->d_inode, *dentry, mode, + data, fops); break; } dput(*dentry); @@ -221,19 +236,13 @@ if (error) goto exit; - error = debugfs_create_by_name(name, mode, parent, &dentry); + error = debugfs_create_by_name(name, mode, parent, &dentry, + data, fops); if (error) { dentry = NULL; simple_release_fs(&debugfs_mount, &debugfs_mount_count); goto exit; } - - if (dentry->d_inode) { - if (data) - dentry->d_inode->i_private = data; - if (fops) - dentry->d_inode->i_fop = fops; - } exit: return dentry; } --- linux-2.6.32.orig/fs/exofs/inode.c +++ linux-2.6.32/fs/exofs/inode.c @@ -731,13 +731,28 @@ fsdata); } +static int exofs_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) +{ + struct inode *inode = mapping->host; + /* According to comment in simple_write_end i_mutex is held */ + loff_t i_size = inode->i_size; + int ret; + + ret = simple_write_end(file, mapping,pos, len, copied, page, fsdata); + if (i_size != inode->i_size) + mark_inode_dirty(inode); + return ret; +} + const struct address_space_operations exofs_aops = { .readpage = exofs_readpage, .readpages = exofs_readpages, .writepage = exofs_writepage, .writepages = exofs_writepages, .write_begin = exofs_write_begin_export, - .write_end = simple_write_end, + .write_end = exofs_write_end, }; /****************************************************************************** --- linux-2.6.32.orig/fs/ecryptfs/super.c +++ linux-2.6.32/fs/ecryptfs/super.c @@ -85,7 +85,6 @@ if (lower_dentry->d_inode) { fput(inode_info->lower_file); inode_info->lower_file = NULL; - d_drop(lower_dentry); } } ecryptfs_destroy_crypt_stat(&inode_info->crypt_stat); --- linux-2.6.32.orig/fs/ecryptfs/inode.c +++ linux-2.6.32/fs/ecryptfs/inode.c @@ -638,38 +638,17 @@ return rc; } -static int -ecryptfs_readlink(struct dentry *dentry, char __user *buf, int bufsiz) +static int ecryptfs_readlink_lower(struct dentry *dentry, char **buf, + size_t *bufsiz) { + struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); char *lower_buf; - size_t lower_bufsiz; - struct dentry *lower_dentry; - struct ecryptfs_mount_crypt_stat *mount_crypt_stat; - char *plaintext_name; - size_t plaintext_name_size; + size_t lower_bufsiz = PATH_MAX; mm_segment_t old_fs; int rc; - lower_dentry = ecryptfs_dentry_to_lower(dentry); - if (!lower_dentry->d_inode->i_op->readlink) { - rc = -EINVAL; - goto out; - } - mount_crypt_stat = &ecryptfs_superblock_to_private( - dentry->d_sb)->mount_crypt_stat; - /* - * If the lower filename is encrypted, it will result in a significantly - * longer name. If needed, truncate the name after decode and decrypt. - */ - if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) - lower_bufsiz = PATH_MAX; - else - lower_bufsiz = bufsiz; - /* Released in this function */ lower_buf = kmalloc(lower_bufsiz, GFP_KERNEL); - if (lower_buf == NULL) { - printk(KERN_ERR "%s: Out of memory whilst attempting to " - "kmalloc [%zd] bytes\n", __func__, lower_bufsiz); + if (!lower_buf) { rc = -ENOMEM; goto out; } @@ -679,29 +658,31 @@ (char __user *)lower_buf, lower_bufsiz); set_fs(old_fs); - if (rc >= 0) { - rc = ecryptfs_decode_and_decrypt_filename(&plaintext_name, - &plaintext_name_size, - dentry, lower_buf, - rc); - if (rc) { - printk(KERN_ERR "%s: Error attempting to decode and " - "decrypt filename; rc = [%d]\n", __func__, - rc); - goto out_free_lower_buf; - } - /* Check for bufsiz <= 0 done in sys_readlinkat() */ - rc = copy_to_user(buf, plaintext_name, - min((size_t) bufsiz, plaintext_name_size)); - if (rc) - rc = -EFAULT; - else - rc = plaintext_name_size; - kfree(plaintext_name); - fsstack_copy_attr_atime(dentry->d_inode, lower_dentry->d_inode); - } -out_free_lower_buf: + if (rc < 0) + goto out; + lower_bufsiz = rc; + rc = ecryptfs_decode_and_decrypt_filename(buf, bufsiz, dentry, + lower_buf, lower_bufsiz); +out: kfree(lower_buf); + return rc; +} + +static int +ecryptfs_readlink(struct dentry *dentry, char __user *buf, int bufsiz) +{ + char *kbuf; + size_t kbufsiz, copied; + int rc; + + rc = ecryptfs_readlink_lower(dentry, &kbuf, &kbufsiz); + if (rc) + goto out; + copied = min_t(size_t, bufsiz, kbufsiz); + rc = copy_to_user(buf, kbuf, copied) ? -EFAULT : copied; + kfree(kbuf); + fsstack_copy_attr_atime(dentry->d_inode, + ecryptfs_dentry_to_lower(dentry)->d_inode); out: return rc; } @@ -971,6 +952,43 @@ return rc; } +int ecryptfs_getattr_link(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + struct ecryptfs_mount_crypt_stat *mount_crypt_stat; + int rc = 0; + + mount_crypt_stat = &ecryptfs_superblock_to_private( + dentry->d_sb)->mount_crypt_stat; + generic_fillattr(dentry->d_inode, stat); + if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) { + char *target; + size_t targetsiz; + + rc = ecryptfs_readlink_lower(dentry, &target, &targetsiz); + if (!rc) { + kfree(target); + stat->size = targetsiz; + } + } + return rc; +} + +int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + struct kstat lower_stat; + int rc; + + rc = vfs_getattr(ecryptfs_dentry_to_lower_mnt(dentry), + ecryptfs_dentry_to_lower(dentry), &lower_stat); + if (!rc) { + generic_fillattr(dentry->d_inode, stat); + stat->blocks = lower_stat.blocks; + } + return rc; +} + int ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags) @@ -980,7 +998,7 @@ lower_dentry = ecryptfs_dentry_to_lower(dentry); if (!lower_dentry->d_inode->i_op->setxattr) { - rc = -ENOSYS; + rc = -EOPNOTSUPP; goto out; } mutex_lock(&lower_dentry->d_inode->i_mutex); @@ -998,7 +1016,7 @@ int rc = 0; if (!lower_dentry->d_inode->i_op->getxattr) { - rc = -ENOSYS; + rc = -EOPNOTSUPP; goto out; } mutex_lock(&lower_dentry->d_inode->i_mutex); @@ -1025,7 +1043,7 @@ lower_dentry = ecryptfs_dentry_to_lower(dentry); if (!lower_dentry->d_inode->i_op->listxattr) { - rc = -ENOSYS; + rc = -EOPNOTSUPP; goto out; } mutex_lock(&lower_dentry->d_inode->i_mutex); @@ -1042,7 +1060,7 @@ lower_dentry = ecryptfs_dentry_to_lower(dentry); if (!lower_dentry->d_inode->i_op->removexattr) { - rc = -ENOSYS; + rc = -EOPNOTSUPP; goto out; } mutex_lock(&lower_dentry->d_inode->i_mutex); @@ -1073,6 +1091,7 @@ .put_link = ecryptfs_put_link, .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, + .getattr = ecryptfs_getattr_link, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .listxattr = ecryptfs_listxattr, @@ -1100,6 +1119,7 @@ const struct inode_operations ecryptfs_main_iops = { .permission = ecryptfs_permission, .setattr = ecryptfs_setattr, + .getattr = ecryptfs_getattr, .setxattr = ecryptfs_setxattr, .getxattr = ecryptfs_getxattr, .listxattr = ecryptfs_listxattr, --- linux-2.6.32.orig/fs/ecryptfs/crypto.c +++ linux-2.6.32/fs/ecryptfs/crypto.c @@ -1748,7 +1748,7 @@ char *cipher_name, size_t *key_size) { char dummy_key[ECRYPTFS_MAX_KEY_BYTES]; - char *full_alg_name; + char *full_alg_name = NULL; int rc; *key_tfm = NULL; @@ -1763,7 +1763,6 @@ if (rc) goto out; *key_tfm = crypto_alloc_blkcipher(full_alg_name, 0, CRYPTO_ALG_ASYNC); - kfree(full_alg_name); if (IS_ERR(*key_tfm)) { rc = PTR_ERR(*key_tfm); printk(KERN_ERR "Unable to allocate crypto cipher with name " @@ -1786,6 +1785,7 @@ goto out; } out: + kfree(full_alg_name); return rc; } --- linux-2.6.32.orig/fs/ecryptfs/messaging.c +++ linux-2.6.32/fs/ecryptfs/messaging.c @@ -30,9 +30,9 @@ static struct hlist_head *ecryptfs_daemon_hash; struct mutex ecryptfs_daemon_hash_mux; -static int ecryptfs_hash_buckets; +static int ecryptfs_hash_bits; #define ecryptfs_uid_hash(uid) \ - hash_long((unsigned long)uid, ecryptfs_hash_buckets) + hash_long((unsigned long)uid, ecryptfs_hash_bits) static u32 ecryptfs_msg_counter; static struct ecryptfs_msg_ctx *ecryptfs_msg_ctx_arr; @@ -485,18 +485,19 @@ } mutex_init(&ecryptfs_daemon_hash_mux); mutex_lock(&ecryptfs_daemon_hash_mux); - ecryptfs_hash_buckets = 1; - while (ecryptfs_number_of_users >> ecryptfs_hash_buckets) - ecryptfs_hash_buckets++; + ecryptfs_hash_bits = 1; + while (ecryptfs_number_of_users >> ecryptfs_hash_bits) + ecryptfs_hash_bits++; ecryptfs_daemon_hash = kmalloc((sizeof(struct hlist_head) - * ecryptfs_hash_buckets), GFP_KERNEL); + * (1 << ecryptfs_hash_bits)), + GFP_KERNEL); if (!ecryptfs_daemon_hash) { rc = -ENOMEM; printk(KERN_ERR "%s: Failed to allocate memory\n", __func__); mutex_unlock(&ecryptfs_daemon_hash_mux); goto out; } - for (i = 0; i < ecryptfs_hash_buckets; i++) + for (i = 0; i < (1 << ecryptfs_hash_bits); i++) INIT_HLIST_HEAD(&ecryptfs_daemon_hash[i]); mutex_unlock(&ecryptfs_daemon_hash_mux); ecryptfs_msg_ctx_arr = kmalloc((sizeof(struct ecryptfs_msg_ctx) @@ -553,7 +554,7 @@ int i; mutex_lock(&ecryptfs_daemon_hash_mux); - for (i = 0; i < ecryptfs_hash_buckets; i++) { + for (i = 0; i < (1 << ecryptfs_hash_bits); i++) { int rc; hlist_for_each_entry(daemon, elem, --- linux-2.6.32.orig/fs/ecryptfs/file.c +++ linux-2.6.32/fs/ecryptfs/file.c @@ -191,13 +191,6 @@ | ECRYPTFS_ENCRYPTED); } mutex_unlock(&crypt_stat->cs_mutex); - if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY) - && !(file->f_flags & O_RDONLY)) { - rc = -EPERM; - printk(KERN_WARNING "%s: Lower persistent file is RO; eCryptfs " - "file must hence be opened RO\n", __func__); - goto out; - } if (!ecryptfs_inode_to_private(inode)->lower_file) { rc = ecryptfs_init_persistent_file(ecryptfs_dentry); if (rc) { @@ -208,6 +201,13 @@ goto out; } } + if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY) + && !(file->f_flags & O_RDONLY)) { + rc = -EPERM; + printk(KERN_WARNING "%s: Lower persistent file is RO; eCryptfs " + "file must hence be opened RO\n", __func__); + goto out; + } ecryptfs_set_file_lower( file, ecryptfs_inode_to_private(inode)->lower_file); if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) { --- linux-2.6.32.orig/fs/nfsd/nfs4state.c +++ linux-2.6.32/fs/nfsd/nfs4state.c @@ -2002,7 +2002,9 @@ { if (share_access & NFS4_SHARE_ACCESS_WRITE) { drop_file_write_access(filp); + spin_lock(&filp->f_lock); filp->f_mode = (filp->f_mode | FMODE_READ) & ~FMODE_WRITE; + spin_unlock(&filp->f_lock); } } --- linux-2.6.32.orig/fs/nfsd/nfs4xdr.c +++ linux-2.6.32/fs/nfsd/nfs4xdr.c @@ -168,10 +168,10 @@ argp->p = page_address(argp->pagelist[0]); argp->pagelist++; if (argp->pagelen < PAGE_SIZE) { - argp->end = p + (argp->pagelen>>2); + argp->end = argp->p + (argp->pagelen>>2); argp->pagelen = 0; } else { - argp->end = p + (PAGE_SIZE>>2); + argp->end = argp->p + (PAGE_SIZE>>2); argp->pagelen -= PAGE_SIZE; } memcpy(((char*)p)+avail, argp->p, (nbytes - avail)); @@ -1433,10 +1433,10 @@ argp->p = page_address(argp->pagelist[0]); argp->pagelist++; if (argp->pagelen < PAGE_SIZE) { - argp->end = p + (argp->pagelen>>2); + argp->end = argp->p + (argp->pagelen>>2); argp->pagelen = 0; } else { - argp->end = p + (PAGE_SIZE>>2); + argp->end = argp->p + (PAGE_SIZE>>2); argp->pagelen -= PAGE_SIZE; } } @@ -2129,9 +2129,15 @@ * and this is the root of a cross-mounted filesystem. */ if (ignore_crossmnt == 0 && - exp->ex_path.mnt->mnt_root->d_inode == dentry->d_inode) { - err = vfs_getattr(exp->ex_path.mnt->mnt_parent, - exp->ex_path.mnt->mnt_mountpoint, &stat); + dentry == exp->ex_path.mnt->mnt_root) { + struct path path = exp->ex_path; + path_get(&path); + while (follow_up(&path)) { + if (path.dentry != path.mnt->mnt_root) + break; + } + err = vfs_getattr(path.mnt, path.dentry, &stat); + path_put(&path); if (err) goto out_nfserr; } --- linux-2.6.32.orig/fs/nfsd/nfs4acl.c +++ linux-2.6.32/fs/nfsd/nfs4acl.c @@ -389,7 +389,7 @@ sort_pacl_range(pacl, 1, i-1); BUG_ON(pacl->a_entries[i].e_tag != ACL_GROUP_OBJ); - j = i++; + j = ++i; while (pacl->a_entries[j].e_tag == ACL_GROUP) j++; sort_pacl_range(pacl, i, j-1); --- linux-2.6.32.orig/fs/nfsd/vfs.c +++ linux-2.6.32/fs/nfsd/vfs.c @@ -774,12 +774,9 @@ int (*fsync) (struct file *, struct dentry *, int); int err; - err = filemap_fdatawrite(inode->i_mapping); + err = filemap_write_and_wait(inode->i_mapping); if (err == 0 && fop && (fsync = fop->fsync)) err = fsync(filp, dp, 0); - if (err == 0) - err = filemap_fdatawait(inode->i_mapping); - return err; } --- linux-2.6.32.orig/fs/sysfs/inode.c +++ linux-2.6.32/fs/sysfs/inode.c @@ -94,30 +94,29 @@ if (!sd_attrs) return -ENOMEM; sd->s_iattr = sd_attrs; - } else { - /* attributes were changed at least once in past */ - iattrs = &sd_attrs->ia_iattr; - - if (ia_valid & ATTR_UID) - iattrs->ia_uid = iattr->ia_uid; - if (ia_valid & ATTR_GID) - iattrs->ia_gid = iattr->ia_gid; - if (ia_valid & ATTR_ATIME) - iattrs->ia_atime = timespec_trunc(iattr->ia_atime, - inode->i_sb->s_time_gran); - if (ia_valid & ATTR_MTIME) - iattrs->ia_mtime = timespec_trunc(iattr->ia_mtime, - inode->i_sb->s_time_gran); - if (ia_valid & ATTR_CTIME) - iattrs->ia_ctime = timespec_trunc(iattr->ia_ctime, - inode->i_sb->s_time_gran); - if (ia_valid & ATTR_MODE) { - umode_t mode = iattr->ia_mode; - - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) - mode &= ~S_ISGID; - iattrs->ia_mode = sd->s_mode = mode; - } + } + /* attributes were changed at least once in past */ + iattrs = &sd_attrs->ia_iattr; + + if (ia_valid & ATTR_UID) + iattrs->ia_uid = iattr->ia_uid; + if (ia_valid & ATTR_GID) + iattrs->ia_gid = iattr->ia_gid; + if (ia_valid & ATTR_ATIME) + iattrs->ia_atime = timespec_trunc(iattr->ia_atime, + inode->i_sb->s_time_gran); + if (ia_valid & ATTR_MTIME) + iattrs->ia_mtime = timespec_trunc(iattr->ia_mtime, + inode->i_sb->s_time_gran); + if (ia_valid & ATTR_CTIME) + iattrs->ia_ctime = timespec_trunc(iattr->ia_ctime, + inode->i_sb->s_time_gran); + if (ia_valid & ATTR_MODE) { + umode_t mode = iattr->ia_mode; + + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) + mode &= ~S_ISGID; + iattrs->ia_mode = sd->s_mode = mode; } return error; } --- linux-2.6.32.orig/fs/nilfs2/super.c +++ linux-2.6.32/fs/nilfs2/super.c @@ -781,6 +781,7 @@ sb->s_export_op = &nilfs_export_ops; sb->s_root = NULL; sb->s_time_gran = 1; + sb->s_bdi = nilfs->ns_bdi; if (!nilfs_loaded(nilfs)) { err = load_nilfs(nilfs, sbi); --- linux-2.6.32.orig/fs/9p/vfs_file.c +++ linux-2.6.32/fs/9p/vfs_file.c @@ -114,7 +114,7 @@ P9_DPRINTK(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl); /* No mandatory locks */ - if (__mandatory_lock(inode)) + if (__mandatory_lock(inode) && fl->fl_type != F_UNLCK) return -ENOLCK; if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) { --- linux-2.6.32.orig/fs/9p/vfs_super.c +++ linux-2.6.32/fs/9p/vfs_super.c @@ -188,7 +188,8 @@ P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s); - v9fs_dentry_release(s->s_root); /* clunk root */ + if (s->s_root) + v9fs_dentry_release(s->s_root); /* clunk root */ kill_anon_super(s); --- linux-2.6.32.orig/fs/bfs/inode.c +++ linux-2.6.32/fs/bfs/inode.c @@ -353,35 +353,35 @@ struct inode *inode; unsigned i, imap_len; struct bfs_sb_info *info; - long ret = -EINVAL; + int ret = -EINVAL; unsigned long i_sblock, i_eblock, i_eoff, s_size; info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) return -ENOMEM; + mutex_init(&info->bfs_lock); s->s_fs_info = info; sb_set_blocksize(s, BFS_BSIZE); - bh = sb_bread(s, 0); - if(!bh) + info->si_sbh = sb_bread(s, 0); + if (!info->si_sbh) goto out; - bfs_sb = (struct bfs_super_block *)bh->b_data; + bfs_sb = (struct bfs_super_block *)info->si_sbh->b_data; if (le32_to_cpu(bfs_sb->s_magic) != BFS_MAGIC) { if (!silent) printf("No BFS filesystem on %s (magic=%08x)\n", s->s_id, le32_to_cpu(bfs_sb->s_magic)); - goto out; + goto out1; } if (BFS_UNCLEAN(bfs_sb, s) && !silent) printf("%s is unclean, continuing\n", s->s_id); s->s_magic = BFS_MAGIC; - info->si_sbh = bh; if (le32_to_cpu(bfs_sb->s_start) > le32_to_cpu(bfs_sb->s_end)) { printf("Superblock is corrupted\n"); - goto out; + goto out1; } info->si_lasti = (le32_to_cpu(bfs_sb->s_start) - BFS_BSIZE) / @@ -390,7 +390,7 @@ imap_len = (info->si_lasti / 8) + 1; info->si_imap = kzalloc(imap_len, GFP_KERNEL); if (!info->si_imap) - goto out; + goto out1; for (i = 0; i < BFS_ROOT_INO; i++) set_bit(i, info->si_imap); @@ -398,15 +398,13 @@ inode = bfs_iget(s, BFS_ROOT_INO); if (IS_ERR(inode)) { ret = PTR_ERR(inode); - kfree(info->si_imap); - goto out; + goto out2; } s->s_root = d_alloc_root(inode); if (!s->s_root) { iput(inode); ret = -ENOMEM; - kfree(info->si_imap); - goto out; + goto out2; } info->si_blocks = (le32_to_cpu(bfs_sb->s_end) + 1) >> BFS_BSIZE_BITS; @@ -419,10 +417,8 @@ bh = sb_bread(s, info->si_blocks - 1); if (!bh) { printf("Last block not available: %lu\n", info->si_blocks - 1); - iput(inode); ret = -EIO; - kfree(info->si_imap); - goto out; + goto out3; } brelse(bh); @@ -459,11 +455,8 @@ printf("Inode 0x%08x corrupted\n", i); brelse(bh); - s->s_root = NULL; - kfree(info->si_imap); - kfree(info); - s->s_fs_info = NULL; - return -EIO; + ret = -EIO; + goto out3; } if (!di->i_ino) { @@ -483,11 +476,17 @@ s->s_dirt = 1; } dump_imap("read_super", s); - mutex_init(&info->bfs_lock); return 0; +out3: + dput(s->s_root); + s->s_root = NULL; +out2: + kfree(info->si_imap); +out1: + brelse(info->si_sbh); out: - brelse(bh); + mutex_destroy(&info->bfs_lock); kfree(info); s->s_fs_info = NULL; return ret; --- linux-2.6.32.orig/fs/jbd2/commit.c +++ linux-2.6.32/fs/jbd2/commit.c @@ -259,6 +259,7 @@ ret = err; spin_lock(&journal->j_list_lock); J_ASSERT(jinode->i_transaction == commit_transaction); + commit_transaction->t_flushed_data_blocks = 1; jinode->i_flags &= ~JI_COMMIT_RUNNING; wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING); } @@ -636,6 +637,10 @@ JBUFFER_TRACE(jh, "ph3: write metadata"); flags = jbd2_journal_write_metadata_buffer(commit_transaction, jh, &new_jh, blocknr); + if (flags < 0) { + jbd2_journal_abort(journal, flags); + continue; + } set_bit(BH_JWrite, &jh2bh(new_jh)->b_state); wbuf[bufs++] = jh2bh(new_jh); @@ -704,8 +709,17 @@ } } - /* Done it all: now write the commit record asynchronously. */ + /* + * If the journal is not located on the file system device, + * then we must flush the file system device before we issue + * the commit record + */ + if (commit_transaction->t_flushed_data_blocks && + (journal->j_fs_dev != journal->j_dev) && + (journal->j_flags & JBD2_BARRIER)) + blkdev_issue_flush(journal->j_fs_dev, NULL); + /* Done it all: now write the commit record asynchronously. */ if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) { err = journal_submit_commit_record(journal, commit_transaction, @@ -716,13 +730,6 @@ blkdev_issue_flush(journal->j_dev, NULL); } - /* - * This is the right place to wait for data buffers both for ASYNC - * and !ASYNC commit. If commit is ASYNC, we need to wait only after - * the commit block went to disk (which happens above). If commit is - * SYNC, we need to wait for data buffers before we start writing - * commit block, which happens below in such setting. - */ err = journal_finish_inode_data_buffers(journal, commit_transaction); if (err) { printk(KERN_WARNING --- linux-2.6.32.orig/fs/jbd2/checkpoint.c +++ linux-2.6.32/fs/jbd2/checkpoint.c @@ -22,6 +22,7 @@ #include #include #include +#include #include /* @@ -515,6 +516,20 @@ journal->j_tail_sequence = first_tid; journal->j_tail = blocknr; spin_unlock(&journal->j_state_lock); + + /* + * If there is an external journal, we need to make sure that + * any data blocks that were recently written out --- perhaps + * by jbd2_log_do_checkpoint() --- are flushed out before we + * drop the transactions from the external journal. It's + * unlikely this will be necessary, especially with a + * appropriately sized journal, but we need this to guarantee + * correctness. Fortunately jbd2_cleanup_journal_tail() + * doesn't get called all that often. + */ + if ((journal->j_fs_dev != journal->j_dev) && + (journal->j_flags & JBD2_BARRIER)) + blkdev_issue_flush(journal->j_fs_dev, NULL); if (!(journal->j_flags & JBD2_ABORT)) jbd2_journal_update_superblock(journal, 1); return 0; --- linux-2.6.32.orig/fs/jbd2/journal.c +++ linux-2.6.32/fs/jbd2/journal.c @@ -78,6 +78,7 @@ EXPORT_SYMBOL(jbd2_journal_ack_err); EXPORT_SYMBOL(jbd2_journal_clear_err); EXPORT_SYMBOL(jbd2_log_wait_commit); +EXPORT_SYMBOL(jbd2_log_start_commit); EXPORT_SYMBOL(jbd2_journal_start_commit); EXPORT_SYMBOL(jbd2_journal_force_commit_nested); EXPORT_SYMBOL(jbd2_journal_wipe); @@ -358,6 +359,10 @@ jbd_unlock_bh_state(bh_in); tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS); + if (!tmp) { + jbd2_journal_put_journal_head(new_jh); + return -ENOMEM; + } jbd_lock_bh_state(bh_in); if (jh_in->b_frozen_data) { jbd2_free(tmp, bh_in->b_size); @@ -1248,6 +1253,13 @@ if (jbd2_journal_recover(journal)) goto recovery_error; + if (journal->j_failed_commit) { + printk(KERN_ERR "JBD2: journal transaction %u on %s " + "is corrupt.\n", journal->j_failed_commit, + journal->j_devname); + return -EIO; + } + /* OK, we've finished with the dynamic journal bits: * reinitialise the dynamic contents of the superblock in memory * and reset them on disk. */ @@ -2103,7 +2115,8 @@ { jbd2_debugfs_dir = debugfs_create_dir("jbd2", NULL); if (jbd2_debugfs_dir) - jbd2_debug = debugfs_create_u8(JBD2_DEBUG_NAME, S_IRUGO, + jbd2_debug = debugfs_create_u8(JBD2_DEBUG_NAME, + S_IRUGO | S_IWUSR, jbd2_debugfs_dir, &jbd2_journal_enable_debug); } --- linux-2.6.32.orig/fs/udf/super.c +++ linux-2.6.32/fs/udf/super.c @@ -1078,21 +1078,39 @@ return 0; } -static int udf_load_vat(struct super_block *sb, int p_index, int type1_index) +static void udf_find_vat_block(struct super_block *sb, int p_index, + int type1_index, sector_t start_block) { struct udf_sb_info *sbi = UDF_SB(sb); struct udf_part_map *map = &sbi->s_partmaps[p_index]; + sector_t vat_block; struct kernel_lb_addr ino; + + /* + * VAT file entry is in the last recorded block. Some broken disks have + * it a few blocks before so try a bit harder... + */ + ino.partitionReferenceNum = type1_index; + for (vat_block = start_block; + vat_block >= map->s_partition_root && + vat_block >= start_block - 3 && + !sbi->s_vat_inode; vat_block--) { + ino.logicalBlockNum = vat_block - map->s_partition_root; + sbi->s_vat_inode = udf_iget(sb, &ino); + } +} + +static int udf_load_vat(struct super_block *sb, int p_index, int type1_index) +{ + struct udf_sb_info *sbi = UDF_SB(sb); + struct udf_part_map *map = &sbi->s_partmaps[p_index]; struct buffer_head *bh = NULL; struct udf_inode_info *vati; uint32_t pos; struct virtualAllocationTable20 *vat20; sector_t blocks = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits; - /* VAT file entry is in the last recorded block */ - ino.partitionReferenceNum = type1_index; - ino.logicalBlockNum = sbi->s_last_block - map->s_partition_root; - sbi->s_vat_inode = udf_iget(sb, &ino); + udf_find_vat_block(sb, p_index, type1_index, sbi->s_last_block); if (!sbi->s_vat_inode && sbi->s_last_block != blocks - 1) { printk(KERN_NOTICE "UDF-fs: Failed to read VAT inode from the" @@ -1100,9 +1118,7 @@ "block of the device (%lu).\n", (unsigned long)sbi->s_last_block, (unsigned long)blocks - 1); - ino.partitionReferenceNum = type1_index; - ino.logicalBlockNum = blocks - 1 - map->s_partition_root; - sbi->s_vat_inode = udf_iget(sb, &ino); + udf_find_vat_block(sb, p_index, type1_index, blocks - 1); } if (!sbi->s_vat_inode) return 1; --- linux-2.6.32.orig/fs/jfs/resize.c +++ linux-2.6.32/fs/jfs/resize.c @@ -81,6 +81,7 @@ struct inode *iplist[1]; struct jfs_superblock *j_sb, *j_sb2; uint old_agsize; + int agsizechanged = 0; struct buffer_head *bh, *bh2; /* If the volume hasn't grown, get out now */ @@ -333,6 +334,9 @@ */ if ((rc = dbExtendFS(ipbmap, XAddress, nblocks))) goto error_out; + + agsizechanged |= (bmp->db_agsize != old_agsize); + /* * the map now has extended to cover additional nblocks: * dn_mapsize = oldMapsize + nblocks; @@ -432,7 +436,7 @@ * will correctly identify the new ag); */ /* if new AG size the same as old AG size, done! */ - if (bmp->db_agsize != old_agsize) { + if (agsizechanged) { if ((rc = diExtendFS(ipimap, ipbmap))) goto error_out; --- linux-2.6.32.orig/fs/ocfs2/buffer_head_io.c +++ linux-2.6.32/fs/ocfs2/buffer_head_io.c @@ -407,6 +407,7 @@ struct buffer_head *bh) { int ret = 0; + struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; mlog_entry_void(); @@ -426,6 +427,7 @@ get_bh(bh); /* for end_buffer_write_sync() */ bh->b_end_io = end_buffer_write_sync; + ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &di->i_check); submit_bh(WRITE, bh); wait_on_buffer(bh); --- linux-2.6.32.orig/fs/ocfs2/suballoc.c +++ linux-2.6.32/fs/ocfs2/suballoc.c @@ -152,7 +152,7 @@ #define do_error(fmt, ...) \ do{ \ - if (clean_error) \ + if (resize) \ mlog(ML_ERROR, fmt "\n", ##__VA_ARGS__); \ else \ ocfs2_error(sb, fmt, ##__VA_ARGS__); \ @@ -160,7 +160,7 @@ static int ocfs2_validate_gd_self(struct super_block *sb, struct buffer_head *bh, - int clean_error) + int resize) { struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data; @@ -211,7 +211,7 @@ static int ocfs2_validate_gd_parent(struct super_block *sb, struct ocfs2_dinode *di, struct buffer_head *bh, - int clean_error) + int resize) { unsigned int max_bits; struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data; @@ -233,8 +233,11 @@ return -EINVAL; } - if (le16_to_cpu(gd->bg_chain) >= - le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) { + /* In resize, we may meet the case bg_chain == cl_next_free_rec. */ + if ((le16_to_cpu(gd->bg_chain) > + le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) || + ((le16_to_cpu(gd->bg_chain) == + le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) && !resize)) { do_error("Group descriptor #%llu has bad chain %u", (unsigned long long)bh->b_blocknr, le16_to_cpu(gd->bg_chain)); --- linux-2.6.32.orig/fs/ocfs2/inode.c +++ linux-2.6.32/fs/ocfs2/inode.c @@ -559,6 +559,7 @@ handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS); if (IS_ERR(handle)) { status = PTR_ERR(handle); + handle = NULL; mlog_errno(status); goto out; } --- linux-2.6.32.orig/fs/ocfs2/refcounttree.c +++ linux-2.6.32/fs/ocfs2/refcounttree.c @@ -3995,6 +3995,9 @@ di->i_attr = s_di->i_attr; if (preserve) { + t_inode->i_uid = s_inode->i_uid; + t_inode->i_gid = s_inode->i_gid; + t_inode->i_mode = s_inode->i_mode; di->i_uid = s_di->i_uid; di->i_gid = s_di->i_gid; di->i_mode = s_di->i_mode; --- linux-2.6.32.orig/fs/ocfs2/acl.c +++ linux-2.6.32/fs/ocfs2/acl.c @@ -30,6 +30,8 @@ #include "alloc.h" #include "dlmglue.h" #include "file.h" +#include "inode.h" +#include "journal.h" #include "ocfs2_fs.h" #include "xattr.h" @@ -170,6 +172,60 @@ } /* + * Helper function to set i_mode in memory and disk. Some call paths + * will not have di_bh or a journal handle to pass, in which case it + * will create it's own. + */ +static int ocfs2_acl_set_mode(struct inode *inode, struct buffer_head *di_bh, + handle_t *handle, umode_t new_mode) +{ + int ret, commit_handle = 0; + struct ocfs2_dinode *di; + + if (di_bh == NULL) { + ret = ocfs2_read_inode_block(inode, &di_bh); + if (ret) { + mlog_errno(ret); + goto out; + } + } else + get_bh(di_bh); + + if (handle == NULL) { + handle = ocfs2_start_trans(OCFS2_SB(inode->i_sb), + OCFS2_INODE_UPDATE_CREDITS); + if (IS_ERR(handle)) { + ret = PTR_ERR(handle); + mlog_errno(ret); + goto out_brelse; + } + + commit_handle = 1; + } + + di = (struct ocfs2_dinode *)di_bh->b_data; + ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, + OCFS2_JOURNAL_ACCESS_WRITE); + if (ret) { + mlog_errno(ret); + goto out_commit; + } + + inode->i_mode = new_mode; + di->i_mode = cpu_to_le16(inode->i_mode); + + ocfs2_journal_dirty(handle, di_bh); + +out_commit: + if (commit_handle) + ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); +out_brelse: + brelse(di_bh); +out: + return ret; +} + +/* * Set the access or default ACL of an inode. */ static int ocfs2_set_acl(handle_t *handle, @@ -197,9 +253,14 @@ if (ret < 0) return ret; else { - inode->i_mode = mode; if (ret == 0) acl = NULL; + + ret = ocfs2_acl_set_mode(inode, di_bh, + handle, mode); + if (ret) + return ret; + } } break; @@ -287,6 +348,7 @@ struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); struct posix_acl *acl = NULL; int ret = 0; + mode_t mode; if (!S_ISLNK(inode->i_mode)) { if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) { @@ -295,12 +357,17 @@ if (IS_ERR(acl)) return PTR_ERR(acl); } - if (!acl) - inode->i_mode &= ~current_umask(); + if (!acl) { + mode = inode->i_mode & ~current_umask(); + ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode); + if (ret) { + mlog_errno(ret); + goto cleanup; + } + } } if ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) && acl) { struct posix_acl *clone; - mode_t mode; if (S_ISDIR(inode->i_mode)) { ret = ocfs2_set_acl(handle, inode, di_bh, @@ -317,7 +384,7 @@ mode = inode->i_mode; ret = posix_acl_create_masq(clone, &mode); if (ret >= 0) { - inode->i_mode = mode; + ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode); if (ret > 0) { ret = ocfs2_set_acl(handle, inode, di_bh, ACL_TYPE_ACCESS, --- linux-2.6.32.orig/fs/ocfs2/aops.c +++ linux-2.6.32/fs/ocfs2/aops.c @@ -591,8 +591,9 @@ goto bail; } - /* We should already CoW the refcounted extent. */ - BUG_ON(ext_flags & OCFS2_EXT_REFCOUNTED); + /* We should already CoW the refcounted extent in case of create. */ + BUG_ON(create && (ext_flags & OCFS2_EXT_REFCOUNTED)); + /* * get_more_blocks() expects us to describe a hole by clearing * the mapped bit on bh_result(). --- linux-2.6.32.orig/fs/ocfs2/dlm/dlmfs.c +++ linux-2.6.32/fs/ocfs2/dlm/dlmfs.c @@ -205,7 +205,7 @@ if ((count + *ppos) > i_size_read(inode)) readlen = i_size_read(inode) - *ppos; else - readlen = count - *ppos; + readlen = count; lvb_buf = kmalloc(readlen, GFP_NOFS); if (!lvb_buf) --- linux-2.6.32.orig/fs/proc/version_signature.c +++ linux-2.6.32/fs/proc/version_signature.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include +#include + +static int version_signature_proc_show(struct seq_file *m, void *v) +{ + seq_printf(m, "%s\n", CONFIG_VERSION_SIGNATURE); + return 0; +} + +static int version_signature_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, version_signature_proc_show, NULL); +} + +static const struct file_operations version_signature_proc_fops = { + .open = version_signature_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int __init proc_version_signature_init(void) +{ + proc_create("version_signature", 0, NULL, &version_signature_proc_fops); + return 0; +} +module_init(proc_version_signature_init); --- linux-2.6.32.orig/fs/proc/base.c +++ linux-2.6.32/fs/proc/base.c @@ -442,12 +442,13 @@ unsigned long badness(struct task_struct *p, unsigned long uptime); static int proc_oom_score(struct task_struct *task, char *buffer) { - unsigned long points; + unsigned long points = 0; struct timespec uptime; do_posix_clock_monotonic_gettime(&uptime); read_lock(&tasklist_lock); - points = badness(task->group_leader, uptime.tv_sec); + if (pid_alive(task)) + points = badness(task, uptime.tv_sec); read_unlock(&tasklist_lock); return sprintf(buffer, "%lu\n", points); } @@ -2304,16 +2305,30 @@ { struct pid_namespace *ns = dentry->d_sb->s_fs_info; pid_t tgid = task_tgid_nr_ns(current, ns); - char tmp[PROC_NUMBUF]; - if (!tgid) - return ERR_PTR(-ENOENT); - sprintf(tmp, "%d", task_tgid_nr_ns(current, ns)); - return ERR_PTR(vfs_follow_link(nd,tmp)); + char *name = ERR_PTR(-ENOENT); + if (tgid) { + name = __getname(); + if (!name) + name = ERR_PTR(-ENOMEM); + else + sprintf(name, "%d", tgid); + } + nd_set_link(nd, name); + return NULL; +} + +static void proc_self_put_link(struct dentry *dentry, struct nameidata *nd, + void *cookie) +{ + char *s = nd_get_link(nd); + if (!IS_ERR(s)) + __putname(s); } static const struct inode_operations proc_self_inode_operations = { .readlink = proc_self_readlink, .follow_link = proc_self_follow_link, + .put_link = proc_self_put_link, }; /* @@ -2829,7 +2844,7 @@ */ static const struct pid_entry tid_base_stuff[] = { DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations), - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations), + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations), REG("environ", S_IRUSR, proc_environ_operations), INF("auxv", S_IRUSR, proc_pid_auxv), ONE("status", S_IRUGO, proc_pid_status), --- linux-2.6.32.orig/fs/proc/kmsg.c +++ linux-2.6.32/fs/proc/kmsg.c @@ -12,37 +12,37 @@ #include #include #include +#include #include #include extern wait_queue_head_t log_wait; -extern int do_syslog(int type, char __user *bug, int count); - static int kmsg_open(struct inode * inode, struct file * file) { - return do_syslog(1,NULL,0); + return do_syslog(1, NULL, 0, SYSLOG_FROM_FILE); } static int kmsg_release(struct inode * inode, struct file * file) { - (void) do_syslog(0,NULL,0); + (void) do_syslog(0, NULL, 0, SYSLOG_FROM_FILE); return 0; } static ssize_t kmsg_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { - if ((file->f_flags & O_NONBLOCK) && !do_syslog(9, NULL, 0)) + if ((file->f_flags & O_NONBLOCK) && + !do_syslog(9, NULL, 0, SYSLOG_FROM_FILE)) return -EAGAIN; - return do_syslog(2, buf, count); + return do_syslog(2, buf, count, SYSLOG_FROM_FILE); } static unsigned int kmsg_poll(struct file *file, poll_table *wait) { poll_wait(file, &log_wait, wait); - if (do_syslog(9, NULL, 0)) + if (do_syslog(9, NULL, 0, SYSLOG_FROM_FILE)) return POLLIN | POLLRDNORM; return 0; } --- linux-2.6.32.orig/fs/proc/Makefile +++ linux-2.6.32/fs/proc/Makefile @@ -26,3 +26,4 @@ proc-$(CONFIG_PROC_DEVICETREE) += proc_devtree.o proc-$(CONFIG_PRINTK) += kmsg.o proc-$(CONFIG_PROC_PAGE_MONITOR) += page.o +proc-y += version_signature.o --- linux-2.6.32.orig/fs/proc/array.c +++ linux-2.6.32/fs/proc/array.c @@ -82,7 +82,6 @@ #include #include #include -#include #include #include @@ -322,94 +321,6 @@ p->nivcsw); } -#ifdef CONFIG_MMU - -struct stack_stats { - struct vm_area_struct *vma; - unsigned long startpage; - unsigned long usage; -}; - -static int stack_usage_pte_range(pmd_t *pmd, unsigned long addr, - unsigned long end, struct mm_walk *walk) -{ - struct stack_stats *ss = walk->private; - struct vm_area_struct *vma = ss->vma; - pte_t *pte, ptent; - spinlock_t *ptl; - int ret = 0; - - pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl); - for (; addr != end; pte++, addr += PAGE_SIZE) { - ptent = *pte; - -#ifdef CONFIG_STACK_GROWSUP - if (pte_present(ptent) || is_swap_pte(ptent)) - ss->usage = addr - ss->startpage + PAGE_SIZE; -#else - if (pte_present(ptent) || is_swap_pte(ptent)) { - ss->usage = ss->startpage - addr + PAGE_SIZE; - pte++; - ret = 1; - break; - } -#endif - } - pte_unmap_unlock(pte - 1, ptl); - cond_resched(); - return ret; -} - -static inline unsigned long get_stack_usage_in_bytes(struct vm_area_struct *vma, - struct task_struct *task) -{ - struct stack_stats ss; - struct mm_walk stack_walk = { - .pmd_entry = stack_usage_pte_range, - .mm = vma->vm_mm, - .private = &ss, - }; - - if (!vma->vm_mm || is_vm_hugetlb_page(vma)) - return 0; - - ss.vma = vma; - ss.startpage = task->stack_start & PAGE_MASK; - ss.usage = 0; - -#ifdef CONFIG_STACK_GROWSUP - walk_page_range(KSTK_ESP(task) & PAGE_MASK, vma->vm_end, - &stack_walk); -#else - walk_page_range(vma->vm_start, (KSTK_ESP(task) & PAGE_MASK) + PAGE_SIZE, - &stack_walk); -#endif - return ss.usage; -} - -static inline void task_show_stack_usage(struct seq_file *m, - struct task_struct *task) -{ - struct vm_area_struct *vma; - struct mm_struct *mm = get_task_mm(task); - - if (mm) { - down_read(&mm->mmap_sem); - vma = find_vma(mm, task->stack_start); - if (vma) - seq_printf(m, "Stack usage:\t%lu kB\n", - get_stack_usage_in_bytes(vma, task) >> 10); - - up_read(&mm->mmap_sem); - mmput(mm); - } -} -#else -static void task_show_stack_usage(struct seq_file *m, struct task_struct *task) -{ -} -#endif /* CONFIG_MMU */ - int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task) { @@ -429,7 +340,6 @@ task_show_regs(m, task); #endif task_context_switch_counts(m, task); - task_show_stack_usage(m, task); return 0; } @@ -571,7 +481,7 @@ rsslim, mm ? mm->start_code : 0, mm ? mm->end_code : 0, - (permitted && mm) ? task->stack_start : 0, + (permitted && mm) ? mm->start_stack : 0, esp, eip, /* The signal information here is obsolete. --- linux-2.6.32.orig/fs/proc/task_mmu.c +++ linux-2.6.32/fs/proc/task_mmu.c @@ -243,25 +243,6 @@ } else if (vma->vm_start <= mm->start_stack && vma->vm_end >= mm->start_stack) { name = "[stack]"; - } else { - unsigned long stack_start; - struct proc_maps_private *pmp; - - pmp = m->private; - stack_start = pmp->task->stack_start; - - if (vma->vm_start <= stack_start && - vma->vm_end >= stack_start) { - pad_len_spaces(m, len); - seq_printf(m, - "[threadstack:%08lx]", -#ifdef CONFIG_STACK_GROWSUP - vma->vm_end - stack_start -#else - stack_start - vma->vm_start -#endif - ); - } } } else { name = "[vdso]"; --- linux-2.6.32.orig/fs/quota/dquot.c +++ linux-2.6.32/fs/quota/dquot.c @@ -229,6 +229,8 @@ struct dqstats dqstats; EXPORT_SYMBOL(dqstats); +static qsize_t inode_get_rsv_space(struct inode *inode); + static inline unsigned int hashfn(const struct super_block *sb, unsigned int id, int type) { @@ -820,11 +822,14 @@ static void add_dquot_ref(struct super_block *sb, int type) { struct inode *inode, *old_inode = NULL; + int reserved = 0; spin_lock(&inode_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { if (inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE|I_NEW)) continue; + if (unlikely(inode_get_rsv_space(inode) > 0)) + reserved = 1; if (!atomic_read(&inode->i_writecount)) continue; if (!dqinit_needed(inode, type)) @@ -845,6 +850,12 @@ } spin_unlock(&inode_lock); iput(old_inode); + + if (reserved) { + printk(KERN_WARNING "VFS (%s): Writes happened before quota" + " was turned on thus quota information is probably " + "inconsistent. Please run quotacheck(8).\n", sb->s_id); + } } /* @@ -958,10 +969,12 @@ /* * Claim reserved quota space */ -static void dquot_claim_reserved_space(struct dquot *dquot, - qsize_t number) +static void dquot_claim_reserved_space(struct dquot *dquot, qsize_t number) { - WARN_ON(dquot->dq_dqb.dqb_rsvspace < number); + if (dquot->dq_dqb.dqb_rsvspace < number) { + WARN_ON_ONCE(1); + number = dquot->dq_dqb.dqb_rsvspace; + } dquot->dq_dqb.dqb_curspace += number; dquot->dq_dqb.dqb_rsvspace -= number; } @@ -969,7 +982,12 @@ static inline void dquot_free_reserved_space(struct dquot *dquot, qsize_t number) { - dquot->dq_dqb.dqb_rsvspace -= number; + if (dquot->dq_dqb.dqb_rsvspace >= number) + dquot->dq_dqb.dqb_rsvspace -= number; + else { + WARN_ON_ONCE(1); + dquot->dq_dqb.dqb_rsvspace = 0; + } } static void dquot_decr_inodes(struct dquot *dquot, qsize_t number) @@ -1287,6 +1305,7 @@ return QUOTA_NL_BHARDBELOW; return QUOTA_NL_NOWARN; } + /* * Initialize quota pointers in inode * We do things in a bit complicated way but by that we avoid calling @@ -1298,6 +1317,7 @@ int cnt, ret = 0; struct dquot *got[MAXQUOTAS] = { NULL, NULL }; struct super_block *sb = inode->i_sb; + qsize_t rsv; /* First test before acquiring mutex - solves deadlocks when we * re-enter the quota code and are already holding the mutex */ @@ -1332,6 +1352,13 @@ if (!inode->i_dquot[cnt]) { inode->i_dquot[cnt] = got[cnt]; got[cnt] = NULL; + /* + * Make quota reservation system happy if someone + * did a write before quota was turned on + */ + rsv = inode_get_rsv_space(inode); + if (unlikely(rsv)) + dquot_resv_space(inode->i_dquot[cnt], rsv); } } out_err: @@ -1388,6 +1415,72 @@ EXPORT_SYMBOL(vfs_dq_drop); /* + * inode_reserved_space is managed internally by quota, and protected by + * i_lock similar to i_blocks+i_bytes. + */ +static qsize_t *inode_reserved_space(struct inode * inode) +{ + /* Filesystem must explicitly define it's own method in order to use + * quota reservation interface */ + BUG_ON(!inode->i_sb->dq_op->get_reserved_space); + return inode->i_sb->dq_op->get_reserved_space(inode); +} + +void inode_add_rsv_space(struct inode *inode, qsize_t number) +{ + spin_lock(&inode->i_lock); + *inode_reserved_space(inode) += number; + spin_unlock(&inode->i_lock); +} +EXPORT_SYMBOL(inode_add_rsv_space); + +void inode_claim_rsv_space(struct inode *inode, qsize_t number) +{ + spin_lock(&inode->i_lock); + *inode_reserved_space(inode) -= number; + __inode_add_bytes(inode, number); + spin_unlock(&inode->i_lock); +} +EXPORT_SYMBOL(inode_claim_rsv_space); + +void inode_sub_rsv_space(struct inode *inode, qsize_t number) +{ + spin_lock(&inode->i_lock); + *inode_reserved_space(inode) -= number; + spin_unlock(&inode->i_lock); +} +EXPORT_SYMBOL(inode_sub_rsv_space); + +static qsize_t inode_get_rsv_space(struct inode *inode) +{ + qsize_t ret; + + if (!inode->i_sb->dq_op->get_reserved_space) + return 0; + spin_lock(&inode->i_lock); + ret = *inode_reserved_space(inode); + spin_unlock(&inode->i_lock); + return ret; +} + +static void inode_incr_space(struct inode *inode, qsize_t number, + int reserve) +{ + if (reserve) + inode_add_rsv_space(inode, number); + else + inode_add_bytes(inode, number); +} + +static void inode_decr_space(struct inode *inode, qsize_t number, int reserve) +{ + if (reserve) + inode_sub_rsv_space(inode, number); + else + inode_sub_bytes(inode, number); +} + +/* * Following four functions update i_blocks+i_bytes fields and * quota information (together with appropriate checks) * NOTE: We absolutely rely on the fact that caller dirties @@ -1405,6 +1498,21 @@ int cnt, ret = QUOTA_OK; char warntype[MAXQUOTAS]; + /* + * First test before acquiring mutex - solves deadlocks when we + * re-enter the quota code and are already holding the mutex + */ + if (IS_NOQUOTA(inode)) { + inode_incr_space(inode, number, reserve); + goto out; + } + + down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); + if (IS_NOQUOTA(inode)) { + inode_incr_space(inode, number, reserve); + goto out_unlock; + } + for (cnt = 0; cnt < MAXQUOTAS; cnt++) warntype[cnt] = QUOTA_NL_NOWARN; @@ -1415,7 +1523,8 @@ if (check_bdq(inode->i_dquot[cnt], number, warn, warntype+cnt) == NO_QUOTA) { ret = NO_QUOTA; - goto out_unlock; + spin_unlock(&dq_data_lock); + goto out_flush_warn; } } for (cnt = 0; cnt < MAXQUOTAS; cnt++) { @@ -1426,64 +1535,32 @@ else dquot_incr_space(inode->i_dquot[cnt], number); } - if (!reserve) - inode_add_bytes(inode, number); -out_unlock: + inode_incr_space(inode, number, reserve); spin_unlock(&dq_data_lock); - flush_warnings(inode->i_dquot, warntype); - return ret; -} - -int dquot_alloc_space(struct inode *inode, qsize_t number, int warn) -{ - int cnt, ret = QUOTA_OK; - - /* - * First test before acquiring mutex - solves deadlocks when we - * re-enter the quota code and are already holding the mutex - */ - if (IS_NOQUOTA(inode)) { - inode_add_bytes(inode, number); - goto out; - } - - down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); - if (IS_NOQUOTA(inode)) { - inode_add_bytes(inode, number); - goto out_unlock; - } - - ret = __dquot_alloc_space(inode, number, warn, 0); - if (ret == NO_QUOTA) - goto out_unlock; + if (reserve) + goto out_flush_warn; /* Dirtify all the dquots - this can block when journalling */ for (cnt = 0; cnt < MAXQUOTAS; cnt++) if (inode->i_dquot[cnt]) mark_dquot_dirty(inode->i_dquot[cnt]); +out_flush_warn: + flush_warnings(inode->i_dquot, warntype); out_unlock: up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); out: return ret; } + +int dquot_alloc_space(struct inode *inode, qsize_t number, int warn) +{ + return __dquot_alloc_space(inode, number, warn, 0); +} EXPORT_SYMBOL(dquot_alloc_space); int dquot_reserve_space(struct inode *inode, qsize_t number, int warn) { - int ret = QUOTA_OK; - - if (IS_NOQUOTA(inode)) - goto out; - - down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); - if (IS_NOQUOTA(inode)) - goto out_unlock; - - ret = __dquot_alloc_space(inode, number, warn, 1); -out_unlock: - up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); -out: - return ret; + return __dquot_alloc_space(inode, number, warn, 1); } EXPORT_SYMBOL(dquot_reserve_space); @@ -1540,14 +1617,14 @@ int ret = QUOTA_OK; if (IS_NOQUOTA(inode)) { - inode_add_bytes(inode, number); + inode_claim_rsv_space(inode, number); goto out; } down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); if (IS_NOQUOTA(inode)) { up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); - inode_add_bytes(inode, number); + inode_claim_rsv_space(inode, number); goto out; } @@ -1559,7 +1636,7 @@ number); } /* Update inode bytes */ - inode_add_bytes(inode, number); + inode_claim_rsv_space(inode, number); spin_unlock(&dq_data_lock); /* Dirtify all the dquots - this can block when journalling */ for (cnt = 0; cnt < MAXQUOTAS; cnt++) @@ -1572,38 +1649,9 @@ EXPORT_SYMBOL(dquot_claim_space); /* - * Release reserved quota space - */ -void dquot_release_reserved_space(struct inode *inode, qsize_t number) -{ - int cnt; - - if (IS_NOQUOTA(inode)) - goto out; - - down_read(&sb_dqopt(inode->i_sb)->dqptr_sem); - if (IS_NOQUOTA(inode)) - goto out_unlock; - - spin_lock(&dq_data_lock); - /* Release reserved dquots */ - for (cnt = 0; cnt < MAXQUOTAS; cnt++) { - if (inode->i_dquot[cnt]) - dquot_free_reserved_space(inode->i_dquot[cnt], number); - } - spin_unlock(&dq_data_lock); - -out_unlock: - up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); -out: - return; -} -EXPORT_SYMBOL(dquot_release_reserved_space); - -/* * This operation can block, but only after everything is updated */ -int dquot_free_space(struct inode *inode, qsize_t number) +int __dquot_free_space(struct inode *inode, qsize_t number, int reserve) { unsigned int cnt; char warntype[MAXQUOTAS]; @@ -1612,7 +1660,7 @@ * re-enter the quota code and are already holding the mutex */ if (IS_NOQUOTA(inode)) { out_sub: - inode_sub_bytes(inode, number); + inode_decr_space(inode, number, reserve); return QUOTA_OK; } @@ -1627,21 +1675,43 @@ if (!inode->i_dquot[cnt]) continue; warntype[cnt] = info_bdq_free(inode->i_dquot[cnt], number); - dquot_decr_space(inode->i_dquot[cnt], number); + if (reserve) + dquot_free_reserved_space(inode->i_dquot[cnt], number); + else + dquot_decr_space(inode->i_dquot[cnt], number); } - inode_sub_bytes(inode, number); + inode_decr_space(inode, number, reserve); spin_unlock(&dq_data_lock); + + if (reserve) + goto out_unlock; /* Dirtify all the dquots - this can block when journalling */ for (cnt = 0; cnt < MAXQUOTAS; cnt++) if (inode->i_dquot[cnt]) mark_dquot_dirty(inode->i_dquot[cnt]); +out_unlock: flush_warnings(inode->i_dquot, warntype); up_read(&sb_dqopt(inode->i_sb)->dqptr_sem); return QUOTA_OK; } + +int dquot_free_space(struct inode *inode, qsize_t number) +{ + return __dquot_free_space(inode, number, 0); +} EXPORT_SYMBOL(dquot_free_space); /* + * Release reserved quota space + */ +void dquot_release_reserved_space(struct inode *inode, qsize_t number) +{ + __dquot_free_space(inode, number, 1); + +} +EXPORT_SYMBOL(dquot_release_reserved_space); + +/* * This operation can block, but only after everything is updated */ int dquot_free_inode(const struct inode *inode, qsize_t number) @@ -1679,19 +1749,6 @@ EXPORT_SYMBOL(dquot_free_inode); /* - * call back function, get reserved quota space from underlying fs - */ -qsize_t dquot_get_reserved_space(struct inode *inode) -{ - qsize_t reserved_space = 0; - - if (sb_any_quota_active(inode->i_sb) && - inode->i_sb->dq_op->get_reserved_space) - reserved_space = inode->i_sb->dq_op->get_reserved_space(inode); - return reserved_space; -} - -/* * Transfer the number of inode and blocks from one diskquota to an other. * * This operation can block, but only after everything is updated @@ -1734,7 +1791,7 @@ } spin_lock(&dq_data_lock); cur_space = inode_get_bytes(inode); - rsv_space = dquot_get_reserved_space(inode); + rsv_space = inode_get_rsv_space(inode); space = cur_space + rsv_space; /* Build the transfer_from list and check the limits */ for (cnt = 0; cnt < MAXQUOTAS; cnt++) { @@ -2332,34 +2389,34 @@ if (di->dqb_valid & QIF_SPACE) { dm->dqb_curspace = di->dqb_curspace - dm->dqb_rsvspace; check_blim = 1; - __set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags); + set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags); } if (di->dqb_valid & QIF_BLIMITS) { dm->dqb_bsoftlimit = qbtos(di->dqb_bsoftlimit); dm->dqb_bhardlimit = qbtos(di->dqb_bhardlimit); check_blim = 1; - __set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags); + set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags); } if (di->dqb_valid & QIF_INODES) { dm->dqb_curinodes = di->dqb_curinodes; check_ilim = 1; - __set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags); + set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags); } if (di->dqb_valid & QIF_ILIMITS) { dm->dqb_isoftlimit = di->dqb_isoftlimit; dm->dqb_ihardlimit = di->dqb_ihardlimit; check_ilim = 1; - __set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags); + set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags); } if (di->dqb_valid & QIF_BTIME) { dm->dqb_btime = di->dqb_btime; check_blim = 1; - __set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags); + set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags); } if (di->dqb_valid & QIF_ITIME) { dm->dqb_itime = di->dqb_itime; check_ilim = 1; - __set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags); + set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags); } if (check_blim) { --- linux-2.6.32.orig/fs/ext4/mballoc.c +++ linux-2.6.32/fs/ext4/mballoc.c @@ -658,6 +658,27 @@ } } +/* + * Cache the order of the largest free extent we have available in this block + * group. + */ +static void +mb_set_largest_free_order(struct super_block *sb, struct ext4_group_info *grp) +{ + int i; + int bits; + + grp->bb_largest_free_order = -1; /* uninit */ + + bits = sb->s_blocksize_bits + 1; + for (i = bits; i >= 0; i--) { + if (grp->bb_counters[i] > 0) { + grp->bb_largest_free_order = i; + break; + } + } +} + static noinline_for_stack void ext4_mb_generate_buddy(struct super_block *sb, void *buddy, void *bitmap, ext4_group_t group) @@ -700,6 +721,7 @@ */ grp->bb_free = free; } + mb_set_largest_free_order(sb, grp); clear_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &(grp->bb_state)); @@ -725,6 +747,9 @@ * contain blocks_per_page (PAGE_CACHE_SIZE / blocksize) blocks. * So it can have information regarding groups_per_page which * is blocks_per_page/2 + * + * Locking note: This routine takes the block group lock of all groups + * for this page; do not hold this lock when calling this routine! */ static int ext4_mb_init_cache(struct page *page, char *incore) @@ -910,6 +935,11 @@ return err; } +/* + * Locking note: This routine calls ext4_mb_init_cache(), which takes the + * block group lock of all groups for this page; do not hold the BG lock when + * calling this routine! + */ static noinline_for_stack int ext4_mb_init_group(struct super_block *sb, ext4_group_t group) { @@ -1004,6 +1034,11 @@ return ret; } +/* + * Locking note: This routine calls ext4_mb_init_cache(), which takes the + * block group lock of all groups for this page; do not hold the BG lock when + * calling this routine! + */ static noinline_for_stack int ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group, struct ext4_buddy *e4b) @@ -1150,7 +1185,7 @@ return ret; } -static void ext4_mb_release_desc(struct ext4_buddy *e4b) +static void ext4_mb_unload_buddy(struct ext4_buddy *e4b) { if (e4b->bd_bitmap_page) page_cache_release(e4b->bd_bitmap_page); @@ -1300,6 +1335,7 @@ buddy = buddy2; } while (1); } + mb_set_largest_free_order(sb, e4b->bd_info); mb_check_buddy(e4b); } @@ -1428,6 +1464,7 @@ e4b->bd_info->bb_counters[ord]++; e4b->bd_info->bb_counters[ord]++; } + mb_set_largest_free_order(e4b->bd_sb, e4b->bd_info); mb_set_bits(EXT4_MB_BITMAP(e4b), ex->fe_start, len0); mb_check_buddy(e4b); @@ -1618,7 +1655,7 @@ } ext4_unlock_group(ac->ac_sb, group); - ext4_mb_release_desc(e4b); + ext4_mb_unload_buddy(e4b); return 0; } @@ -1674,7 +1711,7 @@ ext4_mb_use_best_found(ac, e4b); } ext4_unlock_group(ac->ac_sb, group); - ext4_mb_release_desc(e4b); + ext4_mb_unload_buddy(e4b); return 0; } @@ -1823,16 +1860,22 @@ } } +/* This is now called BEFORE we load the buddy bitmap. */ static int ext4_mb_good_group(struct ext4_allocation_context *ac, ext4_group_t group, int cr) { unsigned free, fragments; - unsigned i, bits; int flex_size = ext4_flex_bg_size(EXT4_SB(ac->ac_sb)); struct ext4_group_info *grp = ext4_get_group_info(ac->ac_sb, group); BUG_ON(cr < 0 || cr >= 4); - BUG_ON(EXT4_MB_GRP_NEED_INIT(grp)); + + /* We only do this if the grp has never been initialized */ + if (unlikely(EXT4_MB_GRP_NEED_INIT(grp))) { + int ret = ext4_mb_init_group(ac->ac_sb, group); + if (ret) + return 0; + } free = grp->bb_free; fragments = grp->bb_fragments; @@ -1845,17 +1888,16 @@ case 0: BUG_ON(ac->ac_2order == 0); + if (grp->bb_largest_free_order < ac->ac_2order) + return 0; + /* Avoid using the first bg of a flexgroup for data files */ if ((ac->ac_flags & EXT4_MB_HINT_DATA) && (flex_size >= EXT4_FLEX_SIZE_DIR_ALLOC_SCHEME) && ((group % flex_size) == 0)) return 0; - bits = ac->ac_sb->s_blocksize_bits + 1; - for (i = ac->ac_2order; i <= bits; i++) - if (grp->bb_counters[i] > 0) - return 1; - break; + return 1; case 1: if ((free / fragments) >= ac->ac_g_ex.fe_len) return 1; @@ -1966,7 +2008,7 @@ sbi = EXT4_SB(sb); ngroups = ext4_get_groups_count(sb); /* non-extent files are limited to low blocks/groups */ - if (!(EXT4_I(ac->ac_inode)->i_flags & EXT4_EXTENTS_FL)) + if (!(ext4_test_inode_flag(ac->ac_inode, EXT4_INODE_EXTENTS))) ngroups = sbi->s_blockfile_groups; BUG_ON(ac->ac_status == AC_STATUS_FOUND); @@ -2026,15 +2068,11 @@ group = ac->ac_g_ex.fe_group; for (i = 0; i < ngroups; group++, i++) { - struct ext4_group_info *grp; - struct ext4_group_desc *desc; - if (group == ngroups) group = 0; - /* quick check to skip empty groups */ - grp = ext4_get_group_info(sb, group); - if (grp->bb_free == 0) + /* This now checks without needing the buddy page */ + if (!ext4_mb_good_group(ac, group, cr)) continue; err = ext4_mb_load_buddy(sb, group, &e4b); @@ -2042,15 +2080,18 @@ goto out; ext4_lock_group(sb, group); + + /* + * We need to check again after locking the + * block group + */ if (!ext4_mb_good_group(ac, group, cr)) { - /* someone did allocation from this group */ ext4_unlock_group(sb, group); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); continue; } ac->ac_groups_scanned++; - desc = ext4_get_group_desc(sb, group, NULL); if (cr == 0) ext4_mb_simple_scan_group(ac, &e4b); else if (cr == 1 && @@ -2060,7 +2101,7 @@ ext4_mb_complex_scan_group(ac, &e4b); ext4_unlock_group(sb, group); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); if (ac->ac_status != AC_STATUS_CONTINUE) break; @@ -2150,7 +2191,7 @@ ext4_lock_group(sb, group); memcpy(&sg, ext4_get_group_info(sb, group), i); ext4_unlock_group(sb, group); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free, sg.info.bb_fragments, sg.info.bb_first_free); @@ -2257,6 +2298,7 @@ INIT_LIST_HEAD(&meta_group_info[i]->bb_prealloc_list); init_rwsem(&meta_group_info[i]->alloc_sem); meta_group_info[i]->bb_free_root.rb_node = NULL; + meta_group_info[i]->bb_largest_free_order = -1; /* uninit */ #ifdef DOUBLE_CHECK { @@ -2529,7 +2571,6 @@ struct ext4_group_info *db; int err, count = 0, count2 = 0; struct ext4_free_data *entry; - ext4_fsblk_t discard_block; struct list_head *l, *ltmp; list_for_each_safe(l, ltmp, &txn->t_private_list) { @@ -2538,6 +2579,23 @@ mb_debug(1, "gonna free %u blocks in group %u (0x%p):", entry->count, entry->group, entry); + if (test_opt(sb, DISCARD)) { + int ret; + ext4_fsblk_t discard_block; + + discard_block = entry->start_blk + + ext4_group_first_block_no(sb, entry->group); + trace_ext4_discard_blocks(sb, + (unsigned long long)discard_block, + entry->count); + ret = sb_issue_discard(sb, discard_block, entry->count); + if (ret == EOPNOTSUPP) { + ext4_warning(sb, __func__, + "discard not supported, disabling"); + clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD); + } + } + err = ext4_mb_load_buddy(sb, entry->group, &e4b); /* we expect to find existing buddy because it's pinned */ BUG_ON(err != 0); @@ -2559,15 +2617,8 @@ page_cache_release(e4b.bd_bitmap_page); } ext4_unlock_group(sb, entry->group); - discard_block = (ext4_fsblk_t) entry->group * EXT4_BLOCKS_PER_GROUP(sb) - + entry->start_blk - + le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block); - trace_ext4_discard_blocks(sb, (unsigned long long)discard_block, - entry->count); - sb_issue_discard(sb, discard_block, entry->count); - kmem_cache_free(ext4_free_ext_cachep, entry); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); } mb_debug(1, "freed %u blocks in %u structures\n", count, count2); @@ -2750,12 +2801,6 @@ if (!(ac->ac_flags & EXT4_MB_DELALLOC_RESERVED)) /* release all the reserved blocks if non delalloc */ percpu_counter_sub(&sbi->s_dirtyblocks_counter, reserv_blks); - else { - percpu_counter_sub(&sbi->s_dirtyblocks_counter, - ac->ac_b_ex.fe_len); - /* convert reserved quota blocks to real quota blocks */ - vfs_dq_claim_block(ac->ac_inode, ac->ac_b_ex.fe_len); - } if (sbi->s_log_groups_per_flex) { ext4_group_t flex_group = ext4_flex_group(sbi, @@ -3006,6 +3051,24 @@ } /* + * Called on failure; free up any blocks from the inode PA for this + * context. We don't need this for MB_GROUP_PA because we only change + * pa_free in ext4_mb_release_context(), but on failure, we've already + * zeroed out ac->ac_b_ex.fe_len, so group_pa->pa_free is not changed. + */ +static void ext4_discard_allocated_blocks(struct ext4_allocation_context *ac) +{ + struct ext4_prealloc_space *pa = ac->ac_pa; + int len; + + if (pa && pa->pa_type == MB_INODE_PA) { + len = ac->ac_b_ex.fe_len; + pa->pa_free += len; + } + +} + +/* * use blocks preallocated to inode */ static void ext4_mb_use_inode_pa(struct ext4_allocation_context *ac, @@ -3113,7 +3176,7 @@ continue; /* non-extent files can't have physical blocks past 2^32 */ - if (!(EXT4_I(ac->ac_inode)->i_flags & EXT4_EXTENTS_FL) && + if (!(ext4_test_inode_flag(ac->ac_inode, EXT4_INODE_EXTENTS)) && pa->pa_pstart + pa->pa_len > EXT4_MAX_BLOCK_FILE_PHYS) continue; @@ -3692,7 +3755,7 @@ ext4_unlock_group(sb, group); if (ac) kmem_cache_free(ext4_ac_cachep, ac); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); put_bh(bitmap_bh); return free; } @@ -3796,7 +3859,7 @@ if (bitmap_bh == NULL) { ext4_error(sb, __func__, "Error in reading block " "bitmap for %u", group); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); continue; } @@ -3805,7 +3868,7 @@ ext4_mb_release_inode_pa(&e4b, bitmap_bh, pa, ac); ext4_unlock_group(sb, group); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); put_bh(bitmap_bh); list_del(&pa->u.pa_tmp_list); @@ -3921,7 +3984,7 @@ /* don't use group allocation for large files */ size = max(size, isize); - if (size >= sbi->s_mb_stream_request) { + if (size > sbi->s_mb_stream_request) { ac->ac_flags |= EXT4_MB_STREAM_ALLOC; return; } @@ -4069,7 +4132,7 @@ ext4_mb_release_group_pa(&e4b, pa, ac); ext4_unlock_group(sb, group); - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); list_del(&pa->u.pa_tmp_list); call_rcu(&(pa)->u.pa_rcu, ext4_mb_pa_callback); } @@ -4290,6 +4353,7 @@ ac->ac_status = AC_STATUS_CONTINUE; goto repeat; } else if (*errp) { + ext4_discard_allocated_blocks(ac); ac->ac_b_ex.fe_len = 0; ar->len = 0; ext4_mb_show_ac(ac); @@ -4570,7 +4634,7 @@ atomic_add(count, &sbi->s_flex_groups[flex_group].free_blocks); } - ext4_mb_release_desc(&e4b); + ext4_mb_unload_buddy(&e4b); *freed += count; --- linux-2.6.32.orig/fs/ext4/super.c +++ linux-2.6.32/fs/ext4/super.c @@ -227,6 +227,7 @@ if (sb->s_flags & MS_RDONLY) return ERR_PTR(-EROFS); + vfs_check_frozen(sb, SB_FREEZE_WRITE); /* Special case here: if the journal has aborted behind our * backs (eg. EIO in the commit thread), then we still need to * take the FS itself readonly cleanly. */ @@ -603,10 +604,6 @@ if (sb->s_dirt) ext4_commit_super(sb, 1); - ext4_release_system_zone(sb); - ext4_mb_release(sb); - ext4_ext_release(sb); - ext4_xattr_put_super(sb); if (sbi->s_journal) { err = jbd2_journal_destroy(sbi->s_journal); sbi->s_journal = NULL; @@ -614,6 +611,12 @@ ext4_abort(sb, __func__, "Couldn't clean up the journal"); } + + ext4_release_system_zone(sb); + ext4_mb_release(sb); + ext4_ext_release(sb); + ext4_xattr_put_super(sb); + if (!(sb->s_flags & MS_RDONLY)) { EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); es->s_state = cpu_to_le16(sbi->s_mount_state); @@ -700,10 +703,16 @@ ei->i_reserved_data_blocks = 0; ei->i_reserved_meta_blocks = 0; ei->i_allocated_meta_blocks = 0; + ei->i_da_metadata_calc_len = 0; ei->i_delalloc_reserved_flag = 0; spin_lock_init(&(ei->i_block_reservation_lock)); +#ifdef CONFIG_QUOTA + ei->i_reserved_quota = 0; +#endif INIT_LIST_HEAD(&ei->i_aio_dio_complete_list); ei->cur_aio_dio = NULL; + ei->i_sync_tid = 0; + ei->i_datasync_tid = 0; return &ei->vfs_inode; } @@ -868,6 +877,8 @@ seq_puts(seq, test_opt(sb, BARRIER) ? "1" : "0"); if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) seq_puts(seq, ",journal_async_commit"); + else if (test_opt(sb, JOURNAL_CHECKSUM)) + seq_puts(seq, ",journal_checksum"); if (test_opt(sb, NOBH)) seq_puts(seq, ",nobh"); if (test_opt(sb, I_VERSION)) @@ -899,6 +910,12 @@ if (test_opt(sb, NO_AUTO_DA_ALLOC)) seq_puts(seq, ",noauto_da_alloc"); + if (test_opt(sb, DISCARD)) + seq_puts(seq, ",discard"); + + if (test_opt(sb, NOLOAD)) + seq_puts(seq, ",norecovery"); + ext4_show_quota_options(seq, sb); return 0; @@ -991,7 +1008,9 @@ .reserve_space = dquot_reserve_space, .claim_space = dquot_claim_space, .release_rsv = dquot_release_reserved_space, +#ifdef CONFIG_QUOTA .get_reserved_space = ext4_get_reserved_space, +#endif .alloc_inode = dquot_alloc_inode, .free_space = dquot_free_space, .free_inode = dquot_free_inode, @@ -1079,7 +1098,8 @@ Opt_usrquota, Opt_grpquota, Opt_i_version, Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_block_validity, Opt_noblock_validity, - Opt_inode_readahead_blks, Opt_journal_ioprio + Opt_inode_readahead_blks, Opt_journal_ioprio, + Opt_discard, Opt_nodiscard, }; static const match_table_t tokens = { @@ -1104,6 +1124,7 @@ {Opt_acl, "acl"}, {Opt_noacl, "noacl"}, {Opt_noload, "noload"}, + {Opt_noload, "norecovery"}, {Opt_nobh, "nobh"}, {Opt_bh, "bh"}, {Opt_commit, "commit=%u"}, @@ -1144,6 +1165,8 @@ {Opt_auto_da_alloc, "auto_da_alloc=%u"}, {Opt_auto_da_alloc, "auto_da_alloc"}, {Opt_noauto_da_alloc, "noauto_da_alloc"}, + {Opt_discard, "discard"}, + {Opt_nodiscard, "nodiscard"}, {Opt_err, NULL}, }; @@ -1565,6 +1588,12 @@ else set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC); break; + case Opt_discard: + set_opt(sbi->s_mount_opt, DISCARD); + break; + case Opt_nodiscard: + clear_opt(sbi->s_mount_opt, DISCARD); + break; default: ext4_msg(sb, KERN_ERR, "Unrecognized mount option \"%s\" " @@ -1673,14 +1702,14 @@ size_t size; int i; - if (!sbi->s_es->s_log_groups_per_flex) { + sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; + groups_per_flex = 1 << sbi->s_log_groups_per_flex; + + if (groups_per_flex < 2) { sbi->s_log_groups_per_flex = 0; return 1; } - sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; - groups_per_flex = 1 << sbi->s_log_groups_per_flex; - /* We allocate both existing and potentially added groups */ flex_group_count = ((sbi->s_groups_count + groups_per_flex - 1) + ((le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) + 1) << @@ -2668,24 +2697,6 @@ get_random_bytes(&sbi->s_next_generation, sizeof(u32)); spin_lock_init(&sbi->s_next_gen_lock); - err = percpu_counter_init(&sbi->s_freeblocks_counter, - ext4_count_free_blocks(sb)); - if (!err) { - err = percpu_counter_init(&sbi->s_freeinodes_counter, - ext4_count_free_inodes(sb)); - } - if (!err) { - err = percpu_counter_init(&sbi->s_dirs_counter, - ext4_count_dirs(sb)); - } - if (!err) { - err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0); - } - if (err) { - ext4_msg(sb, KERN_ERR, "insufficient memory"); - goto failed_mount3; - } - sbi->s_stripe = ext4_get_stripe_size(sbi); sbi->s_max_writeback_mb_bump = 128; @@ -2805,7 +2816,20 @@ set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); no_journal: - + err = percpu_counter_init(&sbi->s_freeblocks_counter, + ext4_count_free_blocks(sb)); + if (!err) + err = percpu_counter_init(&sbi->s_freeinodes_counter, + ext4_count_free_inodes(sb)); + if (!err) + err = percpu_counter_init(&sbi->s_dirs_counter, + ext4_count_dirs(sb)); + if (!err) + err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0); + if (err) { + ext4_msg(sb, KERN_ERR, "insufficient memory"); + goto failed_mount_wq; + } if (test_opt(sb, NOBH)) { if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) { ext4_msg(sb, KERN_WARNING, "Ignoring nobh option - " @@ -2880,7 +2904,7 @@ err = ext4_setup_system_zone(sb); if (err) { ext4_msg(sb, KERN_ERR, "failed to initialize system " - "zone (%d)\n", err); + "zone (%d)", err); goto failed_mount4; } @@ -2938,6 +2962,10 @@ jbd2_journal_destroy(sbi->s_journal); sbi->s_journal = NULL; } + percpu_counter_destroy(&sbi->s_freeblocks_counter); + percpu_counter_destroy(&sbi->s_freeinodes_counter); + percpu_counter_destroy(&sbi->s_dirs_counter); + percpu_counter_destroy(&sbi->s_dirtyblocks_counter); failed_mount3: if (sbi->s_flex_groups) { if (is_vmalloc_addr(sbi->s_flex_groups)) @@ -2945,10 +2973,6 @@ else kfree(sbi->s_flex_groups); } - percpu_counter_destroy(&sbi->s_freeblocks_counter); - percpu_counter_destroy(&sbi->s_freeinodes_counter); - percpu_counter_destroy(&sbi->s_dirs_counter); - percpu_counter_destroy(&sbi->s_dirtyblocks_counter); failed_mount2: for (i = 0; i < db_count; i++) brelse(sbi->s_group_desc[i]); @@ -3365,8 +3389,10 @@ return 0; journal = EXT4_SB(sb)->s_journal; - if (journal) + if (journal) { + vfs_check_frozen(sb, SB_FREEZE_WRITE); ret = ext4_journal_force_commit(journal); + } return ret; } @@ -3415,18 +3441,16 @@ * the journal. */ error = jbd2_journal_flush(journal); - if (error < 0) { - out: - jbd2_journal_unlock_updates(journal); - return error; - } + if (error < 0) + goto out; /* Journal blocked and flushed, clear needs_recovery flag. */ EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); error = ext4_commit_super(sb, 1); - if (error) - goto out; - return 0; +out: + /* we rely on s_frozen to stop further updates */ + jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); + return error; } /* @@ -3443,7 +3467,6 @@ EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); ext4_commit_super(sb, 1); unlock_super(sb); - jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); return 0; } @@ -3668,13 +3691,11 @@ buf->f_blocks = ext4_blocks_count(es) - sbi->s_overhead_last; buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter) - percpu_counter_sum_positive(&sbi->s_dirtyblocks_counter); - ext4_free_blocks_count_set(es, buf->f_bfree); buf->f_bavail = buf->f_bfree - ext4_r_blocks_count(es); if (buf->f_bfree < ext4_r_blocks_count(es)) buf->f_bavail = 0; buf->f_files = le32_to_cpu(es->s_inodes_count); buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); - es->s_free_inodes_count = cpu_to_le32(buf->f_ffree); buf->f_namelen = EXT4_NAME_LEN; fsid = le64_to_cpup((void *)es->s_uuid) ^ le64_to_cpup((void *)es->s_uuid + sizeof(u64)); @@ -3978,6 +3999,7 @@ { int err; + ext4_check_flag_values(); err = init_ext4_system_zone(); if (err) return err; --- linux-2.6.32.orig/fs/ext4/ext4.h +++ linux-2.6.32/fs/ext4/ext4.h @@ -29,6 +29,9 @@ #include #include #include +#ifdef __KERNEL__ +#include +#endif /* * The fourth extended filesystem constants/structures @@ -139,8 +142,8 @@ struct inode *inode; /* file being written to */ unsigned int flag; /* unwritten or not */ int error; /* I/O error code */ - ext4_lblk_t offset; /* offset in the file */ - size_t size; /* size of the extent */ + loff_t offset; /* offset in the file */ + ssize_t size; /* size of the extent */ struct work_struct work; /* data work queue */ } ext4_io_end_t; @@ -284,10 +287,12 @@ #define EXT4_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ #define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */ #define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ +#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */ +#define EXT4_EOFBLOCKS_FL 0x00400000 /* Blocks allocated beyond EOF */ #define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */ -#define EXT4_FL_USER_VISIBLE 0x000BDFFF /* User visible flags */ -#define EXT4_FL_USER_MODIFIABLE 0x000B80FF /* User modifiable flags */ +#define EXT4_FL_USER_VISIBLE 0x004BDFFF /* User visible flags */ +#define EXT4_FL_USER_MODIFIABLE 0x004B80FF /* User modifiable flags */ /* Flags that should be inherited by new inodes from their parent. */ #define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\ @@ -314,15 +319,81 @@ } /* - * Inode dynamic state flags + * Inode flags used for atomic set/get + */ +enum { + EXT4_INODE_SECRM = 0, /* Secure deletion */ + EXT4_INODE_UNRM = 1, /* Undelete */ + EXT4_INODE_COMPR = 2, /* Compress file */ + EXT4_INODE_SYNC = 3, /* Synchronous updates */ + EXT4_INODE_IMMUTABLE = 4, /* Immutable file */ + EXT4_INODE_APPEND = 5, /* writes to file may only append */ + EXT4_INODE_NODUMP = 6, /* do not dump file */ + EXT4_INODE_NOATIME = 7, /* do not update atime */ +/* Reserved for compression usage... */ + EXT4_INODE_DIRTY = 8, + EXT4_INODE_COMPRBLK = 9, /* One or more compressed clusters */ + EXT4_INODE_NOCOMPR = 10, /* Don't compress */ + EXT4_INODE_ECOMPR = 11, /* Compression error */ +/* End compression flags --- maybe not all used */ + EXT4_INODE_INDEX = 12, /* hash-indexed directory */ + EXT4_INODE_IMAGIC = 13, /* AFS directory */ + EXT4_INODE_JOURNAL_DATA = 14, /* file data should be journaled */ + EXT4_INODE_NOTAIL = 15, /* file tail should not be merged */ + EXT4_INODE_DIRSYNC = 16, /* dirsync behaviour (directories only) */ + EXT4_INODE_TOPDIR = 17, /* Top of directory hierarchies*/ + EXT4_INODE_HUGE_FILE = 18, /* Set to each huge file */ + EXT4_INODE_EXTENTS = 19, /* Inode uses extents */ + EXT4_INODE_EA_INODE = 21, /* Inode used for large EA */ + EXT4_INODE_EOFBLOCKS = 22, /* Blocks allocated beyond EOF */ + EXT4_INODE_RESERVED = 31, /* reserved for ext4 lib */ +}; + +#define TEST_FLAG_VALUE(FLAG) (EXT4_##FLAG##_FL == (1 << EXT4_INODE_##FLAG)) +#define CHECK_FLAG_VALUE(FLAG) if (!TEST_FLAG_VALUE(FLAG)) { \ + printk(KERN_EMERG "EXT4 flag fail: " #FLAG ": %d %d\n", \ + EXT4_##FLAG##_FL, EXT4_INODE_##FLAG); BUG_ON(1); } + +/* + * Since it's pretty easy to mix up bit numbers and hex values, and we + * can't do a compile-time test for ENUM values, we use a run-time + * test to make sure that EXT4_XXX_FL is consistent with respect to + * EXT4_INODE_XXX. If all is well the printk and BUG_ON will all drop + * out so it won't cost any extra space in the compiled kernel image. + * But it's important that these values are the same, since we are + * using EXT4_INODE_XXX to test for the flag values, but EXT4_XX_FL + * must be consistent with the values of FS_XXX_FL defined in + * include/linux/fs.h and the on-disk values found in ext2, ext3, and + * ext4 filesystems, and of course the values defined in e2fsprogs. + * + * It's not paranoia if the Murphy's Law really *is* out to get you. :-) */ -#define EXT4_STATE_JDATA 0x00000001 /* journaled data exists */ -#define EXT4_STATE_NEW 0x00000002 /* inode is newly created */ -#define EXT4_STATE_XATTR 0x00000004 /* has in-inode xattrs */ -#define EXT4_STATE_NO_EXPAND 0x00000008 /* No space for expansion */ -#define EXT4_STATE_DA_ALLOC_CLOSE 0x00000010 /* Alloc DA blks on close */ -#define EXT4_STATE_EXT_MIGRATE 0x00000020 /* Inode is migrating */ -#define EXT4_STATE_DIO_UNWRITTEN 0x00000040 /* need convert on dio done*/ +static inline void ext4_check_flag_values(void) +{ + CHECK_FLAG_VALUE(SECRM); + CHECK_FLAG_VALUE(UNRM); + CHECK_FLAG_VALUE(COMPR); + CHECK_FLAG_VALUE(SYNC); + CHECK_FLAG_VALUE(IMMUTABLE); + CHECK_FLAG_VALUE(APPEND); + CHECK_FLAG_VALUE(NODUMP); + CHECK_FLAG_VALUE(NOATIME); + CHECK_FLAG_VALUE(DIRTY); + CHECK_FLAG_VALUE(COMPRBLK); + CHECK_FLAG_VALUE(NOCOMPR); + CHECK_FLAG_VALUE(ECOMPR); + CHECK_FLAG_VALUE(INDEX); + CHECK_FLAG_VALUE(IMAGIC); + CHECK_FLAG_VALUE(JOURNAL_DATA); + CHECK_FLAG_VALUE(NOTAIL); + CHECK_FLAG_VALUE(DIRSYNC); + CHECK_FLAG_VALUE(TOPDIR); + CHECK_FLAG_VALUE(HUGE_FILE); + CHECK_FLAG_VALUE(EXTENTS); + CHECK_FLAG_VALUE(EA_INODE); + CHECK_FLAG_VALUE(EOFBLOCKS); + CHECK_FLAG_VALUE(RESERVED); +} /* Used to pass group descriptor data when online resize is done */ struct ext4_new_group_input { @@ -335,6 +406,18 @@ __u16 unused; }; +#if defined(__KERNEL__) && defined(CONFIG_COMPAT) +struct compat_ext4_new_group_input { + u32 group; + compat_u64 block_bitmap; + compat_u64 inode_bitmap; + compat_u64 inode_table; + u32 blocks_count; + u16 reserved_blocks; + u16 unused; +}; +#endif + /* The struct ext4_new_group_input in kernel space, with free_blocks_count */ struct ext4_new_group_data { __u32 group; @@ -361,14 +444,11 @@ so set the magic i_delalloc_reserve_flag after taking the inode allocation semaphore for */ #define EXT4_GET_BLOCKS_DELALLOC_RESERVE 0x0004 - /* Call ext4_da_update_reserve_space() after successfully - allocating the blocks */ -#define EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE 0x0008 /* caller is from the direct IO path, request to creation of an unitialized extents if not allocated, split the uninitialized extent if blocks has been preallocated already*/ -#define EXT4_GET_BLOCKS_DIO 0x0010 -#define EXT4_GET_BLOCKS_CONVERT 0x0020 +#define EXT4_GET_BLOCKS_DIO 0x0008 +#define EXT4_GET_BLOCKS_CONVERT 0x0010 #define EXT4_GET_BLOCKS_DIO_CREATE_EXT (EXT4_GET_BLOCKS_DIO|\ EXT4_GET_BLOCKS_CREATE_UNINIT_EXT) /* Convert extent to initialized after direct IO complete */ @@ -397,6 +477,7 @@ #define EXT4_IOC_ALLOC_DA_BLKS _IO('f', 12) #define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent) +#if defined(__KERNEL__) && defined(CONFIG_COMPAT) /* * ioctl commands in 32 bit emulation */ @@ -407,11 +488,13 @@ #define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int) #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) +#define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input) #ifdef CONFIG_JBD2_DEBUG #define EXT4_IOC32_WAIT_FOR_READONLY _IOR('f', 99, int) #endif #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION +#endif /* @@ -615,9 +698,8 @@ */ struct ext4_inode_info { __le32 i_data[15]; /* unconverted */ - __u32 i_flags; - ext4_fsblk_t i_file_acl; __u32 i_dtime; + ext4_fsblk_t i_file_acl; /* * i_block_group is the number of the block group which contains @@ -627,7 +709,8 @@ * near to their parent directory's inode. */ ext4_group_t i_block_group; - __u32 i_state; /* Dynamic state flags for ext4 */ + unsigned long i_state_flags; /* Dynamic state flags */ + unsigned long i_flags; ext4_lblk_t i_dir_start_lookup; #ifdef CONFIG_EXT4_FS_XATTR @@ -693,16 +776,29 @@ unsigned int i_reserved_meta_blocks; unsigned int i_allocated_meta_blocks; unsigned short i_delalloc_reserved_flag; + sector_t i_da_metadata_calc_last_lblock; + int i_da_metadata_calc_len; /* on-disk additional length */ __u16 i_extra_isize; spinlock_t i_block_reservation_lock; +#ifdef CONFIG_QUOTA + /* quota space reservation, managed internally by quota code */ + qsize_t i_reserved_quota; +#endif /* completed async DIOs that might need unwritten extents handling */ struct list_head i_aio_dio_complete_list; /* current io_end structure for async DIO write*/ ext4_io_end_t *cur_aio_dio; + + /* + * Transactions that contain inode's metadata needed to complete + * fsync and fdatasync, respectively. + */ + tid_t i_sync_tid; + tid_t i_datasync_tid; }; /* @@ -750,6 +846,7 @@ #define EXT4_MOUNT_DELALLOC 0x8000000 /* Delalloc support */ #define EXT4_MOUNT_DATA_ERR_ABORT 0x10000000 /* Abort on file data write */ #define EXT4_MOUNT_BLOCK_VALIDITY 0x20000000 /* Block validity checking */ +#define EXT4_MOUNT_DISCARD 0x40000000 /* Issue DISCARD requests */ #define clear_opt(o, opt) o &= ~EXT4_MOUNT_##opt #define set_opt(o, opt) o |= EXT4_MOUNT_##opt @@ -1033,6 +1130,37 @@ (ino >= EXT4_FIRST_INO(sb) && ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)); } + +/* + * Inode dynamic state flags + */ +enum { + EXT4_STATE_JDATA, /* journaled data exists */ + EXT4_STATE_NEW, /* inode is newly created */ + EXT4_STATE_XATTR, /* has in-inode xattrs */ + EXT4_STATE_NO_EXPAND, /* No space for expansion */ + EXT4_STATE_DA_ALLOC_CLOSE, /* Alloc DA blks on close */ + EXT4_STATE_EXT_MIGRATE, /* Inode is migrating */ + EXT4_STATE_DIO_UNWRITTEN, /* need convert on dio done*/ + EXT4_STATE_NEWENTRY, /* File just added to dir */ +}; + +#define EXT4_INODE_BIT_FNS(name, field) \ +static inline int ext4_test_inode_##name(struct inode *inode, int bit) \ +{ \ + return test_bit(bit, &EXT4_I(inode)->i_##field); \ +} \ +static inline void ext4_set_inode_##name(struct inode *inode, int bit) \ +{ \ + set_bit(bit, &EXT4_I(inode)->i_##field); \ +} \ +static inline void ext4_clear_inode_##name(struct inode *inode, int bit) \ +{ \ + clear_bit(bit, &EXT4_I(inode)->i_##field); \ +} + +EXT4_INODE_BIT_FNS(flag, flags) +EXT4_INODE_BIT_FNS(state, state_flags) #else /* Assume that user mode programs are passing in an ext4fs superblock, not * a kernel struct super_block. This will allow us to call the feature-test @@ -1217,7 +1345,7 @@ #define is_dx(dir) (EXT4_HAS_COMPAT_FEATURE(dir->i_sb, \ EXT4_FEATURE_COMPAT_DIR_INDEX) && \ - (EXT4_I(dir)->i_flags & EXT4_INDEX_FL)) + ext4_test_inode_flag((dir), EXT4_INODE_INDEX)) #define EXT4_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT4_LINK_MAX) #define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1) @@ -1424,8 +1552,10 @@ extern int ext4_block_truncate_page(handle_t *handle, struct address_space *mapping, loff_t from); extern int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); -extern qsize_t ext4_get_reserved_space(struct inode *inode); +extern qsize_t *ext4_get_reserved_space(struct inode *inode); extern int flush_aio_dio_completed_IO(struct inode *inode); +extern void ext4_da_update_reserve_space(struct inode *inode, + int used, int quota_claim); /* ioctl.c */ extern long ext4_ioctl(struct file *, unsigned int, unsigned long); extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long); @@ -1625,6 +1755,7 @@ ext4_grpblk_t bb_first_free; /* first free block */ ext4_grpblk_t bb_free; /* total free blocks */ ext4_grpblk_t bb_fragments; /* nr of freespace fragments */ + ext4_grpblk_t bb_largest_free_order;/* order of largest frag in BG */ struct list_head bb_prealloc_list; #ifdef DOUBLE_CHECK void *bb_bitmap; @@ -1728,7 +1859,7 @@ extern long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len); extern int ext4_convert_unwritten_extents(struct inode *inode, loff_t offset, - loff_t len); + ssize_t len); extern int ext4_get_blocks(handle_t *handle, struct inode *inode, sector_t block, unsigned int max_blocks, struct buffer_head *bh, int flags); --- linux-2.6.32.orig/fs/ext4/ialloc.c +++ linux-2.6.32/fs/ext4/ialloc.c @@ -244,57 +244,50 @@ if (fatal) goto error_return; - /* Ok, now we can actually update the inode bitmaps.. */ - cleared = ext4_clear_bit_atomic(ext4_group_lock_ptr(sb, block_group), - bit, bitmap_bh->b_data); - if (!cleared) - ext4_error(sb, "ext4_free_inode", - "bit already cleared for inode %lu", ino); - else { - gdp = ext4_get_group_desc(sb, block_group, &bh2); - + fatal = -ESRCH; + gdp = ext4_get_group_desc(sb, block_group, &bh2); + if (gdp) { BUFFER_TRACE(bh2, "get_write_access"); fatal = ext4_journal_get_write_access(handle, bh2); - if (fatal) goto error_return; + } + ext4_lock_group(sb, block_group); + cleared = ext4_clear_bit(bit, bitmap_bh->b_data); + if (fatal || !cleared) { + ext4_unlock_group(sb, block_group); + goto out; + } - if (gdp) { - ext4_lock_group(sb, block_group); - count = ext4_free_inodes_count(sb, gdp) + 1; - ext4_free_inodes_set(sb, gdp, count); - if (is_directory) { - count = ext4_used_dirs_count(sb, gdp) - 1; - ext4_used_dirs_set(sb, gdp, count); - if (sbi->s_log_groups_per_flex) { - ext4_group_t f; - - f = ext4_flex_group(sbi, block_group); - atomic_dec(&sbi->s_flex_groups[f].free_inodes); - } + count = ext4_free_inodes_count(sb, gdp) + 1; + ext4_free_inodes_set(sb, gdp, count); + if (is_directory) { + count = ext4_used_dirs_count(sb, gdp) - 1; + ext4_used_dirs_set(sb, gdp, count); + percpu_counter_dec(&sbi->s_dirs_counter); + } + gdp->bg_checksum = ext4_group_desc_csum(sbi, block_group, gdp); + ext4_unlock_group(sb, block_group); - } - gdp->bg_checksum = ext4_group_desc_csum(sbi, - block_group, gdp); - ext4_unlock_group(sb, block_group); - percpu_counter_inc(&sbi->s_freeinodes_counter); - if (is_directory) - percpu_counter_dec(&sbi->s_dirs_counter); + percpu_counter_inc(&sbi->s_freeinodes_counter); + if (sbi->s_log_groups_per_flex) { + ext4_group_t f = ext4_flex_group(sbi, block_group); - if (sbi->s_log_groups_per_flex) { - ext4_group_t f; + atomic_inc(&sbi->s_flex_groups[f].free_inodes); + if (is_directory) + atomic_dec(&sbi->s_flex_groups[f].used_dirs); + } + BUFFER_TRACE(bh2, "call ext4_handle_dirty_metadata"); + fatal = ext4_handle_dirty_metadata(handle, NULL, bh2); +out: + if (cleared) { + BUFFER_TRACE(bitmap_bh, "call ext4_handle_dirty_metadata"); + err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); + if (!fatal) + fatal = err; + sb->s_dirt = 1; + } else + ext4_error(sb, "ext4_free_inode", + "bit already cleared for inode %lu", ino); - f = ext4_flex_group(sbi, block_group); - atomic_inc(&sbi->s_flex_groups[f].free_inodes); - } - } - BUFFER_TRACE(bh2, "call ext4_handle_dirty_metadata"); - err = ext4_handle_dirty_metadata(handle, NULL, bh2); - if (!fatal) fatal = err; - } - BUFFER_TRACE(bitmap_bh, "call ext4_handle_dirty_metadata"); - err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); - if (!fatal) - fatal = err; - sb->s_dirt = 1; error_return: brelse(bitmap_bh); ext4_std_error(sb, fatal); @@ -504,7 +497,7 @@ if (S_ISDIR(mode) && ((parent == sb->s_root->d_inode) || - (EXT4_I(parent)->i_flags & EXT4_TOPDIR_FL))) { + (ext4_test_inode_flag(parent, EXT4_INODE_TOPDIR)))) { int best_ndir = inodes_per_group; int ret = -1; @@ -779,7 +772,7 @@ if (sbi->s_log_groups_per_flex) { ext4_group_t f = ext4_flex_group(sbi, group); - atomic_inc(&sbi->s_flex_groups[f].free_inodes); + atomic_inc(&sbi->s_flex_groups[f].used_dirs); } } gdp->bg_checksum = ext4_group_desc_csum(sbi, group, gdp); @@ -904,7 +897,7 @@ BUFFER_TRACE(inode_bitmap_bh, "call ext4_handle_dirty_metadata"); err = ext4_handle_dirty_metadata(handle, - inode, + NULL, inode_bitmap_bh); if (err) goto fail; @@ -1029,7 +1022,8 @@ inode->i_generation = sbi->s_next_generation++; spin_unlock(&sbi->s_next_gen_lock); - ei->i_state = EXT4_STATE_NEW; + ei->i_state_flags = 0; + ext4_set_inode_state(inode, EXT4_STATE_NEW); ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; @@ -1050,7 +1044,7 @@ if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)) { /* set extent flag only for directory, file and normal symlink*/ if (S_ISDIR(mode) || S_ISREG(mode) || S_ISLNK(mode)) { - EXT4_I(inode)->i_flags |= EXT4_EXTENTS_FL; + ext4_set_inode_flag(inode, EXT4_INODE_EXTENTS); ext4_ext_tree_init(handle, inode); } } --- linux-2.6.32.orig/fs/ext4/ext4_jbd2.c +++ linux-2.6.32/fs/ext4/ext4_jbd2.c @@ -89,7 +89,7 @@ ext4_journal_abort_handle(where, __func__, bh, handle, err); } else { - if (inode && bh) + if (inode) mark_buffer_dirty_inode(bh, inode); else mark_buffer_dirty(bh); --- linux-2.6.32.orig/fs/ext4/move_extent.c +++ linux-2.6.32/fs/ext4/move_extent.c @@ -77,12 +77,14 @@ mext_next_extent(struct inode *inode, struct ext4_ext_path *path, struct ext4_extent **extent) { + struct ext4_extent_header *eh; int ppos, leaf_ppos = path->p_depth; ppos = leaf_ppos; if (EXT_LAST_EXTENT(path[ppos].p_hdr) > path[ppos].p_ext) { /* leaf block */ *extent = ++path[ppos].p_ext; + path[ppos].p_block = ext_pblock(path[ppos].p_ext); return 0; } @@ -119,9 +121,18 @@ ext_block_hdr(path[cur_ppos+1].p_bh); } + path[leaf_ppos].p_ext = *extent = NULL; + + eh = path[leaf_ppos].p_hdr; + if (le16_to_cpu(eh->eh_entries) == 0) + /* empty leaf is found */ + return -ENODATA; + /* leaf block */ path[leaf_ppos].p_ext = *extent = EXT_FIRST_EXTENT(path[leaf_ppos].p_hdr); + path[leaf_ppos].p_block = + ext_pblock(path[leaf_ppos].p_ext); return 0; } } @@ -155,40 +166,15 @@ } /** - * mext_double_down_read - Acquire two inodes' read semaphore + * double_down_write_data_sem - Acquire two inodes' write lock of i_data_sem * * @orig_inode: original inode structure * @donor_inode: donor inode structure - * Acquire read semaphore of the two inodes (orig and donor) by i_ino order. + * Acquire write lock of i_data_sem of the two inodes (orig and donor) by + * i_ino order. */ static void -mext_double_down_read(struct inode *orig_inode, struct inode *donor_inode) -{ - struct inode *first = orig_inode, *second = donor_inode; - - /* - * Use the inode number to provide the stable locking order instead - * of its address, because the C language doesn't guarantee you can - * compare pointers that don't come from the same array. - */ - if (donor_inode->i_ino < orig_inode->i_ino) { - first = donor_inode; - second = orig_inode; - } - - down_read(&EXT4_I(first)->i_data_sem); - down_read(&EXT4_I(second)->i_data_sem); -} - -/** - * mext_double_down_write - Acquire two inodes' write semaphore - * - * @orig_inode: original inode structure - * @donor_inode: donor inode structure - * Acquire write semaphore of the two inodes (orig and donor) by i_ino order. - */ -static void -mext_double_down_write(struct inode *orig_inode, struct inode *donor_inode) +double_down_write_data_sem(struct inode *orig_inode, struct inode *donor_inode) { struct inode *first = orig_inode, *second = donor_inode; @@ -203,32 +189,18 @@ } down_write(&EXT4_I(first)->i_data_sem); - down_write(&EXT4_I(second)->i_data_sem); + down_write_nested(&EXT4_I(second)->i_data_sem, SINGLE_DEPTH_NESTING); } /** - * mext_double_up_read - Release two inodes' read semaphore + * double_up_write_data_sem - Release two inodes' write lock of i_data_sem * * @orig_inode: original inode structure to be released its lock first * @donor_inode: donor inode structure to be released its lock second - * Release read semaphore of two inodes (orig and donor). + * Release write lock of i_data_sem of two inodes (orig and donor). */ static void -mext_double_up_read(struct inode *orig_inode, struct inode *donor_inode) -{ - up_read(&EXT4_I(orig_inode)->i_data_sem); - up_read(&EXT4_I(donor_inode)->i_data_sem); -} - -/** - * mext_double_up_write - Release two inodes' write semaphore - * - * @orig_inode: original inode structure to be released its lock first - * @donor_inode: donor inode structure to be released its lock second - * Release write semaphore of two inodes (orig and donor). - */ -static void -mext_double_up_write(struct inode *orig_inode, struct inode *donor_inode) +double_up_write_data_sem(struct inode *orig_inode, struct inode *donor_inode) { up_write(&EXT4_I(orig_inode)->i_data_sem); up_write(&EXT4_I(donor_inode)->i_data_sem); @@ -280,6 +252,7 @@ } o_start->ee_len = start_ext->ee_len; + eblock = le32_to_cpu(start_ext->ee_block); new_flag = 1; } else if (start_ext->ee_len && new_ext->ee_len && @@ -290,6 +263,7 @@ * orig |------------------------------| */ o_start->ee_len = start_ext->ee_len; + eblock = le32_to_cpu(start_ext->ee_block); new_flag = 1; } else if (!start_ext->ee_len && new_ext->ee_len && @@ -503,7 +477,6 @@ struct ext4_extent *oext, *o_start, *o_end, *prev_ext; struct ext4_extent new_ext, start_ext, end_ext; ext4_lblk_t new_ext_end; - ext4_fsblk_t new_phys_end; int oext_alen, new_ext_alen, end_ext_alen; int depth = ext_depth(orig_inode); int ret; @@ -517,7 +490,6 @@ new_ext.ee_len = dext->ee_len; new_ext_alen = ext4_ext_get_actual_len(&new_ext); new_ext_end = le32_to_cpu(new_ext.ee_block) + new_ext_alen - 1; - new_phys_end = ext_pblock(&new_ext) + new_ext_alen - 1; /* * Case: original extent is first @@ -530,6 +502,7 @@ le32_to_cpu(oext->ee_block) + oext_alen) { start_ext.ee_len = cpu_to_le16(le32_to_cpu(new_ext.ee_block) - le32_to_cpu(oext->ee_block)); + start_ext.ee_block = oext->ee_block; copy_extent_status(oext, &start_ext); } else if (oext > EXT_FIRST_EXTENT(orig_path[depth].p_hdr)) { prev_ext = oext - 1; @@ -543,6 +516,7 @@ start_ext.ee_len = cpu_to_le16( ext4_ext_get_actual_len(prev_ext) + new_ext_alen); + start_ext.ee_block = oext->ee_block; copy_extent_status(prev_ext, &start_ext); new_ext.ee_len = 0; } @@ -661,6 +635,7 @@ * @donor_inode: donor inode * @from: block offset of orig_inode * @count: block count to be replaced + * @err: pointer to save return value * * Replace original inode extents and donor inode extents page by page. * We implement this replacement in the following three steps: @@ -671,33 +646,33 @@ * 3. Change the block information of donor inode to point at the saved * original inode blocks in the dummy extents. * - * Return 0 on success, or a negative error value on failure. + * Return replaced block count. */ static int mext_replace_branches(handle_t *handle, struct inode *orig_inode, struct inode *donor_inode, ext4_lblk_t from, - ext4_lblk_t count) + ext4_lblk_t count, int *err) { struct ext4_ext_path *orig_path = NULL; struct ext4_ext_path *donor_path = NULL; struct ext4_extent *oext, *dext; struct ext4_extent tmp_dext, tmp_oext; ext4_lblk_t orig_off = from, donor_off = from; - int err = 0; int depth; int replaced_count = 0; int dext_alen; - mext_double_down_write(orig_inode, donor_inode); + /* Protect extent trees against block allocations via delalloc */ + double_down_write_data_sem(orig_inode, donor_inode); /* Get the original extent for the block "orig_off" */ - err = get_ext_path(orig_inode, orig_off, &orig_path); - if (err) + *err = get_ext_path(orig_inode, orig_off, &orig_path); + if (*err) goto out; /* Get the donor extent for the head */ - err = get_ext_path(donor_inode, donor_off, &donor_path); - if (err) + *err = get_ext_path(donor_inode, donor_off, &donor_path); + if (*err) goto out; depth = ext_depth(orig_inode); oext = orig_path[depth].p_ext; @@ -707,9 +682,9 @@ dext = donor_path[depth].p_ext; tmp_dext = *dext; - err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off, + *err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off, donor_off, count); - if (err) + if (*err) goto out; /* Loop for the donor extents */ @@ -718,7 +693,7 @@ if (!dext) { ext4_error(donor_inode->i_sb, __func__, "The extent for donor must be found"); - err = -EIO; + *err = -EIO; goto out; } else if (donor_off != le32_to_cpu(tmp_dext.ee_block)) { ext4_error(donor_inode->i_sb, __func__, @@ -726,20 +701,20 @@ "extent(%u) should be equal", donor_off, le32_to_cpu(tmp_dext.ee_block)); - err = -EIO; + *err = -EIO; goto out; } /* Set donor extent to orig extent */ - err = mext_leaf_block(handle, orig_inode, + *err = mext_leaf_block(handle, orig_inode, orig_path, &tmp_dext, &orig_off); - if (err < 0) + if (*err) goto out; /* Set orig extent to donor extent */ - err = mext_leaf_block(handle, donor_inode, + *err = mext_leaf_block(handle, donor_inode, donor_path, &tmp_oext, &donor_off); - if (err < 0) + if (*err) goto out; dext_alen = ext4_ext_get_actual_len(&tmp_dext); @@ -753,35 +728,25 @@ if (orig_path) ext4_ext_drop_refs(orig_path); - err = get_ext_path(orig_inode, orig_off, &orig_path); - if (err) + *err = get_ext_path(orig_inode, orig_off, &orig_path); + if (*err) goto out; depth = ext_depth(orig_inode); oext = orig_path[depth].p_ext; - if (le32_to_cpu(oext->ee_block) + - ext4_ext_get_actual_len(oext) <= orig_off) { - err = 0; - goto out; - } tmp_oext = *oext; if (donor_path) ext4_ext_drop_refs(donor_path); - err = get_ext_path(donor_inode, donor_off, &donor_path); - if (err) + *err = get_ext_path(donor_inode, donor_off, &donor_path); + if (*err) goto out; depth = ext_depth(donor_inode); dext = donor_path[depth].p_ext; - if (le32_to_cpu(dext->ee_block) + - ext4_ext_get_actual_len(dext) <= donor_off) { - err = 0; - goto out; - } tmp_dext = *dext; - err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off, + *err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off, donor_off, count - replaced_count); - if (err) + if (*err) goto out; } @@ -795,8 +760,12 @@ kfree(donor_path); } - mext_double_up_write(orig_inode, donor_inode); - return err; + ext4_ext_invalidate_cache(orig_inode); + ext4_ext_invalidate_cache(donor_inode); + + double_up_write_data_sem(orig_inode, donor_inode); + + return replaced_count; } /** @@ -808,16 +777,17 @@ * @data_offset_in_page: block index where data swapping starts * @block_len_in_page: the number of blocks to be swapped * @uninit: orig extent is uninitialized or not + * @err: pointer to save return value * * Save the data in original inode blocks and replace original inode extents * with donor inode extents by calling mext_replace_branches(). - * Finally, write out the saved data in new original inode blocks. Return 0 - * on success, or a negative error value on failure. + * Finally, write out the saved data in new original inode blocks. Return + * replaced block count. */ static int move_extent_per_page(struct file *o_filp, struct inode *donor_inode, pgoff_t orig_page_offset, int data_offset_in_page, - int block_len_in_page, int uninit) + int block_len_in_page, int uninit, int *err) { struct inode *orig_inode = o_filp->f_dentry->d_inode; struct address_space *mapping = orig_inode->i_mapping; @@ -829,9 +799,11 @@ long long offs = orig_page_offset << PAGE_CACHE_SHIFT; unsigned long blocksize = orig_inode->i_sb->s_blocksize; unsigned int w_flags = 0; - unsigned int tmp_data_len, data_len; + unsigned int tmp_data_size, data_size, replaced_size; void *fsdata; - int ret, i, jblocks; + int i, jblocks; + int err2 = 0; + int replaced_count = 0; int blocks_per_page = PAGE_CACHE_SIZE >> orig_inode->i_blkbits; /* @@ -841,8 +813,8 @@ jblocks = ext4_writepage_trans_blocks(orig_inode) * 2; handle = ext4_journal_start(orig_inode, jblocks); if (IS_ERR(handle)) { - ret = PTR_ERR(handle); - return ret; + *err = PTR_ERR(handle); + return 0; } if (segment_eq(get_fs(), KERNEL_DS)) @@ -858,39 +830,36 @@ * Just swap data blocks between orig and donor. */ if (uninit) { - ret = mext_replace_branches(handle, orig_inode, - donor_inode, orig_blk_offset, - block_len_in_page); - - /* Clear the inode cache not to refer to the old data */ - ext4_ext_invalidate_cache(orig_inode); - ext4_ext_invalidate_cache(donor_inode); + replaced_count = mext_replace_branches(handle, orig_inode, + donor_inode, orig_blk_offset, + block_len_in_page, err); goto out2; } offs = (long long)orig_blk_offset << orig_inode->i_blkbits; - /* Calculate data_len */ + /* Calculate data_size */ if ((orig_blk_offset + block_len_in_page - 1) == ((orig_inode->i_size - 1) >> orig_inode->i_blkbits)) { /* Replace the last block */ - tmp_data_len = orig_inode->i_size & (blocksize - 1); + tmp_data_size = orig_inode->i_size & (blocksize - 1); /* - * If data_len equal zero, it shows data_len is multiples of + * If data_size equal zero, it shows data_size is multiples of * blocksize. So we set appropriate value. */ - if (tmp_data_len == 0) - tmp_data_len = blocksize; + if (tmp_data_size == 0) + tmp_data_size = blocksize; - data_len = tmp_data_len + + data_size = tmp_data_size + ((block_len_in_page - 1) << orig_inode->i_blkbits); - } else { - data_len = block_len_in_page << orig_inode->i_blkbits; - } + } else + data_size = block_len_in_page << orig_inode->i_blkbits; + + replaced_size = data_size; - ret = a_ops->write_begin(o_filp, mapping, offs, data_len, w_flags, + *err = a_ops->write_begin(o_filp, mapping, offs, data_size, w_flags, &page, &fsdata); - if (unlikely(ret < 0)) + if (unlikely(*err < 0)) goto out; if (!PageUptodate(page)) { @@ -911,14 +880,17 @@ /* Release old bh and drop refs */ try_to_release_page(page, 0); - ret = mext_replace_branches(handle, orig_inode, donor_inode, - orig_blk_offset, block_len_in_page); - if (ret < 0) - goto out; - - /* Clear the inode cache not to refer to the old data */ - ext4_ext_invalidate_cache(orig_inode); - ext4_ext_invalidate_cache(donor_inode); + replaced_count = mext_replace_branches(handle, orig_inode, donor_inode, + orig_blk_offset, block_len_in_page, + &err2); + if (err2) { + if (replaced_count) { + block_len_in_page = replaced_count; + replaced_size = + block_len_in_page << orig_inode->i_blkbits; + } else + goto out; + } if (!page_has_buffers(page)) create_empty_buffers(page, 1 << orig_inode->i_blkbits, 0); @@ -928,16 +900,16 @@ bh = bh->b_this_page; for (i = 0; i < block_len_in_page; i++) { - ret = ext4_get_block(orig_inode, + *err = ext4_get_block(orig_inode, (sector_t)(orig_blk_offset + i), bh, 0); - if (ret < 0) + if (*err < 0) goto out; if (bh->b_this_page != NULL) bh = bh->b_this_page; } - ret = a_ops->write_end(o_filp, mapping, offs, data_len, data_len, + *err = a_ops->write_end(o_filp, mapping, offs, data_size, replaced_size, page, fsdata); page = NULL; @@ -951,18 +923,20 @@ out2: ext4_journal_stop(handle); - return ret < 0 ? ret : 0; + if (err2) + *err = err2; + + return replaced_count; } /** - * mext_check_argumants - Check whether move extent can be done + * mext_check_arguments - Check whether move extent can be done * * @orig_inode: original inode * @donor_inode: donor inode * @orig_start: logical start offset in block for orig * @donor_start: logical start offset in block for donor * @len: the number of blocks to be moved - * @moved_len: moved block length * * Check the arguments of ext4_move_extents() whether the files can be * exchanged with each other. @@ -970,18 +944,17 @@ */ static int mext_check_arguments(struct inode *orig_inode, - struct inode *donor_inode, __u64 orig_start, - __u64 donor_start, __u64 *len, __u64 moved_len) + struct inode *donor_inode, __u64 orig_start, + __u64 donor_start, __u64 *len) { ext4_lblk_t orig_blocks, donor_blocks; unsigned int blkbits = orig_inode->i_blkbits; unsigned int blocksize = 1 << blkbits; - /* Regular file check */ - if (!S_ISREG(orig_inode->i_mode) || !S_ISREG(donor_inode->i_mode)) { - ext4_debug("ext4 move extent: The argument files should be " - "regular file [ino:orig %lu, donor %lu]\n", - orig_inode->i_ino, donor_inode->i_ino); + if (donor_inode->i_mode & (S_ISUID|S_ISGID)) { + ext4_debug("ext4 move extent: suid or sgid is set" + " to donor file [ino:orig %lu, donor %lu]\n", + orig_inode->i_ino, donor_inode->i_ino); return -EINVAL; } @@ -1002,11 +975,11 @@ } /* Ext4 move extent supports only extent based file */ - if (!(EXT4_I(orig_inode)->i_flags & EXT4_EXTENTS_FL)) { + if (!(ext4_test_inode_flag(orig_inode, EXT4_INODE_EXTENTS))) { ext4_debug("ext4 move extent: orig file is not extents " "based file [ino:orig %lu]\n", orig_inode->i_ino); return -EOPNOTSUPP; - } else if (!(EXT4_I(donor_inode)->i_flags & EXT4_EXTENTS_FL)) { + } else if (!(ext4_test_inode_flag(donor_inode, EXT4_INODE_EXTENTS))) { ext4_debug("ext4 move extent: donor file is not extents " "based file [ino:donor %lu]\n", donor_inode->i_ino); return -EOPNOTSUPP; @@ -1025,13 +998,6 @@ return -EINVAL; } - if (moved_len) { - ext4_debug("ext4 move extent: moved_len should be 0 " - "[ino:orig %lu, donor %lu]\n", orig_inode->i_ino, - donor_inode->i_ino); - return -EINVAL; - } - if ((orig_start > EXT_MAX_BLOCK) || (donor_start > EXT_MAX_BLOCK) || (*len > EXT_MAX_BLOCK) || @@ -1232,16 +1198,24 @@ return -EINVAL; } - /* protect orig and donor against a truncate */ + /* Regular file check */ + if (!S_ISREG(orig_inode->i_mode) || !S_ISREG(donor_inode->i_mode)) { + ext4_debug("ext4 move extent: The argument files should be " + "regular file [ino:orig %lu, donor %lu]\n", + orig_inode->i_ino, donor_inode->i_ino); + return -EINVAL; + } + + /* Protect orig and donor inodes against a truncate */ ret1 = mext_inode_double_lock(orig_inode, donor_inode); if (ret1 < 0) return ret1; - mext_double_down_read(orig_inode, donor_inode); + /* Protect extent tree against block allocations via delalloc */ + double_down_write_data_sem(orig_inode, donor_inode); /* Check the filesystem environment whether move_extent can be done */ ret1 = mext_check_arguments(orig_inode, donor_inode, orig_start, - donor_start, &len, *moved_len); - mext_double_up_read(orig_inode, donor_inode); + donor_start, &len); if (ret1) goto out; @@ -1355,36 +1329,39 @@ seq_start = le32_to_cpu(ext_cur->ee_block); rest_blocks = seq_blocks; - /* Discard preallocations of two inodes */ - down_write(&EXT4_I(orig_inode)->i_data_sem); - ext4_discard_preallocations(orig_inode); - up_write(&EXT4_I(orig_inode)->i_data_sem); - - down_write(&EXT4_I(donor_inode)->i_data_sem); - ext4_discard_preallocations(donor_inode); - up_write(&EXT4_I(donor_inode)->i_data_sem); + /* + * Up semaphore to avoid following problems: + * a. transaction deadlock among ext4_journal_start, + * ->write_begin via pagefault, and jbd2_journal_commit + * b. racing with ->readpage, ->write_begin, and ext4_get_block + * in move_extent_per_page + */ + double_up_write_data_sem(orig_inode, donor_inode); while (orig_page_offset <= seq_end_page) { /* Swap original branches with new branches */ - ret1 = move_extent_per_page(o_filp, donor_inode, + block_len_in_page = move_extent_per_page( + o_filp, donor_inode, orig_page_offset, data_offset_in_page, - block_len_in_page, uninit); - if (ret1 < 0) - goto out; - orig_page_offset++; + block_len_in_page, uninit, + &ret1); + /* Count how many blocks we have exchanged */ *moved_len += block_len_in_page; + if (ret1 < 0) + break; if (*moved_len > len) { ext4_error(orig_inode->i_sb, __func__, "We replaced blocks too much! " "sum of replaced: %llu requested: %llu", *moved_len, len); ret1 = -EIO; - goto out; + break; } + orig_page_offset++; data_offset_in_page = 0; rest_blocks -= block_len_in_page; if (rest_blocks > blocks_per_page) @@ -1393,6 +1370,10 @@ block_len_in_page = rest_blocks; } + double_down_write_data_sem(orig_inode, donor_inode); + if (ret1 < 0) + break; + /* Decrease buffer counter */ if (holecheck_path) ext4_ext_drop_refs(holecheck_path); @@ -1414,6 +1395,11 @@ } out: + if (*moved_len) { + ext4_discard_preallocations(orig_inode); + ext4_discard_preallocations(donor_inode); + } + if (orig_path) { ext4_ext_drop_refs(orig_path); kfree(orig_path); @@ -1422,7 +1408,7 @@ ext4_ext_drop_refs(holecheck_path); kfree(holecheck_path); } - + double_up_write_data_sem(orig_inode, donor_inode); ret2 = mext_inode_double_unlock(orig_inode, donor_inode); if (ret1) --- linux-2.6.32.orig/fs/ext4/inode.c +++ linux-2.6.32/fs/ext4/inode.c @@ -957,7 +957,7 @@ int count = 0; ext4_fsblk_t first_block = 0; - J_ASSERT(!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)); + J_ASSERT(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); J_ASSERT(handle != NULL || (flags & EXT4_GET_BLOCKS_CREATE) == 0); depth = ext4_block_to_path(inode, iblock, offsets, &blocks_to_boundary); @@ -1021,10 +1021,12 @@ if (!err) err = ext4_splice_branch(handle, inode, iblock, partial, indirect_blks, count); - else + if (err) goto cleanup; set_buffer_new(bh_result); + + ext4_update_inode_fsync_trans(handle, inode, 1); got_it: map_bh(bh_result, inode->i_sb, le32_to_cpu(chain[depth-1].key)); if (count > blocks_to_boundary) @@ -1043,92 +1045,121 @@ return err; } -qsize_t ext4_get_reserved_space(struct inode *inode) +#ifdef CONFIG_QUOTA +qsize_t *ext4_get_reserved_space(struct inode *inode) { - unsigned long long total; - - spin_lock(&EXT4_I(inode)->i_block_reservation_lock); - total = EXT4_I(inode)->i_reserved_data_blocks + - EXT4_I(inode)->i_reserved_meta_blocks; - spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); - - return total; + return &EXT4_I(inode)->i_reserved_quota; } +#endif + /* * Calculate the number of metadata blocks need to reserve - * to allocate @blocks for non extent file based file + * to allocate a new block at @lblocks for non extent file based file */ -static int ext4_indirect_calc_metadata_amount(struct inode *inode, int blocks) +static int ext4_indirect_calc_metadata_amount(struct inode *inode, + sector_t lblock) { - int icap = EXT4_ADDR_PER_BLOCK(inode->i_sb); - int ind_blks, dind_blks, tind_blks; - - /* number of new indirect blocks needed */ - ind_blks = (blocks + icap - 1) / icap; + struct ext4_inode_info *ei = EXT4_I(inode); + sector_t dind_mask = ~((sector_t)EXT4_ADDR_PER_BLOCK(inode->i_sb) - 1); + int blk_bits; - dind_blks = (ind_blks + icap - 1) / icap; + if (lblock < EXT4_NDIR_BLOCKS) + return 0; - tind_blks = 1; + lblock -= EXT4_NDIR_BLOCKS; - return ind_blks + dind_blks + tind_blks; + if (ei->i_da_metadata_calc_len && + (lblock & dind_mask) == ei->i_da_metadata_calc_last_lblock) { + ei->i_da_metadata_calc_len++; + return 0; + } + ei->i_da_metadata_calc_last_lblock = lblock & dind_mask; + ei->i_da_metadata_calc_len = 1; + blk_bits = order_base_2(lblock); + return (blk_bits / EXT4_ADDR_PER_BLOCK_BITS(inode->i_sb)) + 1; } /* * Calculate the number of metadata blocks need to reserve - * to allocate given number of blocks + * to allocate a block located at @lblock */ -static int ext4_calc_metadata_amount(struct inode *inode, int blocks) +static int ext4_calc_metadata_amount(struct inode *inode, sector_t lblock) { - if (!blocks) - return 0; - - if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) - return ext4_ext_calc_metadata_amount(inode, blocks); + if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) + return ext4_ext_calc_metadata_amount(inode, lblock); - return ext4_indirect_calc_metadata_amount(inode, blocks); + return ext4_indirect_calc_metadata_amount(inode, lblock); } -static void ext4_da_update_reserve_space(struct inode *inode, int used) +/* + * Called with i_data_sem down, which is important since we can call + * ext4_discard_preallocations() from here. + */ +void ext4_da_update_reserve_space(struct inode *inode, + int used, int quota_claim) { struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); - int total, mdb, mdb_free; + struct ext4_inode_info *ei = EXT4_I(inode); + int mdb_free = 0, allocated_meta_blocks = 0; - spin_lock(&EXT4_I(inode)->i_block_reservation_lock); - /* recalculate the number of metablocks still need to be reserved */ - total = EXT4_I(inode)->i_reserved_data_blocks - used; - mdb = ext4_calc_metadata_amount(inode, total); - - /* figure out how many metablocks to release */ - BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks); - mdb_free = EXT4_I(inode)->i_reserved_meta_blocks - mdb; - - if (mdb_free) { - /* Account for allocated meta_blocks */ - mdb_free -= EXT4_I(inode)->i_allocated_meta_blocks; + spin_lock(&ei->i_block_reservation_lock); + if (unlikely(used > ei->i_reserved_data_blocks)) { + ext4_msg(inode->i_sb, KERN_NOTICE, "%s: ino %lu, used %d " + "with only %d reserved data blocks\n", + __func__, inode->i_ino, used, + ei->i_reserved_data_blocks); + WARN_ON(1); + used = ei->i_reserved_data_blocks; + } + + /* Update per-inode reservations */ + ei->i_reserved_data_blocks -= used; + used += ei->i_allocated_meta_blocks; + ei->i_reserved_meta_blocks -= ei->i_allocated_meta_blocks; + allocated_meta_blocks = ei->i_allocated_meta_blocks; + ei->i_allocated_meta_blocks = 0; + percpu_counter_sub(&sbi->s_dirtyblocks_counter, used); - /* update fs dirty blocks counter */ + if (ei->i_reserved_data_blocks == 0) { + /* + * We can release all of the reserved metadata blocks + * only when we have written all of the delayed + * allocation blocks. + */ + mdb_free = ei->i_reserved_meta_blocks; + ei->i_reserved_meta_blocks = 0; + ei->i_da_metadata_calc_len = 0; percpu_counter_sub(&sbi->s_dirtyblocks_counter, mdb_free); - EXT4_I(inode)->i_allocated_meta_blocks = 0; - EXT4_I(inode)->i_reserved_meta_blocks = mdb; } - - /* update per-inode reservations */ - BUG_ON(used > EXT4_I(inode)->i_reserved_data_blocks); - EXT4_I(inode)->i_reserved_data_blocks -= used; spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); - /* - * free those over-booking quota for metadata blocks - */ - if (mdb_free) - vfs_dq_release_reservation_block(inode, mdb_free); + /* Update quota subsystem */ + if (quota_claim) { + vfs_dq_claim_block(inode, used); + if (mdb_free) + vfs_dq_release_reservation_block(inode, mdb_free); + } else { + /* + * We did fallocate with an offset that is already delayed + * allocated. So on delayed allocated writeback we should + * not update the quota for allocated blocks. But then + * converting an fallocate region to initialized region would + * have caused a metadata allocation. So claim quota for + * that + */ + if (allocated_meta_blocks) + vfs_dq_claim_block(inode, allocated_meta_blocks); + vfs_dq_release_reservation_block(inode, mdb_free + used - + allocated_meta_blocks); + } /* * If we have done all the pending block allocations and if * there aren't any writers on the inode, we can discard the * inode's preallocations. */ - if (!total && (atomic_read(&inode->i_writecount) == 0)) + if ((ei->i_reserved_data_blocks == 0) && + (atomic_read(&inode->i_writecount) == 0)) ext4_discard_preallocations(inode); } @@ -1243,7 +1274,7 @@ * file system block. */ down_read((&EXT4_I(inode)->i_data_sem)); - if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) { + if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { retval = ext4_ext_get_blocks(handle, inode, block, max_blocks, bh, 0); } else { @@ -1305,7 +1336,7 @@ * We need to check for EXT4 here because migrate * could have changed the inode type in between */ - if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) { + if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { retval = ext4_ext_get_blocks(handle, inode, block, max_blocks, bh, flags); } else { @@ -1318,20 +1349,22 @@ * i_data's format changing. Force the migrate * to fail by clearing migrate flags */ - EXT4_I(inode)->i_state &= ~EXT4_STATE_EXT_MIGRATE; + ext4_clear_inode_state(inode, EXT4_STATE_EXT_MIGRATE); } - } + /* + * Update reserved blocks/metadata blocks after successful + * block allocation which had been deferred till now. We don't + * support fallocate for non extent files. So we can update + * reserve space here. + */ + if ((retval > 0) && + (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE)) + ext4_da_update_reserve_space(inode, retval, 1); + } if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) EXT4_I(inode)->i_delalloc_reserved_flag = 0; - /* - * Update reserved blocks/metadata blocks after successful - * block allocation which had been deferred till now. - */ - if ((retval > 0) && (flags & EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE)) - ext4_da_update_reserve_space(inode, retval); - up_write((&EXT4_I(inode)->i_data_sem)); if (retval > 0 && buffer_mapped(bh)) { int ret = check_block_validity(inode, "file system " @@ -1534,6 +1567,16 @@ return ext4_journal_get_write_access(handle, bh); } +/* + * Truncate blocks that were not used by write. We have to truncate the + * pagecache as well so that corresponding buffers get properly unmapped. + */ +static void ext4_truncate_failed_write(struct inode *inode) +{ + truncate_inode_pages(inode->i_mapping, inode->i_size); + ext4_truncate(inode); +} + static int ext4_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned flags, struct page **pagep, void **fsdata) @@ -1599,7 +1642,7 @@ ext4_journal_stop(handle); if (pos + len > inode->i_size) { - ext4_truncate(inode); + ext4_truncate_failed_write(inode); /* * If truncate failed early the inode might * still be on the orphan list; we need to @@ -1709,7 +1752,7 @@ ret = ret2; if (pos + len > inode->i_size) { - ext4_truncate(inode); + ext4_truncate_failed_write(inode); /* * If truncate failed early the inode might still be * on the orphan list; we need to make sure the inode @@ -1751,7 +1794,7 @@ ret = ret2; if (pos + len > inode->i_size) { - ext4_truncate(inode); + ext4_truncate_failed_write(inode); /* * If truncate failed early the inode might still be * on the orphan list; we need to make sure the inode @@ -1793,7 +1836,7 @@ new_i_size = pos + copied; if (new_i_size > inode->i_size) i_size_write(inode, pos+copied); - EXT4_I(inode)->i_state |= EXT4_STATE_JDATA; + ext4_set_inode_state(inode, EXT4_STATE_JDATA); if (new_i_size > EXT4_I(inode)->i_disksize) { ext4_update_i_disksize(inode, new_i_size); ret2 = ext4_mark_inode_dirty(handle, inode); @@ -1814,7 +1857,7 @@ if (!ret) ret = ret2; if (pos + len > inode->i_size) { - ext4_truncate(inode); + ext4_truncate_failed_write(inode); /* * If truncate failed early the inode might still be * on the orphan list; we need to make sure the inode @@ -1827,11 +1870,15 @@ return ret ? ret : copied; } -static int ext4_da_reserve_space(struct inode *inode, int nrblocks) +/* + * Reserve a single block located at lblock + */ +static int ext4_da_reserve_space(struct inode *inode, sector_t lblock) { int retries = 0; struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); - unsigned long md_needed, mdblocks, total = 0; + struct ext4_inode_info *ei = EXT4_I(inode); + unsigned long md_needed, md_reserved; /* * recalculate the amount of metadata blocks to reserve @@ -1839,86 +1886,78 @@ * worse case is one extent per block */ repeat: - spin_lock(&EXT4_I(inode)->i_block_reservation_lock); - total = EXT4_I(inode)->i_reserved_data_blocks + nrblocks; - mdblocks = ext4_calc_metadata_amount(inode, total); - BUG_ON(mdblocks < EXT4_I(inode)->i_reserved_meta_blocks); - - md_needed = mdblocks - EXT4_I(inode)->i_reserved_meta_blocks; - total = md_needed + nrblocks; + spin_lock(&ei->i_block_reservation_lock); + md_reserved = ei->i_reserved_meta_blocks; + md_needed = ext4_calc_metadata_amount(inode, lblock); + spin_unlock(&ei->i_block_reservation_lock); /* * Make quota reservation here to prevent quota overflow * later. Real quota accounting is done at pages writeout * time. */ - if (vfs_dq_reserve_block(inode, total)) { - spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); + if (vfs_dq_reserve_block(inode, md_needed + 1)) return -EDQUOT; - } - if (ext4_claim_free_blocks(sbi, total)) { - spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); - vfs_dq_release_reservation_block(inode, total); + if (ext4_claim_free_blocks(sbi, md_needed + 1)) { + vfs_dq_release_reservation_block(inode, md_needed + 1); if (ext4_should_retry_alloc(inode->i_sb, &retries)) { yield(); goto repeat; } return -ENOSPC; } - EXT4_I(inode)->i_reserved_data_blocks += nrblocks; - EXT4_I(inode)->i_reserved_meta_blocks = mdblocks; + spin_lock(&ei->i_block_reservation_lock); + ei->i_reserved_data_blocks++; + ei->i_reserved_meta_blocks += md_needed; + spin_unlock(&ei->i_block_reservation_lock); - spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); return 0; /* success */ } static void ext4_da_release_space(struct inode *inode, int to_free) { struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); - int total, mdb, mdb_free, release; + struct ext4_inode_info *ei = EXT4_I(inode); if (!to_free) return; /* Nothing to release, exit */ spin_lock(&EXT4_I(inode)->i_block_reservation_lock); - if (!EXT4_I(inode)->i_reserved_data_blocks) { + if (unlikely(to_free > ei->i_reserved_data_blocks)) { /* - * if there is no reserved blocks, but we try to free some - * then the counter is messed up somewhere. - * but since this function is called from invalidate - * page, it's harmless to return without any action - */ - printk(KERN_INFO "ext4 delalloc try to release %d reserved " - "blocks for inode %lu, but there is no reserved " - "data blocks\n", to_free, inode->i_ino); - spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); - return; + * if there aren't enough reserved blocks, then the + * counter is messed up somewhere. Since this + * function is called from invalidate page, it's + * harmless to return without any action. + */ + ext4_msg(inode->i_sb, KERN_NOTICE, "ext4_da_release_space: " + "ino %lu, to_free %d with only %d reserved " + "data blocks\n", inode->i_ino, to_free, + ei->i_reserved_data_blocks); + WARN_ON(1); + to_free = ei->i_reserved_data_blocks; } + ei->i_reserved_data_blocks -= to_free; - /* recalculate the number of metablocks still need to be reserved */ - total = EXT4_I(inode)->i_reserved_data_blocks - to_free; - mdb = ext4_calc_metadata_amount(inode, total); - - /* figure out how many metablocks to release */ - BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks); - mdb_free = EXT4_I(inode)->i_reserved_meta_blocks - mdb; - - release = to_free + mdb_free; - - /* update fs dirty blocks counter for truncate case */ - percpu_counter_sub(&sbi->s_dirtyblocks_counter, release); + if (ei->i_reserved_data_blocks == 0) { + /* + * We can release all of the reserved metadata blocks + * only when we have written all of the delayed + * allocation blocks. + */ + to_free += ei->i_reserved_meta_blocks; + ei->i_reserved_meta_blocks = 0; + ei->i_da_metadata_calc_len = 0; + } - /* update per-inode reservations */ - BUG_ON(to_free > EXT4_I(inode)->i_reserved_data_blocks); - EXT4_I(inode)->i_reserved_data_blocks -= to_free; + /* update fs dirty blocks counter */ + percpu_counter_sub(&sbi->s_dirtyblocks_counter, to_free); - BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks); - EXT4_I(inode)->i_reserved_meta_blocks = mdb; spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); - vfs_dq_release_reservation_block(inode, release); + vfs_dq_release_reservation_block(inode, to_free); } static void ext4_da_page_release_reservation(struct page *page, @@ -2223,10 +2262,10 @@ * variables are updated after the blocks have been allocated. */ new.b_state = 0; - get_blocks_flags = (EXT4_GET_BLOCKS_CREATE | - EXT4_GET_BLOCKS_DELALLOC_RESERVE); + get_blocks_flags = EXT4_GET_BLOCKS_CREATE; if (mpd->b_state & (1 << BH_Delay)) - get_blocks_flags |= EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE; + get_blocks_flags |= EXT4_GET_BLOCKS_DELALLOC_RESERVE; + blks = ext4_get_blocks(handle, mpd->inode, next, max_blocks, &new, get_blocks_flags); if (blks < 0) { @@ -2255,7 +2294,7 @@ ext4_msg(mpd->inode->i_sb, KERN_CRIT, "delayed block allocation failed for inode %lu at " "logical offset %llu with max blocks %zd with " - "error %d\n", mpd->inode->i_ino, + "error %d", mpd->inode->i_ino, (unsigned long long) next, mpd->b_size >> mpd->inode->i_blkbits, err); printk(KERN_CRIT "This should not happen!! " @@ -2322,8 +2361,17 @@ sector_t next; int nrblocks = mpd->b_size >> mpd->inode->i_blkbits; + /* + * XXX Don't go larger than mballoc is willing to allocate + * This is a stopgap solution. We eventually need to fold + * mpage_da_submit_io() into this function and then call + * ext4_get_blocks() multiple times in a loop + */ + if (nrblocks >= 8*1024*1024/mpd->inode->i_sb->s_blocksize) + goto flush_it; + /* check if thereserved journal credits might overflow */ - if (!(EXT4_I(mpd->inode)->i_flags & EXT4_EXTENTS_FL)) { + if (!(ext4_test_inode_flag(mpd->inode, EXT4_INODE_EXTENTS))) { if (nrblocks >= EXT4_MAX_TRANS_DATA) { /* * With non-extent format we are limited by the journal @@ -2524,7 +2572,7 @@ * XXX: __block_prepare_write() unmaps passed block, * is it OK? */ - ret = ext4_da_reserve_space(inode, 1); + ret = ext4_da_reserve_space(inode, iblock); if (ret) /* not enough space to reserve */ return ret; @@ -2635,7 +2683,7 @@ ret = err; walk_page_buffers(handle, page_bufs, 0, len, NULL, bput_one); - EXT4_I(inode)->i_state |= EXT4_STATE_JDATA; + ext4_set_inode_state(inode, EXT4_STATE_JDATA); out: return ret; } @@ -2788,7 +2836,7 @@ * number of contiguous block. So we will limit * number of contiguous block to a sane value */ - if (!(inode->i_flags & EXT4_EXTENTS_FL) && + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) && (max_blocks > EXT4_MAX_TRANS_DATA)) max_blocks = EXT4_MAX_TRANS_DATA; @@ -2908,7 +2956,7 @@ if (IS_ERR(handle)) { ret = PTR_ERR(handle); ext4_msg(inode->i_sb, KERN_CRIT, "%s: jbd2_start: " - "%ld pages, ino %lu; err %d\n", __func__, + "%ld pages, ino %lu; err %d", __func__, wbc->nr_to_write, inode->i_ino, ret); goto out_writepages; } @@ -2983,7 +3031,7 @@ if (pages_skipped != wbc->pages_skipped) ext4_msg(inode->i_sb, KERN_CRIT, "This should not happen leaving %s " - "with nr_to_write = %ld ret = %d\n", + "with nr_to_write = %ld ret = %d", __func__, wbc->nr_to_write, ret); /* Update index */ @@ -2999,8 +3047,7 @@ out_writepages: if (!no_nrwrite_index_update) wbc->no_nrwrite_index_update = 0; - if (wbc->nr_to_write > nr_to_writebump) - wbc->nr_to_write -= nr_to_writebump; + wbc->nr_to_write -= nr_to_writebump; wbc->range_start = range_start; trace_ext4_da_writepages_result(inode, wbc, ret, pages_written); return ret; @@ -3025,11 +3072,18 @@ if (2 * free_blocks < 3 * dirty_blocks || free_blocks < (dirty_blocks + EXT4_FREEBLOCKS_WATERMARK)) { /* - * free block count is less that 150% of dirty blocks - * or free blocks is less that watermark + * free block count is less than 150% of dirty blocks + * or free blocks is less than watermark */ return 1; } + /* + * Even if we don't switch but are nearing capacity, + * start pushing delalloc when 1/2 of free blocks are dirty. + */ + if (free_blocks < 2 * dirty_blocks) + writeback_inodes_sb_if_idle(sb); + return 0; } @@ -3037,7 +3091,7 @@ loff_t pos, unsigned len, unsigned flags, struct page **pagep, void **fsdata) { - int ret, retries = 0; + int ret, retries = 0, quota_retries = 0; struct page *page; pgoff_t index; unsigned from, to; @@ -3091,11 +3145,27 @@ * i_size_read because we hold i_mutex. */ if (pos + len > inode->i_size) - ext4_truncate(inode); + ext4_truncate_failed_write(inode); } if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) goto retry; + + if ((ret == -EDQUOT) && + EXT4_I(inode)->i_reserved_meta_blocks && + (quota_retries++ < 3)) { + /* + * Since we often over-estimate the number of meta + * data blocks required, we may sometimes get a + * spurios out of quota error even though there would + * be enough space once we write the data blocks and + * find out how many meta data blocks were _really_ + * required. So try forcing the inode write to see if + * that helps. + */ + write_inode_now(inode, (quota_retries == 3)); + goto retry; + } out: return ret; } @@ -3284,7 +3354,8 @@ filemap_write_and_wait(mapping); } - if (EXT4_JOURNAL(inode) && EXT4_I(inode)->i_state & EXT4_STATE_JDATA) { + if (EXT4_JOURNAL(inode) && + ext4_test_inode_state(inode, EXT4_STATE_JDATA)) { /* * This is a REALLY heavyweight approach, but the use of * bmap on dirty files is expected to be extremely rare: @@ -3303,7 +3374,7 @@ * everything they get. */ - EXT4_I(inode)->i_state &= ~EXT4_STATE_JDATA; + ext4_clear_inode_state(inode, EXT4_STATE_JDATA); journal = EXT4_JOURNAL(inode); jbd2_journal_lock_updates(journal); err = jbd2_journal_flush(journal); @@ -3419,6 +3490,9 @@ * but cannot extend i_size. Bail out and pretend * the write failed... */ ret = PTR_ERR(handle); + if (inode->i_nlink) + ext4_orphan_del(NULL, inode); + goto out; } if (inode->i_nlink) @@ -3534,7 +3608,7 @@ { struct inode *inode = io->inode; loff_t offset = io->offset; - size_t size = io->size; + ssize_t size = io->size; int ret = 0; ext4_debug("end_aio_dio_onlock: io 0x%p from inode %lu,list->next 0x%p," @@ -3771,8 +3845,8 @@ if (ret != -EIOCBQUEUED && ret <= 0 && iocb->private) { ext4_free_io_end(iocb->private); iocb->private = NULL; - } else if (ret > 0 && (EXT4_I(inode)->i_state & - EXT4_STATE_DIO_UNWRITTEN)) { + } else if (ret > 0 && ext4_test_inode_state(inode, + EXT4_STATE_DIO_UNWRITTEN)) { int err; /* * for non AIO case, since the IO is already @@ -3782,7 +3856,7 @@ offset, ret); if (err < 0) ret = err; - EXT4_I(inode)->i_state &= ~EXT4_STATE_DIO_UNWRITTEN; + ext4_clear_inode_state(inode, EXT4_STATE_DIO_UNWRITTEN); } return ret; } @@ -3798,7 +3872,7 @@ struct file *file = iocb->ki_filp; struct inode *inode = file->f_mapping->host; - if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) + if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) return ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); return ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); @@ -4120,6 +4194,8 @@ __le32 *last) { __le32 *p; + int is_metadata = S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode); + if (try_to_extend_transaction(handle, inode)) { if (bh) { BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); @@ -4150,11 +4226,11 @@ *p = 0; tbh = sb_find_get_block(inode->i_sb, nr); - ext4_forget(handle, 0, inode, tbh, nr); + ext4_forget(handle, is_metadata, inode, tbh, nr); } } - ext4_free_blocks(handle, inode, block_to_free, count, 0); + ext4_free_blocks(handle, inode, block_to_free, count, is_metadata); } /** @@ -4427,10 +4503,12 @@ if (!ext4_can_truncate(inode)) return; + ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS); + if (inode->i_size == 0 && !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC)) - ei->i_state |= EXT4_STATE_DA_ALLOC_CLOSE; + ext4_set_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE); - if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) { + if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { ext4_ext_truncate(inode); return; } @@ -4714,7 +4792,7 @@ { /* We have all inode data except xattrs in memory here. */ return __ext4_get_inode_loc(inode, iloc, - !(EXT4_I(inode)->i_state & EXT4_STATE_XATTR)); + !ext4_test_inode_state(inode, EXT4_STATE_XATTR)); } void ext4_set_inode_flags(struct inode *inode) @@ -4781,8 +4859,8 @@ struct ext4_iloc iloc; struct ext4_inode *raw_inode; struct ext4_inode_info *ei; - struct buffer_head *bh; struct inode *inode; + journal_t *journal = EXT4_SB(sb)->s_journal; long ret; int block; @@ -4793,11 +4871,11 @@ return inode; ei = EXT4_I(inode); + iloc.bh = 0; ret = __ext4_get_inode_loc(inode, &iloc, 0); if (ret < 0) goto bad_inode; - bh = iloc.bh; raw_inode = ext4_raw_inode(&iloc); inode->i_mode = le16_to_cpu(raw_inode->i_mode); inode->i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low); @@ -4808,7 +4886,7 @@ } inode->i_nlink = le16_to_cpu(raw_inode->i_links_count); - ei->i_state = 0; + ei->i_state_flags = 0; ei->i_dir_start_lookup = 0; ei->i_dtime = le32_to_cpu(raw_inode->i_dtime); /* We now have enough fields to check if the inode was active or not. @@ -4820,7 +4898,6 @@ if (inode->i_mode == 0 || !(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) { /* this inode is deleted */ - brelse(bh); ret = -ESTALE; goto bad_inode; } @@ -4837,6 +4914,9 @@ ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32; inode->i_size = ext4_isize(raw_inode); ei->i_disksize = inode->i_size; +#ifdef CONFIG_QUOTA + ei->i_reserved_quota = 0; +#endif inode->i_generation = le32_to_cpu(raw_inode->i_generation); ei->i_block_group = iloc.block_group; ei->i_last_alloc_group = ~0; @@ -4848,11 +4928,35 @@ ei->i_data[block] = raw_inode->i_block[block]; INIT_LIST_HEAD(&ei->i_orphan); + /* + * Set transaction id's of transactions that have to be committed + * to finish f[data]sync. We set them to currently running transaction + * as we cannot be sure that the inode or some of its metadata isn't + * part of the transaction - the inode could have been reclaimed and + * now it is reread from disk. + */ + if (journal) { + transaction_t *transaction; + tid_t tid; + + spin_lock(&journal->j_state_lock); + if (journal->j_running_transaction) + transaction = journal->j_running_transaction; + else + transaction = journal->j_committing_transaction; + if (transaction) + tid = transaction->t_tid; + else + tid = journal->j_commit_sequence; + spin_unlock(&journal->j_state_lock); + ei->i_sync_tid = tid; + ei->i_datasync_tid = tid; + } + if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize); if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize > EXT4_INODE_SIZE(inode->i_sb)) { - brelse(bh); ret = -EIO; goto bad_inode; } @@ -4865,7 +4969,7 @@ EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize; if (*magic == cpu_to_le32(EXT4_XATTR_MAGIC)) - ei->i_state |= EXT4_STATE_XATTR; + ext4_set_inode_state(inode, EXT4_STATE_XATTR); } } else ei->i_extra_isize = 0; @@ -4884,10 +4988,7 @@ ret = 0; if (ei->i_file_acl && - ((ei->i_file_acl < - (le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block) + - EXT4_SB(sb)->s_gdb_count)) || - (ei->i_file_acl >= ext4_blocks_count(EXT4_SB(sb)->s_es)))) { + !ext4_data_block_valid(EXT4_SB(sb), ei->i_file_acl, 1)) { ext4_error(sb, __func__, "bad extended attribute block %llu in inode #%lu", ei->i_file_acl, inode->i_ino); @@ -4905,10 +5006,8 @@ /* Validate block references which are part of inode */ ret = ext4_check_inode_blockref(inode); } - if (ret) { - brelse(bh); + if (ret) goto bad_inode; - } if (S_ISREG(inode->i_mode)) { inode->i_op = &ext4_file_inode_operations; @@ -4936,7 +5035,6 @@ init_special_inode(inode, inode->i_mode, new_decode_dev(le32_to_cpu(raw_inode->i_block[1]))); } else { - brelse(bh); ret = -EIO; ext4_error(inode->i_sb, __func__, "bogus i_mode (%o) for inode=%lu", @@ -4949,6 +5047,7 @@ return inode; bad_inode: + brelse(iloc.bh); iget_failed(inode); return ERR_PTR(ret); } @@ -5010,7 +5109,7 @@ /* For fields not not tracking in the in-memory inode, * initialise them to zero for new inodes. */ - if (ei->i_state & EXT4_STATE_NEW) + if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); ext4_get_inode_flags(ei); @@ -5074,7 +5173,7 @@ EXT4_FEATURE_RO_COMPAT_LARGE_FILE); sb->s_dirt = 1; ext4_handle_sync(handle); - err = ext4_handle_dirty_metadata(handle, inode, + err = ext4_handle_dirty_metadata(handle, NULL, EXT4_SB(sb)->s_sbh); } } @@ -5103,11 +5202,12 @@ } BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); - rc = ext4_handle_dirty_metadata(handle, inode, bh); + rc = ext4_handle_dirty_metadata(handle, NULL, bh); if (!err) err = rc; - ei->i_state &= ~EXT4_STATE_NEW; + ext4_clear_inode_state(inode, EXT4_STATE_NEW); + ext4_update_inode_fsync_trans(handle, inode, 0); out_brelse: brelse(bh); ext4_std_error(inode->i_sb, err); @@ -5170,7 +5270,7 @@ } else { struct ext4_iloc iloc; - err = ext4_get_inode_loc(inode, &iloc); + err = __ext4_get_inode_loc(inode, &iloc, 0); if (err) return err; if (wait) @@ -5183,6 +5283,7 @@ (unsigned long long)iloc.bh->b_blocknr); err = -EIO; } + brelse(iloc.bh); } return err; } @@ -5227,8 +5328,8 @@ /* (user+group)*(old+new) structure, inode write (sb, * inode block, ? - but truncate inode update has it) */ - handle = ext4_journal_start(inode, 2*(EXT4_QUOTA_INIT_BLOCKS(inode->i_sb)+ - EXT4_QUOTA_DEL_BLOCKS(inode->i_sb))+3); + handle = ext4_journal_start(inode, (EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb)+ + EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb))+3); if (IS_ERR(handle)) { error = PTR_ERR(handle); goto err_out; @@ -5249,7 +5350,7 @@ } if (attr->ia_valid & ATTR_SIZE) { - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) { + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); if (attr->ia_size > sbi->s_bitmap_maxbytes) { @@ -5260,7 +5361,9 @@ } if (S_ISREG(inode->i_mode) && - attr->ia_valid & ATTR_SIZE && attr->ia_size < inode->i_size) { + attr->ia_valid & ATTR_SIZE && + (attr->ia_size < inode->i_size || + (ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS)))) { handle_t *handle; handle = ext4_journal_start(inode, 3); @@ -5291,6 +5394,9 @@ goto err_out; } } + /* ext4_truncate will clear the flag */ + if ((ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS))) + ext4_truncate(inode); } rc = inode_setattr(inode, attr); @@ -5365,7 +5471,7 @@ static int ext4_index_trans_blocks(struct inode *inode, int nrblocks, int chunk) { - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) return ext4_indirect_trans_blocks(inode, nrblocks, chunk); return ext4_ext_index_trans_blocks(inode, nrblocks, chunk); } @@ -5529,8 +5635,8 @@ entry = IFIRST(header); /* No extended attributes present */ - if (!(EXT4_I(inode)->i_state & EXT4_STATE_XATTR) || - header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) { + if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) || + header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) { memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE, 0, new_extra_isize); EXT4_I(inode)->i_extra_isize = new_extra_isize; @@ -5574,7 +5680,7 @@ err = ext4_reserve_inode_write(handle, inode, &iloc); if (ext4_handle_valid(handle) && EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize && - !(EXT4_I(inode)->i_state & EXT4_STATE_NO_EXPAND)) { + !ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND)) { /* * We need extra buffer credits since we may write into EA block * with this same handle. If journal_extend fails, then it will @@ -5588,7 +5694,8 @@ sbi->s_want_extra_isize, iloc, handle); if (ret) { - EXT4_I(inode)->i_state |= EXT4_STATE_NO_EXPAND; + ext4_set_inode_state(inode, + EXT4_STATE_NO_EXPAND); if (mnt_count != le16_to_cpu(sbi->s_es->s_mnt_count)) { ext4_warning(inode->i_sb, __func__, @@ -5655,7 +5762,7 @@ err = jbd2_journal_get_write_access(handle, iloc.bh); if (!err) err = ext4_handle_dirty_metadata(handle, - inode, + NULL, iloc.bh); brelse(iloc.bh); } @@ -5699,9 +5806,9 @@ */ if (val) - EXT4_I(inode)->i_flags |= EXT4_JOURNAL_DATA_FL; + ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA); else - EXT4_I(inode)->i_flags &= ~EXT4_JOURNAL_DATA_FL; + ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA); ext4_set_aops(inode); jbd2_journal_unlock_updates(journal); --- linux-2.6.32.orig/fs/ext4/ext4_jbd2.h +++ linux-2.6.32/fs/ext4/ext4_jbd2.h @@ -49,7 +49,7 @@ #define EXT4_DATA_TRANS_BLOCKS(sb) (EXT4_SINGLEDATA_TRANS_BLOCKS(sb) + \ EXT4_XATTR_TRANS_BLOCKS - 2 + \ - 2*EXT4_QUOTA_TRANS_BLOCKS(sb)) + EXT4_MAXQUOTAS_TRANS_BLOCKS(sb)) /* * Define the number of metadata blocks we need to account to modify data. @@ -57,7 +57,7 @@ * This include super block, inode block, quota blocks and xattr blocks */ #define EXT4_META_TRANS_BLOCKS(sb) (EXT4_XATTR_TRANS_BLOCKS + \ - 2*EXT4_QUOTA_TRANS_BLOCKS(sb)) + EXT4_MAXQUOTAS_TRANS_BLOCKS(sb)) /* Delete operations potentially hit one directory's namespace plus an * entire inode, plus arbitrary amounts of bitmap/indirection data. Be @@ -92,6 +92,7 @@ * but inode, sb and group updates are done only once */ #define EXT4_QUOTA_INIT_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_INIT_ALLOC*\ (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_INIT_REWRITE) : 0) + #define EXT4_QUOTA_DEL_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_DEL_ALLOC*\ (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_DEL_REWRITE) : 0) #else @@ -99,6 +100,9 @@ #define EXT4_QUOTA_INIT_BLOCKS(sb) 0 #define EXT4_QUOTA_DEL_BLOCKS(sb) 0 #endif +#define EXT4_MAXQUOTAS_TRANS_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_TRANS_BLOCKS(sb)) +#define EXT4_MAXQUOTAS_INIT_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_INIT_BLOCKS(sb)) +#define EXT4_MAXQUOTAS_DEL_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_DEL_BLOCKS(sb)) int ext4_mark_iloc_dirty(handle_t *handle, @@ -254,6 +258,19 @@ return 0; } +static inline void ext4_update_inode_fsync_trans(handle_t *handle, + struct inode *inode, + int datasync) +{ + struct ext4_inode_info *ei = EXT4_I(inode); + + if (ext4_handle_valid(handle)) { + ei->i_sync_tid = handle->h_transaction->t_tid; + if (datasync) + ei->i_datasync_tid = handle->h_transaction->t_tid; + } +} + /* super.c */ int ext4_force_commit(struct super_block *sb); @@ -265,7 +282,7 @@ return 1; if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) return 1; - if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) + if (ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) return 1; return 0; } @@ -276,7 +293,7 @@ return 0; if (!S_ISREG(inode->i_mode)) return 0; - if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) + if (ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) return 0; if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) return 1; @@ -289,7 +306,7 @@ return 0; if (EXT4_JOURNAL(inode) == NULL) return 1; - if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) + if (ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) return 0; if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) return 1; --- linux-2.6.32.orig/fs/ext4/migrate.c +++ linux-2.6.32/fs/ext4/migrate.c @@ -238,7 +238,7 @@ * So allocate a credit of 3. We may update * quota (user and group). */ - needed = 3 + 2*EXT4_QUOTA_TRANS_BLOCKS(inode->i_sb); + needed = 3 + EXT4_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb); if (ext4_journal_extend(handle, needed) != 0) retval = ext4_journal_restart(handle, needed); @@ -357,12 +357,12 @@ * happened after we started the migrate. We need to * fail the migrate */ - if (!(EXT4_I(inode)->i_state & EXT4_STATE_EXT_MIGRATE)) { + if (!ext4_test_inode_state(inode, EXT4_STATE_EXT_MIGRATE)) { retval = -EAGAIN; up_write(&EXT4_I(inode)->i_data_sem); goto err_out; } else - EXT4_I(inode)->i_state &= ~EXT4_STATE_EXT_MIGRATE; + ext4_clear_inode_state(inode, EXT4_STATE_EXT_MIGRATE); /* * We have the extent map build with the tmp inode. * Now copy the i_data across @@ -465,7 +465,7 @@ */ if (!EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb, EXT4_FEATURE_INCOMPAT_EXTENTS) || - (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) + (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) return -EINVAL; if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0) @@ -477,7 +477,7 @@ handle = ext4_journal_start(inode, EXT4_DATA_TRANS_BLOCKS(inode->i_sb) + EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 + - 2 * EXT4_QUOTA_INIT_BLOCKS(inode->i_sb) + EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) + 1); if (IS_ERR(handle)) { retval = PTR_ERR(handle); @@ -494,14 +494,10 @@ } i_size_write(tmp_inode, i_size_read(inode)); /* - * We don't want the inode to be reclaimed - * if we got interrupted in between. We have - * this tmp inode carrying reference to the - * data blocks of the original file. We set - * the i_nlink to zero at the last stage after - * switching the original file to extent format + * Set the i_nlink to zero so it will be deleted later + * when we drop inode reference. */ - tmp_inode->i_nlink = 1; + tmp_inode->i_nlink = 0; ext4_ext_tree_init(handle, tmp_inode); ext4_orphan_add(handle, tmp_inode); @@ -524,10 +520,20 @@ * allocation. */ down_read((&EXT4_I(inode)->i_data_sem)); - EXT4_I(inode)->i_state |= EXT4_STATE_EXT_MIGRATE; + ext4_set_inode_state(inode, EXT4_STATE_EXT_MIGRATE); up_read((&EXT4_I(inode)->i_data_sem)); handle = ext4_journal_start(inode, 1); + if (IS_ERR(handle)) { + /* + * It is impossible to update on-disk structures without + * a handle, so just rollback in-core changes and live other + * work to orphan_list_cleanup() + */ + ext4_orphan_del(NULL, tmp_inode); + retval = PTR_ERR(handle); + goto out; + } ei = EXT4_I(inode); i_data = ei->i_data; @@ -609,15 +615,8 @@ /* Reset the extent details */ ext4_ext_tree_init(handle, tmp_inode); - - /* - * Set the i_nlink to zero so that - * generic_drop_inode really deletes the - * inode - */ - tmp_inode->i_nlink = 0; - ext4_journal_stop(handle); +out: unlock_new_inode(tmp_inode); iput(tmp_inode); --- linux-2.6.32.orig/fs/ext4/namei.c +++ linux-2.6.32/fs/ext4/namei.c @@ -660,7 +660,7 @@ dxtrace(printk(KERN_DEBUG "In htree_fill_tree, start hash: %x:%x\n", start_hash, start_minor_hash)); dir = dir_file->f_path.dentry->d_inode; - if (!(EXT4_I(dir)->i_flags & EXT4_INDEX_FL)) { + if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) { hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version; if (hinfo.hash_version <= DX_HASH_TEA) hinfo.hash_version += @@ -805,7 +805,7 @@ { if (!EXT4_HAS_COMPAT_FEATURE(inode->i_sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) - EXT4_I(inode)->i_flags &= ~EXT4_INDEX_FL; + ext4_clear_inode_flag(inode, EXT4_INODE_INDEX); } /* @@ -1292,9 +1292,6 @@ * add_dirent_to_buf will attempt search the directory block for * space. It will return -ENOSPC if no space is available, and -EIO * and -EEXIST if directory entry already exists. - * - * NOTE! bh is NOT released in the case where ENOSPC is returned. In - * all other cases bh is released. */ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry, struct inode *inode, struct ext4_dir_entry_2 *de, @@ -1315,14 +1312,10 @@ top = bh->b_data + blocksize - reclen; while ((char *) de <= top) { if (!ext4_check_dir_entry("ext4_add_entry", dir, de, - bh, offset)) { - brelse(bh); + bh, offset)) return -EIO; - } - if (ext4_match(namelen, name, de)) { - brelse(bh); + if (ext4_match(namelen, name, de)) return -EEXIST; - } nlen = EXT4_DIR_REC_LEN(de->name_len); rlen = ext4_rec_len_from_disk(de->rec_len, blocksize); if ((de->inode? rlen - nlen: rlen) >= reclen) @@ -1337,7 +1330,6 @@ err = ext4_journal_get_write_access(handle, bh); if (err) { ext4_std_error(dir->i_sb, err); - brelse(bh); return err; } @@ -1377,7 +1369,6 @@ err = ext4_handle_dirty_metadata(handle, dir, bh); if (err) ext4_std_error(dir->i_sb, err); - brelse(bh); return 0; } @@ -1433,7 +1424,7 @@ brelse(bh); return retval; } - EXT4_I(dir)->i_flags |= EXT4_INDEX_FL; + ext4_set_inode_flag(dir, EXT4_INODE_INDEX); data1 = bh2->b_data; memcpy (data1, de, len); @@ -1471,7 +1462,9 @@ if (!(de)) return retval; - return add_dirent_to_buf(handle, dentry, inode, de, bh); + retval = add_dirent_to_buf(handle, dentry, inode, de, bh); + brelse(bh); + return retval; } /* @@ -1504,7 +1497,7 @@ retval = ext4_dx_add_entry(handle, dentry, inode); if (!retval || (retval != ERR_BAD_DX_DIR)) return retval; - EXT4_I(dir)->i_flags &= ~EXT4_INDEX_FL; + ext4_clear_inode_flag(dir, EXT4_INODE_INDEX); dx_fallback++; ext4_mark_inode_dirty(handle, dir); } @@ -1514,8 +1507,10 @@ if(!bh) return retval; retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh); - if (retval != -ENOSPC) + if (retval != -ENOSPC) { + brelse(bh); return retval; + } if (blocks == 1 && !dx_fallback && EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) @@ -1528,7 +1523,11 @@ de = (struct ext4_dir_entry_2 *) bh->b_data; de->inode = 0; de->rec_len = ext4_rec_len_to_disk(blocksize, blocksize); - return add_dirent_to_buf(handle, dentry, inode, de, bh); + retval = add_dirent_to_buf(handle, dentry, inode, de, bh); + brelse(bh); + if (retval == 0) + ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY); + return retval; } /* @@ -1561,10 +1560,8 @@ goto journal_error; err = add_dirent_to_buf(handle, dentry, inode, NULL, bh); - if (err != -ENOSPC) { - bh = NULL; + if (err != -ENOSPC) goto cleanup; - } /* Block full, should compress but for now just split */ dxtrace(printk(KERN_DEBUG "using %u of %u node entries\n", @@ -1657,7 +1654,6 @@ if (!de) goto cleanup; err = add_dirent_to_buf(handle, dentry, inode, de, bh); - bh = NULL; goto cleanup; journal_error: @@ -1775,7 +1771,7 @@ retry: handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 + - 2*EXT4_QUOTA_INIT_BLOCKS(dir->i_sb)); + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); if (IS_ERR(handle)) return PTR_ERR(handle); @@ -1809,7 +1805,7 @@ retry: handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 + - 2*EXT4_QUOTA_INIT_BLOCKS(dir->i_sb)); + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); if (IS_ERR(handle)) return PTR_ERR(handle); @@ -1846,7 +1842,7 @@ retry: handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 + - 2*EXT4_QUOTA_INIT_BLOCKS(dir->i_sb)); + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); if (IS_ERR(handle)) return PTR_ERR(handle); @@ -2026,11 +2022,18 @@ err = ext4_reserve_inode_write(handle, inode, &iloc); if (err) goto out_unlock; + /* + * Due to previous errors inode may be already a part of on-disk + * orphan list. If so skip on-disk list modification. + */ + if (NEXT_ORPHAN(inode) && NEXT_ORPHAN(inode) <= + (le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))) + goto mem_insert; /* Insert this inode at the head of the on-disk orphan list... */ NEXT_ORPHAN(inode) = le32_to_cpu(EXT4_SB(sb)->s_es->s_last_orphan); EXT4_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); - err = ext4_handle_dirty_metadata(handle, inode, EXT4_SB(sb)->s_sbh); + err = ext4_handle_dirty_metadata(handle, NULL, EXT4_SB(sb)->s_sbh); rc = ext4_mark_iloc_dirty(handle, inode, &iloc); if (!err) err = rc; @@ -2043,6 +2046,7 @@ * * This is safe: on error we're going to ignore the orphan list * anyway on the next recovery. */ +mem_insert: if (!err) list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan); @@ -2102,7 +2106,7 @@ if (err) goto out_brelse; sbi->s_es->s_last_orphan = cpu_to_le32(ino_next); - err = ext4_handle_dirty_metadata(handle, inode, sbi->s_sbh); + err = ext4_handle_dirty_metadata(handle, NULL, sbi->s_sbh); } else { struct ext4_iloc iloc2; struct inode *i_prev = @@ -2259,7 +2263,7 @@ retry: handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + EXT4_INDEX_EXTRA_TRANS_BLOCKS + 5 + - 2*EXT4_QUOTA_INIT_BLOCKS(dir->i_sb)); + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb)); if (IS_ERR(handle)) return PTR_ERR(handle); @@ -2290,7 +2294,7 @@ } } else { /* clear the extent format for fast symlink */ - EXT4_I(inode)->i_flags &= ~EXT4_EXTENTS_FL; + ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS); inode->i_op = &ext4_fast_symlink_inode_operations; memcpy((char *)&EXT4_I(inode)->i_data, symname, l); inode->i_size = l-1; --- linux-2.6.32.orig/fs/ext4/extents.c +++ linux-2.6.32/fs/ext4/extents.c @@ -107,11 +107,8 @@ if (err <= 0) return err; err = ext4_truncate_restart_trans(handle, inode, needed); - /* - * We have dropped i_data_sem so someone might have cached again - * an extent we are going to truncate. - */ - ext4_ext_invalidate_cache(inode); + if (err == 0) + err = -EAGAIN; return err; } @@ -296,29 +293,44 @@ * to allocate @blocks * Worse case is one block per extent */ -int ext4_ext_calc_metadata_amount(struct inode *inode, int blocks) +int ext4_ext_calc_metadata_amount(struct inode *inode, sector_t lblock) { - int lcap, icap, rcap, leafs, idxs, num; - int newextents = blocks; + struct ext4_inode_info *ei = EXT4_I(inode); + int idxs, num = 0; - rcap = ext4_ext_space_root_idx(inode, 0); - lcap = ext4_ext_space_block(inode, 0); - icap = ext4_ext_space_block_idx(inode, 0); + idxs = ((inode->i_sb->s_blocksize - sizeof(struct ext4_extent_header)) + / sizeof(struct ext4_extent_idx)); - /* number of new leaf blocks needed */ - num = leafs = (newextents + lcap - 1) / lcap; + /* + * If the new delayed allocation block is contiguous with the + * previous da block, it can share index blocks with the + * previous block, so we only need to allocate a new index + * block every idxs leaf blocks. At ldxs**2 blocks, we need + * an additional index block, and at ldxs**3 blocks, yet + * another index blocks. + */ + if (ei->i_da_metadata_calc_len && + ei->i_da_metadata_calc_last_lblock+1 == lblock) { + if ((ei->i_da_metadata_calc_len % idxs) == 0) + num++; + if ((ei->i_da_metadata_calc_len % (idxs*idxs)) == 0) + num++; + if ((ei->i_da_metadata_calc_len % (idxs*idxs*idxs)) == 0) { + num++; + ei->i_da_metadata_calc_len = 0; + } else + ei->i_da_metadata_calc_len++; + ei->i_da_metadata_calc_last_lblock++; + return num; + } /* - * Worse case, we need separate index block(s) - * to link all new leaf blocks + * In the worst case we need a new set of index blocks at + * every level of the inode's extent tree. */ - idxs = (leafs + icap - 1) / icap; - do { - num += idxs; - idxs = (idxs + icap - 1) / icap; - } while (idxs > rcap); - - return num; + ei->i_da_metadata_calc_len = 1; + ei->i_da_metadata_calc_last_lblock = lblock; + return ext_depth(inode) + 1; } static int @@ -1761,7 +1773,9 @@ while (block < last && block != EXT_MAX_BLOCK) { num = last - block; /* find extent for this block */ + down_read(&EXT4_I(inode)->i_data_sem); path = ext4_ext_find_extent(inode, block, path); + up_read(&EXT4_I(inode)->i_data_sem); if (IS_ERR(path)) { err = PTR_ERR(path); path = NULL; @@ -2074,7 +2088,7 @@ ext_debug("free last %u blocks starting %llu\n", num, start); for (i = 0; i < num; i++) { bh = sb_find_get_block(inode->i_sb, start + i); - ext4_forget(handle, 0, inode, bh, start + i); + ext4_forget(handle, metadata, inode, bh, start + i); } ext4_free_blocks(handle, inode, start, num, metadata); } else if (from == le32_to_cpu(ex->ee_block) @@ -2167,7 +2181,7 @@ correct_index = 1; credits += (ext_depth(inode)) + 1; } - credits += 2 * EXT4_QUOTA_TRANS_BLOCKS(inode->i_sb); + credits += EXT4_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb); err = ext4_ext_truncate_extend_restart(handle, inode, credits); if (err) @@ -2246,7 +2260,7 @@ int depth = ext_depth(inode); struct ext4_ext_path *path; handle_t *handle; - int i = 0, err = 0; + int i, err; ext_debug("truncate since %u\n", start); @@ -2255,23 +2269,26 @@ if (IS_ERR(handle)) return PTR_ERR(handle); +again: ext4_ext_invalidate_cache(inode); /* * We start scanning from right side, freeing all the blocks * after i_size and walking into the tree depth-wise. */ + depth = ext_depth(inode); path = kzalloc(sizeof(struct ext4_ext_path) * (depth + 1), GFP_NOFS); if (path == NULL) { ext4_journal_stop(handle); return -ENOMEM; } + path[0].p_depth = depth; path[0].p_hdr = ext_inode_hdr(inode); if (ext4_ext_check(inode, path[0].p_hdr, depth)) { err = -EIO; goto out; } - path[0].p_depth = depth; + i = err = 0; while (i >= 0 && err == 0) { if (i == depth) { @@ -2365,6 +2382,8 @@ out: ext4_ext_drop_refs(path); kfree(path); + if (err == -EAGAIN) + goto again; ext4_journal_stop(handle); return err; @@ -2429,7 +2448,7 @@ /* FIXME!! we need to try to merge to left or right after zero-out */ static int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex) { - int ret = -EIO; + int ret; struct bio *bio; int blkbits, blocksize; sector_t ee_pblock; @@ -2453,6 +2472,9 @@ len = ee_len; bio = bio_alloc(GFP_NOIO, len); + if (!bio) + return -ENOMEM; + bio->bi_sector = ee_pblock; bio->bi_bdev = inode->i_sb->s_bdev; @@ -2480,17 +2502,15 @@ submit_bio(WRITE, bio); wait_for_completion(&event); - if (test_bit(BIO_UPTODATE, &bio->bi_flags)) - ret = 0; - else { - ret = -EIO; - break; + if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) { + bio_put(bio); + return -EIO; } bio_put(bio); ee_len -= done; ee_pblock += done << (blkbits - 9); } - return ret; + return 0; } #define EXT4_EXT_ZERO_LEN 7 @@ -2515,11 +2535,21 @@ struct ext4_extent *ex2 = NULL; struct ext4_extent *ex3 = NULL; struct ext4_extent_header *eh; - ext4_lblk_t ee_block; + ext4_lblk_t ee_block, eof_block; unsigned int allocated, ee_len, depth; ext4_fsblk_t newblock; int err = 0; int ret = 0; + int may_zeroout; + + ext_debug("ext4_ext_convert_to_initialized: inode %lu, logical" + "block %llu, max_blocks %u\n", inode->i_ino, + (unsigned long long)iblock, max_blocks); + + eof_block = (inode->i_size + inode->i_sb->s_blocksize - 1) >> + inode->i_sb->s_blocksize_bits; + if (eof_block < iblock + max_blocks) + eof_block = iblock + max_blocks; depth = ext_depth(inode); eh = path[depth].p_hdr; @@ -2528,16 +2558,23 @@ ee_len = ext4_ext_get_actual_len(ex); allocated = ee_len - (iblock - ee_block); newblock = iblock - ee_block + ext_pblock(ex); + ex2 = ex; orig_ex.ee_block = ex->ee_block; orig_ex.ee_len = cpu_to_le16(ee_len); ext4_ext_store_pblock(&orig_ex, ext_pblock(ex)); + /* + * It is safe to convert extent to initialized via explicit + * zeroout only if extent is fully insde i_size or new_size. + */ + may_zeroout = ee_block + ee_len <= eof_block; + err = ext4_ext_get_access(handle, inode, path + depth); if (err) goto out; /* If extent has less than 2*EXT4_EXT_ZERO_LEN zerout directly */ - if (ee_len <= 2*EXT4_EXT_ZERO_LEN) { + if (ee_len <= 2*EXT4_EXT_ZERO_LEN && may_zeroout) { err = ext4_ext_zeroout(inode, &orig_ex); if (err) goto fix_extent_len; @@ -2568,7 +2605,7 @@ if (allocated > max_blocks) { unsigned int newdepth; /* If extent has less than EXT4_EXT_ZERO_LEN zerout directly */ - if (allocated <= EXT4_EXT_ZERO_LEN) { + if (allocated <= EXT4_EXT_ZERO_LEN && may_zeroout) { /* * iblock == ee_block is handled by the zerouout * at the beginning. @@ -2644,7 +2681,7 @@ ex3->ee_len = cpu_to_le16(allocated - max_blocks); ext4_ext_mark_uninitialized(ex3); err = ext4_ext_insert_extent(handle, inode, path, ex3, 0); - if (err == -ENOSPC) { + if (err == -ENOSPC && may_zeroout) { err = ext4_ext_zeroout(inode, &orig_ex); if (err) goto fix_extent_len; @@ -2668,8 +2705,10 @@ * update the extent length after successful insert of the * split extent */ - orig_ex.ee_len = cpu_to_le16(ee_len - - ext4_ext_get_actual_len(ex3)); + ee_len -= ext4_ext_get_actual_len(ex3); + orig_ex.ee_len = cpu_to_le16(ee_len); + may_zeroout = ee_block + ee_len <= eof_block; + depth = newdepth; ext4_ext_drop_refs(path); path = ext4_ext_find_extent(inode, iblock, path); @@ -2693,7 +2732,7 @@ * otherwise give the extent a chance to merge to left */ if (le16_to_cpu(orig_ex.ee_len) <= EXT4_EXT_ZERO_LEN && - iblock != ee_block) { + iblock != ee_block && may_zeroout) { err = ext4_ext_zeroout(inode, &orig_ex); if (err) goto fix_extent_len; @@ -2762,7 +2801,7 @@ goto out; insert: err = ext4_ext_insert_extent(handle, inode, path, &newex, 0); - if (err == -ENOSPC) { + if (err == -ENOSPC && may_zeroout) { err = ext4_ext_zeroout(inode, &orig_ex); if (err) goto fix_extent_len; @@ -2822,14 +2861,21 @@ struct ext4_extent *ex2 = NULL; struct ext4_extent *ex3 = NULL; struct ext4_extent_header *eh; - ext4_lblk_t ee_block; + ext4_lblk_t ee_block, eof_block; unsigned int allocated, ee_len, depth; ext4_fsblk_t newblock; int err = 0; + int may_zeroout; + + ext_debug("ext4_split_unwritten_extents: inode %lu, logical" + "block %llu, max_blocks %u\n", inode->i_ino, + (unsigned long long)iblock, max_blocks); + + eof_block = (inode->i_size + inode->i_sb->s_blocksize - 1) >> + inode->i_sb->s_blocksize_bits; + if (eof_block < iblock + max_blocks) + eof_block = iblock + max_blocks; - ext_debug("ext4_split_unwritten_extents: inode %lu," - "iblock %llu, max_blocks %u\n", inode->i_ino, - (unsigned long long)iblock, max_blocks); depth = ext_depth(inode); eh = path[depth].p_hdr; ex = path[depth].p_ext; @@ -2837,12 +2883,19 @@ ee_len = ext4_ext_get_actual_len(ex); allocated = ee_len - (iblock - ee_block); newblock = iblock - ee_block + ext_pblock(ex); + ex2 = ex; orig_ex.ee_block = ex->ee_block; orig_ex.ee_len = cpu_to_le16(ee_len); ext4_ext_store_pblock(&orig_ex, ext_pblock(ex)); /* + * It is safe to convert extent to initialized via explicit + * zeroout only if extent is fully insde i_size or new_size. + */ + may_zeroout = ee_block + ee_len <= eof_block; + + /* * If the uninitialized extent begins at the same logical * block where the write begins, and the write completely * covers the extent, then we don't need to split it. @@ -2876,7 +2929,7 @@ ex3->ee_len = cpu_to_le16(allocated - max_blocks); ext4_ext_mark_uninitialized(ex3); err = ext4_ext_insert_extent(handle, inode, path, ex3, flags); - if (err == -ENOSPC) { + if (err == -ENOSPC && may_zeroout) { err = ext4_ext_zeroout(inode, &orig_ex); if (err) goto fix_extent_len; @@ -2900,8 +2953,10 @@ * update the extent length after successful insert of the * split extent */ - orig_ex.ee_len = cpu_to_le16(ee_len - - ext4_ext_get_actual_len(ex3)); + ee_len -= ext4_ext_get_actual_len(ex3); + orig_ex.ee_len = cpu_to_le16(ee_len); + may_zeroout = ee_block + ee_len <= eof_block; + depth = newdepth; ext4_ext_drop_refs(path); path = ext4_ext_find_extent(inode, iblock, path); @@ -2947,7 +3002,7 @@ goto out; insert: err = ext4_ext_insert_extent(handle, inode, path, &newex, flags); - if (err == -ENOSPC) { + if (err == -ENOSPC && may_zeroout) { err = ext4_ext_zeroout(inode, &orig_ex); if (err) goto fix_extent_len; @@ -3027,6 +3082,14 @@ return err; } +static void unmap_underlying_metadata_blocks(struct block_device *bdev, + sector_t block, int count) +{ + int i; + for (i = 0; i < count; i++) + unmap_underlying_metadata(bdev, block + i); +} + static int ext4_ext_handle_uninitialized_extents(handle_t *handle, struct inode *inode, ext4_lblk_t iblock, unsigned int max_blocks, @@ -3057,13 +3120,15 @@ if (io) io->flag = DIO_AIO_UNWRITTEN; else - EXT4_I(inode)->i_state |= EXT4_STATE_DIO_UNWRITTEN; + ext4_set_inode_state(inode, EXT4_STATE_DIO_UNWRITTEN); goto out; } /* async DIO end_io complete, convert the filled extent to written */ if (flags == EXT4_GET_BLOCKS_DIO_CONVERT_EXT) { ret = ext4_convert_unwritten_extents_dio(handle, inode, path); + if (ret >= 0) + ext4_update_inode_fsync_trans(handle, inode, 1); goto out2; } /* buffered IO case */ @@ -3091,6 +3156,8 @@ ret = ext4_ext_convert_to_initialized(handle, inode, path, iblock, max_blocks); + if (ret >= 0) + ext4_update_inode_fsync_trans(handle, inode, 1); out: if (ret <= 0) { err = ret; @@ -3098,6 +3165,30 @@ } else allocated = ret; set_buffer_new(bh_result); + /* + * if we allocated more blocks than requested + * we need to make sure we unmap the extra block + * allocated. The actual needed block will get + * unmapped later when we find the buffer_head marked + * new. + */ + if (allocated > max_blocks) { + unmap_underlying_metadata_blocks(inode->i_sb->s_bdev, + newblock + max_blocks, + allocated - max_blocks); + allocated = max_blocks; + } + + /* + * If we have done fallocate with the offset that is already + * delayed allocated, we would have block reservation + * and quota reservation done in the delayed write path. + * But fallocate would have already updated quota and block + * count for this offset. So cancel these reservation + */ + if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) + ext4_da_update_reserve_space(inode, allocated, 0); + map_out: set_buffer_mapped(bh_result); out1: @@ -3138,9 +3229,9 @@ { struct ext4_ext_path *path = NULL; struct ext4_extent_header *eh; - struct ext4_extent newex, *ex; + struct ext4_extent newex, *ex, *last_ex; ext4_fsblk_t newblock; - int err = 0, depth, ret, cache_type; + int i, err = 0, depth, ret, cache_type; unsigned int allocated = 0; struct ext4_allocation_request ar; ext4_io_end_t *io = EXT4_I(inode)->cur_aio_dio; @@ -3190,7 +3281,13 @@ * this situation is possible, though, _during_ tree modification; * this is why assert can't be put in ext4_ext_find_extent() */ - BUG_ON(path[depth].p_ext == NULL && depth != 0); + if (path[depth].p_ext == NULL && depth != 0) { + ext4_error(inode->i_sb, __func__, "bad extent address " + "inode: %lu, iblock: %lu, depth: %d", + inode->i_ino, (unsigned long) iblock, depth); + err = -EIO; + goto out2; + } eh = path[depth].p_hdr; ex = path[depth].p_ext; @@ -3309,9 +3406,35 @@ if (io) io->flag = DIO_AIO_UNWRITTEN; else - EXT4_I(inode)->i_state |= - EXT4_STATE_DIO_UNWRITTEN;; + ext4_set_inode_state(inode, + EXT4_STATE_DIO_UNWRITTEN); + } + } + + if (unlikely(ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS))) { + if (unlikely(!eh->eh_entries)) { + ext4_error(inode->i_sb, __func__, + "inode#%lu, eh->eh_entries = 0 and " + "EOFBLOCKS_FL set", inode->i_ino); + err = -EIO; + goto out2; + } + last_ex = EXT_LAST_EXTENT(eh); + /* + * If the current leaf block was reached by looking at + * the last index block all the way down the tree, and + * we are extending the inode beyond the last extent + * in the current leaf block, then clear the + * EOFBLOCKS_FL flag. + */ + for (i = depth-1; i >= 0; i--) { + if (path[i].p_idx != EXT_LAST_INDEX(path[i].p_hdr)) + break; } + if ((i < 0) && + (iblock + ar.len > le32_to_cpu(last_ex->ee_block) + + ext4_ext_get_actual_len(last_ex))) + ext4_clear_inode_flag(inode, EXT4_INODE_EOFBLOCKS); } err = ext4_ext_insert_extent(handle, inode, path, &newex, flags); if (err) { @@ -3327,12 +3450,27 @@ /* previous routine could use block we allocated */ newblock = ext_pblock(&newex); allocated = ext4_ext_get_actual_len(&newex); + if (allocated > max_blocks) + allocated = max_blocks; set_buffer_new(bh_result); - /* Cache only when it is _not_ an uninitialized extent */ - if ((flags & EXT4_GET_BLOCKS_UNINIT_EXT) == 0) + /* + * Update reserved blocks/metadata blocks after successful + * block allocation which had been deferred till now. + */ + if (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) + ext4_da_update_reserve_space(inode, allocated, 1); + + /* + * Cache the extent and update transaction to commit on fdatasync only + * when it is _not_ an uninitialized extent. + */ + if ((flags & EXT4_GET_BLOCKS_UNINIT_EXT) == 0) { ext4_ext_put_in_cache(inode, iblock, allocated, newblock, EXT4_EXT_CACHE_EXTENT); + ext4_update_inode_fsync_trans(handle, inode, 1); + } else + ext4_update_inode_fsync_trans(handle, inode, 0); out: if (allocated > max_blocks) allocated = max_blocks; @@ -3431,6 +3569,13 @@ i_size_write(inode, new_size); if (new_size > EXT4_I(inode)->i_disksize) ext4_update_i_disksize(inode, new_size); + } else { + /* + * Mark that we allocate beyond EOF so the subsequent truncate + * can proceed even if the new size is the same as i_size. + */ + if (new_size > i_size_read(inode)) + ext4_set_inode_flag(inode, EXT4_INODE_EOFBLOCKS); } } @@ -3458,7 +3603,7 @@ * currently supporting (pre)allocate mode for extent-based * files _only_ */ - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) return -EOPNOTSUPP; /* preallocation to directories is currently not supported */ @@ -3477,6 +3622,11 @@ */ credits = ext4_chunk_trans_blocks(inode, max_blocks); mutex_lock(&inode->i_mutex); + ret = inode_newsize_ok(inode, (len + offset)); + if (ret) { + mutex_unlock(&inode->i_mutex); + return ret; + } retry: while (ret >= 0 && ret < max_blocks) { block = block + ret; @@ -3535,7 +3685,7 @@ * Returns 0 on success. */ int ext4_convert_unwritten_extents(struct inode *inode, loff_t offset, - loff_t len) + ssize_t len) { handle_t *handle; ext4_lblk_t block; @@ -3671,7 +3821,7 @@ int error = 0; /* in-inode? */ - if (EXT4_I(inode)->i_state & EXT4_STATE_XATTR) { + if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) { struct ext4_iloc iloc; int offset; /* offset of xattr in inode */ @@ -3684,6 +3834,7 @@ physical += offset; length = EXT4_SB(inode->i_sb)->s_inode_size - offset; flags |= FIEMAP_EXTENT_DATA_INLINE; + brelse(iloc.bh); } else { /* external block */ physical = EXT4_I(inode)->i_file_acl << blockbits; length = inode->i_sb->s_blocksize; @@ -3699,11 +3850,10 @@ __u64 start, __u64 len) { ext4_lblk_t start_blk; - ext4_lblk_t len_blks; int error = 0; /* fallback to generic here if not in extents fmt */ - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) return generic_block_fiemap(inode, fieinfo, start, len, ext4_get_block); @@ -3713,17 +3863,21 @@ if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) { error = ext4_xattr_fiemap(inode, fieinfo); } else { + ext4_lblk_t len_blks; + __u64 last_blk; + start_blk = start >> inode->i_sb->s_blocksize_bits; - len_blks = len >> inode->i_sb->s_blocksize_bits; + last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits; + if (last_blk >= EXT_MAX_BLOCK) + last_blk = EXT_MAX_BLOCK-1; + len_blks = ((ext4_lblk_t) last_blk) - start_blk + 1; /* * Walk the extent tree gathering extent information. * ext4_ext_fiemap_cb will push extents back to user. */ - down_read(&EXT4_I(inode)->i_data_sem); error = ext4_ext_walk_space(inode, start_blk, len_blks, ext4_ext_fiemap_cb, fieinfo); - up_read(&EXT4_I(inode)->i_data_sem); } return error; --- linux-2.6.32.orig/fs/ext4/dir.c +++ linux-2.6.32/fs/ext4/dir.c @@ -84,9 +84,11 @@ if (error_msg != NULL) ext4_error(dir->i_sb, function, - "bad entry in directory #%lu: %s - " - "offset=%u, inode=%u, rec_len=%d, name_len=%d", - dir->i_ino, error_msg, offset, + "bad entry in directory #%lu: %s - block=%llu" + "offset=%u(%u), inode=%u, rec_len=%d, name_len=%d", + dir->i_ino, error_msg, + (unsigned long long) bh->b_blocknr, + (unsigned) (offset%bh->b_size), offset, le32_to_cpu(de->inode), rlen, de->name_len); return error_msg == NULL ? 1 : 0; @@ -109,7 +111,7 @@ if (EXT4_HAS_COMPAT_FEATURE(inode->i_sb, EXT4_FEATURE_COMPAT_DIR_INDEX) && - ((EXT4_I(inode)->i_flags & EXT4_INDEX_FL) || + ((ext4_test_inode_flag(inode, EXT4_INODE_INDEX)) || ((inode->i_size >> sb->s_blocksize_bits) == 1))) { err = ext4_dx_readdir(filp, dirent, filldir); if (err != ERR_BAD_DX_DIR) { @@ -120,7 +122,7 @@ * We don't set the inode dirty flag since it's not * critical that it get flushed back to the disk. */ - EXT4_I(filp->f_path.dentry->d_inode)->i_flags &= ~EXT4_INDEX_FL; + ext4_clear_inode_flag(filp->f_path.dentry->d_inode, EXT4_INODE_INDEX); } stored = 0; offset = filp->f_pos & (sb->s_blocksize - 1); --- linux-2.6.32.orig/fs/ext4/file.c +++ linux-2.6.32/fs/ext4/file.c @@ -35,9 +35,9 @@ */ static int ext4_release_file(struct inode *inode, struct file *filp) { - if (EXT4_I(inode)->i_state & EXT4_STATE_DA_ALLOC_CLOSE) { + if (ext4_test_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE)) { ext4_alloc_da_blocks(inode); - EXT4_I(inode)->i_state &= ~EXT4_STATE_DA_ALLOC_CLOSE; + ext4_clear_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE); } /* if we are the last writer on the inode, drop the block reservation */ if ((filp->f_mode & FMODE_WRITE) && @@ -65,7 +65,7 @@ * is smaller than s_maxbytes, which is for extent-mapped files. */ - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) { + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); size_t length = iov_length(iov, nr_segs); --- linux-2.6.32.orig/fs/ext4/xattr.c +++ linux-2.6.32/fs/ext4/xattr.c @@ -267,7 +267,7 @@ void *end; int error; - if (!(EXT4_I(inode)->i_state & EXT4_STATE_XATTR)) + if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) return -ENODATA; error = ext4_get_inode_loc(inode, &iloc); if (error) @@ -393,7 +393,7 @@ void *end; int error; - if (!(EXT4_I(inode)->i_state & EXT4_STATE_XATTR)) + if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR)) return 0; error = ext4_get_inode_loc(inode, &iloc); if (error) @@ -816,7 +816,7 @@ EXT4_I(inode)->i_block_group); /* non-extent files can't have physical blocks past 2^32 */ - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) goal = goal & EXT4_MAX_BLOCK_FILE_PHYS; block = ext4_new_meta_blocks(handle, inode, @@ -824,7 +824,7 @@ if (error) goto cleanup; - if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) + if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) BUG_ON(block > EXT4_MAX_BLOCK_FILE_PHYS); ea_idebug(inode, "creating block %d", block); @@ -903,7 +903,7 @@ is->s.base = is->s.first = IFIRST(header); is->s.here = is->s.first; is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; - if (EXT4_I(inode)->i_state & EXT4_STATE_XATTR) { + if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) { error = ext4_xattr_check_names(IFIRST(header), is->s.end); if (error) return error; @@ -935,10 +935,10 @@ header = IHDR(inode, ext4_raw_inode(&is->iloc)); if (!IS_LAST_ENTRY(s->first)) { header->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC); - EXT4_I(inode)->i_state |= EXT4_STATE_XATTR; + ext4_set_inode_state(inode, EXT4_STATE_XATTR); } else { header->h_magic = cpu_to_le32(0); - EXT4_I(inode)->i_state &= ~EXT4_STATE_XATTR; + ext4_clear_inode_state(inode, EXT4_STATE_XATTR); } return 0; } @@ -981,17 +981,21 @@ if (strlen(name) > 255) return -ERANGE; down_write(&EXT4_I(inode)->xattr_sem); - no_expand = EXT4_I(inode)->i_state & EXT4_STATE_NO_EXPAND; - EXT4_I(inode)->i_state |= EXT4_STATE_NO_EXPAND; + no_expand = ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND); + ext4_set_inode_state(inode, EXT4_STATE_NO_EXPAND); error = ext4_get_inode_loc(inode, &is.iloc); if (error) goto cleanup; - if (EXT4_I(inode)->i_state & EXT4_STATE_NEW) { + error = ext4_journal_get_write_access(handle, is.iloc.bh); + if (error) + goto cleanup; + + if (ext4_test_inode_state(inode, EXT4_STATE_NEW)) { struct ext4_inode *raw_inode = ext4_raw_inode(&is.iloc); memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); - EXT4_I(inode)->i_state &= ~EXT4_STATE_NEW; + ext4_clear_inode_state(inode, EXT4_STATE_NEW); } error = ext4_xattr_ibody_find(inode, &i, &is); @@ -1013,9 +1017,6 @@ if (flags & XATTR_CREATE) goto cleanup; } - error = ext4_journal_get_write_access(handle, is.iloc.bh); - if (error) - goto cleanup; if (!value) { if (!is.s.not_found) error = ext4_xattr_ibody_set(handle, inode, &i, &is); @@ -1046,7 +1047,7 @@ ext4_xattr_update_super_block(handle, inode->i_sb); inode->i_ctime = ext4_current_time(inode); if (!value) - EXT4_I(inode)->i_state &= ~EXT4_STATE_NO_EXPAND; + ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND); error = ext4_mark_iloc_dirty(handle, inode, &is.iloc); /* * The bh is consumed by ext4_mark_iloc_dirty, even with @@ -1061,7 +1062,7 @@ brelse(is.iloc.bh); brelse(bs.bh); if (no_expand == 0) - EXT4_I(inode)->i_state &= ~EXT4_STATE_NO_EXPAND; + ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND); up_write(&EXT4_I(inode)->xattr_sem); return error; } @@ -1326,6 +1327,8 @@ goto cleanup; kfree(b_entry_name); kfree(buffer); + b_entry_name = NULL; + buffer = NULL; brelse(is->iloc.bh); kfree(is); kfree(bs); --- linux-2.6.32.orig/fs/ext4/ext4_extents.h +++ linux-2.6.32/fs/ext4/ext4_extents.h @@ -225,7 +225,8 @@ ext->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ext)); } -extern int ext4_ext_calc_metadata_amount(struct inode *inode, int blocks); +extern int ext4_ext_calc_metadata_amount(struct inode *inode, + sector_t lblocks); extern ext4_fsblk_t ext_pblock(struct ext4_extent *ex); extern ext4_fsblk_t idx_pblock(struct ext4_extent_idx *); extern void ext4_ext_store_pblock(struct ext4_extent *, ext4_fsblk_t); --- linux-2.6.32.orig/fs/ext4/ioctl.c +++ linux-2.6.32/fs/ext4/ioctl.c @@ -92,6 +92,15 @@ flags &= ~EXT4_EXTENTS_FL; } + if (flags & EXT4_EOFBLOCKS_FL) { + /* we don't support adding EOFBLOCKS flag */ + if (!(oldflags & EXT4_EOFBLOCKS_FL)) { + err = -EOPNOTSUPP; + goto flags_out; + } + } else if (oldflags & EXT4_EOFBLOCKS_FL) + ext4_truncate(inode); + handle = ext4_journal_start(inode, 1); if (IS_ERR(handle)) { err = PTR_ERR(handle); @@ -221,31 +230,39 @@ struct file *donor_filp; int err; + if (!(filp->f_mode & FMODE_READ) || + !(filp->f_mode & FMODE_WRITE)) + return -EBADF; + if (copy_from_user(&me, (struct move_extent __user *)arg, sizeof(me))) return -EFAULT; + me.moved_len = 0; donor_filp = fget(me.donor_fd); if (!donor_filp) return -EBADF; - if (!capable(CAP_DAC_OVERRIDE)) { - if ((current->real_cred->fsuid != inode->i_uid) || - !(inode->i_mode & S_IRUSR) || - !(donor_filp->f_dentry->d_inode->i_mode & - S_IRUSR)) { - fput(donor_filp); - return -EACCES; - } + if (!(donor_filp->f_mode & FMODE_WRITE)) { + err = -EBADF; + goto mext_out; } + err = mnt_want_write(filp->f_path.mnt); + if (err) + goto mext_out; + err = ext4_move_extents(filp, donor_filp, me.orig_start, me.donor_start, me.len, &me.moved_len); - fput(donor_filp); - - if (copy_to_user((struct move_extent *)arg, &me, sizeof(me))) - return -EFAULT; + mnt_drop_write(filp->f_path.mnt); + if (me.moved_len > 0) + file_remove_suid(donor_filp); + if (copy_to_user((struct move_extent __user *)arg, + &me, sizeof(me))) + err = -EFAULT; +mext_out: + fput(donor_filp); return err; } @@ -356,7 +373,30 @@ case EXT4_IOC32_SETRSVSZ: cmd = EXT4_IOC_SETRSVSZ; break; - case EXT4_IOC_GROUP_ADD: + case EXT4_IOC32_GROUP_ADD: { + struct compat_ext4_new_group_input __user *uinput; + struct ext4_new_group_input input; + mm_segment_t old_fs; + int err; + + uinput = compat_ptr(arg); + err = get_user(input.group, &uinput->group); + err |= get_user(input.block_bitmap, &uinput->block_bitmap); + err |= get_user(input.inode_bitmap, &uinput->inode_bitmap); + err |= get_user(input.inode_table, &uinput->inode_table); + err |= get_user(input.blocks_count, &uinput->blocks_count); + err |= get_user(input.reserved_blocks, + &uinput->reserved_blocks); + if (err) + return -EFAULT; + old_fs = get_fs(); + set_fs(KERNEL_DS); + err = ext4_ioctl(file, EXT4_IOC_GROUP_ADD, + (unsigned long) &input); + set_fs(old_fs); + return err; + } + case EXT4_IOC_MOVE_EXT: break; default: return -ENOIOCTLCMD; --- linux-2.6.32.orig/fs/ext4/resize.c +++ linux-2.6.32/fs/ext4/resize.c @@ -247,7 +247,7 @@ goto exit_bh; if (IS_ERR(gdb = bclean(handle, sb, block))) { - err = PTR_ERR(bh); + err = PTR_ERR(gdb); goto exit_bh; } ext4_handle_dirty_metadata(handle, NULL, gdb); @@ -930,7 +930,8 @@ percpu_counter_add(&sbi->s_freeinodes_counter, EXT4_INODES_PER_GROUP(sb)); - if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG)) { + if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG) && + sbi->s_log_groups_per_flex) { ext4_group_t flex_group; flex_group = ext4_flex_group(sbi, input->group); atomic_add(input->free_blocks_count, --- linux-2.6.32.orig/fs/ext4/fsync.c +++ linux-2.6.32/fs/ext4/fsync.c @@ -35,6 +35,29 @@ #include /* + * If we're not journaling and this is a just-created file, we have to + * sync our parent directory (if it was freshly created) since + * otherwise it will only be written by writeback, leaving a huge + * window during which a crash may lose the file. This may apply for + * the parent directory's parent as well, and so on recursively, if + * they are also freshly created. + */ +static void ext4_sync_parent(struct inode *inode) +{ + struct dentry *dentry = NULL; + + while (inode && ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) { + ext4_clear_inode_state(inode, EXT4_STATE_NEWENTRY); + dentry = list_entry(inode->i_dentry.next, + struct dentry, d_alias); + if (!dentry || !dentry->d_parent || !dentry->d_parent->d_inode) + break; + inode = dentry->d_parent->d_inode; + sync_mapping_buffers(inode->i_mapping); + } +} + +/* * akpm: A new design for ext4_sync_file(). * * This is only called from sys_fsync(), sys_fdatasync() and sys_msync(). @@ -51,25 +74,34 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync) { struct inode *inode = dentry->d_inode; + struct ext4_inode_info *ei = EXT4_I(inode); journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; - int err, ret = 0; + int ret; + tid_t commit_tid; J_ASSERT(ext4_journal_current_handle() == NULL); trace_ext4_sync_file(file, dentry, datasync); + if (inode->i_sb->s_flags & MS_RDONLY) + return 0; + ret = flush_aio_dio_completed_IO(inode); if (ret < 0) - goto out; + return ret; + + if (!journal) { + ret = simple_fsync(file, dentry, datasync); + if (!ret && !list_empty(&inode->i_dentry)) + ext4_sync_parent(inode); + return ret; + } + /* - * data=writeback: + * data=writeback,ordered: * The caller's filemap_fdatawrite()/wait will sync the data. - * sync_inode() will sync the metadata - * - * data=ordered: - * The caller's filemap_fdatawrite() will write the data and - * sync_inode() will write the inode if it is dirty. Then the caller's - * filemap_fdatawait() will wait on the pages. + * Metadata is in the journal, we wait for proper transaction to + * commit here. * * data=journal: * filemap_fdatawrite won't do anything (the buffers are clean). @@ -79,32 +111,25 @@ * (they were dirtied by commit). But that's OK - the blocks are * safe in-journal, which is all fsync() needs to ensure. */ - if (ext4_should_journal_data(inode)) { - ret = ext4_force_commit(inode->i_sb); - goto out; - } - - if (!journal) - ret = sync_mapping_buffers(inode->i_mapping); + if (ext4_should_journal_data(inode)) + return ext4_force_commit(inode->i_sb); - if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) - goto out; - - /* - * The VFS has written the file data. If the inode is unaltered - * then we need not start a commit. - */ - if (inode->i_state & (I_DIRTY_SYNC|I_DIRTY_DATASYNC)) { - struct writeback_control wbc = { - .sync_mode = WB_SYNC_ALL, - .nr_to_write = 0, /* sys_fsync did this */ - }; - err = sync_inode(inode, &wbc); - if (ret == 0) - ret = err; - } -out: - if (journal && (journal->j_flags & JBD2_BARRIER)) + commit_tid = datasync ? ei->i_datasync_tid : ei->i_sync_tid; + if (jbd2_log_start_commit(journal, commit_tid)) { + /* + * When the journal is on a different device than the + * fs data disk, we need to issue the barrier in + * writeback mode. (In ordered mode, the jbd2 layer + * will take care of issuing the barrier. In + * data=journal, all of the data blocks are written to + * the journal device.) + */ + if (ext4_should_writeback_data(inode) && + (journal->j_fs_dev != journal->j_dev) && + (journal->j_flags & JBD2_BARRIER)) + blkdev_issue_flush(inode->i_sb->s_bdev, NULL); + ret = jbd2_log_wait_commit(journal, commit_tid); + } else if (journal->j_flags & JBD2_BARRIER) blkdev_issue_flush(inode->i_sb->s_bdev, NULL); return ret; } --- linux-2.6.32.orig/fs/ext4/balloc.c +++ linux-2.6.32/fs/ext4/balloc.c @@ -761,7 +761,13 @@ static unsigned long ext4_bg_num_gdb_nometa(struct super_block *sb, ext4_group_t group) { - return ext4_bg_has_super(sb, group) ? EXT4_SB(sb)->s_gdb_count : 0; + if (!ext4_bg_has_super(sb, group)) + return 0; + + if (EXT4_HAS_INCOMPAT_FEATURE(sb,EXT4_FEATURE_INCOMPAT_META_BG)) + return le32_to_cpu(EXT4_SB(sb)->s_es->s_first_meta_bg); + else + return EXT4_SB(sb)->s_gdb_count; } /** --- linux-2.6.32.orig/fs/ext4/block_validity.c +++ linux-2.6.32/fs/ext4/block_validity.c @@ -160,7 +160,7 @@ if (ext4_bg_has_super(sb, i) && ((i < 5) || ((i % flex_size) == 0))) add_system_zone(sbi, ext4_group_first_block_no(sb, i), - sbi->s_gdb_count + 1); + ext4_bg_num_gdb(sb, i) + 1); gdp = ext4_get_group_desc(sb, i, NULL); ret = add_system_zone(sbi, ext4_block_bitmap(sb, gdp), 1); if (ret) --- linux-2.6.32.orig/fs/fat/namei_vfat.c +++ linux-2.6.32/fs/fat/namei_vfat.c @@ -309,7 +309,7 @@ { struct fat_mount_options *opts = &MSDOS_SB(dir->i_sb)->options; wchar_t *ip, *ext_start, *end, *name_start; - unsigned char base[9], ext[4], buf[8], *p; + unsigned char base[9], ext[4], buf[5], *p; unsigned char charbuf[NLS_MAX_CHARSET_SIZE]; int chl, chi; int sz = 0, extlen, baselen, i, numtail_baselen, numtail2_baselen; @@ -467,7 +467,7 @@ return 0; } - i = jiffies & 0xffff; + i = jiffies; sz = (jiffies >> 16) & 0x7; if (baselen > 2) { baselen = numtail2_baselen; @@ -476,7 +476,7 @@ name_res[baselen + 4] = '~'; name_res[baselen + 5] = '1' + sz; while (1) { - sprintf(buf, "%04X", i); + snprintf(buf, sizeof(buf), "%04X", i & 0xffff); memcpy(&name_res[baselen], buf, 4); if (vfat_find_form(dir, name_res) < 0) break; --- linux-2.6.32.orig/fs/gfs2/file.c +++ linux-2.6.32/fs/gfs2/file.c @@ -218,6 +218,11 @@ if (error) goto out_drop_write; + error = -EACCES; + if (!is_owner_or_cap(inode)) + goto out; + + error = 0; flags = ip->i_diskflags; new_flags = (flags & ~mask) | (reqflags & mask); if ((new_flags ^ flags) == 0) @@ -275,8 +280,10 @@ { struct inode *inode = filp->f_path.dentry->d_inode; u32 fsflags, gfsflags; + if (get_user(fsflags, ptr)) return -EFAULT; + gfsflags = fsflags_cvt(fsflags_to_gfs2, fsflags); if (!S_ISDIR(inode->i_mode)) { if (gfsflags & GFS2_DIF_INHERIT_JDATA) @@ -606,7 +613,7 @@ if (!(fl->fl_flags & FL_POSIX)) return -ENOLCK; - if (__mandatory_lock(&ip->i_inode)) + if (__mandatory_lock(&ip->i_inode) && fl->fl_type != F_UNLCK) return -ENOLCK; if (cmd == F_CANCELLK) { --- linux-2.6.32.orig/fs/gfs2/quota.c +++ linux-2.6.32/fs/gfs2/quota.c @@ -654,15 +654,27 @@ unsigned blocksize, iblock, pos; struct buffer_head *bh; struct page *page; - void *kaddr; - char *ptr; - struct gfs2_quota_host qp; + void *kaddr, *ptr; + struct gfs2_quota q; s64 value; - int err = -EIO; + int err, nbytes; if (gfs2_is_stuffed(ip)) gfs2_unstuff_dinode(ip, NULL); - + + memset(&q, 0, sizeof(struct gfs2_quota)); + err = gfs2_internal_read(ip, NULL, (char *)&q, &loc, sizeof(q)); + if (err < 0) + return err; + + value = be64_to_cpu(q.qu_value) + change; + q.qu_value = cpu_to_be64(value); + + /* Write the quota into the quota file on disk */ + err = -EIO; + ptr = &q; + nbytes = sizeof(struct gfs2_quota); +get_a_page: page = grab_cache_page(mapping, index); if (!page) return -ENOMEM; @@ -685,6 +697,11 @@ gfs2_block_map(inode, iblock, bh, 1); if (!buffer_mapped(bh)) goto unlock; + /* If it's a newly allocated disk block for quota, zero it */ + if (buffer_new(bh)) { + memset(bh->b_data, 0, bh->b_size); + set_buffer_uptodate(bh); + } } if (PageUptodate(page)) @@ -700,18 +717,31 @@ gfs2_trans_add_bh(ip->i_gl, bh, 0); kaddr = kmap_atomic(page, KM_USER0); - ptr = kaddr + offset; - gfs2_quota_in(&qp, ptr); - qp.qu_value += change; - value = qp.qu_value; - gfs2_quota_out(&qp, ptr); + if (offset + sizeof(struct gfs2_quota) > PAGE_CACHE_SIZE) + nbytes = PAGE_CACHE_SIZE - offset; + memcpy(kaddr + offset, ptr, nbytes); flush_dcache_page(page); kunmap_atomic(kaddr, KM_USER0); - err = 0; + unlock_page(page); + page_cache_release(page); + + /* If quota straddles page boundary, we need to update the rest of the + * quota at the beginning of the next page */ + if (offset != 0) { /* first page, offset is closer to PAGE_CACHE_SIZE */ + ptr = ptr + nbytes; + nbytes = sizeof(struct gfs2_quota) - nbytes; + offset = 0; + index++; + goto get_a_page; + } + qd->qd_qb.qb_magic = cpu_to_be32(GFS2_MAGIC); qd->qd_qb.qb_value = cpu_to_be64(value); ((struct gfs2_quota_lvb*)(qd->qd_gl->gl_lvb))->qb_magic = cpu_to_be32(GFS2_MAGIC); ((struct gfs2_quota_lvb*)(qd->qd_gl->gl_lvb))->qb_value = cpu_to_be64(value); + + return 0; + unlock: unlock_page(page); page_cache_release(page); --- linux-2.6.32.orig/fs/befs/linuxvfs.c +++ linux-2.6.32/fs/befs/linuxvfs.c @@ -873,6 +873,7 @@ brelse(bh); unacquire_priv_sbp: + kfree(befs_sb->mount_opts.iocharset); kfree(sb->s_fs_info); unacquire_none: --- linux-2.6.32.orig/fs/affs/super.c +++ linux-2.6.32/fs/affs/super.c @@ -203,7 +203,7 @@ switch (token) { case Opt_bs: if (match_int(&args[0], &n)) - return -EINVAL; + return 0; if (n != 512 && n != 1024 && n != 2048 && n != 4096) { printk ("AFFS: Invalid blocksize (512, 1024, 2048, 4096 allowed)\n"); @@ -213,7 +213,7 @@ break; case Opt_mode: if (match_octal(&args[0], &option)) - return 1; + return 0; *mode = option & 0777; *mount_opts |= SF_SETMODE; break; @@ -221,8 +221,6 @@ *mount_opts |= SF_MUFS; break; case Opt_prefix: - /* Free any previous prefix */ - kfree(*prefix); *prefix = match_strdup(&args[0]); if (!*prefix) return 0; @@ -233,21 +231,21 @@ break; case Opt_reserved: if (match_int(&args[0], reserved)) - return 1; + return 0; break; case Opt_root: if (match_int(&args[0], root)) - return 1; + return 0; break; case Opt_setgid: if (match_int(&args[0], &option)) - return 1; + return 0; *gid = option; *mount_opts |= SF_SETGID; break; case Opt_setuid: if (match_int(&args[0], &option)) - return -EINVAL; + return 0; *uid = option; *mount_opts |= SF_SETUID; break; @@ -311,11 +309,14 @@ return -ENOMEM; sb->s_fs_info = sbi; mutex_init(&sbi->s_bmlock); + spin_lock_init(&sbi->symlink_lock); if (!parse_options(data,&uid,&gid,&i,&reserved,&root_block, &blocksize,&sbi->s_prefix, sbi->s_volume, &mount_flags)) { printk(KERN_ERR "AFFS: Error parsing options\n"); + kfree(sbi->s_prefix); + kfree(sbi); return -EINVAL; } /* N.B. after this point s_prefix must be released */ @@ -516,14 +517,18 @@ unsigned long mount_flags; int res = 0; char *new_opts = kstrdup(data, GFP_KERNEL); + char volume[32]; + char *prefix = NULL; pr_debug("AFFS: remount(flags=0x%x,opts=\"%s\")\n",*flags,data); *flags |= MS_NODIRATIME; + memcpy(volume, sbi->s_volume, 32); if (!parse_options(data, &uid, &gid, &mode, &reserved, &root_block, - &blocksize, &sbi->s_prefix, sbi->s_volume, + &blocksize, &prefix, volume, &mount_flags)) { + kfree(prefix); kfree(new_opts); return -EINVAL; } @@ -534,6 +539,14 @@ sbi->s_mode = mode; sbi->s_uid = uid; sbi->s_gid = gid; + /* protect against readers */ + spin_lock(&sbi->symlink_lock); + if (prefix) { + kfree(sbi->s_prefix); + sbi->s_prefix = prefix; + } + memcpy(sbi->s_volume, volume, 32); + spin_unlock(&sbi->symlink_lock); if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { unlock_kernel(); --- linux-2.6.32.orig/fs/affs/symlink.c +++ linux-2.6.32/fs/affs/symlink.c @@ -20,7 +20,6 @@ int i, j; char c; char lc; - char *pf; pr_debug("AFFS: follow_link(ino=%lu)\n",inode->i_ino); @@ -32,11 +31,15 @@ j = 0; lf = (struct slink_front *)bh->b_data; lc = 0; - pf = AFFS_SB(inode->i_sb)->s_prefix ? AFFS_SB(inode->i_sb)->s_prefix : "/"; if (strchr(lf->symname,':')) { /* Handle assign or volume name */ + struct affs_sb_info *sbi = AFFS_SB(inode->i_sb); + char *pf; + spin_lock(&sbi->symlink_lock); + pf = sbi->s_prefix ? sbi->s_prefix : "/"; while (i < 1023 && (c = pf[i])) link[i++] = c; + spin_unlock(&sbi->symlink_lock); while (i < 1023 && lf->symname[j] != ':') link[i++] = lf->symname[j++]; if (i < 1023) --- linux-2.6.32.orig/fs/affs/affs.h +++ linux-2.6.32/fs/affs/affs.h @@ -106,8 +106,8 @@ u32 s_last_bmap; struct buffer_head *s_bmap_bh; char *s_prefix; /* Prefix for volumes and assigns. */ - int s_prefix_len; /* Length of prefix. */ char s_volume[32]; /* Volume prefix for absolute symlinks. */ + spinlock_t symlink_lock; /* protects the previous two */ }; #define SF_INTL 0x0001 /* International filesystem. */ --- linux-2.6.32.orig/fs/affs/namei.c +++ linux-2.6.32/fs/affs/namei.c @@ -341,10 +341,13 @@ p = (char *)AFFS_HEAD(bh)->table; lc = '/'; if (*symname == '/') { + struct affs_sb_info *sbi = AFFS_SB(sb); while (*symname == '/') symname++; - while (AFFS_SB(sb)->s_volume[i]) /* Cannot overflow */ - *p++ = AFFS_SB(sb)->s_volume[i++]; + spin_lock(&sbi->symlink_lock); + while (sbi->s_volume[i]) /* Cannot overflow */ + *p++ = sbi->s_volume[i++]; + spin_unlock(&sbi->symlink_lock); } while (i < maxlen && (c = *symname++)) { if (c == '.' && lc == '/' && *symname == '.' && symname[1] == '/') { --- linux-2.6.32.orig/fs/jffs2/gc.c +++ linux-2.6.32/fs/jffs2/gc.c @@ -700,7 +700,8 @@ struct jffs2_raw_inode ri; struct jffs2_node_frag *last_frag; union jffs2_device_node dev; - char *mdata = NULL, mdatalen = 0; + char *mdata = NULL; + int mdatalen = 0; uint32_t alloclen, ilen; int ret; --- linux-2.6.32.orig/fs/devpts/inode.c +++ linux-2.6.32/fs/devpts/inode.c @@ -517,11 +517,23 @@ struct tty_struct *devpts_get_tty(struct inode *pts_inode, int number) { + struct dentry *dentry; + struct tty_struct *tty; + BUG_ON(pts_inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR)); + /* Ensure dentry has not been deleted by devpts_pty_kill() */ + dentry = d_find_alias(pts_inode); + if (!dentry) + return NULL; + + tty = NULL; if (pts_inode->i_sb->s_magic == DEVPTS_SUPER_MAGIC) - return (struct tty_struct *)pts_inode->i_private; - return NULL; + tty = (struct tty_struct *)pts_inode->i_private; + + dput(dentry); + + return tty; } void devpts_pty_kill(struct tty_struct *tty) --- linux-2.6.32.orig/fs/reiserfs/inode.c +++ linux-2.6.32/fs/reiserfs/inode.c @@ -2531,6 +2531,12 @@ return reiserfs_write_full_page(page, wbc); } +static void reiserfs_truncate_failed_write(struct inode *inode) +{ + truncate_inode_pages(inode->i_mapping, inode->i_size); + reiserfs_truncate_file(inode, 0); +} + static int reiserfs_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned flags, @@ -2597,6 +2603,8 @@ if (ret) { unlock_page(page); page_cache_release(page); + /* Truncate allocated blocks */ + reiserfs_truncate_failed_write(inode); } return ret; } @@ -2689,8 +2697,7 @@ ** transaction tracking stuff when the size changes. So, we have ** to do the i_size updates here. */ - pos += copied; - if (pos > inode->i_size) { + if (pos + copied > inode->i_size) { struct reiserfs_transaction_handle myth; reiserfs_write_lock(inode->i_sb); /* If the file have grown beyond the border where it @@ -2708,7 +2715,7 @@ goto journal_error; } reiserfs_update_inode_transaction(inode); - inode->i_size = pos; + inode->i_size = pos + copied; /* * this will just nest into our transaction. It's important * to use mark_inode_dirty so the inode gets pushed around on the @@ -2735,6 +2742,10 @@ out: unlock_page(page); page_cache_release(page); + + if (pos + len > inode->i_size) + reiserfs_truncate_failed_write(inode); + return ret == 0 ? copied : ret; journal_error: --- linux-2.6.32.orig/fs/reiserfs/dir.c +++ linux-2.6.32/fs/reiserfs/dir.c @@ -45,8 +45,6 @@ struct reiserfs_de_head *deh) { struct dentry *privroot = REISERFS_SB(dir->d_sb)->priv_root; - if (reiserfs_expose_privroot(dir->d_sb)) - return 0; return (dir == dir->d_parent && privroot->d_inode && deh->deh_objectid == INODE_PKEY(privroot->d_inode)->k_objectid); } --- linux-2.6.32.orig/fs/reiserfs/xattr.c +++ linux-2.6.32/fs/reiserfs/xattr.c @@ -536,7 +536,7 @@ if (!err && new_size < i_size_read(dentry->d_inode)) { struct iattr newattrs = { .ia_ctime = current_fs_time(inode->i_sb), - .ia_size = buffer_size, + .ia_size = new_size, .ia_valid = ATTR_SIZE | ATTR_CTIME, }; mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); @@ -952,21 +952,13 @@ return generic_permission(inode, mask, NULL); } -/* This will catch lookups from the fs root to .reiserfs_priv */ -static int -xattr_lookup_poison(struct dentry *dentry, struct qstr *q1, struct qstr *name) -{ - struct dentry *priv_root = REISERFS_SB(dentry->d_sb)->priv_root; - if (container_of(q1, struct dentry, d_name) == priv_root) - return -ENOENT; - if (q1->len == name->len && - !memcmp(q1->name, name->name, name->len)) - return 0; - return 1; +static int xattr_hide_revalidate(struct dentry *dentry, struct nameidata *nd) +{ + return -EPERM; } static const struct dentry_operations xattr_lookup_poison_ops = { - .d_compare = xattr_lookup_poison, + .d_revalidate = xattr_hide_revalidate, }; int reiserfs_lookup_privroot(struct super_block *s) @@ -980,8 +972,7 @@ strlen(PRIVROOT_NAME)); if (!IS_ERR(dentry)) { REISERFS_SB(s)->priv_root = dentry; - if (!reiserfs_expose_privroot(s)) - s->s_root->d_op = &xattr_lookup_poison_ops; + dentry->d_op = &xattr_lookup_poison_ops; if (dentry->d_inode) dentry->d_inode->i_flags |= S_PRIVATE; } else --- linux-2.6.32.orig/fs/nfs/client.c +++ linux-2.6.32/fs/nfs/client.c @@ -965,6 +965,8 @@ static void nfs_server_copy_userdata(struct nfs_server *target, struct nfs_server *source) { target->flags = source->flags; + target->rsize = source->rsize; + target->wsize = source->wsize; target->acregmin = source->acregmin; target->acregmax = source->acregmax; target->acdirmin = source->acdirmin; @@ -1283,7 +1285,8 @@ /* Initialise the client representation from the mount data */ server->flags = data->flags; - server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR; + server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR| + NFS_CAP_POSIX_LOCK; server->options = data->options; /* Get a client record */ --- linux-2.6.32.orig/fs/nfs/nfs4proc.c +++ linux-2.6.32/fs/nfs/nfs4proc.c @@ -1439,6 +1439,8 @@ nfs_post_op_update_inode(dir, o_res->dir_attr); } else nfs_refresh_inode(dir, o_res->dir_attr); + if ((o_res->rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) == 0) + server->caps &= ~NFS_CAP_POSIX_LOCK; if(o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) { status = _nfs4_proc_open_confirm(data); if (status != 0) @@ -1573,6 +1575,8 @@ status = PTR_ERR(state); if (IS_ERR(state)) goto err_opendata_put; + if (server->caps & NFS_CAP_POSIX_LOCK) + set_bit(NFS_STATE_POSIX_LOCKS, &state->flags); nfs4_opendata_put(opendata); nfs4_put_state_owner(sp); *res = state; @@ -3976,6 +3980,22 @@ .rpc_release = nfs4_lock_release, }; +static void nfs4_handle_setlk_error(struct nfs_server *server, struct nfs4_lock_state *lsp, int new_lock_owner, int error) +{ + struct nfs_client *clp = server->nfs_client; + struct nfs4_state *state = lsp->ls_state; + + switch (error) { + case -NFS4ERR_ADMIN_REVOKED: + case -NFS4ERR_BAD_STATEID: + case -NFS4ERR_EXPIRED: + if (new_lock_owner != 0 || + (lsp->ls_flags & NFS_LOCK_INITIALIZED) != 0) + nfs4_state_mark_reclaim_nograce(clp, state); + lsp->ls_seqid.flags &= ~NFS_SEQID_CONFIRMED; + }; +} + static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *fl, int reclaim) { struct nfs4_lockdata *data; @@ -4011,6 +4031,9 @@ ret = nfs4_wait_for_completion_rpc_task(task); if (ret == 0) { ret = data->rpc_status; + if (ret) + nfs4_handle_setlk_error(data->server, data->lsp, + data->arg.new_lock_owner, ret); } else data->cancelled = 1; rpc_put_task(task); @@ -4060,8 +4083,11 @@ { struct nfs_inode *nfsi = NFS_I(state->inode); unsigned char fl_flags = request->fl_flags; - int status; + int status = -ENOLCK; + if ((fl_flags & FL_POSIX) && + !test_bit(NFS_STATE_POSIX_LOCKS, &state->flags)) + goto out; /* Is this a delegated open? */ status = nfs4_set_lock_state(state, request); if (status != 0) --- linux-2.6.32.orig/fs/nfs/super.c +++ linux-2.6.32/fs/nfs/super.c @@ -241,6 +241,7 @@ static int nfs_get_sb(struct file_system_type *, int, const char *, void *, struct vfsmount *); static int nfs_xdev_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *raw_data, struct vfsmount *mnt); +static void nfs_put_super(struct super_block *); static void nfs_kill_super(struct super_block *); static int nfs_remount(struct super_block *sb, int *flags, char *raw_data); @@ -264,6 +265,7 @@ .alloc_inode = nfs_alloc_inode, .destroy_inode = nfs_destroy_inode, .write_inode = nfs_write_inode, + .put_super = nfs_put_super, .statfs = nfs_statfs, .clear_inode = nfs_clear_inode, .umount_begin = nfs_umount_begin, @@ -333,6 +335,7 @@ .alloc_inode = nfs_alloc_inode, .destroy_inode = nfs_destroy_inode, .write_inode = nfs_write_inode, + .put_super = nfs_put_super, .statfs = nfs_statfs, .clear_inode = nfs4_clear_inode, .umount_begin = nfs_umount_begin, @@ -734,8 +737,6 @@ data = kzalloc(sizeof(*data), GFP_KERNEL); if (data) { - data->rsize = NFS_MAX_FILE_IO_SIZE; - data->wsize = NFS_MAX_FILE_IO_SIZE; data->acregmin = NFS_DEF_ACREGMIN; data->acregmax = NFS_DEF_ACREGMAX; data->acdirmin = NFS_DEF_ACDIRMIN; @@ -2198,6 +2199,17 @@ } /* + * Ensure that we unregister the bdi before kill_anon_super + * releases the device name + */ +static void nfs_put_super(struct super_block *s) +{ + struct nfs_server *server = NFS_SB(s); + + bdi_unregister(&server->backing_dev_info); +} + +/* * Destroy an NFS2/3 superblock */ static void nfs_kill_super(struct super_block *s) @@ -2205,7 +2217,6 @@ struct nfs_server *server = NFS_SB(s); kill_anon_super(s); - bdi_unregister(&server->backing_dev_info); nfs_fscache_release_super_cookie(s); nfs_free_server(server); } --- linux-2.6.32.orig/fs/nfs/direct.c +++ linux-2.6.32/fs/nfs/direct.c @@ -342,6 +342,7 @@ data->res.fattr = &data->fattr; data->res.eof = 0; data->res.count = bytes; + nfs_fattr_init(&data->fattr); msg.rpc_argp = &data->args; msg.rpc_resp = &data->res; @@ -575,6 +576,7 @@ data->res.count = 0; data->res.fattr = &data->fattr; data->res.verf = &data->verf; + nfs_fattr_init(&data->fattr); NFS_PROTO(data->inode)->commit_setup(data, &msg); @@ -766,6 +768,7 @@ data->res.fattr = &data->fattr; data->res.count = bytes; data->res.verf = &data->verf; + nfs_fattr_init(&data->fattr); task_setup_data.task = &data->task; task_setup_data.callback_data = data; --- linux-2.6.32.orig/fs/nfs/fscache.c +++ linux-2.6.32/fs/nfs/fscache.c @@ -354,12 +354,11 @@ */ int nfs_fscache_release_page(struct page *page, gfp_t gfp) { - struct nfs_inode *nfsi = NFS_I(page->mapping->host); - struct fscache_cookie *cookie = nfsi->fscache; - - BUG_ON(!cookie); - if (PageFsCache(page)) { + struct nfs_inode *nfsi = NFS_I(page->mapping->host); + struct fscache_cookie *cookie = nfsi->fscache; + + BUG_ON(!cookie); dfprintk(FSCACHE, "NFS: fscache releasepage (0x%p/0x%p/0x%p)\n", cookie, page, nfsi); --- linux-2.6.32.orig/fs/nfs/nfs4xdr.c +++ linux-2.6.32/fs/nfs/nfs4xdr.c @@ -4554,7 +4554,7 @@ * If the server returns different values for sessionID, slotID or * sequence number, the server is looney tunes. */ - status = -ESERVERFAULT; + status = -EREMOTEIO; if (memcmp(id.data, res->sr_session->sess_id.data, NFS4_MAX_SESSIONID_LEN)) { @@ -5678,7 +5678,7 @@ { NFS4ERR_BAD_COOKIE, -EBADCOOKIE }, { NFS4ERR_NOTSUPP, -ENOTSUPP }, { NFS4ERR_TOOSMALL, -ETOOSMALL }, - { NFS4ERR_SERVERFAULT, -ESERVERFAULT }, + { NFS4ERR_SERVERFAULT, -EREMOTEIO }, { NFS4ERR_BADTYPE, -EBADTYPE }, { NFS4ERR_LOCKED, -EAGAIN }, { NFS4ERR_SYMLINK, -ELOOP }, @@ -5705,7 +5705,7 @@ } if (stat <= 10000 || stat > 10100) { /* The server is looney tunes. */ - return -ESERVERFAULT; + return -EREMOTEIO; } /* If we cannot translate the error, the recovery routines should * handle it. --- linux-2.6.32.orig/fs/nfs/write.c +++ linux-2.6.32/fs/nfs/write.c @@ -1542,6 +1542,7 @@ break; } ret = nfs_wait_on_request(req); + nfs_release_request(req); if (ret < 0) goto out; } @@ -1612,15 +1613,16 @@ if (ret) goto out_unlock; page_cache_get(newpage); + spin_lock(&mapping->host->i_lock); req->wb_page = newpage; SetPagePrivate(newpage); - set_page_private(newpage, page_private(page)); + set_page_private(newpage, (unsigned long)req); ClearPagePrivate(page); set_page_private(page, 0); + spin_unlock(&mapping->host->i_lock); page_cache_release(page); out_unlock: nfs_clear_page_tag_locked(req); - nfs_release_request(req); out: return ret; } --- linux-2.6.32.orig/fs/nfs/nfs2xdr.c +++ linux-2.6.32/fs/nfs/nfs2xdr.c @@ -699,7 +699,7 @@ { NFSERR_BAD_COOKIE, -EBADCOOKIE }, { NFSERR_NOTSUPP, -ENOTSUPP }, { NFSERR_TOOSMALL, -ETOOSMALL }, - { NFSERR_SERVERFAULT, -ESERVERFAULT }, + { NFSERR_SERVERFAULT, -EREMOTEIO }, { NFSERR_BADTYPE, -EBADTYPE }, { NFSERR_JUKEBOX, -EJUKEBOX }, { -1, -EIO } --- linux-2.6.32.orig/fs/nfs/inode.c +++ linux-2.6.32/fs/nfs/inode.c @@ -759,7 +759,7 @@ { struct nfs_inode *nfsi = NFS_I(inode); - if (nfs_have_delegation(inode, FMODE_READ)) + if (nfs_have_delegated_attributes(inode)) return 0; return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo); } --- linux-2.6.32.orig/fs/nfs/pagelist.c +++ linux-2.6.32/fs/nfs/pagelist.c @@ -112,12 +112,10 @@ */ int nfs_set_page_tag_locked(struct nfs_page *req) { - struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode); - if (!nfs_lock_request_dontget(req)) return 0; if (req->wb_page != NULL) - radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); + radix_tree_tag_set(&NFS_I(req->wb_context->path.dentry->d_inode)->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); return 1; } @@ -126,10 +124,10 @@ */ void nfs_clear_page_tag_locked(struct nfs_page *req) { - struct inode *inode = req->wb_context->path.dentry->d_inode; - struct nfs_inode *nfsi = NFS_I(inode); - if (req->wb_page != NULL) { + struct inode *inode = req->wb_context->path.dentry->d_inode; + struct nfs_inode *nfsi = NFS_I(inode); + spin_lock(&inode->i_lock); radix_tree_tag_clear(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED); nfs_unlock_request(req); @@ -142,16 +140,22 @@ * nfs_clear_request - Free up all resources allocated to the request * @req: * - * Release page resources associated with a write request after it - * has completed. + * Release page and open context resources associated with a read/write + * request after it has completed. */ void nfs_clear_request(struct nfs_page *req) { struct page *page = req->wb_page; + struct nfs_open_context *ctx = req->wb_context; + if (page != NULL) { page_cache_release(page); req->wb_page = NULL; } + if (ctx != NULL) { + put_nfs_open_context(ctx); + req->wb_context = NULL; + } } @@ -165,9 +169,8 @@ { struct nfs_page *req = container_of(kref, struct nfs_page, wb_kref); - /* Release struct file or cached credential */ + /* Release struct file and open context */ nfs_clear_request(req); - put_nfs_open_context(req->wb_context); nfs_page_free(req); } @@ -176,6 +179,12 @@ kref_put(&req->wb_kref, nfs_free_request); } +static int nfs_wait_bit_uninterruptible(void *word) +{ + io_schedule(); + return 0; +} + /** * nfs_wait_on_request - Wait for a request to complete. * @req: request to wait upon. @@ -186,14 +195,9 @@ int nfs_wait_on_request(struct nfs_page *req) { - int ret = 0; - - if (!test_bit(PG_BUSY, &req->wb_flags)) - goto out; - ret = out_of_line_wait_on_bit(&req->wb_flags, PG_BUSY, - nfs_wait_bit_killable, TASK_KILLABLE); -out: - return ret; + return wait_on_bit(&req->wb_flags, PG_BUSY, + nfs_wait_bit_uninterruptible, + TASK_UNINTERRUPTIBLE); } /** --- linux-2.6.32.orig/fs/nfs/nfs4_fs.h +++ linux-2.6.32/fs/nfs/nfs4_fs.h @@ -141,6 +141,7 @@ NFS_O_RDWR_STATE, /* OPEN stateid has read/write state */ NFS_STATE_RECLAIM_REBOOT, /* OPEN stateid server rebooted */ NFS_STATE_RECLAIM_NOGRACE, /* OPEN stateid needs to recover state */ + NFS_STATE_POSIX_LOCKS, /* Posix locks are supported */ }; struct nfs4_state { --- linux-2.6.32.orig/fs/nfs/mount_clnt.c +++ linux-2.6.32/fs/nfs/mount_clnt.c @@ -120,7 +120,7 @@ { .status = MNT3ERR_INVAL, .errno = -EINVAL, }, { .status = MNT3ERR_NAMETOOLONG, .errno = -ENAMETOOLONG, }, { .status = MNT3ERR_NOTSUPP, .errno = -ENOTSUPP, }, - { .status = MNT3ERR_SERVERFAULT, .errno = -ESERVERFAULT, }, + { .status = MNT3ERR_SERVERFAULT, .errno = -EREMOTEIO, }, }; struct mountres { --- linux-2.6.32.orig/fs/nfs/dir.c +++ linux-2.6.32/fs/nfs/dir.c @@ -837,6 +837,8 @@ /* If we have submounts, don't unhash ! */ if (have_submounts(dentry)) goto out_valid; + if (dentry->d_flags & DCACHE_DISCONNECTED) + goto out_valid; shrink_dcache_parent(dentry); } d_drop(dentry); @@ -1025,12 +1027,12 @@ res = NULL; goto out; /* This turned out not to be a regular file */ + case -EISDIR: case -ENOTDIR: goto no_open; case -ELOOP: if (!(nd->intent.open.flags & O_NOFOLLOW)) goto no_open; - /* case -EISDIR: */ /* case -EINVAL: */ default: goto out; @@ -1797,7 +1799,7 @@ cache = nfs_access_search_rbtree(inode, cred); if (cache == NULL) goto out; - if (!nfs_have_delegation(inode, FMODE_READ) && + if (!nfs_have_delegated_attributes(inode) && !time_in_range_open(jiffies, cache->jiffies, cache->jiffies + nfsi->attrtimeo)) goto out_stale; res->jiffies = cache->jiffies; --- linux-2.6.32.orig/fs/nfs/file.c +++ linux-2.6.32/fs/nfs/file.c @@ -486,6 +486,9 @@ { dfprintk(PAGECACHE, "NFS: release_page(%p)\n", page); + /* Only do I/O if gfp is a superset of GFP_KERNEL */ + if ((gfp & GFP_KERNEL) == GFP_KERNEL) + nfs_wb_page(page->mapping->host, page); /* If PagePrivate() is set, then the page is not freeable */ if (PagePrivate(page)) return 0; --- linux-2.6.32.orig/fs/nfs/dns_resolve.c +++ linux-2.6.32/fs/nfs/dns_resolve.c @@ -36,6 +36,19 @@ }; +static void nfs_dns_ent_update(struct cache_head *cnew, + struct cache_head *ckey) +{ + struct nfs_dns_ent *new; + struct nfs_dns_ent *key; + + new = container_of(cnew, struct nfs_dns_ent, h); + key = container_of(ckey, struct nfs_dns_ent, h); + + memcpy(&new->addr, &key->addr, key->addrlen); + new->addrlen = key->addrlen; +} + static void nfs_dns_ent_init(struct cache_head *cnew, struct cache_head *ckey) { @@ -49,8 +62,7 @@ new->hostname = kstrndup(key->hostname, key->namelen, GFP_KERNEL); if (new->hostname) { new->namelen = key->namelen; - memcpy(&new->addr, &key->addr, key->addrlen); - new->addrlen = key->addrlen; + nfs_dns_ent_update(cnew, ckey); } else { new->namelen = 0; new->addrlen = 0; @@ -234,7 +246,7 @@ .cache_show = nfs_dns_show, .match = nfs_dns_match, .init = nfs_dns_ent_init, - .update = nfs_dns_ent_init, + .update = nfs_dns_ent_update, .alloc = nfs_dns_ent_alloc, }; --- linux-2.6.32.orig/fs/nfs/delegation.h +++ linux-2.6.32/fs/nfs/delegation.h @@ -68,4 +68,10 @@ } #endif +static inline int nfs_have_delegated_attributes(struct inode *inode) +{ + return nfs_have_delegation(inode, FMODE_READ) && + !(NFS_I(inode)->cache_validity & NFS_INO_REVAL_FORCED); +} + #endif --- linux-2.6.32.orig/fs/jbd/journal.c +++ linux-2.6.32/fs/jbd/journal.c @@ -1913,7 +1913,7 @@ { jbd_debugfs_dir = debugfs_create_dir("jbd", NULL); if (jbd_debugfs_dir) - jbd_debug = debugfs_create_u8("jbd-debug", S_IRUGO, + jbd_debug = debugfs_create_u8("jbd-debug", S_IRUGO | S_IWUSR, jbd_debugfs_dir, &journal_enable_debug); } --- linux-2.6.32.orig/fs/hfs/super.c +++ linux-2.6.32/fs/hfs/super.c @@ -409,8 +409,13 @@ /* try to get the root inode */ hfs_find_init(HFS_SB(sb)->cat_tree, &fd); res = hfs_cat_find_brec(sb, HFS_ROOT_CNID, &fd); - if (!res) + if (!res) { + if (fd.entrylength > sizeof(rec) || fd.entrylength < 0) { + res = -EIO; + goto bail; + } hfs_bnode_read(fd.bnode, &rec, fd.entryoffset, fd.entrylength); + } if (res) { hfs_find_exit(&fd); goto bail_no_root; --- linux-2.6.32.orig/fs/hfs/catalog.c +++ linux-2.6.32/fs/hfs/catalog.c @@ -289,6 +289,10 @@ err = hfs_brec_find(&src_fd); if (err) goto out; + if (src_fd.entrylength > sizeof(entry) || src_fd.entrylength < 0) { + err = -EIO; + goto out; + } hfs_bnode_read(src_fd.bnode, &entry, src_fd.entryoffset, src_fd.entrylength); --- linux-2.6.32.orig/fs/hfs/dir.c +++ linux-2.6.32/fs/hfs/dir.c @@ -79,6 +79,11 @@ filp->f_pos++; /* fall through */ case 1: + if (fd.entrylength > sizeof(entry) || fd.entrylength < 0) { + err = -EIO; + goto out; + } + hfs_bnode_read(fd.bnode, &entry, fd.entryoffset, fd.entrylength); if (entry.type != HFS_CDR_THD) { printk(KERN_ERR "hfs: bad catalog folder thread\n"); @@ -109,6 +114,12 @@ err = -EIO; goto out; } + + if (fd.entrylength > sizeof(entry) || fd.entrylength < 0) { + err = -EIO; + goto out; + } + hfs_bnode_read(fd.bnode, &entry, fd.entryoffset, fd.entrylength); type = entry.type; len = hfs_mac2asc(sb, strbuf, &fd.key->cat.CName); --- linux-2.6.32.orig/fs/ext3/super.c +++ linux-2.6.32/fs/ext3/super.c @@ -2686,13 +2686,11 @@ buf->f_bsize = sb->s_blocksize; buf->f_blocks = le32_to_cpu(es->s_blocks_count) - sbi->s_overhead_last; buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter); - es->s_free_blocks_count = cpu_to_le32(buf->f_bfree); buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count); if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count)) buf->f_bavail = 0; buf->f_files = le32_to_cpu(es->s_inodes_count); buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); - es->s_free_inodes_count = cpu_to_le32(buf->f_ffree); buf->f_namelen = EXT3_NAME_LEN; fsid = le64_to_cpup((void *)es->s_uuid) ^ le64_to_cpup((void *)es->s_uuid + sizeof(u64)); --- linux-2.6.32.orig/fs/ext3/inode.c +++ linux-2.6.32/fs/ext3/inode.c @@ -1151,6 +1151,16 @@ return ext3_journal_get_write_access(handle, bh); } +/* + * Truncate blocks that were not used by write. We have to truncate the + * pagecache as well so that corresponding buffers get properly unmapped. + */ +static void ext3_truncate_failed_write(struct inode *inode) +{ + truncate_inode_pages(inode->i_mapping, inode->i_size); + ext3_truncate(inode); +} + static int ext3_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned flags, struct page **pagep, void **fsdata) @@ -1209,7 +1219,7 @@ unlock_page(page); page_cache_release(page); if (pos + len > inode->i_size) - ext3_truncate(inode); + ext3_truncate_failed_write(inode); } if (ret == -ENOSPC && ext3_should_retry_alloc(inode->i_sb, &retries)) goto retry; @@ -1304,7 +1314,7 @@ page_cache_release(page); if (pos + len > inode->i_size) - ext3_truncate(inode); + ext3_truncate_failed_write(inode); return ret ? ret : copied; } @@ -1330,7 +1340,7 @@ page_cache_release(page); if (pos + len > inode->i_size) - ext3_truncate(inode); + ext3_truncate_failed_write(inode); return ret ? ret : copied; } @@ -1383,7 +1393,7 @@ page_cache_release(page); if (pos + len > inode->i_size) - ext3_truncate(inode); + ext3_truncate_failed_write(inode); return ret ? ret : copied; } --- linux-2.6.32.orig/fs/ext3/xattr.c +++ linux-2.6.32/fs/ext3/xattr.c @@ -960,6 +960,10 @@ if (error) goto cleanup; + error = ext3_journal_get_write_access(handle, is.iloc.bh); + if (error) + goto cleanup; + if (EXT3_I(inode)->i_state & EXT3_STATE_NEW) { struct ext3_inode *raw_inode = ext3_raw_inode(&is.iloc); memset(raw_inode, 0, EXT3_SB(inode->i_sb)->s_inode_size); @@ -985,9 +989,6 @@ if (flags & XATTR_CREATE) goto cleanup; } - error = ext3_journal_get_write_access(handle, is.iloc.bh); - if (error) - goto cleanup; if (!value) { if (!is.s.not_found) error = ext3_xattr_ibody_set(handle, inode, &i, &is); --- linux-2.6.32.orig/fs/romfs/super.c +++ linux-2.6.32/fs/romfs/super.c @@ -544,6 +544,7 @@ error_rsb_inval: ret = -EINVAL; error_rsb: + kfree(rsb); return ret; } --- linux-2.6.32.orig/fs/xfs/xfs_log_recover.c +++ linux-2.6.32/fs/xfs/xfs_log_recover.c @@ -3517,7 +3517,7 @@ { xlog_rec_header_t *rhead; xfs_daddr_t blk_no; - xfs_caddr_t bufaddr, offset; + xfs_caddr_t offset; xfs_buf_t *hbp, *dbp; int error = 0, h_size; int bblks, split_bblks; @@ -3610,7 +3610,7 @@ /* * Check for header wrapping around physical end-of-log */ - offset = NULL; + offset = XFS_BUF_PTR(hbp); split_hblks = 0; wrapped_hblks = 0; if (blk_no + hblks <= log->l_logBBsize) { @@ -3646,9 +3646,8 @@ * - order is important. */ wrapped_hblks = hblks - split_hblks; - bufaddr = XFS_BUF_PTR(hbp); error = XFS_BUF_SET_PTR(hbp, - bufaddr + BBTOB(split_hblks), + offset + BBTOB(split_hblks), BBTOB(hblks - split_hblks)); if (error) goto bread_err2; @@ -3658,14 +3657,10 @@ if (error) goto bread_err2; - error = XFS_BUF_SET_PTR(hbp, bufaddr, + error = XFS_BUF_SET_PTR(hbp, offset, BBTOB(hblks)); if (error) goto bread_err2; - - if (!offset) - offset = xlog_align(log, 0, - wrapped_hblks, hbp); } rhead = (xlog_rec_header_t *)offset; error = xlog_valid_rec_header(log, rhead, @@ -3685,7 +3680,7 @@ } else { /* This log record is split across the * physical end of log */ - offset = NULL; + offset = XFS_BUF_PTR(dbp); split_bblks = 0; if (blk_no != log->l_logBBsize) { /* some data is before the physical @@ -3714,9 +3709,8 @@ * _first_, then the log start (LR header end) * - order is important. */ - bufaddr = XFS_BUF_PTR(dbp); error = XFS_BUF_SET_PTR(dbp, - bufaddr + BBTOB(split_bblks), + offset + BBTOB(split_bblks), BBTOB(bblks - split_bblks)); if (error) goto bread_err2; @@ -3727,13 +3721,9 @@ if (error) goto bread_err2; - error = XFS_BUF_SET_PTR(dbp, bufaddr, h_size); + error = XFS_BUF_SET_PTR(dbp, offset, h_size); if (error) goto bread_err2; - - if (!offset) - offset = xlog_align(log, wrapped_hblks, - bblks - split_bblks, dbp); } xlog_unpack_data(rhead, offset, log); if ((error = xlog_recover_process_data(log, rhash, --- linux-2.6.32.orig/fs/xfs/xfs_ag.h +++ linux-2.6.32/fs/xfs/xfs_ag.h @@ -215,6 +215,7 @@ int pag_ici_init; /* incore inode cache initialised */ rwlock_t pag_ici_lock; /* incore inode lock */ struct radix_tree_root pag_ici_root; /* incore inode cache root */ + int pag_ici_reclaimable; /* reclaimable inodes */ #endif } xfs_perag_t; --- linux-2.6.32.orig/fs/xfs/xfs_dfrag.c +++ linux-2.6.32/fs/xfs/xfs_dfrag.c @@ -113,10 +113,82 @@ return error; } +/* + * We need to check that the format of the data fork in the temporary inode is + * valid for the target inode before doing the swap. This is not a problem with + * attr1 because of the fixed fork offset, but attr2 has a dynamically sized + * data fork depending on the space the attribute fork is taking so we can get + * invalid formats on the target inode. + * + * E.g. target has space for 7 extents in extent format, temp inode only has + * space for 6. If we defragment down to 7 extents, then the tmp format is a + * btree, but when swapped it needs to be in extent format. Hence we can't just + * blindly swap data forks on attr2 filesystems. + * + * Note that we check the swap in both directions so that we don't end up with + * a corrupt temporary inode, either. + * + * Note that fixing the way xfs_fsr sets up the attribute fork in the source + * inode will prevent this situation from occurring, so all we do here is + * reject and log the attempt. basically we are putting the responsibility on + * userspace to get this right. + */ +static int +xfs_swap_extents_check_format( + xfs_inode_t *ip, /* target inode */ + xfs_inode_t *tip) /* tmp inode */ +{ + + /* Should never get a local format */ + if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || + tip->i_d.di_format == XFS_DINODE_FMT_LOCAL) + return EINVAL; + + /* + * if the target inode has less extents that then temporary inode then + * why did userspace call us? + */ + if (ip->i_d.di_nextents < tip->i_d.di_nextents) + return EINVAL; + + /* + * if the target inode is in extent form and the temp inode is in btree + * form then we will end up with the target inode in the wrong format + * as we already know there are less extents in the temp inode. + */ + if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && + tip->i_d.di_format == XFS_DINODE_FMT_BTREE) + return EINVAL; + + /* Check temp in extent form to max in target */ + if (tip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && + XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) > ip->i_df.if_ext_max) + return EINVAL; + + /* Check target in extent form to max in temp */ + if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && + XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) > tip->i_df.if_ext_max) + return EINVAL; + + /* Check root block of temp in btree form to max in target */ + if (tip->i_d.di_format == XFS_DINODE_FMT_BTREE && + XFS_IFORK_BOFF(ip) && + tip->i_df.if_broot_bytes > XFS_IFORK_BOFF(ip)) + return EINVAL; + + /* Check root block of target in btree form to max in temp */ + if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE && + XFS_IFORK_BOFF(tip) && + ip->i_df.if_broot_bytes > XFS_IFORK_BOFF(tip)) + return EINVAL; + + return 0; +} + int xfs_swap_extents( - xfs_inode_t *ip, - xfs_inode_t *tip, + xfs_inode_t *ip, /* target inode */ + xfs_inode_t *tip, /* tmp inode */ xfs_swapext_t *sxp) { xfs_mount_t *mp; @@ -160,13 +232,6 @@ goto out_unlock; } - /* Should never get a local format */ - if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || - tip->i_d.di_format == XFS_DINODE_FMT_LOCAL) { - error = XFS_ERROR(EINVAL); - goto out_unlock; - } - if (VN_CACHED(VFS_I(tip)) != 0) { xfs_inval_cached_trace(tip, 0, -1, 0, -1); error = xfs_flushinval_pages(tip, 0, -1, @@ -189,13 +254,12 @@ goto out_unlock; } - /* - * If the target has extended attributes, the tmp file - * must also in order to ensure the correct data fork - * format. - */ - if ( XFS_IFORK_Q(ip) != XFS_IFORK_Q(tip) ) { - error = XFS_ERROR(EINVAL); + /* check inode formats now that data is flushed */ + error = xfs_swap_extents_check_format(ip, tip); + if (error) { + xfs_fs_cmn_err(CE_NOTE, mp, + "%s: inode 0x%llx format is incompatible for exchanging.", + __FILE__, ip->i_ino); goto out_unlock; } @@ -276,6 +340,16 @@ *tifp = *tempifp; /* struct copy */ /* + * Fix the in-memory data fork values that are dependent on the fork + * offset in the inode. We can't assume they remain the same as attr2 + * has dynamic fork offsets. + */ + ifp->if_ext_max = XFS_IFORK_SIZE(ip, XFS_DATA_FORK) / + (uint)sizeof(xfs_bmbt_rec_t); + tifp->if_ext_max = XFS_IFORK_SIZE(tip, XFS_DATA_FORK) / + (uint)sizeof(xfs_bmbt_rec_t); + + /* * Fix the on-disk inode values */ tmp = (__uint64_t)ip->i_d.di_nblocks; --- linux-2.6.32.orig/fs/xfs/xfs_mount.c +++ linux-2.6.32/fs/xfs/xfs_mount.c @@ -1471,7 +1471,7 @@ if (!xfs_sb_version_haslazysbcount(&mp->m_sb)) return 0; - tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT); + tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT, KM_SLEEP); error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, XFS_DEFAULT_LOG_COUNT); if (error) { --- linux-2.6.32.orig/fs/xfs/xfs_inode.c +++ linux-2.6.32/fs/xfs/xfs_inode.c @@ -2877,8 +2877,8 @@ mp = ip->i_mount; /* - * If the inode isn't dirty, then just release the inode - * flush lock and do nothing. + * If the inode isn't dirty, then just release the inode flush lock and + * do nothing. */ if (xfs_inode_clean(ip)) { xfs_ifunlock(ip); @@ -2904,6 +2904,19 @@ xfs_iunpin_wait(ip); /* + * For stale inodes we cannot rely on the backing buffer remaining + * stale in cache for the remaining life of the stale inode and so + * xfs_itobp() below may give us a buffer that no longer contains + * inodes below. We have to check this after ensuring the inode is + * unpinned so that it is safe to reclaim the stale inode after the + * flush call. + */ + if (xfs_iflags_test(ip, XFS_ISTALE)) { + xfs_ifunlock(ip); + return 0; + } + + /* * This may have been unpinned because the filesystem is shutting * down forcibly. If that's the case we must not write this inode * to disk, because the log record didn't make it to disk! --- linux-2.6.32.orig/fs/xfs/xfs_fsops.c +++ linux-2.6.32/fs/xfs/xfs_fsops.c @@ -611,7 +611,7 @@ xfs_inode_t *ip; int error; - tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1); + tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1, KM_SLEEP); error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0); if (error) { xfs_trans_cancel(tp, 0); --- linux-2.6.32.orig/fs/xfs/xfs_mount.h +++ linux-2.6.32/fs/xfs/xfs_mount.h @@ -209,6 +209,7 @@ __uint64_t m_maxioffset; /* maximum inode offset */ __uint64_t m_resblks; /* total reserved blocks */ __uint64_t m_resblks_avail;/* available reserved blocks */ + __uint64_t m_resblks_save; /* reserved blks @ remount,ro */ int m_dalign; /* stripe unit */ int m_swidth; /* stripe width */ int m_sinoalign; /* stripe unit inode alignment */ @@ -242,6 +243,7 @@ wait_queue_head_t m_wait_single_sync_task; __int64_t m_update_flags; /* sb flags we need to update on the next remount,rw */ + struct list_head m_mplist; /* inode shrinker mount list */ } xfs_mount_t; /* --- linux-2.6.32.orig/fs/xfs/xfs_vnodeops.h +++ linux-2.6.32/fs/xfs/xfs_vnodeops.h @@ -38,7 +38,6 @@ const char *target_path, mode_t mode, struct xfs_inode **ipp, cred_t *credp); int xfs_set_dmattrs(struct xfs_inode *ip, u_int evmask, u_int16_t state); -int xfs_reclaim(struct xfs_inode *ip); int xfs_change_file_space(struct xfs_inode *ip, int cmd, xfs_flock64_t *bf, xfs_off_t offset, int attr_flags); int xfs_rename(struct xfs_inode *src_dp, struct xfs_name *src_name, --- linux-2.6.32.orig/fs/xfs/xfs_iget.c +++ linux-2.6.32/fs/xfs/xfs_iget.c @@ -228,13 +228,12 @@ xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); /* - * We need to set XFS_INEW atomically with clearing the - * reclaimable tag so that we do have an indicator of the - * inode still being initialized. + * We need to set XFS_IRECLAIM to prevent xfs_reclaim_inode + * from stomping over us while we recycle the inode. We can't + * clear the radix tree reclaimable tag yet as it requires + * pag_ici_lock to be held exclusive. */ - ip->i_flags |= XFS_INEW; - ip->i_flags &= ~XFS_IRECLAIMABLE; - __xfs_inode_clear_reclaim_tag(mp, pag, ip); + ip->i_flags |= XFS_IRECLAIM; spin_unlock(&ip->i_flags_lock); read_unlock(&pag->pag_ici_lock); @@ -253,7 +252,15 @@ __xfs_inode_set_reclaim_tag(pag, ip); goto out_error; } + + write_lock(&pag->pag_ici_lock); + spin_lock(&ip->i_flags_lock); + ip->i_flags &= ~(XFS_IRECLAIMABLE | XFS_IRECLAIM); + ip->i_flags |= XFS_INEW; + __xfs_inode_clear_reclaim_tag(mp, pag, ip); inode->i_state = I_LOCK|I_NEW; + spin_unlock(&ip->i_flags_lock); + write_unlock(&pag->pag_ici_lock); } else { /* If the VFS inode is being torn down, pause and try again. */ if (!igrab(inode)) { @@ -511,17 +518,21 @@ { struct xfs_mount *mp = ip->i_mount; struct xfs_perag *pag; + xfs_agino_t agino = XFS_INO_TO_AGINO(mp, ip->i_ino); XFS_STATS_INC(xs_ig_reclaims); /* - * Remove the inode from the per-AG radix tree. It doesn't matter - * if it was never added to it because radix_tree_delete can deal - * with that case just fine. + * Remove the inode from the per-AG radix tree. + * + * Because radix_tree_delete won't complain even if the item was never + * added to the tree assert that it's been there before to catch + * problems with the inode life time early on. */ pag = xfs_get_perag(mp, ip->i_ino); write_lock(&pag->pag_ici_lock); - radix_tree_delete(&pag->pag_ici_root, XFS_INO_TO_AGINO(mp, ip->i_ino)); + if (!radix_tree_delete(&pag->pag_ici_root, agino)) + ASSERT(0); write_unlock(&pag->pag_ici_lock); xfs_put_perag(mp, pag); --- linux-2.6.32.orig/fs/xfs/xfs_alloc.c +++ linux-2.6.32/fs/xfs/xfs_alloc.c @@ -2703,45 +2703,35 @@ xfs_mount_t *mp; xfs_perag_busy_t *bsy; xfs_agblock_t uend, bend; - xfs_lsn_t lsn; + xfs_lsn_t lsn = 0; int cnt; mp = tp->t_mountp; spin_lock(&mp->m_perag[agno].pagb_lock); - cnt = mp->m_perag[agno].pagb_count; - uend = bno + len - 1; - /* search pagb_list for this slot, skipping open slots */ - for (bsy = mp->m_perag[agno].pagb_list; cnt; bsy++) { - - /* - * (start1,length1) within (start2, length2) - */ - if (bsy->busy_tp != NULL) { - bend = bsy->busy_start + bsy->busy_length - 1; - if ((bno > bend) || (uend < bsy->busy_start)) { - cnt--; - } else { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", - "found1", agno, bno, len, tp); - break; - } - } - } - /* - * If a block was found, force the log through the LSN of the - * transaction that freed the block + * search pagb_list for this slot, skipping open slots. We have to + * search the entire array as there may be multiple overlaps and + * we have to get the most recent LSN for the log force to push out + * all the transactions that span the range. */ - if (cnt) { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", "found", agno, bno, len, tp); - lsn = bsy->busy_tp->t_commit_lsn; - spin_unlock(&mp->m_perag[agno].pagb_lock); - xfs_log_force(mp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC); - } else { - TRACE_BUSYSEARCH("xfs_alloc_search_busy", "not-found", agno, bno, len, tp); - spin_unlock(&mp->m_perag[agno].pagb_lock); + for (cnt = 0; cnt < mp->m_perag[agno].pagb_count; cnt++) { + bsy = &mp->m_perag[agno].pagb_list[cnt]; + if (!bsy->busy_tp) + continue; + bend = bsy->busy_start + bsy->busy_length - 1; + if (bno > bend || uend < bsy->busy_start) + continue; + + /* (start1,length1) within (start2, length2) */ + if (XFS_LSN_CMP(bsy->busy_tp->t_commit_lsn, lsn) > 0) + lsn = bsy->busy_tp->t_commit_lsn; } + spin_unlock(&mp->m_perag[agno].pagb_lock); + TRACE_BUSYSEARCH("xfs_alloc_search_busy", lsn ? "found" : "not-found", + agno, bno, len, tp); + if (lsn) + xfs_log_force(mp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC); } --- linux-2.6.32.orig/fs/xfs/xfs_vnodeops.c +++ linux-2.6.32/fs/xfs/xfs_vnodeops.c @@ -69,7 +69,6 @@ uint commit_flags=0; uid_t uid=0, iuid=0; gid_t gid=0, igid=0; - int timeflags = 0; struct xfs_dquot *udqp, *gdqp, *olddquot1, *olddquot2; int need_iolock = 1; @@ -134,16 +133,13 @@ if (flags & XFS_ATTR_NOLOCK) need_iolock = 0; if (!(mask & ATTR_SIZE)) { - if ((mask != (ATTR_CTIME|ATTR_ATIME|ATTR_MTIME)) || - (mp->m_flags & XFS_MOUNT_WSYNC)) { - tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); - commit_flags = 0; - if ((code = xfs_trans_reserve(tp, 0, - XFS_ICHANGE_LOG_RES(mp), 0, - 0, 0))) { - lock_flags = 0; - goto error_return; - } + tp = xfs_trans_alloc(mp, XFS_TRANS_SETATTR_NOT_SIZE); + commit_flags = 0; + code = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), + 0, 0, 0); + if (code) { + lock_flags = 0; + goto error_return; } } else { if (DM_EVENT_ENABLED(ip, DM_EVENT_TRUNCATE) && @@ -294,15 +290,23 @@ * or we are explicitly asked to change it. This handles * the semantic difference between truncate() and ftruncate() * as implemented in the VFS. - */ - if (iattr->ia_size != ip->i_size || (mask & ATTR_CTIME)) - timeflags |= XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG; + * + * The regular truncate() case without ATTR_CTIME and ATTR_MTIME + * is a special case where we need to update the times despite + * not having these flags set. For all other operations the + * VFS set these flags explicitly if it wants a timestamp + * update. + */ + if (iattr->ia_size != ip->i_size && + (!(mask & (ATTR_CTIME | ATTR_MTIME)))) { + iattr->ia_ctime = iattr->ia_mtime = + current_fs_time(inode->i_sb); + mask |= ATTR_CTIME | ATTR_MTIME; + } if (iattr->ia_size > ip->i_size) { ip->i_d.di_size = iattr->ia_size; ip->i_size = iattr->ia_size; - if (!(flags & XFS_ATTR_DMI)) - xfs_ichgtime(ip, XFS_ICHGTIME_CHG); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); } else if (iattr->ia_size <= ip->i_size || (iattr->ia_size == 0 && ip->i_d.di_nextents)) { @@ -373,9 +377,6 @@ ip->i_d.di_gid = gid; inode->i_gid = gid; } - - xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); - timeflags |= XFS_ICHGTIME_CHG; } /* @@ -392,51 +393,37 @@ inode->i_mode &= S_IFMT; inode->i_mode |= mode & ~S_IFMT; - - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - timeflags |= XFS_ICHGTIME_CHG; } /* * Change file access or modified times. */ - if (mask & (ATTR_ATIME|ATTR_MTIME)) { - if (mask & ATTR_ATIME) { - inode->i_atime = iattr->ia_atime; - ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; - ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; - ip->i_update_core = 1; - } - if (mask & ATTR_MTIME) { - inode->i_mtime = iattr->ia_mtime; - ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; - ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; - timeflags &= ~XFS_ICHGTIME_MOD; - timeflags |= XFS_ICHGTIME_CHG; - } - if (tp && (mask & (ATTR_MTIME_SET|ATTR_ATIME_SET))) - xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); + if (mask & ATTR_ATIME) { + inode->i_atime = iattr->ia_atime; + ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; + ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; + ip->i_update_core = 1; } - - /* - * Change file inode change time only if ATTR_CTIME set - * AND we have been called by a DMI function. - */ - - if ((flags & XFS_ATTR_DMI) && (mask & ATTR_CTIME)) { + if (mask & ATTR_CTIME) { inode->i_ctime = iattr->ia_ctime; ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec; ip->i_update_core = 1; - timeflags &= ~XFS_ICHGTIME_CHG; + } + if (mask & ATTR_MTIME) { + inode->i_mtime = iattr->ia_mtime; + ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec; + ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec; + ip->i_update_core = 1; } /* - * Send out timestamp changes that need to be set to the - * current time. Not done when called by a DMI function. + * And finally, log the inode core if any attribute in it + * has been changed. */ - if (timeflags && !(flags & XFS_ATTR_DMI)) - xfs_ichgtime(ip, timeflags); + if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE| + ATTR_ATIME|ATTR_CTIME|ATTR_MTIME)) + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); XFS_STATS_INC(xs_ig_attrchg); @@ -451,12 +438,10 @@ * mix so this probably isn't worth the trouble to optimize. */ code = 0; - if (tp) { - if (mp->m_flags & XFS_MOUNT_WSYNC) - xfs_trans_set_sync(tp); + if (mp->m_flags & XFS_MOUNT_WSYNC) + xfs_trans_set_sync(tp); - code = xfs_trans_commit(tp, commit_flags); - } + code = xfs_trans_commit(tp, commit_flags); xfs_iunlock(ip, lock_flags); @@ -612,7 +597,7 @@ { xfs_trans_t *tp; int error = 0; - int log_flushed = 0, changed = 1; + int log_flushed = 0; xfs_itrace_entry(ip); @@ -642,19 +627,11 @@ * disk yet, the inode will be still be pinned. If it is, * force the log. */ - xfs_iunlock(ip, XFS_ILOCK_SHARED); - if (xfs_ipincount(ip)) { error = _xfs_log_force(ip->i_mount, (xfs_lsn_t)0, XFS_LOG_FORCE | XFS_LOG_SYNC, &log_flushed); - } else { - /* - * If the inode is not pinned and nothing has changed - * we don't need to flush the cache. - */ - changed = 0; } } else { /* @@ -689,7 +666,7 @@ xfs_iunlock(ip, XFS_ILOCK_EXCL); } - if ((ip->i_mount->m_flags & XFS_MOUNT_BARRIER) && changed) { + if (ip->i_mount->m_flags & XFS_MOUNT_BARRIER) { /* * If the log write didn't issue an ordered tag we need * to flush the disk cache for the data device now. @@ -709,6 +686,11 @@ } /* + * Flags for xfs_free_eofblocks + */ +#define XFS_FREE_EOF_TRYLOCK (1<<0) + +/* * This is called by xfs_inactive to free any blocks beyond eof * when the link count isn't zero and by xfs_dm_punch_hole() when * punching a hole to EOF. @@ -726,7 +708,6 @@ xfs_filblks_t map_len; int nimaps; xfs_bmbt_irec_t imap; - int use_iolock = (flags & XFS_FREE_EOF_LOCK); /* * Figure out if there are any blocks beyond the end @@ -768,14 +749,19 @@ * cache and we can't * do that within a transaction. */ - if (use_iolock) + if (flags & XFS_FREE_EOF_TRYLOCK) { + if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { + xfs_trans_cancel(tp, 0); + return 0; + } + } else { xfs_ilock(ip, XFS_IOLOCK_EXCL); + } error = xfs_itruncate_start(ip, XFS_ITRUNC_DEFINITE, ip->i_size); if (error) { xfs_trans_cancel(tp, 0); - if (use_iolock) - xfs_iunlock(ip, XFS_IOLOCK_EXCL); + xfs_iunlock(ip, XFS_IOLOCK_EXCL); return error; } @@ -812,8 +798,7 @@ error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); } - xfs_iunlock(ip, (use_iolock ? (XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL) - : XFS_ILOCK_EXCL)); + xfs_iunlock(ip, XFS_IOLOCK_EXCL|XFS_ILOCK_EXCL); } return error; } @@ -1113,7 +1098,17 @@ (ip->i_df.if_flags & XFS_IFEXTENTS)) && (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)))) { - error = xfs_free_eofblocks(mp, ip, XFS_FREE_EOF_LOCK); + + /* + * If we can't get the iolock just skip truncating + * the blocks past EOF because we could deadlock + * with the mmap_sem otherwise. We'll get another + * chance to drop them once the last reference to + * the inode is dropped, so we'll never leak blocks + * permanently. + */ + error = xfs_free_eofblocks(mp, ip, + XFS_FREE_EOF_TRYLOCK); if (error) return error; } @@ -1184,7 +1179,7 @@ (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)) || (ip->i_delayed_blks != 0)))) { - error = xfs_free_eofblocks(mp, ip, XFS_FREE_EOF_LOCK); + error = xfs_free_eofblocks(mp, ip, 0); if (error) return VN_INACTIVE_CACHE; } @@ -2456,46 +2451,6 @@ return error; } -int -xfs_reclaim( - xfs_inode_t *ip) -{ - - xfs_itrace_entry(ip); - - ASSERT(!VN_MAPPED(VFS_I(ip))); - - /* bad inode, get out here ASAP */ - if (is_bad_inode(VFS_I(ip))) { - xfs_ireclaim(ip); - return 0; - } - - xfs_ioend_wait(ip); - - ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0); - - /* - * If we have nothing to flush with this inode then complete the - * teardown now, otherwise break the link between the xfs inode and the - * linux inode and clean up the xfs inode later. This avoids flushing - * the inode to disk during the delete operation itself. - * - * When breaking the link, we need to set the XFS_IRECLAIMABLE flag - * first to ensure that xfs_iunpin() will never see an xfs inode - * that has a linux inode being reclaimed. Synchronisation is provided - * by the i_flags_lock. - */ - if (!ip->i_update_core && (ip->i_itemp == NULL)) { - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_iflock(ip); - xfs_iflags_set(ip, XFS_IRECLAIMABLE); - return xfs_reclaim_inode(ip, 1, XFS_IFLUSH_DELWRI_ELSE_SYNC); - } - xfs_inode_set_reclaim_tag(ip); - return 0; -} - /* * xfs_alloc_file_space() * This routine allocates disk space for the given file. --- linux-2.6.32.orig/fs/xfs/xfs_trans.h +++ linux-2.6.32/fs/xfs/xfs_trans.h @@ -924,7 +924,7 @@ * XFS transaction mechanism exported interfaces. */ xfs_trans_t *xfs_trans_alloc(struct xfs_mount *, uint); -xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint); +xfs_trans_t *_xfs_trans_alloc(struct xfs_mount *, uint, uint); xfs_trans_t *xfs_trans_dup(xfs_trans_t *); int xfs_trans_reserve(xfs_trans_t *, uint, uint, uint, uint, uint); --- linux-2.6.32.orig/fs/xfs/xfs_trans.c +++ linux-2.6.32/fs/xfs/xfs_trans.c @@ -236,19 +236,20 @@ uint type) { xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); - return _xfs_trans_alloc(mp, type); + return _xfs_trans_alloc(mp, type, KM_SLEEP); } xfs_trans_t * _xfs_trans_alloc( xfs_mount_t *mp, - uint type) + uint type, + uint memflags) { xfs_trans_t *tp; atomic_inc(&mp->m_active_trans); - tp = kmem_zone_zalloc(xfs_trans_zone, KM_SLEEP); + tp = kmem_zone_zalloc(xfs_trans_zone, memflags); tp->t_magic = XFS_TRANS_MAGIC; tp->t_type = type; tp->t_mountp = mp; --- linux-2.6.32.orig/fs/xfs/xfs_rw.h +++ linux-2.6.32/fs/xfs/xfs_rw.h @@ -37,13 +37,6 @@ } /* - * Flags for xfs_free_eofblocks - */ -#define XFS_FREE_EOF_LOCK (1<<0) -#define XFS_FREE_EOF_NOLOCK (1<<1) - - -/* * helper function to extract extent size hint from inode */ STATIC_INLINE xfs_extlen_t --- linux-2.6.32.orig/fs/xfs/xfs_iomap.c +++ linux-2.6.32/fs/xfs/xfs_iomap.c @@ -860,8 +860,15 @@ * set up a transaction to convert the range of extents * from unwritten to real. Do allocations in a loop until * we have covered the range passed in. + * + * Note that we open code the transaction allocation here + * to pass KM_NOFS--we can't risk to recursing back into + * the filesystem here as we might be asked to write out + * the same inode that we complete here and might deadlock + * on the iolock. */ - tp = xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE); + xfs_wait_for_freeze(mp, SB_FREEZE_TRANS); + tp = _xfs_trans_alloc(mp, XFS_TRANS_STRAT_WRITE, KM_NOFS); tp->t_flags |= XFS_TRANS_RESERVE; error = xfs_trans_reserve(tp, resblks, XFS_WRITE_LOG_RES(mp), 0, --- linux-2.6.32.orig/fs/xfs/quota/xfs_qm_bhv.c +++ linux-2.6.32/fs/xfs/quota/xfs_qm_bhv.c @@ -59,7 +59,7 @@ be64_to_cpu(dp->d_blk_hardlimit); if (limit && statp->f_blocks > limit) { statp->f_blocks = limit; - statp->f_bfree = + statp->f_bfree = statp->f_bavail = (statp->f_blocks > be64_to_cpu(dp->d_bcount)) ? (statp->f_blocks - be64_to_cpu(dp->d_bcount)) : 0; } --- linux-2.6.32.orig/fs/xfs/quota/xfs_qm_syscalls.c +++ linux-2.6.32/fs/xfs/quota/xfs_qm_syscalls.c @@ -893,7 +893,8 @@ uint flags) { ASSERT(mp->m_quotainfo); - xfs_inode_ag_iterator(mp, xfs_dqrele_inode, flags, XFS_ICI_NO_TAG); + xfs_inode_ag_iterator(mp, xfs_dqrele_inode, flags, + XFS_ICI_NO_TAG, 0, NULL); } /*------------------------------------------------------------------------*/ --- linux-2.6.32.orig/fs/xfs/linux-2.6/xfs_aops.c +++ linux-2.6.32/fs/xfs/linux-2.6/xfs_aops.c @@ -204,14 +204,17 @@ } /* - * Update on-disk file size now that data has been written to disk. - * The current in-memory file size is i_size. If a write is beyond - * eof i_new_size will be the intended file size until i_size is - * updated. If this write does not extend all the way to the valid - * file size then restrict this update to the end of the write. + * Update on-disk file size now that data has been written to disk. The + * current in-memory file size is i_size. If a write is beyond eof i_new_size + * will be the intended file size until i_size is updated. If this write does + * not extend all the way to the valid file size then restrict this update to + * the end of the write. + * + * This function does not block as blocking on the inode lock in IO completion + * can lead to IO completion order dependency deadlocks.. If it can't get the + * inode ilock it will return EAGAIN. Callers must handle this. */ - -STATIC void +STATIC int xfs_setfilesize( xfs_ioend_t *ioend) { @@ -222,9 +225,11 @@ ASSERT(ioend->io_type != IOMAP_READ); if (unlikely(ioend->io_error)) - return; + return 0; + + if (!xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) + return EAGAIN; - xfs_ilock(ip, XFS_ILOCK_EXCL); isize = xfs_ioend_new_eof(ioend); if (isize) { ip->i_d.di_size = isize; @@ -232,6 +237,28 @@ } xfs_iunlock(ip, XFS_ILOCK_EXCL); + return 0; +} + +/* + * Schedule IO completion handling on a xfsdatad if this was + * the final hold on this ioend. If we are asked to wait, + * flush the workqueue. + */ +STATIC void +xfs_finish_ioend( + xfs_ioend_t *ioend, + int wait) +{ + if (atomic_dec_and_test(&ioend->io_remaining)) { + struct workqueue_struct *wq; + + wq = (ioend->io_type == IOMAP_UNWRITTEN) ? + xfsconvertd_workqueue : xfsdatad_workqueue; + queue_work(wq, &ioend->io_work); + if (wait) + flush_workqueue(wq); + } } /* @@ -243,9 +270,23 @@ { xfs_ioend_t *ioend = container_of(work, xfs_ioend_t, io_work); + int error; - xfs_setfilesize(ioend); - xfs_destroy_ioend(ioend); + /* + * If we didn't complete processing of the ioend, requeue it to the + * tail of the workqueue for another attempt later. Otherwise destroy + * it. + */ + error = xfs_setfilesize(ioend); + if (error == EAGAIN) { + atomic_inc(&ioend->io_remaining); + xfs_finish_ioend(ioend, 0); + /* ensure we don't spin on blocked ioends */ + delay(1); + } else { + ASSERT(!error); + xfs_destroy_ioend(ioend); + } } /* @@ -257,9 +298,23 @@ { xfs_ioend_t *ioend = container_of(work, xfs_ioend_t, io_work); + int error; - xfs_setfilesize(ioend); - xfs_destroy_ioend(ioend); + /* + * If we didn't complete processing of the ioend, requeue it to the + * tail of the workqueue for another attempt later. Otherwise destroy + * it. + */ + error = xfs_setfilesize(ioend); + if (error == EAGAIN) { + atomic_inc(&ioend->io_remaining); + xfs_finish_ioend(ioend, 0); + /* ensure we don't spin on blocked ioends */ + delay(1); + } else { + ASSERT(!error); + xfs_destroy_ioend(ioend); + } } /* @@ -279,13 +334,25 @@ size_t size = ioend->io_size; if (likely(!ioend->io_error)) { + int error; if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) { - int error; error = xfs_iomap_write_unwritten(ip, offset, size); if (error) ioend->io_error = error; } - xfs_setfilesize(ioend); + /* + * If we didn't complete processing of the ioend, requeue it to the + * tail of the workqueue for another attempt later. Otherwise destroy + * it. + */ + error = xfs_setfilesize(ioend); + if (error == EAGAIN) { + atomic_inc(&ioend->io_remaining); + xfs_finish_ioend(ioend, 0); + /* ensure we don't spin on blocked ioends */ + delay(1); + return; + } } xfs_destroy_ioend(ioend); } @@ -304,27 +371,6 @@ } /* - * Schedule IO completion handling on a xfsdatad if this was - * the final hold on this ioend. If we are asked to wait, - * flush the workqueue. - */ -STATIC void -xfs_finish_ioend( - xfs_ioend_t *ioend, - int wait) -{ - if (atomic_dec_and_test(&ioend->io_remaining)) { - struct workqueue_struct *wq = xfsdatad_workqueue; - if (ioend->io_work.func == xfs_end_bio_unwritten) - wq = xfsconvertd_workqueue; - - queue_work(wq, &ioend->io_work); - if (wait) - flush_workqueue(wq); - } -} - -/* * 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 --- linux-2.6.32.orig/fs/xfs/linux-2.6/xfs_sync.c +++ linux-2.6.32/fs/xfs/linux-2.6/xfs_sync.c @@ -64,7 +64,6 @@ * as the tree is sparse and a gang lookup walks to find * the number of objects requested. */ - read_lock(&pag->pag_ici_lock); if (tag == XFS_ICI_NO_TAG) { nr_found = radix_tree_gang_lookup(&pag->pag_ici_root, (void **)&ip, *first_index, 1); @@ -73,7 +72,7 @@ (void **)&ip, *first_index, 1, tag); } if (!nr_found) - goto unlock; + return NULL; /* * Update the index for the next lookup. Catch overflows @@ -83,13 +82,8 @@ */ *first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); if (*first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) - goto unlock; - + return NULL; return ip; - -unlock: - read_unlock(&pag->pag_ici_lock); - return NULL; } STATIC int @@ -99,7 +93,9 @@ int (*execute)(struct xfs_inode *ip, struct xfs_perag *pag, int flags), int flags, - int tag) + int tag, + int exclusive, + int *nr_to_scan) { struct xfs_perag *pag = &mp->m_perag[ag]; uint32_t first_index; @@ -113,10 +109,20 @@ int error = 0; xfs_inode_t *ip; + if (exclusive) + write_lock(&pag->pag_ici_lock); + else + read_lock(&pag->pag_ici_lock); ip = xfs_inode_ag_lookup(mp, pag, &first_index, tag); - if (!ip) + if (!ip) { + if (exclusive) + write_unlock(&pag->pag_ici_lock); + else + read_unlock(&pag->pag_ici_lock); break; + } + /* execute releases pag->pag_ici_lock */ error = execute(ip, pag, flags); if (error == EAGAIN) { skipped++; @@ -124,13 +130,12 @@ } if (error) last_error = error; - /* - * bail out if the filesystem is corrupted. - */ + + /* bail out if the filesystem is corrupted. */ if (error == EFSCORRUPTED) break; - } while (1); + } while ((*nr_to_scan)--); if (skipped) { delay(1); @@ -147,22 +152,31 @@ int (*execute)(struct xfs_inode *ip, struct xfs_perag *pag, int flags), int flags, - int tag) + int tag, + int exclusive, + int *nr_to_scan) { int error = 0; int last_error = 0; xfs_agnumber_t ag; + int nr; + nr = nr_to_scan ? *nr_to_scan : INT_MAX; for (ag = 0; ag < mp->m_sb.sb_agcount; ag++) { if (!mp->m_perag[ag].pag_ici_init) continue; - error = xfs_inode_ag_walk(mp, ag, execute, flags, tag); + error = xfs_inode_ag_walk(mp, ag, execute, flags, tag, + exclusive, &nr); if (error) { last_error = error; if (error == EFSCORRUPTED) break; } + if (nr <= 0) + break; } + if (nr_to_scan) + *nr_to_scan = nr; return XFS_ERROR(last_error); } @@ -173,30 +187,31 @@ struct xfs_perag *pag) { struct inode *inode = VFS_I(ip); + int error = EFSCORRUPTED; /* nothing to sync during shutdown */ - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) { - read_unlock(&pag->pag_ici_lock); - return EFSCORRUPTED; - } + if (XFS_FORCED_SHUTDOWN(ip->i_mount)) + goto out_unlock; - /* - * If we can't get a reference on the inode, it must be in reclaim. - * Leave it for the reclaim code to flush. Also avoid inodes that - * haven't been fully initialised. - */ - if (!igrab(inode)) { - read_unlock(&pag->pag_ici_lock); - return ENOENT; - } - read_unlock(&pag->pag_ici_lock); + /* avoid new or reclaimable inodes. Leave for reclaim code to flush */ + error = ENOENT; + if (xfs_iflags_test(ip, XFS_INEW | XFS_IRECLAIMABLE | XFS_IRECLAIM)) + goto out_unlock; + + /* If we can't grab the inode, it must on it's way to reclaim. */ + if (!igrab(inode)) + goto out_unlock; - if (is_bad_inode(inode) || xfs_iflags_test(ip, XFS_INEW)) { + if (is_bad_inode(inode)) { IRELE(ip); - return ENOENT; + goto out_unlock; } - return 0; + /* inode is valid */ + error = 0; +out_unlock: + read_unlock(&pag->pag_ici_lock); + return error; } STATIC int @@ -281,7 +296,7 @@ ASSERT((flags & ~(SYNC_TRYLOCK|SYNC_WAIT)) == 0); error = xfs_inode_ag_iterator(mp, xfs_sync_inode_data, flags, - XFS_ICI_NO_TAG); + XFS_ICI_NO_TAG, 0, NULL); if (error) return XFS_ERROR(error); @@ -303,7 +318,7 @@ ASSERT((flags & ~SYNC_WAIT) == 0); return xfs_inode_ag_iterator(mp, xfs_sync_inode_attr, flags, - XFS_ICI_NO_TAG); + XFS_ICI_NO_TAG, 0, NULL); } STATIC int @@ -663,67 +678,6 @@ kthread_stop(mp->m_sync_task); } -int -xfs_reclaim_inode( - xfs_inode_t *ip, - int locked, - int sync_mode) -{ - xfs_perag_t *pag = xfs_get_perag(ip->i_mount, ip->i_ino); - - /* The hash lock here protects a thread in xfs_iget_core from - * racing with us on linking the inode back with a vnode. - * Once we have the XFS_IRECLAIM flag set it will not touch - * us. - */ - write_lock(&pag->pag_ici_lock); - spin_lock(&ip->i_flags_lock); - if (__xfs_iflags_test(ip, XFS_IRECLAIM) || - !__xfs_iflags_test(ip, XFS_IRECLAIMABLE)) { - spin_unlock(&ip->i_flags_lock); - write_unlock(&pag->pag_ici_lock); - if (locked) { - xfs_ifunlock(ip); - xfs_iunlock(ip, XFS_ILOCK_EXCL); - } - return -EAGAIN; - } - __xfs_iflags_set(ip, XFS_IRECLAIM); - spin_unlock(&ip->i_flags_lock); - write_unlock(&pag->pag_ici_lock); - xfs_put_perag(ip->i_mount, pag); - - /* - * If the inode is still dirty, then flush it out. If the inode - * is not in the AIL, then it will be OK to flush it delwri as - * long as xfs_iflush() does not keep any references to the inode. - * We leave that decision up to xfs_iflush() since it has the - * knowledge of whether it's OK to simply do a delwri flush of - * the inode or whether we need to wait until the inode is - * pulled from the AIL. - * We get the flush lock regardless, though, just to make sure - * we don't free it while it is being flushed. - */ - if (!locked) { - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_iflock(ip); - } - - /* - * In the case of a forced shutdown we rely on xfs_iflush() to - * wait for the inode to be unpinned before returning an error. - */ - if (!is_bad_inode(VFS_I(ip)) && xfs_iflush(ip, sync_mode) == 0) { - /* synchronize with xfs_iflush_done */ - xfs_iflock(ip); - xfs_ifunlock(ip); - } - - xfs_iunlock(ip, XFS_ILOCK_EXCL); - xfs_ireclaim(ip); - return 0; -} - void __xfs_inode_set_reclaim_tag( struct xfs_perag *pag, @@ -732,6 +686,7 @@ radix_tree_tag_set(&pag->pag_ici_root, XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), XFS_ICI_RECLAIM_TAG); + pag->pag_ici_reclaimable++; } /* @@ -746,12 +701,12 @@ xfs_mount_t *mp = ip->i_mount; xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); - read_lock(&pag->pag_ici_lock); + write_lock(&pag->pag_ici_lock); spin_lock(&ip->i_flags_lock); __xfs_inode_set_reclaim_tag(pag, ip); __xfs_iflags_set(ip, XFS_IRECLAIMABLE); spin_unlock(&ip->i_flags_lock); - read_unlock(&pag->pag_ici_lock); + write_unlock(&pag->pag_ici_lock); xfs_put_perag(mp, pag); } @@ -763,22 +718,59 @@ { radix_tree_tag_clear(&pag->pag_ici_root, XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); + pag->pag_ici_reclaimable--; } STATIC int -xfs_reclaim_inode_now( +xfs_reclaim_inode( struct xfs_inode *ip, struct xfs_perag *pag, - int flags) + int sync_mode) { - /* ignore if already under reclaim */ - if (xfs_iflags_test(ip, XFS_IRECLAIM)) { - read_unlock(&pag->pag_ici_lock); + /* + * The radix tree lock here protects a thread in xfs_iget from racing + * with us starting reclaim on the inode. Once we have the + * XFS_IRECLAIM flag set it will not touch us. + */ + spin_lock(&ip->i_flags_lock); + ASSERT_ALWAYS(__xfs_iflags_test(ip, XFS_IRECLAIMABLE)); + if (__xfs_iflags_test(ip, XFS_IRECLAIM)) { + /* ignore as it is already under reclaim */ + spin_unlock(&ip->i_flags_lock); + write_unlock(&pag->pag_ici_lock); return 0; } - read_unlock(&pag->pag_ici_lock); + __xfs_iflags_set(ip, XFS_IRECLAIM); + spin_unlock(&ip->i_flags_lock); + write_unlock(&pag->pag_ici_lock); + + /* + * If the inode is still dirty, then flush it out. If the inode + * is not in the AIL, then it will be OK to flush it delwri as + * long as xfs_iflush() does not keep any references to the inode. + * We leave that decision up to xfs_iflush() since it has the + * knowledge of whether it's OK to simply do a delwri flush of + * the inode or whether we need to wait until the inode is + * pulled from the AIL. + * We get the flush lock regardless, though, just to make sure + * we don't free it while it is being flushed. + */ + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_iflock(ip); - return xfs_reclaim_inode(ip, 0, flags); + /* + * In the case of a forced shutdown we rely on xfs_iflush() to + * wait for the inode to be unpinned before returning an error. + */ + if (!is_bad_inode(VFS_I(ip)) && xfs_iflush(ip, sync_mode) == 0) { + /* synchronize with xfs_iflush_done */ + xfs_iflock(ip); + xfs_ifunlock(ip); + } + + xfs_iunlock(ip, XFS_ILOCK_EXCL); + xfs_ireclaim(ip); + return 0; } int @@ -786,6 +778,89 @@ xfs_mount_t *mp, int mode) { - return xfs_inode_ag_iterator(mp, xfs_reclaim_inode_now, mode, - XFS_ICI_RECLAIM_TAG); + return xfs_inode_ag_iterator(mp, xfs_reclaim_inode, mode, + XFS_ICI_RECLAIM_TAG, 1, NULL); +} + +/* + * Shrinker infrastructure. + * + * This is all far more complex than it needs to be. It adds a global list of + * mounts because the shrinkers can only call a global context. We need to make + * the shrinkers pass a context to avoid the need for global state. + */ +static LIST_HEAD(xfs_mount_list); +static struct rw_semaphore xfs_mount_list_lock; + +static int +xfs_reclaim_inode_shrink( + int nr_to_scan, + gfp_t gfp_mask) +{ + struct xfs_mount *mp; + xfs_agnumber_t ag; + int reclaimable = 0; + + if (nr_to_scan) { + if (!(gfp_mask & __GFP_FS)) + return -1; + + down_read(&xfs_mount_list_lock); + list_for_each_entry(mp, &xfs_mount_list, m_mplist) { + xfs_inode_ag_iterator(mp, xfs_reclaim_inode, 0, + XFS_ICI_RECLAIM_TAG, 1, &nr_to_scan); + if (nr_to_scan <= 0) + break; + } + up_read(&xfs_mount_list_lock); + } + + down_read(&xfs_mount_list_lock); + list_for_each_entry(mp, &xfs_mount_list, m_mplist) { + for (ag = 0; ag < mp->m_sb.sb_agcount; ag++) { + + if (!mp->m_perag[ag].pag_ici_init) + continue; + reclaimable += mp->m_perag[ag].pag_ici_reclaimable; + } + } + up_read(&xfs_mount_list_lock); + return reclaimable; +} + +static struct shrinker xfs_inode_shrinker = { + .shrink = xfs_reclaim_inode_shrink, + .seeks = DEFAULT_SEEKS, +}; + +void __init +xfs_inode_shrinker_init(void) +{ + init_rwsem(&xfs_mount_list_lock); + register_shrinker(&xfs_inode_shrinker); +} + +void +xfs_inode_shrinker_destroy(void) +{ + ASSERT(list_empty(&xfs_mount_list)); + unregister_shrinker(&xfs_inode_shrinker); +} + +void +xfs_inode_shrinker_register( + struct xfs_mount *mp) +{ + down_write(&xfs_mount_list_lock); + list_add_tail(&mp->m_mplist, &xfs_mount_list); + up_write(&xfs_mount_list_lock); +} + +void +xfs_inode_shrinker_unregister( + struct xfs_mount *mp) +{ + down_write(&xfs_mount_list_lock); + list_del(&mp->m_mplist); + up_write(&xfs_mount_list_lock); } --- linux-2.6.32.orig/fs/xfs/linux-2.6/xfs_super.c +++ linux-2.6.32/fs/xfs/linux-2.6/xfs_super.c @@ -930,13 +930,37 @@ */ STATIC void xfs_fs_destroy_inode( - struct inode *inode) + struct inode *inode) { - xfs_inode_t *ip = XFS_I(inode); + struct xfs_inode *ip = XFS_I(inode); + + xfs_itrace_entry(ip); XFS_STATS_INC(vn_reclaim); - if (xfs_reclaim(ip)) - panic("%s: cannot reclaim 0x%p\n", __func__, inode); + + /* bad inode, get out here ASAP */ + if (is_bad_inode(inode)) + goto out_reclaim; + + xfs_ioend_wait(ip); + + ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0); + + /* + * We should never get here with one of the reclaim flags already set. + */ + ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); + ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_IRECLAIM)); + + /* + * We always use background reclaim here because even if the + * inode is clean, it still may be under IO and hence we have + * to take the flush lock. The background reclaim path handles + * this more efficiently than we can here, so simply let background + * reclaim tear down all inodes. + */ +out_reclaim: + xfs_inode_set_reclaim_tag(ip); } /* @@ -1140,6 +1164,7 @@ xfs_unmountfs(mp); xfs_freesb(mp); + xfs_inode_shrinker_unregister(mp); xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); xfs_dmops_put(mp); @@ -1299,6 +1324,8 @@ /* ro -> rw */ if ((mp->m_flags & XFS_MOUNT_RDONLY) && !(*flags & MS_RDONLY)) { + __uint64_t resblks; + mp->m_flags &= ~XFS_MOUNT_RDONLY; if (mp->m_flags & XFS_MOUNT_BARRIER) xfs_mountfs_check_barriers(mp); @@ -1316,11 +1343,37 @@ } mp->m_update_flags = 0; } + + /* + * Fill out the reserve pool if it is empty. Use the stashed + * value if it is non-zero, otherwise go with the default. + */ + if (mp->m_resblks_save) { + resblks = mp->m_resblks_save; + mp->m_resblks_save = 0; + } else { + resblks = mp->m_sb.sb_dblocks; + do_div(resblks, 20); + resblks = min_t(__uint64_t, resblks, 1024); + } + xfs_reserve_blocks(mp, &resblks, NULL); } /* rw -> ro */ if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & MS_RDONLY)) { + /* + * After we have synced the data but before we sync the + * metadata, we need to free up the reserve block pool so that + * the used block count in the superblock on disk is correct at + * the end of the remount. Stash the current reserve pool size + * so that if we get remounted rw, we can return it to the same + * size. + */ + __uint64_t resblks = 0; + xfs_quiesce_data(mp); + mp->m_resblks_save = mp->m_resblks; + xfs_reserve_blocks(mp, &resblks, NULL); xfs_quiesce_attr(mp); mp->m_flags |= XFS_MOUNT_RDONLY; } @@ -1503,6 +1556,8 @@ if (error) goto fail_vnrele; + xfs_inode_shrinker_register(mp); + kfree(mtpt); xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); @@ -1842,6 +1897,7 @@ goto out_cleanup_procfs; vfs_initquota(); + xfs_inode_shrinker_init(); error = register_filesystem(&xfs_fs_type); if (error) @@ -1871,6 +1927,7 @@ { vfs_exitquota(); unregister_filesystem(&xfs_fs_type); + xfs_inode_shrinker_destroy(); xfs_sysctl_unregister(); xfs_cleanup_procfs(); xfs_buf_terminate(); --- linux-2.6.32.orig/fs/xfs/linux-2.6/xfs_sync.h +++ linux-2.6.32/fs/xfs/linux-2.6/xfs_sync.h @@ -44,7 +44,6 @@ void xfs_flush_inodes(struct xfs_inode *ip); -int xfs_reclaim_inode(struct xfs_inode *ip, int locked, int sync_mode); int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); @@ -55,6 +54,11 @@ int xfs_sync_inode_valid(struct xfs_inode *ip, struct xfs_perag *pag); int xfs_inode_ag_iterator(struct xfs_mount *mp, int (*execute)(struct xfs_inode *ip, struct xfs_perag *pag, int flags), - int flags, int tag); + int flags, int tag, int write_lock, int *nr_to_scan); + +void xfs_inode_shrinker_init(void); +void xfs_inode_shrinker_destroy(void); +void xfs_inode_shrinker_register(struct xfs_mount *mp); +void xfs_inode_shrinker_unregister(struct xfs_mount *mp); #endif --- linux-2.6.32.orig/fs/xfs/linux-2.6/xfs_iops.c +++ linux-2.6.32/fs/xfs/linux-2.6/xfs_iops.c @@ -573,8 +573,8 @@ bf.l_len = len; xfs_ilock(ip, XFS_IOLOCK_EXCL); - error = xfs_change_file_space(ip, XFS_IOC_RESVSP, &bf, - 0, XFS_ATTR_NOLOCK); + error = -xfs_change_file_space(ip, XFS_IOC_RESVSP, &bf, + 0, XFS_ATTR_NOLOCK); if (!error && !(mode & FALLOC_FL_KEEP_SIZE) && offset + len > i_size_read(inode)) new_size = offset + len; @@ -585,7 +585,7 @@ iattr.ia_valid = ATTR_SIZE; iattr.ia_size = new_size; - error = xfs_setattr(ip, &iattr, XFS_ATTR_NOLOCK); + error = -xfs_setattr(ip, &iattr, XFS_ATTR_NOLOCK); } xfs_iunlock(ip, XFS_IOLOCK_EXCL); --- linux-2.6.32.orig/fs/xfs/linux-2.6/xfs_acl.c +++ linux-2.6.32/fs/xfs/linux-2.6/xfs_acl.c @@ -250,8 +250,9 @@ if (mode != inode->i_mode) { struct iattr iattr; - iattr.ia_valid = ATTR_MODE; + iattr.ia_valid = ATTR_MODE | ATTR_CTIME; iattr.ia_mode = mode; + iattr.ia_ctime = current_fs_time(inode->i_sb); error = -xfs_setattr(XFS_I(inode), &iattr, XFS_ATTR_NOACL); } --- linux-2.6.32.orig/fs/cifs/readdir.c +++ linux-2.6.32/fs/cifs/readdir.c @@ -666,6 +666,7 @@ min(len, max_len), nlt, cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR); + pqst->len -= nls_nullsize(nlt); } else { pqst->name = filename; pqst->len = len; --- linux-2.6.32.orig/fs/cifs/cifssmb.c +++ linux-2.6.32/fs/cifs/cifssmb.c @@ -1430,6 +1430,8 @@ __u32 bytes_sent; __u16 byte_count; + *nbytes = 0; + /* cFYI(1, ("write at %lld %d bytes", offset, count));*/ if (tcon->ses == NULL) return -ECONNABORTED; @@ -1512,11 +1514,18 @@ cifs_stats_inc(&tcon->num_writes); if (rc) { cFYI(1, ("Send error in write = %d", rc)); - *nbytes = 0; } else { *nbytes = le16_to_cpu(pSMBr->CountHigh); *nbytes = (*nbytes) << 16; *nbytes += le16_to_cpu(pSMBr->Count); + + /* + * Mask off high 16 bits when bytes written as returned by the + * server is greater than bytes requested by the client. Some + * OS/2 servers are known to set incorrect CountHigh values. + */ + if (*nbytes > count) + *nbytes &= 0xFFFF; } cifs_buf_release(pSMB); @@ -1605,6 +1614,14 @@ *nbytes = le16_to_cpu(pSMBr->CountHigh); *nbytes = (*nbytes) << 16; *nbytes += le16_to_cpu(pSMBr->Count); + + /* + * Mask off high 16 bits when bytes written as returned by the + * server is greater than bytes requested by the client. OS/2 + * servers are known to set incorrect CountHigh values. + */ + if (*nbytes > count) + *nbytes &= 0xFFFF; } /* cifs_small_buf_release(pSMB); */ /* Freed earlier now in SendReceive2 */ --- linux-2.6.32.orig/fs/cifs/inode.c +++ linux-2.6.32/fs/cifs/inode.c @@ -610,6 +610,16 @@ if (CIFS_I(inode)->uniqueid != fattr->cf_uniqueid) return 0; + /* + * uh oh -- it's a directory. We can't use it since hardlinked dirs are + * verboten. Disable serverino and return it as if it were found, the + * caller can discard it, generate a uniqueid and retry the find + */ + if (S_ISDIR(inode->i_mode) && !list_empty(&inode->i_dentry)) { + fattr->cf_flags |= CIFS_FATTR_INO_COLLISION; + cifs_autodisable_serverino(CIFS_SB(inode->i_sb)); + } + return 1; } @@ -629,15 +639,22 @@ unsigned long hash; struct inode *inode; +retry_iget5_locked: cFYI(1, ("looking for uniqueid=%llu", fattr->cf_uniqueid)); /* hash down to 32-bits on 32-bit arch */ hash = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid); inode = iget5_locked(sb, hash, cifs_find_inode, cifs_init_inode, fattr); - - /* we have fattrs in hand, update the inode */ if (inode) { + /* was there a problematic inode number collision? */ + if (fattr->cf_flags & CIFS_FATTR_INO_COLLISION) { + iput(inode); + fattr->cf_uniqueid = iunique(sb, ROOT_I); + fattr->cf_flags &= ~CIFS_FATTR_INO_COLLISION; + goto retry_iget5_locked; + } + cifs_fattr_to_inode(inode, fattr); if (sb->s_flags & MS_NOATIME) inode->i_flags |= S_NOATIME | S_NOCMTIME; --- linux-2.6.32.orig/fs/cifs/cifsglob.h +++ linux-2.6.32/fs/cifs/cifsglob.h @@ -499,6 +499,7 @@ #define CIFS_FATTR_DFS_REFERRAL 0x1 #define CIFS_FATTR_DELETE_PENDING 0x2 #define CIFS_FATTR_NEED_REVAL 0x4 +#define CIFS_FATTR_INO_COLLISION 0x8 struct cifs_fattr { u32 cf_flags; --- linux-2.6.32.orig/fs/cifs/connect.c +++ linux-2.6.32/fs/cifs/connect.c @@ -2287,12 +2287,12 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb, char *mount_data_global, const char *devname) { - int rc = 0; + int rc; int xid; struct smb_vol *volume_info; - struct cifsSesInfo *pSesInfo = NULL; - struct cifsTconInfo *tcon = NULL; - struct TCP_Server_Info *srvTcp = NULL; + struct cifsSesInfo *pSesInfo; + struct cifsTconInfo *tcon; + struct TCP_Server_Info *srvTcp; char *full_path; char *mount_data = mount_data_global; #ifdef CONFIG_CIFS_DFS_UPCALL @@ -2301,6 +2301,10 @@ int referral_walks_count = 0; try_mount_again: #endif + rc = 0; + tcon = NULL; + pSesInfo = NULL; + srvTcp = NULL; full_path = NULL; xid = GetXid(); @@ -2597,6 +2601,7 @@ cleanup_volume_info(&volume_info); referral_walks_count++; + FreeXid(xid); goto try_mount_again; } #else /* No DFS support, return error on mount */ --- linux-2.6.32.orig/fs/cifs/dir.c +++ linux-2.6.32/fs/cifs/dir.c @@ -183,13 +183,14 @@ } int cifs_posix_open(char *full_path, struct inode **pinode, - struct vfsmount *mnt, int mode, int oflags, - __u32 *poplock, __u16 *pnetfid, int xid) + struct vfsmount *mnt, struct super_block *sb, + int mode, int oflags, + __u32 *poplock, __u16 *pnetfid, int xid) { int rc; FILE_UNIX_BASIC_INFO *presp_data; __u32 posix_flags = 0; - struct cifs_sb_info *cifs_sb = CIFS_SB(mnt->mnt_sb); + struct cifs_sb_info *cifs_sb = CIFS_SB(sb); struct cifs_fattr fattr; cFYI(1, ("posix open %s", full_path)); @@ -241,7 +242,7 @@ /* get new inode and set it up */ if (*pinode == NULL) { - *pinode = cifs_iget(mnt->mnt_sb, &fattr); + *pinode = cifs_iget(sb, &fattr); if (!*pinode) { rc = -ENOMEM; goto posix_open_ret; @@ -250,7 +251,8 @@ cifs_fattr_to_inode(*pinode, &fattr); } - cifs_new_fileinfo(*pinode, *pnetfid, NULL, mnt, oflags); + if (mnt) + cifs_new_fileinfo(*pinode, *pnetfid, NULL, mnt, oflags); posix_open_ret: kfree(presp_data); @@ -314,13 +316,14 @@ if (nd && (nd->flags & LOOKUP_OPEN)) oflags = nd->intent.open.flags; else - oflags = FMODE_READ; + oflags = FMODE_READ | SMB_O_CREAT; if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) && (CIFS_UNIX_POSIX_PATH_OPS_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))) { - rc = cifs_posix_open(full_path, &newinode, nd->path.mnt, - mode, oflags, &oplock, &fileHandle, xid); + rc = cifs_posix_open(full_path, &newinode, + nd ? nd->path.mnt : NULL, + inode->i_sb, mode, oflags, &oplock, &fileHandle, xid); /* EIO could indicate that (posix open) operation is not supported, despite what server claimed in capability negotation. EREMOTE indicates DFS junction, which is not @@ -677,6 +680,7 @@ (nd->flags & LOOKUP_OPEN) && !pTcon->broken_posix_open && (nd->intent.open.flags & O_CREAT)) { rc = cifs_posix_open(full_path, &newInode, nd->path.mnt, + parent_dir_inode->i_sb, nd->intent.open.create_mode, nd->intent.open.flags, &oplock, &fileHandle, xid); --- linux-2.6.32.orig/fs/cifs/file.c +++ linux-2.6.32/fs/cifs/file.c @@ -295,10 +295,12 @@ (CIFS_UNIX_POSIX_PATH_OPS_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))) { int oflags = (int) cifs_posix_convert_flags(file->f_flags); + oflags |= SMB_O_CREAT; /* can not refresh inode info since size could be stale */ rc = cifs_posix_open(full_path, &inode, file->f_path.mnt, - cifs_sb->mnt_file_mode /* ignored */, - oflags, &oplock, &netfid, xid); + inode->i_sb, + cifs_sb->mnt_file_mode /* ignored */, + oflags, &oplock, &netfid, xid); if (rc == 0) { cFYI(1, ("posix open succeeded")); /* no need for special case handling of setting mode @@ -510,8 +512,9 @@ int oflags = (int) cifs_posix_convert_flags(file->f_flags); /* can not refresh inode info since size could be stale */ rc = cifs_posix_open(full_path, NULL, file->f_path.mnt, - cifs_sb->mnt_file_mode /* ignored */, - oflags, &oplock, &netfid, xid); + inode->i_sb, + cifs_sb->mnt_file_mode /* ignored */, + oflags, &oplock, &netfid, xid); if (rc == 0) { cFYI(1, ("posix reopen succeeded")); goto reopen_success; --- linux-2.6.32.orig/fs/cifs/cifsproto.h +++ linux-2.6.32/fs/cifs/cifsproto.h @@ -95,8 +95,10 @@ __u16 fileHandle, struct file *file, struct vfsmount *mnt, unsigned int oflags); extern int cifs_posix_open(char *full_path, struct inode **pinode, - struct vfsmount *mnt, int mode, int oflags, - __u32 *poplock, __u16 *pnetfid, int xid); + struct vfsmount *mnt, + struct super_block *sb, + int mode, int oflags, + __u32 *poplock, __u16 *pnetfid, int xid); extern void cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info, struct cifs_sb_info *cifs_sb); --- linux-2.6.32.orig/fs/btrfs/acl.c +++ linux-2.6.32/fs/btrfs/acl.c @@ -157,6 +157,9 @@ int ret = 0; struct posix_acl *acl = NULL; + if (!is_owner_or_cap(inode)) + return -EPERM; + if (value) { acl = posix_acl_from_xattr(value, size); if (acl == NULL) { --- linux-2.6.32.orig/fs/btrfs/ioctl.c +++ linux-2.6.32/fs/btrfs/ioctl.c @@ -959,12 +959,17 @@ ret = -EBADF; goto out_drop_write; } + src = src_file->f_dentry->d_inode; ret = -EINVAL; if (src == inode) goto out_fput; + /* the src must be open for reading */ + if (!(src_file->f_mode & FMODE_READ)) + goto out_fput; + ret = -EISDIR; if (S_ISDIR(src->i_mode) || S_ISDIR(inode->i_mode)) goto out_fput; --- linux-2.6.32.orig/fs/notify/inotify/inotify_fsnotify.c +++ linux-2.6.32/fs/notify/inotify/inotify_fsnotify.c @@ -28,6 +28,7 @@ #include /* struct path */ #include /* kmem_* */ #include +#include #include "inotify.h" @@ -121,7 +122,7 @@ if (warned) return 0; - warned = false; + warned = true; entry = p; ientry = container_of(entry, struct inotify_inode_mark_entry, fsn_entry); @@ -146,6 +147,7 @@ idr_for_each(&group->inotify_data.idr, idr_callback, group); idr_remove_all(&group->inotify_data.idr); idr_destroy(&group->inotify_data.idr); + free_uid(group->inotify_data.user); } void inotify_free_event_priv(struct fsnotify_event_private_data *fsn_event_priv) --- linux-2.6.32.orig/fs/notify/inotify/inotify_user.c +++ linux-2.6.32/fs/notify/inotify/inotify_user.c @@ -556,21 +556,24 @@ if (unlikely(!idr_pre_get(&group->inotify_data.idr, GFP_KERNEL))) goto out_err; + /* we are putting the mark on the idr, take a reference */ + fsnotify_get_mark(&tmp_ientry->fsn_entry); + spin_lock(&group->inotify_data.idr_lock); ret = idr_get_new_above(&group->inotify_data.idr, &tmp_ientry->fsn_entry, - group->inotify_data.last_wd, + group->inotify_data.last_wd+1, &tmp_ientry->wd); spin_unlock(&group->inotify_data.idr_lock); if (ret) { + /* we didn't get on the idr, drop the idr reference */ + fsnotify_put_mark(&tmp_ientry->fsn_entry); + /* idr was out of memory allocate and try again */ if (ret == -EAGAIN) goto retry; goto out_err; } - /* we put the mark on the idr, take a reference */ - fsnotify_get_mark(&tmp_ientry->fsn_entry); - /* we are on the idr, now get on the inode */ ret = fsnotify_add_mark(&tmp_ientry->fsn_entry, group, inode); if (ret) { @@ -638,7 +641,7 @@ spin_lock_init(&group->inotify_data.idr_lock); idr_init(&group->inotify_data.idr); - group->inotify_data.last_wd = 1; + group->inotify_data.last_wd = 0; group->inotify_data.user = user; group->inotify_data.fa = NULL; --- linux-2.6.32.orig/crypto/authenc.c +++ linux-2.6.32/crypto/authenc.c @@ -46,6 +46,12 @@ char tail[]; }; +static void authenc_request_complete(struct aead_request *req, int err) +{ + if (err != -EINPROGRESS) + aead_request_complete(req, err); +} + static int crypto_authenc_setkey(struct crypto_aead *authenc, const u8 *key, unsigned int keylen) { @@ -142,7 +148,7 @@ crypto_aead_authsize(authenc), 1); out: - aead_request_complete(req, err); + authenc_request_complete(req, err); } static void authenc_geniv_ahash_done(struct crypto_async_request *areq, int err) @@ -208,7 +214,7 @@ err = crypto_ablkcipher_decrypt(abreq); out: - aead_request_complete(req, err); + authenc_request_complete(req, err); } static void authenc_verify_ahash_done(struct crypto_async_request *areq, @@ -245,7 +251,7 @@ err = crypto_ablkcipher_decrypt(abreq); out: - aead_request_complete(req, err); + authenc_request_complete(req, err); } static u8 *crypto_authenc_ahash_fb(struct aead_request *req, unsigned int flags) @@ -379,7 +385,7 @@ err = crypto_authenc_genicv(areq, iv, 0); } - aead_request_complete(areq, err); + authenc_request_complete(areq, err); } static int crypto_authenc_encrypt(struct aead_request *req) @@ -418,7 +424,7 @@ err = crypto_authenc_genicv(areq, greq->giv, 0); } - aead_request_complete(areq, err); + authenc_request_complete(areq, err); } static int crypto_authenc_givencrypt(struct aead_givcrypt_request *req) --- linux-2.6.32.orig/crypto/cryptd.c +++ linux-2.6.32/crypto/cryptd.c @@ -711,6 +711,13 @@ } EXPORT_SYMBOL_GPL(cryptd_ahash_child); +struct shash_desc *cryptd_shash_desc(struct ahash_request *req) +{ + struct cryptd_hash_request_ctx *rctx = ahash_request_ctx(req); + return &rctx->desc; +} +EXPORT_SYMBOL_GPL(cryptd_shash_desc); + void cryptd_free_ahash(struct cryptd_ahash *tfm) { crypto_free_ahash(&tfm->base); --- linux-2.6.32.orig/crypto/Kconfig +++ linux-2.6.32/crypto/Kconfig @@ -440,6 +440,15 @@ See also: +config CRYPTO_GHASH_CLMUL_NI_INTEL + tristate "GHASH digest algorithm (CLMUL-NI accelerated)" + depends on (X86 || UML_X86) && 64BIT + select CRYPTO_SHASH + select CRYPTO_CRYPTD + help + GHASH is message digest algorithm for GCM (Galois/Counter Mode). + The implementation is accelerated by CLMUL-NI of Intel. + comment "Ciphers" config CRYPTO_AES --- linux-2.6.32.orig/crypto/async_tx/async_raid6_recov.c +++ linux-2.6.32/crypto/async_tx/async_raid6_recov.c @@ -324,6 +324,7 @@ async_raid6_2data_recov(int disks, size_t bytes, int faila, int failb, struct page **blocks, struct async_submit_ctl *submit) { + void *scribble = submit->scribble; int non_zero_srcs, i; BUG_ON(faila == failb); @@ -332,11 +333,13 @@ pr_debug("%s: disks: %d len: %zu\n", __func__, disks, bytes); - /* we need to preserve the contents of 'blocks' for the async - * case, so punt to synchronous if a scribble buffer is not available + /* if a dma resource is not available or a scribble buffer is not + * available punt to the synchronous path. In the 'dma not + * available' case be sure to use the scribble buffer to + * preserve the content of 'blocks' as the caller intended. */ - if (!submit->scribble) { - void **ptrs = (void **) blocks; + if (!async_dma_find_channel(DMA_PQ) || !scribble) { + void **ptrs = scribble ? scribble : (void **) blocks; async_tx_quiesce(&submit->depend_tx); for (i = 0; i < disks; i++) @@ -406,11 +409,13 @@ pr_debug("%s: disks: %d len: %zu\n", __func__, disks, bytes); - /* we need to preserve the contents of 'blocks' for the async - * case, so punt to synchronous if a scribble buffer is not available + /* if a dma resource is not available or a scribble buffer is not + * available punt to the synchronous path. In the 'dma not + * available' case be sure to use the scribble buffer to + * preserve the content of 'blocks' as the caller intended. */ - if (!scribble) { - void **ptrs = (void **) blocks; + if (!async_dma_find_channel(DMA_PQ) || !scribble) { + void **ptrs = scribble ? scribble : (void **) blocks; async_tx_quiesce(&submit->depend_tx); for (i = 0; i < disks; i++)